@bpost/bp-address-auto-complete-by-component 1.1.19 → 1.1.21
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 +12 -2
- package/esm2020/lib/lib-address-autocomplete-by-component.component.mjs +59 -38
- package/esm2020/lib/locality/locality.component.mjs +9 -8
- package/esm2020/lib/model/query-parameters.model.mjs +7 -1
- package/esm2020/lib/street/street.component.mjs +3 -4
- package/esm2020/lib/street-number/street-number.component.mjs +12 -2
- package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs +96 -49
- package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs.map +1 -1
- package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs +96 -49
- package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs.map +1 -1
- package/lib/box-number/box-number.component.d.ts +3 -1
- package/lib/lib-address-autocomplete-by-component.component.d.ts +5 -2
- package/lib/model/query-parameters.model.d.ts +4 -0
- package/lib/street-number/street-number.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -70,7 +70,7 @@ export class LibAddressAutocompleteByComponentComponent {
|
|
|
70
70
|
// set the widget as readonly and add NIS9 query parameter
|
|
71
71
|
this.isReadonly = false;
|
|
72
72
|
this.nis9InResponse = false;
|
|
73
|
-
|
|
73
|
+
this.businessNameInResponse = false;
|
|
74
74
|
this.nis9ServiceURL = '';
|
|
75
75
|
this.isComponentReady = false;
|
|
76
76
|
}
|
|
@@ -429,40 +429,45 @@ export class LibAddressAutocompleteByComponentComponent {
|
|
|
429
429
|
if (this.showDebugMessageToConsole) {
|
|
430
430
|
console.log('notifyAddressComplete', this.selectedAddress, 'nis9InResponse:' + this.nis9InResponse, typeof this.nis9InResponse);
|
|
431
431
|
}
|
|
432
|
-
if (
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
432
|
+
// if( (this.nis9InResponse === true || ''+this.nis9InResponse === 'true')
|
|
433
|
+
// && this.selectedAddress !==undefined && this.selectedAddress!==null
|
|
434
|
+
// && this.selectedAddress.hasOwnProperty('latitude') && this.selectedAddress.hasOwnProperty('longitude'))
|
|
435
|
+
// {
|
|
436
|
+
// const latitude = this.selectedAddress.latitude;
|
|
437
|
+
// const longitude = this.selectedAddress.longitude;
|
|
438
|
+
// if (this.showDebugMessageToConsole) console.log('calling nis9 service to get nis9 data (1):', longitude, latitude);
|
|
439
|
+
// this.nis9Service.determineNis9Data(longitude, latitude)
|
|
440
|
+
// .subscribe(
|
|
441
|
+
// data => {
|
|
442
|
+
// console.log('nis DATA:', data);
|
|
443
|
+
// /*
|
|
444
|
+
// nis DATA:
|
|
445
|
+
// {Status: 'success', data: Array(1)}
|
|
446
|
+
// Status: "success"
|
|
447
|
+
// data: ['25112A21-']
|
|
448
|
+
// */
|
|
449
|
+
// if(data!==undefined && data !==null && data.hasOwnProperty('Status') && data.Status==='success')
|
|
450
|
+
// {
|
|
451
|
+
// const nis9Data = data.data;
|
|
452
|
+
// if(Array.isArray(nis9Data) && nis9Data.length === 1)
|
|
453
|
+
// {
|
|
454
|
+
// this.selectedAddress.nis9 = nis9Data[0];
|
|
455
|
+
// }
|
|
456
|
+
// }
|
|
457
|
+
// this.addressCompleteEventEmitter.emit(this.selectedAddress);
|
|
458
|
+
// this.emittedAddress = this.selectedAddress;
|
|
459
|
+
// this.updatePostalCodeLocality(this.emittedAddress);
|
|
460
|
+
// }
|
|
461
|
+
// );
|
|
462
|
+
// }
|
|
463
|
+
// else
|
|
464
|
+
// {
|
|
465
|
+
if (this.showDebugMessageToConsole)
|
|
466
|
+
console.log('NOT calling nis9 service to get nis9 data (1)');
|
|
467
|
+
this.addressCompleteEventEmitter.emit(this.selectedAddress);
|
|
468
|
+
this.emittedAddress = this.selectedAddress;
|
|
469
|
+
this.updatePostalCodeLocality(this.emittedAddress);
|
|
470
|
+
// }
|
|
466
471
|
}
|
|
467
472
|
onClearInputEventEmitter(event) {
|
|
468
473
|
if (this.showDebugMessageToConsole) {
|
|
@@ -474,6 +479,9 @@ export class LibAddressAutocompleteByComponentComponent {
|
|
|
474
479
|
// Box number
|
|
475
480
|
this.boxNumber = '';
|
|
476
481
|
if (this.autocompleteBoxNb) {
|
|
482
|
+
if (this.autocompleteBoxNb.searchText != '') {
|
|
483
|
+
this.onClearInputEventEmitter(InputNameType.BOX_NUMBER);
|
|
484
|
+
}
|
|
477
485
|
this.autocompleteBoxNb.searchText = '';
|
|
478
486
|
this.autocompleteBoxNb.streetNumber = '';
|
|
479
487
|
this.autocompleteBoxNb.clearInput(false, false);
|
|
@@ -481,6 +489,9 @@ export class LibAddressAutocompleteByComponentComponent {
|
|
|
481
489
|
// Street number
|
|
482
490
|
this.streetNumber = '';
|
|
483
491
|
if (this.autocompleteStreetNb) {
|
|
492
|
+
if (this.autocompleteStreetNb.searchText != '') {
|
|
493
|
+
this.onClearInputEventEmitter(InputNameType.STREET_NUMBER);
|
|
494
|
+
}
|
|
484
495
|
this.autocompleteStreetNb.searchText = '';
|
|
485
496
|
this.autocompleteStreetNb.streetName = '';
|
|
486
497
|
this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
|
|
@@ -488,6 +499,9 @@ export class LibAddressAutocompleteByComponentComponent {
|
|
|
488
499
|
// Street name
|
|
489
500
|
this.street = '';
|
|
490
501
|
if (this.autocompleteStreet) {
|
|
502
|
+
if (this.autocompleteStreet.searchText != '') {
|
|
503
|
+
this.onClearInputEventEmitter(InputNameType.STREET);
|
|
504
|
+
}
|
|
491
505
|
this.autocompleteStreet.searchText = '';
|
|
492
506
|
this.autocompleteStreet.clearInput(false, false);
|
|
493
507
|
}
|
|
@@ -994,6 +1008,11 @@ export class LibAddressAutocompleteByComponentComponent {
|
|
|
994
1008
|
this.streetNumberInput = address.houseNumber;
|
|
995
1009
|
}
|
|
996
1010
|
}
|
|
1011
|
+
updateboxNumber(address) {
|
|
1012
|
+
if (address && address.boxNumber) {
|
|
1013
|
+
this.boxNumber = address.boxNumber;
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
997
1016
|
updateCompleteAddress() {
|
|
998
1017
|
let concatStr = '';
|
|
999
1018
|
concatStr += this.selectedAddress.streetName ? `${this.selectedAddress.streetName} ` : '';
|
|
@@ -1402,10 +1421,10 @@ export class LibAddressAutocompleteByComponentComponent {
|
|
|
1402
1421
|
}
|
|
1403
1422
|
}
|
|
1404
1423
|
LibAddressAutocompleteByComponentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LibAddressAutocompleteByComponentComponent, deps: [{ token: i1.Nis9Service }, { token: i2.HttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1405
|
-
LibAddressAutocompleteByComponentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: LibAddressAutocompleteByComponentComponent, selector: "bp-lib-address-autocomplete-by-component", inputs: { inputLang: "inputLang", clearInput: "clearInput", validationMessageOption: "validationMessageOption", defaultLang: "defaultLang", showDebugMessageToConsole: "showDebugMessageToConsole", minLevel: "minLevel", notInListAllowed: "notInListAllowed", addressParams: "addressParams", messageOption: "messageOption", localityUrl: "localityUrl", maxSuggestionLocality: "maxSuggestionLocality", visibleSuggestionLocalityCount: "visibleSuggestionLocalityCount", sortCriteriaLocality: "sortCriteriaLocality", streetUrl: "streetUrl", maxSuggestionStreet: "maxSuggestionStreet", visibleSuggestionStreetCount: "visibleSuggestionStreetCount", sortCriteriaStreet: "sortCriteriaStreet", streetNumberUrl: "streetNumberUrl", maxSuggestionStreetNb: "maxSuggestionStreetNb", visibleSuggestionStreetNbCount: "visibleSuggestionStreetNbCount", sortCriteriaStreetNb: "sortCriteriaStreetNb", boxNumberUrl: "boxNumberUrl", maxSuggestionBoxNb: "maxSuggestionBoxNb", visibleSuggestionBoxNbCount: "visibleSuggestionBoxNbCount", sortCriteriaBoxNb: "sortCriteriaBoxNb", allowNoValidation: "allowNoValidation", validatedByBackend: "validatedByBackend", numberOfExceptions: "numberOfExceptions", suggestionLevel: "suggestionLevel", apiKey: "apiKey", isReadonly: "isReadonly", nis9InResponse: "nis9InResponse", nis9ServiceURL: "nis9ServiceURL" }, outputs: { addressCompleteEventEmitter: "addressCompleteEventEmitter", validationMessageEventEmitter: "validationMessageEventEmitter", clearInputEventEmitter: "clearInputEventEmitter", validatedByBackendEventEmitter: "validatedByBackendEventEmitter", numberOfExceptionsEventEmitter: "numberOfExceptionsEventEmitter" }, viewQueries: [{ propertyName: "autocompleteLocality", first: true, predicate: LocalityComponent, descendants: true }, { propertyName: "autocompleteStreet", first: true, predicate: StreetComponent, descendants: true }, { propertyName: "autocompleteStreetNb", first: true, predicate: StreetNumberComponent, descendants: true }, { propertyName: "autocompleteBoxNb", first: true, predicate: BoxNumberComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "\r\n<div class=\"aacwidget-address-container\">\r\n\r\n <div class=\"bpaac-dropdown-validation\" *ngIf=\"validationMessageOptionType === 'SHOW' \">\r\n <div class=\"bpaac-validated-icon\" *ngIf=\"selectedAddress && validationMessage!==null && validationMessage.messageType!==null\"></div>\r\n <!-- {{ validationMessage | translate }} -->\r\n {{ validationMessage.translatedMessage }}\r\n </div>\r\n\r\n <!-- bp-aacwidget-autocomplete-locality -->\r\n <bp-locality class=\"aacwidget-address-locality\" *ngIf=\"isComponentReady\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedLocalityUrl\"\r\n [prefillData]=\"localityPrefillData\"\r\n [labelResourceKey]=\"'common.label.postalCode'\"\r\n [inputText]=\"postalCodeLocality\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [sortCriteria]=\"sortCriteriaLocality\"\r\n [maxSuggesionCount]=\"maxSuggestionLocality\" \r\n [visibleSuggestionCount]=\"visibleSuggestionLocalityCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 4)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\" \r\n (textChangeEvent)=\"resetLocality($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onLocalityPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-locality>\r\n\r\n <bp-street class=\"aacwidget-address-street\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetUrl\"\r\n [prefillData]=\"streetPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetName'\"\r\n [inputText]=\"streetNameInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\"\r\n [locality]=\"locality\"\r\n [sortCriteria]=\"sortCriteriaStreet\" \r\n [maxSuggesionCount]=\"maxSuggestionStreet\"\r\n [visibleSuggesionCount]=\"visibleSuggestionStreetCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 3)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreet($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street>\r\n\r\n <bp-street-number class=\"aacwidget-address-streetnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetNumberUrl\"\r\n [selectedAddress]=\"streetAddress\"\r\n [prefillData]=\"streetNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetNumber'\"\r\n [inputText]=\"streetNumberInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\"\r\n [sortCriteria]=\"sortCriteriaStreetNb\"\r\n [maxSuggesionCount]=\"maxSuggestionStreetNb\" \r\n [visibleSuggesionCount]=\"visibleSuggestionStreetNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 2)\"\r\n (streetNumberChanged)=\"setAddressStreetNumber($event)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreetNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street-number>\r\n\r\n <bp-box-number class=\"aacwidget-address-boxnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedBoxNumberUrl\"\r\n [selectedAddress]=\"streetNumberAddress\"\r\n [prefillData]=\"boxNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.boxNumber'\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\" \r\n [streetNumber]=\"streetNumber\"\r\n [sortCriteria]=\"sortCriteriaBoxNb\" \r\n [maxSuggesionCount]=\"maxSuggestionBoxNb\"\r\n [visibleSuggesionCount]=\"visibleSuggestionBoxNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (addressChanged)=\"setAddress($event, 1)\" \r\n (boxNumberChanged)=\"setAddressBoxNumber($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetBoxNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onBoxNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-box-number>\r\n</div>", styles: [""], components: [{ type: i3.LocalityComponent, selector: "bp-locality", inputs: ["labelResourceKey", "messageOption", "maxSuggesionCount", "visibleSuggestionCount", "sortCriteria", "baseUrl", "inputText", "prefillData", "showDebugMessageToConsole", "inputLang", "isReadonly", "allowNoValidation", "validatedByBackend", "numberOfExceptions"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "clearInputEventEmitter", "prefillEventEmitter", "numberOfExceptionsEmitter"] }, { type: i4.StreetComponent, selector: "bp-street", inputs: ["labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "prefillData", "showDebugMessageToConsole", "postalCode", "locality", "inputText", "messageOption", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "inputLang", "isReadonly"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "clearInputEventEmitter", "prefillEventEmitter", "numberOfExceptionsEmitter"] }, { type: i5.StreetNumberComponent, selector: "bp-street-number", inputs: ["prefillData", "showDebugMessageToConsole", "labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "postalCode", "locality", "streetName", "notInListAllowed", "selectedAddress", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "inputLang", "messageOption", "inputText", "isReadonly", "suggestionLevel"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "emptyResponseEvent", "clearInputEventEmitter", "prefillEventEmitter", "streetNumberChanged", "numberOfExceptionsEmitter"] }, { type: i6.BoxNumberComponent, selector: "bp-box-number", inputs: ["prefillData", "showDebugMessageToConsole", "labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "postalCode", "locality", "streetName", "streetNumber", "selectedAddress", "notInListAllowed", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "inputLang", "messageOption", "isReadonly", "suggestionLevel"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "emptyResponseEvent", "clearInputEventEmitter", "prefillEventEmitter", "boxNumberChanged", "numberOfExceptionsEmitter"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
1424
|
+
LibAddressAutocompleteByComponentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: LibAddressAutocompleteByComponentComponent, selector: "bp-lib-address-autocomplete-by-component", inputs: { inputLang: "inputLang", clearInput: "clearInput", validationMessageOption: "validationMessageOption", defaultLang: "defaultLang", showDebugMessageToConsole: "showDebugMessageToConsole", minLevel: "minLevel", notInListAllowed: "notInListAllowed", addressParams: "addressParams", messageOption: "messageOption", localityUrl: "localityUrl", maxSuggestionLocality: "maxSuggestionLocality", visibleSuggestionLocalityCount: "visibleSuggestionLocalityCount", sortCriteriaLocality: "sortCriteriaLocality", streetUrl: "streetUrl", maxSuggestionStreet: "maxSuggestionStreet", visibleSuggestionStreetCount: "visibleSuggestionStreetCount", sortCriteriaStreet: "sortCriteriaStreet", streetNumberUrl: "streetNumberUrl", maxSuggestionStreetNb: "maxSuggestionStreetNb", visibleSuggestionStreetNbCount: "visibleSuggestionStreetNbCount", sortCriteriaStreetNb: "sortCriteriaStreetNb", boxNumberUrl: "boxNumberUrl", maxSuggestionBoxNb: "maxSuggestionBoxNb", visibleSuggestionBoxNbCount: "visibleSuggestionBoxNbCount", sortCriteriaBoxNb: "sortCriteriaBoxNb", allowNoValidation: "allowNoValidation", validatedByBackend: "validatedByBackend", numberOfExceptions: "numberOfExceptions", suggestionLevel: "suggestionLevel", apiKey: "apiKey", isReadonly: "isReadonly", nis9InResponse: "nis9InResponse", businessNameInResponse: "businessNameInResponse", nis9ServiceURL: "nis9ServiceURL" }, outputs: { addressCompleteEventEmitter: "addressCompleteEventEmitter", validationMessageEventEmitter: "validationMessageEventEmitter", clearInputEventEmitter: "clearInputEventEmitter", validatedByBackendEventEmitter: "validatedByBackendEventEmitter", numberOfExceptionsEventEmitter: "numberOfExceptionsEventEmitter" }, viewQueries: [{ propertyName: "autocompleteLocality", first: true, predicate: LocalityComponent, descendants: true }, { propertyName: "autocompleteStreet", first: true, predicate: StreetComponent, descendants: true }, { propertyName: "autocompleteStreetNb", first: true, predicate: StreetNumberComponent, descendants: true }, { propertyName: "autocompleteBoxNb", first: true, predicate: BoxNumberComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "\r\n<div class=\"aacwidget-address-container\">\r\n\r\n <div class=\"bpaac-dropdown-validation\" *ngIf=\"validationMessageOptionType === 'SHOW' \">\r\n <div class=\"bpaac-validated-icon\" *ngIf=\"selectedAddress && validationMessage!==null && validationMessage.messageType!==null\"></div>\r\n <!-- {{ validationMessage | translate }} -->\r\n {{ validationMessage.translatedMessage }}\r\n </div>\r\n\r\n <!-- bp-aacwidget-autocomplete-locality -->\r\n <bp-locality class=\"aacwidget-address-locality\" *ngIf=\"isComponentReady\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedLocalityUrl\"\r\n [prefillData]=\"localityPrefillData\"\r\n [labelResourceKey]=\"'common.label.postalCode'\"\r\n [inputText]=\"postalCodeLocality\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [sortCriteria]=\"sortCriteriaLocality\"\r\n [maxSuggesionCount]=\"maxSuggestionLocality\" \r\n [visibleSuggestionCount]=\"visibleSuggestionLocalityCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 4)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\" \r\n (textChangeEvent)=\"resetLocality($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onLocalityPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-locality>\r\n\r\n <bp-street class=\"aacwidget-address-street\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetUrl\"\r\n [prefillData]=\"streetPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetName'\"\r\n [inputText]=\"streetNameInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\"\r\n [locality]=\"locality\"\r\n [sortCriteria]=\"sortCriteriaStreet\" \r\n [maxSuggesionCount]=\"maxSuggestionStreet\"\r\n [visibleSuggesionCount]=\"visibleSuggestionStreetCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 3)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreet($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street>\r\n\r\n <bp-street-number class=\"aacwidget-address-streetnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetNumberUrl\"\r\n [selectedAddress]=\"streetAddress\"\r\n [prefillData]=\"streetNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetNumber'\"\r\n [inputText]=\"streetNumberInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\"\r\n [sortCriteria]=\"sortCriteriaStreetNb\"\r\n [maxSuggesionCount]=\"maxSuggestionStreetNb\" \r\n [visibleSuggesionCount]=\"visibleSuggestionStreetNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n (addressChanged)=\"setAddress($event, 2)\"\r\n (streetNumberChanged)=\"setAddressStreetNumber($event)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreetNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street-number>\r\n\r\n <bp-box-number class=\"aacwidget-address-boxnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedBoxNumberUrl\"\r\n [selectedAddress]=\"streetNumberAddress\"\r\n [prefillData]=\"boxNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.boxNumber'\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\" \r\n [streetNumber]=\"streetNumber\"\r\n [sortCriteria]=\"sortCriteriaBoxNb\" \r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n [maxSuggesionCount]=\"maxSuggestionBoxNb\"\r\n [visibleSuggesionCount]=\"visibleSuggestionBoxNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (addressChanged)=\"setAddress($event, 1)\" \r\n (boxNumberChanged)=\"setAddressBoxNumber($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetBoxNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onBoxNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-box-number>\r\n</div>", styles: [""], components: [{ type: i3.LocalityComponent, selector: "bp-locality", inputs: ["labelResourceKey", "messageOption", "maxSuggesionCount", "visibleSuggestionCount", "sortCriteria", "baseUrl", "inputText", "prefillData", "showDebugMessageToConsole", "inputLang", "isReadonly", "allowNoValidation", "validatedByBackend", "numberOfExceptions"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "clearInputEventEmitter", "prefillEventEmitter", "numberOfExceptionsEmitter"] }, { type: i4.StreetComponent, selector: "bp-street", inputs: ["labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "prefillData", "showDebugMessageToConsole", "postalCode", "locality", "inputText", "messageOption", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "inputLang", "isReadonly"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "clearInputEventEmitter", "prefillEventEmitter", "numberOfExceptionsEmitter"] }, { type: i5.StreetNumberComponent, selector: "bp-street-number", inputs: ["prefillData", "showDebugMessageToConsole", "labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "postalCode", "locality", "streetName", "notInListAllowed", "selectedAddress", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "nis9InResponse", "businessNameInResponse", "inputLang", "messageOption", "inputText", "isReadonly", "suggestionLevel"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "emptyResponseEvent", "clearInputEventEmitter", "prefillEventEmitter", "streetNumberChanged", "numberOfExceptionsEmitter"] }, { type: i6.BoxNumberComponent, selector: "bp-box-number", inputs: ["prefillData", "showDebugMessageToConsole", "labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "postalCode", "locality", "streetName", "streetNumber", "selectedAddress", "notInListAllowed", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "inputLang", "messageOption", "isReadonly", "suggestionLevel", "nis9InResponse", "businessNameInResponse"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "emptyResponseEvent", "clearInputEventEmitter", "prefillEventEmitter", "boxNumberChanged", "numberOfExceptionsEmitter"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
1406
1425
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LibAddressAutocompleteByComponentComponent, decorators: [{
|
|
1407
1426
|
type: Component,
|
|
1408
|
-
args: [{ selector: 'bp-lib-address-autocomplete-by-component', template: "\r\n<div class=\"aacwidget-address-container\">\r\n\r\n <div class=\"bpaac-dropdown-validation\" *ngIf=\"validationMessageOptionType === 'SHOW' \">\r\n <div class=\"bpaac-validated-icon\" *ngIf=\"selectedAddress && validationMessage!==null && validationMessage.messageType!==null\"></div>\r\n <!-- {{ validationMessage | translate }} -->\r\n {{ validationMessage.translatedMessage }}\r\n </div>\r\n\r\n <!-- bp-aacwidget-autocomplete-locality -->\r\n <bp-locality class=\"aacwidget-address-locality\" *ngIf=\"isComponentReady\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedLocalityUrl\"\r\n [prefillData]=\"localityPrefillData\"\r\n [labelResourceKey]=\"'common.label.postalCode'\"\r\n [inputText]=\"postalCodeLocality\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [sortCriteria]=\"sortCriteriaLocality\"\r\n [maxSuggesionCount]=\"maxSuggestionLocality\" \r\n [visibleSuggestionCount]=\"visibleSuggestionLocalityCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 4)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\" \r\n (textChangeEvent)=\"resetLocality($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onLocalityPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-locality>\r\n\r\n <bp-street class=\"aacwidget-address-street\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetUrl\"\r\n [prefillData]=\"streetPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetName'\"\r\n [inputText]=\"streetNameInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\"\r\n [locality]=\"locality\"\r\n [sortCriteria]=\"sortCriteriaStreet\" \r\n [maxSuggesionCount]=\"maxSuggestionStreet\"\r\n [visibleSuggesionCount]=\"visibleSuggestionStreetCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 3)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreet($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street>\r\n\r\n <bp-street-number class=\"aacwidget-address-streetnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetNumberUrl\"\r\n [selectedAddress]=\"streetAddress\"\r\n [prefillData]=\"streetNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetNumber'\"\r\n [inputText]=\"streetNumberInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\"\r\n [sortCriteria]=\"sortCriteriaStreetNb\"\r\n [maxSuggesionCount]=\"maxSuggestionStreetNb\" \r\n [visibleSuggesionCount]=\"visibleSuggestionStreetNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 2)\"\r\n (streetNumberChanged)=\"setAddressStreetNumber($event)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreetNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street-number>\r\n\r\n <bp-box-number class=\"aacwidget-address-boxnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedBoxNumberUrl\"\r\n [selectedAddress]=\"streetNumberAddress\"\r\n [prefillData]=\"boxNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.boxNumber'\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\" \r\n [streetNumber]=\"streetNumber\"\r\n [sortCriteria]=\"sortCriteriaBoxNb\" \r\n [maxSuggesionCount]=\"maxSuggestionBoxNb\"\r\n [visibleSuggesionCount]=\"visibleSuggestionBoxNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (addressChanged)=\"setAddress($event, 1)\" \r\n (boxNumberChanged)=\"setAddressBoxNumber($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetBoxNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onBoxNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-box-number>\r\n</div>", styles: [""] }]
|
|
1427
|
+
args: [{ selector: 'bp-lib-address-autocomplete-by-component', template: "\r\n<div class=\"aacwidget-address-container\">\r\n\r\n <div class=\"bpaac-dropdown-validation\" *ngIf=\"validationMessageOptionType === 'SHOW' \">\r\n <div class=\"bpaac-validated-icon\" *ngIf=\"selectedAddress && validationMessage!==null && validationMessage.messageType!==null\"></div>\r\n <!-- {{ validationMessage | translate }} -->\r\n {{ validationMessage.translatedMessage }}\r\n </div>\r\n\r\n <!-- bp-aacwidget-autocomplete-locality -->\r\n <bp-locality class=\"aacwidget-address-locality\" *ngIf=\"isComponentReady\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedLocalityUrl\"\r\n [prefillData]=\"localityPrefillData\"\r\n [labelResourceKey]=\"'common.label.postalCode'\"\r\n [inputText]=\"postalCodeLocality\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [sortCriteria]=\"sortCriteriaLocality\"\r\n [maxSuggesionCount]=\"maxSuggestionLocality\" \r\n [visibleSuggestionCount]=\"visibleSuggestionLocalityCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 4)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\" \r\n (textChangeEvent)=\"resetLocality($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onLocalityPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-locality>\r\n\r\n <bp-street class=\"aacwidget-address-street\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetUrl\"\r\n [prefillData]=\"streetPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetName'\"\r\n [inputText]=\"streetNameInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\"\r\n [locality]=\"locality\"\r\n [sortCriteria]=\"sortCriteriaStreet\" \r\n [maxSuggesionCount]=\"maxSuggestionStreet\"\r\n [visibleSuggesionCount]=\"visibleSuggestionStreetCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 3)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreet($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street>\r\n\r\n <bp-street-number class=\"aacwidget-address-streetnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetNumberUrl\"\r\n [selectedAddress]=\"streetAddress\"\r\n [prefillData]=\"streetNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetNumber'\"\r\n [inputText]=\"streetNumberInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\"\r\n [sortCriteria]=\"sortCriteriaStreetNb\"\r\n [maxSuggesionCount]=\"maxSuggestionStreetNb\" \r\n [visibleSuggesionCount]=\"visibleSuggestionStreetNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n (addressChanged)=\"setAddress($event, 2)\"\r\n (streetNumberChanged)=\"setAddressStreetNumber($event)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreetNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street-number>\r\n\r\n <bp-box-number class=\"aacwidget-address-boxnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedBoxNumberUrl\"\r\n [selectedAddress]=\"streetNumberAddress\"\r\n [prefillData]=\"boxNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.boxNumber'\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\" \r\n [streetNumber]=\"streetNumber\"\r\n [sortCriteria]=\"sortCriteriaBoxNb\" \r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n [maxSuggesionCount]=\"maxSuggestionBoxNb\"\r\n [visibleSuggesionCount]=\"visibleSuggestionBoxNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (addressChanged)=\"setAddress($event, 1)\" \r\n (boxNumberChanged)=\"setAddressBoxNumber($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetBoxNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onBoxNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-box-number>\r\n</div>", styles: [""] }]
|
|
1409
1428
|
}], ctorParameters: function () { return [{ type: i1.Nis9Service }, { type: i2.HttpService }]; }, propDecorators: { autocompleteLocality: [{
|
|
1410
1429
|
type: ViewChild,
|
|
1411
1430
|
args: [LocalityComponent, { static: false }]
|
|
@@ -1492,7 +1511,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
1492
1511
|
type: Input
|
|
1493
1512
|
}], nis9InResponse: [{
|
|
1494
1513
|
type: Input
|
|
1514
|
+
}], businessNameInResponse: [{
|
|
1515
|
+
type: Input
|
|
1495
1516
|
}], nis9ServiceURL: [{
|
|
1496
1517
|
type: Input
|
|
1497
1518
|
}] } });
|
|
1498
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFHL0gsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7OztBQU94RSxN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dkIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csOEJBQThCO3NCQUF0QyxLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUlHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBa0JJLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFDRyw2QkFBNkI7c0JBQXRDLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLDhCQUE4QjtzQkFBdkMsTUFBTTtnQkFDRyw4QkFBOEI7c0JBQXZDLE1BQU07Z0JBU1AsTUFBTTtzQkFETCxLQUFLO2dCQU1OLFVBQVU7c0JBRFQsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcmVmaWxsZWRQYXJhbWV0ZXJzIH0gZnJvbSAnLi91dGlscy9wcmVmaWxsZWQtcGFyYW1ldGVycyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUgfSBmcm9tICcuL2VudW0vdmFsaWRhdGlvbi1tZXNzYWdlLW9wdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi9lbnVtL3ZhbGlkYXRpb24tbWVzc2FnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgTG9jYWxpdHlDb21wb25lbnQgfSBmcm9tICcuL2xvY2FsaXR5L2xvY2FsaXR5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdHJlZXRDb21wb25lbnQgfSBmcm9tICcuL3N0cmVldC9zdHJlZXQuY29tcG9uZW50JztcbmltcG9ydCB7IFN0cmVldE51bWJlckNvbXBvbmVudCB9IGZyb20gJy4vc3RyZWV0LW51bWJlci9zdHJlZXQtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCb3hOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL2JveC1udW1iZXIvYm94LW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUREUkVTU0xFVkVMIH0gZnJvbSAnLi9lbnVtJztcbmltcG9ydCB7IFByZWZpbGxEYXRhIH0gZnJvbSAnLi91dGlscy9wcmVmaWxsLWRhdGEnO1xuaW1wb3J0IHsgUHJlZmlsbEV2ZW50IH0gZnJvbSAnLi91dGlscy9wcmVmbGxsLmV2ZW50JztcbmltcG9ydCB7IElucHV0TmFtZVR5cGUgfSBmcm9tICcuL2VudW0vaW5wdXQtbmFtZS5lbnVtJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmlzOVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL25pczkuc2VydmljZSc7XG5pbXBvcnQgeyBMSUJfVkVSU0lPTiB9IGZyb20gJy4vdXRpbHMvY29uc3RhbnRzJztcbmltcG9ydCB7IFN1Z2dlc3Rpb25MZXZlbFR5cGUgfSBmcm9tICcuL2VudW0vc3VnZ2VzdGlvbi1sZXZlbC10eXBlLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicC1saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJy4vbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExpYkFkZHJlc3NBdXRvY29tcGxldGVCeUNvbXBvbmVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIEBWaWV3Q2hpbGQoTG9jYWxpdHlDb21wb25lbnQsIHtzdGF0aWM6IGZhbHNlfSApIGF1dG9jb21wbGV0ZUxvY2FsaXR5O1xuICBAVmlld0NoaWxkKFN0cmVldENvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9ICkgYXV0b2NvbXBsZXRlU3RyZWV0O1xuICBAVmlld0NoaWxkKFN0cmVldE51bWJlckNvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9ICkgYXV0b2NvbXBsZXRlU3RyZWV0TmI7XG4gIEBWaWV3Q2hpbGQoQm94TnVtYmVyQ29tcG9uZW50LCB7c3RhdGljOiBmYWxzZX0gKSBhdXRvY29tcGxldGVCb3hOYjtcblxuICBzZWxlY3RlZExhbmd1YWdlOiBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgYmFzZVVybCA9IFwiaHR0cHM6Ly9hcGkubWFpbG9wcy5icG9zdC5jbG91ZC9yb2EtaW5mby9leHRlcm5hbE1haWxpbmdBZGRyZXNzUHJvb2ZpbmdSZXN0L2F1dG9jb21wbGV0ZS9cIjtcbiAgcHJpdmF0ZSBkZWZhdWx0QXBpS2V5PScnO1xuXG4gIHVzZWRMb2NhbGl0eVVybCA9IHRoaXMuYmFzZVVybCArICdsb2NhbGl0eSc7XG4gIHVzZWRTdHJlZXRVcmwgPSB0aGlzLmJhc2VVcmwgKyAnc3RyZWV0JztcbiAgdXNlZFN0cmVldE51bWJlclVybCA9IHRoaXMuYmFzZVVybCArICdzdHJlZXROdW1iZXInO1xuICB1c2VkQm94TnVtYmVyVXJsID0gdGhpcy5iYXNlVXJsICsgJ2JveE51bWJlcic7XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgaW5wdXRMYW5nKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMYW5ndWFnZSh2YWwpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KSB7XG4gICAgdGhpcy5vbkNsZWFySW5wdXQoZm9jdXMpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb24ob3B0aW9uOiB7dmFsaWRhdGlvblR5cGU6IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25Gcm9tSW5wdXQob3B0aW9uKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGRlZmF1bHRMYW5nOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSA9IGZhbHNlO1xuICBASW5wdXQoKSBtaW5MZXZlbDogbnVtYmVyO1xuICBASW5wdXQoKSBub3RJbkxpc3RBbGxvd2VkID0gdHJ1ZTtcbiAgQElucHV0KCkgYWRkcmVzc1BhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgQElucHV0KCkgbWVzc2FnZU9wdGlvbiA9ICdZJztcblxuICAvLyBMT0NBTElUWVxuICBASW5wdXQoKSBsb2NhbGl0eVVybCA9IHRoaXMuYmFzZVVybCArICdsb2NhbGl0eSc7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc3Rpb25Mb2NhbGl0eSA9IDU7XG4gIEBJbnB1dCgpIHZpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYUxvY2FsaXR5OiBzdHJpbmc7XG4gIHBvc3RhbENvZGVMb2NhbGl0eTogc3RyaW5nO1xuICAvLyBsb2NhbGl0eVBhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgbG9jYWxpdHlQcmVmaWxsRGF0YTogUHJlZmlsbERhdGEgPSBudWxsO1xuXG4gIC8vIFNUUkVFVFxuICBASW5wdXQoKSBzdHJlZXRVcmwgPSB0aGlzLmJhc2VVcmwgKyAnc3RyZWV0JztcbiAgQElucHV0KCkgbWF4U3VnZ2VzdGlvblN0cmVldCA9IDU7XG4gIEBJbnB1dCgpIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFTdHJlZXQ6IHN0cmluZztcbiAgLy8gc3RyZWV0UGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBzdHJlZXRQcmVmaWxsRGF0YTogUHJlZmlsbERhdGEgPSBudWxsO1xuXG4gIC8vIFNUUkVFVCBOVU1CRVJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICBASW5wdXQoKSBzdHJlZXROdW1iZXJVcmwgPSB0aGlzLmJhc2VVcmwgKyAnc3RyZWV0TnVtYmVyJztcbiAgQElucHV0KCkgbWF4U3VnZ2VzdGlvblN0cmVldE5iID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhU3RyZWV0TmI6IHN0cmluZztcbiAgLy8gc3RyZWV0TnVtYmVyUGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBzdHJlZXROdW1iZXJQcmVmaWxsRGF0YTogUHJlZmlsbERhdGEgPSBudWxsO1xuXG4gIC8vIEJPWCBOVU1CRVJcbiAgQElucHV0KCkgYm94TnVtYmVyVXJsID0gdGhpcy5iYXNlVXJsICsgJ2JveE51bWJlcic7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc3Rpb25Cb3hOYiA9IDU7XG4gIEBJbnB1dCgpIHZpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYUJveE5iOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFsbG93Tm9WYWxpZGF0aW9uOiBib29sZWFuO1xuICBASW5wdXQoKSB2YWxpZGF0ZWRCeUJhY2tlbmQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG51bWJlck9mRXhjZXB0aW9uczogbnVtYmVyO1xuICAvLyBib3hQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIGJveE51bWJlclByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgQElucHV0KCkgc3VnZ2VzdGlvbkxldmVsOiBTdWdnZXN0aW9uTGV2ZWxUeXBlID0gU3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXRBbmRCb3hOdW1iZXI7XG5cbiAgYm94TnVtYmVyOiBzdHJpbmc7XG4gIGNvbXBsZXRlQWRkcmVzczogc3RyaW5nO1xuICBlbWl0dGVkQWRkcmVzczogYW55ID0gbnVsbDtcbiAgbG9jYWxpdHk6IHN0cmluZztcbiAgcG9zdGFsQ29kZTogc3RyaW5nO1xuICBzZWxlY3RlZEFkZHJlc3M6IGFueTtcbiAgc3RyZWV0OiBzdHJpbmc7XG4gIHN0cmVldEFkZHJlc3M6IGFueTtcbiAgc3RyZWV0TmFtZUlucHV0OiBzdHJpbmc7XG4gIHN0cmVldE51bWJlcjogc3RyaW5nO1xuICBzdHJlZXROdW1iZXJBZGRyZXNzOiBhbnk7XG4gIHN0cmVldE51bWJlcklucHV0OiBzdHJpbmc7XG4gIHZhbGlkYXRpb25NZXNzYWdlOiB7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30gPSB7bWVzc2FnZVR5cGU6IG51bGwsIHRyYW5zbGF0ZWRNZXNzYWdlOiAnJ307XG4gIHZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlO1xuXG5cbiAgQE91dHB1dCgpIGFkZHJlc3NDb21wbGV0ZUV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB2YWxpZGF0aW9uTWVzc2FnZUV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjbGVhcklucHV0RXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHZhbGlkYXRlZEJ5QmFja2VuZEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbnVtYmVyT2ZFeGNlcHRpb25zRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXG4gIHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YTtcbiAgcHJvY2Vzc2luZ1ByZWZpbGxEYXRhID0gZmFsc2U7XG5cblxuICAvLyBQYXNzIHRoZSBBUEkga2V5IGFzIGEgcHJvcGVydHkgb2YgdGhlIGxpYnJhcnkgIVxuICBASW5wdXQoKVxuICBhcGlLZXk9dGhpcy5kZWZhdWx0QXBpS2V5O1xuXG5cbiAgLy8gc2V0IHRoZSB3aWRnZXQgYXMgcmVhZG9ubHkgYW5kIGFkZCBOSVM5IHF1ZXJ5IHBhcmFtZXRlclxuICBASW5wdXQoKVxuICBpc1JlYWRvbmx5PWZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIG5pczlJblJlc3BvbnNlPWZhbHNlO1xuXG4gIC8vIGh0dHBzOi8vYmdzLmJwb3N0LmJlL3NldC1zZWxlY3Rpb24tY2lyY2xlP2xuZz00LjM2MDUzNzU3MjU0MTk0OCZsYXQ9NTAuODQwNjM1ODI4MDYwMzcmcmFkaXVzPTAuMDAxXG4gIEBJbnB1dCgpXG4gIG5pczlTZXJ2aWNlVVJMPScnO1xuXG4gIGlzQ29tcG9uZW50UmVhZHkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5pczlTZXJ2aWNlOiBOaXM5U2VydmljZSxcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWRcbiAge1xuICAgIGNvbnNvbGUuaW5mbygnbGliIHZlcnNpb24gaXM6JywgTElCX1ZFUlNJT04pO1xuICAgIC8vY29uc29sZS53YXJuKCdsaWIgLSBuZ09uSW5pdCcpO1xuXG4gICAgdGhpcy5uaXM5U2VydmljZS5zZXROaXM5U2VydmljZVVSTCh0aGlzLm5pczlTZXJ2aWNlVVJMKTtcblxuICAgIGNvbnN0IGFwaUtleSA9IHRoaXMuaXNWYWxpZERhdGEodGhpcy5hcGlLZXkpID8gdGhpcy5hcGlLZXkgOiB0aGlzLmRlZmF1bHRBcGlLZXk7XG4gICAgdGhpcy5odHRwU2VydmljZS5zZXRBcGlLZXkoIGFwaUtleSApO1xuICAgIHRoaXMuaHR0cFNlcnZpY2Uuc2V0U2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpO1xuXG4gICAgaWYoIHRoaXMuaXNWYWxpZERhdGEodGhpcy5sb2NhbGl0eVVybCkgKSB0aGlzLnVzZWRMb2NhbGl0eVVybD10aGlzLmxvY2FsaXR5VXJsO1xuICAgIGlmKCB0aGlzLmlzVmFsaWREYXRhKHRoaXMuc3RyZWV0VXJsKSApIHRoaXMudXNlZFN0cmVldFVybD10aGlzLnN0cmVldFVybDtcbiAgICBpZiggdGhpcy5pc1ZhbGlkRGF0YSh0aGlzLnN0cmVldE51bWJlclVybCkgKSB0aGlzLnVzZWRTdHJlZXROdW1iZXJVcmw9dGhpcy5zdHJlZXROdW1iZXJVcmw7XG4gICAgaWYoIHRoaXMuaXNWYWxpZERhdGEodGhpcy5ib3hOdW1iZXJVcmwpICkgdGhpcy51c2VkQm94TnVtYmVyVXJsPXRoaXMuYm94TnVtYmVyVXJsO1xuXG4gICAgaWYgKHRoaXMuYWRkcmVzc1BhcmFtcylcbiAgICB7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmlzQ29tcG9uZW50UmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgaXNWYWxpZERhdGEoIHN0cjogc3RyaW5nKTogYm9vbGVhblxuICB7XG4gICAgcmV0dXJuIHN0ciE9PXVuZGVmaW5lZCAmJiBzdHIhPT1udWxsICYmIHN0ci5sZW5ndGg+MDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KClcbiAge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbilcbiAgICB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpXG4gIHtcbiAgICBpZiAoY2hhbmdlcylcbiAgICB7XG4gICAgICAvLyBjb2RlIGZvciB0cmFjaW5nXG4gICAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnRcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5UGFyYW1ldGVyc0NoYW5nZXNUb0NvbnNvbGUoY2hhbmdlcyk7XG4gICAgICB9XG5cblxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2FwaUtleScpICYmICFjaGFuZ2VzWydhcGlLZXknXS5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBhcGlLZXkgPSB0aGlzLmFwaUtleSE9PW51bGwgJiYgdGhpcy5hcGlLZXkhPT11bmRlZmluZWQgJiYgdGhpcy5hcGlLZXkubGVuZ3RoPjBcbiAgICAgICAgICAgID8gdGhpcy5hcGlLZXlcbiAgICAgICAgICAgIDogdGhpcy5kZWZhdWx0QXBpS2V5O1xuICAgICAgICB0aGlzLmh0dHBTZXJ2aWNlLnNldEFwaUtleSggYXBpS2V5ICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdsb2NhbGl0eVVybCcpICYmICFjaGFuZ2VzWydsb2NhbGl0eVVybCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsaXR5VXJsID0gdGhpcy5sb2NhbGl0eVVybCE9PW51bGwgJiYgdGhpcy5sb2NhbGl0eVVybCE9PXVuZGVmaW5lZCAmJiB0aGlzLmxvY2FsaXR5VXJsLmxlbmd0aD4wXG4gICAgICAgICAgICA/IHRoaXMubG9jYWxpdHlVcmxcbiAgICAgICAgICAgIDogdGhpcy5iYXNlVXJsICsgJ2xvY2FsaXR5JztcbiAgICAgICAgdGhpcy51c2VkTG9jYWxpdHlVcmw9bG9jYWxpdHlVcmw7XG4gICAgICAgIGNvbnNvbGUubG9nKCduZ09uQ2hhbmdlcyAtIGxvY2FsaXR5VXJsOiAnLCBsb2NhbGl0eVVybCk7XG4gICAgICAgIHRoaXMuc2V0TnVtYmVyT2ZFeGNlcHRpb25zKDApO1xuICAgICAgICB0aGlzLnNldFZhbGlkYXRlZEJ5QmFja2VuZCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdHJlZXRVcmwnKSAmJiAhY2hhbmdlc1snc3RyZWV0VXJsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgY29uc3Qgc3RyZWV0VXJsID0gdGhpcy5zdHJlZXRVcmwhPT1udWxsICYmIHRoaXMuc3RyZWV0VXJsIT09dW5kZWZpbmVkICYmIHRoaXMuc3RyZWV0VXJsLmxlbmd0aD4wXG4gICAgICAgICAgICA/IHRoaXMuc3RyZWV0VXJsXG4gICAgICAgICAgICA6IHRoaXMuYmFzZVVybCArICdzdHJlZXQnO1xuICAgICAgICB0aGlzLnVzZWRTdHJlZXRVcmw9c3RyZWV0VXJsO1xuICAgICAgICB0aGlzLnNldE51bWJlck9mRXhjZXB0aW9ucygwKTtcbiAgICAgICAgdGhpcy5zZXRWYWxpZGF0ZWRCeUJhY2tlbmQodHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TnVtYmVyVXJsJykgJiYgIWNoYW5nZXMuc3RyZWV0TnVtYmVyVXJsLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHN0cmVldE51bWJlclVybCA9IHRoaXMuc3RyZWV0TnVtYmVyVXJsIT09bnVsbCAmJiB0aGlzLnN0cmVldE51bWJlclVybCE9PXVuZGVmaW5lZCAmJiB0aGlzLnN0cmVldE51bWJlclVybC5sZW5ndGg+MFxuICAgICAgICAgICAgPyB0aGlzLnN0cmVldE51bWJlclVybFxuICAgICAgICAgICAgOiB0aGlzLmJhc2VVcmwgKyAnc3RyZWV0TnVtYmVyJztcbiAgICAgICAgdGhpcy51c2VkU3RyZWV0TnVtYmVyVXJsPXN0cmVldE51bWJlclVybDtcbiAgICAgICAgdGhpcy5zZXROdW1iZXJPZkV4Y2VwdGlvbnMoMCk7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdGVkQnlCYWNrZW5kKHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2JveE51bWJlclVybCcpICYmICFjaGFuZ2VzLmJveE51bWJlclVybC5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBib3hOdW1iZXJVcmwgPSB0aGlzLmJveE51bWJlclVybCE9PW51bGwgJiYgdGhpcy5ib3hOdW1iZXJVcmwhPT11bmRlZmluZWQgJiYgdGhpcy5ib3hOdW1iZXJVcmwubGVuZ3RoPjBcbiAgICAgICAgICAgID8gdGhpcy5ib3hOdW1iZXJVcmxcbiAgICAgICAgICAgIDogdGhpcy5iYXNlVXJsICsgJ2JveE51bWJlcic7XG4gICAgICAgIHRoaXMudXNlZEJveE51bWJlclVybD1ib3hOdW1iZXJVcmw7XG4gICAgICAgIHRoaXMuc2V0TnVtYmVyT2ZFeGNlcHRpb25zKDApO1xuICAgICAgICB0aGlzLnNldFZhbGlkYXRlZEJ5QmFja2VuZCh0cnVlKTtcbiAgICAgIH1cblxuXG5cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdhZGRyZXNzUGFyYW1zJykgJiYgIWNoYW5nZXNbJ2FkZHJlc3NQYXJhbXMnXS5maXJzdENoYW5nZSkge1xuICAgICAgLy8gaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2FkZHJlc3NQYXJhbXMnKSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmdQcmVmaWxsRGF0YSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW50ZXJQcmVmaWxsTW9kZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IG51bGw7XG4gICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgLypcbiAgICAgICAgaWYgKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSAhPT0gbnVsbCAmJiB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuTE9DQUxJVFkpO1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjp3aWRnZXQgZGV0ZWN0ZWQgcHJlZmlsbGluZycsIHRoaXMuYWRkcmVzc1BhcmFtcyk7IH1cbiAgICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gLyo0Ki8gQUREUkVTU0xFVkVMLkxPQ0FMSVRZO1xuICAgICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSB0aGlzLmFkZHJlc3NQYXJhbXM7IC8vIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICAgICAgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbmV3IFByZWZpbGxEYXRhKHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhLCB0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6Y2hlY2tpbmcgbG9jYWxpdHkgbWF0Y2guLi4gJywgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhKTsgfVxuICAgICAgfVxuXG4gICAgICAvLyBzdWdnZXN0aW9uIGxldmVsXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc3VnZ2VzdGlvbkxldmVsJylcbiAgICAgICAgICAvKiYmICFjaGFuZ2VzLnN1Z2dlc3Rpb25MZXZlbC5maXJzdENoYW5nZVxuICAgICAgICAgICYmICFjaGFuZ2VzLmhhc093blByb3BlcnR5KCdwcmVmaWxsRGF0YScpICYmICEgdGhpcy5wcmVmaWxsaW5nKi8gKSB7XG4gICAgICAgICAgICAvKlxuICAgICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICAgIC8vIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICAgIGNvbnNvbGUud2Fybignc3RyZWV0IG51bWJlciAtIG5nT25jaGFuZ2VzIC0gc3RyZWV0TmFtZSBjaGFuZ2VzIGRldGVjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnN0cmVldE5hbWUuY3VycmVudFZhbHVlID09PSAnJykge1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICAgICovXG5cbiAgICAgICAgY29uc3Qgc2wgPSBOdW1iZXIoY2hhbmdlc1snc3VnZ2VzdGlvbkxldmVsJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgc3dpdGNoKHNsKVxuICAgICAgICB7XG4gICAgICAgICAgY2FzZSAwOiB0aGlzLnN1Z2dlc3Rpb25MZXZlbCA9IFN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZTsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOiB0aGlzLnN1Z2dlc3Rpb25MZXZlbCA9IFN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyOyBicmVhaztcbiAgICAgICAgICBjYXNlIDI6IHRoaXMuc3VnZ2VzdGlvbkxldmVsID0gU3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXRBbmRCb3hOdW1iZXI7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlJylcbiAgICAgICAgICAmJiAhY2hhbmdlc1snc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSddLmZpcnN0Q2hhbmdlICApIHtcblxuICAgICAgICBjb25zdCBzZG0yYyA9IGNoYW5nZXNbJ3Nob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgIGlmKHNkbTJjKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5odHRwU2VydmljZS5zZXRTaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKHNkbTJjKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbnVtYmVyT2ZFeGNlcHRpb25zJykgKSB7XG4gICAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zID0gY2hhbmdlc1snbnVtYmVyT2ZFeGNlcHRpb25zJ10uY3VycmVudFZhbHVlO1xuXG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmFsaWRhdGVkQnlCYWNrZW5kJykgKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kID0gY2hhbmdlc1sndmFsaWRhdGVkQnlCYWNrZW5kJ10uY3VycmVudFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRpc3BsYXlQYXJhbWV0ZXJzQ2hhbmdlc1RvQ29uc29sZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKVxuICB7XG4gICAgLy8gbWVzc2FnZU9wdGlvblxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtZXNzYWdlT3B0aW9uJykgJiYgIWNoYW5nZXNbJ21lc3NhZ2VPcHRpb24nXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snbWVzc2FnZU9wdGlvbiddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1lc3NhZ2VPcHRpb24nLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIG1heFN1Z2dlc3Rpb25Mb2NhbGl0eVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtYXhTdWdnZXN0aW9uTG9jYWxpdHknKSAmJiAhY2hhbmdlc1snbWF4U3VnZ2VzdGlvbkxvY2FsaXR5J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ21heFN1Z2dlc3Rpb25Mb2NhbGl0eSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1heFN1Z2dlc3Rpb25Mb2NhbGl0eScsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudCcpICYmICFjaGFuZ2VzWyd2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1sndmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50J10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBzb3J0Q3JpdGVyaWFMb2NhbGl0eVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFMb2NhbGl0eScpICYmICFjaGFuZ2VzWydzb3J0Q3JpdGVyaWFMb2NhbGl0eSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydzb3J0Q3JpdGVyaWFMb2NhbGl0eSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYUxvY2FsaXR5Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uU3RyZWV0XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21heFN1Z2dlc3Rpb25TdHJlZXQnKSAmJiAhY2hhbmdlc1snbWF4U3VnZ2VzdGlvblN0cmVldCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydtYXhTdWdnZXN0aW9uU3RyZWV0J10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWF4U3VnZ2VzdGlvblN0cmVldCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudCcpICYmICFjaGFuZ2VzWyd2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gc29ydENyaXRlcmlhU3RyZWV0XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NvcnRDcml0ZXJpYVN0cmVldCcpICYmICFjaGFuZ2VzWydzb3J0Q3JpdGVyaWFTdHJlZXQnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snc29ydENyaXRlcmlhU3RyZWV0J10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc29ydENyaXRlcmlhU3RyZWV0Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uU3RyZWV0TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWF4U3VnZ2VzdGlvblN0cmVldE5iJykgJiYgIWNoYW5nZXNbJ21heFN1Z2dlc3Rpb25TdHJlZXROYiddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydtYXhTdWdnZXN0aW9uU3RyZWV0TmInXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtYXhTdWdnZXN0aW9uU3RyZWV0TmInLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50JykgJiYgIWNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWyd2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyBzb3J0Q3JpdGVyaWFTdHJlZXROYlxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFTdHJlZXROYicpICYmICFjaGFuZ2VzWydzb3J0Q3JpdGVyaWFTdHJlZXROYiddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydzb3J0Q3JpdGVyaWFTdHJlZXROYiddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYVN0cmVldE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uQm94TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWF4U3VnZ2VzdGlvbkJveE5iJykgJiYgIWNoYW5nZXNbJ21heFN1Z2dlc3Rpb25Cb3hOYiddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydtYXhTdWdnZXN0aW9uQm94TmInXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtYXhTdWdnZXN0aW9uQm94TmInLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50JykgJiYgIWNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWyd2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSB2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyBzb3J0Q3JpdGVyaWFCb3hOYlxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFCb3hOYicpICYmICFjaGFuZ2VzWydzb3J0Q3JpdGVyaWFCb3hOYiddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydzb3J0Q3JpdGVyaWFCb3hOYiddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYUJveE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBhcGlLZXlcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYXBpS2V5JykgJiYgIWNoYW5nZXNbJ2FwaUtleSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydhcGlLZXknXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBhcGlLZXknLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIGxvY2FsaXR5VXJsXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2xvY2FsaXR5VXJsJykgJiYgIWNoYW5nZXNbJ2xvY2FsaXR5VXJsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ2xvY2FsaXR5VXJsJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbG9jYWxpdHlVcmwnLCB3Y0NoYW5nZXMpO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gY3VycmVudCBsb2NhbGl0eVVybCcsIHRoaXMubG9jYWxpdHlVcmwpO1xuICAgIH1cblxuICAgIC8vIHN0cmVldFVybFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdHJlZXRVcmwnKSAmJiAhY2hhbmdlc1snc3RyZWV0VXJsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3N0cmVldFVybCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHN0cmVldFVybCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gc3RyZWV0TnVtYmVyVXJsXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N0cmVldE51bWJlclVybCcpICYmICFjaGFuZ2VzWydzdHJlZXROdW1iZXJVcmwnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snc3RyZWV0TnVtYmVyVXJsJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc3RyZWV0TnVtYmVyVXJsJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBib3hOdW1iZXJVcmxcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyVXJsJykgJiYgIWNoYW5nZXNbJ2JveE51bWJlclVybCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydib3hOdW1iZXJVcmwnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBib3hOdW1iZXJVcmwnLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIHN1Z2dlc3Rpb25MZXZlbFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdWdnZXN0aW9uTGV2ZWwnKSAmJiAhY2hhbmdlc1snc3VnZ2VzdGlvbkxldmVsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3N1Z2dlc3Rpb25MZXZlbCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHN1Z2dlc3Rpb25MZXZlbCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJXaWRnZXQoKSB7XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuY2xlYXJXaWRnZXQoKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJXaWRnZXQoKTtcbiAgfVxuXG4gIGNoYW5nZU1pbkxldmVsKG1pbkxldmVsOiBudW1iZXIpIHtcbiAgICB0aGlzLm1pbkxldmVsID0gbWluTGV2ZWw7XG4gIH1cblxuICAvLyBDYWxsZWQgYnkgdGhlIHNwZWNpZmljIGJ1dHRvbnMgaW4gdGhlIGFwcFxuICBvbkNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0JywgZm9jdXMpOyB9XG5cbiAgICAvKlxuICAgIGlmIChmb2N1cyA9PT0gbnVsbCB8fCBmb2N1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSovXG5cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuXG4gICAgY29uc3Qgc2V0Rm9jdXMgPSAoZm9jdXMgPT09IG51bGwgfHwgZm9jdXMgPT09IHVuZGVmaW5lZCkgPyBmYWxzZSA6IGZvY3VzLnNldEZvY3VzO1xuXG4gICAgc3dpdGNoICh0aGlzLm1pbkxldmVsKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdCT1hfTlVNQkVSJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdTVFJFRVRfTlVNQkVSJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnU1RSRUVUJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gQm94IG51bWJlclxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTdHJlZXQgbmFtZVxuICAgICAgICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gTG9jYWxpdHlcbiAgICAgICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnTE9DQUxJVFknKTtcbiAgICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBnZXRCb3hQcmVmaXgoKTogc3RyaW5nIHtcbiAgICBsZXQgcHJlZml4ID0gJyc7XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgJ2ZyJzpcbiAgICAgICAgcHJlZml4ID0gJ0JURSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbmwnOlxuICAgICAgICAgIHByZWZpeCA9ICdCVVMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcHJlZml4ID0gJ0JPWCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgbm90aWZ5QWRkcmVzc0NvbXBsZXRlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdub3RpZnkgZm9yIGFkZHJlc3MgY29tcGxldGUnKTtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKVxuICAgIHtcbiAgICAgIGNvbnNvbGUubG9nKCdub3RpZnlBZGRyZXNzQ29tcGxldGUnLCB0aGlzLnNlbGVjdGVkQWRkcmVzcywgJ25pczlJblJlc3BvbnNlOicrdGhpcy5uaXM5SW5SZXNwb25zZSwgdHlwZW9mIHRoaXMubmlzOUluUmVzcG9uc2UpO1xuICAgIH1cblxuICAgIGlmKCAodGhpcy5uaXM5SW5SZXNwb25zZSA9PT0gdHJ1ZSB8fCAnJyt0aGlzLm5pczlJblJlc3BvbnNlID09PSAndHJ1ZScpXG5cbiAgICAgICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzICE9PXVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkQWRkcmVzcyE9PW51bGxcbiAgICAgICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhhc093blByb3BlcnR5KCdsYXRpdHVkZScpICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhhc093blByb3BlcnR5KCdsb25naXR1ZGUnKSlcbiAgICB7XG4gICAgICBjb25zdCBsYXRpdHVkZSA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmxhdGl0dWRlO1xuICAgICAgY29uc3QgbG9uZ2l0dWRlID0gdGhpcy5zZWxlY3RlZEFkZHJlc3MubG9uZ2l0dWRlO1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgY29uc29sZS5sb2coJ2NhbGxpbmcgbmlzOSBzZXJ2aWNlIHRvIGdldCBuaXM5IGRhdGEgKDEpOicsIGxvbmdpdHVkZSwgbGF0aXR1ZGUpO1xuXG4gICAgICB0aGlzLm5pczlTZXJ2aWNlLmRldGVybWluZU5pczlEYXRhKGxvbmdpdHVkZSwgbGF0aXR1ZGUpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICBkYXRhID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbmlzIERBVEE6JywgZGF0YSk7XG4gICAgICAgICAgLypcbiAgICAgICAgICBuaXMgREFUQTpcbiAgICAgICAgICB7U3RhdHVzOiAnc3VjY2VzcycsIGRhdGE6IEFycmF5KDEpfVxuICAgICAgICAgIFN0YXR1czogXCJzdWNjZXNzXCJcbiAgICAgICAgICBkYXRhOiBbJzI1MTEyQTIxLSddXG4gICAgICAgICAgKi9cbiAgICAgICAgICBpZihkYXRhIT09dW5kZWZpbmVkICYmIGRhdGEgIT09bnVsbCAmJiBkYXRhLmhhc093blByb3BlcnR5KCdTdGF0dXMnKSAmJiBkYXRhLlN0YXR1cz09PSdzdWNjZXNzJylcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBuaXM5RGF0YSA9IGRhdGEuZGF0YTtcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkobmlzOURhdGEpICYmIG5pczlEYXRhLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MubmlzOSA9IG5pczlEYXRhWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQodGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMuZW1pdHRlZEFkZHJlc3MgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcztcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eSh0aGlzLmVtaXR0ZWRBZGRyZXNzKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIGNvbnNvbGUubG9nKCdOT1QgY2FsbGluZyBuaXM5IHNlcnZpY2UgdG8gZ2V0IG5pczkgZGF0YSAoMSknKTtcbiAgICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQodGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgICAgdGhpcy5lbWl0dGVkQWRkcmVzcyA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkodGhpcy5lbWl0dGVkQWRkcmVzcyk7XG4gICAgfVxuXG4gIH1cblxuICBvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoZXZlbnQpIHtcblxuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0RXZlbnRFbWl0dGVyJywgZXZlbnQpOyB9XG5cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuXG4gICAgbGV0IG5leHRBZGRyZXNzID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M7IC8vIHRoaXMuZW1pdHRlZEFkZHJlc3M7XG5cbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuTE9DQUxJVFkpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbnVtYmVyXG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBuYW1lXG4gICAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIExvY2FsaXR5XG4gICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSlcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVClcbiAgICB7XG4gICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXROYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gU3RyZWV0IG5hbWVcbiAgICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXQpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbnVtYmVyXG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgbmV4dEFkZHJlc3MgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKVxuICAgIHtcbiAgICAgIC8vIEJveCBudW1iZXJcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBBdHRlbnRpb246IGlmIG5vdC1pbi1saXN0IGRvbid0IHJlc2V0IHRoZSBhZGRyZXNzLCBqdXN0IG1vZGlmeSBpdFxuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0XG4gICAgICAgID0gbmV4dEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJiAgbmV4dEFkZHJlc3MgIT09IG51bGxcbiAgICAgICAgICAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBuZXh0QWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZVxuICAgICAgICA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgICAvKlxuICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgIHtcbiAgICAgICAgZGVsZXRlIG5leHRBZGRyZXNzLmJveE51bWJlcjtcbiAgICAgICAgbmV4dEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyAhPT0gbnVsbCApXG4gICAgICAgIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ3Jlc2V0IGJveCBvbiBub3QtaW4tbGlzdCcsIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyk7XG5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBuZXh0QWRkcmVzcyA9IHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyAhPT0gbnVsbCA/IHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA6IG51bGw7XG4gICAgICAvKlxuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0XG4gICAgICAgID0gbmV4dEFkZHJlc3MgIT09IG51bGwgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgbmV4dEFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWVcbiAgICAgICAgPyB0cnVlIDogZmFsc2U7XG4gICAgICAqL1xuICAgICAgY29uc3QgYWRkcmVzc0lzQ29tcGxldGVcbiAgICAgICAgPSBuZXh0QWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmIG5leHRBZGRyZXNzICE9PSBudWxsXG4gICAgICAgICAgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBuZXh0QWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGFkZHJlc3NJc0NvbXBsZXRlO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KGV2ZW50KTtcblxuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0RXZlbnRFbWl0dGVyJyxcbiAgICAgICdlbWl0dGVkIGFkZHJlc3M6JytKU09OLnN0cmluZ2lmeSh0aGlzLmVtaXR0ZWRBZGRyZXNzKSwgJ25leHRBZGRyZXNzOicrSlNPTi5zdHJpbmdpZnkobmV4dEFkZHJlc3MpICk7IH1cblxuICAgIGlmICh0aGlzLmVtaXR0ZWRBZGRyZXNzICE9PSBudWxsICkge1xuICAgICAgaWYobmV4dEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJiBuZXh0QWRkcmVzcyAhPT0gbnVsbCAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbGF0aXR1ZGUnKSAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbG9uZ2l0dWRlJykpXG4gICAgICB7XG4gICAgICAgIGNvbnN0IGxhdGl0dWRlID0gbmV4dEFkZHJlc3MubGF0aXR1ZGU7XG4gICAgICAgIGNvbnN0IGxvbmdpdHVkZSA9IG5leHRBZGRyZXNzLmxvbmdpdHVkZTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgY29uc29sZS5sb2coJ2NhbGxpbmcgbmlzOSBzZXJ2aWNlIHRvIGdldCBuaXM5IGRhdGEgKDIpJywgbG9uZ2l0dWRlLCBsYXRpdHVkZSk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIGNvbnNvbGUubG9nKCdOT1QgY2FsbGluZyBuaXM5IHNlcnZpY2UgdG8gZ2V0IG5pczkgZGF0YSAoMiknKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQobmV4dEFkZHJlc3MpO1xuICAgICAgdGhpcy5lbWl0dGVkQWRkcmVzcyA9IG5leHRBZGRyZXNzO1xuICAgIH1cblxuXG4gICAgLy8gZ2thXG4gICAgLypcbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuTE9DQUxJVFkpXG4gICAge1xuICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5MT0NBTElUWTtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAvLyB0aGlzLmNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSk7XG4gICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICB0aGlzLnBvc3RhbENvZGUgPSAnJztcbiAgICAgIHRoaXMuc3RyZWV0ID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5sb2NhbGl0eSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5TVFJFRVQpXG4gICAge1xuICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVQ7XG4gICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAvLyB0aGlzLmNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSk7XG4gICAgICB0aGlzLnN0cmVldCA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmJveE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKVxuICAgIHtcbiAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAvLyB0aGlzLmNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSk7XG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmJveE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuQk9YX05VTUJFUilcbiAgICB7XG4gICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgIH1cbiAgICAqL1xuICB9XG5cbiAgcmVzZXRMb2NhbGl0eShldmVudCkge1xuICAgIHRoaXMucG9zdGFsQ29kZSA9ICcnO1xuICAgIHRoaXMubG9jYWxpdHkgPSAnJztcbiAgICBjb25zdCBzdHJlZXQgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcz8uaGFzT3duUHJvcGVydHkoJ3N0cmVldE5hbWUnKTtcbiAgICBjb25zdCBob3VzZSA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzPy5oYXNPd25Qcm9wZXJ0eSgnaG91c2VOdW1iZXInKTtcbiAgICBjb25zdCBib3ggPSB0aGlzLnNlbGVjdGVkQWRkcmVzcz8uaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpO1xuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgaWYoZXZlbnQpXG4gICAgeyBcbiAgICBpZihzdHJlZXQgPT0gdHJ1ZSlcbiAgICAgIHtcbiAgICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5TVFJFRVQpO1xuICAgICAgfVxuICAgIGlmKGhvdXNlID09IHRydWUpXG4gICAgICB7XG4gICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICB9XG4gICAgaWYoYm94ID09IHRydWUpXG4gICAgICB7XG4gICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmKCFldmVudClcbiAgICAgIHsgXG4gICAgICBpZihzdHJlZXQgPT0gdHJ1ZSlcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUKTtcbiAgICAgICAgfVxuICAgICAgaWYoaG91c2UgPT0gdHJ1ZSlcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICAgIH1cbiAgICAgIGlmKGJveCA9PSB0cnVlKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCA0KTtcbiAgfVxuXG4gIHJlc2V0U3RyZWV0KGV2ZW50KSB7XG4gICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICBjb25zdCBob3VzZSA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzPy5oYXNPd25Qcm9wZXJ0eSgnaG91c2VOdW1iZXInKTtcbiAgICBjb25zdCBib3ggPSB0aGlzLnNlbGVjdGVkQWRkcmVzcz8uaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpO1xuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgaWYoZXZlbnQpXG4gICAgICB7XG4gIFxuICAgICAgICBpZihob3VzZSA9PSB0cnVlKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICBpZihib3ggPT0gdHJ1ZSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICAgIH1cbiAgICAgIGlmKCFldmVudClcbiAgICAgICAge1xuICAgIFxuICAgICAgICAgIGlmKGhvdXNlID09IHRydWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgICBpZihib3ggPT0gdHJ1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgICAgICB9XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCAzKTtcbiAgfVxuXG4gIHJlc2V0U3RyZWV0TnVtYmVyKGV2ZW50LCByZXNldEFkZHJlc3M6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAvLyAgY29uc29sZS5sb2coJ3Jlc2V0IHN0cmVldCBudW1uZXIhJywgZXZlbnQpO1xuICBjb25zdCBib3ggPSB0aGlzLnNlbGVjdGVkQWRkcmVzcz8uaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpO1xuICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICBpZihldmVudClcbiAgICB7XG4gICAgICBpZihib3ggPT0gdHJ1ZSlcbiAgICAgIHtcbiAgICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICAgIH1cbiAgICAgIFxuICAgIH1cbiAgICBpZighZXZlbnQgJiYgYm94ID09IHRydWUpXG4gICAge1xuICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICB9XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDIpO1xuICAgIC8vICQkIDcgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDIpOyAvLyAkJCA/Pz8/P1xuICAgIC8qXG4gICAgaWYgKHJlc2V0QWRkcmVzcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZXRBZGRyZXNzKC8gKm51bGwqIC8gdGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgIH0qL1xuICB9XG5cbiAgcmVzZXRCb3hOdW1iZXIoZXZlbnQsIHJlc2V0QWRkcmVzczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVzZXQgc3RyZWV0IG51bW5lciEnLCBldmVudCwgcmVzZXRBZGRyZXNzKTtcbiAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgLy8gdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5ib3hOdW1iZXIgPSAnJ1xuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCAxKTtcbiAgICAvLyBpZighZXZlbnQpe1xuICAgIC8vICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ0NMRUFSX0JPWF9OVU1CRVInKVxuICAgIC8vIH1cbiAgIFxuICAgIC8vICQkIDcgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDEpOyAvLyAkJCA/Pz8/P1xuICAgIC8qXG4gICAgaWYgKHJlc2V0QWRkcmVzcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZXRBZGRyZXNzKC8gKm51bGwqIC8gdGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgIH0qL1xuICB9XG5cbiAgZW50ZXJQcmVmaWxsTW9kZSgpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6ZW50ZXJQcmVmaWxsTW9kZSgpJyk7IH1cbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYiAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0ICYmIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkgKVxuICAgIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIucHJlZmlsbGluZyA9IHRydWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQucHJlZmlsbGluZyA9IHRydWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LnByZWZpbGxpbmcgPSB0cnVlO1xuXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5sb2NhbGl0eSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgIH1cblxuICB9XG5cbiAgcXVpdFByZWZpbGxNb2RlKCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpxdWl0UHJlZmlsbE1vZGUoKScpOyB9XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIgJiYgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYiAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldCAmJiB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5IClcbiAgICB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzaW5nUHJlZmlsbERhdGEgPSBmYWxzZTtcbiAgfVxuXG4gIHNldEFkZHJlc3MoYWRkcmVzczogYW55LCBsZXZlbD86IG51bWJlcikge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpzZXRBZGRyZXNzIC0gYWRkcmVzcyBwYXJ0LCBsZXZlbCcsIGFkZHJlc3MsIGxldmVsKTsgfVxuXG4gICAgLyogJCQgJCRcbiAgICBpZiAodGhpcy5zZWxlY3RlZEFkZHJlc3MgJiYgIWFkZHJlc3MpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXNldCBhZGRyZXNzIScpO1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IG51bGw7XG4gICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIGlmIChhZGRyZXNzID09PSBudWxsIHx8IGFkZHJlc3MgPT09IHVuZGVmaW5lZCApXG4gICAge1xuICAgICAgY29uc3QgZG9Ob3RpZnkgPSAodGhpcy5zZWxlY3RlZEFkZHJlc3MgIT09IG51bGwgJiYgdGhpcy5zZWxlY3RlZEFkZHJlc3MgIT09IHVuZGVmaW5lZCkgPyB0cnVlIDogZmFsc2U7XG4gICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IG51bGw7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICBpZiAoZG9Ob3RpZnkpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWRkcmVzcykge1xuICAgICAgZGVsZXRlIGFkZHJlc3MubWVzc2FnZXM7XG4gICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlQWRkcmVzcygpO1xuICAgICAgdGhpcy5wb3N0YWxDb2RlID0gYWRkcmVzcy5wb3N0YWxDb2RlID8gYWRkcmVzcy5wb3N0YWxDb2RlIDogJyc7XG4gICAgICB0aGlzLmxvY2FsaXR5ID0gYWRkcmVzcy5sb2NhbGl0eU5hbWUgPyBhZGRyZXNzLmxvY2FsaXR5TmFtZSA6ICcnO1xuICAgICAgdGhpcy5zdHJlZXQgPSBhZGRyZXNzLnN0cmVldE5hbWUgPyBhZGRyZXNzLnN0cmVldE5hbWUgOiAnJztcbiAgICAgIC8vIGNvbnN0IG5vdEluTGlzdCA9IGFkZHJlc3NbJ25vdC1pbi1saXN0J107XG4gICAgICAvLyBjb25zdCBpc05vdEluTGlzdCA9IG5vdEluTGlzdCAhPT0gbnVsbCAmJiBub3RJbkxpc3QgIT09IHVuZGVmaW5lZCAmJiBub3RJbkxpc3QgPT09IHRydWU7XG4gICAgICAvKlxuICAgICAgaWYgKGFkZHJlc3MuaG91c2VOdW1iZXIpIHtcbiAgICAgICAgaWYgKCFhZGRyZXNzLmlzQ29tcGxldGUgfHwgaXNOb3RJbkxpc3QpIHtcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXIgPyBhZGRyZXNzLmhvdXNlTnVtYmVyIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFhZGRyZXNzLmJveE51bWJlcikge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgcmVzZXQgc3RyZWV0IG51bWJlciAhJyk7XG4gICAgICAgICAgICBpZiAoICF0aGlzLnByb2Nlc3NpbmdQcmVmaWxsRGF0YSApIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNldFN0cmVldE51bWJlcihudWxsLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgY29uc3QgYWRkcmVzc0lzQ29tcGxldGUgPSBhZGRyZXNzICE9PSBudWxsICYmIGFkZHJlc3MgIT09IHVuZGVmaW5lZFxuICAgICAgICAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0ID0gYWRkcmVzcyAhPT0gbnVsbCAmJiBhZGRyZXNzICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBhZGRyZXNzWydub3QtaW4tbGlzdCddID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICBzd2l0Y2ggKGxldmVsKSB7XG5cbiAgICAgICAgLy8gTG9jYWxpdHkgLyBNdW5pY2lwYWxpdHkgYW5kIFBPc3RhbENvZGVcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgICAgIC8qXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBudWxsO1xuICAgICAgICAgIC8vXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gU3RyZWV0IE5hbWVcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IG51bGw7XG4gICAgICAgICAgLypcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBTVFJFRVQgTnVtYmVyXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcyk7IC8vICQkXG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIGlmIChhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlIClcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChhZGRyZXNzSXNOb3RJbkxpc3QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLypcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBCT1ggTnVtYmVyXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoYWRkcmVzc0lzTm90SW5MaXN0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICggdGhpcy5zZWxlY3RlZEFkZHJlc3MgJiYgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIGlmIChhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlTm90aWZpY2F0aW9uRG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGVOb3RpZmljYXRpb25Eb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0QWRkcmVzc1N0cmVldE51bWJlcihzdHJlZXROdW1iZXI6IHN0cmluZykge1xuXG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSlcbiAgICB7XG4gICAgICBjb25zb2xlLmxvZygnbGliOjpzZXRBZGRyZXNzU3RyZWV0TnVtYmVyIC0gc3RyZWV0bnVtYmVyOiAnLCBzdHJlZXROdW1iZXIpO1xuICAgICAgY29uc29sZS5sb2coJ2xpYjo6c2V0QWRkcmVzc1N0cmVldE51bWJlciAtIHN0cmVldEFkZHJlc3M6ICcsIHRoaXMuc3RyZWV0QWRkcmVzcyk7XG4gICAgfVxuICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IHRoaXMuc3RyZWV0QWRkcmVzcztcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IHRoaXMuc3RyZWV0QWRkcmVzcztcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ob3VzZU51bWJlciA9IHN0cmVldE51bWJlcjtcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5zdHJlZXROdW1iZXIgPSBzdHJlZXROdW1iZXI7XG4gICAgLypcbiAgICB0aGlzLnN0cmVldE51bWJlciA9IHN0cmVldE51bWJlcjtcbiAgICAqL1xuICAgIC8vdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICB0aGlzLnN0cmVldE51bWJlciA9IHN0cmVldE51bWJlcjtcbiAgICB0aGlzLmJveE51bWJlcj0nJztcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXI9Jyc7XG4gICAgdGhpcy5hZGRyZXNzQ29tcGxldGVFdmVudEVtaXR0ZXIuZW1pdCh0aGlzLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgdGhpcy5lbWl0dGVkQWRkcmVzcyA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpXG4gICAge1xuICAgICAgY29uc29sZS5sb2coJ3NldCBzdHJlZXQgbnVtYmVyIHZhbHVlOicsIHN0cmVldE51bWJlcixcbiAgICAgICAgJ3RoaXMuc3RyZWV0TnVtYmVyOicrdGhpcy5zdHJlZXROdW1iZXIsXG4gICAgICAgICd0aGlzLm1pbkxldmVsOicrdGhpcy5taW5MZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc2V0QWRkcmVzc0JveE51bWJlcihib3hOdW1iZXI6IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKCdzZXQgYm94IG51bWJlciB2YWx1ZTonLCBib3hOdW1iZXIpO1xuICAgIC8vdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gdGhpcy5zdHJlZXRBZGRyZXNzO1xuICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzO1xuICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmJveE51bWJlciA9IGJveE51bWJlcjtcbiAgICB0aGlzLmJveE51bWJlciA9IGJveE51bWJlcjtcbiAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICB9XG5cbiAgc2V0TGFuZ3VhZ2UobGFuZzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gbGFuZztcbiAgfVxuXG4gIHNldFZhbGlkYXRpb25NZXNzYWdlKC8qbWVzc2FnZTogc3RyaW5nKi9tZXNzYWdlOiB7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30pIHtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gbWVzc2FnZTtcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUgPT09IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZS5FTUlUKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlRXZlbnRFbWl0dGVyLmVtaXQobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0TnVtYmVyT2ZFeGNlcHRpb25zKGV2ZW50KXtcbiAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9ucz1ldmVudDtcbiAgICBpZih0aGlzLm51bWJlck9mRXhjZXB0aW9ucz49Myl7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9uc0V2ZW50RW1pdHRlci5lbWl0KHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKTtcbiAgICAgIHRoaXMuc2V0VmFsaWRhdGVkQnlCYWNrZW5kKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHNldFZhbGlkYXRlZEJ5QmFja2VuZChldmVudCl7XG4gICAgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQ9ZXZlbnQ7XG4gICAgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmRFdmVudEVtaXR0ZXIuZW1pdCh0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCk7XG4gIH1cblxuICB1cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICYmIGFkZHJlc3MucG9zdGFsQ29kZSAmJiBhZGRyZXNzLmxvY2FsaXR5TmFtZSkge1xuICAgICAgdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHkgPSAgYWRkcmVzcy5wb3N0YWxDb2RlICArICcgJyArIGFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKSB7XG4gICAgaWYgKGFkZHJlc3MgJiYgYWRkcmVzcy5zdHJlZXROYW1lKSB7XG4gICAgICB0aGlzLnN0cmVldE5hbWVJbnB1dCA9IGFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICYmIGFkZHJlc3MuaG91c2VOdW1iZXIpIHtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVySW5wdXQgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbXBsZXRlQWRkcmVzcygpIHtcbiAgICBsZXQgY29uY2F0U3RyID0gJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLnN0cmVldE5hbWUgPyBgJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5zdHJlZXROYW1lfSBgIDogJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhvdXNlTnVtYmVyID8gYCR7dGhpcy5zZWxlY3RlZEFkZHJlc3MuaG91c2VOdW1iZXJ9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MuYm94TnVtYmVyID8gYCR7dGhpcy5nZXRCb3hQcmVmaXgoKX0gJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXJ9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MucG9zdGFsQ29kZSA/IGAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLnBvc3RhbENvZGV9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MubXVuaWNpcGFsaXR5TmFtZSA/IGAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLm11bmljaXBhbGl0eU5hbWV9IGAgOiAnJztcbiAgICB0aGlzLmNvbXBsZXRlQWRkcmVzcyA9IGNvbmNhdFN0cjtcbiAgfVxuXG4gIHNldFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uRnJvbUlucHV0KG9wdGlvbjoge3ZhbGlkYXRpb25UeXBlOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUsIHRpbWVzdGFtcDogRGF0ZX0pIHtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSA9IG9wdGlvbi52YWxpZGF0aW9uVHlwZTtcbiAgICAvLyBjb25zb2xlLmxvZygnYWRkcmVzc2UgYXV0b2NvbXBsZXRlIC0gdmFsaWRhdGlvbiBtZXNzYWdlIG9wdGlvbicsIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlKTtcbiAgfVxuXG4gIG9uTG9jYWxpdHlQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpsb2NhbGl0eSBwcmVmaWxsIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIC8qXG4gICAgaWYgKGV2ZW50LnBlcmZlY3RNYXRjaClcbiAgICB7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSAvICozKiAvIEFERFJFU1NMRVZFTC5TVFJFRVQ7XG4gICAgICB0aGlzLnN0cmVldFBhcmFtcyA9IHRoaXMuYWRkcmVzc1BhcmFtcztcbiAgICB9XG4gICAgKi9cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGV2ZW50LnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSApXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSAvKjQqLyBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zOyAvLyBhcyBhbnkgYXMgUHJlZmlsbERhdGE7XG4gICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSBuZXcgUHJlZmlsbERhdGEodGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhLCB0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS50cyA9IG5ldyBEYXRlKCk7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgLy8gQmUgc3VyZSB0byBwcm9wYWdhdGUgdGhlIGxvY2FsaXR5TmFtZSBpbiBwbGFjZSBvZiB0aGUgbXVuaWNpcGFsaXR5TmFtZSAhXG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgaWYgKHN0cmVldE5hbWUgPT09IG51bGwgfHwgc3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE5hbWUgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgLy8gdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgaWYgKHN0cmVldE5hbWUgPT09IG51bGwgfHwgc3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE5hbWUgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IHRyaWdnZXIgY2hlY2tpbmcgc3RyZWV0IG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpOyB9XG4gICAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAvLyBjb25zdCBjcEFuZExvY2FsaXR5ID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgKyB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgIGNvbnN0IGNwQW5kTG9jYWxpdHkgPSBkYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSArIGRhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQubG9jYWxpdHkgPSAnJztcbiAgICAgIGlmICggY3BBbmRMb2NhbGl0eSA9PT0gbnVsbCB8fCBjcEFuZExvY2FsaXR5ID09PSB1bmRlZmluZWQgfHwgY3BBbmRMb2NhbGl0eS5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdHJlZXRQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpzdHJlZXQ6IHByZWZpbGwgZXZlbnQgcmVjZWl2ZWQnLCBldmVudCk7IH1cbiAgICAvKlxuICAgIGNvbnN0IGRhdGE6IFByZWZpbGxEYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlIClcbiAgICB7XG4gICAgICBjb25zb2xlLmxvZygnbGliOjpvblN0cmVldFByZWZpbGxFdmVudDogTUFUQ0ggRk9VTkQnLCBkYXRhKTtcbiAgICAgIHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5ID0gJ1RSVUMtTVVDSEUnO1xuICAgICAgdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHkgPSAnVFJVQy1NVUNIRSAyJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuc2VhcmNoVGV4dCA9IHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5O1xuICAgIH1cbiAgICAqL1xuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZXZlbnQucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlIClcbiAgICB7XG4gICAgICAvLyBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50OiBNQVRDSCBGT1VORCcsIGRhdGEpOyB9XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IHRoaXMuYWRkcmVzc1BhcmFtczsgLy8gYXMgYW55IGFzIFByZWZpbGxEYXRhO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbmV3IFByZWZpbGxEYXRhKHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAvLyBPYmplY3QuYXNzaWduKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSwgdGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEudHMgPSBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGlmIChzdHJlZXROdW1iZXIgPT09IG51bGwgfHwgc3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TnVtYmVyID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgICAvLyB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvL3RoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgLypcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGlmIChzdHJlZXROdW1iZXIgPT09IG51bGwgfHwgc3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TnVtYmVyID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogdHJpZ2dlciBjaGVja2luZyBzdHJlZXQgbnVtYmVyIG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpO31cbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLndhcm4oJ2xpYjo6c3RyZWV0OiBwcmVmaWxsIC0gdHJhbnNtaXR0aW5nIHByZWZpbGwgZGF0YSBmb3Igc3RyZWV0TnVtYmVyIDonLCB0aGlzLnByZWZpbGxEYXRhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgY29uc3QgcHJlZmlsbFN0cmVldE5hbWUgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcblxuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50IC0gTk8gTUFUQ0ggQVQgU1RSRUVUIExFVkVMJywgcHJlZmlsbFN0cmVldE5hbWUgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCBwcmVmaWxsU3RyZWV0TmFtZSA9PT0gbnVsbCB8fCBwcmVmaWxsU3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxTdHJlZXROYW1lLmxlbmd0aCA9PT0gMCApXG4gICAgICB7XG4gICAgICAgIC8vIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpvblN0cmVldFByZWZpbGxFdmVudDogTk8gTUFUQ0ggRk9VTkQgLSBzZXQgYWRkcmVzcycsIGRhdGEsIGFkZHJlc3MpOyB9XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuTE9DQUxJVFkpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLnN0cmVldE5hbWUgPSBwcmVmaWxsU3RyZWV0TmFtZTtcbiAgICAgICAgYWRkcmVzcy5zZWFyY2hCYXJTdHJpbmcgPSBwcmVmaWxsU3RyZWV0TmFtZTtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBvblN0cmVldE51bWJlclByZWZpbGxFdmVudF9uZXcoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6c3RyZWV0LW51bWJlciBwcmVmaWxsIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcyk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3NJc0NvbXBsZXRlID0gYWRkcmVzcyAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0ID0gYWRkcmVzcyAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIGFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgIGlmIChhZGRyZXNzSXNDb21wbGV0ZSAmJiAhIGFkZHJlc3NJc05vdEluTGlzdCApXG4gICAgICB7XG4gICAgICAgIC8vIGZvdW5kIGFkZHJlc3MgLSBwZXJmZWN0IG1hdGNoYXQgc3RyZWV0IG51bWJlciBsZXZlbFxuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGFueW1vcmVcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEudHMgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgICAgLy8gY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWVcbiAgICAgICAgLy8gID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzLmxvY2FsaXR5TmFtZTtcblxuICAgICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzcy5sb2NhbGl0eU5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzcy5zdHJlZXROYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyID0gc3VnZ2VzdGlvbkFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuXG4gICAgICAgIGNvbnN0IGJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICAgIGlmICggISBhZGRyZXNzSXNOb3RJbkxpc3QgJiYgKGJveE51bWJlciA9PT0gbnVsbCB8fCBib3hOdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBib3hOdW1iZXIgPT09ICcnKSApXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICAgIC8vIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROYW1lKGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpOyAvLyAkJFxuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICBpZiAoYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSApXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoYWRkcmVzc0lzTm90SW5MaXN0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICBjb25zdCBib3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgICBpZiAoICEgYWRkcmVzc0lzTm90SW5MaXN0ICYmIChib3hOdW1iZXIgPT09IG51bGwgfHwgYm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgYm94TnVtYmVyID09PSAnJykgKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogdHJpZ2dlciBjaGVja2luZyBib3ggbnVtYmVyIG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpOyB9XG4gICAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgKi9cblxuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdsaWI6OnN0cmVldG51bWJlcjogcHJlZmlsbCAtIHRyYW5zbWl0dGluZyBwcmVmaWxsIGRhdGEgZm9yIGJveCA6JywgdGhpcy5wcmVmaWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsU3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuXG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2xpYjo6b25TdHJlZXROdW1iZXJQcmVmaWxsRXZlbnQgLSBOTyBNQVRDSCBBVCBTVFJFRVQtTlVNQkVSIExFVkVMJywgcHJlZmlsbFN0cmVldE51bWJlciApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIHByZWZpbGxTdHJlZXROdW1iZXIgPT09IG51bGwgfHwgcHJlZmlsbFN0cmVldE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxTdHJlZXROdW1iZXIubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLmhvdXNlTnVtYmVyID0gcHJlZmlsbFN0cmVldE51bWJlcjtcbiAgICAgICAgYWRkcmVzcy5zZWFyY2hCYXJTdHJpbmcgPSBwcmVmaWxsU3RyZWV0TnVtYmVyO1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBvblN0cmVldE51bWJlclByZWZpbGxFdmVudChldmVudDogUHJlZmlsbEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpzdHJlZXQgbnVtYmVyIHByZWZpbGwgZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpOyB9XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgIGlmIChkYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZVN0cmVldE51bWJlcihhZGRyZXNzKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcblxuICAgICAgY29uc3QgYWRkcmVzc0lzQ29tcGxldGUgPSBhZGRyZXNzICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICBjb25zdCBhZGRyZXNzSXNOb3RJbkxpc3QgPSBhZGRyZXNzICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgYWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgaWYgKGFkZHJlc3NJc0NvbXBsZXRlICYmICEgYWRkcmVzc0lzTm90SW5MaXN0IClcbiAgICAgIHtcbiAgICAgICAgLy8gZm91bmQgYWRkcmVzcyAtIHBlcmZlY3QgbWF0Y2hhdCBzdHJlZXQgbnVtYmVyIGxldmVsXG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gYW55bW9yZVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS50cyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICAvLyBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZVxuICAgICAgICAvLyAgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3MubG9jYWxpdHlOYW1lO1xuXG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgPSBzdWdnZXN0aW9uQWRkcmVzcy5wb3N0YWxDb2RlO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnN0cmVldE5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXIgPSBzdWdnZXN0aW9uQWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG5cbiAgICAgICAgY29uc3QgYm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKCAhIGFkZHJlc3NJc05vdEluTGlzdCAmJiAoYm94TnVtYmVyID09PSBudWxsIHx8IGJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IGJveE51bWJlciA9PT0gJycpIClcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICAgICAgLy8gdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgfWVsc2VcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE51bWJlcihhZGRyZXNzKTsgXG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIGlmIChhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlIClcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChhZGRyZXNzSXNOb3RJbkxpc3QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICBjb25zdCBib3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgICBpZiAoICEgYWRkcmVzc0lzTm90SW5MaXN0ICYmIChib3hOdW1iZXIgPT09IG51bGwgfHwgYm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgYm94TnVtYmVyID09PSAnJykgKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogdHJpZ2dlciBjaGVja2luZyBib3ggbnVtYmVyIG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpOyB9XG4gICAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgKi9cblxuICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGNvbnN0IHByZWZpbGxTdHJlZXROdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAoIHByZWZpbGxTdHJlZXROdW1iZXIgPT09IG51bGwgfHwgcHJlZmlsbFN0cmVldE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxTdHJlZXROdW1iZXIubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLmhvdXNlTnVtYmVyID0gcHJlZmlsbFN0cmVldE51bWJlcjtcbiAgICAgICAgYWRkcmVzcy5zZWFyY2hCYXJTdHJpbmcgPSBwcmVmaWxsU3RyZWV0TnVtYmVyO1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkJveE51bWJlclByZWZpbGxFdmVudF9uZXcoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogYm94IG51bWJlciBldmVudCByZWNlaXZlZDonLCBldmVudCk7IH1cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsQm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBpZiAoIHByZWZpbGxCb3hOdW1iZXIgPT09IG51bGwgfHwgcHJlZmlsbEJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxCb3hOdW1iZXIubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gYWRkcmVzcy5ib3hOdW1iZXIgPSBwcmVmaWxsQm94TnVtYmVyO1xuICAgICAgICBhZGRyZXNzLnNlYXJjaEJhclN0cmluZyA9IHByZWZpbGxCb3hOdW1iZXI7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gIH1cblxuICBvbkJveE51bWJlclByZWZpbGxFdmVudChldmVudDogUHJlZmlsbEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpwcmVmaWxsOiBib3ggbnVtYmVyIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGNvbnN0IHByZWZpbGxCb3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGlmICggcHJlZmlsbEJveE51bWJlciA9PT0gbnVsbCB8fCBwcmVmaWxsQm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgcHJlZmlsbEJveE51bWJlci5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLmJveE51bWJlciA9IHByZWZpbGxCb3hOdW1iZXI7XG4gICAgICAgIGFkZHJlc3Muc2VhcmNoQmFyU3RyaW5nID0gcHJlZmlsbEJveE51bWJlcjtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgfVxufVxuIiwiXHJcbjxkaXYgY2xhc3M9XCJhYWN3aWRnZXQtYWRkcmVzcy1jb250YWluZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tdmFsaWRhdGlvblwiICpuZ0lmPVwidmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlID09PSAnU0hPVycgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJwYWFjLXZhbGlkYXRlZC1pY29uXCIgKm5nSWY9XCJzZWxlY3RlZEFkZHJlc3MgJiYgdmFsaWRhdGlvbk1lc3NhZ2UhPT1udWxsICYmIHZhbGlkYXRpb25NZXNzYWdlLm1lc3NhZ2VUeXBlIT09bnVsbFwiPjwvZGl2PlxyXG4gICAgICAgIDwhLS0ge3sgdmFsaWRhdGlvbk1lc3NhZ2UgfCB0cmFuc2xhdGUgfX0gLS0+XHJcbiAgICAgICAge3sgdmFsaWRhdGlvbk1lc3NhZ2UudHJhbnNsYXRlZE1lc3NhZ2UgfX1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIGJwLWFhY3dpZGdldC1hdXRvY29tcGxldGUtbG9jYWxpdHkgLS0+XHJcbiAgICAgICAgPGJwLWxvY2FsaXR5IGNsYXNzPVwiYWFjd2lkZ2V0LWFkZHJlc3MtbG9jYWxpdHlcIiAqbmdJZj1cImlzQ29tcG9uZW50UmVhZHlcIlxyXG4gICAgICAgIFtpc1JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRMb2NhbGl0eVVybFwiXHJcbiAgICAgICAgW3ByZWZpbGxEYXRhXT1cImxvY2FsaXR5UHJlZmlsbERhdGFcIlxyXG4gICAgICAgIFtsYWJlbFJlc291cmNlS2V5XT1cIidjb21tb24ubGFiZWwucG9zdGFsQ29kZSdcIlxyXG4gICAgICAgIFtpbnB1dFRleHRdPVwicG9zdGFsQ29kZUxvY2FsaXR5XCJcclxuICAgICAgICBbaW5wdXRMYW5nXT1cInNlbGVjdGVkTGFuZ3VhZ2VcIlxyXG4gICAgICAgIFttZXNzYWdlT3B0aW9uXT1cIm1lc3NhZ2VPcHRpb25cIlxyXG4gICAgICAgIFtzb3J0Q3JpdGVyaWFdPVwic29ydENyaXRlcmlhTG9jYWxpdHlcIlxyXG4gICAgICAgIFttYXhTdWdnZXNpb25Db3VudF09XCJtYXhTdWdnZXN0aW9uTG9jYWxpdHlcIiBcclxuICAgICAgICBbdmlzaWJsZVN1Z2dlc3Rpb25Db3VudF09XCJ2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnRcIlxyXG4gICAgICAgIFthbGxvd05vVmFsaWRhdGlvbl09XCJhbGxvd05vVmFsaWRhdGlvblwiXHJcbiAgICAgICAgW3ZhbGlkYXRlZEJ5QmFja2VuZF09XCJ2YWxpZGF0ZWRCeUJhY2tlbmRcIlxyXG4gICAgICAgIFtudW1iZXJPZkV4Y2VwdGlvbnNdPVwibnVtYmVyT2ZFeGNlcHRpb25zXCJcclxuICAgICAgICAoYWRkcmVzc0NoYW5nZWQpPVwic2V0QWRkcmVzcygkZXZlbnQsIDQpXCJcclxuICAgICAgICAobWVzc2FnZUNoYW5nZWQpPVwic2V0VmFsaWRhdGlvbk1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZvY3VzRXZlbnQpPVwiY2hhbmdlTWluTGV2ZWwoJGV2ZW50KVwiIFxyXG4gICAgICAgICh0ZXh0Q2hhbmdlRXZlbnQpPVwicmVzZXRMb2NhbGl0eSgkZXZlbnQpXCJcclxuICAgICAgICAoY2xlYXJJbnB1dEV2ZW50RW1pdHRlcik9XCJvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHByZWZpbGxFdmVudEVtaXR0ZXIpPVwib25Mb2NhbGl0eVByZWZpbGxFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAobnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcik9XCJzZXROdW1iZXJPZkV4Y2VwdGlvbnMoJGV2ZW50KVwiPjwvYnAtbG9jYWxpdHk+XHJcblxyXG4gICAgICAgIDxicC1zdHJlZXQgY2xhc3M9XCJhYWN3aWRnZXQtYWRkcmVzcy1zdHJlZXRcIlxyXG4gICAgICAgIFtpc1JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRTdHJlZXRVcmxcIlxyXG4gICAgICAgIFtwcmVmaWxsRGF0YV09XCJzdHJlZXRQcmVmaWxsRGF0YVwiXHJcbiAgICAgICAgW2xhYmVsUmVzb3VyY2VLZXldPVwiJ2NvbW1vbi5sYWJlbC5zdHJlZXROYW1lJ1wiXHJcbiAgICAgICAgW2lucHV0VGV4dF09XCJzdHJlZXROYW1lSW5wdXRcIlxyXG4gICAgICAgIFtpbnB1dExhbmddPVwic2VsZWN0ZWRMYW5ndWFnZVwiXHJcbiAgICAgICAgW21lc3NhZ2VPcHRpb25dPVwibWVzc2FnZU9wdGlvblwiXHJcbiAgICAgICAgW3Bvc3RhbENvZGVdPVwicG9zdGFsQ29kZVwiXHJcbiAgICAgICAgW2xvY2FsaXR5XT1cImxvY2FsaXR5XCJcclxuICAgICAgICBbc29ydENyaXRlcmlhXT1cInNvcnRDcml0ZXJpYVN0cmVldFwiIFxyXG4gICAgICAgIFttYXhTdWdnZXNpb25Db3VudF09XCJtYXhTdWdnZXN0aW9uU3RyZWV0XCJcclxuICAgICAgICBbdmlzaWJsZVN1Z2dlc2lvbkNvdW50XT1cInZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnRcIlxyXG4gICAgICAgIFthbGxvd05vVmFsaWRhdGlvbl09XCJhbGxvd05vVmFsaWRhdGlvblwiXHJcbiAgICAgICAgW3ZhbGlkYXRlZEJ5QmFja2VuZF09XCJ2YWxpZGF0ZWRCeUJhY2tlbmRcIlxyXG4gICAgICAgIFtudW1iZXJPZkV4Y2VwdGlvbnNdPVwibnVtYmVyT2ZFeGNlcHRpb25zXCJcclxuICAgICAgICAoYWRkcmVzc0NoYW5nZWQpPVwic2V0QWRkcmVzcygkZXZlbnQsIDMpXCJcclxuICAgICAgICAobWVzc2FnZUNoYW5nZWQpPVwic2V0VmFsaWRhdGlvbk1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZvY3VzRXZlbnQpPVwiY2hhbmdlTWluTGV2ZWwoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRleHRDaGFuZ2VFdmVudCk9XCJyZXNldFN0cmVldCgkZXZlbnQpXCJcclxuICAgICAgICAoY2xlYXJJbnB1dEV2ZW50RW1pdHRlcik9XCJvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHByZWZpbGxFdmVudEVtaXR0ZXIpPVwib25TdHJlZXRQcmVmaWxsRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgKG51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXIpPVwic2V0TnVtYmVyT2ZFeGNlcHRpb25zKCRldmVudClcIj48L2JwLXN0cmVldD5cclxuXHJcbiAgICAgICAgPGJwLXN0cmVldC1udW1iZXIgY2xhc3M9XCJhYWN3aWRnZXQtYWRkcmVzcy1zdHJlZXRudW1iZXJcIlxyXG4gICAgICAgIFtpc1JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRTdHJlZXROdW1iZXJVcmxcIlxyXG4gICAgICAgIFtzZWxlY3RlZEFkZHJlc3NdPVwic3RyZWV0QWRkcmVzc1wiXHJcbiAgICAgICAgW3ByZWZpbGxEYXRhXT1cInN0cmVldE51bWJlclByZWZpbGxEYXRhXCJcclxuICAgICAgICBbbGFiZWxSZXNvdXJjZUtleV09XCInY29tbW9uLmxhYmVsLnN0cmVldE51bWJlcidcIlxyXG4gICAgICAgIFtpbnB1dFRleHRdPVwic3RyZWV0TnVtYmVySW5wdXRcIlxyXG4gICAgICAgIFtpbnB1dExhbmddPVwic2VsZWN0ZWRMYW5ndWFnZVwiXHJcbiAgICAgICAgW21lc3NhZ2VPcHRpb25dPVwibWVzc2FnZU9wdGlvblwiXHJcbiAgICAgICAgW3Bvc3RhbENvZGVdPVwicG9zdGFsQ29kZVwiIFxyXG4gICAgICAgIFtsb2NhbGl0eV09XCJsb2NhbGl0eVwiIFxyXG4gICAgICAgIFtzdHJlZXROYW1lXT1cInN0cmVldFwiXHJcbiAgICAgICAgW3NvcnRDcml0ZXJpYV09XCJzb3J0Q3JpdGVyaWFTdHJlZXROYlwiXHJcbiAgICAgICAgW21heFN1Z2dlc2lvbkNvdW50XT1cIm1heFN1Z2dlc3Rpb25TdHJlZXROYlwiIFxyXG4gICAgICAgIFt2aXNpYmxlU3VnZ2VzaW9uQ291bnRdPVwidmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50XCJcclxuICAgICAgICBbbm90SW5MaXN0QWxsb3dlZF09XCJub3RJbkxpc3RBbGxvd2VkXCJcclxuICAgICAgICBbc3VnZ2VzdGlvbkxldmVsXT1cInN1Z2dlc3Rpb25MZXZlbFwiXHJcbiAgICAgICAgW2FsbG93Tm9WYWxpZGF0aW9uXT1cImFsbG93Tm9WYWxpZGF0aW9uXCJcclxuICAgICAgICBbdmFsaWRhdGVkQnlCYWNrZW5kXT1cInZhbGlkYXRlZEJ5QmFja2VuZFwiXHJcbiAgICAgICAgW251bWJlck9mRXhjZXB0aW9uc109XCJudW1iZXJPZkV4Y2VwdGlvbnNcIlxyXG4gICAgICAgIChhZGRyZXNzQ2hhbmdlZCk9XCJzZXRBZGRyZXNzKCRldmVudCwgMilcIlxyXG4gICAgICAgIChzdHJlZXROdW1iZXJDaGFuZ2VkKT1cInNldEFkZHJlc3NTdHJlZXROdW1iZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKG1lc3NhZ2VDaGFuZ2VkKT1cInNldFZhbGlkYXRpb25NZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgIChmb2N1c0V2ZW50KT1cImNoYW5nZU1pbkxldmVsKCRldmVudClcIlxyXG4gICAgICAgICh0ZXh0Q2hhbmdlRXZlbnQpPVwicmVzZXRTdHJlZXROdW1iZXIoJGV2ZW50LCBmYWxzZSlcIlxyXG4gICAgICAgIChjbGVhcklucHV0RXZlbnRFbWl0dGVyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcigkZXZlbnQpXCJcclxuICAgICAgICAocHJlZmlsbEV2ZW50RW1pdHRlcik9XCJvblN0cmVldE51bWJlclByZWZpbGxFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAobnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcik9XCJzZXROdW1iZXJPZkV4Y2VwdGlvbnMoJGV2ZW50KVwiPjwvYnAtc3RyZWV0LW51bWJlcj5cclxuXHJcbiAgICAgICAgPGJwLWJveC1udW1iZXIgY2xhc3M9XCJhYWN3aWRnZXQtYWRkcmVzcy1ib3hudW1iZXJcIlxyXG4gICAgICAgIFtpc1JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRCb3hOdW1iZXJVcmxcIlxyXG4gICAgICAgIFtzZWxlY3RlZEFkZHJlc3NdPVwic3RyZWV0TnVtYmVyQWRkcmVzc1wiXHJcbiAgICAgICAgW3ByZWZpbGxEYXRhXT1cImJveE51bWJlclByZWZpbGxEYXRhXCJcclxuICAgICAgICBbbGFiZWxSZXNvdXJjZUtleV09XCInY29tbW9uLmxhYmVsLmJveE51bWJlcidcIlxyXG4gICAgICAgIFtpbnB1dExhbmddPVwic2VsZWN0ZWRMYW5ndWFnZVwiXHJcbiAgICAgICAgW21lc3NhZ2VPcHRpb25dPVwibWVzc2FnZU9wdGlvblwiXHJcbiAgICAgICAgW3Bvc3RhbENvZGVdPVwicG9zdGFsQ29kZVwiIFxyXG4gICAgICAgIFtsb2NhbGl0eV09XCJsb2NhbGl0eVwiIFxyXG4gICAgICAgIFtzdHJlZXROYW1lXT1cInN0cmVldFwiIFxyXG4gICAgICAgIFtzdHJlZXROdW1iZXJdPVwic3RyZWV0TnVtYmVyXCJcclxuICAgICAgICBbc29ydENyaXRlcmlhXT1cInNvcnRDcml0ZXJpYUJveE5iXCIgXHJcbiAgICAgICAgW21heFN1Z2dlc2lvbkNvdW50XT1cIm1heFN1Z2dlc3Rpb25Cb3hOYlwiXHJcbiAgICAgICAgW3Zpc2libGVTdWdnZXNpb25Db3VudF09XCJ2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnRcIlxyXG4gICAgICAgIFtub3RJbkxpc3RBbGxvd2VkXT1cIm5vdEluTGlzdEFsbG93ZWRcIlxyXG4gICAgICAgIFtzdWdnZXN0aW9uTGV2ZWxdPVwic3VnZ2VzdGlvbkxldmVsXCJcclxuICAgICAgICBbYWxsb3dOb1ZhbGlkYXRpb25dPVwiYWxsb3dOb1ZhbGlkYXRpb25cIlxyXG4gICAgICAgIFt2YWxpZGF0ZWRCeUJhY2tlbmRdPVwidmFsaWRhdGVkQnlCYWNrZW5kXCJcclxuICAgICAgICBbbnVtYmVyT2ZFeGNlcHRpb25zXT1cIm51bWJlck9mRXhjZXB0aW9uc1wiXHJcbiAgICAgICAgKG1lc3NhZ2VDaGFuZ2VkKT1cInNldFZhbGlkYXRpb25NZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgIChhZGRyZXNzQ2hhbmdlZCk9XCJzZXRBZGRyZXNzKCRldmVudCwgMSlcIiBcclxuICAgICAgICAoYm94TnVtYmVyQ2hhbmdlZCk9XCJzZXRBZGRyZXNzQm94TnVtYmVyKCRldmVudClcIlxyXG4gICAgICAgIChmb2N1c0V2ZW50KT1cImNoYW5nZU1pbkxldmVsKCRldmVudClcIlxyXG4gICAgICAgICh0ZXh0Q2hhbmdlRXZlbnQpPVwicmVzZXRCb3hOdW1iZXIoJGV2ZW50LCBmYWxzZSlcIlxyXG4gICAgICAgIChjbGVhcklucHV0RXZlbnRFbWl0dGVyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcigkZXZlbnQpXCJcclxuICAgICAgICAocHJlZmlsbEV2ZW50RW1pdHRlcik9XCJvbkJveE51bWJlclByZWZpbGxFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAobnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcik9XCJzZXROdW1iZXJPZkV4Y2VwdGlvbnMoJGV2ZW50KVwiPjwvYnAtYm94LW51bWJlcj5cclxuPC9kaXY+Il19
|
|
1519
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFHL0gsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7OztBQU94RSxN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QTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUlHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBbUJJLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFDRyw2QkFBNkI7c0JBQXRDLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLDhCQUE4QjtzQkFBdkMsTUFBTTtnQkFDRyw4QkFBOEI7c0JBQXZDLE1BQU07Z0JBU1AsTUFBTTtzQkFETCxLQUFLO2dCQU1OLFVBQVU7c0JBRFQsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4sc0JBQXNCO3NCQURyQixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJlZmlsbGVkUGFyYW1ldGVycyB9IGZyb20gJy4vdXRpbHMvcHJlZmlsbGVkLXBhcmFtZXRlcnMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlIH0gZnJvbSAnLi9lbnVtL3ZhbGlkYXRpb24tbWVzc2FnZS1vcHRpb24tdHlwZS5lbnVtJztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlVHlwZSB9IGZyb20gJy4vZW51bS92YWxpZGF0aW9uLW1lc3NhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IExvY2FsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi9sb2NhbGl0eS9sb2NhbGl0eS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RyZWV0Q29tcG9uZW50IH0gZnJvbSAnLi9zdHJlZXQvc3RyZWV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdHJlZXROdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL3N0cmVldC1udW1iZXIvc3RyZWV0LW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm94TnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi9ib3gtbnVtYmVyL2JveC1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFERFJFU1NMRVZFTCB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBQcmVmaWxsRGF0YSB9IGZyb20gJy4vdXRpbHMvcHJlZmlsbC1kYXRhJztcbmltcG9ydCB7IFByZWZpbGxFdmVudCB9IGZyb20gJy4vdXRpbHMvcHJlZmxsbC5ldmVudCc7XG5pbXBvcnQgeyBJbnB1dE5hbWVUeXBlIH0gZnJvbSAnLi9lbnVtL2lucHV0LW5hbWUuZW51bSc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IE5pczlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9uaXM5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTElCX1ZFUlNJT04gfSBmcm9tICcuL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTdWdnZXN0aW9uTGV2ZWxUeXBlIH0gZnJvbSAnLi9lbnVtL3N1Z2dlc3Rpb24tbGV2ZWwtdHlwZS5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnAtbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICcuL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJBZGRyZXNzQXV0b2NvbXBsZXRlQnlDb21wb25lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICBAVmlld0NoaWxkKExvY2FsaXR5Q29tcG9uZW50LCB7c3RhdGljOiBmYWxzZX0gKSBhdXRvY29tcGxldGVMb2NhbGl0eTtcbiAgQFZpZXdDaGlsZChTdHJlZXRDb21wb25lbnQsIHtzdGF0aWM6IGZhbHNlfSApIGF1dG9jb21wbGV0ZVN0cmVldDtcbiAgQFZpZXdDaGlsZChTdHJlZXROdW1iZXJDb21wb25lbnQsIHtzdGF0aWM6IGZhbHNlfSApIGF1dG9jb21wbGV0ZVN0cmVldE5iO1xuICBAVmlld0NoaWxkKEJveE51bWJlckNvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9ICkgYXV0b2NvbXBsZXRlQm94TmI7XG5cbiAgc2VsZWN0ZWRMYW5ndWFnZTogc3RyaW5nID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGJhc2VVcmwgPSBcImh0dHBzOi8vYXBpLm1haWxvcHMuYnBvc3QuY2xvdWQvcm9hLWluZm8vZXh0ZXJuYWxNYWlsaW5nQWRkcmVzc1Byb29maW5nUmVzdC9hdXRvY29tcGxldGUvXCI7XG4gIHByaXZhdGUgZGVmYXVsdEFwaUtleT0nJztcblxuICB1c2VkTG9jYWxpdHlVcmwgPSB0aGlzLmJhc2VVcmwgKyAnbG9jYWxpdHknO1xuICB1c2VkU3RyZWV0VXJsID0gdGhpcy5iYXNlVXJsICsgJ3N0cmVldCc7XG4gIHVzZWRTdHJlZXROdW1iZXJVcmwgPSB0aGlzLmJhc2VVcmwgKyAnc3RyZWV0TnVtYmVyJztcbiAgdXNlZEJveE51bWJlclVybCA9IHRoaXMuYmFzZVVybCArICdib3hOdW1iZXInO1xuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IGlucHV0TGFuZyh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TGFuZ3VhZ2UodmFsKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IGNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIHRoaXMub25DbGVhcklucHV0KGZvY3VzKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IHZhbGlkYXRpb25NZXNzYWdlT3B0aW9uKG9wdGlvbjoge3ZhbGlkYXRpb25UeXBlOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUsIHRpbWVzdGFtcDogRGF0ZX0pIHtcbiAgICB0aGlzLnNldFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uRnJvbUlucHV0KG9wdGlvbik7XG4gIH1cblxuICBASW5wdXQoKVxuICBkZWZhdWx0TGFuZzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbWluTGV2ZWw6IG51bWJlcjtcbiAgQElucHV0KCkgbm90SW5MaXN0QWxsb3dlZCA9IHRydWU7XG4gIEBJbnB1dCgpIGFkZHJlc3NQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIEBJbnB1dCgpIG1lc3NhZ2VPcHRpb24gPSAnWSc7XG5cbiAgLy8gTE9DQUxJVFlcbiAgQElucHV0KCkgbG9jYWxpdHlVcmwgPSB0aGlzLmJhc2VVcmwgKyAnbG9jYWxpdHknO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uTG9jYWxpdHkgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFMb2NhbGl0eTogc3RyaW5nO1xuICBwb3N0YWxDb2RlTG9jYWxpdHk6IHN0cmluZztcbiAgLy8gbG9jYWxpdHlQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIGxvY2FsaXR5UHJlZmlsbERhdGE6IFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAvLyBTVFJFRVRcbiAgQElucHV0KCkgc3RyZWV0VXJsID0gdGhpcy5iYXNlVXJsICsgJ3N0cmVldCc7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc3Rpb25TdHJlZXQgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhU3RyZWV0OiBzdHJpbmc7XG4gIC8vIHN0cmVldFBhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgc3RyZWV0UHJlZmlsbERhdGE6IFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAvLyBTVFJFRVQgTlVNQkVSXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgQElucHV0KCkgc3RyZWV0TnVtYmVyVXJsID0gdGhpcy5iYXNlVXJsICsgJ3N0cmVldE51bWJlcic7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc3Rpb25TdHJlZXROYiA9IDU7XG4gIEBJbnB1dCgpIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYVN0cmVldE5iOiBzdHJpbmc7XG4gIC8vIHN0cmVldE51bWJlclBhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgc3RyZWV0TnVtYmVyUHJlZmlsbERhdGE6IFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAvLyBCT1ggTlVNQkVSXG4gIEBJbnB1dCgpIGJveE51bWJlclVybCA9IHRoaXMuYmFzZVVybCArICdib3hOdW1iZXInO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uQm94TmIgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFCb3hOYjogc3RyaW5nO1xuICBASW5wdXQoKSBhbGxvd05vVmFsaWRhdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgdmFsaWRhdGVkQnlCYWNrZW5kOiB0cnVlO1xuICBASW5wdXQoKSBudW1iZXJPZkV4Y2VwdGlvbnM6IG51bWJlcjtcbiAgLy8gYm94UGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBib3hOdW1iZXJQcmVmaWxsRGF0YTogUHJlZmlsbERhdGEgPSBudWxsO1xuXG4gIEBJbnB1dCgpIHN1Z2dlc3Rpb25MZXZlbDogU3VnZ2VzdGlvbkxldmVsVHlwZSA9IFN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0QW5kQm94TnVtYmVyO1xuXG4gIGJveE51bWJlcjogc3RyaW5nO1xuICBjb21wbGV0ZUFkZHJlc3M6IHN0cmluZztcbiAgZW1pdHRlZEFkZHJlc3M6IGFueSA9IG51bGw7XG4gIGxvY2FsaXR5OiBzdHJpbmc7XG4gIHBvc3RhbENvZGU6IHN0cmluZztcbiAgc2VsZWN0ZWRBZGRyZXNzOiBhbnk7XG4gIHN0cmVldDogc3RyaW5nO1xuICBzdHJlZXRBZGRyZXNzOiBhbnk7XG4gIHN0cmVldE5hbWVJbnB1dDogc3RyaW5nO1xuICBzdHJlZXROdW1iZXI6IHN0cmluZztcbiAgc3RyZWV0TnVtYmVyQWRkcmVzczogYW55O1xuICBzdHJlZXROdW1iZXJJbnB1dDogc3RyaW5nO1xuICBib3hOdW1iZXJJbnB1dDogc3RyaW5nO1xuICB2YWxpZGF0aW9uTWVzc2FnZToge21lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmd9ID0ge21lc3NhZ2VUeXBlOiBudWxsLCB0cmFuc2xhdGVkTWVzc2FnZTogJyd9O1xuICB2YWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGU6IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZTtcblxuXG4gIEBPdXRwdXQoKSBhZGRyZXNzQ29tcGxldGVFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdmFsaWRhdGlvbk1lc3NhZ2VFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2xlYXJJbnB1dEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB2YWxpZGF0ZWRCeUJhY2tlbmRFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG51bWJlck9mRXhjZXB0aW9uc0V2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblxuICBwcmVmaWxsRGF0YTogUHJlZmlsbERhdGE7XG4gIHByb2Nlc3NpbmdQcmVmaWxsRGF0YSA9IGZhbHNlO1xuXG5cbiAgLy8gUGFzcyB0aGUgQVBJIGtleSBhcyBhIHByb3BlcnR5IG9mIHRoZSBsaWJyYXJ5ICFcbiAgQElucHV0KClcbiAgYXBpS2V5PXRoaXMuZGVmYXVsdEFwaUtleTtcblxuXG4gIC8vIHNldCB0aGUgd2lkZ2V0IGFzIHJlYWRvbmx5IGFuZCBhZGQgTklTOSBxdWVyeSBwYXJhbWV0ZXJcbiAgQElucHV0KClcbiAgaXNSZWFkb25seT1mYWxzZTtcblxuICBASW5wdXQoKVxuICBuaXM5SW5SZXNwb25zZT1mYWxzZTtcblxuICBASW5wdXQoKVxuICBidXNpbmVzc05hbWVJblJlc3BvbnNlPWZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIG5pczlTZXJ2aWNlVVJMPScnO1xuXG4gIGlzQ29tcG9uZW50UmVhZHkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5pczlTZXJ2aWNlOiBOaXM5U2VydmljZSxcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWRcbiAge1xuICAgIGNvbnNvbGUuaW5mbygnbGliIHZlcnNpb24gaXM6JywgTElCX1ZFUlNJT04pO1xuICAgIC8vY29uc29sZS53YXJuKCdsaWIgLSBuZ09uSW5pdCcpO1xuXG4gICAgdGhpcy5uaXM5U2VydmljZS5zZXROaXM5U2VydmljZVVSTCh0aGlzLm5pczlTZXJ2aWNlVVJMKTtcblxuICAgIGNvbnN0IGFwaUtleSA9IHRoaXMuaXNWYWxpZERhdGEodGhpcy5hcGlLZXkpID8gdGhpcy5hcGlLZXkgOiB0aGlzLmRlZmF1bHRBcGlLZXk7XG4gICAgdGhpcy5odHRwU2VydmljZS5zZXRBcGlLZXkoIGFwaUtleSApO1xuICAgIHRoaXMuaHR0cFNlcnZpY2Uuc2V0U2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpO1xuXG4gICAgaWYoIHRoaXMuaXNWYWxpZERhdGEodGhpcy5sb2NhbGl0eVVybCkgKSB0aGlzLnVzZWRMb2NhbGl0eVVybD10aGlzLmxvY2FsaXR5VXJsO1xuICAgIGlmKCB0aGlzLmlzVmFsaWREYXRhKHRoaXMuc3RyZWV0VXJsKSApIHRoaXMudXNlZFN0cmVldFVybD10aGlzLnN0cmVldFVybDtcbiAgICBpZiggdGhpcy5pc1ZhbGlkRGF0YSh0aGlzLnN0cmVldE51bWJlclVybCkgKSB0aGlzLnVzZWRTdHJlZXROdW1iZXJVcmw9dGhpcy5zdHJlZXROdW1iZXJVcmw7XG4gICAgaWYoIHRoaXMuaXNWYWxpZERhdGEodGhpcy5ib3hOdW1iZXJVcmwpICkgdGhpcy51c2VkQm94TnVtYmVyVXJsPXRoaXMuYm94TnVtYmVyVXJsO1xuXG4gICAgaWYgKHRoaXMuYWRkcmVzc1BhcmFtcylcbiAgICB7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmlzQ29tcG9uZW50UmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgaXNWYWxpZERhdGEoIHN0cjogc3RyaW5nKTogYm9vbGVhblxuICB7XG4gICAgcmV0dXJuIHN0ciE9PXVuZGVmaW5lZCAmJiBzdHIhPT1udWxsICYmIHN0ci5sZW5ndGg+MDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KClcbiAge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbilcbiAgICB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpXG4gIHtcbiAgICBpZiAoY2hhbmdlcylcbiAgICB7XG4gICAgICAvLyBjb2RlIGZvciB0cmFjaW5nXG4gICAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnRcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5UGFyYW1ldGVyc0NoYW5nZXNUb0NvbnNvbGUoY2hhbmdlcyk7XG4gICAgICB9XG5cblxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2FwaUtleScpICYmICFjaGFuZ2VzWydhcGlLZXknXS5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBhcGlLZXkgPSB0aGlzLmFwaUtleSE9PW51bGwgJiYgdGhpcy5hcGlLZXkhPT11bmRlZmluZWQgJiYgdGhpcy5hcGlLZXkubGVuZ3RoPjBcbiAgICAgICAgICAgID8gdGhpcy5hcGlLZXlcbiAgICAgICAgICAgIDogdGhpcy5kZWZhdWx0QXBpS2V5O1xuICAgICAgICB0aGlzLmh0dHBTZXJ2aWNlLnNldEFwaUtleSggYXBpS2V5ICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdsb2NhbGl0eVVybCcpICYmICFjaGFuZ2VzWydsb2NhbGl0eVVybCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsaXR5VXJsID0gdGhpcy5sb2NhbGl0eVVybCE9PW51bGwgJiYgdGhpcy5sb2NhbGl0eVVybCE9PXVuZGVmaW5lZCAmJiB0aGlzLmxvY2FsaXR5VXJsLmxlbmd0aD4wXG4gICAgICAgICAgICA/IHRoaXMubG9jYWxpdHlVcmxcbiAgICAgICAgICAgIDogdGhpcy5iYXNlVXJsICsgJ2xvY2FsaXR5JztcbiAgICAgICAgdGhpcy51c2VkTG9jYWxpdHlVcmw9bG9jYWxpdHlVcmw7XG4gICAgICAgIGNvbnNvbGUubG9nKCduZ09uQ2hhbmdlcyAtIGxvY2FsaXR5VXJsOiAnLCBsb2NhbGl0eVVybCk7XG4gICAgICAgIHRoaXMuc2V0TnVtYmVyT2ZFeGNlcHRpb25zKDApO1xuICAgICAgICB0aGlzLnNldFZhbGlkYXRlZEJ5QmFja2VuZCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdHJlZXRVcmwnKSAmJiAhY2hhbmdlc1snc3RyZWV0VXJsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgY29uc3Qgc3RyZWV0VXJsID0gdGhpcy5zdHJlZXRVcmwhPT1udWxsICYmIHRoaXMuc3RyZWV0VXJsIT09dW5kZWZpbmVkICYmIHRoaXMuc3RyZWV0VXJsLmxlbmd0aD4wXG4gICAgICAgICAgICA/IHRoaXMuc3RyZWV0VXJsXG4gICAgICAgICAgICA6IHRoaXMuYmFzZVVybCArICdzdHJlZXQnO1xuICAgICAgICB0aGlzLnVzZWRTdHJlZXRVcmw9c3RyZWV0VXJsO1xuICAgICAgICB0aGlzLnNldE51bWJlck9mRXhjZXB0aW9ucygwKTtcbiAgICAgICAgdGhpcy5zZXRWYWxpZGF0ZWRCeUJhY2tlbmQodHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TnVtYmVyVXJsJykgJiYgIWNoYW5nZXMuc3RyZWV0TnVtYmVyVXJsLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHN0cmVldE51bWJlclVybCA9IHRoaXMuc3RyZWV0TnVtYmVyVXJsIT09bnVsbCAmJiB0aGlzLnN0cmVldE51bWJlclVybCE9PXVuZGVmaW5lZCAmJiB0aGlzLnN0cmVldE51bWJlclVybC5sZW5ndGg+MFxuICAgICAgICAgICAgPyB0aGlzLnN0cmVldE51bWJlclVybFxuICAgICAgICAgICAgOiB0aGlzLmJhc2VVcmwgKyAnc3RyZWV0TnVtYmVyJztcbiAgICAgICAgdGhpcy51c2VkU3RyZWV0TnVtYmVyVXJsPXN0cmVldE51bWJlclVybDtcbiAgICAgICAgdGhpcy5zZXROdW1iZXJPZkV4Y2VwdGlvbnMoMCk7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdGVkQnlCYWNrZW5kKHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2JveE51bWJlclVybCcpICYmICFjaGFuZ2VzLmJveE51bWJlclVybC5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBib3hOdW1iZXJVcmwgPSB0aGlzLmJveE51bWJlclVybCE9PW51bGwgJiYgdGhpcy5ib3hOdW1iZXJVcmwhPT11bmRlZmluZWQgJiYgdGhpcy5ib3hOdW1iZXJVcmwubGVuZ3RoPjBcbiAgICAgICAgICAgID8gdGhpcy5ib3hOdW1iZXJVcmxcbiAgICAgICAgICAgIDogdGhpcy5iYXNlVXJsICsgJ2JveE51bWJlcic7XG4gICAgICAgIHRoaXMudXNlZEJveE51bWJlclVybD1ib3hOdW1iZXJVcmw7XG4gICAgICAgIHRoaXMuc2V0TnVtYmVyT2ZFeGNlcHRpb25zKDApO1xuICAgICAgICB0aGlzLnNldFZhbGlkYXRlZEJ5QmFja2VuZCh0cnVlKTtcbiAgICAgIH1cblxuXG5cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdhZGRyZXNzUGFyYW1zJykgJiYgIWNoYW5nZXNbJ2FkZHJlc3NQYXJhbXMnXS5maXJzdENoYW5nZSkge1xuICAgICAgLy8gaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2FkZHJlc3NQYXJhbXMnKSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmdQcmVmaWxsRGF0YSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW50ZXJQcmVmaWxsTW9kZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IG51bGw7XG4gICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgLypcbiAgICAgICAgaWYgKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSAhPT0gbnVsbCAmJiB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuTE9DQUxJVFkpO1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjp3aWRnZXQgZGV0ZWN0ZWQgcHJlZmlsbGluZycsIHRoaXMuYWRkcmVzc1BhcmFtcyk7IH1cbiAgICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gLyo0Ki8gQUREUkVTU0xFVkVMLkxPQ0FMSVRZO1xuICAgICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSB0aGlzLmFkZHJlc3NQYXJhbXM7IC8vIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICAgICAgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbmV3IFByZWZpbGxEYXRhKHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhLCB0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6Y2hlY2tpbmcgbG9jYWxpdHkgbWF0Y2guLi4gJywgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhKTsgfVxuICAgICAgfVxuXG4gICAgICAvLyBzdWdnZXN0aW9uIGxldmVsXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc3VnZ2VzdGlvbkxldmVsJylcbiAgICAgICAgICAvKiYmICFjaGFuZ2VzLnN1Z2dlc3Rpb25MZXZlbC5maXJzdENoYW5nZVxuICAgICAgICAgICYmICFjaGFuZ2VzLmhhc093blByb3BlcnR5KCdwcmVmaWxsRGF0YScpICYmICEgdGhpcy5wcmVmaWxsaW5nKi8gKSB7XG4gICAgICAgICAgICAvKlxuICAgICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICAgIC8vIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICAgIGNvbnNvbGUud2Fybignc3RyZWV0IG51bWJlciAtIG5nT25jaGFuZ2VzIC0gc3RyZWV0TmFtZSBjaGFuZ2VzIGRldGVjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnN0cmVldE5hbWUuY3VycmVudFZhbHVlID09PSAnJykge1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICAgICovXG5cbiAgICAgICAgY29uc3Qgc2wgPSBOdW1iZXIoY2hhbmdlc1snc3VnZ2VzdGlvbkxldmVsJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgc3dpdGNoKHNsKVxuICAgICAgICB7XG4gICAgICAgICAgY2FzZSAwOiB0aGlzLnN1Z2dlc3Rpb25MZXZlbCA9IFN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZTsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOiB0aGlzLnN1Z2dlc3Rpb25MZXZlbCA9IFN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyOyBicmVhaztcbiAgICAgICAgICBjYXNlIDI6IHRoaXMuc3VnZ2VzdGlvbkxldmVsID0gU3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXRBbmRCb3hOdW1iZXI7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlJylcbiAgICAgICAgICAmJiAhY2hhbmdlc1snc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSddLmZpcnN0Q2hhbmdlICApIHtcblxuICAgICAgICBjb25zdCBzZG0yYyA9IGNoYW5nZXNbJ3Nob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgIGlmKHNkbTJjKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5odHRwU2VydmljZS5zZXRTaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKHNkbTJjKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbnVtYmVyT2ZFeGNlcHRpb25zJykgKSB7XG4gICAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zID0gY2hhbmdlc1snbnVtYmVyT2ZFeGNlcHRpb25zJ10uY3VycmVudFZhbHVlO1xuXG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmFsaWRhdGVkQnlCYWNrZW5kJykgKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kID0gY2hhbmdlc1sndmFsaWRhdGVkQnlCYWNrZW5kJ10uY3VycmVudFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRpc3BsYXlQYXJhbWV0ZXJzQ2hhbmdlc1RvQ29uc29sZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKVxuICB7XG4gICAgLy8gbWVzc2FnZU9wdGlvblxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtZXNzYWdlT3B0aW9uJykgJiYgIWNoYW5nZXNbJ21lc3NhZ2VPcHRpb24nXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snbWVzc2FnZU9wdGlvbiddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1lc3NhZ2VPcHRpb24nLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIG1heFN1Z2dlc3Rpb25Mb2NhbGl0eVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtYXhTdWdnZXN0aW9uTG9jYWxpdHknKSAmJiAhY2hhbmdlc1snbWF4U3VnZ2VzdGlvbkxvY2FsaXR5J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ21heFN1Z2dlc3Rpb25Mb2NhbGl0eSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1heFN1Z2dlc3Rpb25Mb2NhbGl0eScsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudCcpICYmICFjaGFuZ2VzWyd2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1sndmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50J10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBzb3J0Q3JpdGVyaWFMb2NhbGl0eVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFMb2NhbGl0eScpICYmICFjaGFuZ2VzWydzb3J0Q3JpdGVyaWFMb2NhbGl0eSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydzb3J0Q3JpdGVyaWFMb2NhbGl0eSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYUxvY2FsaXR5Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uU3RyZWV0XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21heFN1Z2dlc3Rpb25TdHJlZXQnKSAmJiAhY2hhbmdlc1snbWF4U3VnZ2VzdGlvblN0cmVldCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydtYXhTdWdnZXN0aW9uU3RyZWV0J10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWF4U3VnZ2VzdGlvblN0cmVldCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudCcpICYmICFjaGFuZ2VzWyd2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gc29ydENyaXRlcmlhU3RyZWV0XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NvcnRDcml0ZXJpYVN0cmVldCcpICYmICFjaGFuZ2VzWydzb3J0Q3JpdGVyaWFTdHJlZXQnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snc29ydENyaXRlcmlhU3RyZWV0J10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc29ydENyaXRlcmlhU3RyZWV0Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uU3RyZWV0TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWF4U3VnZ2VzdGlvblN0cmVldE5iJykgJiYgIWNoYW5nZXNbJ21heFN1Z2dlc3Rpb25TdHJlZXROYiddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydtYXhTdWdnZXN0aW9uU3RyZWV0TmInXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtYXhTdWdnZXN0aW9uU3RyZWV0TmInLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50JykgJiYgIWNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWyd2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyBzb3J0Q3JpdGVyaWFTdHJlZXROYlxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFTdHJlZXROYicpICYmICFjaGFuZ2VzWydzb3J0Q3JpdGVyaWFTdHJlZXROYiddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydzb3J0Q3JpdGVyaWFTdHJlZXROYiddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYVN0cmVldE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uQm94TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWF4U3VnZ2VzdGlvbkJveE5iJykgJiYgIWNoYW5nZXNbJ21heFN1Z2dlc3Rpb25Cb3hOYiddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydtYXhTdWdnZXN0aW9uQm94TmInXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtYXhTdWdnZXN0aW9uQm94TmInLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50JykgJiYgIWNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWyd2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSB2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyBzb3J0Q3JpdGVyaWFCb3hOYlxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFCb3hOYicpICYmICFjaGFuZ2VzWydzb3J0Q3JpdGVyaWFCb3hOYiddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydzb3J0Q3JpdGVyaWFCb3hOYiddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYUJveE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBhcGlLZXlcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYXBpS2V5JykgJiYgIWNoYW5nZXNbJ2FwaUtleSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydhcGlLZXknXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBhcGlLZXknLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIGxvY2FsaXR5VXJsXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2xvY2FsaXR5VXJsJykgJiYgIWNoYW5nZXNbJ2xvY2FsaXR5VXJsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ2xvY2FsaXR5VXJsJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbG9jYWxpdHlVcmwnLCB3Y0NoYW5nZXMpO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gY3VycmVudCBsb2NhbGl0eVVybCcsIHRoaXMubG9jYWxpdHlVcmwpO1xuICAgIH1cblxuICAgIC8vIHN0cmVldFVybFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdHJlZXRVcmwnKSAmJiAhY2hhbmdlc1snc3RyZWV0VXJsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3N0cmVldFVybCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHN0cmVldFVybCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gc3RyZWV0TnVtYmVyVXJsXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N0cmVldE51bWJlclVybCcpICYmICFjaGFuZ2VzWydzdHJlZXROdW1iZXJVcmwnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snc3RyZWV0TnVtYmVyVXJsJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc3RyZWV0TnVtYmVyVXJsJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBib3hOdW1iZXJVcmxcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyVXJsJykgJiYgIWNoYW5nZXNbJ2JveE51bWJlclVybCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydib3hOdW1iZXJVcmwnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBib3hOdW1iZXJVcmwnLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIHN1Z2dlc3Rpb25MZXZlbFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdWdnZXN0aW9uTGV2ZWwnKSAmJiAhY2hhbmdlc1snc3VnZ2VzdGlvbkxldmVsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3N1Z2dlc3Rpb25MZXZlbCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHN1Z2dlc3Rpb25MZXZlbCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJXaWRnZXQoKSB7XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuY2xlYXJXaWRnZXQoKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJXaWRnZXQoKTtcbiAgfVxuXG4gIGNoYW5nZU1pbkxldmVsKG1pbkxldmVsOiBudW1iZXIpIHtcbiAgICB0aGlzLm1pbkxldmVsID0gbWluTGV2ZWw7XG4gIH1cblxuICAvLyBDYWxsZWQgYnkgdGhlIHNwZWNpZmljIGJ1dHRvbnMgaW4gdGhlIGFwcFxuICBvbkNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0JywgZm9jdXMpOyB9XG5cbiAgICAvKlxuICAgIGlmIChmb2N1cyA9PT0gbnVsbCB8fCBmb2N1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSovXG5cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuXG4gICAgY29uc3Qgc2V0Rm9jdXMgPSAoZm9jdXMgPT09IG51bGwgfHwgZm9jdXMgPT09IHVuZGVmaW5lZCkgPyBmYWxzZSA6IGZvY3VzLnNldEZvY3VzO1xuXG4gICAgc3dpdGNoICh0aGlzLm1pbkxldmVsKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdCT1hfTlVNQkVSJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdTVFJFRVRfTlVNQkVSJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnU1RSRUVUJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gQm94IG51bWJlclxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTdHJlZXQgbmFtZVxuICAgICAgICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gTG9jYWxpdHlcbiAgICAgICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnTE9DQUxJVFknKTtcbiAgICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBnZXRCb3hQcmVmaXgoKTogc3RyaW5nIHtcbiAgICBsZXQgcHJlZml4ID0gJyc7XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgJ2ZyJzpcbiAgICAgICAgcHJlZml4ID0gJ0JURSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbmwnOlxuICAgICAgICAgIHByZWZpeCA9ICdCVVMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcHJlZml4ID0gJ0JPWCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgbm90aWZ5QWRkcmVzc0NvbXBsZXRlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdub3RpZnkgZm9yIGFkZHJlc3MgY29tcGxldGUnKTtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKVxuICAgIHtcbiAgICAgIGNvbnNvbGUubG9nKCdub3RpZnlBZGRyZXNzQ29tcGxldGUnLCB0aGlzLnNlbGVjdGVkQWRkcmVzcywgJ25pczlJblJlc3BvbnNlOicrdGhpcy5uaXM5SW5SZXNwb25zZSwgdHlwZW9mIHRoaXMubmlzOUluUmVzcG9uc2UpO1xuICAgIH1cblxuICAgIC8vIGlmKCAodGhpcy5uaXM5SW5SZXNwb25zZSA9PT0gdHJ1ZSB8fCAnJyt0aGlzLm5pczlJblJlc3BvbnNlID09PSAndHJ1ZScpXG5cbiAgICAvLyAgICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzICE9PXVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkQWRkcmVzcyE9PW51bGxcbiAgICAvLyAgICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhhc093blByb3BlcnR5KCdsYXRpdHVkZScpICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhhc093blByb3BlcnR5KCdsb25naXR1ZGUnKSlcbiAgICAvLyB7XG4gICAgLy8gICBjb25zdCBsYXRpdHVkZSA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmxhdGl0dWRlO1xuICAgIC8vICAgY29uc3QgbG9uZ2l0dWRlID0gdGhpcy5zZWxlY3RlZEFkZHJlc3MubG9uZ2l0dWRlO1xuICAgIC8vICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgY29uc29sZS5sb2coJ2NhbGxpbmcgbmlzOSBzZXJ2aWNlIHRvIGdldCBuaXM5IGRhdGEgKDEpOicsIGxvbmdpdHVkZSwgbGF0aXR1ZGUpO1xuXG4gICAgLy8gICB0aGlzLm5pczlTZXJ2aWNlLmRldGVybWluZU5pczlEYXRhKGxvbmdpdHVkZSwgbGF0aXR1ZGUpXG4gICAgLy8gICAuc3Vic2NyaWJlKFxuICAgIC8vICAgICBkYXRhID0+IHtcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZygnbmlzIERBVEE6JywgZGF0YSk7XG4gICAgLy8gICAgICAgLypcbiAgICAvLyAgICAgICBuaXMgREFUQTpcbiAgICAvLyAgICAgICB7U3RhdHVzOiAnc3VjY2VzcycsIGRhdGE6IEFycmF5KDEpfVxuICAgIC8vICAgICAgIFN0YXR1czogXCJzdWNjZXNzXCJcbiAgICAvLyAgICAgICBkYXRhOiBbJzI1MTEyQTIxLSddXG4gICAgLy8gICAgICAgKi9cbiAgICAvLyAgICAgICBpZihkYXRhIT09dW5kZWZpbmVkICYmIGRhdGEgIT09bnVsbCAmJiBkYXRhLmhhc093blByb3BlcnR5KCdTdGF0dXMnKSAmJiBkYXRhLlN0YXR1cz09PSdzdWNjZXNzJylcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBjb25zdCBuaXM5RGF0YSA9IGRhdGEuZGF0YTtcbiAgICAvLyAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkobmlzOURhdGEpICYmIG5pczlEYXRhLmxlbmd0aCA9PT0gMSlcbiAgICAvLyAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MubmlzOSA9IG5pczlEYXRhWzBdO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgIH1cblxuICAgIC8vICAgICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQodGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgIC8vICAgICAgIHRoaXMuZW1pdHRlZEFkZHJlc3MgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcztcbiAgICAvLyAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eSh0aGlzLmVtaXR0ZWRBZGRyZXNzKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgKTtcbiAgICAvLyB9XG4gICAgLy8gZWxzZVxuICAgIC8vIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIGNvbnNvbGUubG9nKCdOT1QgY2FsbGluZyBuaXM5IHNlcnZpY2UgdG8gZ2V0IG5pczkgZGF0YSAoMSknKTtcbiAgICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQodGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgICAgdGhpcy5lbWl0dGVkQWRkcmVzcyA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkodGhpcy5lbWl0dGVkQWRkcmVzcyk7XG4gICAgLy8gfVxuXG4gIH1cblxuICBvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6Om9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcicsIGV2ZW50KTsgfVxuXG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICBsZXQgbmV4dEFkZHJlc3MgPSB0aGlzLnNlbGVjdGVkQWRkcmVzczsgLy8gdGhpcy5lbWl0dGVkQWRkcmVzcztcbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuTE9DQUxJVFkpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgIHtcbiAgICAgICAgaWYodGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0IT0nJylcbiAgICAgICAge1xuICAgICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICBcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICB7XG4gICAgICAgIGlmKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCE9JycpXG4gICAgICAgIHtcbiAgICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gU3RyZWV0IG5hbWVcbiAgICAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAge1xuICAgICAgICBpZih0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0IT0nJylcbiAgICAgICAge1xuICAgICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5TVFJFRVQpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIExvY2FsaXR5XG4gICAgICAgdGhpcy5sb2NhbGl0eSA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgIG5leHRBZGRyZXNzID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuU1RSRUVUKVxuICAgIHtcbiAgICAgIC8vIEJveCBudW1iZXJcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gU3RyZWV0IG51bWJlclxuICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbmFtZVxuICAgICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIG5leHRBZGRyZXNzID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUilcbiAgICB7XG4gICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXROYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEF0dGVudGlvbjogaWYgbm90LWluLWxpc3QgZG9uJ3QgcmVzZXQgdGhlIGFkZHJlc3MsIGp1c3QgbW9kaWZ5IGl0XG4gICAgICBjb25zdCBhZGRyZXNzSXNOb3RJbkxpc3RcbiAgICAgICAgPSBuZXh0QWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmICBuZXh0QWRkcmVzcyAhPT0gbnVsbFxuICAgICAgICAgICYmIG5leHRBZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIG5leHRBZGRyZXNzWydub3QtaW4tbGlzdCddID09PSB0cnVlXG4gICAgICAgID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICAgIC8qXG4gICAgICBpZiAoYWRkcmVzc0lzTm90SW5MaXN0KVxuICAgICAge1xuICAgICAgICBkZWxldGUgbmV4dEFkZHJlc3MuYm94TnVtYmVyO1xuICAgICAgICBuZXh0QWRkcmVzcy5pc0NvbXBsZXRlTm90aWZpY2F0aW9uRG9uZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzICE9PSBudWxsIClcbiAgICAgICAge1xuICAgICAgICAgIGNvbnNvbGUud2FybigncmVzZXQgYm94IG9uIG5vdC1pbi1saXN0JywgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzKTtcblxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIG5leHRBZGRyZXNzID0gbnVsbDtcbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIG5leHRBZGRyZXNzID0gdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzICE9PSBudWxsID8gdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzIDogbnVsbDtcbiAgICAgIC8qXG4gICAgICBjb25zdCBhZGRyZXNzSXNOb3RJbkxpc3RcbiAgICAgICAgPSBuZXh0QWRkcmVzcyAhPT0gbnVsbCAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBuZXh0QWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZVxuICAgICAgICA/IHRydWUgOiBmYWxzZTtcbiAgICAgICovXG4gICAgICBjb25zdCBhZGRyZXNzSXNDb21wbGV0ZVxuICAgICAgICA9IG5leHRBZGRyZXNzICE9PSB1bmRlZmluZWQgJiYgbmV4dEFkZHJlc3MgIT09IG51bGxcbiAgICAgICAgICAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIG5leHRBZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gYWRkcmVzc0lzQ29tcGxldGU7XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoZXZlbnQpO1xuXG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXInLFxuICAgICAgJ2VtaXR0ZWQgYWRkcmVzczonK0pTT04uc3RyaW5naWZ5KHRoaXMuZW1pdHRlZEFkZHJlc3MpLCAnbmV4dEFkZHJlc3M6JytKU09OLnN0cmluZ2lmeShuZXh0QWRkcmVzcykgKTsgfVxuXG4gICAgaWYgKHRoaXMuZW1pdHRlZEFkZHJlc3MgIT09IG51bGwgKSB7XG4gICAgICBpZihuZXh0QWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmIG5leHRBZGRyZXNzICE9PSBudWxsICYmIG5leHRBZGRyZXNzLmhhc093blByb3BlcnR5KCdsYXRpdHVkZScpICYmIG5leHRBZGRyZXNzLmhhc093blByb3BlcnR5KCdsb25naXR1ZGUnKSlcbiAgICAgIHtcbiAgICAgICAgY29uc3QgbGF0aXR1ZGUgPSBuZXh0QWRkcmVzcy5sYXRpdHVkZTtcbiAgICAgICAgY29uc3QgbG9uZ2l0dWRlID0gbmV4dEFkZHJlc3MubG9uZ2l0dWRlO1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSBjb25zb2xlLmxvZygnY2FsbGluZyBuaXM5IHNlcnZpY2UgdG8gZ2V0IG5pczkgZGF0YSAoMiknLCBsb25naXR1ZGUsIGxhdGl0dWRlKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgY29uc29sZS5sb2coJ05PVCBjYWxsaW5nIG5pczkgc2VydmljZSB0byBnZXQgbmlzOSBkYXRhICgyKScpO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRyZXNzQ29tcGxldGVFdmVudEVtaXR0ZXIuZW1pdChuZXh0QWRkcmVzcyk7XG4gICAgICB0aGlzLmVtaXR0ZWRBZGRyZXNzID0gbmV4dEFkZHJlc3M7XG4gICAgfVxuXG5cbiAgICAvLyBna2FcbiAgICAvKlxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5MT0NBTElUWSlcbiAgICB7XG4gICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkxPQ0FMSVRZO1xuICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMubG9jYWxpdHkgPSAnJztcbiAgICAgIHRoaXMucG9zdGFsQ29kZSA9ICcnO1xuICAgICAgdGhpcy5zdHJlZXQgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmxvY2FsaXR5ID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVClcbiAgICB7XG4gICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVDtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMuc3RyZWV0ID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpXG4gICAge1xuICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSO1xuICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKVxuICAgIHtcbiAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBudWxsO1xuICAgICAgLy8gdGhpcy5jbGVhcklucHV0KGZvY3VzOiB7c2V0Rm9jdXM6IGJvb2xlYW4sIHRpbWVzdGFtcDogRGF0ZX0pO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgICovXG4gIH1cblxuICByZXNldExvY2FsaXR5KGV2ZW50KSB7IFxuICAgIHRoaXMucG9zdGFsQ29kZSA9ICcnO1xuICAgIHRoaXMubG9jYWxpdHkgPSAnJztcbiAgICBjb25zdCBzdHJlZXQgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcz8uaGFzT3duUHJvcGVydHkoJ3N0cmVldE5hbWUnKTtcbiAgICBjb25zdCBob3VzZSA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzPy5oYXNPd25Qcm9wZXJ0eSgnaG91c2VOdW1iZXInKTtcbiAgICBjb25zdCBib3ggPSB0aGlzLnNlbGVjdGVkQWRkcmVzcz8uaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpO1xuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgaWYoZXZlbnQpXG4gICAgeyBcbiAgICBpZihzdHJlZXQgPT0gdHJ1ZSlcbiAgICAgIHtcbiAgICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5TVFJFRVQpO1xuICAgICAgfVxuICAgIGlmKGhvdXNlID09IHRydWUpXG4gICAgICB7XG4gICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICB9XG4gICAgaWYoYm94ID09IHRydWUpXG4gICAgICB7XG4gICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmKCFldmVudClcbiAgICAgIHsgXG4gICAgICBpZihzdHJlZXQgPT0gdHJ1ZSlcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUKTtcbiAgICAgICAgfVxuICAgICAgaWYoaG91c2UgPT0gdHJ1ZSlcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICAgIH1cbiAgICAgIGlmKGJveCA9PSB0cnVlKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgIH1cbiAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgNCk7XG4gIH1cblxuICByZXNldFN0cmVldChldmVudCkge1xuICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgY29uc3QgaG91c2UgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcz8uaGFzT3duUHJvcGVydHkoJ2hvdXNlTnVtYmVyJyk7XG4gICAgY29uc3QgYm94ID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M/Lmhhc093blByb3BlcnR5KCdib3hOdW1iZXInKTtcbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIGlmKGV2ZW50KVxuICAgICAge1xuICBcbiAgICAgICAgaWYoaG91c2UgPT0gdHJ1ZSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgaWYoYm94ID09IHRydWUpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgICB9XG4gICAgICBpZighZXZlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICBcbiAgICAgICAgICBcbiAgICAgICAgICBpZihob3VzZSA9PSB0cnVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICAgICAgaWYoYm94ID09IHRydWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICAgICAgfVxuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgMyk7XG4gIH1cblxuICByZXNldFN0cmVldE51bWJlcihldmVudCwgcmVzZXRBZGRyZXNzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgLy8gIGNvbnNvbGUubG9nKCdyZXNldCBzdHJlZXQgbnVtbmVyIScsIGV2ZW50KTtcbiAgY29uc3QgYm94ID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M/Lmhhc093blByb3BlcnR5KCdib3hOdW1iZXInKTtcbiAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgaWYoZXZlbnQpXG4gICAge1xuICAgICAgaWYoYm94ID09IHRydWUpXG4gICAgICB7XG4gICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgICB9XG4gICAgICBcbiAgICB9XG4gICAgaWYoIWV2ZW50ICYmIGJveCA9PSB0cnVlKVxuICAgIHtcbiAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgfVxuICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCAyKTtcbiAgICAvLyAkJCA3IHRoaXMuc2V0QWRkcmVzcyhudWxsLCAyKTsgLy8gJCQgPz8/Pz9cbiAgICAvKlxuICAgIGlmIChyZXNldEFkZHJlc3MgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2V0QWRkcmVzcygvICpudWxsKiAvIHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICB9Ki9cbiAgfVxuXG4gIHJlc2V0Qm94TnVtYmVyKGV2ZW50LCByZXNldEFkZHJlc3M6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0IHN0cmVldCBudW1uZXIhJywgZXZlbnQsIHJlc2V0QWRkcmVzcyk7XG4gICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIC8vIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuYm94TnVtYmVyID0gJydcbiAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgMSk7XG4gICAgLy8gaWYoIWV2ZW50KXtcbiAgICAvLyAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdDTEVBUl9CT1hfTlVNQkVSJylcbiAgICAvLyB9XG4gICBcbiAgICAvLyAkJCA3IHRoaXMuc2V0QWRkcmVzcyhudWxsLCAxKTsgLy8gJCQgPz8/Pz9cbiAgICAvKlxuICAgIGlmIChyZXNldEFkZHJlc3MgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2V0QWRkcmVzcygvICpudWxsKiAvIHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICB9Ki9cbiAgfVxuXG4gIGVudGVyUHJlZmlsbE1vZGUoKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OmVudGVyUHJlZmlsbE1vZGUoKScpOyB9XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIgJiYgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYiAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldCAmJiB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5IClcbiAgICB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5wcmVmaWxsaW5nID0gdHJ1ZTtcblxuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQubG9jYWxpdHkgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICB9XG5cbiAgfVxuXG4gIHF1aXRQcmVmaWxsTW9kZSgpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6cXVpdFByZWZpbGxNb2RlKCknKTsgfVxuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIgJiYgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQgJiYgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSApXG4gICAge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc2luZ1ByZWZpbGxEYXRhID0gZmFsc2U7XG4gIH1cblxuICBzZXRBZGRyZXNzKGFkZHJlc3M6IGFueSwgbGV2ZWw/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6c2V0QWRkcmVzcyAtIGFkZHJlc3MgcGFydCwgbGV2ZWwnLCBhZGRyZXNzLCBsZXZlbCk7IH1cblxuICAgIC8qICQkICQkXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRBZGRyZXNzICYmICFhZGRyZXNzKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVzZXQgYWRkcmVzcyEnKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICBpZiAoYWRkcmVzcyA9PT0gbnVsbCB8fCBhZGRyZXNzID09PSB1bmRlZmluZWQgKVxuICAgIHtcbiAgICAgIGNvbnN0IGRvTm90aWZ5ID0gKHRoaXMuc2VsZWN0ZWRBZGRyZXNzICE9PSBudWxsICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzICE9PSB1bmRlZmluZWQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgaWYgKGRvTm90aWZ5KSB7XG4gICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkZHJlc3MpIHtcbiAgICAgIGRlbGV0ZSBhZGRyZXNzLm1lc3NhZ2VzO1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZUFkZHJlc3MoKTtcbiAgICAgIHRoaXMucG9zdGFsQ29kZSA9IGFkZHJlc3MucG9zdGFsQ29kZSA/IGFkZHJlc3MucG9zdGFsQ29kZSA6ICcnO1xuICAgICAgdGhpcy5sb2NhbGl0eSA9IGFkZHJlc3MubG9jYWxpdHlOYW1lID8gYWRkcmVzcy5sb2NhbGl0eU5hbWUgOiAnJztcbiAgICAgIHRoaXMuc3RyZWV0ID0gYWRkcmVzcy5zdHJlZXROYW1lID8gYWRkcmVzcy5zdHJlZXROYW1lIDogJyc7XG4gICAgICAvLyBjb25zdCBub3RJbkxpc3QgPSBhZGRyZXNzWydub3QtaW4tbGlzdCddO1xuICAgICAgLy8gY29uc3QgaXNOb3RJbkxpc3QgPSBub3RJbkxpc3QgIT09IG51bGwgJiYgbm90SW5MaXN0ICE9PSB1bmRlZmluZWQgJiYgbm90SW5MaXN0ID09PSB0cnVlO1xuICAgICAgLypcbiAgICAgIGlmIChhZGRyZXNzLmhvdXNlTnVtYmVyKSB7XG4gICAgICAgIGlmICghYWRkcmVzcy5pc0NvbXBsZXRlIHx8IGlzTm90SW5MaXN0KSB7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyID8gYWRkcmVzcy5ob3VzZU51bWJlciA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghYWRkcmVzcy5ib3hOdW1iZXIpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nIHJlc2V0IHN0cmVldCBudW1iZXIgIScpO1xuICAgICAgICAgICAgaWYgKCAhdGhpcy5wcm9jZXNzaW5nUHJlZmlsbERhdGEgKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzZXRTdHJlZXROdW1iZXIobnVsbCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIGNvbnN0IGFkZHJlc3NJc0NvbXBsZXRlID0gYWRkcmVzcyAhPT0gbnVsbCAmJiBhZGRyZXNzICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdCA9IGFkZHJlc3MgIT09IG51bGwgJiYgYWRkcmVzcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgYWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgc3dpdGNoIChsZXZlbCkge1xuXG4gICAgICAgIC8vIExvY2FsaXR5IC8gTXVuaWNpcGFsaXR5IGFuZCBQT3N0YWxDb2RlXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICAvKlxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgICAvL1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFN0cmVldCBOYW1lXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBudWxsO1xuICAgICAgICAgIC8qXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gU1RSRUVUIE51bWJlclxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROYW1lKGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpOyAvLyAkJFxuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICBpZiAoYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSApXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoYWRkcmVzc0lzTm90SW5MaXN0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gQk9YIE51bWJlclxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIHRoaXMuc2VsZWN0ZWRBZGRyZXNzICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICBpZiAoYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlICkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGVOb3RpZmljYXRpb25Eb25lKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlTm90aWZpY2F0aW9uRG9uZSA9IHRydWU7XG4gICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldEFkZHJlc3NTdHJlZXROdW1iZXIoc3RyZWV0TnVtYmVyOiBzdHJpbmcpIHtcblxuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpXG4gICAge1xuICAgICAgY29uc29sZS5sb2coJ2xpYjo6c2V0QWRkcmVzc1N0cmVldE51bWJlciAtIHN0cmVldG51bWJlcjogJywgc3RyZWV0TnVtYmVyKTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWI6OnNldEFkZHJlc3NTdHJlZXROdW1iZXIgLSBzdHJlZXRBZGRyZXNzOiAnLCB0aGlzLnN0cmVldEFkZHJlc3MpO1xuICAgIH1cbiAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSB0aGlzLnN0cmVldEFkZHJlc3M7XG4gICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSB0aGlzLnN0cmVldEFkZHJlc3M7XG4gICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaG91c2VOdW1iZXIgPSBzdHJlZXROdW1iZXI7XG4gICAgdGhpcy5zZWxlY3RlZEFkZHJlc3Muc3RyZWV0TnVtYmVyID0gc3RyZWV0TnVtYmVyO1xuICAgIC8qXG4gICAgdGhpcy5zdHJlZXROdW1iZXIgPSBzdHJlZXROdW1iZXI7XG4gICAgKi9cbiAgICAvL3RoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgdGhpcy5zdHJlZXROdW1iZXIgPSBzdHJlZXROdW1iZXI7XG4gICAgdGhpcy5ib3hOdW1iZXI9Jyc7XG4gICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuYm94TnVtYmVyPScnO1xuICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQodGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgIHRoaXMuZW1pdHRlZEFkZHJlc3MgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcztcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKVxuICAgIHtcbiAgICAgIGNvbnNvbGUubG9nKCdzZXQgc3RyZWV0IG51bWJlciB2YWx1ZTonLCBzdHJlZXROdW1iZXIsXG4gICAgICAgICd0aGlzLnN0cmVldE51bWJlcjonK3RoaXMuc3RyZWV0TnVtYmVyLFxuICAgICAgICAndGhpcy5taW5MZXZlbDonK3RoaXMubWluTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHNldEFkZHJlc3NCb3hOdW1iZXIoYm94TnVtYmVyOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZygnc2V0IGJveCBudW1iZXIgdmFsdWU6JywgYm94TnVtYmVyKTtcbiAgICAvL3RoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IHRoaXMuc3RyZWV0QWRkcmVzcztcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcztcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIgPSBib3hOdW1iZXI7XG4gICAgdGhpcy5ib3hOdW1iZXIgPSBib3hOdW1iZXI7XG4gICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmc6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA9IGxhbmc7XG4gIH1cblxuICBzZXRWYWxpZGF0aW9uTWVzc2FnZSgvKm1lc3NhZ2U6IHN0cmluZyovbWVzc2FnZToge21lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmd9KSB7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlID09PSBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUuRU1JVCkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZUV2ZW50RW1pdHRlci5lbWl0KG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHNldE51bWJlck9mRXhjZXB0aW9ucyhldmVudCl7XG4gICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnM9ZXZlbnQ7XG4gICAgaWYodGhpcy5udW1iZXJPZkV4Y2VwdGlvbnM+PTMpe1xuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnNFdmVudEVtaXR0ZXIuZW1pdCh0aGlzLm51bWJlck9mRXhjZXB0aW9ucyk7XG4gICAgICB0aGlzLnNldFZhbGlkYXRlZEJ5QmFja2VuZChmYWxzZSlcbiAgICB9XG4gIH1cblxuICBzZXRWYWxpZGF0ZWRCeUJhY2tlbmQoZXZlbnQpe1xuICAgIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kPWV2ZW50O1xuICAgIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kRXZlbnRFbWl0dGVyLmVtaXQodGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpO1xuICB9XG5cbiAgdXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLnBvc3RhbENvZGUgJiYgYWRkcmVzcy5sb2NhbGl0eU5hbWUpIHtcbiAgICAgIHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5ID0gIGFkZHJlc3MucG9zdGFsQ29kZSAgKyAnICcgKyBhZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuc2VhcmNoVGV4dCA9IHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5O1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICYmIGFkZHJlc3Muc3RyZWV0TmFtZSkge1xuICAgICAgdGhpcy5zdHJlZXROYW1lSW5wdXQgPSBhZGRyZXNzLnN0cmVldE5hbWU7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLmhvdXNlTnVtYmVyKSB7XG4gICAgICB0aGlzLnN0cmVldE51bWJlcklucHV0ID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICB9XG4gIH1cbnVwZGF0ZWJveE51bWJlcihhZGRyZXNzKSB7XG4gICAgaWYgKGFkZHJlc3MgJiYgYWRkcmVzcy5ib3hOdW1iZXIpIHtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gYWRkcmVzcy5ib3hOdW1iZXI7XG4gICAgfVxuICB9XG4gIHVwZGF0ZUNvbXBsZXRlQWRkcmVzcygpIHtcbiAgICBsZXQgY29uY2F0U3RyID0gJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLnN0cmVldE5hbWUgPyBgJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5zdHJlZXROYW1lfSBgIDogJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhvdXNlTnVtYmVyID8gYCR7dGhpcy5zZWxlY3RlZEFkZHJlc3MuaG91c2VOdW1iZXJ9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MuYm94TnVtYmVyID8gYCR7dGhpcy5nZXRCb3hQcmVmaXgoKX0gJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXJ9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MucG9zdGFsQ29kZSA/IGAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLnBvc3RhbENvZGV9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MubXVuaWNpcGFsaXR5TmFtZSA/IGAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLm11bmljaXBhbGl0eU5hbWV9IGAgOiAnJztcbiAgICB0aGlzLmNvbXBsZXRlQWRkcmVzcyA9IGNvbmNhdFN0cjtcbiAgfVxuXG4gIHNldFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uRnJvbUlucHV0KG9wdGlvbjoge3ZhbGlkYXRpb25UeXBlOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUsIHRpbWVzdGFtcDogRGF0ZX0pIHtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSA9IG9wdGlvbi52YWxpZGF0aW9uVHlwZTtcbiAgICAvLyBjb25zb2xlLmxvZygnYWRkcmVzc2UgYXV0b2NvbXBsZXRlIC0gdmFsaWRhdGlvbiBtZXNzYWdlIG9wdGlvbicsIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlKTtcbiAgfVxuXG4gIG9uTG9jYWxpdHlQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpsb2NhbGl0eSBwcmVmaWxsIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIC8qXG4gICAgaWYgKGV2ZW50LnBlcmZlY3RNYXRjaClcbiAgICB7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSAvICozKiAvIEFERFJFU1NMRVZFTC5TVFJFRVQ7XG4gICAgICB0aGlzLnN0cmVldFBhcmFtcyA9IHRoaXMuYWRkcmVzc1BhcmFtcztcbiAgICB9XG4gICAgKi9cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGV2ZW50LnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSApXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSAvKjQqLyBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zOyAvLyBhcyBhbnkgYXMgUHJlZmlsbERhdGE7XG4gICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSBuZXcgUHJlZmlsbERhdGEodGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhLCB0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS50cyA9IG5ldyBEYXRlKCk7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgLy8gQmUgc3VyZSB0byBwcm9wYWdhdGUgdGhlIGxvY2FsaXR5TmFtZSBpbiBwbGFjZSBvZiB0aGUgbXVuaWNpcGFsaXR5TmFtZSAhXG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgaWYgKHN0cmVldE5hbWUgPT09IG51bGwgfHwgc3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE5hbWUgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgLy8gdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgaWYgKHN0cmVldE5hbWUgPT09IG51bGwgfHwgc3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE5hbWUgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IHRyaWdnZXIgY2hlY2tpbmcgc3RyZWV0IG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpOyB9XG4gICAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAvLyBjb25zdCBjcEFuZExvY2FsaXR5ID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgKyB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgIGNvbnN0IGNwQW5kTG9jYWxpdHkgPSBkYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSArIGRhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQubG9jYWxpdHkgPSAnJztcbiAgICAgIGlmICggY3BBbmRMb2NhbGl0eSA9PT0gbnVsbCB8fCBjcEFuZExvY2FsaXR5ID09PSB1bmRlZmluZWQgfHwgY3BBbmRMb2NhbGl0eS5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdHJlZXRQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpzdHJlZXQ6IHByZWZpbGwgZXZlbnQgcmVjZWl2ZWQnLCBldmVudCk7IH1cbiAgICAvKlxuICAgIGNvbnN0IGRhdGE6IFByZWZpbGxEYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlIClcbiAgICB7XG4gICAgICBjb25zb2xlLmxvZygnbGliOjpvblN0cmVldFByZWZpbGxFdmVudDogTUFUQ0ggRk9VTkQnLCBkYXRhKTtcbiAgICAgIHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5ID0gJ1RSVUMtTVVDSEUnO1xuICAgICAgdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHkgPSAnVFJVQy1NVUNIRSAyJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuc2VhcmNoVGV4dCA9IHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5O1xuICAgIH1cbiAgICAqL1xuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZXZlbnQucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlIClcbiAgICB7XG4gICAgICAvLyBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50OiBNQVRDSCBGT1VORCcsIGRhdGEpOyB9XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IHRoaXMuYWRkcmVzc1BhcmFtczsgLy8gYXMgYW55IGFzIFByZWZpbGxEYXRhO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbmV3IFByZWZpbGxEYXRhKHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAvLyBPYmplY3QuYXNzaWduKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSwgdGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEudHMgPSBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGlmIChzdHJlZXROdW1iZXIgPT09IG51bGwgfHwgc3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TnVtYmVyID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgICAvLyB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvL3RoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgLypcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGlmIChzdHJlZXROdW1iZXIgPT09IG51bGwgfHwgc3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TnVtYmVyID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogdHJpZ2dlciBjaGVja2luZyBzdHJlZXQgbnVtYmVyIG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpO31cbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLndhcm4oJ2xpYjo6c3RyZWV0OiBwcmVmaWxsIC0gdHJhbnNtaXR0aW5nIHByZWZpbGwgZGF0YSBmb3Igc3RyZWV0TnVtYmVyIDonLCB0aGlzLnByZWZpbGxEYXRhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgY29uc3QgcHJlZmlsbFN0cmVldE5hbWUgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcblxuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50IC0gTk8gTUFUQ0ggQVQgU1RSRUVUIExFVkVMJywgcHJlZmlsbFN0cmVldE5hbWUgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCBwcmVmaWxsU3RyZWV0TmFtZSA9PT0gbnVsbCB8fCBwcmVmaWxsU3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxTdHJlZXROYW1lLmxlbmd0aCA9PT0gMCApXG4gICAgICB7XG4gICAgICAgIC8vIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpvblN0cmVldFByZWZpbGxFdmVudDogTk8gTUFUQ0ggRk9VTkQgLSBzZXQgYWRkcmVzcycsIGRhdGEsIGFkZHJlc3MpOyB9XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuTE9DQUxJVFkpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLnN0cmVldE5hbWUgPSBwcmVmaWxsU3RyZWV0TmFtZTtcbiAgICAgICAgYWRkcmVzcy5zZWFyY2hCYXJTdHJpbmcgPSBwcmVmaWxsU3RyZWV0TmFtZTtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBvblN0cmVldE51bWJlclByZWZpbGxFdmVudF9uZXcoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6c3RyZWV0LW51bWJlciBwcmVmaWxsIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcyk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3NJc0NvbXBsZXRlID0gYWRkcmVzcyAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0ID0gYWRkcmVzcyAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIGFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgIGlmIChhZGRyZXNzSXNDb21wbGV0ZSAmJiAhIGFkZHJlc3NJc05vdEluTGlzdCApXG4gICAgICB7XG4gICAgICAgIC8vIGZvdW5kIGFkZHJlc3MgLSBwZXJmZWN0IG1hdGNoYXQgc3RyZWV0IG51bWJlciBsZXZlbFxuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGFueW1vcmVcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEudHMgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgICAgLy8gY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWVcbiAgICAgICAgLy8gID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzLmxvY2FsaXR5TmFtZTtcblxuICAgICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzcy5sb2NhbGl0eU5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzcy5zdHJlZXROYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyID0gc3VnZ2VzdGlvbkFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuXG4gICAgICAgIGNvbnN0IGJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICAgIGlmICggISBhZGRyZXNzSXNOb3RJbkxpc3QgJiYgKGJveE51bWJlciA9PT0gbnVsbCB8fCBib3hOdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBib3hOdW1iZXIgPT09ICcnKSApXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICAgIC8vIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROYW1lKGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpOyAvLyAkJFxuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICBpZiAoYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSApXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoYWRkcmVzc0lzTm90SW5MaXN0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICBjb25zdCBib3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgICBpZiAoICEgYWRkcmVzc0lzTm90SW5MaXN0ICYmIChib3hOdW1iZXIgPT09IG51bGwgfHwgYm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgYm94TnVtYmVyID09PSAnJykgKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogdHJpZ2dlciBjaGVja2luZyBib3ggbnVtYmVyIG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpOyB9XG4gICAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgKi9cblxuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdsaWI6OnN0cmVldG51bWJlcjogcHJlZmlsbCAtIHRyYW5zbWl0dGluZyBwcmVmaWxsIGRhdGEgZm9yIGJveCA6JywgdGhpcy5wcmVmaWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsU3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuXG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2xpYjo6b25TdHJlZXROdW1iZXJQcmVmaWxsRXZlbnQgLSBOTyBNQVRDSCBBVCBTVFJFRVQtTlVNQkVSIExFVkVMJywgcHJlZmlsbFN0cmVldE51bWJlciApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIHByZWZpbGxTdHJlZXROdW1iZXIgPT09IG51bGwgfHwgcHJlZmlsbFN0cmVldE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxTdHJlZXROdW1iZXIubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLmhvdXNlTnVtYmVyID0gcHJlZmlsbFN0cmVldE51bWJlcjtcbiAgICAgICAgYWRkcmVzcy5zZWFyY2hCYXJTdHJpbmcgPSBwcmVmaWxsU3RyZWV0TnVtYmVyO1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBvblN0cmVldE51bWJlclByZWZpbGxFdmVudChldmVudDogUHJlZmlsbEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpzdHJlZXQgbnVtYmVyIHByZWZpbGwgZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpOyB9XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgIGlmIChkYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZVN0cmVldE51bWJlcihhZGRyZXNzKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcblxuICAgICAgY29uc3QgYWRkcmVzc0lzQ29tcGxldGUgPSBhZGRyZXNzICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICBjb25zdCBhZGRyZXNzSXNOb3RJbkxpc3QgPSBhZGRyZXNzICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgYWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgaWYgKGFkZHJlc3NJc0NvbXBsZXRlICYmICEgYWRkcmVzc0lzTm90SW5MaXN0IClcbiAgICAgIHtcbiAgICAgICAgLy8gZm91bmQgYWRkcmVzcyAtIHBlcmZlY3QgbWF0Y2hhdCBzdHJlZXQgbnVtYmVyIGxldmVsXG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gYW55bW9yZVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS50cyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICAvLyBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZVxuICAgICAgICAvLyAgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3MubG9jYWxpdHlOYW1lO1xuXG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgPSBzdWdnZXN0aW9uQWRkcmVzcy5wb3N0YWxDb2RlO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnN0cmVldE5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXIgPSBzdWdnZXN0aW9uQWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG5cbiAgICAgICAgY29uc3QgYm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKCAhIGFkZHJlc3NJc05vdEluTGlzdCAmJiAoYm94TnVtYmVyID09PSBudWxsIHx8IGJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IGJveE51bWJlciA9PT0gJycpIClcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICAgICAgLy8gdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgfWVsc2VcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE51bWJlcihhZGRyZXNzKTsgXG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIGlmIChhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlIClcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChhZGRyZXNzSXNOb3RJbkxpc3QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICBjb25zdCBib3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgICBpZiAoICEgYWRkcmVzc0lzTm90SW5MaXN0ICYmIChib3hOdW1iZXIgPT09IG51bGwgfHwgYm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgYm94TnVtYmVyID09PSAnJykgKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogdHJpZ2dlciBjaGVja2luZyBib3ggbnVtYmVyIG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpOyB9XG4gICAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgKi9cblxuICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGNvbnN0IHByZWZpbGxTdHJlZXROdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAoIHByZWZpbGxTdHJlZXROdW1iZXIgPT09IG51bGwgfHwgcHJlZmlsbFN0cmVldE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxTdHJlZXROdW1iZXIubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLmhvdXNlTnVtYmVyID0gcHJlZmlsbFN0cmVldE51bWJlcjtcbiAgICAgICAgYWRkcmVzcy5zZWFyY2hCYXJTdHJpbmcgPSBwcmVmaWxsU3RyZWV0TnVtYmVyO1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkJveE51bWJlclByZWZpbGxFdmVudF9uZXcoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogYm94IG51bWJlciBldmVudCByZWNlaXZlZDonLCBldmVudCk7IH1cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsQm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBpZiAoIHByZWZpbGxCb3hOdW1iZXIgPT09IG51bGwgfHwgcHJlZmlsbEJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxCb3hOdW1iZXIubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gYWRkcmVzcy5ib3hOdW1iZXIgPSBwcmVmaWxsQm94TnVtYmVyO1xuICAgICAgICBhZGRyZXNzLnNlYXJjaEJhclN0cmluZyA9IHByZWZpbGxCb3hOdW1iZXI7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gIH1cblxuICBvbkJveE51bWJlclByZWZpbGxFdmVudChldmVudDogUHJlZmlsbEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpwcmVmaWxsOiBib3ggbnVtYmVyIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGNvbnN0IHByZWZpbGxCb3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGlmICggcHJlZmlsbEJveE51bWJlciA9PT0gbnVsbCB8fCBwcmVmaWxsQm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgcHJlZmlsbEJveE51bWJlci5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLmJveE51bWJlciA9IHByZWZpbGxCb3hOdW1iZXI7XG4gICAgICAgIGFkZHJlc3Muc2VhcmNoQmFyU3RyaW5nID0gcHJlZmlsbEJveE51bWJlcjtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgfVxufVxuIiwiXHJcbjxkaXYgY2xhc3M9XCJhYWN3aWRnZXQtYWRkcmVzcy1jb250YWluZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tdmFsaWRhdGlvblwiICpuZ0lmPVwidmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlID09PSAnU0hPVycgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJwYWFjLXZhbGlkYXRlZC1pY29uXCIgKm5nSWY9XCJzZWxlY3RlZEFkZHJlc3MgJiYgdmFsaWRhdGlvbk1lc3NhZ2UhPT1udWxsICYmIHZhbGlkYXRpb25NZXNzYWdlLm1lc3NhZ2VUeXBlIT09bnVsbFwiPjwvZGl2PlxyXG4gICAgICAgIDwhLS0ge3sgdmFsaWRhdGlvbk1lc3NhZ2UgfCB0cmFuc2xhdGUgfX0gLS0+XHJcbiAgICAgICAge3sgdmFsaWRhdGlvbk1lc3NhZ2UudHJhbnNsYXRlZE1lc3NhZ2UgfX1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIGJwLWFhY3dpZGdldC1hdXRvY29tcGxldGUtbG9jYWxpdHkgLS0+XHJcbiAgICAgICAgPGJwLWxvY2FsaXR5IGNsYXNzPVwiYWFjd2lkZ2V0LWFkZHJlc3MtbG9jYWxpdHlcIiAqbmdJZj1cImlzQ29tcG9uZW50UmVhZHlcIlxyXG4gICAgICAgIFtpc1JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRMb2NhbGl0eVVybFwiXHJcbiAgICAgICAgW3ByZWZpbGxEYXRhXT1cImxvY2FsaXR5UHJlZmlsbERhdGFcIlxyXG4gICAgICAgIFtsYWJlbFJlc291cmNlS2V5XT1cIidjb21tb24ubGFiZWwucG9zdGFsQ29kZSdcIlxyXG4gICAgICAgIFtpbnB1dFRleHRdPVwicG9zdGFsQ29kZUxvY2FsaXR5XCJcclxuICAgICAgICBbaW5wdXRMYW5nXT1cInNlbGVjdGVkTGFuZ3VhZ2VcIlxyXG4gICAgICAgIFttZXNzYWdlT3B0aW9uXT1cIm1lc3NhZ2VPcHRpb25cIlxyXG4gICAgICAgIFtzb3J0Q3JpdGVyaWFdPVwic29ydENyaXRlcmlhTG9jYWxpdHlcIlxyXG4gICAgICAgIFttYXhTdWdnZXNpb25Db3VudF09XCJtYXhTdWdnZXN0aW9uTG9jYWxpdHlcIiBcclxuICAgICAgICBbdmlzaWJsZVN1Z2dlc3Rpb25Db3VudF09XCJ2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnRcIlxyXG4gICAgICAgIFthbGxvd05vVmFsaWRhdGlvbl09XCJhbGxvd05vVmFsaWRhdGlvblwiXHJcbiAgICAgICAgW3ZhbGlkYXRlZEJ5QmFja2VuZF09XCJ2YWxpZGF0ZWRCeUJhY2tlbmRcIlxyXG4gICAgICAgIFtudW1iZXJPZkV4Y2VwdGlvbnNdPVwibnVtYmVyT2ZFeGNlcHRpb25zXCJcclxuICAgICAgICAoYWRkcmVzc0NoYW5nZWQpPVwic2V0QWRkcmVzcygkZXZlbnQsIDQpXCJcclxuICAgICAgICAobWVzc2FnZUNoYW5nZWQpPVwic2V0VmFsaWRhdGlvbk1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZvY3VzRXZlbnQpPVwiY2hhbmdlTWluTGV2ZWwoJGV2ZW50KVwiIFxyXG4gICAgICAgICh0ZXh0Q2hhbmdlRXZlbnQpPVwicmVzZXRMb2NhbGl0eSgkZXZlbnQpXCJcclxuICAgICAgICAoY2xlYXJJbnB1dEV2ZW50RW1pdHRlcik9XCJvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHByZWZpbGxFdmVudEVtaXR0ZXIpPVwib25Mb2NhbGl0eVByZWZpbGxFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAobnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcik9XCJzZXROdW1iZXJPZkV4Y2VwdGlvbnMoJGV2ZW50KVwiPjwvYnAtbG9jYWxpdHk+XHJcblxyXG4gICAgICAgIDxicC1zdHJlZXQgY2xhc3M9XCJhYWN3aWRnZXQtYWRkcmVzcy1zdHJlZXRcIlxyXG4gICAgICAgIFtpc1JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRTdHJlZXRVcmxcIlxyXG4gICAgICAgIFtwcmVmaWxsRGF0YV09XCJzdHJlZXRQcmVmaWxsRGF0YVwiXHJcbiAgICAgICAgW2xhYmVsUmVzb3VyY2VLZXldPVwiJ2NvbW1vbi5sYWJlbC5zdHJlZXROYW1lJ1wiXHJcbiAgICAgICAgW2lucHV0VGV4dF09XCJzdHJlZXROYW1lSW5wdXRcIlxyXG4gICAgICAgIFtpbnB1dExhbmddPVwic2VsZWN0ZWRMYW5ndWFnZVwiXHJcbiAgICAgICAgW21lc3NhZ2VPcHRpb25dPVwibWVzc2FnZU9wdGlvblwiXHJcbiAgICAgICAgW3Bvc3RhbENvZGVdPVwicG9zdGFsQ29kZVwiXHJcbiAgICAgICAgW2xvY2FsaXR5XT1cImxvY2FsaXR5XCJcclxuICAgICAgICBbc29ydENyaXRlcmlhXT1cInNvcnRDcml0ZXJpYVN0cmVldFwiIFxyXG4gICAgICAgIFttYXhTdWdnZXNpb25Db3VudF09XCJtYXhTdWdnZXN0aW9uU3RyZWV0XCJcclxuICAgICAgICBbdmlzaWJsZVN1Z2dlc2lvbkNvdW50XT1cInZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnRcIlxyXG4gICAgICAgIFthbGxvd05vVmFsaWRhdGlvbl09XCJhbGxvd05vVmFsaWRhdGlvblwiXHJcbiAgICAgICAgW3ZhbGlkYXRlZEJ5QmFja2VuZF09XCJ2YWxpZGF0ZWRCeUJhY2tlbmRcIlxyXG4gICAgICAgIFtudW1iZXJPZkV4Y2VwdGlvbnNdPVwibnVtYmVyT2ZFeGNlcHRpb25zXCJcclxuICAgICAgICAoYWRkcmVzc0NoYW5nZWQpPVwic2V0QWRkcmVzcygkZXZlbnQsIDMpXCJcclxuICAgICAgICAobWVzc2FnZUNoYW5nZWQpPVwic2V0VmFsaWRhdGlvbk1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZvY3VzRXZlbnQpPVwiY2hhbmdlTWluTGV2ZWwoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRleHRDaGFuZ2VFdmVudCk9XCJyZXNldFN0cmVldCgkZXZlbnQpXCJcclxuICAgICAgICAoY2xlYXJJbnB1dEV2ZW50RW1pdHRlcik9XCJvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHByZWZpbGxFdmVudEVtaXR0ZXIpPVwib25TdHJlZXRQcmVmaWxsRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgKG51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXIpPVwic2V0TnVtYmVyT2ZFeGNlcHRpb25zKCRldmVudClcIj48L2JwLXN0cmVldD5cclxuXHJcbiAgICAgICAgPGJwLXN0cmVldC1udW1iZXIgY2xhc3M9XCJhYWN3aWRnZXQtYWRkcmVzcy1zdHJlZXRudW1iZXJcIlxyXG4gICAgICAgIFtpc1JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRTdHJlZXROdW1iZXJVcmxcIlxyXG4gICAgICAgIFtzZWxlY3RlZEFkZHJlc3NdPVwic3RyZWV0QWRkcmVzc1wiXHJcbiAgICAgICAgW3ByZWZpbGxEYXRhXT1cInN0cmVldE51bWJlclByZWZpbGxEYXRhXCJcclxuICAgICAgICBbbGFiZWxSZXNvdXJjZUtleV09XCInY29tbW9uLmxhYmVsLnN0cmVldE51bWJlcidcIlxyXG4gICAgICAgIFtpbnB1dFRleHRdPVwic3RyZWV0TnVtYmVySW5wdXRcIlxyXG4gICAgICAgIFtpbnB1dExhbmddPVwic2VsZWN0ZWRMYW5ndWFnZVwiXHJcbiAgICAgICAgW21lc3NhZ2VPcHRpb25dPVwibWVzc2FnZU9wdGlvblwiXHJcbiAgICAgICAgW3Bvc3RhbENvZGVdPVwicG9zdGFsQ29kZVwiIFxyXG4gICAgICAgIFtsb2NhbGl0eV09XCJsb2NhbGl0eVwiIFxyXG4gICAgICAgIFtzdHJlZXROYW1lXT1cInN0cmVldFwiXHJcbiAgICAgICAgW3NvcnRDcml0ZXJpYV09XCJzb3J0Q3JpdGVyaWFTdHJlZXROYlwiXHJcbiAgICAgICAgW21heFN1Z2dlc2lvbkNvdW50XT1cIm1heFN1Z2dlc3Rpb25TdHJlZXROYlwiIFxyXG4gICAgICAgIFt2aXNpYmxlU3VnZ2VzaW9uQ291bnRdPVwidmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50XCJcclxuICAgICAgICBbbm90SW5MaXN0QWxsb3dlZF09XCJub3RJbkxpc3RBbGxvd2VkXCJcclxuICAgICAgICBbc3VnZ2VzdGlvbkxldmVsXT1cInN1Z2dlc3Rpb25MZXZlbFwiXHJcbiAgICAgICAgW2FsbG93Tm9WYWxpZGF0aW9uXT1cImFsbG93Tm9WYWxpZGF0aW9uXCJcclxuICAgICAgICBbdmFsaWRhdGVkQnlCYWNrZW5kXT1cInZhbGlkYXRlZEJ5QmFja2VuZFwiXHJcbiAgICAgICAgW251bWJlck9mRXhjZXB0aW9uc109XCJudW1iZXJPZkV4Y2VwdGlvbnNcIlxyXG4gICAgICAgIFtuaXM5SW5SZXNwb25zZV09XCJuaXM5SW5SZXNwb25zZVwiXHJcbiAgICAgICAgW2J1c2luZXNzTmFtZUluUmVzcG9uc2VdPVwiYnVzaW5lc3NOYW1lSW5SZXNwb25zZVwiXHJcbiAgICAgICAgKGFkZHJlc3NDaGFuZ2VkKT1cInNldEFkZHJlc3MoJGV2ZW50LCAyKVwiXHJcbiAgICAgICAgKHN0cmVldE51bWJlckNoYW5nZWQpPVwic2V0QWRkcmVzc1N0cmVldE51bWJlcigkZXZlbnQpXCJcclxuICAgICAgICAobWVzc2FnZUNoYW5nZWQpPVwic2V0VmFsaWRhdGlvbk1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZvY3VzRXZlbnQpPVwiY2hhbmdlTWluTGV2ZWwoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRleHRDaGFuZ2VFdmVudCk9XCJyZXNldFN0cmVldE51bWJlcigkZXZlbnQsIGZhbHNlKVwiXHJcbiAgICAgICAgKGNsZWFySW5wdXRFdmVudEVtaXR0ZXIpPVwib25DbGVhcklucHV0RXZlbnRFbWl0dGVyKCRldmVudClcIlxyXG4gICAgICAgIChwcmVmaWxsRXZlbnRFbWl0dGVyKT1cIm9uU3RyZWV0TnVtYmVyUHJlZmlsbEV2ZW50KCRldmVudClcIlxyXG4gICAgICAgIChudW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyKT1cInNldE51bWJlck9mRXhjZXB0aW9ucygkZXZlbnQpXCI+PC9icC1zdHJlZXQtbnVtYmVyPlxyXG5cclxuICAgICAgICA8YnAtYm94LW51bWJlciBjbGFzcz1cImFhY3dpZGdldC1hZGRyZXNzLWJveG51bWJlclwiXHJcbiAgICAgICAgW2lzUmVhZG9ubHldPVwiaXNSZWFkb25seVwiXHJcbiAgICAgICAgW3Nob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVdPVwic2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZVwiXHJcbiAgICAgICAgW2Jhc2VVcmxdPVwidXNlZEJveE51bWJlclVybFwiXHJcbiAgICAgICAgW3NlbGVjdGVkQWRkcmVzc109XCJzdHJlZXROdW1iZXJBZGRyZXNzXCJcclxuICAgICAgICBbcHJlZmlsbERhdGFdPVwiYm94TnVtYmVyUHJlZmlsbERhdGFcIlxyXG4gICAgICAgIFtsYWJlbFJlc291cmNlS2V5XT1cIidjb21tb24ubGFiZWwuYm94TnVtYmVyJ1wiXHJcbiAgICAgICAgW2lucHV0TGFuZ109XCJzZWxlY3RlZExhbmd1YWdlXCJcclxuICAgICAgICBbbWVzc2FnZU9wdGlvbl09XCJtZXNzYWdlT3B0aW9uXCJcclxuICAgICAgICBbcG9zdGFsQ29kZV09XCJwb3N0YWxDb2RlXCIgXHJcbiAgICAgICAgW2xvY2FsaXR5XT1cImxvY2FsaXR5XCIgXHJcbiAgICAgICAgW3N0cmVldE5hbWVdPVwic3RyZWV0XCIgXHJcbiAgICAgICAgW3N0cmVldE51bWJlcl09XCJzdHJlZXROdW1iZXJcIlxyXG4gICAgICAgIFtzb3J0Q3JpdGVyaWFdPVwic29ydENyaXRlcmlhQm94TmJcIiBcclxuICAgICAgICBbbmlzOUluUmVzcG9uc2VdPVwibmlzOUluUmVzcG9uc2VcIlxyXG4gICAgICAgIFtidXNpbmVzc05hbWVJblJlc3BvbnNlXT1cImJ1c2luZXNzTmFtZUluUmVzcG9uc2VcIlxyXG4gICAgICAgIFttYXhTdWdnZXNpb25Db3VudF09XCJtYXhTdWdnZXN0aW9uQm94TmJcIlxyXG4gICAgICAgIFt2aXNpYmxlU3VnZ2VzaW9uQ291bnRdPVwidmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50XCJcclxuICAgICAgICBbbm90SW5MaXN0QWxsb3dlZF09XCJub3RJbkxpc3RBbGxvd2VkXCJcclxuICAgICAgICBbc3VnZ2VzdGlvbkxldmVsXT1cInN1Z2dlc3Rpb25MZXZlbFwiXHJcbiAgICAgICAgW2FsbG93Tm9WYWxpZGF0aW9uXT1cImFsbG93Tm9WYWxpZGF0aW9uXCJcclxuICAgICAgICBbdmFsaWRhdGVkQnlCYWNrZW5kXT1cInZhbGlkYXRlZEJ5QmFja2VuZFwiXHJcbiAgICAgICAgW251bWJlck9mRXhjZXB0aW9uc109XCJudW1iZXJPZkV4Y2VwdGlvbnNcIlxyXG4gICAgICAgIChtZXNzYWdlQ2hhbmdlZCk9XCJzZXRWYWxpZGF0aW9uTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAoYWRkcmVzc0NoYW5nZWQpPVwic2V0QWRkcmVzcygkZXZlbnQsIDEpXCIgXHJcbiAgICAgICAgKGJveE51bWJlckNoYW5nZWQpPVwic2V0QWRkcmVzc0JveE51bWJlcigkZXZlbnQpXCJcclxuICAgICAgICAoZm9jdXNFdmVudCk9XCJjaGFuZ2VNaW5MZXZlbCgkZXZlbnQpXCJcclxuICAgICAgICAodGV4dENoYW5nZUV2ZW50KT1cInJlc2V0Qm94TnVtYmVyKCRldmVudCwgZmFsc2UpXCJcclxuICAgICAgICAoY2xlYXJJbnB1dEV2ZW50RW1pdHRlcik9XCJvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHByZWZpbGxFdmVudEVtaXR0ZXIpPVwib25Cb3hOdW1iZXJQcmVmaWxsRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgKG51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXIpPVwic2V0TnVtYmVyT2ZFeGNlcHRpb25zKCRldmVudClcIj48L2JwLWJveC1udW1iZXI+XHJcbjwvZGl2PiJdfQ==
|