@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
|
@@ -2,17 +2,70 @@ import { Directive, HostListener, Input, } from '@angular/core';
|
|
|
2
2
|
import { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';
|
|
3
3
|
import { PasswordStrengthComponent } from './password-strength.component';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* @description Diretiva que adiciona o comportamento de verificação de força de senha
|
|
7
|
+
* a um campo de input existente. Ao receber foco ou a cada tecla digitada, exibe o
|
|
8
|
+
* componente {@link PasswordStrengthComponent} posicionado dinamicamente ao redor do campo,
|
|
9
|
+
* fornecendo feedback visual sobre a força da senha informada.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```html
|
|
13
|
+
* <input
|
|
14
|
+
* type="password"
|
|
15
|
+
* [sPasswordStrength]="true"
|
|
16
|
+
* passwordStrengthDescription="A senha deve conter letras maiúsculas, números e caracteres especiais."
|
|
17
|
+
* [passwordStrengthValidation]="myValidator" />
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @category Inputs
|
|
21
|
+
*/
|
|
5
22
|
export class PasswordStrengthDirective {
|
|
6
23
|
elementRef;
|
|
7
24
|
appRef;
|
|
8
25
|
componentFactoryResolver;
|
|
9
26
|
injector;
|
|
27
|
+
/**
|
|
28
|
+
* @description Habilita ou desabilita o comportamento da diretiva.
|
|
29
|
+
* Quando `false`, o indicador de força não será exibido.
|
|
30
|
+
*
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
10
33
|
enabled = true;
|
|
34
|
+
/**
|
|
35
|
+
* @description Função customizada de validação da força da senha.
|
|
36
|
+
* Recebe o conteúdo atual do campo e deve retornar um valor do tipo {@link PasswordStrengths}
|
|
37
|
+
* (`'veryWeak'`, `'weak'`, `'medium'` ou `'strong'`).
|
|
38
|
+
* Se não informada, utiliza a validação padrão baseada em critérios de comprimento,
|
|
39
|
+
* letras maiúsculas/minúsculas, números e caracteres especiais.
|
|
40
|
+
*/
|
|
11
41
|
passwordStrengthValidation;
|
|
42
|
+
/**
|
|
43
|
+
* @description Posição preferencial onde o indicador de força será exibido em relação ao campo.
|
|
44
|
+
* Aceita `'right'`, `'left'` ou `'top'`. O componente tenta posicionar automaticamente
|
|
45
|
+
* em outro lado caso não haja espaço suficiente na posição especificada.
|
|
46
|
+
*
|
|
47
|
+
* @default 'right'
|
|
48
|
+
*/
|
|
12
49
|
passwordStrengthPosition = 'right';
|
|
50
|
+
/**
|
|
51
|
+
* @description Texto personalizado exibido quando a senha é classificada como fraca.
|
|
52
|
+
* Se não informado, utiliza a tradução padrão.
|
|
53
|
+
*/
|
|
13
54
|
passwordStrengthWeakTitle;
|
|
55
|
+
/**
|
|
56
|
+
* @description Texto personalizado exibido quando a senha é classificada como média.
|
|
57
|
+
* Se não informado, utiliza a tradução padrão.
|
|
58
|
+
*/
|
|
14
59
|
passwordStrengthMediumTitle;
|
|
60
|
+
/**
|
|
61
|
+
* @description Texto personalizado exibido quando a senha é classificada como forte.
|
|
62
|
+
* Se não informado, utiliza a tradução padrão.
|
|
63
|
+
*/
|
|
15
64
|
passwordStrengthStrongTitle;
|
|
65
|
+
/**
|
|
66
|
+
* @description Descrição complementar exibida no indicador de força de senha,
|
|
67
|
+
* orientando o usuário sobre os requisitos da senha. Campo obrigatório.
|
|
68
|
+
*/
|
|
16
69
|
passwordStrengthDescription;
|
|
17
70
|
componentRef;
|
|
18
71
|
constructor(elementRef, appRef,
|
|
@@ -207,4 +260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
207
260
|
type: HostListener,
|
|
208
261
|
args: ['blur']
|
|
209
262
|
}] } });
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtc3RyZW5ndGguZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3NyYy9saWIvcGFzc3dvcmQtc3RyZW5ndGgvcGFzc3dvcmQtc3RyZW5ndGguZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLSCxTQUFTLEVBR1QsWUFBWSxFQUVaLEtBQUssR0FFUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFPMUUsTUFBTSxPQUFPLHlCQUF5QjtJQXlCYjtJQUNBO0lBRUE7SUFDQTtJQTNCZCxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBR2YsMEJBQTBCLENBQTBDO0lBR3BFLHdCQUF3QixHQUE4QixPQUFPLENBQUM7SUFHOUQseUJBQXlCLENBQVU7SUFHbkMsMkJBQTJCLENBQVU7SUFHckMsMkJBQTJCLENBQVU7SUFHckMsMkJBQTJCLENBQVU7SUFFcEMsWUFBWSxDQUFrRDtJQUV0RSxZQUNxQixVQUFzQixFQUN0QixNQUFzQjtJQUN2QyxzREFBc0Q7SUFDckMsd0JBQWtELEVBQ2xELFFBQWtCO1FBSmxCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFFdEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQ3BDLENBQUM7SUFFRyxRQUFRO1FBQ1gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUlNLE9BQU87UUFDVixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRSxD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QUM7UUFDYixDQUFDO1FBRUQsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDckMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sRUFBRSxDQUFDO1lBQ2IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLEdBQUcsYUFBYSxFQUFFLENBQUM7WUFDekIsT0FBTyxVQUFVLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBQzNCLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRyxlQUFlLEVBQUUsQ0FBQztZQUMzQixPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzt3R0FwTlEseUJBQXlCOzRGQUF6Qix5QkFBeUI7OzRGQUF6Qix5QkFBeUI7a0JBSHJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtpQkFDbEM7MEtBR1UsT0FBTztzQkFEYixLQUFLO3VCQUFDLG1CQUFtQjtnQkFJbkIsMEJBQTBCO3NCQURoQyxLQUFLO2dCQUlDLHdCQUF3QjtzQkFEOUIsS0FBSztnQkFJQyx5QkFBeUI7c0JBRC9CLEtBQUs7Z0JBSUMsMkJBQTJCO3NCQURqQyxLQUFLO2dCQUlDLDJCQUEyQjtzQkFEakMsS0FBSztnQkFJQywyQkFBMkI7c0JBRGpDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQW1CbEIsT0FBTztzQkFGYixZQUFZO3VCQUFDLE9BQU87O3NCQUNwQixZQUFZO3VCQUFDLE9BQU87Z0JBbUJkLE1BQU07c0JBRFosWUFBWTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICAvLyBOT1NPTkFSIC0gJ0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcicgaXMgZGVwcmVjYXRlZC5cbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5cbmltcG9ydCB7IFBhc3N3b3JkU3RyZW5ndGhDb21wb25lbnQgfSBmcm9tICcuL3Bhc3N3b3JkLXN0cmVuZ3RoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZFN0cmVuZ3RoUG9zaXRpb25zIH0gZnJvbSAnLi90eXBlcy9wYXNzd29yZC1wb3NpdGlvbnMnO1xuaW1wb3J0IHsgUGFzc3dvcmRTdHJlbmd0aHMgfSBmcm9tICcuL3R5cGVzL3Bhc3N3b3JkLXN0cmVuZ3Rocyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3NQYXNzd29yZFN0cmVuZ3RoXScsXG59KVxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkU3RyZW5ndGhEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgnc1Bhc3N3b3JkU3RyZW5ndGgnKVxuICAgIHB1YmxpYyBlbmFibGVkID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhWYWxpZGF0aW9uPzogKGNvbnRlbnQ6IHN0cmluZykgPT4gUGFzc3dvcmRTdHJlbmd0aHM7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwYXNzd29yZFN0cmVuZ3RoUG9zaXRpb246IFBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbnMgPSAncmlnaHQnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aFdlYWtUaXRsZT86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhNZWRpdW1UaXRsZT86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhTdHJvbmdUaXRsZT86IHN0cmluZztcblxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhEZXNjcmlwdGlvbiE6IHN0cmluZztcblxuICAgIHByaXZhdGUgY29tcG9uZW50UmVmPzogbnVsbCB8IENvbXBvbmVudFJlZjxQYXNzd29yZFN0cmVuZ3RoQ29tcG9uZW50PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgLy8gTk9TT05BUiAtICdDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXInIGlzIGRlcHJlY2F0ZWQuXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVByb3BlcnRpZXMoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXl1cCcpXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIHB1YmxpYyBvbkZvY3VzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPz8gJyc7XG5cbiAgICAgICAgdGhpcy5jcmVhdGVQYXNzd29yZFN0cmVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZTtcbiAgICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFzc3dvcmRTdHJlbmd0aFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQudXBkYXRlSW5kaWNhdG9ycyh0aGlzLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGF0aW9uKGNvbnRlbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC51cGRhdGVJbmRpY2F0b3JzKCd2ZXJ5V2VhaycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gICAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95UGFzc3dvcmRTdHJlbmd0aCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUGFzc3dvcmRTdHJlbmd0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiBpc051bGxPclVuZGVmaW5lZCh0aGlzLmNvbXBvbmVudFJlZikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShQYXNzd29yZFN0cmVuZ3RoQ29tcG9uZW50KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gY29tcG9uZW50RmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3Rvcik7XG4gICAgICAgICAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgICAgIGNvbnN0IGRvbUVsZW0gPSAodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9tRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnNldFBhc3N3b3JkU3RyZW5ndGhDb21wb25lbnRQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dQYXNzd29yZFN0cmVuZ3RoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dQYXNzd29yZFN0cmVuZ3RoKCkge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTk9TT05BUiAtIFJlZmFjdG9yIHRoaXMgZnVuY3Rpb24gdG8gcmVkdWNlIGl0cyBDb2duaXRpdmUgQ29tcGxleGl0eSBmcm9tIDE2IHRvIHRoZSAxNSBhbGxvd2VkLlxuICAgIHByaXZhdGUgc2V0UGFzc3dvcmRTdHJlbmd0aENvbXBvbmVudFByb3BlcnRpZXMoKSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmNvbXBvbmVudFJlZikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnBvc2l0aW9uID0gdGhpcy5wYXNzd29yZFN0cmVuZ3RoUG9zaXRpb247XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLndlYWtUaXRsZSA9IHRoaXMucGFzc3dvcmRTdHJlbmd0aFdlYWtUaXRsZTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubWVkaXVtVGl0bGUgPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhNZWRpdW1UaXRsZTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc3Ryb25nVGl0bGUgPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTdHJvbmdUaXRsZTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuZGVzY3JpcHRpb24gPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhEZXNjcmlwdGlvbjtcblxuICAgICAgICBjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgbWFyZ2luID0gMjA7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWZIZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWZXaWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgY29uc3Qgc2FmZVNwYWNlID0gMTUwO1xuXG4gICAgICAgIGxldCBwb3NpdGlvbmVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGludmFsaWRPcHRpb25zOiBQYXNzd29yZFN0cmVuZ3RoUG9zaXRpb25zW10gPSBbXTtcblxuICAgICAgICB3aGlsZSAoIXBvc2l0aW9uZWQpIHtcbiAgICAgICAgICAgIGlmIChpbnZhbGlkT3B0aW9ucy5pbmNsdWRlcygndG9wJykgJiYgaW52YWxpZE9wdGlvbnMuaW5jbHVkZXMoJ3JpZ2h0JykgJiYgaW52YWxpZE9wdGlvbnMuaW5jbHVkZXMoJ2xlZnQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveVBhc3N3b3JkU3RyZW5ndGgoKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNwYWNlIHRvIHNob3cgcGFzc3dvcmQgc3RyZW5ndGgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3RvcCc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9wU2hpZnQgPSB0b3A7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0U2hpZnQgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIC0gcmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRTaGlmdCA9IGxlZnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgTUlOX0hPUklaT05UQUxfU0FGRV9TUEFDRSA9IDUwO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcFNoaWZ0IDw9IGVsZW1lbnRSZWZIZWlnaHQgKyBzYWZlU3BhY2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0U2hpZnQgPCBNSU5fSE9SSVpPTlRBTF9TQUZFX1NQQUNFIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2hpZnQgPCBNSU5fSE9SSVpPTlRBTF9TQUZFX1NQQUNFXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoUG9zaXRpb24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZE9wdGlvbnMucHVzaCgndG9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQodG9wIC0gbWFyZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubGVmdCA9IE1hdGgucm91bmQoZWxlbWVudFJlZldpZHRoIC8gMiArIGxlZnQpO1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0Jzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByaWdodFNoaWZ0ID0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCAtIHJpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyaWdodFNoaWZ0IDw9IGVsZW1lbnRSZWZXaWR0aCArIHNhZmVTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoUG9zaXRpb24gPSAnbGVmdCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT3B0aW9ucy5wdXNoKCdyaWdodCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS50b3AgPSBNYXRoLnJvdW5kKHRvcCArIGVsZW1lbnRSZWZIZWlnaHQgLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubGVmdCA9IE1hdGgucm91bmQocmlnaHQgKyBtYXJnaW4pO1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2xlZnQnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRTaGlmdCA9IGxlZnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRTaGlmdCA8PSBlbGVtZW50UmVmV2lkdGggKyBzYWZlU3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFBvc2l0aW9uID0gJ3RvcCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT3B0aW9ucy5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQodG9wICsgZWxlbWVudFJlZkhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZChsZWZ0IC0gbWFyZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UucG9zaXRpb24gPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVQcm9wZXJ0aWVzKCkge1xuICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGF0aW9uID0gdGhpcy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRhdGlvbiB8fCB0aGlzLmRlZmF1bHRWYWxpZGF0b3I7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95UGFzc3dvcmRTdHJlbmd0aCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aGlzLmFwcFJlZi5kZXRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVmYXVsdFZhbGlkYXRvcihjb250ZW50OiBzdHJpbmcpOiBQYXNzd29yZFN0cmVuZ3RocyB7XG4gICAgICAgIGxldCBwb2ludHMgPSAwO1xuICAgICAgICBjb25zdCBQQVNTV09SRF9NSU5fTEVOR1RIID0gNjtcbiAgICAgICAgY29uc3QgV0VFS19DUklURVJJQSA9IDE7XG4gICAgICAgIGNvbnN0IE1FRElVTV9DUklURVJJQSA9IDQ7XG4gICAgICAgIGNvbnN0IFNUUk9OR19DUklURVJJQSA9IDU7XG5cbiAgICAgICAgY29uc3QgcmVnRXhwVmFsaWRhdGlvbnMgPSBbXG4gICAgICAgICAgICAvKD89LipcXGQpLywgLy8gbnVtYmVyXG4gICAgICAgICAgICAvKD89LipbYS16XSkvLCAvLyBsb3dlcmNhc2VcbiAgICAgICAgICAgIC8oPz0uKltBLVpdKS8sIC8vIHVwcGVyY2FzZVxuICAgICAgICAgICAgLyg/PS4qWyFAIyQlJiouXFxcXD0rXn4tXSkvLCAvLyBzcGVjaWFsIGNoYXJhY3RlclxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+PSBQQVNTV09SRF9NSU5fTEVOR1RIKSB7XG4gICAgICAgICAgICBwb2ludHMrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ0V4cFZhbGlkYXRpb25zLmZvckVhY2goKHZhbGlkYXRpb24pID0+IHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uLnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICBwb2ludHMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHBvaW50cyA8IFdFRUtfQ1JJVEVSSUEpIHtcbiAgICAgICAgICAgIHJldHVybiAndmVyeVdlYWsnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb2ludHMgPCBNRURJVU1fQ1JJVEVSSUEpIHtcbiAgICAgICAgICAgIHJldHVybiAnd2Vhayc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvaW50cyA8IFNUUk9OR19DUklURVJJQSkge1xuICAgICAgICAgICAgcmV0dXJuICdtZWRpdW0nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnc3Ryb25nJztcbiAgICB9XG59XG4iXX0=
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtc3RyZW5ndGguZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3NyYy9saWIvcGFzc3dvcmQtc3RyZW5ndGgvcGFzc3dvcmQtc3RyZW5ndGguZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLSCxTQUFTLEVBR1QsWUFBWSxFQUVaLEtBQUssR0FFUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFJMUU7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFJSCxNQUFNLE9BQU8seUJBQXlCO0lBNkRiO0lBQ0E7SUFFQTtJQUNBO0lBaEVyQjs7Ozs7T0FLRztJQUVJLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFFdEI7Ozs7OztPQU1HO0lBRUksMEJBQTBCLENBQTBDO0lBRTNFOzs7Ozs7T0FNRztJQUVJLHdCQUF3QixHQUE4QixPQUFPLENBQUM7SUFFckU7OztPQUdHO0lBRUkseUJBQXlCLENBQVU7SUFFMUM7OztPQUdHO0lBRUksMkJBQTJCLENBQVU7SUFFNUM7OztPQUdHO0lBRUksMkJBQTJCLENBQVU7SUFFNUM7OztPQUdHO0lBRUksMkJBQTJCLENBQVU7SUFFcEMsWUFBWSxDQUFrRDtJQUV0RSxZQUNxQixVQUFzQixFQUN0QixNQUFzQjtJQUN2QyxzREFBc0Q7SUFDckMsd0JBQWtELEVBQ2xELFFBQWtCO1FBSmxCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFFdEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQ3BDLENBQUM7SUFFRyxRQUFR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WUFBWTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICAvLyBOT1NPTkFSIC0gJ0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcicgaXMgZGVwcmVjYXRlZC5cbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5cbmltcG9ydCB7IFBhc3N3b3JkU3RyZW5ndGhDb21wb25lbnQgfSBmcm9tICcuL3Bhc3N3b3JkLXN0cmVuZ3RoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZFN0cmVuZ3RoUG9zaXRpb25zIH0gZnJvbSAnLi90eXBlcy9wYXNzd29yZC1wb3NpdGlvbnMnO1xuaW1wb3J0IHsgUGFzc3dvcmRTdHJlbmd0aHMgfSBmcm9tICcuL3R5cGVzL3Bhc3N3b3JkLXN0cmVuZ3Rocyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERpcmV0aXZhIHF1ZSBhZGljaW9uYSBvIGNvbXBvcnRhbWVudG8gZGUgdmVyaWZpY2HDp8OjbyBkZSBmb3LDp2EgZGUgc2VuaGFcbiAqIGEgdW0gY2FtcG8gZGUgaW5wdXQgZXhpc3RlbnRlLiBBbyByZWNlYmVyIGZvY28gb3UgYSBjYWRhIHRlY2xhIGRpZ2l0YWRhLCBleGliZSBvXG4gKiBjb21wb25lbnRlIHtAbGluayBQYXNzd29yZFN0cmVuZ3RoQ29tcG9uZW50fSBwb3NpY2lvbmFkbyBkaW5hbWljYW1lbnRlIGFvIHJlZG9yIGRvIGNhbXBvLFxuICogZm9ybmVjZW5kbyBmZWVkYmFjayB2aXN1YWwgc29icmUgYSBmb3LDp2EgZGEgc2VuaGEgaW5mb3JtYWRhLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aW5wdXRcbiAqICAgdHlwZT1cInBhc3N3b3JkXCJcbiAqICAgW3NQYXNzd29yZFN0cmVuZ3RoXT1cInRydWVcIlxuICogICBwYXNzd29yZFN0cmVuZ3RoRGVzY3JpcHRpb249XCJBIHNlbmhhIGRldmUgY29udGVyIGxldHJhcyBtYWnDunNjdWxhcywgbsO6bWVyb3MgZSBjYXJhY3RlcmVzIGVzcGVjaWFpcy5cIlxuICogICBbcGFzc3dvcmRTdHJlbmd0aFZhbGlkYXRpb25dPVwibXlWYWxpZGF0b3JcIiAvPlxuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IElucHV0c1xuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tzUGFzc3dvcmRTdHJlbmd0aF0nLFxufSlcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFN0cmVuZ3RoRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgb3UgZGVzYWJpbGl0YSBvIGNvbXBvcnRhbWVudG8gZGEgZGlyZXRpdmEuXG4gICAgICogUXVhbmRvIGBmYWxzZWAsIG8gaW5kaWNhZG9yIGRlIGZvcsOnYSBuw6NvIHNlcsOhIGV4aWJpZG8uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KCdzUGFzc3dvcmRTdHJlbmd0aCcpXG4gICAgcHVibGljIGVuYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZ1bsOnw6NvIGN1c3RvbWl6YWRhIGRlIHZhbGlkYcOnw6NvIGRhIGZvcsOnYSBkYSBzZW5oYS5cbiAgICAgKiBSZWNlYmUgbyBjb250ZcO6ZG8gYXR1YWwgZG8gY2FtcG8gZSBkZXZlIHJldG9ybmFyIHVtIHZhbG9yIGRvIHRpcG8ge0BsaW5rIFBhc3N3b3JkU3RyZW5ndGhzfVxuICAgICAqIChgJ3ZlcnlXZWFrJ2AsIGAnd2VhaydgLCBgJ21lZGl1bSdgIG91IGAnc3Ryb25nJ2ApLlxuICAgICAqIFNlIG7Do28gaW5mb3JtYWRhLCB1dGlsaXphIGEgdmFsaWRhw6fDo28gcGFkcsOjbyBiYXNlYWRhIGVtIGNyaXTDqXJpb3MgZGUgY29tcHJpbWVudG8sXG4gICAgICogbGV0cmFzIG1hacO6c2N1bGFzL21pbsO6c2N1bGFzLCBuw7ptZXJvcyBlIGNhcmFjdGVyZXMgZXNwZWNpYWlzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhWYWxpZGF0aW9uPzogKGNvbnRlbnQ6IHN0cmluZykgPT4gUGFzc3dvcmRTdHJlbmd0aHM7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUG9zacOnw6NvIHByZWZlcmVuY2lhbCBvbmRlIG8gaW5kaWNhZG9yIGRlIGZvcsOnYSBzZXLDoSBleGliaWRvIGVtIHJlbGHDp8OjbyBhbyBjYW1wby5cbiAgICAgKiBBY2VpdGEgYCdyaWdodCdgLCBgJ2xlZnQnYCBvdSBgJ3RvcCdgLiBPIGNvbXBvbmVudGUgdGVudGEgcG9zaWNpb25hciBhdXRvbWF0aWNhbWVudGVcbiAgICAgKiBlbSBvdXRybyBsYWRvIGNhc28gbsOjbyBoYWphIGVzcGHDp28gc3VmaWNpZW50ZSBuYSBwb3Npw6fDo28gZXNwZWNpZmljYWRhLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3JpZ2h0J1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbjogUGFzc3dvcmRTdHJlbmd0aFBvc2l0aW9ucyA9ICdyaWdodCc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gcGVyc29uYWxpemFkbyBleGliaWRvIHF1YW5kbyBhIHNlbmhhIMOpIGNsYXNzaWZpY2FkYSBjb21vIGZyYWNhLlxuICAgICAqIFNlIG7Do28gaW5mb3JtYWRvLCB1dGlsaXphIGEgdHJhZHXDp8OjbyBwYWRyw6NvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhXZWFrVGl0bGU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gcGVyc29uYWxpemFkbyBleGliaWRvIHF1YW5kbyBhIHNlbmhhIMOpIGNsYXNzaWZpY2FkYSBjb21vIG3DqWRpYS5cbiAgICAgKiBTZSBuw6NvIGluZm9ybWFkbywgdXRpbGl6YSBhIHRyYWR1w6fDo28gcGFkcsOjby5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwYXNzd29yZFN0cmVuZ3RoTWVkaXVtVGl0bGU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gcGVyc29uYWxpemFkbyBleGliaWRvIHF1YW5kbyBhIHNlbmhhIMOpIGNsYXNzaWZpY2FkYSBjb21vIGZvcnRlLlxuICAgICAqIFNlIG7Do28gaW5mb3JtYWRvLCB1dGlsaXphIGEgdHJhZHXDp8OjbyBwYWRyw6NvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhTdHJvbmdUaXRsZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXNjcmnDp8OjbyBjb21wbGVtZW50YXIgZXhpYmlkYSBubyBpbmRpY2Fkb3IgZGUgZm9yw6dhIGRlIHNlbmhhLFxuICAgICAqIG9yaWVudGFuZG8gbyB1c3XDoXJpbyBzb2JyZSBvcyByZXF1aXNpdG9zIGRhIHNlbmhhLiBDYW1wbyBvYnJpZ2F0w7NyaW8uXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aERlc2NyaXB0aW9uITogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBjb21wb25lbnRSZWY/OiBudWxsIHwgQ29tcG9uZW50UmVmPFBhc3N3b3JkU3RyZW5ndGhDb21wb25lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICAvLyBOT1NPTkFSIC0gJ0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcicgaXMgZGVwcmVjYXRlZC5cbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlUHJvcGVydGllcygpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleXVwJylcbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgcHVibGljIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA/PyAnJztcblxuICAgICAgICB0aGlzLmNyZWF0ZVBhc3N3b3JkU3RyZW5ndGgoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlO1xuICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC51cGRhdGVJbmRpY2F0b3JzKHRoaXMucGFzc3dvcmRTdHJlbmd0aFZhbGlkYXRpb24oY29udGVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcG9uZW50LnVwZGF0ZUluZGljYXRvcnMoJ3ZlcnlXZWFrJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgICBwdWJsaWMgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3lQYXNzd29yZFN0cmVuZ3RoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQYXNzd29yZFN0cmVuZ3RoKCkge1xuICAgICAgICBpZiAodGhpcy5lbmFibGVkICYmIGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuY29tcG9uZW50UmVmKSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFBhc3N3b3JkU3RyZW5ndGhDb21wb25lbnQpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcbiAgICAgICAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgY29uc3QgZG9tRWxlbSA9ICh0aGlzLmNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb21FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFzc3dvcmRTdHJlbmd0aENvbXBvbmVudFByb3BlcnRpZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1Bhc3N3b3JkU3RyZW5ndGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1Bhc3N3b3JkU3RyZW5ndGgoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOT1NPTkFSIC0gUmVmYWN0b3IgdGhpcyBmdW5jdGlvbiB0byByZWR1Y2UgaXRzIENvZ25pdGl2ZSBDb21wbGV4aXR5IGZyb20gMTYgdG8gdGhlIDE1IGFsbG93ZWQuXG4gICAgcHJpdmF0ZSBzZXRQYXNzd29yZFN0cmVuZ3RoQ29tcG9uZW50UHJvcGVydGllcygpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuY29tcG9uZW50UmVmKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UucG9zaXRpb24gPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbjtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uud2Vha1RpdGxlID0gdGhpcy5wYXNzd29yZFN0cmVuZ3RoV2Vha1RpdGxlO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5tZWRpdW1UaXRsZSA9IHRoaXMucGFzc3dvcmRTdHJlbmd0aE1lZGl1bVRpdGxlO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zdHJvbmdUaXRsZSA9IHRoaXMucGFzc3dvcmRTdHJlbmd0aFN0cm9uZ1RpdGxlO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5kZXNjcmlwdGlvbiA9IHRoaXMucGFzc3dvcmRTdHJlbmd0aERlc2NyaXB0aW9uO1xuXG4gICAgICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBtYXJnaW4gPSAyMDtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlZkhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlZldpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICBjb25zdCBzYWZlU3BhY2UgPSAxNTA7XG5cbiAgICAgICAgbGV0IHBvc2l0aW9uZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaW52YWxpZE9wdGlvbnM6IFBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbnNbXSA9IFtdO1xuXG4gICAgICAgIHdoaWxlICghcG9zaXRpb25lZCkge1xuICAgICAgICAgICAgaWYgKGludmFsaWRPcHRpb25zLmluY2x1ZGVzKCd0b3AnKSAmJiBpbnZhbGlkT3B0aW9ucy5pbmNsdWRlcygncmlnaHQnKSAmJiBpbnZhbGlkT3B0aW9ucy5pbmNsdWRlcygnbGVmdCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95UGFzc3dvcmRTdHJlbmd0aCgpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc3BhY2UgdG8gc2hvdyBwYXNzd29yZCBzdHJlbmd0aCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMucGFzc3dvcmRTdHJlbmd0aFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndG9wJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3BTaGlmdCA9IHRvcDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmlnaHRTaGlmdCA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggLSByaWdodDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdFNoaWZ0ID0gbGVmdDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBNSU5fSE9SSVpPTlRBTF9TQUZFX1NQQUNFID0gNTA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wU2hpZnQgPD0gZWxlbWVudFJlZkhlaWdodCArIHNhZmVTcGFjZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRTaGlmdCA8IE1JTl9IT1JJWk9OVEFMX1NBRkVfU1BBQ0UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaGlmdCA8IE1JTl9IT1JJWk9OVEFMX1NBRkVfU1BBQ0VcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbiA9ICdyaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT3B0aW9ucy5wdXNoKCd0b3AnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudG9wID0gTWF0aC5yb3VuZCh0b3AgLSBtYXJnaW4pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZChlbGVtZW50UmVmV2lkdGggLyAyICsgbGVmdCk7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0U2hpZnQgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIC0gcmlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0U2hpZnQgPD0gZWxlbWVudFJlZldpZHRoICsgc2FmZVNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbiA9ICdsZWZ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRPcHRpb25zLnB1c2goJ3JpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQodG9wICsgZWxlbWVudFJlZkhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZChyaWdodCArIG1hcmdpbik7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbGVmdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdFNoaWZ0ID0gbGVmdDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobGVmdFNoaWZ0IDw9IGVsZW1lbnRSZWZXaWR0aCArIHNhZmVTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoUG9zaXRpb24gPSAndG9wJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRPcHRpb25zLnB1c2goJ2xlZnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudG9wID0gTWF0aC5yb3VuZCh0b3AgKyBlbGVtZW50UmVmSGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmxlZnQgPSBNYXRoLnJvdW5kKGxlZnQgLSBtYXJnaW4pO1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5wb3NpdGlvbiA9IHRoaXMucGFzc3dvcmRTdHJlbmd0aFBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVByb3BlcnRpZXMoKSB7XG4gICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFZhbGlkYXRpb24gPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGF0aW9uIHx8IHRoaXMuZGVmYXVsdFZhbGlkYXRvcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lQYXNzd29yZFN0cmVuZ3RoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWZhdWx0VmFsaWRhdG9yKGNvbnRlbnQ6IHN0cmluZyk6IFBhc3N3b3JkU3RyZW5ndGhzIHtcbiAgICAgICAgbGV0IHBvaW50cyA9IDA7XG4gICAgICAgIGNvbnN0IFBBU1NXT1JEX01JTl9MRU5HVEggPSA2O1xuICAgICAgICBjb25zdCBXRUVLX0NSSVRFUklBID0gMTtcbiAgICAgICAgY29uc3QgTUVESVVNX0NSSVRFUklBID0gNDtcbiAgICAgICAgY29uc3QgU1RST05HX0NSSVRFUklBID0gNTtcblxuICAgICAgICBjb25zdCByZWdFeHBWYWxpZGF0aW9ucyA9IFtcbiAgICAgICAgICAgIC8oPz0uKlxcZCkvLCAvLyBudW1iZXJcbiAgICAgICAgICAgIC8oPz0uKlthLXpdKS8sIC8vIGxvd2VyY2FzZVxuICAgICAgICAgICAgLyg/PS4qW0EtWl0pLywgLy8gdXBwZXJjYXNlXG4gICAgICAgICAgICAvKD89LipbIUAjJCUmKi5cXFxcPStefi1dKS8sIC8vIHNwZWNpYWwgY2hhcmFjdGVyXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID49IFBBU1NXT1JEX01JTl9MRU5HVEgpIHtcbiAgICAgICAgICAgIHBvaW50cysrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnRXhwVmFsaWRhdGlvbnMuZm9yRWFjaCgodmFsaWRhdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24udGVzdChjb250ZW50KSkge1xuICAgICAgICAgICAgICAgIHBvaW50cysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocG9pbnRzIDwgV0VFS19DUklURVJJQSkge1xuICAgICAgICAgICAgcmV0dXJuICd2ZXJ5V2Vhayc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvaW50cyA8IE1FRElVTV9DUklURVJJQSkge1xuICAgICAgICAgICAgcmV0dXJuICd3ZWFrJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9pbnRzIDwgU1RST05HX0NSSVRFUklBKSB7XG4gICAgICAgICAgICByZXR1cm4gJ21lZGl1bSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdzdHJvbmcnO1xuICAgIH1cbn1cblxuIl19
|
|
@@ -8,21 +8,50 @@ import * as i2 from "@angular/cdk/drag-drop";
|
|
|
8
8
|
import * as i3 from "@angular/forms";
|
|
9
9
|
import * as i4 from "@seniorsistemas/angular-components/button";
|
|
10
10
|
import * as i5 from "@ngx-translate/core";
|
|
11
|
+
/**
|
|
12
|
+
* @description Componente de lista de dupla seleção (picklist) com suporte a
|
|
13
|
+
* arrastar e soltar, filtro, checkboxes e template customizável para cada item.
|
|
14
|
+
* Emite eventos ao mover itens entre as listas.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```html
|
|
18
|
+
* <s-picklist
|
|
19
|
+
* [itensToSelect]="itensDisponiveis"
|
|
20
|
+
* [selectedItens]="itensSelecionados"
|
|
21
|
+
* (selectedItensChange)="onSelecaoMudou($event)" />
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @category Data
|
|
25
|
+
*/
|
|
11
26
|
export class PicklistComponent {
|
|
12
27
|
cdr;
|
|
28
|
+
/** @description Lista de itens disponíveis para seleção (coluna esquerda). @default [] */
|
|
13
29
|
itensToSelect = [];
|
|
30
|
+
/** @description Lista de itens já selecionados (coluna direita). @default [] */
|
|
14
31
|
selectedItens = [];
|
|
32
|
+
/** @description Rótulo do título da lista de disponíveis. */
|
|
15
33
|
availableItensLabel;
|
|
34
|
+
/** @description Placeholder da busca na lista de disponíveis. */
|
|
16
35
|
availableItensPlaceholder;
|
|
36
|
+
/** @description Rótulo do botão de adicionar itens selecionados. */
|
|
17
37
|
addSelectedItensLabel;
|
|
38
|
+
/** @description Rótulo do botão de adicionar todos os itens. */
|
|
18
39
|
addAllItensLabel;
|
|
40
|
+
/** @description Rótulo do título da lista de selecionados. */
|
|
19
41
|
selectedItensLabel;
|
|
42
|
+
/** @description Placeholder da busca na lista de selecionados. */
|
|
20
43
|
selectedItensPlaceholder;
|
|
44
|
+
/** @description Rótulo do botão de remover itens selecionados. */
|
|
21
45
|
removeSelectedItemsLabel;
|
|
46
|
+
/** @description Rótulo do botão de remover todos os itens. */
|
|
22
47
|
removeAllItemsLabel;
|
|
48
|
+
/** @description Exibe checkbox nos itens das listas. @default false */
|
|
23
49
|
showCheckbox = false;
|
|
50
|
+
/** @description Propriedade usada para filtrar os itens das listas. @default '' */
|
|
24
51
|
filterBy = '';
|
|
52
|
+
/** @description Emitido quando a lista de selecionados muda. */
|
|
25
53
|
selectedItensChange = new EventEmitter();
|
|
54
|
+
/** @description Emitido quando a lista de disponíveis muda. */
|
|
26
55
|
itensToSelectChange = new EventEmitter();
|
|
27
56
|
availableItensFilter = '';
|
|
28
57
|
selectedItensFilter = '';
|
|
@@ -216,7 +245,9 @@ export class PicklistComponent {
|
|
|
216
245
|
this.cdr.detectChanges();
|
|
217
246
|
}
|
|
218
247
|
getAllElementsByListId(listId) {
|
|
219
|
-
return listId === this.selectedItensId
|
|
248
|
+
return listId === this.selectedItensId
|
|
249
|
+
? this.selectedItensFilterUtil.rawSelectedItens
|
|
250
|
+
: this.itensToSelectFilterUtil.rawItensToSelect;
|
|
220
251
|
}
|
|
221
252
|
getOppositiveId(listId) {
|
|
222
253
|
return listId === this.selectedItensId ? this.itensToSelectId : this.selectedItensId;
|
|
@@ -296,4 +327,4 @@ export const parseItensPickList = (array, disabledFn) => {
|
|
|
296
327
|
};
|
|
297
328
|
});
|
|
298
329
|
};
|
|
299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdILFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7Ozs7QUFjaEYsTUFBTSxPQUFPLGlCQUFpQjtJQTJFTjtJQXpFYixhQUFhLEdBQXdCLEVBQUUsQ0FBQztJQUd4QyxhQUFhLEdBQXdCLEVBQUUsQ0FBQztJQUd4QyxtQkFBbUIsQ0FBVTtJQUc3Qix5QkFBeUIsQ0FBVTtJQUduQyxxQkFBcUIsQ0FBVTtJQUcvQixnQkFBZ0IsQ0FBVTtJQUcxQixrQkFBa0IsQ0FBVTtJQUc1Qix3QkFBd0IsQ0FBVTtJQUdsQyx3QkFBd0IsQ0FBVTtJQUdsQyxtQkFBbUIsQ0FBVTtJQUc3QixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBR3JCLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFHZCxtQkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBR2hELG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7SUFFaEQsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0lBRTFCLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztJQUV6QixvQkFBb0IsR0FBNEIsSUFBSSxDQUFDO0lBRXJELG9CQUFvQixHQUE0QixJQUFJLENBQUM7SUFFckQsdUJBQXVCLEdBRzFCO1FBQ0ksZ0JBQWdCLEVBQUUsRUFBRTtRQUNwQixxQkFBcUIsRUFBRSxFQUFFO0tBQzVCLENBQUM7SUFFTix1QkFBdUIsR0FHbkI7UUFDSSxnQkFBZ0IsRUFBRSxFQUFFO1FBQ3BCLHFCQUFxQixFQUFFLEVBQUU7S0FDNUIsQ0FBQztJQUVDLGdCQUFnQixHQUE4QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3hELGVBQWUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDOUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUU3QyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFFekIsU0FBUyxHQUF3QyxJQUFJLENBQUM7SUFFOUQsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFBSSxDQUFDO0lBRS9DLGVBQWU7UUFDWCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDO1FBQ3ZHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDO1FBQ3RHLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLG9GQUFvRixDQUFDLENBQUM7WUFDeEcsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDO1lBQ3ZHLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQXNCO1FBQ3JDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyx1QkFBdUIsR0FBRztnQkFDM0IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQ3BDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxhQUFhO2FBQzVDLENBQUM7UUFDTixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHO2dCQUMzQixxQkFBcUIsRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDekMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWE7YUFDdkMsQ0FBQztRQUNOLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLG9CQUEwQyxFQUFFLGVBQXVCO1FBQzlFLElBQUksb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLG9CQUFvQixDQUFDLFFBQVEsR0FBRyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztRQUMvRCxJQUFJLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLO1FBQ2QsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE9BQU87UUFDWCxDQUFDO1FBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNuRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLO1FBQ1gsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE9BQU87UUFDWCxDQUFDO1FBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNuRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQzNDLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDL0csY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUN2RCxDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsdUJBQXVCLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDO1FBQ3ZHLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxtQkFBbUI7UUFDZixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDMUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUMvRyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQ3ZELENBQUM7UUFDTixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUM7UUFDdkcsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLENBQUMsS0FBMEM7UUFDM0MsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN4QixPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUMzRSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBbUIsRUFBRSxVQUFrQjtRQUMvQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQy9ELEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGFBQWE7UUFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsNEJBQTRCLENBQUMsTUFBd0I7UUFDakQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekgsQ0FBQztJQUVELDJCQUEyQixDQUFDLE1BQXdCO1FBQ2hELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pILENBQUM7SUFFRCxJQUFJLDRCQUE0QjtRQUM1QixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxJQUFJLDRCQUE0QjtRQUM1QixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxJQUFJLHdCQUF3QjtRQUN4QixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsSUFBSSx3QkFBd0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQVEsSUFBSSxDQUFDLGFBQXdDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBUSxJQUFJLENBQUMsYUFBd0MsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxJQUE0QjtRQUN4RCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDTCxDQUFDO0lBRU8sNEJBQTRCLENBQUMsT0FBZ0IsRUFBRSxJQUE0QixFQUFFLE1BQWM7UUFDL0YsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxNQUFjO1FBQzFDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDcEIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQWM7UUFDekMsT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUM7SUFDM0ksQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFjO1FBQ2xDLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDekYsQ0FBQztJQUVPLFFBQVE7UUFDWixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO3dHQXpSUSxpQkFBaUI7NEZBQWpCLGlCQUFpQiw2cUJBd0VULGlCQUFpQixrREN2R3RDLHM1UkFxT0E7OzRGRHRNYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0ksWUFBWTtzRkFNZixhQUFhO3NCQURuQixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsbUJBQW1CO3NCQUR6QixLQUFLO2dCQUlDLHlCQUF5QjtzQkFEL0IsS0FBSztnQkFJQyxxQkFBcUI7c0JBRDNCLEtBQUs7Z0JBSUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQUlDLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFJQyx3QkFBd0I7c0JBRDlCLEtBQUs7Z0JBSUMsd0JBQXdCO3NCQUQ5QixLQUFLO2dCQUlDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFJQyxZQUFZO3NCQURsQixLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSztnQkFJQyxtQkFBbUI7c0JBRHpCLE1BQU07Z0JBSUEsbUJBQW1CO3NCQUR6QixNQUFNO2dCQWlDQyxTQUFTO3NCQURoQixlQUFlO3VCQUFDLGlCQUFpQjs7QUFvTnRDLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDcEMsT0FBTyxHQUFHO1NBQ0wsU0FBUyxDQUFDLEtBQUssQ0FBQztTQUNoQixPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1NBQy9CLFdBQVcsRUFBRSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQWtCLEVBQUUsU0FBaUIsRUFBRSxFQUFFO0lBQzdELE9BQU8sZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLElBQXFELEVBQTBCLEVBQUU7SUFDcEcsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUF5QixFQUFFLEVBQUU7SUFDMUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFJLEtBQVUsRUFBRSxVQUFpQyxFQUFxQixFQUFFO0lBQ3RHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ25CLE9BQU87WUFDSCxJQUFJLEVBQUUsQ0FBQztZQUNQLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztTQUMvQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGlja0xpc3RJdGVtIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyByYW5kb21IYXNoIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdGVtcGxhdGUnO1xuXG5pbnRlcmZhY2UgSW50ZXJuYWxQaWNrbGlzdEl0ZW08VCA9IGFueT4gZXh0ZW5kcyBQaWNrTGlzdEl0ZW08VD4ge1xuICAgIGludmlzaWJsZT86IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG50eXBlIENka0RyYWdFdmVudCA9IHsgc291cmNlOiBDZGtEcmFnPEludGVybmFsUGlja2xpc3RJdGVtPGFueT4+IH07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1waWNrbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BpY2tsaXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9waWNrbGlzdC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQaWNrbGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdDogUGlja0xpc3RJdGVtPGFueT5bXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuczogUGlja0xpc3RJdGVtPGFueT5bXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNMYWJlbD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGF2YWlsYWJsZUl0ZW5zUGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRTZWxlY3RlZEl0ZW5zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRBbGxJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuc1BsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlQWxsSXRlbXNMYWJlbD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dDaGVja2JveCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmlsdGVyQnkgPSAnJztcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBpdGVuc1RvU2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIHB1YmxpYyBhdmFpbGFibGVJdGVuc0ZpbHRlciA9ICcnO1xuXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNGaWx0ZXIgPSAnJztcblxuICAgIHB1YmxpYyBpdGVtVG9TZWxlY3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIGl0ZW1TZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdEZpbHRlclV0aWw6IHtcbiAgICAgICAgcmF3SXRlbnNUb1NlbGVjdDogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXTtcbiAgICAgICAgZmlsdGVyZWRJdGVuc1RvU2VsZWN0OiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgIH0gPSB7XG4gICAgICAgICAgICByYXdJdGVuc1RvU2VsZWN0OiBbXSxcbiAgICAgICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogW10sXG4gICAgICAgIH07XG5cbiAgICBzZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbDoge1xuICAgICAgICByYXdTZWxlY3RlZEl0ZW5zOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgICAgICBmaWx0ZXJlZFNlbGVjdGVkSXRlbnM6IEludGVybmFsUGlja2xpc3RJdGVtW107XG4gICAgfSA9IHtcbiAgICAgICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IFtdLFxuICAgICAgICAgICAgZmlsdGVyZWRTZWxlY3RlZEl0ZW5zOiBbXSxcbiAgICAgICAgfTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zTWFwOiBTZXQ8SW50ZXJuYWxQaWNrbGlzdEl0ZW0+ID0gbmV3IFNldCgpO1xuICAgIHB1YmxpYyBpdGVuc1RvU2VsZWN0SWQgPSByYW5kb21IYXNoKCdpdGVuc1RvU2VsZWN0Jyk7XG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNJZCA9IHJhbmRvbUhhc2goJ3NlbGVjdGVkSXRlbnMnKTtcblxuICAgIHByaXZhdGUgX2xvZ0Vycm9yVGVtcGxhdGUgPSB0cnVlO1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZURpcmVjdGl2ZT4gfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlcz8uZmluZCgoeCkgPT4geC50eXBlID09PSAnaXRlbS10by1zZWxlY3QnKT8udGVtcGxhdGUgPz8gbnVsbDtcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzPy5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICdzZWxlY3RlZC1pdGVtJyk/LnRlbXBsYXRlID8/IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9sb2dFcnJvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnaXRlbS10by1zZWxlY3QnIGFkZCB0aGlzIHRlbXBsYXRlIHVzaW5nIHNUZW1wbGF0ZSBkaXJlY3RpdmUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVNlbGVjdGVkVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnc2VsZWN0ZWQtaXRlbScgYWRkIHRoaXMgdGVtcGxhdGUgdXNpbmcgc1RlbXBsYXRlIGRpcmVjdGl2ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW5zVG9TZWxlY3QnXT8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwgPSB7XG4gICAgICAgICAgICAgICAgcmF3SXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZW5zJ10/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsID0ge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkU2VsZWN0ZWRJdGVuczogdGhpcy5zZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IHRoaXMuc2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RlZChpbnRlcm5hbFBpY2tsaXN0SXRlbTogSW50ZXJuYWxQaWNrbGlzdEl0ZW0sIGNvbnRhaW5lckxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbnRlcm5hbFBpY2tsaXN0SXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQodGhpcy5nZXRPcHBvc2l0aXZlSWQoY29udGFpbmVyTGlzdElkKSk7XG4gICAgICAgIGludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkID0gIWludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkO1xuICAgICAgICBpZiAoaW50ZXJuYWxQaWNrbGlzdEl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5hZGQoaW50ZXJuYWxQaWNrbGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpbnRlcm5hbFBpY2tsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHJlbW92ZShhbGwgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBpdGVucyA9IGZpbHRlckVuYWJsZWQoYWxsID8gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zIDogdGhpcy5zZWxlY3RlZEl0ZW5zTWFwKTtcbiAgICAgICAgaWYgKCFpdGVucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpdGVucy5mb3JFYWNoKChpdGVtUmVtb3ZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QucHVzaChpdGVtUmVtb3ZlKTtcbiAgICAgICAgICAgIGl0ZW1SZW1vdmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5kZWxldGUoaXRlbVJlbW92ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnMuZmlsdGVyKCh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnM7XG4gICAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWRJdGVucygpO1xuICAgICAgICB0aGlzLmZpbHRlckl0ZW5zVG9TZWxlY3QoKTtcbiAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYWRkKGFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGl0ZW5zID0gZmlsdGVyRW5hYmxlZChhbGwgPyB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgOiB0aGlzLnNlbGVjdGVkSXRlbnNNYXApO1xuICAgICAgICBpZiAoIWl0ZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW5zLmZvckVhY2goKGl0ZW1SZW1vdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVucy5wdXNoKGl0ZW1SZW1vdmUpO1xuICAgICAgICAgICAgaXRlbVJlbW92ZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpdGVtUmVtb3ZlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdC5maWx0ZXIoKHgpID0+ICFpdGVucy5pbmNsdWRlcyh4KSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdDtcbiAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgIHRoaXMuZmlsdGVySXRlbnNUb1NlbGVjdCgpO1xuICAgICAgICB0aGlzLmVtaXREYXRhKCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJJdGVuc1RvU2VsZWN0KCkge1xuICAgICAgICBsZXQgc2VhcmNoVGVybSA9IHRoaXMuYXZhaWxhYmxlSXRlbnNGaWx0ZXI7XG4gICAgICAgIHNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0ID0gdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0LmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBjb21wYXJlU3RyaW5ncyhpdGVtLmRhdGFbdGhpcy5maWx0ZXJCeV0sIHNlYXJjaFRlcm0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0ID0gdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJTZWxlY3RlZEl0ZW5zKCkge1xuICAgICAgICBsZXQgc2VhcmNoVGVybSA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlcjtcbiAgICAgICAgc2VhcmNoVGVybSA9IHNlYXJjaFRlcm0udHJpbSgpO1xuICAgICAgICBpZiAoc2VhcmNoVGVybSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKGl0ZW0uZGF0YVt0aGlzLmZpbHRlckJ5XSwgc2VhcmNoVGVybSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxJbnRlcm5hbFBpY2tsaXN0SXRlbVtdPikge1xuICAgICAgICBjb25zdCBpc0RpZmZlcmVudENvbnRhaW5lciA9IGV2ZW50LmNvbnRhaW5lciAhPT0gZXZlbnQucHJldmlvdXNDb250YWluZXI7XG4gICAgICAgIGlmICghaXNEaWZmZXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUmVtb3ZlZEl0ZW5zID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkO1xuICAgICAgICBpZiAoaXNSZW1vdmVkSXRlbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogQ2RrRHJhZ0V2ZW50LCBkcmFnTGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkSXRlbnNCeUxpc3RJZCh0aGlzLmdldE9wcG9zaXRpdmVJZChkcmFnTGlzdElkKSk7XG4gICAgICAgIGV2ZW50LnNvdXJjZS5kYXRhLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmFkZChldmVudC5zb3VyY2UuZGF0YSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5mb3JFYWNoKCh4KSA9PiAoeC5pbnZpc2libGUgPSB0cnVlKSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdSZWxlYXNlKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZm9yRWFjaCgoaXRlbSkgPT4gKGl0ZW0uaW52aXNpYmxlID0gZmFsc2UpKTtcbiAgICB9XG5cbiAgICBjaGVja0FsbEF2YWlsYWJsZUl0ZW5zQ2hhbmdlKHRhcmdldDogSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjaGVja2VkID0gdGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShjaGVja2VkLCB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCwgdGhpcy5pdGVuc1RvU2VsZWN0SWQpO1xuICAgIH1cblxuICAgIGNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZSh0YXJnZXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY2hlY2tlZCA9IHRhcmdldC5jaGVja2VkO1xuICAgICAgICB0aGlzLl9jaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UoY2hlY2tlZCwgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMsIHRoaXMuc2VsZWN0ZWRJdGVuc0lkKTtcbiAgICB9XG5cbiAgICBnZXQgZGlzYWJsZVNlbGVjdGVkSXRlbnNDaGVja2JveCgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlckVuYWJsZWQodGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBnZXQgZGlzYWJsZUl0ZW5zVG9TZWxlY3RDaGVja2JveCgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlckVuYWJsZWQodGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBnZXQgaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEJ5TGlzdCh0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCk7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRCeUxpc3QodGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMpO1xuICAgIH1cblxuICAgIGdldCBjYW5BZGRJdGVucygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLml0ZW5zVG9TZWxlY3QgYXMgSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXSkuZmlsdGVyKCh4KSA9PiB4Py5zZWxlY3RlZCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBnZXQgY2FuUmVtb3ZlSXRlbnMoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZEl0ZW5zIGFzIEludGVybmFsUGlja2xpc3RJdGVtW10pLmZpbHRlcigoeCkgPT4geD8uc2VsZWN0ZWQpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tBbGxTZWxlY3RlZEJ5TGlzdChsaXN0OiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdKSB7XG4gICAgICAgIGNvbnN0IF9saXN0SXRlbnMgPSBmaWx0ZXJFbmFibGVkKGxpc3QpO1xuICAgICAgICBpZiAoIV9saXN0SXRlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX2xpc3RJdGVucy5ldmVyeSgoeCkgPT4geC5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UoY2hlY2tlZDogYm9vbGVhbiwgbGlzdDogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXSwgbGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkSXRlbnNCeUxpc3RJZChsaXN0SWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkID8gdGhpcy5pdGVuc1RvU2VsZWN0SWQgOiB0aGlzLnNlbGVjdGVkSXRlbnNJZCk7XG4gICAgICAgIGZpbHRlckVuYWJsZWQobGlzdCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA9IGNoZWNrZWQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuYWRkKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQobGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgY2xlYXJMaXN0ID0gdGhpcy5nZXRBbGxFbGVtZW50c0J5TGlzdElkKGxpc3RJZCk7XG4gICAgICAgIGNsZWFyTGlzdC5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICB4LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZGVsZXRlKHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWxsRWxlbWVudHNCeUxpc3RJZChsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbGlzdElkID09PSB0aGlzLnNlbGVjdGVkSXRlbnNJZCA/IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyA6IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9wcG9zaXRpdmVJZChsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbGlzdElkID09PSB0aGlzLnNlbGVjdGVkSXRlbnNJZCA/IHRoaXMuaXRlbnNUb1NlbGVjdElkIDogdGhpcy5zZWxlY3RlZEl0ZW5zSWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0Q2hhbmdlLmVtaXQocGFyc2VWYWx1ZUVtaXQodGhpcy5pdGVuc1RvU2VsZWN0KSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0NoYW5nZS5lbWl0KHBhcnNlVmFsdWVFbWl0KHRoaXMuc2VsZWN0ZWRJdGVucykpO1xuICAgIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplU3RyaW5nID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gc3RyaW5ncyBieSBub3JtYWxpemluZyB0aGVtIHRvIGEgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgYWNjZW50LWZyZWUgZm9ybSxcbiAqIGFuZCBjaGVja3MgaWYgdGhlIG1haW4gc3RyaW5nIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcuXG4gKlxuICogQHBhcmFtIG1haW5TdHJpbmcgLSBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkLlxuICogQHBhcmFtIHN1YnN0cmluZyAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvciB3aXRoaW4gdGhlIG1haW4gc3RyaW5nLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbm9ybWFsaXplZCBtYWluIHN0cmluZyBjb250YWlucyB0aGUgbm9ybWFsaXplZCBzdWJzdHJpbmcuXG4gKi9cblxuY29uc3QgY29tcGFyZVN0cmluZ3MgPSAobWFpblN0cmluZzogc3RyaW5nLCBzdWJzdHJpbmc6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBub3JtYWxpemVTdHJpbmcobWFpblN0cmluZykuaW5jbHVkZXMobm9ybWFsaXplU3RyaW5nKHN1YnN0cmluZykpO1xufTtcblxuY29uc3QgZmlsdGVyRW5hYmxlZCA9IChsaXN0OiBQaWNrTGlzdEl0ZW08YW55PltdIHwgU2V0PEludGVybmFsUGlja2xpc3RJdGVtPik6IEludGVybmFsUGlja2xpc3RJdGVtW10gPT4ge1xuICAgIGNvbnN0IF9saXN0ID0gbGlzdCBpbnN0YW5jZW9mIFNldCA/IEFycmF5LmZyb20obGlzdCkgOiBsaXN0O1xuICAgIHJldHVybiBfbGlzdC5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKTtcbn07XG5cbmNvbnN0IG1hcERhdGEgPSAobGlzdDogUGlja0xpc3RJdGVtPGFueT5bXSkgPT4ge1xuICAgIHJldHVybiBsaXN0Lm1hcCgoeCkgPT4geC5kYXRhKTtcbn07XG5cbmNvbnN0IHBhcnNlVmFsdWVFbWl0ID0gcGlwZShmaWx0ZXJFbmFibGVkLCBtYXBEYXRhKTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSXRlbnNQaWNrTGlzdCA9IDxUPihhcnJheTogVFtdLCBkaXNhYmxlZEZuPzogKGl0ZW06IFQpID0+IGJvb2xlYW4pOiBQaWNrTGlzdEl0ZW08VD5bXSA9PiB7XG4gICAgcmV0dXJuIGFycmF5Lm1hcCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogeCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZEZuID8gZGlzYWJsZWRGbih4KSA6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH0pO1xufTtcbiIsIjxuZy10ZW1wbGF0ZVxuICAgICNwcmV2aWV3UmVuZGVyXG4gICAgbGV0LWl0ZW5zPVwiaXRlbnNcIlxuICAgIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCJcbj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInBpY2tsaXN0LWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0uZGF0YSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjcGlja2xpc3RJdGVuc1JlbmRlclxuICAgIGxldC1pZD1cImlkXCJcbiAgICBsZXQtaXRlbnM9XCJpdGVuc1wiXG4gICAgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIlxuICAgIGxldC1saXN0Q29ubmVjdGVkVG89XCJsaXN0Q29ubmVjdGVkVG9cIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwaWNrbGlzdC1pdGVtc1wiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJpdGVuc1wiXG4gICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImxpc3RDb25uZWN0ZWRUb1wiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0ZWQoaXRlbSwgaWQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpZClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnUmVsZWFzZWQpPVwib25EcmFnUmVsZWFzZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpY2tsaXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucGlja2xpc3QtaXRlbS1pbnZpc2libGVdPVwiaXRlbS5pbnZpc2libGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1pdGVtLWFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtOiBpdGVtLmRhdGEsIHNlbGVjdGVkOiBpdGVtLnNlbGVjdGVkLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrRHJhZ1ByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmV2aWV3UmVuZGVyOyBjb250ZXh0OiB7IGl0ZW5zOiBzZWxlY3RlZEl0ZW5zTWFwLCB0ZW1wbGF0ZTogdGVtcGxhdGUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAgICNjaGVja2JveFRpdGxlUmVuZGVyXG4gICAgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIGxldC1jaGVja2VkPVwiY2hlY2tlZFwiXG4gICAgbGV0LWNoYW5nZUZuPVwiY2hhbmdlRm5cIlxuPlxuICAgIEBpZiAoc2hvd0NoZWNrYm94KSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jaGVja2JveFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VGbigkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAgIC8+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cInBpY2tsaXN0LWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVJdGVuc1RvU2VsZWN0Q2hlY2tib3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGl0ZW5zVG9TZWxlY3RBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IGNoZWNrQWxsQXZhaWxhYmxlSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGlja2xpc3QtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXZhaWxhYmxlSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmF2YWlsYWJsZS1pdGVtcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZmlsdGVyQnkgJiYgc2hvd0NoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tsaXN0LWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94VGl0bGVSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZUl0ZW5zVG9TZWxlY3RDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGbjogY2hlY2tBbGxBdmFpbGFibGVJdGVuc0NoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF2YWlsYWJsZUl0ZW5zRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJJdGVuc1RvU2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJhdmFpbGFibGVJdGVuc1BsYWNlaG9sZGVyIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGlja2xpc3QtcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHBpY2tsaXN0SXRlbnNSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVuczogaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IGl0ZW1Ub1NlbGVjdFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbm5lY3RlZFRvOiBzZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRTZWxlY3RlZEl0ZW5zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5hZGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHJpZ2h0SWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctcmlnaHRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQWRkSXRlbnNcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImFkZCgpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRBbGxJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYWRkX2FsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwibGlua1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiYWRkKHRydWUpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZVNlbGVjdGVkSXRlbnNDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUZuOiBjaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tsaXN0LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnNlbGVjdGVkLWl0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGlja2xpc3QtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5ICYmIHNob3dDaGVja2JveFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3hUaXRsZVJlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZGlzYWJsZWQ6IGRpc2FibGVTZWxlY3RlZEl0ZW5zQ2hlY2tib3gsIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCwgY2hhbmdlRm46IGNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZS5iaW5kKHRoaXMpIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRJdGVuc0ZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJTZWxlY3RlZEl0ZW5zKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkSXRlbnNQbGFjZWhvbGRlciB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpY2tsaXN0LXBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgcGlja2xpc3RJdGVuc1JlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHNlbGVjdGVkSXRlbnNJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW5zOiBzZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogaXRlbVNlbGVjdGVkVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0Q29ubmVjdGVkVG86IGl0ZW5zVG9TZWxlY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZVNlbGVjdGVkSXRlbXNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctbGVmdFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5SZW1vdmVJdGVuc1wiXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlKClcIlxuICAgICAgICAgICAgICAgIFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUFsbEl0ZW1zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmVfYWxsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmUodHJ1ZSlcIlxuICAgICAgICAgICAgICAgIFthdXhpbGlhcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdILFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7Ozs7QUFTaEY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFNSCxNQUFNLE9BQU8saUJBQWlCO0lBeUZOO0lBeEZwQiwwRkFBMEY7SUFFbkYsYUFBYSxHQUF3QixFQUFFLENBQUM7SUFFL0MsZ0ZBQWdGO0lBRXpFLGFBQWEsR0FBd0IsRUFBRSxDQUFDO0lBRS9DLDZEQUE2RDtJQUV0RCxtQkFBbUIsQ0FBVTtJQUVwQyxpRUFBaUU7SUFFMUQseUJBQXlCLENBQVU7SUFFMUMsb0VBQW9FO0lBRTdELHFCQUFxQixDQUFVO0lBRXRDLGdFQUFnRTtJQUV6RCxnQkFBZ0IsQ0FBVTtJQUVqQyw4REFBOEQ7SUFFdkQsa0JBQWtCLENBQVU7SUFFbkMsa0VBQWtFO0lBRTNELHdCQUF3QixDQUFVO0lBRXpDLGtFQUFrRTtJQUUzRCx3QkFBd0IsQ0FBVTtJQUV6Qyw4REFBOEQ7SUFFdkQsbUJBQW1CLENBQVU7SUFFcEMsdUVBQXVFO0lBRWhFLFlB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Q0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFJLEtBQVUsRUFBRSxVQUFpQyxFQUFxQixFQUFFO0lBQ3RHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ25CLE9BQU87WUFDSCxJQUFJLEVBQUUsQ0FBQztZQUNQLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztTQUMvQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGlja0xpc3RJdGVtIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyByYW5kb21IYXNoIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdGVtcGxhdGUnO1xuXG5pbnRlcmZhY2UgSW50ZXJuYWxQaWNrbGlzdEl0ZW08VCA9IGFueT4gZXh0ZW5kcyBQaWNrTGlzdEl0ZW08VD4ge1xuICAgIGludmlzaWJsZT86IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG50eXBlIENka0RyYWdFdmVudCA9IHsgc291cmNlOiBDZGtEcmFnPEludGVybmFsUGlja2xpc3RJdGVtPGFueT4+IH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgbGlzdGEgZGUgZHVwbGEgc2VsZcOnw6NvIChwaWNrbGlzdCkgY29tIHN1cG9ydGUgYVxuICogYXJyYXN0YXIgZSBzb2x0YXIsIGZpbHRybywgY2hlY2tib3hlcyBlIHRlbXBsYXRlIGN1c3RvbWl6w6F2ZWwgcGFyYSBjYWRhIGl0ZW0uXG4gKiBFbWl0ZSBldmVudG9zIGFvIG1vdmVyIGl0ZW5zIGVudHJlIGFzIGxpc3Rhcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHMtcGlja2xpc3RcbiAqICAgW2l0ZW5zVG9TZWxlY3RdPVwiaXRlbnNEaXNwb25pdmVpc1wiXG4gKiAgIFtzZWxlY3RlZEl0ZW5zXT1cIml0ZW5zU2VsZWNpb25hZG9zXCJcbiAqICAgKHNlbGVjdGVkSXRlbnNDaGFuZ2UpPVwib25TZWxlY2FvTXVkb3UoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgRGF0YVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3MtcGlja2xpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9waWNrbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcGlja2xpc3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUGlja2xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgaXRlbnMgZGlzcG9uw612ZWlzIHBhcmEgc2VsZcOnw6NvIChjb2x1bmEgZXNxdWVyZGEpLiBAZGVmYXVsdCBbXSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGl0ZW5zVG9TZWxlY3Q6IFBpY2tMaXN0SXRlbTxhbnk+W10gPSBbXTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgaXRlbnMgasOhIHNlbGVjaW9uYWRvcyAoY29sdW5hIGRpcmVpdGEpLiBAZGVmYXVsdCBbXSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnM6IFBpY2tMaXN0SXRlbTxhbnk+W10gPSBbXTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyB0w610dWxvIGRhIGxpc3RhIGRlIGRpc3BvbsOtdmVpcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhdmFpbGFibGVJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBQbGFjZWhvbGRlciBkYSBidXNjYSBuYSBsaXN0YSBkZSBkaXNwb27DrXZlaXMuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgYWRpY2lvbmFyIGl0ZW5zIHNlbGVjaW9uYWRvcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRTZWxlY3RlZEl0ZW5zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFLDs3R1bG8gZG8gYm90w6NvIGRlIGFkaWNpb25hciB0b2RvcyBvcyBpdGVucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRBbGxJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIHTDrXR1bG8gZGEgbGlzdGEgZGUgc2VsZWNpb25hZG9zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNMYWJlbD86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUGxhY2Vob2xkZXIgZGEgYnVzY2EgbmEgbGlzdGEgZGUgc2VsZWNpb25hZG9zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgcmVtb3ZlciBpdGVucyBzZWxlY2lvbmFkb3MuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIGJvdMOjbyBkZSByZW1vdmVyIHRvZG9zIG9zIGl0ZW5zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlbW92ZUFsbEl0ZW1zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIGNoZWNrYm94IG5vcyBpdGVucyBkYXMgbGlzdGFzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dDaGVja2JveCA9IGZhbHNlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBQcm9wcmllZGFkZSB1c2FkYSBwYXJhIGZpbHRyYXIgb3MgaXRlbnMgZGFzIGxpc3Rhcy4gQGRlZmF1bHQgJycgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWx0ZXJCeSA9ICcnO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBhIGxpc3RhIGRlIHNlbGVjaW9uYWRvcyBtdWRhLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gYSBsaXN0YSBkZSBkaXNwb27DrXZlaXMgbXVkYS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNGaWx0ZXIgPSAnJztcblxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zRmlsdGVyID0gJyc7XG5cbiAgICBwdWJsaWMgaXRlbVRvU2VsZWN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBpdGVtU2VsZWN0ZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIGl0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsOiB7XG4gICAgICAgIHJhd0l0ZW5zVG9TZWxlY3Q6IEludGVybmFsUGlja2xpc3RJdGVtW107XG4gICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXTtcbiAgICB9ID0ge1xuICAgICAgICByYXdJdGVuc1RvU2VsZWN0OiBbXSxcbiAgICAgICAgZmlsdGVyZWRJdGVuc1RvU2VsZWN0OiBbXSxcbiAgICB9O1xuXG4gICAgc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWw6IHtcbiAgICAgICAgcmF3U2VsZWN0ZWRJdGVuczogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXTtcbiAgICAgICAgZmlsdGVyZWRTZWxlY3RlZEl0ZW5zOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgIH0gPSB7XG4gICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IFtdLFxuICAgICAgICBmaWx0ZXJlZFNlbGVjdGVkSXRlbnM6IFtdLFxuICAgIH07XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuc01hcDogU2V0PEludGVybmFsUGlja2xpc3RJdGVtPiA9IG5ldyBTZXQoKTtcbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdElkID0gcmFuZG9tSGFzaCgnaXRlbnNUb1NlbGVjdCcpO1xuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zSWQgPSByYW5kb21IYXNoKCdzZWxlY3RlZEl0ZW5zJyk7XG5cbiAgICBwcml2YXRlIF9sb2dFcnJvclRlbXBsYXRlID0gdHJ1ZTtcbiAgICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8VGVtcGxhdGVEaXJlY3RpdmU+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlcz8uZmluZCgoeCkgPT4geC50eXBlID09PSAnaXRlbS10by1zZWxlY3QnKT8udGVtcGxhdGUgPz8gbnVsbDtcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzPy5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICdzZWxlY3RlZC1pdGVtJyk/LnRlbXBsYXRlID8/IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9sb2dFcnJvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnaXRlbS10by1zZWxlY3QnIGFkZCB0aGlzIHRlbXBsYXRlIHVzaW5nIHNUZW1wbGF0ZSBkaXJlY3RpdmUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVNlbGVjdGVkVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnc2VsZWN0ZWQtaXRlbScgYWRkIHRoaXMgdGVtcGxhdGUgdXNpbmcgc1RlbXBsYXRlIGRpcmVjdGl2ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW5zVG9TZWxlY3QnXT8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwgPSB7XG4gICAgICAgICAgICAgICAgcmF3SXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZW5zJ10/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsID0ge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkU2VsZWN0ZWRJdGVuczogdGhpcy5zZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IHRoaXMuc2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RlZChpbnRlcm5hbFBpY2tsaXN0SXRlbTogSW50ZXJuYWxQaWNrbGlzdEl0ZW0sIGNvbnRhaW5lckxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbnRlcm5hbFBpY2tsaXN0SXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQodGhpcy5nZXRPcHBvc2l0aXZlSWQoY29udGFpbmVyTGlzdElkKSk7XG4gICAgICAgIGludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkID0gIWludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkO1xuICAgICAgICBpZiAoaW50ZXJuYWxQaWNrbGlzdEl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5hZGQoaW50ZXJuYWxQaWNrbGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpbnRlcm5hbFBpY2tsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHJlbW92ZShhbGwgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBpdGVucyA9IGZpbHRlckVuYWJsZWQoYWxsID8gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zIDogdGhpcy5zZWxlY3RlZEl0ZW5zTWFwKTtcbiAgICAgICAgaWYgKCFpdGVucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpdGVucy5mb3JFYWNoKChpdGVtUmVtb3ZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QucHVzaChpdGVtUmVtb3ZlKTtcbiAgICAgICAgICAgIGl0ZW1SZW1vdmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5kZWxldGUoaXRlbVJlbW92ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnMuZmlsdGVyKCh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnM7XG4gICAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWRJdGVucygpO1xuICAgICAgICB0aGlzLmZpbHRlckl0ZW5zVG9TZWxlY3QoKTtcbiAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYWRkKGFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGl0ZW5zID0gZmlsdGVyRW5hYmxlZChhbGwgPyB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgOiB0aGlzLnNlbGVjdGVkSXRlbnNNYXApO1xuICAgICAgICBpZiAoIWl0ZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW5zLmZvckVhY2goKGl0ZW1SZW1vdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVucy5wdXNoKGl0ZW1SZW1vdmUpO1xuICAgICAgICAgICAgaXRlbVJlbW92ZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpdGVtUmVtb3ZlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdC5maWx0ZXIoKHgpID0+ICFpdGVucy5pbmNsdWRlcyh4KSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdDtcbiAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgIHRoaXMuZmlsdGVySXRlbnNUb1NlbGVjdCgpO1xuICAgICAgICB0aGlzLmVtaXREYXRhKCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJJdGVuc1RvU2VsZWN0KCkge1xuICAgICAgICBsZXQgc2VhcmNoVGVybSA9IHRoaXMuYXZhaWxhYmxlSXRlbnNGaWx0ZXI7XG4gICAgICAgIHNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0ID0gdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0LmZpbHRlcihcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gY29tcGFyZVN0cmluZ3MoaXRlbS5kYXRhW3RoaXMuZmlsdGVyQnldLCBzZWFyY2hUZXJtKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZmlsdGVyU2VsZWN0ZWRJdGVucygpIHtcbiAgICAgICAgbGV0IHNlYXJjaFRlcm0gPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXI7XG4gICAgICAgIHNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zID0gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gY29tcGFyZVN0cmluZ3MoaXRlbS5kYXRhW3RoaXMuZmlsdGVyQnldLCBzZWFyY2hUZXJtKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPEludGVybmFsUGlja2xpc3RJdGVtW10+KSB7XG4gICAgICAgIGNvbnN0IGlzRGlmZmVyZW50Q29udGFpbmVyID0gZXZlbnQuY29udGFpbmVyICE9PSBldmVudC5wcmV2aW91c0NvbnRhaW5lcjtcbiAgICAgICAgaWYgKCFpc0RpZmZlcmVudENvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNSZW1vdmVkSXRlbnMgPSBldmVudC5wcmV2aW91c0NvbnRhaW5lci5pZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQ7XG4gICAgICAgIGlmIChpc1JlbW92ZWRJdGVucykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0KGV2ZW50OiBDZGtEcmFnRXZlbnQsIGRyYWdMaXN0SWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWRJdGVuc0J5TGlzdElkKHRoaXMuZ2V0T3Bwb3NpdGl2ZUlkKGRyYWdMaXN0SWQpKTtcbiAgICAgICAgZXZlbnQuc291cmNlLmRhdGEuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuYWRkKGV2ZW50LnNvdXJjZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmZvckVhY2goKHgpID0+ICh4LmludmlzaWJsZSA9IHRydWUpKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uRHJhZ1JlbGVhc2UoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS5pbnZpc2libGUgPSBmYWxzZSkpO1xuICAgIH1cblxuICAgIGNoZWNrQWxsQXZhaWxhYmxlSXRlbnNDaGFuZ2UodGFyZ2V0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSB0YXJnZXQuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKFxuICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKHRhcmdldDogSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjaGVja2VkID0gdGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShcbiAgICAgICAgICAgIGNoZWNrZWQsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0lkLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBkaXNhYmxlU2VsZWN0ZWRJdGVuc0NoZWNrYm94KCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyRW5hYmxlZCh0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucykubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGdldCBkaXNhYmxlSXRlbnNUb1NlbGVjdENoZWNrYm94KCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyRW5hYmxlZCh0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGdldCBpdGVuc1RvU2VsZWN0QWxsU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja0FsbFNlbGVjdGVkQnlMaXN0KHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0KTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRJdGVuc0FsbFNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEJ5TGlzdCh0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyk7XG4gICAgfVxuXG4gICAgZ2V0IGNhbkFkZEl0ZW5zKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXRlbnNUb1NlbGVjdCBhcyBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdKS5maWx0ZXIoKHgpID0+IHg/LnNlbGVjdGVkKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGdldCBjYW5SZW1vdmVJdGVucygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkSXRlbnMgYXMgSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXSkuZmlsdGVyKCh4KSA9PiB4Py5zZWxlY3RlZCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja0FsbFNlbGVjdGVkQnlMaXN0KGxpc3Q6IEludGVybmFsUGlja2xpc3RJdGVtW10pIHtcbiAgICAgICAgY29uc3QgX2xpc3RJdGVucyA9IGZpbHRlckVuYWJsZWQobGlzdCk7XG4gICAgICAgIGlmICghX2xpc3RJdGVucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfbGlzdEl0ZW5zLmV2ZXJ5KCh4KSA9PiB4LnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShjaGVja2VkOiBib29sZWFuLCBsaXN0OiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdLCBsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWRJdGVuc0J5TGlzdElkKGxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQgPyB0aGlzLml0ZW5zVG9TZWxlY3RJZCA6IHRoaXMuc2VsZWN0ZWRJdGVuc0lkKTtcbiAgICAgICAgZmlsdGVyRW5hYmxlZChsaXN0KS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gY2hlY2tlZDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5hZGQoaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnNlbGVjdGVkSXRlbnNCeUxpc3RJZChsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBjbGVhckxpc3QgPSB0aGlzLmdldEFsbEVsZW1lbnRzQnlMaXN0SWQobGlzdElkKTtcbiAgICAgICAgY2xlYXJMaXN0LmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIHguc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5kZWxldGUoeCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxFbGVtZW50c0J5TGlzdElkKGxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBsaXN0SWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkXG4gICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVuc1xuICAgICAgICAgICAgOiB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcHBvc2l0aXZlSWQobGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQgPyB0aGlzLml0ZW5zVG9TZWxlY3RJZCA6IHRoaXMuc2VsZWN0ZWRJdGVuc0lkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdERhdGEoKSB7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdENoYW5nZS5lbWl0KHBhcnNlVmFsdWVFbWl0KHRoaXMuaXRlbnNUb1NlbGVjdCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNDaGFuZ2UuZW1pdChwYXJzZVZhbHVlRW1pdCh0aGlzLnNlbGVjdGVkSXRlbnMpKTtcbiAgICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVN0cmluZyA9IChzdHI6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBzdHJcbiAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKTtcbn07XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIHN0cmluZ3MgYnkgbm9ybWFsaXppbmcgdGhlbSB0byBhIGNhc2UtaW5zZW5zaXRpdmUgYW5kIGFjY2VudC1mcmVlIGZvcm0sXG4gKiBhbmQgY2hlY2tzIGlmIHRoZSBtYWluIHN0cmluZyBjb250YWlucyB0aGUgc3Vic3RyaW5nLlxuICpcbiAqIEBwYXJhbSBtYWluU3RyaW5nIC0gVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZC5cbiAqIEBwYXJhbSBzdWJzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3Igd2l0aGluIHRoZSBtYWluIHN0cmluZy5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG5vcm1hbGl6ZWQgbWFpbiBzdHJpbmcgY29udGFpbnMgdGhlIG5vcm1hbGl6ZWQgc3Vic3RyaW5nLlxuICovXG5cbmNvbnN0IGNvbXBhcmVTdHJpbmdzID0gKG1haW5TdHJpbmc6IHN0cmluZywgc3Vic3RyaW5nOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gbm9ybWFsaXplU3RyaW5nKG1haW5TdHJpbmcpLmluY2x1ZGVzKG5vcm1hbGl6ZVN0cmluZyhzdWJzdHJpbmcpKTtcbn07XG5cbmNvbnN0IGZpbHRlckVuYWJsZWQgPSAobGlzdDogUGlja0xpc3RJdGVtPGFueT5bXSB8IFNldDxJbnRlcm5hbFBpY2tsaXN0SXRlbT4pOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdID0+IHtcbiAgICBjb25zdCBfbGlzdCA9IGxpc3QgaW5zdGFuY2VvZiBTZXQgPyBBcnJheS5mcm9tKGxpc3QpIDogbGlzdDtcbiAgICByZXR1cm4gX2xpc3QuZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCk7XG59O1xuXG5jb25zdCBtYXBEYXRhID0gKGxpc3Q6IFBpY2tMaXN0SXRlbTxhbnk+W10pID0+IHtcbiAgICByZXR1cm4gbGlzdC5tYXAoKHgpID0+IHguZGF0YSk7XG59O1xuXG5jb25zdCBwYXJzZVZhbHVlRW1pdCA9IHBpcGUoZmlsdGVyRW5hYmxlZCwgbWFwRGF0YSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUl0ZW5zUGlja0xpc3QgPSA8VD4oYXJyYXk6IFRbXSwgZGlzYWJsZWRGbj86IChpdGVtOiBUKSA9PiBib29sZWFuKTogUGlja0xpc3RJdGVtPFQ+W10gPT4ge1xuICAgIHJldHVybiBhcnJheS5tYXAoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IHgsXG4gICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWRGbiA/IGRpc2FibGVkRm4oeCkgOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn07XG5cbiIsIjxuZy10ZW1wbGF0ZVxuICAgICNwcmV2aWV3UmVuZGVyXG4gICAgbGV0LWl0ZW5zPVwiaXRlbnNcIlxuICAgIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCJcbj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInBpY2tsaXN0LWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0uZGF0YSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjcGlja2xpc3RJdGVuc1JlbmRlclxuICAgIGxldC1pZD1cImlkXCJcbiAgICBsZXQtaXRlbnM9XCJpdGVuc1wiXG4gICAgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIlxuICAgIGxldC1saXN0Q29ubmVjdGVkVG89XCJsaXN0Q29ubmVjdGVkVG9cIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwaWNrbGlzdC1pdGVtc1wiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJpdGVuc1wiXG4gICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImxpc3RDb25uZWN0ZWRUb1wiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0ZWQoaXRlbSwgaWQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpZClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnUmVsZWFzZWQpPVwib25EcmFnUmVsZWFzZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpY2tsaXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucGlja2xpc3QtaXRlbS1pbnZpc2libGVdPVwiaXRlbS5pbnZpc2libGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1pdGVtLWFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtOiBpdGVtLmRhdGEsIHNlbGVjdGVkOiBpdGVtLnNlbGVjdGVkLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrRHJhZ1ByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmV2aWV3UmVuZGVyOyBjb250ZXh0OiB7IGl0ZW5zOiBzZWxlY3RlZEl0ZW5zTWFwLCB0ZW1wbGF0ZTogdGVtcGxhdGUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAgICNjaGVja2JveFRpdGxlUmVuZGVyXG4gICAgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIGxldC1jaGVja2VkPVwiY2hlY2tlZFwiXG4gICAgbGV0LWNoYW5nZUZuPVwiY2hhbmdlRm5cIlxuPlxuICAgIEBpZiAoc2hvd0NoZWNrYm94KSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jaGVja2JveFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VGbigkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAgIC8+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cInBpY2tsaXN0LWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVJdGVuc1RvU2VsZWN0Q2hlY2tib3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGl0ZW5zVG9TZWxlY3RBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IGNoZWNrQWxsQXZhaWxhYmxlSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGlja2xpc3QtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXZhaWxhYmxlSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmF2YWlsYWJsZS1pdGVtcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZmlsdGVyQnkgJiYgc2hvd0NoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tsaXN0LWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94VGl0bGVSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZUl0ZW5zVG9TZWxlY3RDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGbjogY2hlY2tBbGxBdmFpbGFibGVJdGVuc0NoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF2YWlsYWJsZUl0ZW5zRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJJdGVuc1RvU2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJhdmFpbGFibGVJdGVuc1BsYWNlaG9sZGVyIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGlja2xpc3QtcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHBpY2tsaXN0SXRlbnNSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVuczogaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IGl0ZW1Ub1NlbGVjdFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbm5lY3RlZFRvOiBzZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRTZWxlY3RlZEl0ZW5zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5hZGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHJpZ2h0SWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctcmlnaHRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQWRkSXRlbnNcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImFkZCgpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRBbGxJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYWRkX2FsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwibGlua1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiYWRkKHRydWUpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZVNlbGVjdGVkSXRlbnNDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUZuOiBjaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tsaXN0LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnNlbGVjdGVkLWl0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGlja2xpc3QtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5ICYmIHNob3dDaGVja2JveFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3hUaXRsZVJlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZGlzYWJsZWQ6IGRpc2FibGVTZWxlY3RlZEl0ZW5zQ2hlY2tib3gsIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCwgY2hhbmdlRm46IGNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZS5iaW5kKHRoaXMpIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRJdGVuc0ZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJTZWxlY3RlZEl0ZW5zKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkSXRlbnNQbGFjZWhvbGRlciB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpY2tsaXN0LXBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgcGlja2xpc3RJdGVuc1JlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHNlbGVjdGVkSXRlbnNJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW5zOiBzZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogaXRlbVNlbGVjdGVkVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0Q29ubmVjdGVkVG86IGl0ZW5zVG9TZWxlY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZVNlbGVjdGVkSXRlbXNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctbGVmdFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5SZW1vdmVJdGVuc1wiXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlKClcIlxuICAgICAgICAgICAgICAgIFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUFsbEl0ZW1zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmVfYWxsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmUodHJ1ZSlcIlxuICAgICAgICAgICAgICAgIFthdXhpbGlhcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|