geonetwork-ui 2.2.0-dev.c15a456d → 2.2.0-dev.c9f3c310
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/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +28 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +83 -58
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +6 -4
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +14 -0
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +20 -17
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +52 -23
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +52 -32
- package/esm2022/libs/api/repository/src/lib/gn4/index.mjs +3 -1
- package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
- package/esm2022/libs/api/repository/src/lib/gn4/selection/selection.service.mjs +13 -26
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/aggregation.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
- package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
- package/esm2022/libs/common/domain/src/lib/model/search/search.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
- package/esm2022/libs/feature/catalog/src/lib/my-org/my-org.service.mjs +4 -10
- package/esm2022/libs/feature/catalog/src/lib/organisations/organisations.component.mjs +4 -15
- package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +5 -4
- package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +5 -3
- package/esm2022/libs/feature/map/src/index.mjs +2 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +106 -0
- package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +64 -0
- package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +63 -0
- package/esm2022/libs/feature/map/src/lib/constant/index.mjs +2 -1
- package/esm2022/libs/feature/map/src/lib/constant/projections.mjs +2 -0
- package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +26 -3
- package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +93 -0
- package/esm2022/libs/feature/map/src/lib/geocoding.service.mjs +40 -0
- package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +6 -3
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +11 -1
- package/esm2022/libs/feature/map/src/lib/utils/index.mjs +1 -3
- package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +60 -29
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +29 -20
- package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
- package/esm2022/libs/feature/search/src/index.mjs +4 -1
- package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +7 -4
- package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
- package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/filter-geometry.token.mjs +4 -0
- package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +7 -3
- package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -0
- package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +3 -3
- package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +128 -0
- package/esm2022/libs/feature/search/src/lib/state/effects.mjs +6 -4
- package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
- package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +4 -4
- package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +1 -1
- package/esm2022/libs/ui/elements/src/index.mjs +4 -1
- package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +27 -0
- package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +17 -0
- package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +10 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +35 -16
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -4
- package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +9 -6
- package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +7 -3
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +16 -4
- package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
- package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +8 -5
- package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +46 -0
- package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +2 -2
- package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +12 -7
- package/esm2022/libs/ui/layout/src/index.mjs +3 -1
- package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +2 -2
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +36 -0
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +37 -0
- package/esm2022/libs/ui/search/src/index.mjs +1 -2
- package/esm2022/libs/ui/search/src/lib/record-preview-card/record-preview-card.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-list/record-preview-list.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-title/record-preview-title.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +9 -10
- package/esm2022/libs/util/i18n/src/index.mjs +2 -2
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +29 -13
- package/esm2022/libs/util/shared/src/lib/utils/fuzzy-filter.mjs +27 -0
- package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
- package/esm2022/translations/de.json +106 -89
- package/esm2022/translations/en.json +42 -25
- package/esm2022/translations/es.json +21 -4
- package/esm2022/translations/fr.json +26 -9
- package/esm2022/translations/it.json +33 -16
- package/esm2022/translations/nl.json +21 -4
- package/esm2022/translations/pt.json +21 -4
- package/fesm2022/geonetwork-ui.mjs +1521 -835
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +3 -0
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +0 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +3 -5
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts +3 -0
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +6 -6
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +4 -3
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/index.d.ts +2 -0
- package/libs/api/repository/src/lib/gn4/index.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts +4 -5
- package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +28 -17
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
- package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
- package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
- package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
- package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
- package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/search.model.d.ts +2 -3
- package/libs/common/domain/src/lib/model/search/search.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
- package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts +0 -1
- package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts.map +1 -1
- package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts +0 -1
- package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts +15 -2
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
- package/libs/feature/map/src/index.d.ts +1 -0
- package/libs/feature/map/src/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts +22 -0
- package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts +22 -0
- package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts +22 -0
- package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/constant/index.d.ts +1 -0
- package/libs/feature/map/src/lib/constant/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/constant/projections.d.ts.map +1 -0
- package/libs/feature/map/src/lib/feature-map.module.d.ts +16 -12
- package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
- package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts +25 -0
- package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/geocoding.service.d.ts +18 -0
- package/libs/feature/map/src/lib/geocoding.service.d.ts.map +1 -0
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +2 -0
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
- package/libs/feature/map/src/lib/utils/index.d.ts +0 -2
- package/libs/feature/map/src/lib/utils/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +13 -11
- package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +1 -3
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/feature/search/src/index.d.ts +3 -0
- package/libs/feature/search/src/index.d.ts.map +1 -1
- package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +5 -4
- package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
- package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
- package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts +3 -2
- package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
- package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
- package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +33 -0
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
- package/libs/feature/search/src/lib/state/effects.d.ts.map +1 -1
- package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
- package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
- package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
- package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +1 -1
- package/libs/ui/elements/src/index.d.ts +3 -0
- package/libs/ui/elements/src/index.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts +10 -0
- package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +8 -0
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.d.ts +1 -0
- package/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +10 -5
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +3 -1
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts +3 -2
- package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +13 -11
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/ui/inputs/src/index.d.ts +1 -0
- package/libs/ui/inputs/src/index.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts +13 -0
- package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -0
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +40 -39
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
- package/libs/ui/layout/src/index.d.ts +2 -0
- package/libs/ui/layout/src/index.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +14 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts.map +1 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +15 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -0
- package/libs/ui/search/src/index.d.ts +0 -1
- package/libs/ui/search/src/index.d.ts.map +1 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts +15 -15
- package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
- package/libs/util/i18n/src/index.d.ts +1 -1
- package/libs/util/i18n/src/index.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-utils.d.ts +19 -7
- package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
- package/libs/util/shared/src/lib/utils/fuzzy-filter.d.ts +9 -0
- package/libs/util/shared/src/lib/utils/fuzzy-filter.d.ts.map +1 -0
- package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
- package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
- package/package.json +4 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +61 -8
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +55 -9
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +225 -24
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +32 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +123 -73
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +5 -3
- package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +3 -5
- package/src/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.ts +16 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +24 -21
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +115 -62
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +169 -95
- package/src/libs/api/repository/src/lib/gn4/index.ts +2 -0
- package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
- package/src/libs/api/repository/src/lib/gn4/selection/selection.service.ts +14 -38
- package/src/libs/common/domain/src/lib/index.ts +2 -0
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +33 -21
- package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
- package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
- package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
- package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
- package/src/libs/common/domain/src/lib/model/search/search.model.ts +2 -2
- package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
- package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
- package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +50 -10
- package/src/libs/feature/catalog/src/lib/my-org/my-org.service.ts +4 -16
- package/src/libs/feature/catalog/src/lib/organisations/organisations.component.ts +3 -17
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +8 -5
- package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +2 -1
- package/src/libs/feature/map/src/index.ts +1 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.css +0 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.html +21 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +107 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.css +0 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.html +37 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +64 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.css +0 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.html +55 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.ts +63 -0
- package/src/libs/feature/map/src/lib/constant/index.ts +1 -0
- package/src/libs/feature/map/src/lib/feature-map.module.ts +14 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.css +0 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.html +39 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +99 -0
- package/src/libs/feature/map/src/lib/geocoding.service.ts +59 -0
- package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +9 -3
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +16 -0
- package/src/libs/feature/map/src/lib/utils/index.ts +0 -2
- package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +85 -50
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +18 -3
- package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
- package/src/libs/feature/search/src/index.ts +3 -0
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +12 -4
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +2 -1
- package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
- package/src/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.ts +4 -4
- package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
- package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
- package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
- package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
- package/src/libs/feature/search/src/lib/results-table/results-table.component.css +0 -0
- package/src/libs/feature/search/src/lib/results-table/results-table.component.html +112 -0
- package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +164 -0
- package/src/libs/feature/search/src/lib/state/effects.ts +5 -4
- package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
- package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
- package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
- package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -0
- package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.ts +1 -1
- package/src/libs/ui/elements/src/index.ts +3 -0
- package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +4 -1
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.css +0 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +30 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.ts +15 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +264 -0
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.html +1 -0
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +17 -0
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +93 -27
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts +7 -0
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +4 -0
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +104 -50
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +37 -10
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +2 -3
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +5 -5
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +12 -4
- package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +1 -1
- package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.ts +4 -0
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +7 -0
- package/src/libs/ui/inputs/src/index.ts +1 -0
- package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.css +1 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.html +0 -1
- package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.ts +7 -4
- package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +48 -0
- package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.css +3 -0
- package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +8 -3
- package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.css +1 -0
- package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +5 -2
- package/src/libs/ui/layout/src/index.ts +2 -0
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +1 -1
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.css +0 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.html +1 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.ts +33 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +15 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +54 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +42 -0
- package/src/libs/ui/search/src/index.ts +0 -1
- package/src/libs/ui/search/src/lib/ui-search.module.ts +2 -3
- package/src/libs/util/i18n/src/index.ts +1 -1
- package/src/libs/util/shared/src/lib/links/link-utils.ts +34 -11
- package/src/libs/util/shared/src/lib/utils/fuzzy-filter.ts +32 -0
- package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
- package/tailwind.base.css +2 -2
- package/translations/de.json +106 -89
- package/translations/en.json +42 -25
- package/translations/es.json +21 -4
- package/translations/fr.json +26 -9
- package/translations/it.json +33 -16
- package/translations/nl.json +21 -4
- package/translations/pt.json +21 -4
- package/translations/sk.json +21 -4
- package/esm2022/libs/feature/map/src/lib/utils/map-utils-wms.service.mjs +0 -55
- package/esm2022/libs/feature/map/src/lib/utils/projections.mjs +0 -2
- package/esm2022/libs/ui/search/src/lib/record-table/record-table.component.mjs +0 -145
- package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
- package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
- package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
- package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts +0 -17
- package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts.map +0 -1
- package/libs/feature/map/src/lib/utils/projections.d.ts.map +0 -1
- package/libs/ui/search/src/lib/record-table/record-table.component.d.ts +0 -31
- package/libs/ui/search/src/lib/record-table/record-table.component.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
- package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
- package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
- package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
- package/src/libs/feature/map/src/lib/utils/map-utils-wms.service.ts +0 -58
- package/src/libs/ui/search/src/lib/record-table/record-table.component.css +0 -7
- package/src/libs/ui/search/src/lib/record-table/record-table.component.html +0 -215
- package/src/libs/ui/search/src/lib/record-table/record-table.component.ts +0 -149
- package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
- package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
- package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
- /package/libs/feature/map/src/lib/{utils → constant}/projections.d.ts +0 -0
- /package/src/libs/feature/map/src/lib/{utils → constant}/projections.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createDocument, createElement, getRootElement, parseXmlString, xmlToString, } from '../xml-utils';
|
|
2
|
-
import { writeAbstract,
|
|
3
|
-
import { readAbstract,
|
|
2
|
+
import { writeAbstract, writeContacts, writeDatasetCreated, writeDatasetUpdated, writeDistributions, writeGraphicOverviews, writeKeywords, writeKind, writeLegalConstraints, writeLicenses, writeLineage, writeOnlineResources, writeOtherConstraints, writeOwnerOrganization, writeRecordUpdated, writeSecurityConstraints, writeSpatialRepresentation, writeStatus, writeTopics, writeTitle, writeUniqueIdentifier, writeUpdateFrequency, } from './write-parts';
|
|
3
|
+
import { readAbstract, readContacts, readDatasetCreated, readDatasetUpdated, readDistributions, readIsoTopics, readKeywords, readKind, readLegalConstraints, readLicenses, readLineage, readOnlineResources, readOtherConstraints, readOverviews, readOwnerOrganization, readRecordUpdated, readSecurityConstraints, readSpatialExtents, readSpatialRepresentation, readStatus, readTemporalExtents, readTitle, readUniqueIdentifier, readUpdateFrequency, } from './read-parts';
|
|
4
4
|
import { isEqual } from '../convert-utils';
|
|
5
5
|
export function toModel(xml) {
|
|
6
6
|
const doc = parseXmlString(xml);
|
|
@@ -14,13 +14,12 @@ export function toModel(xml) {
|
|
|
14
14
|
const recordUpdated = readRecordUpdated(rootEl);
|
|
15
15
|
const recordCreated = recordUpdated;
|
|
16
16
|
const keywords = readKeywords(rootEl);
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
17
|
+
const topics = readIsoTopics(rootEl);
|
|
18
|
+
const legalConstraints = readLegalConstraints(rootEl);
|
|
19
|
+
const otherConstraints = readOtherConstraints(rootEl);
|
|
20
|
+
const securityConstraints = readSecurityConstraints(rootEl);
|
|
20
21
|
const licenses = readLicenses(rootEl);
|
|
21
22
|
const overviews = readOverviews(rootEl);
|
|
22
|
-
// not used yet
|
|
23
|
-
const isoTopics = readIsoTopics(rootEl);
|
|
24
23
|
if (kind === 'dataset') {
|
|
25
24
|
const status = readStatus(rootEl);
|
|
26
25
|
const datasetCreated = readDatasetCreated(rootEl);
|
|
@@ -43,10 +42,11 @@ export function toModel(xml) {
|
|
|
43
42
|
contacts,
|
|
44
43
|
contactsForResource: [],
|
|
45
44
|
keywords,
|
|
46
|
-
|
|
47
|
-
accessConstraints,
|
|
48
|
-
useLimitations,
|
|
45
|
+
topics,
|
|
49
46
|
licenses,
|
|
47
|
+
legalConstraints,
|
|
48
|
+
securityConstraints,
|
|
49
|
+
otherConstraints,
|
|
50
50
|
...(datasetCreated && { datasetCreated }),
|
|
51
51
|
...(datasetUpdated && { datasetUpdated }),
|
|
52
52
|
lineage,
|
|
@@ -70,10 +70,11 @@ export function toModel(xml) {
|
|
|
70
70
|
ownerOrganization,
|
|
71
71
|
contacts,
|
|
72
72
|
keywords,
|
|
73
|
-
|
|
74
|
-
accessConstraints,
|
|
75
|
-
useLimitations,
|
|
73
|
+
topics,
|
|
76
74
|
licenses,
|
|
75
|
+
legalConstraints,
|
|
76
|
+
securityConstraints,
|
|
77
|
+
otherConstraints,
|
|
77
78
|
overviews,
|
|
78
79
|
onlineResources,
|
|
79
80
|
};
|
|
@@ -98,10 +99,12 @@ export function toXml(record, originalXml) {
|
|
|
98
99
|
writeAbstract(record, rootEl);
|
|
99
100
|
fieldChanged('contacts') && writeContacts(record, rootEl);
|
|
100
101
|
fieldChanged('keywords') && writeKeywords(record, rootEl);
|
|
101
|
-
fieldChanged('
|
|
102
|
-
fieldChanged('
|
|
102
|
+
fieldChanged('topics') && writeTopics(record, rootEl);
|
|
103
|
+
fieldChanged('legalConstraints') && writeLegalConstraints(record, rootEl);
|
|
104
|
+
fieldChanged('securityConstraints') &&
|
|
105
|
+
writeSecurityConstraints(record, rootEl);
|
|
103
106
|
fieldChanged('licenses') && writeLicenses(record, rootEl);
|
|
104
|
-
fieldChanged('
|
|
107
|
+
fieldChanged('otherConstraints') && writeOtherConstraints(record, rootEl);
|
|
105
108
|
if (record.kind === 'dataset') {
|
|
106
109
|
writeStatus(record, rootEl);
|
|
107
110
|
fieldChanged('updateFrequency') && writeUpdateFrequency(record, rootEl);
|
|
@@ -119,4 +122,4 @@ export function toXml(record, originalXml) {
|
|
|
119
122
|
const newDocument = createDocument(rootEl);
|
|
120
123
|
return xmlToString(newDocument);
|
|
121
124
|
}
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvbWV0YWRhdGEtY29udmVydGVyL3NyYy9saWIvaXNvMTkxMzkvY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFDTCxjQUFjLEVBQ2QsYUFBYSxFQUNiLGNBQWMsRUFDZCxjQUFjLEVBQ2QsV0FBVyxHQUNaLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFDTCxhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsYUFBYSxFQUNiLFNBQVMsRUFDVCxhQUFhLEVBQ2IsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUMxQixXQUFXLEVBQ1gsV0FBVyxFQUNYLFVBQVUsRUFDVixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLG1CQUFtQixHQUNwQixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQ0wsWUFBWSxFQUNaLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFlBQVksRUFDWixRQUFRLEVBQ1IsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixTQUFTLEVBQ1Qsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixrQkFBa0IsR0FDbkIsTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTFDLE1BQU0sVUFBVSxPQUFP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QU0sQ0FBQyxDQUFBO1FBQ25FLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7S0FDN0I7U0FBTTtRQUNMLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtLQUN4RTtJQUVELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMxQyxPQUFPLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2F0YWxvZ1JlY29yZCxcbiAgRGF0YXNldFJlY29yZCxcbiAgU2VydmljZVJlY29yZCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHtcbiAgY3JlYXRlRG9jdW1lbnQsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIGdldFJvb3RFbGVtZW50LFxuICBwYXJzZVhtbFN0cmluZyxcbiAgeG1sVG9TdHJpbmcsXG59IGZyb20gJy4uL3htbC11dGlscydcbmltcG9ydCB7XG4gIHdyaXRlQWJzdHJhY3QsXG4gIHdyaXRlQWNjZXNzQ29uc3RyYWludHMsXG4gIHdyaXRlQ29udGFjdHMsXG4gIHdyaXRlRGF0YXNldENyZWF0ZWQsXG4gIHdyaXRlRGF0YXNldFVwZGF0ZWQsXG4gIHdyaXRlRGlzdHJpYnV0aW9ucyxcbiAgd3JpdGVHcmFwaGljT3ZlcnZpZXdzLFxuICB3cml0ZUtleXdvcmRzLFxuICB3cml0ZUtpbmQsXG4gIHdyaXRlTGljZW5zZXMsXG4gIHdyaXRlTGluZWFnZSxcbiAgd3JpdGVPbmxpbmVSZXNvdXJjZXMsXG4gIHdyaXRlT3duZXJPcmdhbml6YXRpb24sXG4gIHdyaXRlUmVjb3JkVXBkYXRlZCxcbiAgd3JpdGVTcGF0aWFsUmVwcmVzZW50YXRpb24sXG4gIHdyaXRlU3RhdHVzLFxuICB3cml0ZVRoZW1lcyxcbiAgd3JpdGVUaXRsZSxcbiAgd3JpdGVVbmlxdWVJZGVudGlmaWVyLFxuICB3cml0ZVVwZGF0ZUZyZXF1ZW5jeSxcbiAgd3JpdGVVc2VMaW1pdGF0aW9ucyxcbn0gZnJvbSAnLi93cml0ZS1wYXJ0cydcbmltcG9ydCB7XG4gIHJlYWRBYnN0cmFjdCxcbiAgcmVhZEFjY2Vzc0NvbnN0cmFpbnRzLFxuICByZWFkQ29udGFjdHMsXG4gIHJlYWREYXRhc2V0Q3JlYXRlZCxcbiAgcmVhZERhdGFzZXRVcGRhdGVkLFxuICByZWFkRGlzdHJpYnV0aW9ucyxcbiAgcmVhZElzb1RvcGljcyxcbiAgcmVhZEtleXdvcmRzLFxuICByZWFkS2luZCxcbiAgcmVhZExpY2Vuc2VzLFxuICByZWFkTGluZWFnZSxcbiAgcmVhZE9ubGluZVJlc291cmNlcyxcbiAgcmVhZE92ZXJ2aWV3cyxcbiAgcmVhZE93bmVyT3JnYW5pemF0aW9uLFxuICByZWFkUmVjb3JkVXBkYXRlZCxcbiAgcmVhZFNwYXRpYWxFeHRlbnRzLFxuICByZWFkU3BhdGlhbFJlcHJlc2VudGF0aW9uLFxuICByZWFkU3RhdHVzLFxuICByZWFkVGVtcG9yYWxFeHRlbnRzLFxuICByZWFkVGhlbWVzLFxuICByZWFkVGl0bGUsXG4gIHJlYWRVbmlxdWVJZGVudGlmaWVyLFxuICByZWFkVXBkYXRlRnJlcXVlbmN5LFxuICByZWFkVXNlTGltaXRhdGlvbnMsXG59IGZyb20gJy4vcmVhZC1wYXJ0cydcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICcuLi9jb252ZXJ0LXV0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gdG9Nb2RlbCh4bWw6IHN0cmluZyk6IENhdGFsb2dSZWNvcmQge1xuICBjb25zdCBkb2MgPSBwYXJzZVhtbFN0cmluZyh4bWwpXG4gIGNvbnN0IHJvb3RFbCA9IGdldFJvb3RFbGVtZW50KGRvYylcblxuICBjb25zdCB1bmlxdWVJZGVudGlmaWVyID0gcmVhZFVuaXF1ZUlkZW50aWZpZXIocm9vdEVsKVxuICBjb25zdCBraW5kID0gcmVhZEtpbmQocm9vdEVsKVxuICBjb25zdCBvd25lck9yZ2FuaXphdGlvbiA9IHJlYWRPd25lck9yZ2FuaXphdGlvbihyb290RWwpXG4gIGNvbnN0IHRpdGxlID0gcmVhZFRpdGxlKHJvb3RFbClcbiAgY29uc3QgYWJzdHJhY3QgPSByZWFkQWJzdHJhY3Qocm9vdEVsKVxuICBjb25zdCBjb250YWN0cyA9IHJlYWRDb250YWN0cyhyb290RWwpXG4gIGNvbnN0IHJlY29yZFVwZGF0ZWQgPSByZWFkUmVjb3JkVXBkYXRlZChyb290RWwpXG4gIGNvbnN0IHJlY29yZENyZWF0ZWQgPSByZWNvcmRVcGRhdGVkXG4gIGNvbnN0IGtleXdvcmRzID0gcmVhZEtleXdvcmRzKHJvb3RFbClcbiAgY29uc3QgdGhlbWVzID0gcmVhZFRoZW1lcyhyb290RWwpXG4gIGNvbnN0IGFjY2Vzc0NvbnN0cmFpbnRzID0gcmVhZEFjY2Vzc0NvbnN0cmFpbnRzKHJvb3RFbClcbiAgY29uc3QgdXNlTGltaXRhdGlvbnMgPSByZWFkVXNlTGltaXRhdGlvbnMocm9vdEVsKVxuICBjb25zdCBsaWNlbnNlcyA9IHJlYWRMaWNlbnNlcyhyb290RWwpXG4gIGNvbnN0IG92ZXJ2aWV3cyA9IHJlYWRPdmVydmlld3Mocm9vdEVsKVxuXG4gIC8vIG5vdCB1c2VkIHlldFxuICBjb25zdCBpc29Ub3BpY3MgPSByZWFkSXNvVG9waWNzKHJvb3RFbClcblxuICBpZiAoa2luZCA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gcmVhZFN0YXR1cyhyb290RWwpXG4gICAgY29uc3QgZGF0YXNldENyZWF0ZWQgPSByZWFkRGF0YXNldENyZWF0ZWQocm9vdEVsKVxuICAgIGNvbnN0IGRhdGFzZXRVcGRhdGVkID0gcmVhZERhdGFzZXRVcGRhdGVkKHJvb3RFbClcbiAgICBjb25zdCBzcGF0aWFsUmVwcmVzZW50YXRpb24gPSByZWFkU3BhdGlhbFJlcHJlc2VudGF0aW9uKHJvb3RFbClcbiAgICBjb25zdCBzcGF0aWFsRXh0ZW50cyA9IHJlYWRTcGF0aWFsRXh0ZW50cyhyb290RWwpXG4gICAgY29uc3QgdGVtcG9yYWxFeHRlbnRzID0gcmVhZFRlbXBvcmFsRXh0ZW50cyhyb290RWwpXG4gICAgY29uc3QgbGluZWFnZSA9IHJlYWRMaW5lYWdlKHJvb3RFbClcbiAgICBjb25zdCBkaXN0cmlidXRpb25zID0gcmVhZERpc3RyaWJ1dGlvbnMocm9vdEVsKVxuICAgIGNvbnN0IHVwZGF0ZUZyZXF1ZW5jeSA9IHJlYWRVcGRhdGVGcmVxdWVuY3kocm9vdEVsKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICBraW5kLFxuICAgICAgcmVjb3JkQ3JlYXRlZCxcbiAgICAgIHJlY29yZFVwZGF0ZWQsXG4gICAgICBzdGF0dXMsXG4gICAgICB0aXRsZSxcbiAgICAgIGFic3RyYWN0LFxuICAgICAgb3duZXJPcmdhbml6YXRpb24sXG4gICAgICBjb250YWN0cyxcbiAgICAgIGNvbnRhY3RzRm9yUmVzb3VyY2U6IFtdLCAvLyBGSVhNRTogaXMgdGhhdCByZWFsbHkgdXNlZnVsPz9cbiAgICAgIGtleXdvcmRzLFxuICAgICAgdGhlbWVzLFxuICAgICAgYWNjZXNzQ29uc3RyYWludHMsXG4gICAgICB1c2VMaW1pdGF0aW9ucyxcbiAgICAgIGxpY2Vuc2VzLFxuICAgICAgLi4uKGRhdGFzZXRDcmVhdGVkICYmIHsgZGF0YXNldENyZWF0ZWQgfSksXG4gICAgICAuLi4oZGF0YXNldFVwZGF0ZWQgJiYgeyBkYXRhc2V0VXBkYXRlZCB9KSxcbiAgICAgIGxpbmVhZ2UsXG4gICAgICAuLi4oc3BhdGlhbFJlcHJlc2VudGF0aW9uICYmIHsgc3BhdGlhbFJlcHJlc2VudGF0aW9uIH0pLFxuICAgICAgb3ZlcnZpZXdzLFxuICAgICAgc3BhdGlhbEV4dGVudHMsXG4gICAgICB0ZW1wb3JhbEV4dGVudHMsXG4gICAgICBkaXN0cmlidXRpb25zLFxuICAgICAgdXBkYXRlRnJlcXVlbmN5LFxuICAgIH0gYXMgRGF0YXNldFJlY29yZFxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG9ubGluZVJlc291cmNlcyA9IHJlYWRPbmxpbmVSZXNvdXJjZXMocm9vdEVsKVxuICAgIHJldHVybiB7XG4gICAgICB1bmlxdWVJZGVudGlmaWVyLFxuICAgICAga2luZCxcbiAgICAgIHJlY29yZENyZWF0ZWQsXG4gICAgICByZWNvcmRVcGRhdGVkLFxuICAgICAgdGl0bGUsXG4gICAgICBhYnN0cmFjdCxcbiAgICAgIG93bmVyT3JnYW5pemF0aW9uLFxuICAgICAgY29udGFjdHMsXG4gICAgICBrZXl3b3JkcyxcbiAgICAgIHRoZW1lcyxcbiAgICAgIGFjY2Vzc0NvbnN0cmFpbnRzLFxuICAgICAgdXNlTGltaXRhdGlvbnMsXG4gICAgICBsaWNlbnNlcyxcbiAgICAgIG92ZXJ2aWV3cyxcbiAgICAgIG9ubGluZVJlc291cmNlcyxcbiAgICB9IGFzIFNlcnZpY2VSZWNvcmRcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9YbWwocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCBvcmlnaW5hbFhtbD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG9yaWdpbmFsRG9jID0gb3JpZ2luYWxYbWwgPyBwYXJzZVhtbFN0cmluZyhvcmlnaW5hbFhtbCkgOiBudWxsXG4gIGNvbnN0IG9yaWdpbmFsUmVjb3JkID0gb3JpZ2luYWxYbWwgPyB0b01vZGVsKG9yaWdpbmFsWG1sKSA6IG51bGxcbiAgY29uc3Qgcm9vdEVsID0gb3JpZ2luYWxEb2NcbiAgICA/IGdldFJvb3RFbGVtZW50KG9yaWdpbmFsRG9jKVxuICAgIDogY3JlYXRlRWxlbWVudCgnZ21kOk1EX01ldGFkYXRhJykoKVxuXG4gIGZ1bmN0aW9uIGZpZWxkQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gb3JpZ2luYWxSZWNvcmQgIT09IG51bGxcbiAgICAgID8gIWlzRXF1YWwocmVjb3JkW25hbWVdLCBvcmlnaW5hbFJlY29yZFtuYW1lXSlcbiAgICAgIDogdHJ1ZVxuICB9XG5cbiAgd3JpdGVVbmlxdWVJZGVudGlmaWVyKHJlY29yZCwgcm9vdEVsKVxuICB3cml0ZUtpbmQocmVjb3JkLCByb290RWwpXG4gIGZpZWxkQ2hhbmdlZCgnb3duZXJPcmdhbml6YXRpb24nKSAmJiB3cml0ZU93bmVyT3JnYW5pemF0aW9uKHJlY29yZCwgcm9vdEVsKVxuICBmaWVsZENoYW5nZWQoJ3JlY29yZFVwZGF0ZWQnKSAmJiB3cml0ZVJlY29yZFVwZGF0ZWQocmVjb3JkLCByb290RWwpXG4gIHdyaXRlVGl0bGUocmVjb3JkLCByb290RWwpXG4gIHdyaXRlQWJzdHJhY3QocmVjb3JkLCByb290RWwpXG4gIGZpZWxkQ2hhbmdlZCgnY29udGFjdHMnKSAmJiB3cml0ZUNvbnRhY3RzKHJlY29yZCwgcm9vdEVsKVxuICBmaWVsZENoYW5nZWQoJ2tleXdvcmRzJykgJiYgd3JpdGVLZXl3b3JkcyhyZWNvcmQsIHJvb3RFbClcbiAgZmllbGRDaGFuZ2VkKCd0aGVtZXMnKSAmJiB3cml0ZVRoZW1lcyhyZWNvcmQsIHJvb3RFbClcbiAgZmllbGRDaGFuZ2VkKCdhY2Nlc3NDb25zdHJhaW50cycpICYmIHdyaXRlQWNjZXNzQ29uc3RyYWludHMocmVjb3JkLCByb290RWwpXG4gIGZpZWxkQ2hhbmdlZCgnbGljZW5zZXMnKSAmJiB3cml0ZUxpY2Vuc2VzKHJlY29yZCwgcm9vdEVsKVxuICBmaWVsZENoYW5nZWQoJ3VzZUxpbWl0YXRpb25zJykgJiYgd3JpdGVVc2VMaW1pdGF0aW9ucyhyZWNvcmQsIHJvb3RFbClcblxuICBpZiAocmVjb3JkLmtpbmQgPT09ICdkYXRhc2V0Jykge1xuICAgIHdyaXRlU3RhdHVzKHJlY29yZCwgcm9vdEVsKVxuICAgIGZpZWxkQ2hhbmdlZCgndXBkYXRlRnJlcXVlbmN5JykgJiYgd3JpdGVVcGRhdGVGcmVxdWVuY3kocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCdkYXRhc2V0Q3JlYXRlZCcpICYmIHdyaXRlRGF0YXNldENyZWF0ZWQocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCdkYXRhc2V0VXBkYXRlZCcpICYmIHdyaXRlRGF0YXNldFVwZGF0ZWQocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCdzcGF0aWFsUmVwcmVzZW50YXRpb24nKSAmJlxuICAgICAgd3JpdGVTcGF0aWFsUmVwcmVzZW50YXRpb24ocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCdvdmVydmlld3MnKSAmJiB3cml0ZUdyYXBoaWNPdmVydmlld3MocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCdkaXN0cmlidXRpb25zJykgJiYgd3JpdGVEaXN0cmlidXRpb25zKHJlY29yZCwgcm9vdEVsKVxuICAgIHdyaXRlTGluZWFnZShyZWNvcmQsIHJvb3RFbClcbiAgfSBlbHNlIHtcbiAgICBmaWVsZENoYW5nZWQoJ29ubGluZVJlc291cmNlcycpICYmIHdyaXRlT25saW5lUmVzb3VyY2VzKHJlY29yZCwgcm9vdEVsKVxuICB9XG5cbiAgY29uc3QgbmV3RG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudChyb290RWwpXG4gIHJldHVybiB4bWxUb1N0cmluZyhuZXdEb2N1bWVudClcbn1cbiJdfQ==
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvbWV0YWRhdGEtY29udmVydGVyL3NyYy9saWIvaXNvMTkxMzkvY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFDTCxjQUFjLEVBQ2QsYUFBYSxFQUNiLGNBQWMsRUFDZCxjQUFjLEVBQ2QsV0FBVyxHQUNaLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFDTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsU0FBUyxFQUNULHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLFdBQVcsRUFDWCxXQUFXLEVBQ1gsVUFBVSxFQUNWLHFCQUFxQixFQUNyQixvQkFBb0IsR0FDckIsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFlBQVksRUFDWixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3BCLFlBQVksRUFDWixXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFNBQVMsRUFDVCxvQkFBb0IsRUFDcEIsbUJBQW1CLEdBQ3BCLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUUx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QVksQ0FBQyxXQUFXLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDbEUsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNuRSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0tBQzdCO1NBQU07UUFDTCxZQUFZLENBQUMsaUJBQWlCLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7S0FDeEU7SUFFRCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDMUMsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIERhdGFzZXRSZWNvcmQsXG4gIFNlcnZpY2VSZWNvcmQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7XG4gIGNyZWF0ZURvY3VtZW50LFxuICBjcmVhdGVFbGVtZW50LFxuICBnZXRSb290RWxlbWVudCxcbiAgcGFyc2VYbWxTdHJpbmcsXG4gIHhtbFRvU3RyaW5nLFxufSBmcm9tICcuLi94bWwtdXRpbHMnXG5pbXBvcnQge1xuICB3cml0ZUFic3RyYWN0LFxuICB3cml0ZUNvbnRhY3RzLFxuICB3cml0ZURhdGFzZXRDcmVhdGVkLFxuICB3cml0ZURhdGFzZXRVcGRhdGVkLFxuICB3cml0ZURpc3RyaWJ1dGlvbnMsXG4gIHdyaXRlR3JhcGhpY092ZXJ2aWV3cyxcbiAgd3JpdGVLZXl3b3JkcyxcbiAgd3JpdGVLaW5kLFxuICB3cml0ZUxlZ2FsQ29uc3RyYWludHMsXG4gIHdyaXRlTGljZW5zZXMsXG4gIHdyaXRlTGluZWFnZSxcbiAgd3JpdGVPbmxpbmVSZXNvdXJjZXMsXG4gIHdyaXRlT3RoZXJDb25zdHJhaW50cyxcbiAgd3JpdGVPd25lck9yZ2FuaXphdGlvbixcbiAgd3JpdGVSZWNvcmRVcGRhdGVkLFxuICB3cml0ZVNlY3VyaXR5Q29uc3RyYWludHMsXG4gIHdyaXRlU3BhdGlhbFJlcHJlc2VudGF0aW9uLFxuICB3cml0ZVN0YXR1cyxcbiAgd3JpdGVUb3BpY3MsXG4gIHdyaXRlVGl0bGUsXG4gIHdyaXRlVW5pcXVlSWRlbnRpZmllcixcbiAgd3JpdGVVcGRhdGVGcmVxdWVuY3ksXG59IGZyb20gJy4vd3JpdGUtcGFydHMnXG5pbXBvcnQge1xuICByZWFkQWJzdHJhY3QsXG4gIHJlYWRDb250YWN0cyxcbiAgcmVhZERhdGFzZXRDcmVhdGVkLFxuICByZWFkRGF0YXNldFVwZGF0ZWQsXG4gIHJlYWREaXN0cmlidXRpb25zLFxuICByZWFkSXNvVG9waWNzLFxuICByZWFkS2V5d29yZHMsXG4gIHJlYWRLaW5kLFxuICByZWFkTGVnYWxDb25zdHJhaW50cyxcbiAgcmVhZExpY2Vuc2VzLFxuICByZWFkTGluZWFnZSxcbiAgcmVhZE9ubGluZVJlc291cmNlcyxcbiAgcmVhZE90aGVyQ29uc3RyYWludHMsXG4gIHJlYWRPdmVydmlld3MsXG4gIHJlYWRPd25lck9yZ2FuaXphdGlvbixcbiAgcmVhZFJlY29yZFVwZGF0ZWQsXG4gIHJlYWRTZWN1cml0eUNvbnN0cmFpbnRzLFxuICByZWFkU3BhdGlhbEV4dGVudHMsXG4gIHJlYWRTcGF0aWFsUmVwcmVzZW50YXRpb24sXG4gIHJlYWRTdGF0dXMsXG4gIHJlYWRUZW1wb3JhbEV4dGVudHMsXG4gIHJlYWRUaXRsZSxcbiAgcmVhZFVuaXF1ZUlkZW50aWZpZXIsXG4gIHJlYWRVcGRhdGVGcmVxdWVuY3ksXG59IGZyb20gJy4vcmVhZC1wYXJ0cydcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICcuLi9jb252ZXJ0LXV0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gdG9Nb2RlbCh4bWw6IHN0cmluZyk6IENhdGFsb2dSZWNvcmQge1xuICBjb25zdCBkb2MgPSBwYXJzZVhtbFN0cmluZyh4bWwpXG4gIGNvbnN0IHJvb3RFbCA9IGdldFJvb3RFbGVtZW50KGRvYylcblxuICBjb25zdCB1bmlxdWVJZGVudGlmaWVyID0gcmVhZFVuaXF1ZUlkZW50aWZpZXIocm9vdEVsKVxuICBjb25zdCBraW5kID0gcmVhZEtpbmQocm9vdEVsKVxuICBjb25zdCBvd25lck9yZ2FuaXphdGlvbiA9IHJlYWRPd25lck9yZ2FuaXphdGlvbihyb290RWwpXG4gIGNvbnN0IHRpdGxlID0gcmVhZFRpdGxlKHJvb3RFbClcbiAgY29uc3QgYWJzdHJhY3QgPSByZWFkQWJzdHJhY3Qocm9vdEVsKVxuICBjb25zdCBjb250YWN0cyA9IHJlYWRDb250YWN0cyhyb290RWwpXG4gIGNvbnN0IHJlY29yZFVwZGF0ZWQgPSByZWFkUmVjb3JkVXBkYXRlZChyb290RWwpXG4gIGNvbnN0IHJlY29yZENyZWF0ZWQgPSByZWNvcmRVcGRhdGVkXG4gIGNvbnN0IGtleXdvcmRzID0gcmVhZEtleXdvcmRzKHJvb3RFbClcbiAgY29uc3QgdG9waWNzID0gcmVhZElzb1RvcGljcyhyb290RWwpXG4gIGNvbnN0IGxlZ2FsQ29uc3RyYWludHMgPSByZWFkTGVnYWxDb25zdHJhaW50cyhyb290RWwpXG4gIGNvbnN0IG90aGVyQ29uc3RyYWludHMgPSByZWFkT3RoZXJDb25zdHJhaW50cyhyb290RWwpXG4gIGNvbnN0IHNlY3VyaXR5Q29uc3RyYWludHMgPSByZWFkU2VjdXJpdHlDb25zdHJhaW50cyhyb290RWwpXG4gIGNvbnN0IGxpY2Vuc2VzID0gcmVhZExpY2Vuc2VzKHJvb3RFbClcbiAgY29uc3Qgb3ZlcnZpZXdzID0gcmVhZE92ZXJ2aWV3cyhyb290RWwpXG5cbiAgaWYgKGtpbmQgPT09ICdkYXRhc2V0Jykge1xuICAgIGNvbnN0IHN0YXR1cyA9IHJlYWRTdGF0dXMocm9vdEVsKVxuICAgIGNvbnN0IGRhdGFzZXRDcmVhdGVkID0gcmVhZERhdGFzZXRDcmVhdGVkKHJvb3RFbClcbiAgICBjb25zdCBkYXRhc2V0VXBkYXRlZCA9IHJlYWREYXRhc2V0VXBkYXRlZChyb290RWwpXG4gICAgY29uc3Qgc3BhdGlhbFJlcHJlc2VudGF0aW9uID0gcmVhZFNwYXRpYWxSZXByZXNlbnRhdGlvbihyb290RWwpXG4gICAgY29uc3Qgc3BhdGlhbEV4dGVudHMgPSByZWFkU3BhdGlhbEV4dGVudHMocm9vdEVsKVxuICAgIGNvbnN0IHRlbXBvcmFsRXh0ZW50cyA9IHJlYWRUZW1wb3JhbEV4dGVudHMocm9vdEVsKVxuICAgIGNvbnN0IGxpbmVhZ2UgPSByZWFkTGluZWFnZShyb290RWwpXG4gICAgY29uc3QgZGlzdHJpYnV0aW9ucyA9IHJlYWREaXN0cmlidXRpb25zKHJvb3RFbClcbiAgICBjb25zdCB1cGRhdGVGcmVxdWVuY3kgPSByZWFkVXBkYXRlRnJlcXVlbmN5KHJvb3RFbClcblxuICAgIHJldHVybiB7XG4gICAgICB1bmlxdWVJZGVudGlmaWVyLFxuICAgICAga2luZCxcbiAgICAgIHJlY29yZENyZWF0ZWQsXG4gICAgICByZWNvcmRVcGRhdGVkLFxuICAgICAgc3RhdHVzLFxuICAgICAgdGl0bGUsXG4gICAgICBhYnN0cmFjdCxcbiAgICAgIG93bmVyT3JnYW5pemF0aW9uLFxuICAgICAgY29udGFjdHMsXG4gICAgICBjb250YWN0c0ZvclJlc291cmNlOiBbXSwgLy8gRklYTUU6IGlzIHRoYXQgcmVhbGx5IHVzZWZ1bD8/XG4gICAgICBrZXl3b3JkcyxcbiAgICAgIHRvcGljcyxcbiAgICAgIGxpY2Vuc2VzLFxuICAgICAgbGVnYWxDb25zdHJhaW50cyxcbiAgICAgIHNlY3VyaXR5Q29uc3RyYWludHMsXG4gICAgICBvdGhlckNvbnN0cmFpbnRzLFxuICAgICAgLi4uKGRhdGFzZXRDcmVhdGVkICYmIHsgZGF0YXNldENyZWF0ZWQgfSksXG4gICAgICAuLi4oZGF0YXNldFVwZGF0ZWQgJiYgeyBkYXRhc2V0VXBkYXRlZCB9KSxcbiAgICAgIGxpbmVhZ2UsXG4gICAgICAuLi4oc3BhdGlhbFJlcHJlc2VudGF0aW9uICYmIHsgc3BhdGlhbFJlcHJlc2VudGF0aW9uIH0pLFxuICAgICAgb3ZlcnZpZXdzLFxuICAgICAgc3BhdGlhbEV4dGVudHMsXG4gICAgICB0ZW1wb3JhbEV4dGVudHMsXG4gICAgICBkaXN0cmlidXRpb25zLFxuICAgICAgdXBkYXRlRnJlcXVlbmN5LFxuICAgIH0gYXMgRGF0YXNldFJlY29yZFxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG9ubGluZVJlc291cmNlcyA9IHJlYWRPbmxpbmVSZXNvdXJjZXMocm9vdEVsKVxuICAgIHJldHVybiB7XG4gICAgICB1bmlxdWVJZGVudGlmaWVyLFxuICAgICAga2luZCxcbiAgICAgIHJlY29yZENyZWF0ZWQsXG4gICAgICByZWNvcmRVcGRhdGVkLFxuICAgICAgdGl0bGUsXG4gICAgICBhYnN0cmFjdCxcbiAgICAgIG93bmVyT3JnYW5pemF0aW9uLFxuICAgICAgY29udGFjdHMsXG4gICAgICBrZXl3b3JkcyxcbiAgICAgIHRvcGljcyxcbiAgICAgIGxpY2Vuc2VzLFxuICAgICAgbGVnYWxDb25zdHJhaW50cyxcbiAgICAgIHNlY3VyaXR5Q29uc3RyYWludHMsXG4gICAgICBvdGhlckNvbnN0cmFpbnRzLFxuICAgICAgb3ZlcnZpZXdzLFxuICAgICAgb25saW5lUmVzb3VyY2VzLFxuICAgIH0gYXMgU2VydmljZVJlY29yZFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1htbChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIG9yaWdpbmFsWG1sPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgb3JpZ2luYWxEb2MgPSBvcmlnaW5hbFhtbCA/IHBhcnNlWG1sU3RyaW5nKG9yaWdpbmFsWG1sKSA6IG51bGxcbiAgY29uc3Qgb3JpZ2luYWxSZWNvcmQgPSBvcmlnaW5hbFhtbCA/IHRvTW9kZWwob3JpZ2luYWxYbWwpIDogbnVsbFxuICBjb25zdCByb290RWwgPSBvcmlnaW5hbERvY1xuICAgID8gZ2V0Um9vdEVsZW1lbnQob3JpZ2luYWxEb2MpXG4gICAgOiBjcmVhdGVFbGVtZW50KCdnbWQ6TURfTWV0YWRhdGEnKSgpXG5cbiAgZnVuY3Rpb24gZmllbGRDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBvcmlnaW5hbFJlY29yZCAhPT0gbnVsbFxuICAgICAgPyAhaXNFcXVhbChyZWNvcmRbbmFtZV0sIG9yaWdpbmFsUmVjb3JkW25hbWVdKVxuICAgICAgOiB0cnVlXG4gIH1cblxuICB3cml0ZVVuaXF1ZUlkZW50aWZpZXIocmVjb3JkLCByb290RWwpXG4gIHdyaXRlS2luZChyZWNvcmQsIHJvb3RFbClcbiAgZmllbGRDaGFuZ2VkKCdvd25lck9yZ2FuaXphdGlvbicpICYmIHdyaXRlT3duZXJPcmdhbml6YXRpb24ocmVjb3JkLCByb290RWwpXG4gIGZpZWxkQ2hhbmdlZCgncmVjb3JkVXBkYXRlZCcpICYmIHdyaXRlUmVjb3JkVXBkYXRlZChyZWNvcmQsIHJvb3RFbClcbiAgd3JpdGVUaXRsZShyZWNvcmQsIHJvb3RFbClcbiAgd3JpdGVBYnN0cmFjdChyZWNvcmQsIHJvb3RFbClcbiAgZmllbGRDaGFuZ2VkKCdjb250YWN0cycpICYmIHdyaXRlQ29udGFjdHMocmVjb3JkLCByb290RWwpXG4gIGZpZWxkQ2hhbmdlZCgna2V5d29yZHMnKSAmJiB3cml0ZUtleXdvcmRzKHJlY29yZCwgcm9vdEVsKVxuICBmaWVsZENoYW5nZWQoJ3RvcGljcycpICYmIHdyaXRlVG9waWNzKHJlY29yZCwgcm9vdEVsKVxuICBmaWVsZENoYW5nZWQoJ2xlZ2FsQ29uc3RyYWludHMnKSAmJiB3cml0ZUxlZ2FsQ29uc3RyYWludHMocmVjb3JkLCByb290RWwpXG4gIGZpZWxkQ2hhbmdlZCgnc2VjdXJpdHlDb25zdHJhaW50cycpICYmXG4gICAgd3JpdGVTZWN1cml0eUNvbnN0cmFpbnRzKHJlY29yZCwgcm9vdEVsKVxuICBmaWVsZENoYW5nZWQoJ2xpY2Vuc2VzJykgJiYgd3JpdGVMaWNlbnNlcyhyZWNvcmQsIHJvb3RFbClcbiAgZmllbGRDaGFuZ2VkKCdvdGhlckNvbnN0cmFpbnRzJykgJiYgd3JpdGVPdGhlckNvbnN0cmFpbnRzKHJlY29yZCwgcm9vdEVsKVxuXG4gIGlmIChyZWNvcmQua2luZCA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgd3JpdGVTdGF0dXMocmVjb3JkLCByb290RWwpXG4gICAgZmllbGRDaGFuZ2VkKCd1cGRhdGVGcmVxdWVuY3knKSAmJiB3cml0ZVVwZGF0ZUZyZXF1ZW5jeShyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ2RhdGFzZXRDcmVhdGVkJykgJiYgd3JpdGVEYXRhc2V0Q3JlYXRlZChyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ2RhdGFzZXRVcGRhdGVkJykgJiYgd3JpdGVEYXRhc2V0VXBkYXRlZChyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ3NwYXRpYWxSZXByZXNlbnRhdGlvbicpICYmXG4gICAgICB3cml0ZVNwYXRpYWxSZXByZXNlbnRhdGlvbihyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ292ZXJ2aWV3cycpICYmIHdyaXRlR3JhcGhpY092ZXJ2aWV3cyhyZWNvcmQsIHJvb3RFbClcbiAgICBmaWVsZENoYW5nZWQoJ2Rpc3RyaWJ1dGlvbnMnKSAmJiB3cml0ZURpc3RyaWJ1dGlvbnMocmVjb3JkLCByb290RWwpXG4gICAgd3JpdGVMaW5lYWdlKHJlY29yZCwgcm9vdEVsKVxuICB9IGVsc2Uge1xuICAgIGZpZWxkQ2hhbmdlZCgnb25saW5lUmVzb3VyY2VzJykgJiYgd3JpdGVPbmxpbmVSZXNvdXJjZXMocmVjb3JkLCByb290RWwpXG4gIH1cblxuICBjb25zdCBuZXdEb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KHJvb3RFbClcbiAgcmV0dXJuIHhtbFRvU3RyaW5nKG5ld0RvY3VtZW50KVxufVxuIl19
|
|
@@ -4,6 +4,7 @@ import { findChildElement, findChildrenElement, findNestedElement, findNestedEle
|
|
|
4
4
|
import { combine, fallback, filterArray, flattenArray, getAtIndex, map, mapArray, pipe, } from '../function-utils';
|
|
5
5
|
import { getRoleFromRoleCode } from './codelists/role.mapper';
|
|
6
6
|
import { matchMimeType, matchProtocol } from '../common/distribution.mapper';
|
|
7
|
+
import { getKeywordTypeFromKeywordTypeCode } from './codelists/keyword.mapper';
|
|
7
8
|
function extractCharacterString() {
|
|
8
9
|
return pipe(fallback(findChildElement('gco:CharacterString', false), findChildElement('gmx:Anchor', false)), readText());
|
|
9
10
|
}
|
|
@@ -66,28 +67,32 @@ function extractStatus() {
|
|
|
66
67
|
return pipe(findChildElement('gmd:MD_ProgressCode'), readAttribute('codeListValue'), map(getStatusFromStatusCode));
|
|
67
68
|
}
|
|
68
69
|
// from gmd:resourceConstraints
|
|
69
|
-
function
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
function extractLegalConstraints() {
|
|
71
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') === -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
72
|
+
...(url && { url }),
|
|
72
73
|
text,
|
|
73
|
-
type: 'other',
|
|
74
74
|
})));
|
|
75
|
-
|
|
75
|
+
}
|
|
76
|
+
// from gmd:resourceConstraints
|
|
77
|
+
function extractSecurityConstraints() {
|
|
78
|
+
return pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
79
|
+
...(url && { url }),
|
|
76
80
|
text,
|
|
77
|
-
type: 'security',
|
|
78
81
|
})));
|
|
79
|
-
return pipe(combine(getOtherConstraints, getSecurityConstraints), flattenArray());
|
|
80
82
|
}
|
|
81
83
|
// from gmd:resourceConstraints
|
|
82
|
-
function
|
|
83
|
-
return pipe(
|
|
84
|
+
function extractOtherConstraints() {
|
|
85
|
+
return pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
86
|
+
...(url && { url }),
|
|
87
|
+
text,
|
|
88
|
+
})));
|
|
84
89
|
}
|
|
85
90
|
// from gmd:resourceConstraints
|
|
86
91
|
function extractLicenses() {
|
|
87
|
-
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(
|
|
92
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
88
93
|
...(url && { url }),
|
|
89
94
|
text,
|
|
90
|
-
})))
|
|
95
|
+
})));
|
|
91
96
|
}
|
|
92
97
|
// from gmd:MD_Distribution
|
|
93
98
|
function extractDatasetDistributions() {
|
|
@@ -246,31 +251,55 @@ export function readDatasetUpdated(rootEl) {
|
|
|
246
251
|
export function readContacts(rootEl) {
|
|
247
252
|
return pipe(findIdentification(), combine(findChildrenElement('gmd:contact'), findChildrenElement('gmd:pointOfContact')), flattenArray(), mapArray(findChildElement('gmd:CI_ResponsibleParty', false)), mapArray(extractIndividuals()), flattenArray())(rootEl);
|
|
248
253
|
}
|
|
249
|
-
|
|
250
|
-
|
|
254
|
+
// from gmd:thesaurusName
|
|
255
|
+
function readThesaurus(rootEl) {
|
|
256
|
+
if (!rootEl)
|
|
257
|
+
return null;
|
|
258
|
+
const findIdentifier = findNestedElement('gmd:CI_Citation', 'gmd:identifier', 'gmd:MD_Identifier', 'gmd:code');
|
|
259
|
+
const id = pipe(findIdentifier, extractCharacterString())(rootEl);
|
|
260
|
+
const url = pipe(findIdentifier, extractUrl())(rootEl);
|
|
261
|
+
const name = pipe(findNestedElement('gmd:CI_Citation', 'gmd:title'), extractCharacterString())(rootEl);
|
|
262
|
+
return {
|
|
263
|
+
id,
|
|
264
|
+
...(name && { name }),
|
|
265
|
+
...(url && { url }),
|
|
266
|
+
};
|
|
251
267
|
}
|
|
252
|
-
|
|
253
|
-
|
|
268
|
+
// from gmd:MD_Keywords
|
|
269
|
+
function readKeywordGroup(rootEl) {
|
|
270
|
+
const type = pipe(findChildrenElement('gmd:MD_KeywordTypeCode'), mapArray(readAttribute('codeListValue')), map((values) => getKeywordTypeFromKeywordTypeCode(values[0])))(rootEl);
|
|
271
|
+
const thesaurus = pipe(findNestedElement('gmd:thesaurusName'), readThesaurus)(rootEl);
|
|
272
|
+
return pipe(findChildrenElement('gmd:keyword'), mapArray((el) => {
|
|
273
|
+
const label = extractCharacterString()(el);
|
|
274
|
+
return {
|
|
275
|
+
...(thesaurus ? { thesaurus } : {}),
|
|
276
|
+
label,
|
|
277
|
+
type,
|
|
278
|
+
};
|
|
279
|
+
}))(rootEl);
|
|
254
280
|
}
|
|
255
|
-
export function
|
|
256
|
-
return
|
|
281
|
+
export function readKeywords(rootEl) {
|
|
282
|
+
return pipe(findIdentification(), findNestedElements('gmd:descriptiveKeywords', 'gmd:MD_Keywords'), mapArray(readKeywordGroup), flattenArray())(rootEl);
|
|
257
283
|
}
|
|
258
284
|
export function readStatus(rootEl) {
|
|
259
285
|
return pipe(findIdentification(), findChildElement('gmd:status', false), extractStatus())(rootEl);
|
|
260
286
|
}
|
|
261
287
|
const getConstraints = pipe(findIdentification(), findChildrenElement('gmd:resourceConstraints', false));
|
|
262
|
-
export function
|
|
263
|
-
return pipe(getConstraints, mapArray(
|
|
288
|
+
export function readLegalConstraints(rootEl) {
|
|
289
|
+
return pipe(getConstraints, mapArray(extractLegalConstraints()), flattenArray(), flattenArray())(rootEl);
|
|
290
|
+
}
|
|
291
|
+
export function readSecurityConstraints(rootEl) {
|
|
292
|
+
return pipe(getConstraints, mapArray(extractSecurityConstraints()), flattenArray())(rootEl);
|
|
264
293
|
}
|
|
265
|
-
export function
|
|
266
|
-
return pipe(getConstraints, mapArray(
|
|
294
|
+
export function readOtherConstraints(rootEl) {
|
|
295
|
+
return pipe(getConstraints, mapArray(extractOtherConstraints()), flattenArray())(rootEl);
|
|
267
296
|
}
|
|
268
297
|
export function readLicenses(rootEl) {
|
|
269
298
|
return pipe(getConstraints, mapArray(extractLicenses()), flattenArray())(rootEl);
|
|
270
299
|
}
|
|
271
300
|
// not used yet
|
|
272
301
|
export function readIsoTopics(rootEl) {
|
|
273
|
-
return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode',
|
|
302
|
+
return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode', true), mapArray(readText()))(rootEl);
|
|
274
303
|
}
|
|
275
304
|
export function readSpatialRepresentation(rootEl) {
|
|
276
305
|
return pipe(findIdentification(), findNestedElement('gmd:spatialRepresentationType', 'gmd:MD_SpatialRepresentationTypeCode'), readAttribute('codeListValue'), map(getSpatialRepresentationFromCode))(rootEl);
|
|
@@ -326,4 +355,4 @@ export function extractServiceOnlineResources() {
|
|
|
326
355
|
export function readOnlineResources(rootEl) {
|
|
327
356
|
return pipe(findNestedElements('gmd:distributionInfo', 'gmd:MD_Distribution'), mapArray(extractServiceOnlineResources()), flattenArray())(rootEl);
|
|
328
357
|
}
|
|
329
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1wYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3JlYWQtcGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ25FLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3pGLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLGFBQWEsRUFDYixRQUFRLEdBRVQsTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUVMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBRTVFLFNBQVMsc0JBQXNCO0lBQzdCLE9BQU8sSUFBSSxDQUNULFFBQVEsQ0FDTixnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsRUFDOUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUN0QyxFQUNELFFBQVEsRUFBRSxDQUNYLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlO0lBQ3RCLE9BQU8sSUFBSSxDQUNULFFBQVEsQ0FDTixnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQ3ZDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FDcEMsRUFDRCxRQUFRLEVBQUUsRUFDVixHQUFHLENBQUMs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QUFFLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQzthQUNwQyxDQUFBO1NBQ0Y7YUFBTTtZQUNMLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFdBQVcsRUFBRSxHQUFHO2dCQUNoQixRQUFRO2dCQUNSLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQzthQUNwQyxDQUFBO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsTUFBa0I7SUFFbEIsT0FBTyxJQUFJLENBQ1Qsa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUscUJBQXFCLENBQUMsRUFDakUsUUFBUSxDQUFDLDZCQUE2QixFQUFFLENBQUMsRUFDekMsWUFBWSxFQUFFLENBQ2YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBY2Nlc3NDb25zdHJhaW50LFxuICBBY2Nlc3NDb25zdHJhaW50VHlwZSxcbiAgRGF0YXNldERpc3RyaWJ1dGlvbixcbiAgRGF0YXNldFNwYXRpYWxFeHRlbnQsXG4gIERhdGFzZXRUZW1wb3JhbEV4dGVudCxcbiAgR3JhcGhpY092ZXJ2aWV3LFxuICBJbmRpdmlkdWFsLFxuICBMaWNlbnNlLFxuICBPcmdhbml6YXRpb24sXG4gIFJlY29yZEtpbmQsXG4gIFJlY29yZFN0YXR1cyxcbiAgUm9sZSxcbiAgU2VydmljZU9ubGluZVJlc291cmNlLFxuICBTcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlLFxuICBVcGRhdGVGcmVxdWVuY3ksXG4gIFVwZGF0ZUZyZXF1ZW5jeUN1c3RvbSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUgfSBmcm9tICcuL2NvZGVsaXN0cy9zdGF0dXMubWFwcGVyJ1xuaW1wb3J0IHsgZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUZyZXF1ZW5jeUNvZGUgfSBmcm9tICcuL2NvZGVsaXN0cy91cGRhdGUtZnJlcXVlbmN5Lm1hcHBlcidcbmltcG9ydCB7XG4gIGZpbmRDaGlsZEVsZW1lbnQsXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIGZpbmRQYXJlbnQsXG4gIHJlYWRBdHRyaWJ1dGUsXG4gIHJlYWRUZXh0LFxuICBYbWxFbGVtZW50LFxufSBmcm9tICcuLi94bWwtdXRpbHMnXG5pbXBvcnQge1xuICBDaGFpbmFibGVGdW5jdGlvbixcbiAgY29tYmluZSxcbiAgZmFsbGJhY2ssXG4gIGZpbHRlckFycmF5LFxuICBmbGF0dGVuQXJyYXksXG4gIGdldEF0SW5kZXgsXG4gIG1hcCxcbiAgbWFwQXJyYXksXG4gIHBpcGUsXG59IGZyb20gJy4uL2Z1bmN0aW9uLXV0aWxzJ1xuaW1wb3J0IHsgZ2V0Um9sZUZyb21Sb2xlQ29kZSB9IGZyb20gJy4vY29kZWxpc3RzL3JvbGUubWFwcGVyJ1xuaW1wb3J0IHsgbWF0Y2hNaW1lVHlwZSwgbWF0Y2hQcm90b2NvbCB9IGZyb20gJy4uL2NvbW1vbi9kaXN0cmlidXRpb24ubWFwcGVyJ1xuXG5mdW5jdGlvbiBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIHN0cmluZz4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmYWxsYmFjayhcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6QW5jaG9yJywgZmFsc2UpXG4gICAgKSxcbiAgICByZWFkVGV4dCgpXG4gIClcbn1cblxuZnVuY3Rpb24gZXh0cmFjdERhdGVUaW1lKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIERhdGU+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmFsbGJhY2soXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286RGF0ZVRpbWUnLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286RGF0ZScsIGZhbHNlKVxuICAgICksXG4gICAgcmVhZFRleHQoKSxcbiAgICBtYXAoKGRhdGVTdHIpID0+IChkYXRlU3RyID8gbmV3IERhdGUoZGF0ZVN0cikgOiBudWxsKSlcbiAgKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0VXJsKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFVSTD4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpVUkwnLCBmYWxzZSksIHJlYWRUZXh0KCkpXG4gIGNvbnN0IGdldENoYXJhY3RlclN0cmluZyA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkNoYXJhY3RlclN0cmluZycsIGZhbHNlKSxcbiAgICByZWFkVGV4dCgpXG4gIClcbiAgY29uc3QgZ2V0QW5jaG9yID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6QW5jaG9yJywgZmFsc2UpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZhbGxiYWNrKGdldFVybCwgZ2V0QW5jaG9yLCBnZXRDaGFyYWN0ZXJTdHJpbmcpLFxuICAgIG1hcCgodXJsU3RyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IFVSTCh1cmxTdHIpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfSlcbiAgKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0TWFuZGF0b3J5VXJsKCkge1xuICByZXR1cm4gZmFsbGJhY2soZXh0cmFjdFVybCgpLCAoKSA9PiBuZXcgVVJMKCdodHRwOi8vbWlzc2luZycpKVxufVxuXG4vLyBmcm9tIGdtZDpyb2xlXG5mdW5jdGlvbiBleHRyYWN0Um9sZSgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBSb2xlPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9Sb2xlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoZ2V0Um9sZUZyb21Sb2xlQ29kZSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpDSV9SZXNwb25zaWJsZVBhcnR5XG5mdW5jdGlvbiBleHRyYWN0T3JnYW5pemF0aW9uKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIE9yZ2FuaXphdGlvbj4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6Y29udGFjdEluZm8nLFxuICAgICAgJ2dtZDpDSV9Db250YWN0JyxcbiAgICAgICdnbWQ6b25saW5lUmVzb3VyY2UnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZScsXG4gICAgICAnZ21kOmxpbmthZ2UnXG4gICAgKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGV4dHJhY3RVcmwoKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNvbWJpbmUoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6b3JnYW5pc2F0aW9uTmFtZScsIGZhbHNlKSxcbiAgICAgICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICAgICApLFxuICAgICAgZ2V0VXJsXG4gICAgKSxcbiAgICBtYXAoKFtuYW1lLCB3ZWJzaXRlXSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi4od2Vic2l0ZSAmJiB7IHdlYnNpdGUgfSksXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eVxuZnVuY3Rpb24gZXh0cmFjdEluZGl2aWR1YWxzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBBcnJheTxJbmRpdmlkdWFsPlxuPiB7XG4gIGNvbnN0IGdldFJvbGUgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpyb2xlJyksIGV4dHJhY3RSb2xlKCkpXG4gIGNvbnN0IGdldFBvc2l0aW9uID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cG9zaXRpb25OYW1lJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgY29uc3QgZ2V0TmFtZVBhcnRzID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6aW5kaXZpZHVhbE5hbWUnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCksXG4gICAgbWFwKChmdWxsTmFtZSkgPT4ge1xuICAgICAgaWYgKCFmdWxsTmFtZSkgcmV0dXJuIFtdXG4gICAgICBjb25zdCBwYXJ0cyA9IGZ1bGxOYW1lLnNwbGl0KC9cXHMrLylcbiAgICAgIGlmICghcGFydHMubGVuZ3RoKSByZXR1cm4gW2Z1bGxOYW1lLCBudWxsXVxuICAgICAgY29uc3QgZmlyc3QgPSBwYXJ0cy5zaGlmdCgpXG4gICAgICByZXR1cm4gW2ZpcnN0LCBwYXJ0cy5qb2luKCcgJyldXG4gICAgfSlcbiAgKVxuICBjb25zdCBnZXRPcmdhbml6YXRpb24gPSBleHRyYWN0T3JnYW5pemF0aW9uKClcbiAgY29uc3QgZ2V0RW1haWwgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDplbGVjdHJvbmljTWFpbEFkZHJlc3MnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCksXG4gICAgbWFwKChlbWFpbCkgPT4gKGVtYWlsID09PSBudWxsID8gJ21pc3NpbmdAbWlzc2luZy5jb20nIDogZW1haWwpKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNvbWJpbmUoXG4gICAgICBnZXRSb2xlLFxuICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICBnZXROYW1lUGFydHMsXG4gICAgICBnZXRPcmdhbml6YXRpb24sXG4gICAgICBwaXBlKGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpjb250YWN0SW5mbycpLCBtYXBBcnJheShnZXRFbWFpbCkpXG4gICAgKSxcbiAgICBtYXAoKFtyb2xlLCBwb3NpdGlvbiwgW2ZpcnN0TmFtZSwgbGFzdE5hbWVdLCBvcmdhbml6YXRpb24sIGVtYWlsc10pID0+XG4gICAgICBlbWFpbHMubWFwKChlbWFpbCkgPT4gKHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIHJvbGUsXG4gICAgICAgIG9yZ2FuaXphdGlvbixcbiAgICAgICAgLi4uKHBvc2l0aW9uICYmIHsgcG9zaXRpb24gfSksXG4gICAgICAgIC4uLihmaXJzdE5hbWUgJiYgeyBmaXJzdE5hbWUgfSksXG4gICAgICAgIC4uLihsYXN0TmFtZSAmJiB7IGxhc3ROYW1lIH0pLFxuICAgICAgfSkpXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RTdGF0dXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgUmVjb3JkU3RhdHVzPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpNRF9Qcm9ncmVzc0NvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKGdldFN0YXR1c0Zyb21TdGF0dXNDb2RlKVxuICApXG59XG5cbi8vIGZyb20gZ21kOnJlc291cmNlQ29uc3RyYWludHNcbmZ1bmN0aW9uIGV4dHJhY3RBY2Nlc3NDb25zdHJhaW50cygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8QWNjZXNzQ29uc3RyYWludD5cbj4ge1xuICBjb25zdCBnZXRPdGhlckNvbnN0cmFpbnRzID0gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsIGZhbHNlKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgbWFwKFxuICAgICAgICAgICh2YWx1ZXMpID0+XG4gICAgICAgICAgICB2YWx1ZXMuaW5kZXhPZignbGljZW5zZScpID09PSAtMSAmJlxuICAgICAgICAgICAgdmFsdWVzLmluZGV4T2YoJ290aGVyUmVzdHJpY3Rpb25zJykgPiAtMVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheShmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpLFxuICAgIG1hcEFycmF5KCh0ZXh0KSA9PiAoe1xuICAgICAgdGV4dCxcbiAgICAgIHR5cGU6ICdvdGhlcicgYXMgQWNjZXNzQ29uc3RyYWludFR5cGUsXG4gICAgfSkpXG4gIClcbiAgY29uc3QgZ2V0U2VjdXJpdHlDb25zdHJhaW50cyA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6TURfU2VjdXJpdHlDb25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgIG1hcEFycmF5KGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSksXG4gICAgbWFwQXJyYXkoKHRleHQpID0+ICh7XG4gICAgICB0ZXh0LFxuICAgICAgdHlwZTogJ3NlY3VyaXR5JyBhcyBBY2Nlc3NDb25zdHJhaW50VHlwZSxcbiAgICB9KSlcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBjb21iaW5lKGdldE90aGVyQ29uc3RyYWludHMsIGdldFNlY3VyaXR5Q29uc3RyYWludHMpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZnVuY3Rpb24gZXh0cmFjdFVzZUxpbWl0YXRpb25zKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIEFycmF5PHN0cmluZz4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgY29tYmluZShcbiAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOk1EX0NvbnN0cmFpbnRzJywgJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJywgJ2dtZDp1c2VMaW1pdGF0aW9uJylcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5mdW5jdGlvbiBleHRyYWN0TGljZW5zZXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgQXJyYXk8TGljZW5zZT4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnLCBmYWxzZSksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgIG1hcCgodmFsdWVzKSA9PiB2YWx1ZXMuaW5kZXhPZignbGljZW5zZScpID4gLTEpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgIGNvbWJpbmUoZXh0cmFjdENoYXJhY3RlclN0cmluZygpLCBleHRyYWN0VXJsKCkpLFxuICAgICAgICBtYXAoKFt0ZXh0LCB1cmxdKSA9PiAoe1xuICAgICAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbi8vIGZyb20gZ21kOk1EX0Rpc3RyaWJ1dGlvblxuZnVuY3Rpb24gZXh0cmFjdERhdGFzZXREaXN0cmlidXRpb25zKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBEYXRhc2V0RGlzdHJpYnV0aW9uW11cbj4ge1xuICBjb25zdCBnZXRGb3JtYXQgPSBwaXBlKFxuICAgIGZpbmRQYXJlbnQoJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkZvcm1hdCcsICdnbWQ6TURfRm9ybWF0JywgJ2dtZDpuYW1lJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpLFxuICAgIG1hcChtYXRjaE1pbWVUeXBlKVxuICApXG5cbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGlua2FnZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpXG4gIGNvbnN0IGdldFByb3RvY29sU3RyID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICBjb25zdCBnZXRQcm90b2NvbCA9IHBpcGUoZ2V0UHJvdG9jb2xTdHIsIG1hcChtYXRjaFByb3RvY29sKSlcbiAgY29uc3QgZ2V0T25saW5lRnVuY3Rpb24gPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKVxuICApXG4gIGNvbnN0IGdldElzU2VydmljZSA9IHBpcGUoXG4gICAgZ2V0UHJvdG9jb2wsXG4gICAgbWFwKChwcm90b2NvbCkgPT4gcHJvdG9jb2wgIT09ICdvdGhlcicpXG4gIClcbiAgY29uc3QgZ2V0SXNEb3dubG9hZCA9IHBpcGUoXG4gICAgY29tYmluZShnZXRJc1NlcnZpY2UsIGdldE9ubGluZUZ1bmN0aW9uLCBnZXRQcm90b2NvbFN0ciksXG4gICAgbWFwKFxuICAgICAgKFtpc1NlcnZpY2UsIG9ubGluZUZ1bmN0aW9uLCBwcm90b2NvbFN0cl0pID0+XG4gICAgICAgICghaXNTZXJ2aWNlICYmIG9ubGluZUZ1bmN0aW9uID09PSAnZG93bmxvYWQnKSB8fFxuICAgICAgICAvZG93bmxvYWQvaS50ZXN0KHByb3RvY29sU3RyKVxuICAgIClcbiAgKVxuICBjb25zdCBnZXROYW1lID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bmFtZScpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gIGNvbnN0IGdldERlc2NyaXB0aW9uID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAnZ21kOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpvbkxpbmUnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZ2V0SXNTZXJ2aWNlLFxuICAgICAgICBnZXRJc0Rvd25sb2FkLFxuICAgICAgICBnZXRQcm90b2NvbCxcbiAgICAgICAgZ2V0VXJsLFxuICAgICAgICBnZXROYW1lLFxuICAgICAgICBnZXREZXNjcmlwdGlvbixcbiAgICAgICAgZ2V0Rm9ybWF0XG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIChbaXNTZXJ2aWNlLCBpc0Rvd25sb2FkLCBwcm90b2NvbCwgdXJsLCBuYW1lLCBkZXNjcmlwdGlvbiwgZm9ybWF0XSkgPT4ge1xuICAgICAgICBpZiAoaXNTZXJ2aWNlKSB7XG4gICAgICAgICAgY29uc3QgaGFzSWRlbnRpZmllciA9IHByb3RvY29sID09PSAnd21zJyB8fCBwcm90b2NvbCA9PT0gJ3dmcydcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3NlcnZpY2UnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBhY2Nlc3NTZXJ2aWNlUHJvdG9jb2w6IHByb3RvY29sLFxuICAgICAgICAgICAgLi4uKG5hbWUgJiYgaGFzSWRlbnRpZmllciAmJiB7IGlkZW50aWZpZXJJblNlcnZpY2U6IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEb3dubG9hZCkge1xuICAgICAgICAgIGNvbnN0IG1pbWVUeXBlID0gZm9ybWF0XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkb3dubG9hZCcsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgLi4uKG1pbWVUeXBlICYmIHsgbWltZVR5cGUgfSksXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRVcGRhdGVGcmVxdWVuY3lGcm9tQ3VzdG9tUGVyaW9kKFxuICBpc29QZXJpb2Q6IHN0cmluZ1xuKTogVXBkYXRlRnJlcXVlbmN5Q3VzdG9tIHtcbiAgaWYgKCFpc29QZXJpb2QpIHJldHVybiBudWxsXG4gIGNvbnN0IG1hdGNoZXMgPSBpc29QZXJpb2QubWF0Y2goXG4gICAgL14tP1AoPzooWzAtOV0rKVkpPyg/OihbMC05XSspTSk/KD86KFswLTldKylEKT9UPyg/OihbMC05XSspSCk/L1xuICApXG4gIGlmICghbWF0Y2hlcykgcmV0dXJuIG51bGxcbiAgY29uc3QgeWVhcnMgPSBwYXJzZUludChtYXRjaGVzWzFdLCAxMCkgfHwgMFxuICBjb25zdCBtb250aHMgPSBwYXJzZUludChtYXRjaGVzWzJdLCAxMCkgfHwgMFxuICBjb25zdCBkYXlzID0gcGFyc2VJbnQobWF0Y2hlc1szXSwgMTApIHx8IDBcbiAgY29uc3QgaG91cnMgPSBwYXJzZUludChtYXRjaGVzWzRdLCAxMCkgfHwgMFxuICBpZiAoeWVhcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAneWVhcicsXG4gICAgICB1cGRhdGVkVGltZXM6IDEsXG4gICAgfVxuICB9IGVsc2UgaWYgKG1vbnRocyA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICdtb250aCcsXG4gICAgICB1cGRhdGVkVGltZXM6IDEsXG4gICAgfVxuICB9IGVsc2UgaWYgKG1vbnRocykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICd5ZWFyJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCgxMiAvIG1vbnRocyksXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMgPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnZGF5JyxcbiAgICAgIHVwZGF0ZWRUaW1lczogMSxcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF5cyA8PSA3KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ3dlZWsnLFxuICAgICAgdXBkYXRlZFRpbWVzOiBNYXRoLnJvdW5kKDcgLyBkYXlzKSxcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF5cykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICdtb250aCcsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMzAgLyBkYXlzKSxcbiAgICB9XG4gIH0gZWxzZSBpZiAoaG91cnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnZGF5JyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCgyNCAvIGRheXMpLFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG4vLyBmcm9tIGdtZDpNRF9NYWludGVuYW5jZUluZm9ybWF0aW9uXG5mdW5jdGlvbiBleHRyYWN0VXBkYXRlRnJlcXVlbmN5KCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBVcGRhdGVGcmVxdWVuY3lcbj4ge1xuICByZXR1cm4gZmFsbGJhY2soXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpNRF9NYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUnKSxcbiAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgIG1hcChnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZSlcbiAgICApLFxuICAgIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDp1c2VyRGVmaW5lZE1haW50ZW5hbmNlRnJlcXVlbmN5JyxcbiAgICAgICAgJ2d0czpUTV9QZXJpb2REdXJhdGlvbidcbiAgICAgICksXG4gICAgICByZWFkVGV4dCgpLFxuICAgICAgbWFwKGdldFVwZGF0ZUZyZXF1ZW5jeUZyb21DdXN0b21QZXJpb2QpXG4gICAgKSxcbiAgICBtYXAoKCkgPT4gJ3Vua25vd24nKVxuICApXG59XG5cbi8qKlxuICogTG9va3MgZm9yIHNydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24gb3IgZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbiBlbGVtZW50XG4gKiBkZXBlbmRpbmcgb24gcmVjb3JkIHR5cGVcbiAqL1xuZnVuY3Rpb24gZmluZElkZW50aWZpY2F0aW9uKCkge1xuICByZXR1cm4gKHJvb3RFbDogWG1sRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGtpbmQgPSByZWFkS2luZChyb290RWwpXG4gICAgbGV0IGVsdE5hbWUgPSAnZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbidcbiAgICBpZiAoa2luZCA9PT0gJ3NlcnZpY2UnKSBlbHROYW1lID0gJ3NydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24nXG4gICAgcmV0dXJuIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6aWRlbnRpZmljYXRpb25JbmZvJywgZWx0TmFtZSkocm9vdEVsKVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDaXRhdGlvbkRhdGUodHlwZTogJ2NyZWF0aW9uJyB8ICdyZXZpc2lvbicpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDpkYXRlJyksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAgICAgJ2dtZDpDSV9EYXRlJyxcbiAgICAgICAgICAnZ21kOmRhdGVUeXBlJyxcbiAgICAgICAgICAnZ21kOkNJX0RhdGVUeXBlQ29kZSdcbiAgICAgICAgKSxcbiAgICAgICAgZ2V0QXRJbmRleCgwKSxcbiAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICBtYXAoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gdHlwZSlcbiAgICAgIClcbiAgICApLFxuICAgIGdldEF0SW5kZXgoMCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6Q0lfRGF0ZScsICdnbWQ6ZGF0ZScpLFxuICAgIGdldEF0SW5kZXgoMCksXG4gICAgZXh0cmFjdERhdGVUaW1lKClcbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRTcGF0aWFsUmVwcmVzZW50YXRpb25Gcm9tQ29kZShcbiAgc3BhdGlhbFJlcHJlc2VudGF0aW9uQ29kZTogc3RyaW5nXG4pOiBTcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlIHwgbnVsbCB7XG4gIHN3aXRjaCAoc3BhdGlhbFJlcHJlc2VudGF0aW9uQ29kZSkge1xuICAgIGNhc2UgJ2dyaWQnOlxuICAgIGNhc2UgJ3ZlY3Rvcic6XG4gICAgY2FzZSAndGluJzpcbiAgICBjYXNlICd0YWJsZSc6XG4gICAgY2FzZSAncG9pbnQnOlxuICAgICAgcmV0dXJuIHNwYXRpYWxSZXByZXNlbnRhdGlvbkNvZGVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVuaXF1ZUlkZW50aWZpZXIocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVJZGVudGlmaWVyJywgZmFsc2UpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRLaW5kKHJvb3RFbDogWG1sRWxlbWVudCk6IFJlY29yZEtpbmQge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmhpZXJhcmNoeUxldmVsJywgJ2dtZDpNRF9TY29wZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKFxuICAgICAgKHNjb3BlQ29kZSk6IFJlY29yZEtpbmQgPT5cbiAgICAgICAgc2NvcGVDb2RlID09PSAnc2VydmljZScgPyAnc2VydmljZScgOiAnZGF0YXNldCdcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE93bmVyT3JnYW5pemF0aW9uKHJvb3RFbDogWG1sRWxlbWVudCk6IE9yZ2FuaXphdGlvbiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y29udGFjdCcsICdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScpLFxuICAgIGV4dHJhY3RPcmdhbml6YXRpb24oKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZWNvcmRVcGRhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGF0ZVN0YW1wJyksIGV4dHJhY3REYXRlVGltZSgpKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGl0bGUocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEFic3RyYWN0KHJvb3RFbDogWG1sRWxlbWVudCk6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDphYnN0cmFjdCcsIGZhbHNlKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRGF0YXNldENyZWF0ZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBleHRyYWN0Q2l0YXRpb25EYXRlKCdjcmVhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWREYXRhc2V0VXBkYXRlZChyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRlIHtcbiAgcmV0dXJuIGV4dHJhY3RDaXRhdGlvbkRhdGUoJ3JldmlzaW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZENvbnRhY3RzKHJvb3RFbDogWG1sRWxlbWVudCk6IEluZGl2aWR1YWxbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGNvbWJpbmUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6Y29udGFjdCcpLFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnBvaW50T2ZDb250YWN0JylcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JywgZmFsc2UpKSxcbiAgICBtYXBBcnJheShleHRyYWN0SW5kaXZpZHVhbHMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmZ1bmN0aW9uIHJlYWRLZXl3b3Jkc09mVHlwZShpc1RoZW1lOiBib29sZWFuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRlc2NyaXB0aXZlS2V5d29yZHMnLCAnZ21kOk1EX0tleXdvcmRzJyksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfS2V5d29yZFR5cGVDb2RlJyksXG4gICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgIG1hcCgodmFsdWVzKSA9PiBpc1RoZW1lID09PSB2YWx1ZXMuaW5kZXhPZigndGhlbWUnKSA+IC0xKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmtleXdvcmQnKSksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoZXh0cmFjdENoYXJhY3RlclN0cmluZygpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkS2V5d29yZHMocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nW10ge1xuICByZXR1cm4gcmVhZEtleXdvcmRzT2ZUeXBlKGZhbHNlKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGhlbWVzKHJvb3RFbDogWG1sRWxlbWVudCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHJlYWRLZXl3b3Jkc09mVHlwZSh0cnVlKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3RhdHVzKHJvb3RFbDogWG1sRWxlbWVudCk6IFJlY29yZFN0YXR1cyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpzdGF0dXMnLCBmYWxzZSksXG4gICAgZXh0cmFjdFN0YXR1cygpXG4gICkocm9vdEVsKVxufVxuXG5jb25zdCBnZXRDb25zdHJhaW50cyA9IHBpcGUoXG4gIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycsIGZhbHNlKVxuKVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEFjY2Vzc0NvbnN0cmFpbnRzKHJvb3RFbDogWG1sRWxlbWVudCk6IEFjY2Vzc0NvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RBY2Nlc3NDb25zdHJhaW50cygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRVc2VMaW1pdGF0aW9ucyhyb290RWw6IFhtbEVsZW1lbnQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RVc2VMaW1pdGF0aW9ucygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMaWNlbnNlcyhyb290RWw6IFhtbEVsZW1lbnQpOiBMaWNlbnNlW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0TGljZW5zZXMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbi8vIG5vdCB1c2VkIHlldFxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRJc29Ub3BpY3Mocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfVG9waWNDYXRlZ29yeUNvZGUnLCBmYWxzZSksXG4gICAgbWFwQXJyYXkocmVhZFRleHQoKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3BhdGlhbFJlcHJlc2VudGF0aW9uKFxuICByb290RWw6IFhtbEVsZW1lbnRcbik6IFNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUgfCBudWxsIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOnNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUnLFxuICAgICAgJ2dtZDpNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoZ2V0U3BhdGlhbFJlcHJlc2VudGF0aW9uRnJvbUNvZGUpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE92ZXJ2aWV3cyhyb290RWw6IFhtbEVsZW1lbnQpOiBHcmFwaGljT3ZlcnZpZXdbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpncmFwaGljT3ZlcnZpZXcnLCBmYWxzZSksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpmaWxlTmFtZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpmaWxlRGVzY3JpcHRpb24nKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFt1cmwsIGRlc2NyaXB0aW9uXSkgPT4gKHtcbiAgICAgIHVybCxcbiAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgIH0pKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTcGF0aWFsRXh0ZW50cyhyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRhc2V0U3BhdGlhbEV4dGVudFtdIHtcbiAgcmV0dXJuIFtdIC8vIFRPRE9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRUZW1wb3JhbEV4dGVudHMoXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKTogRGF0YXNldFRlbXBvcmFsRXh0ZW50W10ge1xuICByZXR1cm4gW10gLy8gVE9ET1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExpbmVhZ2Uocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOmRhdGFRdWFsaXR5SW5mbycsXG4gICAgICAnZ21kOkRRX0RhdGFRdWFsaXR5JyxcbiAgICAgICdnbWQ6bGluZWFnZScsXG4gICAgICAnZ21kOkxJX0xpbmVhZ2UnLFxuICAgICAgJ2dtZDpzdGF0ZW1lbnQnXG4gICAgKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRGlzdHJpYnV0aW9ucyhyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRhc2V0RGlzdHJpYnV0aW9uW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBtYXBBcnJheShleHRyYWN0RGF0YXNldERpc3RyaWJ1dGlvbnMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVXBkYXRlRnJlcXVlbmN5KHJvb3RFbDogWG1sRWxlbWVudCk6IFVwZGF0ZUZyZXF1ZW5jeSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpyZXNvdXJjZU1haW50ZW5hbmNlJyxcbiAgICAgICdnbWQ6TURfTWFpbnRlbmFuY2VJbmZvcm1hdGlvbidcbiAgICApLFxuICAgIGV4dHJhY3RVcGRhdGVGcmVxdWVuY3koKSxcbiAgICBtYXAoKHVwZGF0ZUZyZXF1ZW5jeSkgPT4gdXBkYXRlRnJlcXVlbmN5IHx8ICd1bmtub3duJylcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U2VydmljZU9ubGluZVJlc291cmNlcygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlW11cbj4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpsaW5rYWdlJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSlcbiAgY29uc3QgZ2V0UHJvdG9jb2xTdHIgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwcm90b2NvbCcpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIGNvbnN0IGdldFByb3RvY29sID0gcGlwZShnZXRQcm90b2NvbFN0ciwgbWFwKG1hdGNoUHJvdG9jb2wpKVxuICBjb25zdCBnZXRPbmxpbmVGdW5jdGlvbiA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpmdW5jdGlvbicsICdnbWQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpXG4gIClcbiAgY29uc3QgZ2V0SXNMaW5rID0gcGlwZShcbiAgICBnZXRPbmxpbmVGdW5jdGlvbixcbiAgICBtYXAoKG9ubGluZUZ1bmN0aW9uKSA9PiBvbmxpbmVGdW5jdGlvbiA9PT0gJ2luZm9ybWF0aW9uJylcbiAgKVxuICBjb25zdCBnZXROYW1lID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bmFtZScpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gIGNvbnN0IGdldERlc2NyaXB0aW9uID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAnZ21kOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpvbkxpbmUnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICApLFxuICAgIG1hcEFycmF5KGNvbWJpbmUoZ2V0SXNMaW5rLCBnZXRQcm90b2NvbCwgZ2V0VXJsLCBnZXROYW1lLCBnZXREZXNjcmlwdGlvbikpLFxuICAgIG1hcEFycmF5KChbaXNMaW5rLCBwcm90b2NvbCwgdXJsLCBuYW1lLCBkZXNjcmlwdGlvbl0pID0+IHtcbiAgICAgIGlmIChpc0xpbmspIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdlbmRwb2ludCcsXG4gICAgICAgICAgZW5kcG9pbnRVcmw6IHVybCxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPbmxpbmVSZXNvdXJjZXMoXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKTogU2VydmljZU9ubGluZVJlc291cmNlW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBtYXBBcnJheShleHRyYWN0U2VydmljZU9ubGluZVJlc291cmNlcygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cbiJdfQ==
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1wYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3JlYWQtcGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ25FLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3pGLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLGFBQWEsRUFDYixRQUFRLEdBRVQsTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUVMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQzVFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRTlFLFNBQVMsc0JBQXNCO0lBQzdCLE9BQU8sSUFBSSxDQUNULFFBQVEsQ0FDTixnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsRUFDOUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUN0QyxFQUNELFFBQVEsRUFBRSxDQUNYLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlO0lBQ3RCLE9BQU8sSUFBSSxDQUNULFFBQVEsQ0FDTixnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQ3ZDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxL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QU8sSUFBSSxDQUNULGtCQUFrQixDQUNoQixxQkFBcUIsRUFDckIsK0JBQStCLEVBQy9CLFlBQVksRUFDWix1QkFBdUIsQ0FDeEIsRUFDRCxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUMxRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFO1FBQ3RELElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTztnQkFDTCxJQUFJLEVBQUUsTUFBTTtnQkFDWixHQUFHLEVBQUUsR0FBRztnQkFDUixHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQzthQUNwQyxDQUFBO1NBQ0Y7YUFBTTtZQUNMLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFdBQVcsRUFBRSxHQUFHO2dCQUNoQixRQUFRO2dCQUNSLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQzthQUNwQyxDQUFBO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsTUFBa0I7SUFFbEIsT0FBTyxJQUFJLENBQ1Qsa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUscUJBQXFCLENBQUMsRUFDakUsUUFBUSxDQUFDLDZCQUE2QixFQUFFLENBQUMsRUFDekMsWUFBWSxFQUFFLENBQ2YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb25zdHJhaW50LFxuICBEYXRhc2V0RGlzdHJpYnV0aW9uLFxuICBEYXRhc2V0U3BhdGlhbEV4dGVudCxcbiAgRGF0YXNldFRlbXBvcmFsRXh0ZW50LFxuICBHcmFwaGljT3ZlcnZpZXcsXG4gIEluZGl2aWR1YWwsXG4gIEtleXdvcmQsXG4gIEtleXdvcmRUaGVzYXVydXMsXG4gIE9yZ2FuaXphdGlvbixcbiAgUmVjb3JkS2luZCxcbiAgUmVjb3JkU3RhdHVzLFxuICBSb2xlLFxuICBTZXJ2aWNlT25saW5lUmVzb3VyY2UsXG4gIFNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUsXG4gIFVwZGF0ZUZyZXF1ZW5jeSxcbiAgVXBkYXRlRnJlcXVlbmN5Q3VzdG9tLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQgeyBnZXRTdGF0dXNGcm9tU3RhdHVzQ29kZSB9IGZyb20gJy4vY29kZWxpc3RzL3N0YXR1cy5tYXBwZXInXG5pbXBvcnQgeyBnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZSB9IGZyb20gJy4vY29kZWxpc3RzL3VwZGF0ZS1mcmVxdWVuY3kubWFwcGVyJ1xuaW1wb3J0IHtcbiAgZmluZENoaWxkRWxlbWVudCxcbiAgZmluZENoaWxkcmVuRWxlbWVudCxcbiAgZmluZE5lc3RlZEVsZW1lbnQsXG4gIGZpbmROZXN0ZWRFbGVtZW50cyxcbiAgZmluZFBhcmVudCxcbiAgcmVhZEF0dHJpYnV0ZSxcbiAgcmVhZFRleHQsXG4gIFhtbEVsZW1lbnQsXG59IGZyb20gJy4uL3htbC11dGlscydcbmltcG9ydCB7XG4gIENoYWluYWJsZUZ1bmN0aW9uLFxuICBjb21iaW5lLFxuICBmYWxsYmFjayxcbiAgZmlsdGVyQXJyYXksXG4gIGZsYXR0ZW5BcnJheSxcbiAgZ2V0QXRJbmRleCxcbiAgbWFwLFxuICBtYXBBcnJheSxcbiAgcGlwZSxcbn0gZnJvbSAnLi4vZnVuY3Rpb24tdXRpbHMnXG5pbXBvcnQgeyBnZXRSb2xlRnJvbVJvbGVDb2RlIH0gZnJvbSAnLi9jb2RlbGlzdHMvcm9sZS5tYXBwZXInXG5pbXBvcnQgeyBtYXRjaE1pbWVUeXBlLCBtYXRjaFByb3RvY29sIH0gZnJvbSAnLi4vY29tbW9uL2Rpc3RyaWJ1dGlvbi5tYXBwZXInXG5pbXBvcnQgeyBnZXRLZXl3b3JkVHlwZUZyb21LZXl3b3JkVHlwZUNvZGUgfSBmcm9tICcuL2NvZGVsaXN0cy9rZXl3b3JkLm1hcHBlcidcblxuZnVuY3Rpb24gZXh0cmFjdENoYXJhY3RlclN0cmluZygpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBzdHJpbmc+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmFsbGJhY2soXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286Q2hhcmFjdGVyU3RyaW5nJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ214OkFuY2hvcicsIGZhbHNlKVxuICAgICksXG4gICAgcmVhZFRleHQoKVxuICApXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3REYXRlVGltZSgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBEYXRlPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZhbGxiYWNrKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkRhdGVUaW1lJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkRhdGUnLCBmYWxzZSlcbiAgICApLFxuICAgIHJlYWRUZXh0KCksXG4gICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpXG4gIClcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFVybCgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBVUkw+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6VVJMJywgZmFsc2UpLCByZWFkVGV4dCgpKVxuICBjb25zdCBnZXRDaGFyYWN0ZXJTdHJpbmcgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnLCBmYWxzZSksXG4gICAgcmVhZFRleHQoKVxuICApXG4gIGNvbnN0IGdldEFuY2hvciA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ214OkFuY2hvcicsIGZhbHNlKSxcbiAgICByZWFkQXR0cmlidXRlKCd4bGluazpocmVmJylcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBmYWxsYmFjayhnZXRVcmwsIGdldEFuY2hvciwgZ2V0Q2hhcmFjdGVyU3RyaW5nKSxcbiAgICBtYXAoKHVybFN0cikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVUkwodXJsU3RyKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgIH0pXG4gIClcbn1cblxuZnVuY3Rpb24gZXh0cmFjdE1hbmRhdG9yeVVybCgpIHtcbiAgcmV0dXJuIGZhbGxiYWNrKGV4dHJhY3RVcmwoKSwgKCkgPT4gbmV3IFVSTCgnaHR0cDovL21pc3NpbmcnKSlcbn1cblxuLy8gZnJvbSBnbWQ6cm9sZVxuZnVuY3Rpb24gZXh0cmFjdFJvbGUoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgUm9sZT4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfUm9sZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKGdldFJvbGVGcm9tUm9sZUNvZGUpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eVxuZnVuY3Rpb24gZXh0cmFjdE9yZ2FuaXphdGlvbigpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBPcmdhbml6YXRpb24+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAnZ21kOmNvbnRhY3RJbmZvJyxcbiAgICAgICdnbWQ6Q0lfQ29udGFjdCcsXG4gICAgICAnZ21kOm9ubGluZVJlc291cmNlJyxcbiAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnLFxuICAgICAgJ2dtZDpsaW5rYWdlJ1xuICAgICksXG4gICAgZ2V0QXRJbmRleCgwKSxcbiAgICBleHRyYWN0VXJsKClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBjb21iaW5lKFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm9yZ2FuaXNhdGlvbk5hbWUnLCBmYWxzZSksXG4gICAgICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICAgICAgKSxcbiAgICAgIGdldFVybFxuICAgICksXG4gICAgbWFwKChbbmFtZSwgd2Vic2l0ZV0pID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgLi4uKHdlYnNpdGUgJiYgeyB3ZWJzaXRlIH0pLFxuICAgIH0pKVxuICApXG59XG5cbi8vIGZyb20gZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHlcbmZ1bmN0aW9uIGV4dHJhY3RJbmRpdmlkdWFscygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8SW5kaXZpZHVhbD5cbj4ge1xuICBjb25zdCBnZXRSb2xlID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cm9sZScpLCBleHRyYWN0Um9sZSgpKVxuICBjb25zdCBnZXRQb3NpdGlvbiA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnBvc2l0aW9uTmFtZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIGNvbnN0IGdldE5hbWVQYXJ0cyA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmluZGl2aWR1YWxOYW1lJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpLFxuICAgIG1hcCgoZnVsbE5hbWUpID0+IHtcbiAgICAgIGlmICghZnVsbE5hbWUpIHJldHVybiBbXVxuICAgICAgY29uc3QgcGFydHMgPSBmdWxsTmFtZS5zcGxpdCgvXFxzKy8pXG4gICAgICBpZiAoIXBhcnRzLmxlbmd0aCkgcmV0dXJuIFtmdWxsTmFtZSwgbnVsbF1cbiAgICAgIGNvbnN0IGZpcnN0ID0gcGFydHMuc2hpZnQoKVxuICAgICAgcmV0dXJuIFtmaXJzdCwgcGFydHMuam9pbignICcpXVxuICAgIH0pXG4gIClcbiAgY29uc3QgZ2V0T3JnYW5pemF0aW9uID0gZXh0cmFjdE9yZ2FuaXphdGlvbigpXG4gIGNvbnN0IGdldEVtYWlsID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZWxlY3Ryb25pY01haWxBZGRyZXNzJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpLFxuICAgIG1hcCgoZW1haWwpID0+IChlbWFpbCA9PT0gbnVsbCA/ICdtaXNzaW5nQG1pc3NpbmcuY29tJyA6IGVtYWlsKSlcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBjb21iaW5lKFxuICAgICAgZ2V0Um9sZSxcbiAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgZ2V0TmFtZVBhcnRzLFxuICAgICAgZ2V0T3JnYW5pemF0aW9uLFxuICAgICAgcGlwZShmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6Y29udGFjdEluZm8nKSwgbWFwQXJyYXkoZ2V0RW1haWwpKVxuICAgICksXG4gICAgbWFwKChbcm9sZSwgcG9zaXRpb24sIFtmaXJzdE5hbWUsIGxhc3ROYW1lXSwgb3JnYW5pemF0aW9uLCBlbWFpbHNdKSA9PlxuICAgICAgZW1haWxzLm1hcCgoZW1haWwpID0+ICh7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICByb2xlLFxuICAgICAgICBvcmdhbml6YXRpb24sXG4gICAgICAgIC4uLihwb3NpdGlvbiAmJiB7IHBvc2l0aW9uIH0pLFxuICAgICAgICAuLi4oZmlyc3ROYW1lICYmIHsgZmlyc3ROYW1lIH0pLFxuICAgICAgICAuLi4obGFzdE5hbWUgJiYgeyBsYXN0TmFtZSB9KSxcbiAgICAgIH0pKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0U3RhdHVzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFJlY29yZFN0YXR1cz4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6TURfUHJvZ3Jlc3NDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRTdGF0dXNGcm9tU3RhdHVzQ29kZSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5mdW5jdGlvbiBleHRyYWN0TGVnYWxDb25zdHJhaW50cygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsIGZhbHNlKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgbWFwKCh2YWx1ZXMpID0+IHZhbHVlcy5pbmRleE9mKCdsaWNlbnNlJykgPT09IC0xKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpXG4gICAgICApXG4gICAgKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShjb21iaW5lKGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSwgZXh0cmFjdFVybCgpKSksXG4gICAgbWFwQXJyYXkoKFt0ZXh0LCB1cmxdKSA9PiAoe1xuICAgICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgICAgIHRleHQsXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZnVuY3Rpb24gZXh0cmFjdFNlY3VyaXR5Q29uc3RyYWludHMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6TURfU2VjdXJpdHlDb25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KGNvbWJpbmUoZXh0cmFjdENoYXJhY3RlclN0cmluZygpLCBleHRyYWN0VXJsKCkpKSxcbiAgICBtYXBBcnJheSgoW3RleHQsIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5mdW5jdGlvbiBleHRyYWN0T3RoZXJDb25zdHJhaW50cygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9Db25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KGNvbWJpbmUoZXh0cmFjdENoYXJhY3RlclN0cmluZygpLCBleHRyYWN0VXJsKCkpKSxcbiAgICBtYXBBcnJheSgoW3RleHQsIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5mdW5jdGlvbiBleHRyYWN0TGljZW5zZXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgQXJyYXk8Q29uc3RyYWludD4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnLCBmYWxzZSksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgIG1hcCgodmFsdWVzKSA9PiB2YWx1ZXMuaW5kZXhPZignbGljZW5zZScpID4gLTEpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDp1c2VMaW1pdGF0aW9uJylcbiAgICAgIClcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KGNvbWJpbmUoZXh0cmFjdENoYXJhY3RlclN0cmluZygpLCBleHRyYWN0VXJsKCkpKSxcbiAgICBtYXBBcnJheSgoW3RleHQsIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpNRF9EaXN0cmlidXRpb25cbmZ1bmN0aW9uIGV4dHJhY3REYXRhc2V0RGlzdHJpYnV0aW9ucygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgRGF0YXNldERpc3RyaWJ1dGlvbltdXG4+IHtcbiAgY29uc3QgZ2V0Rm9ybWF0ID0gcGlwZShcbiAgICBmaW5kUGFyZW50KCdnbWQ6TURfRGlzdHJpYnV0aW9uJyksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25Gb3JtYXQnLCAnZ21kOk1EX0Zvcm1hdCcsICdnbWQ6bmFtZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSxcbiAgICBtYXAobWF0Y2hNaW1lVHlwZSlcbiAgKVxuXG4gIGNvbnN0IGdldFVybCA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmxpbmthZ2UnKSwgZXh0cmFjdE1hbmRhdG9yeVVybCgpKVxuICBjb25zdCBnZXRQcm90b2NvbFN0ciA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnByb3RvY29sJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgY29uc3QgZ2V0UHJvdG9jb2wgPSBwaXBlKGdldFByb3RvY29sU3RyLCBtYXAobWF0Y2hQcm90b2NvbCkpXG4gIGNvbnN0IGdldE9ubGluZUZ1bmN0aW9uID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmZ1bmN0aW9uJywgJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJylcbiAgKVxuICBjb25zdCBnZXRJc1NlcnZpY2UgPSBwaXBlKFxuICAgIGdldFByb3RvY29sLFxuICAgIG1hcCgocHJvdG9jb2wpID0+IHByb3RvY29sICE9PSAnb3RoZXInKVxuICApXG4gIGNvbnN0IGdldElzRG93bmxvYWQgPSBwaXBlKFxuICAgIGNvbWJpbmUoZ2V0SXNTZXJ2aWNlLCBnZXRPbmxpbmVGdW5jdGlvbiwgZ2V0UHJvdG9jb2xTdHIpLFxuICAgIG1hcChcbiAgICAgIChbaXNTZXJ2aWNlLCBvbmxpbmVGdW5jdGlvbiwgcHJvdG9jb2xTdHJdKSA9PlxuICAgICAgICAoIWlzU2VydmljZSAmJiBvbmxpbmVGdW5jdGlvbiA9PT0gJ2Rvd25sb2FkJykgfHxcbiAgICAgICAgL2Rvd25sb2FkL2kudGVzdChwcm90b2NvbFN0cilcbiAgICApXG4gIClcbiAgY29uc3QgZ2V0TmFtZSA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOm5hbWUnKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKVxuICBjb25zdCBnZXREZXNjcmlwdGlvbiA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgJ2dtZDp0cmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGdldElzU2VydmljZSxcbiAgICAgICAgZ2V0SXNEb3dubG9hZCxcbiAgICAgICAgZ2V0UHJvdG9jb2wsXG4gICAgICAgIGdldFVybCxcbiAgICAgICAgZ2V0TmFtZSxcbiAgICAgICAgZ2V0RGVzY3JpcHRpb24sXG4gICAgICAgIGdldEZvcm1hdFxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICAoW2lzU2VydmljZSwgaXNEb3dubG9hZCwgcHJvdG9jb2wsIHVybCwgbmFtZSwgZGVzY3JpcHRpb24sIGZvcm1hdF0pID0+IHtcbiAgICAgICAgaWYgKGlzU2VydmljZSkge1xuICAgICAgICAgIGNvbnN0IGhhc0lkZW50aWZpZXIgPSBwcm90b2NvbCA9PT0gJ3dtcycgfHwgcHJvdG9jb2wgPT09ICd3ZnMnXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXJ2aWNlJyxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgYWNjZXNzU2VydmljZVByb3RvY29sOiBwcm90b2NvbCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIGhhc0lkZW50aWZpZXIgJiYgeyBpZGVudGlmaWVySW5TZXJ2aWNlOiBuYW1lIH0pLFxuICAgICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzRG93bmxvYWQpIHtcbiAgICAgICAgICBjb25zdCBtaW1lVHlwZSA9IGZvcm1hdFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZG93bmxvYWQnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIC4uLihtaW1lVHlwZSAmJiB7IG1pbWVUeXBlIH0pLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUN1c3RvbVBlcmlvZChcbiAgaXNvUGVyaW9kOiBzdHJpbmdcbik6IFVwZGF0ZUZyZXF1ZW5jeUN1c3RvbSB7XG4gIGlmICghaXNvUGVyaW9kKSByZXR1cm4gbnVsbFxuICBjb25zdCBtYXRjaGVzID0gaXNvUGVyaW9kLm1hdGNoKFxuICAgIC9eLT9QKD86KFswLTldKylZKT8oPzooWzAtOV0rKU0pPyg/OihbMC05XSspRCk/VD8oPzooWzAtOV0rKUgpPy9cbiAgKVxuICBpZiAoIW1hdGNoZXMpIHJldHVybiBudWxsXG4gIGNvbnN0IHllYXJzID0gcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApIHx8IDBcbiAgY29uc3QgbW9udGhzID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTApIHx8IDBcbiAgY29uc3QgZGF5cyA9IHBhcnNlSW50KG1hdGNoZXNbM10sIDEwKSB8fCAwXG4gIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQobWF0Y2hlc1s0XSwgMTApIHx8IDBcbiAgaWYgKHllYXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ3llYXInLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChtb250aHMgPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnbW9udGgnLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChtb250aHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAneWVhcicsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMTIgLyBtb250aHMpLFxuICAgIH1cbiAgfSBlbHNlIGlmIChkYXlzID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ2RheScsXG4gICAgICB1cGRhdGVkVGltZXM6IDEsXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMgPD0gNykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICd3ZWVrJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCg3IC8gZGF5cyksXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnbW9udGgnLFxuICAgICAgdXBkYXRlZFRpbWVzOiBNYXRoLnJvdW5kKDMwIC8gZGF5cyksXG4gICAgfVxuICB9IGVsc2UgaWYgKGhvdXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ2RheScsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMjQgLyBkYXlzKSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuLy8gZnJvbSBnbWQ6TURfTWFpbnRlbmFuY2VJbmZvcm1hdGlvblxuZnVuY3Rpb24gZXh0cmFjdFVwZGF0ZUZyZXF1ZW5jeSgpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgVXBkYXRlRnJlcXVlbmN5XG4+IHtcbiAgcmV0dXJuIGZhbGxiYWNrKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6TURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJyksXG4gICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICBtYXAoZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUZyZXF1ZW5jeUNvZGUpXG4gICAgKSxcbiAgICBwaXBlKFxuICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICdnbWQ6dXNlckRlZmluZWRNYWludGVuYW5jZUZyZXF1ZW5jeScsXG4gICAgICAgICdndHM6VE1fUGVyaW9kRHVyYXRpb24nXG4gICAgICApLFxuICAgICAgcmVhZFRleHQoKSxcbiAgICAgIG1hcChnZXRVcGRhdGVGcmVxdWVuY3lGcm9tQ3VzdG9tUGVyaW9kKVxuICAgICksXG4gICAgbWFwKCgpID0+ICd1bmtub3duJylcbiAgKVxufVxuXG4vKipcbiAqIExvb2tzIGZvciBzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uIG9yIGdtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24gZWxlbWVudFxuICogZGVwZW5kaW5nIG9uIHJlY29yZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGZpbmRJZGVudGlmaWNhdGlvbigpIHtcbiAgcmV0dXJuIChyb290RWw6IFhtbEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBraW5kID0gcmVhZEtpbmQocm9vdEVsKVxuICAgIGxldCBlbHROYW1lID0gJ2dtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24nXG4gICAgaWYgKGtpbmQgPT09ICdzZXJ2aWNlJykgZWx0TmFtZSA9ICdzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uJ1xuICAgIHJldHVybiBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmlkZW50aWZpY2F0aW9uSW5mbycsIGVsdE5hbWUpKHJvb3RFbClcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0Q2l0YXRpb25EYXRlKHR5cGU6ICdjcmVhdGlvbicgfCAncmV2aXNpb24nKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicsICdnbWQ6ZGF0ZScpLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAgICdnbWQ6Q0lfRGF0ZScsXG4gICAgICAgICAgJ2dtZDpkYXRlVHlwZScsXG4gICAgICAgICAgJ2dtZDpDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICksXG4gICAgICAgIGdldEF0SW5kZXgoMCksXG4gICAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICApXG4gICAgKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOkNJX0RhdGUnLCAnZ21kOmRhdGUnKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGV4dHJhY3REYXRlVGltZSgpXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0U3BhdGlhbFJlcHJlc2VudGF0aW9uRnJvbUNvZGUoXG4gIHNwYXRpYWxSZXByZXNlbnRhdGlvbkNvZGU6IHN0cmluZ1xuKTogU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSB8IG51bGwge1xuICBzd2l0Y2ggKHNwYXRpYWxSZXByZXNlbnRhdGlvbkNvZGUpIHtcbiAgICBjYXNlICdncmlkJzpcbiAgICBjYXNlICd2ZWN0b3InOlxuICAgIGNhc2UgJ3Rpbic6XG4gICAgY2FzZSAndGFibGUnOlxuICAgIGNhc2UgJ3BvaW50JzpcbiAgICAgIHJldHVybiBzcGF0aWFsUmVwcmVzZW50YXRpb25Db2RlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRVbmlxdWVJZGVudGlmaWVyKHJvb3RFbDogWG1sRWxlbWVudCk6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpmaWxlSWRlbnRpZmllcicsIGZhbHNlKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkS2luZChyb290RWw6IFhtbEVsZW1lbnQpOiBSZWNvcmRLaW5kIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpoaWVyYXJjaHlMZXZlbCcsICdnbWQ6TURfU2NvcGVDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChcbiAgICAgIChzY29wZUNvZGUpOiBSZWNvcmRLaW5kID0+XG4gICAgICAgIHNjb3BlQ29kZSA9PT0gJ3NlcnZpY2UnID8gJ3NlcnZpY2UnIDogJ2RhdGFzZXQnXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPd25lck9yZ2FuaXphdGlvbihyb290RWw6IFhtbEVsZW1lbnQpOiBPcmdhbml6YXRpb24ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmNvbnRhY3QnLCAnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknKSxcbiAgICBleHRyYWN0T3JnYW5pemF0aW9uKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVjb3JkVXBkYXRlZChyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRlIHtcbiAgcmV0dXJuIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmRhdGVTdGFtcCcpLCBleHRyYWN0RGF0ZVRpbWUoKSkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRpdGxlKHJvb3RFbDogWG1sRWxlbWVudCk6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDp0aXRsZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRBYnN0cmFjdChyb290RWw6IFhtbEVsZW1lbnQpOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6YWJzdHJhY3QnLCBmYWxzZSksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZERhdGFzZXRDcmVhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gZXh0cmFjdENpdGF0aW9uRGF0ZSgnY3JlYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRGF0YXNldFVwZGF0ZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBleHRyYWN0Q2l0YXRpb25EYXRlKCdyZXZpc2lvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDb250YWN0cyhyb290RWw6IFhtbEVsZW1lbnQpOiBJbmRpdmlkdWFsW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBjb21iaW5lKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmNvbnRhY3QnKSxcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpwb2ludE9mQ29udGFjdCcpXG4gICAgKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScsIGZhbHNlKSksXG4gICAgbWFwQXJyYXkoZXh0cmFjdEluZGl2aWR1YWxzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG4vLyBmcm9tIGdtZDp0aGVzYXVydXNOYW1lXG5mdW5jdGlvbiByZWFkVGhlc2F1cnVzKHJvb3RFbDogWG1sRWxlbWVudCk6IEtleXdvcmRUaGVzYXVydXMge1xuICBpZiAoIXJvb3RFbCkgcmV0dXJuIG51bGxcblxuICBjb25zdCBmaW5kSWRlbnRpZmllciA9IGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICdnbWQ6Q0lfQ2l0YXRpb24nLFxuICAgICdnbWQ6aWRlbnRpZmllcicsXG4gICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAnZ21kOmNvZGUnXG4gIClcbiAgY29uc3QgaWQgPSBwaXBlKGZpbmRJZGVudGlmaWVyLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpKHJvb3RFbClcbiAgY29uc3QgdXJsID0gcGlwZShmaW5kSWRlbnRpZmllciwgZXh0cmFjdFVybCgpKShyb290RWwpXG4gIGNvbnN0IG5hbWUgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICkocm9vdEVsKVxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICB9XG59XG5cbi8vIGZyb20gZ21kOk1EX0tleXdvcmRzXG5mdW5jdGlvbiByZWFkS2V5d29yZEdyb3VwKHJvb3RFbDogWG1sRWxlbWVudCk6IEtleXdvcmRbXSB7XG4gIGNvbnN0IHR5cGUgPSBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9LZXl3b3JkVHlwZUNvZGUnKSxcbiAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgIG1hcCgodmFsdWVzKSA9PiBnZXRLZXl3b3JkVHlwZUZyb21LZXl3b3JkVHlwZUNvZGUodmFsdWVzWzBdKSlcbiAgKShyb290RWwpXG4gIGNvbnN0IHRoZXNhdXJ1cyA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDp0aGVzYXVydXNOYW1lJyksXG4gICAgcmVhZFRoZXNhdXJ1c1xuICApKHJvb3RFbClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmtleXdvcmQnKSxcbiAgICBtYXBBcnJheSgoZWwpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gZXh0cmFjdENoYXJhY3RlclN0cmluZygpKGVsKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoZXNhdXJ1cyA/IHsgdGhlc2F1cnVzIH0gOiB7fSksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICB0eXBlLFxuICAgICAgfSBhcyBLZXl3b3JkXG4gICAgfSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkS2V5d29yZHMocm9vdEVsOiBYbWxFbGVtZW50KTogS2V5d29yZFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZGVzY3JpcHRpdmVLZXl3b3JkcycsICdnbWQ6TURfS2V5d29yZHMnKSxcbiAgICBtYXBBcnJheShyZWFkS2V5d29yZEdyb3VwKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTdGF0dXMocm9vdEVsOiBYbWxFbGVtZW50KTogUmVjb3JkU3RhdHVzIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnN0YXR1cycsIGZhbHNlKSxcbiAgICBleHRyYWN0U3RhdHVzKClcbiAgKShyb290RWwpXG59XG5cbmNvbnN0IGdldENvbnN0cmFpbnRzID0gcGlwZShcbiAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJywgZmFsc2UpXG4pXG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkTGVnYWxDb25zdHJhaW50cyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0TGVnYWxDb25zdHJhaW50cygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTZWN1cml0eUNvbnN0cmFpbnRzKHJvb3RFbDogWG1sRWxlbWVudCk6IENvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RTZWN1cml0eUNvbnN0cmFpbnRzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE90aGVyQ29uc3RyYWludHMocm9vdEVsOiBYbWxFbGVtZW50KTogQ29uc3RyYWludFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZ2V0Q29uc3RyYWludHMsXG4gICAgbWFwQXJyYXkoZXh0cmFjdE90aGVyQ29uc3RyYWludHMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkTGljZW5zZXMocm9vdEVsOiBYbWxFbGVtZW50KTogQ29uc3RyYWludFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZ2V0Q29uc3RyYWludHMsXG4gICAgbWFwQXJyYXkoZXh0cmFjdExpY2Vuc2VzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG4vLyBub3QgdXNlZCB5ZXRcbmV4cG9ydCBmdW5jdGlvbiByZWFkSXNvVG9waWNzKHJvb3RFbDogWG1sRWxlbWVudCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX1RvcGljQ2F0ZWdvcnlDb2RlJywgdHJ1ZSksXG4gICAgbWFwQXJyYXkocmVhZFRleHQoKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3BhdGlhbFJlcHJlc2VudGF0aW9uKFxuICByb290RWw6IFhtbEVsZW1lbnRcbik6IFNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUgfCBudWxsIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOnNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUnLFxuICAgICAgJ2dtZDpNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoZ2V0U3BhdGlhbFJlcHJlc2VudGF0aW9uRnJvbUNvZGUpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE92ZXJ2aWV3cyhyb290RWw6IFhtbEVsZW1lbnQpOiBHcmFwaGljT3ZlcnZpZXdbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpncmFwaGljT3ZlcnZpZXcnLCBmYWxzZSksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpmaWxlTmFtZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpmaWxlRGVzY3JpcHRpb24nKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFt1cmwsIGRlc2NyaXB0aW9uXSkgPT4gKHtcbiAgICAgIHVybCxcbiAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgIH0pKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTcGF0aWFsRXh0ZW50cyhyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRhc2V0U3BhdGlhbEV4dGVudFtdIHtcbiAgcmV0dXJuIFtdIC8vIFRPRE9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRUZW1wb3JhbEV4dGVudHMoXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKTogRGF0YXNldFRlbXBvcmFsRXh0ZW50W10ge1xuICByZXR1cm4gW10gLy8gVE9ET1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExpbmVhZ2Uocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOmRhdGFRdWFsaXR5SW5mbycsXG4gICAgICAnZ21kOkRRX0RhdGFRdWFsaXR5JyxcbiAgICAgICdnbWQ6bGluZWFnZScsXG4gICAgICAnZ21kOkxJX0xpbmVhZ2UnLFxuICAgICAgJ2dtZDpzdGF0ZW1lbnQnXG4gICAgKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRGlzdHJpYnV0aW9ucyhyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRhc2V0RGlzdHJpYnV0aW9uW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBtYXBBcnJheShleHRyYWN0RGF0YXNldERpc3RyaWJ1dGlvbnMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVXBkYXRlRnJlcXVlbmN5KHJvb3RFbDogWG1sRWxlbWVudCk6IFVwZGF0ZUZyZXF1ZW5jeSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpyZXNvdXJjZU1haW50ZW5hbmNlJyxcbiAgICAgICdnbWQ6TURfTWFpbnRlbmFuY2VJbmZvcm1hdGlvbidcbiAgICApLFxuICAgIGV4dHJhY3RVcGRhdGVGcmVxdWVuY3koKSxcbiAgICBtYXAoKHVwZGF0ZUZyZXF1ZW5jeSkgPT4gdXBkYXRlRnJlcXVlbmN5IHx8ICd1bmtub3duJylcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U2VydmljZU9ubGluZVJlc291cmNlcygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlW11cbj4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpsaW5rYWdlJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSlcbiAgY29uc3QgZ2V0UHJvdG9jb2xTdHIgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwcm90b2NvbCcpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIGNvbnN0IGdldFByb3RvY29sID0gcGlwZShnZXRQcm90b2NvbFN0ciwgbWFwKG1hdGNoUHJvdG9jb2wpKVxuICBjb25zdCBnZXRPbmxpbmVGdW5jdGlvbiA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpmdW5jdGlvbicsICdnbWQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpXG4gIClcbiAgY29uc3QgZ2V0SXNMaW5rID0gcGlwZShcbiAgICBnZXRPbmxpbmVGdW5jdGlvbixcbiAgICBtYXAoKG9ubGluZUZ1bmN0aW9uKSA9PiBvbmxpbmVGdW5jdGlvbiA9PT0gJ2luZm9ybWF0aW9uJylcbiAgKVxuICBjb25zdCBnZXROYW1lID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bmFtZScpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gIGNvbnN0IGdldERlc2NyaXB0aW9uID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAnZ21kOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpvbkxpbmUnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICApLFxuICAgIG1hcEFycmF5KGNvbWJpbmUoZ2V0SXNMaW5rLCBnZXRQcm90b2NvbCwgZ2V0VXJsLCBnZXROYW1lLCBnZXREZXNjcmlwdGlvbikpLFxuICAgIG1hcEFycmF5KChbaXNMaW5rLCBwcm90b2NvbCwgdXJsLCBuYW1lLCBkZXNjcmlwdGlvbl0pID0+IHtcbiAgICAgIGlmIChpc0xpbmspIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdlbmRwb2ludCcsXG4gICAgICAgICAgZW5kcG9pbnRVcmw6IHVybCxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPbmxpbmVSZXNvdXJjZXMoXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKTogU2VydmljZU9ubGluZVJlc291cmNlW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBtYXBBcnJheShleHRyYWN0U2VydmljZU9ubGluZVJlc291cmNlcygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cbiJdfQ==
|