@hmcts/ccd-case-ui-toolkit 7.1.80 → 7.2.0
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/esm2022/lib/components/banners/alert/alert-icon-class.pipe.mjs +2 -2
- package/esm2022/lib/components/banners/alert/alert.component.mjs +2 -2
- package/esm2022/lib/components/banners/alert/alert.module.mjs +2 -2
- package/esm2022/lib/components/banners/banners.module.mjs +2 -2
- package/esm2022/lib/components/banners/notification-banner/notification-banner.component.mjs +2 -2
- package/esm2022/lib/components/banners/notification-banner/notification-banner.module.mjs +2 -2
- package/esm2022/lib/components/body/body.component.mjs +2 -2
- package/esm2022/lib/components/body/body.module.mjs +2 -2
- package/esm2022/lib/components/footer/footer.component.mjs +2 -2
- package/esm2022/lib/components/footer/footers.module.mjs +2 -2
- package/esm2022/lib/components/form/date-input/date-input.component.mjs +2 -2
- package/esm2022/lib/components/form/form.module.mjs +2 -2
- package/esm2022/lib/components/header/header-bar/header-bar.component.mjs +2 -2
- package/esm2022/lib/components/header/headers.module.mjs +2 -2
- package/esm2022/lib/components/header/navigation/navigation-item.component.mjs +2 -2
- package/esm2022/lib/components/header/navigation/navigation.component.mjs +2 -2
- package/esm2022/lib/components/header/phase/phase.component.mjs +2 -2
- package/esm2022/lib/components/tabs/tab.component.mjs +2 -2
- package/esm2022/lib/components/tabs/tabs.component.mjs +2 -2
- package/esm2022/lib/components/tabs/tabs.module.mjs +2 -2
- package/esm2022/lib/shared/commons/address-validation-constants.mjs +2 -2
- package/esm2022/lib/shared/commons/case-edit-data/case-edit-data.module.mjs +2 -2
- package/esm2022/lib/shared/commons/constants.mjs +2 -2
- package/esm2022/lib/shared/components/activity/activity-banner/activity-banner.component.mjs +2 -2
- package/esm2022/lib/shared/components/activity/activity-icon/activity-icon.component.mjs +2 -2
- package/esm2022/lib/shared/components/activity/activity.component.mjs +2 -2
- package/esm2022/lib/shared/components/activity/activity.module.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-create/case-create.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-edit/case-edit.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-edit-generic-errors/case-edit-generic-errors.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-editor.module.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-event-completion/case-event-completion.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/case-progress/case-progress.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/case-edit-wizard.guard.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/case-flag-state.service.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/case-worker.service.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/case.notifier.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/cases.service.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/convert-href-to-router.service.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/event-completion-state-machine.service.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/event-trigger.service.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/judicial-worker.service.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/page-validation.service.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/valid-page-list-caseFields.service.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/wizard-page-field-to-case-field.mapper.mjs +2 -2
- package/esm2022/lib/shared/components/case-editor/services/work-allocation.service.mjs +2 -2
- package/esm2022/lib/shared/components/case-header/case-header.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-header/case-header.module.mjs +2 -2
- package/esm2022/lib/shared/components/case-history/case-history.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-history/case-history.module.mjs +2 -2
- package/esm2022/lib/shared/components/case-history/services/case-history.service.mjs +2 -2
- package/esm2022/lib/shared/components/case-list/case-list.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-list/case-list.module.mjs +2 -2
- package/esm2022/lib/shared/components/case-list-filters/case-list-filters.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-list-filters/case-list-filters.module.mjs +2 -2
- package/esm2022/lib/shared/components/case-timeline/case-timeline.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-timeline/case-timeline.module.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-view/case-view.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-viewer.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/case-viewer.module.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/printer/case-printer.component.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/printer/pipes/print-url.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/services/case.resolver.mjs +2 -2
- package/esm2022/lib/shared/components/case-viewer/services/event-trigger.resolver.mjs +2 -2
- package/esm2022/lib/shared/components/create-case-filters/create-case-filters.component.mjs +2 -2
- package/esm2022/lib/shared/components/create-case-filters/create-case-filters.module.mjs +2 -2
- package/esm2022/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.mjs +2 -2
- package/esm2022/lib/shared/components/dialogs/dialogs.module.mjs +2 -2
- package/esm2022/lib/shared/components/dialogs/document-dialog/document-dialog.component.mjs +2 -2
- package/esm2022/lib/shared/components/dialogs/remove-dialog/remove-dialog.component.mjs +2 -2
- package/esm2022/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.mjs +2 -2
- package/esm2022/lib/shared/components/error/callback-errors.component.mjs +2 -2
- package/esm2022/lib/shared/components/error/errors.module.mjs +2 -2
- package/esm2022/lib/shared/components/error-message/error-message.component.mjs +2 -2
- package/esm2022/lib/shared/components/error-message/error-message.module.mjs +2 -2
- package/esm2022/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.mjs +2 -2
- package/esm2022/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.mjs +2 -2
- package/esm2022/lib/shared/components/event-start/components/task-assigned/task-assigned.component.mjs +2 -2
- package/esm2022/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.mjs +2 -2
- package/esm2022/lib/shared/components/event-start/components/task-conflict/task-conflict.component.mjs +2 -2
- package/esm2022/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.mjs +2 -2
- package/esm2022/lib/shared/components/event-start/event-guard/event-start.guard.mjs +2 -2
- package/esm2022/lib/shared/components/event-start/event-start.component.mjs +2 -2
- package/esm2022/lib/shared/components/event-start/event-start.module.mjs +2 -2
- package/esm2022/lib/shared/components/event-start/resolvers/event-tasks-resolver.service.mjs +2 -2
- package/esm2022/lib/shared/components/event-start/services/event-start-state-machine.service.mjs +2 -2
- package/esm2022/lib/shared/components/event-trigger/event-trigger.component.mjs +2 -2
- package/esm2022/lib/shared/components/event-trigger/event-trigger.module.mjs +2 -2
- package/esm2022/lib/shared/components/loading-spinner/loading-spinner.component.mjs +2 -2
- package/esm2022/lib/shared/components/loading-spinner/loading-spinner.module.mjs +2 -2
- package/esm2022/lib/shared/components/pagination/pagination.component.mjs +2 -2
- package/esm2022/lib/shared/components/pagination/pagination.module.mjs +2 -2
- package/esm2022/lib/shared/components/palette/address/write-address-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/base-field/abstract-field-read.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/base-field/abstract-field-write-journey.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/base-field/abstract-field-write.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/base-field/abstract-form-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/base-field/abstract-journey.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/base-field/field-read-label.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/base-field/field-read.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/base-field/field-write.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-file-view/case-file-view-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder-document-actions/case-file-view-folder-document-actions.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder-sort/case-file-view-folder-sort.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-file-view/components/case-file-view-folder-selector/case-file-view-folder-selector.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-file-view/components/shared/case-file-view-overlay-menu/case-file-view-overlay-menu.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/components/case-flag-table/case-flag-table.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/pipes/flag-field-display.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/pipes/language-interpreter-display.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/pipes/manage-case-flags-label-display.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/pipes/update-flag-title-display.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/read-case-flag-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-flag/write-case-flag-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-link/read-case-link-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/case-link/write-case-link-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/collection/collection-create-checker.service.mjs +2 -2
- package/esm2022/lib/shared/components/palette/collection/read-collection-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/collection/write-collection-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/complex/read-complex-field-collection-table.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/complex/read-complex-field-raw.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/complex/read-complex-field-table.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/complex/read-complex-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/complex/write-complex-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/date/read-date-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/date/write-date-container-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/date/write-date-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/datetime-picker/datetime-picker.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/document/document-url.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/document/file-upload-progress.guard.mjs +2 -2
- package/esm2022/lib/shared/components/palette/document/file-upload-state.service.mjs +2 -2
- package/esm2022/lib/shared/components/palette/document/read-document-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/document/write-document-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/dynamic-list/dynamic-list.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/dynamic-list/read-dynamic-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/dynamic-list/write-dynamic-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/dynamic-multi-select-list/read-dynamic-multi-select-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/dynamic-multi-select-list/write-dynamic-multi-select-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/dynamic-radio-list/dynamic-radio-list.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/dynamic-radio-list/read-dynamic-radio-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/dynamic-radio-list/write-dynamic-radio-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/email/read-email-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/email/write-email-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/fixed-list/fixed-list.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/fixed-list/read-fixed-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/fixed-list/write-fixed-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/fixed-radio-list/fixed-radio-list.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/fixed-radio-list/read-fixed-radio-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/fixed-radio-list/write-fixed-radio-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/history/case-history-viewer-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/history/event-log/event-log-details.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/history/event-log/event-log-table.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/history/event-log/event-log.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/judicial-user/read-judicial-user-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/judicial-user/write-judicial-user-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/label/label-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-from-table.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-to-table.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/linked-cases/read-linked-cases-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/linked-cases/services/linked-cases.service.mjs +2 -2
- package/esm2022/lib/shared/components/palette/linked-cases/utils/validators.utils.mjs +2 -2
- package/esm2022/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/markdown/markdown-component.module.mjs +2 -2
- package/esm2022/lib/shared/components/palette/markdown/markdown.component.mjs +9 -5
- package/esm2022/lib/shared/components/palette/markdown/routerlink.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/money-gbp/money-gbp-input.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/money-gbp/read-money-gbp-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/money-gbp/write-money-gbp-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/multi-select-list/read-multi-select-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/multi-select-list/write-multi-select-list-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/number/read-number-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/number/write-number-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/order-summary/read-order-summary-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/order-summary/read-order-summary-row.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/order-summary/write-order-summary-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/organisation/read-organisation-field-raw.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/organisation/read-organisation-field-table.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/organisation/read-organisation-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/organisation/write-organisation-complex-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/organisation/write-organisation-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/palette.module.mjs +2 -2
- package/esm2022/lib/shared/components/palette/palette.service.mjs +2 -2
- package/esm2022/lib/shared/components/palette/payment/case-payment-history-viewer-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/phone-uk/read-phone-uk-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/phone-uk/write-phone-uk-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/qualifying-questions/qualifying-question-detail/qualifying-question-detail.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/qualifying-questions/qualifying-question-options/qualifying-question-options.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-attachments-read/query-attachments-read.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-case-details-header/query-case-details-header.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-confirmation/query-confirmation.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-details/query-details.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-event-completion/query-event-completion.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-list/query-list.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-write/query-write-add-documents/query-write-add-documents.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-write/query-write-date-input/query-write-date-input.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/read-query-management-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/services/qualifying-question.service.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/utils/query-management.utils.mjs +2 -2
- package/esm2022/lib/shared/components/palette/text/read-text-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/text/write-text-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/text-area/read-text-area-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/text-area/write-text-area-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/unsupported-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/utils/dash.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/utils/date.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/utils/field-label.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/utils/first-error.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/utils/is-compound.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/utils/is-mandatory.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/utils/is-read-only-and-not-collection.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/utils/is-read-only.pipe.mjs +2 -2
- package/esm2022/lib/shared/components/palette/utils/utils.module.mjs +2 -2
- package/esm2022/lib/shared/components/palette/waystopay/waystopay-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/yes-no/read-yes-no-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/yes-no/write-yes-no-field.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/yes-no/yes-no.service.mjs +2 -2
- package/esm2022/lib/shared/components/search-filters/search-filters-wrapper.component.mjs +2 -2
- package/esm2022/lib/shared/components/search-filters/search-filters.component.mjs +2 -2
- package/esm2022/lib/shared/components/search-filters/search-filters.module.mjs +2 -2
- package/esm2022/lib/shared/components/search-result/search-result.component.mjs +2 -2
- package/esm2022/lib/shared/components/search-result/search-result.module.mjs +2 -2
- package/esm2022/lib/shared/components/workbasket-filters/workbasket-filters.component.mjs +2 -2
- package/esm2022/lib/shared/components/workbasket-filters/workbasket-filters.module.mjs +2 -2
- package/esm2022/lib/shared/directives/conditional-show/conditional-show-form.directive.mjs +2 -2
- package/esm2022/lib/shared/directives/conditional-show/conditional-show.module.mjs +2 -2
- package/esm2022/lib/shared/directives/conditional-show/services/conditional-show-registrar.service.mjs +2 -2
- package/esm2022/lib/shared/directives/conditional-show/services/grey-bar.service.mjs +2 -2
- package/esm2022/lib/shared/directives/focus-element/focus-element.directive.mjs +2 -2
- package/esm2022/lib/shared/directives/focus-element/focus-element.module.mjs +2 -2
- package/esm2022/lib/shared/directives/substitutor/label-substitutor.directive.mjs +2 -2
- package/esm2022/lib/shared/directives/substitutor/label-substitutor.module.mjs +2 -2
- package/esm2022/lib/shared/directives/substitutor/services/placeholder.service.mjs +2 -2
- package/esm2022/lib/shared/domain/organisation/organisation-converter.mjs +2 -2
- package/esm2022/lib/shared/pipes/case-reference/case-reference.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/case-title/ccd-case-title.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/complex/ccd-collection-table-value-case-fields.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/complex/ccd-cyapage-label-filter.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/complex/ccd-page-fields.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/complex/ccd-tab-fields.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/complex/fields-filter.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/generic/enum-display-description/enum-display-description.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/link-cases-from-reason-code/ccd-link-cases-from-reason-code.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/link-cases-reason-code/ccd-link-cases-reason-code.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/pipes.module.mjs +2 -2
- package/esm2022/lib/shared/pipes/search-result/sorting/sort-search-result.pipe.mjs +2 -2
- package/esm2022/lib/shared/services/activity/activity.polling.service.mjs +2 -2
- package/esm2022/lib/shared/services/activity/activity.service.mjs +2 -2
- package/esm2022/lib/shared/services/addresses/addresses.service.mjs +2 -2
- package/esm2022/lib/shared/services/alert/alert.service.mjs +2 -2
- package/esm2022/lib/shared/services/auth/auth.service.mjs +2 -2
- package/esm2022/lib/shared/services/banners/banners.service.mjs +2 -2
- package/esm2022/lib/shared/services/browser/browser.service.mjs +2 -2
- package/esm2022/lib/shared/services/case-fields/case-field.service.mjs +2 -2
- package/esm2022/lib/shared/services/case-fields/format-translator.service.mjs +2 -2
- package/esm2022/lib/shared/services/case-file-view/case-file-view.service.mjs +2 -2
- package/esm2022/lib/shared/services/case-flag/case-flag-refdata.service.mjs +2 -2
- package/esm2022/lib/shared/services/common-data-service/common-data-service.mjs +2 -2
- package/esm2022/lib/shared/services/cookie/read-cookie-service.mjs +2 -2
- package/esm2022/lib/shared/services/definitions/definitions.module.mjs +2 -2
- package/esm2022/lib/shared/services/definitions/definitions.service.mjs +2 -2
- package/esm2022/lib/shared/services/document-management/document-management.service.mjs +2 -2
- package/esm2022/lib/shared/services/draft/draft.service.mjs +2 -2
- package/esm2022/lib/shared/services/error/error-notifier.service.mjs +2 -2
- package/esm2022/lib/shared/services/eventStatusService/event-status.service.mjs +2 -2
- package/esm2022/lib/shared/services/fields/fields.purger.mjs +2 -2
- package/esm2022/lib/shared/services/fields/fields.utils.mjs +2 -2
- package/esm2022/lib/shared/services/form/field-type-sanitiser.mjs +2 -2
- package/esm2022/lib/shared/services/form/form-error.service.mjs +2 -2
- package/esm2022/lib/shared/services/form/form-validators.service.mjs +2 -2
- package/esm2022/lib/shared/services/form/form-value.service.mjs +2 -2
- package/esm2022/lib/shared/services/http/http-error.service.mjs +2 -2
- package/esm2022/lib/shared/services/http/http.service.mjs +2 -2
- package/esm2022/lib/shared/services/journey/multipage-component-state.service.mjs +2 -2
- package/esm2022/lib/shared/services/jurisdiction/jurisdiction.service.mjs +2 -2
- package/esm2022/lib/shared/services/loading/loading.module.mjs +2 -2
- package/esm2022/lib/shared/services/loading/loading.service.mjs +2 -2
- package/esm2022/lib/shared/services/navigation/navigation-notifier.service.mjs +2 -2
- package/esm2022/lib/shared/services/order/order.service.mjs +2 -2
- package/esm2022/lib/shared/services/organisation/organisation.service.mjs +2 -2
- package/esm2022/lib/shared/services/profile/profile.notifier.mjs +2 -2
- package/esm2022/lib/shared/services/profile/profile.service.mjs +2 -2
- package/esm2022/lib/shared/services/request/request.options.builder.mjs +2 -2
- package/esm2022/lib/shared/services/router/router-helper.service.mjs +2 -2
- package/esm2022/lib/shared/services/search/search.service.mjs +2 -2
- package/esm2022/lib/shared/services/search-result/sorting/search-result-view-item-comparator-factory.mjs +2 -2
- package/esm2022/lib/shared/services/session/session-storage.service.mjs +2 -2
- package/esm2022/lib/shared/services/utils/retry/retry.service.mjs +2 -2
- package/esm2022/lib/shared/services/window/window.service.mjs +2 -2
- package/esm2022/lib/shared/services/workbasket/workbasket-input-filter.service.mjs +2 -2
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +330 -326
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/lib/shared/components/palette/markdown/markdown.component.d.ts +3 -2
- package/lib/shared/components/palette/markdown/markdown.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -794,7 +794,7 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteJourneyCompon
|
|
|
794
794
|
setDisplayContextParameter(caseFields) {
|
|
795
795
|
return caseFields.find(caseField => FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher']))?.display_context_parameter;
|
|
796
796
|
}
|
|
797
|
-
static ɵfac = function WriteCaseFlagFieldComponent_Factory(
|
|
797
|
+
static ɵfac = function WriteCaseFlagFieldComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || WriteCaseFlagFieldComponent)(i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.CaseEditDataService), i0.ɵɵdirectiveInject(i3.CaseFlagStateService), i0.ɵɵdirectiveInject(i4.RpxTranslationService), i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i5.LinkedCasesService), i0.ɵɵdirectiveInject(i6.MultipageComponentStateService)); };
|
|
798
798
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WriteCaseFlagFieldComponent, selectors: [["ccd-write-case-flag-field"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 3, consts: [["journeyChild", ""], ["class", "govuk-error-summary", "aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 4, "ngIf"], ["class", "form-group", 3, "formGroup", 4, "ngIf"], ["aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 1, "govuk-error-summary"], ["id", "error-summary-title", 1, "govuk-error-summary__title"], ["class", "govuk-error-summary__body", 4, "ngFor", "ngForOf"], [1, "govuk-error-summary__body"], [1, "govuk-list", "govuk-error-summary__list"], [1, "validation-error", 3, "click"], [1, "form-group", 3, "formGroup"], [1, "govuk-form-group", 3, "ngSwitch"], [4, "ngSwitchCase"], [3, "caseFlagStateEmitter", "formGroup", "flagsData", "isDisplayContextParameterExternal"], [3, "caseFlagStateEmitter", "flagCommentsOptionalEmitter", "flagTypeSubJourneyEmitter", "formGroup", "jurisdiction", "caseTypeId", "hmctsServiceId", "isDisplayContextParameterExternal", "isDisplayContextParameter2Point1Enabled", "selectedFlagsLocation"], [3, "caseFlagStateEmitter", "formGroup", "flagType"], [3, "caseFlagStateEmitter", "formGroup", "optional", "isDisplayContextParameterExternal", "isDisplayContextParameter2Point1Enabled"], [3, "caseFlagStateEmitter", "formGroup", "defaultStatus"], [3, "caseFlagStateEmitter", "formGroup", "flagsData", "caseTitle", "displayContextParameter"], [3, "caseFlagStateEmitter", "formGroup", "displayContextParameter"], [3, "caseFlagStateEmitter", "formGroup"]], template: function WriteCaseFlagFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
799
799
|
i0.ɵɵtemplate(0, WriteCaseFlagFieldComponent_div_0_Template, 5, 4, "div", 1)(1, WriteCaseFlagFieldComponent_div_1_Template, 7, 7, "div", 2)(2, WriteCaseFlagFieldComponent_div_2_Template, 5, 5, "div", 2);
|
|
800
800
|
} if (rf & 2) {
|
|
@@ -810,4 +810,4 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteJourneyCompon
|
|
|
810
810
|
args: [{ selector: 'ccd-write-case-flag-field', template: "<!-- Error message summary -->\n<div *ngIf=\"errorMessages.length > 0\" class=\"govuk-error-summary\" aria-labelledby=\"error-summary-title\" role=\"alert\"\n tabindex=\"-1\" data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n {{'There is a problem' | rpxTranslate}}\n </h2>\n <div *ngFor=\"let errorMessage of errorMessages\" class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li>\n <a (click)=\"navigateToErrorElement(errorMessage.fieldId)\" class=\"validation-error\">{{errorMessage.description |\n rpxTranslate}}</a>\n </li>\n </ul>\n </div>\n</div>\n<div *ngIf=\"!isDisplayContextParameterUpdate\" class=\"form-group\" [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngSwitch]=\"fieldState\">\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_LOCATION\">\n <ccd-select-flag-location \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\" \n [flagsData]=\"flagsData\"\n [isDisplayContextParameterExternal]=\"isDisplayContextParameterExternal\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-select-flag-location>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_TYPE\">\n <ccd-select-flag-type \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\" \n [jurisdiction]=\"jurisdiction\"\n [caseTypeId]=\"caseTypeId\" \n [hmctsServiceId]=\"hmctsServiceId\"\n [isDisplayContextParameterExternal]=\"isDisplayContextParameterExternal\"\n [isDisplayContextParameter2Point1Enabled]=\"isDisplayContextParameter2Point1Enabled\"\n [selectedFlagsLocation]=\"selectedFlagsLocation\" \n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\"\n (flagCommentsOptionalEmitter)=\"onFlagCommentsOptionalEmitted($event)\"\n (flagTypeSubJourneyEmitter)=\"updateFlagTypeSubJourney($event)\">\n </ccd-select-flag-type>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_LANGUAGE_INTERPRETER\">\n <ccd-search-language-interpreter \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\" \n [flagType]=\"flagType\" \n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-search-language-interpreter>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_COMMENTS\">\n <ccd-add-comments \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\" \n [optional]=\"flagCommentsOptional\"\n [isDisplayContextParameterExternal]=\"isDisplayContextParameterExternal\"\n [isDisplayContextParameter2Point1Enabled]=\"isDisplayContextParameter2Point1Enabled\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-add-comments>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_STATUS\">\n <ccd-confirm-flag-status \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\"\n [defaultStatus]=\"flagType.defaultStatus\" \n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-confirm-flag-status>\n </ng-container>\n </div>\n</div>\n<div *ngIf=\"isDisplayContextParameterUpdate\" class=\"form-group\" [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngSwitch]=\"fieldState\">\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_MANAGE_CASE_FLAGS\">\n <ccd-manage-case-flags \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\" \n [flagsData]=\"flagsData\"\n [caseTitle]=\"caseTitle\" \n [displayContextParameter]=\"displayContextParameter\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-manage-case-flags>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_UPDATE\">\n <ccd-update-flag \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\"\n [displayContextParameter]=\"displayContextParameter\" \n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-update-flag>\n </ng-container>\n <ng-container *ngSwitchCase=\"caseFlagFieldState.FLAG_UPDATE_WELSH_TRANSLATION\">\n <ccd-update-flag-add-translation-form \n #journeyChild \n [formGroup]=\"caseFlagParentFormGroup\"\n (caseFlagStateEmitter)=\"onCaseFlagStateEmitted($event)\">\n </ccd-update-flag-add-translation-form>\n </ng-container>\n </div>\n</div>", styles: [".validation-error{cursor:pointer;text-decoration:underline;color:#d4351c}\n"] }]
|
|
811
811
|
}], () => [{ type: i1.ActivatedRoute }, { type: i2.CaseEditDataService }, { type: i3.CaseFlagStateService }, { type: i4.RpxTranslationService }, { type: i1.Router }, { type: i5.LinkedCasesService }, { type: i6.MultipageComponentStateService }], null); })();
|
|
812
812
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteCaseFlagFieldComponent, { className: "WriteCaseFlagFieldComponent", filePath: "lib/shared/components/palette/case-flag/write-case-flag-field.component.ts", lineNumber: 22 }); })();
|
|
813
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFHN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDeEksT0FBTyxFQUFFLGtCQUFrQixFQUFF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LENBQUMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDO0lBQzdILENBQUM7cUZBdnBCVSwyQkFBMkI7NkRBQTNCLDJCQUEyQjtZQ2dEeEMsQUF0REEsQUFkQSw0RUFDa0QsK0RBYXVDLCtEQXNERDs7WUFwRWxGLG1EQUE4QjtZQWM5QixjQUFzQztZQUF0QywyREFBc0M7WUFzRHRDLGNBQXFDO1lBQXJDLDBEQUFxQzs7O2lGRGhEOUIsMkJBQTJCO2NBTHZDLFNBQVM7MkJBQ0UsMkJBQTJCOztrRkFJMUIsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ3JweC14dWktdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYXNlRWRpdERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9ucy9jYXNlLWVkaXQtZGF0YS9jYXNlLWVkaXQtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENhc2VGaWVsZCwgRXJyb3JNZXNzYWdlLCBKb3VybmV5IH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZsYWdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2UtZmxhZyc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcyc7XG5pbXBvcnQgeyBDYXNlRmxhZ1N0YXRlLCBGbGFnRGV0YWlsLCBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoLCBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIH0gZnJvbSAnLi9kb21haW4nO1xuaW1wb3J0IHsgTXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFdyaXRlSm91cm5leUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvYWJzdHJhY3QtZmllbGQtd3JpdGUtam91cm5leS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYXNlLWVkaXRvci9zZXJ2aWNlcy9jYXNlLWZsYWctc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLCBDYXNlRmxhZ0Vycm9yTWVzc2FnZSwgQ2FzZUZsYWdGaWVsZFN0YXRlLCBDYXNlRmxhZ0Zvcm1GaWVsZHMsIENhc2VGbGFnU3RhdHVzIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBMaW5rZWRDYXNlc1NlcnZpY2UgfSBmcm9tICcuLi9saW5rZWQtY2FzZXMvc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2Qtd3JpdGUtY2FzZS1mbGFnLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFdyaXRlQ2FzZUZsYWdGaWVsZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmllbGRXcml0ZUpvdXJuZXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgSm91cm5leSB7XG4gIC8vcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgZmllbGRTdGF0ZTogbnVtYmVyO1xuICBwdWJsaWMgY2FzZUZsYWdGaWVsZFN0YXRlID0gQ2FzZUZsYWdGaWVsZFN0YXRlO1xuICBwdWJsaWMgZXJyb3JNZXNzYWdlczogRXJyb3JNZXNzYWdlW10gPSBbXTtcbiAgcHVibGljIGZsYWdzRGF0YTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRGbGFnOiBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoO1xuICBwdWJsaWMgY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHVibGljIGZsYWdDb21tZW50c09wdGlvbmFsID0gZmFsc2U7XG4gIHB1YmxpYyBqdXJpc2RpY3Rpb246IHN0cmluZztcbiAgcHVibGljIGNhc2VUeXBlSWQ6IHN0cmluZztcbiAgcHVibGljIGhtY3RzU2VydmljZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlOiBib29sZWFuO1xuICBwdWJsaWMgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsOiBib29sZWFuO1xuICBwdWJsaWMgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkOiBib29sZWFuO1xuICBwdWJsaWMgY2FzZVRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBjYXNlVGl0bGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBzdHJpbmc7XG4gIHB1YmxpYyBkZXRlcm1pbmVkTG9jYXRpb246IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGg7XG4gIHByaXZhdGUgYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgcHVibGljIG5hdmlnYXRlZFRvID0gZmFsc2U7XG4gIC8vIENvZGUgZm9yIFwiT3RoZXJcIiBmbGFnIHR5cGUgYXMgZGVmaW5lZCBpbiBSZWZlcmVuY2UgRGF0YVxuICBwcml2YXRlIHJlYWRvbmx5IG90aGVyRmxhZ1R5cGVDb2RlID0gJ09UMDAwMSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRNYW5hZ2VDYXNlTG9jYXRpb24gPSAnc2VsZWN0ZWRNYW5hZ2VDYXNlTG9jYXRpb24nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FzZU5hbWVNaXNzaW5nID0gJ0Nhc2UgbmFtZSBtaXNzaW5nJztcbiAgZmxhZ1R5cGVTdWJKb3VybmV5SW5kZXg6IGFueTtcblxuICBwdWJsaWMgZ2V0IGZsYWdUeXBlKCk6IEZsYWdUeXBlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlLmZsYWdUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZEZsYWdzTG9jYXRpb24oKTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZS5zZWxlY3RlZExvY2F0aW9uO1xuICB9XG5cbiAgcHVibGljIHNldCBzZWxlY3RlZEZsYWdzTG9jYXRpb24oc2VsZWN0ZWRMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cCkge1xuICAgICAgdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5zZWxlY3RlZExvY2F0aW9uID0gc2VsZWN0ZWRMb2NhdGlvbjtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VFZGl0RGF0YVNlcnZpY2U6IENhc2VFZGl0RGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRmxhZ1N0YXRlU2VydmljZTogQ2FzZUZsYWdTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBycHhUcmFuc2xhdGlvblNlcnZpY2U6IFJweFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlua2VkQ2FzZXNTZXJ2aWNlOiBMaW5rZWRDYXNlc1NlcnZpY2UsXG4gICAgbXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlOiBNdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIobXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLmhhbmRsZUJhY2tCdXR0b24gPSB0aGlzLmhhbmRsZUJhY2tCdXR0b24uYmluZCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5yZXNldExpbmtlZENhc2VEYXRhKCk7XG4gICAgY29uc3QgdHJpZ1VybCA9IGxvY2F0aW9uLmhyZWY7XG4gICAgdGhpcy5hZGRTdGF0ZShudWxsLCB0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKS5zcGxpY2UoMCwgdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJykuaW5kZXhPZigndHJpZ2dlcicpKS5qb2luKCcvJykpO1xuICAgIHRoaXMuYWRkU3RhdGUoMCwgdHJpZ1VybCk7XG4gICAgLy8gSWYgaXQgaXMgc3RhcnQgb2YgdGhlIGpvdXJuZXkgb3IgbmF2aWdhdGlvbiBmcm9tIGNoZWNrIHlvdXIgYW5zd2VycyBwYWdlIHRoZW4gZmllbGRTdGF0ZVRvTmF2aWdhdGUgcHJvcGVydHlcbiAgICAvLyBpbiBjYXNlIGZsYWcgc3RhdGUgc2VydmljZSB3aWxsIGNvbnRhaW4gdGhlIGZpZWxkIHN0YXRlIHRvIG5hdmlnYXRlIGJhc2VkIG9uIGNyZWF0ZSBvciBtYW5hZ2Ugam91cm5leVxuICAgIHRoaXMuZmllbGRTdGF0ZSA9IHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZmllbGRTdGF0ZVRvTmF2aWdhdGU7XG4gICAgaWYgKHRoaXMuZmllbGRTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcztcbiAgICAgIC8vIENsZWFyIHRoZSBmb3JtIGdyb3VwLCBmaWVsZCBzdGF0ZSB0byBuYXZpZ2F0ZSBhbmQgc2V0IHRoZSBwYWdlIGxvY2F0aW9uXG4gICAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLnJlc2V0Q2FjaGUoYC4uLyR7cGFyYW1zWydlaWQnXX0vJHtwYXJhbXNbJ3BhZ2UnXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uYXZpZ2F0ZWRUbyA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmVhc3NpZ24gdGhlIGZvcm0gZ3JvdXAgZnJvbSB0aGUgY2FzZSBmbGFnIHN0YXRlIHNlcnZpY2VcbiAgICB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5mb3JtR3JvdXA7XG4gICAgLy8gQ2xlYXIgZm9ybSB2YWxpZGF0aW9uIGVycm9ycyBhcyBhIG5ldyBwYWdlIHdpbGwgYmUgcmVuZGVyZWQgYmFzZWQgb24gZmllbGQgc3RhdGVcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2xlYXJGb3JtVmFsaWRhdGlvbkVycm9ycygpO1xuICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBGbGFnTGF1bmNoZXIgY29udHJvbCBpbiBwYXJlbnQgYW5kIHJlbW92ZSBpdCAtIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGVuc3VyZSBpdHMgaW52YWxpZGl0eVxuICAgIC8vIGlzIHNldCBjb3JyZWN0bHkgYXQgdGhlIHN0YXJ0LCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVsb2FkZWQgYW5kIHRoZSBjb250cm9sIGlzIHJlLXJlZ2lzdGVyZWQuIE90aGVyd2lzZSwgdGhlXG4gICAgLy8gdmFsaWRhdG9yIHN0YXRlIGdldHMgY2FycmllZCBvdmVyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwICYmIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLmNhc2VGaWVsZC5pZCkpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnJlbW92ZUNvbnRyb2wodGhpcy5jYXNlRmllbGQuaWQpO1xuICAgIH1cbiAgICAvLyBGcm9tIHRoaXMgcG9pbnQsIHRoaXMuZm9ybUdyb3VwIHJlZmVycyB0byB0aGUgRm9ybUdyb3VwIGZvciB0aGUgRmxhZ0xhdW5jaGVyIGZpZWxkLCBub3QgdGhlIHBhcmVudCBGb3JtR3JvdXBcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMucmVnaXN0ZXJDb250cm9sKG5ldyBGb3JtR3JvdXAoe30sIHtcbiAgICAgIHZhbGlkYXRvcnM6IChfOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gYW4gZXJyb3IgdG8gbWFyayB0aGUgRm9ybUdyb3VwIGFzIGludmFsaWQgaWYgbm90IGFsbCBDYXNlIEZsYWcgc3RhZ2VzIGhhdmUgYmVlbiBjb21wbGV0ZWRcbiAgICAgICAgICByZXR1cm4geyBub3RBbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZDogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pLCB0cnVlKSBhcyBGb3JtR3JvdXA7XG5cbiAgICAvLyBHZXQgdGhlIGNhc2UgdHlwZSBJRCBmcm9tIHRoZSBDYXNlVmlldyBvYmplY3QgaW4gdGhlIHNuYXBzaG90IGRhdGEgKHJlcXVpcmVkIGZvciByZXRyaWV2aW5nIHRoZSBhdmFpbGFibGUgZmxhZ1xuICAgIC8vIHR5cGVzIGZvciBhIGNhc2UpXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlICYmIHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLmNhc2VfdHlwZSkge1xuICAgICAgdGhpcy5jYXNlVHlwZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlLmlkO1xuICAgICAgLy8gR2V0IHRoZSBqdXJpc2RpY3Rpb24gKHJlcXVpcmVkIGZvciByZXRyaWV2aW5nIHRoZSBhdmFpbGFibGUgZmxhZyB0eXBlcyBpZiB1bmFibGUgdG8gZGV0ZXJtaW5lIHVzaW5nIGNhc2UgdHlwZSBJRClcbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuanVyaXNkaWN0aW9uKSB7XG4gICAgICAgIHRoaXMuanVyaXNkaWN0aW9uID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlLmp1cmlzZGljdGlvbi5pZDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRXh0cmFjdCBhbGwgZmxhZ3MtcmVsYXRlZCBkYXRhIGZyb20gdGhlIENhc2VFdmVudFRyaWdnZXIgb2JqZWN0IGluIHRoZSBzbmFwc2hvdCBkYXRhXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIpIHtcbiAgICAgIC8vIEdldCB0aGUgSE1DVFNTZXJ2aWNlSWQgZnJvbSBzdXBwbGVtZW50YXJ5IGRhdGEsIGlmIGl0IGV4aXN0cyAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnIHR5cGVzIGluXG4gICAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2UsIG9ubHkgZmFsbGluZyBiYWNrIG9uIGNhc2UgdHlwZSBJRCBvciBqdXJpc2RpY3Rpb24gaWYgaXQncyBub3QgcHJlc2VudClcbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YVxuICAgICAgICAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YS5ITUNUU1NlcnZpY2VJZCkge1xuICAgICAgICB0aGlzLmhtY3RzU2VydmljZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5zdXBwbGVtZW50YXJ5X2RhdGEuSE1DVFNTZXJ2aWNlSWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKSB7XG4gICAgICAgIC8vIHRoZXJlIGlzIGFuIGVkZ2UgY2FzZSBpbiB0aGUgbmF2aWdhdGlvbiB3aGVuIGdvaW5nIGJhY2ssIHNvbWV0aW1lcyB0aGUgY2FzZV9maWxlZHMgd2lsbCBsb3NlIHZhbHVlcyBpbiB0aGUgdmFsdWVzIHdoaWNoIGNhdXNlcyB0aGUgZmxvdyB0byBicmVhayBiZWZvcmUgQ1lBXG4gICAgICAgIC8vIGJlbG93IGZ1bmNpdG9uIGVuc3VyZXMgYWxsIGRhdGEgaXMgY29ycmVjdGx5IHNldC5cbiAgICAgICAgY29uc3QgZmxhZ0RhdGEgPSB0aGlzLnZhbGlkYXRlQ2FzZUZpZWxkcyh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKTtcbiAgICAgICAgdGhpcy5mbGFnc0RhdGEgPSAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyBhcyBDYXNlRmllbGRbXSlcbiAgICAgICAgICAucmVkdWNlKChmbGFnczogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdLCBjYXNlRmllbGQ6IENhc2VGaWVsZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkc1V0aWxzLmV4dHJhY3RGbGFnc0RhdGFGcm9tQ2FzZUZpZWxkKGZsYWdzLCBjYXNlRmllbGQsIGNhc2VGaWVsZC5pZCwgY2FzZUZpZWxkKTtcbiAgICAgICAgICB9LCBbXSBhcyBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW10pO1xuXG4gICAgICAgIC8vIFNldCBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciAodG8gYmUgcGFzc2VkIGFzIGFuIGlucHV0IHRvIE1hbmFnZUNhc2VGbGFnc0NvbXBvbmVudCBmb3Igc2V0dGluZyBjb3JyZWN0IHRpdGxlKVxuICAgICAgICB0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID1cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyKGZsYWdEYXRhIGFzIENhc2VGaWVsZFtdKTtcblxuICAgICAgICAvLyBTZXQgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyIGlzIFwidXBkYXRlXCJcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlID0gdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSh0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyKTtcblxuICAgICAgICAvLyBTZXQgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyIGlzIFwiZXh0ZXJuYWxcIlxuICAgICAgICB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCA9IHRoaXMuc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCh0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyKTtcblxuICAgICAgICAvLyBTZXQgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyIGlzIENhc2UgRmxhZ3MgdjIuMSBlbmFibGVkXG4gICAgICAgIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkID0gdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgICAgIC8vIFNldCBzdGFydGluZyBmaWVsZCBzdGF0ZSBpZiBmaWVsZFN0YXRlIG5vdCB0aGUgcmlnaHQgdmFsdWVcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPSB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgPyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHUyA6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGNhc2UgdGl0bGUsIHRvIGJlIHVzZWQgYnkgY2hpbGQgY29tcG9uZW50c1xuICAgICAgICB0aGlzLmNhc2VUaXRsZVN1YnNjcmlwdGlvbiA9IHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jYXNlVGl0bGUkLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogdGl0bGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYXNlVGl0bGUgPSB0aXRsZT8ubGVuZ3RoID4gMCA/IHRpdGxlIDogdGhpcy5jYXNlTmFtZU1pc3Npbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDU0ZELTE2LlxuICAgIC8vIFNldHVwIHRoZSBwYWdlIG51bWJlciB0byBpbml0aWFsbHkgYmUgdGhlIHNhbWUgdmFsdWUgYXMgXG4gICAgLy8gdGhlIHN0YXJ0IHBhZ2UgbnVtYmVyLiBQcm92aWRlZCB0aGF0IHNvbWUgc3RhdGUgZXhpc3RzIHdpdGhpbiBcbiAgICAvLyB0aGUgcGFnZSBzdGF0ZSBzZXJ2aWNlLCB1c2UgdGhhdCBpbnN0YWVhZC5cbiAgICAvL1xuICAgIC8vIElmIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgaXMgdHJ1ZSwgdGhlbiB0aGUgc3RhcnRpbmcgcGFnZSBtdXN0IGJlIFxuICAgIC8vIHRoZSB2YWx1ZSBvZiA0LiBPdGhlcndpc2UsIGl0J3MgMC4gSG93ZXZlciwgd2UncmUgdXNpbmcgYW4gZW51bSB0byBzaW1wbGlmeVxuICAgIC8vIHRoaXMgcHJvY2Vzcy5cbiAgICAvL1xuICAgIC8vIEl0IG1pZ2h0IGhlbHAgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHRlbXBsYXRlIGZpbGUuIFxuICAgIGlmICh0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUpIHtcbiAgICAgIHRoaXMuam91cm5leVN0YXJ0UGFnZU51bWJlciA9IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTO1xuICAgICAgdGhpcy5qb3VybmV5RW5kUGFnZU51bWJlciA9IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURV9XRUxTSF9UUkFOU0xBVElPTjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5qb3VybmV5U3RhcnRQYWdlTnVtYmVyID0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT047XG4gICAgICB0aGlzLmpvdXJuZXlFbmRQYWdlTnVtYmVyID0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTO1xuICAgIH1cblxuICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIHNldCB0aGUgc3RhcnQgcGFnZSBudW1iZXIsIGxldCdzIHNldCB0aGUgY3VycmVudCBwYWdlIG51bWJlci4gXG4gICAgdGhpcy5qb3VybmV5UGFnZU51bWJlciA9IHRoaXMuam91cm5leVN0YXJ0UGFnZU51bWJlcjtcblxuICAgIC8vIElmIHdlJ3ZlIG5hdmlnYXRlZCB0byB0aGlzIHBhZ2UsIHRoZW4gd2Uga25vdyBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIHNldCB0aGUgXG4gICAgLy8gam91cm5leSBwYWdlIG51bWJlciB0byB0aGUgZmllbGQgc3RhdGUuIFxuICAgIGlmICh0aGlzLm5hdmlnYXRlZFRvKSB7XG4gICAgICBjb25zdCBwYWdlTm8gPSB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUyA/IHRoaXMuZmllbGRTdGF0ZSAtMSA6IHRoaXMuZmllbGRTdGF0ZTtcbiAgICAgIHRoaXMuam91cm5leVBhZ2VOdW1iZXIgPSBwYWdlTm87XG4gICAgICB0aGlzLmpvdXJuZXlQcmV2aW91c1BhZ2VOdW1iZXIgPSBwYWdlTm8rMTtcbiAgICB9XG5cbiAgICAvLyBQcm92aWRlZCB3ZSBoYXZlIHNvbWUgc3RvcmVkIHN0YXRlLCBpLmUuIHdoZW4gZ29pbmcgYmFja3dhcmRzLCB3ZSB3YW50IFxuICAgIC8vIHRvIGdldCB0aGUgbGFzdCB2aXNpdGVkIHBhZ2UsIGV0Yy4gXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5nZXRKb3VybmV5U3RhdGUodGhpcyk7XG5cbiAgICBpZiAoc3RhdGUpIHtcbiAgICAgIGNvbnN0IHsgam91cm5leVBhZ2VOdW1iZXIsIGpvdXJuZXlTdGFydFBhZ2VOdW1iZXIsIGpvdXJuZXlFbmRQYWdlTnVtYmVyIH0gPSBzdGF0ZTtcblxuICAgICAgdGhpcy5qb3VybmV5UGFnZU51bWJlciA9IGpvdXJuZXlQYWdlTnVtYmVyO1xuICAgICAgdGhpcy5qb3VybmV5U3RhcnRQYWdlTnVtYmVyID0gam91cm5leVN0YXJ0UGFnZU51bWJlcjtcbiAgICAgIHRoaXMuam91cm5leUVuZFBhZ2VOdW1iZXIgPSBqb3VybmV5RW5kUGFnZU51bWJlcjtcbiAgICB9XG5cbiAgICB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5pc0F0U3RhcnQgPSB0aGlzLmpvdXJuZXlQYWdlTnVtYmVyID09PSB0aGlzLmpvdXJuZXlTdGFydFBhZ2VOdW1iZXI7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgdGhpcy5oYW5kbGVCYWNrQnV0dG9uKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVCYWNrQnV0dG9uKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodGhpcy5maWVsZFN0YXRlID09PSAwKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJykuc3BsaWNlKDAsIHRoaXMucm91dGVyLnVybC5zcGxpdCgnLycpLmluZGV4T2YoJ3RyaWdnZXInKSkuam9pbignLycpXSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkU3RhdGUgPT09IDEgJiYgdGhpcy5mbGFnVHlwZVN1YkpvdXJuZXlJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGRTdGF0ZSAhPT0gMSkge1xuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkU3RhdGUoZGF0YSwgdXJsPyk6IHZvaWQge1xuICAgIGhpc3RvcnkucHVzaFN0YXRlKGRhdGEsICcnLCB1cmwpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZsYWdUeXBlU3ViSm91cm5leShldmVudCk6IHZvaWQge1xuICAgIHRoaXMuZmxhZ1R5cGVTdWJKb3VybmV5SW5kZXggPSBldmVudDtcbiAgfVxuXG4gIHZhbGlkYXRlQ2FzZUZpZWxkcyhjYXNlRmllbGRzKSB7XG4gICAgY2FzZUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmZvcm1hdHRlZF92YWx1ZSkge1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZC5mb3JtYXR0ZWRfdmFsdWUpLmZvckVhY2goKHZhbHVlS2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdHRlZF92YWx1ZVt2YWx1ZUtleV0gIT09IGZpZWxkLnZhbHVlW3ZhbHVlS2V5XSkge1xuICAgICAgICAgICAgZmllbGQudmFsdWVbdmFsdWVLZXldID0gZmllbGQuZm9ybWF0dGVkX3ZhbHVlW3ZhbHVlS2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjYXNlRmllbGRzO1xuICB9XG5cbiAgcHVibGljIG9uUGFnZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5pc0F0U3RhcnQgPSB0aGlzLmZpZWxkU3RhdGUgPT09IHRoaXMuY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT047XG4gICAgdGhpcy5hZGRTdGF0ZSh0aGlzLmZpZWxkU3RhdGUpO1xuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlKGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFIHx8XG4gICAgICBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfRVhURVJOQUwgfHxcbiAgICAgIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV8yX1BPSU5UXzE7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbChkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLkNSRUFURV9FWFRFUk5BTCB8fFxuICAgICAgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFX0VYVEVSTkFMO1xuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5DUkVBVEVfMl9QT0lOVF8xIHx8XG4gICAgICBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfMl9QT0lOVF8xO1xuICB9XG5cbiAgcHVibGljIG9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoY2FzZUZsYWdTdGF0ZTogQ2FzZUZsYWdTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jbGVhckZvcm1WYWxpZGF0aW9uRXJyb3JzKCk7XG5cbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBjYXNlRmxhZ1N0YXRlLmVycm9yTWVzc2FnZXM7XG4gICAgdGhpcy5zZWxlY3RlZEZsYWcgPSBjYXNlRmxhZ1N0YXRlLnNlbGVjdGVkRmxhZztcblxuICAgIC8vIFZhbGlkYXRpb24gc3VjY2VlZGVkOyBwcm9jZWVkIHRvIG5leHQgc3RhdGUgb3IgZmluYWwgcmV2aWV3IHN0YWdlIChcIkNoZWNrIHlvdXIgYW5zd2Vyc1wiKVxuICAgIGlmICh0aGlzLmVycm9yTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5jYW5Nb3ZlVG9GaW5hbFJldmlld1N0YWdlKGNhc2VGbGFnU3RhdGUpKSB7XG4gICAgICAgIHRoaXMubW92ZVRvRmluYWxSZXZpZXdTdGFnZSgpO1xuICAgICAgICAvLyBEb24ndCBtb3ZlIHRvIG5leHQgc3RhdGUgaWYgY3VycmVudCBzdGF0ZSBpcyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFIGFuZCB0aGUgZmxhZyB0eXBlIGlzIGEgcGFyZW50IC0gdGhpc1xuICAgICAgICAvLyBtZWFucyB0aGUgdXNlciBuZWVkcyB0byBzZWxlY3QgZnJvbSB0aGUgbmV4dCBzZXQgb2YgZmxhZyB0eXBlcyBiZWZvcmUgdGhleSBjYW4gbW92ZSBvblxuICAgICAgfSBlbHNlIGlmICghY2FzZUZsYWdTdGF0ZS5pc1BhcmVudEZsYWdUeXBlKSB7XG4gICAgICAgIC8vIFByb2NlZWQgdG8gbmV4dCBzdGF0ZVxuICAgICAgICB0aGlzLnByb2NlZWRUb05leHRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYW5Nb3ZlVG9GaW5hbFJldmlld1N0YWdlKGNhc2VGbGFnU3RhdGU6IENhc2VGbGFnU3RhdGUpOiBib29sZWFuIHtcbiAgICAvLyBJZiB0aGUgam91cm5leSBpcyByZXF1ZXN0IHN1cHBvcnQgb3IgbWFuYWdlIHN1cHBvcnRcbiAgICAvLyBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgaXMgZWl0aGVyIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTIG9yIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURVxuICAgIC8vIHRoZW4gbW92ZSB0byBmaW5hbCByZXZpZXcgc3RhZ2VcbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwpIHtcbiAgICAgIHJldHVybiBjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTIHx8XG4gICAgICAgIGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBvbmUgb2Y6XG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19TVEFUVVMgQU5EIENhc2UgRmxhZ3MgdjIuMSBpcyBlbmFibGVkXG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyBBTkQgQ2FzZSBGbGFncyB2Mi4xIGlzIG5vdCBlbmFibGVkXG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEUgYW5kIFdlbHNoIHRyYW5zbGF0aW9uIGNoZWNrYm94IGlzIG5vdCBzZWxlY3RlZFxuICAgIC8vICogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OXG4gICAgLy8gdGhlbiBtb3ZlIHRvIGZpbmFsIHJldmlldyBzdGFnZVxuICAgIHJldHVybiAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PVxuICAgICAgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTICYmIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKSB8fFxuICAgICAgKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT1cbiAgICAgICAgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFMgJiYgIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKSB8fFxuICAgICAgKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFICYmXG4gICAgICAgICF0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuSVNfV0VMU0hfVFJBTlNMQVRJT05fTkVFREVEKT8udmFsdWUpIHx8XG4gICAgICBjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURV9XRUxTSF9UUkFOU0xBVElPTjtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZWVkVG9OZXh0U3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQXRGaW5hbFN0YXRlKCkpIHtcbiAgICAgIHRoaXMuam91cm5leVByZXZpb3VzUGFnZU51bWJlciA9IHRoaXMuZmllbGRTdGF0ZTtcbiAgICAgIC8vIFNraXAgdGhlIFwibGFuZ3VhZ2UgaW50ZXJwcmV0ZXJcIiBzdGF0ZSBpZiBjdXJyZW50IHN0YXRlIGlzIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUgYW5kIHRoZSBmbGFnIHR5cGUgZG9lc24ndFxuICAgICAgLy8gaGF2ZSBhIFwibGlzdCBvZiB2YWx1ZXNcIiAtIGN1cnJlbnRseSwgdGhpcyBpcyBwcmVzZW50IG9ubHkgZm9yIHRob3NlIGZsYWcgdHlwZXMgdGhhdCByZXF1aXJlIGxhbmd1YWdlIGludGVycHJldGVyXG4gICAgICAvLyBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUgJiYgIXRoaXMuZmxhZ1R5cGU/Lmxpc3RPZlZhbHVlcykge1xuICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSsrO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5leHRQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEZsYWdzQ2FzZUZpZWxkVmFsdWUoKTogdm9pZCB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzd2l0Y2gtZGVmYXVsdFxuICAgIHN3aXRjaCAodGhpcy5maWVsZFN0YXRlKSB7XG4gICAgICBjYXNlIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUzpcbiAgICAgICAgdGhpcy5hZGRGbGFnVG9Db2xsZWN0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUzpcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsIHx8ICF0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMuYWRkRmxhZ1RvQ29sbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1hbmFnZUZsYWdGaW5hbFN0YXRlOlxuICAgICAgICB0aGlzLnVwZGF0ZUZsYWdJbkNvbGxlY3Rpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByZXZpb3VzUGFnZSgpOiB2b2lkIHtcbiAgICAvLyBpZiB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20gdGhlIHBhZ2UsIHdlIHNob3VsZCBzZXQgdGhlIGVycm9yIG1lc3NhZ2VzIHRvIGVtcHR5IHNvIHRoZSBtZXNzYWdlIGRpc3NhcGVhcnNcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLmpvdXJuZXlQcmV2aW91c1BhZ2VOdW1iZXIgPSB0aGlzLmZpZWxkU3RhdGU7XG4gICAgaWYgKHRoaXMuaGFzUHJldmlvdXMoKSAmJiB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTICYmICF0aGlzLmZsYWdUeXBlPy5saXN0T2ZWYWx1ZXMpIHtcbiAgICAgIHRoaXMuZmllbGRTdGF0ZSA9IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmhhc1ByZXZpb3VzKCkpIHtcbiAgICAgIHRoaXMuZmllbGRTdGF0ZS0tO1xuICAgIH1cbiAgICBzdXBlci5wcmV2aW91c1BhZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRGbGFnVG9Db2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBubyBtb3JlIHRoYW4gb25lIG5ldyBmbGFnIGlzIGJlaW5nIGFkZGVkIGF0IGEgdGltZSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggZWFjaCBGbGFncyBjYXNlIGZpZWxkIGFuZCByZW1vdmluZ1xuICAgIC8vIGFueSBwcmV2aW91cyBlbnRyeSBmcm9tIHRoZSBkZXRhaWxzIGFycmF5IHdoZXJlIHRoYXQgZW50cnkgaGFzIG5vIGlkIChoZW5jZSBpdCBpcyBuZXcgLSBhbmQgdGhlcmUgc2hvdWxkIGJlIG9ubHlcbiAgICAvLyBvbmUgc3VjaCBlbnRyeSkuIChUaGlzIHNjZW5hcmlvIG9jY3VycyBpZiB0aGUgdXNlciByZXBlYXRzIHRoZSBDYXNlIEZsYWcgY3JlYXRpb24gam91cm5leSBieSB1c2luZyB0aGUgXCJDaGFuZ2VcIlxuICAgIC8vIGxpbmsgYW5kIHNlbGVjdHMgZWl0aGVyIHRoZSBzYW1lIGZsYWcgbG9jYXRpb24gYXMgYmVmb3JlIG9yIGEgZGlmZmVyZW50IG9uZS4pXG4gICAgdGhpcy5mbGFnc0RhdGEuZm9yRWFjaChpbnN0YW5jZSA9PiB7XG4gICAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZvciBlYWNoIEZsYWdzIGNhc2UgZmllbGQgdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIHZhbHVlIHRvIHJlbW92ZSB0aGUgbmV3IHZhbHVlIGZyb21cbiAgICAgIGxldCB2YWx1ZSA9IGluc3RhbmNlLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgICBjb25zdCBwYXRoVG9WYWx1ZSA9IGluc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgICAgaWYgKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGhUb1ZhbHVlLnNsaWNlKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IHZhbHVlID0gdmFsdWVbcGFydF0pO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlPy5kZXRhaWxzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZOZXdGbGFnRGV0YWlsID0gdmFsdWUuZGV0YWlscy5maW5kSW5kZXgoZWxlbWVudCA9PiAhZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnaWQnKSk7XG4gICAgICAgIGlmIChpbmRleE9mTmV3RmxhZ0RldGFpbCA+IC0xKSB7XG4gICAgICAgICAgdmFsdWUuZGV0YWlscy5zcGxpY2UoaW5kZXhPZk5ld0ZsYWdEZXRhaWwsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb3JtVmFsdWVzID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWU7XG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGxvY2F0aW9uIC0gaW50ZXJuYWwgb3IgZXh0ZXJuYWwgLSBmb3IgdGhlIG5ldyBmbGFnLiBJZiByZXR1cm5lZCBhcyB1bmRlZmluZWQsIHRoaXNcbiAgICAvLyBpbmRpY2F0ZXMgYSBjb25maWd1cmF0aW9uIGVycm9yIHdpdGggdGhlIGV4dGVybmFsIGBGbGFnc2Agb2JqZWN0IGluc3RhbmNlXG4gICAgdGhpcy5kZXRlcm1pbmVkTG9jYXRpb24gPVxuICAgICAgdGhpcy5kZXRlcm1pbmVMb2NhdGlvbkZvckZsYWcoIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsLCB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbiwgZm9ybVZhbHVlcyk7XG4gICAgLy8gRG8gbm90IG11dGF0ZSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbjsgaWYgdGhpcy5zZWxlY3RlZEZsYWdzTG9jYXRpb24gYmVjb21lcyB1bmRlZmluZWQsXG4gICAgLy8gZGV0ZXJtaW5lTG9jYXRpb25Gb3JGbGFnKCkgd2lsbCBubyBsb25nZXIgZG8gYW55dGhpbmcgd2hlbiBjYWxsZWQgd2l0aCBpdCAtIGFuZCB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSB3aWxsXG4gICAgLy8gbm90IGJlIHJlZGlzcGxheWVkIGlmIHRoZSB1c2VyIGNsaWNrcyBcIk5leHRcIiBhZ2FpbiBvbiB0aGUgXCJBZGQgY29tbWVudHNcIiBwYWdlLCBhZnRlciB0aGUgZXJyb3IgaXMgZmlyc3Qgc2hvd25cblxuICAgIGlmICh0aGlzLmRldGVybWluZWRMb2NhdGlvbikge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZGV0ZXJtaW5lZExvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgICAgY29uc3QgZmxhZ0RhdGFSZWYgPSB0aGlzLmZsYWdzRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5wYXRoVG9GbGFnc0Zvcm1Hcm91cCA9PT0gcGF0aCk7XG4gICAgICBsZXQgZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IGZsYWdEYXRhUmVmLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIHZhbHVlIHRvIGFwcGx5IGNoYW5nZXMgdG9cbiAgICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICAgIGlmIChwYXRoLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGguc2xpY2UocGF0aC5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ3NDYXNlRmllbGRWYWx1ZVtwYXJ0XSk7XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgQ2FzZUZpZWxkIGZvciB0aGUgc2VsZWN0ZWQgZmxhZ3MgbG9jYXRpb24gaGFzIG5vIHZhbHVlLCBzZXQgaXQgdG8gYW4gZW1wdHkgb2JqZWN0IHNvIGl0IGNhbiBiZSBwb3B1bGF0ZWRcbiAgICAgIC8vIHdpdGggZmxhZyBkZXRhaWxzXG4gICAgICBpZiAoIWZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgICAgZmxhZ0RhdGFSZWYuY2FzZUZpZWxkLnZhbHVlID0ge307XG4gICAgICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnRGF0YVJlZi5jYXNlRmllbGQudmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBDcmVhdGUgYSBkZXRhaWxzIGFycmF5IGlmIG9uZSBkb2VzIG5vdCBleGlzdFxuICAgICAgaWYgKCFmbGFnc0Nhc2VGaWVsZFZhbHVlLmhhc093blByb3BlcnR5KCdkZXRhaWxzJykpIHtcbiAgICAgICAgZmxhZ3NDYXNlRmllbGRWYWx1ZS5kZXRhaWxzID0gW107XG4gICAgICB9XG4gICAgICAvLyBQb3B1bGF0ZSBuZXcgRmxhZ0RldGFpbCBpbnN0YW5jZSBhbmQgYWRkIHRvIHRoZSBGbGFncyBkYXRhIHdpdGhpbiB0aGUgQ2FzZUZpZWxkIGluc3RhbmNlIG9mIHRoZSBzZWxlY3RlZCBmbGFnXG4gICAgICAvLyBsb2NhdGlvblxuICAgICAgaWYgKCFmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMpe1xuICAgICAgICBmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscy5wdXNoKHsgdmFsdWU6IHRoaXMucG9wdWxhdGVOZXdGbGFnRGV0YWlsSW5zdGFuY2UoKSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY29ycmVjdCBsb2NhdGlvbiAoaS5lLiBlaXRoZXIgdGhlIGludGVybmFsIG9yIGV4dGVybmFsIGluc3RhbmNlIG9mIGEgYEZsYWdzYCBvYmplY3QpIGZvciBhIG5ldyBmbGFnLFxuICAgKiBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZzpcbiAgICpcbiAgICogKiBXaGV0aGVyIHRoZSB1c2VyIGlzIGludGVybmFsIG9yIGV4dGVybmFsIChubyBlZmZlY3QgZm9yIGV4dGVybmFsIHVzZXJzIGJlY2F1c2UgdGhleSBjYW4gYWNjZXNzIG9ubHkgdGhlIGV4dGVybmFsXG4gICAqIGluc3RhbmNlKVxuICAgKiAqIFRoZSBleGlzdGVuY2Ugb2YgdHdvIGBGbGFnc2Agb2JqZWN0cyAtIG9uZSBpbnRlcm5hbCwgb25lIGV4dGVybmFsIC0gbGlua2VkIGJ5IHRoZSBzYW1lIGBncm91cElkYDtcbiAgICogKiBGb3IgZmxhZ3Mgb2YgdHlwZSBcIk90aGVyXCIsIHdoZXRoZXIgXCJvbmx5IHZpc2libGUgdG8gSE1DVFMgc3RhZmZcIiBoYXMgYmVlbiBzZWxlY3RlZCBvciBub3QgKFwiT3RoZXJcIiBkZWZhdWx0cyB0b1xuICAgKiBleHRlcm5hbGx5IHZpc2libGUpO1xuICAgKiAqIEZvciBhbGwgb3RoZXIgZmxhZyB0eXBlcywgdGhlIHZhbHVlIG9mIHRoZSBgZXh0ZXJuYWxseUF2YWlsYWJsZWAgYXR0cmlidXRlLlxuICAgKlxuICAgKiBJZiB0aGUgdXNlciBpcyBpbnRlcm5hbCB0aGVuIHRoZSBuZXcgZmxhZyBzaG91bGQgYmUgYXNzaWduZWQgdG8gdGhlIGV4dGVybmFsIGBGbGFnc2AgaW5zdGFuY2UgaWY6XG4gICAqICogU3VjaCBhbiBpbnN0YW5jZSBleGlzdHMsIEFORFxuICAgKiAqIFRoZSBmbGFnIHR5cGUgaXMgXCJPdGhlclwiIGFuZCBcIm9ubHkgdmlzaWJsZSB0byBITUNUUyBzdGFmZlwiIHdhcyBub3Qgc2VsZWN0ZWQsIE9SXG4gICAqICogVGhlIGZsYWcgdHlwZSBpcyBub3QgXCJPdGhlclwiIGFuZCBgZXh0ZXJuYWxseUF2YWlsYWJsZWAgaXMgYHRydWVgLlxuICAgKlxuICAgKiBAcGFyYW0gaXNJbnRlcm5hbFVzZXIgV2hldGhlciB0aGUgY3VycmVudCB1c2VyIGlzIGludGVybmFsIG9yIG5vdFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbG9jYXRpb24gZm9yIHRoZSBuZXcgZmxhZ1xuICAgKiBAcGFyYW0gZm9ybVZhbHVlcyBBbGwgdGhlIHZhbHVlcyBmcm9tIHRoZSBgY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBgXG4gICAqIEByZXR1cm5zIFRoZSBjb3JyZWN0bHkgZGV0ZXJtaW5lZCBsb2NhdGlvbjogZWl0aGVyIHRoZSBpbnRlcm5hbCBvciBleHRlcm5hbCBsb2NhdGlvbiAoaWYgb25lIGV4aXN0cykgd2hlcmUgYSBncm91cElkXG4gICAqIGlzIHByZXNlbnQ7IHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBvdGhlcndpc2UuICoqTm90ZToqKiBJZiB0aGUgZXh0ZXJuYWwgbG9jYXRpb24gaXMgcmV0dXJuZWQgYXMgdW5kZWZpbmVkLCB0aGlzXG4gICAqIGluZGljYXRlcyBhIGNvbmZpZ3VyYXRpb24gZXJyb3JcbiAgICovXG4gIHB1YmxpYyBkZXRlcm1pbmVMb2NhdGlvbkZvckZsYWcoaXNJbnRlcm5hbFVzZXI6IGJvb2xlYW4sIHNlbGVjdGVkRmxhZ3NMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCxcbiAgICBmb3JtVmFsdWVzOiBhbnkpOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIHtcbiAgICBpZiAoaXNJbnRlcm5hbFVzZXIgJiYgc2VsZWN0ZWRGbGFnc0xvY2F0aW9uPy5mbGFncz8uZ3JvdXBJZCkge1xuICAgICAgaWYgKChmb3JtVmFsdWVzPy5mbGFnVHlwZT8uZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgJiYgIWZvcm1WYWx1ZXM/LmZsYWdJc1Zpc2libGVJbnRlcm5hbGx5T25seSkgfHxcbiAgICAgICAgICAoZm9ybVZhbHVlcz8uZmxhZ1R5cGU/LmZsYWdDb2RlICE9PSB0aGlzLm90aGVyRmxhZ1R5cGVDb2RlICYmIGZvcm1WYWx1ZXM/LmZsYWdUeXBlPy5leHRlcm5hbGx5QXZhaWxhYmxlKSkge1xuICAgICAgICAvLyBJZiBuZWNlc3NhcnksIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZ3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgZ3JvdXBJZCBhbmQgZXh0ZXJuYWwgdmlzaWJpbGl0eSAoc2hvdWxkIGJlXG4gICAgICAgIC8vIG9ubHkgb25lIHVubGVzcyBtaXNjb25maWd1cmVkKVxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5mbGFncy52aXNpYmlsaXR5Py50b0xvd2VyQ2FzZSgpID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICAgPyBzZWxlY3RlZEZsYWdzTG9jYXRpb25cbiAgICAgICAgICA6IHRoaXMuZmxhZ3NEYXRhLmZpbHRlcihcbiAgICAgICAgICAgIChmKSA9PiBmLmZsYWdzPy5ncm91cElkID09PSBzZWxlY3RlZEZsYWdzTG9jYXRpb24uZmxhZ3MuZ3JvdXBJZCAmJlxuICAgICAgICAgICAgICAgIGYuZmxhZ3M/LnZpc2liaWxpdHk/LnRvTG93ZXJDYXNlKCkgPT09ICdleHRlcm5hbCcpPy5bMF07XG4gICAgICAgIC8vIElmIGxvY2F0aW9uIGlzIG5vdCB0cnV0aHksIHNldCBhbiBlcnJvciBtZXNzYWdlIGFuZCBtYWtlIGNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwIGludmFsaWQgdG8gcHJldmVudFxuICAgICAgICAvLyBuYXZpZ2F0aW9uIHRvIHRoZSBzdW1tYXJ5IHBhZ2UgKGJ5IG5vdCB0cmlnZ2VyaW5nIHRoZSBzdWJtaXQgZXZlbnQpXG4gICAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogQ2FzZUZsYWdFcnJvck1lc3NhZ2UuTk9fRVhURVJOQUxfRkxBR1NfQ09MTEVDVElPTlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuc2V0RXJyb3JzKHtcbiAgICAgICAgICAgIG5vRXh0ZXJuYWxDb2xsZWN0aW9uOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGZsYWdzIG9iamVjdCB3aXRoIHRoZSBzYW1lIGdyb3VwSWQgYW5kIGludGVybmFsIHZpc2liaWxpdHkgKHNob3VsZCBiZVxuICAgICAgICAvLyBvbmx5IG9uZSB1bmxlc3MgbWlzY29uZmlndXJlZCk7IGFzc3VtZWQgdG8gYmUgaW50ZXJuYWwgaWYgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBzZWxlY3RlZEZsYWdzTG9jYXRpb24uZmxhZ3MudmlzaWJpbGl0eT8udG9Mb3dlckNhc2UoKSAhPT0gJ2V4dGVybmFsJ1xuICAgICAgICAgID8gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uXG4gICAgICAgICAgOiB0aGlzLmZsYWdzRGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAoZikgPT4gZi5mbGFncz8uZ3JvdXBJZCA9PT0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLmZsYWdzLmdyb3VwSWQgJiZcbiAgICAgICAgICAgICAgZi5mbGFncz8udmlzaWJpbGl0eT8udG9Mb3dlckNhc2UoKSAhPT0gJ2V4dGVybmFsJyk/LlswXTtcbiAgICAgICAgICAvLyBJZiBsb2NhdGlvbiBpcyBub3QgdHJ1dGh5LCBzZXQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgbWFrZSBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cCBpbnZhbGlkIHRvIHByZXZlbnRcbiAgICAgICAgICAvLyBuYXZpZ2F0aW9uIHRvIHRoZSBzdW1tYXJ5IHBhZ2UgKGJ5IG5vdCB0cmlnZ2VyaW5nIHRoZSBzdWJtaXQgZXZlbnQpXG4gICAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogQ2FzZUZsYWdFcnJvck1lc3NhZ2UuTk9fSU5URVJOQUxfRkxBR1NfQ09MTEVDVElPTlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuc2V0RXJyb3JzKHtcbiAgICAgICAgICAgIG5vSW50ZXJuYWxDb2xsZWN0aW9uOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZsYWdJbkNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIG5vIG1vcmUgdGhhbiBvbmUgZmxhZyBpcyBiZWluZyB1cGRhdGVkIGF0IGEgdGltZSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggZWFjaCBGbGFncyBjYXNlIGZpZWxkIGFuZCByZXNldHRpbmdcbiAgICAvLyB0aGUgZGVzY3JpcHRpb24sIGNvbW1lbnRzLCBzdGF0dXMsIGFuZCBkYXRlL3RpbWUgbW9kaWZpZWQgKGlmIHByZXNlbnQpIGZvciBlYWNoIGVudHJ5IGluIHRoZSBkZXRhaWxzIGFycmF5LCB3aXRoXG4gICAgLy8gb3JpZ2luYWwgdmFsdWVzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZm9ybWF0dGVkX3ZhbHVlIHByb3BlcnR5LiAoVGhpcyBzY2VuYXJpbyBvY2N1cnMgaWYgdGhlIHVzZXIgcmVwZWF0cyB0aGVcbiAgICAvLyBNYW5hZ2UgQ2FzZSBGbGFnIGpvdXJuZXkgYnkgdXNpbmcgdGhlIFwiQ2hhbmdlXCIgbGluayBhbmQgc2VsZWN0cyBhIGRpZmZlcmVudCBmbGFnIHRvIHVwZGF0ZS4pXG4gICAgdGhpcy5mbGFnc0RhdGEuZm9yRWFjaChpbnN0YW5jZSA9PiB7XG4gICAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZvciBlYWNoIEZsYWdzIGNhc2UgZmllbGQgdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIHZhbHVlIGZvciB3aGljaCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZXNcbiAgICAgIGxldCB2YWx1ZSA9IGluc3RhbmNlLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSBpbnN0YW5jZS5jYXNlRmllbGQ/LmZvcm1hdHRlZF92YWx1ZTtcbiAgICAgIGNvbnN0IHBhdGhUb1ZhbHVlID0gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgICBpZiAocGF0aFRvVmFsdWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVbcGFydF07XG4gICAgICAgICAgaWYgKGZvcm1hdHRlZFZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QoZm9ybWF0dGVkVmFsdWUpKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlW3BhcnRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWU/LmRldGFpbHM/Lmxlbmd0aCA+IDAgJiYgZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZGV0YWlscy5mb3JFYWNoKGZsYWdEZXRhaWwgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRmxhZ0RldGFpbCA9IGZvcm1hdHRlZFZhbHVlLmRldGFpbHM/LmZpbmQoZGV0YWlsID0+IGRldGFpbC5pZCA9PT0gZmxhZ0RldGFpbC5pZCk7XG4gICAgICAgICAgaWYgKG9yaWdpbmFsRmxhZ0RldGFpbCkge1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5vdGhlckRlc2NyaXB0aW9uID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5vdGhlckRlc2NyaXB0aW9uIHx8IG51bGw7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLm90aGVyRGVzY3JpcHRpb25fY3kgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/Lm90aGVyRGVzY3JpcHRpb25fY3kgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/LmZsYWdDb21tZW50IHx8IG51bGw7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmZsYWdDb21tZW50X2N5ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5mbGFnQ29tbWVudF9jeSB8fCBudWxsO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5mbGFnVXBkYXRlQ29tbWVudCA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uZmxhZ1VwZGF0ZUNvbW1lbnQgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuc3RhdHVzID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXM7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmRhdGVUaW1lTW9kaWZpZWQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/LmRhdGVUaW1lTW9kaWZpZWQgfHwgbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEZsYWcpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRNYW5hZ2VDYXNlTG9jYXRpb24pLnZhbHVlIGFzIEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGg7XG4gICAgfVxuICAgIGxldCBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gdGhpcy5zZWxlY3RlZEZsYWcuY2FzZUZpZWxkPy52YWx1ZTtcbiAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byBhcHBseSBjaGFuZ2VzIHRvXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuc2VsZWN0ZWRGbGFnLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICBpZiAocGF0aC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICB9XG4gICAgaWYgKGZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgIGNvbnN0IGZsYWdEZXRhaWxUb1VwZGF0ZSA9IGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscz8uZmluZChcbiAgICAgICAgZGV0YWlsID0+IGRldGFpbC5pZCA9PT0gdGhpcy5zZWxlY3RlZEZsYWcuZmxhZ0RldGFpbERpc3BsYXk/LmZsYWdEZXRhaWw/LmlkKTtcbiAgICAgIGlmIChmbGFnRGV0YWlsVG9VcGRhdGUpIHtcbiAgICAgICAgLy8gQ2FjaGUgdGhlICpvcmlnaW5hbCogc3RhdHVzIG9mIHRoZSBmbGFnIGJlZm9yZSBpdCBpcyBtb2RpZmllZC4gVGhpcyBpcyBuZWVkZWQgaWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgZmxhZyBzdGF0dXNcbiAgICAgICAgLy8gdGhlbiBkZWNpZGVzIHRvIHJldHVybiB0byBhbnkgcGFydCBvZiB0aGUgZmxhZyB1cGRhdGUgam91cm5leS4gVGhlIE1hbmFnZUNhc2VGbGFnc0NvbXBvbmVudCBhbmQgVXBkYXRlRmxhZ0NvbXBvbmVudFxuICAgICAgICAvLyBzaG91bGQgcmVmZXIgdG8gYSBmbGFnJ3Mgb3JpZ2luYWwgc3RhdHVzLCBub3QgdGhlIG9uZSBzZXQgdmlhIHRoZSBVSSBiZWNhdXNlIHRoaXMgaGFzbid0IGJlZW4gcGVyc2lzdGVkIHlldFxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGbGFnLm9yaWdpbmFsU3RhdHVzKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWcub3JpZ2luYWxTdGF0dXMgPSBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWU/LnN0YXR1cztcbiAgICAgICAgfVxuICAgICAgICAvLyBVcGRhdGUgZGVzY3JpcHRpb24gZmllbGRzIG9ubHkgaWYgZmxhZyB0eXBlIGlzIFwiT3RoZXJcIiAoZmxhZyBjb2RlIE9UMDAwMSk7IHRoZXNlIGZpZWxkcyBhcHBseSBvbmx5IHRvIHRoYXQgZmxhZyB0eXBlXG4gICAgICAgIC8vIElmIHRoZWlyIEZvcm1Db250cm9scyBkb24ndCBleGlzdCwgaXQgbWVhbnMgdGhlc2UgZmllbGRzIHdlcmVuJ3QgdmlzaXRlZCBhcyBwYXJ0IG9mIHRoZSBcIlVwZGF0ZSBGbGFnXCIgam91cm5leSwgc28gZG9cbiAgICAgICAgLy8gKm5vdCogdXBkYXRlIHRoZWlyIHZhbHVlcyAob3RoZXJ3aXNlIHRoZXkgd2lsbCBiZWNvbWUgdW5kZWZpbmVkKVxuICAgICAgICBpZiAoZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlPy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSkge1xuICAgICAgICAgIGlmICh0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuT1RIRVJfRkxBR19ERVNDUklQVElPTikpIHtcbiAgICAgICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5vdGhlckRlc2NyaXB0aW9uID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgIENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OKS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OX1dFTFNIKSkge1xuICAgICAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLm90aGVyRGVzY3JpcHRpb25fY3kgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT05fV0VMU0gpLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgdGhhdCBhbnkgY29tbWVudHMgZW50ZXJlZCB3aXRoIGxhbmd1YWdlIHNldCB0byBXZWxzaCBkbyBub3QgZW5kIHVwIGluIHRoZSBFbmdsaXNoIGNvbW1lbnRzIGZpZWxkXG4gICAgICAgIGlmICh0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSAhPT0gJ2N5Jykge1xuICAgICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnQ29tbWVudCA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UUyk/LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBvcHVsYXRlIGZyb20gdGhlICpFbmdsaXNoKiBjb21tZW50cyBmaWVsZCBpZjpcbiAgICAgICAgLy8gKiBUaGUgV2Vsc2ggY29tbWVudHMgZmllbGQgaGFzIG5vIHZhbHVlIChXZWxzaCBjb21tZW50cyBmaWVsZCBhY3F1aXJlcyBhIHZhbHVlIG9ubHkgd2hlbiBhbiBITUNUUyBpbnRlcm5hbCB1c2VyIGhhc1xuICAgICAgICAvLyBnb25lIHRocm91Z2ggdGhlIFwiYWRkIHRyYW5zbGF0aW9uXCIgc3RlcCBmb3IgTWFuYWdlIENhc2UgRmxhZ3MpLCBBTkRcbiAgICAgICAgLy8gKiBUaGUgbGFuZ3VhZ2UgaXMgc2V0IHRvIFdlbHNoXG4gICAgICAgIC8vIElmIHRoZSBGb3JtQ29udHJvbCBkb2Vzbid0IGV4aXN0LCBpdCBtZWFucyB0aGlzIGZpZWxkIHdhc24ndCB2aXNpdGVkIGFzIHBhcnQgb2YgdGhlIFwiVXBkYXRlIEZsYWdcIiBqb3VybmV5LCBzbyBkb1xuICAgICAgICAvLyAqbm90KiB1cGRhdGUgaXRzIHZhbHVlIChvdGhlcndpc2UgaXQgd2lsbCBiZSBvdmVycmlkZGVuKSAtIHVubGVzcyB0aGUgdXNlciBpcyBleHRlcm5hbCBBTkQgd29ya2luZyBpbiBXZWxzaFxuICAgICAgICBpZiAodGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTX1dFTFNIKSB8fCB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5Jykge1xuICAgICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnQ29tbWVudF9jeSA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UU19XRUxTSCk/LnZhbHVlXG4gICAgICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UU19XRUxTSCk/LnZhbHVlXG4gICAgICAgICAgICA6IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTKT8udmFsdWVcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnVXBkYXRlQ29tbWVudCA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5TVEFUVVNfQ0hBTkdFX1JFQVNPTik/LnZhbHVlO1xuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuc3RhdHVzID0gQ2FzZUZsYWdTdGF0dXNbdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLlNUQVRVUyk/LnZhbHVlXTtcbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmRhdGVUaW1lTW9kaWZpZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQXRGaW5hbFN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGVcbiAgICAgID8gdGhpcy5maWVsZFN0YXRlID09PSB0aGlzLm1hbmFnZUZsYWdGaW5hbFN0YXRlXG4gICAgICA6ICF0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZFxuICAgICAgICA/IHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFNcbiAgICAgICAgOiB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUztcbiAgfVxuXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvRXJyb3JFbGVtZW50KGVsZW1lbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGVsZW1lbnRJZCkge1xuICAgICAgY29uc3QgaHRtbEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuICAgICAgaWYgKGh0bWxFbGVtZW50KSB7XG4gICAgICAgIGh0bWxFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XG4gICAgICAgIGh0bWxFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uRmxhZ0NvbW1lbnRzT3B0aW9uYWxFbWl0dGVkKF86IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZmxhZ0NvbW1lbnRzT3B0aW9uYWwgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHBvcHVsYXRlTmV3RmxhZ0RldGFpbEluc3RhbmNlKCk6IEZsYWdEZXRhaWwge1xuICAgIGNvbnN0IGxhbmdTZWFyY2hUZXJtID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWVbJ2xhbmd1YWdlU2VhcmNoVGVybSddO1xuICAgIGNvbnN0IG1hbnVhbExhbmdFbnRyeSA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlWydtYW51YWxMYW5ndWFnZUVudHJ5J107XG4gICAgY29uc3QgZmxhZ1R5cGUgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZVsnZmxhZ1R5cGUnXTtcbiAgICBjb25zdCBvdGhlckRlc2MgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZVsnb3RoZXJEZXNjcmlwdGlvbiddO1xuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5mbGFnVHlwZT8ubmFtZSxcbiAgICAgIG5hbWVfY3k6IGZsYWdUeXBlPy5uYW1lX2N5LFxuICAgICAgLy8gQ3VycmVudGx5LCBzdWJUeXBlVmFsdWUsIHN1YlR5cGVWYWx1ZV9jeSBhbmQgc3ViVHlwZUtleSBhcmUgYXBwbGljYWJsZSBvbmx5IHRvIGxhbmd1YWdlIGZsYWcgdHlwZXNcbiAgICAgIHN1YlR5cGVWYWx1ZTogbGFuZ1NlYXJjaFRlcm0gJiYgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdlbidcbiAgICAgICAgPyBsYW5nU2VhcmNoVGVybS52YWx1ZVxuICAgICAgICA6IG1hbnVhbExhbmdFbnRyeSAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2VuJ1xuICAgICAgICAgID8gbWFudWFsTGFuZ0VudHJ5XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgc3ViVHlwZVZhbHVlX2N5OiBsYW5nU2VhcmNoVGVybSAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5J1xuICAgICAgICA/IGxhbmdTZWFyY2hUZXJtPy52YWx1ZV9jeVxuICAgICAgICA6IG1hbnVhbExhbmdFbnRyeSAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5J1xuICAgICAgICAgID8gbWFudWFsTGFuZ0VudHJ5XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgLy8gRm9yIHVzZXItZW50ZXJlZCAoaS5lLiBub24tUmVmZXJlbmNlIERhdGEpIGxhbmd1YWdlcywgdGhlcmUgaXMgbm8ga2V5XG4gICAgICBzdWJUeXBlS2V5OiBsYW5nU2VhcmNoVGVybVxuICAgICAgICA/IGxhbmdTZWFyY2hUZXJtLmtleVxuICAgICAgICA6IG51bGwsXG4gICAgICBvdGhlckRlc2NyaXB0aW9uOiBmbGFnVHlwZT8uZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgJiZcbiAgICAgICAgb3RoZXJEZXNjICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnZW4nXG4gICAgICAgID8gb3RoZXJEZXNjXG4gICAgICAgIDogbnVsbCxcbiAgICAgIG90aGVyRGVzY3JpcHRpb25fY3k6IGZsYWdUeXBlPy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSAmJlxuICAgICAgICBvdGhlckRlc2MgJiYgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdjeSdcbiAgICAgICAgPyBvdGhlckRlc2NcbiAgICAgICAgOiBudWxsLFxuICAgICAgZmxhZ0NvbW1lbnQ6IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnZW4nXG4gICAgICAgID8gZm9ybVZhbHVlcz8uZmxhZ0NvbW1lbnRzXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZsYWdDb21tZW50X2N5OiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5J1xuICAgICAgICA/IGZvcm1WYWx1ZXM/LmZsYWdDb21tZW50c1xuICAgICAgICA6IG51bGwsXG4gICAgICBmbGFnVXBkYXRlQ29tbWVudDogZm9ybVZhbHVlcz8uc3RhdHVzUmVhc29uLFxuICAgICAgZGF0ZVRpbWVDcmVhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBwYXRoOiBmbGFnVHlwZT8uUGF0aCAmJlxuICAgICAgICBmbGFnVHlwZT8uUGF0aC5tYXAocGF0aFZhbHVlID0+IE9iamVjdC5hc3NpZ24oeyBpZDogbnVsbCwgdmFsdWU6IHBhdGhWYWx1ZSB9KSksXG4gICAgICBoZWFyaW5nUmVsZXZhbnQ6IGZsYWdUeXBlPy5oZWFyaW5nUmVsZXZhbnQgPyAnWWVzJyA6ICdObycsXG4gICAgICBmbGFnQ29kZTogZmxhZ1R5cGU/LmZsYWdDb2RlLFxuICAgICAgLy8gU3RhdHVzIHNob3VsZCBiZSBzZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQgaXMgZm9yIHRoaXMgZmxhZyB0eXBlLCBpZiBmbGFnIGlzIGJlaW5nIGNyZWF0ZWQgYnkgYW4gZXh0ZXJuYWxcbiAgICAgIC8vIHVzZXIsIG90aGVyd2lzZSBpdCBzaG91bGQgYmUgc2V0IHRvIFwiQWN0aXZlXCIgaWYgQ2FzZSBGbGFncyB2Mi4xIGlzIE5PVCBlbmFibGVkLCBvciB0aGUgc2VsZWN0ZWQgc3RhdHVzIGlmIGl0IGlzXG4gICAgICBzdGF0dXM6IHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXG4gICAgICAgID8gZmxhZ1R5cGU/LmRlZmF1bHRTdGF0dXNcbiAgICAgICAgOiAhdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRcbiAgICAgICAgICA/IENhc2VGbGFnU3RhdHVzLkFDVElWRVxuICAgICAgICAgIDogQ2FzZUZsYWdTdGF0dXNbZm9ybVZhbHVlcz8uc2VsZWN0ZWRTdGF0dXNdLFxuICAgICAgYXZhaWxhYmxlRXh0ZXJuYWxseTogZmxhZ1R5cGU/LmV4dGVybmFsbHlBdmFpbGFibGUgPyAnWWVzJyA6ICdObydcbiAgICB9IGFzIEZsYWdEZXRhaWw7XG4gIH1cblxuICBwdWJsaWMgbW92ZVRvRmluYWxSZXZpZXdTdGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmxhc3RQYWdlRmllbGRTdGF0ZSA9IHRoaXMuZmllbGRTdGF0ZTtcbiAgICB0aGlzLnNldEZsYWdzQ2FzZUZpZWxkVmFsdWUoKTtcbiAgICAvLyBDaGVjayB0aGF0IG5vIGVycm9ycyBoYXZlIGJlZW4gc2V0IG9uIGNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwIChieSBkZXRlcm1pbmVMb2NhdGlvbkZvckZsYWcoKSk7IHByZXZlbnQgbW92aW5nIHRvXG4gICAgLy8gZmluYWwgcmV2aWV3IHN0YWdlIGlmIGVycm9ycyBleGlzdFxuICAgIGlmICghdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5lcnJvcnMpIHtcbiAgICAgIC8vIENsZWFyIHRoZSBcIm5vdEFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkXCIgZXJyb3JcbiAgICAgIHRoaXMuYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLnNldFRyaWdnZXJTdWJtaXRFdmVudCh0cnVlKTtcbiAgICAgIC8vIFVwZGF0ZSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbiB3aXRoIHRoZSBjb3JyZWN0bHkgZGV0ZXJtaW5lZCBsb2NhdGlvbiwgc28gdGhlIGNvcnJlY3QgdmFsdWUgaXMgYXZhaWxhYmxlIHRvXG4gICAgICAvLyBSZWFkQ2FzZUZsYWdGaWVsZENvbXBvbmVudCB3aGVuIGl0IGluaXRpYWxpc2VzIHRoZSBDYXNlIEZsYWcgU3VtbWFyeSBwYWdlXG4gICAgICB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbiA9IHRoaXMuZGV0ZXJtaW5lZExvY2F0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5zZXRKb3VybmV5U3RhdGUodGhpcyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgdGhpcy5oYW5kbGVCYWNrQnV0dG9uKTtcbiAgICAvLyBSZXNldCB0aGUgZmllbGRzdGF0ZVRvTmF2aWdhdGUgYXMgdGhlIHdyaXRlIGpvdXJuZXkgY29tcGxldGVzIGF0IHRoaXMgcG9pbnRcbiAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZpZWxkU3RhdGVUb05hdmlnYXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2FzZVRpdGxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtYW5hZ2VGbGFnRmluYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLklTX1dFTFNIX1RSQU5TTEFUSU9OX05FRURFRCk/LnZhbHVlXG4gICAgICA/IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURV9XRUxTSF9UUkFOU0xBVElPTiA6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlcihjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNhc2VGaWVsZHMuZmluZChjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSk/LmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXI7XG4gIH1cbn1cbiIsIjwhLS0gRXJyb3IgbWVzc2FnZSBzdW1tYXJ5IC0tPlxuPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiIGFyaWEtbGFiZWxsZWRieT1cImVycm9yLXN1bW1hcnktdGl0bGVcIiByb2xlPVwiYWxlcnRcIlxuICB0YWJpbmRleD1cIi0xXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCI+XG4gIDxoMiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX3RpdGxlXCIgaWQ9XCJlcnJvci1zdW1tYXJ5LXRpdGxlXCI+XG4gICAge3snVGhlcmUgaXMgYSBwcm9ibGVtJyB8IHJweFRyYW5zbGF0ZX19XG4gIDwvaDI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgPHVsIGNsYXNzPVwiZ292dWstbGlzdCBnb3Z1ay1lcnJvci1zdW1tYXJ5X19saXN0XCI+XG4gICAgICA8bGk+XG4gICAgICAgIDxhIChjbGljayk9XCJuYXZpZ2F0ZVRvRXJyb3JFbGVtZW50KGVycm9yTWVzc2FnZS5maWVsZElkKVwiIGNsYXNzPVwidmFsaWRhdGlvbi1lcnJvclwiPnt7ZXJyb3JNZXNzYWdlLmRlc2NyaXB0aW9uIHxcbiAgICAgICAgICBycHhUcmFuc2xhdGV9fTwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nU3dpdGNoXT1cImZpZWxkU3RhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MT0NBVElPTlwiPlxuICAgICAgPGNjZC1zZWxlY3QtZmxhZy1sb2NhdGlvbiBcbiAgICAgICAgI2pvdXJuZXlDaGlsZCBcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFxuICAgICAgICBbZmxhZ3NEYXRhXT1cImZsYWdzRGF0YVwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9jY2Qtc2VsZWN0LWZsYWctbG9jYXRpb24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRVwiPlxuICAgICAgPGNjZC1zZWxlY3QtZmxhZy10eXBlIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgXG4gICAgICAgIFtqdXJpc2RpY3Rpb25dPVwianVyaXNkaWN0aW9uXCJcbiAgICAgICAgW2Nhc2VUeXBlSWRdPVwiY2FzZVR5cGVJZFwiIFxuICAgICAgICBbaG1jdHNTZXJ2aWNlSWRdPVwiaG1jdHNTZXJ2aWNlSWRcIlxuICAgICAgICBbaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXT1cImlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbFwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkXCJcbiAgICAgICAgW3NlbGVjdGVkRmxhZ3NMb2NhdGlvbl09XCJzZWxlY3RlZEZsYWdzTG9jYXRpb25cIiBcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZXIpPVwib25GbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmbGFnVHlwZVN1YkpvdXJuZXlFbWl0dGVyKT1cInVwZGF0ZUZsYWdUeXBlU3ViSm91cm5leSgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1zZWxlY3QtZmxhZy10eXBlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xBTkdVQUdFX0lOVEVSUFJFVEVSXCI+XG4gICAgICA8Y2NkLXNlYXJjaC1sYW5ndWFnZS1pbnRlcnByZXRlciBcbiAgICAgICAgI2pvdXJuZXlDaGlsZCBcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFxuICAgICAgICBbZmxhZ1R5cGVdPVwiZmxhZ1R5cGVcIiBcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9jY2Qtc2VhcmNoLWxhbmd1YWdlLWludGVycHJldGVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTXCI+XG4gICAgICA8Y2NkLWFkZC1jb21tZW50cyBcbiAgICAgICAgI2pvdXJuZXlDaGlsZCBcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFxuICAgICAgICBbb3B0aW9uYWxdPVwiZmxhZ0NvbW1lbnRzT3B0aW9uYWxcIlxuICAgICAgICBbaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXT1cImlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbFwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9jY2QtYWRkLWNvbW1lbnRzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVU1wiPlxuICAgICAgPGNjZC1jb25maXJtLWZsYWctc3RhdHVzIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCJcbiAgICAgICAgW2RlZmF1bHRTdGF0dXNdPVwiZmxhZ1R5cGUuZGVmYXVsdFN0YXR1c1wiIFxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1jb25maXJtLWZsYWctc3RhdHVzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGVcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIFtuZ1N3aXRjaF09XCJmaWVsZFN0YXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1NcIj5cbiAgICAgIDxjY2QtbWFuYWdlLWNhc2UtZmxhZ3MgXG4gICAgICAgICNqb3VybmV5Q2hpbGQgXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIiBcbiAgICAgICAgW2ZsYWdzRGF0YV09XCJmbGFnc0RhdGFcIlxuICAgICAgICBbY2FzZVRpdGxlXT1cImNhc2VUaXRsZVwiIFxuICAgICAgICBbZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJdPVwiZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1tYW5hZ2UtY2FzZS1mbGFncz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVcIj5cbiAgICAgIDxjY2QtdXBkYXRlLWZsYWcgXG4gICAgICAgICNqb3VybmV5Q2hpbGQgXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICBbZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJdPVwiZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJcIiBcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9jY2QtdXBkYXRlLWZsYWc+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OXCI+XG4gICAgICA8Y2NkLXVwZGF0ZS1mbGFnLWFkZC10cmFuc2xhdGlvbi1mb3JtIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9jY2QtdXBkYXRlLWZsYWctYWRkLXRyYW5zbGF0aW9uLWZvcm0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
813
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFHN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDeEksT0FBTyxFQUFFLGtCQUFrQixFQUFF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LENBQUMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDO0lBQzdILENBQUM7cUhBdnBCVSwyQkFBMkI7NkRBQTNCLDJCQUEyQjtZQ2dEeEMsQUF0REEsQUFkQSw0RUFDa0QsK0RBYXVDLCtEQXNERDs7WUFwRWxGLG1EQUE4QjtZQWM5QixjQUFzQztZQUF0QywyREFBc0M7WUFzRHRDLGNBQXFDO1lBQXJDLDBEQUFxQzs7O2lGRGhEOUIsMkJBQTJCO2NBTHZDLFNBQVM7MkJBQ0UsMkJBQTJCOztrRkFJMUIsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ3JweC14dWktdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYXNlRWRpdERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9ucy9jYXNlLWVkaXQtZGF0YS9jYXNlLWVkaXQtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENhc2VGaWVsZCwgRXJyb3JNZXNzYWdlLCBKb3VybmV5IH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZsYWdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2UtZmxhZyc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcyc7XG5pbXBvcnQgeyBDYXNlRmxhZ1N0YXRlLCBGbGFnRGV0YWlsLCBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoLCBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIH0gZnJvbSAnLi9kb21haW4nO1xuaW1wb3J0IHsgTXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFdyaXRlSm91cm5leUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvYWJzdHJhY3QtZmllbGQtd3JpdGUtam91cm5leS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYXNlLWVkaXRvci9zZXJ2aWNlcy9jYXNlLWZsYWctc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLCBDYXNlRmxhZ0Vycm9yTWVzc2FnZSwgQ2FzZUZsYWdGaWVsZFN0YXRlLCBDYXNlRmxhZ0Zvcm1GaWVsZHMsIENhc2VGbGFnU3RhdHVzIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBMaW5rZWRDYXNlc1NlcnZpY2UgfSBmcm9tICcuLi9saW5rZWQtY2FzZXMvc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2Qtd3JpdGUtY2FzZS1mbGFnLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFdyaXRlQ2FzZUZsYWdGaWVsZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmllbGRXcml0ZUpvdXJuZXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgSm91cm5leSB7XG4gIC8vcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgZmllbGRTdGF0ZTogbnVtYmVyO1xuICBwdWJsaWMgY2FzZUZsYWdGaWVsZFN0YXRlID0gQ2FzZUZsYWdGaWVsZFN0YXRlO1xuICBwdWJsaWMgZXJyb3JNZXNzYWdlczogRXJyb3JNZXNzYWdlW10gPSBbXTtcbiAgcHVibGljIGZsYWdzRGF0YTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRGbGFnOiBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoO1xuICBwdWJsaWMgY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHVibGljIGZsYWdDb21tZW50c09wdGlvbmFsID0gZmFsc2U7XG4gIHB1YmxpYyBqdXJpc2RpY3Rpb246IHN0cmluZztcbiAgcHVibGljIGNhc2VUeXBlSWQ6IHN0cmluZztcbiAgcHVibGljIGhtY3RzU2VydmljZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlOiBib29sZWFuO1xuICBwdWJsaWMgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsOiBib29sZWFuO1xuICBwdWJsaWMgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkOiBib29sZWFuO1xuICBwdWJsaWMgY2FzZVRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBjYXNlVGl0bGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBzdHJpbmc7XG4gIHB1YmxpYyBkZXRlcm1pbmVkTG9jYXRpb246IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGg7XG4gIHByaXZhdGUgYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgcHVibGljIG5hdmlnYXRlZFRvID0gZmFsc2U7XG4gIC8vIENvZGUgZm9yIFwiT3RoZXJcIiBmbGFnIHR5cGUgYXMgZGVmaW5lZCBpbiBSZWZlcmVuY2UgRGF0YVxuICBwcml2YXRlIHJlYWRvbmx5IG90aGVyRmxhZ1R5cGVDb2RlID0gJ09UMDAwMSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRNYW5hZ2VDYXNlTG9jYXRpb24gPSAnc2VsZWN0ZWRNYW5hZ2VDYXNlTG9jYXRpb24nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FzZU5hbWVNaXNzaW5nID0gJ0Nhc2UgbmFtZSBtaXNzaW5nJztcbiAgZmxhZ1R5cGVTdWJKb3VybmV5SW5kZXg6IGFueTtcblxuICBwdWJsaWMgZ2V0IGZsYWdUeXBlKCk6IEZsYWdUeXBlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlLmZsYWdUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZEZsYWdzTG9jYXRpb24oKTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZS5zZWxlY3RlZExvY2F0aW9uO1xuICB9XG5cbiAgcHVibGljIHNldCBzZWxlY3RlZEZsYWdzTG9jYXRpb24oc2VsZWN0ZWRMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cCkge1xuICAgICAgdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5zZWxlY3RlZExvY2F0aW9uID0gc2VsZWN0ZWRMb2NhdGlvbjtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VFZGl0RGF0YVNlcnZpY2U6IENhc2VFZGl0RGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRmxhZ1N0YXRlU2VydmljZTogQ2FzZUZsYWdTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBycHhUcmFuc2xhdGlvblNlcnZpY2U6IFJweFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlua2VkQ2FzZXNTZXJ2aWNlOiBMaW5rZWRDYXNlc1NlcnZpY2UsXG4gICAgbXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlOiBNdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIobXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLmhhbmRsZUJhY2tCdXR0b24gPSB0aGlzLmhhbmRsZUJhY2tCdXR0b24uYmluZCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5yZXNldExpbmtlZENhc2VEYXRhKCk7XG4gICAgY29uc3QgdHJpZ1VybCA9IGxvY2F0aW9uLmhyZWY7XG4gICAgdGhpcy5hZGRTdGF0ZShudWxsLCB0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKS5zcGxpY2UoMCwgdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJykuaW5kZXhPZigndHJpZ2dlcicpKS5qb2luKCcvJykpO1xuICAgIHRoaXMuYWRkU3RhdGUoMCwgdHJpZ1VybCk7XG4gICAgLy8gSWYgaXQgaXMgc3RhcnQgb2YgdGhlIGpvdXJuZXkgb3IgbmF2aWdhdGlvbiBmcm9tIGNoZWNrIHlvdXIgYW5zd2VycyBwYWdlIHRoZW4gZmllbGRTdGF0ZVRvTmF2aWdhdGUgcHJvcGVydHlcbiAgICAvLyBpbiBjYXNlIGZsYWcgc3RhdGUgc2VydmljZSB3aWxsIGNvbnRhaW4gdGhlIGZpZWxkIHN0YXRlIHRvIG5hdmlnYXRlIGJhc2VkIG9uIGNyZWF0ZSBvciBtYW5hZ2Ugam91cm5leVxuICAgIHRoaXMuZmllbGRTdGF0ZSA9IHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZmllbGRTdGF0ZVRvTmF2aWdhdGU7XG4gICAgaWYgKHRoaXMuZmllbGRTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcztcbiAgICAgIC8vIENsZWFyIHRoZSBmb3JtIGdyb3VwLCBmaWVsZCBzdGF0ZSB0byBuYXZpZ2F0ZSBhbmQgc2V0IHRoZSBwYWdlIGxvY2F0aW9uXG4gICAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLnJlc2V0Q2FjaGUoYC4uLyR7cGFyYW1zWydlaWQnXX0vJHtwYXJhbXNbJ3BhZ2UnXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uYXZpZ2F0ZWRUbyA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmVhc3NpZ24gdGhlIGZvcm0gZ3JvdXAgZnJvbSB0aGUgY2FzZSBmbGFnIHN0YXRlIHNlcnZpY2VcbiAgICB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5mb3JtR3JvdXA7XG4gICAgLy8gQ2xlYXIgZm9ybSB2YWxpZGF0aW9uIGVycm9ycyBhcyBhIG5ldyBwYWdlIHdpbGwgYmUgcmVuZGVyZWQgYmFzZWQgb24gZmllbGQgc3RhdGVcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2xlYXJGb3JtVmFsaWRhdGlvbkVycm9ycygpO1xuICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBGbGFnTGF1bmNoZXIgY29udHJvbCBpbiBwYXJlbnQgYW5kIHJlbW92ZSBpdCAtIHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGVuc3VyZSBpdHMgaW52YWxpZGl0eVxuICAgIC8vIGlzIHNldCBjb3JyZWN0bHkgYXQgdGhlIHN0YXJ0LCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVsb2FkZWQgYW5kIHRoZSBjb250cm9sIGlzIHJlLXJlZ2lzdGVyZWQuIE90aGVyd2lzZSwgdGhlXG4gICAgLy8gdmFsaWRhdG9yIHN0YXRlIGdldHMgY2FycmllZCBvdmVyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwICYmIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLmNhc2VGaWVsZC5pZCkpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnJlbW92ZUNvbnRyb2wodGhpcy5jYXNlRmllbGQuaWQpO1xuICAgIH1cbiAgICAvLyBGcm9tIHRoaXMgcG9pbnQsIHRoaXMuZm9ybUdyb3VwIHJlZmVycyB0byB0aGUgRm9ybUdyb3VwIGZvciB0aGUgRmxhZ0xhdW5jaGVyIGZpZWxkLCBub3QgdGhlIHBhcmVudCBGb3JtR3JvdXBcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMucmVnaXN0ZXJDb250cm9sKG5ldyBGb3JtR3JvdXAoe30sIHtcbiAgICAgIHZhbGlkYXRvcnM6IChfOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gYW4gZXJyb3IgdG8gbWFyayB0aGUgRm9ybUdyb3VwIGFzIGludmFsaWQgaWYgbm90IGFsbCBDYXNlIEZsYWcgc3RhZ2VzIGhhdmUgYmVlbiBjb21wbGV0ZWRcbiAgICAgICAgICByZXR1cm4geyBub3RBbGxDYXNlRmxhZ1N0YWdlc0NvbXBsZXRlZDogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pLCB0cnVlKSBhcyBGb3JtR3JvdXA7XG5cbiAgICAvLyBHZXQgdGhlIGNhc2UgdHlwZSBJRCBmcm9tIHRoZSBDYXNlVmlldyBvYmplY3QgaW4gdGhlIHNuYXBzaG90IGRhdGEgKHJlcXVpcmVkIGZvciByZXRyaWV2aW5nIHRoZSBhdmFpbGFibGUgZmxhZ1xuICAgIC8vIHR5cGVzIGZvciBhIGNhc2UpXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlICYmIHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLmNhc2VfdHlwZSkge1xuICAgICAgdGhpcy5jYXNlVHlwZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlLmlkO1xuICAgICAgLy8gR2V0IHRoZSBqdXJpc2RpY3Rpb24gKHJlcXVpcmVkIGZvciByZXRyaWV2aW5nIHRoZSBhdmFpbGFibGUgZmxhZyB0eXBlcyBpZiB1bmFibGUgdG8gZGV0ZXJtaW5lIHVzaW5nIGNhc2UgdHlwZSBJRClcbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuanVyaXNkaWN0aW9uKSB7XG4gICAgICAgIHRoaXMuanVyaXNkaWN0aW9uID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlLmp1cmlzZGljdGlvbi5pZDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRXh0cmFjdCBhbGwgZmxhZ3MtcmVsYXRlZCBkYXRhIGZyb20gdGhlIENhc2VFdmVudFRyaWdnZXIgb2JqZWN0IGluIHRoZSBzbmFwc2hvdCBkYXRhXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIpIHtcbiAgICAgIC8vIEdldCB0aGUgSE1DVFNTZXJ2aWNlSWQgZnJvbSBzdXBwbGVtZW50YXJ5IGRhdGEsIGlmIGl0IGV4aXN0cyAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnIHR5cGVzIGluXG4gICAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2UsIG9ubHkgZmFsbGluZyBiYWNrIG9uIGNhc2UgdHlwZSBJRCBvciBqdXJpc2RpY3Rpb24gaWYgaXQncyBub3QgcHJlc2VudClcbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YVxuICAgICAgICAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YS5ITUNUU1NlcnZpY2VJZCkge1xuICAgICAgICB0aGlzLmhtY3RzU2VydmljZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5zdXBwbGVtZW50YXJ5X2RhdGEuSE1DVFNTZXJ2aWNlSWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKSB7XG4gICAgICAgIC8vIHRoZXJlIGlzIGFuIGVkZ2UgY2FzZSBpbiB0aGUgbmF2aWdhdGlvbiB3aGVuIGdvaW5nIGJhY2ssIHNvbWV0aW1lcyB0aGUgY2FzZV9maWxlZHMgd2lsbCBsb3NlIHZhbHVlcyBpbiB0aGUgdmFsdWVzIHdoaWNoIGNhdXNlcyB0aGUgZmxvdyB0byBicmVhayBiZWZvcmUgQ1lBXG4gICAgICAgIC8vIGJlbG93IGZ1bmNpdG9uIGVuc3VyZXMgYWxsIGRhdGEgaXMgY29ycmVjdGx5IHNldC5cbiAgICAgICAgY29uc3QgZmxhZ0RhdGEgPSB0aGlzLnZhbGlkYXRlQ2FzZUZpZWxkcyh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKTtcbiAgICAgICAgdGhpcy5mbGFnc0RhdGEgPSAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyBhcyBDYXNlRmllbGRbXSlcbiAgICAgICAgICAucmVkdWNlKChmbGFnczogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdLCBjYXNlRmllbGQ6IENhc2VGaWVsZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkc1V0aWxzLmV4dHJhY3RGbGFnc0RhdGFGcm9tQ2FzZUZpZWxkKGZsYWdzLCBjYXNlRmllbGQsIGNhc2VGaWVsZC5pZCwgY2FzZUZpZWxkKTtcbiAgICAgICAgICB9LCBbXSBhcyBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW10pO1xuXG4gICAgICAgIC8vIFNldCBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciAodG8gYmUgcGFzc2VkIGFzIGFuIGlucHV0IHRvIE1hbmFnZUNhc2VGbGFnc0NvbXBvbmVudCBmb3Igc2V0dGluZyBjb3JyZWN0IHRpdGxlKVxuICAgICAgICB0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID1cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyKGZsYWdEYXRhIGFzIENhc2VGaWVsZFtdKTtcblxuICAgICAgICAvLyBTZXQgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyIGlzIFwidXBkYXRlXCJcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlID0gdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSh0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyKTtcblxuICAgICAgICAvLyBTZXQgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyIGlzIFwiZXh0ZXJuYWxcIlxuICAgICAgICB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCA9IHRoaXMuc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCh0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyKTtcblxuICAgICAgICAvLyBTZXQgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyIGlzIENhc2UgRmxhZ3MgdjIuMSBlbmFibGVkXG4gICAgICAgIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkID0gdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgICAgIC8vIFNldCBzdGFydGluZyBmaWVsZCBzdGF0ZSBpZiBmaWVsZFN0YXRlIG5vdCB0aGUgcmlnaHQgdmFsdWVcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPSB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgPyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHUyA6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGNhc2UgdGl0bGUsIHRvIGJlIHVzZWQgYnkgY2hpbGQgY29tcG9uZW50c1xuICAgICAgICB0aGlzLmNhc2VUaXRsZVN1YnNjcmlwdGlvbiA9IHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jYXNlVGl0bGUkLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogdGl0bGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYXNlVGl0bGUgPSB0aXRsZT8ubGVuZ3RoID4gMCA/IHRpdGxlIDogdGhpcy5jYXNlTmFtZU1pc3Npbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDU0ZELTE2LlxuICAgIC8vIFNldHVwIHRoZSBwYWdlIG51bWJlciB0byBpbml0aWFsbHkgYmUgdGhlIHNhbWUgdmFsdWUgYXMgXG4gICAgLy8gdGhlIHN0YXJ0IHBhZ2UgbnVtYmVyLiBQcm92aWRlZCB0aGF0IHNvbWUgc3RhdGUgZXhpc3RzIHdpdGhpbiBcbiAgICAvLyB0aGUgcGFnZSBzdGF0ZSBzZXJ2aWNlLCB1c2UgdGhhdCBpbnN0YWVhZC5cbiAgICAvL1xuICAgIC8vIElmIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgaXMgdHJ1ZSwgdGhlbiB0aGUgc3RhcnRpbmcgcGFnZSBtdXN0IGJlIFxuICAgIC8vIHRoZSB2YWx1ZSBvZiA0LiBPdGhlcndpc2UsIGl0J3MgMC4gSG93ZXZlciwgd2UncmUgdXNpbmcgYW4gZW51bSB0byBzaW1wbGlmeVxuICAgIC8vIHRoaXMgcHJvY2Vzcy5cbiAgICAvL1xuICAgIC8vIEl0IG1pZ2h0IGhlbHAgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHRlbXBsYXRlIGZpbGUuIFxuICAgIGlmICh0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUpIHtcbiAgICAgIHRoaXMuam91cm5leVN0YXJ0UGFnZU51bWJlciA9IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTO1xuICAgICAgdGhpcy5qb3VybmV5RW5kUGFnZU51bWJlciA9IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURV9XRUxTSF9UUkFOU0xBVElPTjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5qb3VybmV5U3RhcnRQYWdlTnVtYmVyID0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT047XG4gICAgICB0aGlzLmpvdXJuZXlFbmRQYWdlTnVtYmVyID0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTO1xuICAgIH1cblxuICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIHNldCB0aGUgc3RhcnQgcGFnZSBudW1iZXIsIGxldCdzIHNldCB0aGUgY3VycmVudCBwYWdlIG51bWJlci4gXG4gICAgdGhpcy5qb3VybmV5UGFnZU51bWJlciA9IHRoaXMuam91cm5leVN0YXJ0UGFnZU51bWJlcjtcblxuICAgIC8vIElmIHdlJ3ZlIG5hdmlnYXRlZCB0byB0aGlzIHBhZ2UsIHRoZW4gd2Uga25vdyBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIHNldCB0aGUgXG4gICAgLy8gam91cm5leSBwYWdlIG51bWJlciB0byB0aGUgZmllbGQgc3RhdGUuIFxuICAgIGlmICh0aGlzLm5hdmlnYXRlZFRvKSB7XG4gICAgICBjb25zdCBwYWdlTm8gPSB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUyA/IHRoaXMuZmllbGRTdGF0ZSAtMSA6IHRoaXMuZmllbGRTdGF0ZTtcbiAgICAgIHRoaXMuam91cm5leVBhZ2VOdW1iZXIgPSBwYWdlTm87XG4gICAgICB0aGlzLmpvdXJuZXlQcmV2aW91c1BhZ2VOdW1iZXIgPSBwYWdlTm8rMTtcbiAgICB9XG5cbiAgICAvLyBQcm92aWRlZCB3ZSBoYXZlIHNvbWUgc3RvcmVkIHN0YXRlLCBpLmUuIHdoZW4gZ29pbmcgYmFja3dhcmRzLCB3ZSB3YW50IFxuICAgIC8vIHRvIGdldCB0aGUgbGFzdCB2aXNpdGVkIHBhZ2UsIGV0Yy4gXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5nZXRKb3VybmV5U3RhdGUodGhpcyk7XG5cbiAgICBpZiAoc3RhdGUpIHtcbiAgICAgIGNvbnN0IHsgam91cm5leVBhZ2VOdW1iZXIsIGpvdXJuZXlTdGFydFBhZ2VOdW1iZXIsIGpvdXJuZXlFbmRQYWdlTnVtYmVyIH0gPSBzdGF0ZTtcblxuICAgICAgdGhpcy5qb3VybmV5UGFnZU51bWJlciA9IGpvdXJuZXlQYWdlTnVtYmVyO1xuICAgICAgdGhpcy5qb3VybmV5U3RhcnRQYWdlTnVtYmVyID0gam91cm5leVN0YXJ0UGFnZU51bWJlcjtcbiAgICAgIHRoaXMuam91cm5leUVuZFBhZ2VOdW1iZXIgPSBqb3VybmV5RW5kUGFnZU51bWJlcjtcbiAgICB9XG5cbiAgICB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5pc0F0U3RhcnQgPSB0aGlzLmpvdXJuZXlQYWdlTnVtYmVyID09PSB0aGlzLmpvdXJuZXlTdGFydFBhZ2VOdW1iZXI7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgdGhpcy5oYW5kbGVCYWNrQnV0dG9uKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVCYWNrQnV0dG9uKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodGhpcy5maWVsZFN0YXRlID09PSAwKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJykuc3BsaWNlKDAsIHRoaXMucm91dGVyLnVybC5zcGxpdCgnLycpLmluZGV4T2YoJ3RyaWdnZXInKSkuam9pbignLycpXSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkU3RhdGUgPT09IDEgJiYgdGhpcy5mbGFnVHlwZVN1YkpvdXJuZXlJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGRTdGF0ZSAhPT0gMSkge1xuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkU3RhdGUoZGF0YSwgdXJsPyk6IHZvaWQge1xuICAgIGhpc3RvcnkucHVzaFN0YXRlKGRhdGEsICcnLCB1cmwpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZsYWdUeXBlU3ViSm91cm5leShldmVudCk6IHZvaWQge1xuICAgIHRoaXMuZmxhZ1R5cGVTdWJKb3VybmV5SW5kZXggPSBldmVudDtcbiAgfVxuXG4gIHZhbGlkYXRlQ2FzZUZpZWxkcyhjYXNlRmllbGRzKSB7XG4gICAgY2FzZUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmZvcm1hdHRlZF92YWx1ZSkge1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZC5mb3JtYXR0ZWRfdmFsdWUpLmZvckVhY2goKHZhbHVlS2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdHRlZF92YWx1ZVt2YWx1ZUtleV0gIT09IGZpZWxkLnZhbHVlW3ZhbHVlS2V5XSkge1xuICAgICAgICAgICAgZmllbGQudmFsdWVbdmFsdWVLZXldID0gZmllbGQuZm9ybWF0dGVkX3ZhbHVlW3ZhbHVlS2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjYXNlRmllbGRzO1xuICB9XG5cbiAgcHVibGljIG9uUGFnZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5pc0F0U3RhcnQgPSB0aGlzLmZpZWxkU3RhdGUgPT09IHRoaXMuY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT047XG4gICAgdGhpcy5hZGRTdGF0ZSh0aGlzLmZpZWxkU3RhdGUpO1xuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlKGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFIHx8XG4gICAgICBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfRVhURVJOQUwgfHxcbiAgICAgIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV8yX1BPSU5UXzE7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbChkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLkNSRUFURV9FWFRFUk5BTCB8fFxuICAgICAgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFX0VYVEVSTkFMO1xuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5DUkVBVEVfMl9QT0lOVF8xIHx8XG4gICAgICBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfMl9QT0lOVF8xO1xuICB9XG5cbiAgcHVibGljIG9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoY2FzZUZsYWdTdGF0ZTogQ2FzZUZsYWdTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jbGVhckZvcm1WYWxpZGF0aW9uRXJyb3JzKCk7XG5cbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBjYXNlRmxhZ1N0YXRlLmVycm9yTWVzc2FnZXM7XG4gICAgdGhpcy5zZWxlY3RlZEZsYWcgPSBjYXNlRmxhZ1N0YXRlLnNlbGVjdGVkRmxhZztcblxuICAgIC8vIFZhbGlkYXRpb24gc3VjY2VlZGVkOyBwcm9jZWVkIHRvIG5leHQgc3RhdGUgb3IgZmluYWwgcmV2aWV3IHN0YWdlIChcIkNoZWNrIHlvdXIgYW5zd2Vyc1wiKVxuICAgIGlmICh0aGlzLmVycm9yTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5jYW5Nb3ZlVG9GaW5hbFJldmlld1N0YWdlKGNhc2VGbGFnU3RhdGUpKSB7XG4gICAgICAgIHRoaXMubW92ZVRvRmluYWxSZXZpZXdTdGFnZSgpO1xuICAgICAgICAvLyBEb24ndCBtb3ZlIHRvIG5leHQgc3RhdGUgaWYgY3VycmVudCBzdGF0ZSBpcyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFIGFuZCB0aGUgZmxhZyB0eXBlIGlzIGEgcGFyZW50IC0gdGhpc1xuICAgICAgICAvLyBtZWFucyB0aGUgdXNlciBuZWVkcyB0byBzZWxlY3QgZnJvbSB0aGUgbmV4dCBzZXQgb2YgZmxhZyB0eXBlcyBiZWZvcmUgdGhleSBjYW4gbW92ZSBvblxuICAgICAgfSBlbHNlIGlmICghY2FzZUZsYWdTdGF0ZS5pc1BhcmVudEZsYWdUeXBlKSB7XG4gICAgICAgIC8vIFByb2NlZWQgdG8gbmV4dCBzdGF0ZVxuICAgICAgICB0aGlzLnByb2NlZWRUb05leHRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYW5Nb3ZlVG9GaW5hbFJldmlld1N0YWdlKGNhc2VGbGFnU3RhdGU6IENhc2VGbGFnU3RhdGUpOiBib29sZWFuIHtcbiAgICAvLyBJZiB0aGUgam91cm5leSBpcyByZXF1ZXN0IHN1cHBvcnQgb3IgbWFuYWdlIHN1cHBvcnRcbiAgICAvLyBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgaXMgZWl0aGVyIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTIG9yIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURVxuICAgIC8vIHRoZW4gbW92ZSB0byBmaW5hbCByZXZpZXcgc3RhZ2VcbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwpIHtcbiAgICAgIHJldHVybiBjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTIHx8XG4gICAgICAgIGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBvbmUgb2Y6XG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19TVEFUVVMgQU5EIENhc2UgRmxhZ3MgdjIuMSBpcyBlbmFibGVkXG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyBBTkQgQ2FzZSBGbGFncyB2Mi4xIGlzIG5vdCBlbmFibGVkXG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEUgYW5kIFdlbHNoIHRyYW5zbGF0aW9uIGNoZWNrYm94IGlzIG5vdCBzZWxlY3RlZFxuICAgIC8vICogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OXG4gICAgLy8gdGhlbiBtb3ZlIHRvIGZpbmFsIHJldmlldyBzdGFnZVxuICAgIHJldHVybiAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PVxuICAgICAgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTICYmIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKSB8fFxuICAgICAgKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT1cbiAgICAgICAgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFMgJiYgIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkKSB8fFxuICAgICAgKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFICYmXG4gICAgICAgICF0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuSVNfV0VMU0hfVFJBTlNMQVRJT05fTkVFREVEKT8udmFsdWUpIHx8XG4gICAgICBjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURV9XRUxTSF9UUkFOU0xBVElPTjtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZWVkVG9OZXh0U3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQXRGaW5hbFN0YXRlKCkpIHtcbiAgICAgIHRoaXMuam91cm5leVByZXZpb3VzUGFnZU51bWJlciA9IHRoaXMuZmllbGRTdGF0ZTtcbiAgICAgIC8vIFNraXAgdGhlIFwibGFuZ3VhZ2UgaW50ZXJwcmV0ZXJcIiBzdGF0ZSBpZiBjdXJyZW50IHN0YXRlIGlzIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUgYW5kIHRoZSBmbGFnIHR5cGUgZG9lc24ndFxuICAgICAgLy8gaGF2ZSBhIFwibGlzdCBvZiB2YWx1ZXNcIiAtIGN1cnJlbnRseSwgdGhpcyBpcyBwcmVzZW50IG9ubHkgZm9yIHRob3NlIGZsYWcgdHlwZXMgdGhhdCByZXF1aXJlIGxhbmd1YWdlIGludGVycHJldGVyXG4gICAgICAvLyBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUgJiYgIXRoaXMuZmxhZ1R5cGU/Lmxpc3RPZlZhbHVlcykge1xuICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSsrO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5leHRQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEZsYWdzQ2FzZUZpZWxkVmFsdWUoKTogdm9pZCB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzd2l0Y2gtZGVmYXVsdFxuICAgIHN3aXRjaCAodGhpcy5maWVsZFN0YXRlKSB7XG4gICAgICBjYXNlIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUzpcbiAgICAgICAgdGhpcy5hZGRGbGFnVG9Db2xsZWN0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUzpcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsIHx8ICF0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMuYWRkRmxhZ1RvQ29sbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1hbmFnZUZsYWdGaW5hbFN0YXRlOlxuICAgICAgICB0aGlzLnVwZGF0ZUZsYWdJbkNvbGxlY3Rpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByZXZpb3VzUGFnZSgpOiB2b2lkIHtcbiAgICAvLyBpZiB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20gdGhlIHBhZ2UsIHdlIHNob3VsZCBzZXQgdGhlIGVycm9yIG1lc3NhZ2VzIHRvIGVtcHR5IHNvIHRoZSBtZXNzYWdlIGRpc3NhcGVhcnNcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLmpvdXJuZXlQcmV2aW91c1BhZ2VOdW1iZXIgPSB0aGlzLmZpZWxkU3RhdGU7XG4gICAgaWYgKHRoaXMuaGFzUHJldmlvdXMoKSAmJiB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTICYmICF0aGlzLmZsYWdUeXBlPy5saXN0T2ZWYWx1ZXMpIHtcbiAgICAgIHRoaXMuZmllbGRTdGF0ZSA9IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmhhc1ByZXZpb3VzKCkpIHtcbiAgICAgIHRoaXMuZmllbGRTdGF0ZS0tO1xuICAgIH1cbiAgICBzdXBlci5wcmV2aW91c1BhZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRGbGFnVG9Db2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBubyBtb3JlIHRoYW4gb25lIG5ldyBmbGFnIGlzIGJlaW5nIGFkZGVkIGF0IGEgdGltZSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggZWFjaCBGbGFncyBjYXNlIGZpZWxkIGFuZCByZW1vdmluZ1xuICAgIC8vIGFueSBwcmV2aW91cyBlbnRyeSBmcm9tIHRoZSBkZXRhaWxzIGFycmF5IHdoZXJlIHRoYXQgZW50cnkgaGFzIG5vIGlkIChoZW5jZSBpdCBpcyBuZXcgLSBhbmQgdGhlcmUgc2hvdWxkIGJlIG9ubHlcbiAgICAvLyBvbmUgc3VjaCBlbnRyeSkuIChUaGlzIHNjZW5hcmlvIG9jY3VycyBpZiB0aGUgdXNlciByZXBlYXRzIHRoZSBDYXNlIEZsYWcgY3JlYXRpb24gam91cm5leSBieSB1c2luZyB0aGUgXCJDaGFuZ2VcIlxuICAgIC8vIGxpbmsgYW5kIHNlbGVjdHMgZWl0aGVyIHRoZSBzYW1lIGZsYWcgbG9jYXRpb24gYXMgYmVmb3JlIG9yIGEgZGlmZmVyZW50IG9uZS4pXG4gICAgdGhpcy5mbGFnc0RhdGEuZm9yRWFjaChpbnN0YW5jZSA9PiB7XG4gICAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZvciBlYWNoIEZsYWdzIGNhc2UgZmllbGQgdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIHZhbHVlIHRvIHJlbW92ZSB0aGUgbmV3IHZhbHVlIGZyb21cbiAgICAgIGxldCB2YWx1ZSA9IGluc3RhbmNlLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgICBjb25zdCBwYXRoVG9WYWx1ZSA9IGluc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgICAgaWYgKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGhUb1ZhbHVlLnNsaWNlKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IHZhbHVlID0gdmFsdWVbcGFydF0pO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlPy5kZXRhaWxzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZOZXdGbGFnRGV0YWlsID0gdmFsdWUuZGV0YWlscy5maW5kSW5kZXgoZWxlbWVudCA9PiAhZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnaWQnKSk7XG4gICAgICAgIGlmIChpbmRleE9mTmV3RmxhZ0RldGFpbCA+IC0xKSB7XG4gICAgICAgICAgdmFsdWUuZGV0YWlscy5zcGxpY2UoaW5kZXhPZk5ld0ZsYWdEZXRhaWwsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb3JtVmFsdWVzID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWU7XG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGxvY2F0aW9uIC0gaW50ZXJuYWwgb3IgZXh0ZXJuYWwgLSBmb3IgdGhlIG5ldyBmbGFnLiBJZiByZXR1cm5lZCBhcyB1bmRlZmluZWQsIHRoaXNcbiAgICAvLyBpbmRpY2F0ZXMgYSBjb25maWd1cmF0aW9uIGVycm9yIHdpdGggdGhlIGV4dGVybmFsIGBGbGFnc2Agb2JqZWN0IGluc3RhbmNlXG4gICAgdGhpcy5kZXRlcm1pbmVkTG9jYXRpb24gPVxuICAgICAgdGhpcy5kZXRlcm1pbmVMb2NhdGlvbkZvckZsYWcoIXRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsLCB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbiwgZm9ybVZhbHVlcyk7XG4gICAgLy8gRG8gbm90IG11dGF0ZSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbjsgaWYgdGhpcy5zZWxlY3RlZEZsYWdzTG9jYXRpb24gYmVjb21lcyB1bmRlZmluZWQsXG4gICAgLy8gZGV0ZXJtaW5lTG9jYXRpb25Gb3JGbGFnKCkgd2lsbCBubyBsb25nZXIgZG8gYW55dGhpbmcgd2hlbiBjYWxsZWQgd2l0aCBpdCAtIGFuZCB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSB3aWxsXG4gICAgLy8gbm90IGJlIHJlZGlzcGxheWVkIGlmIHRoZSB1c2VyIGNsaWNrcyBcIk5leHRcIiBhZ2FpbiBvbiB0aGUgXCJBZGQgY29tbWVudHNcIiBwYWdlLCBhZnRlciB0aGUgZXJyb3IgaXMgZmlyc3Qgc2hvd25cblxuICAgIGlmICh0aGlzLmRldGVybWluZWRMb2NhdGlvbikge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZGV0ZXJtaW5lZExvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgICAgY29uc3QgZmxhZ0RhdGFSZWYgPSB0aGlzLmZsYWdzRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5wYXRoVG9GbGFnc0Zvcm1Hcm91cCA9PT0gcGF0aCk7XG4gICAgICBsZXQgZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IGZsYWdEYXRhUmVmLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIHZhbHVlIHRvIGFwcGx5IGNoYW5nZXMgdG9cbiAgICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICAgIGlmIChwYXRoLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGguc2xpY2UocGF0aC5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ3NDYXNlRmllbGRWYWx1ZVtwYXJ0XSk7XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgQ2FzZUZpZWxkIGZvciB0aGUgc2VsZWN0ZWQgZmxhZ3MgbG9jYXRpb24gaGFzIG5vIHZhbHVlLCBzZXQgaXQgdG8gYW4gZW1wdHkgb2JqZWN0IHNvIGl0IGNhbiBiZSBwb3B1bGF0ZWRcbiAgICAgIC8vIHdpdGggZmxhZyBkZXRhaWxzXG4gICAgICBpZiAoIWZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgICAgZmxhZ0RhdGFSZWYuY2FzZUZpZWxkLnZhbHVlID0ge307XG4gICAgICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnRGF0YVJlZi5jYXNlRmllbGQudmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBDcmVhdGUgYSBkZXRhaWxzIGFycmF5IGlmIG9uZSBkb2VzIG5vdCBleGlzdFxuICAgICAgaWYgKCFmbGFnc0Nhc2VGaWVsZFZhbHVlLmhhc093blByb3BlcnR5KCdkZXRhaWxzJykpIHtcbiAgICAgICAgZmxhZ3NDYXNlRmllbGRWYWx1ZS5kZXRhaWxzID0gW107XG4gICAgICB9XG4gICAgICAvLyBQb3B1bGF0ZSBuZXcgRmxhZ0RldGFpbCBpbnN0YW5jZSBhbmQgYWRkIHRvIHRoZSBGbGFncyBkYXRhIHdpdGhpbiB0aGUgQ2FzZUZpZWxkIGluc3RhbmNlIG9mIHRoZSBzZWxlY3RlZCBmbGFnXG4gICAgICAvLyBsb2NhdGlvblxuICAgICAgaWYgKCFmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMpe1xuICAgICAgICBmbGFnc0Nhc2VGaWVsZFZhbHVlLmRldGFpbHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscy5wdXNoKHsgdmFsdWU6IHRoaXMucG9wdWxhdGVOZXdGbGFnRGV0YWlsSW5zdGFuY2UoKSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY29ycmVjdCBsb2NhdGlvbiAoaS5lLiBlaXRoZXIgdGhlIGludGVybmFsIG9yIGV4dGVybmFsIGluc3RhbmNlIG9mIGEgYEZsYWdzYCBvYmplY3QpIGZvciBhIG5ldyBmbGFnLFxuICAgKiBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZzpcbiAgICpcbiAgICogKiBXaGV0aGVyIHRoZSB1c2VyIGlzIGludGVybmFsIG9yIGV4dGVybmFsIChubyBlZmZlY3QgZm9yIGV4dGVybmFsIHVzZXJzIGJlY2F1c2UgdGhleSBjYW4gYWNjZXNzIG9ubHkgdGhlIGV4dGVybmFsXG4gICAqIGluc3RhbmNlKVxuICAgKiAqIFRoZSBleGlzdGVuY2Ugb2YgdHdvIGBGbGFnc2Agb2JqZWN0cyAtIG9uZSBpbnRlcm5hbCwgb25lIGV4dGVybmFsIC0gbGlua2VkIGJ5IHRoZSBzYW1lIGBncm91cElkYDtcbiAgICogKiBGb3IgZmxhZ3Mgb2YgdHlwZSBcIk90aGVyXCIsIHdoZXRoZXIgXCJvbmx5IHZpc2libGUgdG8gSE1DVFMgc3RhZmZcIiBoYXMgYmVlbiBzZWxlY3RlZCBvciBub3QgKFwiT3RoZXJcIiBkZWZhdWx0cyB0b1xuICAgKiBleHRlcm5hbGx5IHZpc2libGUpO1xuICAgKiAqIEZvciBhbGwgb3RoZXIgZmxhZyB0eXBlcywgdGhlIHZhbHVlIG9mIHRoZSBgZXh0ZXJuYWxseUF2YWlsYWJsZWAgYXR0cmlidXRlLlxuICAgKlxuICAgKiBJZiB0aGUgdXNlciBpcyBpbnRlcm5hbCB0aGVuIHRoZSBuZXcgZmxhZyBzaG91bGQgYmUgYXNzaWduZWQgdG8gdGhlIGV4dGVybmFsIGBGbGFnc2AgaW5zdGFuY2UgaWY6XG4gICAqICogU3VjaCBhbiBpbnN0YW5jZSBleGlzdHMsIEFORFxuICAgKiAqIFRoZSBmbGFnIHR5cGUgaXMgXCJPdGhlclwiIGFuZCBcIm9ubHkgdmlzaWJsZSB0byBITUNUUyBzdGFmZlwiIHdhcyBub3Qgc2VsZWN0ZWQsIE9SXG4gICAqICogVGhlIGZsYWcgdHlwZSBpcyBub3QgXCJPdGhlclwiIGFuZCBgZXh0ZXJuYWxseUF2YWlsYWJsZWAgaXMgYHRydWVgLlxuICAgKlxuICAgKiBAcGFyYW0gaXNJbnRlcm5hbFVzZXIgV2hldGhlciB0aGUgY3VycmVudCB1c2VyIGlzIGludGVybmFsIG9yIG5vdFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbG9jYXRpb24gZm9yIHRoZSBuZXcgZmxhZ1xuICAgKiBAcGFyYW0gZm9ybVZhbHVlcyBBbGwgdGhlIHZhbHVlcyBmcm9tIHRoZSBgY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBgXG4gICAqIEByZXR1cm5zIFRoZSBjb3JyZWN0bHkgZGV0ZXJtaW5lZCBsb2NhdGlvbjogZWl0aGVyIHRoZSBpbnRlcm5hbCBvciBleHRlcm5hbCBsb2NhdGlvbiAoaWYgb25lIGV4aXN0cykgd2hlcmUgYSBncm91cElkXG4gICAqIGlzIHByZXNlbnQ7IHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBvdGhlcndpc2UuICoqTm90ZToqKiBJZiB0aGUgZXh0ZXJuYWwgbG9jYXRpb24gaXMgcmV0dXJuZWQgYXMgdW5kZWZpbmVkLCB0aGlzXG4gICAqIGluZGljYXRlcyBhIGNvbmZpZ3VyYXRpb24gZXJyb3JcbiAgICovXG4gIHB1YmxpYyBkZXRlcm1pbmVMb2NhdGlvbkZvckZsYWcoaXNJbnRlcm5hbFVzZXI6IGJvb2xlYW4sIHNlbGVjdGVkRmxhZ3NMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCxcbiAgICBmb3JtVmFsdWVzOiBhbnkpOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIHtcbiAgICBpZiAoaXNJbnRlcm5hbFVzZXIgJiYgc2VsZWN0ZWRGbGFnc0xvY2F0aW9uPy5mbGFncz8uZ3JvdXBJZCkge1xuICAgICAgaWYgKChmb3JtVmFsdWVzPy5mbGFnVHlwZT8uZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgJiYgIWZvcm1WYWx1ZXM/LmZsYWdJc1Zpc2libGVJbnRlcm5hbGx5T25seSkgfHxcbiAgICAgICAgICAoZm9ybVZhbHVlcz8uZmxhZ1R5cGU/LmZsYWdDb2RlICE9PSB0aGlzLm90aGVyRmxhZ1R5cGVDb2RlICYmIGZvcm1WYWx1ZXM/LmZsYWdUeXBlPy5leHRlcm5hbGx5QXZhaWxhYmxlKSkge1xuICAgICAgICAvLyBJZiBuZWNlc3NhcnksIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZ3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgZ3JvdXBJZCBhbmQgZXh0ZXJuYWwgdmlzaWJpbGl0eSAoc2hvdWxkIGJlXG4gICAgICAgIC8vIG9ubHkgb25lIHVubGVzcyBtaXNjb25maWd1cmVkKVxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5mbGFncy52aXNpYmlsaXR5Py50b0xvd2VyQ2FzZSgpID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICAgPyBzZWxlY3RlZEZsYWdzTG9jYXRpb25cbiAgICAgICAgICA6IHRoaXMuZmxhZ3NEYXRhLmZpbHRlcihcbiAgICAgICAgICAgIChmKSA9PiBmLmZsYWdzPy5ncm91cElkID09PSBzZWxlY3RlZEZsYWdzTG9jYXRpb24uZmxhZ3MuZ3JvdXBJZCAmJlxuICAgICAgICAgICAgICAgIGYuZmxhZ3M/LnZpc2liaWxpdHk/LnRvTG93ZXJDYXNlKCkgPT09ICdleHRlcm5hbCcpPy5bMF07XG4gICAgICAgIC8vIElmIGxvY2F0aW9uIGlzIG5vdCB0cnV0aHksIHNldCBhbiBlcnJvciBtZXNzYWdlIGFuZCBtYWtlIGNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwIGludmFsaWQgdG8gcHJldmVudFxuICAgICAgICAvLyBuYXZpZ2F0aW9uIHRvIHRoZSBzdW1tYXJ5IHBhZ2UgKGJ5IG5vdCB0cmlnZ2VyaW5nIHRoZSBzdWJtaXQgZXZlbnQpXG4gICAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogQ2FzZUZsYWdFcnJvck1lc3NhZ2UuTk9fRVhURVJOQUxfRkxBR1NfQ09MTEVDVElPTlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuc2V0RXJyb3JzKHtcbiAgICAgICAgICAgIG5vRXh0ZXJuYWxDb2xsZWN0aW9uOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGZsYWdzIG9iamVjdCB3aXRoIHRoZSBzYW1lIGdyb3VwSWQgYW5kIGludGVybmFsIHZpc2liaWxpdHkgKHNob3VsZCBiZVxuICAgICAgICAvLyBvbmx5IG9uZSB1bmxlc3MgbWlzY29uZmlndXJlZCk7IGFzc3VtZWQgdG8gYmUgaW50ZXJuYWwgaWYgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBzZWxlY3RlZEZsYWdzTG9jYXRpb24uZmxhZ3MudmlzaWJpbGl0eT8udG9Mb3dlckNhc2UoKSAhPT0gJ2V4dGVybmFsJ1xuICAgICAgICAgID8gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uXG4gICAgICAgICAgOiB0aGlzLmZsYWdzRGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAoZikgPT4gZi5mbGFncz8uZ3JvdXBJZCA9PT0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLmZsYWdzLmdyb3VwSWQgJiZcbiAgICAgICAgICAgICAgZi5mbGFncz8udmlzaWJpbGl0eT8udG9Mb3dlckNhc2UoKSAhPT0gJ2V4dGVybmFsJyk/LlswXTtcbiAgICAgICAgICAvLyBJZiBsb2NhdGlvbiBpcyBub3QgdHJ1dGh5LCBzZXQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgbWFrZSBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cCBpbnZhbGlkIHRvIHByZXZlbnRcbiAgICAgICAgICAvLyBuYXZpZ2F0aW9uIHRvIHRoZSBzdW1tYXJ5IHBhZ2UgKGJ5IG5vdCB0cmlnZ2VyaW5nIHRoZSBzdWJtaXQgZXZlbnQpXG4gICAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogQ2FzZUZsYWdFcnJvck1lc3NhZ2UuTk9fSU5URVJOQUxfRkxBR1NfQ09MTEVDVElPTlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuc2V0RXJyb3JzKHtcbiAgICAgICAgICAgIG5vSW50ZXJuYWxDb2xsZWN0aW9uOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZsYWdJbkNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIG5vIG1vcmUgdGhhbiBvbmUgZmxhZyBpcyBiZWluZyB1cGRhdGVkIGF0IGEgdGltZSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggZWFjaCBGbGFncyBjYXNlIGZpZWxkIGFuZCByZXNldHRpbmdcbiAgICAvLyB0aGUgZGVzY3JpcHRpb24sIGNvbW1lbnRzLCBzdGF0dXMsIGFuZCBkYXRlL3RpbWUgbW9kaWZpZWQgKGlmIHByZXNlbnQpIGZvciBlYWNoIGVudHJ5IGluIHRoZSBkZXRhaWxzIGFycmF5LCB3aXRoXG4gICAgLy8gb3JpZ2luYWwgdmFsdWVzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZm9ybWF0dGVkX3ZhbHVlIHByb3BlcnR5LiAoVGhpcyBzY2VuYXJpbyBvY2N1cnMgaWYgdGhlIHVzZXIgcmVwZWF0cyB0aGVcbiAgICAvLyBNYW5hZ2UgQ2FzZSBGbGFnIGpvdXJuZXkgYnkgdXNpbmcgdGhlIFwiQ2hhbmdlXCIgbGluayBhbmQgc2VsZWN0cyBhIGRpZmZlcmVudCBmbGFnIHRvIHVwZGF0ZS4pXG4gICAgdGhpcy5mbGFnc0RhdGEuZm9yRWFjaChpbnN0YW5jZSA9PiB7XG4gICAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZvciBlYWNoIEZsYWdzIGNhc2UgZmllbGQgdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIHZhbHVlIGZvciB3aGljaCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZXNcbiAgICAgIGxldCB2YWx1ZSA9IGluc3RhbmNlLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSBpbnN0YW5jZS5jYXNlRmllbGQ/LmZvcm1hdHRlZF92YWx1ZTtcbiAgICAgIGNvbnN0IHBhdGhUb1ZhbHVlID0gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgICBpZiAocGF0aFRvVmFsdWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVbcGFydF07XG4gICAgICAgICAgaWYgKGZvcm1hdHRlZFZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QoZm9ybWF0dGVkVmFsdWUpKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlW3BhcnRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWU/LmRldGFpbHM/Lmxlbmd0aCA+IDAgJiYgZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZGV0YWlscy5mb3JFYWNoKGZsYWdEZXRhaWwgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRmxhZ0RldGFpbCA9IGZvcm1hdHRlZFZhbHVlLmRldGFpbHM/LmZpbmQoZGV0YWlsID0+IGRldGFpbC5pZCA9PT0gZmxhZ0RldGFpbC5pZCk7XG4gICAgICAgICAgaWYgKG9yaWdpbmFsRmxhZ0RldGFpbCkge1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5vdGhlckRlc2NyaXB0aW9uID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5vdGhlckRlc2NyaXB0aW9uIHx8IG51bGw7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLm90aGVyRGVzY3JpcHRpb25fY3kgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/Lm90aGVyRGVzY3JpcHRpb25fY3kgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/LmZsYWdDb21tZW50IHx8IG51bGw7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmZsYWdDb21tZW50X2N5ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5mbGFnQ29tbWVudF9jeSB8fCBudWxsO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5mbGFnVXBkYXRlQ29tbWVudCA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZT8uZmxhZ1VwZGF0ZUNvbW1lbnQgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuc3RhdHVzID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlPy5zdGF0dXM7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLmRhdGVUaW1lTW9kaWZpZWQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWU/LmRhdGVUaW1lTW9kaWZpZWQgfHwgbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEZsYWcpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuc2VsZWN0ZWRNYW5hZ2VDYXNlTG9jYXRpb24pLnZhbHVlIGFzIEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGg7XG4gICAgfVxuICAgIGxldCBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gdGhpcy5zZWxlY3RlZEZsYWcuY2FzZUZpZWxkPy52YWx1ZTtcbiAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byBhcHBseSBjaGFuZ2VzIHRvXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuc2VsZWN0ZWRGbGFnLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICBpZiAocGF0aC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICB9XG4gICAgaWYgKGZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgIGNvbnN0IGZsYWdEZXRhaWxUb1VwZGF0ZSA9IGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscz8uZmluZChcbiAgICAgICAgZGV0YWlsID0+IGRldGFpbC5pZCA9PT0gdGhpcy5zZWxlY3RlZEZsYWcuZmxhZ0RldGFpbERpc3BsYXk/LmZsYWdEZXRhaWw/LmlkKTtcbiAgICAgIGlmIChmbGFnRGV0YWlsVG9VcGRhdGUpIHtcbiAgICAgICAgLy8gQ2FjaGUgdGhlICpvcmlnaW5hbCogc3RhdHVzIG9mIHRoZSBmbGFnIGJlZm9yZSBpdCBpcyBtb2RpZmllZC4gVGhpcyBpcyBuZWVkZWQgaWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgZmxhZyBzdGF0dXNcbiAgICAgICAgLy8gdGhlbiBkZWNpZGVzIHRvIHJldHVybiB0byBhbnkgcGFydCBvZiB0aGUgZmxhZyB1cGRhdGUgam91cm5leS4gVGhlIE1hbmFnZUNhc2VGbGFnc0NvbXBvbmVudCBhbmQgVXBkYXRlRmxhZ0NvbXBvbmVudFxuICAgICAgICAvLyBzaG91bGQgcmVmZXIgdG8gYSBmbGFnJ3Mgb3JpZ2luYWwgc3RhdHVzLCBub3QgdGhlIG9uZSBzZXQgdmlhIHRoZSBVSSBiZWNhdXNlIHRoaXMgaGFzbid0IGJlZW4gcGVyc2lzdGVkIHlldFxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGbGFnLm9yaWdpbmFsU3RhdHVzKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWcub3JpZ2luYWxTdGF0dXMgPSBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWU/LnN0YXR1cztcbiAgICAgICAgfVxuICAgICAgICAvLyBVcGRhdGUgZGVzY3JpcHRpb24gZmllbGRzIG9ubHkgaWYgZmxhZyB0eXBlIGlzIFwiT3RoZXJcIiAoZmxhZyBjb2RlIE9UMDAwMSk7IHRoZXNlIGZpZWxkcyBhcHBseSBvbmx5IHRvIHRoYXQgZmxhZyB0eXBlXG4gICAgICAgIC8vIElmIHRoZWlyIEZvcm1Db250cm9scyBkb24ndCBleGlzdCwgaXQgbWVhbnMgdGhlc2UgZmllbGRzIHdlcmVuJ3QgdmlzaXRlZCBhcyBwYXJ0IG9mIHRoZSBcIlVwZGF0ZSBGbGFnXCIgam91cm5leSwgc28gZG9cbiAgICAgICAgLy8gKm5vdCogdXBkYXRlIHRoZWlyIHZhbHVlcyAob3RoZXJ3aXNlIHRoZXkgd2lsbCBiZWNvbWUgdW5kZWZpbmVkKVxuICAgICAgICBpZiAoZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlPy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSkge1xuICAgICAgICAgIGlmICh0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuT1RIRVJfRkxBR19ERVNDUklQVElPTikpIHtcbiAgICAgICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5vdGhlckRlc2NyaXB0aW9uID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgIENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OKS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OX1dFTFNIKSkge1xuICAgICAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLm90aGVyRGVzY3JpcHRpb25fY3kgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT05fV0VMU0gpLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgdGhhdCBhbnkgY29tbWVudHMgZW50ZXJlZCB3aXRoIGxhbmd1YWdlIHNldCB0byBXZWxzaCBkbyBub3QgZW5kIHVwIGluIHRoZSBFbmdsaXNoIGNvbW1lbnRzIGZpZWxkXG4gICAgICAgIGlmICh0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSAhPT0gJ2N5Jykge1xuICAgICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnQ29tbWVudCA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UUyk/LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBvcHVsYXRlIGZyb20gdGhlICpFbmdsaXNoKiBjb21tZW50cyBmaWVsZCBpZjpcbiAgICAgICAgLy8gKiBUaGUgV2Vsc2ggY29tbWVudHMgZmllbGQgaGFzIG5vIHZhbHVlIChXZWxzaCBjb21tZW50cyBmaWVsZCBhY3F1aXJlcyBhIHZhbHVlIG9ubHkgd2hlbiBhbiBITUNUUyBpbnRlcm5hbCB1c2VyIGhhc1xuICAgICAgICAvLyBnb25lIHRocm91Z2ggdGhlIFwiYWRkIHRyYW5zbGF0aW9uXCIgc3RlcCBmb3IgTWFuYWdlIENhc2UgRmxhZ3MpLCBBTkRcbiAgICAgICAgLy8gKiBUaGUgbGFuZ3VhZ2UgaXMgc2V0IHRvIFdlbHNoXG4gICAgICAgIC8vIElmIHRoZSBGb3JtQ29udHJvbCBkb2Vzbid0IGV4aXN0LCBpdCBtZWFucyB0aGlzIGZpZWxkIHdhc24ndCB2aXNpdGVkIGFzIHBhcnQgb2YgdGhlIFwiVXBkYXRlIEZsYWdcIiBqb3VybmV5LCBzbyBkb1xuICAgICAgICAvLyAqbm90KiB1cGRhdGUgaXRzIHZhbHVlIChvdGhlcndpc2UgaXQgd2lsbCBiZSBvdmVycmlkZGVuKSAtIHVubGVzcyB0aGUgdXNlciBpcyBleHRlcm5hbCBBTkQgd29ya2luZyBpbiBXZWxzaFxuICAgICAgICBpZiAodGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTX1dFTFNIKSB8fCB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5Jykge1xuICAgICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnQ29tbWVudF9jeSA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UU19XRUxTSCk/LnZhbHVlXG4gICAgICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UU19XRUxTSCk/LnZhbHVlXG4gICAgICAgICAgICA6IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTKT8udmFsdWVcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnVXBkYXRlQ29tbWVudCA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5TVEFUVVNfQ0hBTkdFX1JFQVNPTik/LnZhbHVlO1xuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuc3RhdHVzID0gQ2FzZUZsYWdTdGF0dXNbdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLlNUQVRVUyk/LnZhbHVlXTtcbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmRhdGVUaW1lTW9kaWZpZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQXRGaW5hbFN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGVcbiAgICAgID8gdGhpcy5maWVsZFN0YXRlID09PSB0aGlzLm1hbmFnZUZsYWdGaW5hbFN0YXRlXG4gICAgICA6ICF0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZFxuICAgICAgICA/IHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFNcbiAgICAgICAgOiB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUztcbiAgfVxuXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvRXJyb3JFbGVtZW50KGVsZW1lbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGVsZW1lbnRJZCkge1xuICAgICAgY29uc3QgaHRtbEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuICAgICAgaWYgKGh0bWxFbGVtZW50KSB7XG4gICAgICAgIGh0bWxFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XG4gICAgICAgIGh0bWxFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uRmxhZ0NvbW1lbnRzT3B0aW9uYWxFbWl0dGVkKF86IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZmxhZ0NvbW1lbnRzT3B0aW9uYWwgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHBvcHVsYXRlTmV3RmxhZ0RldGFpbEluc3RhbmNlKCk6IEZsYWdEZXRhaWwge1xuICAgIGNvbnN0IGxhbmdTZWFyY2hUZXJtID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWVbJ2xhbmd1YWdlU2VhcmNoVGVybSddO1xuICAgIGNvbnN0IG1hbnVhbExhbmdFbnRyeSA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlWydtYW51YWxMYW5ndWFnZUVudHJ5J107XG4gICAgY29uc3QgZmxhZ1R5cGUgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZVsnZmxhZ1R5cGUnXTtcbiAgICBjb25zdCBvdGhlckRlc2MgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZVsnb3RoZXJEZXNjcmlwdGlvbiddO1xuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwPy52YWx1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5mbGFnVHlwZT8ubmFtZSxcbiAgICAgIG5hbWVfY3k6IGZsYWdUeXBlPy5uYW1lX2N5LFxuICAgICAgLy8gQ3VycmVudGx5LCBzdWJUeXBlVmFsdWUsIHN1YlR5cGVWYWx1ZV9jeSBhbmQgc3ViVHlwZUtleSBhcmUgYXBwbGljYWJsZSBvbmx5IHRvIGxhbmd1YWdlIGZsYWcgdHlwZXNcbiAgICAgIHN1YlR5cGVWYWx1ZTogbGFuZ1NlYXJjaFRlcm0gJiYgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdlbidcbiAgICAgICAgPyBsYW5nU2VhcmNoVGVybS52YWx1ZVxuICAgICAgICA6IG1hbnVhbExhbmdFbnRyeSAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2VuJ1xuICAgICAgICAgID8gbWFudWFsTGFuZ0VudHJ5XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgc3ViVHlwZVZhbHVlX2N5OiBsYW5nU2VhcmNoVGVybSAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5J1xuICAgICAgICA/IGxhbmdTZWFyY2hUZXJtPy52YWx1ZV9jeVxuICAgICAgICA6IG1hbnVhbExhbmdFbnRyeSAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5J1xuICAgICAgICAgID8gbWFudWFsTGFuZ0VudHJ5XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgLy8gRm9yIHVzZXItZW50ZXJlZCAoaS5lLiBub24tUmVmZXJlbmNlIERhdGEpIGxhbmd1YWdlcywgdGhlcmUgaXMgbm8ga2V5XG4gICAgICBzdWJUeXBlS2V5OiBsYW5nU2VhcmNoVGVybVxuICAgICAgICA/IGxhbmdTZWFyY2hUZXJtLmtleVxuICAgICAgICA6IG51bGwsXG4gICAgICBvdGhlckRlc2NyaXB0aW9uOiBmbGFnVHlwZT8uZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgJiZcbiAgICAgICAgb3RoZXJEZXNjICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnZW4nXG4gICAgICAgID8gb3RoZXJEZXNjXG4gICAgICAgIDogbnVsbCxcbiAgICAgIG90aGVyRGVzY3JpcHRpb25fY3k6IGZsYWdUeXBlPy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSAmJlxuICAgICAgICBvdGhlckRlc2MgJiYgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdjeSdcbiAgICAgICAgPyBvdGhlckRlc2NcbiAgICAgICAgOiBudWxsLFxuICAgICAgZmxhZ0NvbW1lbnQ6IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnZW4nXG4gICAgICAgID8gZm9ybVZhbHVlcz8uZmxhZ0NvbW1lbnRzXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZsYWdDb21tZW50X2N5OiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2N5J1xuICAgICAgICA/IGZvcm1WYWx1ZXM/LmZsYWdDb21tZW50c1xuICAgICAgICA6IG51bGwsXG4gICAgICBmbGFnVXBkYXRlQ29tbWVudDogZm9ybVZhbHVlcz8uc3RhdHVzUmVhc29uLFxuICAgICAgZGF0ZVRpbWVDcmVhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBwYXRoOiBmbGFnVHlwZT8uUGF0aCAmJlxuICAgICAgICBmbGFnVHlwZT8uUGF0aC5tYXAocGF0aFZhbHVlID0+IE9iamVjdC5hc3NpZ24oeyBpZDogbnVsbCwgdmFsdWU6IHBhdGhWYWx1ZSB9KSksXG4gICAgICBoZWFyaW5nUmVsZXZhbnQ6IGZsYWdUeXBlPy5oZWFyaW5nUmVsZXZhbnQgPyAnWWVzJyA6ICdObycsXG4gICAgICBmbGFnQ29kZTogZmxhZ1R5cGU/LmZsYWdDb2RlLFxuICAgICAgLy8gU3RhdHVzIHNob3VsZCBiZSBzZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQgaXMgZm9yIHRoaXMgZmxhZyB0eXBlLCBpZiBmbGFnIGlzIGJlaW5nIGNyZWF0ZWQgYnkgYW4gZXh0ZXJuYWxcbiAgICAgIC8vIHVzZXIsIG90aGVyd2lzZSBpdCBzaG91bGQgYmUgc2V0IHRvIFwiQWN0aXZlXCIgaWYgQ2FzZSBGbGFncyB2Mi4xIGlzIE5PVCBlbmFibGVkLCBvciB0aGUgc2VsZWN0ZWQgc3RhdHVzIGlmIGl0IGlzXG4gICAgICBzdGF0dXM6IHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXG4gICAgICAgID8gZmxhZ1R5cGU/LmRlZmF1bHRTdGF0dXNcbiAgICAgICAgOiAhdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRcbiAgICAgICAgICA/IENhc2VGbGFnU3RhdHVzLkFDVElWRVxuICAgICAgICAgIDogQ2FzZUZsYWdTdGF0dXNbZm9ybVZhbHVlcz8uc2VsZWN0ZWRTdGF0dXNdLFxuICAgICAgYXZhaWxhYmxlRXh0ZXJuYWxseTogZmxhZ1R5cGU/LmV4dGVybmFsbHlBdmFpbGFibGUgPyAnWWVzJyA6ICdObydcbiAgICB9IGFzIEZsYWdEZXRhaWw7XG4gIH1cblxuICBwdWJsaWMgbW92ZVRvRmluYWxSZXZpZXdTdGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmxhc3RQYWdlRmllbGRTdGF0ZSA9IHRoaXMuZmllbGRTdGF0ZTtcbiAgICB0aGlzLnNldEZsYWdzQ2FzZUZpZWxkVmFsdWUoKTtcbiAgICAvLyBDaGVjayB0aGF0IG5vIGVycm9ycyBoYXZlIGJlZW4gc2V0IG9uIGNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwIChieSBkZXRlcm1pbmVMb2NhdGlvbkZvckZsYWcoKSk7IHByZXZlbnQgbW92aW5nIHRvXG4gICAgLy8gZmluYWwgcmV2aWV3IHN0YWdlIGlmIGVycm9ycyBleGlzdFxuICAgIGlmICghdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5lcnJvcnMpIHtcbiAgICAgIC8vIENsZWFyIHRoZSBcIm5vdEFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkXCIgZXJyb3JcbiAgICAgIHRoaXMuYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLnNldFRyaWdnZXJTdWJtaXRFdmVudCh0cnVlKTtcbiAgICAgIC8vIFVwZGF0ZSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbiB3aXRoIHRoZSBjb3JyZWN0bHkgZGV0ZXJtaW5lZCBsb2NhdGlvbiwgc28gdGhlIGNvcnJlY3QgdmFsdWUgaXMgYXZhaWxhYmxlIHRvXG4gICAgICAvLyBSZWFkQ2FzZUZsYWdGaWVsZENvbXBvbmVudCB3aGVuIGl0IGluaXRpYWxpc2VzIHRoZSBDYXNlIEZsYWcgU3VtbWFyeSBwYWdlXG4gICAgICB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbiA9IHRoaXMuZGV0ZXJtaW5lZExvY2F0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZS5zZXRKb3VybmV5U3RhdGUodGhpcyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgdGhpcy5oYW5kbGVCYWNrQnV0dG9uKTtcbiAgICAvLyBSZXNldCB0aGUgZmllbGRzdGF0ZVRvTmF2aWdhdGUgYXMgdGhlIHdyaXRlIGpvdXJuZXkgY29tcGxldGVzIGF0IHRoaXMgcG9pbnRcbiAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZpZWxkU3RhdGVUb05hdmlnYXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2FzZVRpdGxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtYW5hZ2VGbGFnRmluYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLklTX1dFTFNIX1RSQU5TTEFUSU9OX05FRURFRCk/LnZhbHVlXG4gICAgICA/IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURV9XRUxTSF9UUkFOU0xBVElPTiA6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlcihjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNhc2VGaWVsZHMuZmluZChjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSk/LmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXI7XG4gIH1cbn1cbiIsIjwhLS0gRXJyb3IgbWVzc2FnZSBzdW1tYXJ5IC0tPlxuPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiIGFyaWEtbGFiZWxsZWRieT1cImVycm9yLXN1bW1hcnktdGl0bGVcIiByb2xlPVwiYWxlcnRcIlxuICB0YWJpbmRleD1cIi0xXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCI+XG4gIDxoMiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX3RpdGxlXCIgaWQ9XCJlcnJvci1zdW1tYXJ5LXRpdGxlXCI+XG4gICAge3snVGhlcmUgaXMgYSBwcm9ibGVtJyB8IHJweFRyYW5zbGF0ZX19XG4gIDwvaDI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgPHVsIGNsYXNzPVwiZ292dWstbGlzdCBnb3Z1ay1lcnJvci1zdW1tYXJ5X19saXN0XCI+XG4gICAgICA8bGk+XG4gICAgICAgIDxhIChjbGljayk9XCJuYXZpZ2F0ZVRvRXJyb3JFbGVtZW50KGVycm9yTWVzc2FnZS5maWVsZElkKVwiIGNsYXNzPVwidmFsaWRhdGlvbi1lcnJvclwiPnt7ZXJyb3JNZXNzYWdlLmRlc2NyaXB0aW9uIHxcbiAgICAgICAgICBycHhUcmFuc2xhdGV9fTwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nU3dpdGNoXT1cImZpZWxkU3RhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MT0NBVElPTlwiPlxuICAgICAgPGNjZC1zZWxlY3QtZmxhZy1sb2NhdGlvbiBcbiAgICAgICAgI2pvdXJuZXlDaGlsZCBcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFxuICAgICAgICBbZmxhZ3NEYXRhXT1cImZsYWdzRGF0YVwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9jY2Qtc2VsZWN0LWZsYWctbG9jYXRpb24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRVwiPlxuICAgICAgPGNjZC1zZWxlY3QtZmxhZy10eXBlIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgXG4gICAgICAgIFtqdXJpc2RpY3Rpb25dPVwianVyaXNkaWN0aW9uXCJcbiAgICAgICAgW2Nhc2VUeXBlSWRdPVwiY2FzZVR5cGVJZFwiIFxuICAgICAgICBbaG1jdHNTZXJ2aWNlSWRdPVwiaG1jdHNTZXJ2aWNlSWRcIlxuICAgICAgICBbaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXT1cImlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbFwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkXCJcbiAgICAgICAgW3NlbGVjdGVkRmxhZ3NMb2NhdGlvbl09XCJzZWxlY3RlZEZsYWdzTG9jYXRpb25cIiBcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZXIpPVwib25GbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmbGFnVHlwZVN1YkpvdXJuZXlFbWl0dGVyKT1cInVwZGF0ZUZsYWdUeXBlU3ViSm91cm5leSgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1zZWxlY3QtZmxhZy10eXBlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xBTkdVQUdFX0lOVEVSUFJFVEVSXCI+XG4gICAgICA8Y2NkLXNlYXJjaC1sYW5ndWFnZS1pbnRlcnByZXRlciBcbiAgICAgICAgI2pvdXJuZXlDaGlsZCBcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFxuICAgICAgICBbZmxhZ1R5cGVdPVwiZmxhZ1R5cGVcIiBcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9jY2Qtc2VhcmNoLWxhbmd1YWdlLWludGVycHJldGVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTXCI+XG4gICAgICA8Y2NkLWFkZC1jb21tZW50cyBcbiAgICAgICAgI2pvdXJuZXlDaGlsZCBcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFxuICAgICAgICBbb3B0aW9uYWxdPVwiZmxhZ0NvbW1lbnRzT3B0aW9uYWxcIlxuICAgICAgICBbaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXT1cImlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbFwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWRdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9jY2QtYWRkLWNvbW1lbnRzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVU1wiPlxuICAgICAgPGNjZC1jb25maXJtLWZsYWctc3RhdHVzIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCJcbiAgICAgICAgW2RlZmF1bHRTdGF0dXNdPVwiZmxhZ1R5cGUuZGVmYXVsdFN0YXR1c1wiIFxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1jb25maXJtLWZsYWctc3RhdHVzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGVcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIFtuZ1N3aXRjaF09XCJmaWVsZFN0YXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1NcIj5cbiAgICAgIDxjY2QtbWFuYWdlLWNhc2UtZmxhZ3MgXG4gICAgICAgICNqb3VybmV5Q2hpbGQgXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIiBcbiAgICAgICAgW2ZsYWdzRGF0YV09XCJmbGFnc0RhdGFcIlxuICAgICAgICBbY2FzZVRpdGxlXT1cImNhc2VUaXRsZVwiIFxuICAgICAgICBbZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJdPVwiZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1tYW5hZ2UtY2FzZS1mbGFncz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVcIj5cbiAgICAgIDxjY2QtdXBkYXRlLWZsYWcgXG4gICAgICAgICNqb3VybmV5Q2hpbGQgXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICBbZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJdPVwiZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJcIiBcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9jY2QtdXBkYXRlLWZsYWc+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OXCI+XG4gICAgICA8Y2NkLXVwZGF0ZS1mbGFnLWFkZC10cmFuc2xhdGlvbi1mb3JtIFxuICAgICAgICAjam91cm5leUNoaWxkIFxuICAgICAgICBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPlxuICAgICAgPC9jY2QtdXBkYXRlLWZsYWctYWRkLXRyYW5zbGF0aW9uLWZvcm0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -18,7 +18,7 @@ export class ReadCaseLinkFieldComponent extends AbstractFieldReadComponent {
|
|
|
18
18
|
hasReference() {
|
|
19
19
|
return this.caseField.value && this.caseField.value.CaseReference;
|
|
20
20
|
}
|
|
21
|
-
static ɵfac = /*@__PURE__*/ (() => { let ɵReadCaseLinkFieldComponent_BaseFactory; return function ReadCaseLinkFieldComponent_Factory(
|
|
21
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵReadCaseLinkFieldComponent_BaseFactory; return function ReadCaseLinkFieldComponent_Factory(__ngFactoryType__) { return (ɵReadCaseLinkFieldComponent_BaseFactory || (ɵReadCaseLinkFieldComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ReadCaseLinkFieldComponent)))(__ngFactoryType__ || ReadCaseLinkFieldComponent); }; })();
|
|
22
22
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReadCaseLinkFieldComponent, selectors: [["ccd-read-case-link-field"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["target", "_blank", 3, "href", 4, "ngIf"], ["target", "_blank", 3, "href"], [1, "text-16"]], template: function ReadCaseLinkFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
23
23
|
i0.ɵɵtemplate(0, ReadCaseLinkFieldComponent_a_0_Template, 4, 5, "a", 0);
|
|
24
24
|
} if (rf & 2) {
|
|
@@ -30,4 +30,4 @@ export class ReadCaseLinkFieldComponent extends AbstractFieldReadComponent {
|
|
|
30
30
|
args: [{ selector: 'ccd-read-case-link-field', template: "<a *ngIf=\"hasReference()\" href=\"/v2/case/{{caseField.value.CaseReference}}\" target=\"_blank\">\n <span class=\"text-16\">{{caseField.value.CaseReference ? (caseField.value.CaseReference | ccdCaseReference) : ''}}</span>\n</a>\n" }]
|
|
31
31
|
}], null, null); })();
|
|
32
32
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ReadCaseLinkFieldComponent, { className: "ReadCaseLinkFieldComponent", filePath: "lib/shared/components/palette/case-link/read-case-link-field.component.ts", lineNumber: 8 }); })();
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1jYXNlLWxpbmstZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1saW5rL3JlYWQtY2FzZS1saW5rLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtbGluay9yZWFkLWNhc2UtbGluay1maWVsZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7O0lDQXZGLEFBREYsNEJBQTRGLGNBQ3BFO0lBQUEsWUFBMkY7O0lBQ25ILEFBRG1ILGlCQUFPLEVBQ3RIOzs7SUFGc0IsMEdBQWlEO0lBQ25ELGVBQTJGO0lBQTNGLDRIQUEyRjs7QURNbkgsTUFBTSxPQUFPLDBCQUEyQixTQUFRLDBCQUEwQjtJQUVqRSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO0lBQ3BFLENBQUM7cVJBSlUsMEJBQTBCLHlCQUExQiwwQkFBMEI7NkRBQTFCLDBCQUEwQjtZQ1B2Qyx1RUFBNEY7O1lBQXhGLHlDQUFvQjs7O2lGRE9YLDBCQUEwQjtjQUp0QyxTQUFTOzJCQUNFLDBCQUEwQjs7a0ZBR3pCLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFJlYWRDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLWZpZWxkL2Fic3RyYWN0LWZpZWxkLXJlYWQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXJlYWQtY2FzZS1saW5rLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICdyZWFkLWNhc2UtbGluay1maWVsZC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBSZWFkQ2FzZUxpbmtGaWVsZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmllbGRSZWFkQ29tcG9uZW50IHtcblxuICBwdWJsaWMgaGFzUmVmZXJlbmNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhc2VGaWVsZC52YWx1ZSAmJiB0aGlzLmNhc2VGaWVsZC52YWx1ZS5DYXNlUmVmZXJlbmNlO1xuICB9XG59XG4iLCI8YSAqbmdJZj1cImhhc1JlZmVyZW5jZSgpXCIgaHJlZj1cIi92Mi9jYXNlL3t7Y2FzZUZpZWxkLnZhbHVlLkNhc2VSZWZlcmVuY2V9fVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICA8c3BhbiBjbGFzcz1cInRleHQtMTZcIj57e2Nhc2VGaWVsZC52YWx1ZS5DYXNlUmVmZXJlbmNlID8gKGNhc2VGaWVsZC52YWx1ZS5DYXNlUmVmZXJlbmNlIHwgY2NkQ2FzZVJlZmVyZW5jZSkgOiAnJ319PC9zcGFuPlxuPC9hPlxuIl19
|
|
@@ -87,7 +87,7 @@ export class WriteCaseLinkFieldComponent extends AbstractFieldWriteComponent {
|
|
|
87
87
|
}
|
|
88
88
|
return new RegExp('^\\b\\d{4}[ -]?\\d{4}[ -]?\\d{4}[ -]?\\d{4}\\b$').test(valueString.trim());
|
|
89
89
|
}
|
|
90
|
-
static ɵfac = /*@__PURE__*/ (() => { let ɵWriteCaseLinkFieldComponent_BaseFactory; return function WriteCaseLinkFieldComponent_Factory(
|
|
90
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵWriteCaseLinkFieldComponent_BaseFactory; return function WriteCaseLinkFieldComponent_Factory(__ngFactoryType__) { return (ɵWriteCaseLinkFieldComponent_BaseFactory || (ɵWriteCaseLinkFieldComponent_BaseFactory = i0.ɵɵgetInheritedFactory(WriteCaseLinkFieldComponent)))(__ngFactoryType__ || WriteCaseLinkFieldComponent); }; })();
|
|
91
91
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WriteCaseLinkFieldComponent, selectors: [["ccd-write-case-link-field"]], viewQuery: function WriteCaseLinkFieldComponent_Query(rf, ctx) { if (rf & 1) {
|
|
92
92
|
i0.ɵɵviewQuery(_c0, 5);
|
|
93
93
|
} if (rf & 2) {
|
|
@@ -122,4 +122,4 @@ export class WriteCaseLinkFieldComponent extends AbstractFieldWriteComponent {
|
|
|
122
122
|
args: ['writeComplexFieldComponent']
|
|
123
123
|
}] }); })();
|
|
124
124
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteCaseLinkFieldComponent, { className: "WriteCaseLinkFieldComponent", filePath: "lib/shared/components/palette/case-link/write-case-link-field.component.ts", lineNumber: 11 }); })();
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtY2FzZS1saW5rLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtbGluay93cml0ZS1jYXNlLWxpbmstZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1saW5rL3dyaXRlLWNhc2UtbGluay1maWVsZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7OztJQ0ZsRiwrQkFBaUQ7SUFBQSxZQUE2Qjs7SUFBQSxpQkFBTzs7O0lBQXBDLGNBQTZCO0lBQTdCLDREQUE2Qjs7O0lBRWhGLCtCQUFvRDtJQUFBLFlBQXNDOztJQUFBLGlCQUFPOzs7SUFBN0MsY0FBc0M7SUFBdEMsc0VBQXNDOzs7SUFDMUYsK0JBQWdJO0lBQzlILFlBQ0Y7O0lBQUEsaUJBQU87OztJQURMLGNBQ0Y7SUFERSxpSEFDRjs7QURHRixNQUFNLE9BQU8sMkJBQTRCLFNBQVEsMkJBQTJCO0lBRW5FLG9CQUFvQixDQUFrQjtJQUN0QyxhQUFhLENBQVk7SUFHekIsMEJBQTBCLENBQTZCO0lBRXZELFFBQVE7UUFDYixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMs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bml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFic3RyYWN0RmllbGRXcml0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvYWJzdHJhY3QtZmllbGQtd3JpdGUuY29tcG9uZW50JztcbmltcG9ydCB7IFdyaXRlQ29tcGxleEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcGxleC93cml0ZS1jb21wbGV4LWZpZWxkLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC13cml0ZS1jYXNlLWxpbmstZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJ3dyaXRlLWNhc2UtbGluay1maWVsZC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXcml0ZUNhc2VMaW5rRmllbGRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZpZWxkV3JpdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBjYXNlUmVmZXJlbmNlQ29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuICBwdWJsaWMgY2FzZUxpbmtHcm91cDogRm9ybUdyb3VwO1xuXG4gIEBWaWV3Q2hpbGQoJ3dyaXRlQ29tcGxleEZpZWxkQ29tcG9uZW50JylcbiAgcHVibGljIHdyaXRlQ29tcGxleEZpZWxkQ29tcG9uZW50OiBXcml0ZUNvbXBsZXhGaWVsZENvbXBvbmVudDtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICB0aGlzLmNhc2VMaW5rR3JvdXAgPSB0aGlzLnJlZ2lzdGVyQ29udHJvbChuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgQ2FzZVJlZmVyZW5jZTogbmV3IEZvcm1Db250cm9sKHRoaXMuY2FzZUZpZWxkLnZhbHVlLkNhc2VSZWZlcmVuY2UsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgfSksIHRydWUpIGFzIEZvcm1Hcm91cDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXNlTGlua0dyb3VwID0gdGhpcy5yZWdpc3RlckNvbnRyb2wobmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIENhc2VSZWZlcmVuY2U6IG5ldyBGb3JtQ29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIH0pLCB0cnVlKSBhcyBGb3JtR3JvdXA7XG4gICAgfVxuICAgIHRoaXMuY2FzZVJlZmVyZW5jZUNvbnRyb2wgPSB0aGlzLmNhc2VMaW5rR3JvdXAuY29udHJvbHNbJ0Nhc2VSZWZlcmVuY2UnXTtcbiAgICB0aGlzLmNhc2VSZWZlcmVuY2VDb250cm9sLnNldFZhbGlkYXRvcnModGhpcy5jYXNlUmVmZXJlbmNlVmFsaWRhdG9yKCkpO1xuXG4gICAgLy8gRW5zdXJlIHRoYXQgYWxsIHN1Yi1maWVsZHMgaW5oZXJpdCB0aGUgc2FtZSB2YWx1ZSBmb3IgcmV0YWluX2hpZGRlbl92YWx1ZSBhcyB0aGlzIHBhcmVudDsgYWx0aG91Z2ggYSBDYXNlTGlua1xuICAgIC8vIGZpZWxkIHVzZXMgdGhlIENvbXBsZXggdHlwZSwgaXQgaXMgbWVhbnQgdG8gYmUgdHJlYXRlZCBhcyBvbmUgZmllbGRcbiAgICBpZiAodGhpcy5jYXNlRmllbGQgJiYgdGhpcy5jYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcpIHtcbiAgICAgIGZvciAoY29uc3QgY2FzZUxpbmtTdWJGaWVsZCBvZiB0aGlzLmNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgIGNhc2VMaW5rU3ViRmllbGQucmV0YWluX2hpZGRlbl92YWx1ZSA9IHRoaXMuY2FzZUZpZWxkLnJldGFpbl9oaWRkZW5fdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYXNlUmVmZXJlbmNlVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPT4ge1xuICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsaWRDYXNlUmVmZXJlbmNlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6ICdQbGVhc2UgdXNlIGEgdmFsaWQgMTYgRGlnaXQgQ2FzZSBSZWZlcmVuY2UnIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY29udHJvbC50b3VjaGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZXJyb3I6ICdQbGVhc2UgdXNlIGEgdmFsaWQgMTYgRGlnaXQgQ2FzZSBSZWZlcmVuY2UnIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHZhbGlkQ2FzZVJlZmVyZW5jZSh2YWx1ZVN0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWx1ZVN0cmluZykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXlxcXFxiXFxcXGR7NH1bIC1dP1xcXFxkezR9WyAtXT9cXFxcZHs0fVsgLV0/XFxcXGR7NH1cXFxcYiQnKS50ZXN0KHZhbHVlU3RyaW5nLnRyaW0oKSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yJzogIWNhc2VSZWZlcmVuY2VDb250cm9sLnZhbGlkICYmIChjYXNlUmVmZXJlbmNlQ29udHJvbC5kaXJ0eSB8fCBjYXNlUmVmZXJlbmNlQ29udHJvbC50b3VjaGVkKX1cIj5cbiAgPGxhYmVsIFtmb3JdPVwiaWQoKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1sYWJlbFwiICpuZ0lmPVwiY2FzZUZpZWxkLmxhYmVsXCI+e3tjYXNlRmllbGQgfCBjY2RGaWVsZExhYmVsfX08L3NwYW4+XG4gIDwvbGFiZWw+XG4gIDxzcGFuIGNsYXNzPVwiZm9ybS1oaW50XCIgKm5nSWY9XCJjYXNlRmllbGQuaGludF90ZXh0XCI+e3tjYXNlRmllbGQuaGludF90ZXh0IHwgcnB4VHJhbnNsYXRlfX08L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiY2FzZVJlZmVyZW5jZUNvbnRyb2wuZXJyb3JzICYmIChjYXNlUmVmZXJlbmNlQ29udHJvbC5kaXJ0eSB8fCBjYXNlUmVmZXJlbmNlQ29udHJvbC50b3VjaGVkKVwiPlxuICAgIHt7Y2FzZVJlZmVyZW5jZUNvbnRyb2wuZXJyb3JzIHwgY2NkRmlyc3RFcnJvcjpjYXNlRmllbGQubGFiZWx9fVxuICA8L3NwYW4+XG4gIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBib3R0b20tMzBcIiBbaWRdPVwiaWQoKVwiIHR5cGU9XCJ0ZXh0XCIgW2Zvcm1Db250cm9sXT1cImNhc2VSZWZlcmVuY2VDb250cm9sXCI+XG48L2Rpdj5cbiJdfQ==
|
package/esm2022/lib/shared/components/palette/collection/collection-create-checker.service.mjs
CHANGED
|
@@ -33,10 +33,10 @@ export class CollectionCreateCheckerService {
|
|
|
33
33
|
hasCreateAccess(caseField, role) {
|
|
34
34
|
return !!caseField.acls.find(acl => acl.role === role && acl.create === true);
|
|
35
35
|
}
|
|
36
|
-
static ɵfac = function CollectionCreateCheckerService_Factory(
|
|
36
|
+
static ɵfac = function CollectionCreateCheckerService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CollectionCreateCheckerService)(); };
|
|
37
37
|
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: CollectionCreateCheckerService, factory: CollectionCreateCheckerService.ɵfac });
|
|
38
38
|
}
|
|
39
39
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionCreateCheckerService, [{
|
|
40
40
|
type: Injectable
|
|
41
41
|
}], null, null); })();
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1jcmVhdGUtY2hlY2tlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY29sbGVjdGlvbi9jb2xsZWN0aW9uLWNyZWF0ZS1jaGVja2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLDhCQUE4QjtJQUNsQyw0QkFBNEIsQ0FBQyxTQUFvQixFQUFFLE9BQWdCO1FBQ3hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0RCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzlFLEtBQUssQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQztnQkFDcEQsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN0RCxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFNBQW9CO1FBQy9DLElBQUksa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2pDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUN2RixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDckMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1FBQ2pFLENBQUM7UUFDRCxPQUFPLGtCQUFrQixDQUFDO0lBQzVCLENBQUM7SUFFTyxTQUFTLENBQUMsU0FBb0I7UUFDcEMsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7SUFDakQsQ0FBQztJQUVPLFlBQVksQ0FBQyxTQUFvQjtRQUN2QyxPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQztJQUNwRCxDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQW9CLEVBQUUsSUFBUztRQUNyRCxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDakYsQ0FBQzt3SEFwQ1UsOEJBQThCO2dFQUE5Qiw4QkFBOEIsV0FBOUIsOEJBQThCOztpRkFBOUIsOEJBQThCO2NBRDFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vZGVmaW5pdGlvbic7XG5pbXBvcnQgeyBQcm9maWxlIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3Byb2ZpbGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNyZWF0ZUNoZWNrZXJTZXJ2aWNlIHtcbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0Rm9yQ2hpbGRyZW4oY2FzZUZpZWxkOiBDYXNlRmllbGQsIHByb2ZpbGU6IFByb2ZpbGUpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2FzZUZpZWxkQ2hpbGRyZW4oY2FzZUZpZWxkKTtcblxuICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCEhcHJvZmlsZS51c2VyLmlkYW0ucm9sZXMuZmluZChyb2xlID0+IHRoaXMuaGFzQ3JlYXRlQWNjZXNzKGNoaWxkLCByb2xlKSkpIHtcbiAgICAgICAgICBjaGlsZC5kaXNwbGF5X2NvbnRleHQgPSBjYXNlRmllbGQuZGlzcGxheV9jb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQ29sbGVjdGlvbihjaGlsZCkgfHwgdGhpcy5pc0NvbXBsZXgoY2hpbGQpKSB7XG4gICAgICAgICAgdGhpcy5zZXREaXNwbGF5Q29udGV4dEZvckNoaWxkcmVuKGNoaWxkLCBwcm9maWxlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXNlRmllbGRDaGlsZHJlbihjYXNlRmllbGQ6IENhc2VGaWVsZCk6IENhc2VGaWVsZFtdIHtcbiAgICBsZXQgY2hpbGRyZW5DYXNlRmllbGRzID0gW107XG4gICAgaWYgKHRoaXMuaXNDb2xsZWN0aW9uKGNhc2VGaWVsZCkpIHtcbiAgICAgIGNoaWxkcmVuQ2FzZUZpZWxkcyA9IGNhc2VGaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyB8fCBbXTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb21wbGV4KGNhc2VGaWVsZCkpIHtcbiAgICAgIGNoaWxkcmVuQ2FzZUZpZWxkcyA9IGNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzIHx8IFtdO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW5DYXNlRmllbGRzO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbXBsZXgoY2FzZUZpZWxkOiBDYXNlRmllbGQpIHtcbiAgICByZXR1cm4gY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbGxlY3Rpb24oY2FzZUZpZWxkOiBDYXNlRmllbGQpIHtcbiAgICByZXR1cm4gY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbGxlY3Rpb24nO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNDcmVhdGVBY2Nlc3MoY2FzZUZpZWxkOiBDYXNlRmllbGQsIHJvbGU6IGFueSkge1xuICAgIHJldHVybiAhIWNhc2VGaWVsZC5hY2xzLmZpbmQoIGFjbCA9PiBhY2wucm9sZSA9PT0gcm9sZSAmJiBhY2wuY3JlYXRlID09PSB0cnVlKTtcbiAgfVxufVxuIl19
|