@wavemaker/app-ng-runtime 11.8.0-next.24904 → 11.8.0-next.27301
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/build-task/bundles/index.umd.js +5 -5
- app-ng-runtime/build-task/esm2022/basic/progress/progress-bar/progress-bar.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/page/page.build.mjs +3 -2
- app-ng-runtime/build-task/fesm2022/index.mjs +2 -1
- app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/carousel/bundles/index.umd.js +5 -5
- app-ng-runtime/components/advanced/carousel/esm2022/carousel.animator.mjs +3 -2
- app-ng-runtime/components/advanced/carousel/esm2022/carousel.directive.mjs +1 -1
- app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs +2 -1
- app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/login/bundles/index.umd.js +6 -6
- app-ng-runtime/components/advanced/login/esm2022/login.component.mjs +4 -3
- app-ng-runtime/components/advanced/login/fesm2022/index.mjs +3 -2
- app-ng-runtime/components/advanced/login/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/base/bundles/index.umd.js +203 -171
- app-ng-runtime/components/base/esm2022/directives/show-in-device.directive.mjs +1 -1
- app-ng-runtime/components/base/esm2022/pipes/custom-pipes.mjs +12 -11
- app-ng-runtime/components/base/esm2022/pipes/wm-pipe.mjs +3 -2
- app-ng-runtime/components/base/esm2022/utils/data-utils.mjs +30 -29
- app-ng-runtime/components/base/esm2022/utils/form-utils.mjs +47 -41
- app-ng-runtime/components/base/esm2022/utils/live-utils.mjs +8 -7
- app-ng-runtime/components/base/esm2022/utils/widget-utils.mjs +28 -27
- app-ng-runtime/components/base/esm2022/widgets/common/base/base-container.component.mjs +4 -3
- app-ng-runtime/components/base/esm2022/widgets/common/base/base-field-validations.mjs +24 -21
- app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +12 -11
- app-ng-runtime/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +40 -14
- app-ng-runtime/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +3 -2
- app-ng-runtime/components/base/esm2022/widgets/common/dialog/dialog.service.mjs +3 -2
- app-ng-runtime/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +1 -1
- app-ng-runtime/components/base/esm2022/widgets/common/partial/partial.directive.mjs +3 -2
- app-ng-runtime/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +3 -2
- app-ng-runtime/components/base/esm2022/widgets/common/smooth-scroll/smooth-scroll.directive.mjs +6 -5
- app-ng-runtime/components/base/esm2022/widgets/framework/deviceview.mjs +1 -1
- app-ng-runtime/components/base/esm2022/widgets/framework/property-change-handler.mjs +3 -2
- app-ng-runtime/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +4 -3
- app-ng-runtime/components/base/fesm2022/index.mjs +206 -173
- app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/base/pipes/custom-pipes.d.ts +1 -1
- app-ng-runtime/components/base/utils/data-utils.d.ts +0 -1
- app-ng-runtime/components/base/utils/widget-utils.d.ts +2 -2
- app-ng-runtime/components/base/widgets/common/base/base-field-validations.d.ts +1 -1
- app-ng-runtime/components/base/widgets/common/base/partial-container.directive.d.ts +1 -1
- app-ng-runtime/components/basic/default/bundles/index.umd.js +10 -10
- app-ng-runtime/components/basic/default/esm2022/label/label.directive.mjs +4 -3
- app-ng-runtime/components/basic/default/esm2022/spinner/spinner.component.mjs +6 -5
- app-ng-runtime/components/basic/default/fesm2022/index.mjs +7 -6
- app-ng-runtime/components/basic/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/progress/bundles/index.umd.js +13 -13
- app-ng-runtime/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +5 -4
- app-ng-runtime/components/basic/progress/esm2022/progress-circle/progress-circle.component.mjs +6 -5
- app-ng-runtime/components/basic/progress/esm2022/utils.mjs +3 -3
- app-ng-runtime/components/basic/progress/fesm2022/index.mjs +10 -9
- app-ng-runtime/components/basic/progress/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +15 -10
- app-ng-runtime/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +14 -8
- app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs +13 -7
- app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/rich-text-editor/rich-text-editor.component.d.ts +2 -2
- app-ng-runtime/components/basic/search/bundles/index.umd.js +67 -65
- app-ng-runtime/components/basic/search/esm2022/data-provider/data-provider.mjs +1 -1
- app-ng-runtime/components/basic/search/esm2022/data-provider/local-data-provider.mjs +26 -23
- app-ng-runtime/components/basic/search/esm2022/data-provider/remote-data-provider.mjs +12 -11
- app-ng-runtime/components/basic/search/esm2022/search.component.mjs +31 -30
- app-ng-runtime/components/basic/search/fesm2022/index.mjs +66 -63
- app-ng-runtime/components/basic/search/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/tree/bundles/index.umd.js +9 -9
- app-ng-runtime/components/basic/tree/esm2022/tree.component.mjs +7 -6
- app-ng-runtime/components/basic/tree/fesm2022/index.mjs +6 -5
- app-ng-runtime/components/basic/tree/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/chart/bundles/index.umd.js +72 -63
- app-ng-runtime/components/chart/chart.component.d.ts +1 -1
- app-ng-runtime/components/chart/chart.utils.d.ts +3 -3
- app-ng-runtime/components/chart/esm2022/chart.component.mjs +58 -48
- app-ng-runtime/components/chart/esm2022/chart.utils.mjs +14 -13
- app-ng-runtime/components/chart/fesm2022/index.mjs +69 -59
- app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/accordion/bundles/index.umd.js +16 -16
- app-ng-runtime/components/containers/accordion/esm2022/accordion.directive.mjs +14 -13
- app-ng-runtime/components/containers/accordion/fesm2022/index.mjs +13 -12
- app-ng-runtime/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/panel/bundles/index.umd.js +5 -5
- app-ng-runtime/components/containers/panel/esm2022/panel.component.mjs +3 -2
- app-ng-runtime/components/containers/panel/fesm2022/index.mjs +2 -1
- app-ng-runtime/components/containers/panel/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/panel/panel.component.d.ts +1 -1
- app-ng-runtime/components/containers/tabs/bundles/index.umd.js +17 -17
- app-ng-runtime/components/containers/tabs/esm2022/tabs.component.mjs +15 -14
- app-ng-runtime/components/containers/tabs/fesm2022/index.mjs +14 -13
- app-ng-runtime/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/bundles/index.umd.js +75 -75
- app-ng-runtime/components/data/form/esm2022/form-action/form-action.directive.mjs +3 -2
- app-ng-runtime/components/data/form/esm2022/form-field/form-field.directive.mjs +10 -9
- app-ng-runtime/components/data/form/esm2022/form.component.mjs +54 -53
- app-ng-runtime/components/data/form/esm2022/live-filter/live-filter.directive.mjs +3 -2
- app-ng-runtime/components/data/form/esm2022/live-form/live-form.directive.mjs +11 -10
- app-ng-runtime/components/data/form/fesm2022/index.mjs +77 -76
- app-ng-runtime/components/data/form/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/form.component.d.ts +2 -2
- app-ng-runtime/components/data/form/live-form/live-form.directive.d.ts +1 -1
- app-ng-runtime/components/data/list/bundles/index.umd.js +692 -687
- app-ng-runtime/components/data/list/esm2022/list-item.directive.mjs +1 -1
- app-ng-runtime/components/data/list/esm2022/list.animator.mjs +5 -3
- app-ng-runtime/components/data/list/esm2022/list.component.mjs +687 -682
- app-ng-runtime/components/data/list/fesm2022/index.mjs +690 -684
- app-ng-runtime/components/data/list/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/list/list.component.d.ts +53 -53
- app-ng-runtime/components/data/live-table/bundles/index.umd.js +1 -1
- app-ng-runtime/components/data/live-table/esm2022/live-table.component.mjs +2 -2
- app-ng-runtime/components/data/live-table/fesm2022/index.mjs +1 -1
- app-ng-runtime/components/data/live-table/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/pagination/bundles/index.umd.js +14 -14
- app-ng-runtime/components/data/pagination/esm2022/pagination.component.mjs +12 -11
- app-ng-runtime/components/data/pagination/fesm2022/index.mjs +11 -10
- app-ng-runtime/components/data/pagination/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/bundles/index.umd.js +175 -172
- app-ng-runtime/components/data/table/esm2022/table-action/table-action.directive.mjs +3 -2
- app-ng-runtime/components/data/table/esm2022/table-column/table-column.directive.mjs +19 -18
- app-ng-runtime/components/data/table/esm2022/table-cud.directive.mjs +7 -6
- app-ng-runtime/components/data/table/esm2022/table-filter.directive.mjs +53 -55
- app-ng-runtime/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +3 -2
- app-ng-runtime/components/data/table/esm2022/table.component.mjs +98 -91
- app-ng-runtime/components/data/table/fesm2022/index.mjs +172 -168
- app-ng-runtime/components/data/table/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/table-column/table-column.directive.d.ts +6 -6
- app-ng-runtime/components/data/table/table.component.d.ts +2 -2
- app-ng-runtime/components/dialogs/default/bundles/index.umd.js +2 -2
- app-ng-runtime/components/dialogs/default/esm2022/base-dialog.mjs +3 -3
- app-ng-runtime/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +1 -1
- app-ng-runtime/components/dialogs/default/fesm2022/index.mjs +1 -1
- app-ng-runtime/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/calendar/bundles/index.umd.js +33 -31
- app-ng-runtime/components/input/calendar/esm2022/calendar.component.mjs +31 -28
- app-ng-runtime/components/input/calendar/fesm2022/index.mjs +30 -27
- app-ng-runtime/components/input/calendar/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/chips/bundles/index.umd.js +29 -28
- app-ng-runtime/components/input/chips/chips.component.d.ts +1 -1
- app-ng-runtime/components/input/chips/esm2022/chips.component.mjs +27 -25
- app-ng-runtime/components/input/chips/fesm2022/index.mjs +26 -24
- app-ng-runtime/components/input/chips/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/base-form.component.d.ts +3 -3
- app-ng-runtime/components/input/default/bundles/index.umd.js +75 -62
- app-ng-runtime/components/input/default/checkbox/checkbox.component.d.ts +1 -0
- app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +4 -4
- app-ng-runtime/components/input/default/esm2022/base-form.component.mjs +14 -8
- app-ng-runtime/components/input/default/esm2022/caption-position.directive.mjs +3 -2
- app-ng-runtime/components/input/default/esm2022/checkbox/checkbox.component.mjs +2 -2
- app-ng-runtime/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +6 -4
- app-ng-runtime/components/input/default/esm2022/dataset-aware-form.component.mjs +29 -23
- app-ng-runtime/components/input/default/esm2022/radioset/radioset.component.mjs +4 -3
- app-ng-runtime/components/input/default/esm2022/select/select.component.mjs +4 -3
- app-ng-runtime/components/input/default/esm2022/switch/switch.component.mjs +6 -5
- app-ng-runtime/components/input/default/esm2022/text/base/base-input.mjs +4 -3
- app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +20 -18
- app-ng-runtime/components/input/default/esm2022/text/text/input-text.component.mjs +2 -2
- app-ng-runtime/components/input/default/fesm2022/index.mjs +75 -62
- app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +1 -1
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +53 -51
- app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +34 -31
- app-ng-runtime/components/input/epoch/esm2022/date/date.component.mjs +5 -4
- app-ng-runtime/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +5 -4
- app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +7 -6
- app-ng-runtime/components/input/epoch/esm2022/picker/picker.component.mjs +1 -1
- app-ng-runtime/components/input/epoch/esm2022/time/time.component.mjs +6 -5
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs +48 -45
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/file-upload/bundles/index.umd.js +15 -15
- app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +13 -12
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +12 -11
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/rating/bundles/index.umd.js +12 -12
- app-ng-runtime/components/input/rating/esm2022/rating.component.mjs +10 -9
- app-ng-runtime/components/input/rating/fesm2022/index.mjs +9 -8
- app-ng-runtime/components/input/rating/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/breadcrumb/bundles/index.umd.js +1 -1
- app-ng-runtime/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +2 -2
- app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs +1 -1
- app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/bundles/index.umd.js +23 -22
- app-ng-runtime/components/navigation/menu/esm2022/menu-adapator.component.mjs +3 -2
- app-ng-runtime/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +6 -5
- app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +8 -7
- app-ng-runtime/components/navigation/menu/esm2022/nav/nav.component.mjs +10 -8
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +20 -18
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +12 -1
- app-ng-runtime/components/navigation/popover/esm2022/popover.component.mjs +1 -1
- app-ng-runtime/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/prefab/bundles/index.umd.js +6 -6
- app-ng-runtime/components/prefab/esm2022/prefab-container/prefab-container.directive.mjs +3 -2
- app-ng-runtime/components/prefab/esm2022/prefab.directive.mjs +3 -2
- app-ng-runtime/components/prefab/fesm2022/index.mjs +3 -2
- app-ng-runtime/components/prefab/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/bundles/index.umd.js +119 -130
- app-ng-runtime/core/esm2022/public_api.mjs +2 -2
- app-ng-runtime/core/esm2022/services/field-type.service.mjs +3 -2
- app-ng-runtime/core/esm2022/services/field-widget.service.mjs +3 -2
- app-ng-runtime/core/esm2022/services/pagination.service.mjs +7 -6
- app-ng-runtime/core/esm2022/services/state-persistence.service.mjs +17 -16
- app-ng-runtime/core/esm2022/services/utils.service.mjs +3 -2
- app-ng-runtime/core/esm2022/services/viewport.service.mjs +3 -2
- app-ng-runtime/core/esm2022/utils/build-utils.mjs +5 -4
- app-ng-runtime/core/esm2022/utils/expression-parser.mjs +5 -4
- app-ng-runtime/core/esm2022/utils/lru-cache.mjs +3 -2
- app-ng-runtime/core/esm2022/utils/utils.mjs +79 -82
- app-ng-runtime/core/esm2022/utils/watcher.mjs +9 -7
- app-ng-runtime/core/fesm2022/index.mjs +117 -123
- app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/public_api.d.ts +1 -1
- app-ng-runtime/core/services/pagination.service.d.ts +1 -1
- app-ng-runtime/core/utils/utils.d.ts +5 -9
- app-ng-runtime/http/bundles/index.umd.js +7 -7
- app-ng-runtime/http/esm2022/http.service.mjs +5 -4
- app-ng-runtime/http/esm2022/wm-http-request.mjs +1 -1
- app-ng-runtime/http/esm2022/wm-http-response.mjs +1 -1
- app-ng-runtime/http/fesm2022/index.mjs +4 -3
- app-ng-runtime/http/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js +24 -20
- app-ng-runtime/mobile/components/basic/default/esm2022/anchor/anchor.directive.mjs +5 -4
- app-ng-runtime/mobile/components/basic/default/esm2022/file-browser/file-browser.component.mjs +12 -8
- app-ng-runtime/mobile/components/basic/default/esm2022/file-browser/file-selector.service.mjs +5 -3
- app-ng-runtime/mobile/components/basic/default/esm2022/image-cache/image-cache.directive.mjs +3 -2
- app-ng-runtime/mobile/components/basic/default/esm2022/process-manager/process-manager.component.mjs +5 -4
- app-ng-runtime/mobile/components/basic/default/fesm2022/index.mjs +21 -16
- app-ng-runtime/mobile/components/basic/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/containers/segmented-control/bundles/index.umd.js +7 -7
- app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segment-content/segment-content.component.mjs +2 -2
- app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segmented-control.component.mjs +4 -3
- app-ng-runtime/mobile/components/containers/segmented-control/fesm2022/index.mjs +4 -3
- app-ng-runtime/mobile/components/containers/segmented-control/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/data/media-list/bundles/index.umd.js +8 -8
- app-ng-runtime/mobile/components/data/media-list/esm2022/media-list.component.mjs +4 -3
- app-ng-runtime/mobile/components/data/media-list/fesm2022/index.mjs +3 -2
- app-ng-runtime/mobile/components/data/media-list/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/default/bundles/index.umd.js +5 -5
- app-ng-runtime/mobile/components/page/default/esm2022/page.directive.mjs +3 -2
- app-ng-runtime/mobile/components/page/default/fesm2022/index.mjs +2 -1
- app-ng-runtime/mobile/components/page/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/tab-bar/bundles/index.umd.js +9 -9
- app-ng-runtime/mobile/components/page/tab-bar/esm2022/tabbar.component.mjs +7 -6
- app-ng-runtime/mobile/components/page/tab-bar/fesm2022/index.mjs +6 -5
- app-ng-runtime/mobile/components/page/tab-bar/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/core/bundles/index.umd.js +25 -25
- app-ng-runtime/mobile/core/esm2022/services/device-file-download.service.mjs +5 -4
- app-ng-runtime/mobile/core/esm2022/services/device-file-opener.service.mjs +3 -2
- app-ng-runtime/mobile/core/esm2022/services/device-file-upload.service.mjs +4 -3
- app-ng-runtime/mobile/core/esm2022/services/device-file.service.mjs +6 -5
- app-ng-runtime/mobile/core/esm2022/services/device.service.mjs +3 -2
- app-ng-runtime/mobile/core/esm2022/services/ext-app-message.service.mjs +5 -4
- app-ng-runtime/mobile/core/esm2022/services/network.service.mjs +9 -8
- app-ng-runtime/mobile/core/fesm2022/index.mjs +22 -21
- app-ng-runtime/mobile/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/core/services/ext-app-message.service.d.ts +1 -1
- app-ng-runtime/mobile/core/services/network.service.d.ts +7 -1
- app-ng-runtime/mobile/offline/bundles/index.umd.js +161 -144
- app-ng-runtime/mobile/offline/esm2022/models/local-db-store.mjs +23 -21
- app-ng-runtime/mobile/offline/esm2022/services/change-log.service.mjs +7 -6
- app-ng-runtime/mobile/offline/esm2022/services/local-db-data-pull.service.mjs +37 -35
- app-ng-runtime/mobile/offline/esm2022/services/local-db-management.service.mjs +54 -45
- app-ng-runtime/mobile/offline/esm2022/services/local-db.service.mjs +5 -4
- app-ng-runtime/mobile/offline/esm2022/services/workers/error-blocker.mjs +4 -3
- app-ng-runtime/mobile/offline/esm2022/services/workers/file-handler.mjs +18 -13
- app-ng-runtime/mobile/offline/esm2022/services/workers/multi-part-param-transformer.mjs +9 -5
- app-ng-runtime/mobile/offline/esm2022/utils/live-variable.utils.mjs +12 -11
- app-ng-runtime/mobile/offline/esm2022/utils/query-executor.utils.mjs +5 -4
- app-ng-runtime/mobile/offline/esm2022/utils/security.utils.mjs +3 -2
- app-ng-runtime/mobile/offline/fesm2022/index.mjs +156 -138
- app-ng-runtime/mobile/offline/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/runtime/bundles/index.umd.js +11 -8
- app-ng-runtime/mobile/runtime/esm2022/mobile-runtime.module.mjs +3 -2
- app-ng-runtime/mobile/runtime/esm2022/services/cookie.service.mjs +6 -2
- app-ng-runtime/mobile/runtime/esm2022/services/http-interceptor.service.mjs +4 -3
- app-ng-runtime/mobile/runtime/fesm2022/index.mjs +8 -4
- app-ng-runtime/mobile/runtime/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/runtime-dynamic/bundles/index.umd.js +2 -2
- app-ng-runtime/mobile/runtime-dynamic/esm2022/services/live-sync.service.mjs +3 -3
- app-ng-runtime/mobile/runtime-dynamic/fesm2022/index.mjs +2 -2
- app-ng-runtime/mobile/runtime-dynamic/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/variables/bundles/index.umd.js +23 -16
- app-ng-runtime/mobile/variables/esm2022/services/camera-service.mjs +2 -2
- app-ng-runtime/mobile/variables/esm2022/services/datasync-service.mjs +10 -9
- app-ng-runtime/mobile/variables/esm2022/services/file-service.mjs +11 -3
- app-ng-runtime/mobile/variables/fesm2022/index.mjs +19 -11
- app-ng-runtime/mobile/variables/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/oAuth/bundles/index.umd.js +12 -12
- app-ng-runtime/oAuth/esm2022/oAuth.service.mjs +4 -3
- app-ng-runtime/oAuth/esm2022/oAuth.utils.mjs +8 -7
- app-ng-runtime/oAuth/fesm2022/index.mjs +9 -8
- app-ng-runtime/oAuth/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/runtime/base/bundles/index.umd.js +121 -120
- app-ng-runtime/runtime/base/esm2022/components/base-layout.component.mjs +4 -3
- app-ng-runtime/runtime/base/esm2022/components/base-page.component.mjs +14 -13
- app-ng-runtime/runtime/base/esm2022/components/base-partial.component.mjs +13 -12
- app-ng-runtime/runtime/base/esm2022/components/base-prefab.component.mjs +15 -14
- app-ng-runtime/runtime/base/esm2022/components/base-spa-page.component.mjs +14 -13
- app-ng-runtime/runtime/base/esm2022/components/custom-toaster.component.mjs +6 -5
- app-ng-runtime/runtime/base/esm2022/directives/accessroles.directive.mjs +11 -10
- app-ng-runtime/runtime/base/esm2022/guards/page-not-found.guard.mjs +1 -1
- app-ng-runtime/runtime/base/esm2022/guards/role.guard.mjs +3 -2
- app-ng-runtime/runtime/base/esm2022/services/app-defaults.service.mjs +1 -1
- app-ng-runtime/runtime/base/esm2022/services/app.manager.service.mjs +17 -14
- app-ng-runtime/runtime/base/esm2022/services/app.service.mjs +7 -6
- app-ng-runtime/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +3 -2
- app-ng-runtime/runtime/base/esm2022/services/http-interceptor.services.mjs +4 -3
- app-ng-runtime/runtime/base/esm2022/services/i18n.service.mjs +12 -10
- app-ng-runtime/runtime/base/esm2022/services/navigation.service.mjs +8 -7
- app-ng-runtime/runtime/base/esm2022/services/prefab-manager.service.mjs +3 -2
- app-ng-runtime/runtime/base/esm2022/services/spinner.service.mjs +7 -6
- app-ng-runtime/runtime/base/esm2022/services/toaster.service.mjs +6 -5
- app-ng-runtime/runtime/base/esm2022/util/wm-route-reuse-strategy.mjs +6 -7
- app-ng-runtime/runtime/base/fesm2022/index.mjs +119 -117
- app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/runtime/base/services/i18n.service.d.ts +1 -1
- app-ng-runtime/runtime/dynamic/bundles/index.umd.js +7 -7
- app-ng-runtime/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +4 -3
- app-ng-runtime/runtime/dynamic/esm2022/main.mjs +3 -2
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs +4 -3
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/scripts/jquery-ui/ui/widgets/droppable.js +7 -7
- app-ng-runtime/scripts/jquery-ui/ui/widgets/resizable.js +13 -10
- app-ng-runtime/scripts/jquery-ui/ui/widgets/sortable.js +7 -7
- app-ng-runtime/security/bundles/index.umd.js +14 -14
- app-ng-runtime/security/esm2022/security.service.mjs +12 -11
- app-ng-runtime/security/fesm2022/index.mjs +11 -10
- app-ng-runtime/security/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/security/security.service.d.ts +1 -1
- app-ng-runtime/swipey/esm2022/swipe.animation.mjs +1 -1
- app-ng-runtime/swipey/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/transpiler/bundles/index.umd.js +10 -9
- app-ng-runtime/transpiler/esm2022/build.mjs +8 -6
- app-ng-runtime/transpiler/fesm2022/index.mjs +7 -5
- app-ng-runtime/transpiler/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/variables/bundles/index.umd.js +155 -145
- app-ng-runtime/variables/esm2022/manager/action/login-action.manager.mjs +15 -14
- app-ng-runtime/variables/esm2022/manager/action/notification-action.manager.mjs +9 -8
- app-ng-runtime/variables/esm2022/manager/variable/base-variable.manager.mjs +3 -2
- app-ng-runtime/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +11 -10
- app-ng-runtime/variables/esm2022/service/variables.service.mjs +7 -6
- app-ng-runtime/variables/esm2022/util/action/navigation-action.utils.mjs +4 -4
- app-ng-runtime/variables/esm2022/util/variable/pagination.utils.mjs +30 -23
- app-ng-runtime/variables/esm2022/util/variable/service-variable.utils.mjs +29 -28
- app-ng-runtime/variables/esm2022/util/variable/variables.utils.mjs +75 -70
- app-ng-runtime/variables/fesm2022/index.mjs +169 -158
- app-ng-runtime/variables/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/variables/util/variable/service-variable.utils.d.ts +1 -1
|
@@ -9,6 +9,7 @@ import { setDependency, simulateFileDownload } from '../util/variable/variables.
|
|
|
9
9
|
import { MetadataService } from './metadata-service/metadata.service';
|
|
10
10
|
import { VARIABLE_CONSTANTS } from '../constants/variables.constants';
|
|
11
11
|
import { appManager } from '../util/variable/variables.utils';
|
|
12
|
+
import { isArray, isFunction, isUndefined, set } from "lodash-es";
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
14
|
import * as i1 from "@wm/core";
|
|
14
15
|
import * as i2 from "./metadata-service/metadata.service";
|
|
@@ -52,7 +53,7 @@ export class VariablesService {
|
|
|
52
53
|
bulkCancel(collection) {
|
|
53
54
|
Object.keys(collection).forEach(name => {
|
|
54
55
|
const variable = collection[name];
|
|
55
|
-
if (
|
|
56
|
+
if (isFunction(variable.cancel)) {
|
|
56
57
|
variable.cancel();
|
|
57
58
|
}
|
|
58
59
|
});
|
|
@@ -69,19 +70,19 @@ export class VariablesService {
|
|
|
69
70
|
}
|
|
70
71
|
processBindExp(d, scope, variable) {
|
|
71
72
|
const root = getTarget(variable), targetNodeKey = getTargetNodeKey(d.target), runMode = true;
|
|
72
|
-
let v =
|
|
73
|
+
let v = isArray(d.value) ? d.value[0] : d.value;
|
|
73
74
|
if (v) {
|
|
74
75
|
if (v.startsWith && v.startsWith('bind:')) {
|
|
75
76
|
const watchExpression = $watch(v.replace('bind:', ''), scope, {}, variable.invokeOnParamChange.bind(variable, d), undefined, undefined, d, () => variable.isMuted);
|
|
76
77
|
v = scope.registerDestroyListener ? scope.registerDestroyListener(watchExpression) : watchExpression;
|
|
77
78
|
}
|
|
78
|
-
else if (!
|
|
79
|
+
else if (!isUndefined(d.value)) {
|
|
79
80
|
setValueToNode(d.target, d, root, variable, d.value, true);
|
|
80
81
|
if (runMode && root !== targetNodeKey) {
|
|
81
82
|
if (!internalBoundNodeMap.has(variable)) {
|
|
82
83
|
internalBoundNodeMap.set(variable, {});
|
|
83
84
|
}
|
|
84
|
-
|
|
85
|
+
set(internalBoundNodeMap.get(variable), [variable.name, root, d.target], d.value);
|
|
85
86
|
}
|
|
86
87
|
}
|
|
87
88
|
}
|
|
@@ -96,7 +97,7 @@ export class VariablesService {
|
|
|
96
97
|
const bindMap = variable[bindSource];
|
|
97
98
|
variable[bindSource] = {};
|
|
98
99
|
variable['_bind' + bindSource] = bindMap;
|
|
99
|
-
if (!bindMap || !
|
|
100
|
+
if (!bindMap || !isArray(bindMap)) {
|
|
100
101
|
return;
|
|
101
102
|
}
|
|
102
103
|
bindMap.forEach((node) => {
|
|
@@ -190,4 +191,4 @@ export class VariablesService {
|
|
|
190
191
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(VariablesService, [{
|
|
191
192
|
type: Injectable
|
|
192
193
|
}], () => [{ type: i1.AbstractHttpService }, { type: i2.MetadataService }, { type: i1.AbstractNavigationService }, { type: i3.Router }, { type: i1.AbstractToasterService }, { type: i4.OAuthService }, { type: i5.SecurityService }, { type: i1.AbstractDialogService }], null); })();
|
|
193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy92YXJpYWJsZXMvc3JjL3NlcnZpY2UvdmFyaWFibGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUNILE1BQU0sRUFDTixXQUFXLEVBQ1gscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUNwRSxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0SSxPQUFPLEVBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7OztBQUc1RCxNQUFNLE9BQU8sU0FBUztJQUNsQixNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU07UUFDaEIsT0FBUSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUs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Q0FBQyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckcsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztZQUdBLDhDQUE4QztZQUM5QyxJQUFJLFdBQVcsWUFBWSxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUMxRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osaUJBQWlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUM1RCxDQUFDO1FBQ0wsQ0FBQztRQUVELGlHQUFpRztRQUNqRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2hDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTztJQUNQLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRztRQUN4QixhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztpRkF0TFEsZ0JBQWdCO3VFQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCOztpRkFBaEIsZ0JBQWdCO2NBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1xuICAgICR3YXRjaCxcbiAgICAkcGFyc2VFdmVudCxcbiAgICBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsXG4gICAgQWJzdHJhY3RIdHRwU2VydmljZSxcbiAgICBBYnN0cmFjdE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgIEFic3RyYWN0VG9hc3RlclNlcnZpY2UsIHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZSwgJGludm9rZVdhdGNoZXJzLCBnZXRDbG9uZWRPYmplY3Rcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnQHdtL29BdXRoJztcbmltcG9ydCB7IFNlY3VyaXR5U2VydmljZSB9IGZyb20gJ0B3bS9zZWN1cml0eSc7XG5cbmltcG9ydCB7IFZhcmlhYmxlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3RvcnkvdmFyaWFibGUuZmFjdG9yeSc7XG5pbXBvcnQgeyB3bVNldERlcGVuZGVuY3ksIEJhc2VBY3Rpb24sIGdldFRhcmdldCwgc2V0VmFsdWVUb05vZGUsIGdldFRhcmdldE5vZGVLZXksIGludGVybmFsQm91bmROb2RlTWFwIH0gZnJvbSAnQHdhdmVtYWtlci92YXJpYWJsZXMnO1xuaW1wb3J0IHtzZXREZXBlbmRlbmN5LCBzaW11bGF0ZUZpbGVEb3dubG9hZH0gZnJvbSAnLi4vdXRpbC92YXJpYWJsZS92YXJpYWJsZXMudXRpbHMnO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9tZXRhZGF0YS1zZXJ2aWNlL21ldGFkYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgVkFSSUFCTEVfQ09OU1RBTlRTIH0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhcmlhYmxlcy5jb25zdGFudHMnO1xuaW1wb3J0IHthcHBNYW5hZ2VyfSBmcm9tICcuLi91dGlsL3ZhcmlhYmxlL3ZhcmlhYmxlcy51dGlscyc7XG5pbXBvcnQgeyBEYXRlRm9ybWF0dGVyIH0gZnJvbSAnQHdhdmVtYWtlci92YXJpYWJsZXMnO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0dGVyIGltcGxlbWVudHMgRGF0ZUZvcm1hdHRlciB7XG4gICAgZm9ybWF0KHZhbHVlLCBmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuICBhcHBNYW5hZ2VyLmdldFBpcGUoJ2RhdGUnKS50cmFuc2Zvcm0odmFsdWUsIGZvcm1hdCk7XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IF87XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBWYXJpYWJsZXNTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBBYnN0cmFjdEh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1ldGFkYXRhU2VydmljZTogTWV0YWRhdGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBBYnN0cmFjdE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlclNlcnZpY2U6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSB0b2FzdGVyU2VydmljZTogQWJzdHJhY3RUb2FzdGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBvQXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBBYnN0cmFjdERpYWxvZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgLy8gc2V0IGV4dGVybmFsIGRlcGVuZGVuY2llcywgdG8gYmUgdXNlZCBhY3Jvc3MgdmFyaWFibGUgY2xhc3NlcywgbWFuYWdlcnMgYW5kIHV0aWxzXG4gICAgICAgIHNldERlcGVuZGVuY3koJ2h0dHAnLCB0aGlzLmh0dHBTZXJ2aWNlKTtcbiAgICAgICAgc2V0RGVwZW5kZW5jeSgnbWV0YWRhdGEnLCB0aGlzLm1ldGFkYXRhU2VydmljZSk7XG4gICAgICAgIHNldERlcGVuZGVuY3koJ25hdmlnYXRpb25TZXJ2aWNlJywgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSk7XG4gICAgICAgIHNldERlcGVuZGVuY3koJ3JvdXRlcicsIHRoaXMucm91dGVyU2VydmljZSk7XG4gICAgICAgIHNldERlcGVuZGVuY3koJ3RvYXN0ZXInLCB0aGlzLnRvYXN0ZXJTZXJ2aWNlKTtcbiAgICAgICAgc2V0RGVwZW5kZW5jeSgnb0F1dGgnLCB0aGlzLm9BdXRoU2VydmljZSk7XG4gICAgICAgIHNldERlcGVuZGVuY3koJ3NlY3VyaXR5JywgdGhpcy5zZWN1cml0eVNlcnZpY2UpO1xuICAgICAgICBzZXREZXBlbmRlbmN5KCdkaWFsb2cnLCB0aGlzLmRpYWxvZ1NlcnZpY2UpO1xuICAgICAgICB3bVNldERlcGVuZGVuY3koJ29BdXRoJywgdGhpcy5vQXV0aFNlcnZpY2UpO1xuICAgICAgICB3bVNldERlcGVuZGVuY3koJ3NlY3VyaXR5JywgdGhpcy5zZWN1cml0eVNlcnZpY2UpO1xuICAgICAgICB3bVNldERlcGVuZGVuY3koJ21ldGFkYXRhJywgdGhpcy5tZXRhZGF0YVNlcnZpY2UpO1xuICAgICAgICB3bVNldERlcGVuZGVuY3koJ2h0dHAnLCB0aGlzLmh0dHBTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBsb29wIHRocm91Z2ggYSBjb2xsZWN0aW9uIG9mIHZhcmlhYmxlcy9hY3Rpb25zXG4gICAgICogdHJpZ2dlciBjYW5jZWwgb24gZWFjaCAob2YgZXhpc3RzKVxuICAgICAqIEBwYXJhbSBjb2xsZWN0aW9uXG4gICAgICovXG4gICAgYnVsa0NhbmNlbChjb2xsZWN0aW9uKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbGxlY3Rpb25bbmFtZV07XG4gICAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhcmlhYmxlLmNhbmNlbCkpIHtcbiAgICAgICAgICAgICAgICB2YXJpYWJsZS5jYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbG9vcHMgb3ZlciB0aGUgdmFyaWFibGUvYWN0aW9ucyBjb2xsZWN0aW9uIGFuZCB0cmlnZ2VyIGludm9rZSBvbiBpdCBpZiBzdGFydFVwZGF0ZSBvbiBpdCBpcyB0cnVlXG4gICAgICogQHBhcmFtIGNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICB0cmlnZ2VyU3RhcnRVcGRhdGUoY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKVxuICAgICAgICAgICAgICAgIC5tYXAobmFtZSA9PiBjb2xsZWN0aW9uW25hbWVdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoIHZhcmlhYmxlID0+IHZhcmlhYmxlPy5zdGFydFVwZGF0ZSAmJiB2YXJpYWJsZS5pbnZva2UpXG4gICAgICAgICAgICAgICAgLm1hcCh2YXJpYWJsZSA9PiB2YXJpYWJsZS5pbnZva2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvY2Vzc0JpbmRFeHAoZDogYW55LCBzY29wZTogYW55LCB2YXJpYWJsZSkge1xuICAgICAgICBjb25zdCByb290ID0gZ2V0VGFyZ2V0KHZhcmlhYmxlKSxcbiAgICAgICAgICAgIHRhcmdldE5vZGVLZXkgPSBnZXRUYXJnZXROb2RlS2V5KGQudGFyZ2V0KSxcbiAgICAgICAgICAgIHJ1bk1vZGUgPSB0cnVlO1xuICAgICAgICBsZXQgdiA9IF8uaXNBcnJheShkLnZhbHVlKSA/IGQudmFsdWVbMF0gOiBkLnZhbHVlO1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgaWYgKHYuc3RhcnRzV2l0aCAmJiB2LnN0YXJ0c1dpdGgoJ2JpbmQ6JykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3YXRjaEV4cHJlc3Npb24gPSAkd2F0Y2godi5yZXBsYWNlKCdiaW5kOicsICcnKSwgc2NvcGUsIHt9LCB2YXJpYWJsZS5pbnZva2VPblBhcmFtQ2hhbmdlLmJpbmQodmFyaWFibGUsIGQpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZCwgKCkgPT4gdmFyaWFibGUuaXNNdXRlZCk7XG4gICAgICAgICAgICAgICAgdiA9IHNjb3BlLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyID8gc2NvcGUucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIod2F0Y2hFeHByZXNzaW9uKSA6IHdhdGNoRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIV8uaXNVbmRlZmluZWQoZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZVRvTm9kZShkLnRhcmdldCwgZCwgcm9vdCwgdmFyaWFibGUsIGQudmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmIChydW5Nb2RlICYmIHJvb3QgIT09IHRhcmdldE5vZGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnRlcm5hbEJvdW5kTm9kZU1hcC5oYXModmFyaWFibGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEJvdW5kTm9kZU1hcC5zZXQodmFyaWFibGUsIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfLnNldChpbnRlcm5hbEJvdW5kTm9kZU1hcC5nZXQodmFyaWFibGUpLCBbIHZhcmlhYmxlLm5hbWUsIHJvb3QsIGQudGFyZ2V0IF0sIGQudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogZC50YXJnZXQsXG4gICAgICAgICAgICB2YWx1ZTogdlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByb2Nlc3NCaW5kaW5nKHZhcmlhYmxlOiBhbnksIGNvbnRleHQ6IGFueSwgYmluZFNvdXJjZT86IHN0cmluZywgYmluZFRhcmdldD86IHN0cmluZykge1xuICAgICAgICBiaW5kU291cmNlID0gYmluZFNvdXJjZSB8fCAnZGF0YUJpbmRpbmcnO1xuICAgICAgICBiaW5kVGFyZ2V0ID0gYmluZFRhcmdldCB8fCAnZGF0YUJpbmRpbmcnO1xuXG4gICAgICAgIGNvbnN0IGJpbmRNYXAgPSB2YXJpYWJsZVtiaW5kU291cmNlXTtcbiAgICAgICAgdmFyaWFibGVbYmluZFNvdXJjZV0gPSB7fTtcbiAgICAgICAgdmFyaWFibGVbJ19iaW5kJyArIGJpbmRTb3VyY2VdID0gYmluZE1hcDtcbiAgICAgICAgaWYgKCFiaW5kTWFwIHx8ICFfLmlzQXJyYXkoYmluZE1hcCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBiaW5kTWFwLmZvckVhY2goIChub2RlKSA9PiB7XG4gICAgICAgICAgICAvKiBmb3Igc3RhdGljIHZhcmlhYmxlIGNoYW5nZSB0aGUgYmluZGluZyB3aXRoIHRhcmdldCAnZGF0YUJpbmRpbmcnIHRvICdkYXRhU2V0JywgYXMgdGhlIHJlc3VsdHMgaGF2ZSB0byByZWZsZWN0IGRpcmVjdGx5IGluIHRoZSBkYXRhU2V0ICovXG4gICAgICAgICAgICBpZiAodmFyaWFibGUuY2F0ZWdvcnkgPT09ICd3bS5WYXJpYWJsZScgJiYgbm9kZS50YXJnZXQgPT09ICdkYXRhQmluZGluZycpIHtcbiAgICAgICAgICAgICAgICBub2RlLnRhcmdldCA9ICdkYXRhU2V0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0JpbmRFeHAobm9kZSwgY29udGV4dCwgdmFyaWFibGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc1ZhcmlhYmxlU2VwZXJhdGVkKHZhcmlhYmxlc0pzb24sIHZhcmlhYmxlTmFtZSkge1xuICAgICAgICByZXR1cm4gdmFyaWFibGVzSnNvblt2YXJpYWJsZU5hbWVdLmNhdGVnb3J5ID09PSAnd20uVmFyaWFibGUnIHx8IHZhcmlhYmxlc0pzb25bdmFyaWFibGVOYW1lXS5jYXRlZ29yeSA9PT0gJ3dtLlNlcnZpY2VWYXJpYWJsZScgfHxcbiAgICAgICAgICAgIHZhcmlhYmxlc0pzb25bdmFyaWFibGVOYW1lXS5jYXRlZ29yeSA9PT0gJ3dtLkxpdmVWYXJpYWJsZScgfHwgdmFyaWFibGVzSnNvblt2YXJpYWJsZU5hbWVdLmNhdGVnb3J5ID09PSAnd20uQ3J1ZFZhcmlhYmxlJ1xuICAgIH1cblxuICAgIGdldEJpbmRTb3VyY2VUYXJnZXQodmFyaWFibGUpIHtcbiAgICAgICAgaWYgKHZhcmlhYmxlLmNhdGVnb3J5ID09PSAnd20uTGl2ZVZhcmlhYmxlJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLm9wZXJhdGlvbiA9PT0gJ3JlYWQnID8gJ2ZpbHRlckZpZWxkcycgOiAnaW5wdXRGaWVsZHMnO1xuICAgICAgICB9IGVsc2UgaWYgKHZhcmlhYmxlLmNhdGVnb3J5ID09PSAnd20uTW9kZWxWYXJpYWJsZScpIHtcbiAgICAgICAgICAgIHJldHVybiAnZGF0YVNldCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ2RhdGFCaW5kaW5nJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRha2VzIHRoZSByYXcgdmFyaWFibGVzIGFuZCBhY3Rpb25zIGpzb24gYXMgaW5wdXRcbiAgICAgKiBJbml0aWFsaXplIHRoZSB2YXJpYWJsZSBhbmQgYWN0aW9uIGluc3RhbmNlcyB0aHJvdWdoIHRoZSBmYWN0b3J5XG4gICAgICogY29sbGVjdCB0aGUgdmFyaWFibGVzIGFuZCBhY3Rpb25zIGluIHNlcGFyYXRlIG1hcHMgYW5kIHJldHVybiB0aGUgY29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYWdlXG4gICAgICogQHBhcmFtIHZhcmlhYmxlc0pzb25cbiAgICAgKiBAcGFyYW0gc2NvcGVcbiAgICAgKiBAcmV0dXJucyB7VmFyaWFibGVzICwgQWN0aW9uc31cbiAgICAgKi9cbiAgICByZWdpc3RlcihwYWdlOiBzdHJpbmcsIHZhcmlhYmxlc0pzb246IGFueSwgc2NvcGU6IGFueSkge1xuICAgICAgICBjb25zdCB2YXJpYWJsZUluc3RhbmNlcyA9IHtcbiAgICAgICAgICAgIFZhcmlhYmxlczoge30sXG4gICAgICAgICAgICBBY3Rpb25zOiB7fSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLnRyaWdnZXJTdGFydFVwZGF0ZVxuICAgICAgICB9O1xuICAgICAgICBsZXQgdmFySW5zdGFuY2U7XG5cbiAgICAgICAgZm9yIChjb25zdCB2YXJpYWJsZU5hbWUgaW4gdmFyaWFibGVzSnNvbikge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcbiAgICAgICAgICAgIHZhckluc3RhbmNlID0gVmFyaWFibGVGYWN0b3J5LmNyZWF0ZSh2YXJpYWJsZXNKc29uW3ZhcmlhYmxlTmFtZV0sIHNjb3BlKTtcbiAgICAgICAgICAgIHZhckluc3RhbmNlLmluaXQoKTtcbiAgICAgICAgICAgaWYgKHRoaXMuaXNWYXJpYWJsZVNlcGVyYXRlZCh2YXJpYWJsZXNKc29uLCB2YXJpYWJsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NCaW5kaW5nKHZhckluc3RhbmNlLCBzY29wZSwgJ2RhdGFCaW5kaW5nJywgdGhpcy5nZXRCaW5kU291cmNlVGFyZ2V0KHZhckluc3RhbmNlKSk7XG4gICAgICAgICAgICAgICB2YXJJbnN0YW5jZS5odHRwU2VydmljZSA9IHRoaXMuaHR0cFNlcnZpY2U7XG4gICAgICAgICAgICAgICB2YXJJbnN0YW5jZS5kYXRlRm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcigpO1xuICAgICAgICAgICAgICAgdmFySW5zdGFuY2Uuc3Vic2NyaWJlKCdhZnRlckludm9rZScsICgpID0+ICRpbnZva2VXYXRjaGVycyh0cnVlKSk7XG4gICAgICAgICAgICAgICBpZiAodmFySW5zdGFuY2UuY2F0ZWdvcnkgPT09ICd3bS5MaXZlVmFyaWFibGUnICYmIHZhckluc3RhbmNlLm9wZXJhdGlvbiA9PT0gJ3JlYWQnKSB7XG4gICAgICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbHRlckV4cEJpbmROb2RlKHZhckluc3RhbmNlLl9jb250ZXh0LCB2YXJJbnN0YW5jZS5maWx0ZXJFeHByZXNzaW9ucywgdmFySW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgaWYgKHZhckluc3RhbmNlLmNhdGVnb3J5ID09PSAnd20uQ3J1ZFZhcmlhYmxlJyB8fCB2YXJJbnN0YW5jZS5jYXRlZ29yeSA9PT0gJ3dtLlNlcnZpY2VWYXJpYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICB2YXJJbnN0YW5jZS5zaW11bGF0ZUZpbGVEb3dubG9hZCA9IHNpbXVsYXRlRmlsZURvd25sb2FkO1xuICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgIH1cblxuICAgICAgICAgICBpZiAodGhpcy5pc1ZhcmlhYmxlU2VwZXJhdGVkKHZhcmlhYmxlc0pzb24sIHZhcmlhYmxlTmFtZSkgfHwgdmFyaWFibGVzSnNvblt2YXJpYWJsZU5hbWVdLmNhdGVnb3J5ID09PSAnd20uVGltZXJWYXJpYWJsZScpIHtcbiAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBpbiBWQVJJQUJMRV9DT05TVEFOVFMuRVZFTlQpIHtcbiAgICAgICAgICAgICAgICAgICBpZiAodmFySW5zdGFuY2VbVkFSSUFCTEVfQ09OU1RBTlRTLkVWRU5UW2VdXSkge1xuICAgICAgICAgICAgICAgICAgICAgICB2YXJJbnN0YW5jZVtWQVJJQUJMRV9DT05TVEFOVFMuRVZFTlRbZV1dID0gJHBhcnNlRXZlbnQodmFySW5zdGFuY2VbVkFSSUFCTEVfQ09OU1RBTlRTLkVWRU5UW2VdXSk7XG4gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLy8gaWYgYWN0aW9uIHR5cGUsIHB1dCBpdCBpbiBBY3Rpb25zIG5hbWVzcGFjZVxuICAgICAgICAgICAgaWYgKHZhckluc3RhbmNlIGluc3RhbmNlb2YgQmFzZUFjdGlvbikge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5zdGFuY2VzLkFjdGlvbnNbdmFyaWFibGVOYW1lXSA9IHZhckluc3RhbmNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXJpYWJsZUluc3RhbmNlcy5WYXJpYWJsZXNbdmFyaWFibGVOYW1lXSA9IHZhckluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlIGNvbnRleHQgaGFzIG9uRGVzdHJveSBsaXN0ZW5lciwgc3Vic2NyaWJlIHRoZSBldmVudCBhbmQgdHJpZ2dlciBjYW5jZWwgb24gYWxsIHZhcmliYWxlc1xuICAgICAgICBpZiAoc2NvcGUucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHNjb3BlLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1bGtDYW5jZWwodmFyaWFibGVJbnN0YW5jZXMuVmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1bGtDYW5jZWwodmFyaWFibGVJbnN0YW5jZXMuQWN0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YXJpYWJsZUluc3RhbmNlcztcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgIH1cblxuICAgIHJlZ2lzdGVyRGVwZW5kZW5jeShuYW1lLCByZWYpIHtcbiAgICAgICAgc2V0RGVwZW5kZW5jeShuYW1lLCByZWYpO1xuICAgICAgICB3bVNldERlcGVuZGVuY3kobmFtZSwgcmVmKTtcbiAgICB9XG59XG4iXX0=
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy92YXJpYWJsZXMvc3JjL3NlcnZpY2UvdmFyaWFibGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUNILE1BQU0sRUFDTixXQUFXLEVBQ1gscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUNwRSxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0SSxPQUFPLEVBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU1RCxPQUFPLEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7O0FBRWhFLE1BQU0sT0FBTyxTQUFTO0lBQ2xCLE1BQU0sQ0FBQyxLQUFLLEVBQUUs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LEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckcsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztZQUdBLDhDQUE4QztZQUM5QyxJQUFJLFdBQVcsWUFBWSxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUMxRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osaUJBQWlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUM1RCxDQUFDO1FBQ0wsQ0FBQztRQUVELGlHQUFpRztRQUNqRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2hDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTztJQUNQLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRztRQUN4QixhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztpRkF0TFEsZ0JBQWdCO3VFQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCOztpRkFBaEIsZ0JBQWdCO2NBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1xuICAgICR3YXRjaCxcbiAgICAkcGFyc2VFdmVudCxcbiAgICBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsXG4gICAgQWJzdHJhY3RIdHRwU2VydmljZSxcbiAgICBBYnN0cmFjdE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgIEFic3RyYWN0VG9hc3RlclNlcnZpY2UsIHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZSwgJGludm9rZVdhdGNoZXJzLCBnZXRDbG9uZWRPYmplY3Rcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnQHdtL29BdXRoJztcbmltcG9ydCB7IFNlY3VyaXR5U2VydmljZSB9IGZyb20gJ0B3bS9zZWN1cml0eSc7XG5cbmltcG9ydCB7IFZhcmlhYmxlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3RvcnkvdmFyaWFibGUuZmFjdG9yeSc7XG5pbXBvcnQgeyB3bVNldERlcGVuZGVuY3ksIEJhc2VBY3Rpb24sIGdldFRhcmdldCwgc2V0VmFsdWVUb05vZGUsIGdldFRhcmdldE5vZGVLZXksIGludGVybmFsQm91bmROb2RlTWFwIH0gZnJvbSAnQHdhdmVtYWtlci92YXJpYWJsZXMnO1xuaW1wb3J0IHtzZXREZXBlbmRlbmN5LCBzaW11bGF0ZUZpbGVEb3dubG9hZH0gZnJvbSAnLi4vdXRpbC92YXJpYWJsZS92YXJpYWJsZXMudXRpbHMnO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9tZXRhZGF0YS1zZXJ2aWNlL21ldGFkYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgVkFSSUFCTEVfQ09OU1RBTlRTIH0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhcmlhYmxlcy5jb25zdGFudHMnO1xuaW1wb3J0IHthcHBNYW5hZ2VyfSBmcm9tICcuLi91dGlsL3ZhcmlhYmxlL3ZhcmlhYmxlcy51dGlscyc7XG5pbXBvcnQgeyBEYXRlRm9ybWF0dGVyIH0gZnJvbSAnQHdhdmVtYWtlci92YXJpYWJsZXMnO1xuaW1wb3J0IHtpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1VuZGVmaW5lZCwgc2V0fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmV4cG9ydCBjbGFzcyBGb3JtYXR0ZXIgaW1wbGVtZW50cyBEYXRlRm9ybWF0dGVyIHtcbiAgICBmb3JtYXQodmFsdWUsIGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gIGFwcE1hbmFnZXIuZ2V0UGlwZSgnZGF0ZScpLnRyYW5zZm9ybSh2YWx1ZSwgZm9ybWF0KTtcbiAgICB9XG59XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlc1NlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IEFic3RyYWN0SHR0cFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbWV0YWRhdGFTZXJ2aWNlOiBNZXRhZGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IEFic3RyYWN0TmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVyU2VydmljZTogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHRvYXN0ZXJTZXJ2aWNlOiBBYnN0cmFjdFRvYXN0ZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG9BdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IEFic3RyYWN0RGlhbG9nU2VydmljZVxuICAgICkge1xuICAgICAgICAvLyBzZXQgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLCB0byBiZSB1c2VkIGFjcm9zcyB2YXJpYWJsZSBjbGFzc2VzLCBtYW5hZ2VycyBhbmQgdXRpbHNcbiAgICAgICAgc2V0RGVwZW5kZW5jeSgnaHR0cCcsIHRoaXMuaHR0cFNlcnZpY2UpO1xuICAgICAgICBzZXREZXBlbmRlbmN5KCdtZXRhZGF0YScsIHRoaXMubWV0YWRhdGFTZXJ2aWNlKTtcbiAgICAgICAgc2V0RGVwZW5kZW5jeSgnbmF2aWdhdGlvblNlcnZpY2UnLCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgICAgICAgc2V0RGVwZW5kZW5jeSgncm91dGVyJywgdGhpcy5yb3V0ZXJTZXJ2aWNlKTtcbiAgICAgICAgc2V0RGVwZW5kZW5jeSgndG9hc3RlcicsIHRoaXMudG9hc3RlclNlcnZpY2UpO1xuICAgICAgICBzZXREZXBlbmRlbmN5KCdvQXV0aCcsIHRoaXMub0F1dGhTZXJ2aWNlKTtcbiAgICAgICAgc2V0RGVwZW5kZW5jeSgnc2VjdXJpdHknLCB0aGlzLnNlY3VyaXR5U2VydmljZSk7XG4gICAgICAgIHNldERlcGVuZGVuY3koJ2RpYWxvZycsIHRoaXMuZGlhbG9nU2VydmljZSk7XG4gICAgICAgIHdtU2V0RGVwZW5kZW5jeSgnb0F1dGgnLCB0aGlzLm9BdXRoU2VydmljZSk7XG4gICAgICAgIHdtU2V0RGVwZW5kZW5jeSgnc2VjdXJpdHknLCB0aGlzLnNlY3VyaXR5U2VydmljZSk7XG4gICAgICAgIHdtU2V0RGVwZW5kZW5jeSgnbWV0YWRhdGEnLCB0aGlzLm1ldGFkYXRhU2VydmljZSk7XG4gICAgICAgIHdtU2V0RGVwZW5kZW5jeSgnaHR0cCcsIHRoaXMuaHR0cFNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGxvb3AgdGhyb3VnaCBhIGNvbGxlY3Rpb24gb2YgdmFyaWFibGVzL2FjdGlvbnNcbiAgICAgKiB0cmlnZ2VyIGNhbmNlbCBvbiBlYWNoIChvZiBleGlzdHMpXG4gICAgICogQHBhcmFtIGNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICBidWxrQ2FuY2VsKGNvbGxlY3Rpb24pIHtcbiAgICAgICAgT2JqZWN0LmtleXMoY29sbGVjdGlvbikuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlID0gY29sbGVjdGlvbltuYW1lXTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhcmlhYmxlLmNhbmNlbCkpIHtcbiAgICAgICAgICAgICAgICB2YXJpYWJsZS5jYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbG9vcHMgb3ZlciB0aGUgdmFyaWFibGUvYWN0aW9ucyBjb2xsZWN0aW9uIGFuZCB0cmlnZ2VyIGludm9rZSBvbiBpdCBpZiBzdGFydFVwZGF0ZSBvbiBpdCBpcyB0cnVlXG4gICAgICogQHBhcmFtIGNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICB0cmlnZ2VyU3RhcnRVcGRhdGUoY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKVxuICAgICAgICAgICAgICAgIC5tYXAobmFtZSA9PiBjb2xsZWN0aW9uW25hbWVdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoIHZhcmlhYmxlID0+IHZhcmlhYmxlPy5zdGFydFVwZGF0ZSAmJiB2YXJpYWJsZS5pbnZva2UpXG4gICAgICAgICAgICAgICAgLm1hcCh2YXJpYWJsZSA9PiB2YXJpYWJsZS5pbnZva2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvY2Vzc0JpbmRFeHAoZDogYW55LCBzY29wZTogYW55LCB2YXJpYWJsZSkge1xuICAgICAgICBjb25zdCByb290ID0gZ2V0VGFyZ2V0KHZhcmlhYmxlKSxcbiAgICAgICAgICAgIHRhcmdldE5vZGVLZXkgPSBnZXRUYXJnZXROb2RlS2V5KGQudGFyZ2V0KSxcbiAgICAgICAgICAgIHJ1bk1vZGUgPSB0cnVlO1xuICAgICAgICBsZXQgdiA9IGlzQXJyYXkoZC52YWx1ZSkgPyBkLnZhbHVlWzBdIDogZC52YWx1ZTtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGlmICh2LnN0YXJ0c1dpdGggJiYgdi5zdGFydHNXaXRoKCdiaW5kOicpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2F0Y2hFeHByZXNzaW9uID0gJHdhdGNoKHYucmVwbGFjZSgnYmluZDonLCAnJyksIHNjb3BlLCB7fSwgdmFyaWFibGUuaW52b2tlT25QYXJhbUNoYW5nZS5iaW5kKHZhcmlhYmxlLCBkKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGQsICgpID0+IHZhcmlhYmxlLmlzTXV0ZWQpO1xuICAgICAgICAgICAgICAgIHYgPSBzY29wZS5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lciA/IHNjb3BlLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKHdhdGNoRXhwcmVzc2lvbikgOiB3YXRjaEV4cHJlc3Npb247XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1VuZGVmaW5lZChkLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHNldFZhbHVlVG9Ob2RlKGQudGFyZ2V0LCBkLCByb290LCB2YXJpYWJsZSwgZC52YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bk1vZGUgJiYgcm9vdCAhPT0gdGFyZ2V0Tm9kZUtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVybmFsQm91bmROb2RlTWFwLmhhcyh2YXJpYWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsQm91bmROb2RlTWFwLnNldCh2YXJpYWJsZSwge30pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNldChpbnRlcm5hbEJvdW5kTm9kZU1hcC5nZXQodmFyaWFibGUpLCBbdmFyaWFibGUubmFtZSwgcm9vdCwgZC50YXJnZXRdLCBkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGQudGFyZ2V0LFxuICAgICAgICAgICAgdmFsdWU6IHZcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm9jZXNzQmluZGluZyh2YXJpYWJsZTogYW55LCBjb250ZXh0OiBhbnksIGJpbmRTb3VyY2U/OiBzdHJpbmcsIGJpbmRUYXJnZXQ/OiBzdHJpbmcpIHtcbiAgICAgICAgYmluZFNvdXJjZSA9IGJpbmRTb3VyY2UgfHwgJ2RhdGFCaW5kaW5nJztcbiAgICAgICAgYmluZFRhcmdldCA9IGJpbmRUYXJnZXQgfHwgJ2RhdGFCaW5kaW5nJztcblxuICAgICAgICBjb25zdCBiaW5kTWFwID0gdmFyaWFibGVbYmluZFNvdXJjZV07XG4gICAgICAgIHZhcmlhYmxlW2JpbmRTb3VyY2VdID0ge307XG4gICAgICAgIHZhcmlhYmxlWydfYmluZCcgKyBiaW5kU291cmNlXSA9IGJpbmRNYXA7XG4gICAgICAgIGlmICghYmluZE1hcCB8fCAhaXNBcnJheShiaW5kTWFwKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGJpbmRNYXAuZm9yRWFjaCggKG5vZGUpID0+IHtcbiAgICAgICAgICAgIC8qIGZvciBzdGF0aWMgdmFyaWFibGUgY2hhbmdlIHRoZSBiaW5kaW5nIHdpdGggdGFyZ2V0ICdkYXRhQmluZGluZycgdG8gJ2RhdGFTZXQnLCBhcyB0aGUgcmVzdWx0cyBoYXZlIHRvIHJlZmxlY3QgZGlyZWN0bHkgaW4gdGhlIGRhdGFTZXQgKi9cbiAgICAgICAgICAgIGlmICh2YXJpYWJsZS5jYXRlZ29yeSA9PT0gJ3dtLlZhcmlhYmxlJyAmJiBub2RlLnRhcmdldCA9PT0gJ2RhdGFCaW5kaW5nJykge1xuICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0ID0gJ2RhdGFTZXQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQmluZEV4cChub2RlLCBjb250ZXh0LCB2YXJpYWJsZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlzVmFyaWFibGVTZXBlcmF0ZWQodmFyaWFibGVzSnNvbiwgdmFyaWFibGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZXNKc29uW3ZhcmlhYmxlTmFtZV0uY2F0ZWdvcnkgPT09ICd3bS5WYXJpYWJsZScgfHwgdmFyaWFibGVzSnNvblt2YXJpYWJsZU5hbWVdLmNhdGVnb3J5ID09PSAnd20uU2VydmljZVZhcmlhYmxlJyB8fFxuICAgICAgICAgICAgdmFyaWFibGVzSnNvblt2YXJpYWJsZU5hbWVdLmNhdGVnb3J5ID09PSAnd20uTGl2ZVZhcmlhYmxlJyB8fCB2YXJpYWJsZXNKc29uW3ZhcmlhYmxlTmFtZV0uY2F0ZWdvcnkgPT09ICd3bS5DcnVkVmFyaWFibGUnXG4gICAgfVxuXG4gICAgZ2V0QmluZFNvdXJjZVRhcmdldCh2YXJpYWJsZSkge1xuICAgICAgICBpZiAodmFyaWFibGUuY2F0ZWdvcnkgPT09ICd3bS5MaXZlVmFyaWFibGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFyaWFibGUub3BlcmF0aW9uID09PSAncmVhZCcgPyAnZmlsdGVyRmllbGRzJyA6ICdpbnB1dEZpZWxkcyc7XG4gICAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUuY2F0ZWdvcnkgPT09ICd3bS5Nb2RlbFZhcmlhYmxlJykge1xuICAgICAgICAgICAgcmV0dXJuICdkYXRhU2V0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnZGF0YUJpbmRpbmcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZXMgdGhlIHJhdyB2YXJpYWJsZXMgYW5kIGFjdGlvbnMganNvbiBhcyBpbnB1dFxuICAgICAqIEluaXRpYWxpemUgdGhlIHZhcmlhYmxlIGFuZCBhY3Rpb24gaW5zdGFuY2VzIHRocm91Z2ggdGhlIGZhY3RvcnlcbiAgICAgKiBjb2xsZWN0IHRoZSB2YXJpYWJsZXMgYW5kIGFjdGlvbnMgaW4gc2VwYXJhdGUgbWFwcyBhbmQgcmV0dXJuIHRoZSBjb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhZ2VcbiAgICAgKiBAcGFyYW0gdmFyaWFibGVzSnNvblxuICAgICAqIEBwYXJhbSBzY29wZVxuICAgICAqIEByZXR1cm5zIHtWYXJpYWJsZXMgLCBBY3Rpb25zfVxuICAgICAqL1xuICAgIHJlZ2lzdGVyKHBhZ2U6IHN0cmluZywgdmFyaWFibGVzSnNvbjogYW55LCBzY29wZTogYW55KSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlSW5zdGFuY2VzID0ge1xuICAgICAgICAgICAgVmFyaWFibGVzOiB7fSxcbiAgICAgICAgICAgIEFjdGlvbnM6IHt9LFxuICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMudHJpZ2dlclN0YXJ0VXBkYXRlXG4gICAgICAgIH07XG4gICAgICAgIGxldCB2YXJJbnN0YW5jZTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhcmlhYmxlTmFtZSBpbiB2YXJpYWJsZXNKc29uKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHt9O1xuICAgICAgICAgICAgdmFySW5zdGFuY2UgPSBWYXJpYWJsZUZhY3RvcnkuY3JlYXRlKHZhcmlhYmxlc0pzb25bdmFyaWFibGVOYW1lXSwgc2NvcGUpO1xuICAgICAgICAgICAgdmFySW5zdGFuY2UuaW5pdCgpO1xuICAgICAgICAgICBpZiAodGhpcy5pc1ZhcmlhYmxlU2VwZXJhdGVkKHZhcmlhYmxlc0pzb24sIHZhcmlhYmxlTmFtZSkpIHtcbiAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0JpbmRpbmcodmFySW5zdGFuY2UsIHNjb3BlLCAnZGF0YUJpbmRpbmcnLCB0aGlzLmdldEJpbmRTb3VyY2VUYXJnZXQodmFySW5zdGFuY2UpKTtcbiAgICAgICAgICAgICAgIHZhckluc3RhbmNlLmh0dHBTZXJ2aWNlID0gdGhpcy5odHRwU2VydmljZTtcbiAgICAgICAgICAgICAgIHZhckluc3RhbmNlLmRhdGVGb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKCk7XG4gICAgICAgICAgICAgICB2YXJJbnN0YW5jZS5zdWJzY3JpYmUoJ2FmdGVySW52b2tlJywgKCkgPT4gJGludm9rZVdhdGNoZXJzKHRydWUpKTtcbiAgICAgICAgICAgICAgIGlmICh2YXJJbnN0YW5jZS5jYXRlZ29yeSA9PT0gJ3dtLkxpdmVWYXJpYWJsZScgJiYgdmFySW5zdGFuY2Uub3BlcmF0aW9uID09PSAncmVhZCcpIHtcbiAgICAgICAgICAgICAgICAgICBwcm9jZXNzRmlsdGVyRXhwQmluZE5vZGUodmFySW5zdGFuY2UuX2NvbnRleHQsIHZhckluc3RhbmNlLmZpbHRlckV4cHJlc3Npb25zLCB2YXJJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBpZiAodmFySW5zdGFuY2UuY2F0ZWdvcnkgPT09ICd3bS5DcnVkVmFyaWFibGUnIHx8IHZhckluc3RhbmNlLmNhdGVnb3J5ID09PSAnd20uU2VydmljZVZhcmlhYmxlJykge1xuICAgICAgICAgICAgICAgICAgIHZhckluc3RhbmNlLnNpbXVsYXRlRmlsZURvd25sb2FkID0gc2ltdWxhdGVGaWxlRG93bmxvYWQ7XG4gICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgfVxuXG4gICAgICAgICAgIGlmICh0aGlzLmlzVmFyaWFibGVTZXBlcmF0ZWQodmFyaWFibGVzSnNvbiwgdmFyaWFibGVOYW1lKSB8fCB2YXJpYWJsZXNKc29uW3ZhcmlhYmxlTmFtZV0uY2F0ZWdvcnkgPT09ICd3bS5UaW1lclZhcmlhYmxlJykge1xuICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIGluIFZBUklBQkxFX0NPTlNUQU5UUy5FVkVOVCkge1xuICAgICAgICAgICAgICAgICAgIGlmICh2YXJJbnN0YW5jZVtWQVJJQUJMRV9DT05TVEFOVFMuRVZFTlRbZV1dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIHZhckluc3RhbmNlW1ZBUklBQkxFX0NPTlNUQU5UUy5FVkVOVFtlXV0gPSAkcGFyc2VFdmVudCh2YXJJbnN0YW5jZVtWQVJJQUJMRV9DT05TVEFOVFMuRVZFTlRbZV1dKTtcbiAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvLyBpZiBhY3Rpb24gdHlwZSwgcHV0IGl0IGluIEFjdGlvbnMgbmFtZXNwYWNlXG4gICAgICAgICAgICBpZiAodmFySW5zdGFuY2UgaW5zdGFuY2VvZiBCYXNlQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyaWFibGVJbnN0YW5jZXMuQWN0aW9uc1t2YXJpYWJsZU5hbWVdID0gdmFySW5zdGFuY2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5zdGFuY2VzLlZhcmlhYmxlc1t2YXJpYWJsZU5hbWVdID0gdmFySW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGUgY29udGV4dCBoYXMgb25EZXN0cm95IGxpc3RlbmVyLCBzdWJzY3JpYmUgdGhlIGV2ZW50IGFuZCB0cmlnZ2VyIGNhbmNlbCBvbiBhbGwgdmFyaWJhbGVzXG4gICAgICAgIGlmIChzY29wZS5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcikge1xuICAgICAgICAgICAgc2NvcGUucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVsa0NhbmNlbCh2YXJpYWJsZUluc3RhbmNlcy5WYXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYnVsa0NhbmNlbCh2YXJpYWJsZUluc3RhbmNlcy5BY3Rpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlSW5zdGFuY2VzO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJEZXBlbmRlbmN5KG5hbWUsIHJlZikge1xuICAgICAgICBzZXREZXBlbmRlbmN5KG5hbWUsIHJlZik7XG4gICAgICAgIHdtU2V0RGVwZW5kZW5jeShuYW1lLCByZWYpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { isString } from '@wm/core';
|
|
2
1
|
import { navigationService } from '../variable/variables.utils';
|
|
2
|
+
import { clone, isNil, isString } from "lodash-es";
|
|
3
3
|
/**
|
|
4
4
|
* Handles variable navigation operations
|
|
5
5
|
* @param variable
|
|
@@ -8,9 +8,9 @@ import { navigationService } from '../variable/variables.utils';
|
|
|
8
8
|
export const navigate = (variable, options) => {
|
|
9
9
|
variable.dataSet = (options && options.data) || variable.dataSet;
|
|
10
10
|
let viewName;
|
|
11
|
-
const pageName = variable.dataBinding.pageName || variable.pageName, operation = variable.operation, urlParams =
|
|
11
|
+
const pageName = variable.dataBinding.pageName || variable.pageName, operation = variable.operation, urlParams = clone(variable.dataSet), cacheable = isNil(options?.cacheable) ? variable.cacheable : options.cacheable;
|
|
12
12
|
options = options || {};
|
|
13
|
-
if (!
|
|
13
|
+
if (!isNil(cacheable) && (!isString(cacheable) || cacheable.trim() !== '')) {
|
|
14
14
|
urlParams['_cache_page'] = cacheable;
|
|
15
15
|
}
|
|
16
16
|
/* if operation is goToPage, navigate to the pageName */
|
|
@@ -49,4 +49,4 @@ export const navigate = (variable, options) => {
|
|
|
49
49
|
}, variable);
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1hY3Rpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YXJpYWJsZXMvc3JjL3V0aWwvYWN0aW9uL25hdmlnYXRpb24tYWN0aW9uLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQzFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDakUsSUFBSSxRQUFRLENBQUM7SUFDYixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUMvRCxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFDOUIsU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ25DLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ25GLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBRXhCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN6RSxTQUFTLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3pDLENBQUM7SUFFRCx3REFBd0Q7SUFDeEQsUUFBUSxTQUFTLEVBQUUsQ0FBQztRQUNoQixLQUFLLGtCQUFrQjtZQUNuQixpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNqQyxNQUFNO1FBQ1YsS0FBSyxVQUFVO1lBQ1gsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDakMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxlQUFlO2dCQUNwQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3RCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7YUFDaEMsQ0FBQyxDQUFDO1lBQ0gsTUFBTTtRQUNWLEtBQUssVUFBVTtZQUNYLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3hGLE1BQU07UUFDVixLQUFLLFNBQVM7WUFDVixRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUN0RixNQUFNO1FBQ1YsS0FBSyxlQUFlO1lBQ2hCLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQ2xHLE1BQU07UUFDVixLQUFLLGFBQWE7WUFDZCxRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUM5RixNQUFNO0lBQ2QsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ1gsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNqQyxRQUFRLEVBQUUsUUFBUTtZQUNsQixVQUFVLEVBQUUsUUFBUSxDQUFDLGVBQWU7WUFDcEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLFNBQVMsRUFBRSxTQUFTO1NBQ3ZCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakIsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdmFyaWFibGUvdmFyaWFibGVzLnV0aWxzJztcbmltcG9ydCB7Y2xvbmUsIGlzTmlsLCBpc1N0cmluZ30gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG4vKipcbiAqIEhhbmRsZXMgdmFyaWFibGUgbmF2aWdhdGlvbiBvcGVyYXRpb25zXG4gKiBAcGFyYW0gdmFyaWFibGVcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBuYXZpZ2F0ZSA9ICh2YXJpYWJsZSwgb3B0aW9ucykgPT4ge1xuICAgIHZhcmlhYmxlLmRhdGFTZXQgPSAob3B0aW9ucyAmJiBvcHRpb25zLmRhdGEpIHx8IHZhcmlhYmxlLmRhdGFTZXQ7XG4gICAgbGV0IHZpZXdOYW1lO1xuICAgIGNvbnN0IHBhZ2VOYW1lID0gdmFyaWFibGUuZGF0YUJpbmRpbmcucGFnZU5hbWUgfHwgdmFyaWFibGUucGFnZU5hbWUsXG4gICAgICAgIG9wZXJhdGlvbiA9IHZhcmlhYmxlLm9wZXJhdGlvbixcbiAgICAgICAgdXJsUGFyYW1zID0gY2xvbmUodmFyaWFibGUuZGF0YVNldCksXG4gICAgICAgIGNhY2hlYWJsZSA9IGlzTmlsKG9wdGlvbnM/LmNhY2hlYWJsZSkgPyB2YXJpYWJsZS5jYWNoZWFibGUgOiBvcHRpb25zLmNhY2hlYWJsZTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGlmICghaXNOaWwoY2FjaGVhYmxlKSAmJiAoIWlzU3RyaW5nKGNhY2hlYWJsZSkgfHwgY2FjaGVhYmxlLnRyaW0oKSAhPT0gJycpKSB7XG4gICAgICAgIHVybFBhcmFtc1snX2NhY2hlX3BhZ2UnXSA9IGNhY2hlYWJsZTtcbiAgICB9XG5cbiAgICAvKiBpZiBvcGVyYXRpb24gaXMgZ29Ub1BhZ2UsIG5hdmlnYXRlIHRvIHRoZSBwYWdlTmFtZSAqL1xuICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2dvVG9QcmV2aW91c1BhZ2UnOlxuICAgICAgICAgICAgbmF2aWdhdGlvblNlcnZpY2UuZ29Ub1ByZXZpb3VzKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZ290b1BhZ2UnOlxuICAgICAgICAgICAgbmF2aWdhdGlvblNlcnZpY2UuZ29Ub1BhZ2UocGFnZU5hbWUsIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB2YXJpYWJsZS5wYWdlVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgJGV2ZW50OiBvcHRpb25zLiRldmVudCxcbiAgICAgICAgICAgICAgICB1cmxQYXJhbXM6IHVybFBhcmFtcyxcbiAgICAgICAgICAgICAgICBjYWNoZWFibGU6IHZhcmlhYmxlLmNhY2hlYWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZ290b1ZpZXcnOlxuICAgICAgICAgICAgdmlld05hbWUgPSAodmFyaWFibGUuZGF0YUJpbmRpbmcgJiYgdmFyaWFibGUuZGF0YUJpbmRpbmcudmlld05hbWUpIHx8IHZhcmlhYmxlLnZpZXdOYW1lO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2dvdG9UYWInOlxuICAgICAgICAgICAgdmlld05hbWUgPSAodmFyaWFibGUuZGF0YUJpbmRpbmcgJiYgdmFyaWFibGUuZGF0YUJpbmRpbmcudGFiTmFtZSkgfHwgdmFyaWFibGUudGFiTmFtZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdnb3RvQWNjb3JkaW9uJzpcbiAgICAgICAgICAgIHZpZXdOYW1lID0gKHZhcmlhYmxlLmRhdGFCaW5kaW5nICYmIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmFjY29yZGlvbk5hbWUpIHx8IHZhcmlhYmxlLmFjY29yZGlvbk5hbWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZ290b1NlZ21lbnQnOlxuICAgICAgICAgICAgdmlld05hbWUgPSAodmFyaWFibGUuZGF0YUJpbmRpbmcgJiYgdmFyaWFibGUuZGF0YUJpbmRpbmcuc2VnbWVudE5hbWUpIHx8IHZhcmlhYmxlLnNlZ21lbnROYW1lO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLyogaWYgdmlldyBuYW1lIGZvdW5kLCBjYWxsIHJvdXRpbmUgdG8gbmF2aWdhdGUgdG8gaXQgKi9cbiAgICBpZiAodmlld05hbWUpIHtcbiAgICAgICAgbmF2aWdhdGlvblNlcnZpY2UuZ29Ub1ZpZXcodmlld05hbWUsIHtcbiAgICAgICAgICAgIHBhZ2VOYW1lOiBwYWdlTmFtZSxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHZhcmlhYmxlLnBhZ2VUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICRldmVudDogb3B0aW9ucy4kZXZlbnQsXG4gICAgICAgICAgICB1cmxQYXJhbXM6IHVybFBhcmFtc1xuICAgICAgICB9LCB2YXJpYWJsZSk7XG4gICAgfVxufTtcbiJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jmespath } from '@metrichor/jmespath';
|
|
2
|
+
import { find, isEmpty, result, set, startsWith } from "lodash-es";
|
|
2
3
|
export class PaginationUtils {
|
|
3
4
|
/**
|
|
4
5
|
* Modifies the query values with the pagination info which is retrieved from the previous API response.
|
|
@@ -81,7 +82,7 @@ export class PaginationUtils {
|
|
|
81
82
|
*/
|
|
82
83
|
static setPaginationItems(item, response, res, key, resHeaders) {
|
|
83
84
|
// if the item has body, resolve the expression against the response
|
|
84
|
-
if (
|
|
85
|
+
if (startsWith(item, '$body')) {
|
|
85
86
|
const bodyKey = item.replace('$body.', '');
|
|
86
87
|
try {
|
|
87
88
|
res[key] = jmespath.search(response, bodyKey);
|
|
@@ -90,7 +91,7 @@ export class PaginationUtils {
|
|
|
90
91
|
console.warn(`${item} expression needs to be corrected as per JMES guidelines`);
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
|
-
else if (
|
|
94
|
+
else if (startsWith(item, '$header')) { // if the item has header, resolve the expression against the response headers
|
|
94
95
|
const headerKey = item.replace('$header.', '');
|
|
95
96
|
const headers = Object.fromEntries(resHeaders.headers);
|
|
96
97
|
const headerParams = headerKey.split('.');
|
|
@@ -117,7 +118,7 @@ export class PaginationUtils {
|
|
|
117
118
|
const headerResp = JSON.parse(headerVal);
|
|
118
119
|
const specialChar = /[!@#$%^&*()+\=\[\]{};':"\\|,<>\/?]+/;
|
|
119
120
|
if (specialChar.test(keyName)) {
|
|
120
|
-
// If key name has expression (ex: comparission expression)
|
|
121
|
+
// If key name has expression (ex: comparission expression)
|
|
121
122
|
// add root key name to keyName for JMES to resolve the expression
|
|
122
123
|
keyName = 'headerResp.' + keyName;
|
|
123
124
|
}
|
|
@@ -168,9 +169,11 @@ export class PaginationUtils {
|
|
|
168
169
|
inputParam = 'page';
|
|
169
170
|
}
|
|
170
171
|
const paramName = paginationInfo.input[inputParam].split('.')[0];
|
|
171
|
-
const paramObj =
|
|
172
|
+
const paramObj = find(operationInfo.parameters, function (obj) {
|
|
173
|
+
return obj.name === paramName;
|
|
174
|
+
});
|
|
172
175
|
// check if the variable has query params and they are not empty
|
|
173
|
-
if (!
|
|
176
|
+
if (!isEmpty(variable.dataBinding) && paramObj && paramObj.parameterType === 'query') {
|
|
174
177
|
/**
|
|
175
178
|
* For pagination type other than offset, assign page which is recieved from options
|
|
176
179
|
* For offset type, calculate page from size and options[page]
|
|
@@ -216,29 +219,31 @@ export class PaginationUtils {
|
|
|
216
219
|
inputParam = 'page';
|
|
217
220
|
}
|
|
218
221
|
const paramName = paginationInfo.input[inputParam].split('.')[0];
|
|
219
|
-
// check if paramName is present in parameters of operation info
|
|
220
|
-
const paramObj =
|
|
221
|
-
|
|
222
|
+
// check if paramName is present in parameters of operation info
|
|
223
|
+
const paramObj = find(operationInfo.parameters, function (obj) {
|
|
224
|
+
return obj.name === paramName;
|
|
225
|
+
});
|
|
226
|
+
// set page/offset and size from pagination if matched parameter's type is header
|
|
222
227
|
if (paramObj?.parameterType === 'header') {
|
|
223
|
-
|
|
224
|
-
|
|
228
|
+
set(reqObj, paginationInfo.input[inputParam], variable.pagination['page']);
|
|
229
|
+
set(reqObj, paginationInfo.input.size, variable.pagination['size']);
|
|
225
230
|
headers[paramName] = JSON.stringify(reqObj[paramName]);
|
|
226
231
|
resObj['headers'] = headers;
|
|
227
232
|
}
|
|
228
233
|
else if (paramObj?.parameterType === 'body') {
|
|
229
|
-
// set page/offset and size from pagination if matched parameter's type is body
|
|
234
|
+
// set page/offset and size from pagination if matched parameter's type is body
|
|
230
235
|
// assign bodyVal to updated pagination info object
|
|
231
236
|
const bodyVal = JSON.parse(paramObj.sampleValue);
|
|
232
237
|
const bodyParam = paginationInfo.input[inputParam].split('.')[1];
|
|
233
238
|
if (bodyVal && bodyVal[bodyParam]) {
|
|
234
239
|
const inputBodyParam = paginationInfo.input[inputParam].split('.').splice(1).join('.');
|
|
235
240
|
if (inputParam !== 'offset') {
|
|
236
|
-
|
|
241
|
+
set(reqObj, inputBodyParam, variable.pagination['page']);
|
|
237
242
|
}
|
|
238
243
|
else {
|
|
239
|
-
|
|
244
|
+
set(reqObj, inputBodyParam, this.getOffsetInfo(variable, options));
|
|
240
245
|
}
|
|
241
|
-
|
|
246
|
+
set(reqObj, paginationInfo.input.size.split('.').splice(1).join('.'), variable.pagination['size']);
|
|
242
247
|
bodyVal[bodyParam] = reqObj[bodyParam];
|
|
243
248
|
requestBody = JSON.stringify(bodyVal);
|
|
244
249
|
resObj['requestBody'] = requestBody;
|
|
@@ -306,8 +311,10 @@ export class PaginationUtils {
|
|
|
306
311
|
static setParameterVal(paramName, res, operationInfo, variable) {
|
|
307
312
|
const paginationInfo = this.getPaginationInfo(operationInfo, variable);
|
|
308
313
|
const param = paginationInfo.input[paramName].split('.')[0];
|
|
309
|
-
const sizeObj =
|
|
310
|
-
|
|
314
|
+
const sizeObj = find(operationInfo.parameters, function (obj) {
|
|
315
|
+
return obj.name === param;
|
|
316
|
+
});
|
|
317
|
+
res[paramName] = result(sizeObj, 'sampleValue');
|
|
311
318
|
}
|
|
312
319
|
/**
|
|
313
320
|
* Creates res object from the response recieved from the api triggered
|
|
@@ -322,7 +329,7 @@ export class PaginationUtils {
|
|
|
322
329
|
static generatePaginationRes(operationInfo, paginationInfo, response, resHeaders, options, variable) {
|
|
323
330
|
let res = {};
|
|
324
331
|
const resOutput = paginationInfo.output;
|
|
325
|
-
// If pagination type is not cursor, create the following metadata
|
|
332
|
+
// If pagination type is not cursor, create the following metadata
|
|
326
333
|
if (!resOutput?.next) {
|
|
327
334
|
/**
|
|
328
335
|
* If size is present in the pagination's output metadata deduce size from api's response
|
|
@@ -347,12 +354,12 @@ export class PaginationUtils {
|
|
|
347
354
|
/**
|
|
348
355
|
* If totalElements has $minValue in it, set totalElements as $minValue
|
|
349
356
|
* If the rendered elements are greater than $minValue, set totalElements as Number of elements rendered + 1
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
357
|
+
|
|
358
|
+
* If totalElements is present in the pagination's output metadata deduce totalElements from api's response
|
|
359
|
+
|
|
360
|
+
* If Pagination type is offset, deduce totalElements from size and options[page] else deduce from size and res[page]
|
|
354
361
|
*/
|
|
355
|
-
if (
|
|
362
|
+
if (startsWith(resOutput?.totalElements, '$minValue')) {
|
|
356
363
|
const totalEl = resOutput.totalElements.replace('$minValue=', '');
|
|
357
364
|
const pageParam = res['page'] ? res['page'] : options['page'];
|
|
358
365
|
const elRendered = res['size'] * pageParam;
|
|
@@ -392,4 +399,4 @@ export class PaginationUtils {
|
|
|
392
399
|
return res;
|
|
393
400
|
}
|
|
394
401
|
}
|
|
395
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhcmlhYmxlcy9zcmMvdXRpbC92YXJpYWJsZS9wYWdpbmF0aW9uLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUkvQyxNQUFNLE9BQU8sZUFBZTtJQUN4Qjs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxjQUFjO1FBQ25FLGFBQWEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZDLHdEQUF3RDtZQUN4RCxJQUFJLFVBQVUsQ0FBQztZQUNmLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEUsVUFBVSxHQUFHLFFBQVEsQ0FBQztZQUMxQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUN4QixDQUFDO1lBQ0QsNERBQTREO1lBQzVELDBIQUEwSDtZQUMxSCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbEUsT0FBTyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELENBQUM7aUJBQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxPQUFPLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxVQUFV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Qy9FLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGptZXNwYXRoIH0gZnJvbSAnQG1ldHJpY2hvci9qbWVzcGF0aCc7XG5cbmRlY2xhcmUgY29uc3QgXztcblxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25VdGlscyB7XG4gICAgLyoqXG4gICAgICogTW9kaWZpZXMgdGhlIHF1ZXJ5IHZhbHVlcyB3aXRoIHRoZSBwYWdpbmF0aW9uIGluZm8gd2hpY2ggaXMgcmV0cmlldmVkIGZyb20gdGhlIHByZXZpb3VzIEFQSSByZXNwb25zZS5cbiAgICAgKiBAcGFyYW0gdmFyaWFibGUgd2l0aGhvbGRzIHZhcmlhYmxlIGluZm9ybWF0aW9uIFxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25JbmZvIGhhcyBtZXRhZGF0YSBvZiB0aGUgdmFyaWFibGUgXG4gICAgICogQHBhcmFtIHBhZ2luYXRpb25JbmZvIGhhcyBtZXRhZGF0YSBvZiB0aGUgdmFyaWFibGUgcGFnaW5hdGlvbiBkYXRhXG4gICAgICogQHJldHVybnMge3ZvaWR9IFRoaXMgbWV0aG9kIGRvZXMgbm90IHJldHVybiBhbnl0aGluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBzZXRQYWdpbmF0aW9uUXVlcnlQYXJhbXModmFyaWFibGUsIG9wZXJhdGlvbkluZm8sIHBhZ2luYXRpb25JbmZvKSB7XG4gICAgICAgIG9wZXJhdGlvbkluZm8ucGFyYW1ldGVycy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgLy8gcGFnaW5hdGlvbiBpbnB1dCBpbmZvcm1hdGlvbiB2YXJpZXMgYmFzZWQgb24gdGhlIHR5cGVcbiAgICAgICAgICAgIGxldCBpbnB1dFBhcmFtO1xuICAgICAgICAgICAgaWYgKHBhZ2luYXRpb25JbmZvLnR5cGUgPT09ICdvZmZzZXQnIHx8IHBhZ2luYXRpb25JbmZvLmlucHV0Lm9mZnNldCkge1xuICAgICAgICAgICAgICAgIGlucHV0UGFyYW0gPSAnb2Zmc2V0JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5wdXRQYXJhbSA9ICdwYWdlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG1vZGlmaWVzIHF1ZXJ5IHZhbHVlcyBiYXNlZCBvbiB0aGUgcGFnaW5hdGlvbiBvZiB2YXJpYWJsZVxuICAgICAgICAgICAgLy8gY29tcGFyZSBwYXJhbWV0ZXIgbmFtZSB3aXRoIHRoZSBpbnB1dCBwYXJhbWV0ZXIncyBzdGFydGluZyBuYW1pbmcga2V5IChleDogY2hhbm5lbGNvbnRleHQgaW4gY2hhbm5lbGNvbnRleHQucGFnaW5hdGlvbilcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgPT09IHBhZ2luYXRpb25JbmZvLmlucHV0W2lucHV0UGFyYW1dLnNwbGl0KCcuJylbMF0pIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNhbXBsZVZhbHVlID0gdmFyaWFibGUucGFnaW5hdGlvblsncGFnZSddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50Lm5hbWUgPT09IHBhZ2luYXRpb25JbmZvLmlucHV0LnNpemUuc3BsaXQoJy4nKVswXSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2FtcGxlVmFsdWUgPSB2YXJpYWJsZS5wYWdpbmF0aW9uWydzaXplJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgcGFnaW5hdGlvbiBvbiB0aGUgdmFyaWFibGUgYmFzZWQgb24gdGhlIHJlc3BvbnNlIG9mIHRoZSB0cmlnZ2VyZWQgYXBpIGNhbGwuXG4gICAgICogQHBhcmFtIHZhcmlhYmxlIHdpdGhob2xkcyB2YXJpYWJsZSBpbmZvcm1hdGlvbiBcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2UgaGFzIGRhdGEgb2YgdGhlIGFwaSBjYWxsJ3MgcmVzcG9uc2VcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBoYXMgaW5mbyBvZiB0aGUgYXBpJ3MgcXVlcnkgcGFyYW1zXG4gICAgICogQHJldHVybnMge3ZvaWR9IFRoaXMgbWV0aG9kIGRvZXMgbm90IHJldHVybiBhbnl0aGluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBzZXRWYXJpYWJsZVBhZ2luYXRpb24odmFyaWFibGUsIHJlc3BvbnNlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghdmFyaWFibGUucGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBlbXB0eTogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsnc2l6ZSddID0gcmVzcG9uc2Uuc2l6ZTtcbiAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsncGFnZSddID0gIHJlc3BvbnNlLnBhZ2UgfHwgMDtcbiAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsndG90YWxFbGVtZW50cyddID0gcmVzcG9uc2UudG90YWxFbGVtZW50cztcbiAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsnbnVtYmVyT2ZFbGVtZW50cyddID0gdmFyaWFibGUucGFnaW5hdGlvblsnc2l6ZSddO1xuICAgICAgICB2YXJpYWJsZS5wYWdpbmF0aW9uWydudW1iZXInXSA9ICBvcHRpb25zWydwYWdlJ10gPyBvcHRpb25zWydwYWdlJ10gLSAxIDogMDtcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWR1Y2UgdG90YWxQYWdlcyBmcm9tIHRvdGFsRWxlbWVudHMgYnkgc2l6ZS5cbiAgICAgICAgICogSWYgdGhlIHRvdGFsIGVsZW1lbnRzIGFyZSBldmVubHkgc3BsaXQgYW1vbmcgdGhlIHBhZ2VzLCBhc3NpZ24gdGhlIHNhbWUgdG8gdG90YWxQYWdlc1xuICAgICAgICAgKiBFbHNlIGFzc2lnbiB0b3RhbFBhZ2VzICsgMVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsndG90YWxQYWdlcyddID0gIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3RvdGFsRWxlbWVudHMnXSAvIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3NpemUnXTtcbiAgICAgICAgaWYgKHZhcmlhYmxlLnBhZ2luYXRpb25bJ3RvdGFsRWxlbWVudHMnXSAlIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3NpemUnXSA9PT0gMCkge1xuICAgICAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsndG90YWxQYWdlcyddID0gcGFyc2VJbnQodmFyaWFibGUucGFnaW5hdGlvblsndG90YWxQYWdlcyddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3RvdGFsUGFnZXMnXSA9IHBhcnNlSW50KHZhcmlhYmxlLnBhZ2luYXRpb25bJ3RvdGFsUGFnZXMnXSkgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgcGFnaW5hdGlvbiB0eXBlIGlzIGN1cnNvciwgZmlsbCBuZXh0ICYgcHJldlxuICAgICAgICBpZiAocmVzcG9uc2UubmV4dCkge1xuICAgICAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsnbmV4dCddID0gcmVzcG9uc2UubmV4dDtcbiAgICAgICAgICAgIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3ByZXYnXSA9IHJlc3BvbnNlLnByZXY7XG4gICAgICAgICAgICB2YXJpYWJsZS5wYWdpbmF0aW9uWydsYXN0J10gPSByZXNwb25zZS5uZXh0ID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsnZmlyc3QnXSA9IHJlc3BvbnNlLnByZXYgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXJpYWJsZS5wYWdpbmF0aW9uWydmaXJzdCddID0gdmFyaWFibGUucGFnaW5hdGlvblsncGFnZSddIDw9IDEgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAvLyBjYWxjdWxhdGUgbGFzdCBiYXNlZCBvbiBjdXJyZW50IHBhZ2UgaW5kZXggYWdhaW5zdCB0b3RhbCBwYWdlc1xuICAgICAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsnbGFzdCddID0gcmVzcG9uc2UuaGFzTW9yZUl0ZW1zID09PSAnJyA/ICEodmFyaWFibGUucGFnaW5hdGlvblsncGFnZSddIDwgdmFyaWFibGUucGFnaW5hdGlvblsndG90YWxQYWdlcyddKSA6ICFyZXNwb25zZS5oYXNNb3JlSXRlbXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlcyB0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiBwYWdpbmF0aW9uIG1ldGFkYXRhJ3Mgb3V0cHV0XG4gICAgICogQHBhcmFtIGl0ZW0gaGFzIHZhbHVlIG9mIGVhY2gga2V5IHdoaWNoIGlzIGluc2lkZSBvdXRwdXQgcGFnaW5hdGlvbiBtZXRhZGF0YVxuICAgICAqIEBwYXJhbSByZXNwb25zZSBoYXMgZGF0YSBvZiB0aGUgYXBpIGNhbGwncyByZXNwb25zZVxuICAgICAqIEBwYXJhbSByZXNIZWFkZXJzIGhhcyBkYXRhIG9mIHRoZSBhcGkgY2FsbCdzIHJlc3BvbnNlIGhlYWRlcnNcbiAgICAgKiBAcGFyYW0gcmVzIGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBvZiBwYWdpbmF0aW9uIHdoaWNoIGhhcyB0byBiZSBzdG9yZWQgb24gdGhlIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIGtleSBoYXMga2V5IG5hbWUgYWdhaW5zdCB3aGljaCBkYXRhIGhhcyB0byBiZSBzdG9yZWQgaW4gcGFnaW5hdGlvbiBcbiAgICAgKiBAcmV0dXJucyB7dm9pZH0gVGhpcyBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nXG4gICAgICovXG4gICAgc3RhdGljIHNldFBhZ2luYXRpb25JdGVtcyhpdGVtLCByZXNwb25zZSwgcmVzLCBrZXksIHJlc0hlYWRlcnMpIHtcbiAgICAgICAgLy8gaWYgdGhlIGl0ZW0gaGFzIGJvZHksIHJlc29sdmUgdGhlIGV4cHJlc3Npb24gYWdhaW5zdCB0aGUgcmVzcG9uc2VcbiAgICAgICAgaWYgKF8uc3RhcnRzV2l0aChpdGVtLCAnJGJvZHknKSkge1xuICAgICAgICAgICAgY29uc3QgYm9keUtleSA9IGl0ZW0ucmVwbGFjZSgnJGJvZHkuJywgJycpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNba2V5XSA9IGptZXNwYXRoLnNlYXJjaChyZXNwb25zZSwgYm9keUtleSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7aXRlbX0gZXhwcmVzc2lvbiBuZWVkcyB0byBiZSBjb3JyZWN0ZWQgYXMgcGVyIEpNRVMgZ3VpZGVsaW5lc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKF8uc3RhcnRzV2l0aChpdGVtLCAnJGhlYWRlcicpKSB7IC8vIGlmIHRoZSBpdGVtIGhhcyBoZWFkZXIsIHJlc29sdmUgdGhlIGV4cHJlc3Npb24gYWdhaW5zdCB0aGUgcmVzcG9uc2UgaGVhZGVycyBcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcktleSA9IGl0ZW0ucmVwbGFjZSgnJGhlYWRlci4nLCAnJyk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gICg8YW55Pk9iamVjdCkuZnJvbUVudHJpZXMocmVzSGVhZGVycy5oZWFkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlclBhcmFtcyA9IGhlYWRlcktleS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNba2V5XSA9IGptZXNwYXRoLnNlYXJjaChoZWFkZXJzLCBoZWFkZXJQYXJhbXNbMF0udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7aXRlbX0gZXhwcmVzc2lvbiBuZWVkcyB0byBiZSBjb3JyZWN0ZWQgYXMgcGVyIEpNRVMgZ3VpZGVsaW5lc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc1trZXldPy5sZW5ndGgpIHsgXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlclZhbCA9IHJlc1trZXldLmpvaW4oKTtcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyUGFyYW1zLmxlbmd0aCA9PT0gMSkgeyBcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIElmIHRoZSBoZWFkZXJQYXJhbXMgaGFzIG9ubHkgMSBrZXkgKHdoaWNoIGlzIG5vdCBhbiBvYmplY3QpIG5hbWUgYXNzaW5nIGhlYWRlclZhbCB0byB0aGUgcmVzW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gaGVhZGVyVmFsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7IFxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSWYgdGhlIGhlYWRlclBhcmFtcyBoYXMgbW9yZSB0aGFuIDEga2V5IChhbiBvYmplY3QpLCBwYXJzZSB0aGUgc3RyaW5naWZpZWQgaGVhZGVyVmFsIHdoaWNoIGlzIGFuIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBSZXNvbHZlIHRoZSBleHByZXNzaW9uIGFnYWluc3QgaGVhZGVyVmFsIG9iamVjdCBhbWQgYXNzaWduIGl0IHRvIHJlc1trZXldXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBsZXQga2V5TmFtZSA9IGhlYWRlclBhcmFtcy5zbGljZSgxKS5qb2luKCcuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlclJlc3AgPSBKU09OLnBhcnNlKGhlYWRlclZhbCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwZWNpYWxDaGFyID0gL1shQCMkJV4mKigpK1xcPVxcW1xcXXt9Oyc6XCJcXFxcfCw8PlxcLz9dKy87XG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGVjaWFsQ2hhci50ZXN0KGtleU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBrZXkgbmFtZSBoYXMgZXhwcmVzc2lvbiAoZXg6IGNvbXBhcmlzc2lvbiBleHByZXNzaW9uKSBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCByb290IGtleSBuYW1lIHRvIGtleU5hbWUgZm9yIEpNRVMgdG8gcmVzb2x2ZSB0aGUgZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAga2V5TmFtZSA9ICdoZWFkZXJSZXNwLicgKyBrZXlOYW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IGptZXNwYXRoLnNlYXJjaChoZWFkZXJSZXNwLCBrZXlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7aXRlbX0gZXhwcmVzc2lvbiBuZWVkcyB0byBiZSBjb3JyZWN0ZWQgYXMgcGVyIEpNRVMgZ3VpZGVsaW5lc2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBwYWdpbmF0aW9uIGluZm9ybWF0aW9uIG9mIHRoZSBzZXJ2aWNlIGJhc2VkIG9uIGl0cyBleGlzdGVuY2Ugb24gc3dhZ2dlciBvciBvbiB0aGUgdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gdmFyaWFibGUgd2l0aGhvbGRzIHZhcmlhYmxlIGluZm9ybWF0aW9uIFxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25JbmZvIGhhcyBtZXRhZGF0YSBvZiB0aGUgdmFyaWFibGUgXG4gICAgICogQHJldHVybnMge29iamVjdH0gVGhpcyBtZXRob2QgcmV0dXJuIHBhZ2luYXRpb24gbWV0YWRhdGFcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UGFnaW5hdGlvbkluZm8ob3BlcmF0aW9uSW5mbywgdmFyaWFibGUpIHtcbiAgICAgICAgaWYgKG9wZXJhdGlvbkluZm8/LnBhZ2luYXRpb25JbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5mby5wYWdpbmF0aW9uSW5mbztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZS5fcGFnaW5hdGlvbkNvbmZpZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBxdWVyeSBwYXJhbXMgd2l0aCB0aGUgcGFnaW5hdGlvbiBpbmZvLCBpZiBwYWdpbmF0aW9uIG1ldGFkYXRhIGlzIHByZXNlbnQgaW4gcXVlcnkgcGFyYW1zXG4gICAgICogQHBhcmFtIHZhcmlhYmxlIHdpdGhob2xkcyB2YXJpYWJsZSBpbmZvcm1hdGlvbiBcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uSW5mbyBoYXMgbWV0YWRhdGEgb2YgdGhlIHZhcmlhYmxlIFxuICAgICAqIEBwYXJhbSBvcHRpb25zIGhhcyBpbmZvIG9mIHRoZSBhcGkncyBxdWVyeSBwYXJhbXNcbiAgICAgKiBAcmV0dXJucyB7dm9pZH0gVGhpcyBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nXG4gICAgICovXG4gICAgc3RhdGljIGNoZWNrUGFnaW5hdGlvbkF0UXVlcnkob3BlcmF0aW9uSW5mbywgdmFyaWFibGUsIG9wdGlvbnMpIHsgICAgICAgIFxuICAgICAgICBjb25zdCBwYWdpbmF0aW9uSW5mbyA9IHRoaXMuZ2V0UGFnaW5hdGlvbkluZm8ob3BlcmF0aW9uSW5mbywgdmFyaWFibGUpO1xuICAgICAgICAvLyBJZiBwYWdlIGlzIG5vdCBmaXJzdCwgcGFnaW5hdGlvbiBpcyBwcmVzZW50IG9uIHRoZSB2YXJpYWJsZSBhbmQgcGFnaW5hdGlvbkluZm8ncyBpbnB1dCBtZXRhIGhhcyBzaXplIHNldCBwYWdpbmF0aW9uIGluIHF1ZXJ5IHBhcmFtc1xuICAgICAgICBjb25zdCBoYXNQYWdpbmF0aW9uID0gb3B0aW9ucyAmJiBvcHRpb25zWydwYWdlJ10gJiYgcGFnaW5hdGlvbkluZm8/LmlucHV0LnNpemUgJiYgdmFyaWFibGUucGFnaW5hdGlvbjsgICAgXG4gICAgICAgIGlmICghaGFzUGFnaW5hdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGlucHV0UGFyYW07XG4gICAgICAgIC8vIGlmIHBhZ2luYXRpb24gdHlwZSBpcyBvZmZzZXQsIGFzc3NpZ24gaW5wdXRQYXJhbSB0byBvZmZzZXQgZWxzZSBwYWdlXG4gICAgICAgIGlmIChwYWdpbmF0aW9uSW5mby50eXBlID09PSAnb2Zmc2V0JyB8fCBwYWdpbmF0aW9uSW5mby5pbnB1dC5vZmZzZXQpIHtcbiAgICAgICAgICAgIGlucHV0UGFyYW0gPSAnb2Zmc2V0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0UGFyYW0gPSAncGFnZSc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFnaW5hdGlvbkluZm8uaW5wdXRbaW5wdXRQYXJhbV0uc3BsaXQoJy4nKVswXTsgXG4gICAgICAgIGNvbnN0IHBhcmFtT2JqID0gXy5maW5kKG9wZXJhdGlvbkluZm8ucGFyYW1ldGVycywgZnVuY3Rpb24ob2JqKSB7IHJldHVybiBvYmoubmFtZSA9PT0gcGFyYW1OYW1lIH0pOyAgIFxuICAgICAgICAvLyBjaGVjayBpZiB0aGUgdmFyaWFibGUgaGFzIHF1ZXJ5IHBhcmFtcyBhbmQgdGhleSBhcmUgbm90IGVtcHR5XG4gICAgICAgIGlmICghXy5pc0VtcHR5KHZhcmlhYmxlLmRhdGFCaW5kaW5nKSAmJiBwYXJhbU9iaiAmJiBwYXJhbU9iai5wYXJhbWV0ZXJUeXBlID09PSAncXVlcnknKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZvciBwYWdpbmF0aW9uIHR5cGUgb3RoZXIgdGhhbiBvZmZzZXQsIGFzc2lnbiBwYWdlIHdoaWNoIGlzIHJlY2lldmVkIGZyb20gb3B0aW9uc1xuICAgICAgICAgICAgICogRm9yIG9mZnNldCB0eXBlLCBjYWxjdWxhdGUgcGFnZSBmcm9tIHNpemUgYW5kIG9wdGlvbnNbcGFnZV1cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCFwYWdpbmF0aW9uSW5mby5vdXRwdXQ/LnBhZ2UgJiYgcGFnaW5hdGlvbkluZm8udHlwZSAhPT0gJ29mZnNldCcpIHtcbiAgICAgICAgICAgICAgICB2YXJpYWJsZS5wYWdpbmF0aW9uWydwYWdlJ10gPSBvcHRpb25zWydwYWdlJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3BhZ2UnXSA9IHRoaXMuZ2V0T2Zmc2V0SW5mbyh2YXJpYWJsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25RdWVyeVBhcmFtcyh2YXJpYWJsZSwgb3BlcmF0aW9uSW5mbywgcGFnaW5hdGlvbkluZm8pOyAgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWR1Y2VzIHRoZSBvZmZzZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2l6ZSBhbmQgcGFnZSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gdmFyaWFibGUgd2l0aGhvbGRzIHZhcmlhYmxlIGluZm9ybWF0aW9uIFxuICAgICAqIEBwYXJhbSBvcHRpb25zIGhhcyBpbmZvIG9mIHRoZSBhcGkncyBxdWVyeSBwYXJhbXNcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIHRoZSBuZXh0IG9mZnNldCBudW1iZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0T2Zmc2V0SW5mbyh2YXJpYWJsZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdmFyaWFibGUucGFnaW5hdGlvblsnc2l6ZSddICogKG9wdGlvbnNbJ3BhZ2UnXSA/IChvcHRpb25zWydwYWdlJ10gLSAxKSA6IDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgUGFnaW5hdGlvbiBkYXRhIG9uIHRoZSByZXF1ZXN0IGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIHZhcmlhYmxlIHdpdGhob2xkcyB2YXJpYWJsZSBpbmZvcm1hdGlvbiBcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uSW5mbyBoYXMgbWV0YWRhdGEgb2YgdGhlIHZhcmlhYmxlIFxuICAgICAqIEBwYXJhbSBvcHRpb25zIGhhcyBpbmZvIG9mIHRoZSBhcGkncyBxdWVyeSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gcGFnaW5hdGlvbkluZm8gaGFzIHBhZ2luYXRpb24gaW5mb3JtYXRpb24gb2YgdGhlIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIGhlYWRlcnMgaGFzIHJlcXVlc3QgaGVhZGVyc1xuICAgICAqIEBwYXJhbSByZXF1ZXN0Qm9keSBoYXMgcmVxdWVzdCBib2R5XG4gICAgICogQHBhcmFtIHVybCBoYXMgcmVxdWVzdCB1cmxcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIHRoZSByZXF1ZXN0IG9iamVjdCB3aGljaCBoYXMgcGFnaW5hdGlvbiBpbmZvXG4gICAgICovXG4gICAgc3RhdGljIHNldFBhZ2luYXRpb25BdFJlcShwYWdpbmF0aW9uSW5mbywgb3BlcmF0aW9uSW5mbywgdmFyaWFibGUsIGhlYWRlcnMsIHJlcXVlc3RCb2R5LCB1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHJlcU9iaiA9IHt9O1xuICAgICAgICBsZXQgaW5wdXRQYXJhbTtcbiAgICAgICAgbGV0IHJlc09iaiA9IHt9O1xuICAgICAgICAvLyBwYWdpbmF0aW9uIGlucHV0IGluZm9ybWF0aW9uIHZhcmllcyBiYXNlZCBvbiB0aGUgdHlwZVxuICAgICAgICBpZiAocGFnaW5hdGlvbkluZm8udHlwZSA9PT0gJ29mZnNldCcgfHwgcGFnaW5hdGlvbkluZm8uaW5wdXQub2Zmc2V0KSB7XG4gICAgICAgICAgICBpbnB1dFBhcmFtID0gJ29mZnNldCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dFBhcmFtID0gJ3BhZ2UnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtTmFtZSA9IHBhZ2luYXRpb25JbmZvLmlucHV0W2lucHV0UGFyYW1dLnNwbGl0KCcuJylbMF07IFxuICAgICAgICAvLyBjaGVjayBpZiBwYXJhbU5hbWUgaXMgcHJlc2VudCBpbiBwYXJhbWV0ZXJzIG9mIG9wZXJhdGlvbiBpbmZvIFxuICAgICAgICBjb25zdCBwYXJhbU9iaiA9IF8uZmluZChvcGVyYXRpb25JbmZvLnBhcmFtZXRlcnMsIGZ1bmN0aW9uKG9iaikgeyByZXR1cm4gb2JqLm5hbWUgPT09IHBhcmFtTmFtZSB9KTsgXG4gICAgICAgIC8vIHNldCBwYWdlL29mZnNldCBhbmQgc2l6ZSBmcm9tIHBhZ2luYXRpb24gaWYgbWF0Y2hlZCBwYXJhbWV0ZXIncyB0eXBlIGlzIGhlYWRlciAgXG4gICAgICAgIGlmIChwYXJhbU9iaj8ucGFyYW1ldGVyVHlwZSA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgICAgIF8uc2V0KHJlcU9iaiwgcGFnaW5hdGlvbkluZm8uaW5wdXRbaW5wdXRQYXJhbV0sIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3BhZ2UnXSk7XG4gICAgICAgICAgICBfLnNldChyZXFPYmosIHBhZ2luYXRpb25JbmZvLmlucHV0LnNpemUsIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3NpemUnXSk7XG4gICAgICAgICAgICBoZWFkZXJzW3BhcmFtTmFtZV0gPSBKU09OLnN0cmluZ2lmeShyZXFPYmpbcGFyYW1OYW1lXSk7XG4gICAgICAgICAgICByZXNPYmpbJ2hlYWRlcnMnXSA9IGhlYWRlcnM7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1PYmo/LnBhcmFtZXRlclR5cGUgPT09ICdib2R5JykgeyBcbiAgICAgICAgICAgIC8vIHNldCBwYWdlL29mZnNldCBhbmQgc2l6ZSBmcm9tIHBhZ2luYXRpb24gaWYgbWF0Y2hlZCBwYXJhbWV0ZXIncyB0eXBlIGlzIGJvZHkgXG4gICAgICAgICAgICAvLyBhc3NpZ24gYm9keVZhbCB0byB1cGRhdGVkIHBhZ2luYXRpb24gaW5mbyBvYmplY3RcbiAgICAgICAgICAgIGNvbnN0IGJvZHlWYWwgPSBKU09OLnBhcnNlKHBhcmFtT2JqLnNhbXBsZVZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlQYXJhbSA9IHBhZ2luYXRpb25JbmZvLmlucHV0W2lucHV0UGFyYW1dLnNwbGl0KCcuJylbMV1cbiAgICAgICAgICAgIGlmIChib2R5VmFsICYmIGJvZHlWYWxbYm9keVBhcmFtXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0Qm9keVBhcmFtID0gcGFnaW5hdGlvbkluZm8uaW5wdXRbaW5wdXRQYXJhbV0uc3BsaXQoJy4nKS5zcGxpY2UoMSkuam9pbignLicpOyAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFBhcmFtICE9PSAnb2Zmc2V0JykgeyBcbiAgICAgICAgICAgICAgICAgICAgXy5zZXQocmVxT2JqLCBpbnB1dEJvZHlQYXJhbSwgdmFyaWFibGUucGFnaW5hdGlvblsncGFnZSddKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfLnNldChyZXFPYmosIGlucHV0Qm9keVBhcmFtLCB0aGlzLmdldE9mZnNldEluZm8odmFyaWFibGUsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXy5zZXQocmVxT2JqLCBwYWdpbmF0aW9uSW5mby5pbnB1dC5zaXplLnNwbGl0KCcuJykuc3BsaWNlKDEpLmpvaW4oJy4nKSwgdmFyaWFibGUucGFnaW5hdGlvblsnc2l6ZSddKTtcbiAgICAgICAgICAgICAgICBib2R5VmFsW2JvZHlQYXJhbV0gPSAgcmVxT2JqW2JvZHlQYXJhbV07XG4gICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5VmFsKTtcbiAgICAgICAgICAgICAgICByZXNPYmpbJ3JlcXVlc3RCb2R5J10gPSByZXF1ZXN0Qm9keTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5wYWdpbmF0aW9uLm5leHQgJiYgcGFyYW1PYmopIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRm9yIGN1cnNvciB0eXBlIHBhZ2luYXRpb24sIGlmIHBhZ2luYXRpb24gaW5mbyBpcyBwcmVzZW50IGluIHRoZSBwYXRoIFxuICAgICAgICAgICAgICogQmFzZWQgb24gd2hldGhlciB1c2VyIGNsaWNrcyBvbiB0aGUgbmV4dCBvciBwcmV2IGJ1dHRvbiBtb2RpZnkgdGhlIHVybCBcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocGFyYW1PYmoucGFyYW1ldGVyVHlwZSA9PT0gJ3BhdGgnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gb3BlcmF0aW9uSW5mby5yZWxhdGl2ZVBhdGguc3BsaXQoJy8nKSxcbiAgICAgICAgICAgICAgICBwYXJhbUNvbmZpZyA9ICd7JyArIHBhcmFtT2JqLm5hbWUgKyAnfScsXG4gICAgICAgICAgICAgICAgcGFyYW1JbmRleCA9IHVybFBhcmFtcy5pbmRleE9mKHBhcmFtQ29uZmlnKTtcbiAgICAgICAgICAgICAgICBsZXQgaW52b2tlVXJsO1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS5wYWdpbmF0aW9uLmlzTmV4dCkge1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VVcmwgPSB2YXJpYWJsZS5wYWdpbmF0aW9uLm5leHQuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VVcmwgPSB2YXJpYWJsZS5wYWdpbmF0aW9uLnByZXYuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgdXJsUGF0aFBhcm1hcztcbiAgICAgICAgICAgICAgICBsZXQgdXJsUGF0aDtcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uSW5mby5kaXJlY3RQYXRoKSB7IC8vIEZvciBkaXJlY3QgcGF0aCwgYXMgdXJsIGhhcyBob3N0bmFtZSwgZGVyaXZhdGUgcGF0aG5hbWUgdXNpbmcgVVJMIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICB1cmxQYXRoID0gbmV3IFVSTCh1cmwpO1xuICAgICAgICAgICAgICAgICAgICB1cmxQYXRoUGFybWFzID0gdXJsUGF0aC5wYXRobmFtZS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICB1cmxQYXRoUGFybWFzW3BhcmFtSW5kZXhdID0gaW52b2tlVXJsW3BhcmFtSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICB1cmxQYXRoLnBhdGhuYW1lID0gdXJsUGF0aFBhcm1hcy5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHVybFBhdGguaHJlZjtcbiAgICAgICAgICAgICAgICAgICAgcmVzT2JqWyd1cmwnXSA9IHVybDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBFbHNlIG1vZGlmeSB0aGUgdXJsIHdpdGggaW5kZXggYXMgKzEgKGZvbGxvd2luZyBwcm94eSBwYXR0ZXJuKVxuICAgICAgICAgICAgICAgICAgICB1cmxQYXRoUGFybWFzID0gdXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgICAgIHVybFBhdGhQYXJtYXNbcGFyYW1JbmRleCArIDFdID0gaW52b2tlVXJsW3BhcmFtSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmxQYXRoUGFybWFzLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzT2JqWyd1cmwnXSA9IHVybDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1PYmoucGFyYW1ldGVyVHlwZSA9PT0gJ3F1ZXJ5Jykge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGb3IgY3Vyc29yIHR5cGUgcGFnaW5hdGlvbiwgaWYgcGFnaW5hdGlvbiBpbmZvIGlzIHByZXNlbnQgaW4gdGhlIHF1ZXJ5IFxuICAgICAgICAgICAgICogQmFzZWQgb24gd2hldGhlciB1c2VyIGNsaWNrcyBvbiB0aGUgbmV4dCBvciBwcmV2IGJ1dHRvbiBtb2RpZnkgdGhlIHVybCdzIHF1ZXJ5IHBhcmFtc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gdXJsLnNwbGl0KCc/Jyk7XG4gICAgICAgICAgICAgICAgbGV0IGludm9rZVVybDtcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUucGFnaW5hdGlvbi5pc05leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVXJsID0gdmFyaWFibGUucGFnaW5hdGlvbi5uZXh0LnNwbGl0KCc/Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVXJsID0gdmFyaWFibGUucGFnaW5hdGlvbi5wcmV2LnNwbGl0KCc/Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVybFBhcmFtc1sxXSA9IGludm9rZVVybFsxXTtcbiAgICAgICAgICAgICAgICB1cmwgPSB1cmxQYXJhbXMuam9pbignPycpO1xuICAgICAgICAgICAgICAgIHJlc09ialsndXJsJ10gPSB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc09iajsgICBcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYWdpbmF0aW9uIGluZm8gcmVjaWV2ZWQgZnJvbSBhcGkncyByZXNwb25zZSBpbiB0aGUgcmVzIG9iamVjdFxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25JbmZvIGhhcyBtZXRhZGF0YSBvZiB0aGUgdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gcmVzIGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBvZiBwYWdpbmF0aW9uIHdoaWNoIGhhcyB0byBiZSBzdG9yZWQgb24gdGhlIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIHBhcmFtTmFtZSBoYXMga2V5IG5hbWUgYWdhaW5zdCB3aGljaCBkYXRhIGhhcyB0byBiZSBzdG9yZWQgaW4gcGFnaW5hdGlvblxuICAgICAqIEBwYXJhbSB2YXJpYWJsZSB3aXRoaG9sZHMgdmFyaWFibGUgaW5mb3JtYXRpb24gXG4gICAgICogQHJldHVybnMge3ZvaWR9IFRoaXMgbWV0aG9kIGRvZXMgbm90IHJldHVybiBhbnl0aGluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBzZXRQYXJhbWV0ZXJWYWwocGFyYW1OYW1lLCByZXMsIG9wZXJhdGlvbkluZm8sIHZhcmlhYmxlKSB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25JbmZvID0gdGhpcy5nZXRQYWdpbmF0aW9uSW5mbyhvcGVyYXRpb25JbmZvLCB2YXJpYWJsZSk7XG4gICAgICAgIGNvbnN0IHBhcmFtID0gcGFnaW5hdGlvbkluZm8uaW5wdXRbcGFyYW1OYW1lXS5zcGxpdCgnLicpWzBdOyBcbiAgICAgICAgY29uc3Qgc2l6ZU9iaiA9IF8uZmluZChvcGVyYXRpb25JbmZvLnBhcmFtZXRlcnMsIGZ1bmN0aW9uKG9iaikgeyByZXR1cm4gb2JqLm5hbWUgPT09IHBhcmFtIH0pO1xuICAgICAgICByZXNbcGFyYW1OYW1lXSA9IF8ucmVzdWx0KHNpemVPYmosICdzYW1wbGVWYWx1ZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgcmVzIG9iamVjdCBmcm9tIHRoZSByZXNwb25zZSByZWNpZXZlZCBmcm9tIHRoZSBhcGkgdHJpZ2dlcmVkXG4gICAgICogQHBhcmFtIHZhcmlhYmxlIHdpdGhob2xkcyB2YXJpYWJsZSBpbmZvcm1hdGlvbiBcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uSW5mbyBoYXMgbWV0YWRhdGEgb2YgdGhlIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIHBhZ2luYXRpb25JbmZvIGhhcyBtZXRhZGF0YSBvZiB0aGUgdmFyaWFibGUncyBwYWdpbmF0aW9uXG4gICAgICogQHBhcmFtIHJlc3BvbnNlIGhhcyBkYXRhIG9mIHRoZSBhcGkgY2FsbCdzIHJlc3BvbnNlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgaGFzIGluZm8gb2YgdGhlIGFwaSdzIHF1ZXJ5IHBhcmFtc1xuICAgICAqIEBwYXJhbSByZXNIZWFkZXJzIGhhcyBkYXRhIG9mIHRoZSBhcGkgY2FsbCdzIHJlc3BvbnNlIGhlYWRlcnNcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3Qgd2hpY2ggaG9sZHMgdGhlIGluZm9ybWF0aW9uIG9mIHBhZ2luYXRpb24gd2hpY2ggaGFzIHRvIGJlIHN0b3JlZCBvbiB0aGUgdmFyaWFibGVcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2VuZXJhdGVQYWdpbmF0aW9uUmVzKG9wZXJhdGlvbkluZm8sIHBhZ2luYXRpb25JbmZvLCByZXNwb25zZSwgcmVzSGVhZGVycywgb3B0aW9ucywgdmFyaWFibGUpIHtcbiAgICAgICAgbGV0IHJlcyA9IHt9O1xuICAgICAgICBjb25zdCByZXNPdXRwdXQgPSBwYWdpbmF0aW9uSW5mby5vdXRwdXQ7XG4gICAgICAgIC8vIElmIHBhZ2luYXRpb24gdHlwZSBpcyBub3QgY3Vyc29yLCBjcmVhdGUgdGhlIGZvbGxvd2luZyBtZXRhZGF0YSBcbiAgICAgICAgaWYgKCFyZXNPdXRwdXQ/Lm5leHQpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgc2l6ZSBpcyBwcmVzZW50IGluIHRoZSBwYWdpbmF0aW9uJ3Mgb3V0cHV0IG1ldGFkYXRhIGRlZHVjZSBzaXplIGZyb20gYXBpJ3MgcmVzcG9uc2VcbiAgICAgICAgICAgICAqIEVsc2UgZGVkdWNlIHNpemUgZnJvbSB0aGUgcGFnaW5hdGlvbidzIGlucHV0IG1ldGFkYXRhIHNpemUga2V5XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChyZXNPdXRwdXQ/LnNpemUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25JdGVtcyhyZXNPdXRwdXQuc2l6ZSwgcmVzcG9uc2UsIHJlcywgJ3NpemUnLCByZXNIZWFkZXJzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7IFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1ldGVyVmFsKCdzaXplJywgcmVzLCBvcGVyYXRpb25JbmZvLCB2YXJpYWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHBhZ2UgaXMgcHJlc2VudCBpbiB0aGUgcGFnaW5hdGlvbidzIG91dHB1dCBtZXRhZGF0YSBkZWR1Y2UgcGFnZSBmcm9tIGFwaSdzIHJlc3BvbnNlXG4gICAgICAgICAgICAgKiBFbHNlIGRlZHVjZSBwYWdlIGZyb20gdGhlIHBhZ2luYXRpb24ncyBpbnB1dCBtZXRhZGF0YSBwYWdlIGtleVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAocmVzT3V0cHV0Py5wYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uSXRlbXMocmVzT3V0cHV0LnBhZ2UsIHJlc3BvbnNlLCByZXMsICdwYWdlJywgcmVzSGVhZGVycyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhZ2luYXRpb25JbmZvLnR5cGUgIT09ICdvZmZzZXQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXJWYWwoJ3BhZ2UnLCByZXMsIG9wZXJhdGlvbkluZm8sIHZhcmlhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdG90YWxFbGVtZW50cyBoYXMgJG1pblZhbHVlIGluIGl0LCBzZXQgdG90YWxFbGVtZW50cyBhcyAkbWluVmFsdWVcbiAgICAgICAgICAgICAqIElmIHRoZSByZW5kZXJlZCBlbGVtZW50cyBhcmUgZ3JlYXRlciB0aGFuICRtaW5WYWx1ZSwgc2V0IHRvdGFsRWxlbWVudHMgYXMgTnVtYmVyIG9mIGVsZW1lbnRzIHJlbmRlcmVkICsgMVxuICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICogSWYgdG90YWxFbGVtZW50cyBpcyBwcmVzZW50IGluIHRoZSBwYWdpbmF0aW9uJ3Mgb3V0cHV0IG1ldGFkYXRhIGRlZHVjZSB0b3RhbEVsZW1lbnRzIGZyb20gYXBpJ3MgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAqIElmIFBhZ2luYXRpb24gdHlwZSBpcyBvZmZzZXQsIGRlZHVjZSB0b3RhbEVsZW1lbnRzIGZyb20gc2l6ZSBhbmQgb3B0aW9uc1twYWdlXSBlbHNlIGRlZHVjZSBmcm9tIHNpemUgYW5kIHJlc1twYWdlXVxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoXy5zdGFydHNXaXRoKHJlc091dHB1dD8udG90YWxFbGVtZW50cywgJyRtaW5WYWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWxFbCA9IHJlc091dHB1dC50b3RhbEVsZW1lbnRzLnJlcGxhY2UoJyRtaW5WYWx1ZT0nLCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZVBhcmFtID0gcmVzWydwYWdlJ10gPyByZXNbJ3BhZ2UnXSA6IG9wdGlvbnNbJ3BhZ2UnXVxuICAgICAgICAgICAgICAgIGNvbnN0IGVsUmVuZGVyZWQgPSByZXNbJ3NpemUnXSAqIHBhZ2VQYXJhbTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLnBhZ2luYXRpb24gfHwgdmFyaWFibGUucGFnaW5hdGlvblsndG90YWxFbGVtZW50cyddID4gZWxSZW5kZXJlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbJ3RvdGFsRWxlbWVudHMnXSA9IHBhcnNlSW50KHRvdGFsRWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1sndG90YWxFbGVtZW50cyddID0gZWxSZW5kZXJlZCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNPdXRwdXQ/LnRvdGFsRWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25JdGVtcyhyZXNPdXRwdXQudG90YWxFbGVtZW50cywgcmVzcG9uc2UsIHJlcywgJ3RvdGFsRWxlbWVudHMnLCByZXNIZWFkZXJzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRpb25JbmZvLnR5cGUgPT09ICdvZmZzZXQnIHx8IHBhZ2luYXRpb25JbmZvLmlucHV0Lm9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbJ3RvdGFsRWxlbWVudHMnXSA9IChyZXNbJ3NpemUnXSAqIChvcHRpb25zWydwYWdlJ10gPyBvcHRpb25zWydwYWdlJ10gOiAxKSkgKyAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1sndG90YWxFbGVtZW50cyddID0gKHJlc1snc2l6ZSddICogcmVzWydwYWdlJ10pICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIGhhc01vcmVJdGVtcyBpcyBwcmVzZW50IGluIHRoZSBwYWdpbmF0aW9uJ3Mgb3V0cHV0IG1ldGFkYXRhIGRlZHVjZSBoYXNNb3JlSXRlbXMgZnJvbSBhcGkncyByZXNwb25zZVxuICAgICAgICAgICAgICogRWxzZSBhc3NpZ24gaXQgYXMgZW1wdHkgd2hpY2ggd2lsbCBiZSBjYWxjdWxhdGVkIGF0IHBhZ2luYXRpb24gb2JqZWN0IGdlbmVyYXRpb25cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHJlc091dHB1dD8uaGFzTW9yZUl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uSXRlbXMocmVzT3V0cHV0Lmhhc01vcmVJdGVtcywgcmVzcG9uc2UsIHJlcywgJ2hhc01vcmVJdGVtcycsIHJlc0hlYWRlcnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNbJ2hhc01vcmVJdGVtcyddID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVzT3V0cHV0KSB7IC8vIEZvciBjdXJzb3IgdHlwZSBwYWdpbmF0aW9uIHNldCBuZXh0IGFuZCBwcmV2IGtleXMgaW4gcmVzIG9iamVjdFxuICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uSXRlbXMocmVzT3V0cHV0Lm5leHQsIHJlc3BvbnNlLCByZXMsICduZXh0JywgcmVzSGVhZGVycyk7XG4gICAgICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25JdGVtcyhyZXNPdXRwdXQucHJldiwgcmVzcG9uc2UsIHJlcywgJ3ByZXYnLCByZXNIZWFkZXJzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn0iXX0=
|
|
402
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhcmlhYmxlcy9zcmMvdXRpbC92YXJpYWJsZS9wYWdpbmF0aW9uLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVqRSxNQUFNLE9BQU8sZUFBZTtJQUN4Qjs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxjQUFjO1FBQ25FLGFBQWEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZDLHdEQUF3RDtZQUN4RCxJQUFJLFVBQVUsQ0FBQztZQUNmLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEUsVUFBVSxHQUFHLFFBQVEsQ0FBQztZQUMxQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUN4QixDQUFDO1lBQ0QsNERBQTREO1lBQzVELDBIQUEwSDtZQUMxSCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbEUsT0FBTyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELENBQUM7aUJBQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxPQUFPLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU87UUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QixRQUFRLENBQUMsVUFBVSxHQUFHO2dCQUNsQixLQUFLLEVBQUUsS0FBSzthQUNmLENBQUM7UUFDTixDQUFDO1FBQ0QsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzVDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUksUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7UUFDbEQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQzlELFFBQVEsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0U7Ozs7V0FJRztRQUNILFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hHLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNFLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDO2FBQU0sQ0FBQztZQUNKLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQixRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDNUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzVDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDM0QsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNoRSxDQUFDO2FBQU0sQ0FBQztZQUNKLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQy9FLGlFQUFpRTtZQUNqRSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUM3SixDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVO1FBQzFELG9FQUFvRTtRQUNwRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUM7Z0JBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksMERBQTBELENBQUMsQ0FBQztZQUNwRixDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsOEVBQThFO1lBQ3BILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sT0FBTyxHQUFVLE1BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9ELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDO2dCQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN2RSxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLDBEQUEwRCxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUNELElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUNuQixJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDNUI7O3VCQUVHO29CQUNILEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQ3pCLENBQUM7cUJBQU0sQ0FBQztvQkFDSjs7O3VCQUdHO29CQUNILElBQUksT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN6QyxNQUFNLFdBQVcsR0FBRyxxQ0FBcUMsQ0FBQztvQkFDMUQsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQzVCLDJEQUEyRDt3QkFDM0Qsa0VBQWtFO3dCQUNsRSxPQUFPLEdBQUcsYUFBYSxHQUFHLE9BQU8sQ0FBQztvQkFDdEMsQ0FBQztvQkFDRCxJQUFJLENBQUM7d0JBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNwRCxDQUFDO29CQUFDLE1BQU0sQ0FBQzt3QkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSwwREFBMEQsQ0FBQyxDQUFDO29CQUNwRixDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsUUFBUTtRQUM1QyxJQUFJLGFBQWEsRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUNoQyxPQUFPLGFBQWEsQ0FBQyxjQUFjLENBQUM7UUFDeEMsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLE9BQU87UUFDMUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RSxzSUFBc0k7UUFDdEksTUFBTSxhQUFhLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ3RHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksVUFBVSxDQUFDO1FBQ2YsdUVBQXVFO1FBQ3ZFLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsRSxVQUFVLEdBQUcsUUFBUSxDQUFDO1FBQzFCLENBQUM7YUFBTSxDQUFDO1lBQ0osVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUN4QixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHO1lBQ3pELE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUE7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDSCxnRUFBZ0U7UUFDaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkY7OztlQUdHO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ25FLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xELENBQUM7aUJBQU0sQ0FBQztnQkFDSixRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMzRSxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTztRQUNsQyxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPO1FBQ2pHLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLFVBQVUsQ0FBQztRQUNmLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQix3REFBd0Q7UUFDeEQsSUFBSSxjQUFjLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xFLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDSixVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHO1lBQ3pELE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUE7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDSCxpRkFBaUY7UUFDakYsSUFBSSxRQUFRLEVBQUUsYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDM0UsR0FBRyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNoQyxDQUFDO2FBQU0sSUFBSSxRQUFRLEVBQUUsYUFBYSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzVDLCtFQUErRTtZQUMvRSxtREFBbUQ7WUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakQsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDaEUsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZGLElBQUksVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUMxQixHQUFHLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzdELENBQUM7cUJBQU0sQ0FBQztvQkFDSixHQUFHLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxDQUFDO2dCQUNELEdBQUcsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNuRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4QyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUN4QyxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7WUFDOUM7OztlQUdHO1lBRUgsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUNwQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFDdkQsV0FBVyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFDdkMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzVDLElBQUksU0FBUyxDQUFDO2dCQUNkLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDN0IsU0FBUyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztxQkFBTSxDQUFDO29CQUNKLFNBQVMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBRUQsSUFBSSxhQUFhLENBQUM7Z0JBQ2xCLElBQUksT0FBTyxDQUFDO2dCQUNaLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsMkVBQTJFO29CQUN2RyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3ZCLGFBQWEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDNUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDbEQsT0FBTyxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQyxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDbkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDeEIsQ0FBQztxQkFBTSxDQUFDLENBQUMsaUVBQWlFO29CQUN0RSxhQUFhLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDL0IsYUFBYSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3RELEdBQUcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUN4QixDQUFDO1lBRUwsQ0FBQztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ2hEOzs7bUJBR0c7Z0JBQ0MsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakMsSUFBSSxTQUFTLENBQUM7Z0JBQ2QsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUM3QixTQUFTLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osU0FBUyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztnQkFDRCxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN4QixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxRQUFRO1FBQzFELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkUsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHO1lBQ3hELE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUE7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsTUFBTSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUTtRQUMvRixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3hDLGtFQUFrRTtRQUNsRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ25COzs7ZUFHRztZQUNILElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMvRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0Q7OztlQUdHO1lBQ0gsSUFBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQy9FLENBQUM7aUJBQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQy9ELENBQUM7WUFDRDs7Ozs7OztrQkFPTTtZQUNOLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUM3RCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDO29CQUM1RSxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQUksU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNqRyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxjQUFjLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNsRSxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZGLENBQUM7cUJBQU0sQ0FBQztvQkFDSixHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO1lBQ0wsQ0FBQztZQUNEOzs7ZUFHRztZQUNILElBQUksU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMvRixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM3QixDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxrRUFBa0U7WUFDdEYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam1lc3BhdGggfSBmcm9tICdAbWV0cmljaG9yL2ptZXNwYXRoJztcbmltcG9ydCB7ZmluZCwgaXNFbXB0eSwgcmVzdWx0LCBzZXQsIHN0YXJ0c1dpdGh9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25VdGlscyB7XG4gICAgLyoqXG4gICAgICogTW9kaWZpZXMgdGhlIHF1ZXJ5IHZhbHVlcyB3aXRoIHRoZSBwYWdpbmF0aW9uIGluZm8gd2hpY2ggaXMgcmV0cmlldmVkIGZyb20gdGhlIHByZXZpb3VzIEFQSSByZXNwb25zZS5cbiAgICAgKiBAcGFyYW0gdmFyaWFibGUgd2l0aGhvbGRzIHZhcmlhYmxlIGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbkluZm8gaGFzIG1ldGFkYXRhIG9mIHRoZSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSBwYWdpbmF0aW9uSW5mbyBoYXMgbWV0YWRhdGEgb2YgdGhlIHZhcmlhYmxlIHBhZ2luYXRpb24gZGF0YVxuICAgICAqIEByZXR1cm5zIHt2b2lkfSBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0UGFnaW5hdGlvblF1ZXJ5UGFyYW1zKHZhcmlhYmxlLCBvcGVyYXRpb25JbmZvLCBwYWdpbmF0aW9uSW5mbykge1xuICAgICAgICBvcGVyYXRpb25JbmZvLnBhcmFtZXRlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIC8vIHBhZ2luYXRpb24gaW5wdXQgaW5mb3JtYXRpb24gdmFyaWVzIGJhc2VkIG9uIHRoZSB0eXBlXG4gICAgICAgICAgICBsZXQgaW5wdXRQYXJhbTtcbiAgICAgICAgICAgIGlmIChwYWdpbmF0aW9uSW5mby50eXBlID09PSAnb2Zmc2V0JyB8fCBwYWdpbmF0aW9uSW5mby5pbnB1dC5vZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dFBhcmFtID0gJ29mZnNldCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlucHV0UGFyYW0gPSAncGFnZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtb2RpZmllcyBxdWVyeSB2YWx1ZXMgYmFzZWQgb24gdGhlIHBhZ2luYXRpb24gb2YgdmFyaWFibGVcbiAgICAgICAgICAgIC8vIGNvbXBhcmUgcGFyYW1ldGVyIG5hbWUgd2l0aCB0aGUgaW5wdXQgcGFyYW1ldGVyJ3Mgc3RhcnRpbmcgbmFtaW5nIGtleSAoZXg6IGNoYW5uZWxjb250ZXh0IGluIGNoYW5uZWxjb250ZXh0LnBhZ2luYXRpb24pXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5uYW1lID09PSBwYWdpbmF0aW9uSW5mby5pbnB1dFtpbnB1dFBhcmFtXS5zcGxpdCgnLicpWzBdKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zYW1wbGVWYWx1ZSA9IHZhcmlhYmxlLnBhZ2luYXRpb25bJ3BhZ2UnXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5uYW1lID09PSBwYWdpbmF0aW9uSW5mby5pbnB1dC5zaXplLnNwbGl0KCcuJylbMF0pIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNhbXBsZVZhbHVlID0gdmFyaWFibGUucGFnaW5hdGlvblsnc2l6ZSddO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHBhZ2luYXRpb24gb24gdGhlIHZhcmlhYmxlIGJhc2VkIG9uIHRoZSByZXNwb25zZSBvZiB0aGUgdHJpZ2dlcmVkIGFwaSBjYWxsLlxuICAgICAqIEBwYXJhbSB2YXJpYWJsZSB3aXRoaG9sZHMgdmFyaWFibGUgaW5mb3JtYXRpb25cbiAgICAgKiBAcGFyYW0gcmVzcG9uc2UgaGFzIGRhdGEgb2YgdGhlIGFwaSBjYWxsJ3MgcmVzcG9uc2VcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBoYXMgaW5mbyBvZiB0aGUgYXBpJ3MgcXVlcnkgcGFyYW1zXG4gICAgICogQHJldHVybnMge3ZvaWR9IFRoaXMgbWV0aG9kIGRvZXMgbm90IHJldHVybiBhbnl0aGluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBzZXRWYXJpYWJsZVBhZ2luYXRpb24odmFyaWFibGUsIHJlc3BvbnNlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghdmFyaWFibGUucGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBlbXB0eTogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsnc2l6ZSddID0gcmVzcG9uc2Uuc2l6ZTtcbiAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsncGFnZSddID0gIHJlc3BvbnNlLnBhZ2UgfHwgMDtcbiAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsndG90YWxFbGVtZW50cyddID0gcmVzcG9uc2UudG90YWxFbGVtZW50cztcbiAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsnbnVtYmVyT2ZFbGVtZW50cyddID0gdmFyaWFibGUucGFnaW5hdGlvblsnc2l6ZSddO1xuICAgICAgICB2YXJpYWJsZS5wYWdpbmF0aW9uWydudW1iZXInXSA9ICBvcHRpb25zWydwYWdlJ10gPyBvcHRpb25zWydwYWdlJ10gLSAxIDogMDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogRGVkdWNlIHRvdGFsUGFnZXMgZnJvbSB0b3RhbEVsZW1lbnRzIGJ5IHNpemUuXG4gICAgICAgICAqIElmIHRoZSB0b3RhbCBlbGVtZW50cyBhcmUgZXZlbmx5IHNwbGl0IGFtb25nIHRoZSBwYWdlcywgYXNzaWduIHRoZSBzYW1lIHRvIHRvdGFsUGFnZXNcbiAgICAgICAgICogRWxzZSBhc3NpZ24gdG90YWxQYWdlcyArIDFcbiAgICAgICAgICovXG4gICAgICAgIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3RvdGFsUGFnZXMnXSA9ICB2YXJpYWJsZS5wYWdpbmF0aW9uWyd0b3RhbEVsZW1lbnRzJ10gLyB2YXJpYWJsZS5wYWdpbmF0aW9uWydzaXplJ107XG4gICAgICAgIGlmICh2YXJpYWJsZS5wYWdpbmF0aW9uWyd0b3RhbEVsZW1lbnRzJ10gJSB2YXJpYWJsZS5wYWdpbmF0aW9uWydzaXplJ10gPT09IDApIHtcbiAgICAgICAgICAgIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3RvdGFsUGFnZXMnXSA9IHBhcnNlSW50KHZhcmlhYmxlLnBhZ2luYXRpb25bJ3RvdGFsUGFnZXMnXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXJpYWJsZS5wYWdpbmF0aW9uWyd0b3RhbFBhZ2VzJ10gPSBwYXJzZUludCh2YXJpYWJsZS5wYWdpbmF0aW9uWyd0b3RhbFBhZ2VzJ10pICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHBhZ2luYXRpb24gdHlwZSBpcyBjdXJzb3IsIGZpbGwgbmV4dCAmIHByZXZcbiAgICAgICAgaWYgKHJlc3BvbnNlLm5leHQpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlLnBhZ2luYXRpb25bJ25leHQnXSA9IHJlc3BvbnNlLm5leHQ7XG4gICAgICAgICAgICB2YXJpYWJsZS5wYWdpbmF0aW9uWydwcmV2J10gPSByZXNwb25zZS5wcmV2O1xuICAgICAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsnbGFzdCddID0gcmVzcG9uc2UubmV4dCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgIHZhcmlhYmxlLnBhZ2luYXRpb25bJ2ZpcnN0J10gPSByZXNwb25zZS5wcmV2ID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsnZmlyc3QnXSA9IHZhcmlhYmxlLnBhZ2luYXRpb25bJ3BhZ2UnXSA8PSAxID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGxhc3QgYmFzZWQgb24gY3VycmVudCBwYWdlIGluZGV4IGFnYWluc3QgdG90YWwgcGFnZXNcbiAgICAgICAgICAgIHZhcmlhYmxlLnBhZ2luYXRpb25bJ2xhc3QnXSA9IHJlc3BvbnNlLmhhc01vcmVJdGVtcyA9PT0gJycgPyAhKHZhcmlhYmxlLnBhZ2luYXRpb25bJ3BhZ2UnXSA8IHZhcmlhYmxlLnBhZ2luYXRpb25bJ3RvdGFsUGFnZXMnXSkgOiAhcmVzcG9uc2UuaGFzTW9yZUl0ZW1zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgdGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gcGFnaW5hdGlvbiBtZXRhZGF0YSdzIG91dHB1dFxuICAgICAqIEBwYXJhbSBpdGVtIGhhcyB2YWx1ZSBvZiBlYWNoIGtleSB3aGljaCBpcyBpbnNpZGUgb3V0cHV0IHBhZ2luYXRpb24gbWV0YWRhdGFcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2UgaGFzIGRhdGEgb2YgdGhlIGFwaSBjYWxsJ3MgcmVzcG9uc2VcbiAgICAgKiBAcGFyYW0gcmVzSGVhZGVycyBoYXMgZGF0YSBvZiB0aGUgYXBpIGNhbGwncyByZXNwb25zZSBoZWFkZXJzXG4gICAgICogQHBhcmFtIHJlcyBob2xkcyB0aGUgaW5mb3JtYXRpb24gb2YgcGFnaW5hdGlvbiB3aGljaCBoYXMgdG8gYmUgc3RvcmVkIG9uIHRoZSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSBrZXkgaGFzIGtleSBuYW1lIGFnYWluc3Qgd2hpY2ggZGF0YSBoYXMgdG8gYmUgc3RvcmVkIGluIHBhZ2luYXRpb25cbiAgICAgKiBAcmV0dXJucyB7dm9pZH0gVGhpcyBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nXG4gICAgICovXG4gICAgc3RhdGljIHNldFBhZ2luYXRpb25JdGVtcyhpdGVtLCByZXNwb25zZSwgcmVzLCBrZXksIHJlc0hlYWRlcnMpIHtcbiAgICAgICAgLy8gaWYgdGhlIGl0ZW0gaGFzIGJvZHksIHJlc29sdmUgdGhlIGV4cHJlc3Npb24gYWdhaW5zdCB0aGUgcmVzcG9uc2VcbiAgICAgICAgaWYgKHN0YXJ0c1dpdGgoaXRlbSwgJyRib2R5JykpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlLZXkgPSBpdGVtLnJlcGxhY2UoJyRib2R5LicsICcnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzW2tleV0gPSBqbWVzcGF0aC5zZWFyY2gocmVzcG9uc2UsIGJvZHlLZXkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGAke2l0ZW19IGV4cHJlc3Npb24gbmVlZHMgdG8gYmUgY29ycmVjdGVkIGFzIHBlciBKTUVTIGd1aWRlbGluZXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGFydHNXaXRoKGl0ZW0sICckaGVhZGVyJykpIHsgLy8gaWYgdGhlIGl0ZW0gaGFzIGhlYWRlciwgcmVzb2x2ZSB0aGUgZXhwcmVzc2lvbiBhZ2FpbnN0IHRoZSByZXNwb25zZSBoZWFkZXJzXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJLZXkgPSBpdGVtLnJlcGxhY2UoJyRoZWFkZXIuJywgJycpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9ICAoPGFueT5PYmplY3QpLmZyb21FbnRyaWVzKHJlc0hlYWRlcnMuaGVhZGVycyk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJQYXJhbXMgPSBoZWFkZXJLZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzW2tleV0gPSBqbWVzcGF0aC5zZWFyY2goaGVhZGVycywgaGVhZGVyUGFyYW1zWzBdLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGAke2l0ZW19IGV4cHJlc3Npb24gbmVlZHMgdG8gYmUgY29ycmVjdGVkIGFzIHBlciBKTUVTIGd1aWRlbGluZXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNba2V5XT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlclZhbCA9IHJlc1trZXldLmpvaW4oKTtcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyUGFyYW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSWYgdGhlIGhlYWRlclBhcmFtcyBoYXMgb25seSAxIGtleSAod2hpY2ggaXMgbm90IGFuIG9iamVjdCkgbmFtZSBhc3NpbmcgaGVhZGVyVmFsIHRvIHRoZSByZXNba2V5XVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBoZWFkZXJWYWw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIElmIHRoZSBoZWFkZXJQYXJhbXMgaGFzIG1vcmUgdGhhbiAxIGtleSAoYW4gb2JqZWN0KSwgcGFyc2UgdGhlIHN0cmluZ2lmaWVkIGhlYWRlclZhbCB3aGljaCBpcyBhbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogUmVzb2x2ZSB0aGUgZXhwcmVzc2lvbiBhZ2FpbnN0IGhlYWRlclZhbCBvYmplY3QgYW1kIGFzc2lnbiBpdCB0byByZXNba2V5XVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleU5hbWUgPSBoZWFkZXJQYXJhbXMuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJSZXNwID0gSlNPTi5wYXJzZShoZWFkZXJWYWwpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGVjaWFsQ2hhciA9IC9bIUAjJCVeJiooKStcXD1cXFtcXF17fTsnOlwiXFxcXHwsPD5cXC8/XSsvO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbENoYXIudGVzdChrZXlOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYga2V5IG5hbWUgaGFzIGV4cHJlc3Npb24gKGV4OiBjb21wYXJpc3Npb24gZXhwcmVzc2lvbilcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCByb290IGtleSBuYW1lIHRvIGtleU5hbWUgZm9yIEpNRVMgdG8gcmVzb2x2ZSB0aGUgZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAga2V5TmFtZSA9ICdoZWFkZXJSZXNwLicgKyBrZXlOYW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IGptZXNwYXRoLnNlYXJjaChoZWFkZXJSZXNwLCBrZXlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7aXRlbX0gZXhwcmVzc2lvbiBuZWVkcyB0byBiZSBjb3JyZWN0ZWQgYXMgcGVyIEpNRVMgZ3VpZGVsaW5lc2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBwYWdpbmF0aW9uIGluZm9ybWF0aW9uIG9mIHRoZSBzZXJ2aWNlIGJhc2VkIG9uIGl0cyBleGlzdGVuY2Ugb24gc3dhZ2dlciBvciBvbiB0aGUgdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gdmFyaWFibGUgd2l0aGhvbGRzIHZhcmlhYmxlIGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbkluZm8gaGFzIG1ldGFkYXRhIG9mIHRoZSB2YXJpYWJsZVxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9IFRoaXMgbWV0aG9kIHJldHVybiBwYWdpbmF0aW9uIG1ldGFkYXRhXG4gICAgICovXG4gICAgc3RhdGljIGdldFBhZ2luYXRpb25JbmZvKG9wZXJhdGlvbkluZm8sIHZhcmlhYmxlKSB7XG4gICAgICAgIGlmIChvcGVyYXRpb25JbmZvPy5wYWdpbmF0aW9uSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluZm8ucGFnaW5hdGlvbkluZm87XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFyaWFibGUuX3BhZ2luYXRpb25Db25maWc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcXVlcnkgcGFyYW1zIHdpdGggdGhlIHBhZ2luYXRpb24gaW5mbywgaWYgcGFnaW5hdGlvbiBtZXRhZGF0YSBpcyBwcmVzZW50IGluIHF1ZXJ5IHBhcmFtc1xuICAgICAqIEBwYXJhbSB2YXJpYWJsZSB3aXRoaG9sZHMgdmFyaWFibGUgaW5mb3JtYXRpb25cbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uSW5mbyBoYXMgbWV0YWRhdGEgb2YgdGhlIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIG9wdGlvbnMgaGFzIGluZm8gb2YgdGhlIGFwaSdzIHF1ZXJ5IHBhcmFtc1xuICAgICAqIEByZXR1cm5zIHt2b2lkfSBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgY2hlY2tQYWdpbmF0aW9uQXRRdWVyeShvcGVyYXRpb25JbmZvLCB2YXJpYWJsZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBwYWdpbmF0aW9uSW5mbyA9IHRoaXMuZ2V0UGFnaW5hdGlvbkluZm8ob3BlcmF0aW9uSW5mbywgdmFyaWFibGUpO1xuICAgICAgICAvLyBJZiBwYWdlIGlzIG5vdCBmaXJzdCwgcGFnaW5hdGlvbiBpcyBwcmVzZW50IG9uIHRoZSB2YXJpYWJsZSBhbmQgcGFnaW5hdGlvbkluZm8ncyBpbnB1dCBtZXRhIGhhcyBzaXplIHNldCBwYWdpbmF0aW9uIGluIHF1ZXJ5IHBhcmFtc1xuICAgICAgICBjb25zdCBoYXNQYWdpbmF0aW9uID0gb3B0aW9ucyAmJiBvcHRpb25zWydwYWdlJ10gJiYgcGFnaW5hdGlvbkluZm8/LmlucHV0LnNpemUgJiYgdmFyaWFibGUucGFnaW5hdGlvbjtcbiAgICAgICAgaWYgKCFoYXNQYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW5wdXRQYXJhbTtcbiAgICAgICAgLy8gaWYgcGFnaW5hdGlvbiB0eXBlIGlzIG9mZnNldCwgYXNzc2lnbiBpbnB1dFBhcmFtIHRvIG9mZnNldCBlbHNlIHBhZ2VcbiAgICAgICAgaWYgKHBhZ2luYXRpb25JbmZvLnR5cGUgPT09ICdvZmZzZXQnIHx8IHBhZ2luYXRpb25JbmZvLmlucHV0Lm9mZnNldCkge1xuICAgICAgICAgICAgaW5wdXRQYXJhbSA9ICdvZmZzZXQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRQYXJhbSA9ICdwYWdlJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbU5hbWUgPSBwYWdpbmF0aW9uSW5mby5pbnB1dFtpbnB1dFBhcmFtXS5zcGxpdCgnLicpWzBdO1xuICAgICAgICBjb25zdCBwYXJhbU9iaiA9IGZpbmQob3BlcmF0aW9uSW5mby5wYXJhbWV0ZXJzLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLm5hbWUgPT09IHBhcmFtTmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIHZhcmlhYmxlIGhhcyBxdWVyeSBwYXJhbXMgYW5kIHRoZXkgYXJlIG5vdCBlbXB0eVxuICAgICAgICBpZiAoIWlzRW1wdHkodmFyaWFibGUuZGF0YUJpbmRpbmcpICYmIHBhcmFtT2JqICYmIHBhcmFtT2JqLnBhcmFtZXRlclR5cGUgPT09ICdxdWVyeScpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRm9yIHBhZ2luYXRpb24gdHlwZSBvdGhlciB0aGFuIG9mZnNldCwgYXNzaWduIHBhZ2Ugd2hpY2ggaXMgcmVjaWV2ZWQgZnJvbSBvcHRpb25zXG4gICAgICAgICAgICAgKiBGb3Igb2Zmc2V0IHR5cGUsIGNhbGN1bGF0ZSBwYWdlIGZyb20gc2l6ZSBhbmQgb3B0aW9uc1twYWdlXVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoIXBhZ2luYXRpb25JbmZvLm91dHB1dD8ucGFnZSAmJiBwYWdpbmF0aW9uSW5mby50eXBlICE9PSAnb2Zmc2V0Jykge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3BhZ2UnXSA9IG9wdGlvbnNbJ3BhZ2UnXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyaWFibGUucGFnaW5hdGlvblsncGFnZSddID0gdGhpcy5nZXRPZmZzZXRJbmZvKHZhcmlhYmxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvblF1ZXJ5UGFyYW1zKHZhcmlhYmxlLCBvcGVyYXRpb25JbmZvLCBwYWdpbmF0aW9uSW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWR1Y2VzIHRoZSBvZmZzZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2l6ZSBhbmQgcGFnZSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gdmFyaWFibGUgd2l0aGhvbGRzIHZhcmlhYmxlIGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgaGFzIGluZm8gb2YgdGhlIGFwaSdzIHF1ZXJ5IHBhcmFtc1xuICAgICAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgdGhlIG5leHQgb2Zmc2V0IG51bWJlclxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRPZmZzZXRJbmZvKHZhcmlhYmxlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZS5wYWdpbmF0aW9uWydzaXplJ10gKiAob3B0aW9uc1sncGFnZSddID8gKG9wdGlvbnNbJ3BhZ2UnXSAtIDEpIDogMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBQYWdpbmF0aW9uIGRhdGEgb24gdGhlIHJlcXVlc3QgaW5mb3JtYXRpb25cbiAgICAgKiBAcGFyYW0gdmFyaWFibGUgd2l0aGhvbGRzIHZhcmlhYmxlIGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbkluZm8gaGFzIG1ldGFkYXRhIG9mIHRoZSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIGhhcyBpbmZvIG9mIHRoZSBhcGkncyBxdWVyeSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gcGFnaW5hdGlvbkluZm8gaGFzIHBhZ2luYXRpb24gaW5mb3JtYXRpb24gb2YgdGhlIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIGhlYWRlcnMgaGFzIHJlcXVlc3QgaGVhZGVyc1xuICAgICAqIEBwYXJhbSByZXF1ZXN0Qm9keSBoYXMgcmVxdWVzdCBib2R5XG4gICAgICogQHBhcmFtIHVybCBoYXMgcmVxdWVzdCB1cmxcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIHRoZSByZXF1ZXN0IG9iamVjdCB3aGljaCBoYXMgcGFnaW5hdGlvbiBpbmZvXG4gICAgICovXG4gICAgc3RhdGljIHNldFBhZ2luYXRpb25BdFJlcShwYWdpbmF0aW9uSW5mbywgb3BlcmF0aW9uSW5mbywgdmFyaWFibGUsIGhlYWRlcnMsIHJlcXVlc3RCb2R5LCB1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHJlcU9iaiA9IHt9O1xuICAgICAgICBsZXQgaW5wdXRQYXJhbTtcbiAgICAgICAgbGV0IHJlc09iaiA9IHt9O1xuICAgICAgICAvLyBwYWdpbmF0aW9uIGlucHV0IGluZm9ybWF0aW9uIHZhcmllcyBiYXNlZCBvbiB0aGUgdHlwZVxuICAgICAgICBpZiAocGFnaW5hdGlvbkluZm8udHlwZSA9PT0gJ29mZnNldCcgfHwgcGFnaW5hdGlvbkluZm8uaW5wdXQub2Zmc2V0KSB7XG4gICAgICAgICAgICBpbnB1dFBhcmFtID0gJ29mZnNldCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dFBhcmFtID0gJ3BhZ2UnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtTmFtZSA9IHBhZ2luYXRpb25JbmZvLmlucHV0W2lucHV0UGFyYW1dLnNwbGl0KCcuJylbMF07XG4gICAgICAgIC8vIGNoZWNrIGlmIHBhcmFtTmFtZSBpcyBwcmVzZW50IGluIHBhcmFtZXRlcnMgb2Ygb3BlcmF0aW9uIGluZm9cbiAgICAgICAgY29uc3QgcGFyYW1PYmogPSBmaW5kKG9wZXJhdGlvbkluZm8ucGFyYW1ldGVycywgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5uYW1lID09PSBwYXJhbU5hbWVcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHNldCBwYWdlL29mZnNldCBhbmQgc2l6ZSBmcm9tIHBhZ2luYXRpb24gaWYgbWF0Y2hlZCBwYXJhbWV0ZXIncyB0eXBlIGlzIGhlYWRlclxuICAgICAgICBpZiAocGFyYW1PYmo/LnBhcmFtZXRlclR5cGUgPT09ICdoZWFkZXInKSB7XG4gICAgICAgICAgICBzZXQocmVxT2JqLCBwYWdpbmF0aW9uSW5mby5pbnB1dFtpbnB1dFBhcmFtXSwgdmFyaWFibGUucGFnaW5hdGlvblsncGFnZSddKTtcbiAgICAgICAgICAgIHNldChyZXFPYmosIHBhZ2luYXRpb25JbmZvLmlucHV0LnNpemUsIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3NpemUnXSk7XG4gICAgICAgICAgICBoZWFkZXJzW3BhcmFtTmFtZV0gPSBKU09OLnN0cmluZ2lmeShyZXFPYmpbcGFyYW1OYW1lXSk7XG4gICAgICAgICAgICByZXNPYmpbJ2hlYWRlcnMnXSA9IGhlYWRlcnM7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1PYmo/LnBhcmFtZXRlclR5cGUgPT09ICdib2R5Jykge1xuICAgICAgICAgICAgLy8gc2V0IHBhZ2Uvb2Zmc2V0IGFuZCBzaXplIGZyb20gcGFnaW5hdGlvbiBpZiBtYXRjaGVkIHBhcmFtZXRlcidzIHR5cGUgaXMgYm9keVxuICAgICAgICAgICAgLy8gYXNzaWduIGJvZHlWYWwgdG8gdXBkYXRlZCBwYWdpbmF0aW9uIGluZm8gb2JqZWN0XG4gICAgICAgICAgICBjb25zdCBib2R5VmFsID0gSlNPTi5wYXJzZShwYXJhbU9iai5zYW1wbGVWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBib2R5UGFyYW0gPSBwYWdpbmF0aW9uSW5mby5pbnB1dFtpbnB1dFBhcmFtXS5zcGxpdCgnLicpWzFdXG4gICAgICAgICAgICBpZiAoYm9keVZhbCAmJiBib2R5VmFsW2JvZHlQYXJhbV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dEJvZHlQYXJhbSA9IHBhZ2luYXRpb25JbmZvLmlucHV0W2lucHV0UGFyYW1dLnNwbGl0KCcuJykuc3BsaWNlKDEpLmpvaW4oJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRQYXJhbSAhPT0gJ29mZnNldCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0KHJlcU9iaiwgaW5wdXRCb2R5UGFyYW0sIHZhcmlhYmxlLnBhZ2luYXRpb25bJ3BhZ2UnXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0KHJlcU9iaiwgaW5wdXRCb2R5UGFyYW0sIHRoaXMuZ2V0T2Zmc2V0SW5mbyh2YXJpYWJsZSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXQocmVxT2JqLCBwYWdpbmF0aW9uSW5mby5pbnB1dC5zaXplLnNwbGl0KCcuJykuc3BsaWNlKDEpLmpvaW4oJy4nKSwgdmFyaWFibGUucGFnaW5hdGlvblsnc2l6ZSddKTtcbiAgICAgICAgICAgICAgICBib2R5VmFsW2JvZHlQYXJhbV0gPSAgcmVxT2JqW2JvZHlQYXJhbV07XG4gICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5VmFsKTtcbiAgICAgICAgICAgICAgICByZXNPYmpbJ3JlcXVlc3RCb2R5J10gPSByZXF1ZXN0Qm9keTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5wYWdpbmF0aW9uLm5leHQgJiYgcGFyYW1PYmopIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRm9yIGN1cnNvciB0eXBlIHBhZ2luYXRpb24sIGlmIHBhZ2luYXRpb24gaW5mbyBpcyBwcmVzZW50IGluIHRoZSBwYXRoXG4gICAgICAgICAgICAgKiBCYXNlZCBvbiB3aGV0aGVyIHVzZXIgY2xpY2tzIG9uIHRoZSBuZXh0IG9yIHByZXYgYnV0dG9uIG1vZGlmeSB0aGUgdXJsXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHBhcmFtT2JqLnBhcmFtZXRlclR5cGUgPT09ICdwYXRoJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG9wZXJhdGlvbkluZm8ucmVsYXRpdmVQYXRoLnNwbGl0KCcvJyksXG4gICAgICAgICAgICAgICAgcGFyYW1Db25maWcgPSAneycgKyBwYXJhbU9iai5uYW1lICsgJ30nLFxuICAgICAgICAgICAgICAgIHBhcmFtSW5kZXggPSB1cmxQYXJhbXMuaW5kZXhPZihwYXJhbUNvbmZpZyk7XG4gICAgICAgICAgICAgICAgbGV0IGludm9rZVVybDtcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUucGFnaW5hdGlvbi5pc05leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVXJsID0gdmFyaWFibGUucGFnaW5hdGlvbi5uZXh0LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVXJsID0gdmFyaWFibGUucGFnaW5hdGlvbi5wcmV2LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHVybFBhdGhQYXJtYXM7XG4gICAgICAgICAgICAgICAgbGV0IHVybFBhdGg7XG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvbkluZm8uZGlyZWN0UGF0aCkgeyAvLyBGb3IgZGlyZWN0IHBhdGgsIGFzIHVybCBoYXMgaG9zdG5hbWUsIGRlcml2YXRlIHBhdGhuYW1lIHVzaW5nIFVSTCBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgdXJsUGF0aCA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgICAgICAgICAgICAgdXJsUGF0aFBhcm1hcyA9IHVybFBhdGgucGF0aG5hbWUuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgdXJsUGF0aFBhcm1hc1twYXJhbUluZGV4XSA9IGludm9rZVVybFtwYXJhbUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgdXJsUGF0aC5wYXRobmFtZSA9IHVybFBhdGhQYXJtYXMuam9pbignLycpO1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmxQYXRoLmhyZWY7XG4gICAgICAgICAgICAgICAgICAgIHJlc09ialsndXJsJ10gPSB1cmw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gRWxzZSBtb2RpZnkgdGhlIHVybCB3aXRoIGluZGV4IGFzICsxIChmb2xsb3dpbmcgcHJveHkgcGF0dGVybilcbiAgICAgICAgICAgICAgICAgICAgdXJsUGF0aFBhcm1hcyA9IHVybC5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICB1cmxQYXRoUGFybWFzW3BhcmFtSW5kZXggKyAxXSA9IGludm9rZVVybFtwYXJhbUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsUGF0aFBhcm1hcy5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc09ialsndXJsJ10gPSB1cmw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtT2JqLnBhcmFtZXRlclR5cGUgPT09ICdxdWVyeScpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRm9yIGN1cnNvciB0eXBlIHBhZ2luYXRpb24sIGlmIHBhZ2luYXRpb24gaW5mbyBpcyBwcmVzZW50IGluIHRoZSBxdWVyeVxuICAgICAgICAgICAgICogQmFzZWQgb24gd2hldGhlciB1c2VyIGNsaWNrcyBvbiB0aGUgbmV4dCBvciBwcmV2IGJ1dHRvbiBtb2RpZnkgdGhlIHVybCdzIHF1ZXJ5IHBhcmFtc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gdXJsLnNwbGl0KCc/Jyk7XG4gICAgICAgICAgICAgICAgbGV0IGludm9rZVVybDtcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUucGFnaW5hdGlvbi5pc05leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVXJsID0gdmFyaWFibGUucGFnaW5hdGlvbi5uZXh0LnNwbGl0KCc/Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVXJsID0gdmFyaWFibGUucGFnaW5hdGlvbi5wcmV2LnNwbGl0KCc/Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVybFBhcmFtc1sxXSA9IGludm9rZVVybFsxXTtcbiAgICAgICAgICAgICAgICB1cmwgPSB1cmxQYXJhbXMuam9pbignPycpO1xuICAgICAgICAgICAgICAgIHJlc09ialsndXJsJ10gPSB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc09iajtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYWdpbmF0aW9uIGluZm8gcmVjaWV2ZWQgZnJvbSBhcGkncyByZXNwb25zZSBpbiB0aGUgcmVzIG9iamVjdFxuICAgICAqIEBwYXJhbSBvcGVyYXRpb25JbmZvIGhhcyBtZXRhZGF0YSBvZiB0aGUgdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gcmVzIGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBvZiBwYWdpbmF0aW9uIHdoaWNoIGhhcyB0byBiZSBzdG9yZWQgb24gdGhlIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIHBhcmFtTmFtZSBoYXMga2V5IG5hbWUgYWdhaW5zdCB3aGljaCBkYXRhIGhhcyB0byBiZSBzdG9yZWQgaW4gcGFnaW5hdGlvblxuICAgICAqIEBwYXJhbSB2YXJpYWJsZSB3aXRoaG9sZHMgdmFyaWFibGUgaW5mb3JtYXRpb25cbiAgICAgKiBAcmV0dXJucyB7dm9pZH0gVGhpcyBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nXG4gICAgICovXG4gICAgc3RhdGljIHNldFBhcmFtZXRlclZhbChwYXJhbU5hbWUsIHJlcywgb3BlcmF0aW9uSW5mbywgdmFyaWFibGUpIHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkluZm8gPSB0aGlzLmdldFBhZ2luYXRpb25JbmZvKG9wZXJhdGlvbkluZm8sIHZhcmlhYmxlKTtcbiAgICAgICAgY29uc3QgcGFyYW0gPSBwYWdpbmF0aW9uSW5mby5pbnB1dFtwYXJhbU5hbWVdLnNwbGl0KCcuJylbMF07XG4gICAgICAgIGNvbnN0IHNpemVPYmogPSBmaW5kKG9wZXJhdGlvbkluZm8ucGFyYW1ldGVycywgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5uYW1lID09PSBwYXJhbVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzW3BhcmFtTmFtZV0gPSByZXN1bHQoc2l6ZU9iaiwgJ3NhbXBsZVZhbHVlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyByZXMgb2JqZWN0IGZyb20gdGhlIHJlc3BvbnNlIHJlY2lldmVkIGZyb20gdGhlIGFwaSB0cmlnZ2VyZWRcbiAgICAgKiBAcGFyYW0gdmFyaWFibGUgd2l0aGhvbGRzIHZhcmlhYmxlIGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbkluZm8gaGFzIG1ldGFkYXRhIG9mIHRoZSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSBwYWdpbmF0aW9uSW5mbyBoYXMgbWV0YWRhdGEgb2YgdGhlIHZhcmlhYmxlJ3MgcGFnaW5hdGlvblxuICAgICAqIEBwYXJhbSByZXNwb25zZSBoYXMgZGF0YSBvZiB0aGUgYXBpIGNhbGwncyByZXNwb25zZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIGhhcyBpbmZvIG9mIHRoZSBhcGkncyBxdWVyeSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gcmVzSGVhZGVycyBoYXMgZGF0YSBvZiB0aGUgYXBpIGNhbGwncyByZXNwb25zZSBoZWFkZXJzXG4gICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHdoaWNoIGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBvZiBwYWdpbmF0aW9uIHdoaWNoIGhhcyB0byBiZSBzdG9yZWQgb24gdGhlIHZhcmlhYmxlXG4gICAgICovXG4gICAgc3RhdGljIGdlbmVyYXRlUGFnaW5hdGlvblJlcyhvcGVyYXRpb25JbmZvLCBwYWdpbmF0aW9uSW5mbywgcmVzcG9uc2UsIHJlc0hlYWRlcnMsIG9wdGlvbnMsIHZhcmlhYmxlKSB7XG4gICAgICAgIGxldCByZXMgPSB7fTtcbiAgICAgICAgY29uc3QgcmVzT3V0cHV0ID0gcGFnaW5hdGlvbkluZm8ub3V0cHV0O1xuICAgICAgICAvLyBJZiBwYWdpbmF0aW9uIHR5cGUgaXMgbm90IGN1cnNvciwgY3JlYXRlIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAgICAgaWYgKCFyZXNPdXRwdXQ/Lm5leHQpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgc2l6ZSBpcyBwcmVzZW50IGluIHRoZSBwYWdpbmF0aW9uJ3Mgb3V0cHV0IG1ldGFkYXRhIGRlZHVjZSBzaXplIGZyb20gYXBpJ3MgcmVzcG9uc2VcbiAgICAgICAgICAgICAqIEVsc2UgZGVkdWNlIHNpemUgZnJvbSB0aGUgcGFnaW5hdGlvbidzIGlucHV0IG1ldGFkYXRhIHNpemUga2V5XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChyZXNPdXRwdXQ/LnNpemUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25JdGVtcyhyZXNPdXRwdXQuc2l6ZSwgcmVzcG9uc2UsIHJlcywgJ3NpemUnLCByZXNIZWFkZXJzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXJWYWwoJ3NpemUnLCByZXMsIG9wZXJhdGlvbkluZm8sIHZhcmlhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgcGFnZSBpcyBwcmVzZW50IGluIHRoZSBwYWdpbmF0aW9uJ3Mgb3V0cHV0IG1ldGFkYXRhIGRlZHVjZSBwYWdlIGZyb20gYXBpJ3MgcmVzcG9uc2VcbiAgICAgICAgICAgICAqIEVsc2UgZGVkdWNlIHBhZ2UgZnJvbSB0aGUgcGFnaW5hdGlvbidzIGlucHV0IG1ldGFkYXRhIHBhZ2Uga2V5XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChyZXNPdXRwdXQ/LnBhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25JdGVtcyhyZXNPdXRwdXQucGFnZSwgcmVzcG9uc2UsIHJlcywgJ3BhZ2UnLCByZXNIZWFkZXJzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFnaW5hdGlvbkluZm8udHlwZSAhPT0gJ29mZnNldCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhcmFtZXRlclZhbCgncGFnZScsIHJlcywgb3BlcmF0aW9uSW5mbywgdmFyaWFibGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0b3RhbEVsZW1lbnRzIGhhcyAkbWluVmFsdWUgaW4gaXQsIHNldCB0b3RhbEVsZW1lbnRzIGFzICRtaW5WYWx1ZVxuICAgICAgICAgICAgICogSWYgdGhlIHJlbmRlcmVkIGVsZW1lbnRzIGFyZSBncmVhdGVyIHRoYW4gJG1pblZhbHVlLCBzZXQgdG90YWxFbGVtZW50cyBhcyBOdW1iZXIgb2YgZWxlbWVudHMgcmVuZGVyZWQgKyAxXG5cbiAgICAgICAgICAgICAqIElmIHRvdGFsRWxlbWVudHMgaXMgcHJlc2VudCBpbiB0aGUgcGFnaW5hdGlvbidzIG91dHB1dCBtZXRhZGF0YSBkZWR1Y2UgdG90YWxFbGVtZW50cyBmcm9tIGFwaSdzIHJlc3BvbnNlXG5cbiAgICAgICAgICAgICAqIElmIFBhZ2luYXRpb24gdHlwZSBpcyBvZmZzZXQsIGRlZHVjZSB0b3RhbEVsZW1lbnRzIGZyb20gc2l6ZSBhbmQgb3B0aW9uc1twYWdlXSBlbHNlIGRlZHVjZSBmcm9tIHNpemUgYW5kIHJlc1twYWdlXVxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoc3RhcnRzV2l0aChyZXNPdXRwdXQ/LnRvdGFsRWxlbWVudHMsICckbWluVmFsdWUnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsRWwgPSByZXNPdXRwdXQudG90YWxFbGVtZW50cy5yZXBsYWNlKCckbWluVmFsdWU9JywgJycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VQYXJhbSA9IHJlc1sncGFnZSddID8gcmVzWydwYWdlJ10gOiBvcHRpb25zWydwYWdlJ11cbiAgICAgICAgICAgICAgICBjb25zdCBlbFJlbmRlcmVkID0gcmVzWydzaXplJ10gKiBwYWdlUGFyYW07XG4gICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS5wYWdpbmF0aW9uIHx8IHZhcmlhYmxlLnBhZ2luYXRpb25bJ3RvdGFsRWxlbWVudHMnXSA+IGVsUmVuZGVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzWyd0b3RhbEVsZW1lbnRzJ10gPSBwYXJzZUludCh0b3RhbEVsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNbJ3RvdGFsRWxlbWVudHMnXSA9IGVsUmVuZGVyZWQgKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzT3V0cHV0Py50b3RhbEVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uSXRlbXMocmVzT3V0cHV0LnRvdGFsRWxlbWVudHMsIHJlc3BvbnNlLCByZXMsICd0b3RhbEVsZW1lbnRzJywgcmVzSGVhZGVycyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0aW9uSW5mby50eXBlID09PSAnb2Zmc2V0JyB8fCBwYWdpbmF0aW9uSW5mby5pbnB1dC5vZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzWyd0b3RhbEVsZW1lbnRzJ10gPSAocmVzWydzaXplJ10gKiAob3B0aW9uc1sncGFnZSddID8gb3B0aW9uc1sncGFnZSddIDogMSkpICsgMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNbJ3RvdGFsRWxlbWVudHMnXSA9IChyZXNbJ3NpemUnXSAqIHJlc1sncGFnZSddKSArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiBoYXNNb3JlSXRlbXMgaXMgcHJlc2VudCBpbiB0aGUgcGFnaW5hdGlvbidzIG91dHB1dCBtZXRhZGF0YSBkZWR1Y2UgaGFzTW9yZUl0ZW1zIGZyb20gYXBpJ3MgcmVzcG9uc2VcbiAgICAgICAgICAgICAqIEVsc2UgYXNzaWduIGl0IGFzIGVtcHR5IHdoaWNoIHdpbGwgYmUgY2FsY3VsYXRlZCBhdCBwYWdpbmF0aW9uIG9iamVjdCBnZW5lcmF0aW9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChyZXNPdXRwdXQ/Lmhhc01vcmVJdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbkl0ZW1zKHJlc091dHB1dC5oYXNNb3JlSXRlbXMsIHJlc3BvbnNlLCByZXMsICdoYXNNb3JlSXRlbXMnLCByZXNIZWFkZXJzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzWydoYXNNb3JlSXRlbXMnXSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlc091dHB1dCkgeyAvLyBGb3IgY3Vyc29yIHR5cGUgcGFnaW5hdGlvbiBzZXQgbmV4dCBhbmQgcHJldiBrZXlzIGluIHJlcyBvYmplY3RcbiAgICAgICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbkl0ZW1zKHJlc091dHB1dC5uZXh0LCByZXNwb25zZSwgcmVzLCAnbmV4dCcsIHJlc0hlYWRlcnMpO1xuICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uSXRlbXMocmVzT3V0cHV0LnByZXYsIHJlc3BvbnNlLCByZXMsICdwcmV2JywgcmVzSGVhZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG4iXX0=
|