@wavemaker/app-ng-runtime 11.14.1-rc.6310 → 11.14.2-1.245
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/components/advanced/carousel/bundles/index.umd.js +15 -1
- package/components/advanced/carousel/carousel.directive.d.ts +1 -0
- package/components/advanced/carousel/esm2022/carousel.directive.mjs +16 -2
- package/components/advanced/carousel/fesm2022/index.mjs +15 -1
- package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
- package/components/advanced/login/bundles/index.umd.js +24 -3
- package/components/advanced/login/esm2022/login.component.mjs +25 -4
- package/components/advanced/login/fesm2022/index.mjs +24 -3
- package/components/advanced/login/fesm2022/index.mjs.map +1 -1
- package/components/advanced/login/login.component.d.ts +5 -2
- package/components/base/bundles/index.umd.js +331 -36
- package/components/base/directives/show-in-device.directive.d.ts +2 -1
- package/components/base/esm2022/directives/show-in-device.directive.mjs +22 -4
- package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
- package/components/base/esm2022/utils/widget-utils.mjs +3 -3
- package/components/base/esm2022/widgets/common/base/base-container.component.mjs +27 -1
- package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +18 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +68 -7
- package/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +9 -1
- package/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +44 -11
- package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +20 -1
- package/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +26 -1
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +44 -4
- package/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +16 -1
- package/components/base/esm2022/widgets/common/pull-to-refresh/pull-to-refresh.mjs +22 -1
- package/components/base/esm2022/widgets/framework/property-change-handler.mjs +7 -2
- package/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +5 -3
- package/components/base/esm2022/widgets/framework/widget-registry.mjs +6 -3
- package/components/base/fesm2022/index.mjs +327 -34
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/pipes/custom-pipes.d.ts +5 -5
- package/components/base/widgets/common/base/base-container.component.d.ts +3 -2
- package/components/base/widgets/common/base/base-field-validations.d.ts +1 -0
- package/components/base/widgets/common/base/custom-widget-container.directive.d.ts +3 -2
- package/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +6 -2
- package/components/base/widgets/common/base/partial-container.directive.d.ts +3 -2
- package/components/base/widgets/common/item-template/item-template.directive.d.ts +3 -2
- package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +1 -1
- package/components/base/widgets/common/partial-param/partial-param.directive.d.ts +3 -2
- package/components/base/widgets/common/pull-to-refresh/pull-to-refresh.d.ts +3 -2
- package/components/basic/anchor/bundles/index.umd.js +13 -1
- package/components/basic/anchor/esm2022/anchor.component.mjs +14 -2
- package/components/basic/anchor/fesm2022/index.mjs +13 -1
- package/components/basic/anchor/fesm2022/index.mjs.map +1 -1
- package/components/basic/html/bundles/index.umd.js +13 -1
- package/components/basic/html/esm2022/html.directive.mjs +14 -2
- package/components/basic/html/fesm2022/index.mjs +13 -1
- package/components/basic/html/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/bundles/index.umd.js +17 -1
- package/components/basic/label/esm2022/label.directive.mjs +18 -2
- package/components/basic/label/fesm2022/index.mjs +17 -1
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/label.directive.d.ts +3 -2
- package/components/basic/progress/progress-circle/bundles/index.umd.js +10 -0
- package/components/basic/progress/progress-circle/esm2022/progress-circle.component.mjs +11 -1
- package/components/basic/progress/progress-circle/fesm2022/index.mjs +10 -0
- package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -1
- package/components/basic/progress/progress-circle/progress-circle.component.d.ts +3 -2
- package/components/basic/search/bundles/index.umd.js +42 -14
- package/components/basic/search/esm2022/scrollable.directive.mjs +13 -4
- package/components/basic/search/esm2022/search.component.mjs +31 -12
- package/components/basic/search/fesm2022/index.mjs +42 -14
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/scrollable.directive.d.ts +5 -3
- package/components/basic/search/search.component.d.ts +3 -2
- package/components/basic/spinner/bundles/index.umd.js +9 -1
- package/components/basic/spinner/esm2022/spinner.component.mjs +10 -2
- package/components/basic/spinner/fesm2022/index.mjs +9 -1
- package/components/basic/spinner/fesm2022/index.mjs.map +1 -1
- package/components/basic/spinner/spinner.component.d.ts +4 -2
- package/components/chart/bundles/index.umd.js +21 -3
- package/components/chart/esm2022/chart.component.mjs +22 -4
- package/components/chart/fesm2022/index.mjs +21 -3
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +3 -2
- package/components/containers/accordion/accordion.directive.d.ts +5 -2
- package/components/containers/accordion/bundles/index.umd.js +49 -2
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +10 -1
- package/components/containers/accordion/esm2022/accordion.directive.mjs +41 -3
- package/components/containers/accordion/fesm2022/index.mjs +49 -2
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/bundles/index.umd.js +13 -0
- package/components/containers/panel/esm2022/panel.component.mjs +14 -1
- package/components/containers/panel/fesm2022/index.mjs +13 -0
- package/components/containers/panel/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/panel.component.d.ts +3 -2
- package/components/containers/tabs/bundles/index.umd.js +54 -2
- package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +10 -1
- package/components/containers/tabs/esm2022/tabs.component.mjs +46 -3
- package/components/containers/tabs/fesm2022/index.mjs +54 -2
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +3 -2
- package/components/containers/tabs/tabs.component.d.ts +5 -2
- package/components/containers/wizard/bundles/index.umd.js +47 -3
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +16 -3
- package/components/containers/wizard/esm2022/wizard.component.mjs +33 -2
- package/components/containers/wizard/fesm2022/index.mjs +47 -3
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +3 -2
- package/components/containers/wizard/wizard.component.d.ts +4 -2
- package/components/data/card/bundles/index.umd.js +17 -1
- package/components/data/card/card-content/card-content.component.d.ts +3 -2
- package/components/data/card/card.component.d.ts +4 -2
- package/components/data/card/esm2022/card-content/card-content.component.mjs +6 -1
- package/components/data/card/esm2022/card.component.mjs +13 -2
- package/components/data/card/fesm2022/index.mjs +17 -1
- package/components/data/card/fesm2022/index.mjs.map +1 -1
- package/components/data/form/bundles/index.umd.js +92 -0
- package/components/data/form/esm2022/form-action/form-action.directive.mjs +7 -1
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +28 -1
- package/components/data/form/esm2022/form-widget.directive.mjs +8 -1
- package/components/data/form/esm2022/form.component.mjs +27 -1
- package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +7 -1
- package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +12 -1
- package/components/data/form/esm2022/live-form/live-form.directive.mjs +10 -1
- package/components/data/form/fesm2022/index.mjs +92 -0
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/form/form-action/form-action.directive.d.ts +3 -2
- package/components/data/form/form-field/form-field.directive.d.ts +3 -2
- package/components/data/form/form-widget.directive.d.ts +3 -2
- package/components/data/form/live-actions/live-actions.directive.d.ts +3 -1
- package/components/data/form/live-filter/live-filter.directive.d.ts +3 -1
- package/components/data/form/live-form/live-form.directive.d.ts +3 -1
- package/components/data/list/bundles/index.umd.js +213 -19
- package/components/data/list/esm2022/list-item.directive.mjs +95 -11
- package/components/data/list/esm2022/list.component.mjs +120 -10
- package/components/data/list/fesm2022/index.mjs +213 -19
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/list/list-item.directive.d.ts +7 -2
- package/components/data/list/list.component.d.ts +7 -0
- package/components/data/live-table/bundles/index.umd.js +13 -1
- package/components/data/live-table/esm2022/live-table.component.mjs +14 -2
- package/components/data/live-table/fesm2022/index.mjs +13 -1
- package/components/data/live-table/fesm2022/index.mjs.map +1 -1
- package/components/data/live-table/live-table.component.d.ts +4 -2
- package/components/data/pagination/bundles/index.umd.js +57 -4
- package/components/data/pagination/esm2022/pagination.component.mjs +58 -5
- package/components/data/pagination/fesm2022/index.mjs +57 -4
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/pagination.component.d.ts +4 -2
- package/components/data/table/bundles/index.umd.js +345 -15
- package/components/data/table/esm2022/table-action/table-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table-column/table-column.directive.mjs +107 -3
- package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +9 -1
- package/components/data/table/esm2022/table-cud.directive.mjs +8 -2
- package/components/data/table/esm2022/table-filter.directive.mjs +12 -2
- package/components/data/table/esm2022/table-row/table-row.directive.mjs +8 -1
- package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table.component.mjs +193 -12
- package/components/data/table/fesm2022/index.mjs +345 -15
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table-action/table-action.directive.d.ts +3 -2
- package/components/data/table/table-column/table-column.directive.d.ts +3 -2
- package/components/data/table/table-column-group/table-column-group.directive.d.ts +3 -2
- package/components/data/table/table-cud.directive.d.ts +3 -1
- package/components/data/table/table-filter.directive.d.ts +3 -1
- package/components/data/table/table-row/table-row.directive.d.ts +3 -2
- package/components/data/table/table-row-action/table-row-action.directive.d.ts +3 -2
- package/components/data/table/table.component.d.ts +6 -2
- package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +3 -2
- package/components/dialogs/alert-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +6 -1
- package/components/dialogs/alert-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/confirm-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +3 -2
- package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +6 -1
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/default/bundles/index.umd.js +15 -2
- package/components/dialogs/default/dialog-body/dialog-body.directive.d.ts +4 -2
- package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +16 -3
- package/components/dialogs/default/fesm2022/index.mjs +15 -2
- package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/design-dialog/bundles/index.umd.js +7 -0
- package/components/dialogs/design-dialog/dialog.component.d.ts +3 -2
- package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +8 -1
- package/components/dialogs/design-dialog/fesm2022/index.mjs +7 -0
- package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +6 -1
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +3 -2
- package/components/dialogs/partial-dialog/bundles/index.umd.js +23 -3
- package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +24 -4
- package/components/dialogs/partial-dialog/fesm2022/index.mjs +23 -3
- package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +4 -2
- package/components/input/base-form/base-form.component.d.ts +4 -2
- package/components/input/base-form/bundles/index.umd.js +16 -2
- package/components/input/base-form/esm2022/base-form.component.mjs +17 -3
- package/components/input/base-form/fesm2022/index.mjs +16 -2
- package/components/input/base-form/fesm2022/index.mjs.map +1 -1
- package/components/input/base-form-custom/base-form-custom.component.d.ts +3 -2
- package/components/input/base-form-custom/bundles/index.umd.js +13 -2
- package/components/input/base-form-custom/esm2022/base-form-custom.component.mjs +14 -3
- package/components/input/base-form-custom/fesm2022/index.mjs +13 -2
- package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -1
- package/components/input/checkbox/bundles/index.umd.js +7 -0
- package/components/input/checkbox/checkbox.component.d.ts +3 -2
- package/components/input/checkbox/esm2022/checkbox.component.mjs +8 -1
- package/components/input/checkbox/fesm2022/index.mjs +7 -0
- package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
- package/components/input/checkboxset/bundles/index.umd.js +18 -2
- package/components/input/checkboxset/checkboxset.component.d.ts +4 -2
- package/components/input/checkboxset/esm2022/checkboxset.component.mjs +19 -3
- package/components/input/checkboxset/fesm2022/index.mjs +18 -2
- package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
- package/components/input/chips/bundles/index.umd.js +45 -5
- package/components/input/chips/chips.component.d.ts +3 -2
- package/components/input/chips/esm2022/chips.component.mjs +46 -6
- package/components/input/chips/fesm2022/index.mjs +45 -5
- package/components/input/chips/fesm2022/index.mjs.map +1 -1
- package/components/input/color-picker/bundles/index.umd.js +8 -0
- package/components/input/color-picker/color-picker.component.d.ts +3 -2
- package/components/input/color-picker/esm2022/color-picker.component.mjs +9 -1
- package/components/input/color-picker/fesm2022/index.mjs +8 -0
- package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
- package/components/input/composite/bundles/index.umd.js +10 -1
- package/components/input/composite/composite.directive.d.ts +3 -2
- package/components/input/composite/esm2022/composite.directive.mjs +11 -2
- package/components/input/composite/fesm2022/index.mjs +10 -1
- package/components/input/composite/fesm2022/index.mjs.map +1 -1
- package/components/input/currency/bundles/index.umd.js +7 -0
- package/components/input/currency/currency.component.d.ts +3 -2
- package/components/input/currency/esm2022/currency.component.mjs +8 -1
- package/components/input/currency/fesm2022/index.mjs +7 -0
- package/components/input/currency/fesm2022/index.mjs.map +1 -1
- package/components/input/dataset-aware-form/bundles/index.umd.js +26 -2
- package/components/input/dataset-aware-form/esm2022/dataset-aware-form.component.mjs +27 -3
- package/components/input/dataset-aware-form/fesm2022/index.mjs +26 -2
- package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/date/bundles/index.umd.js +22 -0
- package/components/input/epoch/date/date.component.d.ts +1 -0
- package/components/input/epoch/date/esm2022/date.component.mjs +23 -1
- package/components/input/epoch/date/fesm2022/index.mjs +22 -0
- package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/bundles/index.umd.js +25 -8
- package/components/input/file-upload/esm2022/file-upload.component.mjs +26 -9
- package/components/input/file-upload/fesm2022/index.mjs +25 -8
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/file-upload.component.d.ts +3 -0
- package/components/input/number/bundles/index.umd.js +8 -0
- package/components/input/number/esm2022/number.component.mjs +9 -1
- package/components/input/number/fesm2022/index.mjs +8 -0
- package/components/input/number/fesm2022/index.mjs.map +1 -1
- package/components/input/number/number.component.d.ts +3 -2
- package/components/input/radioset/bundles/index.umd.js +18 -2
- package/components/input/radioset/esm2022/radioset.component.mjs +19 -3
- package/components/input/radioset/fesm2022/index.mjs +18 -2
- package/components/input/radioset/fesm2022/index.mjs.map +1 -1
- package/components/input/radioset/radioset.component.d.ts +4 -2
- package/components/input/rating/bundles/index.umd.js +10 -0
- package/components/input/rating/esm2022/rating.component.mjs +11 -1
- package/components/input/rating/fesm2022/index.mjs +10 -0
- package/components/input/rating/fesm2022/index.mjs.map +1 -1
- package/components/input/rating/rating.component.d.ts +3 -2
- package/components/input/select/bundles/index.umd.js +6 -0
- package/components/input/select/esm2022/select.component.mjs +7 -1
- package/components/input/select/fesm2022/index.mjs +6 -0
- package/components/input/select/fesm2022/index.mjs.map +1 -1
- package/components/input/select/select.component.d.ts +3 -2
- package/components/input/slider/bundles/index.umd.js +10 -0
- package/components/input/slider/esm2022/slider.component.mjs +11 -1
- package/components/input/slider/fesm2022/index.mjs +10 -0
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/slider.component.d.ts +3 -2
- package/components/input/switch/bundles/index.umd.js +22 -2
- package/components/input/switch/esm2022/switch.component.mjs +23 -3
- package/components/input/switch/fesm2022/index.mjs +22 -2
- package/components/input/switch/fesm2022/index.mjs.map +1 -1
- package/components/input/switch/switch.component.d.ts +3 -2
- package/components/input/text/bundles/index.umd.js +36 -0
- package/components/input/text/esm2022/input-calendar/input-calendar.component.mjs +8 -1
- package/components/input/text/esm2022/input-color/input-color.component.mjs +8 -1
- package/components/input/text/esm2022/input-email/input-email.component.mjs +8 -1
- package/components/input/text/esm2022/input-number/input-number.component.mjs +8 -1
- package/components/input/text/esm2022/input-text/input-text.component.mjs +9 -1
- package/components/input/text/fesm2022/index.mjs +36 -0
- package/components/input/text/fesm2022/index.mjs.map +1 -1
- package/components/input/text/input-calendar/input-calendar.component.d.ts +3 -2
- package/components/input/text/input-color/input-color.component.d.ts +3 -2
- package/components/input/text/input-email/input-email.component.d.ts +3 -2
- package/components/input/text/input-number/input-number.component.d.ts +3 -2
- package/components/input/text/input-text/input-text.component.d.ts +3 -2
- package/components/input/textarea/bundles/index.umd.js +7 -0
- package/components/input/textarea/esm2022/textarea.component.mjs +8 -1
- package/components/input/textarea/fesm2022/index.mjs +7 -0
- package/components/input/textarea/fesm2022/index.mjs.map +1 -1
- package/components/input/textarea/textarea.component.d.ts +3 -2
- package/components/navigation/menu/bundles/index.umd.js +55 -6
- package/components/navigation/menu/esm2022/menu-adapator.component.mjs +17 -3
- package/components/navigation/menu/esm2022/menu.component.mjs +10 -3
- package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +6 -1
- package/components/navigation/menu/esm2022/nav/nav.component.mjs +11 -1
- package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +16 -3
- package/components/navigation/menu/fesm2022/index.mjs +55 -6
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/menu-adapator.component.d.ts +4 -2
- package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +3 -2
- package/components/navigation/menu/nav/nav.component.d.ts +3 -2
- package/components/navigation/menu/nav/navigation-control.directive.d.ts +4 -2
- package/components/navigation/navbar/bundles/index.umd.js +5 -0
- package/components/navigation/navbar/esm2022/navbar.component.mjs +6 -1
- package/components/navigation/navbar/fesm2022/index.mjs +5 -0
- package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
- package/components/navigation/navbar/navbar.component.d.ts +3 -2
- package/components/navigation/popover/bundles/index.umd.js +65 -13
- package/components/navigation/popover/esm2022/popover.component.mjs +63 -11
- package/components/navigation/popover/fesm2022/index.mjs +62 -10
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +11 -3
- package/components/page/default/bundles/index.umd.js +30 -6
- package/components/page/default/esm2022/layout.directive.mjs +9 -1
- package/components/page/default/esm2022/page-content/page-content.component.mjs +13 -3
- package/components/page/default/esm2022/router-outlet.directive.mjs +13 -6
- package/components/page/default/fesm2022/index.mjs +30 -6
- package/components/page/default/fesm2022/index.mjs.map +1 -1
- package/components/page/default/layout.directive.d.ts +3 -2
- package/components/page/default/page-content/page-content.component.d.ts +3 -2
- package/components/page/default/router-outlet.directive.d.ts +5 -2
- package/components/page/left-panel/bundles/index.umd.js +16 -0
- package/components/page/left-panel/esm2022/left-panel.directive.mjs +17 -1
- package/components/page/left-panel/fesm2022/index.mjs +16 -0
- package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
- package/components/page/left-panel/left-panel.directive.d.ts +3 -2
- package/components/page/top-nav/bundles/index.umd.js +2 -1
- package/components/page/top-nav/esm2022/top-nav.props.mjs +3 -2
- package/components/page/top-nav/fesm2022/index.mjs +2 -1
- package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
- package/components/prefab/bundles/index.umd.js +4 -0
- package/components/prefab/esm2022/prefab.directive.mjs +5 -1
- package/components/prefab/fesm2022/index.mjs +4 -0
- package/components/prefab/fesm2022/index.mjs.map +1 -1
- package/core/bundles/index.umd.js +391 -94
- package/core/esm2022/public_api.mjs +3 -3
- package/core/esm2022/services/viewport.service.mjs +24 -10
- package/core/esm2022/types/types.mjs +1 -1
- package/core/esm2022/utils/dom.mjs +18 -2
- package/core/esm2022/utils/event-notifier.mjs +5 -2
- package/core/esm2022/utils/lru-cache.mjs +16 -2
- package/core/esm2022/utils/utils.mjs +6 -2
- package/core/esm2022/utils/watcher.mjs +323 -81
- package/core/fesm2022/index.mjs +390 -96
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +2 -2
- package/core/services/viewport.service.d.ts +5 -2
- package/core/types/types.d.ts +1 -0
- package/core/utils/lru-cache.d.ts +6 -0
- package/core/utils/utils.d.ts +1 -0
- package/core/utils/watcher.d.ts +26 -5
- package/http/bundles/index.umd.js +31 -1
- package/http/esm2022/http.service.mjs +32 -2
- package/http/fesm2022/index.mjs +31 -1
- package/http/fesm2022/index.mjs.map +1 -1
- package/http/http.service.d.ts +6 -2
- package/npm-shrinkwrap.json +2 -2
- package/oAuth/bundles/index.umd.js +9 -0
- package/oAuth/esm2022/oAuth.service.mjs +10 -1
- package/oAuth/fesm2022/index.mjs +9 -0
- package/oAuth/fesm2022/index.mjs.map +1 -1
- package/oAuth/oAuth.service.d.ts +3 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +367 -32
- package/runtime/base/components/app-component/app.component.d.ts +4 -0
- package/runtime/base/components/prefab-preview.component.d.ts +5 -2
- package/runtime/base/directives/accessroles.directive.d.ts +4 -3
- package/runtime/base/directives/prefab.directive.d.ts +3 -2
- package/runtime/base/esm2022/components/app-component/app.component.mjs +40 -9
- package/runtime/base/esm2022/components/base-custom-widget.component.mjs +33 -2
- package/runtime/base/esm2022/components/base-layout.component.mjs +7 -1
- package/runtime/base/esm2022/components/base-page.component.mjs +36 -3
- package/runtime/base/esm2022/components/base-partial.component.mjs +37 -3
- package/runtime/base/esm2022/components/base-prefab.component.mjs +32 -3
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +37 -3
- package/runtime/base/esm2022/components/prefab-preview.component.mjs +23 -4
- package/runtime/base/esm2022/directives/accessroles.directive.mjs +11 -2
- package/runtime/base/esm2022/directives/prefab.directive.mjs +9 -1
- package/runtime/base/esm2022/services/app.manager.service.mjs +40 -12
- package/runtime/base/esm2022/services/app.service.mjs +34 -2
- package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +4 -1
- package/runtime/base/esm2022/services/pipe-provider.service.mjs +7 -4
- package/runtime/base/esm2022/services/spinner.service.mjs +15 -1
- package/runtime/base/esm2022/util/fragment-monitor.mjs +23 -2
- package/runtime/base/fesm2022/index.mjs +368 -33
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/base/runtime-base.module.d.ts +2 -2
- package/runtime/base/services/app.manager.service.d.ts +6 -1
- package/runtime/base/services/app.service.d.ts +12 -2
- package/runtime/base/services/dynamic-component-ref-provider.service.d.ts +2 -1
- package/runtime/base/services/spinner.service.d.ts +3 -1
- package/runtime/base/util/fragment-monitor.d.ts +6 -0
- package/runtime/dynamic/bundles/index.umd.js +5 -0
- package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +6 -1
- package/runtime/dynamic/fesm2022/index.mjs +5 -0
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- package/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
- package/scripts/datatable/datatable.js +100 -14
- package/security/bundles/index.umd.js +41 -2
- package/security/esm2022/security.service.mjs +42 -3
- package/security/fesm2022/index.mjs +41 -2
- package/security/fesm2022/index.mjs.map +1 -1
- package/security/security.service.d.ts +5 -2
- package/variables/bundles/index.umd.js +50 -6
- package/variables/esm2022/manager/action/notification-action.manager.mjs +18 -3
- package/variables/esm2022/manager/variable/base-variable.manager.mjs +15 -2
- package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +13 -3
- package/variables/esm2022/service/variables.service.mjs +8 -2
- package/variables/fesm2022/index.mjs +50 -6
- package/variables/fesm2022/index.mjs.map +1 -1
|
@@ -507,7 +507,22 @@ $.widget('wm.datatable', {
|
|
|
507
507
|
|
|
508
508
|
/* function to get start index of the current active page */
|
|
509
509
|
getPageStartIndex: function() {
|
|
510
|
-
|
|
510
|
+
// Guard against undefined getCurrentPage or getPageSize functions
|
|
511
|
+
var getCurrentPageFn = this.options.getCurrentPage;
|
|
512
|
+
var getPageSizeFn = this.options.getPageSize;
|
|
513
|
+
var currentPage, pagesize;
|
|
514
|
+
if (!getCurrentPageFn || typeof getCurrentPageFn !== 'function') {
|
|
515
|
+
// Default to page 1 if getCurrentPage is not available
|
|
516
|
+
currentPage = 1;
|
|
517
|
+
} else {
|
|
518
|
+
currentPage = getCurrentPageFn();
|
|
519
|
+
}
|
|
520
|
+
if (!getPageSizeFn || typeof getPageSizeFn !== 'function') {
|
|
521
|
+
// Default to 10 if getPageSize is not available
|
|
522
|
+
pagesize = 10;
|
|
523
|
+
} else {
|
|
524
|
+
pagesize = getPageSizeFn();
|
|
525
|
+
}
|
|
511
526
|
var isPrevPageUpdated = this.options.actionRowPage < currentPage;
|
|
512
527
|
var pageIndex = isPrevPageUpdated ? this.options.actionRowPage : currentPage;
|
|
513
528
|
return ((pageIndex - 1) * pagesize);
|
|
@@ -568,6 +583,8 @@ $.widget('wm.datatable', {
|
|
|
568
583
|
var self = this, preparedData,$tbody,pageStartIndex = self.getPageStartIndex(),
|
|
569
584
|
startRowIndex = self.options.startRowIndex,
|
|
570
585
|
isScrollorOnDemand = self.options.isNavTypeScrollOrOndemand();
|
|
586
|
+
var $activeRow = self.gridElement.find('tr.row-editing:not(.always-new-row)').first();
|
|
587
|
+
var index = $activeRow.index();
|
|
571
588
|
if(isScrollorOnDemand) {
|
|
572
589
|
$tbody = this.gridElement;
|
|
573
590
|
if(this.renderTableOnViewLess) {
|
|
@@ -623,6 +640,16 @@ $.widget('wm.datatable', {
|
|
|
623
640
|
this.options.setIsDataUpdatedByUser(false);
|
|
624
641
|
this.options.clearActionRowIndex();
|
|
625
642
|
}
|
|
643
|
+
if(this.options.editmode===this.CONSTANTS.QUICK_EDIT){
|
|
644
|
+
if (index>=0) {
|
|
645
|
+
const $newActiveRow = self.gridElement.find('tr').eq(index);
|
|
646
|
+
if ($newActiveRow && $newActiveRow.length) {
|
|
647
|
+
$newActiveRow.addClass('active');
|
|
648
|
+
$newActiveRow.trigger('click', [undefined, {action: 'edit', skipFocus:false}]);
|
|
649
|
+
self.setActiveRow($newActiveRow);
|
|
650
|
+
self.focusActiveRow();
|
|
651
|
+
}
|
|
652
|
+
}}
|
|
626
653
|
return $tbody;
|
|
627
654
|
},
|
|
628
655
|
|
|
@@ -1042,7 +1069,9 @@ $.widget('wm.datatable', {
|
|
|
1042
1069
|
'value': '',
|
|
1043
1070
|
'event': null
|
|
1044
1071
|
},
|
|
1045
|
-
compiledCellTemplates: {}
|
|
1072
|
+
compiledCellTemplates: {},
|
|
1073
|
+
// MEMORY LEAK FIX: Store bound function for proper event listener cleanup
|
|
1074
|
+
boundRowClickHandlerOnCapture: null
|
|
1046
1075
|
});
|
|
1047
1076
|
// TODO: Variable loading status is getting updated before dataset update. This is resulting in loader going off before data is rendered.
|
|
1048
1077
|
// Need to update code with suitable fix. For now 250ms is added as workaround
|
|
@@ -1264,7 +1293,9 @@ $.widget('wm.datatable', {
|
|
|
1264
1293
|
this.element.find('.loading-data-msg').hide();
|
|
1265
1294
|
this.element.find('.on-demand-load-btn').text(this.options.ondemandmessage);
|
|
1266
1295
|
this.element.find('.on-demand-load-btn').show();
|
|
1267
|
-
} else if(
|
|
1296
|
+
} else if(this.options.getCurrentPage && typeof this.options.getCurrentPage === 'function' &&
|
|
1297
|
+
this.options.getPageCount && typeof this.options.getPageCount === 'function' &&
|
|
1298
|
+
(this.options.getCurrentPage() == this.options.getPageCount()) && this.options.showviewlessbutton) {
|
|
1268
1299
|
this.element.find('.on-demand-load-btn').show().text(this.options.viewlessmessage);
|
|
1269
1300
|
this.element.find('.loading-data-msg').hide();
|
|
1270
1301
|
if(infScroll) {
|
|
@@ -1652,8 +1683,8 @@ $.widget('wm.datatable', {
|
|
|
1652
1683
|
},
|
|
1653
1684
|
|
|
1654
1685
|
/* Selects a row. */
|
|
1655
|
-
selectRow: function (row, value) {
|
|
1656
|
-
var rowIndex = _.isNumber(row) ? row : this.Utils.getObjectIndex(this.options.data, row),
|
|
1686
|
+
selectRow: function (row, value,index) {
|
|
1687
|
+
var rowIndex =index?index:( _.isNumber(row) ? row : this.Utils.getObjectIndex(this.options.data, row)),
|
|
1657
1688
|
selector,
|
|
1658
1689
|
$row;
|
|
1659
1690
|
if (rowIndex !== -1) {
|
|
@@ -2078,10 +2109,11 @@ $.widget('wm.datatable', {
|
|
|
2078
2109
|
});
|
|
2079
2110
|
|
|
2080
2111
|
$editableElements = $row.find('td.cell-editing');
|
|
2081
|
-
|
|
2112
|
+
// PERFORMANCE FIX: Use event delegation on row instead of individual cell listeners
|
|
2113
|
+
$row.on('click.cellEdit', 'td.cell-editing', function (e) {
|
|
2082
2114
|
e.stopPropagation();
|
|
2083
2115
|
});
|
|
2084
|
-
$
|
|
2116
|
+
$row.on('keydown.cellEdit', 'td.cell-editing', function (e) {
|
|
2085
2117
|
//To prevent up and down arrows, navigating to other rows in edit mode
|
|
2086
2118
|
if ((e.which === 38 || e.which === 40) && (e.currentTarget && !e.currentTarget.closest('.always-new-row'))) {
|
|
2087
2119
|
e.stopPropagation();
|
|
@@ -2150,7 +2182,8 @@ $.widget('wm.datatable', {
|
|
|
2150
2182
|
$requiredEls,
|
|
2151
2183
|
alwaysNewRow = $row.hasClass('always-new-row'),
|
|
2152
2184
|
advancedEdit = self.options.editmode === self.CONSTANTS.QUICK_EDIT,
|
|
2153
|
-
editOptions = {}
|
|
2185
|
+
editOptions = {},
|
|
2186
|
+
rowindex=$row.attr('data-row-id');
|
|
2154
2187
|
|
|
2155
2188
|
// when a row is edited set actionrow variables
|
|
2156
2189
|
this.options.setActionRowIndex($row.attr('data-row-id'));
|
|
@@ -2172,7 +2205,7 @@ $.widget('wm.datatable', {
|
|
|
2172
2205
|
}
|
|
2173
2206
|
//Select the current edited row
|
|
2174
2207
|
if (options.selectRow) {
|
|
2175
|
-
this.selectRow(rowData, true);
|
|
2208
|
+
this.selectRow(rowData, true,rowindex);
|
|
2176
2209
|
}
|
|
2177
2210
|
e = e || {};
|
|
2178
2211
|
e.data = e.data || {};
|
|
@@ -2327,6 +2360,9 @@ $.widget('wm.datatable', {
|
|
|
2327
2360
|
return;
|
|
2328
2361
|
}
|
|
2329
2362
|
}
|
|
2363
|
+
if(this.options?.getDataSource()?.category== "wm.Variable") {
|
|
2364
|
+
editOptions.rowindex = rowindex;
|
|
2365
|
+
}
|
|
2330
2366
|
this.options.afterRowUpdate(rowData, e, onSaveSuccess, editOptions);
|
|
2331
2367
|
}
|
|
2332
2368
|
} else {
|
|
@@ -2363,6 +2399,8 @@ $.widget('wm.datatable', {
|
|
|
2363
2399
|
|
|
2364
2400
|
this.disableActions(false);
|
|
2365
2401
|
$row.removeClass('row-editing');
|
|
2402
|
+
// PERFORMANCE FIX: Remove namespaced event listeners from row
|
|
2403
|
+
$row.off('.cellEdit');
|
|
2366
2404
|
$editableElements.off('click');
|
|
2367
2405
|
$editableElements.each(function () {
|
|
2368
2406
|
var $el = $(this),
|
|
@@ -2411,6 +2449,8 @@ $.widget('wm.datatable', {
|
|
|
2411
2449
|
$saveButton = $row.find('.save-edit-row-button'),
|
|
2412
2450
|
self = this;
|
|
2413
2451
|
$row.removeClass('row-editing');
|
|
2452
|
+
// PERFORMANCE FIX: Remove namespaced event listeners from row
|
|
2453
|
+
$row.off('.cellEdit');
|
|
2414
2454
|
$editableElements.off('click');
|
|
2415
2455
|
this.disableActions(false);
|
|
2416
2456
|
this._setGridEditMode(false);
|
|
@@ -2858,9 +2898,16 @@ $.widget('wm.datatable', {
|
|
|
2858
2898
|
self = this;
|
|
2859
2899
|
|
|
2860
2900
|
if (this.options.enableRowSelection) {
|
|
2861
|
-
|
|
2901
|
+
// MEMORY LEAK FIX: Remove old listener if exists before adding new one
|
|
2902
|
+
if (this.boundRowClickHandlerOnCapture && $htm[0]) {
|
|
2903
|
+
$htm[0].removeEventListener('click', this.boundRowClickHandlerOnCapture, true);
|
|
2904
|
+
}
|
|
2862
2905
|
$htm.off();
|
|
2863
|
-
|
|
2906
|
+
|
|
2907
|
+
// MEMORY LEAK FIX: Store bound function reference for proper removal
|
|
2908
|
+
this.boundRowClickHandlerOnCapture = this.rowClickHandlerOnCapture.bind(this);
|
|
2909
|
+
$htm[0].addEventListener('click', this.boundRowClickHandlerOnCapture, true);
|
|
2910
|
+
|
|
2864
2911
|
// add js click handler for capture phase in order to first listen on grid and
|
|
2865
2912
|
// assign selectedItems so that any child actions can have access to the selectedItems.
|
|
2866
2913
|
$htm.on('click', this.rowSelectionHandler.bind(this));
|
|
@@ -2906,6 +2953,9 @@ $.widget('wm.datatable', {
|
|
|
2906
2953
|
$htm.on('focus', 'tr.app-datagrid-row', function (e) {
|
|
2907
2954
|
var $row = $(e.currentTarget);
|
|
2908
2955
|
if (!$row.hasClass('row-editing')) {
|
|
2956
|
+
if(e.target===e.currentTarget && (e.which===0||!e.which)) {
|
|
2957
|
+
return;
|
|
2958
|
+
}
|
|
2909
2959
|
self.toggleEditRow(e, { $row: $row, action: 'edit'});
|
|
2910
2960
|
}
|
|
2911
2961
|
});
|
|
@@ -3494,7 +3544,11 @@ $.widget('wm.datatable', {
|
|
|
3494
3544
|
this.dataStatusContainer.hide();
|
|
3495
3545
|
} else {
|
|
3496
3546
|
// [WMS-23839] always show load more btn if show view less btn is true
|
|
3497
|
-
if (this.options.isNavTypeScrollOrOndemand() &&
|
|
3547
|
+
if (this.options.isNavTypeScrollOrOndemand() &&
|
|
3548
|
+
(state === 'nodata' ||
|
|
3549
|
+
(this.options.getCurrentPage && typeof this.options.getCurrentPage === 'function' &&
|
|
3550
|
+
this.options.getPageCount && typeof this.options.getPageCount === 'function' &&
|
|
3551
|
+
(this.options.getCurrentPage() == this.options.getPageCount()) && !this.options.showviewlessbutton))) {
|
|
3498
3552
|
this.element.find('.on-demand-datagrid a').hide();
|
|
3499
3553
|
}
|
|
3500
3554
|
this.dataStatusContainer.show();
|
|
@@ -3504,7 +3558,9 @@ $.widget('wm.datatable', {
|
|
|
3504
3558
|
if (state === 'nodata') {
|
|
3505
3559
|
this.dataStatusContainer.css('height', 'auto');
|
|
3506
3560
|
this.dataStatus.contentHeight = 0;
|
|
3507
|
-
} else if (this.options.isNavTypeScrollOrOndemand() &&
|
|
3561
|
+
} else if (this.options.isNavTypeScrollOrOndemand() &&
|
|
3562
|
+
this.options.getCurrentPage && typeof this.options.getCurrentPage === 'function' &&
|
|
3563
|
+
this.options.getCurrentPage() > 1){
|
|
3508
3564
|
// showing the loading icon only for the first page
|
|
3509
3565
|
// from second page there is another loader which is being shown instead of LoadMore btn
|
|
3510
3566
|
this.dataStatusContainer.hide();
|
|
@@ -3514,7 +3570,9 @@ $.widget('wm.datatable', {
|
|
|
3514
3570
|
this.dataStatusContainer.css('height', this.dataStatus.height > this.dataStatus.contentHeight ? 'auto' : this.dataStatus.contentHeight);
|
|
3515
3571
|
}
|
|
3516
3572
|
}
|
|
3517
|
-
if (!isScrollOrOndemand || (isScrollOrOndemand &&
|
|
3573
|
+
if (!isScrollOrOndemand || (isScrollOrOndemand &&
|
|
3574
|
+
this.options.getCurrentPage && typeof this.options.getCurrentPage === 'function' &&
|
|
3575
|
+
this.options.getCurrentPage() === 1)) {
|
|
3518
3576
|
this.gridContainer.addClass("show-msg");
|
|
3519
3577
|
}
|
|
3520
3578
|
} else {
|
|
@@ -3633,6 +3691,34 @@ $.widget('wm.datatable', {
|
|
|
3633
3691
|
},
|
|
3634
3692
|
|
|
3635
3693
|
_destroy: function () {
|
|
3694
|
+
// MEMORY LEAK FIX: Remove native event listener using stored bound function
|
|
3695
|
+
if (this.gridElement && this.gridElement[0] && this.boundRowClickHandlerOnCapture) {
|
|
3696
|
+
this.gridElement[0].removeEventListener('click', this.boundRowClickHandlerOnCapture, true);
|
|
3697
|
+
this.boundRowClickHandlerOnCapture = null;
|
|
3698
|
+
}
|
|
3699
|
+
|
|
3700
|
+
// MEMORY LEAK FIX: Remove all jQuery event handlers
|
|
3701
|
+
if (this.gridHeaderElement) {
|
|
3702
|
+
this.gridHeaderElement.off();
|
|
3703
|
+
}
|
|
3704
|
+
if (this.gridElement) {
|
|
3705
|
+
this.gridElement.off();
|
|
3706
|
+
}
|
|
3707
|
+
if (this.gridSearch) {
|
|
3708
|
+
this.gridSearch.off();
|
|
3709
|
+
}
|
|
3710
|
+
if (this.tableContainer) {
|
|
3711
|
+
this.tableContainer.off();
|
|
3712
|
+
}
|
|
3713
|
+
if (this.gridContainer) {
|
|
3714
|
+
this.gridContainer.off();
|
|
3715
|
+
}
|
|
3716
|
+
|
|
3717
|
+
// MEMORY LEAK FIX: Clear all internal structures
|
|
3718
|
+
this.preparedData = [];
|
|
3719
|
+
this.preparedHeaderData = [];
|
|
3720
|
+
this.compiledCellTemplates = {};
|
|
3721
|
+
|
|
3636
3722
|
this.element.text('');
|
|
3637
3723
|
window.clearTimeout(this.refreshGridTimeout);
|
|
3638
3724
|
}
|
|
@@ -36,6 +36,8 @@
|
|
|
36
36
|
this.activatedRoute = activatedRoute;
|
|
37
37
|
this._location = _location;
|
|
38
38
|
this.requestQueue = {};
|
|
39
|
+
this.queryParamsSubscriptions = []; // MEMORY LEAK FIX: Track subscriptions
|
|
40
|
+
this.appSubscriptions = []; // MEMORY LEAK FIX: Track App subscriptions
|
|
39
41
|
}
|
|
40
42
|
isLoaded() {
|
|
41
43
|
return this.config;
|
|
@@ -172,9 +174,13 @@
|
|
|
172
174
|
*/
|
|
173
175
|
getCurrentRouteQueryParam(paramName) {
|
|
174
176
|
let paramVal;
|
|
175
|
-
|
|
177
|
+
// MEMORY LEAK FIX: Store subscription for cleanup (though this is a synchronous read)
|
|
178
|
+
// Note: This method is called synchronously, so the subscription completes immediately
|
|
179
|
+
// but we still store it to be safe
|
|
180
|
+
const subscription = this.activatedRoute.queryParams.subscribe(params => {
|
|
176
181
|
paramVal = params[paramName];
|
|
177
182
|
});
|
|
183
|
+
subscription.unsubscribe(); // Immediate unsubscribe since we only need first value
|
|
178
184
|
return paramVal;
|
|
179
185
|
}
|
|
180
186
|
isNoPageLoaded() {
|
|
@@ -262,11 +268,15 @@
|
|
|
262
268
|
*/
|
|
263
269
|
getRedirectedRouteQueryParams() {
|
|
264
270
|
let queryParams = {};
|
|
265
|
-
|
|
271
|
+
// MEMORY LEAK FIX: Store subscription for cleanup (though this is a synchronous read)
|
|
272
|
+
// Note: This method is called synchronously, so the subscription completes immediately
|
|
273
|
+
// but we still store it to be safe
|
|
274
|
+
const subscription = this.activatedRoute.queryParams.subscribe((paramVal) => {
|
|
266
275
|
lodashEs.forEach(paramVal, (val, key) => {
|
|
267
276
|
queryParams[key] = val;
|
|
268
277
|
});
|
|
269
278
|
});
|
|
279
|
+
subscription.unsubscribe(); // Immediate unsubscribe since we only need first value
|
|
270
280
|
return queryParams;
|
|
271
281
|
}
|
|
272
282
|
// accepts query object like {a:1, b:2} and returns a=1&b=2 string
|
|
@@ -360,10 +370,17 @@
|
|
|
360
370
|
resolve();
|
|
361
371
|
}
|
|
362
372
|
else {
|
|
373
|
+
// MEMORY LEAK FIX: Store unsubscribe function for cleanup
|
|
363
374
|
const unsubscribe = this.injector.get(i1.App).subscribe('userLoggedIn', () => {
|
|
364
375
|
resolve();
|
|
365
376
|
unsubscribe();
|
|
377
|
+
// Remove from tracking array
|
|
378
|
+
const index = this.appSubscriptions.indexOf(unsubscribe);
|
|
379
|
+
if (index > -1) {
|
|
380
|
+
this.appSubscriptions.splice(index, 1);
|
|
381
|
+
}
|
|
366
382
|
});
|
|
383
|
+
this.appSubscriptions.push(unsubscribe);
|
|
367
384
|
}
|
|
368
385
|
}
|
|
369
386
|
else {
|
|
@@ -395,6 +412,28 @@
|
|
|
395
412
|
authInBrowser() {
|
|
396
413
|
return Promise.reject('This authInBrowser should not be called');
|
|
397
414
|
}
|
|
415
|
+
ngOnDestroy() {
|
|
416
|
+
// MEMORY LEAK FIX: Unsubscribe from all query params subscriptions
|
|
417
|
+
this.queryParamsSubscriptions.forEach(sub => {
|
|
418
|
+
if (sub && sub.unsubscribe) {
|
|
419
|
+
sub.unsubscribe();
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
this.queryParamsSubscriptions = [];
|
|
423
|
+
// MEMORY LEAK FIX: Unsubscribe from all App subscriptions
|
|
424
|
+
this.appSubscriptions.forEach(unsubscribe => {
|
|
425
|
+
if (unsubscribe) {
|
|
426
|
+
unsubscribe();
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
this.appSubscriptions = [];
|
|
430
|
+
// MEMORY LEAK FIX: Clear references
|
|
431
|
+
this.config = null;
|
|
432
|
+
this.lastLoggedInUser = null;
|
|
433
|
+
this.loggedInUser = null;
|
|
434
|
+
this.requestQueue = null;
|
|
435
|
+
this.loadPromise = null;
|
|
436
|
+
}
|
|
398
437
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: SecurityService, deps: [{ token: i0__namespace.Injector }, { token: i1__namespace.AbstractHttpService }, { token: i2__namespace.Router }, { token: i2__namespace.ActivatedRoute }, { token: i3__namespace.Location }], target: i0__namespace.ɵɵFactoryTarget.Injectable }); }
|
|
399
438
|
static { this.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: SecurityService }); }
|
|
400
439
|
}
|
|
@@ -17,6 +17,8 @@ export class SecurityService {
|
|
|
17
17
|
this.activatedRoute = activatedRoute;
|
|
18
18
|
this._location = _location;
|
|
19
19
|
this.requestQueue = {};
|
|
20
|
+
this.queryParamsSubscriptions = []; // MEMORY LEAK FIX: Track subscriptions
|
|
21
|
+
this.appSubscriptions = []; // MEMORY LEAK FIX: Track App subscriptions
|
|
20
22
|
}
|
|
21
23
|
isLoaded() {
|
|
22
24
|
return this.config;
|
|
@@ -156,9 +158,13 @@ export class SecurityService {
|
|
|
156
158
|
*/
|
|
157
159
|
getCurrentRouteQueryParam(paramName) {
|
|
158
160
|
let paramVal;
|
|
159
|
-
|
|
161
|
+
// MEMORY LEAK FIX: Store subscription for cleanup (though this is a synchronous read)
|
|
162
|
+
// Note: This method is called synchronously, so the subscription completes immediately
|
|
163
|
+
// but we still store it to be safe
|
|
164
|
+
const subscription = this.activatedRoute.queryParams.subscribe(params => {
|
|
160
165
|
paramVal = params[paramName];
|
|
161
166
|
});
|
|
167
|
+
subscription.unsubscribe(); // Immediate unsubscribe since we only need first value
|
|
162
168
|
return paramVal;
|
|
163
169
|
}
|
|
164
170
|
isNoPageLoaded() {
|
|
@@ -255,11 +261,15 @@ export class SecurityService {
|
|
|
255
261
|
*/
|
|
256
262
|
getRedirectedRouteQueryParams() {
|
|
257
263
|
let queryParams = {};
|
|
258
|
-
|
|
264
|
+
// MEMORY LEAK FIX: Store subscription for cleanup (though this is a synchronous read)
|
|
265
|
+
// Note: This method is called synchronously, so the subscription completes immediately
|
|
266
|
+
// but we still store it to be safe
|
|
267
|
+
const subscription = this.activatedRoute.queryParams.subscribe((paramVal) => {
|
|
259
268
|
forEach(paramVal, (val, key) => {
|
|
260
269
|
queryParams[key] = val;
|
|
261
270
|
});
|
|
262
271
|
});
|
|
272
|
+
subscription.unsubscribe(); // Immediate unsubscribe since we only need first value
|
|
263
273
|
return queryParams;
|
|
264
274
|
}
|
|
265
275
|
// accepts query object like {a:1, b:2} and returns a=1&b=2 string
|
|
@@ -356,10 +366,17 @@ export class SecurityService {
|
|
|
356
366
|
resolve();
|
|
357
367
|
}
|
|
358
368
|
else {
|
|
369
|
+
// MEMORY LEAK FIX: Store unsubscribe function for cleanup
|
|
359
370
|
const unsubscribe = this.injector.get(App).subscribe('userLoggedIn', () => {
|
|
360
371
|
resolve();
|
|
361
372
|
unsubscribe();
|
|
373
|
+
// Remove from tracking array
|
|
374
|
+
const index = this.appSubscriptions.indexOf(unsubscribe);
|
|
375
|
+
if (index > -1) {
|
|
376
|
+
this.appSubscriptions.splice(index, 1);
|
|
377
|
+
}
|
|
362
378
|
});
|
|
379
|
+
this.appSubscriptions.push(unsubscribe);
|
|
363
380
|
}
|
|
364
381
|
}
|
|
365
382
|
else {
|
|
@@ -391,10 +408,32 @@ export class SecurityService {
|
|
|
391
408
|
authInBrowser() {
|
|
392
409
|
return Promise.reject('This authInBrowser should not be called');
|
|
393
410
|
}
|
|
411
|
+
ngOnDestroy() {
|
|
412
|
+
// MEMORY LEAK FIX: Unsubscribe from all query params subscriptions
|
|
413
|
+
this.queryParamsSubscriptions.forEach(sub => {
|
|
414
|
+
if (sub && sub.unsubscribe) {
|
|
415
|
+
sub.unsubscribe();
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
this.queryParamsSubscriptions = [];
|
|
419
|
+
// MEMORY LEAK FIX: Unsubscribe from all App subscriptions
|
|
420
|
+
this.appSubscriptions.forEach(unsubscribe => {
|
|
421
|
+
if (unsubscribe) {
|
|
422
|
+
unsubscribe();
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
this.appSubscriptions = [];
|
|
426
|
+
// MEMORY LEAK FIX: Clear references
|
|
427
|
+
this.config = null;
|
|
428
|
+
this.lastLoggedInUser = null;
|
|
429
|
+
this.loggedInUser = null;
|
|
430
|
+
this.requestQueue = null;
|
|
431
|
+
this.loadPromise = null;
|
|
432
|
+
}
|
|
394
433
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SecurityService, deps: [{ token: i0.Injector }, { token: i1.AbstractHttpService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
395
434
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SecurityService }); }
|
|
396
435
|
}
|
|
397
436
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SecurityService, decorators: [{
|
|
398
437
|
type: Injectable
|
|
399
438
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.AbstractHttpService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.Location }] });
|
|
400
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NlY3VyaXR5L3NyYy9zZWN1cml0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsR0FBRyxFQUNILGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsU0FBUyxFQUNaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7QUFFakUsdURBQXVEO0FBQ3ZELE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxFQUNwQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFHN0IsTUFBTSxPQUFPLGVBQWU7SUFPeEIsWUFDWSxRQUFrQixFQUNsQixLQUEwQixFQUMxQixhQUFxQixFQUNyQixjQUE4QixFQUM5QixTQUFtQjtRQUpuQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFVBQUssR0FBTCxLQUFLLENBQXFCO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBUC9CLGlCQUFZLEdBQVEsRUFBRSxDQUFDO0lBUXBCLENBQUM7SUFFSixRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxHQUFHO1FBQ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENB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Q3hDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDdEIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUM1QixPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QixDQUFDO3FCQUFNLENBQUM7b0JBQ0osTUFBTSxFQUFFLENBQUM7Z0JBQ2IsQ0FBQztZQUNMLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhO1FBQ1QsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDckUsQ0FBQzsrR0EzWlEsZUFBZTttSEFBZixlQUFlOzs0RkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1xuICAgIEFic3RyYWN0SHR0cFNlcnZpY2UsXG4gICAgQXBwLFxuICAgIGdldENsb25lZE9iamVjdCxcbiAgICBnZXRXbVByb2plY3RQcm9wZXJ0aWVzLFxuICAgIHRyaWdnZXJGblxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge2VhY2gsIGZvckVhY2gsIGdldCwgaXNFbXB0eSwgam9pbiwgc2V0fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5kZWNsYXJlIGNvbnN0IF9XTV9BUFBfUFJPUEVSVElFUztcbi8vIFRvZG9bU2h1YmhhbV06IE1vdmUgYmVsb3cgY29uc3RhbnRzIHRvIGEgY29tbW9uIGZpbGVcbmNvbnN0IFhTUkZfQ09PS0lFX05BTUUgPSAnd21feHNyZl90b2tlbicsXG4gICAgaXNBcHBsaWNhdGlvblR5cGUgPSB0cnVlO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlTZXJ2aWNlIHtcbiAgICBjb25maWc7XG4gICAgbGFzdExvZ2dlZEluVXNlcjtcbiAgICBsb2dnZWRJblVzZXI7XG4gICAgbG9hZFByb21pc2U6IFByb21pc2U8YW55PjtcbiAgICByZXF1ZXN0UXVldWU6IGFueSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlICRodHRwOiBBYnN0cmFjdEh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlclNlcnZpY2U6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgX2xvY2F0aW9uOiBMb2NhdGlvblxuICAgICkge31cblxuICAgIGlzTG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gICAgfVxuXG4gICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gICAgfVxuXG4gICAgbG9hZChmb3JjZUZsYWc/OiBib29sZWFuKSB7XG4gICAgICAgIGlmKHRoaXMubG9hZFByb21pc2UpIHtyZXR1cm4gdGhpcy5sb2FkUHJvbWlzZTt9XG4gICAgICAgLy8gQ2hlY2sgc2VjdXJpdHlFbmFibGVkIGZsYWcgaW4gX1dNX0FQUF9QUk9QRVJUSUVTXG4gICAgICAgaWYgKCFfV01fQVBQX1BST1BFUlRJRVM/LnNlY3VyaXR5RW5hYmxlZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm9yY2VGbGFnICYmIHRoaXMuY29uZmlnKSB7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbmZpZyk7fVxuICAgICAgICB0aGlzLmxvYWRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAuc2VuZCh7J3VybCc6ICdzZXJ2aWNlcy9zZWN1cml0eS9pbmZvJywgJ21ldGhvZCc6ICdHRVQnfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcgPSByZXNwb25zZS5ib2R5O1xuICAgICAgICAgICAgICAgICAgICBfV01fQVBQX1BST1BFUlRJRVNbJ3NlY3VyaXR5SW5mbyddID0gdGhpcy5jb25maWdcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0TG9nZ2VkSW5Vc2VyID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMubG9nZ2VkSW5Vc2VyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZWRJblVzZXIgPSB0aGlzLmNvbmZpZy51c2VySW5mbztcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5ib2R5KTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9KS5maW5hbGx5KCgpPT57XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0cyB0aGUgc2VjdXJpdHkgY29uZmlnIGZyb20gdGhlIGRlcGxveWVkIGFwcCAoYmFja2VuZCBjYWxsKVxuICAgICAqIEBwYXJhbSBzdWNjZXNzXG4gICAgICogQHBhcmFtIGVycm9yXG4gICAgICovXG4gICAgZ2V0V2ViQ29uZmlnKHN1Y2Nlc3MsIGVycm9yKSB7XG4gICAgICAgIGlmICh0aGlzLmdldCgpKSB7XG4gICAgICAgICAgICAvLyBpZiBhbHJlYWR5IGZldGNoZWQsIHJldHVybiBpdFxuICAgICAgICAgICAgdHJpZ2dlckZuKHN1Y2Nlc3MsIHRoaXMuZ2V0KCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZCgpXG4gICAgICAgICAgICAudGhlbihjb25maWcgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihzdWNjZXNzLCBjb25maWcpO1xuICAgICAgICAgICAgfSwgZXJyb3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgc2VjdXJpdHkgY29uZmlnXG4gICAgICogQHBhcmFtIHN1Y2Nlc3NDYWxsYmFja1xuICAgICAqIEBwYXJhbSBmYWlsdXJlQ2FsbGJhY2tcbiAgICAgKi9cbiAgICBnZXRDb25maWcoc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gaW52b2tlUXVldWVkQ2FsbGJhY2tzKGlkLCBtZXRob2QsIGRhdGEpIHtcbiAgICAgICAgICAgIGZvckVhY2godGhpcy5yZXF1ZXN0UXVldWVbaWRdLCBmbiA9PiB0cmlnZ2VyRm4oZm5bbWV0aG9kXSwgZGF0YSkpO1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UXVldWVbaWRdID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uU3VjY2Vzcyhjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZyA9IGNvbmZpZyA/IGNvbmZpZyA6IHt9XG4gICAgICAgICAgICBjb25maWcuaG9tZVBhZ2UgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuaG9tZVBhZ2U7XG4gICAgICAgICAgICBpZiAoY29uZmlnLnVzZXJJbmZvKSB7XG4gICAgICAgICAgICAgICAgLy8gQmFja2VuZCByZXR1cm5zIGxhbmRpbmdQYWdlIGluc3RlYWQgb2YgaG9tZVBhZ2UsIGhlbmNlIHRoaXMgc3RhdGVtZW50KGZvciBjb25zaXN0ZW5jeSlcbiAgICAgICAgICAgICAgICAvLyBjb25maWcudXNlckluZm8uaG9tZVBhZ2UgPSBjb25maWcudXNlckluZm8ubGFuZGluZ1BhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgIHRoaXMubGFzdExvZ2dlZEluVXNlciA9IGdldENsb25lZE9iamVjdCh0aGlzLmxvZ2dlZEluVXNlcik7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlZEluVXNlciA9IGNvbmZpZy51c2VySW5mbztcbiAgICAgICAgICAgIGludm9rZVF1ZXVlZENhbGxiYWNrcy5jYWxsKHRoaXMsICdjb25maWcnLCAnc3VjY2VzcycsIHRoaXMuZ2V0KCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgICAgICAgICAgLyppZiAoJHJvb3RTY29wZS5pc01vYmlsZUFwcGxpY2F0aW9uVHlwZSkge1xuICAgICAgICAgICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICAgICAgICdzZWN1cml0eUVuYWJsZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICAnYXV0aGVudGljYXRlZCc6IGZhbHNlLFxuICAgICAgICAgICAgICdob21lUGFnZSc6IF9XTV9BUFBfUFJPUEVSVElFUy5ob21lUGFnZSxcbiAgICAgICAgICAgICAndXNlckluZm8nOiBudWxsLFxuICAgICAgICAgICAgICdsb2dpbic6IG51bGxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgIGludm9rZVF1ZXVlZENhbGxiYWNrcygnY29uZmlnJywgJ3N1Y2Nlc3MnLCB0aGlzLmdldCgpKTtcbiAgICAgICAgICAgICB9IGVsc2UgeyovXG4gICAgICAgICAgICBpbnZva2VRdWV1ZWRDYWxsYmFja3MuY2FsbCh0aGlzLCAnY29uZmlnJywgJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ2V0KCkpIHtcbiAgICAgICAgICAgIC8vIGlmIGFscmVhZHkgZmV0Y2hlZCwgcmV0dXJuIGl0XG4gICAgICAgICAgICB0cmlnZ2VyRm4oc3VjY2Vzc0NhbGxiYWNrLCB0aGlzLmdldCgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFF1ZXVlIGNoZWNrLCBpZiBzYW1lIHF1ZXVlIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIGRvIG5vdCBzZW5kIGFub3RoZXIgcmVxdWVzdFxuICAgICAgICB0aGlzLnJlcXVlc3RRdWV1ZS5jb25maWcgPSB0aGlzLnJlcXVlc3RRdWV1ZS5jb25maWcgfHwgW107XG4gICAgICAgIHRoaXMucmVxdWVzdFF1ZXVlLmNvbmZpZy5wdXNoKHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NDYWxsYmFjayxcbiAgICAgICAgICAgIGVycm9yOiBmYWlsdXJlQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RRdWV1ZS5jb25maWcubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGZvciB3ZWIgcHJvamVjdCwgcmV0dXJuIGNvbmZpZyByZXR1cm5lZCBmcm9tIGJhY2tlbmQgQVBJIGNhbGwuXG4gICAgICAgICAgICB0aGlzLmdldFdlYkNvbmZpZyhvblN1Y2Nlc3MuYmluZCh0aGlzKSwgb25FcnJvci5iaW5kKHRoaXMpKTtcbiAgICAgICAgLyogZWxzZSB7XG4gICAgICAgICAvISpcbiAgICAgICAgICogZm9yIG1vYmlsZSBhcHAsIGZpcnN0IGdldCB0aGUgbW9iaWxlIGNvbmZpZyAoc2F2ZWQgaW4gdGhlIGFwaylcbiAgICAgICAgICogLSBpZiBzZWN1cml0eSBub3QgZW5hYmxlZCwganVzdCByZXR1cm4gbW9iaWxlIGNvbmZpZyAobm8gYmFja2VuZCBjYWxsIHJlcXVpcmVkKVxuICAgICAgICAgKiAtIGVsc2UsIGdldCBXZWIgY29uZmlnICh3aWxsIGJlICB0aGUgc2FtZSBBUEkgaGl0IGZvciBsb2dpbikgYW5kIG1lcmdlIHRoZSBjb25maWcgd2l0aCBfbW9iaWxlY29uZmlnXG4gICAgICAgICAqIS9cbiAgICAgICAgIGdldE1vYmlsZUNvbmZpZyhmdW5jdGlvbiAobW9iaWxlY29uZmlnKSB7XG4gICAgICAgICBpZiAoIW1vYmlsZWNvbmZpZy5zZWN1cml0eUVuYWJsZWQpIHtcbiAgICAgICAgIG9uU3VjY2Vzcyhtb2JpbGVjb25maWcpO1xuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGdldFdlYkNvbmZpZyhmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICBjb25maWcgPSBtZXJnZVdlYkFuZE1vYmlsZUNvbmZpZyhjb25maWcpO1xuICAgICAgICAgb25TdWNjZXNzKGNvbmZpZyk7XG4gICAgICAgICB9LCBmdW5jdGlvbiAoKSB7b25TdWNjZXNzKG1vYmlsZWNvbmZpZyk7IH0pO1xuICAgICAgICAgfVxuICAgICAgICAgfSwgb25FcnJvcik7XG4gICAgICAgICB9Ki9cbiAgICB9XG5cbiAgICBnZXRMYXN0TG9nZ2VkSW5Vc2VybmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdExvZ2dlZEluVXNlciAmJiB0aGlzLmxhc3RMb2dnZWRJblVzZXIudXNlck5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBwYWdlIG5hbWVcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGdldEN1cnJlbnRSb3V0ZVBhZ2UoKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLl9sb2NhdGlvbi5wYXRoKCk7XG4gICAgICAgIGxldCBsSW5kZXggPSBwLmluZGV4T2YoJz8nKTtcbiAgICAgICAgbEluZGV4ID0gbEluZGV4ID09PSAtMSA/IHAubGVuZ3RoIDogbEluZGV4IC0gMTtcbiAgICAgICAgcmV0dXJuIHAuc3Vic3RyKDEsIGxJbmRleCk7IC8vIGlnbm9yZSB0aGUgcXVlcnkgcGFyYW1zXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBRdWVyeSBwYXJhbXMgZm9yIHNwZWNpZmllZCBwYXJhbSBuYW1lIGluIGN1cnJlbnQgUm91dGVcbiAgICAgKiBAcGFyYW0gcGFyYW1OYW1lLCB0aGUgcGFyYW0gbmFtZSB3aG9zZSBxdWVyeSBwYXJhbSB2YWx1ZSBpcyB0byBiZSByZXRyaWV2ZWRcbiAgICAgKiBAcmV0dXJucyB7YW55fVxuICAgICAqL1xuICAgIGdldEN1cnJlbnRSb3V0ZVF1ZXJ5UGFyYW0ocGFyYW1OYW1lKSB7XG4gICAgICAgIGxldCBwYXJhbVZhbDtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgICAgIHBhcmFtVmFsID0gcGFyYW1zW3BhcmFtTmFtZV07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGFyYW1WYWw7XG4gICAgfVxuXG4gICAgaXNOb1BhZ2VMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiAhaXNFbXB0eSh0aGlzLmdldEN1cnJlbnRSb3V0ZVBhZ2UoKSk7XG4gICAgfVxuXG4gICAgZ2V0UGFnZUJ5TG9nZ2VkSW5Vc2VyKCkge1xuICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGFnZTtcbiAgICAgICAgICAgIGlmICghaXNBcHBsaWNhdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhhdC5pc05vUGFnZUxvYWRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2UgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuaG9tZVBhZ2U7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocGFnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGF0LmdldENvbmZpZygoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuc2VjdXJpdHlFbmFibGVkICYmIGNvbmZpZy5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlID0gY29uZmlnLnVzZXJJbmZvLmxhbmRpbmdQYWdlIHx8IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5ob21lUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHhzcmYgY29va2llIG5hbWUgYW5kIHhzcmYgaGVhZGVyIG5hbWVzIHdpdGggV2F2ZU1ha2VyIHNwZWNpZmljIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuaXNYc3JmRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kaHR0cC5kZWZhdWx0cy54c3JmQ29va2llTmFtZSA9IFhTUkZfQ09PS0lFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuJGh0dHAuZGVmYXVsdHMueHNyZkhlYWRlck5hbWUgPSBjb25maWcuY3NyZkhlYWRlck5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlID0gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLmhvbWVQYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocGFnZSk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5ob21lUGFnZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIHRoZSBBcHAgcGFnZSBhcyBmb2xsb3dzOlxuICAgICAqIFNlY3VyaXR5IGRpc2FibGVkOlxuICAgICAqICAgICAgLSBIb21lIHBhZ2VcbiAgICAgKiBTZWN1cml0eSBlbmFibGVkOlxuICAgICAqICAgICAgLSBVc2VyIGlzIGxvZ2dlZCBpbiwgcmVzcGVjdGl2ZSBsYW5kaW5nIHBhZ2UgaXMgbG9hZGVkXG4gICAgICogICAgICAtIE5vdCBsb2dnZWQgaW46XG4gICAgICogICAgICAgICAgLSBIb21lIHBhZ2UgaXMgcHVibGljLCBsb2FkcyB0aGUgaG9tZSBwYWdlXG4gICAgICogICAgICAgICAgLSBIb21lIHBhZ2Ugbm90IHB1YmxpYywgTG9naW4gcGFnZShpbiBjb25maWcpIGlzIGxvYWRlZFxuICAgICAqIEBwYXJhbSBmb3JjZVBhZ2VMb2FkXG4gICAgICogQHJldHVybnMge1Byb21pc2U8VD59XG4gICAgICovXG4gICAgbG9hZFBhZ2VCeVVzZXJSb2xlKGZvcmNlUGFnZUxvYWQ/KSB7XG4gICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYWdlQnlMb2dnZWRJblVzZXIoKS50aGVuKHBhZ2UgPT4ge1xuICAgICAgICAgICAgaWYgKHRoYXQuaXNOb1BhZ2VMb2FkZWQoKSB8fCBmb3JjZVBhZ2VMb2FkKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVsb2FkIHRoZSBwYWdlIHdoZW4gY3VycmVudCBwYWdlIGFuZCBwb3N0IGxvZ2luIGxhbmRpbmcgcGFnZSBhcmUgc2FtZVxuICAgICAgICAgICAgICAgIGlmICh0aGF0LmdldEN1cnJlbnRSb3V0ZVBhZ2UoKSA9PT0gcGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAod2luZG93LmxvY2F0aW9uIGFzIGFueSkucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5yb3V0ZXJTZXJ2aWNlLm5hdmlnYXRlKFtgLyR7cGFnZX1gXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIGN1cnJlbnQgdXNlcidzIGhvbWVQYWdlIGJhc2VkIG9uIHRoZSBjb25maWcgaW4gU2VjdXJpdHlTZXJ2aWNlXG4gICAgICogQXNzdW1wdGlvbiBpcyB0aGUgU2VjdXJpdHlTZXJ2aWNlIGlzIHVwZGF0ZWQgd2l0aCB0aGUgbGF0ZXN0IHNlY3VyaXR5IGNvbmZpZyBiZWZvcmUgbWFraW5nIGNhbGwgdG8gdGhpcyBmdW5jdGlvblxuICAgICAqL1xuICAgIG5hdmlnYXRlT25Mb2dpbigpIHtcbiAgICAgICAgdGhpcy5sb2FkUGFnZUJ5VXNlclJvbGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcGFnZSB3aGljaCBuZWVkcyB0byBiZSByZWRpcmVjdGVkIHRvIG9uIHN1Y2Nlc3NmdWwgbG9naW5cbiAgICAgKiBAcGFyYW0gY29uZmlnLFxuICAgICAqIEBwYXJhbSBwYWdlLCBwYWdlIG5hbWUgZm9yIHJlZGlyZWN0aW9uXG4gICAgICogQHJldHVybnMge2FueXxzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0UmVkaXJlY3RQYWdlKGNvbmZpZywgcGFnZT8pIHtcbiAgICAgICAgY29uc3QgaG9tZVBhZ2UgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuaG9tZVBhZ2UsXG4gICAgICAgICAgICBsb2dpblBhZ2UgPSBnZXQoY29uZmlnLCAnbG9naW5Db25maWcucGFnZU5hbWUnKTtcbiAgICAgICAgbGV0IHByZXZSZWRpcmVjdFBhZ2UsXG4gICAgICAgICAgICByZWRpcmVjdFBhZ2UgPSBwYWdlIHx8IHRoaXMuZ2V0Q3VycmVudFJvdXRlUGFnZSgpO1xuXG4gICAgICAgIC8vIGlmIHVzZXIgaXMgYWxyZWFkeSBvbiBIb21lIHBhZ2Ugb3IgTG9naW4gcGFnZSwgdGhleSBzaG91bGQgbm90IGJlIHJlZGlyZWN0ZWQgdG8gdGhhdCBwYWdlLCBoZW5jZSByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgIGlmIChyZWRpcmVjdFBhZ2UgPT09IGhvbWVQYWdlIHx8IHJlZGlyZWN0UGFnZSA9PT0gbG9naW5QYWdlKSB7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogZmluZCBwcmV2aW91cyByZWRpcmVjdCBwYWdlIGZyb20gVVJMLCBpZiBleGlzdHMsIHVzZXIgc2hvdWxkIHJlZGlyZWN0IHRvIHRoYXQgcGFnZS5cbiAgICAgICAgICAgICAqIFVTRSBDQVNFOlxuICAgICAgICAgICAgICogIHVzZXIgaXMgb24gaHR0cDovL2xvY2FsaG9zdDo4MDgwL2FwcC8jL0xvZ2luP3JlZGlyZWN0VG89cGFnZVxuICAgICAgICAgICAgICogIGEgdmFyaWFibGUgY2FsbCBmYWlscyByZXN1bHRpbmcgNDAxXG4gICAgICAgICAgICAgKiAgaW4gdGhpcyBjYXNlLCByZWRpcmVjdFRvIHBhZ2Ugc2hvdWxkIGJlICdwYWdlJyBhbmQgbm90IHVuZGVmaW5lZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBwcmV2UmVkaXJlY3RQYWdlID0gdGhpcy5nZXRDdXJyZW50Um91dGVRdWVyeVBhcmFtKCdyZWRpcmVjdFRvJyk7XG4gICAgICAgICAgICByZWRpcmVjdFBhZ2UgPSAhaXNFbXB0eShwcmV2UmVkaXJlY3RQYWdlKSA/IHByZXZSZWRpcmVjdFBhZ2UgOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVkaXJlY3RQYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIHRoZSBxdWVyeSBwYXJhbXMoaW5jbHVkaW5nIHBhZ2UgcGFyYW1zIGFuZCByZWRpcmVjdCB0byBwYXJhbXMpIGFzc29jaWF0ZWQgd2l0aCByZWRpcmVjdGVkIHBhZ2VcbiAgICAgKi9cbiAgICBnZXRSZWRpcmVjdGVkUm91dGVRdWVyeVBhcmFtcygpIHtcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbVZhbCkgPT4ge1xuICAgICAgICAgICAgZm9yRWFjaChwYXJhbVZhbCwgKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHZhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xuICAgIH1cblxuICAgIC8vIGFjY2VwdHMgcXVlcnkgb2JqZWN0IGxpa2Uge2E6MSwgYjoyfSBhbmQgcmV0dXJucyBhPTEmYj0yIHN0cmluZ1xuICAgIGdldFF1ZXJ5U3RyaW5nKHF1ZXJ5T2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xuICAgICAgICBmb3JFYWNoKHF1ZXJ5T2JqZWN0LCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2goa2V5ICsgJz0nICsgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGpvaW4ocGFyYW1zLCAnJicpO1xuICAgIH1cblxuICAgIGFwcExvZ2luKHBhcmFtcywgc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spIHtcbiAgICAgICAgbGV0IHBheWxvYWQgPSAnJztcblxuICAgICAgICAvLyBlbmNvZGUgYWxsIHBhcmFtZXRlcnNcbiAgICAgICAgZWFjaChwYXJhbXMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgcGF5bG9hZCArPSAocGF5bG9hZCA/ICcmJyA6ICcnKSArIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLnNlbmQoe1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXJsOiAnal9zcHJpbmdfc2VjdXJpdHlfY2hlY2snLFxuICAgICAgICAgICAgJ2RhdGEnOiBwYXlsb2FkXG4gICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB4c3JmQ29va2llVmFsdWUgPSByZXNwb25zZS5ib2R5ID8gcmVzcG9uc2UuYm9keVtYU1JGX0NPT0tJRV9OQU1FXSA6ICcnO1xuXG4gICAgICAgICAgICAvLyBvdmVycmlkZSB0aGUgZGVmYXVsdCB4c3JmIGNvb2tpZSBuYW1lIGFuZCB4c3JmIGhlYWRlciBuYW1lcyB3aXRoIFdhdmVNYWtlciBzcGVjaWZpYyB2YWx1ZXNcbiAgICAgICAgICAgIGlmICh4c3JmQ29va2llVmFsdWUpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFmdGVyIHRoZSBzdWNjZXNzZnVsIGxvZ2luIGluIGRldmljZSwgdGhpcyBmdW5jdGlvbiB0cmlnZ2VycyB0aGUgcGVuZGluZyBvbkxvZ2luQ2FsbGJhY2tzLlxuICAgICAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoQXBwKS5ub3RpZnkoJ3VzZXJMb2dnZWRJbicsIHt9KTtcbiAgICAgICAgICAgIHRyaWdnZXJGbihzdWNjZXNzQ2FsbGJhY2ssIHJlc3BvbnNlKTtcbiAgICAgICAgfSwgZmFpbHVyZUNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQVBJIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBpbiB0aGUgUlVOIG1vZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdWNjZXNzQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHN1Y2Nlc3NcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmYWlsdXJlQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIGZhaWx1cmVcbiAgICAgKi9cbiAgICBpc0F1dGhlbnRpY2F0ZWQoc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5nZXRDb25maWcoZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgdHJpZ2dlckZuKHN1Y2Nlc3NDYWxsYmFjaywgY29uZmlnLmF1dGhlbnRpY2F0ZWQpO1xuICAgICAgICB9LCBmYWlsdXJlQ2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBBUEkgaXMgdXNlZCB0byBsb2dvdXQgb2YgdGhlIGFwcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1Y2Nlc3NDYWxsYmFjayB0byBiZSBjYWxsZWQgb24gc3VjY2Vzc1xuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZhaWx1cmVDYWxsYmFjayB0byBiZSBjYWxsZWQgb24gZmFpbHVyZVxuICAgICAqL1xuICAgIGFwcExvZ291dChzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5zZW5kKHtcbiAgICAgICAgICAgIHRhcmdldDogJ1NlY3VyaXR5JyxcbiAgICAgICAgICAgIHVybDogJ2pfc3ByaW5nX3NlY3VyaXR5X2xvZ291dCcsXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYnlQYXNzUmVzdWx0OiB0cnVlXG4gICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBzZXQodGhpcy5nZXQoKSwgJ2F1dGhlbnRpY2F0ZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICBzZXQodGhpcy5nZXQoKSwgJ3VzZXJJbmZvJywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmluamVjdG9yLmdldChBcHApLm5vdGlmeSgndXNlckxvZ2dlZE91dCcsIHt9KTtcbiAgICAgICAgICAgIHRyaWdnZXJGbihzdWNjZXNzQ2FsbGJhY2ssIHJlc3BvbnNlKTtcbiAgICAgICAgfSwgZmFpbHVyZUNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgYW5kIHJldHVybiB0aGUgY29va2llXG4gICAgICogQHBhcmFtIG5hbWUsIGNvb2tpZSBrZXlcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGdldENvb2tpZUJ5TmFtZShuYW1lKSB7XG4gICAgICAgIC8vIFRvZG86IFNodWJoYW0gSW1wbGVtZW50IGNvb2tpZSBuYXRpdmUganNcbiAgICAgICAgcmV0dXJuICdjb29raWUnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29va2llVmFsdWUgaWYgeHNyZiBpcyBlbmFibGVkLlxuICAgICAqIEluIGRldmljZSwgeHNyZiBjb29raWUgaXMgc3RvcmVkIGluIGxvY2FsU3RvcmFnZS5cbiAgICAgKiBAcmV0dXJucyB4c3JmIGNvb2tpZSB2YWx1ZVxuICAgICAqL1xuICAgIGlzWHNyZkVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvb2tpZUJ5TmFtZShYU1JGX0NPT0tJRV9OQU1FKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwcm9taXNlLiBQcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gc2VjdXJpdHkgaXNcbiAgICAgKiAxLiBkaXNhYmxlZFxuICAgICAqIDIuIGVuYWJsZWQgYW5kIHVzZXIgaXMgYXV0aGVudGljYXRlZFxuICAgICAqIDMuIGVuYWJsZWQgYW5kIHVzZXIgaXMgbm90IGF1dGhlbnRpY2F0ZWQsIHRoZW4gcHJvbWlzZSBpcyByZXNvbHZlZCBvbiB1c2VyIGxvZ2luXG4gICAgICogQHJldHVybnMgeyp9IHByb21pc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Vc2VyTG9naW4oKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZmlnKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5zZWN1cml0eUVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcCkuc3Vic2NyaWJlKCd1c2VyTG9nZ2VkSW4nLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIGxvZ2dlZC1pbi11c2VyXG4gICAgICovXG4gICAgZ2V0TG9nZ2VkSW5Vc2VyKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldENvbmZpZygoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcudXNlckluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb25maWcudXNlckluZm8pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgZm9yIG1vYmlsZSBhcHBzIHRvIGF1dGhlbnRpY2F0ZSB2aWEgYnJvd3Nlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGFmdGVyIGxvZ2luXG4gICAgICovXG4gICAgYXV0aEluQnJvd3NlcigpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ1RoaXMgYXV0aEluQnJvd3NlciBzaG91bGQgbm90IGJlIGNhbGxlZCcpO1xuICAgIH1cbn1cbiJdfQ==
|
|
439
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NlY3VyaXR5L3NyYy9zZWN1cml0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsR0FBRyxFQUNILGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsU0FBUyxFQUNaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7QUFFakUsdURBQXVEO0FBQ3ZELE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxFQUNwQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFHN0IsTUFBTSxPQUFPLGVBQWU7SUFTeEIsWUFDWSxRQUFrQixFQUNsQixLQUEwQixFQUMxQixhQUFxQixFQUNyQixjQUE4QixFQUM5QixTQUFtQjtRQUpuQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFVBQUssR0FBTCxLQUFLLENBQXFCO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBVC9CLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBQ2YsNkJBQXdCLEdBQXVDLEVBQUUsQ0FBQyxDQUFDLHVDQUF1QztRQUMxRyxxQkFBZ0IsR0FBc0IsRUFBRSxDQUFDLENBQUMsMkNBQTJDO0lBUTFGLENBQUM7SUFFSixRQUFRO1FBQ0osT0FB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QUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN6QixHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUVuQywwREFBMEQ7UUFDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN4QyxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNkLFdBQVcsRUFBRSxDQUFDO1lBQ2xCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFM0Isb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQzsrR0FyY1EsZUFBZTttSEFBZixlQUFlOzs0RkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7XG4gICAgQWJzdHJhY3RIdHRwU2VydmljZSxcbiAgICBBcHAsXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGdldFdtUHJvamVjdFByb3BlcnRpZXMsXG4gICAgdHJpZ2dlckZuXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7ZWFjaCwgZm9yRWFjaCwgZ2V0LCBpc0VtcHR5LCBqb2luLCBzZXR9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmRlY2xhcmUgY29uc3QgX1dNX0FQUF9QUk9QRVJUSUVTO1xuLy8gVG9kb1tTaHViaGFtXTogTW92ZSBiZWxvdyBjb25zdGFudHMgdG8gYSBjb21tb24gZmlsZVxuY29uc3QgWFNSRl9DT09LSUVfTkFNRSA9ICd3bV94c3JmX3Rva2VuJyxcbiAgICBpc0FwcGxpY2F0aW9uVHlwZSA9IHRydWU7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZWN1cml0eVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIGNvbmZpZztcbiAgICBsYXN0TG9nZ2VkSW5Vc2VyO1xuICAgIGxvZ2dlZEluVXNlcjtcbiAgICBsb2FkUHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuICAgIHJlcXVlc3RRdWV1ZTogYW55ID0ge307XG4gICAgcHJpdmF0ZSBxdWVyeVBhcmFtc1N1YnNjcmlwdGlvbnM6IEFycmF5PHsgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQgfT4gPSBbXTsgLy8gTUVNT1JZIExFQUsgRklYOiBUcmFjayBzdWJzY3JpcHRpb25zXG4gICAgcHJpdmF0ZSBhcHBTdWJzY3JpcHRpb25zOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdOyAvLyBNRU1PUlkgTEVBSyBGSVg6IFRyYWNrIEFwcCBzdWJzY3JpcHRpb25zXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgJGh0dHA6IEFic3RyYWN0SHR0cFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVyU2VydmljZTogUm91dGVyLFxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uXG4gICAgKSB7fVxuXG4gICAgaXNMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgICB9XG5cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgICB9XG5cbiAgICBsb2FkKGZvcmNlRmxhZz86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYodGhpcy5sb2FkUHJvbWlzZSkge3JldHVybiB0aGlzLmxvYWRQcm9taXNlO31cbiAgICAgICAvLyBDaGVjayBzZWN1cml0eUVuYWJsZWQgZmxhZyBpbiBfV01fQVBQX1BST1BFUlRJRVNcbiAgICAgICBpZiAoIV9XTV9BUFBfUFJPUEVSVElFUz8uc2VjdXJpdHlFbmFibGVkKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3JjZUZsYWcgJiYgdGhpcy5jb25maWcpIHtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29uZmlnKTt9XG4gICAgICAgIHRoaXMubG9hZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4kaHR0cC5zZW5kKHsndXJsJzogJ3NlcnZpY2VzL3NlY3VyaXR5L2luZm8nLCAnbWV0aG9kJzogJ0dFVCd9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZyA9IHJlc3BvbnNlLmJvZHk7XG4gICAgICAgICAgICAgICAgICAgIF9XTV9BUFBfUFJPUEVSVElFU1snc2VjdXJpdHlJbmZvJ10gPSB0aGlzLmNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RMb2dnZWRJblVzZXIgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5sb2dnZWRJblVzZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlZEluVXNlciA9IHRoaXMuY29uZmlnLnVzZXJJbmZvO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmJvZHkpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpPT57XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkUHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZXRzIHRoZSBzZWN1cml0eSBjb25maWcgZnJvbSB0aGUgZGVwbG95ZWQgYXBwIChiYWNrZW5kIGNhbGwpXG4gICAgICogQHBhcmFtIHN1Y2Nlc3NcbiAgICAgKiBAcGFyYW0gZXJyb3JcbiAgICAgKi9cbiAgICBnZXRXZWJDb25maWcoc3VjY2VzcywgZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KCkpIHtcbiAgICAgICAgICAgIC8vIGlmIGFscmVhZHkgZmV0Y2hlZCwgcmV0dXJuIGl0XG4gICAgICAgICAgICB0cmlnZ2VyRm4oc3VjY2VzcywgdGhpcy5nZXQoKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkKClcbiAgICAgICAgICAgIC50aGVuKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKHN1Y2Nlc3MsIGNvbmZpZyk7XG4gICAgICAgICAgICB9LCBlcnJvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzZWN1cml0eSBjb25maWdcbiAgICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrXG4gICAgICogQHBhcmFtIGZhaWx1cmVDYWxsYmFja1xuICAgICAqL1xuICAgIGdldENvbmZpZyhzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykge1xuICAgICAgICBmdW5jdGlvbiBpbnZva2VRdWV1ZWRDYWxsYmFja3MoaWQsIG1ldGhvZCwgZGF0YSkge1xuICAgICAgICAgICAgZm9yRWFjaCh0aGlzLnJlcXVlc3RRdWV1ZVtpZF0sIGZuID0+IHRyaWdnZXJGbihmblttZXRob2RdLCBkYXRhKSk7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RRdWV1ZVtpZF0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25TdWNjZXNzKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnID0gY29uZmlnID8gY29uZmlnIDoge31cbiAgICAgICAgICAgIGNvbmZpZy5ob21lUGFnZSA9IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5ob21lUGFnZTtcbiAgICAgICAgICAgIGlmIChjb25maWcudXNlckluZm8pIHtcbiAgICAgICAgICAgICAgICAvLyBCYWNrZW5kIHJldHVybnMgbGFuZGluZ1BhZ2UgaW5zdGVhZCBvZiBob21lUGFnZSwgaGVuY2UgdGhpcyBzdGF0ZW1lbnQoZm9yIGNvbnNpc3RlbmN5KVxuICAgICAgICAgICAgICAgIC8vIGNvbmZpZy51c2VySW5mby5ob21lUGFnZSA9IGNvbmZpZy51c2VySW5mby5sYW5kaW5nUGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5sYXN0TG9nZ2VkSW5Vc2VyID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMubG9nZ2VkSW5Vc2VyKTtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyID0gY29uZmlnLnVzZXJJbmZvO1xuICAgICAgICAgICAgaW52b2tlUXVldWVkQ2FsbGJhY2tzLmNhbGwodGhpcywgJ2NvbmZpZycsICdzdWNjZXNzJywgdGhpcy5nZXQoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgICAgICAvKmlmICgkcm9vdFNjb3BlLmlzTW9iaWxlQXBwbGljYXRpb25UeXBlKSB7XG4gICAgICAgICAgICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAgICAgICAgJ3NlY3VyaXR5RW5hYmxlZCc6IGZhbHNlLFxuICAgICAgICAgICAgICdhdXRoZW50aWNhdGVkJzogZmFsc2UsXG4gICAgICAgICAgICAgJ2hvbWVQYWdlJzogX1dNX0FQUF9QUk9QRVJUSUVTLmhvbWVQYWdlLFxuICAgICAgICAgICAgICd1c2VySW5mbyc6IG51bGwsXG4gICAgICAgICAgICAgJ2xvZ2luJzogbnVsbFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgaW52b2tlUXVldWVkQ2FsbGJhY2tzKCdjb25maWcnLCAnc3VjY2VzcycsIHRoaXMuZ2V0KCkpO1xuICAgICAgICAgICAgIH0gZWxzZSB7Ki9cbiAgICAgICAgICAgIGludm9rZVF1ZXVlZENhbGxiYWNrcy5jYWxsKHRoaXMsICdjb25maWcnLCAnZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5nZXQoKSkge1xuICAgICAgICAgICAgLy8gaWYgYWxyZWFkeSBmZXRjaGVkLCByZXR1cm4gaXRcbiAgICAgICAgICAgIHRyaWdnZXJGbihzdWNjZXNzQ2FsbGJhY2ssIHRoaXMuZ2V0KCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUXVldWUgY2hlY2ssIGlmIHNhbWUgcXVldWUgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgZG8gbm90IHNlbmQgYW5vdGhlciByZXF1ZXN0XG4gICAgICAgIHRoaXMucmVxdWVzdFF1ZXVlLmNvbmZpZyA9IHRoaXMucmVxdWVzdFF1ZXVlLmNvbmZpZyB8fCBbXTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0UXVldWUuY29uZmlnLnB1c2goe1xuICAgICAgICAgICAgc3VjY2Vzczogc3VjY2Vzc0NhbGxiYWNrLFxuICAgICAgICAgICAgZXJyb3I6IGZhaWx1cmVDYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdFF1ZXVlLmNvbmZpZy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZm9yIHdlYiBwcm9qZWN0LCByZXR1cm4gY29uZmlnIHJldHVybmVkIGZyb20gYmFja2VuZCBBUEkgY2FsbC5cbiAgICAgICAgICAgIHRoaXMuZ2V0V2ViQ29uZmlnKG9uU3VjY2Vzcy5iaW5kKHRoaXMpLCBvbkVycm9yLmJpbmQodGhpcykpO1xuICAgICAgICAvKiBlbHNlIHtcbiAgICAgICAgIC8hKlxuICAgICAgICAgKiBmb3IgbW9iaWxlIGFwcCwgZmlyc3QgZ2V0IHRoZSBtb2JpbGUgY29uZmlnIChzYXZlZCBpbiB0aGUgYXBrKVxuICAgICAgICAgKiAtIGlmIHNlY3VyaXR5IG5vdCBlbmFibGVkLCBqdXN0IHJldHVybiBtb2JpbGUgY29uZmlnIChubyBiYWNrZW5kIGNhbGwgcmVxdWlyZWQpXG4gICAgICAgICAqIC0gZWxzZSwgZ2V0IFdlYiBjb25maWcgKHdpbGwgYmUgIHRoZSBzYW1lIEFQSSBoaXQgZm9yIGxvZ2luKSBhbmQgbWVyZ2UgdGhlIGNvbmZpZyB3aXRoIF9tb2JpbGVjb25maWdcbiAgICAgICAgICohL1xuICAgICAgICAgZ2V0TW9iaWxlQ29uZmlnKGZ1bmN0aW9uIChtb2JpbGVjb25maWcpIHtcbiAgICAgICAgIGlmICghbW9iaWxlY29uZmlnLnNlY3VyaXR5RW5hYmxlZCkge1xuICAgICAgICAgb25TdWNjZXNzKG1vYmlsZWNvbmZpZyk7XG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgZ2V0V2ViQ29uZmlnKGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgIGNvbmZpZyA9IG1lcmdlV2ViQW5kTW9iaWxlQ29uZmlnKGNvbmZpZyk7XG4gICAgICAgICBvblN1Y2Nlc3MoY29uZmlnKTtcbiAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtvblN1Y2Nlc3MobW9iaWxlY29uZmlnKTsgfSk7XG4gICAgICAgICB9XG4gICAgICAgICB9LCBvbkVycm9yKTtcbiAgICAgICAgIH0qL1xuICAgIH1cblxuICAgIGdldExhc3RMb2dnZWRJblVzZXJuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0TG9nZ2VkSW5Vc2VyICYmIHRoaXMubGFzdExvZ2dlZEluVXNlci51c2VyTmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHBhZ2UgbmFtZVxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0Q3VycmVudFJvdXRlUGFnZSgpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMuX2xvY2F0aW9uLnBhdGgoKTtcbiAgICAgICAgbGV0IGxJbmRleCA9IHAuaW5kZXhPZignPycpO1xuICAgICAgICBsSW5kZXggPSBsSW5kZXggPT09IC0xID8gcC5sZW5ndGggOiBsSW5kZXggLSAxO1xuICAgICAgICByZXR1cm4gcC5zdWJzdHIoMSwgbEluZGV4KTsgLy8gaWdub3JlIHRoZSBxdWVyeSBwYXJhbXNcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIFF1ZXJ5IHBhcmFtcyBmb3Igc3BlY2lmaWVkIHBhcmFtIG5hbWUgaW4gY3VycmVudCBSb3V0ZVxuICAgICAqIEBwYXJhbSBwYXJhbU5hbWUsIHRoZSBwYXJhbSBuYW1lIHdob3NlIHF1ZXJ5IHBhcmFtIHZhbHVlIGlzIHRvIGJlIHJldHJpZXZlZFxuICAgICAqIEByZXR1cm5zIHthbnl9XG4gICAgICovXG4gICAgZ2V0Q3VycmVudFJvdXRlUXVlcnlQYXJhbShwYXJhbU5hbWUpIHtcbiAgICAgICAgbGV0IHBhcmFtVmFsO1xuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFN0b3JlIHN1YnNjcmlwdGlvbiBmb3IgY2xlYW51cCAodGhvdWdoIHRoaXMgaXMgYSBzeW5jaHJvbm91cyByZWFkKVxuICAgICAgICAvLyBOb3RlOiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgc3luY2hyb25vdXNseSwgc28gdGhlIHN1YnNjcmlwdGlvbiBjb21wbGV0ZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgLy8gYnV0IHdlIHN0aWxsIHN0b3JlIGl0IHRvIGJlIHNhZmVcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgICAgIHBhcmFtVmFsID0gcGFyYW1zW3BhcmFtTmFtZV07XG4gICAgICAgIH0pO1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgLy8gSW1tZWRpYXRlIHVuc3Vic2NyaWJlIHNpbmNlIHdlIG9ubHkgbmVlZCBmaXJzdCB2YWx1ZVxuICAgICAgICByZXR1cm4gcGFyYW1WYWw7XG4gICAgfVxuXG4gICAgaXNOb1BhZ2VMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiAhaXNFbXB0eSh0aGlzLmdldEN1cnJlbnRSb3V0ZVBhZ2UoKSk7XG4gICAgfVxuXG4gICAgZ2V0UGFnZUJ5TG9nZ2VkSW5Vc2VyKCkge1xuICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGFnZTtcbiAgICAgICAgICAgIGlmICghaXNBcHBsaWNhdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhhdC5pc05vUGFnZUxvYWRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2UgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuaG9tZVBhZ2U7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocGFnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGF0LmdldENvbmZpZygoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuc2VjdXJpdHlFbmFibGVkICYmIGNvbmZpZy5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlID0gY29uZmlnLnVzZXJJbmZvLmxhbmRpbmdQYWdlIHx8IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5ob21lUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHhzcmYgY29va2llIG5hbWUgYW5kIHhzcmYgaGVhZGVyIG5hbWVzIHdpdGggV2F2ZU1ha2VyIHNwZWNpZmljIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuaXNYc3JmRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kaHR0cC5kZWZhdWx0cy54c3JmQ29va2llTmFtZSA9IFhTUkZfQ09PS0lFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuJGh0dHAuZGVmYXVsdHMueHNyZkhlYWRlck5hbWUgPSBjb25maWcuY3NyZkhlYWRlck5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlID0gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLmhvbWVQYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocGFnZSk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5ob21lUGFnZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIHRoZSBBcHAgcGFnZSBhcyBmb2xsb3dzOlxuICAgICAqIFNlY3VyaXR5IGRpc2FibGVkOlxuICAgICAqICAgICAgLSBIb21lIHBhZ2VcbiAgICAgKiBTZWN1cml0eSBlbmFibGVkOlxuICAgICAqICAgICAgLSBVc2VyIGlzIGxvZ2dlZCBpbiwgcmVzcGVjdGl2ZSBsYW5kaW5nIHBhZ2UgaXMgbG9hZGVkXG4gICAgICogICAgICAtIE5vdCBsb2dnZWQgaW46XG4gICAgICogICAgICAgICAgLSBIb21lIHBhZ2UgaXMgcHVibGljLCBsb2FkcyB0aGUgaG9tZSBwYWdlXG4gICAgICogICAgICAgICAgLSBIb21lIHBhZ2Ugbm90IHB1YmxpYywgTG9naW4gcGFnZShpbiBjb25maWcpIGlzIGxvYWRlZFxuICAgICAqIEBwYXJhbSBmb3JjZVBhZ2VMb2FkXG4gICAgICogQHJldHVybnMge1Byb21pc2U8VD59XG4gICAgICovXG4gICAgbG9hZFBhZ2VCeVVzZXJSb2xlKGZvcmNlUGFnZUxvYWQ/KSB7XG4gICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYWdlQnlMb2dnZWRJblVzZXIoKS50aGVuKHBhZ2UgPT4ge1xuICAgICAgICAgICAgaWYgKHRoYXQuaXNOb1BhZ2VMb2FkZWQoKSB8fCBmb3JjZVBhZ2VMb2FkKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVsb2FkIHRoZSBwYWdlIHdoZW4gY3VycmVudCBwYWdlIGFuZCBwb3N0IGxvZ2luIGxhbmRpbmcgcGFnZSBhcmUgc2FtZVxuICAgICAgICAgICAgICAgIGlmICh0aGF0LmdldEN1cnJlbnRSb3V0ZVBhZ2UoKSA9PT0gcGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAod2luZG93LmxvY2F0aW9uIGFzIGFueSkucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5yb3V0ZXJTZXJ2aWNlLm5hdmlnYXRlKFtgLyR7cGFnZX1gXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIGN1cnJlbnQgdXNlcidzIGhvbWVQYWdlIGJhc2VkIG9uIHRoZSBjb25maWcgaW4gU2VjdXJpdHlTZXJ2aWNlXG4gICAgICogQXNzdW1wdGlvbiBpcyB0aGUgU2VjdXJpdHlTZXJ2aWNlIGlzIHVwZGF0ZWQgd2l0aCB0aGUgbGF0ZXN0IHNlY3VyaXR5IGNvbmZpZyBiZWZvcmUgbWFraW5nIGNhbGwgdG8gdGhpcyBmdW5jdGlvblxuICAgICAqL1xuICAgIG5hdmlnYXRlT25Mb2dpbigpIHtcbiAgICAgICAgdGhpcy5sb2FkUGFnZUJ5VXNlclJvbGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcGFnZSB3aGljaCBuZWVkcyB0byBiZSByZWRpcmVjdGVkIHRvIG9uIHN1Y2Nlc3NmdWwgbG9naW5cbiAgICAgKiBAcGFyYW0gY29uZmlnLFxuICAgICAqIEBwYXJhbSBwYWdlLCBwYWdlIG5hbWUgZm9yIHJlZGlyZWN0aW9uXG4gICAgICogQHJldHVybnMge2FueXxzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0UmVkaXJlY3RQYWdlKGNvbmZpZywgcGFnZT8pIHtcbiAgICAgICAgY29uc3QgaG9tZVBhZ2UgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuaG9tZVBhZ2UsXG4gICAgICAgICAgICBsb2dpblBhZ2UgPSBnZXQoY29uZmlnLCAnbG9naW5Db25maWcucGFnZU5hbWUnKTtcbiAgICAgICAgbGV0IHByZXZSZWRpcmVjdFBhZ2UsXG4gICAgICAgICAgICByZWRpcmVjdFBhZ2UgPSBwYWdlIHx8IHRoaXMuZ2V0Q3VycmVudFJvdXRlUGFnZSgpO1xuXG4gICAgICAgIC8vIGlmIHVzZXIgaXMgYWxyZWFkeSBvbiBIb21lIHBhZ2Ugb3IgTG9naW4gcGFnZSwgdGhleSBzaG91bGQgbm90IGJlIHJlZGlyZWN0ZWQgdG8gdGhhdCBwYWdlLCBoZW5jZSByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgIGlmIChyZWRpcmVjdFBhZ2UgPT09IGhvbWVQYWdlIHx8IHJlZGlyZWN0UGFnZSA9PT0gbG9naW5QYWdlKSB7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogZmluZCBwcmV2aW91cyByZWRpcmVjdCBwYWdlIGZyb20gVVJMLCBpZiBleGlzdHMsIHVzZXIgc2hvdWxkIHJlZGlyZWN0IHRvIHRoYXQgcGFnZS5cbiAgICAgICAgICAgICAqIFVTRSBDQVNFOlxuICAgICAgICAgICAgICogIHVzZXIgaXMgb24gaHR0cDovL2xvY2FsaG9zdDo4MDgwL2FwcC8jL0xvZ2luP3JlZGlyZWN0VG89cGFnZVxuICAgICAgICAgICAgICogIGEgdmFyaWFibGUgY2FsbCBmYWlscyByZXN1bHRpbmcgNDAxXG4gICAgICAgICAgICAgKiAgaW4gdGhpcyBjYXNlLCByZWRpcmVjdFRvIHBhZ2Ugc2hvdWxkIGJlICdwYWdlJyBhbmQgbm90IHVuZGVmaW5lZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBwcmV2UmVkaXJlY3RQYWdlID0gdGhpcy5nZXRDdXJyZW50Um91dGVRdWVyeVBhcmFtKCdyZWRpcmVjdFRvJyk7XG4gICAgICAgICAgICByZWRpcmVjdFBhZ2UgPSAhaXNFbXB0eShwcmV2UmVkaXJlY3RQYWdlKSA/IHByZXZSZWRpcmVjdFBhZ2UgOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVkaXJlY3RQYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIHRoZSBxdWVyeSBwYXJhbXMoaW5jbHVkaW5nIHBhZ2UgcGFyYW1zIGFuZCByZWRpcmVjdCB0byBwYXJhbXMpIGFzc29jaWF0ZWQgd2l0aCByZWRpcmVjdGVkIHBhZ2VcbiAgICAgKi9cbiAgICBnZXRSZWRpcmVjdGVkUm91dGVRdWVyeVBhcmFtcygpIHtcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgc3Vic2NyaXB0aW9uIGZvciBjbGVhbnVwICh0aG91Z2ggdGhpcyBpcyBhIHN5bmNocm9ub3VzIHJlYWQpXG4gICAgICAgIC8vIE5vdGU6IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5LCBzbyB0aGUgc3Vic2NyaXB0aW9uIGNvbXBsZXRlcyBpbW1lZGlhdGVseVxuICAgICAgICAvLyBidXQgd2Ugc3RpbGwgc3RvcmUgaXQgdG8gYmUgc2FmZVxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1WYWwpID0+IHtcbiAgICAgICAgICAgIGZvckVhY2gocGFyYW1WYWwsICh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2tleV0gPSB2YWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAvLyBJbW1lZGlhdGUgdW5zdWJzY3JpYmUgc2luY2Ugd2Ugb25seSBuZWVkIGZpcnN0IHZhbHVlXG4gICAgICAgIHJldHVybiBxdWVyeVBhcmFtcztcbiAgICB9XG5cbiAgICAvLyBhY2NlcHRzIHF1ZXJ5IG9iamVjdCBsaWtlIHthOjEsIGI6Mn0gYW5kIHJldHVybnMgYT0xJmI9MiBzdHJpbmdcbiAgICBnZXRRdWVyeVN0cmluZyhxdWVyeU9iamVjdCkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBbXTtcbiAgICAgICAgZm9yRWFjaChxdWVyeU9iamVjdCwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtleSArICc9JyArIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBqb2luKHBhcmFtcywgJyYnKTtcbiAgICB9XG5cbiAgICBhcHBMb2dpbihwYXJhbXMsIHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBwYXlsb2FkID0gJyc7XG5cbiAgICAgICAgLy8gZW5jb2RlIGFsbCBwYXJhbWV0ZXJzXG4gICAgICAgIGVhY2gocGFyYW1zLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICAgICAgICAgIHBheWxvYWQgKz0gKHBheWxvYWQgPyAnJicgOiAnJykgKyBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy4kaHR0cC5zZW5kKHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVybDogJ2pfc3ByaW5nX3NlY3VyaXR5X2NoZWNrJyxcbiAgICAgICAgICAgICdkYXRhJzogcGF5bG9hZFxuICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeHNyZkNvb2tpZVZhbHVlID0gcmVzcG9uc2UuYm9keSA/IHJlc3BvbnNlLmJvZHlbWFNSRl9DT09LSUVfTkFNRV0gOiAnJztcblxuICAgICAgICAgICAgLy8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgeHNyZiBjb29raWUgbmFtZSBhbmQgeHNyZiBoZWFkZXIgbmFtZXMgd2l0aCBXYXZlTWFrZXIgc3BlY2lmaWMgdmFsdWVzXG4gICAgICAgICAgICBpZiAoeHNyZkNvb2tpZVZhbHVlKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBZnRlciB0aGUgc3VjY2Vzc2Z1bCBsb2dpbiBpbiBkZXZpY2UsIHRoaXMgZnVuY3Rpb24gdHJpZ2dlcnMgdGhlIHBlbmRpbmcgb25Mb2dpbkNhbGxiYWNrcy5cbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KEFwcCkubm90aWZ5KCd1c2VyTG9nZ2VkSW4nLCB7fSk7XG4gICAgICAgICAgICB0cmlnZ2VyRm4oc3VjY2Vzc0NhbGxiYWNrLCByZXNwb25zZSk7XG4gICAgICAgIH0sIGZhaWx1cmVDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIEFQSSBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgaW4gdGhlIFJVTiBtb2RlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gc3VjY2Vzc0NhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBzdWNjZXNzXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZmFpbHVyZUNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBmYWlsdXJlXG4gICAgICovXG4gICAgaXNBdXRoZW50aWNhdGVkKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuZ2V0Q29uZmlnKGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIHRyaWdnZXJGbihzdWNjZXNzQ2FsbGJhY2ssIGNvbmZpZy5hdXRoZW50aWNhdGVkKTtcbiAgICAgICAgfSwgZmFpbHVyZUNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQVBJIGlzIHVzZWQgdG8gbG9nb3V0IG9mIHRoZSBhcHAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdWNjZXNzQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHN1Y2Nlc3NcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmYWlsdXJlQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIGZhaWx1cmVcbiAgICAgKi9cbiAgICBhcHBMb2dvdXQoc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuc2VuZCh7XG4gICAgICAgICAgICB0YXJnZXQ6ICdTZWN1cml0eScsXG4gICAgICAgICAgICB1cmw6ICdqX3NwcmluZ19zZWN1cml0eV9sb2dvdXQnLFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGJ5UGFzc1Jlc3VsdDogdHJ1ZVxuICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgc2V0KHRoaXMuZ2V0KCksICdhdXRoZW50aWNhdGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgc2V0KHRoaXMuZ2V0KCksICd1c2VySW5mbycsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoQXBwKS5ub3RpZnkoJ3VzZXJMb2dnZWRPdXQnLCB7fSk7XG4gICAgICAgICAgICB0cmlnZ2VyRm4oc3VjY2Vzc0NhbGxiYWNrLCByZXNwb25zZSk7XG4gICAgICAgIH0sIGZhaWx1cmVDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGFuZCByZXR1cm4gdGhlIGNvb2tpZVxuICAgICAqIEBwYXJhbSBuYW1lLCBjb29raWUga2V5XG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICBnZXRDb29raWVCeU5hbWUobmFtZSkge1xuICAgICAgICAvLyBUb2RvOiBTaHViaGFtIEltcGxlbWVudCBjb29raWUgbmF0aXZlIGpzXG4gICAgICAgIHJldHVybiAnY29va2llJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvb2tpZVZhbHVlIGlmIHhzcmYgaXMgZW5hYmxlZC5cbiAgICAgKiBJbiBkZXZpY2UsIHhzcmYgY29va2llIGlzIHN0b3JlZCBpbiBsb2NhbFN0b3JhZ2UuXG4gICAgICogQHJldHVybnMgeHNyZiBjb29raWUgdmFsdWVcbiAgICAgKi9cbiAgICBpc1hzcmZFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb29raWVCeU5hbWUoWFNSRl9DT09LSUVfTkFNRSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcHJvbWlzZS4gUHJvbWlzZSBpcyByZXNvbHZlZCB3aGVuIHNlY3VyaXR5IGlzXG4gICAgICogMS4gZGlzYWJsZWRcbiAgICAgKiAyLiBlbmFibGVkIGFuZCB1c2VyIGlzIGF1dGhlbnRpY2F0ZWRcbiAgICAgKiAzLiBlbmFibGVkIGFuZCB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkLCB0aGVuIHByb21pc2UgaXMgcmVzb2x2ZWQgb24gdXNlciBsb2dpblxuICAgICAqIEByZXR1cm5zIHsqfSBwcm9taXNlXG4gICAgICovXG4gICAgcHVibGljIG9uVXNlckxvZ2luKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldENvbmZpZyhjb25maWcgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuc2VjdXJpdHlFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBTdG9yZSB1bnN1YnNjcmliZSBmdW5jdGlvbiBmb3IgY2xlYW51cFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSB0aGlzLmluamVjdG9yLmdldChBcHApLnN1YnNjcmliZSgndXNlckxvZ2dlZEluJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIHRyYWNraW5nIGFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmFwcFN1YnNjcmlwdGlvbnMuaW5kZXhPZih1bnN1YnNjcmliZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBTdWJzY3JpcHRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcFN1YnNjcmlwdGlvbnMucHVzaCh1bnN1YnNjcmliZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2l0aCBsb2dnZWQtaW4tdXNlclxuICAgICAqL1xuICAgIGdldExvZ2dlZEluVXNlcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRDb25maWcoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLnVzZXJJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29uZmlnLnVzZXJJbmZvKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGZvciBtb2JpbGUgYXBwcyB0byBhdXRoZW50aWNhdGUgdmlhIGJyb3dzZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBhZnRlciBsb2dpblxuICAgICAqL1xuICAgIGF1dGhJbkJyb3dzZXIoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdUaGlzIGF1dGhJbkJyb3dzZXIgc2hvdWxkIG5vdCBiZSBjYWxsZWQnKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBVbnN1YnNjcmliZSBmcm9tIGFsbCBxdWVyeSBwYXJhbXMgc3Vic2NyaXB0aW9uc1xuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiB7XG4gICAgICAgICAgICBpZiAoc3ViICYmIHN1Yi51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5xdWVyeVBhcmFtc1N1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFVuc3Vic2NyaWJlIGZyb20gYWxsIEFwcCBzdWJzY3JpcHRpb25zXG4gICAgICAgIHRoaXMuYXBwU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHVuc3Vic2NyaWJlID0+IHtcbiAgICAgICAgICAgIGlmICh1bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFwcFN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIHJlZmVyZW5jZXNcbiAgICAgICAgdGhpcy5jb25maWcgPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RMb2dnZWRJblVzZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmxvZ2dlZEluVXNlciA9IG51bGw7XG4gICAgICAgIHRoaXMucmVxdWVzdFF1ZXVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5sb2FkUHJvbWlzZSA9IG51bGw7XG4gICAgfVxufVxuIl19
|