@fundamental-ngx/platform 0.48.0-rc.21 → 0.48.0-rc.23
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/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +6 -8
- package/esm2022/form/combobox/commons/base-combobox.mjs +6 -5
- package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +8 -8
- package/esm2022/form/form-generator/form-generator.service.mjs +8 -13
- package/esm2022/form/form-group/form-field/form-field.component.mjs +27 -29
- package/esm2022/form/form-group/form-group.component.mjs +37 -40
- package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +9 -8
- package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +3 -3
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +10 -13
- package/esm2022/form/multi-combobox/multi-combobox.interface.mjs +1 -1
- package/esm2022/form/multi-input/base-multi-input.mjs +5 -4
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +4 -7
- package/esm2022/form/radio-group/radio-group.component.mjs +23 -24
- package/esm2022/form/select/commons/base-select.mjs +3 -3
- package/esm2022/form/step-input/base.step-input.mjs +25 -35
- package/esm2022/form/step-input/number/number-step-input.component.mjs +3 -3
- package/esm2022/form/step-input/step-input-action-button.mjs +6 -10
- package/esm2022/icon-tab-bar/components/icon-tab-bar-base.class.mjs +6 -8
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.mjs +10 -19
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.mjs +7 -9
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.mjs +7 -8
- package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +9 -20
- package/esm2022/list/list.component.mjs +7 -8
- package/esm2022/menu/menu.component.mjs +3 -4
- package/esm2022/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.mjs +8 -11
- package/esm2022/message-popover/message-popover.component.mjs +52 -53
- package/esm2022/message-popover/models/message-popover-wrapper.interface.mjs +1 -1
- package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +3 -7
- package/esm2022/search-field/search-field.component.mjs +20 -21
- package/esm2022/settings-generator/settings-generator.service.mjs +9 -10
- package/esm2022/shared/form/base.input.mjs +7 -8
- package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +10 -15
- package/esm2022/split-menu-button/split-menu-button.component.mjs +7 -18
- package/esm2022/table/components/reset-button/reset-button.component.mjs +5 -6
- package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +6 -7
- package/esm2022/table/components/table-column-resizer/table-column-resizer.component.mjs +6 -8
- package/esm2022/table/components/table-group-row/table-group-row.component.mjs +3 -7
- package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +29 -13
- package/esm2022/table/components/table-header-row/table-header-row.component.mjs +7 -11
- package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +5 -7
- package/esm2022/table/components/table-p13-dialog/filtering/filtering.component.mjs +5 -8
- package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +5 -8
- package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +5 -8
- package/esm2022/table/components/table-popping-row/table-popping-row.component.mjs +4 -5
- package/esm2022/table/components/table-row/table-row.component.mjs +6 -13
- package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +34 -21
- package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +5 -8
- package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +6 -9
- package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +6 -9
- package/esm2022/table/table.component.mjs +39 -49
- package/esm2022/table-helpers/directives/table-cell-header-popover.directive.mjs +1 -1
- package/esm2022/table-helpers/directives/table-cell-resizable.directive.mjs +8 -10
- package/esm2022/table-helpers/directives/table-data-source.directive.mjs +6 -6
- package/esm2022/table-helpers/services/table-column-resize.service.mjs +14 -17
- package/esm2022/table-helpers/services/table-responsive.service.mjs +6 -11
- package/esm2022/table-helpers/services/table.service.mjs +20 -18
- package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +10 -18
- package/esm2022/wizard-generator/base-wizard-generator.mjs +12 -19
- package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +5 -4
- package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +7 -13
- package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +8 -7
- package/fesm2022/fundamental-ngx-platform-form.mjs +137 -174
- package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +24 -46
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-list.mjs +6 -7
- package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-menu.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs +57 -60
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-search-field.mjs +21 -38
- package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +6 -8
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-shared.mjs +6 -7
- package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +9 -15
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +6 -17
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +42 -52
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table.mjs +145 -157
- package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +9 -17
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +20 -33
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
- package/form/combobox/combobox-mobile/combobox/combobox-mobile.component.d.ts +2 -4
- package/form/form-generator/form-generator/form-generator.component.d.ts +1 -1
- package/form/form-generator/form-generator.service.d.ts +3 -7
- package/form/form-group/form-field/form-field.component.d.ts +12 -12
- package/form/form-group/form-group.component.d.ts +35 -31
- package/form/multi-combobox/commons/base-multi-combobox.d.ts +2 -2
- package/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.d.ts +3 -5
- package/form/multi-combobox/multi-combobox.interface.d.ts +3 -3
- package/form/multi-input/multi-input-mobile/multi-input-mobile.component.d.ts +2 -4
- package/form/radio-group/radio-group.component.d.ts +3 -3
- package/form/step-input/base.step-input.d.ts +5 -6
- package/form/step-input/step-input-action-button.d.ts +4 -7
- package/fundamental-ngx-platform-v0.48.0-rc.23.tgz +0 -0
- package/icon-tab-bar/components/icon-tab-bar-base.class.d.ts +1 -1
- package/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.d.ts +5 -8
- package/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.d.ts +1 -1
- package/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.d.ts +1 -1
- package/icon-tab-bar/icon-tab-bar.component.d.ts +4 -6
- package/list/list.component.d.ts +1 -3
- package/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.d.ts +2 -4
- package/message-popover/message-popover.component.d.ts +13 -20
- package/message-popover/models/message-popover-wrapper.interface.d.ts +2 -2
- package/package.json +4 -4
- package/search-field/search-field-mobile/search-field/search-field-mobile.component.d.ts +4 -6
- package/search-field/search-field.component.d.ts +6 -4
- package/settings-generator/settings-generator.service.d.ts +1 -1
- package/shared/form/base.input.d.ts +2 -2
- package/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.d.ts +4 -8
- package/split-menu-button/split-menu-button.component.d.ts +3 -8
- package/table/components/reset-button/reset-button.component.d.ts +2 -3
- package/table/components/table-cell-header-popover/table-cell-header-popover.component.d.ts +1 -2
- package/table/components/table-column-resizer/table-column-resizer.component.d.ts +1 -1
- package/table/components/table-group-row/table-group-row.component.d.ts +2 -5
- package/table/components/table-header-cell-content/table-header-cell-content.component.d.ts +11 -6
- package/table/components/table-header-row/table-header-row.component.d.ts +1 -1
- package/table/components/table-p13-dialog/columns/columns.component.d.ts +2 -4
- package/table/components/table-p13-dialog/filtering/filtering.component.d.ts +1 -4
- package/table/components/table-p13-dialog/grouping/grouping.component.d.ts +1 -4
- package/table/components/table-p13-dialog/sorting/sorting.component.d.ts +1 -4
- package/table/components/table-row/table-row.component.d.ts +2 -2
- package/table/components/table-toolbar/table-toolbar.component.d.ts +20 -7
- package/table/components/table-view-settings-dialog/filtering/filters.component.d.ts +1 -4
- package/table/components/table-view-settings-dialog/grouping/grouping.component.d.ts +1 -4
- package/table/components/table-view-settings-dialog/sorting/sorting.component.d.ts +1 -4
- package/table/table.component.d.ts +4 -18
- package/table-helpers/directives/table-cell-header-popover.directive.d.ts +2 -3
- package/table-helpers/directives/table-cell-resizable.directive.d.ts +1 -1
- package/table-helpers/directives/table-data-source.directive.d.ts +1 -1
- package/table-helpers/services/table-column-resize.service.d.ts +2 -2
- package/table-helpers/services/table-responsive.service.d.ts +3 -5
- package/table-helpers/services/table.service.d.ts +12 -10
- package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +2 -1
- package/wizard-generator/base-wizard-generator.d.ts +4 -8
- package/wizard-generator/components/wizard-body/wizard-body.component.d.ts +3 -7
- package/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.d.ts +1 -1
- package/esm2022/search-field/search-field-mobile/search-field-mobile.module.mjs +0 -16
- package/fundamental-ngx-platform-v0.48.0-rc.21.tgz +0 -0
- package/search-field/search-field-mobile/search-field-mobile.module.d.ts +0 -7
|
@@ -3,7 +3,7 @@ import { ENTER } from '@angular/cdk/keycodes';
|
|
|
3
3
|
import { ChangeDetectorRef, ContentChildren, Directive, ElementRef, EventEmitter, Host, Inject, Input, Optional, Output, QueryList, Self, SkipSelf, ViewChild } from '@angular/core';
|
|
4
4
|
import { ControlContainer, NgControl, NgForm } from '@angular/forms';
|
|
5
5
|
import { fromEvent, Subject, Subscription } from 'rxjs';
|
|
6
|
-
import {
|
|
6
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
7
|
import { FD_FORM_FIELD, FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';
|
|
8
8
|
import { KeyUtil, TemplateDirective, warnOnce } from '@fundamental-ngx/cdk/utils';
|
|
9
9
|
import { FD_DEFAULT_ICON_FONT_FAMILY } from '@fundamental-ngx/core/icon';
|
|
@@ -196,7 +196,7 @@ export class BaseSelect extends CollectionBaseInput {
|
|
|
196
196
|
return;
|
|
197
197
|
}
|
|
198
198
|
fromEvent(window, 'resize')
|
|
199
|
-
.pipe(
|
|
199
|
+
.pipe(takeUntilDestroyed(this._destroyed))
|
|
200
200
|
.subscribe(() => this._getOptionsListWidth());
|
|
201
201
|
}
|
|
202
202
|
/** @hidden */
|
|
@@ -402,4 +402,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
|
|
|
402
402
|
type: ContentChildren,
|
|
403
403
|
args: [TemplateDirective]
|
|
404
404
|
}] } });
|
|
405
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zZWxlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2Zvcm0vc2VsZWN0L2NvbW1vbnMvYmFzZS1zZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlDLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLElBQUksRUFDSixNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEVBRVIsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUE4QixNQUFNLDRCQUE0QixDQUFDO0FBQzlHLE9BQU8sRUFHSCxPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDWCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSwyQkFBMkIsRUFBWSxNQUFNLDRCQUE0QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUczRCxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDM0IsTUFBTSxrQ0FBa0MsQ0FB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QURyQixLQUFLO2dCQU9OLEtBQUs7c0JBREosS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBTU4sV0FBVztzQkFEVixLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBU04sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBS0YsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVdGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFjTixRQUFRO3NCQURQLEtBQUs7Z0JBT04sUUFBUTtzQkFEUCxLQUFLO2dCQVNOLGNBQWM7c0JBRGIsS0FBSztnQkFLRixJQUFJO3NCQURQLEtBQUs7Z0JBaUJOLGVBQWU7c0JBRGQsTUFBTTtnQkFLUCxhQUFhO3NCQURaLFNBQVM7dUJBQUMsYUFBYTtnQkFLeEIsZUFBZTtzQkFEZCxlQUFlO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEVOVEVSIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNlbGYsXG4gICAgU2tpcFNlbGYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZEX0ZPUk1fRklFTEQsIEZEX0ZPUk1fRklFTERfQ09OVFJPTCwgU2luZ2xlRHJvcGRvd25WYWx1ZUNvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5U2VydmljZSxcbiAgICBGb2N1c0VzY2FwZURpcmVjdGlvbixcbiAgICBLZXlVdGlsLFxuICAgIFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIHdhcm5PbmNlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEZEX0RFRkFVTFRfSUNPTl9GT05UX0ZBTUlMWSwgSWNvbkZvbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWNvbic7XG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZUNvbmZpZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5pbXBvcnQgeyBQb3BvdmVyRmlsbE1vZGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7XG4gICAgQ29sbGVjdGlvbkJhc2VJbnB1dCxcbiAgICBpc0pzT2JqZWN0LFxuICAgIGlzT3B0aW9uSXRlbSxcbiAgICBpc1N0cmluZyxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2xcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgVGV4dEFsaWdubWVudCB9IGZyb20gJy4uLy4uL2NvbWJvYm94JztcbmltcG9ydCB7IFNlbGVjdE9wdGlvbkl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvc2VsZWN0Lm1vZGVscyc7XG5pbXBvcnQgeyBTZWxlY3RDb25maWcgfSBmcm9tICcuLi9zZWxlY3QuY29uZmlnJztcblxuZXhwb3J0IHR5cGUgRmRwU2VsZWN0RGF0YTxUPiA9IFNlbGVjdE9wdGlvbkl0ZW1bXSB8IE9ic2VydmFibGU8VFtdPiB8IFRbXTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogYEZkcFNlbGVjdGlvbkNoYW5nZUV2ZW50YCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zIGluIGZhdm91ciBvZiBwbGFpbiB2YWx1ZSBlbWlzc2lvblxuICovXG5leHBvcnQgY2xhc3MgRmRwU2VsZWN0aW9uQ2hhbmdlRXZlbnQge1xuICAgIC8qKlxuICAgICAqIFNlbGVjdCBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50XG4gICAgICogQHBhcmFtIHBheWxvYWQgc2VsZWN0ZWQgdmFsdWVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHBheWxvYWQ6IGFueSAvLyBDb250YWlucyBzZWxlY3RlZCBpdGVtXG4gICAgKSB7XG4gICAgICAgIHdhcm5PbmNlKCdGZHBTZWxlY3Rpb25DaGFuZ2VFdmVudCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zIGluIGZhdm91ciBvZiBwbGFpbiB2YWx1ZSBlbWlzc2lvbicpO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVNlbGVjdFxuICAgIGV4dGVuZHMgQ29sbGVjdGlvbkJhc2VJbnB1dFxuICAgIGltcGxlbWVudHMgU2luZ2xlRHJvcGRvd25WYWx1ZUNvbnRyb2wsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICAgIC8qKiBQcm92aWRlcyBtYXhpbXVtIGRlZmF1bHQgaGVpZ2h0IGZvciB0aGUgb3B0aW9uUGFuZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEhlaWdodCA9ICcyNTBweCc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgc2VsZWN0IHNob3VsZCBiZSBidWlsdCBvbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogVGVsbHMgdGhlIHNlbGVjdCBpZiB3ZSBuZWVkIHRvIGdyb3VwIGl0ZW1zICovXG4gICAgQElucHV0KClcbiAgICBncm91cCA9IGZhbHNlO1xuXG4gICAgLyoqIEEgZmllbGQgbmFtZSB0byB1c2UgdG8gZ3JvdXAgZGF0YSBieSAoc3VwcG9ydCBkb3R0ZWQgbm90YXRpb24pICovXG4gICAgQElucHV0KClcbiAgICBncm91cEtleT86IHN0cmluZztcblxuICAgIC8qKiBUaGUgZmllbGQgdG8gc2hvdyBkYXRhIGluIHNlY29uZGFyeSBjb2x1bW4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeUtleT86IHN0cmluZztcblxuICAgIC8qKiBTaG93IHRoZSBzZWNvbmQgY29sdW1uIChBcHBsaWNhYmxlIGZvciB0d28gY29sdW1ucyBsYXlvdXQpICovXG4gICAgQElucHV0KClcbiAgICBzaG93U2Vjb25kYXJ5VGV4dCA9IGZhbHNlO1xuXG4gICAgLyoqIEdseXBoIHRvIGFkZCBpY29uIGluIHRoZSBzZWxlY3QgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2x5cGggPSAnc2xpbS1hcnJvdy1kb3duJztcblxuICAgIC8qKiBHbHlwaCBmb250IGZhbWlseSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2x5cGhGb250OiBJY29uRm9udCA9IEZEX0RFRkFVTFRfSUNPTl9GT05UX0ZBTUlMWTtcblxuICAgIC8qKiBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgcG9wb3ZlciBzaG91bGQgYmUgYXBwZW5kZWQuICovXG4gICAgQElucHV0KClcbiAgICBhcHBlbmRUbzogRWxlbWVudFJlZjtcblxuICAgIC8qKiBUcmlnZ2VyIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICB0cmlnZ2VyVmFsdWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFByZXNldCBvcHRpb25zIGZvciB0aGUgc2VsZWN0IGJvZHkgd2lkdGguXG4gICAgICogKiBgYXQtbGVhc3RgIHdpbGwgYXBwbHkgYSBtaW5pbXVtIHdpZHRoIHRvIHRoZSBib2R5IGVxdWl2YWxlbnQgdG8gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sLlxuICAgICAqICogYGVxdWFsYCB3aWxsIGFwcGx5IGEgd2lkdGggdG8gdGhlIGJvZHkgZXF1aXZhbGVudCB0byB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICogKiBMZWF2ZSBibGFuayBmb3Igbm8gZWZmZWN0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsbENvbnRyb2xNb2RlOiBQb3BvdmVyRmlsbE1vZGUgPSAnYXQtbGVhc3QnO1xuXG4gICAgLyoqIEhvcml6b250YWxseSBhbGlnbiB0ZXh0IGluc2lkZSB0aGUgc2Vjb25kIGNvbHVtbiAoQXBwbGljYWJsZSBmb3IgdHdvIGNvbHVtbnMgbGF5b3V0KSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2Vjb25kYXJ5VGV4dEFsaWdubWVudDogVGV4dEFsaWdubWVudCA9ICdyaWdodCc7XG5cbiAgICAvKipcbiAgICAgKiBNYXggd2lkdGggb2YgbGlzdCBjb250YWluZXJcbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgd2lkdGg6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3QgY29tcG9uZW50IGlzIHJlYWRvbmx5LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIC8qKiBQbGFjZWhvbGRlciBmb3IgdGhlIHNlbGVjdC4gQXBwZWFycyBpbiB0aGVcbiAgICAgKiB0cmlnZ2VyYm94IGlmIG5vIG9wdGlvbiBpcyBzZWxlY3RlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBjbG9zZSB0aGUgcG9wb3ZlciBvbiBvdXRzaWRlIGNsaWNrLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xvc2VPbk91dHNpZGVDbGljayA9IHRydWU7XG5cbiAgICAvKiogQ3VzdG9tIHRlbXBsYXRlIHVzZWQgdG8gYnVpbGQgY29udHJvbCBib2R5LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqIEJpbmRzIHRvIGNvbnRyb2wgYXJpYS1sYWJlbGxlZEJ5IGF0dHJpYnV0ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnkgPSBudWxsO1xuXG4gICAgLyoqIFNldHMgY29udHJvbCBhcmlhLWxhYmVsIGF0dHJpYnV0ZSB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsID0gbnVsbDtcblxuICAgIC8qKiBTZWxlY3QgSW5wdXQgTW9iaWxlIENvbmZpZ3VyYXRpb24gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZyA9IHsgaGFzQ2xvc2VCdXR0b246IHRydWUgfTtcblxuICAgIC8qKlxuICAgICAqIFN0cmluZyByZW5kZXJlZCBhcyBmaXJzdCB2YWx1ZSBpbiB0aGUgcG9wdXAgd2hpY2ggbGV0IHRoZSB1c2VyIHRvIG1ha2UgJ25vIHNlbGVjdGlvbicgZnJvbVxuICAgICAqIGF2YWlsYWJsZSBsaXN0IG9mIHZhbHVlcy4gV2hlbiB0aGlzIG9wdGlvbiBpcyBhY3RpdmUgYW5kIHVzZSBtYWtlIHRoaXMgc2VsZWN0aW9uIHdlIHNhdmUgYVxuICAgICAqIE5VTEwgdmFsdWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5vVmFsdWVMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgbm90IHRvIHdyYXAgdGV4dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9XcmFwVGV4dCA9IGZhbHNlO1xuXG4gICAgLyoqIFR1cm5zIG9uL29mZiBBZGp1c3RhYmxlIFdpZHRoIGZlYXR1cmUgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIC8qKiBGaXJzdCBDb2x1bW4gcmF0aW8gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBmaXJzdENvbHVtblJhdGlvKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fZmlyc3RDb2x1bW5SYXRpbyA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgZmlyc3RDb2x1bW5SYXRpbygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlyc3RDb2x1bW5SYXRpbztcbiAgICB9XG5cbiAgICAvKiogU2Vjb29uZCBDb2x1bW4gcmF0aW8gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWNvbmRDb2x1bW5SYXRpbyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3NlY29uZENvbHVtblJhdGlvID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCBzZWNvbmRDb2x1bW5SYXRpbygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Vjb25kQ29sdW1uUmF0aW87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWluIHdpZHRoIG9mIGxpc3QgY29udGFpbmVyXG4gICAgICpcbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWluV2lkdGg/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBNYXggd2lkdGggb2YgbGlzdCBjb250YWluZXJcbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4V2lkdGg/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBBY3Rpb24gdG8gcGVyZm9ybSB3aGVuIHVzZXIgc2hpZnRzIGZvY3VzIGZyb20gdGhlIGRyb3Bkb3duLlxuICAgICAqIC0gYGNsb3NlYCB3aWxsIGNsb3NlIHRoZSBkcm9wZG93biBwcmVzZXJ2aW5nIHByZXZpb3VzbHkgc2VsZWN0ZWQgdmFsdWUuXG4gICAgICogLSBgY2xvc2VBbmRTZWxlY3RgIHdpbGwgY2xvc2UgdGhlIGRyb3Bkb3duIGFuZCBzZWxlY3QgbGFzdCBmb2N1c2VkIGRyb3Bkb3duIGl0ZW0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0YWJPdXRTdHJhdGVneTogJ2Nsb3NlJyB8ICdjbG9zZUFuZFNlbGVjdCcgPSAnY2xvc2UnO1xuXG4gICAgLyoqIERhdGEgZm9yIHN1Z2dlc3Rpb24gbGlzdCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxpc3QodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbkl0ZW1zID0gdGhpcy5fY29udmVydFRvT3B0aW9uSXRlbXModmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBsaXN0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25JdGVtcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjYW5DbG9zZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5tb2JpbGUgJiYgdGhpcy5tb2JpbGVDb25maWcuYXBwcm92ZUJ1dHRvblRleHQpO1xuICAgIH1cblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gaXRlbSBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZkcFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKExpc3RDb21wb25lbnQpXG4gICAgbGlzdENvbXBvbmVudDogTGlzdENvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBjdXN0b21UZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZURpcmVjdGl2ZT47XG5cbiAgICAvKiogQ3VzdG9tIE9wdGlvbiBpdGVtIFRlbXBsYXRlXG4gICAgICogKiBAaGlkZGVuXG4gICAgICogKi9cbiAgICBfb3B0aW9uSXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIFNlY29uZGFyeSBpdGVtIFRlbXBsYXRlXG4gICAgICogQGhpZGRlblxuICAgICAqICovXG4gICAgX3NlY29uZGFyeUl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBTZWxlY3RlZCBvcHRpb24gaXRlbSBUZW1wbGF0ZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKiAqL1xuICAgIF9zZWxlY3RlZEl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NvbnRlbnREZW5zaXR5U2VydmljZTogQ29udGVudERlbnNpdHlTZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBvcHRpb24gaXRlbXNcbiAgICAgKiBAaGlkZGVuXG4gICAgICogKi9cbiAgICBfb3B0aW9uSXRlbXM6IFNlbGVjdE9wdGlvbkl0ZW1bXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlYXJjaElucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3QgaXMgb3BlbmVkLiAqL1xuICAgIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogTmVlZCBmb3Igb3BlbmluZyBtb2JpbGUgdmVyc2lvblxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX29wZW5DaGFuZ2UgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmlyc3RDb2x1bW5SYXRpbzogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWNvbmRDb2x1bW5SYXRpbzogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIHJlYWRvbmx5IGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcmVhZG9ubHkgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSByZWFkb25seSBuZ0Zvcm06IE5nRm9ybSxcbiAgICAgICAgcHJvdGVjdGVkIHNlbGVjdENvbmZpZzogU2VsZWN0Q29uZmlnLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRCkgZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTERfQ09OVFJPTCkgZm9ybUNvbnRyb2w6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbFxuICAgICkge1xuICAgICAgICBzdXBlcihjZCwgZWxlbWVudFJlZiwgbmdDb250cm9sLCBjb250cm9sQ29udGFpbmVyLCBuZ0Zvcm0sIGZvcm1GaWVsZCwgZm9ybUNvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0V2luZG93UmVzaXplKCk7XG4gICAgICAgIHRoaXMuX2Fzc2lnbkN1c3RvbVRlbXBsYXRlcygpO1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBpZiAodGhpcy5fZHNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSXMgZW1wdHkgc2VhcmNoIGZpZWxkICovXG4gICAgZ2V0IGlzRW1wdHlWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBzZXRWYWx1ZShuZXdWYWx1ZTogYW55LCBlbWl0T25DaGFuZ2UgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoZW1pdE9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoeyBwYXlsb2FkOiB0aGlzLnZhbHVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ2xvc2UgbGlzdCAqICovXG4gICAgY2xvc2UoZXZlbnQ6IE1vdXNlRXZlbnQgfCBudWxsID0gbnVsbCwgZm9yY2VDbG9zZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5pZCA9PT0gdGhpcy5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pc09wZW4gJiYgKGZvcmNlQ2xvc2UgfHwgdGhpcy5jYW5DbG9zZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fb3BlbkNoYW5nZS5uZXh0KHRoaXMuX2lzT3Blbik7XG4gICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2hvd0xpc3QoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pc09wZW4gIT09IGlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5faXNPcGVuID0gaXNPcGVuO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuX29wZW5DaGFuZ2UubmV4dChpc09wZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVQcmVzc0VudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB2YWx1ZTogU2VsZWN0T3B0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAoIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgcGFzc2VkIHRvIGxpc3QgY29tcG9uZW50ICovXG4gICAgaGFuZGxlTGlzdEZvY3VzRXNjYXBlKGRpcmVjdGlvbjogRm9jdXNFc2NhcGVEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3VwJykge1xuICAgICAgICAgICAgdGhpcy5fc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFdpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZ2V0T3B0aW9uc0xpc3RXaWR0aCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5hdXRvUmVzaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9nZXRPcHRpb25zTGlzdFdpZHRoKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3B0aW9uc0xpc3RXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IGJvZHkub2Zmc2V0V2lkdGggLSBib2R5LmNsaWVudFdpZHRoO1xuICAgICAgICB0aGlzLm1heFdpZHRoID0gd2luZG93LmlubmVyV2lkdGggLSBzY3JvbGxCYXJXaWR0aCAtIHJlY3QubGVmdDtcbiAgICAgICAgdGhpcy5taW5XaWR0aCA9IHJlY3Qud2lkdGggLSAyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb3JpZ2luYWwgZGF0YSB0byBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydFRvT3B0aW9uSXRlbXMoaXRlbXM6IGFueVtdKTogU2VsZWN0T3B0aW9uSXRlbVtdIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zWzBdO1xuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlSXNPcHRpb25JdGVtID0gaXNPcHRpb25JdGVtKGl0ZW0pO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVJc09wdGlvbkl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcyBhcyBTZWxlY3RPcHRpb25JdGVtW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzT2JqZWN0ID0gaXNKc09iamVjdChpdGVtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlSXNPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvT3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVJc1N0cmluZyA9IGlzU3RyaW5nKGl0ZW0pO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVJc1N0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRQcmltaXRpdmVUb09wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGRhdGEgdG8gT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRPYmplY3RzVG9PcHRpb25JdGVtcyhpdGVtczogYW55W10pOiBTZWxlY3RPcHRpb25JdGVtW10ge1xuICAgICAgICBpZiAodGhpcy5zaG93U2Vjb25kYXJ5VGV4dCAmJiB0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydE9iamVjdHNUb0RlZmF1bHRPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IG9iamVjdFtdIGRhdGEgdG8gU2Vjb25kYXJ5IE9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0T2JqZWN0c1RvU2Vjb25kYXJ5T3B0aW9uSXRlbXM8Sz4oaXRlbXM6IEtbXSk6IFNlbGVjdE9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEl0ZW1zOiBTZWxlY3RPcHRpb25JdGVtW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGlzcGxheVZhbHVlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICBzZWNvbmRhcnlUZXh0OiB0aGlzLm9iamVjdEdldCh2YWx1ZSwgdGhpcy5zZWNvbmRhcnlLZXkpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmxvb2t1cFZhbHVlKHZhbHVlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBQcmltaXRpdmUgZGF0YShCb29sZWFuLCBTdHJpbmcsIE51bWJlcikgdG8gT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRQcmltaXRpdmVUb09wdGlvbkl0ZW1zKGl0ZW1zOiBzdHJpbmdbXSk6IFNlbGVjdE9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEl0ZW1zOiBTZWxlY3RPcHRpb25JdGVtW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7IGxhYmVsOiB2YWx1ZSwgdmFsdWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvYmplY3RbXSB0byBPcHRpb25JdGVtcyBJbnRlcmZhY2UgKERlZmF1bHQpXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRPYmplY3RzVG9EZWZhdWx0T3B0aW9uSXRlbXMoaXRlbXM6IGFueVtdKTogU2VsZWN0T3B0aW9uSXRlbVtdIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0SXRlbXM6IFNlbGVjdE9wdGlvbkl0ZW1bXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbXNbaV07XG4gICAgICAgICAgICBzZWxlY3RJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5kaXNwbGF5VmFsdWUodmFsdWUpLFxuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RJdGVtcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEFzc2lnbiBjdXN0b20gdGVtcGxhdGVzXG4gICAgICogKi9cbiAgICBwcml2YXRlIF9hc3NpZ25DdXN0b21UZW1wbGF0ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzLmZvckVhY2goKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRlbXBsYXRlLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdfb3B0aW9uSXRlbVRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9uSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ19zZWNvbmRhcnlJdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWNvbmRhcnlJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnX3NlbGVjdGVkSXRlbVRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
405
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zZWxlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2Zvcm0vc2VsZWN0L2NvbW1vbnMvYmFzZS1zZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlDLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLElBQUksRUFDSixNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEVBRVIsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQThCLE1BQU0sNEJBQTRCLENBQUM7QUFDOUcsT0FBTyxFQUdILE9BQU8sRUFDUCxpQkFBaUIsRUFDakIsUUFBUSxFQUNYLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLDJCQUEyQixFQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzNELE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUMzQixNQUFNLGtDQUFrQyxD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QjtzQkFEckIsS0FBSztnQkFPTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQU1OLFdBQVc7c0JBRFYsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQVNOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFXRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBY04sUUFBUTtzQkFEUCxLQUFLO2dCQU9OLFFBQVE7c0JBRFAsS0FBSztnQkFTTixjQUFjO3NCQURiLEtBQUs7Z0JBS0YsSUFBSTtzQkFEUCxLQUFLO2dCQWlCTixlQUFlO3NCQURkLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGFBQWE7Z0JBS3hCLGVBQWU7c0JBRGQsZUFBZTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBFTlRFUiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0LFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTZWxmLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGRF9GT1JNX0ZJRUxELCBGRF9GT1JNX0ZJRUxEX0NPTlRST0wsIFNpbmdsZURyb3Bkb3duVmFsdWVDb250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eVNlcnZpY2UsXG4gICAgRm9jdXNFc2NhcGVEaXJlY3Rpb24sXG4gICAgS2V5VXRpbCxcbiAgICBUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICB3YXJuT25jZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGRF9ERUZBVUxUX0lDT05fRk9OVF9GQU1JTFksIEljb25Gb250IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgTGlzdENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgUG9wb3ZlckZpbGxNb2RlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5pbXBvcnQge1xuICAgIENvbGxlY3Rpb25CYXNlSW5wdXQsXG4gICAgaXNKc09iamVjdCxcbiAgICBpc09wdGlvbkl0ZW0sXG4gICAgaXNTdHJpbmcsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IFRleHRBbGlnbm1lbnQgfSBmcm9tICcuLi8uLi9jb21ib2JveCc7XG5pbXBvcnQgeyBTZWxlY3RPcHRpb25JdGVtIH0gZnJvbSAnLi4vbW9kZWxzL3NlbGVjdC5tb2RlbHMnO1xuaW1wb3J0IHsgU2VsZWN0Q29uZmlnIH0gZnJvbSAnLi4vc2VsZWN0LmNvbmZpZyc7XG5cbmV4cG9ydCB0eXBlIEZkcFNlbGVjdERhdGE8VD4gPSBTZWxlY3RPcHRpb25JdGVtW10gfCBPYnNlcnZhYmxlPFRbXT4gfCBUW107XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIGBGZHBTZWxlY3Rpb25DaGFuZ2VFdmVudGAgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBpbiBmYXZvdXIgb2YgcGxhaW4gdmFsdWUgZW1pc3Npb25cbiAqL1xuZXhwb3J0IGNsYXNzIEZkcFNlbGVjdGlvbkNoYW5nZUV2ZW50IHtcbiAgICAvKipcbiAgICAgKiBTZWxlY3Qgc2VsZWN0aW9uIGNoYW5nZSBldmVudFxuICAgICAqIEBwYXJhbSBwYXlsb2FkIHNlbGVjdGVkIHZhbHVlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBwYXlsb2FkOiBhbnkgLy8gQ29udGFpbnMgc2VsZWN0ZWQgaXRlbVxuICAgICkge1xuICAgICAgICB3YXJuT25jZSgnRmRwU2VsZWN0aW9uQ2hhbmdlRXZlbnQgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBpbiBmYXZvdXIgb2YgcGxhaW4gdmFsdWUgZW1pc3Npb24nKTtcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VTZWxlY3RcbiAgICBleHRlbmRzIENvbGxlY3Rpb25CYXNlSW5wdXRcbiAgICBpbXBsZW1lbnRzIFNpbmdsZURyb3Bkb3duVmFsdWVDb250cm9sLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgICAvKiogUHJvdmlkZXMgbWF4aW11bSBkZWZhdWx0IGhlaWdodCBmb3IgdGhlIG9wdGlvblBhbmVsICovXG4gICAgQElucHV0KClcbiAgICBtYXhIZWlnaHQgPSAnMjUwcHgnO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHNlbGVjdCBzaG91bGQgYmUgYnVpbHQgb24gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFRlbGxzIHRoZSBzZWxlY3QgaWYgd2UgbmVlZCB0byBncm91cCBpdGVtcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ3JvdXAgPSBmYWxzZTtcblxuICAgIC8qKiBBIGZpZWxkIG5hbWUgdG8gdXNlIHRvIGdyb3VwIGRhdGEgYnkgKHN1cHBvcnQgZG90dGVkIG5vdGF0aW9uKSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ3JvdXBLZXk/OiBzdHJpbmc7XG5cbiAgICAvKiogVGhlIGZpZWxkIHRvIHNob3cgZGF0YSBpbiBzZWNvbmRhcnkgY29sdW1uICovXG4gICAgQElucHV0KClcbiAgICBzZWNvbmRhcnlLZXk/OiBzdHJpbmc7XG5cbiAgICAvKiogU2hvdyB0aGUgc2Vjb25kIGNvbHVtbiAoQXBwbGljYWJsZSBmb3IgdHdvIGNvbHVtbnMgbGF5b3V0KSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1NlY29uZGFyeVRleHQgPSBmYWxzZTtcblxuICAgIC8qKiBHbHlwaCB0byBhZGQgaWNvbiBpbiB0aGUgc2VsZWN0IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdseXBoID0gJ3NsaW0tYXJyb3ctZG93bic7XG5cbiAgICAvKiogR2x5cGggZm9udCBmYW1pbHkgKi9cbiAgICBASW5wdXQoKVxuICAgIGdseXBoRm9udDogSWNvbkZvbnQgPSBGRF9ERUZBVUxUX0lDT05fRk9OVF9GQU1JTFk7XG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG86IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogVHJpZ2dlciB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgdHJpZ2dlclZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBQcmVzZXQgb3B0aW9ucyBmb3IgdGhlIHNlbGVjdCBib2R5IHdpZHRoLlxuICAgICAqICogYGF0LWxlYXN0YCB3aWxsIGFwcGx5IGEgbWluaW11bSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC5cbiAgICAgKiAqIGBlcXVhbGAgd2lsbCBhcHBseSBhIHdpZHRoIHRvIHRoZSBib2R5IGVxdWl2YWxlbnQgdG8gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sLlxuICAgICAqICogTGVhdmUgYmxhbmsgZm9yIG5vIGVmZmVjdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbGxDb250cm9sTW9kZTogUG9wb3ZlckZpbGxNb2RlID0gJ2F0LWxlYXN0JztcblxuICAgIC8qKiBIb3Jpem9udGFsbHkgYWxpZ24gdGV4dCBpbnNpZGUgdGhlIHNlY29uZCBjb2x1bW4gKEFwcGxpY2FibGUgZm9yIHR3byBjb2x1bW5zIGxheW91dCkgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeVRleHRBbGlnbm1lbnQ6IFRleHRBbGlnbm1lbnQgPSAncmlnaHQnO1xuXG4gICAgLyoqXG4gICAgICogTWF4IHdpZHRoIG9mIGxpc3QgY29udGFpbmVyXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIHdpZHRoOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgc2VsZWN0IGNvbXBvbmVudCBpcyByZWFkb25seS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgICAvKiogUGxhY2Vob2xkZXIgZm9yIHRoZSBzZWxlY3QuIEFwcGVhcnMgaW4gdGhlXG4gICAgICogdHJpZ2dlcmJveCBpZiBubyBvcHRpb24gaXMgc2VsZWN0ZWQuICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgY2xvc2UgdGhlIHBvcG92ZXIgb24gb3V0c2lkZSBjbGljay4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNsb3NlT25PdXRzaWRlQ2xpY2sgPSB0cnVlO1xuXG4gICAgLyoqIEN1c3RvbSB0ZW1wbGF0ZSB1c2VkIHRvIGJ1aWxkIGNvbnRyb2wgYm9keS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRyb2xUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBCaW5kcyB0byBjb250cm9sIGFyaWEtbGFiZWxsZWRCeSBhdHRyaWJ1dGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5ID0gbnVsbDtcblxuICAgIC8qKiBTZXRzIGNvbnRyb2wgYXJpYS1sYWJlbCBhdHRyaWJ1dGUgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbCA9IG51bGw7XG5cbiAgICAvKiogU2VsZWN0IElucHV0IE1vYmlsZSBDb25maWd1cmF0aW9uICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVDb25maWc6IE1vYmlsZU1vZGVDb25maWcgPSB7IGhhc0Nsb3NlQnV0dG9uOiB0cnVlIH07XG5cbiAgICAvKipcbiAgICAgKiBTdHJpbmcgcmVuZGVyZWQgYXMgZmlyc3QgdmFsdWUgaW4gdGhlIHBvcHVwIHdoaWNoIGxldCB0aGUgdXNlciB0byBtYWtlICdubyBzZWxlY3Rpb24nIGZyb21cbiAgICAgKiBhdmFpbGFibGUgbGlzdCBvZiB2YWx1ZXMuIFdoZW4gdGhpcyBvcHRpb24gaXMgYWN0aXZlIGFuZCB1c2UgbWFrZSB0aGlzIHNlbGVjdGlvbiB3ZSBzYXZlIGFcbiAgICAgKiBOVUxMIHZhbHVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBub1ZhbHVlTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIG5vdCB0byB3cmFwIHRleHQgKi9cbiAgICBASW5wdXQoKVxuICAgIG5vV3JhcFRleHQgPSBmYWxzZTtcblxuICAgIC8qKiBUdXJucyBvbi9vZmYgQWRqdXN0YWJsZSBXaWR0aCBmZWF0dXJlICovXG4gICAgQElucHV0KClcbiAgICBhdXRvUmVzaXplID0gZmFsc2U7XG5cbiAgICAvKiogRmlyc3QgQ29sdW1uIHJhdGlvICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZmlyc3RDb2x1bW5SYXRpbyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2ZpcnN0Q29sdW1uUmF0aW8gPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGZpcnN0Q29sdW1uUmF0aW8oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpcnN0Q29sdW1uUmF0aW87XG4gICAgfVxuXG4gICAgLyoqIFNlY29vbmQgQ29sdW1uIHJhdGlvICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2Vjb25kQ29sdW1uUmF0aW8odmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9zZWNvbmRDb2x1bW5SYXRpbyA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgc2Vjb25kQ29sdW1uUmF0aW8oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlY29uZENvbHVtblJhdGlvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1pbiB3aWR0aCBvZiBsaXN0IGNvbnRhaW5lclxuICAgICAqXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIG1pbldpZHRoPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogTWF4IHdpZHRoIG9mIGxpc3QgY29udGFpbmVyXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIG1heFdpZHRoPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQWN0aW9uIHRvIHBlcmZvcm0gd2hlbiB1c2VyIHNoaWZ0cyBmb2N1cyBmcm9tIHRoZSBkcm9wZG93bi5cbiAgICAgKiAtIGBjbG9zZWAgd2lsbCBjbG9zZSB0aGUgZHJvcGRvd24gcHJlc2VydmluZyBwcmV2aW91c2x5IHNlbGVjdGVkIHZhbHVlLlxuICAgICAqIC0gYGNsb3NlQW5kU2VsZWN0YCB3aWxsIGNsb3NlIHRoZSBkcm9wZG93biBhbmQgc2VsZWN0IGxhc3QgZm9jdXNlZCBkcm9wZG93biBpdGVtLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFiT3V0U3RyYXRlZ3k6ICdjbG9zZScgfCAnY2xvc2VBbmRTZWxlY3QnID0gJ2Nsb3NlJztcblxuICAgIC8qKiBEYXRhIGZvciBzdWdnZXN0aW9uIGxpc3QgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBsaXN0KHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9vcHRpb25JdGVtcyA9IHRoaXMuX2NvbnZlcnRUb09wdGlvbkl0ZW1zKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgbGlzdCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9uSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY2FuQ2xvc2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHRoaXMubW9iaWxlICYmIHRoaXMubW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0KTtcbiAgICB9XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGl0ZW0gaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGZHBTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChMaXN0Q29tcG9uZW50KVxuICAgIGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tVGVtcGxhdGVzOiBRdWVyeUxpc3Q8VGVtcGxhdGVEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEN1c3RvbSBPcHRpb24gaXRlbSBUZW1wbGF0ZVxuICAgICAqICogQGhpZGRlblxuICAgICAqICovXG4gICAgX29wdGlvbkl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBTZWNvbmRhcnkgaXRlbSBUZW1wbGF0ZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKiAqL1xuICAgIF9zZWNvbmRhcnlJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gU2VsZWN0ZWQgb3B0aW9uIGl0ZW0gVGVtcGxhdGVcbiAgICAgKiBAaGlkZGVuXG4gICAgICogKi9cbiAgICBfc2VsZWN0ZWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jb250ZW50RGVuc2l0eVNlcnZpY2U6IENvbnRlbnREZW5zaXR5U2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2Ygb3B0aW9uIGl0ZW1zXG4gICAgICogQGhpZGRlblxuICAgICAqICovXG4gICAgX29wdGlvbkl0ZW1zOiBTZWxlY3RPcHRpb25JdGVtW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWFyY2hJbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgc2VsZWN0IGlzIG9wZW5lZC4gKi9cbiAgICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE5lZWQgZm9yIG9wZW5pbmcgbW9iaWxlIHZlcnNpb25cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9vcGVuQ2hhbmdlID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpcnN0Q29sdW1uUmF0aW86IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2Vjb25kQ29sdW1uUmF0aW86IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICByZWFkb25seSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcmVhZG9ubHkgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHJlYWRvbmx5IGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcmVhZG9ubHkgbmdGb3JtOiBOZ0Zvcm0sXG4gICAgICAgIHByb3RlY3RlZCBzZWxlY3RDb25maWc6IFNlbGVjdENvbmZpZyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2xcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2QsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdFdpbmRvd1Jlc2l6ZSgpO1xuICAgICAgICB0aGlzLl9hc3NpZ25DdXN0b21UZW1wbGF0ZXMoKTtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2RzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIElzIGVtcHR5IHNlYXJjaCBmaWVsZCAqL1xuICAgIGdldCBpc0VtcHR5VmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgc2V0VmFsdWUobmV3VmFsdWU6IGFueSwgZW1pdE9uQ2hhbmdlID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAobmV3VmFsdWUgIT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgaWYgKGVtaXRPbkNoYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHsgcGF5bG9hZDogdGhpcy52YWx1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIENsb3NlIGxpc3QgKiAqL1xuICAgIGNsb3NlKGV2ZW50OiBNb3VzZUV2ZW50IHwgbnVsbCA9IG51bGwsIGZvcmNlQ2xvc2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuaWQgPT09IHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXNPcGVuICYmIChmb3JjZUNsb3NlIHx8IHRoaXMuY2FuQ2xvc2UpKSB7XG4gICAgICAgICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX29wZW5DaGFuZ2UubmV4dCh0aGlzLl9pc09wZW4pO1xuICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNob3dMaXN0KGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faXNPcGVuICE9PSBpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2lzT3BlbiA9IGlzT3BlbjtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLl9vcGVuQ2hhbmdlLm5leHQoaXNPcGVuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlUHJlc3NFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCwgdmFsdWU6IFNlbGVjdE9wdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRU5URVIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHBhc3NlZCB0byBsaXN0IGNvbXBvbmVudCAqL1xuICAgIGhhbmRsZUxpc3RGb2N1c0VzY2FwZShkaXJlY3Rpb246IEZvY3VzRXNjYXBlRGlyZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRXaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dldE9wdGlvbnNMaXN0V2lkdGgoKTtcblxuICAgICAgICBpZiAoIXRoaXMuYXV0b1Jlc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZ2V0T3B0aW9uc0xpc3RXaWR0aCgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE9wdGlvbnNMaXN0V2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsQmFyV2lkdGggPSBib2R5Lm9mZnNldFdpZHRoIC0gYm9keS5jbGllbnRXaWR0aDtcbiAgICAgICAgdGhpcy5tYXhXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gc2Nyb2xsQmFyV2lkdGggLSByZWN0LmxlZnQ7XG4gICAgICAgIHRoaXMubWluV2lkdGggPSByZWN0LndpZHRoIC0gMjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IG9yaWdpbmFsIGRhdGEgdG8gT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRUb09wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IFNlbGVjdE9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1swXTtcblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzT3B0aW9uSXRlbSA9IGlzT3B0aW9uSXRlbShpdGVtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlSXNPcHRpb25JdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMgYXMgU2VsZWN0T3B0aW9uSXRlbVtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVJc09iamVjdCA9IGlzSnNPYmplY3QoaXRlbSk7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUlzT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydE9iamVjdHNUb09wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlSXNTdHJpbmcgPSBpc1N0cmluZyhpdGVtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlSXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0UHJpbWl0aXZlVG9PcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBkYXRhIHRvIE9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0T2JqZWN0c1RvT3B0aW9uSXRlbXMoaXRlbXM6IGFueVtdKTogU2VsZWN0T3B0aW9uSXRlbVtdIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlY29uZGFyeVRleHQgJiYgdGhpcy5zZWNvbmRhcnlLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvU2Vjb25kYXJ5T3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9EZWZhdWx0T3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvYmplY3RbXSBkYXRhIHRvIFNlY29uZGFyeSBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydE9iamVjdHNUb1NlY29uZGFyeU9wdGlvbkl0ZW1zPEs+KGl0ZW1zOiBLW10pOiBTZWxlY3RPcHRpb25JdGVtW10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogU2VsZWN0T3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIHNlbGVjdEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmRpc3BsYXlWYWx1ZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgc2Vjb25kYXJ5VGV4dDogdGhpcy5vYmplY3RHZXQodmFsdWUsIHRoaXMuc2Vjb25kYXJ5S2V5KSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5sb29rdXBWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgUHJpbWl0aXZlIGRhdGEoQm9vbGVhbiwgU3RyaW5nLCBOdW1iZXIpIHRvIE9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0UHJpbWl0aXZlVG9PcHRpb25JdGVtcyhpdGVtczogc3RyaW5nW10pOiBTZWxlY3RPcHRpb25JdGVtW10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogU2VsZWN0T3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIHNlbGVjdEl0ZW1zLnB1c2goeyBsYWJlbDogdmFsdWUsIHZhbHVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb2JqZWN0W10gdG8gT3B0aW9uSXRlbXMgSW50ZXJmYWNlIChEZWZhdWx0KVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IFNlbGVjdE9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEl0ZW1zOiBTZWxlY3RPcHRpb25JdGVtW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGlzcGxheVZhbHVlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBBc3NpZ24gY3VzdG9tIHRlbXBsYXRlc1xuICAgICAqICovXG4gICAgcHJpdmF0ZSBfYXNzaWduQ3VzdG9tVGVtcGxhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlcy5mb3JFYWNoKCh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoICh0ZW1wbGF0ZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnX29wdGlvbkl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbkl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdfc2Vjb25kYXJ5SXRlbVRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Vjb25kYXJ5SXRlbVRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ19zZWxlY3RlZEl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, Input, Output, Renderer2 } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, Input, Output, Renderer2, computed, signal } from '@angular/core';
|
|
2
2
|
import { ControlContainer, NgControl, NgForm } from '@angular/forms';
|
|
3
|
-
import {
|
|
4
|
-
import { map, switchMap, takeUntil } from 'rxjs/operators';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
4
|
import { RtlService } from '@fundamental-ngx/cdk/utils';
|
|
6
5
|
import { BaseInput, PlatformFormField, PlatformFormFieldControl } from '@fundamental-ngx/platform/shared';
|
|
7
6
|
import { StepInputConfig } from './step-input.config';
|
|
@@ -90,7 +89,10 @@ export class StepInputComponent extends BaseInput {
|
|
|
90
89
|
}
|
|
91
90
|
/** Horizontally aligns value inside input */
|
|
92
91
|
set align(align) {
|
|
93
|
-
this._align$.
|
|
92
|
+
this._align$.set(align);
|
|
93
|
+
}
|
|
94
|
+
get align() {
|
|
95
|
+
return this._align$();
|
|
94
96
|
}
|
|
95
97
|
/** @hidden */
|
|
96
98
|
get canChangeValue() {
|
|
@@ -138,14 +140,29 @@ export class StepInputComponent extends BaseInput {
|
|
|
138
140
|
/** @hidden */
|
|
139
141
|
this._contentDensity = this.config.contentDensity;
|
|
140
142
|
/** @hidden */
|
|
143
|
+
this._align$ = signal(null);
|
|
144
|
+
/** @hidden */
|
|
145
|
+
this._textAlign$ = computed(() => {
|
|
146
|
+
const align = this._align$();
|
|
147
|
+
const isRtl = !!this._rtlService?.rtlSignal();
|
|
148
|
+
if (!ALIGN_INPUT_OPTIONS_LIST.includes(align)) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
if (isRtl && align === StepInputAlign.Left) {
|
|
152
|
+
return StepInputAlign.Right;
|
|
153
|
+
}
|
|
154
|
+
if (isRtl && align === StepInputAlign.Right) {
|
|
155
|
+
return StepInputAlign.Left;
|
|
156
|
+
}
|
|
157
|
+
return align;
|
|
158
|
+
});
|
|
159
|
+
/** @hidden */
|
|
141
160
|
this._max = Number.MAX_VALUE;
|
|
142
161
|
/** @hidden */
|
|
143
162
|
this._min = -Number.MAX_VALUE;
|
|
144
163
|
/** @hidden */
|
|
145
164
|
this._step = 1;
|
|
146
165
|
/** @hidden */
|
|
147
|
-
this._align$ = new BehaviorSubject(null);
|
|
148
|
-
/** @hidden */
|
|
149
166
|
this._pendingEnteredValue = null;
|
|
150
167
|
}
|
|
151
168
|
/** @hidden */
|
|
@@ -155,7 +172,6 @@ export class StepInputComponent extends BaseInput {
|
|
|
155
172
|
this._updateViewValue();
|
|
156
173
|
this.lastEmittedValue = this._value;
|
|
157
174
|
this._listenToFormErrorState();
|
|
158
|
-
this._listenToAlign();
|
|
159
175
|
}
|
|
160
176
|
/** @hidden
|
|
161
177
|
* Override writeValue method to keep input view value up to date
|
|
@@ -249,7 +265,7 @@ export class StepInputComponent extends BaseInput {
|
|
|
249
265
|
_listenToFormErrorState() {
|
|
250
266
|
this.stateChanges
|
|
251
267
|
.asObservable()
|
|
252
|
-
.pipe(
|
|
268
|
+
.pipe(takeUntilDestroyed(this._destroyed))
|
|
253
269
|
.subscribe(() => {
|
|
254
270
|
const oldValue = this.isErrorState;
|
|
255
271
|
this.isErrorState = this.state === 'error';
|
|
@@ -259,32 +275,6 @@ export class StepInputComponent extends BaseInput {
|
|
|
259
275
|
});
|
|
260
276
|
}
|
|
261
277
|
/** @hidden */
|
|
262
|
-
_listenToAlign() {
|
|
263
|
-
this._align$
|
|
264
|
-
.asObservable()
|
|
265
|
-
.pipe(switchMap((align) => {
|
|
266
|
-
if (!this._rtlService) {
|
|
267
|
-
return of(align);
|
|
268
|
-
}
|
|
269
|
-
return this._rtlService.rtl.pipe(map((isRtl) => {
|
|
270
|
-
if (!ALIGN_INPUT_OPTIONS_LIST.includes(align)) {
|
|
271
|
-
return null;
|
|
272
|
-
}
|
|
273
|
-
if (isRtl && align === StepInputAlign.Left) {
|
|
274
|
-
return StepInputAlign.Right;
|
|
275
|
-
}
|
|
276
|
-
if (isRtl && align === StepInputAlign.Right) {
|
|
277
|
-
return StepInputAlign.Left;
|
|
278
|
-
}
|
|
279
|
-
return align;
|
|
280
|
-
}));
|
|
281
|
-
}), takeUntil(this._destroyed))
|
|
282
|
-
.subscribe((align) => {
|
|
283
|
-
this._align = align;
|
|
284
|
-
this._cd.markForCheck();
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
/** @hidden */
|
|
288
278
|
_emitChangedValue() {
|
|
289
279
|
const value = this._value;
|
|
290
280
|
this.lastEmittedValue = value;
|
|
@@ -411,4 +401,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
|
|
|
411
401
|
}], valueChange: [{
|
|
412
402
|
type: Output
|
|
413
403
|
}] } });
|
|
414
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zdGVwLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9mb3JtL3N0ZXAtaW5wdXQvYmFzZS5zdGVwLWlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQTRCLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7OztBQUU5RixtRUFBbUU7QUFDbkUsTUFBTSxPQUFPLG9CQUFvQjtJQUM3Qjs7OztPQUlHO0lBQ0g7SUFDSSwwQ0FBMEM7SUFDbkMsTUFBUztJQUNoQixrQ0FBa0M7SUFDM0IsT0FBVTtRQUZWLFdBQU0sR0FBTixNQUFNLENBQUc7UUFFVCxZQUFPLEdBQVAsT0FBTyxDQUFHO0lBQ2xCLENBQUM7Q0FDUDtBQUVELE1BQU0sQ0FBTixJQUFZLGNBSVg7QUFKRCxXQUFZLGNBQWM7SUFDdEIsK0JBQWEsQ0FBQTtJQUNiLG1DQUFpQixDQUFB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SztzQkFEUixLQUFLO2dCQWFGLEdBQUc7c0JBRE4sS0FBSztnQkFXRixHQUFHO3NCQUROLEtBQUs7Z0JBV0YsSUFBSTtzQkFEUCxLQUFLO2dCQVlGLE1BQU07c0JBRFQsS0FBSztnQkFRRixTQUFTO3NCQURaLEtBQUs7Z0JBV04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLRixLQUFLO3NCQURSLEtBQUs7Z0JBU04sY0FBYztzQkFEYixLQUFLO2dCQU9OLGNBQWM7c0JBRGIsS0FBSztnQkFLTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29udGVudERlbnNpdHksIE51bGxhYmxlLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQmFzZUlucHV0LCBQbGF0Zm9ybUZvcm1GaWVsZCwgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgU3RlcElucHV0Q29uZmlnIH0gZnJvbSAnLi9zdGVwLWlucHV0LmNvbmZpZyc7XG5pbXBvcnQgeyBhZGRBbmRDdXRGbG9hdGluZ051bWJlckRpc3RvcnRpb24sIGdldE51bWJlckRlY2ltYWxMZW5ndGggfSBmcm9tICcuL3N0ZXAtaW5wdXQudXRpbCc7XG5cbi8qKiBDaGFuZ2UgZXZlbnQgb2JqZWN0IGVtaXR0ZWQgYnkgUGxhdGZvcm0gU3RlcCBJbnB1dCBjb21wb25lbnQgKi9cbmV4cG9ydCBjbGFzcyBTdGVwSW5wdXRDaGFuZ2VFdmVudDxUIGV4dGVuZHMgU3RlcElucHV0Q29tcG9uZW50ID0gU3RlcElucHV0Q29tcG9uZW50LCBLID0gbnVtYmVyPiB7XG4gICAgLyoqXG4gICAgICogU3RlcCBpbnB1dCBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50XG4gICAgICogQHBhcmFtIHNvdXJjZSBTdGVwIGlucHV0IGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBwYXlsb2FkIFNlbGVjdGVkIHZhbHVlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIC8qKiBUaGUgc291cmNlIFN0ZXAgSW5wdXQgb2YgdGhlIGV2ZW50LiAqL1xuICAgICAgICBwdWJsaWMgc291cmNlOiBULFxuICAgICAgICAvKiogVGhlIG5ldyB2YWx1ZSBvZiBhIGNvbnRyb2wuICovXG4gICAgICAgIHB1YmxpYyBwYXlsb2FkOiBLXG4gICAgKSB7fVxufVxuXG5leHBvcnQgZW51bSBTdGVwSW5wdXRBbGlnbiB7XG4gICAgTGVmdCA9ICdsZWZ0JyxcbiAgICBDZW50ZXIgPSAnY2VudGVyJyxcbiAgICBSaWdodCA9ICdyaWdodCdcbn1cblxuZXhwb3J0IHR5cGUgU3RlcElucHV0U3RlcEZ1bmN0aW9uQWN0aW9uID0gJ2luY3JlYXNlJyB8ICdkZWNyZWFzZSc7XG5leHBvcnQgdHlwZSBTdGVwSW5wdXRTdGVwRnVuY3Rpb24gPSAodmFsdWU6IG51bWJlciwgYWN0aW9uOiBTdGVwSW5wdXRTdGVwRnVuY3Rpb25BY3Rpb24pID0+IG51bWJlcjtcblxuY29uc3QgQUxJR05fSU5QVVRfT1BUSU9OU19MSVNUID0gW1N0ZXBJbnB1dEFsaWduLkxlZnQsIFN0ZXBJbnB1dEFsaWduLkNlbnRlciwgU3RlcElucHV0QWxpZ24uUmlnaHRdO1xuXG4vKipcbiAqIFN0ZXBJbnB1dENvbXBvbmVudCBpcyBhIGJhc2UgYWJzdHJhY3QgY2xhc3MgdGhhdCBzaG91bGQgYmUgdXNlZFxuICogdG8gY3JlYXRlIHR5cGUgc3BlY2lmaWMgU3RlcElucHV0IGNvbXBvbmVudHMgc3VjaCBhcyBudW1iZXIsIG1vbmV5LCB1bml0T2ZNZWFzdXJlXG4gKiBUaGlzIGhvbGRzIGJhc2UgU3RlcCBJbnB1dCBmdW5jdGlvbmFsaXR5IHRoYXQgY2FuIGJlIGFic3RyYWN0ZWRcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3RlcElucHV0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUlucHV0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogU2V0cyBpbnB1dCB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBOdWxsYWJsZTxudW1iZXI+KSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBOdWxsYWJsZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgbWluaW11bSB2YWx1ZSBib3VuZGFyeSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1pbihtaW46IG51bWJlcikge1xuICAgICAgICB0aGlzLl9taW4gPSAhaXNOYU4obWluKSA/IG1pbiA6IC1OdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDYW5EZWNyZW1lbnQoKTtcbiAgICB9XG4gICAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIG1heGltdW0gdmFsdWUgYm91bmRhcnkgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtYXgobWF4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbWF4ID0gIWlzTmFOKG1heCkgPyBtYXggOiBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDYW5JbmNyZW1lbnQoKTtcbiAgICB9XG4gICAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cblxuICAgIC8qKiBTZXRzIGlucHV0IHN0ZXAgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGVwKHN0ZXA6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jaGVja0FuZFRocm93RXJyb3JJZlN0ZXBEb2VzbnRNYXRjaFByZWNpc2lvbih0aGlzLnByZWNpc2lvbiwgc3RlcCk7XG4gICAgICAgIHRoaXMuX3N0ZXAgPSBzdGVwO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDYW5EZWNyZW1lbnRJbmNyZW1lbnQoKTtcbiAgICB9XG4gICAgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXA7XG4gICAgfVxuXG4gICAgLyoqIEN1c3RvbSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgc3RlcCBkeW5hbWljYWxseSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN0ZXBGbihzdGVwRm46IFN0ZXBJbnB1dFN0ZXBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLl9zdGVwRm4gPSBzdGVwRm47XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpO1xuICAgIH1cblxuICAgIC8qKiBOdW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcHJlY2lzaW9uKHByZWNpc2lvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrQW5kVGhyb3dFcnJvcklmU3RlcERvZXNudE1hdGNoUHJlY2lzaW9uKHByZWNpc2lvbiwgdGhpcy5zdGVwKTtcbiAgICAgICAgdGhpcy5fcHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgIH1cbiAgICBnZXQgcHJlY2lzaW9uKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVjaXNpb247XG4gICAgfVxuXG4gICAgLyoqIFNldHMgbGFyZ2VTdGVwIG11bHRpcGxpZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGxhcmdlclN0ZXAgPSAyO1xuXG4gICAgLyoqIEhpZGVzIC0vKyBpY29ucyBhbmQgc2hvd3MgbGFiZWxzICovXG4gICAgQElucHV0KClcbiAgICBzaG93TGFiZWxzID0gZmFsc2U7XG5cbiAgICAvKiogSG9yaXpvbnRhbGx5IGFsaWducyB2YWx1ZSBpbnNpZGUgaW5wdXQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhbGlnbihhbGlnbjogU3RlcElucHV0QWxpZ24pIHtcbiAgICAgICAgdGhpcy5fYWxpZ24kLm5leHQoYWxpZ24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFSSUEgbGFiZWwgZm9yIGluY3JlbWVudCBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGluY3JlbWVudExhYmVsOiBzdHJpbmcgPSB0aGlzLmNvbmZpZy5pbmNyZW1lbnRMYWJlbDtcblxuICAgIC8qKlxuICAgICAqIEFSSUEgbGFiZWwgZm9yIGRlY3JlbWVudCBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRlY3JlbWVudExhYmVsOiBzdHJpbmcgPSB0aGlzLmNvbmZpZy5kZWNyZW1lbnRMYWJlbDtcblxuICAgIC8qKiBFbWl0cyBuZXcgdmFsdWUgd2hlbiBjb250cm9sIHZhbHVlIGhhcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBJbnB1dENoYW5nZUV2ZW50PigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsYXN0RW1pdHRlZFZhbHVlOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNhbkluY3JlbWVudCA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNhbkRlY3JlbWVudCA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEluZGljYXRlcyBpZiBjb250cm9sIGhhcyBhbiBlcnJvclxuICAgICAqL1xuICAgIGlzRXJyb3JTdGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY2FuQ2hhbmdlVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuZWRpdGFibGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NvbnRlbnREZW5zaXR5OiBDb250ZW50RGVuc2l0eSA9IHRoaXMuY29uZmlnLmNvbnRlbnREZW5zaXR5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYWxpZ246IFN0ZXBJbnB1dEFsaWduIHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWF4OiBudW1iZXIgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9taW46IG51bWJlciA9IC1OdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGVwID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RlcEZuOiBTdGVwSW5wdXRTdGVwRnVuY3Rpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZWNpc2lvbjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hbGlnbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0ZXBJbnB1dEFsaWduIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BlbmRpbmdFbnRlcmVkVmFsdWU6IG51bWJlciB8IEVycm9yIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9jdXJyZW50VmFsdWUoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBlbmRpbmdWYWx1ZSA9IHRoaXMuX3BlbmRpbmdFbnRlcmVkVmFsdWU7XG5cbiAgICAgICAgaWYgKHBlbmRpbmdWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZW5kaW5nVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwZW5kaW5nVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBmb3JtRmllbGQ6IFBsYXRmb3JtRm9ybUZpZWxkLFxuICAgICAgICBmb3JtQ29udHJvbDogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgICAgICBwcm90ZWN0ZWQgY29uZmlnOiBTdGVwSW5wdXRDb25maWcsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2QsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuXG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvRm9ybUVycm9yU3RhdGUoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0FsaWduKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBPdmVycmlkZSB3cml0ZVZhbHVlIG1ldGhvZCB0byBrZWVwIGlucHV0IHZpZXcgdmFsdWUgdXAgdG8gZGF0ZVxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuX3Jlc2V0UGVuZGluZ0VudGVyZWRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBJbmNyZWFzZSB2YWx1ZSAqL1xuICAgIGluY3JlYXNlKHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JJbmNyZWFzZSgpKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5JbmNyZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGFkZEFuZEN1dEZsb2F0aW5nTnVtYmVyRGlzdG9ydGlvbih0aGlzLl9jdXJyZW50VmFsdWUsIHN0ZXApO1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5fdmFsaWRhdGVWYWx1ZUJ5TGltaXRzKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fZW1pdENoYW5nZWRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBEZWNyZWFzZSB2YWx1ZSAqL1xuICAgIGRlY3JlYXNlKHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JEZWNyZWFzZSgpKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5EZWNyZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGFkZEFuZEN1dEZsb2F0aW5nTnVtYmVyRGlzdG9ydGlvbih0aGlzLl9jdXJyZW50VmFsdWUsIC1zdGVwKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX3ZhbGlkYXRlVmFsdWVCeUxpbWl0cyh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogSW5jcmVhc2UgdmFsdWUgYnkgbGFyZ2Ugc3RlcCAqL1xuICAgIGxhcmdlU3RlcEluY3JlYXNlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5fZ2V0U3RlcFZhbHVlRm9ySW5jcmVhc2UoKSAqIHRoaXMubGFyZ2VyU3RlcDtcbiAgICAgICAgdGhpcy5pbmNyZWFzZShzdGVwKTtcbiAgICB9XG5cbiAgICAvKiogRGVjcmVhc2UgdmFsdWUgYnkgbGFyZ2Ugc3RlcCAqL1xuICAgIGxhcmdlU3RlcERlY3JlYXNlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5fZ2V0U3RlcFZhbHVlRm9yRGVjcmVhc2UoKSAqIHRoaXMubGFyZ2VyU3RlcDtcbiAgICAgICAgdGhpcy5kZWNyZWFzZShzdGVwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIGNhdGNoIHZhbHVlIGR1cmluZyBlbnRlcmluZyBmcm9tIHZpZXcuXG4gICAgICovXG4gICAgb25FbnRlclZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVJbkZvY3VzTW9kZSh2YWx1ZSk7XG4gICAgICAgIGxldCBwZW5kaW5nVmFsdWUgPSBwYXJzZWRWYWx1ZTtcblxuICAgICAgICBpZiAocGVuZGluZ1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwZW5kaW5nVmFsdWUgPSB0aGlzLl92YWxpZGF0ZVZhbHVlQnlMaW1pdHMocGVuZGluZ1ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvdWxkIG5vdCBwYXJzZSB2YWx1ZSwgdmFsdWUgaXMgaW52YWxpZFxuICAgICAgICBpZiAocGVuZGluZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRQZW5kaW5nRW50ZXJlZFZhbHVlKG5ldyBFcnJvcigndmFsdWUgaXMgaW52YWxpZCcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFBlbmRpbmdFbnRlcmVkVmFsdWUocGVuZGluZ1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ29tbWl0IGVudGVyZWQgdmFsdWUgZnJvbSB2aWV3LlxuICAgICAqL1xuICAgIGNvbW1pdEVudGVyZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgY29uc3QgbmVlZFRvVXBkYXRlVmlldyA9IHRoaXMuX3ZhbHVlID09PSBuZXdWYWx1ZTtcblxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG5cbiAgICAgICAgaWYgKG5lZWRUb1VwZGF0ZVZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB0aGlzLmxhc3RFbWl0dGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkVmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogSW5kaWNhdGVzIHdoZW4gaW5wdXQgZ2V0cyBmb2N1c2VkXG4gICAgICovXG4gICAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuX29uRm9jdXNDaGFuZ2VkKHRydWUpO1xuICAgICAgICAvLyBXaGVuIGZvY3VzIGhhcHBlbnMgYnkgXCJUYWJcIiBrZXkgYW4gaW5wdXQgZmllbGQgdmFsdWUgZ2V0cyBzZWxlY3RlZCBieSBkZWZhdWx0LlxuICAgICAgICAvLyBJbiBjYXNlcyB3aGVuIG5ld19mb3JtYXR0ZWRfdmFsdWUgIT09IHByZXZpb3VzX3ZhbHVlIHRoZSBzZWxlY3Rpb24gZ2V0cyBsb3N0LlxuICAgICAgICAvLyBTbyBpdCdzIG5lZWRlZCB0byB0cmFjayBzZWxlY3Rpb24gYmVmb3JlIG5ldyB2YWx1ZSByZW5kZXJpbmcgYW5kIHJlc3RvcmUgaXQuXG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gdGhpcy5fZ2V0VmFsdWVTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb25FbmQgLSBzZWxlY3Rpb25TdGFydCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlU2VsZWN0aW9uKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBpbnB1dCBsb3NlcyBmb2N1c1xuICAgICAqL1xuICAgIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuX29uRm9jdXNDaGFuZ2VkKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSB2YWx1ZUNoYW5nZSBldmVudCAqL1xuICAgIGFic3RyYWN0IGNyZWF0ZUNoYW5nZUV2ZW50KHZhbHVlOiBudW1iZXIpOiBTdGVwSW5wdXRDaGFuZ2VFdmVudDtcblxuICAgIC8qKiBGb3JtYXQgdmFsdWUgZm9yIHZpZXcgcHJlc2VudGF0aW9uICovXG4gICAgYWJzdHJhY3QgZm9ybWF0VmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpOiBzdHJpbmc7XG5cbiAgICAvKiogRm9ybWF0IHZhbHVlIGZvciBcImluIGZvY3VzXCIgbW9kZSAqL1xuICAgIGFic3RyYWN0IGZvcm1hdFZhbHVlSW5Gb2N1c01vZGUodmFsdWU6IG51bWJlcik6IHN0cmluZztcblxuICAgIC8qKiBQYXJzZSB2YWx1ZSBlbnRlcmVkIFwiaW4gZm9jdXNcIiBtb2RlICovXG4gICAgYWJzdHJhY3QgcGFyc2VWYWx1ZUluRm9jdXNNb2RlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0Zvcm1FcnJvclN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlc1xuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5pc0Vycm9yU3RhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yU3RhdGUgPSB0aGlzLnN0YXRlID09PSAnZXJyb3InO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRXJyb3JTdGF0ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0FsaWduKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hbGlnbiRcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChhbGlnbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3J0bFNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihhbGlnbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZS5ydGwucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoaXNSdGwpOiBTdGVwSW5wdXRBbGlnbiB8IG51bGwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQUxJR05fSU5QVVRfT1BUSU9OU19MSVNULmluY2x1ZGVzKGFsaWduISkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1J0bCAmJiBhbGlnbiA9PT0gU3RlcElucHV0QWxpZ24uTGVmdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RlcElucHV0QWxpZ24uUmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1J0bCAmJiBhbGlnbiA9PT0gU3RlcElucHV0QWxpZ24uUmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0ZXBJbnB1dEFsaWduLkxlZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlnbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGFsaWduKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWxpZ24gPSBhbGlnbjtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZW1pdENoYW5nZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmNyZWF0ZUNoYW5nZUV2ZW50KHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRTdGVwVmFsdWVGb3JJbmNyZWFzZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3RlcFZhbHVlKCdpbmNyZWFzZScpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0U3RlcFZhbHVlRm9yRGVjcmVhc2UoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFN0ZXBWYWx1ZSgnZGVjcmVhc2UnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEdldCBzdGVwIHZhbHVlIGJhc2VkIGVpdGhlciBvbiBcInN0ZXBGblwiIG9yIFwic3RlcFwiXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0U3RlcFZhbHVlKGFjdGlvbjogU3RlcElucHV0U3RlcEZ1bmN0aW9uQWN0aW9uKTogbnVtYmVyIHtcbiAgICAgICAgLy8gc3RlRm4gaGFzIHByZWNlZGVuY2VcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdGVwRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRTdGVwID0gdGhpcy5fc3RlcEZuKHRoaXMuX2N1cnJlbnRWYWx1ZSA/PyB0aGlzLm1pbiwgYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVkU3RlcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlVmlld1ZhbHVlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLl9mb3JtYXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJWYWx1ZShmb3JtYXR0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0VmFsdWUodmFsdWUgPSB0aGlzLl92YWx1ZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbHVlSW5Gb2N1c01vZGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlbmRlclZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuX2dldElucHV0TmF0aXZlRWxlbWVudCgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eShpbnB1dEVsLCAndmFsdWUnLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRJbnB1dE5hdGl2ZUVsZW1lbnQoKTogSFRNTElucHV0RWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VmFsdWVTZWxlY3Rpb24oKTogeyBzZWxlY3Rpb25TdGFydDogbnVtYmVyOyBzZWxlY3Rpb25FbmQ6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuX2dldElucHV0TmF0aXZlRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGlucHV0RWw/LnNlbGVjdGlvblN0YXJ0IHx8IDA7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkVuZCA9IGlucHV0RWw/LnNlbGVjdGlvbkVuZCB8fCAwO1xuICAgICAgICByZXR1cm4geyBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRWYWx1ZVNlbGVjdGlvbihzZWxlY3Rpb25TdGFydDogbnVtYmVyLCBzZWxlY3Rpb25FbmQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5fZ2V0SW5wdXROYXRpdmVFbGVtZW50KCk7XG4gICAgICAgIGlmICghaW5wdXRFbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0RWwuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVDYW5JbmNyZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JJbmNyZWFzZSgpO1xuICAgICAgICB0aGlzLmNhbkluY3JlbWVudCA9ICh0aGlzLl92YWx1ZSB8fCAwKSArIHN0ZXAgPD0gdGhpcy5fbWF4O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQ2FuRGVjcmVtZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5fZ2V0U3RlcFZhbHVlRm9yRGVjcmVhc2UoKTtcbiAgICAgICAgdGhpcy5jYW5EZWNyZW1lbnQgPSAodGhpcy5fdmFsdWUgfHwgMCkgLSBzdGVwID49IHRoaXMuX21pbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2FuRGVjcmVtZW50KCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkluY3JlbWVudCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVWYWx1ZUJ5TGltaXRzKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIHRoaXMuX21pbiksIHRoaXMuX21heCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja0FuZFRocm93RXJyb3JJZlN0ZXBEb2VzbnRNYXRjaFByZWNpc2lvbihwcmVjaXNpb246IG51bWJlciwgc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIENoZWNrIGlmIFwicHJlY2lzaW9uXCIgaXMgdmFsaWQgY29tcGFyaW5nIHRvIFwic3RlcFwiXG4gICAgICAgIGNvbnN0IHN0ZXBEZWNpbWFsTGVuZ3RoID0gZ2V0TnVtYmVyRGVjaW1hbExlbmd0aChzdGVwKTtcbiAgICAgICAgY29uc3QgcHJlY2lzaW9uRGVjaW1hbExlbmd0aCA9IGdldE51bWJlckRlY2ltYWxMZW5ndGgocHJlY2lzaW9uKTtcbiAgICAgICAgaWYgKHN0ZXBEZWNpbWFsTGVuZ3RoID4gcHJlY2lzaW9uRGVjaW1hbExlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFN0ZXAgaW5wdXQ6IFRoZSB2YWx1ZSBvZiBzdGVwIHByb3BlcnR5IGNhbiBub3QgY29udGFpbiBtb3JlIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCB0aGFuIHdoYXQgaXMgc2V0IHRvIHRoZSBwcmVjaXNpb24gcHJvcGVydHlgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRQZW5kaW5nRW50ZXJlZFZhbHVlKHZhbHVlOiBudW1iZXIgfCBFcnJvcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9wZW5kaW5nRW50ZXJlZFZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNldFBlbmRpbmdFbnRlcmVkVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdFbnRlcmVkVmFsdWUgPSBudWxsO1xuICAgIH1cbn1cbiJdfQ==
|
|
404
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zdGVwLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9mb3JtL3N0ZXAtaW5wdXQvYmFzZS5zdGVwLWlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBNEIsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7O0FBRTlGLG1FQUFtRTtBQUNuRSxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCOzs7O09BSUc7SUFDSDtJQUNJLDBDQUEwQztJQUNuQyxNQUFTO0lBQ2hCLGtDQUFrQztJQUMzQixPQUFVO1FBRlYsV0FBTSxHQUFOLE1BQU0sQ0FBRztRQUVULFlBQU8sR0FBUCxPQUFPLENBQUc7SUFDbEIsQ0FBQztDQUNQO0FBRUQsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN0QiwrQkFBYSxDQUFBO0lBQ2IsbUNBQWlCLENBQUE7SUFDakIsaUNBQWUsQ0FBQTtBQUNuQixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMs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QUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsY0FBYztJQUNOLDZDQUE2QyxDQUFDLFNBQWlCLEVBQUUsSUFBWTtRQUNqRixvREFBb0Q7UUFDcEQsTUFBTSxpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxNQUFNLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksaUJBQWlCLEdBQUcsc0JBQXNCLEVBQUU7WUFDNUMsTUFBTSxLQUFLLENBQ1AsdUlBQXVJLENBQzFJLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sdUJBQXVCLENBQUMsS0FBcUI7UUFDakQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztJQUN0QyxDQUFDO0lBRUQsY0FBYztJQUNOLHlCQUF5QjtRQUM3QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQ3JDLENBQUM7OEdBemJpQixrQkFBa0I7a0dBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEdkMsU0FBUztpVkFJRixLQUFLO3NCQURSLEtBQUs7Z0JBYUYsR0FBRztzQkFETixLQUFLO2dCQVdGLEdBQUc7c0JBRE4sS0FBSztnQkFXRixJQUFJO3NCQURQLEtBQUs7Z0JBWUYsTUFBTTtzQkFEVCxLQUFLO2dCQVFGLFNBQVM7c0JBRFosS0FBSztnQkFXTixVQUFVO3NCQURULEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtGLEtBQUs7c0JBRFIsS0FBSztnQkFZTixjQUFjO3NCQURiLEtBQUs7Z0JBT04sY0FBYztzQkFEYixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIGNvbXB1dGVkLFxuICAgIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eSwgTnVsbGFibGUsIFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCYXNlSW5wdXQsIFBsYXRmb3JtRm9ybUZpZWxkLCBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBTdGVwSW5wdXRDb25maWcgfSBmcm9tICcuL3N0ZXAtaW5wdXQuY29uZmlnJztcbmltcG9ydCB7IGFkZEFuZEN1dEZsb2F0aW5nTnVtYmVyRGlzdG9ydGlvbiwgZ2V0TnVtYmVyRGVjaW1hbExlbmd0aCB9IGZyb20gJy4vc3RlcC1pbnB1dC51dGlsJztcblxuLyoqIENoYW5nZSBldmVudCBvYmplY3QgZW1pdHRlZCBieSBQbGF0Zm9ybSBTdGVwIElucHV0IGNvbXBvbmVudCAqL1xuZXhwb3J0IGNsYXNzIFN0ZXBJbnB1dENoYW5nZUV2ZW50PFQgZXh0ZW5kcyBTdGVwSW5wdXRDb21wb25lbnQgPSBTdGVwSW5wdXRDb21wb25lbnQsIEsgPSBudW1iZXI+IHtcbiAgICAvKipcbiAgICAgKiBTdGVwIGlucHV0IHNlbGVjdGlvbiBjaGFuZ2UgZXZlbnRcbiAgICAgKiBAcGFyYW0gc291cmNlIFN0ZXAgaW5wdXQgY29tcG9uZW50XG4gICAgICogQHBhcmFtIHBheWxvYWQgU2VsZWN0ZWQgdmFsdWVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgLyoqIFRoZSBzb3VyY2UgU3RlcCBJbnB1dCBvZiB0aGUgZXZlbnQuICovXG4gICAgICAgIHB1YmxpYyBzb3VyY2U6IFQsXG4gICAgICAgIC8qKiBUaGUgbmV3IHZhbHVlIG9mIGEgY29udHJvbC4gKi9cbiAgICAgICAgcHVibGljIHBheWxvYWQ6IEtcbiAgICApIHt9XG59XG5cbmV4cG9ydCBlbnVtIFN0ZXBJbnB1dEFsaWduIHtcbiAgICBMZWZ0ID0gJ2xlZnQnLFxuICAgIENlbnRlciA9ICdjZW50ZXInLFxuICAgIFJpZ2h0ID0gJ3JpZ2h0J1xufVxuXG5leHBvcnQgdHlwZSBTdGVwSW5wdXRTdGVwRnVuY3Rpb25BY3Rpb24gPSAnaW5jcmVhc2UnIHwgJ2RlY3JlYXNlJztcbmV4cG9ydCB0eXBlIFN0ZXBJbnB1dFN0ZXBGdW5jdGlvbiA9ICh2YWx1ZTogbnVtYmVyLCBhY3Rpb246IFN0ZXBJbnB1dFN0ZXBGdW5jdGlvbkFjdGlvbikgPT4gbnVtYmVyO1xuXG5jb25zdCBBTElHTl9JTlBVVF9PUFRJT05TX0xJU1QgPSBbU3RlcElucHV0QWxpZ24uTGVmdCwgU3RlcElucHV0QWxpZ24uQ2VudGVyLCBTdGVwSW5wdXRBbGlnbi5SaWdodF07XG5cbi8qKlxuICogU3RlcElucHV0Q29tcG9uZW50IGlzIGEgYmFzZSBhYnN0cmFjdCBjbGFzcyB0aGF0IHNob3VsZCBiZSB1c2VkXG4gKiB0byBjcmVhdGUgdHlwZSBzcGVjaWZpYyBTdGVwSW5wdXQgY29tcG9uZW50cyBzdWNoIGFzIG51bWJlciwgbW9uZXksIHVuaXRPZk1lYXN1cmVcbiAqIFRoaXMgaG9sZHMgYmFzZSBTdGVwIElucHV0IGZ1bmN0aW9uYWxpdHkgdGhhdCBjYW4gYmUgYWJzdHJhY3RlZFxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTdGVwSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKiBTZXRzIGlucHV0IHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IE51bGxhYmxlPG51bWJlcj4pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2FuRGVjcmVtZW50SW5jcmVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHZhbHVlKCk6IE51bGxhYmxlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogU2V0cyBtaW5pbXVtIHZhbHVlIGJvdW5kYXJ5ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWluKG1pbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21pbiA9ICFpc05hTihtaW4pID8gbWluIDogLU51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkRlY3JlbWVudCgpO1xuICAgIH1cbiAgICBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgfVxuXG4gICAgLyoqIFNldHMgbWF4aW11bSB2YWx1ZSBib3VuZGFyeSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1heChtYXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9tYXggPSAhaXNOYU4obWF4KSA/IG1heCA6IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkluY3JlbWVudCgpO1xuICAgIH1cbiAgICBnZXQgbWF4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgaW5wdXQgc3RlcCB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN0ZXAoc3RlcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrQW5kVGhyb3dFcnJvcklmU3RlcERvZXNudE1hdGNoUHJlY2lzaW9uKHRoaXMucHJlY2lzaW9uLCBzdGVwKTtcbiAgICAgICAgdGhpcy5fc3RlcCA9IHN0ZXA7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNhbkRlY3JlbWVudEluY3JlbWVudCgpO1xuICAgIH1cbiAgICBnZXQgc3RlcCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RlcDtcbiAgICB9XG5cbiAgICAvKiogQ3VzdG9tIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBzdGVwIGR5bmFtaWNhbGx5ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RlcEZuKHN0ZXBGbjogU3RlcElucHV0U3RlcEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBGbiA9IHN0ZXBGbjtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2FuRGVjcmVtZW50SW5jcmVtZW50KCk7XG4gICAgfVxuXG4gICAgLyoqIE51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBwcmVjaXNpb24ocHJlY2lzaW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tBbmRUaHJvd0Vycm9ySWZTdGVwRG9lc250TWF0Y2hQcmVjaXNpb24ocHJlY2lzaW9uLCB0aGlzLnN0ZXApO1xuICAgICAgICB0aGlzLl9wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgfVxuICAgIGdldCBwcmVjaXNpb24oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWNpc2lvbjtcbiAgICB9XG5cbiAgICAvKiogU2V0cyBsYXJnZVN0ZXAgbXVsdGlwbGllciAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGFyZ2VyU3RlcCA9IDI7XG5cbiAgICAvKiogSGlkZXMgLS8rIGljb25zIGFuZCBzaG93cyBsYWJlbHMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dMYWJlbHMgPSBmYWxzZTtcblxuICAgIC8qKiBIb3Jpem9udGFsbHkgYWxpZ25zIHZhbHVlIGluc2lkZSBpbnB1dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGFsaWduKGFsaWduOiBTdGVwSW5wdXRBbGlnbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fYWxpZ24kLnNldChhbGlnbik7XG4gICAgfVxuICAgIGdldCBhbGlnbigpOiBTdGVwSW5wdXRBbGlnbiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWxpZ24kKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQVJJQSBsYWJlbCBmb3IgaW5jcmVtZW50IGJ1dHRvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5jcmVtZW50TGFiZWw6IHN0cmluZyA9IHRoaXMuY29uZmlnLmluY3JlbWVudExhYmVsO1xuXG4gICAgLyoqXG4gICAgICogQVJJQSBsYWJlbCBmb3IgZGVjcmVtZW50IGJ1dHRvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVjcmVtZW50TGFiZWw6IHN0cmluZyA9IHRoaXMuY29uZmlnLmRlY3JlbWVudExhYmVsO1xuXG4gICAgLyoqIEVtaXRzIG5ldyB2YWx1ZSB3aGVuIGNvbnRyb2wgdmFsdWUgaGFzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U3RlcElucHV0Q2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGxhc3RFbWl0dGVkVmFsdWU6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2FuSW5jcmVtZW50ID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2FuRGVjcmVtZW50ID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogSW5kaWNhdGVzIGlmIGNvbnRyb2wgaGFzIGFuIGVycm9yXG4gICAgICovXG4gICAgaXNFcnJvclN0YXRlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjYW5DaGFuZ2VWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5lZGl0YWJsZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29udGVudERlbnNpdHk6IENvbnRlbnREZW5zaXR5ID0gdGhpcy5jb25maWcuY29udGVudERlbnNpdHk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9hbGlnbiQgPSBzaWduYWw8U3RlcElucHV0QWxpZ24gfCBudWxsPihudWxsKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3RleHRBbGlnbiQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWduID0gdGhpcy5fYWxpZ24kKCk7XG5cbiAgICAgICAgY29uc3QgaXNSdGwgPSAhIXRoaXMuX3J0bFNlcnZpY2U/LnJ0bFNpZ25hbCgpO1xuXG4gICAgICAgIGlmICghQUxJR05fSU5QVVRfT1BUSU9OU19MSVNULmluY2x1ZGVzKGFsaWduISkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1J0bCAmJiBhbGlnbiA9PT0gU3RlcElucHV0QWxpZ24uTGVmdCkge1xuICAgICAgICAgICAgcmV0dXJuIFN0ZXBJbnB1dEFsaWduLlJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1J0bCAmJiBhbGlnbiA9PT0gU3RlcElucHV0QWxpZ24uUmlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBTdGVwSW5wdXRBbGlnbi5MZWZ0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGlnbjtcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWF4OiBudW1iZXIgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9taW46IG51bWJlciA9IC1OdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGVwID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RlcEZuOiBTdGVwSW5wdXRTdGVwRnVuY3Rpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZWNpc2lvbjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wZW5kaW5nRW50ZXJlZFZhbHVlOiBudW1iZXIgfCBFcnJvciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfY3VycmVudFZhbHVlKCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBjb25zdCBwZW5kaW5nVmFsdWUgPSB0aGlzLl9wZW5kaW5nRW50ZXJlZFZhbHVlO1xuXG4gICAgICAgIGlmIChwZW5kaW5nVmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGVuZGluZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGVuZGluZ1ZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBuZ0Zvcm06IE5nRm9ybSxcbiAgICAgICAgZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICAgICAgZm9ybUNvbnRyb2w6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgcHJvdGVjdGVkIGNvbmZpZzogU3RlcElucHV0Q29uZmlnLFxuICAgICAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGNkLCBlbGVtZW50UmVmLCBuZ0NvbnRyb2wsIGNvbnRyb2xDb250YWluZXIsIG5nRm9ybSwgZm9ybUZpZWxkLCBmb3JtQ29udHJvbCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDYW5EZWNyZW1lbnRJbmNyZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl91cGRhdGVWaWV3VmFsdWUoKTtcblxuICAgICAgICB0aGlzLmxhc3RFbWl0dGVkVmFsdWUgPSB0aGlzLl92YWx1ZTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0Zvcm1FcnJvclN0YXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBPdmVycmlkZSB3cml0ZVZhbHVlIG1ldGhvZCB0byBrZWVwIGlucHV0IHZpZXcgdmFsdWUgdXAgdG8gZGF0ZVxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuX3Jlc2V0UGVuZGluZ0VudGVyZWRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBJbmNyZWFzZSB2YWx1ZSAqL1xuICAgIGluY3JlYXNlKHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JJbmNyZWFzZSgpKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5JbmNyZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGFkZEFuZEN1dEZsb2F0aW5nTnVtYmVyRGlzdG9ydGlvbih0aGlzLl9jdXJyZW50VmFsdWUsIHN0ZXApO1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5fdmFsaWRhdGVWYWx1ZUJ5TGltaXRzKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fZW1pdENoYW5nZWRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBEZWNyZWFzZSB2YWx1ZSAqL1xuICAgIGRlY3JlYXNlKHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JEZWNyZWFzZSgpKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5EZWNyZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGFkZEFuZEN1dEZsb2F0aW5nTnVtYmVyRGlzdG9ydGlvbih0aGlzLl9jdXJyZW50VmFsdWUsIC1zdGVwKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX3ZhbGlkYXRlVmFsdWVCeUxpbWl0cyh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogSW5jcmVhc2UgdmFsdWUgYnkgbGFyZ2Ugc3RlcCAqL1xuICAgIGxhcmdlU3RlcEluY3JlYXNlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5fZ2V0U3RlcFZhbHVlRm9ySW5jcmVhc2UoKSAqIHRoaXMubGFyZ2VyU3RlcDtcbiAgICAgICAgdGhpcy5pbmNyZWFzZShzdGVwKTtcbiAgICB9XG5cbiAgICAvKiogRGVjcmVhc2UgdmFsdWUgYnkgbGFyZ2Ugc3RlcCAqL1xuICAgIGxhcmdlU3RlcERlY3JlYXNlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5fZ2V0U3RlcFZhbHVlRm9yRGVjcmVhc2UoKSAqIHRoaXMubGFyZ2VyU3RlcDtcbiAgICAgICAgdGhpcy5kZWNyZWFzZShzdGVwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIGNhdGNoIHZhbHVlIGR1cmluZyBlbnRlcmluZyBmcm9tIHZpZXcuXG4gICAgICovXG4gICAgb25FbnRlclZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVJbkZvY3VzTW9kZSh2YWx1ZSk7XG4gICAgICAgIGxldCBwZW5kaW5nVmFsdWUgPSBwYXJzZWRWYWx1ZTtcblxuICAgICAgICBpZiAocGVuZGluZ1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwZW5kaW5nVmFsdWUgPSB0aGlzLl92YWxpZGF0ZVZhbHVlQnlMaW1pdHMocGVuZGluZ1ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvdWxkIG5vdCBwYXJzZSB2YWx1ZSwgdmFsdWUgaXMgaW52YWxpZFxuICAgICAgICBpZiAocGVuZGluZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRQZW5kaW5nRW50ZXJlZFZhbHVlKG5ldyBFcnJvcigndmFsdWUgaXMgaW52YWxpZCcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFBlbmRpbmdFbnRlcmVkVmFsdWUocGVuZGluZ1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ29tbWl0IGVudGVyZWQgdmFsdWUgZnJvbSB2aWV3LlxuICAgICAqL1xuICAgIGNvbW1pdEVudGVyZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgY29uc3QgbmVlZFRvVXBkYXRlVmlldyA9IHRoaXMuX3ZhbHVlID09PSBuZXdWYWx1ZTtcblxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG5cbiAgICAgICAgaWYgKG5lZWRUb1VwZGF0ZVZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdWYWx1ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB0aGlzLmxhc3RFbWl0dGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkVmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogSW5kaWNhdGVzIHdoZW4gaW5wdXQgZ2V0cyBmb2N1c2VkXG4gICAgICovXG4gICAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuX29uRm9jdXNDaGFuZ2VkKHRydWUpO1xuICAgICAgICAvLyBXaGVuIGZvY3VzIGhhcHBlbnMgYnkgXCJUYWJcIiBrZXkgYW4gaW5wdXQgZmllbGQgdmFsdWUgZ2V0cyBzZWxlY3RlZCBieSBkZWZhdWx0LlxuICAgICAgICAvLyBJbiBjYXNlcyB3aGVuIG5ld19mb3JtYXR0ZWRfdmFsdWUgIT09IHByZXZpb3VzX3ZhbHVlIHRoZSBzZWxlY3Rpb24gZ2V0cyBsb3N0LlxuICAgICAgICAvLyBTbyBpdCdzIG5lZWRlZCB0byB0cmFjayBzZWxlY3Rpb24gYmVmb3JlIG5ldyB2YWx1ZSByZW5kZXJpbmcgYW5kIHJlc3RvcmUgaXQuXG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gdGhpcy5fZ2V0VmFsdWVTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb25FbmQgLSBzZWxlY3Rpb25TdGFydCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlU2VsZWN0aW9uKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBpbnB1dCBsb3NlcyBmb2N1c1xuICAgICAqL1xuICAgIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuX29uRm9jdXNDaGFuZ2VkKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlld1ZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSB2YWx1ZUNoYW5nZSBldmVudCAqL1xuICAgIGFic3RyYWN0IGNyZWF0ZUNoYW5nZUV2ZW50KHZhbHVlOiBudW1iZXIpOiBTdGVwSW5wdXRDaGFuZ2VFdmVudDtcblxuICAgIC8qKiBGb3JtYXQgdmFsdWUgZm9yIHZpZXcgcHJlc2VudGF0aW9uICovXG4gICAgYWJzdHJhY3QgZm9ybWF0VmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpOiBzdHJpbmc7XG5cbiAgICAvKiogRm9ybWF0IHZhbHVlIGZvciBcImluIGZvY3VzXCIgbW9kZSAqL1xuICAgIGFic3RyYWN0IGZvcm1hdFZhbHVlSW5Gb2N1c01vZGUodmFsdWU6IG51bWJlcik6IHN0cmluZztcblxuICAgIC8qKiBQYXJzZSB2YWx1ZSBlbnRlcmVkIFwiaW4gZm9jdXNcIiBtb2RlICovXG4gICAgYWJzdHJhY3QgcGFyc2VWYWx1ZUluRm9jdXNNb2RlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0Zvcm1FcnJvclN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlc1xuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5pc0Vycm9yU3RhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yU3RhdGUgPSB0aGlzLnN0YXRlID09PSAnZXJyb3InO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRXJyb3JTdGF0ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lbWl0Q2hhbmdlZFZhbHVlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICB0aGlzLmxhc3RFbWl0dGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuY3JlYXRlQ2hhbmdlRXZlbnQodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFN0ZXBWYWx1ZUZvckluY3JlYXNlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdGVwVmFsdWUoJ2luY3JlYXNlJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRTdGVwVmFsdWVGb3JEZWNyZWFzZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3RlcFZhbHVlKCdkZWNyZWFzZScpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogR2V0IHN0ZXAgdmFsdWUgYmFzZWQgZWl0aGVyIG9uIFwic3RlcEZuXCIgb3IgXCJzdGVwXCJcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRTdGVwVmFsdWUoYWN0aW9uOiBTdGVwSW5wdXRTdGVwRnVuY3Rpb25BY3Rpb24pOiBudW1iZXIge1xuICAgICAgICAvLyBzdGVGbiBoYXMgcHJlY2VkZW5jZVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3N0ZXBGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFN0ZXAgPSB0aGlzLl9zdGVwRm4odGhpcy5fY3VycmVudFZhbHVlID8/IHRoaXMubWluLCBhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZWRTdGVwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVWaWV3VmFsdWUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuX2Zvcm1hdFZhbHVlKCk7XG4gICAgICAgIHRoaXMuX3JlbmRlclZhbHVlKGZvcm1hdHRlZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtYXRWYWx1ZSh2YWx1ZSA9IHRoaXMuX3ZhbHVlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0VmFsdWVJbkZvY3VzTW9kZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVuZGVyVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5fZ2V0SW5wdXROYXRpdmVFbGVtZW50KCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KGlucHV0RWwsICd2YWx1ZScsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldElucHV0TmF0aXZlRWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRWYWx1ZVNlbGVjdGlvbigpOiB7IHNlbGVjdGlvblN0YXJ0OiBudW1iZXI7IHNlbGVjdGlvbkVuZDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5fZ2V0SW5wdXROYXRpdmVFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gaW5wdXRFbD8uc2VsZWN0aW9uU3RhcnQgfHwgMDtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gaW5wdXRFbD8uc2VsZWN0aW9uRW5kIHx8IDA7XG4gICAgICAgIHJldHVybiB7IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFZhbHVlU2VsZWN0aW9uKHNlbGVjdGlvblN0YXJ0OiBudW1iZXIsIHNlbGVjdGlvbkVuZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0RWwgPSB0aGlzLl9nZXRJbnB1dE5hdGl2ZUVsZW1lbnQoKTtcbiAgICAgICAgaWYgKCFpbnB1dEVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXRFbC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUNhbkluY3JlbWVudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IHRoaXMuX2dldFN0ZXBWYWx1ZUZvckluY3JlYXNlKCk7XG4gICAgICAgIHRoaXMuY2FuSW5jcmVtZW50ID0gKHRoaXMuX3ZhbHVlIHx8IDApICsgc3RlcCA8PSB0aGlzLl9tYXg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVDYW5EZWNyZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLl9nZXRTdGVwVmFsdWVGb3JEZWNyZWFzZSgpO1xuICAgICAgICB0aGlzLmNhbkRlY3JlbWVudCA9ICh0aGlzLl92YWx1ZSB8fCAwKSAtIHN0ZXAgPj0gdGhpcy5fbWluO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQ2FuRGVjcmVtZW50SW5jcmVtZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDYW5EZWNyZW1lbnQoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2FuSW5jcmVtZW50KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWxpZGF0ZVZhbHVlQnlMaW1pdHModmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgdGhpcy5fbWluKSwgdGhpcy5fbWF4KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrQW5kVGhyb3dFcnJvcklmU3RlcERvZXNudE1hdGNoUHJlY2lzaW9uKHByZWNpc2lvbjogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgXCJwcmVjaXNpb25cIiBpcyB2YWxpZCBjb21wYXJpbmcgdG8gXCJzdGVwXCJcbiAgICAgICAgY29uc3Qgc3RlcERlY2ltYWxMZW5ndGggPSBnZXROdW1iZXJEZWNpbWFsTGVuZ3RoKHN0ZXApO1xuICAgICAgICBjb25zdCBwcmVjaXNpb25EZWNpbWFsTGVuZ3RoID0gZ2V0TnVtYmVyRGVjaW1hbExlbmd0aChwcmVjaXNpb24pO1xuICAgICAgICBpZiAoc3RlcERlY2ltYWxMZW5ndGggPiBwcmVjaXNpb25EZWNpbWFsTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBgU3RlcCBpbnB1dDogVGhlIHZhbHVlIG9mIHN0ZXAgcHJvcGVydHkgY2FuIG5vdCBjb250YWluIG1vcmUgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IHRoYW4gd2hhdCBpcyBzZXQgdG8gdGhlIHByZWNpc2lvbiBwcm9wZXJ0eWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFBlbmRpbmdFbnRlcmVkVmFsdWUodmFsdWU6IG51bWJlciB8IEVycm9yKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdFbnRlcmVkVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2V0UGVuZGluZ0VudGVyZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0VudGVyZWRWYWx1ZSA9IG51bGw7XG4gICAgfVxufVxuIl19
|