@wavemaker/app-ng-runtime 11.4.1-next.141653 → 11.4.1-next.141654
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.
- app-ng-runtime/components/advanced/carousel/bundles/index.umd.js +12 -23
- app-ng-runtime/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +2 -4
- app-ng-runtime/components/advanced/carousel/carousel.directive.d.ts +2 -4
- app-ng-runtime/components/advanced/carousel/esm2020/carousel-template/carousel-template.directive.mjs +6 -11
- app-ng-runtime/components/advanced/carousel/esm2020/carousel.directive.mjs +6 -11
- app-ng-runtime/components/advanced/carousel/fesm2015/index.mjs +9 -20
- app-ng-runtime/components/advanced/carousel/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/carousel/fesm2020/index.mjs +9 -16
- app-ng-runtime/components/advanced/carousel/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/login/bundles/index.umd.js +21 -27
- app-ng-runtime/components/advanced/login/esm2020/login.component.mjs +8 -13
- app-ng-runtime/components/advanced/login/fesm2015/index.mjs +7 -13
- app-ng-runtime/components/advanced/login/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/login/fesm2020/index.mjs +7 -11
- app-ng-runtime/components/advanced/login/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/login/login.component.d.ts +2 -4
- app-ng-runtime/components/advanced/marquee/bundles/index.umd.js +8 -14
- app-ng-runtime/components/advanced/marquee/esm2020/marquee.directive.mjs +6 -11
- app-ng-runtime/components/advanced/marquee/fesm2015/index.mjs +5 -11
- app-ng-runtime/components/advanced/marquee/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/marquee/fesm2020/index.mjs +5 -9
- app-ng-runtime/components/advanced/marquee/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/marquee/marquee.directive.d.ts +2 -4
- app-ng-runtime/components/base/bundles/index.umd.js +31 -61
- app-ng-runtime/components/base/esm2020/widgets/common/base/base-container.component.mjs +4 -6
- app-ng-runtime/components/base/esm2020/widgets/common/base/base.component.mjs +5 -6
- app-ng-runtime/components/base/esm2020/widgets/common/base/dataset-aware-nav.component.mjs +3 -3
- app-ng-runtime/components/base/esm2020/widgets/common/container/container.directive.mjs +7 -11
- app-ng-runtime/components/base/esm2020/widgets/common/item-template/item-template.directive.mjs +7 -10
- app-ng-runtime/components/base/esm2020/widgets/common/lazy-load/lazy-load.directive.mjs +6 -10
- app-ng-runtime/components/base/esm2020/widgets/common/message/message.component.mjs +7 -11
- app-ng-runtime/components/base/esm2020/widgets/common/partial/partial.directive.mjs +7 -10
- app-ng-runtime/components/base/esm2020/widgets/common/repeat-template/repeat-template.directive.mjs +6 -11
- app-ng-runtime/components/base/fesm2015/index.mjs +32 -62
- app-ng-runtime/components/base/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/base/fesm2020/index.mjs +32 -50
- app-ng-runtime/components/base/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/base/widgets/common/base/base-container.component.d.ts +1 -2
- app-ng-runtime/components/base/widgets/common/base/base.component.d.ts +2 -3
- app-ng-runtime/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +1 -2
- app-ng-runtime/components/base/widgets/common/container/container.directive.d.ts +2 -4
- app-ng-runtime/components/base/widgets/common/item-template/item-template.directive.d.ts +3 -4
- app-ng-runtime/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +2 -4
- app-ng-runtime/components/base/widgets/common/message/message.component.d.ts +2 -4
- app-ng-runtime/components/base/widgets/common/partial/partial.directive.d.ts +3 -4
- app-ng-runtime/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +2 -4
- app-ng-runtime/components/basic/default/anchor/anchor.component.d.ts +3 -4
- app-ng-runtime/components/basic/default/audio/audio.component.d.ts +2 -4
- app-ng-runtime/components/basic/default/bundles/index.umd.js +247 -290
- app-ng-runtime/components/basic/default/esm2020/anchor/anchor.component.mjs +7 -10
- app-ng-runtime/components/basic/default/esm2020/audio/audio.component.mjs +8 -13
- app-ng-runtime/components/basic/default/esm2020/html/html.directive.mjs +7 -11
- app-ng-runtime/components/basic/default/esm2020/icon/icon.component.mjs +9 -14
- app-ng-runtime/components/basic/default/esm2020/iframe/iframe.component.mjs +9 -13
- app-ng-runtime/components/basic/default/esm2020/label/label.directive.mjs +7 -11
- app-ng-runtime/components/basic/default/esm2020/picture/picture.directive.mjs +7 -11
- app-ng-runtime/components/basic/default/esm2020/spinner/spinner.component.mjs +9 -13
- app-ng-runtime/components/basic/default/esm2020/video/video.component.mjs +9 -13
- app-ng-runtime/components/basic/default/fesm2015/index.mjs +46 -89
- app-ng-runtime/components/basic/default/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/basic/default/fesm2020/index.mjs +46 -73
- app-ng-runtime/components/basic/default/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/basic/default/html/html.directive.d.ts +2 -4
- app-ng-runtime/components/basic/default/icon/icon.component.d.ts +2 -4
- app-ng-runtime/components/basic/default/iframe/iframe.component.d.ts +2 -4
- app-ng-runtime/components/basic/default/label/label.directive.d.ts +2 -4
- app-ng-runtime/components/basic/default/picture/picture.directive.d.ts +2 -4
- app-ng-runtime/components/basic/default/spinner/spinner.component.d.ts +2 -4
- app-ng-runtime/components/basic/default/video/video.component.d.ts +2 -4
- app-ng-runtime/components/basic/progress/bundles/index.umd.js +23 -32
- app-ng-runtime/components/basic/progress/esm2020/progress-bar/progress-bar.component.mjs +8 -12
- app-ng-runtime/components/basic/progress/esm2020/progress-circle/progress-circle.component.mjs +8 -13
- app-ng-runtime/components/basic/progress/fesm2015/index.mjs +12 -21
- app-ng-runtime/components/basic/progress/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/basic/progress/fesm2020/index.mjs +12 -19
- app-ng-runtime/components/basic/progress/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/basic/progress/progress-bar/progress-bar.component.d.ts +2 -4
- app-ng-runtime/components/basic/progress/progress-circle/progress-circle.component.d.ts +2 -4
- app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +14 -20
- app-ng-runtime/components/basic/rich-text-editor/esm2020/rich-text-editor.component.mjs +9 -13
- app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.mjs +7 -13
- app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/basic/rich-text-editor/fesm2020/index.mjs +7 -11
- app-ng-runtime/components/basic/rich-text-editor/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/basic/rich-text-editor/rich-text-editor.component.d.ts +2 -4
- app-ng-runtime/components/basic/search/bundles/index.umd.js +3 -6
- app-ng-runtime/components/basic/search/esm2020/search.component.mjs +6 -9
- app-ng-runtime/components/basic/search/fesm2015/index.mjs +4 -7
- app-ng-runtime/components/basic/search/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/basic/search/fesm2020/index.mjs +4 -7
- app-ng-runtime/components/basic/search/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/basic/search/search.component.d.ts +3 -4
- app-ng-runtime/components/chart/bundles/index.umd.js +4 -9
- app-ng-runtime/components/chart/chart.component.d.ts +3 -4
- app-ng-runtime/components/chart/esm2020/chart.component.mjs +7 -10
- app-ng-runtime/components/chart/fesm2015/index.mjs +5 -10
- app-ng-runtime/components/chart/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/chart/fesm2020/index.mjs +5 -8
- app-ng-runtime/components/chart/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -4
- app-ng-runtime/components/containers/accordion/accordion.directive.d.ts +3 -4
- app-ng-runtime/components/containers/accordion/bundles/index.umd.js +56 -66
- app-ng-runtime/components/containers/accordion/esm2020/accordion-pane/accordion-pane.component.mjs +10 -14
- app-ng-runtime/components/containers/accordion/esm2020/accordion.directive.mjs +7 -10
- app-ng-runtime/components/containers/accordion/fesm2015/index.mjs +12 -22
- app-ng-runtime/components/containers/accordion/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/containers/accordion/fesm2020/index.mjs +12 -18
- app-ng-runtime/components/containers/accordion/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/containers/layout-grid/bundles/index.umd.js +12 -25
- app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid-column/layout-grid-column.directive.mjs +7 -10
- app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid-row/layout-grid-row.directive.mjs +6 -11
- app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid.directive.mjs +6 -11
- app-ng-runtime/components/containers/layout-grid/fesm2015/index.mjs +13 -26
- app-ng-runtime/components/containers/layout-grid/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/containers/layout-grid/fesm2020/index.mjs +13 -22
- app-ng-runtime/components/containers/layout-grid/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/containers/layout-grid/layout-grid-column/layout-grid-column.directive.d.ts +3 -4
- app-ng-runtime/components/containers/layout-grid/layout-grid-row/layout-grid-row.directive.d.ts +2 -4
- app-ng-runtime/components/containers/layout-grid/layout-grid.directive.d.ts +2 -4
- app-ng-runtime/components/containers/linear-layout/bundles/index.umd.js +12 -23
- app-ng-runtime/components/containers/linear-layout/esm2020/linear-layout-item/linear-layout-item.directive.mjs +6 -11
- app-ng-runtime/components/containers/linear-layout/esm2020/linear-layout.directive.mjs +6 -11
- app-ng-runtime/components/containers/linear-layout/fesm2015/index.mjs +9 -20
- app-ng-runtime/components/containers/linear-layout/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/containers/linear-layout/fesm2020/index.mjs +9 -16
- app-ng-runtime/components/containers/linear-layout/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/containers/linear-layout/linear-layout-item/linear-layout-item.directive.d.ts +2 -4
- app-ng-runtime/components/containers/linear-layout/linear-layout.directive.d.ts +2 -4
- app-ng-runtime/components/containers/panel/bundles/index.umd.js +65 -71
- app-ng-runtime/components/containers/panel/esm2020/panel.component.mjs +12 -16
- app-ng-runtime/components/containers/panel/fesm2015/index.mjs +10 -16
- app-ng-runtime/components/containers/panel/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/containers/panel/fesm2020/index.mjs +10 -14
- app-ng-runtime/components/containers/panel/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/containers/panel/panel.component.d.ts +2 -4
- app-ng-runtime/components/containers/tabs/bundles/index.umd.js +57 -63
- app-ng-runtime/components/containers/tabs/esm2020/tab-pane/tab-pane.component.mjs +8 -12
- app-ng-runtime/components/containers/tabs/esm2020/tabs.component.mjs +7 -10
- app-ng-runtime/components/containers/tabs/fesm2015/index.mjs +12 -18
- app-ng-runtime/components/containers/tabs/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/containers/tabs/fesm2020/index.mjs +12 -18
- app-ng-runtime/components/containers/tabs/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -4
- app-ng-runtime/components/containers/tabs/tabs.component.d.ts +3 -4
- app-ng-runtime/components/containers/tile/bundles/index.umd.js +8 -14
- app-ng-runtime/components/containers/tile/esm2020/tile.directive.mjs +6 -11
- app-ng-runtime/components/containers/tile/fesm2015/index.mjs +5 -11
- app-ng-runtime/components/containers/tile/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/containers/tile/fesm2020/index.mjs +5 -9
- app-ng-runtime/components/containers/tile/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/containers/tile/tile.directive.d.ts +2 -4
- app-ng-runtime/components/containers/wizard/bundles/index.umd.js +48 -57
- app-ng-runtime/components/containers/wizard/esm2020/wizard-step/wizard-step.directive.mjs +5 -10
- app-ng-runtime/components/containers/wizard/esm2020/wizard.component.mjs +10 -14
- app-ng-runtime/components/containers/wizard/fesm2015/index.mjs +11 -20
- app-ng-runtime/components/containers/wizard/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/containers/wizard/fesm2020/index.mjs +11 -18
- app-ng-runtime/components/containers/wizard/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/containers/wizard/wizard-step/wizard-step.directive.d.ts +2 -4
- app-ng-runtime/components/containers/wizard/wizard.component.d.ts +2 -4
- app-ng-runtime/components/data/card/bundles/index.umd.js +83 -106
- app-ng-runtime/components/data/card/card-actions/card-actions.directive.d.ts +2 -4
- app-ng-runtime/components/data/card/card-content/card-content.component.d.ts +2 -4
- app-ng-runtime/components/data/card/card-footer/card-footer.directive.d.ts +2 -4
- app-ng-runtime/components/data/card/card.component.d.ts +2 -4
- app-ng-runtime/components/data/card/esm2020/card-actions/card-actions.directive.mjs +6 -11
- app-ng-runtime/components/data/card/esm2020/card-content/card-content.component.mjs +6 -11
- app-ng-runtime/components/data/card/esm2020/card-footer/card-footer.directive.mjs +6 -11
- app-ng-runtime/components/data/card/esm2020/card.component.mjs +12 -18
- app-ng-runtime/components/data/card/fesm2015/index.mjs +23 -46
- app-ng-runtime/components/data/card/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/data/card/fesm2020/index.mjs +23 -38
- app-ng-runtime/components/data/card/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/bundles/index.umd.js +128 -137
- app-ng-runtime/components/data/form/esm2020/form-action/form-action.directive.mjs +4 -9
- app-ng-runtime/components/data/form/esm2020/form-field/form-field.directive.mjs +5 -8
- app-ng-runtime/components/data/form/esm2020/form.component.mjs +5 -8
- app-ng-runtime/components/data/form/fesm2015/index.mjs +20 -29
- app-ng-runtime/components/data/form/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/fesm2020/index.mjs +20 -29
- app-ng-runtime/components/data/form/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/form-action/form-action.directive.d.ts +2 -4
- app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +3 -4
- app-ng-runtime/components/data/form/form.component.d.ts +3 -4
- app-ng-runtime/components/data/list/bundles/index.umd.js +4 -7
- app-ng-runtime/components/data/list/esm2020/list.component.mjs +7 -10
- app-ng-runtime/components/data/list/fesm2015/index.mjs +4 -7
- app-ng-runtime/components/data/list/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/data/list/fesm2020/index.mjs +4 -7
- app-ng-runtime/components/data/list/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/list/list.component.d.ts +3 -4
- app-ng-runtime/components/data/live-table/bundles/index.umd.js +3 -6
- app-ng-runtime/components/data/live-table/esm2020/live-table.component.mjs +6 -9
- app-ng-runtime/components/data/live-table/fesm2015/index.mjs +4 -7
- app-ng-runtime/components/data/live-table/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/data/live-table/fesm2020/index.mjs +4 -7
- app-ng-runtime/components/data/live-table/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/live-table/live-table.component.d.ts +3 -4
- app-ng-runtime/components/data/pagination/bundles/index.umd.js +30 -34
- app-ng-runtime/components/data/pagination/esm2020/pagination.component.mjs +10 -14
- app-ng-runtime/components/data/pagination/fesm2015/index.mjs +8 -12
- app-ng-runtime/components/data/pagination/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/data/pagination/fesm2020/index.mjs +8 -12
- app-ng-runtime/components/data/pagination/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/pagination/pagination.component.d.ts +2 -4
- app-ng-runtime/components/data/table/bundles/index.umd.js +19 -37
- app-ng-runtime/components/data/table/esm2020/table-action/table-action.directive.mjs +4 -9
- app-ng-runtime/components/data/table/esm2020/table-column/table-column.directive.mjs +5 -8
- app-ng-runtime/components/data/table/esm2020/table-column-group/table-column-group.directive.mjs +4 -9
- app-ng-runtime/components/data/table/esm2020/table-row/table-row.directive.mjs +4 -9
- app-ng-runtime/components/data/table/esm2020/table-row-action/table-row-action.directive.mjs +4 -9
- app-ng-runtime/components/data/table/esm2020/table.component.mjs +6 -9
- app-ng-runtime/components/data/table/fesm2015/index.mjs +19 -37
- app-ng-runtime/components/data/table/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/fesm2020/index.mjs +19 -37
- app-ng-runtime/components/data/table/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/table-action/table-action.directive.d.ts +2 -4
- app-ng-runtime/components/data/table/table-column/table-column.directive.d.ts +3 -4
- app-ng-runtime/components/data/table/table-column-group/table-column-group.directive.d.ts +2 -4
- app-ng-runtime/components/data/table/table-row/table-row.directive.d.ts +2 -4
- app-ng-runtime/components/data/table/table-row-action/table-row-action.directive.d.ts +2 -4
- app-ng-runtime/components/data/table/table.component.d.ts +3 -4
- app-ng-runtime/components/dialogs/alert-dialog/alert-dialog.component.d.ts +2 -4
- app-ng-runtime/components/dialogs/alert-dialog/bundles/index.umd.js +40 -46
- app-ng-runtime/components/dialogs/alert-dialog/esm2020/alert-dialog.component.mjs +9 -15
- app-ng-runtime/components/dialogs/alert-dialog/fesm2015/index.mjs +8 -14
- app-ng-runtime/components/dialogs/alert-dialog/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/alert-dialog/fesm2020/index.mjs +8 -14
- app-ng-runtime/components/dialogs/alert-dialog/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/confirm-dialog/bundles/index.umd.js +16 -22
- app-ng-runtime/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +2 -4
- app-ng-runtime/components/dialogs/confirm-dialog/esm2020/confirm-dialog.component.mjs +8 -14
- app-ng-runtime/components/dialogs/confirm-dialog/fesm2015/index.mjs +7 -13
- app-ng-runtime/components/dialogs/confirm-dialog/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/confirm-dialog/fesm2020/index.mjs +7 -13
- app-ng-runtime/components/dialogs/confirm-dialog/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/default/base-dialog.d.ts +1 -2
- app-ng-runtime/components/dialogs/default/bundles/index.umd.js +25 -31
- app-ng-runtime/components/dialogs/default/dialog-footer/dialog-footer.directive.d.ts +2 -4
- app-ng-runtime/components/dialogs/default/esm2020/base-dialog.mjs +7 -8
- app-ng-runtime/components/dialogs/default/esm2020/dialog-footer/dialog-footer.directive.mjs +6 -11
- app-ng-runtime/components/dialogs/default/fesm2015/index.mjs +11 -17
- app-ng-runtime/components/dialogs/default/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/default/fesm2020/index.mjs +11 -15
- app-ng-runtime/components/dialogs/default/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/design-dialog/bundles/index.umd.js +17 -23
- app-ng-runtime/components/dialogs/design-dialog/dialog.component.d.ts +2 -4
- app-ng-runtime/components/dialogs/design-dialog/esm2020/dialog.component.mjs +8 -14
- app-ng-runtime/components/dialogs/design-dialog/fesm2015/index.mjs +7 -13
- app-ng-runtime/components/dialogs/design-dialog/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/design-dialog/fesm2020/index.mjs +7 -13
- app-ng-runtime/components/dialogs/design-dialog/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/iframe-dialog/bundles/index.umd.js +24 -30
- app-ng-runtime/components/dialogs/iframe-dialog/esm2020/iframe-dialog.component.mjs +10 -16
- app-ng-runtime/components/dialogs/iframe-dialog/fesm2015/index.mjs +9 -15
- app-ng-runtime/components/dialogs/iframe-dialog/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/iframe-dialog/fesm2020/index.mjs +9 -15
- app-ng-runtime/components/dialogs/iframe-dialog/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +2 -4
- app-ng-runtime/components/dialogs/partial-dialog/bundles/index.umd.js +3 -8
- app-ng-runtime/components/dialogs/partial-dialog/esm2020/partial-dialog.component.mjs +5 -10
- app-ng-runtime/components/dialogs/partial-dialog/fesm2015/index.mjs +4 -9
- app-ng-runtime/components/dialogs/partial-dialog/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/partial-dialog/fesm2020/index.mjs +4 -9
- app-ng-runtime/components/dialogs/partial-dialog/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/partial-dialog/partial-dialog.component.d.ts +3 -4
- app-ng-runtime/components/input/calendar/bundles/index.umd.js +5 -10
- app-ng-runtime/components/input/calendar/calendar.component.d.ts +3 -4
- app-ng-runtime/components/input/calendar/esm2020/calendar.component.mjs +8 -11
- app-ng-runtime/components/input/calendar/fesm2015/index.mjs +6 -11
- app-ng-runtime/components/input/calendar/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/input/calendar/fesm2020/index.mjs +6 -9
- app-ng-runtime/components/input/calendar/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/input/chips/bundles/index.umd.js +87 -93
- app-ng-runtime/components/input/chips/chips.component.d.ts +2 -4
- app-ng-runtime/components/input/chips/esm2020/chips.component.mjs +9 -15
- app-ng-runtime/components/input/chips/fesm2015/index.mjs +8 -14
- app-ng-runtime/components/input/chips/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/input/chips/fesm2020/index.mjs +8 -14
- app-ng-runtime/components/input/chips/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/input/color-picker/bundles/index.umd.js +22 -28
- app-ng-runtime/components/input/color-picker/color-picker.component.d.ts +2 -4
- app-ng-runtime/components/input/color-picker/esm2020/color-picker.component.mjs +10 -14
- app-ng-runtime/components/input/color-picker/fesm2015/index.mjs +8 -14
- app-ng-runtime/components/input/color-picker/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/input/color-picker/fesm2020/index.mjs +8 -12
- app-ng-runtime/components/input/color-picker/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/input/currency/bundles/index.umd.js +4 -9
- app-ng-runtime/components/input/currency/currency.component.d.ts +3 -4
- app-ng-runtime/components/input/currency/esm2020/currency.component.mjs +7 -10
- app-ng-runtime/components/input/currency/fesm2015/index.mjs +5 -10
- app-ng-runtime/components/input/currency/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/input/currency/fesm2020/index.mjs +5 -8
- app-ng-runtime/components/input/currency/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/base-form.component.d.ts +1 -2
- app-ng-runtime/components/input/default/bundles/index.umd.js +575 -648
- app-ng-runtime/components/input/default/button/button.component.d.ts +2 -4
- app-ng-runtime/components/input/default/button-group/button-group.directive.d.ts +2 -4
- app-ng-runtime/components/input/default/checkbox/checkbox.component.d.ts +2 -4
- app-ng-runtime/components/input/default/checkboxset/checkboxset.component.d.ts +2 -4
- app-ng-runtime/components/input/default/composite/composite.directive.d.ts +2 -4
- app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +2 -3
- app-ng-runtime/components/input/default/esm2020/base-form.component.mjs +6 -7
- app-ng-runtime/components/input/default/esm2020/button/button.component.mjs +9 -14
- app-ng-runtime/components/input/default/esm2020/button-group/button-group.directive.mjs +6 -11
- app-ng-runtime/components/input/default/esm2020/checkbox/checkbox.component.mjs +9 -13
- app-ng-runtime/components/input/default/esm2020/checkboxset/checkboxset.component.mjs +10 -14
- app-ng-runtime/components/input/default/esm2020/composite/composite.directive.mjs +7 -11
- app-ng-runtime/components/input/default/esm2020/dataset-aware-form.component.mjs +6 -7
- app-ng-runtime/components/input/default/esm2020/number/number.component.mjs +7 -10
- app-ng-runtime/components/input/default/esm2020/radioset/radioset.component.mjs +10 -14
- app-ng-runtime/components/input/default/esm2020/select/select.component.mjs +11 -15
- app-ng-runtime/components/input/default/esm2020/switch/switch.component.mjs +10 -14
- app-ng-runtime/components/input/default/esm2020/text/base/base-input.mjs +6 -7
- app-ng-runtime/components/input/default/esm2020/text/calendar/input-calendar.component.mjs +8 -13
- app-ng-runtime/components/input/default/esm2020/text/color/input-color.component.mjs +8 -13
- app-ng-runtime/components/input/default/esm2020/text/email/input-email.component.mjs +8 -13
- app-ng-runtime/components/input/default/esm2020/text/locale/number-locale.mjs +3 -3
- app-ng-runtime/components/input/default/esm2020/text/number/input-number.component.mjs +9 -14
- app-ng-runtime/components/input/default/esm2020/text/text/input-text.component.mjs +9 -14
- app-ng-runtime/components/input/default/esm2020/textarea/textarea.component.mjs +9 -14
- app-ng-runtime/components/input/default/fesm2015/index.mjs +94 -167
- app-ng-runtime/components/input/default/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/fesm2020/index.mjs +94 -139
- app-ng-runtime/components/input/default/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/number/number.component.d.ts +3 -4
- app-ng-runtime/components/input/default/radioset/radioset.component.d.ts +2 -4
- app-ng-runtime/components/input/default/select/select.component.d.ts +2 -4
- app-ng-runtime/components/input/default/switch/switch.component.d.ts +2 -4
- app-ng-runtime/components/input/default/text/base/base-input.d.ts +1 -2
- app-ng-runtime/components/input/default/text/calendar/input-calendar.component.d.ts +2 -4
- app-ng-runtime/components/input/default/text/color/input-color.component.d.ts +2 -4
- app-ng-runtime/components/input/default/text/email/input-email.component.d.ts +2 -4
- app-ng-runtime/components/input/default/text/locale/number-locale.d.ts +2 -2
- app-ng-runtime/components/input/default/text/number/input-number.component.d.ts +2 -4
- app-ng-runtime/components/input/default/text/text/input-text.component.d.ts +2 -4
- app-ng-runtime/components/input/default/textarea/textarea.component.d.ts +2 -4
- app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +1 -2
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +12 -21
- app-ng-runtime/components/input/epoch/date/date.component.d.ts +3 -4
- app-ng-runtime/components/input/epoch/date-time/date-time.component.d.ts +3 -4
- app-ng-runtime/components/input/epoch/esm2020/base-date-time.component.mjs +5 -6
- app-ng-runtime/components/input/epoch/esm2020/date/date.component.mjs +6 -9
- app-ng-runtime/components/input/epoch/esm2020/date-time/date-time.component.mjs +6 -9
- app-ng-runtime/components/input/epoch/esm2020/time/time.component.mjs +6 -9
- app-ng-runtime/components/input/epoch/fesm2015/index.mjs +13 -22
- app-ng-runtime/components/input/epoch/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/input/epoch/fesm2020/index.mjs +13 -22
- app-ng-runtime/components/input/epoch/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/input/epoch/time/time.component.d.ts +3 -4
- app-ng-runtime/components/input/file-upload/bundles/index.umd.js +3 -6
- app-ng-runtime/components/input/file-upload/esm2020/file-upload.component.mjs +6 -9
- app-ng-runtime/components/input/file-upload/fesm2015/index.mjs +4 -7
- app-ng-runtime/components/input/file-upload/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/input/file-upload/fesm2020/index.mjs +4 -7
- app-ng-runtime/components/input/file-upload/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +3 -4
- app-ng-runtime/components/input/rating/bundles/index.umd.js +45 -51
- app-ng-runtime/components/input/rating/esm2020/rating.component.mjs +11 -15
- app-ng-runtime/components/input/rating/fesm2015/index.mjs +9 -15
- app-ng-runtime/components/input/rating/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/input/rating/fesm2020/index.mjs +9 -13
- app-ng-runtime/components/input/rating/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/input/rating/rating.component.d.ts +2 -4
- app-ng-runtime/components/input/slider/bundles/index.umd.js +37 -43
- app-ng-runtime/components/input/slider/esm2020/slider.component.mjs +10 -15
- app-ng-runtime/components/input/slider/fesm2015/index.mjs +9 -15
- app-ng-runtime/components/input/slider/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/input/slider/fesm2020/index.mjs +9 -13
- app-ng-runtime/components/input/slider/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/input/slider/slider.component.d.ts +2 -4
- app-ng-runtime/components/navigation/menu/bundles/index.umd.js +13 -25
- app-ng-runtime/components/navigation/menu/esm2020/menu-adapator.component.mjs +4 -6
- app-ng-runtime/components/navigation/menu/esm2020/menu.component.mjs +4 -7
- app-ng-runtime/components/navigation/menu/esm2020/nav/nav-item/nav-item.directive.mjs +7 -11
- app-ng-runtime/components/navigation/menu/esm2020/nav/nav.component.mjs +5 -9
- app-ng-runtime/components/navigation/menu/fesm2015/index.mjs +14 -26
- app-ng-runtime/components/navigation/menu/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/fesm2020/index.mjs +14 -24
- app-ng-runtime/components/navigation/menu/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/menu-adapator.component.d.ts +1 -2
- app-ng-runtime/components/navigation/menu/menu.component.d.ts +2 -3
- app-ng-runtime/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +2 -4
- app-ng-runtime/components/navigation/menu/nav/nav.component.d.ts +3 -3
- app-ng-runtime/components/navigation/navbar/bundles/index.umd.js +28 -34
- app-ng-runtime/components/navigation/navbar/esm2020/navbar.component.mjs +9 -14
- app-ng-runtime/components/navigation/navbar/fesm2015/index.mjs +8 -14
- app-ng-runtime/components/navigation/navbar/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/navbar/fesm2020/index.mjs +8 -12
- app-ng-runtime/components/navigation/navbar/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/navbar/navbar.component.d.ts +2 -4
- app-ng-runtime/components/page/default/bundles/index.umd.js +32 -66
- app-ng-runtime/components/page/default/content/content.component.d.ts +2 -4
- app-ng-runtime/components/page/default/esm2020/content/content.component.mjs +6 -11
- app-ng-runtime/components/page/default/esm2020/layout.directive.mjs +7 -11
- app-ng-runtime/components/page/default/esm2020/page-content/page-content.component.mjs +7 -10
- app-ng-runtime/components/page/default/esm2020/page.directive.mjs +7 -12
- app-ng-runtime/components/page/default/esm2020/router-outlet.directive.mjs +7 -11
- app-ng-runtime/components/page/default/esm2020/spa-page.directive.mjs +7 -12
- app-ng-runtime/components/page/default/fesm2015/index.mjs +26 -60
- app-ng-runtime/components/page/default/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/page/default/fesm2020/index.mjs +26 -48
- app-ng-runtime/components/page/default/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/page/default/layout.directive.d.ts +2 -4
- app-ng-runtime/components/page/default/page-content/page-content.component.d.ts +3 -4
- app-ng-runtime/components/page/default/page.directive.d.ts +3 -4
- app-ng-runtime/components/page/default/router-outlet.directive.d.ts +2 -4
- app-ng-runtime/components/page/default/spa-page.directive.d.ts +3 -4
- app-ng-runtime/components/page/footer/bundles/index.umd.js +8 -14
- app-ng-runtime/components/page/footer/esm2020/footer.directive.mjs +6 -11
- app-ng-runtime/components/page/footer/fesm2015/index.mjs +5 -11
- app-ng-runtime/components/page/footer/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/page/footer/fesm2020/index.mjs +5 -9
- app-ng-runtime/components/page/footer/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/page/footer/footer.directive.d.ts +2 -4
- app-ng-runtime/components/page/header/bundles/index.umd.js +8 -14
- app-ng-runtime/components/page/header/esm2020/header.component.mjs +6 -11
- app-ng-runtime/components/page/header/fesm2015/index.mjs +5 -11
- app-ng-runtime/components/page/header/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/page/header/fesm2020/index.mjs +5 -9
- app-ng-runtime/components/page/header/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/page/header/header.component.d.ts +2 -4
- app-ng-runtime/components/page/left-panel/bundles/index.umd.js +4 -7
- app-ng-runtime/components/page/left-panel/esm2020/left-panel.directive.mjs +6 -9
- app-ng-runtime/components/page/left-panel/fesm2015/index.mjs +4 -7
- app-ng-runtime/components/page/left-panel/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/page/left-panel/fesm2020/index.mjs +4 -7
- app-ng-runtime/components/page/left-panel/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/page/left-panel/left-panel.directive.d.ts +3 -4
- app-ng-runtime/components/page/right-panel/bundles/index.umd.js +6 -12
- app-ng-runtime/components/page/right-panel/esm2020/right-panel.directive.mjs +7 -11
- app-ng-runtime/components/page/right-panel/fesm2015/index.mjs +5 -11
- app-ng-runtime/components/page/right-panel/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/page/right-panel/fesm2020/index.mjs +5 -9
- app-ng-runtime/components/page/right-panel/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/page/right-panel/right-panel.directive.d.ts +2 -4
- app-ng-runtime/components/page/top-nav/bundles/index.umd.js +8 -14
- app-ng-runtime/components/page/top-nav/esm2020/top-nav.directive.mjs +6 -11
- app-ng-runtime/components/page/top-nav/fesm2015/index.mjs +5 -11
- app-ng-runtime/components/page/top-nav/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/page/top-nav/fesm2020/index.mjs +5 -9
- app-ng-runtime/components/page/top-nav/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/page/top-nav/top-nav.directive.d.ts +2 -4
- app-ng-runtime/components/prefab/bundles/index.umd.js +7 -15
- app-ng-runtime/components/prefab/esm2020/prefab-container/prefab-container.directive.mjs +7 -10
- app-ng-runtime/components/prefab/esm2020/prefab.directive.mjs +6 -10
- app-ng-runtime/components/prefab/fesm2015/index.mjs +8 -16
- app-ng-runtime/components/prefab/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/prefab/fesm2020/index.mjs +8 -14
- app-ng-runtime/components/prefab/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/prefab/prefab-container/prefab-container.directive.d.ts +3 -4
- app-ng-runtime/components/prefab/prefab.directive.d.ts +2 -4
- app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js +32 -37
- app-ng-runtime/mobile/components/basic/default/esm2020/network-info-toaster/network-info-toaster.component.mjs +7 -10
- app-ng-runtime/mobile/components/basic/default/fesm2015/index.mjs +10 -15
- app-ng-runtime/mobile/components/basic/default/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/basic/default/fesm2020/index.mjs +10 -13
- app-ng-runtime/mobile/components/basic/default/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/basic/default/network-info-toaster/network-info-toaster.component.d.ts +3 -4
- app-ng-runtime/mobile/components/containers/segmented-control/bundles/index.umd.js +18 -29
- app-ng-runtime/mobile/components/containers/segmented-control/esm2020/segment-content/segment-content.component.mjs +8 -13
- app-ng-runtime/mobile/components/containers/segmented-control/esm2020/segmented-control.component.mjs +9 -13
- app-ng-runtime/mobile/components/containers/segmented-control/fesm2015/index.mjs +12 -23
- app-ng-runtime/mobile/components/containers/segmented-control/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/containers/segmented-control/fesm2020/index.mjs +12 -19
- app-ng-runtime/mobile/components/containers/segmented-control/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/containers/segmented-control/segment-content/segment-content.component.d.ts +2 -4
- app-ng-runtime/mobile/components/containers/segmented-control/segmented-control.component.d.ts +2 -4
- app-ng-runtime/mobile/components/data/media-list/bundles/index.umd.js +30 -36
- app-ng-runtime/mobile/components/data/media-list/esm2020/media-list.component.mjs +14 -18
- app-ng-runtime/mobile/components/data/media-list/fesm2015/index.mjs +11 -17
- app-ng-runtime/mobile/components/data/media-list/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/data/media-list/fesm2020/index.mjs +11 -15
- app-ng-runtime/mobile/components/data/media-list/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/data/media-list/media-list.component.d.ts +2 -4
- app-ng-runtime/mobile/components/device/barcode-scanner/barcode-scanner.component.d.ts +2 -4
- app-ng-runtime/mobile/components/device/barcode-scanner/bundles/index.umd.js +28 -34
- app-ng-runtime/mobile/components/device/barcode-scanner/esm2020/barcode-scanner.component.mjs +10 -14
- app-ng-runtime/mobile/components/device/barcode-scanner/fesm2015/index.mjs +8 -14
- app-ng-runtime/mobile/components/device/barcode-scanner/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/device/barcode-scanner/fesm2020/index.mjs +8 -12
- app-ng-runtime/mobile/components/device/barcode-scanner/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/device/camera/bundles/index.umd.js +12 -18
- app-ng-runtime/mobile/components/device/camera/camera.component.d.ts +2 -4
- app-ng-runtime/mobile/components/device/camera/esm2020/camera.component.mjs +9 -13
- app-ng-runtime/mobile/components/device/camera/fesm2015/index.mjs +7 -13
- app-ng-runtime/mobile/components/device/camera/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/device/camera/fesm2020/index.mjs +7 -11
- app-ng-runtime/mobile/components/device/camera/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/mobile-navbar/bundles/index.umd.js +3 -6
- app-ng-runtime/mobile/components/page/mobile-navbar/esm2020/mobile-navbar.component.mjs +6 -9
- app-ng-runtime/mobile/components/page/mobile-navbar/fesm2015/index.mjs +4 -7
- app-ng-runtime/mobile/components/page/mobile-navbar/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/mobile-navbar/fesm2020/index.mjs +4 -7
- app-ng-runtime/mobile/components/page/mobile-navbar/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/mobile-navbar/mobile-navbar.component.d.ts +3 -4
- app-ng-runtime/mobile/components/page/tab-bar/bundles/index.umd.js +32 -36
- app-ng-runtime/mobile/components/page/tab-bar/esm2020/tabbar.component.mjs +8 -13
- app-ng-runtime/mobile/components/page/tab-bar/fesm2015/index.mjs +7 -11
- app-ng-runtime/mobile/components/page/tab-bar/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/tab-bar/fesm2020/index.mjs +7 -11
- app-ng-runtime/mobile/components/page/tab-bar/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/tab-bar/tabbar.component.d.ts +2 -4
- app-ng-runtime/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Attribute, Component, ElementRef, Injector,
|
|
1
|
+
import { Attribute, Component, ElementRef, Injector, QueryList, ViewChild, ViewChildren } from '@angular/core';
|
|
2
2
|
import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
|
|
3
3
|
import { Observable, from, of } from 'rxjs';
|
|
4
4
|
import { filter, mergeMap } from 'rxjs/operators';
|
|
5
5
|
import { TypeaheadDirective } from 'ngx-bootstrap/typeahead';
|
|
6
|
-
import { addClass, adjustContainerPosition, App, DataSource, isDefined, isMobile, toBoolean
|
|
6
|
+
import { addClass, adjustContainerPosition, App, DataSource, isDefined, isMobile, toBoolean } from '@wm/core';
|
|
7
7
|
import { ALLFIELDS, convertDataToObject, extractDataAsArray, getUniqObjsByDataField, provideAs, provideAsWidgetRef, styler, transformFormData, getContainerTargetClass } from '@wm/components/base';
|
|
8
8
|
import { DatasetAwareFormComponent } from '@wm/components/input';
|
|
9
9
|
import { registerProps } from './search.props';
|
|
@@ -197,11 +197,10 @@ export class SearchComponent extends DatasetAwareFormComponent {
|
|
|
197
197
|
const data = this.datavalue || this.toBeProcessedDatavalue;
|
|
198
198
|
this.updateByDatavalue(data);
|
|
199
199
|
}
|
|
200
|
-
constructor(inj, app, binddatavalue, binddataset
|
|
201
|
-
super(inj, WIDGET_CONFIG
|
|
200
|
+
constructor(inj, app, binddatavalue, binddataset) {
|
|
201
|
+
super(inj, WIDGET_CONFIG);
|
|
202
202
|
this.binddatavalue = binddatavalue;
|
|
203
203
|
this.binddataset = binddataset;
|
|
204
|
-
this._viewParent = _viewParent;
|
|
205
204
|
this.query = '';
|
|
206
205
|
this.page = 1;
|
|
207
206
|
// this flag will not allow the empty datafield values.
|
|
@@ -869,7 +868,7 @@ export class SearchComponent extends DatasetAwareFormComponent {
|
|
|
869
868
|
}
|
|
870
869
|
}
|
|
871
870
|
SearchComponent.initializeProps = registerProps();
|
|
872
|
-
SearchComponent.ɵfac = function SearchComponent_Factory(t) { return new (t || SearchComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵinjectAttribute('datavalue.bind'), i0.ɵɵinjectAttribute('dataset.bind')
|
|
871
|
+
SearchComponent.ɵfac = function SearchComponent_Factory(t) { return new (t || SearchComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵinjectAttribute('datavalue.bind'), i0.ɵɵinjectAttribute('dataset.bind')); };
|
|
873
872
|
SearchComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchComponent, selectors: [["", "wmSearch", ""]], viewQuery: function SearchComponent_Query(rf, ctx) { if (rf & 1) {
|
|
874
873
|
i0.ɵɵviewQuery(TypeaheadDirective, 5);
|
|
875
874
|
i0.ɵɵviewQuery(_c0, 5);
|
|
@@ -906,8 +905,6 @@ SearchComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchCompo
|
|
|
906
905
|
}] }, { type: undefined, decorators: [{
|
|
907
906
|
type: Attribute,
|
|
908
907
|
args: ['dataset.bind']
|
|
909
|
-
}] }, { type: i1.UserDefinedExecutionContext, decorators: [{
|
|
910
|
-
type: Optional
|
|
911
908
|
}] }]; }, { typeahead: [{
|
|
912
909
|
type: ViewChild,
|
|
913
910
|
args: [TypeaheadDirective]
|
|
@@ -918,4 +915,4 @@ SearchComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchCompo
|
|
|
918
915
|
type: ViewChildren,
|
|
919
916
|
args: ['liElements']
|
|
920
917
|
}] }); })();
|
|
921
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9iYXNpYy9zZWFyY2gvc3JjL3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvc2VhcmNoL3NyYy9zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFFUixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE9BQU8sRUFBK0Isa0JBQWtCLEVBQWtCLE1BQU0seUJBQXlCLENBQUM7QUFFMUcsT0FBTyxFQUNILFFBQVEsRUFDUix1QkFBdUIsRUFDdkIsR0FBRyxFQUNILFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxFQUNSLFNBQVMsRUFDVCwyQkFBMkIsRUFDOUIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBZSxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDak4sT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFakUsT0FBTyxFQUFFLGFB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LENBQUM7U0FDdEM7UUM5Q0wsaUhBVWM7UUFFZCxpSEFtQmM7UUFHZCxtRkFtQ2U7UUFFZixtSEE0Q2M7OztRQWpGQyxlQUFvQjtRQUFwQix1Q0FBb0IsaUJBQUE7O3VGRGN0QixlQUFlO2NBVDNCLFNBQVM7MkJBQ0ksWUFBWSxhQUVYO29CQUNQLFNBQVMsa0JBQWtCLGlCQUFpQixFQUFFLElBQUksQ0FBQztvQkFDbkQsU0FBUyxrQkFBa0IsYUFBYSxFQUFFLElBQUksQ0FBQztvQkFDL0Msa0JBQWtCLGlCQUFpQjtpQkFDdEM7O3NCQTJFSSxTQUFTO3VCQUFDLGdCQUFnQjs7c0JBQzFCLFNBQVM7dUJBQUMsY0FBYzs7c0JBQXVCLFFBQVE7d0JBM0M3QixTQUFTO2tCQUF2QyxTQUFTO21CQUFDLGtCQUFrQjtZQUNMLFNBQVM7a0JBQWhDLFNBQVM7bUJBQUMsV0FBVztZQUNNLFVBQVU7a0JBQXJDLFlBQVk7bUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIE5HX1ZBTElEQVRPUlMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUeXBlYWhlYWRDb250YWluZXJDb21wb25lbnQsIFR5cGVhaGVhZERpcmVjdGl2ZSwgVHlwZWFoZWFkTWF0Y2ggfSBmcm9tICduZ3gtYm9vdHN0cmFwL3R5cGVhaGVhZCc7XG5cbmltcG9ydCB7XG4gICAgYWRkQ2xhc3MsXG4gICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sXG4gICAgQXBwLFxuICAgIERhdGFTb3VyY2UsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIHRvQm9vbGVhbixcbiAgICBVc2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHRcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgQUxMRklFTERTLCBjb252ZXJ0RGF0YVRvT2JqZWN0LCBEYXRhU2V0SXRlbSwgZXh0cmFjdERhdGFBc0FycmF5LCBnZXRVbmlxT2Jqc0J5RGF0YUZpZWxkLCBwcm92aWRlQXMsIHByb3ZpZGVBc1dpZGdldFJlZiwgc3R5bGVyLCB0cmFuc2Zvcm1Gb3JtRGF0YSwgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3NlYXJjaC5wcm9wcyc7XG5pbXBvcnQgeyBEYXRhUHJvdmlkZXIsIElEYXRhUHJvdmlkZXIsIElEYXRhUHJvdmlkZXJDb25maWcgfSBmcm9tICcuL2RhdGEtcHJvdmlkZXIvZGF0YS1wcm92aWRlcic7XG5cbmRlY2xhcmUgY29uc3QgXztcblxuY29uc3QgV0lER0VUX0NPTkZJRyA9IHsgd2lkZ2V0VHlwZTogJ3dtLXNlYXJjaCcsIGhvc3RDbGFzczogJ2lucHV0LWdyb3VwJyB9O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bVNlYXJjaF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXMoU2VhcmNoQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBcyhTZWFyY2hDb21wb25lbnQsIE5HX1ZBTElEQVRPUlMsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoU2VhcmNoQ29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoQ29tcG9uZW50IGV4dGVuZHMgRGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBwdWJsaWMgY2FzZXNlbnNpdGl2ZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2VhcmNoa2V5OiBzdHJpbmc7XG4gICAgcHVibGljIHF1ZXJ5TW9kZWw6IEFycmF5PERhdGFTZXRJdGVtPiB8IHN0cmluZztcbiAgICBwdWJsaWMgcXVlcnkgPSAnJztcbiAgICBwdWJsaWMgbGltaXQ6IGFueTtcbiAgICBwdWJsaWMgc2hvd3NlYXJjaGljb246IGJvb2xlYW47XG4gICAgcHVibGljIG1pbmNoYXJzOiBudW1iZXI7XG4gICAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgICBwdWJsaWMgbmF2c2VhcmNoYmFyOiBhbnk7XG4gICAgcHVibGljIGRlYm91bmNldGltZTogbnVtYmVyO1xuICAgIHB1YmxpYyBoaW50OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGFwcDogQXBwO1xuICAgIHByaXZhdGUgdHlwZWFoZWFkRGF0YVNvdXJjZTogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHByaXZhdGUgcGFnZXNpemU6IGFueTtcbiAgICBwcml2YXRlIHBhZ2UgPSAxO1xuICAgIHB1YmxpYyBfbG9hZGluZ0l0ZW1zOiBib29sZWFuO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyOiBJRGF0YVByb3ZpZGVyO1xuICAgIHByaXZhdGUgcmVzdWx0OiBBcnJheTxhbnk+OyAvLyBjb250YWlucyB0aGUgc2VhcmNoIHJlc3VsdCBpLmUuIG1hdGNoZXNcbiAgICBwcml2YXRlIGZvcm1hdHRlZERhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIGlzZm9ybWZpZWxkOiBib29sZWFuO1xuICAgIHByaXZhdGUgJHR5cGVhaGVhZEV2ZW50OiBFdmVudDtcblxuICAgIHB1YmxpYyB0YWJpbmRleDogbnVtYmVyO1xuICAgIHB1YmxpYyBzdGFydEluZGV4OiBudW1iZXI7XG4gICAgcHVibGljIGJpbmRkaXNwbGF5bGFiZWw6IHN0cmluZztcbiAgICBwdWJsaWMgdHlwZWFoZWFkQ29udGFpbmVyOiBUeXBlYWhlYWRDb250YWluZXJDb21wb25lbnQ7XG4gICAgcHVibGljIGNvbnRhaW5lclRhcmdldDogc3RyaW5nO1xuXG4gICAgQFZpZXdDaGlsZChUeXBlYWhlYWREaXJlY3RpdmUpIHR5cGVhaGVhZDogVHlwZWFoZWFkRGlyZWN0aXZlO1xuICAgIEBWaWV3Q2hpbGQoJ3VsRWxlbWVudCcpIHVsRWxlbWVudDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkcmVuKCdsaUVsZW1lbnRzJykgbGlFbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgcHJpdmF0ZSBhbGxvd29ubHlzZWxlY3Q6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjbGFzczogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICAgIHByaXZhdGUgZGF0YW9wdGlvbnM6IGFueTtcbiAgICBwdWJsaWMgZHJvcGRvd25FbDogYW55O1xuICAgIHByaXZhdGUgX2xhc3RRdWVyeTogc3RyaW5nO1xuICAgIHByaXZhdGUgX2xhc3RSZXN1bHQ6IGFueTtcbiAgICBwcml2YXRlIF9pc09wZW46IGJvb2xlYW47IC8vIHNldCB0byB0cnVlIHdoZW4gZHJvcGRvd24gaXMgb3BlblxuICAgIHByaXZhdGUgc2hvd0Nsb3NlYnRuOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlRHY6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZGF0YXNvdXJjZTogYW55O1xuICAgIHByaXZhdGUgaXNTY3JvbGxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHBhcmVudEVsOiBhbnk7XG4gICAgcHJpdmF0ZSBwb3NpdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgZWxJbmRleDogbnVtYmVyO1xuICAgIHByaXZhdGUgbGlzdGVuUXVlcnk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZG9tVXBkYXRlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHNlYXJjaG9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzaG93Y2xlYXI6IGJvb2xlYW47XG4gICAgcHVibGljIG1hdGNobW9kZTogc3RyaW5nO1xuICAgIHByaXZhdGUgY2xlYXJEYXRhOiBib29sZWFuO1xuXG5cbiAgICAvLyBnZXR0ZXIgc2V0dGVyIGlzIGFkZGVkIHRvIHBhc3MgdGhlIGRhdGFzb3VyY2UgdG8gc2VhcmNoY29tcG9uZW50LlxuICAgIGdldCBkYXRhc291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YXNvdXJjZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YXNvdXJjZShudikge1xuICAgICAgICB0aGlzLl9kYXRhc291cmNlID0gbnY7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlQnlEYXRhdmFsdWUoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIGFwcDogQXBwLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhdmFsdWUuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXZhbHVlLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBwdWJsaWMgYmluZGRhdGFzZXQsIEBPcHRpb25hbCgpIHB1YmxpYyBfdmlld1BhcmVudDogVXNlckRlZmluZWRFeGVjdXRpb25Db250ZXh0XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgX3ZpZXdQYXJlbnQpO1xuICAgICAgICAvLyB0aGlzIGZsYWcgd2lsbCBub3QgYWxsb3cgdGhlIGVtcHR5IGRhdGFmaWVsZCB2YWx1ZXMuXG4gICAgICAgIHRoaXMuYWxsb3dlbXB0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnYXBwLXNlYXJjaCcsIHRydWUpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaXN0ZW5zIGZvciB0aGUgY2hhbmdlIGluIHRoZSBuZ01vZGVsIG9uIGV2ZXJ5IHNlYXJjaCBhbmQgcmV0cmlldmVzIHRoZSBkYXRhIGFzIG9ic2VydmFibGUuXG4gICAgICAgICAqIFRoaXMgb2JzZXJ2YWJsZSBkYXRhIGlzIHBhc3NlZCB0byB0aGUgdHlwZWFoZWFkLlxuICAgICAgICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxhbnk+fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50eXBlYWhlYWREYXRhU291cmNlID0gT2JzZXJ2YWJsZVxuICAgICAgICAgICAgLmNyZWF0ZSgob2JzZXJ2ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFJ1bnMgb24gZXZlcnkgc2VhcmNoXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuUXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMucXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBvbiBrZXlkb3duLCB3aGlsZSBzY3JvbGxpbmcgdGhlIGRyb3Bkb3duIGl0ZW1zLCB3aGVuIGxhc3QgaXRlbSBpcyByZWFjaGVkIG5leHQgY2FsbCBpcyB0cmlnZ2VyZWRcbiAgICAgICAgICAgICAgICAvLyB1bmxlc3MgdGhlIGNhbGwgaXMgcmVzb2x2ZWQsIHdlIGFyZSBhYmxlIHRvIHNjcm9sbCBuZXh0IHRvIGZpcnN0IGl0ZW0gYW5kIHNvb25cbiAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3dzIGZsaWNrZXJpbmcgZnJvbSBmaXJzdCBpdGVtIHRvIG5leHQgbmV3IGl0ZW1zIGFwcGVuZGVkLlxuICAgICAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcgY29udGFpbmVyIHRvIHVuZGVmaW5lZCwga2V5IGV2ZW50cyBjaGFuZ2VzIHdpbGwgYmUgc3RvcHBlZCB3aGlsZSBsb2FkaW5nIGl0ZW1zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuX2NvbnRhaW5lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMubWluY2hhcnMgPT09IDAgfHwgKHRoaXMucXVlcnkgJiYgdGhpcy5xdWVyeS5sZW5ndGggPj0gdGhpcy5taW5jaGFycykpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKCh0b2tlbjogc3RyaW5nKSA9PiB0aGlzLmdldERhdGFTb3VyY2VBc09ic2VydmFibGUodG9rZW4pKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRhdGFQcm92aWRlciA9IG5ldyBEYXRhUHJvdmlkZXIoKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogV2hlbiBkZWZhdWx0IGRhdGF2YWx1ZSBpcyBub3QgZm91bmQgd2l0aGluIHRoZSBkYXRhc2V0LCBhIGZpbHRlciBjYWxsIGlzIG1hZGUgdG8gZ2V0IHRoZSByZWNvcmQgdXNpbmcgZmV0Y2hEZWZhdWx0TW9kZWwuXG4gICAgICAgICAqIGFmdGVyIGdldHRpbmcgdGhlIHJlc3BvbnNlLCBzZXQgdGhlIHF1ZXJ5TW9kZWwgYW5kIHF1ZXJ5LlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgZGF0YXZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhdmFsdWUkLnN1YnNjcmliZSgodmFsOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gKF8uaXNBcnJheSh2YWwpID8gdmFsWzBdIDogdmFsKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgICAgIGlmIChxdWVyeSA9PT0gbnVsbCB8fCBxdWVyeSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAvLyByZXNldCB0aGUgcXVlcnkuXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMucXVlcnlNb2RlbCA9ICcnO1xuICAgICAgICAgICAgICAgIC8vIG9uIGNsZWFyIG9yIHJlc2V0IGZpbHRlciwgZW1wdHkgdGhlIGxhc3RSZXN1bHRzIHRvIGZldGNoIG5ldyByZWNvcmRzLlxuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3Vuc3Vic2NyaWJlRHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gaWYgcHJldiBkYXRhdmFsdWUgaXMgbm90IGVxdWFsIHRvIGN1cnJlbnQgZGF0YXZhbHVlIHRoZW4gY2xlYXIgdGhlIG1vZGVsQnlLZXkgYW5kIHF1ZXJ5TW9kZWxcbiAgICAgICAgICAgICAgICBpZiAoIV8uaXNPYmplY3QodmFsKSAmJiAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWUgIT09IHZhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5S2V5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeU1vZGVsID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBkYXRhZmllbGQgaXMgQUxMRklMRURTIGRvIG5vdCBmZXRjaCB0aGUgcmVjb3Jkc1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgcXVlcnkgbW9kZWwgd2l0aCB0aGUgdmFsdWVzIHdlIGhhdmVcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YXZhbHVlKHZhbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHR1cm4gb24gc2hvd0Nsb3NlQnRuIHdoZW4gYSBkZWZhdWx0IHZhbHVlIGlzIGdpdmVuXG4gICAgICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IGRhdGF2YWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcblxuICAgICAgICBjb25zdCBkYXRhc2V0U3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhc2V0JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IHRoZSBuZXh0IGl0ZW0gaW5kZXguXG4gICAgICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSB0aGlzLmRhdGFzZXRJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLl9sYXN0UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5kYXRhdmFsdWUgfHwgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlO1xuICAgICAgICAgICAgLy8gaW52b2tpbmcgdXBkYXRlQnlEYXRhc2V0IG9ubHkgd2hlbiBkYXRhdmFsdWUgaXMgcHJlc2VudCwgYXMgZW50ZXJlZCB2YWx1ZSBpLmUuIHF1ZXJ5IGlzIHNldHRpbmcgYmFjayB0byAnJ1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVCeURhdGFzZXQoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXNldFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICAvLyBvbiBjbGVhciwgdHJpZ2dlciBzZWFyY2ggd2l0aCBwYWdlIHNpemUgMVxuICAgIHByaXZhdGUgY2xlYXJTZWFyY2goJGV2ZW50LCBsb2FkT25DbGVhcikge1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgIHRoaXMub25JbnB1dENoYW5nZSgkZXZlbnQpO1xuICAgICAgICB0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSBmYWxzZTtcbiAgICAgICAgaWYgKGxvYWRPbkNsZWFyKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmVEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjbGVhcnNlYXJjaCcpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgLy8gd2hlbiBzZWFyY2ggaW5wdXQgaXMgY2xlYXJlZCwgZm9jdXMgb24gdGhlIGlucHV0IGZpZWxkXG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmFwcC1zZWFyY2gtaW5wdXQnKS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZnVuY3Rpb24gdG8gIGNsZWFyIHRoZSBpbnB1dCB2YWx1ZVxuICAgIHB1YmxpYyBjbGVhclRleHQoKSB7XG4gICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSB0aGUgZnVsbCBzY3JlZW4gbW9kZSBpbiBtb2JpbGUgdmlldyBvZiBhdXRvIGNvbXBsZXRlXG4gICAgcHJpdmF0ZSBjbG9zZVNlYXJjaCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFnZSA9IDE7XG4gICAgICAgIC8vIGFmdGVyIGNsb3NpbmcgdGhlIHNlYXJjaCwgaW5zZXJ0IHRoZSBlbGVtZW50IGF0IGl0cyBwcmV2aW91cyBwb3NpdGlvbiAoZWxJbmRleClcbiAgICAgICAgdGhpcy5pbnNlcnRBdEluZGV4KHRoaXMuZWxJbmRleCk7XG4gICAgICAgIHRoaXMuZWxJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wYXJlbnRFbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygnZnVsbC1zY3JlZW4nKTtcbiAgICAgICAgaWYgKHRoaXMuX2RvbVVwZGF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2RvbVVwZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSB0cnVlO1xuICAgICAgICB0aGlzLnR5cGVhaGVhZC5oaWRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJNb2JpbGVBdXRvQ29tcGxldGUoKSB7XG4gICAgICAgIC8vIEdldCB0aGUgcGFyZW50IGVsZW1lbnQgb2YgdGhlIHNlYXJjaCBlbGVtZW50IHdoaWNoIGNhbiBiZSBuZXh0IG9yIHByZXYgZWxlbWVudCwgaWYgYm90aCBhcmUgZW1wdHkgdGhlbiBnZXQgdGhlIHBhcmVudCBvZiBlbGVtZW50LlxuICAgICAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLmVsSW5kZXgpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEVsID0gdGhpcy4kZWxlbWVudC5wYXJlbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZWxJbmRleCA9IHRoaXMucGFyZW50RWwuY2hpbGRyZW4oKS5pbmRleCh0aGlzLiRlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgZmxhZyBpcyBzZXQgdG8gbm90aWZ5IHRoYXQgdGhlIHR5cGVhaGVhZC1jb250YWluZXIgZG9tIGhhcyBjaGFuZ2VkIGl0cyBwb3NpdGlvblxuICAgICAgICAgICAgdGhpcy5fZG9tVXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAvLyBBZGQgZnVsbCBzY3JlZW4gY2xhc3Mgb24gZm9jdXMgb2YgdGhlIGlucHV0IGVsZW1lbnQuXG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdmdWxsLXNjcmVlbicpO1xuXG4gICAgICAgICAgICAvLyBBZGQgcG9zaXRpb24gdG8gc2V0IHRoZSBoZWlnaHQgdG8gYXV0b1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gPT09ICdpbmxpbmUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLnBvc2l0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmb2N1cyBpcyBsb3N0IHdoZW4gZWxlbWVudCBpcyBjaGFuZ2VkIHRvIGZ1bGwtc2NyZWVuLCBrZXlkb3duIHRvIHNlbGVjdCBuZXh0IGl0ZW1zIHdpbGwgbm90IHdvcmtcbiAgICAgICAgLy8gSGVuY2UgZXhwbGljaXRseSBmb2N1c2luZyB0aGUgaW5wdXRcbiAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmFwcC1zZWFyY2gtaW5wdXQnKS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhU291cmNlQXNPYnNlcnZhYmxlKHF1ZXJ5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICAvLyBzaG93IGRyb3Bkb3duIG9ubHkgd2hlbiB0aGVyZSBpcyBjaGFuZ2UgaW4gcXVlcnkuIFRoaXMgc2hvdWxkIG5vdCBhcHBseSB3aGVuIGRhdGFvcHRpb25zIHdpdGggZmlsdGVyRmllbGRzIGFyZSB1cGRhdGVkLlxuICAgICAgICAvLyB3aGVuIGxhc3RSZXN1bHQgaXMgbm90IGF2YWlsYWJsZSBpLmUuIHN0aWxsIHRoZSBmaXJzdCBjYWxsIGlzIHBlbmRpbmcgYW5kIHNlY29uZCBxdWVyeSBpcyBpbnZva2VkIHRoZW4gZG8gbm90IHJldHVybi5cbiAgICAgICAgaWYgKHRoaXMuX2xhc3RRdWVyeSA9PT0gcXVlcnkgJiYgIV8uZ2V0KHRoaXMuZGF0YW9wdGlvbnMsICdmaWx0ZXJGaWVsZHMnKSAmJiBpc0RlZmluZWQodGhpcy5fbGFzdFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2xhc3RSZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICBXTVMtMTkxNzc6IE9uIGZvY3VzIG9mIGlucHV0IGZpZWxkIGZvciBhdXRvY29tcGxldGUgdHlwZSwgZG8gbm90IHRyaWdnZXIgYXBpIGNhbGwgd2hlblxuICAgICAgICAgICAgICAgICBhKSBzZWFyY2hrZXkgYW5kIGRpc3BsYXlleHByZXNzaW9uIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgICAgYikgYmluZGRpc3BsYXlsYWJlbCBjb250YWlucyBtdWx0aXBsZSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgYykgYmluZGRpc3BsYXlsYWJlbCBjb250YWlucyBzaW5nbGUgdmFsdWUgd2hpY2ggZG9lcyBub3QgbWF0Y2ggd2l0aCBzZWFyY2hrZXlcbiAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgJiYgdGhpcy5zZWFyY2hrZXkgJiYgdGhpcy5xdWVyeSAmJiB0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IGJpbmREaXNwbGF5TGFiZWxBcnJheSA9IFtdO1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoS2V5QXJyYXkgPSBfLnNwbGl0KHRoaXMuc2VhcmNoa2V5LCAnLCcpO1xuICAgICAgICAgICAgbGV0IGRpc3BsYXlsYWJlbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJpbmRkaXNwbGF5bGFiZWwpIHtcbiAgICAgICAgICAgICAgICBiaW5kRGlzcGxheUxhYmVsQXJyYXkgPSBfLnNwbGl0KHRoaXMuYmluZGRpc3BsYXlsYWJlbCwgJysnKTtcbiAgICAgICAgICAgICAgICBpZiAoYmluZERpc3BsYXlMYWJlbEFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV8uaW5jbHVkZXMoYmluZERpc3BsYXlMYWJlbEFycmF5WzBdLCAnfCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IC9cXFsoLio/KVxcXS87XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5bGFiZWwgPSByZWdleC5leGVjKGJpbmREaXNwbGF5TGFiZWxBcnJheVswXSlbMV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5bGFiZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChiaW5kRGlzcGxheUxhYmVsQXJyYXkubGVuZ3RoID4gMSB8fCAoZGlzcGxheWxhYmVsICYmICFfLmluY2x1ZGVzKHNlYXJjaEtleUFycmF5LCBkaXNwbGF5bGFiZWwpKVxuICAgICAgICAgICAgICAgICAgICB8fCAodGhpcy5kaXNwbGF5ZXhwcmVzc2lvbiAmJiAhXy5pbmNsdWRlcyhzZWFyY2hLZXlBcnJheSwgdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbikpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGFzdFF1ZXJ5ID0gdGhpcy5xdWVyeTtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5nZXREYXRhU291cmNlKHF1ZXJ5KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgZXZlbnRDYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmICghXy5pbmNsdWRlcyhbJ2JsdXInLCAnZm9jdXMnLCAnc2VsZWN0JywgJ3N1Ym1pdCcsICdjaGFuZ2UnXSwgZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgc3VwZXIuaGFuZGxlRXZlbnQobm9kZSwgZXZlbnROYW1lLCBldmVudENhbGxiYWNrLCBsb2NhbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaGlnaGxpZ2h0IHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBkcm9wZG93biBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgcHJpdmF0ZSBoaWdobGlnaHQobWF0Y2g6IFR5cGVhaGVhZE1hdGNoLCBxdWVyeTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lcikge1xuICAgICAgICAgICAgLy8gaGlnaGxpZ2h0IG9mIGNoYXJzIHdpbGwgd29yayBvbmx5IHdoZW4gbGFiZWwgYXJlIHN0cmluZ3MuXG4gICAgICAgICAgICAobWF0Y2ggYXMgYW55KS52YWx1ZSA9IG1hdGNoLml0ZW0ubGFiZWwudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5oaWdobGlnaHQobWF0Y2gsIHF1ZXJ5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGluc2VydHMgdGhlIGVsZW1lbnQgYXQgdGhlIGluZGV4IHBvc2l0aW9uXG4gICAgcHJpdmF0ZSBpbnNlcnRBdEluZGV4KGkpIHtcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50RWwucHJlcGVuZCh0aGlzLiRlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0ICRlbEF0SW5kZXggPSB0aGlzLnBhcmVudEVsLmNoaWxkcmVuKCkuZXEoaSk7XG4gICAgICAgICAgICBpZiAoJGVsQXRJbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLnBhcmVudEVsLmNoaWxkcmVuKCkuZXEoaSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50Lmluc2VydEFmdGVyKHRoaXMucGFyZW50RWwuY2hpbGRyZW4oKS5lcShpIC0gMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHdpZGdldCBpcyBvZiB0eXBlIGF1dG9jb21wbGV0ZSBpbiBtb2JpbGUgdmlldy8gYXBwXG4gICAgcHVibGljIGlzTW9iaWxlQXV0b0NvbXBsZXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnYXV0b2NvbXBsZXRlJyAmJiBpc01vYmlsZSgpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBxdWVyeSBpcyBlbnRlcmVkIGluIHRoZSBpbnB1dCBhbmQgdGhlIHZpZXcgaXMgbm90IG1vYmlsZVxuICAgIHB1YmxpYyBpc1F1ZXJ5RW50ZXJlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd2NsZWFyICYmIHRoaXMuc2hvd0Nsb3NlYnRuO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZE1vcmVEYXRhKGluY3JlbWVudFBhZ2U/OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW5jcmVhc2UgdGhlIHBhZ2UgbnVtYmVyIGFuZCB0cmlnZ2VyIGZvcmNlIHF1ZXJ5IHVwZGF0ZVxuICAgICAgICB0aGlzLnBhZ2UgPSBpbmNyZW1lbnRQYWdlID8gdGhpcy5wYWdlICsgMSA6IHRoaXMucGFnZTtcblxuICAgICAgICB0aGlzLmlzU2Nyb2xsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSB0cnVlO1xuXG4gICAgICAgIC8vIHdoZW4gaW52b2tpbmcgbmV3IHNldCBvZiByZXN1bHRzLCByZXNldCB0aGUgbGFzdFF1ZXJ5LlxuICAgICAgICBpZiAoaW5jcmVtZW50UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5fbGFzdFF1ZXJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHJpZ2dlciB0aGUgdHlwZWFoZWFkIGNoYW5nZSBtYW51YWxseSB0byBmZXRjaCB0aGUgbmV4dCBzZXQgb2YgcmVzdWx0cy5cbiAgICAgICAgdGhpcy50eXBlYWhlYWQub25JbnB1dCh7XG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogXy50cmltKHRoaXMucXVlcnkpIHx8ICcwJyAvLyBkdW1teSBkYXRhIHRvIG5vdGlmeSB0aGUgb2JzZXJ2YWJsZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gb24gZm9jdXNvdXQsIHN1YnNjcmliZSB0byB0aGUgZGF0YXZhbHVlIGNoYW5nZXMgYWdhaW5cbiAgICBwcml2YXRlIG9uRm9jdXNPdXQoKSB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgIC8vIHJlc2V0IHRoZSBwYWdlIHZhbHVlIG9uIGZvY3Vzb3V0LlxuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICAvLyBpZiBkb21VcGRhdGVkIGlzIHRydWUgdGhlbiBkbyBub3QgaGlkZSB0aGUgZHJvcGRvd24gaW4gdGhlIGZ1bGxzY3JlZW5cbiAgICAgICAgaWYgKCF0aGlzLl9kb21VcGRhdGVkICYmIHRoaXMuX2lzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBoaWRlIHRoZSB0eXBlYWhlYWQgb25seSBhZnRlciB0aGUgaXRlbSBpcyBzZWxlY3RlZCBmcm9tIGRyb3Bkb3duLlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl90eXBlYWhlYWQuaXNTaG93bikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgLy8gb24gb3V0c2lkZSBjbGljaywgdHlwZWFoZWFkIGlzIGhpZGRlbi4gVG8gYXZvaWQgdGhpcywgd2hlbiBmdWxsc2NyZWVuIGlzIHNldCwgb3ZlcnJpZGRpbmcgaXNGb2N1c2VkIGZsYWcgb24gdGhlIHR5cGVhaGVhZCBjb250YWluZXJcbiAgICAgICAgaWYgKHRoaXMuX2RvbVVwZGF0ZWQgJiYgdGhpcy50eXBlYWhlYWQgJiYgKHRoaXMudHlwZWFoZWFkIGFzIGFueSkuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkIGFzIGFueSkuX2NvbnRhaW5lci5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbklucHV0Q2hhbmdlKCRldmVudCkge1xuICAgICAgICAvLyByZXNldCBhbGwgdGhlIHByZXZpb3VzIHBhZ2UgZGV0YWlscyBpbiBvcmRlciB0byBmZXRjaCBuZXcgc2V0IG9mIHJlc3VsdC5cbiAgICAgICAgdGhpcy5yZXN1bHQgPSBbXTtcbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRoaXMuaXNVcGRhdGVPbktleVByZXNzKCk7XG4gICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyB3aGVuIGlucHV0IGlzIGNsZWFyZWQsIHJlc2V0IHRoZSBkYXRhdmFsdWVcbiAgICAgICAgaWYgKHRoaXMucXVlcnkgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSAnJztcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2RGF0YXZhbHVlKHRoaXMuX2xhc3RRdWVyeSk7XG4gICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuX21vZGVsQnlWYWx1ZSwge30sIHRydWUpO1xuXG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NsZWFyJywgeyAkZXZlbnQgfSk7XG5cbiAgICAgICAgICAgIC8vIHRyaWdnZXIgb25TdWJtaXQgb25seSB3aGVuIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xlYXJlZCBvZmYgYW5kIGRvIG5vdCB0cmlnZ2VyIHdoZW4gdGFiIGlzIHByZXNzZWQuXG4gICAgICAgICAgICBpZiAoJGV2ZW50ICYmICRldmVudC53aGljaCAhPT0gOSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc3VibWl0JywgeyAkZXZlbnQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpbnZva2luZyBjaGFuZ2UgZXZlbnQgb24gZXZlcnkgaW5wdXQgdmFsdWUgY2hhbmdlLlxuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgJGV2ZW50OiAkZXZlbnQsXG4gICAgICAgICAgICAgICAgbmV3VmFsOiB0aGlzLl9tb2RlbEJ5VmFsdWUgfHwgdGhpcy5xdWVyeSxcbiAgICAgICAgICAgICAgICBvbGRWYWw6ICh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXJlZCBmb3IgZW50ZXIgZXZlbnRcbiAgICBwcml2YXRlIGhhbmRsZUVudGVyRXZlbnQoJGV2ZW50KSB7XG4gICAgICAgIC8vIHN1Ym1pdCBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGVyZSBpcyBubyBzZWFyY2ggcmVzdWx0c1xuICAgICAgICBpZiAoIV8uZ2V0KHRoaXMudHlwZWFoZWFkLCAnbWF0Y2hlcy5sZW5ndGgnKSkge1xuICAgICAgICAgICAgdGhpcy5vblNlYXJjaFNlbGVjdCgkZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFRyaWdnZXJyZWQgd2hlbiB0eXBlYWhlYWQgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgIHByaXZhdGUgb25TZWFyY2hTZWxlY3QoJGV2ZW50OiBFdmVudCkge1xuICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgLy8gV01TLTIyNTMzOiBCZWZvcmUgYWRkaW5nIGFjdGl2ZSB0eXBlYWhlYWQgZWwsIGNoZWNrIGlmIHRoZSBlbnRlcmVkIHF1ZXJ5IG1hdGNoZXMgd2l0aCB0aGUgYWN0aXZlIGVsIG9yIG5vdFxuICAgICAgICBjb25zdCBpc1F1ZXJ5TWF0Y2ggPSB0aGlzLnR5cGVhaGVhZENvbnRhaW5lcj8uYWN0aXZlPy52YWx1ZSA9PT0gdGhpcy5xdWVyeTtcblxuICAgICAgICBpZiAodGhpcy50eXBlYWhlYWRDb250YWluZXIgJiYgdGhpcy50eXBlYWhlYWRDb250YWluZXIuYWN0aXZlICYmIGlzUXVlcnlNYXRjaCkge1xuICAgICAgICAgICAgaXRlbSA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLmFjdGl2ZS5pdGVtO1xuICAgICAgICB9XG4gICAgICAgICRldmVudCA9IHRoaXMuZXZlbnREYXRhKCRldmVudCwgaXRlbSB8fCB7fSk7XG5cbiAgICAgICAgLy8gc2VhcmNoT24gaXMgc2V0IGFzIG9uQnRuQ2xpY2ssIHRoZW4gaW52b2tlIHRoZSBzZWFyY2ggYXBpIGNhbGwgbWFudWFsbHkuXG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0ZU9uS2V5UHJlc3MoKSkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRydWU7XG4gICAgICAgICAgICAvLyB0cmlnZ2VyIHRoZSB0eXBlYWhlYWQgY2hhbmdlIG1hbnVhbGx5IHRvIGZldGNoIHRoZSBuZXh0IHNldCBvZiByZXN1bHRzLlxuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQub25JbnB1dCh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnF1ZXJ5IC8vIGR1bW15IGRhdGEgdG8gbm90aWZ5IHRoZSBvYnNlcnZhYmxlc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdoZW4gbWF0Y2hlcyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICBpZiAodGhpcy50eXBlYWhlYWRDb250YWluZXIgJiYgdGhpcy5saUVsZW1lbnRzLmxlbmd0aCAmJiBpc1F1ZXJ5TWF0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLnNlbGVjdEFjdGl2ZU1hdGNoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB0aGlzLnF1ZXJ5O1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCB7ICRldmVudCB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbChpbnB1dERhdGEpIHtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVzZXJ2aWNlY2FsbCcsIHsgaW5wdXREYXRhIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Ecm9wZG93bk9wZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmNsZWFyRGF0YSkge1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldHRpbmcgdGhlIHVsRWxlbWVudHMsIGxpRWxlbWVudCBvbiB0eXBlYWhlYWRDb250YWluZXIuXG4gICAgICAgIC8vIGFzIHdlIGFyZSB1c2luZyBjdXN0b21PcHRpb24gdGVtcGxhdGUsIGxpRWxlbWVudHMgYXJlIG5vdCBhdmFpbGFibGUgb24gdHlwZWFoZWFkQ29udGFpbmVyIHNvIGFwcGVuZCB0aGVtIGV4cGxpY2l0bHkuXG4gICAgICAgIGNvbnN0IGZuID0gXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWRDb250YWluZXIgPSB0aGlzLnR5cGVhaGVhZC5fY29udGFpbmVyIHx8ICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl90eXBlYWhlYWQuaW5zdGFuY2U7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWRDb250YWluZXIgYXMgYW55KS5saUVsZW1lbnRzID0gdGhpcy5saUVsZW1lbnRzO1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyIGFzIGFueSkudWxFbGVtZW50ID0gdGhpcy51bEVsZW1lbnQ7XG4gICAgICAgICAgICBhZGp1c3RDb250YWluZXJQb3NpdGlvbigkKCd0eXBlYWhlYWQtY29udGFpbmVyJyksIHRoaXMubmF0aXZlRWxlbWVudCwgKHRoaXMudHlwZWFoZWFkIGFzIGFueSkuX3R5cGVhaGVhZCwgJCgndHlwZWFoZWFkLWNvbnRhaW5lciAuZHJvcGRvd24tbWVudScpKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBmbigpO1xuXG4gICAgICAgIC8vIG9wZW4gZnVsbC1zY3JlZW4gc2VhcmNoIHZpZXdcbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVBdXRvQ29tcGxldGUoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJNb2JpbGVBdXRvQ29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duRWwgPSB0aGlzLmRyb3Bkb3duRWwuY2xvc2VzdCgndHlwZWFoZWFkLWNvbnRhaW5lcicpO1xuXG4gICAgICAgICAgICBkcm9wZG93bkVsLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQuZmluZCgnaW5wdXQnKS5maXJzdCgpKTtcbiAgICAgICAgICAgIGNvbnN0IHNjcmVlbkhlaWdodCA9IHRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnLmFwcC1jb250ZW50JykuaGVpZ2h0KCk7XG4gICAgICAgICAgICBkcm9wZG93bkVsLmNzcyh7IHBvc2l0aW9uOiAncmVsYXRpdmUnLCB0b3A6IDAsIGhlaWdodDogc2NyZWVuSGVpZ2h0ICsgJ3B4JyB9KTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gdGhpcy5xdWVyeSAmJiB0aGlzLnF1ZXJ5ICE9PSAnJztcblxuICAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpICYmICF0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyU2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdE5leHQoKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5tYXRjaGVzO1xuXG4gICAgICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2hlcy5pbmRleE9mKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLmFjdGl2ZSk7XG5cbiAgICAgICAgLy8gb24ga2V5ZG93biwgaWYgc2Nyb2xsIGlzIGF0IHRoZSBib3R0b20gYW5kIG5leHQgcGFnZSByZWNvcmRzIGFyZSBhdmFpbGFibGUsIGZldGNoIG5leHQgcGFnZSBpdGVtcy5cbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkaW5nSXRlbXMgJiYgIXRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UgJiYgaW5kZXggKyAxID4gbWF0Y2hlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAvLyBpbmRleCBpcyBzYXZlZCBpbiBvcmRlciB0byBzZWxlY3QgdGhlIGxhc3RTZWxlY3RlZCBpdGVtIGluIHRoZSBkcm9wZG93biBhZnRlciBmZXRjaGluZyBuZXh0IHBhZ2UgaXRlbXMuXG4gICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGFzdEFjdGl2ZU1hdGNoQXNTZWxlY3RlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lciBhcyBhbnkpLl9hY3RpdmUgPSB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5tYXRjaGVzW3RoaXMubGFzdFNlbGVjdGVkSW5kZXhdO1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWRDb250YWluZXIubmV4dEFjdGl2ZU1hdGNoKCk7XG4gICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmlnZ2VyU2VhcmNoKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSB8fCAhdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGVBaGVhZERyb3BEb3duID0gdGhpcy5kcm9wZG93bkVsO1xuICAgICAgICBjb25zdCAkbGFzdEl0ZW0gPSB0eXBlQWhlYWREcm9wRG93bi5maW5kKCdsaScpLmxhc3QoKTtcblxuICAgICAgICAvLyBDaGVjayBpZiBsYXN0IGl0ZW0gaXMgbm90IGJlbG93IHRoZSBmdWxsIHNjcmVlblxuICAgICAgICBpZiAoJGxhc3RJdGVtLmxlbmd0aCAmJiB0eXBlQWhlYWREcm9wRG93bi5sZW5ndGggJiYgKHR5cGVBaGVhZERyb3BEb3duLmhlaWdodCgpICsgdHlwZUFoZWFkRHJvcERvd24ucG9zaXRpb24oKS50b3AgPiAkbGFzdEl0ZW0uaGVpZ2h0KCkgKyAkbGFzdEl0ZW0ucG9zaXRpb24oKS50b3ApKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNVcGRhdGVPbktleVByZXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hvbiA9PT0gJ3R5cGluZyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWJvdW5jZURlZmF1bHRRdWVyeShkYXRhKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRRdWVyeUludm9rZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmdldERhdGFTb3VyY2UoZGF0YSwgdHJ1ZSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0UXVlcnkgPSB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeU1vZGVsWzBdLmxhYmVsIHx8ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IHRoaXMucXVlcnlNb2RlbFswXS52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5S2V5ID0gdGhpcy5xdWVyeU1vZGVsWzBdLmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXJEYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uZ2V0KCh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLCAnX3R5cGVhaGVhZC5pc1Nob3duJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCeURhdGF2YWx1ZShkYXRhKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQnlEYXRhc2V0KGRhdGEpO1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YVNvdXJjZShkYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJ5RGF0YVNvdXJjZShkYXRhKSB7XG4gICAgICAgIC8vIHZhbHVlIGlzIHByZXNlbnQgYnV0IHRoZSBjb3JyZXNwb25kaW5nIGtleSBpcyBub3QgZm91bmQgdGhlbiBmZXRjaCBuZXh0IHNldFxuICAgICAgICAvLyBtb2RlbEJ5S2V5IHdpbGwgYmUgc2V0IG9ubHkgd2hlbiBkYXRhdmFsdWUgaXMgYXZhaWxhYmxlIGluc2lkZSB0aGUgbG9jYWxEYXRhIG90aGVyd2lzZSBtYWtlIGEgTi93IGNhbGwuXG4gICAgICAgIGlmIChpc0RlZmluZWQoZGF0YSkgJiYgIV8uaXNPYmplY3QoZGF0YSkgJiYgdGhpcy5kYXRhc291cmNlICYmICFpc0RlZmluZWQodGhpcy5fbW9kZWxCeUtleSkgJiYgdGhpcy5kYXRhZmllbGQgIT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgLy8gQXZvaWQgbWFraW5nIGRlZmF1bHQgcXVlcnkgaWYgcXVlcnlNb2RlbCBhbHJlYWR5IGV4aXN0cy5cbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5xdWVyeU1vZGVsKSAmJiAhXy5pc0VtcHR5KHRoaXMucXVlcnlNb2RlbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGF2YWx1ZUZyb21RdWVyeU1vZGVsKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNYWtlIGRlZmF1bHQgcXVlcnkgY2FsbCBvbmx5IHdoZW4gZGF0YXNvdXJjZSBzdXBwb3J0cyBDUlVEIChsaXZlIHZhcmlhYmxlKS5cbiAgICAgICAgICAgIGlmICghdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19DUlVEKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVib3VuY2VEZWZhdWx0UXVlcnkoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB1cGRhdGVzIHRoZSBtb2RlbCB2YWx1ZSB1c2luZyBxdWVyeU1vZGVsXG4gICAgcHJpdmF0ZSB1cGRhdGVEYXRhdmFsdWVGcm9tUXVlcnlNb2RlbCgpIHtcbiAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnF1ZXJ5TW9kZWwpKSB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBfLmlzQXJyYXkodGhpcy5xdWVyeU1vZGVsKSA/ICh0aGlzLnF1ZXJ5TW9kZWxbMF0gYXMgRGF0YVNldEl0ZW0pLnZhbHVlIDogdGhpcy5xdWVyeU1vZGVsO1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IF8uaXNBcnJheSh0aGlzLnF1ZXJ5TW9kZWwpID8gKHRoaXMucXVlcnlNb2RlbFswXSBhcyBEYXRhU2V0SXRlbSkua2V5IDogdGhpcy5xdWVyeU1vZGVsO1xuICAgICAgICAgICAgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCeURhdGFzZXQoZGF0YTogYW55KSB7XG4gICAgICAgIC8vIGRlZmF1bHQgcXVlcnkgaXMgYWxyZWFkeSBpbnZva2VkIHRoZW4gZG8gbm90IG1ha2Ugb3RoZXIgZGVmYXVsdCBxdWVyeSBjYWxsLlxuICAgICAgICAvLyBGb3IgbG9jYWwgc2VhcmNoIGkuZS4gc2VhcmNoa2V5IGlzIHVuZGVmaW5lZCwgZG8gbm90IHJldHVybiwgdmVyaWZ5IHRoZSBkYXRhdmFsdWUgYWdhaW5zdCB0aGUgZGF0YXNldEl0ZW1zIC5cbiAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRRdWVyeUludm9rZWQgJiYgdGhpcy5zZWFyY2hrZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBfLmZpbmQodGhpcy5kYXRhc2V0SXRlbXMsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKF8uaXNPYmplY3QoaXRlbS52YWx1ZSkgPyBfLmlzRXF1YWwoaXRlbS52YWx1ZSwgZGF0YSkgOiAoXy50b1N0cmluZyhpdGVtLnZhbHVlKSkudG9Mb3dlckNhc2UoKSA9PT0gKF8udG9TdHJpbmcoZGF0YSkpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGRlZmF1bHQgb25seSB3aGVuIGl0IGlzIGF2YWlsYWJsZSBpbiBkYXRhc2V0LlxuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSBbc2VsZWN0ZWRJdGVtXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTICYmIF8uaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKGV4dHJhY3REYXRhQXNBcnJheShkYXRhKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXNldHRpbmcgdGhlIHF1ZXJ5TW9kZWwgb25seSB3aGVuIHByZXZEYXRhdmFsdWUgaXMgZXF1YWwgdG8gZGF0YVxuICAgICAgICAgICAgaWYgKCh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZSAhPT0gZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YXZhbHVlRnJvbVF1ZXJ5TW9kZWwoKTtcblxuICAgICAgICAvLyBTaG93IHRoZSBsYWJlbCB2YWx1ZSBvbiBpbnB1dC5cbiAgICAgICAgdGhpcy5fbGFzdFF1ZXJ5ID0gdGhpcy5xdWVyeSA9IGlzRGVmaW5lZCh0aGlzLnF1ZXJ5TW9kZWwpICYmIHRoaXMucXVlcnlNb2RlbC5sZW5ndGggPyBfLmdldCh0aGlzLnF1ZXJ5TW9kZWxbMF0sICdsYWJlbCcpIDogJyc7XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBoYXZlIGxhc3Qgc2VhcmNoIHJlc3VsdHMgdGhlbiBvcGVuIGRyb3Bkb3duIG9uIGZvY3VzXG4gICAgcHJpdmF0ZSBoYW5kbGVGb2N1cygkZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3NlYXJjaCcgJiYgdGhpcy5xdWVyeSA9PT0gdGhpcy5fbGFzdFF1ZXJ5ICYmIHRoaXMuX2xhc3RSZXN1bHQpIHtcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLmtleVVwRXZlbnRFbWl0dGVyLmVtaXQodGhpcy5xdWVyeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5U3Vic2NyaWJlcigpIHtcbiAgICAgICAgY29uc3QgcGFyZW50RWwgPSAkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnLmFwcC1jb21wb3NpdGUtd2lkZ2V0LmNhcHRpb24tZmxvYXRpbmcnKTtcbiAgICAgICAgaWYgKHBhcmVudEVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeSgnY2FwdGlvblBvc2l0aW9uQW5pbWF0ZScsIHtkaXNwbGF5VmFsOiB0cnVlLCBuYXRpdmVFbDogcGFyZW50RWx9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcHJvdmlkZXMgdGhlIGZpbHRlcmVkIGRhdGEgZnJvbSB0aGUgZGF0YXNvdXJjZS5cbiAgICBwdWJsaWMgZ2V0RGF0YVNvdXJjZShxdWVyeTogQXJyYXk8c3RyaW5nPiB8IHN0cmluZywgc2VhcmNoT25EYXRhRmllbGQ/OiBib29sZWFuLCBuZXh0SXRlbUluZGV4PzogbnVtYmVyKTogUHJvbWlzZTxEYXRhU2V0SXRlbVtdPiB7XG4gICAgICAgIC8vIEZvciBkZWZhdWx0IHF1ZXJ5LCBzZWFyY2hPbkRhdGFGaWVsZCBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiBkbyBub3QgbWFrZSBhIG4vdyBjYWxsIHdoZW4gZGF0YWZpZWxkIGlzIEFMTEZJRUxEU1xuICAgICAgICBpZiAoc2VhcmNoT25EYXRhRmllbGQgJiYgdGhpcy5kYXRhZmllbGQgPT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvciBkZWZhdWx0IGRhdGF2YWx1ZSwgc2VhcmNoIGtleSBhcyB0byBiZSBvbiBkYXRhZmllbGQgdG8gZ2V0IHRoZSBkZWZhdWx0IGRhdGEgZnJvbSB0aGUgZmlsdGVyIGNhbGwuXG4gICAgICAgIGNvbnN0IGRhdGFDb25maWc6IElEYXRhUHJvdmlkZXJDb25maWcgPSB7XG4gICAgICAgICAgICBkYXRhc2V0OiB0aGlzLmRhdGFzZXQgPyBjb252ZXJ0RGF0YVRvT2JqZWN0KHRoaXMuZGF0YXNldCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBiaW5kZGF0YXNldDogdGhpcy5iaW5kZGF0YXNldCxcbiAgICAgICAgICAgIGRhdGFzb3VyY2U6IHRoaXMuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGRhdGFmaWVsZDogdGhpcy5kYXRhZmllbGQsXG4gICAgICAgICAgICBoYXNEYXRhOiB0aGlzLmRhdGFzZXQgJiYgdGhpcy5kYXRhc2V0Lmxlbmd0aCxcbiAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgICAgIGlzTG9jYWxGaWx0ZXI6ICF0aGlzLnNlYXJjaGtleSxcbiAgICAgICAgICAgIHNlYXJjaEtleTogc2VhcmNoT25EYXRhRmllbGQgPyB0aGlzLmRhdGFmaWVsZCA6IHRoaXMuc2VhcmNoa2V5LFxuICAgICAgICAgICAgLy8gZGVmYXVsdCBzZWFyY2ggY2FsbCBtYXRjaCBtb2RlIHNob3VsZCBiZSBzdGFydGlnbm9yZWNhc2VcbiAgICAgICAgICAgIG1hdGNoTW9kZTogc2VhcmNoT25EYXRhRmllbGQgPyAnc3RhcnRpZ25vcmVjYXNlJyA6IHRoaXMubWF0Y2htb2RlLFxuICAgICAgICAgICAgY2FzZXNlbnNpdGl2ZTogdGhpcy5jYXNlc2Vuc2l0aXZlLFxuICAgICAgICAgICAgaXNmb3JtZmllbGQ6IHRoaXMuaXNmb3JtZmllbGQsXG4gICAgICAgICAgICBvcmRlcmJ5OiB0aGlzLm9yZGVyYnksXG4gICAgICAgICAgICBsaW1pdDogdGhpcy5saW1pdCxcbiAgICAgICAgICAgIHBhZ2VzaXplOiB0aGlzLnBhZ2VzaXplLFxuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgb25CZWZvcmVzZXJ2aWNlY2FsbDogdGhpcy5pbnZva2VPbkJlZm9yZVNlcnZpY2VDYWxsLmJpbmQodGhpcylcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5kYXRhb3B0aW9ucykge1xuICAgICAgICAgICAgZGF0YUNvbmZpZy5kYXRhb3B0aW9ucyA9IHRoaXMuZGF0YW9wdGlvbnM7XG4gICAgICAgICAgICBkYXRhQ29uZmlnLnZpZXdQYXJlbnQgPSB0aGlzLnZpZXdQYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFQcm92aWRlci5maWx0ZXIoZGF0YUNvbmZpZylcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcmVzcG9uc2UgZnJvbSBkYXRhUHJvdmlkZXIgcmV0dXJucyBhbHdheXMgZGF0YSBvYmplY3QuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZS5kYXRhIHx8IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIC8vIGZvciBzZXJ2aWNlIHZhcmlhYmxlLCB1cGRhdGluZyB0aGUgZGF0YXNldCBvbmx5IGlmIGl0IGlzIG5vdCBkZWZpbmVkIG9yIGVtcHR5XG4gICAgICAgICAgICAgICAgaWYgKCghaXNEZWZpbmVkKHRoaXMuZGF0YXNldCkgfHwgIXRoaXMuZGF0YXNldC5sZW5ndGgpICYmIHRoaXMuZGF0YVByb3ZpZGVyLnVwZGF0ZURhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc2V0ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVByb3ZpZGVyLmhhc01vcmVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YXNldCA9IHRoaXMuZm9ybWF0dGVkRGF0YXNldC5jb25jYXQocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YXNldCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgb3B0aW9uc2xpbWl0IGFzIHRoZSBtYXRjaGVzIG1vcmUgdGhhbiAyMCB3aWxsIGJlIGlnbm9yZWQgaWYgb3B0aW9uc2xpbWl0IGlzIG5vdCBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWF0dGVkRGF0YXNldC5sZW5ndGggPiAyMCAmJiAhaXNEZWZpbmVkKHRoaXMubGltaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLnR5cGVhaGVhZE9wdGlvbnNMaW1pdCA9IHRoaXMuZm9ybWF0dGVkRGF0YXNldC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSW4gbW9iaWxlLCB0cmlnZ2VyIHRoZSBzZWFyY2ggYnkgZGVmYXVsdCB1bnRpbCB0aGUgcmVzdWx0cyBoYXZlIGhlaWdodCB1cHRvIHBhZ2UgaGVpZ2h0LiBPdGhlciByZXN1bHRzIGNhbiBiZSBmZXRjaGVkIGJ5IHNjcm9sbGluZ1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc09wZW4gJiYgdGhpcy5pc01vYmlsZUF1dG9Db21wbGV0ZSgpICYmICFfLmlzVW5kZWZpbmVkKHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpICYmICF0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKHRoaXMuZm9ybWF0dGVkRGF0YXNldCwgbmV4dEl0ZW1JbmRleCk7XG5cbiAgICAgICAgICAgICAgICAvLyByZXN1bHQgY29udGFpbnMgdGhlIGRhdGFmaWVsZCB2YWx1ZXMuXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSBfLm1hcCh0cmFuc2Zvcm1lZERhdGEsICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGE7XG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIChfLmRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFzdEFjdGl2ZU1hdGNoQXNTZWxlY3RlZCgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAzMCkpKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBXaGVuIG5vIHJlc3VsdCBpcyBmb3VuZCwgc2V0IHRoZSBkYXRhdmFsdWUgdG8gdW5kZWZpbmVkLlxuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IChxdWVyeSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBvbiBmb2N1c291dCBpLmUuIG9uIG90aGVyIHdpZGdldCBmb2N1cywgaWYgbi93IGlzIHBlbmRpbmcgbG9hZGluZyBpY29uIGlzIHNob3duLCB3aGVuIGRhdGEgaXMgYXZhaWxhYmxlIHRoZW4gZHJvcGRvd24gaXMgc2hvd24gYWdhaW4uXG4gICAgICAgICAgICAgICAgLy8gb24gdW5zdWJzY3JpYmluZyBkbyBub3Qgc2hvdyB0aGUgcmVzdWx0cy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdW5zdWJzY3JpYmVEdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcGFyZW50IGNvbnRleHQgaS5lLiBQYWdlIGNvbnRleHQgYW5kIG5vdCBwYXJlbnQgY29tcG9uZW50J3MgY29udGV4dC5cbiAgICBwcml2YXRlIGdldENvbnRleHQoY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCAmJiBfLmdldChjb250ZXh0LCAnd2lkZ2V0JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbnRleHQoY29udGV4dC52aWV3UGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VHJhbnNmb3JtZWREYXRhKGRhdGE6IGFueSwgaXRlbUluZGV4PzogbnVtYmVyLCBpc2N1c3RvbT86IGJvb2xlYW4pOiBEYXRhU2V0SXRlbVtdIHtcbiAgICAgICAgaWYgKGlzRGVmaW5lZChpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgICBpdGVtSW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRyYW5zZm9ybUZvcm1EYXRhKFxuICAgICAgICAgICAgdGhpcy5nZXRDb250ZXh0KHRoaXMudmlld1BhcmVudCksXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdGhpcy5kYXRhZmllbGQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiB0aGlzLmRpc3BsYXlsYWJlbCB8fCB0aGlzLmRpc3BsYXlmaWVsZCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcjogaXNjdXN0b20gPyAnJyA6IHRoaXMuZGlzcGxheWV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgYmluZERpc3BsYXlFeHByOiBpc2N1c3RvbSA/ICcnIDogdGhpcy5iaW5kZGlzcGxheWxhYmVsLFxuICAgICAgICAgICAgICAgIGJpbmREaXNwbGF5SW1nU3JjOiB0aGlzLmJpbmRkaXNwbGF5aW1hZ2VzcmMsXG4gICAgICAgICAgICAgICAgZGlzcGxheUltZ1NyYzogdGhpcy5kaXNwbGF5aW1hZ2VzcmNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpdGVtSW5kZXgsXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBnZXRVbmlxT2Jqc0J5RGF0YUZpZWxkKHRyYW5zZm9ybWVkRGF0YSwgdGhpcy5kYXRhZmllbGQsIHRoaXMuZGlzcGxheWZpZWxkIHx8IHRoaXMuZGlzcGxheWxhYmVsLCB0b0Jvb2xlYW4odGhpcy5hbGxvd2VtcHR5KSk7XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uc0xpc3RUZW1wbGF0ZSBsaXN0ZW5zIHRvIHRoZSBzY3JvbGwgZXZlbnQgYW5kIHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24uXG4gICAgcHVibGljIG9uU2Nyb2xsKCRzY3JvbGxFbDogRWxlbWVudCwgZXZ0OiBFdmVudCkge1xuICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9ICRzY3JvbGxFbC5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBjbGllbnRIZWlnaHQgPSAkc2Nyb2xsRWwuY2xpZW50SGVpZ2h0O1xuXG4gICAgICAgIC8vIElmIHNjcm9sbCBpcyBhdCB0aGUgYm90dG9tIGFuZCBubyByZXF1ZXN0IGlzIGluIHByb2dyZXNzIGFuZCBuZXh0IHBhZ2UgcmVjb3JkcyBhcmUgYXZhaWxhYmxlLCBmZXRjaCBuZXh0IHBhZ2UgaXRlbXMuXG4gICAgICAgIGlmICghdGhpcy5fbG9hZGluZ0l0ZW1zICYmICF0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlICYmICgkc2Nyb2xsRWwuc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ID49IHRvdGFsSGVpZ2h0KSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZURhdGEodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgaWYgKCFpc0RlZmluZWQodGhpcy5taW5jaGFycykpIHtcbiAgICAgICAgICAgIC8vIGZvciBhdXRvY29tcGxldGUgc2V0IHRoZSBtaW5jaGFycyB0byAwXG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMubWluY2hhcnMgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbmNoYXJzID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSB0aGlzLmlzVXBkYXRlT25LZXlQcmVzcygpO1xuXG4gICAgICAgIC8vIGJ5IGRlZmF1bHQgZm9yIGF1dG9jb21wbGV0ZSBkbyBub3Qgc2hvdyB0aGUgc2VhcmNoIGljb25cbiAgICAgICAgLy8gYnkgZGVmYXVsdCBzaG93IHRoZSBzZWFyY2hpY29uIGZvciB0eXBlID0gc2VhcmNoXG4gICAgICAgIHRoaXMuc2hvd3NlYXJjaGljb24gPSBpc0RlZmluZWQodGhpcy5zaG93c2VhcmNoaWNvbikgPyB0aGlzLnNob3dzZWFyY2hpY29uIDogKHRoaXMudHlwZSA9PT0gJ3NlYXJjaCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuXG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lclRhcmdldCA9IGdldENvbnRhaW5lclRhcmdldENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudERhdGEoJGV2ZW50LCBpdGVtKSB7XG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAgICRldmVudFsnZGF0YSddID0ge1xuICAgICAgICAgICAgICAgIGl0ZW0gIDogaXRlbS5kYXRhT2JqZWN0LFxuICAgICAgICAgICAgICAgIG1vZGVsIDogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICBsYWJlbCA6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgICAgICAgcXVlcnkgOiB0aGlzLnF1ZXJ5XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICRldmVudDtcbiAgICB9XG5cbiAgICAvLyB0cmlnZ2VyZWQgb24gc2VsZWN0IG9uIG9wdGlvbiBmcm9tIHRoZSBsaXN0LiBTZXQgdGhlIHF1ZXJ5TW9kZWwsIHF1ZXJ5IGFuZCBtb2RlbEJ5S2V5IGZyb20gdGhlIG1hdGNoZWQgaXRlbS5cbiAgICBwdWJsaWMgdHlwZWFoZWFkT25TZWxlY3QobWF0Y2g6IFR5cGVhaGVhZE1hdGNoLCAkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBtYXRjaC5pdGVtO1xuICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSBpdGVtO1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5xdWVyeSA9IGl0ZW0ubGFiZWw7XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICAgICAgJGV2ZW50ID0gJGV2ZW50IHx8IHRoaXMuJHR5cGVhaGVhZEV2ZW50O1xuXG4gICAgICAgIC8vIEFzIGl0ZW0ua2V5IGNhbiB2YXJ5IGZyb20ga2V5IGluIHRoZSBkYXRhc2V0SXRlbXNcbiAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IGl0ZW0ua2V5O1xuICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgICRldmVudCA9IHRoaXMuZXZlbnREYXRhKCRldmVudCwgaXRlbSk7XG5cbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgJGV2ZW50IHx8IHt9KTtcbiAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhcmlhYmxlIGJvdW5kIHRvIGRlZmF1bHQgdmFsdWUgYXMgaW52b2tlT25DaGFuZ2UgaXMgbm90IHVwZGF0aW5nIHRoZSB2YXJpYWJsZS5cbiAgICAgICAgaWYgKHRoaXMuZGF0YXZhbHVlICE9PSAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRWYXJpYWJsZSh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VTZWFyY2goKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHsgJGV2ZW50LCBzZWxlY3RlZFZhbHVlOiB0aGlzLmRhdGF2YWx1ZSB9KTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCB7ICRldmVudCB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVByZXZEYXRhdmFsdWUodGhpcy5kYXRhdmFsdWUpO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmFja3dhcmQgY29tcGF0YWJpbGl0eSBmcm9tIDEwLjMuMSB0byAxMC4zLjJcbiAgICAgICAgLy8gMTAuMy4xIHdlIGhhZCBkaXNwbGF5bGFiZWwgYXMgbW9kYWwgdmFsdWVcbiAgICAgICAgLy8gRnJvbSAxMC4zLjIgb253b3JkcyB3ZSB3aWxsIGJlIGhhdmluZyBkaXNwbGF5ZXhwcmVzaW9uIGFzIG1vZGFsIHZhbHVlXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIGtleSA9PT0gJ2Rpc3BsYXlsYWJlbCcgJiYgdGhpcy5kaXNwbGF5bGFiZWwgJiYgKCF0aGlzLmRpc3BsYXlleHByZXNzaW9uIHx8ICh0aGlzLmRpc3BsYXlleHByZXNzaW9uICYmICF0aGlzLmRhdGFzb3VyY2UpKSkgIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWV4cHJlc3Npb24gPSB0aGlzLmRpc3BsYXlsYWJlbDtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWxhYmVsID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2hlbiBkYXRhb3B0aW9ucyBhcmUgcHJvdmlkZWQgYW5kIHRoZXJlIGlzIG5vIGRpc3BsYXlsYWJlbCBnaXZlbiB0aGVuIGRpc3BsYXlsYWJlbCBpcyBzZXQgYXMgdGhlIHJlbGF0ZWRmaWVsZFxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheWxhYmVsJyAmJiB0aGlzLmRhdGFvcHRpb25zICYmIHRoaXMuYmluZGRpc3BsYXlsYWJlbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeSA9IF8uZ2V0KHRoaXMuX21vZGVsQnlWYWx1ZSwgbnYpIHx8IHRoaXMuX21vZGVsQnlWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdoZW4gc2VhcmNoIGlzIGRpc2FibGVkLCBkbyBub3QgbG9hZCBhbnkgbW9yZSBkYXRhIG9yIGp1c3QgY2xlYXIgdGhlIGRhdGEgdGhhdCBpcyBhbHJlYWR5IGluIHByb2Nlc3Mgb3IgbG9hZGVkLlxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICBpZiAobnYgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckRhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChfLmdldCgodGhpcy50eXBlYWhlYWQgYXMgYW55KSwgJ190eXBlYWhlYWQuaXNTaG93bicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2N1c3RvbUl0ZW1UZW1wbGF0ZSBsZXQtbW9kZWw9XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtcXVlcnk9XCJxdWVyeVwiIGxldC1tYXRjaD1cIm1hdGNoXCI+XG4gICAgPCEtLSBEZWZhdWx0IGl0ZW0gdGVtcGxhdGUgLS0+XG4gICAgPGEgKm5nSWY9XCIhY29udGVudFwiPlxuICAgICAgICA8aW1nICpuZ0lmPVwibW9kZWwuaW1nU3JjXCIgW3NyY109XCJtb2RlbC5pbWdTcmNcIiBhbHQ9XCJTZWFyY2hcIiBbc3R5bGUud2lkdGhdPVwiaW1hZ2V3aWR0aFwiPlxuICAgICAgICA8c3BhbiBbdGl0bGVdPVwibW9kZWwubGFiZWxcIiBbaW5uZXJIdG1sXT1cImhpZ2hsaWdodChtYXRjaCwgcXVlcnkpIHx8IG1vZGVsLmxhYmVsXCI+PC9zcGFuPlxuICAgIDwvYT5cbiAgICA8IS0tIEN1c3RvbSBwYXJ0aWFsIHRlbXBsYXRlIC0tPlxuICAgIDxhICpuZ0lmPVwiY29udGVudFwiIFtuZ0NsYXNzXT1cIntjdXN0b21UZW1wbGF0ZTogY29udGVudH1cIiBwYXJ0aWFsQ29udGFpbmVyIFt3bUl0ZW1UZW1wbGF0ZV09XCJjb250ZW50XCIgW3VzZXJDb21wb25lbnRQYXJhbXNdPVwibWF0Y2guaXRlbVwiPlxuICAgICAgICA8ZGl2IHBhcnRpYWwtY29udGFpbmVyLXRhcmdldD48L2Rpdj5cbiAgICA8L2E+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2N1c3RvbUxpc3RUZW1wbGF0ZSBsZXQtbWF0Y2hlcz1cIm1hdGNoZXNcIiBsZXQtaXRlbVRlbXBsYXRlPVwiaXRlbVRlbXBsYXRlXCIgbGV0LXF1ZXJ5PVwicXVlcnlcIj5cbiAgICA8dWwgI3VsRWxlbWVudCBjbGFzcz1cImFwcC1zZWFyY2ggZHJvcGRvd24tbWVudVwiIHNjcm9sbGFibGU+XG4gICAgICAgIDxsaSAjbGlFbGVtZW50cyAqbmdGb3I9XCJsZXQgbWF0Y2ggb2YgbWF0Y2hlc1wiIFtuZ0NsYXNzXT1cInthY3RpdmU6IHR5cGVhaGVhZENvbnRhaW5lciAmJiB0eXBlYWhlYWRDb250YWluZXIuaXNBY3RpdmUobWF0Y2gpLCAnbGlzdC1ncm91cC1oZWFkZXInOiBtYXRjaCAmJiBtYXRjaC5pc0hlYWRlcigpfVwiXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCJ0eXBlYWhlYWRDb250YWluZXIuc2VsZWN0QWN0aXZlKG1hdGNoKTtcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1hdGNoICYmICFtYXRjaC5pc0hlYWRlcigpICYmIHR5cGVhaGVhZENvbnRhaW5lci5zZWxlY3RNYXRjaChtYXRjaCwgJGV2ZW50KTsgJHR5cGVhaGVhZEV2ZW50ID0gJGV2ZW50OyBub3RpZnlTdWJzY3JpYmVyKCk7XCI+XG4gICAgICAgICAgICA8IS0tIGl0ZW1UZW1wbGF0ZSBjb21lcyBmcm9tIHRoZSA8aW5wdXQ+IC0tPlxuICAgICAgICAgICAgPGg0ICpuZ0lmPVwibWF0Y2guaXNIZWFkZXIoKVwiIGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj57e21hdGNoLnZhbHVlfX08L2g0PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtYXRjaC5pc0hlYWRlcigpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBtYXRjaC5pdGVtLCBpbmRleDogaSwgbWF0Y2g6IG1hdGNoLCBxdWVyeTogcXVlcnl9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiIFtoaWRkZW5dPVwiX2xvYWRpbmdJdGVtcyB8fCAhKGRhdGFjb21wbGV0ZW1zZyAmJiBkYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSlcIj5cbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJkYXRhY29tcGxldGVtc2dcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzXCIgW2hpZGRlbl09XCIhX2xvYWRpbmdJdGVtc1wiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cImxvYWRpbmdkYXRhbXNnXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLVRoaXMgdGVtcGxhdGUgaXMgZm9yIHNlYXJjaCBpbnNpZGUgbW9iaWxlIG5hdmJhci4tLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJuYXZzZWFyY2hiYXI7IGVsc2Ugc2VhcmNoVGVtcGxhdGVcIj5cbiAgICA8aW5wdXQgW3RpdGxlXT1cInF1ZXJ5IHx8ICcnXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImFwcC10ZXh0Ym94IGZvcm0tY29udHJvbCBsaXN0LW9mLW9ianMgYXBwLXNlYXJjaC1pbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgICAgICAgIGZvY3VzLXRhcmdldFxuICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJxdWVyeVwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRdPVwidHlwZWFoZWFkRGF0YVNvdXJjZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRXYWl0TXNdPVwiZGVib3VuY2V0aW1lXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZEl0ZW1UZW1wbGF0ZV09XCJjdXN0b21JdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICBbb3B0aW9uc0xpc3RUZW1wbGF0ZV09XCJjdXN0b21MaXN0VGVtcGxhdGVcIlxuICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwibGlzdGVuUXVlcnkgPSB0cnVlXCJcbiAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJHR5cGVhaGVhZEV2ZW50ID0gJGV2ZW50O2hhbmRsZUVudGVyRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgIChrZXlkb3duLmFycm93ZG93bik9XCJzZWxlY3ROZXh0KCRldmVudClcIlxuICAgICAgICAgICAoYmx1cik9XCJpbnZva2VPblRvdWNoZWQoJGV2ZW50KVwiXG4gICAgICAgICAgIChjbGljayk9XCJoYW5kbGVGb2N1cygkZXZlbnQpO1wiXG4gICAgICAgICAgIChmb2N1cyk9XCJfdW5zdWJzY3JpYmVEdiA9IGZhbHNlOyBsaXN0ZW5RdWVyeSA9IHRydWU7IGhhbmRsZUZvY3VzKCRldmVudCk7IGludm9rZU9uRm9jdXMoJGV2ZW50KTtcIlxuICAgICAgICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZE1pbkxlbmd0aF09XCJtaW5jaGFyc1wiXG4gICAgICAgICAgIFt0eXBlYWhlYWRPcHRpb25zTGltaXRdPVwibGltaXRcIlxuICAgICAgICAgICAodHlwZWFoZWFkTG9hZGluZyk9XCJfbG9hZGluZ0l0ZW1zXCJcbiAgICAgICAgICAgKHR5cGVhaGVhZE9uU2VsZWN0KT1cInR5cGVhaGVhZE9uU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICB0eXBlYWhlYWRPcHRpb25GaWVsZD1cImxhYmVsXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZEdyb3VwRmllbGRdPVwiZ3JvdXBieSA/ICdncm91cGJ5JyA6IG51bGxcIlxuICAgICAgICAgICBbdHlwZWFoZWFkQXN5bmNdPVwidHJ1ZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRTY3JvbGxhYmxlXT1cInRydWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkT3B0aW9uc0luU2Nyb2xsYWJsZVZpZXddPVwib3B0aW9uc2xpbWl0aW5zY3JvbGxhYmxldmlld1wiXG4gICAgICAgICAgIFtkcm9wdXBdPVwiZHJvcHVwXCJcbiAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJoaW50IHx8ICdTZWFyY2ggZmllbGQnXCIvPlxuICAgIDxpIGNsYXNzPVwiYnRuLWNsb3NlIHdpIHdpLWNhbmNlbFwiIFtoaWRkZW5dPVwiIXNob3dDbG9zZWJ0blwiIChjbGljayk9XCJjbGVhclNlYXJjaCgkZXZlbnQpO1wiPjwvaT5cbjwvbmctY29udGFpbmVyPlxuPCEtLVRoaXMgdGVtcGxhdGUgaXMgZm9yIGJvdGggd2ViIGFuZCBmdWxsc2NyZWVuIG1vZGUgaW4gbW9iaWxlLi0tPlxuPG5nLXRlbXBsYXRlICNzZWFyY2hUZW1wbGF0ZT5cbiAgICA8c3BhbiBjbGFzcz1cIndpIHdpLWFycm93LWxlZnQgZm9ybS1jb250cm9sLWZlZWRiYWNrIGJhY2stYnRuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKGNsaWNrKT1cImNsb3NlU2VhcmNoKClcIj48L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+QmFjayBidXR0b248L3NwYW4+XG4gICAgPGlucHV0IFt0aXRsZV09XCJxdWVyeSB8fCAnJ1wiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhcHAtdGV4dGJveCBmb3JtLWNvbnRyb2wgbGlzdC1vZi1vYmpzIGFwcC1zZWFyY2gtaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICBmb2N1cy10YXJnZXRcbiAgICAgICAgICAgW2NvbnRhaW5lcl09XCJjb250YWluZXJUYXJnZXQgfHwgJ2JvZHknXCJcbiAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJxdWVyeVwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRdPVwidHlwZWFoZWFkRGF0YVNvdXJjZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRXYWl0TXNdPVwiZGVib3VuY2V0aW1lXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZEl0ZW1UZW1wbGF0ZV09XCJjdXN0b21JdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICBbb3B0aW9uc0xpc3RUZW1wbGF0ZV09XCJjdXN0b21MaXN0VGVtcGxhdGVcIlxuICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwibGlzdGVuUXVlcnkgPSB0cnVlXCJcbiAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJHR5cGVhaGVhZEV2ZW50ID0gJGV2ZW50O2hhbmRsZUVudGVyRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgIChrZXlkb3duLmFycm93ZG93bik9XCJzZWxlY3ROZXh0KCRldmVudClcIlxuICAgICAgICAgICAoYmx1cik9XCJpbnZva2VPblRvdWNoZWQoJGV2ZW50KTsgb25Gb2N1c091dCgpXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUZvY3VzKCRldmVudCk7XCJcbiAgICAgICAgICAgKGZvY3VzKT1cIl91bnN1YnNjcmliZUR2ID0gZmFsc2U7IGxpc3RlblF1ZXJ5ID0gdHJ1ZTsgaGFuZGxlRm9jdXMoJGV2ZW50KTsgaW52b2tlT25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZE1pbkxlbmd0aF09XCJtaW5jaGFyc1wiXG4gICAgICAgICAgIFt0eXBlYWhlYWRPcHRpb25zTGltaXRdPVwibGltaXRcIlxuICAgICAgICAgICAodHlwZWFoZWFkTG9hZGluZyk9XCJfbG9hZGluZ0l0ZW1zXCJcbiAgICAgICAgICAgKHR5cGVhaGVhZE9uU2VsZWN0KT1cInR5cGVhaGVhZE9uU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICB0eXBlYWhlYWRPcHRpb25GaWVsZD1cImxhYmVsXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZEdyb3VwRmllbGRdPVwiZ3JvdXBieSA/ICdncm91cGJ5JyA6IG51bGxcIlxuICAgICAgICAgICBbdHlwZWFoZWFkQXN5bmNdPVwidHJ1ZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRTY3JvbGxhYmxlXT1cInRydWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkT3B0aW9uc0luU2Nyb2xsYWJsZVZpZXddPVwib3B0aW9uc2xpbWl0aW5zY3JvbGxhYmxldmlld1wiXG4gICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgIFtkcm9wdXBdPVwiZHJvcHVwXCJcbiAgICAgICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJoaW50IHx8ICdTZWFyY2ggZmllbGQnXCI+XG4gICAgPGlucHV0IGNsYXNzPVwibW9kZWwtaG9sZGVyXCIgbmctbW9kZWw9XCJwcm94eU1vZGVsXCIgbmctcmVxdWlyZWQ9XCJyZXF1aXJlZFwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8c3BhbiAqbmdJZj1cIl9sb2FkaW5nSXRlbXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImZhIGZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW4gZm9ybS1jb250cm9sLWZlZWRiYWNrXCI+PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwid2kgd2ktY2xvc2UgZm9ybS1jb250cm9sLWZlZWRiYWNrIGNsZWFyLWJ0blwiIFtuZ0NsYXNzXT1cInsnc2hvdy1idG4nOiBpc1F1ZXJ5RW50ZXJlZCgpfVwiIChjbGljayk9XCJjbGVhclNlYXJjaCgkZXZlbnQsIHRydWUpXCI+PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsZWFyIGJ1dHRvbjwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInNob3dzZWFyY2hpY29uXCIgY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiIGFyaWEtbGFiZWw9XCJzZWFyY2ggaWNvblwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cbiAgICAgICAgPGZvcm0+XG4gICAgICAgICAgICA8YnV0dG9uIHRpdGxlPVwiU2VhcmNoXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY2xhc3M9XCJhcHAtc2VhcmNoLWJ1dHRvbiB3bS1zbC1sIHNsLXNlYXJjaFwiIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWFyY2hTZWxlY3QoJGV2ZW50KVwiPjwvYnV0dG9uPlxuICAgICAgICA8L2Zvcm0+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
918
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9iYXNpYy9zZWFyY2gvc3JjL3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvc2VhcmNoL3NyYy9zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFHUixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUErQixrQkFBa0IsRUFBa0IsTUFBTSx5QkFBeUIsQ0FBQztBQUUxRyxPQUFPLEVBQ0gsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixHQUFHLEVBQ0gsVUFBVSxFQUNWLFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUVaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQWUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pOLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FB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O1FBQXBCLHVDQUFvQixpQkFBQTs7dUZEY3RCLGVBQWU7Y0FUM0IsU0FBUzsyQkFDSSxZQUFZLGFBRVg7b0JBQ1AsU0FBUyxrQkFBa0IsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO29CQUNuRCxTQUFTLGtCQUFrQixhQUFhLEVBQUUsSUFBSSxDQUFDO29CQUMvQyxrQkFBa0IsaUJBQWlCO2lCQUN0Qzs7c0JBMkVJLFNBQVM7dUJBQUMsZ0JBQWdCOztzQkFDMUIsU0FBUzt1QkFBQyxjQUFjO3dCQTNDRSxTQUFTO2tCQUF2QyxTQUFTO21CQUFDLGtCQUFrQjtZQUNMLFNBQVM7a0JBQWhDLFNBQVM7bUJBQUMsV0FBVztZQUNNLFVBQVU7a0JBQXJDLFlBQVk7bUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIE5HX1ZBTElEQVRPUlMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUeXBlYWhlYWRDb250YWluZXJDb21wb25lbnQsIFR5cGVhaGVhZERpcmVjdGl2ZSwgVHlwZWFoZWFkTWF0Y2ggfSBmcm9tICduZ3gtYm9vdHN0cmFwL3R5cGVhaGVhZCc7XG5cbmltcG9ydCB7XG4gICAgYWRkQ2xhc3MsXG4gICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sXG4gICAgQXBwLFxuICAgIERhdGFTb3VyY2UsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIHRvQm9vbGVhbixcbiAgICBVc2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHRcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgQUxMRklFTERTLCBjb252ZXJ0RGF0YVRvT2JqZWN0LCBEYXRhU2V0SXRlbSwgZXh0cmFjdERhdGFBc0FycmF5LCBnZXRVbmlxT2Jqc0J5RGF0YUZpZWxkLCBwcm92aWRlQXMsIHByb3ZpZGVBc1dpZGdldFJlZiwgc3R5bGVyLCB0cmFuc2Zvcm1Gb3JtRGF0YSwgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3NlYXJjaC5wcm9wcyc7XG5pbXBvcnQgeyBEYXRhUHJvdmlkZXIsIElEYXRhUHJvdmlkZXIsIElEYXRhUHJvdmlkZXJDb25maWcgfSBmcm9tICcuL2RhdGEtcHJvdmlkZXIvZGF0YS1wcm92aWRlcic7XG5cbmRlY2xhcmUgY29uc3QgXztcblxuY29uc3QgV0lER0VUX0NPTkZJRyA9IHsgd2lkZ2V0VHlwZTogJ3dtLXNlYXJjaCcsIGhvc3RDbGFzczogJ2lucHV0LWdyb3VwJyB9O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bVNlYXJjaF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXMoU2VhcmNoQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBcyhTZWFyY2hDb21wb25lbnQsIE5HX1ZBTElEQVRPUlMsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoU2VhcmNoQ29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoQ29tcG9uZW50IGV4dGVuZHMgRGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBwdWJsaWMgY2FzZXNlbnNpdGl2ZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2VhcmNoa2V5OiBzdHJpbmc7XG4gICAgcHVibGljIHF1ZXJ5TW9kZWw6IEFycmF5PERhdGFTZXRJdGVtPiB8IHN0cmluZztcbiAgICBwdWJsaWMgcXVlcnkgPSAnJztcbiAgICBwdWJsaWMgbGltaXQ6IGFueTtcbiAgICBwdWJsaWMgc2hvd3NlYXJjaGljb246IGJvb2xlYW47XG4gICAgcHVibGljIG1pbmNoYXJzOiBudW1iZXI7XG4gICAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgICBwdWJsaWMgbmF2c2VhcmNoYmFyOiBhbnk7XG4gICAgcHVibGljIGRlYm91bmNldGltZTogbnVtYmVyO1xuICAgIHB1YmxpYyBoaW50OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGFwcDogQXBwO1xuICAgIHByaXZhdGUgdHlwZWFoZWFkRGF0YVNvdXJjZTogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHByaXZhdGUgcGFnZXNpemU6IGFueTtcbiAgICBwcml2YXRlIHBhZ2UgPSAxO1xuICAgIHB1YmxpYyBfbG9hZGluZ0l0ZW1zOiBib29sZWFuO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyOiBJRGF0YVByb3ZpZGVyO1xuICAgIHByaXZhdGUgcmVzdWx0OiBBcnJheTxhbnk+OyAvLyBjb250YWlucyB0aGUgc2VhcmNoIHJlc3VsdCBpLmUuIG1hdGNoZXNcbiAgICBwcml2YXRlIGZvcm1hdHRlZERhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIGlzZm9ybWZpZWxkOiBib29sZWFuO1xuICAgIHByaXZhdGUgJHR5cGVhaGVhZEV2ZW50OiBFdmVudDtcblxuICAgIHB1YmxpYyB0YWJpbmRleDogbnVtYmVyO1xuICAgIHB1YmxpYyBzdGFydEluZGV4OiBudW1iZXI7XG4gICAgcHVibGljIGJpbmRkaXNwbGF5bGFiZWw6IHN0cmluZztcbiAgICBwdWJsaWMgdHlwZWFoZWFkQ29udGFpbmVyOiBUeXBlYWhlYWRDb250YWluZXJDb21wb25lbnQ7XG4gICAgcHVibGljIGNvbnRhaW5lclRhcmdldDogc3RyaW5nO1xuXG4gICAgQFZpZXdDaGlsZChUeXBlYWhlYWREaXJlY3RpdmUpIHR5cGVhaGVhZDogVHlwZWFoZWFkRGlyZWN0aXZlO1xuICAgIEBWaWV3Q2hpbGQoJ3VsRWxlbWVudCcpIHVsRWxlbWVudDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkcmVuKCdsaUVsZW1lbnRzJykgbGlFbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgcHJpdmF0ZSBhbGxvd29ubHlzZWxlY3Q6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjbGFzczogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICAgIHByaXZhdGUgZGF0YW9wdGlvbnM6IGFueTtcbiAgICBwdWJsaWMgZHJvcGRvd25FbDogYW55O1xuICAgIHByaXZhdGUgX2xhc3RRdWVyeTogc3RyaW5nO1xuICAgIHByaXZhdGUgX2xhc3RSZXN1bHQ6IGFueTtcbiAgICBwcml2YXRlIF9pc09wZW46IGJvb2xlYW47IC8vIHNldCB0byB0cnVlIHdoZW4gZHJvcGRvd24gaXMgb3BlblxuICAgIHByaXZhdGUgc2hvd0Nsb3NlYnRuOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlRHY6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZGF0YXNvdXJjZTogYW55O1xuICAgIHByaXZhdGUgaXNTY3JvbGxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHBhcmVudEVsOiBhbnk7XG4gICAgcHJpdmF0ZSBwb3NpdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgZWxJbmRleDogbnVtYmVyO1xuICAgIHByaXZhdGUgbGlzdGVuUXVlcnk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZG9tVXBkYXRlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHNlYXJjaG9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzaG93Y2xlYXI6IGJvb2xlYW47XG4gICAgcHVibGljIG1hdGNobW9kZTogc3RyaW5nO1xuICAgIHByaXZhdGUgY2xlYXJEYXRhOiBib29sZWFuO1xuXG5cbiAgICAvLyBnZXR0ZXIgc2V0dGVyIGlzIGFkZGVkIHRvIHBhc3MgdGhlIGRhdGFzb3VyY2UgdG8gc2VhcmNoY29tcG9uZW50LlxuICAgIGdldCBkYXRhc291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YXNvdXJjZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YXNvdXJjZShudikge1xuICAgICAgICB0aGlzLl9kYXRhc291cmNlID0gbnY7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlQnlEYXRhdmFsdWUoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIGFwcDogQXBwLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhdmFsdWUuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXZhbHVlLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBwdWJsaWMgYmluZGRhdGFzZXRcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHKTtcbiAgICAgICAgLy8gdGhpcyBmbGFnIHdpbGwgbm90IGFsbG93IHRoZSBlbXB0eSBkYXRhZmllbGQgdmFsdWVzLlxuICAgICAgICB0aGlzLmFsbG93ZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgICAgIGFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgJ2FwcC1zZWFyY2gnLCB0cnVlKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogTGlzdGVucyBmb3IgdGhlIGNoYW5nZSBpbiB0aGUgbmdNb2RlbCBvbiBldmVyeSBzZWFyY2ggYW5kIHJldHJpZXZlcyB0aGUgZGF0YSBhcyBvYnNlcnZhYmxlLlxuICAgICAgICAgKiBUaGlzIG9ic2VydmFibGUgZGF0YSBpcyBwYXNzZWQgdG8gdGhlIHR5cGVhaGVhZC5cbiAgICAgICAgICogQHR5cGUge09ic2VydmFibGU8YW55Pn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudHlwZWFoZWFkRGF0YVNvdXJjZSA9IE9ic2VydmFibGVcbiAgICAgICAgICAgIC5jcmVhdGUoKG9ic2VydmVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBSdW5zIG9uIGV2ZXJ5IHNlYXJjaFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlblF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRRdWVyeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gb24ga2V5ZG93biwgd2hpbGUgc2Nyb2xsaW5nIHRoZSBkcm9wZG93biBpdGVtcywgd2hlbiBsYXN0IGl0ZW0gaXMgcmVhY2hlZCBuZXh0IGNhbGwgaXMgdHJpZ2dlcmVkXG4gICAgICAgICAgICAgICAgLy8gdW5sZXNzIHRoZSBjYWxsIGlzIHJlc29sdmVkLCB3ZSBhcmUgYWJsZSB0byBzY3JvbGwgbmV4dCB0byBmaXJzdCBpdGVtIGFuZCBzb29uXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBzaG93cyBmbGlja2VyaW5nIGZyb20gZmlyc3QgaXRlbSB0byBuZXh0IG5ldyBpdGVtcyBhcHBlbmRlZC5cbiAgICAgICAgICAgICAgICAvLyBCeSBzZXR0aW5nIGNvbnRhaW5lciB0byB1bmRlZmluZWQsIGtleSBldmVudHMgY2hhbmdlcyB3aWxsIGJlIHN0b3BwZWQgd2hpbGUgbG9hZGluZyBpdGVtc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLl9jb250YWluZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLm1pbmNoYXJzID09PSAwIHx8ICh0aGlzLnF1ZXJ5ICYmIHRoaXMucXVlcnkubGVuZ3RoID49IHRoaXMubWluY2hhcnMpKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgodG9rZW46IHN0cmluZykgPT4gdGhpcy5nZXREYXRhU291cmNlQXNPYnNlcnZhYmxlKHRva2VuKSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXIgPSBuZXcgRGF0YVByb3ZpZGVyKCk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZW4gZGVmYXVsdCBkYXRhdmFsdWUgaXMgbm90IGZvdW5kIHdpdGhpbiB0aGUgZGF0YXNldCwgYSBmaWx0ZXIgY2FsbCBpcyBtYWRlIHRvIGdldCB0aGUgcmVjb3JkIHVzaW5nIGZldGNoRGVmYXVsdE1vZGVsLlxuICAgICAgICAgKiBhZnRlciBnZXR0aW5nIHRoZSByZXNwb25zZSwgc2V0IHRoZSBxdWVyeU1vZGVsIGFuZCBxdWVyeS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGRhdGF2YWx1ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YXZhbHVlJC5zdWJzY3JpYmUoKHZhbDogQXJyYXk8c3RyaW5nPiB8IHN0cmluZykgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IChfLmlzQXJyYXkodmFsKSA/IHZhbFswXSA6IHZhbCkgYXMgc3RyaW5nO1xuXG4gICAgICAgICAgICBpZiAocXVlcnkgPT09IG51bGwgfHwgcXVlcnkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgdGhlIHF1ZXJ5LlxuICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5TW9kZWwgPSAnJztcbiAgICAgICAgICAgICAgICAvLyBvbiBjbGVhciBvciByZXNldCBmaWx0ZXIsIGVtcHR5IHRoZSBsYXN0UmVzdWx0cyB0byBmZXRjaCBuZXcgcmVjb3Jkcy5cbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl91bnN1YnNjcmliZUR2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGlmIHByZXYgZGF0YXZhbHVlIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IGRhdGF2YWx1ZSB0aGVuIGNsZWFyIHRoZSBtb2RlbEJ5S2V5IGFuZCBxdWVyeU1vZGVsXG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzT2JqZWN0KHZhbCkgJiYgKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlICE9PSB2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMucXVlcnlNb2RlbCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YWZpZWxkIGlzIEFMTEZJTEVEUyBkbyBub3QgZmV0Y2ggdGhlIHJlY29yZHNcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHF1ZXJ5IG1vZGVsIHdpdGggdGhlIHZhbHVlcyB3ZSBoYXZlXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVCeURhdGF2YWx1ZSh2YWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0dXJuIG9uIHNob3dDbG9zZUJ0biB3aGVuIGEgZGVmYXVsdCB2YWx1ZSBpcyBnaXZlblxuICAgICAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhdmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG5cbiAgICAgICAgY29uc3QgZGF0YXNldFN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YXNldCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHNldCB0aGUgbmV4dCBpdGVtIGluZGV4LlxuICAgICAgICAgICAgdGhpcy5zdGFydEluZGV4ID0gdGhpcy5kYXRhc2V0SXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5fbGFzdFJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuZGF0YXZhbHVlIHx8IHRoaXMudG9CZVByb2Nlc3NlZERhdGF2YWx1ZTtcbiAgICAgICAgICAgIC8vIGludm9raW5nIHVwZGF0ZUJ5RGF0YXNldCBvbmx5IHdoZW4gZGF0YXZhbHVlIGlzIHByZXNlbnQsIGFzIGVudGVyZWQgdmFsdWUgaS5lLiBxdWVyeSBpcyBzZXR0aW5nIGJhY2sgdG8gJydcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnlEYXRhc2V0KGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IGRhdGFzZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgLy8gb24gY2xlYXIsIHRyaWdnZXIgc2VhcmNoIHdpdGggcGFnZSBzaXplIDFcbiAgICBwcml2YXRlIGNsZWFyU2VhcmNoKCRldmVudCwgbG9hZE9uQ2xlYXIpIHtcbiAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UoJGV2ZW50KTtcbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gZmFsc2U7XG4gICAgICAgIGlmIChsb2FkT25DbGVhcikge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2xlYXJzZWFyY2gnKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgIC8vIHdoZW4gc2VhcmNoIGlucHV0IGlzIGNsZWFyZWQsIGZvY3VzIG9uIHRoZSBpbnB1dCBmaWVsZFxuICAgICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5hcHAtc2VhcmNoLWlucHV0JykuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZ1bmN0aW9uIHRvICBjbGVhciB0aGUgaW5wdXQgdmFsdWVcbiAgICBwdWJsaWMgY2xlYXJUZXh0KCkge1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIGZ1bGwgc2NyZWVuIG1vZGUgaW4gbW9iaWxlIHZpZXcgb2YgYXV0byBjb21wbGV0ZVxuICAgIHByaXZhdGUgY2xvc2VTZWFyY2goKSB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICAvLyBhZnRlciBjbG9zaW5nIHRoZSBzZWFyY2gsIGluc2VydCB0aGUgZWxlbWVudCBhdCBpdHMgcHJldmlvdXMgcG9zaXRpb24gKGVsSW5kZXgpXG4gICAgICAgIHRoaXMuaW5zZXJ0QXRJbmRleCh0aGlzLmVsSW5kZXgpO1xuICAgICAgICB0aGlzLmVsSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucGFyZW50RWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2Z1bGwtc2NyZWVuJyk7XG4gICAgICAgIGlmICh0aGlzLl9kb21VcGRhdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9kb21VcGRhdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyTW9iaWxlQXV0b0NvbXBsZXRlKCkge1xuICAgICAgICAvLyBHZXQgdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBzZWFyY2ggZWxlbWVudCB3aGljaCBjYW4gYmUgbmV4dCBvciBwcmV2IGVsZW1lbnQsIGlmIGJvdGggYXJlIGVtcHR5IHRoZW4gZ2V0IHRoZSBwYXJlbnQgb2YgZWxlbWVudC5cbiAgICAgICAgaWYgKCFpc0RlZmluZWQodGhpcy5lbEluZGV4KSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRFbCA9IHRoaXMuJGVsZW1lbnQucGFyZW50KCk7XG4gICAgICAgICAgICB0aGlzLmVsSW5kZXggPSB0aGlzLnBhcmVudEVsLmNoaWxkcmVuKCkuaW5kZXgodGhpcy4kZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGZsYWcgaXMgc2V0IHRvIG5vdGlmeSB0aGF0IHRoZSB0eXBlYWhlYWQtY29udGFpbmVyIGRvbSBoYXMgY2hhbmdlZCBpdHMgcG9zaXRpb25cbiAgICAgICAgICAgIHRoaXMuX2RvbVVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy8gQWRkIGZ1bGwgc2NyZWVuIGNsYXNzIG9uIGZvY3VzIG9mIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcygnZnVsbC1zY3JlZW4nKTtcblxuICAgICAgICAgICAgLy8gQWRkIHBvc2l0aW9uIHRvIHNldCB0aGUgaGVpZ2h0IHRvIGF1dG9cbiAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5wb3NpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9jdXMgaXMgbG9zdCB3aGVuIGVsZW1lbnQgaXMgY2hhbmdlZCB0byBmdWxsLXNjcmVlbiwga2V5ZG93biB0byBzZWxlY3QgbmV4dCBpdGVtcyB3aWxsIG5vdCB3b3JrXG4gICAgICAgIC8vIEhlbmNlIGV4cGxpY2l0bHkgZm9jdXNpbmcgdGhlIGlucHV0XG4gICAgICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5hcHAtc2VhcmNoLWlucHV0JykuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YVNvdXJjZUFzT2JzZXJ2YWJsZShxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgLy8gc2hvdyBkcm9wZG93biBvbmx5IHdoZW4gdGhlcmUgaXMgY2hhbmdlIGluIHF1ZXJ5LiBUaGlzIHNob3VsZCBub3QgYXBwbHkgd2hlbiBkYXRhb3B0aW9ucyB3aXRoIGZpbHRlckZpZWxkcyBhcmUgdXBkYXRlZC5cbiAgICAgICAgLy8gd2hlbiBsYXN0UmVzdWx0IGlzIG5vdCBhdmFpbGFibGUgaS5lLiBzdGlsbCB0aGUgZmlyc3QgY2FsbCBpcyBwZW5kaW5nIGFuZCBzZWNvbmQgcXVlcnkgaXMgaW52b2tlZCB0aGVuIGRvIG5vdCByZXR1cm4uXG4gICAgICAgIGlmICh0aGlzLl9sYXN0UXVlcnkgPT09IHF1ZXJ5ICYmICFfLmdldCh0aGlzLmRhdGFvcHRpb25zLCAnZmlsdGVyRmllbGRzJykgJiYgaXNEZWZpbmVkKHRoaXMuX2xhc3RSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLl9sYXN0UmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgV01TLTE5MTc3OiBPbiBmb2N1cyBvZiBpbnB1dCBmaWVsZCBmb3IgYXV0b2NvbXBsZXRlIHR5cGUsIGRvIG5vdCB0cmlnZ2VyIGFwaSBjYWxsIHdoZW5cbiAgICAgICAgICAgICAgICAgYSkgc2VhcmNoa2V5IGFuZCBkaXNwbGF5ZXhwcmVzc2lvbiBhcmUgZGlmZmVyZW50XG4gICAgICAgICAgICAgICAgIGIpIGJpbmRkaXNwbGF5bGFiZWwgY29udGFpbnMgbXVsdGlwbGUgdmFsdWVzXG4gICAgICAgICAgICAgICAgIGMpIGJpbmRkaXNwbGF5bGFiZWwgY29udGFpbnMgc2luZ2xlIHZhbHVlIHdoaWNoIGRvZXMgbm90IG1hdGNoIHdpdGggc2VhcmNoa2V5XG4gICAgICAgICovXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIHRoaXMuc2VhcmNoa2V5ICYmIHRoaXMucXVlcnkgJiYgdGhpcy5kYXRhdmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBiaW5kRGlzcGxheUxhYmVsQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaEtleUFycmF5ID0gXy5zcGxpdCh0aGlzLnNlYXJjaGtleSwgJywnKTtcbiAgICAgICAgICAgIGxldCBkaXNwbGF5bGFiZWw7XG4gICAgICAgICAgICBpZiAodGhpcy5iaW5kZGlzcGxheWxhYmVsKSB7XG4gICAgICAgICAgICAgICAgYmluZERpc3BsYXlMYWJlbEFycmF5ID0gXy5zcGxpdCh0aGlzLmJpbmRkaXNwbGF5bGFiZWwsICcrJyk7XG4gICAgICAgICAgICAgICAgaWYgKGJpbmREaXNwbGF5TGFiZWxBcnJheS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfLmluY2x1ZGVzKGJpbmREaXNwbGF5TGFiZWxBcnJheVswXSwgJ3wnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSAvXFxbKC4qPylcXF0vO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWxhYmVsID0gcmVnZXguZXhlYyhiaW5kRGlzcGxheUxhYmVsQXJyYXlbMF0pWzFdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWxhYmVsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoYmluZERpc3BsYXlMYWJlbEFycmF5Lmxlbmd0aCA+IDEgfHwgKGRpc3BsYXlsYWJlbCAmJiAhXy5pbmNsdWRlcyhzZWFyY2hLZXlBcnJheSwgZGlzcGxheWxhYmVsKSlcbiAgICAgICAgICAgICAgICAgICAgfHwgKHRoaXMuZGlzcGxheWV4cHJlc3Npb24gJiYgIV8uaW5jbHVkZXMoc2VhcmNoS2V5QXJyYXksIHRoaXMuZGlzcGxheWV4cHJlc3Npb24pKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHRoaXMucXVlcnk7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuZ2V0RGF0YVNvdXJjZShxdWVyeSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50Q2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoIV8uaW5jbHVkZXMoWydibHVyJywgJ2ZvY3VzJywgJ3NlbGVjdCcsICdzdWJtaXQnLCAnY2hhbmdlJ10sIGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRDYWxsYmFjaywgbG9jYWxzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGhpZ2hsaWdodCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgZHJvcGRvd24gbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgIHByaXZhdGUgaGlnaGxpZ2h0KG1hdGNoOiBUeXBlYWhlYWRNYXRjaCwgcXVlcnk6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy50eXBlYWhlYWRDb250YWluZXIpIHtcbiAgICAgICAgICAgIC8vIGhpZ2hsaWdodCBvZiBjaGFycyB3aWxsIHdvcmsgb25seSB3aGVuIGxhYmVsIGFyZSBzdHJpbmdzLlxuICAgICAgICAgICAgKG1hdGNoIGFzIGFueSkudmFsdWUgPSBtYXRjaC5pdGVtLmxhYmVsLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlYWhlYWRDb250YWluZXIuaGlnaGxpZ2h0KG1hdGNoLCBxdWVyeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbnNlcnRzIHRoZSBlbGVtZW50IGF0IHRoZSBpbmRleCBwb3NpdGlvblxuICAgIHByaXZhdGUgaW5zZXJ0QXRJbmRleChpKSB7XG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEVsLnByZXBlbmQodGhpcy4kZWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCAkZWxBdEluZGV4ID0gdGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmVxKGkpO1xuICAgICAgICAgICAgaWYgKCRlbEF0SW5kZXgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmVxKGkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5pbnNlcnRBZnRlcih0aGlzLnBhcmVudEVsLmNoaWxkcmVuKCkuZXEoaSAtIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSB3aWRnZXQgaXMgb2YgdHlwZSBhdXRvY29tcGxldGUgaW4gbW9iaWxlIHZpZXcvIGFwcFxuICAgIHB1YmxpYyBpc01vYmlsZUF1dG9Db21wbGV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgJiYgaXNNb2JpbGUoKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgcXVlcnkgaXMgZW50ZXJlZCBpbiB0aGUgaW5wdXQgYW5kIHRoZSB2aWV3IGlzIG5vdCBtb2JpbGVcbiAgICBwdWJsaWMgaXNRdWVyeUVudGVyZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3djbGVhciAmJiB0aGlzLnNob3dDbG9zZWJ0bjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRNb3JlRGF0YShpbmNyZW1lbnRQYWdlPzogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluY3JlYXNlIHRoZSBwYWdlIG51bWJlciBhbmQgdHJpZ2dlciBmb3JjZSBxdWVyeSB1cGRhdGVcbiAgICAgICAgdGhpcy5wYWdlID0gaW5jcmVtZW50UGFnZSA/IHRoaXMucGFnZSArIDEgOiB0aGlzLnBhZ2U7XG5cbiAgICAgICAgdGhpcy5pc1Njcm9sbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gdHJ1ZTtcblxuICAgICAgICAvLyB3aGVuIGludm9raW5nIG5ldyBzZXQgb2YgcmVzdWx0cywgcmVzZXQgdGhlIGxhc3RRdWVyeS5cbiAgICAgICAgaWYgKGluY3JlbWVudFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRyaWdnZXIgdGhlIHR5cGVhaGVhZCBjaGFuZ2UgbWFudWFsbHkgdG8gZmV0Y2ggdGhlIG5leHQgc2V0IG9mIHJlc3VsdHMuXG4gICAgICAgIHRoaXMudHlwZWFoZWFkLm9uSW5wdXQoe1xuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IF8udHJpbSh0aGlzLnF1ZXJ5KSB8fCAnMCcgLy8gZHVtbXkgZGF0YSB0byBub3RpZnkgdGhlIG9ic2VydmFibGVzXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIG9uIGZvY3Vzb3V0LCBzdWJzY3JpYmUgdG8gdGhlIGRhdGF2YWx1ZSBjaGFuZ2VzIGFnYWluXG4gICAgcHJpdmF0ZSBvbkZvY3VzT3V0KCkge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAvLyByZXNldCB0aGUgcGFnZSB2YWx1ZSBvbiBmb2N1c291dC5cbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgICAgLy8gaWYgZG9tVXBkYXRlZCBpcyB0cnVlIHRoZW4gZG8gbm90IGhpZGUgdGhlIGRyb3Bkb3duIGluIHRoZSBmdWxsc2NyZWVuXG4gICAgICAgIGlmICghdGhpcy5fZG9tVXBkYXRlZCAmJiB0aGlzLl9pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gaGlkZSB0aGUgdHlwZWFoZWFkIG9ubHkgYWZ0ZXIgdGhlIGl0ZW0gaXMgc2VsZWN0ZWQgZnJvbSBkcm9wZG93bi5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fdHlwZWFoZWFkLmlzU2hvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgICAgIC8vIG9uIG91dHNpZGUgY2xpY2ssIHR5cGVhaGVhZCBpcyBoaWRkZW4uIFRvIGF2b2lkIHRoaXMsIHdoZW4gZnVsbHNjcmVlbiBpcyBzZXQsIG92ZXJyaWRkaW5nIGlzRm9jdXNlZCBmbGFnIG9uIHRoZSB0eXBlYWhlYWQgY29udGFpbmVyXG4gICAgICAgIGlmICh0aGlzLl9kb21VcGRhdGVkICYmIHRoaXMudHlwZWFoZWFkICYmICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl9jb250YWluZXIuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25JbnB1dENoYW5nZSgkZXZlbnQpIHtcbiAgICAgICAgLy8gcmVzZXQgYWxsIHRoZSBwcmV2aW91cyBwYWdlIGRldGFpbHMgaW4gb3JkZXIgdG8gZmV0Y2ggbmV3IHNldCBvZiByZXN1bHQuXG4gICAgICAgIHRoaXMucmVzdWx0ID0gW107XG4gICAgICAgIHRoaXMucGFnZSA9IDE7XG4gICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSB0aGlzLmlzVXBkYXRlT25LZXlQcmVzcygpO1xuICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gd2hlbiBpbnB1dCBpcyBjbGVhcmVkLCByZXNldCB0aGUgZGF0YXZhbHVlXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5ID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gJyc7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldkRhdGF2YWx1ZSh0aGlzLl9sYXN0UXVlcnkpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLl9tb2RlbEJ5VmFsdWUsIHt9LCB0cnVlKTtcblxuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjbGVhcicsIHsgJGV2ZW50IH0pO1xuXG4gICAgICAgICAgICAvLyB0cmlnZ2VyIG9uU3VibWl0IG9ubHkgd2hlbiB0aGUgc2VhcmNoIGlucHV0IGlzIGNsZWFyZWQgb2ZmIGFuZCBkbyBub3QgdHJpZ2dlciB3aGVuIHRhYiBpcyBwcmVzc2VkLlxuICAgICAgICAgICAgaWYgKCRldmVudCAmJiAkZXZlbnQud2hpY2ggIT09IDkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3N1Ym1pdCcsIHsgJGV2ZW50IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaW52b2tpbmcgY2hhbmdlIGV2ZW50IG9uIGV2ZXJ5IGlucHV0IHZhbHVlIGNoYW5nZS5cbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICRldmVudDogJGV2ZW50LFxuICAgICAgICAgICAgICAgIG5ld1ZhbDogdGhpcy5fbW9kZWxCeVZhbHVlIHx8IHRoaXMucXVlcnksXG4gICAgICAgICAgICAgICAgb2xkVmFsOiAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyZWQgZm9yIGVudGVyIGV2ZW50XG4gICAgcHJpdmF0ZSBoYW5kbGVFbnRlckV2ZW50KCRldmVudCkge1xuICAgICAgICAvLyBzdWJtaXQgZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlcmUgaXMgbm8gc2VhcmNoIHJlc3VsdHNcbiAgICAgICAgaWYgKCFfLmdldCh0aGlzLnR5cGVhaGVhZCwgJ21hdGNoZXMubGVuZ3RoJykpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2hTZWxlY3QoJGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUcmlnZ2VycmVkIHdoZW4gdHlwZWFoZWFkIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICBwcml2YXRlIG9uU2VhcmNoU2VsZWN0KCRldmVudDogRXZlbnQpIHtcbiAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgIC8vIFdNUy0yMjUzMzogQmVmb3JlIGFkZGluZyBhY3RpdmUgdHlwZWFoZWFkIGVsLCBjaGVjayBpZiB0aGUgZW50ZXJlZCBxdWVyeSBtYXRjaGVzIHdpdGggdGhlIGFjdGl2ZSBlbCBvciBub3RcbiAgICAgICAgY29uc3QgaXNRdWVyeU1hdGNoID0gdGhpcy50eXBlYWhlYWRDb250YWluZXI/LmFjdGl2ZT8udmFsdWUgPT09IHRoaXMucXVlcnk7XG5cbiAgICAgICAgaWYgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyICYmIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLmFjdGl2ZSAmJiBpc1F1ZXJ5TWF0Y2gpIHtcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5hY3RpdmUuaXRlbTtcbiAgICAgICAgfVxuICAgICAgICAkZXZlbnQgPSB0aGlzLmV2ZW50RGF0YSgkZXZlbnQsIGl0ZW0gfHwge30pO1xuXG4gICAgICAgIC8vIHNlYXJjaE9uIGlzIHNldCBhcyBvbkJ0bkNsaWNrLCB0aGVuIGludm9rZSB0aGUgc2VhcmNoIGFwaSBjYWxsIG1hbnVhbGx5LlxuICAgICAgICBpZiAoIXRoaXMuaXNVcGRhdGVPbktleVByZXNzKCkpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSB0cnVlO1xuICAgICAgICAgICAgLy8gdHJpZ2dlciB0aGUgdHlwZWFoZWFkIGNoYW5nZSBtYW51YWxseSB0byBmZXRjaCB0aGUgbmV4dCBzZXQgb2YgcmVzdWx0cy5cbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLm9uSW5wdXQoe1xuICAgICAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5xdWVyeSAvLyBkdW1teSBkYXRhIHRvIG5vdGlmeSB0aGUgb2JzZXJ2YWJsZXNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyB3aGVuIG1hdGNoZXMgYXJlIGF2YWlsYWJsZS5cbiAgICAgICAgaWYgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyICYmIHRoaXMubGlFbGVtZW50cy5sZW5ndGggJiYgaXNRdWVyeU1hdGNoKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5zZWxlY3RBY3RpdmVNYXRjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gdGhpcy5xdWVyeTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc3VibWl0JywgeyAkZXZlbnQgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGludm9rZU9uQmVmb3JlU2VydmljZUNhbGwoaW5wdXREYXRhKSB7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlc2VydmljZWNhbGwnLCB7IGlucHV0RGF0YSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRHJvcGRvd25PcGVuKCkge1xuICAgICAgICBpZiAodGhpcy5jbGVhckRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXR0aW5nIHRoZSB1bEVsZW1lbnRzLCBsaUVsZW1lbnQgb24gdHlwZWFoZWFkQ29udGFpbmVyLlxuICAgICAgICAvLyBhcyB3ZSBhcmUgdXNpbmcgY3VzdG9tT3B0aW9uIHRlbXBsYXRlLCBsaUVsZW1lbnRzIGFyZSBub3QgYXZhaWxhYmxlIG9uIHR5cGVhaGVhZENvbnRhaW5lciBzbyBhcHBlbmQgdGhlbSBleHBsaWNpdGx5LlxuICAgICAgICBjb25zdCBmbiA9IF8uZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyID0gdGhpcy50eXBlYWhlYWQuX2NvbnRhaW5lciB8fCAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fdHlwZWFoZWFkLmluc3RhbmNlO1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyIGFzIGFueSkubGlFbGVtZW50cyA9IHRoaXMubGlFbGVtZW50cztcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lciBhcyBhbnkpLnVsRWxlbWVudCA9IHRoaXMudWxFbGVtZW50O1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oJCgndHlwZWFoZWFkLWNvbnRhaW5lcicpLCB0aGlzLm5hdGl2ZUVsZW1lbnQsICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl90eXBlYWhlYWQsICQoJ3R5cGVhaGVhZC1jb250YWluZXIgLmRyb3Bkb3duLW1lbnUnKSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm4oKTtcblxuICAgICAgICAvLyBvcGVuIGZ1bGwtc2NyZWVuIHNlYXJjaCB2aWV3XG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlQXV0b0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyTW9iaWxlQXV0b0NvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkVsID0gdGhpcy5kcm9wZG93bkVsLmNsb3Nlc3QoJ3R5cGVhaGVhZC1jb250YWluZXInKTtcblxuICAgICAgICAgICAgZHJvcGRvd25FbC5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0JykuZmlyc3QoKSk7XG4gICAgICAgICAgICBjb25zdCBzY3JlZW5IZWlnaHQgPSB0aGlzLiRlbGVtZW50LmNsb3Nlc3QoJy5hcHAtY29udGVudCcpLmhlaWdodCgpO1xuICAgICAgICAgICAgZHJvcGRvd25FbC5jc3MoeyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgdG9wOiAwLCBoZWlnaHQ6IHNjcmVlbkhlaWdodCArICdweCcgfSk7XG4gICAgICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9IHRoaXMucXVlcnkgJiYgdGhpcy5xdWVyeSAhPT0gJyc7XG5cbiAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3ROZXh0KCkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy50eXBlYWhlYWRDb250YWluZXIubWF0Y2hlcztcblxuICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IG1hdGNoZXMuaW5kZXhPZih0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5hY3RpdmUpO1xuXG4gICAgICAgIC8vIG9uIGtleWRvd24sIGlmIHNjcm9sbCBpcyBhdCB0aGUgYm90dG9tIGFuZCBuZXh0IHBhZ2UgcmVjb3JkcyBhcmUgYXZhaWxhYmxlLCBmZXRjaCBuZXh0IHBhZ2UgaXRlbXMuXG4gICAgICAgIGlmICghdGhpcy5fbG9hZGluZ0l0ZW1zICYmICF0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlICYmIGluZGV4ICsgMSA+IG1hdGNoZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgLy8gaW5kZXggaXMgc2F2ZWQgaW4gb3JkZXIgdG8gc2VsZWN0IHRoZSBsYXN0U2VsZWN0ZWQgaXRlbSBpbiB0aGUgZHJvcGRvd24gYWZ0ZXIgZmV0Y2hpbmcgbmV4dCBwYWdlIGl0ZW1zLlxuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZURhdGEodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExhc3RBY3RpdmVNYXRjaEFzU2VsZWN0ZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZEluZGV4KSB7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWRDb250YWluZXIgYXMgYW55KS5fYWN0aXZlID0gdGhpcy50eXBlYWhlYWRDb250YWluZXIubWF0Y2hlc1t0aGlzLmxhc3RTZWxlY3RlZEluZGV4XTtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLm5leHRBY3RpdmVNYXRjaCgpO1xuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlclNlYXJjaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UgfHwgIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0eXBlQWhlYWREcm9wRG93biA9IHRoaXMuZHJvcGRvd25FbDtcbiAgICAgICAgY29uc3QgJGxhc3RJdGVtID0gdHlwZUFoZWFkRHJvcERvd24uZmluZCgnbGknKS5sYXN0KCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgbGFzdCBpdGVtIGlzIG5vdCBiZWxvdyB0aGUgZnVsbCBzY3JlZW5cbiAgICAgICAgaWYgKCRsYXN0SXRlbS5sZW5ndGggJiYgdHlwZUFoZWFkRHJvcERvd24ubGVuZ3RoICYmICh0eXBlQWhlYWREcm9wRG93bi5oZWlnaHQoKSArIHR5cGVBaGVhZERyb3BEb3duLnBvc2l0aW9uKCkudG9wID4gJGxhc3RJdGVtLmhlaWdodCgpICsgJGxhc3RJdGVtLnBvc2l0aW9uKCkudG9wKSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZURhdGEodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVXBkYXRlT25LZXlQcmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNob24gPT09ICd0eXBpbmcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVib3VuY2VEZWZhdWx0UXVlcnkoZGF0YSkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nZXREYXRhU291cmNlKGRhdGEsIHRydWUpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFF1ZXJ5ID0gdGhpcy5xdWVyeSA9IHRoaXMucXVlcnlNb2RlbFswXS5sYWJlbCB8fCAnJztcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB0aGlzLnF1ZXJ5TW9kZWxbMF0udmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IHRoaXMucXVlcnlNb2RlbFswXS5rZXk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWFyRGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChfLmdldCgodGhpcy50eXBlYWhlYWQgYXMgYW55KSwgJ190eXBlYWhlYWQuaXNTaG93bicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQnlEYXRhdmFsdWUoZGF0YSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YXNldChkYXRhKTtcbiAgICAgICAgdGhpcy51cGRhdGVCeURhdGFTb3VyY2UoZGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCeURhdGFTb3VyY2UoZGF0YSkge1xuICAgICAgICAvLyB2YWx1ZSBpcyBwcmVzZW50IGJ1dCB0aGUgY29ycmVzcG9uZGluZyBrZXkgaXMgbm90IGZvdW5kIHRoZW4gZmV0Y2ggbmV4dCBzZXRcbiAgICAgICAgLy8gbW9kZWxCeUtleSB3aWxsIGJlIHNldCBvbmx5IHdoZW4gZGF0YXZhbHVlIGlzIGF2YWlsYWJsZSBpbnNpZGUgdGhlIGxvY2FsRGF0YSBvdGhlcndpc2UgbWFrZSBhIE4vdyBjYWxsLlxuICAgICAgICBpZiAoaXNEZWZpbmVkKGRhdGEpICYmICFfLmlzT2JqZWN0KGRhdGEpICYmIHRoaXMuZGF0YXNvdXJjZSAmJiAhaXNEZWZpbmVkKHRoaXMuX21vZGVsQnlLZXkpICYmIHRoaXMuZGF0YWZpZWxkICE9PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkIG1ha2luZyBkZWZhdWx0IHF1ZXJ5IGlmIHF1ZXJ5TW9kZWwgYWxyZWFkeSBleGlzdHMuXG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucXVlcnlNb2RlbCkgJiYgIV8uaXNFbXB0eSh0aGlzLnF1ZXJ5TW9kZWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhdmFsdWVGcm9tUXVlcnlNb2RlbCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFrZSBkZWZhdWx0IHF1ZXJ5IGNhbGwgb25seSB3aGVuIGRhdGFzb3VyY2Ugc3VwcG9ydHMgQ1JVRCAobGl2ZSB2YXJpYWJsZSkuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RlZmF1bHRRdWVyeUludm9rZWQgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfQ1JVRCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYm91bmNlRGVmYXVsdFF1ZXJ5KGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlcyB0aGUgbW9kZWwgdmFsdWUgdXNpbmcgcXVlcnlNb2RlbFxuICAgIHByaXZhdGUgdXBkYXRlRGF0YXZhbHVlRnJvbVF1ZXJ5TW9kZWwoKSB7XG4gICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5xdWVyeU1vZGVsKSkge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gXy5pc0FycmF5KHRoaXMucXVlcnlNb2RlbCkgPyAodGhpcy5xdWVyeU1vZGVsWzBdIGFzIERhdGFTZXRJdGVtKS52YWx1ZSA6IHRoaXMucXVlcnlNb2RlbDtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlLZXkgPSBfLmlzQXJyYXkodGhpcy5xdWVyeU1vZGVsKSA/ICh0aGlzLnF1ZXJ5TW9kZWxbMF0gYXMgRGF0YVNldEl0ZW0pLmtleSA6IHRoaXMucXVlcnlNb2RlbDtcbiAgICAgICAgICAgIHRoaXMudG9CZVByb2Nlc3NlZERhdGF2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQnlEYXRhc2V0KGRhdGE6IGFueSkge1xuICAgICAgICAvLyBkZWZhdWx0IHF1ZXJ5IGlzIGFscmVhZHkgaW52b2tlZCB0aGVuIGRvIG5vdCBtYWtlIG90aGVyIGRlZmF1bHQgcXVlcnkgY2FsbC5cbiAgICAgICAgLy8gRm9yIGxvY2FsIHNlYXJjaCBpLmUuIHNlYXJjaGtleSBpcyB1bmRlZmluZWQsIGRvIG5vdCByZXR1cm4sIHZlcmlmeSB0aGUgZGF0YXZhbHVlIGFnYWluc3QgdGhlIGRhdGFzZXRJdGVtcyAuXG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkICYmIHRoaXMuc2VhcmNoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gXy5maW5kKHRoaXMuZGF0YXNldEl0ZW1zLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChfLmlzT2JqZWN0KGl0ZW0udmFsdWUpID8gXy5pc0VxdWFsKGl0ZW0udmFsdWUsIGRhdGEpIDogKF8udG9TdHJpbmcoaXRlbS52YWx1ZSkpLnRvTG93ZXJDYXNlKCkgPT09IChfLnRvU3RyaW5nKGRhdGEpKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IG9ubHkgd2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gZGF0YXNldC5cbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gW3NlbGVjdGVkSXRlbV07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhZmllbGQgPT09IEFMTEZJRUxEUyAmJiBfLmlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YShleHRyYWN0RGF0YUFzQXJyYXkoZGF0YSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBxdWVyeU1vZGVsIG9ubHkgd2hlbiBwcmV2RGF0YXZhbHVlIGlzIGVxdWFsIHRvIGRhdGFcbiAgICAgICAgICAgIGlmICgodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWUgIT09IGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGF2YWx1ZUZyb21RdWVyeU1vZGVsKCk7XG5cbiAgICAgICAgLy8gU2hvdyB0aGUgbGFiZWwgdmFsdWUgb24gaW5wdXQuXG4gICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHRoaXMucXVlcnkgPSBpc0RlZmluZWQodGhpcy5xdWVyeU1vZGVsKSAmJiB0aGlzLnF1ZXJ5TW9kZWwubGVuZ3RoID8gXy5nZXQodGhpcy5xdWVyeU1vZGVsWzBdLCAnbGFiZWwnKSA6ICcnO1xuICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSBsYXN0IHNlYXJjaCByZXN1bHRzIHRoZW4gb3BlbiBkcm9wZG93biBvbiBmb2N1c1xuICAgIHByaXZhdGUgaGFuZGxlRm9jdXMoJGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzZWFyY2gnICYmIHRoaXMucXVlcnkgPT09IHRoaXMuX2xhc3RRdWVyeSAmJiB0aGlzLl9sYXN0UmVzdWx0KSB7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5rZXlVcEV2ZW50RW1pdHRlci5lbWl0KHRoaXMucXVlcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeVN1YnNjcmliZXIoKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoJy5hcHAtY29tcG9zaXRlLXdpZGdldC5jYXB0aW9uLWZsb2F0aW5nJyk7XG4gICAgICAgIGlmIChwYXJlbnRFbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ2NhcHRpb25Qb3NpdGlvbkFuaW1hdGUnLCB7ZGlzcGxheVZhbDogdHJ1ZSwgbmF0aXZlRWw6IHBhcmVudEVsfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHByb3ZpZGVzIHRoZSBmaWx0ZXJlZCBkYXRhIGZyb20gdGhlIGRhdGFzb3VyY2UuXG4gICAgcHVibGljIGdldERhdGFTb3VyY2UocXVlcnk6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcsIHNlYXJjaE9uRGF0YUZpZWxkPzogYm9vbGVhbiwgbmV4dEl0ZW1JbmRleD86IG51bWJlcik6IFByb21pc2U8RGF0YVNldEl0ZW1bXT4ge1xuICAgICAgICAvLyBGb3IgZGVmYXVsdCBxdWVyeSwgc2VhcmNoT25EYXRhRmllbGQgaXMgc2V0IHRvIHRydWUsIHRoZW4gZG8gbm90IG1ha2UgYSBuL3cgY2FsbCB3aGVuIGRhdGFmaWVsZCBpcyBBTExGSUVMRFNcbiAgICAgICAgaWYgKHNlYXJjaE9uRGF0YUZpZWxkICYmIHRoaXMuZGF0YWZpZWxkID09PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3IgZGVmYXVsdCBkYXRhdmFsdWUsIHNlYXJjaCBrZXkgYXMgdG8gYmUgb24gZGF0YWZpZWxkIHRvIGdldCB0aGUgZGVmYXVsdCBkYXRhIGZyb20gdGhlIGZpbHRlciBjYWxsLlxuICAgICAgICBjb25zdCBkYXRhQ29uZmlnOiBJRGF0YVByb3ZpZGVyQ29uZmlnID0ge1xuICAgICAgICAgICAgZGF0YXNldDogdGhpcy5kYXRhc2V0ID8gY29udmVydERhdGFUb09iamVjdCh0aGlzLmRhdGFzZXQpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYmluZGRhdGFzZXQ6IHRoaXMuYmluZGRhdGFzZXQsXG4gICAgICAgICAgICBkYXRhc291cmNlOiB0aGlzLmRhdGFzb3VyY2UsXG4gICAgICAgICAgICBkYXRhZmllbGQ6IHRoaXMuZGF0YWZpZWxkLFxuICAgICAgICAgICAgaGFzRGF0YTogdGhpcy5kYXRhc2V0ICYmIHRoaXMuZGF0YXNldC5sZW5ndGgsXG4gICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICBpc0xvY2FsRmlsdGVyOiAhdGhpcy5zZWFyY2hrZXksXG4gICAgICAgICAgICBzZWFyY2hLZXk6IHNlYXJjaE9uRGF0YUZpZWxkID8gdGhpcy5kYXRhZmllbGQgOiB0aGlzLnNlYXJjaGtleSxcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgc2VhcmNoIGNhbGwgbWF0Y2ggbW9kZSBzaG91bGQgYmUgc3RhcnRpZ25vcmVjYXNlXG4gICAgICAgICAgICBtYXRjaE1vZGU6IHNlYXJjaE9uRGF0YUZpZWxkID8gJ3N0YXJ0aWdub3JlY2FzZScgOiB0aGlzLm1hdGNobW9kZSxcbiAgICAgICAgICAgIGNhc2VzZW5zaXRpdmU6IHRoaXMuY2FzZXNlbnNpdGl2ZSxcbiAgICAgICAgICAgIGlzZm9ybWZpZWxkOiB0aGlzLmlzZm9ybWZpZWxkLFxuICAgICAgICAgICAgb3JkZXJieTogdGhpcy5vcmRlcmJ5LFxuICAgICAgICAgICAgbGltaXQ6IHRoaXMubGltaXQsXG4gICAgICAgICAgICBwYWdlc2l6ZTogdGhpcy5wYWdlc2l6ZSxcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgIG9uQmVmb3Jlc2VydmljZWNhbGw6IHRoaXMuaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbC5iaW5kKHRoaXMpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YW9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRhdGFDb25maWcuZGF0YW9wdGlvbnMgPSB0aGlzLmRhdGFvcHRpb25zO1xuICAgICAgICAgICAgZGF0YUNvbmZpZy52aWV3UGFyZW50ID0gdGhpcy52aWV3UGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXIuZmlsdGVyKGRhdGFDb25maWcpXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHJlc3BvbnNlIGZyb20gZGF0YVByb3ZpZGVyIHJldHVybnMgYWx3YXlzIGRhdGEgb2JqZWN0LlxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UuZGF0YSB8fCByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAvLyBmb3Igc2VydmljZSB2YXJpYWJsZSwgdXBkYXRpbmcgdGhlIGRhdGFzZXQgb25seSBpZiBpdCBpcyBub3QgZGVmaW5lZCBvciBlbXB0eVxuICAgICAgICAgICAgICAgIGlmICgoIWlzRGVmaW5lZCh0aGlzLmRhdGFzZXQpIHx8ICF0aGlzLmRhdGFzZXQubGVuZ3RoKSAmJiB0aGlzLmRhdGFQcm92aWRlci51cGRhdGVEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNldCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlci5oYXNNb3JlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGFzZXQgPSB0aGlzLmZvcm1hdHRlZERhdGFzZXQuY29uY2F0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGFzZXQgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBleHBsaWNpdGx5IHNldHRpbmcgdGhlIG9wdGlvbnNsaW1pdCBhcyB0aGUgbWF0Y2hlcyBtb3JlIHRoYW4gMjAgd2lsbCBiZSBpZ25vcmVkIGlmIG9wdGlvbnNsaW1pdCBpcyBub3Qgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1hdHRlZERhdGFzZXQubGVuZ3RoID4gMjAgJiYgIWlzRGVmaW5lZCh0aGlzLmxpbWl0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC50eXBlYWhlYWRPcHRpb25zTGltaXQgPSB0aGlzLmZvcm1hdHRlZERhdGFzZXQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEluIG1vYmlsZSwgdHJpZ2dlciB0aGUgc2VhcmNoIGJ5IGRlZmF1bHQgdW50aWwgdGhlIHJlc3VsdHMgaGF2ZSBoZWlnaHQgdXB0byBwYWdlIGhlaWdodC4gT3RoZXIgcmVzdWx0cyBjYW4gYmUgZmV0Y2hlZCBieSBzY3JvbGxpbmdcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNPcGVuICYmIHRoaXMuaXNNb2JpbGVBdXRvQ29tcGxldGUoKSAmJiAhXy5pc1VuZGVmaW5lZCh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YSh0aGlzLmZvcm1hdHRlZERhdGFzZXQsIG5leHRJdGVtSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVzdWx0IGNvbnRhaW5zIHRoZSBkYXRhZmllbGQgdmFsdWVzLlxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gXy5tYXAodHJhbnNmb3JtZWREYXRhLCAndmFsdWUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhO1xuICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAoXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExhc3RBY3RpdmVNYXRjaEFzU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMzApKSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBubyByZXN1bHQgaXMgZm91bmQsIHNldCB0aGUgZGF0YXZhbHVlIHRvIHVuZGVmaW5lZC5cbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSAocXVlcnkgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gb24gZm9jdXNvdXQgaS5lLiBvbiBvdGhlciB3aWRnZXQgZm9jdXMsIGlmIG4vdyBpcyBwZW5kaW5nIGxvYWRpbmcgaWNvbiBpcyBzaG93biwgd2hlbiBkYXRhIGlzIGF2YWlsYWJsZSB0aGVuIGRyb3Bkb3duIGlzIHNob3duIGFnYWluLlxuICAgICAgICAgICAgICAgIC8vIG9uIHVuc3Vic2NyaWJpbmcgZG8gbm90IHNob3cgdGhlIHJlc3VsdHMuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Vuc3Vic2NyaWJlRHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBhcmVudCBjb250ZXh0IGkuZS4gUGFnZSBjb250ZXh0IGFuZCBub3QgcGFyZW50IGNvbXBvbmVudCdzIGNvbnRleHQuXG4gICAgcHJpdmF0ZSBnZXRDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgXy5nZXQoY29udGV4dCwgJ3dpZGdldCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250ZXh0KGNvbnRleHQudmlld1BhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRyYW5zZm9ybWVkRGF0YShkYXRhOiBhbnksIGl0ZW1JbmRleD86IG51bWJlciwgaXNjdXN0b20/OiBib29sZWFuKTogRGF0YVNldEl0ZW1bXSB7XG4gICAgICAgIGlmIChpc0RlZmluZWQoaXRlbUluZGV4KSkge1xuICAgICAgICAgICAgaXRlbUluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0cmFuc2Zvcm1Gb3JtRGF0YShcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udGV4dCh0aGlzLnZpZXdQYXJlbnQpLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHRoaXMuZGF0YWZpZWxkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5kaXNwbGF5bGFiZWwgfHwgdGhpcy5kaXNwbGF5ZmllbGQsXG4gICAgICAgICAgICAgICAgZGlzcGxheUV4cHI6IGlzY3VzdG9tID8gJycgOiB0aGlzLmRpc3BsYXlleHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGJpbmREaXNwbGF5RXhwcjogaXNjdXN0b20gPyAnJyA6IHRoaXMuYmluZGRpc3BsYXlsYWJlbCxcbiAgICAgICAgICAgICAgICBiaW5kRGlzcGxheUltZ1NyYzogdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlJbWdTcmM6IHRoaXMuZGlzcGxheWltYWdlc3JjXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXRlbUluZGV4LFxuICAgICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZ2V0VW5pcU9ianNCeURhdGFGaWVsZCh0cmFuc2Zvcm1lZERhdGEsIHRoaXMuZGF0YWZpZWxkLCB0aGlzLmRpc3BsYXlmaWVsZCB8fCB0aGlzLmRpc3BsYXlsYWJlbCwgdG9Cb29sZWFuKHRoaXMuYWxsb3dlbXB0eSkpO1xuICAgIH1cblxuICAgIC8vIE9wdGlvbnNMaXN0VGVtcGxhdGUgbGlzdGVucyB0byB0aGUgc2Nyb2xsIGV2ZW50IGFuZCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLlxuICAgIHB1YmxpYyBvblNjcm9sbCgkc2Nyb2xsRWw6IEVsZW1lbnQsIGV2dDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSAkc2Nyb2xsRWwuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gJHNjcm9sbEVsLmNsaWVudEhlaWdodDtcblxuICAgICAgICAvLyBJZiBzY3JvbGwgaXMgYXQgdGhlIGJvdHRvbSBhbmQgbm8gcmVxdWVzdCBpcyBpbiBwcm9ncmVzcyBhbmQgbmV4dCBwYWdlIHJlY29yZHMgYXJlIGF2YWlsYWJsZSwgZmV0Y2ggbmV4dCBwYWdlIGl0ZW1zLlxuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmdJdGVtcyAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSAmJiAoJHNjcm9sbEVsLnNjcm9sbFRvcCArIGNsaWVudEhlaWdodCA+PSB0b3RhbEhlaWdodCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmVEYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIGlmICghaXNEZWZpbmVkKHRoaXMubWluY2hhcnMpKSB7XG4gICAgICAgICAgICAvLyBmb3IgYXV0b2NvbXBsZXRlIHNldCB0aGUgbWluY2hhcnMgdG8gMFxuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbmNoYXJzID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5taW5jaGFycyA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gdGhpcy5pc1VwZGF0ZU9uS2V5UHJlc3MoKTtcblxuICAgICAgICAvLyBieSBkZWZhdWx0IGZvciBhdXRvY29tcGxldGUgZG8gbm90IHNob3cgdGhlIHNlYXJjaCBpY29uXG4gICAgICAgIC8vIGJ5IGRlZmF1bHQgc2hvdyB0aGUgc2VhcmNoaWNvbiBmb3IgdHlwZSA9IHNlYXJjaFxuICAgICAgICB0aGlzLnNob3dzZWFyY2hpY29uID0gaXNEZWZpbmVkKHRoaXMuc2hvd3NlYXJjaGljb24pID8gdGhpcy5zaG93c2VhcmNoaWNvbiA6ICh0aGlzLnR5cGUgPT09ICdzZWFyY2gnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LCB0aGlzKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJUYXJnZXQgPSBnZXRDb250YWluZXJUYXJnZXRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXZlbnREYXRhKCRldmVudCwgaXRlbSkge1xuICAgICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAkZXZlbnRbJ2RhdGEnXSA9IHtcbiAgICAgICAgICAgICAgICBpdGVtICA6IGl0ZW0uZGF0YU9iamVjdCxcbiAgICAgICAgICAgICAgICBtb2RlbCA6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgbGFiZWwgOiBpdGVtLmxhYmVsLFxuICAgICAgICAgICAgICAgIHF1ZXJ5IDogdGhpcy5xdWVyeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAkZXZlbnQ7XG4gICAgfVxuXG4gICAgLy8gdHJpZ2dlcmVkIG9uIHNlbGVjdCBvbiBvcHRpb24gZnJvbSB0aGUgbGlzdC4gU2V0IHRoZSBxdWVyeU1vZGVsLCBxdWVyeSBhbmQgbW9kZWxCeUtleSBmcm9tIHRoZSBtYXRjaGVkIGl0ZW0uXG4gICAgcHVibGljIHR5cGVhaGVhZE9uU2VsZWN0KG1hdGNoOiBUeXBlYWhlYWRNYXRjaCwgJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gbWF0Y2guaXRlbTtcbiAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gaXRlbTtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucXVlcnkgPSBpdGVtLmxhYmVsO1xuICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgICAgICRldmVudCA9ICRldmVudCB8fCB0aGlzLiR0eXBlYWhlYWRFdmVudDtcblxuICAgICAgICAvLyBBcyBpdGVtLmtleSBjYW4gdmFyeSBmcm9tIGtleSBpbiB0aGUgZGF0YXNldEl0ZW1zXG4gICAgICAgIHRoaXMuX21vZGVsQnlLZXkgPSBpdGVtLmtleTtcbiAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gaXRlbS52YWx1ZTtcblxuICAgICAgICAkZXZlbnQgPSB0aGlzLmV2ZW50RGF0YSgkZXZlbnQsIGl0ZW0pO1xuXG4gICAgICAgIHRoaXMuaW52b2tlT25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsICRldmVudCB8fCB7fSk7XG4gICAgICAgIC8vIHVwZGF0aW5nIHRoZSB2YXJpYWJsZSBib3VuZCB0byBkZWZhdWx0IHZhbHVlIGFzIGludm9rZU9uQ2hhbmdlIGlzIG5vdCB1cGRhdGluZyB0aGUgdmFyaWFibGUuXG4gICAgICAgIGlmICh0aGlzLmRhdGF2YWx1ZSAhPT0gKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kVmFyaWFibGUodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlU2VhcmNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCB7ICRldmVudCwgc2VsZWN0ZWRWYWx1ZTogdGhpcy5kYXRhdmFsdWUgfSk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc3VibWl0JywgeyAkZXZlbnQgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVQcmV2RGF0YXZhbHVlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdjogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgZnJvbSAxMC4zLjEgdG8gMTAuMy4yXG4gICAgICAgIC8vIDEwLjMuMSB3ZSBoYWQgZGlzcGxheWxhYmVsIGFzIG1vZGFsIHZhbHVlXG4gICAgICAgIC8vIEZyb20gMTAuMy4yIG9ud29yZHMgd2Ugd2lsbCBiZSBoYXZpbmcgZGlzcGxheWV4cHJlc2lvbiBhcyBtb2RhbCB2YWx1ZVxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnYXV0b2NvbXBsZXRlJyAmJiBrZXkgPT09ICdkaXNwbGF5bGFiZWwnICYmIHRoaXMuZGlzcGxheWxhYmVsICYmICghdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbiB8fCAodGhpcy5kaXNwbGF5ZXhwcmVzc2lvbiAmJiAhdGhpcy5kYXRhc291cmNlKSkpICB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlleHByZXNzaW9uID0gdGhpcy5kaXNwbGF5bGFiZWw7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlsYWJlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdoZW4gZGF0YW9wdGlvbnMgYXJlIHByb3ZpZGVkIGFuZCB0aGVyZSBpcyBubyBkaXNwbGF5bGFiZWwgZ2l2ZW4gdGhlbiBkaXNwbGF5bGFiZWwgaXMgc2V0IGFzIHRoZSByZWxhdGVkZmllbGRcbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc3BsYXlsYWJlbCcgJiYgdGhpcy5kYXRhb3B0aW9ucyAmJiB0aGlzLmJpbmRkaXNwbGF5bGFiZWwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnkgPSBfLmdldCh0aGlzLl9tb2RlbEJ5VmFsdWUsIG52KSB8fCB0aGlzLl9tb2RlbEJ5VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHNlYXJjaCBpcyBkaXNhYmxlZCwgZG8gbm90IGxvYWQgYW55IG1vcmUgZGF0YSBvciBqdXN0IGNsZWFyIHRoZSBkYXRhIHRoYXQgaXMgYWxyZWFkeSBpbiBwcm9jZXNzIG9yIGxvYWRlZC5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgICAgICAgaWYgKG52ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEYXRhID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoXy5nZXQoKHRoaXMudHlwZWFoZWFkIGFzIGFueSksICdfdHlwZWFoZWFkLmlzU2hvd24nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNjdXN0b21JdGVtVGVtcGxhdGUgbGV0LW1vZGVsPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXF1ZXJ5PVwicXVlcnlcIiBsZXQtbWF0Y2g9XCJtYXRjaFwiPlxuICAgIDwhLS0gRGVmYXVsdCBpdGVtIHRlbXBsYXRlIC0tPlxuICAgIDxhICpuZ0lmPVwiIWNvbnRlbnRcIj5cbiAgICAgICAgPGltZyAqbmdJZj1cIm1vZGVsLmltZ1NyY1wiIFtzcmNdPVwibW9kZWwuaW1nU3JjXCIgYWx0PVwiU2VhcmNoXCIgW3N0eWxlLndpZHRoXT1cImltYWdld2lkdGhcIj5cbiAgICAgICAgPHNwYW4gW3RpdGxlXT1cIm1vZGVsLmxhYmVsXCIgW2lubmVySHRtbF09XCJoaWdobGlnaHQobWF0Y2gsIHF1ZXJ5KSB8fCBtb2RlbC5sYWJlbFwiPjwvc3Bhbj5cbiAgICA8L2E+XG4gICAgPCEtLSBDdXN0b20gcGFydGlhbCB0ZW1wbGF0ZSAtLT5cbiAgICA8YSAqbmdJZj1cImNvbnRlbnRcIiBbbmdDbGFzc109XCJ7Y3VzdG9tVGVtcGxhdGU6IGNvbnRlbnR9XCIgcGFydGlhbENvbnRhaW5lciBbd21JdGVtVGVtcGxhdGVdPVwiY29udGVudFwiIFt1c2VyQ29tcG9uZW50UGFyYW1zXT1cIm1hdGNoLml0ZW1cIj5cbiAgICAgICAgPGRpdiBwYXJ0aWFsLWNvbnRhaW5lci10YXJnZXQ+PC9kaXY+XG4gICAgPC9hPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjdXN0b21MaXN0VGVtcGxhdGUgbGV0LW1hdGNoZXM9XCJtYXRjaGVzXCIgbGV0LWl0ZW1UZW1wbGF0ZT1cIml0ZW1UZW1wbGF0ZVwiIGxldC1xdWVyeT1cInF1ZXJ5XCI+XG4gICAgPHVsICN1bEVsZW1lbnQgY2xhc3M9XCJhcHAtc2VhcmNoIGRyb3Bkb3duLW1lbnVcIiBzY3JvbGxhYmxlPlxuICAgICAgICA8bGkgI2xpRWxlbWVudHMgKm5nRm9yPVwibGV0IG1hdGNoIG9mIG1hdGNoZXNcIiBbbmdDbGFzc109XCJ7YWN0aXZlOiB0eXBlYWhlYWRDb250YWluZXIgJiYgdHlwZWFoZWFkQ29udGFpbmVyLmlzQWN0aXZlKG1hdGNoKSwgJ2xpc3QtZ3JvdXAtaGVhZGVyJzogbWF0Y2ggJiYgbWF0Y2guaXNIZWFkZXIoKX1cIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwidHlwZWFoZWFkQ29udGFpbmVyLnNlbGVjdEFjdGl2ZShtYXRjaCk7XCJcbiAgICAgICAgICAgIChjbGljayk9XCJtYXRjaCAmJiAhbWF0Y2guaXNIZWFkZXIoKSAmJiB0eXBlYWhlYWRDb250YWluZXIuc2VsZWN0TWF0Y2gobWF0Y2gsICRldmVudCk7ICR0eXBlYWhlYWRFdmVudCA9ICRldmVudDsgbm90aWZ5U3Vic2NyaWJlcigpO1wiPlxuICAgICAgICAgICAgPCEtLSBpdGVtVGVtcGxhdGUgY29tZXMgZnJvbSB0aGUgPGlucHV0PiAtLT5cbiAgICAgICAgICAgIDxoNCAqbmdJZj1cIm1hdGNoLmlzSGVhZGVyKClcIiBjbGFzcz1cImdyb3VwLXRpdGxlXCI+e3ttYXRjaC52YWx1ZX19PC9oND5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbWF0Y2guaXNIZWFkZXIoKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogbWF0Y2guaXRlbSwgaW5kZXg6IGksIG1hdGNoOiBtYXRjaCwgcXVlcnk6IHF1ZXJ5fVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXNcIiBbaGlkZGVuXT1cIl9sb2FkaW5nSXRlbXMgfHwgIShkYXRhY29tcGxldGVtc2cgJiYgZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpXCI+XG4gICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwiZGF0YWNvbXBsZXRlbXNnXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiIFtoaWRkZW5dPVwiIV9sb2FkaW5nSXRlbXNcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2lyY2xlLW8tbm90Y2ggZmEtc3BpblwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJsb2FkaW5nZGF0YW1zZ1wiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS1UaGlzIHRlbXBsYXRlIGlzIGZvciBzZWFyY2ggaW5zaWRlIG1vYmlsZSBuYXZiYXIuLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwibmF2c2VhcmNoYmFyOyBlbHNlIHNlYXJjaFRlbXBsYXRlXCI+XG4gICAgPGlucHV0IFt0aXRsZV09XCJxdWVyeSB8fCAnJ1wiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhcHAtdGV4dGJveCBmb3JtLWNvbnRyb2wgbGlzdC1vZi1vYmpzIGFwcC1zZWFyY2gtaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICBmb2N1cy10YXJnZXRcbiAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIFsobmdNb2RlbCldPVwicXVlcnlcIlxuICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICBbdHlwZWFoZWFkXT1cInR5cGVhaGVhZERhdGFTb3VyY2VcIlxuICAgICAgICAgICBbdHlwZWFoZWFkV2FpdE1zXT1cImRlYm91bmNldGltZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRJdGVtVGVtcGxhdGVdPVwiY3VzdG9tSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgW29wdGlvbnNMaXN0VGVtcGxhdGVdPVwiY3VzdG9tTGlzdFRlbXBsYXRlXCJcbiAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIChrZXlkb3duKT1cImxpc3RlblF1ZXJ5ID0gdHJ1ZVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiR0eXBlYWhlYWRFdmVudCA9ICRldmVudDtoYW5kbGVFbnRlckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwic2VsZWN0TmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgKGJsdXIpPVwiaW52b2tlT25Ub3VjaGVkKCRldmVudClcIlxuICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRm9jdXMoJGV2ZW50KTtcIlxuICAgICAgICAgICAoZm9jdXMpPVwiX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTsgbGlzdGVuUXVlcnkgPSB0cnVlOyBoYW5kbGVGb2N1cygkZXZlbnQpOyBpbnZva2VPbkZvY3VzKCRldmVudCk7XCJcbiAgICAgICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoKVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRNaW5MZW5ndGhdPVwibWluY2hhcnNcIlxuICAgICAgICAgICBbdHlwZWFoZWFkT3B0aW9uc0xpbWl0XT1cImxpbWl0XCJcbiAgICAgICAgICAgKHR5cGVhaGVhZExvYWRpbmcpPVwiX2xvYWRpbmdJdGVtc1wiXG4gICAgICAgICAgICh0eXBlYWhlYWRPblNlbGVjdCk9XCJ0eXBlYWhlYWRPblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgdHlwZWFoZWFkT3B0aW9uRmllbGQ9XCJsYWJlbFwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRHcm91cEZpZWxkXT1cImdyb3VwYnkgPyAnZ3JvdXBieScgOiBudWxsXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZEFzeW5jXT1cInRydWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkU2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZE9wdGlvbnNJblNjcm9sbGFibGVWaWV3XT1cIm9wdGlvbnNsaW1pdGluc2Nyb2xsYWJsZXZpZXdcIlxuICAgICAgICAgICBbZHJvcHVwXT1cImRyb3B1cFwiXG4gICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaGludCB8fCAnU2VhcmNoIGZpZWxkJ1wiLz5cbiAgICA8aSBjbGFzcz1cImJ0bi1jbG9zZSB3aSB3aS1jYW5jZWxcIiBbaGlkZGVuXT1cIiFzaG93Q2xvc2VidG5cIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50KTtcIj48L2k+XG48L25nLWNvbnRhaW5lcj5cbjwhLS1UaGlzIHRlbXBsYXRlIGlzIGZvciBib3RoIHdlYiBhbmQgZnVsbHNjcmVlbiBtb2RlIGluIG1vYmlsZS4tLT5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoVGVtcGxhdGU+XG4gICAgPHNwYW4gY2xhc3M9XCJ3aSB3aS1hcnJvdy1sZWZ0IGZvcm0tY29udHJvbC1mZWVkYmFjayBiYWNrLWJ0blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIChjbGljayk9XCJjbG9zZVNlYXJjaCgpXCI+PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkJhY2sgYnV0dG9uPC9zcGFuPlxuICAgIDxpbnB1dCBbdGl0bGVdPVwicXVlcnkgfHwgJydcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYXBwLXRleHRib3ggZm9ybS1jb250cm9sIGxpc3Qtb2Ytb2JqcyBhcHAtc2VhcmNoLWlucHV0XCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICAgICAgICAgZm9jdXMtdGFyZ2V0XG4gICAgICAgICAgIFtjb250YWluZXJdPVwiY29udGFpbmVyVGFyZ2V0IHx8ICdib2R5J1wiXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIFsobmdNb2RlbCldPVwicXVlcnlcIlxuICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICBbdHlwZWFoZWFkXT1cInR5cGVhaGVhZERhdGFTb3VyY2VcIlxuICAgICAgICAgICBbdHlwZWFoZWFkV2FpdE1zXT1cImRlYm91bmNldGltZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRJdGVtVGVtcGxhdGVdPVwiY3VzdG9tSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgW29wdGlvbnNMaXN0VGVtcGxhdGVdPVwiY3VzdG9tTGlzdFRlbXBsYXRlXCJcbiAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIChrZXlkb3duKT1cImxpc3RlblF1ZXJ5ID0gdHJ1ZVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiR0eXBlYWhlYWRFdmVudCA9ICRldmVudDtoYW5kbGVFbnRlckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwic2VsZWN0TmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgKGJsdXIpPVwiaW52b2tlT25Ub3VjaGVkKCRldmVudCk7IG9uRm9jdXNPdXQoKVwiXG4gICAgICAgICAgIChjbGljayk9XCJoYW5kbGVGb2N1cygkZXZlbnQpO1wiXG4gICAgICAgICAgIChmb2N1cyk9XCJfdW5zdWJzY3JpYmVEdiA9IGZhbHNlOyBsaXN0ZW5RdWVyeSA9IHRydWU7IGhhbmRsZUZvY3VzKCRldmVudCk7IGludm9rZU9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRNaW5MZW5ndGhdPVwibWluY2hhcnNcIlxuICAgICAgICAgICBbdHlwZWFoZWFkT3B0aW9uc0xpbWl0XT1cImxpbWl0XCJcbiAgICAgICAgICAgKHR5cGVhaGVhZExvYWRpbmcpPVwiX2xvYWRpbmdJdGVtc1wiXG4gICAgICAgICAgICh0eXBlYWhlYWRPblNlbGVjdCk9XCJ0eXBlYWhlYWRPblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgdHlwZWFoZWFkT3B0aW9uRmllbGQ9XCJsYWJlbFwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRHcm91cEZpZWxkXT1cImdyb3VwYnkgPyAnZ3JvdXBieScgOiBudWxsXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZEFzeW5jXT1cInRydWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkU2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZE9wdGlvbnNJblNjcm9sbGFibGVWaWV3XT1cIm9wdGlvbnNsaW1pdGluc2Nyb2xsYWJsZXZpZXdcIlxuICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICBbZHJvcHVwXT1cImRyb3B1cFwiXG4gICAgICAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaGludCB8fCAnU2VhcmNoIGZpZWxkJ1wiPlxuICAgIDxpbnB1dCBjbGFzcz1cIm1vZGVsLWhvbGRlclwiIG5nLW1vZGVsPVwicHJveHlNb2RlbFwiIG5nLXJlcXVpcmVkPVwicmVxdWlyZWRcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJfbG9hZGluZ0l0ZW1zXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJmYSBmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluIGZvcm0tY29udHJvbC1mZWVkYmFja1wiPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cIndpIHdpLWNsb3NlIGZvcm0tY29udHJvbC1mZWVkYmFjayBjbGVhci1idG5cIiBbbmdDbGFzc109XCJ7J3Nob3ctYnRuJzogaXNRdWVyeUVudGVyZWQoKX1cIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50LCB0cnVlKVwiPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbGVhciBidXR0b248L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJzaG93c2VhcmNoaWNvblwiIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIiBhcmlhLWxhYmVsPVwic2VhcmNoIGljb25cIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogZGlzYWJsZWR9XCI+XG4gICAgICAgIDxmb3JtPlxuICAgICAgICAgICAgPGJ1dHRvbiB0aXRsZT1cIlNlYXJjaFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIGNsYXNzPVwiYXBwLXNlYXJjaC1idXR0b24gd20tc2wtbCBzbC1zZWFyY2hcIiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VhcmNoU2VsZWN0KCRldmVudClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, Attribute,
|
|
2
|
+
import { Component, Attribute, ViewChild, ViewChildren, ElementRef, Directive, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1$1 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import * as i2 from '@angular/forms';
|
|
@@ -511,11 +511,10 @@ class SearchComponent extends DatasetAwareFormComponent {
|
|
|
511
511
|
const data = this.datavalue || this.toBeProcessedDatavalue;
|
|
512
512
|
this.updateByDatavalue(data);
|
|
513
513
|
}
|
|
514
|
-
constructor(inj, app, binddatavalue, binddataset
|
|
515
|
-
super(inj, WIDGET_CONFIG
|
|
514
|
+
constructor(inj, app, binddatavalue, binddataset) {
|
|
515
|
+
super(inj, WIDGET_CONFIG);
|
|
516
516
|
this.binddatavalue = binddatavalue;
|
|
517
517
|
this.binddataset = binddataset;
|
|
518
|
-
this._viewParent = _viewParent;
|
|
519
518
|
this.query = '';
|
|
520
519
|
this.page = 1;
|
|
521
520
|
// this flag will not allow the empty datafield values.
|
|
@@ -1184,7 +1183,7 @@ class SearchComponent extends DatasetAwareFormComponent {
|
|
|
1184
1183
|
}
|
|
1185
1184
|
}
|
|
1186
1185
|
SearchComponent.initializeProps = registerProps();
|
|
1187
|
-
SearchComponent.ɵfac = function SearchComponent_Factory(t) { return new (t || SearchComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵinjectAttribute('datavalue.bind'), i0.ɵɵinjectAttribute('dataset.bind')
|
|
1186
|
+
SearchComponent.ɵfac = function SearchComponent_Factory(t) { return new (t || SearchComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵinjectAttribute('datavalue.bind'), i0.ɵɵinjectAttribute('dataset.bind')); };
|
|
1188
1187
|
SearchComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchComponent, selectors: [["", "wmSearch", ""]], viewQuery: function SearchComponent_Query(rf, ctx) {
|
|
1189
1188
|
if (rf & 1) {
|
|
1190
1189
|
i0.ɵɵviewQuery(TypeaheadDirective, 5);
|
|
@@ -1229,8 +1228,6 @@ SearchComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchCompo
|
|
|
1229
1228
|
}] }, { type: undefined, decorators: [{
|
|
1230
1229
|
type: Attribute,
|
|
1231
1230
|
args: ['dataset.bind']
|
|
1232
|
-
}] }, { type: i1.UserDefinedExecutionContext, decorators: [{
|
|
1233
|
-
type: Optional
|
|
1234
1231
|
}] }];
|
|
1235
1232
|
}, { typeahead: [{
|
|
1236
1233
|
type: ViewChild,
|