@bpost/bp-address-auto-complete-by-component 1.1.25 → 1.1.26
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/VERSION.md +3 -0
- package/esm2020/lib/box-number/box-number.component.mjs +28 -3
- package/esm2020/lib/lib-address-autocomplete-by-component.component.mjs +63 -6
- package/esm2020/lib/locality/locality.component.mjs +1 -1
- package/esm2020/lib/street/street.component.mjs +17 -2
- package/esm2020/lib/street-number/street-number.component.mjs +25 -4
- package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs +129 -11
- package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs.map +1 -1
- package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs +129 -11
- package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs.map +1 -1
- package/lib/box-number/box-number.component.d.ts +1 -0
- package/lib/street/street.component.d.ts +1 -0
- package/lib/street-number/street-number.component.d.ts +1 -0
- package/package.json +1 -1
package/VERSION.md
CHANGED
|
@@ -6,6 +6,9 @@ This is a pure angular library and can be imported as a module inside an angular
|
|
|
6
6
|
This library is not suited for a pure javascript application.
|
|
7
7
|
For any pure JS application, another version of this component exists in our repository.
|
|
8
8
|
|
|
9
|
+
## Version 1.1.26
|
|
10
|
+
Popluate next address component when suggested address contains them - prefill.
|
|
11
|
+
|
|
9
12
|
## Version 1.1.25
|
|
10
13
|
Popluate next address component when suggested address contains them.
|
|
11
14
|
|
|
@@ -99,8 +99,7 @@ export class BoxNumberComponent {
|
|
|
99
99
|
ngOnChanges(changes) {
|
|
100
100
|
if (changes) {
|
|
101
101
|
if (changes.hasOwnProperty('autofillData') && changes.autofillData.currentValue !== null && changes.autofillData.currentValue !== undefined) {
|
|
102
|
-
this.searchText = this.autofillData.
|
|
103
|
-
this.addressIsValidated = this.autofillData.isCompleteBoxNumber;
|
|
102
|
+
this.searchText = this.loadAutoFillParams(changes.autofillData.currentValue);
|
|
104
103
|
this.setSelectedAddress(this.autofillData.selectedAddress);
|
|
105
104
|
}
|
|
106
105
|
else {
|
|
@@ -297,6 +296,32 @@ export class BoxNumberComponent {
|
|
|
297
296
|
}
|
|
298
297
|
return concatStr;
|
|
299
298
|
}
|
|
299
|
+
loadAutoFillParams(autoFillData) {
|
|
300
|
+
let concatStr = '';
|
|
301
|
+
if (autoFillData !== null) {
|
|
302
|
+
if (autoFillData.hasOwnProperty('postalCode') && this.isString(autoFillData.postalCode)) {
|
|
303
|
+
this.postalCode = autoFillData.postalCode;
|
|
304
|
+
}
|
|
305
|
+
if (autoFillData.hasOwnProperty('municipalityName') && this.isString(autoFillData.municipalityName)) {
|
|
306
|
+
this.locality = autoFillData.municipalityName;
|
|
307
|
+
}
|
|
308
|
+
if (autoFillData.hasOwnProperty('streetName') && this.isString(autoFillData.streetName)) {
|
|
309
|
+
this.streetName = autoFillData.streetName;
|
|
310
|
+
}
|
|
311
|
+
if (autoFillData.hasOwnProperty('streetNumber')
|
|
312
|
+
&& this.isString(autoFillData.streetNumber)) {
|
|
313
|
+
this.streetNumber = autoFillData.streetNumber;
|
|
314
|
+
}
|
|
315
|
+
if (autoFillData.hasOwnProperty('boxNumber')
|
|
316
|
+
&& this.isString(autoFillData.boxNumber)) {
|
|
317
|
+
concatStr = autoFillData.boxNumber;
|
|
318
|
+
}
|
|
319
|
+
if (autoFillData.hasOwnProperty('isCompleteBoxNumber')) {
|
|
320
|
+
this.addressIsValidated = this.autofillData.isCompleteBoxNumber;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return concatStr;
|
|
324
|
+
}
|
|
300
325
|
isString(val) {
|
|
301
326
|
if (val === null || val === undefined) {
|
|
302
327
|
return false;
|
|
@@ -994,4 +1019,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
994
1019
|
}], numberOfExceptionsEmitter: [{
|
|
995
1020
|
type: Output
|
|
996
1021
|
}] } });
|
|
997
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvYm94LW51bWJlci9ib3gtbnVtYmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQvc3JjL2xpYi9ib3gtbnVtYmVyL2JveC1udW1iZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBa0QsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUc3SixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUs3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7OztBQVF6RSxNQUFNLE9BQU8sa0JBQWtCO0lBc0c3QixZQUNVLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxjQUE4QjtRQUg5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdB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Q0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHTyxTQUFTO3NCQUFyQixLQUFLO2dCQWFHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUVHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBR1AsZ0JBQWdCO3NCQURmLE1BQU07Z0JBRUcseUJBQXlCO3NCQUFsQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcmVmaWxsZWRQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vdXRpbHMvcHJlZmlsbGVkLXBhcmFtZXRlcnMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vZW51bS92YWxpZGF0aW9uLW1lc3NhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFkZHJlc3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWRyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFVuaWNvZGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdW5pY29kZS5zZXJ2aWNlJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICcuLi91dGlscy9kb21oYW5kbGVyJztcbmltcG9ydCB7IEFERFJFU1NMRVZFTCB9IGZyb20gJy4uL2VudW0vYWRkcmVzcy1sZXZlbC5lbnVtJztcbmltcG9ydCB7IFF1ZXJ5UGFyYW1ldGVycyB9IGZyb20gJy4uL21vZGVsL3F1ZXJ5LXBhcmFtZXRlcnMubW9kZWwnO1xuaW1wb3J0IHsgUHJlZmlsbERhdGEgfSBmcm9tICcuLi91dGlscy9wcmVmaWxsLWRhdGEnO1xuaW1wb3J0IHsgU291cmNlVHlwZSB9IGZyb20gJy4uL2VudW0vc291cmNlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQcmVmaWxsRXZlbnQgfSBmcm9tICcuLi91dGlscy9wcmVmbGxsLmV2ZW50JztcbmltcG9ydCB7IElucHV0TmFtZVR5cGUgfSBmcm9tICcuLi9lbnVtL2lucHV0LW5hbWUuZW51bSc7XG5pbXBvcnQgeyBTdWdnZXN0aW9uTGV2ZWxUeXBlIH0gZnJvbSAnLi4vZW51bS9zdWdnZXN0aW9uLWxldmVsLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBdXRvZmlsbERhdGEgfSBmcm9tICcuLi91dGlscy9hdXRvZmlsbC1kYXRhJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnAtYm94LW51bWJlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ib3gtbnVtYmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYm94LW51bWJlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJveE51bWJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoJ2JveE51bWJlclNlYXJjaElucHV0Jywge3N0YXRpYzogZmFsc2V9ICkgYm94TnVtYmVyU2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2JveE51bWJlckxpc3QnLCB7c3RhdGljOiBmYWxzZX0gKSBib3hOdW1iZXJMaXN0OiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgLy8gMjAyMC0wNi0xNVxuICAvLyBASW5wdXQoKVxuICAvLyBvbkZvY3VzU2hvd1N1Z2dlc3Rpb25zQWZ0ZXJQcmVmaWxsID0gdHJ1ZTtcblxuICBASW5wdXQoKSBwcmVmaWxsRGF0YTogUHJlZmlsbERhdGE7XG5cbiAgQElucHV0KCkgYXV0b2ZpbGxEYXRhOiBBdXRvZmlsbERhdGE7XG4gIEBJbnB1dCgpIHNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUgPSBmYWxzZTtcblxuICBASW5wdXQoKSBsYWJlbFJlc291cmNlS2V5ID0gJ2NvbW1vbi5sYWJlbC5ib3hOdW1iZXInO1xuICBASW5wdXQoKSBtYXhTdWdnZXNpb25Db3VudCA9IDU7XG4gIEBJbnB1dCgpIHZpc2libGVTdWdnZXNpb25Db3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYSA9ICcnO1xuICBASW5wdXQoKSBiYXNlVXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFkZHJlc3NQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIEBJbnB1dCgpIHBvc3RhbENvZGU6IHN0cmluZztcbiAgQElucHV0KCkgbG9jYWxpdHk6IHN0cmluZztcbiAgQElucHV0KCkgc3RyZWV0TmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBzdHJlZXROdW1iZXI6IHN0cmluZztcbiAgQElucHV0KCkgc2VsZWN0ZWRBZGRyZXNzO1xuICBASW5wdXQoKSBub3RJbkxpc3RBbGxvd2VkOiBib29sZWFuO1xuICBASW5wdXQoKSBhbGxvd05vVmFsaWRhdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgdmFsaWRhdGVkQnlCYWNrZW5kOiBib29sZWFuO1xuICBASW5wdXQoKSBudW1iZXJPZkV4Y2VwdGlvbnM6IG51bWJlcjtcblxuICAvLyBAdHMtaWdub3JlXG4gIEBJbnB1dCgpIHNldCBpbnB1dExhbmcodmFsOiBzdHJpbmcpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnc2V0IGxhbmcnLCB2YWwpO1xuICAgIHRoaXMubG9jYWxlU2VydmljZS5jaGFuZ2VMYW5nKHZhbCk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZSh2YWwpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnc2V0IGxhbmcgYWZ0ZXIgc3Vic2NyaWJlJywgcmVzKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZWRMYW5ndWFnZSgpO1xuICAgICAgICAvLyBpZiAocmVzICE9PSB1bmRlZmluZWQgKSB7XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgQElucHV0KCkgbWVzc2FnZU9wdGlvbiA9ICdZJzvCtVxuXG4gIEBJbnB1dCgpXG4gIGlzUmVhZG9ubHk9ZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc3VnZ2VzdGlvbkxldmVsOiBTdWdnZXN0aW9uTGV2ZWxUeXBlO1xuXG4gIEBJbnB1dCgpIG5pczlJblJlc3BvbnNlOiBib29sZWFuXG4gIEBJbnB1dCgpIGJ1c2luZXNzTmFtZUluUmVzcG9uc2U6IGJvb2xlYW5cbiAgQE91dHB1dCgpIG1lc3NhZ2VDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8e21lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmd9PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGFkZHJlc3NDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYmx1ckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHRleHRDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBlbXB0eVJlc3BvbnNlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBjbGVhcklucHV0RXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgcHJlZmlsbEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPFByZWZpbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFByZWZpbGxFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgYm94TnVtYmVyQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBudW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9bmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuXG4gIGFkZHJlc3NJc1ZhbGlkYXRlZDogYm9vbGVhbjtcbiAgc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmc7XG4gIHN1Z2dlc3Rpb25zOiBhbnk7XG4gIHByZXZpb3VzSW5kZXg6IG51bWJlcjtcbiAgbGFzdFNlYXJjaFZhbHVlOiBzdHJpbmc7XG4gIHdvcmRMaXN0OiBhbnk7XG4gIHN1Z2dlc3Rpb25zV29yZExpc3Q6IGFueTtcbiAgYnBUeXBlQWhlYWQ6IHN0cmluZztcbiAgcGxhY2VIb2xkZXJUZXh0OiBzdHJpbmc7XG4gIHNraXBOZXh0Qmx1cjogYm9vbGVhbjsgLy8gT25CbHVyIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzdWdnZXN0aW9uL3ZhbGlkYXRvciBidXR0b25cbiAgZXJyb3JDb2RlOiBhbnk7XG5cbiAgbWluTGV2ZWw6IG51bWJlcjtcbiAgc2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICBjb2xsYXBzZURyb3Bkb3duOiBib29sZWFuO1xuICB0eXBlQWhlYWRXb3JkOiBzdHJpbmc7XG4gIHNlcXVlbmNlTnVtYmVyOiBudW1iZXI7XG4gIGNvbnN1bWVkTnVtYmVyOiBudW1iZXI7XG4gIHNlbGVjdGlvbkNoYW5nZWQ6IGJvb2xlYW47XG4gIHZhbGlkYXRpb25NZXNzYWdlQ29kZSA9IG51bGw7XG4gIHZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucyA9IG51bGw7XG4gIGVtcHR5UmVzcG9uc2VUZXh0OiBzdHJpbmc7XG4gIGVtcHR5UmVzcG9uc2U6IGJvb2xlYW47XG5cbiAgcHJlZmlsbGluZyA9IGZhbHNlO1xuICBpc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuXG4gIFN1Z2dlc3Rpb25MZXZlbFR5cGU9U3VnZ2VzdGlvbkxldmVsVHlwZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFkZHJlc3NTZXJ2aWNlOiBBZGRyZXNzU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdW5pY29kZVNlcnZpY2U6IFVuaWNvZGVTZXJ2aWNlLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgIC8vIGluc3RhbmNlIHByb3BlcnRpZXNcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMucHJldmlvdXNJbmRleCA9IC0xO1xuICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gJyc7XG4gICAgdGhpcy53b3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNXb3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgICB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9ICcnO1xuICAgIHRoaXMuc2tpcE5leHRCbHVyID0gZmFsc2U7IC8vIE9uQmx1ciBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgc3VnZ2VzdGlvbi92YWxpZGF0b3IgYnV0dG9uXG4gICAgdGhpcy5lcnJvckNvZGUgPSBudWxsO1xuICAgIC8vIHNjb3BlIHByb3BlcnRpZXNcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAvLyBwcm9wZXJ0aWVzXG4gICAgdGhpcy50eXBlQWhlYWRXb3JkID0gJyc7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyID0gMTtcbiAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gMTtcbiAgICAvLyBpbml0aWFsaXphdGlvblxuICAgIHRoaXMuc2V0U2VhcmNoVGV4dCgnJyk7XG4gICAgLy8gdGhpcy5zZXRQbGFjZUhvbGRlclRleHQoKTtcbiAgICB0aGlzLnNldEVtcHR5UmVzcG9uc2VUZXh0KCk7XG4gICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gdHJ1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlZExhbmd1YWdlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlZCkge1xuICAgICAgY29uc3Qgb3ZlcmxheTogSFRNTERpdkVsZW1lbnQgPSB0aGlzLmJveE51bWJlckxpc3QubmF0aXZlRWxlbWVudDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBsaXN0SXRlbSA9IERvbUhhbmRsZXIuZmluZFNpbmdsZShvdmVybGF5LCAnbGkuYWN0aXZlJyk7XG4gICAgICAgIGlmIChsaXN0SXRlbSkge1xuICAgICAgICAgIERvbUhhbmRsZXIuc2Nyb2xsSW5WaWV3KG92ZXJsYXksIGxpc3RJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSwgMSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgIGlmKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2F1dG9maWxsRGF0YScpICYmIGNoYW5nZXMuYXV0b2ZpbGxEYXRhLmN1cnJlbnRWYWx1ZSAhPT0gbnVsbCAmJiBjaGFuZ2VzLmF1dG9maWxsRGF0YS5jdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dD10aGlzLmF1dG9maWxsRGF0YS5ib3hOdW1iZXI7XG4gICAgICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkPXRoaXMuYXV0b2ZpbGxEYXRhLmlzQ29tcGxldGVCb3hOdW1iZXI7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHRoaXMuYXV0b2ZpbGxEYXRhLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgICB9ZWxzZXtcbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdwcmVmaWxsRGF0YScpICYmICFjaGFuZ2VzLnByZWZpbGxEYXRhLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMucHJlZmlsbGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMubG9hZFBhcmFtcyhjaGFuZ2VzLnByZWZpbGxEYXRhLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgIT09ICcnICYmIHRoaXMubWluTGV2ZWwgPT09IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKSB7XG4gICAgICAgICAgLy8gdGhpcy5vbklucHV0Q2hhbmdlKCdwcmVmaWxsZWQnKTtcbiAgICAgICAgICAvLyB0aGlzLmJveE51bWJlclNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclxuICAgICAgICAgICAgPSB0aGlzLnRyYW5zZm9ybUJveE51bWJlckluTG93ZXJjYXNlQW5kV2l0aG91dERpYWNyaXRpY3ModGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcik7XG4gICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKC8qJ3ByZWZpbGxlZCcqLyBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TnVtYmVyJykgJiYgIWNoYW5nZXMuc3RyZWV0TnVtYmVyLmZpcnN0Q2hhbmdlICYmICFjaGFuZ2VzLmhhc093blByb3BlcnR5KCdwcmVmaWxsRGF0YScpKSB7XG5cbiAgICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsICE9PSBTdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUpXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRMYW5nJykgLyAqJiYgIWNoYW5nZXMuYWRkcmVzc1BhcmFtcy5maXJzdENoYW5nZSogLykge1xuICAgICAgICBjb25zdCBsYW5nID0gY2hhbmdlcy5pbnB1dExhbmcuY3VycmVudFZhbHVlO1xuICAgICAgICBjb25zb2xlLmxvZygnb24gY2hhbmdlcyAtIGlucHV0TGFuZycsIGxhbmcpO1xuICAgICAgICBpZiAoY2hhbmdlcy5pbnB1dExhbmcuY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2V0RGVmYXVsdExhbmcobGFuZyk7XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsYW5nKTtcbiAgICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2UuY2hhbmdlTGFuZyhsYW5nKTtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlZExhbmd1YWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICovXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtQm94TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyhib3hOdW1iZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcbiAgICBpZiAoYm94TnVtYmVyICE9PSBudWxsICYmIGJveE51bWJlciAhPT0gdW5kZWZpbmVkIClcbiAgICB7XG4gICAgICByZXN1bHQgPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MoYm94TnVtYmVyKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnVHJhbnNmb3JtZWQgc3RyZWV0IG51bWJlcjonLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cblxuICBvbkNoYW5nZWRMYW5ndWFnZSgpIHtcbiAgICAvLyB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdib3hOdW1iZXIucGxhY2Vob2xkZXIuaW5wdXQtcGxhY2Vob2xkZXInKTtcbiAgICAvLyBjb25zb2xlLmxvZygncGxhY2UgaG9sZGVyJywgdGhpcy5wbGFjZUhvbGRlclRleHQpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoJ2JveE51bWJlci5wbGFjZWhvbGRlci5pbnB1dC1wbGFjZWhvbGRlcicpXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnbmV3IHBsYWNlaG9sZGVyJywgcmVzKTtcbiAgICAgICAgLy8gPT4gJ2hlbGxvIHdvcmxkJ1xuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9IHJlcztcbiAgICAgICAgdGhpcy5zZXRFbXB0eVJlc3BvbnNlVGV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0RW1wdHlSZXNwb25zZVRleHQoKSB7XG4gICAgLy8gdGhpcy5lbXB0eVJlc3BvbnNlVGV4dCA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnbm90LWluLWxpc3QnKTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2VUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2JveE51bWJlci5tZXNzYWdlLm5vdC1pbi1saXN0Jyk7XG4gIH1cblxuICBvbkNsZWFySW5wdXRFdmVudChldmVudCwgZm9jdXMpIHtcbiAgICB0aGlzLmNsZWFySW5wdXQoZm9jdXMpO1xuICB9XG5cbiAgb25CbHVyKGV2KSB7XG4gICAgaWYgKHRoaXMuaXNCcm93c2VySUUoKSAmJiB0aGlzLmlzRHJvcGRvd25DbGlja2VkKGV2KSkge1xuICAgICAgdGhpcy5ib3hOdW1iZXJTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNraXBOZXh0Qmx1cikge1xuICAgICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICAgIHRoaXMuYmx1ckV2ZW50LmVtaXQoQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpO1xuICAgIH1cbiAgfVxuXG4gIGlzQnJvd3NlcklFKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvbXNpZVxcc3x0cmlkZW50XFwvfGVkZ2VcXC8vaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfVxuXG4gIGlzRHJvcGRvd25DbGlja2VkKGV2KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXYuZXhwbGljaXRPcmlnaW5hbFRhcmdldCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIHJldHVybiAodGFyZ2V0LmlkID09PSAnYnBhYWMtYm94LWRyb3Bkb3duJyk7XG4gIH1cblxuICBvbkZvY3VzKCkge1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IGZhbHNlO1xuICAgIC8vIHRoaXMuY29sbGFwc2VEcm9wZG93biA9ICh0aGlzLnByZWZpbGxpbmcgPT09IHRydWUgJiYgdGhpcy5wcmVmaWxsRGF0YSAhPT0gbnVsbClcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgID8gIXRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5vbkZvY3VzU2hvd1N1Z2dlc3Rpb25zQWZ0ZXJQcmVmaWxsIDogZmFsc2U7XG4gICAgLy8gdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTtcbiAgICB0aGlzLmZvY3VzRXZlbnQuZW1pdChBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gIH1cblxuICB2YWx1ZUNoYW5nZWQoKSB7XG4gICAgdGhpcy50ZXh0Q2hhbmdlRXZlbnQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgbWF5U2hvd0Ryb3Bkb3duKCkge1xuICAgIHJldHVybiB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgIXRoaXMuY29sbGFwc2VEcm9wZG93bjtcbiAgfVxuXG4gIGJ1aWxkSW5wdXRXb3JkTGlzdCgpIHtcbiAgICB0aGlzLndvcmRMaXN0ID0gdGhpcy5zZWFyY2hUZXh0LnNwbGl0KC9bXFxzLCBdKy8pO1xuICB9XG5cbiAgbWF5QWRkVHlwZUFoZWFkKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQgKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0aGlzLnNlYXJjaFRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoL1teXFxzLCBcXFxcXFwvXSQvKS50ZXN0KHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cblxuICBidWlsZFR5cGVBaGVhZChzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKCF0aGlzLm1heUFkZFR5cGVBaGVhZChzb3VyY2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFRleHRXb3JkcyA9IHRoaXMuc2VhcmNoVGV4dC5zcGxpdCgvW1xccywgXSsvKTtcbiAgICBjb25zdCBsYXN0V29yZCA9IHNlYXJjaFRleHRXb3Jkc1tzZWFyY2hUZXh0V29yZHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5zb21lKGZ1bmN0aW9uKHN1Zykge1xuICAgICAgaWYgKCFzdWcgfHwgIXN1Zy5oYXNPd25Qcm9wZXJ0eSgnc3RyaW5nJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Zy5zdHJpbmcuc3BsaXQoL1tcXHMtXSsvKS5zb21lKGZ1bmN0aW9uKHdvcmQpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RyaW5nU3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3Mod29yZCwgbGFzdFdvcmQpKSB7XG4gICAgICAgICAgdGhpcy50eXBlQWhlYWRXb3JkID0gd29yZDtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICB9LmJpbmQodGhpcykpKSB7XG4gICAgICBjb25zdCBhcHBlbmRpeCA9IHRoaXMudHlwZUFoZWFkV29yZC5zbGljZShsYXN0V29yZC5sZW5ndGgsIHRoaXMudHlwZUFoZWFkV29yZC5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLmJwVHlwZUFoZWFkID0gdGhpcy5zZWFyY2hUZXh0ICsgYXBwZW5kaXg7XG4gICAgfVxuICB9XG5cbiAgc3RyaW5nU3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3ModmFsdWUsIHByZWZpeCkge1xuICAgIHZhbHVlID0gKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xuICAgIHByZWZpeCA9IChwcmVmaXggIT09IG51bGwgJiYgcHJlZml4ICE9PSB1bmRlZmluZWQpID8gcHJlZml4LnRvTG93ZXJDYXNlKCkgOiBwcmVmaXg7XG4gICAgcmV0dXJuIHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcyh2YWx1ZSkuc2xpY2UoMCwgcHJlZml4Lmxlbmd0aClcbiAgICAgIC50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy51bmljb2RlU2VydmljZS5yZW1vdmVEaWFjcml0aWNzKHByZWZpeCkpICE9PSAtMTtcbiAgfVxuXG4gIGdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLmdlbmVyYXRlUGFyYW1ldGVycygpO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ0JPWC1OVU1CRVIgY2FsbGluZyBzZXJ2aWNlIHBhcmFtcycsIHBhcmFtKTsgfVxuICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5hZGRyZXNzU2VydmljZS5nZXRCb3godGhpcy5iYXNlVXJsLCB0aGlzLmxvY2FsaXR5LCB0aGlzLnBvc3RhbENvZGUsIHBhcmFtKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlR2V0Qm94UmVzcG9uc2UocmVzcG9uc2UsIHNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAsXG4gICAgICAgICAgKCkgPT4gdGhpcy5oYW5kbGVHZXRCb3hFcnJvcihzb3VyY2UpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldFRleHRDb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAoIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPT09IHRydWUgKSA/ICdvcmFuZ2VyZWQnIDogJyc7XG4gIH1cblxuICBwcmVmaWxsQW5hbHl6ZURhdGEoKVxuICB7XG4gICAgaWYgKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMucHJlZmlsbEV2ZW50RW1pdHRlci5lbWl0KG5ldyBQcmVmaWxsRXZlbnQoQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIsIHRoaXMucHJlZmlsbERhdGEpICk7XG4gIH1cblxuICBsb2FkUGFyYW1zKHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSkge1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBpZiAocHJlZmlsbERhdGEgIT09IG51bGwgJiYgcHJlZmlsbERhdGEucGFyYW1ldGVycyAhPT0gbnVsbClcbiAgICB7XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnbWluTGV2ZWwnKSkge1xuICAgICAgICB0aGlzLm1pbkxldmVsID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbDtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdwb3N0YWxDb2RlJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUpKSB7XG4gICAgICAgIHRoaXMucG9zdGFsQ29kZSA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtdW5pY2lwYWxpdHlOYW1lJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUpKSB7XG4gICAgICAgIHRoaXMubG9jYWxpdHkgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TmFtZScpICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lKSkge1xuICAgICAgICB0aGlzLnN0cmVldE5hbWUgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TnVtYmVyJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcikpIHtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdib3hOdW1iZXInKVxuICAgICAgICAgICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXIpICYmIHRoaXMuaXNQYXJhbXNDb21wbGV0ZSgpKSB7XG4gICAgICAgIGNvbmNhdFN0ciA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uY2F0U3RyO1xuICB9XG5cbiAgaXNTdHJpbmcodmFsKTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsLmNvbnN0cnVjdG9yID09PSBTdHJpbmc7XG4gIH1cblxuICBpc1ZhbGlkKHZhbCkge1xuICAgIHJldHVybiB0aGlzLmlzU3RyaW5nKHZhbCkgJiYgdmFsICE9PSAnJztcbiAgfVxuXG4gIGlzUGFyYW1zQ29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgaWYoIXRoaXMudmFsaWRhdGVkQnlCYWNrZW5kKXtcbiAgICAgIHJldHVybiAodGhpcy5pc1ZhbGlkKHRoaXMucG9zdGFsQ29kZSkgfHwgdGhpcy5pc1ZhbGlkKHRoaXMubG9jYWxpdHkpKSAmJiB0aGlzLmlzVmFsaWQodGhpcy5zdHJlZXROYW1lKSAmJiB0aGlzLmlzVmFsaWQodGhpcy5zdHJlZXROdW1iZXIpO1xuICAgIH1lbHNlIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsID09PSBTdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUgJiYgdGhpcy5wcmVmaWxsRGF0YSl7XG4gICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKHRoaXMucG9zdGFsQ29kZSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMubG9jYWxpdHkpICYmIHRoaXMuaXNWYWxpZCh0aGlzLnN0cmVldE5hbWUpICYmIHRoaXMuaXNWYWxpZCh0aGlzLnN0cmVldE51bWJlcikgJiYgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlciE9PScnOyBcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQodGhpcy5wb3N0YWxDb2RlKSAmJiB0aGlzLmlzVmFsaWQodGhpcy5sb2NhbGl0eSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TmFtZSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TnVtYmVyKTtcbiAgICB9XG4gICAgXG4gIH1cblxuICBnZW5lcmF0ZVBhcmFtZXRlcnMoKTogUXVlcnlQYXJhbWV0ZXJzIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZVxuICAgIGNvbnN0IHBhcmFtID0gbmV3IFF1ZXJ5UGFyYW1ldGVycyh7XG4gICAgICBpZDogdGhpcy5zZXF1ZW5jZU51bWJlcixcbiAgICAgIHE6IHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgIHBvc3RhbENvZGU6IHRoaXMucG9zdGFsQ29kZSxcbiAgICAgIGxvY2FsaXR5OiB0aGlzLmxvY2FsaXR5LFxuICAgICAgc3RyZWV0OiB0aGlzLnN0cmVldE5hbWUsXG4gICAgICBzdHJlZXROdW1iZXI6IHRoaXMuc3RyZWV0TnVtYmVyLFxuICAgICAgbWF4TnVtYmVyT2ZTdWdnZXN0aW9uczogdGhpcy5tYXhTdWdnZXNpb25Db3VudFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc29ydENyaXRlcmlhID09PSAnQicpIHtcbiAgICAgIHBhcmFtLnNvcnRCeUJveCh0cnVlKTtcbiAgICB9XG4gICAgaWYodGhpcy5uaXM5SW5SZXNwb25zZSl7XG4gICAgICBwYXJhbS5zZXRJbmNsdWRlTmlzQ29kZSh0cnVlKVxuICAgIH1cbiAgICBpZih0aGlzLmJ1c2luZXNzTmFtZUluUmVzcG9uc2Upe1xuICAgICAgcGFyYW0uc2V0SW5jbHVkZUJ1c2luZXNzTmFtZSh0cnVlKVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW07XG4gIH1cblxuICBoYW5kbGVHZXRCb3hSZXNwb25zZShkYXRhOiBhbnksIHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAoZGF0YSAmJiBkYXRhLnJlc3BvbnNlICYmIGRhdGEucmVzcG9uc2Uuc2VxdWVuY2VOdW1iZXIgJiYgZGF0YS5yZXNwb25zZS5zZXF1ZW5jZU51bWJlciA+PSB0aGlzLmNvbnN1bWVkTnVtYmVyICYmXG4gICAgICBkYXRhLnJlc3BvbnNlLnRvcFN1Z2dlc3Rpb25zKSB7XG4gICAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gZGF0YS5yZXNwb25zZS5zZXF1ZW5jZU51bWJlcjtcbiAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgICAgdGhpcy5wYXJzZVRvcFN1Z2dlc3Rpb25zKGRhdGEucmVzcG9uc2UudG9wU3VnZ2VzdGlvbnMsIHNvdXJjZSk7XG4gICAgICB0aGlzLmJ1aWxkVHlwZUFoZWFkKHNvdXJjZSk7XG4gICAgICB0aGlzLmNsZWFyQ29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgICAgdGhpcy5idWlsZElucHV0V29yZExpc3QoKTtcbiAgICB9XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gKHRoaXMucHJlZmlsbGluZyA9PT0gdHJ1ZSAmJiB0aGlzLnByZWZpbGxEYXRhICE9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIXRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5vbkZvY3VzU2hvd1N1Z2dlc3Rpb25zQWZ0ZXJQcmVmaWxsIDogZmFsc2U7XG4gIH1cblxuICBoYW5kbGVHZXRCb3hFcnJvcihzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpIHtcbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zICs9IDE7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXIuZW1pdCh0aGlzLm51bWJlck9mRXhjZXB0aW9ucyk7XG4gICAgICB0aGlzLnNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICB9XG4gICAgaWYodGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiB0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCAmJiBzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCl7XG5cbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKz0xO1xuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyLmVtaXQodGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMpO1xuICAgICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgICB0aGlzLm9uSW5wdXRDaGFuZ2Uoc291cmNlKTtcbiAgICB9XG4gICAgaWYodGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiAhdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQgJiYgc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQgIClcbiAgICB7XG4gICAgICB0aGlzLm9uSW5wdXRDaGFuZ2Uoc291cmNlKTtcbiAgICB9XG4gICAgaWYoIXRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpXG4gICAge1xuICAgICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpIHtcbiAgICB0aGlzLmVycm9yQ29kZSA9ICdzZXJ2aWNlLXVuYXZhaWxhYmxlJztcbiAgICAvLyB0aGlzLnNldFZhbGlkYXRpb25NZXNzYWdlKHRoaXMuZXJyb3JDb2RlKTtcbiAgICB0aGlzLmVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLlNlcnZpY2VfVW5hdmFpbGFibGUpO1xuICB9XG5cbiAgY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCkge1xuICAgIGlmICh0aGlzLmVycm9yQ29kZSkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5lcnJvckNvZGUpO1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID09PSByZXMgKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JDb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwYXJzZVRvcFN1Z2dlc3Rpb25zKHRvcFN1Z2dlc3Rpb25zLCBzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHRvcFN1Z2dlc3Rpb25zLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgLy8gdG9wU3VnZ2VzdGlvbnMuZm9yRWFjaCh0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbi5iaW5kKHRoaXMpKTtcbiAgICAgIGxldCBwZXJmZWN0TWF0Y2hGb3VuZD1mYWxzZTtcbiAgICAgIGZvciAoY29uc3Qgc3VnIG9mIHRvcFN1Z2dlc3Rpb25zKVxuICAgICAge1xuICAgICAgICBpZih0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbihzdWcsIHNvdXJjZSkgPT09IHRydWUgKVxuICAgICAgICB7XG4gICAgICAgICAgcGVyZmVjdE1hdGNoRm91bmQ9dHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZighc291cmNlKVxuICAgICAge1xuICAgICAgICBpZiAoKHRvcFN1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmVtcHR5UmVzcG9uc2UpICYmIHRoaXMubm90SW5MaXN0QWxsb3dlZCkge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMucHVzaCh7c3RyaW5nOiB0aGlzLnNlYXJjaFRleHQsICdub3QtaW4tbGlzdCc6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsID09PSBTdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUgfHwgdGhpcy5zdWdnZXN0aW9uTGV2ZWwgPT09IFN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyKVxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgY29uc29sZS53YXJuKCdib3ggbnVtYmVyOjogbm8gbWF0Y2ggZm91bmQgLSBjdXJyZW50IGFkZHJlc3M6ICcsIHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICAgICAgICBpZiggISBwZXJmZWN0TWF0Y2hGb3VuZClcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBmYWtlU3VnID0gey4uLnRoaXMuc2VsZWN0ZWRBZGRyZXNzfTtcbiAgICAgICAgICAgIGZha2VTdWcuYm94TnVtYmVyID0gdGhpcy5zZWFyY2hUZXh0O1xuICAgICAgICAgICAgZmFrZVN1Zy5zdHJpbmc9dGhpcy5zZWFyY2hUZXh0O1xuICAgICAgICAgICAgZmFrZVN1Zy5pc0NvbXBsZXRlPWZhbHNlO1xuICAgICAgICAgICAgLy90aGlzLmNsaWNrU3VnZ2VzdGlvbihudWxsLCBmYWtlU3VnKTsgLy8gZG8gbm90IGRvIHRoaXNcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYmV0dGVyICFcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChmYWtlU3VnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gSWYgcHJlZmlsbGluZywgdGhlbiBjaGVjayBpZiBubyBtYXRjaCBmb3IgYSBub24tZW1wdHkgYm94TnVtYmVyXG4gICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHNpbXVsYXRlIHRoZSBzZWxlY3Rpb24gb2YgdGhlICdub3QtaW4tbGlzdCcgc3VnZ2VzdGlvblxuICAgICAgICBpZih0aGlzLnByZWZpbGxpbmcgJiYgdGhpcy5ub3RJbkxpc3RBbGxvd2VkXG4gICAgICAgICAgICAmJiB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gZmFsc2VcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlciAhPT0gbnVsbFxuICAgICAgICAgICAgJiYgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlci5sZW5ndGggPiAwKVxuICAgICAgICB7XG4gICAgICAgICAgLy8gY29uc3Qgbm90SW5MaXN0U3VnZ2VzdGlvbiA9IHtzdHJpbmc6IHRoaXMuc2VhcmNoVGV4dCwgJ25vdC1pbi1saXN0JzogdHJ1ZX07XG4gICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IHRoaXMucHJlZmlsbEJ1aWxkTm90SW5MaXN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ0JPWCBOVU1CRVIgLSBQUkVGSUxMIE5PVCBJTiBMSVNUIFNVR0dFU1RJT046Jywgc3VnZ2VzdGlvbik7IH1cbiAgICAgICAgICB0aGlzLnByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uKHRvcFN1Z2dlc3Rpb25zLCBzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByZWZpbGxCdWlsZE5vdEluTGlzdFN1Z2dlc3Rpb24oKTogYW55IHtcbiAgICBjb25zdCBub3RJbkxpc3RTdWdnZXN0aW9uID0ge3N0cmluZzogdGhpcy5zZWFyY2hUZXh0LCAnbm90LWluLWxpc3QnOiB0cnVlfTtcbiAgICBjb25zdCBzdHJlZXROdW1iZXJTdWdnZXN0aW9uID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICBjb25zdCBjb21iaW5lZCA9IHsuLi5zdHJlZXROdW1iZXJTdWdnZXN0aW9uLmFkZHJlc3MsIC4uLm5vdEluTGlzdFN1Z2dlc3Rpb259O1xuICAgIGRlbGV0ZSBjb21iaW5lZC5tYWlsQm94aWQ7XG4gICAgZGVsZXRlIGNvbWJpbmVkLnN1ZmZpeElkO1xuICAgIGNvbWJpbmVkLmJveE51bWJlciA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5zZWFyY2hCYXJTdHJpbmcgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgY29tYmluZWQuaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgc3RyZWV0TnVtYmVyU3VnZ2VzdGlvbi5hZGRyZXNzID0gY29tYmluZWQ7XG4gICAgcmV0dXJuIHN0cmVldE51bWJlclN1Z2dlc3Rpb247XG4gIH1cblxuICBwYXJzZVNpbmdsZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogYW55LCBzb3VyY2U6IFNvdXJjZVR5cGUpOiBib29sZWFuICB7XG4gICAgbGV0IHN1Z2dlc3Rpb25Ub0FkZDogYW55O1xuICAgIGxldCBpc1BlcmZlY3RNYXRjaD1mYWxzZTtcblxuICAgIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVGcmVuY2goKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdmcmVuY2gnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5mcmVuY2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVEdXRjaCgpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2R1dGNoJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uZHV0Y2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVHZXJtYW4oKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdnZXJtYW4nKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5nZXJtYW47XG4gICAgfSBlbHNlIGlmIChzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdhZGRyZXNzJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICB9XG4gICAgaWYgKHN1Z2dlc3Rpb25Ub0FkZCkge1xuICAgICAgaWYgKHN1Z2dlc3Rpb24ubWVzc2FnZXMpIHtcbiAgICAgICAgc3VnZ2VzdGlvblRvQWRkLm1lc3NhZ2VzID0gc3VnZ2VzdGlvbi5tZXNzYWdlcztcbiAgICAgIH1cbiAgICAgIGlmIChzdWdnZXN0aW9uVG9BZGQuYm94TnVtYmVyID09PSB0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zLnB1c2goc3VnZ2VzdGlvblRvQWRkKTtcbiAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRClcbiAgICAgIHtcbiAgICAgICAgc3VnZ2VzdGlvbi5hZGRyZXNzID0gc3VnZ2VzdGlvblRvQWRkO1xuICAgICAgICBpc1BlcmZlY3RNYXRjaD10aGlzLnByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbkxldmVsICE9PSBTdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldEFuZEJveE51bWJlcilcbiAgICAgIHtcbiAgICAgICAgc3VnZ2VzdGlvbi5hZGRyZXNzID0gc3VnZ2VzdGlvblRvQWRkO1xuICAgICAgICBpc1BlcmZlY3RNYXRjaD10aGlzLmNoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pO1xuICAgICAgICBpZighIGlzUGVyZmVjdE1hdGNoKVxuICAgICAgICB7XG4gICAgICAgICAgLy8gc2VlbXMgbm90aGluZyB0byBkbz9cbiAgICAgICAgICAvLyBObyBuZWVkIHRvIG5vdGlmeSBmb3IgYSBpbmNvbXBsZXRlIGFkZHJlc3NcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNQZXJmZWN0TWF0Y2g7XG4gIH1cblxuICBjaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTogYm9vbGVhblxuICB7XG4gICAgLy9pZiAoICF0aGlzLmFkZHJlc3NJc0NvbXBsZXRlIClcbiAgICB7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdib3ggbnVtYmVyIC0gY2hlY2tpbmcgc3VnZ2VzdGlvbiBmb3IgcGVyZmVjdCBtYXRjaCcsIHN1Z2dlc3Rpb24sIHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWdBZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkJveE51bWJlciA9IHRoaXMudHJhbnNmb3JtQm94TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcygnJyArIHN1Z0FkZHJlc3MuYm94TnVtYmVyKTtcblxuICAgICAgaWYgKHN1Z2dlc3Rpb25Cb3hOdW1iZXIgPT09ICgnJyArIHRoaXMuc2VhcmNoVGV4dCkgKVxuICAgICAge1xuICAgICAgICAvL3RoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTvDp1xuICAgICAgICAvL3RoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uO1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzdWdBZGRyZXNzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKHN1Z0FkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBzdWdBZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihudWxsLCBzdWdBZGRyZXNzKTtcbiAgICAgICAgICAvLyB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQUREUkVTUyBDT01QTEVURSBPTiBCT1ggTlVNQkVSICEnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgfVxuXG4gIHByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTogYm9vbGVhblxuICB7XG4gICAgLy9pZiAoICF0aGlzLmFkZHJlc3NJc0NvbXBsZXRlIClcbiAgICB7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdib3ggbnVtYmVyIC0gUFJFRklMTCBjaGVja2luZyBzdWdnZXN0aW9uIGZvciBwZXJmZWN0IG1hdGNoJywgdGhpcy5wcmVmaWxsRGF0YSwgc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWdBZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkJveE51bWJlciA9IHRoaXMudHJhbnNmb3JtQm94TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcygnJyArIHN1Z0FkZHJlc3MuYm94TnVtYmVyKTtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2NvbXBhcmluZyBib3ggbnVtYmVycycsIHN1Z2dlc3Rpb25Cb3hOdW1iZXIsIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlcik7XG4gICAgICB9XG4gICAgICBpZiAoc3VnZ2VzdGlvbkJveE51bWJlciA9PT0gKCcnICsgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyKSApXG4gICAgICB7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb247XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHN1Z0FkZHJlc3MuYm94TnVtYmVyO1xuICAgICAgICBpZiAoc3VnQWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIHN1Z0FkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKG51bGwsIHN1Z0FkZHJlc3MpO1xuICAgICAgICAgIC8vIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBRERSRVNTIENPTVBMRVRFIE9OIEJPWCBOVU1CRVIgIScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKiBlbHNlXG4gICAge1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnQWRkcmVzcyBjb21wbGV0ZSwgc2tpcHBpbmcgc3VnZ2VzdGlvbiBjaGVjaycsIHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgIH0gKi9cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2VfbmV3KHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIH1cbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgKz0gMTtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSB0aGlzLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgICBpZih0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSB8fCB0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLmxvZygnZG8gbm90IHVzZSBzdWdnZXN0aW9ucyBmb3IgYm94IG51bWJlcicpO1xuICAgICAgICB0aGlzLmJveE51bWJlckNoYW5nZWQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZih0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSB8fCB0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLmxvZygnZG8gbm90IHVzZSBzdWdnZXN0aW9ucyBmb3IgYm94IG51bWJlcicpO1xuICAgICAgICB0aGlzLmJveE51bWJlckNoYW5nZWQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZighdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpe1xuICAgICAgICAgIGxldCBzdWdnZXN0aW9uID0ge1xuICAgICAgICAgICAgJ3N0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgJ211bmljaXBhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICAgJ2xvY2FsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgICAncG9zdGFsQ29kZSc6IHRoaXMucG9zdGFsQ29kZSxcbiAgICAgICAgICAgICdzZWFyY2hCYXJTdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICdzdHJlZXROYW1lJzogdGhpcy5zdHJlZXROYW1lLFxuICAgICAgICAgICAgJ2hvdXNlTnVtYmVyJzp0aGlzLnN0cmVldE51bWJlcixcbiAgICAgICAgICAgICdib3hOdW1iZXInOnRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb24pO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLmdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5idWlsZElucHV0V29yZExpc3QoKTtcbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2Uoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IGZhbHNlO1xuICAgIHRoaXMuZW1wdHlSZXNwb25zZSA9IHRydWU7XG4gICAgdGhpcy5yZXNldEFycm93U2VsZWN0ZWRJbmRleCgpO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0ID09PSAnJykge1xuICAgICAgdGhpcy5zZXF1ZW5jZU51bWJlciArPSAxO1xuICAgICAgdGhpcy5jb25zdW1lZE51bWJlciA9IHRoaXMuc2VxdWVuY2VOdW1iZXI7XG4gICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lIHx8IHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXROdW1iZXIpXG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkbyBub3QgdXNlIHN1Z2dlc3Rpb25zIGZvciBib3ggbnVtYmVyJyk7XG4gICAgICAgIHRoaXMuYm94TnVtYmVyQ2hhbmdlZC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lIHx8IHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXROdW1iZXIpXG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkbyBub3QgdXNlIHN1Z2dlc3Rpb25zIGZvciBib3ggbnVtYmVyJyk7XG4gICAgICAgIHRoaXMuYm94TnVtYmVyQ2hhbmdlZC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKCF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCl7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCkge1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcblxuICAgICAgICAgIGxldCBzdWdnZXN0aW9uID17XG4gICAgICAgICAgJ2FkZHJlc3MnOiB7XG4gICAgICAgICAgICAnc3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgICAnbG9jYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAgICdwb3N0YWxDb2RlJzogdGhpcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgJ3N0cmVldE5hbWUnOiB0aGlzLnN0cmVldE5hbWUsXG4gICAgICAgICAgICAnaG91c2VOdW1iZXInOnRoaXMuc3RyZWV0TnVtYmVyLFxuICAgICAgICAgICAgJ2JveE51bWJlcic6dGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9fVxuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uID0gc3VnZ2VzdGlvblxuICAgICAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIHRoaXMucHJlZmlsbEFuYWx5emVEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgIGxldCBzdWdnZXN0aW9uID0ge1xuICAgICAgICAgICdzdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgJ2xvY2FsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgJ3Bvc3RhbENvZGUnOiB0aGlzLnBvc3RhbENvZGUsXG4gICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICdzdHJlZXROYW1lJzogdGhpcy5zdHJlZXROYW1lLFxuICAgICAgICAgICdob3VzZU51bWJlcic6dGhpcy5zdHJlZXROdW1iZXIsXG4gICAgICAgICAgJ2JveE51bWJlcic6dGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICB0aGlzLmdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYnVpbGRJbnB1dFdvcmRMaXN0KCk7XG4gIH1cblxuXG4gIGNsaWNrU3VnZ2VzdGlvbihldmVudDogYW55LCBzdWdnZXN0aW9uPzogYW55KSB7XG4gICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgICBpZiAoc3VnZ2VzdGlvbi5zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHN1Z2dlc3Rpb24uc2VhcmNoQmFyU3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgICAvLyBpZiAoc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpKSB7XG4gICAgICAvLyAgIHRoaXMuc2hvd0FkZHJlc3NJc1ZhbGlkYXRlZCgpO1xuICAgICAgLy8gfVxuICAgICAgaWYgKHN1Z2dlc3Rpb25bJ25vdC1pbi1saXN0J10pIHtcbiAgICAgICAgc3VnZ2VzdGlvbiA9IHRoaXMubW9kaWZ5U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgc3VnZ2VzdGlvbi5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIG1vZGlmeVNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uOiBvYmplY3QpIHtcbiAgICBjb25zdCBjb21iaW5lZCA9IHsuLi50aGlzLnNlbGVjdGVkQWRkcmVzcywgLi4uc3VnZ2VzdGlvbn07XG4gICAgZGVsZXRlIGNvbWJpbmVkLm1haWxCb3hpZDtcbiAgICBkZWxldGUgY29tYmluZWQuc3VmZml4SWQ7XG4gICAgY29tYmluZWQuYm94TnVtYmVyID0gY29tYmluZWQuc3RyaW5nO1xuICAgIGNvbWJpbmVkLnNlYXJjaEJhclN0cmluZyA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICByZXR1cm4gY29tYmluZWQ7XG4gIH1cblxuICBzZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2JveCBudW1iZXI6OnNldFNlbGVjdGVkQWRkcmVzcycsIHN1Z2dlc3Rpb24pO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBzdWdnZXN0aW9uLmlzQ29tcGxldGUgPT09IHRydWUpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChzdWdnZXN0aW9uKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWRBZGRyZXNzKCkge1xuICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChudWxsKTtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICB9XG5cbiAgLypcbiAgc2V0VmFsaWRhdGlvbk1lc3NhZ2UodHJhbnNsYXRpb25Db2RlLCBvcHRpb25zPywgcmV0cmFuc2xhdGVPcHRpb25zPykge1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAocmV0cmFuc2xhdGVPcHRpb25zICYmIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnNbJ3VudHJhbnNsYXRlZC1zcHJpbnRmJ10pICYmXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucy5zcHJpbnRmKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkRWxlbWVudHMgPSBbXTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zWyd1bnRyYW5zbGF0ZWQtc3ByaW50ZiddLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICB0cmFuc2xhdGVkRWxlbWVudHMucHVzaCh0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoZWxlbWVudCkpO1xuICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICApO1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMuc3ByaW50ZiA9IHRyYW5zbGF0ZWRFbGVtZW50cztcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZUNvZGUgPSB0cmFuc2xhdGlvbkNvZGU7XG4gICAgLy8gZW1pdCB0cmFuc2xhdGlvbiBrZXkgdG8gd3JhcHBlciBjb21wb25lbnQgZm9yIGN1c3RvbWl6ZWQgdHJhbnNsYXRpb25zXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VDb2RlLCB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucyk7XG4gICAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQodGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQodGhpcy52YWxpZGF0aW9uTWVzc2FnZUNvZGUpO1xuICAgIH1cbiAgfVxuICAqL1xuXG4gIGVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIG9wdGlvbnM/OiBzdHJpbmdbXSkge1xuICAgIC8vIE1vbWVudGx5LCBvcHRpb25zIGFyZSBOT1QgdXNlZDsgc28gZGF0YSB0eXBlIG9mIHRoZXNlIG9wdGlvbnMgd2lsbCBiZSByZXZpZXdlZCBvbmNlIG5lZWRlZC5cbiAgICBpZiAodmFsaWRhdGlvbk1lc3NhZ2VUeXBlID09PSBudWxsIHx8IHZhbGlkYXRpb25NZXNzYWdlVHlwZSA9PT0gdW5kZWZpbmVkICkge1xuICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZW1pdCB2YWxpZGF0aW9uIG1lc3NhZ2UgLSBtZXNzYWdlIGtleSBpcyBpbnZhbGlkIScsIHZhbGlkYXRpb25NZXNzYWdlVHlwZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoICh2YWxpZGF0aW9uTWVzc2FnZVR5cGUpIHtcblxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19Ob3RfRm91bmQ6XG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX1ZhbGlkYXRlZDpcbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLlNlcnZpY2VfVW5hdmFpbGFibGU6IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgICAgICAvLyB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQobWVzc2FnZSk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHttZXNzYWdlVHlwZTogdmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCB0cmFuc2xhdGVkTWVzc2FnZTogbWVzc2FnZX0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTphbGlnblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBlbWl0IHZhbGlkYXRpb24gbWVzc2FnZSAtIG1lc3NhZ2Uga2V5IE5PVCBzdXBwb3J0ZWQhJywgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gIH1cbiAgc2hvd0FkZHJlc3NJc1ZhbGlkYXRlZCgpIHtcbiAgICAvLyB0aGlzLnNldFZhbGlkYXRpb25NZXNzYWdlKCdhZGRyZXNzLXZhbGlkYXRlZCcpO1xuICAgIHRoaXMuZW1pdFRyYW5zbGF0ZWRWYWxpZGF0aW9uTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19WYWxpZGF0ZWQpO1xuICB9XG5cbiAgY2hlY2tLZXlEb3duKGV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgLy8gZG93biBrZXksIGluY3JlbWVudCBzZWxlY3RlZEluZGV4XG4gICAgICBjYXNlIDQwOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdmVBcnJvd1NlbGVjdGVkSW5kZXhEb3duKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyB1cCBrZXksIGRlY3JlbWVudCBzZWxlY3RlZEluZGV4XG4gICAgICBjYXNlIDM4OlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdmVBcnJvd1NlbGVjdGVkSW5kZXhVcCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIHJpZ2h0IGFycm93IGtleVxuICAgICAgY2FzZSAzOTpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihldmVudCwgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy50eXBlQWhlYWRXb3JkICYmIHRoaXMudHlwZUFoZWFkSXNTaG93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5icFR5cGVBaGVhZCk7XG4gICAgICAgICAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyB0YWIga2V5XG4gICAgICBjYXNlIDk6XG4gICAgICAgIGlmICghdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdEZpcnN0SW5MaXN0T2ZTdWdnZXNpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDY6XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gZW50ZXIgcHJlc3NlZFxuICAgICAgY2FzZSAxMzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihldmVudCwgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuICB9XG4gIGNoZWNrS2V5VVAoZXZlbnQpXG4gIHtcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICBcbiAgICAgIGNhc2UgODpcbiAgICAgICBcbiAgICAgICAgaWYodGhpcy5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1BBUlRJQUxfQ0xFQVJfQk9YX05VTUJFUicpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdCT1hfTlVNQkVSJyk7XG4gICAgICAgIH1cbiAgICAgICAgIGJyZWFrOyAgICAgICAgIFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuICAgIFxuICB9XG4gIGNsZWFyV2lkZ2V0KCkge1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhclNlYXJjaFRleHQoKTtcbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgdGhpcy5wcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgLy8gdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gIH1cblxuICBjbGVhclNlYXJjaFRleHQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gIH1cblxuICB0eXBlQWhlYWRJc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLmJwVHlwZUFoZWFkICYmIHRoaXMuYnBUeXBlQWhlYWQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG5cbiAgbW92ZUFycm93U2VsZWN0ZWRJbmRleERvd24oKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCArIDEgIT09IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXgrKztcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggLSAxKTtcbiAgICB9XG4gIH1cblxuICBtb3ZlQXJyb3dTZWxlY3RlZEluZGV4VXAoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCAtIDEgIT09IC0yKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXgtLTtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICBjdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJbmRleCA+PSAwO1xuICB9XG5cbiAgc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbihuZXdWYWwsIG9sZFZhbCkge1xuICAgIGlmIChuZXdWYWwgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuZXdWYWwgIT09IC0xKSB7XG4gICAgICBpZiAob2xkVmFsID09PSAtMSkge1xuICAgICAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVGV4dDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0uc3RyaW5nKTtcbiAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMubGFzdFNlYXJjaFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtYXlTaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPiAwO1xuICB9XG5cbiAgY2xlYXJJbnB1dChmb2N1cz8sIGVtaXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICB0aGlzLnByZXZpb3VzSW5kZXggPSAtMTtcbiAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMuY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgaWYgKGZvY3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJveE51bWJlclNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLy8gdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KG51bGwpO1xuICAgIGlmKGVtaXQpIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KC8qJ0JPWF9OVU1CRVInKi8gSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25zKCkge1xuICAgIHRoaXMud29yZExpc3QgPSBbXTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gIH1cblxuICBjbGVhclR5cGVBaGVhZCgpIHtcbiAgICB0aGlzLmJwVHlwZUFoZWFkID0gJyc7XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICB0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHttZXNzYWdlVHlwZTogbnVsbCwgdHJhbnNsYXRlZE1lc3NhZ2U6IHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlfSk7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMgPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgfVxuXG4gIHNldFNlYXJjaFRleHQodmFsdWUpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZTtcbiAgfVxuXG4gIHNlbGVjdEZpcnN0SW5MaXN0T2ZTdWdnZXNpb25zKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XG4gICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oKTtcbiAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggLSAxKTtcbiAgfVxuXG4gIGNoYW5nZVNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHN1Z2dlc3Rpb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG5cbiAgc2hvd0FkZHJlc3NOb3RGb3VuZE1lc3NhZ2UoKSB7XG4gICAgLy8gdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSgnYWRkcmVzcy1ub3QtZm91bmQnKTtcbiAgICB0aGlzLmVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfTm90X0ZvdW5kKTtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuICh0aGlzLmxvY2FsaXR5ID09PSAnJyB8fCB0aGlzLnBvc3RhbENvZGUgPT09ICcnIHx8IHRoaXMubWluTGV2ZWwgPiBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gIH1cblxuICBvbklucHV0Q2xpY2soKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnYm94IG51bWJlciBjbGljaycpOyB9XG4gIH1cbn1cbiIsIjxzcGFuICpuZ0lmPVwibGFiZWxSZXNvdXJjZUtleVwiPnt7IGxhYmVsUmVzb3VyY2VLZXkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbjxkaXYgY2xhc3M9XCJicGFhYy1kcm9wZG93blwiPlxuICAgIDxkaXYgY2xhc3M9XCJicGFhYy1zZWFyY2gtYmFyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJicGFhYy1pbnB1dC13aWR0aFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiIC0tPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI2JveE51bWJlclNlYXJjaElucHV0IGNsYXNzPVwiYnBhYWMtaW5wdXRcIiBcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgIChrZXl1cCkgPSAoY2hlY2tLZXlVUCgkZXZlbnQpKVxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIiFpc1BhcmFtc0NvbXBsZXRlKCkgPyAnbGlnaHRncmV5JyA6ICcnXCIgXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIiBnZXRUZXh0Q29sb3IoKSBcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc3RyZWV0TnVtYmVyIHx8IHN0cmVldE51bWJlci50cmltKCkubGVuZ3RoID09PSAwXCIgKGtleWRvd24pPVwiY2hlY2tLZXlEb3duKCRldmVudClcIiBcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgpXCIgKGNsaWNrKT1cIm9uSW5wdXRDbGljaygpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiBpZD1cImJveE51bWJlcklucHV0RmllbGRcIiBbYXR0ci50aXRsZV09XCJwbGFjZUhvbGRlclRleHRcIiBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIC8+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiYnBhYWMtY2xlYXItYm94TmItYnV0dG9uXCIgKm5nSWY9XCJtYXlTaG93Q2xlYXJCdXR0b24oKVwiIChjbGljayk9XCJjbGVhcklucHV0KHRydWUpXCIgY2xhc3M9XCJicGFhYy1jbGVhclwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tPGRpdiBuZy10cmFuc2NsdWRlPjwvZGl2Pi0tPlxuICAgICAgICA8aW5wdXQgaWQ9XCJicGFhYy1ib3hOYi10eXBlYWhlYWRcIiB0eXBlPVwidGV4dFwiIGRpc2FibGVkIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwiYnBUeXBlQWhlYWRcIiAvPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImFkZHJlc3NJc1ZhbGlkYXRlZFwiIGNsYXNzPVwiYm94TmJDaGVrbWFya1wiPjxzcGFuIGNsYXNzPVwiY2hlY2ttYXJrXCI+PC9zcGFuPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IFtoaWRkZW5dPVwiY29sbGFwc2VEcm9wZG93blwiIGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tbWVudS1jb250YWluZXJcIiBcbiAgICAgICAgKm5nSWY9XCJzdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldEFuZEJveE51bWJlciAmJiAgc3VnZ2VzdGlvbnMgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoPjBcIj5cbiAgICAgICAgPGRpdiAjYm94TnVtYmVyTGlzdCBbYXBwVmlzaWJsZVN1Z2dlc3Rpb25dPVwidmlzaWJsZVN1Z2dlc2lvbkNvdW50XCIgaWQ9XCJicGFhYy1ib3gtZHJvcGRvd25cIiBjbGFzcz1cImJwYWFjLWRyb3Bkb3duLW1lbnVcIj5cbiAgICAgICAgICAgIDx1bCByb2xlPVwibGlzdGJveFwiIGlkPVwiYnBhYWMtYm94TmItc3VnZ2VzdGlvbnNMaXN0XCIgY2xhc3M9XCJsaXN0LXVuc3R5bGVkXCI+XG4gICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJvcHRpb25cIiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHN1Z2dlc3Rpb25zOyBsZXQgaWR4ID0gaW5kZXhcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6KHNlbGVjdGVkSW5kZXg9PWlkeCl9XCIgXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJjbGlja1N1Z2dlc3Rpb24oJGV2ZW50LCBvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4PWlkeFwiIChtb3VzZWxlYXZlKT1cInNlbGVjdGVkSW5kZXg9LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvcHRpb25cIiBbaW5uZXJIdG1sXT1cIm9wdGlvblsnbm90LWluLWxpc3QnXSA/IGVtcHR5UmVzcG9uc2VUZXh0IDogb3B0aW9uLnN0cmluZyB8IGhpZ2hsaWdodFN1Z2dlc3Rpb24gOiB3b3JkTGlzdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
1022
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvYm94LW51bWJlci9ib3gtbnVtYmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQvc3JjL2xpYi9ib3gtbnVtYmVyL2JveC1udW1iZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBa0QsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUc3SixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUs3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7OztBQVF6RSxNQUFNLE9BQU8sa0JBQWtCO0lBc0c3QixZQUNVLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxjQUE4QjtRQUg5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdB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WTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUdPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBYUcsYUFBYTtzQkFBckIsS0FBSztnQkFHTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBRUcsc0JBQXNCO3NCQUEvQixNQUFNO2dCQUVHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFHUCxnQkFBZ0I7c0JBRGYsTUFBTTtnQkFFRyx5QkFBeUI7c0JBQWxDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFByZWZpbGxlZFBhcmFtZXRlcnMgfSBmcm9tICcuLi91dGlscy9wcmVmaWxsZWQtcGFyYW1ldGVycyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZVR5cGUgfSBmcm9tICcuLi9lbnVtL3ZhbGlkYXRpb24tbWVzc2FnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgQWRkcmVzc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hZHJlc3Muc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgVW5pY29kZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91bmljb2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRG9tSGFuZGxlciB9IGZyb20gJy4uL3V0aWxzL2RvbWhhbmRsZXInO1xuaW1wb3J0IHsgQUREUkVTU0xFVkVMIH0gZnJvbSAnLi4vZW51bS9hZGRyZXNzLWxldmVsLmVudW0nO1xuaW1wb3J0IHsgUXVlcnlQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vbW9kZWwvcXVlcnktcGFyYW1ldGVycy5tb2RlbCc7XG5pbXBvcnQgeyBQcmVmaWxsRGF0YSB9IGZyb20gJy4uL3V0aWxzL3ByZWZpbGwtZGF0YSc7XG5pbXBvcnQgeyBTb3VyY2VUeXBlIH0gZnJvbSAnLi4vZW51bS9zb3VyY2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IFByZWZpbGxFdmVudCB9IGZyb20gJy4uL3V0aWxzL3ByZWZsbGwuZXZlbnQnO1xuaW1wb3J0IHsgSW5wdXROYW1lVHlwZSB9IGZyb20gJy4uL2VudW0vaW5wdXQtbmFtZS5lbnVtJztcbmltcG9ydCB7IFN1Z2dlc3Rpb25MZXZlbFR5cGUgfSBmcm9tICcuLi9lbnVtL3N1Z2dlc3Rpb24tbGV2ZWwtdHlwZS5lbnVtJztcbmltcG9ydCB7IEF1dG9maWxsRGF0YSB9IGZyb20gJy4uL3V0aWxzL2F1dG9maWxsLWRhdGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicC1ib3gtbnVtYmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JveC1udW1iZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ib3gtbnVtYmVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQm94TnVtYmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZCgnYm94TnVtYmVyU2VhcmNoSW5wdXQnLCB7c3RhdGljOiBmYWxzZX0gKSBib3hOdW1iZXJTZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnYm94TnVtYmVyTGlzdCcsIHtzdGF0aWM6IGZhbHNlfSApIGJveE51bWJlckxpc3Q6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvLyAyMDIwLTA2LTE1XG4gIC8vIEBJbnB1dCgpXG4gIC8vIG9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YTtcblxuICBASW5wdXQoKSBhdXRvZmlsbERhdGE6IEF1dG9maWxsRGF0YTtcbiAgQElucHV0KCkgc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGxhYmVsUmVzb3VyY2VLZXkgPSAnY29tbW9uLmxhYmVsLmJveE51bWJlcic7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc2lvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc2lvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhID0gJyc7XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgYWRkcmVzc1BhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgQElucHV0KCkgcG9zdGFsQ29kZTogc3RyaW5nO1xuICBASW5wdXQoKSBsb2NhbGl0eTogc3RyaW5nO1xuICBASW5wdXQoKSBzdHJlZXROYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0cmVldE51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxlY3RlZEFkZHJlc3M7XG4gIEBJbnB1dCgpIG5vdEluTGlzdEFsbG93ZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFsbG93Tm9WYWxpZGF0aW9uOiBib29sZWFuO1xuICBASW5wdXQoKSB2YWxpZGF0ZWRCeUJhY2tlbmQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG51bWJlck9mRXhjZXB0aW9uczogbnVtYmVyO1xuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IGlucHV0TGFuZyh2YWw6IHN0cmluZykge1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZXQgbGFuZycsIHZhbCk7XG4gICAgdGhpcy5sb2NhbGVTZXJ2aWNlLmNoYW5nZUxhbmcodmFsKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKHZhbCkuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdzZXQgbGFuZyBhZnRlciBzdWJzY3JpYmUnLCByZXMpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZExhbmd1YWdlKCk7XG4gICAgICAgIC8vIGlmIChyZXMgIT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBASW5wdXQoKSBtZXNzYWdlT3B0aW9uID0gJ1knO8K1XG5cbiAgQElucHV0KClcbiAgaXNSZWFkb25seT1mYWxzZTtcblxuICBASW5wdXQoKVxuICBzdWdnZXN0aW9uTGV2ZWw6IFN1Z2dlc3Rpb25MZXZlbFR5cGU7XG5cbiAgQElucHV0KCkgbmlzOUluUmVzcG9uc2U6IGJvb2xlYW5cbiAgQElucHV0KCkgYnVzaW5lc3NOYW1lSW5SZXNwb25zZTogYm9vbGVhblxuICBAT3V0cHV0KCkgbWVzc2FnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjx7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWRkcmVzc0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBibHVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdGV4dENoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGVtcHR5UmVzcG9uc2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGNsZWFySW5wdXRFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBwcmVmaWxsRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8UHJlZmlsbEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlZmlsbEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBib3hOdW1iZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID1uZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG5cbiAgYWRkcmVzc0lzVmFsaWRhdGVkOiBib29sZWFuO1xuICBzdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbiAgc3VnZ2VzdGlvbnM6IGFueTtcbiAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICBsYXN0U2VhcmNoVmFsdWU6IHN0cmluZztcbiAgd29yZExpc3Q6IGFueTtcbiAgc3VnZ2VzdGlvbnNXb3JkTGlzdDogYW55O1xuICBicFR5cGVBaGVhZDogc3RyaW5nO1xuICBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcbiAgc2tpcE5leHRCbHVyOiBib29sZWFuOyAvLyBPbkJsdXIgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHN1Z2dlc3Rpb24vdmFsaWRhdG9yIGJ1dHRvblxuICBlcnJvckNvZGU6IGFueTtcblxuICBtaW5MZXZlbDogbnVtYmVyO1xuICBzZWxlY3RlZEluZGV4OiBudW1iZXI7XG4gIGNvbGxhcHNlRHJvcGRvd246IGJvb2xlYW47XG4gIHR5cGVBaGVhZFdvcmQ6IHN0cmluZztcbiAgc2VxdWVuY2VOdW1iZXI6IG51bWJlcjtcbiAgY29uc3VtZWROdW1iZXI6IG51bWJlcjtcbiAgc2VsZWN0aW9uQ2hhbmdlZDogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgZW1wdHlSZXNwb25zZVRleHQ6IHN0cmluZztcbiAgZW1wdHlSZXNwb25zZTogYm9vbGVhbjtcblxuICBwcmVmaWxsaW5nID0gZmFsc2U7XG4gIGlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG5cbiAgU3VnZ2VzdGlvbkxldmVsVHlwZT1TdWdnZXN0aW9uTGV2ZWxUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWRkcmVzc1NlcnZpY2U6IEFkZHJlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1bmljb2RlU2VydmljZTogVW5pY29kZVNlcnZpY2UsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgLy8gaW5zdGFuY2UgcHJvcGVydGllc1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLndvcmRMaXN0ID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gICAgdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICAgIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gJyc7XG4gICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTsgLy8gT25CbHVyIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzdWdnZXN0aW9uL3ZhbGlkYXRvciBidXR0b25cbiAgICB0aGlzLmVycm9yQ29kZSA9IG51bGw7XG4gICAgLy8gc2NvcGUgcHJvcGVydGllc1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIHByb3BlcnRpZXNcbiAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSAnJztcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgPSAxO1xuICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSAxO1xuICAgIC8vIGluaXRpYWxpemF0aW9uXG4gICAgdGhpcy5zZXRTZWFyY2hUZXh0KCcnKTtcbiAgICAvLyB0aGlzLnNldFBsYWNlSG9sZGVyVGV4dCgpO1xuICAgIHRoaXMuc2V0RW1wdHlSZXNwb25zZVRleHQoKTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSB0cnVlO1xuICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkKSB7XG4gICAgICBjb25zdCBvdmVybGF5OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMuYm94TnVtYmVyTGlzdC5uYXRpdmVFbGVtZW50O1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKG92ZXJsYXksICdsaS5hY3RpdmUnKTtcbiAgICAgICAgaWYgKGxpc3RJdGVtKSB7XG4gICAgICAgICAgRG9tSGFuZGxlci5zY3JvbGxJblZpZXcob3ZlcmxheSwgbGlzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9LCAxKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcykge1xuICAgICAgaWYoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYXV0b2ZpbGxEYXRhJykgJiYgY2hhbmdlcy5hdXRvZmlsbERhdGEuY3VycmVudFZhbHVlICE9PSBudWxsICYmIGNoYW5nZXMuYXV0b2ZpbGxEYXRhLmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0PXRoaXMubG9hZEF1dG9GaWxsUGFyYW1zKGNoYW5nZXMuYXV0b2ZpbGxEYXRhLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHRoaXMuYXV0b2ZpbGxEYXRhLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgICB9ZWxzZXtcbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdwcmVmaWxsRGF0YScpICYmICFjaGFuZ2VzLnByZWZpbGxEYXRhLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMucHJlZmlsbGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMubG9hZFBhcmFtcyhjaGFuZ2VzLnByZWZpbGxEYXRhLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgIT09ICcnICYmIHRoaXMubWluTGV2ZWwgPT09IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKSB7XG4gICAgICAgICAgLy8gdGhpcy5vbklucHV0Q2hhbmdlKCdwcmVmaWxsZWQnKTtcbiAgICAgICAgICAvLyB0aGlzLmJveE51bWJlclNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclxuICAgICAgICAgICAgPSB0aGlzLnRyYW5zZm9ybUJveE51bWJlckluTG93ZXJjYXNlQW5kV2l0aG91dERpYWNyaXRpY3ModGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcik7XG4gICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKC8qJ3ByZWZpbGxlZCcqLyBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TnVtYmVyJykgJiYgIWNoYW5nZXMuc3RyZWV0TnVtYmVyLmZpcnN0Q2hhbmdlICYmICFjaGFuZ2VzLmhhc093blByb3BlcnR5KCdwcmVmaWxsRGF0YScpKSB7XG5cbiAgICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsICE9PSBTdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUpXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRMYW5nJykgLyAqJiYgIWNoYW5nZXMuYWRkcmVzc1BhcmFtcy5maXJzdENoYW5nZSogLykge1xuICAgICAgICBjb25zdCBsYW5nID0gY2hhbmdlcy5pbnB1dExhbmcuY3VycmVudFZhbHVlO1xuICAgICAgICBjb25zb2xlLmxvZygnb24gY2hhbmdlcyAtIGlucHV0TGFuZycsIGxhbmcpO1xuICAgICAgICBpZiAoY2hhbmdlcy5pbnB1dExhbmcuY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2V0RGVmYXVsdExhbmcobGFuZyk7XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsYW5nKTtcbiAgICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2UuY2hhbmdlTGFuZyhsYW5nKTtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlZExhbmd1YWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICovXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtQm94TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyhib3hOdW1iZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcbiAgICBpZiAoYm94TnVtYmVyICE9PSBudWxsICYmIGJveE51bWJlciAhPT0gdW5kZWZpbmVkIClcbiAgICB7XG4gICAgICByZXN1bHQgPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MoYm94TnVtYmVyKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnVHJhbnNmb3JtZWQgc3RyZWV0IG51bWJlcjonLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cblxuICBvbkNoYW5nZWRMYW5ndWFnZSgpIHtcbiAgICAvLyB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdib3hOdW1iZXIucGxhY2Vob2xkZXIuaW5wdXQtcGxhY2Vob2xkZXInKTtcbiAgICAvLyBjb25zb2xlLmxvZygncGxhY2UgaG9sZGVyJywgdGhpcy5wbGFjZUhvbGRlclRleHQpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoJ2JveE51bWJlci5wbGFjZWhvbGRlci5pbnB1dC1wbGFjZWhvbGRlcicpXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnbmV3IHBsYWNlaG9sZGVyJywgcmVzKTtcbiAgICAgICAgLy8gPT4gJ2hlbGxvIHdvcmxkJ1xuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9IHJlcztcbiAgICAgICAgdGhpcy5zZXRFbXB0eVJlc3BvbnNlVGV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0RW1wdHlSZXNwb25zZVRleHQoKSB7XG4gICAgLy8gdGhpcy5lbXB0eVJlc3BvbnNlVGV4dCA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnbm90LWluLWxpc3QnKTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2VUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2JveE51bWJlci5tZXNzYWdlLm5vdC1pbi1saXN0Jyk7XG4gIH1cblxuICBvbkNsZWFySW5wdXRFdmVudChldmVudCwgZm9jdXMpIHtcbiAgICB0aGlzLmNsZWFySW5wdXQoZm9jdXMpO1xuICB9XG5cbiAgb25CbHVyKGV2KSB7XG4gICAgaWYgKHRoaXMuaXNCcm93c2VySUUoKSAmJiB0aGlzLmlzRHJvcGRvd25DbGlja2VkKGV2KSkge1xuICAgICAgdGhpcy5ib3hOdW1iZXJTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNraXBOZXh0Qmx1cikge1xuICAgICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICAgIHRoaXMuYmx1ckV2ZW50LmVtaXQoQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpO1xuICAgIH1cbiAgfVxuXG4gIGlzQnJvd3NlcklFKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvbXNpZVxcc3x0cmlkZW50XFwvfGVkZ2VcXC8vaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfVxuXG4gIGlzRHJvcGRvd25DbGlja2VkKGV2KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXYuZXhwbGljaXRPcmlnaW5hbFRhcmdldCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIHJldHVybiAodGFyZ2V0LmlkID09PSAnYnBhYWMtYm94LWRyb3Bkb3duJyk7XG4gIH1cblxuICBvbkZvY3VzKCkge1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IGZhbHNlO1xuICAgIC8vIHRoaXMuY29sbGFwc2VEcm9wZG93biA9ICh0aGlzLnByZWZpbGxpbmcgPT09IHRydWUgJiYgdGhpcy5wcmVmaWxsRGF0YSAhPT0gbnVsbClcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgID8gIXRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5vbkZvY3VzU2hvd1N1Z2dlc3Rpb25zQWZ0ZXJQcmVmaWxsIDogZmFsc2U7XG4gICAgLy8gdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTtcbiAgICB0aGlzLmZvY3VzRXZlbnQuZW1pdChBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gIH1cblxuICB2YWx1ZUNoYW5nZWQoKSB7XG4gICAgdGhpcy50ZXh0Q2hhbmdlRXZlbnQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgbWF5U2hvd0Ryb3Bkb3duKCkge1xuICAgIHJldHVybiB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgIXRoaXMuY29sbGFwc2VEcm9wZG93bjtcbiAgfVxuXG4gIGJ1aWxkSW5wdXRXb3JkTGlzdCgpIHtcbiAgICB0aGlzLndvcmRMaXN0ID0gdGhpcy5zZWFyY2hUZXh0LnNwbGl0KC9bXFxzLCBdKy8pO1xuICB9XG5cbiAgbWF5QWRkVHlwZUFoZWFkKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQgKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0aGlzLnNlYXJjaFRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoL1teXFxzLCBcXFxcXFwvXSQvKS50ZXN0KHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cblxuICBidWlsZFR5cGVBaGVhZChzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKCF0aGlzLm1heUFkZFR5cGVBaGVhZChzb3VyY2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFRleHRXb3JkcyA9IHRoaXMuc2VhcmNoVGV4dC5zcGxpdCgvW1xccywgXSsvKTtcbiAgICBjb25zdCBsYXN0V29yZCA9IHNlYXJjaFRleHRXb3Jkc1tzZWFyY2hUZXh0V29yZHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5zb21lKGZ1bmN0aW9uKHN1Zykge1xuICAgICAgaWYgKCFzdWcgfHwgIXN1Zy5oYXNPd25Qcm9wZXJ0eSgnc3RyaW5nJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Zy5zdHJpbmcuc3BsaXQoL1tcXHMtXSsvKS5zb21lKGZ1bmN0aW9uKHdvcmQpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RyaW5nU3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3Mod29yZCwgbGFzdFdvcmQpKSB7XG4gICAgICAgICAgdGhpcy50eXBlQWhlYWRXb3JkID0gd29yZDtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICB9LmJpbmQodGhpcykpKSB7XG4gICAgICBjb25zdCBhcHBlbmRpeCA9IHRoaXMudHlwZUFoZWFkV29yZC5zbGljZShsYXN0V29yZC5sZW5ndGgsIHRoaXMudHlwZUFoZWFkV29yZC5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLmJwVHlwZUFoZWFkID0gdGhpcy5zZWFyY2hUZXh0ICsgYXBwZW5kaXg7XG4gICAgfVxuICB9XG5cbiAgc3RyaW5nU3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3ModmFsdWUsIHByZWZpeCkge1xuICAgIHZhbHVlID0gKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xuICAgIHByZWZpeCA9IChwcmVmaXggIT09IG51bGwgJiYgcHJlZml4ICE9PSB1bmRlZmluZWQpID8gcHJlZml4LnRvTG93ZXJDYXNlKCkgOiBwcmVmaXg7XG4gICAgcmV0dXJuIHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcyh2YWx1ZSkuc2xpY2UoMCwgcHJlZml4Lmxlbmd0aClcbiAgICAgIC50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy51bmljb2RlU2VydmljZS5yZW1vdmVEaWFjcml0aWNzKHByZWZpeCkpICE9PSAtMTtcbiAgfVxuXG4gIGdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLmdlbmVyYXRlUGFyYW1ldGVycygpO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ0JPWC1OVU1CRVIgY2FsbGluZyBzZXJ2aWNlIHBhcmFtcycsIHBhcmFtKTsgfVxuICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5hZGRyZXNzU2VydmljZS5nZXRCb3godGhpcy5iYXNlVXJsLCB0aGlzLmxvY2FsaXR5LCB0aGlzLnBvc3RhbENvZGUsIHBhcmFtKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlR2V0Qm94UmVzcG9uc2UocmVzcG9uc2UsIHNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAsXG4gICAgICAgICAgKCkgPT4gdGhpcy5oYW5kbGVHZXRCb3hFcnJvcihzb3VyY2UpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldFRleHRDb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAoIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPT09IHRydWUgKSA/ICdvcmFuZ2VyZWQnIDogJyc7XG4gIH1cblxuICBwcmVmaWxsQW5hbHl6ZURhdGEoKVxuICB7XG4gICAgaWYgKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMucHJlZmlsbEV2ZW50RW1pdHRlci5lbWl0KG5ldyBQcmVmaWxsRXZlbnQoQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIsIHRoaXMucHJlZmlsbERhdGEpICk7XG4gIH1cblxuICBsb2FkUGFyYW1zKHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSkge1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBpZiAocHJlZmlsbERhdGEgIT09IG51bGwgJiYgcHJlZmlsbERhdGEucGFyYW1ldGVycyAhPT0gbnVsbClcbiAgICB7XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnbWluTGV2ZWwnKSkge1xuICAgICAgICB0aGlzLm1pbkxldmVsID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbDtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdwb3N0YWxDb2RlJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUpKSB7XG4gICAgICAgIHRoaXMucG9zdGFsQ29kZSA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtdW5pY2lwYWxpdHlOYW1lJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUpKSB7XG4gICAgICAgIHRoaXMubG9jYWxpdHkgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TmFtZScpICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lKSkge1xuICAgICAgICB0aGlzLnN0cmVldE5hbWUgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TnVtYmVyJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcikpIHtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdib3hOdW1iZXInKVxuICAgICAgICAgICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXIpICYmIHRoaXMuaXNQYXJhbXNDb21wbGV0ZSgpKSB7XG4gICAgICAgIGNvbmNhdFN0ciA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uY2F0U3RyO1xuICB9XG5cbiAgIGxvYWRBdXRvRmlsbFBhcmFtcyhhdXRvRmlsbERhdGE6IEF1dG9maWxsRGF0YSkge1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBpZiAoYXV0b0ZpbGxEYXRhICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgaWYgKGF1dG9GaWxsRGF0YS5oYXNPd25Qcm9wZXJ0eSgncG9zdGFsQ29kZScpICYmIHRoaXMuaXNTdHJpbmcoYXV0b0ZpbGxEYXRhLnBvc3RhbENvZGUpKSB7XG4gICAgICAgICAgdGhpcy5wb3N0YWxDb2RlID0gYXV0b0ZpbGxEYXRhLnBvc3RhbENvZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF1dG9GaWxsRGF0YS5oYXNPd25Qcm9wZXJ0eSgnbXVuaWNpcGFsaXR5TmFtZScpICYmIHRoaXMuaXNTdHJpbmcoYXV0b0ZpbGxEYXRhLm11bmljaXBhbGl0eU5hbWUpKSB7XG4gICAgICAgICAgdGhpcy5sb2NhbGl0eSA9IGF1dG9GaWxsRGF0YS5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRvRmlsbERhdGEuaGFzT3duUHJvcGVydHkoJ3N0cmVldE5hbWUnKSAmJiB0aGlzLmlzU3RyaW5nKGF1dG9GaWxsRGF0YS5zdHJlZXROYW1lKSkge1xuICAgICAgICAgIHRoaXMuc3RyZWV0TmFtZSA9IGF1dG9GaWxsRGF0YS5zdHJlZXROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRvRmlsbERhdGEuaGFzT3duUHJvcGVydHkoJ3N0cmVldE51bWJlcicpXG4gICAgICAgICAgICAmJiB0aGlzLmlzU3RyaW5nKGF1dG9GaWxsRGF0YS5zdHJlZXROdW1iZXIpKSB7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBhdXRvRmlsbERhdGEuc3RyZWV0TnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRvRmlsbERhdGEuaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpXG4gICAgICAgICAgICAmJiB0aGlzLmlzU3RyaW5nKGF1dG9GaWxsRGF0YS5ib3hOdW1iZXIpKSB7XG4gICAgICAgICAgY29uY2F0U3RyID0gYXV0b0ZpbGxEYXRhLmJveE51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBpZihhdXRvRmlsbERhdGEuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGVCb3hOdW1iZXInKSl7XG4gICAgICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkPXRoaXMuYXV0b2ZpbGxEYXRhLmlzQ29tcGxldGVCb3hOdW1iZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbmNhdFN0cjtcbiAgfVxuXG4gIGlzU3RyaW5nKHZhbCk6IGJvb2xlYW4ge1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nO1xuICB9XG5cbiAgaXNWYWxpZCh2YWwpIHtcbiAgICByZXR1cm4gdGhpcy5pc1N0cmluZyh2YWwpICYmIHZhbCAhPT0gJyc7XG4gIH1cblxuICBpc1BhcmFtc0NvbXBsZXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmKCF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCl7XG4gICAgICByZXR1cm4gKHRoaXMuaXNWYWxpZCh0aGlzLnBvc3RhbENvZGUpIHx8IHRoaXMuaXNWYWxpZCh0aGlzLmxvY2FsaXR5KSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TmFtZSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TnVtYmVyKTtcbiAgICB9ZWxzZSBpZih0aGlzLnN1Z2dlc3Rpb25MZXZlbCA9PT0gU3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lICYmIHRoaXMucHJlZmlsbERhdGEpe1xuICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCh0aGlzLnBvc3RhbENvZGUpICYmIHRoaXMuaXNWYWxpZCh0aGlzLmxvY2FsaXR5KSAmJiB0aGlzLmlzVmFsaWQodGhpcy5zdHJlZXROYW1lKSAmJiB0aGlzLmlzVmFsaWQodGhpcy5zdHJlZXROdW1iZXIpICYmIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXIhPT0nJzsgXG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKHRoaXMucG9zdGFsQ29kZSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMubG9jYWxpdHkpICYmIHRoaXMuaXNWYWxpZCh0aGlzLnN0cmVldE5hbWUpICYmIHRoaXMuaXNWYWxpZCh0aGlzLnN0cmVldE51bWJlcik7XG4gICAgfVxuICAgIFxuICB9XG5cbiAgZ2VuZXJhdGVQYXJhbWV0ZXJzKCk6IFF1ZXJ5UGFyYW1ldGVycyB7XG4gICAgLy8gdHNsaW50OmRpc2FibGVcbiAgICBjb25zdCBwYXJhbSA9IG5ldyBRdWVyeVBhcmFtZXRlcnMoe1xuICAgICAgaWQ6IHRoaXMuc2VxdWVuY2VOdW1iZXIsXG4gICAgICBxOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICBwb3N0YWxDb2RlOiB0aGlzLnBvc3RhbENvZGUsXG4gICAgICBsb2NhbGl0eTogdGhpcy5sb2NhbGl0eSxcbiAgICAgIHN0cmVldDogdGhpcy5zdHJlZXROYW1lLFxuICAgICAgc3RyZWV0TnVtYmVyOiB0aGlzLnN0cmVldE51bWJlcixcbiAgICAgIG1heE51bWJlck9mU3VnZ2VzdGlvbnM6IHRoaXMubWF4U3VnZ2VzaW9uQ291bnRcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNvcnRDcml0ZXJpYSA9PT0gJ0InKSB7XG4gICAgICBwYXJhbS5zb3J0QnlCb3godHJ1ZSk7XG4gICAgfVxuICAgIGlmKHRoaXMubmlzOUluUmVzcG9uc2Upe1xuICAgICAgcGFyYW0uc2V0SW5jbHVkZU5pc0NvZGUodHJ1ZSlcbiAgICB9XG4gICAgaWYodGhpcy5idXNpbmVzc05hbWVJblJlc3BvbnNlKXtcbiAgICAgIHBhcmFtLnNldEluY2x1ZGVCdXNpbmVzc05hbWUodHJ1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtO1xuICB9XG5cbiAgaGFuZGxlR2V0Qm94UmVzcG9uc2UoZGF0YTogYW55LCBzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5yZXNwb25zZSAmJiBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyICYmIGRhdGEucmVzcG9uc2Uuc2VxdWVuY2VOdW1iZXIgPj0gdGhpcy5jb25zdW1lZE51bWJlciAmJlxuICAgICAgZGF0YS5yZXNwb25zZS50b3BTdWdnZXN0aW9ucykge1xuICAgICAgdGhpcy5jb25zdW1lZE51bWJlciA9IGRhdGEucmVzcG9uc2Uuc2VxdWVuY2VOdW1iZXI7XG4gICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICAgIHRoaXMucGFyc2VUb3BTdWdnZXN0aW9ucyhkYXRhLnJlc3BvbnNlLnRvcFN1Z2dlc3Rpb25zLCBzb3VyY2UpO1xuICAgICAgdGhpcy5idWlsZFR5cGVBaGVhZChzb3VyY2UpO1xuICAgICAgdGhpcy5jbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICAgIHRoaXMuYnVpbGRJbnB1dFdvcmRMaXN0KCk7XG4gICAgfVxuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9ICh0aGlzLnByZWZpbGxpbmcgPT09IHRydWUgJiYgdGhpcy5wcmVmaWxsRGF0YSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICF0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMub25Gb2N1c1Nob3dTdWdnZXN0aW9uc0FmdGVyUHJlZmlsbCA6IGZhbHNlO1xuICB9XG5cbiAgaGFuZGxlR2V0Qm94RXJyb3Ioc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmICh0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kKSB7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9ucyArPSAxO1xuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyLmVtaXQodGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMpO1xuICAgICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgfVxuICAgIGlmKHRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQgJiYgc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpe1xuXG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9ucys9MTtcbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlci5lbWl0KHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKTtcbiAgICAgIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKHNvdXJjZSk7XG4gICAgfVxuICAgIGlmKHRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgIXRoaXMudmFsaWRhdGVkQnlCYWNrZW5kICYmIHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEICApXG4gICAge1xuICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKHNvdXJjZSk7XG4gICAgfVxuICAgIGlmKCF0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kKVxuICAgIHtcbiAgICAgIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKSB7XG4gICAgdGhpcy5lcnJvckNvZGUgPSAnc2VydmljZS11bmF2YWlsYWJsZSc7XG4gICAgLy8gdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLmVycm9yQ29kZSk7XG4gICAgdGhpcy5lbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlVHlwZS5TZXJ2aWNlX1VuYXZhaWxhYmxlKTtcbiAgfVxuXG4gIGNsZWFyQ29ubmVjdGlvbkVycm9yTWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5lcnJvckNvZGUpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuZXJyb3JDb2RlKTtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9PT0gcmVzICkge1xuICAgICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVycm9yQ29kZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VUb3BTdWdnZXN0aW9ucyh0b3BTdWdnZXN0aW9ucywgc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmICh0b3BTdWdnZXN0aW9ucy5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcbiAgICAgIC8vIHRvcFN1Z2dlc3Rpb25zLmZvckVhY2godGhpcy5wYXJzZVNpbmdsZVN1Z2dlc3Rpb24uYmluZCh0aGlzKSk7XG4gICAgICBsZXQgcGVyZmVjdE1hdGNoRm91bmQ9ZmFsc2U7XG4gICAgICBmb3IgKGNvbnN0IHN1ZyBvZiB0b3BTdWdnZXN0aW9ucylcbiAgICAgIHtcbiAgICAgICAgaWYodGhpcy5wYXJzZVNpbmdsZVN1Z2dlc3Rpb24oc3VnLCBzb3VyY2UpID09PSB0cnVlIClcbiAgICAgICAge1xuICAgICAgICAgIHBlcmZlY3RNYXRjaEZvdW5kPXRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoIXNvdXJjZSlcbiAgICAgIHtcbiAgICAgICAgaWYgKCh0b3BTdWdnZXN0aW9ucy5sZW5ndGggPT09IDAgfHwgdGhpcy5lbXB0eVJlc3BvbnNlKSAmJiB0aGlzLm5vdEluTGlzdEFsbG93ZWQpIHtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zLnB1c2goe3N0cmluZzogdGhpcy5zZWFyY2hUZXh0LCAnbm90LWluLWxpc3QnOiB0cnVlfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLnN1Z2dlc3Rpb25MZXZlbCA9PT0gU3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lIHx8IHRoaXMuc3VnZ2VzdGlvbkxldmVsID09PSBTdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldE51bWJlcilcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIGNvbnNvbGUud2FybignYm94IG51bWJlcjo6IG5vIG1hdGNoIGZvdW5kIC0gY3VycmVudCBhZGRyZXNzOiAnLCB0aGlzLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgICAgICAgaWYoICEgcGVyZmVjdE1hdGNoRm91bmQpXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgZmFrZVN1ZyA9IHsuLi50aGlzLnNlbGVjdGVkQWRkcmVzc307XG4gICAgICAgICAgICBmYWtlU3VnLmJveE51bWJlciA9IHRoaXMuc2VhcmNoVGV4dDtcbiAgICAgICAgICAgIGZha2VTdWcuc3RyaW5nPXRoaXMuc2VhcmNoVGV4dDtcbiAgICAgICAgICAgIGZha2VTdWcuaXNDb21wbGV0ZT1mYWxzZTtcbiAgICAgICAgICAgIC8vdGhpcy5jbGlja1N1Z2dlc3Rpb24obnVsbCwgZmFrZVN1Zyk7IC8vIGRvIG5vdCBkbyB0aGlzXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGJldHRlciAhXG4gICAgICAgICAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkLmVtaXQoZmFrZVN1Zyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIC8vIElmIHByZWZpbGxpbmcsIHRoZW4gY2hlY2sgaWYgbm8gbWF0Y2ggZm9yIGEgbm9uLWVtcHR5IGJveE51bWJlclxuICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNlLCBzaW11bGF0ZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSAnbm90LWluLWxpc3QnIHN1Z2dlc3Rpb25cbiAgICAgICAgaWYodGhpcy5wcmVmaWxsaW5nICYmIHRoaXMubm90SW5MaXN0QWxsb3dlZFxuICAgICAgICAgICAgJiYgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IGZhbHNlXG4gICAgICAgICAgICAmJiB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXIgIT09IG51bGxcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAmJiB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXIubGVuZ3RoID4gMClcbiAgICAgICAge1xuICAgICAgICAgIC8vIGNvbnN0IG5vdEluTGlzdFN1Z2dlc3Rpb24gPSB7c3RyaW5nOiB0aGlzLnNlYXJjaFRleHQsICdub3QtaW4tbGlzdCc6IHRydWV9O1xuICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSB0aGlzLnByZWZpbGxCdWlsZE5vdEluTGlzdFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdCT1ggTlVNQkVSIC0gUFJFRklMTCBOT1QgSU4gTElTVCBTVUdHRVNUSU9OOicsIHN1Z2dlc3Rpb24pOyB9XG4gICAgICAgICAgdGhpcy5wcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbih0b3BTdWdnZXN0aW9ucywgc291cmNlKTtcbiAgICB9XG4gIH1cblxuICBwcmVmaWxsQnVpbGROb3RJbkxpc3RTdWdnZXN0aW9uKCk6IGFueSB7XG4gICAgY29uc3Qgbm90SW5MaXN0U3VnZ2VzdGlvbiA9IHtzdHJpbmc6IHRoaXMuc2VhcmNoVGV4dCwgJ25vdC1pbi1saXN0JzogdHJ1ZX07XG4gICAgY29uc3Qgc3RyZWV0TnVtYmVyU3VnZ2VzdGlvbiA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgY29uc3QgY29tYmluZWQgPSB7Li4uc3RyZWV0TnVtYmVyU3VnZ2VzdGlvbi5hZGRyZXNzLCAuLi5ub3RJbkxpc3RTdWdnZXN0aW9ufTtcbiAgICBkZWxldGUgY29tYmluZWQubWFpbEJveGlkO1xuICAgIGRlbGV0ZSBjb21iaW5lZC5zdWZmaXhJZDtcbiAgICBjb21iaW5lZC5ib3hOdW1iZXIgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgY29tYmluZWQuc2VhcmNoQmFyU3RyaW5nID0gY29tYmluZWQuc3RyaW5nO1xuICAgIGNvbWJpbmVkLmlzQ29tcGxldGUgPSB0cnVlO1xuICAgIHN0cmVldE51bWJlclN1Z2dlc3Rpb24uYWRkcmVzcyA9IGNvbWJpbmVkO1xuICAgIHJldHVybiBzdHJlZXROdW1iZXJTdWdnZXN0aW9uO1xuICB9XG5cbiAgcGFyc2VTaW5nbGVTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IGFueSwgc291cmNlOiBTb3VyY2VUeXBlKTogYm9vbGVhbiAge1xuICAgIGxldCBzdWdnZXN0aW9uVG9BZGQ6IGFueTtcbiAgICBsZXQgaXNQZXJmZWN0TWF0Y2g9ZmFsc2U7XG5cbiAgICBpZiAodGhpcy5sb2NhbGVTZXJ2aWNlLmlzTG9jYWxlRnJlbmNoKCkgJiYgc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZnJlbmNoJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uZnJlbmNoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhbGVTZXJ2aWNlLmlzTG9jYWxlRHV0Y2goKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdkdXRjaCcpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmR1dGNoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhbGVTZXJ2aWNlLmlzTG9jYWxlR2VybWFuKCkgJiYgc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZ2VybWFuJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uZ2VybWFuO1xuICAgIH0gZWxzZSBpZiAoc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYWRkcmVzcycpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgfVxuICAgIGlmIChzdWdnZXN0aW9uVG9BZGQpIHtcbiAgICAgIGlmIChzdWdnZXN0aW9uLm1lc3NhZ2VzKSB7XG4gICAgICAgIHN1Z2dlc3Rpb25Ub0FkZC5tZXNzYWdlcyA9IHN1Z2dlc3Rpb24ubWVzc2FnZXM7XG4gICAgICB9XG4gICAgICBpZiAoc3VnZ2VzdGlvblRvQWRkLmJveE51bWJlciA9PT0gdGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5zdWdnZXN0aW9ucy5wdXNoKHN1Z2dlc3Rpb25Ub0FkZCk7XG4gICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpXG4gICAgICB7XG4gICAgICAgIHN1Z2dlc3Rpb24uYWRkcmVzcyA9IHN1Z2dlc3Rpb25Ub0FkZDtcbiAgICAgICAgaXNQZXJmZWN0TWF0Y2g9dGhpcy5wcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25MZXZlbCAhPT0gU3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXRBbmRCb3hOdW1iZXIpXG4gICAgICB7XG4gICAgICAgIHN1Z2dlc3Rpb24uYWRkcmVzcyA9IHN1Z2dlc3Rpb25Ub0FkZDtcbiAgICAgICAgaXNQZXJmZWN0TWF0Y2g9dGhpcy5jaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTtcbiAgICAgICAgaWYoISBpc1BlcmZlY3RNYXRjaClcbiAgICAgICAge1xuICAgICAgICAgIC8vIHNlZW1zIG5vdGhpbmcgdG8gZG8/XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBub3RpZnkgZm9yIGEgaW5jb21wbGV0ZSBhZGRyZXNzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlzUGVyZmVjdE1hdGNoO1xuICB9XG5cbiAgY2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbik6IGJvb2xlYW5cbiAge1xuICAgIC8vaWYgKCAhdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSApXG4gICAge1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnYm94IG51bWJlciAtIGNoZWNraW5nIHN1Z2dlc3Rpb24gZm9yIHBlcmZlY3QgbWF0Y2gnLCBzdWdnZXN0aW9uLCB0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3VnQWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25Cb3hOdW1iZXIgPSB0aGlzLnRyYW5zZm9ybUJveE51bWJlckluTG93ZXJjYXNlQW5kV2l0aG91dERpYWNyaXRpY3MoJycgKyBzdWdBZGRyZXNzLmJveE51bWJlcik7XG5cbiAgICAgIGlmIChzdWdnZXN0aW9uQm94TnVtYmVyID09PSAoJycgKyB0aGlzLnNlYXJjaFRleHQpIClcbiAgICAgIHtcbiAgICAgICAgLy90aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9IHRydWU7w6dcbiAgICAgICAgLy90aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uID0gc3VnZ2VzdGlvbjtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc3VnQWRkcmVzcy5ib3hOdW1iZXI7XG4gICAgICAgIGlmIChzdWdBZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgc3VnQWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24obnVsbCwgc3VnQWRkcmVzcyk7XG4gICAgICAgICAgLy8gdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0FERFJFU1MgQ09NUExFVEUgT04gQk9YIE5VTUJFUiAhJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIH1cblxuICBwcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbik6IGJvb2xlYW5cbiAge1xuICAgIC8vaWYgKCAhdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSApXG4gICAge1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnYm94IG51bWJlciAtIFBSRUZJTEwgY2hlY2tpbmcgc3VnZ2VzdGlvbiBmb3IgcGVyZmVjdCBtYXRjaCcsIHRoaXMucHJlZmlsbERhdGEsIHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3VnQWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25Cb3hOdW1iZXIgPSB0aGlzLnRyYW5zZm9ybUJveE51bWJlckluTG93ZXJjYXNlQW5kV2l0aG91dERpYWNyaXRpY3MoJycgKyBzdWdBZGRyZXNzLmJveE51bWJlcik7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb21wYXJpbmcgYm94IG51bWJlcnMnLCBzdWdnZXN0aW9uQm94TnVtYmVyLCB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXIpO1xuICAgICAgfVxuICAgICAgaWYgKHN1Z2dlc3Rpb25Cb3hOdW1iZXIgPT09ICgnJyArIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlcikgKVxuICAgICAge1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uO1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzdWdBZGRyZXNzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKHN1Z0FkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBzdWdBZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihudWxsLCBzdWdBZGRyZXNzKTtcbiAgICAgICAgICAvLyB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQUREUkVTUyBDT01QTEVURSBPTiBCT1ggTlVNQkVSICEnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLyogZWxzZVxuICAgIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0FkZHJlc3MgY29tcGxldGUsIHNraXBwaW5nIHN1Z2dlc3Rpb24gY2hlY2snLCBzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9ICovXG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBvbklucHV0Q2hhbmdlX25ldyhzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gZmFsc2U7XG4gICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICB9XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQgPT09ICcnKSB7XG4gICAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gdGhpcy5zZXF1ZW5jZU51bWJlcjtcbiAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUgfHwgdGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldE51bWJlcilcbiAgICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2RvIG5vdCB1c2Ugc3VnZ2VzdGlvbnMgZm9yIGJveCBudW1iZXInKTtcbiAgICAgICAgdGhpcy5ib3hOdW1iZXJDaGFuZ2VkLmVtaXQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUgfHwgdGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldE51bWJlcilcbiAgICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2RvIG5vdCB1c2Ugc3VnZ2VzdGlvbnMgZm9yIGJveCBudW1iZXInKTtcbiAgICAgICAgdGhpcy5ib3hOdW1iZXJDaGFuZ2VkLmVtaXQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgaWYoIXRoaXMudmFsaWRhdGVkQnlCYWNrZW5kKXtcbiAgICAgICAgICBsZXQgc3VnZ2VzdGlvbiA9IHtcbiAgICAgICAgICAgICdzdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICdtdW5pY2lwYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAgICdsb2NhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICAgJ3Bvc3RhbENvZGUnOiB0aGlzLnBvc3RhbENvZGUsXG4gICAgICAgICAgICAnc2VhcmNoQmFyU3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnc3RyZWV0TmFtZSc6IHRoaXMuc3RyZWV0TmFtZSxcbiAgICAgICAgICAgICdob3VzZU51bWJlcic6dGhpcy5zdHJlZXROdW1iZXIsXG4gICAgICAgICAgICAnYm94TnVtYmVyJzp0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgdGhpcy5nZXRUb3BTdWdnZXN0aW9ucyhzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYnVpbGRJbnB1dFdvcmRMaXN0KCk7XG4gIH1cblxuICBvbklucHV0Q2hhbmdlKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIH1cbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgKz0gMTtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSB0aGlzLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgICBpZih0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSB8fCB0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLmxvZygnZG8gbm90IHVzZSBzdWdnZXN0aW9ucyBmb3IgYm94IG51bWJlcicpO1xuICAgICAgICB0aGlzLmJveE51bWJlckNoYW5nZWQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZih0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSB8fCB0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLmxvZygnZG8gbm90IHVzZSBzdWdnZXN0aW9ucyBmb3IgYm94IG51bWJlcicpO1xuICAgICAgICB0aGlzLmJveE51bWJlckNoYW5nZWQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZighdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpe1xuICAgICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpIHtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9IHRydWU7XG5cbiAgICAgICAgICBsZXQgc3VnZ2VzdGlvbiA9e1xuICAgICAgICAgICdhZGRyZXNzJzoge1xuICAgICAgICAgICAgJ3N0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgJ211bmljaXBhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICAgJ2xvY2FsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgICAncG9zdGFsQ29kZSc6IHRoaXMucG9zdGFsQ29kZSxcbiAgICAgICAgICAgICdzZWFyY2hCYXJTdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICdzdHJlZXROYW1lJzogdGhpcy5zdHJlZXROYW1lLFxuICAgICAgICAgICAgJ2hvdXNlTnVtYmVyJzp0aGlzLnN0cmVldE51bWJlcixcbiAgICAgICAgICAgICdib3hOdW1iZXInOnRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfX1cbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25cbiAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLnByZWZpbGxBbmFseXplRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICBsZXQgc3VnZ2VzdGlvbiA9IHtcbiAgICAgICAgICAnc3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgJ211bmljaXBhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICdsb2NhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICdwb3N0YWxDb2RlJzogdGhpcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICdzZWFyY2hCYXJTdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAnc3RyZWV0TmFtZSc6IHRoaXMuc3RyZWV0TmFtZSxcbiAgICAgICAgICAnaG91c2VOdW1iZXInOnRoaXMuc3RyZWV0TnVtYmVyLFxuICAgICAgICAgICdib3hOdW1iZXInOnRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5nZXRUb3BTdWdnZXN0aW9ucyhzb3VyY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmJ1aWxkSW5wdXRXb3JkTGlzdCgpO1xuICB9XG5cblxuICBjbGlja1N1Z2dlc3Rpb24oZXZlbnQ6IGFueSwgc3VnZ2VzdGlvbj86IGFueSkge1xuICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSBmYWxzZTtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoc3VnZ2VzdGlvbikge1xuICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgdGhpcy5yZXNldEFycm93U2VsZWN0ZWRJbmRleCgpO1xuICAgICAgaWYgKHN1Z2dlc3Rpb24uc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dChzdWdnZXN0aW9uLnNlYXJjaEJhclN0cmluZyk7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgICAgLy8gaWYgKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSkge1xuICAgICAgLy8gICB0aGlzLnNob3dBZGRyZXNzSXNWYWxpZGF0ZWQoKTtcbiAgICAgIC8vIH1cbiAgICAgIGlmIChzdWdnZXN0aW9uWydub3QtaW4tbGlzdCddKSB7XG4gICAgICAgIHN1Z2dlc3Rpb24gPSB0aGlzLm1vZGlmeVNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgIHN1Z2dlc3Rpb24uaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBtb2RpZnlTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbjogb2JqZWN0KSB7XG4gICAgY29uc3QgY29tYmluZWQgPSB7Li4udGhpcy5zZWxlY3RlZEFkZHJlc3MsIC4uLnN1Z2dlc3Rpb259O1xuICAgIGRlbGV0ZSBjb21iaW5lZC5tYWlsQm94aWQ7XG4gICAgZGVsZXRlIGNvbWJpbmVkLnN1ZmZpeElkO1xuICAgIGNvbWJpbmVkLmJveE51bWJlciA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5zZWFyY2hCYXJTdHJpbmcgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgY29tYmluZWQuaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgcmV0dXJuIGNvbWJpbmVkO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb246IGFueSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdib3ggbnVtYmVyOjpzZXRTZWxlY3RlZEFkZHJlc3MnLCBzdWdnZXN0aW9uKTtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IChzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgc3VnZ2VzdGlvbi5pc0NvbXBsZXRlID09PSB0cnVlKSA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkLmVtaXQoc3VnZ2VzdGlvbik7XG4gIH1cblxuICBjbGVhclNlbGVjdGVkQWRkcmVzcygpIHtcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkLmVtaXQobnVsbCk7XG4gICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qXG4gIHNldFZhbGlkYXRpb25NZXNzYWdlKHRyYW5zbGF0aW9uQ29kZSwgb3B0aW9ucz8sIHJldHJhbnNsYXRlT3B0aW9ucz8pIHtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKHJldHJhbnNsYXRlT3B0aW9ucyAmJiB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zWyd1bnRyYW5zbGF0ZWQtc3ByaW50ZiddKSAmJlxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMuc3ByaW50Zikge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZEVsZW1lbnRzID0gW107XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9uc1sndW50cmFuc2xhdGVkLXNwcmludGYnXS5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgdHJhbnNsYXRlZEVsZW1lbnRzLnB1c2godGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKGVsZW1lbnQpKTtcbiAgICAgIH0uYmluZCh0aGlzKVxuICAgICAgKTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zLnNwcmludGYgPSB0cmFuc2xhdGVkRWxlbWVudHM7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gdHJhbnNsYXRpb25Db2RlO1xuICAgIC8vIGVtaXQgdHJhbnNsYXRpb24ga2V5IHRvIHdyYXBwZXIgY29tcG9uZW50IGZvciBjdXN0b21pemVkIHRyYW5zbGF0aW9uc1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSh0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSwgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMpO1xuICAgICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VDb2RlKTtcbiAgICB9XG4gIH1cbiAgKi9cblxuICBlbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCBvcHRpb25zPzogc3RyaW5nW10pIHtcbiAgICAvLyBNb21lbnRseSwgb3B0aW9ucyBhcmUgTk9UIHVzZWQ7IHNvIGRhdGEgdHlwZSBvZiB0aGVzZSBvcHRpb25zIHdpbGwgYmUgcmV2aWV3ZWQgb25jZSBuZWVkZWQuXG4gICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlVHlwZSA9PT0gbnVsbCB8fCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUgPT09IHVuZGVmaW5lZCApIHtcbiAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGVtaXQgdmFsaWRhdGlvbiBtZXNzYWdlIC0gbWVzc2FnZSBrZXkgaXMgaW52YWxpZCEnLCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAodmFsaWRhdGlvbk1lc3NhZ2VUeXBlKSB7XG5cbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfTm90X0ZvdW5kOlxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19WYWxpZGF0ZWQ6XG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5TZXJ2aWNlX1VuYXZhaWxhYmxlOiB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHZhbGlkYXRpb25NZXNzYWdlVHlwZSk7XG4gICAgICAgICAgLy8gdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KG1lc3NhZ2UpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh7bWVzc2FnZVR5cGU6IHZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IG1lc3NhZ2V9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmFibGUgdG8gZW1pdCB2YWxpZGF0aW9uIG1lc3NhZ2UgLSBtZXNzYWdlIGtleSBOT1Qgc3VwcG9ydGVkIScsIHZhbGlkYXRpb25NZXNzYWdlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmFsaWduXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICB9XG4gIHNob3dBZGRyZXNzSXNWYWxpZGF0ZWQoKSB7XG4gICAgLy8gdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSgnYWRkcmVzcy12YWxpZGF0ZWQnKTtcbiAgICB0aGlzLmVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfVmFsaWRhdGVkKTtcbiAgfVxuXG4gIGNoZWNrS2V5RG93bihldmVudCkge1xuICAgIHN3aXRjaCAoZXZlbnQud2hpY2gpIHtcbiAgICAgIC8vIGRvd24ga2V5LCBpbmNyZW1lbnQgc2VsZWN0ZWRJbmRleFxuICAgICAgY2FzZSA0MDpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3ZlQXJyb3dTZWxlY3RlZEluZGV4RG93bigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gdXAga2V5LCBkZWNyZW1lbnQgc2VsZWN0ZWRJbmRleFxuICAgICAgY2FzZSAzODpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3ZlQXJyb3dTZWxlY3RlZEluZGV4VXAoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyByaWdodCBhcnJvdyBrZXlcbiAgICAgIGNhc2UgMzk6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmN1cnNvcklzT25TdWdnZXN0aW9uTGlzdCgpKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24oZXZlbnQsIHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMudHlwZUFoZWFkV29yZCAmJiB0aGlzLnR5cGVBaGVhZElzU2hvd24oKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMuYnBUeXBlQWhlYWQpO1xuICAgICAgICAgICAgdGhpcy50eXBlQWhlYWRXb3JkID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gdGFiIGtleVxuICAgICAgY2FzZSA5OlxuICAgICAgICBpZiAoIXRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdEluTGlzdE9mU3VnZ2VzaW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ2OlxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIGVudGVyIHByZXNzZWRcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmN1cnNvcklzT25TdWdnZXN0aW9uTGlzdCgpKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24oZXZlbnQsIHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICBicmVhaztcblxuICAgIH1cbiAgfVxuICBjaGVja0tleVVQKGV2ZW50KVxuICB7XG4gICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgXG4gICAgICBjYXNlIDg6XG4gICAgICAgXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoVGV4dC5sZW5ndGg+MClcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdQQVJUSUFMX0NMRUFSX0JPWF9OVU1CRVInKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnQk9YX05VTUJFUicpO1xuICAgICAgICB9XG4gICAgICAgICBicmVhazsgICAgICAgICBcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICBicmVhaztcblxuICAgIH1cbiAgICBcbiAgfVxuICBjbGVhcldpZGdldCgpIHtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJTZWFyY2hUZXh0KCk7XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIHRoaXMucHJlZmlsbERhdGEgPSBudWxsO1xuICAgIC8vIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICB9XG5cbiAgY2xlYXJTZWFyY2hUZXh0KCkge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICB9XG5cbiAgdHlwZUFoZWFkSXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5icFR5cGVBaGVhZCAmJiB0aGlzLmJwVHlwZUFoZWFkLmxlbmd0aCA+IDA7XG4gIH1cblxuICByZXNldEFycm93U2VsZWN0ZWRJbmRleCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgfVxuXG4gIG1vdmVBcnJvd1NlbGVjdGVkSW5kZXhEb3duKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggKyAxICE9PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4Kys7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4IC0gMSk7XG4gICAgfVxuICB9XG5cbiAgbW92ZUFycm93U2VsZWN0ZWRJbmRleFVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggLSAxICE9PSAtMikge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LS07XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSW5kZXggPj0gMDtcbiAgfVxuXG4gIHNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24obmV3VmFsLCBvbGRWYWwpIHtcbiAgICBpZiAobmV3VmFsID09PSB1bmRlZmluZWQgfHwgdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmV3VmFsICE9PSAtMSkge1xuICAgICAgaWYgKG9sZFZhbCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSB0aGlzLnNlYXJjaFRleHQ7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnN0cmluZyk7XG4gICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLmxhc3RTZWFyY2hWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbWF5U2hvd0NsZWFyQnV0dG9uKCkge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFRleHQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGNsZWFySW5wdXQoZm9jdXM/LCBlbWl0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLmNsZWFyQ29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIGlmIChmb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib3hOdW1iZXJTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIC8vIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChudWxsKTtcbiAgICBpZihlbWl0KSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidCT1hfTlVNQkVSJyovIElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTdWdnZXN0aW9ucygpIHtcbiAgICB0aGlzLndvcmRMaXN0ID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNXb3JkTGlzdCA9IFtdO1xuICB9XG5cbiAgY2xlYXJUeXBlQWhlYWQoKSB7XG4gICAgdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICB9XG5cbiAgY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKSB7XG4gICAgdGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh7bWVzc2FnZVR5cGU6IG51bGwsIHRyYW5zbGF0ZWRNZXNzYWdlOiB0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZX0pO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSA9IG51bGw7XG4gIH1cblxuICBzZXRTZWFyY2hUZXh0KHZhbHVlKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWU7XG4gIH1cblxuICBzZWxlY3RGaXJzdEluTGlzdE9mU3VnZ2VzaW9ucygpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xuICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4IC0gMSk7XG4gIH1cblxuICBjaGFuZ2VTZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzdWdnZXN0aW9uTW91c2VMZWF2ZSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgfVxuXG4gIHNob3dBZGRyZXNzTm90Rm91bmRNZXNzYWdlKCkge1xuICAgIC8vIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2UoJ2FkZHJlc3Mtbm90LWZvdW5kJyk7XG4gICAgdGhpcy5lbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX05vdF9Gb3VuZCk7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIHJldHVybiAodGhpcy5sb2NhbGl0eSA9PT0gJycgfHwgdGhpcy5wb3N0YWxDb2RlID09PSAnJyB8fCB0aGlzLm1pbkxldmVsID4gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpO1xuICB9XG5cbiAgb25JbnB1dENsaWNrKCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2JveCBudW1iZXIgY2xpY2snKTsgfVxuICB9XG59XG4iLCI8c3BhbiAqbmdJZj1cImxhYmVsUmVzb3VyY2VLZXlcIj57eyBsYWJlbFJlc291cmNlS2V5IHwgdHJhbnNsYXRlfX08L3NwYW4+XG48ZGl2IGNsYXNzPVwiYnBhYWMtZHJvcGRvd25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtc2VhcmNoLWJhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtaW5wdXQtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICA8IS0tIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIiAtLT5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiICNib3hOdW1iZXJTZWFyY2hJbnB1dCBjbGFzcz1cImJwYWFjLWlucHV0XCIgXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAoa2V5dXApID0gKGNoZWNrS2V5VVAoJGV2ZW50KSlcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIhaXNQYXJhbXNDb21wbGV0ZSgpID8gJ2xpZ2h0Z3JleScgOiAnJ1wiIFxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCIgZ2V0VGV4dENvbG9yKCkgXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXN0cmVldE51bWJlciB8fCBzdHJlZXROdW1iZXIudHJpbSgpLmxlbmd0aCA9PT0gMFwiIChrZXlkb3duKT1cImNoZWNrS2V5RG93bigkZXZlbnQpXCIgXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoKVwiIChjbGljayk9XCJvbklucHV0Q2xpY2soKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgaWQ9XCJib3hOdW1iZXJJbnB1dEZpZWxkXCIgW2F0dHIudGl0bGVdPVwicGxhY2VIb2xkZXJUZXh0XCIgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJUZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIiAvPlxuICAgICAgICAgICAgPGRpdiBpZD1cImJwYWFjLWNsZWFyLWJveE5iLWJ1dHRvblwiICpuZ0lmPVwibWF5U2hvd0NsZWFyQnV0dG9uKClcIiAoY2xpY2spPVwiY2xlYXJJbnB1dCh0cnVlKVwiIGNsYXNzPVwiYnBhYWMtY2xlYXJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLTxkaXYgbmctdHJhbnNjbHVkZT48L2Rpdj4tLT5cbiAgICAgICAgPGlucHV0IGlkPVwiYnBhYWMtYm94TmItdHlwZWFoZWFkXCIgdHlwZT1cInRleHRcIiBkaXNhYmxlZCBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cImJwVHlwZUFoZWFkXCIgLz5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJhZGRyZXNzSXNWYWxpZGF0ZWRcIiBjbGFzcz1cImJveE5iQ2hla21hcmtcIj48c3BhbiBjbGFzcz1cImNoZWNrbWFya1wiPjwvc3Bhbj48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBbaGlkZGVuXT1cImNvbGxhcHNlRHJvcGRvd25cIiBjbGFzcz1cImJwYWFjLWRyb3Bkb3duLW1lbnUtY29udGFpbmVyXCIgXG4gICAgICAgICpuZ0lmPVwic3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXRBbmRCb3hOdW1iZXIgJiYgIHN1Z2dlc3Rpb25zICYmIHN1Z2dlc3Rpb25zLmxlbmd0aD4wXCI+XG4gICAgICAgIDxkaXYgI2JveE51bWJlckxpc3QgW2FwcFZpc2libGVTdWdnZXN0aW9uXT1cInZpc2libGVTdWdnZXNpb25Db3VudFwiIGlkPVwiYnBhYWMtYm94LWRyb3Bkb3duXCIgY2xhc3M9XCJicGFhYy1kcm9wZG93bi1tZW51XCI+XG4gICAgICAgICAgICA8dWwgcm9sZT1cImxpc3Rib3hcIiBpZD1cImJwYWFjLWJveE5iLXN1Z2dlc3Rpb25zTGlzdFwiIGNsYXNzPVwibGlzdC11bnN0eWxlZFwiPlxuICAgICAgICAgICAgICAgIDxsaSByb2xlPVwib3B0aW9uXCIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzdWdnZXN0aW9uczsgbGV0IGlkeCA9IGluZGV4XCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOihzZWxlY3RlZEluZGV4PT1pZHgpfVwiIFxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiY2xpY2tTdWdnZXN0aW9uKCRldmVudCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2VsZWN0ZWRJbmRleD1pZHhcIiAobW91c2VsZWF2ZSk9XCJzZWxlY3RlZEluZGV4PS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib3B0aW9uXCIgW2lubmVySHRtbF09XCJvcHRpb25bJ25vdC1pbi1saXN0J10gPyBlbXB0eVJlc3BvbnNlVGV4dCA6IG9wdGlvbi5zdHJpbmcgfCBoaWdobGlnaHRTdWdnZXN0aW9uIDogd29yZExpc3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|