@carto/kepler.gl 0.1.0-alpha.0 → 0.1.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/action-wrapper.d.ts +115 -115
- package/dist/actions/action-wrapper.js +190 -0
- package/dist/actions/actions.d.ts +195 -195
- package/dist/actions/actions.js +194 -0
- package/dist/actions/identity-actions.d.ts +61 -61
- package/dist/actions/identity-actions.js +101 -0
- package/dist/actions/index.d.ts +9 -9
- package/dist/actions/index.js +144 -0
- package/dist/actions/map-state-actions.d.ts +69 -69
- package/dist/actions/map-state-actions.js +106 -0
- package/dist/actions/map-style-actions.d.ts +146 -146
- package/dist/actions/map-style-actions.js +176 -0
- package/dist/actions/provider-actions.d.ts +153 -153
- package/dist/actions/provider-actions.js +144 -0
- package/dist/actions/ui-state-actions.d.ts +300 -300
- package/dist/actions/ui-state-actions.js +356 -0
- package/dist/actions/vis-state-actions.d.ts +821 -821
- package/dist/actions/vis-state-actions.js +900 -0
- package/dist/cloud-providers/index.d.ts +2 -2
- package/dist/cloud-providers/index.js +22 -0
- package/dist/cloud-providers/provider.d.ts +176 -176
- package/dist/cloud-providers/provider.js +346 -0
- package/dist/components/bottom-widget.d.ts +47 -47
- package/dist/components/bottom-widget.js +217 -0
- package/dist/components/common/action-panel.d.ts +27 -27
- package/dist/components/common/action-panel.js +133 -0
- package/dist/components/common/animation-control/animation-control.d.ts +24 -24
- package/dist/components/common/animation-control/animation-control.js +129 -0
- package/dist/components/common/animation-control/animation-controller.d.ts +16 -16
- package/dist/components/common/animation-control/animation-controller.js +270 -0
- package/dist/components/common/animation-control/animation-speed-slider.d.ts +12 -12
- package/dist/components/common/animation-control/animation-speed-slider.js +88 -0
- package/dist/components/common/animation-control/floating-time-display.d.ts +9 -9
- package/dist/components/common/animation-control/floating-time-display.js +149 -0
- package/dist/components/common/animation-control/playback-controls.d.ts +72 -72
- package/dist/components/common/animation-control/playback-controls.js +261 -0
- package/dist/components/common/animation-control/speed-control.d.ts +13 -13
- package/dist/components/common/animation-control/speed-control.js +70 -0
- package/dist/components/common/checkbox.d.ts +35 -35
- package/dist/components/common/checkbox.js +117 -0
- package/dist/components/common/color-legend.d.ts +43 -43
- package/dist/components/common/color-legend.js +205 -0
- package/dist/components/common/data-table/button.d.ts +8 -8
- package/dist/components/common/data-table/button.js +53 -0
- package/dist/components/common/data-table/canvas.d.ts +2 -2
- package/dist/components/common/data-table/canvas.js +43 -0
- package/dist/components/common/data-table/cell-size.d.ts +36 -36
- package/dist/components/common/data-table/cell-size.js +170 -0
- package/dist/components/common/data-table/grid.d.ts +7 -7
- package/dist/components/common/data-table/grid.js +90 -0
- package/dist/components/common/data-table/index.d.ts +143 -143
- package/dist/components/common/data-table/index.js +469 -0
- package/dist/components/common/data-table/option-dropdown.d.ts +14 -14
- package/dist/components/common/data-table/option-dropdown.js +99 -0
- package/dist/components/common/dataset-label.d.ts +10 -10
- package/dist/components/common/dataset-label.js +44 -0
- package/dist/components/common/error-boundary.d.ts +16 -16
- package/dist/components/common/error-boundary.js +76 -0
- package/dist/components/common/field-selector.d.ts +47 -47
- package/dist/components/common/field-selector.js +214 -0
- package/dist/components/common/field-token.d.ts +45 -45
- package/dist/components/common/field-token.js +47 -0
- package/dist/components/common/file-uploader/file-drop.d.ts +54 -54
- package/dist/components/common/file-uploader/file-drop.js +213 -0
- package/dist/components/common/file-uploader/file-upload-progress.d.ts +8 -8
- package/dist/components/common/file-uploader/file-upload-progress.js +103 -0
- package/dist/components/common/file-uploader/file-upload.d.ts +27 -27
- package/dist/components/common/file-uploader/file-upload.js +263 -0
- package/dist/components/common/file-uploader/upload-button.d.ts +8 -8
- package/dist/components/common/file-uploader/upload-button.js +76 -0
- package/dist/components/common/histogram-plot.d.ts +3 -3
- package/dist/components/common/histogram-plot.js +112 -0
- package/dist/components/common/icons/add.d.ts +9 -9
- package/dist/components/common/icons/add.js +58 -0
- package/dist/components/common/icons/anchor_window.d.ts +11 -11
- package/dist/components/common/icons/anchor_window.js +51 -0
- package/dist/components/common/icons/arrow-down-alt.d.ts +9 -9
- package/dist/components/common/icons/arrow-down-alt.js +58 -0
- package/dist/components/common/icons/arrow-down-solid.d.ts +9 -9
- package/dist/components/common/icons/arrow-down-solid.js +58 -0
- package/dist/components/common/icons/arrow-down.d.ts +9 -9
- package/dist/components/common/icons/arrow-down.js +58 -0
- package/dist/components/common/icons/arrow-left.d.ts +9 -9
- package/dist/components/common/icons/arrow-left.js +61 -0
- package/dist/components/common/icons/arrow-right.d.ts +9 -9
- package/dist/components/common/icons/arrow-right.js +58 -0
- package/dist/components/common/icons/arrow-up-alt.d.ts +9 -9
- package/dist/components/common/icons/arrow-up-alt.js +59 -0
- package/dist/components/common/icons/arrow-up-solid.d.ts +9 -9
- package/dist/components/common/icons/arrow-up-solid.js +58 -0
- package/dist/components/common/icons/arrow-up.d.ts +9 -9
- package/dist/components/common/icons/arrow-up.js +58 -0
- package/dist/components/common/icons/base.d.ts +29 -29
- package/dist/components/common/icons/base.js +94 -0
- package/dist/components/common/icons/bug.d.ts +9 -9
- package/dist/components/common/icons/bug.js +60 -0
- package/dist/components/common/icons/cancel.d.ts +9 -9
- package/dist/components/common/icons/cancel.js +58 -0
- package/dist/components/common/icons/checkmark.d.ts +10 -10
- package/dist/components/common/icons/checkmark.js +64 -0
- package/dist/components/common/icons/chevron-right.js +68 -0
- package/dist/components/common/icons/clipboard.d.ts +9 -9
- package/dist/components/common/icons/clipboard.js +59 -0
- package/dist/components/common/icons/clock.d.ts +9 -9
- package/dist/components/common/icons/clock.js +60 -0
- package/dist/components/common/icons/close.d.ts +9 -9
- package/dist/components/common/icons/close.js +63 -0
- package/dist/components/common/icons/code-alt.d.ts +9 -9
- package/dist/components/common/icons/code-alt.js +61 -0
- package/dist/components/common/icons/copy.d.ts +9 -9
- package/dist/components/common/icons/copy.js +63 -0
- package/dist/components/common/icons/crosshairs.d.ts +9 -9
- package/dist/components/common/icons/crosshairs.js +61 -0
- package/dist/components/common/icons/cube-3d.d.ts +9 -9
- package/dist/components/common/icons/cube-3d.js +62 -0
- package/dist/components/common/icons/cursor-click.d.ts +9 -9
- package/dist/components/common/icons/cursor-click.js +62 -0
- package/dist/components/common/icons/data-table.d.ts +10 -10
- package/dist/components/common/icons/data-table.js +59 -0
- package/dist/components/common/icons/db.d.ts +10 -10
- package/dist/components/common/icons/db.js +59 -0
- package/dist/components/common/icons/delete.d.ts +9 -9
- package/dist/components/common/icons/delete.js +60 -0
- package/dist/components/common/icons/docs.d.ts +9 -9
- package/dist/components/common/icons/docs.js +74 -0
- package/dist/components/common/icons/drag-n-drop.d.ts +9 -9
- package/dist/components/common/icons/drag-n-drop.js +60 -0
- package/dist/components/common/icons/draw-polygon.d.ts +10 -10
- package/dist/components/common/icons/draw-polygon.js +78 -0
- package/dist/components/common/icons/email.d.ts +9 -9
- package/dist/components/common/icons/email.js +62 -0
- package/dist/components/common/icons/expand.d.ts +9 -9
- package/dist/components/common/icons/expand.js +60 -0
- package/dist/components/common/icons/eye-seen.d.ts +9 -9
- package/dist/components/common/icons/eye-seen.js +60 -0
- package/dist/components/common/icons/eye-unseen.d.ts +9 -9
- package/dist/components/common/icons/eye-unseen.js +60 -0
- package/dist/components/common/icons/file-type.d.ts +8 -8
- package/dist/components/common/icons/file-type.js +52 -0
- package/dist/components/common/icons/file.d.ts +9 -9
- package/dist/components/common/icons/file.js +58 -0
- package/dist/components/common/icons/files.d.ts +9 -9
- package/dist/components/common/icons/files.js +58 -0
- package/dist/components/common/icons/filter-funnel.d.ts +9 -9
- package/dist/components/common/icons/filter-funnel.js +58 -0
- package/dist/components/common/icons/free-window.d.ts +11 -11
- package/dist/components/common/icons/free-window.js +51 -0
- package/dist/components/common/icons/gear.d.ts +9 -9
- package/dist/components/common/icons/gear.js +60 -0
- package/dist/components/common/icons/hash.d.ts +9 -9
- package/dist/components/common/icons/hash.js +58 -0
- package/dist/components/common/icons/histogram.d.ts +9 -9
- package/dist/components/common/icons/histogram.js +58 -0
- package/dist/components/common/icons/index.d.ts +78 -78
- package/dist/components/common/icons/index.js +551 -0
- package/dist/components/common/icons/info.d.ts +12 -12
- package/dist/components/common/icons/info.js +71 -0
- package/dist/components/common/icons/layers.d.ts +9 -9
- package/dist/components/common/icons/layers.js +58 -0
- package/dist/components/common/icons/left-arrow.d.ts +9 -9
- package/dist/components/common/icons/left-arrow.js +61 -0
- package/dist/components/common/icons/legend.d.ts +9 -9
- package/dist/components/common/icons/legend.js +58 -0
- package/dist/components/common/icons/line-chart.d.ts +9 -9
- package/dist/components/common/icons/line-chart.js +58 -0
- package/dist/components/common/icons/login.d.ts +9 -9
- package/dist/components/common/icons/login.js +61 -0
- package/dist/components/common/icons/logout.d.ts +9 -9
- package/dist/components/common/icons/logout.js +60 -0
- package/dist/components/common/icons/map-icon.d.ts +11 -11
- package/dist/components/common/icons/map-icon.js +65 -0
- package/dist/components/common/icons/map.d.ts +11 -11
- package/dist/components/common/icons/map.js +65 -0
- package/dist/components/common/icons/messages.d.ts +9 -9
- package/dist/components/common/icons/messages.js +58 -0
- package/dist/components/common/icons/minus.d.ts +9 -9
- package/dist/components/common/icons/minus.js +58 -0
- package/dist/components/common/icons/order-by-dataset.d.ts +12 -12
- package/dist/components/common/icons/order-by-dataset.js +51 -0
- package/dist/components/common/icons/order-by-list.d.ts +12 -12
- package/dist/components/common/icons/order-by-list.js +43 -0
- package/dist/components/common/icons/pause.d.ts +9 -9
- package/dist/components/common/icons/pause.js +58 -0
- package/dist/components/common/icons/picture.d.ts +9 -9
- package/dist/components/common/icons/picture.js +58 -0
- package/dist/components/common/icons/pin.d.ts +9 -9
- package/dist/components/common/icons/pin.js +62 -0
- package/dist/components/common/icons/play.d.ts +9 -9
- package/dist/components/common/icons/play.js +58 -0
- package/dist/components/common/icons/polygon.d.ts +10 -10
- package/dist/components/common/icons/polygon.js +80 -0
- package/dist/components/common/icons/rectangle.d.ts +10 -10
- package/dist/components/common/icons/rectangle.js +81 -0
- package/dist/components/common/icons/reduce.d.ts +9 -9
- package/dist/components/common/icons/reduce.js +61 -0
- package/dist/components/common/icons/reset.d.ts +9 -9
- package/dist/components/common/icons/reset.js +58 -0
- package/dist/components/common/icons/rocket.d.ts +9 -9
- package/dist/components/common/icons/rocket.js +58 -0
- package/dist/components/common/icons/save.d.ts +9 -9
- package/dist/components/common/icons/save.js +60 -0
- package/dist/components/common/icons/save2.d.ts +9 -9
- package/dist/components/common/icons/save2.js +64 -0
- package/dist/components/common/icons/search.d.ts +9 -9
- package/dist/components/common/icons/search.js +60 -0
- package/dist/components/common/icons/settings.d.ts +9 -9
- package/dist/components/common/icons/settings.js +60 -0
- package/dist/components/common/icons/share.d.ts +9 -9
- package/dist/components/common/icons/share.js +58 -0
- package/dist/components/common/icons/split.d.ts +9 -9
- package/dist/components/common/icons/split.js +86 -0
- package/dist/components/common/icons/square-select.d.ts +9 -9
- package/dist/components/common/icons/square-select.js +60 -0
- package/dist/components/common/icons/swap-horizontal.js +66 -0
- package/dist/components/common/icons/table.d.ts +9 -9
- package/dist/components/common/icons/table.js +58 -0
- package/dist/components/common/icons/trash.d.ts +9 -9
- package/dist/components/common/icons/trash.js +60 -0
- package/dist/components/common/icons/upload.d.ts +9 -9
- package/dist/components/common/icons/upload.js +58 -0
- package/dist/components/common/icons/vert-dots.d.ts +9 -9
- package/dist/components/common/icons/vert-dots.js +96 -0
- package/dist/components/common/icons/vert-three-dots.d.ts +9 -9
- package/dist/components/common/icons/vert-three-dots.js +71 -0
- package/dist/components/common/icons/warning.d.ts +10 -10
- package/dist/components/common/icons/warning.js +72 -0
- package/dist/components/common/image-preview.d.ts +15 -15
- package/dist/components/common/image-preview.js +79 -0
- package/dist/components/common/info-helper.d.ts +11 -11
- package/dist/components/common/info-helper.js +79 -0
- package/dist/components/common/item-selector/accessor.d.ts +7 -7
- package/dist/components/common/item-selector/accessor.js +54 -0
- package/dist/components/common/item-selector/chickleted-input.d.ts +21 -21
- package/dist/components/common/item-selector/chickleted-input.js +96 -0
- package/dist/components/common/item-selector/dropdown-list.d.ts +68 -68
- package/dist/components/common/item-selector/dropdown-list.js +279 -0
- package/dist/components/common/item-selector/item-selector-submenu.js +88 -0
- package/dist/components/common/item-selector/item-selector.d.ts +91 -91
- package/dist/components/common/item-selector/item-selector.js +282 -0
- package/dist/components/common/item-selector/typeahead.d.ts +115 -115
- package/dist/components/common/item-selector/typeahead.js +425 -0
- package/dist/components/common/line-chart.d.ts +34 -34
- package/dist/components/common/line-chart.js +127 -0
- package/dist/components/common/loading-spinner.d.ts +9 -9
- package/dist/components/common/loading-spinner.js +64 -0
- package/dist/components/common/logo.d.ts +8 -8
- package/dist/components/common/logo.js +85 -0
- package/dist/components/common/map-layer-selector.d.ts +13 -13
- package/dist/components/common/map-layer-selector.js +56 -0
- package/dist/components/common/modal.d.ts +49 -49
- package/dist/components/common/modal.js +165 -0
- package/dist/components/common/portaled.d.ts +527 -527
- package/dist/components/common/portaled.js +277 -0
- package/dist/components/common/progress-bar.d.ts +12 -12
- package/dist/components/common/progress-bar.js +64 -0
- package/dist/components/common/range-brush.d.ts +19 -19
- package/dist/components/common/range-brush.js +277 -0
- package/dist/components/common/range-plot.d.ts +35 -35
- package/dist/components/common/range-plot.js +130 -0
- package/dist/components/common/range-slider.d.ts +32 -32
- package/dist/components/common/range-slider.js +305 -0
- package/dist/components/common/slider/mouse-event.d.ts +27 -27
- package/dist/components/common/slider/mouse-event.js +115 -0
- package/dist/components/common/slider/slider-bar-handle.d.ts +29 -29
- package/dist/components/common/slider/slider-bar-handle.js +105 -0
- package/dist/components/common/slider/slider-handle.d.ts +33 -33
- package/dist/components/common/slider/slider-handle.js +151 -0
- package/dist/components/common/slider/slider.d.ts +70 -70
- package/dist/components/common/slider/slider.js +221 -0
- package/dist/components/common/styled-components.d.ts +119 -119
- package/dist/components/common/styled-components.js +300 -0
- package/dist/components/common/switch.d.ts +16 -16
- package/dist/components/common/switch.js +38 -0
- package/dist/components/common/time-range-slider-time-title.d.ts +9 -9
- package/dist/components/common/time-range-slider-time-title.js +79 -0
- package/dist/components/common/time-range-slider.d.ts +32 -32
- package/dist/components/common/time-range-slider.js +116 -0
- package/dist/components/common/time-slider-marker.d.ts +21 -21
- package/dist/components/common/time-slider-marker.js +136 -0
- package/dist/components/common/tippy-tooltip.d.ts +4 -4
- package/dist/components/common/tippy-tooltip.js +115 -0
- package/dist/components/common/toolbar-item.d.ts +14 -14
- package/dist/components/common/toolbar-item.js +75 -0
- package/dist/components/common/toolbar.d.ts +5 -5
- package/dist/components/common/toolbar.js +44 -0
- package/dist/components/common/vertical-toolbar.d.ts +3 -3
- package/dist/components/common/vertical-toolbar.js +33 -0
- package/dist/components/container.d.ts +39 -39
- package/dist/components/container.js +203 -0
- package/dist/components/context.d.ts +7 -7
- package/dist/components/context.js +38 -0
- package/dist/components/editor/constants.d.ts +17 -17
- package/dist/components/editor/constants.js +45 -0
- package/dist/components/editor/editor.d.ts +29 -29
- package/dist/components/editor/editor.js +226 -0
- package/dist/components/editor/feature-action-panel.d.ts +27 -27
- package/dist/components/editor/feature-action-panel.js +141 -0
- package/dist/components/editor/feature-styles.d.ts +24 -24
- package/dist/components/editor/feature-styles.js +67 -0
- package/dist/components/editor/handle-style.d.ts +38 -38
- package/dist/components/editor/handle-style.js +78 -0
- package/dist/components/filters/components.d.ts +1 -3
- package/dist/components/filters/components.js +31 -0
- package/dist/components/filters/filter-panels/filter-panel-with-field-select.d.ts +10 -10
- package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +96 -0
- package/dist/components/filters/filter-panels/multi-select-filter-panel.d.ts +9 -9
- package/dist/components/filters/filter-panels/multi-select-filter-panel.js +66 -0
- package/dist/components/filters/filter-panels/new-filter-panel.d.ts +12 -12
- package/dist/components/filters/filter-panels/new-filter-panel.js +85 -0
- package/dist/components/filters/filter-panels/polygon-filter-panel.d.ts +9 -9
- package/dist/components/filters/filter-panels/polygon-filter-panel.js +85 -0
- package/dist/components/filters/filter-panels/range-filter-panel.d.ts +9 -9
- package/dist/components/filters/filter-panels/range-filter-panel.js +66 -0
- package/dist/components/filters/filter-panels/single-select-filter-panel.d.ts +9 -9
- package/dist/components/filters/filter-panels/single-select-filter-panel.js +66 -0
- package/dist/components/filters/filter-panels/time-range-filter-panel.d.ts +8 -8
- package/dist/components/filters/filter-panels/time-range-filter-panel.js +80 -0
- package/dist/components/filters/filter-panels/types.d.ts +36 -36
- package/dist/components/filters/filter-panels/types.js +6 -0
- package/dist/components/filters/index.d.ts +5 -5
- package/dist/components/filters/index.js +42 -0
- package/dist/components/filters/multi-select-filter.d.ts +3 -3
- package/dist/components/filters/multi-select-filter.js +48 -0
- package/dist/components/filters/polygon-filter.d.ts +4 -4
- package/dist/components/filters/polygon-filter.js +85 -0
- package/dist/components/filters/range-filter.d.ts +8 -8
- package/dist/components/filters/range-filter.js +48 -0
- package/dist/components/filters/single-select-filter.d.ts +3 -3
- package/dist/components/filters/single-select-filter.js +57 -0
- package/dist/components/filters/time-range-filter.d.ts +28 -28
- package/dist/components/filters/time-range-filter.js +75 -0
- package/dist/components/filters/time-widget.d.ts +14 -14
- package/dist/components/filters/time-widget.js +162 -0
- package/dist/components/filters/types.d.ts +53 -53
- package/dist/components/filters/types.js +6 -0
- package/dist/components/geocoder/geocoder.d.ts +33 -33
- package/dist/components/geocoder/geocoder.js +282 -0
- package/dist/components/geocoder-panel.d.ts +28 -28
- package/dist/components/geocoder-panel.js +192 -0
- package/dist/components/index.d.ts +165 -165
- package/dist/components/index.js +1474 -0
- package/dist/components/injector.d.ts +25 -25
- package/dist/components/injector.js +162 -0
- package/dist/components/kepler-gl.d.ts +302 -302
- package/dist/components/kepler-gl.js +487 -0
- package/dist/components/map/coordinate-info.d.ts +7 -7
- package/dist/components/map/coordinate-info.js +59 -0
- package/dist/components/map/layer-hover-info.d.ts +13 -13
- package/dist/components/map/layer-hover-info.js +167 -0
- package/dist/components/map/layer-selector-panel.d.ts +22 -22
- package/dist/components/map/layer-selector-panel.js +103 -0
- package/dist/components/map/locale-panel.d.ts +16 -16
- package/dist/components/map/locale-panel.js +103 -0
- package/dist/components/map/map-control-panel.d.ts +14 -14
- package/dist/components/map/map-control-panel.js +97 -0
- package/dist/components/map/map-control-toolbar.d.ts +2 -2
- package/dist/components/map/map-control-toolbar.js +35 -0
- package/dist/components/map/map-control-tooltip.d.ts +7 -7
- package/dist/components/map/map-control-tooltip.js +48 -0
- package/dist/components/map/map-control.d.ts +44 -44
- package/dist/components/map/map-control.js +79 -0
- package/dist/components/map/map-draw-panel.d.ts +21 -21
- package/dist/components/map/map-draw-panel.js +131 -0
- package/dist/components/map/map-legend-panel.d.ts +23 -23
- package/dist/components/map/map-legend-panel.js +152 -0
- package/dist/components/map/map-legend.d.ts +55 -55
- package/dist/components/map/map-legend.js +234 -0
- package/dist/components/map/map-popover.d.ts +37 -37
- package/dist/components/map/map-popover.js +191 -0
- package/dist/components/map/split-map-button.d.ts +19 -19
- package/dist/components/map/split-map-button.js +89 -0
- package/dist/components/map/toggle-3d-button.d.ts +16 -16
- package/dist/components/map/toggle-3d-button.js +79 -0
- package/dist/components/map-container.d.ts +58 -58
- package/dist/components/map-container.js +502 -0
- package/dist/components/maps-layout.d.ts +10 -10
- package/dist/components/maps-layout.js +57 -0
- package/dist/components/modal-container.d.ts +65 -65
- package/dist/components/modal-container.js +459 -0
- package/dist/components/modals/add-map-style-modal.d.ts +17 -17
- package/dist/components/modals/add-map-style-modal.js +250 -0
- package/dist/components/modals/cloud-tile.d.ts +15 -15
- package/dist/components/modals/cloud-tile.js +124 -0
- package/dist/components/modals/data-table-modal.d.ts +29 -29
- package/dist/components/modals/data-table-modal.js +223 -0
- package/dist/components/modals/delete-data-modal.d.ts +10 -10
- package/dist/components/modals/delete-data-modal.js +58 -0
- package/dist/components/modals/error-display.d.ts +6 -6
- package/dist/components/modals/error-display.js +44 -0
- package/dist/components/modals/export-data-modal.d.ts +25 -25
- package/dist/components/modals/export-data-modal.js +194 -0
- package/dist/components/modals/export-image-modal.d.ts +18 -18
- package/dist/components/modals/export-image-modal.js +139 -0
- package/dist/components/modals/export-map-modal/components.d.ts +8 -8
- package/dist/components/modals/export-map-modal/components.js +51 -0
- package/dist/components/modals/export-map-modal/export-html-map.d.ts +12 -12
- package/dist/components/modals/export-map-modal/export-html-map.js +140 -0
- package/dist/components/modals/export-map-modal/export-json-map.d.ts +9 -9
- package/dist/components/modals/export-map-modal/export-json-map.js +98 -0
- package/dist/components/modals/export-map-modal/export-map-modal.d.ts +27 -27
- package/dist/components/modals/export-map-modal/export-map-modal.js +101 -0
- package/dist/components/modals/image-modal-container.d.ts +18 -18
- package/dist/components/modals/image-modal-container.js +83 -0
- package/dist/components/modals/load-data-modal.d.ts +33 -33
- package/dist/components/modals/load-data-modal.js +93 -0
- package/dist/components/modals/load-storage-map.d.ts +26 -26
- package/dist/components/modals/load-storage-map.js +251 -0
- package/dist/components/modals/loading-dialog.d.ts +7 -7
- package/dist/components/modals/loading-dialog.js +54 -0
- package/dist/components/modals/modal-dialog.d.ts +2 -2
- package/dist/components/modals/modal-dialog.js +33 -0
- package/dist/components/modals/modal-tabs.d.ts +27 -27
- package/dist/components/modals/modal-tabs.js +99 -0
- package/dist/components/modals/overwrite-map-modal.d.ts +16 -16
- package/dist/components/modals/overwrite-map-modal.js +81 -0
- package/dist/components/modals/provider-modal-container.d.ts +23 -23
- package/dist/components/modals/provider-modal-container.js +79 -0
- package/dist/components/modals/save-map-modal.d.ts +29 -29
- package/dist/components/modals/save-map-modal.js +201 -0
- package/dist/components/modals/share-map-modal.d.ts +30 -30
- package/dist/components/modals/share-map-modal.js +188 -0
- package/dist/components/modals/status-panel.d.ts +13 -13
- package/dist/components/modals/status-panel.js +82 -0
- package/dist/components/modals/storage-map-viewer.d.ts +21 -21
- package/dist/components/modals/storage-map-viewer.js +115 -0
- package/dist/components/notification-panel/notification-item.d.ts +66 -66
- package/dist/components/notification-panel/notification-item.js +139 -0
- package/dist/components/notification-panel.d.ts +61 -61
- package/dist/components/notification-panel.js +74 -0
- package/dist/components/performance.d.ts +4 -4
- package/dist/components/performance.js +110 -0
- package/dist/components/plot-container.d.ts +24 -24
- package/dist/components/plot-container.js +240 -0
- package/dist/components/side-panel/cloud-storage-dropdown.d.ts +6 -6
- package/dist/components/side-panel/cloud-storage-dropdown.js +57 -0
- package/dist/components/side-panel/common/dataset-info.d.ts +3 -3
- package/dist/components/side-panel/common/dataset-info.js +50 -0
- package/dist/components/side-panel/common/dataset-tag.d.ts +3 -3
- package/dist/components/side-panel/common/dataset-tag.js +75 -0
- package/dist/components/side-panel/common/dataset-title.d.ts +8 -8
- package/dist/components/side-panel/common/dataset-title.js +185 -0
- package/dist/components/side-panel/common/source-data-catalog.d.ts +9 -9
- package/dist/components/side-panel/common/source-data-catalog.js +66 -0
- package/dist/components/side-panel/common/source-data-selector.d.ts +8 -8
- package/dist/components/side-panel/common/source-data-selector.js +119 -0
- package/dist/components/side-panel/common/types.d.ts +58 -58
- package/dist/components/side-panel/common/types.js +6 -0
- package/dist/components/side-panel/custom-panel.d.ts +9 -9
- package/dist/components/side-panel/custom-panel.js +56 -0
- package/dist/components/side-panel/filter-manager.d.ts +20 -20
- package/dist/components/side-panel/filter-manager.js +113 -0
- package/dist/components/side-panel/filter-panel/filter-panel-header.d.ts +21 -21
- package/dist/components/side-panel/filter-panel/filter-panel-header.js +67 -0
- package/dist/components/side-panel/filter-panel/filter-panel.d.ts +23 -23
- package/dist/components/side-panel/filter-panel/filter-panel.js +110 -0
- package/dist/components/side-panel/interaction-manager.d.ts +14 -14
- package/dist/components/side-panel/interaction-manager.js +51 -0
- package/dist/components/side-panel/interaction-panel/brush-config.d.ts +15 -15
- package/dist/components/side-panel/interaction-panel/brush-config.js +58 -0
- package/dist/components/side-panel/interaction-panel/interaction-panel.d.ts +19 -19
- package/dist/components/side-panel/interaction-panel/interaction-panel.js +137 -0
- package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +28 -28
- package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +204 -0
- package/dist/components/side-panel/interaction-panel/tooltip-config.d.ts +38 -38
- package/dist/components/side-panel/interaction-panel/tooltip-config.js +155 -0
- package/dist/components/side-panel/layer-manager.d.ts +46 -46
- package/dist/components/side-panel/layer-manager.js +185 -0
- package/dist/components/side-panel/layer-panel/add-layer-button.d.ts +10 -10
- package/dist/components/side-panel/layer-panel/add-layer-button.js +147 -0
- package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.d.ts +8 -8
- package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +38 -0
- package/dist/components/side-panel/layer-panel/color-palette.d.ts +13 -13
- package/dist/components/side-panel/layer-panel/color-palette.js +79 -0
- package/dist/components/side-panel/layer-panel/color-range-selector.d.ts +129 -129
- package/dist/components/side-panel/layer-panel/color-range-selector.js +329 -0
- package/dist/components/side-panel/layer-panel/color-selector.d.ts +101 -101
- package/dist/components/side-panel/layer-panel/color-selector.js +177 -0
- package/dist/components/side-panel/layer-panel/column-selector.d.ts +22 -22
- package/dist/components/side-panel/layer-panel/column-selector.js +66 -0
- package/dist/components/side-panel/layer-panel/custom-markers-config-group.d.ts +6 -6
- package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +36 -0
- package/dist/components/side-panel/layer-panel/custom-palette.d.ts +38 -38
- package/dist/components/side-panel/layer-panel/custom-palette.js +278 -0
- package/dist/components/side-panel/layer-panel/custom-picker.d.ts +67 -67
- package/dist/components/side-panel/layer-panel/custom-picker.js +106 -0
- package/dist/components/side-panel/layer-panel/dataset-layer-group.d.ts +24 -24
- package/dist/components/side-panel/layer-panel/dataset-layer-group.js +81 -0
- package/dist/components/side-panel/layer-panel/dataset-layer-section.d.ts +25 -25
- package/dist/components/side-panel/layer-panel/dataset-layer-section.js +74 -0
- package/dist/components/side-panel/layer-panel/dataset-section.d.ts +26 -26
- package/dist/components/side-panel/layer-panel/dataset-section.js +91 -0
- package/dist/components/side-panel/layer-panel/dimension-scale-selector.d.ts +10 -10
- package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +53 -0
- package/dist/components/side-panel/layer-panel/hex-column-config.d.ts +62 -62
- package/dist/components/side-panel/layer-panel/hex-column-config.js +74 -0
- package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.d.ts +8 -8
- package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +18 -0
- package/dist/components/side-panel/layer-panel/layer-column-config.d.ts +20 -20
- package/dist/components/side-panel/layer-panel/layer-column-config.js +86 -0
- package/dist/components/side-panel/layer-panel/layer-config-group.d.ts +37 -37
- package/dist/components/side-panel/layer-panel/layer-config-group.js +209 -0
- package/dist/components/side-panel/layer-panel/layer-configurator.d.ts +415 -415
- package/dist/components/side-panel/layer-panel/layer-configurator.js +977 -0
- package/dist/components/side-panel/layer-panel/layer-list.d.ts +20 -20
- package/dist/components/side-panel/layer-panel/layer-list.js +168 -0
- package/dist/components/side-panel/layer-panel/layer-panel-header.d.ts +43 -43
- package/dist/components/side-panel/layer-panel/layer-panel-header.js +194 -0
- package/dist/components/side-panel/layer-panel/layer-panel.d.ts +40 -40
- package/dist/components/side-panel/layer-panel/layer-panel.js +161 -0
- package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.d.ts +17 -17
- package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +95 -0
- package/dist/components/side-panel/layer-panel/layer-type-list-item.d.ts +11 -11
- package/dist/components/side-panel/layer-panel/layer-type-list-item.js +75 -0
- package/dist/components/side-panel/layer-panel/layer-type-selector.d.ts +23 -23
- package/dist/components/side-panel/layer-panel/layer-type-selector.js +87 -0
- package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.d.ts +23 -23
- package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +106 -0
- package/dist/components/side-panel/layer-panel/panel-view-list-toggle.d.ts +36 -36
- package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +116 -0
- package/dist/components/side-panel/layer-panel/single-color-palette.d.ts +12 -12
- package/dist/components/side-panel/layer-panel/single-color-palette.js +68 -0
- package/dist/components/side-panel/layer-panel/text-label-panel.d.ts +18 -18
- package/dist/components/side-panel/layer-panel/text-label-panel.js +157 -0
- package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.d.ts +35 -35
- package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +148 -0
- package/dist/components/side-panel/layer-panel/vis-config-slider.d.ts +20 -20
- package/dist/components/side-panel/layer-panel/vis-config-slider.js +177 -0
- package/dist/components/side-panel/layer-panel/vis-config-switch.d.ts +16 -16
- package/dist/components/side-panel/layer-panel/vis-config-switch.js +73 -0
- package/dist/components/side-panel/map-manager.d.ts +21 -21
- package/dist/components/side-panel/map-manager.js +133 -0
- package/dist/components/side-panel/map-style-panel/map-layer-selector.d.ts +19 -19
- package/dist/components/side-panel/map-style-panel/map-layer-selector.js +103 -0
- package/dist/components/side-panel/map-style-panel/map-style-selector.d.ts +16 -16
- package/dist/components/side-panel/map-style-panel/map-style-selector.js +80 -0
- package/dist/components/side-panel/panel-dropdown.d.ts +18 -18
- package/dist/components/side-panel/panel-dropdown.js +71 -0
- package/dist/components/side-panel/panel-header-action.d.ts +20 -20
- package/dist/components/side-panel/panel-header-action.js +103 -0
- package/dist/components/side-panel/panel-header.d.ts +78 -78
- package/dist/components/side-panel/panel-header.js +301 -0
- package/dist/components/side-panel/panel-tab.d.ts +20 -20
- package/dist/components/side-panel/panel-tab.js +72 -0
- package/dist/components/side-panel/panel-title.d.ts +4 -4
- package/dist/components/side-panel/panel-title.js +44 -0
- package/dist/components/side-panel/panel-toggle.d.ts +14 -14
- package/dist/components/side-panel/panel-toggle.js +65 -0
- package/dist/components/side-panel/side-bar.d.ts +76 -76
- package/dist/components/side-panel/side-bar.js +140 -0
- package/dist/components/side-panel.d.ts +134 -134
- package/dist/components/side-panel.js +235 -0
- package/dist/components/types.d.ts +44 -44
- package/dist/components/types.js +6 -0
- package/dist/connect/keplergl-connect.d.ts +5 -5
- package/dist/connect/keplergl-connect.js +59 -0
- package/dist/connect/with-local-selector.d.ts +6 -6
- package/dist/connect/with-local-selector.js +102 -0
- package/dist/constants/action-types.d.ts +111 -111
- package/dist/constants/action-types.js +184 -0
- package/dist/constants/color-palette.d.ts +491 -491
- package/dist/constants/color-palette.js +536 -0
- package/dist/constants/color-ranges.d.ts +24 -24
- package/dist/constants/color-ranges.js +83 -0
- package/dist/constants/custom-color-ranges.d.ts +37 -37
- package/dist/constants/custom-color-ranges.js +410 -0
- package/dist/constants/default-settings.d.ts +773 -773
- package/dist/constants/default-settings.js +832 -0
- package/dist/constants/index.d.ts +9 -9
- package/dist/constants/index.js +387 -0
- package/dist/constants/keyevent.d.ts +2 -2
- package/dist/constants/keyevent.js +43 -0
- package/dist/constants/tooltip.d.ts +165 -165
- package/dist/constants/tooltip.js +202 -0
- package/dist/constants/user-feedbacks.d.ts +5 -5
- package/dist/constants/user-feedbacks.js +32 -0
- package/dist/constants/user-guides.d.ts +9 -9
- package/dist/constants/user-guides.js +36 -0
- package/dist/deckgl-layers/3d-building-layer/3d-building-layer.d.ts +13 -13
- package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +92 -0
- package/dist/deckgl-layers/3d-building-layer/3d-building-utils.d.ts +7 -7
- package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +181 -0
- package/dist/deckgl-layers/3d-building-layer/types.d.ts +37 -0
- package/dist/deckgl-layers/3d-building-layer/types.js +6 -0
- package/dist/deckgl-layers/cluster-layer/cluster-layer.js +312 -0
- package/dist/deckgl-layers/column-layer/enhanced-column-layer.d.ts +6 -6
- package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +75 -0
- package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.d.ts +13 -13
- package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +96 -0
- package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.d.ts +13 -13
- package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +96 -0
- package/dist/deckgl-layers/layer-utils/cluster-utils.js +107 -0
- package/dist/deckgl-layers/layer-utils/cpu-aggregator.d.ts +91 -91
- package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +585 -0
- package/dist/deckgl-layers/layer-utils/shader-utils.d.ts +1 -1
- package/dist/deckgl-layers/layer-utils/shader-utils.js +46 -0
- package/dist/deckgl-layers/line-layer/line-layer.d.ts +12 -12
- package/dist/deckgl-layers/line-layer/line-layer.js +106 -0
- package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.d.ts +8 -8
- package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +80 -0
- package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.d.ts +18 -18
- package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +123 -0
- package/dist/index.d.ts +11 -11
- package/dist/index.js +179 -0
- package/dist/layers/aggregation-layer.d.ts +70 -70
- package/dist/layers/aggregation-layer.js +392 -0
- package/dist/layers/arc-layer/arc-layer-icon.d.ts +16 -16
- package/dist/layers/arc-layer/arc-layer-icon.js +76 -0
- package/dist/layers/arc-layer/arc-layer.d.ts +143 -143
- package/dist/layers/arc-layer/arc-layer.js +252 -0
- package/dist/layers/base-layer.d.ts +436 -436
- package/dist/layers/base-layer.js +1703 -0
- package/dist/layers/cluster-layer/cluster-layer-icon.d.ts +16 -16
- package/dist/layers/cluster-layer/cluster-layer-icon.js +79 -0
- package/dist/layers/cluster-layer/cluster-layer.d.ts +39 -39
- package/dist/layers/cluster-layer/cluster-layer.js +139 -0
- package/dist/layers/default-layer-icon.d.ts +14 -14
- package/dist/layers/default-layer-icon.js +86 -0
- package/dist/layers/geojson-layer/geojson-layer-icon.d.ts +15 -15
- package/dist/layers/geojson-layer/geojson-layer-icon.js +90 -0
- package/dist/layers/geojson-layer/geojson-layer.d.ts +227 -230
- package/dist/layers/geojson-layer/geojson-layer.js +423 -0
- package/dist/layers/geojson-layer/geojson-utils.d.ts +44 -44
- package/dist/layers/geojson-layer/geojson-utils.js +184 -0
- package/dist/layers/grid-layer/grid-layer-icon.d.ts +15 -15
- package/dist/layers/grid-layer/grid-layer-icon.js +135 -0
- package/dist/layers/grid-layer/grid-layer.d.ts +74 -74
- package/dist/layers/grid-layer/grid-layer.js +104 -0
- package/dist/layers/grid-layer/grid-utils.d.ts +24 -24
- package/dist/layers/grid-layer/grid-utils.js +59 -0
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.d.ts +16 -16
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +70 -0
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.d.ts +170 -170
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +321 -0
- package/dist/layers/h3-hexagon-layer/h3-utils.d.ts +20 -20
- package/dist/layers/h3-hexagon-layer/h3-utils.js +86 -0
- package/dist/layers/heatmap-layer/heatmap-layer-icon.d.ts +15 -15
- package/dist/layers/heatmap-layer/heatmap-layer-icon.js +87 -0
- package/dist/layers/heatmap-layer/heatmap-layer.d.ts +144 -144
- package/dist/layers/heatmap-layer/heatmap-layer.js +236 -0
- package/dist/layers/hexagon-layer/hexagon-layer-icon.d.ts +15 -15
- package/dist/layers/hexagon-layer/hexagon-layer-icon.js +99 -0
- package/dist/layers/hexagon-layer/hexagon-layer.d.ts +78 -78
- package/dist/layers/hexagon-layer/hexagon-layer.js +108 -0
- package/dist/layers/hexagon-layer/hexagon-utils.d.ts +7 -7
- package/dist/layers/hexagon-layer/hexagon-utils.js +62 -0
- package/dist/layers/icon-layer/icon-info-modal.d.ts +3 -3
- package/dist/layers/icon-layer/icon-info-modal.js +115 -0
- package/dist/layers/icon-layer/icon-layer-icon.d.ts +15 -15
- package/dist/layers/icon-layer/icon-layer-icon.js +72 -0
- package/dist/layers/icon-layer/icon-layer.d.ts +119 -119
- package/dist/layers/icon-layer/icon-layer.js +366 -0
- package/dist/layers/index.d.ts +53 -53
- package/dist/layers/index.js +105 -0
- package/dist/layers/layer-factory.d.ts +150 -150
- package/dist/layers/layer-factory.js +517 -0
- package/dist/layers/layer-text-label.d.ts +7 -7
- package/dist/layers/layer-text-label.js +60 -0
- package/dist/layers/layer-update.d.ts +9 -9
- package/dist/layers/layer-update.js +73 -0
- package/dist/layers/line-layer/line-layer-icon.d.ts +15 -15
- package/dist/layers/line-layer/line-layer-icon.js +78 -0
- package/dist/layers/line-layer/line-layer.d.ts +136 -136
- package/dist/layers/line-layer/line-layer.js +191 -0
- package/dist/layers/mapbox-utils.d.ts +57 -57
- package/dist/layers/mapbox-utils.js +186 -0
- package/dist/layers/mapboxgl-layer.d.ts +87 -87
- package/dist/layers/mapboxgl-layer.js +201 -0
- package/dist/layers/point-layer/point-layer-icon.d.ts +15 -15
- package/dist/layers/point-layer/point-layer-icon.js +93 -0
- package/dist/layers/point-layer/point-layer.d.ts +272 -272
- package/dist/layers/point-layer/point-layer.js +457 -0
- package/dist/layers/s2-geometry-layer/s2-geometry-layer.d.ts +189 -189
- package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +306 -0
- package/dist/layers/s2-geometry-layer/s2-layer-icon.d.ts +15 -15
- package/dist/layers/s2-geometry-layer/s2-layer-icon.js +69 -0
- package/dist/layers/s2-geometry-layer/s2-utils.d.ts +7 -7
- package/dist/layers/s2-geometry-layer/s2-utils.js +51 -0
- package/dist/layers/scenegraph-layer/scenegraph-info-modal.d.ts +3 -3
- package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +54 -0
- package/dist/layers/scenegraph-layer/scenegraph-layer-icon.d.ts +15 -15
- package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +150 -0
- package/dist/layers/scenegraph-layer/scenegraph-layer.d.ts +80 -80
- package/dist/layers/scenegraph-layer/scenegraph-layer.js +230 -0
- package/dist/layers/trip-layer/trip-info-modal.d.ts +3 -3
- package/dist/layers/trip-layer/trip-info-modal.js +59 -0
- package/dist/layers/trip-layer/trip-layer-icon.d.ts +15 -15
- package/dist/layers/trip-layer/trip-layer-icon.js +88 -0
- package/dist/layers/trip-layer/trip-layer.d.ts +157 -157
- package/dist/layers/trip-layer/trip-layer.js +369 -0
- package/dist/layers/trip-layer/trip-utils.d.ts +31 -31
- package/dist/layers/trip-layer/trip-utils.js +180 -0
- package/dist/layers/types.d.ts +15 -15
- package/dist/layers/types.js +44 -0
- package/dist/localization/formatted-message.d.ts +12 -12
- package/dist/localization/formatted-message.js +39 -0
- package/dist/localization/index.d.ts +5 -5
- package/dist/localization/index.js +54 -0
- package/dist/localization/locales.d.ts +27 -27
- package/dist/localization/locales.js +59 -0
- package/dist/localization/messages.d.ts +4 -4
- package/dist/localization/messages.js +37 -0
- package/dist/localization/translations/ca.d.ts +438 -438
- package/dist/localization/translations/ca.js +466 -0
- package/dist/localization/translations/cn.d.ts +441 -441
- package/dist/localization/translations/cn.js +469 -0
- package/dist/localization/translations/en.d.ts +466 -466
- package/dist/localization/translations/en.js +494 -0
- package/dist/localization/translations/es.d.ts +438 -438
- package/dist/localization/translations/es.js +466 -0
- package/dist/localization/translations/fi.d.ts +410 -410
- package/dist/localization/translations/fi.js +438 -0
- package/dist/localization/translations/ja.d.ts +439 -439
- package/dist/localization/translations/ja.js +467 -0
- package/dist/localization/translations/pt.d.ts +410 -410
- package/dist/localization/translations/pt.js +438 -0
- package/dist/localization/translations/ru.d.ts +447 -447
- package/dist/localization/translations/ru.js +475 -0
- package/dist/middleware/index.d.ts +8 -8
- package/dist/middleware/index.js +44 -0
- package/dist/processors/data-processor.d.ts +242 -242
- package/dist/processors/data-processor.js +721 -0
- package/dist/processors/file-handler.d.ts +28 -28
- package/dist/processors/file-handler.js +357 -0
- package/dist/processors/index.d.ts +3 -3
- package/dist/processors/index.js +39 -0
- package/dist/processors/types.d.ts +21 -21
- package/dist/processors/types.js +6 -0
- package/dist/reducers/combined-updaters.d.ts +52 -52
- package/dist/reducers/combined-updaters.js +180 -0
- package/dist/reducers/composer-helpers.d.ts +21 -21
- package/dist/reducers/composer-helpers.js +111 -0
- package/dist/reducers/composers.d.ts +12 -12
- package/dist/reducers/composers.js +40 -0
- package/dist/reducers/core.d.ts +65 -65
- package/dist/reducers/core.js +119 -0
- package/dist/reducers/index.d.ts +19 -19
- package/dist/reducers/index.js +137 -0
- package/dist/reducers/map-state-updaters.d.ts +96 -96
- package/dist/reducers/map-state-updaters.js +220 -0
- package/dist/reducers/map-state.d.ts +4 -4
- package/dist/reducers/map-state.js +52 -0
- package/dist/reducers/map-style-updaters.d.ts +204 -204
- package/dist/reducers/map-style-updaters.js +473 -0
- package/dist/reducers/map-style.d.ts +16 -16
- package/dist/reducers/map-style.js +51 -0
- package/dist/reducers/provider-state-updaters.d.ts +41 -41
- package/dist/reducers/provider-state-updaters.js +421 -0
- package/dist/reducers/provider-state.d.ts +4 -4
- package/dist/reducers/provider-state.js +53 -0
- package/dist/reducers/root.d.ts +24 -24
- package/dist/reducers/root.js +212 -0
- package/dist/reducers/types.d.ts +16 -16
- package/dist/reducers/types.js +6 -0
- package/dist/reducers/ui-state-updaters.d.ts +433 -433
- package/dist/reducers/ui-state-updaters.js +744 -0
- package/dist/reducers/ui-state.d.ts +3 -3
- package/dist/reducers/ui-state.js +54 -0
- package/dist/reducers/vis-state-merger.d.ts +110 -110
- package/dist/reducers/vis-state-merger.js +569 -0
- package/dist/reducers/vis-state-selectors.d.ts +10 -10
- package/dist/reducers/vis-state-selectors.js +47 -0
- package/dist/reducers/vis-state-updaters.d.ts +645 -645
- package/dist/reducers/vis-state-updaters.js +2102 -0
- package/dist/reducers/vis-state.d.ts +4 -4
- package/dist/reducers/vis-state.js +53 -0
- package/dist/schemas/dataset-schema.d.ts +17 -17
- package/dist/schemas/dataset-schema.js +166 -0
- package/dist/schemas/index.d.ts +8 -8
- package/dist/schemas/index.js +125 -0
- package/dist/schemas/map-state-schema.d.ts +23 -23
- package/dist/schemas/map-state-schema.js +53 -0
- package/dist/schemas/map-style-schema.d.ts +38 -38
- package/dist/schemas/map-style-schema.js +106 -0
- package/dist/schemas/schema-manager.d.ts +271 -271
- package/dist/schemas/schema-manager.js +246 -0
- package/dist/schemas/schema-utils.d.ts +11 -11
- package/dist/schemas/schema-utils.js +58 -0
- package/dist/schemas/schema.d.ts +37 -37
- package/dist/schemas/schema.js +119 -0
- package/dist/schemas/versions.d.ts +5 -5
- package/dist/schemas/versions.js +34 -0
- package/dist/schemas/vis-state-schema.d.ts +214 -214
- package/dist/schemas/vis-state-schema.js +886 -0
- package/dist/styles/base.d.ts +1530 -1530
- package/dist/styles/base.js +1301 -0
- package/dist/styles/index.d.ts +2 -2
- package/dist/styles/index.js +28 -0
- package/dist/styles/media-breakpoints.d.ts +13 -13
- package/dist/styles/media-breakpoints.js +70 -0
- package/dist/tasks/tasks.d.ts +15 -15
- package/dist/tasks/tasks.js +94 -0
- package/dist/templates/export-map-html.d.ts +9 -9
- package/dist/templates/export-map-html.js +42 -0
- package/dist/utils/aggregate-utils.d.ts +3 -3
- package/dist/utils/aggregate-utils.js +71 -0
- package/dist/utils/color-utils.d.ts +44 -44
- package/dist/utils/color-utils.js +144 -0
- package/dist/utils/custom-scales.js +22 -0
- package/dist/utils/data-scale-utils.d.ts +23 -23
- package/dist/utils/data-scale-utils.js +70 -0
- package/dist/utils/data-utils.d.ts +115 -115
- package/dist/utils/data-utils.js +441 -0
- package/dist/utils/dataset-utils.d.ts +38 -38
- package/dist/utils/dataset-utils.js +236 -0
- package/dist/utils/dom-to-image.d.ts +73 -73
- package/dist/utils/dom-to-image.js +479 -0
- package/dist/utils/dom-utils.d.ts +20 -20
- package/dist/utils/dom-utils.js +343 -0
- package/dist/utils/export-utils.d.ts +56 -56
- package/dist/utils/export-utils.js +266 -0
- package/dist/utils/filter-utils.d.ts +267 -267
- package/dist/utils/filter-utils.js +1081 -0
- package/dist/utils/gl-utils.d.ts +1 -1
- package/dist/utils/gl-utils.js +43 -0
- package/dist/utils/gpu-filter-utils.d.ts +28 -28
- package/dist/utils/gpu-filter-utils.js +241 -0
- package/dist/utils/index.d.ts +22 -22
- package/dist/utils/index.js +361 -0
- package/dist/utils/interaction-utils.d.ts +36 -36
- package/dist/utils/interaction-utils.js +170 -0
- package/dist/utils/layer-utils.d.ts +54 -54
- package/dist/utils/layer-utils.js +200 -0
- package/dist/utils/locale-utils.d.ts +2 -2
- package/dist/utils/locale-utils.js +56 -0
- package/dist/utils/map-info-utils.d.ts +1 -1
- package/dist/utils/map-info-utils.js +31 -0
- package/dist/utils/map-style-utils/mapbox-gl-style-editor.d.ts +64 -64
- package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +213 -0
- package/dist/utils/map-style-utils/mapbox-utils.d.ts +3 -3
- package/dist/utils/map-style-utils/mapbox-utils.js +33 -0
- package/dist/utils/mapbox-utils.d.ts +7 -7
- package/dist/utils/mapbox-utils.js +36 -0
- package/dist/utils/notifications-utils.d.ts +54 -54
- package/dist/utils/notifications-utils.js +90 -0
- package/dist/utils/observe-dimensions.d.ts +15 -15
- package/dist/utils/observe-dimensions.js +142 -0
- package/dist/utils/projection-utils.d.ts +12 -12
- package/dist/utils/projection-utils.js +72 -0
- package/dist/utils/searcher-utils.d.ts +1 -1
- package/dist/utils/searcher-utils.js +42 -0
- package/dist/utils/split-map-utils.d.ts +29 -29
- package/dist/utils/split-map-utils.js +112 -0
- package/dist/utils/table-utils/data-container-interface.d.ts +115 -115
- package/dist/utils/table-utils/data-container-interface.js +6 -0
- package/dist/utils/table-utils/data-container-utils.d.ts +29 -29
- package/dist/utils/table-utils/data-container-utils.js +84 -0
- package/dist/utils/table-utils/data-row.d.ts +59 -59
- package/dist/utils/table-utils/data-row.js +124 -0
- package/dist/utils/table-utils/index.d.ts +1 -1
- package/dist/utils/table-utils/index.js +19 -0
- package/dist/utils/table-utils/indexed-data-container.d.ts +34 -34
- package/dist/utils/table-utils/indexed-data-container.js +228 -0
- package/dist/utils/table-utils/kepler-table.d.ts +168 -168
- package/dist/utils/table-utils/kepler-table.js +554 -0
- package/dist/utils/table-utils/row-data-container.d.ts +31 -31
- package/dist/utils/table-utils/row-data-container.js +220 -0
- package/dist/utils/utils.d.ts +98 -98
- package/dist/utils/utils.js +240 -0
- package/package.json +51 -33
- package/src/components/common/portaled.tsx +5 -9
- package/src/constants/action-types.ts +1 -1
- package/src/index.ts +1 -1
- package/src/middleware/index.ts +1 -1
- package/src/reducers/map-style-updaters.ts +1 -1
- package/src/reducers/provider-state-updaters.ts +1 -1
- package/src/reducers/root.ts +1 -1
- package/src/reducers/vis-state-updaters.ts +1 -1
- package/src/schemas/schema.ts +1 -1
- package/src/tasks/tasks.ts +1 -1
- package/dist/bundle.js +0 -54227
- package/dist/bundle.js.map +0 -1
- package/dist/deckgl-layers/layer-utils/cluster-utils.d.ts +0 -12
|
@@ -0,0 +1,569 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.VIS_STATE_MERGERS = void 0;
|
|
8
|
+
exports.createLayerFromConfig = createLayerFromConfig;
|
|
9
|
+
exports.insertLayerAtRightOrder = insertLayerAtRightOrder;
|
|
10
|
+
exports.isValidMerger = isValidMerger;
|
|
11
|
+
exports.mergeAnimationConfig = mergeAnimationConfig;
|
|
12
|
+
exports.mergeFilters = mergeFilters;
|
|
13
|
+
exports.mergeInteractionTooltipConfig = mergeInteractionTooltipConfig;
|
|
14
|
+
exports.mergeInteractions = mergeInteractions;
|
|
15
|
+
exports.mergeLayerBlending = mergeLayerBlending;
|
|
16
|
+
exports.mergeLayers = mergeLayers;
|
|
17
|
+
exports.mergeSplitMaps = mergeSplitMaps;
|
|
18
|
+
exports.serializeLayer = serializeLayer;
|
|
19
|
+
exports.validateColumn = validateColumn;
|
|
20
|
+
exports.validateLayerWithData = validateLayerWithData;
|
|
21
|
+
exports.validateLayersByDatasets = validateLayersByDatasets;
|
|
22
|
+
exports.validateSavedLayerColumns = validateSavedLayerColumns;
|
|
23
|
+
exports.validateSavedTextLabel = validateSavedTextLabel;
|
|
24
|
+
exports.validateSavedVisualChannels = validateSavedVisualChannels;
|
|
25
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
26
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
27
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
28
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
29
|
+
var _lodash = _interopRequireDefault(require("lodash.uniq"));
|
|
30
|
+
var _lodash2 = _interopRequireDefault(require("lodash.pick"));
|
|
31
|
+
var _lodash3 = _interopRequireDefault(require("lodash.flattendeep"));
|
|
32
|
+
var _utils = require("../utils/utils");
|
|
33
|
+
var _filterUtils = require("../utils/filter-utils");
|
|
34
|
+
var _splitMapUtils = require("../utils/split-map-utils");
|
|
35
|
+
var _gpuFilterUtils = require("../utils/gpu-filter-utils");
|
|
36
|
+
var _defaultSettings = require("../constants/default-settings");
|
|
37
|
+
var _schemas = require("../schemas");
|
|
38
|
+
var _excluded = ["enabled"];
|
|
39
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
40
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
41
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
42
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
43
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // Copyright (c) 2022 Uber Technologies, Inc.
|
|
44
|
+
//
|
|
45
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
46
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
47
|
+
// in the Software without restriction, including without limitation the rights
|
|
48
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
49
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
50
|
+
// furnished to do so, subject to the following conditions:
|
|
51
|
+
//
|
|
52
|
+
// The above copyright notice and this permission notice shall be included in
|
|
53
|
+
// all copies or substantial portions of the Software.
|
|
54
|
+
//
|
|
55
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
56
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
57
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
58
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
59
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
60
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
61
|
+
// THE SOFTWARE.
|
|
62
|
+
/**
|
|
63
|
+
* Merge loaded filters with current state, if no fields or data are loaded
|
|
64
|
+
* save it for later
|
|
65
|
+
*
|
|
66
|
+
*/
|
|
67
|
+
function mergeFilters(state, filtersToMerge, fromConfig) {
|
|
68
|
+
if (!Array.isArray(filtersToMerge) || !filtersToMerge.length) {
|
|
69
|
+
return state;
|
|
70
|
+
}
|
|
71
|
+
var _validateFiltersUpdat = (0, _filterUtils.validateFiltersUpdateDatasets)(state, filtersToMerge),
|
|
72
|
+
validated = _validateFiltersUpdat.validated,
|
|
73
|
+
failed = _validateFiltersUpdat.failed,
|
|
74
|
+
updatedDatasets = _validateFiltersUpdat.updatedDatasets;
|
|
75
|
+
|
|
76
|
+
// merge filter with existing
|
|
77
|
+
var updatedFilters = [].concat((0, _toConsumableArray2["default"])(state.filters || []), (0, _toConsumableArray2["default"])(validated));
|
|
78
|
+
updatedFilters = (0, _gpuFilterUtils.resetFilterGpuMode)(updatedFilters);
|
|
79
|
+
updatedFilters = (0, _gpuFilterUtils.assignGpuChannels)(updatedFilters);
|
|
80
|
+
// filter data
|
|
81
|
+
var datasetsToFilter = (0, _lodash["default"])((0, _lodash3["default"])(validated.map(function (f) {
|
|
82
|
+
return f.dataId;
|
|
83
|
+
})));
|
|
84
|
+
var filtered = (0, _filterUtils.applyFiltersToDatasets)(datasetsToFilter, updatedDatasets, updatedFilters, state.layers);
|
|
85
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
86
|
+
filters: updatedFilters,
|
|
87
|
+
datasets: filtered,
|
|
88
|
+
filterToBeMerged: [].concat((0, _toConsumableArray2["default"])(state.filterToBeMerged), (0, _toConsumableArray2["default"])(failed))
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
function createLayerFromConfig(state, layerConfig) {
|
|
92
|
+
// first validate config against dataset
|
|
93
|
+
var _validateLayersByData = validateLayersByDatasets(state.datasets, state.layerClasses, [layerConfig]),
|
|
94
|
+
validated = _validateLayersByData.validated,
|
|
95
|
+
failed = _validateLayersByData.failed;
|
|
96
|
+
if (failed !== null && failed !== void 0 && failed.length || !validated.length) {
|
|
97
|
+
// failed
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
var newLayer = validated[0];
|
|
101
|
+
newLayer.updateLayerDomain(state.datasets);
|
|
102
|
+
return newLayer;
|
|
103
|
+
}
|
|
104
|
+
function serializeLayer(newLayer) {
|
|
105
|
+
var savedVisState = _schemas.visStateSchema[_schemas.CURRENT_VERSION].save({
|
|
106
|
+
layers: [newLayer],
|
|
107
|
+
layerOrder: [0]
|
|
108
|
+
}).visState;
|
|
109
|
+
var loadedLayer = _schemas.visStateSchema[_schemas.CURRENT_VERSION].load(savedVisState).visState.layers[0];
|
|
110
|
+
return loadedLayer;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Merge layers from de-serialized state, if no fields or data are loaded
|
|
115
|
+
* save it for later
|
|
116
|
+
*
|
|
117
|
+
*/
|
|
118
|
+
function mergeLayers(state) {
|
|
119
|
+
var layersToMerge = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
120
|
+
var fromConfig = arguments.length > 2 ? arguments[2] : undefined;
|
|
121
|
+
var preserveLayerOrder = fromConfig ? layersToMerge.map(function (l) {
|
|
122
|
+
return l.id;
|
|
123
|
+
}) : state.preserveLayerOrder;
|
|
124
|
+
if (!Array.isArray(layersToMerge) || !layersToMerge.length) {
|
|
125
|
+
return state;
|
|
126
|
+
}
|
|
127
|
+
var _validateLayersByData2 = validateLayersByDatasets(state.datasets, state.layerClasses, layersToMerge),
|
|
128
|
+
mergedLayer = _validateLayersByData2.validated,
|
|
129
|
+
unmerged = _validateLayersByData2.failed;
|
|
130
|
+
|
|
131
|
+
// put new layers in front of current layers
|
|
132
|
+
var _insertLayerAtRightOr = insertLayerAtRightOrder(state.layers, mergedLayer, state.layerOrder,
|
|
133
|
+
// @ts-expect-error
|
|
134
|
+
preserveLayerOrder),
|
|
135
|
+
newLayerOrder = _insertLayerAtRightOr.newLayerOrder,
|
|
136
|
+
newLayers = _insertLayerAtRightOr.newLayers;
|
|
137
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
138
|
+
layers: newLayers,
|
|
139
|
+
layerOrder: newLayerOrder,
|
|
140
|
+
// @ts-expect-error
|
|
141
|
+
preserveLayerOrder: preserveLayerOrder,
|
|
142
|
+
layerToBeMerged: [].concat((0, _toConsumableArray2["default"])(state.layerToBeMerged), (0, _toConsumableArray2["default"])(unmerged))
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
function insertLayerAtRightOrder(currentLayers, layersToInsert, currentOrder) {
|
|
146
|
+
var preservedOrder = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
147
|
+
// perservedOrder ['a', 'b', 'c'];
|
|
148
|
+
// layerOrder [1, 0, 3]
|
|
149
|
+
// layerOrderMap ['a', 'c']
|
|
150
|
+
var layerOrderQueue = currentOrder.map(function (i) {
|
|
151
|
+
return currentLayers[i].id;
|
|
152
|
+
});
|
|
153
|
+
var newLayers = currentLayers;
|
|
154
|
+
var _iterator = _createForOfIteratorHelper(layersToInsert),
|
|
155
|
+
_step;
|
|
156
|
+
try {
|
|
157
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
158
|
+
var newLayer = _step.value;
|
|
159
|
+
// find where to insert it
|
|
160
|
+
var expectedIdx = preservedOrder.indexOf(newLayer.id);
|
|
161
|
+
// if cant find place to insert, insert at the font
|
|
162
|
+
var insertAt = 0;
|
|
163
|
+
if (expectedIdx > 0) {
|
|
164
|
+
// look for layer to insert after
|
|
165
|
+
var i = expectedIdx + 1;
|
|
166
|
+
var preceedIdx = -1;
|
|
167
|
+
while (i-- > 0 && preceedIdx === -1) {
|
|
168
|
+
var preceedLayer = preservedOrder[i];
|
|
169
|
+
preceedIdx = layerOrderQueue.indexOf(preceedLayer);
|
|
170
|
+
}
|
|
171
|
+
if (preceedIdx > -1) {
|
|
172
|
+
insertAt = preceedIdx + 1;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
layerOrderQueue = (0, _utils.arrayInsert)(layerOrderQueue, insertAt, newLayer.id);
|
|
176
|
+
newLayers = newLayers.concat(newLayer);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// reconstruct layerOrder after insert
|
|
180
|
+
} catch (err) {
|
|
181
|
+
_iterator.e(err);
|
|
182
|
+
} finally {
|
|
183
|
+
_iterator.f();
|
|
184
|
+
}
|
|
185
|
+
var newLayerOrder = layerOrderQueue.map(function (id) {
|
|
186
|
+
return newLayers.findIndex(function (l) {
|
|
187
|
+
return l.id === id;
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
return {
|
|
191
|
+
newLayerOrder: newLayerOrder,
|
|
192
|
+
newLayers: newLayers
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Merge interactions with saved config
|
|
198
|
+
*
|
|
199
|
+
*/
|
|
200
|
+
function mergeInteractions(state, interactionToBeMerged, fromConfig) {
|
|
201
|
+
var merged = {};
|
|
202
|
+
var unmerged = {};
|
|
203
|
+
if (interactionToBeMerged) {
|
|
204
|
+
Object.keys(interactionToBeMerged).forEach(function (key) {
|
|
205
|
+
if (!state.interactionConfig[key]) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
var currentConfig = key === 'tooltip' || key === 'brush' ? state.interactionConfig[key].config : null;
|
|
209
|
+
var _ref = interactionToBeMerged[key] || {},
|
|
210
|
+
enabled = _ref.enabled,
|
|
211
|
+
configSaved = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
212
|
+
var configToMerge = configSaved;
|
|
213
|
+
if (key === 'tooltip') {
|
|
214
|
+
var _mergeInteractionTool = mergeInteractionTooltipConfig(state, configSaved),
|
|
215
|
+
mergedTooltip = _mergeInteractionTool.mergedTooltip,
|
|
216
|
+
unmergedTooltip = _mergeInteractionTool.unmergedTooltip;
|
|
217
|
+
|
|
218
|
+
// merge new dataset tooltips with original dataset tooltips
|
|
219
|
+
configToMerge = {
|
|
220
|
+
fieldsToShow: _objectSpread(_objectSpread({}, currentConfig.fieldsToShow), mergedTooltip)
|
|
221
|
+
};
|
|
222
|
+
if (Object.keys(unmergedTooltip).length) {
|
|
223
|
+
// @ts-expect-error
|
|
224
|
+
unmerged.tooltip = {
|
|
225
|
+
fieldsToShow: unmergedTooltip,
|
|
226
|
+
enabled: Boolean(enabled)
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// @ts-expect-error
|
|
232
|
+
merged[key] = _objectSpread(_objectSpread({}, state.interactionConfig[key]), {}, {
|
|
233
|
+
enabled: Boolean(enabled)
|
|
234
|
+
}, currentConfig ? {
|
|
235
|
+
config: (0, _lodash2["default"])(_objectSpread(_objectSpread({}, currentConfig), configToMerge), Object.keys(currentConfig))
|
|
236
|
+
} : {});
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
240
|
+
// @ts-expect-error
|
|
241
|
+
interactionConfig: _objectSpread(_objectSpread({}, state.interactionConfig), merged),
|
|
242
|
+
interactionToBeMerged: unmerged
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Merge splitMaps config with current visStete.
|
|
248
|
+
* 1. if current map is split, but splitMap DOESNOT contain maps
|
|
249
|
+
* : don't merge anything
|
|
250
|
+
* 2. if current map is NOT split, but splitMaps contain maps
|
|
251
|
+
* : add to splitMaps, and add current layers to splitMaps
|
|
252
|
+
*/
|
|
253
|
+
function mergeSplitMaps(state) {
|
|
254
|
+
var splitMaps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
255
|
+
var fromConfig = arguments.length > 2 ? arguments[2] : undefined;
|
|
256
|
+
var merged = (0, _toConsumableArray2["default"])(state.splitMaps);
|
|
257
|
+
var unmerged = [];
|
|
258
|
+
splitMaps.forEach(function (sm, i) {
|
|
259
|
+
Object.entries(sm.layers).forEach(function (_ref2) {
|
|
260
|
+
var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
|
|
261
|
+
id = _ref3[0],
|
|
262
|
+
value = _ref3[1];
|
|
263
|
+
// check if layer exists
|
|
264
|
+
var pushTo = state.layers.find(function (l) {
|
|
265
|
+
return l.id === id;
|
|
266
|
+
}) ? merged : unmerged;
|
|
267
|
+
|
|
268
|
+
// create map panel if current map is not split
|
|
269
|
+
pushTo[i] = pushTo[i] || {
|
|
270
|
+
layers: pushTo === merged ? (0, _splitMapUtils.getInitialMapLayersForSplitMap)(state.layers) : []
|
|
271
|
+
};
|
|
272
|
+
pushTo[i].layers = _objectSpread(_objectSpread({}, pushTo[i].layers), {}, (0, _defineProperty2["default"])({}, id, value));
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
276
|
+
splitMaps: merged,
|
|
277
|
+
splitMapsToBeMerged: [].concat((0, _toConsumableArray2["default"])(state.splitMapsToBeMerged), unmerged)
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Merge interactionConfig.tooltip with saved config,
|
|
283
|
+
* validate fieldsToShow
|
|
284
|
+
*
|
|
285
|
+
* @param state
|
|
286
|
+
* @param tooltipConfig
|
|
287
|
+
* @return - {mergedTooltip: {}, unmergedTooltip: {}}
|
|
288
|
+
*/
|
|
289
|
+
function mergeInteractionTooltipConfig(state) {
|
|
290
|
+
var tooltipConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
291
|
+
var unmergedTooltip = {};
|
|
292
|
+
var mergedTooltip = {};
|
|
293
|
+
if (!tooltipConfig || !tooltipConfig.fieldsToShow || !Object.keys(tooltipConfig.fieldsToShow).length) {
|
|
294
|
+
return {
|
|
295
|
+
mergedTooltip: mergedTooltip,
|
|
296
|
+
unmergedTooltip: unmergedTooltip
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
var _loop = function _loop() {
|
|
300
|
+
if (!state.datasets[dataId]) {
|
|
301
|
+
// is not yet loaded
|
|
302
|
+
unmergedTooltip[dataId] = tooltipConfig.fieldsToShow[dataId];
|
|
303
|
+
} else {
|
|
304
|
+
// if dataset is loaded
|
|
305
|
+
var allFields = state.datasets[dataId].fields.map(function (d) {
|
|
306
|
+
return d.name;
|
|
307
|
+
});
|
|
308
|
+
var foundFieldsToShow = state.datasets[dataId].metadata.isDynamicSpatialIndex ? tooltipConfig.fieldsToShow[dataId] : tooltipConfig.fieldsToShow[dataId].filter(function (field) {
|
|
309
|
+
return allFields.includes(field.name);
|
|
310
|
+
});
|
|
311
|
+
mergedTooltip[dataId] = foundFieldsToShow;
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
for (var dataId in tooltipConfig.fieldsToShow) {
|
|
315
|
+
_loop();
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
mergedTooltip: mergedTooltip,
|
|
319
|
+
unmergedTooltip: unmergedTooltip
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Merge layerBlending with saved
|
|
324
|
+
*
|
|
325
|
+
*/
|
|
326
|
+
function mergeLayerBlending(state, layerBlending, fromConfig) {
|
|
327
|
+
if (layerBlending && _defaultSettings.LAYER_BLENDINGS[layerBlending]) {
|
|
328
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
329
|
+
layerBlending: layerBlending
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
return state;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Merge animation config
|
|
337
|
+
*/
|
|
338
|
+
function mergeAnimationConfig(state, animation, fromConfig) {
|
|
339
|
+
if (animation && animation.currentTime) {
|
|
340
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
341
|
+
animationConfig: _objectSpread(_objectSpread(_objectSpread({}, state.animationConfig), animation), {}, {
|
|
342
|
+
domain: null
|
|
343
|
+
})
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
return state;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Validate saved layer columns with new data,
|
|
351
|
+
* update fieldIdx based on new fields
|
|
352
|
+
*
|
|
353
|
+
* @param fields
|
|
354
|
+
* @param savedCols
|
|
355
|
+
* @param emptyCols
|
|
356
|
+
* @return - validated columns or null
|
|
357
|
+
*/
|
|
358
|
+
|
|
359
|
+
function validateSavedLayerColumns(fields) {
|
|
360
|
+
var savedCols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
361
|
+
var emptyCols = arguments.length > 2 ? arguments[2] : undefined;
|
|
362
|
+
// Prepare columns for the validator
|
|
363
|
+
var columns = {};
|
|
364
|
+
var _loop2 = function _loop2() {
|
|
365
|
+
var key = _Object$keys[_i];
|
|
366
|
+
columns[key] = _objectSpread({}, emptyCols[key]);
|
|
367
|
+
var saved = savedCols[key];
|
|
368
|
+
if (saved) {
|
|
369
|
+
var fieldIdx = fields.findIndex(function (_ref4) {
|
|
370
|
+
var name = _ref4.name;
|
|
371
|
+
return name === saved;
|
|
372
|
+
});
|
|
373
|
+
if (fieldIdx > -1) {
|
|
374
|
+
// update found columns
|
|
375
|
+
columns[key].fieldIdx = fieldIdx;
|
|
376
|
+
columns[key].value = saved;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
for (var _i = 0, _Object$keys = Object.keys(emptyCols); _i < _Object$keys.length; _i++) {
|
|
381
|
+
_loop2();
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// find actual column fieldIdx, in case it has changed
|
|
385
|
+
var allColFound = Object.keys(columns).every(function (key) {
|
|
386
|
+
return validateColumn(columns[key], columns, fields);
|
|
387
|
+
});
|
|
388
|
+
if (allColFound) {
|
|
389
|
+
return columns;
|
|
390
|
+
}
|
|
391
|
+
return null;
|
|
392
|
+
}
|
|
393
|
+
function validateColumn(column, columns, allFields) {
|
|
394
|
+
if (column.optional || column.value) {
|
|
395
|
+
return true;
|
|
396
|
+
}
|
|
397
|
+
if (column.validator) {
|
|
398
|
+
return column.validator(column, columns, allFields);
|
|
399
|
+
}
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Validate saved text label config with new data
|
|
405
|
+
* refer to vis-state-schema.js TextLabelSchemaV1
|
|
406
|
+
*
|
|
407
|
+
* @param {Array<Object>} fields
|
|
408
|
+
* @param {Object} savedTextLabel
|
|
409
|
+
* @return {Object} - validated textlabel
|
|
410
|
+
*/
|
|
411
|
+
function validateSavedTextLabel(fields, _ref5, savedTextLabel) {
|
|
412
|
+
var _ref6 = (0, _slicedToArray2["default"])(_ref5, 1),
|
|
413
|
+
layerTextLabel = _ref6[0];
|
|
414
|
+
var savedTextLabels = Array.isArray(savedTextLabel) ? savedTextLabel : [savedTextLabel];
|
|
415
|
+
|
|
416
|
+
// validate field
|
|
417
|
+
return savedTextLabels.map(function (textLabel) {
|
|
418
|
+
var field = textLabel.field ? fields.find(function (fd) {
|
|
419
|
+
return Object.keys(textLabel.field).every(function (key) {
|
|
420
|
+
return textLabel.field[key] === fd[key];
|
|
421
|
+
});
|
|
422
|
+
}) : null;
|
|
423
|
+
return Object.keys(layerTextLabel).reduce(function (accu, key) {
|
|
424
|
+
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, key === 'field' ? field : textLabel[key] || layerTextLabel[key]));
|
|
425
|
+
}, {});
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Validate saved visual channels config with new data,
|
|
431
|
+
* refer to vis-state-schema.js VisualChannelSchemaV1
|
|
432
|
+
*/
|
|
433
|
+
function validateSavedVisualChannels(fields, newLayer, savedLayer) {
|
|
434
|
+
Object.values(newLayer.visualChannels).forEach(function (_ref7) {
|
|
435
|
+
var field = _ref7.field,
|
|
436
|
+
scale = _ref7.scale,
|
|
437
|
+
key = _ref7.key;
|
|
438
|
+
var foundField;
|
|
439
|
+
var colorFieldProps = {};
|
|
440
|
+
if (savedLayer.config) {
|
|
441
|
+
var _savedLayer$config$fi;
|
|
442
|
+
if (savedLayer.config[field]) {
|
|
443
|
+
foundField = fields.find(function (fd) {
|
|
444
|
+
return savedLayer.config && fd.name === savedLayer.config[field].name;
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
if ((_savedLayer$config$fi = savedLayer.config[field]) !== null && _savedLayer$config$fi !== void 0 && _savedLayer$config$fi.colorColumn) {
|
|
448
|
+
var colorColumnField = fields.find(function (fd) {
|
|
449
|
+
return savedLayer.config && fd.name === savedLayer.config[field].colorColumn;
|
|
450
|
+
});
|
|
451
|
+
if (colorColumnField) {
|
|
452
|
+
colorFieldProps.colorColumn = colorColumnField.name;
|
|
453
|
+
colorFieldProps.colorColumnIdx = colorColumnField.fieldIdx;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
var foundChannel = _objectSpread(_objectSpread({}, foundField ? (0, _defineProperty2["default"])({}, field, _objectSpread(_objectSpread({}, foundField), colorFieldProps)) : {}), savedLayer.config[scale] ? (0, _defineProperty2["default"])({}, scale, savedLayer.config[scale]) : {});
|
|
457
|
+
if (Object.keys(foundChannel).length) {
|
|
458
|
+
newLayer.updateLayerConfig(foundChannel);
|
|
459
|
+
}
|
|
460
|
+
newLayer.validateVisualChannel(key);
|
|
461
|
+
}
|
|
462
|
+
});
|
|
463
|
+
return newLayer;
|
|
464
|
+
}
|
|
465
|
+
function validateLayersByDatasets(datasets, layerClasses) {
|
|
466
|
+
var layers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
467
|
+
var validated = [];
|
|
468
|
+
var failed = [];
|
|
469
|
+
layers.forEach(function (layer) {
|
|
470
|
+
var _layer$config;
|
|
471
|
+
var validateLayer = null;
|
|
472
|
+
if (layer !== null && layer !== void 0 && (_layer$config = layer.config) !== null && _layer$config !== void 0 && _layer$config.dataId) {
|
|
473
|
+
if (datasets[layer.config.dataId]) {
|
|
474
|
+
// datasets are already loaded
|
|
475
|
+
validateLayer = validateLayerWithData(datasets[layer.config.dataId], layer, layerClasses);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
if (validateLayer) {
|
|
479
|
+
validated.push(validateLayer);
|
|
480
|
+
} else {
|
|
481
|
+
// datasets not yet loaded
|
|
482
|
+
failed.push(layer);
|
|
483
|
+
}
|
|
484
|
+
});
|
|
485
|
+
return {
|
|
486
|
+
validated: validated,
|
|
487
|
+
failed: failed
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Validate saved layer config with new data,
|
|
492
|
+
* update fieldIdx based on new fields
|
|
493
|
+
*/
|
|
494
|
+
function validateLayerWithData(_ref10, savedLayer, layerClasses) {
|
|
495
|
+
var fields = _ref10.fields,
|
|
496
|
+
dataId = _ref10.id;
|
|
497
|
+
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
498
|
+
var type = savedLayer.type;
|
|
499
|
+
// layer doesnt have a valid type
|
|
500
|
+
if (!type || !layerClasses.hasOwnProperty(type) || !savedLayer.config) {
|
|
501
|
+
return null;
|
|
502
|
+
}
|
|
503
|
+
var newLayer = new layerClasses[type]({
|
|
504
|
+
id: savedLayer.id,
|
|
505
|
+
dataId: dataId,
|
|
506
|
+
label: savedLayer.config.label,
|
|
507
|
+
color: savedLayer.config.color,
|
|
508
|
+
isVisible: savedLayer.config.isVisible,
|
|
509
|
+
hidden: savedLayer.config.hidden,
|
|
510
|
+
highlightColor: savedLayer.config.highlightColor,
|
|
511
|
+
visibilityByZoom: savedLayer.config.visibilityByZoom
|
|
512
|
+
});
|
|
513
|
+
|
|
514
|
+
// find column fieldIdx
|
|
515
|
+
var columnConfig = newLayer.getLayerColumns();
|
|
516
|
+
if (Object.keys(columnConfig).length) {
|
|
517
|
+
var columns = validateSavedLayerColumns(fields, savedLayer.config.columns, columnConfig);
|
|
518
|
+
if (columns) {
|
|
519
|
+
newLayer.updateLayerConfig({
|
|
520
|
+
columns: columns
|
|
521
|
+
});
|
|
522
|
+
} else if (!options.allowEmptyColumn) {
|
|
523
|
+
return null;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
// visual channel field is saved to be {name, type}
|
|
528
|
+
// find visual channel field by matching both name and type
|
|
529
|
+
// refer to vis-state-schema.js VisualChannelSchemaV1
|
|
530
|
+
newLayer = validateSavedVisualChannels(fields, newLayer, savedLayer);
|
|
531
|
+
var textLabel = savedLayer.config.textLabel && newLayer.config.textLabel ? validateSavedTextLabel(fields, newLayer.config.textLabel, savedLayer.config.textLabel) : newLayer.config.textLabel;
|
|
532
|
+
|
|
533
|
+
// copy visConfig over to emptyLayer to make sure it has all the props
|
|
534
|
+
var visConfig = newLayer.copyLayerConfig(newLayer.config.visConfig, savedLayer.config.visConfig || {}, {
|
|
535
|
+
shallowCopy: ['colorRange', 'strokeColorRange']
|
|
536
|
+
});
|
|
537
|
+
newLayer.updateLayerConfig({
|
|
538
|
+
visConfig: visConfig,
|
|
539
|
+
textLabel: textLabel
|
|
540
|
+
});
|
|
541
|
+
return newLayer;
|
|
542
|
+
}
|
|
543
|
+
function isValidMerger(merger) {
|
|
544
|
+
return (0, _utils.isObject)(merger) && typeof merger.merge === 'function' && typeof merger.prop === 'string';
|
|
545
|
+
}
|
|
546
|
+
var VIS_STATE_MERGERS = exports.VIS_STATE_MERGERS = [{
|
|
547
|
+
merge: mergeLayers,
|
|
548
|
+
prop: 'layers',
|
|
549
|
+
toMergeProp: 'layerToBeMerged'
|
|
550
|
+
}, {
|
|
551
|
+
merge: mergeFilters,
|
|
552
|
+
prop: 'filters',
|
|
553
|
+
toMergeProp: 'filterToBeMerged'
|
|
554
|
+
}, {
|
|
555
|
+
merge: mergeInteractions,
|
|
556
|
+
prop: 'interactionConfig',
|
|
557
|
+
toMergeProp: 'interactionToBeMerged'
|
|
558
|
+
}, {
|
|
559
|
+
merge: mergeLayerBlending,
|
|
560
|
+
prop: 'layerBlending'
|
|
561
|
+
}, {
|
|
562
|
+
merge: mergeSplitMaps,
|
|
563
|
+
prop: 'splitMaps',
|
|
564
|
+
toMergeProp: 'splitMapsToBeMerged'
|
|
565
|
+
}, {
|
|
566
|
+
merge: mergeAnimationConfig,
|
|
567
|
+
prop: 'animationConfig'
|
|
568
|
+
}];
|
|
569
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoMiIsIl9sb2Rhc2gzIiwiX3V0aWxzIiwiX2ZpbHRlclV0aWxzIiwiX3NwbGl0TWFwVXRpbHMiLCJfZ3B1RmlsdGVyVXRpbHMiLCJfZGVmYXVsdFNldHRpbmdzIiwiX3NjaGVtYXMiLCJfZXhjbHVkZWQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJtZXJnZUZpbHRlcnMiLCJzdGF0ZSIsImZpbHRlcnNUb01lcmdlIiwiZnJvbUNvbmZpZyIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwidmFsaWRhdGVkIiwiZmFpbGVkIiwidXBkYXRlZERhdGFzZXRzIiwidXBkYXRlZEZpbHRlcnMiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiZmlsdGVycyIsInJlc2V0RmlsdGVyR3B1TW9kZSIsImFzc2lnbkdwdUNoYW5uZWxzIiwiZGF0YXNldHNUb0ZpbHRlciIsInVuaXEiLCJmbGF0dGVuRGVlcCIsIm1hcCIsImRhdGFJZCIsImZpbHRlcmVkIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsImxheWVycyIsImRhdGFzZXRzIiwiZmlsdGVyVG9CZU1lcmdlZCIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsImxheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwibmV3TGF5ZXIiLCJ1cGRhdGVMYXllckRvbWFpbiIsInNlcmlhbGl6ZUxheWVyIiwic2F2ZWRWaXNTdGF0ZSIsInZpc1N0YXRlU2NoZW1hIiwiQ1VSUkVOVF9WRVJTSU9OIiwic2F2ZSIsImxheWVyT3JkZXIiLCJ2aXNTdGF0ZSIsImxvYWRlZExheWVyIiwibG9hZCIsIm1lcmdlTGF5ZXJzIiwibGF5ZXJzVG9NZXJnZSIsInVuZGVmaW5lZCIsInByZXNlcnZlTGF5ZXJPcmRlciIsImwiLCJpZCIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsInVubWVyZ2VkIiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibGF5ZXJUb0JlTWVyZ2VkIiwiY3VycmVudExheWVycyIsImxheWVyc1RvSW5zZXJ0IiwiY3VycmVudE9yZGVyIiwicHJlc2VydmVkT3JkZXIiLCJsYXllck9yZGVyUXVldWUiLCJpIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsInByZWNlZWRJZHgiLCJwcmVjZWVkTGF5ZXIiLCJhcnJheUluc2VydCIsImVyciIsImZpbmRJbmRleCIsIm1lcmdlSW50ZXJhY3Rpb25zIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibWVyZ2VkIiwia2V5IiwiaW50ZXJhY3Rpb25Db25maWciLCJjdXJyZW50Q29uZmlnIiwiY29uZmlnIiwiX3JlZiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJjb25maWdUb01lcmdlIiwiX21lcmdlSW50ZXJhY3Rpb25Ub29sIiwibWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWciLCJtZXJnZWRUb29sdGlwIiwidW5tZXJnZWRUb29sdGlwIiwiZmllbGRzVG9TaG93IiwidG9vbHRpcCIsIkJvb2xlYW4iLCJwaWNrIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJzbSIsImVudHJpZXMiLCJfcmVmMiIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkyIiwicHVzaFRvIiwiZmluZCIsImdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJ0b29sdGlwQ29uZmlnIiwiX2xvb3AiLCJhbGxGaWVsZHMiLCJmaWVsZHMiLCJkIiwiZm91bmRGaWVsZHNUb1Nob3ciLCJtZXRhZGF0YSIsImlzRHluYW1pY1NwYXRpYWxJbmRleCIsImZpZWxkIiwiaW5jbHVkZXMiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiTEFZRVJfQkxFTkRJTkdTIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJjb2x1bW5zIiwiX2xvb3AyIiwiX09iamVjdCRrZXlzIiwiX2kiLCJzYXZlZCIsImZpZWxkSWR4IiwiX3JlZjQiLCJhbGxDb2xGb3VuZCIsImV2ZXJ5IiwidmFsaWRhdGVDb2x1bW4iLCJjb2x1bW4iLCJvcHRpb25hbCIsInZhbGlkYXRvciIsInZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwiLCJfcmVmNSIsInNhdmVkVGV4dExhYmVsIiwiX3JlZjYiLCJsYXllclRleHRMYWJlbCIsInNhdmVkVGV4dExhYmVscyIsInRleHRMYWJlbCIsImZkIiwicmVkdWNlIiwiYWNjdSIsInZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyIsInNhdmVkTGF5ZXIiLCJ2YWx1ZXMiLCJ2aXN1YWxDaGFubmVscyIsIl9yZWY3Iiwic2NhbGUiLCJmb3VuZEZpZWxkIiwiY29sb3JGaWVsZFByb3BzIiwiX3NhdmVkTGF5ZXIkY29uZmlnJGZpIiwiY29sb3JDb2x1bW4iLCJjb2xvckNvbHVtbkZpZWxkIiwiY29sb3JDb2x1bW5JZHgiLCJmb3VuZENoYW5uZWwiLCJ1cGRhdGVMYXllckNvbmZpZyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImxheWVyIiwiX2xheWVyJGNvbmZpZyIsInZhbGlkYXRlTGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJfcmVmMTAiLCJvcHRpb25zIiwidHlwZSIsImhhc093blByb3BlcnR5IiwibGFiZWwiLCJjb2xvciIsImlzVmlzaWJsZSIsImhpZGRlbiIsImhpZ2hsaWdodENvbG9yIiwidmlzaWJpbGl0eUJ5Wm9vbSIsImNvbHVtbkNvbmZpZyIsImdldExheWVyQ29sdW1ucyIsImFsbG93RW1wdHlDb2x1bW4iLCJ2aXNDb25maWciLCJjb3B5TGF5ZXJDb25maWciLCJzaGFsbG93Q29weSIsImlzVmFsaWRNZXJnZXIiLCJtZXJnZXIiLCJpc09iamVjdCIsIm1lcmdlIiwicHJvcCIsIlZJU19TVEFURV9NRVJHRVJTIiwiZXhwb3J0cyIsInRvTWVyZ2VQcm9wIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlZHVjZXJzL3Zpcy1zdGF0ZS1tZXJnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLnVuaXEnO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoLnBpY2snO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJ2xvZGFzaC5mbGF0dGVuZGVlcCc7XG5pbXBvcnQge2lzT2JqZWN0LCBhcnJheUluc2VydH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuaW1wb3J0IHthcHBseUZpbHRlcnNUb0RhdGFzZXRzLCB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c30gZnJvbSAndXRpbHMvZmlsdGVyLXV0aWxzJztcblxuaW1wb3J0IHtnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXB9IGZyb20gJ3V0aWxzL3NwbGl0LW1hcC11dGlscyc7XG5pbXBvcnQge3Jlc2V0RmlsdGVyR3B1TW9kZSwgYXNzaWduR3B1Q2hhbm5lbHN9IGZyb20gJ3V0aWxzL2dwdS1maWx0ZXItdXRpbHMnO1xuaW1wb3J0IHtMQVlFUl9CTEVORElOR1N9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7Q1VSUkVOVF9WRVJTSU9OLCB2aXNTdGF0ZVNjaGVtYX0gZnJvbSAnc2NoZW1hcyc7XG5cbmltcG9ydCB7VmlzU3RhdGUsIERhdGFzZXRzfSBmcm9tICcuL3Zpcy1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1BhcnNlZENvbmZpZywgUGFyc2VkTGF5ZXJ9IGZyb20gJ3NjaGVtYXMnO1xuaW1wb3J0IHtMYXllciwgTGF5ZXJDb2x1bW5zLCBMYXllckNvbHVtbn0gZnJvbSAnbGF5ZXJzJztcbmltcG9ydCB7VG9vbHRpcEluZm99IGZyb20gJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ30gZnJvbSAnc2NoZW1hcy9zY2hlbWEtbWFuYWdlcic7XG5cbmV4cG9ydCB0eXBlIE1lcmdlciA9IHtcbiAgbWVyZ2U6IChzdGF0ZTogVmlzU3RhdGUsIGNvbmZpZzogYW55LCBmcm9tQ29uZmlnPzogYm9vbGVhbikgPT4gVmlzU3RhdGU7XG4gIHByb3A6IHN0cmluZztcbiAgdG9NZXJnZVByb3A/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVmlzU3RhdGVNZXJnZXJzID0gTWVyZ2VyW107XG5cbi8qKlxuICogTWVyZ2UgbG9hZGVkIGZpbHRlcnMgd2l0aCBjdXJyZW50IHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRmlsdGVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBmaWx0ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZmlsdGVycyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogVmlzU3RhdGUge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyc1RvTWVyZ2UpIHx8ICFmaWx0ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpO1xuXG4gIC8vIG1lcmdlIGZpbHRlciB3aXRoIGV4aXN0aW5nXG4gIGxldCB1cGRhdGVkRmlsdGVycyA9IFsuLi4oc3RhdGUuZmlsdGVycyB8fCBbXSksIC4uLnZhbGlkYXRlZF07XG4gIHVwZGF0ZWRGaWx0ZXJzID0gcmVzZXRGaWx0ZXJHcHVNb2RlKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgdXBkYXRlZEZpbHRlcnMgPSBhc3NpZ25HcHVDaGFubmVscyh1cGRhdGVkRmlsdGVycyk7XG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGRhdGFzZXRzVG9GaWx0ZXIgPSB1bmlxKGZsYXR0ZW5EZWVwKHZhbGlkYXRlZC5tYXAoZiA9PiBmLmRhdGFJZCkpKTtcblxuICBjb25zdCBmaWx0ZXJlZCA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgZGF0YXNldHNUb0ZpbHRlcixcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgdXBkYXRlZEZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiB1cGRhdGVkRmlsdGVycyxcbiAgICBkYXRhc2V0czogZmlsdGVyZWQsXG4gICAgZmlsdGVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmZpbHRlclRvQmVNZXJnZWQsIC4uLmZhaWxlZF1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZTogVmlzU3RhdGUsIGxheWVyQ29uZmlnOiBhbnkpOiBMYXllciB8IG51bGwge1xuICAvLyBmaXJzdCB2YWxpZGF0ZSBjb25maWcgYWdhaW5zdCBkYXRhc2V0XG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3NlcywgW1xuICAgIGxheWVyQ29uZmlnXG4gIF0pO1xuXG4gIGlmIChmYWlsZWQ/Lmxlbmd0aCB8fCAhdmFsaWRhdGVkLmxlbmd0aCkge1xuICAgIC8vIGZhaWxlZFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZWRbMF07XG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIpOiBQYXJzZWRMYXllciB7XG4gIGNvbnN0IHNhdmVkVmlzU3RhdGUgPSB2aXNTdGF0ZVNjaGVtYVtDVVJSRU5UX1ZFUlNJT05dLnNhdmUoe1xuICAgIGxheWVyczogW25ld0xheWVyXSxcbiAgICBsYXllck9yZGVyOiBbMF1cbiAgfSkudmlzU3RhdGU7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gdmlzU3RhdGVTY2hlbWFbQ1VSUkVOVF9WRVJTSU9OXS5sb2FkKHNhdmVkVmlzU3RhdGUpLnZpc1N0YXRlLmxheWVyc1swXTtcbiAgcmV0dXJuIGxvYWRlZExheWVyO1xufVxuXG4vKipcbiAqIE1lcmdlIGxheWVycyBmcm9tIGRlLXNlcmlhbGl6ZWQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllcnMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgbGF5ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gZnJvbUNvbmZpZyA/IGxheWVyc1RvTWVyZ2UubWFwKGwgPT4gbC5pZCkgOiBzdGF0ZS5wcmVzZXJ2ZUxheWVyT3JkZXI7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGxheWVyc1RvTWVyZ2UpIHx8ICFsYXllcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHt2YWxpZGF0ZWQ6IG1lcmdlZExheWVyLCBmYWlsZWQ6IHVubWVyZ2VkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJzVG9NZXJnZVxuICApO1xuXG4gIC8vIHB1dCBuZXcgbGF5ZXJzIGluIGZyb250IG9mIGN1cnJlbnQgbGF5ZXJzXG4gIGNvbnN0IHtuZXdMYXllck9yZGVyLCBuZXdMYXllcnN9ID0gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gICAgc3RhdGUubGF5ZXJzLFxuICAgIG1lcmdlZExheWVyLFxuICAgIHN0YXRlLmxheWVyT3JkZXIsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHByZXNlcnZlTGF5ZXJPcmRlclxuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcixcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcHJlc2VydmVMYXllck9yZGVyLFxuICAgIGxheWVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmxheWVyVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgY3VycmVudExheWVycyxcbiAgbGF5ZXJzVG9JbnNlcnQsXG4gIGN1cnJlbnRPcmRlcixcbiAgcHJlc2VydmVkT3JkZXI6IHN0cmluZ1tdID0gW11cbikge1xuICAvLyBwZXJzZXJ2ZWRPcmRlciBbJ2EnLCAnYicsICdjJ107XG4gIC8vIGxheWVyT3JkZXIgWzEsIDAsIDNdXG4gIC8vIGxheWVyT3JkZXJNYXAgWydhJywgJ2MnXVxuICBsZXQgbGF5ZXJPcmRlclF1ZXVlID0gY3VycmVudE9yZGVyLm1hcChpID0+IGN1cnJlbnRMYXllcnNbaV0uaWQpO1xuICBsZXQgbmV3TGF5ZXJzID0gY3VycmVudExheWVycztcblxuICBmb3IgKGNvbnN0IG5ld0xheWVyIG9mIGxheWVyc1RvSW5zZXJ0KSB7XG4gICAgLy8gZmluZCB3aGVyZSB0byBpbnNlcnQgaXRcbiAgICBjb25zdCBleHBlY3RlZElkeCA9IHByZXNlcnZlZE9yZGVyLmluZGV4T2YobmV3TGF5ZXIuaWQpO1xuICAgIC8vIGlmIGNhbnQgZmluZCBwbGFjZSB0byBpbnNlcnQsIGluc2VydCBhdCB0aGUgZm9udFxuICAgIGxldCBpbnNlcnRBdCA9IDA7XG5cbiAgICBpZiAoZXhwZWN0ZWRJZHggPiAwKSB7XG4gICAgICAvLyBsb29rIGZvciBsYXllciB0byBpbnNlcnQgYWZ0ZXJcbiAgICAgIGxldCBpID0gZXhwZWN0ZWRJZHggKyAxO1xuICAgICAgbGV0IHByZWNlZWRJZHggPSAtMTtcbiAgICAgIHdoaWxlIChpLS0gPiAwICYmIHByZWNlZWRJZHggPT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHByZWNlZWRMYXllciA9IHByZXNlcnZlZE9yZGVyW2ldO1xuICAgICAgICBwcmVjZWVkSWR4ID0gbGF5ZXJPcmRlclF1ZXVlLmluZGV4T2YocHJlY2VlZExheWVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZWNlZWRJZHggPiAtMSkge1xuICAgICAgICBpbnNlcnRBdCA9IHByZWNlZWRJZHggKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxheWVyT3JkZXJRdWV1ZSA9IGFycmF5SW5zZXJ0KGxheWVyT3JkZXJRdWV1ZSwgaW5zZXJ0QXQsIG5ld0xheWVyLmlkKTtcbiAgICBuZXdMYXllcnMgPSBuZXdMYXllcnMuY29uY2F0KG5ld0xheWVyKTtcbiAgfVxuXG4gIC8vIHJlY29uc3RydWN0IGxheWVyT3JkZXIgYWZ0ZXIgaW5zZXJ0XG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBsYXllck9yZGVyUXVldWUubWFwKGlkID0+IG5ld0xheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCkpO1xuXG4gIHJldHVybiB7XG4gICAgbmV3TGF5ZXJPcmRlcixcbiAgICBuZXdMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9ucyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gfCB1bmRlZmluZWQsXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuICBjb25zdCB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuXG4gIGlmIChpbnRlcmFjdGlvblRvQmVNZXJnZWQpIHtcbiAgICAoT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSBhcyBBcnJheTxrZXlvZiBTYXZlZEludGVyYWN0aW9uQ29uZmlnPikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9XG4gICAgICAgIGtleSA9PT0gJ3Rvb2x0aXAnIHx8IGtleSA9PT0gJ2JydXNoJyA/IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnIDogbnVsbDtcblxuICAgICAgY29uc3Qge2VuYWJsZWQsIC4uLmNvbmZpZ1NhdmVkfSA9IGludGVyYWN0aW9uVG9CZU1lcmdlZFtrZXldIHx8IHt9O1xuXG4gICAgICBsZXQgY29uZmlnVG9NZXJnZSA9IGNvbmZpZ1NhdmVkO1xuXG4gICAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgICAgY29uc3Qge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH0gPSBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb25maWdTYXZlZCBhcyBTYXZlZEludGVyYWN0aW9uQ29uZmlnWyd0b29sdGlwJ11cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBtZXJnZSBuZXcgZGF0YXNldCB0b29sdGlwcyB3aXRoIG9yaWdpbmFsIGRhdGFzZXQgdG9vbHRpcHNcbiAgICAgICAgY29uZmlnVG9NZXJnZSA9IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLihjdXJyZW50Q29uZmlnIGFzIFRvb2x0aXBJbmZvWydjb25maWcnXSkuZmllbGRzVG9TaG93LFxuICAgICAgICAgICAgLi4ubWVyZ2VkVG9vbHRpcFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModW5tZXJnZWRUb29sdGlwKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgdW5tZXJnZWQudG9vbHRpcCA9IHtmaWVsZHNUb1Nob3c6IHVubWVyZ2VkVG9vbHRpcCwgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKX07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgbWVyZ2VkW2tleV0gPSB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0sXG4gICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCksXG4gICAgICAgIC4uLihjdXJyZW50Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcGljayhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5jdXJyZW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnVG9NZXJnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgaW50ZXJhY3Rpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgLi4ubWVyZ2VkXG4gICAgfSxcbiAgICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHVubWVyZ2VkXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2Ugc3BsaXRNYXBzIGNvbmZpZyB3aXRoIGN1cnJlbnQgdmlzU3RldGUuXG4gKiAxLiBpZiBjdXJyZW50IG1hcCBpcyBzcGxpdCwgYnV0IHNwbGl0TWFwIERPRVNOT1QgY29udGFpbiBtYXBzXG4gKiAgICA6IGRvbid0IG1lcmdlIGFueXRoaW5nXG4gKiAyLiBpZiBjdXJyZW50IG1hcCBpcyBOT1Qgc3BsaXQsIGJ1dCBzcGxpdE1hcHMgY29udGFpbiBtYXBzXG4gKiAgICA6IGFkZCB0byBzcGxpdE1hcHMsIGFuZCBhZGQgY3VycmVudCBsYXllcnMgdG8gc3BsaXRNYXBzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNwbGl0TWFwcyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBzcGxpdE1hcHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ3NwbGl0TWFwcyddID0gW10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5zdGF0ZS5zcGxpdE1hcHNdO1xuICBjb25zdCB1bm1lcmdlZCA9IFtdO1xuICBzcGxpdE1hcHMuZm9yRWFjaCgoc20sIGkpID0+IHtcbiAgICBPYmplY3QuZW50cmllcyhzbS5sYXllcnMpLmZvckVhY2goKFtpZCwgdmFsdWVdKSA9PiB7XG4gICAgICAvLyBjaGVjayBpZiBsYXllciBleGlzdHNcbiAgICAgIGNvbnN0IHB1c2hUbyA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gaWQpID8gbWVyZ2VkIDogdW5tZXJnZWQ7XG5cbiAgICAgIC8vIGNyZWF0ZSBtYXAgcGFuZWwgaWYgY3VycmVudCBtYXAgaXMgbm90IHNwbGl0XG4gICAgICBwdXNoVG9baV0gPSBwdXNoVG9baV0gfHwge1xuICAgICAgICBsYXllcnM6IHB1c2hUbyA9PT0gbWVyZ2VkID8gZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwKHN0YXRlLmxheWVycykgOiBbXVxuICAgICAgfTtcbiAgICAgIHB1c2hUb1tpXS5sYXllcnMgPSB7XG4gICAgICAgIC4uLnB1c2hUb1tpXS5sYXllcnMsXG4gICAgICAgIFtpZF06IHZhbHVlXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogbWVyZ2VkLFxuICAgIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwIHdpdGggc2F2ZWQgY29uZmlnLFxuICogdmFsaWRhdGUgZmllbGRzVG9TaG93XG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcGFyYW0gdG9vbHRpcENvbmZpZ1xuICogQHJldHVybiAtIHttZXJnZWRUb29sdGlwOiB7fSwgdW5tZXJnZWRUb29sdGlwOiB7fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHRvb2x0aXBDb25maWc6IFBpY2s8VG9vbHRpcEluZm9bJ2NvbmZpZyddLCAnZmllbGRzVG9TaG93Jz4gfCBudWxsID0gbnVsbFxuKSB7XG4gIGNvbnN0IHVubWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuICBjb25zdCBtZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG5cbiAgaWYgKFxuICAgICF0b29sdGlwQ29uZmlnIHx8XG4gICAgIXRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93IHx8XG4gICAgIU9iamVjdC5rZXlzKHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KS5sZW5ndGhcbiAgKSB7XG4gICAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBkYXRhSWQgaW4gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpIHtcbiAgICBpZiAoIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSAoc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5tZXRhZGF0YSBhcyBhbnkpLmlzRHluYW1pY1NwYXRpYWxJbmRleFxuICAgICAgICA/IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF1cbiAgICAgICAgOiB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PiBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSkpO1xuXG4gICAgICBtZXJnZWRUb29sdGlwW2RhdGFJZF0gPSBmb3VuZEZpZWxkc1RvU2hvdztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG59XG4vKipcbiAqIE1lcmdlIGxheWVyQmxlbmRpbmcgd2l0aCBzYXZlZFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJCbGVuZGluZyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBsYXllckJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllckJsZW5kaW5nJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBWaXNTdGF0ZSB7XG4gIGlmIChsYXllckJsZW5kaW5nICYmIExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyQmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFuaW1hdGlvbjogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnYW5pbWF0aW9uQ29uZmlnJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBWaXNTdGF0ZSB7XG4gIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLmN1cnJlbnRUaW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uYW5pbWF0aW9uLFxuICAgICAgICBkb21haW46IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbHVtbnMgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHBhcmFtIHNhdmVkQ29sc1xuICogQHBhcmFtIGVtcHR5Q29sc1xuICogQHJldHVybiAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIHNhdmVkQ29sczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9LFxuICBlbXB0eUNvbHM6IExheWVyQ29sdW1uc1xuKSB7XG4gIC8vIFByZXBhcmUgY29sdW1ucyBmb3IgdGhlIHZhbGlkYXRvclxuICBjb25zdCBjb2x1bW5zOiB0eXBlb2YgZW1wdHlDb2xzID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVtcHR5Q29scykpIHtcbiAgICBjb2x1bW5zW2tleV0gPSB7Li4uZW1wdHlDb2xzW2tleV19O1xuXG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZENvbHNba2V5XTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gZmllbGRzLmZpbmRJbmRleCgoe25hbWV9KSA9PiBuYW1lID09PSBzYXZlZCk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmb3VuZCBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnNba2V5XS5maWVsZElkeCA9IGZpZWxkSWR4O1xuICAgICAgICBjb2x1bW5zW2tleV0udmFsdWUgPSBzYXZlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBmaW5kIGFjdHVhbCBjb2x1bW4gZmllbGRJZHgsIGluIGNhc2UgaXQgaGFzIGNoYW5nZWRcbiAgY29uc3QgYWxsQ29sRm91bmQgPSBPYmplY3Qua2V5cyhjb2x1bW5zKS5ldmVyeShrZXkgPT5cbiAgICB2YWxpZGF0ZUNvbHVtbihjb2x1bW5zW2tleV0sIGNvbHVtbnMsIGZpZWxkcylcbiAgKTtcblxuICBpZiAoYWxsQ29sRm91bmQpIHtcbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oXG4gIGNvbHVtbjogTGF5ZXJDb2x1bW4gJiB7dmFsaWRhdG9yPzogdHlwZW9mIHZhbGlkYXRlQ29sdW1ufSxcbiAgY29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBhbGxGaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXVxuKTogYm9vbGVhbiB7XG4gIGlmIChjb2x1bW4ub3B0aW9uYWwgfHwgY29sdW1uLnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGNvbHVtbi52YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRvcihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHRleHQgbGFiZWwgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVGV4dExhYmVsU2NoZW1hVjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkVGV4dExhYmVsXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gdmFsaWRhdGVkIHRleHRsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChmaWVsZHMsIFtsYXllclRleHRMYWJlbF0sIHNhdmVkVGV4dExhYmVsKSB7XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuXG4gIC8vIHZhbGlkYXRlIGZpZWxkXG4gIHJldHVybiBzYXZlZFRleHRMYWJlbHMubWFwKHRleHRMYWJlbCA9PiB7XG4gICAgY29uc3QgZmllbGQgPSB0ZXh0TGFiZWwuZmllbGRcbiAgICAgID8gZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyVGV4dExhYmVsKS5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XToga2V5ID09PSAnZmllbGQnID8gZmllbGQgOiB0ZXh0TGFiZWxba2V5XSB8fCBsYXllclRleHRMYWJlbFtrZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdmlzdWFsIGNoYW5uZWxzIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXJcbik6IG51bGwgfCBMYXllciB7XG4gIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZCwgc2NhbGUsIGtleX0pID0+IHtcbiAgICBsZXQgZm91bmRGaWVsZDtcbiAgICBjb25zdCBjb2xvckZpZWxkUHJvcHMgPSB7fTtcbiAgICBpZiAoc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICAgIGlmIChzYXZlZExheWVyLmNvbmZpZ1tmaWVsZF0pIHtcbiAgICAgICAgZm91bmRGaWVsZCA9IGZpZWxkcy5maW5kKFxuICAgICAgICAgIGZkID0+IHNhdmVkTGF5ZXIuY29uZmlnICYmIGZkLm5hbWUgPT09IHNhdmVkTGF5ZXIuY29uZmlnW2ZpZWxkXS5uYW1lXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzYXZlZExheWVyLmNvbmZpZ1tmaWVsZF0/LmNvbG9yQ29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yQ29sdW1uRmllbGQgPSBmaWVsZHMuZmluZChcbiAgICAgICAgICBmZCA9PiBzYXZlZExheWVyLmNvbmZpZyAmJiBmZC5uYW1lID09PSBzYXZlZExheWVyLmNvbmZpZ1tmaWVsZF0uY29sb3JDb2x1bW5cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY29sb3JDb2x1bW5GaWVsZCkge1xuICAgICAgICAgIChjb2xvckZpZWxkUHJvcHMgYXMgYW55KS5jb2xvckNvbHVtbiA9IGNvbG9yQ29sdW1uRmllbGQubmFtZTtcbiAgICAgICAgICAoY29sb3JGaWVsZFByb3BzIGFzIGFueSkuY29sb3JDb2x1bW5JZHggPSBjb2xvckNvbHVtbkZpZWxkLmZpZWxkSWR4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvdW5kQ2hhbm5lbCA9IHtcbiAgICAgICAgLi4uKGZvdW5kRmllbGQgPyB7W2ZpZWxkXTogey4uLmZvdW5kRmllbGQsIC4uLmNvbG9yRmllbGRQcm9wc319IDoge30pLFxuICAgICAgICAuLi4oc2F2ZWRMYXllci5jb25maWdbc2NhbGVdID8ge1tzY2FsZV06IHNhdmVkTGF5ZXIuY29uZmlnW3NjYWxlXX0gOiB7fSlcbiAgICAgIH07XG4gICAgICBpZiAoT2JqZWN0LmtleXMoZm91bmRDaGFubmVsKS5sZW5ndGgpIHtcbiAgICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoZm91bmRDaGFubmVsKTtcbiAgICAgIH1cblxuICAgICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW11cbikge1xuICBjb25zdCB2YWxpZGF0ZWQ6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZmFpbGVkOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdO1xuXG4gIGxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBsZXQgdmFsaWRhdGVMYXllcjogTGF5ZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChsYXllcj8uY29uZmlnPy5kYXRhSWQpIHtcbiAgICAgIGlmIChkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSkge1xuICAgICAgICAvLyBkYXRhc2V0cyBhcmUgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgdmFsaWRhdGVMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSwgbGF5ZXIsIGxheWVyQ2xhc3Nlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlTGF5ZXIpIHtcbiAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlTGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkYXRhc2V0cyBub3QgeWV0IGxvYWRlZFxuICAgICAgZmFpbGVkLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZH07XG59XG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAge2ZpZWxkcywgaWQ6IGRhdGFJZH06IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IHtcbiAgICBhbGxvd0VtcHR5Q29sdW1uPzogYm9vbGVhbjtcbiAgfSA9IHt9XG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCB7dHlwZX0gPSBzYXZlZExheWVyO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFsYXllckNsYXNzZXMuaGFzT3duUHJvcGVydHkodHlwZSkgfHwgIXNhdmVkTGF5ZXIuY29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3R5cGVdKHtcbiAgICBpZDogc2F2ZWRMYXllci5pZCxcbiAgICBkYXRhSWQsXG4gICAgbGFiZWw6IHNhdmVkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGNvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5jb2xvcixcbiAgICBpc1Zpc2libGU6IHNhdmVkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBoaWRkZW46IHNhdmVkTGF5ZXIuY29uZmlnLmhpZGRlbixcbiAgICBoaWdobGlnaHRDb2xvcjogc2F2ZWRMYXllci5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgdmlzaWJpbGl0eUJ5Wm9vbTogKHNhdmVkTGF5ZXIuY29uZmlnIGFzIGFueSkudmlzaWJpbGl0eUJ5Wm9vbSBcbiAgfSk7XG5cbiAgLy8gZmluZCBjb2x1bW4gZmllbGRJZHhcbiAgY29uc3QgY29sdW1uQ29uZmlnID0gbmV3TGF5ZXIuZ2V0TGF5ZXJDb2x1bW5zKCk7XG4gIGlmIChPYmplY3Qua2V5cyhjb2x1bW5Db25maWcpLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKGZpZWxkcywgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucywgY29sdW1uQ29uZmlnKTtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2NvbHVtbnN9KTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmFsbG93RW1wdHlDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIHZpc3VhbCBjaGFubmVsIGZpZWxkIGlzIHNhdmVkIHRvIGJlIHtuYW1lLCB0eXBlfVxuICAvLyBmaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkIGJ5IG1hdGNoaW5nIGJvdGggbmFtZSBhbmQgdHlwZVxuICAvLyByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICBuZXdMYXllciA9IHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhmaWVsZHMsIG5ld0xheWVyLCBzYXZlZExheWVyKTtcblxuICBjb25zdCB0ZXh0TGFiZWwgPVxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCAmJiBuZXdMYXllci5jb25maWcudGV4dExhYmVsXG4gICAgICA/IHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoZmllbGRzLCBuZXdMYXllci5jb25maWcudGV4dExhYmVsLCBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwpXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCB2aXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZExheWVyLmNvbmZpZy52aXNDb25maWcgfHwge30sXG4gICAge3NoYWxsb3dDb3B5OiBbJ2NvbG9yUmFuZ2UnLCAnc3Ryb2tlQ29sb3JSYW5nZSddfVxuICApO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICB2aXNDb25maWcsXG4gICAgdGV4dExhYmVsXG4gIH0pO1xuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRNZXJnZXIobWVyZ2VyOiBNZXJnZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzT2JqZWN0KG1lcmdlcikgJiYgdHlwZW9mIG1lcmdlci5tZXJnZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbWVyZ2VyLnByb3AgPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgY29uc3QgVklTX1NUQVRFX01FUkdFUlM6IFZpc1N0YXRlTWVyZ2VycyA9IFtcbiAge21lcmdlOiBtZXJnZUxheWVycywgcHJvcDogJ2xheWVycycsIHRvTWVyZ2VQcm9wOiAnbGF5ZXJUb0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VGaWx0ZXJzLCBwcm9wOiAnZmlsdGVycycsIHRvTWVyZ2VQcm9wOiAnZmlsdGVyVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlSW50ZXJhY3Rpb25zLCBwcm9wOiAnaW50ZXJhY3Rpb25Db25maWcnLCB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlTGF5ZXJCbGVuZGluZywgcHJvcDogJ2xheWVyQmxlbmRpbmcnfSxcbiAge21lcmdlOiBtZXJnZVNwbGl0TWFwcywgcHJvcDogJ3NwbGl0TWFwcycsIHRvTWVyZ2VQcm9wOiAnc3BsaXRNYXBzVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlQW5pbWF0aW9uQ29uZmlnLCBwcm9wOiAnYW5pbWF0aW9uQ29uZmlnJ31cbl07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssY0FBQSxH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LFVBQVUsQ0FBQ3RFLE1BQU0sQ0FBQ2lFLFNBQVMsSUFBSWhILFFBQVEsQ0FBQytDLE1BQU0sQ0FBQ2lFLFNBQVMsR0FDcEROLHNCQUFzQixDQUFDL0IsTUFBTSxFQUFFM0UsUUFBUSxDQUFDK0MsTUFBTSxDQUFDaUUsU0FBUyxFQUFFSyxVQUFVLENBQUN0RSxNQUFNLENBQUNpRSxTQUFTLENBQUMsR0FDdEZoSCxRQUFRLENBQUMrQyxNQUFNLENBQUNpRSxTQUFTOztFQUUvQjtFQUNBLElBQU1vQyxTQUFTLEdBQUdwSixRQUFRLENBQUNxSixlQUFlLENBQ3hDckosUUFBUSxDQUFDK0MsTUFBTSxDQUFDcUcsU0FBUyxFQUN6Qi9CLFVBQVUsQ0FBQ3RFLE1BQU0sQ0FBQ3FHLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFDakM7SUFBQ0UsV0FBVyxFQUFFLENBQUMsWUFBWSxFQUFFLGtCQUFrQjtFQUFDLENBQ2xELENBQUM7RUFFRHRKLFFBQVEsQ0FBQ2lJLGlCQUFpQixDQUFDO0lBQ3pCbUIsU0FBUyxFQUFUQSxTQUFTO0lBQ1RwQyxTQUFTLEVBQVRBO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsT0FBT2hILFFBQVE7QUFDakI7QUFFTyxTQUFTdUosYUFBYUEsQ0FBQ0MsTUFBYyxFQUFXO0VBQ3JELE9BQU8sSUFBQUMsZUFBUSxFQUFDRCxNQUFNLENBQUMsSUFBSSxPQUFPQSxNQUFNLENBQUNFLEtBQUssS0FBSyxVQUFVLElBQUksT0FBT0YsTUFBTSxDQUFDRyxJQUFJLEtBQUssUUFBUTtBQUNsRztBQUVPLElBQU1DLGlCQUFrQyxHQUFBQyxPQUFBLENBQUFELGlCQUFBLEdBQUcsQ0FDaEQ7RUFBQ0YsS0FBSyxFQUFFL0ksV0FBVztFQUFFZ0osSUFBSSxFQUFFLFFBQVE7RUFBRUcsV0FBVyxFQUFFO0FBQWlCLENBQUMsRUFDcEU7RUFBQ0osS0FBSyxFQUFFeEwsWUFBWTtFQUFFeUwsSUFBSSxFQUFFLFNBQVM7RUFBRUcsV0FBVyxFQUFFO0FBQWtCLENBQUMsRUFDdkU7RUFBQ0osS0FBSyxFQUFFakgsaUJBQWlCO0VBQUVrSCxJQUFJLEVBQUUsbUJBQW1CO0VBQUVHLFdBQVcsRUFBRTtBQUF1QixDQUFDLEVBQzNGO0VBQUNKLEtBQUssRUFBRXhFLGtCQUFrQjtFQUFFeUUsSUFBSSxFQUFFO0FBQWUsQ0FBQyxFQUNsRDtFQUFDRCxLQUFLLEVBQUU3RixjQUFjO0VBQUU4RixJQUFJLEVBQUUsV0FBVztFQUFFRyxXQUFXLEVBQUU7QUFBcUIsQ0FBQyxFQUM5RTtFQUFDSixLQUFLLEVBQUVyRSxvQkFBb0I7RUFBRXNFLElBQUksRUFBRTtBQUFpQixDQUFDLENBQ3ZEIiwiaWdub3JlTGlzdCI6W119
|