@acorex/components 5.2.1 → 5.2.53
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 +2 -23
- package/esm2020/lib/accordion/accordion.component.mjs +44 -0
- package/esm2020/lib/accordion/accordion.module.mjs +20 -0
- package/esm2020/lib/base/base-page.class.mjs +94 -0
- package/esm2020/lib/base/components.class.mjs +17 -0
- package/esm2020/lib/base/element.class.mjs +294 -0
- package/esm2020/lib/base/events.class.mjs +6 -53
- package/esm2020/lib/button/button.component.mjs +58 -50
- package/esm2020/lib/button/button.module.mjs +11 -23
- package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +413 -0
- package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +22 -0
- package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +54 -0
- package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +18 -0
- package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +213 -0
- package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +68 -0
- package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +132 -0
- package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +37 -0
- package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +47 -0
- package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +95 -0
- package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +204 -0
- package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +99 -0
- package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +77 -0
- package/esm2020/lib/checkbox/checkbox.component.mjs +88 -31
- package/esm2020/lib/checkbox/checkbox.module.mjs +7 -8
- package/esm2020/lib/color-picker/color-box/color-box.component.mjs +422 -0
- package/esm2020/lib/color-picker/color-picker.component.mjs +82 -0
- package/esm2020/lib/color-picker/color-picker.module.mjs +24 -0
- package/esm2020/lib/context-menu/context-menu.component.mjs +65 -0
- package/esm2020/lib/context-menu/context-menu.directive.mjs +135 -0
- package/esm2020/lib/context-menu/context-menu.module.mjs +20 -0
- package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +138 -0
- package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +117 -0
- package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +74 -0
- package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +117 -0
- package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +258 -0
- package/esm2020/lib/data-filter/filter.class.mjs +44 -0
- package/esm2020/lib/data-filter/filter.module.mjs +90 -0
- package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +166 -0
- package/esm2020/lib/data-list/core/data-list.component.mjs +40 -0
- package/esm2020/lib/data-list/list/list.component.mjs +124 -0
- package/esm2020/lib/data-list/list/list.module.mjs +22 -0
- package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +85 -0
- package/esm2020/lib/data-source/datasource.component.mjs +47 -0
- package/esm2020/lib/data-source/datasource.module.mjs +18 -0
- package/esm2020/lib/data-source/read-param.mjs +5 -0
- package/esm2020/lib/date-picker/date-picker.component.mjs +705 -0
- package/esm2020/lib/date-picker/date-picker.module.mjs +25 -0
- package/esm2020/lib/dialog/dialog.component.mjs +17 -33
- package/esm2020/lib/dialog/dialog.module.mjs +10 -15
- package/esm2020/lib/dialog/dialog.service.mjs +129 -123
- package/esm2020/lib/drawer/content.component.mjs +18 -0
- package/esm2020/lib/drawer/drawer-container.component.mjs +25 -72
- package/esm2020/lib/drawer/drawer.component.mjs +100 -130
- package/esm2020/lib/drawer/drawer.module.mjs +7 -7
- package/esm2020/lib/dropdown/dropdown.component.mjs +177 -0
- package/esm2020/lib/dropdown/dropdown.module.mjs +17 -15
- package/esm2020/lib/fieldset/fieldset.component.mjs +59 -0
- package/esm2020/lib/fieldset/fieldset.module.mjs +19 -0
- package/esm2020/lib/form-group/form-group.component.mjs +34 -0
- package/esm2020/lib/form-group/form-group.module.mjs +21 -0
- package/esm2020/lib/label/label.component.mjs +13 -19
- package/esm2020/lib/label/label.module.mjs +5 -5
- package/esm2020/lib/loading/loading-indicator.component.mjs +17 -0
- package/esm2020/lib/loading/loading-panel.component.mjs +44 -0
- package/esm2020/lib/loading/loading.module.mjs +12 -26
- package/esm2020/lib/loading/loading.service.mjs +14 -123
- package/esm2020/lib/menu/menu-item.component.mjs +47 -0
- package/esm2020/lib/menu/menu.component.mjs +71 -69
- package/esm2020/lib/menu/menu.module.mjs +12 -30
- package/esm2020/lib/menu/menu2.component.mjs +96 -0
- package/esm2020/lib/number-box/number-box.component.mjs +586 -185
- package/esm2020/lib/number-box/number-box.module.mjs +10 -27
- package/esm2020/lib/page/content.component.mjs +32 -0
- package/esm2020/lib/page/footer.component.mjs +19 -0
- package/esm2020/lib/page/page.component.mjs +44 -49
- package/esm2020/lib/page/page.module.mjs +13 -10
- package/esm2020/lib/panel-box/panel-box.component.mjs +88 -0
- package/esm2020/lib/panel-box/panel-box.module.mjs +19 -0
- package/esm2020/lib/password-box/password-box.component.mjs +22 -50
- package/esm2020/lib/password-box/password-box.module.mjs +9 -21
- package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +48 -0
- package/esm2020/lib/popover/overlay.service.mjs +87 -0
- package/esm2020/lib/popover/popover.component.mjs +83 -218
- package/esm2020/lib/popover/popover.module.mjs +5 -5
- package/esm2020/lib/popup/popup.component.mjs +112 -88
- package/esm2020/lib/popup/popup.module.mjs +14 -14
- package/esm2020/lib/popup/popup.service.mjs +20 -22
- package/esm2020/lib/progress-bar/progress-bar.component.mjs +12 -27
- package/esm2020/lib/progress-bar/progress-bar.module.mjs +6 -6
- package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +61 -0
- package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +22 -0
- package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +38 -0
- package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +24 -0
- package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +115 -0
- package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +32 -0
- package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +211 -0
- package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +78 -0
- package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +51 -0
- package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +24 -0
- package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +63 -0
- package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +24 -0
- package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +140 -0
- package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +61 -0
- package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +72 -0
- package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +78 -0
- package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +25 -0
- package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +69 -0
- package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +22 -0
- package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +29 -0
- package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +25 -0
- package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +32 -0
- package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +24 -0
- package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +32 -0
- package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +24 -0
- package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +43 -0
- package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +24 -0
- package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +152 -0
- package/esm2020/lib/property-editor/property-editor.class.mjs +101 -0
- package/esm2020/lib/property-editor/property-editor.module.mjs +196 -0
- package/esm2020/lib/query-builder/query-builder-group.component.mjs +124 -0
- package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +171 -0
- package/esm2020/lib/query-builder/query-builder-rule.component.mjs +357 -0
- package/esm2020/lib/query-builder/query-builder.class.mjs +20 -0
- package/esm2020/lib/query-builder/query-builder.component.mjs +82 -0
- package/esm2020/lib/query-builder/query-builder.module.mjs +59 -0
- package/esm2020/lib/query-builder/query-builder.service.mjs +191 -0
- package/esm2020/lib/search-bar/search-bar.component.mjs +235 -0
- package/esm2020/lib/search-bar/search-bar.module.mjs +28 -0
- package/esm2020/lib/searchbox/searchbox.component.mjs +79 -0
- package/esm2020/lib/searchbox/searchbox.module.mjs +24 -0
- package/esm2020/lib/selectbox/selectbox.component.mjs +886 -261
- package/esm2020/lib/selectbox/selectbox.module.mjs +33 -58
- package/esm2020/lib/selectbox/selectbox2.component.mjs +574 -0
- package/esm2020/lib/selection-list/selection-list.component.mjs +91 -40
- package/esm2020/lib/selection-list/selection-list.module.mjs +7 -10
- package/esm2020/lib/switch/switch.component.mjs +41 -23
- package/esm2020/lib/switch/switch.module.mjs +6 -7
- package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +71 -0
- package/esm2020/lib/tab-page/tab-page-host.component.mjs +116 -0
- package/esm2020/lib/tab-page/tab-page.module.mjs +21 -0
- package/esm2020/lib/tab-page/tab-page.service.mjs +156 -0
- package/esm2020/lib/tab-strip/tab-strip.component.mjs +36 -0
- package/esm2020/lib/tab-strip/tab-strip.module.mjs +19 -0
- package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +24 -0
- package/esm2020/lib/tab-view/tab-view.component.mjs +105 -0
- package/esm2020/lib/tab-view/tab-view.module.mjs +21 -0
- package/esm2020/lib/tab-view/tab.component.mjs +30 -0
- package/esm2020/lib/textarea/textarea.component.mjs +19 -18
- package/esm2020/lib/textarea/textarea.module.mjs +13 -18
- package/esm2020/lib/textbox/textbox.component.mjs +35 -23
- package/esm2020/lib/textbox/textbox.module.mjs +15 -34
- package/esm2020/lib/time-picker/time-picker.component.mjs +943 -0
- package/esm2020/lib/time-picker/time-picker.module.mjs +22 -0
- package/esm2020/lib/toast/toast-message/toast-message.component.mjs +74 -0
- package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +13 -0
- package/esm2020/lib/toast/toast.module.mjs +12 -13
- package/esm2020/lib/toast/toast.service.mjs +27 -97
- package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +78 -0
- package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +57 -0
- package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +54 -0
- package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +47 -0
- package/esm2020/lib/toolbar/toolbar-item.mjs +6 -0
- package/esm2020/lib/toolbar/toolbar.component.mjs +13 -0
- package/esm2020/lib/toolbar/toolbar.module.mjs +40 -0
- package/esm2020/lib/tooltip/tooltip.directive.mjs +84 -70
- package/esm2020/lib/tooltip/tooltip.module.mjs +8 -12
- package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +646 -0
- package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +35 -0
- package/esm2020/lib/tree-view/tree-view.component.mjs +726 -0
- package/esm2020/lib/tree-view/tree-view.module.mjs +22 -0
- package/esm2020/lib/upload-file/upload-file.component.mjs +170 -0
- package/esm2020/lib/upload-file/upload-file.events.mjs +2 -0
- package/esm2020/lib/upload-file/upload-file.module.mjs +24 -0
- package/esm2020/lib/validation/validation-form.component.mjs +65 -0
- package/esm2020/lib/validation/validation-rule.widget.mjs +25 -27
- package/esm2020/lib/validation/validation.class.mjs +1 -1
- package/esm2020/lib/validation/validation.component.mjs +89 -0
- package/esm2020/lib/validation/validation.module.mjs +12 -10
- package/esm2020/public-api.mjs +158 -51
- package/fesm2015/acorex-components.mjs +14664 -7127
- package/fesm2015/acorex-components.mjs.map +1 -1
- package/fesm2020/acorex-components.mjs +14623 -7115
- package/fesm2020/acorex-components.mjs.map +1 -1
- package/lib/accordion/accordion.component.d.ts +13 -0
- package/lib/accordion/accordion.module.d.ts +9 -0
- package/lib/base/base-page.class.d.ts +46 -0
- package/lib/base/components.class.d.ts +10 -0
- package/lib/base/element.class.d.ts +106 -0
- package/lib/base/events.class.d.ts +8 -75
- package/lib/button/button.component.d.ts +18 -18
- package/lib/button/button.module.d.ts +2 -6
- package/lib/calendar/calendar-box/calendar-box.component.d.ts +81 -0
- package/lib/calendar/calendar-box/calendar-box.module.d.ts +11 -0
- package/lib/calendar/scheduler/scheduler-views.property.d.ts +19 -0
- package/lib/calendar/scheduler/scheduler.class.d.ts +36 -0
- package/lib/calendar/scheduler/scheduler.component.d.ts +39 -0
- package/lib/calendar/scheduler/scheduler.module.d.ts +21 -0
- package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +25 -0
- package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +14 -0
- package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +16 -0
- package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +26 -0
- package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +37 -0
- package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +28 -0
- package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +24 -0
- package/lib/checkbox/checkbox.component.d.ts +27 -8
- package/lib/checkbox/checkbox.module.d.ts +1 -2
- package/lib/color-picker/color-box/color-box.component.d.ts +25 -0
- package/lib/color-picker/color-picker.component.d.ts +30 -0
- package/lib/color-picker/color-picker.module.d.ts +13 -0
- package/lib/context-menu/context-menu.component.d.ts +22 -0
- package/lib/context-menu/context-menu.directive.d.ts +38 -0
- package/lib/context-menu/context-menu.module.d.ts +9 -0
- package/lib/data-filter/columns/filter-column-date.component.d.ts +22 -0
- package/lib/data-filter/columns/filter-column-number.component.d.ts +15 -0
- package/lib/data-filter/columns/filter-column-selection.component.d.ts +18 -0
- package/lib/data-filter/columns/filter-column-string.component.d.ts +15 -0
- package/lib/data-filter/filter-panel/filter-panel.component.d.ts +45 -0
- package/lib/data-filter/filter.class.d.ts +40 -0
- package/lib/data-filter/filter.module.d.ts +24 -0
- package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +25 -0
- package/lib/data-list/core/data-list.component.d.ts +15 -0
- package/lib/data-list/list/list.component.d.ts +40 -0
- package/lib/data-list/list/list.module.d.ts +11 -0
- package/lib/data-list/list/toolbar-list-view.component.d.ts +17 -0
- package/lib/data-source/datasource.component.d.ts +16 -0
- package/lib/data-source/datasource.module.d.ts +7 -0
- package/lib/data-source/read-param.d.ts +40 -0
- package/lib/date-picker/date-picker.component.d.ts +81 -0
- package/lib/date-picker/date-picker.module.d.ts +14 -0
- package/lib/dialog/dialog.component.d.ts +10 -11
- package/lib/dialog/dialog.module.d.ts +3 -6
- package/lib/dialog/dialog.service.d.ts +31 -31
- package/lib/{decorators → drawer}/content.component.d.ts +1 -2
- package/lib/drawer/drawer-container.component.d.ts +7 -10
- package/lib/drawer/drawer.component.d.ts +22 -21
- package/lib/drawer/drawer.module.d.ts +2 -2
- package/lib/dropdown/dropdown.component.d.ts +38 -0
- package/lib/dropdown/dropdown.module.d.ts +7 -7
- package/lib/fieldset/fieldset.component.d.ts +11 -0
- package/lib/fieldset/fieldset.module.d.ts +8 -0
- package/lib/form-group/form-group.component.d.ts +14 -0
- package/lib/form-group/form-group.module.d.ts +8 -0
- package/lib/label/label.component.d.ts +6 -9
- package/lib/loading/loading-indicator.component.d.ts +9 -0
- package/lib/loading/loading-panel.component.d.ts +13 -0
- package/lib/loading/loading.module.d.ts +5 -8
- package/lib/loading/loading.service.d.ts +4 -39
- package/lib/menu/menu-item.component.d.ts +18 -0
- package/lib/menu/menu.component.d.ts +30 -34
- package/lib/menu/menu.module.d.ts +5 -6
- package/lib/menu/menu2.component.d.ts +21 -0
- package/lib/number-box/number-box.component.d.ts +49 -72
- package/lib/number-box/number-box.module.d.ts +3 -6
- package/lib/page/content.component.d.ts +8 -0
- package/lib/page/{page-footer.component.d.ts → footer.component.d.ts} +1 -3
- package/lib/page/page.component.d.ts +9 -7
- package/lib/page/page.module.d.ts +6 -3
- package/lib/panel-box/panel-box.component.d.ts +19 -0
- package/lib/panel-box/panel-box.module.d.ts +8 -0
- package/lib/password-box/password-box.component.d.ts +8 -19
- package/lib/password-box/password-box.module.d.ts +3 -5
- package/lib/{base → popover}/custom-cdk-overlay.service.d.ts +0 -0
- package/lib/{base → popover}/overlay.service.d.ts +2 -3
- package/lib/popover/popover.component.d.ts +23 -42
- package/lib/popup/popup.component.d.ts +26 -32
- package/lib/popup/popup.module.d.ts +3 -2
- package/lib/popup/popup.service.d.ts +9 -25
- package/lib/progress-bar/progress-bar.component.d.ts +4 -15
- package/lib/property-editor/editors/check-editor/check-editor.d.ts +19 -0
- package/lib/property-editor/editors/check-editor/check.module.d.ts +11 -0
- package/lib/property-editor/editors/color-editor/color.editor.d.ts +13 -0
- package/lib/property-editor/editors/color-editor/color.module.d.ts +12 -0
- package/lib/property-editor/editors/column-editor/column.editor.d.ts +34 -0
- package/lib/property-editor/editors/column-editor/column.module.d.ts +20 -0
- package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +44 -0
- package/lib/property-editor/editors/conditional-color-editor/conditional-color.module.d.ts +19 -0
- package/lib/property-editor/editors/date-editor/date.editor.d.ts +28 -0
- package/lib/property-editor/editors/date-editor/date.module.d.ts +12 -0
- package/lib/property-editor/editors/number-editor/number.editor.d.ts +20 -0
- package/lib/property-editor/editors/number-editor/number.module.d.ts +12 -0
- package/lib/property-editor/editors/range-editor/range.editor.d.ts +29 -0
- package/lib/property-editor/editors/range-editor/range.module.d.ts +18 -0
- package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +29 -0
- package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +29 -0
- package/lib/property-editor/editors/selectbox-editor/selectbox.module.d.ts +14 -0
- package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +25 -0
- package/lib/property-editor/editors/selection-editor/selection.module.d.ts +11 -0
- package/lib/property-editor/editors/switch-editor/number.editor.d.ts +11 -0
- package/lib/property-editor/editors/switch-editor/number.module.d.ts +13 -0
- package/lib/property-editor/editors/text-editor/text.editor.d.ts +18 -0
- package/lib/property-editor/editors/text-editor/text.module.d.ts +12 -0
- package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +17 -0
- package/lib/property-editor/editors/textarea-editor/textarea.module.d.ts +12 -0
- package/lib/property-editor/editors/time-editor/time.editor.d.ts +17 -0
- package/lib/property-editor/editors/time-editor/time.module.d.ts +12 -0
- package/lib/property-editor/property-editor-renderer.directive.d.ts +30 -0
- package/lib/property-editor/property-editor.class.d.ts +92 -0
- package/lib/property-editor/property-editor.module.d.ts +21 -0
- package/lib/query-builder/query-builder-group.component.d.ts +33 -0
- package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +35 -0
- package/lib/query-builder/query-builder-rule.component.d.ts +45 -0
- package/lib/query-builder/query-builder.class.d.ts +45 -0
- package/lib/query-builder/query-builder.component.d.ts +27 -0
- package/lib/query-builder/query-builder.module.d.ts +22 -0
- package/lib/query-builder/query-builder.service.d.ts +18 -0
- package/lib/search-bar/search-bar.component.d.ts +50 -0
- package/lib/search-bar/search-bar.module.d.ts +17 -0
- package/lib/searchbox/searchbox.component.d.ts +22 -0
- package/lib/searchbox/searchbox.module.d.ts +13 -0
- package/lib/selectbox/selectbox.component.d.ts +112 -70
- package/lib/selectbox/selectbox.module.d.ts +9 -14
- package/lib/selectbox/selectbox2.component.d.ts +103 -0
- package/lib/selection-list/selection-list.component.d.ts +27 -18
- package/lib/selection-list/selection-list.module.d.ts +1 -4
- package/lib/switch/switch.component.d.ts +17 -9
- package/lib/switch/switch.module.d.ts +1 -2
- package/lib/tab-page/tab-page-Renderer.component.d.ts +16 -0
- package/lib/tab-page/tab-page-host.component.d.ts +25 -0
- package/lib/tab-page/tab-page.module.d.ts +10 -0
- package/lib/tab-page/tab-page.service.d.ts +30 -0
- package/lib/tab-strip/tab-strip.component.d.ts +28 -0
- package/lib/tab-strip/tab-strip.module.d.ts +8 -0
- package/lib/tab-view/dynamic-tabs.directive.d.ts +16 -0
- package/lib/tab-view/tab-view.component.d.ts +26 -0
- package/lib/tab-view/tab-view.module.d.ts +10 -0
- package/lib/tab-view/tab.component.d.ts +12 -0
- package/lib/textarea/textarea.component.d.ts +8 -8
- package/lib/textarea/textarea.module.d.ts +4 -5
- package/lib/textbox/textbox.component.d.ts +12 -12
- package/lib/textbox/textbox.module.d.ts +4 -6
- package/lib/time-picker/time-picker.component.d.ts +52 -0
- package/lib/time-picker/time-picker.module.d.ts +11 -0
- package/lib/toast/toast-message/toast-message.component.d.ts +18 -0
- package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +8 -0
- package/lib/toast/toast.module.d.ts +4 -4
- package/lib/toast/toast.service.d.ts +13 -13
- package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +12 -0
- package/lib/toolbar/menu/toolbar-menu.component.d.ts +24 -0
- package/lib/toolbar/search/toolbar-search.component.d.ts +16 -0
- package/lib/toolbar/title/toolbar-title.component.d.ts +9 -0
- package/lib/toolbar/toolbar-item.d.ts +3 -0
- package/lib/toolbar/toolbar.component.d.ts +8 -0
- package/lib/toolbar/toolbar.module.d.ts +14 -0
- package/lib/tooltip/tooltip.directive.d.ts +16 -13
- package/lib/tooltip/tooltip.module.d.ts +3 -5
- package/lib/tree-side-menu/tree-side-menu.component.d.ts +111 -0
- package/lib/tree-side-menu/tree-side-menu.module.d.ts +11 -0
- package/lib/tree-view/tree-view.component.d.ts +117 -0
- package/lib/tree-view/tree-view.module.d.ts +11 -0
- package/lib/upload-file/upload-file.component.d.ts +38 -0
- package/lib/upload-file/upload-file.events.d.ts +10 -0
- package/lib/upload-file/upload-file.module.d.ts +13 -0
- package/lib/validation/validation-form.component.d.ts +19 -0
- package/lib/validation/validation-rule.widget.d.ts +8 -10
- package/lib/validation/validation.class.d.ts +1 -2
- package/lib/validation/validation.component.d.ts +25 -0
- package/lib/validation/validation.module.d.ts +5 -3
- package/package.json +6 -8
- package/public-api.d.ts +155 -49
- package/acorex-components.d.ts.map +0 -1
- package/esm2020/lib/action-sheet/action-sheet-item.component.mjs +0 -37
- package/esm2020/lib/action-sheet/action-sheet.component.mjs +0 -87
- package/esm2020/lib/action-sheet/action-sheet.module.mjs +0 -22
- package/esm2020/lib/action-sheet/index.mjs +0 -4
- package/esm2020/lib/alert/alert-button.component.mjs +0 -51
- package/esm2020/lib/alert/alert-content.component.mjs +0 -21
- package/esm2020/lib/alert/alert-footer.component.mjs +0 -27
- package/esm2020/lib/alert/alert-suffix.component.mjs +0 -27
- package/esm2020/lib/alert/alert-title.component.mjs +0 -23
- package/esm2020/lib/alert/alert.component.mjs +0 -123
- package/esm2020/lib/alert/alert.module.mjs +0 -44
- package/esm2020/lib/alert/index.mjs +0 -8
- package/esm2020/lib/avatar/avatar-group.component.mjs +0 -17
- package/esm2020/lib/avatar/avatar.component.mjs +0 -42
- package/esm2020/lib/avatar/avatar.module.mjs +0 -22
- package/esm2020/lib/avatar/index.mjs +0 -4
- package/esm2020/lib/badge/badge.component.mjs +0 -28
- package/esm2020/lib/badge/badge.module.mjs +0 -21
- package/esm2020/lib/badge/index.mjs +0 -3
- package/esm2020/lib/base/common.module.mjs +0 -19
- package/esm2020/lib/base/custom-cdk-overlay.service.mjs +0 -47
- package/esm2020/lib/base/drawing.class.mjs +0 -11
- package/esm2020/lib/base/index.mjs +0 -9
- package/esm2020/lib/base/infinite-scroll.directive.mjs +0 -63
- package/esm2020/lib/base/mixin/base-components.class.mjs +0 -100
- package/esm2020/lib/base/mixin/base-menu-mixin.class.mjs +0 -135
- package/esm2020/lib/base/mixin/button-mixin.class.mjs +0 -91
- package/esm2020/lib/base/mixin/clickable-mixin.class.mjs +0 -24
- package/esm2020/lib/base/mixin/color-look-mixing.class.mjs +0 -48
- package/esm2020/lib/base/mixin/constratctor.mjs +0 -2
- package/esm2020/lib/base/mixin/datalist-component.class.mjs +0 -148
- package/esm2020/lib/base/mixin/datalist.class.mjs +0 -3
- package/esm2020/lib/base/mixin/dropdown-mixin.class.mjs +0 -99
- package/esm2020/lib/base/mixin/index.mjs +0 -3
- package/esm2020/lib/base/mixin/interactive-mixin.class.mjs +0 -84
- package/esm2020/lib/base/mixin/loading-mixin.class.mjs +0 -18
- package/esm2020/lib/base/mixin/mixin.class.mjs +0 -27
- package/esm2020/lib/base/mixin/selection-component.class.mjs +0 -181
- package/esm2020/lib/base/mixin/sizable-mixin.class.mjs +0 -18
- package/esm2020/lib/base/mixin/textbox-mixin.class.mjs +0 -34
- package/esm2020/lib/base/mixin/value-mixin.class.mjs +0 -209
- package/esm2020/lib/base/overlay.service.mjs +0 -91
- package/esm2020/lib/base/responsive.directive.mjs +0 -34
- package/esm2020/lib/base/styles.class.mjs +0 -4
- package/esm2020/lib/breadcrumbs/breadcrumbs-item.class.mjs +0 -2
- package/esm2020/lib/breadcrumbs/breadcrumbs-item.component.mjs +0 -20
- package/esm2020/lib/breadcrumbs/breadcrumbs.component.mjs +0 -18
- package/esm2020/lib/breadcrumbs/breadcrumbs.module.mjs +0 -20
- package/esm2020/lib/breadcrumbs/index.mjs +0 -5
- package/esm2020/lib/button/button-group.component.mjs +0 -124
- package/esm2020/lib/button/button-item.class.mjs +0 -2
- package/esm2020/lib/button/button-item.component.mjs +0 -80
- package/esm2020/lib/button/index.mjs +0 -6
- package/esm2020/lib/calendar/calendar.class.mjs +0 -126
- package/esm2020/lib/calendar/calendar.component.mjs +0 -279
- package/esm2020/lib/calendar/calendar.module.mjs +0 -27
- package/esm2020/lib/calendar/index.mjs +0 -4
- package/esm2020/lib/calendar/inline-calendar.component.mjs +0 -39
- package/esm2020/lib/carousel/carousel-arrows.component.mjs +0 -56
- package/esm2020/lib/carousel/carousel-item.component.mjs +0 -21
- package/esm2020/lib/carousel/carousel-pager.component.mjs +0 -74
- package/esm2020/lib/carousel/carousel-splidejs.class.mjs +0 -91
- package/esm2020/lib/carousel/carousel.class.mjs +0 -10
- package/esm2020/lib/carousel/carousel.component.mjs +0 -438
- package/esm2020/lib/carousel/carousel.module.mjs +0 -24
- package/esm2020/lib/carousel/index.mjs +0 -7
- package/esm2020/lib/checkbox/index.mjs +0 -3
- package/esm2020/lib/collapse/collapse-group.component.mjs +0 -50
- package/esm2020/lib/collapse/collapse.component.mjs +0 -42
- package/esm2020/lib/collapse/collapse.module.mjs +0 -20
- package/esm2020/lib/collapse/index.mjs +0 -4
- package/esm2020/lib/datalist/datalist.component.mjs +0 -75
- package/esm2020/lib/datalist/datalist.module.mjs +0 -24
- package/esm2020/lib/datalist/index.mjs +0 -3
- package/esm2020/lib/datepicker/datepicker.component.mjs +0 -185
- package/esm2020/lib/datepicker/datepicker.module.mjs +0 -47
- package/esm2020/lib/datepicker/index.mjs +0 -3
- package/esm2020/lib/decorators/addon.component.mjs +0 -20
- package/esm2020/lib/decorators/content.component.mjs +0 -26
- package/esm2020/lib/decorators/decorators.module.mjs +0 -25
- package/esm2020/lib/decorators/header.component.mjs +0 -26
- package/esm2020/lib/decorators/index.mjs +0 -8
- package/esm2020/lib/decorators/prefix.component.mjs +0 -26
- package/esm2020/lib/decorators/suffix.component.mjs +0 -26
- package/esm2020/lib/dialog/dialog.class.mjs +0 -2
- package/esm2020/lib/dialog/index.mjs +0 -5
- package/esm2020/lib/drawer/drawer-content.component.mjs +0 -27
- package/esm2020/lib/drawer/index.mjs +0 -5
- package/esm2020/lib/dropdown/dropdown-panel.component.mjs +0 -80
- package/esm2020/lib/dropdown/index.mjs +0 -3
- package/esm2020/lib/form/form-field.component.mjs +0 -20
- package/esm2020/lib/form/form-field.module.mjs +0 -21
- package/esm2020/lib/form/form-hint.component.mjs +0 -20
- package/esm2020/lib/form/form.component.mjs +0 -59
- package/esm2020/lib/form/index.mjs +0 -5
- package/esm2020/lib/icon/icon.component.mjs +0 -28
- package/esm2020/lib/icon/icon.module.mjs +0 -21
- package/esm2020/lib/icon/index.mjs +0 -3
- package/esm2020/lib/input-mask/index.mjs +0 -3
- package/esm2020/lib/input-mask/input-mask.component.mjs +0 -56
- package/esm2020/lib/input-mask/input-mask.module.mjs +0 -24
- package/esm2020/lib/label/index.mjs +0 -3
- package/esm2020/lib/loading/index.mjs +0 -6
- package/esm2020/lib/loading/loading-spinner.component.mjs +0 -35
- package/esm2020/lib/loading/loading.component.mjs +0 -62
- package/esm2020/lib/loading/loading.directive.mjs +0 -67
- package/esm2020/lib/menu/index.mjs +0 -3
- package/esm2020/lib/number-box/index.mjs +0 -3
- package/esm2020/lib/page/base-page.class.mjs +0 -86
- package/esm2020/lib/page/index.mjs +0 -6
- package/esm2020/lib/page/page-footer.component.mjs +0 -28
- package/esm2020/lib/page/page-header.component.mjs +0 -28
- package/esm2020/lib/password-box/index.mjs +0 -3
- package/esm2020/lib/picker/index.mjs +0 -3
- package/esm2020/lib/picker/picker.component.mjs +0 -45
- package/esm2020/lib/picker/picker.module.mjs +0 -20
- package/esm2020/lib/popover/index.mjs +0 -3
- package/esm2020/lib/popup/index.mjs +0 -4
- package/esm2020/lib/progress-bar/index.mjs +0 -3
- package/esm2020/lib/radio/index.mjs +0 -3
- package/esm2020/lib/radio/radio.component.mjs +0 -34
- package/esm2020/lib/radio/radio.module.mjs +0 -22
- package/esm2020/lib/range-slider/index.mjs +0 -3
- package/esm2020/lib/range-slider/range-slider.component.mjs +0 -16
- package/esm2020/lib/range-slider/range-slider.module.mjs +0 -21
- package/esm2020/lib/rating/index.mjs +0 -3
- package/esm2020/lib/rating/rating.component.mjs +0 -41
- package/esm2020/lib/rating/rating.component.module.mjs +0 -19
- package/esm2020/lib/result/index.mjs +0 -3
- package/esm2020/lib/result/result.component.mjs +0 -23
- package/esm2020/lib/result/result.module.mjs +0 -19
- package/esm2020/lib/selectbox/index.mjs +0 -3
- package/esm2020/lib/selection-list/index.mjs +0 -3
- package/esm2020/lib/switch/index.mjs +0 -3
- package/esm2020/lib/tabs/index.mjs +0 -6
- package/esm2020/lib/tabs/tab-content.directive.mjs +0 -29
- package/esm2020/lib/tabs/tab-item.component.mjs +0 -121
- package/esm2020/lib/tabs/tabs.class.mjs +0 -4
- package/esm2020/lib/tabs/tabs.component.mjs +0 -95
- package/esm2020/lib/tabs/tabs.module.mjs +0 -25
- package/esm2020/lib/textarea/index.mjs +0 -3
- package/esm2020/lib/textbox/index.mjs +0 -3
- package/esm2020/lib/time-box/index.mjs +0 -3
- package/esm2020/lib/time-box/time-box.component.mjs +0 -262
- package/esm2020/lib/time-box/time-box.module.mjs +0 -32
- package/esm2020/lib/toast/index.mjs +0 -5
- package/esm2020/lib/toast/toast.class.mjs +0 -2
- package/esm2020/lib/toast/toast.component.mjs +0 -52
- package/esm2020/lib/tooltip/index.mjs +0 -4
- package/esm2020/lib/tooltip/tooltip.component.mjs +0 -38
- package/esm2020/lib/treeview/index.mjs +0 -3
- package/esm2020/lib/treeview/tree-view.component.mjs +0 -108
- package/esm2020/lib/treeview/tree-view.module.mjs +0 -20
- package/esm2020/lib/validation/index.mjs +0 -3
- package/lib/action-sheet/action-sheet-item.component.d.ts +0 -15
- package/lib/action-sheet/action-sheet-item.component.d.ts.map +0 -1
- package/lib/action-sheet/action-sheet.component.d.ts +0 -19
- package/lib/action-sheet/action-sheet.component.d.ts.map +0 -1
- package/lib/action-sheet/action-sheet.module.d.ts +0 -11
- package/lib/action-sheet/action-sheet.module.d.ts.map +0 -1
- package/lib/action-sheet/index.d.ts +0 -3
- package/lib/action-sheet/index.d.ts.map +0 -1
- package/lib/alert/alert-button.component.d.ts +0 -13
- package/lib/alert/alert-button.component.d.ts.map +0 -1
- package/lib/alert/alert-content.component.d.ts +0 -5
- package/lib/alert/alert-content.component.d.ts.map +0 -1
- package/lib/alert/alert-footer.component.d.ts +0 -5
- package/lib/alert/alert-footer.component.d.ts.map +0 -1
- package/lib/alert/alert-suffix.component.d.ts +0 -5
- package/lib/alert/alert-suffix.component.d.ts.map +0 -1
- package/lib/alert/alert-title.component.d.ts +0 -5
- package/lib/alert/alert-title.component.d.ts.map +0 -1
- package/lib/alert/alert.component.d.ts +0 -75
- package/lib/alert/alert.component.d.ts.map +0 -1
- package/lib/alert/alert.module.d.ts +0 -14
- package/lib/alert/alert.module.d.ts.map +0 -1
- package/lib/alert/index.d.ts +0 -7
- package/lib/alert/index.d.ts.map +0 -1
- package/lib/avatar/avatar-group.component.d.ts +0 -8
- package/lib/avatar/avatar-group.component.d.ts.map +0 -1
- package/lib/avatar/avatar.component.d.ts +0 -22
- package/lib/avatar/avatar.component.d.ts.map +0 -1
- package/lib/avatar/avatar.module.d.ts +0 -9
- package/lib/avatar/avatar.module.d.ts.map +0 -1
- package/lib/avatar/index.d.ts +0 -3
- package/lib/avatar/index.d.ts.map +0 -1
- package/lib/badge/badge.component.d.ts +0 -41
- package/lib/badge/badge.component.d.ts.map +0 -1
- package/lib/badge/badge.module.d.ts +0 -8
- package/lib/badge/badge.module.d.ts.map +0 -1
- package/lib/badge/index.d.ts +0 -2
- package/lib/badge/index.d.ts.map +0 -1
- package/lib/base/common.module.d.ts +0 -8
- package/lib/base/common.module.d.ts.map +0 -1
- package/lib/base/custom-cdk-overlay.service.d.ts.map +0 -1
- package/lib/base/drawing.class.d.ts +0 -9
- package/lib/base/drawing.class.d.ts.map +0 -1
- package/lib/base/events.class.d.ts.map +0 -1
- package/lib/base/index.d.ts +0 -8
- package/lib/base/index.d.ts.map +0 -1
- package/lib/base/infinite-scroll.directive.d.ts +0 -25
- package/lib/base/infinite-scroll.directive.d.ts.map +0 -1
- package/lib/base/mixin/base-components.class.d.ts +0 -85
- package/lib/base/mixin/base-components.class.d.ts.map +0 -1
- package/lib/base/mixin/base-menu-mixin.class.d.ts +0 -51
- package/lib/base/mixin/base-menu-mixin.class.d.ts.map +0 -1
- package/lib/base/mixin/button-mixin.class.d.ts +0 -63
- package/lib/base/mixin/button-mixin.class.d.ts.map +0 -1
- package/lib/base/mixin/clickable-mixin.class.d.ts +0 -35
- package/lib/base/mixin/clickable-mixin.class.d.ts.map +0 -1
- package/lib/base/mixin/color-look-mixing.class.d.ts +0 -43
- package/lib/base/mixin/color-look-mixing.class.d.ts.map +0 -1
- package/lib/base/mixin/constratctor.d.ts +0 -4
- package/lib/base/mixin/constratctor.d.ts.map +0 -1
- package/lib/base/mixin/datalist-component.class.d.ts +0 -58
- package/lib/base/mixin/datalist-component.class.d.ts.map +0 -1
- package/lib/base/mixin/datalist.class.d.ts +0 -11
- package/lib/base/mixin/datalist.class.d.ts.map +0 -1
- package/lib/base/mixin/dropdown-mixin.class.d.ts +0 -48
- package/lib/base/mixin/dropdown-mixin.class.d.ts.map +0 -1
- package/lib/base/mixin/index.d.ts +0 -2
- package/lib/base/mixin/index.d.ts.map +0 -1
- package/lib/base/mixin/interactive-mixin.class.d.ts +0 -59
- package/lib/base/mixin/interactive-mixin.class.d.ts.map +0 -1
- package/lib/base/mixin/loading-mixin.class.d.ts +0 -39
- package/lib/base/mixin/loading-mixin.class.d.ts.map +0 -1
- package/lib/base/mixin/mixin.class.d.ts +0 -686
- package/lib/base/mixin/mixin.class.d.ts.map +0 -1
- package/lib/base/mixin/selection-component.class.d.ts +0 -60
- package/lib/base/mixin/selection-component.class.d.ts.map +0 -1
- package/lib/base/mixin/sizable-mixin.class.d.ts +0 -33
- package/lib/base/mixin/sizable-mixin.class.d.ts.map +0 -1
- package/lib/base/mixin/textbox-mixin.class.d.ts +0 -56
- package/lib/base/mixin/textbox-mixin.class.d.ts.map +0 -1
- package/lib/base/mixin/value-mixin.class.d.ts +0 -64
- package/lib/base/mixin/value-mixin.class.d.ts.map +0 -1
- package/lib/base/overlay.service.d.ts.map +0 -1
- package/lib/base/responsive.directive.d.ts +0 -10
- package/lib/base/responsive.directive.d.ts.map +0 -1
- package/lib/base/styles.class.d.ts +0 -17
- package/lib/base/styles.class.d.ts.map +0 -1
- package/lib/breadcrumbs/breadcrumbs-item.class.d.ts +0 -9
- package/lib/breadcrumbs/breadcrumbs-item.class.d.ts.map +0 -1
- package/lib/breadcrumbs/breadcrumbs-item.component.d.ts +0 -12
- package/lib/breadcrumbs/breadcrumbs-item.component.d.ts.map +0 -1
- package/lib/breadcrumbs/breadcrumbs.component.d.ts +0 -11
- package/lib/breadcrumbs/breadcrumbs.component.d.ts.map +0 -1
- package/lib/breadcrumbs/breadcrumbs.module.d.ts +0 -9
- package/lib/breadcrumbs/breadcrumbs.module.d.ts.map +0 -1
- package/lib/breadcrumbs/index.d.ts +0 -4
- package/lib/breadcrumbs/index.d.ts.map +0 -1
- package/lib/button/button-group.component.d.ts +0 -36
- package/lib/button/button-group.component.d.ts.map +0 -1
- package/lib/button/button-item.class.d.ts +0 -22
- package/lib/button/button-item.class.d.ts.map +0 -1
- package/lib/button/button-item.component.d.ts +0 -79
- package/lib/button/button-item.component.d.ts.map +0 -1
- package/lib/button/button.component.d.ts.map +0 -1
- package/lib/button/button.module.d.ts.map +0 -1
- package/lib/button/index.d.ts +0 -5
- package/lib/button/index.d.ts.map +0 -1
- package/lib/calendar/calendar.class.d.ts +0 -50
- package/lib/calendar/calendar.class.d.ts.map +0 -1
- package/lib/calendar/calendar.component.d.ts +0 -41
- package/lib/calendar/calendar.component.d.ts.map +0 -1
- package/lib/calendar/calendar.module.d.ts +0 -14
- package/lib/calendar/calendar.module.d.ts.map +0 -1
- package/lib/calendar/index.d.ts +0 -3
- package/lib/calendar/index.d.ts.map +0 -1
- package/lib/calendar/inline-calendar.component.d.ts +0 -14
- package/lib/calendar/inline-calendar.component.d.ts.map +0 -1
- package/lib/carousel/carousel-arrows.component.d.ts +0 -15
- package/lib/carousel/carousel-arrows.component.d.ts.map +0 -1
- package/lib/carousel/carousel-item.component.d.ts +0 -8
- package/lib/carousel/carousel-item.component.d.ts.map +0 -1
- package/lib/carousel/carousel-pager.component.d.ts +0 -22
- package/lib/carousel/carousel-pager.component.d.ts.map +0 -1
- package/lib/carousel/carousel-splidejs.class.d.ts +0 -18
- package/lib/carousel/carousel-splidejs.class.d.ts.map +0 -1
- package/lib/carousel/carousel.class.d.ts +0 -71
- package/lib/carousel/carousel.class.d.ts.map +0 -1
- package/lib/carousel/carousel.component.d.ts +0 -110
- package/lib/carousel/carousel.component.d.ts.map +0 -1
- package/lib/carousel/carousel.module.d.ts +0 -11
- package/lib/carousel/carousel.module.d.ts.map +0 -1
- package/lib/carousel/index.d.ts +0 -6
- package/lib/carousel/index.d.ts.map +0 -1
- package/lib/checkbox/checkbox.component.d.ts.map +0 -1
- package/lib/checkbox/checkbox.module.d.ts.map +0 -1
- package/lib/checkbox/index.d.ts +0 -2
- package/lib/checkbox/index.d.ts.map +0 -1
- package/lib/collapse/collapse-group.component.d.ts +0 -15
- package/lib/collapse/collapse-group.component.d.ts.map +0 -1
- package/lib/collapse/collapse.component.d.ts +0 -16
- package/lib/collapse/collapse.component.d.ts.map +0 -1
- package/lib/collapse/collapse.module.d.ts +0 -9
- package/lib/collapse/collapse.module.d.ts.map +0 -1
- package/lib/collapse/index.d.ts +0 -3
- package/lib/collapse/index.d.ts.map +0 -1
- package/lib/datalist/datalist.component.d.ts +0 -25
- package/lib/datalist/datalist.component.d.ts.map +0 -1
- package/lib/datalist/datalist.module.d.ts +0 -11
- package/lib/datalist/datalist.module.d.ts.map +0 -1
- package/lib/datalist/index.d.ts +0 -2
- package/lib/datalist/index.d.ts.map +0 -1
- package/lib/datepicker/datepicker.component.d.ts +0 -151
- package/lib/datepicker/datepicker.component.d.ts.map +0 -1
- package/lib/datepicker/datepicker.module.d.ts +0 -16
- package/lib/datepicker/datepicker.module.d.ts.map +0 -1
- package/lib/datepicker/index.d.ts +0 -2
- package/lib/datepicker/index.d.ts.map +0 -1
- package/lib/decorators/addon.component.d.ts +0 -8
- package/lib/decorators/addon.component.d.ts.map +0 -1
- package/lib/decorators/content.component.d.ts.map +0 -1
- package/lib/decorators/decorators.module.d.ts +0 -12
- package/lib/decorators/decorators.module.d.ts.map +0 -1
- package/lib/decorators/header.component.d.ts +0 -8
- package/lib/decorators/header.component.d.ts.map +0 -1
- package/lib/decorators/index.d.ts +0 -7
- package/lib/decorators/index.d.ts.map +0 -1
- package/lib/decorators/prefix.component.d.ts +0 -8
- package/lib/decorators/prefix.component.d.ts.map +0 -1
- package/lib/decorators/suffix.component.d.ts +0 -8
- package/lib/decorators/suffix.component.d.ts.map +0 -1
- package/lib/dialog/dialog.class.d.ts +0 -12
- package/lib/dialog/dialog.class.d.ts.map +0 -1
- package/lib/dialog/dialog.component.d.ts.map +0 -1
- package/lib/dialog/dialog.module.d.ts.map +0 -1
- package/lib/dialog/dialog.service.d.ts.map +0 -1
- package/lib/dialog/index.d.ts +0 -4
- package/lib/dialog/index.d.ts.map +0 -1
- package/lib/drawer/drawer-container.component.d.ts.map +0 -1
- package/lib/drawer/drawer-content.component.d.ts +0 -8
- package/lib/drawer/drawer-content.component.d.ts.map +0 -1
- package/lib/drawer/drawer.component.d.ts.map +0 -1
- package/lib/drawer/drawer.module.d.ts.map +0 -1
- package/lib/drawer/index.d.ts +0 -4
- package/lib/drawer/index.d.ts.map +0 -1
- package/lib/dropdown/dropdown-panel.component.d.ts +0 -27
- package/lib/dropdown/dropdown-panel.component.d.ts.map +0 -1
- package/lib/dropdown/dropdown.module.d.ts.map +0 -1
- package/lib/dropdown/index.d.ts +0 -2
- package/lib/dropdown/index.d.ts.map +0 -1
- package/lib/form/form-field.component.d.ts +0 -8
- package/lib/form/form-field.component.d.ts.map +0 -1
- package/lib/form/form-field.module.d.ts +0 -10
- package/lib/form/form-field.module.d.ts.map +0 -1
- package/lib/form/form-hint.component.d.ts +0 -8
- package/lib/form/form-hint.component.d.ts.map +0 -1
- package/lib/form/form.component.d.ts +0 -21
- package/lib/form/form.component.d.ts.map +0 -1
- package/lib/form/index.d.ts +0 -4
- package/lib/form/index.d.ts.map +0 -1
- package/lib/icon/icon.component.d.ts +0 -10
- package/lib/icon/icon.component.d.ts.map +0 -1
- package/lib/icon/icon.module.d.ts +0 -8
- package/lib/icon/icon.module.d.ts.map +0 -1
- package/lib/icon/index.d.ts +0 -2
- package/lib/icon/index.d.ts.map +0 -1
- package/lib/input-mask/index.d.ts +0 -2
- package/lib/input-mask/index.d.ts.map +0 -1
- package/lib/input-mask/input-mask.component.d.ts +0 -25
- package/lib/input-mask/input-mask.component.d.ts.map +0 -1
- package/lib/input-mask/input-mask.module.d.ts +0 -10
- package/lib/input-mask/input-mask.module.d.ts.map +0 -1
- package/lib/label/index.d.ts +0 -2
- package/lib/label/index.d.ts.map +0 -1
- package/lib/label/label.component.d.ts.map +0 -1
- package/lib/label/label.module.d.ts.map +0 -1
- package/lib/loading/index.d.ts +0 -5
- package/lib/loading/index.d.ts.map +0 -1
- package/lib/loading/loading-spinner.component.d.ts +0 -6
- package/lib/loading/loading-spinner.component.d.ts.map +0 -1
- package/lib/loading/loading.component.d.ts +0 -21
- package/lib/loading/loading.component.d.ts.map +0 -1
- package/lib/loading/loading.directive.d.ts +0 -22
- package/lib/loading/loading.directive.d.ts.map +0 -1
- package/lib/loading/loading.module.d.ts.map +0 -1
- package/lib/loading/loading.service.d.ts.map +0 -1
- package/lib/menu/index.d.ts +0 -2
- package/lib/menu/index.d.ts.map +0 -1
- package/lib/menu/menu.component.d.ts.map +0 -1
- package/lib/menu/menu.module.d.ts.map +0 -1
- package/lib/number-box/index.d.ts +0 -2
- package/lib/number-box/index.d.ts.map +0 -1
- package/lib/number-box/number-box.component.d.ts.map +0 -1
- package/lib/number-box/number-box.module.d.ts.map +0 -1
- package/lib/page/base-page.class.d.ts +0 -45
- package/lib/page/base-page.class.d.ts.map +0 -1
- package/lib/page/index.d.ts +0 -5
- package/lib/page/index.d.ts.map +0 -1
- package/lib/page/page-footer.component.d.ts.map +0 -1
- package/lib/page/page-header.component.d.ts +0 -7
- package/lib/page/page-header.component.d.ts.map +0 -1
- package/lib/page/page.component.d.ts.map +0 -1
- package/lib/page/page.module.d.ts.map +0 -1
- package/lib/password-box/index.d.ts +0 -2
- package/lib/password-box/index.d.ts.map +0 -1
- package/lib/password-box/password-box.component.d.ts.map +0 -1
- package/lib/password-box/password-box.module.d.ts.map +0 -1
- package/lib/picker/index.d.ts +0 -2
- package/lib/picker/index.d.ts.map +0 -1
- package/lib/picker/picker.component.d.ts +0 -25
- package/lib/picker/picker.component.d.ts.map +0 -1
- package/lib/picker/picker.module.d.ts +0 -9
- package/lib/picker/picker.module.d.ts.map +0 -1
- package/lib/popover/index.d.ts +0 -2
- package/lib/popover/index.d.ts.map +0 -1
- package/lib/popover/popover.component.d.ts.map +0 -1
- package/lib/popover/popover.module.d.ts.map +0 -1
- package/lib/popup/index.d.ts +0 -3
- package/lib/popup/index.d.ts.map +0 -1
- package/lib/popup/popup.component.d.ts.map +0 -1
- package/lib/popup/popup.module.d.ts.map +0 -1
- package/lib/popup/popup.service.d.ts.map +0 -1
- package/lib/progress-bar/index.d.ts +0 -2
- package/lib/progress-bar/index.d.ts.map +0 -1
- package/lib/progress-bar/progress-bar.component.d.ts.map +0 -1
- package/lib/progress-bar/progress-bar.module.d.ts.map +0 -1
- package/lib/radio/index.d.ts +0 -2
- package/lib/radio/index.d.ts.map +0 -1
- package/lib/radio/radio.component.d.ts +0 -17
- package/lib/radio/radio.component.d.ts.map +0 -1
- package/lib/radio/radio.module.d.ts +0 -9
- package/lib/radio/radio.module.d.ts.map +0 -1
- package/lib/range-slider/index.d.ts +0 -2
- package/lib/range-slider/index.d.ts.map +0 -1
- package/lib/range-slider/range-slider.component.d.ts +0 -8
- package/lib/range-slider/range-slider.component.d.ts.map +0 -1
- package/lib/range-slider/range-slider.module.d.ts +0 -8
- package/lib/range-slider/range-slider.module.d.ts.map +0 -1
- package/lib/rating/index.d.ts +0 -2
- package/lib/rating/index.d.ts.map +0 -1
- package/lib/rating/rating.component.d.ts +0 -21
- package/lib/rating/rating.component.d.ts.map +0 -1
- package/lib/rating/rating.component.module.d.ts +0 -8
- package/lib/rating/rating.component.module.d.ts.map +0 -1
- package/lib/result/index.d.ts +0 -2
- package/lib/result/index.d.ts.map +0 -1
- package/lib/result/result.component.d.ts +0 -12
- package/lib/result/result.component.d.ts.map +0 -1
- package/lib/result/result.module.d.ts +0 -8
- package/lib/result/result.module.d.ts.map +0 -1
- package/lib/selectbox/index.d.ts +0 -2
- package/lib/selectbox/index.d.ts.map +0 -1
- package/lib/selectbox/selectbox.component.d.ts.map +0 -1
- package/lib/selectbox/selectbox.module.d.ts.map +0 -1
- package/lib/selection-list/index.d.ts +0 -2
- package/lib/selection-list/index.d.ts.map +0 -1
- package/lib/selection-list/selection-list.component.d.ts.map +0 -1
- package/lib/selection-list/selection-list.module.d.ts.map +0 -1
- package/lib/switch/index.d.ts +0 -2
- package/lib/switch/index.d.ts.map +0 -1
- package/lib/switch/switch.component.d.ts.map +0 -1
- package/lib/switch/switch.module.d.ts.map +0 -1
- package/lib/tabs/index.d.ts +0 -5
- package/lib/tabs/index.d.ts.map +0 -1
- package/lib/tabs/tab-content.directive.d.ts +0 -11
- package/lib/tabs/tab-content.directive.d.ts.map +0 -1
- package/lib/tabs/tab-item.component.d.ts +0 -49
- package/lib/tabs/tab-item.component.d.ts.map +0 -1
- package/lib/tabs/tabs.class.d.ts +0 -6
- package/lib/tabs/tabs.class.d.ts.map +0 -1
- package/lib/tabs/tabs.component.d.ts +0 -24
- package/lib/tabs/tabs.component.d.ts.map +0 -1
- package/lib/tabs/tabs.module.d.ts +0 -12
- package/lib/tabs/tabs.module.d.ts.map +0 -1
- package/lib/textarea/index.d.ts +0 -2
- package/lib/textarea/index.d.ts.map +0 -1
- package/lib/textarea/textarea.component.d.ts.map +0 -1
- package/lib/textarea/textarea.module.d.ts.map +0 -1
- package/lib/textbox/index.d.ts +0 -2
- package/lib/textbox/index.d.ts.map +0 -1
- package/lib/textbox/textbox.component.d.ts.map +0 -1
- package/lib/textbox/textbox.module.d.ts.map +0 -1
- package/lib/time-box/index.d.ts +0 -2
- package/lib/time-box/index.d.ts.map +0 -1
- package/lib/time-box/time-box.component.d.ts +0 -48
- package/lib/time-box/time-box.component.d.ts.map +0 -1
- package/lib/time-box/time-box.module.d.ts +0 -11
- package/lib/time-box/time-box.module.d.ts.map +0 -1
- package/lib/toast/index.d.ts +0 -4
- package/lib/toast/index.d.ts.map +0 -1
- package/lib/toast/toast.class.d.ts +0 -14
- package/lib/toast/toast.class.d.ts.map +0 -1
- package/lib/toast/toast.component.d.ts +0 -24
- package/lib/toast/toast.component.d.ts.map +0 -1
- package/lib/toast/toast.module.d.ts.map +0 -1
- package/lib/toast/toast.service.d.ts.map +0 -1
- package/lib/tooltip/index.d.ts +0 -3
- package/lib/tooltip/index.d.ts.map +0 -1
- package/lib/tooltip/tooltip.component.d.ts +0 -10
- package/lib/tooltip/tooltip.component.d.ts.map +0 -1
- package/lib/tooltip/tooltip.directive.d.ts.map +0 -1
- package/lib/tooltip/tooltip.module.d.ts.map +0 -1
- package/lib/treeview/index.d.ts +0 -2
- package/lib/treeview/index.d.ts.map +0 -1
- package/lib/treeview/tree-view.component.d.ts +0 -33
- package/lib/treeview/tree-view.component.d.ts.map +0 -1
- package/lib/treeview/tree-view.module.d.ts +0 -9
- package/lib/treeview/tree-view.module.d.ts.map +0 -1
- package/lib/validation/index.d.ts +0 -2
- package/lib/validation/index.d.ts.map +0 -1
- package/lib/validation/validation-rule.widget.d.ts.map +0 -1
- package/lib/validation/validation.class.d.ts.map +0 -1
- package/lib/validation/validation.module.d.ts.map +0 -1
- package/public-api.d.ts.map +0 -1
|
@@ -1,330 +1,955 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
1
|
+
import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, EventEmitter, Output, ViewChild, ChangeDetectorRef, ElementRef, ContentChild, NgZone, TemplateRef } from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
4
|
+
import { AXTextBoxComponent } from '../textbox/textbox.component';
|
|
5
|
+
import { AXDropdownComponent } from '../dropdown/dropdown.component';
|
|
6
|
+
import { AXValidatableComponent } from '../base/element.class';
|
|
7
|
+
import { AXDataSourceComponent } from '../data-source/datasource.component';
|
|
8
|
+
import { AXValidation } from '../validation/validation.component';
|
|
9
|
+
import { AXBaseEvent } from '../base/events.class';
|
|
10
|
+
import { AXSearchBoxComponent } from '../searchbox/searchbox.component';
|
|
11
|
+
import { AXConfig } from '@acorex/core';
|
|
12
|
+
import { differenceBy } from 'lodash';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "
|
|
14
|
-
import * as i2 from "../
|
|
15
|
-
import * as i3 from "../
|
|
16
|
-
import * as i4 from "../
|
|
17
|
-
import * as i5 from "
|
|
18
|
-
import * as i6 from "
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
* The Button is a component which detects user interaction and triggers a corresponding event
|
|
26
|
-
*
|
|
27
|
-
* @category Components
|
|
28
|
-
*/
|
|
29
|
-
export class AXSelectBoxComponent extends AXBaseSelectionDropdownMixin {
|
|
30
|
-
/**
|
|
31
|
-
* @ignore
|
|
32
|
-
*/
|
|
33
|
-
constructor(_elementRef, _cdr, _zone, _platform) {
|
|
34
|
-
super(_elementRef, _cdr);
|
|
35
|
-
this._elementRef = _elementRef;
|
|
36
|
-
this._cdr = _cdr;
|
|
37
|
-
this._zone = _zone;
|
|
38
|
-
this._platform = _platform;
|
|
39
|
-
/**
|
|
40
|
-
* Defines the clearButton.
|
|
41
|
-
*/
|
|
42
|
-
this.clearButton = false;
|
|
43
|
-
this._searchSettings = { enabled: false, expr: null };
|
|
44
|
-
/**
|
|
45
|
-
* Defines the checkbox.
|
|
46
|
-
*/
|
|
47
|
-
this.checkbox = false;
|
|
48
|
-
this._isMobile = false;
|
|
49
|
-
this._forceFocus = false;
|
|
50
|
-
this._isMobile = this._platform.is('Mobile');
|
|
51
|
-
this._platform.resize.subscribe(() => {
|
|
52
|
-
this._isMobile = this._platform.is('Mobile');
|
|
53
|
-
this.popover.dispose();
|
|
54
|
-
this._popoverWidth = this._isMobile ? null : this._target.offsetWidth;
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Defines the search.
|
|
59
|
-
*/
|
|
60
|
-
get searchSettings() {
|
|
61
|
-
return this._searchSettings;
|
|
62
|
-
}
|
|
63
|
-
set searchSettings(v) {
|
|
64
|
-
this._searchSettings = v || { enabled: false, expr: null };
|
|
65
|
-
}
|
|
66
|
-
get emptyTemplate() {
|
|
67
|
-
return this._contentEmptyTemplate;
|
|
68
|
-
}
|
|
69
|
-
_handleArrowClickEvent(e) {
|
|
70
|
-
e.nativeEvent.stopPropagation();
|
|
71
|
-
this.toggle();
|
|
72
|
-
}
|
|
73
|
-
_handleInputClickEvent(e) {
|
|
74
|
-
e.stopPropagation();
|
|
75
|
-
this.toggle();
|
|
14
|
+
import * as i1 from "../dropdown/dropdown.component";
|
|
15
|
+
import * as i2 from "../textbox/textbox.component";
|
|
16
|
+
import * as i3 from "../searchbox/searchbox.component";
|
|
17
|
+
import * as i4 from "../checkbox/checkbox.component";
|
|
18
|
+
import * as i5 from "@acorex/core";
|
|
19
|
+
import * as i6 from "@angular/common";
|
|
20
|
+
export class AXSelectBoxSelectionChangedEvent extends AXBaseEvent {
|
|
21
|
+
constructor(component, selectedItems, selectedValues) {
|
|
22
|
+
super();
|
|
23
|
+
this.selectedItems = selectedItems;
|
|
24
|
+
this.selectedValues = selectedValues;
|
|
25
|
+
this.component = component;
|
|
76
26
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
27
|
+
}
|
|
28
|
+
export class AXSelectBoxComponent extends AXValidatableComponent {
|
|
29
|
+
constructor(cdr, ref, zone) {
|
|
30
|
+
super();
|
|
31
|
+
this.cdr = cdr;
|
|
32
|
+
this.ref = ref;
|
|
33
|
+
this.zone = zone;
|
|
34
|
+
this.showDropDownButton = true;
|
|
35
|
+
this.showCheckBox = true;
|
|
36
|
+
this.readonly = false;
|
|
37
|
+
this.rtl = AXConfig.get('layout.rtl');
|
|
38
|
+
this.disabled = false;
|
|
39
|
+
this.size = 'md';
|
|
40
|
+
this.allowNull = true;
|
|
41
|
+
this.textAlign = null;
|
|
42
|
+
this.bufferSize = 20;
|
|
43
|
+
this.remoteOperation = false;
|
|
44
|
+
this.dropdownToggle = new EventEmitter();
|
|
45
|
+
// this input is Private and only use in LOV
|
|
46
|
+
this.currentfocusedIndex = -1;
|
|
47
|
+
this.showLoading = false;
|
|
48
|
+
this.skip = -1;
|
|
49
|
+
this.searchText = '';
|
|
50
|
+
// @Input()
|
|
51
|
+
// chipsWidth: string = '';
|
|
52
|
+
this.text = '';
|
|
53
|
+
this.totalCount = 0;
|
|
54
|
+
this.allowSearch = true;
|
|
55
|
+
this.textField = 'text';
|
|
56
|
+
this.valueField = 'value';
|
|
57
|
+
this.disabledField = 'disabled';
|
|
58
|
+
this.mode = 'single';
|
|
59
|
+
this.itemRemove = false;
|
|
60
|
+
this.itemsChange = new EventEmitter();
|
|
61
|
+
this.onBlur = new EventEmitter();
|
|
62
|
+
this.onFocus = new EventEmitter();
|
|
63
|
+
this._items = [];
|
|
64
|
+
this.hasSelectedValue = false;
|
|
65
|
+
this.itemsFiltered = [];
|
|
66
|
+
// #endregion
|
|
67
|
+
this.dropDownDisabled = false;
|
|
68
|
+
this.selectionChanged = new EventEmitter();
|
|
69
|
+
this.selectedItemsChange = new EventEmitter();
|
|
70
|
+
this._selectedItems = [];
|
|
71
|
+
this.delay = 500;
|
|
72
|
+
this.selectedValuesChange = new EventEmitter();
|
|
81
73
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
this._popoverWidth = this._isMobile ? null : this._target.offsetWidth;
|
|
74
|
+
get dataSource() {
|
|
75
|
+
return this._dataSource ? this._dataSource : this._contentDataSource;
|
|
85
76
|
}
|
|
86
|
-
|
|
87
|
-
this.
|
|
88
|
-
super.refresh();
|
|
77
|
+
set dataSource(v) {
|
|
78
|
+
this._dataSource = v;
|
|
89
79
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
80
|
+
get validation() {
|
|
81
|
+
return this._validation ? this._validation : this._contentValidation;
|
|
82
|
+
}
|
|
83
|
+
set validation(v) {
|
|
84
|
+
this._validation = v;
|
|
85
|
+
}
|
|
86
|
+
get items() {
|
|
87
|
+
return this._items;
|
|
88
|
+
}
|
|
89
|
+
set items(v) {
|
|
90
|
+
this._items = v;
|
|
91
|
+
if (this.itemsChange) {
|
|
92
|
+
this.itemsChange.emit(v);
|
|
93
|
+
}
|
|
94
|
+
if (this.itemsStatusObserver) {
|
|
95
|
+
this.itemsStatusObserver.next(this.items.length);
|
|
93
96
|
}
|
|
94
|
-
if (!this.multiple)
|
|
95
|
-
this.close();
|
|
96
|
-
this.toggleSelect(item);
|
|
97
|
-
this._cdr.detectChanges();
|
|
98
97
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
98
|
+
get selectedItems() {
|
|
99
|
+
return this._selectedItems || [];
|
|
100
|
+
}
|
|
101
|
+
set selectedItems(v) {
|
|
102
|
+
this.setSelectedItemsChange(v);
|
|
103
|
+
// if (!v) {
|
|
104
|
+
// v = [];
|
|
105
|
+
// }
|
|
106
|
+
// const old = this.selectedItems;
|
|
107
|
+
// if (JSON.stringify(old) !== JSON.stringify(v)) {
|
|
108
|
+
// this._selectedItems = this.mode == 'single' ? v.slice(0, 1) : [...new Set(v)]; //[...new Set(v[0])] : [...new Set(v)];
|
|
109
|
+
// this._selectedItems.forEach((c) => (c.selected = true));
|
|
110
|
+
// this.selectedItemsChange.emit(this._selectedItems);
|
|
111
|
+
// this.selectedValuesChange.emit(this.selectedValues);
|
|
112
|
+
// this.clearValidationStyle(this.ref.nativeElement);
|
|
113
|
+
// this.waitForData(() => {
|
|
114
|
+
// if (this._selectedItems) {
|
|
115
|
+
// this.items.forEach((c) => (c.selected = this._selectedItems.some((i) => i[this.valueField] == c[this.valueField])));
|
|
116
|
+
// }
|
|
117
|
+
// });
|
|
118
|
+
// }
|
|
119
|
+
}
|
|
120
|
+
setSelectedItemsChange(v, old = this.selectedItems) {
|
|
121
|
+
if (!v) {
|
|
122
|
+
v = [];
|
|
123
|
+
}
|
|
124
|
+
// const old = this.selectedItems;
|
|
125
|
+
var f = differenceBy(old, v, this.valueField);
|
|
126
|
+
var s = differenceBy(v, old, this.valueField);
|
|
127
|
+
// if (JSON.stringify(old) !== JSON.stringify(v)) {
|
|
128
|
+
if (f.length != 0 || s.length != 0) {
|
|
129
|
+
this._selectedItems = this.mode == 'single' ? v.slice(0, 1) : [...new Set(v)]; //[...new Set(v[0])] : [...new Set(v)];
|
|
130
|
+
this._selectedItems.forEach((c) => (c.selected = true));
|
|
131
|
+
this.selectedItemsChange.emit(this._selectedItems);
|
|
132
|
+
this.selectedValuesChange.emit(this.selectedValues);
|
|
133
|
+
this.clearValidationStyle(this.ref.nativeElement);
|
|
134
|
+
this.waitForData(() => {
|
|
135
|
+
if (this._selectedItems) {
|
|
136
|
+
this.items.forEach((c) => (c.selected = this._selectedItems.some((i) => i[this.valueField] == c[this.valueField])));
|
|
137
|
+
}
|
|
138
|
+
});
|
|
103
139
|
}
|
|
104
|
-
this._fetchData();
|
|
105
140
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
141
|
+
ngOnInit() {
|
|
142
|
+
if (this.rowTemplate === undefined && this.rowInputTemplate != undefined) {
|
|
143
|
+
this.rowTemplate = this.rowInputTemplate;
|
|
144
|
+
}
|
|
145
|
+
if (this.rtl == null) {
|
|
146
|
+
this.rtl = window.getComputedStyle(this.ref.nativeElement, null).getPropertyValue('direction') === 'rtl';
|
|
111
147
|
}
|
|
112
148
|
}
|
|
113
|
-
|
|
114
|
-
if (this.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
149
|
+
scrolled(e) {
|
|
150
|
+
if (this.remoteOperation &&
|
|
151
|
+
this.totalCount > this.items.length &&
|
|
152
|
+
this.listContainer.nativeElement.scrollHeight != 0 &&
|
|
153
|
+
this.listContainer.nativeElement.scrollHeight - this.listContainer.nativeElement.scrollTop - 300 < 50) {
|
|
154
|
+
if (this.skip !== this.items.length) {
|
|
155
|
+
this.showLoading = true;
|
|
156
|
+
this.skip = this.items.length;
|
|
157
|
+
const params = {};
|
|
158
|
+
params.skip = this.items.length;
|
|
159
|
+
params.take = this.bufferSize; //* (Math.floor(this.items.length / this.bufferSize) + 1);
|
|
160
|
+
if (this.textbox) {
|
|
161
|
+
params.searchText = this.text;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
params.searchText = null;
|
|
121
165
|
}
|
|
122
|
-
|
|
166
|
+
this.fetch(params);
|
|
167
|
+
}
|
|
123
168
|
}
|
|
124
169
|
}
|
|
125
|
-
|
|
126
|
-
|
|
170
|
+
setSelectedItems(v, isUserInput) {
|
|
171
|
+
let changed = false;
|
|
172
|
+
if (isUserInput) {
|
|
173
|
+
changed = JSON.stringify(v) !== JSON.stringify(this.selectedItems);
|
|
174
|
+
}
|
|
175
|
+
this.selectedItems = v;
|
|
176
|
+
this.setSelectedIndex();
|
|
177
|
+
if (isUserInput && changed) {
|
|
178
|
+
this.emitSelectionChangedEvent();
|
|
179
|
+
}
|
|
127
180
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
181
|
+
textChanged(e) {
|
|
182
|
+
if ((e.value === null || e.value === undefined || e.value === '') && (e.oldValue === null || e.oldValue === undefined || e.oldValue === '')) {
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
this.currentfocusedIndex = -1;
|
|
186
|
+
if (this.remoteOperation) {
|
|
187
|
+
this.searchText = this.text;
|
|
188
|
+
// this.searchText = e.value;
|
|
189
|
+
// this.text = e.value;
|
|
190
|
+
// this.items = [];
|
|
191
|
+
if (this.items) {
|
|
192
|
+
let t = this.items.length;
|
|
193
|
+
for (let i = 0; i < t; i++) {
|
|
194
|
+
this.items.pop();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// this.items.forEach((element) => {
|
|
198
|
+
// this.items.pop();
|
|
199
|
+
// });
|
|
200
|
+
const params = {};
|
|
201
|
+
params.searchText = this.text;
|
|
202
|
+
// params.searchText = e.value;
|
|
203
|
+
params.skip = 0;
|
|
204
|
+
params.take = this.bufferSize;
|
|
205
|
+
this.fetch(params);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
131
208
|
}
|
|
132
|
-
|
|
133
|
-
this.
|
|
134
|
-
|
|
135
|
-
this.close();
|
|
136
|
-
}
|
|
137
|
-
_handleKeydown(e) {
|
|
138
|
-
const isLetter = new RegExp(/[a-zA-Z0-9\-]/).test(String.fromCharCode(e.keyCode));
|
|
139
|
-
if (e.code === 'Backspace' && e.type === 'keydown' &&
|
|
140
|
-
((this.allowNull === true && this.selectedItems.length > 0) ||
|
|
141
|
-
(this.allowNull !== true && this.selectedItems.length > 1))) {
|
|
142
|
-
this.isUserInput = true;
|
|
143
|
-
this.unselectItems(this.selectedItems.pop());
|
|
144
|
-
e.preventDefault();
|
|
145
|
-
return;
|
|
209
|
+
isItemDisabled(item) {
|
|
210
|
+
if (item[this.disabledField] == true) {
|
|
211
|
+
return true;
|
|
146
212
|
}
|
|
147
|
-
else if (
|
|
148
|
-
|
|
149
|
-
|
|
213
|
+
else if (this.disabledCallback) {
|
|
214
|
+
return this.disabledCallback({ item, index: -1 });
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
onButtonClick(e) {
|
|
221
|
+
}
|
|
222
|
+
setSelectedIndex(sign = null) {
|
|
223
|
+
if (sign == null) {
|
|
224
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
|
225
|
+
this.currentfocusedIndex = this.items
|
|
226
|
+
.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()))
|
|
227
|
+
.indexOf(this.selectedItems[this.selectedItems.length - 1]);
|
|
150
228
|
}
|
|
151
229
|
else {
|
|
152
|
-
this.
|
|
153
|
-
|
|
154
|
-
|
|
230
|
+
this.currentfocusedIndex = this.items.indexOf(this.selectedItems[this.selectedItems.length - 1]);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
sign === -1 ? this.currentfocusedIndex-- : this.currentfocusedIndex++;
|
|
235
|
+
}
|
|
236
|
+
if (this.remoteOperation) {
|
|
237
|
+
this.itemsFiltered = this.items;
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
this.itemsFiltered = this.text
|
|
241
|
+
? this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()))
|
|
242
|
+
: this.items;
|
|
243
|
+
}
|
|
244
|
+
this.currentfocusedIndex =
|
|
245
|
+
this.currentfocusedIndex < 0
|
|
246
|
+
? 0
|
|
247
|
+
: this.currentfocusedIndex >= this.itemsFiltered.length
|
|
248
|
+
? this.itemsFiltered.length - 1
|
|
249
|
+
: this.currentfocusedIndex;
|
|
250
|
+
//
|
|
251
|
+
// set scroll
|
|
252
|
+
if (this.listContainer) {
|
|
253
|
+
this.zone.runOutsideAngular(() => {
|
|
254
|
+
const itemDiv = this.listContainer.nativeElement.querySelector(`.list-item:nth-child(${this.currentfocusedIndex})`);
|
|
255
|
+
if (itemDiv) {
|
|
256
|
+
itemDiv.scrollIntoView({ behavior: 'smooth' });
|
|
155
257
|
}
|
|
156
|
-
|
|
157
|
-
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
get selectedValues() {
|
|
262
|
+
if (this.mode === 'single') {
|
|
263
|
+
return this._selectedItems.map((c) => c[this.valueField])[0];
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
return this._selectedItems.map((c) => c[this.valueField]) || [];
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
set selectedValues(v) {
|
|
270
|
+
if (this.compareSelectedValues(v)) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
if (v == null) {
|
|
274
|
+
this.selectedItems = [];
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
if (v !== undefined) {
|
|
278
|
+
if (v != [] && v != '' && v != null) {
|
|
279
|
+
this.hasSelectedValue = true;
|
|
158
280
|
}
|
|
281
|
+
this.waitForData(() => {
|
|
282
|
+
if (this.mode === 'single') {
|
|
283
|
+
if (this.items.filter((c) => v == c[this.valueField])) {
|
|
284
|
+
this.selectedItems = this.items.filter((c) => v == c[this.valueField]);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
this.selectedItems = [];
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
if (Array.isArray(v)) {
|
|
292
|
+
if (this.selectedItems.length > v.length) {
|
|
293
|
+
this.selectedItems = this.selectedItems.filter((c) => v.includes(c[this.valueField]));
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
let addId = [];
|
|
297
|
+
v.forEach((vId) => {
|
|
298
|
+
addId.push({
|
|
299
|
+
[this.valueField]: vId
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
let newId = differenceBy(addId, this.selectedItems, this.valueField);
|
|
303
|
+
let vv = [];
|
|
304
|
+
newId.forEach((rc) => {
|
|
305
|
+
vv.push(rc[this.valueField]);
|
|
306
|
+
});
|
|
307
|
+
this.items
|
|
308
|
+
.filter((c) => vv.includes(c[this.valueField]))
|
|
309
|
+
.forEach((res) => {
|
|
310
|
+
this.selectedItems.push(res);
|
|
311
|
+
});
|
|
312
|
+
// this.selectedItems.push(this.items.filter((c) => vv.includes(c[this.valueField])));
|
|
313
|
+
this.setSelectedItemsChange(this.selectedItems, vv.length > 0 ? [1] : this.selectedItems);
|
|
314
|
+
}
|
|
315
|
+
// this.selectedItems = this.items.filter((c) => v.includes(c[this.valueField]));
|
|
316
|
+
}
|
|
317
|
+
else if (v) {
|
|
318
|
+
this.selectedItems = this.items.filter((c) => v === c[this.valueField]);
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
this.selectedItems = [];
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
this.selectedValuesChange.emit(this.selectedValues);
|
|
325
|
+
this.cdr.markForCheck();
|
|
326
|
+
this.cdr.detectChanges();
|
|
327
|
+
});
|
|
159
328
|
}
|
|
160
|
-
e.preventDefault();
|
|
161
|
-
return;
|
|
162
329
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
330
|
+
}
|
|
331
|
+
compareSelectedValues(newValue) {
|
|
332
|
+
const currentValue = this.selectedValues;
|
|
333
|
+
return (currentValue == null && newValue == null) || JSON.stringify(currentValue) === JSON.stringify(newValue);
|
|
334
|
+
}
|
|
335
|
+
setSelectedValues(v, isUserInput) {
|
|
336
|
+
const changed = isUserInput ? !this.compareSelectedValues(v) : false;
|
|
337
|
+
this.selectedValues = v;
|
|
338
|
+
if (isUserInput && changed) {
|
|
339
|
+
this.emitSelectionChangedEvent();
|
|
168
340
|
}
|
|
169
341
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
342
|
+
emitSelectionChangedEvent() {
|
|
343
|
+
this.selectedValuesChange.emit(this.selectedValues);
|
|
344
|
+
this.selectionChanged.emit(new AXSelectBoxSelectionChangedEvent(this, this.selectedItems, this.selectedValues));
|
|
345
|
+
}
|
|
346
|
+
ngAfterViewInit() {
|
|
347
|
+
if (this.bufferSize < 10) {
|
|
348
|
+
this.bufferSize = 10;
|
|
175
349
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
(this.allowNull !== true && this.selectedItems.length > 1))) {
|
|
179
|
-
this.isUserInput = true;
|
|
180
|
-
this.unselectItems(this.selectedItems.pop());
|
|
181
|
-
e.preventDefault();
|
|
350
|
+
if (this.mode == 'single') {
|
|
351
|
+
this.showCheckBox = false;
|
|
182
352
|
}
|
|
183
|
-
else
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
353
|
+
else {
|
|
354
|
+
this.showCheckBox = true;
|
|
355
|
+
}
|
|
356
|
+
if (!this.remoteOperation || (this.remoteOperation && this.hasSelectedValue)) {
|
|
357
|
+
this.refresh();
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
dropdownToggleSelecBox(e) {
|
|
361
|
+
this.text = '';
|
|
362
|
+
if (this.dropdown.isOpen) {
|
|
363
|
+
this.refresh();
|
|
364
|
+
setTimeout(() => {
|
|
365
|
+
if (this.serchBox) {
|
|
366
|
+
this.serchBox.focus();
|
|
190
367
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
368
|
+
}, 1);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
// this.refresh();
|
|
372
|
+
}
|
|
373
|
+
this.dropdownToggle.emit(e);
|
|
374
|
+
}
|
|
375
|
+
ngAfterContentInit() {
|
|
376
|
+
// if (!this.allowSearch) {
|
|
377
|
+
// if (this.readonly == false) {
|
|
378
|
+
// this.itemRemove = true;
|
|
379
|
+
// this.readonly = true;
|
|
380
|
+
// }
|
|
381
|
+
// }
|
|
382
|
+
this.initValidation(this.ref, 'selectedItems', this.validation);
|
|
383
|
+
if (this.dataSource) {
|
|
384
|
+
// if (this.allowSearch == false) {
|
|
385
|
+
// this.fetch();
|
|
386
|
+
// }
|
|
387
|
+
this.dataSource.onDataReceived.subscribe((c) => {
|
|
388
|
+
this.showLoading = false;
|
|
389
|
+
this.dataReceived(c.data.result);
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
this.cdr.markForCheck();
|
|
393
|
+
this.cdr.detectChanges();
|
|
394
|
+
}
|
|
395
|
+
dataReceived(data) {
|
|
396
|
+
if (this.remoteOperation) {
|
|
397
|
+
if (this.searchText && this.searchText != null && this.searchText !== '') {
|
|
398
|
+
if (data.totalCount) {
|
|
399
|
+
if (this.items.length == 0) {
|
|
400
|
+
//this.items = data.items;
|
|
401
|
+
data.items.forEach((item) => {
|
|
402
|
+
this.items.push(item);
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
data.items.forEach((item) => {
|
|
407
|
+
this.items.push(item);
|
|
408
|
+
});
|
|
409
|
+
// if (this.itemsStatusObserver) {
|
|
410
|
+
// this.itemsStatusObserver.next(this.items.length);
|
|
411
|
+
// }
|
|
412
|
+
}
|
|
413
|
+
this.totalCount = data.totalCount;
|
|
194
414
|
}
|
|
195
415
|
else {
|
|
196
|
-
this.
|
|
197
|
-
|
|
198
|
-
|
|
416
|
+
if (this.items.length == 0) {
|
|
417
|
+
this.items = data.items;
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
data.items.forEach((item) => {
|
|
421
|
+
this.items.push(item);
|
|
422
|
+
});
|
|
423
|
+
// if (this.itemsStatusObserver) {
|
|
424
|
+
// this.itemsStatusObserver.next(this.items.length);
|
|
425
|
+
// }
|
|
426
|
+
}
|
|
427
|
+
this.totalCount = data.items == undefined ? 0 : data.items.length;
|
|
199
428
|
}
|
|
200
429
|
}
|
|
430
|
+
else if (data.items && data.items.length === data.totalCount) {
|
|
431
|
+
this.items = data.items;
|
|
432
|
+
this.totalCount = data.items.length;
|
|
433
|
+
}
|
|
434
|
+
else if (data.totalCount) {
|
|
435
|
+
data.items.forEach((elm) => {
|
|
436
|
+
this.items.push(elm);
|
|
437
|
+
});
|
|
438
|
+
// if (this.itemsStatusObserver) {
|
|
439
|
+
// this.itemsStatusObserver.next(this.items.length);
|
|
440
|
+
// }
|
|
441
|
+
this.totalCount = data.totalCount;
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
data.forEach((elm) => {
|
|
445
|
+
this.items.push(elm);
|
|
446
|
+
// if (this.itemsStatusObserver) {
|
|
447
|
+
// this.itemsStatusObserver.next(this.items.length);
|
|
448
|
+
// }
|
|
449
|
+
});
|
|
450
|
+
this.totalCount = data.length;
|
|
451
|
+
}
|
|
201
452
|
}
|
|
202
|
-
else
|
|
203
|
-
this.
|
|
204
|
-
e.preventDefault();
|
|
205
|
-
e.stopPropagation();
|
|
453
|
+
else {
|
|
454
|
+
this.items = data;
|
|
206
455
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
456
|
+
this.cdr.markForCheck();
|
|
457
|
+
this.cdr.detectChanges();
|
|
458
|
+
this.dropdown.updatePosition();
|
|
459
|
+
}
|
|
460
|
+
// private params: AXDataSourceReadParams = {};
|
|
461
|
+
fetch(params = {}) {
|
|
462
|
+
// this.params = params;
|
|
463
|
+
if (this.dataSource) {
|
|
464
|
+
this.showLoading = true;
|
|
465
|
+
this.dataSource.fetch(params);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
refresh() {
|
|
469
|
+
const params = {};
|
|
470
|
+
if (this.remoteOperation) {
|
|
471
|
+
params.skip = 0;
|
|
472
|
+
this.skip = 0;
|
|
473
|
+
params.take = this.bufferSize;
|
|
474
|
+
}
|
|
475
|
+
if (this.dataSource != undefined) {
|
|
476
|
+
// this.items = [];
|
|
477
|
+
// this.items.forEach((element) => {
|
|
478
|
+
// this.items.pop();
|
|
479
|
+
// });
|
|
480
|
+
if (this.items) {
|
|
481
|
+
let t = this.items.length;
|
|
482
|
+
for (let i = 0; i < t; i++) {
|
|
483
|
+
this.items.pop();
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
this.fetch(params);
|
|
211
487
|
}
|
|
212
488
|
}
|
|
213
|
-
|
|
214
|
-
this.
|
|
215
|
-
|
|
216
|
-
this.
|
|
217
|
-
this.
|
|
489
|
+
handleItemRemoveClick(item) {
|
|
490
|
+
if (this.mode === 'single') {
|
|
491
|
+
// this.selectedItems = null;
|
|
492
|
+
this.setSelectedValues(null, true);
|
|
493
|
+
// this.selectedItemsChange.emit(this._selectedItems);
|
|
494
|
+
// this.clearValidationStyle(this.ref.nativeElement);
|
|
218
495
|
}
|
|
219
496
|
else {
|
|
220
|
-
this.
|
|
497
|
+
// this.selectedItems = this.selectedItems.filter((c) => c !== item);
|
|
498
|
+
this.setSelectedItems(this.selectedItems.filter((c) => c[this.valueField] !== item[this.valueField]), true);
|
|
499
|
+
// this._selectedItems = this._selectedItems.filter(c => c !== item);
|
|
500
|
+
// this.selectedItemsChange.emit(this._selectedItems);
|
|
501
|
+
// this.clearValidationStyle(this.ref.nativeElement);
|
|
221
502
|
}
|
|
222
|
-
|
|
223
|
-
|
|
503
|
+
// this.text = '';
|
|
504
|
+
this.validate();
|
|
505
|
+
this.cdr.markForCheck();
|
|
506
|
+
}
|
|
507
|
+
onFocusTextBox(e) { }
|
|
508
|
+
onTextBoxClick(e) {
|
|
509
|
+
if (this.disabled == false && this.readonly == false) {
|
|
510
|
+
this.dropdown.open();
|
|
224
511
|
}
|
|
225
512
|
}
|
|
226
|
-
|
|
227
|
-
this.
|
|
513
|
+
handleItemClick(e, item) {
|
|
514
|
+
if (this.isItemDisabled(item) == false) {
|
|
515
|
+
const value = item[this.valueField];
|
|
516
|
+
if (this.mode === 'single') {
|
|
517
|
+
// this.selectedValues = value;
|
|
518
|
+
this.setSelectedValues(value, true);
|
|
519
|
+
}
|
|
520
|
+
else {
|
|
521
|
+
const exists = this.selectedValues.slice(0);
|
|
522
|
+
if (exists.includes(value)) {
|
|
523
|
+
if (this.allowNull == true || (this.allowNull == false && this.selectedItems.length > 1)) {
|
|
524
|
+
this.handleItemRemoveClick(item);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
else {
|
|
528
|
+
exists.push(value);
|
|
529
|
+
// this.selectedValues = exists;
|
|
530
|
+
this.setSelectedValues(exists, true);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
if (this.mode == 'single') {
|
|
534
|
+
this.text = '';
|
|
535
|
+
this.dropdown.close();
|
|
536
|
+
this.cdr.markForCheck();
|
|
537
|
+
}
|
|
538
|
+
// if (e.stopPropagation() == undefined) {
|
|
539
|
+
// e.stopPropagation();
|
|
540
|
+
// }
|
|
541
|
+
setTimeout(() => {
|
|
542
|
+
if (this.serchBox) {
|
|
543
|
+
this.serchBox.focus();
|
|
544
|
+
}
|
|
545
|
+
}, 0);
|
|
546
|
+
}
|
|
547
|
+
e.stopPropagation();
|
|
228
548
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
549
|
+
handleKeyEventSearch(e) {
|
|
550
|
+
if (this.disabled || this.readonly) {
|
|
551
|
+
this.dropdown.close();
|
|
552
|
+
setTimeout(() => {
|
|
553
|
+
this.textBoxSelectBox.focus();
|
|
554
|
+
}, 0);
|
|
555
|
+
return false;
|
|
236
556
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
557
|
+
if (e.key === 'Escape') {
|
|
558
|
+
this.text = null;
|
|
559
|
+
setTimeout(() => {
|
|
560
|
+
this.textBoxSelectBox.focus();
|
|
561
|
+
}, 0);
|
|
562
|
+
}
|
|
563
|
+
if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') && this.getItems().length > 0 && e.type === 'keydown') {
|
|
564
|
+
if (this.mode === 'single') {
|
|
565
|
+
this.currentfocusedIndex = this.currentfocusedIndex + (e.key === 'ArrowDown' ? 1 : -1);
|
|
566
|
+
this.selectedItemByIndex(this.currentfocusedIndex);
|
|
567
|
+
}
|
|
568
|
+
else {
|
|
569
|
+
if (this.dropdown.isOpen) {
|
|
570
|
+
this.setSelectedIndex(e.key === 'ArrowDown' ? 1 : -1);
|
|
571
|
+
}
|
|
572
|
+
else {
|
|
573
|
+
this.dropdown.open();
|
|
574
|
+
setTimeout(() => {
|
|
575
|
+
if (this.serchBox) {
|
|
576
|
+
this.serchBox.focus();
|
|
577
|
+
}
|
|
578
|
+
}, 0);
|
|
244
579
|
}
|
|
245
580
|
}
|
|
246
581
|
}
|
|
582
|
+
// if (e.key == 'Enter' && this.dropdown.isOpen && this.mode == 'single') {
|
|
583
|
+
// this.dropdown.close();
|
|
584
|
+
// setTimeout(() => {
|
|
585
|
+
// this.dropdown.focus();
|
|
586
|
+
// }, 0);
|
|
587
|
+
// }
|
|
588
|
+
//e.stopPropagation();
|
|
589
|
+
//e.preventDefault();
|
|
590
|
+
e.stopImmediatePropagation();
|
|
591
|
+
if (e.type === 'keydown' && e.key == 'Enter' && this.dropdown.isOpen) {
|
|
592
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
|
593
|
+
this.itemsFiltered = this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()));
|
|
594
|
+
if (this.itemsFiltered.length === 1) {
|
|
595
|
+
this.currentfocusedIndex = 0;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
else {
|
|
599
|
+
this.itemsFiltered = this.items;
|
|
600
|
+
}
|
|
601
|
+
if (this.selectedItems.filter((c) => c[this.valueField] === this.itemsFiltered[this.currentfocusedIndex][this.valueField]).length > 0 &&
|
|
602
|
+
this.mode == 'multiple') {
|
|
603
|
+
if (this.allowNull == true || (this.allowNull == false && this.selectedItems.length > 1)) {
|
|
604
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
|
605
|
+
this.selectedItems = this.selectedItems.filter((c) => c !==
|
|
606
|
+
this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()))[this.currentfocusedIndex]);
|
|
607
|
+
}
|
|
608
|
+
else {
|
|
609
|
+
this.selectedItems = this.selectedItems.filter((c) => c[this.valueField] !== this.items[this.currentfocusedIndex][this.valueField]);
|
|
610
|
+
}
|
|
611
|
+
this.emitSelectionChangedEvent();
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
else {
|
|
615
|
+
if (this.mode == 'multiple') {
|
|
616
|
+
if (this.currentfocusedIndex != -1) {
|
|
617
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
|
618
|
+
if (this.itemsFiltered.length === 1) {
|
|
619
|
+
this.selectedItems.push(this.itemsFiltered[0]);
|
|
620
|
+
}
|
|
621
|
+
else {
|
|
622
|
+
this.selectedItems.push(this.itemsFiltered[this.currentfocusedIndex]);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
else {
|
|
626
|
+
this.selectedItems.push(this.items[this.currentfocusedIndex]);
|
|
627
|
+
}
|
|
628
|
+
this.emitSelectionChangedEvent();
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
else {
|
|
632
|
+
if (this.text && this.itemsFiltered?.length === 1) {
|
|
633
|
+
this.setSelectedItems(this.itemsFiltered, true);
|
|
634
|
+
}
|
|
635
|
+
if (this.mode == 'single') {
|
|
636
|
+
this.dropdown.close();
|
|
637
|
+
setTimeout(() => {
|
|
638
|
+
this.textBoxSelectBox.focus();
|
|
639
|
+
}, 0);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
e.stopPropagation();
|
|
644
|
+
e.preventDefault();
|
|
645
|
+
e.stopImmediatePropagation();
|
|
646
|
+
}
|
|
647
|
+
this.cdr.markForCheck();
|
|
247
648
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
649
|
+
isChar(str) {
|
|
650
|
+
if (str.includes('Shift') ||
|
|
651
|
+
str.includes('Tab') ||
|
|
652
|
+
str.includes('Control') ||
|
|
653
|
+
str.includes('Alt') ||
|
|
654
|
+
str.includes('CapsLock') ||
|
|
655
|
+
str.includes('Meta') ||
|
|
656
|
+
str.includes('ContextMenu') ||
|
|
657
|
+
str.includes('Enter') ||
|
|
658
|
+
str.includes('Backspace') ||
|
|
659
|
+
str.includes('PrintScreen') ||
|
|
660
|
+
str.includes('ScrollLock') ||
|
|
661
|
+
str.includes('Pause') ||
|
|
662
|
+
str.includes('Home') ||
|
|
663
|
+
str.includes('End') ||
|
|
664
|
+
str.includes('Insert') ||
|
|
665
|
+
str.includes('PageUp') ||
|
|
666
|
+
str.includes('Delete') ||
|
|
667
|
+
str.includes('PageDown') ||
|
|
668
|
+
str.includes('NumLock') ||
|
|
669
|
+
str.includes('Escape') ||
|
|
670
|
+
str.includes('Arrow') ||
|
|
671
|
+
str.includes('ّF1') ||
|
|
672
|
+
str.includes('F2') ||
|
|
673
|
+
str.includes('F3') ||
|
|
674
|
+
str.includes('F4') ||
|
|
675
|
+
str.includes('F5') ||
|
|
676
|
+
str.includes('F6') ||
|
|
677
|
+
str.includes('F7') ||
|
|
678
|
+
str.includes('F8') ||
|
|
679
|
+
str.includes('F9') ||
|
|
680
|
+
str.includes('F10') ||
|
|
681
|
+
str.includes('F11') ||
|
|
682
|
+
str.includes('F12')) {
|
|
683
|
+
return false;
|
|
684
|
+
}
|
|
685
|
+
else {
|
|
686
|
+
return true;
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
handleKeyEvent(e) {
|
|
690
|
+
// const NumberMinusPattern = /[a-zA-Z0-9\-]/g;
|
|
691
|
+
// const Farsi = /[پچجحخهعغفقثصضشسیبلاتنمکگوئدذرزطظژؤإأءًٌٍَُِّ\s]+$/;
|
|
692
|
+
// const inputChar = String.fromCharCode(e.charCode);
|
|
693
|
+
// const patternEn = /^[a-zA-Z0-9]*$/;
|
|
694
|
+
// const pattern = /^[\u0600-\u06FF\s]+$/;
|
|
695
|
+
const inputChar = e.key;
|
|
696
|
+
if ((inputChar != 'Backspace' &&
|
|
697
|
+
inputChar != 'Backspace' &&
|
|
698
|
+
inputChar != 'Tab' &&
|
|
699
|
+
inputChar != 'Enter' &&
|
|
700
|
+
inputChar != 'Escape' &&
|
|
701
|
+
inputChar != 'ArrowDown' &&
|
|
702
|
+
inputChar != 'ArrowUp') ||
|
|
703
|
+
e.code === 'Space' ||
|
|
704
|
+
e.ctrlKey == true) {
|
|
705
|
+
e.preventDefault();
|
|
706
|
+
}
|
|
707
|
+
if (e.key === 'Backspace' &&
|
|
708
|
+
e.type === 'keydown' &&
|
|
709
|
+
((this.allowNull === true && this.selectedItems.length > 0) || (this.allowNull === false && this.selectedItems.length > 1))) {
|
|
710
|
+
this.selectedItems.pop();
|
|
711
|
+
this.emitSelectionChangedEvent();
|
|
712
|
+
}
|
|
713
|
+
if (this.disabled || this.readonly) {
|
|
714
|
+
this.dropdown.close();
|
|
715
|
+
setTimeout(() => {
|
|
716
|
+
this.textBoxSelectBox.focus();
|
|
717
|
+
}, 0);
|
|
718
|
+
return false;
|
|
719
|
+
}
|
|
720
|
+
const INPUT = String.fromCharCode(e.keyCode);
|
|
721
|
+
if (this.isChar(e.key) && this.allowSearch && e.ctrlKey == false) {
|
|
722
|
+
this.dropdown.open();
|
|
723
|
+
setTimeout(() => {
|
|
724
|
+
if (this.serchBox) {
|
|
725
|
+
this.serchBox.focus();
|
|
726
|
+
}
|
|
727
|
+
}, 0);
|
|
728
|
+
this.text = e.key;
|
|
729
|
+
}
|
|
730
|
+
if (e.key === 'Escape') {
|
|
731
|
+
this.text = null;
|
|
732
|
+
this.dropdown.close();
|
|
733
|
+
setTimeout(() => {
|
|
734
|
+
this.textBoxSelectBox.focus();
|
|
735
|
+
}, 0);
|
|
736
|
+
}
|
|
737
|
+
if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') && this.getItems().length > 0 && e.type === 'keydown') {
|
|
738
|
+
if (this.mode === 'single') {
|
|
739
|
+
this.selectedItemByIndex(this.currentfocusedIndex + (e.key === 'ArrowDown' ? 1 : -1));
|
|
255
740
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
741
|
+
else {
|
|
742
|
+
if (this.dropdown.isOpen) {
|
|
743
|
+
// this.setSelectedIndex((e.key === 'ArrowDown' ? 1 : -1));
|
|
744
|
+
if (this.allowSearch == false) {
|
|
745
|
+
this.setSelectedIndex(e.key === 'ArrowDown' ? 1 : -1);
|
|
746
|
+
}
|
|
747
|
+
else {
|
|
748
|
+
setTimeout(() => {
|
|
749
|
+
if (this.serchBox) {
|
|
750
|
+
this.serchBox.focus();
|
|
751
|
+
}
|
|
752
|
+
}, 0);
|
|
753
|
+
}
|
|
265
754
|
}
|
|
266
755
|
else {
|
|
267
|
-
|
|
756
|
+
this.dropdown.open();
|
|
757
|
+
if (this.allowSearch == true) {
|
|
758
|
+
setTimeout(() => {
|
|
759
|
+
if (this.serchBox) {
|
|
760
|
+
this.serchBox.focus();
|
|
761
|
+
}
|
|
762
|
+
}, 0);
|
|
763
|
+
}
|
|
268
764
|
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
if (this.allowSearch === false) {
|
|
768
|
+
if (e.type === 'keydown' && e.key == 'Enter' && this.dropdown.isOpen) {
|
|
769
|
+
e.stopImmediatePropagation();
|
|
770
|
+
if (this.selectedItems.filter((c) => c[this.valueField] === this.itemsFiltered[this.currentfocusedIndex][this.valueField]).length > 0 &&
|
|
771
|
+
this.mode == 'multiple') {
|
|
772
|
+
if (this.allowNull == true || (this.allowNull == false && this.selectedItems.length > 1)) {
|
|
773
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
|
774
|
+
this.selectedItems = this.selectedItems.filter((c) => c !==
|
|
775
|
+
this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()))[this.currentfocusedIndex]);
|
|
776
|
+
}
|
|
777
|
+
else {
|
|
778
|
+
this.selectedItems = this.selectedItems.filter((c) => c[this.valueField] !== this.items[this.currentfocusedIndex][this.valueField]);
|
|
779
|
+
}
|
|
780
|
+
this.emitSelectionChangedEvent();
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
else {
|
|
784
|
+
if (this.mode == 'multiple') {
|
|
785
|
+
if (this.currentfocusedIndex != -1) {
|
|
786
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
|
787
|
+
if (this.itemsFiltered.length === 1) {
|
|
788
|
+
this.selectedItems.push(this.itemsFiltered[0]);
|
|
789
|
+
}
|
|
790
|
+
else {
|
|
791
|
+
this.selectedItems.push(this.itemsFiltered[this.currentfocusedIndex]);
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
else {
|
|
795
|
+
this.selectedItems.push(this.items[this.currentfocusedIndex]);
|
|
796
|
+
}
|
|
797
|
+
this.emitSelectionChangedEvent();
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
else {
|
|
801
|
+
if (this.text && this.itemsFiltered.length === 1) {
|
|
802
|
+
this.setSelectedItems(this.itemsFiltered, true);
|
|
803
|
+
}
|
|
804
|
+
if (this.mode == 'single') {
|
|
805
|
+
this.dropdown.close();
|
|
806
|
+
setTimeout(() => {
|
|
807
|
+
this.textBoxSelectBox.focus();
|
|
808
|
+
}, 0);
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
this.cdr.markForCheck();
|
|
815
|
+
}
|
|
816
|
+
focus() {
|
|
817
|
+
this.textbox.focus();
|
|
275
818
|
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
819
|
+
selectedItemByIndex(index) {
|
|
820
|
+
let item = [];
|
|
821
|
+
if (!this.remoteOperation && this.text && this.text !== '') {
|
|
822
|
+
this.itemsFiltered = this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()));
|
|
823
|
+
item = this.itemsFiltered[index];
|
|
281
824
|
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
while (next?.children && next?.children.length) {
|
|
285
|
-
i += sign;
|
|
286
|
-
next = _.nth(this.flatItems, i);
|
|
825
|
+
else {
|
|
826
|
+
item = this.items[index];
|
|
287
827
|
}
|
|
288
|
-
|
|
289
|
-
|
|
828
|
+
//
|
|
829
|
+
// const item = this.text ? this.items.filter((c) => (c[this.textField] as string).toLowerCase().includes(this.text.toLowerCase()))[index] : this.items[index];
|
|
830
|
+
if (item) {
|
|
831
|
+
this.setSelectedItems([item], true);
|
|
290
832
|
}
|
|
291
|
-
|
|
292
|
-
|
|
833
|
+
this.setSelectedIndex();
|
|
834
|
+
}
|
|
835
|
+
getItems() {
|
|
836
|
+
if (this.items == null) {
|
|
837
|
+
return [];
|
|
293
838
|
}
|
|
839
|
+
return !this.remoteOperation && this.text && this.text !== ''
|
|
840
|
+
? this.items.filter((c) => c[this.textField].toLowerCase().includes(this.text.toLowerCase()))
|
|
841
|
+
: this.items;
|
|
294
842
|
}
|
|
295
|
-
|
|
296
|
-
this.
|
|
297
|
-
this._fetchData();
|
|
843
|
+
isItemSelected(item) {
|
|
844
|
+
return this.selectedItems && this.selectedItems.filter((c) => c[this.valueField] === item[this.valueField]).length > 0;
|
|
298
845
|
}
|
|
299
|
-
|
|
300
|
-
|
|
846
|
+
waitForData(callbackfn) {
|
|
847
|
+
if (this.items && this.items.length) {
|
|
848
|
+
callbackfn();
|
|
849
|
+
}
|
|
850
|
+
else if (!this.itemsStatusObserver) {
|
|
851
|
+
Observable.create((observer) => {
|
|
852
|
+
this.itemsStatusObserver = observer;
|
|
853
|
+
})
|
|
854
|
+
.pipe(debounceTime(100))
|
|
855
|
+
.pipe(distinctUntilChanged())
|
|
856
|
+
.subscribe((c) => {
|
|
857
|
+
callbackfn();
|
|
858
|
+
});
|
|
859
|
+
}
|
|
301
860
|
}
|
|
302
861
|
}
|
|
303
|
-
AXSelectBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
304
|
-
AXSelectBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: AXSelectBoxComponent, selector: "ax-select-box", inputs: { isOpen: "isOpen", fitParent: "fitParent", dropdownWidth: "dropdownWidth", position: "position", disabled: "disabled", tabIndex: "tabIndex", readonly: "readonly", allowNull: "allowNull", value: "value", debounceTime: "debounceTime", name: "name", checked: "checked", placeholder: "placeholder", maxLength: "maxLength", type: "type", pageSize: "pageSize", valueField: "valueField", textField: "textField", items: "items", disabledField: "disabledField", disabledCallback: "disabledCallback", multiple: "multiple", selectionMode: "selectionMode", clearButton: "clearButton", searchSettings: "searchSettings", checkbox: "checkbox" }, outputs: { onOpened: "onOpened", onClosed: "onClosed", onBlur: "onBlur", onFocus: "onFocus", valueChange: "valueChange", onValueChanged: "onValueChanged", valueChanged: "valueChanged" }, host: { listeners: { "keydown": "_handleKeydown($event)" }, classAttribute: "ax-editor-container ax-drop-down" }, queries: [{ propertyName: "_contentEmptyTemplate", first: true, predicate: ["emptyTemplate"], descendants: true }], viewQueries: [{ propertyName: "popover", first: true, predicate: AXPopoverComponent, descendants: true, static: true }, { propertyName: "listContainer", first: true, predicate: ["listContainer"], descendants: true, static: true }, { propertyName: "_searchBox", first: true, predicate: ["searchBox"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-prefix\">\r\n</ng-content>\r\n<div class=\"ax-dropdown-content\" [class.ax-state-disabled]=\"disabled\" (click)=\"_handleInputClickEvent($event)\">\r\n <div class=\"ax-select-box-selection\" [tabindex]=\"tabIndex\" (focus)=\"_emitOnFocusEvent($event)\"\r\n (blur)=\"_emitOnBlurEvent($event)\">\r\n <ng-container *ngIf=\"selectedItems && selectedItems.length; else showPlaceholder\">\r\n <ng-container *ngIf=\"!multiple; then singleSelectedTemplate; else multipleSelectedTemplate\"></ng-container>\r\n <ng-template #singleSelectedTemplate>\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <span class=\"ax-mx-2\"> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #multipleSelectedTemplate>\r\n <div class=\"ax-flex ax-mx-2\">\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <ax-badge [text]=\"_getItemDisplayTextTemplte(item)\" color=\"light\" class=\"ax-me-2\">\r\n <ax-suffix>\r\n <ax-icon icon=\"ax-ic ax-ic-close ax-cursor-pointer\"\r\n (click)=\"_handleBadgeRemove($event,item)\"></ax-icon>\r\n </ax-suffix>\r\n </ax-badge>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #showPlaceholder>\r\n <div class=\"ax-placeholder\" role=\"textbox\" area-readonly=\"true\"> {{placeholder}}</div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n<ax-button color=\"light\" look=\"blank\" (onClick)=\"clear()\" [tabIndex]=\"-1\"\r\n *ngIf=\"value && clearButton && !(disabled || readonly)\">\r\n <ax-icon icon=\"ax-ic ax-ic-close\"></ax-icon>\r\n</ax-button>\r\n<ax-button [disabled]=\"disabled\" [tabIndex]=\"-1\" color=\"light\" look=\"blank\" (onClick)=\"_handleArrowClickEvent($event)\">\r\n <ax-prefix *ngIf=\"(isLoading && !this.popover.isOpen);else icon\">\r\n <ax-loading type=\"spinner\"></ax-loading>\r\n </ax-prefix>\r\n <ng-template #icon>\r\n <ax-icon #icon icon=\"ax-ic ax-ic-chevron ax-transform ax--rotate-90\"></ax-icon>\r\n </ng-template>\r\n</ax-button>\r\n<ng-content select=\"ax-validation-rule\">\r\n</ng-content>\r\n<ng-content select=\"ax-suffix\">\r\n</ng-content>\r\n<ax-popover [target]=\"_target\" [position]=\"position\" [openTrigger]=\"'manual'\" [closeTrigger]=\"'clickout'\"\r\n (onOpened)=\"_handlePopupOnOpened($event)\" (onClosed)=\"_handlePopupOnClosed($event)\">\r\n <div class=\"ax-overlay-pane \" (keydown)=\"_handlePopoverKeydown($event)\" tabindex=\"0\" aria-modal=\"true\" cdkTrapFocus\r\n [class.ax-overlay-actionsheet]=\"_isMobile\" [class.ax-full]=\"searchSettings.enabled || isLazy\"\r\n [style.min-width.px]=\"_popoverWidth\">\r\n <div class=\"ax-list\">\r\n <div *ngIf=\"_isMobile\" class=\"ax-header\">\r\n <span>{{_popoverTitle}}</span>\r\n <i class=\"ax-ic {{multiple?'ax-ic-check !ax-text-primary-500':'ax-ic-close'}}\" (click)=\"close()\"\r\n tabindex=\"1\"></i>\r\n </div>\r\n <div *ngIf=\"searchSettings.enabled\" class=\"ax-p-2\" [cdkTrapFocus]=\"true\" class=\"ax-header\">\r\n <ax-text-box #searchBox placeholder=\"{{ 'common.search' | trans }}\" [debounceTime]=\"500\" \r\n class=\"ax-w-full ax-sm\" [(value)]=\"searchSettings.expr\" (onValueChanged)=\"_onSearchExprChanged($event)\">\r\n <ax-prefix>\r\n <ax-icon class=\"ax-ic ax-ic-magnify\">\r\n </ax-icon>\r\n </ax-prefix>\r\n </ax-text-box>\r\n </div>\r\n <div class=\"ax-content ax-list-items-container ax-default\" (scroll)=\"_handleListScroll($event)\"\r\n #listContainer>\r\n <ng-container *ngIf=\"displayItems.length; else tmpEmpty\">\r\n <ul>\r\n <ng-container *ngTemplateOutlet=\"tmpTree; context:{ list: displayItems }\">\r\n </ng-container>\r\n <ng-template #tmpTree let-list=\"list\">\r\n <ng-container *ngFor=\"let item of list;let i = index;trackBy : _trackByFunction\">\r\n <ng-container *ngIf=\"itemTemplate; else defualtTemplate\">\r\n <li class=\"ax-list-item\" (click)=\"_handleOnItemClick($event,item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <ng-container\r\n *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item,direction:direction}\">\r\n </ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-template #defualtTemplate>\r\n <ng-container *ngIf=\"item.children?.length > 0;else tmpItem\">\r\n <li class=\"ax-list-item-group\" [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n <ul *ngIf=\"item.children?.length > 0\">\r\n <ng-container\r\n *ngTemplateOutlet=\"tmpTree; context:{ list: item.children }\">\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n <ng-template #tmpItem>\r\n <ng-container *ngIf=\"!multiple; else multipleTemplate\">\r\n <li class=\"ax-list-item\" [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\" [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event,item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n </li>\r\n </ng-container>\r\n <ng-template #multipleTemplate>\r\n <li class=\"ax-list-item\" [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n [class.ax-check-box]=\"checkbox\" [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event,item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <input type=\"checkbox\" [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n *ngIf=\"checkbox\" [checked]=\"isItemSelected(item)\"\r\n [disabled]=\"isItemDisabled(item)\">\r\n <span class=\"ax-ms-2\"> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n </li>\r\n </ng-template>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </ul>\r\n </ng-container>\r\n <ng-container *ngIf=\"isLoading\">\r\n <ng-container *ngIf=\"loadingTemplate; else elseLoadingTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #elseLoadingTemplate>\r\n <div class=\"ax-flex ax-items-center ax-justify-center ax-p-4\">\r\n <ax-loading text=\"{{ 'layout.loading.text' | trans }}\"></ax-loading>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #tmpEmpty>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngIf=\"emptyTemplate; else elseEmptyTemplate\">\r\n <ng-container *ngTemplateOutlet=\"emptyTemplate\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #elseEmptyTemplate>\r\n <div class=\"ax-list-item\">\r\n {{ 'common.no-result-found' | trans }}\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n\r\n </div>\r\n <!-- <div class=\"ax-list-items-container ax-vertical ax-default\" [class.ax-full]=\"_isMobile\"\r\n >\r\n \r\n </div> -->\r\n <!-- <div class=\"ax-footer\">footer</div> -->\r\n </div>\r\n </div>\r\n</ax-popover>", components: [{ type: i2.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { type: i3.AXDecoratorSuffixComponent, selector: "ax-suffix" }, { type: i4.AXIconComponent, selector: "ax-icon", inputs: ["icon"] }, { type: i5.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "size", "color", "look", "text", "submitBehavior", "cancelBehavior", "toggleable", "selected"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange"] }, { type: i6.AXDecoratorPrefixComponent, selector: "ax-prefix" }, { type: i7.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "text"], outputs: ["visibleChange"] }, { type: i8.AXPopoverComponent, selector: "ax-popover", inputs: ["target", "position", "openTrigger", "closeTrigger", "hasBackdrop", "backdropClass"], outputs: ["onOpened", "onClosed"] }, { type: i9.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "allowNull", "value", "debounceTime", "name", "checked", "placeholder", "maxLength", "type"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "trans": i1.AXTranslatorPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
305
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
862
|
+
AXSelectBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXSelectBoxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
863
|
+
AXSelectBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AXSelectBoxComponent, selector: "ax-select-box", inputs: { showDropDownButton: "showDropDownButton", rowInputTemplate: "rowInputTemplate", showCheckBox: "showCheckBox", readonly: "readonly", rtl: "rtl", disabled: "disabled", placeholder: "placeholder", size: "size", allowNull: "allowNull", textAlign: "textAlign", bufferSize: "bufferSize", remoteOperation: "remoteOperation", dataSource: "dataSource", validation: "validation", disabledCallback: "disabledCallback", allowSearch: "allowSearch", textField: "textField", valueField: "valueField", disabledField: "disabledField", mode: "mode", items: "items", selectedItems: "selectedItems", selectedValues: "selectedValues" }, outputs: { dropdownToggle: "dropdownToggle", itemsChange: "itemsChange", onBlur: "onBlur", onFocus: "onFocus", selectionChanged: "selectionChanged", selectedItemsChange: "selectedItemsChange", selectedValuesChange: "selectedValuesChange" }, host: { styleAttribute: "width: 100%" }, providers: [{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent }], queries: [{ propertyName: "rowTemplate", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }, { propertyName: "_contentValidation", first: true, predicate: AXValidation, descendants: true, static: true }], viewQueries: [{ propertyName: "span", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "textbox", first: true, predicate: AXTextBoxComponent, descendants: true, static: true }, { propertyName: "listContainer", first: true, predicate: ["listContainer"], descendants: true, static: true }, { propertyName: "serchBox", first: true, predicate: ["serchBox"], descendants: true }, { propertyName: "textBoxSelectBox", first: true, predicate: ["textBoxSelectBox"], descendants: true, static: true }, { propertyName: "dropdown", first: true, predicate: ["d"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ax-drop-down [size]=\"size\" [rtl]=\"rtl\" [showDropDownButton]=\"showDropDownButton\" [disabled]=\"disabled\"\r\n [readonly]=\"readonly\" #d (dropdownToggle)=\"dropdownToggleSelecBox($event)\">\r\n <ng-container start>\r\n <ng-content select=\"[start]\">\r\n </ng-content>\r\n </ng-container>\r\n <ng-container header>\r\n <div class=\"ax chips-container\" [horizontalScroll]=\"40\">\r\n <div class=\"chips\" [class.chips-blank]=\"mode === 'single'\" [title]=\"item[textField]\"\r\n *ngFor=\"let item of selectedItems\">\r\n <span class=\"chips-text\">\r\n {{item[textField]}}\r\n </span>\r\n <span class=\"close-icon\" (click)=\"handleItemRemoveClick(item)\"\r\n *ngIf=\"(readonly!=true || itemRemove ==true)&& disabled!=true && (allowNull==true || (selectedItems.length > 1))\">\r\n <i class=\"far fa-times close\"></i>\r\n </span>\r\n </div>\r\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\r\n <ax-text-box #textBoxSelectBox [textAlign]=\"textAlign\"\r\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\" [readonly]=\"readonly\"\r\n [disabled]=\"disabled\" (onkey)=\"handleKeyEvent($event)\" [size]=\"size\"\r\n (onFocus)=\"onFocusTextBox($event)\">\r\n </ax-text-box>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container end>\r\n <ng-content select=\"[end]\">\r\n </ng-content>\r\n </ng-container>\r\n\r\n <ng-container panel>\r\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em;\">\r\n <ax-search-box #serchBox [(value)]=\"text\" (onkey)=\"handleKeyEventSearch($event)\"\r\n (textChanged)=\"textChanged($event)\" (onButtonClick)=\"textChanged($event)\">\r\n </ax-search-box>\r\n </div>\r\n <div class=\"ax list-container\">\r\n <div #listContainer class=\"list-container-items\" (scroll)=\"scrolled($event)\">\r\n <ng-container *ngIf=\"getItems().length>0; then thenTemplate; else elseTemplate\"></ng-container>\r\n <ng-template #thenTemplate>\r\n <div [class.ax-state-disabled]=\"isItemDisabled(item)\" class=\"list-item\"\r\n *ngFor=\"let item of getItems();let i = index\" [class.focused]=\"i==currentfocusedIndex\"\r\n [class.selected]=\"isItemSelected(item)\" (click)=\"handleItemClick($event,item)\">\r\n <div style=\"display: flex;\">\r\n <ax-check-box *ngIf=\"showCheckBox\" [size]=\"size\" [value]=\"isItemSelected(item)\"\r\n [disabled]=\"(!allowNull && selectedItems.length === 1 && isItemSelected(item)) || isItemDisabled(item)\"\r\n (onClick)=\"handleItemClick($event,item)\">\r\n </ax-check-box>\r\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n <ng-container *ngTemplateOutlet=\"rowTemplate; context:{ $implicit: item }\">\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n {{ item[textField] }}\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-template>\r\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center;\">\r\n <i class=\"far fa-spinner-third fa-pulse fa-2x\" style=\"color: var(--ax-primary-color);\"></i>\r\n\r\n </div>\r\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\r\n <ng-template #elseTemplate>\r\n <ng-container *ngIf=\"showLoading == true; then searchTemplate else noDataTemplate\"></ng-container>\r\n <ng-template #searchTemplate>\r\n <div class=\"list-item\">\r\n {{'common.searching' | trans}}\r\n </div>\r\n </ng-template>\r\n <ng-template #noDataTemplate>\r\n <div class=\"list-item\">\r\n {{'common.noDataFound' | trans}}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n</ax-drop-down>", components: [{ type: i1.AXDropdownComponent, selector: "ax-drop-down", inputs: ["rtl", "readonly", "loading"], outputs: ["dropdownToggle", "onButtonClick"] }, { type: i2.AXTextBoxComponent, selector: "ax-text-box", inputs: ["mask", "type", "showMask", "maxLength", "maskGuid", "maskPlaceholder", "maskKeepCharPositions"] }, { type: i3.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["placeholder", "text", "delay"], outputs: ["textChanged", "onButtonClick"] }, { type: i4.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["readonly", "disabled", "size", "label", "tabIndex", "indeterminate", "value"], outputs: ["onValueChanged", "valueChange", "onClick"] }], directives: [{ type: i5.AXHorizontalScrollDirective, selector: "[horizontalScroll]", inputs: ["horizontalScroll"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "trans": i5.AXTranslatorPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
864
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXSelectBoxComponent, decorators: [{
|
|
306
865
|
type: Component,
|
|
307
|
-
args: [{ selector: 'ax-select-box', inputs: [...DROPDOWN_INPUTS, ...INTERACTIVE_INPUTS, ...VALUE_INPUTS, ...TEXTBOX_INPUTS, ...DATALIST_INPUTS, ...SELECTION_INPUTS], outputs: [...DROPDOWN_OUTPUT, ...INTERACTIVE_OUTPUT, ...VALUE_OUTPUT, ...TEXTBOX_OUTPUT, ...SELECTION_OUTPUT], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'ax-editor-container ax-drop-down' }, template: "<ng-content select=\"ax-prefix\">\r\n</ng-content>\r\n<div class=\"ax-dropdown-content\" [class.ax-state-disabled]=\"disabled\" (click)=\"_handleInputClickEvent($event)\">\r\n <div class=\"ax-select-box-selection\" [tabindex]=\"tabIndex\" (focus)=\"_emitOnFocusEvent($event)\"\r\n (blur)=\"_emitOnBlurEvent($event)\">\r\n <ng-container *ngIf=\"selectedItems && selectedItems.length; else showPlaceholder\">\r\n <ng-container *ngIf=\"!multiple; then singleSelectedTemplate; else multipleSelectedTemplate\"></ng-container>\r\n <ng-template #singleSelectedTemplate>\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <span class=\"ax-mx-2\"> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #multipleSelectedTemplate>\r\n <div class=\"ax-flex ax-mx-2\">\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <ax-badge [text]=\"_getItemDisplayTextTemplte(item)\" color=\"light\" class=\"ax-me-2\">\r\n <ax-suffix>\r\n <ax-icon icon=\"ax-ic ax-ic-close ax-cursor-pointer\"\r\n (click)=\"_handleBadgeRemove($event,item)\"></ax-icon>\r\n </ax-suffix>\r\n </ax-badge>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #showPlaceholder>\r\n <div class=\"ax-placeholder\" role=\"textbox\" area-readonly=\"true\"> {{placeholder}}</div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n<ax-button color=\"light\" look=\"blank\" (onClick)=\"clear()\" [tabIndex]=\"-1\"\r\n *ngIf=\"value && clearButton && !(disabled || readonly)\">\r\n <ax-icon icon=\"ax-ic ax-ic-close\"></ax-icon>\r\n</ax-button>\r\n<ax-button [disabled]=\"disabled\" [tabIndex]=\"-1\" color=\"light\" look=\"blank\" (onClick)=\"_handleArrowClickEvent($event)\">\r\n <ax-prefix *ngIf=\"(isLoading && !this.popover.isOpen);else icon\">\r\n <ax-loading type=\"spinner\"></ax-loading>\r\n </ax-prefix>\r\n <ng-template #icon>\r\n <ax-icon #icon icon=\"ax-ic ax-ic-chevron ax-transform ax--rotate-90\"></ax-icon>\r\n </ng-template>\r\n</ax-button>\r\n<ng-content select=\"ax-validation-rule\">\r\n</ng-content>\r\n<ng-content select=\"ax-suffix\">\r\n</ng-content>\r\n<ax-popover [target]=\"_target\" [position]=\"position\" [openTrigger]=\"'manual'\" [closeTrigger]=\"'clickout'\"\r\n (onOpened)=\"_handlePopupOnOpened($event)\" (onClosed)=\"_handlePopupOnClosed($event)\">\r\n <div class=\"ax-overlay-pane \" (keydown)=\"_handlePopoverKeydown($event)\" tabindex=\"0\" aria-modal=\"true\" cdkTrapFocus\r\n [class.ax-overlay-actionsheet]=\"_isMobile\" [class.ax-full]=\"searchSettings.enabled || isLazy\"\r\n [style.min-width.px]=\"_popoverWidth\">\r\n <div class=\"ax-list\">\r\n <div *ngIf=\"_isMobile\" class=\"ax-header\">\r\n <span>{{_popoverTitle}}</span>\r\n <i class=\"ax-ic {{multiple?'ax-ic-check !ax-text-primary-500':'ax-ic-close'}}\" (click)=\"close()\"\r\n tabindex=\"1\"></i>\r\n </div>\r\n <div *ngIf=\"searchSettings.enabled\" class=\"ax-p-2\" [cdkTrapFocus]=\"true\" class=\"ax-header\">\r\n <ax-text-box #searchBox placeholder=\"{{ 'common.search' | trans }}\" [debounceTime]=\"500\" \r\n class=\"ax-w-full ax-sm\" [(value)]=\"searchSettings.expr\" (onValueChanged)=\"_onSearchExprChanged($event)\">\r\n <ax-prefix>\r\n <ax-icon class=\"ax-ic ax-ic-magnify\">\r\n </ax-icon>\r\n </ax-prefix>\r\n </ax-text-box>\r\n </div>\r\n <div class=\"ax-content ax-list-items-container ax-default\" (scroll)=\"_handleListScroll($event)\"\r\n #listContainer>\r\n <ng-container *ngIf=\"displayItems.length; else tmpEmpty\">\r\n <ul>\r\n <ng-container *ngTemplateOutlet=\"tmpTree; context:{ list: displayItems }\">\r\n </ng-container>\r\n <ng-template #tmpTree let-list=\"list\">\r\n <ng-container *ngFor=\"let item of list;let i = index;trackBy : _trackByFunction\">\r\n <ng-container *ngIf=\"itemTemplate; else defualtTemplate\">\r\n <li class=\"ax-list-item\" (click)=\"_handleOnItemClick($event,item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <ng-container\r\n *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item,direction:direction}\">\r\n </ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-template #defualtTemplate>\r\n <ng-container *ngIf=\"item.children?.length > 0;else tmpItem\">\r\n <li class=\"ax-list-item-group\" [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n <ul *ngIf=\"item.children?.length > 0\">\r\n <ng-container\r\n *ngTemplateOutlet=\"tmpTree; context:{ list: item.children }\">\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n <ng-template #tmpItem>\r\n <ng-container *ngIf=\"!multiple; else multipleTemplate\">\r\n <li class=\"ax-list-item\" [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\" [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event,item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n </li>\r\n </ng-container>\r\n <ng-template #multipleTemplate>\r\n <li class=\"ax-list-item\" [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n [class.ax-check-box]=\"checkbox\" [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event,item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <input type=\"checkbox\" [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n *ngIf=\"checkbox\" [checked]=\"isItemSelected(item)\"\r\n [disabled]=\"isItemDisabled(item)\">\r\n <span class=\"ax-ms-2\"> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n </li>\r\n </ng-template>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </ul>\r\n </ng-container>\r\n <ng-container *ngIf=\"isLoading\">\r\n <ng-container *ngIf=\"loadingTemplate; else elseLoadingTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #elseLoadingTemplate>\r\n <div class=\"ax-flex ax-items-center ax-justify-center ax-p-4\">\r\n <ax-loading text=\"{{ 'layout.loading.text' | trans }}\"></ax-loading>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #tmpEmpty>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngIf=\"emptyTemplate; else elseEmptyTemplate\">\r\n <ng-container *ngTemplateOutlet=\"emptyTemplate\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #elseEmptyTemplate>\r\n <div class=\"ax-list-item\">\r\n {{ 'common.no-result-found' | trans }}\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n\r\n </div>\r\n <!-- <div class=\"ax-list-items-container ax-vertical ax-default\" [class.ax-full]=\"_isMobile\"\r\n >\r\n \r\n </div> -->\r\n <!-- <div class=\"ax-footer\">footer</div> -->\r\n </div>\r\n </div>\r\n</ax-popover>" }]
|
|
308
|
-
}], ctorParameters: function () { return [{ type: i0.
|
|
309
|
-
type: ViewChild,
|
|
310
|
-
args: [AXPopoverComponent, { static: true }]
|
|
311
|
-
}], clearButton: [{
|
|
866
|
+
args: [{ selector: 'ax-select-box', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent }], template: "<ax-drop-down [size]=\"size\" [rtl]=\"rtl\" [showDropDownButton]=\"showDropDownButton\" [disabled]=\"disabled\"\r\n [readonly]=\"readonly\" #d (dropdownToggle)=\"dropdownToggleSelecBox($event)\">\r\n <ng-container start>\r\n <ng-content select=\"[start]\">\r\n </ng-content>\r\n </ng-container>\r\n <ng-container header>\r\n <div class=\"ax chips-container\" [horizontalScroll]=\"40\">\r\n <div class=\"chips\" [class.chips-blank]=\"mode === 'single'\" [title]=\"item[textField]\"\r\n *ngFor=\"let item of selectedItems\">\r\n <span class=\"chips-text\">\r\n {{item[textField]}}\r\n </span>\r\n <span class=\"close-icon\" (click)=\"handleItemRemoveClick(item)\"\r\n *ngIf=\"(readonly!=true || itemRemove ==true)&& disabled!=true && (allowNull==true || (selectedItems.length > 1))\">\r\n <i class=\"far fa-times close\"></i>\r\n </span>\r\n </div>\r\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\r\n <ax-text-box #textBoxSelectBox [textAlign]=\"textAlign\"\r\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\" [readonly]=\"readonly\"\r\n [disabled]=\"disabled\" (onkey)=\"handleKeyEvent($event)\" [size]=\"size\"\r\n (onFocus)=\"onFocusTextBox($event)\">\r\n </ax-text-box>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container end>\r\n <ng-content select=\"[end]\">\r\n </ng-content>\r\n </ng-container>\r\n\r\n <ng-container panel>\r\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em;\">\r\n <ax-search-box #serchBox [(value)]=\"text\" (onkey)=\"handleKeyEventSearch($event)\"\r\n (textChanged)=\"textChanged($event)\" (onButtonClick)=\"textChanged($event)\">\r\n </ax-search-box>\r\n </div>\r\n <div class=\"ax list-container\">\r\n <div #listContainer class=\"list-container-items\" (scroll)=\"scrolled($event)\">\r\n <ng-container *ngIf=\"getItems().length>0; then thenTemplate; else elseTemplate\"></ng-container>\r\n <ng-template #thenTemplate>\r\n <div [class.ax-state-disabled]=\"isItemDisabled(item)\" class=\"list-item\"\r\n *ngFor=\"let item of getItems();let i = index\" [class.focused]=\"i==currentfocusedIndex\"\r\n [class.selected]=\"isItemSelected(item)\" (click)=\"handleItemClick($event,item)\">\r\n <div style=\"display: flex;\">\r\n <ax-check-box *ngIf=\"showCheckBox\" [size]=\"size\" [value]=\"isItemSelected(item)\"\r\n [disabled]=\"(!allowNull && selectedItems.length === 1 && isItemSelected(item)) || isItemDisabled(item)\"\r\n (onClick)=\"handleItemClick($event,item)\">\r\n </ax-check-box>\r\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n <ng-container *ngTemplateOutlet=\"rowTemplate; context:{ $implicit: item }\">\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;flex: 1;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n {{ item[textField] }}\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-template>\r\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center;\">\r\n <i class=\"far fa-spinner-third fa-pulse fa-2x\" style=\"color: var(--ax-primary-color);\"></i>\r\n\r\n </div>\r\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\r\n <ng-template #elseTemplate>\r\n <ng-container *ngIf=\"showLoading == true; then searchTemplate else noDataTemplate\"></ng-container>\r\n <ng-template #searchTemplate>\r\n <div class=\"list-item\">\r\n {{'common.searching' | trans}}\r\n </div>\r\n </ng-template>\r\n <ng-template #noDataTemplate>\r\n <div class=\"list-item\">\r\n {{'common.noDataFound' | trans}}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n</ax-drop-down>" }]
|
|
867
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { showDropDownButton: [{
|
|
312
868
|
type: Input
|
|
313
|
-
}],
|
|
314
|
-
type:
|
|
315
|
-
|
|
869
|
+
}], rowTemplate: [{
|
|
870
|
+
type: ContentChild,
|
|
871
|
+
args: [TemplateRef, { static: true }]
|
|
872
|
+
}], rowInputTemplate: [{
|
|
316
873
|
type: Input
|
|
874
|
+
}], span: [{
|
|
875
|
+
type: ViewChild,
|
|
876
|
+
args: [AXTextBoxComponent, { static: true }]
|
|
877
|
+
}], textbox: [{
|
|
878
|
+
type: ViewChild,
|
|
879
|
+
args: [AXTextBoxComponent, { static: true }]
|
|
317
880
|
}], listContainer: [{
|
|
318
881
|
type: ViewChild,
|
|
319
882
|
args: ['listContainer', { static: true }]
|
|
320
|
-
}],
|
|
883
|
+
}], serchBox: [{
|
|
884
|
+
type: ViewChild,
|
|
885
|
+
args: ['serchBox', { static: false }]
|
|
886
|
+
}], textBoxSelectBox: [{
|
|
321
887
|
type: ViewChild,
|
|
322
|
-
args: ['
|
|
323
|
-
}],
|
|
888
|
+
args: ['textBoxSelectBox', { static: true }]
|
|
889
|
+
}], showCheckBox: [{
|
|
890
|
+
type: Input
|
|
891
|
+
}], readonly: [{
|
|
892
|
+
type: Input
|
|
893
|
+
}], rtl: [{
|
|
894
|
+
type: Input
|
|
895
|
+
}], disabled: [{
|
|
896
|
+
type: Input
|
|
897
|
+
}], placeholder: [{
|
|
898
|
+
type: Input
|
|
899
|
+
}], size: [{
|
|
900
|
+
type: Input
|
|
901
|
+
}], allowNull: [{
|
|
902
|
+
type: Input
|
|
903
|
+
}], textAlign: [{
|
|
904
|
+
type: Input
|
|
905
|
+
}], bufferSize: [{
|
|
906
|
+
type: Input
|
|
907
|
+
}], remoteOperation: [{
|
|
908
|
+
type: Input
|
|
909
|
+
}], dropdownToggle: [{
|
|
910
|
+
type: Output
|
|
911
|
+
}], _contentDataSource: [{
|
|
912
|
+
type: ContentChild,
|
|
913
|
+
args: [AXDataSourceComponent, { static: true }]
|
|
914
|
+
}], dataSource: [{
|
|
915
|
+
type: Input
|
|
916
|
+
}], _contentValidation: [{
|
|
324
917
|
type: ContentChild,
|
|
325
|
-
args: [
|
|
326
|
-
}],
|
|
327
|
-
type:
|
|
328
|
-
|
|
918
|
+
args: [AXValidation, { static: true }]
|
|
919
|
+
}], validation: [{
|
|
920
|
+
type: Input
|
|
921
|
+
}], dropdown: [{
|
|
922
|
+
type: ViewChild,
|
|
923
|
+
args: ['d', { static: true }]
|
|
924
|
+
}], disabledCallback: [{
|
|
925
|
+
type: Input
|
|
926
|
+
}], allowSearch: [{
|
|
927
|
+
type: Input
|
|
928
|
+
}], textField: [{
|
|
929
|
+
type: Input
|
|
930
|
+
}], valueField: [{
|
|
931
|
+
type: Input
|
|
932
|
+
}], disabledField: [{
|
|
933
|
+
type: Input
|
|
934
|
+
}], mode: [{
|
|
935
|
+
type: Input
|
|
936
|
+
}], itemsChange: [{
|
|
937
|
+
type: Output
|
|
938
|
+
}], onBlur: [{
|
|
939
|
+
type: Output
|
|
940
|
+
}], onFocus: [{
|
|
941
|
+
type: Output
|
|
942
|
+
}], items: [{
|
|
943
|
+
type: Input
|
|
944
|
+
}], selectionChanged: [{
|
|
945
|
+
type: Output
|
|
946
|
+
}], selectedItemsChange: [{
|
|
947
|
+
type: Output
|
|
948
|
+
}], selectedItems: [{
|
|
949
|
+
type: Input
|
|
950
|
+
}], selectedValuesChange: [{
|
|
951
|
+
type: Output
|
|
952
|
+
}], selectedValues: [{
|
|
953
|
+
type: Input
|
|
329
954
|
}] } });
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb21wb25lbnRzL3NyYy9saWIvc2VsZWN0Ym94L3NlbGVjdGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29tcG9uZW50cy9zcmMvbGliL3NlbGVjdGJveC9zZWxlY3Rib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBdUIsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hMLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsNEJBQTRCLEVBQXFDLE1BQU0sU0FBUyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFHaEQ7Ozs7R0FJRztBQVVILE1BQU0sT0FBTyxvQkFB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RSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs7aUhBNVVRLG9CQUFvQjtxR0FBcEIsb0JBQW9CLCtuQ0FHbEIsa0JBQWtCLDhSQzlCakMsOHdUQXlKYTsyRkQ5SEEsb0JBQW9CO2tCQVRoQyxTQUFTOytCQUNJLGVBQWUsVUFFakIsQ0FBQyxHQUFHLGVBQWUsRUFBRSxHQUFHLGtCQUFrQixFQUFFLEdBQUcsWUFBWSxFQUFFLEdBQUcsY0FBYyxFQUFFLEdBQUcsZUFBZSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsV0FDdkgsQ0FBQyxHQUFHLGVBQWUsRUFBRSxHQUFHLGtCQUFrQixFQUFFLEdBQUcsWUFBWSxFQUFFLEdBQUcsY0FBYyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsaUJBQzlGLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsa0NBQWtDLEVBQUU7K0tBTW5ELE9BQU87c0JBRE4sU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBVy9DLFdBQVc7c0JBRFYsS0FBSztnQkFRSyxjQUFjO3NCQUR4QixLQUFLO2dCQVlOLFFBQVE7c0JBRFAsS0FBSztnQkFJRSxhQUFhO3NCQURwQixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSXBDLFVBQVU7c0JBRGpCLFNBQVM7dUJBQUMsV0FBVztnQkFJZCxxQkFBcUI7c0JBRDVCLFlBQVk7dUJBQUMsZUFBZTtnQkFnSDdCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBsYXRmb3JtLCBBWFRyYW5zbGF0b3IgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBOZ1pvbmUsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IEFYQmFzZVNlbGVjdGlvbkRyb3Bkb3duTWl4aW4sIEFYQ2xpY2tFdmVudCwgQVhWYWx1ZUNoYW5nZWRFdmVudCB9IGZyb20gJy4uL2Jhc2UnO1xyXG5pbXBvcnQgeyBEQVRBTElTVF9JTlBVVFMgfSBmcm9tICcuLi9iYXNlL21peGluL2RhdGFsaXN0LWNvbXBvbmVudC5jbGFzcyc7XHJcbmltcG9ydCB7IERST1BET1dOX0lOUFVUUywgRFJPUERPV05fT1VUUFVUIH0gZnJvbSAnLi4vYmFzZS9taXhpbi9kcm9wZG93bi1taXhpbi5jbGFzcyc7XHJcbmltcG9ydCB7IElOVEVSQUNUSVZFX0lOUFVUUywgSU5URVJBQ1RJVkVfT1VUUFVUIH0gZnJvbSAnLi4vYmFzZS9taXhpbi9pbnRlcmFjdGl2ZS1taXhpbi5jbGFzcyc7XHJcbmltcG9ydCB7IFNFTEVDVElPTl9JTlBVVFMsIFNFTEVDVElPTl9PVVRQVVQgfSBmcm9tICcuLi9iYXNlL21peGluL3NlbGVjdGlvbi1jb21wb25lbnQuY2xhc3MnO1xyXG5pbXBvcnQgeyBURVhUQk9YX0lOUFVUUywgVEVYVEJPWF9PVVRQVVQgfSBmcm9tICcuLi9iYXNlL21peGluL3RleHRib3gtbWl4aW4uY2xhc3MnO1xyXG5pbXBvcnQgeyBWQUxVRV9JTlBVVFMsIFZBTFVFX09VVFBVVCB9IGZyb20gJy4uL2Jhc2UvbWl4aW4vdmFsdWUtbWl4aW4uY2xhc3MnO1xyXG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuLi9wb3BvdmVyJztcclxuaW1wb3J0IHsgQVhUZXh0Qm94Q29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dGJveCc7XHJcblxyXG4vKipcclxuICogVGhlIEJ1dHRvbiBpcyBhIGNvbXBvbmVudCB3aGljaCBkZXRlY3RzIHVzZXIgaW50ZXJhY3Rpb24gYW5kIHRyaWdnZXJzIGEgY29ycmVzcG9uZGluZyBldmVudFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgQ29tcG9uZW50c1xyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2F4LXNlbGVjdC1ib3gnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICdzZWxlY3Rib3guY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgaW5wdXRzOiBbLi4uRFJPUERPV05fSU5QVVRTLCAuLi5JTlRFUkFDVElWRV9JTlBVVFMsIC4uLlZBTFVFX0lOUFVUUywgLi4uVEVYVEJPWF9JTlBVVFMsIC4uLkRBVEFMSVNUX0lOUFVUUywgLi4uU0VMRUNUSU9OX0lOUFVUU10sXHJcbiAgICBvdXRwdXRzOiBbLi4uRFJPUERPV05fT1VUUFVULCAuLi5JTlRFUkFDVElWRV9PVVRQVVQsIC4uLlZBTFVFX09VVFBVVCwgLi4uVEVYVEJPWF9PVVRQVVQsIC4uLlNFTEVDVElPTl9PVVRQVVRdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgaG9zdDogeyBjbGFzczogJ2F4LWVkaXRvci1jb250YWluZXIgYXgtZHJvcC1kb3duJyB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBWFNlbGVjdEJveENvbXBvbmVudCBleHRlbmRzIEFYQmFzZVNlbGVjdGlvbkRyb3Bkb3duTWl4aW4ge1xyXG5cclxuXHJcbiAgICBAVmlld0NoaWxkKEFYUG9wb3ZlckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgIHBvcG92ZXI6IEFYUG9wb3ZlckNvbXBvbmVudDtcclxuXHJcbiAgICBfdGFyZ2V0OiBIVE1MRGl2RWxlbWVudDtcclxuICAgIF9wb3BvdmVyVGl0bGU6IHN0cmluZztcclxuICAgIF9wb3BvdmVyV2lkdGg6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqICBEZWZpbmVzIHRoZSBjbGVhckJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGNsZWFyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBfc2VhcmNoU2V0dGluZ3M6IHsgZW5hYmxlZD86IGJvb2xlYW4sIGV4cHI/OiBzdHJpbmcgfSA9IHsgZW5hYmxlZDogZmFsc2UsIGV4cHI6IG51bGwgfTtcclxuICAgIC8qKlxyXG4gICAgICogIERlZmluZXMgdGhlIHNlYXJjaC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgc2VhcmNoU2V0dGluZ3MoKTogeyBlbmFibGVkPzogYm9vbGVhbiwgZXhwcj86IHN0cmluZyB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoU2V0dGluZ3M7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHNlYXJjaFNldHRpbmdzKHY6IHsgZW5hYmxlZD86IGJvb2xlYW4sIGV4cHI/OiBzdHJpbmcgfSkge1xyXG4gICAgICAgIHRoaXMuX3NlYXJjaFNldHRpbmdzID0gdiB8fCB7IGVuYWJsZWQ6IGZhbHNlLCBleHByOiBudWxsIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgRGVmaW5lcyB0aGUgY2hlY2tib3guXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBjaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2xpc3RDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgcHJpdmF0ZSBsaXN0Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdzZWFyY2hCb3gnKVxyXG4gICAgcHJpdmF0ZSBfc2VhcmNoQm94OiBBWFRleHRCb3hDb21wb25lbnQ7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHlUZW1wbGF0ZScpXHJcbiAgICBwcml2YXRlIF9jb250ZW50RW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcblxyXG4gICAgZ2V0IGVtcHR5VGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRFbXB0eVRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIF9pc01vYmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgX2ZvcmNlRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKlxyXG4gICAgKiAgQGlnbm9yZVxyXG4gICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxyXG4gICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBfem9uZTogTmdab25lLFxyXG4gICAgICAgIHByaXZhdGUgX3BsYXRmb3JtOiBBWFBsYXRmb3JtLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2VsZW1lbnRSZWYsIF9jZHIpO1xyXG4gICAgICAgIHRoaXMuX2lzTW9iaWxlID0gdGhpcy5fcGxhdGZvcm0uaXMoJ01vYmlsZScpO1xyXG4gICAgICAgIHRoaXMuX3BsYXRmb3JtLnJlc2l6ZS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9pc01vYmlsZSA9IHRoaXMuX3BsYXRmb3JtLmlzKCdNb2JpbGUnKTtcclxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlcldpZHRoID0gdGhpcy5faXNNb2JpbGUgPyBudWxsIDogdGhpcy5fdGFyZ2V0Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVBcnJvd0NsaWNrRXZlbnQoZTogQVhDbGlja0V2ZW50KSB7XHJcbiAgICAgICAgZS5uYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLnRvZ2dsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVJbnB1dENsaWNrRXZlbnQoZTogTW91c2VFdmVudCkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy50b2dnbGUoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgb25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm9uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgICAgdGhpcy5fcG9wb3ZlclRpdGxlID0gdGhpcy5wbGFjZWhvbGRlciB8fCBBWFRyYW5zbGF0b3IuZ2V0KCdzZWxlY3Rib3gucG9wb3Zlci50aXRsZScpXHJcbiAgICB9XHJcblxyXG4gICAgb25WaWV3SW5pdCgpIHtcclxuICAgICAgICBzdXBlci5vblZpZXdJbml0KCk7XHJcbiAgICAgICAgdGhpcy5fcG9wb3ZlcldpZHRoID0gdGhpcy5faXNNb2JpbGUgPyBudWxsIDogdGhpcy5fdGFyZ2V0Lm9mZnNldFdpZHRoO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICByZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgICAgIHN1cGVyLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlT25JdGVtQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJdGVtRGlzYWJsZWQoaXRlbSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpXHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdChpdGVtKTtcclxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVMaXN0U2Nyb2xsKGU6IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IGUudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgICAgIGlmICgobGlzdC5zY3JvbGxUb3AgPCBsaXN0LnNjcm9sbEhlaWdodCAtIGxpc3QuY2xpZW50SGVpZ2h0KSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2ZldGNoRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NoZWNrRm9yTG9hZERhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIC8vY29uc3QgaGVhZGVyU2l6ZSA9IEFycmF5LmZyb20obGlzdC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KCcuYXgtaGVhZGVyJykpLnJlZHVjZSgodiwgcykgPT4gdiArIHMub2Zmc2V0SGVpZ2h0LCAwKTtcclxuICAgICAgICBpZiAodGhpcy5sb2FkZWRDb3VudCA8IHRoaXMudG90YWxDb3VudCAmJiBsaXN0LnNjcm9sbEhlaWdodCA8ICgobGlzdC5wYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodCkgKiAxLjUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZldGNoRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfb25EYXRhTG9hZGVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXIuaXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tGb3JMb2FkRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyLnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZm9yY2VGb2N1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzU2VsZWN0ZWRJdGVtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9yY2VGb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfb25WYWx1ZUNoYW5nZWQob2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLl9vblZhbHVlQ2hhbmdlZChvbGRWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVPblJlbW92ZUl0ZW1DbGljayhlOiBNb3VzZUV2ZW50LCBpdGVtOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVuc2VsZWN0SXRlbXMoaXRlbSlcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVCYWRnZVJlbW92ZShlOiBNb3VzZUV2ZW50LCBpdGVtKSB7XHJcbiAgICAgICAgdGhpcy51bnNlbGVjdEl0ZW1zKGl0ZW0pXHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICAgIF9oYW5kbGVLZXlkb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBjb25zdCBpc0xldHRlciA9IG5ldyBSZWdFeHAoL1thLXpBLVowLTlcXC1dLykudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSkpO1xyXG4gICAgICAgIGlmIChlLmNvZGUgPT09ICdCYWNrc3BhY2UnICYmIGUudHlwZSA9PT0gJ2tleWRvd24nICYmXHJcbiAgICAgICAgICAgICgodGhpcy5hbGxvd051bGwgPT09IHRydWUgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHx8XHJcbiAgICAgICAgICAgICAgICAodGhpcy5hbGxvd051bGwgIT09IHRydWUgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzVXNlcklucHV0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy51bnNlbGVjdEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcy5wb3AoKSk7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgoZS5jb2RlID09PSAnQXJyb3dEb3duJyB8fCBlLmNvZGUgPT09ICdBcnJvd1VwJyB8fCBlLmNvZGUgPT09ICdTcGFjZScpICYmICF0aGlzLnBvcG92ZXIuaXNPcGVuICYmIGUudHlwZSA9PT0gJ2tleWRvd24nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VySW5wdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGUuY3RybEtleSB8fCBlLmNvZGUgPT09ICdTcGFjZScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbUJ5TmF2KChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNMZXR0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy50ZXh0ID0gZS5rZXk7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIF9oYW5kbGVQb3BvdmVyS2V5ZG93bihlOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKChlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdBcnJvd1VwJykgJiYgdGhpcy5kaXNwbGF5SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzVXNlcklucHV0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZm9jdXNJdGVtQnlOYXYoKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSkpO1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGUuY29kZSA9PT0gJ0JhY2tzcGFjZScgJiZcclxuICAgICAgICAgICAgKCh0aGlzLmFsbG93TnVsbCA9PT0gdHJ1ZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkgfHxcclxuICAgICAgICAgICAgICAgICh0aGlzLmFsbG93TnVsbCAhPT0gdHJ1ZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVc2VySW5wdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0SXRlbXModGhpcy5zZWxlY3RlZEl0ZW1zLnBvcCgpKTtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgoZS5jb2RlID09PSAnU3BhY2UnIHx8IGUuY29kZSA9PT0gJ0VudGVyJykpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZm9jdXNlZEl0ZW1JZCA9IHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcuYXgtc3RhdGUtZm9jdXMnKS5kYXRhc2V0LmlkO1xyXG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkSXRlbSA9IF8uZmluZExhc3QodGhpcy5mbGF0SXRlbXMsIFt0aGlzLnZhbHVlRmllbGQsIGZvY3VzZWRJdGVtSWRdKTtcclxuICAgICAgICAgICAgaWYgKGZvY3VzZWRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0l0ZW1EaXNhYmxlZChmb2N1c2VkSXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VySW5wdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0KGZvY3VzZWRJdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VySW5wdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbXMoZm9jdXNlZEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlLmNvZGUgPT09IFwiVGFiXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2hhbmRsZVBvcHVwT25PcGVuZWQoZSkge1xyXG4gICAgICAgIHRoaXMucG9wb3Zlci5mb2N1cygpO1xyXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlJdGVtcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JjZUZvY3VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZmV0Y2hEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9mb2N1c1NlbGVjdGVkSXRlbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fc2VhcmNoQm94ICYmICF0aGlzLl9pc01vYmlsZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hCb3guZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVBvcHVwT25DbG9zZWQoZSkge1xyXG4gICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBfZm9jdXNJdGVtQnlOYXYoc2lnbjogLTEgfCAxKTogdm9pZCB7XHJcblxyXG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBjb25zdCBmbiA9IChzKSA9PiBsaXN0LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KHMpO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1EaXYgPSBmbihgLmF4LWxpc3QtaXRlbS5heC1zdGF0ZS1mb2N1c2ApIHx8IGZuKGAuYXgtbGlzdC1pdGVtLmF4LXN0YXRlLXNlbGVjdGVkYCkgfHwgZm4oYC5heC1saXN0LWl0ZW1gKTtcclxuICAgICAgICBsZXQgbmV4dCA9IChzaWduID09IDEgPyBpdGVtRGl2Lm5leHRFbGVtZW50U2libGluZyA6IGl0ZW1EaXYucHJldmlvdXNFbGVtZW50U2libGluZykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9jdXNJdGVtRWxlbWVudChuZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGl0ZW1EaXYuY2xvc2VzdCgnLmF4LWxpc3QtaXRlbS1ncm91cCcpO1xyXG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXMgPSAoc2lnbiA9PSAxID8gcGFyZW50Lm5leHRFbGVtZW50U2libGluZyA6IHBhcmVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKT8ucXVlcnlTZWxlY3RvckFsbCgnbGknKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBzaWduID09IDEgPyBfLmZpcnN0KGxpcykgOiBfLmxhc3QobGlzKTtcclxuICAgICAgICAgICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNJdGVtRWxlbWVudChhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBfZm9jdXNTZWxlY3RlZEl0ZW0oKSB7XHJcbiAgICAgICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3QgZm4gPSAocykgPT4gbGlzdC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihzKTtcclxuICAgICAgICAgICAgY29uc3QgaXRlbURpdiA9IGZuKGAuYXgtbGlzdC1pdGVtLmF4LXN0YXRlLXNlbGVjdGVkYCkgfHwgZm4oYC5heC1saXN0LWl0ZW1gKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1EaXYpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzSXRlbUVsZW1lbnQoaXRlbURpdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9mb2N1c0l0ZW1FbGVtZW50KGVsOiBIVE1MRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGxpc3QucXVlcnlTZWxlY3RvckFsbCgnLmF4LWxpc3QtaXRlbScpLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYyA9PSBlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGMuY2xhc3NMaXN0LmFkZCgnYXgtc3RhdGUtZm9jdXMnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnYXV0bycgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjLmNsYXNzTGlzdC5yZW1vdmUoJ2F4LXN0YXRlLWZvY3VzJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzTW9iaWxlICYmIHRoaXMuX3NlYXJjaEJveClcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlYXJjaEJveC5mb2N1cygpXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsLmZvY3VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgX3NlbGVjdGVkSXRlbUJ5TmF2KHNpZ246IC0xIHwgMSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGxhc3QgPSBfLmxhc3QodGhpcy5zZWxlY3RlZEl0ZW1zKTtcclxuICAgICAgICBsZXQgaSA9IDA7XHJcbiAgICAgICAgaWYgKGxhc3QpIHtcclxuICAgICAgICAgICAgaSA9IF8uZmluZExhc3RJbmRleCh0aGlzLmZsYXRJdGVtcywgW3RoaXMudmFsdWVGaWVsZCwgbGFzdFt0aGlzLnZhbHVlRmllbGRdXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGkgKz0gc2lnbjtcclxuICAgICAgICBsZXQgbmV4dCA9IF8ubnRoPGFueT4odGhpcy5mbGF0SXRlbXMsIGkpO1xyXG4gICAgICAgIHdoaWxlIChuZXh0Py5jaGlsZHJlbiAmJiBuZXh0Py5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaSArPSBzaWduO1xyXG4gICAgICAgICAgICBuZXh0ID0gXy5udGg8YW55Pih0aGlzLmZsYXRJdGVtcywgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbXMobmV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5leHQgPT0gbnVsbCAmJiBzaWduID09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5fZmV0Y2hEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBfb25TZWFyY2hFeHByQ2hhbmdlZChlOiBBWFZhbHVlQ2hhbmdlZEV2ZW50PHN0cmluZz4pIHtcclxuICAgICAgICB0aGlzLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5fZmV0Y2hEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2ZldGNoRGF0YSgpIHtcclxuICAgICAgICBzdXBlci5fZmV0Y2hEYXRhKHsgc2VhcmNoUXVlcnk6IHRoaXMuX3NlYXJjaEJveD8udmFsdWUgfSk7XHJcbiAgICB9XHJcbn0iLCI8bmctY29udGVudCBzZWxlY3Q9XCJheC1wcmVmaXhcIj5cclxuPC9uZy1jb250ZW50PlxyXG48ZGl2IGNsYXNzPVwiYXgtZHJvcGRvd24tY29udGVudFwiIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiIChjbGljayk9XCJfaGFuZGxlSW5wdXRDbGlja0V2ZW50KCRldmVudClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJheC1zZWxlY3QtYm94LXNlbGVjdGlvblwiIFt0YWJpbmRleF09XCJ0YWJJbmRleFwiIChmb2N1cyk9XCJfZW1pdE9uRm9jdXNFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAoYmx1cik9XCJfZW1pdE9uQmx1ckV2ZW50KCRldmVudClcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRJdGVtcyAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aDsgZWxzZSBzaG93UGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtdWx0aXBsZTsgdGhlbiBzaW5nbGVTZWxlY3RlZFRlbXBsYXRlOyBlbHNlIG11bHRpcGxlU2VsZWN0ZWRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZVNlbGVjdGVkVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LW14LTJcIj4ge3sgX2dldEl0ZW1EaXNwbGF5VGV4dFRlbXBsdGUoaXRlbSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtdWx0aXBsZVNlbGVjdGVkVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1teC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWxlY3RlZEl0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1iYWRnZSBbdGV4dF09XCJfZ2V0SXRlbURpc3BsYXlUZXh0VGVtcGx0ZShpdGVtKVwiIGNvbG9yPVwibGlnaHRcIiBjbGFzcz1cImF4LW1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1zdWZmaXg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImF4LWljIGF4LWljLWNsb3NlIGF4LWN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVCYWRnZVJlbW92ZSgkZXZlbnQsaXRlbSlcIj48L2F4LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2F4LXN1ZmZpeD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1iYWRnZT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd1BsYWNlaG9sZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtcGxhY2Vob2xkZXJcIiByb2xlPVwidGV4dGJveFwiIGFyZWEtcmVhZG9ubHk9XCJ0cnVlXCI+IHt7cGxhY2Vob2xkZXJ9fTwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxheC1idXR0b24gY29sb3I9XCJsaWdodFwiIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cImNsZWFyKClcIiBbdGFiSW5kZXhdPVwiLTFcIlxyXG4gICAgKm5nSWY9XCJ2YWx1ZSAmJiBjbGVhckJ1dHRvbiAmJiAgIShkaXNhYmxlZCB8fCByZWFkb25seSlcIj5cclxuICAgIDxheC1pY29uIGljb249XCJheC1pYyBheC1pYy1jbG9zZVwiPjwvYXgtaWNvbj5cclxuPC9heC1idXR0b24+XHJcbjxheC1idXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3RhYkluZGV4XT1cIi0xXCIgY29sb3I9XCJsaWdodFwiIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cIl9oYW5kbGVBcnJvd0NsaWNrRXZlbnQoJGV2ZW50KVwiPlxyXG4gICAgPGF4LXByZWZpeCAqbmdJZj1cIihpc0xvYWRpbmcgJiYgIXRoaXMucG9wb3Zlci5pc09wZW4pO2Vsc2UgaWNvblwiPlxyXG4gICAgICAgIDxheC1sb2FkaW5nIHR5cGU9XCJzcGlubmVyXCI+PC9heC1sb2FkaW5nPlxyXG4gICAgPC9heC1wcmVmaXg+XHJcbiAgICA8bmctdGVtcGxhdGUgI2ljb24+XHJcbiAgICAgICAgPGF4LWljb24gI2ljb24gaWNvbj1cImF4LWljIGF4LWljLWNoZXZyb24gYXgtdHJhbnNmb3JtIGF4LS1yb3RhdGUtOTBcIj48L2F4LWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2F4LWJ1dHRvbj5cclxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtdmFsaWRhdGlvbi1ydWxlXCI+XHJcbjwvbmctY29udGVudD5cclxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtc3VmZml4XCI+XHJcbjwvbmctY29udGVudD5cclxuPGF4LXBvcG92ZXIgW3RhcmdldF09XCJfdGFyZ2V0XCIgW3Bvc2l0aW9uXT1cInBvc2l0aW9uXCIgW29wZW5UcmlnZ2VyXT1cIidtYW51YWwnXCIgW2Nsb3NlVHJpZ2dlcl09XCInY2xpY2tvdXQnXCJcclxuICAgIChvbk9wZW5lZCk9XCJfaGFuZGxlUG9wdXBPbk9wZW5lZCgkZXZlbnQpXCIgKG9uQ2xvc2VkKT1cIl9oYW5kbGVQb3B1cE9uQ2xvc2VkKCRldmVudClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgXCIgKGtleWRvd24pPVwiX2hhbmRsZVBvcG92ZXJLZXlkb3duKCRldmVudClcIiB0YWJpbmRleD1cIjBcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiIGNka1RyYXBGb2N1c1xyXG4gICAgICAgIFtjbGFzcy5heC1vdmVybGF5LWFjdGlvbnNoZWV0XT1cIl9pc01vYmlsZVwiIFtjbGFzcy5heC1mdWxsXT1cInNlYXJjaFNldHRpbmdzLmVuYWJsZWQgfHwgaXNMYXp5XCJcclxuICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cIl9wb3BvdmVyV2lkdGhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtbGlzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiX2lzTW9iaWxlXCIgY2xhc3M9XCJheC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7X3BvcG92ZXJUaXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJheC1pYyB7e211bHRpcGxlPydheC1pYy1jaGVjayAhYXgtdGV4dC1wcmltYXJ5LTUwMCc6J2F4LWljLWNsb3NlJ319XCIgKGNsaWNrKT1cImNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMVwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hTZXR0aW5ncy5lbmFibGVkXCIgY2xhc3M9XCJheC1wLTJcIiBbY2RrVHJhcEZvY3VzXT1cInRydWVcIiBjbGFzcz1cImF4LWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGF4LXRleHQtYm94ICNzZWFyY2hCb3ggcGxhY2Vob2xkZXI9XCJ7eyAnY29tbW9uLnNlYXJjaCcgfCB0cmFucyB9fVwiIFtkZWJvdW5jZVRpbWVdPVwiNTAwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC13LWZ1bGwgYXgtc21cIiBbKHZhbHVlKV09XCJzZWFyY2hTZXR0aW5ncy5leHByXCIgKG9uVmFsdWVDaGFuZ2VkKT1cIl9vblNlYXJjaEV4cHJDaGFuZ2VkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiAgY2xhc3M9XCJheC1pYyBheC1pYy1tYWduaWZ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cclxuICAgICAgICAgICAgICAgIDwvYXgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY29udGVudCBheC1saXN0LWl0ZW1zLWNvbnRhaW5lciBheC1kZWZhdWx0XCIgKHNjcm9sbCk9XCJfaGFuZGxlTGlzdFNjcm9sbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICNsaXN0Q29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlJdGVtcy5sZW5ndGg7IGVsc2UgdG1wRW1wdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0bXBUcmVlOyBjb250ZXh0OnsgbGlzdDogZGlzcGxheUl0ZW1zIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG1wVHJlZSBsZXQtbGlzdD1cImxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGlzdDtsZXQgaSA9IGluZGV4O3RyYWNrQnkgOiBfdHJhY2tCeUZ1bmN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1UZW1wbGF0ZTsgZWxzZSBkZWZ1YWx0VGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiYXgtbGlzdC1pdGVtXCIgKGNsaWNrKT1cIl9oYW5kbGVPbkl0ZW1DbGljaygkZXZlbnQsaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJpdGVtW3RoaXMudmFsdWVGaWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sZGlyZWN0aW9uOmRpcmVjdGlvbn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmdWFsdFRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMDtlbHNlIHRtcEl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImF4LWxpc3QtaXRlbS1ncm91cFwiIFthdHRyLmRhdGEtaWRdPVwiaXRlbVt0aGlzLnZhbHVlRmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IF9nZXRJdGVtRGlzcGxheVRleHRUZW1wbHRlKGl0ZW0pIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCAqbmdJZj1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0bXBUcmVlOyBjb250ZXh0OnsgbGlzdDogIGl0ZW0uY2hpbGRyZW4gfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG1wSXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbXVsdGlwbGU7ICBlbHNlIG11bHRpcGxlVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJheC1saXN0LWl0ZW1cIiBbY2xhc3MuYXgtc3RhdGUtc2VsZWN0ZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIiBbYXR0ci50YWJpbmRleF09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVPbkl0ZW1DbGljaygkZXZlbnQsaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cIml0ZW1bdGhpcy52YWx1ZUZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgX2dldEl0ZW1EaXNwbGF5VGV4dFRlbXBsdGUoaXRlbSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtdWx0aXBsZVRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImF4LWxpc3QtaXRlbVwiIFtjbGFzcy5heC1zdGF0ZS1zZWxlY3RlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJpc0l0ZW1EaXNhYmxlZChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5heC1jaGVjay1ib3hdPVwiY2hlY2tib3hcIiBbYXR0ci50YWJpbmRleF09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVPbkl0ZW1DbGljaygkZXZlbnQsaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cIml0ZW1bdGhpcy52YWx1ZUZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NsYXNzLmF4LXN0YXRlLWRpc2FibGVkXT1cImlzSXRlbURpc2FibGVkKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1tcy0yXCI+IHt7IF9nZXRJdGVtRGlzcGxheVRleHRUZW1wbHRlKGl0ZW0pIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdUZW1wbGF0ZTsgZWxzZSBlbHNlTG9hZGluZ1RlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlTG9hZGluZ1RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1jZW50ZXIgYXgtcC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtbG9hZGluZyB0ZXh0PVwie3sgJ2xheW91dC5sb2FkaW5nLnRleHQnIHwgdHJhbnMgfX1cIj48L2F4LWxvYWRpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG1wRW1wdHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVtcHR5VGVtcGxhdGU7IGVsc2UgZWxzZUVtcHR5VGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZUVtcHR5VGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtbGlzdC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5uby1yZXN1bHQtZm91bmQnIHwgdHJhbnMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJheC1saXN0LWl0ZW1zLWNvbnRhaW5lciBheC12ZXJ0aWNhbCBheC1kZWZhdWx0XCIgW2NsYXNzLmF4LWZ1bGxdPVwiX2lzTW9iaWxlXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYXgtZm9vdGVyXCI+Zm9vdGVyPC9kaXY+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvYXgtcG9wb3Zlcj4iXX0=
|
|
955
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb21wb25lbnRzL3NyYy9saWIvc2VsZWN0Ym94L3NlbGVjdGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29tcG9uZW50cy9zcmMvbGliL3NlbGVjdGJveC9zZWxlY3Rib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLEtBQUssRUFDTCxZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBR04sV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBK0Qsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlB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QUM7WUFDdkIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDbkIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDeEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDcEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDM0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDckIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDekIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDM0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFDMUIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDckIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDcEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDbkIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDdEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDdEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDdEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDeEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDdkIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDdEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDckIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDbkIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDbEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDbEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDbEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDbEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDbEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENB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TixnQkFBZ0I7c0JBRGYsTUFBTTtnQkFJUCxtQkFBbUI7c0JBRGxCLE1BQU07Z0JBS0ksYUFBYTtzQkFEdkIsS0FBSztnQkFnTE4sb0JBQW9CO3NCQURuQixNQUFNO2dCQUlJLGNBQWM7c0JBRHhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBOZ1pvbmUsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBUZW1wbGF0ZVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFYVGV4dEJveENvbXBvbmVudCB9IGZyb20gJy4uL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCwgQVhCYXNlSW5wdXRDb21wb25lbnQsIEFYRWxlbWVudFNpemUsIEFYVmFsaWRhdGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlL2VsZW1lbnQuY2xhc3MnO1xyXG5pbXBvcnQgeyBBWERhdGFTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS9kYXRhc291cmNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYVmFsaWRhdGlvbiB9IGZyb20gJy4uL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWERhdGFTb3VyY2VSZWFkUGFyYW1zIH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UvcmVhZC1wYXJhbSc7XHJcbmltcG9ydCB7IEFYQmFzZUV2ZW50IH0gZnJvbSAnLi4vYmFzZS9ldmVudHMuY2xhc3MnO1xyXG5pbXBvcnQgeyBBWFNlYXJjaEJveENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaGJveC9zZWFyY2hib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhDb25maWcgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5pbXBvcnQgeyBkaWZmZXJlbmNlQnkgfSBmcm9tICdsb2Rhc2gnO1xyXG5leHBvcnQgY2xhc3MgQVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXh0ZW5kcyBBWEJhc2VFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoY29tcG9uZW50OiBhbnksIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBhbnlbXSwgcHVibGljIHNlbGVjdGVkVmFsdWVzOiBhbnlbXSB8IGFueSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdheC1zZWxlY3QtYm94JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0Ym94LmNvbXBvbmVudC5odG1sJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGhvc3Q6IHsgc3R5bGU6ICd3aWR0aDogMTAwJScgfSxcclxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYVmFsaWRhdGFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNlbGVjdEJveENvbXBvbmVudCB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQVhTZWxlY3RCb3hDb21wb25lbnQgZXh0ZW5kcyBBWFZhbGlkYXRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCwgQVhCYXNlSW5wdXRDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHNob3dEcm9wRG93bkJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgcm93VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcm93SW5wdXRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKEFYVGV4dEJveENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBzcGFuOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZChBWFRleHRCb3hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdGV4dGJveDogQVhUZXh0Qm94Q29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkKCdsaXN0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBsaXN0Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2VyY2hCb3gnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBzZXJjaEJveDogQVhTZWFyY2hCb3hDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RleHRCb3hTZWxlY3RCb3gnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHRleHRCb3hTZWxlY3RCb3g6IEFYVGV4dEJveENvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NoZWNrQm94OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcnRsOiBib29sZWFuID0gQVhDb25maWcuZ2V0KCdsYXlvdXQucnRsJyk7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIHNpemU6IEFYRWxlbWVudFNpemUgPSAnbWQnO1xyXG5cclxuICBASW5wdXQoKSBhbGxvd051bGw6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSB0ZXh0QWxpZ246ICdyaWdodCcgfCAnbGVmdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgYnVmZmVyU2l6ZTogbnVtYmVyID0gMjA7XHJcblxyXG4gIEBJbnB1dCgpIHJlbW90ZU9wZXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBkcm9wZG93blRvZ2dsZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyB0aGlzIGlucHV0IGlzIFByaXZhdGUgYW5kIG9ubHkgdXNlIGluIExPVlxyXG5cclxuICBjdXJyZW50Zm9jdXNlZEluZGV4OiBudW1iZXIgPSAtMTtcclxuICBzaG93TG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBza2lwOiBudW1iZXIgPSAtMTtcclxuICBzZWFyY2hUZXh0OiBzdHJpbmcgPSAnJztcclxuICAvLyBASW5wdXQoKVxyXG4gIC8vIGNoaXBzV2lkdGg6IHN0cmluZyA9ICcnO1xyXG5cclxuICB0ZXh0OiBzdHJpbmcgPSAnJztcclxuICB0b3RhbENvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICBAQ29udGVudENoaWxkKEFYRGF0YVNvdXJjZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwcml2YXRlIF9jb250ZW50RGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xyXG5cclxuICBwcml2YXRlIF9kYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSA/IHRoaXMuX2RhdGFTb3VyY2UgOiB0aGlzLl9jb250ZW50RGF0YVNvdXJjZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGF0YVNvdXJjZSh2OiBBWERhdGFTb3VyY2VDb21wb25lbnQpIHtcclxuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2O1xyXG4gIH1cclxuXHJcbiAgQENvbnRlbnRDaGlsZChBWFZhbGlkYXRpb24sIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgcHJpdmF0ZSBfY29udGVudFZhbGlkYXRpb246IEFYVmFsaWRhdGlvbjtcclxuXHJcbiAgcHJpdmF0ZSBfdmFsaWRhdGlvbjogQVhWYWxpZGF0aW9uO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgdmFsaWRhdGlvbigpOiBBWFZhbGlkYXRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRpb24gPyB0aGlzLl92YWxpZGF0aW9uIDogdGhpcy5fY29udGVudFZhbGlkYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHZhbGlkYXRpb24odjogQVhWYWxpZGF0aW9uKSB7XHJcbiAgICB0aGlzLl92YWxpZGF0aW9uID0gdjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgem9uZTogTmdab25lKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZCcsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZHJvcGRvd246IEFYRHJvcGRvd25Db21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVkQ2FsbGJhY2s6IChlOiB7IGl0ZW06IGFueTsgaW5kZXg6IG51bWJlciB9KSA9PiBib29sZWFuO1xyXG5cclxuICBASW5wdXQoKSBhbGxvd1NlYXJjaDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdGV4dEZpZWxkOiBzdHJpbmcgPSAndGV4dCc7XHJcbiAgQElucHV0KCkgdmFsdWVGaWVsZDogc3RyaW5nID0gJ3ZhbHVlJztcclxuICBASW5wdXQoKSBkaXNhYmxlZEZpZWxkOiBzdHJpbmcgPSAnZGlzYWJsZWQnO1xyXG4gIEBJbnB1dCgpIG1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xyXG4gIGl0ZW1SZW1vdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgaXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtcztcclxuICB9XHJcbiAgcHVibGljIHNldCBpdGVtcyh2OiBhbnlbXSkge1xyXG4gICAgdGhpcy5faXRlbXMgPSB2O1xyXG4gICAgaWYgKHRoaXMuaXRlbXNDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHYpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNTZWxlY3RlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXRlbXNGaWx0ZXJlZDogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICBkcm9wRG93bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBzZWxlY3RlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtcygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcyB8fCBbXTtcclxuICB9XHJcbiAgcHVibGljIHNldCBzZWxlY3RlZEl0ZW1zKHY6IGFueVtdKSB7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXNDaGFuZ2Uodik7XHJcbiAgICAvLyBpZiAoIXYpIHtcclxuICAgIC8vICAgdiA9IFtdO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGNvbnN0IG9sZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcztcclxuICAgIC8vIGlmIChKU09OLnN0cmluZ2lmeShvbGQpICE9PSBKU09OLnN0cmluZ2lmeSh2KSkge1xyXG4gICAgLy8gICB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlID09ICdzaW5nbGUnID8gdi5zbGljZSgwLCAxKSA6IFsuLi5uZXcgU2V0KHYpXTsgLy9bLi4ubmV3IFNldCh2WzBdKV0gOiBbLi4ubmV3IFNldCh2KV07XHJcbiAgICAvLyAgIHRoaXMuX3NlbGVjdGVkSXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0cnVlKSk7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAvLyAgIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICAvLyAgIHRoaXMud2FpdEZvckRhdGEoKCkgPT4ge1xyXG4gICAgLy8gICAgIGlmICh0aGlzLl9zZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGMpID0+IChjLnNlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5zb21lKChpKSA9PiBpW3RoaXMudmFsdWVGaWVsZF0gPT0gY1t0aGlzLnZhbHVlRmllbGRdKSkpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZEl0ZW1zQ2hhbmdlKHY6IGFueVtdLCBvbGQ6IGFueVtdID0gdGhpcy5zZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICBpZiAoIXYpIHtcclxuICAgICAgdiA9IFtdO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc3Qgb2xkID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgdmFyIGYgPSBkaWZmZXJlbmNlQnkob2xkLCB2LCB0aGlzLnZhbHVlRmllbGQpO1xyXG4gICAgdmFyIHMgPSBkaWZmZXJlbmNlQnkodiwgb2xkLCB0aGlzLnZhbHVlRmllbGQpO1xyXG4gICAgLy8gaWYgKEpTT04uc3RyaW5naWZ5KG9sZCkgIT09IEpTT04uc3RyaW5naWZ5KHYpKSB7XHJcbiAgICBpZiAoZi5sZW5ndGggIT0gMCB8fCBzLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGUgPT0gJ3NpbmdsZScgPyB2LnNsaWNlKDAsIDEpIDogWy4uLm5ldyBTZXQodildOyAvL1suLi5uZXcgU2V0KHZbMF0pXSA6IFsuLi5uZXcgU2V0KHYpXTtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRydWUpKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoKGkpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKHRoaXMucm93VGVtcGxhdGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnJvd0lucHV0VGVtcGxhdGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucm93VGVtcGxhdGUgPSB0aGlzLnJvd0lucHV0VGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ydGwgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJ0bCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2RpcmVjdGlvbicpID09PSAncnRsJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNjcm9sbGVkKGUpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5yZW1vdGVPcGVyYXRpb24gJiZcclxuICAgICAgdGhpcy50b3RhbENvdW50ID4gdGhpcy5pdGVtcy5sZW5ndGggJiZcclxuICAgICAgdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICE9IDAgJiZcclxuICAgICAgdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIC0gMzAwIDwgNTBcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5za2lwICE9PSB0aGlzLml0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2tpcCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xyXG4gICAgICAgIHBhcmFtcy5za2lwID0gdGhpcy5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7IC8vKiAoTWF0aC5mbG9vcih0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuYnVmZmVyU2l6ZSkgKyAxKTtcclxuICAgICAgICBpZiAodGhpcy50ZXh0Ym94KSB7XHJcbiAgICAgICAgICBwYXJhbXMuc2VhcmNoVGV4dCA9IHRoaXMudGV4dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZldGNoKHBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEl0ZW1zKHY6IGFueVtdLCBpc1VzZXJJbnB1dDogYm9vbGVhbikge1xyXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChpc1VzZXJJbnB1dCkge1xyXG4gICAgICBjaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB2O1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KCk7XHJcbiAgICBpZiAoaXNVc2VySW5wdXQgJiYgY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VhcmNoQ2hhbmdlT2JzZXJ2ZXI6IGFueTtcclxuXHJcbiAgZGVsYXk6IG51bWJlciA9IDUwMDtcclxuXHJcbiAgdGV4dENoYW5nZWQoZSkge1xyXG4gICAgaWYgKChlLnZhbHVlID09PSBudWxsIHx8IGUudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBlLnZhbHVlID09PSAnJykgJiYgKGUub2xkVmFsdWUgPT09IG51bGwgfHwgZS5vbGRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGUub2xkVmFsdWUgPT09ICcnKSkge1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gLTE7XHJcbiAgICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMudGV4dDtcclxuICAgICAgICAvLyAgdGhpcy5zZWFyY2hUZXh0ID0gZS52YWx1ZTtcclxuICAgICAgICAvLyB0aGlzLnRleHQgPSBlLnZhbHVlO1xyXG4gICAgICAgIC8vIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5pdGVtcykge1xyXG4gICAgICAgICAgbGV0IHQgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzLml0ZW1zLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAvLyAgIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XHJcbiAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XHJcbiAgICAgICAgLy8gcGFyYW1zLnNlYXJjaFRleHQgPSBlLnZhbHVlO1xyXG4gICAgICAgIHBhcmFtcy5za2lwID0gMDtcclxuICAgICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTtcclxuICAgICAgICB0aGlzLmZldGNoKHBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSXRlbURpc2FibGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGl0ZW1bdGhpcy5kaXNhYmxlZEZpZWxkXSA9PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRpc2FibGVkQ2FsbGJhY2spIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRDYWxsYmFjayh7IGl0ZW0sIGluZGV4OiAtMSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQnV0dG9uQ2xpY2soZSkge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEluZGV4KHNpZ246IC0xIHwgMSB8IG51bGwgPSBudWxsKTogdm9pZCB7XHJcbiAgICBpZiAoc2lnbiA9PSBudWxsKSB7XHJcbiAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zXHJcbiAgICAgICAgICAuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlcclxuICAgICAgICAgIC5pbmRleE9mKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IHRoaXMuaXRlbXMuaW5kZXhPZih0aGlzLnNlbGVjdGVkSXRlbXNbdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2lnbiA9PT0gLTEgPyB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXgtLSA6IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xyXG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy50ZXh0XHJcbiAgICAgICAgPyB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpXHJcbiAgICAgICAgOiB0aGlzLml0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9XHJcbiAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA8IDBcclxuICAgICAgICA/IDBcclxuICAgICAgICA6IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA+PSB0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoXHJcbiAgICAgICAgPyB0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoIC0gMVxyXG4gICAgICAgIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4O1xyXG4gICAgLy9cclxuICAgIC8vIHNldCBzY3JvbGxcclxuICAgIGlmICh0aGlzLmxpc3RDb250YWluZXIpIHtcclxuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICBjb25zdCBpdGVtRGl2ID0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLmxpc3QtaXRlbTpudGgtY2hpbGQoJHt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXh9KWApO1xyXG4gICAgICAgIGlmIChpdGVtRGl2KSB7XHJcbiAgICAgICAgICBpdGVtRGl2LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KClcclxuICBzZWxlY3RlZFZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdIHwgYW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10gfCBhbnk+KCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBzZWxlY3RlZFZhbHVlcygpOiBhbnlbXSB8IGFueSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSlbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSkgfHwgW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVmFsdWVzKHY6IGFueVtdIHwgYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb21wYXJlU2VsZWN0ZWRWYWx1ZXModikpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHYgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodiAhPSBbXSAmJiB2ICE9ICcnICYmIHYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5oYXNTZWxlY3RlZFZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2FpdEZvckRhdGEoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2ID09IGNbdGhpcy52YWx1ZUZpZWxkXSkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdiA9PSBjW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gdi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IHYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBhZGRJZCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdi5mb3JFYWNoKCh2SWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgYWRkSWQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMudmFsdWVGaWVsZF06IHZJZFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuZXdJZCA9IGRpZmZlcmVuY2VCeShhZGRJZCwgdGhpcy5zZWxlY3RlZEl0ZW1zLCB0aGlzLnZhbHVlRmllbGQpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZ2ID0gW107XHJcbiAgICAgICAgICAgICAgICBuZXdJZC5mb3JFYWNoKChyYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB2di5wdXNoKHJjW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXHJcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGMpID0+IHZ2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpXHJcbiAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChyZXMpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdnYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zQ2hhbmdlKHRoaXMuc2VsZWN0ZWRJdGVtcywgdnYubGVuZ3RoID4gMCA/IFsxXSA6IHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2ID09PSBjW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wYXJlU2VsZWN0ZWRWYWx1ZXMobmV3VmFsdWU6IGFueVtdIHwgYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzO1xyXG4gICAgcmV0dXJuIChjdXJyZW50VmFsdWUgPT0gbnVsbCAmJiBuZXdWYWx1ZSA9PSBudWxsKSB8fCBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkVmFsdWVzKHY6IGFueVtdIHwgYW55LCBpc1VzZXJJbnB1dDogYm9vbGVhbikge1xyXG4gICAgY29uc3QgY2hhbmdlZCA9IGlzVXNlcklucHV0ID8gIXRoaXMuY29tcGFyZVNlbGVjdGVkVmFsdWVzKHYpIDogZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdjtcclxuICAgIGlmIChpc1VzZXJJbnB1dCAmJiBjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQobmV3IEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHRoaXMuc2VsZWN0ZWRJdGVtcywgdGhpcy5zZWxlY3RlZFZhbHVlcykpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYnVmZmVyU2l6ZSA8IDEwKSB7XHJcbiAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDEwO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgICB0aGlzLnNob3dDaGVja0JveCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93Q2hlY2tCb3ggPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiB8fCAodGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy5oYXNTZWxlY3RlZFZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcbiAgZHJvcGRvd25Ub2dnbGVTZWxlY0JveChlKSB7XHJcbiAgICB0aGlzLnRleHQgPSAnJztcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcclxuICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kcm9wZG93blRvZ2dsZS5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgLy8gaWYgKCF0aGlzLmFsbG93U2VhcmNoKSB7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMucmVhZG9ubHkgPT0gZmFsc2UpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5pdGVtUmVtb3ZlID0gdHJ1ZTtcclxuICAgIC8vICAgICAgICAgdGhpcy5yZWFkb25seSA9IHRydWU7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5pbml0VmFsaWRhdGlvbih0aGlzLnJlZiwgJ3NlbGVjdGVkSXRlbXMnLCB0aGlzLnZhbGlkYXRpb24pO1xyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICAvLyBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSBmYWxzZSkge1xyXG4gICAgICAvLyAgIHRoaXMuZmV0Y2goKTtcclxuICAgICAgLy8gfVxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQuc3Vic2NyaWJlKChjKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGF0YVJlY2VpdmVkKGMuZGF0YS5yZXN1bHQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkYXRhUmVjZWl2ZWQoZGF0YTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAmJiB0aGlzLnNlYXJjaFRleHQgIT0gbnVsbCAmJiB0aGlzLnNlYXJjaFRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgaWYgKGRhdGEudG90YWxDb3VudCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zID0gZGF0YS5pdGVtcztcclxuICAgICAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcclxuICAgICAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLnRvdGFsQ291bnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS5pdGVtcyA9PSB1bmRlZmluZWQgPyAwIDogZGF0YS5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEuaXRlbXMgJiYgZGF0YS5pdGVtcy5sZW5ndGggPT09IGRhdGEudG90YWxDb3VudCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEuaXRlbXMubGVuZ3RoO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudG90YWxDb3VudCkge1xyXG4gICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoZWxtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goZWxtKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEudG90YWxDb3VudDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkYXRhLmZvckVhY2goKGVsbSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGVsbSk7XHJcbiAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pdGVtcyA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdGhpcy5kcm9wZG93bi51cGRhdGVQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcclxuXHJcbiAgZmV0Y2gocGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge30pIHtcclxuICAgIC8vICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy5zaG93TG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5mZXRjaChwYXJhbXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xyXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgIHBhcmFtcy5za2lwID0gMDtcclxuICAgICAgdGhpcy5za2lwID0gMDtcclxuICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgIC8vIHRoaXMuaXRlbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAvLyAgIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdDsgaSsrKSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnBvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXMobnVsbCwgdHJ1ZSk7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xyXG4gICAgICAvLyB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gYyAhPT0gaXRlbSk7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gIT09IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSksXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICAvLyB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5maWx0ZXIoYyA9PiBjICE9PSBpdGVtKTtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgIC8vIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnRleHQgPSAnJztcclxuICAgIHRoaXMudmFsaWRhdGUoKTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1c1RleHRCb3goZSkge31cclxuXHJcbiAgb25UZXh0Qm94Q2xpY2soZSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgPT0gZmFsc2UgJiYgdGhpcy5yZWFkb25seSA9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUl0ZW1DbGljayhlOiBNb3VzZUV2ZW50LCBpdGVtOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmlzSXRlbURpc2FibGVkKGl0ZW0pID09IGZhbHNlKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVt0aGlzLnZhbHVlRmllbGRdO1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyh2YWx1ZSwgdHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5zbGljZSgwKTtcclxuICAgICAgICBpZiAoZXhpc3RzLmluY2x1ZGVzKHZhbHVlKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHwgKHRoaXMuYWxsb3dOdWxsID09IGZhbHNlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZXhpc3RzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgLy8gdGhpcy5zZWxlY3RlZFZhbHVlcyA9IGV4aXN0cztcclxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXMoZXhpc3RzLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcclxuICAgICAgICB0aGlzLnRleHQgPSAnJztcclxuICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gaWYgKGUuc3RvcFByb3BhZ2F0aW9uKCkgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5RXZlbnRTZWFyY2goZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICB9LCAwKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLnRleHQgPSBudWxsO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgICBpZiAoKGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnKSAmJiB0aGlzLmdldEl0ZW1zKCkubGVuZ3RoID4gMCAmJiBlLnR5cGUgPT09ICdrZXlkb3duJykge1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCArIChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQnlJbmRleCh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xyXG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGlmIChlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuICYmIHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgLy8gICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgdGhpcy5kcm9wZG93bi5mb2N1cygpO1xyXG4gICAgLy8gICAgIH0sIDApO1xyXG4gICAgLy8gfVxyXG4gICAgLy9lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nICYmIGUua2V5ID09ICdFbnRlcicgJiYgdGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gPT09IHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF0pLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICB0aGlzLm1vZGUgPT0gJ211bHRpcGxlJ1xyXG4gICAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5hbGxvd051bGwgPT0gdHJ1ZSB8fCAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGMpID0+XHJcbiAgICAgICAgICAgICAgICBjICE9PVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gIT09IHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09ICdtdWx0aXBsZScpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbMF0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLnRleHQgJiYgdGhpcy5pdGVtc0ZpbHRlcmVkPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKHRoaXMuaXRlbXNGaWx0ZXJlZCwgdHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGlzQ2hhcihzdHI6IHN0cmluZykge1xyXG4gICAgaWYgKFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1NoaWZ0JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdUYWInKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0NvbnRyb2wnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0FsdCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQ2Fwc0xvY2snKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ01ldGEnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0NvbnRleHRNZW51JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdFbnRlcicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQmFja3NwYWNlJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdQcmludFNjcmVlbicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnU2Nyb2xsTG9jaycpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnUGF1c2UnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0hvbWUnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0VuZCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnSW5zZXJ0JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdQYWdlVXAnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0RlbGV0ZScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnUGFnZURvd24nKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ051bUxvY2snKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0VzY2FwZScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQXJyb3cnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ9mRRjEnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0YyJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGMycpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjQnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y1JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGNicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjcnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y4JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGOScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjEwJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTEnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0YxMicpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVLZXlFdmVudChlOiBhbnkpIHtcclxuICAgIC8vIGNvbnN0IE51bWJlck1pbnVzUGF0dGVybiA9IC9bYS16QS1aMC05XFwtXS9nO1xyXG4gICAgLy8gY29uc3QgRmFyc2kgPSAvW9m+2obYrNit2K7Zh9i52LrZgdmC2KvYtdi22LTYs9uM2KjZhNin2KrZhtmF2qnar9mI2KbYr9iw2LHYsti32LjamNik2KXYo9ih2YvZjNmN2Y7Zj9mQ2ZFcXHNdKyQvO1xyXG4gICAgLy8gIGNvbnN0IGlucHV0Q2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7XHJcbiAgICAvLyBjb25zdCBwYXR0ZXJuRW4gPSAvXlthLXpBLVowLTldKiQvO1xyXG4gICAgLy8gY29uc3QgcGF0dGVybiA9IC9eW1xcdTA2MDAtXFx1MDZGRlxcc10rJC87XHJcbiAgICBjb25zdCBpbnB1dENoYXIgPSBlLmtleTtcclxuICAgIGlmIChcclxuICAgICAgKGlucHV0Q2hhciAhPSAnQmFja3NwYWNlJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnQmFja3NwYWNlJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnVGFiJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnRW50ZXInICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdFc2NhcGUnICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdBcnJvd0Rvd24nICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdBcnJvd1VwJykgfHxcclxuICAgICAgZS5jb2RlID09PSAnU3BhY2UnIHx8XHJcbiAgICAgIGUuY3RybEtleSA9PSB0cnVlXHJcbiAgICApIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBlLmtleSA9PT0gJ0JhY2tzcGFjZScgJiZcclxuICAgICAgZS50eXBlID09PSAna2V5ZG93bicgJiZcclxuICAgICAgKCh0aGlzLmFsbG93TnVsbCA9PT0gdHJ1ZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkgfHwgKHRoaXMuYWxsb3dOdWxsID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnBvcCgpO1xyXG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IElOUFVUID0gU3RyaW5nLmZyb21DaGFyQ29kZShlLmtleUNvZGUpO1xyXG4gICAgaWYgKHRoaXMuaXNDaGFyKGUua2V5KSAmJiB0aGlzLmFsbG93U2VhcmNoICYmIGUuY3RybEtleSA9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcclxuICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDApO1xyXG4gICAgICB0aGlzLnRleHQgPSBlLmtleTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIHRoaXMudGV4dCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gICAgaWYgKChlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdBcnJvd1VwJykgJiYgdGhpcy5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiYgZS50eXBlID09PSAna2V5ZG93bicpIHtcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUJ5SW5kZXgodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICsgKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xyXG4gICAgICAgICAgLy8gIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PT0gZmFsc2UpIHtcclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nICYmIGUua2V5ID09ICdFbnRlcicgJiYgdGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSA9PT0gdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXSkubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgdGhpcy5tb2RlID09ICdtdWx0aXBsZSdcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmFsbG93TnVsbCA9PSB0cnVlIHx8ICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoYykgPT5cclxuICAgICAgICAgICAgICAgICAgYyAhPT1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gIT09IHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbMF0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGV4dCAmJiB0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKHRoaXMuaXRlbXNGaWx0ZXJlZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIHRoaXMudGV4dGJveC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRJdGVtQnlJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICBsZXQgaXRlbSA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpO1xyXG5cclxuICAgICAgaXRlbSA9IHRoaXMuaXRlbXNGaWx0ZXJlZFtpbmRleF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtID0gdGhpcy5pdGVtc1tpbmRleF07XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gIGNvbnN0IGl0ZW0gPSB0aGlzLnRleHQgPyB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpW2luZGV4XSA6IHRoaXMuaXRlbXNbaW5kZXhdO1xyXG4gICAgaWYgKGl0ZW0pIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKFtpdGVtXSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KCk7XHJcbiAgfVxyXG5cclxuICBnZXRJdGVtcygpOiBhbnlbXSB7XHJcbiAgICBpZiAodGhpcy5pdGVtcyA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiAhdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJydcclxuICAgICAgPyB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpXHJcbiAgICAgIDogdGhpcy5pdGVtcztcclxuICB9XHJcblxyXG4gIGlzSXRlbVNlbGVjdGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gPT09IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXRlbXNTdGF0dXNPYnNlcnZlcjogYW55O1xyXG4gIHByaXZhdGUgd2FpdEZvckRhdGEoY2FsbGJhY2tmbjogKCkgPT4gdm9pZCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGgpIHtcclxuICAgICAgY2FsbGJhY2tmbigpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlciA9IG9ic2VydmVyO1xyXG4gICAgICB9KVxyXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxyXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgICAgY2FsbGJhY2tmbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8YXgtZHJvcC1kb3duIFtzaXplXT1cInNpemVcIiBbcnRsXT1cInJ0bFwiIFtzaG93RHJvcERvd25CdXR0b25dPVwic2hvd0Ryb3BEb3duQnV0dG9uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiICNkIChkcm9wZG93blRvZ2dsZSk9XCJkcm9wZG93blRvZ2dsZVNlbGVjQm94KCRldmVudClcIj5cclxuICAgIDxuZy1jb250YWluZXIgc3RhcnQ+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3N0YXJ0XVwiPlxyXG4gICAgICAgIDwvbmctY29udGVudD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciBoZWFkZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4IGNoaXBzLWNvbnRhaW5lclwiIFtob3Jpem9udGFsU2Nyb2xsXT1cIjQwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwc1wiIFtjbGFzcy5jaGlwcy1ibGFua109XCJtb2RlID09PSAnc2luZ2xlJ1wiIFt0aXRsZV09XCJpdGVtW3RleHRGaWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwcy10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tpdGVtW3RleHRGaWVsZF19fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbG9zZS1pY29uXCIgKGNsaWNrKT1cImhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIocmVhZG9ubHkhPXRydWUgfHwgaXRlbVJlbW92ZSA9PXRydWUpJiYgZGlzYWJsZWQhPXRydWUgJiYgKGFsbG93TnVsbD09dHJ1ZSB8fCAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS10aW1lcyBjbG9zZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiIChjbGljayk9XCJvblRleHRCb3hDbGljaygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8YXgtdGV4dC1ib3ggI3RleHRCb3hTZWxlY3RCb3ggW3RleHRBbGlnbl09XCJ0ZXh0QWxpZ25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PSAwID8gcGxhY2Vob2xkZXIgOiAnJ1wiIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgKG9ua2V5KT1cImhhbmRsZUtleUV2ZW50KCRldmVudClcIiBbc2l6ZV09XCJzaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAob25Gb2N1cyk9XCJvbkZvY3VzVGV4dEJveCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2F4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciBlbmQ+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2VuZF1cIj5cclxuICAgICAgICA8L25nLWNvbnRlbnQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyIHBhbmVsPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJhbGxvd1NlYXJjaFwiIGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIiBzdHlsZT1cInBhZGRpbmc6IDAuN2VtO1wiPlxyXG4gICAgICAgICAgICA8YXgtc2VhcmNoLWJveCAjc2VyY2hCb3ggWyh2YWx1ZSldPVwidGV4dFwiIChvbmtleSk9XCJoYW5kbGVLZXlFdmVudFNlYXJjaCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICh0ZXh0Q2hhbmdlZCk9XCJ0ZXh0Q2hhbmdlZCgkZXZlbnQpXCIgKG9uQnV0dG9uQ2xpY2spPVwidGV4dENoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2F4LXNlYXJjaC1ib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4IGxpc3QtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgI2xpc3RDb250YWluZXIgY2xhc3M9XCJsaXN0LWNvbnRhaW5lci1pdGVtc1wiIChzY3JvbGwpPVwic2Nyb2xsZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEl0ZW1zKCkubGVuZ3RoPjA7IHRoZW4gdGhlblRlbXBsYXRlOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0aGVuVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIiBjbGFzcz1cImxpc3QtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEl0ZW1zKCk7bGV0IGkgPSBpbmRleFwiIFtjbGFzcy5mb2N1c2VkXT1cImk9PWN1cnJlbnRmb2N1c2VkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIiAoY2xpY2spPVwiaGFuZGxlSXRlbUNsaWNrKCRldmVudCxpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1jaGVjay1ib3ggKm5nSWY9XCJzaG93Q2hlY2tCb3hcIiBbc2l6ZV09XCJzaXplXCIgW3ZhbHVlXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKCFhbGxvd051bGwgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDEgJiYgaXNJdGVtU2VsZWN0ZWQoaXRlbSkpIHx8IGlzSXRlbURpc2FibGVkKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVJdGVtQ2xpY2soJGV2ZW50LGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2F4LWNoZWNrLWJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dUZW1wbGF0ZTsgZWxzZSBlbHNlVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDt0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztvdmVyZmxvdzogaGlkZGVuO2ZsZXg6IDE7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1bdGV4dEZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIihzaG93Q2hlY2tCb3gpID8geydwYWRkaW5nLWlubGluZS1zdGFydCc6ICcwLjVyZW0nfTonJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93VGVtcGxhdGU7IGNvbnRleHQ6eyAkaW1wbGljaXQ6IGl0ZW0gfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZVRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO3RleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO292ZXJmbG93OiBoaWRkZW47ZmxleDogMTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbVt0ZXh0RmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiKHNob3dDaGVja0JveCkgPyB7J3BhZGRpbmctaW5saW5lLXN0YXJ0JzogJzAuNXJlbSd9OicnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1bdGV4dEZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dMb2FkaW5nXCIgY2xhc3M9XCJheC1wYWQtc21cIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS1zcGlubmVyLXRoaXJkIGZhLXB1bHNlIGZhLTJ4XCIgc3R5bGU9XCJjb2xvcjogdmFyKC0tYXgtcHJpbWFyeS1jb2xvcik7XCI+PC9pPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8YXgtbG9hZGluZy1pbmRpY2F0b3IgPjwvYXgtbG9hZGluZy1pbmRpY2F0b3I+IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dMb2FkaW5nID09IHRydWU7IHRoZW4gc2VhcmNoVGVtcGxhdGUgZWxzZSBub0RhdGFUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VhcmNoVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J2NvbW1vbi5zZWFyY2hpbmcnIHwgdHJhbnN9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J2NvbW1vbi5ub0RhdGFGb3VuZCcgfCB0cmFuc319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuPC9heC1kcm9wLWRvd24+Il19
|