@theseam/ui-common 0.4.0-beta.1 → 0.4.0-beta.3
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/breadcrumbs/breadcrumb.d.ts +1 -1
- package/breadcrumbs/breadcrumbs-resolver.d.ts +1 -1
- package/core/common-behaviors/active.d.ts +1 -1
- package/core/common-behaviors/constructor.d.ts +1 -1
- package/core/common-behaviors/disabled.d.ts +1 -1
- package/core/common-behaviors/initialized.d.ts +1 -1
- package/core/common-behaviors/size.d.ts +1 -1
- package/core/common-behaviors/tabindex.d.ts +1 -1
- package/core/common-behaviors/theme.d.ts +1 -1
- package/data-exporter/data-exporter.d.ts +1 -1
- package/data-filters/data-filter.d.ts +3 -3
- package/data-filters/filters/data-filter-search/search-filter-options.d.ts +1 -1
- package/datatable/datatable-column/datatable-column.component.d.ts +1 -1
- package/datatable/models/preferences.d.ts +1 -1
- package/datatable/models/table-column.d.ts +1 -1
- package/datatable/services/columns-manager.service.d.ts +1 -1
- package/datatable-dynamic/datatable-dynamic-def.d.ts +3 -3
- package/datatable-dynamic/models/dynamic-datatable-action-menu-record.d.ts +1 -1
- package/dynamic/models/dynamic-value-base-type.d.ts +1 -1
- package/dynamic/models/dynamic-value-evaluatable-type.d.ts +1 -1
- package/dynamic/models/dynamic-value-primitive.d.ts +1 -1
- package/dynamic/models/dynamic-value.d.ts +1 -1
- package/dynamic/tokens/api-config.d.ts +1 -1
- package/esm2020/asset-reader/asset-reader-helper.service.mjs +3 -3
- package/esm2020/asset-reader/asset-reader.module.mjs +4 -4
- package/esm2020/asset-reader/encrypted-asset-link.directive.mjs +12 -12
- package/esm2020/breadcrumbs/breadcrumbs/breadcrumbs.component.mjs +3 -3
- package/esm2020/breadcrumbs/breadcrumbs.module.mjs +4 -4
- package/esm2020/breadcrumbs/breadcrumbs.service.mjs +3 -3
- package/esm2020/buttons/badge-button/badge-button.component.mjs +6 -6
- package/esm2020/buttons/button/button.component.mjs +9 -9
- package/esm2020/buttons/buttons.module.mjs +4 -4
- package/esm2020/buttons/progress-circle-button/progress-circle-button.component.mjs +3 -3
- package/esm2020/buttons/toggle-button/toggle-button.component.mjs +5 -5
- package/esm2020/card/card-action/card-action.component.mjs +3 -3
- package/esm2020/card/card-body/card-body.component.mjs +3 -3
- package/esm2020/card/card-footer/card-footer.component.mjs +3 -3
- package/esm2020/card/card-header/card-header.component.mjs +3 -3
- package/esm2020/card/card.component.mjs +3 -3
- package/esm2020/card/card.module.mjs +4 -4
- package/esm2020/checkbox/checkbox.component.mjs +43 -43
- package/esm2020/checkbox/checkbox.module.mjs +4 -4
- package/esm2020/checkbox/testing/checkbox.harness.mjs +1 -1
- package/esm2020/checkbox/testing/index.mjs +1 -1
- package/esm2020/confirm-dialog/confirm-click.directive.mjs +9 -9
- package/esm2020/confirm-dialog/confirm-dialog.component.mjs +3 -3
- package/esm2020/confirm-dialog/confirm-dialog.module.mjs +4 -4
- package/esm2020/confirm-dialog/confirm-dialog.service.mjs +3 -3
- package/esm2020/core/common-behaviors/active.mjs +3 -3
- package/esm2020/core/common-behaviors/disabled.mjs +3 -3
- package/esm2020/core/common-behaviors/size.mjs +6 -6
- package/esm2020/core/common-behaviors/tabindex.mjs +5 -5
- package/esm2020/core/common-behaviors/theme.mjs +6 -6
- package/esm2020/data-exporter/data-exporter.module.mjs +4 -4
- package/esm2020/data-exporter/exporters/csv-exporter.mjs +3 -3
- package/esm2020/data-exporter/exporters/xlsx-exporter.mjs +3 -3
- package/esm2020/data-filters/data-filters.module.mjs +4 -4
- package/esm2020/data-filters/filters/data-filter-search/data-filter-search.component.mjs +10 -10
- package/esm2020/data-filters/filters/data-filter-text/data-filter-text.component.mjs +10 -10
- package/esm2020/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.mjs +11 -11
- package/esm2020/datatable/datatable/datatable.component.mjs +108 -108
- package/esm2020/datatable/datatable-action-menu/datatable-action-menu.component.mjs +3 -3
- package/esm2020/datatable/datatable-action-menu-item/datatable-action-menu-item.component.mjs +3 -3
- package/esm2020/datatable/datatable-column/datatable-column.component.mjs +7 -7
- package/esm2020/datatable/datatable-column-preferences/datatable-column-preferences.component.mjs +3 -3
- package/esm2020/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.mjs +3 -3
- package/esm2020/datatable/datatable-export-button/datatable-export-button.component.mjs +7 -7
- package/esm2020/datatable/datatable-footer/datatable-footer-tpl.directive.mjs +3 -3
- package/esm2020/datatable/datatable-footer/datatable-footer.directive.mjs +3 -3
- package/esm2020/datatable/datatable-menu-bar/datatable-menu-bar.component.mjs +8 -8
- package/esm2020/datatable/datatable-menu-bar-column-center/datatable-menu-bar-column-center.component.mjs +3 -3
- package/esm2020/datatable/datatable-menu-bar-column-left/datatable-menu-bar-column-left.component.mjs +3 -3
- package/esm2020/datatable/datatable-menu-bar-column-right/datatable-menu-bar-column-right.component.mjs +3 -3
- package/esm2020/datatable/datatable-menu-bar-row/datatable-menu-bar-row.component.mjs +3 -3
- package/esm2020/datatable/datatable-menu-bar-text/datatable-menu-bar-text.component.mjs +3 -3
- package/esm2020/datatable/datatable-row-detail/datatable-row-detail-tpl.directive.mjs +3 -3
- package/esm2020/datatable/datatable-row-detail/datatable-row-detail.directive.mjs +3 -3
- package/esm2020/datatable/datatable.module.mjs +4 -4
- package/esm2020/datatable/directives/datatable-action-menu-item.directive.mjs +3 -3
- package/esm2020/datatable/directives/datatable-action-menu-toggle.directive.mjs +11 -11
- package/esm2020/datatable/directives/datatable-cell-tpl.directive.mjs +3 -3
- package/esm2020/datatable/directives/datatable-filter.directive.mjs +3 -3
- package/esm2020/datatable/directives/datatable-row-action-item.directive.mjs +3 -3
- package/esm2020/datatable/services/columns-alterations-manager.service.mjs +3 -3
- package/esm2020/datatable/services/columns-manager.service.mjs +3 -3
- package/esm2020/datatable/services/datatable-column-changes.service.mjs +3 -3
- package/esm2020/datatable/services/datatable-preferences.service.mjs +6 -6
- package/esm2020/datatable/services/datatable-scrollbar-helper.service.mjs +3 -3
- package/esm2020/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.mjs +12 -12
- package/esm2020/datatable-dynamic/datatable-dynamic-filter-container/datatable-dynamic-filter-container.component.mjs +8 -8
- package/esm2020/datatable-dynamic/datatable-dynamic-menu-bar-content/datatable-dynamic-menu-bar-content.component.mjs +6 -6
- package/esm2020/datatable-dynamic/datatable-dynamic.component.mjs +8 -8
- package/esm2020/datatable-dynamic/datatable-dynamic.module.mjs +4 -4
- package/esm2020/datatable-dynamic/directives/datatable-dynamic-action-menu-item.directive.mjs +7 -7
- package/esm2020/datatable-dynamic/dynamic-datatable-def.service.mjs +3 -3
- package/esm2020/datatable-dynamic/dynamic-datatable-row-actions.service.mjs +3 -3
- package/esm2020/dynamic/action/api/dynamic-action-api.service.mjs +3 -3
- package/esm2020/dynamic/action/dynamic-action-helper.service.mjs +3 -3
- package/esm2020/dynamic/action/link/dynamic-action-link.service.mjs +3 -3
- package/esm2020/dynamic/action/modal/dynamic-action-modal.service.mjs +3 -3
- package/esm2020/dynamic/dynamic-value-helper.service.mjs +3 -3
- package/esm2020/dynamic/evaluators/exporters-data-evaluator/exporters-data-evaluator.mjs +3 -3
- package/esm2020/dynamic/evaluators/jexl-evaluator/jexl-evaluator.mjs +3 -3
- package/esm2020/dynamic-component-loader/dynamic-component-loader.module.mjs +4 -4
- package/esm2020/dynamic-component-loader/dynamic-component-loader.service.mjs +3 -3
- package/esm2020/footer-bar/footer-bar/footer-bar.component.mjs +3 -3
- package/esm2020/footer-bar/footer-bar.module.mjs +4 -4
- package/esm2020/form-field/form-field-error.directive.mjs +6 -6
- package/esm2020/form-field/form-field-help-text.directive.mjs +3 -3
- package/esm2020/form-field/form-field-label-tpl.directive.mjs +3 -3
- package/esm2020/form-field/form-field-required-indicator.component.mjs +3 -3
- package/esm2020/form-field/form-field-tokens.mjs +1 -1
- package/esm2020/form-field/form-field.component.mjs +48 -48
- package/esm2020/form-field/form-field.module.mjs +4 -4
- package/esm2020/form-field/input.directive.mjs +43 -43
- package/esm2020/form-field/testing/form-field-required-indicator.harness.mjs +1 -1
- package/esm2020/form-field/testing/index.mjs +1 -1
- package/esm2020/form-field-error/form-field-error/form-field-error.component.mjs +3 -3
- package/esm2020/form-field-error/form-field-error-list/form-field-error-list-item-tpl.directive.mjs +3 -3
- package/esm2020/form-field-error/form-field-error-list/form-field-error-list-item.directive.mjs +3 -3
- package/esm2020/form-field-error/form-field-error-list/form-field-error-list.component.mjs +92 -92
- package/esm2020/form-field-error/form-field-error.module.mjs +4 -4
- package/esm2020/framework/base-layout/base-layout.component.mjs +6 -6
- package/esm2020/framework/base-layout/base-layout.module.mjs +4 -4
- package/esm2020/framework/base-layout/directives/base-layout-content-footer.directive.mjs +3 -3
- package/esm2020/framework/base-layout/directives/base-layout-content-header.directive.mjs +3 -3
- package/esm2020/framework/base-layout/directives/base-layout-content.directive.mjs +3 -3
- package/esm2020/framework/base-layout/directives/base-layout-nav-toggle.directive.mjs +10 -10
- package/esm2020/framework/base-layout/directives/base-layout-side-bar-footer.directive.mjs +3 -3
- package/esm2020/framework/base-layout/directives/base-layout-side-bar.directive.mjs +3 -3
- package/esm2020/framework/base-layout/directives/base-layout-top-bar.directive.mjs +3 -3
- package/esm2020/framework/dashboard/dashboard-widget-container/dashboard-widget-container.component.mjs +3 -3
- package/esm2020/framework/dashboard/dashboard-widget-template-container/dashboard-widget-template-container.component.mjs +3 -3
- package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widget-portal-outlet.directive.mjs +3 -3
- package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets-preferences.service.mjs +3 -3
- package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets.component.mjs +18 -18
- package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets.service.mjs +12 -12
- package/esm2020/framework/dashboard/dashboard-widgets-tokens.mjs +1 -1
- package/esm2020/framework/dashboard/dashboard.component.mjs +3 -3
- package/esm2020/framework/dashboard/dashboard.module.mjs +4 -4
- package/esm2020/framework/dynamic-router/dynamic-router.module.mjs +4 -4
- package/esm2020/framework/dynamic-router/hierarchy-router-outlet/hierarchy-router-outlet.component.mjs +3 -3
- package/esm2020/framework/dynamic-router/resolvers/hierarchy-level.resolver.mjs +3 -3
- package/esm2020/framework/schema-form/schema-form-framework.component.mjs +3 -3
- package/esm2020/framework/schema-form/schema-form-framework.mjs +3 -3
- package/esm2020/framework/schema-form/schema-form.module.mjs +4 -4
- package/esm2020/framework/schema-form-controls/schema-form-checkbox/schema-form-checkbox.component.mjs +3 -3
- package/esm2020/framework/schema-form-controls/schema-form-controls.module.mjs +4 -4
- package/esm2020/framework/schema-form-controls/schema-form-input/schema-form-input.component.mjs +3 -3
- package/esm2020/framework/schema-form-controls/schema-form-number/schema-form-number.component.mjs +3 -3
- package/esm2020/framework/schema-form-controls/schema-form-select/schema-form-select.component.mjs +3 -3
- package/esm2020/framework/schema-form-controls/schema-form-submit/schema-form-submit.component.mjs +3 -3
- package/esm2020/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.mjs +3 -3
- package/esm2020/framework/side-nav/side-nav-item/side-nav-item.component.mjs +24 -24
- package/esm2020/framework/side-nav/side-nav-toggle/side-nav-toggle.component.mjs +3 -3
- package/esm2020/framework/side-nav/side-nav-tokens.mjs +1 -1
- package/esm2020/framework/side-nav/side-nav.component.mjs +17 -17
- package/esm2020/framework/side-nav/side-nav.module.mjs +4 -4
- package/esm2020/framework/side-nav/side-nav.service.mjs +3 -3
- package/esm2020/framework/top-bar/top-bar-item.directive.mjs +3 -3
- package/esm2020/framework/top-bar/top-bar-menu-btn-detail.directive.mjs +3 -3
- package/esm2020/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.mjs +3 -3
- package/esm2020/framework/top-bar/top-bar-menu.directive.mjs +3 -3
- package/esm2020/framework/top-bar/top-bar-title/top-bar-title.component.mjs +3 -3
- package/esm2020/framework/top-bar/top-bar.component.mjs +3 -3
- package/esm2020/framework/top-bar/top-bar.module.mjs +4 -4
- package/esm2020/google-maps/google-maps/google-maps.component.mjs +17 -17
- package/esm2020/google-maps/google-maps-controls.service.mjs +3 -3
- package/esm2020/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.mjs +20 -20
- package/esm2020/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.directive.mjs +7 -7
- package/esm2020/google-maps/google-maps-recenter-button-control/google-maps-recenter-button-control.component.mjs +7 -7
- package/esm2020/google-maps/google-maps-upload-button-control/google-maps-upload-button-control.component.mjs +7 -7
- package/esm2020/google-maps/google-maps.module.mjs +4 -4
- package/esm2020/google-maps/google-maps.service.mjs +5 -5
- package/esm2020/google-maps/map-control.component.mjs +9 -9
- package/esm2020/google-maps/map-file-drop/map-file-drop.component.mjs +3 -3
- package/esm2020/google-maps/map-value-manager.service.mjs +3 -3
- package/esm2020/graphql/datatable/datatable-graphql-query-ref.mjs +5 -5
- package/esm2020/graphql/datatable/datatable-graphql.service.mjs +3 -3
- package/esm2020/icon/icon/icon.component.mjs +3 -3
- package/esm2020/icon/icon-btn/icon-btn.component.mjs +24 -24
- package/esm2020/icon/icon-notification/icon-notification.component.mjs +3 -3
- package/esm2020/icon/icon.module.mjs +4 -4
- package/esm2020/layout/layout.module.mjs +4 -4
- package/esm2020/layout/layout.service.mjs +3 -3
- package/esm2020/loading/loading/loading.component.mjs +7 -7
- package/esm2020/loading/loading-overlay.service.mjs +3 -3
- package/esm2020/loading/loading.module.mjs +4 -4
- package/esm2020/menu/menu-divider.component.mjs +3 -3
- package/esm2020/menu/menu-footer/menu-footer.component.mjs +3 -3
- package/esm2020/menu/menu-footer-action/menu-footer-action.component.mjs +7 -7
- package/esm2020/menu/menu-header/menu-header.component.mjs +3 -3
- package/esm2020/menu/menu-item.component.mjs +3 -3
- package/esm2020/menu/menu-toggle.directive.mjs +42 -42
- package/esm2020/menu/menu.component.mjs +15 -15
- package/esm2020/menu/menu.module.mjs +4 -4
- package/esm2020/modal/directives/modal-close.directive.mjs +11 -11
- package/esm2020/modal/directives/modal-footer-tpl.directive.mjs +3 -3
- package/esm2020/modal/directives/modal-header-icon-tpl.directive.mjs +3 -3
- package/esm2020/modal/directives/modal-header-title-tpl.directive.mjs +3 -3
- package/esm2020/modal/directives/modal-title.directive.mjs +3 -3
- package/esm2020/modal/directives/modal.directive.mjs +3 -3
- package/esm2020/modal/modal/modal.component.mjs +19 -19
- package/esm2020/modal/modal-body/modal-body.component.mjs +3 -3
- package/esm2020/modal/modal-container/modal-container.component.mjs +12 -12
- package/esm2020/modal/modal-footer/modal-footer.component.mjs +3 -3
- package/esm2020/modal/modal-header/modal-header.component.mjs +3 -3
- package/esm2020/modal/modal.module.mjs +4 -4
- package/esm2020/modal/modal.service.mjs +16 -16
- package/esm2020/modal/route-modal/route-modal.component.mjs +3 -3
- package/esm2020/popover/popover/popover.component.mjs +18 -18
- package/esm2020/popover/popover.directive.mjs +32 -32
- package/esm2020/popover/popover.module.mjs +4 -4
- package/esm2020/progress/progress-circle/progress-circle.component.mjs +9 -9
- package/esm2020/progress/progress.module.mjs +4 -4
- package/esm2020/public_api.mjs +1 -42
- package/esm2020/scrollbar/overlay-scrollbar.directive.mjs +10 -10
- package/esm2020/scrollbar/overlay-scrollbars.service.mjs +3 -3
- package/esm2020/scrollbar/scrollbar.module.mjs +4 -4
- package/esm2020/services/asset-loader.service.mjs +3 -3
- package/esm2020/services/font-loader.service.mjs +3 -3
- package/esm2020/services/router-helpers.service.mjs +3 -3
- package/esm2020/shared/components/password-input-reveal/password-input-reveal.component.mjs +3 -3
- package/esm2020/shared/directives/auto-focus.directive.mjs +3 -3
- package/esm2020/shared/directives/click-outside.directive.mjs +9 -9
- package/esm2020/shared/directives/disable-control.directive.mjs +7 -7
- package/esm2020/shared/directives/elem-resized.directive.mjs +3 -3
- package/esm2020/shared/directives/hover-class-toggle.directive.mjs +10 -10
- package/esm2020/shared/directives/hover-class.directive.mjs +9 -9
- package/esm2020/shared/directives/ng-select-extra.directive.mjs +26 -26
- package/esm2020/shared/directives/ngx-quill-extra.directive.mjs +10 -10
- package/esm2020/shared/pipes/mask-chars.pipe.mjs +3 -3
- package/esm2020/shared/pipes/truncate.pipe.mjs +3 -3
- package/esm2020/shared/shared.module.mjs +4 -4
- package/esm2020/storage/local-storage.service.mjs +3 -3
- package/esm2020/story-helpers/initial-route.service.mjs +3 -3
- package/esm2020/story-helpers/story-empty-with-route.component.mjs +3 -3
- package/esm2020/story-helpers/story-empty.component.mjs +3 -3
- package/esm2020/story-helpers/story-helper-components.module.mjs +4 -4
- package/esm2020/story-helpers/story-initial-route.mjs +4 -4
- package/esm2020/story-helpers/story-modal-container.component.mjs +6 -6
- package/esm2020/story-helpers/story-toastr.service.mjs +3 -3
- package/esm2020/tabbed/directives/tabbed-tab-content.directive.mjs +3 -3
- package/esm2020/tabbed/directives/tabbed-tab.directive.mjs +3 -3
- package/esm2020/tabbed/tabbed-content/tabbed-content.component.mjs +3 -3
- package/esm2020/tabbed/tabbed-item/tabbed-item.component.mjs +3 -3
- package/esm2020/tabbed/tabbed-models.mjs +1 -1
- package/esm2020/tabbed/tabbed.component.mjs +13 -13
- package/esm2020/tabbed/tabbed.module.mjs +4 -4
- package/esm2020/tabbed/tabbed.service.mjs +3 -3
- package/esm2020/table/table/table.component.mjs +11 -11
- package/esm2020/table/table.module.mjs +4 -4
- package/esm2020/table-cell-type/services/table-cell-types-helpers.service.mjs +3 -3
- package/esm2020/table-cell-type/table-cell-type-selector.component.mjs +3 -3
- package/esm2020/table-cell-type/table-cell-type.module.mjs +4 -4
- package/esm2020/table-cell-types/table-cell-type-currency/table-cell-type-currency.component.mjs +3 -3
- package/esm2020/table-cell-types/table-cell-type-date/table-cell-type-date.component.mjs +3 -3
- package/esm2020/table-cell-types/table-cell-type-decimal/table-cell-type-decimal.component.mjs +3 -3
- package/esm2020/table-cell-types/table-cell-type-icon/table-cell-type-icon.component.mjs +31 -31
- package/esm2020/table-cell-types/table-cell-type-integer/table-cell-type-integer.component.mjs +3 -3
- package/esm2020/table-cell-types/table-cell-type-phone/table-cell-type-phone.component.mjs +6 -6
- package/esm2020/table-cell-types/table-cell-type-progress-circle/table-cell-type-progress-circle.component.mjs +3 -3
- package/esm2020/table-cell-types/table-cell-type-progress-circle-icon/table-cell-type-progress-circle-icon.component.mjs +3 -3
- package/esm2020/table-cell-types/table-cell-type-string/table-cell-type-string.component.mjs +23 -23
- package/esm2020/table-cell-types/table-cell-types.module.mjs +4 -4
- package/esm2020/tel-input/phone-number.pipe.mjs +3 -3
- package/esm2020/tel-input/tel-input/tel-input.component.mjs +34 -34
- package/esm2020/tel-input/tel-input.directive.mjs +18 -18
- package/esm2020/tel-input/tel-input.module.mjs +4 -4
- package/esm2020/tiled-select/components/tiled-select/tiled-select.component.mjs +20 -20
- package/esm2020/tiled-select/components/tiled-select-tile/tiled-select-tile.component.mjs +6 -6
- package/esm2020/tiled-select/components/tiled-select-tile-icon/tiled-select-tile-icon.component.mjs +10 -10
- package/esm2020/tiled-select/directives/tiled-select-tile-icon-tpl.directive.mjs +3 -3
- package/esm2020/tiled-select/directives/tiled-select-tile-label-tpl.directive.mjs +3 -3
- package/esm2020/tiled-select/directives/tiled-select-tile-overlay.directive.mjs +3 -3
- package/esm2020/tiled-select/tiled-select.module.mjs +4 -4
- package/esm2020/toggle-edit/toggle-edit-actions-container/toggle-edit-actions-container.component.mjs +3 -3
- package/esm2020/toggle-edit/toggle-edit-display-tpl.directive.mjs +3 -3
- package/esm2020/toggle-edit/toggle-edit-keyboard-listener.service.mjs +3 -3
- package/esm2020/toggle-edit/toggle-edit.component.mjs +16 -16
- package/esm2020/toggle-edit/toggle-edit.module.mjs +4 -4
- package/esm2020/toggle-group/toggle-group-option.directive.mjs +12 -12
- package/esm2020/toggle-group/toggle-group.directive.mjs +3 -3
- package/esm2020/toggle-group/toggle-group.module.mjs +4 -4
- package/esm2020/unsaved-changes-dialog/unsaved-changes-can-deactivate.mjs +3 -3
- package/esm2020/unsaved-changes-dialog/unsaved-changes-dialog.component.mjs +3 -3
- package/esm2020/unsaved-changes-dialog/unsaved-changes-dialog.guard.mjs +3 -3
- package/esm2020/unsaved-changes-dialog/unsaved-changes-dialog.module.mjs +4 -4
- package/esm2020/utils/geo-json/coerce-feature-collection.mjs +1 -1
- package/esm2020/utils/geo-json/geo-json-to-area.mjs +1 -1
- package/esm2020/utils/geo-json/is-feature-collection.validator.mjs +1 -1
- package/esm2020/utils/geo-json/is-only-geometry-types.mjs +1 -1
- package/esm2020/utils/geo-json/is-only-geometry-types.validator.mjs +1 -1
- package/esm2020/utils/geo-json/merge-polygons.mjs +1 -1
- package/esm2020/utils/geo-json/no-inner-rings.validator.mjs +1 -1
- package/esm2020/utils/geo-json/split-multi-polygons.mjs +1 -1
- package/esm2020/viewers/html-template-viewer/html-template-viewer.component.mjs +37 -37
- package/esm2020/viewers/html-template-viewer/html-template-viewer.module.mjs +4 -4
- package/esm2020/viewers/pdf-viewer/pdf-page/pdf-page.component.mjs +10 -10
- package/esm2020/viewers/pdf-viewer/pdf-renderer.service.mjs +3 -3
- package/esm2020/viewers/pdf-viewer/pdf-viewer.component.mjs +38 -38
- package/esm2020/viewers/pdf-viewer/pdf-viewer.module.mjs +4 -4
- package/esm2020/widget/directives/widget-drag-handle.directive.mjs +12 -12
- package/esm2020/widget/directives/widget-icon-tpl.directive.mjs +3 -3
- package/esm2020/widget/directives/widget-title-tpl.directive.mjs +3 -3
- package/esm2020/widget/widget/widget.component.mjs +23 -23
- package/esm2020/widget/widget-content-components/widget-button-group/widget-button-group.component.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-button-group/widget-button-group.module.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-content-header/widget-content-header.component.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-content-header/widget-content-header.module.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-description/widget-description.component.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-description/widget-description.module.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-empty-label/widget-empty-label.component.mjs +7 -7
- package/esm2020/widget/widget-content-components/widget-empty-label/widget-empty-label.module.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-footer-link/widget-footer-link.component.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-footer-link/widget-footer-link.module.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-footer-text/widget-footer-text.component.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-footer-text/widget-footer-text.module.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-header-badge/widget-header-badge.component.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-header-badge/widget-header-badge.module.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group-item/widget-list-group-item-icon-tpl.directive.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group-item/widget-list-group-item.component.mjs +15 -15
- package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group.component.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group.module.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-table/widget-table.component.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-table/widget-table.module.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile-footer/widget-tile-footer.component.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile-footer-item/widget-tile-footer-item.component.mjs +8 -8
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile-group/widget-tile-group.component.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile-secondary-icon.directive.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile.component.mjs +16 -16
- package/esm2020/widget/widget-content-components/widget-tile/widget-tile.module.mjs +4 -4
- package/esm2020/widget/widget-content-components/widget-tile-list/widget-tile-list.component.mjs +3 -3
- package/esm2020/widget/widget-content-components/widget-tile-list/widget-tile-list.module.mjs +4 -4
- package/esm2020/widget/widget-footer/widget-footer.component.mjs +3 -3
- package/esm2020/widget/widget-registry.service.mjs +3 -3
- package/esm2020/widget/widget.module.mjs +4 -4
- package/fesm2015/theseam-ui-common-asset-reader.mjs +18 -18
- package/fesm2015/theseam-ui-common-asset-reader.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-breadcrumbs.mjs +10 -10
- package/fesm2015/theseam-ui-common-buttons.mjs +26 -26
- package/fesm2015/theseam-ui-common-buttons.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-card.mjs +19 -19
- package/fesm2015/theseam-ui-common-checkbox.mjs +46 -46
- package/fesm2015/theseam-ui-common-checkbox.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-confirm-dialog.mjs +18 -18
- package/fesm2015/theseam-ui-common-confirm-dialog.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-core.mjs +18 -18
- package/fesm2015/theseam-ui-common-core.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-data-exporter.mjs +10 -10
- package/fesm2015/theseam-ui-common-data-filters.mjs +32 -32
- package/fesm2015/theseam-ui-common-data-filters.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs +46 -46
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-datatable.mjs +208 -208
- package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-dynamic-component-loader.mjs +7 -7
- package/fesm2015/theseam-ui-common-dynamic.mjs +21 -21
- package/fesm2015/theseam-ui-common-footer-bar.mjs +7 -7
- package/fesm2015/theseam-ui-common-form-field-error.mjs +104 -104
- package/fesm2015/theseam-ui-common-form-field-error.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-form-field.mjs +107 -107
- package/fesm2015/theseam-ui-common-form-field.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-framework.mjs +196 -196
- package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-google-maps.mjs +78 -78
- package/fesm2015/theseam-ui-common-google-maps.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-graphql.mjs +7 -7
- package/fesm2015/theseam-ui-common-graphql.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-icon.mjs +33 -33
- package/fesm2015/theseam-ui-common-icon.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-layout.mjs +7 -7
- package/fesm2015/theseam-ui-common-loading.mjs +13 -13
- package/fesm2015/theseam-ui-common-loading.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-menu.mjs +79 -79
- package/fesm2015/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-modal.mjs +85 -85
- package/fesm2015/theseam-ui-common-modal.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-popover.mjs +52 -52
- package/fesm2015/theseam-ui-common-popover.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-progress.mjs +12 -12
- package/fesm2015/theseam-ui-common-progress.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-scrollbar.mjs +16 -16
- package/fesm2015/theseam-ui-common-scrollbar.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-services.mjs +9 -9
- package/fesm2015/theseam-ui-common-shared.mjs +84 -84
- package/fesm2015/theseam-ui-common-shared.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-storage.mjs +3 -3
- package/fesm2015/theseam-ui-common-story-helpers.mjs +25 -25
- package/fesm2015/theseam-ui-common-story-helpers.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-tabbed.mjs +31 -31
- package/fesm2015/theseam-ui-common-tabbed.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-table-cell-type.mjs +10 -10
- package/fesm2015/theseam-ui-common-table-cell-types.mjs +80 -80
- package/fesm2015/theseam-ui-common-table-cell-types.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-table.mjs +14 -14
- package/fesm2015/theseam-ui-common-table.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-tel-input.mjs +59 -59
- package/fesm2015/theseam-ui-common-tel-input.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-tiled-select.mjs +46 -46
- package/fesm2015/theseam-ui-common-tiled-select.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-toggle-edit.mjs +28 -28
- package/fesm2015/theseam-ui-common-toggle-edit.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-toggle-group.mjs +18 -18
- package/fesm2015/theseam-ui-common-toggle-group.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-unsaved-changes-dialog.mjs +13 -13
- package/fesm2015/theseam-ui-common-utils.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-viewers.mjs +93 -93
- package/fesm2015/theseam-ui-common-viewers.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-widget.mjs +175 -175
- package/fesm2015/theseam-ui-common-widget.mjs.map +1 -1
- package/fesm2015/theseam-ui-common.mjs +0 -41
- package/fesm2015/theseam-ui-common.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-asset-reader.mjs +18 -18
- package/fesm2020/theseam-ui-common-asset-reader.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-breadcrumbs.mjs +10 -10
- package/fesm2020/theseam-ui-common-buttons.mjs +26 -26
- package/fesm2020/theseam-ui-common-buttons.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-card.mjs +19 -19
- package/fesm2020/theseam-ui-common-checkbox.mjs +46 -46
- package/fesm2020/theseam-ui-common-checkbox.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-confirm-dialog.mjs +18 -18
- package/fesm2020/theseam-ui-common-confirm-dialog.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-core.mjs +18 -18
- package/fesm2020/theseam-ui-common-core.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-data-exporter.mjs +10 -10
- package/fesm2020/theseam-ui-common-data-filters.mjs +32 -32
- package/fesm2020/theseam-ui-common-data-filters.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs +46 -46
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable.mjs +208 -208
- package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-dynamic-component-loader.mjs +7 -7
- package/fesm2020/theseam-ui-common-dynamic.mjs +21 -21
- package/fesm2020/theseam-ui-common-footer-bar.mjs +7 -7
- package/fesm2020/theseam-ui-common-form-field-error.mjs +104 -104
- package/fesm2020/theseam-ui-common-form-field-error.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-form-field.mjs +107 -107
- package/fesm2020/theseam-ui-common-form-field.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-framework.mjs +196 -196
- package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-google-maps.mjs +78 -78
- package/fesm2020/theseam-ui-common-google-maps.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-graphql.mjs +7 -7
- package/fesm2020/theseam-ui-common-graphql.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-icon.mjs +33 -33
- package/fesm2020/theseam-ui-common-icon.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-layout.mjs +7 -7
- package/fesm2020/theseam-ui-common-loading.mjs +13 -13
- package/fesm2020/theseam-ui-common-loading.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-menu.mjs +77 -77
- package/fesm2020/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-modal.mjs +85 -85
- package/fesm2020/theseam-ui-common-modal.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-popover.mjs +52 -52
- package/fesm2020/theseam-ui-common-popover.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-progress.mjs +12 -12
- package/fesm2020/theseam-ui-common-progress.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-scrollbar.mjs +16 -16
- package/fesm2020/theseam-ui-common-scrollbar.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-services.mjs +9 -9
- package/fesm2020/theseam-ui-common-shared.mjs +84 -84
- package/fesm2020/theseam-ui-common-shared.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-storage.mjs +3 -3
- package/fesm2020/theseam-ui-common-story-helpers.mjs +25 -25
- package/fesm2020/theseam-ui-common-story-helpers.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-tabbed.mjs +31 -31
- package/fesm2020/theseam-ui-common-tabbed.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-table-cell-type.mjs +10 -10
- package/fesm2020/theseam-ui-common-table-cell-types.mjs +80 -80
- package/fesm2020/theseam-ui-common-table-cell-types.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-table.mjs +14 -14
- package/fesm2020/theseam-ui-common-table.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-tel-input.mjs +57 -57
- package/fesm2020/theseam-ui-common-tel-input.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-tiled-select.mjs +46 -46
- package/fesm2020/theseam-ui-common-tiled-select.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-toggle-edit.mjs +28 -28
- package/fesm2020/theseam-ui-common-toggle-edit.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-toggle-group.mjs +18 -18
- package/fesm2020/theseam-ui-common-toggle-group.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-unsaved-changes-dialog.mjs +13 -13
- package/fesm2020/theseam-ui-common-utils.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-viewers.mjs +93 -93
- package/fesm2020/theseam-ui-common-viewers.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-widget.mjs +175 -175
- package/fesm2020/theseam-ui-common-widget.mjs.map +1 -1
- package/fesm2020/theseam-ui-common.mjs +0 -41
- package/fesm2020/theseam-ui-common.mjs.map +1 -1
- package/framework/base-layout/base-layout-action.d.ts +1 -1
- package/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.d.ts +1 -1
- package/framework/side-nav/_side-nav-theme.scss +5 -0
- package/framework/side-nav/side-nav-item/side-nav-item.component.scss +185 -0
- package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.scss +32 -0
- package/framework/side-nav/side-nav.component.scss +47 -0
- package/framework/side-nav/side-nav.models.d.ts +1 -1
- package/framework/side-nav/styles/_themes/light/_variables.scss +29 -0
- package/framework/side-nav/styles/_themes/primary/_variables.scss +31 -0
- package/framework/side-nav/styles/_utilities.scss +3 -0
- package/framework/side-nav/styles/_variables.scss +2 -0
- package/google-maps/google-maps/google-maps.component.d.ts +0 -1
- package/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.d.ts +0 -4
- package/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.directive.d.ts +0 -4
- package/google-maps/google-maps.service.d.ts +0 -2
- package/google-maps/map-controls-service.d.ts +0 -1
- package/google-maps/map-value-manager.service.d.ts +1 -1
- package/graphql/datatable/datatable-graphql-query-ref.d.ts +2 -2
- package/graphql/datatable/datatable-graphql.service.d.ts +1 -1
- package/graphql/datatable/datatable-helpers.d.ts +2 -2
- package/graphql/datatable/map-filter-states.d.ts +2 -2
- package/graphql/datatable/map-page-info.d.ts +1 -1
- package/graphql/datatable/mapper-context.d.ts +1 -1
- package/graphql/models/gql-datatable-accessor.d.ts +1 -1
- package/graphql/models/hint-transformer.d.ts +1 -1
- package/icon/icon/icon.component.d.ts +1 -1
- package/icon/icon.d.ts +1 -1
- package/layout/breakpoint-aliases.d.ts +1 -1
- package/loading/loading.models.d.ts +1 -1
- package/modal/modal-config.d.ts +1 -1
- package/models/component-type.d.ts +1 -1
- package/models/size-prefixes.d.ts +1 -1
- package/models/size-types.d.ts +1 -1
- package/models/theme-prefixes.d.ts +1 -1
- package/models/theme-types.d.ts +2 -2
- package/package.json +1 -1
- package/scrollbar/overlay-scrollbars-config-model.d.ts +1 -1
- package/services/font-loader.service.d.ts +1 -1
- package/styles/bootstrap/_bootstrap.scss +34 -34
- package/styles/bootstrap/_bs-utilities.scss +3 -3
- package/styles/theme.scss +3 -3
- package/styles/vendor/ngx-datatable/_ngx-datatable.scss +1 -1
- package/styles/vendor/quill/_quill.scss +3 -3
- package/table/table/table.component.d.ts +1 -1
- package/table-cell-type/table-cell-type-models.d.ts +3 -3
- package/table-cell-type/table-cell-type-name.d.ts +1 -1
- package/table-cell-types/table-cell-type-currency/table-cell-type-currency-config.d.ts +1 -1
- package/table-cell-types/table-cell-type-currency/table-cell-type-currency.d.ts +1 -1
- package/table-cell-types/table-cell-type-date/table-cell-type-date.d.ts +1 -1
- package/table-cell-types/table-cell-type-decimal/table-cell-type-decimal-config.d.ts +1 -1
- package/table-cell-types/table-cell-type-decimal/table-cell-type-decimal.d.ts +1 -1
- package/table-cell-types/table-cell-type-icon/table-cell-type-icon-config.d.ts +1 -1
- package/table-cell-types/table-cell-type-icon/table-cell-type-icon.component.d.ts +1 -1
- package/table-cell-types/table-cell-type-integer/table-cell-type-integer-config.d.ts +1 -1
- package/table-cell-types/table-cell-type-integer/table-cell-type-integer.d.ts +1 -1
- package/table-cell-types/table-cell-type-progress-circle/table-cell-type-progress-circle-config.d.ts +1 -1
- package/table-cell-types/table-cell-type-progress-circle-icon/table-cell-type-progress-circle-icon-config.d.ts +1 -1
- package/table-cell-types/table-cell-type-string/table-cell-type-string-config.d.ts +1 -1
- package/table-cell-types/table-cell-type-string/table-cell-type-string.component.d.ts +1 -1
- package/tel-input/utils/coerce-phone-number-format.d.ts +1 -1
- package/tiled-select/components/tiled-select/tiled-select.component.d.ts +1 -1
- package/tiled-select/tiled-select.models.d.ts +2 -2
- package/utils/polling-ticker.d.ts +1 -1
- package/utils/subscriber-count.d.ts +1 -1
- package/widget/directives/widget-drag-handle.directive.d.ts +1 -1
|
@@ -52,6 +52,110 @@ export const _THESEAM_DATATABLE_ACCESSOR = {
|
|
|
52
52
|
useExisting: forwardRef(() => DatatableComponent)
|
|
53
53
|
};
|
|
54
54
|
export class DatatableComponent {
|
|
55
|
+
get filters() { return this._filtersSubject.value; }
|
|
56
|
+
get preferencesKey() { return this._preferencesKey.value; }
|
|
57
|
+
set preferencesKey(value) { this._preferencesKey.next(value || undefined); }
|
|
58
|
+
set columns(value) {
|
|
59
|
+
this._columnsManager.setInputColumns(Array.isArray(value) ? value : []);
|
|
60
|
+
}
|
|
61
|
+
get rows() { return this._rows.value; }
|
|
62
|
+
set rows(value) {
|
|
63
|
+
this._rows.next(value || []);
|
|
64
|
+
}
|
|
65
|
+
get selectionType() { return this._columnsManager.getSelectionType(); }
|
|
66
|
+
set selectionType(value) {
|
|
67
|
+
this._columnsManager.setSelectionType(notNullOrUndefined(value) ? value : undefined);
|
|
68
|
+
}
|
|
69
|
+
get sortType() { return this._sortType; }
|
|
70
|
+
set sortType(value) {
|
|
71
|
+
if (notNullOrUndefined(value) && (value === SortType.single || value == SortType.multi)) {
|
|
72
|
+
this._sortType = value;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this._sortType = SortType.single;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
get sorts() {
|
|
79
|
+
return this.ngxDatatable ? this.ngxDatatable.sorts : this._sorts;
|
|
80
|
+
}
|
|
81
|
+
set sorts(value) {
|
|
82
|
+
this._sorts = notNullOrUndefined(value) ? coerceArray(value) : [];
|
|
83
|
+
}
|
|
84
|
+
set dataSource(value) {
|
|
85
|
+
if (value instanceof DatatableDataSource) {
|
|
86
|
+
value.setDatatableAccessor(this);
|
|
87
|
+
}
|
|
88
|
+
this._dataSourceSubject.next(value || undefined);
|
|
89
|
+
}
|
|
90
|
+
set columnComponents(value) {
|
|
91
|
+
this._columnsManager.setTemplateColumns(translateTemplateColumns(value?.toArray() ?? []));
|
|
92
|
+
}
|
|
93
|
+
get rowActionItem() { return this._rowActionItem; }
|
|
94
|
+
set rowActionItem(value) {
|
|
95
|
+
this._rowActionItem = value;
|
|
96
|
+
this._columnsManager.setRowActionItem(notNullOrUndefined(value) ? value : undefined);
|
|
97
|
+
}
|
|
98
|
+
get menuBarComponent() { return this._menuBarComponent; }
|
|
99
|
+
set menuBarComponent(value) {
|
|
100
|
+
this._menuBarComponent = value;
|
|
101
|
+
if (this._menuBarSub) {
|
|
102
|
+
this._menuBarSub.unsubscribe();
|
|
103
|
+
}
|
|
104
|
+
if (value) {
|
|
105
|
+
this._setMenuBarFilters(value.filters());
|
|
106
|
+
this._menuBarSub = this._menuBarComponent?.filtersChanged
|
|
107
|
+
.subscribe(v => { this._setMenuBarFilters(value.filters()); });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
get actionMenuCellTpl() { return this._actionMenuCellTpl; }
|
|
111
|
+
set actionMenuCellTpl(value) {
|
|
112
|
+
this._actionMenuCellTpl = value;
|
|
113
|
+
this._columnsManager.setActionMenuCellTpl(notNullOrUndefined(value) ? value : undefined);
|
|
114
|
+
}
|
|
115
|
+
get treeToggleTpl() { return this._treeToggleTpl; }
|
|
116
|
+
set treeToggleTpl(value) {
|
|
117
|
+
this._treeToggleTpl = value;
|
|
118
|
+
this._columnsManager.setTreeToggleTpl(notNullOrUndefined(value) ? value : undefined);
|
|
119
|
+
}
|
|
120
|
+
get headerTpl() { return this._headerTpl; }
|
|
121
|
+
set headerTpl(value) {
|
|
122
|
+
this._headerTpl = value;
|
|
123
|
+
this._columnsManager.setHeaderTpl(notNullOrUndefined(value) ? value : undefined);
|
|
124
|
+
}
|
|
125
|
+
get blankHeaderTpl() { return this._blankHeaderTpl; }
|
|
126
|
+
set blankHeaderTpl(value) {
|
|
127
|
+
this._blankHeaderTpl = value;
|
|
128
|
+
this._columnsManager.setBlankHeaderTpl(notNullOrUndefined(value) ? value : undefined);
|
|
129
|
+
}
|
|
130
|
+
get cellTypeSelectorTpl() { return this._cellTypeSelectorTpl; }
|
|
131
|
+
set cellTypeSelectorTpl(value) {
|
|
132
|
+
this._cellTypeSelectorTpl = value;
|
|
133
|
+
this._columnsManager.setCellTypeSelectorTpl(notNullOrUndefined(value) ? value : undefined);
|
|
134
|
+
}
|
|
135
|
+
// TODO: Remove this DOM-dependent code when a way to property listen for
|
|
136
|
+
// dblclick on the header reasize handles.
|
|
137
|
+
_dblClick(event) {
|
|
138
|
+
const isHandle = event.target.classList.contains('resize-handle');
|
|
139
|
+
if (isHandle) {
|
|
140
|
+
const isResizeable = event.target.parentElement?.classList.contains('resizeable');
|
|
141
|
+
if (isResizeable) {
|
|
142
|
+
event.stopPropagation();
|
|
143
|
+
const id = event.target.parentElement
|
|
144
|
+
?.querySelector('.datatable-column-header-separator')
|
|
145
|
+
?.getAttribute('data-column-id');
|
|
146
|
+
this._columnsManager.columns$.pipe(take(1)).subscribe(columns => {
|
|
147
|
+
const column = columns.find(c => c.$$id === id);
|
|
148
|
+
if (column) {
|
|
149
|
+
const columnProp = getColumnProp(column);
|
|
150
|
+
if (columnProp) {
|
|
151
|
+
const alteration = new WidthColumnsAlteration({ columnProp, canAutoResize: true }, false);
|
|
152
|
+
this._columnsAlterationsManager.add([alteration]);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
55
159
|
constructor(_preferences, _columnsManager, _columnsAlterationsManager) {
|
|
56
160
|
this._preferences = _preferences;
|
|
57
161
|
this._columnsManager = _columnsManager;
|
|
@@ -195,110 +299,6 @@ export class DatatableComponent {
|
|
|
195
299
|
// TODO: Implement viewChange for CollectionViewer.
|
|
196
300
|
this.viewChange = this.page.pipe(map(p => ({ start: 0, end: p.count })));
|
|
197
301
|
}
|
|
198
|
-
get filters() { return this._filtersSubject.value; }
|
|
199
|
-
get preferencesKey() { return this._preferencesKey.value; }
|
|
200
|
-
set preferencesKey(value) { this._preferencesKey.next(value || undefined); }
|
|
201
|
-
set columns(value) {
|
|
202
|
-
this._columnsManager.setInputColumns(Array.isArray(value) ? value : []);
|
|
203
|
-
}
|
|
204
|
-
get rows() { return this._rows.value; }
|
|
205
|
-
set rows(value) {
|
|
206
|
-
this._rows.next(value || []);
|
|
207
|
-
}
|
|
208
|
-
get selectionType() { return this._columnsManager.getSelectionType(); }
|
|
209
|
-
set selectionType(value) {
|
|
210
|
-
this._columnsManager.setSelectionType(notNullOrUndefined(value) ? value : undefined);
|
|
211
|
-
}
|
|
212
|
-
get sortType() { return this._sortType; }
|
|
213
|
-
set sortType(value) {
|
|
214
|
-
if (notNullOrUndefined(value) && (value === SortType.single || value == SortType.multi)) {
|
|
215
|
-
this._sortType = value;
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
this._sortType = SortType.single;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
get sorts() {
|
|
222
|
-
return this.ngxDatatable ? this.ngxDatatable.sorts : this._sorts;
|
|
223
|
-
}
|
|
224
|
-
set sorts(value) {
|
|
225
|
-
this._sorts = notNullOrUndefined(value) ? coerceArray(value) : [];
|
|
226
|
-
}
|
|
227
|
-
set dataSource(value) {
|
|
228
|
-
if (value instanceof DatatableDataSource) {
|
|
229
|
-
value.setDatatableAccessor(this);
|
|
230
|
-
}
|
|
231
|
-
this._dataSourceSubject.next(value || undefined);
|
|
232
|
-
}
|
|
233
|
-
set columnComponents(value) {
|
|
234
|
-
this._columnsManager.setTemplateColumns(translateTemplateColumns(value?.toArray() ?? []));
|
|
235
|
-
}
|
|
236
|
-
get rowActionItem() { return this._rowActionItem; }
|
|
237
|
-
set rowActionItem(value) {
|
|
238
|
-
this._rowActionItem = value;
|
|
239
|
-
this._columnsManager.setRowActionItem(notNullOrUndefined(value) ? value : undefined);
|
|
240
|
-
}
|
|
241
|
-
get menuBarComponent() { return this._menuBarComponent; }
|
|
242
|
-
set menuBarComponent(value) {
|
|
243
|
-
this._menuBarComponent = value;
|
|
244
|
-
if (this._menuBarSub) {
|
|
245
|
-
this._menuBarSub.unsubscribe();
|
|
246
|
-
}
|
|
247
|
-
if (value) {
|
|
248
|
-
this._setMenuBarFilters(value.filters());
|
|
249
|
-
this._menuBarSub = this._menuBarComponent?.filtersChanged
|
|
250
|
-
.subscribe(v => { this._setMenuBarFilters(value.filters()); });
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
get actionMenuCellTpl() { return this._actionMenuCellTpl; }
|
|
254
|
-
set actionMenuCellTpl(value) {
|
|
255
|
-
this._actionMenuCellTpl = value;
|
|
256
|
-
this._columnsManager.setActionMenuCellTpl(notNullOrUndefined(value) ? value : undefined);
|
|
257
|
-
}
|
|
258
|
-
get treeToggleTpl() { return this._treeToggleTpl; }
|
|
259
|
-
set treeToggleTpl(value) {
|
|
260
|
-
this._treeToggleTpl = value;
|
|
261
|
-
this._columnsManager.setTreeToggleTpl(notNullOrUndefined(value) ? value : undefined);
|
|
262
|
-
}
|
|
263
|
-
get headerTpl() { return this._headerTpl; }
|
|
264
|
-
set headerTpl(value) {
|
|
265
|
-
this._headerTpl = value;
|
|
266
|
-
this._columnsManager.setHeaderTpl(notNullOrUndefined(value) ? value : undefined);
|
|
267
|
-
}
|
|
268
|
-
get blankHeaderTpl() { return this._blankHeaderTpl; }
|
|
269
|
-
set blankHeaderTpl(value) {
|
|
270
|
-
this._blankHeaderTpl = value;
|
|
271
|
-
this._columnsManager.setBlankHeaderTpl(notNullOrUndefined(value) ? value : undefined);
|
|
272
|
-
}
|
|
273
|
-
get cellTypeSelectorTpl() { return this._cellTypeSelectorTpl; }
|
|
274
|
-
set cellTypeSelectorTpl(value) {
|
|
275
|
-
this._cellTypeSelectorTpl = value;
|
|
276
|
-
this._columnsManager.setCellTypeSelectorTpl(notNullOrUndefined(value) ? value : undefined);
|
|
277
|
-
}
|
|
278
|
-
// TODO: Remove this DOM-dependent code when a way to property listen for
|
|
279
|
-
// dblclick on the header reasize handles.
|
|
280
|
-
_dblClick(event) {
|
|
281
|
-
const isHandle = event.target.classList.contains('resize-handle');
|
|
282
|
-
if (isHandle) {
|
|
283
|
-
const isResizeable = event.target.parentElement?.classList.contains('resizeable');
|
|
284
|
-
if (isResizeable) {
|
|
285
|
-
event.stopPropagation();
|
|
286
|
-
const id = event.target.parentElement
|
|
287
|
-
?.querySelector('.datatable-column-header-separator')
|
|
288
|
-
?.getAttribute('data-column-id');
|
|
289
|
-
this._columnsManager.columns$.pipe(take(1)).subscribe(columns => {
|
|
290
|
-
const column = columns.find(c => c.$$id === id);
|
|
291
|
-
if (column) {
|
|
292
|
-
const columnProp = getColumnProp(column);
|
|
293
|
-
if (columnProp) {
|
|
294
|
-
const alteration = new WidthColumnsAlteration({ columnProp, canAutoResize: true }, false);
|
|
295
|
-
this._columnsAlterationsManager.add([alteration]);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
302
|
ngOnInit() {
|
|
303
303
|
if (this.rowDetail) {
|
|
304
304
|
this._rowDetailToggleSubscription = this.rowDetail._toggle.subscribe(event => {
|
|
@@ -416,8 +416,8 @@ export class DatatableComponent {
|
|
|
416
416
|
};
|
|
417
417
|
}
|
|
418
418
|
}
|
|
419
|
-
DatatableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
420
|
-
DatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
419
|
+
DatatableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: DatatableComponent, deps: [{ token: i1.DatatablePreferencesService }, { token: i2.ColumnsManagerService }, { token: i3.ColumnsAlterationsManagerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
420
|
+
DatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.6", type: DatatableComponent, selector: "seam-datatable", inputs: { preferencesKey: "preferencesKey", targetMarkerTemplate: "targetMarkerTemplate", columns: "columns", rows: "rows", columnMode: "columnMode", groupRowsBy: "groupRowsBy", groupedRows: "groupedRows", selected: "selected", externalPaging: "externalPaging", externalSorting: "externalSorting", externalFiltering: "externalFiltering", limit: "limit", count: "count", offset: "offset", loadingIndicator: "loadingIndicator", selectionType: "selectionType", reorderable: "reorderable", swapColumns: "swapColumns", sortType: "sortType", sorts: "sorts", cssClasses: "cssClasses", messages: "messages", rowIdentity: "rowIdentity", rowClass: "rowClass", selectCheck: "selectCheck", displayCheck: "displayCheck", groupExpansionDefault: "groupExpansionDefault", trackByProp: "trackByProp", selectAllRowsOnPage: "selectAllRowsOnPage", treeFromRelation: "treeFromRelation", treeToRelation: "treeToRelation", summaryRow: "summaryRow", summaryHeight: "summaryHeight", summaryPosition: "summaryPosition", virtualization: "virtualization", headerHeight: "headerHeight", rowHeight: "rowHeight", footerHeight: "footerHeight", scrollbarV: "scrollbarV", scrollbarH: "scrollbarH", dataSource: "dataSource" }, outputs: { scroll: "scroll", activate: "activate", select: "select", sort: "sort", page: "page", reorder: "reorder", resize: "resize", tableContextmenu: "tableContextmenu", treeAction: "treeAction", actionRefreshRequest: "actionRefreshRequest", hiddenColumnsChange: "hiddenColumnsChange" }, host: { listeners: { "dblclick": "_dblClick($event)" } }, providers: [
|
|
421
421
|
_THESEAM_DATATABLE,
|
|
422
422
|
DatatableColumnChangesService,
|
|
423
423
|
_THESEAM_DATATABLE_ACCESSOR,
|
|
@@ -492,7 +492,7 @@ __decorate([
|
|
|
492
492
|
__decorate([
|
|
493
493
|
InputBoolean()
|
|
494
494
|
], DatatableComponent.prototype, "scrollbarH", void 0);
|
|
495
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
495
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: DatatableComponent, decorators: [{
|
|
496
496
|
type: Component,
|
|
497
497
|
args: [{ selector: 'seam-datatable', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
498
498
|
trigger('slideDown', [
|
|
@@ -662,4 +662,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImpor
|
|
|
662
662
|
type: HostListener,
|
|
663
663
|
args: ['dblclick', ['$event']]
|
|
664
664
|
}] } });
|
|
665
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFBZ0MsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUE7QUFDaEcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFDTCxTQUFTLEVBSVQsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWpILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVGLE9BQU8sRUFDTCxVQUFVLEVBS1Ysa0JBQWtCLElBQUkscUJBQXFCLEVBQzND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dUJBQUMsK0JBQStCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVFLLFNBQVM7c0JBQTVFLFlBQVk7dUJBQUMsa0NBQWtDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNELE1BQU07c0JBQXRFLFlBQVk7dUJBQUMsK0JBQStCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUczRCxnQkFBZ0I7c0JBRG5CLFlBQVk7dUJBQUMseUJBQXlCO2dCQWlCTCxZQUFZO3NCQUE3QyxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDd0IsbUJBQW1CO3NCQUExRSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDZCxZQUFZO3NCQUFuRCxTQUFTO3VCQUFDLDJCQUEyQjtnQkFHbEMsaUJBQWlCO3NCQURwQixTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTNUMsYUFBYTtzQkFEaEIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVN4QyxTQUFTO3NCQURaLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTcEMsY0FBYztzQkFEakIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBU3pDLG1CQUFtQjtzQkFEdEIsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBc0JsRCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUUsUUFBUSxDQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJ1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VBcnJheSwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXG5pbXBvcnQgeyBDb2xsZWN0aW9uVmlld2VyLCBEYXRhU291cmNlLCBpc0RhdGFTb3VyY2UsIExpc3RSYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucydcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBpc0Rldk1vZGUsXG4gIEtleVZhbHVlRGlmZmVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNvbmNhdE1hcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IGZhQ2hldnJvbkRvd24sIGZhQ2hldnJvblJpZ2h0LCBmYVNwaW5uZXIgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5pbXBvcnQge1xuICBDb2x1bW5Nb2RlLFxuICBDb250ZXh0bWVudVR5cGUsXG4gIERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlLFxuICBEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmUsXG4gIERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZSxcbiAgRGF0YXRhYmxlQ29tcG9uZW50IGFzIE5neERhdGF0YWJsZUNvbXBvbmVudCxcbiAgRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlLFxuICBTb3J0VHlwZSxcbiAgVHJlZVN0YXR1c1xufSBmcm9tICdAbWFya2xiL25neC1kYXRhdGFibGUnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGlvblR5cGUgfSBmcm9tICdAbWFya2xiL25neC1kYXRhdGFibGUnXG5cbmltcG9ydCB7IElucHV0Qm9vbGVhbiwgSW5wdXROdW1iZXIgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vY29yZSdcbmltcG9ydCB7IGNvbXBvc2VEYXRhRmlsdGVycywgY29tcG9zZURhdGFGaWx0ZXJTdGF0ZXMsIERhdGFGaWx0ZXIsIERhdGFGaWx0ZXJTdGF0ZSB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9kYXRhLWZpbHRlcnMnXG5pbXBvcnQgeyBJRWxlbWVudFJlc2l6ZWRFdmVudCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9zaGFyZWQnXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQsIHdhaXRPbkNvbmRpdGlvbkFzeW5jIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJ1xuXG5pbXBvcnQgeyBEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWFjdGlvbi1tZW51L2RhdGF0YWJsZS1hY3Rpb24tbWVudS5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtY29sdW1uL2RhdGF0YWJsZS1jb2x1bW4uY29tcG9uZW50J1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGF0YWJsZS1mb290ZXIvZGF0YXRhYmxlLWZvb3Rlci5kaXJlY3RpdmUnXG5pbXBvcnQgeyBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLW1lbnUtYmFyL2RhdGF0YWJsZS1tZW51LWJhci5jb21wb25lbnQnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0YXRhYmxlLXJvdy1kZXRhaWwvZGF0YXRhYmxlLXJvdy1kZXRhaWwuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0YXRhYmxlLXJvdy1hY3Rpb24taXRlbS5kaXJlY3RpdmUnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQWNjZXNzb3IgfSBmcm9tICcuLi9tb2RlbHMvZGF0YXRhYmxlLWFjY2Vzc29yJ1xuaW1wb3J0IHsgRGF0YXRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uL21vZGVscy9kYXRhdGFibGUtZGF0YS1zb3VyY2UnXG5pbXBvcnQgeyBUaGVTZWFtUGFnZUluZm8gfSBmcm9tICcuLi9tb2RlbHMvcGFnZS1pbmZvJ1xuaW1wb3J0IHsgU29ydEV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL3NvcnQtZXZlbnQnXG5pbXBvcnQgeyBTb3J0SXRlbSB9IGZyb20gJy4uL21vZGVscy9zb3J0LWl0ZW0nXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWNvbHVtbidcbmltcG9ydCB7IENvbHVtbnNNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbHVtbnMtbWFuYWdlci5zZXJ2aWNlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kYXRhdGFibGUtY29sdW1uLWNoYW5nZXMuc2VydmljZSdcbmltcG9ydCB7IERhdGF0YWJsZVByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RhdGF0YWJsZS1wcmVmZXJlbmNlcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IgfSBmcm9tICcuLi90b2tlbnMvZGF0YXRhYmxlLWFjY2Vzc29yJ1xuaW1wb3J0IHsgcmVtb3ZlVW51c2VkRGlmZnMgfSBmcm9tICcuLi91dGlscy9yZW1vdmUtdW51c2VkLWRpZmZzJ1xuaW1wb3J0IHsgdHJhbnNsYXRlVGVtcGxhdGVDb2x1bW5zIH0gZnJvbSAnLi4vdXRpbHMvdHJhbnNsYXRlLXRlbXBsYXRlcydcbmltcG9ydCB7IENvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29sdW1ucy1hbHRlcmF0aW9ucy1tYW5hZ2VyLnNlcnZpY2UnXG5pbXBvcnQgeyBDb2x1bW5zQWx0ZXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb24nXG5pbXBvcnQgeyBtYXBDb2x1bW5zQWx0ZXJhdGlvbnNTdGF0ZXMgfSBmcm9tICcuLi91dGlscy9tYXAtY29sdW1ucy1hbHRlcmF0aW9ucy1zdGF0ZXMnXG5pbXBvcnQgeyBXaWR0aENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvd2lkdGguY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgZ2V0Q29sdW1uUHJvcCB9IGZyb20gJy4uL3V0aWxzL2dldC1jb2x1bW4tcHJvcCdcbmltcG9ydCB7IE9yZGVyQ29sdW1uc0FsdGVyYXRpb24sIE9yZGVyQ29sdW1uc0FsdGVyYXRpb25TdGF0ZSB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb25zL29yZGVyLmNvbHVtbnMtYWx0ZXJhdGlvbidcbmltcG9ydCB7IFNvcnRDb2x1bW5zQWx0ZXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb25zL3NvcnQuY29sdW1ucy1hbHRlcmF0aW9uJ1xuXG4vKipcbiAqIE5PVEU6IFRoaXMgaXMgc3RpbGwgYmVpbmcgd29ya2VkIG9uLiBJIGFtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoaXMgbW9kZWxcbiAqIGJlY2F1c2UgYG5neC1kYXRhdGFibGVgIGp1c3QgdXNlcyBhbiB1bnR5cGVkIG9iamVjdCBhbmQgc2V0cyBwcm9wZXJ0aWVzIGluXG4gKiBtdWx0aXBsZSBwbGFjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNlbGxDb250ZXh0IHtcbiAgYWxsUm93c1NlbGVjdGVkOiBmYWxzZVxuXG4gIHNlbGVjdEZuOiAoKSA9PiBhbnlcbiAgc29ydERpcj86ICdhc2MnIHwgJ2Rlc2MnXG4gIHNvcnRGbjogKCkgPT4gYW55XG5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG5cbiAgb25DaGVja2JveENoYW5nZUZuPzogYW55XG4gIGFjdGl2YXRlRm4/OiBhbnlcbiAgcm93PzogYW55XG4gIGdyb3VwPzogYW55XG4gIHZhbHVlPzogYW55XG4gIGNvbHVtbj86IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5cbiAgcm93SGVpZ2h0PzogbnVtYmVyXG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuXG4gIHJvd0luZGV4PzogbnVtYmVyXG4gIHRyZWVTdGF0dXM/OiBUcmVlU3RhdHVzXG4gIG9uVHJlZUFjdGlvbj86IGFueVxufVxuXG4vKipcbiAqIEludGVuZGVkIGZvciBpbnRlcm5hbCBjbGFzc2VzIGRlY2xhcmVkIGJ5IHRoZSBgVGhlU2VhbURhdGF0YWJsZU1vZHVsZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBUSEVTRUFNX0RBVEFUQUJMRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEYXRhRmlsdGVyPignTGliRGF0YXRhYmxlJylcblxuZXhwb3J0IGNvbnN0IF9USEVTRUFNX0RBVEFUQUJMRTogYW55ID0ge1xuICBwcm92aWRlOiBUSEVTRUFNX0RBVEFUQUJMRSxcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhdGFibGVDb21wb25lbnQpXG59XG5cbmV4cG9ydCBjb25zdCBfVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0YXRhYmxlQ29tcG9uZW50KVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLWRhdGF0YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzbGlkZURvd24nLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjAlKScsIG9wYWNpdHk6ICcwJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjUwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLCBvcGFjaXR5OiAnMScgfSkpLFxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjUwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTIwJSknLCBvcGFjaXR5OiAnMCcgfSkpLFxuICAgICAgXSlcbiAgICBdKVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBfVEhFU0VBTV9EQVRBVEFCTEUsXG4gICAgRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UsXG4gICAgX1RIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SLFxuICAgIENvbHVtbnNNYW5hZ2VyU2VydmljZSxcbiAgICBDb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyU2VydmljZSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhdGFibGVDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgVGhlU2VhbURhdGF0YWJsZUFjY2Vzc29yLCBDb2xsZWN0aW9uVmlld2VyIHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsUGFnaW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsU29ydGluZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHRlcm5hbEZpbHRlcmluZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9sb2FkaW5nSW5kaWNhdG9yOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Jlb3JkZXJhYmxlOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N3YXBDb2x1bW5zOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2dyb3VwRXhwYW5zaW9uRGVmYXVsdDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zZWxlY3RBbGxSb3dzT25QYWdlOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N1bW1hcnlSb3c6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdmlydHVhbGl6YXRpb246IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2Nyb2xsYmFyVjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zY3JvbGxiYXJIOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2xpbWl0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY291bnQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vZmZzZXQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oZWFkZXJIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yb3dIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9mb290ZXJIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zdW1tYXJ5SGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY29sdW1uczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc29ydHM6IFNvcnRJdGVtW10gfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgcmVhZG9ubHkgX2ZhQ2hldnJvbkRvd24gPSBmYUNoZXZyb25Eb3duXG4gIHJlYWRvbmx5IF9mYUNoZXZyb25SaWdodCA9IGZhQ2hldnJvblJpZ2h0XG4gIHJlYWRvbmx5IF9mYVNwaW5uZXIgPSBmYVNwaW5uZXJcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKVxuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXJzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YUZpbHRlcltdPihbXSlcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YVNvdXJjZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFTb3VyY2U8YW55PiB8IGFueVtdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgcHJpdmF0ZSBfcmVzaXppbmc6IHsgW3Byb3A6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlclN0YXRlczogT2JzZXJ2YWJsZTxEYXRhRmlsdGVyU3RhdGVbXT5cblxuICBnZXQgZmlsdGVycygpOiBEYXRhRmlsdGVyW10geyByZXR1cm4gdGhpcy5fZmlsdGVyc1N1YmplY3QudmFsdWUgfVxuXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJzJDogT2JzZXJ2YWJsZTxEYXRhRmlsdGVyW10+XG5cbiAgQElucHV0KClcbiAgZ2V0IHByZWZlcmVuY2VzS2V5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgeyByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXNLZXkudmFsdWUgfVxuICBzZXQgcHJlZmVyZW5jZXNLZXkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpIHsgdGhpcy5fcHJlZmVyZW5jZXNLZXkubmV4dCh2YWx1ZSB8fCB1bmRlZmluZWQpIH1cbiAgcHJpdmF0ZSBfcHJlZmVyZW5jZXNLZXkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw+KHVuZGVmaW5lZClcblxuICBASW5wdXQoKSB0YXJnZXRNYXJrZXJUZW1wbGF0ZTogYW55XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbHVtbnModmFsdWU6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldElucHV0Q29sdW1ucyhBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10pXG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcm93cygpOiBhbnlbXSB7IHJldHVybiB0aGlzLl9yb3dzLnZhbHVlIH1cbiAgc2V0IHJvd3ModmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5fcm93cy5uZXh0KHZhbHVlIHx8IFtdKVxuICB9XG4gIHByaXZhdGUgX3Jvd3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSlcblxuICBwdWJsaWMgcm93cyQ6IE9ic2VydmFibGU8YW55W10+XG5cbiAgQElucHV0KCkgY29sdW1uTW9kZTogQ29sdW1uTW9kZSB8IHVuZGVmaW5lZCB8IG51bGwgPSBDb2x1bW5Nb2RlLmZvcmNlXG5cbiAgQElucHV0KCkgZ3JvdXBSb3dzQnk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgZ3JvdXBlZFJvd3M6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIHNlbGVjdGVkOiBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSBbXVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbFBhZ2luZzogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbFNvcnRpbmc6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZXh0ZXJuYWxGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKDApIGNvdW50OiBudW1iZXIgPSAwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigwKSBvZmZzZXQ6IG51bWJlciA9IDBcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbG9hZGluZ0luZGljYXRvcjogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGlvblR5cGUoKTogU2VsZWN0aW9uVHlwZSB8IHVuZGVmaW5lZCB8IG51bGwgeyByZXR1cm4gdGhpcy5fY29sdW1uc01hbmFnZXIuZ2V0U2VsZWN0aW9uVHlwZSgpIH1cbiAgc2V0IHNlbGVjdGlvblR5cGUodmFsdWU6IFNlbGVjdGlvblR5cGUgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0U2VsZWN0aW9uVHlwZShub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgcmVvcmRlcmFibGU6IGJvb2xlYW4gPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzd2FwQ29sdW1uczogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNvcnRUeXBlKCk6IFNvcnRUeXBlIHsgcmV0dXJuIHRoaXMuX3NvcnRUeXBlIH1cbiAgc2V0IHNvcnRUeXBlKHZhbHVlOiBTb3J0VHlwZSkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpICYmICh2YWx1ZSA9PT0gU29ydFR5cGUuc2luZ2xlIHx8IHZhbHVlID09IFNvcnRUeXBlLm11bHRpKSkge1xuICAgICAgdGhpcy5fc29ydFR5cGUgPSB2YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zb3J0VHlwZSA9IFNvcnRUeXBlLnNpbmdsZVxuICAgIH1cbiAgfVxuICBfc29ydFR5cGU6IFNvcnRUeXBlID0gU29ydFR5cGUuc2luZ2xlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNvcnRzKCk6IFNvcnRJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLm5neERhdGF0YWJsZSA/IHRoaXMubmd4RGF0YXRhYmxlLnNvcnRzIDogdGhpcy5fc29ydHNcbiAgfVxuICBzZXQgc29ydHModmFsdWU6IFNvcnRJdGVtW10pIHtcbiAgICB0aGlzLl9zb3J0cyA9IG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyBjb2VyY2VBcnJheSh2YWx1ZSkgOiBbXVxuICB9XG4gIF9zb3J0czogU29ydEl0ZW1bXSA9IFtdXG5cbiAgQElucHV0KCkgY3NzQ2xhc3NlczogYW55IHwgdW5kZWZpbmVkIHwgbnVsbCA9IHtcbiAgICBzb3J0QXNjZW5kaW5nOiAnZGF0YXRhYmxlLWljb24tdXAnLFxuICAgIHNvcnREZXNjZW5kaW5nOiAnZGF0YXRhYmxlLWljb24tZG93bicsXG4gICAgcGFnZXJMZWZ0QXJyb3c6ICdkYXRhdGFibGUtaWNvbi1sZWZ0JyxcbiAgICBwYWdlclJpZ2h0QXJyb3c6ICdkYXRhdGFibGUtaWNvbi1yaWdodCcsXG4gICAgcGFnZXJQcmV2aW91czogJ2RhdGF0YWJsZS1pY29uLXByZXYnLFxuICAgIHBhZ2VyTmV4dDogJ2RhdGF0YWJsZS1pY29uLXNraXAnXG4gIH1cblxuICBASW5wdXQoKSBtZXNzYWdlczogYW55IHwgdW5kZWZpbmVkIHwgbnVsbCA9IHtcbiAgICAvLyBNZXNzYWdlIHRvIHNob3cgd2hlbiBhcnJheSBpcyBwcmVzZW50ZWRcbiAgICAvLyBidXQgY29udGFpbnMgbm8gdmFsdWVzXG4gICAgZW1wdHlNZXNzYWdlOiAnTm8gcmVjb3JkcyBmb3VuZCcsXG5cbiAgICAvLyBGb290ZXIgdG90YWwgbWVzc2FnZVxuICAgIHRvdGFsTWVzc2FnZTogJ3RvdGFsJyxcblxuICAgIC8vIEZvb3RlciBzZWxlY3RlZCBtZXNzYWdlXG4gICAgc2VsZWN0ZWRNZXNzYWdlOiAnc2VsZWN0ZWQnXG4gIH1cblxuICBASW5wdXQoKSByb3dJZGVudGl0eTogKCh4OiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgfCBudWxsID0gKCh4OiBhbnkpID0+IHgpXG5cbiAgQElucHV0KCkgcm93Q2xhc3M6IGFueSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBzZWxlY3RDaGVjazogYW55IHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBkaXNwbGF5Q2hlY2s6ICgocm93OiBhbnksIGNvbHVtbj86IGFueSwgdmFsdWU/OiBhbnkpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBncm91cEV4cGFuc2lvbkRlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyYWNrQnlQcm9wOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNlbGVjdEFsbFJvd3NPblBhZ2U6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyZWVGcm9tUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgdHJlZVRvUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHN1bW1hcnlSb3c6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBzdW1tYXJ5SGVpZ2h0OiBudW1iZXIgPSAzMFxuICBASW5wdXQoKSBzdW1tYXJ5UG9zaXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgPSAndG9wJ1xuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB2aXJ0dWFsaXphdGlvbjogYm9vbGVhbiA9IHRydWVcblxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBoZWFkZXJIZWlnaHQ6IG51bWJlciA9IDUwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHJvd0hlaWdodDogbnVtYmVyID0gNTBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgZm9vdGVySGVpZ2h0OiBudW1iZXIgPSA0MFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzY3JvbGxiYXJWOiBib29sZWFuID0gdHJ1ZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2Nyb2xsYmFySDogYm9vbGVhbiA9IHRydWVcblxuICBASW5wdXQoKVxuICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRGF0YVNvdXJjZTxhbnk+IHwgYW55W10gfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YXRhYmxlRGF0YVNvdXJjZSkge1xuICAgICAgdmFsdWUuc2V0RGF0YXRhYmxlQWNjZXNzb3IodGhpcylcbiAgICB9XG4gICAgdGhpcy5fZGF0YVNvdXJjZVN1YmplY3QubmV4dCh2YWx1ZSB8fCB1bmRlZmluZWQpXG4gIH1cblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGl2YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBzb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0RXZlbnQ+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoZVNlYW1QYWdlSW5mbz4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVvcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSByZXNpemUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdGFibGVDb250ZXh0bWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogTW91c2VFdmVudCwgdHlwZTogQ29udGV4dG1lbnVUeXBlLCBjb250ZW50OiBhbnkgfT4oZmFsc2UpXG4gIEBPdXRwdXQoKSByZWFkb25seSB0cmVlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aW9uUmVmcmVzaFJlcXVlc3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGhpZGRlbkNvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpXG5cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRhdGFibGVDb2x1bW5Db21wb25lbnQpXG4gIHNldCBjb2x1bW5Db21wb25lbnRzKHZhbHVlOiBRdWVyeUxpc3Q8RGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50PiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFRlbXBsYXRlQ29sdW1ucyh0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnModmFsdWU/LnRvQXJyYXkoKSA/PyBbXSkpXG4gIH1cblxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGFjdGlvbk1lbnU/OiBEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50XG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IHJvd0FjdGlvbkl0ZW0oKTogRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9yb3dBY3Rpb25JdGVtIH1cbiAgc2V0IHJvd0FjdGlvbkl0ZW0odmFsdWU6IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yb3dBY3Rpb25JdGVtID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRSb3dBY3Rpb25JdGVtKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9yb3dBY3Rpb25JdGVtOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkXG5cbiAgQENvbnRlbnRDaGlsZChUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSByb3dEZXRhaWw/OiBUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlXG4gIEBDb250ZW50Q2hpbGQoVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZm9vdGVyPzogVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudClcbiAgZ2V0IG1lbnVCYXJDb21wb25lbnQoKTogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9tZW51QmFyQ29tcG9uZW50IH1cbiAgc2V0IG1lbnVCYXJDb21wb25lbnQodmFsdWU6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9tZW51QmFyQ29tcG9uZW50ID0gdmFsdWVcblxuICAgIGlmICh0aGlzLl9tZW51QmFyU3ViKSB7IHRoaXMuX21lbnVCYXJTdWIudW5zdWJzY3JpYmUoKSB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSlcblxuICAgICAgdGhpcy5fbWVudUJhclN1YiA9IHRoaXMuX21lbnVCYXJDb21wb25lbnQ/LmZpbHRlcnNDaGFuZ2VkXG4gICAgICAgIC5zdWJzY3JpYmUodiA9PiB7IHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSkgfSlcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbWVudUJhckNvbXBvbmVudDogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9tZW51QmFyU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKE5neERhdGF0YWJsZUNvbXBvbmVudCkgbmd4RGF0YXRhYmxlPzogTmd4RGF0YXRhYmxlQ29tcG9uZW50XG4gIEBWaWV3Q2hpbGQoTmd4RGF0YXRhYmxlQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbmd4RGF0YXRhYmxlRWxlbWVudD86IEVsZW1lbnRSZWZcbiAgQFZpZXdDaGlsZChEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUpIG5neFJvd0RldGFpbD86IERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZVxuXG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbk1lbnVDZWxsVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGFjdGlvbk1lbnVDZWxsVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fYWN0aW9uTWVudUNlbGxUcGwgfVxuICBzZXQgYWN0aW9uTWVudUNlbGxUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0QWN0aW9uTWVudUNlbGxUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2FjdGlvbk1lbnVDZWxsVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgndHJlZVRvZ2dsZVRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCB0cmVlVG9nZ2xlVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl90cmVlVG9nZ2xlVHBsIH1cbiAgc2V0IHRyZWVUb2dnbGVUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3RyZWVUb2dnbGVUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFRyZWVUb2dnbGVUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX3RyZWVUb2dnbGVUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2hlYWRlclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBoZWFkZXJUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9oZWFkZXJUcGwgfVxuICBzZXQgaGVhZGVyVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faGVhZGVyVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRIZWFkZXJUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2hlYWRlclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2JsYW5rSGVhZGVyVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGJsYW5rSGVhZGVyVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fYmxhbmtIZWFkZXJUcGwgfVxuICBzZXQgYmxhbmtIZWFkZXJUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9ibGFua0hlYWRlclRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0QmxhbmtIZWFkZXJUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2JsYW5rSGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgnY2VsbFR5cGVTZWxlY3RvclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBjZWxsVHlwZVNlbGVjdG9yVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fY2VsbFR5cGVTZWxlY3RvclRwbCB9XG4gIHNldCBjZWxsVHlwZVNlbGVjdG9yVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY2VsbFR5cGVTZWxlY3RvclRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0Q2VsbFR5cGVTZWxlY3RvclRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfY2VsbFR5cGVTZWxlY3RvclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIHB1YmxpYyBjb2x1bW5Db21wb25lbnRzJD86IE9ic2VydmFibGU8RGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50W10+XG4gIHByaXZhdGUgX2NvbERpZmZlcnNJbnA6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfSA9IHt9XG4gIHByaXZhdGUgX2NvbERpZmZlcnNUcGw6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfSA9IHt9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbHVtbnMkOiBPYnNlcnZhYmxlPFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT5cbiAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlDb2x1bW5zJDogT2JzZXJ2YWJsZTxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+XG5cbiAgdmlld0NoYW5nZTogT2JzZXJ2YWJsZTxMaXN0UmFuZ2U+XG5cbiAgcHJpdmF0ZSBfcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZXG5cbiAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgRE9NLWRlcGVuZGVudCBjb2RlIHdoZW4gYSB3YXkgdG8gcHJvcGVydHkgbGlzdGVuIGZvclxuICAvLyBkYmxjbGljayBvbiB0aGUgaGVhZGVyIHJlYXNpemUgaGFuZGxlcy5cbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbICckZXZlbnQnIF0pXG4gIF9kYmxDbGljayhldmVudDogYW55KSB7XG4gICAgY29uc3QgaXNIYW5kbGUgPSAoPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNpemUtaGFuZGxlJylcbiAgICBpZiAoaXNIYW5kbGUpIHtcbiAgICAgIGNvbnN0IGlzUmVzaXplYWJsZSA9ICg8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoJ3Jlc2l6ZWFibGUnKVxuICAgICAgaWYgKGlzUmVzaXplYWJsZSkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBjb25zdCBpZCA9ICg8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5wYXJlbnRFbGVtZW50XG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yKCcuZGF0YXRhYmxlLWNvbHVtbi1oZWFkZXItc2VwYXJhdG9yJylcbiAgICAgICAgICA/LmdldEF0dHJpYnV0ZSgnZGF0YS1jb2x1bW4taWQnKVxuICAgICAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5jb2x1bW5zJC5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICkuc3Vic2NyaWJlKGNvbHVtbnMgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChjID0+IGMuJCRpZCA9PT0gaWQpXG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uUHJvcCA9IGdldENvbHVtblByb3AoY29sdW1uKVxuICAgICAgICAgICAgaWYgKGNvbHVtblByb3ApICB7XG4gICAgICAgICAgICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgV2lkdGhDb2x1bW5zQWx0ZXJhdGlvbih7IGNvbHVtblByb3AsIGNhbkF1dG9SZXNpemU6IHRydWUgfSwgZmFsc2UpXG4gICAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKFsgYWx0ZXJhdGlvbiBdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmVmZXJlbmNlczogRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnNNYW5hZ2VyOiBDb2x1bW5zTWFuYWdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlcjogQ29sdW1uc0FsdGVyYXRpb25zTWFuYWdlclNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuX3ByZWZlcmVuY2VzS2V5LnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKGtleSA9PiB7XG4gICAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKGtleSkgfHwga2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnJvbSh3YWl0T25Db25kaXRpb25Bc3luYygoKSA9PiB0aGlzLl9wcmVmZXJlbmNlcy5sb2FkZWQpKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMuc2V0QWx0ZXJhdGlvbnMoa2V5LCB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmdldCgpKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKSlcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgY29uc3QgYXBwbHlQcmVmcyA9IChjb2xzOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pID0+IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuY2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFwcGx5KGNvbHMsIHRoaXMpXG4gICAgICAgIHJldHVybiBjb2xzXG4gICAgICB9KSxcbiAgICApXG5cbiAgICB0aGlzLl9wcmVmZXJlbmNlc0tleS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcChwcmVmc0tleSA9PiB7XG4gICAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKHByZWZzS2V5KSkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzLnByZWZlcmVuY2VzKHByZWZzS2V5KS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcChhc3luYyAocHJlZmVyZW5jZXMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHdhaXRPbkNvbmRpdGlvbkFzeW5jKCgpID0+IHRoaXMuX3ByZWZlcmVuY2VzLmxvYWRlZClcbiAgICAgICAgICAgIHJldHVybiBwcmVmZXJlbmNlc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgbWFwKHByZWZlcmVuY2VzID0+IHtcbiAgICAgICAgICAgIGxldCBhbHRlcmF0aW9uczogQ29sdW1uc0FsdGVyYXRpb25bXSA9IFtdXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhbHRlcmF0aW9ucyA9IG1hcENvbHVtbnNBbHRlcmF0aW9uc1N0YXRlcyhwcmVmZXJlbmNlcy5hbHRlcmF0aW9ucylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gbWFwIGNvbHVtbnMgYWx0ZXJhdGlvbnMgc3RhdGVzJylcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChhbHRlcmF0aW9ucylcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuY29sdW1ucyQgPSB0aGlzLl9jb2x1bW5zTWFuYWdlci5jb2x1bW5zJFxuXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyQgPSB0aGlzLmNvbHVtbnMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY29scyA9PiBhcHBseVByZWZzKGNvbHMpKSxcbiAgICAgIG1hcChjb2xzID0+IGNvbHMuZmlsdGVyKGMgPT4gIWMuaGlkZGVuKSksXG4gICAgICB0YXAodiA9PiByZW1vdmVVbnVzZWREaWZmcyh2LCB0aGlzLl9jb2xEaWZmZXJzSW5wLCB0aGlzLl9jb2xEaWZmZXJzVHBsKSksXG4gICAgKVxuXG4gICAgdGhpcy5maWx0ZXJzJCA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG5cbiAgICB0aGlzLmZpbHRlclN0YXRlcyA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZmlsdGVycyA9PiBjb21wb3NlRGF0YUZpbHRlclN0YXRlcyhmaWx0ZXJzKSlcbiAgICApXG5cbiAgICB0aGlzLnJvd3MkID0gdGhpcy5fZGF0YVNvdXJjZVN1YmplY3QucGlwZShcbiAgICAgIHN3aXRjaE1hcChkYXRhU291cmNlID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2RhdGFTb3VyY2UnLCBkYXRhU291cmNlKVxuICAgICAgICBsZXQgZGF0YVN0cmVhbTogT2JzZXJ2YWJsZTxhbnlbXT5cblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35kYXRhc291cmNlJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVNvdXJjZS5jb25uZWN0KHRoaXMpIGFzIGFueVxuICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+b2JzZXJ2YWJsZScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTb3VyY2UgYXMgYW55XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+YXJyYXknKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBvZihkYXRhU291cmNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+cm93cyBmYWxsYmFjaycpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IHRoaXMuX3Jvd3MuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC8vIC5waXBlKHRhcCh2ID0+IGNvbnNvbGUubG9nKCdyb3dzficsIHYpKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5leHRlcm5hbEZpbHRlcmluZykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdub3QgdXNpbmcgZXh0ZXJuYWxGaWx0ZXJpbmcnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU3RyZWFtLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocm93cyA9PiB0aGlzLl9maWx0ZXJzU3ViamVjdC5waXBlKFxuICAgICAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAgICAgY29uY2F0TWFwKGZpbHRlcnMgPT4gb2Yocm93cykucGlwZShjb21wb3NlRGF0YUZpbHRlcnMoZmlsdGVycykpKSxcbiAgICAgICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ2NvbXBvc2VkIGZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgICApKVxuICAgICAgICAgIClcblxuICAgICAgICAgIC8vIGRhdGFTdHJlYW0gPSB0aGlzLl9maWx0ZXJzU3ViamVjdC5waXBlKFxuICAgICAgICAgIC8vICAgdGFwKHYgPT4gY29uc29sZS5sb2coJ2ZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgLy8gICBjb25jYXRNYXAoZmlsdGVycyA9PiBkYXRhU3RyZWFtLnBpcGUoY29tcG9zZURhdGFGaWx0ZXJzKGZpbHRlcnMpKSksXG4gICAgICAgICAgLy8gICB0YXAodiA9PiBjb25zb2xlLmxvZygnY29tcG9zZWQgZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAvLyApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YVN0cmVhbS5waXBlKFxuICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdzdHJlYW0nLCB2KSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHZpZXdDaGFuZ2UgZm9yIENvbGxlY3Rpb25WaWV3ZXIuXG4gICAgdGhpcy52aWV3Q2hhbmdlID0gdGhpcy5wYWdlLnBpcGUobWFwKHAgPT4gKHsgc3RhcnQ6IDAsIGVuZDogcC5jb3VudCB9KSkpXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5yb3dEZXRhaWwpIHtcbiAgICAgIHRoaXMuX3Jvd0RldGFpbFRvZ2dsZVN1YnNjcmlwdGlvbiA9IHRoaXMucm93RGV0YWlsLl90b2dnbGUuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMubmd4Um93RGV0YWlsKSB7XG4gICAgICAgICAgdGhpcy5uZ3hSb3dEZXRhaWwudG9nZ2xlLmVtaXQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgfVxuXG4gIHByaXZhdGUgX3NldE1lbnVCYXJGaWx0ZXJzKGZpbHRlcnM6IERhdGFGaWx0ZXJbXSkge1xuICAgIHRoaXMuX2ZpbHRlcnNTdWJqZWN0Lm5leHQoZmlsdGVycyB8fCBbXSlcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5Db21wb25lbnQocHJvcE5hbWU6IHN0cmluZyk6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5jb2x1bW5Db21wb25lbnRzIHx8IHRoaXMuY29sdW1uQ29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgdHBsID0gdGhpcy5jb2x1bW5Db21wb25lbnRzLmZpbmQodCA9PiB0LnByb3AgPT09IHByb3BOYW1lKVxuICAgIGlmICh0cGwpIHtcbiAgICAgIHJldHVybiB0cGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgX2NvbHVtbkRhdGEoY29sOiBhbnkpOiB7IGNvbDogYW55LCBjb21wOiBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfCBudWxsIH0ge1xuICAgIGNvbnN0IGNvbXAgPSB0aGlzLmdldENvbHVtbkNvbXBvbmVudChjb2wucHJvcClcbiAgICByZXR1cm4geyBjb2wsIGNvbXAgfVxuICB9XG5cbiAgX2dldFJvd0V4cGFuZGVkKHJvdzogYW55KSB7XG4gICAgaWYgKHRoaXMubmd4RGF0YXRhYmxlICYmIHRoaXMubmd4RGF0YXRhYmxlLmJvZHlDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5neERhdGF0YWJsZS5ib2R5Q29tcG9uZW50LmdldFJvd0V4cGFuZGVkKHJvdylcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUZuQ29sdW1uKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtLnByb3BcbiAgfVxuXG4gIHB1YmxpYyBvbkRhdGF0YWJsZVJlc2l6ZShldmVudDogSUVsZW1lbnRSZXNpemVkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5uZ3hEYXRhdGFibGUgJiYgdGhpcy5uZ3hEYXRhdGFibGVFbGVtZW50ICYmIHRoaXMubmd4RGF0YXRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBpbnRlZ3JhdGluZyB0aGlzIGludG8gdGhlIG5neC1kYXRhdGFibGUgbGlicmFyeSB0byBhdm9pZFxuICAgICAgLy8gbXVsdGlwbGUgcmVzaXplIGNhbGxzIHdoZW4gdGhlIHRhYmxlIHJlc2l6ZXMgaXRzZWxmLlxuICAgICAgdGhpcy5uZ3hEYXRhdGFibGUucmVjYWxjdWxhdGUoKVxuICAgIH1cbiAgfVxuXG4gIF9vblJlc2l6ZShldmVudDogYW55KSB7XG4gICAgdGhpcy5yZXNpemUuZW1pdChldmVudClcblxuICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKGV2ZW50LmNvbHVtbikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGV2ZW50LmNvbHVtbilcbiAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgbGV0IGFkZEFsdGVyYXRpb24gPSBmYWxzZVxuXG4gICAgICBpZiAoIXRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdID0gdHJ1ZVxuICAgICAgICBhZGRBbHRlcmF0aW9uID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuaXNEb25lKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdID0gZmFsc2VcbiAgICAgICAgYWRkQWx0ZXJhdGlvbiA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGFkZEFsdGVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgYWx0ZXJhdGlvbiA9IG5ldyBXaWR0aENvbHVtbnNBbHRlcmF0aW9uKHtcbiAgICAgICAgICBjb2x1bW5Qcm9wLFxuICAgICAgICAgIHdpZHRoOiBldmVudC5jb2x1bW4ud2lkdGgsXG4gICAgICAgICAgY2FuQXV0b1Jlc2l6ZTogZmFsc2VcbiAgICAgICAgfSwgdHJ1ZSlcbiAgICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBfb25SZW9yZGVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnJlb3JkZXIuZW1pdChldmVudClcblxuICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGV2ZW50LmNvbHVtbilcbiAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgY29uc3QgY3VycmVudE9yZGVyQWx0ZXJhdGlvbiA9IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuZ2V0KCkuZmluZCh4ID0+IHgudHlwZSA9PT0gJ29yZGVyJylcbiAgICAgIGNvbnN0IHN0YXRlOiBPcmRlckNvbHVtbnNBbHRlcmF0aW9uU3RhdGUgPSB7XG4gICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICAuLi4oY3VycmVudE9yZGVyQWx0ZXJhdGlvbj8uc3RhdGUuY29sdW1ucyB8fCBbXSksXG4gICAgICAgICAgeyBjb2x1bW5Qcm9wLCBpbmRleDogZXZlbnQubmV3VmFsdWUgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IE9yZGVyQ29sdW1uc0FsdGVyYXRpb24oc3RhdGUsIHRydWUpXG4gICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICB9XG4gIH1cblxuICBfb25Tb3J0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNvcnQuZW1pdChldmVudClcblxuICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgU29ydENvbHVtbnNBbHRlcmF0aW9uKHsgc29ydHM6IGV2ZW50LnNvcnRzIH0sIHRydWUpXG4gICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gIH1cblxuICBfb25UcmVlQWN0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbmRleCA9IGV2ZW50LnJvd0luZGV4XG4gICAgY29uc3Qgcm93ID0gZXZlbnQucm93XG4gICAgaWYgKHJvdy50cmVlU3RhdHVzID09PSAnY29sbGFwc2VkJykge1xuICAgICAgcm93LnRyZWVTdGF0dXMgPSAnZXhwYW5kZWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdy50cmVlU3RhdHVzID0gJ2NvbGxhcHNlZCdcbiAgICB9XG4gICAgdGhpcy5yb3dzID0gWyAuLi50aGlzLnJvd3MgXVxuICB9XG5cbiAgcHVibGljIHRyaWdnZXJBY3Rpb25SZWZyZXNoUmVxdWVzdCgpIHtcbiAgICB0aGlzLmFjdGlvblJlZnJlc2hSZXF1ZXN0LmVtaXQodW5kZWZpbmVkKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBhZ2UgaW5mbyBmcm9tIHRoZSB3cmFwcGVkIE5neERhdGF0YWJsZSBpbnN0YW5jZSBvciBkZWZhdWx0cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFnZUluZm8oKTogVGhlU2VhbVBhZ2VJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiB0aGlzLm5neERhdGF0YWJsZT8ub2Zmc2V0ID8/IDAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5uZ3hEYXRhdGFibGU/LnBhZ2VTaXplID8/IDAsXG4gICAgICBsaW1pdDogdGhpcy5uZ3hEYXRhdGFibGU/LmxpbWl0LFxuICAgICAgY291bnQ6IHRoaXMubmd4RGF0YXRhYmxlPy5jb3VudCA/PyAwXG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRhdGFibGUtd3JhcHBlclwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJzZWFtLWRhdGF0YWJsZS1tZW51LWJhclwiPjwvbmctY29udGVudD5cbiAgPGRpdiBjbGFzcz1cImRhdGF0YWJsZS10YWJsZS13cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDxuZ3gtZGF0YXRhYmxlXG4gICAgICAgIFtjb2x1bW5Nb2RlXT1cIiRhbnkoY29sdW1uTW9kZSlcIlxuICAgICAgICBbc2Nyb2xsYmFyVl09XCJzY3JvbGxiYXJWXCJcbiAgICAgICAgW3Njcm9sbGJhckhdPVwic2Nyb2xsYmFySFwiXG4gICAgICAgIFt2aXJ0dWFsaXphdGlvbl09XCJ2aXJ0dWFsaXphdGlvblwiXG4gICAgICAgIFt0YXJnZXRNYXJrZXJUZW1wbGF0ZV09XCJ0YXJnZXRNYXJrZXJUZW1wbGF0ZVwiXG4gICAgICAgIFtncm91cFJvd3NCeV09XCIkYW55KGdyb3VwUm93c0J5KVwiXG4gICAgICAgIFtncm91cGVkUm93c109XCIkYW55KGdyb3VwZWRSb3dzKVwiXG4gICAgICAgIFtzZWxlY3RlZF09XCIkYW55KHNlbGVjdGVkKVwiXG4gICAgICAgIFtleHRlcm5hbFBhZ2luZ109XCJleHRlcm5hbFBhZ2luZ1wiXG4gICAgICAgIFtleHRlcm5hbFNvcnRpbmddPVwiZXh0ZXJuYWxTb3J0aW5nXCJcbiAgICAgICAgW2xpbWl0XT1cIiRhbnkobGltaXQpXCJcbiAgICAgICAgW2NvdW50XT1cIiRhbnkoY291bnQpXCJcbiAgICAgICAgW29mZnNldF09XCIkYW55KG9mZnNldClcIlxuICAgICAgICBbbG9hZGluZ0luZGljYXRvcl09XCJsb2FkaW5nSW5kaWNhdG9yXCJcbiAgICAgICAgW3NlbGVjdGlvblR5cGVdPVwiJGFueShzZWxlY3Rpb25UeXBlKVwiXG4gICAgICAgIFtyZW9yZGVyYWJsZV09XCJyZW9yZGVyYWJsZVwiXG4gICAgICAgIFtzd2FwQ29sdW1uc109XCJzd2FwQ29sdW1uc1wiXG4gICAgICAgIFtzb3J0VHlwZV09XCIkYW55KHNvcnRUeXBlKVwiXG4gICAgICAgIFtzb3J0c109XCIkYW55KF9zb3J0cylcIlxuICAgICAgICBbY3NzQ2xhc3Nlc109XCJjc3NDbGFzc2VzXCJcbiAgICAgICAgW21lc3NhZ2VzXT1cIm1lc3NhZ2VzXCJcbiAgICAgICAgW3Jvd0lkZW50aXR5XT1cIiRhbnkocm93SWRlbnRpdHkpXCJcbiAgICAgICAgW3Jvd0NsYXNzXT1cInJvd0NsYXNzXCJcbiAgICAgICAgW3NlbGVjdENoZWNrXT1cInNlbGVjdENoZWNrXCJcbiAgICAgICAgW2Rpc3BsYXlDaGVja109XCIkYW55KGRpc3BsYXlDaGVjaylcIlxuICAgICAgICBbZ3JvdXBFeHBhbnNpb25EZWZhdWx0XT1cImdyb3VwRXhwYW5zaW9uRGVmYXVsdFwiXG4gICAgICAgIFt0cmFja0J5UHJvcF09XCIkYW55KHRyYWNrQnlQcm9wKVwiXG4gICAgICAgIFtzZWxlY3RBbGxSb3dzT25QYWdlXT1cInNlbGVjdEFsbFJvd3NPblBhZ2VcIlxuICAgICAgICBbdHJlZUZyb21SZWxhdGlvbl09XCIkYW55KHRyZWVGcm9tUmVsYXRpb24pXCJcbiAgICAgICAgW3RyZWVUb1JlbGF0aW9uXT1cIiRhbnkodHJlZVRvUmVsYXRpb24pXCJcbiAgICAgICAgW3N1bW1hcnlSb3ddPVwic3VtbWFyeVJvd1wiXG4gICAgICAgIFtzdW1tYXJ5SGVpZ2h0XT1cIiRhbnkoc3VtbWFyeUhlaWdodClcIlxuICAgICAgICBbc3VtbWFyeVBvc2l0aW9uXT1cIiRhbnkoc3VtbWFyeVBvc2l0aW9uKVwiXG4gICAgICAgIFtyb3dzXT1cInJvd3MkIHwgYXN5bmNcIlxuICAgICAgICBbY29sdW1uc109XCIkYW55KGRpc3BsYXlDb2x1bW5zJCB8IGFzeW5jKVwiXG4gICAgICAgIFtoZWFkZXJIZWlnaHRdPVwiJGFueShoZWFkZXJIZWlnaHQpXCJcbiAgICAgICAgW3Jvd0hlaWdodF09XCIkYW55KHJvd0hlaWdodClcIlxuICAgICAgICBbZm9vdGVySGVpZ2h0XT1cIiRhbnkoZm9vdGVySGVpZ2h0KVwiXG4gICAgICAgIChzY3JvbGwpPVwic2Nyb2xsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChhY3RpdmF0ZSk9XCJhY3RpdmF0ZS5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgICAgICAoc29ydCk9XCJfb25Tb3J0KCRldmVudClcIlxuICAgICAgICAocGFnZSk9XCJwYWdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChyZW9yZGVyKT1cIl9vblJlb3JkZXIoJGV2ZW50KVwiXG4gICAgICAgIChyZXNpemUpPVwiX29uUmVzaXplKCRldmVudClcIlxuICAgICAgICAodGFibGVDb250ZXh0bWVudSk9XCJ0YWJsZUNvbnRleHRtZW51LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICh0cmVlQWN0aW9uKT1cInRyZWVBY3Rpb24uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlYW1FbGVtUmVzaXplZCk9XCJvbkRhdGF0YWJsZVJlc2l6ZSgkZXZlbnQpXCJcbiAgICAgICAgKHRyZWVBY3Rpb24pPVwiX29uVHJlZUFjdGlvbigkZXZlbnQpXCI+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtZ3JvdXAtaGVhZGVyIFtyb3dIZWlnaHRdPVwiNTBcIiAjbXlHcm91cEhlYWRlciAqbmdJZj1cImdyb3VwUm93c0J5XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1ncm91cD1cImdyb3VwXCIgbGV0LWV4cGFuZGVkPVwiZXhwYW5kZWRcIiBuZ3gtZGF0YXRhYmxlLWdyb3VwLWhlYWRlci10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCBiZy1saWdodCBwLTFcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJvdHRvbV09XCIhZXhwYW5kZWRcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGF0YXRhYmxlLWljb24tcmlnaHRdPVwiIWV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRhdGF0YWJsZS1pY29uLWRvd25dPVwiZXhwYW5kZWRcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkV4cGFuZC9Db2xsYXBzZSBHcm91cFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJuZ3hEYXRhdGFibGU/Lmdyb3VwSGVhZGVyPy50b2dnbGVFeHBhbmRHcm91cChncm91cClcIj5cbiAgICAgICAgICAgICAgPGI+QWdlOiB7eyBncm91cC5hZ2UgfX08L2I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtZ3JvdXAtaGVhZGVyPlxuXG4gICAgICAgIDxuZ3gtZGF0YXRhYmxlLXJvdy1kZXRhaWwgKm5nSWY9XCJyb3dEZXRhaWwgJiYgcm93RGV0YWlsLnRlbXBsYXRlXCJcbiAgICAgICAgICBbcm93SGVpZ2h0XT1cInJvd0RldGFpbC5yb3dIZWlnaHQgfHwgMFwiXG4gICAgICAgICAgW3RlbXBsYXRlXT1cIiRhbnkocm93RGV0YWlsLnRlbXBsYXRlKVwiXG4gICAgICAgICAgKHRvZ2dsZSk9XCJyb3dEZXRhaWwudG9nZ2xlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtcm93LWRldGFpbD5cblxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1mb290ZXIgKm5nSWY9XCJmb290ZXIgJiYgZm9vdGVyLnRlbXBsYXRlXCJcbiAgICAgICAgICBbdGVtcGxhdGVdPVwiJGFueShmb290ZXIudGVtcGxhdGUpXCI+XG4gICAgICAgIDwvbmd4LWRhdGF0YWJsZS1mb290ZXI+XG4gICAgICA8L25neC1kYXRhdGFibGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYmxhbmtIZWFkZXJUcGwgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGU+PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUcGwgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGVcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC1zb3J0Rm49XCJzb3J0Rm5cIj5cbiAgPHN0cm9uZyAqbmdJZj1cIiFjb2x1bW4uc29ydGFibGVcIiBjbGFzcz1cImRyYWdnYWJsZVwiPnt7Y29sdW1uLm5hbWV9fTwvc3Ryb25nPlxuICA8c3Ryb25nICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlXCIgY2xhc3M9XCJkYXRhdGFibGUtc29ydC10YXJnZXQgZHJhZ2dhYmxlXCIgKGNsaWNrKT1cInNvcnRGbigpXCI+e3tjb2x1bW4ubmFtZX19PC9zdHJvbmc+XG4gIDxkaXYgY2xhc3M9XCJkYXRhdGFibGUtY29sdW1uLWhlYWRlci1zZXBhcmF0b3JcIiBbYXR0ci5kYXRhLWNvbHVtbi1pZF09XCJjb2x1bW4uJCRpZFwiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjZWxsVHlwZVNlbGVjdG9yVHBsIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZVxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCIgbGV0LXJvdz1cInJvd1wiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPHNlYW0tdGFibGUtY2VsbC10eXBlLXNlbGVjdG9yICpuZ0lmPVwicm93XCJcbiAgICBbdHlwZV09XCJjb2x1bW4uY2VsbFR5cGVcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICBbcm93XT1cInJvd1wiXG4gICAgW2NvbERhdGFdPVwiY29sdW1uXCI+XG4gIDwvc2VhbS10YWJsZS1jZWxsLXR5cGUtc2VsZWN0b3I+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjdGlvbk1lbnVDZWxsVHBsIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZVxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCIgbGV0LXJvdz1cInJvd1wiPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cgJiYgcm93QWN0aW9uSXRlbT8udGVtcGxhdGVcIj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkocm93QWN0aW9uSXRlbT8udGVtcGxhdGUpXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmVlVG9nZ2xlVHBsIG5neC1kYXRhdGFibGUtdHJlZS10b2dnbGUgbGV0LXRyZWU9XCJjZWxsQ29udGV4dFwiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJwLTAgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYnRuXCJcbiAgICBbZGlzYWJsZWRdPVwidHJlZS50cmVlU3RhdHVzPT09J2Rpc2FibGVkJ1wiXG4gICAgKGNsaWNrKT1cInRyZWUub25UcmVlQWN0aW9uKClcIj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdsb2FkaW5nJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhU3Bpbm5lclwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRyZWVTdGF0dXM9PT0nY29sbGFwc2VkJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhQ2hldnJvblJpZ2h0XCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdleHBhbmRlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25Eb3duXCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdkaXNhYmxlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25SaWdodFwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
665
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFBZ0MsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUE7QUFDaEcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFDTCxTQUFTLEVBSVQsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWpILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVGLE9BQU8sRUFDTCxVQUFVLEVBS1Ysa0JBQWtCLElBQUkscUJBQXFCLEVBQzND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QUFDLCtCQUErQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFRSyxTQUFTO3NCQUE1RSxZQUFZO3VCQUFDLGtDQUFrQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRCxNQUFNO3NCQUF0RSxZQUFZO3VCQUFDLCtCQUErQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHM0QsZ0JBQWdCO3NCQURuQixZQUFZO3VCQUFDLHlCQUF5QjtnQkFpQkwsWUFBWTtzQkFBN0MsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBQ3dCLG1CQUFtQjtzQkFBMUUsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ2QsWUFBWTtzQkFBbkQsU0FBUzt1QkFBQywyQkFBMkI7Z0JBR2xDLGlCQUFpQjtzQkFEcEIsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBUzVDLGFBQWE7c0JBRGhCLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTeEMsU0FBUztzQkFEWixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBU3BDLGNBQWM7c0JBRGpCLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVN6QyxtQkFBbUI7c0JBRHRCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXNCbEQsU0FBUztzQkFEUixZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFFLFFBQVEsQ0FBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQXJyYXksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgQ29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZSwgaXNEYXRhU291cmNlLCBMaXN0UmFuZ2UgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgaXNEZXZNb2RlLFxuICBLZXlWYWx1ZURpZmZlcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb20sIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBjb25jYXRNYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBmYUNoZXZyb25Eb3duLCBmYUNoZXZyb25SaWdodCwgZmFTcGlubmVyIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJ1xuaW1wb3J0IHtcbiAgQ29sdW1uTW9kZSxcbiAgQ29udGV4dG1lbnVUeXBlLFxuICBEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZSxcbiAgRGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlLFxuICBEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmUsXG4gIERhdGF0YWJsZUNvbXBvbmVudCBhcyBOZ3hEYXRhdGFibGVDb21wb25lbnQsXG4gIERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSxcbiAgU29ydFR5cGUsXG4gIFRyZWVTdGF0dXNcbn0gZnJvbSAnQG1hcmtsYi9uZ3gtZGF0YXRhYmxlJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25UeXBlIH0gZnJvbSAnQG1hcmtsYi9uZ3gtZGF0YXRhYmxlJ1xuXG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4sIElucHV0TnVtYmVyIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2NvcmUnXG5pbXBvcnQgeyBjb21wb3NlRGF0YUZpbHRlcnMsIGNvbXBvc2VEYXRhRmlsdGVyU3RhdGVzLCBEYXRhRmlsdGVyLCBEYXRhRmlsdGVyU3RhdGUgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vZGF0YS1maWx0ZXJzJ1xuaW1wb3J0IHsgSUVsZW1lbnRSZXNpemVkRXZlbnQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vc2hhcmVkJ1xuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkLCB3YWl0T25Db25kaXRpb25Bc3luYyB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi91dGlscydcblxuaW1wb3J0IHsgRGF0YXRhYmxlQWN0aW9uTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1hY3Rpb24tbWVudS9kYXRhdGFibGUtYWN0aW9uLW1lbnUuY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWNvbHVtbi9kYXRhdGFibGUtY29sdW1uLmNvbXBvbmVudCdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVGb290ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRhdGFibGUtZm9vdGVyL2RhdGF0YWJsZS1mb290ZXIuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1tZW51LWJhci9kYXRhdGFibGUtbWVudS1iYXIuY29tcG9uZW50J1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGF0YWJsZS1yb3ctZGV0YWlsL2RhdGF0YWJsZS1yb3ctZGV0YWlsLmRpcmVjdGl2ZSdcbmltcG9ydCB7IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2RhdGF0YWJsZS1yb3ctYWN0aW9uLWl0ZW0uZGlyZWN0aXZlJ1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZUFjY2Vzc29yIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGF0YWJsZS1hY2Nlc3NvcidcbmltcG9ydCB7IERhdGF0YWJsZURhdGFTb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMvZGF0YXRhYmxlLWRhdGEtc291cmNlJ1xuaW1wb3J0IHsgVGhlU2VhbVBhZ2VJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL3BhZ2UtaW5mbydcbmltcG9ydCB7IFNvcnRFdmVudCB9IGZyb20gJy4uL21vZGVscy9zb3J0LWV2ZW50J1xuaW1wb3J0IHsgU29ydEl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvc29ydC1pdGVtJ1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZUNvbHVtbiB9IGZyb20gJy4uL21vZGVscy90YWJsZS1jb2x1bW4nXG5pbXBvcnQgeyBDb2x1bW5zTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb2x1bW5zLW1hbmFnZXIuc2VydmljZSdcbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGF0YXRhYmxlLWNvbHVtbi1jaGFuZ2VzLnNlcnZpY2UnXG5pbXBvcnQgeyBEYXRhdGFibGVQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kYXRhdGFibGUtcHJlZmVyZW5jZXMuc2VydmljZSdcbmltcG9ydCB7IFRIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SIH0gZnJvbSAnLi4vdG9rZW5zL2RhdGF0YWJsZS1hY2Nlc3NvcidcbmltcG9ydCB7IHJlbW92ZVVudXNlZERpZmZzIH0gZnJvbSAnLi4vdXRpbHMvcmVtb3ZlLXVudXNlZC1kaWZmcydcbmltcG9ydCB7IHRyYW5zbGF0ZVRlbXBsYXRlQ29sdW1ucyB9IGZyb20gJy4uL3V0aWxzL3RyYW5zbGF0ZS10ZW1wbGF0ZXMnXG5pbXBvcnQgeyBDb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbHVtbnMtYWx0ZXJhdGlvbnMtbWFuYWdlci5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ29sdW1uc0FsdGVyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgbWFwQ29sdW1uc0FsdGVyYXRpb25zU3RhdGVzIH0gZnJvbSAnLi4vdXRpbHMvbWFwLWNvbHVtbnMtYWx0ZXJhdGlvbnMtc3RhdGVzJ1xuaW1wb3J0IHsgV2lkdGhDb2x1bW5zQWx0ZXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb25zL3dpZHRoLmNvbHVtbnMtYWx0ZXJhdGlvbidcbmltcG9ydCB7IGdldENvbHVtblByb3AgfSBmcm9tICcuLi91dGlscy9nZXQtY29sdW1uLXByb3AnXG5pbXBvcnQgeyBPcmRlckNvbHVtbnNBbHRlcmF0aW9uLCBPcmRlckNvbHVtbnNBbHRlcmF0aW9uU3RhdGUgfSBmcm9tICcuLi9tb2RlbHMvY29sdW1ucy1hbHRlcmF0aW9ucy9vcmRlci5jb2x1bW5zLWFsdGVyYXRpb24nXG5pbXBvcnQgeyBTb3J0Q29sdW1uc0FsdGVyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY29sdW1ucy1hbHRlcmF0aW9ucy9zb3J0LmNvbHVtbnMtYWx0ZXJhdGlvbidcblxuLyoqXG4gKiBOT1RFOiBUaGlzIGlzIHN0aWxsIGJlaW5nIHdvcmtlZCBvbi4gSSBhbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGlzIG1vZGVsXG4gKiBiZWNhdXNlIGBuZ3gtZGF0YXRhYmxlYCBqdXN0IHVzZXMgYW4gdW50eXBlZCBvYmplY3QgYW5kIHNldHMgcHJvcGVydGllcyBpblxuICogbXVsdGlwbGUgcGxhY2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDZWxsQ29udGV4dCB7XG4gIGFsbFJvd3NTZWxlY3RlZDogZmFsc2VcblxuICBzZWxlY3RGbjogKCkgPT4gYW55XG4gIHNvcnREaXI/OiAnYXNjJyB8ICdkZXNjJ1xuICBzb3J0Rm46ICgpID0+IGFueVxuXG4gIGV4cGFuZGVkPzogYm9vbGVhblxuXG4gIG9uQ2hlY2tib3hDaGFuZ2VGbj86IGFueVxuICBhY3RpdmF0ZUZuPzogYW55XG4gIHJvdz86IGFueVxuICBncm91cD86IGFueVxuICB2YWx1ZT86IGFueVxuICBjb2x1bW4/OiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uXG4gIHJvd0hlaWdodD86IG51bWJlclxuICBpc1NlbGVjdGVkPzogYm9vbGVhblxuICByb3dJbmRleD86IG51bWJlclxuICB0cmVlU3RhdHVzPzogVHJlZVN0YXR1c1xuICBvblRyZWVBY3Rpb24/OiBhbnlcbn1cblxuLyoqXG4gKiBJbnRlbmRlZCBmb3IgaW50ZXJuYWwgY2xhc3NlcyBkZWNsYXJlZCBieSB0aGUgYFRoZVNlYW1EYXRhdGFibGVNb2R1bGVgLlxuICovXG5leHBvcnQgY29uc3QgVEhFU0VBTV9EQVRBVEFCTEUgPSBuZXcgSW5qZWN0aW9uVG9rZW48RGF0YUZpbHRlcj4oJ0xpYkRhdGF0YWJsZScpXG5cbmV4cG9ydCBjb25zdCBfVEhFU0VBTV9EQVRBVEFCTEU6IGFueSA9IHtcbiAgcHJvdmlkZTogVEhFU0VBTV9EQVRBVEFCTEUsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0YXRhYmxlQ29tcG9uZW50KVxufVxuXG5leHBvcnQgY29uc3QgX1RIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIHByb3ZpZGU6IFRIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGF0YWJsZUNvbXBvbmVudClcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VhbS1kYXRhdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignc2xpZGVEb3duJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTIwJSknLCBvcGFjaXR5OiAnMCcgfSksXG4gICAgICAgIGFuaW1hdGUoJzI1MG1zJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogJzEnIH0pKSxcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLCBvcGFjaXR5OiAnMScgfSksXG4gICAgICAgIGFuaW1hdGUoJzI1MG1zJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMCUpJywgb3BhY2l0eTogJzAnIH0pKSxcbiAgICAgIF0pXG4gICAgXSlcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgX1RIRVNFQU1fREFUQVRBQkxFLFxuICAgIERhdGF0YWJsZUNvbHVtbkNoYW5nZXNTZXJ2aWNlLFxuICAgIF9USEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUixcbiAgICBDb2x1bW5zTWFuYWdlclNlcnZpY2UsXG4gICAgQ29sdW1uc0FsdGVyYXRpb25zTWFuYWdlclNlcnZpY2UsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXRhYmxlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIFRoZVNlYW1EYXRhdGFibGVBY2Nlc3NvciwgQ29sbGVjdGlvblZpZXdlciB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHRlcm5hbFBhZ2luZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHRlcm5hbFNvcnRpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxGaWx0ZXJpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbG9hZGluZ0luZGljYXRvcjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZW9yZGVyYWJsZTogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zd2FwQ29sdW1uczogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9ncm91cEV4cGFuc2lvbkRlZmF1bHQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2VsZWN0QWxsUm93c09uUGFnZTogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zdW1tYXJ5Um93OiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3ZpcnR1YWxpemF0aW9uOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Njcm9sbGJhclY6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2Nyb2xsYmFySDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9saW1pdDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NvdW50OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb2Zmc2V0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGVhZGVySGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcm93SGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZm9vdGVySGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3VtbWFyeUhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NvbHVtbnM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSB8IHVuZGVmaW5lZCB8IG51bGxcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NvcnRzOiBTb3J0SXRlbVtdIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIHJlYWRvbmx5IF9mYUNoZXZyb25Eb3duID0gZmFDaGV2cm9uRG93blxuICByZWFkb25seSBfZmFDaGV2cm9uUmlnaHQgPSBmYUNoZXZyb25SaWdodFxuICByZWFkb25seSBfZmFTcGlubmVyID0gZmFTcGlubmVyXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KClcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFGaWx0ZXJbXT4oW10pXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFTb3VyY2VTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhU291cmNlPGFueT4gfCBhbnlbXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG4gIHByaXZhdGUgX3Jlc2l6aW5nOiB7IFtwcm9wOiBzdHJpbmddOiBib29sZWFuIH0gPSB7fVxuXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJTdGF0ZXM6IE9ic2VydmFibGU8RGF0YUZpbHRlclN0YXRlW10+XG5cbiAgZ2V0IGZpbHRlcnMoKTogRGF0YUZpbHRlcltdIHsgcmV0dXJuIHRoaXMuX2ZpbHRlcnNTdWJqZWN0LnZhbHVlIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVycyQ6IE9ic2VydmFibGU8RGF0YUZpbHRlcltdPlxuXG4gIEBJbnB1dCgpXG4gIGdldCBwcmVmZXJlbmNlc0tleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHsgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzS2V5LnZhbHVlIH1cbiAgc2V0IHByZWZlcmVuY2VzS2V5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKSB7IHRoaXMuX3ByZWZlcmVuY2VzS2V5Lm5leHQodmFsdWUgfHwgdW5kZWZpbmVkKSB9XG4gIHByaXZhdGUgX3ByZWZlcmVuY2VzS2V5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsPih1bmRlZmluZWQpXG5cbiAgQElucHV0KCkgdGFyZ2V0TWFya2VyVGVtcGxhdGU6IGFueVxuXG4gIEBJbnB1dCgpXG4gIHNldCBjb2x1bW5zKHZhbHVlOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pIHtcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRJbnB1dENvbHVtbnMoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdKVxuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHJvd3MoKTogYW55W10geyByZXR1cm4gdGhpcy5fcm93cy52YWx1ZSB9XG4gIHNldCByb3dzKHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMuX3Jvd3MubmV4dCh2YWx1ZSB8fCBbXSlcbiAgfVxuICBwcml2YXRlIF9yb3dzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pXG5cbiAgcHVibGljIHJvd3MkOiBPYnNlcnZhYmxlPGFueVtdPlxuXG4gIEBJbnB1dCgpIGNvbHVtbk1vZGU6IENvbHVtbk1vZGUgfCB1bmRlZmluZWQgfCBudWxsID0gQ29sdW1uTW9kZS5mb3JjZVxuXG4gIEBJbnB1dCgpIGdyb3VwUm93c0J5OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIGdyb3VwZWRSb3dzOiBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBzZWxlY3RlZDogYW55W10gfCB1bmRlZmluZWQgfCBudWxsID0gW11cblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZXh0ZXJuYWxQYWdpbmc6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZXh0ZXJuYWxTb3J0aW5nOiBib29sZWFuID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsRmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBsaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigwKSBjb3VudDogbnVtYmVyID0gMFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoMCkgb2Zmc2V0OiBudW1iZXIgPSAwXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGxvYWRpbmdJbmRpY2F0b3I6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3Rpb25UeXBlKCk6IFNlbGVjdGlvblR5cGUgfCB1bmRlZmluZWQgfCBudWxsIHsgcmV0dXJuIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLmdldFNlbGVjdGlvblR5cGUoKSB9XG4gIHNldCBzZWxlY3Rpb25UeXBlKHZhbHVlOiBTZWxlY3Rpb25UeXBlIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFNlbGVjdGlvblR5cGUobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHJlb3JkZXJhYmxlOiBib29sZWFuID0gdHJ1ZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc3dhcENvbHVtbnM6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzb3J0VHlwZSgpOiBTb3J0VHlwZSB7IHJldHVybiB0aGlzLl9zb3J0VHlwZSB9XG4gIHNldCBzb3J0VHlwZSh2YWx1ZTogU29ydFR5cGUpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSAmJiAodmFsdWUgPT09IFNvcnRUeXBlLnNpbmdsZSB8fCB2YWx1ZSA9PSBTb3J0VHlwZS5tdWx0aSkpIHtcbiAgICAgIHRoaXMuX3NvcnRUeXBlID0gdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc29ydFR5cGUgPSBTb3J0VHlwZS5zaW5nbGVcbiAgICB9XG4gIH1cbiAgX3NvcnRUeXBlOiBTb3J0VHlwZSA9IFNvcnRUeXBlLnNpbmdsZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzb3J0cygpOiBTb3J0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5uZ3hEYXRhdGFibGUgPyB0aGlzLm5neERhdGF0YWJsZS5zb3J0cyA6IHRoaXMuX3NvcnRzXG4gIH1cbiAgc2V0IHNvcnRzKHZhbHVlOiBTb3J0SXRlbVtdKSB7XG4gICAgdGhpcy5fc29ydHMgPSBub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gY29lcmNlQXJyYXkodmFsdWUpIDogW11cbiAgfVxuICBfc29ydHM6IFNvcnRJdGVtW10gPSBbXVxuXG4gIEBJbnB1dCgpIGNzc0NsYXNzZXM6IGFueSB8IHVuZGVmaW5lZCB8IG51bGwgPSB7XG4gICAgc29ydEFzY2VuZGluZzogJ2RhdGF0YWJsZS1pY29uLXVwJyxcbiAgICBzb3J0RGVzY2VuZGluZzogJ2RhdGF0YWJsZS1pY29uLWRvd24nLFxuICAgIHBhZ2VyTGVmdEFycm93OiAnZGF0YXRhYmxlLWljb24tbGVmdCcsXG4gICAgcGFnZXJSaWdodEFycm93OiAnZGF0YXRhYmxlLWljb24tcmlnaHQnLFxuICAgIHBhZ2VyUHJldmlvdXM6ICdkYXRhdGFibGUtaWNvbi1wcmV2JyxcbiAgICBwYWdlck5leHQ6ICdkYXRhdGFibGUtaWNvbi1za2lwJ1xuICB9XG5cbiAgQElucHV0KCkgbWVzc2FnZXM6IGFueSB8IHVuZGVmaW5lZCB8IG51bGwgPSB7XG4gICAgLy8gTWVzc2FnZSB0byBzaG93IHdoZW4gYXJyYXkgaXMgcHJlc2VudGVkXG4gICAgLy8gYnV0IGNvbnRhaW5zIG5vIHZhbHVlc1xuICAgIGVtcHR5TWVzc2FnZTogJ05vIHJlY29yZHMgZm91bmQnLFxuXG4gICAgLy8gRm9vdGVyIHRvdGFsIG1lc3NhZ2VcbiAgICB0b3RhbE1lc3NhZ2U6ICd0b3RhbCcsXG5cbiAgICAvLyBGb290ZXIgc2VsZWN0ZWQgbWVzc2FnZVxuICAgIHNlbGVjdGVkTWVzc2FnZTogJ3NlbGVjdGVkJ1xuICB9XG5cbiAgQElucHV0KCkgcm93SWRlbnRpdHk6ICgoeDogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkIHwgbnVsbCA9ICgoeDogYW55KSA9PiB4KVxuXG4gIEBJbnB1dCgpIHJvd0NsYXNzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgc2VsZWN0Q2hlY2s6IGFueSB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgZGlzcGxheUNoZWNrOiAoKHJvdzogYW55LCBjb2x1bW4/OiBhbnksIHZhbHVlPzogYW55KSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZ3JvdXBFeHBhbnNpb25EZWZhdWx0OiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKSB0cmFja0J5UHJvcDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzZWxlY3RBbGxSb3dzT25QYWdlOiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKSB0cmVlRnJvbVJlbGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIHRyZWVUb1JlbGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzdW1tYXJ5Um93OiBib29sZWFuID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgc3VtbWFyeUhlaWdodDogbnVtYmVyID0gMzBcbiAgQElucHV0KCkgc3VtbWFyeVBvc2l0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsID0gJ3RvcCdcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdmlydHVhbGl6YXRpb246IGJvb2xlYW4gPSB0cnVlXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgaGVhZGVySGVpZ2h0OiBudW1iZXIgPSA1MFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSByb3dIZWlnaHQ6IG51bWJlciA9IDUwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGZvb3RlckhlaWdodDogbnVtYmVyID0gNDBcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2Nyb2xsYmFyVjogYm9vbGVhbiA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNjcm9sbGJhckg6IGJvb2xlYW4gPSB0cnVlXG5cbiAgQElucHV0KClcbiAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IERhdGFTb3VyY2U8YW55PiB8IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGF0YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHZhbHVlLnNldERhdGF0YWJsZUFjY2Vzc29yKHRoaXMpXG4gICAgfVxuICAgIHRoaXMuX2RhdGFTb3VyY2VTdWJqZWN0Lm5leHQodmFsdWUgfHwgdW5kZWZpbmVkKVxuICB9XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBhY3RpdmF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydEV2ZW50PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBwYWdlID0gbmV3IEV2ZW50RW1pdHRlcjxUaGVTZWFtUGFnZUluZm8+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlb3JkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVzaXplID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHRhYmxlQ29udGV4dG1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IE1vdXNlRXZlbnQsIHR5cGU6IENvbnRleHRtZW51VHlwZSwgY29udGVudDogYW55IH0+KGZhbHNlKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdHJlZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGlvblJlZnJlc2hSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBoaWRkZW5Db2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50KVxuICBzZXQgY29sdW1uQ29tcG9uZW50cyh2YWx1ZTogUXVlcnlMaXN0PERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudD4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRUZW1wbGF0ZUNvbHVtbnModHJhbnNsYXRlVGVtcGxhdGVDb2x1bW5zKHZhbHVlPy50b0FycmF5KCkgPz8gW10pKVxuICB9XG5cbiAgQENvbnRlbnRDaGlsZChEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBhY3Rpb25NZW51PzogRGF0YXRhYmxlQWN0aW9uTWVudUNvbXBvbmVudFxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCByb3dBY3Rpb25JdGVtKCk6IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fcm93QWN0aW9uSXRlbSB9XG4gIHNldCByb3dBY3Rpb25JdGVtKHZhbHVlOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcm93QWN0aW9uSXRlbSA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0Um93QWN0aW9uSXRlbShub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfcm93QWN0aW9uSXRlbTogRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB8IHVuZGVmaW5lZFxuXG4gIEBDb250ZW50Q2hpbGQoVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcm93RGV0YWlsPzogVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZVxuICBAQ29udGVudENoaWxkKFRoZVNlYW1EYXRhdGFibGVGb290ZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGZvb3Rlcj86IFRoZVNlYW1EYXRhdGFibGVGb290ZXJEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQpXG4gIGdldCBtZW51QmFyQ29tcG9uZW50KCk6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fbWVudUJhckNvbXBvbmVudCB9XG4gIHNldCBtZW51QmFyQ29tcG9uZW50KHZhbHVlOiBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbWVudUJhckNvbXBvbmVudCA9IHZhbHVlXG5cbiAgICBpZiAodGhpcy5fbWVudUJhclN1YikgeyB0aGlzLl9tZW51QmFyU3ViLnVuc3Vic2NyaWJlKCkgfVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZXRNZW51QmFyRmlsdGVycyh2YWx1ZS5maWx0ZXJzKCkpXG5cbiAgICAgIHRoaXMuX21lbnVCYXJTdWIgPSB0aGlzLl9tZW51QmFyQ29tcG9uZW50Py5maWx0ZXJzQ2hhbmdlZFxuICAgICAgICAuc3Vic2NyaWJlKHYgPT4geyB0aGlzLl9zZXRNZW51QmFyRmlsdGVycyh2YWx1ZS5maWx0ZXJzKCkpIH0pXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX21lbnVCYXJDb21wb25lbnQ6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSBfbWVudUJhclN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZChOZ3hEYXRhdGFibGVDb21wb25lbnQpIG5neERhdGF0YWJsZT86IE5neERhdGF0YWJsZUNvbXBvbmVudFxuICBAVmlld0NoaWxkKE5neERhdGF0YWJsZUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIG5neERhdGF0YWJsZUVsZW1lbnQ/OiBFbGVtZW50UmVmXG4gIEBWaWV3Q2hpbGQoRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlKSBuZ3hSb3dEZXRhaWw/OiBEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmVcblxuICBAVmlld0NoaWxkKCdhY3Rpb25NZW51Q2VsbFRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBhY3Rpb25NZW51Q2VsbFRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2FjdGlvbk1lbnVDZWxsVHBsIH1cbiAgc2V0IGFjdGlvbk1lbnVDZWxsVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYWN0aW9uTWVudUNlbGxUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldEFjdGlvbk1lbnVDZWxsVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9hY3Rpb25NZW51Q2VsbFRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ3RyZWVUb2dnbGVUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgdHJlZVRvZ2dsZVRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fdHJlZVRvZ2dsZVRwbCB9XG4gIHNldCB0cmVlVG9nZ2xlVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90cmVlVG9nZ2xlVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRUcmVlVG9nZ2xlVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF90cmVlVG9nZ2xlVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCdoZWFkZXJUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgaGVhZGVyVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5faGVhZGVyVHBsIH1cbiAgc2V0IGhlYWRlclRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2hlYWRlclRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0SGVhZGVyVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9oZWFkZXJUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCdibGFua0hlYWRlclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBibGFua0hlYWRlclRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2JsYW5rSGVhZGVyVHBsIH1cbiAgc2V0IGJsYW5rSGVhZGVyVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYmxhbmtIZWFkZXJUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldEJsYW5rSGVhZGVyVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9ibGFua0hlYWRlclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2NlbGxUeXBlU2VsZWN0b3JUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgY2VsbFR5cGVTZWxlY3RvclRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2NlbGxUeXBlU2VsZWN0b3JUcGwgfVxuICBzZXQgY2VsbFR5cGVTZWxlY3RvclRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NlbGxUeXBlU2VsZWN0b3JUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldENlbGxUeXBlU2VsZWN0b3JUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2NlbGxUeXBlU2VsZWN0b3JUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBwdWJsaWMgY29sdW1uQ29tcG9uZW50cyQ/OiBPYnNlcnZhYmxlPERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudFtdPlxuICBwcml2YXRlIF9jb2xEaWZmZXJzSW5wOiB7IFtwcm9wTmFtZTogc3RyaW5nXTogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IH0gPSB7fVxuICBwcml2YXRlIF9jb2xEaWZmZXJzVHBsOiB7IFtwcm9wTmFtZTogc3RyaW5nXTogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IH0gPSB7fVxuXG4gIHB1YmxpYyByZWFkb25seSBjb2x1bW5zJDogT2JzZXJ2YWJsZTxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+XG4gIHB1YmxpYyByZWFkb25seSBkaXNwbGF5Q29sdW1ucyQ6IE9ic2VydmFibGU8VGhlU2VhbURhdGF0YWJsZUNvbHVtbltdPlxuXG4gIHZpZXdDaGFuZ2U6IE9ic2VydmFibGU8TGlzdFJhbmdlPlxuXG4gIHByaXZhdGUgX3Jvd0RldGFpbFRvZ2dsZVN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWVxuXG4gIC8vIFRPRE86IFJlbW92ZSB0aGlzIERPTS1kZXBlbmRlbnQgY29kZSB3aGVuIGEgd2F5IHRvIHByb3BlcnR5IGxpc3RlbiBmb3JcbiAgLy8gZGJsY2xpY2sgb24gdGhlIGhlYWRlciByZWFzaXplIGhhbmRsZXMuXG4gIEBIb3N0TGlzdGVuZXIoJ2RibGNsaWNrJywgWyAnJGV2ZW50JyBdKVxuICBfZGJsQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlzSGFuZGxlID0gKDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmNsYXNzTGlzdC5jb250YWlucygncmVzaXplLWhhbmRsZScpXG4gICAgaWYgKGlzSGFuZGxlKSB7XG4gICAgICBjb25zdCBpc1Jlc2l6ZWFibGUgPSAoPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkucGFyZW50RWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNpemVhYmxlJylcbiAgICAgIGlmIChpc1Jlc2l6ZWFibGUpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgY29uc3QgaWQgPSAoPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkucGFyZW50RWxlbWVudFxuICAgICAgICAgID8ucXVlcnlTZWxlY3RvcignLmRhdGF0YWJsZS1jb2x1bW4taGVhZGVyLXNlcGFyYXRvcicpXG4gICAgICAgICAgPy5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sdW1uLWlkJylcbiAgICAgICAgdGhpcy5fY29sdW1uc01hbmFnZXIuY29sdW1ucyQucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICApLnN1YnNjcmliZShjb2x1bW5zID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoYyA9PiBjLiQkaWQgPT09IGlkKVxuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGNvbHVtbilcbiAgICAgICAgICAgIGlmIChjb2x1bW5Qcm9wKSAge1xuICAgICAgICAgICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IFdpZHRoQ29sdW1uc0FsdGVyYXRpb24oeyBjb2x1bW5Qcm9wLCBjYW5BdXRvUmVzaXplOiB0cnVlIH0sIGZhbHNlKVxuICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcHJlZmVyZW5jZXM6IERhdGF0YWJsZVByZWZlcmVuY2VzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5zTWFuYWdlcjogQ29sdW1uc01hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXI6IENvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXJTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLl9wcmVmZXJlbmNlc0tleS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcChrZXkgPT4ge1xuICAgICAgICBpZiAoIW5vdE51bGxPclVuZGVmaW5lZChrZXkpIHx8IGtleS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZyb20od2FpdE9uQ29uZGl0aW9uQXN5bmMoKCkgPT4gdGhpcy5fcHJlZmVyZW5jZXMubG9hZGVkKSkucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzLnNldEFsdGVyYXRpb25zKGtleSwgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5nZXQoKSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICkpXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpLFxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIGNvbnN0IGFwcGx5UHJlZnMgPSAoY29sczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdKSA9PiB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hcHBseShjb2xzLCB0aGlzKVxuICAgICAgICByZXR1cm4gY29sc1xuICAgICAgfSksXG4gICAgKVxuXG4gICAgdGhpcy5fcHJlZmVyZW5jZXNLZXkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzd2l0Y2hNYXAocHJlZnNLZXkgPT4ge1xuICAgICAgICBpZiAoIW5vdE51bGxPclVuZGVmaW5lZChwcmVmc0tleSkpIHtcbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVmZXJlbmNlcy5wcmVmZXJlbmNlcyhwcmVmc0tleSkucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoYXN5bmMgKHByZWZlcmVuY2VzKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB3YWl0T25Db25kaXRpb25Bc3luYygoKSA9PiB0aGlzLl9wcmVmZXJlbmNlcy5sb2FkZWQpXG4gICAgICAgICAgICByZXR1cm4gcHJlZmVyZW5jZXNcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIG1hcChwcmVmZXJlbmNlcyA9PiB7XG4gICAgICAgICAgICBsZXQgYWx0ZXJhdGlvbnM6IENvbHVtbnNBbHRlcmF0aW9uW10gPSBbXVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYWx0ZXJhdGlvbnMgPSBtYXBDb2x1bW5zQWx0ZXJhdGlvbnNTdGF0ZXMocHJlZmVyZW5jZXMuYWx0ZXJhdGlvbnMpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIG1hcCBjb2x1bW5zIGFsdGVyYXRpb25zIHN0YXRlcycpXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoYWx0ZXJhdGlvbnMpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSlcbiAgICApLnN1YnNjcmliZSgpXG5cbiAgICB0aGlzLmNvbHVtbnMkID0gdGhpcy5fY29sdW1uc01hbmFnZXIuY29sdW1ucyRcblxuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMkID0gdGhpcy5jb2x1bW5zJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNvbHMgPT4gYXBwbHlQcmVmcyhjb2xzKSksXG4gICAgICBtYXAoY29scyA9PiBjb2xzLmZpbHRlcihjID0+ICFjLmhpZGRlbikpLFxuICAgICAgdGFwKHYgPT4gcmVtb3ZlVW51c2VkRGlmZnModiwgdGhpcy5fY29sRGlmZmVyc0lucCwgdGhpcy5fY29sRGlmZmVyc1RwbCkpLFxuICAgIClcblxuICAgIHRoaXMuZmlsdGVycyQgPSB0aGlzLl9maWx0ZXJzU3ViamVjdC5hc09ic2VydmFibGUoKVxuXG4gICAgdGhpcy5maWx0ZXJTdGF0ZXMgPSB0aGlzLl9maWx0ZXJzU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKGZpbHRlcnMgPT4gY29tcG9zZURhdGFGaWx0ZXJTdGF0ZXMoZmlsdGVycykpXG4gICAgKVxuXG4gICAgdGhpcy5yb3dzJCA9IHRoaXMuX2RhdGFTb3VyY2VTdWJqZWN0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZGF0YVNvdXJjZSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhU291cmNlJywgZGF0YVNvdXJjZSlcbiAgICAgICAgbGV0IGRhdGFTdHJlYW06IE9ic2VydmFibGU8YW55W10+XG5cbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+ZGF0YXNvdXJjZScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTb3VyY2UuY29ubmVjdCh0aGlzKSBhcyBhbnlcbiAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUoZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfm9ic2VydmFibGUnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU291cmNlIGFzIGFueVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfmFycmF5JylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gb2YoZGF0YVNvdXJjZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfnJvd3MgZmFsbGJhY2snKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSB0aGlzLl9yb3dzLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAvLyAucGlwZSh0YXAodiA9PiBjb25zb2xlLmxvZygncm93c34nLCB2KSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZXh0ZXJuYWxGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbm90IHVzaW5nIGV4dGVybmFsRmlsdGVyaW5nJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVN0cmVhbS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHJvd3MgPT4gdGhpcy5fZmlsdGVyc1N1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ2ZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgICAgIGNvbmNhdE1hcChmaWx0ZXJzID0+IG9mKHJvd3MpLnBpcGUoY29tcG9zZURhdGFGaWx0ZXJzKGZpbHRlcnMpKSksXG4gICAgICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdjb21wb3NlZCBmaWx0ZXJzJywgdikpLFxuICAgICAgICAgICAgKSlcbiAgICAgICAgICApXG5cbiAgICAgICAgICAvLyBkYXRhU3RyZWFtID0gdGhpcy5fZmlsdGVyc1N1YmplY3QucGlwZShcbiAgICAgICAgICAvLyAgIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdmaWx0ZXJzJywgdikpLFxuICAgICAgICAgIC8vICAgY29uY2F0TWFwKGZpbHRlcnMgPT4gZGF0YVN0cmVhbS5waXBlKGNvbXBvc2VEYXRhRmlsdGVycyhmaWx0ZXJzKSkpLFxuICAgICAgICAgIC8vICAgdGFwKHYgPT4gY29uc29sZS5sb2coJ2NvbXBvc2VkIGZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgLy8gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGFTdHJlYW0ucGlwZShcbiAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnc3RyZWFtJywgdikpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIClcblxuICAgIC8vIFRPRE86IEltcGxlbWVudCB2aWV3Q2hhbmdlIGZvciBDb2xsZWN0aW9uVmlld2VyLlxuICAgIHRoaXMudmlld0NoYW5nZSA9IHRoaXMucGFnZS5waXBlKG1hcChwID0+ICh7IHN0YXJ0OiAwLCBlbmQ6IHAuY291bnQgfSkpKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucm93RGV0YWlsKSB7XG4gICAgICB0aGlzLl9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24gPSB0aGlzLnJvd0RldGFpbC5fdG9nZ2xlLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGlmICh0aGlzLm5neFJvd0RldGFpbCkge1xuICAgICAgICAgIHRoaXMubmd4Um93RGV0YWlsLnRvZ2dsZS5lbWl0KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Jvd0RldGFpbFRvZ2dsZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gIH1cblxuICBwcml2YXRlIF9zZXRNZW51QmFyRmlsdGVycyhmaWx0ZXJzOiBEYXRhRmlsdGVyW10pIHtcbiAgICB0aGlzLl9maWx0ZXJzU3ViamVjdC5uZXh0KGZpbHRlcnMgfHwgW10pXG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sdW1uQ29tcG9uZW50KHByb3BOYW1lOiBzdHJpbmcpOiBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uQ29tcG9uZW50cyB8fCB0aGlzLmNvbHVtbkNvbXBvbmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHRwbCA9IHRoaXMuY29sdW1uQ29tcG9uZW50cy5maW5kKHQgPT4gdC5wcm9wID09PSBwcm9wTmFtZSlcbiAgICBpZiAodHBsKSB7XG4gICAgICByZXR1cm4gdHBsXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIF9jb2x1bW5EYXRhKGNvbDogYW55KTogeyBjb2w6IGFueSwgY29tcDogRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50IHwgbnVsbCB9IHtcbiAgICBjb25zdCBjb21wID0gdGhpcy5nZXRDb2x1bW5Db21wb25lbnQoY29sLnByb3ApXG4gICAgcmV0dXJuIHsgY29sLCBjb21wIH1cbiAgfVxuXG4gIF9nZXRSb3dFeHBhbmRlZChyb3c6IGFueSkge1xuICAgIGlmICh0aGlzLm5neERhdGF0YWJsZSAmJiB0aGlzLm5neERhdGF0YWJsZS5ib2R5Q29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5uZ3hEYXRhdGFibGUuYm9keUNvbXBvbmVudC5nZXRSb3dFeHBhbmRlZChyb3cpXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcHVibGljIHRyYWNrQnlGbkNvbHVtbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gaXRlbS5wcm9wXG4gIH1cblxuICBwdWJsaWMgb25EYXRhdGFibGVSZXNpemUoZXZlbnQ6IElFbGVtZW50UmVzaXplZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMubmd4RGF0YXRhYmxlICYmIHRoaXMubmd4RGF0YXRhYmxlRWxlbWVudCAmJiB0aGlzLm5neERhdGF0YWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgLy8gVE9ETzogQ29uc2lkZXIgaW50ZWdyYXRpbmcgdGhpcyBpbnRvIHRoZSBuZ3gtZGF0YXRhYmxlIGxpYnJhcnkgdG8gYXZvaWRcbiAgICAgIC8vIG11bHRpcGxlIHJlc2l6ZSBjYWxscyB3aGVuIHRoZSB0YWJsZSByZXNpemVzIGl0c2VsZi5cbiAgICAgIHRoaXMubmd4RGF0YXRhYmxlLnJlY2FsY3VsYXRlKClcbiAgICB9XG4gIH1cblxuICBfb25SZXNpemUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucmVzaXplLmVtaXQoZXZlbnQpXG5cbiAgICBpZiAoIW5vdE51bGxPclVuZGVmaW5lZChldmVudC5jb2x1bW4pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5Qcm9wID0gZ2V0Q29sdW1uUHJvcChldmVudC5jb2x1bW4pXG4gICAgaWYgKGNvbHVtblByb3ApIHtcbiAgICAgIGxldCBhZGRBbHRlcmF0aW9uID0gZmFsc2VcblxuICAgICAgaWYgKCF0aGlzLl9yZXNpemluZ1tjb2x1bW5Qcm9wXSkge1xuICAgICAgICB0aGlzLl9yZXNpemluZ1tjb2x1bW5Qcm9wXSA9IHRydWVcbiAgICAgICAgYWRkQWx0ZXJhdGlvbiA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmlzRG9uZSkge1xuICAgICAgICB0aGlzLl9yZXNpemluZ1tjb2x1bW5Qcm9wXSA9IGZhbHNlXG4gICAgICAgIGFkZEFsdGVyYXRpb24gPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRBbHRlcmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgV2lkdGhDb2x1bW5zQWx0ZXJhdGlvbih7XG4gICAgICAgICAgY29sdW1uUHJvcCxcbiAgICAgICAgICB3aWR0aDogZXZlbnQuY29sdW1uLndpZHRoLFxuICAgICAgICAgIGNhbkF1dG9SZXNpemU6IGZhbHNlXG4gICAgICAgIH0sIHRydWUpXG4gICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKFsgYWx0ZXJhdGlvbiBdKVxuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgX29uUmVvcmRlcihldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5yZW9yZGVyLmVtaXQoZXZlbnQpXG5cbiAgICBjb25zdCBjb2x1bW5Qcm9wID0gZ2V0Q29sdW1uUHJvcChldmVudC5jb2x1bW4pXG4gICAgaWYgKGNvbHVtblByb3ApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcmRlckFsdGVyYXRpb24gPSB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmdldCgpLmZpbmQoeCA9PiB4LnR5cGUgPT09ICdvcmRlcicpXG4gICAgICBjb25zdCBzdGF0ZTogT3JkZXJDb2x1bW5zQWx0ZXJhdGlvblN0YXRlID0ge1xuICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgLi4uKGN1cnJlbnRPcmRlckFsdGVyYXRpb24/LnN0YXRlLmNvbHVtbnMgfHwgW10pLFxuICAgICAgICAgIHsgY29sdW1uUHJvcCwgaW5kZXg6IGV2ZW50Lm5ld1ZhbHVlIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAgY29uc3QgYWx0ZXJhdGlvbiA9IG5ldyBPcmRlckNvbHVtbnNBbHRlcmF0aW9uKHN0YXRlLCB0cnVlKVxuICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gICAgfVxuICB9XG5cbiAgX29uU29ydChldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zb3J0LmVtaXQoZXZlbnQpXG5cbiAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IFNvcnRDb2x1bW5zQWx0ZXJhdGlvbih7IHNvcnRzOiBldmVudC5zb3J0cyB9LCB0cnVlKVxuICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKFsgYWx0ZXJhdGlvbiBdKVxuICB9XG5cbiAgX29uVHJlZUFjdGlvbihldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5kZXggPSBldmVudC5yb3dJbmRleFxuICAgIGNvbnN0IHJvdyA9IGV2ZW50LnJvd1xuICAgIGlmIChyb3cudHJlZVN0YXR1cyA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgIHJvdy50cmVlU3RhdHVzID0gJ2V4cGFuZGVkJ1xuICAgIH0gZWxzZSB7XG4gICAgICByb3cudHJlZVN0YXR1cyA9ICdjb2xsYXBzZWQnXG4gICAgfVxuICAgIHRoaXMucm93cyA9IFsgLi4udGhpcy5yb3dzIF1cbiAgfVxuXG4gIHB1YmxpYyB0cmlnZ2VyQWN0aW9uUmVmcmVzaFJlcXVlc3QoKSB7XG4gICAgdGhpcy5hY3Rpb25SZWZyZXNoUmVxdWVzdC5lbWl0KHVuZGVmaW5lZClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwYWdlIGluZm8gZnJvbSB0aGUgd3JhcHBlZCBOZ3hEYXRhdGFibGUgaW5zdGFuY2Ugb3IgZGVmYXVsdHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2VJbmZvKCk6IFRoZVNlYW1QYWdlSW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9mZnNldDogdGhpcy5uZ3hEYXRhdGFibGU/Lm9mZnNldCA/PyAwLFxuICAgICAgcGFnZVNpemU6IHRoaXMubmd4RGF0YXRhYmxlPy5wYWdlU2l6ZSA/PyAwLFxuICAgICAgbGltaXQ6IHRoaXMubmd4RGF0YXRhYmxlPy5saW1pdCxcbiAgICAgIGNvdW50OiB0aGlzLm5neERhdGF0YWJsZT8uY291bnQgPz8gMFxuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0YXRhYmxlLXdyYXBwZXJcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2VhbS1kYXRhdGFibGUtbWVudS1iYXJcIj48L25nLWNvbnRlbnQ+XG4gIDxkaXYgY2xhc3M9XCJkYXRhdGFibGUtdGFibGUtd3JhcHBlclwiPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgICA8bmd4LWRhdGF0YWJsZVxuICAgICAgICBbY29sdW1uTW9kZV09XCIkYW55KGNvbHVtbk1vZGUpXCJcbiAgICAgICAgW3Njcm9sbGJhclZdPVwic2Nyb2xsYmFyVlwiXG4gICAgICAgIFtzY3JvbGxiYXJIXT1cInNjcm9sbGJhckhcIlxuICAgICAgICBbdmlydHVhbGl6YXRpb25dPVwidmlydHVhbGl6YXRpb25cIlxuICAgICAgICBbdGFyZ2V0TWFya2VyVGVtcGxhdGVdPVwidGFyZ2V0TWFya2VyVGVtcGxhdGVcIlxuICAgICAgICBbZ3JvdXBSb3dzQnldPVwiJGFueShncm91cFJvd3NCeSlcIlxuICAgICAgICBbZ3JvdXBlZFJvd3NdPVwiJGFueShncm91cGVkUm93cylcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwiJGFueShzZWxlY3RlZClcIlxuICAgICAgICBbZXh0ZXJuYWxQYWdpbmddPVwiZXh0ZXJuYWxQYWdpbmdcIlxuICAgICAgICBbZXh0ZXJuYWxTb3J0aW5nXT1cImV4dGVybmFsU29ydGluZ1wiXG4gICAgICAgIFtsaW1pdF09XCIkYW55KGxpbWl0KVwiXG4gICAgICAgIFtjb3VudF09XCIkYW55KGNvdW50KVwiXG4gICAgICAgIFtvZmZzZXRdPVwiJGFueShvZmZzZXQpXCJcbiAgICAgICAgW2xvYWRpbmdJbmRpY2F0b3JdPVwibG9hZGluZ0luZGljYXRvclwiXG4gICAgICAgIFtzZWxlY3Rpb25UeXBlXT1cIiRhbnkoc2VsZWN0aW9uVHlwZSlcIlxuICAgICAgICBbcmVvcmRlcmFibGVdPVwicmVvcmRlcmFibGVcIlxuICAgICAgICBbc3dhcENvbHVtbnNdPVwic3dhcENvbHVtbnNcIlxuICAgICAgICBbc29ydFR5cGVdPVwiJGFueShzb3J0VHlwZSlcIlxuICAgICAgICBbc29ydHNdPVwiJGFueShfc29ydHMpXCJcbiAgICAgICAgW2Nzc0NsYXNzZXNdPVwiY3NzQ2xhc3Nlc1wiXG4gICAgICAgIFttZXNzYWdlc109XCJtZXNzYWdlc1wiXG4gICAgICAgIFtyb3dJZGVudGl0eV09XCIkYW55KHJvd0lkZW50aXR5KVwiXG4gICAgICAgIFtyb3dDbGFzc109XCJyb3dDbGFzc1wiXG4gICAgICAgIFtzZWxlY3RDaGVja109XCJzZWxlY3RDaGVja1wiXG4gICAgICAgIFtkaXNwbGF5Q2hlY2tdPVwiJGFueShkaXNwbGF5Q2hlY2spXCJcbiAgICAgICAgW2dyb3VwRXhwYW5zaW9uRGVmYXVsdF09XCJncm91cEV4cGFuc2lvbkRlZmF1bHRcIlxuICAgICAgICBbdHJhY2tCeVByb3BdPVwiJGFueSh0cmFja0J5UHJvcClcIlxuICAgICAgICBbc2VsZWN0QWxsUm93c09uUGFnZV09XCJzZWxlY3RBbGxSb3dzT25QYWdlXCJcbiAgICAgICAgW3RyZWVGcm9tUmVsYXRpb25dPVwiJGFueSh0cmVlRnJvbVJlbGF0aW9uKVwiXG4gICAgICAgIFt0cmVlVG9SZWxhdGlvbl09XCIkYW55KHRyZWVUb1JlbGF0aW9uKVwiXG4gICAgICAgIFtzdW1tYXJ5Um93XT1cInN1bW1hcnlSb3dcIlxuICAgICAgICBbc3VtbWFyeUhlaWdodF09XCIkYW55KHN1bW1hcnlIZWlnaHQpXCJcbiAgICAgICAgW3N1bW1hcnlQb3NpdGlvbl09XCIkYW55KHN1bW1hcnlQb3NpdGlvbilcIlxuICAgICAgICBbcm93c109XCJyb3dzJCB8IGFzeW5jXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiJGFueShkaXNwbGF5Q29sdW1ucyQgfCBhc3luYylcIlxuICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIiRhbnkoaGVhZGVySGVpZ2h0KVwiXG4gICAgICAgIFtyb3dIZWlnaHRdPVwiJGFueShyb3dIZWlnaHQpXCJcbiAgICAgICAgW2Zvb3RlckhlaWdodF09XCIkYW55KGZvb3RlckhlaWdodClcIlxuICAgICAgICAoc2Nyb2xsKT1cInNjcm9sbC5lbWl0KCRldmVudClcIlxuICAgICAgICAoYWN0aXZhdGUpPVwiYWN0aXZhdGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdCk9XCJzZWxlY3QuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNvcnQpPVwiX29uU29ydCgkZXZlbnQpXCJcbiAgICAgICAgKHBhZ2UpPVwicGFnZS5lbWl0KCRldmVudClcIlxuICAgICAgICAocmVvcmRlcik9XCJfb25SZW9yZGVyKCRldmVudClcIlxuICAgICAgICAocmVzaXplKT1cIl9vblJlc2l6ZSgkZXZlbnQpXCJcbiAgICAgICAgKHRhYmxlQ29udGV4dG1lbnUpPVwidGFibGVDb250ZXh0bWVudS5lbWl0KCRldmVudClcIlxuICAgICAgICAodHJlZUFjdGlvbik9XCJ0cmVlQWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChzZWFtRWxlbVJlc2l6ZWQpPVwib25EYXRhdGFibGVSZXNpemUoJGV2ZW50KVwiXG4gICAgICAgICh0cmVlQWN0aW9uKT1cIl9vblRyZWVBY3Rpb24oJGV2ZW50KVwiPlxuXG4gICAgICAgIDxuZ3gtZGF0YXRhYmxlLWdyb3VwLWhlYWRlciBbcm93SGVpZ2h0XT1cIjUwXCIgI215R3JvdXBIZWFkZXIgKm5nSWY9XCJncm91cFJvd3NCeVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtZ3JvdXA9XCJncm91cFwiIGxldC1leHBhbmRlZD1cImV4cGFuZGVkXCIgbmd4LWRhdGF0YWJsZS1ncm91cC1oZWFkZXItdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgYmctbGlnaHQgcC0xXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1ib3R0b21dPVwiIWV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRhdGF0YWJsZS1pY29uLXJpZ2h0XT1cIiFleHBhbmRlZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kYXRhdGFibGUtaWNvbi1kb3duXT1cImV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJFeHBhbmQvQ29sbGFwc2UgR3JvdXBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibmd4RGF0YXRhYmxlPy5ncm91cEhlYWRlcj8udG9nZ2xlRXhwYW5kR3JvdXAoZ3JvdXApXCI+XG4gICAgICAgICAgICAgIDxiPkFnZToge3sgZ3JvdXAuYWdlIH19PC9iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWdyb3VwLWhlYWRlcj5cblxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1yb3ctZGV0YWlsICpuZ0lmPVwicm93RGV0YWlsICYmIHJvd0RldGFpbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgW3Jvd0hlaWdodF09XCJyb3dEZXRhaWwucm93SGVpZ2h0IHx8IDBcIlxuICAgICAgICAgIFt0ZW1wbGF0ZV09XCIkYW55KHJvd0RldGFpbC50ZW1wbGF0ZSlcIlxuICAgICAgICAgICh0b2dnbGUpPVwicm93RGV0YWlsLnRvZ2dsZS5lbWl0KCRldmVudClcIj5cbiAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLXJvdy1kZXRhaWw+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtZm9vdGVyICpuZ0lmPVwiZm9vdGVyICYmIGZvb3Rlci50ZW1wbGF0ZVwiXG4gICAgICAgICAgW3RlbXBsYXRlXT1cIiRhbnkoZm9vdGVyLnRlbXBsYXRlKVwiPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtZm9vdGVyPlxuICAgICAgPC9uZ3gtZGF0YXRhYmxlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2JsYW5rSGVhZGVyVHBsIG5neC1kYXRhdGFibGUtaGVhZGVyLXRlbXBsYXRlPjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVHBsIG5neC1kYXRhdGFibGUtaGVhZGVyLXRlbXBsYXRlXG4gIGxldC1jb2x1bW49XCJjb2x1bW5cIiBsZXQtc29ydEZuPVwic29ydEZuXCI+XG4gIDxzdHJvbmcgKm5nSWY9XCIhY29sdW1uLnNvcnRhYmxlXCIgY2xhc3M9XCJkcmFnZ2FibGVcIj57e2NvbHVtbi5uYW1lfX08L3N0cm9uZz5cbiAgPHN0cm9uZyAqbmdJZj1cImNvbHVtbi5zb3J0YWJsZVwiIGNsYXNzPVwiZGF0YXRhYmxlLXNvcnQtdGFyZ2V0IGRyYWdnYWJsZVwiIChjbGljayk9XCJzb3J0Rm4oKVwiPnt7Y29sdW1uLm5hbWV9fTwvc3Ryb25nPlxuICA8ZGl2IGNsYXNzPVwiZGF0YXRhYmxlLWNvbHVtbi1oZWFkZXItc2VwYXJhdG9yXCIgW2F0dHIuZGF0YS1jb2x1bW4taWRdPVwiY29sdW1uLiQkaWRcIj48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2VsbFR5cGVTZWxlY3RvclRwbCBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGVcbiAgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxzZWFtLXRhYmxlLWNlbGwtdHlwZS1zZWxlY3RvciAqbmdJZj1cInJvd1wiXG4gICAgW3R5cGVdPVwiY29sdW1uLmNlbGxUeXBlXCJcbiAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgIFtyb3dJbmRleF09XCJyb3dJbmRleFwiXG4gICAgW3Jvd109XCJyb3dcIlxuICAgIFtjb2xEYXRhXT1cImNvbHVtblwiPlxuICA8L3NlYW0tdGFibGUtY2VsbC10eXBlLXNlbGVjdG9yPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhY3Rpb25NZW51Q2VsbFRwbCBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGVcbiAgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiIGxldC1yb3c9XCJyb3dcIj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93ICYmIHJvd0FjdGlvbkl0ZW0/LnRlbXBsYXRlXCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KHJvd0FjdGlvbkl0ZW0/LnRlbXBsYXRlKVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdywgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCB9XCI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdHJlZVRvZ2dsZVRwbCBuZ3gtZGF0YXRhYmxlLXRyZWUtdG9nZ2xlIGxldC10cmVlPVwiY2VsbENvbnRleHRcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwicC0wIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJ0blwiXG4gICAgW2Rpc2FibGVkXT1cInRyZWUudHJlZVN0YXR1cz09PSdkaXNhYmxlZCdcIlxuICAgIChjbGljayk9XCJ0cmVlLm9uVHJlZUFjdGlvbigpXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRyZWVTdGF0dXM9PT0nbG9hZGluZydcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYVNwaW5uZXJcIj48L2ZhLWljb24+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwidHJlZS50cmVlU3RhdHVzPT09J2NvbGxhcHNlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25SaWdodFwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRyZWVTdGF0dXM9PT0nZXhwYW5kZWQnXCI+XG4gICAgICA8ZmEtaWNvbiBbaWNvbl09XCJfZmFDaGV2cm9uRG93blwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRyZWVTdGF0dXM9PT0nZGlzYWJsZWQnXCI+XG4gICAgICA8ZmEtaWNvbiBbaWNvbl09XCJfZmFDaGV2cm9uUmlnaHRcIj48L2ZhLWljb24+XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -88,9 +88,9 @@ export class DatatableActionMenuComponent {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
DatatableActionMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
92
|
-
DatatableActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
93
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
91
|
+
DatatableActionMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: DatatableActionMenuComponent, deps: [{ token: i1.SeamConfirmDialogService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
92
|
+
DatatableActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.6", type: DatatableActionMenuComponent, selector: "seam-datatable-action-menu", queries: [{ propertyName: "items", predicate: DatatableActionMenuItemComponent }], ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i4.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i4.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i5.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }] });
|
|
93
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: DatatableActionMenuComponent, decorators: [{
|
|
94
94
|
type: Component,
|
|
95
95
|
args: [{ selector: 'seam-datatable-action-menu', template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"] }]
|
|
96
96
|
}], ctorParameters: function () { return [{ type: i1.SeamConfirmDialogService }, { type: i2.Router }]; }, propDecorators: { items: [{
|