@acorex/components 6.5.70 → 6.5.72
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/README.md +6 -2
- package/esm2022/acorex-components.mjs +5 -0
- package/esm2022/index.mjs +158 -0
- package/esm2022/lib/accordion/accordion.component.mjs +45 -0
- package/esm2022/lib/accordion/accordion.module.mjs +20 -0
- package/esm2022/lib/base/base-page.class.mjs +95 -0
- package/esm2022/lib/base/components.class.mjs +17 -0
- package/esm2022/lib/base/element.class.mjs +301 -0
- package/esm2022/lib/base/events.class.mjs +17 -0
- package/esm2022/lib/button/button.component.mjs +74 -0
- package/esm2022/lib/button/button.module.mjs +21 -0
- package/esm2022/lib/calendar/calendar-box/calendar-box.component.mjs +426 -0
- package/esm2022/lib/calendar/calendar-box/calendar-box.module.mjs +22 -0
- package/esm2022/lib/calendar/scheduler/scheduler-views.property.mjs +59 -0
- package/esm2022/lib/calendar/scheduler/scheduler.class.mjs +16 -0
- package/esm2022/lib/calendar/scheduler/scheduler.component.mjs +226 -0
- package/esm2022/lib/calendar/scheduler/scheduler.module.mjs +68 -0
- package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +136 -0
- package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +37 -0
- package/esm2022/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +49 -0
- package/esm2022/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +102 -0
- package/esm2022/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +214 -0
- package/esm2022/lib/calendar/scheduler/views/scheduler-view.component.mjs +99 -0
- package/esm2022/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +85 -0
- package/esm2022/lib/checkbox/checkbox.component.mjs +102 -0
- package/esm2022/lib/checkbox/checkbox.module.mjs +20 -0
- package/esm2022/lib/color-picker/color-box/color-box.component.mjs +423 -0
- package/esm2022/lib/color-picker/color-picker.component.mjs +89 -0
- package/esm2022/lib/color-picker/color-picker.module.mjs +24 -0
- package/esm2022/lib/context-menu/context-menu.component.mjs +68 -0
- package/esm2022/lib/context-menu/context-menu.directive.mjs +146 -0
- package/esm2022/lib/context-menu/context-menu.module.mjs +20 -0
- package/esm2022/lib/data-filter/columns/filter-column-date.component.mjs +140 -0
- package/esm2022/lib/data-filter/columns/filter-column-number.component.mjs +119 -0
- package/esm2022/lib/data-filter/columns/filter-column-selection.component.mjs +75 -0
- package/esm2022/lib/data-filter/columns/filter-column-string.component.mjs +119 -0
- package/esm2022/lib/data-filter/filter-panel/filter-panel.component.mjs +267 -0
- package/esm2022/lib/data-filter/filter.class.mjs +46 -0
- package/esm2022/lib/data-filter/filter.module.mjs +88 -0
- package/esm2022/lib/data-filter/toolbar/filter-toolbar.component.mjs +168 -0
- package/esm2022/lib/data-list/core/data-list.component.mjs +37 -0
- package/esm2022/lib/data-list/list/list.component.mjs +134 -0
- package/esm2022/lib/data-list/list/list.module.mjs +22 -0
- package/esm2022/lib/data-list/list/toolbar-list-view.component.mjs +84 -0
- package/esm2022/lib/data-source/datasource.component.mjs +47 -0
- package/esm2022/lib/data-source/datasource.module.mjs +18 -0
- package/esm2022/lib/data-source/read-param.mjs +7 -0
- package/esm2022/lib/date-picker/date-picker.component.mjs +718 -0
- package/esm2022/lib/date-picker/date-picker.module.mjs +49 -0
- package/esm2022/lib/dialog/dialog.component.mjs +26 -0
- package/esm2022/lib/dialog/dialog.module.mjs +21 -0
- package/esm2022/lib/dialog/dialog.service.mjs +160 -0
- package/esm2022/lib/drawer/content.component.mjs +18 -0
- package/esm2022/lib/drawer/drawer-container.component.mjs +38 -0
- package/esm2022/lib/drawer/drawer.component.mjs +146 -0
- package/esm2022/lib/drawer/drawer.module.mjs +23 -0
- package/esm2022/lib/dropdown/dropdown.component.mjs +186 -0
- package/esm2022/lib/dropdown/dropdown.module.mjs +26 -0
- package/esm2022/lib/fieldset/fieldset.component.mjs +57 -0
- package/esm2022/lib/fieldset/fieldset.module.mjs +19 -0
- package/esm2022/lib/form-group/form-group.component.mjs +37 -0
- package/esm2022/lib/form-group/form-group.module.mjs +21 -0
- package/esm2022/lib/label/label.component.mjs +19 -0
- package/esm2022/lib/label/label.module.mjs +21 -0
- package/esm2022/lib/loading/loading-indicator.component.mjs +18 -0
- package/esm2022/lib/loading/loading-panel.component.mjs +45 -0
- package/esm2022/lib/loading/loading.module.mjs +21 -0
- package/{esm2020 → esm2022}/lib/loading/loading.service.mjs +7 -5
- package/esm2022/lib/menu/menu-item.component.mjs +50 -0
- package/esm2022/lib/menu/menu.component.mjs +98 -0
- package/esm2022/lib/menu/menu.module.mjs +22 -0
- package/esm2022/lib/menu/menu2.component.mjs +100 -0
- package/esm2022/lib/number-box/number-box.component.mjs +628 -0
- package/esm2022/lib/number-box/number-box.module.mjs +21 -0
- package/esm2022/lib/page/content.component.mjs +27 -0
- package/esm2022/lib/page/footer.component.mjs +19 -0
- package/esm2022/lib/page/page.component.mjs +57 -0
- package/esm2022/lib/page/page.module.mjs +22 -0
- package/esm2022/lib/panel-box/panel-box.component.mjs +87 -0
- package/esm2022/lib/panel-box/panel-box.module.mjs +19 -0
- package/esm2022/lib/password-box/password-box.component.mjs +32 -0
- package/esm2022/lib/password-box/password-box.module.mjs +23 -0
- package/esm2022/lib/popover/custom-cdk-overlay.service.mjs +50 -0
- package/esm2022/lib/popover/overlay.service.mjs +94 -0
- package/esm2022/lib/popover/popover.component.mjs +145 -0
- package/esm2022/lib/popover/popover.module.mjs +19 -0
- package/esm2022/lib/popup/popup.component.mjs +159 -0
- package/esm2022/lib/popup/popup.module.mjs +25 -0
- package/esm2022/lib/popup/popup.service.mjs +94 -0
- package/esm2022/lib/progress-bar/progress-bar.component.mjs +16 -0
- package/esm2022/lib/progress-bar/progress-bar.module.mjs +19 -0
- package/esm2022/lib/property-editor/editors/check-editor/check-editor.mjs +65 -0
- package/esm2022/lib/property-editor/editors/check-editor/check.module.mjs +22 -0
- package/esm2022/lib/property-editor/editors/color-editor/color.editor.mjs +41 -0
- package/esm2022/lib/property-editor/editors/color-editor/color.module.mjs +24 -0
- package/esm2022/lib/property-editor/editors/column-editor/column.editor.mjs +118 -0
- package/esm2022/lib/property-editor/editors/column-editor/column.module.mjs +32 -0
- package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +216 -0
- package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +76 -0
- package/esm2022/lib/property-editor/editors/date-editor/date.editor.mjs +87 -0
- package/esm2022/lib/property-editor/editors/date-editor/date.module.mjs +24 -0
- package/esm2022/lib/property-editor/editors/number-editor/number.editor.mjs +66 -0
- package/esm2022/lib/property-editor/editors/number-editor/number.module.mjs +24 -0
- package/esm2022/lib/property-editor/editors/range-editor/range.editor.mjs +145 -0
- package/esm2022/lib/property-editor/editors/range-editor/range.module.mjs +59 -0
- package/esm2022/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +76 -0
- package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +75 -0
- package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +25 -0
- package/esm2022/lib/property-editor/editors/selection-editor/selection-editor.mjs +73 -0
- package/esm2022/lib/property-editor/editors/selection-editor/selection.module.mjs +22 -0
- package/esm2022/lib/property-editor/editors/switch-editor/number.editor.mjs +30 -0
- package/esm2022/lib/property-editor/editors/switch-editor/number.module.mjs +25 -0
- package/esm2022/lib/property-editor/editors/text-editor/text.editor.mjs +36 -0
- package/esm2022/lib/property-editor/editors/text-editor/text.module.mjs +24 -0
- package/esm2022/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +35 -0
- package/esm2022/lib/property-editor/editors/textarea-editor/textarea.module.mjs +24 -0
- package/esm2022/lib/property-editor/editors/time-editor/time.editor.mjs +47 -0
- package/esm2022/lib/property-editor/editors/time-editor/time.module.mjs +24 -0
- package/esm2022/lib/property-editor/property-editor-renderer.directive.mjs +167 -0
- package/esm2022/lib/property-editor/property-editor.class.mjs +108 -0
- package/esm2022/lib/property-editor/property-editor.module.mjs +194 -0
- package/esm2022/lib/query-builder/query-builder-group.component.mjs +129 -0
- package/esm2022/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +177 -0
- package/esm2022/lib/query-builder/query-builder-rule.component.mjs +428 -0
- package/esm2022/lib/query-builder/query-builder.class.mjs +42 -0
- package/esm2022/lib/query-builder/query-builder.component.mjs +92 -0
- package/esm2022/lib/query-builder/query-builder.module.mjs +62 -0
- package/esm2022/lib/query-builder/query-builder.service.mjs +199 -0
- package/esm2022/lib/search-bar/search-bar.component.mjs +293 -0
- package/esm2022/lib/search-bar/search-bar.module.mjs +61 -0
- package/esm2022/lib/searchbox/searchbox.component.mjs +105 -0
- package/esm2022/lib/searchbox/searchbox.module.mjs +24 -0
- package/esm2022/lib/selectbox/selectbox.component.mjs +1028 -0
- package/esm2022/lib/selectbox/selectbox.module.mjs +44 -0
- package/esm2022/lib/selectbox/selectbox2.component.mjs +617 -0
- package/esm2022/lib/selection-list/selection-list.component.mjs +113 -0
- package/esm2022/lib/selection-list/selection-list.module.mjs +21 -0
- package/esm2022/lib/switch/switch.component.mjs +55 -0
- package/esm2022/lib/switch/switch.module.mjs +20 -0
- package/esm2022/lib/tab-page/tab-page-Renderer.component.mjs +75 -0
- package/esm2022/lib/tab-page/tab-page-host.component.mjs +124 -0
- package/esm2022/lib/tab-page/tab-page.module.mjs +21 -0
- package/esm2022/lib/tab-page/tab-page.service.mjs +158 -0
- package/esm2022/lib/tab-strip/tab-strip.component.mjs +38 -0
- package/esm2022/lib/tab-strip/tab-strip.module.mjs +19 -0
- package/esm2022/lib/tab-view/dynamic-tabs.directive.mjs +25 -0
- package/esm2022/lib/tab-view/tab-view.component.mjs +110 -0
- package/esm2022/lib/tab-view/tab-view.module.mjs +21 -0
- package/esm2022/lib/tab-view/tab.component.mjs +33 -0
- package/esm2022/lib/textarea/textarea.component.mjs +27 -0
- package/esm2022/lib/textarea/textarea.module.mjs +21 -0
- package/esm2022/lib/textbox/textbox.component.mjs +42 -0
- package/esm2022/lib/textbox/textbox.module.mjs +36 -0
- package/esm2022/lib/time-picker/time-picker.component.mjs +1107 -0
- package/esm2022/lib/time-picker/time-picker.module.mjs +34 -0
- package/esm2022/lib/toast/toast-message/toast-message.component.mjs +76 -0
- package/esm2022/lib/toast/toast-wrapper/toast-wrapper.component.mjs +13 -0
- package/esm2022/lib/toast/toast.module.mjs +21 -0
- package/esm2022/lib/toast/toast.service.mjs +45 -0
- package/esm2022/lib/toolbar/group-button/toolbar-group-button.component.mjs +77 -0
- package/esm2022/lib/toolbar/menu/toolbar-menu.component.mjs +62 -0
- package/esm2022/lib/toolbar/search/toolbar-search.component.mjs +56 -0
- package/esm2022/lib/toolbar/title/toolbar-title.component.mjs +37 -0
- package/esm2022/lib/toolbar/toolbar-item.mjs +4 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +13 -0
- package/esm2022/lib/toolbar/toolbar.module.mjs +40 -0
- package/esm2022/lib/tooltip/tooltip.directive.mjs +104 -0
- package/esm2022/lib/tooltip/tooltip.module.mjs +19 -0
- package/esm2022/lib/tree-side-menu/tree-side-menu.component.mjs +697 -0
- package/esm2022/lib/tree-side-menu/tree-side-menu.module.mjs +33 -0
- package/esm2022/lib/tree-view/tree-view.component.mjs +854 -0
- package/esm2022/lib/tree-view/tree-view.module.mjs +22 -0
- package/esm2022/lib/upload-file/upload-file.component.mjs +226 -0
- package/esm2022/lib/upload-file/upload-file.events.mjs +2 -0
- package/esm2022/lib/upload-file/upload-file.module.mjs +24 -0
- package/esm2022/lib/validation/validation-form.component.mjs +68 -0
- package/esm2022/lib/validation/validation-rule.widget.mjs +114 -0
- package/esm2022/lib/validation/validation.class.mjs +2 -0
- package/esm2022/lib/validation/validation.component.mjs +89 -0
- package/esm2022/lib/validation/validation.module.mjs +34 -0
- package/{fesm2020 → fesm2022}/acorex-components.mjs +3611 -2674
- package/fesm2022/acorex-components.mjs.map +1 -0
- package/lib/accordion/accordion.component.d.ts +1 -1
- package/lib/base/base-page.class.d.ts +2 -2
- package/lib/base/element.class.d.ts +6 -6
- package/lib/button/button.component.d.ts +1 -1
- package/lib/calendar/calendar-box/calendar-box.component.d.ts +6 -6
- package/lib/calendar/scheduler/scheduler-views.property.d.ts +2 -2
- package/lib/calendar/scheduler/scheduler.class.d.ts +1 -1
- package/lib/calendar/scheduler/scheduler.component.d.ts +1 -1
- package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +1 -1
- package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +1 -1
- package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +1 -1
- package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +1 -1
- package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +1 -1
- package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +1 -1
- package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +1 -1
- package/lib/checkbox/checkbox.component.d.ts +1 -1
- package/lib/color-picker/color-box/color-box.component.d.ts +1 -1
- package/lib/color-picker/color-picker.component.d.ts +1 -1
- package/lib/context-menu/context-menu.component.d.ts +1 -1
- package/lib/context-menu/context-menu.directive.d.ts +3 -3
- package/lib/data-filter/columns/filter-column-date.component.d.ts +1 -1
- package/lib/data-filter/columns/filter-column-number.component.d.ts +1 -1
- package/lib/data-filter/columns/filter-column-selection.component.d.ts +1 -1
- package/lib/data-filter/columns/filter-column-string.component.d.ts +1 -1
- package/lib/data-filter/filter-panel/filter-panel.component.d.ts +1 -1
- package/lib/data-filter/filter.class.d.ts +1 -1
- package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +1 -1
- package/lib/data-list/core/data-list.component.d.ts +1 -1
- package/lib/data-list/list/list.component.d.ts +1 -1
- package/lib/data-list/list/toolbar-list-view.component.d.ts +2 -2
- package/lib/data-source/datasource.component.d.ts +1 -1
- package/lib/date-picker/date-picker.component.d.ts +1 -1
- package/lib/date-picker/date-picker.module.d.ts +2 -2
- package/lib/dialog/dialog.component.d.ts +1 -1
- package/lib/drawer/content.component.d.ts +1 -1
- package/lib/drawer/drawer-container.component.d.ts +1 -1
- package/lib/drawer/drawer.component.d.ts +3 -3
- package/lib/dropdown/dropdown.component.d.ts +1 -1
- package/lib/fieldset/fieldset.component.d.ts +1 -1
- package/lib/form-group/form-group.component.d.ts +1 -1
- package/lib/label/label.component.d.ts +1 -1
- package/lib/loading/loading-indicator.component.d.ts +1 -1
- package/lib/loading/loading-panel.component.d.ts +1 -1
- package/lib/menu/menu-item.component.d.ts +1 -1
- package/lib/menu/menu.component.d.ts +1 -1
- package/lib/menu/menu2.component.d.ts +1 -1
- package/lib/number-box/number-box.component.d.ts +1 -1
- package/lib/page/content.component.d.ts +1 -1
- package/lib/page/footer.component.d.ts +1 -1
- package/lib/page/page.component.d.ts +1 -1
- package/lib/panel-box/panel-box.component.d.ts +1 -1
- package/lib/password-box/password-box.component.d.ts +1 -1
- package/lib/popover/popover.component.d.ts +1 -1
- package/lib/popup/popup.component.d.ts +1 -1
- package/lib/progress-bar/progress-bar.component.d.ts +1 -1
- package/lib/property-editor/editors/check-editor/check-editor.d.ts +1 -1
- package/lib/property-editor/editors/color-editor/color.editor.d.ts +1 -1
- package/lib/property-editor/editors/column-editor/column.editor.d.ts +1 -1
- package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +1 -1
- package/lib/property-editor/editors/date-editor/date.editor.d.ts +1 -1
- package/lib/property-editor/editors/number-editor/number.editor.d.ts +1 -1
- package/lib/property-editor/editors/range-editor/range.editor.d.ts +1 -1
- package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +1 -1
- package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +1 -1
- package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +1 -1
- package/lib/property-editor/editors/switch-editor/number.editor.d.ts +1 -1
- package/lib/property-editor/editors/text-editor/text.editor.d.ts +1 -1
- package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +1 -1
- package/lib/property-editor/editors/time-editor/time.editor.d.ts +1 -1
- package/lib/property-editor/property-editor-renderer.directive.d.ts +1 -1
- package/lib/property-editor/property-editor.class.d.ts +3 -3
- package/lib/query-builder/query-builder-group.component.d.ts +1 -1
- package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +1 -1
- package/lib/query-builder/query-builder-rule.component.d.ts +3 -3
- package/lib/query-builder/query-builder.class.d.ts +4 -4
- package/lib/query-builder/query-builder.component.d.ts +1 -1
- package/lib/search-bar/search-bar.component.d.ts +1 -1
- package/lib/searchbox/searchbox.component.d.ts +2 -1
- package/lib/selectbox/selectbox.component.d.ts +2 -1
- package/lib/selectbox/selectbox2.component.d.ts +1 -1
- package/lib/selection-list/selection-list.component.d.ts +2 -2
- package/lib/switch/switch.component.d.ts +1 -1
- package/lib/tab-page/tab-page-Renderer.component.d.ts +1 -1
- package/lib/tab-page/tab-page-host.component.d.ts +1 -1
- package/lib/tab-strip/tab-strip.component.d.ts +1 -1
- package/lib/tab-view/dynamic-tabs.directive.d.ts +1 -1
- package/lib/tab-view/tab-view.component.d.ts +1 -1
- package/lib/tab-view/tab.component.d.ts +1 -1
- package/lib/textarea/textarea.component.d.ts +1 -1
- package/lib/textbox/textbox.component.d.ts +2 -2
- package/lib/textbox/textbox.module.d.ts +2 -2
- package/lib/time-picker/time-picker.component.d.ts +2 -1
- package/lib/time-picker/time-picker.module.d.ts +2 -2
- package/lib/toast/toast-message/toast-message.component.d.ts +1 -1
- package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +1 -1
- package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +1 -1
- package/lib/toolbar/menu/toolbar-menu.component.d.ts +1 -1
- package/lib/toolbar/search/toolbar-search.component.d.ts +1 -1
- package/lib/toolbar/title/toolbar-title.component.d.ts +1 -1
- package/lib/toolbar/toolbar.component.d.ts +1 -1
- package/lib/tooltip/tooltip.directive.d.ts +1 -1
- package/lib/tree-side-menu/tree-side-menu.component.d.ts +1 -1
- package/lib/tree-view/tree-view.component.d.ts +1 -1
- package/lib/upload-file/upload-file.component.d.ts +2 -2
- package/lib/validation/validation-form.component.d.ts +1 -1
- package/lib/validation/validation-rule.widget.d.ts +1 -1
- package/lib/validation/validation.class.d.ts +1 -1
- package/lib/validation/validation.component.d.ts +1 -1
- package/package.json +15 -20
- package/acorex-components.d.ts +0 -5
- package/esm2020/acorex-components.mjs +0 -5
- package/esm2020/lib/accordion/accordion.component.mjs +0 -44
- package/esm2020/lib/accordion/accordion.module.mjs +0 -20
- package/esm2020/lib/base/base-page.class.mjs +0 -94
- package/esm2020/lib/base/components.class.mjs +0 -17
- package/esm2020/lib/base/element.class.mjs +0 -294
- package/esm2020/lib/base/events.class.mjs +0 -11
- package/esm2020/lib/button/button.component.mjs +0 -71
- package/esm2020/lib/button/button.module.mjs +0 -21
- package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +0 -413
- package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +0 -22
- package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +0 -54
- package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +0 -18
- package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +0 -213
- package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +0 -68
- package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +0 -132
- package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +0 -37
- package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +0 -47
- package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +0 -95
- package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +0 -204
- package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +0 -99
- package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +0 -77
- package/esm2020/lib/checkbox/checkbox.component.mjs +0 -98
- package/esm2020/lib/checkbox/checkbox.module.mjs +0 -20
- package/esm2020/lib/color-picker/color-box/color-box.component.mjs +0 -422
- package/esm2020/lib/color-picker/color-picker.component.mjs +0 -82
- package/esm2020/lib/color-picker/color-picker.module.mjs +0 -24
- package/esm2020/lib/context-menu/context-menu.component.mjs +0 -65
- package/esm2020/lib/context-menu/context-menu.directive.mjs +0 -135
- package/esm2020/lib/context-menu/context-menu.module.mjs +0 -20
- package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +0 -138
- package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +0 -117
- package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +0 -74
- package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +0 -117
- package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +0 -258
- package/esm2020/lib/data-filter/filter.class.mjs +0 -44
- package/esm2020/lib/data-filter/filter.module.mjs +0 -90
- package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +0 -166
- package/esm2020/lib/data-list/core/data-list.component.mjs +0 -40
- package/esm2020/lib/data-list/list/list.component.mjs +0 -124
- package/esm2020/lib/data-list/list/list.module.mjs +0 -22
- package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +0 -85
- package/esm2020/lib/data-source/datasource.component.mjs +0 -47
- package/esm2020/lib/data-source/datasource.module.mjs +0 -18
- package/esm2020/lib/data-source/read-param.mjs +0 -5
- package/esm2020/lib/date-picker/date-picker.component.mjs +0 -702
- package/esm2020/lib/date-picker/date-picker.module.mjs +0 -25
- package/esm2020/lib/dialog/dialog.component.mjs +0 -24
- package/esm2020/lib/dialog/dialog.module.mjs +0 -21
- package/esm2020/lib/dialog/dialog.service.mjs +0 -150
- package/esm2020/lib/drawer/content.component.mjs +0 -18
- package/esm2020/lib/drawer/drawer-container.component.mjs +0 -36
- package/esm2020/lib/drawer/drawer.component.mjs +0 -142
- package/esm2020/lib/drawer/drawer.module.mjs +0 -23
- package/esm2020/lib/dropdown/dropdown.component.mjs +0 -176
- package/esm2020/lib/dropdown/dropdown.module.mjs +0 -26
- package/esm2020/lib/fieldset/fieldset.component.mjs +0 -59
- package/esm2020/lib/fieldset/fieldset.module.mjs +0 -19
- package/esm2020/lib/form-group/form-group.component.mjs +0 -34
- package/esm2020/lib/form-group/form-group.module.mjs +0 -21
- package/esm2020/lib/label/label.component.mjs +0 -19
- package/esm2020/lib/label/label.module.mjs +0 -21
- package/esm2020/lib/loading/loading-indicator.component.mjs +0 -17
- package/esm2020/lib/loading/loading-panel.component.mjs +0 -44
- package/esm2020/lib/loading/loading.module.mjs +0 -21
- package/esm2020/lib/menu/menu-item.component.mjs +0 -47
- package/esm2020/lib/menu/menu.component.mjs +0 -86
- package/esm2020/lib/menu/menu.module.mjs +0 -22
- package/esm2020/lib/menu/menu2.component.mjs +0 -96
- package/esm2020/lib/number-box/number-box.component.mjs +0 -622
- package/esm2020/lib/number-box/number-box.module.mjs +0 -21
- package/esm2020/lib/page/content.component.mjs +0 -32
- package/esm2020/lib/page/footer.component.mjs +0 -19
- package/esm2020/lib/page/page.component.mjs +0 -53
- package/esm2020/lib/page/page.module.mjs +0 -22
- package/esm2020/lib/panel-box/panel-box.component.mjs +0 -88
- package/esm2020/lib/panel-box/panel-box.module.mjs +0 -19
- package/esm2020/lib/password-box/password-box.component.mjs +0 -31
- package/esm2020/lib/password-box/password-box.module.mjs +0 -23
- package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +0 -48
- package/esm2020/lib/popover/overlay.service.mjs +0 -91
- package/esm2020/lib/popover/popover.component.mjs +0 -133
- package/esm2020/lib/popover/popover.module.mjs +0 -19
- package/esm2020/lib/popup/popup.component.mjs +0 -147
- package/esm2020/lib/popup/popup.module.mjs +0 -25
- package/esm2020/lib/popup/popup.service.mjs +0 -93
- package/esm2020/lib/progress-bar/progress-bar.component.mjs +0 -19
- package/esm2020/lib/progress-bar/progress-bar.module.mjs +0 -19
- package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +0 -61
- package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +0 -22
- package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +0 -38
- package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +0 -24
- package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +0 -115
- package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +0 -32
- package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +0 -211
- package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +0 -78
- package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +0 -51
- package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +0 -24
- package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +0 -63
- package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +0 -24
- package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +0 -140
- package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +0 -61
- package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +0 -72
- package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +0 -71
- package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +0 -25
- package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +0 -69
- package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +0 -22
- package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +0 -29
- package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +0 -25
- package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +0 -32
- package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +0 -24
- package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +0 -32
- package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +0 -24
- package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +0 -43
- package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +0 -24
- package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +0 -157
- package/esm2020/lib/property-editor/property-editor.class.mjs +0 -102
- package/esm2020/lib/property-editor/property-editor.module.mjs +0 -196
- package/esm2020/lib/query-builder/query-builder-group.component.mjs +0 -124
- package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +0 -172
- package/esm2020/lib/query-builder/query-builder-rule.component.mjs +0 -399
- package/esm2020/lib/query-builder/query-builder.class.mjs +0 -20
- package/esm2020/lib/query-builder/query-builder.component.mjs +0 -87
- package/esm2020/lib/query-builder/query-builder.module.mjs +0 -62
- package/esm2020/lib/query-builder/query-builder.service.mjs +0 -197
- package/esm2020/lib/search-bar/search-bar.component.mjs +0 -286
- package/esm2020/lib/search-bar/search-bar.module.mjs +0 -63
- package/esm2020/lib/searchbox/searchbox.component.mjs +0 -79
- package/esm2020/lib/searchbox/searchbox.module.mjs +0 -24
- package/esm2020/lib/selectbox/selectbox.component.mjs +0 -961
- package/esm2020/lib/selectbox/selectbox.module.mjs +0 -44
- package/esm2020/lib/selectbox/selectbox2.component.mjs +0 -574
- package/esm2020/lib/selection-list/selection-list.component.mjs +0 -108
- package/esm2020/lib/selection-list/selection-list.module.mjs +0 -21
- package/esm2020/lib/switch/switch.component.mjs +0 -51
- package/esm2020/lib/switch/switch.module.mjs +0 -20
- package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +0 -71
- package/esm2020/lib/tab-page/tab-page-host.component.mjs +0 -114
- package/esm2020/lib/tab-page/tab-page.module.mjs +0 -21
- package/esm2020/lib/tab-page/tab-page.service.mjs +0 -160
- package/esm2020/lib/tab-strip/tab-strip.component.mjs +0 -36
- package/esm2020/lib/tab-strip/tab-strip.module.mjs +0 -19
- package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +0 -24
- package/esm2020/lib/tab-view/tab-view.component.mjs +0 -105
- package/esm2020/lib/tab-view/tab-view.module.mjs +0 -21
- package/esm2020/lib/tab-view/tab.component.mjs +0 -30
- package/esm2020/lib/textarea/textarea.component.mjs +0 -26
- package/esm2020/lib/textarea/textarea.module.mjs +0 -21
- package/esm2020/lib/textbox/textbox.component.mjs +0 -39
- package/esm2020/lib/textbox/textbox.module.mjs +0 -24
- package/esm2020/lib/time-picker/time-picker.component.mjs +0 -943
- package/esm2020/lib/time-picker/time-picker.module.mjs +0 -22
- package/esm2020/lib/toast/toast-message/toast-message.component.mjs +0 -74
- package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +0 -13
- package/esm2020/lib/toast/toast.module.mjs +0 -21
- package/esm2020/lib/toast/toast.service.mjs +0 -44
- package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +0 -78
- package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +0 -57
- package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +0 -54
- package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +0 -47
- package/esm2020/lib/toolbar/toolbar-item.mjs +0 -6
- package/esm2020/lib/toolbar/toolbar.component.mjs +0 -13
- package/esm2020/lib/toolbar/toolbar.module.mjs +0 -40
- package/esm2020/lib/tooltip/tooltip.directive.mjs +0 -100
- package/esm2020/lib/tooltip/tooltip.module.mjs +0 -19
- package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +0 -646
- package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +0 -35
- package/esm2020/lib/tree-view/tree-view.component.mjs +0 -775
- package/esm2020/lib/tree-view/tree-view.module.mjs +0 -22
- package/esm2020/lib/upload-file/upload-file.component.mjs +0 -208
- package/esm2020/lib/upload-file/upload-file.events.mjs +0 -2
- package/esm2020/lib/upload-file/upload-file.module.mjs +0 -24
- package/esm2020/lib/validation/validation-form.component.mjs +0 -65
- package/esm2020/lib/validation/validation-rule.widget.mjs +0 -111
- package/esm2020/lib/validation/validation.class.mjs +0 -2
- package/esm2020/lib/validation/validation.component.mjs +0 -89
- package/esm2020/lib/validation/validation.module.mjs +0 -34
- package/esm2020/public-api.mjs +0 -158
- package/fesm2015/acorex-components.mjs +0 -16012
- package/fesm2015/acorex-components.mjs.map +0 -1
- package/fesm2020/acorex-components.mjs.map +0 -1
- /package/{public-api.d.ts → index.d.ts} +0 -0
@@ -1,775 +0,0 @@
|
|
1
|
-
import { Component, ViewEncapsulation, Input, ContentChild, Output, EventEmitter, ElementRef, TemplateRef } from '@angular/core';
|
2
|
-
import { AXDataSourceComponent } from '../data-source/datasource.component';
|
3
|
-
import { AXHtmlEvent, AXValueEvent } from '../base/events.class';
|
4
|
-
import { AXBaseComponent } from '../base/element.class';
|
5
|
-
import * as i0 from "@angular/core";
|
6
|
-
import * as i1 from "../checkbox/checkbox.component";
|
7
|
-
import * as i2 from "../context-menu/context-menu.component";
|
8
|
-
import * as i3 from "@angular/common";
|
9
|
-
import * as i4 from "../context-menu/context-menu.directive";
|
10
|
-
export class AXTreeViewNode {
|
11
|
-
constructor() {
|
12
|
-
this.itemData = new AXTreeViewItemData();
|
13
|
-
}
|
14
|
-
}
|
15
|
-
export class AXTreeViewItemData {
|
16
|
-
}
|
17
|
-
export class AXTreeViewItemMovedEvent {
|
18
|
-
}
|
19
|
-
export class AXTreeViewselectionChangedEvent extends AXValueEvent {
|
20
|
-
}
|
21
|
-
export class AXTreeViewseletedKeyFieldsChangedEvent extends AXValueEvent {
|
22
|
-
}
|
23
|
-
export class AXTreeViewItemClick extends AXHtmlEvent {
|
24
|
-
}
|
25
|
-
export class AXTreeViewComponent extends AXBaseComponent {
|
26
|
-
constructor(ref) {
|
27
|
-
super();
|
28
|
-
this.ref = ref;
|
29
|
-
this.selectionMode = 'single';
|
30
|
-
this.selectionLevel = 'all';
|
31
|
-
// user can set only one of this /selectedFieldName or /seletedKeyFields
|
32
|
-
//seletedKeyFields set id of nodes and parents
|
33
|
-
//selectedFieldName set name of fields that set selectes
|
34
|
-
this.selectedFieldName = null;
|
35
|
-
// @Input()
|
36
|
-
// selectNodesRecursive: 'all' | 'parents' | 'childs' | 'none' = 'all'; //leaf
|
37
|
-
this.checkParents = true;
|
38
|
-
this.checkChilds = true;
|
39
|
-
this.seletedKeyFields = [];
|
40
|
-
this.keyField = 'id';
|
41
|
-
this.hasChildField = 'child';
|
42
|
-
this.bordered = false;
|
43
|
-
this.lazyLoading = true;
|
44
|
-
this.allowDrag = false;
|
45
|
-
this.size = 'md';
|
46
|
-
this.disabled = false;
|
47
|
-
this.selectionChanged = new EventEmitter();
|
48
|
-
this.seletedKeyFieldsChanged = new EventEmitter();
|
49
|
-
this.onItemOpening = new EventEmitter();
|
50
|
-
this.onItemClick = new EventEmitter();
|
51
|
-
this.onItemClosing = new EventEmitter();
|
52
|
-
this.onItemDrag = new EventEmitter();
|
53
|
-
this.onItemMoved = new EventEmitter();
|
54
|
-
this.selectableField = '';
|
55
|
-
this.onContextMenuItemClick = new EventEmitter();
|
56
|
-
this.showSelectBox = false;
|
57
|
-
this.loading = false;
|
58
|
-
this.list = [];
|
59
|
-
this.selectedItems = [];
|
60
|
-
this.selectedParents = [];
|
61
|
-
this.loadAllChildren = false;
|
62
|
-
this.listLoad = [];
|
63
|
-
this.validDrop = true;
|
64
|
-
this.lockedDrag = false;
|
65
|
-
this.childField = 'childeren';
|
66
|
-
this.showContextMenu = false;
|
67
|
-
this.isSelectedItem = false;
|
68
|
-
this.loced = false;
|
69
|
-
this.levelCount = 0;
|
70
|
-
}
|
71
|
-
handleOnContextMenuItem(e) {
|
72
|
-
if (this.disabled) {
|
73
|
-
return;
|
74
|
-
}
|
75
|
-
this.onContextMenuItemClick.emit(e);
|
76
|
-
}
|
77
|
-
refresh() {
|
78
|
-
this.list = [];
|
79
|
-
this._contentDataSource.fetch(null);
|
80
|
-
}
|
81
|
-
internalSelectItem(item, userChange = true) {
|
82
|
-
if (item[this.hasChildField] === false || this.selectionMode === 'single') {
|
83
|
-
item.select = !item.select;
|
84
|
-
if (item.parentNode && this.selectionMode !== 'single' && this.checkParents == true) {
|
85
|
-
this.changeParentSelect(item.parentNode);
|
86
|
-
}
|
87
|
-
if (item.select === true) {
|
88
|
-
if (this.selectionMode === 'single') {
|
89
|
-
this.selectedItems.forEach((e) => {
|
90
|
-
e.select = false;
|
91
|
-
});
|
92
|
-
this.selectedItems = [];
|
93
|
-
this.selectedItems.push(item);
|
94
|
-
}
|
95
|
-
else {
|
96
|
-
this.selectedItems.push(item);
|
97
|
-
}
|
98
|
-
}
|
99
|
-
else {
|
100
|
-
this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== item[this.keyField]);
|
101
|
-
}
|
102
|
-
}
|
103
|
-
else {
|
104
|
-
item.select = !item.select;
|
105
|
-
if (item.parentNode && this.selectionMode === 'multiple' && this.checkParents == true) {
|
106
|
-
this.changeParentSelect(item.parentNode);
|
107
|
-
}
|
108
|
-
if (this.selectionMode === 'multiple' && this.checkChilds == true) {
|
109
|
-
this.changeChildSelect(item, item.select);
|
110
|
-
}
|
111
|
-
if (item.select == true) {
|
112
|
-
if (this.selectionMode === 'multiple') {
|
113
|
-
this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
|
114
|
-
this.selectedParents.push(item);
|
115
|
-
}
|
116
|
-
else {
|
117
|
-
this.selectedParents.forEach((e) => {
|
118
|
-
e.select = false;
|
119
|
-
});
|
120
|
-
this.selectedParents = [];
|
121
|
-
this.selectedParents.push(item);
|
122
|
-
}
|
123
|
-
}
|
124
|
-
else {
|
125
|
-
this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
|
126
|
-
}
|
127
|
-
}
|
128
|
-
if (userChange) {
|
129
|
-
this.selectionChanged.emit({
|
130
|
-
component: this,
|
131
|
-
value: this.makeNode(item),
|
132
|
-
htmlElement: this.ref.nativeElement
|
133
|
-
});
|
134
|
-
}
|
135
|
-
}
|
136
|
-
makeNode(item, addChildren = true) {
|
137
|
-
const node = new AXTreeViewNode();
|
138
|
-
if (addChildren) {
|
139
|
-
node.children = item[this.childField] === undefined ? [] : item[this.childField]?.map((m) => this.makeNode(m));
|
140
|
-
}
|
141
|
-
node.itemData.disabled = item.disabled === true ? item.disabled : false;
|
142
|
-
node.itemData.open = item.open === true ? item.open : false;
|
143
|
-
node.itemData.key = item[this.keyField];
|
144
|
-
const c = [];
|
145
|
-
let i = 0;
|
146
|
-
for (var k in item) {
|
147
|
-
i = i + 1;
|
148
|
-
if (k != 'select' &&
|
149
|
-
k != 'hasChild' &&
|
150
|
-
k != 'loading' &&
|
151
|
-
k != 'requestId' &&
|
152
|
-
k != 'disabled' &&
|
153
|
-
k != 'open' &&
|
154
|
-
k != 'parentNode' &&
|
155
|
-
k != 'toggle' &&
|
156
|
-
k != 'loaded' &&
|
157
|
-
k != 'indeterminate' &&
|
158
|
-
k != this.childField) {
|
159
|
-
//c.push({ k: item[k] });
|
160
|
-
c[k] = item[k];
|
161
|
-
}
|
162
|
-
}
|
163
|
-
node.itemData.item = c; //TO DO
|
164
|
-
node.itemData.selected = item.select === true ? item.select : false;
|
165
|
-
node.itemData.indeterminate = item.select === null ? true : false;
|
166
|
-
node.itemData.hasChild = item[this.hasChildField];
|
167
|
-
node.parent = item.parentNode === undefined ? null : this.makeNode(item.parentNode, false);
|
168
|
-
if (node.parent != null) {
|
169
|
-
node.parent.selectParent = () => {
|
170
|
-
if (item.parentNode['select'] != true) {
|
171
|
-
this.internalSelectItem(item.parentNode, true);
|
172
|
-
}
|
173
|
-
};
|
174
|
-
node.parent.unSelectParent = () => {
|
175
|
-
if (item.parentNode['select'] == true) {
|
176
|
-
this.internalSelectItem(item.parentNode, true);
|
177
|
-
}
|
178
|
-
};
|
179
|
-
}
|
180
|
-
if (node.children != null && node.children.length > 0) {
|
181
|
-
node.children.selectChilds = () => {
|
182
|
-
item.childeren.forEach((element) => {
|
183
|
-
if (element['select'] != true) {
|
184
|
-
this.internalSelectItem(element, true);
|
185
|
-
}
|
186
|
-
});
|
187
|
-
};
|
188
|
-
node.children.unSelectChilds = () => {
|
189
|
-
item.childeren.forEach((element) => {
|
190
|
-
if (element['select'] == true) {
|
191
|
-
this.internalSelectItem(element, true);
|
192
|
-
}
|
193
|
-
});
|
194
|
-
};
|
195
|
-
}
|
196
|
-
return node;
|
197
|
-
}
|
198
|
-
changeChildSelect(item, s) {
|
199
|
-
// if (this.selectNodesRecursive == 'all' || this.selectNodesRecursive == 'childs') {
|
200
|
-
if (this.checkChilds == true) {
|
201
|
-
item.select = s;
|
202
|
-
if (item[this.hasChildField] === true && item[this.childField] && item[this.childField].length > 0) {
|
203
|
-
item[this.childField].forEach((elm) => {
|
204
|
-
if (elm[this.hasChildField] === true) {
|
205
|
-
elm.select = s;
|
206
|
-
if (s === true && this.selectionMode !== 'single') {
|
207
|
-
this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== elm[this.keyField]);
|
208
|
-
this.selectedParents.push(elm);
|
209
|
-
}
|
210
|
-
if (s === false && this.selectionMode !== 'single') {
|
211
|
-
this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== elm[this.keyField]);
|
212
|
-
}
|
213
|
-
this.changeChildSelect(elm, s);
|
214
|
-
}
|
215
|
-
else {
|
216
|
-
elm.select = s;
|
217
|
-
if (s === true && this.selectionMode !== 'single') {
|
218
|
-
this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== elm[this.keyField]);
|
219
|
-
this.selectedItems.push(elm);
|
220
|
-
}
|
221
|
-
if (s === false && this.selectionMode !== 'single') {
|
222
|
-
this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== elm[this.keyField]);
|
223
|
-
}
|
224
|
-
}
|
225
|
-
});
|
226
|
-
}
|
227
|
-
else {
|
228
|
-
item.select = s;
|
229
|
-
}
|
230
|
-
}
|
231
|
-
}
|
232
|
-
changeParentSelect(item) {
|
233
|
-
//if (this.selectNodesRecursive == 'all' || this.selectNodesRecursive == 'parents') {
|
234
|
-
if (this.checkParents) {
|
235
|
-
let allselect = true;
|
236
|
-
let alldeselect = true;
|
237
|
-
let oneselect = false;
|
238
|
-
let isindeterminate = false;
|
239
|
-
if (item[this.childField]) {
|
240
|
-
for (let index = 0; index < item[this.childField].length; index++) {
|
241
|
-
if (item[this.childField][index].select === true) {
|
242
|
-
alldeselect = false;
|
243
|
-
oneselect = true;
|
244
|
-
}
|
245
|
-
if (item[this.childField][index].select === false || item[this.childField][index].select === undefined) {
|
246
|
-
allselect = false;
|
247
|
-
}
|
248
|
-
if (item[this.childField][index].select === null) {
|
249
|
-
isindeterminate = true;
|
250
|
-
alldeselect = false;
|
251
|
-
oneselect = true;
|
252
|
-
allselect = false;
|
253
|
-
}
|
254
|
-
}
|
255
|
-
}
|
256
|
-
if (oneselect || (isindeterminate && !allselect)) {
|
257
|
-
item.select = null;
|
258
|
-
this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
|
259
|
-
this.selectedParents.push(item);
|
260
|
-
}
|
261
|
-
if (allselect === true) {
|
262
|
-
item.select = true;
|
263
|
-
this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
|
264
|
-
this.selectedParents.push(item);
|
265
|
-
}
|
266
|
-
if (alldeselect === true) {
|
267
|
-
this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
|
268
|
-
item.select = false;
|
269
|
-
}
|
270
|
-
if (item.parentNode && item.parentNode[this.childField] && item.parentNode[this.childField].length > 0) {
|
271
|
-
this.changeParentSelect(item.parentNode);
|
272
|
-
}
|
273
|
-
}
|
274
|
-
}
|
275
|
-
ngOnInit() {
|
276
|
-
this.onItemClick.subscribe((data) => {
|
277
|
-
if (!data.cancel) {
|
278
|
-
this.toggleNode(data.item, data.flag);
|
279
|
-
}
|
280
|
-
});
|
281
|
-
}
|
282
|
-
itemdbClick(e, item) {
|
283
|
-
if (this.selectionMode == 'single') {
|
284
|
-
this.handleOnNodeClick(e, item, true);
|
285
|
-
}
|
286
|
-
}
|
287
|
-
handleOnNodeClick(e, item, flag = false) {
|
288
|
-
if (this.disabled) {
|
289
|
-
return;
|
290
|
-
}
|
291
|
-
// this.internalSelectItem(item);
|
292
|
-
this.onItemClick.emit({
|
293
|
-
component: this,
|
294
|
-
htmlEvent: e,
|
295
|
-
item,
|
296
|
-
flag
|
297
|
-
});
|
298
|
-
}
|
299
|
-
nodeClick(item) {
|
300
|
-
if (this.disabled) {
|
301
|
-
return;
|
302
|
-
}
|
303
|
-
if (item[this.hasChildField] == true) {
|
304
|
-
this.toggleNode(item, true);
|
305
|
-
}
|
306
|
-
else {
|
307
|
-
this.internalSelectItem(item, true);
|
308
|
-
}
|
309
|
-
}
|
310
|
-
toggleNode(item, flag = false) {
|
311
|
-
//item[this.hasChildField] === false &&
|
312
|
-
if (this.selectionMode === 'single' && !flag) {
|
313
|
-
if (this.selectionLevel == 'nodes' && item.hasChild == true) {
|
314
|
-
}
|
315
|
-
else {
|
316
|
-
this.internalSelectItem(item);
|
317
|
-
}
|
318
|
-
}
|
319
|
-
else {
|
320
|
-
item.toggle = !item.toggle;
|
321
|
-
if (this.selectionMode === 'single') {
|
322
|
-
if (this.selectionLevel == 'nodes' && item.hasChild == true) {
|
323
|
-
}
|
324
|
-
else {
|
325
|
-
this.internalSelectItem(item);
|
326
|
-
}
|
327
|
-
}
|
328
|
-
if (item[this.hasChildField] === true && item.loaded !== true && this.lazyLoading) {
|
329
|
-
this.itemRow = item;
|
330
|
-
const uid = Math.floor(Math.random() * 100000000);
|
331
|
-
item.requestId = uid;
|
332
|
-
this.listLoad.push(item);
|
333
|
-
this._contentDataSource.fetch(item);
|
334
|
-
this.showLoading(this.itemRow);
|
335
|
-
}
|
336
|
-
if (item.toggle && item[this.hasChildField] === true) {
|
337
|
-
item.open = true;
|
338
|
-
this.onItemOpening.emit(this.makeNode(item));
|
339
|
-
}
|
340
|
-
else if (!item.toggle && item[this.hasChildField] === true) {
|
341
|
-
item.open = false;
|
342
|
-
this.onItemClosing.emit(this.makeNode(item));
|
343
|
-
}
|
344
|
-
}
|
345
|
-
}
|
346
|
-
getLevel(item) {
|
347
|
-
return new Promise((resolve, reject) => {
|
348
|
-
if (item.parentNode) {
|
349
|
-
this.levelCount = this.levelCount + 1;
|
350
|
-
this.getLevel(item.parentNode).then((res) => {
|
351
|
-
resolve(this.levelCount);
|
352
|
-
});
|
353
|
-
}
|
354
|
-
else {
|
355
|
-
this.levelCount = this.levelCount + 1;
|
356
|
-
resolve(this.levelCount);
|
357
|
-
}
|
358
|
-
});
|
359
|
-
}
|
360
|
-
ngAfterContentInit() {
|
361
|
-
this._contentDataSource.fetch(null);
|
362
|
-
this._contentDataSource.onDataReceived.subscribe((_data) => {
|
363
|
-
if (this.list.length === 0) {
|
364
|
-
this.hideLoading(null);
|
365
|
-
this.list = _data.data.result;
|
366
|
-
this.list.forEach((el) => {
|
367
|
-
el.disabledCheckBox = this.selectableField != '' ? (el[this.selectableField] ? el[this.selectableField] : false) : false;
|
368
|
-
el.select = false;
|
369
|
-
if (this.selectionLevel == 'nodes' && el[this.hasChildField] == true) {
|
370
|
-
el.disabledCheckBox = true;
|
371
|
-
}
|
372
|
-
if (this.selectionLevel == 'parents' && el[this.hasChildField] == false) {
|
373
|
-
el.disabledCheckBox = true;
|
374
|
-
}
|
375
|
-
if (this.seletedKeyFields.length > 0) {
|
376
|
-
this.seletedKeyFields.forEach((n) => {
|
377
|
-
if (n.includes(el[this.keyField])) {
|
378
|
-
if (el[this.hasChildField] == true) {
|
379
|
-
if (((this.checkParents == false && this.checkChilds == false) || this.checkChilds == false) && n.length == 1) {
|
380
|
-
//select parent when check child and check parent is false TODO check this Action
|
381
|
-
this.selectItem(el);
|
382
|
-
}
|
383
|
-
if (!this.disabled) {
|
384
|
-
this.open(el);
|
385
|
-
}
|
386
|
-
}
|
387
|
-
else {
|
388
|
-
this.selectItem(el);
|
389
|
-
this.isSelectedItem = true;
|
390
|
-
}
|
391
|
-
}
|
392
|
-
});
|
393
|
-
}
|
394
|
-
else if (this.selectedFieldName != null) {
|
395
|
-
if (el[this.hasChildField] == true && el[this.selectedFieldName] == true) {
|
396
|
-
if ((this.checkParents == false && this.checkChilds == false) || this.checkChilds == false) {
|
397
|
-
//select parent when check child and check parent is false TODO check this Action
|
398
|
-
this.selectItem(el);
|
399
|
-
}
|
400
|
-
this.open(el);
|
401
|
-
}
|
402
|
-
else if (el[this.selectedFieldName] == true) {
|
403
|
-
this.selectItem(el);
|
404
|
-
this.isSelectedItem = true;
|
405
|
-
}
|
406
|
-
}
|
407
|
-
});
|
408
|
-
}
|
409
|
-
else {
|
410
|
-
this.itemRow = this.listLoad.filter((c) => c.requestId === _data.data.requestId)[0];
|
411
|
-
this.listLoad = this.listLoad.filter((c) => c.requestId !== _data.data.requestId);
|
412
|
-
this.itemRow.loaded = true;
|
413
|
-
if (this.itemRow !== undefined) {
|
414
|
-
this.hideLoading(this.itemRow);
|
415
|
-
const result = _data.data.result;
|
416
|
-
if (this.list.length !== 0) {
|
417
|
-
if (this.itemRow[this.childField] && this.itemRow[this.childField].length > 0) {
|
418
|
-
result.forEach((el) => {
|
419
|
-
el.disabledCheckBox = this.selectableField != '' ? (el[this.selectableField] ? el[this.selectableField] : false) : false;
|
420
|
-
// el.disabledCheckBox = this.selectableField != '' ? el[this.selectableField] : false;
|
421
|
-
this.itemRow[this.childField][this.itemRow[this.childField].length] = el;
|
422
|
-
});
|
423
|
-
}
|
424
|
-
else {
|
425
|
-
this.itemRow[this.childField] = result;
|
426
|
-
}
|
427
|
-
for (let i = 0; i < result.length; i++) {
|
428
|
-
result[i].disabledCheckBox =
|
429
|
-
this.selectableField != '' ? (result[i][this.selectableField] ? result[i][this.selectableField] : false) : false;
|
430
|
-
if (this.selectionLevel == 'nodes' && result[i][this.hasChildField] == true) {
|
431
|
-
result[i].disabledCheckBox = true;
|
432
|
-
}
|
433
|
-
if (this.selectionLevel == 'parents' && result[i][this.hasChildField] == false) {
|
434
|
-
result[i].disabledCheckBox = true;
|
435
|
-
}
|
436
|
-
// if (this.selectionMode !== 'single' && (this.selectNodesRecursive == 'all' || this.selectNodesRecursive == 'childs')) {
|
437
|
-
if (this.selectionMode !== 'single' && this.checkChilds == true) {
|
438
|
-
result[i].select = this.itemRow.select === (undefined || null) ? false : this.itemRow.select;
|
439
|
-
if (this.itemRow.select === true && this.selectionMode == 'multiple' && result[i][this.hasChildField] === false) {
|
440
|
-
this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== result[i][this.keyField]);
|
441
|
-
this.selectedItems.push(result[i]);
|
442
|
-
}
|
443
|
-
else if (this.itemRow.select === true && this.selectionMode == 'multiple' && result[i][this.hasChildField] === true) {
|
444
|
-
this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== result[i][this.keyField]);
|
445
|
-
this.selectedParents.push(result[i]);
|
446
|
-
}
|
447
|
-
}
|
448
|
-
else {
|
449
|
-
result[i].select = false;
|
450
|
-
}
|
451
|
-
result[i].parentNode = this.itemRow;
|
452
|
-
if (this.seletedKeyFields.length > 0) {
|
453
|
-
this.seletedKeyFields.forEach((n) => {
|
454
|
-
if (n.includes(result[i][this.keyField])) {
|
455
|
-
if (result[i][this.hasChildField] == true) {
|
456
|
-
this.levelCount = 0;
|
457
|
-
this.getLevel(result[i]).then((resLevel) => {
|
458
|
-
if (this.checkParents == false && this.checkChilds == false && n.length == this.levelCount) {
|
459
|
-
//select parent when check child and check parent is false TODO check this Action
|
460
|
-
this.selectItem(result[i]);
|
461
|
-
}
|
462
|
-
this.open(result[i]);
|
463
|
-
});
|
464
|
-
}
|
465
|
-
else {
|
466
|
-
this.selectItem(result[i]);
|
467
|
-
this.isSelectedItem = true;
|
468
|
-
}
|
469
|
-
}
|
470
|
-
});
|
471
|
-
}
|
472
|
-
else if (this.selectedFieldName != null) {
|
473
|
-
if (result[i][this.hasChildField] == true && result[i][this.selectedFieldName] == true) {
|
474
|
-
if (this.checkParents == false && this.checkChilds == false) {
|
475
|
-
//select parent when check child and check parent is false TODO check this Action
|
476
|
-
this.selectItem(result[i]);
|
477
|
-
}
|
478
|
-
this.open(result[i]);
|
479
|
-
}
|
480
|
-
else if (result[i][this.selectedFieldName] == true) {
|
481
|
-
this.selectItem(result[i]);
|
482
|
-
this.isSelectedItem = true;
|
483
|
-
}
|
484
|
-
}
|
485
|
-
}
|
486
|
-
this.itemRow.loaded = true;
|
487
|
-
}
|
488
|
-
}
|
489
|
-
}
|
490
|
-
if (this.isSelectedItem == true && !this.loced) {
|
491
|
-
this.loced = true;
|
492
|
-
this.seletedKeyFieldsChanged.emit({
|
493
|
-
component: this,
|
494
|
-
// value: this.makeNode(item),
|
495
|
-
htmlElement: this.ref.nativeElement
|
496
|
-
});
|
497
|
-
}
|
498
|
-
});
|
499
|
-
}
|
500
|
-
ngAfterViewInit() {
|
501
|
-
if (this.selectionMode !== 'single') {
|
502
|
-
this.showSelectBox = true;
|
503
|
-
}
|
504
|
-
this.showContextMenu = true;
|
505
|
-
}
|
506
|
-
// onItemClick(e, v) {
|
507
|
-
// }
|
508
|
-
onDragStart(e, v) {
|
509
|
-
if (!this.lockedDrag) {
|
510
|
-
this.itemDrag = v;
|
511
|
-
this.onItemDrag.emit(v);
|
512
|
-
}
|
513
|
-
e.stopImmediatePropagation();
|
514
|
-
}
|
515
|
-
onDragEnd(e, v) {
|
516
|
-
if (!this.lockedDrag) {
|
517
|
-
this.itemDrop = v;
|
518
|
-
}
|
519
|
-
e.stopImmediatePropagation();
|
520
|
-
}
|
521
|
-
drop(e) {
|
522
|
-
// this.onItemDrop.emit(this.itemDrop);
|
523
|
-
if (!this.lockedDrag) {
|
524
|
-
this.validDrop = true;
|
525
|
-
this.sameChilde(this.itemDrag, this.itemDrop);
|
526
|
-
if (this.validDrop && this.itemDrag[this.keyField] !== this.itemDrop[this.keyField] && this.itemDrag.parentNode !== this.itemDrop) {
|
527
|
-
const movedEvent = new AXTreeViewItemMovedEvent();
|
528
|
-
movedEvent.source = this.makeNode(this.itemDrag);
|
529
|
-
movedEvent.target = this.makeNode(this.itemDrop);
|
530
|
-
this.lockedDrag = true;
|
531
|
-
this.showLoading(this.itemDrag);
|
532
|
-
this.showLoading(this.itemDrop);
|
533
|
-
movedEvent.resolve = (value) => {
|
534
|
-
this.hideLoading(this.itemDrag);
|
535
|
-
this.hideLoading(this.itemDrop);
|
536
|
-
if (value) {
|
537
|
-
this.dragDropItem(this.itemDrag, this.itemDrop);
|
538
|
-
}
|
539
|
-
else {
|
540
|
-
this.lockedDrag = false;
|
541
|
-
}
|
542
|
-
};
|
543
|
-
this.onItemMoved.emit(movedEvent);
|
544
|
-
}
|
545
|
-
}
|
546
|
-
e.stopImmediatePropagation();
|
547
|
-
}
|
548
|
-
sameChilde(parent, child) {
|
549
|
-
if (parent[this.childField] && parent[this.childField].length > 0) {
|
550
|
-
for (let index = 0; index < parent[this.childField].length; index++) {
|
551
|
-
if (parent[this.childField][index][this.keyField] == child[this.keyField]) {
|
552
|
-
this.validDrop = false;
|
553
|
-
}
|
554
|
-
if (parent[this.childField][index][this.childField] && parent[this.childField][index][this.childField].length > 0) {
|
555
|
-
this.sameChilde(parent[this.childField][index], child);
|
556
|
-
}
|
557
|
-
}
|
558
|
-
}
|
559
|
-
else if (parent[this.keyField] == child[this.keyField]) {
|
560
|
-
this.validDrop = false;
|
561
|
-
}
|
562
|
-
}
|
563
|
-
dragDropItem(itemChild, itemParent) {
|
564
|
-
if (this.selectionLevel == 'nodes') {
|
565
|
-
itemParent.disabledCheckBox = true;
|
566
|
-
}
|
567
|
-
if (itemChild.parentNode) {
|
568
|
-
itemChild.parentNode[this.childField] = itemChild.parentNode[this.childField].filter((c) => c[this.keyField] !== itemChild[this.keyField]);
|
569
|
-
}
|
570
|
-
else {
|
571
|
-
this.list = this.list.filter((c) => c[this.keyField] !== itemChild[this.keyField]);
|
572
|
-
}
|
573
|
-
itemChild.parentNode = itemParent;
|
574
|
-
if (itemParent[this.childField] && itemParent[this.childField].length > 0) {
|
575
|
-
itemParent[this.childField][itemParent[this.childField].length] = itemChild;
|
576
|
-
}
|
577
|
-
else {
|
578
|
-
itemParent[this.childField] = [];
|
579
|
-
itemParent[this.childField][0] = itemChild;
|
580
|
-
if (itemParent[this.hasChildField] === true) {
|
581
|
-
this.toggleNode(itemParent);
|
582
|
-
}
|
583
|
-
else {
|
584
|
-
itemParent.toggle = !itemParent.toggle;
|
585
|
-
itemParent.loaded = true;
|
586
|
-
}
|
587
|
-
itemParent[this.hasChildField] = true;
|
588
|
-
}
|
589
|
-
if (itemChild.parentNode && this.selectionMode !== 'single') {
|
590
|
-
this.changeParentSelect(itemChild.parentNode);
|
591
|
-
}
|
592
|
-
this.lockedDrag = false;
|
593
|
-
}
|
594
|
-
listChange(field, value) {
|
595
|
-
for (let index = 0; index < this.list.length; index++) {
|
596
|
-
this.changeChiled(this.list[index], field, value);
|
597
|
-
}
|
598
|
-
this.loadAllChildren = false;
|
599
|
-
}
|
600
|
-
changeChiled(item, field, value) {
|
601
|
-
if (field === 'toggle' && (item.loaded === false || item.loaded === undefined)) {
|
602
|
-
if (this.loadAllChildren === true) {
|
603
|
-
this.toggleNode(item);
|
604
|
-
item[field] = value;
|
605
|
-
}
|
606
|
-
}
|
607
|
-
else {
|
608
|
-
item[field] = value;
|
609
|
-
if (field === 'select' && item[this.hasChildField] === false && value === true) {
|
610
|
-
this.selectedItems.push(item);
|
611
|
-
}
|
612
|
-
if (field === 'select' && item[this.hasChildField] === true && value === true) {
|
613
|
-
this.selectedParents.push(item);
|
614
|
-
}
|
615
|
-
}
|
616
|
-
if (field === 'select') {
|
617
|
-
item.indeterminate = false;
|
618
|
-
}
|
619
|
-
if (item[this.hasChildField] === true && item[this.childField] && item[this.childField].length > 0) {
|
620
|
-
item[this.childField].forEach((element) => {
|
621
|
-
this.changeChiled(element, field, value);
|
622
|
-
});
|
623
|
-
}
|
624
|
-
}
|
625
|
-
showLoading(item) {
|
626
|
-
item.loading = true;
|
627
|
-
}
|
628
|
-
hideLoading(item) {
|
629
|
-
if (item != null) {
|
630
|
-
item.loading = false;
|
631
|
-
}
|
632
|
-
}
|
633
|
-
openAll(loadAll = false) {
|
634
|
-
// if (loadAll) {
|
635
|
-
// this.loadAllChildren = true;
|
636
|
-
// this.listChange('toggle', true);
|
637
|
-
//} else {
|
638
|
-
this.listChange('toggle', true);
|
639
|
-
// }
|
640
|
-
}
|
641
|
-
selectItem(item) {
|
642
|
-
if (item['select'] != true) {
|
643
|
-
this.internalSelectItem(item, false);
|
644
|
-
}
|
645
|
-
}
|
646
|
-
unSelectItem(item) {
|
647
|
-
if (item['select'] == true) {
|
648
|
-
this.internalSelectItem(item, false);
|
649
|
-
}
|
650
|
-
}
|
651
|
-
open(item) {
|
652
|
-
if (item['toggle'] !== true) {
|
653
|
-
this.toggleNode(item, true);
|
654
|
-
}
|
655
|
-
}
|
656
|
-
scrolIntoView(item) {
|
657
|
-
let element = document.querySelector(`li[data-id='${item[this.keyField]}']`);
|
658
|
-
element.scrollIntoView();
|
659
|
-
}
|
660
|
-
closeAll() {
|
661
|
-
this.listChange('toggle', false);
|
662
|
-
}
|
663
|
-
selectAll() {
|
664
|
-
if (this.selectionMode !== 'single') {
|
665
|
-
this.listChange('select', true);
|
666
|
-
}
|
667
|
-
}
|
668
|
-
unSelectAll() {
|
669
|
-
if (this.selectionMode !== 'single') {
|
670
|
-
this.listChange('select', false);
|
671
|
-
}
|
672
|
-
this.selectedItems = [];
|
673
|
-
}
|
674
|
-
getSelectedNodes() {
|
675
|
-
const selectItemsNode = [];
|
676
|
-
this.selectedItems.forEach((e) => {
|
677
|
-
selectItemsNode.push(this.makeNode(e));
|
678
|
-
});
|
679
|
-
return selectItemsNode;
|
680
|
-
}
|
681
|
-
getSelectedParents() {
|
682
|
-
const selectItemsParent = [];
|
683
|
-
this.selectedParents.forEach((e) => {
|
684
|
-
selectItemsParent.push(this.makeNode(e));
|
685
|
-
});
|
686
|
-
return selectItemsParent;
|
687
|
-
}
|
688
|
-
getParentsId(item) {
|
689
|
-
let keyFields = [];
|
690
|
-
keyFields.push(item[this.keyField]);
|
691
|
-
if (item.parentNode) {
|
692
|
-
keyFields.push(...this.getParentsId(item.parentNode));
|
693
|
-
}
|
694
|
-
return keyFields;
|
695
|
-
}
|
696
|
-
getSelectedKeyFields() {
|
697
|
-
let keyFields = [];
|
698
|
-
this.selectedItems.forEach((elm) => {
|
699
|
-
var Ids = this.getParentsId(elm);
|
700
|
-
if (Ids) {
|
701
|
-
keyFields.push(Ids);
|
702
|
-
}
|
703
|
-
});
|
704
|
-
return keyFields;
|
705
|
-
}
|
706
|
-
getSelectedKeyFieldsParents() {
|
707
|
-
let keyFields = [];
|
708
|
-
this.selectedParents.forEach((elm) => {
|
709
|
-
var Ids = this.getParentsId(elm);
|
710
|
-
if (Ids) {
|
711
|
-
keyFields.push(Ids);
|
712
|
-
}
|
713
|
-
});
|
714
|
-
return keyFields;
|
715
|
-
}
|
716
|
-
}
|
717
|
-
AXTreeViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXTreeViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
718
|
-
AXTreeViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: { selectionMode: "selectionMode", selectionLevel: "selectionLevel", selectedFieldName: "selectedFieldName", checkParents: "checkParents", checkChilds: "checkChilds", seletedKeyFields: "seletedKeyFields", keyField: "keyField", hasChildField: "hasChildField", bordered: "bordered", lazyLoading: "lazyLoading", allowDrag: "allowDrag", size: "size", disabled: "disabled", selectableField: "selectableField", contextMenuItems: "contextMenuItems" }, outputs: { selectionChanged: "selectionChanged", seletedKeyFieldsChanged: "seletedKeyFieldsChanged", onItemOpening: "onItemOpening", onItemClick: "onItemClick", onItemClosing: "onItemClosing", onItemDrag: "onItemDrag", onItemMoved: "onItemMoved", onContextMenuItemClick: "onContextMenuItemClick" }, queries: [{ propertyName: "nodeTemplate", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ul class=\"ax treeview {{size}}\">\n <ng-template #recursiveList let-list>\n <ng-container *ngFor=\"let item of list\">\n <li class=\"active {{item[hasChildField] ? '':'node'}}\" [class.bordered]=\"bordered\"\n [class.selected]=\"item.select\" [draggable]=\"allowDrag\" (dragstart)=\"onDragStart($event, item)\"\n [attr.data-id]=\"item[keyField]\" (dragleave)=\"onDragEnd($event,item)\" (dragend)=drop($event)>\n <div [class.disabled]=\"disabled\" axContextMenu [contextDataItem]=\"item\"\n [contextMenuItems]=\"contextMenuItems\" [contextMenu]=\"menu\"\n (onContextMenuItemClick)=\"handleOnContextMenuItem($event)\"\n style=\"display: flex; cursor: pointer;align-items: center;\">\n <div class=\"start-side\">\n <div *ngIf=\"item[hasChildField]\" class=\"collapse-icon\"\n (click)=\"handleOnNodeClick($event,item,true)\">\n <i class=\"fal\"\n [ngClass]=\"{'fa-minus': !!item.toggle , 'fa-plus': !item.toggle , 'fa-spinner fa-spin':item.loading }\"></i>\n </div>\n\n <ax-check-box *ngIf=\"showSelectBox\" [disabled]=\"item.disabledCheckBox || disabled\" [size]=\"size\"\n [indeterminate]=\"true\" [value]=\"item.select\" (onClick)=\"internalSelectItem(item)\">\n </ax-check-box>\n\n\n </div>\n <div class=\"text-list\" (click)=\"nodeClick(item)\" (dblclick)=\"itemdbClick($event,item)\">\n <ng-container *ngIf=\"nodeTemplate; else elseTemplate\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context:{ $implicit: item }\"></ng-container>\n </ng-container>\n <ng-template #elseTemplate>\n {{item.title}}\n </ng-template>\n </div>\n </div>\n <ul *ngIf=\"item.loading\">\n <i class=\"far \"></i>\n </ul>\n <ul class=\"child\" *ngIf=\"item.toggle\" style=\"background-color: white !important;\">\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: item.childeren }\">\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: list }\"></ng-container>\n</ul>\n\n<ax-context-menu #menu></ax-context-menu>", components: [{ type: i1.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["readonly", "disabled", "size", "label", "tabIndex", "indeterminate", "value"], outputs: ["onValueChanged", "valueChange", "onClick"] }, { type: i2.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["size", "width", "items"], outputs: ["onItemClick", "onClosed"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.AXContextMenuDirective, selector: "[axContextMenu]", inputs: ["contextMenu", "contextDataItem", "contextMenuItems", "rtl"], outputs: ["onContextMenuItemClick"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], encapsulation: i0.ViewEncapsulation.None });
|
719
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXTreeViewComponent, decorators: [{
|
720
|
-
type: Component,
|
721
|
-
args: [{ selector: 'ax-tree-view', encapsulation: ViewEncapsulation.None, template: "<ul class=\"ax treeview {{size}}\">\n <ng-template #recursiveList let-list>\n <ng-container *ngFor=\"let item of list\">\n <li class=\"active {{item[hasChildField] ? '':'node'}}\" [class.bordered]=\"bordered\"\n [class.selected]=\"item.select\" [draggable]=\"allowDrag\" (dragstart)=\"onDragStart($event, item)\"\n [attr.data-id]=\"item[keyField]\" (dragleave)=\"onDragEnd($event,item)\" (dragend)=drop($event)>\n <div [class.disabled]=\"disabled\" axContextMenu [contextDataItem]=\"item\"\n [contextMenuItems]=\"contextMenuItems\" [contextMenu]=\"menu\"\n (onContextMenuItemClick)=\"handleOnContextMenuItem($event)\"\n style=\"display: flex; cursor: pointer;align-items: center;\">\n <div class=\"start-side\">\n <div *ngIf=\"item[hasChildField]\" class=\"collapse-icon\"\n (click)=\"handleOnNodeClick($event,item,true)\">\n <i class=\"fal\"\n [ngClass]=\"{'fa-minus': !!item.toggle , 'fa-plus': !item.toggle , 'fa-spinner fa-spin':item.loading }\"></i>\n </div>\n\n <ax-check-box *ngIf=\"showSelectBox\" [disabled]=\"item.disabledCheckBox || disabled\" [size]=\"size\"\n [indeterminate]=\"true\" [value]=\"item.select\" (onClick)=\"internalSelectItem(item)\">\n </ax-check-box>\n\n\n </div>\n <div class=\"text-list\" (click)=\"nodeClick(item)\" (dblclick)=\"itemdbClick($event,item)\">\n <ng-container *ngIf=\"nodeTemplate; else elseTemplate\">\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context:{ $implicit: item }\"></ng-container>\n </ng-container>\n <ng-template #elseTemplate>\n {{item.title}}\n </ng-template>\n </div>\n </div>\n <ul *ngIf=\"item.loading\">\n <i class=\"far \"></i>\n </ul>\n <ul class=\"child\" *ngIf=\"item.toggle\" style=\"background-color: white !important;\">\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: item.childeren }\">\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: list }\"></ng-container>\n</ul>\n\n<ax-context-menu #menu></ax-context-menu>" }]
|
722
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { nodeTemplate: [{
|
723
|
-
type: ContentChild,
|
724
|
-
args: [TemplateRef, { static: true }]
|
725
|
-
}], _contentDataSource: [{
|
726
|
-
type: ContentChild,
|
727
|
-
args: [AXDataSourceComponent, { static: true }]
|
728
|
-
}], selectionMode: [{
|
729
|
-
type: Input
|
730
|
-
}], selectionLevel: [{
|
731
|
-
type: Input
|
732
|
-
}], selectedFieldName: [{
|
733
|
-
type: Input
|
734
|
-
}], checkParents: [{
|
735
|
-
type: Input
|
736
|
-
}], checkChilds: [{
|
737
|
-
type: Input
|
738
|
-
}], seletedKeyFields: [{
|
739
|
-
type: Input
|
740
|
-
}], keyField: [{
|
741
|
-
type: Input
|
742
|
-
}], hasChildField: [{
|
743
|
-
type: Input
|
744
|
-
}], bordered: [{
|
745
|
-
type: Input
|
746
|
-
}], lazyLoading: [{
|
747
|
-
type: Input
|
748
|
-
}], allowDrag: [{
|
749
|
-
type: Input
|
750
|
-
}], size: [{
|
751
|
-
type: Input
|
752
|
-
}], disabled: [{
|
753
|
-
type: Input
|
754
|
-
}], selectionChanged: [{
|
755
|
-
type: Output
|
756
|
-
}], seletedKeyFieldsChanged: [{
|
757
|
-
type: Output
|
758
|
-
}], onItemOpening: [{
|
759
|
-
type: Output
|
760
|
-
}], onItemClick: [{
|
761
|
-
type: Output
|
762
|
-
}], onItemClosing: [{
|
763
|
-
type: Output
|
764
|
-
}], onItemDrag: [{
|
765
|
-
type: Output
|
766
|
-
}], onItemMoved: [{
|
767
|
-
type: Output
|
768
|
-
}], selectableField: [{
|
769
|
-
type: Input
|
770
|
-
}], onContextMenuItemClick: [{
|
771
|
-
type: Output
|
772
|
-
}], contextMenuItems: [{
|
773
|
-
type: Input
|
774
|
-
}] } });
|
775
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb21wb25lbnRzL3NyYy9saWIvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29tcG9uZW50cy9zcmMvbGliL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQWUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7O0FBSXhELE1BQU0sT0FBTyxjQUFjO0lBQTNCO1FBRUUsYUFBUSxHQUF1QixJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFFMUQsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLGtCQUFrQjtDQVE5QjtBQUVELE1BQU0sT0FBTyx3QkFBd0I7Q0FJcEM7QUFFRCxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsWUFBNEI7Q0FFaEY7QUFFRCxNQUFNLE9BQU8sc0NBQXVDLFNBQVEsWUFBNEI7Q0FFdkY7QUFFRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBdUI7Q0FLL0Q7QUFPRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZUFBZTtJQWtHdEQsWUFBb0IsR0FBZTtRQUNqQyxLQUFLLEVBQUUsQ0FBQztRQURVLFFBQUcsR0FBSCxHQUFHLENBQVk7UUExRm5DLGtCQUFhLEdBQTBC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O2dCQUlOLGdCQUFnQjtzQkFEZixNQUFNO2dCQUlQLHVCQUF1QjtzQkFEdEIsTUFBTTtnQkFJUCxhQUFhO3NCQURaLE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNO2dCQUlQLGFBQWE7c0JBRFosTUFBTTtnQkFJUCxVQUFVO3NCQURULE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNO2dCQUlQLGVBQWU7c0JBRGQsS0FBSztnQkFJTixzQkFBc0I7c0JBRHJCLE1BQU07Z0JBb0JQLGdCQUFnQjtzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQsIENvbnRlbnRDaGlsZCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGEtc291cmNlL2RhdGFzb3VyY2UuY29tcG9uZW50JztcbmltcG9ydCB7IEFYRGF0YUV2ZW50LCBBWEh0bWxFdmVudCwgQVhWYWx1ZUV2ZW50IH0gZnJvbSAnLi4vYmFzZS9ldmVudHMuY2xhc3MnO1xuaW1wb3J0IHsgQVhCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS9lbGVtZW50LmNsYXNzJztcbmltcG9ydCB7IEFYQ29udGV4dE1lbnVJdGVtQ2xpY2tFdmVudCwgQVhDb250ZXh0TWVudVByb21pc2VGdW5jdGlvbiwgQVhDb250ZXh0TWVudUZ1bmN0aW9uIH0gZnJvbSAnLi4vY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQVhNZW51SXRlbSB9IGZyb20gJ0BhY29yZXgvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBBWFRyZWVWaWV3Tm9kZSB7XG4gIGNoaWxkcmVuOiBBWFRyZWVWaWV3Tm9kZVtdO1xuICBpdGVtRGF0YTogQVhUcmVlVmlld0l0ZW1EYXRhID0gbmV3IEFYVHJlZVZpZXdJdGVtRGF0YSgpO1xuICBwYXJlbnQ6IEFYVHJlZVZpZXdOb2RlO1xufVxuXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld0l0ZW1EYXRhIHtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG4gIGtleTogc3RyaW5nO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgb3BlbjogYm9vbGVhbjtcbiAgaGFzQ2hpbGQ6IGJvb2xlYW47XG4gIGl0ZW06IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIEFYVHJlZVZpZXdJdGVtTW92ZWRFdmVudCB7XG4gIHNvdXJjZTogQVhUcmVlVmlld05vZGU7XG4gIHRhcmdldDogQVhUcmVlVmlld05vZGU7XG4gIHJlc29sdmU6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEFYVHJlZVZpZXdzZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXh0ZW5kcyBBWFZhbHVlRXZlbnQ8QVhUcmVlVmlld05vZGU+IHtcbiAgY29tcG9uZW50OiBBWFRyZWVWaWV3Q29tcG9uZW50O1xufVxuXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld3NlbGV0ZWRLZXlGaWVsZHNDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBBWFZhbHVlRXZlbnQ8QVhUcmVlVmlld05vZGU+IHtcbiAgY29tcG9uZW50OiBBWFRyZWVWaWV3Q29tcG9uZW50O1xufVxuXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld0l0ZW1DbGljayBleHRlbmRzIEFYSHRtbEV2ZW50PE1vdXNlRXZlbnQ+IHtcbiAgY29tcG9uZW50OiBBWFRyZWVWaWV3Q29tcG9uZW50O1xuICBpdGVtOiBhbnk7XG4gIGZsYWc6IGJvb2xlYW47XG4gIGNhbmNlbD86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXRyZWUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBBWFRyZWVWaWV3Q29tcG9uZW50IGV4dGVuZHMgQVhCYXNlQ29tcG9uZW50IHtcbiAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IHRydWUgfSlcbiAgbm9kZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoQVhEYXRhU291cmNlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIF9jb250ZW50RGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdGlvbk1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdGlvbkxldmVsOiAnYWxsJyB8ICdub2RlcycgfCAncGFyZW50cycgPSAnYWxsJztcblxuICAvLyB1c2VyIGNhbiBzZXQgb25seSBvbmUgb2YgdGhpcyAvc2VsZWN0ZWRGaWVsZE5hbWUgb3IgL3NlbGV0ZWRLZXlGaWVsZHNcbiAgLy9zZWxldGVkS2V5RmllbGRzIHNldCBpZCBvZiBub2RlcyBhbmQgcGFyZW50c1xuICAvL3NlbGVjdGVkRmllbGROYW1lIHNldCBuYW1lIG9mIGZpZWxkcyB0aGF0IHNldCBzZWxlY3Rlc1xuICBASW5wdXQoKVxuICBzZWxlY3RlZEZpZWxkTmFtZTogc3RyaW5nID0gbnVsbDtcblxuICAvLyBASW5wdXQoKVxuICAvLyBzZWxlY3ROb2Rlc1JlY3Vyc2l2ZTogJ2FsbCcgfCAncGFyZW50cycgfCAnY2hpbGRzJyB8ICdub25lJyA9ICdhbGwnOyAvL2xlYWZcblxuICBASW5wdXQoKVxuICBjaGVja1BhcmVudHM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGNoZWNrQ2hpbGRzOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzZWxldGVkS2V5RmllbGRzOiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGtleUZpZWxkOiBzdHJpbmcgPSAnaWQnO1xuXG4gIEBJbnB1dCgpXG4gIGhhc0NoaWxkRmllbGQ6IHN0cmluZyA9ICdjaGlsZCc7XG5cbiAgQElucHV0KClcbiAgYm9yZGVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBsYXp5TG9hZGluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgYWxsb3dEcmFnOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2l6ZTogJ21kJyB8ICdzbScgPSAnbWQnO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYVHJlZVZpZXdzZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWFRyZWVWaWV3c2VsZWN0aW9uQ2hhbmdlZEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBzZWxldGVkS2V5RmllbGRzQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYVHJlZVZpZXdzZWxldGVkS2V5RmllbGRzQ2hhbmdlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhUcmVlVmlld3NlbGVjdGlvbkNoYW5nZWRFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgb25JdGVtT3BlbmluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25JdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxBWFRyZWVWaWV3SXRlbUNsaWNrPiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhUcmVlVmlld0l0ZW1DbGljaz4oKTtcblxuICBAT3V0cHV0KClcbiAgb25JdGVtQ2xvc2luZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25JdGVtRHJhZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25JdGVtTW92ZWQ6IEV2ZW50RW1pdHRlcjxBWFRyZWVWaWV3SXRlbU1vdmVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWFRyZWVWaWV3SXRlbU1vdmVkRXZlbnQ+KCk7XG5cbiAgQElucHV0KClcbiAgc2VsZWN0YWJsZUZpZWxkOiBzdHJpbmcgPSAnJztcblxuICBAT3V0cHV0KClcbiAgb25Db250ZXh0TWVudUl0ZW1DbGljazogRXZlbnRFbWl0dGVyPEFYQ29udGV4dE1lbnVJdGVtQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYQ29udGV4dE1lbnVJdGVtQ2xpY2tFdmVudD4oKTtcblxuICBzaG93U2VsZWN0Qm94OiBib29sZWFuID0gZmFsc2U7XG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbGlzdDogYW55W10gPSBbXTtcbiAgaXRlbVJvdzogYW55O1xuICBzZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZFBhcmVudHM6IGFueVtdID0gW107XG4gIGxvYWRBbGxDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBsaXN0TG9hZDogYW55W10gPSBbXTtcbiAgaXRlbURyb3A6IGFueTtcbiAgaXRlbURyYWc6IGFueTtcbiAgdmFsaWREcm9wOiBib29sZWFuID0gdHJ1ZTtcbiAgbG9ja2VkRHJhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBjaGlsZEZpZWxkOiBzdHJpbmcgPSAnY2hpbGRlcmVuJztcbiAgc2hvd0NvbnRleHRNZW51OiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VsZWN0ZWRJdGVtOiBib29sZWFuID0gZmFsc2U7XG4gIGxvY2VkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGNvbnRleHRNZW51SXRlbXM6IEFYTWVudUl0ZW1bXSB8IEFYQ29udGV4dE1lbnVQcm9taXNlRnVuY3Rpb24gfCBBWENvbnRleHRNZW51RnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaGFuZGxlT25Db250ZXh0TWVudUl0ZW0oZTogQVhDb250ZXh0TWVudUl0ZW1DbGlja0V2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLm9uQ29udGV4dE1lbnVJdGVtQ2xpY2suZW1pdChlKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5saXN0ID0gW107XG4gICAgdGhpcy5fY29udGVudERhdGFTb3VyY2UuZmV0Y2gobnVsbCk7XG4gIH1cblxuICBpbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbSwgdXNlckNoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAoaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSBmYWxzZSB8fCB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICBpdGVtLnNlbGVjdCA9ICFpdGVtLnNlbGVjdDtcbiAgICAgIGlmIChpdGVtLnBhcmVudE5vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJyAmJiB0aGlzLmNoZWNrUGFyZW50cyA9PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlUGFyZW50U2VsZWN0KGl0ZW0ucGFyZW50Tm9kZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5zZWxlY3QgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZS5zZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPT0gaXRlbVt0aGlzLmtleUZpZWxkXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0uc2VsZWN0ID0gIWl0ZW0uc2VsZWN0O1xuXG4gICAgICBpZiAoaXRlbS5wYXJlbnROb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJyAmJiB0aGlzLmNoZWNrUGFyZW50cyA9PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlUGFyZW50U2VsZWN0KGl0ZW0ucGFyZW50Tm9kZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlwbGUnICYmIHRoaXMuY2hlY2tDaGlsZHMgPT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZUNoaWxkU2VsZWN0KGl0ZW0sIGl0ZW0uc2VsZWN0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW0uc2VsZWN0ID09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzID0gdGhpcy5zZWxlY3RlZFBhcmVudHMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBpdGVtW3RoaXMua2V5RmllbGRdKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cy5wdXNoKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgIGUuc2VsZWN0ID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMgPSBbXTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cyA9IHRoaXMuc2VsZWN0ZWRQYXJlbnRzLmZpbHRlcigoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPT0gaXRlbVt0aGlzLmtleUZpZWxkXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh1c2VyQ2hhbmdlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgdmFsdWU6IHRoaXMubWFrZU5vZGUoaXRlbSksXG4gICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1ha2VOb2RlKGl0ZW0sIGFkZENoaWxkcmVuOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG5vZGU6IEFYVHJlZVZpZXdOb2RlID0gbmV3IEFYVHJlZVZpZXdOb2RlKCk7XG4gICAgaWYgKGFkZENoaWxkcmVuKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gaXRlbVt0aGlzLmNoaWxkRmllbGRdID09PSB1bmRlZmluZWQgPyBbXSA6IGl0ZW1bdGhpcy5jaGlsZEZpZWxkXT8ubWFwKChtKSA9PiB0aGlzLm1ha2VOb2RlKG0pKTtcbiAgICB9XG4gICAgbm9kZS5pdGVtRGF0YS5kaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWUgPyBpdGVtLmRpc2FibGVkIDogZmFsc2U7XG4gICAgbm9kZS5pdGVtRGF0YS5vcGVuID0gaXRlbS5vcGVuID09PSB0cnVlID8gaXRlbS5vcGVuIDogZmFsc2U7XG4gICAgbm9kZS5pdGVtRGF0YS5rZXkgPSBpdGVtW3RoaXMua2V5RmllbGRdO1xuXG4gICAgY29uc3QgYyA9IFtdO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKHZhciBrIGluIGl0ZW0pIHtcbiAgICAgIGkgPSBpICsgMTtcbiAgICAgIGlmIChcbiAgICAgICAgayAhPSAnc2VsZWN0JyAmJlxuICAgICAgICBrICE9ICdoYXNDaGlsZCcgJiZcbiAgICAgICAgayAhPSAnbG9hZGluZycgJiZcbiAgICAgICAgayAhPSAncmVxdWVzdElkJyAmJlxuICAgICAgICBrICE9ICdkaXNhYmxlZCcgJiZcbiAgICAgICAgayAhPSAnb3BlbicgJiZcbiAgICAgICAgayAhPSAncGFyZW50Tm9kZScgJiZcbiAgICAgICAgayAhPSAndG9nZ2xlJyAmJlxuICAgICAgICBrICE9ICdsb2FkZWQnICYmXG4gICAgICAgIGsgIT0gJ2luZGV0ZXJtaW5hdGUnICYmXG4gICAgICAgIGsgIT0gdGhpcy5jaGlsZEZpZWxkXG4gICAgICApIHtcbiAgICAgICAgLy9jLnB1c2goeyBrOiBpdGVtW2tdIH0pO1xuICAgICAgICBjW2tdID0gaXRlbVtrXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlLml0ZW1EYXRhLml0ZW0gPSBjOyAvL1RPIERPXG4gICAgbm9kZS5pdGVtRGF0YS5zZWxlY3RlZCA9IGl0ZW0uc2VsZWN0ID09PSB0cnVlID8gaXRlbS5zZWxlY3QgOiBmYWxzZTtcbiAgICBub2RlLml0ZW1EYXRhLmluZGV0ZXJtaW5hdGUgPSBpdGVtLnNlbGVjdCA9PT0gbnVsbCA/IHRydWUgOiBmYWxzZTtcbiAgICBub2RlLml0ZW1EYXRhLmhhc0NoaWxkID0gaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdO1xuICAgIG5vZGUucGFyZW50ID0gaXRlbS5wYXJlbnROb2RlID09PSB1bmRlZmluZWQgPyBudWxsIDogdGhpcy5tYWtlTm9kZShpdGVtLnBhcmVudE5vZGUsIGZhbHNlKTtcbiAgICBpZiAobm9kZS5wYXJlbnQgIT0gbnVsbCkge1xuICAgICAgKG5vZGUucGFyZW50IGFzIGFueSkuc2VsZWN0UGFyZW50ID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5wYXJlbnROb2RlWydzZWxlY3QnXSAhPSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbS5wYXJlbnROb2RlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIChub2RlLnBhcmVudCBhcyBhbnkpLnVuU2VsZWN0UGFyZW50ID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5wYXJlbnROb2RlWydzZWxlY3QnXSA9PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbS5wYXJlbnROb2RlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4gIT0gbnVsbCAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIChub2RlLmNoaWxkcmVuIGFzIGFueSkuc2VsZWN0Q2hpbGRzID0gKCkgPT4ge1xuICAgICAgICBpdGVtLmNoaWxkZXJlbi5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGVsZW1lbnRbJ3NlbGVjdCddICE9IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxTZWxlY3RJdGVtKGVsZW1lbnQsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgKG5vZGUuY2hpbGRyZW4gYXMgYW55KS51blNlbGVjdENoaWxkcyA9ICgpID0+IHtcbiAgICAgICAgaXRlbS5jaGlsZGVyZW4uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGlmIChlbGVtZW50WydzZWxlY3QnXSA9PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLmludGVybmFsU2VsZWN0SXRlbShlbGVtZW50LCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZUNoaWxkU2VsZWN0KGl0ZW0sIHMpIHtcbiAgICAvLyBpZiAodGhpcy5zZWxlY3ROb2Rlc1JlY3Vyc2l2ZSA9PSAnYWxsJyB8fCB0aGlzLnNlbGVjdE5vZGVzUmVjdXJzaXZlID09ICdjaGlsZHMnKSB7XG4gICAgaWYgKHRoaXMuY2hlY2tDaGlsZHMgPT0gdHJ1ZSkge1xuICAgICAgaXRlbS5zZWxlY3QgPSBzO1xuICAgICAgaWYgKGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gdHJ1ZSAmJiBpdGVtW3RoaXMuY2hpbGRGaWVsZF0gJiYgaXRlbVt0aGlzLmNoaWxkRmllbGRdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaXRlbVt0aGlzLmNoaWxkRmllbGRdLmZvckVhY2goKGVsbSkgPT4ge1xuICAgICAgICAgIGlmIChlbG1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgZWxtLnNlbGVjdCA9IHM7XG5cbiAgICAgICAgICAgIGlmIChzID09PSB0cnVlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMgPSB0aGlzLnNlbGVjdGVkUGFyZW50cy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGVsbVt0aGlzLmtleUZpZWxkXSk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLnB1c2goZWxtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzID0gdGhpcy5zZWxlY3RlZFBhcmVudHMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBlbG1bdGhpcy5rZXlGaWVsZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VDaGlsZFNlbGVjdChlbG0sIHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbG0uc2VsZWN0ID0gcztcbiAgICAgICAgICAgIGlmIChzID09PSB0cnVlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPT0gZWxtW3RoaXMua2V5RmllbGRdKTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goZWxtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGVsbVt0aGlzLmtleUZpZWxkXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0uc2VsZWN0ID0gcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVBhcmVudFNlbGVjdChpdGVtKSB7XG4gICAgLy9pZiAodGhpcy5zZWxlY3ROb2Rlc1JlY3Vyc2l2ZSA9PSAnYWxsJyB8fCB0aGlzLnNlbGVjdE5vZGVzUmVjdXJzaXZlID09ICdwYXJlbnRzJykge1xuICAgIGlmICh0aGlzLmNoZWNrUGFyZW50cykge1xuICAgICAgbGV0IGFsbHNlbGVjdCA9IHRydWU7XG4gICAgICBsZXQgYWxsZGVzZWxlY3QgPSB0cnVlO1xuICAgICAgbGV0IG9uZXNlbGVjdCA9IGZhbHNlO1xuICAgICAgbGV0IGlzaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuXG4gICAgICBpZiAoaXRlbVt0aGlzLmNoaWxkRmllbGRdKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtW3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKGl0ZW1bdGhpcy5jaGlsZEZpZWxkXVtpbmRleF0uc2VsZWN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBhbGxkZXNlbGVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgb25lc2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZW1bdGhpcy5jaGlsZEZpZWxkXVtpbmRleF0uc2VsZWN0ID09PSBmYWxzZSB8fCBpdGVtW3RoaXMuY2hpbGRGaWVsZF1baW5kZXhdLnNlbGVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbGxzZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZW1bdGhpcy5jaGlsZEZpZWxkXVtpbmRleF0uc2VsZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICBpc2luZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgYWxsZGVzZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgICAgIG9uZXNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICBhbGxzZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9uZXNlbGVjdCB8fCAoaXNpbmRldGVybWluYXRlICYmICFhbGxzZWxlY3QpKSB7XG4gICAgICAgIGl0ZW0uc2VsZWN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMgPSB0aGlzLnNlbGVjdGVkUGFyZW50cy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGl0ZW1bdGhpcy5rZXlGaWVsZF0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgICAgaWYgKGFsbHNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgICBpdGVtLnNlbGVjdCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzID0gdGhpcy5zZWxlY3RlZFBhcmVudHMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBpdGVtW3RoaXMua2V5RmllbGRdKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICAgIGlmIChhbGxkZXNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cyA9IHRoaXMuc2VsZWN0ZWRQYXJlbnRzLmZpbHRlcigoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPT0gaXRlbVt0aGlzLmtleUZpZWxkXSk7XG4gICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5wYXJlbnROb2RlICYmIGl0ZW0ucGFyZW50Tm9kZVt0aGlzLmNoaWxkRmllbGRdICYmIGl0ZW0ucGFyZW50Tm9kZVt0aGlzLmNoaWxkRmllbGRdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VQYXJlbnRTZWxlY3QoaXRlbS5wYXJlbnROb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uSXRlbUNsaWNrLnN1YnNjcmliZSgoZGF0YTogQVhUcmVlVmlld0l0ZW1DbGljaykgPT4ge1xuICAgICAgaWYgKCFkYXRhLmNhbmNlbCkge1xuICAgICAgICB0aGlzLnRvZ2dsZU5vZGUoZGF0YS5pdGVtLCBkYXRhLmZsYWcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaXRlbWRiQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT0gJ3NpbmdsZScpIHtcbiAgICAgIHRoaXMuaGFuZGxlT25Ob2RlQ2xpY2soZSwgaXRlbSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlT25Ob2RlQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbSwgZmxhZyA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gIHRoaXMuaW50ZXJuYWxTZWxlY3RJdGVtKGl0ZW0pO1xuICAgIHRoaXMub25JdGVtQ2xpY2suZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBodG1sRXZlbnQ6IGUsXG4gICAgICBpdGVtLFxuICAgICAgZmxhZ1xuICAgIH0pO1xuICB9XG5cbiAgbm9kZUNsaWNrKGl0ZW0pIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChpdGVtW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT0gdHJ1ZSkge1xuICAgICAgdGhpcy50b2dnbGVOb2RlKGl0ZW0sIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybmFsU2VsZWN0SXRlbShpdGVtLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVOb2RlKGl0ZW0sIGZsYWcgPSBmYWxzZSkge1xuICAgIC8vaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSBmYWxzZSAmJlxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnICYmICFmbGFnKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25MZXZlbCA9PSAnbm9kZXMnICYmIGl0ZW0uaGFzQ2hpbGQgPT0gdHJ1ZSkge1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0udG9nZ2xlID0gIWl0ZW0udG9nZ2xlO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTGV2ZWwgPT0gJ25vZGVzJyAmJiBpdGVtLmhhc0NoaWxkID09IHRydWUpIHtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmludGVybmFsU2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSB0cnVlICYmIGl0ZW0ubG9hZGVkICE9PSB0cnVlICYmIHRoaXMubGF6eUxvYWRpbmcpIHtcbiAgICAgICAgdGhpcy5pdGVtUm93ID0gaXRlbTtcbiAgICAgICAgY29uc3QgdWlkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwKTtcbiAgICAgICAgaXRlbS5yZXF1ZXN0SWQgPSB1aWQ7XG4gICAgICAgIHRoaXMubGlzdExvYWQucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5fY29udGVudERhdGFTb3VyY2UuZmV0Y2goaXRlbSk7XG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcodGhpcy5pdGVtUm93KTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLnRvZ2dsZSAmJiBpdGVtW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT09IHRydWUpIHtcbiAgICAgICAgaXRlbS5vcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vbkl0ZW1PcGVuaW5nLmVtaXQodGhpcy5tYWtlTm9kZShpdGVtKSk7XG4gICAgICB9IGVsc2UgaWYgKCFpdGVtLnRvZ2dsZSAmJiBpdGVtW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT09IHRydWUpIHtcbiAgICAgICAgaXRlbS5vcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25JdGVtQ2xvc2luZy5lbWl0KHRoaXMubWFrZU5vZGUoaXRlbSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgbGV2ZWxDb3VudDogbnVtYmVyID0gMDtcbiAgZ2V0TGV2ZWwoaXRlbSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoaXRlbS5wYXJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMubGV2ZWxDb3VudCA9IHRoaXMubGV2ZWxDb3VudCArIDE7XG4gICAgICAgIHRoaXMuZ2V0TGV2ZWwoaXRlbS5wYXJlbnROb2RlKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMubGV2ZWxDb3VudCk7XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxldmVsQ291bnQgPSB0aGlzLmxldmVsQ291bnQgKyAxO1xuICAgICAgICByZXNvbHZlKHRoaXMubGV2ZWxDb3VudClcbiAgICAgIH1cbiAgICB9XG4gICAgKVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuXG4gICAgdGhpcy5fY29udGVudERhdGFTb3VyY2UuZmV0Y2gobnVsbCk7XG4gICAgdGhpcy5fY29udGVudERhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQuc3Vic2NyaWJlKChfZGF0YSkgPT4ge1xuICAgICAgaWYgKHRoaXMubGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5oaWRlTG9hZGluZyhudWxsKTtcbiAgICAgICAgdGhpcy5saXN0ID0gX2RhdGEuZGF0YS5yZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5saXN0LmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgZWwuZGlzYWJsZWRDaGVja0JveCA9IHRoaXMuc2VsZWN0YWJsZUZpZWxkICE9ICcnID8gKGVsW3RoaXMuc2VsZWN0YWJsZUZpZWxkXSA/IGVsW3RoaXMuc2VsZWN0YWJsZUZpZWxkXSA6IGZhbHNlKSA6IGZhbHNlO1xuICAgICAgICAgIGVsLnNlbGVjdCA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTGV2ZWwgPT0gJ25vZGVzJyAmJiBlbFt0aGlzLmhhc0NoaWxkRmllbGRdID09IHRydWUpIHtcbiAgICAgICAgICAgIGVsLmRpc2FibGVkQ2hlY2tCb3ggPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkxldmVsID09ICdwYXJlbnRzJyAmJiBlbFt0aGlzLmhhc0NoaWxkRmllbGRdID09IGZhbHNlKSB7XG4gICAgICAgICAgICBlbC5kaXNhYmxlZENoZWNrQm94ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZXRlZEtleUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGV0ZWRLZXlGaWVsZHMuZm9yRWFjaCgobjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChuLmluY2x1ZGVzKGVsW3RoaXMua2V5RmllbGRdKSkge1xuICAgICAgICAgICAgICAgIGlmIChlbFt0aGlzLmhhc0NoaWxkRmllbGRdID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgoKHRoaXMuY2hlY2tQYXJlbnRzID09IGZhbHNlICYmIHRoaXMuY2hlY2tDaGlsZHMgPT0gZmFsc2UpIHx8IHRoaXMuY2hlY2tDaGlsZHMgPT0gZmFsc2UpICYmIG4ubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9zZWxlY3QgcGFyZW50IHdoZW4gY2hlY2sgY2hpbGQgYW5kIGNoZWNrIHBhcmVudCBpcyBmYWxzZSBUT0RPIGNoZWNrIHRoaXMgQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShlbCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuKGVsKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGVsKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RlZEl0ZW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRmllbGROYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChlbFt0aGlzLmhhc0NoaWxkRmllbGRdID09IHRydWUgJiYgZWxbdGhpcy5zZWxlY3RlZEZpZWxkTmFtZV0gPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBpZiAoKHRoaXMuY2hlY2tQYXJlbnRzID09IGZhbHNlICYmIHRoaXMuY2hlY2tDaGlsZHMgPT0gZmFsc2UpIHx8IHRoaXMuY2hlY2tDaGlsZHMgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAvL3NlbGVjdCBwYXJlbnQgd2hlbiBjaGVjayBjaGlsZCBhbmQgY2hlY2sgcGFyZW50IGlzIGZhbHNlIFRPRE8gY2hlY2sgdGhpcyBBY3Rpb25cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oZWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMub3BlbihlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsW3RoaXMuc2VsZWN0ZWRGaWVsZE5hbWVdID09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGVsKTtcbiAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGVkSXRlbSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXRlbVJvdyA9IHRoaXMubGlzdExvYWQuZmlsdGVyKChjKSA9PiBjLnJlcXVlc3RJZCA9PT0gX2RhdGEuZGF0YS5yZXF1ZXN0SWQpWzBdO1xuICAgICAgICB0aGlzLmxpc3RMb2FkID0gdGhpcy5saXN0TG9hZC5maWx0ZXIoKGMpID0+IGMucmVxdWVzdElkICE9PSBfZGF0YS5kYXRhLnJlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuaXRlbVJvdy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5pdGVtUm93ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmhpZGVMb2FkaW5nKHRoaXMuaXRlbVJvdyk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gX2RhdGEuZGF0YS5yZXN1bHQ7XG5cbiAgICAgICAgICBpZiAodGhpcy5saXN0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbVJvd1t0aGlzLmNoaWxkRmllbGRdICYmIHRoaXMuaXRlbVJvd1t0aGlzLmNoaWxkRmllbGRdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgZWwuZGlzYWJsZWRDaGVja0JveCA9IHRoaXMuc2VsZWN0YWJsZUZpZWxkICE9ICcnID8gKGVsW3RoaXMuc2VsZWN0YWJsZUZpZWxkXSA/IGVsW3RoaXMuc2VsZWN0YWJsZUZpZWxkXSA6IGZhbHNlKSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGVsLmRpc2FibGVkQ2hlY2tCb3ggPSB0aGlzLnNlbGVjdGFibGVGaWVsZCAhPSAnJyA/IGVsW3RoaXMuc2VsZWN0YWJsZUZpZWxkXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbVJvd1t0aGlzLmNoaWxkRmllbGRdW3RoaXMuaXRlbVJvd1t0aGlzLmNoaWxkRmllbGRdLmxlbmd0aF0gPSBlbDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLml0ZW1Sb3dbdGhpcy5jaGlsZEZpZWxkXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgcmVzdWx0W2ldLmRpc2FibGVkQ2hlY2tCb3ggPVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZUZpZWxkICE9ICcnID8gKHJlc3VsdFtpXVt0aGlzLnNlbGVjdGFibGVGaWVsZF0gPyByZXN1bHRbaV1bdGhpcy5zZWxlY3RhYmxlRmllbGRdIDogZmFsc2UpIDogZmFsc2U7XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTGV2ZWwgPT0gJ25vZGVzJyAmJiByZXN1bHRbaV1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2ldLmRpc2FibGVkQ2hlY2tCb3ggPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkxldmVsID09ICdwYXJlbnRzJyAmJiByZXN1bHRbaV1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpXS5kaXNhYmxlZENoZWNrQm94ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJyAmJiAodGhpcy5zZWxlY3ROb2Rlc1JlY3Vyc2l2ZSA9PSAnYWxsJyB8fCB0aGlzLnNlbGVjdE5vZGVzUmVjdXJzaXZlID09ICdjaGlsZHMnKSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJyAmJiB0aGlzLmNoZWNrQ2hpbGRzID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaV0uc2VsZWN0ID0gdGhpcy5pdGVtUm93LnNlbGVjdCA9PT0gKHVuZGVmaW5lZCB8fCBudWxsKSA/IGZhbHNlIDogdGhpcy5pdGVtUm93LnNlbGVjdDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1Sb3cuc2VsZWN0ID09PSB0cnVlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PSAnbXVsdGlwbGUnICYmIHJlc3VsdFtpXVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPT0gcmVzdWx0W2ldW3RoaXMua2V5RmllbGRdKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHJlc3VsdFtpXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLml0ZW1Sb3cuc2VsZWN0ID09PSB0cnVlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PSAnbXVsdGlwbGUnICYmIHJlc3VsdFtpXVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cyA9IHRoaXMuc2VsZWN0ZWRQYXJlbnRzLmZpbHRlcigoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPT0gcmVzdWx0W2ldW3RoaXMua2V5RmllbGRdKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLnB1c2gocmVzdWx0W2ldKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpXS5zZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXN1bHRbaV0ucGFyZW50Tm9kZSA9IHRoaXMuaXRlbVJvdztcblxuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxldGVkS2V5RmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGV0ZWRLZXlGaWVsZHMuZm9yRWFjaCgobjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAobi5pbmNsdWRlcyhyZXN1bHRbaV1bdGhpcy5rZXlGaWVsZF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbaV1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PSB0cnVlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGV2ZWwocmVzdWx0W2ldKS50aGVuKChyZXNMZXZlbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tQYXJlbnRzID09IGZhbHNlICYmIHRoaXMuY2hlY2tDaGlsZHMgPT0gZmFsc2UgJiYgbi5sZW5ndGggPT0gdGhpcy5sZXZlbENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vc2VsZWN0IHBhcmVudCB3aGVuIGNoZWNrIGNoaWxkIGFuZCBjaGVjayBwYXJlbnQgaXMgZmFsc2UgVE9ETyBjaGVjayB0aGlzIEFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0ocmVzdWx0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuKHJlc3VsdFtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKHJlc3VsdFtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGVkSXRlbSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRmllbGROYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0W2ldW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT0gdHJ1ZSAmJiByZXN1bHRbaV1bdGhpcy5zZWxlY3RlZEZpZWxkTmFtZV0gPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tQYXJlbnRzID09IGZhbHNlICYmIHRoaXMuY2hlY2tDaGlsZHMgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9zZWxlY3QgcGFyZW50IHdoZW4gY2hlY2sgY2hpbGQgYW5kIGNoZWNrIHBhcmVudCBpcyBmYWxzZSBUT0RPIGNoZWNrIHRoaXMgQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShyZXN1bHRbaV0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuKHJlc3VsdFtpXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRbaV1bdGhpcy5zZWxlY3RlZEZpZWxkTmFtZV0gPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKHJlc3VsdFtpXSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0ZWRJdGVtID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbVJvdy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pc1NlbGVjdGVkSXRlbSA9PSB0cnVlICYmICF0aGlzLmxvY2VkKSB7XG4gICAgICAgIHRoaXMubG9jZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGV0ZWRLZXlGaWVsZHNDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICAvLyB2YWx1ZTogdGhpcy5tYWtlTm9kZShpdGVtKSxcbiAgICAgICAgICBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJykge1xuICAgICAgdGhpcy5zaG93U2VsZWN0Qm94ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSB0cnVlO1xuICB9XG5cbiAgLy8gb25JdGVtQ2xpY2soZSwgdikge1xuXG4gIC8vIH1cblxuICBvbkRyYWdTdGFydChlOiBFdmVudCwgdikge1xuICAgIGlmICghdGhpcy5sb2NrZWREcmFnKSB7XG4gICAgICB0aGlzLml0ZW1EcmFnID0gdjtcbiAgICAgIHRoaXMub25JdGVtRHJhZy5lbWl0KHYpO1xuICAgIH1cbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgb25EcmFnRW5kKGUsIHYpIHtcbiAgICBpZiAoIXRoaXMubG9ja2VkRHJhZykge1xuICAgICAgdGhpcy5pdGVtRHJvcCA9IHY7XG4gICAgfVxuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBkcm9wKGUpIHtcbiAgICAvLyAgdGhpcy5vbkl0ZW1Ecm9wLmVtaXQodGhpcy5pdGVtRHJvcCk7XG4gICAgaWYgKCF0aGlzLmxvY2tlZERyYWcpIHtcbiAgICAgIHRoaXMudmFsaWREcm9wID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2FtZUNoaWxkZSh0aGlzLml0ZW1EcmFnLCB0aGlzLml0ZW1Ecm9wKTtcbiAgICAgIGlmICh0aGlzLnZhbGlkRHJvcCAmJiB0aGlzLml0ZW1EcmFnW3RoaXMua2V5RmllbGRdICE9PSB0aGlzLml0ZW1Ecm9wW3RoaXMua2V5RmllbGRdICYmIHRoaXMuaXRlbURyYWcucGFyZW50Tm9kZSAhPT0gdGhpcy5pdGVtRHJvcCkge1xuICAgICAgICBjb25zdCBtb3ZlZEV2ZW50OiBBWFRyZWVWaWV3SXRlbU1vdmVkRXZlbnQgPSBuZXcgQVhUcmVlVmlld0l0ZW1Nb3ZlZEV2ZW50KCk7XG4gICAgICAgIG1vdmVkRXZlbnQuc291cmNlID0gdGhpcy5tYWtlTm9kZSh0aGlzLml0ZW1EcmFnKTtcbiAgICAgICAgbW92ZWRFdmVudC50YXJnZXQgPSB0aGlzLm1ha2VOb2RlKHRoaXMuaXRlbURyb3ApO1xuICAgICAgICB0aGlzLmxvY2tlZERyYWcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dMb2FkaW5nKHRoaXMuaXRlbURyYWcpO1xuICAgICAgICB0aGlzLnNob3dMb2FkaW5nKHRoaXMuaXRlbURyb3ApO1xuICAgICAgICBtb3ZlZEV2ZW50LnJlc29sdmUgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICB0aGlzLmhpZGVMb2FkaW5nKHRoaXMuaXRlbURyYWcpO1xuICAgICAgICAgIHRoaXMuaGlkZUxvYWRpbmcodGhpcy5pdGVtRHJvcCk7XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdEcm9wSXRlbSh0aGlzLml0ZW1EcmFnLCB0aGlzLml0ZW1Ecm9wKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2NrZWREcmFnID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uSXRlbU1vdmVkLmVtaXQobW92ZWRFdmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHNhbWVDaGlsZGUocGFyZW50LCBjaGlsZCkge1xuICAgIGlmIChwYXJlbnRbdGhpcy5jaGlsZEZpZWxkXSAmJiBwYXJlbnRbdGhpcy5jaGlsZEZpZWxkXS5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGFyZW50W3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGlmIChwYXJlbnRbdGhpcy5jaGlsZEZpZWxkXVtpbmRleF1bdGhpcy5rZXlGaWVsZF0gPT0gY2hpbGRbdGhpcy5rZXlGaWVsZF0pIHtcbiAgICAgICAgICB0aGlzLnZhbGlkRHJvcCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJlbnRbdGhpcy5jaGlsZEZpZWxkXVtpbmRleF1bdGhpcy5jaGlsZEZpZWxkXSAmJiBwYXJlbnRbdGhpcy5jaGlsZEZpZWxkXVtpbmRleF1bdGhpcy5jaGlsZEZpZWxkXS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zYW1lQ2hpbGRlKHBhcmVudFt0aGlzLmNoaWxkRmllbGRdW2luZGV4XSwgY2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwYXJlbnRbdGhpcy5rZXlGaWVsZF0gPT0gY2hpbGRbdGhpcy5rZXlGaWVsZF0pIHtcbiAgICAgIHRoaXMudmFsaWREcm9wID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZHJhZ0Ryb3BJdGVtKGl0ZW1DaGlsZCwgaXRlbVBhcmVudCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkxldmVsID09ICdub2RlcycpIHtcbiAgICAgIGl0ZW1QYXJlbnQuZGlzYWJsZWRDaGVja0JveCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1DaGlsZC5wYXJlbnROb2RlKSB7XG4gICAgICBpdGVtQ2hpbGQucGFyZW50Tm9kZVt0aGlzLmNoaWxkRmllbGRdID0gaXRlbUNoaWxkLnBhcmVudE5vZGVbdGhpcy5jaGlsZEZpZWxkXS5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGl0ZW1DaGlsZFt0aGlzLmtleUZpZWxkXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGl0ZW1DaGlsZFt0aGlzLmtleUZpZWxkXSk7XG4gICAgfVxuICAgIGl0ZW1DaGlsZC5wYXJlbnROb2RlID0gaXRlbVBhcmVudDtcbiAgICBpZiAoaXRlbVBhcmVudFt0aGlzLmNoaWxkRmllbGRdICYmIGl0ZW1QYXJlbnRbdGhpcy5jaGlsZEZpZWxkXS5sZW5ndGggPiAwKSB7XG4gICAgICBpdGVtUGFyZW50W3RoaXMuY2hpbGRGaWVsZF1baXRlbVBhcmVudFt0aGlzLmNoaWxkRmllbGRdLmxlbmd0aF0gPSBpdGVtQ2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1QYXJlbnRbdGhpcy5jaGlsZEZpZWxkXSA9IFtdO1xuICAgICAgaXRlbVBhcmVudFt0aGlzLmNoaWxkRmllbGRdWzBdID0gaXRlbUNoaWxkO1xuICAgICAgaWYgKGl0ZW1QYXJlbnRbdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZU5vZGUoaXRlbVBhcmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtUGFyZW50LnRvZ2dsZSA9ICFpdGVtUGFyZW50LnRvZ2dsZTtcbiAgICAgICAgaXRlbVBhcmVudC5sb2FkZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaXRlbVBhcmVudFt0aGlzLmhhc0NoaWxkRmllbGRdID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGl0ZW1DaGlsZC5wYXJlbnROb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgIHRoaXMuY2hhbmdlUGFyZW50U2VsZWN0KGl0ZW1DaGlsZC5wYXJlbnROb2RlKTtcbiAgICB9XG4gICAgdGhpcy5sb2NrZWREcmFnID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGxpc3RDaGFuZ2UoZmllbGQsIHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGlzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMuY2hhbmdlQ2hpbGVkKHRoaXMubGlzdFtpbmRleF0sIGZpZWxkLCB2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMubG9hZEFsbENoaWxkcmVuID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZUNoaWxlZChpdGVtLCBmaWVsZCwgdmFsdWUpIHtcbiAgICBpZiAoZmllbGQgPT09ICd0b2dnbGUnICYmIChpdGVtLmxvYWRlZCA9PT0gZmFsc2UgfHwgaXRlbS5sb2FkZWQgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIGlmICh0aGlzLmxvYWRBbGxDaGlsZHJlbiA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZU5vZGUoaXRlbSk7XG4gICAgICAgIGl0ZW1bZmllbGRdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1bZmllbGRdID0gdmFsdWU7XG4gICAgICBpZiAoZmllbGQgPT09ICdzZWxlY3QnICYmIGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gZmFsc2UgJiYgdmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQgPT09ICdzZWxlY3QnICYmIGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gdHJ1ZSAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmllbGQgPT09ICdzZWxlY3QnKSB7XG4gICAgICBpdGVtLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gdHJ1ZSAmJiBpdGVtW3RoaXMuY2hpbGRGaWVsZF0gJiYgaXRlbVt0aGlzLmNoaWxkRmllbGRdLmxlbmd0aCA+IDApIHtcbiAgICAgIGl0ZW1bdGhpcy5jaGlsZEZpZWxkXS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlQ2hpbGVkKGVsZW1lbnQsIGZpZWxkLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dMb2FkaW5nKGl0ZW0pOiB2b2lkIHtcbiAgICBpdGVtLmxvYWRpbmcgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlTG9hZGluZyhpdGVtKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0gIT0gbnVsbCkge1xuICAgICAgaXRlbS5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5BbGwobG9hZEFsbDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgLy8gaWYgKGxvYWRBbGwpIHtcbiAgICAvLyB0aGlzLmxvYWRBbGxDaGlsZHJlbiA9IHRydWU7XG4gICAgLy8gdGhpcy5saXN0Q2hhbmdlKCd0b2dnbGUnLCB0cnVlKTtcbiAgICAvL30gZWxzZSB7XG4gICAgdGhpcy5saXN0Q2hhbmdlKCd0b2dnbGUnLCB0cnVlKTtcbiAgICAvLyB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0SXRlbShpdGVtKSB7XG4gICAgaWYgKGl0ZW1bJ3NlbGVjdCddICE9IHRydWUpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxTZWxlY3RJdGVtKGl0ZW0sIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdW5TZWxlY3RJdGVtKGl0ZW0pIHtcbiAgICBpZiAoaXRlbVsnc2VsZWN0J10gPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5pbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuKGl0ZW0pIHtcbiAgICBpZiAoaXRlbVsndG9nZ2xlJ10gIT09IHRydWUpIHtcbiAgICAgIHRoaXMudG9nZ2xlTm9kZShpdGVtLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xJbnRvVmlldyhpdGVtKSB7XG4gICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBsaVtkYXRhLWlkPScke2l0ZW1bdGhpcy5rZXlGaWVsZF19J11gKTtcbiAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VBbGwoKSB7XG4gICAgdGhpcy5saXN0Q2hhbmdlKCd0b2dnbGUnLCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLmxpc3RDaGFuZ2UoJ3NlbGVjdCcsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1blNlbGVjdEFsbCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJykge1xuICAgICAgdGhpcy5saXN0Q2hhbmdlKCdzZWxlY3QnLCBmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkTm9kZXMoKTogQVhUcmVlVmlld05vZGVbXSB7XG4gICAgY29uc3Qgc2VsZWN0SXRlbXNOb2RlID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGUpID0+IHtcbiAgICAgIHNlbGVjdEl0ZW1zTm9kZS5wdXNoKHRoaXMubWFrZU5vZGUoZSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBzZWxlY3RJdGVtc05vZGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRQYXJlbnRzKCk6IEFYVHJlZVZpZXdOb2RlW10ge1xuICAgIGNvbnN0IHNlbGVjdEl0ZW1zUGFyZW50ID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFBhcmVudHMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgc2VsZWN0SXRlbXNQYXJlbnQucHVzaCh0aGlzLm1ha2VOb2RlKGUpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZWN0SXRlbXNQYXJlbnQ7XG4gIH1cblxuICBnZXRQYXJlbnRzSWQoaXRlbSkge1xuICAgIGxldCBrZXlGaWVsZHMgPSBbXTtcbiAgICBrZXlGaWVsZHMucHVzaChpdGVtW3RoaXMua2V5RmllbGRdKTtcbiAgICBpZiAoaXRlbS5wYXJlbnROb2RlKSB7XG4gICAgICBrZXlGaWVsZHMucHVzaCguLi50aGlzLmdldFBhcmVudHNJZChpdGVtLnBhcmVudE5vZGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleUZpZWxkcztcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZEtleUZpZWxkcygpIHtcbiAgICBsZXQga2V5RmllbGRzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGVsbSkgPT4ge1xuICAgICAgdmFyIElkcyA9IHRoaXMuZ2V0UGFyZW50c0lkKGVsbSk7XG4gICAgICBpZiAoSWRzKSB7XG4gICAgICAgIGtleUZpZWxkcy5wdXNoKElkcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGtleUZpZWxkcztcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZEtleUZpZWxkc1BhcmVudHMoKSB7XG4gICAgbGV0IGtleUZpZWxkcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLmZvckVhY2goKGVsbSkgPT4ge1xuICAgICAgdmFyIElkcyA9IHRoaXMuZ2V0UGFyZW50c0lkKGVsbSk7XG4gICAgICBpZiAoSWRzKSB7XG4gICAgICAgIGtleUZpZWxkcy5wdXNoKElkcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGtleUZpZWxkcztcbiAgfVxufVxuIiwiPHVsIGNsYXNzPVwiYXggdHJlZXZpZXcge3tzaXplfX1cIj5cbiAgICA8bmctdGVtcGxhdGUgI3JlY3Vyc2l2ZUxpc3QgbGV0LWxpc3Q+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGlzdFwiPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwiYWN0aXZlIHt7aXRlbVtoYXNDaGlsZEZpZWxkXSA/ICcnOidub2RlJ319XCIgW2NsYXNzLmJvcmRlcmVkXT1cImJvcmRlcmVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXRlbS5zZWxlY3RcIiBbZHJhZ2dhYmxlXT1cImFsbG93RHJhZ1wiIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJpdGVtW2tleUZpZWxkXVwiIChkcmFnbGVhdmUpPVwib25EcmFnRW5kKCRldmVudCxpdGVtKVwiIChkcmFnZW5kKT1kcm9wKCRldmVudCk+XG4gICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBheENvbnRleHRNZW51IFtjb250ZXh0RGF0YUl0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb250ZXh0TWVudUl0ZW1zXT1cImNvbnRleHRNZW51SXRlbXNcIiBbY29udGV4dE1lbnVdPVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkNvbnRleHRNZW51SXRlbUNsaWNrKT1cImhhbmRsZU9uQ29udGV4dE1lbnVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGN1cnNvcjogcG9pbnRlcjthbGlnbi1pdGVtczogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhcnQtc2lkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW1baGFzQ2hpbGRGaWVsZF1cIiBjbGFzcz1cImNvbGxhcHNlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPbk5vZGVDbGljaygkZXZlbnQsaXRlbSx0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydmYS1taW51cyc6ICEhaXRlbS50b2dnbGUgLCAnZmEtcGx1cyc6ICFpdGVtLnRvZ2dsZSAsICdmYS1zcGlubmVyIGZhLXNwaW4nOml0ZW0ubG9hZGluZyB9XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1jaGVjay1ib3ggKm5nSWY9XCJzaG93U2VsZWN0Qm94XCIgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRDaGVja0JveCB8fCBkaXNhYmxlZFwiIFtzaXplXT1cInNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInRydWVcIiBbdmFsdWVdPVwiaXRlbS5zZWxlY3RcIiAob25DbGljayk9XCJpbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtY2hlY2stYm94PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxpc3RcIiAoY2xpY2spPVwibm9kZUNsaWNrKGl0ZW0pXCIgKGRibGNsaWNrKT1cIml0ZW1kYkNsaWNrKCRldmVudCxpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVUZW1wbGF0ZTsgZWxzZSBlbHNlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9kZVRlbXBsYXRlOyBjb250ZXh0OnsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDx1bCAqbmdJZj1cIml0ZW0ubG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBcIj48L2k+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjaGlsZFwiICpuZ0lmPVwiaXRlbS50b2dnbGVcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZWN1cnNpdmVMaXN0OyBjb250ZXh0OnsgJGltcGxpY2l0OiBpdGVtLmNoaWxkZXJlbiB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZWN1cnNpdmVMaXN0OyBjb250ZXh0OnsgJGltcGxpY2l0OiBsaXN0IH1cIj48L25nLWNvbnRhaW5lcj5cbjwvdWw+XG5cbjxheC1jb250ZXh0LW1lbnUgI21lbnU+PC9heC1jb250ZXh0LW1lbnU+Il19
|