@igo2/geo 1.14.0 → 1.14.2
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/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +7 -5
- package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +59 -21
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +7 -7
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +1 -1
- package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +1 -1
- package/esm2020/lib/catalog/catalog.module.mjs +1 -1
- package/esm2020/lib/catalog/index.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.enum.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.service.mjs +1 -1
- package/esm2020/lib/catalog/shared/index.mjs +1 -1
- package/esm2020/lib/datasource/datasource.module.mjs +1 -1
- package/esm2020/lib/datasource/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/capabilities.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasource.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/data.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options-api.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options.service.mjs +1 -1
- package/esm2020/lib/datasource/utils/esri-style-generator.mjs +1 -1
- package/esm2020/lib/datasource/utils/index.mjs +1 -1
- package/esm2020/lib/datasource/utils/tilegrid.mjs +1 -1
- package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +2 -2
- package/esm2020/lib/directions/directions-buttons/index.mjs +1 -1
- package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +2 -2
- package/esm2020/lib/directions/directions-inputs/index.mjs +1 -1
- package/esm2020/lib/directions/directions-results/directions-results.component.mjs +2 -2
- package/esm2020/lib/directions/directions-results/index.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/directions-source.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/index.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
- package/esm2020/lib/directions/directions.component.mjs +2 -2
- package/esm2020/lib/directions/directions.module.mjs +1 -1
- package/esm2020/lib/directions/index.mjs +1 -1
- package/esm2020/lib/directions/shared/directions-source.service.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.enum.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.service.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.utils.mjs +1 -1
- package/esm2020/lib/directions/shared/index.mjs +1 -1
- package/esm2020/lib/directions/shared/store.mjs +1 -1
- package/esm2020/lib/download/download-button/download-button.component.mjs +2 -2
- package/esm2020/lib/download/download-button/index.mjs +1 -1
- package/esm2020/lib/download/download.module.mjs +1 -1
- package/esm2020/lib/download/index.mjs +1 -1
- package/esm2020/lib/download/shared/download.interface.mjs +1 -1
- package/esm2020/lib/download/shared/download.service.mjs +1 -1
- package/esm2020/lib/download/shared/index.mjs +1 -1
- package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +2 -2
- package/esm2020/lib/draw/draw/draw-popup.component.mjs +2 -2
- package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
- package/esm2020/lib/draw/draw/draw.component.mjs +4 -2
- package/esm2020/lib/draw/draw/draw.module.mjs +1 -1
- package/esm2020/lib/draw/drawingTool.module.mjs +1 -1
- package/esm2020/lib/draw/index.mjs +1 -1
- package/esm2020/lib/draw/shared/draw-icon.service.mjs +1 -1
- package/esm2020/lib/draw/shared/draw-style.service.mjs +1 -1
- package/esm2020/lib/draw/shared/draw.enum.mjs +1 -1
- package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
- package/esm2020/lib/draw/shared/draw.utils.mjs +1 -1
- package/esm2020/lib/draw/shared/index.mjs +1 -1
- package/esm2020/lib/feature/feature-details/feature-details.component.mjs +2 -2
- package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +1 -1
- package/esm2020/lib/feature/feature-details/feature-details.module.mjs +1 -1
- package/esm2020/lib/feature/feature-form/feature-form.component.mjs +2 -2
- package/esm2020/lib/feature/feature-form/feature-form.module.mjs +1 -1
- package/esm2020/lib/feature/feature.module.mjs +1 -1
- package/esm2020/lib/feature/index.mjs +1 -1
- package/esm2020/lib/feature/shared/feature.enums.mjs +1 -1
- package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
- package/esm2020/lib/feature/shared/feature.utils.mjs +1 -1
- package/esm2020/lib/feature/shared/index.mjs +1 -1
- package/esm2020/lib/feature/shared/store.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/index.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/loading.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/selection.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies.utils.mjs +1 -1
- package/esm2020/lib/filter/filter.module.mjs +1 -1
- package/esm2020/lib/filter/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-button/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filter-form/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filter-selection/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filter-time/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +43 -16
- package/esm2020/lib/filter/ogc-filterable-form/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filterable-item/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filterable-list/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +2 -2
- package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
- package/esm2020/lib/filter/shared/index.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.service.mjs +1 -1
- package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +1 -1
- package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/spatial-filter.service.mjs +1 -1
- package/esm2020/lib/filter/shared/time-filter.enum.mjs +1 -1
- package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/time-filter.service.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +2 -2
- package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +2 -2
- package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-button/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-form/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-item/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-list/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
- package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +2 -2
- package/esm2020/lib/geo.module.mjs +1 -1
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +1 -1
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +1 -1
- package/esm2020/lib/geometry/geometry.module.mjs +1 -1
- package/esm2020/lib/geometry/index.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/draw.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/index.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/modify.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/slice.mjs +1 -1
- package/esm2020/lib/geometry/shared/geometry.errors.mjs +1 -1
- package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
- package/esm2020/lib/geometry/shared/geometry.utils.mjs +1 -1
- package/esm2020/lib/geometry/shared/index.mjs +1 -1
- package/esm2020/lib/import-export/export-button/export-button.component.mjs +2 -2
- package/esm2020/lib/import-export/export-button/index.mjs +1 -1
- package/esm2020/lib/import-export/import-export/import-export.component.mjs +2 -2
- package/esm2020/lib/import-export/import-export/index.mjs +1 -1
- package/esm2020/lib/import-export/import-export.module.mjs +1 -1
- package/esm2020/lib/import-export/index.mjs +1 -1
- package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.errors.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.service.mjs +3 -3
- package/esm2020/lib/import-export/shared/export.type.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.utils.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.errors.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.service.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.utils.mjs +1 -1
- package/esm2020/lib/import-export/shared/index.mjs +1 -1
- package/esm2020/lib/import-export/style-list/index.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.interface.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.module.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.provider.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.service.mjs +1 -1
- package/esm2020/lib/layer/index.mjs +1 -1
- package/esm2020/lib/layer/layer-item/index.mjs +1 -1
- package/esm2020/lib/layer/layer-item/layer-item.component.mjs +2 -2
- package/esm2020/lib/layer/layer-legend/index.mjs +1 -1
- package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +2 -2
- package/esm2020/lib/layer/layer-legend-item/index.mjs +1 -1
- package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +2 -2
- package/esm2020/lib/layer/layer-legend-list/index.mjs +1 -1
- package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +1 -1
- package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +2 -2
- package/esm2020/lib/layer/layer-list/index.mjs +1 -1
- package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +1 -1
- package/esm2020/lib/layer/layer-list/layer-list.component.mjs +2 -2
- package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/index.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +2 -2
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
- package/esm2020/lib/layer/layer.module.mjs +1 -1
- package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
- package/esm2020/lib/layer/shared/index.mjs +1 -1
- package/esm2020/lib/layer/shared/layer.enums.mjs +1 -1
- package/esm2020/lib/layer/shared/layer.service.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/image-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/index.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/tile-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vector-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/style.service.mjs +1 -1
- package/esm2020/lib/layer/shared/vector-style.interface.mjs +1 -1
- package/esm2020/lib/layer/style-modal/index.mjs +1 -1
- package/esm2020/lib/layer/style-modal/style-modal.component.mjs +2 -2
- package/esm2020/lib/layer/track-feature-button/index.mjs +1 -1
- package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +2 -2
- package/esm2020/lib/layer/utils/image-watcher.mjs +1 -1
- package/esm2020/lib/layer/utils/index.mjs +1 -1
- package/esm2020/lib/layer/utils/layer.utils.mjs +1 -1
- package/esm2020/lib/layer/utils/outputLegend.mjs +1 -1
- package/esm2020/lib/layer/utils/tile-watcher.mjs +1 -1
- package/esm2020/lib/layer/utils/vector-watcher.mjs +1 -1
- package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
- package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +2 -2
- package/esm2020/lib/map/baselayers-switcher/index.mjs +1 -1
- package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +17 -8
- package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +2 -2
- package/esm2020/lib/map/geolocate-button/index.mjs +1 -1
- package/esm2020/lib/map/index.mjs +1 -1
- package/esm2020/lib/map/info-section/index.mjs +1 -1
- package/esm2020/lib/map/info-section/info-section.component.mjs +2 -2
- package/esm2020/lib/map/map-browser/index.mjs +1 -1
- package/esm2020/lib/map/map-browser/map-browser.component.mjs +2 -2
- package/esm2020/lib/map/map-center/index.mjs +1 -1
- package/esm2020/lib/map/map-center/map-center.component.mjs +2 -2
- package/esm2020/lib/map/map.module.mjs +1 -1
- package/esm2020/lib/map/menu-button/index.mjs +1 -1
- package/esm2020/lib/map/menu-button/menu-button.component.mjs +2 -2
- package/esm2020/lib/map/offline-button/index.mjs +1 -1
- package/esm2020/lib/map/offline-button/offline-button.component.mjs +2 -2
- package/esm2020/lib/map/rotation-button/index.mjs +1 -1
- package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +2 -2
- package/esm2020/lib/map/shared/controllers/controller.mjs +1 -1
- package/esm2020/lib/map/shared/controllers/geolocation.mjs +1 -1
- package/esm2020/lib/map/shared/controllers/index.mjs +1 -1
- package/esm2020/lib/map/shared/controllers/view.mjs +1 -1
- package/esm2020/lib/map/shared/hover-feature.directive.mjs +1 -1
- package/esm2020/lib/map/shared/index.mjs +1 -1
- package/esm2020/lib/map/shared/linkedLayers.utils.mjs +3 -3
- package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +1 -1
- package/esm2020/lib/map/shared/map.enums.mjs +1 -1
- package/esm2020/lib/map/shared/map.interface.mjs +1 -1
- package/esm2020/lib/map/shared/map.mjs +1 -1
- package/esm2020/lib/map/shared/map.service.mjs +1 -1
- package/esm2020/lib/map/shared/map.utils.mjs +2 -1
- package/esm2020/lib/map/shared/mapOffline.directive.mjs +7 -7
- package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
- package/esm2020/lib/map/shared/projection.service.mjs +1 -1
- package/esm2020/lib/map/shared/projection.utils.mjs +1 -1
- package/esm2020/lib/map/swipe-control/index.mjs +1 -1
- package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +2 -2
- package/esm2020/lib/map/utils/layer-watcher.mjs +1 -1
- package/esm2020/lib/map/wake-lock-button/index.mjs +1 -1
- package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +2 -2
- package/esm2020/lib/map/zoom-button/index.mjs +1 -1
- package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +2 -2
- package/esm2020/lib/measure/index.mjs +1 -1
- package/esm2020/lib/measure/measure.module.mjs +1 -1
- package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +1 -1
- package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +2 -2
- package/esm2020/lib/measure/measurer/measurer-item.component.mjs +2 -2
- package/esm2020/lib/measure/measurer/measurer.component.mjs +2 -2
- package/esm2020/lib/measure/measurer/measurer.module.mjs +1 -1
- package/esm2020/lib/measure/shared/index.mjs +1 -1
- package/esm2020/lib/measure/shared/measure.enum.mjs +1 -1
- package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
- package/esm2020/lib/measure/shared/measure.utils.mjs +1 -1
- package/esm2020/lib/metadata/index.mjs +1 -1
- package/esm2020/lib/metadata/metadata-button/index.mjs +1 -1
- package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
- package/esm2020/lib/metadata/metadata.module.mjs +1 -1
- package/esm2020/lib/metadata/shared/index.mjs +1 -1
- package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
- package/esm2020/lib/metadata/shared/metadata.service.mjs +1 -1
- package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.service.mjs +1 -1
- package/esm2020/lib/offline/geoDB/index.mjs +1 -1
- package/esm2020/lib/offline/index.mjs +1 -1
- package/esm2020/lib/offline/shared/geo-network.service.mjs +1 -1
- package/esm2020/lib/offline/shared/index.mjs +1 -1
- package/esm2020/lib/overlay/index.mjs +1 -1
- package/esm2020/lib/overlay/overlay.module.mjs +1 -1
- package/esm2020/lib/overlay/shared/index.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.directive.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.enum.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.service.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.utils.mjs +1 -1
- package/esm2020/lib/print/index.mjs +1 -1
- package/esm2020/lib/print/print/print.component.mjs +16 -13
- package/esm2020/lib/print/print-form/index.mjs +1 -1
- package/esm2020/lib/print/print-form/print-form.component.mjs +46 -23
- package/esm2020/lib/print/print.module.mjs +1 -1
- package/esm2020/lib/print/shared/geopdf.mjs +3 -3
- package/esm2020/lib/print/shared/index.mjs +1 -1
- package/esm2020/lib/print/shared/print.interface.mjs +1 -1
- package/esm2020/lib/print/shared/print.service.mjs +96 -23
- package/esm2020/lib/print/shared/print.type.mjs +1 -1
- package/esm2020/lib/query/index.mjs +1 -1
- package/esm2020/lib/query/query.module.mjs +1 -1
- package/esm2020/lib/query/shared/index.mjs +1 -1
- package/esm2020/lib/query/shared/query-search-source.mjs +1 -1
- package/esm2020/lib/query/shared/query-search-source.providers.mjs +1 -1
- package/esm2020/lib/query/shared/query.directive.mjs +1 -1
- package/esm2020/lib/query/shared/query.enums.mjs +1 -1
- package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
- package/esm2020/lib/query/shared/query.service.mjs +144 -27
- package/esm2020/lib/query/shared/query.utils.mjs +1 -1
- package/esm2020/lib/search/index.mjs +1 -1
- package/esm2020/lib/search/search-bar/search-bar.component.mjs +54 -33
- package/esm2020/lib/search/search-bar/search-bar.module.mjs +1 -1
- package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +1 -1
- package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +118 -0
- package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +207 -29
- package/esm2020/lib/search/search-results/search-results-item.component.mjs +3 -3
- package/esm2020/lib/search/search-results/search-results.component.mjs +23 -14
- package/esm2020/lib/search/search-results/search-results.module.mjs +32 -5
- package/esm2020/lib/search/search-selector/search-selector.component.mjs +2 -2
- package/esm2020/lib/search/search-selector/search-selector.module.mjs +1 -1
- package/esm2020/lib/search/search-settings/search-settings.component.mjs +33 -9
- package/esm2020/lib/search/search-settings/search-settings.module.mjs +1 -1
- package/esm2020/lib/search/search.module.mjs +1 -1
- package/esm2020/lib/search/shared/index.mjs +1 -1
- package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +1 -1
- package/esm2020/lib/search/shared/search-source-service.providers.mjs +1 -1
- package/esm2020/lib/search/shared/search-source.service.mjs +1 -1
- package/esm2020/lib/search/shared/search.enums.mjs +1 -1
- package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/search.service.mjs +10 -7
- package/esm2020/lib/search/shared/search.utils.mjs +2 -1
- package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/coordinates.mjs +17 -11
- package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/icherche.mjs +76 -64
- package/esm2020/lib/search/shared/sources/icherche.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/ilayer.mjs +4 -4
- package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/index.mjs +1 -1
- package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/nominatim.mjs +2 -2
- package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/source.mjs +1 -1
- package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/storedqueries.mjs +1 -1
- package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
- package/esm2020/lib/toast/index.mjs +1 -1
- package/esm2020/lib/toast/toast.component.mjs +2 -2
- package/esm2020/lib/toast/toast.module.mjs +1 -1
- package/esm2020/lib/utils/commonVectorStyle.interface.mjs +1 -1
- package/esm2020/lib/utils/commonVectorStyle.mjs +1 -1
- package/esm2020/lib/utils/googleLinks.mjs +1 -1
- package/esm2020/lib/utils/id-generator.mjs +1 -1
- package/esm2020/lib/utils/index.mjs +1 -1
- package/esm2020/lib/utils/osmLinks.mjs +1 -1
- package/esm2020/lib/wkt/index.mjs +1 -1
- package/esm2020/lib/wkt/shared/index.mjs +1 -1
- package/esm2020/lib/wkt/shared/wkt.service.mjs +15 -15
- package/esm2020/lib/wkt/wkt.module.mjs +1 -1
- package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +2 -2
- package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +1 -1
- package/esm2020/lib/workspace/confirmation-popup/index.mjs +1 -1
- package/esm2020/lib/workspace/index.mjs +1 -1
- package/esm2020/lib/workspace/shared/edition-workspace.mjs +1 -1
- package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +20 -9
- package/esm2020/lib/workspace/shared/feature-workspace.mjs +1 -1
- package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +1 -1
- package/esm2020/lib/workspace/shared/index.mjs +1 -1
- package/esm2020/lib/workspace/shared/wfs-workspace.mjs +1 -1
- package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +1 -1
- package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +1 -1
- package/esm2020/lib/workspace/shared/workspace.utils.mjs +1 -1
- package/esm2020/lib/workspace/widgets/index.mjs +1 -1
- package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
- package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +1 -1
- package/esm2020/lib/workspace/widgets/widgets.mjs +1 -1
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +1 -1
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
- package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
- package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +1 -1
- package/esm2020/lib/workspace/workspace.module.mjs +1 -1
- package/esm2020/public_api.mjs +1 -1
- package/fesm2015/igo2-geo.mjs +1253 -559
- package/fesm2015/igo2-geo.mjs.map +1 -1
- package/fesm2020/igo2-geo.mjs +1228 -558
- package/fesm2020/igo2-geo.mjs.map +1 -1
- package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +3 -1
- package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +9 -2
- package/lib/datasource/shared/datasources/datasource.interface.d.ts +1 -0
- package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +1 -0
- package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +3 -1
- package/lib/import-export/shared/export.service.d.ts +1 -1
- package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +7 -4
- package/lib/map/shared/map.utils.d.ts +1 -0
- package/lib/print/shared/print.service.d.ts +10 -1
- package/lib/query/shared/query.interfaces.d.ts +8 -1
- package/lib/query/shared/query.service.d.ts +5 -3
- package/lib/search/search-bar/search-bar.component.d.ts +19 -9
- package/lib/search/search-results/save-feature-dialog.component.d.ts +32 -0
- package/lib/search/search-results/search-results-add-button.component.d.ts +20 -2
- package/lib/search/search-results/search-results-item.component.d.ts +0 -1
- package/lib/search/search-results/search-results.component.d.ts +4 -1
- package/lib/search/search-results/search-results.module.d.ts +17 -10
- package/lib/search/search-settings/search-settings.component.d.ts +7 -1
- package/lib/search/shared/search.service.d.ts +3 -1
- package/lib/search/shared/sources/coordinates.d.ts +1 -1
- package/lib/search/shared/sources/source.d.ts +1 -1
- package/lib/workspace/shared/edition-workspace.service.d.ts +4 -0
- package/ngcc.config.js +3 -3
- package/package.json +4 -4
- package/style/geo.theming.scss +12 -12
|
@@ -243,7 +243,7 @@ function OgcFilterTimeComponent_div_3_div_2_div_13_Template(rf, ctx) { if (rf &
|
|
|
243
243
|
i0.ɵɵadvance(2);
|
|
244
244
|
i0.ɵɵproperty("for", _r35)("disabled", ctx_r25.filterStateDisable);
|
|
245
245
|
i0.ɵɵadvance(1);
|
|
246
|
-
i0.ɵɵproperty("matDatepicker", _r35)("placeholder", i0.ɵɵpipeBind1(5, 14, "igo.geo.timeFilter.endDate"))("matDatepickerFilter", ctx_r25.
|
|
246
|
+
i0.ɵɵproperty("matDatepicker", _r35)("placeholder", i0.ɵɵpipeBind1(5, 14, "igo.geo.timeFilter.endDate"))("matDatepickerFilter", ctx_r25.filterEndFunction)("value", ctx_r25.endValue ? ctx_r25.endValue : ctx_r25.handleDate(ctx_r25.datasource.options.maxDate))("min", ctx_r25.beginValue ? ctx_r25.beginValue : ctx_r25.handleDate(ctx_r25.datasource.options.minDate))("max", ctx_r25.handleDate(ctx_r25.datasource.options.maxDate))("disabled", ctx_r25.filterStateDisable);
|
|
247
247
|
i0.ɵɵattribute("disabled", !ctx_r25.currentFilter.active);
|
|
248
248
|
i0.ɵɵadvance(4);
|
|
249
249
|
i0.ɵɵproperty("startView", ctx_r25.calendarView())("startAt", ctx_r25.endValue);
|
|
@@ -284,7 +284,7 @@ function OgcFilterTimeComponent_div_3_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
284
284
|
i0.ɵɵadvance(3);
|
|
285
285
|
i0.ɵɵproperty("for", _r22)("disabled", ctx_r9.filterStateDisable);
|
|
286
286
|
i0.ɵɵadvance(1);
|
|
287
|
-
i0.ɵɵproperty("matDatepicker", _r22)("placeholder", i0.ɵɵpipeBind1(6, 20, "igo.geo.timeFilter.startDate"))("matDatepickerFilter", ctx_r9.
|
|
287
|
+
i0.ɵɵproperty("matDatepicker", _r22)("placeholder", i0.ɵɵpipeBind1(6, 20, "igo.geo.timeFilter.startDate"))("matDatepickerFilter", ctx_r9.filterBeginFunction)("value", ctx_r9.beginValue ? ctx_r9.beginValue : ctx_r9.handleDate(ctx_r9.datasource.options.minDate))("min", ctx_r9.handleDate(ctx_r9.datasource.options.minDate))("max", ctx_r9.endValue && !ctx_r9.restrictedToStep() ? ctx_r9.endValue : ctx_r9.handleDate(ctx_r9.datasource.options.maxDate))("disabled", ctx_r9.filterStateDisable);
|
|
288
288
|
i0.ɵɵattribute("disabled", !ctx_r9.currentFilter.active);
|
|
289
289
|
i0.ɵɵadvance(4);
|
|
290
290
|
i0.ɵɵproperty("startView", ctx_r9.calendarView())("startAt", ctx_r9.beginValue);
|
|
@@ -377,6 +377,8 @@ export class OgcFilterTimeComponent {
|
|
|
377
377
|
this.updateHoursMinutesArray();
|
|
378
378
|
// update value for now value
|
|
379
379
|
this.updateValues();
|
|
380
|
+
this.dateFilter(this.filterBeginFunction, 'begin');
|
|
381
|
+
this.dateFilter(this.filterEndFunction, 'end');
|
|
380
382
|
}
|
|
381
383
|
parseFilter(filter) {
|
|
382
384
|
if (!filter) {
|
|
@@ -537,10 +539,12 @@ export class OgcFilterTimeComponent {
|
|
|
537
539
|
if (type === 'end') {
|
|
538
540
|
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
539
541
|
const monthDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'years', true);
|
|
540
|
-
|
|
542
|
+
this.filterEndFunction = (monthDiffPlus1 % moment.duration(this.step).asYears()) === 0;
|
|
543
|
+
return;
|
|
541
544
|
}
|
|
542
545
|
else if (type === 'begin') {
|
|
543
|
-
|
|
546
|
+
this.filterBeginFunction = (monthDiff % moment.duration(this.step).asYears()) === 0;
|
|
547
|
+
return;
|
|
544
548
|
}
|
|
545
549
|
}
|
|
546
550
|
else if (this.ogcFilterTimeService.stepIsMonthDuration(this.step)) {
|
|
@@ -548,10 +552,12 @@ export class OgcFilterTimeComponent {
|
|
|
548
552
|
if (type === 'end') {
|
|
549
553
|
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
550
554
|
const monthDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'months', true);
|
|
551
|
-
|
|
555
|
+
this.filterEndFunction = (monthDiffPlus1 % moment.duration(this.step).asMonths()) === 0;
|
|
556
|
+
return;
|
|
552
557
|
}
|
|
553
558
|
else if (type === 'begin') {
|
|
554
|
-
|
|
559
|
+
this.filterBeginFunction = (monthDiff % moment.duration(this.step).asMonths()) === 0;
|
|
560
|
+
return;
|
|
555
561
|
}
|
|
556
562
|
}
|
|
557
563
|
else if (this.ogcFilterTimeService.stepIsWeekDuration(this.step)) {
|
|
@@ -559,10 +565,12 @@ export class OgcFilterTimeComponent {
|
|
|
559
565
|
if (type === 'end') {
|
|
560
566
|
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
561
567
|
const weekDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'weeks', true);
|
|
562
|
-
|
|
568
|
+
this.filterEndFunction = (weekDiffPlus1 % moment.duration(this.step).asWeeks()) === 0;
|
|
569
|
+
return;
|
|
563
570
|
}
|
|
564
571
|
else if (type === 'begin') {
|
|
565
|
-
|
|
572
|
+
this.filterBeginFunction = (weekDiff % moment.duration(this.step).asWeeks()) === 0;
|
|
573
|
+
return;
|
|
566
574
|
}
|
|
567
575
|
}
|
|
568
576
|
else if (this.ogcFilterTimeService.stepIsDayDuration(this.step)) {
|
|
@@ -571,21 +579,40 @@ export class OgcFilterTimeComponent {
|
|
|
571
579
|
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
572
580
|
const dayDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'days', true);
|
|
573
581
|
const _mod = (dayDiffPlus1 % moment.duration(this.step).asDays());
|
|
574
|
-
|
|
582
|
+
this.filterEndFunction = (_mod < 0.0000001 && _mod > -0.0000001) || _mod === 0; // 1 millisecond = 1.1574074074074076e-8
|
|
583
|
+
return;
|
|
575
584
|
}
|
|
576
585
|
else if (type === 'begin') {
|
|
577
586
|
const _mod = ((dayDiff % moment.duration(this.step).asDays()) + 1);
|
|
578
|
-
|
|
587
|
+
this.filterBeginFunction = (_mod < 0.0000001 && _mod > -0.0000001 && _mod !== 0) || _mod === 1; // 1 millisecond = 1.1574074074074076e-8
|
|
588
|
+
return;
|
|
579
589
|
}
|
|
580
590
|
}
|
|
581
591
|
else if (this.ogcFilterTimeService.stepIsHourDuration(this.step)) {
|
|
582
|
-
|
|
583
|
-
|
|
592
|
+
if (type === 'end') {
|
|
593
|
+
const hourDiff = moment(dateValue).diff(moment(this.handleMin()), 'hours', true);
|
|
594
|
+
this.filterEndFunction = (hourDiff % moment.duration(this.step).asHours()) === 0;
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
else if (type === 'begin') {
|
|
598
|
+
const hourDiff = moment(dateValue).diff(moment(this.handleMin()), 'hours', true);
|
|
599
|
+
this.filterBeginFunction = (hourDiff % moment.duration(this.step).asHours()) === 0;
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
584
602
|
}
|
|
585
603
|
else if (this.ogcFilterTimeService.stepIsMinuteDuration(this.step)) {
|
|
586
|
-
|
|
604
|
+
if (type === 'end') {
|
|
605
|
+
this.filterEndFunction = true;
|
|
606
|
+
return;
|
|
607
|
+
}
|
|
608
|
+
else if (type === 'begin') {
|
|
609
|
+
this.filterBeginFunction = true;
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
587
612
|
}
|
|
588
|
-
|
|
613
|
+
this.filterEndFunction = diff % this.stepMilliseconds === 0;
|
|
614
|
+
this.filterBeginFunction = diff % this.stepMilliseconds === 0;
|
|
615
|
+
return;
|
|
589
616
|
}
|
|
590
617
|
getDateTime(date, pos) {
|
|
591
618
|
const valuetmp = new Date(date);
|
|
@@ -848,7 +875,7 @@ OgcFilterTimeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OgcF
|
|
|
848
875
|
} }, styles: ["input{text-align:center!important;margin:auto 5px!important}.slider-container[_ngcontent-%COMP%]{text-align:center}.datetime-input[_ngcontent-%COMP%]{display:inline-block;width:100px;margin:10px 0 5px 10px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.datetime-input[_ngcontent-%COMP%]{width:36%;margin:0}}.date-input[_ngcontent-%COMP%]{width:100px;margin-right:25px}.time-input[_ngcontent-%COMP%]{margin-right:25px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.time-input[_ngcontent-%COMP%]{margin-right:5px}}.hour-input[_ngcontent-%COMP%], .minute-input[_ngcontent-%COMP%]{width:35px;margin-left:7px}.year-input[_ngcontent-%COMP%]{width:98px;margin:10px 14px 5px 4px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.year-input[_ngcontent-%COMP%]{width:32%;margin:0 0 0 10px}}.year-input-hide[_ngcontent-%COMP%]{width:120px;margin-right:25px;display:none}.year-input-only-year[_ngcontent-%COMP%]{width:120px;margin-right:25px}.reset-button[_ngcontent-%COMP%]{width:25px;padding-left:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.reset-button[_ngcontent-%COMP%]{padding-left:8px}}.toggle-filter-state[_ngcontent-%COMP%]{padding-left:20px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.toggle-filter-state[_ngcontent-%COMP%]{padding-left:12px}} .datepicker-year .mat-calendar-arrow{display:none} .datepicker-year .mat-calendar-period-button{pointer-events:none} .datepicker-year .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}"] });
|
|
849
876
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OgcFilterTimeComponent, [{
|
|
850
877
|
type: Component,
|
|
851
|
-
args: [{ selector: 'igo-ogc-filter-time', template: "<div class=\"datetime-container\">\r\n <mat-slide-toggle \r\n *ngIf=\"this.currentFilter.sliderOptions?.enabled\"\r\n [(ngModel)]=\"sliderMode\"\r\n (change)=\"modeChange($event)\">\r\n {{'igo.geo.filter.sliderModeTitle' | translate}}\r\n </mat-slide-toggle>\r\n\r\n <div class=\"slider-container\" *ngIf=\"sliderMode\">\r\n <igo-ogc-filter-time-slider\r\n [begin]=\"beginValue\"\r\n [max]=\"this.restrictedToStep() ? this.maxDate : this.endValue\"\r\n [currentFilter]=\"currentFilter\" \r\n [datasource]=\"datasource\"\r\n (changeProperty)=\"changePropertyByPass($event)\"\r\n >\r\n </igo-ogc-filter-time-slider>\r\n \r\n </div>\r\n\r\n <div *ngIf=\"!sliderMode\">\r\n\r\n <div class=\"year-input-container\" *ngIf=\"calendarTypeYear\">\r\n <!-- to emulate a year-picker, 2 input: first input to show user just year and second input hiden and bind \r\n with the datepicker -->\r\n <mat-form-field class=\"year-input\">\r\n <mat-label>{{'igo.geo.timeFilter.startYear'| translate}}</mat-label>\r\n <input\r\n matInput\r\n class=\"year-input-only-year\"\r\n value=\"{{onlyYearBegin}}\"\r\n (change)= \"yearOnlyInputChange($event, beginDatepicker, 'begin')\"\r\n [disabled]= \"filterStateDisable\"\r\n >\r\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\r\n \r\n <mat-datepicker\r\n panelClass=\"datepicker-year\"\r\n #beginDatepicker\r\n [startView]=\"calendarView()\"\r\n [startAt]=\"beginValue\"\r\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\r\n >\r\n </mat-datepicker>\r\n\r\n <input #beginYear\r\n class= \"year-input-hide\"\r\n matInput\r\n [matDatepicker]=\"beginDatepicker\"\r\n enabled= false\r\n readonly= true\r\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\r\n [min]=\"handleDate(datasource.options.minDate)\"\r\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\"\r\n >\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"year-input\">\r\n <mat-label>{{'igo.geo.timeFilter.endYear'| translate}}</mat-label>\r\n <input\r\n matInput\r\n class=\"year-input-only-year\"\r\n value=\"{{onlyYearEnd}}\"\r\n (change)= \"yearOnlyInputChange($event, endDatepicker, 'end')\"\r\n [disabled] = \"filterStateDisable\">\r\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\r\n <mat-datepicker\r\n panelClass=\"datepicker-year\"\r\n #endDatepicker\r\n [startView]=\"calendarView()\"\r\n [startAt]=\"endValue\"\r\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\r\n >\r\n </mat-datepicker>\r\n\r\n <input #endYear\r\n class= \"year-input-hide\"\r\n matInput\r\n [matDatepicker]=\"endDatepicker\"\r\n enabled= false\r\n readonly= true\r\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\r\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\r\n [max]=\"handleDate(datasource.options.maxDate)\"\r\n >\r\n </mat-form-field>\r\n <button class=\"reset-button\" \r\n mat-icon-button\r\n color=\"primary\" \r\n (click)=\"resetFilter()\" \r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \r\n [disabled]= \"filterStateDisable\">\r\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\r\n </button>\r\n <mat-slide-toggle \r\n class='toggle-filter-state' \r\n (change)=\"toggleFilterState()\" \r\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \r\n tooltip-position=\"below\" \r\n matTooltipShowDelay=\"500\"\r\n [checked]=\"!filterStateDisable\">\r\n </mat-slide-toggle>\r\n\r\n </div>\r\n\r\n <div class=\"datetime-input-container\" *ngIf=\"calendarType()!=='year'\">\r\n <div class=\"datetime-input\">\r\n <mat-form-field class=\"date-input\">\r\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\r\n <input #begin\r\n matInput\r\n [matDatepicker]=\"beginDatepicker\"\r\n [placeholder]=\"'igo.geo.timeFilter.startDate' | translate\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (dateChange)=\"changeTemporalProperty(begin.value, 1)\"\r\n [matDatepickerFilter]=\"dateFilter.bind(this, 'begin')\"\r\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\r\n [min]=\"handleDate(datasource.options.minDate)\"\r\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\" \r\n [disabled]= \"filterStateDisable\">\r\n <span class=\"filler\"></span>\r\n <mat-datepicker\r\n #beginDatepicker\r\n [startView]=\"calendarView()\"\r\n [startAt]=\"beginValue\"\r\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\r\n (monthSelected)=\"monthSelected($event, beginDatepicker, 'begin')\">\r\n </mat-datepicker>\r\n </mat-form-field>\r\n\r\n <div class=\"time-input\">\r\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\">\r\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\r\n <mat-select\r\n [formControl]=\"beginHourFormControl\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\r\n <mat-option *ngFor=\"let hour of beginHours\" [value]=\"hour\">{{hour}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\r\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\r\n <mat-select\r\n [formControl]=\"beginMinuteFormControl\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\r\n <mat-option *ngFor=\"let minute of beginMinutes\" [value]=\"minute\">{{minute}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"datetime-input\" *ngIf=\"!restrictedToStep()\">\r\n <mat-form-field class=\"date-input\">\r\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\r\n <input #end\r\n matInput\r\n [matDatepicker]=\"endDatepicker\"\r\n [placeholder]=\"'igo.geo.timeFilter.endDate' | translate\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (dateChange)=\"changeTemporalProperty(end.value, 2)\"\r\n [matDatepickerFilter]=\"dateFilter.bind(this, 'end')\"\r\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\r\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\r\n [max]=\"handleDate(datasource.options.maxDate)\" \r\n [disabled]= \"filterStateDisable\">\r\n <span class=\"filler\"></span>\r\n <mat-datepicker #endDatepicker\r\n [startView]=\"calendarView()\"\r\n [startAt]=\"endValue\"\r\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\r\n (monthSelected)=\"monthSelected($event, endDatepicker, 'end')\">\r\n </mat-datepicker>\r\n </mat-form-field>\r\n\r\n <div class=\"time-input\">\r\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\" >\r\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\r\n <mat-select\r\n [formControl]=\"endHourFormControl\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\r\n <mat-option *ngFor=\"let hour of endHours\" [value]=\"hour\">{{hour}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\r\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\r\n <mat-select\r\n [formControl]=\"endMinuteFormControl\"\r\n [attr.disabled]=\"!currentFilter.active\"\r\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\r\n <mat-option *ngFor=\"let minute of endMinutes\" [value]=\"minute\">{{minute}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <button class=\"reset-button\" \r\n mat-icon-button color=\"primary\"\r\n (click)=\"resetFilter()\" \r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \r\n [disabled]= \"filterStateDisable\">\r\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\r\n </button>\r\n <mat-slide-toggle \r\n class=\"toggle-filter-state\" \r\n (change)=\"toggleFilterState()\" \r\n tooltip-position=\"below\" \r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \r\n [checked]= \"!filterStateDisable\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["::ng-deep input{text-align:center!important;margin:auto 5px!important}.slider-container{text-align:center}.datetime-input{display:inline-block;width:100px;margin:10px 0 5px 10px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.datetime-input{width:36%;margin:0}}.date-input{width:100px;margin-right:25px}.time-input{margin-right:25px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.time-input{margin-right:5px}}.hour-input,.minute-input{width:35px;margin-left:7px}.year-input{width:98px;margin:10px 14px 5px 4px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.year-input{width:32%;margin:0 0 0 10px}}.year-input-hide{width:120px;margin-right:25px;display:none}.year-input-only-year{width:120px;margin-right:25px}.reset-button{width:25px;padding-left:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.reset-button{padding-left:8px}}.toggle-filter-state{padding-left:20px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.toggle-filter-state{padding-left:12px}}::ng-deep .datepicker-year ::ng-deep .mat-calendar-arrow{display:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-period-button{pointer-events:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}\n"] }]
|
|
878
|
+
args: [{ selector: 'igo-ogc-filter-time', template: "<div class=\"datetime-container\">\n <mat-slide-toggle \n *ngIf=\"this.currentFilter.sliderOptions?.enabled\"\n [(ngModel)]=\"sliderMode\"\n (change)=\"modeChange($event)\">\n {{'igo.geo.filter.sliderModeTitle' | translate}}\n </mat-slide-toggle>\n\n <div class=\"slider-container\" *ngIf=\"sliderMode\">\n <igo-ogc-filter-time-slider\n [begin]=\"beginValue\"\n [max]=\"this.restrictedToStep() ? this.maxDate : this.endValue\"\n [currentFilter]=\"currentFilter\" \n [datasource]=\"datasource\"\n (changeProperty)=\"changePropertyByPass($event)\"\n >\n </igo-ogc-filter-time-slider>\n \n </div>\n\n <div *ngIf=\"!sliderMode\">\n\n <div class=\"year-input-container\" *ngIf=\"calendarTypeYear\">\n <!-- to emulate a year-picker, 2 input: first input to show user just year and second input hiden and bind \n with the datepicker -->\n <mat-form-field class=\"year-input\">\n <mat-label>{{'igo.geo.timeFilter.startYear'| translate}}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{onlyYearBegin}}\"\n (change)= \"yearOnlyInputChange($event, beginDatepicker, 'begin')\"\n [disabled]= \"filterStateDisable\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\n \n <mat-datepicker\n panelClass=\"datepicker-year\"\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n >\n </mat-datepicker>\n\n <input #beginYear\n class= \"year-input-hide\"\n matInput\n [matDatepicker]=\"beginDatepicker\"\n enabled= false\n readonly= true\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\"\n >\n </mat-form-field>\n\n <mat-form-field class=\"year-input\">\n <mat-label>{{'igo.geo.timeFilter.endYear'| translate}}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{onlyYearEnd}}\"\n (change)= \"yearOnlyInputChange($event, endDatepicker, 'end')\"\n [disabled] = \"filterStateDisable\">\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\n <mat-datepicker\n panelClass=\"datepicker-year\"\n #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n >\n </mat-datepicker>\n\n <input #endYear\n class= \"year-input-hide\"\n matInput\n [matDatepicker]=\"endDatepicker\"\n enabled= false\n readonly= true\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [max]=\"handleDate(datasource.options.maxDate)\"\n >\n </mat-form-field>\n <button class=\"reset-button\" \n mat-icon-button\n color=\"primary\" \n (click)=\"resetFilter()\" \n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \n [disabled]= \"filterStateDisable\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n <mat-slide-toggle \n class='toggle-filter-state' \n (change)=\"toggleFilterState()\" \n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \n tooltip-position=\"below\" \n matTooltipShowDelay=\"500\"\n [checked]=\"!filterStateDisable\">\n </mat-slide-toggle>\n\n </div>\n\n <div class=\"datetime-input-container\" *ngIf=\"calendarType()!=='year'\">\n <div class=\"datetime-input\">\n <mat-form-field class=\"date-input\">\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\n <input #begin\n matInput\n [matDatepicker]=\"beginDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.startDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(begin.value, 1)\"\n [matDatepickerFilter]=\"filterBeginFunction\"\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\" \n [disabled]= \"filterStateDisable\">\n <span class=\"filler\"></span>\n <mat-datepicker\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n (monthSelected)=\"monthSelected($event, beginDatepicker, 'begin')\">\n </mat-datepicker>\n </mat-form-field>\n\n <div class=\"time-input\">\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\n <mat-select\n [formControl]=\"beginHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\n <mat-option *ngFor=\"let hour of beginHours\" [value]=\"hour\">{{hour}}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\n <mat-select\n [formControl]=\"beginMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\n <mat-option *ngFor=\"let minute of beginMinutes\" [value]=\"minute\">{{minute}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"datetime-input\" *ngIf=\"!restrictedToStep()\">\n <mat-form-field class=\"date-input\">\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\n <input #end\n matInput\n [matDatepicker]=\"endDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.endDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(end.value, 2)\"\n [matDatepickerFilter]=\"filterEndFunction\"\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [max]=\"handleDate(datasource.options.maxDate)\" \n [disabled]= \"filterStateDisable\">\n <span class=\"filler\"></span>\n <mat-datepicker #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n (monthSelected)=\"monthSelected($event, endDatepicker, 'end')\">\n </mat-datepicker>\n </mat-form-field>\n\n <div class=\"time-input\">\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\" >\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\n <mat-select\n [formControl]=\"endHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\n <mat-option *ngFor=\"let hour of endHours\" [value]=\"hour\">{{hour}}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\n <mat-select\n [formControl]=\"endMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\n <mat-option *ngFor=\"let minute of endMinutes\" [value]=\"minute\">{{minute}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <button class=\"reset-button\" \n mat-icon-button color=\"primary\"\n (click)=\"resetFilter()\" \n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \n [disabled]= \"filterStateDisable\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n <mat-slide-toggle \n class=\"toggle-filter-state\" \n (change)=\"toggleFilterState()\" \n tooltip-position=\"below\" \n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \n [checked]= \"!filterStateDisable\">\n </mat-slide-toggle>\n </div>\n </div>\n</div>\n", styles: ["::ng-deep input{text-align:center!important;margin:auto 5px!important}.slider-container{text-align:center}.datetime-input{display:inline-block;width:100px;margin:10px 0 5px 10px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.datetime-input{width:36%;margin:0}}.date-input{width:100px;margin-right:25px}.time-input{margin-right:25px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.time-input{margin-right:5px}}.hour-input,.minute-input{width:35px;margin-left:7px}.year-input{width:98px;margin:10px 14px 5px 4px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.year-input{width:32%;margin:0 0 0 10px}}.year-input-hide{width:120px;margin-right:25px;display:none}.year-input-only-year{width:120px;margin-right:25px}.reset-button{width:25px;padding-left:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.reset-button{padding-left:8px}}.toggle-filter-state{padding-left:20px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.toggle-filter-state{padding-left:12px}}::ng-deep .datepicker-year ::ng-deep .mat-calendar-arrow{display:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-period-button{pointer-events:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}\n"] }]
|
|
852
879
|
}], function () { return [{ type: i1.OGCFilterTimeService }]; }, { datasource: [{
|
|
853
880
|
type: Input
|
|
854
881
|
}], currentFilter: [{
|
|
@@ -868,4 +895,4 @@ OgcFilterTimeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OgcF
|
|
|
868
895
|
type: ViewChild,
|
|
869
896
|
args: ['endTime']
|
|
870
897
|
}] }); })();
|
|
871
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFFVCxNQUFNLEVBQ04sWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBUXhFLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7SUNqQnpDLDJDQUdnQztJQUQ5Qiw4UEFBd0IscUxBQ2QsZUFBQSx5QkFBa0IsQ0FBQSxJQURKO0lBRXhCLFlBQ0Y7O0lBQUEsaUJBQW1COzs7SUFIakIsMkNBQXdCO0lBRXhCLGVBQ0Y7SUFERSx1RkFDRjs7OztJQUVBLDhCQUFpRCxvQ0FBQTtJQU03QywrTUFBa0IsZUFBQSxtQ0FBNEIsQ0FBQSxJQUFDO0lBRWpELGlCQUE2QixFQUFBOzs7SUFOM0IsZUFBb0I7SUFBcEIseUNBQW9CLHFFQUFBLHVDQUFBLGlDQUFBOzs7O0lBWXRCLDhCQUEyRCx5QkFBQSxnQkFBQTtJQUk1QyxZQUE2Qzs7SUFBQSxpQkFBWTtJQUNwRSxpQ0FNRztJQUZELG1OQUFXLGVBQUEsMENBQTZDLE9BQU8sQ0FBQyxDQUFBLElBQUM7SUFKbkUsaUJBTUc7SUFDSCw0Q0FBaUg7SUFFakgsOENBTUc7SUFE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TkQsZUFBK0M7UUFBL0MsK0dBQStDO1FBTW5CLGVBQWdCO1FBQWhCLHFDQUFnQjtRQVl6QyxlQUFpQjtRQUFqQixzQ0FBaUI7O3VGREtaLHNCQUFzQjtjQUxsQyxTQUFTOzJCQUNFLHFCQUFxQjt1RUFLdEIsVUFBVTtrQkFBbEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDSSxjQUFjO2tCQUF2QixNQUFNO1lBZ0N5QixpQkFBaUI7a0JBQWhELFNBQVM7bUJBQUMsbUJBQW1CO1lBQ0ksbUJBQW1CO2tCQUFwRCxTQUFTO21CQUFDLHFCQUFxQjtZQUNSLFNBQVM7a0JBQWhDLFNBQVM7bUJBQUMsV0FBVztZQUNBLE9BQU87a0JBQTVCLFNBQVM7bUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25Jbml0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2djRmlsdGVyT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXIuZW51bSc7XHJcbmltcG9ydCB7IE9HQ0ZpbHRlclRpbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXItdGltZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMsXHJcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2UsXHJcbiAgT2djRmlsdGVyRHVyaW5nT3B0aW9uc1xyXG59IGZyb20gJy4uL3NoYXJlZC9vZ2MtZmlsdGVyLmludGVyZmFjZSc7XHJcblxyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIG1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1vZ2MtZmlsdGVyLXRpbWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vZ2MtZmlsdGVyLXRpbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL29nYy1maWx0ZXItdGltZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPZ2NGaWx0ZXJUaW1lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcclxuICBASW5wdXQoKSBjdXJyZW50RmlsdGVyOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNoYW5nZVByb3BlcnR5OiBFdmVudEVtaXR0ZXI8e1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICAgIHBvczogbnVtYmVyO1xyXG4gICAgcmVmcmVzaEZpbHRlcjogYm9vbGVhbjtcclxuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBiZWdpbkhvdXJzOiBudW1iZXJbXTtcclxuICBlbmRIb3VyczogbnVtYmVyW107XHJcbiAgYmVnaW5NaW51dGVzOiBudW1iZXJbXTtcclxuICBlbmRNaW51dGVzOiBudW1iZXJbXTtcclxuICBiZWdpbkhvdXJGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICBiZWdpbk1pbnV0ZUZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIGVuZEhvdXJGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICBlbmRNaW51dGVGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICBfYmVnaW5WYWx1ZTogRGF0ZTtcclxuICBfZW5kVmFsdWU6IERhdGU7XHJcbiAgcmVhZG9ubHkgX2RlZmF1bHRNaW46IHN0cmluZyA9ICcxOTAwLTAxLTAxJztcclxuICByZWFkb25seSBfZGVmYXVsdE1heDogc3RyaW5nID0gJzIwNTItMDEtMDYnO1xyXG4gIHJlYWRvbmx5IF9kZWZhdWx0RGlzcGxheUZvcm1hdDogc3RyaW5nID0gJ0REL01NL1lZWVkgSEg6bW0gQSc7XHJcbiAgcmVhZG9ubHkgX2RlZmF1bHRTbGlkZXJNb2RlRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgb2djRmlsdGVyT3BlcmF0b3IgPSBPZ2NGaWx0ZXJPcGVyYXRvcjtcclxuICBwdWJsaWMgc2xpZGVyTW9kZSA9IGZhbHNlO1xyXG5cclxuICByZWFkb25seSBkZWZhdWx0U3RlcE1pbGxpc2Vjb25kID0gNjAwMDA7XHJcbiAgcHVibGljIG9wdGlvbnM6IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucztcclxuXHJcbiAgcHVibGljIG9ubHlZZWFyQmVnaW46IG51bWJlcjtcclxuICBwdWJsaWMgb25seVllYXJFbmQ6IG51bWJlcjtcclxuICBwdWJsaWMgY2FsZW5kYXJUeXBlWWVhciA9IGZhbHNlO1xyXG4gIHB1YmxpYyByZXNldEljb24gPSAncmVwbGF5JztcclxuICBwdWJsaWMgZmlsdGVyU3RhdGVEaXNhYmxlOiBib29sZWFuO1xyXG5cclxuICBAVmlld0NoaWxkKCdlbmREYXRlcGlja2VyVGltZScpIGVuZERhdGVwaWNrZXJUaW1lOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2JlZ2luRGF0ZXBpY2tlclRpbWUnKSBiZWdpbkRhdGVwaWNrZXJUaW1lOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2JlZ2luVGltZScpIGJlZ2luVGltZTogSFRNTElucHV0RWxlbWVudDtcclxuICBAVmlld0NoaWxkKCdlbmRUaW1lJykgZW5kVGltZTogSFRNTElucHV0RWxlbWVudDtcclxuXHJcbiAgZ2V0IHN0ZXAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5zdGVwRGF0ZVxyXG4gICAgICA/IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLnN0ZXBEYXRlXHJcbiAgICAgIDogdGhpcy5jdXJyZW50RmlsdGVyLnN0ZXA7XHJcbiAgfVxyXG5cclxuICBnZXQgc3RlcE1pbGxpc2Vjb25kcygpOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc3RlcCA9IG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzTWlsbGlzZWNvbmRzKCk7XHJcbiAgICByZXR1cm4gc3RlcCA9PT0gMCA/IHRoaXMuZGVmYXVsdFN0ZXBNaWxsaXNlY29uZCA6IHN0ZXA7XHJcbiAgfVxyXG5cclxuICBzZXQgYmVnaW5WYWx1ZShiZWdpbjogRGF0ZSkge1xyXG4gICAgdGhpcy5fYmVnaW5WYWx1ZSA9IGJlZ2luO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGJlZ2luVmFsdWUoKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmVnaW5WYWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCBlbmRWYWx1ZShlbmQ6IERhdGUpIHtcclxuICAgIHRoaXMuX2VuZFZhbHVlID0gZW5kO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVuZFZhbHVlKCk6IERhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuZFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNsaWRlckludGVydmFsKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlckludGVydmFsID09PSB1bmRlZmluZWRcclxuICAgICAgPyAyMDAwXHJcbiAgICAgIDogdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlckludGVydmFsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1heERhdGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlID8gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSA6IHRoaXMuX2RlZmF1bHRNYXg7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzcGxheUZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbHRlci5kaXNwbGF5Rm9ybWF0ID8gdGhpcy5jdXJyZW50RmlsdGVyLmRpc3BsYXlGb3JtYXQgOiB0aGlzLl9kZWZhdWx0RGlzcGxheUZvcm1hdDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvZ2NGaWx0ZXJUaW1lU2VydmljZTogT0dDRmlsdGVyVGltZVNlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCl7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnMuZW5hYmxlZCA9IHRoaXMuY3VycmVudEZpbHRlci5zbGlkZXJPcHRpb25zLmVuYWJsZWQgIT09IHVuZGVmaW5lZCA/XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnMuZW5hYmxlZCA6IHRoaXMuX2RlZmF1bHRTbGlkZXJNb2RlRW5hYmxlZDtcclxuICAgIH1cclxuICAgIHRoaXMuYmVnaW5WYWx1ZSA9IHRoaXMucGFyc2VGaWx0ZXIodGhpcy5oYW5kbGVNaW4oKSk7XHJcbiAgICB0aGlzLmVuZFZhbHVlID0gdGhpcy5wYXJzZUZpbHRlcih0aGlzLmhhbmRsZU1heCgpKTtcclxuXHJcbiAgICB0aGlzLm9ubHlZZWFyQmVnaW4gPSB0aGlzLmJlZ2luVmFsdWUuZ2V0VVRDRnVsbFllYXIoKTtcclxuICAgIHRoaXMub25seVllYXJFbmQgPSB0aGlzLmVuZFZhbHVlLmdldFVUQ0Z1bGxZZWFyKCk7XHJcbiAgICB0aGlzLmNhbGVuZGFyVHlwZVllYXIgPSB0aGlzLmlzQ2FsZW5kYXJZZWFyTW9kZSgpO1xyXG4gICAgdGhpcy5zZXRGaWx0ZXJTdGF0ZURpc2FibGUoKTtcclxuICAgIHRoaXMudXBkYXRlSG91cnNNaW51dGVzQXJyYXkoKTtcclxuICAgIC8vIHVwZGF0ZSB2YWx1ZSBmb3Igbm93IHZhbHVlXHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlcygpO1xyXG4gIH1cclxuXHJcbiAgcGFyc2VGaWx0ZXIoZmlsdGVyKTogRGF0ZSB7XHJcbiAgICBpZiAoIWZpbHRlcil7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xyXG4gICAgfSBlbHNlIGlmICggaXNOYU4oIG5ldyBEYXRlKGZpbHRlcikuZ2V0VGltZSgpICkgKcKge1xyXG4gICAgICBpZiAoZmlsdGVyLnNlYXJjaCgnbm93JykgPj0gMCApwqB7XHJcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBmaWx0ZXIubWF0Y2goL3llYXJzfG1vbnRoc3x3ZWVrc3xkYXlzfGhvdXJzfHNlY29uZHMvKTtcclxuICAgICAgICBpZiAoZmlsdGVyLm1hdGNoKC9cXCsvKSkge1xyXG4gICAgICAgICAgY29uc3QgaW50ZXJ2YWxJbnQgPSBwYXJzZUludChcclxuICAgICAgICAgICAgZmlsdGVyLnN1YnN0cmluZyhmaWx0ZXIuc2VhcmNoKCcrJykgKyAxLCBpbnRlcnZhbC5pbmRleCksXHJcbiAgICAgICAgICAgIDEwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIG1vbWVudCgpLmFkZChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVyLm1hdGNoKC9cXC0vKSkge1xyXG4gICAgICAgICAgY29uc3QgaW50ZXJ2YWxJbnQgPSBwYXJzZUludChcclxuICAgICAgICAgICAgZmlsdGVyLnN1YnN0cmluZyhmaWx0ZXIuc2VhcmNoKCctJykgKyAxLCBpbnRlcnZhbC5pbmRleCksXHJcbiAgICAgICAgICAgIDEwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KGludGVydmFsSW50LCBpbnRlcnZhbFswXSkudG9EYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmaWx0ZXIuc2VhcmNoKCd0b2RheScpID49IDApe1xyXG4gICAgICAgIGNvbnN0IF9ub3cgPSBtb21lbnQoKS5lbmRPZignZGF5JykudG9EYXRlKCk7XHJcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBmaWx0ZXIubWF0Y2goL3llYXJzfG1vbnRoc3x3ZWVrc3xkYXlzfGhvdXJzfHNlY29uZHMvKTtcclxuICAgICAgICBpZiAoIGZpbHRlci5tYXRjaCgvXFwrLykgKSB7XHJcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbEludCA9IHBhcnNlSW50KCBmaWx0ZXIuc3Vic3RyaW5nKGZpbHRlci5zZWFyY2goJysnKSArIDEsIGludGVydmFsLmluZGV4KSwgMTAgKTtcclxuICAgICAgICAgIHJldHVybiBtb21lbnQoX25vdykuYWRkKGludGVydmFsSW50LCBpbnRlcnZhbFswXSkudG9EYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICggZmlsdGVyLm1hdGNoKC9cXC0vKSApIHtcclxuICAgICAgICAgIGNvbnN0IGludGVydmFsSW50ID0gcGFyc2VJbnQoZmlsdGVyLnN1YnN0cmluZyhmaWx0ZXIuc2VhcmNoKCctJykgKyAxLCBpbnRlcnZhbC5pbmRleCksIDEwKTtcclxuICAgICAgICAgIHJldHVybiBtb21lbnQoX25vdykuc3VidHJhY3QoaW50ZXJ2YWxJbnQsIGludGVydmFsWzBdKS50b0RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9ub3c7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyLmNhbGVuZGFyTW9kZVllYXIpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZShmaWx0ZXIpO1xyXG4gICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXIgPyBuZXcgRGF0ZShmaWx0ZXIpIDogbmV3IERhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVRlbXBvcmFsUHJvcGVydHkodmFsdWUsIHBvc2l0aW9uPywgcmVmcmVzaEZpbHRlciA9IHRydWUpIHtcclxuICAgIGxldCB2YWx1ZVRtcCA9IHRoaXMuZ2V0RGF0ZVRpbWUodmFsdWUsIHBvc2l0aW9uKTtcclxuICAgIGlmICh0aGlzLmlzQ2FsZW5kYXJZZWFyTW9kZSgpKSB7XHJcbiAgICAgIGxldCBkYXRlU3RyaW5nRnJvbVllYXJOb3RpbWU7XHJcbiAgICAgIGlmIChwb3NpdGlvbiA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuYmVnaW5WYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMub25seVllYXJCZWdpbiA9IHRoaXMuYmVnaW5WYWx1ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgIGRhdGVTdHJpbmdGcm9tWWVhck5vdGltZSA9IGAke3RoaXMub25seVllYXJCZWdpbn0tMDEtMDFgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZW5kVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLm9ubHlZZWFyRW5kID0gdGhpcy5lbmRWYWx1ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgIGRhdGVTdHJpbmdGcm9tWWVhck5vdGltZSA9IGAke3RoaXMub25seVllYXJFbmR9LTAxLTAxYDtcclxuICAgICAgfVxyXG4gICAgICAvLyBjYWxsIHNlcnZpY2Ugd2l0aCBzdHJpbmcgZGF0ZSB3aXRob3V0IHRpbWVcclxuICAgICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eS5uZXh0KHsgdmFsdWU6IGRhdGVTdHJpbmdGcm9tWWVhck5vdGltZSwgcG9zOiBwb3NpdGlvbiwgcmVmcmVzaEZpbHRlciB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHBvc2l0aW9uID09PSAyICYmIHRoaXMuY2FsZW5kYXJUeXBlKCkgPT09ICdkYXRlJyAmJiAhdGhpcy5zbGlkZXJNb2RlKSB7XHJcbiAgICAgIC8qIEFib3ZlIG1vbnRoOiBzZWUgeWVhclNlbGVjdGVkIG9yIG1vbnRoU2VsZWN0ZWQgKi9cclxuICAgICAgdmFsdWVUbXAgPSBtb21lbnQodmFsdWVUbXApLmVuZE9mKCdkYXknKS50b0RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocG9zaXRpb24gPT09IDEpIHtcclxuICAgICAgdGhpcy5iZWdpblZhbHVlID0gdmFsdWVUbXA7XHJcbiAgICAgIGlmICh0aGlzLnJlc3RyaWN0ZWRUb1N0ZXAoKSkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eSh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLmFkZFN0ZXAodmFsdWVUbXAsIHRoaXMuc3RlcE1pbGxpc2Vjb25kcyksIDIsIHJlZnJlc2hGaWx0ZXIpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuZFZhbHVlID0gdmFsdWVUbXA7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUhvdXJzTWludXRlc0FycmF5KCk7XHJcbiAgICB0aGlzLmNoYW5nZVByb3BlcnR5Lm5leHQoeyB2YWx1ZTogdmFsdWVUbXAudG9JU09TdHJpbmcoKSwgcG9zOiBwb3NpdGlvbiwgcmVmcmVzaEZpbHRlciB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZURhdGUodmFsdWUpOiBEYXRlIHtcclxuICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ3N0cmluZycgJiYgdGhpcy5jdXJyZW50RmlsdGVyLmNhbGVuZGFyTW9kZVllYXIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY2FsZW5kYXJUeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5jYWxlbmRhck1vZGVZZWFyKSB7XHJcbiAgICAgIHJldHVybiAneWVhcic7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdGVwTWlsbGlzZWNvbmRzIDwgODY0MDAwMDApIHtcclxuICAgICAgcmV0dXJuICdkYXRldGltZSc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ2RhdGUnO1xyXG4gIH1cclxuXHJcbiAgaXNDYWxlbmRhclllYXJNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuY2FsZW5kYXJUeXBlKCkgPT09ICd5ZWFyJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHllYXJPbmx5SW5wdXRDaGFuZ2UoY2hhbmdlRXZlbnQsIGRhdGVQaWNrZXI/OiBhbnksIHByb3BlcnR5Pzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB5ZWFyID0gY2hhbmdlRXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZSh5ZWFyKTtcclxuICAgIHRoaXMueWVhclNlbGVjdGVkKGRhdGUsIGRhdGVQaWNrZXIsIHByb3BlcnR5KTtcclxuICB9XHJcblxyXG4gIHllYXJTZWxlY3RlZCh5ZWFyLCBkYXRlUGlja2VyPzogYW55LCBwcm9wZXJ0eT86IHN0cmluZywgcmVmcmVzaEZpbHRlciA9IHRydWUpIHtcclxuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc1llYXJEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIGlmIChkYXRlUGlja2VyKSB7XHJcbiAgICAgICAgZGF0ZVBpY2tlci5jbG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9wZXJ0eSA9PT0gJ2VuZCcpIHtcclxuICAgICAgICAvLyBjaGFuZ2UgdmFsdWUgMDEgamFuIHRvIDMxIGRlYyBzYW1lIHllYXJcclxuICAgICAgICB5ZWFyID0gbW9tZW50KHllYXIpLmVuZE9mKCd5ZWFyJykudG9EYXRlKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkgPT09ICdiZWdpbicgJiYgdGhpcy5yZXN0cmljdGVkVG9TdGVwKCkgJiYgIXRoaXMuY2FsZW5kYXJUeXBlWWVhcikge1xyXG4gICAgICAgIHRoaXMueWVhclNlbGVjdGVkKHllYXIsIHVuZGVmaW5lZCwgJ2VuZCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eSh5ZWFyLCBwcm9wZXJ0eSA9PT0gJ2JlZ2luJyA/IDEgOiAyLCByZWZyZXNoRmlsdGVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vbnRoU2VsZWN0ZWQobW9udGgsIGRhdGVQaWNrZXI/OiBhbnksIHByb3BlcnR5Pzogc3RyaW5nLCByZWZyZXNoRmlsdGVyID0gdHJ1ZSkge1xyXG4gICAgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzTW9udGhEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIGlmIChkYXRlUGlja2VyKSB7XHJcbiAgICAgICAgZGF0ZVBpY2tlci5jbG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9wZXJ0eSA9PT0gJ2VuZCcpIHtcclxuICAgICAgICBtb250aCA9IG1vbWVudChtb250aCkuZW5kT2YoJ21vbnRoJykudG9EYXRlKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkgPT09ICdiZWdpbicgJiYgdGhpcy5yZXN0cmljdGVkVG9TdGVwKCkpIHtcclxuICAgICAgICB0aGlzLm1vbnRoU2VsZWN0ZWQobW9udGgsIHVuZGVmaW5lZCwgJ2VuZCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShtb250aCwgcHJvcGVydHkgPT09ICdiZWdpbicgPyAxIDogMiwgcmVmcmVzaEZpbHRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxlbmRhclZpZXcoKSB7XHJcbiAgICBjb25zdCB0ZXN0ID0gdGhpcy5zdGVwTWlsbGlzZWNvbmRzO1xyXG4gICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKFxyXG4gICAgICB0aGlzLnBhcnNlRmlsdGVyKHRoaXMuY3VycmVudEZpbHRlci5lbmQpLmdldFRpbWUoKSAtXHJcbiAgICAgICAgdGhpcy5wYXJzZUZpbHRlcih0aGlzLmN1cnJlbnRGaWx0ZXIuYmVnaW4pLmdldFRpbWUoKVxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc1llYXJEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIHJldHVybiAnbXVsdGkteWVhcic7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzTW9udGhEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIHJldHVybiAneWVhcic7XHJcbiAgICB9IGVsc2UgaWYgKHRlc3QgPCA4NjQwMDAwMCAmJiBkaWZmIDwgODY0MDAwMDApIHtcclxuICAgICAgcmV0dXJuICdjbG9jayc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ21vbnRoJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRhdGVGaWx0ZXIodHlwZTogc3RyaW5nLCBkYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGRhdGVWYWx1ZSA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgY29uc3QgZGlmZiA9IGRhdGVWYWx1ZS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSh0aGlzLmhhbmRsZU1pbigpKS5nZXRUaW1lKCk7XHJcblxyXG4gICAgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzWWVhckR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgY29uc3QgbW9udGhEaWZmID0gbW9tZW50KGRhdGVWYWx1ZSkuZGlmZihtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksICd5ZWFycycsIHRydWUpO1xyXG4gICAgICBpZiAoIHR5cGUgPT09ICdlbmQnICkge1xyXG4gICAgICAgIGNvbnN0IGRhdGVWYWx1ZVBsdXMxID0gbW9tZW50KGRhdGVWYWx1ZSkuYWRkKDEsICdkJyk7XHJcbiAgICAgICAgY29uc3QgbW9udGhEaWZmUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlUGx1czEpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAneWVhcnMnLCB0cnVlKTtcclxuICAgICAgICByZXR1cm4gKG1vbnRoRGlmZlBsdXMxICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNZZWFycygpKSA9PT0gMDtcclxuICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gJ2JlZ2luJyApIHtcclxuICAgICAgICByZXR1cm4gKG1vbnRoRGlmZiAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzWWVhcnMoKSkgPT09IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzTW9udGhEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIGNvbnN0IG1vbnRoRGlmZiA9IG1vbWVudChkYXRlVmFsdWUpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAnbW9udGhzJywgdHJ1ZSk7XHJcbiAgICAgIGlmICggdHlwZSA9PT0gJ2VuZCcgKSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZVZhbHVlUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlKS5hZGQoMSwgJ2QnKTtcclxuICAgICAgICBjb25zdCBtb250aERpZmZQbHVzMSA9IG1vbWVudChkYXRlVmFsdWVQbHVzMSkuZGlmZihtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksICdtb250aHMnLCB0cnVlKTtcclxuICAgICAgICByZXR1cm4gKG1vbnRoRGlmZlBsdXMxICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNNb250aHMoKSkgPT09IDA7XHJcbiAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICdiZWdpbicgKSB7XHJcbiAgICAgICAgcmV0dXJuIChtb250aERpZmYgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc01vbnRocygpKSA9PT0gMDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc1dlZWtEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIGNvbnN0IHdlZWtEaWZmID0gbW9tZW50KGRhdGVWYWx1ZSkuZGlmZihtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksICd3ZWVrcycsIHRydWUpO1xyXG4gICAgICBpZiAoIHR5cGUgPT09ICdlbmQnICkge1xyXG4gICAgICAgIGNvbnN0IGRhdGVWYWx1ZVBsdXMxID0gbW9tZW50KGRhdGVWYWx1ZSkuYWRkKDEsICdkJyk7XHJcbiAgICAgICAgY29uc3Qgd2Vla0RpZmZQbHVzMSA9IG1vbWVudChkYXRlVmFsdWVQbHVzMSkuZGlmZihtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksICd3ZWVrcycsIHRydWUpO1xyXG4gICAgICAgIHJldHVybiAod2Vla0RpZmZQbHVzMSAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzV2Vla3MoKSkgPT09IDA7XHJcbiAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICdiZWdpbicgKSB7XHJcbiAgICAgICAgcmV0dXJuICh3ZWVrRGlmZiAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzV2Vla3MoKSkgPT09IDA7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNEYXlEdXJhdGlvbih0aGlzLnN0ZXApKSB7XHJcbiAgICAgIGNvbnN0IGRheURpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSwgJ2RheXMnLCB0cnVlKTtcclxuICAgICAgaWYgKCB0eXBlID09PSAnZW5kJyApIHtcclxuICAgICAgICBjb25zdCBkYXRlVmFsdWVQbHVzMSA9IG1vbWVudChkYXRlVmFsdWUpLmFkZCgxLCAnZCcpO1xyXG4gICAgICAgIGNvbnN0IGRheURpZmZQbHVzMSA9IG1vbWVudChkYXRlVmFsdWVQbHVzMSkuZGlmZihtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksICdkYXlzJywgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgX21vZCA9IChkYXlEaWZmUGx1czEgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc0RheXMoKSk7XHJcbiAgICAgICAgcmV0dXJuIChfbW9kIDwgMC4wMDAwMDAxICYmIF9tb2QgPiAtMC4wMDAwMDAxKSB8fCBfbW9kID09PSAwIDsgLy8gMSBtaWxsaXNlY29uZCA9IDEuMTU3NDA3NDA3NDA3NDA3NmUtOFxyXG4gICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAnYmVnaW4nICkge1xyXG4gICAgICAgIGNvbnN0IF9tb2QgPSAoKGRheURpZmYgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc0RheXMoKSkgKyAxKTtcclxuICAgICAgICByZXR1cm4gKF9tb2QgPCAwLjAwMDAwMDEgJiYgX21vZCA+IC0wLjAwMDAwMDEgJiYgX21vZCAhPT0gMCkgfHwgX21vZCA9PT0gMSA7IC8vIDEgbWlsbGlzZWNvbmQgPSAxLjE1NzQwNzQwNzQwNzQwNzZlLThcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICggdGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNIb3VyRHVyYXRpb24odGhpcy5zdGVwKSApIHtcclxuICAgICAgY29uc3QgaG91ckRpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSwgJ2hvdXJzJywgdHJ1ZSk7XHJcbiAgICAgIHJldHVybiAoaG91ckRpZmYgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc0hvdXJzKCkpID09PSAwO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoIHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzTWludXRlRHVyYXRpb24odGhpcy5zdGVwKSApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpZmYgJSB0aGlzLnN0ZXBNaWxsaXNlY29uZHMgPT09IDA7XHJcbiAgfVxyXG5cclxuICBnZXREYXRlVGltZShkYXRlLCBwb3MpIHtcclxuICAgIGNvbnN0IHZhbHVldG1wID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICBsZXQgdmFsdWV0bXAyO1xyXG4gICAgaWYgKCF0aGlzLnNsaWRlck1vZGUpIHtcclxuICAgICAgc3dpdGNoIChwb3MpIHtcclxuICAgICAgICBjYXNlIDE6IHtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuY2FsZW5kYXJNb2RlWWVhcikge1xyXG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycygwLCAwKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycyhcclxuICAgICAgICAgICAgdGhpcy5iZWdpbkhvdXJGb3JtQ29udHJvbC52YWx1ZSxcclxuICAgICAgICAgICAgdGhpcy5iZWdpbk1pbnV0ZUZvcm1Db250cm9sLnZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIDI6IHtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuY2FsZW5kYXJNb2RlWWVhcikge1xyXG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycygwLCAwKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycyhcclxuICAgICAgICAgICAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC52YWx1ZSxcclxuICAgICAgICAgICAgICB0aGlzLmVuZE1pbnV0ZUZvcm1Db250cm9sLnZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVldG1wMiA/IHZhbHVldG1wMiA6IHZhbHVldG1wKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU1pbnV0ZUluY3JlbWVudCgpIHtcclxuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01pbnV0ZUR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcclxuICAgICAgaWYgKHRoaXMuc3RlcE1pbGxpc2Vjb25kcyA8IDM2MDAwMDApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwTWlsbGlzZWNvbmRzIC8gMTAwMCA9PT0gNjAgPyAxIDogdGhpcy5zdGVwTWlsbGlzZWNvbmRzIC8gMTAwMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc3RlcE1pbGxpc2Vjb25kcyAlIDM2MDAwMDApIC8gNjA7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNIb3VyRHVyYXRpb24odGhpcy5zdGVwKSkge1xyXG4gICAgICByZXR1cm4gNjA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUhvdXJJbmNyZW1lbnQoKSB7XHJcbiAgICBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNIb3VyRHVyYXRpb24odGhpcy5zdGVwKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdGVwTWlsbGlzZWNvbmRzIC8gMTAwMCAvIDYwIC8gNjA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcblxyXG4gIGZ1bGxCZWdpbkhvdXJzQXJyYXkoY2hlY2tFbmRWYWx1ZT8pIHtcclxuICAgIGlmIChjaGVja0VuZFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuYmVnaW5Ib3VycyA9IEFycmF5LmZyb20oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVuZ3RoOlxyXG4gICAgICAgICAgICAodGhpcy5lbmRIb3VyRm9ybUNvbnRyb2wudmFsdWUgLSAwKSAvIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpICsgMVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYmVnaW5Ib3VycyA9IEFycmF5LmZyb20oXHJcbiAgICAgICAgeyBsZW5ndGg6ICgyMyAtIDApIC8gdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KCkgKyAxIH0sXHJcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5iZWdpblZhbHVlLmdldEhvdXJzKCkpO1xyXG4gIH1cclxuXHJcbiAgZnVsbEVuZEhvdXJzQXJyYXkoY2hlY2tFbmRWYWx1ZT8pIHtcclxuICAgIGlmIChjaGVja0VuZFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZW5kSG91cnMgPSBBcnJheS5mcm9tKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxlbmd0aDpcclxuICAgICAgICAgICAgKDIzIC0gdGhpcy5iZWdpbkhvdXJGb3JtQ29udHJvbC52YWx1ZSkgL1xyXG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpICtcclxuICAgICAgICAgICAgMVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKF8sIGkpID0+XHJcbiAgICAgICAgICB0aGlzLmJlZ2luSG91ckZvcm1Db250cm9sLnZhbHVlICsgaSAqIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuZEhvdXJzID0gQXJyYXkuZnJvbShcclxuICAgICAgICB7IGxlbmd0aDogKDIzIC0gMCkgLyB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKSArIDEgfSxcclxuICAgICAgICAoXywgaSkgPT4gMCArIGkgKiB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbmRIb3VyRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5lbmRWYWx1ZS5nZXRIb3VycygpKTtcclxuICB9XHJcblxyXG4gIGZ1bGxCZWdpbk1pbnV0ZXNBcnJheShjaGVja0VuZFZhbHVlPykge1xyXG4gICAgaWYgKGNoZWNrRW5kVmFsdWUpIHtcclxuICAgICAgdGhpcy5iZWdpbk1pbnV0ZXMgPSBBcnJheS5mcm9tKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxlbmd0aDpcclxuICAgICAgICAgICAgKHRoaXMuZW5kTWludXRlRm9ybUNvbnRyb2wudmFsdWUgLSAwKSAvXHJcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKSArXHJcbiAgICAgICAgICAgIDFcclxuICAgICAgICB9LFxyXG4gICAgICAgIChfLCBpKSA9PiAwICsgaSAqIHRoaXMuaGFuZGxlTWludXRlSW5jcmVtZW50KClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYmVnaW5NaW51dGVzID0gQXJyYXkuZnJvbShcclxuICAgICAgICB7IGxlbmd0aDogKDU5IC0gMCkgLyB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpICsgMSB9LFxyXG4gICAgICAgIChfLCBpKSA9PiAwICsgaSAqIHRoaXMuaGFuZGxlTWludXRlSW5jcmVtZW50KClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuYmVnaW5NaW51dGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmJlZ2luVmFsdWUuZ2V0TWludXRlcygpKTtcclxuICB9XHJcblxyXG4gIGZ1bGxFbmRNaW51dGVzQXJyYXkoY2hlY2tFbmRWYWx1ZT8pIHtcclxuICAgIGlmIChjaGVja0VuZFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZW5kTWludXRlcyA9IEFycmF5LmZyb20oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVuZ3RoOlxyXG4gICAgICAgICAgICAoNTkgLSB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wudmFsdWUpIC9cclxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpICtcclxuICAgICAgICAgICAgMVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKF8sIGkpID0+XHJcbiAgICAgICAgICB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wudmFsdWUgKyBpICogdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbmRNaW51dGVzID0gQXJyYXkuZnJvbShcclxuICAgICAgICB7IGxlbmd0aDogKDU5IC0gMCkgLyB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpICsgMSB9LFxyXG4gICAgICAgIChfLCBpKSA9PiAwICsgaSAqIHRoaXMuaGFuZGxlTWludXRlSW5jcmVtZW50KClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuZW5kTWludXRlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5lbmRWYWx1ZS5nZXRNaW51dGVzKCkpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSG91cnNNaW51dGVzQXJyYXkoKSB7XHJcbiAgICBjb25zdCBiZWdpblRtcCA9IG5ldyBEYXRlKHRoaXMuYmVnaW5WYWx1ZSk7XHJcbiAgICBjb25zdCBlbmRUbXAgPSBuZXcgRGF0ZSh0aGlzLmVuZFZhbHVlKTtcclxuICAgIGlmIChiZWdpblRtcC5zZXRIb3VycygwLCAwKSA9PT0gZW5kVG1wLnNldEhvdXJzKDAsIDApKSB7XHJcbiAgICAgIHRoaXMuZnVsbEJlZ2luSG91cnNBcnJheSh0cnVlKTtcclxuICAgICAgdGhpcy5mdWxsRW5kSG91cnNBcnJheSh0cnVlKTtcclxuICAgICAgaWYgKHRoaXMuYmVnaW5WYWx1ZS5nZXRIb3VycygpID09PSB0aGlzLmVuZFZhbHVlLmdldEhvdXJzKCkpIHtcclxuICAgICAgICB0aGlzLmZ1bGxCZWdpbk1pbnV0ZXNBcnJheSh0cnVlKTtcclxuICAgICAgICB0aGlzLmZ1bGxFbmRNaW51dGVzQXJyYXkodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZnVsbEJlZ2luSG91cnNBcnJheSgpO1xyXG4gICAgICB0aGlzLmZ1bGxFbmRIb3Vyc0FycmF5KCk7XHJcbiAgICAgIHRoaXMuZnVsbEJlZ2luTWludXRlc0FycmF5KCk7XHJcbiAgICAgIHRoaXMuZnVsbEVuZE1pbnV0ZXNBcnJheSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZXMoKSB7XHJcbiAgICB0aGlzLmNoYW5nZVRlbXBvcmFsUHJvcGVydHkodGhpcy5iZWdpblZhbHVlLCAxLCBmYWxzZSk7XHJcbiAgICB0aGlzLmNoYW5nZVRlbXBvcmFsUHJvcGVydHkodGhpcy5lbmRWYWx1ZSwgMiwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzdHJpY3RlZFRvU3RlcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXIucmVzdHJpY3RUb1N0ZXBcclxuICAgICAgPyB0aGlzLmN1cnJlbnRGaWx0ZXIucmVzdHJpY3RUb1N0ZXAgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNaW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyLmJlZ2luID8gdGhpcy5jdXJyZW50RmlsdGVyLmJlZ2luIDpcclxuICAgICAgICAgICAgICAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSA/IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUgOiB0aGlzLl9kZWZhdWx0TWluKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNYXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyLmVuZCA/IHRoaXMuY3VycmVudEZpbHRlci5lbmQgOlxyXG4gICAgICAgICAgICAgICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlID8gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSA6IHRoaXMuX2RlZmF1bHRNYXgpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHJvcGVydHlCeVBhc3MoZXZlbnQpIHtcclxuICAgIHRoaXMuY2hhbmdlUHJvcGVydHkubmV4dChldmVudCk7XHJcbiAgfVxyXG5cclxuICBtb2RlQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVWYWx1ZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEZpbHRlclN0YXRlRGlzYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5maWx0ZXJTdGF0ZURpc2FibGUgPSAhdGhpcy5jdXJyZW50RmlsdGVyLmFjdGl2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyU3RhdGVEaXNhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNhbGVuZGFyVHlwZSgpID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlclN0YXRlRGlzYWJsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuYmVnaW5NaW51dGVGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5lbmRIb3VyRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuZW5kTWludXRlRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgICAgdGhpcy5iZWdpbk1pbnV0ZUZvcm1Db250cm9sLmVuYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuZW5kSG91ckZvcm1Db250cm9sLmVuYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuZW5kTWludXRlRm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZShzdHJpbmdEYXRlOiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIC8vIHdhcm5pbmcgY3JlYXRlIGRhdGUgd2l0aCBubyB0aW1lIG1ha2UgYSBkYXRlIFVUQyB3aXRoIFRaIGFuZCB0aGUgZGF0ZSBjcmVhdGUgbWF5YmUgbm90IHRoZSBzYW1lIHllYXIsIG1vbnRoIGFuZCBkYXlcclxuICAgIC8vIGV4ZW1wbGU6XHJcbiAgICAvLyBuZXcgRGF0ZSgnMjAyMi0wMS0wMScpIC0+IEZyaSBEZWMgMzEgMjAyMSAxOTowMDowMCBHTVQtMDUwMCAoaGV1cmUgbm9ybWFsZSBkZSBs4oCZRXN0IG5vcmQtYW3DqXJpY2FpbilcclxuICAgIC8vIHRvIGNyZWF0ZSBzYW1lIGRhdGUgYXMgc3RyaW5nLCBhZGQgdGltZSAwMCBpbiB0aGUgY3JlYXRpb25cclxuICAgIC8vIG5ldyBEYXRlKCcyMDIyLTAxLTAxIDAwOjAwOjAwJykgLT4gU2F0IEphbiAwMSAyMDIyIDAwOjAwOjAwIEdNVC0wNTAwIChoZXVyZSBub3JtYWxlIGRlIGzigJlFc3Qgbm9yZC1hbcOpcmljYWluKVxyXG4gICAgbGV0IHllYXI7XHJcbiAgICBsZXQgbW9udGggPSAnMDEnO1xyXG4gICAgbGV0IGRheSA9ICcwMSc7XHJcbiAgICBpZiAoc3RyaW5nRGF0ZS5sZW5ndGggPT09IDEwKSB7XHJcbiAgICAgICBjb25zdCBkYXRlSXRlbXMgPSBzdHJpbmdEYXRlLnNwbGl0KCctJyk7XHJcbiAgICAgICAgaWYgKGRhdGVJdGVtcy5sZW5ndGggIT09IDMpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgaW4gY29uZmlnIGRhdGUgYmVnaW4tZW5kIGZvciBvZ2NGaWx0ZXI6IERhdGUgd2l0aG91dCB0aW1lIGZvcm1hdCBuZWVkIHRvIGJlIFlZWVktTU0tREQgb3IgWVlZWScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB5ZWFyID0gZGF0ZUl0ZW1zWzBdO1xyXG4gICAgICAgICAgbW9udGggPSBkYXRlSXRlbXNbMV07XHJcbiAgICAgICAgICBkYXkgPSBkYXRlSXRlbXNbMl07XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChzdHJpbmdEYXRlLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICB5ZWFyID0gc3RyaW5nRGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZShzdHJpbmdEYXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRGF0ZShgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0gMDA6MDA6MDBgKTtcclxuICB9XHJcblxyXG4gIHJlc2V0RmlsdGVyKCkge1xyXG4gICAgbGV0IGZpbHRlck9yaWdpbkNvbmZpZyA9IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuZmlsdGVycyBhcyBPZ2NGaWx0ZXJEdXJpbmdPcHRpb25zO1xyXG5cclxuICAgIGxldCBtaW5EZWZhdWx0RGF0ZTtcclxuICAgIGxldCBtYXhEZWZhdWx0RGF0ZTtcclxuICAgIGxldCBtaW5EZWZhdWx0SVNPU3RyaW5nO1xyXG4gICAgbGV0IG1heERlZmF1bHRJU09TdHJpbmc7XHJcblxyXG4gICAgaWYgKHRoaXMuY2FsZW5kYXJUeXBlWWVhcikge1xyXG4gICAgICBpZiAoZmlsdGVyT3JpZ2luQ29uZmlnLmVuZCA9PT0gJ3RvZGF5Jykge1xyXG4gICAgICAgIGxldCB0b2RheURhdGVTdHJpbmdOb1RpbWUgPSBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tQ0EnKTsgLy8gJzIwMjItMDItMTMnXHJcbiAgICAgICAgbWF4RGVmYXVsdElTT1N0cmluZyA9IGAke3RvZGF5RGF0ZVN0cmluZ05vVGltZS5zdWJzdHJpbmcoMCw0KX0tMDEtMDFgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1heERlZmF1bHRJU09TdHJpbmcgPSBgJHtmaWx0ZXJPcmlnaW5Db25maWcuZW5kLnN1YnN0cmluZygwLDQpfS0wMS0wMWA7XHJcbiAgICAgIH1cclxuICAgICAgbWluRGVmYXVsdElTT1N0cmluZyA9IGAke2ZpbHRlck9yaWdpbkNvbmZpZy5iZWdpbi5zdWJzdHJpbmcoMCw0KX0tMDEtMDFgO1xyXG4gICAgICBtaW5EZWZhdWx0RGF0ZSA9IHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZShtaW5EZWZhdWx0SVNPU3RyaW5nKTtcclxuICAgICAgbWF4RGVmYXVsdERhdGUgPSB0aGlzLmdldERhdGVGcm9tU3RyaW5nV2l0aG91dFRpbWUobWF4RGVmYXVsdElTT1N0cmluZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtaW5EZWZhdWx0RGF0ZSA9IHRoaXMucGFyc2VGaWx0ZXIoZmlsdGVyT3JpZ2luQ29uZmlnLmJlZ2luKTtcclxuICAgICAgbWF4RGVmYXVsdERhdGUgPSB0aGlzLnBhcnNlRmlsdGVyKGZpbHRlck9yaWdpbkNvbmZpZy5lbmQpO1xyXG4gICAgICBtaW5EZWZhdWx0SVNPU3RyaW5nID0gbWluRGVmYXVsdERhdGUudG9JU09TdHJpbmcoKTtcclxuICAgICAgbWF4RGVmYXVsdElTT1N0cmluZyA9IG1heERlZmF1bHREYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCh0aGlzLmN1cnJlbnRGaWx0ZXIuYmVnaW4gIT09IG1pbkRlZmF1bHRJU09TdHJpbmcgKSB8fFxyXG4gICAgKHRoaXMuY3VycmVudEZpbHRlci5lbmQgIT09IG1heERlZmF1bHRJU09TdHJpbmcpKSB7XHJcbiAgICAgIHRoaXMuYmVnaW5WYWx1ZSA9IG1pbkRlZmF1bHREYXRlO1xyXG4gICAgICB0aGlzLmVuZFZhbHVlID0gbWF4RGVmYXVsdERhdGU7XHJcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVGaWx0ZXJTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuYWN0aXZlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5hY3RpdmUgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5hY3RpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRGaWx0ZXJTdGF0ZURpc2FibGUoKTtcclxuICAgIHRoaXMudXBkYXRlVmFsdWVzKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkYXRldGltZS1jb250YWluZXJcIj5cclxuICA8bWF0LXNsaWRlLXRvZ2dsZSBcclxuICAgICpuZ0lmPVwidGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnM/LmVuYWJsZWRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJzbGlkZXJNb2RlXCJcclxuICAgIChjaGFuZ2UpPVwibW9kZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICB7eydpZ28uZ2VvLmZpbHRlci5zbGlkZXJNb2RlVGl0bGUnIHwgdHJhbnNsYXRlfX1cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCIgKm5nSWY9XCJzbGlkZXJNb2RlXCI+XHJcbiAgICA8aWdvLW9nYy1maWx0ZXItdGltZS1zbGlkZXJcclxuICAgICAgW2JlZ2luXT1cImJlZ2luVmFsdWVcIlxyXG4gICAgICBbbWF4XT1cInRoaXMucmVzdHJpY3RlZFRvU3RlcCgpID8gdGhpcy5tYXhEYXRlIDogdGhpcy5lbmRWYWx1ZVwiXHJcbiAgICAgIFtjdXJyZW50RmlsdGVyXT1cImN1cnJlbnRGaWx0ZXJcIiBcclxuICAgICAgW2RhdGFzb3VyY2VdPVwiZGF0YXNvdXJjZVwiXHJcbiAgICAgIChjaGFuZ2VQcm9wZXJ0eSk9XCJjaGFuZ2VQcm9wZXJ0eUJ5UGFzcygkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvaWdvLW9nYy1maWx0ZXItdGltZS1zbGlkZXI+XHJcbiAgICBcclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIiFzbGlkZXJNb2RlXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInllYXItaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJjYWxlbmRhclR5cGVZZWFyXCI+XHJcbiAgICAgIDwhLS0gdG8gZW11bGF0ZSBhIHllYXItcGlja2VyLCAyIGlucHV0OiBmaXJzdCBpbnB1dCB0byBzaG93IHVzZXIganVzdCB5ZWFyIGFuZCBzZWNvbmQgaW5wdXQgaGlkZW4gYW5kIGJpbmQgXHJcbiAgICAgICAgd2l0aCB0aGUgZGF0ZXBpY2tlciAgLS0+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCAgY2xhc3M9XCJ5ZWFyLWlucHV0XCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLnRpbWVGaWx0ZXIuc3RhcnRZZWFyJ3wgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBjbGFzcz1cInllYXItaW5wdXQtb25seS15ZWFyXCJcclxuICAgICAgICAgIHZhbHVlPVwie3tvbmx5WWVhckJlZ2lufX1cIlxyXG4gICAgICAgICAgKGNoYW5nZSk9IFwieWVhck9ubHlJbnB1dENoYW5nZSgkZXZlbnQsIGJlZ2luRGF0ZXBpY2tlciwgJ2JlZ2luJylcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT0gXCJmaWx0ZXJTdGF0ZURpc2FibGVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiYmVnaW5EYXRlcGlja2VyXCIgW2Rpc2FibGVkXT1cImZpbHRlclN0YXRlRGlzYWJsZVwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gIFxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlclxyXG4gICAgICAgICAgcGFuZWxDbGFzcz1cImRhdGVwaWNrZXIteWVhclwiXHJcbiAgICAgICAgICAjYmVnaW5EYXRlcGlja2VyXHJcbiAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcclxuICAgICAgICAgIFtzdGFydEF0XT1cImJlZ2luVmFsdWVcIlxyXG4gICAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50LCBiZWdpbkRhdGVwaWNrZXIsICdiZWdpbicpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxyXG5cclxuICAgICAgICA8aW5wdXQgI2JlZ2luWWVhclxyXG4gICAgICAgICAgY2xhc3M9IFwieWVhci1pbnB1dC1oaWRlXCJcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJiZWdpbkRhdGVwaWNrZXJcIlxyXG4gICAgICAgICAgZW5hYmxlZD0gZmFsc2VcclxuICAgICAgICAgIHJlYWRvbmx5PSB0cnVlXHJcbiAgICAgICAgICBbdmFsdWVdPVwiYmVnaW5WYWx1ZT9iZWdpblZhbHVlOmhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUpXCJcclxuICAgICAgICAgIFttaW5dPVwiaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcIlxyXG4gICAgICAgICAgW21heF09XCIoZW5kVmFsdWUgJiYgKCFyZXN0cmljdGVkVG9TdGVwKCkpKT9lbmRWYWx1ZTpoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgIGNsYXNzPVwieWVhci1pbnB1dFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3snaWdvLmdlby50aW1lRmlsdGVyLmVuZFllYXInfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIGNsYXNzPVwieWVhci1pbnB1dC1vbmx5LXllYXJcIlxyXG4gICAgICAgICAgdmFsdWU9XCJ7e29ubHlZZWFyRW5kfX1cIlxyXG4gICAgICAgICAgKGNoYW5nZSk9IFwieWVhck9ubHlJbnB1dENoYW5nZSgkZXZlbnQsIGVuZERhdGVwaWNrZXIsICdlbmQnKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdID0gXCJmaWx0ZXJTdGF0ZURpc2FibGVcIj5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImVuZERhdGVwaWNrZXJcIiBbZGlzYWJsZWRdPVwiZmlsdGVyU3RhdGVEaXNhYmxlXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1kYXRlcGlja2VyXHJcbiAgICAgICAgICBwYW5lbENsYXNzPVwiZGF0ZXBpY2tlci15ZWFyXCJcclxuICAgICAgICAgICNlbmREYXRlcGlja2VyXHJcbiAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcclxuICAgICAgICAgIFtzdGFydEF0XT1cImVuZFZhbHVlXCJcclxuICAgICAgICAgICh5ZWFyU2VsZWN0ZWQpPVwieWVhclNlbGVjdGVkKCRldmVudCwgZW5kRGF0ZXBpY2tlciwgJ2VuZCcpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxyXG5cclxuICAgICAgICA8aW5wdXQgI2VuZFllYXJcclxuICAgICAgICAgIGNsYXNzPSBcInllYXItaW5wdXQtaGlkZVwiXHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZW5kRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICBlbmFibGVkPSBmYWxzZVxyXG4gICAgICAgICAgcmVhZG9ubHk9IHRydWVcclxuICAgICAgICAgIFt2YWx1ZV09XCJlbmRWYWx1ZT9lbmRWYWx1ZTpoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlKVwiXHJcbiAgICAgICAgICBbbWluXT1cImJlZ2luVmFsdWU/YmVnaW5WYWx1ZTpoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlKVwiXHJcbiAgICAgICAgICBbbWF4XT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCJcclxuICAgICAgICAgID5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlc2V0LWJ1dHRvblwiIFxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcigpXCIgXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIiBcclxuICAgICAgICBbZGlzYWJsZWRdPSBcImZpbHRlclN0YXRlRGlzYWJsZVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tyZXNldEljb259fVwiPjwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBcclxuICAgICAgICBjbGFzcz0ndG9nZ2xlLWZpbHRlci1zdGF0ZScgXHJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXJTdGF0ZSgpXCIgXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnRvZ2dsZUZpbHRlclN0YXRlJyB8IHRyYW5zbGF0ZVwiIFxyXG4gICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIFxyXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgIFtjaGVja2VkXT1cIiFmaWx0ZXJTdGF0ZURpc2FibGVcIj5cclxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZS1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cImNhbGVuZGFyVHlwZSgpIT09J3llYXInXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZS1pbnB1dFwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRhdGUtaW5wdXRcIj5cclxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiYmVnaW5EYXRlcGlja2VyXCIgW2Rpc2FibGVkXT0gXCJmaWx0ZXJTdGF0ZURpc2FibGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgIDxpbnB1dCAjYmVnaW5cclxuICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiYmVnaW5EYXRlcGlja2VyXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uZ2VvLnRpbWVGaWx0ZXIuc3RhcnREYXRlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXHJcbiAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImNoYW5nZVRlbXBvcmFsUHJvcGVydHkoYmVnaW4udmFsdWUsIDEpXCJcclxuICAgICAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZGF0ZUZpbHRlci5iaW5kKHRoaXMsICdiZWdpbicpXCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cImJlZ2luVmFsdWU/YmVnaW5WYWx1ZTpoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlKVwiXHJcbiAgICAgICAgICAgIFttaW5dPVwiaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcIlxyXG4gICAgICAgICAgICBbbWF4XT1cIihlbmRWYWx1ZSAmJiAoIXJlc3RyaWN0ZWRUb1N0ZXAoKSkpP2VuZFZhbHVlOmhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCIgXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IFwiZmlsdGVyU3RhdGVEaXNhYmxlXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGxlclwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAjYmVnaW5EYXRlcGlja2VyXHJcbiAgICAgICAgICAgIFtzdGFydFZpZXddPVwiY2FsZW5kYXJWaWV3KClcIlxyXG4gICAgICAgICAgICBbc3RhcnRBdF09XCJiZWdpblZhbHVlXCJcclxuICAgICAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50LCBiZWdpbkRhdGVwaWNrZXIsICdiZWdpbicpXCJcclxuICAgICAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwibW9udGhTZWxlY3RlZCgkZXZlbnQsIGJlZ2luRGF0ZXBpY2tlciwgJ2JlZ2luJylcIj5cclxuICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXRcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImhvdXItaW5wdXRcIiAqbmdJZj1cImNhbGVuZGFyVHlwZSgpPT09J2RhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8udGltZUZpbHRlci5ob3VyJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImJlZ2luSG91ckZvcm1Db250cm9sXCJcclxuICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShiZWdpbi52YWx1ZSwgMSlcIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBiZWdpbkhvdXJzXCIgW3ZhbHVlXT1cImhvdXJcIj57e2hvdXJ9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1pbnV0ZS1pbnB1dFwiICpuZ0lmPVwiY2FsZW5kYXJUeXBlKCk9PT0nZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3snaWdvLmdlby50aW1lRmlsdGVyLm1pbnV0ZScgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJiZWdpbk1pbnV0ZUZvcm1Db250cm9sXCJcclxuICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShiZWdpbi52YWx1ZSwgMSlcIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIGJlZ2luTWludXRlc1wiIFt2YWx1ZV09XCJtaW51dGVcIj57e21pbnV0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZS1pbnB1dFwiICpuZ0lmPVwiIXJlc3RyaWN0ZWRUb1N0ZXAoKVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRhdGUtaW5wdXRcIj5cclxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZW5kRGF0ZXBpY2tlclwiIFtkaXNhYmxlZF09IFwiZmlsdGVyU3RhdGVEaXNhYmxlXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxpbnB1dCAjZW5kXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJlbmREYXRlcGlja2VyXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8udGltZUZpbHRlci5lbmREYXRlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJjaGFuZ2VUZW1wb3JhbFByb3BlcnR5KGVuZC52YWx1ZSwgMilcIlxyXG4gICAgICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImRhdGVGaWx0ZXIuYmluZCh0aGlzLCAnZW5kJylcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJlbmRWYWx1ZT9lbmRWYWx1ZTpoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlKVwiXHJcbiAgICAgICAgICAgICAgW21pbl09XCJiZWdpblZhbHVlP2JlZ2luVmFsdWU6aGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcIlxyXG4gICAgICAgICAgICAgIFttYXhdPVwiaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSlcIiBcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSBcImZpbHRlclN0YXRlRGlzYWJsZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGxlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNlbmREYXRlcGlja2VyXHJcbiAgICAgICAgICAgICAgW3N0YXJ0Vmlld109XCJjYWxlbmRhclZpZXcoKVwiXHJcbiAgICAgICAgICAgICAgW3N0YXJ0QXRdPVwiZW5kVmFsdWVcIlxyXG4gICAgICAgICAgICAgICh5ZWFyU2VsZWN0ZWQpPVwieWVhclNlbGVjdGVkKCRldmVudCwgZW5kRGF0ZXBpY2tlciwgJ2VuZCcpXCJcclxuICAgICAgICAgICAgICAobW9udGhTZWxlY3RlZCk9XCJtb250aFNlbGVjdGVkKCRldmVudCwgZW5kRGF0ZXBpY2tlciwgJ2VuZCcpXCI+XHJcbiAgICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0XCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJob3VyLWlucHV0XCIgKm5nSWY9XCJjYWxlbmRhclR5cGUoKT09PSdkYXRldGltZSdcIiA+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3snaWdvLmdlby50aW1lRmlsdGVyLmhvdXInIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZW5kSG91ckZvcm1Db250cm9sXCJcclxuICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShlbmQudmFsdWUsIDIpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGhvdXIgb2YgZW5kSG91cnNcIiBbdmFsdWVdPVwiaG91clwiPnt7aG91cn19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWludXRlLWlucHV0XCIgKm5nSWY9XCJjYWxlbmRhclR5cGUoKT09PSdkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLnRpbWVGaWx0ZXIubWludXRlJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImVuZE1pbnV0ZUZvcm1Db250cm9sXCJcclxuICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShlbmQudmFsdWUsIDIpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBlbmRNaW51dGVzXCIgW3ZhbHVlXT1cIm1pbnV0ZVwiPnt7bWludXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlc2V0LWJ1dHRvblwiIFxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcigpXCIgXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIiBcclxuICAgICAgICBbZGlzYWJsZWRdPSBcImZpbHRlclN0YXRlRGlzYWJsZVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tyZXNldEljb259fVwiPjwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBcclxuICAgICAgICBjbGFzcz1cInRvZ2dsZS1maWx0ZXItc3RhdGVcIiBcclxuICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUZpbHRlclN0YXRlKClcIiBcclxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBcclxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIudG9nZ2xlRmlsdGVyU3RhdGUnIHwgdHJhbnNsYXRlXCIgXHJcbiAgICAgICAgW2NoZWNrZWRdPSBcIiFmaWx0ZXJTdGF0ZURpc2FibGVcIj5cclxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
898
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFFVCxNQUFNLEVBQ04sWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBUXhFLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7SUNqQnpDLDJDQUdnQztJQUQ5Qiw4UEFBd0IscUxBQ2QsZUFBQSx5QkFBa0IsQ0FBQSxJQURKO0lBRXhCLFlBQ0Y7O0lBQUEsaUJBQW1COzs7SUFIakIsMkNBQXdCO0lBRXhCLGVBQ0Y7SUFERSx1RkFDRjs7OztJQUVBLDhCQUFpRCxvQ0FBQTtJQU03QywrTUFBa0IsZUFBQSxtQ0FBNEIsQ0FBQSxJQUFDO0lBRWpELGlCQUE2QixFQUFBOzs7SUFOM0IsZUFBb0I7SUFBcEIseUNBQW9CLHFFQUFBLHVDQUFBLGlDQUFBOzs7O0lBWXRCLDhCQUEyRCx5QkFBQSxnQkFBQTtJQUk1QyxZQUE2Qzs7SUFBQSxpQkFBWTtJQUNwRSxpQ0FNRztJQUZELG1OQUFXLGVBQUEsMENBQTZDLE9BQU8sQ0FBQyxDQUFBLElBQUM7SUFKbkUsaUJBTUc7SUFDSCw0Q0FBaUg7SUFFakgsOENBTUc7SUFE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Z0M7UUFDOUIsaUdBS21CO1FBRW5CLHVFQVVNO1FBRU4sdUVBaU1NO1FBQ1IsaUJBQU07O1FBcE5ELGVBQStDO1FBQS9DLCtHQUErQztRQU1uQixlQUFnQjtRQUFoQixxQ0FBZ0I7UUFZekMsZUFBaUI7UUFBakIsc0NBQWlCOzt1RkRLWixzQkFBc0I7Y0FMbEMsU0FBUzsyQkFDRSxxQkFBcUI7dUVBS3RCLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxhQUFhO2tCQUFyQixLQUFLO1lBQ0ksY0FBYztrQkFBdkIsTUFBTTtZQWdDeUIsaUJBQWlCO2tCQUFoRCxTQUFTO21CQUFDLG1CQUFtQjtZQUNJLG1CQUFtQjtrQkFBcEQsU0FBUzttQkFBQyxxQkFBcUI7WUFDUixTQUFTO2tCQUFoQyxTQUFTO21CQUFDLFdBQVc7WUFDQSxPQUFPO2tCQUE1QixTQUFTO21CQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJPcGVyYXRvciB9IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5lbnVtJztcbmltcG9ydCB7IE9HQ0ZpbHRlclRpbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXItdGltZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucyxcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2UsXG4gIE9nY0ZpbHRlckR1cmluZ09wdGlvbnNcbn0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgZGVmYXVsdCBhcyBtb21lbnQgfSBmcm9tICdtb21lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tb2djLWZpbHRlci10aW1lJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29nYy1maWx0ZXItdGltZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29nYy1maWx0ZXItdGltZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlclRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcbiAgQElucHV0KCkgY3VycmVudEZpbHRlcjogYW55O1xuICBAT3V0cHV0KCkgY2hhbmdlUHJvcGVydHk6IEV2ZW50RW1pdHRlcjx7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBwb3M6IG51bWJlcjtcbiAgICByZWZyZXNoRmlsdGVyOiBib29sZWFuO1xuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGJlZ2luSG91cnM6IG51bWJlcltdO1xuICBlbmRIb3VyczogbnVtYmVyW107XG4gIGJlZ2luTWludXRlczogbnVtYmVyW107XG4gIGVuZE1pbnV0ZXM6IG51bWJlcltdO1xuICBiZWdpbkhvdXJGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgYmVnaW5NaW51dGVGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgZW5kSG91ckZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBlbmRNaW51dGVGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgX2JlZ2luVmFsdWU6IERhdGU7XG4gIF9lbmRWYWx1ZTogRGF0ZTtcbiAgcmVhZG9ubHkgX2RlZmF1bHRNaW46IHN0cmluZyA9ICcxOTAwLTAxLTAxJztcbiAgcmVhZG9ubHkgX2RlZmF1bHRNYXg6IHN0cmluZyA9ICcyMDUyLTAxLTA2JztcbiAgcmVhZG9ubHkgX2RlZmF1bHREaXNwbGF5Rm9ybWF0OiBzdHJpbmcgPSAnREQvTU0vWVlZWSBISDptbSBBJztcbiAgcmVhZG9ubHkgX2RlZmF1bHRTbGlkZXJNb2RlRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIG9nY0ZpbHRlck9wZXJhdG9yID0gT2djRmlsdGVyT3BlcmF0b3I7XG4gIHB1YmxpYyBzbGlkZXJNb2RlID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdFN0ZXBNaWxsaXNlY29uZCA9IDYwMDAwO1xuICBwdWJsaWMgb3B0aW9uczogT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xuXG4gIHB1YmxpYyBvbmx5WWVhckJlZ2luOiBudW1iZXI7XG4gIHB1YmxpYyBvbmx5WWVhckVuZDogbnVtYmVyO1xuICBwdWJsaWMgY2FsZW5kYXJUeXBlWWVhciA9IGZhbHNlO1xuICBwdWJsaWMgcmVzZXRJY29uID0gJ3JlcGxheSc7XG4gIHB1YmxpYyBmaWx0ZXJTdGF0ZURpc2FibGU6IGJvb2xlYW47XG5cbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZXBpY2tlclRpbWUnKSBlbmREYXRlcGlja2VyVGltZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnYmVnaW5EYXRlcGlja2VyVGltZScpIGJlZ2luRGF0ZXBpY2tlclRpbWU6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2JlZ2luVGltZScpIGJlZ2luVGltZTogSFRNTElucHV0RWxlbWVudDtcbiAgQFZpZXdDaGlsZCgnZW5kVGltZScpIGVuZFRpbWU6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgZ2V0IHN0ZXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMuc3RlcERhdGVcbiAgICAgID8gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMuc3RlcERhdGVcbiAgICAgIDogdGhpcy5jdXJyZW50RmlsdGVyLnN0ZXA7XG4gIH1cblxuICBnZXQgc3RlcE1pbGxpc2Vjb25kcygpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0ZXAgPSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc01pbGxpc2Vjb25kcygpO1xuICAgIHJldHVybiBzdGVwID09PSAwID8gdGhpcy5kZWZhdWx0U3RlcE1pbGxpc2Vjb25kIDogc3RlcDtcbiAgfVxuXG4gIHNldCBiZWdpblZhbHVlKGJlZ2luOiBEYXRlKSB7XG4gICAgdGhpcy5fYmVnaW5WYWx1ZSA9IGJlZ2luO1xuICB9XG5cbiAgZ2V0IGJlZ2luVmFsdWUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2JlZ2luVmFsdWU7XG4gIH1cblxuICBzZXQgZW5kVmFsdWUoZW5kOiBEYXRlKSB7XG4gICAgdGhpcy5fZW5kVmFsdWUgPSBlbmQ7XG4gIH1cblxuICBnZXQgZW5kVmFsdWUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZFZhbHVlO1xuICB9XG5cbiAgZ2V0IHNsaWRlckludGVydmFsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbHRlci5zbGlkZXJJbnRlcnZhbCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IDIwMDBcbiAgICAgIDogdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlckludGVydmFsO1xuICB9XG5cbiAgZ2V0IG1heERhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSA/IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUgOiB0aGlzLl9kZWZhdWx0TWF4O1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyLmRpc3BsYXlGb3JtYXQgPyB0aGlzLmN1cnJlbnRGaWx0ZXIuZGlzcGxheUZvcm1hdCA6IHRoaXMuX2RlZmF1bHREaXNwbGF5Rm9ybWF0O1xuICB9XG5cbiAgcHVibGljIGZpbHRlckJlZ2luRnVuY3Rpb247XG4gIHB1YmxpYyBmaWx0ZXJFbmRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb2djRmlsdGVyVGltZVNlcnZpY2U6IE9HQ0ZpbHRlclRpbWVTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCl7XG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5zbGlkZXJPcHRpb25zKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucy5lbmFibGVkID0gdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnMuZW5hYmxlZCA6IHRoaXMuX2RlZmF1bHRTbGlkZXJNb2RlRW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5iZWdpblZhbHVlID0gdGhpcy5wYXJzZUZpbHRlcih0aGlzLmhhbmRsZU1pbigpKTtcbiAgICB0aGlzLmVuZFZhbHVlID0gdGhpcy5wYXJzZUZpbHRlcih0aGlzLmhhbmRsZU1heCgpKTtcblxuICAgIHRoaXMub25seVllYXJCZWdpbiA9IHRoaXMuYmVnaW5WYWx1ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHRoaXMub25seVllYXJFbmQgPSB0aGlzLmVuZFZhbHVlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgdGhpcy5jYWxlbmRhclR5cGVZZWFyID0gdGhpcy5pc0NhbGVuZGFyWWVhck1vZGUoKTtcbiAgICB0aGlzLnNldEZpbHRlclN0YXRlRGlzYWJsZSgpO1xuICAgIHRoaXMudXBkYXRlSG91cnNNaW51dGVzQXJyYXkoKTtcbiAgICAvLyB1cGRhdGUgdmFsdWUgZm9yIG5vdyB2YWx1ZVxuICAgIHRoaXMudXBkYXRlVmFsdWVzKCk7XG4gICAgdGhpcy5kYXRlRmlsdGVyKHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiwgJ2JlZ2luJyk7XG4gICAgdGhpcy5kYXRlRmlsdGVyKHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24sICdlbmQnKTtcbiAgfVxuXG4gIHBhcnNlRmlsdGVyKGZpbHRlcik6IERhdGUge1xuICAgIGlmICghZmlsdGVyKXtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH0gZWxzZSBpZiAoIGlzTmFOKCBuZXcgRGF0ZShmaWx0ZXIpLmdldFRpbWUoKSApICnCoHtcbiAgICAgIGlmIChmaWx0ZXIuc2VhcmNoKCdub3cnKSA+PSAwICnCoHtcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBmaWx0ZXIubWF0Y2goL3llYXJzfG1vbnRoc3x3ZWVrc3xkYXlzfGhvdXJzfHNlY29uZHMvKTtcbiAgICAgICAgaWYgKGZpbHRlci5tYXRjaCgvXFwrLykpIHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbEludCA9IHBhcnNlSW50KFxuICAgICAgICAgICAgZmlsdGVyLnN1YnN0cmluZyhmaWx0ZXIuc2VhcmNoKCcrJykgKyAxLCBpbnRlcnZhbC5pbmRleCksXG4gICAgICAgICAgICAxMFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG1vbWVudCgpLmFkZChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXIubWF0Y2goL1xcLS8pKSB7XG4gICAgICAgICAgY29uc3QgaW50ZXJ2YWxJbnQgPSBwYXJzZUludChcbiAgICAgICAgICAgIGZpbHRlci5zdWJzdHJpbmcoZmlsdGVyLnNlYXJjaCgnLScpICsgMSwgaW50ZXJ2YWwuaW5kZXgpLFxuICAgICAgICAgICAgMTBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGZpbHRlci5zZWFyY2goJ3RvZGF5JykgPj0gMCl7XG4gICAgICAgIGNvbnN0IF9ub3cgPSBtb21lbnQoKS5lbmRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gZmlsdGVyLm1hdGNoKC95ZWFyc3xtb250aHN8d2Vla3N8ZGF5c3xob3Vyc3xzZWNvbmRzLyk7XG4gICAgICAgIGlmICggZmlsdGVyLm1hdGNoKC9cXCsvKSApIHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbEludCA9IHBhcnNlSW50KCBmaWx0ZXIuc3Vic3RyaW5nKGZpbHRlci5zZWFyY2goJysnKSArIDEsIGludGVydmFsLmluZGV4KSwgMTAgKTtcbiAgICAgICAgICByZXR1cm4gbW9tZW50KF9ub3cpLmFkZChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICggZmlsdGVyLm1hdGNoKC9cXC0vKSApIHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbEludCA9IHBhcnNlSW50KGZpbHRlci5zdWJzdHJpbmcoZmlsdGVyLnNlYXJjaCgnLScpICsgMSwgaW50ZXJ2YWwuaW5kZXgpLCAxMCk7XG4gICAgICAgICAgcmV0dXJuIG1vbWVudChfbm93KS5zdWJ0cmFjdChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfbm93O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuY2FsZW5kYXJNb2RlWWVhcikge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZShmaWx0ZXIpO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXIgPyBuZXcgRGF0ZShmaWx0ZXIpIDogbmV3IERhdGUoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VUZW1wb3JhbFByb3BlcnR5KHZhbHVlLCBwb3NpdGlvbj8sIHJlZnJlc2hGaWx0ZXIgPSB0cnVlKSB7XG4gICAgbGV0IHZhbHVlVG1wID0gdGhpcy5nZXREYXRlVGltZSh2YWx1ZSwgcG9zaXRpb24pO1xuICAgIGlmICh0aGlzLmlzQ2FsZW5kYXJZZWFyTW9kZSgpKSB7XG4gICAgICBsZXQgZGF0ZVN0cmluZ0Zyb21ZZWFyTm90aW1lO1xuICAgICAgaWYgKHBvc2l0aW9uID09PSAxKSB7XG4gICAgICAgIHRoaXMuYmVnaW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9ubHlZZWFyQmVnaW4gPSB0aGlzLmJlZ2luVmFsdWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgZGF0ZVN0cmluZ0Zyb21ZZWFyTm90aW1lID0gYCR7dGhpcy5vbmx5WWVhckJlZ2lufS0wMS0wMWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25seVllYXJFbmQgPSB0aGlzLmVuZFZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGRhdGVTdHJpbmdGcm9tWWVhck5vdGltZSA9IGAke3RoaXMub25seVllYXJFbmR9LTAxLTAxYDtcbiAgICAgIH1cbiAgICAgIC8vIGNhbGwgc2VydmljZSB3aXRoIHN0cmluZyBkYXRlIHdpdGhvdXQgdGltZVxuICAgICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eS5uZXh0KHsgdmFsdWU6IGRhdGVTdHJpbmdGcm9tWWVhck5vdGltZSwgcG9zOiBwb3NpdGlvbiwgcmVmcmVzaEZpbHRlciB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uID09PSAyICYmIHRoaXMuY2FsZW5kYXJUeXBlKCkgPT09ICdkYXRlJyAmJiAhdGhpcy5zbGlkZXJNb2RlKSB7XG4gICAgICAvKiBBYm92ZSBtb250aDogc2VlIHllYXJTZWxlY3RlZCBvciBtb250aFNlbGVjdGVkICovXG4gICAgICB2YWx1ZVRtcCA9IG1vbWVudCh2YWx1ZVRtcCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA9PT0gMSkge1xuICAgICAgdGhpcy5iZWdpblZhbHVlID0gdmFsdWVUbXA7XG4gICAgICBpZiAodGhpcy5yZXN0cmljdGVkVG9TdGVwKCkpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VUZW1wb3JhbFByb3BlcnR5KHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2UuYWRkU3RlcCh2YWx1ZVRtcCwgdGhpcy5zdGVwTWlsbGlzZWNvbmRzKSwgMiwgcmVmcmVzaEZpbHRlcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5kVmFsdWUgPSB2YWx1ZVRtcDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVIb3Vyc01pbnV0ZXNBcnJheSgpO1xuICAgIHRoaXMuY2hhbmdlUHJvcGVydHkubmV4dCh7IHZhbHVlOiB2YWx1ZVRtcC50b0lTT1N0cmluZygpLCBwb3M6IHBvc2l0aW9uLCByZWZyZXNoRmlsdGVyIH0pO1xuICB9XG5cbiAgaGFuZGxlRGF0ZSh2YWx1ZSk6IERhdGUge1xuICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ3N0cmluZycgJiYgdGhpcy5jdXJyZW50RmlsdGVyLmNhbGVuZGFyTW9kZVllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGVGcm9tU3RyaW5nV2l0aG91dFRpbWUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9XG5cbiAgY2FsZW5kYXJUeXBlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuY2FsZW5kYXJNb2RlWWVhcikge1xuICAgICAgcmV0dXJuICd5ZWFyJztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RlcE1pbGxpc2Vjb25kcyA8IDg2NDAwMDAwKSB7XG4gICAgICByZXR1cm4gJ2RhdGV0aW1lJztcbiAgICB9XG4gICAgcmV0dXJuICdkYXRlJztcbiAgfVxuXG4gIGlzQ2FsZW5kYXJZZWFyTW9kZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jYWxlbmRhclR5cGUoKSA9PT0gJ3llYXInKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHllYXJPbmx5SW5wdXRDaGFuZ2UoY2hhbmdlRXZlbnQsIGRhdGVQaWNrZXI/OiBhbnksIHByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgeWVhciA9IGNoYW5nZUV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5nZXREYXRlRnJvbVN0cmluZ1dpdGhvdXRUaW1lKHllYXIpO1xuICAgIHRoaXMueWVhclNlbGVjdGVkKGRhdGUsIGRhdGVQaWNrZXIsIHByb3BlcnR5KTtcbiAgfVxuXG4gIHllYXJTZWxlY3RlZCh5ZWFyLCBkYXRlUGlja2VyPzogYW55LCBwcm9wZXJ0eT86IHN0cmluZywgcmVmcmVzaEZpbHRlciA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNZZWFyRHVyYXRpb24odGhpcy5zdGVwKSkge1xuICAgICAgaWYgKGRhdGVQaWNrZXIpIHtcbiAgICAgICAgZGF0ZVBpY2tlci5jbG9zZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BlcnR5ID09PSAnZW5kJykge1xuICAgICAgICAvLyBjaGFuZ2UgdmFsdWUgMDEgamFuIHRvIDMxIGRlYyBzYW1lIHllYXJcbiAgICAgICAgeWVhciA9IG1vbWVudCh5ZWFyKS5lbmRPZigneWVhcicpLnRvRGF0ZSgpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9PT0gJ2JlZ2luJyAmJiB0aGlzLnJlc3RyaWN0ZWRUb1N0ZXAoKSAmJiAhdGhpcy5jYWxlbmRhclR5cGVZZWFyKSB7XG4gICAgICAgIHRoaXMueWVhclNlbGVjdGVkKHllYXIsIHVuZGVmaW5lZCwgJ2VuZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VUZW1wb3JhbFByb3BlcnR5KHllYXIsIHByb3BlcnR5ID09PSAnYmVnaW4nID8gMSA6IDIsIHJlZnJlc2hGaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG1vbnRoU2VsZWN0ZWQobW9udGgsIGRhdGVQaWNrZXI/OiBhbnksIHByb3BlcnR5Pzogc3RyaW5nLCByZWZyZXNoRmlsdGVyID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01vbnRoRHVyYXRpb24odGhpcy5zdGVwKSkge1xuICAgICAgaWYgKGRhdGVQaWNrZXIpIHtcbiAgICAgICAgZGF0ZVBpY2tlci5jbG9zZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BlcnR5ID09PSAnZW5kJykge1xuICAgICAgICBtb250aCA9IG1vbWVudChtb250aCkuZW5kT2YoJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICB9IGVsc2UgaWYgKHByb3BlcnR5ID09PSAnYmVnaW4nICYmIHRoaXMucmVzdHJpY3RlZFRvU3RlcCgpKSB7XG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZChtb250aCwgdW5kZWZpbmVkLCAnZW5kJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmNoYW5nZVRlbXBvcmFsUHJvcGVydHkobW9udGgsIHByb3BlcnR5ID09PSAnYmVnaW4nID8gMSA6IDIsIHJlZnJlc2hGaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGVuZGFyVmlldygpIHtcbiAgICBjb25zdCB0ZXN0ID0gdGhpcy5zdGVwTWlsbGlzZWNvbmRzO1xuICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhcbiAgICAgIHRoaXMucGFyc2VGaWx0ZXIodGhpcy5jdXJyZW50RmlsdGVyLmVuZCkuZ2V0VGltZSgpIC1cbiAgICAgICAgdGhpcy5wYXJzZUZpbHRlcih0aGlzLmN1cnJlbnRGaWx0ZXIuYmVnaW4pLmdldFRpbWUoKVxuICAgICk7XG4gICAgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzWWVhckR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcbiAgICAgIHJldHVybiAnbXVsdGkteWVhcic7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01vbnRoRHVyYXRpb24odGhpcy5zdGVwKSkge1xuICAgICAgcmV0dXJuICd5ZWFyJztcbiAgICB9IGVsc2UgaWYgKHRlc3QgPCA4NjQwMDAwMCAmJiBkaWZmIDwgODY0MDAwMDApIHtcbiAgICAgIHJldHVybiAnY2xvY2snO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ21vbnRoJztcbiAgICB9XG4gIH1cblxuICBkYXRlRmlsdGVyKHR5cGU6IHN0cmluZywgZGF0ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZGF0ZVZhbHVlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgY29uc3QgZGlmZiA9IGRhdGVWYWx1ZS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSh0aGlzLmhhbmRsZU1pbigpKS5nZXRUaW1lKCk7XG5cbiAgICBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNZZWFyRHVyYXRpb24odGhpcy5zdGVwKSkge1xuICAgICAgY29uc3QgbW9udGhEaWZmID0gbW9tZW50KGRhdGVWYWx1ZSkuZGlmZihtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksICd5ZWFycycsIHRydWUpO1xuICAgICAgaWYgKCB0eXBlID09PSAnZW5kJyApIHtcbiAgICAgICAgY29uc3QgZGF0ZVZhbHVlUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlKS5hZGQoMSwgJ2QnKTtcbiAgICAgICAgY29uc3QgbW9udGhEaWZmUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlUGx1czEpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAneWVhcnMnLCB0cnVlKTtcbiAgICAgICAgdGhpcy5maWx0ZXJFbmRGdW5jdGlvbiA9IChtb250aERpZmZQbHVzMSAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzWWVhcnMoKSkgPT09IDA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICdiZWdpbicgKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9IChtb250aERpZmYgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc1llYXJzKCkpID09PSAwO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzTW9udGhEdXJhdGlvbih0aGlzLnN0ZXApKSB7XG4gICAgICBjb25zdCBtb250aERpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSwgJ21vbnRocycsIHRydWUpO1xuICAgICAgaWYgKCB0eXBlID09PSAnZW5kJyApIHtcbiAgICAgICAgY29uc3QgZGF0ZVZhbHVlUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlKS5hZGQoMSwgJ2QnKTtcbiAgICAgICAgY29uc3QgbW9udGhEaWZmUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlUGx1czEpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAnbW9udGhzJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPSAobW9udGhEaWZmUGx1czEgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc01vbnRocygpKSA9PT0gMDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gJ2JlZ2luJyApIHtcbiAgICAgICAgdGhpcy5maWx0ZXJCZWdpbkZ1bmN0aW9uID0gKG1vbnRoRGlmZiAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzTW9udGhzKCkpID09PSAwO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc1dlZWtEdXJhdGlvbih0aGlzLnN0ZXApKSB7XG4gICAgICBjb25zdCB3ZWVrRGlmZiA9IG1vbWVudChkYXRlVmFsdWUpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAnd2Vla3MnLCB0cnVlKTtcbiAgICAgIGlmICggdHlwZSA9PT0gJ2VuZCcgKSB7XG4gICAgICAgIGNvbnN0IGRhdGVWYWx1ZVBsdXMxID0gbW9tZW50KGRhdGVWYWx1ZSkuYWRkKDEsICdkJyk7XG4gICAgICAgIGNvbnN0IHdlZWtEaWZmUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlUGx1czEpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAnd2Vla3MnLCB0cnVlKTtcbiAgICAgICAgdGhpcy5maWx0ZXJFbmRGdW5jdGlvbiA9ICh3ZWVrRGlmZlBsdXMxICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNXZWVrcygpKSA9PT0gMDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gJ2JlZ2luJyApIHtcbiAgICAgICAgdGhpcy5maWx0ZXJCZWdpbkZ1bmN0aW9uID0gKHdlZWtEaWZmICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNXZWVrcygpKSA9PT0gMDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNEYXlEdXJhdGlvbih0aGlzLnN0ZXApKSB7XG4gICAgICBjb25zdCBkYXlEaWZmID0gbW9tZW50KGRhdGVWYWx1ZSkuZGlmZihtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksICdkYXlzJywgdHJ1ZSk7XG4gICAgICBpZiAoIHR5cGUgPT09ICdlbmQnICkge1xuICAgICAgICBjb25zdCBkYXRlVmFsdWVQbHVzMSA9IG1vbWVudChkYXRlVmFsdWUpLmFkZCgxLCAnZCcpO1xuICAgICAgICBjb25zdCBkYXlEaWZmUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlUGx1czEpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAnZGF5cycsIHRydWUpO1xuICAgICAgICBjb25zdCBfbW9kID0gKGRheURpZmZQbHVzMSAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzRGF5cygpKTtcbiAgICAgICAgdGhpcy5maWx0ZXJFbmRGdW5jdGlvbiA9IChfbW9kIDwgMC4wMDAwMDAxICYmIF9tb2QgPiAtMC4wMDAwMDAxKSB8fCBfbW9kID09PSAwIDsgLy8gMSBtaWxsaXNlY29uZCA9IDEuMTU3NDA3NDA3NDA3NDA3NmUtOFxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAnYmVnaW4nICkge1xuICAgICAgICBjb25zdCBfbW9kID0gKChkYXlEaWZmICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNEYXlzKCkpICsgMSk7XG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9IChfbW9kIDwgMC4wMDAwMDAxICYmIF9tb2QgPiAtMC4wMDAwMDAxICYmIF9tb2QgIT09IDApIHx8IF9tb2QgPT09IDEgOyAvLyAxIG1pbGxpc2Vjb25kID0gMS4xNTc0MDc0MDc0MDc0MDc2ZS04XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCB0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc0hvdXJEdXJhdGlvbih0aGlzLnN0ZXApICkge1xuICAgICAgaWYgKCB0eXBlID09PSAnZW5kJyApIHtcbiAgICAgICAgY29uc3QgaG91ckRpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSwgJ2hvdXJzJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPSAoaG91ckRpZmYgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc0hvdXJzKCkpID09PSAwO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiZWdpbicpIHtcbiAgICAgICAgY29uc3QgaG91ckRpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSwgJ2hvdXJzJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9IChob3VyRGlmZiAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzSG91cnMoKSkgPT09IDA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCB0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01pbnV0ZUR1cmF0aW9uKHRoaXMuc3RlcCkgKSB7XG4gICAgICBpZiAoIHR5cGUgPT09ICdlbmQnICkge1xuICAgICAgICB0aGlzLmZpbHRlckVuZEZ1bmN0aW9uID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmVnaW4nKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlckVuZEZ1bmN0aW9uID0gZGlmZiAlIHRoaXMuc3RlcE1pbGxpc2Vjb25kcyA9PT0gMDtcbiAgICB0aGlzLmZpbHRlckJlZ2luRnVuY3Rpb24gPSBkaWZmICUgdGhpcy5zdGVwTWlsbGlzZWNvbmRzID09PSAwO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGdldERhdGVUaW1lKGRhdGUsIHBvcykge1xuICAgIGNvbnN0IHZhbHVldG1wID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgbGV0IHZhbHVldG1wMjtcbiAgICBpZiAoIXRoaXMuc2xpZGVyTW9kZSkge1xuICAgICAgc3dpdGNoIChwb3MpIHtcbiAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5jYWxlbmRhck1vZGVZZWFyKSB7XG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycygwLCAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycyhcbiAgICAgICAgICAgIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5jYWxlbmRhck1vZGVZZWFyKSB7XG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycygwLCAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycyhcbiAgICAgICAgICAgICAgdGhpcy5lbmRIb3VyRm9ybUNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICAgIHRoaXMuZW5kTWludXRlRm9ybUNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVldG1wMiA/IHZhbHVldG1wMiA6IHZhbHVldG1wKTtcbiAgfVxuXG4gIGhhbmRsZU1pbnV0ZUluY3JlbWVudCgpIHtcbiAgICBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNNaW51dGVEdXJhdGlvbih0aGlzLnN0ZXApKSB7XG4gICAgICBpZiAodGhpcy5zdGVwTWlsbGlzZWNvbmRzIDwgMzYwMDAwMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGVwTWlsbGlzZWNvbmRzIC8gMTAwMCA9PT0gNjAgPyAxIDogdGhpcy5zdGVwTWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zdGVwTWlsbGlzZWNvbmRzICUgMzYwMDAwMCkgLyA2MDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzSG91ckR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcbiAgICAgIHJldHVybiA2MDtcbiAgICB9XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBoYW5kbGVIb3VySW5jcmVtZW50KCkge1xuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc0hvdXJEdXJhdGlvbih0aGlzLnN0ZXApKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGVwTWlsbGlzZWNvbmRzIC8gMTAwMCAvIDYwIC8gNjA7XG4gICAgfVxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgZnVsbEJlZ2luSG91cnNBcnJheShjaGVja0VuZFZhbHVlPykge1xuICAgIGlmIChjaGVja0VuZFZhbHVlKSB7XG4gICAgICB0aGlzLmJlZ2luSG91cnMgPSBBcnJheS5mcm9tKFxuICAgICAgICB7XG4gICAgICAgICAgbGVuZ3RoOlxuICAgICAgICAgICAgKHRoaXMuZW5kSG91ckZvcm1Db250cm9sLnZhbHVlIC0gMCkgLyB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKSArIDFcbiAgICAgICAgfSxcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmVnaW5Ib3VycyA9IEFycmF5LmZyb20oXG4gICAgICAgIHsgbGVuZ3RoOiAoMjMgLSAwKSAvIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpICsgMSB9LFxuICAgICAgICAoXywgaSkgPT4gMCArIGkgKiB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5iZWdpbkhvdXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmJlZ2luVmFsdWUuZ2V0SG91cnMoKSk7XG4gIH1cblxuICBmdWxsRW5kSG91cnNBcnJheShjaGVja0VuZFZhbHVlPykge1xuICAgIGlmIChjaGVja0VuZFZhbHVlKSB7XG4gICAgICB0aGlzLmVuZEhvdXJzID0gQXJyYXkuZnJvbShcbiAgICAgICAge1xuICAgICAgICAgIGxlbmd0aDpcbiAgICAgICAgICAgICgyMyAtIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wudmFsdWUpIC9cbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KCkgK1xuICAgICAgICAgICAgMVxuICAgICAgICB9LFxuICAgICAgICAoXywgaSkgPT5cbiAgICAgICAgICB0aGlzLmJlZ2luSG91ckZvcm1Db250cm9sLnZhbHVlICsgaSAqIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuZEhvdXJzID0gQXJyYXkuZnJvbShcbiAgICAgICAgeyBsZW5ndGg6ICgyMyAtIDApIC8gdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KCkgKyAxIH0sXG4gICAgICAgIChfLCBpKSA9PiAwICsgaSAqIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmVuZFZhbHVlLmdldEhvdXJzKCkpO1xuICB9XG5cbiAgZnVsbEJlZ2luTWludXRlc0FycmF5KGNoZWNrRW5kVmFsdWU/KSB7XG4gICAgaWYgKGNoZWNrRW5kVmFsdWUpIHtcbiAgICAgIHRoaXMuYmVnaW5NaW51dGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAge1xuICAgICAgICAgIGxlbmd0aDpcbiAgICAgICAgICAgICh0aGlzLmVuZE1pbnV0ZUZvcm1Db250cm9sLnZhbHVlIC0gMCkgL1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpICtcbiAgICAgICAgICAgIDFcbiAgICAgICAgfSxcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iZWdpbk1pbnV0ZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICB7IGxlbmd0aDogKDU5IC0gMCkgLyB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpICsgMSB9LFxuICAgICAgICAoXywgaSkgPT4gMCArIGkgKiB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5iZWdpblZhbHVlLmdldE1pbnV0ZXMoKSk7XG4gIH1cblxuICBmdWxsRW5kTWludXRlc0FycmF5KGNoZWNrRW5kVmFsdWU/KSB7XG4gICAgaWYgKGNoZWNrRW5kVmFsdWUpIHtcbiAgICAgIHRoaXMuZW5kTWludXRlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIHtcbiAgICAgICAgICBsZW5ndGg6XG4gICAgICAgICAgICAoNTkgLSB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wudmFsdWUpIC9cbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKSArXG4gICAgICAgICAgICAxXG4gICAgICAgIH0sXG4gICAgICAgIChfLCBpKSA9PlxuICAgICAgICAgIHRoaXMuYmVnaW5NaW51dGVGb3JtQ29udHJvbC52YWx1ZSArIGkgKiB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuZE1pbnV0ZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICB7IGxlbmd0aDogKDU5IC0gMCkgLyB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpICsgMSB9LFxuICAgICAgICAoXywgaSkgPT4gMCArIGkgKiB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmVuZE1pbnV0ZUZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZW5kVmFsdWUuZ2V0TWludXRlcygpKTtcbiAgfVxuXG4gIHVwZGF0ZUhvdXJzTWludXRlc0FycmF5KCkge1xuICAgIGNvbnN0IGJlZ2luVG1wID0gbmV3IERhdGUodGhpcy5iZWdpblZhbHVlKTtcbiAgICBjb25zdCBlbmRUbXAgPSBuZXcgRGF0ZSh0aGlzLmVuZFZhbHVlKTtcbiAgICBpZiAoYmVnaW5UbXAuc2V0SG91cnMoMCwgMCkgPT09IGVuZFRtcC5zZXRIb3VycygwLCAwKSkge1xuICAgICAgdGhpcy5mdWxsQmVnaW5Ib3Vyc0FycmF5KHRydWUpO1xuICAgICAgdGhpcy5mdWxsRW5kSG91cnNBcnJheSh0cnVlKTtcbiAgICAgIGlmICh0aGlzLmJlZ2luVmFsdWUuZ2V0SG91cnMoKSA9PT0gdGhpcy5lbmRWYWx1ZS5nZXRIb3VycygpKSB7XG4gICAgICAgIHRoaXMuZnVsbEJlZ2luTWludXRlc0FycmF5KHRydWUpO1xuICAgICAgICB0aGlzLmZ1bGxFbmRNaW51dGVzQXJyYXkodHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZnVsbEJlZ2luSG91cnNBcnJheSgpO1xuICAgICAgdGhpcy5mdWxsRW5kSG91cnNBcnJheSgpO1xuICAgICAgdGhpcy5mdWxsQmVnaW5NaW51dGVzQXJyYXkoKTtcbiAgICAgIHRoaXMuZnVsbEVuZE1pbnV0ZXNBcnJheSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVzKCkge1xuICAgIHRoaXMuY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eSh0aGlzLmJlZ2luVmFsdWUsIDEsIGZhbHNlKTtcbiAgICB0aGlzLmNoYW5nZVRlbXBvcmFsUHJvcGVydHkodGhpcy5lbmRWYWx1ZSwgMiwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVzdHJpY3RlZFRvU3RlcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyLnJlc3RyaWN0VG9TdGVwXG4gICAgICA/IHRoaXMuY3VycmVudEZpbHRlci5yZXN0cmljdFRvU3RlcCA6IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZU1pbigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyLmJlZ2luID8gdGhpcy5jdXJyZW50RmlsdGVyLmJlZ2luIDpcbiAgICAgICAgICAgICAgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUgPyB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlIDogdGhpcy5fZGVmYXVsdE1pbik7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlTWF4KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXIuZW5kID8gdGhpcy5jdXJyZW50RmlsdGVyLmVuZCA6XG4gICAgICAgICAgICAgICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlID8gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSA6IHRoaXMuX2RlZmF1bHRNYXgpO1xuICB9XG5cbiAgY2hhbmdlUHJvcGVydHlCeVBhc3MoZXZlbnQpIHtcbiAgICB0aGlzLmNoYW5nZVByb3BlcnR5Lm5leHQoZXZlbnQpO1xuICB9XG5cbiAgbW9kZUNoYW5nZShldmVudCkge1xuICAgIGlmICghZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBzZXRGaWx0ZXJTdGF0ZURpc2FibGUoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlcikge1xuICAgICAgdGhpcy5maWx0ZXJTdGF0ZURpc2FibGUgPSAhdGhpcy5jdXJyZW50RmlsdGVyLmFjdGl2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJTdGF0ZURpc2FibGUgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYodGhpcy5jYWxlbmRhclR5cGUoKSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyU3RhdGVEaXNhYmxlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuZW5kTWludXRlRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5iZWdpbkhvdXJGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5iZWdpbk1pbnV0ZUZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5lbmRNaW51dGVGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZShzdHJpbmdEYXRlOiBzdHJpbmcpOiBEYXRlIHtcbiAgICAvLyB3YXJuaW5nIGNyZWF0ZSBkYXRlIHdpdGggbm8gdGltZSBtYWtlIGEgZGF0ZSBVVEMgd2l0aCBUWiBhbmQgdGhlIGRhdGUgY3JlYXRlIG1heWJlIG5vdCB0aGUgc2FtZSB5ZWFyLCBtb250aCBhbmQgZGF5XG4gICAgLy8gZXhlbXBsZTpcbiAgICAvLyBuZXcgRGF0ZSgnMjAyMi0wMS0wMScpIC0+IEZyaSBEZWMgMzEgMjAyMSAxOTowMDowMCBHTVQtMDUwMCAoaGV1cmUgbm9ybWFsZSBkZSBs4oCZRXN0IG5vcmQtYW3DqXJpY2FpbilcbiAgICAvLyB0byBjcmVhdGUgc2FtZSBkYXRlIGFzIHN0cmluZywgYWRkIHRpbWUgMDAgaW4gdGhlIGNyZWF0aW9uXG4gICAgLy8gbmV3IERhdGUoJzIwMjItMDEtMDEgMDA6MDA6MDAnKSAtPiBTYXQgSmFuIDAxIDIwMjIgMDA6MDA6MDAgR01ULTA1MDAgKGhldXJlIG5vcm1hbGUgZGUgbOKAmUVzdCBub3JkLWFtw6lyaWNhaW4pXG4gICAgbGV0IHllYXI7XG4gICAgbGV0IG1vbnRoID0gJzAxJztcbiAgICBsZXQgZGF5ID0gJzAxJztcbiAgICBpZiAoc3RyaW5nRGF0ZS5sZW5ndGggPT09IDEwKSB7XG4gICAgICAgY29uc3QgZGF0ZUl0ZW1zID0gc3RyaW5nRGF0ZS5zcGxpdCgnLScpO1xuICAgICAgICBpZiAoZGF0ZUl0ZW1zLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgaW4gY29uZmlnIGRhdGUgYmVnaW4tZW5kIGZvciBvZ2NGaWx0ZXI6IERhdGUgd2l0aG91dCB0aW1lIGZvcm1hdCBuZWVkIHRvIGJlIFlZWVktTU0tREQgb3IgWVlZWScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHllYXIgPSBkYXRlSXRlbXNbMF07XG4gICAgICAgICAgbW9udGggPSBkYXRlSXRlbXNbMV07XG4gICAgICAgICAgZGF5ID0gZGF0ZUl0ZW1zWzJdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHJpbmdEYXRlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgeWVhciA9IHN0cmluZ0RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShzdHJpbmdEYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fSAwMDowMDowMGApO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXIoKSB7XG4gICAgbGV0IGZpbHRlck9yaWdpbkNvbmZpZyA9IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuZmlsdGVycyBhcyBPZ2NGaWx0ZXJEdXJpbmdPcHRpb25zO1xuXG4gICAgbGV0IG1pbkRlZmF1bHREYXRlO1xuICAgIGxldCBtYXhEZWZhdWx0RGF0ZTtcbiAgICBsZXQgbWluRGVmYXVsdElTT1N0cmluZztcbiAgICBsZXQgbWF4RGVmYXVsdElTT1N0cmluZztcblxuICAgIGlmICh0aGlzLmNhbGVuZGFyVHlwZVllYXIpIHtcbiAgICAgIGlmIChmaWx0ZXJPcmlnaW5Db25maWcuZW5kID09PSAndG9kYXknKSB7XG4gICAgICAgIGxldCB0b2RheURhdGVTdHJpbmdOb1RpbWUgPSBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tQ0EnKTsgLy8gJzIwMjItMDItMTMnXG4gICAgICAgIG1heERlZmF1bHRJU09TdHJpbmcgPSBgJHt0b2RheURhdGVTdHJpbmdOb1RpbWUuc3Vic3RyaW5nKDAsNCl9LTAxLTAxYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heERlZmF1bHRJU09TdHJpbmcgPSBgJHtmaWx0ZXJPcmlnaW5Db25maWcuZW5kLnN1YnN0cmluZygwLDQpfS0wMS0wMWA7XG4gICAgICB9XG4gICAgICBtaW5EZWZhdWx0SVNPU3RyaW5nID0gYCR7ZmlsdGVyT3JpZ2luQ29uZmlnLmJlZ2luLnN1YnN0cmluZygwLDQpfS0wMS0wMWA7XG4gICAgICBtaW5EZWZhdWx0RGF0ZSA9IHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZShtaW5EZWZhdWx0SVNPU3RyaW5nKTtcbiAgICAgIG1heERlZmF1bHREYXRlID0gdGhpcy5nZXREYXRlRnJvbVN0cmluZ1dpdGhvdXRUaW1lKG1heERlZmF1bHRJU09TdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW5EZWZhdWx0RGF0ZSA9IHRoaXMucGFyc2VGaWx0ZXIoZmlsdGVyT3JpZ2luQ29uZmlnLmJlZ2luKTtcbiAgICAgIG1heERlZmF1bHREYXRlID0gdGhpcy5wYXJzZUZpbHRlcihmaWx0ZXJPcmlnaW5Db25maWcuZW5kKTtcbiAgICAgIG1pbkRlZmF1bHRJU09TdHJpbmcgPSBtaW5EZWZhdWx0RGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgbWF4RGVmYXVsdElTT1N0cmluZyA9IG1heERlZmF1bHREYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLmN1cnJlbnRGaWx0ZXIuYmVnaW4gIT09IG1pbkRlZmF1bHRJU09TdHJpbmcgKSB8fFxuICAgICh0aGlzLmN1cnJlbnRGaWx0ZXIuZW5kICE9PSBtYXhEZWZhdWx0SVNPU3RyaW5nKSkge1xuICAgICAgdGhpcy5iZWdpblZhbHVlID0gbWluRGVmYXVsdERhdGU7XG4gICAgICB0aGlzLmVuZFZhbHVlID0gbWF4RGVmYXVsdERhdGU7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlcygpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUZpbHRlclN0YXRlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuYWN0aXZlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuYWN0aXZlID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5hY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNldEZpbHRlclN0YXRlRGlzYWJsZSgpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVzKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRldGltZS1jb250YWluZXJcIj5cbiAgPG1hdC1zbGlkZS10b2dnbGUgXG4gICAgKm5nSWY9XCJ0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucz8uZW5hYmxlZFwiXG4gICAgWyhuZ01vZGVsKV09XCJzbGlkZXJNb2RlXCJcbiAgICAoY2hhbmdlKT1cIm1vZGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIHt7J2lnby5nZW8uZmlsdGVyLnNsaWRlck1vZGVUaXRsZScgfCB0cmFuc2xhdGV9fVxuICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgPGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIiAqbmdJZj1cInNsaWRlck1vZGVcIj5cbiAgICA8aWdvLW9nYy1maWx0ZXItdGltZS1zbGlkZXJcbiAgICAgIFtiZWdpbl09XCJiZWdpblZhbHVlXCJcbiAgICAgIFttYXhdPVwidGhpcy5yZXN0cmljdGVkVG9TdGVwKCkgPyB0aGlzLm1heERhdGUgOiB0aGlzLmVuZFZhbHVlXCJcbiAgICAgIFtjdXJyZW50RmlsdGVyXT1cImN1cnJlbnRGaWx0ZXJcIiBcbiAgICAgIFtkYXRhc291cmNlXT1cImRhdGFzb3VyY2VcIlxuICAgICAgKGNoYW5nZVByb3BlcnR5KT1cImNoYW5nZVByb3BlcnR5QnlQYXNzKCRldmVudClcIlxuICAgID5cbiAgICA8L2lnby1vZ2MtZmlsdGVyLXRpbWUtc2xpZGVyPlxuICAgIFxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiIXNsaWRlck1vZGVcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJ5ZWFyLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiY2FsZW5kYXJUeXBlWWVhclwiPlxuICAgICAgPCEtLSB0byBlbXVsYXRlIGEgeWVhci1waWNrZXIsIDIgaW5wdXQ6IGZpcnN0IGlucHV0IHRvIHNob3cgdXNlciBqdXN0IHllYXIgYW5kIHNlY29uZCBpbnB1dCBoaWRlbiBhbmQgYmluZCBcbiAgICAgICAgd2l0aCB0aGUgZGF0ZXBpY2tlciAgLS0+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgIGNsYXNzPVwieWVhci1pbnB1dFwiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8udGltZUZpbHRlci5zdGFydFllYXInfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIGNsYXNzPVwieWVhci1pbnB1dC1vbmx5LXllYXJcIlxuICAgICAgICAgIHZhbHVlPVwie3tvbmx5WWVhckJlZ2lufX1cIlxuICAgICAgICAgIChjaGFuZ2UpPSBcInllYXJPbmx5SW5wdXRDaGFuZ2UoJGV2ZW50LCBiZWdpbkRhdGVwaWNrZXIsICdiZWdpbicpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPSBcImZpbHRlclN0YXRlRGlzYWJsZVwiXG4gICAgICAgICAgPlxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImJlZ2luRGF0ZXBpY2tlclwiIFtkaXNhYmxlZF09XCJmaWx0ZXJTdGF0ZURpc2FibGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlclxuICAgICAgICAgIHBhbmVsQ2xhc3M9XCJkYXRlcGlja2VyLXllYXJcIlxuICAgICAgICAgICNiZWdpbkRhdGVwaWNrZXJcbiAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcbiAgICAgICAgICBbc3RhcnRBdF09XCJiZWdpblZhbHVlXCJcbiAgICAgICAgICAoeWVhclNlbGVjdGVkKT1cInllYXJTZWxlY3RlZCgkZXZlbnQsIGJlZ2luRGF0ZXBpY2tlciwgJ2JlZ2luJylcIlxuICAgICAgICAgID5cbiAgICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cblxuICAgICAgICA8aW5wdXQgI2JlZ2luWWVhclxuICAgICAgICAgIGNsYXNzPSBcInllYXItaW5wdXQtaGlkZVwiXG4gICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJiZWdpbkRhdGVwaWNrZXJcIlxuICAgICAgICAgIGVuYWJsZWQ9IGZhbHNlXG4gICAgICAgICAgcmVhZG9ubHk9IHRydWVcbiAgICAgICAgICBbdmFsdWVdPVwiYmVnaW5WYWx1ZT9iZWdpblZhbHVlOmhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUpXCJcbiAgICAgICAgICBbbWluXT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUpXCJcbiAgICAgICAgICBbbWF4XT1cIihlbmRWYWx1ZSAmJiAoIXJlc3RyaWN0ZWRUb1N0ZXAoKSkpP2VuZFZhbHVlOmhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCJcbiAgICAgICAgICA+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8bWF0LWZvcm0tZmllbGQgIGNsYXNzPVwieWVhci1pbnB1dFwiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8udGltZUZpbHRlci5lbmRZZWFyJ3wgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICBjbGFzcz1cInllYXItaW5wdXQtb25seS15ZWFyXCJcbiAgICAgICAgICB2YWx1ZT1cInt7b25seVllYXJFbmR9fVwiXG4gICAgICAgICAgKGNoYW5nZSk9IFwieWVhck9ubHlJbnB1dENoYW5nZSgkZXZlbnQsIGVuZERhdGVwaWNrZXIsICdlbmQnKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXSA9IFwiZmlsdGVyU3RhdGVEaXNhYmxlXCI+XG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZW5kRGF0ZXBpY2tlclwiIFtkaXNhYmxlZF09XCJmaWx0ZXJTdGF0ZURpc2FibGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAgICAgcGFuZWxDbGFzcz1cImRhdGVwaWNrZXIteWVhclwiXG4gICAgICAgICAgI2VuZERhdGVwaWNrZXJcbiAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcbiAgICAgICAgICBbc3RhcnRBdF09XCJlbmRWYWx1ZVwiXG4gICAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50LCBlbmREYXRlcGlja2VyLCAnZW5kJylcIlxuICAgICAgICAgID5cbiAgICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cblxuICAgICAgICA8aW5wdXQgI2VuZFllYXJcbiAgICAgICAgICBjbGFzcz0gXCJ5ZWFyLWlucHV0LWhpZGVcIlxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZW5kRGF0ZXBpY2tlclwiXG4gICAgICAgICAgZW5hYmxlZD0gZmFsc2VcbiAgICAgICAgICByZWFkb25seT0gdHJ1ZVxuICAgICAgICAgIFt2YWx1ZV09XCJlbmRWYWx1ZT9lbmRWYWx1ZTpoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlKVwiXG4gICAgICAgICAgW21pbl09XCJiZWdpblZhbHVlP2JlZ2luVmFsdWU6aGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcIlxuICAgICAgICAgIFttYXhdPVwiaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSlcIlxuICAgICAgICAgID5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwicmVzZXQtYnV0dG9uXCIgXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcbiAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIiBcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIiBcbiAgICAgICAgW2Rpc2FibGVkXT0gXCJmaWx0ZXJTdGF0ZURpc2FibGVcIj5cbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7e3Jlc2V0SWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgXG4gICAgICAgIGNsYXNzPSd0b2dnbGUtZmlsdGVyLXN0YXRlJyBcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXJTdGF0ZSgpXCIgXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci50b2dnbGVGaWx0ZXJTdGF0ZScgfCB0cmFuc2xhdGVcIiBcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbY2hlY2tlZF09XCIhZmlsdGVyU3RhdGVEaXNhYmxlXCI+XG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZS1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cImNhbGVuZGFyVHlwZSgpIT09J3llYXInXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWUtaW5wdXRcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGF0ZS1pbnB1dFwiPlxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiYmVnaW5EYXRlcGlja2VyXCIgW2Rpc2FibGVkXT0gXCJmaWx0ZXJTdGF0ZURpc2FibGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICA8aW5wdXQgI2JlZ2luXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiYmVnaW5EYXRlcGlja2VyXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby50aW1lRmlsdGVyLnN0YXJ0RGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImNoYW5nZVRlbXBvcmFsUHJvcGVydHkoYmVnaW4udmFsdWUsIDEpXCJcbiAgICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImZpbHRlckJlZ2luRnVuY3Rpb25cIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImJlZ2luVmFsdWU/YmVnaW5WYWx1ZTpoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlKVwiXG4gICAgICAgICAgICBbbWluXT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUpXCJcbiAgICAgICAgICAgIFttYXhdPVwiKGVuZFZhbHVlICYmICghcmVzdHJpY3RlZFRvU3RlcCgpKSk/ZW5kVmFsdWU6aGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSlcIiBcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IFwiZmlsdGVyU3RhdGVEaXNhYmxlXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxsZXJcIj48L3NwYW4+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAgICAgICAjYmVnaW5EYXRlcGlja2VyXG4gICAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcbiAgICAgICAgICAgIFtzdGFydEF0XT1cImJlZ2luVmFsdWVcIlxuICAgICAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50LCBiZWdpbkRhdGVwaWNrZXIsICdiZWdpbicpXCJcbiAgICAgICAgICAgIChtb250aFNlbGVjdGVkKT1cIm1vbnRoU2VsZWN0ZWQoJGV2ZW50LCBiZWdpbkRhdGVwaWNrZXIsICdiZWdpbicpXCI+XG4gICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dFwiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImhvdXItaW5wdXRcIiAqbmdJZj1cImNhbGVuZGFyVHlwZSgpPT09J2RhdGV0aW1lJ1wiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLnRpbWVGaWx0ZXIuaG91cicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImJlZ2luSG91ckZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VUZW1wb3JhbFByb3BlcnR5KGJlZ2luLnZhbHVlLCAxKVwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBiZWdpbkhvdXJzXCIgW3ZhbHVlXT1cImhvdXJcIj57e2hvdXJ9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1pbnV0ZS1pbnB1dFwiICpuZ0lmPVwiY2FsZW5kYXJUeXBlKCk9PT0nZGF0ZXRpbWUnXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8udGltZUZpbHRlci5taW51dGUnIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJiZWdpbk1pbnV0ZUZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VUZW1wb3JhbFByb3BlcnR5KGJlZ2luLnZhbHVlLCAxKVwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIGJlZ2luTWludXRlc1wiIFt2YWx1ZV09XCJtaW51dGVcIj57e21pbnV0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZS1pbnB1dFwiICpuZ0lmPVwiIXJlc3RyaWN0ZWRUb1N0ZXAoKVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJkYXRlLWlucHV0XCI+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJlbmREYXRlcGlja2VyXCIgW2Rpc2FibGVkXT0gXCJmaWx0ZXJTdGF0ZURpc2FibGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgIDxpbnB1dCAjZW5kXG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImVuZERhdGVwaWNrZXJcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8udGltZUZpbHRlci5lbmREYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImNoYW5nZVRlbXBvcmFsUHJvcGVydHkoZW5kLnZhbHVlLCAyKVwiXG4gICAgICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImZpbHRlckVuZEZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImVuZFZhbHVlP2VuZFZhbHVlOmhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCJcbiAgICAgICAgICAgICAgW21pbl09XCJiZWdpblZhbHVlP2JlZ2luVmFsdWU6aGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcIlxuICAgICAgICAgICAgICBbbWF4XT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCIgXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09IFwiZmlsdGVyU3RhdGVEaXNhYmxlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGxlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZW5kRGF0ZXBpY2tlclxuICAgICAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcbiAgICAgICAgICAgICAgW3N0YXJ0QXRdPVwiZW5kVmFsdWVcIlxuICAgICAgICAgICAgICAoeWVhclNlbGVjdGVkKT1cInllYXJTZWxlY3RlZCgkZXZlbnQsIGVuZERhdGVwaWNrZXIsICdlbmQnKVwiXG4gICAgICAgICAgICAgIChtb250aFNlbGVjdGVkKT1cIm1vbnRoU2VsZWN0ZWQoJGV2ZW50LCBlbmREYXRlcGlja2VyLCAnZW5kJylcIj5cbiAgICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0XCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaG91ci1pbnB1dFwiICpuZ0lmPVwiY2FsZW5kYXJUeXBlKCk9PT0nZGF0ZXRpbWUnXCIgPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLnRpbWVGaWx0ZXIuaG91cicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImVuZEhvdXJGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShlbmQudmFsdWUsIDIpXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBob3VyIG9mIGVuZEhvdXJzXCIgW3ZhbHVlXT1cImhvdXJcIj57e2hvdXJ9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1pbnV0ZS1pbnB1dFwiICpuZ0lmPVwiY2FsZW5kYXJUeXBlKCk9PT0nZGF0ZXRpbWUnXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8udGltZUZpbHRlci5taW51dGUnIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJlbmRNaW51dGVGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShlbmQudmFsdWUsIDIpXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgZW5kTWludXRlc1wiIFt2YWx1ZV09XCJtaW51dGVcIj57e21pbnV0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJyZXNldC1idXR0b25cIiBcbiAgICAgICAgbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcigpXCIgXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCIgXG4gICAgICAgIFtkaXNhYmxlZF09IFwiZmlsdGVyU3RhdGVEaXNhYmxlXCI+XG4gICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tyZXNldEljb259fVwiPjwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFxuICAgICAgICBjbGFzcz1cInRvZ2dsZS1maWx0ZXItc3RhdGVcIiBcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXJTdGF0ZSgpXCIgXG4gICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIFxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnRvZ2dsZUZpbHRlclN0YXRlJyB8IHRyYW5zbGF0ZVwiIFxuICAgICAgICBbY2hlY2tlZF09IFwiIWZpbHRlclN0YXRlRGlzYWJsZVwiPlxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './ogc-filterable-form.component';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvb2djLWZpbHRlcmFibGUtZm9ybS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9vZ2MtZmlsdGVyYWJsZS1mb3JtLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -48,7 +48,7 @@ OgcFilterableFormComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
|
|
|
48
48
|
} }, encapsulation: 2 });
|
|
49
49
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OgcFilterableFormComponent, [{
|
|
50
50
|
type: Component,
|
|
51
|
-
args: [{ selector: 'igo-ogc-filterable-form', template: "<igo-ogc-filter-selection\
|
|
51
|
+
args: [{ selector: 'igo-ogc-filterable-form', template: "<igo-ogc-filter-selection\n *ngIf=\"!advancedOgcFilters\"\n igoListItem\n [refreshFilters]=\"refreshFunc\"\n [datasource]=\"datasource\"\n [map]=\"map\"\n [currentFilter]=\"currentFilter\">\n</igo-ogc-filter-selection>\n\n<ng-template \n*ngIf=\"advancedOgcFilters && datasource.options.ogcFilters.editable\"\nngFor let-currentFilter \n[ngForOf]=\"datasource.options.ogcFilters.interfaceOgcFilters\">\n<igo-ogc-filter-form\n [currentFilter]=\"currentFilter\"\n [refreshFilters]=\"refreshFunc\"\n [datasource]=\"datasource\"\n [map]=\"map\">\n</igo-ogc-filter-form>\n</ng-template>" }]
|
|
52
52
|
}], function () { return []; }, { datasource: [{
|
|
53
53
|
type: Input
|
|
54
54
|
}], map: [{
|
|
@@ -56,4 +56,4 @@ OgcFilterableFormComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
|
|
|
56
56
|
}], refreshFilters: [{
|
|
57
57
|
type: Input
|
|
58
58
|
}] }); })();
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlcmFibGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvb2djLWZpbHRlcmFibGUtZm9ybS9vZ2MtZmlsdGVyYWJsZS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyYWJsZS1mb3JtL29nYy1maWx0ZXJhYmxlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztJQ0FqRCw4Q0FPMkI7OztJQUp6QixtREFBOEIsaUNBQUEsbUJBQUEsdUNBQUE7OztJQVVoQyx5Q0FLc0I7Ozs7SUFKcEIsZ0RBQStCLHNDQUFBLGlDQUFBLG1CQUFBOzs7SUFMakMsNkZBVWM7OztJQVBkLGtGQUE2RDs7QURKN0QsTUFBTSxPQUFPLDBCQUEwQjtJQTBCckM7UUFGTyxVQUFLLEdBQUcsU0FBUyxDQUFDO0lBRVYsQ0FBQztJQWxCaEIsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUN0QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztTQUM5RDtRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN4RSxDQUFDOztvR0F0QlUsMEJBQTBCOzZFQUExQiwwQkFBMEI7UUNSdkMscUhBTzJCO1FBRTNCLHNFQVVjOztRQWxCWCw4Q0FBeUI7UUFTM0IsZUFBa0U7UUFBbEUsMkZBQWtFOzt1RkRGdEQsMEJBQTBCO2NBSnRDLFNBQVM7MkJBQ0UseUJBQXlCO3NDQUsxQixVQUFVO2tCQUFsQixLQUFLO1lBRUcsR0FBRztrQkFBWCxLQUFLO1lBRUcsY0FBYztrQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1vZ2MtZmlsdGVyYWJsZS1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29nYy1maWx0ZXJhYmxlLWZvcm0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlcmFibGVGb3JtQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcblxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcblxuICBASW5wdXQoKSByZWZyZXNoRmlsdGVyczogKCkgPT4gdm9pZDtcblxuICBnZXQgcmVmcmVzaEZ1bmMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmcmVzaEZpbHRlcnM7XG4gIH1cblxuICBnZXQgYWR2YW5jZWRPZ2NGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hZHZhbmNlZE9nY0ZpbHRlcnM7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGdldCBjdXJyZW50RmlsdGVyKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycyA/XG4gICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzWzBdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGNvbG9yID0gJ3ByaW1hcnknO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cbn1cbiIsIjxpZ28tb2djLWZpbHRlci1zZWxlY3Rpb25cbiAgKm5nSWY9XCIhYWR2YW5jZWRPZ2NGaWx0ZXJzXCJcbiAgaWdvTGlzdEl0ZW1cbiAgW3JlZnJlc2hGaWx0ZXJzXT1cInJlZnJlc2hGdW5jXCJcbiAgW2RhdGFzb3VyY2VdPVwiZGF0YXNvdXJjZVwiXG4gIFttYXBdPVwibWFwXCJcbiAgW2N1cnJlbnRGaWx0ZXJdPVwiY3VycmVudEZpbHRlclwiPlxuPC9pZ28tb2djLWZpbHRlci1zZWxlY3Rpb24+XG5cbjxuZy10ZW1wbGF0ZSBcbipuZ0lmPVwiYWR2YW5jZWRPZ2NGaWx0ZXJzICYmIGRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmVkaXRhYmxlXCJcbm5nRm9yIGxldC1jdXJyZW50RmlsdGVyIFxuW25nRm9yT2ZdPVwiZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVyc1wiPlxuPGlnby1vZ2MtZmlsdGVyLWZvcm1cbiAgW2N1cnJlbnRGaWx0ZXJdPVwiY3VycmVudEZpbHRlclwiXG4gIFtyZWZyZXNoRmlsdGVyc109XCJyZWZyZXNoRnVuY1wiXG4gIFtkYXRhc291cmNlXT1cImRhdGFzb3VyY2VcIlxuICBbbWFwXT1cIm1hcFwiPlxuPC9pZ28tb2djLWZpbHRlci1mb3JtPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './ogc-filterable-item.component';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvb2djLWZpbHRlcmFibGUtaXRlbS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9vZ2MtZmlsdGVyYWJsZS1pdGVtLmNvbXBvbmVudCc7XG4iXX0=
|