@coreui/angular-pro 5.2.11 → 5.2.14
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 +1 -1
- package/esm2022/lib/accordion/accordion/accordion.component.mjs +3 -3
- package/esm2022/lib/accordion/accordion-button/accordion-button.directive.mjs +3 -3
- package/esm2022/lib/accordion/accordion-item/accordion-item.component.mjs +5 -13
- package/esm2022/lib/accordion/accordion.module.mjs +4 -4
- package/esm2022/lib/accordion/accordion.service.mjs +5 -5
- package/esm2022/lib/alert/alert-heading.directive.mjs +8 -16
- package/esm2022/lib/alert/alert-link.directive.mjs +8 -16
- package/esm2022/lib/alert/alert.component.mjs +3 -3
- package/esm2022/lib/alert/alert.module.mjs +4 -4
- package/esm2022/lib/avatar/avatar.component.mjs +3 -3
- package/esm2022/lib/avatar/avatar.module.mjs +4 -4
- package/esm2022/lib/backdrop/backdrop.service.mjs +3 -3
- package/esm2022/lib/badge/badge.component.mjs +3 -3
- package/esm2022/lib/badge/badge.module.mjs +4 -4
- package/esm2022/lib/breadcrumb/breadcrumb/breadcrumb.component.mjs +6 -13
- package/esm2022/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +3 -3
- package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +3 -3
- package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +3 -3
- package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +4 -4
- package/esm2022/lib/button/button-close.directive.mjs +27 -26
- package/esm2022/lib/button/button.directive.mjs +62 -76
- package/esm2022/lib/button/button.module.mjs +4 -4
- package/esm2022/lib/button-group/button-group/button-group.component.mjs +27 -28
- package/esm2022/lib/button-group/button-group.module.mjs +4 -4
- package/esm2022/lib/button-group/button-toolbar/button-toolbar.component.mjs +10 -22
- package/esm2022/lib/calendar/calendar/calendar-class-view.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar/calendar.component.mjs +5 -5
- package/esm2022/lib/calendar/calendar-month/calendar-class-day.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-class-row.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-class-year.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-day-title.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-day.directive.mjs +24 -12
- package/esm2022/lib/calendar/calendar-month/calendar-day.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-month.component.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-row.directive.mjs +3 -3
- package/esm2022/lib/calendar/calendar-month/calendar-weekday.pipe.mjs +3 -3
- package/esm2022/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +3 -3
- package/esm2022/lib/calendar/calendar.module.mjs +4 -4
- package/esm2022/lib/calendar/calendar.service.mjs +3 -3
- package/esm2022/lib/callout/callout.component.mjs +5 -5
- package/esm2022/lib/callout/callout.module.mjs +4 -4
- package/esm2022/lib/card/card-body.component.mjs +8 -15
- package/esm2022/lib/card/card-footer.component.mjs +8 -15
- package/esm2022/lib/card/card-group.component.mjs +8 -15
- package/esm2022/lib/card/card-header-actions.component.mjs +3 -3
- package/esm2022/lib/card/card-header.component.mjs +8 -15
- package/esm2022/lib/card/card-img-overlay/card-img-overlay.component.mjs +7 -15
- package/esm2022/lib/card/card-img.directive.mjs +3 -3
- package/esm2022/lib/card/card-link.directive.mjs +8 -15
- package/esm2022/lib/card/card-subtitle.directive.mjs +8 -15
- package/esm2022/lib/card/card-text.directive.mjs +8 -15
- package/esm2022/lib/card/card-title.directive.mjs +8 -15
- package/esm2022/lib/card/card.component.mjs +5 -7
- package/esm2022/lib/card/card.module.mjs +4 -4
- package/esm2022/lib/carousel/carousel/carousel.component.mjs +14 -15
- package/esm2022/lib/carousel/carousel-caption/carousel-caption.component.mjs +3 -3
- package/esm2022/lib/carousel/carousel-control/carousel-control.component.mjs +3 -3
- package/esm2022/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +3 -3
- package/esm2022/lib/carousel/carousel-inner/carousel-inner.component.mjs +3 -3
- package/esm2022/lib/carousel/carousel-item/carousel-item.component.mjs +5 -5
- package/esm2022/lib/carousel/carousel-state.mjs +3 -3
- package/esm2022/lib/carousel/carousel.config.mjs +3 -3
- package/esm2022/lib/carousel/carousel.module.mjs +4 -4
- package/esm2022/lib/carousel/carousel.service.mjs +5 -5
- package/esm2022/lib/collapse/collapse.directive.mjs +4 -5
- package/esm2022/lib/collapse/collapse.module.mjs +4 -4
- package/esm2022/lib/date-picker/date-picker.component.mjs +3 -3
- package/esm2022/lib/date-picker/date-picker.module.mjs +4 -4
- package/esm2022/lib/date-range-picker/date-range-picker/custom-range-key.pipe.mjs +3 -3
- package/esm2022/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +12 -8
- package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +5 -5
- package/esm2022/lib/dropdown/dropdown/dropdown.component.mjs +6 -6
- package/esm2022/lib/dropdown/dropdown-close/dropdown-close.directive.mjs +3 -3
- package/esm2022/lib/dropdown/dropdown-divider/dropdown-divider.directive.mjs +8 -15
- package/esm2022/lib/dropdown/dropdown-header/dropdown-header.directive.mjs +7 -14
- package/esm2022/lib/dropdown/dropdown-item/dropdown-item-plain.directive.mjs +8 -15
- package/esm2022/lib/dropdown/dropdown-item/dropdown-item.directive.mjs +6 -5
- package/esm2022/lib/dropdown/dropdown-menu/dropdown-menu.directive.mjs +16 -10
- package/esm2022/lib/dropdown/dropdown.module.mjs +4 -4
- package/esm2022/lib/dropdown/dropdown.service.mjs +3 -3
- package/esm2022/lib/element-cover/element-cover.component.mjs +3 -3
- package/esm2022/lib/element-cover/element-cover.module.mjs +4 -4
- package/esm2022/lib/footer/footer.component.mjs +6 -5
- package/esm2022/lib/footer/footer.module.mjs +4 -4
- package/esm2022/lib/form/form/form.directive.mjs +3 -3
- package/esm2022/lib/form/form-check/form-check-input.directive.mjs +6 -6
- package/esm2022/lib/form/form-check/form-check-label.directive.mjs +8 -15
- package/esm2022/lib/form/form-check/form-check.component.mjs +3 -3
- package/esm2022/lib/form/form-control/form-control.directive.mjs +3 -3
- package/esm2022/lib/form/form-feedback/form-feedback.component.mjs +3 -3
- package/esm2022/lib/form/form-floating/form-floating.directive.mjs +4 -4
- package/esm2022/lib/form/form-label/form-label.directive.mjs +14 -13
- package/esm2022/lib/form/form-select/form-select.directive.mjs +14 -13
- package/esm2022/lib/form/form-text/form-text.directive.mjs +8 -15
- package/esm2022/lib/form/form.module.mjs +4 -4
- package/esm2022/lib/form/input-group/input-group.component.mjs +6 -5
- package/esm2022/lib/form/input-group-text/input-group-text.directive.mjs +8 -16
- package/esm2022/lib/grid/col.component.mjs +3 -3
- package/esm2022/lib/grid/col.directive.mjs +3 -3
- package/esm2022/lib/grid/container.component.mjs +3 -3
- package/esm2022/lib/grid/grid.module.mjs +4 -4
- package/esm2022/lib/grid/gutter.directive.mjs +6 -6
- package/esm2022/lib/grid/row.component.mjs +3 -3
- package/esm2022/lib/grid/row.directive.mjs +8 -7
- package/esm2022/lib/header/header/header.component.mjs +3 -3
- package/esm2022/lib/header/header-brand/header-brand.component.mjs +3 -3
- package/esm2022/lib/header/header-divider/header-divider.component.mjs +3 -3
- package/esm2022/lib/header/header-nav/header-nav.component.mjs +3 -3
- package/esm2022/lib/header/header-text/header-text.component.mjs +3 -3
- package/esm2022/lib/header/header-toggler/header-toggler.directive.mjs +3 -3
- package/esm2022/lib/header/header.module.mjs +4 -4
- package/esm2022/lib/image/img.directive.mjs +3 -3
- package/esm2022/lib/image/img.module.mjs +4 -4
- package/esm2022/lib/list-group/list-group-item.directive.mjs +3 -3
- package/esm2022/lib/list-group/list-group.directive.mjs +6 -5
- package/esm2022/lib/list-group/list-group.module.mjs +4 -4
- package/esm2022/lib/loading-button/loading-button.component.mjs +44 -59
- package/esm2022/lib/loading-button/loading-button.module.mjs +4 -4
- package/esm2022/lib/modal/modal/modal.component.mjs +5 -5
- package/esm2022/lib/modal/modal-body/modal-body.component.mjs +7 -15
- package/esm2022/lib/modal/modal-content/modal-content.component.mjs +8 -15
- package/esm2022/lib/modal/modal-dialog/modal-dialog.component.mjs +5 -5
- package/esm2022/lib/modal/modal-dismiss/modal-toggle.directive.mjs +3 -3
- package/esm2022/lib/modal/modal-footer/modal-footer.component.mjs +8 -15
- package/esm2022/lib/modal/modal-header/modal-header.component.mjs +8 -15
- package/esm2022/lib/modal/modal-title/modal-title.directive.mjs +8 -15
- package/esm2022/lib/modal/modal.module.mjs +4 -4
- package/esm2022/lib/modal/modal.service.mjs +5 -5
- package/esm2022/lib/multi-select/multi-select/multi-select-search.directive.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select/multi-select.component.mjs +17 -8
- package/esm2022/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.mjs +7 -16
- package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select-option/multi-select-option.component.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +3 -3
- package/esm2022/lib/multi-select/multi-select.module.mjs +4 -4
- package/esm2022/lib/multi-select/multi-select.service.mjs +3 -3
- package/esm2022/lib/nav/nav-item.component.mjs +7 -15
- package/esm2022/lib/nav/nav-link.directive.mjs +3 -3
- package/esm2022/lib/nav/nav.component.mjs +5 -5
- package/esm2022/lib/nav/nav.module.mjs +4 -4
- package/esm2022/lib/navbar/navbar-brand/navbar-brand.directive.mjs +3 -3
- package/esm2022/lib/navbar/navbar-nav/navbar-nav.component.mjs +6 -5
- package/esm2022/lib/navbar/navbar-text/navbar-text.component.mjs +3 -3
- package/esm2022/lib/navbar/navbar-toggler/navbar-toggler.directive.mjs +3 -3
- package/esm2022/lib/navbar/navbar.component.mjs +7 -9
- package/esm2022/lib/navbar/navbar.module.mjs +4 -4
- package/esm2022/lib/offcanvas/offcanvas/offcanvas.component.mjs +17 -26
- package/esm2022/lib/offcanvas/offcanvas-body/offcanvas-body.component.mjs +7 -15
- package/esm2022/lib/offcanvas/offcanvas-header/offcanvas-header.component.mjs +8 -15
- package/esm2022/lib/offcanvas/offcanvas-title/offcanvas-title.directive.mjs +8 -15
- package/esm2022/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.mjs +3 -3
- package/esm2022/lib/offcanvas/offcanvas.module.mjs +4 -4
- package/esm2022/lib/offcanvas/offcanvas.service.mjs +5 -5
- package/esm2022/lib/pagination/page-item/page-item.component.mjs +3 -3
- package/esm2022/lib/pagination/page-item/page-item.directive.mjs +7 -6
- package/esm2022/lib/pagination/page-link/page-link.directive.mjs +8 -15
- package/esm2022/lib/pagination/pagination/pagination.component.mjs +3 -3
- package/esm2022/lib/pagination/pagination.module.mjs +4 -4
- package/esm2022/lib/placeholder/placeholder-animation.directive.mjs +3 -3
- package/esm2022/lib/placeholder/placeholder.directive.mjs +3 -3
- package/esm2022/lib/placeholder/placeholder.module.mjs +4 -4
- package/esm2022/lib/popover/popover/popover.component.mjs +5 -5
- package/esm2022/lib/popover/popover.directive.mjs +3 -3
- package/esm2022/lib/popover/popover.module.mjs +4 -4
- package/esm2022/lib/progress/progress-bar.component.mjs +10 -7
- package/esm2022/lib/progress/progress-bar.directive.mjs +6 -6
- package/esm2022/lib/progress/progress-stacked.component.mjs +3 -3
- package/esm2022/lib/progress/progress.component.mjs +9 -7
- package/esm2022/lib/progress/progress.module.mjs +4 -4
- package/esm2022/lib/rating/rating-item-label/rating-item-label.component.mjs +3 -3
- package/esm2022/lib/rating/rating.component.mjs +23 -21
- package/esm2022/lib/rating/rating.module.mjs +4 -4
- package/esm2022/lib/services/class-toggle.service.mjs +3 -3
- package/esm2022/lib/services/color-mode.service.mjs +3 -3
- package/esm2022/lib/services/in-memory-storage.service.mjs +5 -6
- package/esm2022/lib/services/intersection.service.mjs +3 -3
- package/esm2022/lib/services/listeners.service.mjs +3 -3
- package/esm2022/lib/services/local-storage.service.mjs +9 -15
- package/esm2022/lib/shared/element-ref.directive.mjs +3 -3
- package/esm2022/lib/shared/html-attr.directive.mjs +12 -10
- package/esm2022/lib/shared/shared.module.mjs +4 -4
- package/esm2022/lib/shared/template-id.directive.mjs +3 -3
- package/esm2022/lib/shared/theme.directive.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar/sidebar.component.mjs +15 -13
- package/esm2022/lib/sidebar/sidebar-backdrop/sidebar-backdrop.service.mjs +7 -5
- package/esm2022/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-footer/sidebar-footer.component.mjs +8 -16
- package/esm2022/lib/sidebar/sidebar-header/sidebar-header.component.mjs +8 -15
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-badge.pipe.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-group.service.mjs +5 -5
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-icon.pipe.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-item-class.pipe.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +14 -13
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.pipe.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-title.component.mjs +9 -7
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +6 -6
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.service.mjs +6 -6
- package/esm2022/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar-toggler/sidebar-toggler.directive.mjs +3 -3
- package/esm2022/lib/sidebar/sidebar.module.mjs +4 -4
- package/esm2022/lib/sidebar/sidebar.service.mjs +5 -5
- package/esm2022/lib/smart-pagination/smart-pagination.component.mjs +3 -3
- package/esm2022/lib/smart-pagination/smart-pagination.module.mjs +4 -4
- package/esm2022/lib/smart-table/smart-table/smart-table.component.mjs +20 -20
- package/esm2022/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.mjs +5 -6
- package/esm2022/lib/smart-table/smart-table-filter/filter-input.directive.mjs +3 -3
- package/esm2022/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +5 -6
- package/esm2022/lib/smart-table/smart-table-head/smart-table-column-label.pipe.mjs +3 -3
- package/esm2022/lib/smart-table/smart-table-head/smart-table-head.component.mjs +7 -15
- package/esm2022/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +6 -10
- package/esm2022/lib/smart-table/smart-table.module.mjs +4 -4
- package/esm2022/lib/spinner/spinner.component.mjs +3 -3
- package/esm2022/lib/spinner/spinner.module.mjs +4 -4
- package/esm2022/lib/table/table-active.directive.mjs +3 -3
- package/esm2022/lib/table/table-color.directive.mjs +3 -3
- package/esm2022/lib/table/table.directive.mjs +6 -5
- package/esm2022/lib/table/table.module.mjs +4 -4
- package/esm2022/lib/tabs/tab-content/tab-content.component.mjs +6 -15
- package/esm2022/lib/tabs/tab-content-ref.directive.mjs +3 -3
- package/esm2022/lib/tabs/tab-pane/tab-pane.component.mjs +5 -5
- package/esm2022/lib/tabs/tab.service.mjs +5 -5
- package/esm2022/lib/tabs/tabs.module.mjs +4 -4
- package/esm2022/lib/tabs-2/tab/tab.directive.mjs +3 -3
- package/esm2022/lib/tabs-2/tab-panel/tab-panel.component.mjs +3 -3
- package/esm2022/lib/tabs-2/tabs-content/tabs-content.component.mjs +3 -3
- package/esm2022/lib/tabs-2/tabs-list/tabs-list.component.mjs +3 -3
- package/esm2022/lib/tabs-2/tabs.component.mjs +3 -3
- package/esm2022/lib/tabs-2/tabs.service.mjs +3 -3
- package/esm2022/lib/tabs-2/tabs2.module.mjs +4 -4
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +6 -6
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +6 -6
- package/esm2022/lib/time-picker/time-picker.component.mjs +30 -26
- package/esm2022/lib/time-picker/time-picker.module.mjs +4 -4
- package/esm2022/lib/toast/toast/toast.component.mjs +7 -11
- package/esm2022/lib/toast/toast-body/toast-body.component.mjs +3 -3
- package/esm2022/lib/toast/toast-close.directive.mjs +3 -3
- package/esm2022/lib/toast/toast-header/toast-header.component.mjs +3 -3
- package/esm2022/lib/toast/toast.module.mjs +4 -4
- package/esm2022/lib/toast/toaster/toaster-host.directive.mjs +3 -3
- package/esm2022/lib/toast/toaster/toaster.component.mjs +11 -12
- package/esm2022/lib/toast/toaster/toaster.service.mjs +5 -5
- package/esm2022/lib/tooltip/tooltip/tooltip.component.mjs +5 -5
- package/esm2022/lib/tooltip/tooltip.directive.mjs +3 -3
- package/esm2022/lib/tooltip/tooltip.module.mjs +4 -4
- package/esm2022/lib/utilities/align.directive.mjs +3 -3
- package/esm2022/lib/utilities/bg-color.directive.mjs +11 -11
- package/esm2022/lib/utilities/border.directive.mjs +3 -3
- package/esm2022/lib/utilities/rounded.directive.mjs +3 -3
- package/esm2022/lib/utilities/shadow-on-scroll.directive.mjs +3 -3
- package/esm2022/lib/utilities/text-bg-color.directive.mjs +3 -3
- package/esm2022/lib/utilities/text-color.directive.mjs +3 -3
- package/esm2022/lib/utilities/utilities.module.mjs +4 -4
- package/esm2022/lib/widget/widget-stat-a/widget-stat-a.component.mjs +6 -6
- package/esm2022/lib/widget/widget-stat-b/widget-stat-b.component.mjs +5 -5
- package/esm2022/lib/widget/widget-stat-c/widget-stat-c.component.mjs +3 -3
- package/esm2022/lib/widget/widget-stat-d/widget-stat-d.component.mjs +7 -8
- package/esm2022/lib/widget/widget-stat-e/widget-stat-e.component.mjs +3 -3
- package/esm2022/lib/widget/widget-stat-f/widget-stat-f.component.mjs +6 -6
- package/esm2022/lib/widget/widget.module.mjs +4 -4
- package/fesm2022/coreui-angular-pro.mjs +1375 -1641
- package/fesm2022/coreui-angular-pro.mjs.map +1 -1
- package/lib/accordion/accordion-item/accordion-item.component.d.ts +0 -1
- package/lib/accordion/accordion.service.d.ts +0 -1
- package/lib/alert/alert-heading.directive.d.ts +0 -2
- package/lib/alert/alert-link.directive.d.ts +0 -2
- package/lib/breadcrumb/breadcrumb/breadcrumb.component.d.ts +0 -3
- package/lib/button/button-close.directive.d.ts +4 -4
- package/lib/button/button.directive.d.ts +23 -21
- package/lib/button-group/button-group/button-group.component.d.ts +11 -6
- package/lib/button-group/button-toolbar/button-toolbar.component.d.ts +4 -4
- package/lib/calendar/calendar-month/calendar-month.component.d.ts +1 -1
- package/lib/calendar/calendar.utils.d.ts +1 -1
- package/lib/card/card-body.component.d.ts +0 -1
- package/lib/card/card-footer.component.d.ts +0 -1
- package/lib/card/card-group.component.d.ts +0 -1
- package/lib/card/card-header.component.d.ts +0 -1
- package/lib/card/card-img-overlay/card-img-overlay.component.d.ts +0 -1
- package/lib/card/card-link.directive.d.ts +0 -1
- package/lib/card/card-subtitle.directive.d.ts +0 -1
- package/lib/card/card-text.directive.d.ts +0 -1
- package/lib/card/card-title.directive.d.ts +0 -1
- package/lib/carousel/carousel/carousel.component.d.ts +1 -2
- package/lib/carousel/carousel.service.d.ts +0 -1
- package/lib/date-range-picker/date-range-picker/date-range-picker.component.d.ts +1 -1
- package/lib/dropdown/dropdown-divider/dropdown-divider.directive.d.ts +0 -1
- package/lib/dropdown/dropdown-header/dropdown-header.directive.d.ts +0 -1
- package/lib/dropdown/dropdown-item/dropdown-item-plain.directive.d.ts +0 -1
- package/lib/form/form-check/form-check-input.directive.d.ts +1 -1
- package/lib/form/form-check/form-check-label.directive.d.ts +0 -1
- package/lib/form/form-label/form-label.directive.d.ts +0 -1
- package/lib/form/form-select/form-select.directive.d.ts +0 -1
- package/lib/form/form-text/form-text.directive.d.ts +0 -1
- package/lib/form/input-group-text/input-group-text.directive.d.ts +0 -2
- package/lib/grid/gutter.directive.d.ts +1 -2
- package/lib/loading-button/loading-button.component.d.ts +14 -24
- package/lib/modal/modal-body/modal-body.component.d.ts +0 -1
- package/lib/modal/modal-content/modal-content.component.d.ts +0 -1
- package/lib/modal/modal-footer/modal-footer.component.d.ts +0 -1
- package/lib/modal/modal-header/modal-header.component.d.ts +0 -1
- package/lib/modal/modal-title/modal-title.directive.d.ts +0 -1
- package/lib/modal/modal.service.d.ts +0 -1
- package/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.d.ts +0 -4
- package/lib/nav/nav-item.component.d.ts +0 -1
- package/lib/offcanvas/offcanvas-body/offcanvas-body.component.d.ts +0 -1
- package/lib/offcanvas/offcanvas-header/offcanvas-header.component.d.ts +0 -1
- package/lib/offcanvas/offcanvas-title/offcanvas-title.directive.d.ts +0 -1
- package/lib/offcanvas/offcanvas.service.d.ts +0 -1
- package/lib/pagination/page-link/page-link.directive.d.ts +0 -1
- package/lib/progress/progress-bar.directive.d.ts +0 -1
- package/lib/services/in-memory-storage.service.d.ts +0 -1
- package/lib/services/local-storage.service.d.ts +1 -1
- package/lib/sidebar/sidebar-footer/sidebar-footer.component.d.ts +0 -2
- package/lib/sidebar/sidebar-header/sidebar-header.component.d.ts +0 -1
- package/lib/sidebar/sidebar-nav/sidebar-nav-group.service.d.ts +0 -1
- package/lib/sidebar/sidebar.service.d.ts +0 -1
- package/lib/smart-table/smart-table/smart-table.component.d.ts +4 -4
- package/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.d.ts +0 -1
- package/lib/smart-table/smart-table-filter/smart-table-filter.component.d.ts +0 -1
- package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +2 -3
- package/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.d.ts +0 -1
- package/lib/tabs/tab-content/tab-content.component.d.ts +0 -3
- package/lib/tabs/tab.service.d.ts +0 -1
- package/lib/time-picker/time-picker.component.d.ts +2 -3
- package/lib/time-picker/time.utils.d.ts +1 -1
- package/lib/toast/toast/toast.component.d.ts +1 -1
- package/lib/toast/toaster/toaster.component.d.ts +1 -1
- package/lib/toast/toaster/toaster.service.d.ts +0 -1
- package/lib/utilities/bg-color.directive.d.ts +0 -1
- package/lib/widget/widget-stat-d/widget-stat-d.component.d.ts +0 -1
- package/package.json +9 -9
|
@@ -82,7 +82,7 @@ export class SmartTableComponent {
|
|
|
82
82
|
return this._activePage;
|
|
83
83
|
}
|
|
84
84
|
set columns(value) {
|
|
85
|
-
const colObjects = value.map(column => typeof column === 'string' ? { key: column } : { ...column });
|
|
85
|
+
const colObjects = value.map((column) => (typeof column === 'string' ? { key: column } : { ...column }));
|
|
86
86
|
const columns = getColumns(colObjects);
|
|
87
87
|
this.columns$.set(columns);
|
|
88
88
|
// todo: Input columnGroups - separation?
|
|
@@ -149,7 +149,8 @@ export class SmartTableComponent {
|
|
|
149
149
|
this._tableFilter = filter;
|
|
150
150
|
if (typeof filter === 'object') {
|
|
151
151
|
this.tableFilterLabel = typeof filter.label === 'string' ? filter.label : this.tableFilterLabel;
|
|
152
|
-
this.tableFilterPlaceholder =
|
|
152
|
+
this.tableFilterPlaceholder =
|
|
153
|
+
typeof filter.placeholder === 'string' ? filter.placeholder : this.tableFilterPlaceholder;
|
|
153
154
|
this.tableFilterValue = typeof filter.value === 'string' ? filter.value : this.tableFilterValue;
|
|
154
155
|
}
|
|
155
156
|
}
|
|
@@ -209,15 +210,13 @@ export class SmartTableComponent {
|
|
|
209
210
|
return this.sortedItems.slice(this.firstItemOnActivePageIndex, this.firstItemOnActivePageIndex + this._itemsPerPage);
|
|
210
211
|
}
|
|
211
212
|
get currentItems() {
|
|
212
|
-
return this._activePage ? this.itemsOnActivePage : this.sortedItems ?? [];
|
|
213
|
+
return this._activePage ? this.itemsOnActivePage : (this.sortedItems ?? []);
|
|
213
214
|
}
|
|
214
215
|
get sortedItems() {
|
|
215
216
|
const columnKey = this.sorterValue.column;
|
|
216
217
|
if (!columnKey ||
|
|
217
218
|
!this.itemsDataColumns$().includes(columnKey) ||
|
|
218
|
-
(this.columnSorter &&
|
|
219
|
-
typeof this.columnSorter === 'object' &&
|
|
220
|
-
this.columnSorter.external)) {
|
|
219
|
+
(this.columnSorter && typeof this.columnSorter === 'object' && this.columnSorter.external)) {
|
|
221
220
|
return this.tableFiltered;
|
|
222
221
|
}
|
|
223
222
|
const tableFiltered = [...this.tableFiltered];
|
|
@@ -241,14 +240,11 @@ export class SmartTableComponent {
|
|
|
241
240
|
return tableFiltered.slice().sort(compareFn);
|
|
242
241
|
}
|
|
243
242
|
get tableFilterEvent() {
|
|
244
|
-
return
|
|
243
|
+
return typeof this.tableFilter === 'object' && this.tableFilter.lazy ? 'change' : 'input';
|
|
245
244
|
}
|
|
246
|
-
;
|
|
247
245
|
get columnFiltered() {
|
|
248
246
|
let _items = this._items;
|
|
249
|
-
if (this.columnFilter &&
|
|
250
|
-
typeof this.columnFilter === 'object' &&
|
|
251
|
-
this.columnFilter.external) {
|
|
247
|
+
if (this.columnFilter && typeof this.columnFilter === 'object' && this.columnFilter.external) {
|
|
252
248
|
this._columnFiltered = _items;
|
|
253
249
|
return _items;
|
|
254
250
|
}
|
|
@@ -257,7 +253,7 @@ export class SmartTableComponent {
|
|
|
257
253
|
_items = _items.filter((item) => value(item[key]));
|
|
258
254
|
return;
|
|
259
255
|
}
|
|
260
|
-
const currentColumn = this.columns.find(column => column.key === key);
|
|
256
|
+
const currentColumn = this.columns.find((column) => column.key === key);
|
|
261
257
|
if (typeof currentColumn?.filter === 'function') {
|
|
262
258
|
_items = _items.filter((item) => (typeof currentColumn.filter === 'function' && currentColumn.filter(item, value)) ?? !value);
|
|
263
259
|
return;
|
|
@@ -319,7 +315,8 @@ export class SmartTableComponent {
|
|
|
319
315
|
return (this.columnSorter &&
|
|
320
316
|
(!this.columns.length ||
|
|
321
317
|
typeof column !== 'object' ||
|
|
322
|
-
(typeof column === 'object' && (typeof column.sorter === 'undefined' || column.sorter))) &&
|
|
318
|
+
(typeof column === 'object' && (typeof column.sorter === 'undefined' || column.sorter))) &&
|
|
319
|
+
isDataColumn);
|
|
323
320
|
}
|
|
324
321
|
handleSorterChange(column, index, order) {
|
|
325
322
|
if (!this.isSortable(index)) {
|
|
@@ -328,13 +325,16 @@ export class SmartTableComponent {
|
|
|
328
325
|
//if column changed or sort was descending change asc to true
|
|
329
326
|
const sorterState = { ...this.sorterValue };
|
|
330
327
|
if (sorterState.column === column) {
|
|
331
|
-
const resettable = this.columnSorter === true ||
|
|
328
|
+
const resettable = this.columnSorter === true ||
|
|
329
|
+
(typeof this.columnSorter === 'object' &&
|
|
330
|
+
this.columnSorter.resetable !== false &&
|
|
331
|
+
this.columnSorter.resettable !== false);
|
|
332
332
|
const state = sorterState.state;
|
|
333
333
|
if (order === undefined) {
|
|
334
334
|
sorterState.state = state === 0 ? 'asc' : state === 'asc' ? 'desc' : resettable ? 0 : 'asc';
|
|
335
335
|
}
|
|
336
336
|
else {
|
|
337
|
-
sorterState.state =
|
|
337
|
+
sorterState.state = order === 0 && !resettable ? state : order;
|
|
338
338
|
}
|
|
339
339
|
}
|
|
340
340
|
else {
|
|
@@ -382,7 +382,7 @@ export class SmartTableComponent {
|
|
|
382
382
|
}
|
|
383
383
|
handleSelectAllChange($event) {
|
|
384
384
|
this._items = this.items.map((item) => {
|
|
385
|
-
return { ...item, _selected:
|
|
385
|
+
return { ...item, _selected: item._selectable !== false ? $event : !!item._selected };
|
|
386
386
|
});
|
|
387
387
|
this.selectedAllSubject.next($event);
|
|
388
388
|
setTimeout(() => {
|
|
@@ -414,10 +414,10 @@ export class SmartTableComponent {
|
|
|
414
414
|
}
|
|
415
415
|
}
|
|
416
416
|
}
|
|
417
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
418
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: SmartTableComponent, isStandalone: true, selector: "c-smart-table", inputs: { activePage: ["activePage", "activePage", numberAttribute], cleaner: ["cleaner", "cleaner", booleanAttribute], clickableRows: ["clickableRows", "clickableRows", booleanAttribute], columns: "columns", columnFilter: "columnFilter", columnFilterValue: "columnFilterValue", columnSorter: "columnSorter", footer: ["footer", "footer", booleanAttribute], header: ["header", "header", booleanAttribute], items: "items", itemsPerPage: ["itemsPerPage", "itemsPerPage", numberAttribute], itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", itemsPerPageSelect: "itemsPerPageSelect", loading: "loading", noItemsLabel: "noItemsLabel", pagination: ["pagination", "pagination", booleanAttribute], selectable: ["selectable", "selectable", booleanAttribute], selectAll: ["selectAll", "selectAll", booleanAttribute], sorterValue: "sorterValue", tableFilter: "tableFilter", tableFilterLabel: "tableFilterLabel", tableFilterPlaceholder: "tableFilterPlaceholder", tableFilterValue: "tableFilterValue", tableBodyProps: "tableBodyProps", tableFootProps: "tableFootProps", tableHeadProps: "tableHeadProps", tableProps: "tableProps" }, outputs: { selectedItemsChange: "selectedItemsChange", sorterValueChange: "sorterValueChange", activePageChange: "activePageChange", itemsPerPageChange: "itemsPerPageChange", rowClick: "rowClick", columnFilterValueChange: "columnFilterValueChange", filteredItemsChange: "filteredItemsChange", tableFilterValueChange: "tableFilterValueChange" }, queries: [{ propertyName: "columnTemplates", predicate: TemplateIdDirective }], exportAs: ["cSmartTable"], usesOnChanges: true, ngImport: i0, template: "@if (itemsPerPageSelect || tableFilter || cleaner || templates['tableCustomHeader']) {\n <div class=\"row my-2 mx-0\">\n @if (tableFilter) {\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\" />\n </div>\n }\n @if (cleaner) {\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\" />\n </div>\n }\n <ng-container *ngTemplateOutlet=\"templates['tableCustomHeader'] || tableCustomHeaderTemplate\" />\n\n <ng-template #tableFilterTemplate>\n @if (tableFilter) {\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n />\n }\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n @if (cleaner) {\n <button\n (click)=\"clean($event)\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n cButton\n color=\"transparent\"\n tabindex=\"0\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\" />\n </button>\n }\n </ng-template>\n\n <ng-template #tableCustomHeaderTemplate>\n <div class=\"col-auto p-0 ms-auto\">\n <ng-content select=\"[customHeader]\" />\n </div>\n </ng-template>\n </div>\n}\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered ?? undefined\"\n [borderless]=\"tableProps?.borderless ?? undefined\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover ?? undefined\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small ?? undefined\"\n [striped]=\"tableProps?.striped ?? undefined\"\n cTable\n >\n @if (header) {\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n [cAlign]=\"tableHeadProps?.align\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n [columnFilter]=\"columnFilter\"\n [columnGroups]=\"columnGroups$()\"\n [columnLabelTemplates]=\"columnLabelTemplates\"\n [columnSorter]=\"columnSorter\"\n [columns]=\"columns$()\"\n [selectAll]=\"selectAll\"\n [selectable]=\"selectable\"\n [selectedAll]=\"(selectedAllSubject | async) ?? false\"\n [showGroups]=\"showGroups$()\"\n [sorterValue]=\"sorterValue\"\n />\n }\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\" />\n\n @if (summaryRowTemplate && !footer) {\n <tfoot>\n <ng-container *ngTemplateOutlet=\"summaryRowTemplate\" />\n </tfoot>\n }\n @if (footer) {\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n [cAlign]=\"tableFootProps?.align\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n [columnLabelTemplates]=\"columnLabelTemplates\"\n [columnSorter]=\"columnSorter\"\n [columns]=\"columns$()\"\n [selectAll]=\"selectAll\"\n [selectable]=\"selectable\"\n [selectedAll]=\"(selectedAllSubject | async) ?? false\"\n [sorterValue]=\"sorterValue\"\n [summaryRowTemplate]=\"summaryRowTemplate\"\n component=\"tfoot\"\n />\n }\n\n </table>\n @if (loading) {\n <c-element-cover\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n />\n }\n</div>\n@if (pagination || itemsPerPageSelect) {\n <div class=\"row\">\n <div class=\"col\">\n @if (pagination && numberOfPages > 1) {\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\"\n />\n }\n </div>\n <div class=\"col-auto ms-auto\">\n @if (itemsPerPageSelect) {\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n />\n }\n </div>\n </div>\n}\n<ng-template #tbodyDefaultTemplate>\n <tbody [cAlign]=\"tableBodyProps?.align\"\n [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n >\n @for (item of currentItems; track item; let i = $index, cnt = $count, isEven = $even, isOdd = $odd) {\n <tr (click)=\"handleRowClick({$event, item, i})\"\n [cAlign]=\"item._props?.align\"\n [cTableActive]=\"item._props?.active ?? undefined\"\n [cTableColor]=\"item._props?.color\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n [tabindex]=\"clickableRows ? 0 : -1\"\n >\n @if (selectable) {\n <td [cAlign]=\"item?.['_cellProps']?._all?.align\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active ?? undefined\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n >\n <input (change)=\"handleRowChecked($event, item)\"\n [checked]=\"item._selected ?? false\"\n [disabled]=\"(item?._selectable === false) ?? false\"\n autocomplete=\"off\"\n cFormCheckInput\n >\n </td>\n }\n @for (column of columns$(); track column; let i = $index) {\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {column, item, columnName: getColumnKey(column), tdContent: item[column.key], cellProps: getTableDataCellProps(column, item) }\"\n />\n }\n </tr>\n @if (templates['tableDetails']) {\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" [ngStyle]=\"{borderBottomWidth: 0}\" class=\"p-0\" tabindex=\"-1\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" [ngStyle]=\"{border: 0}\" class=\"p-0\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\" />\n </td>\n </tr>\n }\n }\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\" />\n </tbody>\n</ng-template>\n\n<ng-template\n #columnDefaultTemplate\n let-cellProps=\"cellProps\"\n let-column=\"column\"\n let-columnName=\"columnName\"\n let-item=\"item\"\n let-tdContent=\"tdContent\"\n>\n @if (tdContent !== undefined) {\n <td [cAlign]=\"cellProps?.align\"\n [cHtmlAttr]=\"cellProps?.['_attributes'] ?? undefined\"\n [cTableActive]=\"cellProps?.['active']\"\n [cTableColor]=\"cellProps?.color ?? column[columnName]?._colProps?.color ?? undefined\"\n [ngClass]=\"getTableDataCellClass(column, item)\"\n [ngStyle]=\"getTableDataCellStyles(column, item)\"\n >\n {{ tdContent }}\n </td>\n }\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n @if (!currentItems.length) {\n <tr>\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{ noItemsLabel }}</td>\n </tr>\n }\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg class=\"icon icon-custom-size\" pointer-events=\"none\" role=\"img\" viewBox=\"0 0 512 512\"\n width=\"18\" xmlns=\"http://www.w3.org/2000/svg\">\n <polygon\n class=\"ci-primary\"\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\">\n </polygon>\n <polygon\n class=\"ci-primary\"\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: AlignDirective, selector: "[cAlign]", inputs: ["cAlign"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: FilterInputDirective, selector: "[cFilterInput]", inputs: ["delay", "onEvent", "value"], outputs: ["valueChange"], exportAs: ["cFilterInput"] }, { kind: "directive", type: FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid", "checked"] }, { kind: "directive", type: HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }, { kind: "component", type: SmartPaginationComponent, selector: "c-smart-pagination", inputs: ["activePage", "arrows", "doubleArrows", "dots", "limit", "pages", "firstButton", "lastButton", "nextButton", "previousButton", "align", "size", "role"], outputs: ["activePageChange"], exportAs: ["cSmartPagination"] }, { kind: "component", type: SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: ["filterLabel", "filterPlaceholder", "sizing"] }, { kind: "component", type: SmartTableHeadComponent, selector: "c-smart-table-head", inputs: ["columnFilter", "columnFilterState", "columnSorter", "component", "columns", "columnGroups", "selectable", "selectAll", "selectedAll", "showGroups", "sorterValue", "columnFilterTemplates", "columnLabelTemplates", "summaryRowTemplate"], outputs: ["columnFilterStateChange", "sorterStateChange", "selectAllChange"] }, { kind: "component", type: SmartTableItemsPerPageSelectorComponent, selector: "c-smart-table-items-per-page-selector", inputs: ["itemsPerPage", "itemsPerPageLabel", "itemsPerPageOptions"], outputs: ["itemsPerPageChange"] }, { kind: "directive", type: TableActiveDirective, selector: "[cTableActive]", inputs: ["cTableActive"] }, { kind: "directive", type: TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: TableDirective, selector: "table[cTable]", inputs: ["align", "borderColor", "bordered", "borderless", "caption", "color", "hover", "responsive", "small", "striped", "stripedColumns"] }] }); }
|
|
417
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SmartTableComponent, deps: [{ token: i0.IterableDiffers }, { token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
418
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: SmartTableComponent, isStandalone: true, selector: "c-smart-table", inputs: { activePage: ["activePage", "activePage", numberAttribute], cleaner: ["cleaner", "cleaner", booleanAttribute], clickableRows: ["clickableRows", "clickableRows", booleanAttribute], columns: "columns", columnFilter: "columnFilter", columnFilterValue: "columnFilterValue", columnSorter: "columnSorter", footer: ["footer", "footer", booleanAttribute], header: ["header", "header", booleanAttribute], items: "items", itemsPerPage: ["itemsPerPage", "itemsPerPage", numberAttribute], itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", itemsPerPageSelect: "itemsPerPageSelect", loading: "loading", noItemsLabel: "noItemsLabel", pagination: ["pagination", "pagination", booleanAttribute], selectable: ["selectable", "selectable", booleanAttribute], selectAll: ["selectAll", "selectAll", booleanAttribute], sorterValue: "sorterValue", tableFilter: "tableFilter", tableFilterLabel: "tableFilterLabel", tableFilterPlaceholder: "tableFilterPlaceholder", tableFilterValue: "tableFilterValue", tableBodyProps: "tableBodyProps", tableFootProps: "tableFootProps", tableHeadProps: "tableHeadProps", tableProps: "tableProps" }, outputs: { selectedItemsChange: "selectedItemsChange", sorterValueChange: "sorterValueChange", activePageChange: "activePageChange", itemsPerPageChange: "itemsPerPageChange", rowClick: "rowClick", columnFilterValueChange: "columnFilterValueChange", filteredItemsChange: "filteredItemsChange", tableFilterValueChange: "tableFilterValueChange" }, queries: [{ propertyName: "columnTemplates", predicate: TemplateIdDirective }], exportAs: ["cSmartTable"], usesOnChanges: true, ngImport: i0, template: "@if (itemsPerPageSelect || tableFilter || cleaner || templates['tableCustomHeader']) {\n <div class=\"row my-2 mx-0\">\n @if (tableFilter) {\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableFilterTemplate\" />\n </div>\n }\n @if (cleaner) {\n <div class=\"col-auto p-0\">\n <ng-container *ngTemplateOutlet=\"tableCleanerTemplate\" />\n </div>\n }\n <ng-container *ngTemplateOutlet=\"templates['tableCustomHeader'] || tableCustomHeaderTemplate\" />\n\n <ng-template #tableFilterTemplate>\n @if (tableFilter) {\n <c-smart-table-filter\n (valueChange)=\"handleTableFilterChange($event)\"\n [delay]=\"300\"\n [filterLabel]=\"tableFilterLabel\"\n [filterPlaceholder]=\"tableFilterPlaceholder\"\n [onEvent]=\"tableFilterEvent\"\n [value]=\"tableFilterState\"\n cFilterInput\n />\n }\n </ng-template>\n\n <ng-template #tableCleanerTemplate>\n @if (cleaner) {\n <button\n (click)=\"clean($event)\"\n [disabled]=\"!isFiltered\"\n [ngClass]=\"{'ms-1': tableFilter}\"\n cButton\n color=\"transparent\"\n tabindex=\"0\"\n >\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\" />\n </button>\n }\n </ng-template>\n\n <ng-template #tableCustomHeaderTemplate>\n <div class=\"col-auto p-0 ms-auto\">\n <ng-content select=\"[customHeader]\" />\n </div>\n </ng-template>\n </div>\n}\n<div class=\"position-relative\">\n <table [align]=\"tableProps?.align\"\n [borderColor]=\"tableProps?.borderColor\"\n [bordered]=\"tableProps?.bordered ?? undefined\"\n [borderless]=\"tableProps?.borderless ?? undefined\"\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\n [cTableColor]=\"tableProps?.color\"\n [caption]=\"tableProps?.caption\"\n [color]=\"tableProps?.color\"\n [hover]=\"tableProps?.hover ?? undefined\"\n [responsive]=\"tableProps?.responsive\"\n [small]=\"tableProps?.small ?? undefined\"\n [striped]=\"tableProps?.striped ?? undefined\"\n cTable\n >\n @if (header) {\n <c-smart-table-head\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n [cAlign]=\"tableHeadProps?.align\"\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\n [cTableColor]=\"tableHeadProps?.color\"\n [columnFilterState]=\"columnFilterState\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n [columnFilter]=\"columnFilter\"\n [columnGroups]=\"columnGroups$()\"\n [columnLabelTemplates]=\"columnLabelTemplates\"\n [columnSorter]=\"columnSorter\"\n [columns]=\"columns$()\"\n [selectAll]=\"selectAll\"\n [selectable]=\"selectable\"\n [selectedAll]=\"(selectedAllSubject | async) ?? false\"\n [showGroups]=\"showGroups$()\"\n [sorterValue]=\"sorterValue\"\n />\n }\n\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\" />\n\n @if (summaryRowTemplate && !footer) {\n <tfoot>\n <ng-container *ngTemplateOutlet=\"summaryRowTemplate\" />\n </tfoot>\n }\n @if (footer) {\n <c-smart-table-head\n (selectAllChange)=\"handleSelectAllChange($event)\"\n (sorterStateChange)=\"handleSortChange($event)\"\n [cAlign]=\"tableFootProps?.align\"\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\n [cTableColor]=\"tableFootProps?.color\"\n [columnFilterTemplates]=\"columnFilterTemplates\"\n [columnLabelTemplates]=\"columnLabelTemplates\"\n [columnSorter]=\"columnSorter\"\n [columns]=\"columns$()\"\n [selectAll]=\"selectAll\"\n [selectable]=\"selectable\"\n [selectedAll]=\"(selectedAllSubject | async) ?? false\"\n [sorterValue]=\"sorterValue\"\n [summaryRowTemplate]=\"summaryRowTemplate\"\n component=\"tfoot\"\n />\n }\n\n </table>\n @if (loading) {\n <c-element-cover\n [boundaries]=\"[\n { sides: ['top'], query: 'td' },\n { sides: ['bottom'], query: 'tbody' }\n ]\"\n />\n }\n</div>\n@if (pagination || itemsPerPageSelect) {\n <div class=\"row\">\n <div class=\"col\">\n @if (pagination && numberOfPages > 1) {\n <c-smart-pagination\n (activePageChange)=\"setActivePage($event)\"\n [activePage]=\"activePage\"\n [pages]=\"numberOfPages\"\n />\n }\n </div>\n <div class=\"col-auto ms-auto\">\n @if (itemsPerPageSelect) {\n <c-smart-table-items-per-page-selector\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\n [itemsPerPage]=\"itemsPerPage\"\n />\n }\n </div>\n </div>\n}\n<ng-template #tbodyDefaultTemplate>\n <tbody [cAlign]=\"tableBodyProps?.align\"\n [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\n [cTableColor]=\"tableBodyProps?.color\"\n >\n @for (item of currentItems; track item; let i = $index, cnt = $count, isEven = $even, isOdd = $odd) {\n <tr (click)=\"handleRowClick({$event, item, i})\"\n [cAlign]=\"item._props?.align\"\n [cTableActive]=\"item._props?.active ?? undefined\"\n [cTableColor]=\"item._props?.color\"\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\n [tabindex]=\"clickableRows ? 0 : -1\"\n >\n @if (selectable) {\n <td [cAlign]=\"item?.['_cellProps']?._all?.align\"\n [cTableActive]=\"item?.['_cellProps']?._all?.active ?? undefined\"\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\n >\n <input (change)=\"handleRowChecked($event, item)\"\n [checked]=\"item._selected ?? false\"\n [disabled]=\"(item?._selectable === false) ?? false\"\n autocomplete=\"off\"\n cFormCheckInput\n >\n </td>\n }\n @for (column of columns$(); track column; let i = $index) {\n <ng-container\n *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {column, item, columnName: getColumnKey(column), tdContent: item[column.key], cellProps: getTableDataCellProps(column, item) }\"\n />\n }\n </tr>\n @if (templates['tableDetails']) {\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\n <tr>\n <td [colSpan]=\"colspan\" [ngStyle]=\"{borderBottomWidth: 0}\" class=\"p-0\" tabindex=\"-1\"></td>\n </tr>\n <tr class=\"p-0\">\n <td [colSpan]=\"colspan\" [ngStyle]=\"{border: 0}\" class=\"p-0\">\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\" />\n </td>\n </tr>\n }\n }\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\" />\n </tbody>\n</ng-template>\n\n<ng-template\n #columnDefaultTemplate\n let-cellProps=\"cellProps\"\n let-column=\"column\"\n let-columnName=\"columnName\"\n let-item=\"item\"\n let-tdContent=\"tdContent\"\n>\n @if (tdContent !== undefined) {\n <td [cAlign]=\"cellProps?.align\"\n [cHtmlAttr]=\"cellProps?.['_attributes'] ?? undefined\"\n [cTableActive]=\"cellProps?.['active']\"\n [cTableColor]=\"cellProps?.color ?? column[columnName]?._colProps?.color ?? undefined\"\n [ngClass]=\"getTableDataCellClass(column, item)\"\n [ngStyle]=\"getTableDataCellStyles(column, item)\"\n >\n {{ tdContent }}\n </td>\n }\n</ng-template>\n\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\n<!-- <tr class=\"p-0\">-->\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\n<!-- </td>-->\n<!-- </tr>-->\n<!--</ng-template>-->\n\n<ng-template #noItemsDefaultTemplate>\n @if (!currentItems.length) {\n <tr>\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{ noItemsLabel }}</td>\n </tr>\n }\n</ng-template>\n\n<!--todo: filterIconCustomTemplate-->\n<ng-template #filterIconTemplate>\n <svg class=\"icon icon-custom-size\" pointer-events=\"none\" role=\"img\" viewBox=\"0 0 512 512\"\n width=\"18\" xmlns=\"http://www.w3.org/2000/svg\">\n <polygon\n class=\"ci-primary\"\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\">\n </polygon>\n <polygon\n class=\"ci-primary\"\n fill=\"var(--ci-primary-color, currentColor)\"\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\">\n </polygon>\n </svg>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: AlignDirective, selector: "[cAlign]", inputs: ["cAlign"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: FilterInputDirective, selector: "[cFilterInput]", inputs: ["delay", "onEvent", "value"], outputs: ["valueChange"], exportAs: ["cFilterInput"] }, { kind: "directive", type: FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid", "checked"] }, { kind: "directive", type: HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }, { kind: "component", type: SmartPaginationComponent, selector: "c-smart-pagination", inputs: ["activePage", "arrows", "doubleArrows", "dots", "limit", "pages", "firstButton", "lastButton", "nextButton", "previousButton", "align", "size", "role"], outputs: ["activePageChange"], exportAs: ["cSmartPagination"] }, { kind: "component", type: SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: ["filterLabel", "filterPlaceholder", "sizing"] }, { kind: "component", type: SmartTableHeadComponent, selector: "c-smart-table-head", inputs: ["columnFilter", "columnFilterState", "columnSorter", "component", "columns", "columnGroups", "selectable", "selectAll", "selectedAll", "showGroups", "sorterValue", "columnFilterTemplates", "columnLabelTemplates", "summaryRowTemplate"], outputs: ["columnFilterStateChange", "sorterStateChange", "selectAllChange"] }, { kind: "component", type: SmartTableItemsPerPageSelectorComponent, selector: "c-smart-table-items-per-page-selector", inputs: ["itemsPerPage", "itemsPerPageLabel", "itemsPerPageOptions"], outputs: ["itemsPerPageChange"] }, { kind: "directive", type: TableActiveDirective, selector: "[cTableActive]", inputs: ["cTableActive"] }, { kind: "directive", type: TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: TableDirective, selector: "table[cTable]", inputs: ["align", "borderColor", "bordered", "borderless", "caption", "color", "hover", "responsive", "small", "striped", "stripedColumns"] }] }); }
|
|
419
419
|
}
|
|
420
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
420
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SmartTableComponent, decorators: [{
|
|
421
421
|
type: Component,
|
|
422
422
|
args: [{ selector: 'c-smart-table', exportAs: 'cSmartTable', standalone: true, imports: [
|
|
423
423
|
AsyncPipe,
|
|
@@ -524,4 +524,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
524
524
|
type: ContentChildren,
|
|
525
525
|
args: [TemplateIdDirective]
|
|
526
526
|
}] } });
|
|
527
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbWFydC10YWJsZS9zbWFydC10YWJsZS9zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFFBQVEsRUFDUixlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFLTCxlQUFlLEVBRWYsTUFBTSxFQUVOLE1BQU0sRUFLUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQW1CdkMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsWUFBWSxFQUNaLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFDTCx1Q0FBdUMsRUFDeEMsTUFBTSxzRkFBc0YsQ0FBQzs7QUE2QjlGLE1BQU0sT0FBTyxtQkFBbUI7SUFFOUIsWUFDVSxlQUFnQyxFQUNoQyxlQUFnQztRQURoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBWWpDLGlCQUFZLEdBQUcsWUFBWSxDQUFDO1FBQzVCLDBCQUFxQixHQUFHLHFCQUFxQixDQUFDO1FBQzlDLDBCQUFxQixHQUFHLHFCQUFxQixDQUFDO1FBQzlDLDJCQUFzQixHQUFHLHNCQUFzQixDQUFDO1FBRWhELHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUE0QixLQUFLLENBQUMsQ0FBQztRQWlCNUUsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFZ0IsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQWtCOUQsYUFBUSxHQUE4QixNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsa0JBQWEsR0FBK0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFvQnBELHVCQUFrQixHQUF1QixFQUFFLENBQUM7UUFJWixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRWYsV0FBTSxHQUFHLEtBQUssQ0FBQztRQW9CdkQsV0FBTSxHQUFHLE1BQU0sQ0FBQyxFQUEwQixDQUFDLENBQUM7UUFDcEMsV0FBTSxHQUFvQixFQUFnQyxDQUFDO1FBVzNELGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRTFCLHNCQUFpQixHQUFXLGlCQUFpQixDQUFDO1FBQzlDLHdCQUFtQixHQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFHaEQsaUJBQVksR0FBOEIsZ0JBQWdCLENBQUM7UUFFNUIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQVduRCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUVHLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFpQmpELGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQWtCL0IscUJBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQzdCLDJCQUFzQixHQUFHLGdCQUFnQixDQUFDO1FBZTNDLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUU5QixtQkFBYyxHQUF3QixFQUFFLENBQUM7UUFDekMsbUJBQWMsR0FBd0IsRUFBRSxDQUFDO1FBQ3pDLG1CQUFjLEdBQXdCLEVBQUUsQ0FBQztRQUN6QyxlQUFVLEdBQVksRUFBRSxDQUFDO1FBRWYsd0JBQW1CLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFDekUsc0JBQWlCLEdBQStCLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQ2pGLHFCQUFnQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3BFLHVCQUFrQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3RFLGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN0RCw0QkFBdUIsR0FBcUMsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFDbkcsd0JBQW1CLEdBQWtDLElBQUksWUFBWSxFQUFtQixDQUFDO1FBQ3pGLDJCQUFzQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRzdGLGNBQVMsR0FBaUQsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNsRywwQkFBcUIsR0FBaUQsRUFBRSxDQUFDO1FBQ3pFLHlCQUFvQixHQUFpRCxFQUFFLENBQUM7UUFDeEUsdUJBQWtCLEdBQWdDLElBQUksQ0FBQztRQTJEdkQsb0JBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzlCLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILHNCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBMkMzSCxvQkFBZSxHQUFvQixFQUFFLENBQUM7UUF4VDVDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEYsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFOUUsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFjRCxJQUNJLFVBQVUsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFRRCxJQUNJLE9BQU8sQ0FBQyxLQUFvQztRQUM5QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckcsTUFBTSxPQUFPLEdBQWMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNCLHlDQUF5QztRQUN6QyxrREFBa0Q7UUFDbEQsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQVFELElBQ0ksaUJBQWlCLENBQUMsS0FBeUI7UUFDN0MsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLDZCQUE2QjtZQUNuRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBVUQsSUFDSSxLQUFLLENBQUMsS0FBYztRQUN0QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQStCLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ3hELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUtELElBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBWUQsSUFDSSxVQUFVLENBQUMsS0FBYztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFNRCxJQUNJLFdBQVcsQ0FBQyxLQUFtQjtRQUNqQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUlELElBQ0ksV0FBVyxDQUFDLE1BQU07UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDM0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ2hHLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLE1BQU0sQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7WUFDeEgsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsRyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBT0QsSUFDSSxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ2hDLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsNkJBQTZCO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQXdCRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUEwQixFQUFFLEVBQUU7WUFDMUQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7Z0JBQ3pELE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7Z0JBQ3hELE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLGlCQUFpQixFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO2dCQUM1QyxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9ELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sUUFBUSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDN0QsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDOUYsQ0FBQztJQUVELElBQUksMEJBQTBCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FDM0IsSUFBSSxDQUFDLDBCQUEwQixFQUMvQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDckQsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQVFELElBQUksV0FBVztRQUNiLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQzFDLElBQ0UsQ0FBQyxTQUFTO1lBQ1YsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQzdDLENBQUMsSUFBSSxDQUFDLFlBQVk7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRO2dCQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUM3QixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzVCLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlDLDZGQUE2RjtRQUM3RixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9GLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLElBQUksT0FBTyxhQUFhLEVBQUUsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2hELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDOUMsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBNEIsRUFBRSxLQUE0QixFQUFFLEVBQUU7WUFDL0UsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUFFRixPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzlGLENBQUM7SUFBQSxDQUFDO0lBSUYsSUFBSSxjQUFjO1FBQ2hCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsSUFDRSxJQUFJLENBQUMsWUFBWTtZQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssUUFBUTtZQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFDMUIsQ0FBQztZQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO1lBQzlCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFFOUQsSUFBSSxLQUFLLFlBQVksUUFBUSxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkQsT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDdEUsSUFBSSxPQUFPLGFBQWEsRUFBRSxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sYUFBYSxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5SCxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqRCxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUMzRixDQUFDO1FBRUgsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztRQUM5QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNoQyxJQUNFLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUN0QixDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUN2RixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckQsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BGLGFBQWE7UUFDYixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQTJCLEVBQUUsRUFBRTtZQUNuRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFjO1FBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVcsRUFBRSxLQUFhLEVBQUUsRUFBRTtnQkFDOUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBc0IsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFnRTtRQUMvRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsVUFBVSxDQUFDLENBQVM7UUFDbEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxPQUFPLENBQ0wsSUFBSSxDQUFDLFlBQVk7WUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtnQkFDbkIsT0FBTyxNQUFNLEtBQUssUUFBUTtnQkFDMUIsQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUN4RixJQUFJLFlBQVksQ0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsS0FBYSxFQUFFLEtBQWlCO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7UUFDRCw2REFBNkQ7UUFDN0QsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUU1QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDOUssTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDeEIsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM5RixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDbkUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDNUIsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBYztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQsd0JBQXdCLENBQUMsTUFBVztRQUNsQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMvRSxDQUFDO0lBRUQsdUJBQXVCLENBQUMsTUFBd0M7UUFDOUQsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7UUFDdEYsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0YsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFrQjtRQUN0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLDRCQUE0QjtJQUNsRCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsS0FBYTtRQUNwQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBYSxFQUFFLElBQW1CO1FBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLElBQUssTUFBTSxDQUFDLE1BQTJCLENBQUMsT0FBTyxDQUFDO1FBQzNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwRixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQVc7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQW1CLEVBQUUsRUFBRTtZQUNuRCxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzFGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBNkQ7UUFDMUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUE2QixDQUFDO1FBQ3BELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzdELE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQztZQUMxRCxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzNELE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDLFlBQVksQ0FBQztZQUN6RCxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7OEdBbGdCVSxtQkFBbUI7a0dBQW5CLG1CQUFtQixvR0E0QlYsZUFBZSxtQ0FZZixnQkFBZ0IscURBRWhCLGdCQUFnQix3SkE0Q2hCLGdCQUFnQixnQ0FFaEIsZ0JBQWdCLGtFQXVCaEIsZUFBZSw0TkFpQmYsZ0JBQWdCLDRDQUVoQixnQkFBZ0IseUNBV2hCLGdCQUFnQiw0c0JBbUVuQixtQkFBbUIsNkVDL1N0QyxxeVNBMFBBLDJFRC9LSSxTQUFTLDhDQUNULGdCQUFnQixvSkFDaEIsT0FBTyxvRkFDUCxPQUFPLDJFQUNQLGNBQWMseUVBQ2QsZUFBZSwwSkFDZixxQkFBcUIsZ0hBQ3JCLG9CQUFvQix3SkFDcEIsdUJBQXVCLDBIQUN2Qix1QkFBdUIsd0dBQ3ZCLHdCQUF3QixnU0FDeEIseUJBQXlCLHlIQUN6Qix1QkFBdUIsa1lBQ3ZCLHVDQUF1Qyx5TEFDdkMsb0JBQW9CLHFGQUNwQixtQkFBbUIsbUZBQ25CLGNBQWM7OzJGQUlMLG1CQUFtQjtrQkEzQi9CLFNBQVM7K0JBQ0UsZUFBZSxZQUdmLGFBQWEsY0FDWCxJQUFJLFdBQ1A7d0JBQ1AsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxjQUFjO3dCQUNkLGVBQWU7d0JBQ2YscUJBQXFCO3dCQUNyQixvQkFBb0I7d0JBQ3BCLHVCQUF1Qjt3QkFDdkIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsdUJBQXVCO3dCQUN2Qix1Q0FBdUM7d0JBQ3ZDLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLFFBQVE7cUJBQ1Q7a0hBK0JHLFVBQVU7c0JBRGIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBWUcsT0FBTztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFFRSxhQUFhO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUdsQyxPQUFPO3NCQURWLEtBQUs7Z0JBb0JHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0YsaUJBQWlCO3NCQURwQixLQUFLO2dCQWtCRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVrQyxNQUFNO3NCQUE3QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUVFLE1BQU07c0JBQTdDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBR2xDLEtBQUs7c0JBRFIsS0FBSztnQkFzQkYsWUFBWTtzQkFEZixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFXNUIsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRWtDLFVBQVU7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBR2xDLFVBQVU7c0JBRGIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFXRSxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUdsQyxXQUFXO3NCQURkLEtBQUs7Z0JBa0JGLFdBQVc7c0JBRGQsS0FBSztnQkFnQkcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBZUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFYSxtQkFBbUI7c0JBQXJDLE1BQU07Z0JBQ1ksaUJBQWlCO3NCQUFuQyxNQUFNO2dCQUNZLGdCQUFnQjtzQkFBbEMsTUFBTTtnQkFDWSxrQkFBa0I7c0JBQXBDLE1BQU07Z0JBQ1ksUUFBUTtzQkFBMUIsTUFBTTtnQkFDWSx1QkFBdUI7c0JBQXpDLE1BQU07Z0JBQ1ksbUJBQW1CO3NCQUFyQyxNQUFNO2dCQUNZLHNCQUFzQjtzQkFBeEMsTUFBTTtnQkFFK0IsZUFBZTtzQkFBcEQsZUFBZTt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIEl0ZXJhYmxlRGlmZmVyLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIEtleVZhbHVlRGlmZmVyLFxuICBLZXlWYWx1ZURpZmZlcnMsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgc2lnbmFsLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgV3JpdGFibGVTaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIEpzb25QaXBlLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJVGFibGUgfSBmcm9tICcuLi8uLi90YWJsZS90YWJsZS50eXBlJztcbmltcG9ydCB7XG4gIElDb2x1bW4sXG4gIElDb2x1bW5GaWx0ZXIsXG4gIElDb2x1bW5GaWx0ZXJWYWx1ZSxcbiAgSUdyb3VwLFxuICBJSXRlbSxcbiAgSUl0ZW1JbnRlcm5hbCxcbiAgSVNtYXJ0VGFibGUsXG4gIElTb3J0ZXIsXG4gIElTb3J0ZXJWYWx1ZSxcbiAgSVRhYmxlRmlsdGVyLFxuICBJVGFibGVTZWN0aW9uUHJvcHMsXG4gIEl0ZW1zUGVyUGFnZVNlbGVjdCxcbiAgU29ydE9yZGVyXG59IGZyb20gJy4uL3NtYXJ0LXRhYmxlLnR5cGUnO1xuXG5pbXBvcnQge1xuICBnZXRDbGlja2VkQ29sdW1uTmFtZSxcbiAgZ2V0Q29sdW1uR3JvdXBzLFxuICBnZXRDb2x1bW5LZXksXG4gIGdldENvbHVtbk5hbWVzLFxuICBnZXRDb2x1bW5OYW1lc0Zyb21JdGVtcyxcbiAgZ2V0Q29sdW1ucyxcbiAgZ2V0VGFibGVEYXRhQ2VsbENsYXNzLFxuICBnZXRUYWJsZURhdGFDZWxsUHJvcHMsXG4gIGdldFRhYmxlRGF0YUNlbGxTdHlsZXNcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUudXRpbHMnO1xuXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9idXR0b24nO1xuaW1wb3J0IHsgRm9ybUNoZWNrSW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7IEVsZW1lbnRDb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnQtY292ZXInO1xuaW1wb3J0IHsgSHRtbEF0dHJpYnV0ZXNEaXJlY3RpdmUsIFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgU21hcnRQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc21hcnQtcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBUYWJsZUFjdGl2ZURpcmVjdGl2ZSwgVGFibGVDb2xvckRpcmVjdGl2ZSwgVGFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90YWJsZSc7XG5pbXBvcnQgeyBBbGlnbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBTbWFydFRhYmxlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc21hcnQtdGFibGUtZmlsdGVyL3NtYXJ0LXRhYmxlLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsdGVySW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi9zbWFydC10YWJsZS1maWx0ZXIvZmlsdGVyLWlucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTbWFydFRhYmxlSGVhZENvbXBvbmVudCB9IGZyb20gJy4uL3NtYXJ0LXRhYmxlLWhlYWQvc21hcnQtdGFibGUtaGVhZC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgU21hcnRUYWJsZUl0ZW1zUGVyUGFnZVNlbGVjdG9yQ29tcG9uZW50XG59IGZyb20gJy4uL3NtYXJ0LXRhYmxlLWl0ZW1zLXBlci1wYWdlLXNlbGVjdG9yL3NtYXJ0LXRhYmxlLWl0ZW1zLXBlci1wYWdlLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Mtc21hcnQtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zbWFydC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NTbWFydFRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nQ2xhc3MsXG4gICAgTmdTdHlsZSxcbiAgICBBbGlnbkRpcmVjdGl2ZSxcbiAgICBCdXR0b25EaXJlY3RpdmUsXG4gICAgRWxlbWVudENvdmVyQ29tcG9uZW50LFxuICAgIEZpbHRlcklucHV0RGlyZWN0aXZlLFxuICAgIEZvcm1DaGVja0lucHV0RGlyZWN0aXZlLFxuICAgIEh0bWxBdHRyaWJ1dGVzRGlyZWN0aXZlLFxuICAgIFNtYXJ0UGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICBTbWFydFRhYmxlRmlsdGVyQ29tcG9uZW50LFxuICAgIFNtYXJ0VGFibGVIZWFkQ29tcG9uZW50LFxuICAgIFNtYXJ0VGFibGVJdGVtc1BlclBhZ2VTZWxlY3RvckNvbXBvbmVudCxcbiAgICBUYWJsZUFjdGl2ZURpcmVjdGl2ZSxcbiAgICBUYWJsZUNvbG9yRGlyZWN0aXZlLFxuICAgIFRhYmxlRGlyZWN0aXZlLFxuICAgIEpzb25QaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIElTbWFydFRhYmxlLCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgcHJpdmF0ZSBrZXlWYWx1ZURpZmZlcnM6IEtleVZhbHVlRGlmZmVyc1xuICApIHtcbiAgICB0aGlzLml0ZW1zRGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLml0ZW1zKS5jcmVhdGUoKTtcbiAgICB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIgPSB0aGlzLml0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX2NvbHVtbkZpbHRlcmVkKS5jcmVhdGUoKTtcbiAgICB0aGlzLmNvbHVtRmlsdGVyVmFsdWVEaWZmZXIgPSB0aGlzLmtleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuY29sdW1uRmlsdGVyVmFsdWUpLmNyZWF0ZSgpO1xuICAgIHRoaXMuc29ydGVyVmFsdWVEaWZmZXIgPSB0aGlzLmtleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuc29ydGVyVmFsdWUpLmNyZWF0ZSgpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkQWxsU3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRBbGwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcmVhZG9ubHkgZ2V0Q29sdW1uS2V5ID0gZ2V0Q29sdW1uS2V5O1xuICByZWFkb25seSBnZXRUYWJsZURhdGFDZWxsQ2xhc3MgPSBnZXRUYWJsZURhdGFDZWxsQ2xhc3M7XG4gIHJlYWRvbmx5IGdldFRhYmxlRGF0YUNlbGxQcm9wcyA9IGdldFRhYmxlRGF0YUNlbGxQcm9wcztcbiAgcmVhZG9ubHkgZ2V0VGFibGVEYXRhQ2VsbFN0eWxlcyA9IGdldFRhYmxlRGF0YUNlbGxTdHlsZXM7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRBbGxTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuIHwgJ2luZGV0ZXJtaW5hdGUnPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpdGVtc0RpZmZlcjogSXRlcmFibGVEaWZmZXI8YW55PiB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbXNGaWx0ZXJlZERpZmZlcjogSXRlcmFibGVEaWZmZXI8YW55PiB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29sdW1GaWx0ZXJWYWx1ZURpZmZlcjogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3J0ZXJWYWx1ZURpZmZlcjogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IHwgbnVsbDtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICBzZXQgYWN0aXZlUGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fYWN0aXZlUGFnZSA9IHZhbHVlIHx8IDE7XG4gICAgdGhpcy5hY3RpdmVQYWdlQ2hhbmdlLmVtaXQodGhpcy5fYWN0aXZlUGFnZSk7XG4gIH1cblxuICBnZXQgYWN0aXZlUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlUGFnZSA9IDE7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFuZXIgPSBmYWxzZTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2xpY2thYmxlUm93cyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjb2x1bW5zKHZhbHVlOiAoc3RyaW5nIHwgSUNvbHVtbiB8IElHcm91cClbXSkge1xuICAgIGNvbnN0IGNvbE9iamVjdHMgPSB2YWx1ZS5tYXAoY29sdW1uID0+IHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnID8geyBrZXk6IGNvbHVtbiB9IDogeyAuLi5jb2x1bW4gfSk7XG4gICAgY29uc3QgY29sdW1uczogSUNvbHVtbltdID0gZ2V0Q29sdW1ucyhjb2xPYmplY3RzKTtcbiAgICB0aGlzLmNvbHVtbnMkLnNldChjb2x1bW5zKTtcblxuICAgIC8vIHRvZG86IElucHV0IGNvbHVtbkdyb3VwcyAtIHNlcGFyYXRpb24/XG4gICAgLy8gY29uc29sZS5sb2coZ2V0Q29sdW1uR3JvdXBzKGNvbE9iamVjdHMgPz8gW10pKTtcbiAgICBjb25zdCBncm91cHMgPSBnZXRDb2x1bW5Hcm91cHModmFsdWUgPz8gW10pO1xuICAgIHRoaXMuY29sdW1uR3JvdXBzJC5zZXQoZ3JvdXBzKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCk6IElDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucyQoKTtcbiAgfVxuXG4gIGNvbHVtbnMkOiBXcml0YWJsZVNpZ25hbDxJQ29sdW1uW10+ID0gc2lnbmFsKFtdKTtcbiAgY29sdW1uR3JvdXBzJDogV3JpdGFibGVTaWduYWw8SUdyb3VwW11bXT4gPSBzaWduYWwoW10pO1xuICBzaG93R3JvdXBzJCA9IGNvbXB1dGVkKCgpID0+ICEhdGhpcy5jb2x1bW5Hcm91cHMkKCkubGVuZ3RoKTtcblxuICBASW5wdXQoKSBjb2x1bW5GaWx0ZXI/OiBib29sZWFuIHwgSUNvbHVtbkZpbHRlcjtcblxuICBASW5wdXQoKVxuICBzZXQgY29sdW1uRmlsdGVyVmFsdWUodmFsdWU6IElDb2x1bW5GaWx0ZXJWYWx1ZSkge1xuICAgIGlmICh0aGlzLmNvbHVtRmlsdGVyVmFsdWVEaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmNvbHVtRmlsdGVyVmFsdWVEaWZmZXIuZGlmZih2YWx1ZSk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJWYWx1ZSA9IHsgLi4udmFsdWUgfTtcbiAgICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHsgLi4udGhpcy5fY29sdW1uRmlsdGVyVmFsdWUgfSk7XG4gICAgICAgIHRoaXMudGFibGVGaWx0ZXJlZDsgLy8gZW1pdHMgdGFibGVGaWx0ZXJlZCBjaGFuZ2VcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY29sdW1uRmlsdGVyVmFsdWUoKTogSUNvbHVtbkZpbHRlclZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uRmlsdGVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9jb2x1bW5GaWx0ZXJWYWx1ZTogSUNvbHVtbkZpbHRlclZhbHVlID0ge307XG5cbiAgQElucHV0KCkgY29sdW1uU29ydGVyPzogYm9vbGVhbiB8IElTb3J0ZXI7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGZvb3RlciA9IGZhbHNlO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoZWFkZXIgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgaXRlbXModmFsdWU6IElJdGVtW10pIHtcbiAgICBpZiAodGhpcy5pdGVtc0RpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuaXRlbXNEaWZmZXIuZGlmZih2YWx1ZSk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHRoaXMuc2V0SXRlbXModmFsdWUpIGFzIEFycmF5PFR5cGU8SUl0ZW1JbnRlcm5hbD4+O1xuICAgICAgICB0aGlzLml0ZW1zJC5zZXQodGhpcy5faXRlbXMpO1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBnZXRDb2x1bW5OYW1lc0Zyb21JdGVtcyh0aGlzLml0ZW1zJCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBpdGVtcyQgPSBzaWduYWwoW10gYXMgQXJyYXk8SUl0ZW1JbnRlcm5hbD4pO1xuICBwcml2YXRlIF9pdGVtczogSUl0ZW1JbnRlcm5hbFtdID0gW10gYXMgQXJyYXk8VHlwZTxJSXRlbUludGVybmFsPj47XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgc2V0IGl0ZW1zUGVyUGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faXRlbXNQZXJQYWdlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaXRlbXNQZXJQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgX2l0ZW1zUGVyUGFnZTogbnVtYmVyID0gMTA7XG5cbiAgQElucHV0KCkgaXRlbXNQZXJQYWdlTGFiZWw6IHN0cmluZyA9ICdJdGVtcyBwZXIgcGFnZTonO1xuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDUwXTtcbiAgQElucHV0KCkgaXRlbXNQZXJQYWdlU2VsZWN0PzogYm9vbGVhbiB8IEl0ZW1zUGVyUGFnZVNlbGVjdDtcbiAgQElucHV0KCkgbG9hZGluZz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIG5vSXRlbXNMYWJlbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICdObyBpdGVtcyBmb3VuZCc7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBhZ2luYXRpb24gPSBmYWxzZTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IHNlbGVjdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zZWxlY3RhYmxlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2VsZWN0QWxsID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzZXQgc29ydGVyVmFsdWUodmFsdWU6IElTb3J0ZXJWYWx1ZSkge1xuICAgIGlmICh0aGlzLnNvcnRlclZhbHVlRGlmZmVyKSB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5zb3J0ZXJWYWx1ZURpZmZlci5kaWZmKHZhbHVlKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuX3NvcnRlclZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc29ydGVyVmFsdWVDaGFuZ2UuZW1pdCh7IC4uLnZhbHVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBzb3J0ZXJWYWx1ZSgpOiBJU29ydGVyVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9zb3J0ZXJWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NvcnRlclZhbHVlOiBJU29ydGVyVmFsdWUgPSB7fTtcblxuICBASW5wdXQoKVxuICBzZXQgdGFibGVGaWx0ZXIoZmlsdGVyKSB7XG4gICAgdGhpcy5fdGFibGVGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyTGFiZWwgPSB0eXBlb2YgZmlsdGVyLmxhYmVsID09PSAnc3RyaW5nJyA/IGZpbHRlci5sYWJlbCA6IHRoaXMudGFibGVGaWx0ZXJMYWJlbDtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJQbGFjZWhvbGRlciA9IHR5cGVvZiBmaWx0ZXIucGxhY2Vob2xkZXIgPT09ICdzdHJpbmcnID8gZmlsdGVyLnBsYWNlaG9sZGVyIDogdGhpcy50YWJsZUZpbHRlclBsYWNlaG9sZGVyO1xuICAgICAgdGhpcy50YWJsZUZpbHRlclZhbHVlID0gdHlwZW9mIGZpbHRlci52YWx1ZSA9PT0gJ3N0cmluZycgPyBmaWx0ZXIudmFsdWUgOiB0aGlzLnRhYmxlRmlsdGVyVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUZpbHRlcjtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlRmlsdGVyPzogYm9vbGVhbiB8IElUYWJsZUZpbHRlcjtcblxuICBASW5wdXQoKSB0YWJsZUZpbHRlckxhYmVsID0gJ0ZpbHRlcjonO1xuICBASW5wdXQoKSB0YWJsZUZpbHRlclBsYWNlaG9sZGVyID0gJ3R5cGUgc3RyaW5nLi4uJztcblxuICBASW5wdXQoKVxuICBzZXQgdGFibGVGaWx0ZXJWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuX3RhYmxlRmlsdGVyVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJsZUZpbHRlclZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyZWQ7IC8vIGVtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXG4gICAgfVxuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVGaWx0ZXJWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlRmlsdGVyVmFsdWU6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIHRhYmxlQm9keVByb3BzPzogSVRhYmxlU2VjdGlvblByb3BzID0ge307XG4gIEBJbnB1dCgpIHRhYmxlRm9vdFByb3BzPzogSVRhYmxlU2VjdGlvblByb3BzID0ge307XG4gIEBJbnB1dCgpIHRhYmxlSGVhZFByb3BzPzogSVRhYmxlU2VjdGlvblByb3BzID0ge307XG4gIEBJbnB1dCgpIHRhYmxlUHJvcHM/OiBJVGFibGUgPSB7fTtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPElJdGVtW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxJSXRlbVtdPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc29ydGVyVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJU29ydGVyVmFsdWU+ID0gbmV3IEV2ZW50RW1pdHRlcjxJU29ydGVyVmFsdWU+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBhY3RpdmVQYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgaXRlbXNQZXJQYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPElDb2x1bW5GaWx0ZXJWYWx1ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5GaWx0ZXJWYWx1ZT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGZpbHRlcmVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJSXRlbUludGVybmFsW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxJSXRlbUludGVybmFsW10+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSB0YWJsZUZpbHRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVJZERpcmVjdGl2ZSkgY29sdW1uVGVtcGxhdGVzITogUXVlcnlMaXN0PFRlbXBsYXRlSWREaXJlY3RpdmU+O1xuICB0ZW1wbGF0ZXM6IHsgW2tleTogc3RyaW5nXTogKFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB9ID0geyB0YWJsZURldGFpbHM6IG51bGwsIHRhYmxlRGF0YTogbnVsbCB9O1xuICBjb2x1bW5GaWx0ZXJUZW1wbGF0ZXM6IHsgW2tleTogc3RyaW5nXTogKFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB9ID0ge307XG4gIGNvbHVtbkxhYmVsVGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IChUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkgfSA9IHt9O1xuICBzdW1tYXJ5Um93VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCA9IG51bGw7XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29sdW1uVGVtcGxhdGVzLmZvckVhY2goKGNoaWxkOiBUZW1wbGF0ZUlkRGlyZWN0aXZlKSA9PiB7XG4gICAgICBpZiAoY2hpbGQuaWQuc3RhcnRzV2l0aCgnY29sdW1uRmlsdGVyXycpKSB7XG4gICAgICAgIHRoaXMuY29sdW1uRmlsdGVyVGVtcGxhdGVzW2NoaWxkLmlkXSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQuaWQuc3RhcnRzV2l0aCgnY29sdW1uTGFiZWxfJykpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5MYWJlbFRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkLmlkID09PSAndGFibGVTdW1tYXJ5Um93Jykge1xuICAgICAgICB0aGlzLnN1bW1hcnlSb3dUZW1wbGF0ZSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICB9KTtcbiAgICB0aGlzLmNvbHVtbkZpbHRlclRlbXBsYXRlcyA9IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJUZW1wbGF0ZXMgfTtcbiAgICB0aGlzLmNvbHVtbkxhYmVsVGVtcGxhdGVzID0geyAuLi50aGlzLmNvbHVtbkxhYmVsVGVtcGxhdGVzIH07XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRBbGwoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLml0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0uX3NlbGVjdGVkID09PSB0cnVlKTtcbiAgICBjb25zdCB1bnNlbGVjdGVkID0gdGhpcy5pdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gZmFsc2UpO1xuICAgIHJldHVybiBzZWxlY3RlZCAmJiB1bnNlbGVjdGVkID8gJ2luZGV0ZXJtaW5hdGUnIDogc2VsZWN0ZWQ7XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXJTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlclZhbHVlID8gdGhpcy50YWJsZUZpbHRlclZhbHVlIDogJyc7XG4gIH1cblxuICBnZXQgY29sdW1uRmlsdGVyU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPyB0aGlzLmNvbHVtbkZpbHRlclZhbHVlIDoge307XG4gIH1cblxuICBnZXQgbnVtYmVyT2ZQYWdlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2UgPyBNYXRoLmNlaWwodGhpcy5zb3J0ZWRJdGVtcy5sZW5ndGggLyB0aGlzLl9pdGVtc1BlclBhZ2UpIDogMTtcbiAgfVxuXG4gIGdldCBjb2xzcGFuKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGUgPyB0aGlzLnJhd0NvbHVtbk5hbWVzJCgpLmxlbmd0aCArIDEgOiB0aGlzLnJhd0NvbHVtbk5hbWVzJCgpLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBmaXJzdEl0ZW1PbkFjdGl2ZVBhZ2VJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlID8gKHRoaXMuX2FjdGl2ZVBhZ2UgLSAxKSAqIHRoaXMuX2l0ZW1zUGVyUGFnZSA6IDA7XG4gIH1cblxuICBnZXQgaXRlbXNPbkFjdGl2ZVBhZ2UoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWRJdGVtcy5zbGljZShcbiAgICAgIHRoaXMuZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXgsXG4gICAgICB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4ICsgdGhpcy5faXRlbXNQZXJQYWdlXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50SXRlbXMoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlUGFnZSA/IHRoaXMuaXRlbXNPbkFjdGl2ZVBhZ2UgOiB0aGlzLnNvcnRlZEl0ZW1zID8/IFtdO1xuICB9XG5cbiAgcmF3Q29sdW1uTmFtZXMkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBnZXRDb2x1bW5OYW1lcyh0aGlzLmNvbHVtbnMkKCksIHRoaXMuaXRlbXMkKCkpO1xuICB9KTtcblxuICBpdGVtc0RhdGFDb2x1bW5zJCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmF3Q29sdW1uTmFtZXMkKCkuZmlsdGVyKChuYW1lKSA9PiBnZXRDb2x1bW5OYW1lc0Zyb21JdGVtcyh0aGlzLml0ZW1zJCgpKS5pbmNsdWRlcyhuYW1lKSkpO1xuXG4gIGdldCBzb3J0ZWRJdGVtcygpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGNvbnN0IGNvbHVtbktleSA9IHRoaXMuc29ydGVyVmFsdWUuY29sdW1uO1xuICAgIGlmIChcbiAgICAgICFjb2x1bW5LZXkgfHxcbiAgICAgICF0aGlzLml0ZW1zRGF0YUNvbHVtbnMkKCkuaW5jbHVkZXMoY29sdW1uS2V5KSB8fFxuICAgICAgKHRoaXMuY29sdW1uU29ydGVyICYmXG4gICAgICAgIHR5cGVvZiB0aGlzLmNvbHVtblNvcnRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdGhpcy5jb2x1bW5Tb3J0ZXIuZXh0ZXJuYWwpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlcmVkO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZUZpbHRlcmVkID0gWy4uLnRoaXMudGFibGVGaWx0ZXJlZF07XG5cbiAgICAvLyBpZiB2YWx1ZXMgaW4gY29sdW1uIGFyZSB0byBiZSBzb3J0ZWQgYnkgbnVtZXJpYyB2YWx1ZSB0aGV5IGFsbCBoYXZlIHRvIGJlIGEgdHlwZSBvZiBudW1iZXJcbiAgICBjb25zdCBmbGlwID0gdGhpcy5zb3J0ZXJWYWx1ZS5zdGF0ZSA9PT0gJ2FzYycgPyAxIDogdGhpcy5zb3J0ZXJWYWx1ZS5zdGF0ZSA9PT0gJ2Rlc2MnID8gLTEgOiAwO1xuXG4gICAgaWYgKGZsaXAgPT09IDApIHtcbiAgICAgIHJldHVybiB0YWJsZUZpbHRlcmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgIGlmICh0eXBlb2YgY3VycmVudENvbHVtbj8uc29ydGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBzb3J0ZWQgPSB0YWJsZUZpbHRlcmVkLnNsaWNlKCkuc29ydChjdXJyZW50Q29sdW1uLnNvcnRlcik7XG4gICAgICByZXR1cm4gZmxpcCA8IDAgPyBzb3J0ZWQucmV2ZXJzZSgpIDogc29ydGVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBhcmVGbiA9IChpdGVtMTogeyBbeDogc3RyaW5nXTogYW55OyB9LCBpdGVtMjogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZTEgPSBpdGVtMVtjb2x1bW5LZXldO1xuICAgICAgY29uc3QgdmFsdWUyID0gaXRlbTJbY29sdW1uS2V5XTtcbiAgICAgIGNvbnN0IGEgPSB0eXBlb2YgdmFsdWUxID09PSAnbnVtYmVyJyA/IHZhbHVlMSA6IFN0cmluZyh2YWx1ZTEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBiID0gdHlwZW9mIHZhbHVlMiA9PT0gJ251bWJlcicgPyB2YWx1ZTIgOiBTdHJpbmcodmFsdWUyKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGEgPiBiID8gMSAqIGZsaXAgOiBiID4gYSA/IC0xICogZmxpcCA6IDA7XG4gICAgfTtcblxuICAgIHJldHVybiB0YWJsZUZpbHRlcmVkLnNsaWNlKCkuc29ydChjb21wYXJlRm4pO1xuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyRXZlbnQoKTogJ2NoYW5nZScgfCAnaW5wdXQnIHtcbiAgICByZXR1cm4gKHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmxhenkpID8gJ2NoYW5nZScgOiAnaW5wdXQnO1xuICB9O1xuXG4gIHByaXZhdGUgX2NvbHVtbkZpbHRlcmVkOiBJSXRlbUludGVybmFsW10gPSBbXTtcblxuICBnZXQgY29sdW1uRmlsdGVyZWQoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICBsZXQgX2l0ZW1zID0gdGhpcy5faXRlbXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb2x1bW5GaWx0ZXIgJiZcbiAgICAgIHR5cGVvZiB0aGlzLmNvbHVtbkZpbHRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHRoaXMuY29sdW1uRmlsdGVyLmV4dGVybmFsXG4gICAgKSB7XG4gICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJlZCA9IF9pdGVtcztcbiAgICAgIHJldHVybiBfaXRlbXM7XG4gICAgfVxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY29sdW1uRmlsdGVyU3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB2YWx1ZShpdGVtW2tleV0pKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5rZXkgPT09IGtleSk7XG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnRDb2x1bW4/LmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKChpdGVtKSA9PiAodHlwZW9mIGN1cnJlbnRDb2x1bW4uZmlsdGVyID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnRDb2x1bW4uZmlsdGVyKGl0ZW0sIHZhbHVlKSkgPz8gIXZhbHVlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2x1bW5GaWx0ZXIgPSBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoY29sdW1uRmlsdGVyICYmIHRoaXMuaXRlbXNEYXRhQ29sdW1ucyQoKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIF9pdGVtcyA9IF9pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IFN0cmluZyhpdGVtW2tleV0pLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY29sdW1uRmlsdGVyKSk7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICB0aGlzLl9jb2x1bW5GaWx0ZXJlZCA9IF9pdGVtcztcbiAgICByZXR1cm4gX2l0ZW1zO1xuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyZWQoKTogSUl0ZW1JbnRlcm5hbFtdIHtcbiAgICBsZXQgaXRlbXMgPSB0aGlzLmNvbHVtbkZpbHRlcmVkO1xuICAgIGlmIChcbiAgICAgICF0aGlzLnRhYmxlRmlsdGVyU3RhdGUgfHxcbiAgICAgICh0aGlzLnRhYmxlRmlsdGVyICYmIHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmV4dGVybmFsKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlcikge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyLmRpZmYoaXRlbXMpO1xuICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnRhYmxlRmlsdGVyU3RhdGUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB2YWx1ZUNvbnRhaW5GaWx0ZXIgPSAodmFsOiBhbnkpID0+IFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW06IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4ge1xuICAgICAgcmV0dXJuICEhdGhpcy5pdGVtc0RhdGFDb2x1bW5zJCgpLmZpbmQoKGtleSkgPT4gdmFsdWVDb250YWluRmlsdGVyKGl0ZW1ba2V5XSkpO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIuZGlmZihpdGVtcyk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXNDaGFuZ2UuZW1pdChpdGVtcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGdldCBpc0ZpbHRlcmVkKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRmlsdGVyU3RhdGUgfHwgdGhpcy5zb3J0ZXJWYWx1ZT8uY29sdW1uIHx8IE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5GaWx0ZXJTdGF0ZSkuam9pbignJyk7XG4gIH1cblxuICBwcml2YXRlIHNldEl0ZW1zKGl0ZW1zOiBJSXRlbVtdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOiBJSXRlbSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBfX19pZDogaXRlbVsnX19faWQnXSA/PyBpbmRleCB9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiA8SUl0ZW1JbnRlcm5hbD5bXTtcbiAgfVxuXG4gIGhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50OiB7IGNvbHVtbktleTogc3RyaW5nOyBpbmRleDogbnVtYmVyOyBvcmRlcj86IFNvcnRPcmRlcjsgfSkge1xuICAgIHRoaXMuaGFuZGxlU29ydGVyQ2hhbmdlKCRldmVudC5jb2x1bW5LZXksICRldmVudC5pbmRleCwgJGV2ZW50Lm9yZGVyKTtcbiAgfVxuXG4gIGlzU29ydGFibGUoaTogbnVtYmVyKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaXNEYXRhQ29sdW1uID0gdGhpcy5pdGVtc0RhdGFDb2x1bW5zJCgpLmluY2x1ZGVzKHRoaXMucmF3Q29sdW1uTmFtZXMkKClbaV0pO1xuICAgIGxldCBjb2x1bW47XG4gICAgaWYgKHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29sdW1uU29ydGVyICYmXG4gICAgICAoIXRoaXMuY29sdW1ucy5sZW5ndGggfHxcbiAgICAgICAgdHlwZW9mIGNvbHVtbiAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgKHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmICh0eXBlb2YgY29sdW1uLnNvcnRlciA9PT0gJ3VuZGVmaW5lZCcgfHwgY29sdW1uLnNvcnRlcikpXG4gICAgICApICYmIGlzRGF0YUNvbHVtblxuICAgICk7XG4gIH1cblxuICBoYW5kbGVTb3J0ZXJDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIG9yZGVyPzogU29ydE9yZGVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzU29ydGFibGUoaW5kZXgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vaWYgY29sdW1uIGNoYW5nZWQgb3Igc29ydCB3YXMgZGVzY2VuZGluZyBjaGFuZ2UgYXNjIHRvIHRydWVcbiAgICBjb25zdCBzb3J0ZXJTdGF0ZSA9IHsgLi4udGhpcy5zb3J0ZXJWYWx1ZSB9O1xuXG4gICAgaWYgKHNvcnRlclN0YXRlLmNvbHVtbiA9PT0gY29sdW1uKSB7XG4gICAgICBjb25zdCByZXNldHRhYmxlID0gdGhpcy5jb2x1bW5Tb3J0ZXIgPT09IHRydWUgfHwgKHR5cGVvZiB0aGlzLmNvbHVtblNvcnRlciA9PT0gJ29iamVjdCcgJiYgKHRoaXMuY29sdW1uU29ydGVyLnJlc2V0YWJsZSAhPT0gZmFsc2UgJiYgdGhpcy5jb2x1bW5Tb3J0ZXIucmVzZXR0YWJsZSAhPT0gZmFsc2UpKTtcbiAgICAgIGNvbnN0IHN0YXRlID0gc29ydGVyU3RhdGUuc3RhdGU7XG4gICAgICBpZiAob3JkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzb3J0ZXJTdGF0ZS5zdGF0ZSA9IHN0YXRlID09PSAwID8gJ2FzYycgOiBzdGF0ZSA9PT0gJ2FzYycgPyAnZGVzYycgOiByZXNldHRhYmxlID8gMCA6ICdhc2MnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ydGVyU3RhdGUuc3RhdGUgPSAob3JkZXIgPT09IDAgJiYgIXJlc2V0dGFibGUpID8gc3RhdGUgOiBvcmRlcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc29ydGVyU3RhdGUuY29sdW1uID0gY29sdW1uO1xuICAgICAgc29ydGVyU3RhdGUuc3RhdGUgPSAnYXNjJztcbiAgICB9XG4gICAgdGhpcy5zb3J0ZXJWYWx1ZSA9IHsgLi4uc29ydGVyU3RhdGUgfTtcbiAgfVxuXG4gIHNldEFjdGl2ZVBhZ2UoJGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZVBhZ2UgPSAkZXZlbnQ7XG4gIH1cblxuICBoYW5kbGVDb2x1bW5GaWx0ZXJDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGNvbHVtbiwgdmFsdWUsIHR5cGUgfSA9ICRldmVudDtcbiAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSA9IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSwgW2Ake2NvbHVtbn1gXTogdmFsdWUgfTtcbiAgfVxuXG4gIGhhbmRsZVRhYmxlRmlsdGVyQ2hhbmdlKCRldmVudDogeyB2YWx1ZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IH0pIHtcbiAgICBjb25zdCB7IHZhbHVlLCB0eXBlIH0gPSAkZXZlbnQ7XG4gICAgY29uc3QgaXNMYXp5ID0gdHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXIubGF6eSA9PT0gdHJ1ZTtcbiAgICBpZiAoKChpc0xhenkgJiYgdHlwZSA9PT0gJ2lucHV0JykgfHwgKCFpc0xhenkgJiYgdHlwZSA9PT0gJ2NoYW5nZScpKSAmJiB2YWx1ZS5sZW5ndGggIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xuICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgY2xlYW4oJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSA9IHt9O1xuICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9ICcnO1xuICAgIHRoaXMuc29ydGVyVmFsdWUgPSB7fTtcbiAgICB0aGlzLnRhYmxlRmlsdGVyZWQ7IC8vZW1pdHMgdGFibGVGaWx0ZXJlZCBjaGFuZ2VcbiAgfVxuXG4gIGhhbmRsZUl0ZW1zUGVyUGFnZUNoYW5nZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9pdGVtc1BlclBhZ2UpIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSA9IHZhbHVlO1xuICAgICAgdGhpcy5pdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93Q2hlY2tlZCgkZXZlbnQ6IEV2ZW50LCBpdGVtOiBJSXRlbUludGVybmFsKSB7XG4gICAgaXRlbS5fc2VsZWN0ZWQgPSBpdGVtLl9zZWxlY3RhYmxlICE9PSBmYWxzZSAmJiAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gdHJ1ZSkpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZEFsbFN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkQWxsKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdEFsbENoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5pdGVtcy5tYXAoKGl0ZW06IElJdGVtSW50ZXJuYWwpID0+IHtcbiAgICAgIHJldHVybiB7IC4uLml0ZW0sIF9zZWxlY3RlZDogKGl0ZW0uX3NlbGVjdGFibGUgIT09IGZhbHNlID8gJGV2ZW50IDogISFpdGVtLl9zZWxlY3RlZCkgfTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkQWxsU3ViamVjdC5uZXh0KCRldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5fc2VsZWN0ZWQgPT09IHRydWUpKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBbGxTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZEFsbCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBoYW5kbGVSb3dDbGljayhwYXJhbTogeyAkZXZlbnQ6IE1vdXNlRXZlbnQ7IGl0ZW06IElJdGVtSW50ZXJuYWw7IGk6IG51bWJlciB9KSB7XG4gICAgY29uc3QgeyAkZXZlbnQsIGl0ZW0sIGkgfSA9IHsgLi4ucGFyYW0gfTtcbiAgICBjb25zdCB0YXJnZXQgPSAkZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSB0aGlzLnJhd0NvbHVtbk5hbWVzJCgpO1xuICAgIGNvbnN0IHNlbGVjdGFibGUgPSB0aGlzLl9zZWxlY3RhYmxlO1xuICAgIGNvbnN0IGNvbHVtbk5hbWUgPSBnZXRDbGlja2VkQ29sdW1uTmFtZSh0YXJnZXQsIGNvbHVtbk5hbWVzLCBzZWxlY3RhYmxlKTtcbiAgICB0aGlzLnJvd0NsaWNrLmVtaXQoeyBpdGVtOiBpdGVtLCBpbmRleDogaSArIHRoaXMuZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXgsIGNvbHVtbk5hbWUsIGV2ZW50OiAkZXZlbnQgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbkZpbHRlclZhbHVlJ10pIHtcbiAgICAgIGNvbnN0IGNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlID0gY2hhbmdlc1snY29sdW1uRmlsdGVyVmFsdWUnXTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICh0eXBlb2YgY3VycmVudFZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhjdXJyZW50VmFsdWUgPz8ge30pLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyd0YWJsZUZpbHRlclZhbHVlJ10pIHtcbiAgICAgIGNvbnN0IHRhYmxlRmlsdGVyVmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWyd0YWJsZUZpbHRlclZhbHVlJ107XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0YWJsZUZpbHRlclZhbHVlQ2hhbmdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIkBpZiAoaXRlbXNQZXJQYWdlU2VsZWN0IHx8IHRhYmxlRmlsdGVyIHx8IGNsZWFuZXIgfHwgdGVtcGxhdGVzWyd0YWJsZUN1c3RvbUhlYWRlciddKSB7XG4gIDxkaXYgY2xhc3M9XCJyb3cgbXktMiBteC0wXCI+XG4gICAgQGlmICh0YWJsZUZpbHRlcikge1xuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIHAtMFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVGaWx0ZXJUZW1wbGF0ZVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChjbGVhbmVyKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcC0wXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZUNsZWFuZXJUZW1wbGF0ZVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1sndGFibGVDdXN0b21IZWFkZXInXSB8fCB0YWJsZUN1c3RvbUhlYWRlclRlbXBsYXRlXCIgLz5cblxuICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVGaWx0ZXJUZW1wbGF0ZT5cbiAgICAgIEBpZiAodGFibGVGaWx0ZXIpIHtcbiAgICAgICAgPGMtc21hcnQtdGFibGUtZmlsdGVyXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZVRhYmxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIFtkZWxheV09XCIzMDBcIlxuICAgICAgICAgIFtmaWx0ZXJMYWJlbF09XCJ0YWJsZUZpbHRlckxhYmVsXCJcbiAgICAgICAgICBbZmlsdGVyUGxhY2Vob2xkZXJdPVwidGFibGVGaWx0ZXJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgW29uRXZlbnRdPVwidGFibGVGaWx0ZXJFdmVudFwiXG4gICAgICAgICAgW3ZhbHVlXT1cInRhYmxlRmlsdGVyU3RhdGVcIlxuICAgICAgICAgIGNGaWx0ZXJJbnB1dFxuICAgICAgICAvPlxuICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI3RhYmxlQ2xlYW5lclRlbXBsYXRlPlxuICAgICAgQGlmIChjbGVhbmVyKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiY2xlYW4oJGV2ZW50KVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0ZpbHRlcmVkXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J21zLTEnOiB0YWJsZUZpbHRlcn1cIlxuICAgICAgICAgIGNCdXR0b25cbiAgICAgICAgICBjb2xvcj1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckljb25UZW1wbGF0ZVwiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI3RhYmxlQ3VzdG9tSGVhZGVyVGVtcGxhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcC0wIG1zLWF1dG9cIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2N1c3RvbUhlYWRlcl1cIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG59XG48ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cbiAgPHRhYmxlIFthbGlnbl09XCJ0YWJsZVByb3BzPy5hbGlnblwiXG4gICAgICAgICBbYm9yZGVyQ29sb3JdPVwidGFibGVQcm9wcz8uYm9yZGVyQ29sb3JcIlxuICAgICAgICAgW2JvcmRlcmVkXT1cInRhYmxlUHJvcHM/LmJvcmRlcmVkID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICBbYm9yZGVybGVzc109XCJ0YWJsZVByb3BzPy5ib3JkZXJsZXNzID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICBbY0h0bWxBdHRyXT1cInRhYmxlUHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxuICAgICAgICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlUHJvcHM/LmNvbG9yXCJcbiAgICAgICAgIFtjYXB0aW9uXT1cInRhYmxlUHJvcHM/LmNhcHRpb25cIlxuICAgICAgICAgW2NvbG9yXT1cInRhYmxlUHJvcHM/LmNvbG9yXCJcbiAgICAgICAgIFtob3Zlcl09XCJ0YWJsZVByb3BzPy5ob3ZlciA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgW3Jlc3BvbnNpdmVdPVwidGFibGVQcm9wcz8ucmVzcG9uc2l2ZVwiXG4gICAgICAgICBbc21hbGxdPVwidGFibGVQcm9wcz8uc21hbGwgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgIFtzdHJpcGVkXT1cInRhYmxlUHJvcHM/LnN0cmlwZWQgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgIGNUYWJsZVxuICA+XG4gICAgQGlmIChoZWFkZXIpIHtcbiAgICAgIDxjLXNtYXJ0LXRhYmxlLWhlYWRcbiAgICAgICAgKGNvbHVtbkZpbHRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZUNvbHVtbkZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdEFsbENoYW5nZSk9XCJoYW5kbGVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzb3J0ZXJTdGF0ZUNoYW5nZSk9XCJoYW5kbGVTb3J0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICBbY0FsaWduXT1cInRhYmxlSGVhZFByb3BzPy5hbGlnblwiXG4gICAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVIZWFkUHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxuICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVIZWFkUHJvcHM/LmNvbG9yXCJcbiAgICAgICAgW2NvbHVtbkZpbHRlclN0YXRlXT1cImNvbHVtbkZpbHRlclN0YXRlXCJcbiAgICAgICAgW2NvbHVtbkZpbHRlclRlbXBsYXRlc109XCJjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNcIlxuICAgICAgICBbY29sdW1uRmlsdGVyXT1cImNvbHVtbkZpbHRlclwiXG4gICAgICAgIFtjb2x1bW5Hcm91cHNdPVwiY29sdW1uR3JvdXBzJCgpXCJcbiAgICAgICAgW2NvbHVtbkxhYmVsVGVtcGxhdGVzXT1cImNvbHVtbkxhYmVsVGVtcGxhdGVzXCJcbiAgICAgICAgW2NvbHVtblNvcnRlcl09XCJjb2x1bW5Tb3J0ZXJcIlxuICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zJCgpXCJcbiAgICAgICAgW3NlbGVjdEFsbF09XCJzZWxlY3RBbGxcIlxuICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgW3NlbGVjdGVkQWxsXT1cIihzZWxlY3RlZEFsbFN1YmplY3QgfCBhc3luYykgPz8gZmFsc2VcIlxuICAgICAgICBbc2hvd0dyb3Vwc109XCJzaG93R3JvdXBzJCgpXCJcbiAgICAgICAgW3NvcnRlclZhbHVlXT1cInNvcnRlclZhbHVlXCJcbiAgICAgIC8+XG4gICAgfVxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRib2R5RGVmYXVsdFRlbXBsYXRlXCIgLz5cblxuICAgIEBpZiAoc3VtbWFyeVJvd1RlbXBsYXRlICYmICFmb290ZXIpIHtcbiAgICAgIDx0Zm9vdD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdW1tYXJ5Um93VGVtcGxhdGVcIiAvPlxuICAgICAgPC90Zm9vdD5cbiAgICB9XG4gICAgQGlmIChmb290ZXIpIHtcbiAgICAgIDxjLXNtYXJ0LXRhYmxlLWhlYWRcbiAgICAgICAgKHNlbGVjdEFsbENoYW5nZSk9XCJoYW5kbGVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzb3J0ZXJTdGF0ZUNoYW5nZSk9XCJoYW5kbGVTb3J0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICBbY0FsaWduXT1cInRhYmxlRm9vdFByb3BzPy5hbGlnblwiXG4gICAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVGb290UHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxuICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVGb290UHJvcHM/LmNvbG9yXCJcbiAgICAgICAgW2NvbHVtbkZpbHRlclRlbXBsYXRlc109XCJjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNcIlxuICAgICAgICBbY29sdW1uTGFiZWxUZW1wbGF0ZXNdPVwiY29sdW1uTGFiZWxUZW1wbGF0ZXNcIlxuICAgICAgICBbY29sdW1uU29ydGVyXT1cImNvbHVtblNvcnRlclwiXG4gICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnMkKClcIlxuICAgICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiXG4gICAgICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxuICAgICAgICBbc2VsZWN0ZWRBbGxdPVwiKHNlbGVjdGVkQWxsU3ViamVjdCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgIFtzb3J0ZXJWYWx1ZV09XCJzb3J0ZXJWYWx1ZVwiXG4gICAgICAgIFtzdW1tYXJ5Um93VGVtcGxhdGVdPVwic3VtbWFyeVJvd1RlbXBsYXRlXCJcbiAgICAgICAgY29tcG9uZW50PVwidGZvb3RcIlxuICAgICAgLz5cbiAgICB9XG5cbiAgPC90YWJsZT5cbiAgQGlmIChsb2FkaW5nKSB7XG4gICAgPGMtZWxlbWVudC1jb3ZlclxuICAgICAgW2JvdW5kYXJpZXNdPVwiW1xuICAgICAgICB7IHNpZGVzOiBbJ3RvcCddLCBxdWVyeTogJ3RkJyB9LFxuICAgICAgICB7IHNpZGVzOiBbJ2JvdHRvbSddLCBxdWVyeTogJ3Rib2R5JyB9XG4gICAgICBdXCJcbiAgICAvPlxuICB9XG48L2Rpdj5cbkBpZiAocGFnaW5hdGlvbiB8fCBpdGVtc1BlclBhZ2VTZWxlY3QpIHtcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgIEBpZiAocGFnaW5hdGlvbiAmJiBudW1iZXJPZlBhZ2VzID4gMSkge1xuICAgICAgICA8Yy1zbWFydC1wYWdpbmF0aW9uXG4gICAgICAgICAgKGFjdGl2ZVBhZ2VDaGFuZ2UpPVwic2V0QWN0aXZlUGFnZSgkZXZlbnQpXCJcbiAgICAgICAgICBbYWN0aXZlUGFnZV09XCJhY3RpdmVQYWdlXCJcbiAgICAgICAgICBbcGFnZXNdPVwibnVtYmVyT2ZQYWdlc1wiXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIG1zLWF1dG9cIj5cbiAgICAgIEBpZiAoaXRlbXNQZXJQYWdlU2VsZWN0KSB7XG4gICAgICAgIDxjLXNtYXJ0LXRhYmxlLWl0ZW1zLXBlci1wYWdlLXNlbGVjdG9yXG4gICAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJoYW5kbGVJdGVtc1BlclBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW2l0ZW1zUGVyUGFnZUxhYmVsXT1cIml0ZW1zUGVyUGFnZUxhYmVsXCJcbiAgICAgICAgICBbaXRlbXNQZXJQYWdlT3B0aW9uc109XCJpdGVtc1BlclBhZ2VPcHRpb25zXCJcbiAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufVxuPG5nLXRlbXBsYXRlICN0Ym9keURlZmF1bHRUZW1wbGF0ZT5cbiAgPHRib2R5IFtjQWxpZ25dPVwidGFibGVCb2R5UHJvcHM/LmFsaWduXCJcbiAgICAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVCb2R5UHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxuICAgICAgICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlQm9keVByb3BzPy5jb2xvclwiXG4gID5cbiAgICBAZm9yIChpdGVtIG9mIGN1cnJlbnRJdGVtczsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXgsIGNudCA9ICRjb3VudCwgaXNFdmVuID0gJGV2ZW4sIGlzT2RkID0gJG9kZCkge1xuICAgICAgPHRyIChjbGljayk9XCJoYW5kbGVSb3dDbGljayh7JGV2ZW50LCBpdGVtLCBpfSlcIlxuICAgICAgICAgIFtjQWxpZ25dPVwiaXRlbS5fcHJvcHM/LmFsaWduXCJcbiAgICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0uX3Byb3BzPy5hY3RpdmUgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICBbY1RhYmxlQ29sb3JdPVwiaXRlbS5fcHJvcHM/LmNvbG9yXCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7Y3Vyc29yOiBjbGlja2FibGVSb3dzID8gJ3BvaW50ZXInIDogJ2F1dG8nfVwiXG4gICAgICAgICAgW3RhYmluZGV4XT1cImNsaWNrYWJsZVJvd3MgPyAwIDogLTFcIlxuICAgICAgPlxuICAgICAgICBAaWYgKHNlbGVjdGFibGUpIHtcbiAgICAgICAgICA8dGQgW2NBbGlnbl09XCJpdGVtPy5bJ19jZWxsUHJvcHMnXT8uX2FsbD8uYWxpZ25cIlxuICAgICAgICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hY3RpdmUgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgW2NUYWJsZUNvbG9yXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5jb2xvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPVwiaGFuZGxlUm93Q2hlY2tlZCgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtLl9zZWxlY3RlZCA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihpdGVtPy5fc2VsZWN0YWJsZSA9PT0gZmFsc2UpID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgIGNGb3JtQ2hlY2tJbnB1dFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnMkKCk7IHRyYWNrIGNvbHVtbjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1sndGFibGVEYXRhJ10gfHwgY29sdW1uRGVmYXVsdFRlbXBsYXRlOyBjb250ZXh0OiB7Y29sdW1uLCBpdGVtLCBjb2x1bW5OYW1lOiBnZXRDb2x1bW5LZXkoY29sdW1uKSwgdGRDb250ZW50OiBpdGVtW2NvbHVtbi5rZXldLCBjZWxsUHJvcHM6IGdldFRhYmxlRGF0YUNlbGxQcm9wcyhjb2x1bW4sIGl0ZW0pIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIDwvdHI+XG4gICAgICBAaWYgKHRlbXBsYXRlc1sndGFibGVEZXRhaWxzJ10pIHtcbiAgICAgICAgPCEtLSAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dEZXRhaWxzRGVmYXVsdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+LS0+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIFtuZ1N0eWxlXT1cIntib3JkZXJCb3R0b21XaWR0aDogMH1cIiBjbGFzcz1cInAtMFwiIHRhYmluZGV4PVwiLTFcIj48L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJwLTBcIj5cbiAgICAgICAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIFtuZ1N0eWxlXT1cIntib3JkZXI6IDB9XCIgY2xhc3M9XCJwLTBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNbJ3RhYmxlRGV0YWlscyddOyBjb250ZXh0OiB7aXRlbSwgaW5kZXg6IGl9XCIgLz5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgfVxuICAgIH1cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vSXRlbXNEZWZhdWx0VGVtcGxhdGVcIiAvPlxuICA8L3Rib2R5PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNjb2x1bW5EZWZhdWx0VGVtcGxhdGVcbiAgbGV0LWNlbGxQcm9wcz1cImNlbGxQcm9wc1wiXG4gIGxldC1jb2x1bW49XCJjb2x1bW5cIlxuICBsZXQtY29sdW1uTmFtZT1cImNvbHVtbk5hbWVcIlxuICBsZXQtaXRlbT1cIml0ZW1cIlxuICBsZXQtdGRDb250ZW50PVwidGRDb250ZW50XCJcbj5cbiAgQGlmICh0ZENvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIDx0ZCBbY0FsaWduXT1cImNlbGxQcm9wcz8uYWxpZ25cIlxuICAgICAgICBbY0h0bWxBdHRyXT1cImNlbGxQcm9wcz8uWydfYXR0cmlidXRlcyddID8/IHVuZGVmaW5lZFwiXG4gICAgICAgIFtjVGFibGVBY3RpdmVdPVwiY2VsbFByb3BzPy5bJ2FjdGl2ZSddXCJcbiAgICAgICAgW2NUYWJsZUNvbG9yXT1cImNlbGxQcm9wcz8uY29sb3IgPz8gY29sdW1uW2NvbHVtbk5hbWVdPy5fY29sUHJvcHM/LmNvbG9yID8/IHVuZGVmaW5lZFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldFRhYmxlRGF0YUNlbGxDbGFzcyhjb2x1bW4sIGl0ZW0pXCJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0VGFibGVEYXRhQ2VsbFN0eWxlcyhjb2x1bW4sIGl0ZW0pXCJcbiAgICA+XG4gICAgICB7eyB0ZENvbnRlbnQgfX1cbiAgICA8L3RkPlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48IS0tPG5nLXRlbXBsYXRlICNyb3dEZXRhaWxzRGVmYXVsdFRlbXBsYXRlIGxldC1pdGVtIGxldC1pbmRleD4tLT5cbjwhLS0gIDx0cj48dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgdGFiaW5kZXg9XCItMVwiIFtuZ1N0eWxlXT1cIntib3JkZXJCb3R0b21XaWR0aDogMH1cIj48L3RkPjwvdHI+LS0+XG48IS0tICA8dHIgY2xhc3M9XCJwLTBcIj4tLT5cbjwhLS0gICAgPHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cInAtMFwiIFtuZ1N0eWxlXT1cIntib3JkZXI6IDB9XCI+LS0+XG48IS0tICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlcz8udGFibGVEZXRhaWxzXCI+PC9uZy1jb250YWluZXI+LS0+XG48IS0tICAgIDwvdGQ+LS0+XG48IS0tICA8L3RyPi0tPlxuPCEtLTwvbmctdGVtcGxhdGU+LS0+XG5cbjxuZy10ZW1wbGF0ZSAjbm9JdGVtc0RlZmF1bHRUZW1wbGF0ZT5cbiAgQGlmICghY3VycmVudEl0ZW1zLmxlbmd0aCkge1xuICAgIDx0cj5cbiAgICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+e3sgbm9JdGVtc0xhYmVsIH19PC90ZD5cbiAgICA8L3RyPlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48IS0tdG9kbzogZmlsdGVySWNvbkN1c3RvbVRlbXBsYXRlLS0+XG48bmctdGVtcGxhdGUgI2ZpbHRlckljb25UZW1wbGF0ZT5cbiAgPHN2ZyBjbGFzcz1cImljb24gaWNvbi1jdXN0b20tc2l6ZVwiIHBvaW50ZXItZXZlbnRzPVwibm9uZVwiIHJvbGU9XCJpbWdcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIlxuICAgICAgIHdpZHRoPVwiMThcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgPHBvbHlnb25cbiAgICAgIGNsYXNzPVwiY2ktcHJpbWFyeVwiXG4gICAgICBmaWxsPVwidmFyKC0tY2ktcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKVwiXG4gICAgICBwb2ludHM9XCI0MCAxNiA0MCA1My44MjggMTA5LjAyNCAxMzYgMTUwLjgxNSAxMzYgNzYuODk2IDQ4IDQ1OS41MSA0OCAzMDQgMjQyLjM4OCAzMDQgNDAxLjM3MyAyNDEuMzczIDQ2NCAyNDAgNDY0IDI0MCAzNjggMjA4IDM2OCAyMDggNDk2IDI1NC42MjcgNDk2IDMzNiA0MTQuNjI3IDMzNiAyNTMuNjEyIDQ5NiA1My42MTIgNDk2IDE2IDQwIDE2XCI+XG4gICAgPC9wb2x5Z29uPlxuICAgIDxwb2x5Z29uXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIlxuICAgICAgZmlsbD1cInZhcigtLWNpLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcilcIlxuICAgICAgcG9pbnRzPVwiMTY2LjQwMyAyNDguMjI1IDIyNi44NjQgMTg3Ljc2MyAyMDQuMjM3IDE2NS4xMzUgMTQzLjc3NSAyMjUuNTk3IDgzLjMxMyAxNjUuMTM1IDYwLjY4NyAxODcuNzYzIDEyMS4xNDggMjQ4LjIyNSA2MC42ODcgMzA4LjY4NyA4My4zMTMgMzMxLjMxNCAxNDMuNzc1IDI3MC44NTIgMjA0LjIzNyAzMzEuMzE0IDIyNi44NjQgMzA4LjY4NyAxNjYuNDAzIDI0OC4yMjVcIj5cbiAgICA8L3BvbHlnb24+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
527
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbWFydC10YWJsZS9zbWFydC10YWJsZS9zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFFBQVEsRUFDUixlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFLTCxlQUFlLEVBRWYsTUFBTSxFQUVOLE1BQU0sRUFLUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQW1CdkMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsWUFBWSxFQUNaLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFB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ZnRlckNvbnRlbnRJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIEl0ZXJhYmxlRGlmZmVyLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIEtleVZhbHVlRGlmZmVyLFxuICBLZXlWYWx1ZURpZmZlcnMsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgc2lnbmFsLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgV3JpdGFibGVTaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIEpzb25QaXBlLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJVGFibGUgfSBmcm9tICcuLi8uLi90YWJsZS90YWJsZS50eXBlJztcbmltcG9ydCB7XG4gIElDb2x1bW4sXG4gIElDb2x1bW5GaWx0ZXIsXG4gIElDb2x1bW5GaWx0ZXJWYWx1ZSxcbiAgSUdyb3VwLFxuICBJSXRlbSxcbiAgSUl0ZW1JbnRlcm5hbCxcbiAgSVNtYXJ0VGFibGUsXG4gIElTb3J0ZXIsXG4gIElTb3J0ZXJWYWx1ZSxcbiAgSVRhYmxlRmlsdGVyLFxuICBJVGFibGVTZWN0aW9uUHJvcHMsXG4gIEl0ZW1zUGVyUGFnZVNlbGVjdCxcbiAgU29ydE9yZGVyXG59IGZyb20gJy4uL3NtYXJ0LXRhYmxlLnR5cGUnO1xuXG5pbXBvcnQge1xuICBnZXRDbGlja2VkQ29sdW1uTmFtZSxcbiAgZ2V0Q29sdW1uR3JvdXBzLFxuICBnZXRDb2x1bW5LZXksXG4gIGdldENvbHVtbk5hbWVzLFxuICBnZXRDb2x1bW5OYW1lc0Zyb21JdGVtcyxcbiAgZ2V0Q29sdW1ucyxcbiAgZ2V0VGFibGVEYXRhQ2VsbENsYXNzLFxuICBnZXRUYWJsZURhdGFDZWxsUHJvcHMsXG4gIGdldFRhYmxlRGF0YUNlbGxTdHlsZXNcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUudXRpbHMnO1xuXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9idXR0b24nO1xuaW1wb3J0IHsgRm9ybUNoZWNrSW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7IEVsZW1lbnRDb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnQtY292ZXInO1xuaW1wb3J0IHsgSHRtbEF0dHJpYnV0ZXNEaXJlY3RpdmUsIFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgU21hcnRQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc21hcnQtcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBUYWJsZUFjdGl2ZURpcmVjdGl2ZSwgVGFibGVDb2xvckRpcmVjdGl2ZSwgVGFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90YWJsZSc7XG5pbXBvcnQgeyBBbGlnbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBTbWFydFRhYmxlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc21hcnQtdGFibGUtZmlsdGVyL3NtYXJ0LXRhYmxlLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsdGVySW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi9zbWFydC10YWJsZS1maWx0ZXIvZmlsdGVyLWlucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTbWFydFRhYmxlSGVhZENvbXBvbmVudCB9IGZyb20gJy4uL3NtYXJ0LXRhYmxlLWhlYWQvc21hcnQtdGFibGUtaGVhZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRUYWJsZUl0ZW1zUGVyUGFnZVNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3Ivc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3IuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1zbWFydC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGV4cG9ydEFzOiAnY1NtYXJ0VGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgTmdDbGFzcyxcbiAgICBOZ1N0eWxlLFxuICAgIEFsaWduRGlyZWN0aXZlLFxuICAgIEJ1dHRvbkRpcmVjdGl2ZSxcbiAgICBFbGVtZW50Q292ZXJDb21wb25lbnQsXG4gICAgRmlsdGVySW5wdXREaXJlY3RpdmUsXG4gICAgRm9ybUNoZWNrSW5wdXREaXJlY3RpdmUsXG4gICAgSHRtbEF0dHJpYnV0ZXNEaXJlY3RpdmUsXG4gICAgU21hcnRQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgIFNtYXJ0VGFibGVGaWx0ZXJDb21wb25lbnQsXG4gICAgU21hcnRUYWJsZUhlYWRDb21wb25lbnQsXG4gICAgU21hcnRUYWJsZUl0ZW1zUGVyUGFnZVNlbGVjdG9yQ29tcG9uZW50LFxuICAgIFRhYmxlQWN0aXZlRGlyZWN0aXZlLFxuICAgIFRhYmxlQ29sb3JEaXJlY3RpdmUsXG4gICAgVGFibGVEaXJlY3RpdmUsXG4gICAgSnNvblBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTbWFydFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgSVNtYXJ0VGFibGUsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgcHJpdmF0ZSBrZXlWYWx1ZURpZmZlcnM6IEtleVZhbHVlRGlmZmVyc1xuICApIHtcbiAgICB0aGlzLml0ZW1zRGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLml0ZW1zKS5jcmVhdGUoKTtcbiAgICB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIgPSB0aGlzLml0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX2NvbHVtbkZpbHRlcmVkKS5jcmVhdGUoKTtcbiAgICB0aGlzLmNvbHVtRmlsdGVyVmFsdWVEaWZmZXIgPSB0aGlzLmtleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuY29sdW1uRmlsdGVyVmFsdWUpLmNyZWF0ZSgpO1xuICAgIHRoaXMuc29ydGVyVmFsdWVEaWZmZXIgPSB0aGlzLmtleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuc29ydGVyVmFsdWUpLmNyZWF0ZSgpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkQWxsU3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRBbGwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcmVhZG9ubHkgZ2V0Q29sdW1uS2V5ID0gZ2V0Q29sdW1uS2V5O1xuICByZWFkb25seSBnZXRUYWJsZURhdGFDZWxsQ2xhc3MgPSBnZXRUYWJsZURhdGFDZWxsQ2xhc3M7XG4gIHJlYWRvbmx5IGdldFRhYmxlRGF0YUNlbGxQcm9wcyA9IGdldFRhYmxlRGF0YUNlbGxQcm9wcztcbiAgcmVhZG9ubHkgZ2V0VGFibGVEYXRhQ2VsbFN0eWxlcyA9IGdldFRhYmxlRGF0YUNlbGxTdHlsZXM7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRBbGxTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuIHwgJ2luZGV0ZXJtaW5hdGUnPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpdGVtc0RpZmZlcjogSXRlcmFibGVEaWZmZXI8YW55PiB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbXNGaWx0ZXJlZERpZmZlcjogSXRlcmFibGVEaWZmZXI8YW55PiB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29sdW1GaWx0ZXJWYWx1ZURpZmZlcjogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3J0ZXJWYWx1ZURpZmZlcjogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IHwgbnVsbDtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICBzZXQgYWN0aXZlUGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fYWN0aXZlUGFnZSA9IHZhbHVlIHx8IDE7XG4gICAgdGhpcy5hY3RpdmVQYWdlQ2hhbmdlLmVtaXQodGhpcy5fYWN0aXZlUGFnZSk7XG4gIH1cblxuICBnZXQgYWN0aXZlUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlUGFnZSA9IDE7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFuZXIgPSBmYWxzZTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2xpY2thYmxlUm93cyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjb2x1bW5zKHZhbHVlOiAoc3RyaW5nIHwgSUNvbHVtbiB8IElHcm91cClbXSkge1xuICAgIGNvbnN0IGNvbE9iamVjdHMgPSB2YWx1ZS5tYXAoKGNvbHVtbikgPT4gKHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnID8geyBrZXk6IGNvbHVtbiB9IDogeyAuLi5jb2x1bW4gfSkpO1xuICAgIGNvbnN0IGNvbHVtbnM6IElDb2x1bW5bXSA9IGdldENvbHVtbnMoY29sT2JqZWN0cyk7XG4gICAgdGhpcy5jb2x1bW5zJC5zZXQoY29sdW1ucyk7XG5cbiAgICAvLyB0b2RvOiBJbnB1dCBjb2x1bW5Hcm91cHMgLSBzZXBhcmF0aW9uP1xuICAgIC8vIGNvbnNvbGUubG9nKGdldENvbHVtbkdyb3Vwcyhjb2xPYmplY3RzID8/IFtdKSk7XG4gICAgY29uc3QgZ3JvdXBzID0gZ2V0Q29sdW1uR3JvdXBzKHZhbHVlID8/IFtdKTtcbiAgICB0aGlzLmNvbHVtbkdyb3VwcyQuc2V0KGdyb3Vwcyk7XG4gIH1cblxuICBnZXQgY29sdW1ucygpOiBJQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMkKCk7XG4gIH1cblxuICBjb2x1bW5zJDogV3JpdGFibGVTaWduYWw8SUNvbHVtbltdPiA9IHNpZ25hbChbXSk7XG4gIGNvbHVtbkdyb3VwcyQ6IFdyaXRhYmxlU2lnbmFsPElHcm91cFtdW10+ID0gc2lnbmFsKFtdKTtcbiAgc2hvd0dyb3VwcyQgPSBjb21wdXRlZCgoKSA9PiAhIXRoaXMuY29sdW1uR3JvdXBzJCgpLmxlbmd0aCk7XG5cbiAgQElucHV0KCkgY29sdW1uRmlsdGVyPzogYm9vbGVhbiB8IElDb2x1bW5GaWx0ZXI7XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbHVtbkZpbHRlclZhbHVlKHZhbHVlOiBJQ29sdW1uRmlsdGVyVmFsdWUpIHtcbiAgICBpZiAodGhpcy5jb2x1bUZpbHRlclZhbHVlRGlmZmVyKSB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5jb2x1bUZpbHRlclZhbHVlRGlmZmVyLmRpZmYodmFsdWUpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uRmlsdGVyVmFsdWUgPSB7IC4uLnZhbHVlIH07XG4gICAgICAgIHRoaXMuY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UuZW1pdCh7IC4uLnRoaXMuX2NvbHVtbkZpbHRlclZhbHVlIH0pO1xuICAgICAgICB0aGlzLnRhYmxlRmlsdGVyZWQ7IC8vIGVtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbHVtbkZpbHRlclZhbHVlKCk6IElDb2x1bW5GaWx0ZXJWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkZpbHRlclZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29sdW1uRmlsdGVyVmFsdWU6IElDb2x1bW5GaWx0ZXJWYWx1ZSA9IHt9O1xuXG4gIEBJbnB1dCgpIGNvbHVtblNvcnRlcj86IGJvb2xlYW4gfCBJU29ydGVyO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmb290ZXIgPSBmYWxzZTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGVhZGVyID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGl0ZW1zKHZhbHVlOiBJSXRlbVtdKSB7XG4gICAgaWYgKHRoaXMuaXRlbXNEaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRGlmZmVyLmRpZmYodmFsdWUpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLnNldEl0ZW1zKHZhbHVlKSBhcyBUeXBlPElJdGVtSW50ZXJuYWw+W107XG4gICAgICAgIHRoaXMuaXRlbXMkLnNldCh0aGlzLl9pdGVtcyk7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY29sdW1ucyA9IGdldENvbHVtbk5hbWVzRnJvbUl0ZW1zKHRoaXMuaXRlbXMkKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuXG4gIGl0ZW1zJCA9IHNpZ25hbChbXSBhcyBJSXRlbUludGVybmFsW10pO1xuICBwcml2YXRlIF9pdGVtczogSUl0ZW1JbnRlcm5hbFtdID0gW10gYXMgVHlwZTxJSXRlbUludGVybmFsPltdO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gIHNldCBpdGVtc1BlclBhZ2UodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2U7XG4gIH1cblxuICBwcml2YXRlIF9pdGVtc1BlclBhZ2U6IG51bWJlciA9IDEwO1xuXG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZUxhYmVsOiBzdHJpbmcgPSAnSXRlbXMgcGVyIHBhZ2U6JztcbiAgQElucHV0KCkgaXRlbXNQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCA1MF07XG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZVNlbGVjdD86IGJvb2xlYW4gfCBJdGVtc1BlclBhZ2VTZWxlY3Q7XG4gIEBJbnB1dCgpIGxvYWRpbmc/OiBib29sZWFuO1xuICBASW5wdXQoKSBub0l0ZW1zTGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gPSAnTm8gaXRlbXMgZm91bmQnO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwYWdpbmF0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCBzZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VsZWN0YWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGU7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNlbGVjdEFsbCA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2V0IHNvcnRlclZhbHVlKHZhbHVlOiBJU29ydGVyVmFsdWUpIHtcbiAgICBpZiAodGhpcy5zb3J0ZXJWYWx1ZURpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuc29ydGVyVmFsdWVEaWZmZXIuZGlmZih2YWx1ZSk7XG4gICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICB0aGlzLl9zb3J0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNvcnRlclZhbHVlQ2hhbmdlLmVtaXQoeyAuLi52YWx1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc29ydGVyVmFsdWUoKTogSVNvcnRlclZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydGVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zb3J0ZXJWYWx1ZTogSVNvcnRlclZhbHVlID0ge307XG5cbiAgQElucHV0KClcbiAgc2V0IHRhYmxlRmlsdGVyKGZpbHRlcikge1xuICAgIHRoaXMuX3RhYmxlRmlsdGVyID0gZmlsdGVyO1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy50YWJsZUZpbHRlckxhYmVsID0gdHlwZW9mIGZpbHRlci5sYWJlbCA9PT0gJ3N0cmluZycgPyBmaWx0ZXIubGFiZWwgOiB0aGlzLnRhYmxlRmlsdGVyTGFiZWw7XG4gICAgICB0aGlzLnRhYmxlRmlsdGVyUGxhY2Vob2xkZXIgPVxuICAgICAgICB0eXBlb2YgZmlsdGVyLnBsYWNlaG9sZGVyID09PSAnc3RyaW5nJyA/IGZpbHRlci5wbGFjZWhvbGRlciA6IHRoaXMudGFibGVGaWx0ZXJQbGFjZWhvbGRlcjtcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9IHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdzdHJpbmcnID8gZmlsdGVyLnZhbHVlIDogdGhpcy50YWJsZUZpbHRlclZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJsZUZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVGaWx0ZXI7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZUZpbHRlcj86IGJvb2xlYW4gfCBJVGFibGVGaWx0ZXI7XG5cbiAgQElucHV0KCkgdGFibGVGaWx0ZXJMYWJlbCA9ICdGaWx0ZXI6JztcbiAgQElucHV0KCkgdGFibGVGaWx0ZXJQbGFjZWhvbGRlciA9ICd0eXBlIHN0cmluZy4uLic7XG5cbiAgQElucHV0KClcbiAgc2V0IHRhYmxlRmlsdGVyVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLl90YWJsZUZpbHRlclZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFibGVGaWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy50YWJsZUZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgdGhpcy50YWJsZUZpbHRlcmVkOyAvLyBlbWl0cyB0YWJsZUZpbHRlcmVkIGNoYW5nZVxuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJsZUZpbHRlclZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlRmlsdGVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZUZpbHRlclZhbHVlOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSB0YWJsZUJvZHlQcm9wcz86IElUYWJsZVNlY3Rpb25Qcm9wcyA9IHt9O1xuICBASW5wdXQoKSB0YWJsZUZvb3RQcm9wcz86IElUYWJsZVNlY3Rpb25Qcm9wcyA9IHt9O1xuICBASW5wdXQoKSB0YWJsZUhlYWRQcm9wcz86IElUYWJsZVNlY3Rpb25Qcm9wcyA9IHt9O1xuICBASW5wdXQoKSB0YWJsZVByb3BzPzogSVRhYmxlID0ge307XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJSXRlbVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUl0ZW1bXT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNvcnRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SVNvcnRlclZhbHVlPiA9IG5ldyBFdmVudEVtaXR0ZXI8SVNvcnRlclZhbHVlPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aXZlUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJQ29sdW1uRmlsdGVyVmFsdWU+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29sdW1uRmlsdGVyVmFsdWU+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBmaWx0ZXJlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUl0ZW1JbnRlcm5hbFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUl0ZW1JbnRlcm5hbFtdPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdGFibGVGaWx0ZXJWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlSWREaXJlY3RpdmUpIGNvbHVtblRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUZW1wbGF0ZUlkRGlyZWN0aXZlPjtcbiAgdGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIH0gPSB7IHRhYmxlRGV0YWlsczogbnVsbCwgdGFibGVEYXRhOiBudWxsIH07XG4gIGNvbHVtbkZpbHRlclRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB9ID0ge307XG4gIGNvbHVtbkxhYmVsVGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIH0gPSB7fTtcbiAgc3VtbWFyeVJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwgPSBudWxsO1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtblRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgaWYgKGNoaWxkLmlkLnN0YXJ0c1dpdGgoJ2NvbHVtbkZpbHRlcl8nKSkge1xuICAgICAgICB0aGlzLmNvbHVtbkZpbHRlclRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkLmlkLnN0YXJ0c1dpdGgoJ2NvbHVtbkxhYmVsXycpKSB7XG4gICAgICAgIHRoaXMuY29sdW1uTGFiZWxUZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZC5pZCA9PT0gJ3RhYmxlU3VtbWFyeVJvdycpIHtcbiAgICAgICAgdGhpcy5zdW1tYXJ5Um93VGVtcGxhdGUgPSBjaGlsZC50ZW1wbGF0ZVJlZjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgfSk7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJUZW1wbGF0ZXMgPSB7IC4uLnRoaXMuY29sdW1uRmlsdGVyVGVtcGxhdGVzIH07XG4gICAgdGhpcy5jb2x1bW5MYWJlbFRlbXBsYXRlcyA9IHsgLi4udGhpcy5jb2x1bW5MYWJlbFRlbXBsYXRlcyB9O1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkQWxsKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gdHJ1ZSk7XG4gICAgY29uc3QgdW5zZWxlY3RlZCA9IHRoaXMuaXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5fc2VsZWN0ZWQgPT09IGZhbHNlKTtcbiAgICByZXR1cm4gc2VsZWN0ZWQgJiYgdW5zZWxlY3RlZCA/ICdpbmRldGVybWluYXRlJyA6IHNlbGVjdGVkO1xuICB9XG5cbiAgZ2V0IHRhYmxlRmlsdGVyU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA/IHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA6ICcnO1xuICB9XG5cbiAgZ2V0IGNvbHVtbkZpbHRlclN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkZpbHRlclZhbHVlID8gdGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSA6IHt9O1xuICB9XG5cbiAgZ2V0IG51bWJlck9mUGFnZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlID8gTWF0aC5jZWlsKHRoaXMuc29ydGVkSXRlbXMubGVuZ3RoIC8gdGhpcy5faXRlbXNQZXJQYWdlKSA6IDE7XG4gIH1cblxuICBnZXQgY29sc3BhbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlID8gdGhpcy5yYXdDb2x1bW5OYW1lcyQoKS5sZW5ndGggKyAxIDogdGhpcy5yYXdDb2x1bW5OYW1lcyQoKS5sZW5ndGg7XG4gIH1cblxuICBnZXQgZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlUGFnZSA/ICh0aGlzLl9hY3RpdmVQYWdlIC0gMSkgKiB0aGlzLl9pdGVtc1BlclBhZ2UgOiAwO1xuICB9XG5cbiAgZ2V0IGl0ZW1zT25BY3RpdmVQYWdlKCk6IElJdGVtSW50ZXJuYWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydGVkSXRlbXMuc2xpY2UoXG4gICAgICB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4LFxuICAgICAgdGhpcy5maXJzdEl0ZW1PbkFjdGl2ZVBhZ2VJbmRleCArIHRoaXMuX2l0ZW1zUGVyUGFnZVxuICAgICk7XG4gIH1cblxuICBnZXQgY3VycmVudEl0ZW1zKCk6IElJdGVtSW50ZXJuYWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhZ2UgPyB0aGlzLml0ZW1zT25BY3RpdmVQYWdlIDogKHRoaXMuc29ydGVkSXRlbXMgPz8gW10pO1xuICB9XG5cbiAgcmF3Q29sdW1uTmFtZXMkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBnZXRDb2x1bW5OYW1lcyh0aGlzLmNvbHVtbnMkKCksIHRoaXMuaXRlbXMkKCkpO1xuICB9KTtcblxuICBpdGVtc0RhdGFDb2x1bW5zJCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5yYXdDb2x1bW5OYW1lcyQoKS5maWx0ZXIoKG5hbWUpID0+IGdldENvbHVtbk5hbWVzRnJvbUl0ZW1zKHRoaXMuaXRlbXMkKCkpLmluY2x1ZGVzKG5hbWUpKVxuICApO1xuXG4gIGdldCBzb3J0ZWRJdGVtcygpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGNvbnN0IGNvbHVtbktleSA9IHRoaXMuc29ydGVyVmFsdWUuY29sdW1uO1xuICAgIGlmIChcbiAgICAgICFjb2x1bW5LZXkgfHxcbiAgICAgICF0aGlzLml0ZW1zRGF0YUNvbHVtbnMkKCkuaW5jbHVkZXMoY29sdW1uS2V5KSB8fFxuICAgICAgKHRoaXMuY29sdW1uU29ydGVyICYmIHR5cGVvZiB0aGlzLmNvbHVtblNvcnRlciA9PT0gJ29iamVjdCcgJiYgdGhpcy5jb2x1bW5Tb3J0ZXIuZXh0ZXJuYWwpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlcmVkO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZUZpbHRlcmVkID0gWy4uLnRoaXMudGFibGVGaWx0ZXJlZF07XG5cbiAgICAvLyBpZiB2YWx1ZXMgaW4gY29sdW1uIGFyZSB0byBiZSBzb3J0ZWQgYnkgbnVtZXJpYyB2YWx1ZSB0aGV5IGFsbCBoYXZlIHRvIGJlIGEgdHlwZSBvZiBudW1iZXJcbiAgICBjb25zdCBmbGlwID0gdGhpcy5zb3J0ZXJWYWx1ZS5zdGF0ZSA9PT0gJ2FzYycgPyAxIDogdGhpcy5zb3J0ZXJWYWx1ZS5zdGF0ZSA9PT0gJ2Rlc2MnID8gLTEgOiAwO1xuXG4gICAgaWYgKGZsaXAgPT09IDApIHtcbiAgICAgIHJldHVybiB0YWJsZUZpbHRlcmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgIGlmICh0eXBlb2YgY3VycmVudENvbHVtbj8uc29ydGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBzb3J0ZWQgPSB0YWJsZUZpbHRlcmVkLnNsaWNlKCkuc29ydChjdXJyZW50Q29sdW1uLnNvcnRlcik7XG4gICAgICByZXR1cm4gZmxpcCA8IDAgPyBzb3J0ZWQucmV2ZXJzZSgpIDogc29ydGVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBhcmVGbiA9IChpdGVtMTogeyBbeDogc3RyaW5nXTogYW55IH0sIGl0ZW0yOiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUxID0gaXRlbTFbY29sdW1uS2V5XTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IGl0ZW0yW2NvbHVtbktleV07XG4gICAgICBjb25zdCBhID0gdHlwZW9mIHZhbHVlMSA9PT0gJ251bWJlcicgPyB2YWx1ZTEgOiBTdHJpbmcodmFsdWUxKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgYiA9IHR5cGVvZiB2YWx1ZTIgPT09ICdudW1iZXInID8gdmFsdWUyIDogU3RyaW5nKHZhbHVlMikudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBhID4gYiA/IDEgKiBmbGlwIDogYiA+IGEgPyAtMSAqIGZsaXAgOiAwO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGFibGVGaWx0ZXJlZC5zbGljZSgpLnNvcnQoY29tcGFyZUZuKTtcbiAgfVxuXG4gIGdldCB0YWJsZUZpbHRlckV2ZW50KCk6ICdjaGFuZ2UnIHwgJ2lucHV0JyB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmxhenkgPyAnY2hhbmdlJyA6ICdpbnB1dCc7XG4gIH1cblxuICBwcml2YXRlIF9jb2x1bW5GaWx0ZXJlZDogSUl0ZW1JbnRlcm5hbFtdID0gW107XG5cbiAgZ2V0IGNvbHVtbkZpbHRlcmVkKCk6IElJdGVtSW50ZXJuYWxbXSB7XG4gICAgbGV0IF9pdGVtcyA9IHRoaXMuX2l0ZW1zO1xuICAgIGlmICh0aGlzLmNvbHVtbkZpbHRlciAmJiB0eXBlb2YgdGhpcy5jb2x1bW5GaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMuY29sdW1uRmlsdGVyLmV4dGVybmFsKSB7XG4gICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJlZCA9IF9pdGVtcztcbiAgICAgIHJldHVybiBfaXRlbXM7XG4gICAgfVxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY29sdW1uRmlsdGVyU3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgX2l0ZW1zID0gX2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gdmFsdWUoaXRlbVtrZXldKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5rZXkgPT09IGtleSk7XG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnRDb2x1bW4/LmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKFxuICAgICAgICAgIChpdGVtKSA9PiAodHlwZW9mIGN1cnJlbnRDb2x1bW4uZmlsdGVyID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnRDb2x1bW4uZmlsdGVyKGl0ZW0sIHZhbHVlKSkgPz8gIXZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29sdW1uRmlsdGVyID0gU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNvbHVtbkZpbHRlciAmJiB0aGlzLml0ZW1zRGF0YUNvbHVtbnMkKCkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBTdHJpbmcoaXRlbVtrZXldKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNvbHVtbkZpbHRlcikpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX2NvbHVtbkZpbHRlcmVkID0gX2l0ZW1zO1xuICAgIHJldHVybiBfaXRlbXM7XG4gIH1cblxuICBnZXQgdGFibGVGaWx0ZXJlZCgpOiBJSXRlbUludGVybmFsW10ge1xuICAgIGxldCBpdGVtcyA9IHRoaXMuY29sdW1uRmlsdGVyZWQ7XG4gICAgaWYgKFxuICAgICAgIXRoaXMudGFibGVGaWx0ZXJTdGF0ZSB8fFxuICAgICAgKHRoaXMudGFibGVGaWx0ZXIgJiYgdHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXIuZXh0ZXJuYWwpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIuZGlmZihpdGVtcyk7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMudGFibGVGaWx0ZXJTdGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHZhbHVlQ29udGFpbkZpbHRlciA9ICh2YWw6IGFueSkgPT4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHtcbiAgICAgIHJldHVybiAhIXRoaXMuaXRlbXNEYXRhQ29sdW1ucyQoKS5maW5kKChrZXkpID0+IHZhbHVlQ29udGFpbkZpbHRlcihpdGVtW2tleV0pKTtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyKSB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyLmRpZmYoaXRlbXMpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBnZXQgaXNGaWx0ZXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlclN0YXRlIHx8IHRoaXMuc29ydGVyVmFsdWU/LmNvbHVtbiB8fCBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1uRmlsdGVyU3RhdGUpLmpvaW4oJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJdGVtcyhpdGVtczogSUl0ZW1bXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTogSUl0ZW0sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgX19faWQ6IGl0ZW1bJ19fX2lkJ10gPz8gaW5kZXggfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gPElJdGVtSW50ZXJuYWw+W107XG4gIH1cblxuICBoYW5kbGVTb3J0Q2hhbmdlKCRldmVudDogeyBjb2x1bW5LZXk6IHN0cmluZzsgaW5kZXg6IG51bWJlcjsgb3JkZXI/OiBTb3J0T3JkZXIgfSkge1xuICAgIHRoaXMuaGFuZGxlU29ydGVyQ2hhbmdlKCRldmVudC5jb2x1bW5LZXksICRldmVudC5pbmRleCwgJGV2ZW50Lm9yZGVyKTtcbiAgfVxuXG4gIGlzU29ydGFibGUoaTogbnVtYmVyKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaXNEYXRhQ29sdW1uID0gdGhpcy5pdGVtc0RhdGFDb2x1bW5zJCgpLmluY2x1ZGVzKHRoaXMucmF3Q29sdW1uTmFtZXMkKClbaV0pO1xuICAgIGxldCBjb2x1bW47XG4gICAgaWYgKHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29sdW1uU29ydGVyICYmXG4gICAgICAoIXRoaXMuY29sdW1ucy5sZW5ndGggfHxcbiAgICAgICAgdHlwZW9mIGNvbHVtbiAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgKHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmICh0eXBlb2YgY29sdW1uLnNvcnRlciA9PT0gJ3VuZGVmaW5lZCcgfHwgY29sdW1uLnNvcnRlcikpKSAmJlxuICAgICAgaXNEYXRhQ29sdW1uXG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZVNvcnRlckNoYW5nZShjb2x1bW46IHN0cmluZywgaW5kZXg6IG51bWJlciwgb3JkZXI/OiBTb3J0T3JkZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTb3J0YWJsZShpbmRleCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy9pZiBjb2x1bW4gY2hhbmdlZCBvciBzb3J0IHdhcyBkZXNjZW5kaW5nIGNoYW5nZSBhc2MgdG8gdHJ1ZVxuICAgIGNvbnN0IHNvcnRlclN0YXRlID0geyAuLi50aGlzLnNvcnRlclZhbHVlIH07XG5cbiAgICBpZiAoc29ydGVyU3RhdGUuY29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgIGNvbnN0IHJlc2V0dGFibGUgPVxuICAgICAgICB0aGlzLmNvbHVtblNvcnRlciA9PT0gdHJ1ZSB8fFxuICAgICAgICAodHlwZW9mIHRoaXMuY29sdW1uU29ydGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgIHRoaXMuY29sdW1uU29ydGVyLnJlc2V0YWJsZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgICB0aGlzLmNvbHVtblNvcnRlci5yZXNldHRhYmxlICE9PSBmYWxzZSk7XG4gICAgICBjb25zdCBzdGF0ZSA9IHNvcnRlclN0YXRlLnN0YXRlO1xuICAgICAgaWYgKG9yZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc29ydGVyU3RhdGUuc3RhdGUgPSBzdGF0ZSA9PT0gMCA/ICdhc2MnIDogc3RhdGUgPT09ICdhc2MnID8gJ2Rlc2MnIDogcmVzZXR0YWJsZSA/IDAgOiAnYXNjJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvcnRlclN0YXRlLnN0YXRlID0gb3JkZXIgPT09IDAgJiYgIXJlc2V0dGFibGUgPyBzdGF0ZSA6IG9yZGVyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzb3J0ZXJTdGF0ZS5jb2x1bW4gPSBjb2x1bW47XG4gICAgICBzb3J0ZXJTdGF0ZS5zdGF0ZSA9ICdhc2MnO1xuICAgIH1cbiAgICB0aGlzLnNvcnRlclZhbHVlID0geyAuLi5zb3J0ZXJTdGF0ZSB9O1xuICB9XG5cbiAgc2V0QWN0aXZlUGFnZSgkZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZlUGFnZSA9ICRldmVudDtcbiAgfVxuXG4gIGhhbmRsZUNvbHVtbkZpbHRlckNoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCB2YWx1ZSwgdHlwZSB9ID0gJGV2ZW50O1xuICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICB0aGlzLmNvbHVtbkZpbHRlclZhbHVlID0geyAuLi50aGlzLmNvbHVtbkZpbHRlclZhbHVlLCBbYCR7Y29sdW1ufWBdOiB2YWx1ZSB9O1xuICB9XG5cbiAgaGFuZGxlVGFibGVGaWx0ZXJDaGFuZ2UoJGV2ZW50OiB7IHZhbHVlOiBzdHJpbmc7IHR5cGU6IHN0cmluZyB9KSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgdHlwZSB9ID0gJGV2ZW50O1xuICAgIGNvbnN0IGlzTGF6eSA9IHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmxhenkgPT09IHRydWU7XG4gICAgaWYgKCgoaXNMYXp5ICYmIHR5cGUgPT09ICdpbnB1dCcpIHx8ICghaXNMYXp5ICYmIHR5cGUgPT09ICdjaGFuZ2UnKSkgJiYgdmFsdWUubGVuZ3RoICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGNsZWFuKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPSB7fTtcbiAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWUgPSAnJztcbiAgICB0aGlzLnNvcnRlclZhbHVlID0ge307XG4gICAgdGhpcy50YWJsZUZpbHRlcmVkOyAvL2VtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXG4gIH1cblxuICBoYW5kbGVJdGVtc1BlclBhZ2VDaGFuZ2UodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5faXRlbXNQZXJQYWdlKSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XG4gICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaXRlbXNQZXJQYWdlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVJvd0NoZWNrZWQoJGV2ZW50OiBFdmVudCwgaXRlbTogSUl0ZW1JbnRlcm5hbCkge1xuICAgIGl0ZW0uX3NlbGVjdGVkID0gaXRlbS5fc2VsZWN0YWJsZSAhPT0gZmFsc2UgJiYgKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5fc2VsZWN0ZWQgPT09IHRydWUpKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBbGxTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZEFsbCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBoYW5kbGVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLl9pdGVtcyA9IHRoaXMuaXRlbXMubWFwKChpdGVtOiBJSXRlbUludGVybmFsKSA9PiB7XG4gICAgICByZXR1cm4geyAuLi5pdGVtLCBfc2VsZWN0ZWQ6IGl0ZW0uX3NlbGVjdGFibGUgIT09IGZhbHNlID8gJGV2ZW50IDogISFpdGVtLl9zZWxlY3RlZCB9O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRBbGxTdWJqZWN0Lm5leHQoJGV2ZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLl9zZWxlY3RlZCA9PT0gdHJ1ZSkpO1xuICAgICAgdGhpcy5zZWxlY3RlZEFsbFN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkQWxsKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGhhbmRsZVJvd0NsaWNrKHBhcmFtOiB7ICRldmVudDogTW91c2VFdmVudDsgaXRlbTogSUl0ZW1JbnRlcm5hbDsgaTogbnVtYmVyIH0pIHtcbiAgICBjb25zdCB7ICRldmVudCwgaXRlbSwgaSB9ID0geyAuLi5wYXJhbSB9O1xuICAgIGNvbnN0IHRhcmdldCA9ICRldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IHRoaXMucmF3Q29sdW1uTmFtZXMkKCk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuX3NlbGVjdGFibGU7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IGdldENsaWNrZWRDb2x1bW5OYW1lKHRhcmdldCwgY29sdW1uTmFtZXMsIHNlbGVjdGFibGUpO1xuICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IGl0ZW06IGl0ZW0sIGluZGV4OiBpICsgdGhpcy5maXJzdEl0ZW1PbkFjdGl2ZVBhZ2VJbmRleCwgY29sdW1uTmFtZSwgZXZlbnQ6ICRldmVudCB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1uRmlsdGVyVmFsdWUnXSkge1xuICAgICAgY29uc3QgY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWydjb2x1bW5GaWx0ZXJWYWx1ZSddO1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSA/PyB7fSkubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3RhYmxlRmlsdGVyVmFsdWUnXSkge1xuICAgICAgY29uc3QgdGFibGVGaWx0ZXJWYWx1ZUNoYW5nZSA9IGNoYW5nZXNbJ3RhYmxlRmlsdGVyVmFsdWUnXTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRhYmxlRmlsdGVyVmFsdWVDaGFuZ2UuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiQGlmIChpdGVtc1BlclBhZ2VTZWxlY3QgfHwgdGFibGVGaWx0ZXIgfHwgY2xlYW5lciB8fCB0ZW1wbGF0ZXNbJ3RhYmxlQ3VzdG9tSGVhZGVyJ10pIHtcbiAgPGRpdiBjbGFzcz1cInJvdyBteS0yIG14LTBcIj5cbiAgICBAaWYgKHRhYmxlRmlsdGVyKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcC0wXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZUZpbHRlclRlbXBsYXRlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGNsZWFuZXIpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlQ2xlYW5lclRlbXBsYXRlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzWyd0YWJsZUN1c3RvbUhlYWRlciddIHx8IHRhYmxlQ3VzdG9tSGVhZGVyVGVtcGxhdGVcIiAvPlxuXG4gICAgPG5nLXRlbXBsYXRlICN0YWJsZUZpbHRlclRlbXBsYXRlPlxuICAgICAgQGlmICh0YWJsZUZpbHRlcikge1xuICAgICAgICA8Yy1zbWFydC10YWJsZS1maWx0ZXJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlVGFibGVGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW2RlbGF5XT1cIjMwMFwiXG4gICAgICAgICAgW2ZpbHRlckxhYmVsXT1cInRhYmxlRmlsdGVyTGFiZWxcIlxuICAgICAgICAgIFtmaWx0ZXJQbGFjZWhvbGRlcl09XCJ0YWJsZUZpbHRlclBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBbb25FdmVudF09XCJ0YWJsZUZpbHRlckV2ZW50XCJcbiAgICAgICAgICBbdmFsdWVdPVwidGFibGVGaWx0ZXJTdGF0ZVwiXG4gICAgICAgICAgY0ZpbHRlcklucHV0XG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVDbGVhbmVyVGVtcGxhdGU+XG4gICAgICBAaWYgKGNsZWFuZXIpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJjbGVhbigkZXZlbnQpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzRmlsdGVyZWRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbXMtMSc6IHRhYmxlRmlsdGVyfVwiXG4gICAgICAgICAgY0J1dHRvblxuICAgICAgICAgIGNvbG9yPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVySWNvblRlbXBsYXRlXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVDdXN0b21IZWFkZXJUZW1wbGF0ZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTAgbXMtYXV0b1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY3VzdG9tSGVhZGVyXVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbn1cbjxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICA8dGFibGUgW2FsaWduXT1cInRhYmxlUHJvcHM/LmFsaWduXCJcbiAgICAgICAgIFtib3JkZXJDb2xvcl09XCJ0YWJsZVByb3BzPy5ib3JkZXJDb2xvclwiXG4gICAgICAgICBbYm9yZGVyZWRdPVwidGFibGVQcm9wcz8uYm9yZGVyZWQgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgIFtib3JkZXJsZXNzXT1cInRhYmxlUHJvcHM/LmJvcmRlcmxlc3MgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVQcm9wcz8uY29sb3JcIlxuICAgICAgICAgW2NhcHRpb25dPVwidGFibGVQcm9wcz8uY2FwdGlvblwiXG4gICAgICAgICBbY29sb3JdPVwidGFibGVQcm9wcz8uY29sb3JcIlxuICAgICAgICAgW2hvdmVyXT1cInRhYmxlUHJvcHM/LmhvdmVyID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICBbcmVzcG9uc2l2ZV09XCJ0YWJsZVByb3BzPy5yZXNwb25zaXZlXCJcbiAgICAgICAgIFtzbWFsbF09XCJ0YWJsZVByb3BzPy5zbWFsbCA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgW3N0cmlwZWRdPVwidGFibGVQcm9wcz8uc3RyaXBlZCA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgY1RhYmxlXG4gID5cbiAgICBAaWYgKGhlYWRlcikge1xuICAgICAgPGMtc21hcnQtdGFibGUtaGVhZFxuICAgICAgICAoY29sdW1uRmlsdGVyU3RhdGVDaGFuZ2UpPVwiaGFuZGxlQ29sdW1uRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc2VsZWN0QWxsQ2hhbmdlKT1cImhhbmRsZVNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNvcnRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtjQWxpZ25dPVwidGFibGVIZWFkUHJvcHM/LmFsaWduXCJcbiAgICAgICAgW2NIdG1sQXR0cl09XCJ0YWJsZUhlYWRQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZUhlYWRQcm9wcz8uY29sb3JcIlxuICAgICAgICBbY29sdW1uRmlsdGVyU3RhdGVdPVwiY29sdW1uRmlsdGVyU3RhdGVcIlxuICAgICAgICBbY29sdW1uRmlsdGVyVGVtcGxhdGVzXT1cImNvbHVtbkZpbHRlclRlbXBsYXRlc1wiXG4gICAgICAgIFtjb2x1bW5GaWx0ZXJdPVwiY29sdW1uRmlsdGVyXCJcbiAgICAgICAgW2NvbHVtbkdyb3Vwc109XCJjb2x1bW5Hcm91cHMkKClcIlxuICAgICAgICBbY29sdW1uTGFiZWxUZW1wbGF0ZXNdPVwiY29sdW1uTGFiZWxUZW1wbGF0ZXNcIlxuICAgICAgICBbY29sdW1uU29ydGVyXT1cImNvbHVtblNvcnRlclwiXG4gICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnMkKClcIlxuICAgICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiXG4gICAgICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxuICAgICAgICBbc2VsZWN0ZWRBbGxdPVwiKHNlbGVjdGVkQWxsU3ViamVjdCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgIFtzaG93R3JvdXBzXT1cInNob3dHcm91cHMkKClcIlxuICAgICAgICBbc29ydGVyVmFsdWVdPVwic29ydGVyVmFsdWVcIlxuICAgICAgLz5cbiAgICB9XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGJvZHlEZWZhdWx0VGVtcGxhdGVcIiAvPlxuXG4gICAgQGlmIChzdW1tYXJ5Um93VGVtcGxhdGUgJiYgIWZvb3Rlcikge1xuICAgICAgPHRmb290PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1bW1hcnlSb3dUZW1wbGF0ZVwiIC8+XG4gICAgICA8L3Rmb290PlxuICAgIH1cbiAgICBAaWYgKGZvb3Rlcikge1xuICAgICAgPGMtc21hcnQtdGFibGUtaGVhZFxuICAgICAgICAoc2VsZWN0QWxsQ2hhbmdlKT1cImhhbmRsZVNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNvcnRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtjQWxpZ25dPVwidGFibGVGb290UHJvcHM/LmFsaWduXCJcbiAgICAgICAgW2NIdG1sQXR0cl09XCJ0YWJsZUZvb3RQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZUZvb3RQcm9wcz8uY29sb3JcIlxuICAgICAgICBbY29sdW1uRmlsdGVyVGVtcGxhdGVzXT1cImNvbHVtbkZpbHRlclRlbXBsYXRlc1wiXG4gICAgICAgIFtjb2x1bW5MYWJlbFRlbXBsYXRlc109XCJjb2x1bW5MYWJlbFRlbXBsYXRlc1wiXG4gICAgICAgIFtjb2x1bW5Tb3J0ZXJdPVwiY29sdW1uU29ydGVyXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1ucyQoKVwiXG4gICAgICAgIFtzZWxlY3RBbGxdPVwic2VsZWN0QWxsXCJcbiAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICAgIFtzZWxlY3RlZEFsbF09XCIoc2VsZWN0ZWRBbGxTdWJqZWN0IHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgICAgW3NvcnRlclZhbHVlXT1cInNvcnRlclZhbHVlXCJcbiAgICAgICAgW3N1bW1hcnlSb3dUZW1wbGF0ZV09XCJzdW1tYXJ5Um93VGVtcGxhdGVcIlxuICAgICAgICBjb21wb25lbnQ9XCJ0Zm9vdFwiXG4gICAgICAvPlxuICAgIH1cblxuICA8L3RhYmxlPlxuICBAaWYgKGxvYWRpbmcpIHtcbiAgICA8Yy1lbGVtZW50LWNvdmVyXG4gICAgICBbYm91bmRhcmllc109XCJbXG4gICAgICAgIHsgc2lkZXM6IFsndG9wJ10sIHF1ZXJ5OiAndGQnIH0sXG4gICAgICAgIHsgc2lkZXM6IFsnYm90dG9tJ10sIHF1ZXJ5OiAndGJvZHknIH1cbiAgICAgIF1cIlxuICAgIC8+XG4gIH1cbjwvZGl2PlxuQGlmIChwYWdpbmF0aW9uIHx8IGl0ZW1zUGVyUGFnZVNlbGVjdCkge1xuICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgQGlmIChwYWdpbmF0aW9uICYmIG51bWJlck9mUGFnZXMgPiAxKSB7XG4gICAgICAgIDxjLXNtYXJ0LXBhZ2luYXRpb25cbiAgICAgICAgICAoYWN0aXZlUGFnZUNoYW5nZSk9XCJzZXRBY3RpdmVQYWdlKCRldmVudClcIlxuICAgICAgICAgIFthY3RpdmVQYWdlXT1cImFjdGl2ZVBhZ2VcIlxuICAgICAgICAgIFtwYWdlc109XCJudW1iZXJPZlBhZ2VzXCJcbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gbXMtYXV0b1wiPlxuICAgICAgQGlmIChpdGVtc1BlclBhZ2VTZWxlY3QpIHtcbiAgICAgICAgPGMtc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3JcbiAgICAgICAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cImhhbmRsZUl0ZW1zUGVyUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBbaXRlbXNQZXJQYWdlTGFiZWxdPVwiaXRlbXNQZXJQYWdlTGFiZWxcIlxuICAgICAgICAgIFtpdGVtc1BlclBhZ2VPcHRpb25zXT1cIml0ZW1zUGVyUGFnZU9wdGlvbnNcIlxuICAgICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCJcbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG59XG48bmctdGVtcGxhdGUgI3Rib2R5RGVmYXVsdFRlbXBsYXRlPlxuICA8dGJvZHkgW2NBbGlnbl09XCJ0YWJsZUJvZHlQcm9wcz8uYWxpZ25cIlxuICAgICAgICAgW2NIdG1sQXR0cl09XCJ0YWJsZUJvZHlQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXG4gICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVCb2R5UHJvcHM/LmNvbG9yXCJcbiAgPlxuICAgIEBmb3IgKGl0ZW0gb2YgY3VycmVudEl0ZW1zOyB0cmFjayBpdGVtOyBsZXQgaSA9ICRpbmRleCwgY250ID0gJGNvdW50LCBpc0V2ZW4gPSAkZXZlbiwgaXNPZGQgPSAkb2RkKSB7XG4gICAgICA8dHIgKGNsaWNrKT1cImhhbmRsZVJvd0NsaWNrKHskZXZlbnQsIGl0ZW0sIGl9KVwiXG4gICAgICAgICAgW2NBbGlnbl09XCJpdGVtLl9wcm9wcz8uYWxpZ25cIlxuICAgICAgICAgIFtjVGFibGVBY3RpdmVdPVwiaXRlbS5fcHJvcHM/LmFjdGl2ZSA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgIFtjVGFibGVDb2xvcl09XCJpdGVtLl9wcm9wcz8uY29sb3JcIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cIntjdXJzb3I6IGNsaWNrYWJsZVJvd3MgPyAncG9pbnRlcicgOiAnYXV0byd9XCJcbiAgICAgICAgICBbdGFiaW5kZXhdPVwiY2xpY2thYmxlUm93cyA/IDAgOiAtMVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoc2VsZWN0YWJsZSkge1xuICAgICAgICAgIDx0ZCBbY0FsaWduXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hbGlnblwiXG4gICAgICAgICAgICAgIFtjVGFibGVBY3RpdmVdPVwiaXRlbT8uWydfY2VsbFByb3BzJ10/Ll9hbGw/LmFjdGl2ZSA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICBbY1RhYmxlQ29sb3JdPVwiaXRlbT8uWydfY2VsbFByb3BzJ10/Ll9hbGw/LmNvbG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXQgKGNoYW5nZSk9XCJoYW5kbGVSb3dDaGVja2VkKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIml0ZW0uX3NlbGVjdGVkID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGl0ZW0/Ll9zZWxlY3RhYmxlID09PSBmYWxzZSkgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgY0Zvcm1DaGVja0lucHV0XG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1ucyQoKTsgdHJhY2sgY29sdW1uOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzWyd0YWJsZURhdGEnXSB8fCBjb2x1bW5EZWZhdWx0VGVtcGxhdGU7IGNvbnRleHQ6IHtjb2x1bW4sIGl0ZW0sIGNvbHVtbk5hbWU6IGdldENvbHVtbktleShjb2x1bW4pLCB0ZENvbnRlbnQ6IGl0ZW1bY29sdW1uLmtleV0sIGNlbGxQcm9wczogZ2V0VGFibGVEYXRhQ2VsbFByb3BzKGNvbHVtbiwgaXRlbSkgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICAgIEBpZiAodGVtcGxhdGVzWyd0YWJsZURldGFpbHMnXSkge1xuICAgICAgICA8IS0tICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd0RldGFpbHNEZWZhdWx0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj4tLT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgW25nU3R5bGVdPVwie2JvcmRlckJvdHRvbVdpZHRoOiAwfVwiIGNsYXNzPVwicC0wXCIgdGFiaW5kZXg9XCItMVwiPjwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cInAtMFwiPlxuICAgICAgICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgW25nU3R5bGVdPVwie2JvcmRlcjogMH1cIiBjbGFzcz1cInAtMFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1sndGFibGVEZXRhaWxzJ107IGNvbnRleHQ6IHtpdGVtLCBpbmRleDogaX1cIiAvPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgfVxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9JdGVtc0RlZmF1bHRUZW1wbGF0ZVwiIC8+XG4gIDwvdGJvZHk+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI2NvbHVtbkRlZmF1bHRUZW1wbGF0ZVxuICBsZXQtY2VsbFByb3BzPVwiY2VsbFByb3BzXCJcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gIGxldC1jb2x1bW5OYW1lPVwiY29sdW1uTmFtZVwiXG4gIGxldC1pdGVtPVwiaXRlbVwiXG4gIGxldC10ZENvbnRlbnQ9XCJ0ZENvbnRlbnRcIlxuPlxuICBAaWYgKHRkQ29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgPHRkIFtjQWxpZ25dPVwiY2VsbFByb3BzPy5hbGlnblwiXG4gICAgICAgIFtjSHRtbEF0dHJdPVwiY2VsbFByb3BzPy5bJ19hdHRyaWJ1dGVzJ10gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgW2NUYWJsZUFjdGl2ZV09XCJjZWxsUHJvcHM/LlsnYWN0aXZlJ11cIlxuICAgICAgICBbY1RhYmxlQ29sb3JdPVwiY2VsbFByb3BzPy5jb2xvciA/PyBjb2x1bW5bY29sdW1uTmFtZV0/Ll9jb2xQcm9wcz8uY29sb3IgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0VGFibGVEYXRhQ2VsbENsYXNzKGNvbHVtbiwgaXRlbSlcIlxuICAgICAgICBbbmdTdHlsZV09XCJnZXRUYWJsZURhdGFDZWxsU3R5bGVzKGNvbHVtbiwgaXRlbSlcIlxuICAgID5cbiAgICAgIHt7IHRkQ29udGVudCB9fVxuICAgIDwvdGQ+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS08bmctdGVtcGxhdGUgI3Jvd0RldGFpbHNEZWZhdWx0VGVtcGxhdGUgbGV0LWl0ZW0gbGV0LWluZGV4Pi0tPlxuPCEtLSAgPHRyPjx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiB0YWJpbmRleD1cIi0xXCIgW25nU3R5bGVdPVwie2JvcmRlckJvdHRvbVdpZHRoOiAwfVwiPjwvdGQ+PC90cj4tLT5cbjwhLS0gIDx0ciBjbGFzcz1cInAtMFwiPi0tPlxuPCEtLSAgICA8dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgW25nU3R5bGVdPVwie2JvcmRlcjogMH1cIj4tLT5cbjwhLS0gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzPy50YWJsZURldGFpbHNcIj48L25nLWNvbnRhaW5lcj4tLT5cbjwhLS0gICAgPC90ZD4tLT5cbjwhLS0gIDwvdHI+LS0+XG48IS0tPC9uZy10ZW1wbGF0ZT4tLT5cblxuPG5nLXRlbXBsYXRlICNub0l0ZW1zRGVmYXVsdFRlbXBsYXRlPlxuICBAaWYgKCFjdXJyZW50SXRlbXMubGVuZ3RoKSB7XG4gICAgPHRyPlxuICAgICAgPHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cImp1c3RpZnktY29udGVudC1jZW50ZXJcIj57eyBub0l0ZW1zTGFiZWwgfX08L3RkPlxuICAgIDwvdHI+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS10b2RvOiBmaWx0ZXJJY29uQ3VzdG9tVGVtcGxhdGUtLT5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVySWNvblRlbXBsYXRlPlxuICA8c3ZnIGNsYXNzPVwiaWNvbiBpY29uLWN1c3RvbS1zaXplXCIgcG9pbnRlci1ldmVudHM9XCJub25lXCIgcm9sZT1cImltZ1wiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiXG4gICAgICAgd2lkdGg9XCIxOFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICA8cG9seWdvblxuICAgICAgY2xhc3M9XCJjaS1wcmltYXJ5XCJcbiAgICAgIGZpbGw9XCJ2YXIoLS1jaS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpXCJcbiAgICAgIHBvaW50cz1cIjQwIDE2IDQwIDUzLjgyOCAxMDkuMDI0IDEzNiAxNTAuODE1IDEzNiA3Ni44OTYgNDggNDU5LjUxIDQ4IDMwNCAyNDIuMzg4IDMwNCA0MDEuMzczIDI0MS4zNzMgNDY0IDI0MCA0NjQgMjQwIDM2OCAyMDggMzY4IDIwOCA0OTYgMjU0LjYyNyA0OTYgMzM2IDQxNC42MjcgMzM2IDI1My42MTIgNDk2IDUzLjYxMiA0OTYgMTYgNDAgMTZcIj5cbiAgICA8L3BvbHlnb24+XG4gICAgPHBvbHlnb25cbiAgICAgIGNsYXNzPVwiY2ktcHJpbWFyeVwiXG4gICAgICBmaWxsPVwidmFyKC0tY2ktcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKVwiXG4gICAgICBwb2ludHM9XCIxNjYuNDAzIDI0OC4yMjUgMjI2Ljg2NCAxODcuNzYzIDIwNC4yMzcgMTY1LjEzNSAxNDMuNzc1IDIyNS41OTcgODMuMzEzIDE2NS4xMzUgNjAuNjg3IDE4Ny43NjMgMTIxLjE0OCAyNDguMjI1IDYwLjY4NyAzMDguNjg3IDgzLjMxMyAzMzEuMzE0IDE0My43NzUgMjcwLjg1MiAyMDQuMjM3IDMzMS4zMTQgMjI2Ljg2NCAzMDguNjg3IDE2Ni40MDMgMjQ4LjIyNVwiPlxuICAgIDwvcG9seWdvbj5cbiAgPC9zdmc+XG48L25nLXRlbXBsYXRlPlxuIl19
|
package/esm2022/lib/smart-table/smart-table-column-filter/smart-table-column-filter.component.mjs
CHANGED
|
@@ -13,16 +13,15 @@ export class SmartTableColumnFilterComponent {
|
|
|
13
13
|
set column(value) {
|
|
14
14
|
this.#filterInputDirective.emitObject = { ...this.#filterInputDirective.emitObject, column: value };
|
|
15
15
|
}
|
|
16
|
-
;
|
|
17
|
-
static { this.ɵ
|
|
18
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: SmartTableColumnFilterComponent, isStandalone: true, selector: "c-smart-table-column-filter", inputs: { column: "column", sizing: "sizing" }, ngImport: i0, template: "<input\n [sizing]=\"sizing\"\n [value]=\"value$ | async\"\n autocomplete=\"off\"\n cFormControl\n/>\n", dependencies: [{ kind: "directive", type: FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SmartTableColumnFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: SmartTableColumnFilterComponent, isStandalone: true, selector: "c-smart-table-column-filter", inputs: { column: "column", sizing: "sizing" }, ngImport: i0, template: "<input\n [sizing]=\"sizing\"\n [value]=\"value$ | async\"\n autocomplete=\"off\"\n cFormControl\n/>\n", dependencies: [{ kind: "directive", type: FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
19
18
|
}
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SmartTableColumnFilterComponent, decorators: [{
|
|
21
20
|
type: Component,
|
|
22
21
|
args: [{ selector: 'c-smart-table-column-filter', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FormControlDirective, AsyncPipe], template: "<input\n [sizing]=\"sizing\"\n [value]=\"value$ | async\"\n autocomplete=\"off\"\n cFormControl\n/>\n" }]
|
|
23
|
-
}],
|
|
22
|
+
}], propDecorators: { column: [{
|
|
24
23
|
type: Input
|
|
25
24
|
}], sizing: [{
|
|
26
25
|
type: Input
|
|
27
26
|
}] } });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUtY29sdW1uLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLWNvbHVtbi1maWx0ZXIvc21hcnQtdGFibGUtY29sdW1uLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLWNvbHVtbi1maWx0ZXIvc21hcnQtdGFibGUtY29sdW1uLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFTbEQsTUFBTSxPQUFPLCtCQUErQjtJQVA1QztRQVFXLDBCQUFxQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JELFdBQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDO1FBTzNDLFdBQU0sR0FBaUIsSUFBSSxDQUFDO0tBQ3RDO0lBVFUscUJBQXFCLENBQWdDO0lBRzlELElBQ0ksTUFBTSxDQUFDLEtBQXVCO1FBQ2hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3RHLENBQUM7OEdBUFUsK0JBQStCO2tHQUEvQiwrQkFBK0IsdUlDZDVDLDJHQU1BLDRDRE1ZLG9CQUFvQixxSUFBRSxTQUFTOzsyRkFFOUIsK0JBQStCO2tCQVAzQyxTQUFTOytCQUNFLDZCQUE2QixtQkFFdEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLENBQUM7OEJBT3RDLE1BQU07c0JBRFQsS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBGaWx0ZXJJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uL3NtYXJ0LXRhYmxlLWZpbHRlci9maWx0ZXItaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IElDb2x1bW4gfSBmcm9tICcuLi9zbWFydC10YWJsZS50eXBlJztcbmltcG9ydCB7IEZvcm1Db250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZm9ybSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Mtc21hcnQtdGFibGUtY29sdW1uLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC10YWJsZS1jb2x1bW4tZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtGb3JtQ29udHJvbERpcmVjdGl2ZSwgQXN5bmNQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBTbWFydFRhYmxlQ29sdW1uRmlsdGVyQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgI2ZpbHRlcklucHV0RGlyZWN0aXZlID0gaW5qZWN0KEZpbHRlcklucHV0RGlyZWN0aXZlKTtcbiAgcmVhZG9ubHkgdmFsdWUkID0gdGhpcy4jZmlsdGVySW5wdXREaXJlY3RpdmUudmFsdWUkO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjb2x1bW4odmFsdWU6IHN0cmluZyB8IElDb2x1bW4pIHtcbiAgICB0aGlzLiNmaWx0ZXJJbnB1dERpcmVjdGl2ZS5lbWl0T2JqZWN0ID0geyAuLi50aGlzLiNmaWx0ZXJJbnB1dERpcmVjdGl2ZS5lbWl0T2JqZWN0LCBjb2x1bW46IHZhbHVlIH07XG4gIH1cblxuICBASW5wdXQoKSBzaXppbmc/OiAnc20nIHwgJ2xnJyA9ICdzbSc7XG59XG4iLCI8aW5wdXRcbiAgW3NpemluZ109XCJzaXppbmdcIlxuICBbdmFsdWVdPVwidmFsdWUkIHwgYXN5bmNcIlxuICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICBjRm9ybUNvbnRyb2xcbi8+XG4iXX0=
|
|
@@ -47,10 +47,10 @@ export class FilterInputDirective {
|
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
51
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FilterInputDirective, deps: [{ token: i0.ElementRef }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
51
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: FilterInputDirective, isStandalone: true, selector: "[cFilterInput]", inputs: { delay: "delay", onEvent: "onEvent", value: "value" }, outputs: { valueChange: "valueChange" }, exportAs: ["cFilterInput"], ngImport: i0 }); }
|
|
52
52
|
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FilterInputDirective, decorators: [{
|
|
54
54
|
type: Directive,
|
|
55
55
|
args: [{
|
|
56
56
|
selector: '[cFilterInput]',
|