ngx-tethys 18.0.0-next.0 → 18.0.0-next.2
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/CHANGELOG.md +161 -1
- package/action/action.component.d.ts +3 -3
- package/alert/alert.component.d.ts +1 -1
- package/anchor/anchor.component.d.ts +3 -1
- package/autocomplete/autocomplete.component.d.ts +1 -1
- package/autocomplete/autocomplete.trigger.directive.d.ts +1 -1
- package/avatar/avatar.component.d.ts +4 -4
- package/badge/badge.component.d.ts +3 -3
- package/breadcrumb/breadcrumb.component.d.ts +30 -2
- package/breadcrumb/module.d.ts +3 -1
- package/breadcrumb/styles/breadcrumb.scss +8 -0
- package/button/button-icon.component.d.ts +2 -2
- package/button/button.component.d.ts +2 -2
- package/button/styles/button.scss +5 -5
- package/card/card.component.d.ts +3 -3
- package/card/content.component.d.ts +1 -1
- package/carousel/carousel.component.d.ts +4 -4
- package/cascader/cascader-li.component.d.ts +5 -5
- package/cascader/cascader-search-option.component.d.ts +3 -3
- package/cascader/cascader.component.d.ts +8 -8
- package/checkbox/checkbox.component.d.ts +1 -1
- package/collapse/collapse-item.component.d.ts +2 -2
- package/collapse/collapse.component.d.ts +1 -1
- package/color-picker/color-picker-panel.component.d.ts +1 -1
- package/color-picker/color-picker.component.d.ts +3 -3
- package/copy/copy.directive.d.ts +1 -1
- package/core/behaviors/decorators.d.ts +1 -1
- package/core/overlay/abstract-overlay.config.d.ts +6 -0
- package/date-picker/abstract-picker.component.d.ts +15 -8
- package/date-picker/abstract-picker.directive.d.ts +3 -3
- package/date-picker/base-picker.component.d.ts +2 -2
- package/date-picker/date-picker.config.d.ts +1 -0
- package/date-picker/date-picker.service.d.ts +1 -0
- package/date-picker/lib/calendar/calendar-footer.component.d.ts +1 -1
- package/date-picker/lib/popups/date-popup.component.d.ts +2 -1
- package/date-picker/lib/popups/inner-popup.component.d.ts +1 -1
- package/date-picker/picker.component.d.ts +1 -1
- package/date-picker/picker.util.d.ts +2 -0
- package/date-range/date-range.component.d.ts +8 -2
- package/dialog/body/dialog-body.component.d.ts +1 -1
- package/dialog/footer/dialog-footer.component.d.ts +1 -1
- package/dialog/header/dialog-header.component.d.ts +1 -1
- package/divider/divider.component.d.ts +2 -2
- package/drag-drop/drag-handle.directive.d.ts +1 -1
- package/drag-drop/drag.directive.d.ts +1 -1
- package/drag-drop/drop-container.directive.d.ts +1 -1
- package/dropdown/dropdown-menu-item.directive.d.ts +2 -2
- package/dropdown/dropdown-menu.component.d.ts +1 -1
- package/dropdown/dropdown.directive.d.ts +1 -1
- package/empty/empty.component.d.ts +1 -1
- package/esm2022/action/action.component.mjs +7 -6
- package/esm2022/alert/alert.component.mjs +5 -5
- package/esm2022/anchor/anchor.component.mjs +5 -5
- package/esm2022/autocomplete/autocomplete.component.mjs +5 -4
- package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +5 -5
- package/esm2022/avatar/avatar.component.mjs +8 -8
- package/esm2022/badge/badge.component.mjs +7 -6
- package/esm2022/breadcrumb/breadcrumb.component.mjs +73 -32
- package/esm2022/breadcrumb/module.mjs +6 -4
- package/esm2022/button/button-icon.component.mjs +6 -5
- package/esm2022/button/button.component.mjs +6 -6
- package/esm2022/card/card.component.mjs +7 -6
- package/esm2022/card/content.component.mjs +5 -4
- package/esm2022/carousel/carousel.component.mjs +8 -7
- package/esm2022/cascader/cascader-li.component.mjs +9 -8
- package/esm2022/cascader/cascader-search-option.component.mjs +7 -6
- package/esm2022/cascader/cascader.component.mjs +19 -12
- package/esm2022/checkbox/checkbox.component.mjs +5 -4
- package/esm2022/collapse/collapse-item.component.mjs +6 -6
- package/esm2022/collapse/collapse.component.mjs +5 -4
- package/esm2022/color-picker/color-picker-panel.component.mjs +5 -4
- package/esm2022/color-picker/color-picker.component.mjs +7 -6
- package/esm2022/color-picker/parts/inputs/inputs.component.mjs +1 -1
- package/esm2022/copy/copy.directive.mjs +5 -4
- package/esm2022/core/behaviors/decorators.mjs +2 -2
- package/esm2022/core/overlay/abstract-overlay.config.mjs +7 -1
- package/esm2022/date-picker/abstract-picker.component.mjs +28 -17
- package/esm2022/date-picker/abstract-picker.directive.mjs +8 -7
- package/esm2022/date-picker/base-picker.component.mjs +5 -5
- package/esm2022/date-picker/date-picker.component.mjs +3 -3
- package/esm2022/date-picker/date-picker.config.mjs +2 -1
- package/esm2022/date-picker/date-picker.service.mjs +4 -1
- package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +5 -5
- package/esm2022/date-picker/lib/date/date-header.component.mjs +4 -4
- package/esm2022/date-picker/lib/decade/decade-header.component.mjs +4 -4
- package/esm2022/date-picker/lib/month/month-header.component.mjs +4 -4
- package/esm2022/date-picker/lib/popups/date-popup.component.mjs +7 -4
- package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +5 -5
- package/esm2022/date-picker/lib/year/year-header.component.mjs +4 -4
- package/esm2022/date-picker/month-picker.component.mjs +3 -3
- package/esm2022/date-picker/picker.component.mjs +5 -5
- package/esm2022/date-picker/picker.util.mjs +14 -2
- package/esm2022/date-picker/quarter-picker.component.mjs +3 -3
- package/esm2022/date-picker/range-picker.component.mjs +3 -3
- package/esm2022/date-picker/week-picker.component.mjs +3 -3
- package/esm2022/date-picker/year-picker.component.mjs +3 -3
- package/esm2022/date-range/date-range.component.mjs +6 -5
- package/esm2022/dialog/body/dialog-body.component.mjs +5 -4
- package/esm2022/dialog/footer/dialog-footer.component.mjs +5 -4
- package/esm2022/dialog/header/dialog-header.component.mjs +5 -4
- package/esm2022/divider/divider.component.mjs +6 -5
- package/esm2022/drag-drop/drag-handle.directive.mjs +5 -4
- package/esm2022/drag-drop/drag.directive.mjs +5 -4
- package/esm2022/drag-drop/drop-container.directive.mjs +5 -4
- package/esm2022/dropdown/dropdown-menu-item.directive.mjs +7 -6
- package/esm2022/dropdown/dropdown-menu.component.mjs +5 -4
- package/esm2022/dropdown/dropdown.directive.mjs +5 -5
- package/esm2022/empty/empty.component.mjs +5 -4
- package/esm2022/form/form-group-error/form-group-error.component.mjs +5 -4
- package/esm2022/form/form-group-label.directive.mjs +5 -4
- package/esm2022/form/form-group.component.mjs +7 -6
- package/esm2022/icon/icon.component.mjs +6 -5
- package/esm2022/image/image.class.mjs +1 -1
- package/esm2022/image/image.directive.mjs +6 -5
- package/esm2022/image/index.mjs +6 -5
- package/esm2022/image/preview/image-preview.component.mjs +21 -13
- package/esm2022/input/input-search.component.mjs +5 -4
- package/esm2022/input/input.component.mjs +6 -5
- package/esm2022/input-number/input-number.component.mjs +14 -7
- package/esm2022/layout/header.component.mjs +7 -6
- package/esm2022/layout/sidebar-header.component.mjs +5 -4
- package/esm2022/layout/sidebar.component.mjs +12 -11
- package/esm2022/list/list.component.mjs +5 -4
- package/esm2022/list/selection/selection-list.mjs +7 -7
- package/esm2022/loading/loading.component.mjs +6 -5
- package/esm2022/mention/mention.directive.mjs +3 -3
- package/esm2022/menu/group/menu-group.component.mjs +10 -9
- package/esm2022/menu/item/action/menu-item-action.component.mjs +17 -7
- package/esm2022/menu/item/name/menu-item-name.component.mjs +5 -4
- package/esm2022/menu/menu.component.mjs +5 -4
- package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +5 -4
- package/esm2022/nav/nav-ink-bar.directive.mjs +6 -5
- package/esm2022/nav/nav-item.directive.mjs +7 -6
- package/esm2022/nav/nav.component.mjs +18 -7
- package/esm2022/pagination/pagination.class.mjs +1 -1
- package/esm2022/pagination/pagination.component.mjs +22 -10
- package/esm2022/pagination/pagination.config.mjs +3 -2
- package/esm2022/popover/popover.directive.mjs +6 -5
- package/esm2022/popover/popover.service.mjs +2 -1
- package/esm2022/property/property-item.component.mjs +6 -5
- package/esm2022/property-operation/property-operation.component.mjs +9 -9
- package/esm2022/radio/group/radio-group.component.mjs +5 -4
- package/esm2022/rate/rate-item.component.mjs +5 -4
- package/esm2022/rate/rate.component.mjs +7 -7
- package/esm2022/resizable/resizable.directive.mjs +7 -6
- package/esm2022/resizable/resize-handle.component.mjs +5 -4
- package/esm2022/resizable/resize-handles.component.mjs +5 -4
- package/esm2022/segment/segment-item.component.mjs +5 -5
- package/esm2022/segment/segment.component.mjs +5 -4
- package/esm2022/select/custom-select/custom-select.component.mjs +14 -14
- package/esm2022/select/native-select/native-select.component.mjs +5 -5
- package/esm2022/shared/base-form-check.component.mjs +6 -5
- package/esm2022/shared/directives/thy-autofocus.directive.mjs +6 -5
- package/esm2022/shared/directives/thy-scroll.directive.mjs +5 -4
- package/esm2022/shared/directives/thy-show.mjs +5 -4
- package/esm2022/shared/option/group/option-group.component.mjs +5 -4
- package/esm2022/shared/option/list-option/list-option.component.mjs +5 -4
- package/esm2022/shared/option/option.component.mjs +5 -5
- package/esm2022/shared/select/select-control/select-control.component.mjs +10 -10
- package/esm2022/skeleton/skeleton-circle.component.mjs +5 -5
- package/esm2022/skeleton/skeleton-rectangle.component.mjs +5 -5
- package/esm2022/skeleton/skeleton.component.mjs +5 -4
- package/esm2022/skeleton/stylized/bullet-list.component.mjs +5 -4
- package/esm2022/skeleton/stylized/list.component.mjs +5 -4
- package/esm2022/skeleton/stylized/paragraph.component.mjs +5 -4
- package/esm2022/slide/slide-body/slide-body-section.component.mjs +5 -4
- package/esm2022/slider/slider.component.mjs +6 -6
- package/esm2022/space/space.component.mjs +5 -4
- package/esm2022/stepper/step-header.component.mjs +6 -5
- package/esm2022/stepper/stepper.component.mjs +5 -4
- package/esm2022/switch/switch.component.mjs +6 -5
- package/esm2022/table/table-column.component.mjs +9 -9
- package/esm2022/table/table-skeleton.component.mjs +8 -7
- package/esm2022/table/table.component.mjs +19 -17
- package/esm2022/tabs/tab.component.mjs +5 -4
- package/esm2022/tabs/tabs.component.mjs +6 -6
- package/esm2022/tag/tag.component.mjs +5 -5
- package/esm2022/time-picker/time-picker-panel.component.mjs +6 -6
- package/esm2022/time-picker/time-picker.component.mjs +9 -9
- package/esm2022/timeline/timeline.component.mjs +5 -4
- package/esm2022/tooltip/tooltip.directive.mjs +6 -6
- package/esm2022/tree/tree-node.component.mjs +9 -8
- package/esm2022/tree/tree.component.mjs +32 -11
- package/esm2022/tree/tree.service.mjs +3 -3
- package/esm2022/tree-select/tree-select.component.mjs +20 -18
- package/esm2022/upload/file-select.component.mjs +24 -27
- package/esm2022/version.mjs +2 -2
- package/esm2022/vote/vote.component.mjs +7 -6
- package/esm2022/watermark/watermark.directive.mjs +5 -4
- package/fesm2022/ngx-tethys-action.mjs +6 -5
- package/fesm2022/ngx-tethys-action.mjs.map +1 -1
- package/fesm2022/ngx-tethys-alert.mjs +4 -4
- package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
- package/fesm2022/ngx-tethys-anchor.mjs +4 -4
- package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
- package/fesm2022/ngx-tethys-autocomplete.mjs +6 -6
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-avatar.mjs +7 -7
- package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
- package/fesm2022/ngx-tethys-badge.mjs +6 -5
- package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
- package/fesm2022/ngx-tethys-breadcrumb.mjs +117 -77
- package/fesm2022/ngx-tethys-breadcrumb.mjs.map +1 -1
- package/fesm2022/ngx-tethys-button.mjs +8 -8
- package/fesm2022/ngx-tethys-button.mjs.map +1 -1
- package/fesm2022/ngx-tethys-card.mjs +8 -7
- package/fesm2022/ngx-tethys-card.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +7 -6
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +28 -21
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-checkbox.mjs +4 -3
- package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-tethys-collapse.mjs +7 -7
- package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
- package/fesm2022/ngx-tethys-color-picker.mjs +9 -8
- package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-copy.mjs +4 -3
- package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
- package/fesm2022/ngx-tethys-core.mjs +7 -1
- package/fesm2022/ngx-tethys-core.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +86 -57
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-range.mjs +5 -4
- package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dialog.mjs +8 -7
- package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
- package/fesm2022/ngx-tethys-divider.mjs +5 -4
- package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-drag-drop.mjs +8 -8
- package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +10 -10
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-empty.mjs +4 -3
- package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
- package/fesm2022/ngx-tethys-form.mjs +10 -10
- package/fesm2022/ngx-tethys-form.mjs.map +1 -1
- package/fesm2022/ngx-tethys-icon.mjs +5 -5
- package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +24 -16
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input-number.mjs +13 -6
- package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input.mjs +7 -6
- package/fesm2022/ngx-tethys-input.mjs.map +1 -1
- package/fesm2022/ngx-tethys-layout.mjs +17 -16
- package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs +8 -8
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-loading.mjs +5 -4
- package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
- package/fesm2022/ngx-tethys-mention.mjs +2 -2
- package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
- package/fesm2022/ngx-tethys-menu.mjs +26 -16
- package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
- package/fesm2022/ngx-tethys-nav.mjs +26 -16
- package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
- package/fesm2022/ngx-tethys-pagination.mjs +23 -10
- package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
- package/fesm2022/ngx-tethys-popover.mjs +6 -5
- package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property-operation.mjs +8 -8
- package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property.mjs +5 -4
- package/fesm2022/ngx-tethys-property.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +7 -6
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-rate.mjs +8 -8
- package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +10 -10
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-segment.mjs +6 -6
- package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +15 -15
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +25 -25
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-skeleton.mjs +14 -14
- package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slide.mjs +4 -4
- package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slider.mjs +5 -5
- package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-space.mjs +4 -3
- package/fesm2022/ngx-tethys-space.mjs.map +1 -1
- package/fesm2022/ngx-tethys-stepper.mjs +7 -6
- package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
- package/fesm2022/ngx-tethys-switch.mjs +5 -4
- package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +29 -27
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tabs.mjs +7 -7
- package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tag.mjs +4 -4
- package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +11 -11
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-timeline.mjs +4 -3
- package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +5 -5
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +14 -11
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree.mjs +39 -18
- package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
- package/fesm2022/ngx-tethys-upload.mjs +23 -27
- package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2022/ngx-tethys-vote.mjs +6 -5
- package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
- package/fesm2022/ngx-tethys-watermark.mjs +4 -3
- package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/form/form-group-error/form-group-error.component.d.ts +1 -1
- package/form/form-group-label.directive.d.ts +1 -1
- package/form/form-group.component.d.ts +3 -3
- package/icon/icon.component.d.ts +2 -2
- package/image/image.class.d.ts +1 -1
- package/image/image.directive.d.ts +2 -2
- package/image/index.d.ts +5 -4
- package/image/preview/image-preview.component.d.ts +5 -5
- package/input/input-search.component.d.ts +1 -1
- package/input/input.component.d.ts +2 -2
- package/input/styles/input-group.scss +3 -0
- package/input-number/input-number.component.d.ts +10 -3
- package/layout/header.component.d.ts +3 -3
- package/layout/sidebar-header.component.d.ts +1 -1
- package/layout/sidebar.component.d.ts +7 -7
- package/list/list.component.d.ts +1 -1
- package/list/selection/selection-list.d.ts +3 -3
- package/loading/loading.component.d.ts +2 -2
- package/menu/group/menu-group.component.d.ts +6 -6
- package/menu/item/action/menu-item-action.component.d.ts +8 -3
- package/menu/item/name/menu-item-name.component.d.ts +1 -1
- package/menu/menu.component.d.ts +1 -1
- package/menu/styles/menu.scss +8 -0
- package/nav/icon-nav/icon-nav-link.directive.d.ts +1 -1
- package/nav/nav-ink-bar.directive.d.ts +2 -2
- package/nav/nav-item.directive.d.ts +3 -3
- package/nav/nav.component.d.ts +7 -5
- package/package.json +2 -2
- package/pagination/pagination.class.d.ts +4 -0
- package/pagination/pagination.component.d.ts +11 -6
- package/popover/popover.directive.d.ts +2 -2
- package/property/property-item.component.d.ts +4 -1
- package/property/styles/properties.scss +2 -0
- package/property-operation/property-operation.component.d.ts +5 -5
- package/radio/group/radio-group.component.d.ts +1 -1
- package/rate/rate-item.component.d.ts +1 -1
- package/rate/rate.component.d.ts +3 -3
- package/resizable/resizable.directive.d.ts +3 -3
- package/resizable/resize-handle.component.d.ts +1 -1
- package/resizable/resize-handles.component.d.ts +1 -1
- package/schematics/ng-update/update-18/complete.js +0 -10
- package/schematics/ng-update/update-18/index.spec.js +0 -73
- package/schematics/ng-update/update-18/update-data.js +4 -860
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/segment/segment-item.component.d.ts +1 -1
- package/segment/segment.component.d.ts +5 -1
- package/select/custom-select/custom-select.component.d.ts +10 -10
- package/select/native-select/native-select.component.d.ts +1 -1
- package/shared/base-form-check.component.d.ts +2 -2
- package/shared/directives/thy-autofocus.directive.d.ts +2 -2
- package/shared/directives/thy-scroll.directive.d.ts +1 -1
- package/shared/directives/thy-show.d.ts +1 -1
- package/shared/option/group/option-group.component.d.ts +1 -1
- package/shared/option/list-option/list-option.component.d.ts +1 -1
- package/shared/option/option.component.d.ts +1 -1
- package/shared/option/styles/select-dropdown.scss +1 -0
- package/shared/select/select-control/select-control.component.d.ts +6 -6
- package/skeleton/skeleton-circle.component.d.ts +1 -1
- package/skeleton/skeleton-rectangle.component.d.ts +1 -1
- package/skeleton/skeleton.component.d.ts +1 -1
- package/skeleton/stylized/bullet-list.component.d.ts +1 -1
- package/skeleton/stylized/list.component.d.ts +1 -1
- package/skeleton/stylized/paragraph.component.d.ts +1 -1
- package/slide/slide-body/slide-body-section.component.d.ts +1 -1
- package/slider/slider.component.d.ts +2 -2
- package/slider/slider.scss +12 -20
- package/space/space.component.d.ts +1 -1
- package/stepper/step-header.component.d.ts +2 -2
- package/stepper/stepper.component.d.ts +1 -1
- package/styles/modules/tables.scss +20 -0
- package/styles/variables.scss +2 -2
- package/switch/switch.component.d.ts +2 -2
- package/table/styles/skeleton.scss +5 -0
- package/table/table-column.component.d.ts +5 -5
- package/table/table-skeleton.component.d.ts +2 -2
- package/table/table.component.d.ts +13 -11
- package/tabs/tab.component.d.ts +1 -1
- package/tabs/tabs.component.d.ts +2 -2
- package/tag/tag.component.d.ts +1 -1
- package/time-picker/time-picker-panel.component.d.ts +2 -2
- package/time-picker/time-picker.component.d.ts +5 -5
- package/timeline/timeline.component.d.ts +1 -1
- package/tooltip/tooltip.directive.d.ts +10 -2
- package/tree/tree-node.component.d.ts +20 -5
- package/tree/tree.component.d.ts +17 -7
- package/tree/tree.service.d.ts +1 -1
- package/tree-select/tree-select.component.d.ts +7 -7
- package/upload/file-select.component.d.ts +7 -8
- package/vote/vote.component.d.ts +3 -3
- package/watermark/watermark.directive.d.ts +1 -1
|
@@ -6,7 +6,7 @@ import { FormsModule } from '@angular/forms';
|
|
|
6
6
|
import { ThyButtonIcon } from 'ngx-tethys/button';
|
|
7
7
|
import { ThyNav, ThyNavItemDirective } from 'ngx-tethys/nav';
|
|
8
8
|
import { ThyDatePickerConfigService } from '../../date-picker.service';
|
|
9
|
-
import { dateAddAmount, getShortcutValue, hasValue, makeValue, transformDateValue } from '../../picker.util';
|
|
9
|
+
import { dateAddAmount, getShortcutValue, hasValue, makeValue, setValueByTimestampPrecision, transformDateValue } from '../../picker.util';
|
|
10
10
|
import { CalendarFooter } from '../calendar/calendar-footer.component';
|
|
11
11
|
import { DateCarousel } from '../date-carousel/date-carousel.component';
|
|
12
12
|
import { InnerPopup } from './inner-popup.component';
|
|
@@ -476,9 +476,10 @@ export class DatePopup {
|
|
|
476
476
|
selectedPresetValue = this.getSelectedShortcutPreset(singleTinyDate);
|
|
477
477
|
}
|
|
478
478
|
this.setValue(selectedPresetValue);
|
|
479
|
+
const shortcutPresetsValue = setValueByTimestampPrecision(shortcutPresets?.value, this.isRange, this.timestampPrecision);
|
|
479
480
|
this.dateValueChange.emit({
|
|
480
481
|
value: helpers.isArray(value) ? this.selectedValue : selectedPresetValue,
|
|
481
|
-
triggerPreset: shortcutPresets
|
|
482
|
+
triggerPreset: Object.assign({}, shortcutPresets, { value: shortcutPresetsValue })
|
|
482
483
|
});
|
|
483
484
|
if (!helpers.isArray(value) && this.showTime && this.showTimePicker) {
|
|
484
485
|
this.updateActiveDate();
|
|
@@ -488,7 +489,7 @@ export class DatePopup {
|
|
|
488
489
|
return index;
|
|
489
490
|
}
|
|
490
491
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: DatePopup, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ThyDatePickerConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
491
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.0", type: DatePopup, isStandalone: true, selector: "date-popup", inputs: { isRange: "isRange", showWeek: "showWeek", format: "format", disabledDate: "disabledDate", minDate: "minDate", maxDate: "maxDate", showToday: "showToday", showTime: "showTime", mustShowTime: "mustShowTime", dateRender: "dateRender", className: "className", panelMode: "panelMode", value: "value", defaultPickerValue: "defaultPickerValue", showShortcut: "showShortcut", shortcutPresets: "shortcutPresets", shortcutPosition: "shortcutPosition", flexible: "flexible", flexibleDateGranularity: "flexibleDateGranularity" }, outputs: { panelModeChange: "panelModeChange", calendarChange: "calendarChange", valueChange: "valueChange", resultOk: "resultOk", showTimePickerChange: "showTimePickerChange", dateValueChange: "dateValueChange" }, exportAs: ["datePopup"], usesOnChanges: true, ngImport: i0, template: "<div class=\"{{ prefixCls }}-picker-container {{ className }}\">\n <div\n class=\"{{ prefixCls }} {{ showWeek ? prefixCls + '-week-number' : '' }}\n {{ isRange ? prefixCls + '-range' : '' }} {{ prefixCls }}-picker-shortcut-{{ shortcutPosition === 'left' ? 'left' : 'bottom' }}\">\n <div class=\"{{ prefixCls }}-picker-shortcut\" *ngIf=\"showShortcut\">\n <div\n class=\"{{ prefixCls }}-picker-shortcut-item\"\n [class.disabled]=\"item.disabled\"\n *ngFor=\"let item of innerShortcutPresets; trackBy: trackByFn\"\n (click)=\"shortcutSetValue(item)\">\n {{ item.title }}\n </div>\n </div>\n <div class=\"{{ prefixCls }}-panel\">\n <div class=\"{{ prefixCls }}-date-panel\">\n <ng-container *ngIf=\"flexible; else defaultPanel\">\n <div class=\"{{ prefixCls }}-date-panel-flexible\">\n <div class=\"{{ prefixCls }}-date-panel-flexible-tab\">\n <thy-nav thyType=\"pulled\" thySize=\"sm\">\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'advanced'\" (click)=\"selectTab('advanced')\"\n >\u9AD8\u7EA7\u9009\u9879</a\n >\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'custom'\" (click)=\"selectTab('custom')\"\n >\u81EA\u5B9A\u4E49</a\n >\n </thy-nav>\n <button thyButtonIcon=\"sweep\" thySize=\"sm\" class=\"clear-date-button\" (click)=\"clearFlexibleValue()\"></button>\n </div>\n <ng-container>\n <div class=\"{{ prefixCls }}-date-panel-advanced\" [hidden]=\"flexibleActiveTab !== 'advanced'\">\n <date-carousel\n name=\"dateCarousel\"\n (ngModelChange)=\"changeValueFromAdvancedSelect($event)\"\n [(ngModel)]=\"advancedSelectedValue\"\n [activeDate]=\"selectedValue[0]\"></date-carousel>\n </div>\n </ng-container>\n <div [hidden]=\"flexibleActiveTab !== 'custom'\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-template #defaultPanel>\n <ng-container *ngIf=\"isRange; else tplSinglePart\">\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'left' }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'right' }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isRange\">\n <ng-container *ngTemplateOutlet=\"tplFooter\"></ng-container>\n </ng-container>\n </ng-template>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplInnerPopup let-partType=\"partType\">\n <inner-popup\n [showWeek]=\"showWeek\"\n [isRange]=\"isRange\"\n [panelMode]=\"getPanelMode(panelMode, partType)\"\n [endPanelMode]=\"getPanelMode(endPanelMode, partType)\"\n [partType]=\"partType\"\n [showDateRangeInput]=\"flexible && flexibleActiveTab === 'custom'\"\n (panelModeChange)=\"onPanelModeChange($event, partType)\"\n [value]=\"getValueBySelector(partType)\"\n [selectedValue]=\"selectedValue\"\n [activeDate]=\"getActiveDate(partType)\"\n [rangeActiveDate]=\"activeDate\"\n [disabledDate]=\"disabledDate\"\n [dateRender]=\"dateRender\"\n [hoverValue]=\"hoverValue\"\n [enablePrev]=\"enablePrevNext('prev', partType)\"\n [enableNext]=\"enablePrevNext('next', partType)\"\n (dayHover)=\"onDayHover($event)\"\n (selectDate)=\"changeValueFromSelect($event, partType)\"\n (headerChange)=\"onHeaderChange($event, partType)\"></inner-popup>\n</ng-template>\n\n<ng-template #tplFooter>\n <calendar-footer\n [showTime]=\"showTime\"\n [mustShowTime]=\"mustShowTime\"\n [value]=\"value\"\n [disableTimeConfirm]=\"disableTimeConfirm\"\n (showTimePickerChange)=\"onShowTimePickerChange($event)\"\n (selectTime)=\"onSelectTime($event)\"\n (clickOk)=\"onClickOk()\"\n (clickRemove)=\"onClickRemove()\"></calendar-footer>\n</ng-template>\n\n<!-- Single ONLY -->\n<ng-template #tplSinglePart>\n <div>\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Range ONLY -->\n<ng-template #tplRangePart let-partType=\"partType\">\n <div class=\"{{ prefixCls }}-range-part {{ prefixCls }}-range-{{ partType }}\">\n <div style=\"outline: none\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup; context: { partType: partType }\"></ng-container>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThyNav, selector: "thy-nav", inputs: ["thyType", "thySize", "thyHorizontal", "thyVertical", "thyFill", "thyResponsive", "thyInsideClosable", "thyExtra"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyButtonIcon, selector: "thy-button-icon,[thy-button-icon],[thyButtonIcon]", inputs: ["thySize", "thyIcon", "thyButtonIcon", "thyShape", "thyLight", "thyActive", "thyTheme", "thyColor"] }, { kind: "component", type: DateCarousel, selector: "date-carousel", inputs: ["activeDate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InnerPopup, selector: "inner-popup", inputs: ["showWeek", "isRange", "activeDate", "rangeActiveDate", "enablePrev", "enableNext", "disabledDate", "dateRender", "selectedValue", "hoverValue", "panelMode", "showDateRangeInput", "partType", "endPanelMode", "value"], outputs: ["panelModeChange", "headerChange", "selectDate", "dayHover"], exportAs: ["innerPopup"] }, { kind: "component", type: CalendarFooter, selector: "calendar-footer", inputs: ["showTime", "mustShowTime", "value", "disableTimeConfirm"], outputs: ["selectTime", "clickOk", "clickRemove", "showTimePickerChange"], exportAs: ["calendarFooter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
492
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.0", type: DatePopup, isStandalone: true, selector: "date-popup", inputs: { isRange: "isRange", showWeek: "showWeek", format: "format", disabledDate: "disabledDate", minDate: "minDate", maxDate: "maxDate", showToday: "showToday", showTime: "showTime", mustShowTime: "mustShowTime", dateRender: "dateRender", className: "className", panelMode: "panelMode", value: "value", defaultPickerValue: "defaultPickerValue", showShortcut: "showShortcut", shortcutPresets: "shortcutPresets", shortcutPosition: "shortcutPosition", flexible: "flexible", flexibleDateGranularity: "flexibleDateGranularity", timestampPrecision: "timestampPrecision" }, outputs: { panelModeChange: "panelModeChange", calendarChange: "calendarChange", valueChange: "valueChange", resultOk: "resultOk", showTimePickerChange: "showTimePickerChange", dateValueChange: "dateValueChange" }, exportAs: ["datePopup"], usesOnChanges: true, ngImport: i0, template: "<div class=\"{{ prefixCls }}-picker-container {{ className }}\">\n <div\n class=\"{{ prefixCls }} {{ showWeek ? prefixCls + '-week-number' : '' }}\n {{ isRange ? prefixCls + '-range' : '' }} {{ prefixCls }}-picker-shortcut-{{ shortcutPosition === 'left' ? 'left' : 'bottom' }}\">\n <div class=\"{{ prefixCls }}-picker-shortcut\" *ngIf=\"showShortcut\">\n <div\n class=\"{{ prefixCls }}-picker-shortcut-item\"\n [class.disabled]=\"item.disabled\"\n *ngFor=\"let item of innerShortcutPresets; trackBy: trackByFn\"\n (click)=\"shortcutSetValue(item)\">\n {{ item.title }}\n </div>\n </div>\n <div class=\"{{ prefixCls }}-panel\">\n <div class=\"{{ prefixCls }}-date-panel\">\n <ng-container *ngIf=\"flexible; else defaultPanel\">\n <div class=\"{{ prefixCls }}-date-panel-flexible\">\n <div class=\"{{ prefixCls }}-date-panel-flexible-tab\">\n <thy-nav thyType=\"pulled\" thySize=\"sm\">\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'advanced'\" (click)=\"selectTab('advanced')\"\n >\u9AD8\u7EA7\u9009\u9879</a\n >\n <a href=\"javascript:;\" thyNavLink [thyNavLinkActive]=\"flexibleActiveTab === 'custom'\" (click)=\"selectTab('custom')\"\n >\u81EA\u5B9A\u4E49</a\n >\n </thy-nav>\n <button thyButtonIcon=\"sweep\" thySize=\"sm\" class=\"clear-date-button\" (click)=\"clearFlexibleValue()\"></button>\n </div>\n <ng-container>\n <div class=\"{{ prefixCls }}-date-panel-advanced\" [hidden]=\"flexibleActiveTab !== 'advanced'\">\n <date-carousel\n name=\"dateCarousel\"\n (ngModelChange)=\"changeValueFromAdvancedSelect($event)\"\n [(ngModel)]=\"advancedSelectedValue\"\n [activeDate]=\"selectedValue[0]\"></date-carousel>\n </div>\n </ng-container>\n <div [hidden]=\"flexibleActiveTab !== 'custom'\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-template #defaultPanel>\n <ng-container *ngIf=\"isRange; else tplSinglePart\">\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'left' }\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tplRangePart; context: { partType: 'right' }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isRange\">\n <ng-container *ngTemplateOutlet=\"tplFooter\"></ng-container>\n </ng-container>\n </ng-template>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplInnerPopup let-partType=\"partType\">\n <inner-popup\n [showWeek]=\"showWeek\"\n [isRange]=\"isRange\"\n [panelMode]=\"getPanelMode(panelMode, partType)\"\n [endPanelMode]=\"getPanelMode(endPanelMode, partType)\"\n [partType]=\"partType\"\n [showDateRangeInput]=\"flexible && flexibleActiveTab === 'custom'\"\n (panelModeChange)=\"onPanelModeChange($event, partType)\"\n [value]=\"getValueBySelector(partType)\"\n [selectedValue]=\"selectedValue\"\n [activeDate]=\"getActiveDate(partType)\"\n [rangeActiveDate]=\"activeDate\"\n [disabledDate]=\"disabledDate\"\n [dateRender]=\"dateRender\"\n [hoverValue]=\"hoverValue\"\n [enablePrev]=\"enablePrevNext('prev', partType)\"\n [enableNext]=\"enablePrevNext('next', partType)\"\n (dayHover)=\"onDayHover($event)\"\n (selectDate)=\"changeValueFromSelect($event, partType)\"\n (headerChange)=\"onHeaderChange($event, partType)\"></inner-popup>\n</ng-template>\n\n<ng-template #tplFooter>\n <calendar-footer\n [showTime]=\"showTime\"\n [mustShowTime]=\"mustShowTime\"\n [value]=\"value\"\n [disableTimeConfirm]=\"disableTimeConfirm\"\n (showTimePickerChange)=\"onShowTimePickerChange($event)\"\n (selectTime)=\"onSelectTime($event)\"\n (clickOk)=\"onClickOk()\"\n (clickRemove)=\"onClickRemove()\"></calendar-footer>\n</ng-template>\n\n<!-- Single ONLY -->\n<ng-template #tplSinglePart>\n <div>\n <ng-container *ngTemplateOutlet=\"tplInnerPopup\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Range ONLY -->\n<ng-template #tplRangePart let-partType=\"partType\">\n <div class=\"{{ prefixCls }}-range-part {{ prefixCls }}-range-{{ partType }}\">\n <div style=\"outline: none\">\n <ng-container *ngTemplateOutlet=\"tplInnerPopup; context: { partType: partType }\"></ng-container>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThyNav, selector: "thy-nav", inputs: ["thyType", "thySize", "thyHorizontal", "thyVertical", "thyFill", "thyResponsive", "thyInsideClosable", "thyExtra"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyButtonIcon, selector: "thy-button-icon,[thy-button-icon],[thyButtonIcon]", inputs: ["thySize", "thyIcon", "thyButtonIcon", "thyShape", "thyLight", "thyActive", "thyTheme", "thyColor"] }, { kind: "component", type: DateCarousel, selector: "date-carousel", inputs: ["activeDate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InnerPopup, selector: "inner-popup", inputs: ["showWeek", "isRange", "activeDate", "rangeActiveDate", "enablePrev", "enableNext", "disabledDate", "dateRender", "selectedValue", "hoverValue", "panelMode", "showDateRangeInput", "partType", "endPanelMode", "value"], outputs: ["panelModeChange", "headerChange", "selectDate", "dayHover"], exportAs: ["innerPopup"] }, { kind: "component", type: CalendarFooter, selector: "calendar-footer", inputs: ["showTime", "mustShowTime", "value", "disableTimeConfirm"], outputs: ["selectTime", "clickOk", "clickRemove", "showTimePickerChange"], exportAs: ["calendarFooter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
492
493
|
}
|
|
493
494
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: DatePopup, decorators: [{
|
|
494
495
|
type: Component,
|
|
@@ -542,6 +543,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
|
542
543
|
type: Input
|
|
543
544
|
}], flexibleDateGranularity: [{
|
|
544
545
|
type: Input
|
|
546
|
+
}], timestampPrecision: [{
|
|
547
|
+
type: Input
|
|
545
548
|
}], panelModeChange: [{
|
|
546
549
|
type: Output
|
|
547
550
|
}], calendarChange: [{
|
|
@@ -555,4 +558,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
|
555
558
|
}], dateValueChange: [{
|
|
556
559
|
type: Output
|
|
557
560
|
}] } });
|
|
558
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvZGF0ZS1waWNrZXIvbGliL3BvcHVwcy9kYXRlLXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9kYXRlLXBpY2tlci9saWIvcG9wdXBzL2RhdGUtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEQsT0FBTyxFQUFnQixRQUFRLEVBQXdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkksT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFhN0csT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztB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Q1A7d0JBQ0wsSUFBSTt3QkFDSixLQUFLO3dCQUNMLE1BQU07d0JBQ04sbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCLFVBQVU7d0JBQ1YsY0FBYztxQkFDakI7K0hBR1EsT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRWEsZUFBZTtzQkFBakMsTUFBTTtnQkFDWSxjQUFjO3NCQUFoQyxNQUFNO2dCQUNZLFdBQVc7c0JBQTdCLE1BQU07Z0JBQ1ksUUFBUTtzQkFBMUIsTUFBTTtnQkFDWSxvQkFBb0I7c0JBQXRDLE1BQU07Z0JBQ1ksZUFBZTtzQkFBakMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVuZE9mRGF5LCBzdGFydE9mRGF5IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgRnVuY3Rpb25Qcm9wLCBUaW55RGF0ZSwgVGlueURhdGVDb21wYXJlR3JhaW4sIGhlbHBlcnMsIGlzRnVuY3Rpb24sIGlzVW5kZWZpbmVkT3JOdWxsLCBzb3J0UmFuZ2VWYWx1ZSB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5cbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeUJ1dHRvbkljb24gfSBmcm9tICduZ3gtdGV0aHlzL2J1dHRvbic7XG5pbXBvcnQgeyBUaHlOYXYsIFRoeU5hdkl0ZW1EaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL25hdic7XG5pbXBvcnQgeyBUaHlEYXRlUGlja2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL2RhdGUtcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcGF0aWJsZVZhbHVlLCBEYXRlUGlja2VyRmxleGlibGVUYWIsIFJhbmdlQWR2YW5jZWRWYWx1ZSwgUmFuZ2VQYXJ0VHlwZSB9IGZyb20gJy4uLy4uL2lubmVyLXR5cGVzJztcbmltcG9ydCB7IGRhdGVBZGRBbW91bnQsIGdldFNob3J0Y3V0VmFsdWUsIGhhc1ZhbHVlLCBtYWtlVmFsdWUsIHRyYW5zZm9ybURhdGVWYWx1ZSB9IGZyb20gJy4uLy4uL3BpY2tlci51dGlsJztcbmltcG9ydCB7XG4gICAgQ29tcGF0aWJsZURhdGUsXG4gICAgQ29tcGF0aWJsZVByZXNldHMsXG4gICAgRGlzYWJsZWREYXRlRm4sXG4gICAgU3VwcG9ydFRpbWVPcHRpb25zLFxuICAgIFRoeURhdGVDaGFuZ2VFdmVudCxcbiAgICBUaHlEYXRlR3JhbnVsYXJpdHksXG4gICAgVGh5UGFuZWxNb2RlLFxuICAgIFRoeVNob3J0Y3V0UG9zaXRpb24sXG4gICAgVGh5U2hvcnRjdXRQcmVzZXQsXG4gICAgVGh5U2hvcnRjdXRWYWx1ZVxufSBmcm9tICcuLi8uLi9zdGFuZGFyZC10eXBlcyc7XG5pbXBvcnQgeyBDYWxlbmRhckZvb3RlciB9IGZyb20gJy4uL2NhbGVuZGFyL2NhbGVuZGFyLWZvb3Rlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZUNhcm91c2VsIH0gZnJvbSAnLi4vZGF0ZS1jYXJvdXNlbC9kYXRlLWNhcm91c2VsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbm5lclBvcHVwIH0gZnJvbSAnLi9pbm5lci1wb3B1cC5jb21wb25lbnQnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdkYXRlLXBvcHVwJyxcbiAgICBleHBvcnRBczogJ2RhdGVQb3B1cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgVGh5TmF2LFxuICAgICAgICBUaHlOYXZJdGVtRGlyZWN0aXZlLFxuICAgICAgICBUaHlCdXR0b25JY29uLFxuICAgICAgICBEYXRlQ2Fyb3VzZWwsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBJbm5lclBvcHVwLFxuICAgICAgICBDYWxlbmRhckZvb3RlclxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBvcHVwIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIEBJbnB1dCgpIGlzUmFuZ2U6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2hvd1dlZWs6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBmb3JtYXQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBkaXNhYmxlZERhdGU6IERpc2FibGVkRGF0ZUZuO1xuICAgIEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBudW1iZXI7XG4gICAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IG51bWJlcjtcbiAgICBASW5wdXQoKSBzaG93VG9kYXk6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmlK/mjIHorr7nva7ml7bpl7Qo5pe244CB5YiGKVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNob3dUaW1lOiBTdXBwb3J0VGltZU9wdGlvbnMgfCBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5bGV56S65pe26Ze0KOaXtuOAgeWIhilcbiAgICAgKi9cbiAgICBASW5wdXQoKSBtdXN0U2hvd1RpbWU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBkYXRlUmVuZGVyOiBGdW5jdGlvblByb3A8VGVtcGxhdGVSZWY8RGF0ZT4gfCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBhbmVsTW9kZTogVGh5UGFuZWxNb2RlIHwgVGh5UGFuZWxNb2RlW107XG4gICAgQElucHV0KCkgdmFsdWU6IENvbXBhdGlibGVWYWx1ZTtcbiAgICBASW5wdXQoKSBkZWZhdWx0UGlja2VyVmFsdWU6IENvbXBhdGlibGVEYXRlIHwgbnVtYmVyO1xuXG4gICAgQElucHV0KCkgc2hvd1Nob3J0Y3V0OiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgc2hvcnRjdXRQcmVzZXRzOiBDb21wYXRpYmxlUHJlc2V0cztcblxuICAgIEBJbnB1dCgpIHNob3J0Y3V0UG9zaXRpb246IFRoeVNob3J0Y3V0UG9zaXRpb247XG5cbiAgICBASW5wdXQoKSBmbGV4aWJsZTogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIGZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5OiBUaHlEYXRlR3JhbnVsYXJpdHk7XG5cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFuZWxNb2RlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlQYW5lbE1vZGUgfCBUaHlQYW5lbE1vZGVbXT4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgY2FsZW5kYXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBhdGlibGVWYWx1ZT4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBhdGlibGVWYWx1ZSB8IFJhbmdlQWR2YW5jZWRWYWx1ZT4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVzdWx0T2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7IC8vIEVtaXR0ZWQgd2hlbiBkb25lIHdpdGggZGF0ZSBzZWxlY3RpbmdcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgc2hvd1RpbWVQaWNrZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGRhdGVWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5RGF0ZUNoYW5nZUV2ZW50PigpO1xuXG4gICAgcHJlZml4Q2xzID0gJ3RoeS1jYWxlbmRhcic7XG4gICAgc2hvd1RpbWVQaWNrZXIgPSBmYWxzZTtcbiAgICB0aW1lT3B0aW9uczogU3VwcG9ydFRpbWVPcHRpb25zIHwgU3VwcG9ydFRpbWVPcHRpb25zW10gfCBudWxsO1xuICAgIGFjdGl2ZURhdGU6IFRpbnlEYXRlIHwgVGlueURhdGVbXTtcbiAgICBzZWxlY3RlZFZhbHVlOiBUaW55RGF0ZVtdID0gW107IC8vIFJhbmdlIE9OTFlcbiAgICBob3ZlclZhbHVlOiBUaW55RGF0ZVtdID0gW107IC8vIFJhbmdlIE9OTFlcblxuICAgIGFkdmFuY2VkU2VsZWN0ZWRWYWx1ZTogUmFuZ2VBZHZhbmNlZFZhbHVlOyAvLyBhZHZhbmNlZCBPTkxZXG5cbiAgICBmbGV4aWJsZUFjdGl2ZVRhYjogRGF0ZVBpY2tlckZsZXhpYmxlVGFiID0gJ2FkdmFuY2VkJztcblxuICAgIGdldCBoYXNUaW1lUGlja2VyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnNob3dUaW1lO1xuICAgIH1cbiAgICBwcml2YXRlIHBhcnRUeXBlTWFwOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0geyBsZWZ0OiAwLCByaWdodDogMSB9O1xuXG4gICAgW3Byb3BlcnR5OiBzdHJpbmddOiBhbnk7XG5cbiAgICBlbmRQYW5lbE1vZGU6IFRoeVBhbmVsTW9kZSB8IFRoeVBhbmVsTW9kZVtdO1xuXG4gICAgaW5uZXJTaG9ydGN1dFByZXNldHM6IFRoeVNob3J0Y3V0UHJlc2V0W107XG5cbiAgICBkaXNhYmxlVGltZUNvbmZpcm0gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBkYXRlUGlja2VyQ29uZmlnU2VydmljZTogVGh5RGF0ZVBpY2tlckNvbmZpZ1NlcnZpY2UpIHt9XG5cbiAgICBzZXRQcm9wZXJ0eTxUIGV4dGVuZHMga2V5b2YgRGF0ZVBvcHVwPihrZXk6IFQsIHZhbHVlOiB0aGlzW1RdKTogdm9pZCB7XG4gICAgICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0U2hvcnRjdXRQcmVzZXRzKCk7XG4gICAgICAgIHRoaXMuaW5pdFBhbmVsTW9kZSgpO1xuICAgICAgICBpZiAodGhpcy5mbGV4aWJsZSAmJiB0aGlzLmZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5ID09PSAnZGF5Jykge1xuICAgICAgICAgICAgdGhpcy5mbGV4aWJsZUFjdGl2ZVRhYiA9ICdjdXN0b20nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRQaWNrZXJWYWx1ZSAmJiAhaGFzVmFsdWUodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRyYW5zZm9ybURhdGVWYWx1ZSh0aGlzLmRlZmF1bHRQaWNrZXJWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbWFrZVZhbHVlKHZhbHVlLCB0aGlzLmlzUmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRGF0ZSgpO1xuICAgICAgICB0aGlzLmluaXREaXNhYmxlZERhdGUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSAmJiB0aGlzLmZsZXhpYmxlICYmIHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZWRTZWxlY3RlZFZhbHVlID0ge1xuICAgICAgICAgICAgICAgIGJlZ2luOiB0aGlzLnZhbHVlWzBdLFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy52YWx1ZVsxXSxcbiAgICAgICAgICAgICAgICBkYXRlR3JhbnVsYXJpdHk6IHRoaXMuZmxleGlibGVEYXRlR3JhbnVsYXJpdHlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnBhbmVsTW9kZSkge1xuICAgICAgICAgICAgaWYgKGhlbHBlcnMuaXNBcnJheSh0aGlzLnBhbmVsTW9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFBhbmVsTW9kZSA9IFsuLi50aGlzLnBhbmVsTW9kZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kUGFuZWxNb2RlID0gdGhpcy5wYW5lbE1vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuZGVmYXVsdFBpY2tlclZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZURhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy52YWx1ZSAmJiBjaGFuZ2VzLnZhbHVlLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVEYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0U2hvcnRjdXRQcmVzZXRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHNob3J0Y3V0UmFuZ2VzUHJlc2V0cywgc2hvcnRjdXREYXRlUHJlc2V0cywgc2hvd1Nob3J0Y3V0IH0gPSB0aGlzLmRhdGVQaWNrZXJDb25maWdTZXJ2aWNlO1xuXG4gICAgICAgIHRoaXMuc2hvd1Nob3J0Y3V0ID1cbiAgICAgICAgICAgIFsnZGF0ZScsICdkYXRlLGRhdGUnXS5pbmNsdWRlcyh0aGlzLnBhbmVsTW9kZS50b1N0cmluZygpKSAmJiBpc1VuZGVmaW5lZE9yTnVsbCh0aGlzLnNob3dTaG9ydGN1dClcbiAgICAgICAgICAgICAgICA/IHNob3dTaG9ydGN1dFxuICAgICAgICAgICAgICAgIDogdGhpcy5zaG93U2hvcnRjdXQ7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd1Nob3J0Y3V0KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvcnRjdXRQcmVzZXRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG9ydGN1dFByZXNldHMgPSB0aGlzLmlzUmFuZ2UgPyBzaG9ydGN1dFJhbmdlc1ByZXNldHMgOiBzaG9ydGN1dERhdGVQcmVzZXRzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlubmVyU2hvcnRjdXRQcmVzZXRzID0gaXNGdW5jdGlvbih0aGlzLnNob3J0Y3V0UHJlc2V0cykgPyB0aGlzLnNob3J0Y3V0UHJlc2V0cygpIDogdGhpcy5zaG9ydGN1dFByZXNldHM7XG4gICAgICAgICAgICBpZiAodGhpcy5pbm5lclNob3J0Y3V0UHJlc2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5EYXRlOiBUaW55RGF0ZSA9IHRoaXMuZ2V0TWluVGlueURhdGUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXRlOiBUaW55RGF0ZSA9IHRoaXMuZ2V0TWF4VGlueURhdGUoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1pblRpbWUgPSBtaW5EYXRlID8gbWluRGF0ZS5nZXRUaW1lKCkgOiBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFRpbWUgPSBtYXhEYXRlID8gbWF4RGF0ZS5nZXRUaW1lKCkgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubmVyU2hvcnRjdXRQcmVzZXRzLmZvckVhY2goKHByZXNldDogVGh5U2hvcnRjdXRQcmVzZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZ2luOiBudW1iZXIgfCBEYXRlID0gZ2V0U2hvcnRjdXRWYWx1ZShwcmVzZXQudmFsdWVbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVnaW5UaW1lOiBudW1iZXIgPSBuZXcgVGlueURhdGUoc3RhcnRPZkRheShiZWdpbikpLmdldFRpbWUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kOiBudW1iZXIgfCBEYXRlID0gZ2V0U2hvcnRjdXRWYWx1ZShwcmVzZXQudmFsdWVbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZTogbnVtYmVyID0gbmV3IFRpbnlEYXRlKGVuZE9mRGF5KGVuZCkpLmdldFRpbWUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtaW5EYXRlICYmIGVuZFRpbWUgPCBtaW5UaW1lKSB8fCAobWF4RGF0ZSAmJiBiZWdpblRpbWUgPiBtYXhUaW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNldC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNldC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubmVyU2hvcnRjdXRQcmVzZXRzLmZvckVhY2goKHByZXNldDogVGh5U2hvcnRjdXRQcmVzZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpbmdsZVZhbHVlOiBudW1iZXIgfCBEYXRlID0gZ2V0U2hvcnRjdXRWYWx1ZShwcmVzZXQudmFsdWUgYXMgVGh5U2hvcnRjdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaW5nbGVUaW1lOiBudW1iZXIgPSBuZXcgVGlueURhdGUoc2luZ2xlVmFsdWUpLmdldFRpbWUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtaW5EYXRlICYmIHNpbmdsZVRpbWUgPCBtaW5UaW1lKSB8fCAobWF4RGF0ZSAmJiBzaW5nbGVUaW1lID4gbWF4VGltZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQWN0aXZlRGF0ZSgpIHtcbiAgICAgICAgdGhpcy5jbGVhckhvdmVyVmFsdWUoKTtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0cmFuc2Zvcm1EYXRlVmFsdWUodGhpcy5kZWZhdWx0UGlja2VyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG1ha2VWYWx1ZSh2YWx1ZSwgdGhpcy5pc1JhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmxleGlibGUgfHwgdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eSA9PT0gJ2RheScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnZhbHVlIGFzIFRpbnlEYXRlW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLm5vcm1hbGl6ZVJhbmdlVmFsdWUodGhpcy52YWx1ZSBhcyBUaW55RGF0ZVtdLCB0aGlzLmdldFBhbmVsTW9kZSh0aGlzLmVuZFBhbmVsTW9kZSkgYXMgVGh5UGFuZWxNb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMudmFsdWUgYXMgVGlueURhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0Rpc2FibGVUaW1lQ29uZmlybSgpO1xuICAgIH1cblxuICAgIGluaXRQYW5lbE1vZGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmRQYW5lbE1vZGUpIHtcbiAgICAgICAgICAgIGlmIChoZWxwZXJzLmlzQXJyYXkodGhpcy5wYW5lbE1vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRQYW5lbE1vZGUgPSBbLi4udGhpcy5wYW5lbE1vZGVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFBhbmVsTW9kZSA9IHRoaXMucGFuZWxNb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhlbHBlcnMuaXNBcnJheSh0aGlzLmVuZFBhbmVsTW9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsTW9kZSA9IFsuLi50aGlzLmVuZFBhbmVsTW9kZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGFuZWxNb2RlID0gdGhpcy5lbmRQYW5lbE1vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0RGlzYWJsZWREYXRlKCk6IHZvaWQge1xuICAgICAgICBsZXQgbWluRGF0ZTogVGlueURhdGU7XG4gICAgICAgIGxldCBtYXhEYXRlOiBUaW55RGF0ZTtcbiAgICAgICAgbGV0IGRpc2FibGVkRGF0ZUZuOiBEaXNhYmxlZERhdGVGbjtcbiAgICAgICAgaWYgKHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdHJhbnNmb3JtRGF0ZVZhbHVlKHRoaXMubWluRGF0ZSk7XG4gICAgICAgICAgICBtaW5EYXRlID0gbmV3IFRpbnlEYXRlKHZhbHVlIGFzIERhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1heERhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRyYW5zZm9ybURhdGVWYWx1ZSh0aGlzLm1heERhdGUpO1xuICAgICAgICAgICAgbWF4RGF0ZSA9IG5ldyBUaW55RGF0ZSh2YWx1ZSBhcyBEYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZERhdGUpIHtcbiAgICAgICAgICAgIGRpc2FibGVkRGF0ZUZuID0gdGhpcy5kaXNhYmxlZERhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGUgPSBkID0+IHtcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAobWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBkIDwgbWluRGF0ZS5zdGFydE9mRGF5KCkubmF0aXZlRGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXhEYXRlICYmICFleHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGQgPiBtYXhEYXRlLmVuZE9mRGF5KCkubmF0aXZlRGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkaXNhYmxlZERhdGVGbiAmJiB0eXBlb2YgZGlzYWJsZWREYXRlRm4gPT09ICdmdW5jdGlvbicgJiYgIWV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gZGlzYWJsZWREYXRlRm4oZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBvblNob3dUaW1lUGlja2VyQ2hhbmdlKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93VGltZVBpY2tlciA9IHNob3c7XG4gICAgICAgIHRoaXMuc2hvd1RpbWVQaWNrZXJDaGFuZ2UuZW1pdChzaG93KTtcbiAgICB9XG5cbiAgICBvbkNsaWNrT2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5yZXN1bHRPay5lbWl0KCk7XG4gICAgfVxuXG4gICAgb25DbGlja1JlbW92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNSYW5nZSA/IFtdIDogbnVsbDtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIG9uRGF5SG92ZXIodmFsdWU6IFRpbnlEYXRlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UgJiYgdGhpcy5zZWxlY3RlZFZhbHVlWzBdICYmICF0aGlzLnNlbGVjdGVkVmFsdWVbMV0pIHtcbiAgICAgICAgICAgIC8vIFdoZW4gcmlnaHQgdmFsdWUgaXMgc2VsZWN0ZWQsIGRvbid0IGRvIGhvdmVyXG4gICAgICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5zZWxlY3RlZFZhbHVlWzBdOyAvLyBVc2UgdGhlIGxlZnQgb2Ygc2VsZWN0ZWQgdmFsdWUgYXMgdGhlIGJhc2UgdG8gZGVjaWRlIGxhdGVyIGhvdmVyVmFsdWVcbiAgICAgICAgICAgIGlmIChiYXNlLmlzQmVmb3JlRGF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJWYWx1ZSA9IFtiYXNlLCB2YWx1ZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJWYWx1ZSA9IFt2YWx1ZSwgYmFzZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblBhbmVsTW9kZUNoYW5nZShtb2RlOiBUaHlQYW5lbE1vZGUsIHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICAodGhpcy5wYW5lbE1vZGUgYXMgVGh5UGFuZWxNb2RlW10pW3RoaXMuZ2V0UGFydFR5cGVJbmRleChwYXJ0VHlwZSldID0gbW9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxNb2RlID0gbW9kZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhbmVsTW9kZUNoYW5nZS5lbWl0KHRoaXMucGFuZWxNb2RlKTtcbiAgICB9XG5cbiAgICBvbkhlYWRlckNoYW5nZSh2YWx1ZTogVGlueURhdGUsIHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGVbdGhpcy5nZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlKV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMubm9ybWFsaXplUmFuZ2VWYWx1ZShcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgYXMgVGlueURhdGVbXSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBhbmVsTW9kZSh0aGlzLmVuZFBhbmVsTW9kZSwgcGFydFR5cGUpIGFzIFRoeVBhbmVsTW9kZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TZWxlY3RUaW1lKHZhbHVlOiBUaW55RGF0ZSwgcGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIC8vIFRPRE86cmFuZ2UgcGlja2VyIHNldCB0aW1lXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKG5ldyBUaW55RGF0ZSh2YWx1ZS5uYXRpdmVEYXRlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RUYWIoYWN0aXZlOiBEYXRlUGlja2VyRmxleGlibGVUYWIpIHtcbiAgICAgICAgdGhpcy5mbGV4aWJsZUFjdGl2ZVRhYiA9IGFjdGl2ZTtcbiAgICB9XG5cbiAgICBjbGVhckZsZXhpYmxlVmFsdWUoKSB7XG4gICAgICAgIHRoaXMuZmxleGlibGVEYXRlR3JhbnVsYXJpdHkgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5mbGV4aWJsZUFjdGl2ZVRhYiA9PT0gJ2FkdmFuY2VkJykge1xuICAgICAgICAgICAgdGhpcy5hZHZhbmNlZFNlbGVjdGVkVmFsdWUgPSB7fTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBiZWdpbjogbnVsbCxcbiAgICAgICAgICAgIGVuZDogbnVsbCxcbiAgICAgICAgICAgIGRhdGVHcmFudWxhcml0eTogdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VWYWx1ZUZyb21BZHZhbmNlZFNlbGVjdCh2YWx1ZTogUmFuZ2VBZHZhbmNlZFZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIC8vIGNsZWFyIGN1c3RvbSBkYXRlIHdoZW4gc2VsZWN0IGEgYWR2YW5jZWQgZGF0ZVxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBbXTtcbiAgICAgICAgdGhpcy5kYXRlVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICB2YWx1ZTogW3ZhbHVlLmJlZ2luLCB2YWx1ZS5lbmRdXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZVZhbHVlRnJvbVNlbGVjdCh2YWx1ZTogVGlueURhdGUsIHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICAvLyBjbGVhciBhZHZhbmNlZCBkYXRlIHdoZW4gc2VsZWN0IGEgY3VzdG9tIGRhdGVcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZWRTZWxlY3RlZFZhbHVlID0ge307XG5cbiAgICAgICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSB0aGlzLnNlbGVjdGVkVmFsdWUgYXMgVGlueURhdGVbXTtcblxuICAgICAgICAgICAgaWYgKCghbGVmdCAmJiAhcmlnaHQpIHx8IChsZWZ0ICYmIHJpZ2h0KSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRvdGFsbHkgZnVsbCBvciBlbXB0eSwgY2xlYW4gdXAgJiYgcmUtYXNzaWduIGxlZnQgZmlyc3RcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWUgPSBbdmFsdWVdO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFtuZXcgVGlueURhdGUoc3RhcnRPZkRheSh0aGlzLnNlbGVjdGVkVmFsdWVbMF0ubmF0aXZlRGF0ZSkpXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyQ2hhbmdlLmVtaXQoW3RoaXMuc2VsZWN0ZWRWYWx1ZVswXS5jbG9uZSgpXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQgJiYgIXJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgb25lIG9mIHRoZW0gaXMgZW1wdHksIGFzc2lnbiB0aGUgb3RoZXIgb25lIGFuZCBzb3J0LCB0aGVuIHNldCB0aGUgZmluYWwgdmFsdWVzXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckhvdmVyVmFsdWUoKTsgLy8gQ2xlYW4gdXBcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWUoJ3JpZ2h0JywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHNvcnRSYW5nZVZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7IC8vIFNvcnRcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBbXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUaW55RGF0ZShzdGFydE9mRGF5KHRoaXMuc2VsZWN0ZWRWYWx1ZVswXS5uYXRpdmVEYXRlKSksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUaW55RGF0ZShlbmRPZkRheSh0aGlzLnNlbGVjdGVkVmFsdWVbMV0ubmF0aXZlRGF0ZSkpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLm5vcm1hbGl6ZVJhbmdlVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRQYW5lbE1vZGUodGhpcy5lbmRQYW5lbE1vZGUsIHBhcnRUeXBlKSBhcyBUaHlQYW5lbE1vZGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5jbG9uZVJhbmdlRGF0ZSh0aGlzLnNlbGVjdGVkVmFsdWUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyQ2hhbmdlLmVtaXQodGhpcy5jbG9uZVJhbmdlRGF0ZSh0aGlzLnNlbGVjdGVkVmFsdWUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2xvbmVSYW5nZURhdGUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0gdGhpcy51cGRhdGVIb3VyTWludXRlKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodXBkYXRlZFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiB1cGRhdGVkVmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVIb3VyTWludXRlKHZhbHVlOiBUaW55RGF0ZSk6IFRpbnlEYXRlIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JpZ2luRGF0ZSA9IHRoaXMudmFsdWUgYXMgVGlueURhdGU7XG4gICAgICAgIGNvbnN0IGRhdGVUaW1lID0gW3ZhbHVlLmdldEhvdXJzKCksIHZhbHVlLmdldE1pbnV0ZXMoKSwgdmFsdWUuZ2V0U2Vjb25kcygpXTtcbiAgICAgICAgY29uc3Qgb3JpZ2luRGF0ZVRpbWUgPSBbb3JpZ2luRGF0ZS5nZXRIb3VycygpLCBvcmlnaW5EYXRlLmdldE1pbnV0ZXMoKSwgb3JpZ2luRGF0ZS5nZXRTZWNvbmRzKCldO1xuXG4gICAgICAgIGNvbnN0IGlzRXF1YWxUaW1lID0gZGF0ZVRpbWUudG9TdHJpbmcoKSA9PT0gb3JpZ2luRGF0ZVRpbWUudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGlzRXF1YWxUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc2V0SG1zKG9yaWdpbkRhdGVUaW1lWzBdLCBvcmlnaW5EYXRlVGltZVsxXSwgb3JpZ2luRGF0ZVRpbWVbMl0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5hYmxlUHJldk5leHQoZGlyZWN0aW9uOiAncHJldicgfCAnbmV4dCcsIHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlICYmIHRoaXMucGFuZWxNb2RlID09PSB0aGlzLmVuZFBhbmVsTW9kZSkge1xuICAgICAgICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gdGhpcy5hY3RpdmVEYXRlIGFzIFRpbnlEYXRlW107XG4gICAgICAgICAgICBjb25zdCBzaG93TWlkZGxlID0gIXN0YXJ0LmFkZE1vbnRocygxKS5pc1NhbWUoZW5kLCAnbW9udGgnKTsgLy8gT25lIG1vbnRoIGRpZmYgdGhlbiBkb24ndCBzaG93IG1pZGRsZSBwcmV2L25leHRcbiAgICAgICAgICAgIGlmICgocGFydFR5cGUgPT09ICdsZWZ0JyAmJiBkaXJlY3Rpb24gPT09ICduZXh0JykgfHwgKHBhcnRUeXBlID09PSAncmlnaHQnICYmIGRpcmVjdGlvbiA9PT0gJ3ByZXYnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG93TWlkZGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFBhbmVsTW9kZShwYW5lbE1vZGU6IFRoeVBhbmVsTW9kZSB8IFRoeVBhbmVsTW9kZVtdLCBwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiBUaHlQYW5lbE1vZGUge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFuZWxNb2RlW3RoaXMuZ2V0UGFydFR5cGVJbmRleChwYXJ0VHlwZSldIGFzIFRoeVBhbmVsTW9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYW5lbE1vZGUgYXMgVGh5UGFuZWxNb2RlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVCeVNlbGVjdG9yKHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IFRpbnlEYXRlIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVTaG93ID0gdGhpcy5zZWxlY3RlZFZhbHVlOyAvLyBVc2UgdGhlIHJlYWwgdGltZSB2YWx1ZSB0aGF0IHdpdGhvdXQgZGVjb3JhdGlvbnMgd2hlbiB0aW1lcGlja2VyIGlzIHNob3duIHVwXG4gICAgICAgICAgICByZXR1cm4gKHZhbHVlU2hvdyBhcyBUaW55RGF0ZVtdKVt0aGlzLmdldFBhcnRUeXBlSW5kZXgocGFydFR5cGUpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlIGFzIFRpbnlEYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QWN0aXZlRGF0ZShwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiBUaW55RGF0ZSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZURhdGVbdGhpcy5nZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlIGFzIFRpbnlEYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UGFydFR5cGVJbmRleChwYXJ0VHlwZTogUmFuZ2VQYXJ0VHlwZSA9ICdsZWZ0Jyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnRUeXBlTWFwW3BhcnRUeXBlXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1pblRpbnlEYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW5EYXRlID8gbmV3IFRpbnlEYXRlKHRyYW5zZm9ybURhdGVWYWx1ZSh0aGlzLm1pbkRhdGUpLnZhbHVlIGFzIERhdGUpIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1heFRpbnlEYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhEYXRlID8gbmV3IFRpbnlEYXRlKHRyYW5zZm9ybURhdGVWYWx1ZSh0aGlzLm1heERhdGUpLnZhbHVlIGFzIERhdGUpIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFySG92ZXJWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3ZlclZhbHVlID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogQ29tcGF0aWJsZVZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSAmJiB0aGlzLmZsZXhpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5ID0gJ2RheSc7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIGJlZ2luOiB2YWx1ZVswXSxcbiAgICAgICAgICAgICAgICBlbmQ6IHZhbHVlWzFdLFxuICAgICAgICAgICAgICAgIGRhdGVHcmFudWxhcml0eTogdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1RpbWUgfHwgIXRoaXMuc2hvd1RpbWVQaWNrZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0Rpc2FibGVUaW1lQ29uZmlybSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplUmFuZ2VWYWx1ZSh2YWx1ZTogVGlueURhdGVbXSwgbW9kZTogVGh5UGFuZWxNb2RlID0gJ21vbnRoJyk6IFRpbnlEYXRlW10ge1xuICAgICAgICBjb25zdCBoZWFkZXJNb2RlczogeyBba2V5IGluIFRoeVBhbmVsTW9kZV0/OiBUaHlQYW5lbE1vZGUgfSA9IHtcbiAgICAgICAgICAgIHdlZWs6ICdtb250aCcsXG4gICAgICAgICAgICBkYXRlOiAnbW9udGgnLFxuICAgICAgICAgICAgbW9udGg6ICd5ZWFyJyxcbiAgICAgICAgICAgIHF1YXJ0ZXI6ICd5ZWFyJyxcbiAgICAgICAgICAgIHllYXI6ICdkZWNhZGUnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhlYWRlck1vZGUgPSBoZWFkZXJNb2Rlc1ttb2RlXTtcbiAgICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gc3RhcnQgfHwgbmV3IFRpbnlEYXRlKCk7XG4gICAgICAgIGxldCBuZXdFbmQgPSBlbmQ7XG4gICAgICAgIGlmICghbmV3RW5kIHx8IG5ld1N0YXJ0LmlzU2FtZShlbmQsIGhlYWRlck1vZGUgYXMgVGlueURhdGVDb21wYXJlR3JhaW4pKSB7XG4gICAgICAgICAgICBuZXdFbmQgPSBkYXRlQWRkQW1vdW50KG5ld1N0YXJ0LCAxLCBoZWFkZXJNb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25ld1N0YXJ0LCBuZXdFbmRdO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UmFuZ2VWYWx1ZShwYXJ0VHlwZTogUmFuZ2VQYXJ0VHlwZSwgdmFsdWU6IFRpbnlEYXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZiA9ICh0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLmNsb25lUmFuZ2VEYXRlKHRoaXMuc2VsZWN0ZWRWYWx1ZSBhcyBUaW55RGF0ZVtdKSk7XG4gICAgICAgIHJlZlt0aGlzLmdldFBhcnRUeXBlSW5kZXgocGFydFR5cGUpXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvbmVSYW5nZURhdGUodmFsdWU6IFRpbnlEYXRlW10pOiBUaW55RGF0ZVtdIHtcbiAgICAgICAgcmV0dXJuIFt2YWx1ZVswXSAmJiB2YWx1ZVswXS5jbG9uZSgpLCB2YWx1ZVsxXSAmJiB2YWx1ZVsxXS5jbG9uZSgpXSBhcyBUaW55RGF0ZVtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNEaXNhYmxlVGltZUNvbmZpcm0oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UgfHwgIXRoaXMuc2hvd1RpbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGU6IFRpbnlEYXRlID0gdGhpcy52YWx1ZSA/ICh0aGlzLnZhbHVlIGFzIFRpbnlEYXRlKSA6IG5ldyBUaW55RGF0ZSgpO1xuICAgICAgICBjb25zdCBtaW5EYXRlOiBUaW55RGF0ZSA9IHRoaXMuZ2V0TWluVGlueURhdGUoKTtcbiAgICAgICAgY29uc3QgbWF4RGF0ZTogVGlueURhdGUgPSB0aGlzLmdldE1heFRpbnlEYXRlKCk7XG5cbiAgICAgICAgaWYgKChtaW5EYXRlICYmIGRhdGUuZ2V0VGltZSgpIDwgbWluRGF0ZS5nZXRUaW1lKCkpIHx8IChtYXhEYXRlICYmIGRhdGUuZ2V0VGltZSgpID4gbWF4RGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVUaW1lQ29uZmlybSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVUaW1lQ29uZmlybSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZFNob3J0Y3V0UHJlc2V0KGRhdGU6IENvbXBhdGlibGVWYWx1ZSk6IENvbXBhdGlibGVWYWx1ZSB7XG4gICAgICAgIGNvbnN0IG1pbkRhdGU6IFRpbnlEYXRlID0gdGhpcy5nZXRNaW5UaW55RGF0ZSgpO1xuICAgICAgICBjb25zdCBtYXhEYXRlOiBUaW55RGF0ZSA9IHRoaXMuZ2V0TWF4VGlueURhdGUoKTtcblxuICAgICAgICBjb25zdCBtaW5UaW1lOiBudW1iZXIgPSAobWluRGF0ZSAmJiBtaW5EYXRlLmdldFRpbWUoKSkgfHwgbnVsbDtcbiAgICAgICAgY29uc3QgbWF4VGltZTogbnVtYmVyID0gKG1heERhdGUgJiYgbWF4RGF0ZS5nZXRUaW1lKCkpIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKGhlbHBlcnMuaXNBcnJheShkYXRlKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlOiBUaW55RGF0ZSA9IGRhdGVbMF07XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlOiBUaW55RGF0ZSA9IGRhdGVbMV07XG5cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZTogbnVtYmVyID0gc3RhcnREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWU6IG51bWJlciA9IGVuZERhdGUuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgICBpZiAoKG1heERhdGUgJiYgc3RhcnRUaW1lID4gbWF4VGltZSkgfHwgKG1pbkRhdGUgJiYgZW5kVGltZSA8IG1pblRpbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWluRGF0ZSAmJiBzdGFydFRpbWUgPCBtaW5UaW1lICYmIG1heERhdGUgJiYgZW5kVGltZSA+IG1heFRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW21pbkRhdGUsIG1heERhdGVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWluRGF0ZSAmJiBzdGFydFRpbWUgPCBtaW5UaW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFttaW5EYXRlLCBlbmREYXRlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1heERhdGUgJiYgZW5kVGltZSA+IG1heFRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3N0YXJ0RGF0ZSwgbWF4RGF0ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlVGltZTogbnVtYmVyID0gZGF0ZS5nZXRUaW1lKCk7XG5cbiAgICAgICAgICAgIGlmICgobWluRGF0ZSAmJiBzaW5nbGVUaW1lIDwgbWluVGltZSkgfHwgKG1heERhdGUgJiYgc2luZ2xlVGltZSA+IG1heFRpbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvcnRjdXRTZXRWYWx1ZShzaG9ydGN1dFByZXNldHM6IFRoeVNob3J0Y3V0UHJlc2V0KSB7XG4gICAgICAgIGlmIChzaG9ydGN1dFByZXNldHMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHNob3J0Y3V0UHJlc2V0cztcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGVjdGVkUHJlc2V0VmFsdWU6IENvbXBhdGlibGVWYWx1ZTtcbiAgICAgICAgaWYgKGhlbHBlcnMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZ2luOiBudW1iZXIgfCBEYXRlID0gZ2V0U2hvcnRjdXRWYWx1ZSh2YWx1ZVswXSk7XG4gICAgICAgICAgICBjb25zdCBlbmQ6IG51bWJlciB8IERhdGUgPSBnZXRTaG9ydGN1dFZhbHVlKHZhbHVlWzFdKTtcblxuICAgICAgICAgICAgaWYgKGJlZ2luICYmIGVuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuZ2V0U2VsZWN0ZWRTaG9ydGN1dFByZXNldChbXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUaW55RGF0ZShzdGFydE9mRGF5KGJlZ2luKSksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUaW55RGF0ZShlbmRPZkRheShlbmQpKVxuICAgICAgICAgICAgICAgIF0pIGFzIFRpbnlEYXRlW107XG5cbiAgICAgICAgICAgICAgICBzZWxlY3RlZFByZXNldFZhbHVlID0gdGhpcy5jbG9uZVJhbmdlRGF0ZSh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlRGF0ZTogbnVtYmVyIHwgRGF0ZSA9IGdldFNob3J0Y3V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlVGlueURhdGU6IFRpbnlEYXRlID0gdGhpcy51cGRhdGVIb3VyTWludXRlKG5ldyBUaW55RGF0ZShzaW5nbGVEYXRlKSk7XG4gICAgICAgICAgICBzZWxlY3RlZFByZXNldFZhbHVlID0gdGhpcy5nZXRTZWxlY3RlZFNob3J0Y3V0UHJlc2V0KHNpbmdsZVRpbnlEYXRlKSBhcyBUaW55RGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZhbHVlKHNlbGVjdGVkUHJlc2V0VmFsdWUpO1xuICAgICAgICB0aGlzLmRhdGVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHZhbHVlOiBoZWxwZXJzLmlzQXJyYXkodmFsdWUpID8gdGhpcy5zZWxlY3RlZFZhbHVlIDogc2VsZWN0ZWRQcmVzZXRWYWx1ZSxcbiAgICAgICAgICAgIHRyaWdnZXJQcmVzZXQ6IHNob3J0Y3V0UHJlc2V0c1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoZWxwZXJzLmlzQXJyYXkodmFsdWUpICYmIHRoaXMuc2hvd1RpbWUgJiYgdGhpcy5zaG93VGltZVBpY2tlcikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVEYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tcGlja2VyLWNvbnRhaW5lciB7eyBjbGFzc05hbWUgfX1cIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwie3sgcHJlZml4Q2xzIH19IHt7IHNob3dXZWVrID8gcHJlZml4Q2xzICsgJy13ZWVrLW51bWJlcicgOiAnJyB9fVxuICAgICB7eyBpc1JhbmdlID8gcHJlZml4Q2xzICsgJy1yYW5nZScgOiAnJyB9fSB7eyBwcmVmaXhDbHMgfX0tcGlja2VyLXNob3J0Y3V0LXt7IHNob3J0Y3V0UG9zaXRpb24gPT09ICdsZWZ0JyA/ICdsZWZ0JyA6ICdib3R0b20nIH19XCI+XG4gICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1waWNrZXItc2hvcnRjdXRcIiAqbmdJZj1cInNob3dTaG9ydGN1dFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInt7IHByZWZpeENscyB9fS1waWNrZXItc2hvcnRjdXQtaXRlbVwiXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaW5uZXJTaG9ydGN1dFByZXNldHM7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgIChjbGljayk9XCJzaG9ydGN1dFNldFZhbHVlKGl0ZW0pXCI+XG4gICAgICAgIHt7IGl0ZW0udGl0bGUgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tcGFuZWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tZGF0ZS1wYW5lbFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmxleGlibGU7IGVsc2UgZGVmYXVsdFBhbmVsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1kYXRlLXBhbmVsLWZsZXhpYmxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWRhdGUtcGFuZWwtZmxleGlibGUtdGFiXCI+XG4gICAgICAgICAgICAgIDx0aHktbmF2IHRoeVR5cGU9XCJwdWxsZWRcIiB0aHlTaXplPVwic21cIj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGh5TmF2TGluayBbdGh5TmF2TGlua0FjdGl2ZV09XCJmbGV4aWJsZUFjdGl2ZVRhYiA9PT0gJ2FkdmFuY2VkJ1wiIChjbGljayk9XCJzZWxlY3RUYWIoJ2FkdmFuY2VkJylcIlxuICAgICAgICAgICAgICAgICAgPumrmOe6p+mAiemhuTwvYVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGh5TmF2TGluayBbdGh5TmF2TGlua0FjdGl2ZV09XCJmbGV4aWJsZUFjdGl2ZVRhYiA9PT0gJ2N1c3RvbSdcIiAoY2xpY2spPVwic2VsZWN0VGFiKCdjdXN0b20nKVwiXG4gICAgICAgICAgICAgICAgICA+6Ieq5a6a5LmJPC9hXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3RoeS1uYXY+XG4gICAgICAgICAgICAgIDxidXR0b24gdGh5QnV0dG9uSWNvbj1cInN3ZWVwXCIgdGh5U2l6ZT1cInNtXCIgY2xhc3M9XCJjbGVhci1kYXRlLWJ1dHRvblwiIChjbGljayk9XCJjbGVhckZsZXhpYmxlVmFsdWUoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWRhdGUtcGFuZWwtYWR2YW5jZWRcIiBbaGlkZGVuXT1cImZsZXhpYmxlQWN0aXZlVGFiICE9PSAnYWR2YW5jZWQnXCI+XG4gICAgICAgICAgICAgICAgPGRhdGUtY2Fyb3VzZWxcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJkYXRlQ2Fyb3VzZWxcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVmFsdWVGcm9tQWR2YW5jZWRTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFkdmFuY2VkU2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbYWN0aXZlRGF0ZV09XCJzZWxlY3RlZFZhbHVlWzBdXCI+PC9kYXRlLWNhcm91c2VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cImZsZXhpYmxlQWN0aXZlVGFiICE9PSAnY3VzdG9tJ1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHBsSW5uZXJQb3B1cFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBhbmVsPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JhbmdlOyBlbHNlIHRwbFNpbmdsZVBhcnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxSYW5nZVBhcnQ7IGNvbnRleHQ6IHsgcGFydFR5cGU6ICdsZWZ0JyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHBsUmFuZ2VQYXJ0OyBjb250ZXh0OiB7IHBhcnRUeXBlOiAncmlnaHQnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUmFuZ2VcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxGb290ZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RwbElubmVyUG9wdXAgbGV0LXBhcnRUeXBlPVwicGFydFR5cGVcIj5cbiAgPGlubmVyLXBvcHVwXG4gICAgW3Nob3dXZWVrXT1cInNob3dXZWVrXCJcbiAgICBbaXNSYW5nZV09XCJpc1JhbmdlXCJcbiAgICBbcGFuZWxNb2RlXT1cImdldFBhbmVsTW9kZShwYW5lbE1vZGUsIHBhcnRUeXBlKVwiXG4gICAgW2VuZFBhbmVsTW9kZV09XCJnZXRQYW5lbE1vZGUoZW5kUGFuZWxNb2RlLCBwYXJ0VHlwZSlcIlxuICAgIFtwYXJ0VHlwZV09XCJwYXJ0VHlwZVwiXG4gICAgW3Nob3dEYXRlUmFuZ2VJbnB1dF09XCJmbGV4aWJsZSAmJiBmbGV4aWJsZUFjdGl2ZVRhYiA9PT0gJ2N1c3RvbSdcIlxuICAgIChwYW5lbE1vZGVDaGFuZ2UpPVwib25QYW5lbE1vZGVDaGFuZ2UoJGV2ZW50LCBwYXJ0VHlwZSlcIlxuICAgIFt2YWx1ZV09XCJnZXRWYWx1ZUJ5U2VsZWN0b3IocGFydFR5cGUpXCJcbiAgICBbc2VsZWN0ZWRWYWx1ZV09XCJzZWxlY3RlZFZhbHVlXCJcbiAgICBbYWN0aXZlRGF0ZV09XCJnZXRBY3RpdmVEYXRlKHBhcnRUeXBlKVwiXG4gICAgW3JhbmdlQWN0aXZlRGF0ZV09XCJhY3RpdmVEYXRlXCJcbiAgICBbZGlzYWJsZWREYXRlXT1cImRpc2FibGVkRGF0ZVwiXG4gICAgW2RhdGVSZW5kZXJdPVwiZGF0ZVJlbmRlclwiXG4gICAgW2hvdmVyVmFsdWVdPVwiaG92ZXJWYWx1ZVwiXG4gICAgW2VuYWJsZVByZXZdPVwiZW5hYmxlUHJldk5leHQoJ3ByZXYnLCBwYXJ0VHlwZSlcIlxuICAgIFtlbmFibGVOZXh0XT1cImVuYWJsZVByZXZOZXh0KCduZXh0JywgcGFydFR5cGUpXCJcbiAgICAoZGF5SG92ZXIpPVwib25EYXlIb3ZlcigkZXZlbnQpXCJcbiAgICAoc2VsZWN0RGF0ZSk9XCJjaGFuZ2VWYWx1ZUZyb21TZWxlY3QoJGV2ZW50LCBwYXJ0VHlwZSlcIlxuICAgIChoZWFkZXJDaGFuZ2UpPVwib25IZWFkZXJDaGFuZ2UoJGV2ZW50LCBwYXJ0VHlwZSlcIj48L2lubmVyLXBvcHVwPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cGxGb290ZXI+XG4gIDxjYWxlbmRhci1mb290ZXJcbiAgICBbc2hvd1RpbWVdPVwic2hvd1RpbWVcIlxuICAgIFttdXN0U2hvd1RpbWVdPVwibXVzdFNob3dUaW1lXCJcbiAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgIFtkaXNhYmxlVGltZUNvbmZpcm1dPVwiZGlzYWJsZVRpbWVDb25maXJtXCJcbiAgICAoc2hvd1RpbWVQaWNrZXJDaGFuZ2UpPVwib25TaG93VGltZVBpY2tlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAoc2VsZWN0VGltZSk9XCJvblNlbGVjdFRpbWUoJGV2ZW50KVwiXG4gICAgKGNsaWNrT2spPVwib25DbGlja09rKClcIlxuICAgIChjbGlja1JlbW92ZSk9XCJvbkNsaWNrUmVtb3ZlKClcIj48L2NhbGVuZGFyLWZvb3Rlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gU2luZ2xlIE9OTFkgLS0+XG48bmctdGVtcGxhdGUgI3RwbFNpbmdsZVBhcnQ+XG4gIDxkaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRwbElubmVyUG9wdXBcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFJhbmdlIE9OTFkgLS0+XG48bmctdGVtcGxhdGUgI3RwbFJhbmdlUGFydCBsZXQtcGFydFR5cGU9XCJwYXJ0VHlwZVwiPlxuICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LXJhbmdlLXBhcnQge3sgcHJlZml4Q2xzIH19LXJhbmdlLXt7IHBhcnRUeXBlIH19XCI+XG4gICAgPGRpdiBzdHlsZT1cIm91dGxpbmU6IG5vbmVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxJbm5lclBvcHVwOyBjb250ZXh0OiB7IHBhcnRUeXBlOiBwYXJ0VHlwZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
561
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvZGF0ZS1waWNrZXIvbGliL3BvcHVwcy9kYXRlLXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9kYXRlLXBpY2tlci9saWIvcG9wdXBzL2RhdGUtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEQsT0FBTyxFQUFnQixRQUFRLEVBQXdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkksT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLDRCQUE0QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFhM0ksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSww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QUFqQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5kT2ZEYXksIHN0YXJ0T2ZEYXkgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBGdW5jdGlvblByb3AsIFRpbnlEYXRlLCBUaW55RGF0ZUNvbXBhcmVHcmFpbiwgaGVscGVycywgaXNGdW5jdGlvbiwgaXNVbmRlZmluZWRPck51bGwsIHNvcnRSYW5nZVZhbHVlIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcblxuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeUJ1dHRvbkljb24gfSBmcm9tICduZ3gtdGV0aHlzL2J1dHRvbic7XG5pbXBvcnQgeyBUaHlOYXYsIFRoeU5hdkl0ZW1EaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL25hdic7XG5pbXBvcnQgeyBUaHlEYXRlUGlja2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL2RhdGUtcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcGF0aWJsZVZhbHVlLCBEYXRlUGlja2VyRmxleGlibGVUYWIsIFJhbmdlQWR2YW5jZWRWYWx1ZSwgUmFuZ2VQYXJ0VHlwZSB9IGZyb20gJy4uLy4uL2lubmVyLXR5cGVzJztcbmltcG9ydCB7IGRhdGVBZGRBbW91bnQsIGdldFNob3J0Y3V0VmFsdWUsIGhhc1ZhbHVlLCBtYWtlVmFsdWUsIHNldFZhbHVlQnlUaW1lc3RhbXBQcmVjaXNpb24sIHRyYW5zZm9ybURhdGVWYWx1ZSB9IGZyb20gJy4uLy4uL3BpY2tlci51dGlsJztcbmltcG9ydCB7XG4gICAgQ29tcGF0aWJsZURhdGUsXG4gICAgQ29tcGF0aWJsZVByZXNldHMsXG4gICAgRGlzYWJsZWREYXRlRm4sXG4gICAgU3VwcG9ydFRpbWVPcHRpb25zLFxuICAgIFRoeURhdGVDaGFuZ2VFdmVudCxcbiAgICBUaHlEYXRlR3JhbnVsYXJpdHksXG4gICAgVGh5UGFuZWxNb2RlLFxuICAgIFRoeVNob3J0Y3V0UG9zaXRpb24sXG4gICAgVGh5U2hvcnRjdXRQcmVzZXQsXG4gICAgVGh5U2hvcnRjdXRWYWx1ZVxufSBmcm9tICcuLi8uLi9zdGFuZGFyZC10eXBlcyc7XG5pbXBvcnQgeyBDYWxlbmRhckZvb3RlciB9IGZyb20gJy4uL2NhbGVuZGFyL2NhbGVuZGFyLWZvb3Rlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZUNhcm91c2VsIH0gZnJvbSAnLi4vZGF0ZS1jYXJvdXNlbC9kYXRlLWNhcm91c2VsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbm5lclBvcHVwIH0gZnJvbSAnLi9pbm5lci1wb3B1cC5jb21wb25lbnQnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdkYXRlLXBvcHVwJyxcbiAgICBleHBvcnRBczogJ2RhdGVQb3B1cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgVGh5TmF2LFxuICAgICAgICBUaHlOYXZJdGVtRGlyZWN0aXZlLFxuICAgICAgICBUaHlCdXR0b25JY29uLFxuICAgICAgICBEYXRlQ2Fyb3VzZWwsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBJbm5lclBvcHVwLFxuICAgICAgICBDYWxlbmRhckZvb3RlclxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBvcHVwIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIEBJbnB1dCgpIGlzUmFuZ2U6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2hvd1dlZWs6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBmb3JtYXQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBkaXNhYmxlZERhdGU6IERpc2FibGVkRGF0ZUZuO1xuICAgIEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBudW1iZXI7XG4gICAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IG51bWJlcjtcbiAgICBASW5wdXQoKSBzaG93VG9kYXk6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmlK/mjIHorr7nva7ml7bpl7Qo5pe244CB5YiGKVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNob3dUaW1lOiBTdXBwb3J0VGltZU9wdGlvbnMgfCBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5bGV56S65pe26Ze0KOaXtuOAgeWIhilcbiAgICAgKi9cbiAgICBASW5wdXQoKSBtdXN0U2hvd1RpbWU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBkYXRlUmVuZGVyOiBGdW5jdGlvblByb3A8VGVtcGxhdGVSZWY8RGF0ZT4gfCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBhbmVsTW9kZTogVGh5UGFuZWxNb2RlIHwgVGh5UGFuZWxNb2RlW107XG4gICAgQElucHV0KCkgdmFsdWU6IENvbXBhdGlibGVWYWx1ZTtcbiAgICBASW5wdXQoKSBkZWZhdWx0UGlja2VyVmFsdWU6IENvbXBhdGlibGVEYXRlIHwgbnVtYmVyO1xuXG4gICAgQElucHV0KCkgc2hvd1Nob3J0Y3V0OiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgc2hvcnRjdXRQcmVzZXRzOiBDb21wYXRpYmxlUHJlc2V0cztcblxuICAgIEBJbnB1dCgpIHNob3J0Y3V0UG9zaXRpb246IFRoeVNob3J0Y3V0UG9zaXRpb247XG5cbiAgICBASW5wdXQoKSBmbGV4aWJsZTogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIGZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5OiBUaHlEYXRlR3JhbnVsYXJpdHk7XG5cbiAgICBASW5wdXQoKSB0aW1lc3RhbXBQcmVjaXNpb246ICdzZWNvbmRzJyB8ICdtaWxsaXNlY29uZHMnO1xuXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHBhbmVsTW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5UGFuZWxNb2RlIHwgVGh5UGFuZWxNb2RlW10+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNhbGVuZGFyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wYXRpYmxlVmFsdWU+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wYXRpYmxlVmFsdWUgfCBSYW5nZUFkdmFuY2VkVmFsdWU+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHJlc3VsdE9rID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpOyAvLyBFbWl0dGVkIHdoZW4gZG9uZSB3aXRoIGRhdGUgc2VsZWN0aW5nXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNob3dUaW1lUGlja2VyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBkYXRlVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoeURhdGVDaGFuZ2VFdmVudD4oKTtcblxuICAgIHByZWZpeENscyA9ICd0aHktY2FsZW5kYXInO1xuICAgIHNob3dUaW1lUGlja2VyID0gZmFsc2U7XG4gICAgdGltZU9wdGlvbnM6IFN1cHBvcnRUaW1lT3B0aW9ucyB8IFN1cHBvcnRUaW1lT3B0aW9uc1tdIHwgbnVsbDtcbiAgICBhY3RpdmVEYXRlOiBUaW55RGF0ZSB8IFRpbnlEYXRlW107XG4gICAgc2VsZWN0ZWRWYWx1ZTogVGlueURhdGVbXSA9IFtdOyAvLyBSYW5nZSBPTkxZXG4gICAgaG92ZXJWYWx1ZTogVGlueURhdGVbXSA9IFtdOyAvLyBSYW5nZSBPTkxZXG5cbiAgICBhZHZhbmNlZFNlbGVjdGVkVmFsdWU6IFJhbmdlQWR2YW5jZWRWYWx1ZTsgLy8gYWR2YW5jZWQgT05MWVxuXG4gICAgZmxleGlibGVBY3RpdmVUYWI6IERhdGVQaWNrZXJGbGV4aWJsZVRhYiA9ICdhZHZhbmNlZCc7XG5cbiAgICBnZXQgaGFzVGltZVBpY2tlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zaG93VGltZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBwYXJ0VHlwZU1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHsgbGVmdDogMCwgcmlnaHQ6IDEgfTtcblxuICAgIFtwcm9wZXJ0eTogc3RyaW5nXTogYW55O1xuXG4gICAgZW5kUGFuZWxNb2RlOiBUaHlQYW5lbE1vZGUgfCBUaHlQYW5lbE1vZGVbXTtcblxuICAgIGlubmVyU2hvcnRjdXRQcmVzZXRzOiBUaHlTaG9ydGN1dFByZXNldFtdO1xuXG4gICAgZGlzYWJsZVRpbWVDb25maXJtID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZGF0ZVBpY2tlckNvbmZpZ1NlcnZpY2U6IFRoeURhdGVQaWNrZXJDb25maWdTZXJ2aWNlKSB7fVxuXG4gICAgc2V0UHJvcGVydHk8VCBleHRlbmRzIGtleW9mIERhdGVQb3B1cD4oa2V5OiBULCB2YWx1ZTogdGhpc1tUXSk6IHZvaWQge1xuICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdFNob3J0Y3V0UHJlc2V0cygpO1xuICAgICAgICB0aGlzLmluaXRQYW5lbE1vZGUoKTtcbiAgICAgICAgaWYgKHRoaXMuZmxleGlibGUgJiYgdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eSA9PT0gJ2RheScpIHtcbiAgICAgICAgICAgIHRoaXMuZmxleGlibGVBY3RpdmVUYWIgPSAnY3VzdG9tJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWZhdWx0UGlja2VyVmFsdWUgJiYgIWhhc1ZhbHVlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0cmFuc2Zvcm1EYXRlVmFsdWUodGhpcy5kZWZhdWx0UGlja2VyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG1ha2VWYWx1ZSh2YWx1ZSwgdGhpcy5pc1JhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZURhdGUoKTtcbiAgICAgICAgdGhpcy5pbml0RGlzYWJsZWREYXRlKCk7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UgJiYgdGhpcy5mbGV4aWJsZSAmJiB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VkU2VsZWN0ZWRWYWx1ZSA9IHtcbiAgICAgICAgICAgICAgICBiZWdpbjogdGhpcy52YWx1ZVswXSxcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMudmFsdWVbMV0sXG4gICAgICAgICAgICAgICAgZGF0ZUdyYW51bGFyaXR5OiB0aGlzLmZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5wYW5lbE1vZGUpIHtcbiAgICAgICAgICAgIGlmIChoZWxwZXJzLmlzQXJyYXkodGhpcy5wYW5lbE1vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRQYW5lbE1vZGUgPSBbLi4udGhpcy5wYW5lbE1vZGVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFBhbmVsTW9kZSA9IHRoaXMucGFuZWxNb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmRlZmF1bHRQaWNrZXJWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVEYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudmFsdWUgJiYgY2hhbmdlcy52YWx1ZS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdFNob3J0Y3V0UHJlc2V0cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzaG9ydGN1dFJhbmdlc1ByZXNldHMsIHNob3J0Y3V0RGF0ZVByZXNldHMsIHNob3dTaG9ydGN1dCB9ID0gdGhpcy5kYXRlUGlja2VyQ29uZmlnU2VydmljZTtcblxuICAgICAgICB0aGlzLnNob3dTaG9ydGN1dCA9XG4gICAgICAgICAgICBbJ2RhdGUnLCAnZGF0ZSxkYXRlJ10uaW5jbHVkZXModGhpcy5wYW5lbE1vZGUudG9TdHJpbmcoKSkgJiYgaXNVbmRlZmluZWRPck51bGwodGhpcy5zaG93U2hvcnRjdXQpXG4gICAgICAgICAgICAgICAgPyBzaG93U2hvcnRjdXRcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2hvd1Nob3J0Y3V0O1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dTaG9ydGN1dCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3J0Y3V0UHJlc2V0cykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvcnRjdXRQcmVzZXRzID0gdGhpcy5pc1JhbmdlID8gc2hvcnRjdXRSYW5nZXNQcmVzZXRzIDogc2hvcnRjdXREYXRlUHJlc2V0cztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbm5lclNob3J0Y3V0UHJlc2V0cyA9IGlzRnVuY3Rpb24odGhpcy5zaG9ydGN1dFByZXNldHMpID8gdGhpcy5zaG9ydGN1dFByZXNldHMoKSA6IHRoaXMuc2hvcnRjdXRQcmVzZXRzO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5uZXJTaG9ydGN1dFByZXNldHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWluRGF0ZTogVGlueURhdGUgPSB0aGlzLmdldE1pblRpbnlEYXRlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4RGF0ZTogVGlueURhdGUgPSB0aGlzLmdldE1heFRpbnlEYXRlKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtaW5UaW1lID0gbWluRGF0ZSA/IG1pbkRhdGUuZ2V0VGltZSgpIDogbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhUaW1lID0gbWF4RGF0ZSA/IG1heERhdGUuZ2V0VGltZSgpIDogbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbm5lclNob3J0Y3V0UHJlc2V0cy5mb3JFYWNoKChwcmVzZXQ6IFRoeVNob3J0Y3V0UHJlc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWdpbjogbnVtYmVyIHwgRGF0ZSA9IGdldFNob3J0Y3V0VmFsdWUocHJlc2V0LnZhbHVlWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZ2luVGltZTogbnVtYmVyID0gbmV3IFRpbnlEYXRlKHN0YXJ0T2ZEYXkoYmVnaW4pKS5nZXRUaW1lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZDogbnVtYmVyIHwgRGF0ZSA9IGdldFNob3J0Y3V0VmFsdWUocHJlc2V0LnZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWU6IG51bWJlciA9IG5ldyBUaW55RGF0ZShlbmRPZkRheShlbmQpKS5nZXRUaW1lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWluRGF0ZSAmJiBlbmRUaW1lIDwgbWluVGltZSkgfHwgKG1heERhdGUgJiYgYmVnaW5UaW1lID4gbWF4VGltZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbm5lclNob3J0Y3V0UHJlc2V0cy5mb3JFYWNoKChwcmVzZXQ6IFRoeVNob3J0Y3V0UHJlc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaW5nbGVWYWx1ZTogbnVtYmVyIHwgRGF0ZSA9IGdldFNob3J0Y3V0VmFsdWUocHJlc2V0LnZhbHVlIGFzIFRoeVNob3J0Y3V0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlVGltZTogbnVtYmVyID0gbmV3IFRpbnlEYXRlKHNpbmdsZVZhbHVlKS5nZXRUaW1lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWluRGF0ZSAmJiBzaW5nbGVUaW1lIDwgbWluVGltZSkgfHwgKG1heERhdGUgJiYgc2luZ2xlVGltZSA+IG1heFRpbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2V0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2V0LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUFjdGl2ZURhdGUoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJIb3ZlclZhbHVlKCk7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdHJhbnNmb3JtRGF0ZVZhbHVlKHRoaXMuZGVmYXVsdFBpY2tlclZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtYWtlVmFsdWUodmFsdWUsIHRoaXMuaXNSYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZsZXhpYmxlIHx8IHRoaXMuZmxleGlibGVEYXRlR3JhbnVsYXJpdHkgPT09ICdkYXknKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy52YWx1ZSBhcyBUaW55RGF0ZVtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5ub3JtYWxpemVSYW5nZVZhbHVlKHRoaXMudmFsdWUgYXMgVGlueURhdGVbXSwgdGhpcy5nZXRQYW5lbE1vZGUodGhpcy5lbmRQYW5lbE1vZGUpIGFzIFRoeVBhbmVsTW9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLnZhbHVlIGFzIFRpbnlEYXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlVGltZUNvbmZpcm0oKTtcbiAgICB9XG5cbiAgICBpbml0UGFuZWxNb2RlKCkge1xuICAgICAgICBpZiAoIXRoaXMuZW5kUGFuZWxNb2RlKSB7XG4gICAgICAgICAgICBpZiAoaGVscGVycy5pc0FycmF5KHRoaXMucGFuZWxNb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kUGFuZWxNb2RlID0gWy4uLnRoaXMucGFuZWxNb2RlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRQYW5lbE1vZGUgPSB0aGlzLnBhbmVsTW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChoZWxwZXJzLmlzQXJyYXkodGhpcy5lbmRQYW5lbE1vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYW5lbE1vZGUgPSBbLi4udGhpcy5lbmRQYW5lbE1vZGVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsTW9kZSA9IHRoaXMuZW5kUGFuZWxNb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdERpc2FibGVkRGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IG1pbkRhdGU6IFRpbnlEYXRlO1xuICAgICAgICBsZXQgbWF4RGF0ZTogVGlueURhdGU7XG4gICAgICAgIGxldCBkaXNhYmxlZERhdGVGbjogRGlzYWJsZWREYXRlRm47XG4gICAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRyYW5zZm9ybURhdGVWYWx1ZSh0aGlzLm1pbkRhdGUpO1xuICAgICAgICAgICAgbWluRGF0ZSA9IG5ldyBUaW55RGF0ZSh2YWx1ZSBhcyBEYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0cmFuc2Zvcm1EYXRlVmFsdWUodGhpcy5tYXhEYXRlKTtcbiAgICAgICAgICAgIG1heERhdGUgPSBuZXcgVGlueURhdGUodmFsdWUgYXMgRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWREYXRlKSB7XG4gICAgICAgICAgICBkaXNhYmxlZERhdGVGbiA9IHRoaXMuZGlzYWJsZWREYXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzYWJsZWREYXRlID0gZCA9PiB7XG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKG1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gZCA8IG1pbkRhdGUuc3RhcnRPZkRheSgpLm5hdGl2ZURhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF4RGF0ZSAmJiAhZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBkID4gbWF4RGF0ZS5lbmRPZkRheSgpLm5hdGl2ZURhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWREYXRlRm4gJiYgdHlwZW9mIGRpc2FibGVkRGF0ZUZuID09PSAnZnVuY3Rpb24nICYmICFleHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGRpc2FibGVkRGF0ZUZuKGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV4cHJlc3Npb247XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgb25TaG93VGltZVBpY2tlckNoYW5nZShzaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd1RpbWVQaWNrZXIgPSBzaG93O1xuICAgICAgICB0aGlzLnNob3dUaW1lUGlja2VyQ2hhbmdlLmVtaXQoc2hvdyk7XG4gICAgfVxuXG4gICAgb25DbGlja09rKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMucmVzdWx0T2suZW1pdCgpO1xuICAgIH1cblxuICAgIG9uQ2xpY2tSZW1vdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzUmFuZ2UgPyBbXSA6IG51bGw7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBvbkRheUhvdmVyKHZhbHVlOiBUaW55RGF0ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZVswXSAmJiAhdGhpcy5zZWxlY3RlZFZhbHVlWzFdKSB7XG4gICAgICAgICAgICAvLyBXaGVuIHJpZ2h0IHZhbHVlIGlzIHNlbGVjdGVkLCBkb24ndCBkbyBob3ZlclxuICAgICAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZVswXTsgLy8gVXNlIHRoZSBsZWZ0IG9mIHNlbGVjdGVkIHZhbHVlIGFzIHRoZSBiYXNlIHRvIGRlY2lkZSBsYXRlciBob3ZlclZhbHVlXG4gICAgICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZURheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyVmFsdWUgPSBbYmFzZSwgdmFsdWVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyVmFsdWUgPSBbdmFsdWUsIGJhc2VdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25QYW5lbE1vZGVDaGFuZ2UobW9kZTogVGh5UGFuZWxNb2RlLCBwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgKHRoaXMucGFuZWxNb2RlIGFzIFRoeVBhbmVsTW9kZVtdKVt0aGlzLmdldFBhcnRUeXBlSW5kZXgocGFydFR5cGUpXSA9IG1vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhbmVsTW9kZSA9IG1vZGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYW5lbE1vZGVDaGFuZ2UuZW1pdCh0aGlzLnBhbmVsTW9kZSk7XG4gICAgfVxuXG4gICAgb25IZWFkZXJDaGFuZ2UodmFsdWU6IFRpbnlEYXRlLCBwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlW3RoaXMuZ2V0UGFydFR5cGVJbmRleChwYXJ0VHlwZSldID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLm5vcm1hbGl6ZVJhbmdlVmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlIGFzIFRpbnlEYXRlW10sXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQYW5lbE1vZGUodGhpcy5lbmRQYW5lbE1vZGUsIHBhcnRUeXBlKSBhcyBUaHlQYW5lbE1vZGVcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VsZWN0VGltZSh2YWx1ZTogVGlueURhdGUsIHBhcnRUeXBlPzogUmFuZ2VQYXJ0VHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICAvLyBUT0RPOnJhbmdlIHBpY2tlciBzZXQgdGltZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShuZXcgVGlueURhdGUodmFsdWUubmF0aXZlRGF0ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0VGFiKGFjdGl2ZTogRGF0ZVBpY2tlckZsZXhpYmxlVGFiKSB7XG4gICAgICAgIHRoaXMuZmxleGlibGVBY3RpdmVUYWIgPSBhY3RpdmU7XG4gICAgfVxuXG4gICAgY2xlYXJGbGV4aWJsZVZhbHVlKCkge1xuICAgICAgICB0aGlzLmZsZXhpYmxlRGF0ZUdyYW51bGFyaXR5ID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuZmxleGlibGVBY3RpdmVUYWIgPT09ICdhZHZhbmNlZCcpIHtcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZWRTZWxlY3RlZFZhbHVlID0ge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgYmVnaW46IG51bGwsXG4gICAgICAgICAgICBlbmQ6IG51bGwsXG4gICAgICAgICAgICBkYXRlR3JhbnVsYXJpdHk6IHRoaXMuZmxleGlibGVEYXRlR3JhbnVsYXJpdHlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlVmFsdWVGcm9tQWR2YW5jZWRTZWxlY3QodmFsdWU6IFJhbmdlQWR2YW5jZWRWYWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICAvLyBjbGVhciBjdXN0b20gZGF0ZSB3aGVuIHNlbGVjdCBhIGFkdmFuY2VkIGRhdGVcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gW107XG4gICAgICAgIHRoaXMuZGF0ZVZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgdmFsdWU6IFt2YWx1ZS5iZWdpbiwgdmFsdWUuZW5kXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VWYWx1ZUZyb21TZWxlY3QodmFsdWU6IFRpbnlEYXRlLCBwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgLy8gY2xlYXIgYWR2YW5jZWQgZGF0ZSB3aGVuIHNlbGVjdCBhIGN1c3RvbSBkYXRlXG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VkU2VsZWN0ZWRWYWx1ZSA9IHt9O1xuXG4gICAgICAgICAgICBjb25zdCBbbGVmdCwgcmlnaHRdID0gdGhpcy5zZWxlY3RlZFZhbHVlIGFzIFRpbnlEYXRlW107XG5cbiAgICAgICAgICAgIGlmICgoIWxlZnQgJiYgIXJpZ2h0KSB8fCAobGVmdCAmJiByaWdodCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0b3RhbGx5IGZ1bGwgb3IgZW1wdHksIGNsZWFuIHVwICYmIHJlLWFzc2lnbiBsZWZ0IGZpcnN0XG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlclZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlID0gW3ZhbHVlXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBbbmV3IFRpbnlEYXRlKHN0YXJ0T2ZEYXkodGhpcy5zZWxlY3RlZFZhbHVlWzBdLm5hdGl2ZURhdGUpKV07XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhckNoYW5nZS5lbWl0KFt0aGlzLnNlbGVjdGVkVmFsdWVbMF0uY2xvbmUoKV0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0ICYmICFyaWdodCkge1xuICAgICAgICAgICAgICAgIC8vIElmIG9uZSBvZiB0aGVtIGlzIGVtcHR5LCBhc3NpZ24gdGhlIG90aGVyIG9uZSBhbmQgc29ydCwgdGhlbiBzZXQgdGhlIGZpbmFsIHZhbHVlc1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJIb3ZlclZhbHVlKCk7IC8vIENsZWFuIHVwXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZVZhbHVlKCdyaWdodCcsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBzb3J0UmFuZ2VWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpOyAvLyBTb3J0XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gW1xuICAgICAgICAgICAgICAgICAgICBuZXcgVGlueURhdGUoc3RhcnRPZkRheSh0aGlzLnNlbGVjdGVkVmFsdWVbMF0ubmF0aXZlRGF0ZSkpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgVGlueURhdGUoZW5kT2ZEYXkodGhpcy5zZWxlY3RlZFZhbHVlWzFdLm5hdGl2ZURhdGUpKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5ub3JtYWxpemVSYW5nZVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFuZWxNb2RlKHRoaXMuZW5kUGFuZWxNb2RlLCBwYXJ0VHlwZSkgYXMgVGh5UGFuZWxNb2RlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuY2xvbmVSYW5nZURhdGUodGhpcy5zZWxlY3RlZFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhckNoYW5nZS5lbWl0KHRoaXMuY2xvbmVSYW5nZURhdGUodGhpcy5zZWxlY3RlZFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNsb25lUmFuZ2VEYXRlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHRoaXMudXBkYXRlSG91ck1pbnV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHVwZGF0ZWRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmRhdGVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdXBkYXRlZFZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSG91ck1pbnV0ZSh2YWx1ZTogVGlueURhdGUpOiBUaW55RGF0ZSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdpbkRhdGUgPSB0aGlzLnZhbHVlIGFzIFRpbnlEYXRlO1xuICAgICAgICBjb25zdCBkYXRlVGltZSA9IFt2YWx1ZS5nZXRIb3VycygpLCB2YWx1ZS5nZXRNaW51dGVzKCksIHZhbHVlLmdldFNlY29uZHMoKV07XG4gICAgICAgIGNvbnN0IG9yaWdpbkRhdGVUaW1lID0gW29yaWdpbkRhdGUuZ2V0SG91cnMoKSwgb3JpZ2luRGF0ZS5nZXRNaW51dGVzKCksIG9yaWdpbkRhdGUuZ2V0U2Vjb25kcygpXTtcblxuICAgICAgICBjb25zdCBpc0VxdWFsVGltZSA9IGRhdGVUaW1lLnRvU3RyaW5nKCkgPT09IG9yaWdpbkRhdGVUaW1lLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChpc0VxdWFsVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnNldEhtcyhvcmlnaW5EYXRlVGltZVswXSwgb3JpZ2luRGF0ZVRpbWVbMV0sIG9yaWdpbkRhdGVUaW1lWzJdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuYWJsZVByZXZOZXh0KGRpcmVjdGlvbjogJ3ByZXYnIHwgJ25leHQnLCBwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSAmJiB0aGlzLnBhbmVsTW9kZSA9PT0gdGhpcy5lbmRQYW5lbE1vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMuYWN0aXZlRGF0ZSBhcyBUaW55RGF0ZVtdO1xuICAgICAgICAgICAgY29uc3Qgc2hvd01pZGRsZSA9ICFzdGFydC5hZGRNb250aHMoMSkuaXNTYW1lKGVuZCwgJ21vbnRoJyk7IC8vIE9uZSBtb250aCBkaWZmIHRoZW4gZG9uJ3Qgc2hvdyBtaWRkbGUgcHJldi9uZXh0XG4gICAgICAgICAgICBpZiAoKHBhcnRUeXBlID09PSAnbGVmdCcgJiYgZGlyZWN0aW9uID09PSAnbmV4dCcpIHx8IChwYXJ0VHlwZSA9PT0gJ3JpZ2h0JyAmJiBkaXJlY3Rpb24gPT09ICdwcmV2JykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2hvd01pZGRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQYW5lbE1vZGUocGFuZWxNb2RlOiBUaHlQYW5lbE1vZGUgfCBUaHlQYW5lbE1vZGVbXSwgcGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogVGh5UGFuZWxNb2RlIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhbmVsTW9kZVt0aGlzLmdldFBhcnRUeXBlSW5kZXgocGFydFR5cGUpXSBhcyBUaHlQYW5lbE1vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcGFuZWxNb2RlIGFzIFRoeVBhbmVsTW9kZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFZhbHVlQnlTZWxlY3RvcihwYXJ0VHlwZT86IFJhbmdlUGFydFR5cGUpOiBUaW55RGF0ZSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlU2hvdyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZTsgLy8gVXNlIHRoZSByZWFsIHRpbWUgdmFsdWUgdGhhdCB3aXRob3V0IGRlY29yYXRpb25zIHdoZW4gdGltZXBpY2tlciBpcyBzaG93biB1cFxuICAgICAgICAgICAgcmV0dXJuICh2YWx1ZVNob3cgYXMgVGlueURhdGVbXSlbdGhpcy5nZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSBhcyBUaW55RGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEFjdGl2ZURhdGUocGFydFR5cGU/OiBSYW5nZVBhcnRUeXBlKTogVGlueURhdGUge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlW3RoaXMuZ2V0UGFydFR5cGVJbmRleChwYXJ0VHlwZSldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZSBhcyBUaW55RGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFBhcnRUeXBlSW5kZXgocGFydFR5cGU6IFJhbmdlUGFydFR5cGUgPSAnbGVmdCcpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJ0VHlwZU1hcFtwYXJ0VHlwZV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNaW5UaW55RGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluRGF0ZSA/IG5ldyBUaW55RGF0ZSh0cmFuc2Zvcm1EYXRlVmFsdWUodGhpcy5taW5EYXRlKS52YWx1ZSBhcyBEYXRlKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNYXhUaW55RGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF4RGF0ZSA/IG5ldyBUaW55RGF0ZSh0cmFuc2Zvcm1EYXRlVmFsdWUodGhpcy5tYXhEYXRlKS52YWx1ZSBhcyBEYXRlKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckhvdmVyVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG92ZXJWYWx1ZSA9IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmFsdWUodmFsdWU6IENvbXBhdGlibGVWYWx1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UgJiYgdGhpcy5mbGV4aWJsZSkge1xuICAgICAgICAgICAgdGhpcy5mbGV4aWJsZURhdGVHcmFudWxhcml0eSA9ICdkYXknO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICBiZWdpbjogdmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgZW5kOiB2YWx1ZVsxXSxcbiAgICAgICAgICAgICAgICBkYXRlR3JhbnVsYXJpdHk6IHRoaXMuZmxleGlibGVEYXRlR3JhbnVsYXJpdHlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dUaW1lIHx8ICF0aGlzLnNob3dUaW1lUGlja2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlVGltZUNvbmZpcm0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZVJhbmdlVmFsdWUodmFsdWU6IFRpbnlEYXRlW10sIG1vZGU6IFRoeVBhbmVsTW9kZSA9ICdtb250aCcpOiBUaW55RGF0ZVtdIHtcbiAgICAgICAgY29uc3QgaGVhZGVyTW9kZXM6IHsgW2tleSBpbiBUaHlQYW5lbE1vZGVdPzogVGh5UGFuZWxNb2RlIH0gPSB7XG4gICAgICAgICAgICB3ZWVrOiAnbW9udGgnLFxuICAgICAgICAgICAgZGF0ZTogJ21vbnRoJyxcbiAgICAgICAgICAgIG1vbnRoOiAneWVhcicsXG4gICAgICAgICAgICBxdWFydGVyOiAneWVhcicsXG4gICAgICAgICAgICB5ZWFyOiAnZGVjYWRlJ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBoZWFkZXJNb2RlID0gaGVhZGVyTW9kZXNbbW9kZV07XG4gICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHZhbHVlO1xuICAgICAgICBjb25zdCBuZXdTdGFydCA9IHN0YXJ0IHx8IG5ldyBUaW55RGF0ZSgpO1xuICAgICAgICBsZXQgbmV3RW5kID0gZW5kO1xuICAgICAgICBpZiAoIW5ld0VuZCB8fCBuZXdTdGFydC5pc1NhbWUoZW5kLCBoZWFkZXJNb2RlIGFzIFRpbnlEYXRlQ29tcGFyZUdyYWluKSkge1xuICAgICAgICAgICAgbmV3RW5kID0gZGF0ZUFkZEFtb3VudChuZXdTdGFydCwgMSwgaGVhZGVyTW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtuZXdTdGFydCwgbmV3RW5kXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJhbmdlVmFsdWUocGFydFR5cGU6IFJhbmdlUGFydFR5cGUsIHZhbHVlOiBUaW55RGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWYgPSAodGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5jbG9uZVJhbmdlRGF0ZSh0aGlzLnNlbGVjdGVkVmFsdWUgYXMgVGlueURhdGVbXSkpO1xuICAgICAgICByZWZbdGhpcy5nZXRQYXJ0VHlwZUluZGV4KHBhcnRUeXBlKV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb25lUmFuZ2VEYXRlKHZhbHVlOiBUaW55RGF0ZVtdKTogVGlueURhdGVbXSB7XG4gICAgICAgIHJldHVybiBbdmFsdWVbMF0gJiYgdmFsdWVbMF0uY2xvbmUoKSwgdmFsdWVbMV0gJiYgdmFsdWVbMV0uY2xvbmUoKV0gYXMgVGlueURhdGVbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRGlzYWJsZVRpbWVDb25maXJtKCkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlIHx8ICF0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRlOiBUaW55RGF0ZSA9IHRoaXMudmFsdWUgPyAodGhpcy52YWx1ZSBhcyBUaW55RGF0ZSkgOiBuZXcgVGlueURhdGUoKTtcbiAgICAgICAgY29uc3QgbWluRGF0ZTogVGlueURhdGUgPSB0aGlzLmdldE1pblRpbnlEYXRlKCk7XG4gICAgICAgIGNvbnN0IG1heERhdGU6IFRpbnlEYXRlID0gdGhpcy5nZXRNYXhUaW55RGF0ZSgpO1xuXG4gICAgICAgIGlmICgobWluRGF0ZSAmJiBkYXRlLmdldFRpbWUoKSA8IG1pbkRhdGUuZ2V0VGltZSgpKSB8fCAobWF4RGF0ZSAmJiBkYXRlLmdldFRpbWUoKSA+IG1heERhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGltZUNvbmZpcm0gPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGltZUNvbmZpcm0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRTaG9ydGN1dFByZXNldChkYXRlOiBDb21wYXRpYmxlVmFsdWUpOiBDb21wYXRpYmxlVmFsdWUge1xuICAgICAgICBjb25zdCBtaW5EYXRlOiBUaW55RGF0ZSA9IHRoaXMuZ2V0TWluVGlueURhdGUoKTtcbiAgICAgICAgY29uc3QgbWF4RGF0ZTogVGlueURhdGUgPSB0aGlzLmdldE1heFRpbnlEYXRlKCk7XG5cbiAgICAgICAgY29uc3QgbWluVGltZTogbnVtYmVyID0gKG1pbkRhdGUgJiYgbWluRGF0ZS5nZXRUaW1lKCkpIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IG1heFRpbWU6IG51bWJlciA9IChtYXhEYXRlICYmIG1heERhdGUuZ2V0VGltZSgpKSB8fCBudWxsO1xuXG4gICAgICAgIGlmIChoZWxwZXJzLmlzQXJyYXkoZGF0ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZTogVGlueURhdGUgPSBkYXRlWzBdO1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZTogVGlueURhdGUgPSBkYXRlWzFdO1xuXG4gICAgICAgICAgICBjb25zdCBzdGFydFRpbWU6IG51bWJlciA9IHN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBjb25zdCBlbmRUaW1lOiBudW1iZXIgPSBlbmREYXRlLmdldFRpbWUoKTtcblxuICAgICAgICAgICAgaWYgKChtYXhEYXRlICYmIHN0YXJ0VGltZSA+IG1heFRpbWUpIHx8IChtaW5EYXRlICYmIGVuZFRpbWUgPCBtaW5UaW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1pbkRhdGUgJiYgc3RhcnRUaW1lIDwgbWluVGltZSAmJiBtYXhEYXRlICYmIGVuZFRpbWUgPiBtYXhUaW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFttaW5EYXRlLCBtYXhEYXRlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1pbkRhdGUgJiYgc3RhcnRUaW1lIDwgbWluVGltZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbWluRGF0ZSwgZW5kRGF0ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtYXhEYXRlICYmIGVuZFRpbWUgPiBtYXhUaW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtzdGFydERhdGUsIG1heERhdGVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZVRpbWU6IG51bWJlciA9IGRhdGUuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgICBpZiAoKG1pbkRhdGUgJiYgc2luZ2xlVGltZSA8IG1pblRpbWUpIHx8IChtYXhEYXRlICYmIHNpbmdsZVRpbWUgPiBtYXhUaW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3J0Y3V0U2V0VmFsdWUoc2hvcnRjdXRQcmVzZXRzOiBUaHlTaG9ydGN1dFByZXNldCkge1xuICAgICAgICBpZiAoc2hvcnRjdXRQcmVzZXRzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBzaG9ydGN1dFByZXNldHM7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWxlY3RlZFByZXNldFZhbHVlOiBDb21wYXRpYmxlVmFsdWU7XG4gICAgICAgIGlmIChoZWxwZXJzLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBiZWdpbjogbnVtYmVyIHwgRGF0ZSA9IGdldFNob3J0Y3V0VmFsdWUodmFsdWVbMF0pO1xuICAgICAgICAgICAgY29uc3QgZW5kOiBudW1iZXIgfCBEYXRlID0gZ2V0U2hvcnRjdXRWYWx1ZSh2YWx1ZVsxXSk7XG5cbiAgICAgICAgICAgIGlmIChiZWdpbiAmJiBlbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLmdldFNlbGVjdGVkU2hvcnRjdXRQcmVzZXQoW1xuICAgICAgICAgICAgICAgICAgICBuZXcgVGlueURhdGUoc3RhcnRPZkRheShiZWdpbikpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgVGlueURhdGUoZW5kT2ZEYXkoZW5kKSlcbiAgICAgICAgICAgICAgICBdKSBhcyBUaW55RGF0ZVtdO1xuXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRQcmVzZXRWYWx1ZSA9IHRoaXMuY2xvbmVSYW5nZURhdGUodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZURhdGU6IG51bWJlciB8IERhdGUgPSBnZXRTaG9ydGN1dFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZVRpbnlEYXRlOiBUaW55RGF0ZSA9IHRoaXMudXBkYXRlSG91ck1pbnV0ZShuZXcgVGlueURhdGUoc2luZ2xlRGF0ZSkpO1xuICAgICAgICAgICAgc2VsZWN0ZWRQcmVzZXRWYWx1ZSA9IHRoaXMuZ2V0U2VsZWN0ZWRTaG9ydGN1dFByZXNldChzaW5nbGVUaW55RGF0ZSkgYXMgVGlueURhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWYWx1ZShzZWxlY3RlZFByZXNldFZhbHVlKTtcbiAgICAgICAgY29uc3Qgc2hvcnRjdXRQcmVzZXRzVmFsdWUgPSBzZXRWYWx1ZUJ5VGltZXN0YW1wUHJlY2lzaW9uKHNob3J0Y3V0UHJlc2V0cz8udmFsdWUsIHRoaXMuaXNSYW5nZSwgdGhpcy50aW1lc3RhbXBQcmVjaXNpb24pIGFzIG51bWJlcjtcbiAgICAgICAgdGhpcy5kYXRlVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICB2YWx1ZTogaGVscGVycy5pc0FycmF5KHZhbHVlKSA/IHRoaXMuc2VsZWN0ZWRWYWx1ZSA6IHNlbGVjdGVkUHJlc2V0VmFsdWUsXG4gICAgICAgICAgICB0cmlnZ2VyUHJlc2V0OiBPYmplY3QuYXNzaWduKHt9LCBzaG9ydGN1dFByZXNldHMsIHsgdmFsdWU6IHNob3J0Y3V0UHJlc2V0c1ZhbHVlIH0pXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhlbHBlcnMuaXNBcnJheSh2YWx1ZSkgJiYgdGhpcy5zaG93VGltZSAmJiB0aGlzLnNob3dUaW1lUGlja2VyKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZURhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0cmFja0J5Rm4oaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1waWNrZXItY29udGFpbmVyIHt7IGNsYXNzTmFtZSB9fVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0ge3sgc2hvd1dlZWsgPyBwcmVmaXhDbHMgKyAnLXdlZWstbnVtYmVyJyA6ICcnIH19XG4gICAgIHt7IGlzUmFuZ2UgPyBwcmVmaXhDbHMgKyAnLXJhbmdlJyA6ICcnIH19IHt7IHByZWZpeENscyB9fS1waWNrZXItc2hvcnRjdXQte3sgc2hvcnRjdXRQb3NpdGlvbiA9PT0gJ2xlZnQnID8gJ2xlZnQnIDogJ2JvdHRvbScgfX1cIj5cbiAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LXBpY2tlci1zaG9ydGN1dFwiICpuZ0lmPVwic2hvd1Nob3J0Y3V0XCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LXBpY2tlci1zaG9ydGN1dC1pdGVtXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpbm5lclNob3J0Y3V0UHJlc2V0czsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgKGNsaWNrKT1cInNob3J0Y3V0U2V0VmFsdWUoaXRlbSlcIj5cbiAgICAgICAge3sgaXRlbS50aXRsZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1wYW5lbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1kYXRlLXBhbmVsXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmbGV4aWJsZTsgZWxzZSBkZWZhdWx0UGFuZWxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWRhdGUtcGFuZWwtZmxleGlibGVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tZGF0ZS1wYW5lbC1mbGV4aWJsZS10YWJcIj5cbiAgICAgICAgICAgICAgPHRoeS1uYXYgdGh5VHlwZT1cInB1bGxlZFwiIHRoeVNpemU9XCJzbVwiPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0aHlOYXZMaW5rIFt0aHlOYXZMaW5rQWN0aXZlXT1cImZsZXhpYmxlQWN0aXZlVGFiID09PSAnYWR2YW5jZWQnXCIgKGNsaWNrKT1cInNlbGVjdFRhYignYWR2YW5jZWQnKVwiXG4gICAgICAgICAgICAgICAgICA+6auY57qn6YCJ6aG5PC9hXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0aHlOYXZMaW5rIFt0aHlOYXZMaW5rQWN0aXZlXT1cImZsZXhpYmxlQWN0aXZlVGFiID09PSAnY3VzdG9tJ1wiIChjbGljayk9XCJzZWxlY3RUYWIoJ2N1c3RvbScpXCJcbiAgICAgICAgICAgICAgICAgID7oh6rlrprkuYk8L2FcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvdGh5LW5hdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0aHlCdXR0b25JY29uPVwic3dlZXBcIiB0aHlTaXplPVwic21cIiBjbGFzcz1cImNsZWFyLWRhdGUtYnV0dG9uXCIgKGNsaWNrKT1cImNsZWFyRmxleGlibGVWYWx1ZSgpXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tZGF0ZS1wYW5lbC1hZHZhbmNlZFwiIFtoaWRkZW5dPVwiZmxleGlibGVBY3RpdmVUYWIgIT09ICdhZHZhbmNlZCdcIj5cbiAgICAgICAgICAgICAgICA8ZGF0ZS1jYXJvdXNlbFxuICAgICAgICAgICAgICAgICAgbmFtZT1cImRhdGVDYXJvdXNlbFwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VWYWx1ZUZyb21BZHZhbmNlZFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWR2YW5jZWRTZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFthY3RpdmVEYXRlXT1cInNlbGVjdGVkVmFsdWVbMF1cIj48L2RhdGUtY2Fyb3VzZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IFtoaWRkZW5dPVwiZmxleGlibGVBY3RpdmVUYWIgIT09ICdjdXN0b20nXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxJbm5lclBvcHVwXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFuZWw+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUmFuZ2U7IGVsc2UgdHBsU2luZ2xlUGFydFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRwbFJhbmdlUGFydDsgY29udGV4dDogeyBwYXJ0VHlwZTogJ2xlZnQnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxSYW5nZVBhcnQ7IGNvbnRleHQ6IHsgcGFydFR5cGU6ICdyaWdodCcgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNSYW5nZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRwbEZvb3RlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdHBsSW5uZXJQb3B1cCBsZXQtcGFydFR5cGU9XCJwYXJ0VHlwZVwiPlxuICA8aW5uZXItcG9wdXBcbiAgICBbc2hvd1dlZWtdPVwic2hvd1dlZWtcIlxuICAgIFtpc1JhbmdlXT1cImlzUmFuZ2VcIlxuICAgIFtwYW5lbE1vZGVdPVwiZ2V0UGFuZWxNb2RlKHBhbmVsTW9kZSwgcGFydFR5cGUpXCJcbiAgICBbZW5kUGFuZWxNb2RlXT1cImdldFBhbmVsTW9kZShlbmRQYW5lbE1vZGUsIHBhcnRUeXBlKVwiXG4gICAgW3BhcnRUeXBlXT1cInBhcnRUeXBlXCJcbiAgICBbc2hvd0RhdGVSYW5nZUlucHV0XT1cImZsZXhpYmxlICYmIGZsZXhpYmxlQWN0aXZlVGFiID09PSAnY3VzdG9tJ1wiXG4gICAgKHBhbmVsTW9kZUNoYW5nZSk9XCJvblBhbmVsTW9kZUNoYW5nZSgkZXZlbnQsIHBhcnRUeXBlKVwiXG4gICAgW3ZhbHVlXT1cImdldFZhbHVlQnlTZWxlY3RvcihwYXJ0VHlwZSlcIlxuICAgIFtzZWxlY3RlZFZhbHVlXT1cInNlbGVjdGVkVmFsdWVcIlxuICAgIFthY3RpdmVEYXRlXT1cImdldEFjdGl2ZURhdGUocGFydFR5cGUpXCJcbiAgICBbcmFuZ2VBY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIlxuICAgIFtkaXNhYmxlZERhdGVdPVwiZGlzYWJsZWREYXRlXCJcbiAgICBbZGF0ZVJlbmRlcl09XCJkYXRlUmVuZGVyXCJcbiAgICBbaG92ZXJWYWx1ZV09XCJob3ZlclZhbHVlXCJcbiAgICBbZW5hYmxlUHJldl09XCJlbmFibGVQcmV2TmV4dCgncHJldicsIHBhcnRUeXBlKVwiXG4gICAgW2VuYWJsZU5leHRdPVwiZW5hYmxlUHJldk5leHQoJ25leHQnLCBwYXJ0VHlwZSlcIlxuICAgIChkYXlIb3Zlcik9XCJvbkRheUhvdmVyKCRldmVudClcIlxuICAgIChzZWxlY3REYXRlKT1cImNoYW5nZVZhbHVlRnJvbVNlbGVjdCgkZXZlbnQsIHBhcnRUeXBlKVwiXG4gICAgKGhlYWRlckNoYW5nZSk9XCJvbkhlYWRlckNoYW5nZSgkZXZlbnQsIHBhcnRUeXBlKVwiPjwvaW5uZXItcG9wdXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RwbEZvb3Rlcj5cbiAgPGNhbGVuZGFyLWZvb3RlclxuICAgIFtzaG93VGltZV09XCJzaG93VGltZVwiXG4gICAgW211c3RTaG93VGltZV09XCJtdXN0U2hvd1RpbWVcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW2Rpc2FibGVUaW1lQ29uZmlybV09XCJkaXNhYmxlVGltZUNvbmZpcm1cIlxuICAgIChzaG93VGltZVBpY2tlckNoYW5nZSk9XCJvblNob3dUaW1lUGlja2VyQ2hhbmdlKCRldmVudClcIlxuICAgIChzZWxlY3RUaW1lKT1cIm9uU2VsZWN0VGltZSgkZXZlbnQpXCJcbiAgICAoY2xpY2tPayk9XCJvbkNsaWNrT2soKVwiXG4gICAgKGNsaWNrUmVtb3ZlKT1cIm9uQ2xpY2tSZW1vdmUoKVwiPjwvY2FsZW5kYXItZm9vdGVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBTaW5nbGUgT05MWSAtLT5cbjxuZy10ZW1wbGF0ZSAjdHBsU2luZ2xlUGFydD5cbiAgPGRpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHBsSW5uZXJQb3B1cFwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUmFuZ2UgT05MWSAtLT5cbjxuZy10ZW1wbGF0ZSAjdHBsUmFuZ2VQYXJ0IGxldC1wYXJ0VHlwZT1cInBhcnRUeXBlXCI+XG4gIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tcmFuZ2UtcGFydCB7eyBwcmVmaXhDbHMgfX0tcmFuZ2Ute3sgcGFydFR5cGUgfX1cIj5cbiAgICA8ZGl2IHN0eWxlPVwib3V0bGluZTogbm9uZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRwbElubmVyUG9wdXA7IGNvbnRleHQ6IHsgcGFydFR5cGU6IHBhcnRUeXBlIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { TinyDate } from 'ngx-tethys/util';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
|
|
2
|
+
import { TinyDate, coerceBooleanProperty } from 'ngx-tethys/util';
|
|
3
3
|
import { DateHelperService } from '../../date-helper.service';
|
|
4
4
|
import { isAfterMoreThanLessOneYear, isAfterMoreThanOneDecade, isAfterMoreThanOneMonth, isAfterMoreThanOneYear } from '../../picker.util';
|
|
5
5
|
import { DateHeader } from '../date/date-header.component';
|
|
@@ -131,7 +131,7 @@ export class InnerPopup {
|
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: InnerPopup, deps: [{ token: i1.DateHelperService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
134
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.0", type: InnerPopup, isStandalone: true, selector: "inner-popup", inputs: { showWeek: "showWeek", isRange: "isRange", activeDate: "activeDate", rangeActiveDate: "rangeActiveDate", enablePrev: "enablePrev", enableNext: "enableNext", disabledDate: "disabledDate", dateRender: "dateRender", selectedValue: "selectedValue", hoverValue: "hoverValue", panelMode: "panelMode", showDateRangeInput: ["showDateRangeInput", "showDateRangeInput",
|
|
134
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.0", type: InnerPopup, isStandalone: true, selector: "inner-popup", inputs: { showWeek: "showWeek", isRange: "isRange", activeDate: "activeDate", rangeActiveDate: "rangeActiveDate", enablePrev: "enablePrev", enableNext: "enableNext", disabledDate: "disabledDate", dateRender: "dateRender", selectedValue: "selectedValue", hoverValue: "hoverValue", panelMode: "panelMode", showDateRangeInput: ["showDateRangeInput", "showDateRangeInput", coerceBooleanProperty], partType: "partType", endPanelMode: "endPanelMode", value: "value" }, outputs: { panelModeChange: "panelModeChange", headerChange: "headerChange", selectDate: "selectDate", dayHover: "dayHover" }, host: { properties: { "class.thy-calendar-picker-inner-popup": "this.className", "class.thy-calendar-picker-inner-popup-with-range-input": "this._showDateRangeInput" } }, exportAs: ["innerPopup"], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"showDateRangeInput\">\n <div class=\"{{ prefixCls }}-picker-inner-popup-range-input\">\n <input thyInput thySize=\"sm\" [value]=\"getReadableValue(selectedValue[0])\" placeholder=\"\u5F00\u59CB\u65E5\u671F\" />\n <span class=\"split\"></span>\n <input thyInput thySize=\"sm\" [value]=\"getReadableValue(selectedValue[1])\" placeholder=\"\u7ED3\u675F\u65E5\u671F\" />\n </div>\n</ng-container>\n<ng-container [ngSwitch]=\"panelMode\">\n <ng-container *ngSwitchCase=\"'decade'\">\n <div class=\"{{ prefixCls }}-decade\">\n <decade-header\n [(value)]=\"activeDate\"\n [showSuperPreBtn]=\"enableSuperPrevNext('prev', 'decade')\"\n [showSuperNextBtn]=\"enableSuperPrevNext('next', 'decade')\"\n [showNextBtn]=\"false\"\n [showPreBtn]=\"false\"\n (panelModeChange)=\"panelModeChange.emit($event)\"\n (valueChange)=\"headerChange.emit($event)\">\n </decade-header>\n <div class=\"{{ prefixCls }}-body\">\n <decade-table [value]=\"value\" [activeDate]=\"activeDate\" (valueChange)=\"onChooseDecade($event)\"></decade-table>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'year'\">\n <div class=\"{{ prefixCls }}-year\">\n <year-header\n [(value)]=\"activeDate\"\n [showSuperPreBtn]=\"enableSuperPrevNext('prev', 'year')\"\n [showSuperNextBtn]=\"enableSuperPrevNext('next', 'year')\"\n [showNextBtn]=\"false\"\n [showPreBtn]=\"false\"\n (panelModeChange)=\"panelModeChange.emit($event)\"\n (valueChange)=\"headerChange.emit($event)\">\n </year-header>\n <div class=\"{{ prefixCls }}-body\">\n <year-table\n [value]=\"value\"\n [activeDate]=\"activeDate\"\n [disabledDate]=\"disabledDate\"\n (valueChange)=\"onChooseYear($event)\"\n [selectedValue]=\"selectedValue\">\n </year-table>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'month'\">\n <div class=\"{{ prefixCls }}-month\">\n <month-header\n [(value)]=\"activeDate\"\n [showSuperPreBtn]=\"enableSuperPrevNext('prev', 'month')\"\n [showSuperNextBtn]=\"enableSuperPrevNext('next', 'month')\"\n [showNextBtn]=\"false\"\n [showPreBtn]=\"false\"\n (panelModeChange)=\"panelModeChange.emit($event)\"\n (valueChange)=\"headerChange.emit($event)\">\n </month-header>\n <div class=\"{{ prefixCls }}-body\">\n <month-table\n [value]=\"value\"\n [activeDate]=\"activeDate\"\n [disabledDate]=\"disabledDate\"\n (valueChange)=\"onChooseMonth($event)\"\n [selectedValue]=\"selectedValue\">\n </month-table>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'quarter'\">\n <div class=\"{{ prefixCls }}-quarter\">\n <month-header\n [(value)]=\"activeDate\"\n [showSuperPreBtn]=\"enableSuperPrevNext('prev', 'month')\"\n [showSuperNextBtn]=\"enableSuperPrevNext('next', 'month')\"\n [showNextBtn]=\"false\"\n [showPreBtn]=\"false\"\n (panelModeChange)=\"panelModeChange.emit($event)\"\n (valueChange)=\"headerChange.emit($event)\">\n </month-header>\n <div class=\"{{ prefixCls }}-body\">\n <quarter-table\n [value]=\"value\"\n [activeDate]=\"activeDate\"\n [disabledDate]=\"disabledDate\"\n (valueChange)=\"onChooseQuarter($event)\"\n [selectedValue]=\"selectedValue\">\n </quarter-table>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <date-header\n [(value)]=\"activeDate\"\n [showSuperPreBtn]=\"enableSuperPrevNext('prev', 'date')\"\n [showSuperNextBtn]=\"enableSuperPrevNext('next', 'date')\"\n [showPreBtn]=\"enablePrevNext('prev', 'date')\"\n [showNextBtn]=\"enablePrevNext('next', 'date')\"\n (panelModeChange)=\"panelModeChange.emit($event)\"\n (valueChange)=\"headerChange.emit($event)\"></date-header>\n <div class=\"{{ prefixCls }}-body\">\n <date-table\n [showWeek]=\"showWeek\"\n [value]=\"value\"\n [activeDate]=\"activeDate\"\n (valueChange)=\"onSelectDate($event)\"\n showWeekNumber=\"false\"\n [disabledDate]=\"disabledDate\"\n [cellRender]=\"dateRender\"\n [selectedValue]=\"selectedValue\"\n [hoverValue]=\"hoverValue\"\n (dayHover)=\"dayHover.emit($event)\"></date-table>\n </div>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ThyInputDirective, selector: "input[thyInput], select[thyInput], textarea[thyInput]", inputs: ["thySize"], exportAs: ["thyInput"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: DecadeHeader, selector: "decade-header" }, { kind: "component", type: DecadeTable, selector: "decade-table", exportAs: ["decadeTable"] }, { kind: "component", type: YearHeader, selector: "year-header" }, { kind: "component", type: YearTable, selector: "year-table", outputs: ["decadePanelShow"] }, { kind: "component", type: MonthHeader, selector: "month-header" }, { kind: "component", type: MonthTable, selector: "month-table", exportAs: ["monthTable"] }, { kind: "component", type: QuarterTable, selector: "quarter-table", exportAs: ["quarterTable"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: DateHeader, selector: "date-header" }, { kind: "component", type: DateTable, selector: "date-table", outputs: ["dayHover"], exportAs: ["dateTable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
135
135
|
}
|
|
136
136
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: InnerPopup, decorators: [{
|
|
137
137
|
type: Component,
|
|
@@ -181,7 +181,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
|
181
181
|
type: Input
|
|
182
182
|
}], showDateRangeInput: [{
|
|
183
183
|
type: Input,
|
|
184
|
-
args: [{ transform:
|
|
184
|
+
args: [{ transform: coerceBooleanProperty }]
|
|
185
185
|
}], partType: [{
|
|
186
186
|
type: Input
|
|
187
187
|
}], endPanelMode: [{
|
|
@@ -197,4 +197,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
|
197
197
|
}], dayHover: [{
|
|
198
198
|
type: Output
|
|
199
199
|
}] } });
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5uZXItcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGUtcGlja2VyL2xpYi9wb3B1cHMvaW5uZXItcG9wdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGUtcGlja2VyL2xpYi9wb3B1cHMvaW5uZXItcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFHVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTlELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFekQsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1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QUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFHRixrQkFBa0I7c0JBRHJCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUzdCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFYSxlQUFlO3NCQUFqQyxNQUFNO2dCQUVFLEtBQUs7c0JBQWIsS0FBSztnQkFFYSxZQUFZO3NCQUE5QixNQUFNO2dCQUNZLFVBQVU7c0JBQTVCLE1BQU07Z0JBQ1ksUUFBUTtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnVuY3Rpb25Qcm9wLCBUaW55RGF0ZSB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBEYXRlSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2RhdGUtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmFuZ2VQYXJ0VHlwZSB9IGZyb20gJy4uLy4uL2lubmVyLXR5cGVzJztcbmltcG9ydCB7IGlzQWZ0ZXJNb3JlVGhhbkxlc3NPbmVZZWFyLCBpc0FmdGVyTW9yZVRoYW5PbmVEZWNhZGUsIGlzQWZ0ZXJNb3JlVGhhbk9uZU1vbnRoLCBpc0FmdGVyTW9yZVRoYW5PbmVZZWFyIH0gZnJvbSAnLi4vLi4vcGlja2VyLnV0aWwnO1xuaW1wb3J0IHsgRGlzYWJsZWREYXRlRm4sIFRoeVBhbmVsTW9kZSB9IGZyb20gJy4uLy4uL3N0YW5kYXJkLXR5cGVzJztcbmltcG9ydCB7IERhdGVIZWFkZXIgfSBmcm9tICcuLi9kYXRlL2RhdGUtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlVGFibGUgfSBmcm9tICcuLi9kYXRlL2RhdGUtdGFibGUuY29tcG9uZW50JztcblxuaW1wb3J0IHsgTmdJZiwgTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSwgTmdTd2l0Y2hEZWZhdWx0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRoeUlucHV0RGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9pbnB1dCc7XG5pbXBvcnQgeyBEZWNhZGVIZWFkZXIgfSBmcm9tICcuLi9kZWNhZGUvZGVjYWRlLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVjYWRlVGFibGUgfSBmcm9tICcuLi9kZWNhZGUvZGVjYWRlLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb250aEhlYWRlciB9IGZyb20gJy4uL21vbnRoL21vbnRoLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9udGhUYWJsZSB9IGZyb20gJy4uL21vbnRoL21vbnRoLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBZZWFySGVhZGVyIH0gZnJvbSAnLi4veWVhci95ZWFyLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgWWVhclRhYmxlIH0gZnJvbSAnLi4veWVhci95ZWFyLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWFydGVyVGFibGUgfSBmcm9tICcuLi9xdWFydGVyL3F1YXJ0ZXItdGFibGUuY29tcG9uZW50JztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnaW5uZXItcG9wdXAnLFxuICAgIGV4cG9ydEFzOiAnaW5uZXJQb3B1cCcsXG4gICAgdGVtcGxhdGVVcmw6ICdpbm5lci1wb3B1cC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIFRoeUlucHV0RGlyZWN0aXZlLFxuICAgICAgICBOZ1N3aXRjaCxcbiAgICAgICAgTmdTd2l0Y2hDYXNlLFxuICAgICAgICBEZWNhZGVIZWFkZXIsXG4gICAgICAgIERlY2FkZVRhYmxlLFxuICAgICAgICBZZWFySGVhZGVyLFxuICAgICAgICBZZWFyVGFibGUsXG4gICAgICAgIE1vbnRoSGVhZGVyLFxuICAgICAgICBNb250aFRhYmxlLFxuICAgICAgICBRdWFydGVyVGFibGUsXG4gICAgICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICAgICAgRGF0ZUhlYWRlcixcbiAgICAgICAgRGF0ZVRhYmxlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbm5lclBvcHVwIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1jYWxlbmRhci1waWNrZXItaW5uZXItcG9wdXAnKSBjbGFzc05hbWUgPSB0cnVlO1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LWNhbGVuZGFyLXBpY2tlci1pbm5lci1wb3B1cC13aXRoLXJhbmdlLWlucHV0JykgX3Nob3dEYXRlUmFuZ2VJbnB1dCA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc2hvd1dlZWs6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXNSYW5nZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhY3RpdmVEYXRlOiBUaW55RGF0ZTtcbiAgICBASW5wdXQoKSByYW5nZUFjdGl2ZURhdGU6IFRpbnlEYXRlW107IC8vIFJhbmdlIE9OTFlcbiAgICBASW5wdXQoKSBlbmFibGVQcmV2OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGVuYWJsZU5leHQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlzYWJsZWREYXRlOiBEaXNhYmxlZERhdGVGbjtcbiAgICBASW5wdXQoKSBkYXRlUmVuZGVyOiBGdW5jdGlvblByb3A8VGVtcGxhdGVSZWY8RGF0ZT4gfCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkVmFsdWU6IFRpbnlEYXRlW107IC8vIFJhbmdlIE9OTFlcbiAgICBASW5wdXQoKSBob3ZlclZhbHVlOiBUaW55RGF0ZVtdOyAvLyBSYW5nZSBPTkxZXG5cbiAgICBASW5wdXQoKSBwYW5lbE1vZGU6IFRoeVBhbmVsTW9kZTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHNldCBzaG93RGF0ZVJhbmdlSW5wdXQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd0RhdGVSYW5nZUlucHV0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IHNob3dEYXRlUmFuZ2VJbnB1dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dEYXRlUmFuZ2VJbnB1dDtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBwYXJ0VHlwZTogUmFuZ2VQYXJ0VHlwZTtcblxuICAgIEBJbnB1dCgpIGVuZFBhbmVsTW9kZTogVGh5UGFuZWxNb2RlO1xuXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHBhbmVsTW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5UGFuZWxNb2RlPigpO1xuXG4gICAgQElucHV0KCkgdmFsdWU6IFRpbnlEYXRlO1xuXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGhlYWRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGlueURhdGU+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdERhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRpbnlEYXRlPigpO1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBkYXlIb3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8VGlueURhdGU+KCk7XG5cbiAgICBwcmVmaXhDbHMgPSAndGh5LWNhbGVuZGFyJztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0ZUhlbHBlcjogRGF0ZUhlbHBlclNlcnZpY2UpIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmFjdGl2ZURhdGUgJiYgIWNoYW5nZXMuYWN0aXZlRGF0ZS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ldyBUaW55RGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnBhbmVsTW9kZSAmJiBjaGFuZ2VzLnBhbmVsTW9kZS5jdXJyZW50VmFsdWUgPT09ICd0aW1lJykge1xuICAgICAgICAgICAgdGhpcy5wYW5lbE1vZGUgPSAnZGF0ZSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSZWFkYWJsZVZhbHVlKHZhbHVlOiBUaW55RGF0ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPyB0aGlzLmRhdGVIZWxwZXIuZm9ybWF0KHZhbHVlLm5hdGl2ZURhdGUsICd5eXl5LU1NLWRkJykgOiAnJztcbiAgICB9XG5cbiAgICBvblNlbGVjdERhdGUoZGF0ZTogVGlueURhdGUgfCBEYXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0ZSBpbnN0YW5jZW9mIFRpbnlEYXRlID8gZGF0ZSA6IG5ldyBUaW55RGF0ZShkYXRlKTtcblxuICAgICAgICB0aGlzLnNlbGVjdERhdGUuZW1pdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgb25DaG9vc2VNb250aCh2YWx1ZTogVGlueURhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5hY3RpdmVEYXRlLnNldE1vbnRoKHZhbHVlLmdldE1vbnRoKCkpO1xuICAgICAgICBpZiAodGhpcy5lbmRQYW5lbE1vZGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5wYW5lbE1vZGVDaGFuZ2UuZW1pdCh0aGlzLmVuZFBhbmVsTW9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNob29zZVF1YXJ0ZXIodmFsdWU6IFRpbnlEYXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuYWN0aXZlRGF0ZS5zZXRRdWFydGVyKHZhbHVlLmdldFF1YXJ0ZXIoKSk7XG4gICAgICAgIGlmICh0aGlzLmVuZFBhbmVsTW9kZSA9PT0gJ3F1YXJ0ZXInKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucGFuZWxNb2RlQ2hhbmdlLmVtaXQodGhpcy5lbmRQYW5lbE1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaG9vc2VZZWFyKHZhbHVlOiBUaW55RGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmFjdGl2ZURhdGUuc2V0WWVhcih2YWx1ZS5nZXRZZWFyKCkpO1xuICAgICAgICBpZiAodGhpcy5lbmRQYW5lbE1vZGUgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlLmVtaXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnBhbmVsTW9kZUNoYW5nZS5lbWl0KHRoaXMuZW5kUGFuZWxNb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hvb3NlRGVjYWRlKHZhbHVlOiBUaW55RGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmFjdGl2ZURhdGUuc2V0WWVhcih2YWx1ZS5nZXRZZWFyKCkpO1xuICAgICAgICBpZiAodGhpcy5lbmRQYW5lbE1vZGUgPT09ICdkZWNhZGUnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucGFuZWxNb2RlQ2hhbmdlLmVtaXQoJ3llYXInKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuYWJsZVByZXZOZXh0KGRpcmVjdGlvbjogJ3ByZXYnIHwgJ25leHQnLCBtb2RlOiBUaHlQYW5lbE1vZGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgaWYgKCh0aGlzLnBhcnRUeXBlID09PSAnbGVmdCcgJiYgZGlyZWN0aW9uID09PSAnbmV4dCcpIHx8ICh0aGlzLnBhcnRUeXBlID09PSAncmlnaHQnICYmIGRpcmVjdGlvbiA9PT0gJ3ByZXYnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtoZWFkZXJMZWZ0RGF0ZSwgaGVhZGVyUmlnaHREYXRlXSA9IHRoaXMucmFuZ2VBY3RpdmVEYXRlO1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0FmdGVyTW9yZVRoYW5PbmVNb250aChoZWFkZXJSaWdodERhdGUsIGhlYWRlckxlZnREYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuYWJsZVN1cGVyUHJldk5leHQoZGlyZWN0aW9uOiAncHJldicgfCAnbmV4dCcsIHBhbmVsTW9kZTogVGh5UGFuZWxNb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmICgodGhpcy5wYXJ0VHlwZSA9PT0gJ2xlZnQnICYmIGRpcmVjdGlvbiA9PT0gJ25leHQnKSB8fCAodGhpcy5wYXJ0VHlwZSA9PT0gJ3JpZ2h0JyAmJiBkaXJlY3Rpb24gPT09ICdwcmV2JykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbaGVhZGVyTGVmdERhdGUsIGhlYWRlclJpZ2h0RGF0ZV0gPSB0aGlzLnJhbmdlQWN0aXZlRGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAocGFuZWxNb2RlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzQWZ0ZXJNb3JlVGhhbkxlc3NPbmVZZWFyKGhlYWRlclJpZ2h0RGF0ZSwgaGVhZGVyTGVmdERhdGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFuZWxNb2RlID09PSAnbW9udGgnIHx8IHBhbmVsTW9kZSA9PT0gJ3F1YXJ0ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0FmdGVyTW9yZVRoYW5PbmVZZWFyKGhlYWRlclJpZ2h0RGF0ZSwgaGVhZGVyTGVmdERhdGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFuZWxNb2RlID09PSAneWVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzQWZ0ZXJNb3JlVGhhbk9uZURlY2FkZShoZWFkZXJSaWdodERhdGUsIGhlYWRlckxlZnREYXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0RhdGVSYW5nZUlucHV0XCI+XG4gIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tcGlja2VyLWlubmVyLXBvcHVwLXJhbmdlLWlucHV0XCI+XG4gICAgPGlucHV0IHRoeUlucHV0IHRoeVNpemU9XCJzbVwiIFt2YWx1ZV09XCJnZXRSZWFkYWJsZVZhbHVlKHNlbGVjdGVkVmFsdWVbMF0pXCIgcGxhY2Vob2xkZXI9XCLlvIDlp4vml6XmnJ9cIiAvPlxuICAgIDxzcGFuIGNsYXNzPVwic3BsaXRcIj48L3NwYW4+XG4gICAgPGlucHV0IHRoeUlucHV0IHRoeVNpemU9XCJzbVwiIFt2YWx1ZV09XCJnZXRSZWFkYWJsZVZhbHVlKHNlbGVjdGVkVmFsdWVbMV0pXCIgcGxhY2Vob2xkZXI9XCLnu5PmnZ/ml6XmnJ9cIiAvPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicGFuZWxNb2RlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkZWNhZGUnXCI+XG4gICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1kZWNhZGVcIj5cbiAgICAgIDxkZWNhZGUtaGVhZGVyXG4gICAgICAgIFsodmFsdWUpXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICBbc2hvd1N1cGVyUHJlQnRuXT1cImVuYWJsZVN1cGVyUHJldk5leHQoJ3ByZXYnLCAnZGVjYWRlJylcIlxuICAgICAgICBbc2hvd1N1cGVyTmV4dEJ0bl09XCJlbmFibGVTdXBlclByZXZOZXh0KCduZXh0JywgJ2RlY2FkZScpXCJcbiAgICAgICAgW3Nob3dOZXh0QnRuXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dQcmVCdG5dPVwiZmFsc2VcIlxuICAgICAgICAocGFuZWxNb2RlQ2hhbmdlKT1cInBhbmVsTW9kZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGVhZGVyQ2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgPC9kZWNhZGUtaGVhZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1ib2R5XCI+XG4gICAgICAgIDxkZWNhZGUtdGFibGUgW3ZhbHVlXT1cInZhbHVlXCIgW2FjdGl2ZURhdGVdPVwiYWN0aXZlRGF0ZVwiICh2YWx1ZUNoYW5nZSk9XCJvbkNob29zZURlY2FkZSgkZXZlbnQpXCI+PC9kZWNhZGUtdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3llYXInXCI+XG4gICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS15ZWFyXCI+XG4gICAgICA8eWVhci1oZWFkZXJcbiAgICAgICAgWyh2YWx1ZSldPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgIFtzaG93U3VwZXJQcmVCdG5dPVwiZW5hYmxlU3VwZXJQcmV2TmV4dCgncHJldicsICd5ZWFyJylcIlxuICAgICAgICBbc2hvd1N1cGVyTmV4dEJ0bl09XCJlbmFibGVTdXBlclByZXZOZXh0KCduZXh0JywgJ3llYXInKVwiXG4gICAgICAgIFtzaG93TmV4dEJ0bl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93UHJlQnRuXT1cImZhbHNlXCJcbiAgICAgICAgKHBhbmVsTW9kZUNoYW5nZSk9XCJwYW5lbE1vZGVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhlYWRlckNoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgICAgIDwveWVhci1oZWFkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWJvZHlcIj5cbiAgICAgICAgPHllYXItdGFibGVcbiAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgIFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZERhdGVdPVwiZGlzYWJsZWREYXRlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaG9vc2VZZWFyKCRldmVudClcIlxuICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInNlbGVjdGVkVmFsdWVcIj5cbiAgICAgICAgPC95ZWFyLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbW9udGgnXCI+XG4gICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1tb250aFwiPlxuICAgICAgPG1vbnRoLWhlYWRlclxuICAgICAgICBbKHZhbHVlKV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgW3Nob3dTdXBlclByZUJ0bl09XCJlbmFibGVTdXBlclByZXZOZXh0KCdwcmV2JywgJ21vbnRoJylcIlxuICAgICAgICBbc2hvd1N1cGVyTmV4dEJ0bl09XCJlbmFibGVTdXBlclByZXZOZXh0KCduZXh0JywgJ21vbnRoJylcIlxuICAgICAgICBbc2hvd05leHRCdG5dPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd1ByZUJ0bl09XCJmYWxzZVwiXG4gICAgICAgIChwYW5lbE1vZGVDaGFuZ2UpPVwicGFuZWxNb2RlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoZWFkZXJDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gICAgICA8L21vbnRoLWhlYWRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tYm9keVwiPlxuICAgICAgICA8bW9udGgtdGFibGVcbiAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgIFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZERhdGVdPVwiZGlzYWJsZWREYXRlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaG9vc2VNb250aCgkZXZlbnQpXCJcbiAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJzZWxlY3RlZFZhbHVlXCI+XG4gICAgICAgIDwvbW9udGgtdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidxdWFydGVyJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tcXVhcnRlclwiPlxuICAgICAgPG1vbnRoLWhlYWRlclxuICAgICAgICBbKHZhbHVlKV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgW3Nob3dTdXBlclByZUJ0bl09XCJlbmFibGVTdXBlclByZXZOZXh0KCdwcmV2JywgJ21vbnRoJylcIlxuICAgICAgICBbc2hvd1N1cGVyTmV4dEJ0bl09XCJlbmFibGVTdXBlclByZXZOZXh0KCduZXh0JywgJ21vbnRoJylcIlxuICAgICAgICBbc2hvd05leHRCdG5dPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd1ByZUJ0bl09XCJmYWxzZVwiXG4gICAgICAgIChwYW5lbE1vZGVDaGFuZ2UpPVwicGFuZWxNb2RlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoZWFkZXJDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gICAgICA8L21vbnRoLWhlYWRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tYm9keVwiPlxuICAgICAgICA8cXVhcnRlci10YWJsZVxuICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgW2FjdGl2ZURhdGVdPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkRGF0ZV09XCJkaXNhYmxlZERhdGVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNob29zZVF1YXJ0ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwic2VsZWN0ZWRWYWx1ZVwiPlxuICAgICAgICA8L3F1YXJ0ZXItdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICA8ZGF0ZS1oZWFkZXJcbiAgICAgIFsodmFsdWUpXT1cImFjdGl2ZURhdGVcIlxuICAgICAgW3Nob3dTdXBlclByZUJ0bl09XCJlbmFibGVTdXBlclByZXZOZXh0KCdwcmV2JywgJ2RhdGUnKVwiXG4gICAgICBbc2hvd1N1cGVyTmV4dEJ0bl09XCJlbmFibGVTdXBlclByZXZOZXh0KCduZXh0JywgJ2RhdGUnKVwiXG4gICAgICBbc2hvd1ByZUJ0bl09XCJlbmFibGVQcmV2TmV4dCgncHJldicsICdkYXRlJylcIlxuICAgICAgW3Nob3dOZXh0QnRuXT1cImVuYWJsZVByZXZOZXh0KCduZXh0JywgJ2RhdGUnKVwiXG4gICAgICAocGFuZWxNb2RlQ2hhbmdlKT1cInBhbmVsTW9kZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cImhlYWRlckNoYW5nZS5lbWl0KCRldmVudClcIj48L2RhdGUtaGVhZGVyPlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tYm9keVwiPlxuICAgICAgPGRhdGUtdGFibGVcbiAgICAgICAgW3Nob3dXZWVrXT1cInNob3dXZWVrXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW2FjdGl2ZURhdGVdPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblNlbGVjdERhdGUoJGV2ZW50KVwiXG4gICAgICAgIHNob3dXZWVrTnVtYmVyPVwiZmFsc2VcIlxuICAgICAgICBbZGlzYWJsZWREYXRlXT1cImRpc2FibGVkRGF0ZVwiXG4gICAgICAgIFtjZWxsUmVuZGVyXT1cImRhdGVSZW5kZXJcIlxuICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgW2hvdmVyVmFsdWVdPVwiaG92ZXJWYWx1ZVwiXG4gICAgICAgIChkYXlIb3Zlcik9XCJkYXlIb3Zlci5lbWl0KCRldmVudClcIj48L2RhdGUtdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5uZXItcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGUtcGlja2VyL2xpYi9wb3B1cHMvaW5uZXItcG9wdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGUtcGlja2VyL2xpYi9wb3B1cHMvaW5uZXItcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUdULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBZ0IsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFOUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFMUksT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVE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SztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdGLGtCQUFrQjtzQkFEckIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRTtnQkFTbEMsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVhLGVBQWU7c0JBQWpDLE1BQU07Z0JBRUUsS0FBSztzQkFBYixLQUFLO2dCQUVhLFlBQVk7c0JBQTlCLE1BQU07Z0JBQ1ksVUFBVTtzQkFBNUIsTUFBTTtnQkFDWSxRQUFRO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnVuY3Rpb25Qcm9wLCBUaW55RGF0ZSwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IERhdGVIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGF0ZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBSYW5nZVBhcnRUeXBlIH0gZnJvbSAnLi4vLi4vaW5uZXItdHlwZXMnO1xuaW1wb3J0IHsgaXNBZnRlck1vcmVUaGFuTGVzc09uZVllYXIsIGlzQWZ0ZXJNb3JlVGhhbk9uZURlY2FkZSwgaXNBZnRlck1vcmVUaGFuT25lTW9udGgsIGlzQWZ0ZXJNb3JlVGhhbk9uZVllYXIgfSBmcm9tICcuLi8uLi9waWNrZXIudXRpbCc7XG5pbXBvcnQgeyBEaXNhYmxlZERhdGVGbiwgVGh5UGFuZWxNb2RlIH0gZnJvbSAnLi4vLi4vc3RhbmRhcmQtdHlwZXMnO1xuaW1wb3J0IHsgRGF0ZUhlYWRlciB9IGZyb20gJy4uL2RhdGUvZGF0ZS1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVUYWJsZSB9IGZyb20gJy4uL2RhdGUvZGF0ZS10YWJsZS5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGh5SW5wdXREaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL2lucHV0JztcbmltcG9ydCB7IERlY2FkZUhlYWRlciB9IGZyb20gJy4uL2RlY2FkZS9kZWNhZGUtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWNhZGVUYWJsZSB9IGZyb20gJy4uL2RlY2FkZS9kZWNhZGUtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE1vbnRoSGVhZGVyIH0gZnJvbSAnLi4vbW9udGgvbW9udGgtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb250aFRhYmxlIH0gZnJvbSAnLi4vbW9udGgvbW9udGgtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFllYXJIZWFkZXIgfSBmcm9tICcuLi95ZWFyL3llYXItaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBZZWFyVGFibGUgfSBmcm9tICcuLi95ZWFyL3llYXItdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFF1YXJ0ZXJUYWJsZSB9IGZyb20gJy4uL3F1YXJ0ZXIvcXVhcnRlci10YWJsZS5jb21wb25lbnQnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdpbm5lci1wb3B1cCcsXG4gICAgZXhwb3J0QXM6ICdpbm5lclBvcHVwJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2lubmVyLXBvcHVwLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgVGh5SW5wdXREaXJlY3RpdmUsXG4gICAgICAgIE5nU3dpdGNoLFxuICAgICAgICBOZ1N3aXRjaENhc2UsXG4gICAgICAgIERlY2FkZUhlYWRlcixcbiAgICAgICAgRGVjYWRlVGFibGUsXG4gICAgICAgIFllYXJIZWFkZXIsXG4gICAgICAgIFllYXJUYWJsZSxcbiAgICAgICAgTW9udGhIZWFkZXIsXG4gICAgICAgIE1vbnRoVGFibGUsXG4gICAgICAgIFF1YXJ0ZXJUYWJsZSxcbiAgICAgICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgICAgICBEYXRlSGVhZGVyLFxuICAgICAgICBEYXRlVGFibGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElubmVyUG9wdXAgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LWNhbGVuZGFyLXBpY2tlci1pbm5lci1wb3B1cCcpIGNsYXNzTmFtZSA9IHRydWU7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktY2FsZW5kYXItcGlja2VyLWlubmVyLXBvcHVwLXdpdGgtcmFuZ2UtaW5wdXQnKSBfc2hvd0RhdGVSYW5nZUlucHV0ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzaG93V2VlazogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpc1JhbmdlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFjdGl2ZURhdGU6IFRpbnlEYXRlO1xuICAgIEBJbnB1dCgpIHJhbmdlQWN0aXZlRGF0ZTogVGlueURhdGVbXTsgLy8gUmFuZ2UgT05MWVxuICAgIEBJbnB1dCgpIGVuYWJsZVByZXY6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZW5hYmxlTmV4dDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlZERhdGU6IERpc2FibGVkRGF0ZUZuO1xuICAgIEBJbnB1dCgpIGRhdGVSZW5kZXI6IEZ1bmN0aW9uUHJvcDxUZW1wbGF0ZVJlZjxEYXRlPiB8IHN0cmluZz47XG4gICAgQElucHV0KCkgc2VsZWN0ZWRWYWx1ZTogVGlueURhdGVbXTsgLy8gUmFuZ2UgT05MWVxuICAgIEBJbnB1dCgpIGhvdmVyVmFsdWU6IFRpbnlEYXRlW107IC8vIFJhbmdlIE9OTFlcblxuICAgIEBJbnB1dCgpIHBhbmVsTW9kZTogVGh5UGFuZWxNb2RlO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICBzZXQgc2hvd0RhdGVSYW5nZUlucHV0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dEYXRlUmFuZ2VJbnB1dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBzaG93RGF0ZVJhbmdlSW5wdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93RGF0ZVJhbmdlSW5wdXQ7XG4gICAgfVxuXG4gICAgQElucHV0KCkgcGFydFR5cGU6IFJhbmdlUGFydFR5cGU7XG5cbiAgICBASW5wdXQoKSBlbmRQYW5lbE1vZGU6IFRoeVBhbmVsTW9kZTtcblxuICAgIEBPdXRwdXQoKSByZWFkb25seSBwYW5lbE1vZGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVBhbmVsTW9kZT4oKTtcblxuICAgIEBJbnB1dCgpIHZhbHVlOiBUaW55RGF0ZTtcblxuICAgIEBPdXRwdXQoKSByZWFkb25seSBoZWFkZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRpbnlEYXRlPigpO1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3REYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUaW55RGF0ZT4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgZGF5SG92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFRpbnlEYXRlPigpO1xuXG4gICAgcHJlZml4Q2xzID0gJ3RoeS1jYWxlbmRhcic7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVIZWxwZXI6IERhdGVIZWxwZXJTZXJ2aWNlKSB7fVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5hY3RpdmVEYXRlICYmICFjaGFuZ2VzLmFjdGl2ZURhdGUuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgVGlueURhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5wYW5lbE1vZGUgJiYgY2hhbmdlcy5wYW5lbE1vZGUuY3VycmVudFZhbHVlID09PSAndGltZScpIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxNb2RlID0gJ2RhdGUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UmVhZGFibGVWYWx1ZSh2YWx1ZTogVGlueURhdGUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID8gdGhpcy5kYXRlSGVscGVyLmZvcm1hdCh2YWx1ZS5uYXRpdmVEYXRlLCAneXl5eS1NTS1kZCcpIDogJyc7XG4gICAgfVxuXG4gICAgb25TZWxlY3REYXRlKGRhdGU6IFRpbnlEYXRlIHwgRGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGUgaW5zdGFuY2VvZiBUaW55RGF0ZSA/IGRhdGUgOiBuZXcgVGlueURhdGUoZGF0ZSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3REYXRlLmVtaXQodmFsdWUpO1xuICAgIH1cblxuICAgIG9uQ2hvb3NlTW9udGgodmFsdWU6IFRpbnlEYXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuYWN0aXZlRGF0ZS5zZXRNb250aCh2YWx1ZS5nZXRNb250aCgpKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kUGFuZWxNb2RlID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucGFuZWxNb2RlQ2hhbmdlLmVtaXQodGhpcy5lbmRQYW5lbE1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaG9vc2VRdWFydGVyKHZhbHVlOiBUaW55RGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmFjdGl2ZURhdGUuc2V0UXVhcnRlcih2YWx1ZS5nZXRRdWFydGVyKCkpO1xuICAgICAgICBpZiAodGhpcy5lbmRQYW5lbE1vZGUgPT09ICdxdWFydGVyJykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlLmVtaXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnBhbmVsTW9kZUNoYW5nZS5lbWl0KHRoaXMuZW5kUGFuZWxNb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hvb3NlWWVhcih2YWx1ZTogVGlueURhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5hY3RpdmVEYXRlLnNldFllYXIodmFsdWUuZ2V0WWVhcigpKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kUGFuZWxNb2RlID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5wYW5lbE1vZGVDaGFuZ2UuZW1pdCh0aGlzLmVuZFBhbmVsTW9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNob29zZURlY2FkZSh2YWx1ZTogVGlueURhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5hY3RpdmVEYXRlLnNldFllYXIodmFsdWUuZ2V0WWVhcigpKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kUGFuZWxNb2RlID09PSAnZGVjYWRlJykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlLmVtaXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnBhbmVsTW9kZUNoYW5nZS5lbWl0KCd5ZWFyJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbmFibGVQcmV2TmV4dChkaXJlY3Rpb246ICdwcmV2JyB8ICduZXh0JywgbW9kZTogVGh5UGFuZWxNb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmICgodGhpcy5wYXJ0VHlwZSA9PT0gJ2xlZnQnICYmIGRpcmVjdGlvbiA9PT0gJ25leHQnKSB8fCAodGhpcy5wYXJ0VHlwZSA9PT0gJ3JpZ2h0JyAmJiBkaXJlY3Rpb24gPT09ICdwcmV2JykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbaGVhZGVyTGVmdERhdGUsIGhlYWRlclJpZ2h0RGF0ZV0gPSB0aGlzLnJhbmdlQWN0aXZlRGF0ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNBZnRlck1vcmVUaGFuT25lTW9udGgoaGVhZGVyUmlnaHREYXRlLCBoZWFkZXJMZWZ0RGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbmFibGVTdXBlclByZXZOZXh0KGRpcmVjdGlvbjogJ3ByZXYnIHwgJ25leHQnLCBwYW5lbE1vZGU6IFRoeVBhbmVsTW9kZSkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMucGFydFR5cGUgPT09ICdsZWZ0JyAmJiBkaXJlY3Rpb24gPT09ICduZXh0JykgfHwgKHRoaXMucGFydFR5cGUgPT09ICdyaWdodCcgJiYgZGlyZWN0aW9uID09PSAncHJldicpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2hlYWRlckxlZnREYXRlLCBoZWFkZXJSaWdodERhdGVdID0gdGhpcy5yYW5nZUFjdGl2ZURhdGU7XG4gICAgICAgICAgICAgICAgaWYgKHBhbmVsTW9kZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0FmdGVyTW9yZVRoYW5MZXNzT25lWWVhcihoZWFkZXJSaWdodERhdGUsIGhlYWRlckxlZnREYXRlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhbmVsTW9kZSA9PT0gJ21vbnRoJyB8fCBwYW5lbE1vZGUgPT09ICdxdWFydGVyJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNBZnRlck1vcmVUaGFuT25lWWVhcihoZWFkZXJSaWdodERhdGUsIGhlYWRlckxlZnREYXRlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhbmVsTW9kZSA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0FmdGVyTW9yZVRoYW5PbmVEZWNhZGUoaGVhZGVyUmlnaHREYXRlLCBoZWFkZXJMZWZ0RGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dEYXRlUmFuZ2VJbnB1dFwiPlxuICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LXBpY2tlci1pbm5lci1wb3B1cC1yYW5nZS1pbnB1dFwiPlxuICAgIDxpbnB1dCB0aHlJbnB1dCB0aHlTaXplPVwic21cIiBbdmFsdWVdPVwiZ2V0UmVhZGFibGVWYWx1ZShzZWxlY3RlZFZhbHVlWzBdKVwiIHBsYWNlaG9sZGVyPVwi5byA5aeL5pel5pyfXCIgLz5cbiAgICA8c3BhbiBjbGFzcz1cInNwbGl0XCI+PC9zcGFuPlxuICAgIDxpbnB1dCB0aHlJbnB1dCB0aHlTaXplPVwic21cIiBbdmFsdWVdPVwiZ2V0UmVhZGFibGVWYWx1ZShzZWxlY3RlZFZhbHVlWzFdKVwiIHBsYWNlaG9sZGVyPVwi57uT5p2f5pel5pyfXCIgLz5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInBhbmVsTW9kZVwiPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGVjYWRlJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tZGVjYWRlXCI+XG4gICAgICA8ZGVjYWRlLWhlYWRlclxuICAgICAgICBbKHZhbHVlKV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgW3Nob3dTdXBlclByZUJ0bl09XCJlbmFibGVTdXBlclByZXZOZXh0KCdwcmV2JywgJ2RlY2FkZScpXCJcbiAgICAgICAgW3Nob3dTdXBlck5leHRCdG5dPVwiZW5hYmxlU3VwZXJQcmV2TmV4dCgnbmV4dCcsICdkZWNhZGUnKVwiXG4gICAgICAgIFtzaG93TmV4dEJ0bl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93UHJlQnRuXT1cImZhbHNlXCJcbiAgICAgICAgKHBhbmVsTW9kZUNoYW5nZSk9XCJwYW5lbE1vZGVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhlYWRlckNoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgICAgIDwvZGVjYWRlLWhlYWRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tYm9keVwiPlxuICAgICAgICA8ZGVjYWRlLXRhYmxlIFt2YWx1ZV09XCJ2YWx1ZVwiIFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIiAodmFsdWVDaGFuZ2UpPVwib25DaG9vc2VEZWNhZGUoJGV2ZW50KVwiPjwvZGVjYWRlLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid5ZWFyJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0teWVhclwiPlxuICAgICAgPHllYXItaGVhZGVyXG4gICAgICAgIFsodmFsdWUpXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICBbc2hvd1N1cGVyUHJlQnRuXT1cImVuYWJsZVN1cGVyUHJldk5leHQoJ3ByZXYnLCAneWVhcicpXCJcbiAgICAgICAgW3Nob3dTdXBlck5leHRCdG5dPVwiZW5hYmxlU3VwZXJQcmV2TmV4dCgnbmV4dCcsICd5ZWFyJylcIlxuICAgICAgICBbc2hvd05leHRCdG5dPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd1ByZUJ0bl09XCJmYWxzZVwiXG4gICAgICAgIChwYW5lbE1vZGVDaGFuZ2UpPVwicGFuZWxNb2RlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoZWFkZXJDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gICAgICA8L3llYXItaGVhZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cInt7IHByZWZpeENscyB9fS1ib2R5XCI+XG4gICAgICAgIDx5ZWFyLXRhYmxlXG4gICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICBbYWN0aXZlRGF0ZV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWREYXRlXT1cImRpc2FibGVkRGF0ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uQ2hvb3NlWWVhcigkZXZlbnQpXCJcbiAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJzZWxlY3RlZFZhbHVlXCI+XG4gICAgICAgIDwveWVhci10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21vbnRoJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBwcmVmaXhDbHMgfX0tbW9udGhcIj5cbiAgICAgIDxtb250aC1oZWFkZXJcbiAgICAgICAgWyh2YWx1ZSldPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgIFtzaG93U3VwZXJQcmVCdG5dPVwiZW5hYmxlU3VwZXJQcmV2TmV4dCgncHJldicsICdtb250aCcpXCJcbiAgICAgICAgW3Nob3dTdXBlck5leHRCdG5dPVwiZW5hYmxlU3VwZXJQcmV2TmV4dCgnbmV4dCcsICdtb250aCcpXCJcbiAgICAgICAgW3Nob3dOZXh0QnRuXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dQcmVCdG5dPVwiZmFsc2VcIlxuICAgICAgICAocGFuZWxNb2RlQ2hhbmdlKT1cInBhbmVsTW9kZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGVhZGVyQ2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgPC9tb250aC1oZWFkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWJvZHlcIj5cbiAgICAgICAgPG1vbnRoLXRhYmxlXG4gICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICBbYWN0aXZlRGF0ZV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWREYXRlXT1cImRpc2FibGVkRGF0ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uQ2hvb3NlTW9udGgoJGV2ZW50KVwiXG4gICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwic2VsZWN0ZWRWYWx1ZVwiPlxuICAgICAgICA8L21vbnRoLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncXVhcnRlcidcIj5cbiAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LXF1YXJ0ZXJcIj5cbiAgICAgIDxtb250aC1oZWFkZXJcbiAgICAgICAgWyh2YWx1ZSldPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgIFtzaG93U3VwZXJQcmVCdG5dPVwiZW5hYmxlU3VwZXJQcmV2TmV4dCgncHJldicsICdtb250aCcpXCJcbiAgICAgICAgW3Nob3dTdXBlck5leHRCdG5dPVwiZW5hYmxlU3VwZXJQcmV2TmV4dCgnbmV4dCcsICdtb250aCcpXCJcbiAgICAgICAgW3Nob3dOZXh0QnRuXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dQcmVCdG5dPVwiZmFsc2VcIlxuICAgICAgICAocGFuZWxNb2RlQ2hhbmdlKT1cInBhbmVsTW9kZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGVhZGVyQ2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgPC9tb250aC1oZWFkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWJvZHlcIj5cbiAgICAgICAgPHF1YXJ0ZXItdGFibGVcbiAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgIFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZERhdGVdPVwiZGlzYWJsZWREYXRlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaG9vc2VRdWFydGVyKCRldmVudClcIlxuICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInNlbGVjdGVkVmFsdWVcIj5cbiAgICAgICAgPC9xdWFydGVyLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgPGRhdGUtaGVhZGVyXG4gICAgICBbKHZhbHVlKV09XCJhY3RpdmVEYXRlXCJcbiAgICAgIFtzaG93U3VwZXJQcmVCdG5dPVwiZW5hYmxlU3VwZXJQcmV2TmV4dCgncHJldicsICdkYXRlJylcIlxuICAgICAgW3Nob3dTdXBlck5leHRCdG5dPVwiZW5hYmxlU3VwZXJQcmV2TmV4dCgnbmV4dCcsICdkYXRlJylcIlxuICAgICAgW3Nob3dQcmVCdG5dPVwiZW5hYmxlUHJldk5leHQoJ3ByZXYnLCAnZGF0ZScpXCJcbiAgICAgIFtzaG93TmV4dEJ0bl09XCJlbmFibGVQcmV2TmV4dCgnbmV4dCcsICdkYXRlJylcIlxuICAgICAgKHBhbmVsTW9kZUNoYW5nZSk9XCJwYW5lbE1vZGVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJoZWFkZXJDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+PC9kYXRlLWhlYWRlcj5cbiAgICA8ZGl2IGNsYXNzPVwie3sgcHJlZml4Q2xzIH19LWJvZHlcIj5cbiAgICAgIDxkYXRlLXRhYmxlXG4gICAgICAgIFtzaG93V2Vla109XCJzaG93V2Vla1wiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25TZWxlY3REYXRlKCRldmVudClcIlxuICAgICAgICBzaG93V2Vla051bWJlcj1cImZhbHNlXCJcbiAgICAgICAgW2Rpc2FibGVkRGF0ZV09XCJkaXNhYmxlZERhdGVcIlxuICAgICAgICBbY2VsbFJlbmRlcl09XCJkYXRlUmVuZGVyXCJcbiAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIFtob3ZlclZhbHVlXT1cImhvdmVyVmFsdWVcIlxuICAgICAgICAoZGF5SG92ZXIpPVwiZGF5SG92ZXIuZW1pdCgkZXZlbnQpXCI+PC9kYXRlLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
|