qms-angular 1.0.56 → 1.0.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/qms-angular.umd.js +22071 -13193
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/components/app-icon/app-icon.module.js +29 -16
- package/esm2015/lib/components/app-icon/icon-registry.service.js +9 -7
- package/esm2015/lib/components/badges/qms-badges.component.js +24 -15
- package/esm2015/lib/components/badges/qms-badges.module.js +33 -18
- package/esm2015/lib/components/banner/qms-banner/qms-banner.component.js +28 -16
- package/esm2015/lib/components/banner/qms-banner/qms-banner.module.js +36 -19
- package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.js +28 -16
- package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.js +36 -19
- package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.component.js +19 -13
- package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.module.js +30 -17
- package/esm2015/lib/components/breadcrumb/breadcrumb-direction-icon.directive.js +11 -10
- package/esm2015/lib/components/breadcrumb/breadcrumb-item.directive.js +20 -17
- package/esm2015/lib/components/breadcrumb/breadcrumb.js +40 -28
- package/esm2015/lib/components/breadcrumb/breadcrumb.module.js +50 -26
- package/esm2015/lib/components/button/button-toggle.js +120 -85
- package/esm2015/lib/components/button/button.js +86 -78
- package/esm2015/lib/components/button/button.module.js +51 -27
- package/esm2015/lib/components/comment/comment.js +29 -18
- package/esm2015/lib/components/dialog/dialog.js +38 -28
- package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.js +24 -16
- package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.js +71 -31
- package/esm2015/lib/components/list/list.js +101 -89
- package/esm2015/lib/components/list/list.module.js +94 -50
- package/esm2015/lib/components/qms-app-bar/qms-app-bar.component.js +55 -29
- package/esm2015/lib/components/qms-app-bar/qms-app-bar.module.js +39 -20
- package/esm2015/lib/components/qms-stepper/qms-stepper.component.js +32 -22
- package/esm2015/lib/components/qms-stepper/qms-stepper.module.js +35 -25
- package/esm2015/lib/components/related/content/related-content.component.js +19 -12
- package/esm2015/lib/components/related/list-other-related/list-related.component.js +29 -25
- package/esm2015/lib/components/related/model/popup-data.model.js +1 -1
- package/esm2015/lib/components/related/popup/related-popup.component.js +54 -42
- package/esm2015/lib/components/related/related.module.js +96 -43
- package/esm2015/lib/components/related/risk/analysis/analysis.component.js +23 -17
- package/esm2015/lib/components/related/risk/list/list.component.js +22 -18
- package/esm2015/lib/components/related/risk/result/result.component.js +23 -16
- package/esm2015/lib/components/related/service/related-global.service.js +7 -6
- package/esm2015/lib/components/related/sidenav/sidenav.component.js +21 -12
- package/esm2015/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.js +22 -18
- package/esm2015/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.js +22 -18
- package/esm2015/lib/components/reports/qms-reports.module.js +29 -20
- package/esm2015/lib/components/rich-text/rich-text.js +47 -32
- package/esm2015/lib/components/rich-text/rich-text.module.js +35 -21
- package/esm2015/lib/components/select-dialog/select-dialog.js +31 -16
- package/esm2015/lib/components/select-include-children/enum/select-option-type.enum.js +7 -0
- package/esm2015/lib/components/select-include-children/model/select-option.model.js +1 -1
- package/esm2015/lib/components/select-include-children/model/select-popup-data.model.js +1 -1
- package/esm2015/lib/components/select-include-children/model/select-search-option.model.js +4 -0
- package/esm2015/lib/components/select-include-children/model/seleted-option.model.js +3 -0
- package/esm2015/lib/components/select-include-children/select-include-children.component.js +449 -347
- package/esm2015/lib/components/select-include-children/select-include-children.module.js +78 -33
- package/esm2015/lib/components/select-include-children/services/select-global.service.js +9 -12
- package/esm2015/lib/components/select-one/common/data-type.enum.js +14 -0
- package/esm2015/lib/components/select-one/common/document-folder-type.enum.js +12 -0
- package/esm2015/lib/components/select-one/common/module-type.enum.js +8 -0
- package/esm2015/lib/components/select-one/common/select-data.model.js +3 -0
- package/esm2015/lib/components/select-one/common/selected-node.model.js +3 -0
- package/esm2015/lib/components/select-one/common/selectone-popup-data.model.js +11 -0
- package/esm2015/lib/components/select-one/common/show-hide-search-result.const.js +6 -0
- package/esm2015/lib/components/select-one/index.js +2 -0
- package/esm2015/lib/components/select-one/public_api.js +7 -0
- package/esm2015/lib/components/select-one/select-one.component.js +359 -0
- package/esm2015/lib/components/select-one/select-one.module.js +94 -0
- package/esm2015/lib/components/select-one/service/select-one-global.service.js +18 -0
- package/esm2015/lib/components/suffix-field/suffix-field.directive.js +22 -21
- package/esm2015/lib/components/table/table-action.js +31 -31
- package/esm2015/lib/components/table/table.module.js +37 -21
- package/esm2015/lib/components/test-only/test-only.component.js +14 -11
- package/esm2015/lib/components/tooltip/tooltip.js +24 -19
- package/esm2015/lib/components/tooltip/tooltip.module.js +38 -20
- package/esm2015/lib/components/tree/tree.component.js +99 -35
- package/esm2015/lib/components/tree/tree.module.js +69 -30
- package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.js +22 -16
- package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.js +71 -31
- package/esm2015/lib/directives/chip-input/chip-input-chip-list.directive.js +13 -13
- package/esm2015/lib/directives/chip-input/chip-input-field.directive.js +11 -10
- package/esm2015/lib/directives/chip-input/chip-input-select-dropdown.directive.js +11 -10
- package/esm2015/lib/directives/chip-input/chip-input-select-field.directive.js +17 -14
- package/esm2015/lib/directives/chip-input/chip-input-select-trigger.directive.js +14 -13
- package/esm2015/lib/directives/chips/chip-body.directive.js +11 -10
- package/esm2015/lib/directives/chips/chip.directive.js +13 -13
- package/esm2015/lib/directives/dropdown-menu/dropdown-item.directive.js +16 -14
- package/esm2015/lib/directives/file-upload/file-upload-attachment-list.directive.js +11 -10
- package/esm2015/lib/directives/file-upload/file-upload-display.directive.js +19 -16
- package/esm2015/lib/directives/file-upload/file-upload-multiple-display.directive.js +16 -14
- package/esm2015/lib/directives/file-upload/file-upload-multiple-selector.directive.js +26 -20
- package/esm2015/lib/directives/file-upload/file-upload-multiple.directive.js +19 -15
- package/esm2015/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.js +11 -10
- package/esm2015/lib/directives/file-upload/file-upload-selector.directive.js +25 -18
- package/esm2015/lib/directives/file-upload/file-upload.directive.js +24 -20
- package/esm2015/lib/directives/form.directive.js +48 -51
- package/esm2015/lib/directives/margin.directive.js +15 -14
- package/esm2015/lib/directives/range-slider/range-slider-lockup.directive.js +11 -10
- package/esm2015/lib/directives/range-slider/range-slider.directive.js +17 -14
- package/esm2015/lib/directives/scroll-selected/scroll-to-selected.directive.js +16 -15
- package/esm2015/lib/directives/scrollbar/scrollbar.directive.js +13 -13
- package/esm2015/lib/directives/search-field.directive.js +21 -22
- package/esm2015/lib/directives/side-sheet/drawer-content.directive.js +11 -10
- package/esm2015/lib/directives/side-sheet/drawer-header-action.directive.js +11 -10
- package/esm2015/lib/directives/side-sheet/drawer-header.directive.js +11 -10
- package/esm2015/lib/directives/side-sheet/drawer.directive.js +11 -10
- package/esm2015/lib/directives/tab/tab-group-advanced.directive.js +15 -14
- package/esm2015/lib/directives/tab/tab-group.directive.js +11 -10
- package/esm2015/lib/directives/tab/tab-label.directive.js +11 -10
- package/esm2015/lib/directives/text-block/text-block-line.directive.js +20 -16
- package/esm2015/lib/directives/text-block/text-block.directive.js +17 -14
- package/esm2015/lib/directives/tooltip/tooltip-image.directive.js +14 -13
- package/esm2015/lib/directives/tooltip/tooltip-renderer.directive.js +35 -22
- package/esm2015/lib/material-module.js +35 -16
- package/esm2015/lib/model/en.js +35 -4
- package/esm2015/lib/model/no.js +34 -3
- package/esm2015/lib/pipe/dateFormat.pipe.js +11 -10
- package/esm2015/lib/qms-angular.component.js +13 -11
- package/esm2015/lib/qms-angular.module.js +232 -121
- package/esm2015/lib/qms-angular.service.js +9 -8
- package/esm2015/lib/qms-ckeditor-components/common/bpmn/toolbar.function.js +32 -12
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.js +5 -1
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.js +10 -1
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.js +7 -0
- package/esm2015/lib/qms-ckeditor-components/common/enums/document-type.enum.js +2 -1
- package/esm2015/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.js +8 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.js +16 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/halo-service.js +105 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.js +3762 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.js +68 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.js +372 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.js +1041 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.js +326 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.js +318 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.js +80 -0
- package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.js +9 -0
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.js +9 -0
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.js +3 -0
- package/esm2015/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.js +23 -16
- package/esm2015/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.js +34 -19
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.js +43 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +577 -53
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.js +69 -35
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.js +322 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.js +12 -8
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +39 -30
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.js +22 -18
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +29 -20
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +22 -18
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.js +35 -23
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.js +30 -20
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +27 -18
- package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.js +8 -0
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor-base.component.js +7 -4
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +118 -44
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +131 -55
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.js +10 -10
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.js +9 -9
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +66 -26
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.js +26 -0
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.js +9 -8
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.js +9 -9
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.js +9 -9
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.js +9 -9
- package/esm2015/lib/services/translation-registry.service.js +9 -8
- package/esm2015/lib/shared.module.js +9 -4
- package/esm2015/public-api.js +20 -1
- package/esm2015/qms-angular.js +1 -9
- package/fesm2015/qms-angular.js +14918 -6210
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/components/app-icon/app-icon.module.d.ts +7 -0
- package/lib/components/app-icon/icon-registry.service.d.ts +3 -0
- package/lib/components/badges/qms-badges.component.d.ts +3 -0
- package/lib/components/badges/qms-badges.module.d.ts +9 -0
- package/lib/components/banner/qms-banner/qms-banner.component.d.ts +3 -0
- package/lib/components/banner/qms-banner/qms-banner.module.d.ts +10 -0
- package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.d.ts +3 -0
- package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.d.ts +10 -0
- package/lib/components/banner/qms-banner-loading/qms-banner-loading.component.d.ts +3 -0
- package/lib/components/banner/qms-banner-loading/qms-banner-loading.module.d.ts +8 -0
- package/lib/components/breadcrumb/breadcrumb-direction-icon.directive.d.ts +3 -0
- package/lib/components/breadcrumb/breadcrumb-item.directive.d.ts +3 -0
- package/lib/components/breadcrumb/breadcrumb.d.ts +3 -0
- package/lib/components/breadcrumb/breadcrumb.module.d.ts +13 -0
- package/lib/components/button/button-toggle.d.ts +5 -0
- package/lib/components/button/button.d.ts +7 -0
- package/lib/components/button/button.module.d.ts +9 -0
- package/lib/components/comment/comment.d.ts +3 -0
- package/lib/components/dialog/dialog.d.ts +5 -0
- package/lib/components/edit-file-name-dialog/edit-file-name-dialog.d.ts +3 -0
- package/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.d.ts +16 -0
- package/lib/components/list/list.d.ts +15 -0
- package/lib/components/list/list.module.d.ts +11 -0
- package/lib/components/qms-app-bar/qms-app-bar.component.d.ts +3 -0
- package/lib/components/qms-app-bar/qms-app-bar.module.d.ts +12 -0
- package/lib/components/qms-stepper/qms-stepper.component.d.ts +3 -0
- package/lib/components/qms-stepper/qms-stepper.module.d.ts +8 -0
- package/lib/components/related/content/related-content.component.d.ts +3 -0
- package/lib/components/related/list-other-related/list-related.component.d.ts +3 -0
- package/lib/components/related/model/popup-data.model.d.ts +0 -1
- package/lib/components/related/popup/related-popup.component.d.ts +7 -5
- package/lib/components/related/related.module.d.ts +29 -0
- package/lib/components/related/risk/analysis/analysis.component.d.ts +3 -0
- package/lib/components/related/risk/list/list.component.d.ts +3 -0
- package/lib/components/related/risk/result/result.component.d.ts +3 -0
- package/lib/components/related/service/related-global.service.d.ts +3 -0
- package/lib/components/related/sidenav/sidenav.component.d.ts +3 -0
- package/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.d.ts +3 -0
- package/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.d.ts +3 -0
- package/lib/components/reports/qms-reports.module.d.ts +7 -0
- package/lib/components/rich-text/rich-text.d.ts +3 -0
- package/lib/components/rich-text/rich-text.module.d.ts +8 -0
- package/lib/components/select-dialog/select-dialog.d.ts +3 -0
- package/lib/components/select-include-children/enum/select-option-type.enum.d.ts +5 -0
- package/lib/components/select-include-children/model/select-option.model.d.ts +2 -0
- package/lib/components/select-include-children/model/select-popup-data.model.d.ts +4 -0
- package/lib/components/select-include-children/model/select-search-option.model.d.ts +7 -0
- package/lib/components/select-include-children/model/seleted-option.model.d.ts +15 -0
- package/lib/components/select-include-children/select-include-children.component.d.ts +35 -18
- package/lib/components/select-include-children/select-include-children.module.d.ts +25 -0
- package/lib/components/select-include-children/services/select-global.service.d.ts +6 -5
- package/lib/components/select-one/common/data-type.enum.d.ts +12 -0
- package/lib/components/select-one/common/document-folder-type.enum.d.ts +10 -0
- package/lib/components/select-one/common/module-type.enum.d.ts +6 -0
- package/lib/components/select-one/common/select-data.model.d.ts +12 -0
- package/lib/components/select-one/common/selected-node.model.d.ts +12 -0
- package/lib/components/select-one/common/selectone-popup-data.model.d.ts +12 -0
- package/lib/components/select-one/common/show-hide-search-result.const.d.ts +5 -0
- package/lib/components/select-one/index.d.ts +1 -0
- package/lib/components/select-one/public_api.d.ts +6 -0
- package/lib/components/select-one/select-one.component.d.ts +80 -0
- package/lib/components/select-one/select-one.module.d.ts +25 -0
- package/lib/components/select-one/service/select-one-global.service.d.ts +10 -0
- package/lib/components/suffix-field/suffix-field.directive.d.ts +5 -0
- package/lib/components/table/table-action.d.ts +5 -0
- package/lib/components/table/table.module.d.ts +8 -0
- package/lib/components/test-only/test-only.component.d.ts +3 -0
- package/lib/components/tooltip/tooltip.d.ts +3 -0
- package/lib/components/tooltip/tooltip.module.d.ts +9 -0
- package/lib/components/tree/tree.component.d.ts +7 -0
- package/lib/components/tree/tree.module.d.ts +22 -0
- package/lib/components/upload-file-error-dialog/upload-file-error-dialog.d.ts +3 -0
- package/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.d.ts +16 -0
- package/lib/directives/chip-input/chip-input-chip-list.directive.d.ts +3 -0
- package/lib/directives/chip-input/chip-input-field.directive.d.ts +3 -0
- package/lib/directives/chip-input/chip-input-select-dropdown.directive.d.ts +3 -0
- package/lib/directives/chip-input/chip-input-select-field.directive.d.ts +3 -0
- package/lib/directives/chip-input/chip-input-select-trigger.directive.d.ts +3 -0
- package/lib/directives/chips/chip-body.directive.d.ts +3 -0
- package/lib/directives/chips/chip.directive.d.ts +3 -0
- package/lib/directives/dropdown-menu/dropdown-item.directive.d.ts +3 -0
- package/lib/directives/file-upload/file-upload-attachment-list.directive.d.ts +3 -0
- package/lib/directives/file-upload/file-upload-display.directive.d.ts +3 -0
- package/lib/directives/file-upload/file-upload-multiple-display.directive.d.ts +3 -0
- package/lib/directives/file-upload/file-upload-multiple-selector.directive.d.ts +3 -0
- package/lib/directives/file-upload/file-upload-multiple.directive.d.ts +3 -0
- package/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.d.ts +3 -0
- package/lib/directives/file-upload/file-upload-selector.directive.d.ts +3 -0
- package/lib/directives/file-upload/file-upload.directive.d.ts +5 -0
- package/lib/directives/form.directive.d.ts +11 -0
- package/lib/directives/margin.directive.d.ts +3 -0
- package/lib/directives/range-slider/range-slider-lockup.directive.d.ts +3 -0
- package/lib/directives/range-slider/range-slider.directive.d.ts +3 -0
- package/lib/directives/scroll-selected/scroll-to-selected.directive.d.ts +3 -0
- package/lib/directives/scrollbar/scrollbar.directive.d.ts +3 -0
- package/lib/directives/search-field.directive.d.ts +5 -0
- package/lib/directives/side-sheet/drawer-content.directive.d.ts +3 -0
- package/lib/directives/side-sheet/drawer-header-action.directive.d.ts +3 -0
- package/lib/directives/side-sheet/drawer-header.directive.d.ts +3 -0
- package/lib/directives/side-sheet/drawer.directive.d.ts +3 -0
- package/lib/directives/tab/tab-group-advanced.directive.d.ts +3 -0
- package/lib/directives/tab/tab-group.directive.d.ts +3 -0
- package/lib/directives/tab/tab-label.directive.d.ts +3 -0
- package/lib/directives/text-block/text-block-line.directive.d.ts +3 -0
- package/lib/directives/text-block/text-block.directive.d.ts +3 -0
- package/lib/directives/tooltip/tooltip-image.directive.d.ts +3 -0
- package/lib/directives/tooltip/tooltip-renderer.directive.d.ts +3 -0
- package/lib/material-module.d.ts +12 -0
- package/lib/model/en.d.ts +31 -0
- package/lib/model/no.d.ts +31 -0
- package/lib/pipe/dateFormat.pipe.d.ts +3 -0
- package/lib/qms-angular.component.d.ts +3 -0
- package/lib/qms-angular.module.d.ts +49 -0
- package/lib/qms-angular.service.d.ts +3 -0
- package/lib/qms-ckeditor-components/common/bpmn/toolbar.function.d.ts +2 -2
- package/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.d.ts +4 -0
- package/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.d.ts +9 -0
- package/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.d.ts +6 -0
- package/lib/qms-ckeditor-components/common/enums/document-type.enum.d.ts +1 -0
- package/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.d.ts +6 -0
- package/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.d.ts +14 -0
- package/lib/qms-ckeditor-components/common/flowchart/service/halo-service.d.ts +48 -0
- package/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.d.ts +18 -0
- package/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.d.ts +17 -0
- package/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.d.ts +62 -0
- package/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.d.ts +1183 -0
- package/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.d.ts +216 -0
- package/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.d.ts +61 -0
- package/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.d.ts +36 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.d.ts +7 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.d.ts +7 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.d.ts +7 -0
- package/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.d.ts +3 -0
- package/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.d.ts +3 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.d.ts +18 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +88 -4
- package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.d.ts +11 -2
- package/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.d.ts +44 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.d.ts +3 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +3 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.d.ts +3 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.d.ts +3 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.d.ts +3 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.d.ts +4 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.d.ts +3 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.d.ts +3 -0
- package/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.d.ts +7 -0
- package/lib/qms-ckeditor-components/qms-ckeditor-base.component.d.ts +3 -0
- package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +8 -0
- package/lib/qms-ckeditor-components/qms-ckeditor.module.d.ts +44 -0
- package/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.d.ts +3 -0
- package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.d.ts +3 -0
- package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.d.ts +4 -0
- package/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.d.ts +13 -0
- package/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.d.ts +3 -0
- package/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.d.ts +3 -0
- package/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.d.ts +3 -0
- package/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.d.ts +3 -0
- package/lib/services/translation-registry.service.d.ts +3 -0
- package/lib/shared.module.d.ts +4 -0
- package/lib.theme.scss +8 -0
- package/package.json +1 -2
- package/public-api.d.ts +18 -0
- package/qms-angular.d.ts +1 -8
- package/src/assets/images/ckeditor5.svg +1 -0
- package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Bold.ttf +0 -0
- package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Light.ttf +0 -0
- package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Regular.ttf +0 -0
- package/src/assets/jointjs/fonts/Alegreya_Sans/OFL.txt +92 -0
- package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Bold.ttf +0 -0
- package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Light.ttf +0 -0
- package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Regular.ttf +0 -0
- package/src/assets/jointjs/fonts/Averia_Libre/OFL.txt +93 -0
- package/src/assets/jointjs/fonts/Roboto_Condensed/LICENSE.txt +202 -0
- package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Bold.ttf +0 -0
- package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Light.ttf +0 -0
- package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Regular.ttf +0 -0
- package/src/assets/jointjs/images/delete-icon-modern.png +0 -0
- package/src/assets/jointjs/images/image-icon1.svg +1 -0
- package/src/assets/jointjs/images/image-icon2.svg +6 -0
- package/src/assets/jointjs/images/image-icon3.svg +11 -0
- package/src/assets/jointjs/images/image-icon4.svg +8 -0
- package/src/assets/jointjs/images/member-female.png +0 -0
- package/src/assets/jointjs/images/member-male.png +0 -0
- package/src/assets/jointjs/images/no-color-icon.svg +72 -0
- package/src/assets/jointjs/images/reset-icon-modern.png +0 -0
- package/src/assets/jointjs/images/save-icon-modern.png +0 -0
- package/src/assets/jointjs/images/to-front-icon-modern.png +0 -0
- package/src/assets/jointjs/images/toback-icon-modern.png +0 -0
- package/src/assets/jointjs/images/toolbar-icons-dark.woff +0 -0
- package/src/assets/jointjs/images/toolbar-icons-material.png +0 -0
- package/src/assets/jointjs/images/toolbar-icons-modern.png +0 -0
- package/src/assets/jointjs/images/transparent-icon.svg +50 -0
- package/src/assets/jointjs/scss/bpmn.scss +36 -35
- package/src/assets/jointjs/scss/style.dark.scss +233 -0
- package/src/assets/jointjs/scss/style.material.scss +234 -0
- package/src/assets/jointjs/scss/style.modern.scss +225 -0
- package/src/assets/jointjs/scss/style.scss +216 -0
- package/src/assets/jointjs/scss/theme-picker.scss +21 -0
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ar.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/az.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/bg.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/cs.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/da.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/de-ch.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/de.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/en-au.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/en-gb.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/es.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/et.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/fa.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/fi.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/fr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/gl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/he.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hi.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hu.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/id.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/it.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ja.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ko.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ku.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/lt.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/lv.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/nb.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ne.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/nl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/no.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/pl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/pt-br.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ro.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ru.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sk.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sq.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sr-latn.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sv.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/th.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/tk.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/tr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ug.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/uk.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/vi.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/zh-cn.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/zh.js +1 -1
- package/src/assets/qms-ckeditor-plugin/package-lock.json +17 -12177
- package/src/assets/qms-ckeditor-plugin/package.json +1 -0
- package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +22 -3
- package/src/assets/qms-ckeditor-plugin/src/plugins/aboutckeditor/aboutckeditor.js +28 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/qmsCKEditorBpmnPlugin.js +24 -5
- package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorConstant.js +7 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +20 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/qmsCKEditorFlowchartPlugin.js +63 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapediting.js +47 -43
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapui.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/insertimagemapcommand.js +72 -108
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/openimagemapcommand.js +58 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/resizeimagemapcommand.js +4 -3
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/utils.js +13 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/timestamp/timestamp.js +8 -8
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipui.js +23 -24
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/flowchart.svg +507 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/information.svg +1 -50
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/timestamp.svg +1 -1
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/tooltip.svg +1 -0
- package/src/lib/components/qms-app-bar/qms-app-bar.component.scss +7 -0
- package/src/lib/components/select-include-children/select-include-children.component.scss +11 -4
- package/src/lib/components/select-one/select-one.component.scss +240 -0
- package/src/lib/components/tree/tree.component.scss +1 -1
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.scss +16 -0
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.scss +15 -1
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.scss +5 -0
- package/src/lib/qms-ckeditor-components/styles/_layout.scss +24 -0
- package/src/lib/qms-ckeditor-components/styles/_modules.scss +8 -0
- package/src/themes/_non-bg-srcollbar.scss +4 -0
- package/qms-angular.metadata.json +0 -1
- package/src/assets/qms-ckeditor-plugin/src/dist/ckeditor.dev.js +0 -173
- package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/dist/qmsCKEditorFullscreenPlugin.dev.js +0 -87
@@ -1,16 +1,22 @@
|
|
1
1
|
import { SelectionModel } from '@angular/cdk/collections';
|
2
2
|
import { FlatTreeControl } from '@angular/cdk/tree';
|
3
|
-
import {
|
4
|
-
import { MatIconRegistry } from '@angular/material/icon';
|
3
|
+
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
|
5
4
|
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
|
6
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
7
|
-
import { QMSIconRegistryService } from '../app-icon/icon-registry.service';
|
8
5
|
import { DataType } from '../related/common/data-type.enum';
|
9
6
|
import { DocumentNodeType } from '../related/common/document-folder-type.enum';
|
10
7
|
import { ItemIconType } from '../related/common/item-icon-type.enum';
|
11
8
|
import { RelatedConst } from '../related/common/related.const';
|
12
9
|
import TreeFunctions from './tree.function';
|
13
10
|
import { KEYBOARD_DOWN_ICON, KEYBOARD_UP_ICON } from '../../common/qms-icon.const';
|
11
|
+
import * as i0 from "@angular/core";
|
12
|
+
import * as i1 from "@angular/platform-browser";
|
13
|
+
import * as i2 from "@angular/material/icon";
|
14
|
+
import * as i3 from "../app-icon/icon-registry.service";
|
15
|
+
import * as i4 from "@angular/material/tree";
|
16
|
+
import * as i5 from "@angular/material/checkbox";
|
17
|
+
import * as i6 from "@angular/material/button";
|
18
|
+
import * as i7 from "@angular/common";
|
19
|
+
import * as i8 from "../../directives/form.directive";
|
14
20
|
export class TreeComponent {
|
15
21
|
constructor(cdRef, domSanitizer, iconRegistry, appIconService) {
|
16
22
|
this.cdRef = cdRef;
|
@@ -21,6 +27,7 @@ export class TreeComponent {
|
|
21
27
|
this.selectedData = [];
|
22
28
|
this.selectedRiskData = [];
|
23
29
|
this.disabledList = [];
|
30
|
+
this.expandToChildNode = [];
|
24
31
|
this.selectNodeEvent = new EventEmitter();
|
25
32
|
this.selectFolderEvent = new EventEmitter();
|
26
33
|
this.checkBoxEvent = new EventEmitter();
|
@@ -120,7 +127,8 @@ export class TreeComponent {
|
|
120
127
|
JSON.stringify(changes.selectedData.previousValue))) {
|
121
128
|
this.checkSelected(changes.selectedData.currentValue);
|
122
129
|
}
|
123
|
-
else
|
130
|
+
else if (changes.selectedData &&
|
131
|
+
(changes.selectedData.currentValue.length === 0)) {
|
124
132
|
for (let i = 0; i < this.treeControl.dataNodes.length; i++) {
|
125
133
|
this.checklistSelection.deselect(this.treeControl.dataNodes[i]);
|
126
134
|
}
|
@@ -128,6 +136,10 @@ export class TreeComponent {
|
|
128
136
|
if (changes.disabledList && JSON.stringify(changes.disabledList.currentValue) !== JSON.stringify(changes.disabledList.previousValue)) {
|
129
137
|
this.checkDisabledList();
|
130
138
|
}
|
139
|
+
// expand all parent to show node
|
140
|
+
if (changes.expandToChildNode && JSON.stringify(changes.expandToChildNode.currentValue) !== JSON.stringify(changes.expandToChildNode.previousValue)) {
|
141
|
+
this.openExpandToChildNode();
|
142
|
+
}
|
131
143
|
}
|
132
144
|
ngOnInit() {
|
133
145
|
this.initTreeData();
|
@@ -189,8 +201,42 @@ export class TreeComponent {
|
|
189
201
|
}
|
190
202
|
//check disabled list
|
191
203
|
this.checkDisabledList();
|
204
|
+
// expand to child node
|
205
|
+
this.openExpandToChildNode();
|
206
|
+
}
|
207
|
+
openExpandToChildNode() {
|
208
|
+
if (this.expandToChildNode.length) {
|
209
|
+
if (this.expandToChildNode[0] === '') {
|
210
|
+
this.idCheckIcon = '';
|
211
|
+
this.treeControl.collapseAll();
|
212
|
+
this.cdRef.detectChanges();
|
213
|
+
return;
|
214
|
+
}
|
215
|
+
let itemMarkChecked = this.expandToChildNode[this.expandToChildNode.length - 1].toUpperCase();
|
216
|
+
this.idCheckIcon = itemMarkChecked;
|
217
|
+
// get all children nodes on same level
|
218
|
+
let listChildNodeSameLevel = this.findChildNode(itemMarkChecked, this.dataSource.data);
|
219
|
+
// get all children in all level
|
220
|
+
this.listChildNode = [];
|
221
|
+
this.getChild(listChildNodeSameLevel);
|
222
|
+
this.getChildNodeSelectOne.emit(this.listChildNode);
|
223
|
+
for (let i = 0; i < this.treeControl.dataNodes.length; i++) {
|
224
|
+
if (itemMarkChecked === this.treeControl.dataNodes[i].id) {
|
225
|
+
this.selectNodeEvent.emit(this.treeControl.dataNodes[i]);
|
226
|
+
}
|
227
|
+
this.expandToChildNode.forEach(el => {
|
228
|
+
if (this.treeControl.dataNodes[i].id === el.toUpperCase()) {
|
229
|
+
this.treeControl.expand(this.treeControl.dataNodes[i]);
|
230
|
+
}
|
231
|
+
});
|
232
|
+
}
|
233
|
+
}
|
192
234
|
}
|
193
235
|
checkDisabledList() {
|
236
|
+
// Enable whole tree
|
237
|
+
for (let i = 0; i < this.treeControl.dataNodes.length; i++) {
|
238
|
+
this.treeControl.dataNodes[i].disabled = false;
|
239
|
+
}
|
194
240
|
// Disable List
|
195
241
|
if (this.disabledList.length) {
|
196
242
|
for (let i = 0; i < this.treeControl.dataNodes.length; i++) {
|
@@ -284,7 +330,7 @@ export class TreeComponent {
|
|
284
330
|
this.checklistSelection.deselect(tree);
|
285
331
|
for (let j = 0; j < itemSelected.length; j++) {
|
286
332
|
const element = itemSelected[j];
|
287
|
-
if (tree.id === element.id && (!element.parentId || tree.parentId === element.parentId)
|
333
|
+
if (tree.id === element.id && (!element.parentId || tree.parentId === element.parentId)) {
|
288
334
|
this.checklistSelection.select(tree);
|
289
335
|
}
|
290
336
|
}
|
@@ -336,6 +382,7 @@ export class TreeComponent {
|
|
336
382
|
}
|
337
383
|
/** Toggle the to-do item selection. Select/deselect all the descendants node */
|
338
384
|
todoItemSelectionToggle(node) {
|
385
|
+
this.selectNodeEvent.emit(node);
|
339
386
|
// tree have duplicate node
|
340
387
|
if (this.treeConfig.canHaveDupId) {
|
341
388
|
for (let i = 0; i < this.treeControl.dataNodes.length; i++) {
|
@@ -653,33 +700,50 @@ export class TreeComponent {
|
|
653
700
|
getNodeId(node) {
|
654
701
|
return `_${node.parentId ? node.parentId : ''}_${node.id}_${node.level}`;
|
655
702
|
}
|
703
|
+
getNodeByIdAndParentId(nodeId, parentId) {
|
704
|
+
return this.treeControl.dataNodes.find(x => {
|
705
|
+
return x.id === nodeId && x.parentId === parentId;
|
706
|
+
});
|
707
|
+
}
|
708
|
+
expandNode(node) {
|
709
|
+
this.treeControl.expand(node);
|
710
|
+
}
|
656
711
|
}
|
657
|
-
TreeComponent
|
658
|
-
{ type: Component, args: [{
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
]
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS90cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvSSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBRzVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBcUJuRixNQUFNLE9BQU8sYUFBYTtJQXNEeEIsWUFBb0IsS0FBd0IsRUFDbEMsWUFBMEIsRUFDMUIsWUFBNkIsRUFDN0IsY0FBc0M7UUFINUIsVUFBSyxHQUFM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QyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFrQjtRQUMxQixPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNFLENBQUM7OztZQXR1QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxVQUFVO2dCQUNwQixvN0pBQW9DO2dCQUVwQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7YUFDdEM7OztZQWhDUSxpQkFBaUI7WUFHakIsWUFBWTtZQUZaLGVBQWU7WUFHZixzQkFBc0I7Ozt1QkE4QjVCLEtBQUs7eUJBQ0wsS0FBSzsyQkFDTCxLQUFLOytCQUNMLEtBQUs7MkJBQ0wsS0FBSztpQ0FDTCxLQUFLOzhCQUNMLE1BQU07Z0NBQ04sTUFBTTs0QkFDTixNQUFNO2dDQUNOLE1BQU07OEJBQ04sTUFBTTtvQ0FDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJy4uL3JlbGF0ZWQvY29tbW9uL2RhdGEtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgRG9jdW1lbnROb2RlVHlwZSB9IGZyb20gJy4uL3JlbGF0ZWQvY29tbW9uL2RvY3VtZW50LWZvbGRlci10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBJdGVtSWNvblR5cGUgfSBmcm9tICcuLi9yZWxhdGVkL2NvbW1vbi9pdGVtLWljb24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgUmVsYXRlZENvbnN0IH0gZnJvbSAnLi4vcmVsYXRlZC9jb21tb24vcmVsYXRlZC5jb25zdCc7XHJcbmltcG9ydCBUcmVlRnVuY3Rpb25zIGZyb20gJy4vdHJlZS5mdW5jdGlvbic7XHJcbmltcG9ydCB7IFRyZWVDb25maWcgfSBmcm9tICcuL21vZGVsL3RyZWUtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZU1vZGVsIH0gZnJvbSAnLi9tb2RlbC90cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgS0VZQk9BUkRfRE9XTl9JQ09OLCBLRVlCT0FSRF9VUF9JQ09OIH0gZnJvbSAnLi4vLi4vY29tbW9uL3Ftcy1pY29uLmNvbnN0JztcclxuaW1wb3J0IHsgVHJlZUZsYXROb2RlIH0gZnJvbSAnLi9tb2RlbC90cmVlLWZsYXQtbm9kZS5tb2RlbCc7XHJcblxyXG5pbnRlcmZhY2UgVHJlZU5vZGUge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGNoaWxkcmVuPzogVHJlZU5vZGVbXTtcclxuICBwYXJlbnRJZD86IHN0cmluZztcclxuICBsZXZlbFR5cGU/OiBudW1iZXI7XHJcbn1cclxuaW50ZXJmYWNlIElDaGVja2VkTm9kZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBjaGVja2VkOiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Ftcy10cmVlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHRyZWVEYXRhOiBBcnJheTxUcmVlTW9kZWw+ID0gW107XHJcbiAgQElucHV0KCkgdHJlZUNvbmZpZzogVHJlZUNvbmZpZztcclxuICBASW5wdXQoKSBzZWxlY3RlZERhdGE6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcclxuICBASW5wdXQoKSBzZWxlY3RlZFJpc2tEYXRhOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBkaXNhYmxlZExpc3Q6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIGV4cGFuZE9uVGl0bGVDbGljazogYm9vbGVhbjtcclxuICBAT3V0cHV0KCkgc2VsZWN0Tm9kZUV2ZW50OiBFdmVudEVtaXR0ZXI8VHJlZUZsYXROb2RlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0Rm9sZGVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxUcmVlRmxhdE5vZGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGVja0JveEV2ZW50OiBFdmVudEVtaXR0ZXI8VHJlZUZsYXROb2RlW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGlsZENoZWNrZWRFdmVudDogRXZlbnRFbWl0dGVyPElDaGVja2VkTm9kZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG5vZGVFeHBhbmRFdmVudDogRXZlbnRFbWl0dGVyPFRyZWVGbGF0Tm9kZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGdldENoaWxkTm9kZVNlbGVjdE9uZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGxpc3RQYXJlbnRPYmogPSB7fTtcclxuICBmaWx0ZXJEYXRhOiBUcmVlTW9kZWxbXSA9IFtdO1xyXG4gIHRyZWVPYmplY3Q6IG9iamVjdDtcclxuICBhcnJJbmRleDogc3RyaW5nW10gPSBbXTtcclxuICBjaGVja2VkTm9kZUxpc3Q6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcclxuICB1c2VFeHBhbmRGZWF0dXJlID0gdHJ1ZTtcclxuICBhbGxvd1NlbGVjdEZvbGRlciA9IGZhbHNlO1xyXG4gIGFyZWFPZkN1cnJlbnRQcm9jZXNzID0gJyc7XHJcbiAgc2hvd0NoZWNrQm94ID0gZmFsc2U7XHJcbiAgYWxsb3dNdWx0aXBsZUNoZWNrID0gdHJ1ZTtcclxuICBzaW5nbGVTZWxlY3RlZE5vZGUgPSBmYWxzZTtcclxuICBvbmx5Q2hlY2tCb3hGb3JDaGlsZCA9IGZhbHNlO1xyXG4gIG9ubHlGb2xkZXIgPSBmYWxzZTtcclxuICBpdGVtSWNvblR5cGUgPSBJdGVtSWNvblR5cGU7XHJcbiAgZGlzcGxheVR5cGUgPSAxO1xyXG4gIG9wZW5JY29uID0gJyc7XHJcbiAgb3Blbkljb25Db2xvciA9ICcjMTk1NEE5JztcclxuICBjbG9zZUljb24gPSAnJztcclxuICBjbG9zZUljb25Db2xvciA9ICcjMDAwMDAwJztcclxuICBpdGVtSWNvbiA9ICcnO1xyXG4gIGl0ZW1JY29uU3ZnID0gJyc7XHJcbiAgaXRlbUljb25QYXRoID0gJyc7XHJcbiAgaXRlbUljb25CYXNlNjQgPSAnJztcclxuICBtb2R1bGVJZDogbnVtYmVyO1xyXG5cclxuICB0cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8VHJlZUZsYXROb2RlPihcclxuICAgIChub2RlKSA9PiB7XHJcbiAgICAgIHJldHVybiBub2RlLmxldmVsO1xyXG4gICAgfSxcclxuICAgIChub2RlKSA9PiB7XHJcbiAgICAgIHJldHVybiBub2RlLmV4cGFuZGFibGU7XHJcbiAgICB9XHJcbiAgKTtcclxuXHJcbiAgaXNDaGVja2VkID0gZmFsc2U7XHJcbiAgY2hlY2tsaXN0U2VsZWN0aW9uOiBhbnk7XHJcbiAgaWRDaGVja0ljb24gPSAnJztcclxuICBsaXN0Q2hpbGROb2RlID0gW107XHJcbiAgZGF0YVR5cGUgPSBEYXRhVHlwZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UpIHtcclxuICAgIGljb25SZWdpc3RyeS5hZGRTdmdJY29uTGl0ZXJhbCgna2V5Ym9hcmRfdXAnLCBkb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoS0VZQk9BUkRfVVBfSUNPTikpO1xyXG4gICAgaWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25MaXRlcmFsKCdrZXlib2FyZF9kb3duJywgZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKEtFWUJPQVJEX0RPV05fSUNPTikpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckZvbGRlckljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEZXZpYXRpb25JY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclJpc2tJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLnRyZWVEYXRhICYmIEpTT04uc3RyaW5naWZ5KGNoYW5nZXMudHJlZURhdGEuY3VycmVudFZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlcy50cmVlRGF0YS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnRyZWVEYXRhID0gWy4uLnRoaXMudHJlZURhdGEsIGNoYW5nZXMudHJlZURhdGEuY3VycmVudFZhbHVlXTtcclxuICAgICAgdGhpcy5pbml0VHJlZURhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy5zZWxlY3RlZERhdGEgJiZcclxuICAgICAgKGNoYW5nZXMuc2VsZWN0ZWREYXRhLmN1cnJlbnRWYWx1ZS5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlcy5zZWxlY3RlZERhdGEuY3VycmVudFZhbHVlKSAhPT1cclxuICAgICAgICBKU09OLnN0cmluZ2lmeShjaGFuZ2VzLnNlbGVjdGVkRGF0YS5wcmV2aW91c1ZhbHVlKSkpIHtcclxuICAgICAgdGhpcy5jaGVja1NlbGVjdGVkKGNoYW5nZXMuc2VsZWN0ZWREYXRhLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3QodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXMuZGlzYWJsZWRMaXN0ICYmIEpTT04uc3RyaW5naWZ5KGNoYW5nZXMuZGlzYWJsZWRMaXN0LmN1cnJlbnRWYWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KGNoYW5nZXMuZGlzYWJsZWRMaXN0LnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tEaXNhYmxlZExpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFRyZWVEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBpbml0VHJlZURhdGEoKSB7XHJcbiAgICB0aGlzLnRyZWVEYXRhLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGlmICghIWl0ZW0ucGFyZW50SWQgJiYgaXRlbS5wYXJlbnRJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5saXN0UGFyZW50T2JqW2l0ZW0ucGFyZW50SWRdID0gMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbS5jaGlsZElkICYmIGl0ZW0uY2hpbGRJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5saXN0UGFyZW50T2JqW2l0ZW0ucm9vdElkXSA9IDE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyRGF0YSA9IHRoaXMudHJlZURhdGE7XHJcblxyXG4gICAgdGhpcy50cmVlT2JqZWN0ID0gVHJlZUZ1bmN0aW9ucy5idWlsZE9iamVjdFRyZWUodGhpcy5maWx0ZXJEYXRhKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gVHJlZUZ1bmN0aW9ucy5idWlsZEFycmF5VHJlZSh0aGlzLnRyZWVPYmplY3QgfHwge30sIDApLm1hcChlbGVtZW50ID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc29ydERhdGFUcmVlKGVsZW1lbnQpO1xyXG4gICAgICBlbGVtZW50ID0gbnVsbDtcclxuICAgICAgZWxlbWVudCA9IHsgLi4ue30sIC4uLml0ZW0gfTtcclxuICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVzZUV4cGFuZEZlYXR1cmUgPSAhdGhpcy50cmVlQ29uZmlnPy5zaG93Q2hlY2tCb3g7XHJcbiAgICB0aGlzLmFsbG93U2VsZWN0Rm9sZGVyID0gdGhpcy50cmVlQ29uZmlnPy5hbGxvd1NlbGVjdEZvbGRlcjtcclxuICAgIHRoaXMuYXJlYU9mQ3VycmVudFByb2Nlc3MgPSB0aGlzLnRyZWVDb25maWc/LmFyZWFPZkN1cnJlbnRQcm9jZXNzO1xyXG4gICAgdGhpcy5zaG93Q2hlY2tCb3ggPSB0aGlzLnRyZWVDb25maWc/LnNob3dDaGVja0JveDtcclxuICAgIHRoaXMub25seUNoZWNrQm94Rm9yQ2hpbGQgPSB0aGlzLnRyZWVDb25maWc/Lm9ubHlDaGVja0JveEZvckNoaWxkO1xyXG4gICAgdGhpcy5tb2R1bGVJZCA9IHRoaXMudHJlZUNvbmZpZz8ubW9kdWxlSWQ7XHJcbiAgICB0aGlzLm9wZW5JY29uID0gdGhpcy50cmVlQ29uZmlnPy5vcGVuSWNvbjtcclxuICAgIHRoaXMub3Blbkljb25Db2xvciA9IHRoaXMudHJlZUNvbmZpZz8ub3Blbkljb25Db2xvciA/IHRoaXMudHJlZUNvbmZpZz8ub3Blbkljb25Db2xvciA6IHRoaXMub3Blbkljb25Db2xvcjtcclxuICAgIHRoaXMuY2xvc2VJY29uID0gdGhpcy50cmVlQ29uZmlnPy5jbG9zZUljb247XHJcbiAgICB0aGlzLmNsb3NlSWNvbkNvbG9yID0gdGhpcy50cmVlQ29uZmlnPy5jbG9zZUljb25Db2xvciA/IHRoaXMudHJlZUNvbmZpZz8uY2xvc2VJY29uQ29sb3IgOiB0aGlzLmNsb3NlSWNvbkNvbG9yO1xyXG4gICAgdGhpcy5pdGVtSWNvbiA9IHRoaXMudHJlZUNvbmZpZz8uaXRlbUljb247XHJcbiAgICB0aGlzLml0ZW1JY29uU3ZnID0gdGhpcy50cmVlQ29uZmlnPy5pdGVtSWNvblN2ZztcclxuICAgIHRoaXMuaXRlbUljb25QYXRoID0gdGhpcy50cmVlQ29uZmlnPy5pdGVtSWNvblBhdGg7XHJcbiAgICB0aGlzLml0ZW1JY29uQmFzZTY0ID0gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHRoaXMudHJlZUNvbmZpZz8uaXRlbUljb25CYXNlNjQpIGFzIHN0cmluZztcclxuICAgIHRoaXMuYWxsb3dNdWx0aXBsZUNoZWNrID0gdGhpcy50cmVlQ29uZmlnPy5hbGxvd011bHRpcGxlQ2hlY2s7XHJcbiAgICB0aGlzLnNpbmdsZVNlbGVjdGVkTm9kZSA9IHRoaXMudHJlZUNvbmZpZz8uc2luZ2xlU2VsZWN0ZWROb2RlO1xyXG4gICAgdGhpcy5vbmx5Rm9sZGVyID0gdGhpcy50cmVlQ29uZmlnPy5vbmx5Rm9sZGVyO1xyXG4gICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8VHJlZUZsYXROb2RlPih0aGlzLmFsbG93TXVsdGlwbGVDaGVjayk7IC8qIHRydWU6IG11bHRpcGxlICovXHJcblxyXG4gICAgdGhpcy5kaXNwbGF5VHlwZSA9IHRoaXMuZ2V0SXRlbUljb25UeXBlKHRoaXMudHJlZUNvbmZpZyk7XHJcblxyXG4gICAgLy8gRXhwYW5kIGNoaWxkIG5vZGUgdHJlZVxyXG4gICAgaWYgKHRoaXMudHJlZUNvbmZpZy5leHBhbmRBbGwpIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmRBbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSaXNrIFRyZWVcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUmlza0RhdGEubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJpc2tEYXRhLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHNlbGVjdGVkRGF0YS5maW5kSW5kZXgoZWwgPT4gZWwuaWQgPT09IHgucm9vdElkKTtcclxuICAgICAgICAgIGlmICh4LnJvb3RJZCA9PT0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0uaWQgJiYgaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRGF0YS5wdXNoKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jaGVja1NlbGVjdGVkKHNlbGVjdGVkRGF0YSk7XHJcbiAgICAgIHRoaXMuY2hlY2tCb3hFdmVudC5lbWl0KHNlbGVjdGVkRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9jaGVjayBkaXNhYmxlZCBsaXN0XHJcbiAgICB0aGlzLmNoZWNrRGlzYWJsZWRMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0Rpc2FibGVkTGlzdCgpIHtcclxuICAgIC8vIERpc2FibGUgTGlzdFxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRMaXN0Lmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgIGlmICh4LmlkID09PSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZFxyXG4gICAgICAgICAgICAmJiAoIXgucGFyZW50SWQgfHwgeC5wYXJlbnRJZCA9PT0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0/LnBhcmVudElkKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL1NlbGVjdGVkIG5vZGUgd2l0aCBzZWxlY3Qgb25lXHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZExpc3QubGVuZ3RoICYmIHRoaXMudHJlZUNvbmZpZy5zZWxlY3RPbmUpIHtcclxuICAgICAgbGV0IGl0ZW1NYXJrQ2hlY2tlZCA9IHRoaXMuZGlzYWJsZWRMaXN0W3RoaXMuZGlzYWJsZWRMaXN0Lmxlbmd0aCAtIDFdLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuaWRDaGVja0ljb24gPSBpdGVtTWFya0NoZWNrZWQ7XHJcbiAgICAgIC8vIGdldCBhbGwgY2hpbGRyZW4gbm9kZXMgb24gc2FtZSBsZXZlbFxyXG4gICAgICBsZXQgbGlzdENoaWxkTm9kZVNhbWVMZXZlbCA9IHRoaXMuZmluZENoaWxkTm9kZShpdGVtTWFya0NoZWNrZWQsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcclxuICAgICAgLy8gZ2V0IGFsbCBjaGlsZHJlbiBpbiBhbGwgbGV2ZWxcclxuICAgICAgdGhpcy5saXN0Q2hpbGROb2RlID0gW107XHJcbiAgICAgIHRoaXMuZ2V0Q2hpbGQobGlzdENoaWxkTm9kZVNhbWVMZXZlbCk7XHJcbiAgICAgIHRoaXMuZ2V0Q2hpbGROb2RlU2VsZWN0T25lLmVtaXQodGhpcy5saXN0Q2hpbGROb2RlKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoaXRlbU1hcmtDaGVja2VkID09PSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3ROb2RlRXZlbnQuZW1pdCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0LmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmlkID09PSBlbC50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyByZW1vdmUgYWxsIGNoaWxkcmVuIG5vZGVzIHdoZW4gdXNlciBkb250IG5lZWQgdG8gc2hvdyB0aGVtXHJcbiAgICAgICAgdGhpcy5saXN0Q2hpbGROb2RlLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsLmlkICYmIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldPy5pZCA9PT0gZWwuaWQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pZENoZWNrSWNvbiA9ICcnO1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlQWxsKCk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2hpbGQob2JqKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iai5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAob2JqLmNoaWxkcmVuW2ldLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgdGhpcy5nZXRDaGlsZChvYmouY2hpbGRyZW5baV0pO1xyXG4gICAgICAgIGRlbGV0ZSBvYmouY2hpbGRyZW5baV0uY2hpbGRyZW47XHJcbiAgICAgICAgdGhpcy5saXN0Q2hpbGROb2RlLnB1c2gob2JqLmNoaWxkcmVuW2ldKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxpc3RDaGlsZE5vZGUucHVzaChvYmouY2hpbGRyZW5baV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzb3J0RGF0YVRyZWUob2JqKSB7XHJcbiAgICBpZiAob2JqLmNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCBjaGlsZCA9IFtdO1xyXG4gICAgICBjb25zdCBsZWFmTm9kZSA9IG9iai5jaGlsZHJlbi5maWx0ZXIoeCA9PiAheC5jaGlsZHJlbik7XHJcbiAgICAgIGNvbnN0IHN1YkZvbGRlck5vZGUgPSBvYmouY2hpbGRyZW4uZmlsdGVyKHggPT4geC5jaGlsZHJlbik7XHJcbiAgICAgIC8vIGZvcihsZXQgaW5kZXggPSBzdWJGb2xkZXJOb2RlLmxlbmd0aCAtIDE7IGluZGV4ID49IDAgOyBpbmRleC0tKXtcclxuICAgICAgLy8gICBsZXQgZWwgPSBzdWJGb2xkZXJOb2RlW2luZGV4XTtcclxuICAgICAgLy8gICB0aGlzLnNvcnREYXRhVHJlZShlbCk7XHJcbiAgICAgIC8vICAgY2hpbGQudW5zaGlmdChlbCk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgc3ViRm9sZGVyTm9kZS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGxldCBlbCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5zb3J0RGF0YVRyZWUoZWwpO1xyXG4gICAgICAgIGNoaWxkLnB1c2goZWwpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGxlYWZOb2RlLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgbGV0IGVsID0gZWxlbWVudDtcclxuICAgICAgICBjaGlsZC5wdXNoKGVsKTtcclxuICAgICAgfSk7XHJcbiAgICAgIG9iai5jaGlsZHJlbiA9IGNoaWxkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIGdldEltYWdlUGF0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodGhpcy50cmVlQ29uZmlnLml0ZW1JY29uQmFzZTY0KSBhcyBzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBjaGVja1NlbGVjdGVkKGl0ZW1TZWxlY3RlZDogVHJlZUZsYXROb2RlW10pIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2xbJ2RhdGFOb2RlcyddKSByZXR1cm47XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV07XHJcbiAgICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3QodHJlZSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaXRlbVNlbGVjdGVkLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gaXRlbVNlbGVjdGVkW2pdO1xyXG4gICAgICAgICAgaWYgKHRyZWUuaWQgPT09IGVsZW1lbnQuaWQgJiYgKCFlbGVtZW50LnBhcmVudElkIHx8IHRyZWUucGFyZW50SWQgPT09IGVsZW1lbnQucGFyZW50SWQpICYmICF0cmVlLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdCh0cmVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDUwMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgY2hlY2tTZWxlY3RlZFNhbWVOb2RlKGl0ZW1TZWxlY3RlZDogVHJlZUZsYXROb2RlW10sIGZsYWc6IGJvb2xlYW4pIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgdHJlZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGl0ZW1TZWxlY3RlZC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpdGVtU2VsZWN0ZWRbal07XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQgJiYgdHJlZS5pZCA9PT0gZWxlbWVudC5pZFxyXG4gICAgICAgICAgJiYgdHJlZS5wYXJlbnRJZCA9PT0gZWxlbWVudC5wYXJlbnRJZCAmJiAhdHJlZS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgZmxhZyA/IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdCh0cmVlKSA6IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KHRyZWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXRlbUljb25UeXBlKHRyZWVDb25maWc6IFRyZWVDb25maWcpIHtcclxuICAgIGlmICh0cmVlQ29uZmlnLml0ZW1JY29uICYmIHRyZWVDb25maWcuaXRlbUljb24ubGVuZ3RoKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUubmFtZTtcclxuICAgIGlmICh0cmVlQ29uZmlnLml0ZW1JY29uUGF0aCAmJiB0cmVlQ29uZmlnLml0ZW1JY29uUGF0aC5sZW5ndGgpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5wYXRoO1xyXG4gICAgaWYgKHRyZWVDb25maWcuaXRlbUljb25CYXNlNjQgJiYgdHJlZUNvbmZpZy5pdGVtSWNvbkJhc2U2NC5sZW5ndGgpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5iYXNlNjQ7XHJcbiAgICBpZiAodHJlZUNvbmZpZy5pdGVtSWNvblN2ZyAmJiB0cmVlQ29uZmlnLml0ZW1JY29uU3ZnLmxlbmd0aCkgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnN2ZztcclxuICAgIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5ub25lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2Zvcm1lciA9IChub2RlOiBUcmVlTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xyXG4gICAgbGV0IGNoZWNrSGFzQ2hpbGQgPSB0cnVlO1xyXG4gICAgaWYgKCFub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGNoZWNrSGFzQ2hpbGQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoISghIW5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSkge1xyXG4gICAgICBjaGVja0hhc0NoaWxkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICBlbHNlIGlmIChcclxuICAgICAgISFub2RlLmNoaWxkcmVuICYmXHJcbiAgICAgIG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmXHJcbiAgICAgIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICFub2RlLmNoaWxkcmVuWzBdLm5hbWUubGVuZ3RoICYmXHJcbiAgICAgIG5vZGUuaWQudG9TdHJpbmcoKSA9PT0gdGhpcy5hcmVhT2ZDdXJyZW50UHJvY2Vzc1xyXG4gICAgKSB7XHJcbiAgICAgIGNoZWNrSGFzQ2hpbGQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISh0aGlzLmxpc3RQYXJlbnRPYmpbbm9kZS5pZF0gPT09IDEpKSB7XHJcbiAgICAgIGNoZWNrSGFzQ2hpbGQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBleHBhbmRhYmxlOiAhIW5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwLFxyXG4gICAgICBuYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgIGxldmVsLFxyXG4gICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgaGFzQ2hpbGQ6IGNoZWNrSGFzQ2hpbGQsXHJcbiAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgIGxldmVsVHlwZTogbm9kZS5sZXZlbFR5cGVcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKFxyXG4gICAgdGhpcy50cmFuc2Zvcm1lcixcclxuICAgIChub2RlKSA9PiB7XHJcbiAgICAgIHJldHVybiBub2RlLmxldmVsO1xyXG4gICAgfSxcclxuICAgIChub2RlKSA9PiB7XHJcbiAgICAgIHJldHVybiBub2RlLmV4cGFuZGFibGU7XHJcbiAgICB9LFxyXG4gICAgKG5vZGUpID0+IHtcclxuICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW47XHJcbiAgICB9XHJcbiAgKTtcclxuXHJcbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcclxuXHJcblxyXG4gIC8qKiBXaGV0aGVyIGFsbCB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIG5vZGUgYXJlIHNlbGVjdGVkICovXHJcbiAgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBUcmVlRmxhdE5vZGUpOiBib29sZWFuIHtcclxuXHJcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9ICF0aGlzLnNpbmdsZVNlbGVjdGVkTm9kZSA/IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSkuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQpIDogW107XHJcblxyXG4gICAgaWYgKCFkZXNjZW5kYW50cy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XHJcblxyXG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBkZXNjZW5kYW50cy5ldmVyeShjaGlsZCA9PiB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGNoaWxkKSk7XHJcbiAgICBpZiAoIXNlbGVjdGVkICYmIGFsbFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcclxuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbGxTZWxlY3RlZDtcclxuXHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciBwYXJ0IG9mIHRoZSBkZXNjZW5kYW50cyBhcmUgc2VsZWN0ZWQgKi9cclxuICBkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGU6IFRyZWVGbGF0Tm9kZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSAhdGhpcy5zaW5nbGVTZWxlY3RlZE5vZGUgPyB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKSA6IFtdO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGRlc2NlbmRhbnRzLnNvbWUoY2hpbGQgPT4gdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjaGlsZCkpO1xyXG4gICAgcmV0dXJuIHJlc3VsdCAmJiAhdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvZ2dsZSB0aGUgdG8tZG8gaXRlbSBzZWxlY3Rpb24uIFNlbGVjdC9kZXNlbGVjdCBhbGwgdGhlIGRlc2NlbmRhbnRzIG5vZGUgKi9cclxuICB0b2RvSXRlbVNlbGVjdGlvblRvZ2dsZShub2RlOiBUcmVlRmxhdE5vZGUpOiB2b2lkIHtcclxuICAgIC8vIHRyZWUgaGF2ZSBkdXBsaWNhdGUgbm9kZVxyXG4gICAgaWYgKHRoaXMudHJlZUNvbmZpZy5jYW5IYXZlRHVwSWQpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZCA9PT0gbm9kZS5pZFxyXG4gICAgICAgICAgJiYgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0ucGFyZW50SWQgPT09IG5vZGUucGFyZW50SWRcclxuICAgICAgICAgICYmICF0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24udG9nZ2xlKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gcHJvY2Vzcy8gZG9jdW1lbnQgc2luZ2xlIHNlbGVjdGVkXHJcbiAgICBpZiAodGhpcy5zaW5nbGVTZWxlY3RlZE5vZGUpIHtcclxuICAgICAgdGhpcy5jaGVja0JveEV2ZW50LmVtaXQodGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQpO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCk7XHJcblxyXG4gICAgICB0aGlzLmNoZWNrU2VsZWN0ZWRTYW1lTm9kZShkZXNjZW5kYW50cywgdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpKTtcclxuXHJcbiAgICAgICF0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSlcclxuICAgICAgICA/IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5kZXNjZW5kYW50cylcclxuICAgICAgICA6IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2NlbmRhbnRzKTtcclxuXHJcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgICBjb25zdCBhbGxOb2RlSXNQYXJlbnQgPSB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5ldmVyeShjaGlsZCA9PiBjaGlsZC5leHBhbmRhYmxlKTtcclxuICAgICAgaWYgKGFsbE5vZGVJc1BhcmVudCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdChlbGVtZW50KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoZWNrQm94RXZlbnQuZW1pdCh0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2RvQ2hpbGRTZWxlY3Rpb25Ub2dnbGUobm9kZTogVHJlZUZsYXROb2RlKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZCA9PT0gbm9kZS5pZFxyXG4gICAgICAgICYmIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLnBhcmVudElkID09PSBub2RlLnBhcmVudElkXHJcbiAgICAgICAgJiYgIXRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmRpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24udG9nZ2xlKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xyXG4gICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMuY2hlY2tCb3hFdmVudC5lbWl0KHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkKTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9kb0l0ZW1TZWxlY3Rpb25CeUlkKGlkczogYW55W10pOiB2b2lkIHtcclxuICAgIGlkcy5mb3JFYWNoKFxyXG4gICAgICBpZCA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmlkID09PSBpZFxyXG4gICAgICAgICAgICAmJiAhdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldKSlcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi50b2dnbGUodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMuY2hlY2tCb3hFdmVudC5lbWl0KHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2RvSXRlbVNlbGVjdGlvbihub2RlczogVHJlZU5vZGVbXSk6IHZvaWQge1xyXG4gICAgbm9kZXMuZm9yRWFjaChcclxuICAgICAgbm9kZSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmlkID09PSBub2RlLmlkICYmXHJcbiAgICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLnBhcmVudElkID09PSBub2RlLnBhcmVudElkICYmXHJcbiAgICAgICAgICAgICF0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5kaXNhYmxlZCAmJiAhdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0uZXhwYW5kYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0pKVxyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnRvZ2dsZSh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy5jaGVja0JveEV2ZW50LmVtaXQodGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZG9Gb2xkZXJTZWxlY3Rpb24obm9kZXM6IFRyZWVOb2RlW10pOiB2b2lkIHtcclxuICAgIG5vZGVzLmZvckVhY2goXHJcbiAgICAgIG5vZGUgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZCA9PT0gbm9kZS5pZCAmJlxyXG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5wYXJlbnRJZCA9PT0gbm9kZS5wYXJlbnRJZCAmJlxyXG4gICAgICAgICAgICAhdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0uZGlzYWJsZWQgJiYgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0uZXhwYW5kYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0pKVxyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnRvZ2dsZSh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy5jaGVja0JveEV2ZW50LmVtaXQodGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBub2RlOiBUcmVlRmxhdE5vZGUpID0+IHtcclxuICAgIHJldHVybiBub2RlLmV4cGFuZGFibGU7XHJcbiAgfTtcclxuXHJcbiAgc2VsZWN0Tm9kZShub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgIGlmICh3aW5kb3dbUmVsYXRlZENvbnN0LklTX0RJU1BMQVlfU0VBUkNIX1JFU1VMVF0pIHtcclxuICAgICAgd2luZG93LnBvc3RNZXNzYWdlKFJlbGF0ZWRDb25zdC5ISURFX1NFQVJDSF9SRVNVTFQsICcqJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudHJlZUNvbmZpZy5zZWxlY3RPbmUpIHtcclxuICAgICAgbm9kZS5pdGVtVHlwZSA9IHRoaXMuY2hlY2tEYXRhVHlwZVNlbGVjdE5vZGUobm9kZSk7XHJcbiAgICAgIHRoaXMuaWRDaGVja0ljb24gPSBub2RlLmlkO1xyXG4gICAgICB0aGlzLnNlbGVjdE5vZGVFdmVudC5lbWl0KG5vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tEYXRhVHlwZVNlbGVjdE5vZGUobm9kZTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICBsZXQgaXRlbVR5cGUgPSAtMTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kdWxlSWQpIHtcclxuICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgIGl0ZW1UeXBlID0gbm9kZS5leHBhbmRhYmxlID8gRGF0YVR5cGUuYXJlYSA6IERhdGFUeXBlLnByb2Nlc3M7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XHJcbiAgICAgICAgaXRlbVR5cGUgPSBub2RlLmV4cGFuZGFibGUgPyBEYXRhVHlwZS5mb2xkZXIgOiBEYXRhVHlwZS5kb2N1bWVudDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaXRlbVR5cGUgPSB0aGlzLm1vZHVsZUlkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtVHlwZTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEZvbGRlcihub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgIHRoaXMuc2VsZWN0Rm9sZGVyRXZlbnQuZW1pdChub2RlKTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kTm9kZShub2RlOiBUcmVlRmxhdE5vZGUsIGlzRXhwYW5kTm9kZT86IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLnRyZWVDb25maWcuc2VsZWN0T25lKSB7XHJcbiAgICAgIC8vIGlmICh0aGlzLmRpc2FibGVkTGlzdC5sZW5ndGggJiZcclxuICAgICAgLy8gICAobm9kZS5pZCA9PT0gdGhpcy5kaXNhYmxlZExpc3RbdGhpcy5kaXNhYmxlZExpc3QubGVuZ3RoIC0gMV0udG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAvLyAgICAgbm9kZS5wYXJlbnRJZCA9PT0gdGhpcy5kaXNhYmxlZExpc3RbdGhpcy5kaXNhYmxlZExpc3QubGVuZ3RoIC0gMV0udG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgLy8gICByZXR1cm47XHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5pZENoZWNrSWNvbiA9IG5vZGUuaWQ7XHJcbiAgICAgIG5vZGUuaXRlbVR5cGUgPSB0aGlzLmNoZWNrRGF0YVR5cGVTZWxlY3ROb2RlKG5vZGUpO1xyXG4gICAgICB0aGlzLnNlbGVjdE5vZGVFdmVudC5lbWl0KG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3dbUmVsYXRlZENvbnN0LklTX0RJU1BMQVlfU0VBUkNIX1JFU1VMVF0pIHtcclxuICAgICAgd2luZG93LnBvc3RNZXNzYWdlKFJlbGF0ZWRDb25zdC5ISURFX1NFQVJDSF9SRVNVTFQsICcqJyk7XHJcbiAgICB9XHJcbiAgICAvLyBzZXQgdXNlRXhwYW5kRmVhdHVyZSA9IHRydWUgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBvZiB0cmVlIGxvYWRpbmdcclxuICAgIGlmICghaXNFeHBhbmROb2RlIHx8ICF0aGlzLnVzZUV4cGFuZEZlYXR1cmUpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyckluZGV4Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXJySW5kZXhbaV0gPT09IG5vZGUuaWQpIHtcclxuICAgICAgICAgIHRoaXMuYXJySW5kZXguc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNFeHBhbmROb2RlICYmICF0aGlzLmV4cGFuZE9uVGl0bGVDbGljaykge1xyXG4gICAgICAgIHRoaXMubm9kZUV4cGFuZEV2ZW50LmVtaXQobm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy8gZ2V0IGFycmF5IGluZGV4IHRvIGV4cGFuZCBub2RlIGFmdGVyIHJlZnJlc2ggZGF0YXNvdXJjZVxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGxldCBpc0NoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IGlzUmVtb3ZlID0gZmFsc2U7XHJcbiAgICB0aGlzLmFyckluZGV4LnB1c2gobm9kZS5pZCk7XHJcblxyXG4gICAgY29uc3QgY2hpbGRBcnJheSA9IHRoaXMudHJlZURhdGEuZmlsdGVyKCh4KSA9PiB7XHJcbiAgICAgIHJldHVybiB4LnBhcmVudElkID09PSBub2RlLmlkO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgcm9vdElkID0gJzAnO1xyXG4gICAgbGV0IHBhcmVudEVsZW1lbnQ6IFRyZWVOb2RlO1xyXG4gICAgbGV0IGNoaWxkcmVuTGlzdDogVHJlZU5vZGVbXTtcclxuICAgIGlmIChjaGlsZEFycmF5Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjaGlsZEFycmF5LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0ucm9vdElkID09PSByb290SWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGdldCBjaGlsZCBub2RlIGZyb20gb3JpZ2luYWwgZGF0YXNvdXJjZVxyXG4gICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGROb2RlKGl0ZW0ucm9vdElkLCBjaGlsZEFycmF5KTtcclxuICAgICAgcm9vdElkID0gaXRlbS5yb290SWQ7XHJcblxyXG4gICAgICBpbmRleCA9IHRoaXMuZ2V0Tm9kZUluZGV4KGNoaWxkLmlkLCB1bmRlZmluZWQsIHRoaXMuZGF0YVNvdXJjZVsnX3RyZWVDb250cm9sJ10uZGF0YU5vZGVzKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBjaGlsZCBub2RlIHRvIGV4cGFuZCBub2RlXHJcbiAgICAgIHBhcmVudEVsZW1lbnQgPSB0aGlzLmZpbmRDaGlsZE5vZGUobm9kZS5pZCwgdGhpcy5kYXRhU291cmNlLmRhdGEpO1xyXG4gICAgICBpZiAocGFyZW50RWxlbWVudCkge1xyXG4gICAgICAgIC8vIHRlbXBvcmFyeSByZW1vdmUgYWxsIG5vZGUgd2l0aG91dCBjaGlsZHJlbiA9PiBwdXJwb3NlIHRvIGFkZCBub2RlIGZvbGRlciBmaXJzdFxyXG4gICAgICAgIGlmICghaXNSZW1vdmUpIHtcclxuICAgICAgICAgIGNoaWxkcmVuTGlzdCA9IFsuLi5wYXJlbnRFbGVtZW50LmNoaWxkcmVuXTtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4ocGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICBpc1JlbW92ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFkZCBub2RlIGZvbGRlciBmaXJzdFxyXG4gICAgICAgIHBhcmVudEVsZW1lbnQuY2hpbGRyZW4ucHVzaChjaGlsZCk7XHJcbiAgICAgICAgaXNDaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIGFkZCBub2RlIHdpdGhvdXQgY2hpbGRyZW4gYWdhaW5cclxuICAgIGlmIChpc1JlbW92ZSkge1xyXG4gICAgICB0aGlzLmFkZENoaWxkcmVuKHBhcmVudEVsZW1lbnQsIGNoaWxkcmVuTGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVmcmVzaCBkYXRhIGFuZCBleHBhbmQgdHJlZSBub2RlIGZyb20gcm9vdCBub2RlXHJcbiAgICBpZiAoaXNDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoVHJlZURhdGEoKTtcclxuICAgICAgdGhpcy5hcnJJbmRleC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaW5kZXggPSB0aGlzLmdldE5vZGVJbmRleChpdGVtLCB1bmRlZmluZWQsIHRoaXMuZGF0YVNvdXJjZVsnX3RyZWVDb250cm9sJ10uZGF0YU5vZGVzKTtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpbmRleF0pO1xyXG4gICAgICB9KTtcclxuICAgICAgaXNDaGFuZ2UgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUNoaWxkcmVuKHBhcmVudEVsZW1lbnQ/OiBUcmVlTm9kZSkge1xyXG4gICAgaWYgKHBhcmVudEVsZW1lbnQuY2hpbGRyZW4pIHtcclxuICAgICAgcGFyZW50RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQ2hpbGRyZW4ocGFyZW50RWxlbWVudD86IFRyZWVOb2RlLCBjaGlsZHJlbkxpc3Q/OiBUcmVlTm9kZVtdKSB7XHJcbiAgICBpZiAoY2hpbGRyZW5MaXN0KSB7XHJcbiAgICAgIGNoaWxkcmVuTGlzdC5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgcGFyZW50RWxlbWVudC5jaGlsZHJlbi5wdXNoKGUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5vZGVJbmRleChpZDogc3RyaW5nLCBsZXZlbD86IG51bWJlciwgZGF0YT86IGFueVtdKSB7XHJcbiAgICBpZiAobGV2ZWwpIHtcclxuICAgICAgcmV0dXJuIGRhdGEuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHguaWQgPT09IGlkICYmIHgubGV2ZWwgPT09IGxldmVsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YS5maW5kSW5kZXgoKHgpID0+IHtcclxuICAgICAgcmV0dXJuIHguaWQgPT09IGlkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaGlsZE5vZGUocm9vdElkOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgY2hpbGRBcnJheSA9IGRhdGEuZmlsdGVyKCh4KSA9PiB7XHJcbiAgICAgIHJldHVybiB4LnJvb3RJZCA9PT0gcm9vdElkO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjaGlsZCA9IHsgaWQ6IGNoaWxkQXJyYXlbMF0ucm9vdElkLCBuYW1lOiBjaGlsZEFycmF5WzBdLnN1Yk5hbWUsIGNoaWxkcmVuOiBbXSB9IGFzIFRyZWVOb2RlO1xyXG4gICAgY2hpbGRBcnJheS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGNoaWxkLmNoaWxkcmVuLnB1c2goeyBpZDogaXRlbS5jaGlsZElkLCBuYW1lOiBpdGVtLmNoaWxkTmFtZSwgcGFyZW50SWQ6IHJvb3RJZCB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNoaWxkO1xyXG4gIH1cclxuXHJcbiAgZmluZENoaWxkTm9kZShpZDogc3RyaW5nLCBkYXRhOiBUcmVlTm9kZVtdKSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcclxuICAgIGZvciAoY29uc3QgY3VycmVudEZhdGhlciBvZiBkYXRhKSB7XHJcbiAgICAgIGlmIChjdXJyZW50RmF0aGVyLmlkID09PSBpZCkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50RmF0aGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY3VycmVudEZhdGhlci5jaGlsZHJlbikge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDaGlsZCA9IGN1cnJlbnRGYXRoZXIuY2hpbGRyZW4uZmluZCgoeCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHguaWQgPT09IGlkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjdXJyZW50Q2hpbGQpIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50Q2hpbGQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcclxuICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRDaGlsZDEgb2YgY3VycmVudEZhdGhlci5jaGlsZHJlbikge1xyXG4gICAgICAgICAgaWYgKGlkICE9PSBjdXJyZW50Q2hpbGQxLmlkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZENoaWxkTm9kZShpZCwgY3VycmVudEZhdGhlci5jaGlsZHJlbik7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFRyZWVEYXRhKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBbXTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGdldE5vZGVJY29uKG5vZGU6IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgaWYgKHRoaXMub3Blbkljb24gJiYgdGhpcy5jbG9zZUljb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/IHRoaXMub3Blbkljb24gOiB0aGlzLmNsb3NlSWNvbjtcclxuICAgIH1cclxuICAgIHN3aXRjaCAodGhpcy5tb2R1bGVJZCkge1xyXG4gICAgICBjYXNlIERhdGFUeXBlLmRvY3VtZW50OiB7XHJcbiAgICAgICAgY29uc3Qgbm9kZURhdGEgPSB0aGlzLnRyZWVEYXRhLmZpbHRlcih4ID0+IHsgcmV0dXJuIHgucm9vdElkID09PSBub2RlLmlkOyB9KTtcclxuICAgICAgICBpZiAobm9kZURhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgc3dpdGNoIChub2RlRGF0YVswXS5sZXZlbFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkRlcGFydG1lbnRGb2xkZXI6XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdkZXBhcnRtZW50X2ZvbGRlcl9vdXRsaW5lZCcgOiAnZGVwYXJ0bWVudF9mb2xkZXInO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuUmVnaW9uYWxGb2xkZXI6XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdyZWdpb25hbF9mb2xkZXJfb3V0bGluZWQnIDogJ3JlZ2lvbmFsX2ZvbGRlcic7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5Ub3BGb2xkZXI6XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdlbnRlcnByaXNlX2ZvbGRlcl9vdXRsaW5lZCcgOiAnZW50ZXJwcmlzZV9mb2xkZXInO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRm9sZGVyOlxyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnbG9jYWxfZm9sZGVyX291dGxpbmVkJyA6ICdsb2NhbF9mb2xkZXInO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnZm9sZGVyX291dGxpbmVkJyA6ICdmb2xkZXInO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2tleWJvYXJkX3VwJyA6ICdrZXlib2FyZF9kb3duJztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdwcm9jZXNzX2FyZWFfb3V0bGluZWQnIDogJ3Byb2Nlc3NfYXJlYSc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdrZXlib2FyZF91cCcgOiAna2V5Ym9hcmRfZG93bic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJdGVtSWNvbihub2RlKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kdWxlSWQpIHtcclxuICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcclxuICAgICAgICBzd2l0Y2ggKG5vZGUubGV2ZWxUeXBlKSB7XHJcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcclxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9kZXBhcnRtZW50JztcclxuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9yZWdpb25hbCc7XHJcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuVG9wRm9sZGVyOlxyXG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50X2VudGVycHJpc2UnO1xyXG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcclxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9sb2NhbCc7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50JztcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2VzczpcclxuICAgICAgICByZXR1cm4gJ3Byb2Nlc3MnO1xyXG4gICAgICBjYXNlIERhdGFUeXBlLmNoZWNrbGlzdDpcclxuICAgICAgICByZXR1cm4gJ2NoZWNrbGlzdCc7XHJcbiAgICAgIGNhc2UgRGF0YVR5cGUuZGV2aWF0aW9uOlxyXG4gICAgICAgIHJldHVybiAnZGV2aWF0aW9uJztcclxuICAgICAgY2FzZSBEYXRhVHlwZS5yaXNrOlxyXG4gICAgICAgIHJldHVybiAncmlzayc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGb2xkZXJOb2RlKG5vZGU6IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgaWYgKCF0aGlzLmV4cGFuZE9uVGl0bGVDbGljaykge1xyXG4gICAgICB0aGlzLm9uRXhwYW5kTm9kZShub2RlLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5vZGVJZChub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgIHJldHVybiBgXyR7bm9kZS5wYXJlbnRJZCA/IG5vZGUucGFyZW50SWQgOiAnJ31fJHtub2RlLmlkfV8ke25vZGUubGV2ZWx9YDtcclxuICB9XHJcbn1cclxuIl19
|
712
|
+
TreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: TreeComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DomSanitizer }, { token: i2.MatIconRegistry }, { token: i3.QMSIconRegistryService }], target: i0.ɵɵFactoryTarget.Component });
|
713
|
+
TreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: TreeComponent, selector: "qms-tree", inputs: { treeData: "treeData", treeConfig: "treeConfig", selectedData: "selectedData", selectedRiskData: "selectedRiskData", disabledList: "disabledList", expandOnTitleClick: "expandOnTitleClick", expandToChildNode: "expandToChildNode" }, outputs: { selectNodeEvent: "selectNodeEvent", selectFolderEvent: "selectFolderEvent", checkBoxEvent: "checkBoxEvent", childCheckedEvent: "childCheckedEvent", nodeExpandEvent: "nodeExpandEvent", getChildNodeSelectOne: "getChildNodeSelectOne" }, usesOnChanges: true, ngImport: i0, template: "<mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"tree__container\"\r\n>\r\n <mat-tree-node\r\n class=\"tree-branch\"\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n >\r\n <!-- form thu 1 - child -->\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n *ngIf=\"node.name && showCheckBox && !onlyCheckBoxForChild && !onlyFolder\"\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"checklistSelection.isSelected(node)\"\r\n (change)=\"todoItemSelectionToggle(node)\"\r\n >\r\n </mat-checkbox>\r\n\r\n <!-- form thu 2 -->\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n *ngIf=\"node.name && showCheckBox && onlyCheckBoxForChild && !onlyFolder\"\r\n class=\"ml-10 checklist-leaf-node\"\r\n [checked]=\"checklistSelection.isSelected(node)\"\r\n (change)=\"todoItemSelectionToggle(node)\"\r\n ></mat-checkbox>\r\n <div\r\n class=\"expand-node\"\r\n *ngIf=\"node.name && !onlyFolder\"\r\n [class.bgSelected]=\"treeConfig.selectOne && idCheckIcon == node.id\"\r\n (click)=\"selectNode(node)\"\r\n [id]=\"getNodeId(node)\"\r\n >\r\n <div class=\"expand-node__text\">\r\n <mat-icon\r\n *ngIf=\"displayType === itemIconType.name && !onlyCheckBoxForChild\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n >\r\n {{ itemIcon }}\r\n </mat-icon>\r\n\r\n <mat-icon\r\n *ngIf=\"displayType === itemIconType.svg && !onlyCheckBoxForChild\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n [svgIcon]=\"itemIconSvg\"\r\n >\r\n </mat-icon>\r\n\r\n <img\r\n *ngIf=\"displayType === itemIconType.path && !onlyCheckBoxForChild\"\r\n class=\"mat-icon\"\r\n [src]=\"itemIconPath\"\r\n />\r\n\r\n <img\r\n *ngIf=\"displayType === itemIconType.base64 && !onlyCheckBoxForChild\"\r\n class=\"mat-icon image-base64\"\r\n [src]=\"getImagePath()\"\r\n />\r\n\r\n <mat-icon\r\n *ngIf=\"displayType === itemIconType.none && !onlyCheckBoxForChild\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n [svgIcon]=\"getItemIcon(node)\"\r\n ></mat-icon>\r\n <span class=\"text-node\">{{ node.name }}</span>\r\n </div>\r\n <mat-icon\r\n class=\"icon-check\"\r\n *ngIf=\"treeConfig.selectOne && idCheckIcon == node.id\"\r\n >done</mat-icon\r\n >\r\n </div>\r\n </mat-tree-node>\r\n\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding>\r\n <!-- form thu 1 - parent -->\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n *ngIf=\"showCheckBox && !onlyCheckBoxForChild\"\r\n [checked]=\"descendantsAllSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"todoItemSelectionToggle(node)\"\r\n ></mat-checkbox>\r\n <button\r\n class=\"button-boder\"\r\n mat-icon-button\r\n matTreeNodeToggle\r\n [disableRipple]=\"!node.hasChild\"\r\n [attr.aria-label]=\"'toggle ' + node.filename\"\r\n >\r\n <mat-icon\r\n *ngIf=\"openIcon && closeIcon\"\r\n class=\"mat-icon-rtl-mirror\"\r\n [ngStyle]=\"{\r\n color: treeControl.isExpanded(node) ? openIconColor : closeIconColor\r\n }\"\r\n >{{ getNodeIcon(node) }}</mat-icon\r\n >\r\n <mat-icon\r\n *ngIf=\"!openIcon || !closeIcon\"\r\n class=\"mat-icon-rtl-mirror\"\r\n [ngClass]=\"{\r\n 'open-icon': treeControl.isExpanded(node),\r\n 'not-department-icon': moduleId !== dataType.document\r\n }\"\r\n [svgIcon]=\"getNodeIcon(node)\"\r\n >\r\n </mat-icon>\r\n </button>\r\n <span\r\n *ngIf=\"expandOnTitleClick\"\r\n matTreeNodeToggle\r\n class=\"text-node-parent\"\r\n style=\"cursor: pointer\"\r\n (click)=\"onExpandNode(node)\"\r\n [ngStyle]=\"{\r\n color: treeControl.isExpanded(node) ? openIconColor : '#000000'\r\n }\"\r\n >\r\n <span>{{ node.name }}</span>\r\n <mat-icon\r\n class=\"icon-check\"\r\n *ngIf=\"treeConfig.selectOne && idCheckIcon == node.id\"\r\n >done</mat-icon\r\n >\r\n </span>\r\n <span\r\n *ngIf=\"!expandOnTitleClick\"\r\n class=\"text-node-parent\"\r\n (click)=\"selectFolderNode(node)\"\r\n style=\"cursor: pointer\"\r\n [id]=\"getNodeId(node)\"\r\n >\r\n <span>{{ node.name }}</span>\r\n <mat-icon\r\n class=\"icon-check\"\r\n *ngIf=\"treeConfig.selectOne && idCheckIcon == node.id\"\r\n >done</mat-icon\r\n >\r\n </span>\r\n </mat-tree-node>\r\n</mat-tree>\r\n", styles: ["@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFWJ0bbck.woff2) format(\"woff2\");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFUZ0bbck.woff2) format(\"woff2\");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFWZ0bbck.woff2) format(\"woff2\");unicode-range:U+1f??}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFVp0bbck.woff2) format(\"woff2\");unicode-range:U+0370-03ff}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFWp0bbck.woff2) format(\"woff2\");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01a0-01a1,U+01af-01b0,U+1ea0-1ef9,U+20ab}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFW50bbck.woff2) format(\"woff2\");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFVZ0b.woff2) format(\"woff2\");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Raleway;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v19/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCFPrEHJA.woff2) format(\"woff2\");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Raleway;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v19/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCMPrEHJA.woff2) format(\"woff2\");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Raleway;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v19/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCHPrEHJA.woff2) format(\"woff2\");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01a0-01a1,U+01af-01b0,U+1ea0-1ef9,U+20ab}@font-face{font-family:Raleway;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v19/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCGPrEHJA.woff2) format(\"woff2\");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Raleway;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v19/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrE.woff2) format(\"woff2\");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.tree__container{font-family:Open Sans;font-style:normal;font-weight:400;font-size:.875rem;line-height:19px;color:#323232}.tree__container .mat-tree-node{color:#000;min-height:0}.tree__container .mat-tree-node .mat-checkbox.qms-group-options{padding:0}.tree__container .mat-tree-node .mat-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.tree__container .button{margin-left:6px}.tree__container .button:focus,.tree__container .button:hover{background-color:#009ef2;border-radius:2px;width:auto}.tree__container .button-boder:focus,.tree__container .button:focus{outline:0}.tree__container .button-folder-boder:focus{outline:0}.tree__container .button-folder-boder:focus,.tree__container .button-folder-boder:hover{background-color:#009ef2;border-radius:2px;width:auto}.tree__container .expand-node{margin-left:8px;min-height:32px;justify-content:space-between;width:100%}.tree__container .expand-node,.tree__container .expand-node .expand-node__text{display:flex;align-items:center}.tree__container .expand-node .mat-icon{color:rgba(0,0,0,.6);margin-right:17px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.tree__container .expand-node .mat-icon svg{display:block;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.tree__container .expand-node.bgSelected .icon-check{color:#1954a9}.tree__container .text-node-parent{width:100%;display:flex;align-items:center;justify-content:space-between;margin-left:10px;cursor:pointer}.tree__container .text-node-parent.active-item{color:#1954a9!important}.tree__container .text-node-parent.bgSelected .icon-check{color:#1954a9}.tree__container .mr-11{margin-right:11px}.tree__container .ml-10{margin-left:10px}.tree__container .tree-branch:hover{background-color:#e5eefb}.tree__container .image-base64{width:20px;height:20px}.tree__container .mat-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}::ng-deep .mat-tree .mat-checkbox.qms-group-options{padding:0}::ng-deep .mat-tree .mat-checkbox.qms-group-options.mat-checkbox-checked{background-color:transparent}::ng-deep .mat-tree .mat-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:0}svg{display:block;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.open-icon.not-department-icon svg path,.open-icon svg path:first-child{fill:#1954a9}"], components: [{ type: i4.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i4.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { type: i4.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { type: i4.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { type: i4.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.QMSGroupOptionDirective, selector: "[qms-group-options]" }, { type: i8.AutocompleteOffDirective, selector: "[qms-group-options]" }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], encapsulation: i0.ViewEncapsulation.None });
|
714
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: TreeComponent, decorators: [{
|
715
|
+
type: Component,
|
716
|
+
args: [{
|
717
|
+
selector: 'qms-tree',
|
718
|
+
templateUrl: './tree.component.html',
|
719
|
+
styleUrls: ['./tree.component.scss'],
|
720
|
+
encapsulation: ViewEncapsulation.None,
|
721
|
+
}]
|
722
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }, { type: i2.MatIconRegistry }, { type: i3.QMSIconRegistryService }]; }, propDecorators: { treeData: [{
|
723
|
+
type: Input
|
724
|
+
}], treeConfig: [{
|
725
|
+
type: Input
|
726
|
+
}], selectedData: [{
|
727
|
+
type: Input
|
728
|
+
}], selectedRiskData: [{
|
729
|
+
type: Input
|
730
|
+
}], disabledList: [{
|
731
|
+
type: Input
|
732
|
+
}], expandOnTitleClick: [{
|
733
|
+
type: Input
|
734
|
+
}], expandToChildNode: [{
|
735
|
+
type: Input
|
736
|
+
}], selectNodeEvent: [{
|
737
|
+
type: Output
|
738
|
+
}], selectFolderEvent: [{
|
739
|
+
type: Output
|
740
|
+
}], checkBoxEvent: [{
|
741
|
+
type: Output
|
742
|
+
}], childCheckedEvent: [{
|
743
|
+
type: Output
|
744
|
+
}], nodeExpandEvent: [{
|
745
|
+
type: Output
|
746
|
+
}], getChildNodeSelectOne: [{
|
747
|
+
type: Output
|
748
|
+
}] } });
|
749
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9JLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBRzVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7O0FBcUJuRixNQUFNLE9BQU8sYUFBYTtJQXVEeEIsWUFBb0IsS0FBd0IsRUFDbEMsWUFBMEIsRUFDMUIsWUFBNkIsRUFDN0IsY0FBc0M7UUFINUIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDbEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJB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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWljb24vaWNvbi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi9yZWxhdGVkL2NvbW1vbi9kYXRhLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IERvY3VtZW50Tm9kZVR5cGUgfSBmcm9tICcuLi9yZWxhdGVkL2NvbW1vbi9kb2N1bWVudC1mb2xkZXItdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgSXRlbUljb25UeXBlIH0gZnJvbSAnLi4vcmVsYXRlZC9jb21tb24vaXRlbS1pY29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFJlbGF0ZWRDb25zdCB9IGZyb20gJy4uL3JlbGF0ZWQvY29tbW9uL3JlbGF0ZWQuY29uc3QnO1xyXG5pbXBvcnQgVHJlZUZ1bmN0aW9ucyBmcm9tICcuL3RyZWUuZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBUcmVlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbC90cmVlLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVNb2RlbCB9IGZyb20gJy4vbW9kZWwvdHJlZS5tb2RlbCc7XHJcbmltcG9ydCB7IEtFWUJPQVJEX0RPV05fSUNPTiwgS0VZQk9BUkRfVVBfSUNPTiB9IGZyb20gJy4uLy4uL2NvbW1vbi9xbXMtaWNvbi5jb25zdCc7XHJcbmltcG9ydCB7IFRyZWVGbGF0Tm9kZSB9IGZyb20gJy4vbW9kZWwvdHJlZS1mbGF0LW5vZGUubW9kZWwnO1xyXG5cclxuaW50ZXJmYWNlIFRyZWVOb2RlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBjaGlsZHJlbj86IFRyZWVOb2RlW107XHJcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XHJcbiAgbGV2ZWxUeXBlPzogbnVtYmVyO1xyXG59XHJcbmludGVyZmFjZSBJQ2hlY2tlZE5vZGUge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgY2hlY2tlZDogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdxbXMtdHJlZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RyZWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSB0cmVlRGF0YTogQXJyYXk8VHJlZU1vZGVsPiA9IFtdO1xyXG4gIEBJbnB1dCgpIHRyZWVDb25maWc6IFRyZWVDb25maWc7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWREYXRhOiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRSaXNrRGF0YTogYW55ID0gW107XHJcbiAgQElucHV0KCkgZGlzYWJsZWRMaXN0OiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBleHBhbmRPblRpdGxlQ2xpY2s6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZXhwYW5kVG9DaGlsZE5vZGU6IGFueSA9IFtdO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3ROb2RlRXZlbnQ6IEV2ZW50RW1pdHRlcjxUcmVlRmxhdE5vZGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RGb2xkZXJFdmVudDogRXZlbnRFbWl0dGVyPFRyZWVGbGF0Tm9kZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNoZWNrQm94RXZlbnQ6IEV2ZW50RW1pdHRlcjxUcmVlRmxhdE5vZGVbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNoaWxkQ2hlY2tlZEV2ZW50OiBFdmVudEVtaXR0ZXI8SUNoZWNrZWROb2RlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbm9kZUV4cGFuZEV2ZW50OiBFdmVudEVtaXR0ZXI8VHJlZUZsYXROb2RlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZ2V0Q2hpbGROb2RlU2VsZWN0T25lOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgbGlzdFBhcmVudE9iaiA9IHt9O1xyXG4gIGZpbHRlckRhdGE6IFRyZWVNb2RlbFtdID0gW107XHJcbiAgdHJlZU9iamVjdDogb2JqZWN0O1xyXG4gIGFyckluZGV4OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGNoZWNrZWROb2RlTGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG4gIHVzZUV4cGFuZEZlYXR1cmUgPSB0cnVlO1xyXG4gIGFsbG93U2VsZWN0Rm9sZGVyID0gZmFsc2U7XHJcbiAgYXJlYU9mQ3VycmVudFByb2Nlc3MgPSAnJztcclxuICBzaG93Q2hlY2tCb3ggPSBmYWxzZTtcclxuICBhbGxvd011bHRpcGxlQ2hlY2sgPSB0cnVlO1xyXG4gIHNpbmdsZVNlbGVjdGVkTm9kZSA9IGZhbHNlO1xyXG4gIG9ubHlDaGVja0JveEZvckNoaWxkID0gZmFsc2U7XHJcbiAgb25seUZvbGRlciA9IGZhbHNlO1xyXG4gIGl0ZW1JY29uVHlwZSA9IEl0ZW1JY29uVHlwZTtcclxuICBkaXNwbGF5VHlwZSA9IDE7XHJcbiAgb3Blbkljb24gPSAnJztcclxuICBvcGVuSWNvbkNvbG9yID0gJyMxOTU0QTknO1xyXG4gIGNsb3NlSWNvbiA9ICcnO1xyXG4gIGNsb3NlSWNvbkNvbG9yID0gJyMwMDAwMDAnO1xyXG4gIGl0ZW1JY29uID0gJyc7XHJcbiAgaXRlbUljb25TdmcgPSAnJztcclxuICBpdGVtSWNvblBhdGggPSAnJztcclxuICBpdGVtSWNvbkJhc2U2NCA9ICcnO1xyXG4gIG1vZHVsZUlkOiBudW1iZXI7XHJcblxyXG4gIHRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxUcmVlRmxhdE5vZGU+KFxyXG4gICAgKG5vZGUpID0+IHtcclxuICAgICAgcmV0dXJuIG5vZGUubGV2ZWw7XHJcbiAgICB9LFxyXG4gICAgKG5vZGUpID0+IHtcclxuICAgICAgcmV0dXJuIG5vZGUuZXhwYW5kYWJsZTtcclxuICAgIH1cclxuICApO1xyXG5cclxuICBpc0NoZWNrZWQgPSBmYWxzZTtcclxuICBjaGVja2xpc3RTZWxlY3Rpb246IGFueTtcclxuICBpZENoZWNrSWNvbiA9ICcnO1xyXG4gIGxpc3RDaGlsZE5vZGUgPSBbXTtcclxuICBkYXRhVHlwZSA9IERhdGFUeXBlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxyXG4gICAgcHJpdmF0ZSBhcHBJY29uU2VydmljZTogUU1TSWNvblJlZ2lzdHJ5U2VydmljZSkge1xyXG4gICAgaWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25MaXRlcmFsKCdrZXlib2FyZF91cCcsIGRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChLRVlCT0FSRF9VUF9JQ09OKSk7XHJcbiAgICBpY29uUmVnaXN0cnkuYWRkU3ZnSWNvbkxpdGVyYWwoJ2tleWJvYXJkX2Rvd24nLCBkb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoS0VZQk9BUkRfRE9XTl9JQ09OKSk7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRG9jdW1lbnRJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJDaGVja2xpc3RJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUmlza0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMudHJlZURhdGEgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlcy50cmVlRGF0YS5jdXJyZW50VmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzLnRyZWVEYXRhLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMudHJlZURhdGEgPSBbLi4udGhpcy50cmVlRGF0YSwgY2hhbmdlcy50cmVlRGF0YS5jdXJyZW50VmFsdWVdO1xyXG4gICAgICB0aGlzLmluaXRUcmVlRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkRGF0YSAmJlxyXG4gICAgICAoY2hhbmdlcy5zZWxlY3RlZERhdGEuY3VycmVudFZhbHVlLmxlbmd0aCA+IDAgfHxcclxuICAgICAgICBKU09OLnN0cmluZ2lmeShjaGFuZ2VzLnNlbGVjdGVkRGF0YS5jdXJyZW50VmFsdWUpICE9PVxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZXMuc2VsZWN0ZWREYXRhLnByZXZpb3VzVmFsdWUpKSkge1xyXG4gICAgICB0aGlzLmNoZWNrU2VsZWN0ZWQoY2hhbmdlcy5zZWxlY3RlZERhdGEuY3VycmVudFZhbHVlKTtcclxuICAgIH0gZWxzZSBpZihjaGFuZ2VzLnNlbGVjdGVkRGF0YSAmJlxyXG4gICAgICAoY2hhbmdlcy5zZWxlY3RlZERhdGEuY3VycmVudFZhbHVlLmxlbmd0aCA9PT0gMCkpe1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3QodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXMuZGlzYWJsZWRMaXN0ICYmIEpTT04uc3RyaW5naWZ5KGNoYW5nZXMuZGlzYWJsZWRMaXN0LmN1cnJlbnRWYWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KGNoYW5nZXMuZGlzYWJsZWRMaXN0LnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tEaXNhYmxlZExpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBleHBhbmQgYWxsIHBhcmVudCB0byBzaG93IG5vZGVcclxuICAgIGlmIChjaGFuZ2VzLmV4cGFuZFRvQ2hpbGROb2RlICYmIEpTT04uc3RyaW5naWZ5KGNoYW5nZXMuZXhwYW5kVG9DaGlsZE5vZGUuY3VycmVudFZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlcy5leHBhbmRUb0NoaWxkTm9kZS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLm9wZW5FeHBhbmRUb0NoaWxkTm9kZSgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0VHJlZURhdGEoKTtcclxuICB9XHJcblxyXG4gIGluaXRUcmVlRGF0YSgpIHtcclxuICAgIHRoaXMudHJlZURhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYgKCEhaXRlbS5wYXJlbnRJZCAmJiBpdGVtLnBhcmVudElkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmxpc3RQYXJlbnRPYmpbaXRlbS5wYXJlbnRJZF0gPSAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLmNoaWxkSWQgJiYgaXRlbS5jaGlsZElkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmxpc3RQYXJlbnRPYmpbaXRlbS5yb290SWRdID0gMTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maWx0ZXJEYXRhID0gdGhpcy50cmVlRGF0YTtcclxuXHJcbiAgICB0aGlzLnRyZWVPYmplY3QgPSBUcmVlRnVuY3Rpb25zLmJ1aWxkT2JqZWN0VHJlZSh0aGlzLmZpbHRlckRhdGEpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBUcmVlRnVuY3Rpb25zLmJ1aWxkQXJyYXlUcmVlKHRoaXMudHJlZU9iamVjdCB8fCB7fSwgMCkubWFwKGVsZW1lbnQgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5zb3J0RGF0YVRyZWUoZWxlbWVudCk7XHJcbiAgICAgIGVsZW1lbnQgPSBudWxsO1xyXG4gICAgICBlbGVtZW50ID0geyAuLi57fSwgLi4uaXRlbSB9O1xyXG4gICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXNlRXhwYW5kRmVhdHVyZSA9ICF0aGlzLnRyZWVDb25maWc/LnNob3dDaGVja0JveDtcclxuICAgIHRoaXMuYWxsb3dTZWxlY3RGb2xkZXIgPSB0aGlzLnRyZWVDb25maWc/LmFsbG93U2VsZWN0Rm9sZGVyO1xyXG4gICAgdGhpcy5hcmVhT2ZDdXJyZW50UHJvY2VzcyA9IHRoaXMudHJlZUNvbmZpZz8uYXJlYU9mQ3VycmVudFByb2Nlc3M7XHJcbiAgICB0aGlzLnNob3dDaGVja0JveCA9IHRoaXMudHJlZUNvbmZpZz8uc2hvd0NoZWNrQm94O1xyXG4gICAgdGhpcy5vbmx5Q2hlY2tCb3hGb3JDaGlsZCA9IHRoaXMudHJlZUNvbmZpZz8ub25seUNoZWNrQm94Rm9yQ2hpbGQ7XHJcbiAgICB0aGlzLm1vZHVsZUlkID0gdGhpcy50cmVlQ29uZmlnPy5tb2R1bGVJZDtcclxuICAgIHRoaXMub3Blbkljb24gPSB0aGlzLnRyZWVDb25maWc/Lm9wZW5JY29uO1xyXG4gICAgdGhpcy5vcGVuSWNvbkNvbG9yID0gdGhpcy50cmVlQ29uZmlnPy5vcGVuSWNvbkNvbG9yID8gdGhpcy50cmVlQ29uZmlnPy5vcGVuSWNvbkNvbG9yIDogdGhpcy5vcGVuSWNvbkNvbG9yO1xyXG4gICAgdGhpcy5jbG9zZUljb24gPSB0aGlzLnRyZWVDb25maWc/LmNsb3NlSWNvbjtcclxuICAgIHRoaXMuY2xvc2VJY29uQ29sb3IgPSB0aGlzLnRyZWVDb25maWc/LmNsb3NlSWNvbkNvbG9yID8gdGhpcy50cmVlQ29uZmlnPy5jbG9zZUljb25Db2xvciA6IHRoaXMuY2xvc2VJY29uQ29sb3I7XHJcbiAgICB0aGlzLml0ZW1JY29uID0gdGhpcy50cmVlQ29uZmlnPy5pdGVtSWNvbjtcclxuICAgIHRoaXMuaXRlbUljb25TdmcgPSB0aGlzLnRyZWVDb25maWc/Lml0ZW1JY29uU3ZnO1xyXG4gICAgdGhpcy5pdGVtSWNvblBhdGggPSB0aGlzLnRyZWVDb25maWc/Lml0ZW1JY29uUGF0aDtcclxuICAgIHRoaXMuaXRlbUljb25CYXNlNjQgPSB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodGhpcy50cmVlQ29uZmlnPy5pdGVtSWNvbkJhc2U2NCkgYXMgc3RyaW5nO1xyXG4gICAgdGhpcy5hbGxvd011bHRpcGxlQ2hlY2sgPSB0aGlzLnRyZWVDb25maWc/LmFsbG93TXVsdGlwbGVDaGVjaztcclxuICAgIHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlID0gdGhpcy50cmVlQ29uZmlnPy5zaW5nbGVTZWxlY3RlZE5vZGU7XHJcbiAgICB0aGlzLm9ubHlGb2xkZXIgPSB0aGlzLnRyZWVDb25maWc/Lm9ubHlGb2xkZXI7XHJcbiAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUcmVlRmxhdE5vZGU+KHRoaXMuYWxsb3dNdWx0aXBsZUNoZWNrKTsgLyogdHJ1ZTogbXVsdGlwbGUgKi9cclxuXHJcbiAgICB0aGlzLmRpc3BsYXlUeXBlID0gdGhpcy5nZXRJdGVtSWNvblR5cGUodGhpcy50cmVlQ29uZmlnKTtcclxuXHJcbiAgICAvLyBFeHBhbmQgY2hpbGQgbm9kZSB0cmVlXHJcbiAgICBpZiAodGhpcy50cmVlQ29uZmlnLmV4cGFuZEFsbCkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJpc2sgVHJlZVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSaXNrRGF0YS5sZW5ndGgpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWREYXRhID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmlza0RhdGEuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2VsZWN0ZWREYXRhLmZpbmRJbmRleChlbCA9PiBlbC5pZCA9PT0geC5yb290SWQpO1xyXG4gICAgICAgICAgaWYgKHgucm9vdElkID09PSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZCAmJiBpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWREYXRhLnB1c2godGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNoZWNrU2VsZWN0ZWQoc2VsZWN0ZWREYXRhKTtcclxuICAgICAgdGhpcy5jaGVja0JveEV2ZW50LmVtaXQoc2VsZWN0ZWREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvL2NoZWNrIGRpc2FibGVkIGxpc3RcclxuICAgIHRoaXMuY2hlY2tEaXNhYmxlZExpc3QoKTtcclxuXHJcbiAgICAvLyBleHBhbmQgdG8gY2hpbGQgbm9kZVxyXG4gICAgdGhpcy5vcGVuRXhwYW5kVG9DaGlsZE5vZGUoKTtcclxuICB9XHJcblxyXG4gIG9wZW5FeHBhbmRUb0NoaWxkTm9kZSgpIHtcclxuICAgIGlmICh0aGlzLmV4cGFuZFRvQ2hpbGROb2RlLmxlbmd0aCkge1xyXG4gICAgICBpZiAodGhpcy5leHBhbmRUb0NoaWxkTm9kZVswXSA9PT0gJycpIHtcclxuICAgICAgICB0aGlzLmlkQ2hlY2tJY29uID0gJyc7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5jb2xsYXBzZUFsbCgpO1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBpdGVtTWFya0NoZWNrZWQgPSB0aGlzLmV4cGFuZFRvQ2hpbGROb2RlW3RoaXMuZXhwYW5kVG9DaGlsZE5vZGUubGVuZ3RoIC0gMV0udG9VcHBlckNhc2UoKTtcclxuICAgICAgdGhpcy5pZENoZWNrSWNvbiA9IGl0ZW1NYXJrQ2hlY2tlZDtcclxuICAgICAgLy8gZ2V0IGFsbCBjaGlsZHJlbiBub2RlcyBvbiBzYW1lIGxldmVsXHJcbiAgICAgIGxldCBsaXN0Q2hpbGROb2RlU2FtZUxldmVsID0gdGhpcy5maW5kQ2hpbGROb2RlKGl0ZW1NYXJrQ2hlY2tlZCwgdGhpcy5kYXRhU291cmNlLmRhdGEpO1xyXG4gICAgICAvLyBnZXQgYWxsIGNoaWxkcmVuIGluIGFsbCBsZXZlbFxyXG4gICAgICB0aGlzLmxpc3RDaGlsZE5vZGUgPSBbXTtcclxuICAgICAgdGhpcy5nZXRDaGlsZChsaXN0Q2hpbGROb2RlU2FtZUxldmVsKTtcclxuICAgICAgdGhpcy5nZXRDaGlsZE5vZGVTZWxlY3RPbmUuZW1pdCh0aGlzLmxpc3RDaGlsZE5vZGUpO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChpdGVtTWFya0NoZWNrZWQgPT09IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmlkKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdE5vZGVFdmVudC5lbWl0KHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5leHBhbmRUb0NoaWxkTm9kZS5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZCA9PT0gZWwudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrRGlzYWJsZWRMaXN0KCkge1xyXG4gICAgLy8gRW5hYmxlIHdob2xlIHRyZWVcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIERpc2FibGUgTGlzdFxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRMaXN0Lmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgIGlmICh4LmlkID09PSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZFxyXG4gICAgICAgICAgICAmJiAoIXgucGFyZW50SWQgfHwgeC5wYXJlbnRJZCA9PT0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0/LnBhcmVudElkKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL1NlbGVjdGVkIG5vZGUgd2l0aCBzZWxlY3Qgb25lXHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZExpc3QubGVuZ3RoICYmIHRoaXMudHJlZUNvbmZpZy5zZWxlY3RPbmUpIHtcclxuICAgICAgbGV0IGl0ZW1NYXJrQ2hlY2tlZCA9IHRoaXMuZGlzYWJsZWRMaXN0W3RoaXMuZGlzYWJsZWRMaXN0Lmxlbmd0aCAtIDFdLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuaWRDaGVja0ljb24gPSBpdGVtTWFya0NoZWNrZWQ7XHJcbiAgICAgIC8vIGdldCBhbGwgY2hpbGRyZW4gbm9kZXMgb24gc2FtZSBsZXZlbFxyXG4gICAgICBsZXQgbGlzdENoaWxkTm9kZVNhbWVMZXZlbCA9IHRoaXMuZmluZENoaWxkTm9kZShpdGVtTWFya0NoZWNrZWQsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcclxuICAgICAgLy8gZ2V0IGFsbCBjaGlsZHJlbiBpbiBhbGwgbGV2ZWxcclxuICAgICAgdGhpcy5saXN0Q2hpbGROb2RlID0gW107XHJcbiAgICAgIHRoaXMuZ2V0Q2hpbGQobGlzdENoaWxkTm9kZVNhbWVMZXZlbCk7XHJcbiAgICAgIHRoaXMuZ2V0Q2hpbGROb2RlU2VsZWN0T25lLmVtaXQodGhpcy5saXN0Q2hpbGROb2RlKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoaXRlbU1hcmtDaGVja2VkID09PSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3ROb2RlRXZlbnQuZW1pdCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0LmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmlkID09PSBlbC50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyByZW1vdmUgYWxsIGNoaWxkcmVuIG5vZGVzIHdoZW4gdXNlciBkb250IG5lZWQgdG8gc2hvdyB0aGVtXHJcbiAgICAgICAgdGhpcy5saXN0Q2hpbGROb2RlLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsLmlkICYmIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldPy5pZCA9PT0gZWwuaWQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pZENoZWNrSWNvbiA9ICcnO1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlQWxsKCk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2hpbGQob2JqKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iai5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAob2JqLmNoaWxkcmVuW2ldLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgdGhpcy5nZXRDaGlsZChvYmouY2hpbGRyZW5baV0pO1xyXG4gICAgICAgIGRlbGV0ZSBvYmouY2hpbGRyZW5baV0uY2hpbGRyZW47XHJcbiAgICAgICAgdGhpcy5saXN0Q2hpbGROb2RlLnB1c2gob2JqLmNoaWxkcmVuW2ldKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxpc3RDaGlsZE5vZGUucHVzaChvYmouY2hpbGRyZW5baV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzb3J0RGF0YVRyZWUob2JqKSB7XHJcbiAgICBpZiAob2JqLmNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCBjaGlsZCA9IFtdO1xyXG4gICAgICBjb25zdCBsZWFmTm9kZSA9IG9iai5jaGlsZHJlbi5maWx0ZXIoeCA9PiAheC5jaGlsZHJlbik7XHJcbiAgICAgIGNvbnN0IHN1YkZvbGRlck5vZGUgPSBvYmouY2hpbGRyZW4uZmlsdGVyKHggPT4geC5jaGlsZHJlbik7XHJcbiAgICAgIC8vIGZvcihsZXQgaW5kZXggPSBzdWJGb2xkZXJOb2RlLmxlbmd0aCAtIDE7IGluZGV4ID49IDAgOyBpbmRleC0tKXtcclxuICAgICAgLy8gICBsZXQgZWwgPSBzdWJGb2xkZXJOb2RlW2luZGV4XTtcclxuICAgICAgLy8gICB0aGlzLnNvcnREYXRhVHJlZShlbCk7XHJcbiAgICAgIC8vICAgY2hpbGQudW5zaGlmdChlbCk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgc3ViRm9sZGVyTm9kZS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGxldCBlbCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5zb3J0RGF0YVRyZWUoZWwpO1xyXG4gICAgICAgIGNoaWxkLnB1c2goZWwpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGxlYWZOb2RlLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgbGV0IGVsID0gZWxlbWVudDtcclxuICAgICAgICBjaGlsZC5wdXNoKGVsKTtcclxuICAgICAgfSk7XHJcbiAgICAgIG9iai5jaGlsZHJlbiA9IGNoaWxkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIGdldEltYWdlUGF0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodGhpcy50cmVlQ29uZmlnLml0ZW1JY29uQmFzZTY0KSBhcyBzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBjaGVja1NlbGVjdGVkKGl0ZW1TZWxlY3RlZDogVHJlZUZsYXROb2RlW10pIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2xbJ2RhdGFOb2RlcyddKSByZXR1cm47XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV07XHJcbiAgICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3QodHJlZSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaXRlbVNlbGVjdGVkLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gaXRlbVNlbGVjdGVkW2pdO1xyXG4gICAgICAgICAgaWYgKHRyZWUuaWQgPT09IGVsZW1lbnQuaWQgJiYgKCFlbGVtZW50LnBhcmVudElkIHx8IHRyZWUucGFyZW50SWQgPT09IGVsZW1lbnQucGFyZW50SWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdCh0cmVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDUwMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgY2hlY2tTZWxlY3RlZFNhbWVOb2RlKGl0ZW1TZWxlY3RlZDogVHJlZUZsYXROb2RlW10sIGZsYWc6IGJvb2xlYW4pIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgdHJlZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGl0ZW1TZWxlY3RlZC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpdGVtU2VsZWN0ZWRbal07XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQgJiYgdHJlZS5pZCA9PT0gZWxlbWVudC5pZFxyXG4gICAgICAgICAgJiYgdHJlZS5wYXJlbnRJZCA9PT0gZWxlbWVudC5wYXJlbnRJZCAmJiAhdHJlZS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgZmxhZyA/IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdCh0cmVlKSA6IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KHRyZWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXRlbUljb25UeXBlKHRyZWVDb25maWc6IFRyZWVDb25maWcpIHtcclxuICAgIGlmICh0cmVlQ29uZmlnLml0ZW1JY29uICYmIHRyZWVDb25maWcuaXRlbUljb24ubGVuZ3RoKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUubmFtZTtcclxuICAgIGlmICh0cmVlQ29uZmlnLml0ZW1JY29uUGF0aCAmJiB0cmVlQ29uZmlnLml0ZW1JY29uUGF0aC5sZW5ndGgpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5wYXRoO1xyXG4gICAgaWYgKHRyZWVDb25maWcuaXRlbUljb25CYXNlNjQgJiYgdHJlZUNvbmZpZy5pdGVtSWNvbkJhc2U2NC5sZW5ndGgpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5iYXNlNjQ7XHJcbiAgICBpZiAodHJlZUNvbmZpZy5pdGVtSWNvblN2ZyAmJiB0cmVlQ29uZmlnLml0ZW1JY29uU3ZnLmxlbmd0aCkgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnN2ZztcclxuICAgIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5ub25lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2Zvcm1lciA9IChub2RlOiBUcmVlTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xyXG4gICAgbGV0IGNoZWNrSGFzQ2hpbGQgPSB0cnVlO1xyXG4gICAgaWYgKCFub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGNoZWNrSGFzQ2hpbGQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoISghIW5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSkge1xyXG4gICAgICBjaGVja0hhc0NoaWxkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICBlbHNlIGlmIChcclxuICAgICAgISFub2RlLmNoaWxkcmVuICYmXHJcbiAgICAgIG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmXHJcbiAgICAgIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICFub2RlLmNoaWxkcmVuWzBdLm5hbWUubGVuZ3RoICYmXHJcbiAgICAgIG5vZGUuaWQudG9TdHJpbmcoKSA9PT0gdGhpcy5hcmVhT2ZDdXJyZW50UHJvY2Vzc1xyXG4gICAgKSB7XHJcbiAgICAgIGNoZWNrSGFzQ2hpbGQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISh0aGlzLmxpc3RQYXJlbnRPYmpbbm9kZS5pZF0gPT09IDEpKSB7XHJcbiAgICAgIGNoZWNrSGFzQ2hpbGQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBleHBhbmRhYmxlOiAhIW5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwLFxyXG4gICAgICBuYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgIGxldmVsLFxyXG4gICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgaGFzQ2hpbGQ6IGNoZWNrSGFzQ2hpbGQsXHJcbiAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgIGxldmVsVHlwZTogbm9kZS5sZXZlbFR5cGVcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKFxyXG4gICAgdGhpcy50cmFuc2Zvcm1lcixcclxuICAgIChub2RlKSA9PiB7XHJcbiAgICAgIHJldHVybiBub2RlLmxldmVsO1xyXG4gICAgfSxcclxuICAgIChub2RlKSA9PiB7XHJcbiAgICAgIHJldHVybiBub2RlLmV4cGFuZGFibGU7XHJcbiAgICB9LFxyXG4gICAgKG5vZGUpID0+IHtcclxuICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW47XHJcbiAgICB9XHJcbiAgKTtcclxuXHJcbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcclxuXHJcblxyXG4gIC8qKiBXaGV0aGVyIGFsbCB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIG5vZGUgYXJlIHNlbGVjdGVkICovXHJcbiAgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBUcmVlRmxhdE5vZGUpOiBib29sZWFuIHtcclxuXHJcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9ICF0aGlzLnNpbmdsZVNlbGVjdGVkTm9kZSA/IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSkuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQpIDogW107XHJcblxyXG4gICAgaWYgKCFkZXNjZW5kYW50cy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XHJcblxyXG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBkZXNjZW5kYW50cy5ldmVyeShjaGlsZCA9PiB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGNoaWxkKSk7XHJcbiAgICBpZiAoIXNlbGVjdGVkICYmIGFsbFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcclxuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbGxTZWxlY3RlZDtcclxuXHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciBwYXJ0IG9mIHRoZSBkZXNjZW5kYW50cyBhcmUgc2VsZWN0ZWQgKi9cclxuICBkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGU6IFRyZWVGbGF0Tm9kZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSAhdGhpcy5zaW5nbGVTZWxlY3RlZE5vZGUgPyB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKSA6IFtdO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGRlc2NlbmRhbnRzLnNvbWUoY2hpbGQgPT4gdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjaGlsZCkpO1xyXG4gICAgcmV0dXJuIHJlc3VsdCAmJiAhdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvZ2dsZSB0aGUgdG8tZG8gaXRlbSBzZWxlY3Rpb24uIFNlbGVjdC9kZXNlbGVjdCBhbGwgdGhlIGRlc2NlbmRhbnRzIG5vZGUgKi9cclxuICBwdWJsaWMgdG9kb0l0ZW1TZWxlY3Rpb25Ub2dnbGUobm9kZTogVHJlZUZsYXROb2RlKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdE5vZGVFdmVudC5lbWl0KG5vZGUpO1xyXG4gICAgLy8gdHJlZSBoYXZlIGR1cGxpY2F0ZSBub2RlXHJcbiAgICBpZiAodGhpcy50cmVlQ29uZmlnLmNhbkhhdmVEdXBJZCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmlkID09PSBub2RlLmlkXHJcbiAgICAgICAgICAmJiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5wYXJlbnRJZCA9PT0gbm9kZS5wYXJlbnRJZFxyXG4gICAgICAgICAgJiYgIXRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi50b2dnbGUodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByb2Nlc3MvIGRvY3VtZW50IHNpbmdsZSBzZWxlY3RlZFxyXG4gICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tCb3hFdmVudC5lbWl0KHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSkuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQpO1xyXG5cclxuICAgICAgdGhpcy5jaGVja1NlbGVjdGVkU2FtZU5vZGUoZGVzY2VuZGFudHMsIHRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKSk7XHJcblxyXG4gICAgICAhdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpXHJcbiAgICAgICAgPyB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4uZGVzY2VuZGFudHMpXHJcbiAgICAgICAgOiB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5kZXNjZW5kYW50cyk7XHJcblxyXG4gICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgICAgY29uc3QgYWxsTm9kZUlzUGFyZW50ID0gdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQuZXZlcnkoY2hpbGQgPT4gY2hpbGQuZXhwYW5kYWJsZSk7XHJcbiAgICAgIGlmIChhbGxOb2RlSXNQYXJlbnQpIHtcclxuICAgICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoZWxlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGVja0JveEV2ZW50LmVtaXQodGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICB0b2RvQ2hpbGRTZWxlY3Rpb25Ub2dnbGUobm9kZTogVHJlZUZsYXROb2RlKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZCA9PT0gbm9kZS5pZFxyXG4gICAgICAgICYmIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLnBhcmVudElkID09PSBub2RlLnBhcmVudElkXHJcbiAgICAgICAgJiYgIXRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmRpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24udG9nZ2xlKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xyXG4gICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMuY2hlY2tCb3hFdmVudC5lbWl0KHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkKTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9kb0l0ZW1TZWxlY3Rpb25CeUlkKGlkczogYW55W10pOiB2b2lkIHtcclxuICAgIGlkcy5mb3JFYWNoKFxyXG4gICAgICBpZCA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmlkID09PSBpZFxyXG4gICAgICAgICAgICAmJiAhdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldKSlcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi50b2dnbGUodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMuY2hlY2tCb3hFdmVudC5lbWl0KHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2RvSXRlbVNlbGVjdGlvbihub2RlczogVHJlZU5vZGVbXSk6IHZvaWQge1xyXG4gICAgbm9kZXMuZm9yRWFjaChcclxuICAgICAgbm9kZSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmlkID09PSBub2RlLmlkICYmXHJcbiAgICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLnBhcmVudElkID09PSBub2RlLnBhcmVudElkICYmXHJcbiAgICAgICAgICAgICF0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5kaXNhYmxlZCAmJiAhdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0uZXhwYW5kYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0pKVxyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnRvZ2dsZSh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy5jaGVja0JveEV2ZW50LmVtaXQodGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZG9Gb2xkZXJTZWxlY3Rpb24obm9kZXM6IFRyZWVOb2RlW10pOiB2b2lkIHtcclxuICAgIG5vZGVzLmZvckVhY2goXHJcbiAgICAgIG5vZGUgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZCA9PT0gbm9kZS5pZCAmJlxyXG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5wYXJlbnRJZCA9PT0gbm9kZS5wYXJlbnRJZCAmJlxyXG4gICAgICAgICAgICAhdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0uZGlzYWJsZWQgJiYgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0uZXhwYW5kYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV0pKVxyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnRvZ2dsZSh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy5jaGVja0JveEV2ZW50LmVtaXQodGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBub2RlOiBUcmVlRmxhdE5vZGUpID0+IHtcclxuICAgIHJldHVybiBub2RlLmV4cGFuZGFibGU7XHJcbiAgfTtcclxuXHJcbiAgc2VsZWN0Tm9kZShub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgIGlmICh3aW5kb3dbUmVsYXRlZENvbnN0LklTX0RJU1BMQVlfU0VBUkNIX1JFU1VMVF0pIHtcclxuICAgICAgd2luZG93LnBvc3RNZXNzYWdlKFJlbGF0ZWRDb25zdC5ISURFX1NFQVJDSF9SRVNVTFQsICcqJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudHJlZUNvbmZpZy5zZWxlY3RPbmUpIHtcclxuICAgICAgbm9kZS5pdGVtVHlwZSA9IHRoaXMuY2hlY2tEYXRhVHlwZVNlbGVjdE5vZGUobm9kZSk7XHJcbiAgICAgIHRoaXMuaWRDaGVja0ljb24gPSBub2RlLmlkO1xyXG4gICAgICB0aGlzLnNlbGVjdE5vZGVFdmVudC5lbWl0KG5vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tEYXRhVHlwZVNlbGVjdE5vZGUobm9kZTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICBsZXQgaXRlbVR5cGUgPSAtMTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kdWxlSWQpIHtcclxuICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgIGl0ZW1UeXBlID0gbm9kZS5leHBhbmRhYmxlID8gRGF0YVR5cGUuYXJlYSA6IERhdGFUeXBlLnByb2Nlc3M7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XHJcbiAgICAgICAgaXRlbVR5cGUgPSBub2RlLmV4cGFuZGFibGUgPyBEYXRhVHlwZS5mb2xkZXIgOiBEYXRhVHlwZS5kb2N1bWVudDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaXRlbVR5cGUgPSB0aGlzLm1vZHVsZUlkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtVHlwZTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEZvbGRlcihub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgIHRoaXMuc2VsZWN0Rm9sZGVyRXZlbnQuZW1pdChub2RlKTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kTm9kZShub2RlOiBUcmVlRmxhdE5vZGUsIGlzRXhwYW5kTm9kZT86IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLnRyZWVDb25maWcuc2VsZWN0T25lKSB7XHJcbiAgICAgIC8vIGlmICh0aGlzLmRpc2FibGVkTGlzdC5sZW5ndGggJiZcclxuICAgICAgLy8gICAobm9kZS5pZCA9PT0gdGhpcy5kaXNhYmxlZExpc3RbdGhpcy5kaXNhYmxlZExpc3QubGVuZ3RoIC0gMV0udG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAvLyAgICAgbm9kZS5wYXJlbnRJZCA9PT0gdGhpcy5kaXNhYmxlZExpc3RbdGhpcy5kaXNhYmxlZExpc3QubGVuZ3RoIC0gMV0udG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgLy8gICByZXR1cm47XHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5pZENoZWNrSWNvbiA9IG5vZGUuaWQ7XHJcbiAgICAgIG5vZGUuaXRlbVR5cGUgPSB0aGlzLmNoZWNrRGF0YVR5cGVTZWxlY3ROb2RlKG5vZGUpO1xyXG4gICAgICB0aGlzLnNlbGVjdE5vZGVFdmVudC5lbWl0KG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3dbUmVsYXRlZENvbnN0LklTX0RJU1BMQVlfU0VBUkNIX1JFU1VMVF0pIHtcclxuICAgICAgd2luZG93LnBvc3RNZXNzYWdlKFJlbGF0ZWRDb25zdC5ISURFX1NFQVJDSF9SRVNVTFQsICcqJyk7XHJcbiAgICB9XHJcbiAgICAvLyBzZXQgdXNlRXhwYW5kRmVhdHVyZSA9IHRydWUgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBvZiB0cmVlIGxvYWRpbmdcclxuICAgIGlmICghaXNFeHBhbmROb2RlIHx8ICF0aGlzLnVzZUV4cGFuZEZlYXR1cmUpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFyckluZGV4Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXJySW5kZXhbaV0gPT09IG5vZGUuaWQpIHtcclxuICAgICAgICAgIHRoaXMuYXJySW5kZXguc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNFeHBhbmROb2RlICYmICF0aGlzLmV4cGFuZE9uVGl0bGVDbGljaykge1xyXG4gICAgICAgIHRoaXMubm9kZUV4cGFuZEV2ZW50LmVtaXQobm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy8gZ2V0IGFycmF5IGluZGV4IHRvIGV4cGFuZCBub2RlIGFmdGVyIHJlZnJlc2ggZGF0YXNvdXJjZVxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGxldCBpc0NoYW5nZSA9IGZhbHNlO1xyXG4gICAgbGV0IGlzUmVtb3ZlID0gZmFsc2U7XHJcbiAgICB0aGlzLmFyckluZGV4LnB1c2gobm9kZS5pZCk7XHJcblxyXG4gICAgY29uc3QgY2hpbGRBcnJheSA9IHRoaXMudHJlZURhdGEuZmlsdGVyKCh4KSA9PiB7XHJcbiAgICAgIHJldHVybiB4LnBhcmVudElkID09PSBub2RlLmlkO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgcm9vdElkID0gJzAnO1xyXG4gICAgbGV0IHBhcmVudEVsZW1lbnQ6IFRyZWVOb2RlO1xyXG4gICAgbGV0IGNoaWxkcmVuTGlzdDogVHJlZU5vZGVbXTtcclxuICAgIGlmIChjaGlsZEFycmF5Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjaGlsZEFycmF5LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0ucm9vdElkID09PSByb290SWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGdldCBjaGlsZCBub2RlIGZyb20gb3JpZ2luYWwgZGF0YXNvdXJjZVxyXG4gICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGROb2RlKGl0ZW0ucm9vdElkLCBjaGlsZEFycmF5KTtcclxuICAgICAgcm9vdElkID0gaXRlbS5yb290SWQ7XHJcblxyXG4gICAgICBpbmRleCA9IHRoaXMuZ2V0Tm9kZUluZGV4KGNoaWxkLmlkLCB1bmRlZmluZWQsIHRoaXMuZGF0YVNvdXJjZVsnX3RyZWVDb250cm9sJ10uZGF0YU5vZGVzKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBjaGlsZCBub2RlIHRvIGV4cGFuZCBub2RlXHJcbiAgICAgIHBhcmVudEVsZW1lbnQgPSB0aGlzLmZpbmRDaGlsZE5vZGUobm9kZS5pZCwgdGhpcy5kYXRhU291cmNlLmRhdGEpO1xyXG4gICAgICBpZiAocGFyZW50RWxlbWVudCkge1xyXG4gICAgICAgIC8vIHRlbXBvcmFyeSByZW1vdmUgYWxsIG5vZGUgd2l0aG91dCBjaGlsZHJlbiA9PiBwdXJwb3NlIHRvIGFkZCBub2RlIGZvbGRlciBmaXJzdFxyXG4gICAgICAgIGlmICghaXNSZW1vdmUpIHtcclxuICAgICAgICAgIGNoaWxkcmVuTGlzdCA9IFsuLi5wYXJlbnRFbGVtZW50LmNoaWxkcmVuXTtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4ocGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICBpc1JlbW92ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFkZCBub2RlIGZvbGRlciBmaXJzdFxyXG4gICAgICAgIHBhcmVudEVsZW1lbnQuY2hpbGRyZW4ucHVzaChjaGlsZCk7XHJcbiAgICAgICAgaXNDaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIGFkZCBub2RlIHdpdGhvdXQgY2hpbGRyZW4gYWdhaW5cclxuICAgIGlmIChpc1JlbW92ZSkge1xyXG4gICAgICB0aGlzLmFkZENoaWxkcmVuKHBhcmVudEVsZW1lbnQsIGNoaWxkcmVuTGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVmcmVzaCBkYXRhIGFuZCBleHBhbmQgdHJlZSBub2RlIGZyb20gcm9vdCBub2RlXHJcbiAgICBpZiAoaXNDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoVHJlZURhdGEoKTtcclxuICAgICAgdGhpcy5hcnJJbmRleC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaW5kZXggPSB0aGlzLmdldE5vZGVJbmRleChpdGVtLCB1bmRlZmluZWQsIHRoaXMuZGF0YVNvdXJjZVsnX3RyZWVDb250cm9sJ10uZGF0YU5vZGVzKTtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpbmRleF0pO1xyXG4gICAgICB9KTtcclxuICAgICAgaXNDaGFuZ2UgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUNoaWxkcmVuKHBhcmVudEVsZW1lbnQ/OiBUcmVlTm9kZSkge1xyXG4gICAgaWYgKHBhcmVudEVsZW1lbnQuY2hpbGRyZW4pIHtcclxuICAgICAgcGFyZW50RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQ2hpbGRyZW4ocGFyZW50RWxlbWVudD86IFRyZWVOb2RlLCBjaGlsZHJlbkxpc3Q/OiBUcmVlTm9kZVtdKSB7XHJcbiAgICBpZiAoY2hpbGRyZW5MaXN0KSB7XHJcbiAgICAgIGNoaWxkcmVuTGlzdC5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgcGFyZW50RWxlbWVudC5jaGlsZHJlbi5wdXNoKGUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5vZGVJbmRleChpZDogc3RyaW5nLCBsZXZlbD86IG51bWJlciwgZGF0YT86IGFueVtdKSB7XHJcbiAgICBpZiAobGV2ZWwpIHtcclxuICAgICAgcmV0dXJuIGRhdGEuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHguaWQgPT09IGlkICYmIHgubGV2ZWwgPT09IGxldmVsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YS5maW5kSW5kZXgoKHgpID0+IHtcclxuICAgICAgcmV0dXJuIHguaWQgPT09IGlkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaGlsZE5vZGUocm9vdElkOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgY2hpbGRBcnJheSA9IGRhdGEuZmlsdGVyKCh4KSA9PiB7XHJcbiAgICAgIHJldHVybiB4LnJvb3RJZCA9PT0gcm9vdElkO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjaGlsZCA9IHsgaWQ6IGNoaWxkQXJyYXlbMF0ucm9vdElkLCBuYW1lOiBjaGlsZEFycmF5WzBdLnN1Yk5hbWUsIGNoaWxkcmVuOiBbXSB9IGFzIFRyZWVOb2RlO1xyXG4gICAgY2hpbGRBcnJheS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGNoaWxkLmNoaWxkcmVuLnB1c2goeyBpZDogaXRlbS5jaGlsZElkLCBuYW1lOiBpdGVtLmNoaWxkTmFtZSwgcGFyZW50SWQ6IHJvb3RJZCB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNoaWxkO1xyXG4gIH1cclxuXHJcbiAgZmluZENoaWxkTm9kZShpZDogc3RyaW5nLCBkYXRhOiBUcmVlTm9kZVtdKSB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcclxuICAgIGZvciAoY29uc3QgY3VycmVudEZhdGhlciBvZiBkYXRhKSB7XHJcbiAgICAgIGlmIChjdXJyZW50RmF0aGVyLmlkID09PSBpZCkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50RmF0aGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY3VycmVudEZhdGhlci5jaGlsZHJlbikge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDaGlsZCA9IGN1cnJlbnRGYXRoZXIuY2hpbGRyZW4uZmluZCgoeCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHguaWQgPT09IGlkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjdXJyZW50Q2hpbGQpIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50Q2hpbGQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcclxuICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRDaGlsZDEgb2YgY3VycmVudEZhdGhlci5jaGlsZHJlbikge1xyXG4gICAgICAgICAgaWYgKGlkICE9PSBjdXJyZW50Q2hpbGQxLmlkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZENoaWxkTm9kZShpZCwgY3VycmVudEZhdGhlci5jaGlsZHJlbik7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFRyZWVEYXRhKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBbXTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGdldE5vZGVJY29uKG5vZGU6IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgaWYgKHRoaXMub3Blbkljb24gJiYgdGhpcy5jbG9zZUljb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/IHRoaXMub3Blbkljb24gOiB0aGlzLmNsb3NlSWNvbjtcclxuICAgIH1cclxuICAgIHN3aXRjaCAodGhpcy5tb2R1bGVJZCkge1xyXG4gICAgICBjYXNlIERhdGFUeXBlLmRvY3VtZW50OiB7XHJcbiAgICAgICAgY29uc3Qgbm9kZURhdGEgPSB0aGlzLnRyZWVEYXRhLmZpbHRlcih4ID0+IHsgcmV0dXJuIHgucm9vdElkID09PSBub2RlLmlkOyB9KTtcclxuICAgICAgICBpZiAobm9kZURhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgc3dpdGNoIChub2RlRGF0YVswXS5sZXZlbFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkRlcGFydG1lbnRGb2xkZXI6XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdkZXBhcnRtZW50X2ZvbGRlcl9vdXRsaW5lZCcgOiAnZGVwYXJ0bWVudF9mb2xkZXInO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuUmVnaW9uYWxGb2xkZXI6XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdyZWdpb25hbF9mb2xkZXJfb3V0bGluZWQnIDogJ3JlZ2lvbmFsX2ZvbGRlcic7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5Ub3BGb2xkZXI6XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdlbnRlcnByaXNlX2ZvbGRlcl9vdXRsaW5lZCcgOiAnZW50ZXJwcmlzZV9mb2xkZXInO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRm9sZGVyOlxyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnbG9jYWxfZm9sZGVyX291dGxpbmVkJyA6ICdsb2NhbF9mb2xkZXInO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnZm9sZGVyX291dGxpbmVkJyA6ICdmb2xkZXInO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2tleWJvYXJkX3VwJyA6ICdrZXlib2FyZF9kb3duJztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdwcm9jZXNzX2FyZWFfb3V0bGluZWQnIDogJ3Byb2Nlc3NfYXJlYSc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdrZXlib2FyZF91cCcgOiAna2V5Ym9hcmRfZG93bic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJdGVtSWNvbihub2RlKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kdWxlSWQpIHtcclxuICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcclxuICAgICAgICBzd2l0Y2ggKG5vZGUubGV2ZWxUeXBlKSB7XHJcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcclxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9kZXBhcnRtZW50JztcclxuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9yZWdpb25hbCc7XHJcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuVG9wRm9sZGVyOlxyXG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50X2VudGVycHJpc2UnO1xyXG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcclxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9sb2NhbCc7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50JztcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2VzczpcclxuICAgICAgICByZXR1cm4gJ3Byb2Nlc3MnO1xyXG4gICAgICBjYXNlIERhdGFUeXBlLmNoZWNrbGlzdDpcclxuICAgICAgICByZXR1cm4gJ2NoZWNrbGlzdCc7XHJcbiAgICAgIGNhc2UgRGF0YVR5cGUuZGV2aWF0aW9uOlxyXG4gICAgICAgIHJldHVybiAnZGV2aWF0aW9uJztcclxuICAgICAgY2FzZSBEYXRhVHlwZS5yaXNrOlxyXG4gICAgICAgIHJldHVybiAncmlzayc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGb2xkZXJOb2RlKG5vZGU6IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgaWYgKCF0aGlzLmV4cGFuZE9uVGl0bGVDbGljaykge1xyXG4gICAgICB0aGlzLm9uRXhwYW5kTm9kZShub2RlLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5vZGVJZChub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgIHJldHVybiBgXyR7bm9kZS5wYXJlbnRJZCA/IG5vZGUucGFyZW50SWQgOiAnJ31fJHtub2RlLmlkfV8ke25vZGUubGV2ZWx9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXROb2RlQnlJZEFuZFBhcmVudElkKG5vZGVJZDogc3RyaW5nLCBwYXJlbnRJZDogc3RyaW5nKTogVHJlZUZsYXROb2Rle1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoeCA9PiB7XHJcbiAgICAgIHJldHVybiB4LmlkID09PSBub2RlSWQgJiYgeC5wYXJlbnRJZCA9PT0gcGFyZW50SWQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmROb2RlKG5vZGU6IFRyZWVGbGF0Tm9kZSl7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcclxuICB9XHJcbn1cclxuIiwiPG1hdC10cmVlXHJcbiAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCJcclxuICBjbGFzcz1cInRyZWVfX2NvbnRhaW5lclwiXHJcbj5cclxuICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgY2xhc3M9XCJ0cmVlLWJyYW5jaFwiXHJcbiAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiXHJcbiAgICBtYXRUcmVlTm9kZVRvZ2dsZVxyXG4gICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgPlxyXG4gICAgPCEtLSBmb3JtIHRodSAxIC0gY2hpbGQgLS0+XHJcbiAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgIHFtcy1ncm91cC1vcHRpb25zXHJcbiAgICAgIFtkaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcclxuICAgICAgY29sb3I9XCJkZWZhdWx0XCJcclxuICAgICAgKm5nSWY9XCJub2RlLm5hbWUgJiYgc2hvd0NoZWNrQm94ICYmICFvbmx5Q2hlY2tCb3hGb3JDaGlsZCAmJiAhb25seUZvbGRlclwiXHJcbiAgICAgIGNsYXNzPVwiY2hlY2tsaXN0LWxlYWYtbm9kZVwiXHJcbiAgICAgIFtjaGVja2VkXT1cImNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcclxuICAgICAgKGNoYW5nZSk9XCJ0b2RvSXRlbVNlbGVjdGlvblRvZ2dsZShub2RlKVwiXHJcbiAgICA+XHJcbiAgICA8L21hdC1jaGVja2JveD5cclxuXHJcbiAgICA8IS0tIGZvcm0gdGh1IDIgLS0+XHJcbiAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgIHFtcy1ncm91cC1vcHRpb25zXHJcbiAgICAgIFtkaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcclxuICAgICAgY29sb3I9XCJkZWZhdWx0XCJcclxuICAgICAgKm5nSWY9XCJub2RlLm5hbWUgJiYgc2hvd0NoZWNrQm94ICYmIG9ubHlDaGVja0JveEZvckNoaWxkICYmICFvbmx5Rm9sZGVyXCJcclxuICAgICAgY2xhc3M9XCJtbC0xMCBjaGVja2xpc3QtbGVhZi1ub2RlXCJcclxuICAgICAgW2NoZWNrZWRdPVwiY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAoY2hhbmdlKT1cInRvZG9JdGVtU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcclxuICAgID48L21hdC1jaGVja2JveD5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJleHBhbmQtbm9kZVwiXHJcbiAgICAgICpuZ0lmPVwibm9kZS5uYW1lICYmICFvbmx5Rm9sZGVyXCJcclxuICAgICAgW2NsYXNzLmJnU2VsZWN0ZWRdPVwidHJlZUNvbmZpZy5zZWxlY3RPbmUgJiYgaWRDaGVja0ljb24gPT0gbm9kZS5pZFwiXHJcbiAgICAgIChjbGljayk9XCJzZWxlY3ROb2RlKG5vZGUpXCJcclxuICAgICAgW2lkXT1cImdldE5vZGVJZChub2RlKVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJleHBhbmQtbm9kZV9fdGV4dFwiPlxyXG4gICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJkaXNwbGF5VHlwZSA9PT0gaXRlbUljb25UeXBlLm5hbWUgJiYgIW9ubHlDaGVja0JveEZvckNoaWxkXCJcclxuICAgICAgICAgIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvciBtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgaXRlbUljb24gfX1cclxuICAgICAgICA8L21hdC1pY29uPlxyXG5cclxuICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IGl0ZW1JY29uVHlwZS5zdmcgJiYgIW9ubHlDaGVja0JveEZvckNoaWxkXCJcclxuICAgICAgICAgIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvciBtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiXHJcbiAgICAgICAgICBbc3ZnSWNvbl09XCJpdGVtSWNvblN2Z1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LWljb24+XHJcblxyXG4gICAgICAgIDxpbWdcclxuICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IGl0ZW1JY29uVHlwZS5wYXRoICYmICFvbmx5Q2hlY2tCb3hGb3JDaGlsZFwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1hdC1pY29uXCJcclxuICAgICAgICAgIFtzcmNdPVwiaXRlbUljb25QYXRoXCJcclxuICAgICAgICAvPlxyXG5cclxuICAgICAgICA8aW1nXHJcbiAgICAgICAgICAqbmdJZj1cImRpc3BsYXlUeXBlID09PSBpdGVtSWNvblR5cGUuYmFzZTY0ICYmICFvbmx5Q2hlY2tCb3hGb3JDaGlsZFwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1hdC1pY29uIGltYWdlLWJhc2U2NFwiXHJcbiAgICAgICAgICBbc3JjXT1cImdldEltYWdlUGF0aCgpXCJcclxuICAgICAgICAvPlxyXG5cclxuICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09IGl0ZW1JY29uVHlwZS5ub25lICYmICFvbmx5Q2hlY2tCb3hGb3JDaGlsZFwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3IgbWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIlxyXG4gICAgICAgICAgW3N2Z0ljb25dPVwiZ2V0SXRlbUljb24obm9kZSlcIlxyXG4gICAgICAgID48L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ub2RlXCI+e3sgbm9kZS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgY2xhc3M9XCJpY29uLWNoZWNrXCJcclxuICAgICAgICAqbmdJZj1cInRyZWVDb25maWcuc2VsZWN0T25lICYmIGlkQ2hlY2tJY29uID09IG5vZGUuaWRcIlxyXG4gICAgICAgID5kb25lPC9tYXQtaWNvblxyXG4gICAgICA+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC10cmVlLW5vZGU+XHJcblxyXG4gIDxtYXQtdHJlZS1ub2RlICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZFwiIG1hdFRyZWVOb2RlUGFkZGluZz5cclxuICAgIDwhLS0gZm9ybSB0aHUgMSAtIHBhcmVudCAtLT5cclxuICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgcW1zLWdyb3VwLW9wdGlvbnNcclxuICAgICAgW2Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxyXG4gICAgICBjb2xvcj1cImRlZmF1bHRcIlxyXG4gICAgICAqbmdJZj1cInNob3dDaGVja0JveCAmJiAhb25seUNoZWNrQm94Rm9yQ2hpbGRcIlxyXG4gICAgICBbY2hlY2tlZF09XCJkZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpXCJcclxuICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgIChjaGFuZ2UpPVwidG9kb0l0ZW1TZWxlY3Rpb25Ub2dnbGUobm9kZSlcIlxyXG4gICAgPjwvbWF0LWNoZWNrYm94PlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cImJ1dHRvbi1ib2RlclwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBtYXRUcmVlTm9kZVRvZ2dsZVxyXG4gICAgICBbZGlzYWJsZVJpcHBsZV09XCIhbm9kZS5oYXNDaGlsZFwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3RvZ2dsZSAnICsgbm9kZS5maWxlbmFtZVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICpuZ0lmPVwib3Blbkljb24gJiYgY2xvc2VJY29uXCJcclxuICAgICAgICBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgIGNvbG9yOiB0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gb3Blbkljb25Db2xvciA6IGNsb3NlSWNvbkNvbG9yXHJcbiAgICAgICAgfVwiXHJcbiAgICAgICAgPnt7IGdldE5vZGVJY29uKG5vZGUpIH19PC9tYXQtaWNvblxyXG4gICAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICpuZ0lmPVwiIW9wZW5JY29uIHx8ICFjbG9zZUljb25cIlxyXG4gICAgICAgIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgJ29wZW4taWNvbic6IHRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSksXHJcbiAgICAgICAgICAnbm90LWRlcGFydG1lbnQtaWNvbic6IG1vZHVsZUlkICE9PSBkYXRhVHlwZS5kb2N1bWVudFxyXG4gICAgICAgIH1cIlxyXG4gICAgICAgIFtzdmdJY29uXT1cImdldE5vZGVJY29uKG5vZGUpXCJcclxuICAgICAgPlxyXG4gICAgICA8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8c3BhblxyXG4gICAgICAqbmdJZj1cImV4cGFuZE9uVGl0bGVDbGlja1wiXHJcbiAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXHJcbiAgICAgIGNsYXNzPVwidGV4dC1ub2RlLXBhcmVudFwiXHJcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcclxuICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kTm9kZShub2RlKVwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICBjb2xvcjogdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/IG9wZW5JY29uQ29sb3IgOiAnIzAwMDAwMCdcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxzcGFuPnt7IG5vZGUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgY2xhc3M9XCJpY29uLWNoZWNrXCJcclxuICAgICAgICAqbmdJZj1cInRyZWVDb25maWcuc2VsZWN0T25lICYmIGlkQ2hlY2tJY29uID09IG5vZGUuaWRcIlxyXG4gICAgICAgID5kb25lPC9tYXQtaWNvblxyXG4gICAgICA+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhblxyXG4gICAgICAqbmdJZj1cIiFleHBhbmRPblRpdGxlQ2xpY2tcIlxyXG4gICAgICBjbGFzcz1cInRleHQtbm9kZS1wYXJlbnRcIlxyXG4gICAgICAoY2xpY2spPVwic2VsZWN0Rm9sZGVyTm9kZShub2RlKVwiXHJcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcclxuICAgICAgW2lkXT1cImdldE5vZGVJZChub2RlKVwiXHJcbiAgICA+XHJcbiAgICAgIDxzcGFuPnt7IG5vZGUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgY2xhc3M9XCJpY29uLWNoZWNrXCJcclxuICAgICAgICAqbmdJZj1cInRyZWVDb25maWcuc2VsZWN0T25lICYmIGlkQ2hlY2tJY29uID09IG5vZGUuaWRcIlxyXG4gICAgICAgID5kb25lPC9tYXQtaWNvblxyXG4gICAgICA+XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9tYXQtdHJlZS1ub2RlPlxyXG48L21hdC10cmVlPlxyXG4iXX0=
|