@wavemaker/app-ng-runtime 11.14.1-rc.6311 → 11.14.2-rc.242
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 +323 -28
- 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 +1 -1
- 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 +319 -26
- package/components/base/fesm2022/index.mjs.map +1 -1
- 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 +27 -1
- package/components/basic/search/esm2022/scrollable.directive.mjs +11 -2
- package/components/basic/search/esm2022/search.component.mjs +18 -1
- package/components/basic/search/fesm2022/index.mjs +27 -1
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/scrollable.directive.d.ts +4 -2
- 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 +180 -17
- package/components/data/list/esm2022/list-item.directive.mjs +95 -11
- package/components/data/list/esm2022/list.component.mjs +87 -8
- package/components/data/list/fesm2022/index.mjs +180 -17
- 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 +3 -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 +311 -12
- 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 +159 -9
- package/components/data/table/fesm2022/index.mjs +311 -12
- 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 +2 -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 +20 -2
- 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/fesm2022/index.mjs +20 -2
- 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/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 +364 -30
- 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 +37 -10
- 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 +365 -31
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- 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/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
|
@@ -2,14 +2,25 @@ import { IDGenerator } from './id-generator';
|
|
|
2
2
|
import { $parseExpr } from './expression-parser';
|
|
3
3
|
import { findValueOf } from './utils';
|
|
4
4
|
import { clone, flatten, isArray, isEqual, isObject } from "lodash-es";
|
|
5
|
+
// Constants
|
|
6
|
+
const WIDGET_ID_REGEX = /^(widget-[^_]+)/;
|
|
7
|
+
const WIDGET_PROPERTY_REGEX = /^widget-[^_]+_(.+)$/;
|
|
8
|
+
const ARRAY_INDEX_PLACEHOLDER = '[$i]';
|
|
9
|
+
const ARRAY_INDEX_ZERO = '[0]';
|
|
10
|
+
const DEBOUNCE_WAIT = 100;
|
|
11
|
+
const MAX_WATCH_CYCLES = 5;
|
|
5
12
|
const registry = new Map();
|
|
6
13
|
const watchIdGenerator = new IDGenerator('watch-id-');
|
|
7
|
-
export const FIRST_TIME_WATCH = {};
|
|
8
|
-
|
|
9
|
-
export const isFirstTimeChange = v => v === FIRST_TIME_WATCH;
|
|
14
|
+
export const FIRST_TIME_WATCH = Object.freeze({});
|
|
15
|
+
// State
|
|
10
16
|
let muted = false;
|
|
17
|
+
let changedByWatch = false;
|
|
18
|
+
let skipWatchers = false;
|
|
19
|
+
let ngZone;
|
|
11
20
|
let appRef;
|
|
12
|
-
|
|
21
|
+
// Utility functions
|
|
22
|
+
export const isFirstTimeChange = (v) => v === FIRST_TIME_WATCH;
|
|
23
|
+
export const debounce = (fn, wait = DEBOUNCE_WAIT) => {
|
|
13
24
|
let timeout;
|
|
14
25
|
return (...args) => {
|
|
15
26
|
window['__zone_symbol__clearTimeout'](timeout);
|
|
@@ -23,115 +34,345 @@ export const unMuteWatchers = () => {
|
|
|
23
34
|
muted = false;
|
|
24
35
|
triggerWatchers();
|
|
25
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* Extracts widget ID from identifier (e.g., "widget-id23_eventsource" -> "widget-id23")
|
|
39
|
+
*/
|
|
40
|
+
const getWidgetId = (identifier) => {
|
|
41
|
+
if (!identifier || typeof identifier !== 'string') {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const match = identifier.match(WIDGET_ID_REGEX);
|
|
45
|
+
return match ? match[1] : null;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Extracts property name from identifier (e.g., "widget-id23_eventsource" -> "eventsource")
|
|
49
|
+
*/
|
|
50
|
+
const getPropertyName = (identifier) => {
|
|
51
|
+
if (!identifier || typeof identifier !== 'string') {
|
|
52
|
+
return identifier;
|
|
53
|
+
}
|
|
54
|
+
const match = identifier.match(WIDGET_PROPERTY_REGEX);
|
|
55
|
+
return match ? match[1] : identifier;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Array consumer wrapper for array-based expressions
|
|
59
|
+
*/
|
|
26
60
|
const arrayConsumer = (listenerFn, restExpr, newVal, oldVal) => {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
formattedData = data.map(function (datum) {
|
|
30
|
-
return findValueOf(datum, restExpr);
|
|
31
|
-
});
|
|
32
|
-
// If resulting structure is an array of array, flatten it
|
|
33
|
-
if (isArray(formattedData[0])) {
|
|
34
|
-
formattedData = flatten(formattedData);
|
|
35
|
-
}
|
|
36
|
-
listenerFn(formattedData, oldVal);
|
|
61
|
+
if (!isArray(newVal)) {
|
|
62
|
+
return;
|
|
37
63
|
}
|
|
64
|
+
let formattedData = newVal.map(datum => findValueOf(datum, restExpr));
|
|
65
|
+
// Flatten if result is array of arrays
|
|
66
|
+
if (isArray(formattedData[0])) {
|
|
67
|
+
formattedData = flatten(formattedData);
|
|
68
|
+
}
|
|
69
|
+
listenerFn(formattedData, oldVal);
|
|
38
70
|
};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Updates watch info for array expressions
|
|
73
|
+
*/
|
|
74
|
+
const getUpdatedWatchInfo = (expr, acceptsArray, listener) => {
|
|
75
|
+
const regex = /\[\$i\]/g;
|
|
43
76
|
if (!acceptsArray) {
|
|
44
77
|
return {
|
|
45
|
-
|
|
46
|
-
|
|
78
|
+
expr: expr.replace(regex, ARRAY_INDEX_ZERO),
|
|
79
|
+
listener
|
|
47
80
|
};
|
|
48
81
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
82
|
+
const lastIndex = expr.lastIndexOf(ARRAY_INDEX_PLACEHOLDER);
|
|
83
|
+
const baseExpr = expr.substring(0, lastIndex).replace(ARRAY_INDEX_PLACEHOLDER, ARRAY_INDEX_ZERO);
|
|
84
|
+
const restExpr = expr.substring(lastIndex + 5);
|
|
85
|
+
const arrayConsumerFn = restExpr
|
|
86
|
+
? arrayConsumer.bind(undefined, listener, restExpr)
|
|
87
|
+
: listener;
|
|
55
88
|
return {
|
|
56
|
-
|
|
57
|
-
|
|
89
|
+
expr: baseExpr,
|
|
90
|
+
listener: arrayConsumerFn
|
|
58
91
|
};
|
|
59
92
|
};
|
|
93
|
+
/**
|
|
94
|
+
* Determines if an expression is static (doesn't need to be watched)
|
|
95
|
+
*/
|
|
96
|
+
const STATIC_EXPRESSION_NAMES = [
|
|
97
|
+
"row.getProperty('investment')",
|
|
98
|
+
"row.getProperty('factsheetLink')",
|
|
99
|
+
"row.getProperty('isRebalanceEligible')"
|
|
100
|
+
];
|
|
101
|
+
const isStaticExpression = (expr) => {
|
|
102
|
+
if (typeof expr !== 'string') {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
const trimmedExpr = expr.trim();
|
|
106
|
+
// Expressions that always evaluate to localization strings
|
|
107
|
+
// if (trimmedExpr.includes('appLocale')) {
|
|
108
|
+
// return true;
|
|
109
|
+
// }
|
|
110
|
+
// Hard-coded static expression names
|
|
111
|
+
if (STATIC_EXPRESSION_NAMES.includes(trimmedExpr)) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Gets the scope type from the scope object
|
|
118
|
+
*/
|
|
119
|
+
const getScopeType = ($scope) => {
|
|
120
|
+
if (!$scope) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
if ($scope.pageName)
|
|
124
|
+
return 'Page';
|
|
125
|
+
if ($scope.prefabName)
|
|
126
|
+
return 'Prefab';
|
|
127
|
+
if ($scope.partialName)
|
|
128
|
+
return 'Partial';
|
|
129
|
+
// Check for App scope
|
|
130
|
+
if ($scope.Variables !== undefined &&
|
|
131
|
+
$scope.Actions !== undefined &&
|
|
132
|
+
!$scope.pageName &&
|
|
133
|
+
!$scope.prefabName &&
|
|
134
|
+
!$scope.partialName) {
|
|
135
|
+
return 'App';
|
|
136
|
+
}
|
|
137
|
+
if ($scope.constructor?.name === 'AppRef') {
|
|
138
|
+
return 'App';
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Gets scope name based on scope type
|
|
144
|
+
*/
|
|
145
|
+
const getScopeName = ($scope, scopeType) => {
|
|
146
|
+
if (!scopeType || !$scope) {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
switch (scopeType) {
|
|
150
|
+
case 'Prefab': return $scope.prefabName || null;
|
|
151
|
+
case 'Partial': return $scope.partialName || null;
|
|
152
|
+
case 'Page': return $scope.pageName || null;
|
|
153
|
+
default: return null;
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Main watch function
|
|
158
|
+
*/
|
|
60
159
|
export const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.nextUid(), doNotClone = false, config = {}, isMuted) => {
|
|
61
|
-
|
|
62
|
-
|
|
160
|
+
// Handle array expressions
|
|
161
|
+
if (expr.includes(ARRAY_INDEX_PLACEHOLDER)) {
|
|
162
|
+
const watchInfo = getUpdatedWatchInfo(expr, config.arrayType || config.isList || false, listener);
|
|
63
163
|
expr = watchInfo.expr;
|
|
64
164
|
listener = watchInfo.listener;
|
|
65
165
|
}
|
|
166
|
+
// Handle static expressions
|
|
167
|
+
if (isStaticExpression(expr)) {
|
|
168
|
+
try {
|
|
169
|
+
const fn = $parseExpr(expr);
|
|
170
|
+
const staticValue = fn($scope, $locals);
|
|
171
|
+
listener(staticValue, FIRST_TIME_WATCH);
|
|
172
|
+
}
|
|
173
|
+
catch (e) {
|
|
174
|
+
console.warn(`Error evaluating static expression '${expr}':`, e);
|
|
175
|
+
listener(undefined, FIRST_TIME_WATCH);
|
|
176
|
+
}
|
|
177
|
+
return () => { }; // No-op unsubscribe
|
|
178
|
+
}
|
|
66
179
|
const fn = $parseExpr(expr);
|
|
67
|
-
|
|
68
|
-
|
|
180
|
+
const scopeType = getScopeType($scope);
|
|
181
|
+
const scopeName = getScopeName($scope, scopeType);
|
|
182
|
+
const watchInfo = {
|
|
183
|
+
fn: fn.bind(null, $scope, $locals),
|
|
69
184
|
listener,
|
|
70
185
|
expr,
|
|
71
186
|
last: FIRST_TIME_WATCH,
|
|
72
187
|
doNotClone,
|
|
73
|
-
isMuted
|
|
74
|
-
|
|
188
|
+
isMuted,
|
|
189
|
+
scopeType,
|
|
190
|
+
scopeName
|
|
191
|
+
};
|
|
192
|
+
// Store in registry
|
|
193
|
+
const widgetId = getWidgetId(identifier);
|
|
194
|
+
if (widgetId) {
|
|
195
|
+
const propertyName = getPropertyName(identifier);
|
|
196
|
+
if (!registry.has(widgetId)) {
|
|
197
|
+
registry.set(widgetId, {});
|
|
198
|
+
}
|
|
199
|
+
const widgetGroup = registry.get(widgetId);
|
|
200
|
+
widgetGroup[propertyName] = watchInfo;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
registry.set(identifier, watchInfo);
|
|
204
|
+
}
|
|
75
205
|
return () => $unwatch(identifier);
|
|
76
206
|
};
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const
|
|
207
|
+
/**
|
|
208
|
+
* Unwatches a single identifier
|
|
209
|
+
*/
|
|
210
|
+
export const $unwatch = (identifier) => {
|
|
211
|
+
const widgetId = getWidgetId(identifier);
|
|
212
|
+
if (widgetId) {
|
|
213
|
+
const propertyName = getPropertyName(identifier);
|
|
214
|
+
const widgetGroup = registry.get(widgetId);
|
|
215
|
+
if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
|
|
216
|
+
const watchInfo = widgetGroup[propertyName];
|
|
217
|
+
if (watchInfo) {
|
|
218
|
+
delete widgetGroup[propertyName];
|
|
219
|
+
// Clean up empty widget groups
|
|
220
|
+
if (Object.keys(widgetGroup).length === 0) {
|
|
221
|
+
registry.delete(widgetId);
|
|
222
|
+
}
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Fallback to direct lookup
|
|
228
|
+
if (registry.has(identifier)) {
|
|
229
|
+
registry.delete(identifier);
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
return false;
|
|
233
|
+
};
|
|
234
|
+
/**
|
|
235
|
+
* Unwatches all watchers for a specific widget ID
|
|
236
|
+
*/
|
|
237
|
+
export const $unwatchAll = (widgetId) => {
|
|
238
|
+
if (!widgetId || typeof widgetId !== 'string') {
|
|
239
|
+
return 0;
|
|
240
|
+
}
|
|
241
|
+
const widgetGroup = registry.get(widgetId);
|
|
242
|
+
if (widgetGroup && typeof widgetGroup === 'object' && !widgetGroup.fn) {
|
|
243
|
+
const count = Object.keys(widgetGroup).length;
|
|
244
|
+
registry.delete(widgetId);
|
|
245
|
+
return count;
|
|
246
|
+
}
|
|
247
|
+
// Fallback: find all identifiers starting with this widget ID
|
|
248
|
+
let removedCount = 0;
|
|
249
|
+
const identifiersToRemove = [];
|
|
250
|
+
registry.forEach((_, key) => {
|
|
251
|
+
if (key.startsWith(widgetId + '_')) {
|
|
252
|
+
identifiersToRemove.push(key);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
identifiersToRemove.forEach(identifier => {
|
|
256
|
+
if ($unwatch(identifier)) {
|
|
257
|
+
removedCount++;
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
return removedCount;
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* Unwatches all watchers for a specific scope (Page, Prefab, Partial, or App)
|
|
264
|
+
* Now works directly with the main registry instead of separate scoped registries
|
|
265
|
+
*/
|
|
266
|
+
export const $unwatchAllByScope = (scopeType, scopeName) => {
|
|
267
|
+
if (!scopeType) {
|
|
268
|
+
return 0;
|
|
269
|
+
}
|
|
270
|
+
let removedCount = 0;
|
|
271
|
+
const identifiersToRemove = [];
|
|
272
|
+
registry.forEach((value, key) => {
|
|
273
|
+
// Handle grouped structure (widget groups)
|
|
274
|
+
if (value && typeof value === 'object' && !value.fn) {
|
|
275
|
+
Object.entries(value).forEach(([propertyName, watchInfo]) => {
|
|
276
|
+
if (watchInfo?.scopeType === scopeType &&
|
|
277
|
+
(!scopeName || watchInfo.scopeName === scopeName)) {
|
|
278
|
+
identifiersToRemove.push(`${key}_${propertyName}`);
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
// Direct watchInfo
|
|
284
|
+
const watchInfo = value;
|
|
285
|
+
if (watchInfo?.scopeType === scopeType &&
|
|
286
|
+
(!scopeName || watchInfo.scopeName === scopeName)) {
|
|
287
|
+
identifiersToRemove.push(key);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
// Unwatch all collected identifiers
|
|
292
|
+
identifiersToRemove.forEach(identifier => {
|
|
293
|
+
if ($unwatch(identifier)) {
|
|
294
|
+
removedCount++;
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
return removedCount;
|
|
298
|
+
};
|
|
299
|
+
/**
|
|
300
|
+
* Processes a single watch info during trigger cycle
|
|
301
|
+
*/
|
|
302
|
+
const processWatchInfo = (watchInfo) => {
|
|
303
|
+
if (!watchInfo?.fn || (watchInfo.isMuted?.() ?? false)) {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
let newValue;
|
|
307
|
+
try {
|
|
308
|
+
newValue = watchInfo.fn();
|
|
309
|
+
}
|
|
310
|
+
catch (e) {
|
|
311
|
+
console.warn(`Error executing expression: '${watchInfo.expr}'`, e);
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
if (isEqual(newValue, watchInfo.last)) {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
// Change detected
|
|
318
|
+
changedByWatch = true;
|
|
319
|
+
watchInfo.last = isObject(newValue) && !watchInfo.doNotClone
|
|
320
|
+
? clone(newValue)
|
|
321
|
+
: newValue;
|
|
322
|
+
watchInfo.listener(newValue, watchInfo.last === newValue ? FIRST_TIME_WATCH : watchInfo.last);
|
|
323
|
+
changedByWatch = false;
|
|
324
|
+
return true;
|
|
325
|
+
};
|
|
326
|
+
/**
|
|
327
|
+
* Triggers all watchers
|
|
328
|
+
*/
|
|
329
|
+
const triggerWatchers = (ignoreMuted = false) => {
|
|
82
330
|
if (muted && !ignoreMuted) {
|
|
83
331
|
return;
|
|
84
332
|
}
|
|
85
|
-
const limit = 5;
|
|
86
333
|
let pass = 1;
|
|
87
334
|
let changeDetected;
|
|
88
335
|
do {
|
|
89
336
|
changeDetected = false;
|
|
90
|
-
registry.forEach(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
try {
|
|
99
|
-
nv = fn();
|
|
100
|
-
}
|
|
101
|
-
catch (e) {
|
|
102
|
-
console.warn(`error in executing expression: '${watchInfo.expr}'`);
|
|
337
|
+
registry.forEach((value) => {
|
|
338
|
+
// Handle grouped structure
|
|
339
|
+
if (value && typeof value === 'object' && !value.fn) {
|
|
340
|
+
Object.values(value).forEach((watchInfo) => {
|
|
341
|
+
if (processWatchInfo(watchInfo)) {
|
|
342
|
+
changeDetected = true;
|
|
343
|
+
}
|
|
344
|
+
});
|
|
103
345
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
// @ts-ignore
|
|
109
|
-
if (isObject(nv) && !watchInfo.doNotClone && nv.__cloneable__ !== false) {
|
|
110
|
-
watchInfo.last = clone(nv);
|
|
346
|
+
else {
|
|
347
|
+
// Direct watchInfo
|
|
348
|
+
if (processWatchInfo(value)) {
|
|
349
|
+
changeDetected = true;
|
|
111
350
|
}
|
|
112
|
-
listener(nv, ov);
|
|
113
|
-
resetChangeFromWatch();
|
|
114
351
|
}
|
|
115
352
|
});
|
|
116
353
|
pass++;
|
|
117
|
-
} while (changeDetected && pass <
|
|
118
|
-
if (changeDetected && pass ===
|
|
119
|
-
console.warn(`
|
|
354
|
+
} while (changeDetected && pass < MAX_WATCH_CYCLES);
|
|
355
|
+
if (changeDetected && pass === MAX_WATCH_CYCLES) {
|
|
356
|
+
console.warn(`Watch cycles exceeded limit of ${MAX_WATCH_CYCLES}`);
|
|
120
357
|
}
|
|
121
358
|
};
|
|
122
|
-
|
|
123
|
-
export const
|
|
359
|
+
// Angular zone integration
|
|
360
|
+
export const setNgZone = (zone) => {
|
|
361
|
+
ngZone = zone;
|
|
362
|
+
};
|
|
363
|
+
export const setAppRef = (ref) => {
|
|
124
364
|
appRef = ref;
|
|
125
365
|
};
|
|
126
366
|
export const isChangeFromWatch = () => changedByWatch;
|
|
127
|
-
export const resetChangeFromWatch = () =>
|
|
128
|
-
|
|
129
|
-
|
|
367
|
+
export const resetChangeFromWatch = () => {
|
|
368
|
+
changedByWatch = false;
|
|
369
|
+
};
|
|
370
|
+
// Debounced trigger
|
|
130
371
|
const debouncedTriggerWatchers = debounce(() => {
|
|
131
372
|
skipWatchers = true;
|
|
132
373
|
ngZone.run(() => triggerWatchers());
|
|
133
|
-
},
|
|
134
|
-
export const $invokeWatchers = (force, ignoreMuted) => {
|
|
374
|
+
}, DEBOUNCE_WAIT);
|
|
375
|
+
export const $invokeWatchers = (force = false, ignoreMuted = false) => {
|
|
135
376
|
if (force) {
|
|
136
377
|
triggerWatchers(ignoreMuted);
|
|
137
378
|
}
|
|
@@ -145,7 +386,8 @@ export const $invokeWatchers = (force, ignoreMuted) => {
|
|
|
145
386
|
};
|
|
146
387
|
export const $appDigest = (() => {
|
|
147
388
|
let queued = false;
|
|
148
|
-
|
|
389
|
+
const $RAF = window.requestAnimationFrame;
|
|
390
|
+
return (force = false) => {
|
|
149
391
|
if (!appRef) {
|
|
150
392
|
return;
|
|
151
393
|
}
|
|
@@ -157,14 +399,14 @@ export const $appDigest = (() => {
|
|
|
157
399
|
if (queued) {
|
|
158
400
|
return;
|
|
159
401
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
});
|
|
166
|
-
}
|
|
402
|
+
queued = true;
|
|
403
|
+
$RAF(() => {
|
|
404
|
+
ngZone.run(() => appRef.tick());
|
|
405
|
+
queued = false;
|
|
406
|
+
});
|
|
167
407
|
}
|
|
168
408
|
};
|
|
169
409
|
})();
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3V0aWxzL3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRXJFLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7QUFFeEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRWhDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDO0FBRTdELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsQixJQUFJLE1BQU0sQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQVksRUFBRSxPQUFlLEVBQUUsRUFBRSxFQUFFO0lBQ3hELElBQUksT0FBTyxDQUFDO0lBQ1osT0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUU7UUFDZixNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxPQUFPLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVB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QUNELElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULE9BQU87WUFDWCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDZCxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ2hDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDTixDQUFDLENBQUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSURHZW5lcmF0b3IgfSBmcm9tICcuL2lkLWdlbmVyYXRvcic7XG5cbmltcG9ydCB7ICRwYXJzZUV4cHIgfSBmcm9tICcuL2V4cHJlc3Npb24tcGFyc2VyJztcbmltcG9ydCB7IGZpbmRWYWx1ZU9mIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge2Nsb25lLCBmbGF0dGVuLCBpc0FycmF5LCBpc0VxdWFsLCBpc09iamVjdH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5jb25zdCByZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbmNvbnN0IHdhdGNoSWRHZW5lcmF0b3IgPSBuZXcgSURHZW5lcmF0b3IoJ3dhdGNoLWlkLScpO1xuXG5leHBvcnQgY29uc3QgRklSU1RfVElNRV9XQVRDSCA9IHt9O1xuXG5PYmplY3QuZnJlZXplKEZJUlNUX1RJTUVfV0FUQ0gpO1xuXG5leHBvcnQgY29uc3QgaXNGaXJzdFRpbWVDaGFuZ2UgPSB2ID0+IHYgPT09IEZJUlNUX1RJTUVfV0FUQ0g7XG5cbmxldCBtdXRlZCA9IGZhbHNlO1xubGV0IGFwcFJlZjtcblxuZXhwb3J0IGNvbnN0IGRlYm91bmNlID0gKGZuOiBGdW5jdGlvbiwgd2FpdDogbnVtYmVyID0gNTApID0+IHtcbiAgICBsZXQgdGltZW91dDtcbiAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgd2luZG93WydfX3pvbmVfc3ltYm9sX19jbGVhclRpbWVvdXQnXSh0aW1lb3V0KTtcbiAgICAgICAgdGltZW91dCA9IHdpbmRvd1snX196b25lX3N5bWJvbF9fc2V0VGltZW91dCddKCgpID0+IGZuKC4uLmFyZ3MpLCB3YWl0KTtcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG11dGVXYXRjaGVycyA9ICgpID0+IHtcbiAgICBtdXRlZCA9IHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgdW5NdXRlV2F0Y2hlcnMgPSAoKSA9PiB7XG4gICAgbXV0ZWQgPSBmYWxzZTtcbiAgICB0cmlnZ2VyV2F0Y2hlcnMoKTtcbn07XG5cbmNvbnN0IGFycmF5Q29uc3VtZXIgPSAobGlzdGVuZXJGbiwgcmVzdEV4cHIsIG5ld1ZhbCwgb2xkVmFsKSA9PiB7XG4gICAgbGV0IGRhdGEgPSBuZXdWYWwsXG4gICAgICAgIGZvcm1hdHRlZERhdGE7XG5cbiAgICBpZiAoaXNBcnJheShkYXRhKSkge1xuICAgICAgICBmb3JtYXR0ZWREYXRhID0gZGF0YS5tYXAoZnVuY3Rpb24gKGRhdHVtKSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZFZhbHVlT2YoZGF0dW0sIHJlc3RFeHByKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSWYgcmVzdWx0aW5nIHN0cnVjdHVyZSBpcyBhbiBhcnJheSBvZiBhcnJheSwgZmxhdHRlbiBpdFxuICAgICAgICBpZiAoaXNBcnJheShmb3JtYXR0ZWREYXRhWzBdKSkge1xuICAgICAgICAgICAgZm9ybWF0dGVkRGF0YSA9IGZsYXR0ZW4oZm9ybWF0dGVkRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBsaXN0ZW5lckZuKGZvcm1hdHRlZERhdGEsIG9sZFZhbCk7XG4gICAgfVxufTtcblxuY29uc3QgZ2V0VXBkYXRlZFdhdGNJbmZvID0gKGV4cHIsIGFjY2VwdHNBcnJheSwgbGlzdGVuZXIpID0+IHtcbiAgICAvLyBsaXN0ZW5lciBkb2Vzbid0IGFjY2VwdCBhcnJheVxuICAgIC8vIHJlcGxhY2UgYWxsIGBbJGldYCB3aXRoIGBbMF1gIGFuZCByZXR1cm4gdGhlIGV4cHJlc3Npb25cbiAgICBsZXQgcmVnZXggPSAvXFxbXFwkaVxcXS9nLFxuICAgICAgICAkSSAgICAgICAgICAgICAgICA9ICdbJGldJyxcbiAgICAgICAgJDAgICAgICAgICAgICAgICAgPSAnWzBdJztcbiAgICBpZiAoIWFjY2VwdHNBcnJheSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2V4cHInICAgICA6IGV4cHIucmVwbGFjZShyZWdleCwgJDApLFxuICAgICAgICAgICAgJ2xpc3RlbmVyJyA6IGxpc3RlbmVyXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gbGlzdGVuZXIgYWNjZXB0cyBhcnJheVxuICAgIC8vIHJlcGxhY2UgYWxsIGV4Y2VwdCB0aGUgbGFzdCBgWyRpXWAgd2l0aCBgWzBdYCBhbmQgcmV0dXJuIHRoZSBleHByZXNzaW9uLlxuICAgIHZhciBpbmRleCAgICAgICAgICAgPSBleHByLmxhc3RJbmRleE9mKCRJKSxcbiAgICAgICAgX2V4cHIgICAgICAgICAgID0gZXhwci5zdWJzdHIoMCwgaW5kZXgpLnJlcGxhY2UoJEksICQwKSxcbiAgICAgICAgcmVzdEV4cHIgICAgICAgID0gZXhwci5zdWJzdHIoaW5kZXggKyA1KSxcbiAgICAgICAgYXJyYXlDb25zdW1lckZuID0gbGlzdGVuZXI7XG5cbiAgICBpZiAocmVzdEV4cHIpIHtcbiAgICAgICAgYXJyYXlDb25zdW1lckZuID0gYXJyYXlDb25zdW1lci5iaW5kKHVuZGVmaW5lZCwgbGlzdGVuZXIsIHJlc3RFeHByKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAnZXhwcicgICAgIDogX2V4cHIsXG4gICAgICAgICdsaXN0ZW5lcicgOiBhcnJheUNvbnN1bWVyRm5cbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0ICR3YXRjaCA9IChleHByLCAkc2NvcGUsICRsb2NhbHMsIGxpc3RlbmVyLCBpZGVudGlmaWVyID0gd2F0Y2hJZEdlbmVyYXRvci5uZXh0VWlkKCksIGRvTm90Q2xvbmUgPSBmYWxzZSwgY29uZmlnOmFueT17fSwgaXNNdXRlZD86ICgpID0+IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoZXhwci5pbmRleE9mKCdbJGldJykgIT09IC0xKSB7XG4gICAgICAgIGxldCB3YXRjaEluZm8gPSBnZXRVcGRhdGVkV2F0Y0luZm8oZXhwciwgY29uZmlnICYmIChjb25maWcuYXJyYXlUeXBlIHx8IGNvbmZpZy5pc0xpc3QpLCBsaXN0ZW5lcik7XG4gICAgICAgIGV4cHIgPSB3YXRjaEluZm8uZXhwcjtcbiAgICAgICAgbGlzdGVuZXIgPSB3YXRjaEluZm8ubGlzdGVuZXI7XG4gICAgfVxuICAgIGNvbnN0IGZuID0gJHBhcnNlRXhwcihleHByKTtcblxuICAgIHJlZ2lzdHJ5LnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgIGZuOiBmbi5iaW5kKGV4cHIsICRzY29wZSwgJGxvY2FscyksXG4gICAgICAgIGxpc3RlbmVyLFxuICAgICAgICBleHByLFxuICAgICAgICBsYXN0OiBGSVJTVF9USU1FX1dBVENILFxuICAgICAgICBkb05vdENsb25lLFxuICAgICAgICBpc011dGVkOiBpc011dGVkXG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4gJHVud2F0Y2goaWRlbnRpZmllcik7XG59O1xuXG5leHBvcnQgY29uc3QgJHVud2F0Y2ggPSBpZGVudGlmaWVyID0+IHJlZ2lzdHJ5LmRlbGV0ZShpZGVudGlmaWVyKTtcblxubGV0IGNoYW5nZWRCeVdhdGNoID0gZmFsc2U7XG5cbmNvbnN0ICRSQUYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuXG5sZXQgbmdab25lO1xuXG5jb25zdCB0cmlnZ2VyV2F0Y2hlcnMgPSAoaWdub3JlTXV0ZWQ/OiBib29sZWFuKSA9PiB7XG5cbiAgICBpZiAobXV0ZWQgJiYgIWlnbm9yZU11dGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaW1pdCA9IDU7XG4gICAgbGV0IHBhc3MgPSAxO1xuICAgIGxldCBjaGFuZ2VEZXRlY3RlZDtcblxuICAgIGRvIHtcbiAgICAgICAgY2hhbmdlRGV0ZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVnaXN0cnkuZm9yRWFjaCh3YXRjaEluZm8gPT4ge1xuICAgICAgICAgICAgaWYod2F0Y2hJbmZvLmlzTXV0ZWQgJiYgd2F0Y2hJbmZvLmlzTXV0ZWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZuID0gd2F0Y2hJbmZvLmZuO1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSB3YXRjaEluZm8ubGlzdGVuZXI7XG4gICAgICAgICAgICBjb25zdCBvdiA9IHdhdGNoSW5mby5sYXN0O1xuICAgICAgICAgICAgbGV0IG52O1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG52ID0gZm4oKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYGVycm9yIGluIGV4ZWN1dGluZyBleHByZXNzaW9uOiAnJHt3YXRjaEluZm8uZXhwcn0nYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNFcXVhbChudiwgb3YpKSB7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNoYW5nZWRCeVdhdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB3YXRjaEluZm8ubGFzdCA9IG52O1xuXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChudikgJiYgIXdhdGNoSW5mby5kb05vdENsb25lICYmIG52Ll9fY2xvbmVhYmxlX18gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhdGNoSW5mby5sYXN0ID0gY2xvbmUobnYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsaXN0ZW5lcihudiwgb3YpO1xuICAgICAgICAgICAgICAgIHJlc2V0Q2hhbmdlRnJvbVdhdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwYXNzKys7XG5cbiAgICB9IHdoaWxlIChjaGFuZ2VEZXRlY3RlZCAmJiBwYXNzIDwgbGltaXQpO1xuXG4gICAgaWYgKGNoYW5nZURldGVjdGVkICYmIHBhc3MgPT09IGxpbWl0KSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgTnVtYmVyIG9mIHdhdGNoIGN5Y2xlcyBnb25lIGFib3ZlIHNldCBsaW1pdCBvZjogJHtsaW1pdH0gYCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldE5nWm9uZSA9IHpvbmUgPT4gbmdab25lID0gem9uZTtcblxuZXhwb3J0IGNvbnN0IHNldEFwcFJlZiA9IHJlZiA9PiB7XG4gICAgYXBwUmVmID0gcmVmXG59O1xuXG5leHBvcnQgY29uc3QgaXNDaGFuZ2VGcm9tV2F0Y2ggPSAoKSA9PiBjaGFuZ2VkQnlXYXRjaDtcbmV4cG9ydCBjb25zdCByZXNldENoYW5nZUZyb21XYXRjaCA9ICgpID0+IGNoYW5nZWRCeVdhdGNoID0gZmFsc2U7XG5cbig8YW55PndpbmRvdykud2F0Y2hSZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuXG5sZXQgc2tpcFdhdGNoZXJzO1xuXG5jb25zdCBkZWJvdW5jZWRUcmlnZ2VyV2F0Y2hlcnMgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgc2tpcFdhdGNoZXJzID0gdHJ1ZTtcbiAgICBuZ1pvbmUucnVuKCgpID0+IHRyaWdnZXJXYXRjaGVycygpKTtcbn0sIDEwMCk7XG5cbmV4cG9ydCBjb25zdCAkaW52b2tlV2F0Y2hlcnMgPSAoZm9yY2U/OiBib29sZWFuLCBpZ25vcmVNdXRlZD86IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgdHJpZ2dlcldhdGNoZXJzKGlnbm9yZU11dGVkKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChza2lwV2F0Y2hlcnMpIHtcbiAgICAgICAgICAgIHNraXBXYXRjaGVycyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlYm91bmNlZFRyaWdnZXJXYXRjaGVycygpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCAkYXBwRGlnZXN0ID0gKCgpID0+IHtcbiAgICBsZXQgcXVldWVkID0gZmFsc2U7XG4gICAgcmV0dXJuIChmb3JjZT86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKCFhcHBSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgIG5nWm9uZS5ydW4oKCkgPT4gYXBwUmVmLnRpY2soKSk7XG4gICAgICAgICAgICBxdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChxdWV1ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgJFJBRigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG5nWm9uZS5ydW4oKCkgPT4gYXBwUmVmLnRpY2soKSk7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn0pKCk7XG4iXX0=
|
|
410
|
+
// Export registry for debugging
|
|
411
|
+
window.watchRegistry = registry;
|
|
412
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3V0aWxzL3dhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXZFLFlBQVk7QUFDWixNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQUMxQyxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3BELE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUMxQixNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUUzQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0FBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQXFCbEQsUUFBUTtBQUNSLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsQixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDM0IsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLElBQUksTUFBVyxDQUFDO0FBQ2hCLElBQUksTUFBVyxDQUFDO0FBRWhCLG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQU0sRUFBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQVksRUFBRSxPQUFlLGFBQWEsRUFBRSxFQUFFO0lBQ25FLElBQUksT0FBWSxDQUFDO0lBQ2pCLE9BQU8sQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO1FBQ3RCLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE9BQU8sR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsR0FBUyxFQUFFO0lBQ25DLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQVMsRUFBRTtJQUNyQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsZUFBZSxFQUFFLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxDQUFDLFVBQWtCLEVBQWlCLEVBQUU7SUFDdEQsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLGVBQWUsR0FBRyxDQUFDLFVBQWtCLEVBQVUsRUFBRTtJQUNuRCxJQUFJLENBQUMsVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2hELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDdEQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFlLEVBQUUsUUFBZ0IsRUFBRSxNQUFXLEVBQUUsTUFBVyxFQUFRLEVBQUU7SUFDeEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU87SUFDWCxDQUFDO0lBRUQsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUV0RSx1Q0FBdUM7SUFDdkMsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1QixhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQVksRUFBRSxZQUFxQixFQUFFLFFBQWEsRUFBRSxFQUFFO0lBQy9FLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQztJQUV6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEIsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQztZQUMzQyxRQUFRO1NBQ1gsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDakcsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFL0MsTUFBTSxlQUFlLEdBQUcsUUFBUTtRQUM1QixDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztRQUNuRCxDQUFDLENBQUMsUUFBUSxDQUFDO0lBRWYsT0FBTztRQUNILElBQUksRUFBRSxRQUFRO1FBQ2QsUUFBUSxFQUFFLGVBQWU7S0FDNUIsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRztJQUM1QiwrQkFBK0I7SUFDL0Isa0NBQWtDO0lBQ2xDLHdDQUF3QztDQUMzQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQVMsRUFBVyxFQUFFO0lBQzlDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVoQywyREFBMkQ7SUFDM0QsMkNBQTJDO0lBQzNDLG1CQUFtQjtJQUNuQixJQUFJO0lBRUoscUNBQXFDO0lBQ3JDLElBQUksdUJBQXVCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFXLEVBQW9CLEVBQUU7SUFDbkQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1YsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLFFBQVE7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNuQyxJQUFJLE1BQU0sQ0FBQyxVQUFVO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDdkMsSUFBSSxNQUFNLENBQUMsV0FBVztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXpDLHNCQUFzQjtJQUN0QixJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssU0FBUztRQUM5QixNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVM7UUFDNUIsQ0FBQyxNQUFNLENBQUMsUUFBUTtRQUNoQixDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ2xCLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBVyxFQUFFLFNBQTJCLEVBQWlCLEVBQUU7SUFDN0UsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxRQUFRLFNBQVMsRUFBRSxDQUFDO1FBQ2hCLEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQztRQUNoRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7UUFDbEQsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDO0lBQ3pCLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUNsQixJQUFZLEVBQ1osTUFBVyxFQUNYLE9BQVksRUFDWixRQUFhLEVBQ2IsYUFBcUIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEVBQy9DLGFBQXNCLEtBQUssRUFDM0IsU0FBc0IsRUFBRSxFQUN4QixPQUF1QixFQUN6QixFQUFFO0lBQ0EsMkJBQTJCO0lBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEcsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDdEIsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDO1lBQ0QsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDeEMsUUFBUSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakUsUUFBUSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtJQUMxQyxDQUFDO0lBRUQsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRWxELE1BQU0sU0FBUyxHQUFjO1FBQ3pCLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ2xDLFFBQVE7UUFDUixJQUFJO1FBQ0osSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixVQUFVO1FBQ1YsT0FBTztRQUNQLFNBQVM7UUFDVCxTQUFTO0tBQ1osQ0FBQztJQUVGLG9CQUFvQjtJQUNwQixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFekMsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNYLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDMUMsQ0FBQztTQUFNLENBQUM7UUFDSixRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsT0FBTyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxVQUFrQixFQUFXLEVBQUU7SUFDcEQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXpDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDWCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUzQyxJQUFJLFdBQVcsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEUsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVDLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2pDLCtCQUErQjtnQkFDL0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDeEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDM0IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFnQixFQUFVLEVBQUU7SUFDcEQsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTNDLElBQUksV0FBVyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM5QyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLE1BQU0sbUJBQW1CLEdBQWEsRUFBRSxDQUFDO0lBRXpDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDckMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN2QixZQUFZLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFlBQVksQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFNBQW9CLEVBQUUsU0FBa0IsRUFBVSxFQUFFO0lBQ25GLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNyQixNQUFNLG1CQUFtQixHQUFhLEVBQUUsQ0FBQztJQUV6QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQzVCLDJDQUEyQztRQUMzQyxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQWdCLEVBQUUsRUFBRTtnQkFDdkUsSUFBSSxTQUFTLEVBQUUsU0FBUyxLQUFLLFNBQVM7b0JBQ2xDLENBQUMsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNwRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDdkQsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixtQkFBbUI7WUFDbkIsTUFBTSxTQUFTLEdBQUcsS0FBa0IsQ0FBQztZQUNyQyxJQUFJLFNBQVMsRUFBRSxTQUFTLEtBQUssU0FBUztnQkFDbEMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsb0NBQW9DO0lBQ3BDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNyQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFlBQVksRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFNBQW9CLEVBQVcsRUFBRTtJQUN2RCxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksUUFBYSxDQUFDO0lBQ2xCLElBQUksQ0FBQztRQUNELFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDdEIsU0FBUyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVTtRQUN4RCxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNqQixDQUFDLENBQUMsUUFBUSxDQUFDO0lBRWYsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUYsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUV2QixPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsY0FBdUIsS0FBSyxFQUFRLEVBQUU7SUFDM0QsSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QixPQUFPO0lBQ1gsQ0FBQztJQUVELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksY0FBdUIsQ0FBQztJQUU1QixHQUFHLENBQUM7UUFDQSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QiwyQkFBMkI7WUFDM0IsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO29CQUM1QyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7d0JBQzlCLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBQzFCLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osbUJBQW1CO2dCQUNuQixJQUFJLGdCQUFnQixDQUFDLEtBQWtCLENBQUMsRUFBRSxDQUFDO29CQUN2QyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxFQUFFLENBQUM7SUFDWCxDQUFDLFFBQVEsY0FBYyxJQUFJLElBQUksR0FBRyxnQkFBZ0IsRUFBRTtJQUVwRCxJQUFJLGNBQWMsSUFBSSxJQUFJLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFTLEVBQVEsRUFBRTtJQUN6QyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVEsRUFBUSxFQUFFO0lBQ3hDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBWSxFQUFFLENBQUMsY0FBYyxDQUFDO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQVMsRUFBRTtJQUMzQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQzNCLENBQUMsQ0FBQztBQUVGLG9CQUFvQjtBQUNwQixNQUFNLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7SUFDM0MsWUFBWSxHQUFHLElBQUksQ0FBQztJQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRWxCLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWlCLEtBQUssRUFBRSxjQUF1QixLQUFLLEVBQVEsRUFBRTtJQUMxRixJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1IsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7U0FBTSxDQUFDO1FBQ0osSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNmLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDckIsT0FBTztRQUNYLENBQUM7UUFDRCx3QkFBd0IsRUFBRSxDQUFDO0lBQy9CLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDNUIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ25CLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztJQUUxQyxPQUFPLENBQUMsUUFBaUIsS0FBSyxFQUFRLEVBQUU7UUFDcEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1YsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxPQUFPO1lBQ1gsQ0FBQztZQUNELE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDZCxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMLGdDQUFnQztBQUMvQixNQUFjLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElER2VuZXJhdG9yIH0gZnJvbSAnLi9pZC1nZW5lcmF0b3InO1xuaW1wb3J0IHsgJHBhcnNlRXhwciB9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXInO1xuaW1wb3J0IHsgZmluZFZhbHVlT2YgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGNsb25lLCBmbGF0dGVuLCBpc0FycmF5LCBpc0VxdWFsLCBpc09iamVjdCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuLy8gQ29uc3RhbnRzXG5jb25zdCBXSURHRVRfSURfUkVHRVggPSAvXih3aWRnZXQtW15fXSspLztcbmNvbnN0IFdJREdFVF9QUk9QRVJUWV9SRUdFWCA9IC9ed2lkZ2V0LVteX10rXyguKykkLztcbmNvbnN0IEFSUkFZX0lOREVYX1BMQUNFSE9MREVSID0gJ1skaV0nO1xuY29uc3QgQVJSQVlfSU5ERVhfWkVSTyA9ICdbMF0nO1xuY29uc3QgREVCT1VOQ0VfV0FJVCA9IDEwMDtcbmNvbnN0IE1BWF9XQVRDSF9DWUNMRVMgPSA1O1xuXG5jb25zdCByZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5jb25zdCB3YXRjaElkR2VuZXJhdG9yID0gbmV3IElER2VuZXJhdG9yKCd3YXRjaC1pZC0nKTtcblxuZXhwb3J0IGNvbnN0IEZJUlNUX1RJTUVfV0FUQ0ggPSBPYmplY3QuZnJlZXplKHt9KTtcblxuLy8gVHlwZSBkZWZpbml0aW9uc1xuaW50ZXJmYWNlIFdhdGNoSW5mbyB7XG4gICAgZm46ICgpID0+IGFueTtcbiAgICBsaXN0ZW5lcjogKG5ld1ZhbDogYW55LCBvbGRWYWw6IGFueSkgPT4gdm9pZDtcbiAgICBleHByOiBzdHJpbmc7XG4gICAgbGFzdDogYW55O1xuICAgIGRvTm90Q2xvbmU6IGJvb2xlYW47XG4gICAgaXNNdXRlZD86ICgpID0+IGJvb2xlYW47XG4gICAgc2NvcGVUeXBlOiBTY29wZVR5cGUgfCBudWxsO1xuICAgIHNjb3BlTmFtZTogc3RyaW5nIHwgbnVsbDtcbn1cblxudHlwZSBTY29wZVR5cGUgPSAnUGFnZScgfCAnUHJlZmFiJyB8ICdQYXJ0aWFsJyB8ICdBcHAnO1xuXG5pbnRlcmZhY2UgV2F0Y2hDb25maWcge1xuICAgIGFycmF5VHlwZT86IGJvb2xlYW47XG4gICAgaXNMaXN0PzogYm9vbGVhbjtcbn1cblxuLy8gU3RhdGVcbmxldCBtdXRlZCA9IGZhbHNlO1xubGV0IGNoYW5nZWRCeVdhdGNoID0gZmFsc2U7XG5sZXQgc2tpcFdhdGNoZXJzID0gZmFsc2U7XG5sZXQgbmdab25lOiBhbnk7XG5sZXQgYXBwUmVmOiBhbnk7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgaXNGaXJzdFRpbWVDaGFuZ2UgPSAodjogYW55KTogYm9vbGVhbiA9PiB2ID09PSBGSVJTVF9USU1FX1dBVENIO1xuXG5leHBvcnQgY29uc3QgZGVib3VuY2UgPSAoZm46IEZ1bmN0aW9uLCB3YWl0OiBudW1iZXIgPSBERUJPVU5DRV9XQUlUKSA9PiB7XG4gICAgbGV0IHRpbWVvdXQ6IGFueTtcbiAgICByZXR1cm4gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgIHdpbmRvd1snX196b25lX3N5bWJvbF9fY2xlYXJUaW1lb3V0J10odGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSB3aW5kb3dbJ19fem9uZV9zeW1ib2xfX3NldFRpbWVvdXQnXSgoKSA9PiBmbiguLi5hcmdzKSwgd2FpdCk7XG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBtdXRlV2F0Y2hlcnMgPSAoKTogdm9pZCA9PiB7XG4gICAgbXV0ZWQgPSB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IHVuTXV0ZVdhdGNoZXJzID0gKCk6IHZvaWQgPT4ge1xuICAgIG11dGVkID0gZmFsc2U7XG4gICAgdHJpZ2dlcldhdGNoZXJzKCk7XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIHdpZGdldCBJRCBmcm9tIGlkZW50aWZpZXIgKGUuZy4sIFwid2lkZ2V0LWlkMjNfZXZlbnRzb3VyY2VcIiAtPiBcIndpZGdldC1pZDIzXCIpXG4gKi9cbmNvbnN0IGdldFdpZGdldElkID0gKGlkZW50aWZpZXI6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIGlmICghaWRlbnRpZmllciB8fCB0eXBlb2YgaWRlbnRpZmllciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gaWRlbnRpZmllci5tYXRjaChXSURHRVRfSURfUkVHRVgpO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogbnVsbDtcbn07XG5cbi8qKlxuICogRXh0cmFjdHMgcHJvcGVydHkgbmFtZSBmcm9tIGlkZW50aWZpZXIgKGUuZy4sIFwid2lkZ2V0LWlkMjNfZXZlbnRzb3VyY2VcIiAtPiBcImV2ZW50c291cmNlXCIpXG4gKi9cbmNvbnN0IGdldFByb3BlcnR5TmFtZSA9IChpZGVudGlmaWVyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghaWRlbnRpZmllciB8fCB0eXBlb2YgaWRlbnRpZmllciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gaWRlbnRpZmllci5tYXRjaChXSURHRVRfUFJPUEVSVFlfUkVHRVgpO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogaWRlbnRpZmllcjtcbn07XG5cbi8qKlxuICogQXJyYXkgY29uc3VtZXIgd3JhcHBlciBmb3IgYXJyYXktYmFzZWQgZXhwcmVzc2lvbnNcbiAqL1xuY29uc3QgYXJyYXlDb25zdW1lciA9IChsaXN0ZW5lckZuOiBhbnksIHJlc3RFeHByOiBzdHJpbmcsIG5ld1ZhbDogYW55LCBvbGRWYWw6IGFueSk6IHZvaWQgPT4ge1xuICAgIGlmICghaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZm9ybWF0dGVkRGF0YSA9IG5ld1ZhbC5tYXAoZGF0dW0gPT4gZmluZFZhbHVlT2YoZGF0dW0sIHJlc3RFeHByKSk7XG5cbiAgICAvLyBGbGF0dGVuIGlmIHJlc3VsdCBpcyBhcnJheSBvZiBhcnJheXNcbiAgICBpZiAoaXNBcnJheShmb3JtYXR0ZWREYXRhWzBdKSkge1xuICAgICAgICBmb3JtYXR0ZWREYXRhID0gZmxhdHRlbihmb3JtYXR0ZWREYXRhKTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lckZuKGZvcm1hdHRlZERhdGEsIG9sZFZhbCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgd2F0Y2ggaW5mbyBmb3IgYXJyYXkgZXhwcmVzc2lvbnNcbiAqL1xuY29uc3QgZ2V0VXBkYXRlZFdhdGNoSW5mbyA9IChleHByOiBzdHJpbmcsIGFjY2VwdHNBcnJheTogYm9vbGVhbiwgbGlzdGVuZXI6IGFueSkgPT4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gL1xcW1xcJGlcXF0vZztcblxuICAgIGlmICghYWNjZXB0c0FycmF5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleHByOiBleHByLnJlcGxhY2UocmVnZXgsIEFSUkFZX0lOREVYX1pFUk8pLFxuICAgICAgICAgICAgbGlzdGVuZXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0SW5kZXggPSBleHByLmxhc3RJbmRleE9mKEFSUkFZX0lOREVYX1BMQUNFSE9MREVSKTtcbiAgICBjb25zdCBiYXNlRXhwciA9IGV4cHIuc3Vic3RyaW5nKDAsIGxhc3RJbmRleCkucmVwbGFjZShBUlJBWV9JTkRFWF9QTEFDRUhPTERFUiwgQVJSQVlfSU5ERVhfWkVSTyk7XG4gICAgY29uc3QgcmVzdEV4cHIgPSBleHByLnN1YnN0cmluZyhsYXN0SW5kZXggKyA1KTtcblxuICAgIGNvbnN0IGFycmF5Q29uc3VtZXJGbiA9IHJlc3RFeHByXG4gICAgICAgID8gYXJyYXlDb25zdW1lci5iaW5kKHVuZGVmaW5lZCwgbGlzdGVuZXIsIHJlc3RFeHByKVxuICAgICAgICA6IGxpc3RlbmVyO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZXhwcjogYmFzZUV4cHIsXG4gICAgICAgIGxpc3RlbmVyOiBhcnJheUNvbnN1bWVyRm5cbiAgICB9O1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGFuIGV4cHJlc3Npb24gaXMgc3RhdGljIChkb2Vzbid0IG5lZWQgdG8gYmUgd2F0Y2hlZClcbiAqL1xuY29uc3QgU1RBVElDX0VYUFJFU1NJT05fTkFNRVMgPSBbXG4gICAgXCJyb3cuZ2V0UHJvcGVydHkoJ2ludmVzdG1lbnQnKVwiLFxuICAgIFwicm93LmdldFByb3BlcnR5KCdmYWN0c2hlZXRMaW5rJylcIixcbiAgICBcInJvdy5nZXRQcm9wZXJ0eSgnaXNSZWJhbGFuY2VFbGlnaWJsZScpXCJcbl07XG5cbmNvbnN0IGlzU3RhdGljRXhwcmVzc2lvbiA9IChleHByOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBpZiAodHlwZW9mIGV4cHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkRXhwciA9IGV4cHIudHJpbSgpO1xuXG4gICAgLy8gRXhwcmVzc2lvbnMgdGhhdCBhbHdheXMgZXZhbHVhdGUgdG8gbG9jYWxpemF0aW9uIHN0cmluZ3NcbiAgICAvLyBpZiAodHJpbW1lZEV4cHIuaW5jbHVkZXMoJ2FwcExvY2FsZScpKSB7XG4gICAgLy8gICAgIHJldHVybiB0cnVlO1xuICAgIC8vIH1cblxuICAgIC8vIEhhcmQtY29kZWQgc3RhdGljIGV4cHJlc3Npb24gbmFtZXNcbiAgICBpZiAoU1RBVElDX0VYUFJFU1NJT05fTkFNRVMuaW5jbHVkZXModHJpbW1lZEV4cHIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgc2NvcGUgdHlwZSBmcm9tIHRoZSBzY29wZSBvYmplY3RcbiAqL1xuY29uc3QgZ2V0U2NvcGVUeXBlID0gKCRzY29wZTogYW55KTogU2NvcGVUeXBlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCEkc2NvcGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCRzY29wZS5wYWdlTmFtZSkgcmV0dXJuICdQYWdlJztcbiAgICBpZiAoJHNjb3BlLnByZWZhYk5hbWUpIHJldHVybiAnUHJlZmFiJztcbiAgICBpZiAoJHNjb3BlLnBhcnRpYWxOYW1lKSByZXR1cm4gJ1BhcnRpYWwnO1xuXG4gICAgLy8gQ2hlY2sgZm9yIEFwcCBzY29wZVxuICAgIGlmICgkc2NvcGUuVmFyaWFibGVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgJHNjb3BlLkFjdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAhJHNjb3BlLnBhZ2VOYW1lICYmXG4gICAgICAgICEkc2NvcGUucHJlZmFiTmFtZSAmJlxuICAgICAgICAhJHNjb3BlLnBhcnRpYWxOYW1lKSB7XG4gICAgICAgIHJldHVybiAnQXBwJztcbiAgICB9XG5cbiAgICBpZiAoJHNjb3BlLmNvbnN0cnVjdG9yPy5uYW1lID09PSAnQXBwUmVmJykge1xuICAgICAgICByZXR1cm4gJ0FwcCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIEdldHMgc2NvcGUgbmFtZSBiYXNlZCBvbiBzY29wZSB0eXBlXG4gKi9cbmNvbnN0IGdldFNjb3BlTmFtZSA9ICgkc2NvcGU6IGFueSwgc2NvcGVUeXBlOiBTY29wZVR5cGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gICAgaWYgKCFzY29wZVR5cGUgfHwgISRzY29wZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNjb3BlVHlwZSkge1xuICAgICAgICBjYXNlICdQcmVmYWInOiByZXR1cm4gJHNjb3BlLnByZWZhYk5hbWUgfHwgbnVsbDtcbiAgICAgICAgY2FzZSAnUGFydGlhbCc6IHJldHVybiAkc2NvcGUucGFydGlhbE5hbWUgfHwgbnVsbDtcbiAgICAgICAgY2FzZSAnUGFnZSc6IHJldHVybiAkc2NvcGUucGFnZU5hbWUgfHwgbnVsbDtcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYWluIHdhdGNoIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCAkd2F0Y2ggPSAoXG4gICAgZXhwcjogc3RyaW5nLFxuICAgICRzY29wZTogYW55LFxuICAgICRsb2NhbHM6IGFueSxcbiAgICBsaXN0ZW5lcjogYW55LFxuICAgIGlkZW50aWZpZXI6IHN0cmluZyA9IHdhdGNoSWRHZW5lcmF0b3IubmV4dFVpZCgpLFxuICAgIGRvTm90Q2xvbmU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjb25maWc6IFdhdGNoQ29uZmlnID0ge30sXG4gICAgaXNNdXRlZD86ICgpID0+IGJvb2xlYW5cbikgPT4ge1xuICAgIC8vIEhhbmRsZSBhcnJheSBleHByZXNzaW9uc1xuICAgIGlmIChleHByLmluY2x1ZGVzKEFSUkFZX0lOREVYX1BMQUNFSE9MREVSKSkge1xuICAgICAgICBjb25zdCB3YXRjaEluZm8gPSBnZXRVcGRhdGVkV2F0Y2hJbmZvKGV4cHIsIGNvbmZpZy5hcnJheVR5cGUgfHwgY29uZmlnLmlzTGlzdCB8fCBmYWxzZSwgbGlzdGVuZXIpO1xuICAgICAgICBleHByID0gd2F0Y2hJbmZvLmV4cHI7XG4gICAgICAgIGxpc3RlbmVyID0gd2F0Y2hJbmZvLmxpc3RlbmVyO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzdGF0aWMgZXhwcmVzc2lvbnNcbiAgICBpZiAoaXNTdGF0aWNFeHByZXNzaW9uKGV4cHIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmbiA9ICRwYXJzZUV4cHIoZXhwcik7XG4gICAgICAgICAgICBjb25zdCBzdGF0aWNWYWx1ZSA9IGZuKCRzY29wZSwgJGxvY2Fscyk7XG4gICAgICAgICAgICBsaXN0ZW5lcihzdGF0aWNWYWx1ZSwgRklSU1RfVElNRV9XQVRDSCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgRXJyb3IgZXZhbHVhdGluZyBzdGF0aWMgZXhwcmVzc2lvbiAnJHtleHByfSc6YCwgZSk7XG4gICAgICAgICAgICBsaXN0ZW5lcih1bmRlZmluZWQsIEZJUlNUX1RJTUVfV0FUQ0gpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKSA9PiB7IH07IC8vIE5vLW9wIHVuc3Vic2NyaWJlXG4gICAgfVxuXG4gICAgY29uc3QgZm4gPSAkcGFyc2VFeHByKGV4cHIpO1xuICAgIGNvbnN0IHNjb3BlVHlwZSA9IGdldFNjb3BlVHlwZSgkc2NvcGUpO1xuICAgIGNvbnN0IHNjb3BlTmFtZSA9IGdldFNjb3BlTmFtZSgkc2NvcGUsIHNjb3BlVHlwZSk7XG5cbiAgICBjb25zdCB3YXRjaEluZm86IFdhdGNoSW5mbyA9IHtcbiAgICAgICAgZm46IGZuLmJpbmQobnVsbCwgJHNjb3BlLCAkbG9jYWxzKSxcbiAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIGxhc3Q6IEZJUlNUX1RJTUVfV0FUQ0gsXG4gICAgICAgIGRvTm90Q2xvbmUsXG4gICAgICAgIGlzTXV0ZWQsXG4gICAgICAgIHNjb3BlVHlwZSxcbiAgICAgICAgc2NvcGVOYW1lXG4gICAgfTtcblxuICAgIC8vIFN0b3JlIGluIHJlZ2lzdHJ5XG4gICAgY29uc3Qgd2lkZ2V0SWQgPSBnZXRXaWRnZXRJZChpZGVudGlmaWVyKTtcblxuICAgIGlmICh3aWRnZXRJZCkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBnZXRQcm9wZXJ0eU5hbWUoaWRlbnRpZmllcik7XG4gICAgICAgIGlmICghcmVnaXN0cnkuaGFzKHdpZGdldElkKSkge1xuICAgICAgICAgICAgcmVnaXN0cnkuc2V0KHdpZGdldElkLCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2lkZ2V0R3JvdXAgPSByZWdpc3RyeS5nZXQod2lkZ2V0SWQpO1xuICAgICAgICB3aWRnZXRHcm91cFtwcm9wZXJ0eU5hbWVdID0gd2F0Y2hJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZ2lzdHJ5LnNldChpZGVudGlmaWVyLCB3YXRjaEluZm8pO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiAkdW53YXRjaChpZGVudGlmaWVyKTtcbn07XG5cbi8qKlxuICogVW53YXRjaGVzIGEgc2luZ2xlIGlkZW50aWZpZXJcbiAqL1xuZXhwb3J0IGNvbnN0ICR1bndhdGNoID0gKGlkZW50aWZpZXI6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHdpZGdldElkID0gZ2V0V2lkZ2V0SWQoaWRlbnRpZmllcik7XG5cbiAgICBpZiAod2lkZ2V0SWQpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lKGlkZW50aWZpZXIpO1xuICAgICAgICBjb25zdCB3aWRnZXRHcm91cCA9IHJlZ2lzdHJ5LmdldCh3aWRnZXRJZCk7XG5cbiAgICAgICAgaWYgKHdpZGdldEdyb3VwICYmIHR5cGVvZiB3aWRnZXRHcm91cCA9PT0gJ29iamVjdCcgJiYgIXdpZGdldEdyb3VwLmZuKSB7XG4gICAgICAgICAgICBjb25zdCB3YXRjaEluZm8gPSB3aWRnZXRHcm91cFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgaWYgKHdhdGNoSW5mbykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB3aWRnZXRHcm91cFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgICAgIC8vIENsZWFuIHVwIGVtcHR5IHdpZGdldCBncm91cHNcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMod2lkZ2V0R3JvdXApLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RyeS5kZWxldGUod2lkZ2V0SWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIHRvIGRpcmVjdCBsb29rdXBcbiAgICBpZiAocmVnaXN0cnkuaGFzKGlkZW50aWZpZXIpKSB7XG4gICAgICAgIHJlZ2lzdHJ5LmRlbGV0ZShpZGVudGlmaWVyKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVbndhdGNoZXMgYWxsIHdhdGNoZXJzIGZvciBhIHNwZWNpZmljIHdpZGdldCBJRFxuICovXG5leHBvcnQgY29uc3QgJHVud2F0Y2hBbGwgPSAod2lkZ2V0SWQ6IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgaWYgKCF3aWRnZXRJZCB8fCB0eXBlb2Ygd2lkZ2V0SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZGdldEdyb3VwID0gcmVnaXN0cnkuZ2V0KHdpZGdldElkKTtcblxuICAgIGlmICh3aWRnZXRHcm91cCAmJiB0eXBlb2Ygd2lkZ2V0R3JvdXAgPT09ICdvYmplY3QnICYmICF3aWRnZXRHcm91cC5mbikge1xuICAgICAgICBjb25zdCBjb3VudCA9IE9iamVjdC5rZXlzKHdpZGdldEdyb3VwKS5sZW5ndGg7XG4gICAgICAgIHJlZ2lzdHJ5LmRlbGV0ZSh3aWRnZXRJZCk7XG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjazogZmluZCBhbGwgaWRlbnRpZmllcnMgc3RhcnRpbmcgd2l0aCB0aGlzIHdpZGdldCBJRFxuICAgIGxldCByZW1vdmVkQ291bnQgPSAwO1xuICAgIGNvbnN0IGlkZW50aWZpZXJzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XG5cbiAgICByZWdpc3RyeS5mb3JFYWNoKChfLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKHdpZGdldElkICsgJ18nKSkge1xuICAgICAgICAgICAgaWRlbnRpZmllcnNUb1JlbW92ZS5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlkZW50aWZpZXJzVG9SZW1vdmUuZm9yRWFjaChpZGVudGlmaWVyID0+IHtcbiAgICAgICAgaWYgKCR1bndhdGNoKGlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICByZW1vdmVkQ291bnQrKztcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlbW92ZWRDb3VudDtcbn07XG5cbi8qKlxuICogVW53YXRjaGVzIGFsbCB3YXRjaGVycyBmb3IgYSBzcGVjaWZpYyBzY29wZSAoUGFnZSwgUHJlZmFiLCBQYXJ0aWFsLCBvciBBcHApXG4gKiBOb3cgd29ya3MgZGlyZWN0bHkgd2l0aCB0aGUgbWFpbiByZWdpc3RyeSBpbnN0ZWFkIG9mIHNlcGFyYXRlIHNjb3BlZCByZWdpc3RyaWVzXG4gKi9cbmV4cG9ydCBjb25zdCAkdW53YXRjaEFsbEJ5U2NvcGUgPSAoc2NvcGVUeXBlOiBTY29wZVR5cGUsIHNjb3BlTmFtZT86IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgaWYgKCFzY29wZVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgbGV0IHJlbW92ZWRDb3VudCA9IDA7XG4gICAgY29uc3QgaWRlbnRpZmllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcblxuICAgIHJlZ2lzdHJ5LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgLy8gSGFuZGxlIGdyb3VwZWQgc3RydWN0dXJlICh3aWRnZXQgZ3JvdXBzKVxuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhdmFsdWUuZm4pIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5mb3JFYWNoKChbcHJvcGVydHlOYW1lLCB3YXRjaEluZm9dOiBbc3RyaW5nLCBhbnldKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHdhdGNoSW5mbz8uc2NvcGVUeXBlID09PSBzY29wZVR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKCFzY29wZU5hbWUgfHwgd2F0Y2hJbmZvLnNjb3BlTmFtZSA9PT0gc2NvcGVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyc1RvUmVtb3ZlLnB1c2goYCR7a2V5fV8ke3Byb3BlcnR5TmFtZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERpcmVjdCB3YXRjaEluZm9cbiAgICAgICAgICAgIGNvbnN0IHdhdGNoSW5mbyA9IHZhbHVlIGFzIFdhdGNoSW5mbztcbiAgICAgICAgICAgIGlmICh3YXRjaEluZm8/LnNjb3BlVHlwZSA9PT0gc2NvcGVUeXBlICYmXG4gICAgICAgICAgICAgICAgKCFzY29wZU5hbWUgfHwgd2F0Y2hJbmZvLnNjb3BlTmFtZSA9PT0gc2NvcGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIGlkZW50aWZpZXJzVG9SZW1vdmUucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBVbndhdGNoIGFsbCBjb2xsZWN0ZWQgaWRlbnRpZmllcnNcbiAgICBpZGVudGlmaWVyc1RvUmVtb3ZlLmZvckVhY2goaWRlbnRpZmllciA9PiB7XG4gICAgICAgIGlmICgkdW53YXRjaChpZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgcmVtb3ZlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZW1vdmVkQ291bnQ7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyBhIHNpbmdsZSB3YXRjaCBpbmZvIGR1cmluZyB0cmlnZ2VyIGN5Y2xlXG4gKi9cbmNvbnN0IHByb2Nlc3NXYXRjaEluZm8gPSAod2F0Y2hJbmZvOiBXYXRjaEluZm8pOiBib29sZWFuID0+IHtcbiAgICBpZiAoIXdhdGNoSW5mbz8uZm4gfHwgKHdhdGNoSW5mby5pc011dGVkPy4oKSA/PyBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBuZXdWYWx1ZTogYW55O1xuICAgIHRyeSB7XG4gICAgICAgIG5ld1ZhbHVlID0gd2F0Y2hJbmZvLmZuKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEVycm9yIGV4ZWN1dGluZyBleHByZXNzaW9uOiAnJHt3YXRjaEluZm8uZXhwcn0nYCwgZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaXNFcXVhbChuZXdWYWx1ZSwgd2F0Y2hJbmZvLmxhc3QpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDaGFuZ2UgZGV0ZWN0ZWRcbiAgICBjaGFuZ2VkQnlXYXRjaCA9IHRydWU7XG4gICAgd2F0Y2hJbmZvLmxhc3QgPSBpc09iamVjdChuZXdWYWx1ZSkgJiYgIXdhdGNoSW5mby5kb05vdENsb25lXG4gICAgICAgID8gY2xvbmUobmV3VmFsdWUpXG4gICAgICAgIDogbmV3VmFsdWU7XG5cbiAgICB3YXRjaEluZm8ubGlzdGVuZXIobmV3VmFsdWUsIHdhdGNoSW5mby5sYXN0ID09PSBuZXdWYWx1ZSA/IEZJUlNUX1RJTUVfV0FUQ0ggOiB3YXRjaEluZm8ubGFzdCk7XG4gICAgY2hhbmdlZEJ5V2F0Y2ggPSBmYWxzZTtcblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbGwgd2F0Y2hlcnNcbiAqL1xuY29uc3QgdHJpZ2dlcldhdGNoZXJzID0gKGlnbm9yZU11dGVkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkID0+IHtcbiAgICBpZiAobXV0ZWQgJiYgIWlnbm9yZU11dGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcGFzcyA9IDE7XG4gICAgbGV0IGNoYW5nZURldGVjdGVkOiBib29sZWFuO1xuXG4gICAgZG8ge1xuICAgICAgICBjaGFuZ2VEZXRlY3RlZCA9IGZhbHNlO1xuXG4gICAgICAgIHJlZ2lzdHJ5LmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZ3JvdXBlZCBzdHJ1Y3R1cmVcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICF2YWx1ZS5mbikge1xuICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXModmFsdWUpLmZvckVhY2goKHdhdGNoSW5mbzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzV2F0Y2hJbmZvKHdhdGNoSW5mbykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Qgd2F0Y2hJbmZvXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NXYXRjaEluZm8odmFsdWUgYXMgV2F0Y2hJbmZvKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwYXNzKys7XG4gICAgfSB3aGlsZSAoY2hhbmdlRGV0ZWN0ZWQgJiYgcGFzcyA8IE1BWF9XQVRDSF9DWUNMRVMpO1xuXG4gICAgaWYgKGNoYW5nZURldGVjdGVkICYmIHBhc3MgPT09IE1BWF9XQVRDSF9DWUNMRVMpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBXYXRjaCBjeWNsZXMgZXhjZWVkZWQgbGltaXQgb2YgJHtNQVhfV0FUQ0hfQ1lDTEVTfWApO1xuICAgIH1cbn07XG5cbi8vIEFuZ3VsYXIgem9uZSBpbnRlZ3JhdGlvblxuZXhwb3J0IGNvbnN0IHNldE5nWm9uZSA9ICh6b25lOiBhbnkpOiB2b2lkID0+IHtcbiAgICBuZ1pvbmUgPSB6b25lO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEFwcFJlZiA9IChyZWY6IGFueSk6IHZvaWQgPT4ge1xuICAgIGFwcFJlZiA9IHJlZjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NoYW5nZUZyb21XYXRjaCA9ICgpOiBib29sZWFuID0+IGNoYW5nZWRCeVdhdGNoO1xuZXhwb3J0IGNvbnN0IHJlc2V0Q2hhbmdlRnJvbVdhdGNoID0gKCk6IHZvaWQgPT4ge1xuICAgIGNoYW5nZWRCeVdhdGNoID0gZmFsc2U7XG59O1xuXG4vLyBEZWJvdW5jZWQgdHJpZ2dlclxuY29uc3QgZGVib3VuY2VkVHJpZ2dlcldhdGNoZXJzID0gZGVib3VuY2UoKCkgPT4ge1xuICAgIHNraXBXYXRjaGVycyA9IHRydWU7XG4gICAgbmdab25lLnJ1bigoKSA9PiB0cmlnZ2VyV2F0Y2hlcnMoKSk7XG59LCBERUJPVU5DRV9XQUlUKTtcblxuZXhwb3J0IGNvbnN0ICRpbnZva2VXYXRjaGVycyA9IChmb3JjZTogYm9vbGVhbiA9IGZhbHNlLCBpZ25vcmVNdXRlZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICAgIHRyaWdnZXJXYXRjaGVycyhpZ25vcmVNdXRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNraXBXYXRjaGVycykge1xuICAgICAgICAgICAgc2tpcFdhdGNoZXJzID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVib3VuY2VkVHJpZ2dlcldhdGNoZXJzKCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0ICRhcHBEaWdlc3QgPSAoKCkgPT4ge1xuICAgIGxldCBxdWV1ZWQgPSBmYWxzZTtcbiAgICBjb25zdCAkUkFGID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTtcblxuICAgIHJldHVybiAoZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWFwcFJlZikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcmNlKSB7XG4gICAgICAgICAgICBuZ1pvbmUucnVuKCgpID0+IGFwcFJlZi50aWNrKCkpO1xuICAgICAgICAgICAgcXVldWVkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocXVldWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVldWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICRSQUYoKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5nWm9uZS5ydW4oKCkgPT4gYXBwUmVmLnRpY2soKSk7XG4gICAgICAgICAgICAgICAgcXVldWVkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KSgpO1xuXG4vLyBFeHBvcnQgcmVnaXN0cnkgZm9yIGRlYnVnZ2luZ1xuKHdpbmRvdyBhcyBhbnkpLndhdGNoUmVnaXN0cnkgPSByZWdpc3RyeTsiXX0=
|