@seniorsistemas/angular-components 19.0.5 → 19.0.6
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/accordion/lib/accordion/accordion.component.d.ts +25 -0
- package/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.d.ts +60 -0
- package/alert/lib/alert/alert.component.d.ts +40 -0
- package/autocomplete/lib/autocomplete/autocomplete.component.d.ts +51 -0
- package/badge/lib/badge/badge.component.d.ts +20 -0
- package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +46 -1
- package/breadcrumb/lib/breadcrumb/breadcrumb.component.d.ts +12 -0
- package/button/lib/button/button.component.d.ts +101 -0
- package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +24 -0
- package/card/lib/card/card.component.d.ts +18 -0
- package/chat/lib/chat/chat.component.d.ts +20 -2
- package/chat/lib/chat/components/chat-message/chat-message.component.d.ts +18 -2
- package/checkbox/lib/checkbox/checkbox.component.d.ts +23 -3
- package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +20 -0
- package/chips/lib/chips/chip-item/chip-item.component.d.ts +15 -0
- package/chips/lib/chips/chips/chips.component.d.ts +41 -0
- package/code-editor/lib/code-editor/code-editor.component.d.ts +40 -0
- package/collapse-link/lib/collapse-link/collapse-link.component.d.ts +18 -0
- package/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.d.ts +5 -0
- package/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.d.ts +19 -0
- package/content-generator/lib/content-generator/content-generator.component.d.ts +30 -0
- package/control-errors/lib/control-errors/control-errors.component.d.ts +36 -0
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +36 -0
- package/currency/lib/currency.service.d.ts +15 -2
- package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +31 -0
- package/dialog/lib/src/dialog/dialog.component.d.ts +51 -0
- package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -2
- package/dialog/lib/src/dialog/services/internal-dialog.service.d.ts +1 -1
- package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +6 -5
- package/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.d.ts +5 -0
- package/dynamic-form/dynamic-form/configurations/structure/fieldset.d.ts +14 -0
- package/dynamic-form/dynamic-form/configurations/structure/row.d.ts +67 -0
- package/dynamic-form/dynamic-form/configurations/structure/section.d.ts +8 -0
- package/dynamic-form/dynamic-form/configurations/structure/structure.d.ts +19 -0
- package/dynamic-form/dynamic-form/dynamic-form.component.d.ts +21 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +45 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +59 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.d.ts +55 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +35 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +17 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.d.ts +23 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +66 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +15 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.d.ts +30 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.d.ts +47 -2
- package/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.d.ts +26 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +18 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +44 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +112 -4
- package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +42 -3
- package/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.d.ts +48 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +62 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.d.ts +34 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.d.ts +63 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.d.ts +47 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +23 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +37 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +65 -2
- package/dynamic-form/public-api.d.ts +1 -0
- package/editable-overlay/lib/editable-overlay/editable-overlay.directive.d.ts +16 -0
- package/empty-state/lib/empty-state/empty-state.component.d.ts +59 -0
- package/esm2022/accordion/lib/accordion/accordion.component.mjs +26 -1
- package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +61 -1
- package/esm2022/alert/lib/alert/alert.component.mjs +41 -1
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +52 -1
- package/esm2022/badge/lib/badge/badge.component.mjs +21 -1
- package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +47 -2
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +13 -1
- package/esm2022/button/lib/button/button.component.mjs +102 -1
- package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +72 -47
- package/esm2022/card/lib/card/card.component.mjs +21 -6
- package/esm2022/chat/lib/chat/chat.component.mjs +23 -5
- package/esm2022/chat/lib/chat/components/chat-message/chat-message.component.mjs +20 -4
- package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +24 -4
- package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +22 -2
- package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +17 -2
- package/esm2022/chips/lib/chips/chips/chips.component.mjs +42 -1
- package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +41 -1
- package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +19 -1
- package/esm2022/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.mjs +6 -1
- package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +20 -1
- package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +31 -1
- package/esm2022/control-errors/lib/control-errors/control-errors.component.mjs +37 -1
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +37 -1
- package/esm2022/currency/lib/currency.service.mjs +21 -8
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +32 -1
- package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +66 -11
- package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -10
- package/esm2022/dialog/lib/src/dialog/services/internal-dialog.service.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/fieldset.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/row.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/section.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/structure.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/dynamic-form.component.mjs +22 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +1 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +6 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +3 -3
- package/esm2022/dynamic-form/public-api.mjs +2 -2
- package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.directive.mjs +17 -1
- package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +60 -1
- package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +25 -5
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +48 -1
- package/esm2022/gantt/lib/gantt/gantt.component.mjs +32 -1
- package/esm2022/global-search/lib/global-search/global-search.component.mjs +30 -1
- package/esm2022/grid-menu/lib/grid-menu/grid-menu.component.mjs +40 -1
- package/esm2022/help-popover/lib/help-popover/help-popover.directive.mjs +83 -27
- package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +40 -3
- package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +18 -2
- package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +33 -4
- package/esm2022/inline-edit/lib/inline-edit/inline-edit.component.mjs +16 -1
- package/esm2022/insights/lib/insights/insights.component.mjs +23 -1
- package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +21 -1
- package/esm2022/kanban/lib/kanban/kanban.component.mjs +34 -16
- package/esm2022/label-value/lib/label-value/label-value.component.mjs +14 -1
- package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +37 -1
- package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +24 -1
- package/esm2022/locale/lib/locale/locale.service.mjs +8 -1
- package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +17 -1
- package/esm2022/mask/lib/mask/mask-formatter.pipe.mjs +13 -1
- package/esm2022/mouse-events/lib/mouse-events/double-click.directive.mjs +16 -3
- package/esm2022/mouse-events/lib/mouse-events/long-press.directive.mjs +24 -10
- package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +20 -1
- package/esm2022/number-input/lib/number-input/number-input.directive.mjs +32 -12
- package/esm2022/numeric/lib/numeric.pipe.mjs +16 -1
- package/esm2022/numeric/lib/numeric.service.mjs +21 -1
- package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +9 -6
- package/esm2022/object-card/lib/object-card/object-card.component.mjs +24 -1
- package/esm2022/optional-fields/editor/editor-field.mjs +1 -1
- package/esm2022/paginator/lib/paginator/paginator.component.mjs +20 -1
- package/esm2022/panel/lib/panel/panel.component.mjs +44 -23
- package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +25 -1
- package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +54 -1
- package/esm2022/picklist/lib/picklist/picklist.component.mjs +33 -2
- package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +29 -34
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +86 -2
- package/esm2022/progressbar/lib/progressbar/progressbar.component.mjs +53 -3
- package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +28 -1
- package/esm2022/radio-button/lib/radio-button-group/radio-button-group.component.mjs +27 -1
- package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +39 -7
- package/esm2022/select/lib/select/select.component.mjs +35 -1
- package/esm2022/select-button/lib/select-button/select-button.component.mjs +35 -1
- package/esm2022/shared/lib/shared/border-button/border-button.component.mjs +11 -3
- package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +54 -1
- package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +76 -36
- package/esm2022/slider/lib/slider/slider.component.mjs +90 -9
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +25 -4
- package/esm2022/split-button/lib/split-button/split-button.component.mjs +24 -2
- package/esm2022/star-rating/star-rating/star-rating.component.mjs +17 -1
- package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +32 -10
- package/esm2022/stepper/lib/stepper/stepper.component.mjs +20 -1
- package/esm2022/structure/lib/structure/footer.component.mjs +11 -1
- package/esm2022/switch/lib/switch/switch.component.mjs +22 -2
- package/esm2022/table/lib/table/table-column/table-columns.component.mjs +16 -1
- package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +29 -3
- package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +33 -2
- package/esm2022/tabs/lib/tabs/tabs.component.mjs +35 -3
- package/esm2022/template/lib/template/template.directive.mjs +14 -2
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +28 -1
- package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +25 -1
- package/esm2022/thumbnails/lib/thumbnails/thumbnails.component.mjs +28 -3
- package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +30 -1
- package/esm2022/tile/lib/tile/tile.component.mjs +26 -1
- package/esm2022/timeline/lib/timeline/timeline.component.mjs +26 -3
- package/esm2022/toast/lib/toast/toast.component.mjs +24 -4
- package/esm2022/token-list/lib/token-list/token-list.component.mjs +22 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +66 -1
- package/esm2022/topbar/lib/topbar/topbar.component.mjs +18 -1
- package/esm2022/tree/lib/tree/tree.component.mjs +28 -1
- package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +47 -1
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs +85 -0
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-alert.mjs +40 -0
- package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +51 -0
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-badge.mjs +20 -0
- package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +46 -1
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +12 -0
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-button.mjs +101 -0
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +71 -46
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-card.mjs +19 -4
- package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chat.mjs +39 -5
- package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +21 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +23 -3
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chips.mjs +57 -1
- package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +40 -0
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +18 -0
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-common.mjs +5 -0
- package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +19 -0
- package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +30 -0
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +36 -0
- package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +36 -0
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-currency.mjs +19 -6
- package/fesm2022/seniorsistemas-angular-components-currency.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +31 -0
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dialog.mjs +74 -16
- package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +29 -4
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +16 -0
- package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +59 -0
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +21 -1
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +47 -0
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs +31 -0
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +29 -0
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +39 -0
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +80 -24
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +38 -1
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +17 -1
- package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +30 -1
- package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +15 -0
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-insights.mjs +22 -0
- package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +20 -0
- package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs +28 -10
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-label-value.mjs +13 -0
- package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +59 -0
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-locale.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +16 -0
- package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-mask.mjs +12 -0
- package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +35 -8
- package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +19 -0
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs +31 -11
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +8 -5
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric.mjs +35 -0
- package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs +23 -0
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs +19 -0
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-panel.mjs +39 -18
- package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +77 -0
- package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs +32 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +28 -33
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +85 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +52 -2
- package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +53 -0
- package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +36 -4
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs +34 -0
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +34 -0
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs +9 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +53 -0
- package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +71 -31
- package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slider.mjs +89 -8
- package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +24 -3
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs +22 -0
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +16 -0
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +30 -8
- package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs +19 -0
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-structure.mjs +10 -0
- package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-switch.mjs +20 -0
- package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs +28 -2
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs +15 -0
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs +65 -2
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-template.mjs +13 -1
- package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +27 -0
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +24 -0
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +26 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +29 -0
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tile.mjs +25 -0
- package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-timeline.mjs +25 -2
- package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-toast.mjs +22 -2
- package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs +21 -0
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +65 -0
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-topbar.mjs +17 -0
- package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tree.mjs +27 -0
- package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +46 -0
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
- package/fieldset/lib/fieldset/fieldset.component.d.ts +23 -3
- package/file-picker/lib/file-picker/file-picker.component.d.ts +47 -0
- package/gantt/lib/gantt/gantt.component.d.ts +31 -0
- package/global-search/lib/global-search/global-search.component.d.ts +29 -0
- package/grid-menu/lib/grid-menu/grid-menu.component.d.ts +39 -0
- package/help-popover/lib/help-popover/help-popover.directive.d.ts +67 -17
- package/image-cropper/lib/image-cropper/image-cropper.component.d.ts +38 -0
- package/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.d.ts +15 -0
- package/info-sign/lib/info-sign/info-sign.directive.d.ts +30 -1
- package/inline-edit/lib/inline-edit/inline-edit.component.d.ts +15 -0
- package/insights/lib/insights/insights.component.d.ts +22 -0
- package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +20 -0
- package/kanban/lib/kanban/kanban.component.d.ts +25 -5
- package/label-value/lib/label-value/label-value.component.d.ts +13 -0
- package/loading-state/lib/loading-state/loading-state.component.d.ts +36 -0
- package/loading-state/lib/loading-state/loading-state.directive.d.ts +23 -0
- package/locale/lib/locale/locale.service.d.ts +7 -0
- package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +16 -0
- package/mask/lib/mask/mask-formatter.pipe.d.ts +12 -0
- package/mouse-events/lib/mouse-events/double-click.directive.d.ts +13 -0
- package/mouse-events/lib/mouse-events/long-press.directive.d.ts +16 -2
- package/navigation-button/lib/navigation-button/navigation-button.component.d.ts +19 -0
- package/number-input/lib/number-input/number-input.directive.d.ts +19 -1
- package/numeric/lib/numeric.pipe.d.ts +15 -0
- package/numeric/lib/numeric.service.d.ts +20 -0
- package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +5 -4
- package/object-card/lib/object-card/object-card.component.d.ts +23 -0
- package/optional-fields/editor/editor-field.d.ts +19 -0
- package/package.json +12 -12
- package/paginator/lib/paginator/paginator.component.d.ts +19 -0
- package/panel/lib/panel/panel.component.d.ts +24 -3
- package/password-strength/lib/password-strength/password-strength.component.d.ts +24 -0
- package/password-strength/lib/password-strength/password-strength.directive.d.ts +53 -0
- package/picklist/lib/picklist/picklist.component.d.ts +29 -0
- package/pin-code-field/lib/pin-code-field/pin-code-field.component.d.ts +28 -33
- package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +85 -1
- package/progressbar/lib/progressbar/progressbar.component.d.ts +50 -0
- package/radio-button/lib/radio-button/radio-button.component.d.ts +27 -0
- package/radio-button/lib/radio-button-group/radio-button-group.component.d.ts +26 -0
- package/rating-scale/lib/rating-scale/rating-scale.component.d.ts +30 -2
- package/select/lib/select/select.component.d.ts +34 -0
- package/select-button/lib/select-button/select-button.component.d.ts +34 -0
- package/shared/lib/shared/border-button/border-button.component.d.ts +10 -2
- package/sidebar/lib/sidebar/sidebar.component.d.ts +53 -0
- package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +53 -2
- package/slider/lib/slider/slider.component.d.ts +72 -0
- package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +18 -0
- package/split-button/lib/split-button/split-button.component.d.ts +22 -0
- package/star-rating/star-rating/star-rating.component.d.ts +16 -0
- package/stats-card/lib/stats-card/stats-card.component.d.ts +28 -0
- package/stepper/lib/stepper/stepper.component.d.ts +19 -0
- package/structure/lib/structure/footer.component.d.ts +10 -0
- package/switch/lib/switch/switch.component.d.ts +20 -0
- package/table/lib/table/table-column/table-columns.component.d.ts +15 -0
- package/table-header/lib/table-header/table-header-checkbox.component.d.ts +18 -0
- package/tabs/lib/tab-item/tab-item.component.d.ts +31 -0
- package/tabs/lib/tabs/tabs.component.d.ts +28 -0
- package/template/lib/template/template.directive.d.ts +12 -0
- package/text-area/lib/text-area/text-area.component.d.ts +27 -0
- package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +24 -0
- package/thumbnails/lib/thumbnails/thumbnails.component.d.ts +27 -2
- package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +29 -0
- package/tile/lib/tile/tile.component.d.ts +25 -0
- package/timeline/lib/timeline/timeline.component.d.ts +24 -0
- package/toast/lib/toast/toast.component.d.ts +22 -2
- package/token-list/lib/token-list/token-list.component.d.ts +21 -0
- package/tooltip/lib/tooltip/tooltip.directive.d.ts +65 -0
- package/topbar/lib/topbar/topbar.component.d.ts +17 -0
- package/tree/lib/tree/tree.component.d.ts +27 -0
- package/workspace-switch/lib/workspace-switch/workspace-switch.component.d.ts +46 -0
|
@@ -3,20 +3,92 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@angular/common";
|
|
5
5
|
import * as i2 from "@seniorsistemas/angular-components/tooltip";
|
|
6
|
+
/**
|
|
7
|
+
* @description Componente de controle deslizante (slider) para seleção de valores numéricos
|
|
8
|
+
* dentro de um intervalo definido. Suporta modo simples (um valor) e modo de intervalo
|
|
9
|
+
* (dois valores: início e fim). Implementa {@link ControlValueAccessor} para integração
|
|
10
|
+
* com Reactive Forms e Template-driven Forms do Angular.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```html
|
|
14
|
+
* <!-- Slider simples -->
|
|
15
|
+
* <s-slider formControlName="volume" [min]="0" [max]="100" [step]="5" />
|
|
16
|
+
*
|
|
17
|
+
* <!-- Slider de intervalo -->
|
|
18
|
+
* <s-slider formControlName="faixa" [multiple]="true" [min]="0" [max]="1000" />
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @category Inputs
|
|
22
|
+
*/
|
|
6
23
|
export class SliderComponent {
|
|
7
24
|
MAX_RANGE_VALUE = 100;
|
|
8
25
|
MIN_RANGE_VALUE = 0;
|
|
9
26
|
track;
|
|
27
|
+
/**
|
|
28
|
+
* @description Habilita o modo de intervalo, permitindo selecionar um valor mínimo e máximo.
|
|
29
|
+
* Quando `true`, o valor do componente é um array `[inicio, fim]`.
|
|
30
|
+
*
|
|
31
|
+
* @default false
|
|
32
|
+
*/
|
|
10
33
|
multiple = false;
|
|
34
|
+
/**
|
|
35
|
+
* @description Valor atual do slider. No modo simples é um número; no modo de
|
|
36
|
+
* intervalo (`multiple: true`) é um array `[inicio, fim]`.
|
|
37
|
+
*
|
|
38
|
+
* @default 0
|
|
39
|
+
*/
|
|
11
40
|
value = 0;
|
|
41
|
+
/**
|
|
42
|
+
* @description Emitido sempre que o valor do slider é alterado pelo usuário.
|
|
43
|
+
* Emite o novo valor (número ou array de dois números no modo de intervalo).
|
|
44
|
+
*/
|
|
12
45
|
valueChange = new EventEmitter();
|
|
46
|
+
/**
|
|
47
|
+
* @description Incremento aplicado a cada movimento do thumb do slider.
|
|
48
|
+
*
|
|
49
|
+
* @default 1
|
|
50
|
+
*/
|
|
13
51
|
step = 1;
|
|
52
|
+
/**
|
|
53
|
+
* @description Oculta visualmente o thumb (botão arrastável) do slider.
|
|
54
|
+
* Útil para visualizações onde apenas a faixa de progresso deve ser exibida.
|
|
55
|
+
*
|
|
56
|
+
* @default false
|
|
57
|
+
*/
|
|
14
58
|
hiddenThumb = false;
|
|
59
|
+
/**
|
|
60
|
+
* @description Desabilita a interação do usuário com o slider.
|
|
61
|
+
*
|
|
62
|
+
* @default false
|
|
63
|
+
*/
|
|
15
64
|
disabled = false;
|
|
65
|
+
/**
|
|
66
|
+
* @description Valor mínimo permitido no slider.
|
|
67
|
+
*
|
|
68
|
+
* @default 0
|
|
69
|
+
*/
|
|
16
70
|
min = this.MIN_RANGE_VALUE;
|
|
71
|
+
/**
|
|
72
|
+
* @description Valor máximo permitido no slider.
|
|
73
|
+
*
|
|
74
|
+
* @default 100
|
|
75
|
+
*/
|
|
17
76
|
max = this.MAX_RANGE_VALUE;
|
|
77
|
+
/**
|
|
78
|
+
* @description Label exibido abaixo ou ao lado do valor mínimo do slider.
|
|
79
|
+
* Útil para indicar semanticamente os extremos do intervalo.
|
|
80
|
+
*/
|
|
18
81
|
minValueLabel;
|
|
82
|
+
/**
|
|
83
|
+
* @description Label exibido abaixo ou ao lado do valor máximo do slider.
|
|
84
|
+
* Útil para indicar semanticamente os extremos do intervalo.
|
|
85
|
+
*/
|
|
19
86
|
maxValueLabel;
|
|
87
|
+
/**
|
|
88
|
+
* @description Índice de tabulação do elemento, controlando a ordem de foco via teclado.
|
|
89
|
+
*
|
|
90
|
+
* @default 0
|
|
91
|
+
*/
|
|
20
92
|
tabindex = 0;
|
|
21
93
|
startValue = 0;
|
|
22
94
|
endValue = 0;
|
|
@@ -109,7 +181,9 @@ export class SliderComponent {
|
|
|
109
181
|
const _trackClickValid = this.needParseValues ? trackClickToUserRange : trackClickPercentage;
|
|
110
182
|
const _setEndValue = () => {
|
|
111
183
|
const _endValueUserValue = this.getValueFromMapByValue(this.endValue);
|
|
112
|
-
const _endValue = (this.needParseValues
|
|
184
|
+
const _endValue = (this.needParseValues
|
|
185
|
+
? this.mapRangeValuesForSlider.get(trackClickToUserRange)
|
|
186
|
+
: trackClickPercentage) ?? 0;
|
|
113
187
|
if (this.needParseValues && _endValueUserValue !== trackClickToUserRange) {
|
|
114
188
|
this.endValue = _endValue;
|
|
115
189
|
}
|
|
@@ -120,7 +194,9 @@ export class SliderComponent {
|
|
|
120
194
|
const _setStartValue = () => {
|
|
121
195
|
const _startValueUserValue = this.getValueFromMapByValue(this.startValue);
|
|
122
196
|
if (this.needParseValues && _startValueUserValue !== trackClickToUserRange) {
|
|
123
|
-
const _startValue = (this.needParseValues
|
|
197
|
+
const _startValue = (this.needParseValues
|
|
198
|
+
? this.mapRangeValuesForSlider.get(trackClickToUserRange)
|
|
199
|
+
: trackClickPercentage) ?? 0;
|
|
124
200
|
this.startValue = _startValue;
|
|
125
201
|
}
|
|
126
202
|
else if (!this.needParseValues) {
|
|
@@ -259,10 +335,12 @@ export class SliderComponent {
|
|
|
259
335
|
const positionInUserRange = this.getValueFromMapByValue(newPosition);
|
|
260
336
|
if (this.multiple) {
|
|
261
337
|
if (this.draggingThumb === 'start') {
|
|
262
|
-
this.startValue =
|
|
338
|
+
this.startValue =
|
|
339
|
+
(this.needParseValues ? this.mapRangeValuesForSlider.get(positionInUserRange) : newPosition) ?? 0;
|
|
263
340
|
}
|
|
264
341
|
else if (this.draggingThumb === 'end') {
|
|
265
|
-
this.endValue =
|
|
342
|
+
this.endValue =
|
|
343
|
+
(this.needParseValues ? this.mapRangeValuesForSlider.get(positionInUserRange) : newPosition) ?? 0;
|
|
266
344
|
}
|
|
267
345
|
this.setValue([this.startValue, this.endValue]);
|
|
268
346
|
const [start, end] = this.value;
|
|
@@ -278,11 +356,14 @@ export class SliderComponent {
|
|
|
278
356
|
const _value = this.needParseValues ? positionInUserRange : newPosition;
|
|
279
357
|
const isAtSameValue = this.needParseValues ? positionInUserRange === this.value : false;
|
|
280
358
|
const hasStep = this.step !== 0;
|
|
281
|
-
const newValueIsValidByStep = hasStep
|
|
359
|
+
const newValueIsValidByStep = hasStep
|
|
360
|
+
? currentValue + this.step === _value || currentValue - this.step === _value
|
|
361
|
+
: false;
|
|
282
362
|
if (isAtSameValue && !newValueIsValidByStep) {
|
|
283
363
|
return;
|
|
284
364
|
}
|
|
285
|
-
this.endValue =
|
|
365
|
+
this.endValue =
|
|
366
|
+
(this.needParseValues ? this.mapRangeValuesForSlider.get(positionInUserRange) : newPosition) ?? 0;
|
|
286
367
|
this.startValue = this.endValue;
|
|
287
368
|
this.setValue(this.endValue);
|
|
288
369
|
}
|
|
@@ -420,7 +501,7 @@ export class SliderComponent {
|
|
|
420
501
|
getValueFromMapByValue(sliderValue) {
|
|
421
502
|
const mapToArray = Array.from(this.mapRangeValuesForSlider).map(([value, mapped]) => ({ value, mapped }));
|
|
422
503
|
const exactValue = mapToArray.find((x) => x.mapped == sliderValue);
|
|
423
|
-
const closest = mapToArray.reduce((prev, curr) =>
|
|
504
|
+
const closest = mapToArray.reduce((prev, curr) => Math.abs(curr.mapped - sliderValue) < Math.abs(prev.mapped - sliderValue) ? curr : prev);
|
|
424
505
|
return exactValue ? exactValue.value : closest.value;
|
|
425
506
|
}
|
|
426
507
|
/**
|
|
@@ -437,7 +518,7 @@ export class SliderComponent {
|
|
|
437
518
|
return mapToArray[0].mapped;
|
|
438
519
|
}
|
|
439
520
|
const exactValue = mapToArray.find((x) => x.value == userValue);
|
|
440
|
-
const closestValue = mapToArray.reduce((prev, curr) =>
|
|
521
|
+
const closestValue = mapToArray.reduce((prev, curr) => Math.abs(curr.value - userValue) < Math.abs(prev.value - userValue) ? curr : prev);
|
|
441
522
|
const item = exactValue || closestValue;
|
|
442
523
|
const isFirstItem = mapToArray[0] === item;
|
|
443
524
|
const isLastItem = mapToArray[mapToArray.length - 1] === item;
|
|
@@ -598,4 +679,4 @@ const getMidpoint = (start, end) => {
|
|
|
598
679
|
const getDifference = (end, start) => {
|
|
599
680
|
return Math.abs(end - start);
|
|
600
681
|
};
|
|
601
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBY3pFLE1BQU0sT0FBTyxlQUFlO0lBQ1AsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQUN0QixlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBRTlCLEtBQUssQ0FBYztJQUduQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBR2pCLEtBQUssR0FBOEIsQ0FBQyxDQUFDO0lBR3JDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztJQUc1RCxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBR1QsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUdwQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBR2pCLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBRzNCLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBRzNCLGFBQWEsQ0FBVTtJQUd2QixhQUFhLENBQVU7SUFHdkIsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUViLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDZixRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLFlBQVksR0FBRyxDQUFD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QUFDLEtBQWEsRUFBRSxVQUFrQixFQUFFLFFBQWdCLEVBQVcsRUFBRTtJQUMvRSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzRixPQUFPLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsRUFBRTtJQUMvQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQUNGLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBRSxFQUFFO0lBQ2pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1zbGlkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NsaWRlci5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsaWRlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgTUFYX1JBTkdFX1ZBTFVFID0gMTAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgTUlOX1JBTkdFX1ZBTFVFID0gMDtcbiAgICBAVmlld0NoaWxkKCd0cmFjaycpXG4gICAgcHVibGljIHRyYWNrITogRWxlbWVudFJlZjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG11bHRpcGxlID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSA9IDA7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IFtudW1iZXIsIG51bWJlcl0+KCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzdGVwID0gMTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGRlblRodW1iID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWluID0gdGhpcy5NSU5fUkFOR0VfVkFMVUU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtYXggPSB0aGlzLk1BWF9SQU5HRV9WQUxVRTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1pblZhbHVlTGFiZWw/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtYXhWYWx1ZUxhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAwO1xuXG4gICAgcHVibGljIHN0YXJ0VmFsdWUgPSAwO1xuICAgIHB1YmxpYyBlbmRWYWx1ZSA9IDA7XG4gICAgcHVibGljIG1vdmluZ1Byb2dyZXNzQmFyID0gZmFsc2U7XG4gICAgcHVibGljIHByb2dyZXNzTGVmdCA9IDA7XG4gICAgcHVibGljIHByb2dyZXNzV2lkdGggPSAnJztcblxuICAgIHB1YmxpYyBvbkNoYW5nZTogKHZhbHVlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdKSA9PiB2b2lkID0gKCkgPT4ge307XG4gICAgcHVibGljIG9uVG91Y2hlZDogKHZhbHVlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICBwcml2YXRlIGRyYWdnaW5nVGh1bWI6ICdzdGFydCcgfCAnZW5kJyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcHJvZ3Jlc3NCYXJFdmVudFBvc2l0aW9uU3RhcnQgPSAtMTtcbiAgICBwcml2YXRlIHN0YXJ0VmFsdWVCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XG4gICAgcHJpdmF0ZSByYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSAtMTtcbiAgICBwcml2YXRlIHRvdGFsUmFuZ2VCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XG4gICAgLyoqXG4gICAgICogTWFwIG9mIHZhbGlkIHZhbHVlcyBmb3IgdmFsdWVzIGluIHJhbmdlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogd2l0aCBtaW4gPSAtMTAgYW5kIG1heCA9IDEwIHdpbGwgaGF2ZSB0aGlzIG1hcC5cbiAgICAgKiB7XG4gICAgICogICAgIC0xMDogeyAwIH0sXG4gICAgICogICAgIC05OiB7IDEwIH0sXG4gICAgICogICAgICAuLi5cbiAgICAgKiAgICAgMTA6IHsgMTAgfVxuICAgICAqIH1cbiAgICAgKi9cbiAgICBwcml2YXRlIG1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyOiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgYWN0aXZlTW91c2VEb3duID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmb2N1c0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFVzZXJSYW5nZU1hcFZhbHVlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhhc0NoYW5nZXNPbk1pbiA9IGNoYW5nZXNbJ21pbiddICYmICFjaGFuZ2VzWydtaW4nXS5maXJzdENoYW5nZTtcbiAgICAgICAgY29uc3QgaGFzQ2hhbmdlc09uTWF4ID0gY2hhbmdlc1snbWF4J10gJiYgIWNoYW5nZXNbJ21heCddLmZpcnN0Q2hhbmdlO1xuICAgICAgICBjb25zdCBoYXNDaGFuZ2VzID0gaGFzQ2hhbmdlc09uTWluIHx8IGhhc0NoYW5nZXNPbk1heDtcbiAgICAgICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlclJhbmdlTWFwVmFsdWVzKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VWYWx1ZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bigkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNBY3RpdmUgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQXJyb3dLZXlMZWZ0ID0gJGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCc7XG4gICAgICAgICAgICBjb25zdCBpc0Fycm93S2V5UmlnaHQgPSAkZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCc7XG4gICAgICAgICAgICBpZiAoaXNBcnJvd0tleUxlZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5TGVmdCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0Fycm93S2V5UmlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5UmlnaHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdG9vbHRpcFN0YXJ0VGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlWzBdPy50b1N0cmluZygpIDogdGhpcy52YWx1ZT8udG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRvb2x0aXBFbmRUZXh0KCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWVbMV0/LnRvU3RyaW5nKCkgOiB0aGlzLnZhbHVlPy50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKG9iajogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gb2JqO1xuICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Gb2N1c0luKCkge1xuICAgICAgICB0aGlzLmZvY3VzQWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25CbHVyKCkge1xuICAgICAgICB0aGlzLmZvY3VzQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVHJhY2tDbGljayhldnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciB8fCB0aGlzLmFjdGl2ZU1vdXNlRG93bikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyYWNrQ2xpY2tQZXJjZW50YWdlID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldnQpO1xuICAgICAgICBjb25zdCB0cmFja0NsaWNrVG9Vc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUodHJhY2tDbGlja1BlcmNlbnRhZ2UpO1xuICAgICAgICBjb25zdCBfdHJhY2tDbGlja1ZhbGlkID0gdGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0cmFja0NsaWNrVG9Vc2VyUmFuZ2UgOiB0cmFja0NsaWNrUGVyY2VudGFnZTtcbiAgICAgICAgY29uc3QgX3NldEVuZFZhbHVlID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgX2VuZFZhbHVlVXNlclZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHRoaXMuZW5kVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgX2VuZFZhbHVlID0gKHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQodHJhY2tDbGlja1RvVXNlclJhbmdlKSA6IHRyYWNrQ2xpY2tQZXJjZW50YWdlKSA/PyAwO1xuICAgICAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzICYmIF9lbmRWYWx1ZVVzZXJWYWx1ZSAhPT0gdHJhY2tDbGlja1RvVXNlclJhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IF9lbmRWYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubmVlZFBhcnNlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRyYWNrQ2xpY2tQZXJjZW50YWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IF9zZXRTdGFydFZhbHVlID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgX3N0YXJ0VmFsdWVVc2VyVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUodGhpcy5zdGFydFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZWRQYXJzZVZhbHVlcyAmJiBfc3RhcnRWYWx1ZVVzZXJWYWx1ZSAhPT0gdHJhY2tDbGlja1RvVXNlclJhbmdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgX3N0YXJ0VmFsdWUgPSAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldCh0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpIDogdHJhY2tDbGlja1BlcmNlbnRhZ2UpID8/IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gX3N0YXJ0VmFsdWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm5lZWRQYXJzZVZhbHVlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRyYWNrQ2xpY2tQZXJjZW50YWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gdGhpcy52YWx1ZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRTdGFydCA9ICh0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHN0YXJ0KSA6IHN0YXJ0KSA/PyAwO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRFbmQgPSAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChlbmQpIDogZW5kKSA/PyAwO1xuICAgICAgICAgICAgY29uc3QgX3VwZGF0ZVN0YXJ0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIF9zZXRTdGFydFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdHJhY2tDbGlja1BlcmNlbnRhZ2UsIHZhbGlkRW5kXSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBfdXBkYXRlRW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIF9zZXRFbmRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoW3ZhbGlkU3RhcnQsIHRyYWNrQ2xpY2tQZXJjZW50YWdlXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY2xpY2tQZXJjZW50YWdlQmV0d2VlblJhbmdlID0gaXNJblJhbmdlKF90cmFja0NsaWNrVmFsaWQsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgaWYgKF90cmFja0NsaWNrVmFsaWQgPCBzdGFydCkge1xuICAgICAgICAgICAgICAgIF91cGRhdGVTdGFydCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfdHJhY2tDbGlja1ZhbGlkID4gZW5kKSB7XG4gICAgICAgICAgICAgICAgX3VwZGF0ZUVuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGlja1BlcmNlbnRhZ2VCZXR3ZWVuUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaWRkbGUgPSAoc3RhcnQgKyBlbmQpIC8gMjtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFja0NsaWNrUGVyY2VudGFnZUlzRXhhY3RpZGRsZSA9IF90cmFja0NsaWNrVmFsaWQgPT09IG1pZGRsZTtcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tDbGlja1BlcmNlbnRhZ2VJc0V4YWN0aWRkbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgX3VwZGF0ZVN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0U3RhcnQgPSBfdHJhY2tDbGlja1ZhbGlkIDwgbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXRFbmQgPSBfdHJhY2tDbGlja1ZhbGlkID4gbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0U3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVTdGFydCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNldEVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3VwZGF0ZUVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0cmFja0NsaWNrUGVyY2VudGFnZSk7XG4gICAgICAgICAgICBfc2V0RW5kVmFsdWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qcm9ncmVzc01vdXNlRG93bihldnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldnQpO1xuICAgICAgICB0aGlzLnN0YXJ0VmFsdWVCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gdGhpcy5zdGFydFZhbHVlO1xuICAgICAgICB0aGlzLnJhbmdlQmV0d2VlbkVsZW1lbnRzQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IHRoaXMuZW5kVmFsdWUgLSB0aGlzLnN0YXJ0VmFsdWU7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgICAgICB0aGlzLnRvdGFsUmFuZ2VCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gZW5kIC0gc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5oYW5kbGVQcm9ncmVzc0Jhck1vdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5oYW5kbGVQcm9ncmVzc0Jhck1vdmVFbmQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vdXNlRG93bihfOiBNb3VzZUV2ZW50LCB0aHVtYjogJ3N0YXJ0JyB8ICdlbmQnKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5kcmFnZ2luZ1RodW1iID0gdGh1bWI7XG4gICAgICAgIHRoaXMuYWN0aXZlTW91c2VEb3duID0gdHJ1ZTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vblRodW1iTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTW91c2VVcCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSYW5nZVZhbHVlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgX3NldFN0YXJ0QW5kRW5kVmFsdWUgPSAoc3RhcnRWYWx1ZTogbnVtYmVyLCBlbmRWYWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSB0aGlzLmdldENsb3Nlc3RWYWx1ZUZyb21NYXBTbGlkZXIoc3RhcnRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKGVuZFZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT09IG51bGwgfHwgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgdXNlIFwibXVsdGlwbGVcIiB3aXRoIHZhbHVlIGFzIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy52YWx1ZVswXTtcbiAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLnZhbHVlWzFdO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSB0aGlzLnZhbHVlIGFzIG51bWJlcjtcbiAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLnZhbHVlIGFzIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBfc2V0U3RhcnRBbmRFbmRWYWx1ZSh0aGlzLnN0YXJ0VmFsdWUsIHRoaXMuZW5kVmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgbGV0IFtfc3RhcnRWYWx1ZSwgX2VuZFZhbHVlXSA9IHRoaXMudmFsdWUgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBnZXREaWZmZXJlbmNlKF9lbmRWYWx1ZSwgX3N0YXJ0VmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgZW5kVmFsdWVJc0dyZWF0aGVyVGhhbk1heCA9IF9lbmRWYWx1ZSA+IHRoaXMubWF4O1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRWYWx1ZUlzTGVzc1RoYW5NaW4gPSBfc3RhcnRWYWx1ZSA8IHRoaXMubWluO1xuICAgICAgICAgICAgY29uc3QgbmVlZFVwZGF0ZVZhbHVlcyA9IGVuZFZhbHVlSXNHcmVhdGhlclRoYW5NYXggfHwgc3RhcnRWYWx1ZUlzTGVzc1RoYW5NaW47XG4gICAgICAgICAgICBpZiAoZW5kVmFsdWVJc0dyZWF0aGVyVGhhbk1heCkge1xuICAgICAgICAgICAgICAgIF9lbmRWYWx1ZSA9IHRoaXMubWF4O1xuICAgICAgICAgICAgICAgIF9zdGFydFZhbHVlID0gX2VuZFZhbHVlIC0gZGlmZmVyZW5jZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRWYWx1ZUlzTGVzc1RoYW5NaW4pIHtcbiAgICAgICAgICAgICAgICBfc3RhcnRWYWx1ZSA9IHRoaXMubWluO1xuICAgICAgICAgICAgICAgIF9lbmRWYWx1ZSA9IF9zdGFydFZhbHVlICsgZGlmZmVyZW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZWVkVXBkYXRlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgX3NldFN0YXJ0QW5kRW5kVmFsdWUoX3N0YXJ0VmFsdWUsIF9lbmRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgX3ZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUdyZWF0aGVyVGhhbk1heCA9IF92YWx1ZSA+IHRoaXMubWF4O1xuICAgICAgICAgICAgY29uc3QgdmFsdWVMZXNzVGhhbk1pbiA9IF92YWx1ZSA8IHRoaXMubWluO1xuICAgICAgICAgICAgY29uc3QgbmVlZFVwZGF0ZVZhbHVlID0gdmFsdWVHcmVhdGhlclRoYW5NYXggfHwgdmFsdWVMZXNzVGhhbk1pbjtcbiAgICAgICAgICAgIGlmICh2YWx1ZUdyZWF0aGVyVGhhbk1heCkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHRoaXMubWF4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUxlc3NUaGFuTWluKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdGhpcy5taW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmVlZFVwZGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShfdmFsdWUsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblRodW1iTW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5tb3ZpbmdQcm9ncmVzc0JhciB8fCAhdGhpcy5kcmFnZ2luZ1RodW1iKSByZXR1cm47XG5cbiAgICAgICAgbGV0IG5ld1Bvc2l0aW9uID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldmVudCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ3N0YXJ0JyAmJiBuZXdQb3NpdGlvbiA+IHRoaXMuZW5kVmFsdWUpIHx8XG4gICAgICAgICAgICAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdlbmQnICYmIG5ld1Bvc2l0aW9uIDwgdGhpcy5zdGFydFZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uSW5Vc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUobmV3UG9zaXRpb24pO1xuXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gKHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQocG9zaXRpb25JblVzZXJSYW5nZSkgOiBuZXdQb3NpdGlvbikgPz8gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnZW5kJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChwb3NpdGlvbkluVXNlclJhbmdlKSA6IG5ld1Bvc2l0aW9uKSA/PyAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKFt0aGlzLnN0YXJ0VmFsdWUsIHRoaXMuZW5kVmFsdWVdKTtcblxuICAgICAgICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gdGhpcy52YWx1ZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCAmJiB0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSB0aGlzLmVuZFZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PT0gZW5kICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdGhpcy5zdGFydFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCBfdmFsdWUgPSB0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHBvc2l0aW9uSW5Vc2VyUmFuZ2UgOiBuZXdQb3NpdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGlzQXRTYW1lVmFsdWUgPSB0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHBvc2l0aW9uSW5Vc2VyUmFuZ2UgPT09IHRoaXMudmFsdWUgOiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGhhc1N0ZXAgPSB0aGlzLnN0ZXAgIT09IDA7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZUlzVmFsaWRCeVN0ZXAgPSBoYXNTdGVwID8gY3VycmVudFZhbHVlICsgdGhpcy5zdGVwID09PSBfdmFsdWUgfHwgY3VycmVudFZhbHVlIC0gdGhpcy5zdGVwID09PSBfdmFsdWUgOiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChpc0F0U2FtZVZhbHVlICYmICFuZXdWYWx1ZUlzVmFsaWRCeVN0ZXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gKHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQocG9zaXRpb25JblVzZXJSYW5nZSkgOiBuZXdQb3NpdGlvbikgPz8gMDtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuZW5kVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZHJhZ2dpbmdUaHVtYiA9IG51bGw7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25UaHVtYk1vdmUpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTW91c2VEb3duID0gZmFsc2U7XG4gICAgICAgIH0sIDE1MCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMubW92aW5nUHJvZ3Jlc3NCYXIgPSB0cnVlO1xuICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSB0aGlzLmdldFBlcmNlbnRhZ2VCeUV2ZW50KGV2ZW50KTtcbiAgICAgICAgY29uc3Qgc3RhcnRQb3NpdGlvbkJlZm9yZUV2ZW50ID0gdGhpcy5wcm9ncmVzc0JhckV2ZW50UG9zaXRpb25TdGFydDtcbiAgICAgICAgY29uc3Qgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50ID0gdGhpcy5zdGFydFZhbHVlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudDtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnJhbmdlQmV0d2VlbkVsZW1lbnRzQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudDtcbiAgICAgICAgbGV0IHsgbmV3U3RhcnQsIG5ld0VuZCB9ID0gY2FsY3VsYXRlTmV3UmFuZ2Uoc3RhcnRWYWx1ZUJlZm9yZUV2ZW50LCBzdGFydFZhbHVlQmVmb3JlRXZlbnQgKyByYW5nZSwgc3RhcnRQb3NpdGlvbkJlZm9yZUV2ZW50LCBuZXdDZW50ZXIpO1xuICAgICAgICBpZiAobmV3U3RhcnQgPCB0aGlzLk1JTl9SQU5HRV9WQUxVRSB8fCBuZXdFbmQgPiB0aGlzLk1BWF9SQU5HRV9WQUxVRSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5lZWRQYXJzZVZhbHVlcykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHN0YXJ0VmFsdWVCZWZvcmVFdmVudCk7XG4gICAgICAgICAgICBjb25zdCBzdGFydFBvc2l0aW9uQmVmb3JlRXZlbnRVc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUoc3RhcnRQb3NpdGlvbkJlZm9yZUV2ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclVzZXJSYW5nZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZShuZXdDZW50ZXIpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVSYW5nZSA9IHRoaXMudG90YWxSYW5nZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQ7XG4gICAgICAgICAgICBsZXQgeyBuZXdTdGFydCwgbmV3RW5kIH0gPSBjYWxjdWxhdGVOZXdSYW5nZShcbiAgICAgICAgICAgICAgICBzdGFydFZhbHVlQmVmb3JlRXZlbnRVc2VyUmFuZ2UsXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlICsgdmFsdWVSYW5nZSxcbiAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uQmVmb3JlRXZlbnRVc2VyUmFuZ2UsXG4gICAgICAgICAgICAgICAgY2VudGVyVXNlclJhbmdlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChuZXdTdGFydCA8IHRoaXMubWluIHx8IG5ld0VuZCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQobmV3U3RhcnQpID8/IDA7XG4gICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQobmV3RW5kKSA/PyAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gbmV3U3RhcnQ7XG4gICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gbmV3RW5kO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoW3RoaXMuc3RhcnRWYWx1ZSwgdGhpcy5lbmRWYWx1ZV0pO1xuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlRW5kID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gLTE7XG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSAtMTtcbiAgICAgICAgdGhpcy5yYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSAtMTtcbiAgICAgICAgdGhpcy50b3RhbFJhbmdlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZVByb2dyZXNzQmFyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmhhbmRsZVByb2dyZXNzQmFyTW92ZUVuZCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciA9IGZhbHNlO1xuICAgICAgICB9LCAxNTApO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHNldFByb2dyZXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0xlZnQgPSB0aGlzLnN0YXJ0VmFsdWU7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzV2lkdGggPSBgY2FsYygke3RoaXMuZW5kVmFsdWUgLSB0aGlzLnN0YXJ0VmFsdWV9JSArIDEwcHgpYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NMZWZ0ID0gMDtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NXaWR0aCA9IGBjYWxjKCR7dGhpcy5lbmRWYWx1ZX0lICsgMTBweClgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwZXJjZW50YWdlIG9mIGEgbW91c2UgZXZlbnQgZnJvbSB0aGUgdHJhY2sncyBsZWZ0IGVkZ2VcbiAgICAgKiBAcGFyYW0gbW91c2VFdmVudCBtb3VzZSBldmVudFxuICAgICAqIEByZXR1cm5zIHBlcmNlbnRhZ2UgZnJvbSB0aGUgbGVmdCBlZGdlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQZXJjZW50YWdlQnlFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50IHwgUG9pbnRlckV2ZW50KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdHJhY2tSZWN0ID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBsZXQgbmV3TGVmdCA9IE1hdGgucm91bmQoKChtb3VzZUV2ZW50LmNsaWVudFggLSB0cmFja1JlY3QubGVmdCkgLyB0cmFja1JlY3Qud2lkdGgpICogdGhpcy5NQVhfUkFOR0VfVkFMVUUpO1xuICAgICAgICBuZXdMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV3TGVmdCwgdGhpcy5NQVhfUkFOR0VfVkFMVUUpKTtcbiAgICAgICAgcmV0dXJuIG5ld0xlZnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSwgcGFyc2UgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgJiYgcGFyc2UpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubWFwKCh4KSA9PiB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUoeCkpIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRVc2VyUmFuZ2VNYXBWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5taW47XG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMubWF4O1xuICAgICAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWF4IHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG1pbiB2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuY2xlYXIoKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBlbmQgLSBzdGFydDtcbiAgICAgICAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IDI7XG4gICAgICAgIGNvbnN0IHN0ZXBDb3VudCA9IE1hdGguZmxvb3IocmFuZ2UgLyB0aGlzLnN0ZXApO1xuICAgICAgICBjb25zdCB2YWx1ZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IHZhbHVlID0gc3RhcnQ7IHZhbHVlIDw9IGVuZDsgdmFsdWUgKz0gdGhpcy5zdGVwKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV0gIT09IGVuZCkge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goZW5kKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IG1hcHBlZCA9ICgodmFsdWUgLSBzdGFydCkgLyByYW5nZSkgKiB0aGlzLk1BWF9SQU5HRV9WQUxVRTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG1hcHBlZC50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1hcHBlZFZhbHVlc1swXSA9IDA7XG4gICAgICAgIG1hcHBlZFZhbHVlc1ttYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMV0gPSB0aGlzLk1BWF9SQU5HRV9WQUxVRTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLk1BWF9SQU5HRV9WQUxVRSAtIG1hcHBlZFZhbHVlc1ttYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IGVycm9yUGVyU3RlcCA9IGVycm9yIC8gc3RlcENvdW50O1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG1hcHBlZFZhbHVlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIG1hcHBlZFZhbHVlc1tpXSArPSBlcnJvclBlclN0ZXA7XG4gICAgICAgICAgICBtYXBwZWRWYWx1ZXNbaV0gPSBwYXJzZUZsb2F0KG1hcHBlZFZhbHVlc1tpXS50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLnNldCh2YWx1ZSwgbWFwcGVkVmFsdWVzW2luZGV4XSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlIGJ5IHVzaW5nIHRoZSBtYXAgb2YgcmFuZ2UgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogSWYgdGhlIG1hcCBpcyAwOiB7IDAgfSwgMTogeyAxMCB9LCAyOiB7IDMwIH0sIDM6IHsgNDAgfSwgNDogeyA1MCB9XG4gICAgICogYW5kIHRoZSBzbGlkZXJWYWx1ZSBpcyAzNywgdGhlIGZ1bmN0aW9uIHJldHVybnMgM1xuICAgICAqIG9yIHRoZSBzbGlkZXIgdmFsdWUgaXMgNDAsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDRcbiAgICAgKiBAcGFyYW0gc2xpZGVyVmFsdWUgdGhlIHZhbHVlIG9mIHRoZSBzbGlkZXIgKHZhbHVlcyBvbmx5IGJldHdlZW4gcmFuZ2UgTUlOIGFuZCBNQVgpXG4gICAgICogQHJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHNsaWRlclZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbWFwVG9BcnJheSA9IEFycmF5LmZyb20odGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlcikubWFwKChbdmFsdWUsIG1hcHBlZF0pID0+ICh7IHZhbHVlLCBtYXBwZWQgfSkpO1xuICAgICAgICBjb25zdCBleGFjdFZhbHVlID0gbWFwVG9BcnJheS5maW5kKCh4KSA9PiB4Lm1hcHBlZCA9PSBzbGlkZXJWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGNsb3Nlc3QgPSBtYXBUb0FycmF5LnJlZHVjZSgocHJldiwgY3VycikgPT4gKE1hdGguYWJzKGN1cnIubWFwcGVkIC0gc2xpZGVyVmFsdWUpIDwgTWF0aC5hYnMocHJldi5tYXBwZWQgLSBzbGlkZXJWYWx1ZSkgPyBjdXJyIDogcHJldikpO1xuICAgICAgICByZXR1cm4gZXhhY3RWYWx1ZSA/IGV4YWN0VmFsdWUudmFsdWUgOiBjbG9zZXN0LnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUga2V5IGZyb20gdGhlIG1hcCB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIGdpdmVuIHNsaWRlciB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gdXNlclZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbmQgdGhlIGNsb3Nlc3Qga2V5IGZvci4gKHZhbHVlcyBvbmx5IGJldHdlZW4gMCAtIDEwMClcbiAgICAgKiBAcmV0dXJucyBUaGUga2V5IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGNsb3Nlc3QgbWFwcGVkIHZhbHVlLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcih1c2VyVmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1hcFRvQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIpLm1hcCgoW3ZhbHVlLCBtYXBwZWRdKSA9PiAoeyB2YWx1ZSwgbWFwcGVkIH0pKTtcbiAgICAgICAgaWYgKHVzZXJWYWx1ZSA+PSB0aGlzLm1heCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXlbbWFwVG9BcnJheS5sZW5ndGggLSAxXS5tYXBwZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAodXNlclZhbHVlIDw9IHRoaXMubWluKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFwVG9BcnJheVswXS5tYXBwZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhhY3RWYWx1ZSA9IG1hcFRvQXJyYXkuZmluZCgoeCkgPT4geC52YWx1ZSA9PSB1c2VyVmFsdWUpO1xuICAgICAgICBjb25zdCBjbG9zZXN0VmFsdWUgPSBtYXBUb0FycmF5LnJlZHVjZSgocHJldiwgY3VycikgPT4gKE1hdGguYWJzKGN1cnIudmFsdWUgLSB1c2VyVmFsdWUpIDwgTWF0aC5hYnMocHJldi52YWx1ZSAtIHVzZXJWYWx1ZSkgPyBjdXJyIDogcHJldikpO1xuICAgICAgICBjb25zdCBpdGVtID0gZXhhY3RWYWx1ZSB8fCBjbG9zZXN0VmFsdWU7XG4gICAgICAgIGNvbnN0IGlzRmlyc3RJdGVtID0gbWFwVG9BcnJheVswXSA9PT0gaXRlbTtcbiAgICAgICAgY29uc3QgaXNMYXN0SXRlbSA9IG1hcFRvQXJyYXlbbWFwVG9BcnJheS5sZW5ndGggLSAxXSA9PT0gaXRlbTtcbiAgICAgICAgaWYgKGlzRmlyc3RJdGVtICYmIHVzZXJWYWx1ZSA+IHRoaXMubWluKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0TWlkcG9pbnQoaXRlbS5tYXBwZWQsIG1hcFRvQXJyYXlbMV0ubWFwcGVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0xhc3RJdGVtICYmIHVzZXJWYWx1ZSA8IHRoaXMubWF4KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0TWlkcG9pbnQoaXRlbS5tYXBwZWQsIG1hcFRvQXJyYXlbbWFwVG9BcnJheS5sZW5ndGggLSAyXS5tYXBwZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubWFwcGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVBcnJvd0tleUxlZnQoKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudFN0YXJ0QW5kRW5kVmFsdWUoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faW5jcmVtZW50T3JEZWNyZW1lbnRFbmRWYWx1ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRQcm9ncmVzcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQXJyb3dLZXlSaWdodCgpIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50U3RhcnRBbmRFbmRWYWx1ZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50RW5kVmFsdWUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRQcm9ncmVzcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luY3JlbWVudE9yRGVjcmVtZW50U3RhcnRBbmRFbmRWYWx1ZShpbmNyZW1lbnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IFtzdGFydCwgZW5kXSA9IHRoaXMudmFsdWUgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IGdldERpZmZlcmVuY2UoZW5kLCBzdGFydCk7XG4gICAgICAgIGlmIChpbmNyZW1lbnQpIHtcbiAgICAgICAgICAgIHN0YXJ0ICs9IHRoaXMuc3RlcDtcbiAgICAgICAgICAgIGVuZCArPSB0aGlzLnN0ZXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFydCAtPSB0aGlzLnN0ZXA7XG4gICAgICAgICAgICBlbmQgLT0gdGhpcy5zdGVwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0TGVzc1RoYW5NaW4gPSBzdGFydCA8IHRoaXMubWluO1xuICAgICAgICBjb25zdCBlbmRHcmVhdGVyVGhhbk1heCA9IGVuZCA+IHRoaXMubWF4O1xuICAgICAgICBpZiAoc3RhcnRMZXNzVGhhbk1pbiB8fCBlbmRHcmVhdGVyVGhhbk1heCkge1xuICAgICAgICAgICAgaWYgKHN0YXJ0TGVzc1RoYW5NaW4pIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMubWluO1xuICAgICAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgZGlmZmVyZW5jZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kR3JlYXRlclRoYW5NYXgpIHtcbiAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLm1heDtcbiAgICAgICAgICAgICAgICBzdGFydCA9IGVuZCAtIGRpZmZlcmVuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0IDwgdGhpcy5taW4gfHwgZW5kID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZhbHVlKFtzdGFydCwgZW5kXSwgZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKHN0YXJ0KTtcbiAgICAgICAgICAgIGVuZCA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihlbmQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHN0YXJ0O1xuICAgICAgICB0aGlzLmVuZFZhbHVlID0gZW5kO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luY3JlbWVudE9yRGVjcmVtZW50RW5kVmFsdWUoaW5jcmVtZW50OiBib29sZWFuKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWUgYXMgbnVtYmVyO1xuICAgICAgICBpZiAoaW5jcmVtZW50KSB7XG4gICAgICAgICAgICB2YWx1ZSArPSB0aGlzLnN0ZXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSAtPSB0aGlzLnN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IF9uZXdFbmRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcbiAgICAgICAgICAgIF9uZXdFbmRWYWx1ZSA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihfbmV3RW5kVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfbmV3RW5kVmFsdWUgPCB0aGlzLk1JTl9SQU5HRV9WQUxVRSB8fCBfbmV3RW5kVmFsdWUgPiB0aGlzLk1BWF9SQU5HRV9WQUxVRSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5kVmFsdWUgPSBfbmV3RW5kVmFsdWU7XG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoX25ld0VuZFZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBuZWVkUGFyc2VWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1heCAhPT0gdGhpcy5NQVhfUkFOR0VfVkFMVUUgfHwgdGhpcy5taW4gIT09IHRoaXMuTUlOX1JBTkdFX1ZBTFVFO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIGEgbmV3IHJhbmdlIGJhc2VkIG9uIHRoZSBvbGQgcmFuZ2UgYW5kIHRoZSBwb3NpdGlvbnMgY2xpY2tlZCBhbmQgZmluYWxpemVkLlxuICpcbiAqIEBwYXJhbSBvbGRTdGFydCAtIFRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgb2xkIHJhbmdlLlxuICogQHBhcmFtIG9sZEVuZCAtIFRoZSBlbmRpbmcgdmFsdWUgb2YgdGhlIG9sZCByYW5nZS5cbiAqIEBwYXJhbSBjbGlja2VkUG9zaXRpb24gLSBUaGUgcG9zaXRpb24gd2hlcmUgdGhlIGNsaWNrIG9jY3VycmVkLlxuICogQHBhcmFtIGZpbmFsUG9zaXRpb24gLSBUaGUgcG9zaXRpb24gd2hlcmUgdGhlIHJhbmdlIHNob3VsZCBlbmQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgbmV3IHN0YXJ0IGFuZCBlbmQgdmFsdWVzIG9mIHRoZSByYW5nZS5cbiAqL1xuY29uc3QgY2FsY3VsYXRlTmV3UmFuZ2UgPSAob2xkU3RhcnQ6IG51bWJlciwgb2xkRW5kOiBudW1iZXIsIGNsaWNrZWRQb3NpdGlvbjogbnVtYmVyLCBmaW5hbFBvc2l0aW9uOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCByYW5nZSA9IG9sZEVuZCAtIG9sZFN0YXJ0O1xuICAgIGNvbnN0IG5ld1N0YXJ0ID0gZmluYWxQb3NpdGlvbiAtIChjbGlja2VkUG9zaXRpb24gLSBvbGRTdGFydCk7XG4gICAgY29uc3QgbmV3RW5kID0gbmV3U3RhcnQgKyByYW5nZTtcbiAgICByZXR1cm4geyBuZXdTdGFydCwgbmV3RW5kIH07XG59O1xuXG5jb25zdCBpc0luUmFuZ2UgPSAodmFsdWU6IG51bWJlciwgcmFuZ2VTdGFydDogbnVtYmVyLCByYW5nZUVuZDogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgW21pbiwgbWF4XSA9IHJhbmdlU3RhcnQgPCByYW5nZUVuZCA/IFtyYW5nZVN0YXJ0LCByYW5nZUVuZF0gOiBbcmFuZ2VFbmQsIHJhbmdlU3RhcnRdO1xuICAgIHJldHVybiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4O1xufTtcblxuY29uc3QgZ2V0TWlkcG9pbnQgPSAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBtaWRwb2ludCA9IChzdGFydCArIGVuZCkgLyAyO1xuICAgIHJldHVybiBwYXJzZUZsb2F0KG1pZHBvaW50LnRvRml4ZWQoMikpO1xufTtcbmNvbnN0IGdldERpZmZlcmVuY2UgPSAoZW5kOiBudW1iZXIsIHN0YXJ0OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gTWF0aC5hYnMoZW5kIC0gc3RhcnQpO1xufTtcbiIsIjxkaXZcbiAgICBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3NsaWRlci1jb250YWluZXItLWRpc2FibGVkJzogZGlzYWJsZWQgfVwiXG4gICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAoY2xpY2spPVwib25UcmFja0NsaWNrKCRldmVudClcIlxuICAgIChmb2N1cyk9XCJvbkZvY3VzSW4oKVwiXG4gICAgKGJsdXIpPVwib25CbHVyKClcIj5cbiAgICA8ZGl2XG4gICAgICAgICN0cmFja1xuICAgICAgICBjbGFzcz1cInNsaWRlci10cmFja1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdzbGlkZXItdHJhY2stLWhpZGRlbi10aHVtYic6IGhpZGRlblRodW1iLFxuICAgICAgICAgICAgJ3NsaWRlci10cmFjay0tbW92aW5nLW11bHRpcGxlLXRodW1icyc6IG1vdmluZ1Byb2dyZXNzQmFyXG4gICAgICAgIH1cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItcHJvZ3Jlc3NcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblByb2dyZXNzTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJwcm9ncmVzc0xlZnRcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cInByb2dyZXNzV2lkdGhcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItdGh1bWJcIlxuICAgICAgICAgICAgW3NUb29sdGlwXT1cInRvb2x0aXBTdGFydFRleHRcIlxuICAgICAgICAgICAgW3Nob3dEZWxheV09XCIwXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCAnc3RhcnQnKVwiXG4gICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cInN0YXJ0VmFsdWVcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtzVG9vbHRpcF09XCJ0b29sdGlwRW5kVGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cInNsaWRlci10aHVtYlwiXG4gICAgICAgICAgICBbc2hvd0RlbGF5XT1cIjBcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQsICdlbmQnKVwiXG4gICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImVuZFZhbHVlXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvb3RlclwiPlxuICAgICAgICA8c3Bhbj57eyBtaW5WYWx1ZUxhYmVsIHx8IG1pbiB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4+e3sgbWF4VmFsdWVMYWJlbCB8fCBtYXggfX08L3NwYW4+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
682
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBRXpFOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBYUgsTUFBTSxPQUFPLGVBQWU7SUFDUCxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBQ3RCLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFFOUIsS0FBSyxDQUFjO0lBRTFCOzs7OztPQUtHO0lBRUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV4Qjs7Ozs7T0FLRztJQUVJLEtBQUssR0FBOEIsQ0FBQyxDQUFDO0lBRTVDOzs7T0FHRztJQUVJLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztJQUVuRTs7OztPQUlHO0lBRUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUVoQjs7Ozs7T0FLRztJQUVJLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFM0I7Ozs7T0FJRztJQUVJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFeEI7Ozs7T0FJRztJQUVJLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBRWxDOzs7O09BSUc7SUFFSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUVsQzs7O09BR0c7SUFFSSxhQUFh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UUFBUSxHQUFHLGFBQWEsR0FBRyxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUM5RCxNQUFNLE1BQU0sR0FBRyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDaEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFhLEVBQUUsVUFBa0IsRUFBRSxRQUFnQixFQUFXLEVBQUU7SUFDL0UsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDM0YsT0FBTyxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFhLEVBQUUsR0FBVyxFQUFFLEVBQUU7SUFDL0MsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUM7QUFDRixNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUNqRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIGNvbnRyb2xlIGRlc2xpemFudGUgKHNsaWRlcikgcGFyYSBzZWxlw6fDo28gZGUgdmFsb3JlcyBudW3DqXJpY29zXG4gKiBkZW50cm8gZGUgdW0gaW50ZXJ2YWxvIGRlZmluaWRvLiBTdXBvcnRhIG1vZG8gc2ltcGxlcyAodW0gdmFsb3IpIGUgbW9kbyBkZSBpbnRlcnZhbG9cbiAqIChkb2lzIHZhbG9yZXM6IGluw61jaW8gZSBmaW0pLiBJbXBsZW1lbnRhIHtAbGluayBDb250cm9sVmFsdWVBY2Nlc3Nvcn0gcGFyYSBpbnRlZ3Jhw6fDo29cbiAqIGNvbSBSZWFjdGl2ZSBGb3JtcyBlIFRlbXBsYXRlLWRyaXZlbiBGb3JtcyBkbyBBbmd1bGFyLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8IS0tIFNsaWRlciBzaW1wbGVzIC0tPlxuICogPHMtc2xpZGVyIGZvcm1Db250cm9sTmFtZT1cInZvbHVtZVwiIFttaW5dPVwiMFwiIFttYXhdPVwiMTAwXCIgW3N0ZXBdPVwiNVwiIC8+XG4gKlxuICogPCEtLSBTbGlkZXIgZGUgaW50ZXJ2YWxvIC0tPlxuICogPHMtc2xpZGVyIGZvcm1Db250cm9sTmFtZT1cImZhaXhhXCIgW211bHRpcGxlXT1cInRydWVcIiBbbWluXT1cIjBcIiBbbWF4XT1cIjEwMDBcIiAvPlxuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IElucHV0c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Mtc2xpZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2xpZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zbGlkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTbGlkZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9SQU5HRV9WQUxVRSA9IDEwMDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1JTl9SQU5HRV9WQUxVRSA9IDA7XG4gICAgQFZpZXdDaGlsZCgndHJhY2snKVxuICAgIHB1YmxpYyB0cmFjayE6IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgbyBtb2RvIGRlIGludGVydmFsbywgcGVybWl0aW5kbyBzZWxlY2lvbmFyIHVtIHZhbG9yIG3DrW5pbW8gZSBtw6F4aW1vLlxuICAgICAqIFF1YW5kbyBgdHJ1ZWAsIG8gdmFsb3IgZG8gY29tcG9uZW50ZSDDqSB1bSBhcnJheSBgW2luaWNpbywgZmltXWAuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG11bHRpcGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsb3IgYXR1YWwgZG8gc2xpZGVyLiBObyBtb2RvIHNpbXBsZXMgw6kgdW0gbsO6bWVybzsgbm8gbW9kbyBkZVxuICAgICAqIGludGVydmFsbyAoYG11bHRpcGxlOiB0cnVlYCkgw6kgdW0gYXJyYXkgYFtpbmljaW8sIGZpbV1gLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZhbHVlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHNlbXByZSBxdWUgbyB2YWxvciBkbyBzbGlkZXIgw6kgYWx0ZXJhZG8gcGVsbyB1c3XDoXJpby5cbiAgICAgKiBFbWl0ZSBvIG5vdm8gdmFsb3IgKG7Dum1lcm8gb3UgYXJyYXkgZGUgZG9pcyBuw7ptZXJvcyBubyBtb2RvIGRlIGludGVydmFsbykuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEluY3JlbWVudG8gYXBsaWNhZG8gYSBjYWRhIG1vdmltZW50byBkbyB0aHVtYiBkbyBzbGlkZXIuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3RlcCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gT2N1bHRhIHZpc3VhbG1lbnRlIG8gdGh1bWIgKGJvdMOjbyBhcnJhc3TDoXZlbCkgZG8gc2xpZGVyLlxuICAgICAqIMOadGlsIHBhcmEgdmlzdWFsaXphw6fDtWVzIG9uZGUgYXBlbmFzIGEgZmFpeGEgZGUgcHJvZ3Jlc3NvIGRldmUgc2VyIGV4aWJpZGEuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGRlblRodW1iID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRGVzYWJpbGl0YSBhIGludGVyYcOnw6NvIGRvIHVzdcOhcmlvIGNvbSBvIHNsaWRlci5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBWYWxvciBtw61uaW1vIHBlcm1pdGlkbyBubyBzbGlkZXIuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWluID0gdGhpcy5NSU5fUkFOR0VfVkFMVUU7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsb3IgbcOheGltbyBwZXJtaXRpZG8gbm8gc2xpZGVyLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMTAwXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWF4ID0gdGhpcy5NQVhfUkFOR0VfVkFMVUU7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTGFiZWwgZXhpYmlkbyBhYmFpeG8gb3UgYW8gbGFkbyBkbyB2YWxvciBtw61uaW1vIGRvIHNsaWRlci5cbiAgICAgKiDDmnRpbCBwYXJhIGluZGljYXIgc2VtYW50aWNhbWVudGUgb3MgZXh0cmVtb3MgZG8gaW50ZXJ2YWxvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1pblZhbHVlTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTGFiZWwgZXhpYmlkbyBhYmFpeG8gb3UgYW8gbGFkbyBkbyB2YWxvciBtw6F4aW1vIGRvIHNsaWRlci5cbiAgICAgKiDDmnRpbCBwYXJhIGluZGljYXIgc2VtYW50aWNhbWVudGUgb3MgZXh0cmVtb3MgZG8gaW50ZXJ2YWxvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1heFZhbHVlTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gw41uZGljZSBkZSB0YWJ1bGHDp8OjbyBkbyBlbGVtZW50bywgY29udHJvbGFuZG8gYSBvcmRlbSBkZSBmb2NvIHZpYSB0ZWNsYWRvLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRhYmluZGV4ID0gMDtcblxuICAgIHB1YmxpYyBzdGFydFZhbHVlID0gMDtcbiAgICBwdWJsaWMgZW5kVmFsdWUgPSAwO1xuICAgIHB1YmxpYyBtb3ZpbmdQcm9ncmVzc0JhciA9IGZhbHNlO1xuICAgIHB1YmxpYyBwcm9ncmVzc0xlZnQgPSAwO1xuICAgIHB1YmxpYyBwcm9ncmVzc1dpZHRoID0gJyc7XG5cbiAgICBwdWJsaWMgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIHB1YmxpYyBvblRvdWNoZWQ6ICh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBkcmFnZ2luZ1RodW1iOiAnc3RhcnQnIHwgJ2VuZCcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gLTE7XG4gICAgcHJpdmF0ZSBzdGFydFZhbHVlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xuICAgIHByaXZhdGUgcmFuZ2VCZXR3ZWVuRWxlbWVudHNCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XG4gICAgcHJpdmF0ZSB0b3RhbFJhbmdlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xuICAgIC8qKlxuICAgICAqIE1hcCBvZiB2YWxpZCB2YWx1ZXMgZm9yIHZhbHVlcyBpbiByYW5nZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHdpdGggbWluID0gLTEwIGFuZCBtYXggPSAxMCB3aWxsIGhhdmUgdGhpcyBtYXAuXG4gICAgICoge1xuICAgICAqICAgICAtMTA6IHsgMCB9LFxuICAgICAqICAgICAtOTogeyAxMCB9LFxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgIDEwOiB7IDEwIH1cbiAgICAgKiB9XG4gICAgICovXG4gICAgcHJpdmF0ZSBtYXBSYW5nZVZhbHVlc0ZvclNsaWRlcjogTWFwPG51bWJlciwgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIGFjdGl2ZU1vdXNlRG93biA9IGZhbHNlO1xuICAgIHByaXZhdGUgZm9jdXNBY3RpdmUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRVc2VyUmFuZ2VNYXBWYWx1ZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBoYXNDaGFuZ2VzT25NaW4gPSBjaGFuZ2VzWydtaW4nXSAmJiAhY2hhbmdlc1snbWluJ10uZmlyc3RDaGFuZ2U7XG4gICAgICAgIGNvbnN0IGhhc0NoYW5nZXNPbk1heCA9IGNoYW5nZXNbJ21heCddICYmICFjaGFuZ2VzWydtYXgnXS5maXJzdENoYW5nZTtcbiAgICAgICAgY29uc3QgaGFzQ2hhbmdlcyA9IGhhc0NoYW5nZXNPbk1pbiB8fCBoYXNDaGFuZ2VzT25NYXg7XG4gICAgICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXJSYW5nZU1hcFZhbHVlcygpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZVZhbHVlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzQWN0aXZlICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpc0Fycm93S2V5TGVmdCA9ICRldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnO1xuICAgICAgICAgICAgY29uc3QgaXNBcnJvd0tleVJpZ2h0ID0gJGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnO1xuICAgICAgICAgICAgaWYgKGlzQXJyb3dLZXlMZWZ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBcnJvd0tleUxlZnQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJvd0tleVJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBcnJvd0tleVJpZ2h0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRvb2x0aXBTdGFydFRleHQoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZVswXT8udG9TdHJpbmcoKSA6IHRoaXMudmFsdWU/LnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0b29sdGlwRW5kVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlWzFdPy50b1N0cmluZygpIDogdGhpcy52YWx1ZT8udG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IG51bWJlciB8IFtudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG9iajtcbiAgICAgICAgdGhpcy5zZXRSYW5nZVZhbHVlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IG51bWJlciB8IFtudW1iZXIsIG51bWJlcl0pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRm9jdXNJbigpIHtcbiAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQmx1cigpIHtcbiAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRyYWNrQ2xpY2soZXZ0OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubW92aW5nUHJvZ3Jlc3NCYXIgfHwgdGhpcy5hY3RpdmVNb3VzZURvd24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmFja0NsaWNrUGVyY2VudGFnZSA9IHRoaXMuZ2V0UGVyY2VudGFnZUJ5RXZlbnQoZXZ0KTtcbiAgICAgICAgY29uc3QgdHJhY2tDbGlja1RvVXNlclJhbmdlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHRyYWNrQ2xpY2tQZXJjZW50YWdlKTtcbiAgICAgICAgY29uc3QgX3RyYWNrQ2xpY2tWYWxpZCA9IHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdHJhY2tDbGlja1RvVXNlclJhbmdlIDogdHJhY2tDbGlja1BlcmNlbnRhZ2U7XG4gICAgICAgIGNvbnN0IF9zZXRFbmRWYWx1ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IF9lbmRWYWx1ZVVzZXJWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZSh0aGlzLmVuZFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IF9lbmRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgKHRoaXMubmVlZFBhcnNlVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQodHJhY2tDbGlja1RvVXNlclJhbmdlKVxuICAgICAgICAgICAgICAgICAgICA6IHRyYWNrQ2xpY2tQZXJjZW50YWdlKSA/PyAwO1xuICAgICAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzICYmIF9lbmRWYWx1ZVVzZXJWYWx1ZSAhPT0gdHJhY2tDbGlja1RvVXNlclJhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IF9lbmRWYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubmVlZFBhcnNlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRyYWNrQ2xpY2tQZXJjZW50YWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IF9zZXRTdGFydFZhbHVlID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgX3N0YXJ0VmFsdWVVc2VyVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUodGhpcy5zdGFydFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZWRQYXJzZVZhbHVlcyAmJiBfc3RhcnRWYWx1ZVVzZXJWYWx1ZSAhPT0gdHJhY2tDbGlja1RvVXNlclJhbmdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgX3N0YXJ0VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAodGhpcy5uZWVkUGFyc2VWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQodHJhY2tDbGlja1RvVXNlclJhbmdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0cmFja0NsaWNrUGVyY2VudGFnZSkgPz8gMDtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSBfc3RhcnRWYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubmVlZFBhcnNlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdHJhY2tDbGlja1BlcmNlbnRhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgICAgICBjb25zdCB2YWxpZFN0YXJ0ID0gKHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQoc3RhcnQpIDogc3RhcnQpID8/IDA7XG4gICAgICAgICAgICBjb25zdCB2YWxpZEVuZCA9ICh0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KGVuZCkgOiBlbmQpID8/IDA7XG4gICAgICAgICAgICBjb25zdCBfdXBkYXRlU3RhcnQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgX3NldFN0YXJ0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKFt0cmFja0NsaWNrUGVyY2VudGFnZSwgdmFsaWRFbmRdKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IF91cGRhdGVFbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgX3NldEVuZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdmFsaWRTdGFydCwgdHJhY2tDbGlja1BlcmNlbnRhZ2VdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjbGlja1BlcmNlbnRhZ2VCZXR3ZWVuUmFuZ2UgPSBpc0luUmFuZ2UoX3RyYWNrQ2xpY2tWYWxpZCwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICBpZiAoX3RyYWNrQ2xpY2tWYWxpZCA8IHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgX3VwZGF0ZVN0YXJ0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF90cmFja0NsaWNrVmFsaWQgPiBlbmQpIHtcbiAgICAgICAgICAgICAgICBfdXBkYXRlRW5kKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsaWNrUGVyY2VudGFnZUJldHdlZW5SYW5nZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZSA9IChzdGFydCArIGVuZCkgLyAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrQ2xpY2tQZXJjZW50YWdlSXNFeGFjdGlkZGxlID0gX3RyYWNrQ2xpY2tWYWxpZCA9PT0gbWlkZGxlO1xuICAgICAgICAgICAgICAgIGlmICh0cmFja0NsaWNrUGVyY2VudGFnZUlzRXhhY3RpZGRsZSkge1xuICAgICAgICAgICAgICAgICAgICBfdXBkYXRlU3RhcnQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXRTdGFydCA9IF90cmFja0NsaWNrVmFsaWQgPCBtaWRkbGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldEVuZCA9IF90cmFja0NsaWNrVmFsaWQgPiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXRTdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3VwZGF0ZVN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2V0RW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdXBkYXRlRW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRyYWNrQ2xpY2tQZXJjZW50YWdlKTtcbiAgICAgICAgICAgIF9zZXRFbmRWYWx1ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRQcm9ncmVzcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblByb2dyZXNzTW91c2VEb3duKGV2dDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXJFdmVudFBvc2l0aW9uU3RhcnQgPSB0aGlzLmdldFBlcmNlbnRhZ2VCeUV2ZW50KGV2dCk7XG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSB0aGlzLnN0YXJ0VmFsdWU7XG4gICAgICAgIHRoaXMucmFuZ2VCZXR3ZWVuRWxlbWVudHNCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gdGhpcy5lbmRWYWx1ZSAtIHRoaXMuc3RhcnRWYWx1ZTtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMudmFsdWUgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgICAgICAgICAgIHRoaXMudG90YWxSYW5nZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSBlbmQgLSBzdGFydDtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZVByb2dyZXNzQmFyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmhhbmRsZVByb2dyZXNzQmFyTW92ZUVuZCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTW91c2VEb3duKF86IE1vdXNlRXZlbnQsIHRodW1iOiAnc3RhcnQnIHwgJ2VuZCcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgICAgICB0aGlzLmRyYWdnaW5nVGh1bWIgPSB0aHVtYjtcbiAgICAgICAgdGhpcy5hY3RpdmVNb3VzZURvd24gPSB0cnVlO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uVGh1bWJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Nb3VzZVVwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJhbmdlVmFsdWVzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBfc2V0U3RhcnRBbmRFbmRWYWx1ZSA9IChzdGFydFZhbHVlOiBudW1iZXIsIGVuZFZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihzdGFydFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLmdldENsb3Nlc3RWYWx1ZUZyb21NYXBTbGlkZXIoZW5kVmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PT0gbnVsbCB8fCB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiAhdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCB1c2UgXCJtdWx0aXBsZVwiIHdpdGggdmFsdWUgYXMgYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSB0aGlzLnZhbHVlWzBdO1xuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMudmFsdWVbMV07XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMudmFsdWUgYXMgbnVtYmVyO1xuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMudmFsdWUgYXMgbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIF9zZXRTdGFydEFuZEVuZFZhbHVlKHRoaXMuc3RhcnRWYWx1ZSwgdGhpcy5lbmRWYWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBsZXQgW19zdGFydFZhbHVlLCBfZW5kVmFsdWVdID0gdGhpcy52YWx1ZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IGdldERpZmZlcmVuY2UoX2VuZFZhbHVlLCBfc3RhcnRWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBlbmRWYWx1ZUlzR3JlYXRoZXJUaGFuTWF4ID0gX2VuZFZhbHVlID4gdGhpcy5tYXg7XG4gICAgICAgICAgICBjb25zdCBzdGFydFZhbHVlSXNMZXNzVGhhbk1pbiA9IF9zdGFydFZhbHVlIDwgdGhpcy5taW47XG4gICAgICAgICAgICBjb25zdCBuZWVkVXBkYXRlVmFsdWVzID0gZW5kVmFsdWVJc0dyZWF0aGVyVGhhbk1heCB8fCBzdGFydFZhbHVlSXNMZXNzVGhhbk1pbjtcbiAgICAgICAgICAgIGlmIChlbmRWYWx1ZUlzR3JlYXRoZXJUaGFuTWF4KSB7XG4gICAgICAgICAgICAgICAgX2VuZFZhbHVlID0gdGhpcy5tYXg7XG4gICAgICAgICAgICAgICAgX3N0YXJ0VmFsdWUgPSBfZW5kVmFsdWUgLSBkaWZmZXJlbmNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydFZhbHVlSXNMZXNzVGhhbk1pbikge1xuICAgICAgICAgICAgICAgIF9zdGFydFZhbHVlID0gdGhpcy5taW47XG4gICAgICAgICAgICAgICAgX2VuZFZhbHVlID0gX3N0YXJ0VmFsdWUgKyBkaWZmZXJlbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5lZWRVcGRhdGVWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBfc2V0U3RhcnRBbmRFbmRWYWx1ZShfc3RhcnRWYWx1ZSwgX2VuZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKFt0aGlzLnN0YXJ0VmFsdWUsIHRoaXMuZW5kVmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBfdmFsdWUgPSB0aGlzLnZhbHVlIGFzIG51bWJlcjtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlR3JlYXRoZXJUaGFuTWF4ID0gX3ZhbHVlID4gdGhpcy5tYXg7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUxlc3NUaGFuTWluID0gX3ZhbHVlIDwgdGhpcy5taW47XG4gICAgICAgICAgICBjb25zdCBuZWVkVXBkYXRlVmFsdWUgPSB2YWx1ZUdyZWF0aGVyVGhhbk1heCB8fCB2YWx1ZUxlc3NUaGFuTWluO1xuICAgICAgICAgICAgaWYgKHZhbHVlR3JlYXRoZXJUaGFuTWF4KSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdGhpcy5tYXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlTGVzc1RoYW5NaW4pIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB0aGlzLm1pbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZWVkVXBkYXRlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKF92YWx1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uVGh1bWJNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1vdmluZ1Byb2dyZXNzQmFyIHx8ICF0aGlzLmRyYWdnaW5nVGh1bWIpIHJldHVybjtcblxuICAgICAgICBsZXQgbmV3UG9zaXRpb24gPSB0aGlzLmdldFBlcmNlbnRhZ2VCeUV2ZW50KGV2ZW50KTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5kcmFnZ2luZ1RodW1iID09PSAnc3RhcnQnICYmIG5ld1Bvc2l0aW9uID4gdGhpcy5lbmRWYWx1ZSkgfHxcbiAgICAgICAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ2VuZCcgJiYgbmV3UG9zaXRpb24gPCB0aGlzLnN0YXJ0VmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb25JblVzZXJSYW5nZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZShuZXdQb3NpdGlvbik7XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChwb3NpdGlvbkluVXNlclJhbmdlKSA6IG5ld1Bvc2l0aW9uKSA/PyAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHBvc2l0aW9uSW5Vc2VyUmFuZ2UpIDogbmV3UG9zaXRpb24pID8/IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoW3RoaXMuc3RhcnRWYWx1ZSwgdGhpcy5lbmRWYWx1ZV0pO1xuXG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XG5cbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09PSBlbmQgJiYgdGhpcy5kcmFnZ2luZ1RodW1iID09PSAnZW5kJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLnN0YXJ0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnZhbHVlIGFzIG51bWJlcjtcbiAgICAgICAgICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMubmVlZFBhcnNlVmFsdWVzID8gcG9zaXRpb25JblVzZXJSYW5nZSA6IG5ld1Bvc2l0aW9uO1xuICAgICAgICAgICAgY29uc3QgaXNBdFNhbWVWYWx1ZSA9IHRoaXMubmVlZFBhcnNlVmFsdWVzID8gcG9zaXRpb25JblVzZXJSYW5nZSA9PT0gdGhpcy52YWx1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgaGFzU3RlcCA9IHRoaXMuc3RlcCAhPT0gMDtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlSXNWYWxpZEJ5U3RlcCA9IGhhc1N0ZXBcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRWYWx1ZSArIHRoaXMuc3RlcCA9PT0gX3ZhbHVlIHx8IGN1cnJlbnRWYWx1ZSAtIHRoaXMuc3RlcCA9PT0gX3ZhbHVlXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChpc0F0U2FtZVZhbHVlICYmICFuZXdWYWx1ZUlzVmFsaWRCeVN0ZXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVuZFZhbHVlID1cbiAgICAgICAgICAgICAgICAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChwb3NpdGlvbkluVXNlclJhbmdlKSA6IG5ld1Bvc2l0aW9uKSA/PyAwO1xuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy5lbmRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5lbmRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRQcm9ncmVzcygpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kcmFnZ2luZ1RodW1iID0gbnVsbDtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vblRodW1iTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTW91c2VVcCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb3VzZURvd24gPSBmYWxzZTtcbiAgICAgICAgfSwgMTUwKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBoYW5kbGVQcm9ncmVzc0Jhck1vdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciA9IHRydWU7XG4gICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IHRoaXMuZ2V0UGVyY2VudGFnZUJ5RXZlbnQoZXZlbnQpO1xuICAgICAgICBjb25zdCBzdGFydFBvc2l0aW9uQmVmb3JlRXZlbnQgPSB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0O1xuICAgICAgICBjb25zdCBzdGFydFZhbHVlQmVmb3JlRXZlbnQgPSB0aGlzLnN0YXJ0VmFsdWVCZWZvcmVQcm9ncmVzc0JhckV2ZW50O1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMucmFuZ2VCZXR3ZWVuRWxlbWVudHNCZWZvcmVQcm9ncmVzc0JhckV2ZW50O1xuICAgICAgICBsZXQgeyBuZXdTdGFydCwgbmV3RW5kIH0gPSBjYWxjdWxhdGVOZXdSYW5nZShcbiAgICAgICAgICAgIHN0YXJ0VmFsdWVCZWZvcmVFdmVudCxcbiAgICAgICAgICAgIHN0YXJ0VmFsdWVCZWZvcmVFdmVudCArIHJhbmdlLFxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbkJlZm9yZUV2ZW50LFxuICAgICAgICAgICAgbmV3Q2VudGVyLFxuICAgICAgICApO1xuICAgICAgICBpZiAobmV3U3RhcnQgPCB0aGlzLk1JTl9SQU5HRV9WQUxVRSB8fCBuZXdFbmQgPiB0aGlzLk1BWF9SQU5HRV9WQUxVRSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5lZWRQYXJzZVZhbHVlcykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHN0YXJ0VmFsdWVCZWZvcmVFdmVudCk7XG4gICAgICAgICAgICBjb25zdCBzdGFydFBvc2l0aW9uQmVmb3JlRXZlbnRVc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUoc3RhcnRQb3NpdGlvbkJlZm9yZUV2ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclVzZXJSYW5nZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZShuZXdDZW50ZXIpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVSYW5nZSA9IHRoaXMudG90YWxSYW5nZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQ7XG4gICAgICAgICAgICBsZXQgeyBuZXdTdGFydCwgbmV3RW5kIH0gPSBjYWxjdWxhdGVOZXdSYW5nZShcbiAgICAgICAgICAgICAgICBzdGFydFZhbHVlQmVmb3JlRXZlbnRVc2VyUmFuZ2UsXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlICsgdmFsdWVSYW5nZSxcbiAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uQmVmb3JlRXZlbnRVc2VyUmFuZ2UsXG4gICAgICAgICAgICAgICAgY2VudGVyVXNlclJhbmdlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChuZXdTdGFydCA8IHRoaXMubWluIHx8IG5ld0VuZCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQobmV3U3RhcnQpID8/IDA7XG4gICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQobmV3RW5kKSA/PyAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gbmV3U3RhcnQ7XG4gICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gbmV3RW5kO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoW3RoaXMuc3RhcnRWYWx1ZSwgdGhpcy5lbmRWYWx1ZV0pO1xuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlRW5kID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gLTE7XG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSAtMTtcbiAgICAgICAgdGhpcy5yYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSAtMTtcbiAgICAgICAgdGhpcy50b3RhbFJhbmdlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZVByb2dyZXNzQmFyTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmhhbmRsZVByb2dyZXNzQmFyTW92ZUVuZCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciA9IGZhbHNlO1xuICAgICAgICB9LCAxNTApO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHNldFByb2dyZXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0xlZnQgPSB0aGlzLnN0YXJ0VmFsdWU7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzV2lkdGggPSBgY2FsYygke3RoaXMuZW5kVmFsdWUgLSB0aGlzLnN0YXJ0VmFsdWV9JSArIDEwcHgpYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NMZWZ0ID0gMDtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NXaWR0aCA9IGBjYWxjKCR7dGhpcy5lbmRWYWx1ZX0lICsgMTBweClgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwZXJjZW50YWdlIG9mIGEgbW91c2UgZXZlbnQgZnJvbSB0aGUgdHJhY2sncyBsZWZ0IGVkZ2VcbiAgICAgKiBAcGFyYW0gbW91c2VFdmVudCBtb3VzZSBldmVudFxuICAgICAqIEByZXR1cm5zIHBlcmNlbnRhZ2UgZnJvbSB0aGUgbGVmdCBlZGdlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQZXJjZW50YWdlQnlFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50IHwgUG9pbnRlckV2ZW50KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdHJhY2tSZWN0ID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBsZXQgbmV3TGVmdCA9IE1hdGgucm91bmQoKChtb3VzZUV2ZW50LmNsaWVudFggLSB0cmFja1JlY3QubGVmdCkgLyB0cmFja1JlY3Qud2lkdGgpICogdGhpcy5NQVhfUkFOR0VfVkFMVUUpO1xuICAgICAgICBuZXdMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV3TGVmdCwgdGhpcy5NQVhfUkFOR0VfVkFMVUUpKTtcbiAgICAgICAgcmV0dXJuIG5ld0xlZnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSwgcGFyc2UgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgJiYgcGFyc2UpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubWFwKCh4KSA9PiB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUoeCkpIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRVc2VyUmFuZ2VNYXBWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5taW47XG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMubWF4O1xuICAgICAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWF4IHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG1pbiB2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuY2xlYXIoKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBlbmQgLSBzdGFydDtcbiAgICAgICAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IDI7XG4gICAgICAgIGNvbnN0IHN0ZXBDb3VudCA9IE1hdGguZmxvb3IocmFuZ2UgLyB0aGlzLnN0ZXApO1xuICAgICAgICBjb25zdCB2YWx1ZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IHZhbHVlID0gc3RhcnQ7IHZhbHVlIDw9IGVuZDsgdmFsdWUgKz0gdGhpcy5zdGVwKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV0gIT09IGVuZCkge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goZW5kKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IG1hcHBlZCA9ICgodmFsdWUgLSBzdGFydCkgLyByYW5nZSkgKiB0aGlzLk1BWF9SQU5HRV9WQUxVRTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG1hcHBlZC50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1hcHBlZFZhbHVlc1swXSA9IDA7XG4gICAgICAgIG1hcHBlZFZhbHVlc1ttYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMV0gPSB0aGlzLk1BWF9SQU5HRV9WQUxVRTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLk1BWF9SQU5HRV9WQUxVRSAtIG1hcHBlZFZhbHVlc1ttYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IGVycm9yUGVyU3RlcCA9IGVycm9yIC8gc3RlcENvdW50O1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG1hcHBlZFZhbHVlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIG1hcHBlZFZhbHVlc1tpXSArPSBlcnJvclBlclN0ZXA7XG4gICAgICAgICAgICBtYXBwZWRWYWx1ZXNbaV0gPSBwYXJzZUZsb2F0KG1hcHBlZFZhbHVlc1tpXS50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLnNldCh2YWx1ZSwgbWFwcGVkVmFsdWVzW2luZGV4XSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlIGJ5IHVzaW5nIHRoZSBtYXAgb2YgcmFuZ2UgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogSWYgdGhlIG1hcCBpcyAwOiB7IDAgfSwgMTogeyAxMCB9LCAyOiB7IDMwIH0sIDM6IHsgNDAgfSwgNDogeyA1MCB9XG4gICAgICogYW5kIHRoZSBzbGlkZXJWYWx1ZSBpcyAzNywgdGhlIGZ1bmN0aW9uIHJldHVybnMgM1xuICAgICAqIG9yIHRoZSBzbGlkZXIgdmFsdWUgaXMgNDAsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDRcbiAgICAgKiBAcGFyYW0gc2xpZGVyVmFsdWUgdGhlIHZhbHVlIG9mIHRoZSBzbGlkZXIgKHZhbHVlcyBvbmx5IGJldHdlZW4gcmFuZ2UgTUlOIGFuZCBNQVgpXG4gICAgICogQHJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHNsaWRlclZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbWFwVG9BcnJheSA9IEFycmF5LmZyb20odGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlcikubWFwKChbdmFsdWUsIG1hcHBlZF0pID0+ICh7IHZhbHVlLCBtYXBwZWQgfSkpO1xuICAgICAgICBjb25zdCBleGFjdFZhbHVlID0gbWFwVG9BcnJheS5maW5kKCh4KSA9PiB4Lm1hcHBlZCA9PSBzbGlkZXJWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGNsb3Nlc3QgPSBtYXBUb0FycmF5LnJlZHVjZSgocHJldiwgY3VycikgPT5cbiAgICAgICAgICAgIE1hdGguYWJzKGN1cnIubWFwcGVkIC0gc2xpZGVyVmFsdWUpIDwgTWF0aC5hYnMocHJldi5tYXBwZWQgLSBzbGlkZXJWYWx1ZSkgPyBjdXJyIDogcHJldixcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGV4YWN0VmFsdWUgPyBleGFjdFZhbHVlLnZhbHVlIDogY2xvc2VzdC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGtleSBmcm9tIHRoZSBtYXAgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBnaXZlbiBzbGlkZXIgdmFsdWUuXG4gICAgICogQHBhcmFtIHVzZXJWYWx1ZSAtIFRoZSB2YWx1ZSB0byBmaW5kIHRoZSBjbG9zZXN0IGtleSBmb3IuICh2YWx1ZXMgb25seSBiZXR3ZWVuIDAgLSAxMDApXG4gICAgICogQHJldHVybnMgVGhlIGtleSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjbG9zZXN0IG1hcHBlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENsb3Nlc3RWYWx1ZUZyb21NYXBTbGlkZXIodXNlclZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBtYXBUb0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyKS5tYXAoKFt2YWx1ZSwgbWFwcGVkXSkgPT4gKHsgdmFsdWUsIG1hcHBlZCB9KSk7XG4gICAgICAgIGlmICh1c2VyVmFsdWUgPj0gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBUb0FycmF5W21hcFRvQXJyYXkubGVuZ3RoIC0gMV0ubWFwcGVkO1xuICAgICAgICB9IGVsc2UgaWYgKHVzZXJWYWx1ZSA8PSB0aGlzLm1pbikge1xuICAgICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXlbMF0ubWFwcGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4YWN0VmFsdWUgPSBtYXBUb0FycmF5LmZpbmQoKHgpID0+IHgudmFsdWUgPT0gdXNlclZhbHVlKTtcbiAgICAgICAgY29uc3QgY2xvc2VzdFZhbHVlID0gbWFwVG9BcnJheS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+XG4gICAgICAgICAgICBNYXRoLmFicyhjdXJyLnZhbHVlIC0gdXNlclZhbHVlKSA8IE1hdGguYWJzKHByZXYudmFsdWUgLSB1c2VyVmFsdWUpID8gY3VyciA6IHByZXYsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBleGFjdFZhbHVlIHx8IGNsb3Nlc3RWYWx1ZTtcbiAgICAgICAgY29uc3QgaXNGaXJzdEl0ZW0gPSBtYXBUb0FycmF5WzBdID09PSBpdGVtO1xuICAgICAgICBjb25zdCBpc0xhc3RJdGVtID0gbWFwVG9BcnJheVttYXBUb0FycmF5Lmxlbmd0aCAtIDFdID09PSBpdGVtO1xuICAgICAgICBpZiAoaXNGaXJzdEl0ZW0gJiYgdXNlclZhbHVlID4gdGhpcy5taW4pIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRNaWRwb2ludChpdGVtLm1hcHBlZCwgbWFwVG9BcnJheVsxXS5tYXBwZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTGFzdEl0ZW0gJiYgdXNlclZhbHVlIDwgdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRNaWRwb2ludChpdGVtLm1hcHBlZCwgbWFwVG9BcnJheVttYXBUb0FycmF5Lmxlbmd0aCAtIDJdLm1hcHBlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5tYXBwZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5TGVmdCgpIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50U3RhcnRBbmRFbmRWYWx1ZShmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudEVuZFZhbHVlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVBcnJvd0tleVJpZ2h0KCkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5faW5jcmVtZW50T3JEZWNyZW1lbnRTdGFydEFuZEVuZFZhbHVlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faW5jcmVtZW50T3JEZWNyZW1lbnRFbmRWYWx1ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5jcmVtZW50T3JEZWNyZW1lbnRTdGFydEFuZEVuZFZhbHVlKGluY3JlbWVudDogYm9vbGVhbikge1xuICAgICAgICBsZXQgW3N0YXJ0LCBlbmRdID0gdGhpcy52YWx1ZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gZ2V0RGlmZmVyZW5jZShlbmQsIHN0YXJ0KTtcbiAgICAgICAgaWYgKGluY3JlbWVudCkge1xuICAgICAgICAgICAgc3RhcnQgKz0gdGhpcy5zdGVwO1xuICAgICAgICAgICAgZW5kICs9IHRoaXMuc3RlcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0IC09IHRoaXMuc3RlcDtcbiAgICAgICAgICAgIGVuZCAtPSB0aGlzLnN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRMZXNzVGhhbk1pbiA9IHN0YXJ0IDwgdGhpcy5taW47XG4gICAgICAgIGNvbnN0IGVuZEdyZWF0ZXJUaGFuTWF4ID0gZW5kID4gdGhpcy5tYXg7XG4gICAgICAgIGlmIChzdGFydExlc3NUaGFuTWluIHx8IGVuZEdyZWF0ZXJUaGFuTWF4KSB7XG4gICAgICAgICAgICBpZiAoc3RhcnRMZXNzVGhhbk1pbikge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5taW47XG4gICAgICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBkaWZmZXJlbmNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRHcmVhdGVyVGhhbk1heCkge1xuICAgICAgICAgICAgICAgIGVuZCA9IHRoaXMubWF4O1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kIC0gZGlmZmVyZW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnQgPCB0aGlzLm1pbiB8fCBlbmQgPiB0aGlzLm1heCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoW3N0YXJ0LCBlbmRdLCBmYWxzZSk7XG4gICAgICAgIGlmICh0aGlzLm5lZWRQYXJzZVZhbHVlcykge1xuICAgICAgICAgICAgc3RhcnQgPSB0aGlzLmdldENsb3Nlc3RWYWx1ZUZyb21NYXBTbGlkZXIoc3RhcnQpO1xuICAgICAgICAgICAgZW5kID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gc3RhcnQ7XG4gICAgICAgIHRoaXMuZW5kVmFsdWUgPSBlbmQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5jcmVtZW50T3JEZWNyZW1lbnRFbmRWYWx1ZShpbmNyZW1lbnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XG4gICAgICAgIGlmIChpbmNyZW1lbnQpIHtcbiAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuc3RlcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlIC09IHRoaXMuc3RlcDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgX25ld0VuZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLm5lZWRQYXJzZVZhbHVlcykge1xuICAgICAgICAgICAgX25ld0VuZFZhbHVlID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKF9uZXdFbmRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9uZXdFbmRWYWx1ZSA8IHRoaXMuTUlOX1JBTkdFX1ZBTFVFIHx8IF9uZXdFbmRWYWx1ZSA+IHRoaXMuTUFYX1JBTkdFX1ZBTFVFKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IF9uZXdFbmRWYWx1ZTtcbiAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy5lbmRWYWx1ZTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShfbmV3RW5kVmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IG5lZWRQYXJzZVZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF4ICE9PSB0aGlzLk1BWF9SQU5HRV9WQUxVRSB8fCB0aGlzLm1pbiAhPT0gdGhpcy5NSU5fUkFOR0VfVkFMVUU7XG4gICAgfVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgYSBuZXcgcmFuZ2UgYmFzZWQgb24gdGhlIG9sZCByYW5nZSBhbmQgdGhlIHBvc2l0aW9ucyBjbGlja2VkIGFuZCBmaW5hbGl6ZWQuXG4gKlxuICogQHBhcmFtIG9sZFN0YXJ0IC0gVGhlIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBvbGQgcmFuZ2UuXG4gKiBAcGFyYW0gb2xkRW5kIC0gVGhlIGVuZGluZyB2YWx1ZSBvZiB0aGUgb2xkIHJhbmdlLlxuICogQHBhcmFtIGNsaWNrZWRQb3NpdGlvbiAtIFRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgY2xpY2sgb2NjdXJyZWQuXG4gKiBAcGFyYW0gZmluYWxQb3NpdGlvbiAtIFRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgcmFuZ2Ugc2hvdWxkIGVuZC5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBuZXcgc3RhcnQgYW5kIGVuZCB2YWx1ZXMgb2YgdGhlIHJhbmdlLlxuICovXG5jb25zdCBjYWxjdWxhdGVOZXdSYW5nZSA9IChvbGRTdGFydDogbnVtYmVyLCBvbGRFbmQ6IG51bWJlciwgY2xpY2tlZFBvc2l0aW9uOiBudW1iZXIsIGZpbmFsUG9zaXRpb246IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHJhbmdlID0gb2xkRW5kIC0gb2xkU3RhcnQ7XG4gICAgY29uc3QgbmV3U3RhcnQgPSBmaW5hbFBvc2l0aW9uIC0gKGNsaWNrZWRQb3NpdGlvbiAtIG9sZFN0YXJ0KTtcbiAgICBjb25zdCBuZXdFbmQgPSBuZXdTdGFydCArIHJhbmdlO1xuICAgIHJldHVybiB7IG5ld1N0YXJ0LCBuZXdFbmQgfTtcbn07XG5cbmNvbnN0IGlzSW5SYW5nZSA9ICh2YWx1ZTogbnVtYmVyLCByYW5nZVN0YXJ0OiBudW1iZXIsIHJhbmdlRW5kOiBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBbbWluLCBtYXhdID0gcmFuZ2VTdGFydCA8IHJhbmdlRW5kID8gW3JhbmdlU3RhcnQsIHJhbmdlRW5kXSA6IFtyYW5nZUVuZCwgcmFuZ2VTdGFydF07XG4gICAgcmV0dXJuIHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXg7XG59O1xuXG5jb25zdCBnZXRNaWRwb2ludCA9IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IG1pZHBvaW50ID0gKHN0YXJ0ICsgZW5kKSAvIDI7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobWlkcG9pbnQudG9GaXhlZCgyKSk7XG59O1xuY29uc3QgZ2V0RGlmZmVyZW5jZSA9IChlbmQ6IG51bWJlciwgc3RhcnQ6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBNYXRoLmFicyhlbmQgLSBzdGFydCk7XG59O1xuXG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7ICdzbGlkZXItY29udGFpbmVyLS1kaXNhYmxlZCc6IGRpc2FibGVkIH1cIlxuICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgKGNsaWNrKT1cIm9uVHJhY2tDbGljaygkZXZlbnQpXCJcbiAgICAoZm9jdXMpPVwib25Gb2N1c0luKClcIlxuICAgIChibHVyKT1cIm9uQmx1cigpXCI+XG4gICAgPGRpdlxuICAgICAgICAjdHJhY2tcbiAgICAgICAgY2xhc3M9XCJzbGlkZXItdHJhY2tcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnc2xpZGVyLXRyYWNrLS1oaWRkZW4tdGh1bWInOiBoaWRkZW5UaHVtYixcbiAgICAgICAgICAgICdzbGlkZXItdHJhY2stLW1vdmluZy1tdWx0aXBsZS10aHVtYnMnOiBtb3ZpbmdQcm9ncmVzc0JhclxuICAgICAgICB9XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2xpZGVyLXByb2dyZXNzXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Qcm9ncmVzc01vdXNlRG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIFtzdHlsZS5sZWZ0LiVdPVwicHJvZ3Jlc3NMZWZ0XCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJwcm9ncmVzc1dpZHRoXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2xpZGVyLXRodW1iXCJcbiAgICAgICAgICAgIFtzVG9vbHRpcF09XCJ0b29sdGlwU3RhcnRUZXh0XCJcbiAgICAgICAgICAgIFtzaG93RGVsYXldPVwiMFwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudCwgJ3N0YXJ0JylcIlxuICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJzdGFydFZhbHVlXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbc1Rvb2x0aXBdPVwidG9vbHRpcEVuZFRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItdGh1bWJcIlxuICAgICAgICAgICAgW3Nob3dEZWxheV09XCIwXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCAnZW5kJylcIlxuICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJlbmRWYWx1ZVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cbiAgICAgICAgPHNwYW4+e3sgbWluVmFsdWVMYWJlbCB8fCBtaW4gfX08L3NwYW4+XG4gICAgICAgIDxzcGFuPnt7IG1heFZhbHVlTGFiZWwgfHwgbWF4IH19PC9zcGFuPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|