@igo2/geo 1.12.1 → 1.13.0-alpha.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/assets/icons/cross_black_18px.svg +88 -88
- package/assets/icons/place_blue_36px.svg +55 -55
- package/assets/icons/place_green_36px.svg +55 -55
- package/assets/icons/place_red_36px.svg +55 -55
- package/assets/icons/place_yellow_36px.svg +55 -55
- package/{esm2015/igo2-geo.js → esm2020/igo2-geo.mjs} +0 -0
- package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +299 -0
- package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +268 -0
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +244 -0
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +80 -0
- package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +209 -0
- package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +79 -0
- package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +217 -0
- package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +95 -0
- package/esm2020/lib/catalog/catalog.module.mjs +53 -0
- package/esm2020/lib/catalog/index.mjs +5 -0
- package/esm2020/lib/catalog/shared/catalog.abstract.mjs +95 -0
- package/esm2020/lib/catalog/shared/catalog.enum.mjs +16 -0
- package/esm2020/lib/catalog/shared/catalog.interface.mjs +2 -0
- package/esm2020/lib/catalog/shared/catalog.service.mjs +606 -0
- package/esm2020/lib/catalog/shared/index.mjs +5 -0
- package/esm2020/lib/datasource/datasource.module.mjs +22 -0
- package/esm2020/lib/datasource/index.mjs +3 -0
- package/esm2020/lib/datasource/shared/capabilities.service.mjs +426 -0
- package/esm2020/lib/datasource/shared/datasource.service.mjs +236 -0
- package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +145 -0
- package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +109 -0
- package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +15 -0
- package/esm2020/lib/datasource/shared/datasources/data.service.mjs +3 -0
- package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/datasource.mjs +29 -0
- package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +43 -0
- package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +57 -0
- package/esm2020/lib/datasource/shared/datasources/index.mjs +36 -0
- package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +28 -0
- package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +12 -0
- package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +49 -0
- package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +15 -0
- package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +54 -0
- package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +74 -0
- package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +152 -0
- package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +205 -0
- package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +207 -0
- package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +16 -0
- package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +9 -0
- package/esm2020/lib/datasource/shared/index.mjs +5 -0
- package/esm2020/lib/datasource/shared/options/index.mjs +5 -0
- package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +2 -0
- package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +15 -0
- package/esm2020/lib/datasource/shared/options/options-api.service.mjs +81 -0
- package/esm2020/lib/datasource/shared/options/options.service.mjs +3 -0
- package/esm2020/lib/datasource/utils/esri-style-generator.mjs +357 -0
- package/esm2020/lib/datasource/utils/index.mjs +3 -0
- package/esm2020/lib/datasource/utils/tilegrid.mjs +20 -0
- package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +224 -0
- package/esm2020/lib/directions/directions-buttons/index.mjs +2 -0
- package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +290 -0
- package/esm2020/lib/directions/directions-inputs/index.mjs +2 -0
- package/esm2020/lib/directions/directions-results/directions-results.component.mjs +196 -0
- package/esm2020/lib/directions/directions-results/index.mjs +2 -0
- package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +2 -0
- package/esm2020/lib/directions/directions-sources/directions-source.mjs +3 -0
- package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +16 -0
- package/esm2020/lib/directions/directions-sources/index.mjs +5 -0
- package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +99 -0
- package/esm2020/lib/directions/directions.component.mjs +311 -0
- package/esm2020/lib/directions/directions.module.mjs +102 -0
- package/esm2020/lib/directions/index.mjs +7 -0
- package/esm2020/lib/directions/shared/directions-source.service.mjs +17 -0
- package/esm2020/lib/directions/shared/directions.enum.mjs +28 -0
- package/esm2020/lib/directions/shared/directions.interface.mjs +2 -0
- package/esm2020/lib/directions/shared/directions.service.mjs +29 -0
- package/esm2020/lib/directions/shared/directions.utils.mjs +510 -0
- package/esm2020/lib/directions/shared/index.mjs +6 -0
- package/esm2020/lib/directions/shared/store.mjs +24 -0
- package/esm2020/lib/download/download-button/download-button.component.mjs +61 -0
- package/esm2020/lib/download/download-button/index.mjs +2 -0
- package/esm2020/lib/download/download.module.mjs +42 -0
- package/esm2020/lib/download/index.mjs +3 -0
- package/esm2020/lib/download/shared/download.interface.mjs +2 -0
- package/esm2020/lib/download/shared/download.service.mjs +65 -0
- package/esm2020/lib/download/shared/index.mjs +3 -0
- package/esm2020/lib/draw/draw/draw-popup.component.mjs +61 -0
- package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +48 -0
- package/esm2020/lib/draw/draw/draw.component.mjs +714 -0
- package/esm2020/lib/draw/draw/draw.module.mjs +100 -0
- package/esm2020/lib/draw/drawingTool.module.mjs +20 -0
- package/esm2020/lib/draw/index.mjs +3 -0
- package/esm2020/lib/draw/shared/draw-icon.service.mjs +27 -0
- package/esm2020/lib/draw/shared/draw-style.service.mjs +173 -0
- package/esm2020/lib/draw/shared/draw.enum.mjs +24 -0
- package/esm2020/lib/draw/shared/draw.interface.mjs +2 -0
- package/esm2020/lib/draw/shared/draw.utils.mjs +104 -0
- package/esm2020/lib/draw/shared/index.mjs +6 -0
- package/esm2020/lib/feature/feature-details/feature-details.component.mjs +377 -0
- package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +54 -0
- package/esm2020/lib/feature/feature-details/feature-details.module.mjs +48 -0
- package/esm2020/lib/feature/feature-form/feature-form.component.mjs +112 -0
- package/esm2020/lib/feature/feature-form/feature-form.module.mjs +34 -0
- package/esm2020/lib/feature/feature.module.mjs +28 -0
- package/esm2020/lib/feature/index.mjs +4 -0
- package/esm2020/lib/feature/shared/feature.enums.mjs +9 -0
- package/esm2020/lib/feature/shared/feature.interfaces.mjs +2 -0
- package/esm2020/lib/feature/shared/feature.utils.mjs +348 -0
- package/esm2020/lib/feature/shared/index.mjs +7 -0
- package/esm2020/lib/feature/shared/store.mjs +112 -0
- package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +113 -0
- package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +94 -0
- package/esm2020/lib/feature/shared/strategies/index.mjs +6 -0
- package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +104 -0
- package/esm2020/lib/feature/shared/strategies/loading.mjs +133 -0
- package/esm2020/lib/feature/shared/strategies/selection.mjs +370 -0
- package/esm2020/lib/feature/shared/strategies.utils.mjs +37 -0
- package/esm2020/lib/filter/filter.module.mjs +289 -0
- package/esm2020/lib/filter/index.mjs +16 -0
- package/esm2020/lib/filter/ogc-filter-button/index.mjs +2 -0
- package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +140 -0
- package/esm2020/lib/filter/ogc-filter-form/index.mjs +2 -0
- package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +645 -0
- package/esm2020/lib/filter/ogc-filter-selection/index.mjs +2 -0
- package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1302 -0
- package/esm2020/lib/filter/ogc-filter-time/index.mjs +3 -0
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +177 -0
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +871 -0
- package/esm2020/lib/filter/ogc-filterable-form/index.mjs +2 -0
- package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +59 -0
- package/esm2020/lib/filter/ogc-filterable-item/index.mjs +2 -0
- package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +302 -0
- package/esm2020/lib/filter/ogc-filterable-list/index.mjs +3 -0
- package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +31 -0
- package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +31 -0
- package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +55 -0
- package/esm2020/lib/filter/shared/index.mjs +12 -0
- package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +72 -0
- package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +30 -0
- package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +2 -0
- package/esm2020/lib/filter/shared/ogc-filter.mjs +692 -0
- package/esm2020/lib/filter/shared/ogc-filter.service.mjs +46 -0
- package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +23 -0
- package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +2 -0
- package/esm2020/lib/filter/shared/spatial-filter.service.mjs +269 -0
- package/esm2020/lib/filter/shared/time-filter.enum.mjs +13 -0
- package/esm2020/lib/filter/shared/time-filter.interface.mjs +2 -0
- package/esm2020/lib/filter/shared/time-filter.service.mjs +107 -0
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +2 -0
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1076 -0
- package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +2 -0
- package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +208 -0
- package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +2 -0
- package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +144 -0
- package/esm2020/lib/filter/time-filter-button/index.mjs +2 -0
- package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +78 -0
- package/esm2020/lib/filter/time-filter-form/index.mjs +2 -0
- package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +734 -0
- package/esm2020/lib/filter/time-filter-item/index.mjs +2 -0
- package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +119 -0
- package/esm2020/lib/filter/time-filter-list/index.mjs +3 -0
- package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +31 -0
- package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +39 -0
- package/esm2020/lib/geo.module.mjs +102 -0
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +511 -0
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +189 -0
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +64 -0
- package/esm2020/lib/geometry/geometry.module.mjs +27 -0
- package/esm2020/lib/geometry/index.mjs +4 -0
- package/esm2020/lib/geometry/shared/controls/draw.mjs +271 -0
- package/esm2020/lib/geometry/shared/controls/index.mjs +4 -0
- package/esm2020/lib/geometry/shared/controls/modify.mjs +521 -0
- package/esm2020/lib/geometry/shared/controls/slice.mjs +177 -0
- package/esm2020/lib/geometry/shared/geometry.errors.mjs +26 -0
- package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +2 -0
- package/esm2020/lib/geometry/shared/geometry.utils.mjs +122 -0
- package/esm2020/lib/geometry/shared/index.mjs +5 -0
- package/esm2020/lib/import-export/export-button/export-button.component.mjs +64 -0
- package/esm2020/lib/import-export/export-button/index.mjs +2 -0
- package/esm2020/lib/import-export/import-export/import-export.component.mjs +1190 -0
- package/esm2020/lib/import-export/import-export/index.mjs +2 -0
- package/esm2020/lib/import-export/import-export.module.mjs +93 -0
- package/esm2020/lib/import-export/index.mjs +5 -0
- package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +135 -0
- package/esm2020/lib/import-export/shared/export.errors.mjs +15 -0
- package/esm2020/lib/import-export/shared/export.interface.mjs +2 -0
- package/esm2020/lib/import-export/shared/export.service.mjs +195 -0
- package/esm2020/lib/import-export/shared/export.type.mjs +4 -0
- package/esm2020/lib/import-export/shared/export.utils.mjs +55 -0
- package/esm2020/lib/import-export/shared/import.errors.mjs +39 -0
- package/esm2020/lib/import-export/shared/import.interface.mjs +2 -0
- package/esm2020/lib/import-export/shared/import.service.mjs +195 -0
- package/esm2020/lib/import-export/shared/import.utils.mjs +234 -0
- package/esm2020/lib/import-export/shared/index.mjs +11 -0
- package/esm2020/lib/import-export/style-list/index.mjs +5 -0
- package/esm2020/lib/import-export/style-list/style-list.interface.mjs +2 -0
- package/esm2020/lib/import-export/style-list/style-list.module.mjs +23 -0
- package/esm2020/lib/import-export/style-list/style-list.provider.mjs +21 -0
- package/esm2020/lib/import-export/style-list/style-list.service.mjs +51 -0
- package/esm2020/lib/layer/index.mjs +10 -0
- package/esm2020/lib/layer/layer-item/index.mjs +2 -0
- package/esm2020/lib/layer/layer-item/layer-item.component.mjs +300 -0
- package/esm2020/lib/layer/layer-legend/index.mjs +2 -0
- package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +382 -0
- package/esm2020/lib/layer/layer-legend-item/index.mjs +2 -0
- package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +84 -0
- package/esm2020/lib/layer/layer-legend-list/index.mjs +3 -0
- package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +48 -0
- package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +195 -0
- package/esm2020/lib/layer/layer-list/index.mjs +4 -0
- package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +59 -0
- package/esm2020/lib/layer/layer-list/layer-list.component.mjs +1024 -0
- package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +19 -0
- package/esm2020/lib/layer/layer-list-tool/index.mjs +5 -0
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +165 -0
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +7 -0
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +2 -0
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +22 -0
- package/esm2020/lib/layer/layer.module.mjs +173 -0
- package/esm2020/lib/layer/shared/clusterParam.mjs +2 -0
- package/esm2020/lib/layer/shared/index.mjs +7 -0
- package/esm2020/lib/layer/shared/layer.enums.mjs +2 -0
- package/esm2020/lib/layer/shared/layer.service.mjs +186 -0
- package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +2 -0
- package/esm2020/lib/layer/shared/layers/any-layer.mjs +2 -0
- package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +2 -0
- package/esm2020/lib/layer/shared/layers/image-layer.mjs +68 -0
- package/esm2020/lib/layer/shared/layers/index.mjs +13 -0
- package/esm2020/lib/layer/shared/layers/layer.interface.mjs +17 -0
- package/esm2020/lib/layer/shared/layers/layer.mjs +170 -0
- package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +2 -0
- package/esm2020/lib/layer/shared/layers/tile-layer.mjs +47 -0
- package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +2 -0
- package/esm2020/lib/layer/shared/layers/vector-layer.mjs +376 -0
- package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +2 -0
- package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +104 -0
- package/esm2020/lib/layer/shared/style.service.mjs +356 -0
- package/esm2020/lib/layer/shared/vector-style.interface.mjs +2 -0
- package/esm2020/lib/layer/track-feature-button/index.mjs +2 -0
- package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +59 -0
- package/esm2020/lib/layer/utils/image-watcher.mjs +62 -0
- package/esm2020/lib/layer/utils/index.mjs +7 -0
- package/esm2020/lib/layer/utils/layer.utils.mjs +10 -0
- package/esm2020/lib/layer/utils/layerSync-watcher.mjs +242 -0
- package/esm2020/lib/layer/utils/outputLegend.mjs +27 -0
- package/esm2020/lib/layer/utils/tile-watcher.mjs +50 -0
- package/esm2020/lib/layer/utils/vector-watcher.mjs +48 -0
- package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +20 -0
- package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +97 -0
- package/esm2020/lib/map/baselayers-switcher/index.mjs +3 -0
- package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +133 -0
- package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +76 -0
- package/esm2020/lib/map/geolocate-button/index.mjs +2 -0
- package/esm2020/lib/map/home-extent-button/home-extent-button.component.mjs +63 -0
- package/{esm2015/lib/map/home-extent-button/index.js → esm2020/lib/map/home-extent-button/index.mjs} +0 -0
- package/esm2020/lib/map/index.mjs +14 -0
- package/esm2020/lib/map/info-section/index.mjs +2 -0
- package/esm2020/lib/map/info-section/info-section.component.mjs +30 -0
- package/esm2020/lib/map/map-browser/index.mjs +2 -0
- package/esm2020/lib/map/map-browser/map-browser.component.mjs +66 -0
- package/esm2020/lib/map/map-center/index.mjs +2 -0
- package/esm2020/lib/map/map-center/map-center.component.mjs +50 -0
- package/esm2020/lib/map/map.module.mjs +127 -0
- package/esm2020/lib/map/menu-button/index.mjs +2 -0
- package/esm2020/lib/map/menu-button/menu-button.component.mjs +62 -0
- package/esm2020/lib/map/offline-button/index.mjs +2 -0
- package/esm2020/lib/map/offline-button/offline-button.component.mjs +76 -0
- package/esm2020/lib/map/rotation-button/index.mjs +2 -0
- package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +91 -0
- package/esm2020/lib/map/shared/controllers/controller.mjs +42 -0
- package/esm2020/lib/map/shared/controllers/geolocation.mjs +308 -0
- package/esm2020/lib/map/shared/controllers/index.mjs +4 -0
- package/esm2020/lib/map/shared/controllers/view.mjs +342 -0
- package/esm2020/lib/map/shared/hover-feature.directive.mjs +506 -0
- package/esm2020/lib/map/shared/index.mjs +13 -0
- package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +107 -0
- package/esm2020/lib/map/shared/map.enums.mjs +6 -0
- package/esm2020/lib/map/shared/map.interface.mjs +2 -0
- package/esm2020/lib/map/shared/map.mjs +417 -0
- package/esm2020/lib/map/shared/map.service.mjs +29 -0
- package/esm2020/lib/map/shared/map.utils.mjs +459 -0
- package/esm2020/lib/map/shared/mapOffline.directive.mjs +163 -0
- package/esm2020/lib/map/shared/projection.interfaces.mjs +2 -0
- package/esm2020/lib/map/shared/projection.service.mjs +65 -0
- package/esm2020/lib/map/shared/projection.utils.mjs +64 -0
- package/esm2020/lib/map/swipe-control/index.mjs +2 -0
- package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +193 -0
- package/esm2020/lib/map/utils/layer-watcher.mjs +58 -0
- package/esm2020/lib/map/wake-lock-button/index.mjs +2 -0
- package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +114 -0
- package/esm2020/lib/map/zoom-button/index.mjs +2 -0
- package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +40 -0
- package/esm2020/lib/measure/index.mjs +4 -0
- package/esm2020/lib/measure/measure.module.mjs +20 -0
- package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +37 -0
- package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +180 -0
- package/esm2020/lib/measure/measurer/measurer-item.component.mjs +140 -0
- package/esm2020/lib/measure/measurer/measurer.component.mjs +1042 -0
- package/esm2020/lib/measure/measurer/measurer.module.mjs +94 -0
- package/esm2020/lib/measure/shared/index.mjs +4 -0
- package/esm2020/lib/measure/shared/measure.enum.mjs +37 -0
- package/esm2020/lib/measure/shared/measure.interfaces.mjs +2 -0
- package/esm2020/lib/measure/shared/measure.utils.mjs +489 -0
- package/esm2020/lib/metadata/index.mjs +3 -0
- package/esm2020/lib/metadata/metadata-button/index.mjs +2 -0
- package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +134 -0
- package/esm2020/lib/metadata/metadata.module.mjs +55 -0
- package/esm2020/lib/metadata/shared/index.mjs +3 -0
- package/esm2020/lib/metadata/shared/metadata.interface.mjs +2 -0
- package/esm2020/lib/metadata/shared/metadata.service.mjs +19 -0
- package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +6 -0
- package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +2 -0
- package/esm2020/lib/offline/geoDB/geoDB.service.mjs +161 -0
- package/esm2020/lib/offline/geoDB/index.mjs +4 -0
- package/esm2020/lib/offline/index.mjs +3 -0
- package/esm2020/lib/offline/shared/geo-network.service.mjs +66 -0
- package/esm2020/lib/offline/shared/index.mjs +2 -0
- package/esm2020/lib/overlay/index.mjs +2 -0
- package/esm2020/lib/overlay/overlay.module.mjs +23 -0
- package/esm2020/lib/overlay/shared/index.mjs +7 -0
- package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +69 -0
- package/esm2020/lib/overlay/shared/overlay.directive.mjs +33 -0
- package/esm2020/lib/overlay/shared/overlay.enum.mjs +8 -0
- package/esm2020/lib/overlay/shared/overlay.mjs +130 -0
- package/esm2020/lib/overlay/shared/overlay.service.mjs +27 -0
- package/esm2020/lib/overlay/shared/overlay.utils.mjs +103 -0
- package/esm2020/lib/print/index.mjs +4 -0
- package/esm2020/lib/print/print/print.component.mjs +123 -0
- package/esm2020/lib/print/print-form/index.mjs +2 -0
- package/esm2020/lib/print/print-form/print-form.component.mjs +405 -0
- package/esm2020/lib/print/print.module.mjs +65 -0
- package/esm2020/lib/print/shared/index.mjs +4 -0
- package/esm2020/lib/print/shared/print.interface.mjs +2 -0
- package/esm2020/lib/print/shared/print.service.mjs +807 -0
- package/esm2020/lib/print/shared/print.type.mjs +30 -0
- package/esm2020/lib/query/index.mjs +2 -0
- package/esm2020/lib/query/query.module.mjs +29 -0
- package/esm2020/lib/query/shared/index.mjs +7 -0
- package/esm2020/lib/query/shared/query-search-source.mjs +35 -0
- package/esm2020/lib/query/shared/query-search-source.providers.mjs +22 -0
- package/esm2020/lib/query/shared/query.directive.mjs +261 -0
- package/esm2020/lib/query/shared/query.enums.mjs +30 -0
- package/esm2020/lib/query/shared/query.interfaces.mjs +2 -0
- package/esm2020/lib/query/shared/query.service.mjs +613 -0
- package/esm2020/lib/query/shared/query.utils.mjs +37 -0
- package/esm2020/lib/search/index.mjs +12 -0
- package/esm2020/lib/search/search-bar/search-bar.component.mjs +489 -0
- package/esm2020/lib/search/search-bar/search-bar.module.mjs +75 -0
- package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +35 -0
- package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +193 -0
- package/esm2020/lib/search/search-results/search-results-item.component.mjs +124 -0
- package/esm2020/lib/search/search-results/search-results.component.mjs +331 -0
- package/esm2020/lib/search/search-results/search-results.module.mjs +77 -0
- package/esm2020/lib/search/search-selector/search-selector.component.mjs +123 -0
- package/esm2020/lib/search/search-selector/search-selector.module.mjs +56 -0
- package/esm2020/lib/search/search-settings/search-settings.component.mjs +418 -0
- package/esm2020/lib/search/search-settings/search-settings.module.mjs +60 -0
- package/esm2020/lib/search/search.module.mjs +67 -0
- package/esm2020/lib/search/shared/index.mjs +9 -0
- package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +322 -0
- package/esm2020/lib/search/shared/search-source-service.providers.mjs +20 -0
- package/esm2020/lib/search/shared/search-source.service.mjs +47 -0
- package/esm2020/lib/search/shared/search.enums.mjs +4 -0
- package/esm2020/lib/search/shared/search.interfaces.mjs +2 -0
- package/esm2020/lib/search/shared/search.service.mjs +118 -0
- package/esm2020/lib/search/shared/search.utils.mjs +78 -0
- package/esm2020/lib/search/shared/sources/cadastre.mjs +126 -0
- package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +23 -0
- package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +2 -0
- package/esm2020/lib/search/shared/sources/coordinates.mjs +147 -0
- package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +40 -0
- package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +2 -0
- package/esm2020/lib/search/shared/sources/icherche.mjs +755 -0
- package/esm2020/lib/search/shared/sources/icherche.providers.mjs +66 -0
- package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +2 -0
- package/esm2020/lib/search/shared/sources/ilayer.mjs +320 -0
- package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +40 -0
- package/esm2020/lib/search/shared/sources/index.mjs +20 -0
- package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +2 -0
- package/esm2020/lib/search/shared/sources/nominatim.mjs +253 -0
- package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +23 -0
- package/esm2020/lib/search/shared/sources/source.interfaces.mjs +2 -0
- package/esm2020/lib/search/shared/sources/source.mjs +179 -0
- package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +2 -0
- package/esm2020/lib/search/shared/sources/storedqueries.mjs +425 -0
- package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +41 -0
- package/esm2020/lib/toast/index.mjs +2 -0
- package/esm2020/lib/toast/toast.component.mjs +113 -0
- package/esm2020/lib/toast/toast.module.mjs +45 -0
- package/esm2020/lib/utils/commonVectorStyle.interface.mjs +2 -0
- package/esm2020/lib/utils/commonVectorStyle.mjs +75 -0
- package/esm2020/lib/utils/googleLinks.mjs +13 -0
- package/esm2020/lib/utils/id-generator.mjs +110 -0
- package/esm2020/lib/utils/index.mjs +6 -0
- package/esm2020/lib/utils/osmLinks.mjs +10 -0
- package/esm2020/lib/wkt/index.mjs +2 -0
- package/esm2020/lib/wkt/shared/index.mjs +2 -0
- package/esm2020/lib/wkt/shared/wkt.service.mjs +239 -0
- package/esm2020/lib/wkt/wkt.module.mjs +22 -0
- package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +48 -0
- package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +36 -0
- package/esm2020/lib/workspace/confirmation-popup/index.mjs +3 -0
- package/esm2020/lib/workspace/index.mjs +8 -0
- package/esm2020/lib/workspace/shared/edition-workspace.mjs +278 -0
- package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +642 -0
- package/esm2020/lib/workspace/shared/feature-workspace.mjs +35 -0
- package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +150 -0
- package/esm2020/lib/workspace/shared/index.mjs +8 -0
- package/esm2020/lib/workspace/shared/wfs-workspace.mjs +35 -0
- package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +150 -0
- package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +261 -0
- package/esm2020/lib/workspace/shared/workspace.utils.mjs +24 -0
- package/esm2020/lib/workspace/widgets/index.mjs +4 -0
- package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +47 -0
- package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +36 -0
- package/esm2020/lib/workspace/widgets/widgets.mjs +15 -0
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +133 -0
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +28 -0
- package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +113 -0
- package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +28 -0
- package/esm2020/lib/workspace/workspace.module.mjs +62 -0
- package/esm2020/public_api.mjs +55 -0
- package/fesm2015/igo2-geo.mjs +42904 -0
- package/fesm2015/igo2-geo.mjs.map +1 -0
- package/fesm2020/igo2-geo.mjs +41183 -0
- package/fesm2020/igo2-geo.mjs.map +1 -0
- package/{igo2-geo.d.ts → index.d.ts} +0 -0
- package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +1 -1
- package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
- package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
- package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +4 -4
- package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
- package/lib/catalog/catalog-library/catalog-library.component.d.ts +1 -1
- package/lib/directions/directions-buttons/directions-buttons.component.d.ts +1 -1
- package/lib/directions/directions-inputs/directions-inputs.component.d.ts +1 -1
- package/lib/directions/directions-results/directions-results.component.d.ts +1 -1
- package/lib/directions/directions.component.d.ts +1 -1
- package/lib/download/download-button/download-button.component.d.ts +1 -1
- package/lib/draw/draw/draw-popup.component.d.ts +1 -1
- package/lib/draw/draw/draw-shorcuts.component.d.ts +1 -1
- package/lib/draw/draw/draw.component.d.ts +4 -4
- package/lib/feature/feature-details/feature-details.component.d.ts +1 -1
- package/lib/feature/feature-details/feature-details.directive.d.ts +1 -1
- package/lib/feature/feature-form/feature-form.component.d.ts +1 -1
- package/lib/feature/shared/feature.interfaces.d.ts +2 -2
- package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
- package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +1 -1
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +4 -4
- package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
- package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +6 -6
- package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +1 -1
- package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
- package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
- package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +1 -1
- package/lib/filter/shared/filterable-datasource.pipe.d.ts +1 -1
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +5 -5
- package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +4 -4
- package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -3
- package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
- package/lib/filter/time-filter-form/time-filter-form.component.d.ts +1 -1
- package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
- package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
- package/lib/filter/time-filter-list/time-filter-list.component.d.ts +1 -1
- package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -1
- package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +3 -3
- package/lib/import-export/export-button/export-button.component.d.ts +1 -1
- package/lib/import-export/import-export/import-export.component.d.ts +5 -5
- package/lib/import-export/shared/drop-geo-file.directive.d.ts +1 -1
- package/lib/layer/layer-item/layer-item.component.d.ts +1 -1
- package/lib/layer/layer-legend/layer-legend.component.d.ts +1 -1
- package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +1 -1
- package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
- package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
- package/lib/layer/layer-list/layer-list-binding.directive.d.ts +1 -1
- package/lib/layer/layer-list/layer-list.component.d.ts +1 -1
- package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
- package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
- package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +1 -1
- package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
- package/lib/map/geolocate-button/geolocate-button.component.d.ts +1 -1
- package/lib/map/home-extent-button/home-extent-button.component.d.ts +1 -1
- package/lib/map/info-section/info-section.component.d.ts +1 -1
- package/lib/map/map-browser/map-browser.component.d.ts +1 -1
- package/lib/map/map-center/map-center.component.d.ts +1 -1
- package/lib/map/menu-button/menu-button.component.d.ts +1 -1
- package/lib/map/offline-button/offline-button.component.d.ts +1 -1
- package/lib/map/rotation-button/rotation-button.component.d.ts +1 -1
- package/lib/map/shared/hover-feature.directive.d.ts +1 -1
- package/lib/map/shared/map-pointer-position.directive.d.ts +1 -1
- package/lib/map/shared/mapOffline.directive.d.ts +1 -1
- package/lib/map/swipe-control/swipe-control.component.d.ts +1 -1
- package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +1 -1
- package/lib/map/zoom-button/zoom-button.component.d.ts +1 -1
- package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
- package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
- package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
- package/lib/measure/measurer/measurer.component.d.ts +1 -1
- package/lib/metadata/metadata-button/metadata-button.component.d.ts +2 -2
- package/lib/overlay/shared/overlay.directive.d.ts +1 -1
- package/lib/print/print/print.component.d.ts +1 -1
- package/lib/print/print-form/print-form.component.d.ts +17 -17
- package/lib/print/shared/print.service.d.ts +6 -1
- package/lib/query/shared/query.directive.d.ts +1 -1
- package/lib/search/search-bar/search-bar.component.d.ts +1 -1
- package/lib/search/search-bar/search-url-param.directive.d.ts +1 -1
- package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
- package/lib/search/search-results/search-results-item.component.d.ts +1 -1
- package/lib/search/search-results/search-results.component.d.ts +1 -1
- package/lib/search/search-selector/search-selector.component.d.ts +1 -1
- package/lib/search/search-settings/search-settings.component.d.ts +1 -1
- package/lib/search/shared/search-pointer-summary.directive.d.ts +1 -1
- package/lib/toast/toast.component.d.ts +1 -1
- package/lib/wkt/shared/wkt.service.d.ts +1 -1
- package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
- package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
- package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
- package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
- package/ngcc.config.js +3 -3
- package/package.json +32 -19
- package/style/geo.theming.scss +12 -12
- package/bundles/igo2-geo.umd.js +0 -47639
- package/bundles/igo2-geo.umd.js.map +0 -1
- package/esm2015/lib/catalog/catalog-browser/catalog-browser-group.component.js +0 -305
- package/esm2015/lib/catalog/catalog-browser/catalog-browser-layer.component.js +0 -274
- package/esm2015/lib/catalog/catalog-browser/catalog-browser.component.js +0 -248
- package/esm2015/lib/catalog/catalog-browser/catalog-browser.module.js +0 -82
- package/esm2015/lib/catalog/catalog-library/add-catalog-dialog.component.js +0 -235
- package/esm2015/lib/catalog/catalog-library/catalog-library-item.component.js +0 -85
- package/esm2015/lib/catalog/catalog-library/catalog-library.component.js +0 -224
- package/esm2015/lib/catalog/catalog-library/catalog-library.module.js +0 -97
- package/esm2015/lib/catalog/catalog.module.js +0 -55
- package/esm2015/lib/catalog/index.js +0 -5
- package/esm2015/lib/catalog/shared/catalog.abstract.js +0 -95
- package/esm2015/lib/catalog/shared/catalog.enum.js +0 -16
- package/esm2015/lib/catalog/shared/catalog.interface.js +0 -2
- package/esm2015/lib/catalog/shared/catalog.service.js +0 -606
- package/esm2015/lib/catalog/shared/index.js +0 -5
- package/esm2015/lib/datasource/datasource.module.js +0 -22
- package/esm2015/lib/datasource/index.js +0 -3
- package/esm2015/lib/datasource/shared/capabilities.service.js +0 -427
- package/esm2015/lib/datasource/shared/datasource.service.js +0 -236
- package/esm2015/lib/datasource/shared/datasources/any-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/any-datasource.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.js +0 -145
- package/esm2015/lib/datasource/shared/datasources/carto-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/carto-datasource.js +0 -109
- package/esm2015/lib/datasource/shared/datasources/cluster-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/cluster-datasource.js +0 -15
- package/esm2015/lib/datasource/shared/datasources/data.service.js +0 -3
- package/esm2015/lib/datasource/shared/datasources/datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/datasource.js +0 -29
- package/esm2015/lib/datasource/shared/datasources/feature-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/feature-datasource.js +0 -43
- package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.js +0 -57
- package/esm2015/lib/datasource/shared/datasources/index.js +0 -36
- package/esm2015/lib/datasource/shared/datasources/mvt-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/mvt-datasource.js +0 -28
- package/esm2015/lib/datasource/shared/datasources/osm-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/osm-datasource.js +0 -12
- package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.js +0 -49
- package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.js +0 -15
- package/esm2015/lib/datasource/shared/datasources/websocket-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/websocket-datasource.js +0 -54
- package/esm2015/lib/datasource/shared/datasources/wfs-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/wfs-datasource.js +0 -74
- package/esm2015/lib/datasource/shared/datasources/wfs.service.js +0 -153
- package/esm2015/lib/datasource/shared/datasources/wms-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/wms-datasource.js +0 -205
- package/esm2015/lib/datasource/shared/datasources/wms-wfs.utils.js +0 -207
- package/esm2015/lib/datasource/shared/datasources/wmts-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/wmts-datasource.js +0 -16
- package/esm2015/lib/datasource/shared/datasources/xyz-datasource.interface.js +0 -2
- package/esm2015/lib/datasource/shared/datasources/xyz-datasource.js +0 -9
- package/esm2015/lib/datasource/shared/index.js +0 -5
- package/esm2015/lib/datasource/shared/options/index.js +0 -5
- package/esm2015/lib/datasource/shared/options/options-api.interface.js +0 -2
- package/esm2015/lib/datasource/shared/options/options-api.providers.js +0 -15
- package/esm2015/lib/datasource/shared/options/options-api.service.js +0 -81
- package/esm2015/lib/datasource/shared/options/options.service.js +0 -3
- package/esm2015/lib/datasource/utils/esri-style-generator.js +0 -357
- package/esm2015/lib/datasource/utils/index.js +0 -3
- package/esm2015/lib/datasource/utils/tilegrid.js +0 -20
- package/esm2015/lib/directions/directions-buttons/directions-buttons.component.js +0 -229
- package/esm2015/lib/directions/directions-buttons/index.js +0 -2
- package/esm2015/lib/directions/directions-inputs/directions-inputs.component.js +0 -300
- package/esm2015/lib/directions/directions-inputs/index.js +0 -2
- package/esm2015/lib/directions/directions-results/directions-results.component.js +0 -204
- package/esm2015/lib/directions/directions-results/index.js +0 -2
- package/esm2015/lib/directions/directions-sources/directions-source.interface.js +0 -2
- package/esm2015/lib/directions/directions-sources/directions-source.js +0 -3
- package/esm2015/lib/directions/directions-sources/directions-source.provider.js +0 -16
- package/esm2015/lib/directions/directions-sources/index.js +0 -5
- package/esm2015/lib/directions/directions-sources/osrm-directions-source.js +0 -99
- package/esm2015/lib/directions/directions.component.js +0 -316
- package/esm2015/lib/directions/directions.module.js +0 -104
- package/esm2015/lib/directions/index.js +0 -7
- package/esm2015/lib/directions/shared/directions-source.service.js +0 -17
- package/esm2015/lib/directions/shared/directions.enum.js +0 -28
- package/esm2015/lib/directions/shared/directions.interface.js +0 -2
- package/esm2015/lib/directions/shared/directions.service.js +0 -29
- package/esm2015/lib/directions/shared/directions.utils.js +0 -510
- package/esm2015/lib/directions/shared/index.js +0 -6
- package/esm2015/lib/directions/shared/store.js +0 -24
- package/esm2015/lib/download/download-button/download-button.component.js +0 -66
- package/esm2015/lib/download/download-button/index.js +0 -2
- package/esm2015/lib/download/download.module.js +0 -44
- package/esm2015/lib/download/index.js +0 -3
- package/esm2015/lib/download/shared/download.interface.js +0 -2
- package/esm2015/lib/download/shared/download.service.js +0 -65
- package/esm2015/lib/download/shared/index.js +0 -3
- package/esm2015/lib/draw/draw/draw-popup.component.js +0 -69
- package/esm2015/lib/draw/draw/draw-shorcuts.component.js +0 -64
- package/esm2015/lib/draw/draw/draw.component.js +0 -745
- package/esm2015/lib/draw/draw/draw.module.js +0 -102
- package/esm2015/lib/draw/drawingTool.module.js +0 -20
- package/esm2015/lib/draw/index.js +0 -3
- package/esm2015/lib/draw/shared/draw-icon.service.js +0 -27
- package/esm2015/lib/draw/shared/draw-style.service.js +0 -173
- package/esm2015/lib/draw/shared/draw.enum.js +0 -24
- package/esm2015/lib/draw/shared/draw.interface.js +0 -2
- package/esm2015/lib/draw/shared/draw.utils.js +0 -104
- package/esm2015/lib/draw/shared/index.js +0 -6
- package/esm2015/lib/feature/feature-details/feature-details.component.js +0 -393
- package/esm2015/lib/feature/feature-details/feature-details.directive.js +0 -54
- package/esm2015/lib/feature/feature-details/feature-details.module.js +0 -50
- package/esm2015/lib/feature/feature-form/feature-form.component.js +0 -117
- package/esm2015/lib/feature/feature-form/feature-form.module.js +0 -36
- package/esm2015/lib/feature/feature.module.js +0 -30
- package/esm2015/lib/feature/index.js +0 -4
- package/esm2015/lib/feature/shared/feature.enums.js +0 -9
- package/esm2015/lib/feature/shared/feature.interfaces.js +0 -2
- package/esm2015/lib/feature/shared/feature.utils.js +0 -348
- package/esm2015/lib/feature/shared/index.js +0 -7
- package/esm2015/lib/feature/shared/store.js +0 -112
- package/esm2015/lib/feature/shared/strategies/in-map-extent.js +0 -114
- package/esm2015/lib/feature/shared/strategies/in-map-resolution.js +0 -94
- package/esm2015/lib/feature/shared/strategies/index.js +0 -6
- package/esm2015/lib/feature/shared/strategies/loading-layer.js +0 -104
- package/esm2015/lib/feature/shared/strategies/loading.js +0 -133
- package/esm2015/lib/feature/shared/strategies/selection.js +0 -370
- package/esm2015/lib/feature/shared/strategies.utils.js +0 -37
- package/esm2015/lib/filter/filter.module.js +0 -290
- package/esm2015/lib/filter/index.js +0 -16
- package/esm2015/lib/filter/ogc-filter-button/index.js +0 -2
- package/esm2015/lib/filter/ogc-filter-button/ogc-filter-button.component.js +0 -161
- package/esm2015/lib/filter/ogc-filter-form/index.js +0 -2
- package/esm2015/lib/filter/ogc-filter-form/ogc-filter-form.component.js +0 -657
- package/esm2015/lib/filter/ogc-filter-selection/index.js +0 -2
- package/esm2015/lib/filter/ogc-filter-selection/ogc-filter-selection.component.js +0 -1355
- package/esm2015/lib/filter/ogc-filter-time/index.js +0 -3
- package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.js +0 -185
- package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time.component.js +0 -898
- package/esm2015/lib/filter/ogc-filterable-form/index.js +0 -2
- package/esm2015/lib/filter/ogc-filterable-form/ogc-filterable-form.component.js +0 -62
- package/esm2015/lib/filter/ogc-filterable-item/index.js +0 -2
- package/esm2015/lib/filter/ogc-filterable-item/ogc-filterable-item.component.js +0 -307
- package/esm2015/lib/filter/ogc-filterable-list/index.js +0 -3
- package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.js +0 -31
- package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list.component.js +0 -35
- package/esm2015/lib/filter/shared/filterable-datasource.pipe.js +0 -55
- package/esm2015/lib/filter/shared/index.js +0 -12
- package/esm2015/lib/filter/shared/ogc-filter-time.service.js +0 -73
- package/esm2015/lib/filter/shared/ogc-filter.enum.js +0 -30
- package/esm2015/lib/filter/shared/ogc-filter.interface.js +0 -2
- package/esm2015/lib/filter/shared/ogc-filter.js +0 -693
- package/esm2015/lib/filter/shared/ogc-filter.service.js +0 -46
- package/esm2015/lib/filter/shared/spatial-filter.enum.js +0 -23
- package/esm2015/lib/filter/shared/spatial-filter.interface.js +0 -2
- package/esm2015/lib/filter/shared/spatial-filter.service.js +0 -269
- package/esm2015/lib/filter/shared/time-filter.enum.js +0 -13
- package/esm2015/lib/filter/shared/time-filter.interface.js +0 -2
- package/esm2015/lib/filter/shared/time-filter.service.js +0 -107
- package/esm2015/lib/filter/spatial-filter/spatial-filter-item/index.js +0 -2
- package/esm2015/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.js +0 -1108
- package/esm2015/lib/filter/spatial-filter/spatial-filter-list/index.js +0 -2
- package/esm2015/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.js +0 -224
- package/esm2015/lib/filter/spatial-filter/spatial-filter-type/index.js +0 -2
- package/esm2015/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.js +0 -157
- package/esm2015/lib/filter/time-filter-button/index.js +0 -2
- package/esm2015/lib/filter/time-filter-button/time-filter-button.component.js +0 -83
- package/esm2015/lib/filter/time-filter-form/index.js +0 -2
- package/esm2015/lib/filter/time-filter-form/time-filter-form.component.js +0 -772
- package/esm2015/lib/filter/time-filter-item/index.js +0 -2
- package/esm2015/lib/filter/time-filter-item/time-filter-item.component.js +0 -126
- package/esm2015/lib/filter/time-filter-list/index.js +0 -3
- package/esm2015/lib/filter/time-filter-list/time-filter-list-binding.directive.js +0 -31
- package/esm2015/lib/filter/time-filter-list/time-filter-list.component.js +0 -43
- package/esm2015/lib/geo.module.js +0 -102
- package/esm2015/lib/geometry/geometry-form-field/geometry-form-field-input.component.js +0 -515
- package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.component.js +0 -199
- package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.module.js +0 -66
- package/esm2015/lib/geometry/geometry.module.js +0 -29
- package/esm2015/lib/geometry/index.js +0 -4
- package/esm2015/lib/geometry/shared/controls/draw.js +0 -271
- package/esm2015/lib/geometry/shared/controls/index.js +0 -4
- package/esm2015/lib/geometry/shared/controls/modify.js +0 -521
- package/esm2015/lib/geometry/shared/controls/slice.js +0 -177
- package/esm2015/lib/geometry/shared/geometry.errors.js +0 -26
- package/esm2015/lib/geometry/shared/geometry.interfaces.js +0 -2
- package/esm2015/lib/geometry/shared/geometry.utils.js +0 -122
- package/esm2015/lib/geometry/shared/index.js +0 -5
- package/esm2015/lib/import-export/export-button/export-button.component.js +0 -70
- package/esm2015/lib/import-export/export-button/index.js +0 -2
- package/esm2015/lib/import-export/import-export/import-export.component.js +0 -1238
- package/esm2015/lib/import-export/import-export/index.js +0 -2
- package/esm2015/lib/import-export/import-export.module.js +0 -95
- package/esm2015/lib/import-export/index.js +0 -5
- package/esm2015/lib/import-export/shared/drop-geo-file.directive.js +0 -136
- package/esm2015/lib/import-export/shared/export.errors.js +0 -15
- package/esm2015/lib/import-export/shared/export.interface.js +0 -2
- package/esm2015/lib/import-export/shared/export.service.js +0 -195
- package/esm2015/lib/import-export/shared/export.type.js +0 -4
- package/esm2015/lib/import-export/shared/export.utils.js +0 -55
- package/esm2015/lib/import-export/shared/import.errors.js +0 -39
- package/esm2015/lib/import-export/shared/import.interface.js +0 -2
- package/esm2015/lib/import-export/shared/import.service.js +0 -195
- package/esm2015/lib/import-export/shared/import.utils.js +0 -234
- package/esm2015/lib/import-export/shared/index.js +0 -11
- package/esm2015/lib/import-export/style-list/index.js +0 -5
- package/esm2015/lib/import-export/style-list/style-list.interface.js +0 -2
- package/esm2015/lib/import-export/style-list/style-list.module.js +0 -23
- package/esm2015/lib/import-export/style-list/style-list.provider.js +0 -21
- package/esm2015/lib/import-export/style-list/style-list.service.js +0 -51
- package/esm2015/lib/layer/index.js +0 -10
- package/esm2015/lib/layer/layer-item/index.js +0 -2
- package/esm2015/lib/layer/layer-item/layer-item.component.js +0 -305
- package/esm2015/lib/layer/layer-legend/index.js +0 -2
- package/esm2015/lib/layer/layer-legend/layer-legend.component.js +0 -395
- package/esm2015/lib/layer/layer-legend-item/index.js +0 -2
- package/esm2015/lib/layer/layer-legend-item/layer-legend-item.component.js +0 -91
- package/esm2015/lib/layer/layer-legend-list/index.js +0 -3
- package/esm2015/lib/layer/layer-legend-list/layer-legend-list-binding.directive.js +0 -48
- package/esm2015/lib/layer/layer-legend-list/layer-legend-list.component.js +0 -200
- package/esm2015/lib/layer/layer-list/index.js +0 -4
- package/esm2015/lib/layer/layer-list/layer-list-binding.directive.js +0 -59
- package/esm2015/lib/layer/layer-list/layer-list.component.js +0 -1043
- package/esm2015/lib/layer/layer-list/layer-list.enum.js +0 -19
- package/esm2015/lib/layer/layer-list-tool/index.js +0 -5
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.component.js +0 -176
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.enum.js +0 -7
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.interface.js +0 -2
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.service.js +0 -22
- package/esm2015/lib/layer/layer.module.js +0 -174
- package/esm2015/lib/layer/shared/clusterParam.js +0 -2
- package/esm2015/lib/layer/shared/index.js +0 -7
- package/esm2015/lib/layer/shared/layer.enums.js +0 -2
- package/esm2015/lib/layer/shared/layer.service.js +0 -186
- package/esm2015/lib/layer/shared/layers/any-layer.interface.js +0 -2
- package/esm2015/lib/layer/shared/layers/any-layer.js +0 -2
- package/esm2015/lib/layer/shared/layers/image-layer.interface.js +0 -2
- package/esm2015/lib/layer/shared/layers/image-layer.js +0 -68
- package/esm2015/lib/layer/shared/layers/index.js +0 -13
- package/esm2015/lib/layer/shared/layers/layer.interface.js +0 -17
- package/esm2015/lib/layer/shared/layers/layer.js +0 -169
- package/esm2015/lib/layer/shared/layers/tile-layer.interface.js +0 -2
- package/esm2015/lib/layer/shared/layers/tile-layer.js +0 -47
- package/esm2015/lib/layer/shared/layers/vector-layer.interface.js +0 -2
- package/esm2015/lib/layer/shared/layers/vector-layer.js +0 -376
- package/esm2015/lib/layer/shared/layers/vectortile-layer.interface.js +0 -2
- package/esm2015/lib/layer/shared/layers/vectortile-layer.js +0 -104
- package/esm2015/lib/layer/shared/style.service.js +0 -358
- package/esm2015/lib/layer/shared/vector-style.interface.js +0 -2
- package/esm2015/lib/layer/track-feature-button/index.js +0 -2
- package/esm2015/lib/layer/track-feature-button/track-feature-button.component.js +0 -64
- package/esm2015/lib/layer/utils/image-watcher.js +0 -62
- package/esm2015/lib/layer/utils/index.js +0 -7
- package/esm2015/lib/layer/utils/layer.utils.js +0 -11
- package/esm2015/lib/layer/utils/layerSync-watcher.js +0 -249
- package/esm2015/lib/layer/utils/outputLegend.js +0 -27
- package/esm2015/lib/layer/utils/tile-watcher.js +0 -50
- package/esm2015/lib/layer/utils/vector-watcher.js +0 -48
- package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.animation.js +0 -20
- package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.component.js +0 -105
- package/esm2015/lib/map/baselayers-switcher/index.js +0 -3
- package/esm2015/lib/map/baselayers-switcher/mini-basemap.component.js +0 -137
- package/esm2015/lib/map/geolocate-button/geolocate-button.component.js +0 -82
- package/esm2015/lib/map/geolocate-button/index.js +0 -2
- package/esm2015/lib/map/home-extent-button/home-extent-button.component.js +0 -69
- package/esm2015/lib/map/index.js +0 -14
- package/esm2015/lib/map/info-section/index.js +0 -2
- package/esm2015/lib/map/info-section/info-section.component.js +0 -36
- package/esm2015/lib/map/map-browser/index.js +0 -2
- package/esm2015/lib/map/map-browser/map-browser.component.js +0 -70
- package/esm2015/lib/map/map-center/index.js +0 -2
- package/esm2015/lib/map/map-center/map-center.component.js +0 -55
- package/esm2015/lib/map/map.module.js +0 -129
- package/esm2015/lib/map/menu-button/index.js +0 -2
- package/esm2015/lib/map/menu-button/menu-button.component.js +0 -66
- package/esm2015/lib/map/offline-button/index.js +0 -2
- package/esm2015/lib/map/offline-button/offline-button.component.js +0 -84
- package/esm2015/lib/map/rotation-button/index.js +0 -2
- package/esm2015/lib/map/rotation-button/rotation-button.component.js +0 -97
- package/esm2015/lib/map/shared/controllers/controller.js +0 -42
- package/esm2015/lib/map/shared/controllers/geolocation.js +0 -310
- package/esm2015/lib/map/shared/controllers/index.js +0 -4
- package/esm2015/lib/map/shared/controllers/view.js +0 -342
- package/esm2015/lib/map/shared/hover-feature.directive.js +0 -509
- package/esm2015/lib/map/shared/index.js +0 -13
- package/esm2015/lib/map/shared/map-pointer-position.directive.js +0 -107
- package/esm2015/lib/map/shared/map.enums.js +0 -6
- package/esm2015/lib/map/shared/map.interface.js +0 -2
- package/esm2015/lib/map/shared/map.js +0 -418
- package/esm2015/lib/map/shared/map.service.js +0 -29
- package/esm2015/lib/map/shared/map.utils.js +0 -459
- package/esm2015/lib/map/shared/mapOffline.directive.js +0 -163
- package/esm2015/lib/map/shared/projection.interfaces.js +0 -2
- package/esm2015/lib/map/shared/projection.service.js +0 -65
- package/esm2015/lib/map/shared/projection.utils.js +0 -64
- package/esm2015/lib/map/swipe-control/index.js +0 -2
- package/esm2015/lib/map/swipe-control/swipe-control.component.js +0 -199
- package/esm2015/lib/map/utils/layer-watcher.js +0 -58
- package/esm2015/lib/map/wake-lock-button/index.js +0 -2
- package/esm2015/lib/map/wake-lock-button/wake-lock-button.component.js +0 -122
- package/esm2015/lib/map/zoom-button/index.js +0 -2
- package/esm2015/lib/map/zoom-button/zoom-button.component.js +0 -46
- package/esm2015/lib/measure/index.js +0 -4
- package/esm2015/lib/measure/measure.module.js +0 -20
- package/esm2015/lib/measure/measurer/measure-format.pipe.js +0 -37
- package/esm2015/lib/measure/measurer/measurer-dialog.component.js +0 -220
- package/esm2015/lib/measure/measurer/measurer-item.component.js +0 -148
- package/esm2015/lib/measure/measurer/measurer.component.js +0 -1053
- package/esm2015/lib/measure/measurer/measurer.module.js +0 -96
- package/esm2015/lib/measure/shared/index.js +0 -4
- package/esm2015/lib/measure/shared/measure.enum.js +0 -37
- package/esm2015/lib/measure/shared/measure.interfaces.js +0 -2
- package/esm2015/lib/measure/shared/measure.utils.js +0 -489
- package/esm2015/lib/metadata/index.js +0 -3
- package/esm2015/lib/metadata/metadata-button/index.js +0 -2
- package/esm2015/lib/metadata/metadata-button/metadata-button.component.js +0 -146
- package/esm2015/lib/metadata/metadata.module.js +0 -57
- package/esm2015/lib/metadata/shared/index.js +0 -3
- package/esm2015/lib/metadata/shared/metadata.interface.js +0 -2
- package/esm2015/lib/metadata/shared/metadata.service.js +0 -19
- package/esm2015/lib/offline/geoDB/geoDB.enums.js +0 -6
- package/esm2015/lib/offline/geoDB/geoDB.interface.js +0 -2
- package/esm2015/lib/offline/geoDB/geoDB.service.js +0 -161
- package/esm2015/lib/offline/geoDB/index.js +0 -4
- package/esm2015/lib/offline/index.js +0 -3
- package/esm2015/lib/offline/shared/geo-network.service.js +0 -66
- package/esm2015/lib/offline/shared/index.js +0 -2
- package/esm2015/lib/overlay/index.js +0 -2
- package/esm2015/lib/overlay/overlay.module.js +0 -23
- package/esm2015/lib/overlay/shared/index.js +0 -7
- package/esm2015/lib/overlay/shared/overlay-marker-style.utils.js +0 -69
- package/esm2015/lib/overlay/shared/overlay.directive.js +0 -33
- package/esm2015/lib/overlay/shared/overlay.enum.js +0 -8
- package/esm2015/lib/overlay/shared/overlay.js +0 -130
- package/esm2015/lib/overlay/shared/overlay.service.js +0 -27
- package/esm2015/lib/overlay/shared/overlay.utils.js +0 -103
- package/esm2015/lib/print/index.js +0 -4
- package/esm2015/lib/print/print/print.component.js +0 -126
- package/esm2015/lib/print/print-form/index.js +0 -2
- package/esm2015/lib/print/print-form/print-form.component.js +0 -447
- package/esm2015/lib/print/print.module.js +0 -67
- package/esm2015/lib/print/shared/index.js +0 -4
- package/esm2015/lib/print/shared/print.interface.js +0 -2
- package/esm2015/lib/print/shared/print.service.js +0 -820
- package/esm2015/lib/print/shared/print.type.js +0 -30
- package/esm2015/lib/query/index.js +0 -2
- package/esm2015/lib/query/query.module.js +0 -29
- package/esm2015/lib/query/shared/index.js +0 -7
- package/esm2015/lib/query/shared/query-search-source.js +0 -35
- package/esm2015/lib/query/shared/query-search-source.providers.js +0 -22
- package/esm2015/lib/query/shared/query.directive.js +0 -261
- package/esm2015/lib/query/shared/query.enums.js +0 -30
- package/esm2015/lib/query/shared/query.interfaces.js +0 -2
- package/esm2015/lib/query/shared/query.service.js +0 -619
- package/esm2015/lib/query/shared/query.utils.js +0 -37
- package/esm2015/lib/search/index.js +0 -12
- package/esm2015/lib/search/search-bar/search-bar.component.js +0 -496
- package/esm2015/lib/search/search-bar/search-bar.module.js +0 -77
- package/esm2015/lib/search/search-bar/search-url-param.directive.js +0 -35
- package/esm2015/lib/search/search-results/search-results-add-button.component.js +0 -198
- package/esm2015/lib/search/search-results/search-results-item.component.js +0 -129
- package/esm2015/lib/search/search-results/search-results.component.js +0 -337
- package/esm2015/lib/search/search-results/search-results.module.js +0 -79
- package/esm2015/lib/search/search-selector/search-selector.component.js +0 -132
- package/esm2015/lib/search/search-selector/search-selector.module.js +0 -58
- package/esm2015/lib/search/search-settings/search-settings.component.js +0 -435
- package/esm2015/lib/search/search-settings/search-settings.module.js +0 -62
- package/esm2015/lib/search/search.module.js +0 -69
- package/esm2015/lib/search/shared/index.js +0 -9
- package/esm2015/lib/search/shared/search-pointer-summary.directive.js +0 -322
- package/esm2015/lib/search/shared/search-source-service.providers.js +0 -20
- package/esm2015/lib/search/shared/search-source.service.js +0 -47
- package/esm2015/lib/search/shared/search.enums.js +0 -4
- package/esm2015/lib/search/shared/search.interfaces.js +0 -2
- package/esm2015/lib/search/shared/search.service.js +0 -118
- package/esm2015/lib/search/shared/search.utils.js +0 -78
- package/esm2015/lib/search/shared/sources/cadastre.js +0 -126
- package/esm2015/lib/search/shared/sources/cadastre.providers.js +0 -23
- package/esm2015/lib/search/shared/sources/coordinates.interfaces.js +0 -2
- package/esm2015/lib/search/shared/sources/coordinates.js +0 -147
- package/esm2015/lib/search/shared/sources/coordinates.providers.js +0 -40
- package/esm2015/lib/search/shared/sources/icherche.interfaces.js +0 -2
- package/esm2015/lib/search/shared/sources/icherche.js +0 -756
- package/esm2015/lib/search/shared/sources/icherche.providers.js +0 -66
- package/esm2015/lib/search/shared/sources/ilayer.interfaces.js +0 -2
- package/esm2015/lib/search/shared/sources/ilayer.js +0 -320
- package/esm2015/lib/search/shared/sources/ilayer.providers.js +0 -40
- package/esm2015/lib/search/shared/sources/index.js +0 -20
- package/esm2015/lib/search/shared/sources/nominatim.interfaces.js +0 -2
- package/esm2015/lib/search/shared/sources/nominatim.js +0 -253
- package/esm2015/lib/search/shared/sources/nominatim.providers.js +0 -23
- package/esm2015/lib/search/shared/sources/source.interfaces.js +0 -2
- package/esm2015/lib/search/shared/sources/source.js +0 -179
- package/esm2015/lib/search/shared/sources/storedqueries.interfaces.js +0 -2
- package/esm2015/lib/search/shared/sources/storedqueries.js +0 -425
- package/esm2015/lib/search/shared/sources/storedqueries.providers.js +0 -41
- package/esm2015/lib/toast/index.js +0 -2
- package/esm2015/lib/toast/toast.component.js +0 -119
- package/esm2015/lib/toast/toast.module.js +0 -47
- package/esm2015/lib/utils/commonVectorStyle.interface.js +0 -2
- package/esm2015/lib/utils/commonVectorStyle.js +0 -75
- package/esm2015/lib/utils/googleLinks.js +0 -13
- package/esm2015/lib/utils/id-generator.js +0 -110
- package/esm2015/lib/utils/index.js +0 -6
- package/esm2015/lib/utils/osmLinks.js +0 -10
- package/esm2015/lib/wkt/index.js +0 -2
- package/esm2015/lib/wkt/shared/index.js +0 -2
- package/esm2015/lib/wkt/shared/wkt.service.js +0 -239
- package/esm2015/lib/wkt/wkt.module.js +0 -22
- package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.component.js +0 -56
- package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.module.js +0 -38
- package/esm2015/lib/workspace/confirmation-popup/index.js +0 -3
- package/esm2015/lib/workspace/index.js +0 -8
- package/esm2015/lib/workspace/shared/edition-workspace.js +0 -279
- package/esm2015/lib/workspace/shared/edition-workspace.service.js +0 -646
- package/esm2015/lib/workspace/shared/feature-workspace.js +0 -37
- package/esm2015/lib/workspace/shared/feature-workspace.service.js +0 -151
- package/esm2015/lib/workspace/shared/index.js +0 -8
- package/esm2015/lib/workspace/shared/wfs-workspace.js +0 -37
- package/esm2015/lib/workspace/shared/wfs-workspace.service.js +0 -151
- package/esm2015/lib/workspace/shared/wms-workspace.service.js +0 -263
- package/esm2015/lib/workspace/shared/workspace.utils.js +0 -24
- package/esm2015/lib/workspace/widgets/index.js +0 -4
- package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.component.js +0 -52
- package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.module.js +0 -38
- package/esm2015/lib/workspace/widgets/widgets.js +0 -15
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.directive.js +0 -135
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +0 -30
- package/esm2015/lib/workspace/workspace-updator/workspace-updator.directive.js +0 -116
- package/esm2015/lib/workspace/workspace-updator/workspace-updator.module.js +0 -30
- package/esm2015/lib/workspace/workspace.module.js +0 -64
- package/esm2015/public_api.js +0 -55
- package/fesm2015/igo2-geo.js +0 -42102
- package/fesm2015/igo2-geo.js.map +0 -1
|
@@ -0,0 +1,1042 @@
|
|
|
1
|
+
import { Component, Input, ChangeDetectionStrategy, ViewChild } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { skip } from 'rxjs/operators';
|
|
4
|
+
import OlStyle from 'ol/style/Style';
|
|
5
|
+
import OlGeoJSON from 'ol/format/GeoJSON';
|
|
6
|
+
import OlVectorSource from 'ol/source/Vector';
|
|
7
|
+
import { unByKey } from 'ol/Observable';
|
|
8
|
+
import { StorageScope } from '@igo2/core';
|
|
9
|
+
import { uuid } from '@igo2/utils';
|
|
10
|
+
import { FeatureDataSource } from '../../datasource';
|
|
11
|
+
import { FEATURE, FeatureStoreLoadingStrategy, FeatureStoreSelectionStrategy, tryBindStoreLayer, tryAddLoadingStrategy, tryAddSelectionStrategy } from '../../feature';
|
|
12
|
+
import { DrawControl, ModifyControl } from '../../geometry/shared';
|
|
13
|
+
import { VectorLayer } from '../../layer';
|
|
14
|
+
import { MeasureType, MeasureAreaUnit, MeasureLengthUnit, } from '../shared/measure.enum';
|
|
15
|
+
import { measureOlGeometry, createMeasureInteractionStyle, createMeasureLayerStyle, updateOlTooltipsAtMidpoints, updateOlTooltipAtCenter, getTooltipsOfOlGeometry, squareMetersToUnit, metersToUnit, formatMeasure } from '../shared/measure.utils';
|
|
16
|
+
import { MeasurerDialogComponent } from './measurer-dialog.component';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
import * as i1 from "@igo2/core";
|
|
19
|
+
import * as i2 from "@angular/material/dialog";
|
|
20
|
+
const _c0 = ["table"];
|
|
21
|
+
function MeasurerComponent_mat_divider_13_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
+
i0.ɵɵelement(0, "mat-divider");
|
|
23
|
+
} }
|
|
24
|
+
function MeasurerComponent_mat_slide_toggle_15_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
26
|
+
i0.ɵɵelementStart(0, "mat-slide-toggle", 7);
|
|
27
|
+
i0.ɵɵlistener("change", function MeasurerComponent_mat_slide_toggle_15_Template_mat_slide_toggle_change_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r11 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r11.onToggleDisplayLines($event.checked)); });
|
|
28
|
+
i0.ɵɵtext(1);
|
|
29
|
+
i0.ɵɵpipe(2, "translate");
|
|
30
|
+
i0.ɵɵelementEnd();
|
|
31
|
+
} if (rf & 2) {
|
|
32
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
33
|
+
i0.ɵɵproperty("checked", ctx_r1.displayLines)("labelPosition", "before");
|
|
34
|
+
i0.ɵɵadvance(1);
|
|
35
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 3, "igo.geo.measure.toggleDisplayLines"), " ");
|
|
36
|
+
} }
|
|
37
|
+
function MeasurerComponent_mat_divider_17_Template(rf, ctx) { if (rf & 1) {
|
|
38
|
+
i0.ɵɵelement(0, "mat-divider");
|
|
39
|
+
} }
|
|
40
|
+
function MeasurerComponent_mat_slide_toggle_20_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
42
|
+
i0.ɵɵelementStart(0, "mat-slide-toggle", 7);
|
|
43
|
+
i0.ɵɵlistener("change", function MeasurerComponent_mat_slide_toggle_20_Template_mat_slide_toggle_change_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r13.onToggleDisplayDistance($event.checked)); });
|
|
44
|
+
i0.ɵɵtext(1);
|
|
45
|
+
i0.ɵɵpipe(2, "translate");
|
|
46
|
+
i0.ɵɵelementEnd();
|
|
47
|
+
} if (rf & 2) {
|
|
48
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
49
|
+
i0.ɵɵproperty("checked", ctx_r3.displayDistance)("labelPosition", "before");
|
|
50
|
+
i0.ɵɵadvance(1);
|
|
51
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 3, "igo.geo.measure.toggleDisplayDistance"), " ");
|
|
52
|
+
} }
|
|
53
|
+
function MeasurerComponent_mat_slide_toggle_22_Template(rf, ctx) { if (rf & 1) {
|
|
54
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
55
|
+
i0.ɵɵelementStart(0, "mat-slide-toggle", 7);
|
|
56
|
+
i0.ɵɵlistener("change", function MeasurerComponent_mat_slide_toggle_22_Template_mat_slide_toggle_change_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.onToggleDisplayAreas($event.checked)); });
|
|
57
|
+
i0.ɵɵtext(1);
|
|
58
|
+
i0.ɵɵpipe(2, "translate");
|
|
59
|
+
i0.ɵɵelementEnd();
|
|
60
|
+
} if (rf & 2) {
|
|
61
|
+
const ctx_r4 = i0.ɵɵnextContext();
|
|
62
|
+
i0.ɵɵproperty("checked", ctx_r4.displayAreas)("labelPosition", "before");
|
|
63
|
+
i0.ɵɵadvance(1);
|
|
64
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 3, "igo.geo.measure.toggleDisplayAreas"), " ");
|
|
65
|
+
} }
|
|
66
|
+
function MeasurerComponent_mat_divider_24_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
i0.ɵɵelement(0, "mat-divider");
|
|
68
|
+
} }
|
|
69
|
+
function MeasurerComponent_ng_container_29_igo_measurer_item_1_Template(rf, ctx) { if (rf & 1) {
|
|
70
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
71
|
+
i0.ɵɵelementStart(0, "igo-measurer-item", 14);
|
|
72
|
+
i0.ɵɵlistener("measureUnitChange", function MeasurerComponent_ng_container_29_igo_measurer_item_1_Template_igo_measurer_item_measureUnitChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r20 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r20.onLengthUnitChange($event)); });
|
|
73
|
+
i0.ɵɵpipe(1, "translate");
|
|
74
|
+
i0.ɵɵelementEnd();
|
|
75
|
+
} if (rf & 2) {
|
|
76
|
+
const measure_r17 = i0.ɵɵnextContext().ngIf;
|
|
77
|
+
const ctx_r18 = i0.ɵɵnextContext();
|
|
78
|
+
i0.ɵɵproperty("measureType", ctx_r18.measureType.Length)("measureUnit", ctx_r18.measureLengthUnit.Meters)("measure", measure_r17.length)("auto", ctx_r18.measureUnitsAuto)("placeholder", i0.ɵɵpipeBind1(1, 5, ctx_r18.activeMeasureType === ctx_r18.measureType.Area ? "igo.geo.measure.perimeter" : "igo.geo.measure.length"));
|
|
79
|
+
} }
|
|
80
|
+
function MeasurerComponent_ng_container_29_igo_measurer_item_2_Template(rf, ctx) { if (rf & 1) {
|
|
81
|
+
const _r24 = i0.ɵɵgetCurrentView();
|
|
82
|
+
i0.ɵɵelementStart(0, "igo-measurer-item", 14);
|
|
83
|
+
i0.ɵɵlistener("measureUnitChange", function MeasurerComponent_ng_container_29_igo_measurer_item_2_Template_igo_measurer_item_measureUnitChange_0_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r23.onAreaUnitChange($event)); });
|
|
84
|
+
i0.ɵɵpipe(1, "translate");
|
|
85
|
+
i0.ɵɵelementEnd();
|
|
86
|
+
} if (rf & 2) {
|
|
87
|
+
const measure_r17 = i0.ɵɵnextContext().ngIf;
|
|
88
|
+
const ctx_r19 = i0.ɵɵnextContext();
|
|
89
|
+
i0.ɵɵproperty("measureType", ctx_r19.measureType.Area)("measureUnit", ctx_r19.measureAreaUnit.SquareMeters)("measure", measure_r17.area)("auto", ctx_r19.measureUnitsAuto)("placeholder", i0.ɵɵpipeBind1(1, 5, "igo.geo.measure.area"));
|
|
90
|
+
} }
|
|
91
|
+
function MeasurerComponent_ng_container_29_Template(rf, ctx) { if (rf & 1) {
|
|
92
|
+
i0.ɵɵelementContainerStart(0);
|
|
93
|
+
i0.ɵɵtemplate(1, MeasurerComponent_ng_container_29_igo_measurer_item_1_Template, 2, 7, "igo-measurer-item", 13);
|
|
94
|
+
i0.ɵɵtemplate(2, MeasurerComponent_ng_container_29_igo_measurer_item_2_Template, 2, 7, "igo-measurer-item", 13);
|
|
95
|
+
i0.ɵɵelementContainerEnd();
|
|
96
|
+
} if (rf & 2) {
|
|
97
|
+
const ctx_r6 = i0.ɵɵnextContext();
|
|
98
|
+
i0.ɵɵadvance(1);
|
|
99
|
+
i0.ɵɵproperty("ngIf", ctx_r6.activeMeasureType === ctx_r6.measureType.Length || ctx_r6.activeMeasureType === ctx_r6.measureType.Area);
|
|
100
|
+
i0.ɵɵadvance(1);
|
|
101
|
+
i0.ɵɵproperty("ngIf", ctx_r6.activeMeasureType === ctx_r6.measureType.Area);
|
|
102
|
+
} }
|
|
103
|
+
function MeasurerComponent_mat_divider_31_Template(rf, ctx) { if (rf & 1) {
|
|
104
|
+
i0.ɵɵelement(0, "mat-divider");
|
|
105
|
+
} }
|
|
106
|
+
function MeasurerComponent_button_35_Template(rf, ctx) { if (rf & 1) {
|
|
107
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
108
|
+
i0.ɵɵelementStart(0, "button", 15);
|
|
109
|
+
i0.ɵɵlistener("click", function MeasurerComponent_button_35_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r27); const ctx_r26 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r26.onCalculateClick()); });
|
|
110
|
+
i0.ɵɵpipe(1, "translate");
|
|
111
|
+
i0.ɵɵpipe(2, "async");
|
|
112
|
+
i0.ɵɵelement(3, "mat-icon", 16);
|
|
113
|
+
i0.ɵɵelementEnd();
|
|
114
|
+
} if (rf & 2) {
|
|
115
|
+
const ctx_r8 = i0.ɵɵnextContext();
|
|
116
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 2, "igo.geo.measure.actionbar.calculate.tooltip"))("disabled", i0.ɵɵpipeBind1(2, 4, ctx_r8.selectedFeatures$).length === 0);
|
|
117
|
+
} }
|
|
118
|
+
function MeasurerComponent_button_38_Template(rf, ctx) { if (rf & 1) {
|
|
119
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
120
|
+
i0.ɵɵelementStart(0, "button", 17);
|
|
121
|
+
i0.ɵɵlistener("click", function MeasurerComponent_button_38_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r29); const ctx_r28 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r28.onDeleteClick()); });
|
|
122
|
+
i0.ɵɵpipe(1, "translate");
|
|
123
|
+
i0.ɵɵpipe(2, "async");
|
|
124
|
+
i0.ɵɵelement(3, "mat-icon", 18);
|
|
125
|
+
i0.ɵɵelementEnd();
|
|
126
|
+
} if (rf & 2) {
|
|
127
|
+
const ctx_r9 = i0.ɵɵnextContext();
|
|
128
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 2, "igo.geo.measure.actionbar.delete.tooltip"))("disabled", i0.ɵɵpipeBind1(2, 4, ctx_r9.selectedFeatures$).length === 0);
|
|
129
|
+
} }
|
|
130
|
+
/**
|
|
131
|
+
* Tool to measure lengths and areas
|
|
132
|
+
*/
|
|
133
|
+
export class MeasurerComponent {
|
|
134
|
+
constructor(languageService, dialog, storageService) {
|
|
135
|
+
this.languageService = languageService;
|
|
136
|
+
this.dialog = dialog;
|
|
137
|
+
this.storageService = storageService;
|
|
138
|
+
/**
|
|
139
|
+
* Table template
|
|
140
|
+
* @internal
|
|
141
|
+
*/
|
|
142
|
+
this.tableTemplate = {
|
|
143
|
+
selection: true,
|
|
144
|
+
selectMany: true,
|
|
145
|
+
selectionCheckbox: true,
|
|
146
|
+
sort: true,
|
|
147
|
+
columns: [
|
|
148
|
+
{
|
|
149
|
+
name: 'length',
|
|
150
|
+
title: this.languageService.translate.instant('igo.geo.measure.lengthHeader'),
|
|
151
|
+
valueAccessor: (localFeature) => {
|
|
152
|
+
const unit = this.activeLengthUnit;
|
|
153
|
+
const measure = metersToUnit(localFeature.properties.measure.length, unit);
|
|
154
|
+
return formatMeasure(measure, {
|
|
155
|
+
decimal: 1,
|
|
156
|
+
unit,
|
|
157
|
+
unitAbbr: false,
|
|
158
|
+
locale: 'fr'
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: 'area',
|
|
164
|
+
title: this.languageService.translate.instant('igo.geo.measure.areaHeader'),
|
|
165
|
+
valueAccessor: (localFeature) => {
|
|
166
|
+
const unit = this.activeAreaUnit;
|
|
167
|
+
const measure = squareMetersToUnit(localFeature.properties.measure.area, unit);
|
|
168
|
+
return measure ? formatMeasure(measure, {
|
|
169
|
+
decimal: 1,
|
|
170
|
+
unit,
|
|
171
|
+
unitAbbr: false,
|
|
172
|
+
locale: 'fr'
|
|
173
|
+
}) : '';
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
};
|
|
178
|
+
this.subscriptions$$ = [];
|
|
179
|
+
/**
|
|
180
|
+
* Reference to the MeasureType enum
|
|
181
|
+
* @internal
|
|
182
|
+
*/
|
|
183
|
+
this.measureType = MeasureType;
|
|
184
|
+
/**
|
|
185
|
+
* Reference to the AreaMeasureUnit enum
|
|
186
|
+
* @internal
|
|
187
|
+
*/
|
|
188
|
+
this.measureAreaUnit = MeasureAreaUnit;
|
|
189
|
+
/**
|
|
190
|
+
* Reference to the LengthMeasureUnit enum
|
|
191
|
+
* @internal
|
|
192
|
+
*/
|
|
193
|
+
this.measureLengthUnit = MeasureLengthUnit;
|
|
194
|
+
/**
|
|
195
|
+
* Whether measure units should be automatically determined
|
|
196
|
+
* @internal
|
|
197
|
+
*/
|
|
198
|
+
this.measureUnitsAuto = false;
|
|
199
|
+
/**
|
|
200
|
+
* Whether display of distances of areas
|
|
201
|
+
* @internal
|
|
202
|
+
*/
|
|
203
|
+
this.displayDistance = true;
|
|
204
|
+
/**
|
|
205
|
+
* Whether display of distances of lines
|
|
206
|
+
* @internal
|
|
207
|
+
*/
|
|
208
|
+
this.displayLines = true;
|
|
209
|
+
/**
|
|
210
|
+
* Whether display of areas
|
|
211
|
+
* @internal
|
|
212
|
+
*/
|
|
213
|
+
this.displayAreas = true;
|
|
214
|
+
/**
|
|
215
|
+
* Observable of line boolean
|
|
216
|
+
* @internal
|
|
217
|
+
*/
|
|
218
|
+
this.hasLine$ = new BehaviorSubject(false);
|
|
219
|
+
/**
|
|
220
|
+
* Observable of area boolean
|
|
221
|
+
* @internal
|
|
222
|
+
*/
|
|
223
|
+
this.hasArea$ = new BehaviorSubject(false);
|
|
224
|
+
/**
|
|
225
|
+
* Observable of area
|
|
226
|
+
* @internal
|
|
227
|
+
*/
|
|
228
|
+
this.measure$ = new BehaviorSubject({});
|
|
229
|
+
/**
|
|
230
|
+
* Observable of selected features
|
|
231
|
+
* @internal
|
|
232
|
+
*/
|
|
233
|
+
this.selectedFeatures$ = new BehaviorSubject([]);
|
|
234
|
+
/**
|
|
235
|
+
* OL draw source
|
|
236
|
+
* @internal
|
|
237
|
+
*/
|
|
238
|
+
this.showTooltips = true;
|
|
239
|
+
/**
|
|
240
|
+
* Whether draw control toggle is disabled or not
|
|
241
|
+
* @internal
|
|
242
|
+
*/
|
|
243
|
+
this.drawControlIsDisabled = true;
|
|
244
|
+
/**
|
|
245
|
+
* Active mlength unit
|
|
246
|
+
*/
|
|
247
|
+
this.activeLengthUnit = MeasureLengthUnit.Meters;
|
|
248
|
+
/**
|
|
249
|
+
* Active area unit
|
|
250
|
+
*/
|
|
251
|
+
this.activeAreaUnit = MeasureAreaUnit.SquareMeters;
|
|
252
|
+
/**
|
|
253
|
+
* OL draw source
|
|
254
|
+
*/
|
|
255
|
+
this.olDrawSource = new OlVectorSource();
|
|
256
|
+
/**
|
|
257
|
+
* The minimum length a segment must have to display a tooltip.
|
|
258
|
+
* It also applies to area tooltips.
|
|
259
|
+
*/
|
|
260
|
+
this.minSegmentLength = 10;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Measure type
|
|
264
|
+
* @internal
|
|
265
|
+
*/
|
|
266
|
+
set activeMeasureType(value) { this.setActiveMeasureType(value); }
|
|
267
|
+
get activeMeasureType() { return this._activeMeasureType; }
|
|
268
|
+
/**
|
|
269
|
+
* Wheter one of the draw control is active
|
|
270
|
+
* @internal
|
|
271
|
+
*/
|
|
272
|
+
get drawControlIsActive() {
|
|
273
|
+
return this.activeDrawControl !== undefined;
|
|
274
|
+
}
|
|
275
|
+
get projection() {
|
|
276
|
+
return this.map.ol.getView().getProjection().getCode();
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Add draw controls and activate one
|
|
280
|
+
* @internal
|
|
281
|
+
*/
|
|
282
|
+
ngOnInit() {
|
|
283
|
+
this.initStore();
|
|
284
|
+
this.createDrawLineControl();
|
|
285
|
+
this.createDrawPolygonControl();
|
|
286
|
+
this.createModifyControl();
|
|
287
|
+
this.toggleDrawControl();
|
|
288
|
+
this.updateTooltipsOfOlSource(this.store.source.ol);
|
|
289
|
+
this.checkDistanceAreaToggle();
|
|
290
|
+
this.setActiveMeasureType(MeasureType.Length);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Clear the overlay layer and any interaction added by this component.
|
|
294
|
+
* @internal
|
|
295
|
+
*/
|
|
296
|
+
ngOnDestroy() {
|
|
297
|
+
this.setActiveMeasureType(undefined);
|
|
298
|
+
this.deactivateModifyControl();
|
|
299
|
+
this.freezeStore();
|
|
300
|
+
this.subscriptions$$.map(s => s.unsubscribe());
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Set the measure type
|
|
304
|
+
* @internal
|
|
305
|
+
*/
|
|
306
|
+
onMeasureTypeChange(measureType) {
|
|
307
|
+
this.activeMeasureType = measureType;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Activate or deactivate the current draw control
|
|
311
|
+
* @internal
|
|
312
|
+
*/
|
|
313
|
+
onToggleDrawControl(toggle) {
|
|
314
|
+
if (toggle === true) {
|
|
315
|
+
this.toggleDrawControl();
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
this.deactivateDrawControl();
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Activate or deactivate the current draw control
|
|
323
|
+
* @internal
|
|
324
|
+
*/
|
|
325
|
+
onToggleMeasureUnitsAuto(toggle) {
|
|
326
|
+
this.measureUnitsAuto = toggle;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Activate or deactivate the current display of distances of the areas
|
|
330
|
+
* @internal
|
|
331
|
+
*/
|
|
332
|
+
onToggleDisplayDistance(toggle) {
|
|
333
|
+
this.displayDistance = toggle;
|
|
334
|
+
this.onDisplayDistance();
|
|
335
|
+
toggle ? (this.storageService.set('distanceToggle', true, StorageScope.SESSION)) :
|
|
336
|
+
(this.storageService.set('distanceToggle', false, StorageScope.SESSION));
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Activate or deactivate the current display of distances of the lines
|
|
340
|
+
* @internal
|
|
341
|
+
*/
|
|
342
|
+
onToggleDisplayLines(toggle) {
|
|
343
|
+
this.displayLines = toggle;
|
|
344
|
+
this.onDisplayLines();
|
|
345
|
+
toggle ? (this.storageService.set('linesToggle', true, StorageScope.SESSION)) :
|
|
346
|
+
(this.storageService.set('linesToggle', false, StorageScope.SESSION));
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Activate or deactivate the current display of areas
|
|
350
|
+
* @internal
|
|
351
|
+
*/
|
|
352
|
+
onToggleDisplayAreas(toggle) {
|
|
353
|
+
this.displayAreas = toggle;
|
|
354
|
+
this.onDisplayAreas();
|
|
355
|
+
toggle ? (this.storageService.set('areasToggle', true, StorageScope.SESSION)) :
|
|
356
|
+
(this.storageService.set('areasToggle', false, StorageScope.SESSION));
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Set display parametres in current values
|
|
360
|
+
* @internal
|
|
361
|
+
*/
|
|
362
|
+
checkDistanceAreaToggle() {
|
|
363
|
+
if (this.storageService.get('distanceToggle') === false) {
|
|
364
|
+
this.displayDistance = false;
|
|
365
|
+
}
|
|
366
|
+
if (this.storageService.get('linesToggle') === false) {
|
|
367
|
+
this.displayLines = false;
|
|
368
|
+
}
|
|
369
|
+
if (this.storageService.get('areasToggle') === false) {
|
|
370
|
+
this.displayAreas = false;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Activate or deactivate the current display of distances of areas
|
|
375
|
+
* @internal
|
|
376
|
+
*/
|
|
377
|
+
onDisplayDistance() {
|
|
378
|
+
if (this.displayDistance) {
|
|
379
|
+
Array.from(document.getElementsByClassName('igo-map-tooltip-measure-polygone-segments')).map((value) => value.classList.remove('igo-map-tooltip-hidden'));
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
Array.from(document.getElementsByClassName('igo-map-tooltip-measure-polygone-segments')).map((value) => value.classList.add('igo-map-tooltip-hidden'));
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Activate or deactivate the current display of distances of lines
|
|
387
|
+
* @internal
|
|
388
|
+
*/
|
|
389
|
+
onDisplayLines() {
|
|
390
|
+
if (this.displayLines) {
|
|
391
|
+
Array.from(document.getElementsByClassName('igo-map-tooltip-measure-line-segments')).map((value) => value.classList.remove('igo-map-tooltip-hidden'));
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
Array.from(document.getElementsByClassName('igo-map-tooltip-measure-line-segments')).map((value) => value.classList.add('igo-map-tooltip-hidden'));
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Activate or deactivate the current display of areas
|
|
399
|
+
* @internal
|
|
400
|
+
*/
|
|
401
|
+
onDisplayAreas() {
|
|
402
|
+
if (this.displayAreas) {
|
|
403
|
+
Array.from(document.getElementsByClassName('igo-map-tooltip-measure-area')).map((value) => value.classList.remove('igo-map-tooltip-hidden'));
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
Array.from(document.getElementsByClassName('igo-map-tooltip-measure-area')).map((value) => value.classList.add('igo-map-tooltip-hidden'));
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Set the measure type
|
|
411
|
+
* @internal
|
|
412
|
+
*/
|
|
413
|
+
onLengthUnitChange(unit) {
|
|
414
|
+
this.activeLengthUnit = unit;
|
|
415
|
+
this.table.refresh();
|
|
416
|
+
this.updateTooltipsOfOlSource(this.store.source.ol);
|
|
417
|
+
if (this.activeOlGeometry !== undefined) {
|
|
418
|
+
this.updateTooltipsOfOlGeometry(this.activeOlGeometry);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Set the measure type
|
|
423
|
+
* @internal
|
|
424
|
+
*/
|
|
425
|
+
onAreaUnitChange(unit) {
|
|
426
|
+
this.activeAreaUnit = unit;
|
|
427
|
+
this.table.refresh();
|
|
428
|
+
this.updateTooltipsOfOlSource(this.store.source.ol);
|
|
429
|
+
if (this.activeOlGeometry !== undefined) {
|
|
430
|
+
this.updateTooltipsOfOlGeometry(this.activeOlGeometry);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
onCalculateClick() {
|
|
434
|
+
const features = this.selectedFeatures$.value;
|
|
435
|
+
const area = features.reduce((sum, localFeature) => {
|
|
436
|
+
return sum + localFeature.properties.measure.area || 0;
|
|
437
|
+
}, 0);
|
|
438
|
+
const length = features.reduce((sum, localFeature) => {
|
|
439
|
+
if (localFeature.geometry.type === 'Polygon') {
|
|
440
|
+
return sum;
|
|
441
|
+
}
|
|
442
|
+
return sum + localFeature.properties.measure.length || 0;
|
|
443
|
+
}, 0);
|
|
444
|
+
const perimeter = features.reduce((sum, localFeature) => {
|
|
445
|
+
if (localFeature.geometry.type === 'LineString') {
|
|
446
|
+
return sum;
|
|
447
|
+
}
|
|
448
|
+
return sum + localFeature.properties.measure.length || 0;
|
|
449
|
+
}, 0);
|
|
450
|
+
this.openDialog({
|
|
451
|
+
area,
|
|
452
|
+
length,
|
|
453
|
+
perimeter
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
onDeleteClick() {
|
|
457
|
+
this.store.deleteMany(this.selectedFeatures$.value);
|
|
458
|
+
this.selectedFeatures$.value.forEach(selectedFeature => {
|
|
459
|
+
this.olDrawSource.getFeatures().forEach(drawingLayerFeature => {
|
|
460
|
+
const geometry = drawingLayerFeature.getGeometry();
|
|
461
|
+
if (selectedFeature.properties.id === geometry.ol_uid) {
|
|
462
|
+
this.olDrawSource.removeFeature(drawingLayerFeature);
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
onModifyClick() {
|
|
468
|
+
if (this.selectedFeatures$.value.length !== 1) {
|
|
469
|
+
return;
|
|
470
|
+
}
|
|
471
|
+
if (this.modifyControl.active === true) {
|
|
472
|
+
this.deactivateModifyControl();
|
|
473
|
+
this.toggleDrawControl();
|
|
474
|
+
}
|
|
475
|
+
else {
|
|
476
|
+
const localFeature = this.selectedFeatures$.value[0];
|
|
477
|
+
const olFeatures = this.store.layer.ol.getSource().getFeatures();
|
|
478
|
+
const olFeature = olFeatures.find((_olFeature) => {
|
|
479
|
+
return _olFeature.get('id') === localFeature.properties.id;
|
|
480
|
+
});
|
|
481
|
+
if (olFeature !== undefined) {
|
|
482
|
+
this.deactivateDrawControl();
|
|
483
|
+
this.activateModifyControl();
|
|
484
|
+
const olGeometry = olFeature.getGeometry();
|
|
485
|
+
this.clearTooltipsOfOlGeometry(olGeometry);
|
|
486
|
+
this.modifyControl.setOlGeometry(olGeometry);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
openDialog(data) {
|
|
491
|
+
this.dialog.open(MeasurerDialogComponent, { data });
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Initialize the measure store and set up some listeners
|
|
495
|
+
* @internal
|
|
496
|
+
*/
|
|
497
|
+
initStore() {
|
|
498
|
+
const store = this.store;
|
|
499
|
+
const layer = new VectorLayer({
|
|
500
|
+
title: this.languageService.translate.instant('igo.geo.measure.layerTitle'),
|
|
501
|
+
isIgoInternalLayer: true,
|
|
502
|
+
id: `igo-measures-${uuid()}`,
|
|
503
|
+
zIndex: 200,
|
|
504
|
+
source: new FeatureDataSource(),
|
|
505
|
+
style: createMeasureLayerStyle(),
|
|
506
|
+
showInLayerList: true,
|
|
507
|
+
exportable: true,
|
|
508
|
+
browsable: false,
|
|
509
|
+
workspace: { enabled: false }
|
|
510
|
+
});
|
|
511
|
+
tryBindStoreLayer(store, layer);
|
|
512
|
+
store.layer.visible = true;
|
|
513
|
+
layer.visible$.subscribe(visible => {
|
|
514
|
+
if (visible) {
|
|
515
|
+
Array.from(document.getElementsByClassName('igo-map-tooltip-measure')).map((value) => value.classList.remove('igo-map-tooltip-measure-by-display'));
|
|
516
|
+
}
|
|
517
|
+
else {
|
|
518
|
+
Array.from(document.getElementsByClassName('igo-map-tooltip-measure')).map((value) => value.classList.add('igo-map-tooltip-measure-by-display'));
|
|
519
|
+
}
|
|
520
|
+
});
|
|
521
|
+
tryAddLoadingStrategy(store);
|
|
522
|
+
tryAddSelectionStrategy(store, new FeatureStoreSelectionStrategy({
|
|
523
|
+
map: this.map,
|
|
524
|
+
many: true
|
|
525
|
+
}));
|
|
526
|
+
this.onFeatureAddedKey = store.source.ol.on('addfeature', (event) => {
|
|
527
|
+
const localFeature = event.feature;
|
|
528
|
+
const olGeometry = localFeature.getGeometry();
|
|
529
|
+
this.updateMeasureOfOlGeometry(olGeometry, localFeature.get('measure'));
|
|
530
|
+
this.onDisplayDistance();
|
|
531
|
+
});
|
|
532
|
+
this.onFeatureRemovedKey = store.source.ol.on('removefeature', (event) => {
|
|
533
|
+
const olGeometry = event.feature.getGeometry();
|
|
534
|
+
this.clearTooltipsOfOlGeometry(olGeometry);
|
|
535
|
+
});
|
|
536
|
+
this.selectedFeatures$$ = store.stateView.manyBy$((record) => {
|
|
537
|
+
return record.state.selected === true;
|
|
538
|
+
}).pipe(skip(1) // Skip initial emission
|
|
539
|
+
)
|
|
540
|
+
.subscribe((records) => {
|
|
541
|
+
if (this.modifyControl.active === true) {
|
|
542
|
+
this.deactivateModifyControl();
|
|
543
|
+
}
|
|
544
|
+
this.selectedFeatures$.next(records.map(record => record.entity));
|
|
545
|
+
});
|
|
546
|
+
this.subscriptions$$.push(this.store.entities$.subscribe(objectsExists => {
|
|
547
|
+
if (objectsExists.find(objectExist => objectExist.geometry.type === 'Polygon')) {
|
|
548
|
+
this.hasArea$.next(true);
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
this.hasArea$.next(false);
|
|
552
|
+
}
|
|
553
|
+
if (objectsExists.find(objectExist => objectExist.geometry.type === 'LineString')) {
|
|
554
|
+
this.hasLine$.next(true);
|
|
555
|
+
}
|
|
556
|
+
else {
|
|
557
|
+
this.hasLine$.next(false);
|
|
558
|
+
}
|
|
559
|
+
}));
|
|
560
|
+
this.subscriptions$$.push(this.store.count$.subscribe(cnt => {
|
|
561
|
+
cnt >= 1 ?
|
|
562
|
+
this.store.layer.options.showInLayerList = true :
|
|
563
|
+
this.store.layer.options.showInLayerList = false;
|
|
564
|
+
}));
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Freeze any store, meaning the layer is removed, strategies are deactivated
|
|
568
|
+
* and some listener removed
|
|
569
|
+
* @internal
|
|
570
|
+
*/
|
|
571
|
+
freezeStore() {
|
|
572
|
+
const store = this.store;
|
|
573
|
+
this.selectedFeatures$$.unsubscribe();
|
|
574
|
+
unByKey(this.onFeatureAddedKey);
|
|
575
|
+
unByKey(this.onFeatureRemovedKey);
|
|
576
|
+
store.deactivateStrategyOfType(FeatureStoreLoadingStrategy);
|
|
577
|
+
store.deactivateStrategyOfType(FeatureStoreSelectionStrategy);
|
|
578
|
+
}
|
|
579
|
+
/**
|
|
580
|
+
* Create a draw line control
|
|
581
|
+
*/
|
|
582
|
+
createDrawLineControl() {
|
|
583
|
+
this.drawLineControl = new DrawControl({
|
|
584
|
+
geometryType: 'LineString',
|
|
585
|
+
drawingLayerSource: this.olDrawSource,
|
|
586
|
+
interactionStyle: createMeasureInteractionStyle(),
|
|
587
|
+
drawingLayerStyle: new OlStyle({})
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Create a draw polygon control
|
|
592
|
+
*/
|
|
593
|
+
createDrawPolygonControl() {
|
|
594
|
+
this.drawPolygonControl = new DrawControl({
|
|
595
|
+
geometryType: 'Polygon',
|
|
596
|
+
drawingLayerSource: this.olDrawSource,
|
|
597
|
+
interactionStyle: createMeasureInteractionStyle(),
|
|
598
|
+
drawingLayerStyle: new OlStyle({})
|
|
599
|
+
});
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* Create a draw polygon control
|
|
603
|
+
*/
|
|
604
|
+
createModifyControl() {
|
|
605
|
+
this.modifyControl = new ModifyControl({
|
|
606
|
+
source: this.olDrawSource,
|
|
607
|
+
drawStyle: createMeasureInteractionStyle(),
|
|
608
|
+
layerStyle: new OlStyle({})
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* Activate the right control
|
|
613
|
+
*/
|
|
614
|
+
toggleDrawControl() {
|
|
615
|
+
this.deactivateDrawControl();
|
|
616
|
+
// this.deactivateModifyControl();
|
|
617
|
+
if (this.activeMeasureType === MeasureType.Length) {
|
|
618
|
+
this.activateDrawControl(this.drawLineControl);
|
|
619
|
+
}
|
|
620
|
+
else if (this.activeMeasureType === MeasureType.Area) {
|
|
621
|
+
this.activateDrawControl(this.drawPolygonControl);
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* Activate a given control
|
|
626
|
+
* @param drawControl Draw control
|
|
627
|
+
*/
|
|
628
|
+
activateDrawControl(drawControl) {
|
|
629
|
+
this.drawControlIsDisabled = false;
|
|
630
|
+
this.activeDrawControl = drawControl;
|
|
631
|
+
this.drawStart$$ = drawControl.start$
|
|
632
|
+
.subscribe((olGeometry) => this.onDrawStart(olGeometry));
|
|
633
|
+
this.drawEnd$$ = drawControl.end$
|
|
634
|
+
.subscribe((olGeometry) => this.onDrawEnd(olGeometry));
|
|
635
|
+
this.drawChanges$$ = drawControl.changes$
|
|
636
|
+
.subscribe((olGeometry) => this.onDrawChanges(olGeometry));
|
|
637
|
+
this.drawChanges$$ = drawControl.abort$
|
|
638
|
+
.subscribe((olGeometry) => {
|
|
639
|
+
this.clearTooltipsOfOlGeometry(olGeometry);
|
|
640
|
+
this.clearMeasures();
|
|
641
|
+
});
|
|
642
|
+
drawControl.setOlMap(this.map.ol, false);
|
|
643
|
+
}
|
|
644
|
+
/**
|
|
645
|
+
* Deactivate the active draw control
|
|
646
|
+
*/
|
|
647
|
+
deactivateDrawControl() {
|
|
648
|
+
if (this.activeDrawControl === undefined) {
|
|
649
|
+
return;
|
|
650
|
+
}
|
|
651
|
+
this.olDrawSource.clear();
|
|
652
|
+
if (this.drawStart$$ !== undefined) {
|
|
653
|
+
this.drawStart$$.unsubscribe();
|
|
654
|
+
}
|
|
655
|
+
if (this.drawEnd$$ !== undefined) {
|
|
656
|
+
this.drawEnd$$.unsubscribe();
|
|
657
|
+
}
|
|
658
|
+
if (this.drawChanges$$ !== undefined) {
|
|
659
|
+
this.drawChanges$$.unsubscribe();
|
|
660
|
+
}
|
|
661
|
+
this.clearTooltipsOfOlSource(this.olDrawSource);
|
|
662
|
+
if (this.activeOlGeometry !== undefined) {
|
|
663
|
+
this.clearTooltipsOfOlGeometry(this.activeOlGeometry);
|
|
664
|
+
}
|
|
665
|
+
this.activeDrawControl.setOlMap(undefined);
|
|
666
|
+
this.activeDrawControl = undefined;
|
|
667
|
+
this.activeOlGeometry = undefined;
|
|
668
|
+
}
|
|
669
|
+
setActiveMeasureType(measureType) {
|
|
670
|
+
this._activeMeasureType = measureType;
|
|
671
|
+
this.clearMeasures();
|
|
672
|
+
this.toggleDrawControl();
|
|
673
|
+
}
|
|
674
|
+
/**
|
|
675
|
+
* Clear the draw source and track the geometry being drawn
|
|
676
|
+
* @param olGeometry Ol linestring or polygon
|
|
677
|
+
*/
|
|
678
|
+
onDrawStart(olGeometry) {
|
|
679
|
+
this.activeOlGeometry = olGeometry;
|
|
680
|
+
}
|
|
681
|
+
/**
|
|
682
|
+
* Clear the draw source and track the geometry being draw
|
|
683
|
+
* @param olGeometry Ol linestring or polygon
|
|
684
|
+
*/
|
|
685
|
+
onDrawEnd(olGeometry) {
|
|
686
|
+
this.activeOlGeometry = undefined;
|
|
687
|
+
this.finalizeMeasureOfOlGeometry(olGeometry);
|
|
688
|
+
this.addFeatureToStore(olGeometry);
|
|
689
|
+
this.clearTooltipsOfOlGeometry(olGeometry);
|
|
690
|
+
this.olDrawSource.clear(true);
|
|
691
|
+
}
|
|
692
|
+
/**
|
|
693
|
+
* Update measures observables and map tooltips
|
|
694
|
+
* @param olGeometry Ol linestring or polygon
|
|
695
|
+
*/
|
|
696
|
+
onDrawChanges(olGeometry) {
|
|
697
|
+
const measure = measureOlGeometry(olGeometry, this.projection);
|
|
698
|
+
this.updateMeasureOfOlGeometry(olGeometry, Object.assign({}, measure, {
|
|
699
|
+
area: undefined // We don't want to display an area tooltip while drawing.
|
|
700
|
+
}));
|
|
701
|
+
this.measure$.next(measure);
|
|
702
|
+
}
|
|
703
|
+
/**
|
|
704
|
+
* Activate a given control
|
|
705
|
+
* @param modifyControl Modify control
|
|
706
|
+
*/
|
|
707
|
+
activateModifyControl() {
|
|
708
|
+
const selection = this.store.getStrategyOfType(FeatureStoreSelectionStrategy);
|
|
709
|
+
selection.deactivate();
|
|
710
|
+
selection.clear();
|
|
711
|
+
this.modifyStart$$ = this.modifyControl.start$
|
|
712
|
+
.subscribe((olGeometry) => this.onModifyStart(olGeometry));
|
|
713
|
+
this.modifyEnd$$ = this.modifyControl.end$
|
|
714
|
+
.subscribe((olGeometry) => this.onModifyEnd(olGeometry));
|
|
715
|
+
this.modifyChanges$$ = this.modifyControl.changes$
|
|
716
|
+
.subscribe((olGeometry) => this.onModifyChanges(olGeometry));
|
|
717
|
+
this.modifyControl.setOlMap(this.map.ol);
|
|
718
|
+
}
|
|
719
|
+
/**
|
|
720
|
+
* Deactivate the active modify control
|
|
721
|
+
*/
|
|
722
|
+
deactivateModifyControl() {
|
|
723
|
+
if (this.modifyStart$$ !== undefined) {
|
|
724
|
+
this.modifyStart$$.unsubscribe();
|
|
725
|
+
}
|
|
726
|
+
if (this.modifyEnd$$ !== undefined) {
|
|
727
|
+
this.modifyEnd$$.unsubscribe();
|
|
728
|
+
}
|
|
729
|
+
if (this.modifyChanges$$ !== undefined) {
|
|
730
|
+
this.modifyChanges$$.unsubscribe();
|
|
731
|
+
}
|
|
732
|
+
if (this.activeOlGeometry !== undefined) {
|
|
733
|
+
if (this.selectedFeatures$.value.length === 1) {
|
|
734
|
+
const localFeature = this.selectedFeatures$.value[0];
|
|
735
|
+
this.addFeatureToStore(this.activeOlGeometry, localFeature);
|
|
736
|
+
}
|
|
737
|
+
this.finalizeMeasureOfOlGeometry(this.activeOlGeometry);
|
|
738
|
+
}
|
|
739
|
+
this.olDrawSource.clear();
|
|
740
|
+
this.store.activateStrategyOfType(FeatureStoreSelectionStrategy);
|
|
741
|
+
this.activeOlGeometry = undefined;
|
|
742
|
+
this.modifyControl.setOlMap(undefined);
|
|
743
|
+
}
|
|
744
|
+
/**
|
|
745
|
+
* Clear the draw source and track the geometry being drawn
|
|
746
|
+
* @param olGeometry Ol linestring or polygon
|
|
747
|
+
*/
|
|
748
|
+
onModifyStart(olGeometry) {
|
|
749
|
+
this.onDrawStart(olGeometry);
|
|
750
|
+
}
|
|
751
|
+
/**
|
|
752
|
+
* Update measures observables and map tooltips
|
|
753
|
+
* @param olGeometry Ol linestring or polygon
|
|
754
|
+
*/
|
|
755
|
+
onModifyChanges(olGeometry) {
|
|
756
|
+
this.onDrawChanges(olGeometry);
|
|
757
|
+
}
|
|
758
|
+
/**
|
|
759
|
+
* Clear the draw source and track the geometry being draw
|
|
760
|
+
* @param olGeometry Ol linestring or polygon
|
|
761
|
+
*/
|
|
762
|
+
onModifyEnd(olGeometry) {
|
|
763
|
+
this.finalizeMeasureOfOlGeometry(olGeometry);
|
|
764
|
+
}
|
|
765
|
+
finalizeMeasureOfOlGeometry(olGeometry) {
|
|
766
|
+
const measure = measureOlGeometry(olGeometry, this.projection);
|
|
767
|
+
this.updateMeasureOfOlGeometry(olGeometry, measure);
|
|
768
|
+
}
|
|
769
|
+
/**
|
|
770
|
+
* Update measures observables
|
|
771
|
+
* @param olGeometry Ol linestring or polygon
|
|
772
|
+
* @param measure Measure
|
|
773
|
+
*/
|
|
774
|
+
updateMeasureOfOlGeometry(olGeometry, measure) {
|
|
775
|
+
olGeometry.setProperties({ _measure: measure }, true);
|
|
776
|
+
this.updateTooltipsOfOlGeometry(olGeometry);
|
|
777
|
+
}
|
|
778
|
+
/**
|
|
779
|
+
* Clear the measures observables
|
|
780
|
+
*/
|
|
781
|
+
clearMeasures() {
|
|
782
|
+
this.measure$.next({});
|
|
783
|
+
}
|
|
784
|
+
/**
|
|
785
|
+
* Add a feature with measures to the store. The loading stragegy of the store
|
|
786
|
+
* will trigger and add the feature to the map.
|
|
787
|
+
* @internal
|
|
788
|
+
*/
|
|
789
|
+
addFeatureToStore(olGeometry, localFeature) {
|
|
790
|
+
const featureId = localFeature ? localFeature.properties.id : olGeometry.ol_uid;
|
|
791
|
+
const projection = this.map.ol.getView().getProjection();
|
|
792
|
+
const geometry = new OlGeoJSON().writeGeometryObject(olGeometry, {
|
|
793
|
+
featureProjection: projection,
|
|
794
|
+
dataProjection: projection
|
|
795
|
+
});
|
|
796
|
+
this.store.update({
|
|
797
|
+
type: FEATURE,
|
|
798
|
+
geometry,
|
|
799
|
+
projection: projection.getCode(),
|
|
800
|
+
properties: {
|
|
801
|
+
id: featureId,
|
|
802
|
+
measure: olGeometry.get('_measure')
|
|
803
|
+
},
|
|
804
|
+
meta: {
|
|
805
|
+
id: featureId
|
|
806
|
+
}
|
|
807
|
+
});
|
|
808
|
+
}
|
|
809
|
+
/**
|
|
810
|
+
* Update all the tooltips of an OL geometry
|
|
811
|
+
* @param olGeometry OL Geometry
|
|
812
|
+
* @param lengths Lengths of the OL geometry's segments
|
|
813
|
+
* @param measureUnit Display tooltip measure in those units
|
|
814
|
+
*/
|
|
815
|
+
updateTooltipsOfOlGeometry(olGeometry) {
|
|
816
|
+
const measure = olGeometry.get('_measure');
|
|
817
|
+
const lengths = measure.lengths;
|
|
818
|
+
const area = measure.area;
|
|
819
|
+
const olMidpointsTooltips = updateOlTooltipsAtMidpoints(olGeometry);
|
|
820
|
+
if (lengths.length === olMidpointsTooltips.length) {
|
|
821
|
+
for (let i = 0; i < olMidpointsTooltips.length; i++) {
|
|
822
|
+
const length = lengths[i];
|
|
823
|
+
if (length !== undefined) {
|
|
824
|
+
this.updateOlTooltip(olMidpointsTooltips[i], metersToUnit(length, this.activeLengthUnit), this.activeLengthUnit, MeasureType.Length);
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
if (area !== undefined) {
|
|
829
|
+
this.updateOlTooltip(updateOlTooltipAtCenter(olGeometry), squareMetersToUnit(area, this.activeAreaUnit), this.activeAreaUnit, MeasureType.Area);
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
/**
|
|
833
|
+
* Show the map tooltips of a geoemtry
|
|
834
|
+
*/
|
|
835
|
+
showTooltipsOfOlGeometry(olGeometry) {
|
|
836
|
+
getTooltipsOfOlGeometry(olGeometry).forEach((olTooltip) => {
|
|
837
|
+
if (this.shouldShowTooltip(olTooltip)) {
|
|
838
|
+
this.map.ol.addOverlay(olTooltip);
|
|
839
|
+
}
|
|
840
|
+
});
|
|
841
|
+
}
|
|
842
|
+
/**
|
|
843
|
+
* Clear the tooltips of an OL geometrys
|
|
844
|
+
* @param olGeometry OL geometry with tooltips
|
|
845
|
+
*/
|
|
846
|
+
clearTooltipsOfOlGeometry(olGeometry) {
|
|
847
|
+
getTooltipsOfOlGeometry(olGeometry).forEach((olTooltip) => {
|
|
848
|
+
if (olTooltip !== undefined && olTooltip.getMap() !== undefined) {
|
|
849
|
+
this.map.ol.removeOverlay(olTooltip);
|
|
850
|
+
}
|
|
851
|
+
});
|
|
852
|
+
}
|
|
853
|
+
/**
|
|
854
|
+
* Show the map tooltips of all the geometries of a source
|
|
855
|
+
*/
|
|
856
|
+
updateTooltipsOfOlSource(olSource) {
|
|
857
|
+
olSource.forEachFeature((olFeature) => {
|
|
858
|
+
this.updateTooltipsOfOlGeometry(olFeature.getGeometry());
|
|
859
|
+
});
|
|
860
|
+
}
|
|
861
|
+
/**
|
|
862
|
+
* Show the map tooltips of all the geometries of a source
|
|
863
|
+
*/
|
|
864
|
+
showTooltipsOfOlSource(olSource) {
|
|
865
|
+
olSource.forEachFeature((olFeature) => {
|
|
866
|
+
this.showTooltipsOfOlGeometry(olFeature.getGeometry());
|
|
867
|
+
});
|
|
868
|
+
}
|
|
869
|
+
/**
|
|
870
|
+
* Clear the map tooltips
|
|
871
|
+
* @param olDrawSource OL vector source
|
|
872
|
+
*/
|
|
873
|
+
clearTooltipsOfOlSource(olSource) {
|
|
874
|
+
olSource.forEachFeature((olFeature) => {
|
|
875
|
+
const olGeometry = olFeature.getGeometry();
|
|
876
|
+
if (olGeometry !== undefined) {
|
|
877
|
+
this.clearTooltipsOfOlGeometry(olFeature.getGeometry());
|
|
878
|
+
}
|
|
879
|
+
});
|
|
880
|
+
}
|
|
881
|
+
/**
|
|
882
|
+
* Update an OL tooltip properties and inner HTML and add it to the map if possible
|
|
883
|
+
* @param olTooltip OL tooltip
|
|
884
|
+
* @param measure The measure valeu ti display
|
|
885
|
+
* @param measureUnit Display tooltip measure in those units
|
|
886
|
+
*/
|
|
887
|
+
updateOlTooltip(olTooltip, measure, unit, type) {
|
|
888
|
+
olTooltip.setProperties({ _measure: measure, _unit: unit, _type: type }, true);
|
|
889
|
+
olTooltip.getElement().innerHTML = this.computeTooltipInnerHTML(olTooltip);
|
|
890
|
+
if (this.shouldShowTooltip(olTooltip)) {
|
|
891
|
+
this.map.ol.addOverlay(olTooltip);
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
/**
|
|
895
|
+
* Compute a tooltip's content
|
|
896
|
+
* @param olTooltip OL overlay
|
|
897
|
+
* @returns Inner HTML
|
|
898
|
+
*/
|
|
899
|
+
computeTooltipInnerHTML(olTooltip) {
|
|
900
|
+
const properties = olTooltip.getProperties();
|
|
901
|
+
return formatMeasure(properties._measure, {
|
|
902
|
+
decimal: 1,
|
|
903
|
+
unit: properties._unit,
|
|
904
|
+
unitAbbr: true,
|
|
905
|
+
locale: 'fr'
|
|
906
|
+
}, this.languageService);
|
|
907
|
+
}
|
|
908
|
+
/**
|
|
909
|
+
* Whether a tooltip should be showned based on the length
|
|
910
|
+
* of the segment it is bound to.
|
|
911
|
+
* @param olTooltip OL overlay
|
|
912
|
+
* @returns True if the tooltip should be shown
|
|
913
|
+
*/
|
|
914
|
+
shouldShowTooltip(olTooltip) {
|
|
915
|
+
if (this.showTooltips === false) {
|
|
916
|
+
return false;
|
|
917
|
+
}
|
|
918
|
+
const properties = olTooltip.getProperties();
|
|
919
|
+
const measure = properties._measure;
|
|
920
|
+
if (measure === undefined) {
|
|
921
|
+
return false;
|
|
922
|
+
}
|
|
923
|
+
if (properties._unit === MeasureType.Length) {
|
|
924
|
+
const minSegmentLength = metersToUnit(this.minSegmentLength, properties._unit) || 0;
|
|
925
|
+
return measure > Math.max(minSegmentLength, 0);
|
|
926
|
+
}
|
|
927
|
+
return true;
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
MeasurerComponent.ɵfac = function MeasurerComponent_Factory(t) { return new (t || MeasurerComponent)(i0.ɵɵdirectiveInject(i1.LanguageService), i0.ɵɵdirectiveInject(i2.MatDialog), i0.ɵɵdirectiveInject(i1.StorageService)); };
|
|
931
|
+
MeasurerComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MeasurerComponent, selectors: [["igo-measurer"]], viewQuery: function MeasurerComponent_Query(rf, ctx) { if (rf & 1) {
|
|
932
|
+
i0.ɵɵviewQuery(_c0, 7);
|
|
933
|
+
} if (rf & 2) {
|
|
934
|
+
let _t;
|
|
935
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.table = _t.first);
|
|
936
|
+
} }, inputs: { map: "map", store: "store", activeMeasureType: "activeMeasureType", minSegmentLength: "minSegmentLength" }, decls: 43, vars: 60, consts: [[1, "measure-type-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], [1, "measure-options", "mat-typography"], [3, "disabled", "checked", "labelPosition", "change"], [4, "ngIf"], [3, "checked", "labelPosition", "change", 4, "ngIf"], [3, "checked", "labelPosition", "change"], [1, "measure-store-buttons"], ["mat-icon-button", "", "color", "accent", 3, "matTooltip", "disabled", "click", 4, "ngIf"], ["mat-icon-button", "", "color", "warn", 3, "matTooltip", "disabled", "click", 4, "ngIf"], [1, "table-compact", 3, "store", "template"], ["table", ""], [3, "measureType", "measureUnit", "measure", "auto", "placeholder", "measureUnitChange", 4, "ngIf"], [3, "measureType", "measureUnit", "measure", "auto", "placeholder", "measureUnitChange"], ["mat-icon-button", "", "color", "accent", 3, "matTooltip", "disabled", "click"], ["svgIcon", "calculator"], ["mat-icon-button", "", "color", "warn", 3, "matTooltip", "disabled", "click"], ["svgIcon", "delete"]], template: function MeasurerComponent_Template(rf, ctx) { if (rf & 1) {
|
|
937
|
+
i0.ɵɵelementStart(0, "div")(1, "div", 0)(2, "mat-button-toggle-group", 1);
|
|
938
|
+
i0.ɵɵlistener("change", function MeasurerComponent_Template_mat_button_toggle_group_change_2_listener($event) { return ctx.onMeasureTypeChange($event.value); });
|
|
939
|
+
i0.ɵɵelementStart(3, "mat-button-toggle", 2);
|
|
940
|
+
i0.ɵɵtext(4);
|
|
941
|
+
i0.ɵɵpipe(5, "translate");
|
|
942
|
+
i0.ɵɵelementEnd();
|
|
943
|
+
i0.ɵɵelementStart(6, "mat-button-toggle", 2);
|
|
944
|
+
i0.ɵɵtext(7);
|
|
945
|
+
i0.ɵɵpipe(8, "translate");
|
|
946
|
+
i0.ɵɵelementEnd()()();
|
|
947
|
+
i0.ɵɵelementStart(9, "div", 3)(10, "mat-slide-toggle", 4);
|
|
948
|
+
i0.ɵɵlistener("change", function MeasurerComponent_Template_mat_slide_toggle_change_10_listener($event) { return ctx.onToggleDrawControl($event.checked); });
|
|
949
|
+
i0.ɵɵtext(11);
|
|
950
|
+
i0.ɵɵpipe(12, "translate");
|
|
951
|
+
i0.ɵɵelementEnd();
|
|
952
|
+
i0.ɵɵtemplate(13, MeasurerComponent_mat_divider_13_Template, 1, 0, "mat-divider", 5);
|
|
953
|
+
i0.ɵɵpipe(14, "async");
|
|
954
|
+
i0.ɵɵtemplate(15, MeasurerComponent_mat_slide_toggle_15_Template, 3, 5, "mat-slide-toggle", 6);
|
|
955
|
+
i0.ɵɵpipe(16, "async");
|
|
956
|
+
i0.ɵɵtemplate(17, MeasurerComponent_mat_divider_17_Template, 1, 0, "mat-divider", 5);
|
|
957
|
+
i0.ɵɵpipe(18, "async");
|
|
958
|
+
i0.ɵɵpipe(19, "async");
|
|
959
|
+
i0.ɵɵtemplate(20, MeasurerComponent_mat_slide_toggle_20_Template, 3, 5, "mat-slide-toggle", 6);
|
|
960
|
+
i0.ɵɵpipe(21, "async");
|
|
961
|
+
i0.ɵɵtemplate(22, MeasurerComponent_mat_slide_toggle_22_Template, 3, 5, "mat-slide-toggle", 6);
|
|
962
|
+
i0.ɵɵpipe(23, "async");
|
|
963
|
+
i0.ɵɵtemplate(24, MeasurerComponent_mat_divider_24_Template, 1, 0, "mat-divider", 5);
|
|
964
|
+
i0.ɵɵpipe(25, "async");
|
|
965
|
+
i0.ɵɵelementStart(26, "mat-slide-toggle", 7);
|
|
966
|
+
i0.ɵɵlistener("change", function MeasurerComponent_Template_mat_slide_toggle_change_26_listener($event) { return ctx.onToggleMeasureUnitsAuto($event.checked); });
|
|
967
|
+
i0.ɵɵtext(27);
|
|
968
|
+
i0.ɵɵpipe(28, "translate");
|
|
969
|
+
i0.ɵɵelementEnd()();
|
|
970
|
+
i0.ɵɵtemplate(29, MeasurerComponent_ng_container_29_Template, 3, 2, "ng-container", 5);
|
|
971
|
+
i0.ɵɵpipe(30, "async");
|
|
972
|
+
i0.ɵɵtemplate(31, MeasurerComponent_mat_divider_31_Template, 1, 0, "mat-divider", 5);
|
|
973
|
+
i0.ɵɵpipe(32, "async");
|
|
974
|
+
i0.ɵɵpipe(33, "async");
|
|
975
|
+
i0.ɵɵelementStart(34, "div", 8);
|
|
976
|
+
i0.ɵɵtemplate(35, MeasurerComponent_button_35_Template, 4, 6, "button", 9);
|
|
977
|
+
i0.ɵɵpipe(36, "async");
|
|
978
|
+
i0.ɵɵpipe(37, "async");
|
|
979
|
+
i0.ɵɵtemplate(38, MeasurerComponent_button_38_Template, 4, 6, "button", 10);
|
|
980
|
+
i0.ɵɵpipe(39, "async");
|
|
981
|
+
i0.ɵɵpipe(40, "async");
|
|
982
|
+
i0.ɵɵelementEnd();
|
|
983
|
+
i0.ɵɵelement(41, "igo-entity-table", 11, 12);
|
|
984
|
+
i0.ɵɵelementEnd();
|
|
985
|
+
} if (rf & 2) {
|
|
986
|
+
i0.ɵɵadvance(2);
|
|
987
|
+
i0.ɵɵproperty("value", ctx.activeMeasureType);
|
|
988
|
+
i0.ɵɵadvance(1);
|
|
989
|
+
i0.ɵɵproperty("value", ctx.measureType.Length);
|
|
990
|
+
i0.ɵɵadvance(1);
|
|
991
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 24, "igo.geo.measure." + ctx.measureType.Length), " ");
|
|
992
|
+
i0.ɵɵadvance(2);
|
|
993
|
+
i0.ɵɵproperty("value", ctx.measureType.Area);
|
|
994
|
+
i0.ɵɵadvance(1);
|
|
995
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 26, "igo.geo.measure." + ctx.measureType.Area), " ");
|
|
996
|
+
i0.ɵɵadvance(3);
|
|
997
|
+
i0.ɵɵproperty("disabled", ctx.drawControlIsDisabled)("checked", ctx.drawControlIsActive)("labelPosition", "before");
|
|
998
|
+
i0.ɵɵadvance(1);
|
|
999
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(12, 28, "igo.geo.measure.toggleActive"), " ");
|
|
1000
|
+
i0.ɵɵadvance(2);
|
|
1001
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(14, 30, ctx.hasLine$));
|
|
1002
|
+
i0.ɵɵadvance(2);
|
|
1003
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(16, 32, ctx.hasLine$));
|
|
1004
|
+
i0.ɵɵadvance(2);
|
|
1005
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(18, 34, ctx.hasLine$) || i0.ɵɵpipeBind1(19, 36, ctx.hasArea$));
|
|
1006
|
+
i0.ɵɵadvance(3);
|
|
1007
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(21, 38, ctx.hasArea$));
|
|
1008
|
+
i0.ɵɵadvance(2);
|
|
1009
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(23, 40, ctx.hasArea$));
|
|
1010
|
+
i0.ɵɵadvance(2);
|
|
1011
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(25, 42, ctx.hasArea$));
|
|
1012
|
+
i0.ɵɵadvance(2);
|
|
1013
|
+
i0.ɵɵproperty("checked", ctx.measureUnitsAuto)("labelPosition", "before");
|
|
1014
|
+
i0.ɵɵadvance(1);
|
|
1015
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(28, 44, "igo.geo.measure.toggleAutoUnits"), " ");
|
|
1016
|
+
i0.ɵɵadvance(2);
|
|
1017
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(30, 46, ctx.measure$));
|
|
1018
|
+
i0.ɵɵadvance(2);
|
|
1019
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(32, 48, ctx.hasLine$) || i0.ɵɵpipeBind1(33, 50, ctx.hasArea$));
|
|
1020
|
+
i0.ɵɵadvance(4);
|
|
1021
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(36, 52, ctx.hasLine$) || i0.ɵɵpipeBind1(37, 54, ctx.hasArea$));
|
|
1022
|
+
i0.ɵɵadvance(3);
|
|
1023
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(39, 56, ctx.hasLine$) || i0.ɵɵpipeBind1(40, 58, ctx.hasArea$));
|
|
1024
|
+
i0.ɵɵadvance(3);
|
|
1025
|
+
i0.ɵɵproperty("store", ctx.store)("template", ctx.tableTemplate);
|
|
1026
|
+
} }, styles: [".measure-type-toggle[_ngcontent-%COMP%]{padding:10px;text-align:center}.measure-type-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}.measure-type-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] mat-button-toggle[_ngcontent-%COMP%]{width:50%}.measure-options[_ngcontent-%COMP%]{overflow-x:hidden}.measure-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;margin:10px}.measure-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 60px)}.measure-store-buttons[_ngcontent-%COMP%]{margin-left:-2px}.measure-store-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:first-of-type{margin-left:14px}.table-compact[_ngcontent-%COMP%] .mat-header-cell.mat-column-selectionCheckbox{width:52px}"], changeDetection: 0 });
|
|
1027
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MeasurerComponent, [{
|
|
1028
|
+
type: Component,
|
|
1029
|
+
args: [{ selector: 'igo-measurer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\r\n <div class=\"measure-type-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"activeMeasureType\"\r\n (change)=\"onMeasureTypeChange($event.value)\">\r\n <mat-button-toggle [value]=\"measureType.Length\">\r\n {{('igo.geo.measure.' + measureType.Length) | translate}}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"measureType.Area\">\r\n {{('igo.geo.measure.' + measureType.Area) | translate}}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n\r\n <div class=\"measure-options mat-typography\">\r\n <mat-slide-toggle\r\n [disabled]=\"drawControlIsDisabled\"\r\n [checked]=\"drawControlIsActive\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onToggleDrawControl($event.checked)\">\r\n {{'igo.geo.measure.toggleActive' | translate}}\r\n </mat-slide-toggle>\r\n\r\n <mat-divider *ngIf=\"(hasLine$ | async)\"></mat-divider>\r\n\r\n <mat-slide-toggle *ngIf=\"(hasLine$ | async)\"\r\n [checked]=\"displayLines\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onToggleDisplayLines($event.checked)\">\r\n {{'igo.geo.measure.toggleDisplayLines' | translate}}\r\n </mat-slide-toggle>\r\n\r\n <mat-divider *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"></mat-divider>\r\n\r\n <mat-slide-toggle *ngIf=\"(hasArea$ | async)\"\r\n [checked]=\"displayDistance\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onToggleDisplayDistance($event.checked)\">\r\n {{'igo.geo.measure.toggleDisplayDistance' | translate}}\r\n </mat-slide-toggle>\r\n\r\n <mat-slide-toggle *ngIf=\"(hasArea$ | async)\"\r\n [checked]=\"displayAreas\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onToggleDisplayAreas($event.checked)\">\r\n {{'igo.geo.measure.toggleDisplayAreas' | translate}}\r\n </mat-slide-toggle>\r\n\r\n <mat-divider *ngIf=\"(hasArea$ | async)\"></mat-divider>\r\n\r\n <mat-slide-toggle\r\n [checked]=\"measureUnitsAuto\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onToggleMeasureUnitsAuto($event.checked)\">\r\n {{'igo.geo.measure.toggleAutoUnits' | translate}}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <ng-container *ngIf=\"measure$ | async as measure\">\r\n <igo-measurer-item *ngIf=\"activeMeasureType === measureType.Length || activeMeasureType === measureType.Area\"\r\n [measureType]=\"measureType.Length\"\r\n [measureUnit]=\"measureLengthUnit.Meters\"\r\n [measure]=\"measure.length\"\r\n [auto]=\"measureUnitsAuto\"\r\n [placeholder]=\"(activeMeasureType === measureType.Area ? 'igo.geo.measure.perimeter' : 'igo.geo.measure.length') | translate\"\r\n (measureUnitChange)=\"onLengthUnitChange($event)\">\r\n </igo-measurer-item>\r\n\r\n <igo-measurer-item *ngIf=\"activeMeasureType === measureType.Area\"\r\n [measureType]=\"measureType.Area\"\r\n [measureUnit]=\"measureAreaUnit.SquareMeters\"\r\n [measure]=\"measure.area\"\r\n [auto]=\"measureUnitsAuto\"\r\n [placeholder]=\"'igo.geo.measure.area' | translate\"\r\n (measureUnitChange)=\"onAreaUnitChange($event)\">\r\n </igo-measurer-item>\r\n </ng-container>\r\n\r\n <mat-divider *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"></mat-divider>\r\n\r\n <div class=\"measure-store-buttons\">\r\n <button *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.geo.measure.actionbar.calculate.tooltip' | translate\"\r\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\r\n color=\"accent\"\r\n (click)=\"onCalculateClick()\">\r\n <mat-icon svgIcon=\"calculator\"></mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.geo.measure.actionbar.delete.tooltip' | translate\"\r\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\r\n color=\"warn\"\r\n (click)=\"onDeleteClick()\">\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n\r\n <!--button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.geo.measure.actionbar.modify.tooltip' | translate\"\r\n [disabled]=\"(selectedFeatures$ | async).length !== 1\"\r\n (click)=\"onModifyClick()\">\r\n <mat-icon svgIcon=\"edit\"></mat-icon>\r\n </button-->\r\n </div>\r\n\r\n <igo-entity-table\r\n #table\r\n class=\"table-compact\"\r\n [store]=\"store\"\r\n [template]=\"tableTemplate\">\r\n </igo-entity-table>\r\n</div>\r\n", styles: [".measure-type-toggle{padding:10px;text-align:center}.measure-type-toggle mat-button-toggle-group{width:100%}.measure-type-toggle mat-button-toggle-group mat-button-toggle{width:50%}.measure-options{overflow-x:hidden}.measure-options mat-slide-toggle{width:100%;margin:10px}.measure-options mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 60px)}.measure-store-buttons{margin-left:-2px}.measure-store-buttons button:first-of-type{margin-left:14px}.table-compact ::ng-deep .mat-header-cell.mat-column-selectionCheckbox{width:52px}\n"] }]
|
|
1030
|
+
}], function () { return [{ type: i1.LanguageService }, { type: i2.MatDialog }, { type: i1.StorageService }]; }, { map: [{
|
|
1031
|
+
type: Input
|
|
1032
|
+
}], store: [{
|
|
1033
|
+
type: Input
|
|
1034
|
+
}], activeMeasureType: [{
|
|
1035
|
+
type: Input
|
|
1036
|
+
}], minSegmentLength: [{
|
|
1037
|
+
type: Input
|
|
1038
|
+
}], table: [{
|
|
1039
|
+
type: ViewChild,
|
|
1040
|
+
args: ['table', { static: true }]
|
|
1041
|
+
}] }); })();
|
|
1042
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVhc3VyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbWVhc3VyZS9tZWFzdXJlci9tZWFzdXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tZWFzdXJlL21lYXN1cmVyL21lYXN1cmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sU0FBUyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sY0FBYyxNQUFNLGtCQUFrQixDQUFDO0FBTzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEMsT0FBTyxFQUFtQixZQUFZLEVBQWtCLE1BQU0sWUFBWSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUNMLE9BQU8sRUFFUCwyQkFBMkIsRUFDM0IsNkJBQTZCLEVBQzdCLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUkxQyxPQUFPLEVBQ0ws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QjtRQU83QixlQUF3QjtRQUF4QiwyREFBd0I7UUFHcEMsZUFBNEI7UUFBNUIsOENBQTRCLDJCQUFBO1FBRzVCLGVBQ0Y7UUFERSwwRkFDRjtRQUdhLGVBQXVCO1FBQXZCLDJEQUF1QjtRQW9CeEIsZUFBOEM7UUFBOUMsbUdBQThDO1FBR2pELGVBQThDO1FBQTlDLG1HQUE4QztRQVM5QyxlQUE4QztRQUE5QyxtR0FBOEM7UUFxQnZELGVBQWU7UUFBZixpQ0FBZSwrQkFBQTs7dUZEeENOLGlCQUFpQjtjQU43QixTQUFTOzJCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTTt1SEFzTnRDLEdBQUc7a0JBQVgsS0FBSztZQUtHLEtBQUs7a0JBQWIsS0FBSztZQU9GLGlCQUFpQjtrQkFEcEIsS0FBSztZQVNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUVnQyxLQUFLO2tCQUExQyxTQUFTO21CQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCBPbFN0eWxlIGZyb20gJ29sL3N0eWxlL1N0eWxlJztcclxuaW1wb3J0IE9sR2VvSlNPTiBmcm9tICdvbC9mb3JtYXQvR2VvSlNPTic7XHJcbmltcG9ydCBPbFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcclxuaW1wb3J0IHsgVmVjdG9yU291cmNlRXZlbnQgYXMgT2xWZWN0b3JTb3VyY2VFdmVudCB9IGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xyXG5pbXBvcnQgT2xMaW5lU3RyaW5nIGZyb20gJ29sL2dlb20vTGluZVN0cmluZyc7XHJcbmltcG9ydCBPbFBvbHlnb24gZnJvbSAnb2wvZ2VvbS9Qb2x5Z29uJztcclxuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcclxuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9sR2VvbWV0cnkgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcclxuaW1wb3J0IE9sT3ZlcmxheSBmcm9tICdvbC9PdmVybGF5JztcclxuaW1wb3J0IHsgdW5CeUtleSB9IGZyb20gJ29sL09ic2VydmFibGUnO1xyXG5cclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlLCBTdG9yYWdlU2NvcGUsIFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IEVudGl0eVJlY29yZCwgRW50aXR5VGFibGVUZW1wbGF0ZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XHJcbmltcG9ydCB0eXBlIHsgRW50aXR5VGFibGVDb21wb25lbnQgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xyXG5cclxuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlJztcclxuaW1wb3J0IHtcclxuICBGRUFUVVJFLFxyXG4gIEZlYXR1cmVTdG9yZSxcclxuICBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3ksXHJcbiAgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3ksXHJcbiAgdHJ5QmluZFN0b3JlTGF5ZXIsXHJcbiAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5LFxyXG4gIHRyeUFkZFNlbGVjdGlvblN0cmF0ZWd5XHJcbn0gZnJvbSAnLi4vLi4vZmVhdHVyZSc7XHJcbmltcG9ydCB7IERyYXdDb250cm9sLCBNb2RpZnlDb250cm9sIH0gZnJvbSAnLi4vLi4vZ2VvbWV0cnkvc2hhcmVkJztcclxuaW1wb3J0IHsgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllcic7XHJcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcCc7XHJcblxyXG5pbXBvcnQgeyBNZWFzdXJlLCBNZWFzdXJlckRpYWxvZ0RhdGEsIEZlYXR1cmVXaXRoTWVhc3VyZSB9IGZyb20gJy4uL3NoYXJlZC9tZWFzdXJlLmludGVyZmFjZXMnO1xyXG5pbXBvcnQge1xyXG4gIE1lYXN1cmVUeXBlLFxyXG4gIE1lYXN1cmVBcmVhVW5pdCxcclxuICBNZWFzdXJlTGVuZ3RoVW5pdCxcclxufSBmcm9tICcuLi9zaGFyZWQvbWVhc3VyZS5lbnVtJztcclxuaW1wb3J0IHtcclxuICBtZWFzdXJlT2xHZW9tZXRyeSxcclxuICBjcmVhdGVNZWFzdXJlSW50ZXJhY3Rpb25TdHlsZSxcclxuICBjcmVhdGVNZWFzdXJlTGF5ZXJTdHlsZSxcclxuICB1cGRhdGVPbFRvb2x0aXBzQXRNaWRwb2ludHMsXHJcbiAgdXBkYXRlT2xUb29sdGlwQXRDZW50ZXIsXHJcbiAgZ2V0VG9vbHRpcHNPZk9sR2VvbWV0cnksXHJcbiAgc3F1YXJlTWV0ZXJzVG9Vbml0LFxyXG4gIG1ldGVyc1RvVW5pdCxcclxuICBmb3JtYXRNZWFzdXJlXHJcbn0gZnJvbSAnLi4vc2hhcmVkL21lYXN1cmUudXRpbHMnO1xyXG5pbXBvcnQgeyBNZWFzdXJlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbWVhc3VyZXItZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogVG9vbCB0byBtZWFzdXJlIGxlbmd0aHMgYW5kIGFyZWFzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1tZWFzdXJlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lYXN1cmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tZWFzdXJlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZWFzdXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgdGVtcGxhdGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwdWJsaWMgdGFibGVUZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZSA9IHtcclxuICAgIHNlbGVjdGlvbjogdHJ1ZSxcclxuICAgIHNlbGVjdE1hbnk6IHRydWUsXHJcbiAgICBzZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgIHNvcnQ6IHRydWUsXHJcbiAgICBjb2x1bW5zOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnbGVuZ3RoJyxcclxuICAgICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8ubWVhc3VyZS5sZW5ndGhIZWFkZXInKSxcclxuICAgICAgICB2YWx1ZUFjY2Vzc29yOiAobG9jYWxGZWF0dXJlOiBGZWF0dXJlV2l0aE1lYXN1cmUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHVuaXQgPSB0aGlzLmFjdGl2ZUxlbmd0aFVuaXQ7XHJcbiAgICAgICAgICBjb25zdCBtZWFzdXJlID0gbWV0ZXJzVG9Vbml0KGxvY2FsRmVhdHVyZS5wcm9wZXJ0aWVzLm1lYXN1cmUubGVuZ3RoLCB1bml0KTtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXRNZWFzdXJlKG1lYXN1cmUsIHtcclxuICAgICAgICAgICAgZGVjaW1hbDogMSxcclxuICAgICAgICAgICAgdW5pdCxcclxuICAgICAgICAgICAgdW5pdEFiYnI6IGZhbHNlLFxyXG4gICAgICAgICAgICBsb2NhbGU6ICdmcidcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8ubWVhc3VyZS5hcmVhSGVhZGVyJyksXHJcbiAgICAgICAgdmFsdWVBY2Nlc3NvcjogKGxvY2FsRmVhdHVyZTogRmVhdHVyZVdpdGhNZWFzdXJlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB1bml0ID0gdGhpcy5hY3RpdmVBcmVhVW5pdDtcclxuICAgICAgICAgIGNvbnN0IG1lYXN1cmUgPSBzcXVhcmVNZXRlcnNUb1VuaXQobG9jYWxGZWF0dXJlLnByb3BlcnRpZXMubWVhc3VyZS5hcmVhLCB1bml0KTtcclxuICAgICAgICAgIHJldHVybiBtZWFzdXJlID8gZm9ybWF0TWVhc3VyZShtZWFzdXJlLCB7XHJcbiAgICAgICAgICAgIGRlY2ltYWw6IDEsXHJcbiAgICAgICAgICAgIHVuaXQsXHJcbiAgICAgICAgICAgIHVuaXRBYmJyOiBmYWxzZSxcclxuICAgICAgICAgICAgbG9jYWxlOiAnZnInXHJcbiAgICAgICAgICB9KSA6ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyQkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIE1lYXN1cmVUeXBlIGVudW1cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwdWJsaWMgbWVhc3VyZVR5cGUgPSBNZWFzdXJlVHlwZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBBcmVhTWVhc3VyZVVuaXQgZW51bVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBtZWFzdXJlQXJlYVVuaXQgPSBNZWFzdXJlQXJlYVVuaXQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgTGVuZ3RoTWVhc3VyZVVuaXQgZW51bVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBtZWFzdXJlTGVuZ3RoVW5pdCA9IE1lYXN1cmVMZW5ndGhVbml0O1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIG1lYXN1cmUgdW5pdHMgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBtZWFzdXJlVW5pdHNBdXRvOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgZGlzcGxheSBvZiBkaXN0YW5jZXMgb2YgYXJlYXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwdWJsaWMgZGlzcGxheURpc3RhbmNlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBkaXNwbGF5IG9mIGRpc3RhbmNlcyBvZiBsaW5lc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBkaXNwbGF5TGluZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGRpc3BsYXkgb2YgYXJlYXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwdWJsaWMgZGlzcGxheUFyZWFzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiBsaW5lIGJvb2xlYW5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICAgcHVibGljIGhhc0xpbmUkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiBhcmVhIGJvb2xlYW5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwdWJsaWMgaGFzQXJlYSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIG9mIGFyZWFcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwdWJsaWMgbWVhc3VyZSQ6IEJlaGF2aW9yU3ViamVjdDxNZWFzdXJlPiA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe30pO1xyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIG9mIHNlbGVjdGVkIGZlYXR1cmVzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdGVkRmVhdHVyZXMkOiBCZWhhdmlvclN1YmplY3Q8RmVhdHVyZVdpdGhNZWFzdXJlW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9MIGRyYXcgc291cmNlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcHVibGljIHNob3dUb29sdGlwczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgZHJhdyBjb250cm9sIHRvZ2dsZSBpcyBkaXNhYmxlZCBvciBub3RcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwdWJsaWMgZHJhd0NvbnRyb2xJc0Rpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRHJhdyBsaW5lIGNvbnRyb2xcclxuICAgKi9cclxuICBwcml2YXRlIGRyYXdMaW5lQ29udHJvbDogRHJhd0NvbnRyb2w7XHJcblxyXG4gIC8qKlxyXG4gICAqIERyYXcgcG9seWdvbiBjb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkcmF3UG9seWdvbkNvbnRyb2w6IERyYXdDb250cm9sO1xyXG5cclxuICAvKipcclxuICAgKiBNb2RpZnkgY29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbW9kaWZ5Q29udHJvbDogTW9kaWZ5Q29udHJvbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQWN0aXZlIE9MIGdlb21ldHJ5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhY3RpdmVPbEdlb21ldHJ5OiBPbExpbmVTdHJpbmcgfCBPbFBvbHlnb247XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGl2ZSBtbGVuZ3RoIHVuaXRcclxuICAgKi9cclxuICBwcml2YXRlIGFjdGl2ZUxlbmd0aFVuaXQ6IE1lYXN1cmVMZW5ndGhVbml0ID0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzO1xyXG5cclxuICAvKipcclxuICAgKiBBY3RpdmUgYXJlYSB1bml0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhY3RpdmVBcmVhVW5pdDogTWVhc3VyZUFyZWFVbml0ID0gTWVhc3VyZUFyZWFVbml0LlNxdWFyZU1ldGVycztcclxuXHJcbiAgLyoqXHJcbiAgICogRmVhdHVyZSBhZGRlZCBsaXN0ZW5lciBrZXlcclxuICAgKi9cclxuICBwcml2YXRlIG9uRmVhdHVyZUFkZGVkS2V5O1xyXG5cclxuICAvKipcclxuICAgKiBGZWF0dXJlIHJlbW92ZWQgbGlzdGVuZXIga2V5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbkZlYXR1cmVSZW1vdmVkS2V5O1xyXG5cclxuICAvKipcclxuICAgKiBBY3RpdmUgZHJhdyBjb250cm9sXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhY3RpdmVEcmF3Q29udHJvbDogRHJhd0NvbnRyb2w7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byBkcmF3IHN0YXJ0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkcmF3U3RhcnQkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gZHJhdyBlbmRcclxuICAgKi9cclxuICBwcml2YXRlIGRyYXdFbmQkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gY29udHJvbHMgY2hhbmdlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZHJhd0NoYW5nZXMkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gbW9kaWZ5IHN0YXJ0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtb2RpZnlTdGFydCQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byBtb2RpZnkgZW5kXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtb2RpZnlFbmQkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gY29udHJvbHMgY2hhbmdlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgbW9kaWZ5Q2hhbmdlcyQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byBtZWFzdXJlcyBzZWxlY3Rpb25cclxuICAgKi9cclxuICBwcml2YXRlIHNlbGVjdGVkRmVhdHVyZXMkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBPTCBkcmF3IHNvdXJjZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgb2xEcmF3U291cmNlID0gbmV3IE9sVmVjdG9yU291cmNlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtYXAgdG8gbWVhc3VyZSBvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWVhc3VyZXMgc3RvcmVcclxuICAgKi9cclxuICBASW5wdXQoKSBzdG9yZTogRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoTWVhc3VyZT47XHJcblxyXG4gIC8qKlxyXG4gICAqIE1lYXN1cmUgdHlwZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGFjdGl2ZU1lYXN1cmVUeXBlKHZhbHVlOiBNZWFzdXJlVHlwZSkgeyB0aGlzLnNldEFjdGl2ZU1lYXN1cmVUeXBlKHZhbHVlKTsgfVxyXG4gIGdldCBhY3RpdmVNZWFzdXJlVHlwZSgpOiBNZWFzdXJlVHlwZSB7IHJldHVybiB0aGlzLl9hY3RpdmVNZWFzdXJlVHlwZTsgfVxyXG4gIHByaXZhdGUgX2FjdGl2ZU1lYXN1cmVUeXBlOiBNZWFzdXJlVHlwZTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1pbmltdW0gbGVuZ3RoIGEgc2VnbWVudCBtdXN0IGhhdmUgdG8gZGlzcGxheSBhIHRvb2x0aXAuXHJcbiAgICogSXQgYWxzbyBhcHBsaWVzIHRvIGFyZWEgdG9vbHRpcHMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgbWluU2VnbWVudExlbmd0aDogbnVtYmVyID0gMTA7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyBzdGF0aWM6IHRydWUgfSkgdGFibGU6IEVudGl0eVRhYmxlQ29tcG9uZW50O1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0ZXIgb25lIG9mIHRoZSBkcmF3IGNvbnRyb2wgaXMgYWN0aXZlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IGRyYXdDb250cm9sSXNBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVEcmF3Q29udHJvbCAhPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHByb2plY3Rpb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGRyYXcgY29udHJvbHMgYW5kIGFjdGl2YXRlIG9uZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pbml0U3RvcmUoKTtcclxuICAgIHRoaXMuY3JlYXRlRHJhd0xpbmVDb250cm9sKCk7XHJcbiAgICB0aGlzLmNyZWF0ZURyYXdQb2x5Z29uQ29udHJvbCgpO1xyXG4gICAgdGhpcy5jcmVhdGVNb2RpZnlDb250cm9sKCk7XHJcbiAgICB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVRvb2x0aXBzT2ZPbFNvdXJjZSh0aGlzLnN0b3JlLnNvdXJjZS5vbCk7XHJcbiAgICB0aGlzLmNoZWNrRGlzdGFuY2VBcmVhVG9nZ2xlKCk7XHJcbiAgICB0aGlzLnNldEFjdGl2ZU1lYXN1cmVUeXBlKE1lYXN1cmVUeXBlLkxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciB0aGUgb3ZlcmxheSBsYXllciBhbmQgYW55IGludGVyYWN0aW9uIGFkZGVkIGJ5IHRoaXMgY29tcG9uZW50LlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5zZXRBY3RpdmVNZWFzdXJlVHlwZSh1bmRlZmluZWQpO1xyXG4gICAgdGhpcy5kZWFjdGl2YXRlTW9kaWZ5Q29udHJvbCgpO1xyXG4gICAgdGhpcy5mcmVlemVTdG9yZSgpO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJCQubWFwKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgbWVhc3VyZSB0eXBlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25NZWFzdXJlVHlwZUNoYW5nZShtZWFzdXJlVHlwZTogTWVhc3VyZVR5cGUpIHtcclxuICAgIHRoaXMuYWN0aXZlTWVhc3VyZVR5cGUgPSBtZWFzdXJlVHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGl2YXRlIG9yIGRlYWN0aXZhdGUgdGhlIGN1cnJlbnQgZHJhdyBjb250cm9sXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Ub2dnbGVEcmF3Q29udHJvbCh0b2dnbGU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kZWFjdGl2YXRlRHJhd0NvbnRyb2woKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBBY3RpdmF0ZSBvciBkZWFjdGl2YXRlIHRoZSBjdXJyZW50IGRyYXcgY29udHJvbFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gICBvblRvZ2dsZU1lYXN1cmVVbml0c0F1dG8odG9nZ2xlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm1lYXN1cmVVbml0c0F1dG8gPSB0b2dnbGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3RpdmF0ZSBvciBkZWFjdGl2YXRlIHRoZSBjdXJyZW50IGRpc3BsYXkgb2YgZGlzdGFuY2VzIG9mIHRoZSBhcmVhc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uVG9nZ2xlRGlzcGxheURpc3RhbmNlKHRvZ2dsZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaXNwbGF5RGlzdGFuY2UgPSB0b2dnbGU7XHJcbiAgICB0aGlzLm9uRGlzcGxheURpc3RhbmNlKCk7XHJcbiAgICB0b2dnbGUgPyAodGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2Rpc3RhbmNlVG9nZ2xlJywgdHJ1ZSwgU3RvcmFnZVNjb3BlLlNFU1NJT04pKSA6XHJcbiAgICAgKHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdkaXN0YW5jZVRvZ2dsZScsIGZhbHNlLCBTdG9yYWdlU2NvcGUuU0VTU0lPTikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWN0aXZhdGUgb3IgZGVhY3RpdmF0ZSB0aGUgY3VycmVudCBkaXNwbGF5IG9mIGRpc3RhbmNlcyBvZiB0aGUgbGluZXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblRvZ2dsZURpc3BsYXlMaW5lcyh0b2dnbGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZGlzcGxheUxpbmVzID0gdG9nZ2xlO1xyXG4gICAgdGhpcy5vbkRpc3BsYXlMaW5lcygpO1xyXG4gICAgdG9nZ2xlID8gKHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdsaW5lc1RvZ2dsZScsIHRydWUsIFN0b3JhZ2VTY29wZS5TRVNTSU9OKSkgOlxyXG4gICAgICh0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldCgnbGluZXNUb2dnbGUnLCBmYWxzZSwgU3RvcmFnZVNjb3BlLlNFU1NJT04pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGl2YXRlIG9yIGRlYWN0aXZhdGUgdGhlIGN1cnJlbnQgZGlzcGxheSBvZiBhcmVhc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uVG9nZ2xlRGlzcGxheUFyZWFzKHRvZ2dsZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaXNwbGF5QXJlYXMgPSB0b2dnbGU7XHJcbiAgICB0aGlzLm9uRGlzcGxheUFyZWFzKCk7XHJcbiAgICB0b2dnbGUgPyAodGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2FyZWFzVG9nZ2xlJywgdHJ1ZSwgU3RvcmFnZVNjb3BlLlNFU1NJT04pKSA6XHJcbiAgICAgKHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdhcmVhc1RvZ2dsZScsIGZhbHNlLCBTdG9yYWdlU2NvcGUuU0VTU0lPTikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGRpc3BsYXkgcGFyYW1ldHJlcyBpbiBjdXJyZW50IHZhbHVlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGNoZWNrRGlzdGFuY2VBcmVhVG9nZ2xlKCl7XHJcbiAgICBpZiAodGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ2Rpc3RhbmNlVG9nZ2xlJykgPT09IGZhbHNlKXtcclxuICAgICAgdGhpcy5kaXNwbGF5RGlzdGFuY2UgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnbGluZXNUb2dnbGUnKSA9PT0gZmFsc2Upe1xyXG4gICAgICB0aGlzLmRpc3BsYXlMaW5lcyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdhcmVhc1RvZ2dsZScpID09PSBmYWxzZSl7XHJcbiAgICAgIHRoaXMuZGlzcGxheUFyZWFzID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3RpdmF0ZSBvciBkZWFjdGl2YXRlIHRoZSBjdXJyZW50IGRpc3BsYXkgb2YgZGlzdGFuY2VzIG9mIGFyZWFzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25EaXNwbGF5RGlzdGFuY2UoKSB7XHJcbiAgICBpZiAodGhpcy5kaXNwbGF5RGlzdGFuY2UpIHtcclxuICAgICAgQXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpZ28tbWFwLXRvb2x0aXAtbWVhc3VyZS1wb2x5Z29uZS1zZWdtZW50cycpKS5tYXAoKHZhbHVlOiBFbGVtZW50KSA9PlxyXG4gICAgICAgIHZhbHVlLmNsYXNzTGlzdC5yZW1vdmUoJ2lnby1tYXAtdG9vbHRpcC1oaWRkZW4nKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lnby1tYXAtdG9vbHRpcC1tZWFzdXJlLXBvbHlnb25lLXNlZ21lbnRzJykpLm1hcCgodmFsdWU6IEVsZW1lbnQpID0+XHJcbiAgICAgICAgdmFsdWUuY2xhc3NMaXN0LmFkZCgnaWdvLW1hcC10b29sdGlwLWhpZGRlbicpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGl2YXRlIG9yIGRlYWN0aXZhdGUgdGhlIGN1cnJlbnQgZGlzcGxheSBvZiBkaXN0YW5jZXMgb2YgbGluZXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvbkRpc3BsYXlMaW5lcygpIHtcclxuICAgIGlmICh0aGlzLmRpc3BsYXlMaW5lcykge1xyXG4gICAgICBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lnby1tYXAtdG9vbHRpcC1tZWFzdXJlLWxpbmUtc2VnbWVudHMnKSkubWFwKCh2YWx1ZTogRWxlbWVudCkgPT5cclxuICAgICAgICB2YWx1ZS5jbGFzc0xpc3QucmVtb3ZlKCdpZ28tbWFwLXRvb2x0aXAtaGlkZGVuJykpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgQXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpZ28tbWFwLXRvb2x0aXAtbWVhc3VyZS1saW5lLXNlZ21lbnRzJykpLm1hcCgodmFsdWU6IEVsZW1lbnQpID0+XHJcbiAgICAgICAgdmFsdWUuY2xhc3NMaXN0LmFkZCgnaWdvLW1hcC10b29sdGlwLWhpZGRlbicpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGl2YXRlIG9yIGRlYWN0aXZhdGUgdGhlIGN1cnJlbnQgZGlzcGxheSBvZiBhcmVhc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uRGlzcGxheUFyZWFzKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzcGxheUFyZWFzKSB7XHJcbiAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaWdvLW1hcC10b29sdGlwLW1lYXN1cmUtYXJlYScpKS5tYXAoKHZhbHVlOiBFbGVtZW50KSA9PlxyXG4gICAgICAgIHZhbHVlLmNsYXNzTGlzdC5yZW1vdmUoJ2lnby1tYXAtdG9vbHRpcC1oaWRkZW4nKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lnby1tYXAtdG9vbHRpcC1tZWFzdXJlLWFyZWEnKSkubWFwKCh2YWx1ZTogRWxlbWVudCkgPT5cclxuICAgICAgICB2YWx1ZS5jbGFzc0xpc3QuYWRkKCdpZ28tbWFwLXRvb2x0aXAtaGlkZGVuJykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBtZWFzdXJlIHR5cGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvbkxlbmd0aFVuaXRDaGFuZ2UodW5pdDogTWVhc3VyZUxlbmd0aFVuaXQpIHtcclxuICAgIHRoaXMuYWN0aXZlTGVuZ3RoVW5pdCA9IHVuaXQ7XHJcbiAgICB0aGlzLnRhYmxlLnJlZnJlc2goKTtcclxuICAgIHRoaXMudXBkYXRlVG9vbHRpcHNPZk9sU291cmNlKHRoaXMuc3RvcmUuc291cmNlLm9sKTtcclxuICAgIGlmICh0aGlzLmFjdGl2ZU9sR2VvbWV0cnkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVRvb2x0aXBzT2ZPbEdlb21ldHJ5KHRoaXMuYWN0aXZlT2xHZW9tZXRyeSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIG1lYXN1cmUgdHlwZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uQXJlYVVuaXRDaGFuZ2UodW5pdDogTWVhc3VyZUFyZWFVbml0KSB7XHJcbiAgICB0aGlzLmFjdGl2ZUFyZWFVbml0ID0gdW5pdDtcclxuICAgIHRoaXMudGFibGUucmVmcmVzaCgpO1xyXG4gICAgdGhpcy51cGRhdGVUb29sdGlwc09mT2xTb3VyY2UodGhpcy5zdG9yZS5zb3VyY2Uub2wpO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlT2xHZW9tZXRyeSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVG9vbHRpcHNPZk9sR2VvbWV0cnkodGhpcy5hY3RpdmVPbEdlb21ldHJ5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2FsY3VsYXRlQ2xpY2soKSB7XHJcbiAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWU7XHJcbiAgICBjb25zdCBhcmVhID0gZmVhdHVyZXMucmVkdWNlKChzdW06IG51bWJlciwgbG9jYWxGZWF0dXJlOiBGZWF0dXJlV2l0aE1lYXN1cmUpID0+IHtcclxuICAgICAgcmV0dXJuIHN1bSArIGxvY2FsRmVhdHVyZS5wcm9wZXJ0aWVzLm1lYXN1cmUuYXJlYSB8fCAwO1xyXG4gICAgfSwgMCk7XHJcbiAgICBjb25zdCBsZW5ndGggPSBmZWF0dXJlcy5yZWR1Y2UoKHN1bTogbnVtYmVyLCBsb2NhbEZlYXR1cmU6IEZlYXR1cmVXaXRoTWVhc3VyZSkgPT4ge1xyXG4gICAgICBpZiAobG9jYWxGZWF0dXJlLmdlb21ldHJ5LnR5cGUgPT09ICdQb2x5Z29uJykge1xyXG4gICAgICAgIHJldHVybiBzdW07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHN1bSArIGxvY2FsRmVhdHVyZS5wcm9wZXJ0aWVzLm1lYXN1cmUubGVuZ3RoIHx8IDA7XHJcbiAgICB9LCAwKTtcclxuICAgIGNvbnN0IHBlcmltZXRlciA9IGZlYXR1cmVzLnJlZHVjZSgoc3VtOiBudW1iZXIsIGxvY2FsRmVhdHVyZTogRmVhdHVyZVdpdGhNZWFzdXJlKSA9PiB7XHJcbiAgICAgIGlmIChsb2NhbEZlYXR1cmUuZ2VvbWV0cnkudHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3VtICsgbG9jYWxGZWF0dXJlLnByb3BlcnRpZXMubWVhc3VyZS5sZW5ndGggfHwgMDtcclxuICAgIH0sIDApO1xyXG5cclxuICAgIHRoaXMub3BlbkRpYWxvZyh7XHJcbiAgICAgIGFyZWEsXHJcbiAgICAgIGxlbmd0aCxcclxuICAgICAgcGVyaW1ldGVyXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlQ2xpY2soKSB7XHJcbiAgICB0aGlzLnN0b3JlLmRlbGV0ZU1hbnkodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmZvckVhY2goc2VsZWN0ZWRGZWF0dXJlID0+IHtcclxuICAgICAgdGhpcy5vbERyYXdTb3VyY2UuZ2V0RmVhdHVyZXMoKS5mb3JFYWNoKGRyYXdpbmdMYXllckZlYXR1cmUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZHJhd2luZ0xheWVyRmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlLnByb3BlcnRpZXMuaWQgPT09IGdlb21ldHJ5Lm9sX3VpZCkge1xyXG4gICAgICAgICAgdGhpcy5vbERyYXdTb3VyY2UucmVtb3ZlRmVhdHVyZShkcmF3aW5nTGF5ZXJGZWF0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbk1vZGlmeUNsaWNrKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoICE9PSAxKSB7IHJldHVybjsgfVxyXG5cclxuICAgIGlmICh0aGlzLm1vZGlmeUNvbnRyb2wuYWN0aXZlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZU1vZGlmeUNvbnRyb2woKTtcclxuICAgICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbG9jYWxGZWF0dXJlID0gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXTtcclxuICAgICAgY29uc3Qgb2xGZWF0dXJlcyA9IHRoaXMuc3RvcmUubGF5ZXIub2wuZ2V0U291cmNlKCkuZ2V0RmVhdHVyZXMoKTtcclxuICAgICAgY29uc3Qgb2xGZWF0dXJlID0gb2xGZWF0dXJlcy5maW5kKChfb2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcclxuICAgICAgICByZXR1cm4gX29sRmVhdHVyZS5nZXQoJ2lkJykgPT09IGxvY2FsRmVhdHVyZS5wcm9wZXJ0aWVzLmlkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChvbEZlYXR1cmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZU1vZGlmeUNvbnRyb2woKTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2xHZW9tZXRyeSA9IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJUb29sdGlwc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5IGFzIChPbExpbmVTdHJpbmcgfCBPbFBvbHlnb24pKTtcclxuICAgICAgICB0aGlzLm1vZGlmeUNvbnRyb2wuc2V0T2xHZW9tZXRyeShvbEdlb21ldHJ5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuRGlhbG9nKGRhdGE6IE1lYXN1cmVyRGlhbG9nRGF0YSk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihNZWFzdXJlckRpYWxvZ0NvbXBvbmVudCwge2RhdGF9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIG1lYXN1cmUgc3RvcmUgYW5kIHNldCB1cCBzb21lIGxpc3RlbmVyc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgaW5pdFN0b3JlKCkge1xyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLnN0b3JlO1xyXG5cclxuICAgIGNvbnN0IGxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcclxuICAgICAgdGl0bGU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLm1lYXN1cmUubGF5ZXJUaXRsZScpLFxyXG4gICAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXHJcbiAgICAgIGlkOiBgaWdvLW1lYXN1cmVzLSR7dXVpZCgpfWAsXHJcbiAgICAgIHpJbmRleDogMjAwLFxyXG4gICAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxyXG4gICAgICBzdHlsZTogY3JlYXRlTWVhc3VyZUxheWVyU3R5bGUoKSxcclxuICAgICAgc2hvd0luTGF5ZXJMaXN0OiB0cnVlLFxyXG4gICAgICBleHBvcnRhYmxlOiB0cnVlLFxyXG4gICAgICBicm93c2FibGU6IGZhbHNlLFxyXG4gICAgICB3b3Jrc3BhY2U6IHsgZW5hYmxlZDogZmFsc2UgfVxyXG4gICAgfSk7XHJcbiAgICB0cnlCaW5kU3RvcmVMYXllcihzdG9yZSwgbGF5ZXIpO1xyXG4gICAgc3RvcmUubGF5ZXIudmlzaWJsZSA9IHRydWU7XHJcbiAgICBsYXllci52aXNpYmxlJC5zdWJzY3JpYmUodmlzaWJsZSA9PiB7XHJcbiAgICAgIGlmICh2aXNpYmxlKSB7XHJcbiAgICAgICAgQXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpZ28tbWFwLXRvb2x0aXAtbWVhc3VyZScpKS5tYXAoKHZhbHVlOiBFbGVtZW50KSA9PlxyXG4gICAgICAgIHZhbHVlLmNsYXNzTGlzdC5yZW1vdmUoJ2lnby1tYXAtdG9vbHRpcC1tZWFzdXJlLWJ5LWRpc3BsYXknKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgQXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpZ28tbWFwLXRvb2x0aXAtbWVhc3VyZScpKS5tYXAoKHZhbHVlOiBFbGVtZW50KSA9PlxyXG4gICAgICAgIHZhbHVlLmNsYXNzTGlzdC5hZGQoJ2lnby1tYXAtdG9vbHRpcC1tZWFzdXJlLWJ5LWRpc3BsYXknKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRyeUFkZExvYWRpbmdTdHJhdGVneShzdG9yZSk7XHJcblxyXG4gICAgdHJ5QWRkU2VsZWN0aW9uU3RyYXRlZ3koc3RvcmUsIG5ldyBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSh7XHJcbiAgICAgIG1hcDogdGhpcy5tYXAsXHJcbiAgICAgIG1hbnk6IHRydWVcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLm9uRmVhdHVyZUFkZGVkS2V5ID0gc3RvcmUuc291cmNlLm9sLm9uKCdhZGRmZWF0dXJlJywgKGV2ZW50OiBPbFZlY3RvclNvdXJjZUV2ZW50PE9sR2VvbWV0cnk+KSA9PiB7XHJcbiAgICAgIGNvbnN0IGxvY2FsRmVhdHVyZSA9IGV2ZW50LmZlYXR1cmU7XHJcbiAgICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBsb2NhbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWVhc3VyZU9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBsb2NhbEZlYXR1cmUuZ2V0KCdtZWFzdXJlJykpO1xyXG4gICAgICB0aGlzLm9uRGlzcGxheURpc3RhbmNlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9uRmVhdHVyZVJlbW92ZWRLZXkgPSBzdG9yZS5zb3VyY2Uub2wub24oJ3JlbW92ZWZlYXR1cmUnLCAoZXZlbnQ6IE9sVmVjdG9yU291cmNlRXZlbnQ8T2xHZW9tZXRyeT4pID0+IHtcclxuICAgICAgY29uc3Qgb2xHZW9tZXRyeSA9IGV2ZW50LmZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XHJcbiAgICAgIHRoaXMuY2xlYXJUb29sdGlwc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQkID0gc3RvcmUuc3RhdGVWaWV3Lm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoTWVhc3VyZT4pID0+IHtcclxuICAgICAgcmV0dXJuIHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZTtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIHNraXAoMSkgLy8gU2tpcCBpbml0aWFsIGVtaXNzaW9uXHJcbiAgICApXHJcbiAgICAuc3Vic2NyaWJlKChyZWNvcmRzOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhNZWFzdXJlPltdKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGlmeUNvbnRyb2wuYWN0aXZlID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlTW9kaWZ5Q29udHJvbCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQubmV4dChyZWNvcmRzLm1hcChyZWNvcmQgPT4gcmVjb3JkLmVudGl0eSkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJCQucHVzaCh0aGlzLnN0b3JlLmVudGl0aWVzJC5zdWJzY3JpYmUob2JqZWN0c0V4aXN0cyA9PiB7XHJcbiAgICAgIGlmIChvYmplY3RzRXhpc3RzLmZpbmQob2JqZWN0RXhpc3QgPT4gb2JqZWN0RXhpc3QuZ2VvbWV0cnkudHlwZSA9PT0gJ1BvbHlnb24nKSl7XHJcbiAgICAgICAgdGhpcy5oYXNBcmVhJC5uZXh0KHRydWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFzQXJlYSQubmV4dChmYWxzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChvYmplY3RzRXhpc3RzLmZpbmQob2JqZWN0RXhpc3QgPT4gb2JqZWN0RXhpc3QuZ2VvbWV0cnkudHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSl7XHJcbiAgICAgICAgdGhpcy5oYXNMaW5lJC5uZXh0KHRydWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFzTGluZSQubmV4dChmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKHRoaXMuc3RvcmUuY291bnQkLnN1YnNjcmliZShjbnQgPT4ge1xyXG4gICAgICBjbnQgPj0gMSA/XHJcbiAgICAgICAgdGhpcy5zdG9yZS5sYXllci5vcHRpb25zLnNob3dJbkxheWVyTGlzdCA9IHRydWUgOlxyXG4gICAgICAgIHRoaXMuc3RvcmUubGF5ZXIub3B0aW9ucy5zaG93SW5MYXllckxpc3QgPSBmYWxzZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZyZWV6ZSBhbnkgc3RvcmUsIG1lYW5pbmcgdGhlIGxheWVyIGlzIHJlbW92ZWQsIHN0cmF0ZWdpZXMgYXJlIGRlYWN0aXZhdGVkXHJcbiAgICogYW5kIHNvbWUgbGlzdGVuZXIgcmVtb3ZlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZnJlZXplU3RvcmUoKSB7XHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuc3RvcmU7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdW5CeUtleSh0aGlzLm9uRmVhdHVyZUFkZGVkS2V5KTtcclxuICAgIHVuQnlLZXkodGhpcy5vbkZlYXR1cmVSZW1vdmVkS2V5KTtcclxuICAgIHN0b3JlLmRlYWN0aXZhdGVTdHJhdGVneU9mVHlwZShGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3kpO1xyXG4gICAgc3RvcmUuZGVhY3RpdmF0ZVN0cmF0ZWd5T2ZUeXBlKEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIGRyYXcgbGluZSBjb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVEcmF3TGluZUNvbnRyb2woKSB7XHJcbiAgICB0aGlzLmRyYXdMaW5lQ29udHJvbCA9IG5ldyBEcmF3Q29udHJvbCh7XHJcbiAgICAgIGdlb21ldHJ5VHlwZTogJ0xpbmVTdHJpbmcnLFxyXG4gICAgICBkcmF3aW5nTGF5ZXJTb3VyY2U6IHRoaXMub2xEcmF3U291cmNlLFxyXG4gICAgICBpbnRlcmFjdGlvblN0eWxlOiBjcmVhdGVNZWFzdXJlSW50ZXJhY3Rpb25TdHlsZSgpLFxyXG4gICAgICBkcmF3aW5nTGF5ZXJTdHlsZTogbmV3IE9sU3R5bGUoe30pXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIGRyYXcgcG9seWdvbiBjb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVEcmF3UG9seWdvbkNvbnRyb2woKSB7XHJcbiAgICB0aGlzLmRyYXdQb2x5Z29uQ29udHJvbCA9IG5ldyBEcmF3Q29udHJvbCh7XHJcbiAgICAgIGdlb21ldHJ5VHlwZTogJ1BvbHlnb24nLFxyXG4gICAgICBkcmF3aW5nTGF5ZXJTb3VyY2U6IHRoaXMub2xEcmF3U291cmNlLFxyXG4gICAgICBpbnRlcmFjdGlvblN0eWxlOiBjcmVhdGVNZWFzdXJlSW50ZXJhY3Rpb25TdHlsZSgpLFxyXG4gICAgICBkcmF3aW5nTGF5ZXJTdHlsZTogbmV3IE9sU3R5bGUoe30pXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIGRyYXcgcG9seWdvbiBjb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVNb2RpZnlDb250cm9sKCkge1xyXG4gICAgdGhpcy5tb2RpZnlDb250cm9sID0gbmV3IE1vZGlmeUNvbnRyb2woe1xyXG4gICAgICBzb3VyY2U6IHRoaXMub2xEcmF3U291cmNlLFxyXG4gICAgICBkcmF3U3R5bGU6IGNyZWF0ZU1lYXN1cmVJbnRlcmFjdGlvblN0eWxlKCksXHJcbiAgICAgIGxheWVyU3R5bGU6IG5ldyBPbFN0eWxlKHt9KVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3RpdmF0ZSB0aGUgcmlnaHQgY29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdG9nZ2xlRHJhd0NvbnRyb2woKSB7XHJcbiAgICB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xyXG4gICAgLy8gdGhpcy5kZWFjdGl2YXRlTW9kaWZ5Q29udHJvbCgpO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlTWVhc3VyZVR5cGUgPT09IE1lYXN1cmVUeXBlLkxlbmd0aCkge1xyXG4gICAgICB0aGlzLmFjdGl2YXRlRHJhd0NvbnRyb2wodGhpcy5kcmF3TGluZUNvbnRyb2wpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZU1lYXN1cmVUeXBlID09PSBNZWFzdXJlVHlwZS5BcmVhKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVEcmF3Q29udHJvbCh0aGlzLmRyYXdQb2x5Z29uQ29udHJvbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3RpdmF0ZSBhIGdpdmVuIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gZHJhd0NvbnRyb2wgRHJhdyBjb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhY3RpdmF0ZURyYXdDb250cm9sKGRyYXdDb250cm9sOiBEcmF3Q29udHJvbCkge1xyXG4gICAgdGhpcy5kcmF3Q29udHJvbElzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wgPSBkcmF3Q29udHJvbDtcclxuICAgIHRoaXMuZHJhd1N0YXJ0JCQgPSBkcmF3Q29udHJvbC5zdGFydCRcclxuICAgICAgLnN1YnNjcmliZSgob2xHZW9tZXRyeTogT2xMaW5lU3RyaW5nIHwgT2xQb2x5Z29uKSA9PiB0aGlzLm9uRHJhd1N0YXJ0KG9sR2VvbWV0cnkpKTtcclxuICAgIHRoaXMuZHJhd0VuZCQkID0gZHJhd0NvbnRyb2wuZW5kJFxyXG4gICAgICAuc3Vic2NyaWJlKChvbEdlb21ldHJ5OiBPbExpbmVTdHJpbmcgfCBPbFBvbHlnb24pID0+IHRoaXMub25EcmF3RW5kKG9sR2VvbWV0cnkpKTtcclxuICAgIHRoaXMuZHJhd0NoYW5nZXMkJCA9IGRyYXdDb250cm9sLmNoYW5nZXMkXHJcbiAgICAgIC5zdWJzY3JpYmUoKG9sR2VvbWV0cnk6IE9sTGluZVN0cmluZyB8IE9sUG9seWdvbikgPT4gdGhpcy5vbkRyYXdDaGFuZ2VzKG9sR2VvbWV0cnkpKTtcclxuICAgIHRoaXMuZHJhd0NoYW5nZXMkJCA9IGRyYXdDb250cm9sLmFib3J0JFxyXG4gICAgICAuc3Vic2NyaWJlKChvbEdlb21ldHJ5OiBPbExpbmVTdHJpbmcgfCBPbFBvbHlnb24pID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyVG9vbHRpcHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSk7XHJcbiAgICAgICAgdGhpcy5jbGVhck1lYXN1cmVzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgZHJhd0NvbnRyb2wuc2V0T2xNYXAodGhpcy5tYXAub2wsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlYWN0aXZhdGUgdGhlIGFjdGl2ZSBkcmF3IGNvbnRyb2xcclxuICAgKi9cclxuICBwcml2YXRlIGRlYWN0aXZhdGVEcmF3Q29udHJvbCgpIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZURyYXdDb250cm9sID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub2xEcmF3U291cmNlLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5kcmF3U3RhcnQkJCAhPT0gdW5kZWZpbmVkICkgeyB0aGlzLmRyYXdTdGFydCQkLnVuc3Vic2NyaWJlKCk7IH1cclxuICAgIGlmICh0aGlzLmRyYXdFbmQkJCAhPT0gdW5kZWZpbmVkICkgeyB0aGlzLmRyYXdFbmQkJC51bnN1YnNjcmliZSgpOyB9XHJcbiAgICBpZiAodGhpcy5kcmF3Q2hhbmdlcyQkICE9PSB1bmRlZmluZWQgKSB7IHRoaXMuZHJhd0NoYW5nZXMkJC51bnN1YnNjcmliZSgpOyB9XHJcblxyXG4gICAgdGhpcy5jbGVhclRvb2x0aXBzT2ZPbFNvdXJjZSh0aGlzLm9sRHJhd1NvdXJjZSk7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVPbEdlb21ldHJ5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jbGVhclRvb2x0aXBzT2ZPbEdlb21ldHJ5KHRoaXMuYWN0aXZlT2xHZW9tZXRyeSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnNldE9sTWFwKHVuZGVmaW5lZCk7XHJcbiAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5hY3RpdmVPbEdlb21ldHJ5ID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBY3RpdmVNZWFzdXJlVHlwZShtZWFzdXJlVHlwZTogTWVhc3VyZVR5cGUpIHtcclxuICAgIHRoaXMuX2FjdGl2ZU1lYXN1cmVUeXBlID0gbWVhc3VyZVR5cGU7XHJcbiAgICB0aGlzLmNsZWFyTWVhc3VyZXMoKTtcclxuICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoZSBkcmF3IHNvdXJjZSBhbmQgdHJhY2sgdGhlIGdlb21ldHJ5IGJlaW5nIGRyYXduXHJcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbkRyYXdTdGFydChvbEdlb21ldHJ5OiBPbExpbmVTdHJpbmcgfCBPbFBvbHlnb24pIHtcclxuICAgIHRoaXMuYWN0aXZlT2xHZW9tZXRyeSA9IG9sR2VvbWV0cnk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciB0aGUgZHJhdyBzb3VyY2UgYW5kIHRyYWNrIHRoZSBnZW9tZXRyeSBiZWluZyBkcmF3XHJcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbkRyYXdFbmQob2xHZW9tZXRyeTogT2xMaW5lU3RyaW5nIHwgT2xQb2x5Z29uKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU9sR2VvbWV0cnkgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmZpbmFsaXplTWVhc3VyZU9mT2xHZW9tZXRyeShvbEdlb21ldHJ5KTtcclxuICAgIHRoaXMuYWRkRmVhdHVyZVRvU3RvcmUob2xHZW9tZXRyeSk7XHJcbiAgICB0aGlzLmNsZWFyVG9vbHRpcHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSk7XHJcbiAgICB0aGlzLm9sRHJhd1NvdXJjZS5jbGVhcih0cnVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBtZWFzdXJlcyBvYnNlcnZhYmxlcyBhbmQgbWFwIHRvb2x0aXBzXHJcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbkRyYXdDaGFuZ2VzKG9sR2VvbWV0cnk6IE9sTGluZVN0cmluZyB8IE9sUG9seWdvbikge1xyXG4gICAgY29uc3QgbWVhc3VyZSA9IG1lYXN1cmVPbEdlb21ldHJ5KG9sR2VvbWV0cnksIHRoaXMucHJvamVjdGlvbik7XHJcbiAgICB0aGlzLnVwZGF0ZU1lYXN1cmVPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSwgT2JqZWN0LmFzc2lnbih7fSwgbWVhc3VyZSwge1xyXG4gICAgICBhcmVhOiB1bmRlZmluZWQgLy8gV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGFuIGFyZWEgdG9vbHRpcCB3aGlsZSBkcmF3aW5nLlxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5tZWFzdXJlJC5uZXh0KG1lYXN1cmUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWN0aXZhdGUgYSBnaXZlbiBjb250cm9sXHJcbiAgICogQHBhcmFtIG1vZGlmeUNvbnRyb2wgTW9kaWZ5IGNvbnRyb2xcclxuICAgKi9cclxuICBwcml2YXRlIGFjdGl2YXRlTW9kaWZ5Q29udHJvbCgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuc3RvcmUuZ2V0U3RyYXRlZ3lPZlR5cGUoRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3kpIGFzIEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5O1xyXG4gICAgc2VsZWN0aW9uLmRlYWN0aXZhdGUoKTtcclxuICAgIHNlbGVjdGlvbi5jbGVhcigpO1xyXG5cclxuICAgIHRoaXMubW9kaWZ5U3RhcnQkJCA9IHRoaXMubW9kaWZ5Q29udHJvbC5zdGFydCRcclxuICAgICAgLnN1YnNjcmliZSgob2xHZW9tZXRyeTogT2xMaW5lU3RyaW5nIHwgT2xQb2x5Z29uKSA9PiB0aGlzLm9uTW9kaWZ5U3RhcnQob2xHZW9tZXRyeSkpO1xyXG4gICAgdGhpcy5tb2RpZnlFbmQkJCA9IHRoaXMubW9kaWZ5Q29udHJvbC5lbmQkXHJcbiAgICAgIC5zdWJzY3JpYmUoKG9sR2VvbWV0cnk6IE9sTGluZVN0cmluZyB8IE9sUG9seWdvbikgPT4gdGhpcy5vbk1vZGlmeUVuZChvbEdlb21ldHJ5KSk7XHJcbiAgICB0aGlzLm1vZGlmeUNoYW5nZXMkJCA9IHRoaXMubW9kaWZ5Q29udHJvbC5jaGFuZ2VzJFxyXG4gICAgICAuc3Vic2NyaWJlKChvbEdlb21ldHJ5OiBPbExpbmVTdHJpbmcgfCBPbFBvbHlnb24pID0+IHRoaXMub25Nb2RpZnlDaGFuZ2VzKG9sR2VvbWV0cnkpKTtcclxuICAgIHRoaXMubW9kaWZ5Q29udHJvbC5zZXRPbE1hcCh0aGlzLm1hcC5vbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWFjdGl2YXRlIHRoZSBhY3RpdmUgbW9kaWZ5IGNvbnRyb2xcclxuICAgKi9cclxuICBwcml2YXRlIGRlYWN0aXZhdGVNb2RpZnlDb250cm9sKCkge1xyXG4gICAgaWYgKHRoaXMubW9kaWZ5U3RhcnQkJCAhPT0gdW5kZWZpbmVkICkgeyB0aGlzLm1vZGlmeVN0YXJ0JCQudW5zdWJzY3JpYmUoKTsgfVxyXG4gICAgaWYgKHRoaXMubW9kaWZ5RW5kJCQgIT09IHVuZGVmaW5lZCApIHsgdGhpcy5tb2RpZnlFbmQkJC51bnN1YnNjcmliZSgpOyB9XHJcbiAgICBpZiAodGhpcy5tb2RpZnlDaGFuZ2VzJCQgIT09IHVuZGVmaW5lZCApIHsgdGhpcy5tb2RpZnlDaGFuZ2VzJCQudW5zdWJzY3JpYmUoKTsgfVxyXG5cclxuICAgIGlmICh0aGlzLmFjdGl2ZU9sR2VvbWV0cnkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICBjb25zdCBsb2NhbEZlYXR1cmUgPSB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdO1xyXG4gICAgICAgIHRoaXMuYWRkRmVhdHVyZVRvU3RvcmUodGhpcy5hY3RpdmVPbEdlb21ldHJ5LCBsb2NhbEZlYXR1cmUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZmluYWxpemVNZWFzdXJlT2ZPbEdlb21ldHJ5KHRoaXMuYWN0aXZlT2xHZW9tZXRyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbERyYXdTb3VyY2UuY2xlYXIoKTtcclxuXHJcbiAgICB0aGlzLnN0b3JlLmFjdGl2YXRlU3RyYXRlZ3lPZlR5cGUoRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3kpO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlT2xHZW9tZXRyeSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMubW9kaWZ5Q29udHJvbC5zZXRPbE1hcCh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgdGhlIGRyYXcgc291cmNlIGFuZCB0cmFjayB0aGUgZ2VvbWV0cnkgYmVpbmcgZHJhd25cclxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPbCBsaW5lc3RyaW5nIG9yIHBvbHlnb25cclxuICAgKi9cclxuICBwcml2YXRlIG9uTW9kaWZ5U3RhcnQob2xHZW9tZXRyeTogT2xMaW5lU3RyaW5nIHwgT2xQb2x5Z29uKSB7XHJcbiAgICB0aGlzLm9uRHJhd1N0YXJ0KG9sR2VvbWV0cnkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIG1lYXN1cmVzIG9ic2VydmFibGVzIGFuZCBtYXAgdG9vbHRpcHNcclxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPbCBsaW5lc3RyaW5nIG9yIHBvbHlnb25cclxuICAgKi9cclxuICBwcml2YXRlIG9uTW9kaWZ5Q2hhbmdlcyhvbEdlb21ldHJ5OiBPbExpbmVTdHJpbmcgfCBPbFBvbHlnb24pIHtcclxuICAgIHRoaXMub25EcmF3Q2hhbmdlcyhvbEdlb21ldHJ5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoZSBkcmF3IHNvdXJjZSBhbmQgdHJhY2sgdGhlIGdlb21ldHJ5IGJlaW5nIGRyYXdcclxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPbCBsaW5lc3RyaW5nIG9yIHBvbHlnb25cclxuICAgKi9cclxuICBwcml2YXRlIG9uTW9kaWZ5RW5kKG9sR2VvbWV0cnk6IE9sTGluZVN0cmluZyB8IE9sUG9seWdvbikge1xyXG4gICAgdGhpcy5maW5hbGl6ZU1lYXN1cmVPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmFsaXplTWVhc3VyZU9mT2xHZW9tZXRyeShvbEdlb21ldHJ5OiBPbExpbmVTdHJpbmcgfCBPbFBvbHlnb24pIHtcclxuICAgIGNvbnN0IG1lYXN1cmUgPSBtZWFzdXJlT2xHZW9tZXRyeShvbEdlb21ldHJ5LCB0aGlzLnByb2plY3Rpb24pO1xyXG4gICAgdGhpcy51cGRhdGVNZWFzdXJlT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIG1lYXN1cmUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIG1lYXN1cmVzIG9ic2VydmFibGVzXHJcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXHJcbiAgICogQHBhcmFtIG1lYXN1cmUgTWVhc3VyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlTWVhc3VyZU9mT2xHZW9tZXRyeShvbEdlb21ldHJ5OiBPbExpbmVTdHJpbmcgfCBPbFBvbHlnb24sIG1lYXN1cmU6IE1lYXN1cmUpIHtcclxuICAgIG9sR2VvbWV0cnkuc2V0UHJvcGVydGllcyh7X21lYXN1cmU6IG1lYXN1cmV9LCB0cnVlKTtcclxuICAgIHRoaXMudXBkYXRlVG9vbHRpcHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciB0aGUgbWVhc3VyZXMgb2JzZXJ2YWJsZXNcclxuICAgKi9cclxuICBwcml2YXRlIGNsZWFyTWVhc3VyZXMoKSB7XHJcbiAgICB0aGlzLm1lYXN1cmUkLm5leHQoe30pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgZmVhdHVyZSB3aXRoIG1lYXN1cmVzIHRvIHRoZSBzdG9yZS4gVGhlIGxvYWRpbmcgc3RyYWdlZ3kgb2YgdGhlIHN0b3JlXHJcbiAgICogd2lsbCB0cmlnZ2VyIGFuZCBhZGQgdGhlIGZlYXR1cmUgdG8gdGhlIG1hcC5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcml2YXRlIGFkZEZlYXR1cmVUb1N0b3JlKG9sR2VvbWV0cnksIGxvY2FsRmVhdHVyZT86IEZlYXR1cmVXaXRoTWVhc3VyZSkge1xyXG4gICAgY29uc3QgZmVhdHVyZUlkID0gbG9jYWxGZWF0dXJlID8gbG9jYWxGZWF0dXJlLnByb3BlcnRpZXMuaWQgOiBvbEdlb21ldHJ5Lm9sX3VpZDtcclxuICAgIGNvbnN0IHByb2plY3Rpb24gPSB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpO1xyXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgT2xHZW9KU09OKCkud3JpdGVHZW9tZXRyeU9iamVjdChvbEdlb21ldHJ5LCB7XHJcbiAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiBwcm9qZWN0aW9uLFxyXG4gICAgICBkYXRhUHJvamVjdGlvbjogcHJvamVjdGlvblxyXG4gICAgfSkgYXMgYW55O1xyXG4gICAgdGhpcy5zdG9yZS51cGRhdGUoe1xyXG4gICAgICB0eXBlOiBGRUFUVVJFLFxyXG4gICAgICBnZW9tZXRyeSxcclxuICAgICAgcHJvamVjdGlvbjogcHJvamVjdGlvbi5nZXRDb2RlKCksXHJcbiAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICBpZDogZmVhdHVyZUlkLFxyXG4gICAgICAgIG1lYXN1cmU6IG9sR2VvbWV0cnkuZ2V0KCdfbWVhc3VyZScpXHJcbiAgICAgIH0sXHJcbiAgICAgIG1ldGE6IHtcclxuICAgICAgICBpZDogZmVhdHVyZUlkXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGFsbCB0aGUgdG9vbHRpcHMgb2YgYW4gT0wgZ2VvbWV0cnlcclxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPTCBHZW9tZXRyeVxyXG4gICAqIEBwYXJhbSBsZW5ndGhzIExlbmd0aHMgb2YgdGhlIE9MIGdlb21ldHJ5J3Mgc2VnbWVudHNcclxuICAgKiBAcGFyYW0gbWVhc3VyZVVuaXQgRGlzcGxheSB0b29sdGlwIG1lYXN1cmUgaW4gdGhvc2UgdW5pdHNcclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZVRvb2x0aXBzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnk6IE9sTGluZVN0cmluZyB8IE9sUG9seWdvbikge1xyXG4gICAgY29uc3QgbWVhc3VyZSA9IG9sR2VvbWV0cnkuZ2V0KCdfbWVhc3VyZScpO1xyXG4gICAgY29uc3QgbGVuZ3RocyA9IG1lYXN1cmUubGVuZ3RocztcclxuICAgIGNvbnN0IGFyZWEgPSBtZWFzdXJlLmFyZWE7XHJcblxyXG4gICAgY29uc3Qgb2xNaWRwb2ludHNUb29sdGlwcyA9IHVwZGF0ZU9sVG9vbHRpcHNBdE1pZHBvaW50cyhvbEdlb21ldHJ5KTtcclxuICAgIGlmIChsZW5ndGhzLmxlbmd0aCA9PT0gb2xNaWRwb2ludHNUb29sdGlwcy5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbE1pZHBvaW50c1Rvb2x0aXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gbGVuZ3Roc1tpXTtcclxuICAgICAgICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlT2xUb29sdGlwKFxyXG4gICAgICAgICAgICBvbE1pZHBvaW50c1Rvb2x0aXBzW2ldLFxyXG4gICAgICAgICAgICBtZXRlcnNUb1VuaXQobGVuZ3RoLCB0aGlzLmFjdGl2ZUxlbmd0aFVuaXQpLFxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUxlbmd0aFVuaXQsXHJcbiAgICAgICAgICAgIE1lYXN1cmVUeXBlLkxlbmd0aFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXJlYSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlT2xUb29sdGlwKFxyXG4gICAgICAgIHVwZGF0ZU9sVG9vbHRpcEF0Q2VudGVyKG9sR2VvbWV0cnkpLFxyXG4gICAgICAgIHNxdWFyZU1ldGVyc1RvVW5pdChhcmVhLCB0aGlzLmFjdGl2ZUFyZWFVbml0KSxcclxuICAgICAgICB0aGlzLmFjdGl2ZUFyZWFVbml0LFxyXG4gICAgICAgIE1lYXN1cmVUeXBlLkFyZWFcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgdGhlIG1hcCB0b29sdGlwcyBvZiBhIGdlb2VtdHJ5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzaG93VG9vbHRpcHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeTogT2xMaW5lU3RyaW5nIHwgT2xQb2x5Z29uKSB7XHJcbiAgICBnZXRUb29sdGlwc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KS5mb3JFYWNoKChvbFRvb2x0aXA6IE9sT3ZlcmxheSB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zaG91bGRTaG93VG9vbHRpcChvbFRvb2x0aXApKSB7XHJcbiAgICAgICAgdGhpcy5tYXAub2wuYWRkT3ZlcmxheShvbFRvb2x0aXApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoZSB0b29sdGlwcyBvZiBhbiBPTCBnZW9tZXRyeXNcclxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPTCBnZW9tZXRyeSB3aXRoIHRvb2x0aXBzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjbGVhclRvb2x0aXBzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnk6IE9sTGluZVN0cmluZyB8IE9sUG9seWdvbikge1xyXG4gICAgZ2V0VG9vbHRpcHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSkuZm9yRWFjaCgob2xUb29sdGlwOiBPbE92ZXJsYXkgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgaWYgKG9sVG9vbHRpcCAhPT0gdW5kZWZpbmVkICYmIG9sVG9vbHRpcC5nZXRNYXAoKSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5tYXAub2wucmVtb3ZlT3ZlcmxheShvbFRvb2x0aXApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgdGhlIG1hcCB0b29sdGlwcyBvZiBhbGwgdGhlIGdlb21ldHJpZXMgb2YgYSBzb3VyY2VcclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZVRvb2x0aXBzT2ZPbFNvdXJjZShvbFNvdXJjZTogT2xWZWN0b3JTb3VyY2U8T2xHZW9tZXRyeT4pIHtcclxuICAgIG9sU291cmNlLmZvckVhY2hGZWF0dXJlKChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZVRvb2x0aXBzT2ZPbEdlb21ldHJ5KG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIGFueSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgdGhlIG1hcCB0b29sdGlwcyBvZiBhbGwgdGhlIGdlb21ldHJpZXMgb2YgYSBzb3VyY2VcclxuICAgKi9cclxuICBwcml2YXRlIHNob3dUb29sdGlwc09mT2xTb3VyY2Uob2xTb3VyY2U6IE9sVmVjdG9yU291cmNlPE9sR2VvbWV0cnk+KSB7XHJcbiAgICBvbFNvdXJjZS5mb3JFYWNoRmVhdHVyZSgob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcclxuICAgICAgdGhpcy5zaG93VG9vbHRpcHNPZk9sR2VvbWV0cnkob2xGZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgdGhlIG1hcCB0b29sdGlwc1xyXG4gICAqIEBwYXJhbSBvbERyYXdTb3VyY2UgT0wgdmVjdG9yIHNvdXJjZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2xlYXJUb29sdGlwc09mT2xTb3VyY2Uob2xTb3VyY2U6IE9sVmVjdG9yU291cmNlPE9sR2VvbWV0cnk+KSB7XHJcbiAgICBvbFNvdXJjZS5mb3JFYWNoRmVhdHVyZSgob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcclxuICAgICAgY29uc3Qgb2xHZW9tZXRyeSA9IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpO1xyXG4gICAgICBpZiAob2xHZW9tZXRyeSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhclRvb2x0aXBzT2ZPbEdlb21ldHJ5KG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIGFueSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGFuIE9MIHRvb2x0aXAgcHJvcGVydGllcyBhbmQgaW5uZXIgSFRNTCBhbmQgYWRkIGl0IHRvIHRoZSBtYXAgaWYgcG9zc2libGVcclxuICAgKiBAcGFyYW0gb2xUb29sdGlwIE9MIHRvb2x0aXBcclxuICAgKiBAcGFyYW0gbWVhc3VyZSBUaGUgbWVhc3VyZSB2YWxldSB0aSBkaXNwbGF5XHJcbiAgICogQHBhcmFtIG1lYXN1cmVVbml0IERpc3BsYXkgdG9vbHRpcCBtZWFzdXJlIGluIHRob3NlIHVuaXRzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVPbFRvb2x0aXAoXHJcbiAgICBvbFRvb2x0aXA6IE9sT3ZlcmxheSxcclxuICAgIG1lYXN1cmU6IG51bWJlcixcclxuICAgIHVuaXQ6IE1lYXN1cmVBcmVhVW5pdCB8IE1lYXN1cmVMZW5ndGhVbml0LFxyXG4gICAgdHlwZTogTWVhc3VyZVR5cGVcclxuICApIHtcclxuICAgIG9sVG9vbHRpcC5zZXRQcm9wZXJ0aWVzKHtfbWVhc3VyZTogbWVhc3VyZSwgX3VuaXQ6IHVuaXQsIF90eXBlOiB0eXBlfSwgdHJ1ZSk7XHJcbiAgICBvbFRvb2x0aXAuZ2V0RWxlbWVudCgpLmlubmVySFRNTCA9IHRoaXMuY29tcHV0ZVRvb2x0aXBJbm5lckhUTUwob2xUb29sdGlwKTtcclxuICAgIGlmICh0aGlzLnNob3VsZFNob3dUb29sdGlwKG9sVG9vbHRpcCkpIHtcclxuICAgICAgdGhpcy5tYXAub2wuYWRkT3ZlcmxheShvbFRvb2x0aXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcHV0ZSBhIHRvb2x0aXAncyBjb250ZW50XHJcbiAgICogQHBhcmFtIG9sVG9vbHRpcCBPTCBvdmVybGF5XHJcbiAgICogQHJldHVybnMgSW5uZXIgSFRNTFxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29tcHV0ZVRvb2x0aXBJbm5lckhUTUwob2xUb29sdGlwOiBPbE92ZXJsYXkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IG9sVG9vbHRpcC5nZXRQcm9wZXJ0aWVzKCkgYXMgYW55O1xyXG4gICAgcmV0dXJuIGZvcm1hdE1lYXN1cmUocHJvcGVydGllcy5fbWVhc3VyZSwge1xyXG4gICAgICBkZWNpbWFsOiAxLFxyXG4gICAgICB1bml0OiBwcm9wZXJ0aWVzLl91bml0LFxyXG4gICAgICB1bml0QWJicjogdHJ1ZSxcclxuICAgICAgbG9jYWxlOiAnZnInXHJcbiAgICB9LCB0aGlzLmxhbmd1YWdlU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgdG9vbHRpcCBzaG91bGQgYmUgc2hvd25lZCBiYXNlZCBvbiB0aGUgbGVuZ3RoXHJcbiAgICogb2YgdGhlIHNlZ21lbnQgaXQgaXMgYm91bmQgdG8uXHJcbiAgICogQHBhcmFtIG9sVG9vbHRpcCBPTCBvdmVybGF5XHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdG9vbHRpcCBzaG91bGQgYmUgc2hvd25cclxuICAgKi9cclxuICBwcml2YXRlIHNob3VsZFNob3dUb29sdGlwKG9sVG9vbHRpcDogT2xPdmVybGF5KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zaG93VG9vbHRpcHMgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gb2xUb29sdGlwLmdldFByb3BlcnRpZXMoKSBhcyBhbnk7XHJcbiAgICBjb25zdCBtZWFzdXJlID0gcHJvcGVydGllcy5fbWVhc3VyZTtcclxuICAgIGlmIChtZWFzdXJlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9wZXJ0aWVzLl91bml0ID09PSBNZWFzdXJlVHlwZS5MZW5ndGgpIHtcclxuICAgICAgY29uc3QgbWluU2VnbWVudExlbmd0aCA9IG1ldGVyc1RvVW5pdCh0aGlzLm1pblNlZ21lbnRMZW5ndGgsIHByb3BlcnRpZXMuX3VuaXQpIHx8IDA7XHJcbiAgICAgIHJldHVybiBtZWFzdXJlID4gTWF0aC5tYXgobWluU2VnbWVudExlbmd0aCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1lYXN1cmUtdHlwZS10b2dnbGUgbWF0LXR5cG9ncmFwaHlcIj5cclxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cFxyXG4gICAgICBbdmFsdWVdPVwiYWN0aXZlTWVhc3VyZVR5cGVcIlxyXG4gICAgICAoY2hhbmdlKT1cIm9uTWVhc3VyZVR5cGVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiPlxyXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIm1lYXN1cmVUeXBlLkxlbmd0aFwiPlxyXG4gICAgICAgIHt7KCdpZ28uZ2VvLm1lYXN1cmUuJyArIG1lYXN1cmVUeXBlLkxlbmd0aCkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIm1lYXN1cmVUeXBlLkFyZWFcIj5cclxuICAgICAgICB7eygnaWdvLmdlby5tZWFzdXJlLicgKyBtZWFzdXJlVHlwZS5BcmVhKSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwibWVhc3VyZS1vcHRpb25zIG1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICBbZGlzYWJsZWRdPVwiZHJhd0NvbnRyb2xJc0Rpc2FibGVkXCJcclxuICAgICAgW2NoZWNrZWRdPVwiZHJhd0NvbnRyb2xJc0FjdGl2ZVwiXHJcbiAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcclxuICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZURyYXdDb250cm9sKCRldmVudC5jaGVja2VkKVwiPlxyXG4gICAgICB7eydpZ28uZ2VvLm1lYXN1cmUudG9nZ2xlQWN0aXZlJyB8IHRyYW5zbGF0ZX19XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcblxyXG4gICAgPG1hdC1kaXZpZGVyICpuZ0lmPVwiKGhhc0xpbmUkIHwgYXN5bmMpXCI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSAqbmdJZj1cIihoYXNMaW5lJCB8IGFzeW5jKVwiXHJcbiAgICAgIFtjaGVja2VkXT1cImRpc3BsYXlMaW5lc1wiXHJcbiAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcclxuICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZURpc3BsYXlMaW5lcygkZXZlbnQuY2hlY2tlZClcIj5cclxuICAgICAge3snaWdvLmdlby5tZWFzdXJlLnRvZ2dsZURpc3BsYXlMaW5lcycgfCB0cmFuc2xhdGV9fVxyXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG5cclxuICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cIihoYXNMaW5lJCB8IGFzeW5jKSB8fCAoaGFzQXJlYSQgfCBhc3luYylcIj48L21hdC1kaXZpZGVyPlxyXG5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlICpuZ0lmPVwiKGhhc0FyZWEkIHwgYXN5bmMpXCJcclxuICAgICAgW2NoZWNrZWRdPVwiZGlzcGxheURpc3RhbmNlXCJcclxuICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIlxyXG4gICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlRGlzcGxheURpc3RhbmNlKCRldmVudC5jaGVja2VkKVwiPlxyXG4gICAgICB7eydpZ28uZ2VvLm1lYXN1cmUudG9nZ2xlRGlzcGxheURpc3RhbmNlJyB8IHRyYW5zbGF0ZX19XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcblxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGUgKm5nSWY9XCIoaGFzQXJlYSQgfCBhc3luYylcIlxyXG4gICAgICBbY2hlY2tlZF09XCJkaXNwbGF5QXJlYXNcIlxyXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVEaXNwbGF5QXJlYXMoJGV2ZW50LmNoZWNrZWQpXCI+XHJcbiAgICAgIHt7J2lnby5nZW8ubWVhc3VyZS50b2dnbGVEaXNwbGF5QXJlYXMnIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuXHJcbiAgICA8bWF0LWRpdmlkZXIgKm5nSWY9XCIoaGFzQXJlYSQgfCBhc3luYylcIj48L21hdC1kaXZpZGVyPlxyXG5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgIFtjaGVja2VkXT1cIm1lYXN1cmVVbml0c0F1dG9cIlxyXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVNZWFzdXJlVW5pdHNBdXRvKCRldmVudC5jaGVja2VkKVwiPlxyXG4gICAgICB7eydpZ28uZ2VvLm1lYXN1cmUudG9nZ2xlQXV0b1VuaXRzJyB8IHRyYW5zbGF0ZX19XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZWFzdXJlJCB8IGFzeW5jIGFzIG1lYXN1cmVcIj5cclxuICAgIDxpZ28tbWVhc3VyZXItaXRlbSAqbmdJZj1cImFjdGl2ZU1lYXN1cmVUeXBlID09PSBtZWFzdXJlVHlwZS5MZW5ndGggfHwgYWN0aXZlTWVhc3VyZVR5cGUgPT09IG1lYXN1cmVUeXBlLkFyZWFcIlxyXG4gICAgICBbbWVhc3VyZVR5cGVdPVwibWVhc3VyZVR5cGUuTGVuZ3RoXCJcclxuICAgICAgW21lYXN1cmVVbml0XT1cIm1lYXN1cmVMZW5ndGhVbml0Lk1ldGVyc1wiXHJcbiAgICAgIFttZWFzdXJlXT1cIm1lYXN1cmUubGVuZ3RoXCJcclxuICAgICAgW2F1dG9dPVwibWVhc3VyZVVuaXRzQXV0b1wiXHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCIoYWN0aXZlTWVhc3VyZVR5cGUgPT09IG1lYXN1cmVUeXBlLkFyZWEgPyAnaWdvLmdlby5tZWFzdXJlLnBlcmltZXRlcicgOiAnaWdvLmdlby5tZWFzdXJlLmxlbmd0aCcpIHwgdHJhbnNsYXRlXCJcclxuICAgICAgKG1lYXN1cmVVbml0Q2hhbmdlKT1cIm9uTGVuZ3RoVW5pdENoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L2lnby1tZWFzdXJlci1pdGVtPlxyXG5cclxuICAgIDxpZ28tbWVhc3VyZXItaXRlbSAqbmdJZj1cImFjdGl2ZU1lYXN1cmVUeXBlID09PSBtZWFzdXJlVHlwZS5BcmVhXCJcclxuICAgICAgW21lYXN1cmVUeXBlXT1cIm1lYXN1cmVUeXBlLkFyZWFcIlxyXG4gICAgICBbbWVhc3VyZVVuaXRdPVwibWVhc3VyZUFyZWFVbml0LlNxdWFyZU1ldGVyc1wiXHJcbiAgICAgIFttZWFzdXJlXT1cIm1lYXN1cmUuYXJlYVwiXHJcbiAgICAgIFthdXRvXT1cIm1lYXN1cmVVbml0c0F1dG9cIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8ubWVhc3VyZS5hcmVhJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIChtZWFzdXJlVW5pdENoYW5nZSk9XCJvbkFyZWFVbml0Q2hhbmdlKCRldmVudClcIj5cclxuICAgIDwvaWdvLW1lYXN1cmVyLWl0ZW0+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxtYXQtZGl2aWRlciAqbmdJZj1cIihoYXNMaW5lJCB8IGFzeW5jKSB8fCAoaGFzQXJlYSQgfCBhc3luYylcIj48L21hdC1kaXZpZGVyPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwibWVhc3VyZS1zdG9yZS1idXR0b25zXCI+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiKGhhc0xpbmUkIHwgYXN5bmMpIHx8IChoYXNBcmVhJCB8IGFzeW5jKVwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5tZWFzdXJlLmFjdGlvbmJhci5jYWxjdWxhdGUudG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiKHNlbGVjdGVkRmVhdHVyZXMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiXHJcbiAgICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgKGNsaWNrKT1cIm9uQ2FsY3VsYXRlQ2xpY2soKVwiPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNhbGN1bGF0b3JcIj48L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cIihoYXNMaW5lJCB8IGFzeW5jKSB8fCAoaGFzQXJlYSQgfCBhc3luYylcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubWVhc3VyZS5hY3Rpb25iYXIuZGVsZXRlLnRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIihzZWxlY3RlZEZlYXR1cmVzJCB8IGFzeW5jKS5sZW5ndGggPT09IDBcIlxyXG4gICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICAoY2xpY2spPVwib25EZWxldGVDbGljaygpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZGVsZXRlXCI+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS1idXR0b25cclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLm1lYXN1cmUuYWN0aW9uYmFyLm1vZGlmeS50b29sdGlwJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIoc2VsZWN0ZWRGZWF0dXJlcyQgfCBhc3luYykubGVuZ3RoICE9PSAxXCJcclxuICAgICAgKGNsaWNrKT1cIm9uTW9kaWZ5Q2xpY2soKVwiPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImVkaXRcIj48L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24tLT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGlnby1lbnRpdHktdGFibGVcclxuICAgICN0YWJsZVxyXG4gICAgY2xhc3M9XCJ0YWJsZS1jb21wYWN0XCJcclxuICAgIFtzdG9yZV09XCJzdG9yZVwiXHJcbiAgICBbdGVtcGxhdGVdPVwidGFibGVUZW1wbGF0ZVwiPlxyXG4gIDwvaWdvLWVudGl0eS10YWJsZT5cclxuPC9kaXY+XHJcbiJdfQ==
|