@c8y/ngx-components 1021.35.2 → 1021.37.5
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/alarms/alarms-view.service.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
- package/core/common/forOf.directive.d.ts.map +1 -1
- package/core/data-grid/data-grid.model.d.ts +2 -0
- package/core/data-grid/data-grid.model.d.ts.map +1 -1
- package/core/data-grid/data-grid.service.d.ts.map +1 -1
- package/core/file-picker/file-picker.component.d.ts +4 -2
- package/core/file-picker/file-picker.component.d.ts.map +1 -1
- package/core/forms/validation-pattern.d.ts +8 -0
- package/core/forms/validation-pattern.d.ts.map +1 -1
- package/device-profile/device-profile.component.d.ts +3 -1
- package/device-profile/device-profile.component.d.ts.map +1 -1
- package/device-profile/device-profile.service.d.ts +25 -0
- package/device-profile/device-profile.service.d.ts.map +1 -1
- package/device-profile/device-tab-profile/device-tab-profile.component.d.ts +7 -10
- package/device-profile/device-tab-profile/device-tab-profile.component.d.ts.map +1 -1
- package/esm2022/alarms/alarms-view.service.mjs +3 -1
- package/esm2022/alarms/alarms.component.mjs +2 -2
- package/esm2022/assets-navigator/asset-selector/asset-selector.component.mjs +3 -3
- package/esm2022/context-dashboard/context-dashboard.component.mjs +8 -2
- package/esm2022/core/common/forOf.directive.mjs +5 -1
- package/esm2022/core/data-grid/data-grid.model.mjs +1 -1
- package/esm2022/core/data-grid/data-grid.service.mjs +5 -2
- package/esm2022/core/file-picker/file-picker.component.mjs +7 -5
- package/esm2022/core/forms/validation-pattern.mjs +9 -1
- package/esm2022/core/navigator/navigator-bottom/navigator-bottom.component.mjs +3 -3
- package/esm2022/device-profile/device-profile.component.mjs +14 -10
- package/esm2022/device-profile/device-profile.service.mjs +58 -2
- package/esm2022/device-profile/device-tab-profile/device-tab-profile.component.mjs +40 -34
- package/esm2022/operations/operations-list/operations-list-item.component.mjs +14 -6
- package/esm2022/operations/operations-list/operations-list.component.mjs +13 -5
- package/esm2022/repository/configuration/list/configuration-detail.component.mjs +5 -4
- package/esm2022/repository/firmware/list/add-firmware-modal.component.mjs +5 -4
- package/esm2022/repository/software/list/add-software-modal.component.mjs +5 -4
- package/fesm2022/c8y-ngx-components-alarms.mjs +3 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +2 -2
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +6 -0
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +107 -43
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +25 -9
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +10 -9
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +4 -3
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +4 -3
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +88 -72
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +10 -4
- package/locales/es.po +10 -4
- package/locales/fr.po +10 -4
- package/locales/ja_JP.po +10 -5
- package/locales/ko.po +10 -5
- package/locales/locales.pot +8 -2
- package/locales/nl.po +10 -4
- package/locales/pl.po +10 -4
- package/locales/pt_BR.po +10 -4
- package/locales/zh_CN.po +10 -5
- package/locales/zh_TW.po +10 -5
- package/operations/operations-list/operations-list-item.component.d.ts +3 -1
- package/operations/operations-list/operations-list-item.component.d.ts.map +1 -1
- package/operations/operations-list/operations-list.component.d.ts +1 -0
- package/operations/operations-list/operations-list.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/repository/configuration/list/configuration-detail.component.d.ts +2 -1
- package/repository/configuration/list/configuration-detail.component.d.ts.map +1 -1
- package/repository/firmware/list/add-firmware-modal.component.d.ts +2 -1
- package/repository/firmware/list/add-firmware-modal.component.d.ts.map +1 -1
- package/repository/software/list/add-software-modal.component.d.ts +2 -1
- package/repository/software/list/add-software-modal.component.d.ts.map +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { Component, HostBinding, HostListener, Inject, Input, Renderer2, ViewChild } from '@angular/core';
|
|
3
3
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
|
-
import { ActionBarService, AlertService, CopyDashboardDisabledReason, DashboardChildChange, GainsightService, gettext, memoize, ModalService, Status, WidgetsDashboardComponent } from '@c8y/ngx-components';
|
|
4
|
+
import { ActionBarService, AlertService, CopyDashboardDisabledReason, DashboardChildChange, GainsightService, gettext, memoize, ModalService, NEW_DASHBOARD_QUERY_PARAM, Status, WidgetsDashboardComponent } from '@c8y/ngx-components';
|
|
5
5
|
import { TranslateService } from '@ngx-translate/core';
|
|
6
6
|
import { cloneDeep, every, findIndex, kebabCase, keyBy, omit, some } from 'lodash-es';
|
|
7
7
|
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
@@ -94,6 +94,12 @@ export class ContextDashboardComponent {
|
|
|
94
94
|
if (this.dataSub) {
|
|
95
95
|
this.dataSub.unsubscribe();
|
|
96
96
|
}
|
|
97
|
+
const isNewDashboard = this.route.snapshot.queryParams[NEW_DASHBOARD_QUERY_PARAM];
|
|
98
|
+
if (isNewDashboard) {
|
|
99
|
+
this.router.navigate([], {
|
|
100
|
+
queryParams: null
|
|
101
|
+
});
|
|
102
|
+
}
|
|
97
103
|
}
|
|
98
104
|
/**
|
|
99
105
|
* Guards component from unintended navigation away or closing tab without saving changes.
|
|
@@ -703,4 +709,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
703
709
|
type: HostListener,
|
|
704
710
|
args: ['window:beforeunload', ['$event']]
|
|
705
711
|
}], convertStringToHash: [] } });
|
|
706
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWiwyQkFBMkIsRUFFM0Isb0JBQW9CLEVBSXBCLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsT0FBTyxFQUNQLFlBQVksRUFFWixNQUFNLEVBR04seUJBQXlCLEVBQzFCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUVMLHdCQUF3QixFQUl4Qiw2QkFBNkIsRUFHN0Isa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUN0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9B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S0FBSztnQkFHTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBR04scUJBQXFCO3NCQURwQixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixLQUFLO3NCQURKLFdBQVc7dUJBQUMsT0FBTztnQkFHbUMsZ0JBQWdCO3NCQUF0RSxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFckQsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQThDaEQsbUJBQW1CO3NCQUR4QixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVwQmpDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJTZXJ2aWNlLFxuICBBbGVydFNlcnZpY2UsXG4gIEJyZWFkY3J1bWJJdGVtLFxuICBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24sXG4gIERhc2hib2FyZENoYW5nZSxcbiAgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UsXG4gIERhc2hib2FyZENoaWxkQ29tcG9uZW50LFxuICBEYXNoYm9hcmRDb3B5UGVybWlzc2lvbixcbiAgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIG1lbW9pemUsXG4gIE1vZGFsU2VydmljZSxcbiAgUmV2ZXJ0Q2hhbmdlVHlwZSxcbiAgU3RhdHVzLFxuICBXaWRnZXQsXG4gIFdpZGdldENoYW5nZSxcbiAgV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZXZlcnksIGZpbmRJbmRleCwga2ViYWJDYXNlLCBrZXlCeSwgb21pdCwgc29tZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDYW5EZWFjdGl2YXRlQ29tcG9uZW50LFxuICBDT05URVhUX0RBU0hCT0FSRF9DT05GSUcsXG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRDb25maWcsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRSxcbiAgRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZSxcbiAgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0UsXG4gIFdJREdFVF9IRUFERVJfQ0xBU1NFU1xufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcbmltcG9ydCB7IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhc2hib2FyZERldGFpbENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgV2lkZ2V0Q29uZmlnQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtY29uZmlnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRFZGl0TW9kZVNlcnZpY2UgfSBmcm9tICcuL21lbWVudG8vZGFzaGJvYXJkLWVkaXQtbW9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG4vKipcbiAqIFRoZSBjb250ZXh0IGRhc2hib2FyZCBpcyBhIGRhc2hib2FyZCB3aGljaCByZXNvbHZlcyBpdCBkYXRhIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoZGV2aWNlIG9yIGdyb3VwKVxuICogaXQgaXMgZGlzcGxheWVkIG9uLiBJdCB1c3VhbGx5IHVzZXMgdGhlIHJvdXRlLmRhdGEgZm9yIGl0LCBidXQgeW91IGNhbiBwYXNzXG4gKiBhIGRpZmZlcmVudCBtYW5hZ2VkT2JqZWN0IHRvIHRoZSBbbW9dIGlucHV0IHBhcmFtZXRlciB0byBjaGFuZ2UgdGhhdCBiZWhhdmlvci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbnRleHQtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiBgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICBgLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkIGM4eS1ncmlkLWRhc2hib2FyZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENhbkRlYWN0aXZhdGVDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGNoaWxkcmVuQ2xhc3NlcyA9ICcnO1xuICBASW5wdXQoKVxuICBjb250ZXh0OiBhbnk7XG4gIEBJbnB1dCgpXG4gIHNldFRpdGxlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZGVmYXVsdFdpZGdldHM6IFdpZGdldFtdID0gW107XG4gIEBJbnB1dCgpXG4gIGNhbkNvcHkgPSB0cnVlO1xuICBASW5wdXQoKVxuICBjYW5EZWxldGUgPSB0cnVlO1xuICBASW5wdXQoKVxuICBpc0xvYWRpbmcgPSB0cnVlO1xuICBASW5wdXQoKVxuICBicmVhZGNydW1iU2V0dGluZ3M6IEJyZWFkY3J1bWJJdGVtO1xuICBASW5wdXQoKVxuICBzaG93Q29udGV4dEhlbHBCdXR0b24gPSB0cnVlO1xuICAvKiogV2hldGhlciB0byB0cmFuc2xhdGUgd2lkZ2V0IHRpdGxlcy4gSG93ZXZlciwgZGFzaGJvYXJkJ3Mgb3duIHNldHRpbmcgdGFrZXMgcHJlY2VkZW5jZS4gSXQgZG9lcyBub3Qgb3ZlcnJpZGUgZGFzaGJvYXJkJ3Mgc2V0dGluZyAqL1xuICBASW5wdXQoKSB0cmFuc2xhdGVXaWRnZXRUaXRsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhpZGVzIGRhc2hib2FyZCBhdmFpbGFiaWxpdHkgc2VsZWN0aW9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgaGlkZUF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBjbGFzcyA9ICcnO1xuXG4gIEBWaWV3Q2hpbGQoRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXNoYm9hcmREZXRhaWxzOiBEYXNoYm9hcmREZXRhaWxDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgd2lkZ2V0c0Rhc2hib2FyZDogV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudDtcblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmhhc1Blcm1pc3Npb25Ub0VkaXREYXNoYm9hcmQgfHwgIXRoaXMuZGFzaGJvYXJkRGV0YWlscz8uaXNDb2xsYXBzZWQ7XG4gIH1cblxuICB3aWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXNDb3B5RGlzYWJsZWQ6IERhc2hib2FyZENvcHlQZXJtaXNzaW9uO1xuICBpc1JlcG9ydDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGFzaGJvYXJkVHlwZUxhYmVsID0gZ2V0dGV4dCgnRGFzaGJvYXJkIGZvciBcInt7IGRhc2hib2FyZFR5cGUgfX1cIicpO1xuICByZWFkb25seSBkYXNoYm9hcmRUeXBlUG9wb3ZlciA9IGdldHRleHQoYFxuICBUaGUgbGF5b3V0IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoaXMgZGFzaGJvYXJkIGlzIHVzZWQgYnkgYWxsIG90aGVyIGFzc2V0cyBvZiBtb2RlbCB0eXBlXG4gIDxzdHJvbmc+e3sgZGFzaGJvYXJkVHlwZSB9fTwvc3Ryb25nPi4gQW55IGNoYW5nZXMgbWFkZSB0byB0aGlzIGRhc2hib2FyZCBpbnN0YW5jZSB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsXG4gIG90aGVyIGluc3RhbmNlcy5gKTtcbiAgcHJpdmF0ZSBkYXRhU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaGFzUGVybWlzc2lvblRvRWRpdERhc2hib2FyZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjb250ZXh0RGFzaGJvYXJkU2VydmljZTogQ29udGV4dERhc2hib2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBASW5qZWN0KENPTlRFWFRfREFTSEJPQVJEX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogQ29udGV4dERhc2hib2FyZENvbmZpZyxcbiAgICBwcml2YXRlIHdpZGdldFNlcnZpY2U6IFdpZGdldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25CYXJTZXJ2aWNlOiBBY3Rpb25CYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGVkaXRNb2RlU2VydmljZTogRGFzaGJvYXJkRWRpdE1vZGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5sb2FkQ29udGV4dERhc2hib2FyZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWROYW1lZERhc2hib2FyZCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGJlZm9yZVVubG9hZEhhbmRsZXIoJGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkge1xuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGUgPSBhd2FpdCB0aGlzLmNhbkRlYWN0aXZhdGUodHJ1ZSk7XG4gICAgaWYgKCFjYW5EZWFjdGl2YXRlKSB7XG4gICAgICAkZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIHdpZGdldFxuICAgKiBAcGFyYW0gd2lkZ2V0IFRoZSB3aWRnZXQgdG8gYXBwbHkgdGhlIGNvbnRleHQgdG8uXG4gICAqL1xuICBhcHBseURldmljZVRhcmdldCh3aWRnZXQpIHtcbiAgICBpZiAod2lkZ2V0LmNvbmZpZy5kZXZpY2UpIHtcbiAgICAgIHdpZGdldC5jb25maWcuZGV2aWNlID0geyBpZDogdGhpcy5jb250ZXh0LmlkLCBuYW1lOiB0aGlzLmNvbnRleHQubmFtZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSByb3V0ZSBsaXN0ZW5lci5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWIpIHtcbiAgICAgIHRoaXMuZGF0YVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR3VhcmRzIGNvbXBvbmVudCBmcm9tIHVuaW50ZW5kZWQgbmF2aWdhdGlvbiBhd2F5IG9yIGNsb3NpbmcgdGFiIHdpdGhvdXQgc2F2aW5nIGNoYW5nZXMuXG4gICAqIE5hdmlnYXRpb24gY29udGludWVzIGlmIHRydWUgaXMgcmV0dXJuZWQsIGFuZCBuYXZpZ2F0aW9uIGlzIGNhbmNlbGxlZCBpZiByZXR1cm5lZCB2YWx1ZSBpcyBmYWxzZS5cbiAgICogQHBhcmFtIG9taXRDb25maXJtIE9taXRzIGNvbmZpcm0gY2FsbHMgaW5zaWRlIG1ldGhvZCBib2R5ICh3aXRob3V0IHRoaXMgcGFyYW0sIHdoZW4gbWV0aG9kIGlzIHVzZWQgaW5cbiAgICogb24gJ2JlZm9yZXVubG9hZCcgZXZlbnQgaGFuZGxlciwgZXJyb3IgaXMgdGhyb3duIGluIGNvbnNvbGUgYmVjYXVzZSBjb25maXJtIGlzIGJsb2NrZWQgYnkgYnJvd3NlciBhbnl3YXkgYW5kIHJldHVybnMgZmFsc2UpXG4gICAqL1xuICBhc3luYyBjYW5EZWFjdGl2YXRlKG9taXRDb25maXJtID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjYW5EZWFjdGl2YXRlID1cbiAgICAgIChhd2FpdCB0aGlzLmRhc2hib2FyZERldGFpbHMuY2FuRGVhY3RpdmF0ZShvbWl0Q29uZmlybSkpICYmXG4gICAgICAoYXdhaXQgdGhpcy53aWRnZXRzRGFzaGJvYXJkLmNhbkRlYWN0aXZhdGUob21pdENvbmZpcm0pKTtcblxuICAgIC8vIE5lZWRlZCBpbiBvcmRlciB0byByZXNldCBlZGl0IG1vZGUsIG90aGVyd2lzZSB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGRhc2hib2FyZHMsIHRoZSBlZGl0IG1vZGUgaXMgc3RpbGwgZW5hYmxlZC5cbiAgICBpZiAoY2FuRGVhY3RpdmF0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5jYW5jZWxFZGl0TW9kZSh0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbkRlYWN0aXZhdGU7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIGRhc2hib2FyZCB3aWRnZXRzIHRvIHRoZSBkZWZhdWx0IHdpZGdldHMuXG4gICAqL1xuICBhc3luYyByZXN0b3JlKCkge1xuICAgIGNvbnN0IG1lc2cgPSBnZXR0ZXh0KFxuICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gcmVzZXQgdGhlIHdpZGdldHMgb2YgdGhpcyBkYXNoYm9hcmQuIEFsbCBjaGFuZ2VzIHRvIHRoZSBkYXNoYm9hcmQgd2lkZ2V0cyB3aWxsIGdldCBsb3N0IGFuZCBjYW5ub3QgYmUgcmVjb3ZlcmVkLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShnZXR0ZXh0KCdSZXNldCB3aWRnZXRzJyksIG1lc2csIFN0YXR1cy5XQVJOSU5HLCB7XG4gICAgICAgIG9rOiBnZXR0ZXh0KCdSZXNldGBkYXNoYm9hcmRgJyksXG4gICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLm1hcFdpZGdldHModGhpcy5kZWZhdWx0V2lkZ2V0cyk7XG4gICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuaGlzdG9yeURlc2NyaXB0aW9uID0ge1xuICAgICAgICBjaGFuZ2VUeXBlOiAncmVzZXQnXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUodGhpcy5tbyk7XG4gICAgICBhd2FpdCB0aGlzLm9uTG9hZCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIE1ldGhvZCBjYWxsZWQgb24gZXZlcnkgd2lkZ2V0cyBkaW1lbnNpb25zIG9yIHBvc2l0aW9uIGNoYW5nZSBidXQgYWxzbyBmb3IgYWRkaW5nIG5ldyB3aWRnZXQgKGJlY2F1c2UgYWRkaW5nXG4gICAqIHdpZGdldCBjYXVzZXMgbGF5b3V0IGNoYW5nZXMpLiBJdCByZWNvZ25pemVzIHdoYXQgdHlwZSBvZiBjaGFuZ2UgaGFzIGJlZW4gZG9uZSBhbmQgdXBkYXRlcyBjdXJyZW50IHdpZGdldHMgc3RhdGVcbiAgICogYWNjb3JkaW5nbHkuXG4gICAqIEBwYXJhbSBjaGlsZCBDaGFuZ2Ugb2JqZWN0LlxuICAgKi9cbiAgcG9zaXRpb25PcldpZGdldERpbWVuc2lvbkNoYW5nZShjaGlsZDogRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfCBEYXNoYm9hcmRDaGFuZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmVkaXRNb2RlU2VydmljZS5nZXRDdXJyZW50U3RhdGUoKT8uY2hpbGRyZW4gfHwge307XG4gICAgY29uc3QgZGVzY3JpcHRpb25Qcm9wOiBrZXlvZiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSA9XG4gICAgICBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPT09IE9iamVjdC52YWx1ZXMoY3VycmVudFN0YXRlKS5sZW5ndGggPyAnYXJyYW5nZW1lbnQnIDogJ2FkZGVkJztcbiAgICBsZXQgY2hhbmdlTmFtZTogRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZVsnbmFtZSddO1xuICAgIGxldCB3aWRnZXRzQ2hhbmdlZDogV2lkZ2V0W107XG4gICAgaWYgKGRlc2NyaXB0aW9uUHJvcCA9PT0gJ2FkZGVkJykge1xuICAgICAgY2hhbmdlTmFtZSA9IERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FLmFkZGVkO1xuICAgICAgY29uc3QgYWRkZWRXaWRnZXQgPSBjaGlsZC5jaGlsZHJlbi5maW5kKGMgPT4gIWN1cnJlbnRTdGF0ZVtjLmRhdGEuaWRdKTtcbiAgICAgIHdpZGdldHNDaGFuZ2VkID0gW2FkZGVkV2lkZ2V0LmRhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2VOYW1lID0gREFTSEJPQVJEX0NISUxEUkVOX1NUQVRFX05BTUUuYXJyYW5nZW1lbnQ7XG4gICAgICB3aWRnZXRzQ2hhbmdlZCA9IGNoaWxkLmNoaWxkcmVuXG4gICAgICAgIC5tYXAoYyA9PiB7XG4gICAgICAgICAgY29uc3QgbGFzdFN0YXRlQ2hpbGQgPSBjdXJyZW50U3RhdGVbYy5kYXRhLmlkXTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjLnggIT0gbGFzdFN0YXRlQ2hpbGQuX3ggfHxcbiAgICAgICAgICAgIGMueSAhPSBsYXN0U3RhdGVDaGlsZC5feSB8fFxuICAgICAgICAgICAgYy53aWR0aCAhPSBsYXN0U3RhdGVDaGlsZC5fd2lkdGggfHxcbiAgICAgICAgICAgIGMuaGVpZ2h0ICE9IGxhc3RTdGF0ZUNoaWxkLl9oZWlnaHRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjLmRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkQ2hpbGRyZW4oY2hpbGQsIGNoYW5nZU5hbWUsIGRlc2NyaXB0aW9uUHJvcCwgd2lkZ2V0c0NoYW5nZWQpO1xuICB9XG5cbiAgYXN5bmMgcmV2ZXJ0Q2hhbmdlKHJldmVydFR5cGU6IFJldmVydENoYW5nZVR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZGFzaGJvYXJkQ2hpbGRyZW46IENvbnRleHREYXNoYm9hcmRbJ2NoaWxkcmVuJ107XG4gICAgaWYgKHJldmVydFR5cGUgPT09ICd1bmRvJykge1xuICAgICAgZGFzaGJvYXJkQ2hpbGRyZW4gPSB0aGlzLmVkaXRNb2RlU2VydmljZS51bmRvKCkuY2hpbGRyZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhc2hib2FyZENoaWxkcmVuID0gdGhpcy5lZGl0TW9kZVNlcnZpY2UucmVkbygpLmNoaWxkcmVuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnNldFdpZGdldHMoZGFzaGJvYXJkQ2hpbGRyZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYWxsIGRhc2hib2FyZHMgY2hpbGRyZW4ncy4gVXNlZnVsIGZvciBwb3NpdGlvbiBjaGFuZ2VzIG9uIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBjaGlsZCBUaGUgY2hpbGQgdG8gY2hhbmdlLlxuICAgKiBAcGFyYW0gY2hhbmdlTmFtZSBOYW1lIG9mIHRoZSBjaGFuZ2UgdG8gaW5kaWNhdGUgaXQgb24gdW5kby9yZWRvIGJ1dHRvbi5cbiAgICogQHBhcmFtIGRlc2NyaXB0aW9uUHJvcCBQcm9wZXJ0eSB0byBhZGQgdG8gZGFzaGJvYXJkIGNoYW5nZSBoaXN0b3J5LlxuICAgKiBAcGFyYW0gd2lkZ2V0c0NoYW5nZWQgTGlzdCBvZiBjaGFuZ2VkIHdpZGdldHMuXG4gICAqL1xuICB1cGRhdGVEYXNoYm9hcmRDaGlsZHJlbihcbiAgICBjaGlsZDogRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfCBEYXNoYm9hcmRDaGFuZ2UsXG4gICAgY2hhbmdlTmFtZTogRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZVsnbmFtZSddLFxuICAgIGRlc2NyaXB0aW9uUHJvcDoga2V5b2YgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10sXG4gICAgd2lkZ2V0c0NoYW5nZWQ6IFdpZGdldFtdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IGNoaWxkO1xuICAgIGNvbnN0IG1hcHBlZENoaWxkcmVuOiB7IFtpZDogc3RyaW5nXTogV2lkZ2V0IH0gPSBrZXlCeShcbiAgICAgIGNoaWxkcmVuLm1hcChjID0+IHRoaXMuY29tcG9uZW50VG9XaWRnZXQoYykpLFxuICAgICAgJ2lkJ1xuICAgICk7XG4gICAgdGhpcy5zZXROZXdTdGF0ZShcbiAgICAgIHsgbmFtZTogY2hhbmdlTmFtZSwgY2hpbGRyZW46IG1hcHBlZENoaWxkcmVuIH0sXG4gICAgICBkZXNjcmlwdGlvblByb3AsXG4gICAgICB3aWRnZXRzQ2hhbmdlZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIHRoZSBkYXNoYm9hcmQgYW5kIGN1cnJlbnQgY29udGV4dCB0byBhIGNsaXBib2FyZC5cbiAgICovXG4gIGFzeW5jIGNvcHlEYXNoYm9hcmQoKSB7XG4gICAgY29uc3Qgdmlld0NvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhPy5jb250ZXh0O1xuXG4gICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5jb3B5Q2xpcGJvYXJkID0ge1xuICAgICAgZGFzaGJvYXJkSWQ6IHRoaXMubW8uaWQsXG4gICAgICBkYXNoYm9hcmQ6IGNsb25lRGVlcCh0aGlzLm1vLmM4eV9EYXNoYm9hcmQpLFxuICAgICAgY29udGV4dDogY2xvbmVEZWVwKHtcbiAgICAgICAgY29udGV4dDogdmlld0NvbnRleHQsXG4gICAgICAgIGNvbnRleHREYXRhOiB0aGlzLmNvbnRleHRcbiAgICAgIH0pXG4gICAgfTtcblxuICAgIGlmICh2aWV3Q29udGV4dCkge1xuICAgICAgY29uc3QgY3R4ID0gdmlld0NvbnRleHQuc3BsaXQoJy8nKS5zaGlmdCgpO1xuICAgICAgY29uc3QgbXNnID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICdEYXNoYm9hcmQgY29waWVkLiBOYXZpZ2F0ZSB0byB0aGUgZGVzaXJlZCB7eyBjdHggfX0gYW5kIHNlbGVjdCBcIlBhc3RlIGRhc2hib2FyZFwiJyxcbiAgICAgICAgeyBjdHggfVxuICAgICAgKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2Vzcyhtc2cpO1xuICAgIH1cbiAgICB0aGlzLmFjdGlvbkJhclNlcnZpY2UucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgY29tcGxldGUgZGFzaGJvYXJkIGFuZCBuYXZpZ2F0ZSBhd2F5LlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlRGFzaGJvYXJkKCkge1xuICAgIGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZGVsZXRlKHRoaXMubW8pO1xuICAgIGlmICh0aGlzLnJvdXRlLnBhcmVudCkge1xuICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC51cmwubWFwKHNlZ21lbnQgPT4gc2VnbWVudC5wYXRoKS5qb2luKCcvJyk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5vbkRlbGV0ZUdTRXZlbnQoKTtcbiAgfVxuXG4gIGdldCBpc0RldmljZVR5cGVEYXNoYm9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXNoYm9hcmQ/LmRldmljZVR5cGU7XG4gIH1cblxuICAvKipcbiAgICogRWRpdHMgYSB3aWRnZXQgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoYW5nZSBUaGUgd2lkZ2V0IGNoYW5nZSBldmVudC5cbiAgICovXG4gIGFzeW5jIGVkaXRXaWRnZXQoY2hhbmdlOiBXaWRnZXRDaGFuZ2UpIHtcbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGNoYW5nZS5zb3VyY2U7XG4gICAgY29uc3QgY29tcG9uZW50ID0gYXdhaXQgdGhpcy53aWRnZXRTZXJ2aWNlLmdldFdpZGdldERlZmluaXRpb24oXG4gICAgICBjaGFuZ2Uud2lkZ2V0Lm5hbWUgfHwgY2hhbmdlLndpZGdldC5jb21wb25lbnRJZFxuICAgICk7XG4gICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuYWRkV2lkZ2V0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRkV2lkZ2V0KHtcbiAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgIGRhdGE6IHsgLi4uY29tcG9uZW50LmRhdGEsIC4uLmNoYW5nZS53aWRnZXQsIF94OiB4LCBfeTogeSwgX3dpZHRoOiB3aWR0aCwgX2hlaWdodDogaGVpZ2h0IH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgd2lkZ2V0IHRvIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBzZWxlY3RlZCBEZWZpbmUgYSBzZWxlY3RlZCBjb21wb25lbnQgdG8gc3dpdGNoIHRvIGVkaXQgbW9kZSBkaXJlY3RseS5cbiAgICovXG4gIGFzeW5jIGFkZFdpZGdldChzZWxlY3RlZD86IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSB7XG4gICAgY29uc3QgcGFydGlhbENsb25lU2VsZWN0ZWQgPSBzZWxlY3RlZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc2VsZWN0ZWQsXG4gICAgICAgICAgZGF0YTogY2xvbmVEZWVwKHNlbGVjdGVkLmRhdGEpXG4gICAgICAgIH1cbiAgICAgIDogc2VsZWN0ZWQ7XG5cbiAgICBjb25zdCBhY3RpdmVDb250ZXh0ID0gdGhpcy5jb250ZXh0LmNvbnRleHREYXRhID8gdGhpcy5jb250ZXh0LmNvbnRleHREYXRhIDogdGhpcy5jb250ZXh0O1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZTogUGFydGlhbDxXaWRnZXRDb25maWdDb21wb25lbnQ+ID0ge1xuICAgICAgbW86IHRoaXMubW8sXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQuYzh5X1JlcG9ydCA/IHt9IDogYWN0aXZlQ29udGV4dCxcbiAgICAgIHNlbGVjdGVkOiBwYXJ0aWFsQ2xvbmVTZWxlY3RlZFxuICAgIH07XG5cbiAgICBjb25zdCBtb2RhbCA9IHRoaXMuYnNNb2RhbC5zaG93KFdpZGdldENvbmZpZ0NvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1sZycsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGtleWJvYXJkOiBmYWxzZVxuICAgIH0pLmNvbnRlbnQgYXMgV2lkZ2V0Q29uZmlnQ29tcG9uZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5ld1dpZGdldCA9IGF3YWl0IG1vZGFsLnJlc3VsdDtcbiAgICAgIGlmICghdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IHt9O1xuICAgICAgfVxuICAgICAgbmV3V2lkZ2V0LmNsYXNzZXMgPSB0aGlzLm1lcmdlV2lkZ2V0Q2xhc3NlcyhuZXdXaWRnZXQpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVXaWRnZXQobmV3V2lkZ2V0KTtcbiAgICAgIC8vIE5ldyBzdGF0ZSBpbiBlZGl0IG1vZGUgaXMgYWRkZWQgb25seSBmb3Igd2lkZ2V0IHVwZGF0ZS4gV2hlbiBhZGRpbmcgd2lkZ2V0LCBsYXlvdXQgY2hhbmdlIGlzIGFsd2F5cyB0cmlnZ2VyZWQsXG4gICAgICAvLyBzbyBpdCdzIGVhc2llciB0byBzZXQgbmV3IHN0YXRlIG9uIGxheW91dCBjaGFuZ2Ugb25seVxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xuICAgICAgICAgIC4uLnRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpLmNoaWxkcmVuLFxuICAgICAgICAgIFtuZXdXaWRnZXQuaWRdOiBuZXdXaWRnZXRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXROZXdTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRS5jb25maWcsXG4gICAgICAgICAgICBjaGlsZHJlblxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICAgW25ld1dpZGdldF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG1vZGFsLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGludGVuZGVkIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZVdpZGdldHNUb0Rhc2hib2FyZCgpIHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmVkaXRNb2RlU2VydmljZS5nZXRDdXJyZW50U3RhdGUoKTtcbiAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSBjdXJyZW50U3RhdGUuY2hpbGRyZW47XG5cbiAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuaGlzdG9yeURlc2NyaXB0aW9uID0ge1xuICAgICAgY2hhbmdlVHlwZTogJ3VwZGF0ZScsXG4gICAgICB3aWRnZXRDaGFuZ2VzOiB0aGlzLm1hcFN0YXRlVG9IaXN0b3J5RGVzY3JpcHRpb24oY3VycmVudFN0YXRlLmNoYW5nZUhpc3RvcnkpXG4gICAgfTtcbiAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZSh0aGlzLm1vKTtcbiAgICB0aGlzLmVkaXRNb2RlU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmluaXQoe1xuICAgICAgbmFtZTogREFTSEJPQVJEX0NISUxEUkVOX1NUQVRFX05BTUUuaW5pdGlhbCxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VIaXN0b3J5OiB7fVxuICAgIH0pO1xuXG4gICAgdGhpcy5pc0NvcHlEaXNhYmxlZCA9IHRoaXMuZ2V0RGFzaGJvYXJkQ29weVBlcm1pc3Npb25TdGF0ZSgpO1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsRWRpdE1vZGUob25EZWFjdGl2YXRlID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYXNoYm9hcmRDaGlsZHJlbiA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgaWYgKHRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZC5oaXN0b3J5RGVzY3JpcHRpb24gPSB7fTtcbiAgICB9XG4gICAgdGhpcy53aWRnZXRzRGFzaGJvYXJkLmVkaXRNb2RlJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoIW9uRGVhY3RpdmF0ZSkge1xuICAgICAgLy8gd2hlbiBzZXRXaWRnZXRzIGlzIGNhbGxlZCBkdXJpbmcgbmF2aWdhdGlvbiBmcm9tIGRldmljZSB0byBkZXZpY2UsIG5hdmlnYXRpb24gZmFpbHNcbiAgICAgIGF3YWl0IHRoaXMuc2V0V2lkZ2V0cyhkYXNoYm9hcmRDaGlsZHJlbi5jaGlsZHJlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSB3aWRnZXQgb3IgYWRkcyBhIG5ldyBvbmUgaWYgaXQgZG9lc24ndCBleGlzdCBvblxuICAgKiB0aGUgZGFzaGJvYXJkLlxuICAgKiBAcGFyYW0gd2lkZ2V0IFRoZSBuZXcgd2lkZ2V0XG4gICAqL1xuICBhc3luYyB1cGRhdGVXaWRnZXQod2lkZ2V0KSB7XG4gICAgY29uc3QgaW5kZXggPSBmaW5kSW5kZXgodGhpcy53aWRnZXRzLCB7IGlkOiB3aWRnZXQuaWQgfSk7XG4gICAgY29uc3QgaXNOZXcgPSBpbmRleCA9PT0gLTE7XG4gICAgY29uc3QgbWFwcGVkV2lkZ2V0ID0gYXdhaXQgdGhpcy53aWRnZXRTZXJ2aWNlLm1hcExlZ2FjeSh3aWRnZXQpO1xuICAgIGlmIChpc05ldykge1xuICAgICAgdGhpcy53aWRnZXRzLnB1c2gobWFwcGVkV2lkZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWRnZXRzLnNwbGljZShpbmRleCwgMSwgbWFwcGVkV2lkZ2V0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHdpZGdldCBhbmQgcmVhcnJhbmdlcyB0aGUgcmVtYWluaW5nIG9uZXNcbiAgICogaWYgbmVjZXNzYXJ5LlxuICAgKiBAcGFyYW0gY2hhbmdlIFRoZSBjaGFuZ2UgZXZlbnQuXG4gICAqL1xuICBhc3luYyBkZWxldGVXaWRnZXQoY2hhbmdlOiBXaWRnZXRDaGFuZ2UpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB3aWRnZXQsIHNvdXJjZSB9ID0gY2hhbmdlO1xuICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMud2lkZ2V0cy5maW5kKCh7IGlkIH0pID0+IGlkID09PSB3aWRnZXQuaWQpO1xuICAgICAgdGhpcy53aWRnZXRzLnNwbGljZSh0aGlzLndpZGdldHMuaW5kZXhPZihyZW1vdmVkKSwgMSk7XG5cbiAgICAgIGNvbnN0IHsgZGFzaGJvYXJkIH0gPSBzb3VyY2U7XG4gICAgICBkYXNoYm9hcmQuY2hpbGRyZW4gPSBkYXNoYm9hcmQuY2hpbGRyZW4uZmlsdGVyKGMgPT4gYy5kYXRhLmlkICE9PSB3aWRnZXQuaWQpO1xuXG4gICAgICAvLyB1c2luZyBzZXRUaW1lb3V0IHRvIGdpdmUgdGhlIGNvbXBvbmVudCB0aGUgY2hhbmNlIHRvIHJlbW92ZSBpdC5cbiAgICAgIGNvbnN0IHNsZWVwID0gdGltZW91dCA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCkpO1xuICAgICAgYXdhaXQgc2xlZXAoMCk7XG5cbiAgICAgIGNvbnN0IGNoaWxkID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHNvdXJjZSk7XG4gICAgICBjaGlsZC5jb2xsYXBzZVVwQWxsKCk7XG4gICAgICB0aGlzLnVwZGF0ZURhc2hib2FyZENoaWxkcmVuKGNoaWxkLCBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRS5yZW1vdmVkLCAncmVtb3ZlZCcsIFtcbiAgICAgICAgd2lkZ2V0XG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBkcmFnZ2VkLWVsZW1lbnRcbiAgICogKHdoaWNoIGlzIGF0dGFjaGVkIHRvIHRoZSBib2R5KSBoYXMgdGhlIHJpZ2h0IHN0eWxpbmcuXG4gICAqL1xuICBhZGREYXNoYm9hcmRDbGFzc1RvQm9keSgpIHtcbiAgICB0aGlzLmNsYXNzLnNwbGl0KCcgJykuZm9yRWFjaChjc3NDbGFzcyA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIGNzc0NsYXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCB0aGUgZHJhZ2dlZC1lbGVtZW50XG4gICAqICh3aGljaCBpcyBhdHRhY2hlZCB0byB0aGUgYm9keSkgaGFzIHRoZSByaWdodCBzdHlsaW5nLlxuICAgKi9cbiAgcmVtb3ZlRGFzaGJvYXJkQ2xhc3NGcm9tQm9keSgpIHtcbiAgICB0aGlzLmNsYXNzLnNwbGl0KCcgJykuZm9yRWFjaChjc3NDbGFzcyA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIGNzc0NsYXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uTG9hZCh0cmFja0V4cGVyaWVuY2U/OiBib29sZWFuKSB7XG4gICAgdGhpcy5oYXNQZXJtaXNzaW9uVG9FZGl0RGFzaGJvYXJkID0gdGhpcy5kYXNoYm9hcmRcbiAgICAgID8gYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5jYW5FZGl0RGFzaGJvYXJkKHRoaXMubW8pXG4gICAgICA6IGZhbHNlO1xuICAgIHRoaXMuY2FuQ29weSA9XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlRGFzaGJvYXJkKHRoaXMubW8pIHx8XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlVHlwZSh0aGlzLm1vKSB8fFxuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0dyb3VwRGFzaGJvYXJkKHRoaXMubW8pO1xuICAgIGNvbnN0IGRhc2hib2FyZENoaWxkcmVuOiBDb250ZXh0RGFzaGJvYXJkWydjaGlsZHJlbiddID0gY2xvbmVEZWVwKFxuICAgICAgdGhpcy5tby5jOHlfRGFzaGJvYXJkPy5jaGlsZHJlblxuICAgICk7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2xhc3NlcyA9IHtcbiAgICAgICdjOHktZ3JpZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgZGFzaGJvYXJkOiB0cnVlLFxuICAgICAgLi4udGhpcy5kYXNoYm9hcmQ/LmNsYXNzZXNcbiAgICB9O1xuICAgIHRoaXMuaXNDb3B5RGlzYWJsZWQgPSB0aGlzLmRhc2hib2FyZFxuICAgICAgPyB0aGlzLmdldERhc2hib2FyZENvcHlQZXJtaXNzaW9uU3RhdGUoKVxuICAgICAgOiB7IHN0YXRlOiBmYWxzZSwgcmVhc29uOiBudWxsIH07XG4gICAgdGhpcy5lZGl0TW9kZVNlcnZpY2UuaW5pdCh7XG4gICAgICBuYW1lOiBnZXR0ZXh0KCdJbml0aWFsIHN0YXRlJyksXG4gICAgICBjaGlsZHJlbjogZGFzaGJvYXJkQ2hpbGRyZW4sXG4gICAgICBjaGFuZ2VIaXN0b3J5OiB7fVxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRXaWRnZXRzKGRhc2hib2FyZENoaWxkcmVuLCB0cmFja0V4cGVyaWVuY2UpO1xuICAgIHRoaXMuY2xhc3MgPSBPYmplY3Qua2V5cyhkYXNoYm9hcmRDbGFzc2VzKS5qb2luKCcgJyk7XG4gICAgaWYgKHRoaXMuaXNSZXBvcnQpIHtcbiAgICAgIHRoaXMuYWRkUmVwb3J0RGFzaGJvYXJkU2V0dGluZ3MoKTtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkRGV0YWlscy5zaG93KGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5vbkxvYWRHU0V2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGFzaGJvYXJkUHJldmlldyhsYXlvdXRDaGFuZ2VzOiBDb250ZXh0RGFzaGJvYXJkKSB7XG4gICAgaWYgKGxheW91dENoYW5nZXM/LmNsYXNzZXMpIHtcbiAgICAgIGNvbnN0IGRhc2hib2FyZENsYXNzZXMgPSB7XG4gICAgICAgICdjOHktZ3JpZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgICBkYXNoYm9hcmQ6IHRydWUsXG4gICAgICAgIC4uLmxheW91dENoYW5nZXMuY2xhc3Nlc1xuICAgICAgfTtcbiAgICAgIHRoaXMuY2xhc3MgPSBPYmplY3Qua2V5cyhkYXNoYm9hcmRDbGFzc2VzKS5qb2luKCcgJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZCkge1xuICAgICAgdGhpcy5kYXNoYm9hcmQud2lkZ2V0Q2xhc3NlcyA9IHtcbiAgICAgICAgLi4udGhpcy5kYXNoYm9hcmQud2lkZ2V0Q2xhc3NlcyxcbiAgICAgICAgLi4ubGF5b3V0Q2hhbmdlcy53aWRnZXRDbGFzc2VzXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbG9hZERhc2hib2FyZChkYXNoYm9hcmRNbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLmRhc2hib2FyZCA9IGRhc2hib2FyZE1vLmM4eV9EYXNoYm9hcmQ7XG4gICAgdGhpcy5tbyA9IGRhc2hib2FyZE1vO1xuICAgIGF3YWl0IHRoaXMub25Mb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFdpZGdldHMoXG4gICAgZGFzaGJvYXJkQ2hpbGRyZW46IENvbnRleHREYXNoYm9hcmRbJ2NoaWxkcmVuJ10sXG4gICAgdHJhY2tFeHBlcmllbmNlID0gZmFsc2VcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNEZXZpY2VUeXBlID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZVR5cGUodGhpcy5tbyk7XG4gICAgdGhpcy53aWRnZXRzID0gYXdhaXQgUHJvbWlzZS5hbGw8V2lkZ2V0PihcbiAgICAgIE9iamVjdC52YWx1ZXMoZGFzaGJvYXJkQ2hpbGRyZW4gfHwge30pLm1hcCh3aWRnZXQgPT4ge1xuICAgICAgICB3aWRnZXQuY2xhc3NlcyA9IHRoaXMubWVyZ2VXaWRnZXRDbGFzc2VzKHdpZGdldCk7XG4gICAgICAgIGlmIChpc0RldmljZVR5cGUpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5RGV2aWNlVGFyZ2V0KHdpZGdldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYWNrRXhwZXJpZW5jZSkge1xuICAgICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoJ2xvYWRXaWRnZXQnLCB7XG4gICAgICAgICAgICB3aWRnZXROYW1lOiB3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRTZXJ2aWNlLm1hcExlZ2FjeSh3aWRnZXQpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29udGV4dERhc2hib2FyZCgpIHtcbiAgICB0aGlzLmRhdGFTdWIgPSB0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IGRhc2hib2FyZCwgaXNSZXBvcnQgfSkgPT4ge1xuICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5yb3V0ZS5wYXJlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YSB8fCB7fTtcbiAgICAgIHRoaXMudGl0bGUgPSB0aGlzLmNvbnRleHQ/Lm5hbWU7XG4gICAgICB0aGlzLm1vID0gZGFzaGJvYXJkO1xuICAgICAgdGhpcy5kYXNoYm9hcmQgPSB0aGlzLm1vLmM4eV9EYXNoYm9hcmQ7XG4gICAgICB0aGlzLmlzUmVwb3J0ID0gaXNSZXBvcnQgfHwgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc1JlcG9ydCh0aGlzLm1vKTtcbiAgICAgIGlmICh0aGlzLmlzUmVwb3J0ICYmIHRoaXMuZGFzaGJvYXJkICYmICF0aGlzLmRhc2hib2FyZD8ubmFtZSkge1xuICAgICAgICB0aGlzLmRhc2hib2FyZC5uYW1lID0gdGhpcy50aXRsZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzUmVwb3J0ICYmIHRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkLmM4eV9Jc05hdmlnYXRvck5vZGUgPSB0aGlzLmNvbnRleHQuYzh5X0lzTmF2aWdhdG9yTm9kZTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGF0Y2hTZW5zb3JQaG9uZURhc2hib2FyZCh0aGlzLmRhc2hib2FyZCwgdGhpcy5tby5vd25lciwgdGhpcy5jb250ZXh0Py50eXBlKTtcbiAgICAgIHRoaXMub25Mb2FkKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIGVuYWJsZSB0cmFuc2xhdGlvbiBmb3Igd2lkZ2V0cyB3aXRoaW4gdGhlIGRhc2hib2FyZCwgdGhlIFwidHJhbnNsYXRlV2lkZ2V0VGl0bGVcIiBmbGFnIG11c3QgYmUgZW5hYmxlZC5cbiAgICogVGhlIHByb3BlcnR5IG5lZWRzIHRvIGJlIHBhdGNoZWQsIGFzIHRoZSBcIlNlbnNvciBBcHBcIiBkb2VzIG5vdCBwcm92aWRlIHRoaXMgc2V0dGluZy5cbiAgICovXG4gIHByaXZhdGUgcGF0Y2hTZW5zb3JQaG9uZURhc2hib2FyZChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmQsIG93bmVyOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0eXBlID09PSAnYzh5X1NlbnNvclBob25lJyAmJiBvd25lcj8uaW5jbHVkZXMoJ2RldmljZV9waG9uZScpKSB7XG4gICAgICBkYXNoYm9hcmQudHJhbnNsYXRlV2lkZ2V0VGl0bGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZE5hbWVkRGFzaGJvYXJkKCkge1xuICAgIHRoaXMuZGF0YVN1YiA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2VcbiAgICAgIC5nZXROYW1lZERhc2hib2FyZE9yQ3JlYXRlKHRoaXMubmFtZSwgdGhpcy5kZWZhdWx0V2lkZ2V0cywgdGhpcy5jb250ZXh0KVxuICAgICAgLnN1YnNjcmliZShtbyA9PiB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY29udGV4dCB8fCB7fTtcbiAgICAgICAgdGhpcy5tbyA9IG1vO1xuICAgICAgICB0aGlzLmRhc2hib2FyZCA9IHRoaXMubW8uYzh5X0Rhc2hib2FyZDtcbiAgICAgICAgdGhpcy5vbkxvYWQodHJ1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VXaWRnZXRDbGFzc2VzKHdpZGdldDogV2lkZ2V0KTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4ge1xuICAgIGNvbnN0IGhhc0hlYWRlckNsYXNzID0gV0lER0VUX0hFQURFUl9DTEFTU0VTLmZpbmQoXG4gICAgICBlbCA9PiB3aWRnZXQuY2xhc3NlcyAmJiB3aWRnZXQuY2xhc3Nlc1tlbC5jbGFzc11cbiAgICApO1xuICAgIGNvbnN0IHdpZGdldENsYXNzZXMgPSBoYXNIZWFkZXJDbGFzc1xuICAgICAgPyB7IC4uLndpZGdldC5jbGFzc2VzIH1cbiAgICAgIDogeyAuLi50aGlzLmRhc2hib2FyZC53aWRnZXRDbGFzc2VzLCAuLi53aWRnZXQuY2xhc3NlcyB9O1xuICAgIHJldHVybiB7XG4gICAgICBjYXJkOiB0cnVlLFxuICAgICAgJ2NhcmQtZGFzaGJvYXJkJzogdHJ1ZSxcbiAgICAgIFtrZWJhYkNhc2Uod2lkZ2V0LmNvbXBvbmVudElkIHx8IHdpZGdldC5uYW1lKV06IHRydWUsXG4gICAgICAuLi53aWRnZXRDbGFzc2VzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9uZW50VG9XaWRnZXQoY2hpbGQ6IERhc2hib2FyZENoaWxkQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9taXQoY2hpbGQuZGF0YSwgWydjb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCcsICd0cmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCddKSwgLy8gcmVtb3ZlIGxlZ2FjeVxuICAgICAgLi4uKHtcbiAgICAgICAgX3g6IGNoaWxkLngsXG4gICAgICAgIF95OiBjaGlsZC55LFxuICAgICAgICBfd2lkdGg6IGNoaWxkLndpZHRoLFxuICAgICAgICBfaGVpZ2h0OiBjaGlsZC5oZWlnaHRcbiAgICAgIH0gYXMgV2lkZ2V0KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZFJlcG9ydERhc2hib2FyZFNldHRpbmdzKCkge1xuICAgIHRoaXMuc2V0VGl0bGUgPSB0cnVlO1xuICAgIHRoaXMudGl0bGUgPSB0aGlzLmNvbnRleHQ/Lm5hbWUgfHwgZ2V0dGV4dCgnTmV3IHJlcG9ydCcpO1xuICAgIHRoaXMuYnJlYWRjcnVtYlNldHRpbmdzID0ge1xuICAgICAgaWNvbjogJ3RoJyxcbiAgICAgIGxhYmVsOiAnUmVwb3J0cycsXG4gICAgICBwYXRoOiAncmVwb3J0cydcbiAgICB9O1xuICAgIHRoaXMuY2FuRGVsZXRlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldERhc2hib2FyZENvcHlQZXJtaXNzaW9uU3RhdGUoKTogRGFzaGJvYXJkQ29weVBlcm1pc3Npb24ge1xuICAgIGlmICghdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5oYXNQZXJtaXNzaW9uc1RvQ29weURhc2hib2FyZCgpKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZTogZmFsc2UsIHJlYXNvbjogQ29weURhc2hib2FyZERpc2FibGVkUmVhc29uLlBFUk1JU1NJT05TIH07XG4gICAgfVxuICAgIGNvbnN0IGFsbERhc2hib2FyZENoaWxkcmVuQXJlVmFsaWQgPSBldmVyeSh0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGNoaWxkLmNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbnN0IGRhdGFQb2ludHMgPSBjb25maWcuZGF0YXBvaW50cyB8fCBbXTtcbiAgICAgIHJldHVybiAhKFxuICAgICAgICAoY29uZmlnLmRldmljZSAmJiBjb25maWcuZGV2aWNlLmlkICE9PSB0aGlzLmNvbnRleHQuaWQpIHx8XG4gICAgICAgIHNvbWUoZGF0YVBvaW50cywgZGF0YVBvaW50ID0+IGRhdGFQb2ludC5fX3RhcmdldD8uaWQgIT09IHRoaXMuY29udGV4dC5pZClcbiAgICAgICk7XG4gICAgfSk7XG4gICAgaWYgKCFhbGxEYXNoYm9hcmRDaGlsZHJlbkFyZVZhbGlkKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZTogZmFsc2UsIHJlYXNvbjogQ29weURhc2hib2FyZERpc2FibGVkUmVhc29uLldST05HX1JFRkVSRU5DRSB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogdHJ1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXROZXdTdGF0ZShcbiAgICBzdGF0ZTogUGljazxEYXNoYm9hcmRDaGlsZHJlblN0YXRlLCAnbmFtZScgfCAnY2hpbGRyZW4nPixcbiAgICBkZXNjcmlwdGlvblByb3A6IGtleW9mIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddLFxuICAgIHdpZGdldHNDaGFuZ2VkOiBXaWRnZXRbXVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuZ2V0RGVzY3JpcHRpb25Gb3JOZXdTdGF0ZShkZXNjcmlwdGlvblByb3AsIHdpZGdldHNDaGFuZ2VkKTtcbiAgICB0aGlzLmVkaXRNb2RlU2VydmljZS5uZXdTdGF0ZSh7IC4uLnN0YXRlLCBjaGFuZ2VIaXN0b3J5OiBkZXNjcmlwdGlvbiB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVzY3JpcHRpb25Gb3JOZXdTdGF0ZShcbiAgICBkZXNjcmlwdGlvblByb3A6IGtleW9mIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddLFxuICAgIHdpZGdldHNDaGFuZ2VkOiBXaWRnZXRbXVxuICApOiBEYXNoYm9hcmRDaGlsZHJlblN0YXRlWydjaGFuZ2VIaXN0b3J5J10ge1xuICAgIGNvbnN0IGNoYW5nZUhpc3RvcnkgPSB0aGlzLmVkaXRNb2RlU2VydmljZS5nZXRDdXJyZW50U3RhdGUoKS5jaGFuZ2VIaXN0b3J5O1xuICAgIGlmICghY2hhbmdlSGlzdG9yeVtkZXNjcmlwdGlvblByb3BdKSB7XG4gICAgICBjaGFuZ2VIaXN0b3J5W2Rlc2NyaXB0aW9uUHJvcF0gPSB7fTtcbiAgICB9XG4gICAgd2lkZ2V0c0NoYW5nZWQuZm9yRWFjaCh3ID0+IHtcbiAgICAgIGlmIChkZXNjcmlwdGlvblByb3AgPT09ICdyZW1vdmVkJyAmJiBjaGFuZ2VIaXN0b3J5LmFkZGVkPy5bdy5pZF0pIHtcbiAgICAgICAgLy8gaWYgd2lkZ2V0IHdhcyBhZGRlZCBkdXJpbmcgY3VycmVudCBlZGl0IHNlc3Npb24gYW5kIHRoZW4gcmVtb3ZlZCwgaXQgc2hvdWxkIG5vdCBiZSBhdCBkZXNjcmlwdGlvbiBhdCBhbGxcbiAgICAgICAgZGVsZXRlIGNoYW5nZUhpc3RvcnkuYWRkZWRbdy5pZF07XG4gICAgICAgIGlmIChjaGFuZ2VIaXN0b3J5LmNvbmZpZz8uW3cuaWRdKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZUhpc3RvcnkuY29uZmlnW3cuaWRdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VIaXN0b3J5LmFycmFuZ2VtZW50Py5bdy5pZF0pIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlSGlzdG9yeT8uYXJyYW5nZW1lbnRbdy5pZF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChkZXNjcmlwdGlvblByb3AgPT09ICdjb25maWcnIHx8IGRlc2NyaXB0aW9uUHJvcCA9PT0gJ2FycmFuZ2VtZW50JykgJiZcbiAgICAgICAgY2hhbmdlSGlzdG9yeS5hZGRlZD8uW3cuaWRdXG4gICAgICApIHtcbiAgICAgICAgLy8gaWYgd2lkZ2V0IHdhcyBhZGRlZCBhbmQgdGhlbiBtb2RpZmllZCBpbiBjdXJyZW50IGVkaXQgc2Vzc2lvbiwgaXQgc2hvdWxkIG9ubHkgYmUgaW5kaWNhdGVkIGFzIGFkZGVkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGFuZ2VIaXN0b3J5W2Rlc2NyaXB0aW9uUHJvcF1bdy5pZF0gPSB3O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNoYW5nZUhpc3Rvcnk7XG4gIH1cblxuICBwcml2YXRlIG1hcFN0YXRlVG9IaXN0b3J5RGVzY3JpcHRpb24oXG4gICAgZGVzY3JpcHRpb246IERhc2hib2FyZENoaWxkcmVuU3RhdGVbJ2NoYW5nZUhpc3RvcnknXVxuICApOiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSB7XG4gICAgY29uc3QgaGlzdG9yeURlc2NyaXB0aW9uOiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9uKSkge1xuICAgICAgY29uc3Qgd2lkZ2V0cyA9IE9iamVjdC52YWx1ZXModmFsdWUpO1xuICAgICAgaWYgKCF3aWRnZXRzLmxlbmd0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGhpc3RvcnlEZXNjcmlwdGlvbltrZXldID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSkubWFwKHdpZGdldCA9PiB3aWRnZXQudGl0bGUpO1xuICAgIH1cbiAgICByZXR1cm4gaGlzdG9yeURlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkRlbGV0ZUdTRXZlbnQoKSB7XG4gICAgY29uc3QgcGFyZW50TmFtZSA9IGF3YWl0IHRoaXMuY29udmVydFN0cmluZ1RvSGFzaCh0aGlzLmNvbnRleHQ/Lm5hbWUpO1xuICAgIGNvbnN0IGRhc2hib2FyZE5hbWUgPSBhd2FpdCB0aGlzLmNvbnZlcnRTdHJpbmdUb0hhc2godGhpcy5kYXNoYm9hcmQ/Lm5hbWUpO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5EQVNIQk9BUkRTLCB7XG4gICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09NUE9ORU5UUy5ERUxFVEVfREFTSEJPQVJELFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkFDVElPTlMuREVMRVRFLFxuICAgICAgbmFtZTogZGFzaGJvYXJkTmFtZSxcbiAgICAgIGlkOiB0aGlzLm1vLmlkLFxuICAgICAgbmFtZUlkOiBgJHtkYXNoYm9hcmROYW1lfV8ke3RoaXMubW8uaWR9YCxcbiAgICAgIHBhcmVudEFzc2V0SWQ6IHRoaXMuY29udGV4dD8uaWQgPyB0aGlzLmNvbnRleHQuaWQgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0TmFtZTogdGhpcy5jb250ZXh0Py5pZCA/IHBhcmVudE5hbWUgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0VHlwZTogdGhpcy5jb250ZXh0Py5pZCA/IHRoaXMuY29udGV4dC50eXBlIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWVJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5jb250ZXh0LmlkfWAgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0TmFtZURhc2hib2FyZE5hbWU6IHRoaXMuY29udGV4dD8uaWRcbiAgICAgICAgPyBgJHtwYXJlbnROYW1lfV8ke2Rhc2hib2FyZE5hbWV9YFxuICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXRJZERhc2hib2FyZElkOiB0aGlzLmNvbnRleHQ/LmlkID8gYCR7dGhpcy5jb250ZXh0LmlkfV8ke3RoaXMubW8uaWR9YCA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lRGFzaGJvYXJkSWQ6IHRoaXMuY29udGV4dD8uaWQgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMubW8uaWR9YCA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lSWREYXNoYm9hcmROYW1lSWQ6IHRoaXMuY29udGV4dD8uaWRcbiAgICAgICAgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMuY29udGV4dC5pZH1fJHtkYXNoYm9hcmROYW1lfV8ke3RoaXMubW8uaWR9YFxuICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgZGFzaGJvYXJkVHlwZTogdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZSA/IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSA6IG51bGwsXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldENvbnRleHRGb3JHUyh0aGlzLmNvbnRleHQpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uTG9hZEdTRXZlbnQoKSB7XG4gICAgY29uc3QgcGFyZW50TmFtZSA9IGF3YWl0IHRoaXMuY29udmVydFN0cmluZ1RvSGFzaCh0aGlzLmNvbnRleHQ/Lm5hbWUpO1xuICAgIGNvbnN0IGRhc2hib2FyZE5hbWUgPVxuICAgICAgKGF3YWl0IHRoaXMuY29udmVydFN0cmluZ1RvSGFzaCh0aGlzLmRhc2hib2FyZD8ubmFtZSkpID8/XG4gICAgICB0aGlzLmV4dHJhY3REZWZhdWx0RGFzaGJvYXJkTmFtZSh0aGlzLm1vKSA/P1xuICAgICAgJ25vbmUnO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgIHRoaXMuaXNSZXBvcnRcbiAgICAgICAgPyBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5SRVBPUlRTXG4gICAgICAgIDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5FVkVOVFMuREFTSEJPQVJEUyxcbiAgICAgIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTVBPTkVOVFMuREFTSEJPQVJEX1ZJRVcsXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5BQ1RJT05TLkxPQUQsXG4gICAgICAgIG5hbWU6IGRhc2hib2FyZE5hbWUsXG4gICAgICAgIGlkOiB0aGlzLm1vLmlkLFxuICAgICAgICBuYW1lSWQ6IGAke2Rhc2hib2FyZE5hbWV9XyR7dGhpcy5tby5pZH1gLFxuICAgICAgICBwYXJlbnRBc3NldElkOiB0aGlzLmNvbnRleHQ/LmlkID8gdGhpcy5jb250ZXh0LmlkIDogJ25vQ29udGV4dCcsXG4gICAgICAgIHBhcmVudEFzc2V0TmFtZTogdGhpcy5jb250ZXh0Py5pZCA/IHBhcmVudE5hbWUgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXRUeXBlOiB0aGlzLmNvbnRleHQ/LmlkID8gdGhpcy5jb250ZXh0LnR5cGUgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXROYW1lSWQ6IHRoaXMuY29udGV4dD8uaWQgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMuY29udGV4dC5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICAgIHBhcmVudEFzc2V0TmFtZURhc2hib2FyZE5hbWU6IHRoaXMuY29udGV4dD8uaWRcbiAgICAgICAgICA/IGAke3BhcmVudE5hbWV9XyR7ZGFzaGJvYXJkTmFtZX1gXG4gICAgICAgICAgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXRJZERhc2hib2FyZElkOiB0aGlzLmNvbnRleHQ/LmlkXG4gICAgICAgICAgPyBgJHt0aGlzLmNvbnRleHQuaWR9XyR7dGhpcy5tby5pZH1gXG4gICAgICAgICAgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXROYW1lRGFzaGJvYXJkSWQ6IHRoaXMuY29udGV4dD8uaWQgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMubW8uaWR9YCA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldE5hbWVJZERhc2hib2FyZE5hbWVJZDogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICAgID8gYCR7cGFyZW50TmFtZX1fJHt0aGlzLmNvbnRleHQuaWR9XyR7ZGFzaGJvYXJkTmFtZX1fJHt0aGlzLm1vLmlkfWBcbiAgICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgICBkYXNoYm9hcmRUeXBlOiB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlID8gdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIDogbnVsbCxcbiAgICAgICAgY29udGV4dDogdGhpcy5pc1JlcG9ydFxuICAgICAgICAgID8gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULlJFUE9SVFxuICAgICAgICAgIDogdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRDb250ZXh0Rm9yR1ModGhpcy5jb250ZXh0KVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3REZWZhdWx0RGFzaGJvYXJkTmFtZShvYmo6IElNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbmFtZUtleSA9IE9iamVjdC5rZXlzKG9iaikuZmluZChrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2M4eV9EYXNoYm9hcmQhbmFtZSEnKSk7XG4gICAgaWYgKG5hbWVLZXkpIHtcbiAgICAgIHJldHVybiBuYW1lS2V5LnNwbGl0KCchJykucG9wKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgQG1lbW9pemUoKVxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRTdHJpbmdUb0hhc2goc3RyOiBzdHJpbmcpIHtcbiAgICBpZiAoIXN0cikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnNob3VsZFNlbmRQaWlEYXRhKCkpXG4gICAgICA/IHN0clxuICAgICAgOiB0aGlzLmdhaW5zaWdodFNlcnZpY2UuaGFzaEdyb3VwTmFtZShzdHIpO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlICpuZ0lmPVwidGl0bGVcIj5cbiAge3sgdGl0bGUgfX1cbjwvYzh5LXRpdGxlPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICBbcHJpb3JpdHldPVwiMTAwMDBcIlxuICAqbmdJZj1cImRhc2hib2FyZD8uZGV2aWNlVHlwZSAmJiBkYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlXCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuLWNsZWFuIGJ0bi1saW5rXCJcbiAgICBwb3BvdmVyVGl0bGU9XCJ7eyAnRGFzaGJvYXJkIHRlbXBsYXRlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgIFtwb3BvdmVyXT1cImRhc2hib2FyZFR5cGVQb3BvdmVyUmVmXCJcbiAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJ0YWcgdGFnLS1pbmZvIHRleHQtMTJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZGFzaGJvYXJkLXRlbXBsYXRlLW1hcmtlclwiPjwvc3Bhbj5cbiAgICAgIHt7IGRhc2hib2FyZFR5cGVMYWJlbCB8IHRyYW5zbGF0ZTogeyBkYXNoYm9hcmRUeXBlOiBkYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIH0gfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8bmctdGVtcGxhdGUgI2Rhc2hib2FyZFR5cGVQb3BvdmVyUmVmPlxuICAgIDxkaXZcbiAgICAgIFtpbm5lckhUTUxdPVwiZGFzaGJvYXJkVHlwZVBvcG92ZXIgfCB0cmFuc2xhdGU6IHsgZGFzaGJvYXJkVHlwZTogZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSB9XCJcbiAgICA+PC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gIFtwcmlvcml0eV09XCItMVwiXG4gICpuZ0lmPVwiZGVmYXVsdFdpZGdldHMubGVuZ3RoID4gMFwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnUmVzZXQgd2lkZ2V0cycgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHB4LWV2ZW50PVwiUmVzZXQgZGFzaGJvYXJkXCJcbiAgICAoY2xpY2spPVwicmVzdG9yZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgKHdpZGdldHNEYXNoYm9hcmQ/LmVkaXRNb2RlJCB8IGFzeW5jKVwiXG4gICAgZGF0YS1jeT1cImNvbnRleHQtZGFzaGJvYXJkLS1idXR0b24tcmVzZXQtZGFzaGJvYXJkXCJcbiAgPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgIGM4eUljb249XCJyZXNldFwiXG4gICAgPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cInZpc2libGUteHMtaW5saW5lIGhpZGRlbi1zbSB2aXNpYmxlLW1kLWlubGluZSB2aXNpYmxlLWxnLWlubGluZVwiPlxuICAgICAge3sgJ1Jlc2V0IHdpZGdldHMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1oZWxwXG4gIHNyYz1cIi9kb2NzL2NvY2twaXQvd29ya2luZy13aXRoLWRhc2hib2FyZHMvI3dvcmtpbmctd2l0aC1kYXNoYm9hcmRzXCJcbiAgKm5nSWY9XCJzaG93Q29udGV4dEhlbHBCdXR0b25cIlxuPjwvYzh5LWhlbHA+XG5cbjxjOHktZGFzaGJvYXJkLWRldGFpbFxuICBjbGFzcz1cImQtY29udGVudHNcIlxuICBbaXNSZXBvcnRdPVwiaXNSZXBvcnRcIlxuICBbZGFzaGJvYXJkXT1cImRhc2hib2FyZFwiXG4gIFttb109XCJtb1wiXG4gIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICBbZGV2aWNlVHlwZV09XCJjb250ZXh0Py50eXBlXCJcbiAgW2hpZGVBdmFpbGFiaWxpdHldPVwiaGlkZUF2YWlsYWJpbGl0eVwiXG4gIChkYXNoYm9hcmRTYXZlZCk9XCJyZWxvYWREYXNoYm9hcmQoJGV2ZW50KVwiXG4gIChwcmV2aWV3Q2hhbmdlZCk9XCJkYXNoYm9hcmRQcmV2aWV3KCRldmVudClcIlxuPjwvYzh5LWRhc2hib2FyZC1kZXRhaWw+XG5cbjxjOHktd2lkZ2V0cy1kYXNoYm9hcmRcbiAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gIFtjb250ZXh0RGFzaGJvYXJkXT1cImRhc2hib2FyZFwiXG4gIFt3aWRnZXRzXT1cIndpZGdldHNcIlxuICBbaXNDb3B5RGlzYWJsZWRdPVwiaXNDb3B5RGlzYWJsZWRcIlxuICBbc2V0dGluZ3NdPVwie1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGlzRGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIGNhbkRlbGV0ZTogY2FuRGVsZXRlICYmICEhZGFzaGJvYXJkLFxuICAgIHRyYW5zbGF0ZVdpZGdldFRpdGxlOiBkYXNoYm9hcmQ/LnRyYW5zbGF0ZVdpZGdldFRpdGxlID8/IHRyYW5zbGF0ZVdpZGdldFRpdGxlLFxuICAgIGFsbG93RnVsbHNjcmVlbjogbW9kdWxlQ29uZmlnLmFsbG93RnVsbHNjcmVlbixcbiAgICB0aXRsZTogc2V0VGl0bGUgPyBkYXNoYm9hcmQ/Lm5hbWUgfHwgdGl0bGUgOiB1bmRlZmluZWQsXG4gICAgd2lkZ2V0TWFyZ2luOiBkYXNoYm9hcmQ/LndpZGdldE1hcmdpbixcbiAgICBjYW5Db3B5OiBjYW5Db3B5ICYmICEhZGFzaGJvYXJkLFxuICAgIGRlZmF1bHRXaWR0aDogZGFzaGJvYXJkPy5jb2x1bW5zID49IDI0ID8gOCA6IDQsXG4gICAgY29sdW1uczogZGFzaGJvYXJkPy5jb2x1bW5zIHx8IDEyXG4gIH1cIlxuICBbYnJlYWRjcnVtYl09XCJicmVhZGNydW1iU2V0dGluZ3NcIlxuICBbZWRpdE1vZGVCdXR0b25zXT1cIntcbiAgICB1bmRvQnV0dG9uRGlzYWJsZWQ6IGVkaXRNb2RlU2VydmljZS51bmRvQnV0dG9uRGlzYWJsZWQsXG4gICAgY2hhbmdlVG9VbmRvTmFtZTogZWRpdE1vZGVTZXJ2aWNlLmNoYW5nZVRvVW5kb05hbWUsXG4gICAgcmVkb0J1dHRvbkRpc2FibGVkOiAhZWRpdE1vZGVTZXJ2aWNlLnJlZG9TdGFja0xhc3RJdGVtLFxuICAgIGNoYW5nZVRvUmVkb05hbWU6IGVkaXRNb2RlU2VydmljZS5yZWRvU3RhY2tMYXN0SXRlbT8ubmFtZVxuICB9XCJcbiAgKG9uQ2hhbmdlRGFzaGJvYXJkKT1cInBvc2l0aW9uT3JXaWRnZXREaW1lbnNpb25DaGFuZ2UoJGV2ZW50KVwiXG4gIChvbkFkZFdpZGdldCk9XCJhZGRXaWRnZXQoKVwiXG4gIChvbkVkaXRXaWRnZXQpPVwiZWRpdFdpZGdldCgkZXZlbnQpXCJcbiAgKG9uRGVsZXRlV2lkZ2V0KT1cImRlbGV0ZVdpZGdldCgkZXZlbnQpXCJcbiAgKG9uU2F2ZURhc2hib2FyZCk9XCJzYXZlV2lkZ2V0c1RvRGFzaGJvYXJkKClcIlxuICAob25DYW5jZWxEYXNoYm9hcmQpPVwiY2FuY2VsRWRpdE1vZGUoKVwiXG4gIChyZXZlcnRDaGFuZ2UpPVwicmV2ZXJ0Q2hhbmdlKCRldmVudClcIlxuICAob25DaGFuZ2VTdGFydCk9XCJhZGREYXNoYm9hcmRDbGFzc1RvQm9keSgpXCJcbiAgKG9uQ2hhbmdlRW5kKT1cInJlbW92ZURhc2hib2FyZENsYXNzRnJvbUJvZHkoKVwiXG4gIChvbkVkaXREYXNoYm9hcmQpPVwiZGFzaGJvYXJkRGV0YWlscy5zaG93KHRydWUpXCJcbiAgKG9uQ29weURhc2hib2FyZCk9XCJjb3B5RGFzaGJvYXJkKClcIlxuICAob25EZWxldGVEYXNoYm9hcmQpPVwiZGVsZXRlRGFzaGJvYXJkKClcIlxuPjwvYzh5LXdpZGdldHMtZGFzaGJvYXJkPlxuIl19
|
|
712
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWiwyQkFBMkIsRUFFM0Isb0JBQW9CLEVBSXBCLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsT0FBTyxFQUNQLFlBQVksRUFDWix5QkFBeUIsRUFFekIsTUFBTSxFQUdOLHlCQUF5QixFQUMxQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFFTCx3QkFBd0IsRUFJeEIsNkJBQTZCLEVBRzdCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIs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QThCO3FCQUN0Qzs7MEJBK0RFLE1BQU07MkJBQUMsd0JBQXdCO2lRQTNEbEMsSUFBSTtzQkFESCxLQUFLO2dCQUdOLGVBQWU7c0JBRGQsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sU0FBUztzQkFEUixLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBR04scUJBQXFCO3NCQURwQixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixLQUFLO3NCQURKLFdBQVc7dUJBQUMsT0FBTztnQkFHbUMsZ0JBQWdCO3NCQUF0RSxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFckQsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQThDaEQsbUJBQW1CO3NCQUR4QixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTZwQmpDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJTZXJ2aWNlLFxuICBBbGVydFNlcnZpY2UsXG4gIEJyZWFkY3J1bWJJdGVtLFxuICBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24sXG4gIERhc2hib2FyZENoYW5nZSxcbiAgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UsXG4gIERhc2hib2FyZENoaWxkQ29tcG9uZW50LFxuICBEYXNoYm9hcmRDb3B5UGVybWlzc2lvbixcbiAgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIG1lbW9pemUsXG4gIE1vZGFsU2VydmljZSxcbiAgTkVXX0RBU0hCT0FSRF9RVUVSWV9QQVJBTSxcbiAgUmV2ZXJ0Q2hhbmdlVHlwZSxcbiAgU3RhdHVzLFxuICBXaWRnZXQsXG4gIFdpZGdldENoYW5nZSxcbiAgV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZXZlcnksIGZpbmRJbmRleCwga2ViYWJDYXNlLCBrZXlCeSwgb21pdCwgc29tZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDYW5EZWFjdGl2YXRlQ29tcG9uZW50LFxuICBDT05URVhUX0RBU0hCT0FSRF9DT05GSUcsXG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRDb25maWcsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRSxcbiAgRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZSxcbiAgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0UsXG4gIFdJREdFVF9IRUFERVJfQ0xBU1NFU1xufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcbmltcG9ydCB7IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhc2hib2FyZERldGFpbENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgV2lkZ2V0Q29uZmlnQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtY29uZmlnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRFZGl0TW9kZVNlcnZpY2UgfSBmcm9tICcuL21lbWVudG8vZGFzaGJvYXJkLWVkaXQtbW9kZS5zZXJ2aWNlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG4vKipcbiAqIFRoZSBjb250ZXh0IGRhc2hib2FyZCBpcyBhIGRhc2hib2FyZCB3aGljaCByZXNvbHZlcyBpdCBkYXRhIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoZGV2aWNlIG9yIGdyb3VwKVxuICogaXQgaXMgZGlzcGxheWVkIG9uLiBJdCB1c3VhbGx5IHVzZXMgdGhlIHJvdXRlLmRhdGEgZm9yIGl0LCBidXQgeW91IGNhbiBwYXNzXG4gKiBhIGRpZmZlcmVudCBtYW5hZ2VkT2JqZWN0IHRvIHRoZSBbbW9dIGlucHV0IHBhcmFtZXRlciB0byBjaGFuZ2UgdGhhdCBiZWhhdmlvci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbnRleHQtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiBgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICBgLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkIGM4eS1ncmlkLWRhc2hib2FyZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENhbkRlYWN0aXZhdGVDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGNoaWxkcmVuQ2xhc3NlcyA9ICcnO1xuICBASW5wdXQoKVxuICBjb250ZXh0OiBhbnk7XG4gIEBJbnB1dCgpXG4gIHNldFRpdGxlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZGVmYXVsdFdpZGdldHM6IFdpZGdldFtdID0gW107XG4gIEBJbnB1dCgpXG4gIGNhbkNvcHkgPSB0cnVlO1xuICBASW5wdXQoKVxuICBjYW5EZWxldGUgPSB0cnVlO1xuICBASW5wdXQoKVxuICBpc0xvYWRpbmcgPSB0cnVlO1xuICBASW5wdXQoKVxuICBicmVhZGNydW1iU2V0dGluZ3M6IEJyZWFkY3J1bWJJdGVtO1xuICBASW5wdXQoKVxuICBzaG93Q29udGV4dEhlbHBCdXR0b24gPSB0cnVlO1xuICAvKiogV2hldGhlciB0byB0cmFuc2xhdGUgd2lkZ2V0IHRpdGxlcy4gSG93ZXZlciwgZGFzaGJvYXJkJ3Mgb3duIHNldHRpbmcgdGFrZXMgcHJlY2VkZW5jZS4gSXQgZG9lcyBub3Qgb3ZlcnJpZGUgZGFzaGJvYXJkJ3Mgc2V0dGluZyAqL1xuICBASW5wdXQoKSB0cmFuc2xhdGVXaWRnZXRUaXRsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhpZGVzIGRhc2hib2FyZCBhdmFpbGFiaWxpdHkgc2VsZWN0aW9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgaGlkZUF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBjbGFzcyA9ICcnO1xuXG4gIEBWaWV3Q2hpbGQoRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXNoYm9hcmREZXRhaWxzOiBEYXNoYm9hcmREZXRhaWxDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgd2lkZ2V0c0Rhc2hib2FyZDogV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudDtcblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmhhc1Blcm1pc3Npb25Ub0VkaXREYXNoYm9hcmQgfHwgIXRoaXMuZGFzaGJvYXJkRGV0YWlscz8uaXNDb2xsYXBzZWQ7XG4gIH1cblxuICB3aWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXNDb3B5RGlzYWJsZWQ6IERhc2hib2FyZENvcHlQZXJtaXNzaW9uO1xuICBpc1JlcG9ydDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGFzaGJvYXJkVHlwZUxhYmVsID0gZ2V0dGV4dCgnRGFzaGJvYXJkIGZvciBcInt7IGRhc2hib2FyZFR5cGUgfX1cIicpO1xuICByZWFkb25seSBkYXNoYm9hcmRUeXBlUG9wb3ZlciA9IGdldHRleHQoYFxuICBUaGUgbGF5b3V0IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoaXMgZGFzaGJvYXJkIGlzIHVzZWQgYnkgYWxsIG90aGVyIGFzc2V0cyBvZiBtb2RlbCB0eXBlXG4gIDxzdHJvbmc+e3sgZGFzaGJvYXJkVHlwZSB9fTwvc3Ryb25nPi4gQW55IGNoYW5nZXMgbWFkZSB0byB0aGlzIGRhc2hib2FyZCBpbnN0YW5jZSB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsXG4gIG90aGVyIGluc3RhbmNlcy5gKTtcbiAgcHJpdmF0ZSBkYXRhU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaGFzUGVybWlzc2lvblRvRWRpdERhc2hib2FyZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjb250ZXh0RGFzaGJvYXJkU2VydmljZTogQ29udGV4dERhc2hib2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBASW5qZWN0KENPTlRFWFRfREFTSEJPQVJEX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogQ29udGV4dERhc2hib2FyZENvbmZpZyxcbiAgICBwcml2YXRlIHdpZGdldFNlcnZpY2U6IFdpZGdldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25CYXJTZXJ2aWNlOiBBY3Rpb25CYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGVkaXRNb2RlU2VydmljZTogRGFzaGJvYXJkRWRpdE1vZGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5sb2FkQ29udGV4dERhc2hib2FyZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWROYW1lZERhc2hib2FyZCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGJlZm9yZVVubG9hZEhhbmRsZXIoJGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkge1xuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGUgPSBhd2FpdCB0aGlzLmNhbkRlYWN0aXZhdGUodHJ1ZSk7XG4gICAgaWYgKCFjYW5EZWFjdGl2YXRlKSB7XG4gICAgICAkZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIHdpZGdldFxuICAgKiBAcGFyYW0gd2lkZ2V0IFRoZSB3aWRnZXQgdG8gYXBwbHkgdGhlIGNvbnRleHQgdG8uXG4gICAqL1xuICBhcHBseURldmljZVRhcmdldCh3aWRnZXQpIHtcbiAgICBpZiAod2lkZ2V0LmNvbmZpZy5kZXZpY2UpIHtcbiAgICAgIHdpZGdldC5jb25maWcuZGV2aWNlID0geyBpZDogdGhpcy5jb250ZXh0LmlkLCBuYW1lOiB0aGlzLmNvbnRleHQubmFtZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSByb3V0ZSBsaXN0ZW5lci5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWIpIHtcbiAgICAgIHRoaXMuZGF0YVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBjb25zdCBpc05ld0Rhc2hib2FyZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbTkVXX0RBU0hCT0FSRF9RVUVSWV9QQVJBTV07XG4gICAgaWYgKGlzTmV3RGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtczogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHdWFyZHMgY29tcG9uZW50IGZyb20gdW5pbnRlbmRlZCBuYXZpZ2F0aW9uIGF3YXkgb3IgY2xvc2luZyB0YWIgd2l0aG91dCBzYXZpbmcgY2hhbmdlcy5cbiAgICogTmF2aWdhdGlvbiBjb250aW51ZXMgaWYgdHJ1ZSBpcyByZXR1cm5lZCwgYW5kIG5hdmlnYXRpb24gaXMgY2FuY2VsbGVkIGlmIHJldHVybmVkIHZhbHVlIGlzIGZhbHNlLlxuICAgKiBAcGFyYW0gb21pdENvbmZpcm0gT21pdHMgY29uZmlybSBjYWxscyBpbnNpZGUgbWV0aG9kIGJvZHkgKHdpdGhvdXQgdGhpcyBwYXJhbSwgd2hlbiBtZXRob2QgaXMgdXNlZCBpblxuICAgKiBvbiAnYmVmb3JldW5sb2FkJyBldmVudCBoYW5kbGVyLCBlcnJvciBpcyB0aHJvd24gaW4gY29uc29sZSBiZWNhdXNlIGNvbmZpcm0gaXMgYmxvY2tlZCBieSBicm93c2VyIGFueXdheSBhbmQgcmV0dXJucyBmYWxzZSlcbiAgICovXG4gIGFzeW5jIGNhbkRlYWN0aXZhdGUob21pdENvbmZpcm0gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGUgPVxuICAgICAgKGF3YWl0IHRoaXMuZGFzaGJvYXJkRGV0YWlscy5jYW5EZWFjdGl2YXRlKG9taXRDb25maXJtKSkgJiZcbiAgICAgIChhd2FpdCB0aGlzLndpZGdldHNEYXNoYm9hcmQuY2FuRGVhY3RpdmF0ZShvbWl0Q29uZmlybSkpO1xuXG4gICAgLy8gTmVlZGVkIGluIG9yZGVyIHRvIHJlc2V0IGVkaXQgbW9kZSwgb3RoZXJ3aXNlIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZGFzaGJvYXJkcywgdGhlIGVkaXQgbW9kZSBpcyBzdGlsbCBlbmFibGVkLlxuICAgIGlmIChjYW5EZWFjdGl2YXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNhbmNlbEVkaXRNb2RlKHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gY2FuRGVhY3RpdmF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyB0aGUgZGFzaGJvYXJkIHdpZGdldHMgdG8gdGhlIGRlZmF1bHQgd2lkZ2V0cy5cbiAgICovXG4gIGFzeW5jIHJlc3RvcmUoKSB7XG4gICAgY29uc3QgbWVzZyA9IGdldHRleHQoXG4gICAgICAnWW91IGFyZSBhYm91dCB0byByZXNldCB0aGUgd2lkZ2V0cyBvZiB0aGlzIGRhc2hib2FyZC4gQWxsIGNoYW5nZXMgdG8gdGhlIGRhc2hib2FyZCB3aWRnZXRzIHdpbGwgZ2V0IGxvc3QgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKGdldHRleHQoJ1Jlc2V0IHdpZGdldHMnKSwgbWVzZywgU3RhdHVzLldBUk5JTkcsIHtcbiAgICAgICAgb2s6IGdldHRleHQoJ1Jlc2V0YGRhc2hib2FyZGAnKSxcbiAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UubWFwV2lkZ2V0cyh0aGlzLmRlZmF1bHRXaWRnZXRzKTtcbiAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5oaXN0b3J5RGVzY3JpcHRpb24gPSB7XG4gICAgICAgIGNoYW5nZVR5cGU6ICdyZXNldCdcbiAgICAgIH07XG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZSh0aGlzLm1vKTtcbiAgICAgIGF3YWl0IHRoaXMub25Mb2FkKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTWV0aG9kIGNhbGxlZCBvbiBldmVyeSB3aWRnZXRzIGRpbWVuc2lvbnMgb3IgcG9zaXRpb24gY2hhbmdlIGJ1dCBhbHNvIGZvciBhZGRpbmcgbmV3IHdpZGdldCAoYmVjYXVzZSBhZGRpbmdcbiAgICogd2lkZ2V0IGNhdXNlcyBsYXlvdXQgY2hhbmdlcykuIEl0IHJlY29nbml6ZXMgd2hhdCB0eXBlIG9mIGNoYW5nZSBoYXMgYmVlbiBkb25lIGFuZCB1cGRhdGVzIGN1cnJlbnQgd2lkZ2V0cyBzdGF0ZVxuICAgKiBhY2NvcmRpbmdseS5cbiAgICogQHBhcmFtIGNoaWxkIENoYW5nZSBvYmplY3QuXG4gICAqL1xuICBwb3NpdGlvbk9yV2lkZ2V0RGltZW5zaW9uQ2hhbmdlKGNoaWxkOiBEYXNoYm9hcmRDaGlsZENoYW5nZSB8IERhc2hib2FyZENoYW5nZSk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpPy5jaGlsZHJlbiB8fCB7fTtcbiAgICBjb25zdCBkZXNjcmlwdGlvblByb3A6IGtleW9mIERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddID1cbiAgICAgIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA9PT0gT2JqZWN0LnZhbHVlcyhjdXJyZW50U3RhdGUpLmxlbmd0aCA/ICdhcnJhbmdlbWVudCcgOiAnYWRkZWQnO1xuICAgIGxldCBjaGFuZ2VOYW1lOiBEYXNoYm9hcmRDaGlsZHJlblN0YXRlWyduYW1lJ107XG4gICAgbGV0IHdpZGdldHNDaGFuZ2VkOiBXaWRnZXRbXTtcbiAgICBpZiAoZGVzY3JpcHRpb25Qcm9wID09PSAnYWRkZWQnKSB7XG4gICAgICBjaGFuZ2VOYW1lID0gREFTSEJPQVJEX0NISUxEUkVOX1NUQVRFX05BTUUuYWRkZWQ7XG4gICAgICBjb25zdCBhZGRlZFdpZGdldCA9IGNoaWxkLmNoaWxkcmVuLmZpbmQoYyA9PiAhY3VycmVudFN0YXRlW2MuZGF0YS5pZF0pO1xuICAgICAgd2lkZ2V0c0NoYW5nZWQgPSBbYWRkZWRXaWRnZXQuZGF0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYW5nZU5hbWUgPSBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRS5hcnJhbmdlbWVudDtcbiAgICAgIHdpZGdldHNDaGFuZ2VkID0gY2hpbGQuY2hpbGRyZW5cbiAgICAgICAgLm1hcChjID0+IHtcbiAgICAgICAgICBjb25zdCBsYXN0U3RhdGVDaGlsZCA9IGN1cnJlbnRTdGF0ZVtjLmRhdGEuaWRdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGMueCAhPSBsYXN0U3RhdGVDaGlsZC5feCB8fFxuICAgICAgICAgICAgYy55ICE9IGxhc3RTdGF0ZUNoaWxkLl95IHx8XG4gICAgICAgICAgICBjLndpZHRoICE9IGxhc3RTdGF0ZUNoaWxkLl93aWR0aCB8fFxuICAgICAgICAgICAgYy5oZWlnaHQgIT0gbGFzdFN0YXRlQ2hpbGQuX2hlaWdodFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGMuZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVEYXNoYm9hcmRDaGlsZHJlbihjaGlsZCwgY2hhbmdlTmFtZSwgZGVzY3JpcHRpb25Qcm9wLCB3aWRnZXRzQ2hhbmdlZCk7XG4gIH1cblxuICBhc3luYyByZXZlcnRDaGFuZ2UocmV2ZXJ0VHlwZTogUmV2ZXJ0Q2hhbmdlVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBkYXNoYm9hcmRDaGlsZHJlbjogQ29udGV4dERhc2hib2FyZFsnY2hpbGRyZW4nXTtcbiAgICBpZiAocmV2ZXJ0VHlwZSA9PT0gJ3VuZG8nKSB7XG4gICAgICBkYXNoYm9hcmRDaGlsZHJlbiA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLnVuZG8oKS5jaGlsZHJlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZGFzaGJvYXJkQ2hpbGRyZW4gPSB0aGlzLmVkaXRNb2RlU2VydmljZS5yZWRvKCkuY2hpbGRyZW47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuc2V0V2lkZ2V0cyhkYXNoYm9hcmRDaGlsZHJlbik7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbGwgZGFzaGJvYXJkcyBjaGlsZHJlbidzLiBVc2VmdWwgZm9yIHBvc2l0aW9uIGNoYW5nZXMgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoaWxkIFRoZSBjaGlsZCB0byBjaGFuZ2UuXG4gICAqIEBwYXJhbSBjaGFuZ2VOYW1lIE5hbWUgb2YgdGhlIGNoYW5nZSB0byBpbmRpY2F0ZSBpdCBvbiB1bmRvL3JlZG8gYnV0dG9uLlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb25Qcm9wIFByb3BlcnR5IHRvIGFkZCB0byBkYXNoYm9hcmQgY2hhbmdlIGhpc3RvcnkuXG4gICAqIEBwYXJhbSB3aWRnZXRzQ2hhbmdlZCBMaXN0IG9mIGNoYW5nZWQgd2lkZ2V0cy5cbiAgICovXG4gIHVwZGF0ZURhc2hib2FyZENoaWxkcmVuKFxuICAgIGNoaWxkOiBEYXNoYm9hcmRDaGlsZENoYW5nZSB8IERhc2hib2FyZENoYW5nZSxcbiAgICBjaGFuZ2VOYW1lOiBEYXNoYm9hcmRDaGlsZHJlblN0YXRlWyduYW1lJ10sXG4gICAgZGVzY3JpcHRpb25Qcm9wOiBrZXlvZiBEYXNoYm9hcmRIaXN0b3J5RGVzY3JpcHRpb25bJ3dpZGdldENoYW5nZXMnXSxcbiAgICB3aWRnZXRzQ2hhbmdlZDogV2lkZ2V0W11cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gY2hpbGQ7XG4gICAgY29uc3QgbWFwcGVkQ2hpbGRyZW46IHsgW2lkOiBzdHJpbmddOiBXaWRnZXQgfSA9IGtleUJ5KFxuICAgICAgY2hpbGRyZW4ubWFwKGMgPT4gdGhpcy5jb21wb25lbnRUb1dpZGdldChjKSksXG4gICAgICAnaWQnXG4gICAgKTtcbiAgICB0aGlzLnNldE5ld1N0YXRlKFxuICAgICAgeyBuYW1lOiBjaGFuZ2VOYW1lLCBjaGlsZHJlbjogbWFwcGVkQ2hpbGRyZW4gfSxcbiAgICAgIGRlc2NyaXB0aW9uUHJvcCxcbiAgICAgIHdpZGdldHNDaGFuZ2VkXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3BpZXMgdGhlIGRhc2hib2FyZCBhbmQgY3VycmVudCBjb250ZXh0IHRvIGEgY2xpcGJvYXJkLlxuICAgKi9cbiAgYXN5bmMgY29weURhc2hib2FyZCgpIHtcbiAgICBjb25zdCB2aWV3Q29udGV4dCA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LmRhdGE/LmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNvcHlDbGlwYm9hcmQgPSB7XG4gICAgICBkYXNoYm9hcmRJZDogdGhpcy5tby5pZCxcbiAgICAgIGRhc2hib2FyZDogY2xvbmVEZWVwKHRoaXMubW8uYzh5X0Rhc2hib2FyZCksXG4gICAgICBjb250ZXh0OiBjbG9uZURlZXAoe1xuICAgICAgICBjb250ZXh0OiB2aWV3Q29udGV4dCxcbiAgICAgICAgY29udGV4dERhdGE6IHRoaXMuY29udGV4dFxuICAgICAgfSlcbiAgICB9O1xuXG4gICAgaWYgKHZpZXdDb250ZXh0KSB7XG4gICAgICBjb25zdCBjdHggPSB2aWV3Q29udGV4dC5zcGxpdCgnLycpLnNoaWZ0KCk7XG4gICAgICBjb25zdCBtc2cgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgJ0Rhc2hib2FyZCBjb3BpZWQuIE5hdmlnYXRlIHRvIHRoZSBkZXNpcmVkIHt7IGN0eCB9fSBhbmQgc2VsZWN0IFwiUGFzdGUgZGFzaGJvYXJkXCInLFxuICAgICAgICB7IGN0eCB9XG4gICAgICApO1xuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKG1zZyk7XG4gICAgfVxuICAgIHRoaXMuYWN0aW9uQmFyU2VydmljZS5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBjb21wbGV0ZSBkYXNoYm9hcmQgYW5kIG5hdmlnYXRlIGF3YXkuXG4gICAqL1xuICBhc3luYyBkZWxldGVEYXNoYm9hcmQoKSB7XG4gICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5kZWxldGUodGhpcy5tbyk7XG4gICAgaWYgKHRoaXMucm91dGUucGFyZW50KSB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocm91dGUpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLm9uRGVsZXRlR1NFdmVudCgpO1xuICB9XG5cbiAgZ2V0IGlzRGV2aWNlVHlwZURhc2hib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRhc2hib2FyZD8uZGV2aWNlVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0cyBhIHdpZGdldCBvbiB0aGUgZGFzaGJvYXJkLlxuICAgKiBAcGFyYW0gY2hhbmdlIFRoZSB3aWRnZXQgY2hhbmdlIGV2ZW50LlxuICAgKi9cbiAgYXN5bmMgZWRpdFdpZGdldChjaGFuZ2U6IFdpZGdldENoYW5nZSkge1xuICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gY2hhbmdlLnNvdXJjZTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBhd2FpdCB0aGlzLndpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0RGVmaW5pdGlvbihcbiAgICAgIGNoYW5nZS53aWRnZXQubmFtZSB8fCBjaGFuZ2Uud2lkZ2V0LmNvbXBvbmVudElkXG4gICAgKTtcbiAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgdGhpcy5hZGRXaWRnZXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hZGRXaWRnZXQoe1xuICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgZGF0YTogeyAuLi5jb21wb25lbnQuZGF0YSwgLi4uY2hhbmdlLndpZGdldCwgX3g6IHgsIF95OiB5LCBfd2lkdGg6IHdpZHRoLCBfaGVpZ2h0OiBoZWlnaHQgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB3aWRnZXQgdG8gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIHNlbGVjdGVkIERlZmluZSBhIHNlbGVjdGVkIGNvbXBvbmVudCB0byBzd2l0Y2ggdG8gZWRpdCBtb2RlIGRpcmVjdGx5LlxuICAgKi9cbiAgYXN5bmMgYWRkV2lkZ2V0KHNlbGVjdGVkPzogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24pIHtcbiAgICBjb25zdCBwYXJ0aWFsQ2xvbmVTZWxlY3RlZCA9IHNlbGVjdGVkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zZWxlY3RlZCxcbiAgICAgICAgICBkYXRhOiBjbG9uZURlZXAoc2VsZWN0ZWQuZGF0YSlcbiAgICAgICAgfVxuICAgICAgOiBzZWxlY3RlZDtcblxuICAgIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSB0aGlzLmNvbnRleHQuY29udGV4dERhdGEgPyB0aGlzLmNvbnRleHQuY29udGV4dERhdGEgOiB0aGlzLmNvbnRleHQ7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlOiBQYXJ0aWFsPFdpZGdldENvbmZpZ0NvbXBvbmVudD4gPSB7XG4gICAgICBtbzogdGhpcy5tbyxcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dC5jOHlfUmVwb3J0ID8ge30gOiBhY3RpdmVDb250ZXh0LFxuICAgICAgc2VsZWN0ZWQ6IHBhcnRpYWxDbG9uZVNlbGVjdGVkXG4gICAgfTtcblxuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5ic01vZGFsLnNob3coV2lkZ2V0Q29uZmlnQ29tcG9uZW50LCB7XG4gICAgICBjbGFzczogJ21vZGFsLWxnJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpbml0aWFsU3RhdGUsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgfSkuY29udGVudCBhcyBXaWRnZXRDb25maWdDb21wb25lbnQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbmV3V2lkZ2V0ID0gYXdhaXQgbW9kYWwucmVzdWx0O1xuICAgICAgaWYgKCF0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0ge307XG4gICAgICB9XG4gICAgICBuZXdXaWRnZXQuY2xhc3NlcyA9IHRoaXMubWVyZ2VXaWRnZXRDbGFzc2VzKG5ld1dpZGdldCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVdpZGdldChuZXdXaWRnZXQpO1xuICAgICAgLy8gTmV3IHN0YXRlIGluIGVkaXQgbW9kZSBpcyBhZGRlZCBvbmx5IGZvciB3aWRnZXQgdXBkYXRlLiBXaGVuIGFkZGluZyB3aWRnZXQsIGxheW91dCBjaGFuZ2UgaXMgYWx3YXlzIHRyaWdnZXJlZCxcbiAgICAgIC8vIHNvIGl0J3MgZWFzaWVyIHRvIHNldCBuZXcgc3RhdGUgb24gbGF5b3V0IGNoYW5nZSBvbmx5XG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XG4gICAgICAgICAgLi4udGhpcy5lZGl0TW9kZVNlcnZpY2UuZ2V0Q3VycmVudFN0YXRlKCkuY2hpbGRyZW4sXG4gICAgICAgICAgW25ld1dpZGdldC5pZF06IG5ld1dpZGdldFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldE5ld1N0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FLmNvbmZpZyxcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgICBbbmV3V2lkZ2V0XVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlV2lkZ2V0c1RvRGFzaGJvYXJkKCkge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpO1xuICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IGN1cnJlbnRTdGF0ZS5jaGlsZHJlbjtcblxuICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5oaXN0b3J5RGVzY3JpcHRpb24gPSB7XG4gICAgICBjaGFuZ2VUeXBlOiAndXBkYXRlJyxcbiAgICAgIHdpZGdldENoYW5nZXM6IHRoaXMubWFwU3RhdGVUb0hpc3RvcnlEZXNjcmlwdGlvbihjdXJyZW50U3RhdGUuY2hhbmdlSGlzdG9yeSlcbiAgICB9O1xuICAgIGF3YWl0IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UudXBkYXRlKHRoaXMubW8pO1xuICAgIHRoaXMuZWRpdE1vZGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5lZGl0TW9kZVNlcnZpY2UuaW5pdCh7XG4gICAgICBuYW1lOiBEQVNIQk9BUkRfQ0hJTERSRU5fU1RBVEVfTkFNRS5pbml0aWFsLFxuICAgICAgY2hpbGRyZW46IHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbixcbiAgICAgIGNoYW5nZUhpc3Rvcnk6IHt9XG4gICAgfSk7XG5cbiAgICB0aGlzLmlzQ29weURpc2FibGVkID0gdGhpcy5nZXREYXNoYm9hcmRDb3B5UGVybWlzc2lvblN0YXRlKCk7XG4gIH1cblxuICBhc3luYyBjYW5jZWxFZGl0TW9kZShvbkRlYWN0aXZhdGUgPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRhc2hib2FyZENoaWxkcmVuID0gdGhpcy5lZGl0TW9kZVNlcnZpY2UucmVzZXQoKTtcbiAgICBpZiAodGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmhpc3RvcnlEZXNjcmlwdGlvbiA9IHt9O1xuICAgIH1cbiAgICB0aGlzLndpZGdldHNEYXNoYm9hcmQuZWRpdE1vZGUkLm5leHQoZmFsc2UpO1xuICAgIGlmICghb25EZWFjdGl2YXRlKSB7XG4gICAgICAvLyB3aGVuIHNldFdpZGdldHMgaXMgY2FsbGVkIGR1cmluZyBuYXZpZ2F0aW9uIGZyb20gZGV2aWNlIHRvIGRldmljZSwgbmF2aWdhdGlvbiBmYWlsc1xuICAgICAgYXdhaXQgdGhpcy5zZXRXaWRnZXRzKGRhc2hib2FyZENoaWxkcmVuLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHdpZGdldCBvciBhZGRzIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0IG9uXG4gICAqIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSB3aWRnZXQgVGhlIG5ldyB3aWRnZXRcbiAgICovXG4gIGFzeW5jIHVwZGF0ZVdpZGdldCh3aWRnZXQpIHtcbiAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh0aGlzLndpZGdldHMsIHsgaWQ6IHdpZGdldC5pZCB9KTtcbiAgICBjb25zdCBpc05ldyA9IGluZGV4ID09PSAtMTtcbiAgICBjb25zdCBtYXBwZWRXaWRnZXQgPSBhd2FpdCB0aGlzLndpZGdldFNlcnZpY2UubWFwTGVnYWN5KHdpZGdldCk7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICB0aGlzLndpZGdldHMucHVzaChtYXBwZWRXaWRnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZGdldHMuc3BsaWNlKGluZGV4LCAxLCBtYXBwZWRXaWRnZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgd2lkZ2V0IGFuZCByZWFycmFuZ2VzIHRoZSByZW1haW5pbmcgb25lc1xuICAgKiBpZiBuZWNlc3NhcnkuXG4gICAqIEBwYXJhbSBjaGFuZ2UgVGhlIGNoYW5nZSBldmVudC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZVdpZGdldChjaGFuZ2U6IFdpZGdldENoYW5nZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHdpZGdldCwgc291cmNlIH0gPSBjaGFuZ2U7XG4gICAgICBjb25zdCByZW1vdmVkID0gdGhpcy53aWRnZXRzLmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IHdpZGdldC5pZCk7XG4gICAgICB0aGlzLndpZGdldHMuc3BsaWNlKHRoaXMud2lkZ2V0cy5pbmRleE9mKHJlbW92ZWQpLCAxKTtcblxuICAgICAgY29uc3QgeyBkYXNoYm9hcmQgfSA9IHNvdXJjZTtcbiAgICAgIGRhc2hib2FyZC5jaGlsZHJlbiA9IGRhc2hib2FyZC5jaGlsZHJlbi5maWx0ZXIoYyA9PiBjLmRhdGEuaWQgIT09IHdpZGdldC5pZCk7XG5cbiAgICAgIC8vIHVzaW5nIHNldFRpbWVvdXQgdG8gZ2l2ZSB0aGUgY29tcG9uZW50IHRoZSBjaGFuY2UgdG8gcmVtb3ZlIGl0LlxuICAgICAgY29uc3Qgc2xlZXAgPSB0aW1lb3V0ID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XG4gICAgICBhd2FpdCBzbGVlcCgwKTtcblxuICAgICAgY29uc3QgY2hpbGQgPSBuZXcgRGFzaGJvYXJkQ2hpbGRDaGFuZ2Uoc291cmNlKTtcbiAgICAgIGNoaWxkLmNvbGxhcHNlVXBBbGwoKTtcbiAgICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkQ2hpbGRyZW4oY2hpbGQsIERBU0hCT0FSRF9DSElMRFJFTl9TVEFURV9OQU1FLnJlbW92ZWQsICdyZW1vdmVkJywgW1xuICAgICAgICB3aWRnZXRcbiAgICAgIF0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gZW5zdXJlIHRoYXQgdGhlIGRyYWdnZWQtZWxlbWVudFxuICAgKiAod2hpY2ggaXMgYXR0YWNoZWQgdG8gdGhlIGJvZHkpIGhhcyB0aGUgcmlnaHQgc3R5bGluZy5cbiAgICovXG4gIGFkZERhc2hib2FyZENsYXNzVG9Cb2R5KCkge1xuICAgIHRoaXMuY2xhc3Muc3BsaXQoJyAnKS5mb3JFYWNoKGNzc0NsYXNzID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgY3NzQ2xhc3MpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBkcmFnZ2VkLWVsZW1lbnRcbiAgICogKHdoaWNoIGlzIGF0dGFjaGVkIHRvIHRoZSBib2R5KSBoYXMgdGhlIHJpZ2h0IHN0eWxpbmcuXG4gICAqL1xuICByZW1vdmVEYXNoYm9hcmRDbGFzc0Zyb21Cb2R5KCkge1xuICAgIHRoaXMuY2xhc3Muc3BsaXQoJyAnKS5mb3JFYWNoKGNzc0NsYXNzID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgY3NzQ2xhc3MpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25Mb2FkKHRyYWNrRXhwZXJpZW5jZT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmhhc1Blcm1pc3Npb25Ub0VkaXREYXNoYm9hcmQgPSB0aGlzLmRhc2hib2FyZFxuICAgICAgPyBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNhbkVkaXREYXNoYm9hcmQodGhpcy5tbylcbiAgICAgIDogZmFsc2U7XG4gICAgdGhpcy5jYW5Db3B5ID1cbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VEYXNoYm9hcmQodGhpcy5tbykgfHxcbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VUeXBlKHRoaXMubW8pIHx8XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzR3JvdXBEYXNoYm9hcmQodGhpcy5tbyk7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2hpbGRyZW46IENvbnRleHREYXNoYm9hcmRbJ2NoaWxkcmVuJ10gPSBjbG9uZURlZXAoXG4gICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQ/LmNoaWxkcmVuXG4gICAgKTtcbiAgICBjb25zdCBkYXNoYm9hcmRDbGFzc2VzID0ge1xuICAgICAgJ2M4eS1ncmlkLWRhc2hib2FyZCc6IHRydWUsXG4gICAgICBkYXNoYm9hcmQ6IHRydWUsXG4gICAgICAuLi50aGlzLmRhc2hib2FyZD8uY2xhc3Nlc1xuICAgIH07XG4gICAgdGhpcy5pc0NvcHlEaXNhYmxlZCA9IHRoaXMuZGFzaGJvYXJkXG4gICAgICA/IHRoaXMuZ2V0RGFzaGJvYXJkQ29weVBlcm1pc3Npb25TdGF0ZSgpXG4gICAgICA6IHsgc3RhdGU6IGZhbHNlLCByZWFzb246IG51bGwgfTtcbiAgICB0aGlzLmVkaXRNb2RlU2VydmljZS5pbml0KHtcbiAgICAgIG5hbWU6IGdldHRleHQoJ0luaXRpYWwgc3RhdGUnKSxcbiAgICAgIGNoaWxkcmVuOiBkYXNoYm9hcmRDaGlsZHJlbixcbiAgICAgIGNoYW5nZUhpc3Rvcnk6IHt9XG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLnNldFdpZGdldHMoZGFzaGJvYXJkQ2hpbGRyZW4sIHRyYWNrRXhwZXJpZW5jZSk7XG4gICAgdGhpcy5jbGFzcyA9IE9iamVjdC5rZXlzKGRhc2hib2FyZENsYXNzZXMpLmpvaW4oJyAnKTtcbiAgICBpZiAodGhpcy5pc1JlcG9ydCkge1xuICAgICAgdGhpcy5hZGRSZXBvcnREYXNoYm9hcmRTZXR0aW5ncygpO1xuICAgIH1cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZCkge1xuICAgICAgdGhpcy5kYXNoYm9hcmREZXRhaWxzLnNob3coZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLm9uTG9hZEdTRXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkYXNoYm9hcmRQcmV2aWV3KGxheW91dENoYW5nZXM6IENvbnRleHREYXNoYm9hcmQpIHtcbiAgICBpZiAobGF5b3V0Q2hhbmdlcz8uY2xhc3Nlcykge1xuICAgICAgY29uc3QgZGFzaGJvYXJkQ2xhc3NlcyA9IHtcbiAgICAgICAgJ2M4eS1ncmlkLWRhc2hib2FyZCc6IHRydWUsXG4gICAgICAgIGRhc2hib2FyZDogdHJ1ZSxcbiAgICAgICAgLi4ubGF5b3V0Q2hhbmdlcy5jbGFzc2VzXG4gICAgICB9O1xuICAgICAgdGhpcy5jbGFzcyA9IE9iamVjdC5rZXlzKGRhc2hib2FyZENsYXNzZXMpLmpvaW4oJyAnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZC53aWRnZXRDbGFzc2VzID0ge1xuICAgICAgICAuLi50aGlzLmRhc2hib2FyZC53aWRnZXRDbGFzc2VzLFxuICAgICAgICAuLi5sYXlvdXRDaGFuZ2VzLndpZGdldENsYXNzZXNcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVsb2FkRGFzaGJvYXJkKGRhc2hib2FyZE1vOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMuZGFzaGJvYXJkID0gZGFzaGJvYXJkTW8uYzh5X0Rhc2hib2FyZDtcbiAgICB0aGlzLm1vID0gZGFzaGJvYXJkTW87XG4gICAgYXdhaXQgdGhpcy5vbkxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0V2lkZ2V0cyhcbiAgICBkYXNoYm9hcmRDaGlsZHJlbjogQ29udGV4dERhc2hib2FyZFsnY2hpbGRyZW4nXSxcbiAgICB0cmFja0V4cGVyaWVuY2UgPSBmYWxzZVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc0RldmljZVR5cGUgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlVHlwZSh0aGlzLm1vKTtcbiAgICB0aGlzLndpZGdldHMgPSBhd2FpdCBQcm9taXNlLmFsbDxXaWRnZXQ+KFxuICAgICAgT2JqZWN0LnZhbHVlcyhkYXNoYm9hcmRDaGlsZHJlbiB8fCB7fSkubWFwKHdpZGdldCA9PiB7XG4gICAgICAgIHdpZGdldC5jbGFzc2VzID0gdGhpcy5tZXJnZVdpZGdldENsYXNzZXMod2lkZ2V0KTtcbiAgICAgICAgaWYgKGlzRGV2aWNlVHlwZSkge1xuICAgICAgICAgIHRoaXMuYXBwbHlEZXZpY2VUYXJnZXQod2lkZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhY2tFeHBlcmllbmNlKSB7XG4gICAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCgnbG9hZFdpZGdldCcsIHtcbiAgICAgICAgICAgIHdpZGdldE5hbWU6IHdpZGdldC5jb21wb25lbnRJZCB8fCB3aWRnZXQubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLndpZGdldFNlcnZpY2UubWFwTGVnYWN5KHdpZGdldCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDb250ZXh0RGFzaGJvYXJkKCkge1xuICAgIHRoaXMuZGF0YVN1YiA9IHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgZGFzaGJvYXJkLCBpc1JlcG9ydCB9KSA9PiB7XG4gICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhIHx8IHt9O1xuICAgICAgdGhpcy50aXRsZSA9IHRoaXMuY29udGV4dD8ubmFtZTtcbiAgICAgIHRoaXMubW8gPSBkYXNoYm9hcmQ7XG4gICAgICB0aGlzLmRhc2hib2FyZCA9IHRoaXMubW8uYzh5X0Rhc2hib2FyZDtcbiAgICAgIHRoaXMuaXNSZXBvcnQgPSBpc1JlcG9ydCB8fCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzUmVwb3J0KHRoaXMubW8pO1xuICAgICAgaWYgKHRoaXMuaXNSZXBvcnQgJiYgdGhpcy5kYXNoYm9hcmQgJiYgIXRoaXMuZGFzaGJvYXJkPy5uYW1lKSB7XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkLm5hbWUgPSB0aGlzLnRpdGxlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNSZXBvcnQgJiYgdGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgICAgdGhpcy5kYXNoYm9hcmQuYzh5X0lzTmF2aWdhdG9yTm9kZSA9IHRoaXMuY29udGV4dC5jOHlfSXNOYXZpZ2F0b3JOb2RlO1xuICAgICAgfVxuICAgICAgdGhpcy5wYXRjaFNlbnNvclBob25lRGFzaGJvYXJkKHRoaXMuZGFzaGJvYXJkLCB0aGlzLm1vLm93bmVyLCB0aGlzLmNvbnRleHQ/LnR5cGUpO1xuICAgICAgdGhpcy5vbkxvYWQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG8gZW5hYmxlIHRyYW5zbGF0aW9uIGZvciB3aWRnZXRzIHdpdGhpbiB0aGUgZGFzaGJvYXJkLCB0aGUgXCJ0cmFuc2xhdGVXaWRnZXRUaXRsZVwiIGZsYWcgbXVzdCBiZSBlbmFibGVkLlxuICAgKiBUaGUgcHJvcGVydHkgbmVlZHMgdG8gYmUgcGF0Y2hlZCwgYXMgdGhlIFwiU2Vuc29yIEFwcFwiIGRvZXMgbm90IHByb3ZpZGUgdGhpcyBzZXR0aW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBwYXRjaFNlbnNvclBob25lRGFzaGJvYXJkKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZCwgb3duZXI6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09ICdjOHlfU2Vuc29yUGhvbmUnICYmIG93bmVyPy5pbmNsdWRlcygnZGV2aWNlX3Bob25lJykpIHtcbiAgICAgIGRhc2hib2FyZC50cmFuc2xhdGVXaWRnZXRUaXRsZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkTmFtZWREYXNoYm9hcmQoKSB7XG4gICAgdGhpcy5kYXRhU3ViID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZVxuICAgICAgLmdldE5hbWVkRGFzaGJvYXJkT3JDcmVhdGUodGhpcy5uYW1lLCB0aGlzLmRlZmF1bHRXaWRnZXRzLCB0aGlzLmNvbnRleHQpXG4gICAgICAuc3Vic2NyaWJlKG1vID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jb250ZXh0IHx8IHt9O1xuICAgICAgICB0aGlzLm1vID0gbW87XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkID0gdGhpcy5tby5jOHlfRGFzaGJvYXJkO1xuICAgICAgICB0aGlzLm9uTG9hZCh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZVdpZGdldENsYXNzZXMod2lkZ2V0OiBXaWRnZXQpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG4gICAgY29uc3QgaGFzSGVhZGVyQ2xhc3MgPSBXSURHRVRfSEVBREVSX0NMQVNTRVMuZmluZChcbiAgICAgIGVsID0+IHdpZGdldC5jbGFzc2VzICYmIHdpZGdldC5jbGFzc2VzW2VsLmNsYXNzXVxuICAgICk7XG4gICAgY29uc3Qgd2lkZ2V0Q2xhc3NlcyA9IGhhc0hlYWRlckNsYXNzXG4gICAgICA/IHsgLi4ud2lkZ2V0LmNsYXNzZXMgfVxuICAgICAgOiB7IC4uLnRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXMsIC4uLndpZGdldC5jbGFzc2VzIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhcmQ6IHRydWUsXG4gICAgICAnY2FyZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgW2tlYmFiQ2FzZSh3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWUpXTogdHJ1ZSxcbiAgICAgIC4uLndpZGdldENsYXNzZXNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRUb1dpZGdldChjaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub21pdChjaGlsZC5kYXRhLCBbJ2NvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0JywgJ3RyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0J10pLCAvLyByZW1vdmUgbGVnYWN5XG4gICAgICAuLi4oe1xuICAgICAgICBfeDogY2hpbGQueCxcbiAgICAgICAgX3k6IGNoaWxkLnksXG4gICAgICAgIF93aWR0aDogY2hpbGQud2lkdGgsXG4gICAgICAgIF9oZWlnaHQ6IGNoaWxkLmhlaWdodFxuICAgICAgfSBhcyBXaWRnZXQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVwb3J0RGFzaGJvYXJkU2V0dGluZ3MoKSB7XG4gICAgdGhpcy5zZXRUaXRsZSA9IHRydWU7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMuY29udGV4dD8ubmFtZSB8fCBnZXR0ZXh0KCdOZXcgcmVwb3J0Jyk7XG4gICAgdGhpcy5icmVhZGNydW1iU2V0dGluZ3MgPSB7XG4gICAgICBpY29uOiAndGgnLFxuICAgICAgbGFiZWw6ICdSZXBvcnRzJyxcbiAgICAgIHBhdGg6ICdyZXBvcnRzJ1xuICAgIH07XG4gICAgdGhpcy5jYW5EZWxldGUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGFzaGJvYXJkQ29weVBlcm1pc3Npb25TdGF0ZSgpOiBEYXNoYm9hcmRDb3B5UGVybWlzc2lvbiB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmhhc1Blcm1pc3Npb25zVG9Db3B5RGFzaGJvYXJkKCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXRlOiBmYWxzZSwgcmVhc29uOiBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24uUEVSTUlTU0lPTlMgfTtcbiAgICB9XG4gICAgY29uc3QgYWxsRGFzaGJvYXJkQ2hpbGRyZW5BcmVWYWxpZCA9IGV2ZXJ5KHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gY2hpbGQuY29uZmlnIHx8IHt9O1xuICAgICAgY29uc3QgZGF0YVBvaW50cyA9IGNvbmZpZy5kYXRhcG9pbnRzIHx8IFtdO1xuICAgICAgcmV0dXJuICEoXG4gICAgICAgIChjb25maWcuZGV2aWNlICYmIGNvbmZpZy5kZXZpY2UuaWQgIT09IHRoaXMuY29udGV4dC5pZCkgfHxcbiAgICAgICAgc29tZShkYXRhUG9pbnRzLCBkYXRhUG9pbnQgPT4gZGF0YVBvaW50Ll9fdGFyZ2V0Py5pZCAhPT0gdGhpcy5jb250ZXh0LmlkKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBpZiAoIWFsbERhc2hib2FyZENoaWxkcmVuQXJlVmFsaWQpIHtcbiAgICAgIHJldHVybiB7IHN0YXRlOiBmYWxzZSwgcmVhc29uOiBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24uV1JPTkdfUkVGRVJFTkNFIH07XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXRlOiB0cnVlIH07XG4gIH1cblxuICBwcml2YXRlIHNldE5ld1N0YXRlKFxuICAgIHN0YXRlOiBQaWNrPERhc2hib2FyZENoaWxkcmVuU3RhdGUsICduYW1lJyB8ICdjaGlsZHJlbic+LFxuICAgIGRlc2NyaXB0aW9uUHJvcDoga2V5b2YgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10sXG4gICAgd2lkZ2V0c0NoYW5nZWQ6IFdpZGdldFtdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXREZXNjcmlwdGlvbkZvck5ld1N0YXRlKGRlc2NyaXB0aW9uUHJvcCwgd2lkZ2V0c0NoYW5nZWQpO1xuICAgIHRoaXMuZWRpdE1vZGVTZXJ2aWNlLm5ld1N0YXRlKHsgLi4uc3RhdGUsIGNoYW5nZUhpc3Rvcnk6IGRlc2NyaXB0aW9uIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXNjcmlwdGlvbkZvck5ld1N0YXRlKFxuICAgIGRlc2NyaXB0aW9uUHJvcDoga2V5b2YgRGFzaGJvYXJkSGlzdG9yeURlc2NyaXB0aW9uWyd3aWRnZXRDaGFuZ2VzJ10sXG4gICAgd2lkZ2V0c0NoYW5nZWQ6IFdpZGdldFtdXG4gICk6IERhc2hib2FyZENoaWxkcmVuU3RhdGVbJ2NoYW5nZUhpc3RvcnknXSB7XG4gICAgY29uc3QgY2hhbmdlSGlzdG9yeSA9IHRoaXMuZWRpdE1vZGVTZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpLmNoYW5nZUhpc3Rvcnk7XG4gICAgaWYgKCFjaGFuZ2VIaXN0b3J5W2Rlc2NyaXB0aW9uUHJvcF0pIHtcbiAgICAgIGNoYW5nZUhpc3RvcnlbZGVzY3JpcHRpb25Qcm9wXSA9IHt9O1xuICAgIH1cbiAgICB3aWRnZXRzQ2hhbmdlZC5mb3JFYWNoKHcgPT4ge1xuICAgICAgaWYgKGRlc2NyaXB0aW9uUHJvcCA9PT0gJ3JlbW92ZWQnICYmIGNoYW5nZUhpc3RvcnkuYWRkZWQ/Llt3LmlkXSkge1xuICAgICAgICAvLyBpZiB3aWRnZXQgd2FzIGFkZGVkIGR1cmluZyBjdXJyZW50IGVkaXQgc2Vzc2lvbiBhbmQgdGhlbiByZW1vdmVkLCBpdCBzaG91bGQgbm90IGJlIGF0IGRlc2NyaXB0aW9uIGF0IGFsbFxuICAgICAgICBkZWxldGUgY2hhbmdlSGlzdG9yeS5hZGRlZFt3LmlkXTtcbiAgICAgICAgaWYgKGNoYW5nZUhpc3RvcnkuY29uZmlnPy5bdy5pZF0pIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlSGlzdG9yeS5jb25maWdbdy5pZF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZUhpc3RvcnkuYXJyYW5nZW1lbnQ/Llt3LmlkXSkge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VIaXN0b3J5Py5hcnJhbmdlbWVudFt3LmlkXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKGRlc2NyaXB0aW9uUHJvcCA9PT0gJ2NvbmZpZycgfHwgZGVzY3JpcHRpb25Qcm9wID09PSAnYXJyYW5nZW1lbnQnKSAmJlxuICAgICAgICBjaGFuZ2VIaXN0b3J5LmFkZGVkPy5bdy5pZF1cbiAgICAgICkge1xuICAgICAgICAvLyBpZiB3aWRnZXQgd2FzIGFkZGVkIGFuZCB0aGVuIG1vZGlmaWVkIGluIGN1cnJlbnQgZWRpdCBzZXNzaW9uLCBpdCBzaG91bGQgb25seSBiZSBpbmRpY2F0ZWQgYXMgYWRkZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5nZUhpc3RvcnlbZGVzY3JpcHRpb25Qcm9wXVt3LmlkXSA9IHc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2hhbmdlSGlzdG9yeTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU3RhdGVUb0hpc3RvcnlEZXNjcmlwdGlvbihcbiAgICBkZXNjcmlwdGlvbjogRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZVsnY2hhbmdlSGlzdG9yeSddXG4gICk6IERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddIHtcbiAgICBjb25zdCBoaXN0b3J5RGVzY3JpcHRpb246IERhc2hib2FyZEhpc3RvcnlEZXNjcmlwdGlvblsnd2lkZ2V0Q2hhbmdlcyddID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb24pKSB7XG4gICAgICBjb25zdCB3aWRnZXRzID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSk7XG4gICAgICBpZiAoIXdpZGdldHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaGlzdG9yeURlc2NyaXB0aW9uW2tleV0gPSBPYmplY3QudmFsdWVzKHZhbHVlKS5tYXAod2lkZ2V0ID0+IHdpZGdldC50aXRsZSk7XG4gICAgfVxuICAgIHJldHVybiBoaXN0b3J5RGVzY3JpcHRpb247XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uRGVsZXRlR1NFdmVudCgpIHtcbiAgICBjb25zdCBwYXJlbnROYW1lID0gYXdhaXQgdGhpcy5jb252ZXJ0U3RyaW5nVG9IYXNoKHRoaXMuY29udGV4dD8ubmFtZSk7XG4gICAgY29uc3QgZGFzaGJvYXJkTmFtZSA9IGF3YWl0IHRoaXMuY29udmVydFN0cmluZ1RvSGFzaCh0aGlzLmRhc2hib2FyZD8ubmFtZSk7XG5cbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLkRBU0hCT0FSRFMsIHtcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT01QT05FTlRTLkRFTEVURV9EQVNIQk9BUkQsXG4gICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQUNUSU9OUy5ERUxFVEUsXG4gICAgICBuYW1lOiBkYXNoYm9hcmROYW1lLFxuICAgICAgaWQ6IHRoaXMubW8uaWQsXG4gICAgICBuYW1lSWQ6IGAke2Rhc2hib2FyZE5hbWV9XyR7dGhpcy5tby5pZH1gLFxuICAgICAgcGFyZW50QXNzZXRJZDogdGhpcy5jb250ZXh0Py5pZCA/IHRoaXMuY29udGV4dC5pZCA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lOiB0aGlzLmNvbnRleHQ/LmlkID8gcGFyZW50TmFtZSA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXRUeXBlOiB0aGlzLmNvbnRleHQ/LmlkID8gdGhpcy5jb250ZXh0LnR5cGUgOiAnbm9Db250ZXh0JyxcbiAgICAgIHBhcmVudEFzc2V0TmFtZUlkOiB0aGlzLmNvbnRleHQ/LmlkID8gYCR7cGFyZW50TmFtZX1fJHt0aGlzLmNvbnRleHQuaWR9YCA6ICdub0NvbnRleHQnLFxuICAgICAgcGFyZW50QXNzZXROYW1lRGFzaGJvYXJkTmFtZTogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICA/IGAke3BhcmVudE5hbWV9XyR7ZGFzaGJvYXJkTmFtZX1gXG4gICAgICAgIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldElkRGFzaGJvYXJkSWQ6IHRoaXMuY29udGV4dD8uaWQgPyBgJHt0aGlzLmNvbnRleHQuaWR9XyR7dGhpcy5tby5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWVEYXNoYm9hcmRJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5tby5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICBwYXJlbnRBc3NldE5hbWVJZERhc2hib2FyZE5hbWVJZDogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5jb250ZXh0LmlkfV8ke2Rhc2hib2FyZE5hbWV9XyR7dGhpcy5tby5pZH1gXG4gICAgICAgIDogJ25vQ29udGV4dCcsXG4gICAgICBkYXNoYm9hcmRUeXBlOiB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlID8gdGhpcy5kYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIDogbnVsbCxcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZ2V0Q29udGV4dEZvckdTKHRoaXMuY29udGV4dClcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25Mb2FkR1NFdmVudCgpIHtcbiAgICBjb25zdCBwYXJlbnROYW1lID0gYXdhaXQgdGhpcy5jb252ZXJ0U3RyaW5nVG9IYXNoKHRoaXMuY29udGV4dD8ubmFtZSk7XG4gICAgY29uc3QgZGFzaGJvYXJkTmFtZSA9XG4gICAgICAoYXdhaXQgdGhpcy5jb252ZXJ0U3RyaW5nVG9IYXNoKHRoaXMuZGFzaGJvYXJkPy5uYW1lKSkgPz9cbiAgICAgIHRoaXMuZXh0cmFjdERlZmF1bHREYXNoYm9hcmROYW1lKHRoaXMubW8pID8/XG4gICAgICAnbm9uZSc7XG5cbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgdGhpcy5pc1JlcG9ydFxuICAgICAgICA/IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLlJFUE9SVFNcbiAgICAgICAgOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5EQVNIQk9BUkRTLFxuICAgICAge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09NUE9ORU5UUy5EQVNIQk9BUkRfVklFVyxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkFDVElPTlMuTE9BRCxcbiAgICAgICAgbmFtZTogZGFzaGJvYXJkTmFtZSxcbiAgICAgICAgaWQ6IHRoaXMubW8uaWQsXG4gICAgICAgIG5hbWVJZDogYCR7ZGFzaGJvYXJkTmFtZX1fJHt0aGlzLm1vLmlkfWAsXG4gICAgICAgIHBhcmVudEFzc2V0SWQ6IHRoaXMuY29udGV4dD8uaWQgPyB0aGlzLmNvbnRleHQuaWQgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXROYW1lOiB0aGlzLmNvbnRleHQ/LmlkID8gcGFyZW50TmFtZSA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldFR5cGU6IHRoaXMuY29udGV4dD8uaWQgPyB0aGlzLmNvbnRleHQudHlwZSA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldE5hbWVJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5jb250ZXh0LmlkfWAgOiAnbm9Db250ZXh0JyxcbiAgICAgICAgcGFyZW50QXNzZXROYW1lRGFzaGJvYXJkTmFtZTogdGhpcy5jb250ZXh0Py5pZFxuICAgICAgICAgID8gYCR7cGFyZW50TmFtZX1fJHtkYXNoYm9hcmROYW1lfWBcbiAgICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldElkRGFzaGJvYXJkSWQ6IHRoaXMuY29udGV4dD8uaWRcbiAgICAgICAgICA/IGAke3RoaXMuY29udGV4dC5pZH1fJHt0aGlzLm1vLmlkfWBcbiAgICAgICAgICA6ICdub0NvbnRleHQnLFxuICAgICAgICBwYXJlbnRBc3NldE5hbWVEYXNoYm9hcmRJZDogdGhpcy5jb250ZXh0Py5pZCA/IGAke3BhcmVudE5hbWV9XyR7dGhpcy5tby5pZH1gIDogJ25vQ29udGV4dCcsXG4gICAgICAgIHBhcmVudEFzc2V0TmFtZUlkRGFzaGJvYXJkTmFtZUlkOiB0aGlzLmNvbnRleHQ/LmlkXG4gICAgICAgICAgPyBgJHtwYXJlbnROYW1lfV8ke3RoaXMuY29udGV4dC5pZH1fJHtkYXNoYm9hcmROYW1lfV8ke3RoaXMubW8uaWR9YFxuICAgICAgICAgIDogJ25vQ29udGV4dCcsXG4gICAgICAgIGRhc2hib2FyZFR5cGU6IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGUgPyB0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgOiBudWxsLFxuICAgICAgICBjb250ZXh0OiB0aGlzLmlzUmVwb3J0XG4gICAgICAgICAgPyBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuUkVQT1JUXG4gICAgICAgICAgOiB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldENvbnRleHRGb3JHUyh0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdERlZmF1bHREYXNoYm9hcmROYW1lKG9iajogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBuYW1lS2V5ID0gT2JqZWN0LmtleXMob2JqKS5maW5kKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnYzh5X0Rhc2hib2FyZCFuYW1lIScpKTtcbiAgICBpZiAobmFtZUtleSkge1xuICAgICAgcmV0dXJuIG5hbWVLZXkuc3BsaXQoJyEnKS5wb3AoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBAbWVtb2l6ZSgpXG4gIHByaXZhdGUgYXN5bmMgY29udmVydFN0cmluZ1RvSGFzaChzdHI6IHN0cmluZykge1xuICAgIGlmICghc3RyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdhaW5zaWdodFNlcnZpY2Uuc2hvdWxkU2VuZFBpaURhdGEoKSlcbiAgICAgID8gc3RyXG4gICAgICA6IHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5oYXNoR3JvdXBOYW1lKHN0cik7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGUgKm5nSWY9XCJ0aXRsZVwiPlxuICB7eyB0aXRsZSB9fVxuPC9jOHktdGl0bGU+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gIFtwcmlvcml0eV09XCIxMDAwMFwiXG4gICpuZ0lmPVwiZGFzaGJvYXJkPy5kZXZpY2VUeXBlICYmIGRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4tY2xlYW4gYnRuLWxpbmtcIlxuICAgIHBvcG92ZXJUaXRsZT1cInt7ICdEYXNoYm9hcmQgdGVtcGxhdGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BvcG92ZXJdPVwiZGFzaGJvYXJkVHlwZVBvcG92ZXJSZWZcIlxuICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gID5cbiAgICA8c3BhbiBjbGFzcz1cInRhZyB0YWctLWluZm8gdGV4dC0xMlwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJkYXNoYm9hcmQtdGVtcGxhdGUtbWFya2VyXCI+PC9zcGFuPlxuICAgICAge3sgZGFzaGJvYXJkVHlwZUxhYmVsIHwgdHJhbnNsYXRlOiB7IGRhc2hib2FyZFR5cGU6IGRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgfSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG4gIDxuZy10ZW1wbGF0ZSAjZGFzaGJvYXJkVHlwZVBvcG92ZXJSZWY+XG4gICAgPGRpdlxuICAgICAgW2lubmVySFRNTF09XCJkYXNoYm9hcmRUeXBlUG9wb3ZlciB8IHRyYW5zbGF0ZTogeyBkYXNoYm9hcmRUeXBlOiBkYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIH1cIlxuICAgID48L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgW3ByaW9yaXR5XT1cIi0xXCJcbiAgKm5nSWY9XCJkZWZhdWx0V2lkZ2V0cy5sZW5ndGggPiAwXCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdSZXNldCB3aWRnZXRzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcHgtZXZlbnQ9XCJSZXNldCBkYXNoYm9hcmRcIlxuICAgIChjbGljayk9XCJyZXN0b3JlKClcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCAod2lkZ2V0c0Rhc2hib2FyZD8uZWRpdE1vZGUkIHwgYXN5bmMpXCJcbiAgICBkYXRhLWN5PVwiY29udGV4dC1kYXNoYm9hcmQtLWJ1dHRvbi1yZXNldC1kYXNoYm9hcmRcIlxuICA+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgYzh5SWNvbj1cInJlc2V0XCJcbiAgICA+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwidmlzaWJsZS14cy1pbmxpbmUgaGlkZGVuLXNtIHZpc2libGUtbWQtaW5saW5lIHZpc2libGUtbGctaW5saW5lXCI+XG4gICAgICB7eyAnUmVzZXQgd2lkZ2V0cycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHBcbiAgc3JjPVwiL2RvY3MvY29ja3BpdC93b3JraW5nLXdpdGgtZGFzaGJvYXJkcy8jd29ya2luZy13aXRoLWRhc2hib2FyZHNcIlxuICAqbmdJZj1cInNob3dDb250ZXh0SGVscEJ1dHRvblwiXG4+PC9jOHktaGVscD5cblxuPGM4eS1kYXNoYm9hcmQtZGV0YWlsXG4gIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gIFtpc1JlcG9ydF09XCJpc1JlcG9ydFwiXG4gIFtkYXNoYm9hcmRdPVwiZGFzaGJvYXJkXCJcbiAgW21vXT1cIm1vXCJcbiAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gIFtkZXZpY2VUeXBlXT1cImNvbnRleHQ/LnR5cGVcIlxuICBbaGlkZUF2YWlsYWJpbGl0eV09XCJoaWRlQXZhaWxhYmlsaXR5XCJcbiAgKGRhc2hib2FyZFNhdmVkKT1cInJlbG9hZERhc2hib2FyZCgkZXZlbnQpXCJcbiAgKHByZXZpZXdDaGFuZ2VkKT1cImRhc2hib2FyZFByZXZpZXcoJGV2ZW50KVwiXG4+PC9jOHktZGFzaGJvYXJkLWRldGFpbD5cblxuPGM4eS13aWRnZXRzLWRhc2hib2FyZFxuICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgW2NvbnRleHREYXNoYm9hcmRdPVwiZGFzaGJvYXJkXCJcbiAgW3dpZGdldHNdPVwid2lkZ2V0c1wiXG4gIFtpc0NvcHlEaXNhYmxlZF09XCJpc0NvcHlEaXNhYmxlZFwiXG4gIFtzZXR0aW5nc109XCJ7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgY2FuRGVsZXRlOiBjYW5EZWxldGUgJiYgISFkYXNoYm9hcmQsXG4gICAgdHJhbnNsYXRlV2lkZ2V0VGl0bGU6IGRhc2hib2FyZD8udHJhbnNsYXRlV2lkZ2V0VGl0bGUgPz8gdHJhbnNsYXRlV2lkZ2V0VGl0bGUsXG4gICAgYWxsb3dGdWxsc2NyZWVuOiBtb2R1bGVDb25maWcuYWxsb3dGdWxsc2NyZWVuLFxuICAgIHRpdGxlOiBzZXRUaXRsZSA/IGRhc2hib2FyZD8ubmFtZSB8fCB0aXRsZSA6IHVuZGVmaW5lZCxcbiAgICB3aWRnZXRNYXJnaW46IGRhc2hib2FyZD8ud2lkZ2V0TWFyZ2luLFxuICAgIGNhbkNvcHk6IGNhbkNvcHkgJiYgISFkYXNoYm9hcmQsXG4gICAgZGVmYXVsdFdpZHRoOiBkYXNoYm9hcmQ/LmNvbHVtbnMgPj0gMjQgPyA4IDogNCxcbiAgICBjb2x1bW5zOiBkYXNoYm9hcmQ/LmNvbHVtbnMgfHwgMTJcbiAgfVwiXG4gIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJTZXR0aW5nc1wiXG4gIFtlZGl0TW9kZUJ1dHRvbnNdPVwie1xuICAgIHVuZG9CdXR0b25EaXNhYmxlZDogZWRpdE1vZGVTZXJ2aWNlLnVuZG9CdXR0b25EaXNhYmxlZCxcbiAgICBjaGFuZ2VUb1VuZG9OYW1lOiBlZGl0TW9kZVNlcnZpY2UuY2hhbmdlVG9VbmRvTmFtZSxcbiAgICByZWRvQnV0dG9uRGlzYWJsZWQ6ICFlZGl0TW9kZVNlcnZpY2UucmVkb1N0YWNrTGFzdEl0ZW0sXG4gICAgY2hhbmdlVG9SZWRvTmFtZTogZWRpdE1vZGVTZXJ2aWNlLnJlZG9TdGFja0xhc3RJdGVtPy5uYW1lXG4gIH1cIlxuICAob25DaGFuZ2VEYXNoYm9hcmQpPVwicG9zaXRpb25PcldpZGdldERpbWVuc2lvbkNoYW5nZSgkZXZlbnQpXCJcbiAgKG9uQWRkV2lkZ2V0KT1cImFkZFdpZGdldCgpXCJcbiAgKG9uRWRpdFdpZGdldCk9XCJlZGl0V2lkZ2V0KCRldmVudClcIlxuICAob25EZWxldGVXaWRnZXQpPVwiZGVsZXRlV2lkZ2V0KCRldmVudClcIlxuICAob25TYXZlRGFzaGJvYXJkKT1cInNhdmVXaWRnZXRzVG9EYXNoYm9hcmQoKVwiXG4gIChvbkNhbmNlbERhc2hib2FyZCk9XCJjYW5jZWxFZGl0TW9kZSgpXCJcbiAgKHJldmVydENoYW5nZSk9XCJyZXZlcnRDaGFuZ2UoJGV2ZW50KVwiXG4gIChvbkNoYW5nZVN0YXJ0KT1cImFkZERhc2hib2FyZENsYXNzVG9Cb2R5KClcIlxuICAob25DaGFuZ2VFbmQpPVwicmVtb3ZlRGFzaGJvYXJkQ2xhc3NGcm9tQm9keSgpXCJcbiAgKG9uRWRpdERhc2hib2FyZCk9XCJkYXNoYm9hcmREZXRhaWxzLnNob3codHJ1ZSlcIlxuICAob25Db3B5RGFzaGJvYXJkKT1cImNvcHlEYXNoYm9hcmQoKVwiXG4gIChvbkRlbGV0ZURhc2hib2FyZCk9XCJkZWxldGVEYXNoYm9hcmQoKVwiXG4+PC9jOHktd2lkZ2V0cy1kYXNoYm9hcmQ+XG4iXX0=
|
|
@@ -479,7 +479,11 @@ export class ForOfDirective {
|
|
|
479
479
|
if (this.isDisplayed(idToRemove)) {
|
|
480
480
|
this.updateCount(-1);
|
|
481
481
|
}
|
|
482
|
+
const index = this.cachedData.findIndex(op => op.id === idToRemove);
|
|
483
|
+
this.cachedData.splice(index, 1);
|
|
482
484
|
this.forMatchingEmbeddedViewRef((item) => item && coerceNumberProperty(item.id, NaN) === idToRemove, (view) => view.destroy());
|
|
485
|
+
this.c8yForChange.emit([...this.cachedData]);
|
|
486
|
+
this.cdRef.detectChanges();
|
|
483
487
|
}
|
|
484
488
|
updateCount(countChange) {
|
|
485
489
|
this.count += countChange;
|
|
@@ -568,4 +572,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
568
572
|
}], c8yForLoadMoreComponent: [{
|
|
569
573
|
type: Output
|
|
570
574
|
}] } });
|
|
571
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yT2YuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZm9yT2YuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxnQkFBZ0IsRUFFakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUNMLGFBQWEsRUFDYixZQUFZLEVBRVosRUFBRSxFQUNGLElBQUksRUFDSixPQUFPLEVBR1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0scURBQXFELENBQUM7O0FBRXRHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEZHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUF3QnpCLElBQVksdUJBQXVCO1FBQ2pDLE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FDL0YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFZLFdBQVc7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUks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QUFDOzhHQXJpQlUsY0FBYztrR0FBZCxjQUFjOzsyRkFBZCxjQUFjO2tCQUgxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO2lCQUNyQjsrSUE0Q0ssUUFBUTtzQkFEWCxLQUFLO2dCQTBCRixjQUFjO3NCQURqQixLQUFLO2dCQVNGLFVBQVU7c0JBRGIsS0FBSztnQkFXRixjQUFjO3NCQURqQixLQUFLO2dCQVlGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFTRixxQkFBcUI7c0JBRHhCLEtBQUs7Z0JBU0YsbUJBQW1CO3NCQUR0QixLQUFLO2dCQVNGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFTRixjQUFjO3NCQURqQixLQUFLO2dCQVNGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkFVRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBU04seUJBQXlCO3NCQUR4QixLQUFLO2dCQU9OLDhCQUE4QjtzQkFEN0IsS0FBSztnQkFTTiwyQkFBMkI7c0JBRDFCLEtBQUs7Z0JBT04sa0NBQWtDO3NCQURqQyxLQUFLO2dCQW1CRSxXQUFXO3NCQURsQixNQUFNO2dCQW1CQyxZQUFZO3NCQURuQixNQUFNO2dCQU9DLHVCQUF1QjtzQkFEOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld1JlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElJZGVudGlmaWVkLCBJUmVzdWx0TGlzdCwgUGFnaW5nIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgYXNzaWduLCBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgY29tYmluZUxhdGVzdCxcbiAgaXNPYnNlcnZhYmxlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgcGlwZSxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBVbmFyeUZ1bmN0aW9uXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUmVhbHRpbWVTZXJ2aWNlIH0gZnJvbSAnLi4vcmVhbHRpbWUvcmVhbHRpbWUuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JPZkZpbHRlclBpcGUsIEZvck9mUmVhbHRpbWVPcHRpb25zIH0gZnJvbSAnLi9mb3JPZi5tb2RlbCc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbXBvbmVudCB9IGZyb20gJy4vbG9hZC1tb3JlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkTW9yZU1vZGUgfSBmcm9tICcuL2xvYWQtbW9yZS5tb2RlbCc7XG5pbXBvcnQgeyBWaXJ0dWFsU2Nyb2xsZXJXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi92aXJ0dWFsLXNjcm9sbC92aXJ0dWFsLXNjcm9sbGVyLXdyYXBwZXIuY29tcG9uZW50JztcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0byBpdGVyYXRlIG92ZXIgSVJlc3VsdExpc3Q8VD4gZGF0YSBmcm9tIEBjOHkvY2xpZW50LlxuICogRGVwZW5kaW5nIG9uIHRoZSBbYzh5Rm9yTG9hZE1vcmVdIGEgbG9hZCBtb3JlIGJ1dHRvbiBpczpcbiAqICAtIGF1dG86IFRyaWVzIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBtb3JlIGRhdGEgKGRlZmF1bHQgbWF4aW11bSAxMCBpdGVyYXRpb25zOyBjYW4gYmVcbiAqICAgICAgICAgIGNoYW5nZSB3aXRoIG1heEl0ZXJhdGlvbnMgc2V0dGluZ3MpLlxuICogIC0gc2hvdzogU2hvd3MgYSBsb2FkIG1vcmUgYnV0dG9uIGZvciB0aGUgdXNlciB0byBkZWNpZGVcbiAqICAtIG5vbmU6IERvZXNuJ3QgcGVyZm9ybSBhbnkgbG9hZCBtb3JlIGFjdGlvbi5cbiAqICAtIGhpZGRlbjogTG9hZHMgbW9yZSBkYXRhIGF1dG9tYXRpY2FsbHkgYnV0IHdpdGggbm8gdmlzaWJsZSBidXR0b24gZm9yIHRoZSB1c2VyLlxuICpcbiAqIEFkZGl0aW9uYWwsIGFueSByeGpzIG9wZXJhdG9yIHBpcGUgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIFtjOHlGb3JQaXBlXSBpbnB1dCwgZS5nLiB0b1xuICogZmlsdGVyIHRoZSBkYXRhIGRpc3BsYXllZCBjdXJyZW50bHkgYXMgd2VsbCBhcyB0aGUgZGF0YSBsb2FkZWQgYnkgc3Vic2VxdWVudCByZXF1ZXN0cy5cbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2ICpjOHlGb3I9XCJsZXQgZGV2aWNlIG9mIGRldmljZXM7IGxvYWRNb3JlOiAnYXV0byc7IGxldCBpID0gaW5kZXg7IHBpcGU6IGZpbHRlclBpcGU7XCI+XG4gKiAge3sgaSArIDEgfX0uIHt7ZGV2aWNlLm5hbWV9fVxuICogPC9kaXY+XG4gKiBgYGBcbiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgbGlzdCBhbGwgZW50aXRpZXMgdGhhdCBhcmUgYXBwbGllZCB0byBgZGV2aWNlc2A6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmRldmljZXMgPSB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdCh7IHBhZ2VTaXplOiAxMCwgZnJhZ21lbnRUeXBlOiAnYzh5X0lzRGV2aWNlJyB9KVxuICogYGBgXG4gKiBJdCB3aWxsIGRpc3BsYXkgdGhlIGZpcnN0IDEwIGl0ZW1zLCBpZiB0aGVyZSBpcyBtb3JlIHNwYWNlIGxlZnQgb24gdGhlIHNjcmVlbiwgYW5kIHRoZXJlIGFyZSBtb3JlXG4gKiB0aGFuIDEwIGRldmljZXMsIGl0IHdpbGwgYXV0b21hdGljYWxseSBsb2FkIHVwIHRvIDEwIHBhZ2VzIG1vcmUuIElmIGl0IHN0aWxsIGNhbid0IGZpdCB0aGUgc2NyZWVuXG4gKiBpdCB3aWxsIHN0b3AgYW5kIHN3aXRjaCB0byBgc2hvd2AgbW9kZS5cbiAqXG4gKiBBIHBpcGUgY2FuIGJlIGFwcGxpZWQgZS5nLiBmb3IgZmlsdGVyaW5nIG9yIGdyb3VwaW5nLiBUaGlzIHBpcGUgaXMgYXR0YWNoZWQgdG8gZXZlcnkgZm9sbG93IHVwXG4gKiByZXF1ZXN0IGRvbmUgYnkgdGhlIGxvYWQgbW9yZSBjb21wb25lbnQ6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmZpbHRlclBpcGUgPSBwaXBlKFxuICogICAgbWFwKChkYXRhOiBbXSkgPT4ge1xuICogICAgIHJldHVybiBkYXRhLmZpbHRlcihcbiAqICAgICAgKG1vOiBhbnkpID0+IG1vLm5hbWUgJiYgbW8ubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodmFsdWUudG9Mb3dlckNhc2UoKSkgPiAtMVxuICogICAgKTtcbiAqICB9KVxuICogKTtcbiAqIGBgYFxuICogVGhlIHBpcGUgbXVzdCBiZSBhbiByeGpzIHBpcGUgYW5kIGNhbiB0YWtlIGFueSBvcGVyYXRvci5cbiAqXG4gKiBFeGFtcGxlIHdpdGggcmVhbHRpbWUgc3VwcG9ydCBhbmQgaXRlbXMgY291bnQgb3V0cHV0IChlLmcuIGZvciBoYW5kbGluZyBlbXB0eSBzdGF0ZSBhbmQgaGVhZGVyKTpcbiAqXG4gKiBgYGBodG1sXG4gKiA8Yzh5LWxpc3QtZ3JvdXA+XG4gKiAgIDxkaXYgY2xhc3M9XCJjOHktZW1wdHktc3RhdGVcIiAqbmdJZj1cImNvdW50ID09PSAwXCI+XG4gKiAgICAgKC4uLilcbiAqICAgPC9kaXY+XG4gKlxuICogICA8ZGl2IGNsYXNzPVwicGFnZS1zdGlja3ktaGVhZGVyIGhpZGRlbi14cyBjOHktbGlzdF9faXRlbSBjOHktbGlzdC0tdGltZWxpbmVcIiAqbmdJZj1cImNvdW50ID4gMFwiPlxuICogICAgICguLi4pXG4gKiAgIDwvZGl2PlxuICpcbiAqICAgPG5nLXRlbXBsYXRlXG4gKiAgICAgYzh5Rm9yXG4gKiAgICAgbGV0LW9wZXJhdGlvblxuICogICAgIFtjOHlGb3JPZl09XCJpdGVtcyRcIlxuICogICAgIFtjOHlGb3JQaXBlXT1cImZpbHRlclBpcGVcIlxuICogICAgIFtjOHlGb3JSZWFsdGltZV09XCJyZWFsdGltZVwiXG4gKiAgICAgW2M4eUZvclJlYWx0aW1lT3B0aW9uc109XCJyZWFsdGltZU9wdGlvbnNcIlxuICogICAgIChjOHlGb3JDb3VudCk9XCJjb3VudCA9ICRldmVudFwiXG4gKiAgID5cbiAqICAgICA8Yzh5LWxpLXRpbWVsaW5lPlxuICogICAgICAgKC4uLilcbiAqICAgICA8L2M4eS1saS10aW1lbGluZT5cbiAqICAgPC9uZy10ZW1wbGF0ZT5cbiAqIDwvYzh5LWxpc3QtZ3JvdXA+XG4gKiBgYGBcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHtcbiAqICAgKC4uLilcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgRXhhbXBsZUNvbXBvbmVudCB7XG4gKiAgIEBJbnB1dCgpIGRldmljZUlkOiBJSWRlbnRpZmllZDtcbiAqICAgaXRlbXMkID0gdGhpcy5vcGVyYXRpb25TZXJ2aWNlLmxpc3Qoe1xuICogICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxuICogICAgIGZyYWdtZW50VHlwZTogJ2M4eV9NeU9wZXJhdGlvbicsXG4gKiAgICAgZGF0ZUZyb206IG5ldyBEYXRlKDApLnRvSVNPU3RyaW5nKCksXG4gKiAgICAgZGF0ZVRvOiBuZXcgRGF0ZShEYXRlLm5vdygpKS50b0lTT1N0cmluZygpLFxuICogICAgIHJldmVydDogdHJ1ZSxcbiAqICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICogICB9KTtcbiAqICAgZmlsdGVyUGlwZSA9IHBpcGUobWFwKChvcHM6IElPcGVyYXRpb25bXSkgPT4gb3BzLmZpbHRlcihvcCA9PiBvcC5jOHlfTXlPcGVyYXRpb24pKSk7XG4gKiAgIHJlYWx0aW1lT3B0aW9uczogRm9yT2ZSZWFsdGltZU9wdGlvbnMgPSB7XG4gKiAgICAgZW50aXR5T3JJZDogdGhpcy5kZXZpY2VJZCxcbiAqICAgICByZW1vdmVPblVwZGF0ZTogdHJ1ZSxcbiAqICAgICBpbnNlcnRPblVwZGF0ZTogdHJ1ZVxuICogICB9IGFzIEZvck9mUmVhbHRpbWVPcHRpb25zO1xuICogICBjb3VudDogbnVtYmVyO1xuICpcbiAqICAgY29uc3RydWN0b3IoXG4gKiAgICAgcHJpdmF0ZSBvcGVyYXRpb25TZXJ2aWNlOiBPcGVyYXRpb25TZXJ2aWNlLFxuICogICAgIHB1YmxpYyByZWFsdGltZTogT3BlcmF0aW9uUmVhbHRpbWVTZXJ2aWNlXG4gKiAgICkge31cbiAqIH1cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYzh5Rm9yXSdcbn0pXG5leHBvcnQgY2xhc3MgRm9yT2ZEaXJlY3RpdmUge1xuICBwcml2YXRlIGNhY2hlZERhdGE6IElJZGVudGlmaWVkW10gPSBbXTtcbiAgcHJpdmF0ZSBwYWdpbmc6IFBhZ2luZzxJSWRlbnRpZmllZD47XG4gIHByaXZhdGUgbG9hZE1vcmVNb2RlOiBMb2FkTW9yZU1vZGUgPSAnYXV0byc7XG4gIHByaXZhdGUgZGF0YVBpcGU6IEZvck9mRmlsdGVyUGlwZSA9IHBpcGUodGFwKCkpO1xuICBwcml2YXRlIGl0ZW1EYXRhUGlwZTogVW5hcnlGdW5jdGlvbjxPYnNlcnZhYmxlPElJZGVudGlmaWVkPiwgT2JzZXJ2YWJsZTxJSWRlbnRpZmllZD4+ID0gcGlwZShcbiAgICBtYXAoaXRlbSA9PiBbaXRlbV0pLFxuICAgIHNyYyA9PiB0aGlzLmRhdGFQaXBlKHNyYyksXG4gICAgbWFwKChbaXRlbV0pID0+IGl0ZW0pXG4gICk7XG4gIHByaXZhdGUgcGFnaW5nU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgb2JzJDogT2JzZXJ2YWJsZTxJSWRlbnRpZmllZFtdPjtcbiAgcHJpdmF0ZSBsb2FkTW9yZTogTG9hZE1vcmVDb21wb25lbnQ7XG4gIHByaXZhdGUgbG9hZGluZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIG1heEl0ZXJhdGlvbnMgPSAxMDtcbiAgcHJpdmF0ZSBub3RGb3VuZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIGxvYWROZXh0TGFiZWw6IHN0cmluZztcbiAgcHJpdmF0ZSBsb2FkaW5nTGFiZWw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFsdGltZTogUmVhbHRpbWVTZXJ2aWNlPElJZGVudGlmaWVkPjtcbiAgcHJpdmF0ZSByZWFsdGltZU9wdGlvbnM6IEZvck9mUmVhbHRpbWVPcHRpb25zID0ge307XG4gIHByaXZhdGUgY29tcGFyYXRvcjogKGl0ZW1BOiBJSWRlbnRpZmllZCwgaXRlbUI6IElJZGVudGlmaWVkKSA9PiBudW1iZXI7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSB2aXJ0dWFsU2Nyb2xsSW5zdGFuY2U6IFZpcnR1YWxTY3JvbGxlcldyYXBwZXJDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBnZXQgc2hvdWxkVXNlTG9hZE1vcmVCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9hZE1vcmVNb2RlID09PSAnYXV0bycgfHwgdGhpcy5sb2FkTW9yZU1vZGUgPT09ICdzaG93JyB8fCB0aGlzLmxvYWRNb3JlTW9kZSA9PT0gJ2hpZGRlbidcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFzTW9yZURhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZE1vcmUgJiYgdGhpcy5sb2FkTW9yZS5oYXNNb3JlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlZERhdGEubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHNldHRlci4gTXVzdCBiZSBhIHJlc3BvbnNlIGZyb20gQGM4eS9kYXRhIG9yIGFuIG9ic2VydmFibGUuXG4gICAqIFlvdSBjYW4gcGFzcyBhbiBvYnNlcnZhYmxlIHdpdGggbnVsbCB0byBleHBsaWNpdGx5IGNsZWFyIHRoZSBsaXN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvck9mKGZldGNoRGF0YTogSVJlc3VsdExpc3Q8SUlkZW50aWZpZWQ+IHwgT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJSWRlbnRpZmllZD4+KSB7XG4gICAgaWYgKGZldGNoRGF0YSkge1xuICAgICAgdGhpcy5vYnMkID0gKGlzT2JzZXJ2YWJsZShmZXRjaERhdGEpID8gZmV0Y2hEYXRhIDogb2YoZmV0Y2hEYXRhKSkucGlwZShcbiAgICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5wYWdpbmcgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IHBhZ2luZywgZGF0YSB9ID0gcmVzdWx0O1xuICAgICAgICAgIHRoaXMucGFnaW5nID0gcGFnaW5nO1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1vZGUgc2V0dGVyOlxuICAgKiAgLSBhdXRvOiBUcmllcyB0byBhdXRvbWF0aWNhbGx5IGxvYWQgbW9yZSBkYXRhIChkZWZhdWx0IG1heGltdW0gMTAgaXRlcmF0aW9uczsgY2FuIGJlXG4gICAqICAgICAgICAgIGNoYW5nZSB3aXRoIG1heEl0ZXJhdGlvbnMgc2V0dGluZ3MpLlxuICAgKiAgLSBzaG93OiBTaG93cyBhIGxvYWQgbW9yZSBidXR0b24gZm9yIHRoZSB1c2VyIHRvIGRlY2lkZVxuICAgKiAgLSBub25lOiBEb2Vzbid0IHBlcmZvcm0gYW55IGxvYWQgbW9yZSBhY3Rpb24uXG4gICAqICAtIGhpZGRlbjogTG9hZHMgbW9yZSBkYXRhIGF1dG9tYXRpY2FsbHkgYnV0IHdpdGggbm8gdmlzaWJsZSBidXR0b24gZm9yIHRoZSB1c2VyLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvckxvYWRNb3JlKHR5cGU6IEZvck9mRGlyZWN0aXZlWydsb2FkTW9yZU1vZGUnXSkge1xuICAgIHRoaXMubG9hZE1vcmVNb2RlID0gdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGlwZSBzZXR0ZXIgdG8gYXR0YWNoIGFueSByeGpzIHBpcGUgdG8gdGhlIGN1cnJlbnQgYW5kIG1vcmUgbG9hZGVkIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yUGlwZShkYXRhUGlwZTogRm9yT2ZEaXJlY3RpdmVbJ2RhdGFQaXBlJ10pIHtcbiAgICBpZiAoZGF0YVBpcGUpIHtcbiAgICAgIHRoaXMuZGF0YVBpcGUgPSBkYXRhUGlwZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSB0ZW1wbGF0ZSB0byB1c2UgaWYgbm8gZGF0YSBpcyBmb3VuZCBhdCBhbGwgKGUuZy4gaWYgeW91IGFwcGx5IGEgZmlsdGVyIHBpcGUpLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvck5vdEZvdW5kKG5vdEZvdW5kVGVtcGxhdGU6IEZvck9mRGlyZWN0aXZlWydub3RGb3VuZFRlbXBsYXRlJ10pIHtcbiAgICB0aGlzLm5vdEZvdW5kVGVtcGxhdGUgPSBub3RGb3VuZFRlbXBsYXRlO1xuICAgIGlmICh0aGlzLmxvYWRNb3JlKSB7XG4gICAgICB0aGlzLmxvYWRNb3JlLm5vTW9yZURhdGFIaW50ID0gbm90Rm91bmRUZW1wbGF0ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVycyBvZiBpdGVyYXRpb25zIHRvIGNhbGwgZGF0YSBmcm9tIHRoZSBhcGkuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yTWF4SXRlcmF0aW9ucyhtYXhJdGVyYXRpb25zOiBudW1iZXIpIHtcbiAgICB0aGlzLm1heEl0ZXJhdGlvbnMgPSBtYXhJdGVyYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY3VzdG9tIGxvYWRpbmcgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvckxvYWRpbmdUZW1wbGF0ZShsb2FkaW5nVGVtcGxhdGU6IEZvck9mRGlyZWN0aXZlWydsb2FkaW5nVGVtcGxhdGUnXSkge1xuICAgIHRoaXMubG9hZGluZ1RlbXBsYXRlID0gbG9hZGluZ1RlbXBsYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbmV4dCB0ZXh0IGxhYmVsLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvckxvYWROZXh0TGFiZWwobG9hZE5leHRMYWJlbDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkTmV4dExhYmVsID0gbG9hZE5leHRMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkaW5nIHRleHQgbGFiZWwuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yTG9hZGluZ0xhYmVsKGxvYWRpbmdMYWJlbDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkaW5nTGFiZWwgPSBsb2FkaW5nTGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogQSBSZWFsdGltZVNlcnZpY2UgaW5zdGFuY2UuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yUmVhbHRpbWUoc291cmNlOiBGb3JPZkRpcmVjdGl2ZVsncmVhbHRpbWUnXSkge1xuICAgIHRoaXMucmVhbHRpbWUgPSBzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogUmVhbHRpbWUgb3B0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JSZWFsdGltZU9wdGlvbnMocmVhbHRpbWVPcHRpb25zOiBGb3JPZkRpcmVjdGl2ZVsncmVhbHRpbWVPcHRpb25zJ10pIHtcbiAgICB0aGlzLnJlYWx0aW1lT3B0aW9ucyA9IHJlYWx0aW1lT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGNvbXBhcmF0b3IgZnVuY3Rpb24gZm9yIGNvbXBhcmluZyBsaXN0IGl0ZW1zLiBVc2VkIHRvIGRldGVybWluZVxuICAgKiB0aGUgcG9zaXRpb24gYXQgd2hpY2ggYSBuZXcgZWxlbWVudCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGxpc3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yQ29tcGFyYXRvcihjb21wYXJhdG9yOiBGb3JPZkRpcmVjdGl2ZVsnY29tcGFyYXRvciddKSB7XG4gICAgdGhpcy5jb21wYXJhdG9yID0gY29tcGFyYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgdmlydHVhbCBzY3JvbGwgcmVuZGVyaW5nIG1ldGhvZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGM4eUZvckVuYWJsZVZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAvKipcbiAgICogUHJvdmlkZXMgZml4ZWQgaXRlbSBzaXplIGZvciB2aXJ0dWFsIHNjcm9sbCB3aW5kb3cgc3RyYXRlZ3kuXG4gICAqL1xuICBASW5wdXQoKVxuICBjOHlGb3JWaXJ0dWFsU2Nyb2xsRWxlbWVudFNpemU7XG5cbiAgLyoqXG4gICAqIFNldHMgbW9kZSBvZiB2aXJ0dWFsIHNjcm9sbGVyIGluc3RhbmNlLlxuICAgKiB3aW5kb3cgaXMgdXNlZCBmb3IgY2FzZSB3aGVuIHdob2xlIHZpZXdwb3J0IGlzIHNjcm9sbGVkLlxuICAgKiBmaXhlZCBjYW4gYmUgdXNlZCBvbiBpbm5lci1zY3JvbGwgY29udGFpbmVycy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGM4eUZvclZpcnR1YWxTY3JvbGxTdHJhdGVneTogJ2ZpeGVkJyB8ICd3aW5kb3cnID0gJ3dpbmRvdyc7XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNlZCBmaXhlZCBzdHJhdGVneSwgdGhlcmUgbmVlZHMgdG8gYmUgZml4ZWQgaGVpZ2h0IHNldCBvbiBzY3JvbGxpbmcgY29udGFpbmVyLlxuICAgKi9cbiAgQElucHV0KClcbiAgYzh5Rm9yVmlydHVhbFNjcm9sbENvbnRhaW5lckhlaWdodDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGl0ZW1zIGN1cnJlbnRseSBsb2FkZWQgaW4gdGhlIGxpc3QuXG4gICAqXG4gICAqIE5vdGU6IFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgZm9yT2YgaXNuJ3QgdXNlZCB3aXRoXG4gICAqIHRoZSBzdWdhcmVkIGFzdGVyaXNrICgqKSBzeW50YXguIEluc3RlYWQgeW91IG5lZWQgdG8gdXNlIGFuIG5nLXRlbXBsYXRlOlxuICAgKiBgYGBodG1sXG4gICAqIDxuZy10ZW1wbGF0ZVxuICAgKiAgYzh5Rm9yXG4gICAqICBsZXQtb3BlcmF0aW9uXG4gICAqICBbYzh5Rm9yT2ZdPVwib3BlcmF0aW9ucyRcIlxuICAgKiAgKGM4eUZvckNvdW50KT1cIm9wZXJhdGlvbkNvdW50ID0gJGV2ZW50XCJcbiAgICogPlxuICAgKiA8L25nLXRlbXBsYXRlPlxuICAgKiBgYGBcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwcml2YXRlIGM4eUZvckNvdW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBpdGVtcyBjaGFuZ2UgZXZlbnQgZW1pdHRpbmcgdGhlIG5ld2x5IGxvYWRlZCBpdGVtcy5cbiAgICpcbiAgICogTm90ZTogVGhpcyBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSBmb3JPZiBpc24ndCB1c2VkIHdpdGhcbiAgICogdGhlIHN1Z2FyZWQgYXN0ZXJpc2sgKCopIHN5bnRheC4gSW5zdGVhZCB5b3UgbmVlZCB0byB1c2UgYW4gbmctdGVtcGxhdGU6XG4gICAqIGBgYGh0bWxcbiAgICogPG5nLXRlbXBsYXRlXG4gICAqICBjOHlGb3JcbiAgICogIGxldC1vcGVyYXRpb25cbiAgICogIFtjOHlGb3JPZl09XCJvcGVyYXRpb25zJFwiXG4gICAqICAoYzh5Rm9yQ2hhbmdlKT1cIm9uQ2hhbmdlRm9yT2YoJGV2ZW50KVwiXG4gICAqID5cbiAgICogPC9uZy10ZW1wbGF0ZT5cbiAgICogYGBgXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHJpdmF0ZSBjOHlGb3JDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd25bXT4oKTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGBMb2FkTW9yZUNvbXBvbmVudGAuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHJpdmF0ZSBjOHlGb3JMb2FkTW9yZUNvbXBvbmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8TG9hZE1vcmVDb21wb25lbnQ+KCk7XG5cbiAgcHJpdmF0ZSBjb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cGw6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHJpdmF0ZSB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlUmVhbHRpbWUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vYnMkICYmIChjaGFuZ2VzLmM4eUZvclBpcGUgfHwgY2hhbmdlcy5jOHlGb3JPZikpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVQYWdpbmcoKTtcblxuICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlLmZpbHRlclBpcGUgPSB0aGlzLmRhdGFQaXBlO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgcmUtcmVuZGVyaW5nICBvbiBmaWx0ZXJpbmcgaWYgYWxsIGRhdGEgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgIC8vIGZyb20gdGhlIGJhY2tlbmRcbiAgICAgIGNvbnN0IHJlUmVuZGVyID0gIXRoaXMuaGFzTW9yZURhdGEgJiYgISFjaGFuZ2VzLmM4eUZvclBpcGUgJiYgIWNoYW5nZXMuYzh5Rm9yT2Y7XG5cbiAgICAgIGlmIChyZVJlbmRlcikge1xuICAgICAgICB0aGlzLm9icyQgPSBvZih0aGlzLmNhY2hlZERhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5wYWdpbmdTdWIgPSB0aGlzLm9icyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZVJlbmRlcikge1xuICAgICAgICAgICAgICB0aGlzLmNhY2hlZERhdGEgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnBpcGUoc3JjID0+IHRoaXMuZGF0YVBpcGUoc3JjKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogW10pID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvdW50KGRhdGEubGVuZ3RoKTtcbiAgICAgICAgICB0aGlzLmM4eUZvckNoYW5nZS5lbWl0KGRhdGEpO1xuICAgICAgICAgIHRoaXMucmVuZGVyKGRhdGEsIHJlUmVuZGVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZVBhZ2luZygpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZSgpIHtcbiAgICBpZiAodGhpcy5yZWFsdGltZSkge1xuICAgICAgdGhpcy5oYW5kbGVSZWFsdGltZUNyZWF0ZSgpO1xuICAgICAgdGhpcy5oYW5kbGVSZWFsdGltZVVwZGF0ZSgpO1xuICAgICAgdGhpcy5oYW5kbGVSZWFsdGltZURlbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBjcmVhdGUgbm90aWZpY2F0aW9uOlxuICAgKiAtIGlmIGl0ZW0gcGFzc2VzIGRhdGEgcGlwZSwgdGhlbiBpbnNlcnQgaXQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlYWx0aW1lQ3JlYXRlKCkge1xuICAgIGNvbnN0IHsgZW50aXR5T3JJZCB9ID0gdGhpcy5yZWFsdGltZU9wdGlvbnM7XG4gICAgdGhpcy5yZWFsdGltZVxuICAgICAgLm9uQ3JlYXRlJChlbnRpdHlPcklkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGl0ZW0kID0+IHRoaXMuaXRlbURhdGFQaXBlKGl0ZW0kKSxcbiAgICAgICAgZmlsdGVyKGl0ZW0gPT4gISFpdGVtKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShpdGVtID0+IHRoaXMuaW5zZXJ0KGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiB1cGRhdGUgbm90aWZpY2F0aW9uOlxuICAgKiAtIGlmIGl0ZW0gaXMgZGlzcGxheWVkIGFuZCBwYXNzZXMgZGF0YSBwaXBlLCB0aGVuIHVwZGF0ZSBpdCxcbiAgICogLSBpZiBpdGVtIGlzIGRpc3BsYXllZCBhbmQgZG9lc24ndCBwYXNzIGRhdGEgcGlwZSwgdGhlbiByZW1vdmUgaXQgKGlmIGByZW1vdmVPblVwZGF0ZWAgaXMgdHJ1ZSksXG4gICAqIC0gaWYgaXRlbSBpcyBub3QgZGlzcGxheWVkIGFuZCBwYXNzZXMgZGF0YSBwaXBlLCB0aGVuIGluc2VydCBpdCAoaWYgYGluc2VydE9uVXBkYXRlYCBpcyB0cnVlKSxcbiAgICogLSBpZiBpdGVtIGlzIG5vdCBkaXNwbGF5ZWQgYW5kIGRvZXNuJ3QgcGFzcyBkYXRhIHBpcGUsIHRoZW4gaWdub3JlIGl0LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZVVwZGF0ZSgpIHtcbiAgICBjb25zdCB7IGVudGl0eU9ySWQgfSA9IHRoaXMucmVhbHRpbWVPcHRpb25zO1xuICAgIHRoaXMucmVhbHRpbWVcbiAgICAgIC5vblVwZGF0ZSQoZW50aXR5T3JJZClcbiAgICAgIC5waXBlKFxuICAgICAgICBpdGVtJCA9PlxuICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgaXRlbSQsXG4gICAgICAgICAgICBpdGVtJC5waXBlKFxuICAgICAgICAgICAgICBzcmMgPT4gdGhpcy5pdGVtRGF0YVBpcGUoc3JjKSxcbiAgICAgICAgICAgICAgbWFwKGl0ZW0gPT4gaXRlbSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbaXRlbSwgcGFzc2VzRGF0YVBpcGVdKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaW5zZXJ0T25VcGRhdGUsIHJlbW92ZU9uVXBkYXRlIH0gPSB0aGlzLnJlYWx0aW1lT3B0aW9ucztcbiAgICAgICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZChjb2VyY2VOdW1iZXJQcm9wZXJ0eShpdGVtLmlkKSk7XG4gICAgICAgIGlmIChkaXNwbGF5ZWQpIHtcbiAgICAgICAgICBpZiAocGFzc2VzRGF0YVBpcGUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKGl0ZW0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVtb3ZlT25VcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKGNvZXJjZU51bWJlclByb3BlcnR5KGl0ZW0uaWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFzc2VzRGF0YVBpcGUgJiYgaW5zZXJ0T25VcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmluc2VydChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT24gZGVsZXRlIG5vdGlmaWNhdGlvbjpcbiAgICogLSByZW1vdmUgaXRlbSBmcm9tIHRoZSBsaXN0IChpZiBub3QgdGhlcmUsIGl0IHdpbGwgYmUganVzdCBpZ25vcmVkKS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlUmVhbHRpbWVEZWxldGUoKSB7XG4gICAgY29uc3QgeyBlbnRpdHlPcklkIH0gPSB0aGlzLnJlYWx0aW1lT3B0aW9ucztcbiAgICB0aGlzLnJlYWx0aW1lXG4gICAgICAub25EZWxldGUkKGVudGl0eU9ySWQpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgLnN1YnNjcmliZShpZCA9PiB0aGlzLnJlbW92ZShjb2VyY2VOdW1iZXJQcm9wZXJ0eShpZCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyKGRhdGEsIHJlUmVuZGVyID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jOHlGb3JFbmFibGVWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlID0gdGhpcy5jcmVhdGVWaXJ0dWFsU2Nyb2xsV3JhcHBlckNvbXBvbmVudCgpO1xuICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VMb2FkTW9yZUJ1dHRvbikge1xuICAgICAgICAgIHRoaXMubG9hZE1vcmUgPSB0aGlzLmNyZWF0ZUxvYWRNb3JlQnV0dG9uQ29tcG9uZW50KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFZpcnR1YWxTY3JvbGxDb250ZW50cyhkYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZjci5jbGVhcigpO1xuXG4gICAgZGF0YS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgJGltcGxpY2l0OiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aCxcbiAgICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRGF0YSxcbiAgICAgICAgbG9hZE1vcmVDb21wb25lbnQ6IHRoaXMubG9hZE1vcmVcbiAgICAgIH07XG4gICAgICB0aGlzLnZjci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50cGwsIGNvbnRleHQpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkVXNlTG9hZE1vcmVCdXR0b24pIHtcbiAgICAgIHRoaXMubG9hZE1vcmUgPSB0aGlzLmNyZWF0ZUxvYWRNb3JlQnV0dG9uQ29tcG9uZW50KHJlUmVuZGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZChkYXRhKSB7XG4gICAgaWYgKHRoaXMuYzh5Rm9yRW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgdGhpcy5hcHBlbmRWaXJ0dWFsU2Nyb2xsQ29udGVudChkYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2hvdWxkVXNlTG9hZE1vcmVCdXR0b24gPyB0aGlzLnZjci5sZW5ndGggLSAxIDogdGhpcy52Y3IubGVuZ3RoO1xuICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgJGltcGxpY2l0OiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aCxcbiAgICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRGF0YSxcbiAgICAgICAgbG9hZE1vcmVDb21wb25lbnQ6IHRoaXMubG9hZE1vcmVcbiAgICAgIH07XG4gICAgICB0aGlzLnZjci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50cGwsIGNvbnRleHQsIGluZGV4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE1vcmVEYXRhKGRhdGEpIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvdW50KGRhdGEubGVuZ3RoKTtcbiAgICAgIHRoaXMuYzh5Rm9yQ2hhbmdlLmVtaXQoZGF0YSk7XG4gICAgICB0aGlzLmFwcGVuZChkYXRhKTtcbiAgICB9XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxvYWRNb3JlQnV0dG9uQ29tcG9uZW50KHJlUmVuZGVyKSB7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KExvYWRNb3JlQ29tcG9uZW50KTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBMb2FkTW9yZUNvbXBvbmVudDtcbiAgICBpbnN0YW5jZS5wYWdpbmcgPSB0aGlzLnBhZ2luZztcbiAgICBpbnN0YW5jZS51c2VJbnRlcnNlY3Rpb24gPSB0aGlzLmxvYWRNb3JlTW9kZSA9PT0gJ2F1dG8nIHx8IHRoaXMubG9hZE1vcmVNb2RlID09PSAnaGlkZGVuJztcbiAgICBpbnN0YW5jZS5oaWRkZW4gPSB0aGlzLmxvYWRNb3JlTW9kZSA9PT0gJ2hpZGRlbic7XG4gICAgaW5zdGFuY2UubWF4SXRlcmF0aW9ucyA9IHRoaXMubWF4SXRlcmF0aW9ucztcbiAgICBpbnN0YW5jZS5ub01vcmVEYXRhSGludCA9IHRoaXMubm90Rm91bmRUZW1wbGF0ZTtcbiAgICBpbnN0YW5jZS5sb2FkaW5nVGVtcGxhdGUgPSB0aGlzLmxvYWRpbmdUZW1wbGF0ZTtcbiAgICBpbnN0YW5jZS5sb2FkTmV4dExhYmVsID0gdGhpcy5sb2FkTmV4dExhYmVsO1xuICAgIGluc3RhbmNlLmxvYWRpbmdMYWJlbCA9IHRoaXMubG9hZGluZ0xhYmVsO1xuICAgIHRoaXMuYzh5Rm9yTG9hZE1vcmVDb21wb25lbnQuZW1pdChpbnN0YW5jZSk7XG4gICAgdGhpcy5wYWdpbmdTdWIgPSBpbnN0YW5jZS5vbkxvYWRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGRhdGE6IFtdKSA9PiB0aGlzLmNoZWNrRm9yRHVwbGljYXRlcyhkYXRhKSksXG4gICAgICAgIHRhcCgoZGF0YTogW10pID0+IHtcbiAgICAgICAgICB0aGlzLmNhY2hlZERhdGEgPSB0aGlzLmNhY2hlZERhdGEuY29uY2F0KGRhdGEpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUoc3JjID0+IHRoaXMuZGF0YVBpcGUoc3JjKSlcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLmxvYWRNb3JlRGF0YShkYXRhKSk7XG4gICAgaWYgKHJlUmVuZGVyKSB7XG4gICAgICBhc3NpZ24oaW5zdGFuY2UsIHRoaXMubG9hZE1vcmUpO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVZpcnR1YWxTY3JvbGxXcmFwcGVyQ29tcG9uZW50KCkge1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMudmNyLmNyZWF0ZUNvbXBvbmVudChWaXJ0dWFsU2Nyb2xsZXJXcmFwcGVyQ29tcG9uZW50KTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBWaXJ0dWFsU2Nyb2xsZXJXcmFwcGVyQ29tcG9uZW50O1xuICAgIGluc3RhbmNlLml0ZW1zID0gdGhpcy5jYWNoZWREYXRhO1xuICAgIGluc3RhbmNlLml0ZW1IZWlnaHQgPSB0aGlzLmM4eUZvclZpcnR1YWxTY3JvbGxFbGVtZW50U2l6ZTtcbiAgICBpbnN0YW5jZS50ZW1wbGF0ZSA9IHRoaXMudHBsO1xuICAgIGluc3RhbmNlLnN0cmF0ZWd5ID0gdGhpcy5jOHlGb3JWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3k7XG4gICAgaW5zdGFuY2UuY29udGFpbmVySGVpZ2h0ID0gdGhpcy5jOHlGb3JWaXJ0dWFsU2Nyb2xsQ29udGFpbmVySGVpZ2h0O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnQoaXRlbSkge1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICBpZiAodGhpcy5jb21wYXJhdG9yICYmIHRoaXMuY2FjaGVkRGF0YS5sZW5ndGgpIHtcbiAgICAgIGxldCBjb21wYXJpc2lvblJlc3VsdDogbnVtYmVyO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCB2aWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55PiA9IHRoaXMudmNyLmdldChpbmRleCkgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT47XG4gICAgICAgIGNvbnN0IGl0ZW1CID0gZ2V0KHZpZXcsICdjb250ZXh0LiRpbXBsaWNpdCcpO1xuICAgICAgICBjb21wYXJpc2lvblJlc3VsdCA9IGl0ZW0gJiYgaXRlbUIgPyB0aGlzLmNvbXBhcmF0b3IoaXRlbSwgaXRlbUIpIDogMDtcbiAgICAgICAgaWYgKGNvbXBhcmlzaW9uUmVzdWx0IDw9IDApIHtcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICB9IHdoaWxlIChjb21wYXJpc2lvblJlc3VsdCA8PSAwICYmIGluZGV4IDwgdGhpcy5jYWNoZWREYXRhLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgLy8gRG8gbm90IGFwcGVuZCBlbGVtZW50cyBhZnRlciB0aGUgbGFzdCBvbmUgY3VycmVudGx5IGxvYWRlZCxcbiAgICAvLyBhcyBpdCBtYXkgYmVsb25nIGZ1cnRoZXIgZG93biB0aGVyZSBvbiB0aGUgbGlzdCBhbmQgd2lsbFxuICAgIC8vIGJlIGV2ZW50dWFsbHkgbG9hZGVkIHdpdGggb25lIG9mIHRoZSBuZXh0IHBhZ2VzLlxuICAgIGlmIChpbmRleCA8IHRoaXMuY2FjaGVkRGF0YS5sZW5ndGggfHwgdGhpcy5jYWNoZWREYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgJGltcGxpY2l0OiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aCxcbiAgICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRGF0YVxuICAgICAgfTtcblxuICAgICAgdGhpcy5jYWNoZWREYXRhLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgICBjb25zdCB2aWV3UmVmOiBWaWV3UmVmID0gdGhpcy50cGwuY3JlYXRlRW1iZWRkZWRWaWV3KGNvbnRleHQpO1xuICAgICAgdGhpcy52Y3IuaW5zZXJ0KHZpZXdSZWYsIGluZGV4KTtcbiAgICAgIHRoaXMudXBkYXRlQ291bnQoMSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGUodXBkYXRlZEl0ZW0pIHtcbiAgICB0aGlzLmZvck1hdGNoaW5nRW1iZWRkZWRWaWV3UmVmKFxuICAgICAgKGl0ZW06IElJZGVudGlmaWVkKSA9PiBpdGVtICYmIHVwZGF0ZWRJdGVtICYmIGl0ZW0uaWQgPT09IHVwZGF0ZWRJdGVtLmlkLFxuICAgICAgKHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+KSA9PiB7XG4gICAgICAgIHZpZXcuY29udGV4dC4kaW1wbGljaXQgPSB1cGRhdGVkSXRlbTtcbiAgICAgICAgdmlldy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmUoaWRUb1JlbW92ZSkge1xuICAgIGlmICh0aGlzLmlzRGlzcGxheWVkKGlkVG9SZW1vdmUpKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvdW50KC0xKTtcbiAgICB9XG4gICAgdGhpcy5mb3JNYXRjaGluZ0VtYmVkZGVkVmlld1JlZihcbiAgICAgIChpdGVtOiBJSWRlbnRpZmllZCkgPT4gaXRlbSAmJiBjb2VyY2VOdW1iZXJQcm9wZXJ0eShpdGVtLmlkLCBOYU4pID09PSBpZFRvUmVtb3ZlLFxuICAgICAgKHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+KSA9PiB2aWV3LmRlc3Ryb3koKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvdW50KGNvdW50Q2hhbmdlOiBudW1iZXIpIHtcbiAgICB0aGlzLmNvdW50ICs9IGNvdW50Q2hhbmdlO1xuICAgIHRoaXMuYzh5Rm9yQ291bnQuZW1pdCh0aGlzLmNvdW50KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEaXNwbGF5ZWQoaWRUb0NoZWNrKSB7XG4gICAgbGV0IGRpc3BsYXllZCA9IGZhbHNlO1xuICAgIHRoaXMuZm9yTWF0Y2hpbmdFbWJlZGRlZFZpZXdSZWYoXG4gICAgICAoaXRlbTogSUlkZW50aWZpZWQpID0+IGl0ZW0gJiYgY29lcmNlTnVtYmVyUHJvcGVydHkoaXRlbS5pZCwgTmFOKSA9PT0gaWRUb0NoZWNrLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBkaXNwbGF5ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIGRpc3BsYXllZDtcbiAgfVxuXG4gIHByaXZhdGUgZm9yTWF0Y2hpbmdFbWJlZGRlZFZpZXdSZWYoXG4gICAgZmlsdGVyRm46IChpdGVtOiBJSWRlbnRpZmllZCkgPT4gYm9vbGVhbixcbiAgICBjYWxsYmFja0ZuOiAodmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT4pID0+IHZvaWRcbiAgKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZjci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT4gPSB0aGlzLnZjci5nZXQoaSkgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT47XG4gICAgICBjb25zdCBpdGVtOiBJSWRlbnRpZmllZCA9IGdldCh2aWV3LCAnY29udGV4dC4kaW1wbGljaXQnKTtcbiAgICAgIGlmIChmaWx0ZXJGbihpdGVtKSkge1xuICAgICAgICBjYWxsYmFja0ZuKHZpZXcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGb3JEdXBsaWNhdGVzKGRhdGE6IElJZGVudGlmaWVkW10pOiBJSWRlbnRpZmllZFtdIHtcbiAgICByZXR1cm4gdGhpcy5yZWFsdGltZVxuICAgICAgPyBkYXRhLmZpbHRlcihpdGVtID0+ICF0aGlzLmNhY2hlZERhdGEuc29tZShjYWNoZWQgPT4gY2FjaGVkLmlkID09PSBpdGVtLmlkKSlcbiAgICAgIDogZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVQYWdpbmcoKSB7XG4gICAgaWYgKHRoaXMucGFnaW5nU3ViKSB7XG4gICAgICB0aGlzLnBhZ2luZ1N1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VmlydHVhbFNjcm9sbENvbnRlbnRzKGl0ZW1zKSB7XG4gICAgaWYgKHRoaXMuYzh5Rm9yRW5hYmxlVmlydHVhbFNjcm9sbCAmJiB0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZSkge1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UuaXRlbXMgPSBpdGVtcztcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlLmFwcGx5KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRWaXJ0dWFsU2Nyb2xsQ29udGVudChpdGVtcykge1xuICAgIGlmICh0aGlzLmM4eUZvckVuYWJsZVZpcnR1YWxTY3JvbGwgJiYgdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UpIHtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlLml0ZW1zID0gdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UuaXRlbXMuY29uY2F0KGl0ZW1zKTtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlLmFwcGx5KCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
575
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yT2YuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZm9yT2YuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxnQkFBZ0IsRUFFakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUNMLGFBQWEsRUFDYixZQUFZLEVBRVosRUFBRSxFQUNGLElBQUksRUFDSixPQUFPLEVBR1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0scURBQXFELENBQUM7O0FBRXRHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEZHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUF3QnpCLElBQVksdUJBQXVCO1FBQ2pDLE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FDL0YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFZLFdBQVc7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUks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QkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQixDQUFDLEtBQUs7UUFDdEMsSUFBSSxJQUFJLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7OEdBNWlCVSxjQUFjO2tHQUFkLGNBQWM7OzJGQUFkLGNBQWM7a0JBSDFCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFVBQVU7aUJBQ3JCOytJQTRDSyxRQUFRO3NCQURYLEtBQUs7Z0JBMEJGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBU0YsVUFBVTtzQkFEYixLQUFLO2dCQVdGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBWUYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQVNGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkFTRixtQkFBbUI7c0JBRHRCLEtBQUs7Z0JBU0Ysa0JBQWtCO3NCQURyQixLQUFLO2dCQVNGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBU0YscUJBQXFCO3NCQUR4QixLQUFLO2dCQVVGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFTTix5QkFBeUI7c0JBRHhCLEtBQUs7Z0JBT04sOEJBQThCO3NCQUQ3QixLQUFLO2dCQVNOLDJCQUEyQjtzQkFEMUIsS0FBSztnQkFPTixrQ0FBa0M7c0JBRGpDLEtBQUs7Z0JBbUJFLFdBQVc7c0JBRGxCLE1BQU07Z0JBbUJDLFlBQVk7c0JBRG5CLE1BQU07Z0JBT0MsdUJBQXVCO3NCQUQ5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUlkZW50aWZpZWQsIElSZXN1bHRMaXN0LCBQYWdpbmcgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBhc3NpZ24sIGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBjb21iaW5lTGF0ZXN0LFxuICBpc09ic2VydmFibGUsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBwaXBlLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIFVuYXJ5RnVuY3Rpb25cbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZWFsdGltZVNlcnZpY2UgfSBmcm9tICcuLi9yZWFsdGltZS9yZWFsdGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvck9mRmlsdGVyUGlwZSwgRm9yT2ZSZWFsdGltZU9wdGlvbnMgfSBmcm9tICcuL2Zvck9mLm1vZGVsJztcbmltcG9ydCB7IExvYWRNb3JlQ29tcG9uZW50IH0gZnJvbSAnLi9sb2FkLW1vcmUuY29tcG9uZW50JztcbmltcG9ydCB7IExvYWRNb3JlTW9kZSB9IGZyb20gJy4vbG9hZC1tb3JlLm1vZGVsJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxlcldyYXBwZXJDb21wb25lbnQgfSBmcm9tICcuL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsZXItd3JhcHBlci5jb21wb25lbnQnO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIGl0ZXJhdGUgb3ZlciBJUmVzdWx0TGlzdDxUPiBkYXRhIGZyb20gQGM4eS9jbGllbnQuXG4gKiBEZXBlbmRpbmcgb24gdGhlIFtjOHlGb3JMb2FkTW9yZV0gYSBsb2FkIG1vcmUgYnV0dG9uIGlzOlxuICogIC0gYXV0bzogVHJpZXMgdG8gYXV0b21hdGljYWxseSBsb2FkIG1vcmUgZGF0YSAoZGVmYXVsdCBtYXhpbXVtIDEwIGl0ZXJhdGlvbnM7IGNhbiBiZVxuICogICAgICAgICAgY2hhbmdlIHdpdGggbWF4SXRlcmF0aW9ucyBzZXR0aW5ncykuXG4gKiAgLSBzaG93OiBTaG93cyBhIGxvYWQgbW9yZSBidXR0b24gZm9yIHRoZSB1c2VyIHRvIGRlY2lkZVxuICogIC0gbm9uZTogRG9lc24ndCBwZXJmb3JtIGFueSBsb2FkIG1vcmUgYWN0aW9uLlxuICogIC0gaGlkZGVuOiBMb2FkcyBtb3JlIGRhdGEgYXV0b21hdGljYWxseSBidXQgd2l0aCBubyB2aXNpYmxlIGJ1dHRvbiBmb3IgdGhlIHVzZXIuXG4gKlxuICogQWRkaXRpb25hbCwgYW55IHJ4anMgb3BlcmF0b3IgcGlwZSBjYW4gYmUgYXBwbGllZCB0byB0aGUgW2M4eUZvclBpcGVdIGlucHV0LCBlLmcuIHRvXG4gKiBmaWx0ZXIgdGhlIGRhdGEgZGlzcGxheWVkIGN1cnJlbnRseSBhcyB3ZWxsIGFzIHRoZSBkYXRhIGxvYWRlZCBieSBzdWJzZXF1ZW50IHJlcXVlc3RzLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgKmM4eUZvcj1cImxldCBkZXZpY2Ugb2YgZGV2aWNlczsgbG9hZE1vcmU6ICdhdXRvJzsgbGV0IGkgPSBpbmRleDsgcGlwZTogZmlsdGVyUGlwZTtcIj5cbiAqICB7eyBpICsgMSB9fS4ge3tkZXZpY2UubmFtZX19XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBsaXN0IGFsbCBlbnRpdGllcyB0aGF0IGFyZSBhcHBsaWVkIHRvIGBkZXZpY2VzYDpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHRoaXMuZGV2aWNlcyA9IHRoaXMuaW52ZW50b3J5U2VydmljZS5saXN0KHsgcGFnZVNpemU6IDEwLCBmcmFnbWVudFR5cGU6ICdjOHlfSXNEZXZpY2UnIH0pXG4gKiBgYGBcbiAqIEl0IHdpbGwgZGlzcGxheSB0aGUgZmlyc3QgMTAgaXRlbXMsIGlmIHRoZXJlIGlzIG1vcmUgc3BhY2UgbGVmdCBvbiB0aGUgc2NyZWVuLCBhbmQgdGhlcmUgYXJlIG1vcmVcbiAqIHRoYW4gMTAgZGV2aWNlcywgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGxvYWQgdXAgdG8gMTAgcGFnZXMgbW9yZS4gSWYgaXQgc3RpbGwgY2FuJ3QgZml0IHRoZSBzY3JlZW5cbiAqIGl0IHdpbGwgc3RvcCBhbmQgc3dpdGNoIHRvIGBzaG93YCBtb2RlLlxuICpcbiAqIEEgcGlwZSBjYW4gYmUgYXBwbGllZCBlLmcuIGZvciBmaWx0ZXJpbmcgb3IgZ3JvdXBpbmcuIFRoaXMgcGlwZSBpcyBhdHRhY2hlZCB0byBldmVyeSBmb2xsb3cgdXBcbiAqIHJlcXVlc3QgZG9uZSBieSB0aGUgbG9hZCBtb3JlIGNvbXBvbmVudDpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHRoaXMuZmlsdGVyUGlwZSA9IHBpcGUoXG4gKiAgICBtYXAoKGRhdGE6IFtdKSA9PiB7XG4gKiAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKFxuICogICAgICAobW86IGFueSkgPT4gbW8ubmFtZSAmJiBtby5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih2YWx1ZS50b0xvd2VyQ2FzZSgpKSA+IC0xXG4gKiAgICApO1xuICogIH0pXG4gKiApO1xuICogYGBgXG4gKiBUaGUgcGlwZSBtdXN0IGJlIGFuIHJ4anMgcGlwZSBhbmQgY2FuIHRha2UgYW55IG9wZXJhdG9yLlxuICpcbiAqIEV4YW1wbGUgd2l0aCByZWFsdGltZSBzdXBwb3J0IGFuZCBpdGVtcyBjb3VudCBvdXRwdXQgKGUuZy4gZm9yIGhhbmRsaW5nIGVtcHR5IHN0YXRlIGFuZCBoZWFkZXIpOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxjOHktbGlzdC1ncm91cD5cbiAqICAgPGRpdiBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZVwiICpuZ0lmPVwiY291bnQgPT09IDBcIj5cbiAqICAgICAoLi4uKVxuICogICA8L2Rpdj5cbiAqXG4gKiAgIDxkaXYgY2xhc3M9XCJwYWdlLXN0aWNreS1oZWFkZXIgaGlkZGVuLXhzIGM4eS1saXN0X19pdGVtIGM4eS1saXN0LS10aW1lbGluZVwiICpuZ0lmPVwiY291bnQgPiAwXCI+XG4gKiAgICAgKC4uLilcbiAqICAgPC9kaXY+XG4gKlxuICogICA8bmctdGVtcGxhdGVcbiAqICAgICBjOHlGb3JcbiAqICAgICBsZXQtb3BlcmF0aW9uXG4gKiAgICAgW2M4eUZvck9mXT1cIml0ZW1zJFwiXG4gKiAgICAgW2M4eUZvclBpcGVdPVwiZmlsdGVyUGlwZVwiXG4gKiAgICAgW2M4eUZvclJlYWx0aW1lXT1cInJlYWx0aW1lXCJcbiAqICAgICBbYzh5Rm9yUmVhbHRpbWVPcHRpb25zXT1cInJlYWx0aW1lT3B0aW9uc1wiXG4gKiAgICAgKGM4eUZvckNvdW50KT1cImNvdW50ID0gJGV2ZW50XCJcbiAqICAgPlxuICogICAgIDxjOHktbGktdGltZWxpbmU+XG4gKiAgICAgICAoLi4uKVxuICogICAgIDwvYzh5LWxpLXRpbWVsaW5lPlxuICogICA8L25nLXRlbXBsYXRlPlxuICogPC9jOHktbGlzdC1ncm91cD5cbiAqIGBgYFxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBDb21wb25lbnQoe1xuICogICAoLi4uKVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBFeGFtcGxlQ29tcG9uZW50IHtcbiAqICAgQElucHV0KCkgZGV2aWNlSWQ6IElJZGVudGlmaWVkO1xuICogICBpdGVtcyQgPSB0aGlzLm9wZXJhdGlvblNlcnZpY2UubGlzdCh7XG4gKiAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXG4gKiAgICAgZnJhZ21lbnRUeXBlOiAnYzh5X015T3BlcmF0aW9uJyxcbiAqICAgICBkYXRlRnJvbTogbmV3IERhdGUoMCkudG9JU09TdHJpbmcoKSxcbiAqICAgICBkYXRlVG86IG5ldyBEYXRlKERhdGUubm93KCkpLnRvSVNPU3RyaW5nKCksXG4gKiAgICAgcmV2ZXJ0OiB0cnVlLFxuICogICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gKiAgIH0pO1xuICogICBmaWx0ZXJQaXBlID0gcGlwZShtYXAoKG9wczogSU9wZXJhdGlvbltdKSA9PiBvcHMuZmlsdGVyKG9wID0+IG9wLmM4eV9NeU9wZXJhdGlvbikpKTtcbiAqICAgcmVhbHRpbWVPcHRpb25zOiBGb3JPZlJlYWx0aW1lT3B0aW9ucyA9IHtcbiAqICAgICBlbnRpdHlPcklkOiB0aGlzLmRldmljZUlkLFxuICogICAgIHJlbW92ZU9uVXBkYXRlOiB0cnVlLFxuICogICAgIGluc2VydE9uVXBkYXRlOiB0cnVlXG4gKiAgIH0gYXMgRm9yT2ZSZWFsdGltZU9wdGlvbnM7XG4gKiAgIGNvdW50OiBudW1iZXI7XG4gKlxuICogICBjb25zdHJ1Y3RvcihcbiAqICAgICBwcml2YXRlIG9wZXJhdGlvblNlcnZpY2U6IE9wZXJhdGlvblNlcnZpY2UsXG4gKiAgICAgcHVibGljIHJlYWx0aW1lOiBPcGVyYXRpb25SZWFsdGltZVNlcnZpY2VcbiAqICAgKSB7fVxuICogfVxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjOHlGb3JdJ1xufSlcbmV4cG9ydCBjbGFzcyBGb3JPZkRpcmVjdGl2ZSB7XG4gIHByaXZhdGUgY2FjaGVkRGF0YTogSUlkZW50aWZpZWRbXSA9IFtdO1xuICBwcml2YXRlIHBhZ2luZzogUGFnaW5nPElJZGVudGlmaWVkPjtcbiAgcHJpdmF0ZSBsb2FkTW9yZU1vZGU6IExvYWRNb3JlTW9kZSA9ICdhdXRvJztcbiAgcHJpdmF0ZSBkYXRhUGlwZTogRm9yT2ZGaWx0ZXJQaXBlID0gcGlwZSh0YXAoKSk7XG4gIHByaXZhdGUgaXRlbURhdGFQaXBlOiBVbmFyeUZ1bmN0aW9uPE9ic2VydmFibGU8SUlkZW50aWZpZWQ+LCBPYnNlcnZhYmxlPElJZGVudGlmaWVkPj4gPSBwaXBlKFxuICAgIG1hcChpdGVtID0+IFtpdGVtXSksXG4gICAgc3JjID0+IHRoaXMuZGF0YVBpcGUoc3JjKSxcbiAgICBtYXAoKFtpdGVtXSkgPT4gaXRlbSlcbiAgKTtcbiAgcHJpdmF0ZSBwYWdpbmdTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBvYnMkOiBPYnNlcnZhYmxlPElJZGVudGlmaWVkW10+O1xuICBwcml2YXRlIGxvYWRNb3JlOiBMb2FkTW9yZUNvbXBvbmVudDtcbiAgcHJpdmF0ZSBsb2FkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgbWF4SXRlcmF0aW9ucyA9IDEwO1xuICBwcml2YXRlIG5vdEZvdW5kVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgbG9hZE5leHRMYWJlbDogc3RyaW5nO1xuICBwcml2YXRlIGxvYWRpbmdMYWJlbDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWx0aW1lOiBSZWFsdGltZVNlcnZpY2U8SUlkZW50aWZpZWQ+O1xuICBwcml2YXRlIHJlYWx0aW1lT3B0aW9uczogRm9yT2ZSZWFsdGltZU9wdGlvbnMgPSB7fTtcbiAgcHJpdmF0ZSBjb21wYXJhdG9yOiAoaXRlbUE6IElJZGVudGlmaWVkLCBpdGVtQjogSUlkZW50aWZpZWQpID0+IG51bWJlcjtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIHZpcnR1YWxTY3JvbGxJbnN0YW5jZTogVmlydHVhbFNjcm9sbGVyV3JhcHBlckNvbXBvbmVudDtcblxuICBwcml2YXRlIGdldCBzaG91bGRVc2VMb2FkTW9yZUJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5sb2FkTW9yZU1vZGUgPT09ICdhdXRvJyB8fCB0aGlzLmxvYWRNb3JlTW9kZSA9PT0gJ3Nob3cnIHx8IHRoaXMubG9hZE1vcmVNb2RlID09PSAnaGlkZGVuJ1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldCBoYXNNb3JlRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkTW9yZSAmJiB0aGlzLmxvYWRNb3JlLmhhc01vcmU7XG4gIH1cblxuICBwcml2YXRlIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkRGF0YS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRhdGEgc2V0dGVyLiBNdXN0IGJlIGEgcmVzcG9uc2UgZnJvbSBAYzh5L2RhdGEgb3IgYW4gb2JzZXJ2YWJsZS5cbiAgICogWW91IGNhbiBwYXNzIGFuIG9ic2VydmFibGUgd2l0aCBudWxsIHRvIGV4cGxpY2l0bHkgY2xlYXIgdGhlIGxpc3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yT2YoZmV0Y2hEYXRhOiBJUmVzdWx0TGlzdDxJSWRlbnRpZmllZD4gfCBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElJZGVudGlmaWVkPj4pIHtcbiAgICBpZiAoZmV0Y2hEYXRhKSB7XG4gICAgICB0aGlzLm9icyQgPSAoaXNPYnNlcnZhYmxlKGZldGNoRGF0YSkgPyBmZXRjaERhdGEgOiBvZihmZXRjaERhdGEpKS5waXBlKFxuICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2luZyA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgcGFnaW5nLCBkYXRhIH0gPSByZXN1bHQ7XG4gICAgICAgICAgdGhpcy5wYWdpbmcgPSBwYWdpbmc7XG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbW9kZSBzZXR0ZXI6XG4gICAqICAtIGF1dG86IFRyaWVzIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBtb3JlIGRhdGEgKGRlZmF1bHQgbWF4aW11bSAxMCBpdGVyYXRpb25zOyBjYW4gYmVcbiAgICogICAgICAgICAgY2hhbmdlIHdpdGggbWF4SXRlcmF0aW9ucyBzZXR0aW5ncykuXG4gICAqICAtIHNob3c6IFNob3dzIGEgbG9hZCBtb3JlIGJ1dHRvbiBmb3IgdGhlIHVzZXIgdG8gZGVjaWRlXG4gICAqICAtIG5vbmU6IERvZXNuJ3QgcGVyZm9ybSBhbnkgbG9hZCBtb3JlIGFjdGlvbi5cbiAgICogIC0gaGlkZGVuOiBMb2FkcyBtb3JlIGRhdGEgYXV0b21hdGljYWxseSBidXQgd2l0aCBubyB2aXNpYmxlIGJ1dHRvbiBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yTG9hZE1vcmUodHlwZTogRm9yT2ZEaXJlY3RpdmVbJ2xvYWRNb3JlTW9kZSddKSB7XG4gICAgdGhpcy5sb2FkTW9yZU1vZGUgPSB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwaXBlIHNldHRlciB0byBhdHRhY2ggYW55IHJ4anMgcGlwZSB0byB0aGUgY3VycmVudCBhbmQgbW9yZSBsb2FkZWQgZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JQaXBlKGRhdGFQaXBlOiBGb3JPZkRpcmVjdGl2ZVsnZGF0YVBpcGUnXSkge1xuICAgIGlmIChkYXRhUGlwZSkge1xuICAgICAgdGhpcy5kYXRhUGlwZSA9IGRhdGFQaXBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBIHRlbXBsYXRlIHRvIHVzZSBpZiBubyBkYXRhIGlzIGZvdW5kIGF0IGFsbCAoZS5nLiBpZiB5b3UgYXBwbHkgYSBmaWx0ZXIgcGlwZSkuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yTm90Rm91bmQobm90Rm91bmRUZW1wbGF0ZTogRm9yT2ZEaXJlY3RpdmVbJ25vdEZvdW5kVGVtcGxhdGUnXSkge1xuICAgIHRoaXMubm90Rm91bmRUZW1wbGF0ZSA9IG5vdEZvdW5kVGVtcGxhdGU7XG4gICAgaWYgKHRoaXMubG9hZE1vcmUpIHtcbiAgICAgIHRoaXMubG9hZE1vcmUubm9Nb3JlRGF0YUhpbnQgPSBub3RGb3VuZFRlbXBsYXRlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXJzIG9mIGl0ZXJhdGlvbnMgdG8gY2FsbCBkYXRhIGZyb20gdGhlIGFwaS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JNYXhJdGVyYXRpb25zKG1heEl0ZXJhdGlvbnM6IG51bWJlcikge1xuICAgIHRoaXMubWF4SXRlcmF0aW9ucyA9IG1heEl0ZXJhdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQSBjdXN0b20gbG9hZGluZyBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yTG9hZGluZ1RlbXBsYXRlKGxvYWRpbmdUZW1wbGF0ZTogRm9yT2ZEaXJlY3RpdmVbJ2xvYWRpbmdUZW1wbGF0ZSddKSB7XG4gICAgdGhpcy5sb2FkaW5nVGVtcGxhdGUgPSBsb2FkaW5nVGVtcGxhdGU7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBuZXh0IHRleHQgbGFiZWwuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yTG9hZE5leHRMYWJlbChsb2FkTmV4dExhYmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvYWROZXh0TGFiZWwgPSBsb2FkTmV4dExhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRpbmcgdGV4dCBsYWJlbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JMb2FkaW5nTGFiZWwobG9hZGluZ0xhYmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvYWRpbmdMYWJlbCA9IGxvYWRpbmdMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIFJlYWx0aW1lU2VydmljZSBpbnN0YW5jZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JSZWFsdGltZShzb3VyY2U6IEZvck9mRGlyZWN0aXZlWydyZWFsdGltZSddKSB7XG4gICAgdGhpcy5yZWFsdGltZSA9IHNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFsdGltZSBvcHRpb25zLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvclJlYWx0aW1lT3B0aW9ucyhyZWFsdGltZU9wdGlvbnM6IEZvck9mRGlyZWN0aXZlWydyZWFsdGltZU9wdGlvbnMnXSkge1xuICAgIHRoaXMucmVhbHRpbWVPcHRpb25zID0gcmVhbHRpbWVPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY29tcGFyYXRvciBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIGxpc3QgaXRlbXMuIFVzZWQgdG8gZGV0ZXJtaW5lXG4gICAqIHRoZSBwb3NpdGlvbiBhdCB3aGljaCBhIG5ldyBlbGVtZW50IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbGlzdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JDb21wYXJhdG9yKGNvbXBhcmF0b3I6IEZvck9mRGlyZWN0aXZlWydjb21wYXJhdG9yJ10pIHtcbiAgICB0aGlzLmNvbXBhcmF0b3IgPSBjb21wYXJhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB2aXJ0dWFsIHNjcm9sbCByZW5kZXJpbmcgbWV0aG9kLlxuICAgKi9cbiAgQElucHV0KClcbiAgYzh5Rm9yRW5hYmxlVmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBmaXhlZCBpdGVtIHNpemUgZm9yIHZpcnR1YWwgc2Nyb2xsIHdpbmRvdyBzdHJhdGVneS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGM4eUZvclZpcnR1YWxTY3JvbGxFbGVtZW50U2l6ZTtcblxuICAvKipcbiAgICogU2V0cyBtb2RlIG9mIHZpcnR1YWwgc2Nyb2xsZXIgaW5zdGFuY2UuXG4gICAqIHdpbmRvdyBpcyB1c2VkIGZvciBjYXNlIHdoZW4gd2hvbGUgdmlld3BvcnQgaXMgc2Nyb2xsZWQuXG4gICAqIGZpeGVkIGNhbiBiZSB1c2VkIG9uIGlubmVyLXNjcm9sbCBjb250YWluZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgYzh5Rm9yVmlydHVhbFNjcm9sbFN0cmF0ZWd5OiAnZml4ZWQnIHwgJ3dpbmRvdycgPSAnd2luZG93JztcblxuICAvKipcbiAgICogV2hlbiB1c2VkIGZpeGVkIHN0cmF0ZWd5LCB0aGVyZSBuZWVkcyB0byBiZSBmaXhlZCBoZWlnaHQgc2V0IG9uIHNjcm9sbGluZyBjb250YWluZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBjOHlGb3JWaXJ0dWFsU2Nyb2xsQ29udGFpbmVySGVpZ2h0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgaXRlbXMgY3VycmVudGx5IGxvYWRlZCBpbiB0aGUgbGlzdC5cbiAgICpcbiAgICogTm90ZTogVGhpcyBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSBmb3JPZiBpc24ndCB1c2VkIHdpdGhcbiAgICogdGhlIHN1Z2FyZWQgYXN0ZXJpc2sgKCopIHN5bnRheC4gSW5zdGVhZCB5b3UgbmVlZCB0byB1c2UgYW4gbmctdGVtcGxhdGU6XG4gICAqIGBgYGh0bWxcbiAgICogPG5nLXRlbXBsYXRlXG4gICAqICBjOHlGb3JcbiAgICogIGxldC1vcGVyYXRpb25cbiAgICogIFtjOHlGb3JPZl09XCJvcGVyYXRpb25zJFwiXG4gICAqICAoYzh5Rm9yQ291bnQpPVwib3BlcmF0aW9uQ291bnQgPSAkZXZlbnRcIlxuICAgKiA+XG4gICAqIDwvbmctdGVtcGxhdGU+XG4gICAqIGBgYFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHByaXZhdGUgYzh5Rm9yQ291bnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKipcbiAgICogVGhlIGl0ZW1zIGNoYW5nZSBldmVudCBlbWl0dGluZyB0aGUgbmV3bHkgbG9hZGVkIGl0ZW1zLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaWYgdGhlIGZvck9mIGlzbid0IHVzZWQgd2l0aFxuICAgKiB0aGUgc3VnYXJlZCBhc3RlcmlzayAoKikgc3ludGF4LiBJbnN0ZWFkIHlvdSBuZWVkIHRvIHVzZSBhbiBuZy10ZW1wbGF0ZTpcbiAgICogYGBgaHRtbFxuICAgKiA8bmctdGVtcGxhdGVcbiAgICogIGM4eUZvclxuICAgKiAgbGV0LW9wZXJhdGlvblxuICAgKiAgW2M4eUZvck9mXT1cIm9wZXJhdGlvbnMkXCJcbiAgICogIChjOHlGb3JDaGFuZ2UpPVwib25DaGFuZ2VGb3JPZigkZXZlbnQpXCJcbiAgICogPlxuICAgKiA8L25nLXRlbXBsYXRlPlxuICAgKiBgYGBcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwcml2YXRlIGM4eUZvckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8dW5rbm93bltdPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYExvYWRNb3JlQ29tcG9uZW50YC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwcml2YXRlIGM4eUZvckxvYWRNb3JlQ29tcG9uZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxMb2FkTW9yZUNvbXBvbmVudD4oKTtcblxuICBwcml2YXRlIGNvdW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRwbDogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcml2YXRlIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVSZWFsdGltZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9icyQgJiYgKGNoYW5nZXMuYzh5Rm9yUGlwZSB8fCBjaGFuZ2VzLmM4eUZvck9mKSkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZVBhZ2luZygpO1xuXG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UuZmlsdGVyUGlwZSA9IHRoaXMuZGF0YVBpcGU7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gb25seSByZS1yZW5kZXJpbmcgIG9uIGZpbHRlcmluZyBpZiBhbGwgZGF0YSBpcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgLy8gZnJvbSB0aGUgYmFja2VuZFxuICAgICAgY29uc3QgcmVSZW5kZXIgPSAhdGhpcy5oYXNNb3JlRGF0YSAmJiAhIWNoYW5nZXMuYzh5Rm9yUGlwZSAmJiAhY2hhbmdlcy5jOHlGb3JPZjtcblxuICAgICAgaWYgKHJlUmVuZGVyKSB7XG4gICAgICAgIHRoaXMub2JzJCA9IG9mKHRoaXMuY2FjaGVkRGF0YSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhZ2luZ1N1YiA9IHRoaXMub2JzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoZGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlUmVuZGVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FjaGVkRGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAucGlwZShzcmMgPT4gdGhpcy5kYXRhUGlwZShzcmMpKVxuICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBbXSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ291bnQoZGF0YS5sZW5ndGgpO1xuICAgICAgICAgIHRoaXMuYzh5Rm9yQ2hhbmdlLmVtaXQoZGF0YSk7XG4gICAgICAgICAgdGhpcy5yZW5kZXIoZGF0YSwgcmVSZW5kZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlUGFnaW5nKCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlYWx0aW1lKCkge1xuICAgIGlmICh0aGlzLnJlYWx0aW1lKSB7XG4gICAgICB0aGlzLmhhbmRsZVJlYWx0aW1lQ3JlYXRlKCk7XG4gICAgICB0aGlzLmhhbmRsZVJlYWx0aW1lVXBkYXRlKCk7XG4gICAgICB0aGlzLmhhbmRsZVJlYWx0aW1lRGVsZXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9uIGNyZWF0ZSBub3RpZmljYXRpb246XG4gICAqIC0gaWYgaXRlbSBwYXNzZXMgZGF0YSBwaXBlLCB0aGVuIGluc2VydCBpdC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlUmVhbHRpbWVDcmVhdGUoKSB7XG4gICAgY29uc3QgeyBlbnRpdHlPcklkIH0gPSB0aGlzLnJlYWx0aW1lT3B0aW9ucztcbiAgICB0aGlzLnJlYWx0aW1lXG4gICAgICAub25DcmVhdGUkKGVudGl0eU9ySWQpXG4gICAgICAucGlwZShcbiAgICAgICAgaXRlbSQgPT4gdGhpcy5pdGVtRGF0YVBpcGUoaXRlbSQpLFxuICAgICAgICBmaWx0ZXIoaXRlbSA9PiAhIWl0ZW0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGl0ZW0gPT4gdGhpcy5pbnNlcnQoaXRlbSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIHVwZGF0ZSBub3RpZmljYXRpb246XG4gICAqIC0gaWYgaXRlbSBpcyBkaXNwbGF5ZWQgYW5kIHBhc3NlcyBkYXRhIHBpcGUsIHRoZW4gdXBkYXRlIGl0LFxuICAgKiAtIGlmIGl0ZW0gaXMgZGlzcGxheWVkIGFuZCBkb2Vzbid0IHBhc3MgZGF0YSBwaXBlLCB0aGVuIHJlbW92ZSBpdCAoaWYgYHJlbW92ZU9uVXBkYXRlYCBpcyB0cnVlKSxcbiAgICogLSBpZiBpdGVtIGlzIG5vdCBkaXNwbGF5ZWQgYW5kIHBhc3NlcyBkYXRhIHBpcGUsIHRoZW4gaW5zZXJ0IGl0IChpZiBgaW5zZXJ0T25VcGRhdGVgIGlzIHRydWUpLFxuICAgKiAtIGlmIGl0ZW0gaXMgbm90IGRpc3BsYXllZCBhbmQgZG9lc24ndCBwYXNzIGRhdGEgcGlwZSwgdGhlbiBpZ25vcmUgaXQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlYWx0aW1lVXBkYXRlKCkge1xuICAgIGNvbnN0IHsgZW50aXR5T3JJZCB9ID0gdGhpcy5yZWFsdGltZU9wdGlvbnM7XG4gICAgdGhpcy5yZWFsdGltZVxuICAgICAgLm9uVXBkYXRlJChlbnRpdHlPcklkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGl0ZW0kID0+XG4gICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBpdGVtJCxcbiAgICAgICAgICAgIGl0ZW0kLnBpcGUoXG4gICAgICAgICAgICAgIHNyYyA9PiB0aGlzLml0ZW1EYXRhUGlwZShzcmMpLFxuICAgICAgICAgICAgICBtYXAoaXRlbSA9PiBpdGVtICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtpdGVtLCBwYXNzZXNEYXRhUGlwZV0pID0+IHtcbiAgICAgICAgY29uc3QgeyBpbnNlcnRPblVwZGF0ZSwgcmVtb3ZlT25VcGRhdGUgfSA9IHRoaXMucmVhbHRpbWVPcHRpb25zO1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWQgPSB0aGlzLmlzRGlzcGxheWVkKGNvZXJjZU51bWJlclByb3BlcnR5KGl0ZW0uaWQpKTtcbiAgICAgICAgaWYgKGRpc3BsYXllZCkge1xuICAgICAgICAgIGlmIChwYXNzZXNEYXRhUGlwZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoaXRlbSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZW1vdmVPblVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoY29lcmNlTnVtYmVyUHJvcGVydHkoaXRlbS5pZCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXNzZXNEYXRhUGlwZSAmJiBpbnNlcnRPblVwZGF0ZSkge1xuICAgICAgICAgIHRoaXMuaW5zZXJ0KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBkZWxldGUgbm90aWZpY2F0aW9uOlxuICAgKiAtIHJlbW92ZSBpdGVtIGZyb20gdGhlIGxpc3QgKGlmIG5vdCB0aGVyZSwgaXQgd2lsbCBiZSBqdXN0IGlnbm9yZWQpLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZURlbGV0ZSgpIHtcbiAgICBjb25zdCB7IGVudGl0eU9ySWQgfSA9IHRoaXMucmVhbHRpbWVPcHRpb25zO1xuICAgIHRoaXMucmVhbHRpbWVcbiAgICAgIC5vbkRlbGV0ZSQoZW50aXR5T3JJZClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKGlkID0+IHRoaXMucmVtb3ZlKGNvZXJjZU51bWJlclByb3BlcnR5KGlkKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXIoZGF0YSwgcmVSZW5kZXIgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmM4eUZvckVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UgPSB0aGlzLmNyZWF0ZVZpcnR1YWxTY3JvbGxXcmFwcGVyQ29tcG9uZW50KCk7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVzZUxvYWRNb3JlQnV0dG9uKSB7XG4gICAgICAgICAgdGhpcy5sb2FkTW9yZSA9IHRoaXMuY3JlYXRlTG9hZE1vcmVCdXR0b25Db21wb25lbnQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0VmlydHVhbFNjcm9sbENvbnRlbnRzKGRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmNyLmNsZWFyKCk7XG5cbiAgICBkYXRhLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAkaW1wbGljaXQ6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoLFxuICAgICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVEYXRhLFxuICAgICAgICBsb2FkTW9yZUNvbXBvbmVudDogdGhpcy5sb2FkTW9yZVxuICAgICAgfTtcbiAgICAgIHRoaXMudmNyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRwbCwgY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zaG91bGRVc2VMb2FkTW9yZUJ1dHRvbikge1xuICAgICAgdGhpcy5sb2FkTW9yZSA9IHRoaXMuY3JlYXRlTG9hZE1vcmVCdXR0b25Db21wb25lbnQocmVSZW5kZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwZW5kKGRhdGEpIHtcbiAgICBpZiAodGhpcy5jOHlGb3JFbmFibGVWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICB0aGlzLmFwcGVuZFZpcnR1YWxTY3JvbGxDb250ZW50KGRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zaG91bGRVc2VMb2FkTW9yZUJ1dHRvbiA/IHRoaXMudmNyLmxlbmd0aCAtIDEgOiB0aGlzLnZjci5sZW5ndGg7XG4gICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAkaW1wbGljaXQ6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoLFxuICAgICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVEYXRhLFxuICAgICAgICBsb2FkTW9yZUNvbXBvbmVudDogdGhpcy5sb2FkTW9yZVxuICAgICAgfTtcbiAgICAgIHRoaXMudmNyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRwbCwgY29udGV4dCwgaW5kZXgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkTW9yZURhdGEoZGF0YSkge1xuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudXBkYXRlQ291bnQoZGF0YS5sZW5ndGgpO1xuICAgICAgdGhpcy5jOHlGb3JDaGFuZ2UuZW1pdChkYXRhKTtcbiAgICAgIHRoaXMuYXBwZW5kKGRhdGEpO1xuICAgIH1cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9hZE1vcmVCdXR0b25Db21wb25lbnQocmVSZW5kZXIpIHtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnZjci5jcmVhdGVDb21wb25lbnQoTG9hZE1vcmVDb21wb25lbnQpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIExvYWRNb3JlQ29tcG9uZW50O1xuICAgIGluc3RhbmNlLnBhZ2luZyA9IHRoaXMucGFnaW5nO1xuICAgIGluc3RhbmNlLnVzZUludGVyc2VjdGlvbiA9IHRoaXMubG9hZE1vcmVNb2RlID09PSAnYXV0bycgfHwgdGhpcy5sb2FkTW9yZU1vZGUgPT09ICdoaWRkZW4nO1xuICAgIGluc3RhbmNlLmhpZGRlbiA9IHRoaXMubG9hZE1vcmVNb2RlID09PSAnaGlkZGVuJztcbiAgICBpbnN0YW5jZS5tYXhJdGVyYXRpb25zID0gdGhpcy5tYXhJdGVyYXRpb25zO1xuICAgIGluc3RhbmNlLm5vTW9yZURhdGFIaW50ID0gdGhpcy5ub3RGb3VuZFRlbXBsYXRlO1xuICAgIGluc3RhbmNlLmxvYWRpbmdUZW1wbGF0ZSA9IHRoaXMubG9hZGluZ1RlbXBsYXRlO1xuICAgIGluc3RhbmNlLmxvYWROZXh0TGFiZWwgPSB0aGlzLmxvYWROZXh0TGFiZWw7XG4gICAgaW5zdGFuY2UubG9hZGluZ0xhYmVsID0gdGhpcy5sb2FkaW5nTGFiZWw7XG4gICAgdGhpcy5jOHlGb3JMb2FkTW9yZUNvbXBvbmVudC5lbWl0KGluc3RhbmNlKTtcbiAgICB0aGlzLnBhZ2luZ1N1YiA9IGluc3RhbmNlLm9uTG9hZFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZGF0YTogW10pID0+IHRoaXMuY2hlY2tGb3JEdXBsaWNhdGVzKGRhdGEpKSxcbiAgICAgICAgdGFwKChkYXRhOiBbXSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FjaGVkRGF0YSA9IHRoaXMuY2FjaGVkRGF0YS5jb25jYXQoZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAucGlwZShzcmMgPT4gdGhpcy5kYXRhUGlwZShzcmMpKVxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHRoaXMubG9hZE1vcmVEYXRhKGRhdGEpKTtcbiAgICBpZiAocmVSZW5kZXIpIHtcbiAgICAgIGFzc2lnbihpbnN0YW5jZSwgdGhpcy5sb2FkTW9yZSk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmlydHVhbFNjcm9sbFdyYXBwZXJDb21wb25lbnQoKSB7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KFZpcnR1YWxTY3JvbGxlcldyYXBwZXJDb21wb25lbnQpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFZpcnR1YWxTY3JvbGxlcldyYXBwZXJDb21wb25lbnQ7XG4gICAgaW5zdGFuY2UuaXRlbXMgPSB0aGlzLmNhY2hlZERhdGE7XG4gICAgaW5zdGFuY2UuaXRlbUhlaWdodCA9IHRoaXMuYzh5Rm9yVmlydHVhbFNjcm9sbEVsZW1lbnRTaXplO1xuICAgIGluc3RhbmNlLnRlbXBsYXRlID0gdGhpcy50cGw7XG4gICAgaW5zdGFuY2Uuc3RyYXRlZ3kgPSB0aGlzLmM4eUZvclZpcnR1YWxTY3JvbGxTdHJhdGVneTtcbiAgICBpbnN0YW5jZS5jb250YWluZXJIZWlnaHQgPSB0aGlzLmM4eUZvclZpcnR1YWxTY3JvbGxDb250YWluZXJIZWlnaHQ7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICBwcml2YXRlIGluc2VydChpdGVtKSB7XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIGlmICh0aGlzLmNvbXBhcmF0b3IgJiYgdGhpcy5jYWNoZWREYXRhLmxlbmd0aCkge1xuICAgICAgbGV0IGNvbXBhcmlzaW9uUmVzdWx0OiBudW1iZXI7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+ID0gdGhpcy52Y3IuZ2V0KGluZGV4KSBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PjtcbiAgICAgICAgY29uc3QgaXRlbUIgPSBnZXQodmlldywgJ2NvbnRleHQuJGltcGxpY2l0Jyk7XG4gICAgICAgIGNvbXBhcmlzaW9uUmVzdWx0ID0gaXRlbSAmJiBpdGVtQiA/IHRoaXMuY29tcGFyYXRvcihpdGVtLCBpdGVtQikgOiAwO1xuICAgICAgICBpZiAoY29tcGFyaXNpb25SZXN1bHQgPD0gMCkge1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKGNvbXBhcmlzaW9uUmVzdWx0IDw9IDAgJiYgaW5kZXggPCB0aGlzLmNhY2hlZERhdGEubGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvLyBEbyBub3QgYXBwZW5kIGVsZW1lbnRzIGFmdGVyIHRoZSBsYXN0IG9uZSBjdXJyZW50bHkgbG9hZGVkLFxuICAgIC8vIGFzIGl0IG1heSBiZWxvbmcgZnVydGhlciBkb3duIHRoZXJlIG9uIHRoZSBsaXN0IGFuZCB3aWxsXG4gICAgLy8gYmUgZXZlbnR1YWxseSBsb2FkZWQgd2l0aCBvbmUgb2YgdGhlIG5leHQgcGFnZXMuXG4gICAgaWYgKGluZGV4IDwgdGhpcy5jYWNoZWREYXRhLmxlbmd0aCB8fCB0aGlzLmNhY2hlZERhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAkaW1wbGljaXQ6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoLFxuICAgICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVEYXRhXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhY2hlZERhdGEuc3BsaWNlKGluZGV4LCAwLCBpdGVtKTtcbiAgICAgIGNvbnN0IHZpZXdSZWY6IFZpZXdSZWYgPSB0aGlzLnRwbC5jcmVhdGVFbWJlZGRlZFZpZXcoY29udGV4dCk7XG4gICAgICB0aGlzLnZjci5pbnNlcnQodmlld1JlZiwgaW5kZXgpO1xuICAgICAgdGhpcy51cGRhdGVDb3VudCgxKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZSh1cGRhdGVkSXRlbSkge1xuICAgIHRoaXMuZm9yTWF0Y2hpbmdFbWJlZGRlZFZpZXdSZWYoXG4gICAgICAoaXRlbTogSUlkZW50aWZpZWQpID0+IGl0ZW0gJiYgdXBkYXRlZEl0ZW0gJiYgaXRlbS5pZCA9PT0gdXBkYXRlZEl0ZW0uaWQsXG4gICAgICAodmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT4pID0+IHtcbiAgICAgICAgdmlldy5jb250ZXh0LiRpbXBsaWNpdCA9IHVwZGF0ZWRJdGVtO1xuICAgICAgICB2aWV3Lm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZShpZFRvUmVtb3ZlKSB7XG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5ZWQoaWRUb1JlbW92ZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlQ291bnQoLTEpO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jYWNoZWREYXRhLmZpbmRJbmRleChvcCA9PiBvcC5pZCA9PT0gaWRUb1JlbW92ZSk7XG4gICAgdGhpcy5jYWNoZWREYXRhLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICB0aGlzLmZvck1hdGNoaW5nRW1iZWRkZWRWaWV3UmVmKFxuICAgICAgKGl0ZW06IElJZGVudGlmaWVkKSA9PiBpdGVtICYmIGNvZXJjZU51bWJlclByb3BlcnR5KGl0ZW0uaWQsIE5hTikgPT09IGlkVG9SZW1vdmUsXG4gICAgICAodmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT4pID0+IHZpZXcuZGVzdHJveSgpXG4gICAgKTtcblxuICAgIHRoaXMuYzh5Rm9yQ2hhbmdlLmVtaXQoWy4uLnRoaXMuY2FjaGVkRGF0YV0pO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb3VudChjb3VudENoYW5nZTogbnVtYmVyKSB7XG4gICAgdGhpcy5jb3VudCArPSBjb3VudENoYW5nZTtcbiAgICB0aGlzLmM4eUZvckNvdW50LmVtaXQodGhpcy5jb3VudCk7XG4gIH1cblxuICBwcml2YXRlIGlzRGlzcGxheWVkKGlkVG9DaGVjaykge1xuICAgIGxldCBkaXNwbGF5ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZvck1hdGNoaW5nRW1iZWRkZWRWaWV3UmVmKFxuICAgICAgKGl0ZW06IElJZGVudGlmaWVkKSA9PiBpdGVtICYmIGNvZXJjZU51bWJlclByb3BlcnR5KGl0ZW0uaWQsIE5hTikgPT09IGlkVG9DaGVjayxcbiAgICAgICgpID0+IHtcbiAgICAgICAgZGlzcGxheWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiBkaXNwbGF5ZWQ7XG4gIH1cblxuICBwcml2YXRlIGZvck1hdGNoaW5nRW1iZWRkZWRWaWV3UmVmKFxuICAgIGZpbHRlckZuOiAoaXRlbTogSUlkZW50aWZpZWQpID0+IGJvb2xlYW4sXG4gICAgY2FsbGJhY2tGbjogKHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+KSA9PiB2b2lkXG4gICkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52Y3IubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+ID0gdGhpcy52Y3IuZ2V0KGkpIGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+O1xuICAgICAgY29uc3QgaXRlbTogSUlkZW50aWZpZWQgPSBnZXQodmlldywgJ2NvbnRleHQuJGltcGxpY2l0Jyk7XG4gICAgICBpZiAoZmlsdGVyRm4oaXRlbSkpIHtcbiAgICAgICAgY2FsbGJhY2tGbih2aWV3KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRm9yRHVwbGljYXRlcyhkYXRhOiBJSWRlbnRpZmllZFtdKTogSUlkZW50aWZpZWRbXSB7XG4gICAgcmV0dXJuIHRoaXMucmVhbHRpbWVcbiAgICAgID8gZGF0YS5maWx0ZXIoaXRlbSA9PiAhdGhpcy5jYWNoZWREYXRhLnNvbWUoY2FjaGVkID0+IGNhY2hlZC5pZCA9PT0gaXRlbS5pZCkpXG4gICAgICA6IGRhdGE7XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlUGFnaW5nKCkge1xuICAgIGlmICh0aGlzLnBhZ2luZ1N1Yikge1xuICAgICAgdGhpcy5wYWdpbmdTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFZpcnR1YWxTY3JvbGxDb250ZW50cyhpdGVtcykge1xuICAgIGlmICh0aGlzLmM4eUZvckVuYWJsZVZpcnR1YWxTY3JvbGwgJiYgdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UpIHtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlLml0ZW1zID0gaXRlbXM7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZS5hcHBseSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwZW5kVmlydHVhbFNjcm9sbENvbnRlbnQoaXRlbXMpIHtcbiAgICBpZiAodGhpcy5jOHlGb3JFbmFibGVWaXJ0dWFsU2Nyb2xsICYmIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlKSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZS5pdGVtcyA9IHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlLml0ZW1zLmNvbmNhdChpdGVtcyk7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZS5hcHBseSgpO1xuICAgIH1cbiAgfVxufVxuIl19
|