tnx-shared 5.1.310 → 5.1.311
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/bundles/tnx-shared.umd.js +96 -9
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/components/common-app-component/common-app-component.d.ts +3 -3
- package/components/common-app-component/common-app-component.d.ts.map +1 -1
- package/esm2015/components/common-app-component/common-app-component.js +5 -5
- package/esm2015/services/permission.service.js +63 -16
- package/esm2015/services/role.service.js +29 -1
- package/fesm2015/tnx-shared.js +90 -15
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/permission.service.d.ts +6 -4
- package/services/permission.service.d.ts.map +1 -1
- package/services/role.service.d.ts +7 -0
- package/services/role.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -8,15 +8,18 @@ import { Subscription } from 'rxjs';
|
|
|
8
8
|
import { ConfirmationService, MessageService, PrimeNGConfig } from 'tn-custom-primeng/api';
|
|
9
9
|
import { ApplicationContextService } from '../../app-context/application-context.service';
|
|
10
10
|
import { ComponentContextService } from '../../app-context/component-context.service';
|
|
11
|
+
import { EnumTypeSplash } from '../../enums/common';
|
|
11
12
|
import { AuthenService } from '../../services/authen.service';
|
|
12
13
|
import { CommonService } from '../../services/common.service';
|
|
13
14
|
import { CoreConfigService } from '../../services/core-config.service';
|
|
14
15
|
import { CustomRouterService } from '../../services/custom-router.service';
|
|
16
|
+
import { CustomizeUiService } from '../../services/customize-ui.service';
|
|
15
17
|
import { EntityMetadataService } from '../../services/entity-metadata.service';
|
|
16
18
|
import { GlobalService } from '../../services/global.service';
|
|
17
19
|
import { MenuService } from '../../services/menu.service';
|
|
18
20
|
import { ModuleConfigService } from '../../services/module-config.service';
|
|
19
21
|
import { NotifierService } from '../../services/notifier.service';
|
|
22
|
+
import { PermissionService } from '../../services/permission.service';
|
|
20
23
|
import { SignalRService } from '../../services/signalr.service';
|
|
21
24
|
import { StorageUpdatedService } from '../../services/storage-updated.service';
|
|
22
25
|
import { StorageService } from '../../services/storage.service';
|
|
@@ -24,9 +27,6 @@ import { TnClientService } from '../../services/tn-client.service';
|
|
|
24
27
|
import { UserService } from '../../services/user.service';
|
|
25
28
|
import { ReportQueueComponent } from '../report-queue/report-queue.component';
|
|
26
29
|
import { TnCustomScrollbarComponent } from '../tn-custom-scrollbar/tn-custom-scrollbar.component';
|
|
27
|
-
import { PermissionService } from '../../services/permission.service';
|
|
28
|
-
import { CustomizeUiService } from '../../services/customize-ui.service';
|
|
29
|
-
import { EnumTypeSplash } from '../../enums/common';
|
|
30
30
|
export declare class CommonAppComponentComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
31
31
|
_globalService: GlobalService;
|
|
32
32
|
_commonService: CommonService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common-app-component.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["components/common-app-component/common-app-component.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"common-app-component.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["components/common-app-component/common-app-component.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { ChangeDetectorRef, Component, ElementRef, HostListener, Input, Renderer2, ViewChild } from '@angular/core';
|
|
2
|
+
import { ChangeDetectorRef, Component, ElementRef, HostListener, Input, Renderer2, ViewChild, } from '@angular/core';
|
|
3
3
|
import { Title } from '@angular/platform-browser';
|
|
4
4
|
import { ActivatedRoute, NavigationStart, Router } from '@angular/router';
|
|
5
5
|
import { TranslateService } from '@ngx-translate/core';
|
|
@@ -11,11 +11,13 @@ import { ConfirmationService, MessageService, PrimeNGConfig } from 'tn-custom-pr
|
|
|
11
11
|
import { ApplicationContextService } from '../../app-context/application-context.service';
|
|
12
12
|
import { ComponentContextService } from '../../app-context/component-context.service';
|
|
13
13
|
import { ComCtxConstants } from '../../configs/component-context.constant';
|
|
14
|
+
import { EnumTypeSplash } from '../../enums/common';
|
|
14
15
|
import { CommandType } from '../../models/tn-client-command';
|
|
15
16
|
import { AuthenService } from '../../services/authen.service';
|
|
16
17
|
import { CommonService } from '../../services/common.service';
|
|
17
18
|
import { CoreConfigService } from '../../services/core-config.service';
|
|
18
19
|
import { CustomRouterService } from '../../services/custom-router.service';
|
|
20
|
+
import { CustomizeUiService } from '../../services/customize-ui.service';
|
|
19
21
|
import { EntityMetadataService } from '../../services/entity-metadata.service';
|
|
20
22
|
import { GenericGuardChildService } from '../../services/generic-guard-child.service';
|
|
21
23
|
import { GenericGuardService } from '../../services/generic-guard.service';
|
|
@@ -23,6 +25,7 @@ import { GlobalService } from '../../services/global.service';
|
|
|
23
25
|
import { MenuService } from '../../services/menu.service';
|
|
24
26
|
import { ModuleConfigService } from '../../services/module-config.service';
|
|
25
27
|
import { NotifierService } from '../../services/notifier.service';
|
|
28
|
+
import { PermissionService } from '../../services/permission.service';
|
|
26
29
|
import { SignalRService } from '../../services/signalr.service';
|
|
27
30
|
import { StorageUpdatedService } from '../../services/storage-updated.service';
|
|
28
31
|
import { StorageService } from '../../services/storage.service';
|
|
@@ -30,9 +33,6 @@ import { TnClientService } from '../../services/tn-client.service';
|
|
|
30
33
|
import { UserService } from '../../services/user.service';
|
|
31
34
|
import { ReportQueueComponent } from '../report-queue/report-queue.component';
|
|
32
35
|
import { TnCustomScrollbarComponent } from '../tn-custom-scrollbar/tn-custom-scrollbar.component';
|
|
33
|
-
import { PermissionService } from '../../services/permission.service';
|
|
34
|
-
import { CustomizeUiService } from '../../services/customize-ui.service';
|
|
35
|
-
import { EnumTypeSplash } from '../../enums/common';
|
|
36
36
|
export class CommonAppComponentComponent {
|
|
37
37
|
constructor(_globalService, _commonService, renderer, translate, _oauthService, _authenService, _userService, _router, _title, _signalRService, _storageUpdatedService, _customRouteService, _applicationContext, _componentContextService, _activatedRoute, _deviceDetectorService, _cd, _tnClientService, _coreConfigService, _notifierService, _entityMetadataService, _moduleConfigService, _translateService, _messageService, _confirmService, _menuService, _primengConfig, _storageService, _permissionService, _customizeUiService) {
|
|
38
38
|
this._globalService = _globalService;
|
|
@@ -803,4 +803,4 @@ CommonAppComponentComponent.propDecorators = {
|
|
|
803
803
|
allowAnonymous: [{ type: Input }],
|
|
804
804
|
handleShowPopupPermissionUtils: [{ type: HostListener, args: ['document:keypress', ['$event'],] }]
|
|
805
805
|
};
|
|
806
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWFwcC1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9jb21tb24tYXBwLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEosT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFTLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEtBQUssTUFBTSxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLGdDQUFnQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVVwRCxNQUFNLE9BQU8sMkJBQTJCO0lBbURwQyxZQUNXLGNBQTZCLEVBQzdCLGNBQTZCLEVBQzdCLFFBQW1CLEVBQ2xCLFNBQTJCLEVBQzNCLGFBQTJCLEVBQzNCLGNBQTZCLEVBQzdCLFlBQXlCLEVBQ3pCLE9BQWUsRUFDZixNQUFhLEVBQ2IsZUFBK0IsRUFDL0Isc0JBQTZDLEVBQzdDLG1CQUF3QyxFQUN4QyxtQkFBOEMsRUFDL0Msd0JBQWlELEVBQ2hELGVBQStCLEVBQ2hDLHNCQUE2QyxFQUM1QyxHQUFzQixFQUN0QixnQkFBaUMsRUFDakMsa0JBQXFDLEVBQ25DLGdCQUFpQyxFQUNuQyxzQkFBNkMsRUFDN0Msb0JBQXlDLEVBQ3pDLGlCQUFtQyxFQUNuQyxlQUErQixFQUMvQixlQUFvQyxFQUNwQyxZQUF5QixFQUN6QixjQUE2QixFQUM3QixlQUErQixFQUMvQixrQkFBcUMsRUFDckMsbUJBQXVDO1FBN0J4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2Isb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDN0Msd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQTJCO1FBQy9DLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDaEQsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQ2hDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDNUMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ25DLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDbkMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM3Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLG9CQUFlLEdBQWYsZUFBZSxDQUFxQjtRQUNwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO1FBdEUxQyxrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV4QixvQkFBZSxHQUFpQixJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQzNELDZCQUE2QjtRQUM3QixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXhCLDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUNsQyw4QkFBeUIsR0FBRyxJQUFJLENBQUM7UUFFakMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHcEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFNUIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUtiLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUUvQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQzlCLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUVoQiw0QkFBdUIsR0FBRyxXQUFXLENBQUM7UUFDL0MseUJBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBR3pCLG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLHNCQUFpQixHQUFXLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFrQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUNyRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFFN0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixFQUFFO1lBQzFDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDO1NBQzNFO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sS0FBSyxnQkFBZ0IsRUFBRTtZQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNuRDthQUNJO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDakQ7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQztZQUMvQixRQUFRLEVBQUUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7WUFDNUUsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQy9ELFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztZQUM3RCxVQUFVLEVBQUU7Z0JBQ1IsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO2FBQ3hJO1lBQ0QsZUFBZSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDNUYsS0FBSyxFQUFFLFNBQVM7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRTtZQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDdkU7UUFFRCxxQ0FBcUM7UUFDckMsNkJBQTZCO1FBQzdCLGdEQUFnRDtRQUNoRCx1Q0FBdUM7UUFDdkMsc0NBQXNDO1FBQ3RDLE1BQU07UUFFTixJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUNuQyxJQUFJLENBQUMsd0JBQXdCLEVBQzdCLGVBQWUsQ0FDbEIsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ25DLDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV2QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDakQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1NBQ3ZEO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FDekMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ2hDLENBQU0sRUFBRSxFQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsc0JBQXNCLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUUzRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07aUJBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRTVDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDckIsMkNBQTJDO2dCQUMzQyxnQ0FBZ0M7Z0JBQ2hDLDZFQUE2RTtnQkFDN0UsSUFBSTtnQkFFSixpREFBaUQ7Z0JBQ2pELG9IQUFvSDtnQkFDcEgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUUxRCxJQUFJLE1BQU0sSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFO29CQUM1QyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDOUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQztpQkFDbkM7cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7b0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUM5QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztpQkFDbkM7YUFDSjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDMUI7WUFFRCxxRUFBcUU7WUFDckUsdURBQXVEO1lBQ3ZELGlHQUFpRztZQUNqRyw2RUFBNkU7WUFDN0Usb0NBQW9DO1lBQ3BDLElBQUk7WUFFSixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSTtnQkFDQSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUN0QixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ3RDLENBQUM7b0JBRUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQ3RCLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsSUFBSSxDQUFDLEVBQUU7d0JBQ0gsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTs0QkFDekYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO3lCQUNoRjtvQkFDTCxDQUFDLENBQ0osQ0FBQztnQkFDTixDQUFDLENBQUMsQ0FBQzthQUNOO1lBQUMsT0FBTyxDQUFDLEVBQUU7YUFDWDtRQUNMLENBQUMsQ0FBQSxDQUNKLENBQUM7UUFFRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO1FBQzdGLElBQUksa0JBQWtCLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pELE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUMxQixDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7aUJBQzVCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1NBQzlDO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUMvRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDUCxJQUFJLEdBQUcsRUFBRSxDQUFDO2FBQ2I7WUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7YUFDdkQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDOUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNyRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxJQUFJLEVBQUUsRUFBRTtZQUN2RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQztTQUNuRDthQUNJO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO1NBQzFEO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDSixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3RJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNySCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQy9DLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEdBQVMsRUFBRTtZQUNqRyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMseUNBQXlDLENBQUMsQ0FBQzthQUNoRjtZQUNELE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hHLENBQUMsQ0FBQSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNuRixJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUU7Z0JBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNwQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdEI7aUJBQ0ksSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3RCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwRixJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUU7Z0JBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNwQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdEI7aUJBQ0ksSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3RCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RixJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7YUFDMUQ7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7YUFDekQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILG9DQUFvQztRQUNwQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBa0I7Z0JBQy9DLFdBQVcsRUFBRSxXQUFXLENBQUMsa0JBQWtCO2dCQUMzQyxJQUFJLEVBQUU7b0JBQ0YsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU87b0JBQ3pDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGNBQWM7aUJBQ3BHO2dCQUNELEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTO2FBQzFDLENBQUMsQ0FBQztRQUNQLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUdULDhGQUE4RjtRQUM5RixvQ0FBb0M7UUFDcEMsTUFBTTtRQUVOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1lBQ3BGLDJDQUEyQztZQUMzQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFO29CQUNoRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFDckQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyx5QkFBeUI7aUJBQzNDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDekI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDdEYsNkNBQTZDO1lBQzdDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUU7b0JBQ2hELE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUNyRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtpQkFDM0MsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN6QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRXRELG1DQUFtQztRQUNuQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsNEJBQTRCLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUMxRixPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDL0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsWUFBWSxlQUFlLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQzthQUN0QztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0VBQStFO1FBQy9FLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBRWhDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsRUFBRTt3QkFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDdEM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO3FCQUN0QztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDckYsSUFBSSxtQkFBbUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN6QyxJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUU7b0JBQzVHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDaEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2lCQUNqRjtnQkFDRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFO29CQUM1RSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztpQkFDMUQ7cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7aUJBQ3pEO2FBQ0o7aUJBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN2QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFO29CQUM1RSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztpQkFDMUQ7cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7aUJBQ3pEO2FBQ0o7WUFFRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDckYsSUFBSSxtQkFBbUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUNwRSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksbUJBQW1CLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFO29CQUNySCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ2hGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztpQkFDL0U7Z0JBRUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDOUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUNyQixJQUFJLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxJQUFJLEVBQUU7d0JBQ3hDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTs0QkFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7NEJBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQzt5QkFDcEQ7cUJBQ0o7eUJBQ0k7d0JBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFOzRCQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQzs0QkFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO3lCQUNyRDtxQkFDSjtpQkFDSjthQUNKO2lCQUNJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7YUFDMUQ7UUFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFVCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZTtRQUNYLHlCQUF5QjtRQUN6QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ3JGLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO2dCQUM3RixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsZUFBZTtpQkFDaEQsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixPQUFPO2FBQ1Y7WUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUVqRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUMsRUFBRTtnQkFDOUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7YUFDMUI7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7YUFDMUI7U0FDSjthQUNJO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLDZHQUE2RztZQUM3RywyR0FBMkc7WUFDM0csVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQztJQUVLLGFBQWE7O1lBQ2YsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN2QixPQUFPO2FBQ1Y7WUFDRCxJQUFJO2dCQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDNUI7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1lBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1gsQ0FBQztLQUFBO0lBRU8sbUJBQW1CO1FBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDWixjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTTtRQUNuQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxNQUFNLEVBQUU7WUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN2QzthQUNJO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDM0M7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLE9BQU8sQ0FBQyxPQUFPLEdBQUcsd0JBQXdCLENBQUM7SUFDL0MsQ0FBQztJQUVPLHlCQUF5QjtRQUM3QixrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLElBQ0ksR0FBRyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFDOUI7Z0JBQ0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FDekMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQy9CLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQUM7YUFFTDtpQkFDSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2pDO2lCQUNJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQzVCLGtCQUFrQjtnQkFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN2RDtpQkFDSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksb0JBQW9CLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3JELFNBQVM7Z0JBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNoQztpQkFDSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksMkJBQTJCLEVBQUU7YUFDakQ7aUJBQ0ksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLGlCQUFpQixFQUFFO2FBQ3ZDO2lCQUNJO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ25DO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FDekMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQy9CLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQUM7WUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLDJCQUEyQixFQUFFLENBQUM7U0FDcEQ7YUFDSTtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakU7WUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLGdDQUFnQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO29CQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDdEM7aUJBQ0o7WUFDTCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ3RDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELHlCQUF5QjtRQUN6QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUN0RzthQUNJO1lBQ0QsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDbEU7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUFDLEdBQWU7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLGVBQWU7UUFDbkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDO1FBQ3JFLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDN0MsT0FBTyxHQUFHLENBQUM7U0FDZDthQUNJO1lBQ0QsR0FBRyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDMUIsT0FBTyxHQUFHLENBQUM7U0FDZDtJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFHO1FBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDcEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMvRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztTQUM1RixDQUFDLENBQUMsQ0FBQztRQUNKLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3JFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ2xCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDcEUsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFLO1FBQ2hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNsRSxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7WUFDbkYsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQUs7UUFDbEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUN2RSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWU7ZUFDdEQsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtZQUNoRSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxhQUFhLEdBQVE7Z0JBQ3BELGFBQWEsRUFBTyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQU8sRUFBRSxFQUFFLElBQUksRUFBTyxFQUFFLEVBQUU7YUFDckYsQ0FBQztZQUNGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztTQUM3RTtJQUNMLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUM1RSxDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUM7SUFDN0UsQ0FBQztJQUVELHlCQUF5QixDQUFDLElBQUk7UUFDMUIsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO2FBQ3pEO2lCQUNJO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQzthQUN6RDtTQUNKO2FBQ0k7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUN2RDtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsY0FBYztJQUdkLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFLO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDcEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMvRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNyRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMseUJBQXlCO1NBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUosVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUN2RSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBSztRQUNwQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFDdEUsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQWE7UUFDN0IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLENBQUMsSUFBSSxDQUFDO1FBRXZDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDcEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMvRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNyRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMseUJBQXlCO1NBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUosSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLHlCQUF5QixJQUFJLElBQUksRUFBRTtnQkFFeEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztvQkFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO2lCQUNwRDthQUNKO2lCQUNJO2dCQUNELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7b0JBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztpQkFDckQ7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFZO1FBQ2xCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRTdCLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBWTtRQUNyQixPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUUvQixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQVk7UUFDdkIsT0FBTyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFaEMsQ0FBQztJQUVELGNBQWM7UUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQU87UUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDOUcsSUFBSSxHQUFHLEVBQUU7WUFDTCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7U0FDbEI7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsV0FBVztRQUNQLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELGNBQWM7SUFDZCxZQUFZLENBQUMsS0FBSztRQUNkLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDeEIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQU87UUFDdkIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU5RCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sdUJBQXVCLENBQUMsT0FBZSxFQUFFLFNBQWdCLEVBQUUsVUFBaUI7UUFDaEYsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQzthQUNqRTtpQkFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQzdGLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDekI7UUFFTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxHQUFHO1FBQ25CLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEIsOERBQThEO1FBQzlELHlKQUF5SjtRQUN6SiwrR0FBK0c7UUFDL0cscUVBQXFFO1FBQ3JFLHlKQUF5SjtRQUN6SiwrR0FBK0c7UUFDL0cscUVBQXFFO1FBQ3JFLHlDQUF5QztRQUN6QyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3RCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3QixnRkFBZ0Y7UUFDaEYsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMscUNBQXFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7UUFDdkYsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7UUFDaEUsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsc0JBQXNCLENBQUMsV0FBVztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQUs7UUFDdkIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQUs7UUFDeEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBR0QsOEJBQThCLENBQUMsS0FBb0I7UUFDL0MsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUN2RSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdEUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7YUFFNUM7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDL0I7U0FDSjthQUNJO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFTyxRQUFRLENBQUMsS0FBWTtRQUN6QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO1lBQ3pDLE9BQU87U0FDVjthQUNJO1lBQ0QsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO2dCQUNwQixLQUFLLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQzthQUN6RztpQkFDSTtnQkFDRCxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUNyRjtTQUNKO0lBQ0wsQ0FBQzs7O1lBcjJCSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsd3NRQUEwQztnQkFFMUMsU0FBUyxFQUFFLENBQUMsdUJBQXVCLEVBQUUscUJBQXFCLENBQUM7O2FBQzlEOzs7WUF0QlEsYUFBYTtZQU5iLGFBQWE7WUFkb0YsU0FBUztZQUcxRyxnQkFBZ0I7WUFDSixZQUFZO1lBU3hCLGFBQWE7WUFlYixXQUFXO1lBMUI2QixNQUFNO1lBRDlDLEtBQUs7WUF1QkwsY0FBYztZQUNkLHFCQUFxQjtZQVRyQixtQkFBbUI7WUFQbkIseUJBQXlCO1lBQ3pCLHVCQUF1QjtZQVJ2QixjQUFjO1lBSWQscUJBQXFCO1lBTk4saUJBQWlCO1lBMkJoQyxlQUFlO1lBWmYsaUJBQWlCO1lBUWpCLGVBQWU7WUFOZixxQkFBcUI7WUFLckIsbUJBQW1CO1lBbkJuQixnQkFBZ0I7WUFLSyxjQUFjO1lBQW5DLG1CQUFtQjtZQWFuQixXQUFXO1lBYjBCLGFBQWE7WUFrQmxELGNBQWM7WUFLZCxpQkFBaUI7WUFDakIsa0JBQWtCOzs7dUJBYXRCLFNBQVMsU0FBQyxVQUFVOzJCQUNwQixTQUFTLFNBQUMsY0FBYzswQkFDeEIsU0FBUyxTQUFDLGFBQWE7MkJBQ3ZCLFNBQVMsU0FBQyxjQUFjOzJCQUN4QixTQUFTLFNBQUMsY0FBYzswQkFDeEIsU0FBUyxTQUFDLGFBQWE7MEJBQ3ZCLFNBQVMsU0FBQyxvQkFBb0I7NEJBQzlCLFNBQVMsU0FBQyxXQUFXOzRCQUVyQixLQUFLOzZCQUNMLEtBQUs7NkNBc3pCTCxZQUFZLFNBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25TdGFydCwgUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQXV0aENvbmZpZywgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcbmltcG9ydCAqIGFzIEhhbW1lciBmcm9tICdoYW1tZXJqcyc7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2UsIFByaW1lTkdDb25maWcgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvcmUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LW1ldGFkYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHZW5lcmljR3VhcmRDaGlsZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nZW5lcmljLWd1YXJkLWNoaWxkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHZW5lcmljR3VhcmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2VuZXJpYy1ndWFyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RvcmFnZVVwZGF0ZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS11cGRhdGVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRuQ2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RuLWNsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXBvcnRRdWV1ZUNvbXBvbmVudCB9IGZyb20gJy4uL3JlcG9ydC1xdWV1ZS9yZXBvcnQtcXVldWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICcuLi90bi1jdXN0b20tc2Nyb2xsYmFyL3RuLWN1c3RvbS1zY3JvbGxiYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21pemVVaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b21pemUtdWkuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1UeXBlU3BsYXNoIH0gZnJvbSAnLi4vLi4vZW51bXMvY29tbW9uJztcclxuXHJcbmRlY2xhcmUgbGV0IHRpbnltY2U6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjb21tb24tYXBwLWNvbXBvbmVudCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbW9uLWFwcC1jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb21tb24tYXBwLWNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZSwgRW50aXR5TWV0YWRhdGFTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uQXBwQ29tcG9uZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ29rQnV0dG9uJykgb2tCdXR0b246IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdjYW5jZWxCdXR0b24nKSBjYW5jZWxCdXR0b246IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdxdWlja05vdGVCdCcpIHF1aWNrTm90ZUJ0OiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncXVpY2tOb3RlQnQxJykgcXVpY2tOb3RlQnQxOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncXVpY2tOb3RlQnQyJykgcXVpY2tOb3RlQnQyOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncGlubmVkTm90ZXMnKSBwaW5uZWROb3RlczogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoUmVwb3J0UXVldWVDb21wb25lbnQpIHJlcG9ydFF1ZXVlOiBSZXBvcnRRdWV1ZUNvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbGJhcicpIHNjcm9sbEJhck1lbnU6IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50O1xyXG5cclxuICAgIEBJbnB1dCgpIHNob3dRdWlja05vdGUgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgYWxsb3dBbm9ueW1vdXMgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgLy8gcm9vdFZlcnNpb25EZXBsb3kgPSAnMS4zJztcclxuICAgIGN1cnJlbnRSb3V0ZSA9ICcnO1xyXG4gICAgcGFnZUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgZmlyc3RUaW1lTG9naW4gPSBmYWxzZTtcclxuICAgIHNob3dBZGROb3RlRm9ybSA9IGZhbHNlO1xyXG4gICAgcGlubmVkTm90ZURhdGE6IGFueTtcclxuICAgIHBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPSBmYWxzZTtcclxuICAgIHBpbm5lZE5vdGVzTWF4aW1pemVTdGF0dXMgPSBudWxsO1xyXG4gICAgZW52aXJvbm1lbnQ6IGFueTtcclxuICAgIGNhcHR1cmVNb2RlID0gZmFsc2U7XHJcbiAgICBwMDogYW55O1xyXG4gICAgcDE6IGFueTtcclxuICAgIGxvZ2dlZEluID0gZmFsc2U7XHJcbiAgICBzdWJzY3JpYmxlOiBTdWJzY3JpcHRpb247XHJcbiAgICBvbmx5U2hvd01haW5Db250ZW50ID0gZmFsc2U7XHJcblxyXG4gICAgYXBwQ29kZSA9ICcnO1xyXG5cclxuICAgIHNlYXJjaE1lbnVSZXN1bHQ6IGFueVtdO1xyXG4gICAgc2VhcmNoTWVudUlucHV0OiBzdHJpbmc7XHJcblxyXG4gICAgc2hvd1Bpbm5lZE1lbnUgPSBmYWxzZTtcclxuICAgIGlzSW5QaW5uZWRNZW51ID0gZmFsc2U7XHJcbiAgICBpc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gZmFsc2U7XHJcbiAgICBtZW51TW9kZWw6IGFueTtcclxuICAgIHdhaXRpbmcgPSBmYWxzZTtcclxuICAgIG1lc3NhZ2VXYWl0aW5nOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgc2hvd1JlamVjdENvbmZpcm0gPSB0cnVlO1xyXG5cclxuICAgIHJlYWRvbmx5IGtleVByZXNzUGVybWlzc2lvblV0aWxzID0gJ3BwcHBwcHBwcCc7XHJcbiAgICBjdXJyZW50S2V5UHJlc3NJbmRleCA9IDA7XHJcbiAgICByb290RGF0YTogYW55O1xyXG5cclxuICAgIEVudW1UeXBlU3BsYXNoID0gRW51bVR5cGVTcGxhc2g7XHJcbiAgICBsYXlvdXRMb2FkaW5nUGFnZTogc3RyaW5nID0gRW51bVR5cGVTcGxhc2guTkVXX1YxO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBfZ2xvYmFsU2VydmljZTogR2xvYmFsU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfdGl0bGU6IFRpdGxlLFxyXG4gICAgICAgIHByaXZhdGUgX3NpZ25hbFJTZXJ2aWNlOiBTaWduYWxSU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9zdG9yYWdlVXBkYXRlZFNlcnZpY2U6IFN0b3JhZ2VVcGRhdGVkU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jdXN0b21Sb3V0ZVNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25Db250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfY29tcG9uZW50Q29udGV4dFNlcnZpY2U6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwdWJsaWMgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jb3JlQ29uZmlnU2VydmljZTogQ29yZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbmZpcm1TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX21lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9wcmltZW5nQ29uZmlnOiBQcmltZU5HQ29uZmlnLFxyXG4gICAgICAgIHByaXZhdGUgX3N0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9wZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfY3VzdG9taXplVWlTZXJ2aWNlOiBDdXN0b21pemVVaVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xyXG4gICAgICAgIHRoaXMuYXBwQ29kZSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwQ29kZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5rZXlQcmVzc1Blcm1pc3Npb25VdGlscyA9IHRoaXMuZW52aXJvbm1lbnQua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zdG9yYWdlID09PSAnc2Vzc2lvblN0b3JhZ2UnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldFN0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0U3RvcmFnZShsb2NhbFN0b3JhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJpbWVuZ0NvbmZpZy5zZXRUcmFuc2xhdGlvbih7XHJcbiAgICAgICAgICAgIGRheU5hbWVzOiBbJ0No4bunIG5o4bqtdCcsICdUaOG7qSAyJywgJ1Ro4bupIDMnLCAnVGjhu6kgNCcsICdUaOG7qSA1JywgJ1Ro4bupIDYnLCAnVGjhu6kgNyddLFxyXG4gICAgICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ0NOJywgJ1RoMicsICdUaDMnLCAnVGg0JywgJ1RoNScsICdUaDYnLCAnVGg3J10sXHJcbiAgICAgICAgICAgIGRheU5hbWVzTWluOiBbJ0NOJywgJ1RoMicsICdUaDMnLCAnVGg0JywgJ1RoNScsICdUaDYnLCAnVGg3J10sXHJcbiAgICAgICAgICAgIG1vbnRoTmFtZXM6IFtcclxuICAgICAgICAgICAgICAgICdUaMOhbmcgMScsICdUaMOhbmcgMicsICdUaMOhbmcgMycsICdUaMOhbmcgNCcsICdUaMOhbmcgNScsICdUaMOhbmcgNicsICdUaMOhbmcgNycsICdUaMOhbmcgOCcsICdUaMOhbmcgOScsICdUaMOhbmcgMTAnLCAnVGjDoW5nIDExJywgJ1Row6FuZyAxMidcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ1QxJywgJ1QyJywgJ1QzJywgJ1Q0JywgJ1Q1JywgJ1Q2JywgJ1Q3JywgJ1Q4JywgJ1Q5JywgJ1QxMCcsICdUMTEnLCAnVDEyJ10sXHJcbiAgICAgICAgICAgIHRvZGF5OiAnSMO0bSBuYXknLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXN0b21pemVVaVNlcnZpY2Uuc2V0Q3VzdG9taXplKHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNldFNlcnZpY2Uoe1xyXG4gICAgICAgIC8vICAgICBlbnY6IHRoaXMuZW52aXJvbm1lbnQsXHJcbiAgICAgICAgLy8gICAgIHRyYW5zbGF0ZVNlcnZpY2U6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgLy8gICAgIG1lc3NhZ2VTZXJ2aWNlOiBfbWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgLy8gICAgIGNvbmZpcm1TZXJ2aWNlOiBfY29uZmlybVNlcnZpY2VcclxuICAgICAgICAvLyB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmFkZFJvb3RDb250ZXh0KFxyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZSxcclxuICAgICAgICAgICAgX2FjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RpdGxlLnNldFRpdGxlKHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi50aXRsZSk7XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKCd2bicpO1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZSgndm4nKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0VGlueU1jZSgpO1xyXG5cclxuICAgICAgICBjb25zdCBjZmcgPSB0aGlzLmdldENvbmZpZ0F1dGhlbigpO1xyXG4gICAgICAgIC8vIENodXnhu4NuIHNhbmcgc2Vzc2lvbiBzdG9yYWdlLCBu4bq/dSDhu5VuIHRow6wgeMOzYSBkw7JuZyBuw6B5IMSRaVxyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5zZXRTdG9yYWdlKHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldFN0b3JhZ2UoKSk7XHJcbiAgICAgICAgdGhpcy5pbmplY3RDb25maWcoY2ZnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVXaXRoTmV3Q29uZmlnQXBpKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRPYmplY3RBbnkoJ3BlcnNvbmFsaXplJyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnJlcGxheVN1YnNjcmliZShcclxuICAgICAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQsXHJcbiAgICAgICAgICAgIGFzeW5jIHJzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5zZXR1cFN5bmNDYWNoZUVudGl0eU1ldGFkYXRhKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLmNvbmZpZ1xyXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKHJvdXRlID0+IHRoaXMuYWRkR3VhcmQocm91dGUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maXJzdFRpbWVMb2dpbikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGzhuqduIMSR4bqndSDEkcSDbmcgbmjhuq1wIHRow6wgdsOgbyB0cmFuZyBt4bq3YyDEkeG7i25oXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMucm9vdFZlcnNpb25EZXBsb3kpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgndmVyc2lvbkRlcGxveScsIHRoaXMucm9vdFZlcnNpb25EZXBsb3kpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGjDqm0gdsOgbyDEkeG7gyDEkcOhbmggZOG6pXUgbOG6p24gZOG6p3UgbG9naW4gPT4gxJHhu4MgeOG7rSBsw71cclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2VyQSDEkWFnIOG7nyBtw6BuIGjDrG5oIDEgPT4gxJHEg25nIHh14bqldCA9PiDEkcSDbmcgbmjhuq1wIHbDoG8gdMOgaSBraG/huqNuIFVzZXJCIGtow7RuZyBjw7MgcXV54buBbiBtw6BuIGjDrG5oIDEgPT4gcmVkaXJlY3QgduG7gSBcIi9cIlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRfdXNlcl9pbmZvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnZmlyc3RUaW1lTG9naW4nLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRVcmwgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdjdXJyZW50VXJsJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRVcmwgJiYgb2xkVXJsICE9IHRvcC5sb2NhdGlvbi5ocmVmICsgJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudFVybCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IGAke29sZFVybH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50VXJsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0UmVkaXJlY3QoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgdmVyc2lvbkRlcGxveSA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3ZlcnNpb25EZXBsb3knKTtcclxuICAgICAgICAgICAgICAgIC8vIGxldCB2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uID0gdGhpcy5yb290VmVyc2lvbkRlcGxveTtcclxuICAgICAgICAgICAgICAgIC8vIGlmICh2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uICYmIHZlcnNpb25EZXBsb3kgJiYgKCt2ZXJzaW9uRGVwbG95KSA8ICgrdmVyc2lvbkZyb21BcHBsaWNhdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCd2ZXJzaW9uRGVwbG95JywgdmVyc2lvbkZyb21BcHBsaWNhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLmluaXQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2Uuc3RhcnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lzdGVuY3lIdWInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Jyb2FkY2FzdE1lc3NhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckF1dGhvcml6ZUNhY2hlLmJpbmQodGhpcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnN0YXJ0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vdGlmaWNhdGlvbkh1YicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVmcmVzaEZvclVwZGF0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5hcHBDb2RlcyAmJiBkYXRhLmFwcENvZGVzLnNvbWUoeCA9PiB4LnRvVXBwZXJDYXNlKCkgPT0gdGhpcy5hcHBDb2RlLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLkZPUkNFX1JFTE9BRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGVmYXVsdE1vZHVsZVBhZ2VzID0gdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZS5kZWZhdWx0TW9kdWxlUGFnZXM7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRNb2R1bGVQYWdlcyAmJiBkZWZhdWx0TW9kdWxlUGFnZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZm9yRWFjaChtID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBkZWZhdWx0TW9kdWxlUGFnZXMuZmluZChwID0+IHAuY29kZSA9PSBtLmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhZ2UgJiYgcGFnZS5kZWZhdWx0UGFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG0udXJsID0gcGFnZS5kZWZhdWx0UGFnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBIYW1tZXIuZGVmYXVsdHMuY3NzUHJvcHMudXNlclNlbGVjdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnUVVJQ0tfTk9URV9QT1BVUC5DTE9TRV9QT1BVUCcsIHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsLnNob3dRdWlja05vdGVGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnR09fSE9NRScsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpO1xyXG4gICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ1RPR0dMRV9MQVlPVVQnLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGEub25seVNob3dNYWluQ29udGVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSBkYXRhLm9ubHlTaG93TWFpbkNvbnRlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdNQUlOX0NPTlRFTlRfT05MWScsIHJzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gcnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5TSE9XX1JFSkVDVF9DT05GSVJNLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVqZWN0Q29uZmlybSA9IGRhdGE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbiB8fCB0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbiA9PSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLmxheW91dExvYWRpbmdQYWdlID0gRW51bVR5cGVTcGxhc2guREVGQVVMVDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubGF5b3V0TG9hZGluZ1BhZ2UgPSB0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIHRoaXMucm9vdERhdGEgPSByb290LmRhdGE7XHJcbiAgICAgICAgcm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YSA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZmluZCh4ID0+IHguY29kZS50b0xvd2VyQ2FzZSgpID09IHRoaXMuYXBwQ29kZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICByb290LmRhdGEuYXBwT3JpZ2luID0gdGhpcy5lbnZpcm9ubWVudC5lbmFibGVCYXNlSHJlZiA/IGAvJHtyb290LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLmNvZGUudG9Mb3dlckNhc2UoKX0vYCA6ICcvJztcclxuICAgICAgICByb290LmRhdGEuYWxsb3dBbm9ueW1vdXMgPSB0aGlzLmFsbG93QW5vbnltb3VzO1xyXG4gICAgICAgIC8vIGdldCBjdXJyZW50IFVzZXJcclxuICAgICAgICB0aGlzLl91c2VyU2VydmljZS5wb3B1bGF0ZUN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULk5FRURfQ0xFQVJfUEVSTUlTU0lPTl9DQUNIRSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5jbGVhclBlcm1pc3Npb25DYWNoZUFsbCgpO1xyXG4gICAgICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB0cm9uZyBsw7pjIGNsZWFyIGNhY2hlIHBow6JuIHF1eeG7gW4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5nZXRBbGxCYXNlUGVybWlzc2lvbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5maXJlUmVwbGF5RXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9BUlJPV0xFRlQsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9BUlJPV1JJR0hULCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlBFUlNPTkFMSVpFX1VQREFURUQsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gc2VuZCBjdXJyZW50IHZlcnNpb24gdG8gdG4gY2xpZW50XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RuQ2xpZW50U2VydmljZS5zZW5kQ29tbWFuZCg8VG5DbGllbnRDb21tYW5kPntcclxuICAgICAgICAgICAgICAgIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5TeW5jVmVyaW9uVG5DbGllbnQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ6IHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluLmFwcERvbWFpbiArICcvJyArIHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci5lbmRwb2ludFVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGtleTogdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLmNsaWVudEtleVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuXHJcblxyXG4gICAgICAgIC8vIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuQ09NTU9OLkNMT1NFX0VESVRfRk9STSwgKGRhdGEpID0+IHtcclxuICAgICAgICAvLyAgICAgdGhpcy5zaG93QWRkTm90ZUZvcm0gPSBmYWxzZTtcclxuICAgICAgICAvLyB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UucmVwbGF5U3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlFVSUNLX05PVEVfUElOLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHNldCBwaW5uZWQgbm90ZSBsb2NhdGlvbiBhZnRlciBjbGljayBwaW5cclxuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdwaW5uZWROb3Rlc0xvY2F0aW9uJywge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IChyZWN0LmxlZnQpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbmltaXplOiB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXNcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQaW5uZWROb3RlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnJlcGxheVN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5RVUlDS19OT1RFX1VOUElOLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHNldCBwaW5uZWQgbm90ZSBsb2NhdGlvbiBhZnRlciBjbGljayB1cHBpblxyXG4gICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSByZWN0LmhlaWdodCksXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogKHJlY3QubGVmdCksXHJcbiAgICAgICAgICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsID0gW107XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSBjaGFuZ2UgZW50aXR5IG1ldGFkYXRhXHJcbiAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLnN1YnNjcmliZUNoYW5nZWRMb2NhbFN0b3JhZ2UoJ0tFWV9FTlRJVFlfTUVUREFUQV9VUERBVEVEJywgKHJzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlbnRpdHkgbWV0YWRhdGEgY2hhbmdlZCcsIHJzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gdHJpZ2dlciB1cGRhdGUgc3RvcmFnZSBrZXlcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19XQUlUX0JPWCwgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2FpdGluZyA9IGRhdGEuc2hvdztcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlV2FpdGluZyA9IFsuLi5kYXRhLm1lc3NhZ2VdO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9vdERhdGEuaHR0cFJlcXVlc3RMaXN0ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gbuG6v3UgYWxsb3cgYW5vbnltb3VzIHRow6wgbG9hZCByYSBjw6FjIHBow6JuIGjhu4cgY2hvIHBow6lwIHbDoG8ga2jDtG5nIGPhuqduIMSRxINuZyBuaOG6rXBcclxuICAgICAgICBpZiAodGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByb290LnN1YnNjcmliZSgnTE9HSU4nLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuX2NkLmRldGFjaCgpO1xyXG4gICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBxdWlja05vdGVCdExvY2F0aW9uID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0T2JqZWN0QW55KCdxdWlja05vdGVCdExvY2F0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChxdWlja05vdGVCdExvY2F0aW9uICYmIHRoaXMucXVpY2tOb3RlQnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWlja05vdGVCdExvY2F0aW9uLmJvdHRvbSA8IHdpbmRvdy5pbm5lckhlaWdodCAtIDUwICYmIHF1aWNrTm90ZUJ0TG9jYXRpb24ucmlnaHQgPCB3aW5kb3cuaW5uZXJXaWR0aCAtIDUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmJvdHRvbSA9IHF1aWNrTm90ZUJ0TG9jYXRpb24uYm90dG9tICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSBxdWlja05vdGVCdExvY2F0aW9uLnJpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucXVpY2tOb3RlQnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwaW5uZWROb3Rlc0xvY2F0aW9uID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0T2JqZWN0QW55KCdwaW5uZWROb3Rlc0xvY2F0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChwaW5uZWROb3Rlc0xvY2F0aW9uICYmIHRoaXMucGlubmVkTm90ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGlubmVkTm90ZXNMb2NhdGlvbi5ib3R0b20gPCB3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LmhlaWdodCAmJiBwaW5uZWROb3Rlc0xvY2F0aW9uLmxlZnQgPCB3aW5kb3cuaW5uZXJXaWR0aCAtIDI1MCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5zdHlsZS5ib3R0b20gPSBwaW5uZWROb3Rlc0xvY2F0aW9uLmJvdHRvbSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBwaW5uZWROb3Rlc0xvY2F0aW9uLmxlZnQgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9IHBpbm5lZE5vdGVzTG9jYXRpb24ubWluaW1pemU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0udGl0bGVQYWRkaW5nQm90dG9tID0gJzBweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnNnB4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5waW5uZWROb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcclxuICAgICAgICByb290LnJlcG9ydFF1ZXVlID0gdGhpcy5yZXBvcnRRdWV1ZTtcclxuICAgICAgICB0aGlzLm1lbnVNb2RlbCA9IHRoaXMuX21lbnVTZXJ2aWNlLmdldE1lbnVJdGVtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRSZWRpcmVjdCgpIHtcclxuICAgICAgICAvLyBjaGVjayBkZWZhdWx0IHJlZGlyZWN0XHJcbiAgICAgICAgaWYgKHRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgYXBwU2V0dGluZyA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudEFwcE1ldGFkYXRhO1xyXG4gICAgICAgICAgICBpZiAoIWFwcFNldHRpbmcgJiYgdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW4uZGVmYXVsdFJlZGlyZWN0ICYmIHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpbi5kZWZhdWx0UmVkaXJlY3RcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGF0aFRvQ2hlY2sgPSB0aGlzLmVudmlyb25tZW50LmVuYWJsZUJhc2VIcmVmID8gYC8ke2FwcFNldHRpbmcuY29kZS50b0xvd2VyQ2FzZSgpfS9gIDogJy8nO1xyXG5cclxuICAgICAgICAgICAgaWYgKChsb2NhdGlvbi5wYXRobmFtZSA9PT0gJy8nIHx8IGxvY2F0aW9uLnBhdGhuYW1lID09PSAnJyB8fCBsb2NhdGlvbi5wYXRobmFtZSA9PT0gcGF0aFRvQ2hlY2spKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1c2VyIG5vdCB2YWxpZCB0b2tlbicsIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2FjY2Vzc190b2tlbicpKTtcclxuICAgICAgICAgICAgLy8gVE9ETzogTmFtTkggWOG7rSBsw70gdOG6oW0gY2hvIHRyxrDhu51uZyBo4bujcCDEkcSDbmcgbmjhuq1wIGzhuqduIMSR4bqndSBuaMawbmcgY2jhuqF5IMSR4bq/biDEkcOieSBtw6AgYWNjZXNzIHRva2VuIHbhuqtuIGtow7RuZyBo4bujcCBs4buHXHJcbiAgICAgICAgICAgIC8vIFjhu60gbMO9IHRyaeG7h3QgxJHhu4MgYuG6sW5nIGPDoWNoIHTDrG0gUEEgYuG6r3QgZXZlbnQgY+G7p2EgYW5ndWxhcjIgb2lkYyDEkeG7gyB44butIGzDvSB0csaw4bubYyBraGkgxJHhur9uIGLGsOG7m2MgZGVmYXVsdCByZWRpcmVjdFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRldGVjdENoYW5nZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NkWydkZXN0cm95ZWQnXSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2V4Y2VwdGlvbiBvbiBkZXRlY3QgY2hhbmdlJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhckF1dGhvcml6ZUNhY2hlKCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHNlc3Npb25TdG9yYWdlKVxyXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gL15BVVRIT1JJWkFUSU9OLy50ZXN0KGl0ZW0pKVxyXG4gICAgICAgICAgICAuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzVHJhcChldmVudCwgZGlyZWN0KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBpZiAoZGlyZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0VGlueU1jZSgpIHtcclxuICAgICAgICB0aW55bWNlLmJhc2VVUkwgPSAnL2Fzc2V0cy92ZW5kb3IvdGlueW1jZSc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25maWd1cmVXaXRoTmV3Q29uZmlnQXBpKCkge1xyXG4gICAgICAgIC8vIGZvciBmaXJzdCBsb2dpblxyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5ldmVudHMuc3Vic2NyaWJlKGV2dCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGV2dC50eXBlID09ICd0b2tlbl9yZWNlaXZlZCdcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cExvY2FsU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwU2Vzc2lvblN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VVcGRhdGVkU2VydmljZS5jbGVhbnVwU3RvcmFnZVNlcnZpY2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVSZXBsYXlFdmVudChcclxuICAgICAgICAgICAgICAgICAgICBDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX1JFQURZLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lTG9naW5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09PSAndG9rZW5fZXhwaXJlcycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS50cnlMb2dpbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09PSAnbG9nb3V0Jykge1xyXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCBzdG9yYWdlXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBMb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cFNlc3Npb25TdG9yYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlVXBkYXRlZFNlcnZpY2UuY2xlYW51cFN0b3JhZ2VTZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UucmV2b2tlVG9rZW5BbmRMb2dvdXQobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ3Nlc3Npb25fdGVybWluYXRlZCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRfdXNlcl9pbmZvJyk7XHJcbiAgICAgICAgICAgICAgICAvLyBsb2dvdXRcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ2Rpc2NvdmVyeV9kb2N1bWVudF9sb2FkZWQnKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ3Rva2VuX3JlZnJlc2hlZCcpIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdsb2dpbiBldmVudCcsIGV2dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudCgpO1xyXG4gICAgICAgIGlmICh0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVSZXBsYXlFdmVudChcclxuICAgICAgICAgICAgICAgIENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfUkVBRFksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2N1cnJlbnRVcmwnKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnY3VycmVudFVybCcsIHRvcC5sb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdOG7lW5nIGjhu6NwIGJp4bq/biBwb3NpdGlvblxyXG4gICAgICAgIGlmICh0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdteWl0ZW0nKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoJ1BPU0lUSU9OX0xPQURFRCcsIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ215aXRlbScpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGfhu41pIGFwaSDEkeG7gyB04buVbmcgaOG7o3AgZOG7ryBsaXVlamUuLi5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KCdQT1NJVElPTl9MT0FERUQnLCB7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5qZWN0Q29uZmlnKGNmZzogQXV0aENvbmZpZykge1xyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5jb25maWd1cmUoY2ZnKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENvbmZpZ0F1dGhlbigpIHtcclxuICAgICAgICBjb25zdCBjZmcgPSB0aGlzLl9jb3JlQ29uZmlnU2VydmljZS5nZXRBdXRoQ29uZmlnKCk7XHJcbiAgICAgICAgY29uc3QgdHlwZUxvZ2luID0gdGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmF1dGhlblR5cGU7XHJcbiAgICAgICAgaWYgKHR5cGVMb2dpbiAmJiB0eXBlTG9naW4uaW5jbHVkZXMoJ2ltcGxpY2l0JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNmZztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNmZy5yZXNwb25zZVR5cGUgPSAnY29kZSc7XHJcbiAgICAgICAgICAgIHJldHVybiBjZmc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZU1lbnVBY3RpdmUodG9wKSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxCYXJNZW51LnNjcm9sbFRvVG9wKHRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlRHJvcHBlZChldmVudCkge1xyXG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgncXVpY2tOb3RlQnRMb2NhdGlvbicsIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSA1MCksIHJpZ2h0OiAod2luZG93LmlubmVyV2lkdGggLSByZWN0LmxlZnQgLSA1MClcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVTdGFydGVkKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVNb3ZpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVByZXNzKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVQcmVzc2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKHRydWUpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZU9uY2UoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQk9EWV9NT1VTRV9ET1dOLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlUHJlc3NVcChldmVudCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZVByZXNzaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVBZGROb3RlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVNb3ZpbmdcclxuICAgICAgICAgICAgJiYgIXRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlUHJlc3NpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5ub3RlRGF0YU1vZGVsID0gPGFueT57XHJcbiAgICAgICAgICAgICAgICBlZGl0Rm9ybU1vZGVsOiA8YW55Pnsgc2hvd1F1aWNrTm90ZUZvcm06IHRydWUsIHBvcHVwU2l6ZTogPGFueT57fSwgZGF0YTogPGFueT57fSB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZWRpdEZvcm1Nb2RlbC5zaG93UXVpY2tOb3RlRm9ybSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVNob3dBbGxOb3RlcygpIHtcclxuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xyXG4gICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5nZXRBcHBTd2l0Y2hlclVybCgndXNlcicpfS9tYWluL3F1aWNrLW5vdGVgO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVNob3dTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xyXG4gICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5nZXRBcHBTd2l0Y2hlclVybCgndXNlcicpfS9tYWluL3BlcnNvbmFsaXplYDtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKHNob3cpIHtcclxuICAgICAgICBpZiAoc2hvdykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0MS5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzU1cHgnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICcxMDBweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0MS5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzY1cHgnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICcxMjBweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQxLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNXB4JztcclxuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICc1cHgnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBQaW5uZWQgTm90ZVxyXG4gICAgZ2V0UGlubmVkTm90ZXMoKSB7XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwaW5uZWROb3Rlc0Ryb3BwZWQoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxyXG4gICAgICAgICAgICBsZWZ0OiAocmVjdC5sZWZ0KSxcclxuICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucGlubmVkTm90ZXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHBpbm5lZE5vdGVzU3RhcnRlZChldmVudCkge1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucGlubmVkTm90ZXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBpbm5lZE5vdGVzTWluaW1pemUoZGF0YTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9ICFkYXRhO1xyXG5cclxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxyXG4gICAgICAgICAgICBsZWZ0OiAocmVjdC5sZWZ0KSxcclxuICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9PSB0cnVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnMHB4JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLnRpdGxlUGFkZGluZ0JvdHRvbSA9ICc2cHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5QaW5Ob3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHJvd0RhdGEuaXNQaW5uZWQgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY29tcGxldGVOb3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHJvd0RhdGEuaXNDb21wbGV0ZWQgPSB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpbkNvbXBsZXRlTm90ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICByb3dEYXRhLmlzQ29tcGxldGVkID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlVGFiV2luZG93KCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjbG9zZVRhYldpbmRvdycpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFwcFN3aXRjaGVyVXJsKGFwcENvZGUpIHtcclxuICAgICAgICBjb25zdCBhcHAgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZpbmQoeCA9PiB4LmNvZGUudG9Mb3dlckNhc2UoKSA9PSBhcHBDb2RlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIGlmIChhcHApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFwcC51cmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHVzZS1saWZlLWN5Y2xlLWludGVyZmFjZVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoKTtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5ERVNUUk9ZX1RBU0tfREVUQUlMX0NPTVBPTkVOVCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2VhcmNoIG1lbnVcclxuICAgIG9uU2VhcmNoTWVudShldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTWVudVJlc3VsdCA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5xdWVyeSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaE1lbnVSZXN1bHQgPSB0aGlzLmdldFNlYXJjaE1lbnVSZXN1bHQoZXZlbnQucXVlcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnJlZ3JvdXBTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQsIHRoaXMubWVudU1vZGVsLCByZXN1bHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVncm91cFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZDogc3RyaW5nLCBsaXN0VG9HZXQ6IGFueVtdLCBsaXN0VG9QdXNoOiBhbnlbXSkge1xyXG4gICAgICAgIGxpc3RUb0dldC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWdyb3VwU2VhcmNoTWVudVJlc3VsdChrZXl3b3JkLCBpdGVtLml0ZW1zLCBsaXN0VG9QdXNoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGl0ZW0ubGFiZWwpLmluZGV4T2YodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGtleXdvcmQpKSA+PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgbGlzdFRvUHVzaC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5vbkFjY2VudFZpZXRuYW1lc2Uoc3RyKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgLy8gICAgIFdlIGNhbiBhbHNvIHVzZSB0aGlzIGluc3RlYWQgb2YgZnJvbSBsaW5lIDExIHRvIGxpbmUgMTdcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRTB8XFx1MDBFMXxcXHUxRUExfFxcdTFFQTN8XFx1MDBFM3xcXHUwMEUyfFxcdTFFQTd8XFx1MUVBNXxcXHUxRUFEfFxcdTFFQTl8XFx1MUVBQnxcXHUwMTAzfFxcdTFFQjF8XFx1MUVBRnxcXHUxRUI3fFxcdTFFQjN8XFx1MUVCNS9nLCBcImFcIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEU4fFxcdTAwRTl8XFx1MUVCOXxcXHUxRUJCfFxcdTFFQkR8XFx1MDBFQXxcXHUxRUMxfFxcdTFFQkZ8XFx1MUVDN3xcXHUxRUMzfFxcdTFFQzUvZywgXCJlXCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBFQ3xcXHUwMEVEfFxcdTFFQ0J8XFx1MUVDOXxcXHUwMTI5L2csIFwiaVwiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRjJ8XFx1MDBGM3xcXHUxRUNEfFxcdTFFQ0Z8XFx1MDBGNXxcXHUwMEY0fFxcdTFFRDN8XFx1MUVEMXxcXHUxRUQ5fFxcdTFFRDV8XFx1MUVEN3xcXHUwMUExfFxcdTFFRER8XFx1MUVEQnxcXHUxRUUzfFxcdTFFREZ8XFx1MUVFMS9nLCBcIm9cIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEY5fFxcdTAwRkF8XFx1MUVFNXxcXHUxRUU3fFxcdTAxNjl8XFx1MDFCMHxcXHUxRUVCfFxcdTFFRTl8XFx1MUVGMXxcXHUxRUVEfFxcdTFFRUYvZywgXCJ1XCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MUVGM3xcXHUwMEZEfFxcdTFFRjV8XFx1MUVGN3xcXHUxRUY5L2csIFwieVwiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAxMTEvZywgXCJkXCIpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DoHzDoXzhuqF84bqjfMOjfMOifOG6p3zhuqV84bqtfOG6qXzhuqt8xIN84bqxfOG6r3zhurd84bqzfOG6tS9nLCAnYScpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DqHzDqXzhurl84bq7fOG6vXzDqnzhu4F84bq/fOG7h3zhu4N84buFL2csICdlJyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8OsfMOtfOG7i3zhu4l8xKkvZywgJ2knKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7J8w7N84buNfOG7j3zDtXzDtHzhu5N84buRfOG7mXzhu5V84buXfMahfOG7nXzhu5t84bujfOG7n3zhu6EvZywgJ28nKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7l8w7p84bulfOG7p3zFqXzGsHzhu6t84bupfOG7sXzhu6184buvL2csICd1Jyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL+G7s3zDvXzhu7V84bu3fOG7uS9nLCAneScpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/EkS9nLCAnZCcpO1xyXG4gICAgICAgIC8vIFNvbWUgc3lzdGVtIGVuY29kZSB2aWV0bmFtZXNlIGNvbWJpbmluZyBhY2NlbnQgYXMgaW5kaXZpZHVhbCB1dGYtOCBjaGFyYWN0ZXJzXHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAzMDB8XFx1MDMwMXxcXHUwMzAzfFxcdTAzMDl8XFx1MDMyMy9nLCAnJyk7IC8vIEh1eeG7gW4gc+G6r2MgaOG7j2kgbmfDoyBu4bq3bmdcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDJDNnxcXHUwMzA2fFxcdTAzMUIvZywgJycpOyAvLyDDgiwgw4osIMSCLCDGoCwgxq9cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0TWVudVN1Z2dlc3Rpb24obWVudUl0ZW1PYmopIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChtZW51SXRlbU9iai5yb3V0ZXJMaW5rKTtcclxuICAgICAgICB0aGlzLnNlYXJjaE1lbnVJbnB1dCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnNob3dQaW5uZWRNZW51ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVyU2VhcmNoTWVudUlucHV0KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5pc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJblBpbm5lZE1lbnUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZW51SW5wdXQgPSAnJztcclxuICAgICAgICB0aGlzLnNob3dQaW5uZWRNZW51ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb2N1c1NlYXJjaE1lbnVJbnB1dChldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXNTZWFyY2hNZW51SW5wdXRGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5cHJlc3MnLCBbJyRldmVudCddKVxyXG4gICAgaGFuZGxlU2hvd1BvcHVwUGVybWlzc2lvblV0aWxzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHNbdGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleF0gPT09IGV2ZW50LmtleSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCA9PSB0aGlzLmtleVByZXNzUGVybWlzc2lvblV0aWxzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb290RGF0YS5zaG93UGVybWlzc2lvblV0aWxzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZEd1YXJkKHJvdXRlOiBSb3V0ZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChyb3V0ZS5wYXRoID09PSAnJyB8fCByb3V0ZS5wYXRoID09PSAnLycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHJvdXRlLmxvYWRDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgcm91dGUuY2FuQWN0aXZhdGVDaGlsZCA9IHJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgPyByb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkIDogW0dlbmVyaWNHdWFyZENoaWxkU2VydmljZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByb3V0ZS5jYW5BY3RpdmF0ZSA9IHJvdXRlLmNhbkFjdGl2YXRlID8gcm91dGUuY2FuQWN0aXZhdGUgOiBbR2VuZXJpY0d1YXJkU2VydmljZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
806
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWFwcC1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9jb21tb24tYXBwLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsU0FBUyxFQUNULFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQVMsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9ELE9BQU8sS0FBSyxNQUFNLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDMUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLGdDQUFnQyxDQUFD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bEQsY0FBYztZQUhkLGlCQUFpQjtZQVJqQixrQkFBa0I7Ozt1QkEyQnRCLFNBQVMsU0FBQyxVQUFVOzJCQUNwQixTQUFTLFNBQUMsY0FBYzswQkFDeEIsU0FBUyxTQUFDLGFBQWE7MkJBQ3ZCLFNBQVMsU0FBQyxjQUFjOzJCQUN4QixTQUFTLFNBQUMsY0FBYzswQkFDeEIsU0FBUyxTQUFDLGFBQWE7MEJBQ3ZCLFNBQVMsU0FBQyxvQkFBb0I7NEJBQzlCLFNBQVMsU0FBQyxXQUFXOzRCQUVyQixLQUFLOzZCQUNMLEtBQUs7NkNBc3pCTCxZQUFZLFNBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEhvc3RMaXN0ZW5lcixcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgUmVuZGVyZXIyLFxyXG4gICAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoQ29uZmlnLCBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcclxuaW1wb3J0ICogYXMgSGFtbWVyIGZyb20gJ2hhbW1lcmpzJztcclxuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZSwgUHJpbWVOR0NvbmZpZyB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcblxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IEVudW1UeXBlU3BsYXNoIH0gZnJvbSAnLi4vLi4vZW51bXMvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tbWFuZFR5cGUsIFRuQ2xpZW50Q29tbWFuZCB9IGZyb20gJy4uLy4uL21vZGVscy90bi1jbGllbnQtY29tbWFuZCc7XHJcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29yZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21pemVVaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b21pemUtdWkuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJpY0d1YXJkQ2hpbGRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2VuZXJpYy1ndWFyZC1jaGlsZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJpY0d1YXJkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dlbmVyaWMtZ3VhcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RvcmFnZVVwZGF0ZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS11cGRhdGVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRuQ2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RuLWNsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXBvcnRRdWV1ZUNvbXBvbmVudCB9IGZyb20gJy4uL3JlcG9ydC1xdWV1ZS9yZXBvcnQtcXVldWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICcuLi90bi1jdXN0b20tc2Nyb2xsYmFyL3RuLWN1c3RvbS1zY3JvbGxiYXIuY29tcG9uZW50JztcclxuXHJcbmRlY2xhcmUgbGV0IHRpbnltY2U6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjb21tb24tYXBwLWNvbXBvbmVudCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbW9uLWFwcC1jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb21tb24tYXBwLWNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZSwgRW50aXR5TWV0YWRhdGFTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uQXBwQ29tcG9uZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ29rQnV0dG9uJykgb2tCdXR0b246IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdjYW5jZWxCdXR0b24nKSBjYW5jZWxCdXR0b246IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdxdWlja05vdGVCdCcpIHF1aWNrTm90ZUJ0OiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncXVpY2tOb3RlQnQxJykgcXVpY2tOb3RlQnQxOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncXVpY2tOb3RlQnQyJykgcXVpY2tOb3RlQnQyOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncGlubmVkTm90ZXMnKSBwaW5uZWROb3RlczogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoUmVwb3J0UXVldWVDb21wb25lbnQpIHJlcG9ydFF1ZXVlOiBSZXBvcnRRdWV1ZUNvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbGJhcicpIHNjcm9sbEJhck1lbnU6IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50O1xyXG5cclxuICAgIEBJbnB1dCgpIHNob3dRdWlja05vdGUgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgYWxsb3dBbm9ueW1vdXMgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgLy8gcm9vdFZlcnNpb25EZXBsb3kgPSAnMS4zJztcclxuICAgIGN1cnJlbnRSb3V0ZSA9ICcnO1xyXG4gICAgcGFnZUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgZmlyc3RUaW1lTG9naW4gPSBmYWxzZTtcclxuICAgIHNob3dBZGROb3RlRm9ybSA9IGZhbHNlO1xyXG4gICAgcGlubmVkTm90ZURhdGE6IGFueTtcclxuICAgIHBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPSBmYWxzZTtcclxuICAgIHBpbm5lZE5vdGVzTWF4aW1pemVTdGF0dXMgPSBudWxsO1xyXG4gICAgZW52aXJvbm1lbnQ6IGFueTtcclxuICAgIGNhcHR1cmVNb2RlID0gZmFsc2U7XHJcbiAgICBwMDogYW55O1xyXG4gICAgcDE6IGFueTtcclxuICAgIGxvZ2dlZEluID0gZmFsc2U7XHJcbiAgICBzdWJzY3JpYmxlOiBTdWJzY3JpcHRpb247XHJcbiAgICBvbmx5U2hvd01haW5Db250ZW50ID0gZmFsc2U7XHJcblxyXG4gICAgYXBwQ29kZSA9ICcnO1xyXG5cclxuICAgIHNlYXJjaE1lbnVSZXN1bHQ6IGFueVtdO1xyXG4gICAgc2VhcmNoTWVudUlucHV0OiBzdHJpbmc7XHJcblxyXG4gICAgc2hvd1Bpbm5lZE1lbnUgPSBmYWxzZTtcclxuICAgIGlzSW5QaW5uZWRNZW51ID0gZmFsc2U7XHJcbiAgICBpc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gZmFsc2U7XHJcbiAgICBtZW51TW9kZWw6IGFueTtcclxuICAgIHdhaXRpbmcgPSBmYWxzZTtcclxuICAgIG1lc3NhZ2VXYWl0aW5nOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgc2hvd1JlamVjdENvbmZpcm0gPSB0cnVlO1xyXG5cclxuICAgIHJlYWRvbmx5IGtleVByZXNzUGVybWlzc2lvblV0aWxzID0gJ3BwcHBwcHBwcCc7XHJcbiAgICBjdXJyZW50S2V5UHJlc3NJbmRleCA9IDA7XHJcbiAgICByb290RGF0YTogYW55O1xyXG5cclxuICAgIEVudW1UeXBlU3BsYXNoID0gRW51bVR5cGVTcGxhc2g7XHJcbiAgICBsYXlvdXRMb2FkaW5nUGFnZTogc3RyaW5nID0gRW51bVR5cGVTcGxhc2guTkVXX1YxO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBfZ2xvYmFsU2VydmljZTogR2xvYmFsU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfdGl0bGU6IFRpdGxlLFxyXG4gICAgICAgIHByaXZhdGUgX3NpZ25hbFJTZXJ2aWNlOiBTaWduYWxSU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9zdG9yYWdlVXBkYXRlZFNlcnZpY2U6IFN0b3JhZ2VVcGRhdGVkU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jdXN0b21Sb3V0ZVNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25Db250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfY29tcG9uZW50Q29udGV4dFNlcnZpY2U6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwdWJsaWMgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jb3JlQ29uZmlnU2VydmljZTogQ29yZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbmZpcm1TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX21lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9wcmltZW5nQ29uZmlnOiBQcmltZU5HQ29uZmlnLFxyXG4gICAgICAgIHByaXZhdGUgX3N0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9wZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfY3VzdG9taXplVWlTZXJ2aWNlOiBDdXN0b21pemVVaVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xyXG4gICAgICAgIHRoaXMuYXBwQ29kZSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwQ29kZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5rZXlQcmVzc1Blcm1pc3Npb25VdGlscyA9IHRoaXMuZW52aXJvbm1lbnQua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zdG9yYWdlID09PSAnc2Vzc2lvblN0b3JhZ2UnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldFN0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0U3RvcmFnZShsb2NhbFN0b3JhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJpbWVuZ0NvbmZpZy5zZXRUcmFuc2xhdGlvbih7XHJcbiAgICAgICAgICAgIGRheU5hbWVzOiBbJ0No4bunIG5o4bqtdCcsICdUaOG7qSAyJywgJ1Ro4bupIDMnLCAnVGjhu6kgNCcsICdUaOG7qSA1JywgJ1Ro4bupIDYnLCAnVGjhu6kgNyddLFxyXG4gICAgICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ0NOJywgJ1RoMicsICdUaDMnLCAnVGg0JywgJ1RoNScsICdUaDYnLCAnVGg3J10sXHJcbiAgICAgICAgICAgIGRheU5hbWVzTWluOiBbJ0NOJywgJ1RoMicsICdUaDMnLCAnVGg0JywgJ1RoNScsICdUaDYnLCAnVGg3J10sXHJcbiAgICAgICAgICAgIG1vbnRoTmFtZXM6IFtcclxuICAgICAgICAgICAgICAgICdUaMOhbmcgMScsICdUaMOhbmcgMicsICdUaMOhbmcgMycsICdUaMOhbmcgNCcsICdUaMOhbmcgNScsICdUaMOhbmcgNicsICdUaMOhbmcgNycsICdUaMOhbmcgOCcsICdUaMOhbmcgOScsICdUaMOhbmcgMTAnLCAnVGjDoW5nIDExJywgJ1Row6FuZyAxMidcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ1QxJywgJ1QyJywgJ1QzJywgJ1Q0JywgJ1Q1JywgJ1Q2JywgJ1Q3JywgJ1Q4JywgJ1Q5JywgJ1QxMCcsICdUMTEnLCAnVDEyJ10sXHJcbiAgICAgICAgICAgIHRvZGF5OiAnSMO0bSBuYXknLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXN0b21pemVVaVNlcnZpY2Uuc2V0Q3VzdG9taXplKHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNldFNlcnZpY2Uoe1xyXG4gICAgICAgIC8vICAgICBlbnY6IHRoaXMuZW52aXJvbm1lbnQsXHJcbiAgICAgICAgLy8gICAgIHRyYW5zbGF0ZVNlcnZpY2U6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgLy8gICAgIG1lc3NhZ2VTZXJ2aWNlOiBfbWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgLy8gICAgIGNvbmZpcm1TZXJ2aWNlOiBfY29uZmlybVNlcnZpY2VcclxuICAgICAgICAvLyB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmFkZFJvb3RDb250ZXh0KFxyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZSxcclxuICAgICAgICAgICAgX2FjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RpdGxlLnNldFRpdGxlKHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi50aXRsZSk7XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKCd2bicpO1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZSgndm4nKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0VGlueU1jZSgpO1xyXG5cclxuICAgICAgICBjb25zdCBjZmcgPSB0aGlzLmdldENvbmZpZ0F1dGhlbigpO1xyXG4gICAgICAgIC8vIENodXnhu4NuIHNhbmcgc2Vzc2lvbiBzdG9yYWdlLCBu4bq/dSDhu5VuIHRow6wgeMOzYSBkw7JuZyBuw6B5IMSRaVxyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5zZXRTdG9yYWdlKHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldFN0b3JhZ2UoKSk7XHJcbiAgICAgICAgdGhpcy5pbmplY3RDb25maWcoY2ZnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVXaXRoTmV3Q29uZmlnQXBpKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRPYmplY3RBbnkoJ3BlcnNvbmFsaXplJyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnJlcGxheVN1YnNjcmliZShcclxuICAgICAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQsXHJcbiAgICAgICAgICAgIGFzeW5jIHJzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5zZXR1cFN5bmNDYWNoZUVudGl0eU1ldGFkYXRhKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLmNvbmZpZ1xyXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKHJvdXRlID0+IHRoaXMuYWRkR3VhcmQocm91dGUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maXJzdFRpbWVMb2dpbikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGzhuqduIMSR4bqndSDEkcSDbmcgbmjhuq1wIHRow6wgdsOgbyB0cmFuZyBt4bq3YyDEkeG7i25oXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMucm9vdFZlcnNpb25EZXBsb3kpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgndmVyc2lvbkRlcGxveScsIHRoaXMucm9vdFZlcnNpb25EZXBsb3kpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGjDqm0gdsOgbyDEkeG7gyDEkcOhbmggZOG6pXUgbOG6p24gZOG6p3UgbG9naW4gPT4gxJHhu4MgeOG7rSBsw71cclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2VyQSDEkWFnIOG7nyBtw6BuIGjDrG5oIDEgPT4gxJHEg25nIHh14bqldCA9PiDEkcSDbmcgbmjhuq1wIHbDoG8gdMOgaSBraG/huqNuIFVzZXJCIGtow7RuZyBjw7MgcXV54buBbiBtw6BuIGjDrG5oIDEgPT4gcmVkaXJlY3QgduG7gSBcIi9cIlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRfdXNlcl9pbmZvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnZmlyc3RUaW1lTG9naW4nLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRVcmwgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdjdXJyZW50VXJsJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRVcmwgJiYgb2xkVXJsICE9IHRvcC5sb2NhdGlvbi5ocmVmICsgJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudFVybCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IGAke29sZFVybH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50VXJsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0UmVkaXJlY3QoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgdmVyc2lvbkRlcGxveSA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3ZlcnNpb25EZXBsb3knKTtcclxuICAgICAgICAgICAgICAgIC8vIGxldCB2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uID0gdGhpcy5yb290VmVyc2lvbkRlcGxveTtcclxuICAgICAgICAgICAgICAgIC8vIGlmICh2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uICYmIHZlcnNpb25EZXBsb3kgJiYgKCt2ZXJzaW9uRGVwbG95KSA8ICgrdmVyc2lvbkZyb21BcHBsaWNhdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCd2ZXJzaW9uRGVwbG95JywgdmVyc2lvbkZyb21BcHBsaWNhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLmluaXQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2Uuc3RhcnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lzdGVuY3lIdWInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Jyb2FkY2FzdE1lc3NhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckF1dGhvcml6ZUNhY2hlLmJpbmQodGhpcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnN0YXJ0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vdGlmaWNhdGlvbkh1YicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVmcmVzaEZvclVwZGF0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5hcHBDb2RlcyAmJiBkYXRhLmFwcENvZGVzLnNvbWUoeCA9PiB4LnRvVXBwZXJDYXNlKCkgPT0gdGhpcy5hcHBDb2RlLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLkZPUkNFX1JFTE9BRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGVmYXVsdE1vZHVsZVBhZ2VzID0gdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZS5kZWZhdWx0TW9kdWxlUGFnZXM7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRNb2R1bGVQYWdlcyAmJiBkZWZhdWx0TW9kdWxlUGFnZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZm9yRWFjaChtID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBkZWZhdWx0TW9kdWxlUGFnZXMuZmluZChwID0+IHAuY29kZSA9PSBtLmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhZ2UgJiYgcGFnZS5kZWZhdWx0UGFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG0udXJsID0gcGFnZS5kZWZhdWx0UGFnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBIYW1tZXIuZGVmYXVsdHMuY3NzUHJvcHMudXNlclNlbGVjdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnUVVJQ0tfTk9URV9QT1BVUC5DTE9TRV9QT1BVUCcsIHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsLnNob3dRdWlja05vdGVGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnR09fSE9NRScsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpO1xyXG4gICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ1RPR0dMRV9MQVlPVVQnLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGEub25seVNob3dNYWluQ29udGVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSBkYXRhLm9ubHlTaG93TWFpbkNvbnRlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdNQUlOX0NPTlRFTlRfT05MWScsIHJzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gcnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5TSE9XX1JFSkVDVF9DT05GSVJNLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVqZWN0Q29uZmlybSA9IGRhdGE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbiB8fCB0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbiA9PSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLmxheW91dExvYWRpbmdQYWdlID0gRW51bVR5cGVTcGxhc2guREVGQVVMVDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubGF5b3V0TG9hZGluZ1BhZ2UgPSB0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIHRoaXMucm9vdERhdGEgPSByb290LmRhdGE7XHJcbiAgICAgICAgcm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YSA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZmluZCh4ID0+IHguY29kZS50b0xvd2VyQ2FzZSgpID09IHRoaXMuYXBwQ29kZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICByb290LmRhdGEuYXBwT3JpZ2luID0gdGhpcy5lbnZpcm9ubWVudC5lbmFibGVCYXNlSHJlZiA/IGAvJHtyb290LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLmNvZGUudG9Mb3dlckNhc2UoKX0vYCA6ICcvJztcclxuICAgICAgICByb290LmRhdGEuYWxsb3dBbm9ueW1vdXMgPSB0aGlzLmFsbG93QW5vbnltb3VzO1xyXG4gICAgICAgIC8vIGdldCBjdXJyZW50IFVzZXJcclxuICAgICAgICB0aGlzLl91c2VyU2VydmljZS5wb3B1bGF0ZUN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULk5FRURfQ0xFQVJfUEVSTUlTU0lPTl9DQUNIRSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5jbGVhclBlcm1pc3Npb25DYWNoZUFsbCgpO1xyXG4gICAgICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB0cm9uZyBsw7pjIGNsZWFyIGNhY2hlIHBow6JuIHF1eeG7gW4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5nZXRBbGxCYXNlUGVybWlzc2lvbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5maXJlUmVwbGF5RXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9BUlJPV0xFRlQsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9BUlJPV1JJR0hULCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlBFUlNPTkFMSVpFX1VQREFURUQsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gc2VuZCBjdXJyZW50IHZlcnNpb24gdG8gdG4gY2xpZW50XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RuQ2xpZW50U2VydmljZS5zZW5kQ29tbWFuZCg8VG5DbGllbnRDb21tYW5kPntcclxuICAgICAgICAgICAgICAgIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5TeW5jVmVyaW9uVG5DbGllbnQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ6IHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluLmFwcERvbWFpbiArICcvJyArIHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci5lbmRwb2ludFVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGtleTogdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLmNsaWVudEtleVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuXHJcblxyXG4gICAgICAgIC8vIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuQ09NTU9OLkNMT1NFX0VESVRfRk9STSwgKGRhdGEpID0+IHtcclxuICAgICAgICAvLyAgICAgdGhpcy5zaG93QWRkTm90ZUZvcm0gPSBmYWxzZTtcclxuICAgICAgICAvLyB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UucmVwbGF5U3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlFVSUNLX05PVEVfUElOLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHNldCBwaW5uZWQgbm90ZSBsb2NhdGlvbiBhZnRlciBjbGljayBwaW5cclxuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdwaW5uZWROb3Rlc0xvY2F0aW9uJywge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IChyZWN0LmxlZnQpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbmltaXplOiB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXNcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQaW5uZWROb3RlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnJlcGxheVN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5RVUlDS19OT1RFX1VOUElOLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHNldCBwaW5uZWQgbm90ZSBsb2NhdGlvbiBhZnRlciBjbGljayB1cHBpblxyXG4gICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSByZWN0LmhlaWdodCksXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogKHJlY3QubGVmdCksXHJcbiAgICAgICAgICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsID0gW107XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSBjaGFuZ2UgZW50aXR5IG1ldGFkYXRhXHJcbiAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLnN1YnNjcmliZUNoYW5nZWRMb2NhbFN0b3JhZ2UoJ0tFWV9FTlRJVFlfTUVUREFUQV9VUERBVEVEJywgKHJzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlbnRpdHkgbWV0YWRhdGEgY2hhbmdlZCcsIHJzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gdHJpZ2dlciB1cGRhdGUgc3RvcmFnZSBrZXlcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19XQUlUX0JPWCwgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2FpdGluZyA9IGRhdGEuc2hvdztcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlV2FpdGluZyA9IFsuLi5kYXRhLm1lc3NhZ2VdO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9vdERhdGEuaHR0cFJlcXVlc3RMaXN0ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gbuG6v3UgYWxsb3cgYW5vbnltb3VzIHRow6wgbG9hZCByYSBjw6FjIHBow6JuIGjhu4cgY2hvIHBow6lwIHbDoG8ga2jDtG5nIGPhuqduIMSRxINuZyBuaOG6rXBcclxuICAgICAgICBpZiAodGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByb290LnN1YnNjcmliZSgnTE9HSU4nLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuX2NkLmRldGFjaCgpO1xyXG4gICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBxdWlja05vdGVCdExvY2F0aW9uID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0T2JqZWN0QW55KCdxdWlja05vdGVCdExvY2F0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChxdWlja05vdGVCdExvY2F0aW9uICYmIHRoaXMucXVpY2tOb3RlQnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWlja05vdGVCdExvY2F0aW9uLmJvdHRvbSA8IHdpbmRvdy5pbm5lckhlaWdodCAtIDUwICYmIHF1aWNrTm90ZUJ0TG9jYXRpb24ucmlnaHQgPCB3aW5kb3cuaW5uZXJXaWR0aCAtIDUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmJvdHRvbSA9IHF1aWNrTm90ZUJ0TG9jYXRpb24uYm90dG9tICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSBxdWlja05vdGVCdExvY2F0aW9uLnJpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucXVpY2tOb3RlQnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwaW5uZWROb3Rlc0xvY2F0aW9uID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0T2JqZWN0QW55KCdwaW5uZWROb3Rlc0xvY2F0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChwaW5uZWROb3Rlc0xvY2F0aW9uICYmIHRoaXMucGlubmVkTm90ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGlubmVkTm90ZXNMb2NhdGlvbi5ib3R0b20gPCB3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LmhlaWdodCAmJiBwaW5uZWROb3Rlc0xvY2F0aW9uLmxlZnQgPCB3aW5kb3cuaW5uZXJXaWR0aCAtIDI1MCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5zdHlsZS5ib3R0b20gPSBwaW5uZWROb3Rlc0xvY2F0aW9uLmJvdHRvbSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBwaW5uZWROb3Rlc0xvY2F0aW9uLmxlZnQgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9IHBpbm5lZE5vdGVzTG9jYXRpb24ubWluaW1pemU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0udGl0bGVQYWRkaW5nQm90dG9tID0gJzBweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnNnB4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5waW5uZWROb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcclxuICAgICAgICByb290LnJlcG9ydFF1ZXVlID0gdGhpcy5yZXBvcnRRdWV1ZTtcclxuICAgICAgICB0aGlzLm1lbnVNb2RlbCA9IHRoaXMuX21lbnVTZXJ2aWNlLmdldE1lbnVJdGVtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRSZWRpcmVjdCgpIHtcclxuICAgICAgICAvLyBjaGVjayBkZWZhdWx0IHJlZGlyZWN0XHJcbiAgICAgICAgaWYgKHRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgYXBwU2V0dGluZyA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudEFwcE1ldGFkYXRhO1xyXG4gICAgICAgICAgICBpZiAoIWFwcFNldHRpbmcgJiYgdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW4uZGVmYXVsdFJlZGlyZWN0ICYmIHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpbi5kZWZhdWx0UmVkaXJlY3RcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGF0aFRvQ2hlY2sgPSB0aGlzLmVudmlyb25tZW50LmVuYWJsZUJhc2VIcmVmID8gYC8ke2FwcFNldHRpbmcuY29kZS50b0xvd2VyQ2FzZSgpfS9gIDogJy8nO1xyXG5cclxuICAgICAgICAgICAgaWYgKChsb2NhdGlvbi5wYXRobmFtZSA9PT0gJy8nIHx8IGxvY2F0aW9uLnBhdGhuYW1lID09PSAnJyB8fCBsb2NhdGlvbi5wYXRobmFtZSA9PT0gcGF0aFRvQ2hlY2spKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1c2VyIG5vdCB2YWxpZCB0b2tlbicsIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2FjY2Vzc190b2tlbicpKTtcclxuICAgICAgICAgICAgLy8gVE9ETzogTmFtTkggWOG7rSBsw70gdOG6oW0gY2hvIHRyxrDhu51uZyBo4bujcCDEkcSDbmcgbmjhuq1wIGzhuqduIMSR4bqndSBuaMawbmcgY2jhuqF5IMSR4bq/biDEkcOieSBtw6AgYWNjZXNzIHRva2VuIHbhuqtuIGtow7RuZyBo4bujcCBs4buHXHJcbiAgICAgICAgICAgIC8vIFjhu60gbMO9IHRyaeG7h3QgxJHhu4MgYuG6sW5nIGPDoWNoIHTDrG0gUEEgYuG6r3QgZXZlbnQgY+G7p2EgYW5ndWxhcjIgb2lkYyDEkeG7gyB44butIGzDvSB0csaw4bubYyBraGkgxJHhur9uIGLGsOG7m2MgZGVmYXVsdCByZWRpcmVjdFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRldGVjdENoYW5nZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NkWydkZXN0cm95ZWQnXSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2V4Y2VwdGlvbiBvbiBkZXRlY3QgY2hhbmdlJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhckF1dGhvcml6ZUNhY2hlKCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHNlc3Npb25TdG9yYWdlKVxyXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gL15BVVRIT1JJWkFUSU9OLy50ZXN0KGl0ZW0pKVxyXG4gICAgICAgICAgICAuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzVHJhcChldmVudCwgZGlyZWN0KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBpZiAoZGlyZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0VGlueU1jZSgpIHtcclxuICAgICAgICB0aW55bWNlLmJhc2VVUkwgPSAnL2Fzc2V0cy92ZW5kb3IvdGlueW1jZSc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25maWd1cmVXaXRoTmV3Q29uZmlnQXBpKCkge1xyXG4gICAgICAgIC8vIGZvciBmaXJzdCBsb2dpblxyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5ldmVudHMuc3Vic2NyaWJlKGV2dCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGV2dC50eXBlID09ICd0b2tlbl9yZWNlaXZlZCdcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cExvY2FsU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwU2Vzc2lvblN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VVcGRhdGVkU2VydmljZS5jbGVhbnVwU3RvcmFnZVNlcnZpY2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVSZXBsYXlFdmVudChcclxuICAgICAgICAgICAgICAgICAgICBDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX1JFQURZLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lTG9naW5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09PSAndG9rZW5fZXhwaXJlcycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS50cnlMb2dpbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09PSAnbG9nb3V0Jykge1xyXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCBzdG9yYWdlXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBMb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cFNlc3Npb25TdG9yYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlVXBkYXRlZFNlcnZpY2UuY2xlYW51cFN0b3JhZ2VTZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UucmV2b2tlVG9rZW5BbmRMb2dvdXQobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ3Nlc3Npb25fdGVybWluYXRlZCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRfdXNlcl9pbmZvJyk7XHJcbiAgICAgICAgICAgICAgICAvLyBsb2dvdXRcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ2Rpc2NvdmVyeV9kb2N1bWVudF9sb2FkZWQnKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ3Rva2VuX3JlZnJlc2hlZCcpIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdsb2dpbiBldmVudCcsIGV2dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudCgpO1xyXG4gICAgICAgIGlmICh0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVSZXBsYXlFdmVudChcclxuICAgICAgICAgICAgICAgIENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfUkVBRFksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2N1cnJlbnRVcmwnKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnY3VycmVudFVybCcsIHRvcC5sb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdOG7lW5nIGjhu6NwIGJp4bq/biBwb3NpdGlvblxyXG4gICAgICAgIGlmICh0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdteWl0ZW0nKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoJ1BPU0lUSU9OX0xPQURFRCcsIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ215aXRlbScpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGfhu41pIGFwaSDEkeG7gyB04buVbmcgaOG7o3AgZOG7ryBsaXVlamUuLi5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KCdQT1NJVElPTl9MT0FERUQnLCB7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5qZWN0Q29uZmlnKGNmZzogQXV0aENvbmZpZykge1xyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5jb25maWd1cmUoY2ZnKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENvbmZpZ0F1dGhlbigpIHtcclxuICAgICAgICBjb25zdCBjZmcgPSB0aGlzLl9jb3JlQ29uZmlnU2VydmljZS5nZXRBdXRoQ29uZmlnKCk7XHJcbiAgICAgICAgY29uc3QgdHlwZUxvZ2luID0gdGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmF1dGhlblR5cGU7XHJcbiAgICAgICAgaWYgKHR5cGVMb2dpbiAmJiB0eXBlTG9naW4uaW5jbHVkZXMoJ2ltcGxpY2l0JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNmZztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNmZy5yZXNwb25zZVR5cGUgPSAnY29kZSc7XHJcbiAgICAgICAgICAgIHJldHVybiBjZmc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZU1lbnVBY3RpdmUodG9wKSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxCYXJNZW51LnNjcm9sbFRvVG9wKHRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlRHJvcHBlZChldmVudCkge1xyXG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgncXVpY2tOb3RlQnRMb2NhdGlvbicsIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSA1MCksIHJpZ2h0OiAod2luZG93LmlubmVyV2lkdGggLSByZWN0LmxlZnQgLSA1MClcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVTdGFydGVkKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVNb3ZpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVByZXNzKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVQcmVzc2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKHRydWUpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZU9uY2UoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQk9EWV9NT1VTRV9ET1dOLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlUHJlc3NVcChldmVudCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZVByZXNzaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVBZGROb3RlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVNb3ZpbmdcclxuICAgICAgICAgICAgJiYgIXRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlUHJlc3NpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5ub3RlRGF0YU1vZGVsID0gPGFueT57XHJcbiAgICAgICAgICAgICAgICBlZGl0Rm9ybU1vZGVsOiA8YW55Pnsgc2hvd1F1aWNrTm90ZUZvcm06IHRydWUsIHBvcHVwU2l6ZTogPGFueT57fSwgZGF0YTogPGFueT57fSB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZWRpdEZvcm1Nb2RlbC5zaG93UXVpY2tOb3RlRm9ybSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVNob3dBbGxOb3RlcygpIHtcclxuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xyXG4gICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5nZXRBcHBTd2l0Y2hlclVybCgndXNlcicpfS9tYWluL3F1aWNrLW5vdGVgO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVNob3dTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xyXG4gICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5nZXRBcHBTd2l0Y2hlclVybCgndXNlcicpfS9tYWluL3BlcnNvbmFsaXplYDtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKHNob3cpIHtcclxuICAgICAgICBpZiAoc2hvdykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0MS5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzU1cHgnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICcxMDBweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0MS5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzY1cHgnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICcxMjBweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQxLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNXB4JztcclxuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICc1cHgnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBQaW5uZWQgTm90ZVxyXG4gICAgZ2V0UGlubmVkTm90ZXMoKSB7XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwaW5uZWROb3Rlc0Ryb3BwZWQoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxyXG4gICAgICAgICAgICBsZWZ0OiAocmVjdC5sZWZ0KSxcclxuICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucGlubmVkTm90ZXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHBpbm5lZE5vdGVzU3RhcnRlZChldmVudCkge1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucGlubmVkTm90ZXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBpbm5lZE5vdGVzTWluaW1pemUoZGF0YTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9ICFkYXRhO1xyXG5cclxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxyXG4gICAgICAgICAgICBsZWZ0OiAocmVjdC5sZWZ0KSxcclxuICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9PSB0cnVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnMHB4JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLnRpdGxlUGFkZGluZ0JvdHRvbSA9ICc2cHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5QaW5Ob3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHJvd0RhdGEuaXNQaW5uZWQgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY29tcGxldGVOb3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHJvd0RhdGEuaXNDb21wbGV0ZWQgPSB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpbkNvbXBsZXRlTm90ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICByb3dEYXRhLmlzQ29tcGxldGVkID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlVGFiV2luZG93KCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjbG9zZVRhYldpbmRvdycpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFwcFN3aXRjaGVyVXJsKGFwcENvZGUpIHtcclxuICAgICAgICBjb25zdCBhcHAgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZpbmQoeCA9PiB4LmNvZGUudG9Mb3dlckNhc2UoKSA9PSBhcHBDb2RlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIGlmIChhcHApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFwcC51cmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHVzZS1saWZlLWN5Y2xlLWludGVyZmFjZVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoKTtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5ERVNUUk9ZX1RBU0tfREVUQUlMX0NPTVBPTkVOVCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2VhcmNoIG1lbnVcclxuICAgIG9uU2VhcmNoTWVudShldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTWVudVJlc3VsdCA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5xdWVyeSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaE1lbnVSZXN1bHQgPSB0aGlzLmdldFNlYXJjaE1lbnVSZXN1bHQoZXZlbnQucXVlcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnJlZ3JvdXBTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQsIHRoaXMubWVudU1vZGVsLCByZXN1bHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVncm91cFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZDogc3RyaW5nLCBsaXN0VG9HZXQ6IGFueVtdLCBsaXN0VG9QdXNoOiBhbnlbXSkge1xyXG4gICAgICAgIGxpc3RUb0dldC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWdyb3VwU2VhcmNoTWVudVJlc3VsdChrZXl3b3JkLCBpdGVtLml0ZW1zLCBsaXN0VG9QdXNoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGl0ZW0ubGFiZWwpLmluZGV4T2YodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGtleXdvcmQpKSA+PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgbGlzdFRvUHVzaC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5vbkFjY2VudFZpZXRuYW1lc2Uoc3RyKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgLy8gICAgIFdlIGNhbiBhbHNvIHVzZSB0aGlzIGluc3RlYWQgb2YgZnJvbSBsaW5lIDExIHRvIGxpbmUgMTdcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRTB8XFx1MDBFMXxcXHUxRUExfFxcdTFFQTN8XFx1MDBFM3xcXHUwMEUyfFxcdTFFQTd8XFx1MUVBNXxcXHUxRUFEfFxcdTFFQTl8XFx1MUVBQnxcXHUwMTAzfFxcdTFFQjF8XFx1MUVBRnxcXHUxRUI3fFxcdTFFQjN8XFx1MUVCNS9nLCBcImFcIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEU4fFxcdTAwRTl8XFx1MUVCOXxcXHUxRUJCfFxcdTFFQkR8XFx1MDBFQXxcXHUxRUMxfFxcdTFFQkZ8XFx1MUVDN3xcXHUxRUMzfFxcdTFFQzUvZywgXCJlXCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBFQ3xcXHUwMEVEfFxcdTFFQ0J8XFx1MUVDOXxcXHUwMTI5L2csIFwiaVwiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRjJ8XFx1MDBGM3xcXHUxRUNEfFxcdTFFQ0Z8XFx1MDBGNXxcXHUwMEY0fFxcdTFFRDN8XFx1MUVEMXxcXHUxRUQ5fFxcdTFFRDV8XFx1MUVEN3xcXHUwMUExfFxcdTFFRER8XFx1MUVEQnxcXHUxRUUzfFxcdTFFREZ8XFx1MUVFMS9nLCBcIm9cIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEY5fFxcdTAwRkF8XFx1MUVFNXxcXHUxRUU3fFxcdTAxNjl8XFx1MDFCMHxcXHUxRUVCfFxcdTFFRTl8XFx1MUVGMXxcXHUxRUVEfFxcdTFFRUYvZywgXCJ1XCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MUVGM3xcXHUwMEZEfFxcdTFFRjV8XFx1MUVGN3xcXHUxRUY5L2csIFwieVwiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAxMTEvZywgXCJkXCIpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DoHzDoXzhuqF84bqjfMOjfMOifOG6p3zhuqV84bqtfOG6qXzhuqt8xIN84bqxfOG6r3zhurd84bqzfOG6tS9nLCAnYScpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DqHzDqXzhurl84bq7fOG6vXzDqnzhu4F84bq/fOG7h3zhu4N84buFL2csICdlJyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8OsfMOtfOG7i3zhu4l8xKkvZywgJ2knKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7J8w7N84buNfOG7j3zDtXzDtHzhu5N84buRfOG7mXzhu5V84buXfMahfOG7nXzhu5t84bujfOG7n3zhu6EvZywgJ28nKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7l8w7p84bulfOG7p3zFqXzGsHzhu6t84bupfOG7sXzhu6184buvL2csICd1Jyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL+G7s3zDvXzhu7V84bu3fOG7uS9nLCAneScpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/EkS9nLCAnZCcpO1xyXG4gICAgICAgIC8vIFNvbWUgc3lzdGVtIGVuY29kZSB2aWV0bmFtZXNlIGNvbWJpbmluZyBhY2NlbnQgYXMgaW5kaXZpZHVhbCB1dGYtOCBjaGFyYWN0ZXJzXHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAzMDB8XFx1MDMwMXxcXHUwMzAzfFxcdTAzMDl8XFx1MDMyMy9nLCAnJyk7IC8vIEh1eeG7gW4gc+G6r2MgaOG7j2kgbmfDoyBu4bq3bmdcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDJDNnxcXHUwMzA2fFxcdTAzMUIvZywgJycpOyAvLyDDgiwgw4osIMSCLCDGoCwgxq9cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0TWVudVN1Z2dlc3Rpb24obWVudUl0ZW1PYmopIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChtZW51SXRlbU9iai5yb3V0ZXJMaW5rKTtcclxuICAgICAgICB0aGlzLnNlYXJjaE1lbnVJbnB1dCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnNob3dQaW5uZWRNZW51ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVyU2VhcmNoTWVudUlucHV0KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5pc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJblBpbm5lZE1lbnUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZW51SW5wdXQgPSAnJztcclxuICAgICAgICB0aGlzLnNob3dQaW5uZWRNZW51ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb2N1c1NlYXJjaE1lbnVJbnB1dChldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXNTZWFyY2hNZW51SW5wdXRGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5cHJlc3MnLCBbJyRldmVudCddKVxyXG4gICAgaGFuZGxlU2hvd1BvcHVwUGVybWlzc2lvblV0aWxzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHNbdGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleF0gPT09IGV2ZW50LmtleSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCA9PSB0aGlzLmtleVByZXNzUGVybWlzc2lvblV0aWxzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb290RGF0YS5zaG93UGVybWlzc2lvblV0aWxzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZEd1YXJkKHJvdXRlOiBSb3V0ZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChyb3V0ZS5wYXRoID09PSAnJyB8fCByb3V0ZS5wYXRoID09PSAnLycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHJvdXRlLmxvYWRDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgcm91dGUuY2FuQWN0aXZhdGVDaGlsZCA9IHJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgPyByb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkIDogW0dlbmVyaWNHdWFyZENoaWxkU2VydmljZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByb3V0ZS5jYW5BY3RpdmF0ZSA9IHJvdXRlLmNhbkFjdGl2YXRlID8gcm91dGUuY2FuQWN0aXZhdGUgOiBbR2VuZXJpY0d1YXJkU2VydmljZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|