master-control 0.2.92 → 0.2.94
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/medial-questions/medial-questions.component.mjs +6 -4
- package/esm2022/lib/mob-number/mob-number.component.mjs +1 -1
- package/esm2022/lib/stepper-with-arrow/stepper-with-arrow.component.mjs +4 -12
- package/fesm2022/master-control.mjs +7 -13
- package/fesm2022/master-control.mjs.map +1 -1
- package/master-control-0.2.94.tgz +0 -0
- package/package.json +2 -2
- package/master-control-0.2.92.tgz +0 -0
|
@@ -646,6 +646,7 @@ export class MedialQuestionsComponent {
|
|
|
646
646
|
}
|
|
647
647
|
getField(questionObj) {
|
|
648
648
|
let optionsObj = [];
|
|
649
|
+
let controlStyle = {};
|
|
649
650
|
if (questionObj['domainValues']) {
|
|
650
651
|
questionObj['domainValues'].forEach((singleOptionValue) => {
|
|
651
652
|
optionsObj.push({
|
|
@@ -661,8 +662,8 @@ export class MedialQuestionsComponent {
|
|
|
661
662
|
let configData = !this.checkIfValueIsEmpty(this.field()?.configData)
|
|
662
663
|
? this.field()?.configData
|
|
663
664
|
: {};
|
|
664
|
-
if (
|
|
665
|
-
|
|
665
|
+
if (questionObj['questionType'] === 'RADIO BUTTON' || questionObj['questionType'] === 'ADDMORE') {
|
|
666
|
+
controlStyle = {
|
|
666
667
|
"controlType": "radio",
|
|
667
668
|
"borderColor": "#DADADA",
|
|
668
669
|
"borderWidth": "1px",
|
|
@@ -733,7 +734,7 @@ export class MedialQuestionsComponent {
|
|
|
733
734
|
}
|
|
734
735
|
return {
|
|
735
736
|
configData: configData,
|
|
736
|
-
controlStyle:
|
|
737
|
+
controlStyle: controlStyle,
|
|
737
738
|
controlType: questionObj['questionType'] === 'FREE TEXT'
|
|
738
739
|
? 'text'
|
|
739
740
|
: questionObj['questionType'] === 'RADIO BUTTON' ||
|
|
@@ -766,6 +767,7 @@ export class MedialQuestionsComponent {
|
|
|
766
767
|
};
|
|
767
768
|
}
|
|
768
769
|
removeSubQuestionValues(question) {
|
|
770
|
+
console.log('ssssssssssssssssssssssss', this.questionList);
|
|
769
771
|
if (!this.checkIfValueIsEmpty(this.questionList)) {
|
|
770
772
|
this.questionList.forEach((singleSection) => {
|
|
771
773
|
if (!this.checkIfValueIsEmpty(singleSection['questions'])) {
|
|
@@ -1832,4 +1834,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1832
1834
|
type: ViewChild,
|
|
1833
1835
|
args: ['addressInput']
|
|
1834
1836
|
}] } });
|
|
1835
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUE2QixTQUFTLEVBQXlCLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7O0FBc0J2RixNQUFNLE9BQU8sd0JBQXdCO0lBdUNoQjtJQXRDbkIsc0JBQXNCLEdBQUcsS0FBSyxFQUFPLENBQUM7SUFDWCxZQUFZLENBQWdDO0lBQy9ELFlBQVksQ0FBbUM7SUFDdkQscUJBQXFCLEdBQVEsRUFBRSxDQUFDO0lBQ2hDLHFCQUFxQixHQUFRLEVBQUUsQ0FBQztJQUNoQyxLQUFLLEdBQVEsS0FBSyxDQUFDLFFBQVEsRUFBTyxDQUFDO0lBQ25DLFlBQVksR0FBUSxFQUFFLENBQUM7SUFDdkIsa0JBQWtCLEdBQVEsRUFBRSxDQUFDO0lBQzdCLG1CQUFtQixHQUFRLEVBQUUsQ0FBQztJQUM5QixNQUFNLEdBQThCLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2RSxRQUFRLENBQU07SUFDZCxTQUFTLENBQU07SUFDZixJQUFJLENBQU07SUFDVixNQUFNLEdBQVEsRUFBRSxDQUFDO0lBRWpCLGVBQWUsR0FBUTtRQUNyQiwwQkFBMEIsRUFBRSxNQUFNO0tBQ25DLENBQUM7SUFDRixjQUFjLEdBQVEsRUFBRSxDQUFDO0lBQ3pCLDZCQUE2QixHQUFRLEVBQUUsQ0FBQztJQUN4Qyx3QkFBd0IsR0FBUSxFQUFFLENBQUM7SUFDbkMsMEJBQTBCLEdBQVEsRUFBRSxDQUFDO0lBQ3JDLGNBQWMsR0FBUSxDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDckUsK0JBQStCLEdBQVE7UUFDckM7WUFDRSxLQUFLLEVBQUUsSUFBSTtZQUNYLEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRDtZQUNFLEtBQUssRUFBRSxNQUFNO1lBQ2IsS0FBSyxFQUFFLE1BQU07U0FDZDtLQUNGLENBQUM7SUFDRixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLGtCQUFrQixHQUFVLEVBQUUsQ0FBQztJQUMvQixZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEIsYUFBYSxDQUFNO0lBRW5CLFlBQW1CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsUUFBUSxLQUFJLENBQUM7SUFFYixXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFDRSxPQUFPLENBQUMsd0JBQXdCLENBQUM7WUFDakMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEVBQ3pFLENBQUM7WUFDRCxJQUFJLGFBQWEsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDL0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMzQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsa0JBQWtCLEdBQUc7d0JBQ3hCLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUTt3QkFDbEIsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTO3FCQUNwQixDQUFDO29CQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMvQyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQ3JELElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUNoQztZQUNFLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUNsQixxQkFBcUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7WUFDeEMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUM7U0FDOUQsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtZQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUzQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7U0FDcEIsQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRXRDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFO1lBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixPQUFPLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUNoQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDekIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxLQUFxQztRQUNoRSxNQUFNLFdBQVcsR0FBRztZQUNsQixPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDekMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3pCLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQWU7UUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDekQsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRzt3QkFDWixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTt3QkFDbkIsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7cUJBQ3BCLENBQUM7b0JBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsR0FBRyxDQUNULHVEQUF1RCxHQUFHLE1BQU0sQ0FDakUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFVO1FBQzVCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRWpDLHlCQUF5QjtRQUN6QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNuQyxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDakMsSUFDRSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzFDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0Isd0RBQXdEO1FBQ3hELHdDQUF3QztRQUV4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0QsT0FBTyxDQUFDLG1CQUFtQixDQUN6QjtZQUNFLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO1NBQ25CLEVBQ0QsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDdEIsSUFDRSxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRTtnQkFDcEQsV0FBVyxFQUNYLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3pELFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtvQkFDN0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTO29CQUNyRCxjQUFjLEVBQUUsVUFBVSxDQUFDLHFCQUFxQixDQUFDLGNBQWM7b0JBQy9ELFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztpQkFDcEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBZTtRQUMzQixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUN6QyxlQUFlLENBQ0ksQ0FBQztRQUN0QixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFlBQVksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUM5QyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQ2xELFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQzlCLENBQUM7UUFDRixPQUFPLENBQUMsVUFBVSxDQUNoQjtZQUNFLE9BQU8sRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM1QixNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7U0FDMUMsRUFDRCxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNoQixJQUFJLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFFNUMsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO29CQUVwQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVc7UUFDVCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksR0FBUSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO1FBRXhDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksZUFBZSxHQUFRLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO2dCQUMzRCxlQUFlLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDL0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFDcEQsQ0FBQztnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekQsSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxrQkFBdUIsRUFBRSxFQUFFO3dCQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDbEUsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUN4QyxDQUFDLGNBQW1CLEVBQUUsRUFBRTtnQ0FDdEIsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztvQ0FDbEQsY0FBYyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGNBQWMsQ0FDN0MsY0FBYyxDQUNmLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztnQ0FDMUIsQ0FBQztnQ0FDRCxjQUFjLENBQUMsY0FBYyxDQUFDO29DQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0NBRXJELGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dDQUV4RCxJQUFJLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO29DQUNyRCxjQUFjLENBQUMsYUFBYSxDQUFDO3dDQUMzQixvSEFBb0gsQ0FBQztnQ0FDekgsQ0FBQztnQ0FDRCxvRUFBb0U7Z0NBQ3BFLDRNQUE0TTtnQ0FDNU0sSUFBSTtnQ0FDSixJQUNFLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO29DQUM3QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQ25DLEVBQ0QsQ0FBQztvQ0FDRCxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQ3hDLENBQUMseUJBQThCLEVBQUUsRUFBRTt3Q0FDakMsSUFBSSxrQkFBa0IsR0FBUSxrQkFBa0IsQ0FDOUMsY0FBYyxDQUNmLENBQUMsTUFBTSxDQUNOLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FDZCxNQUFNLENBQUMsWUFBWSxDQUFDOzRDQUNwQix5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUM5QyxDQUFDO3dDQUNGLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDOzRDQUNsQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7Z0RBQ3BDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUM7d0NBQ3JELENBQUM7b0NBQ0gsQ0FBQyxDQUNGLENBQUM7Z0NBQ0osQ0FBQztnQ0FFRCxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQ0FDbEQsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7d0NBQ3ZELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ25ELEVBQ0QsQ0FBQzt3Q0FDRCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQ2xCLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FDN0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFOzRDQUNuQyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxFQUNELENBQUM7Z0RBQ0QsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FDckMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsQ0FBQzs0Q0FDSixDQUFDO3dDQUNILENBQUMsQ0FBQyxDQUFDO29DQUNMLENBQUM7Z0NBQ0gsQ0FBQztnQ0FFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO29DQUNwRCxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dDQUM3QyxDQUFDO2dDQUVELGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDakQsQ0FBQyxDQUNGLENBQUM7NEJBRUYsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0NBQzNELFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQ0FDdkMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssWUFBWSxFQUFFLENBQUM7b0NBQzlDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxRQUFRLENBQ2pDLGNBQWMsQ0FDZixDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0NBQzlCLENBQUM7Z0NBRUQsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQztvQ0FDaEQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQ0FDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7b0NBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDO29DQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHO3dDQUNyRCxXQUFXLEVBQUUsUUFBUTt3Q0FDckIsV0FBVyxFQUFFLFNBQVM7d0NBQ3RCLFdBQVcsRUFBRSxPQUFPO3dDQUNwQixZQUFZLEVBQUUsSUFBSTt3Q0FDbEIsUUFBUSxFQUFFLE1BQU07d0NBQ2hCLFVBQVUsRUFBRSxLQUFLO3dDQUNqQixVQUFVLEVBQUUsUUFBUTt3Q0FDcEIsS0FBSyxFQUFFLFNBQVM7d0NBQ2hCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsaUJBQWlCLEVBQUUsSUFBSTt3Q0FDdkIscUJBQXFCLEVBQUUsU0FBUzt3Q0FDaEMsbUJBQW1CLEVBQUUsU0FBUzt3Q0FDOUIsd0JBQXdCLEVBQUUsS0FBSzt3Q0FDL0IsS0FBSyxFQUFFLElBQUk7d0NBQ1gsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZUFBZSxFQUFFLElBQUk7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQiwwQkFBMEIsRUFBRSxJQUFJO3dDQUNoQyx3QkFBd0IsRUFBRSxJQUFJO3dDQUM5Qiw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQyw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQywrQkFBK0IsRUFBRSxJQUFJO3dDQUNyQyxnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsWUFBWSxFQUFFLFNBQVM7d0NBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7d0NBQzVCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsT0FBTyxFQUFFLElBQUk7d0NBQ2IsTUFBTSxFQUFFLElBQUk7d0NBQ1osV0FBVyxFQUFFLElBQUk7d0NBQ2pCLGFBQWEsRUFDWCw2Q0FBNkM7d0NBQy9DLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixNQUFNLEVBQUUsSUFBSTt3Q0FDWixTQUFTLEVBQUUsSUFBSTt3Q0FDZixTQUFTLEVBQUUsSUFBSTt3Q0FDZixRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTtxQ0FDZixDQUFDO2dDQUNKLENBQUM7Z0NBQ0QsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQztvQ0FDaEQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQ0FDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7b0NBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDO29DQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHO3dDQUNyRCxXQUFXLEVBQUUsUUFBUTt3Q0FDckIsV0FBVyxFQUFFLFNBQVM7d0NBQ3RCLFdBQVcsRUFBRSxPQUFPO3dDQUNwQixZQUFZLEVBQUUsSUFBSTt3Q0FDbEIsUUFBUSxFQUFFLE1BQU07d0NBQ2hCLFVBQVUsRUFBRSxLQUFLO3dDQUNqQixVQUFVLEVBQUUsUUFBUTt3Q0FDcEIsS0FBSyxFQUFFLFNBQVM7d0NBQ2hCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsaUJBQWlCLEVBQUUsSUFBSTt3Q0FDdkIscUJBQXFCLEVBQUUsU0FBUzt3Q0FDaEMsbUJBQW1CLEVBQUUsU0FBUzt3Q0FDOUIsd0JBQXdCLEVBQUUsS0FBSzt3Q0FDL0IsS0FBSyxFQUFFLElBQUk7d0NBQ1gsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZUFBZSxFQUFFLElBQUk7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQiwwQkFBMEIsRUFBRSxJQUFJO3dDQUNoQyx3QkFBd0IsRUFBRSxJQUFJO3dDQUM5Qiw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQyw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQywrQkFBK0IsRUFBRSxJQUFJO3dDQUNyQyxnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsWUFBWSxFQUFFLFNBQVM7d0NBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7d0NBQzVCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsT0FBTyxFQUFFLElBQUk7d0NBQ2IsTUFBTSxFQUFFLElBQUk7d0NBQ1osV0FBVyxFQUFFLElBQUk7d0NBQ2pCLGFBQWEsRUFDWCw2Q0FBNkM7d0NBQy9DLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixNQUFNLEVBQUUsSUFBSTt3Q0FDWixTQUFTLEVBQUUsSUFBSTt3Q0FDZixTQUFTLEVBQUUsSUFBSTt3Q0FDZixRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTtxQ0FDZixDQUFDO2dDQUNKLENBQUM7Z0NBQ0QsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQ0FDL0MsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQ0FDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7b0NBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDO29DQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHO3dDQUNwRCxXQUFXLEVBQUUsVUFBVTt3Q0FDdkIsV0FBVyxFQUFFLFNBQVM7d0NBQ3RCLFdBQVcsRUFBRSxPQUFPO3dDQUNwQixZQUFZLEVBQUUsSUFBSTt3Q0FDbEIsUUFBUSxFQUFFLE1BQU07d0NBQ2hCLFVBQVUsRUFBRSxLQUFLO3dDQUNqQixVQUFVLEVBQUUsUUFBUTt3Q0FDcEIsS0FBSyxFQUFFLFNBQVM7d0NBQ2hCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsaUJBQWlCLEVBQUUsSUFBSTt3Q0FDdkIscUJBQXFCLEVBQUUsU0FBUzt3Q0FDaEMsbUJBQW1CLEVBQUUsU0FBUzt3Q0FDOUIsd0JBQXdCLEVBQUUsS0FBSzt3Q0FDL0IsS0FBSyxFQUFFLElBQUk7d0NBQ1gsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZUFBZSxFQUFFLElBQUk7d0NBQ3JCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQiwwQkFBMEIsRUFBRSxJQUFJO3dDQUNoQyx3QkFBd0IsRUFBRSxJQUFJO3dDQUM5Qiw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQyw2QkFBNkIsRUFBRSxJQUFJO3dDQUNuQywrQkFBK0IsRUFBRSxJQUFJO3dDQUNyQyxnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsWUFBWSxFQUFFLFNBQVM7d0NBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7d0NBQzVCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLFVBQVUsRUFBRSxTQUFTO3dDQUNyQixXQUFXLEVBQUUsSUFBSTt3Q0FDakIsT0FBTyxFQUFFLElBQUk7d0NBQ2IsTUFBTSxFQUFFLElBQUk7d0NBQ1osV0FBVyxFQUFFLElBQUk7d0NBQ2pCLGFBQWEsRUFDWCw2Q0FBNkM7d0NBQy9DLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixNQUFNLEVBQUUsSUFBSTt3Q0FDWixTQUFTLEVBQUUsSUFBSTt3Q0FDZixTQUFTLEVBQUUsSUFBSTt3Q0FDZixRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTt3Q0FDZCxRQUFRLEVBQUUsSUFBSTtxQ0FDZixDQUFDO2dDQUNKLENBQUM7Z0NBRUQsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssYUFBYSxFQUFFLENBQUM7b0NBQy9DLElBQUksUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssYUFBYSxFQUFFLENBQUM7d0NBQ3ZELDhEQUE4RDt3Q0FDOUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3Q0FDOUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQzs0Q0FDNUIsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQzs0Q0FDM0MsYUFBYSxFQUFFLEdBQUc7eUNBQ25CLENBQUMsQ0FBQztvQ0FDTCxDQUFDO29DQUNELFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7b0NBQzlCLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUM7d0NBQzVCLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUM7d0NBQzNDLGFBQWEsRUFBRSxHQUFHO3FDQUNuQixDQUFDLENBQUM7Z0NBQ0wsQ0FBQztnQ0FFRCxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGNBQWMsRUFBRSxDQUFDO29DQUN4RCxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxDQUFDO2dDQUN6QyxDQUFDOzRCQUNILENBQUMsQ0FBQyxDQUFDOzRCQUVILGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FDckMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUNqRSxDQUFDO3dCQUNKLENBQUM7d0JBRUQsSUFBSSxrQkFBa0IsR0FBUSxFQUFFLENBQUM7d0JBQ2pDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTs0QkFDbkMsSUFBSSxXQUFXLEdBQVEsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUM5RCxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLENBQzFELENBQUM7NEJBQ0YsSUFBSSxHQUFHLEdBQVE7Z0NBQ2IsSUFBSSxFQUFFLEtBQUs7Z0NBQ1gsVUFBVSxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDdkQsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztvQ0FDL0MsQ0FBQyxDQUFDLFdBQVc7b0NBQ2IsQ0FBQyxDQUFDLEVBQUU7Z0NBQ04sV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztvQ0FDakQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7b0NBQ3pCLENBQUMsQ0FBQyxFQUFFO2dDQUNOLG9CQUFvQixFQUFFLEtBQUs7Z0NBQzNCLFdBQVcsRUFBRSxJQUFJOzZCQUNsQixDQUFDOzRCQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQ0FDM0MsNkJBQTZCO2dDQUM3QixJQUFJLHdCQUF3QixHQUFRLFdBQVcsQ0FBQyxNQUFNLENBQ3BELENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQ3RCLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGFBQWEsQ0FDM0QsQ0FBQztnQ0FDRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztvQ0FDeEQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQzt3Q0FDcEIsWUFBWSxFQUFFLEtBQUs7d0NBQ25CLGtCQUFrQixFQUFFLElBQUk7d0NBQ3hCLHNCQUFzQixFQUFFOzRDQUN0QixnQkFBZ0IsRUFDZCx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NENBQzNDLG9CQUFvQixFQUFFLEdBQUc7eUNBQzFCO3FDQUNGLENBQUMsQ0FBQztnQ0FDTCxDQUFDO2dDQUVELDBDQUEwQztnQ0FDMUMsSUFBSSwyQkFBMkIsR0FBUSxXQUFXLENBQUMsTUFBTSxDQUN2RCxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxhQUFhLENBQzNELENBQUM7Z0NBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7b0NBQzNELGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3Q0FDdEMsWUFBWSxFQUFFLGlCQUFpQjt3Q0FDL0IsZ0JBQWdCLEVBQUUsR0FBRzt3Q0FDckIsWUFBWSxFQUFFLG1CQUFtQjt3Q0FDakMsa0JBQWtCLEVBQUUsSUFBSTt3Q0FDeEIsc0JBQXNCLEVBQUU7NENBQ3RCLGdCQUFnQixFQUNkLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0Q0FDOUMsb0JBQW9CLEVBQUUsZUFBZTt5Q0FDdEM7cUNBQ0YsQ0FBQyxDQUFDO29DQUNILEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM7d0NBQ3BCLFlBQVksRUFBRSxpQkFBaUI7d0NBQy9CLGdCQUFnQixFQUFFLEdBQUc7d0NBQ3JCLFlBQVksRUFBRSxtQkFBbUI7d0NBQ2pDLGtCQUFrQixFQUFFLElBQUk7d0NBQ3hCLHNCQUFzQixFQUFFOzRDQUN0QixnQkFBZ0IsRUFDZCwyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NENBQzlDLG9CQUFvQixFQUFFLGVBQWU7eUNBQ3RDO3FDQUNGLENBQUMsQ0FBQztnQ0FDTCxDQUFDOzRCQUNILENBQUM7NEJBQ0Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUMvQixDQUFDLENBQUMsQ0FBQzt3QkFDSCwrSUFBK0k7d0JBQy9JLGdFQUFnRTt3QkFDaEUsSUFBSSxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQzt3QkFDdkMsSUFBSTtvQkFDTixDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3ZELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRS9CLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsR0FBRztZQUN6QyxZQUFZLEVBQUU7Z0JBQ1osV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixXQUFXLEVBQUUsT0FBTztnQkFDcEIsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixVQUFVLEVBQUUsS0FBSztnQkFDakIsVUFBVSxFQUFFLFFBQVE7Z0JBQ3BCLEtBQUssRUFBRSxTQUFTO2dCQUNoQixVQUFVLEVBQUUsU0FBUztnQkFDckIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLHFCQUFxQixFQUFFLFNBQVM7Z0JBQ2hDLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLHdCQUF3QixFQUFFLEtBQUs7Z0JBQy9CLEtBQUssRUFBRSxJQUFJO2dCQUNYLGdCQUFnQixFQUFFLE9BQU87Z0JBQ3pCLGdCQUFnQixFQUFFLFNBQVM7Z0JBQzNCLGVBQWUsRUFBRSxJQUFJO2dCQUNyQixVQUFVLEVBQUUsU0FBUztnQkFDckIsMEJBQTBCLEVBQUUsSUFBSTtnQkFDaEMsd0JBQXdCLEVBQUUsSUFBSTtnQkFDOUIsNkJBQTZCLEVBQUUsSUFBSTtnQkFDbkMsNkJBQTZCLEVBQUUsSUFBSTtnQkFDbkMsK0JBQStCLEVBQUUsSUFBSTtnQkFDckMsZ0JBQWdCLEVBQUUsU0FBUztnQkFDM0IsZ0JBQWdCLEVBQUUsT0FBTztnQkFDekIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFlBQVksRUFBRSxTQUFTO2dCQUN2QixpQkFBaUIsRUFBRSxTQUFTO2dCQUM1QixnQkFBZ0IsRUFBRSxTQUFTO2dCQUMzQixnQkFBZ0IsRUFBRSxPQUFPO2dCQUN6QixVQUFVLEVBQUUsU0FBUztnQkFDckIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixhQUFhLEVBQUUsNkNBQTZDO2dCQUM1RCxXQUFXLEVBQUUsSUFBSTtnQkFDakIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osU0FBUyxFQUFFLElBQUk7Z0JBQ2YsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNELFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSyxFQUFFLGVBQWU7WUFDdEIsV0FBVyxFQUFFLEVBQUU7WUFDZixNQUFNLEVBQUUsRUFBRTtZQUNWLFNBQVMsRUFBRSxJQUFJO1lBQ2YsU0FBUyxFQUFFLEtBQUs7WUFDaEIsVUFBVSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixlQUFlLEVBQUUsNEJBQTRCO2dCQUM3QyxTQUFTLEVBQUUsSUFBSTtnQkFDZixnQkFBZ0IsRUFBRSxJQUFJO2dCQUN0QixTQUFTLEVBQUUsR0FBRztnQkFDZCxnQkFBZ0IsRUFBRSxJQUFJO2dCQUN0QixPQUFPLEVBQUUsSUFBSTtnQkFDYixjQUFjLEVBQUUsRUFBRTthQUNuQjtZQUNELE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxLQUFLLEVBQUUsSUFBSTtvQkFDWCxLQUFLLEVBQUUsSUFBSTtpQkFDWjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsTUFBTTtvQkFDYixLQUFLLEVBQUUsTUFBTTtpQkFDZDthQUNGO1lBQ0QsUUFBUSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsSUFBSTtZQUNYLEtBQUssRUFBRSxJQUFJO1lBQ1gsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsRUFBRTtZQUNkLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLFdBQVcsRUFBRSxRQUFRO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBVTtRQUM1QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sQ0FDTCxLQUFLLEtBQUssU0FBUztZQUNuQixLQUFLLEtBQUssSUFBSTtZQUNkLEtBQUssS0FBSyxFQUFFO1lBQ1osQ0FBQyxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFXO1FBQ3RCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLGVBQWUsRUFBRSxDQUFDO29CQUM3QyxPQUFPLE1BQU0sQ0FBQztnQkFDaEIsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sS0FBSztpQkFDVCxRQUFRLEVBQUU7aUJBQ1YsT0FBTyxDQUNOLFFBQVEsRUFDUixDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQ2pFLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxXQUFnQjtRQUN2QixJQUFJLFVBQVUsR0FBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtnQkFDN0QsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDZCxLQUFLLEVBQUUsaUJBQWlCLENBQUMsZUFBZSxDQUFDO29CQUN6QyxLQUFLLEVBQUUsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7aUJBQ2hELENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksU0FBUyxHQUFRLElBQUksQ0FBQztRQUMxQixJQUFJLFNBQVMsR0FBUSxJQUFJLENBQUM7UUFDMUIsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLElBQUksY0FBYyxHQUFRLElBQUksQ0FBQztRQUMvQixJQUFJLFVBQVUsR0FBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxDQUFDO1lBQ3ZFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVTtZQUMxQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsSUFBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHO2dCQUNqQixhQUFhLEVBQUUsT0FBTztnQkFDdEIsYUFBYSxFQUFFLFNBQVM7Z0JBQ3hCLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsVUFBVSxFQUFFLE1BQU07Z0JBQ2xCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixZQUFZLEVBQUUsUUFBUTtnQkFDdEIsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFlBQVksRUFBRSxTQUFTO2dCQUN2QixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsbUJBQW1CLEVBQUUsSUFBSTtnQkFDekIsdUJBQXVCLEVBQUUsSUFBSTtnQkFDN0IscUJBQXFCLEVBQUUsSUFBSTtnQkFDM0IsMEJBQTBCLEVBQUUsSUFBSTtnQkFDaEMsT0FBTyxFQUFFLElBQUk7Z0JBQ2Isa0JBQWtCLEVBQUUsS0FBSztnQkFDekIsa0JBQWtCLEVBQUUsU0FBUztnQkFDN0IsaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLDRCQUE0QixFQUFFLElBQUk7Z0JBQ2xDLDBCQUEwQixFQUFFLElBQUk7Z0JBQ2hDLCtCQUErQixFQUFFLElBQUk7Z0JBQ3JDLCtCQUErQixFQUFFLElBQUk7Z0JBQ3JDLGlDQUFpQyxFQUFFLElBQUk7Z0JBQ3ZDLGtCQUFrQixFQUFFLFNBQVM7Z0JBQzdCLGtCQUFrQixFQUFFLEtBQUs7Z0JBQ3pCLFlBQVksRUFBRSxTQUFTO2dCQUN2QixjQUFjLEVBQUUsU0FBUztnQkFDekIsbUJBQW1CLEVBQUUsU0FBUztnQkFDOUIsa0JBQWtCLEVBQUUsU0FBUztnQkFDN0Isa0JBQWtCLEVBQUUsS0FBSztnQkFDekIsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixTQUFTLEVBQUUsSUFBSTtnQkFDZixRQUFRLEVBQUUsSUFBSTtnQkFDZCxhQUFhLEVBQUUsSUFBSTtnQkFDbkIsZUFBZSxFQUFFLHlDQUF5QztnQkFDMUQsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixXQUFXLEVBQUUsSUFBSTtnQkFDakIsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLGFBQWEsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDekQsU0FBUyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxTQUFTLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbEUsY0FBYztvQkFDWixhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUzt3QkFDakMsQ0FBQyxDQUFDLDJCQUEyQjt3QkFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFFWCxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ2xGLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN4QyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDMUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDbkMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsWUFBWTtZQUN4QyxXQUFXLEVBQ1QsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVc7Z0JBQ3pDLENBQUMsQ0FBQyxNQUFNO2dCQUNSLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssY0FBYztvQkFDOUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFNBQVM7b0JBQzNDLENBQUMsQ0FBQyxPQUFPO29CQUNULENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTt3QkFDMUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLGFBQWE7d0JBQy9DLENBQUMsQ0FBQyxVQUFVO3dCQUNaLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTs0QkFDNUMsQ0FBQyxDQUFDLE1BQU07NEJBQ1IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO2dDQUM1QyxDQUFDLENBQUMsUUFBUTtnQ0FDVixDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVc7b0NBQzdDLENBQUMsQ0FBQyxNQUFNO29DQUNSLENBQUMsQ0FBQyxFQUFFO1lBQ1IsU0FBUyxFQUFFLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztZQUM5QyxTQUFTLEVBQUUsS0FBSztZQUNoQixLQUFLLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUNsQyxXQUFXLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUN4QyxVQUFVLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUNsRSxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsT0FBTztnQkFDUCxjQUFjO2FBQ2Y7WUFFRCxTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxVQUFVO1lBQ25CLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQsdUJBQXVCLENBQUMsUUFBYztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzFELGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFtQixFQUFFLEVBQUU7d0JBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7NEJBQ3ZDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDN0Msb0hBQW9IOzRCQUNwSCxzRUFBc0U7NEJBQ3RFLG9HQUFvRzs0QkFDcEcsNEVBQTRFOzRCQUM1RSxRQUFROzRCQUNSLFFBQVE7NEJBQ1IsSUFBSTs0QkFDSix1REFBdUQ7NEJBQ3ZELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ25ELEVBQ0QsQ0FBQztnQ0FDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7NEJBQzVELENBQUM7NEJBQ0QsSUFBSTt3QkFDTixDQUFDOzZCQUFNLENBQUM7NEJBQ04sY0FBYyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsSUFBSSxDQUFDO3dCQUM5QyxDQUFDO3dCQUVELElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDOzRCQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQzlELElBQUksb0JBQW9CLEdBQVEsY0FBYyxDQUM1QyxjQUFjLENBQ2YsQ0FBQyxNQUFNLENBQ04sQ0FBQyxTQUFjLEVBQUUsRUFBRSxDQUNqQixTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUN0RCxDQUFDO2dDQUNGLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQ3BDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtvQ0FDekIsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQzt3Q0FDL0MsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQy9DLENBQ0Y7d0NBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FDL0MsRUFDRCxDQUFDO3dDQUNELG1CQUFtQjt3Q0FDbkIsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FDcEMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFOzRDQUN6Qix5Q0FBeUM7NENBQ3pDLElBQ0UsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtnREFDN0MsTUFBTSxFQUNOLENBQUM7Z0RBQ0QsaUJBQWlCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnREFDcEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUN6QixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxDQUFDOzRDQUNKLENBQUM7d0NBQ0gsQ0FBQyxDQUNGLENBQUM7b0NBQ0osQ0FBQzt5Q0FBTSxDQUFDO3dDQUNOLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0NBQ3ZDLENBQUM7Z0NBQ0gsQ0FBQyxDQUNGLENBQUM7NEJBQ0osQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsMExBQTBMO2dCQUMxTCxhQUFhLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3RELGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQy9CLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQzlELENBQ0YsQ0FBQztnQkFDRixpRUFBaUU7Z0JBQ2pFLGdHQUFnRztnQkFDaEcsNENBQTRDO2dCQUM1Qyx1S0FBdUs7Z0JBQ3ZLLGdGQUFnRjtnQkFDaEYsNk5BQTZOO2dCQUM3TiwyREFBMkQ7Z0JBQzNELG9GQUFvRjtnQkFDcEYsVUFBVTtnQkFDVixVQUFVO2dCQUNWLE1BQU07Z0JBQ04sMFBBQTBQO2dCQUMxUCw0Q0FBNEM7Z0JBQzVDLHVLQUF1SztnQkFDdkssZ0ZBQWdGO2dCQUNoRiw2TkFBNk47Z0JBQzdOLDJEQUEyRDtnQkFDM0Qsb0ZBQW9GO2dCQUNwRixVQUFVO2dCQUNWLFVBQVU7Z0JBQ1YsTUFBTTtnQkFDTixJQUFJO2dCQUNKLElBQUksZUFBZSxHQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUNqRCxDQUFDLGdCQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUM1RCxDQUFDO2dCQUNGLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7b0JBQzlDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7d0JBQzdDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQ2hDLENBQUMsMEJBQStCLEVBQUUsRUFBRTs0QkFDbEMsMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxLQUFLLENBQUM7NEJBQ3pELDJNQUEyTTs0QkFDM00scURBQXFEOzRCQUNyRCx1REFBdUQ7NEJBQ3ZELElBQUk7d0JBQ04sQ0FBQyxDQUNGLENBQUM7b0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRWxFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZLENBQUMsZUFBb0I7UUFDL0IsSUFBSSxZQUFZLEdBQVEsS0FBSyxDQUFDO1FBQzlCLElBQUksWUFBWSxHQUFRLEVBQUUsQ0FBQztRQUMzQixvSkFBb0o7UUFDcEosd0ZBQXdGO1FBRXhGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBbUIsRUFBRSxFQUFFO1lBQ3ZFLElBQUksbUJBQW1CLEdBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQzdELENBQUMsbUJBQXdCLEVBQUUsRUFBRSxDQUMzQixtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDckMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUNoQyxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNsQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO29CQUNyRCxJQUNFLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7d0JBQzVDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRzt3QkFDOUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ2hELGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUM7d0JBQzdDLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHOzRCQUM3RCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQ7NEJBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7Z0NBQ2hELGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO3FDQUNyQyxRQUFRLEVBQUU7cUNBQ1YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyQixDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVOzRCQUM1QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQ7NEJBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ3ZELENBQUMsU0FBYyxFQUFFLEVBQUUsQ0FDakIsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQ0FDbEIsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDM0MsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ2YsQ0FBQzt3QkFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN0QixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFDRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUNuRSxDQUFDO1lBQ0QsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUNwRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FDOUQ7WUFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FDOUQsQ0FDRjtZQUNELElBQUksQ0FBQyxlQUFlLENBQ2xCLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQzlELEtBQUssZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsc0JBQXNCLENBQUMsRUFDdkUsQ0FBQztZQUNELFlBQVksR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksZUFBZSxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BELFlBQVksR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQztZQUNsRSwrRUFBK0U7WUFDL0Usa0ZBQWtGO1lBQ2xGLHFGQUFxRjtZQUNyRixxRkFBcUY7WUFDckYscURBQXFEO1lBQ3JELGdOQUFnTjtZQUNoTiw2REFBNkQ7WUFDN0QsTUFBTTtZQUNOLE1BQU07WUFDTixrREFBa0Q7WUFDbEQscUxBQXFMO1lBQ3JMLDhEQUE4RDtZQUM5RCxNQUFNO1lBQ04sTUFBTTtZQUNOLG1EQUFtRDtZQUNuRCwwTEFBMEw7WUFDMUwsOERBQThEO1lBQzlELE1BQU07WUFDTixNQUFNO1lBQ04sbURBQW1EO1lBQ25ELDBMQUEwTDtZQUMxTCw4REFBOEQ7WUFDOUQsTUFBTTtZQUNOLE1BQU07UUFDUixDQUFDO1FBQ0QsbUNBQW1DO1FBQ25DLGlDQUFpQztRQUNqQyx1Q0FBdUM7UUFDdkMsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLHFLQUFxSztRQUNySyxtS0FBbUs7UUFDbkssNkhBQTZIO1FBQzdILDZLQUE2SztRQUM3SywyS0FBMks7UUFDM0ssZ0xBQWdMO1FBQ2hMLE1BQU07UUFDTixJQUFJO1FBRUoscURBQXFEO1FBQ3JELHlKQUF5SjtRQUN6SixxR0FBcUc7UUFDckcsbUZBQW1GO1FBQ25GLHdSQUF3UjtRQUN4UiwwRUFBMEU7UUFDMUUsa0ZBQWtGO1FBQ2xGLHFRQUFxUTtRQUVyUSx1REFBdUQ7UUFDdkQsbUZBQW1GO1FBQ25GLGlJQUFpSTtRQUNqSSwrSEFBK0g7UUFDL0gsbVJBQW1SO1FBQ25SLG1DQUFtQztRQUNuQyx1RkFBdUY7UUFDdkYsOEZBQThGO1FBQzlGLHdGQUF3RjtRQUN4Rix1RkFBdUY7UUFDdkYsb0VBQW9FO1FBQ3BFLHNCQUFzQjtRQUN0Qiw0R0FBNEc7UUFDNUcsbUVBQW1FO1FBQ25FLDhEQUE4RDtRQUM5RCxrRUFBa0U7UUFDbEUseUNBQXlDO1FBQ3pDLHNGQUFzRjtRQUN0RiwwQkFBMEI7UUFDMUIsNkJBQTZCO1FBQzdCLDBIQUEwSDtRQUMxSCx1SkFBdUo7UUFDdkosOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCwrSkFBK0o7UUFDL0osdURBQXVEO1FBQ3ZELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0MseUlBQXlJO1FBQ3pJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsK0RBQStEO1FBQy9ELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0MseUlBQXlJO1FBQ3pJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsMEJBQTBCO1FBQzFCLG1HQUFtRztRQUNuRyx1REFBdUQ7UUFDdkQsZ0RBQWdEO1FBQ2hELDZDQUE2QztRQUM3Qyx3SUFBd0k7UUFDeEksbUNBQW1DO1FBQ25DLHFEQUFxRDtRQUNyRCw4REFBOEQ7UUFDOUQsZ0RBQWdEO1FBQ2hELDZDQUE2QztRQUM3Qyx3SUFBd0k7UUFDeEksbUNBQW1DO1FBQ25DLHFEQUFxRDtRQUNyRCwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBRXhCLHNCQUFzQjtRQUV0QixrQ0FBa0M7UUFDbEMsb0JBQW9CO1FBQ3BCLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsNkNBQTZDO1FBQzdDLGtJQUFrSTtRQUNsSSxpRkFBaUY7UUFDakYsaUdBQWlHO1FBQ2pHLCtFQUErRTtRQUMvRSxpQ0FBaUM7UUFDakMscUZBQXFGO1FBQ3JGLDRGQUE0RjtRQUM1RixzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLGtFQUFrRTtRQUNsRSxvQkFBb0I7UUFDcEIsZ0hBQWdIO1FBQ2hILGlFQUFpRTtRQUNqRSw0REFBNEQ7UUFDNUQsZ0VBQWdFO1FBQ2hFLHVDQUF1QztRQUN2QyxtRUFBbUU7UUFDbkUsd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQix1R0FBdUc7UUFDdkcscUpBQXFKO1FBQ3JKLDRDQUE0QztRQUM1Qyx5Q0FBeUM7UUFDekMscUlBQXFJO1FBQ3JJLCtCQUErQjtRQUMvQixpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELDZEQUE2RDtRQUM3RCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixpR0FBaUc7UUFDakcscURBQXFEO1FBQ3JELDhDQUE4QztRQUM5QywyQ0FBMkM7UUFDM0Msc0lBQXNJO1FBQ3RJLGlDQUFpQztRQUNqQyxtREFBbUQ7UUFDbkQsNERBQTREO1FBQzVELDhDQUE4QztRQUM5QywyQ0FBMkM7UUFDM0Msc0lBQXNJO1FBQ3RJLGlDQUFpQztRQUNqQyxtREFBbUQ7UUFDbkQsd0JBQXdCO1FBQ3hCLHNCQUFzQjtRQUN0QixvQkFBb0I7UUFFcEIsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFFaEIsY0FBYztRQUVkLDZFQUE2RTtRQUM3RSxnREFBZ0Q7UUFDaEQsbUJBQW1CO1FBQ25CLGdFQUFnRTtRQUNoRSxvRkFBb0Y7UUFDcEYsMkRBQTJEO1FBQzNELDJCQUEyQjtRQUMzQixzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSxnRkFBZ0Y7UUFDaEYsMkVBQTJFO1FBQzNFLHdFQUF3RTtRQUN4RSx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLHNFQUFzRTtRQUN0RSxzR0FBc0c7UUFDdEcsNEpBQTRKO1FBQzVKLGtCQUFrQjtRQUNsQixpQ0FBaUM7UUFDakMscUZBQXFGO1FBQ3JGLHlHQUF5RztRQUN6RyxpRUFBaUU7UUFDakUsNEZBQTRGO1FBQzVGLHNGQUFzRjtRQUN0RixxRkFBcUY7UUFDckYsa0VBQWtFO1FBQ2xFLG9CQUFvQjtRQUNwQiw0REFBNEQ7UUFDNUQsZ0VBQWdFO1FBQ2hFLHVDQUF1QztRQUN2QyxrSEFBa0g7UUFDbEgsd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQixzSkFBc0o7UUFDdEoscUpBQXFKO1FBQ3JKLDRDQUE0QztRQUM1Qyx5Q0FBeUM7UUFDekMscUlBQXFJO1FBQ3JJLCtCQUErQjtRQUMvQixpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELDZEQUE2RDtRQUM3RCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixpR0FBaUc7UUFDakcsc0RBQXNEO1FBQ3RELHNCQUFzQjtRQUN0QixvQkFBb0I7UUFFcEIsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFFaEIsbUJBQW1CO1FBQ25CLDJFQUEyRTtRQUMzRSxpRUFBaUU7UUFDakUsMkRBQTJEO1FBQzNELHVEQUF1RDtRQUN2RCx5QkFBeUI7UUFDekIsa0JBQWtCO1FBQ2xCLDBPQUEwTztRQUMxTyw0RUFBNEU7UUFDNUUsOExBQThMO1FBQzlMLDREQUE0RDtRQUM1RCxnRUFBZ0U7UUFDaEUsdUNBQXVDO1FBQ3ZDLDJIQUEySDtRQUMzSCx3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLCtKQUErSjtRQUMvSixxSkFBcUo7UUFDckosbUlBQW1JO1FBQ25JLDRDQUE0QztRQUM1QyxpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCxxSUFBcUk7UUFDckksOENBQThDO1FBQzlDLG1EQUFtRDtRQUNuRCw2REFBNkQ7UUFDN0QscUlBQXFJO1FBQ3JJLDhDQUE4QztRQUM5QyxtREFBbUQ7UUFDbkQsd0JBQXdCO1FBQ3hCLGlHQUFpRztRQUNqRyxzREFBc0Q7UUFDdEQsc0JBQXNCO1FBQ3RCLG9CQUFvQjtRQUNwQixtQ0FBbUM7UUFDbkMsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUVsQixnQkFBZ0I7UUFDaEIsc0RBQXNEO1FBQ3RELGlGQUFpRjtRQUNqRiwyREFBMkQ7UUFDM0Qsb0ZBQW9GO1FBQ3BGLDhEQUE4RDtRQUM5RCxrQkFBa0I7UUFDbEIsK0JBQStCO1FBQy9CLHFFQUFxRTtRQUNyRSxtRkFBbUY7UUFDbkYsdUZBQXVGO1FBQ3ZGLDhHQUE4RztRQUM5RyxzSUFBc0k7UUFDdEksb1NBQW9TO1FBRXBTLDRGQUE0RjtRQUM1RixzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLG9CQUFvQjtRQUNwQixtQ0FBbUM7UUFDbkMsdUZBQXVGO1FBQ3ZGLHdHQUF3RztRQUN4RyxtRUFBbUU7UUFDbkUsOERBQThEO1FBQzlELGtFQUFrRTtRQUNsRSx5Q0FBeUM7UUFDekMscUhBQXFIO1FBQ3JILDBCQUEwQjtRQUMxQixzQkFBc0I7UUFDdEIsa0NBQWtDO1FBQ2xDLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBRWhCLHNEQUFzRDtRQUN0RCxrR0FBa0c7UUFDbEcsK0ZBQStGO1FBQy9GLDBCQUEwQjtRQUMxQix5REFBeUQ7UUFDekQsb0VBQW9FO1FBQ3BFLDBFQUEwRTtRQUMxRSxvRUFBb0U7UUFDcEUsbUhBQW1IO1FBQ25ILDRIQUE0SDtRQUM1SCx5QkFBeUI7UUFDekIsd0NBQXdDO1FBQ3hDLG1GQUFtRjtRQUNuRixxRUFBcUU7UUFDckUsNENBQTRDO1FBQzVDLHlJQUF5STtRQUN6SSw2QkFBNkI7UUFDN0IseUJBQXlCO1FBQ3pCLHVCQUF1QjtRQUN2Qix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLGdCQUFnQjtRQUVoQixnREFBZ0Q7UUFDaEQsa0ZBQWtGO1FBQ2xGLDRFQUE0RTtRQUM1RSw4SEFBOEg7UUFDOUgseUZBQXlGO1FBQ3pGLG1FQUFtRTtRQUNuRSxzQkFBc0I7UUFDdEIsb0NBQW9DO1FBQ3BDLDBFQUEwRTtRQUMxRSx3RkFBd0Y7UUFDeEYsNEZBQTRGO1FBQzVGLG9IQUFvSDtRQUNwSCwySUFBMkk7UUFDM0ksdVNBQXVTO1FBRXZTLGlHQUFpRztRQUNqRywyRkFBMkY7UUFDM0YsMEZBQTBGO1FBQzFGLHlCQUF5QjtRQUN6Qix3Q0FBd0M7UUFDeEMsb0ZBQW9GO1FBQ3BGLG1HQUFtRztRQUNuRyxzRUFBc0U7UUFDdEUsaUVBQWlFO1FBQ2pFLHFFQUFxRTtRQUNyRSw0Q0FBNEM7UUFDNUMsd0hBQXdIO1FBQ3hILDZCQUE2QjtRQUM3Qix5QkFBeUI7UUFDekIscUNBQXFDO1FBQ3JDLDBCQUEwQjtRQUMxQix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFFakIsWUFBWTtRQUNaLFlBQVk7UUFDWixRQUFRO1FBQ1IsUUFBUTtRQUNSLElBQUk7UUFFSix5RUFBeUU7UUFDekUsaUJBQWlCO1FBQ2pCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixvQ0FBb0M7WUFDcEMseUJBQXlCO1lBQ3pCLElBQUksVUFBVSxHQUFRLEVBQUUsQ0FBQztZQUN6QixJQUFJLHlCQUF5QixHQUFRLEVBQUUsQ0FBQztZQUN4QyxJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTtnQkFDL0Msb0VBQW9FO2dCQUNwRSxvRUFBb0U7Z0JBQ3BFLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUN2RCxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzt3QkFDOUQsY0FBYzt3QkFDZCxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7NEJBQzdELGVBQWUsQ0FBQyxFQUNwQixDQUFDO29CQUNELDhCQUE4QjtvQkFDOUIsSUFBSSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUMzRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSyxDQUNwRCxDQUFDO29CQUNGLElBQUksaUJBQWlCLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDdkQsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sQ0FDckQsQ0FBQztvQkFDRixJQUFJLGVBQWUsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUNyRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxDQUNyRCxDQUFDO29CQUNGLElBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLElBQUk7d0JBQzNELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO3dCQUNoRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDaEQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsRUFDRCxDQUFDO3dCQUNELHdCQUF3Qjt3QkFDeEIsSUFBSSxtQkFBbUIsR0FBUSx5QkFBeUIsQ0FBQyxTQUFTLENBQ2hFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDekQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQzt3QkFDRixJQUFJLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQy9CLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDO2dDQUN0RCxRQUFRLENBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNqQixDQUFDOzZCQUFNLENBQUM7NEJBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDO2dDQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztnQ0FDdkMsVUFBVSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQ0FDbEQsTUFBTSxFQUFFLFFBQVEsQ0FDZCxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BELENBQUMsUUFBUSxFQUFFO2dDQUNaLGdCQUFnQixFQUFFLENBQUM7Z0NBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztnQ0FDMUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzs2QkFDakQsQ0FBQyxDQUFDO3dCQUNMLENBQUM7d0JBRUQsbUJBQW1CO3dCQUNuQixJQUFJLGNBQWMsR0FBUSxDQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsUUFBUSxDQUMvRCxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDYixJQUFJLFlBQVksR0FDZCxVQUFVLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTs0QkFDN0QsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7NEJBQ2xDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLElBQUksdUJBQXVCLEdBQ3pCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxVQUFVLEtBQUssaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRCQUNyRCxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNwRCxDQUFDO3dCQUNKLElBQUksdUJBQXVCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDbkMseUJBQXlCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0NBQzFELFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDeEMsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQztnQ0FDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7Z0NBQ3ZDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0NBQzlDLE1BQU0sRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFO2dDQUMzQyxnQkFBZ0IsRUFBRSxDQUFDO2dDQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0NBQzFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7NkJBQzdDLENBQUMsQ0FBQzt3QkFDTCxDQUFDO3dCQUNELGlCQUFpQjt3QkFFakIsSUFBSSxxQkFBcUIsR0FDdkIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRCQUNuRCxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNwRCxDQUFDO3dCQUNKLElBQUkscUJBQXFCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDakMseUJBQXlCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0NBQ3hELFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDeEMsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQztnQ0FDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7Z0NBQ3ZDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dDQUM1QyxNQUFNLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDM0MsZ0JBQWdCLEVBQUUsQ0FBQztnQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dDQUMxQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzs2QkFDM0MsQ0FBQyxDQUFDO3dCQUNMLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxJQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsS0FBSyxNQUFNO3dCQUM3RCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUNqRDt3QkFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxFQUNELENBQUM7d0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDOzRCQUMvQyxJQUFJLGNBQWMsR0FDaEIsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQ0FDMUQsRUFBRTtnQ0FDSixVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7NEJBQ2xFLElBQUksVUFBVSxHQUFRLENBQ3BCLFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxRQUFRLENBQ3RDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNiLElBQUkscUJBQXFCLEdBQ3ZCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQ0FDbkQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDcEQsQ0FBQzs0QkFDSixJQUFJLHFCQUFxQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQ2pDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDO29DQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQUMsUUFBUSxFQUFFO3dDQUMzRCxHQUFHO3dDQUNILElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUNqQixDQUFDO2lDQUFNLENBQUM7Z0NBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDO29DQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztvQ0FDdkMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7b0NBQzVDLE1BQU0sRUFDSixJQUFJLENBQUMsZUFBZSxDQUNsQiwwQkFBMEIsQ0FDM0IsQ0FBQyxRQUFRLEVBQUU7d0NBQ1osR0FBRzt3Q0FDSCxJQUFJLENBQUMsZUFBZSxDQUNsQiw2QkFBNkIsQ0FDOUIsQ0FBQyxRQUFRLEVBQUU7b0NBQ2QsZ0JBQWdCLEVBQUUsQ0FBQztvQ0FDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO29DQUMxQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztpQ0FDM0MsQ0FBQyxDQUFDOzRCQUNMLENBQUM7NEJBQ0QsSUFBSSx1QkFBdUIsR0FDekIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0NBQ3JELEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQ3BELENBQUM7NEJBQ0osSUFBSSx1QkFBdUIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUNuQyx5QkFBeUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQ0FDMUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUN4QyxDQUFDO2lDQUFNLENBQUM7Z0NBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDO29DQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztvQ0FDdkMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztvQ0FDOUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0NBQzNDLGdCQUFnQixFQUFFLENBQUM7b0NBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQ0FDMUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztpQ0FDN0MsQ0FBQyxDQUFDOzRCQUNMLENBQUM7NEJBQ0QsSUFBSSxtQkFBbUIsR0FDckIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0NBQ3pELEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQ3BELENBQUM7NEJBQ0osSUFBSSxtQkFBbUIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUMvQix5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQ0FDdEQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUNwQyxDQUFDO2lDQUFNLENBQUM7Z0NBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDO29DQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztvQ0FDdkMsVUFBVSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztvQ0FDbEQsTUFBTSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0NBQ3ZDLGdCQUFnQixFQUFFLENBQUM7b0NBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQ0FDMUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztpQ0FDakQsQ0FBQyxDQUFDOzRCQUNMLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO29CQUVELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUM7d0JBQ2hELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQ2pFLENBQUM7d0JBQ0QsSUFBSSxzQkFBc0IsR0FBUSx5QkFBeUIsQ0FBQyxNQUFNLENBQ2hFLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQ3RCLGNBQWMsQ0FBQyxZQUFZLENBQUM7NEJBQzVCLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUN6QyxDQUFDO3dCQUNGLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLENBQUM7NEJBQ2pELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzlELENBQUM7NEJBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQ0FDMUQsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3hDLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDO3dCQUM1QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUM3RCxDQUFDO3dCQUNELElBQUksMEJBQTBCLEdBQzVCLHlCQUF5QixDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLFlBQVksQ0FBQzs0QkFDNUIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQ3JDLENBQUM7d0JBQ0osSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FBQzs0QkFDckQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDbEUsQ0FBQzs0QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUN0RCwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDNUMsQ0FBQztvQkFDSCxDQUFDO29CQUVELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDO3dCQUMxQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFDM0QsQ0FBQzt3QkFDRCxJQUFJLHdCQUF3QixHQUMxQix5QkFBeUIsQ0FBQyxNQUFNLENBQzlCLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQ3RCLGNBQWMsQ0FBQyxZQUFZLENBQUM7NEJBQzVCLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FDbkMsQ0FBQzt3QkFDSixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDOzRCQUNuRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNoRSxDQUFDOzRCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUNwRCx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDMUMsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSw0QkFBNEIsR0FBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDL0QsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUMzQjtvQkFDQyxDQUFDLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxVQUFlLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxXQUFXLENBQ2hFO29CQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsSUFDRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7b0JBQzNCLDRCQUE0QixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUNyRCxDQUFDO29CQUNELGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFtQixFQUFFLEVBQUU7d0JBQ3pELElBQUksY0FBYyxDQUFDLHNCQUFzQixDQUFDLEtBQUssY0FBYyxFQUFFLENBQUM7NEJBQzlELElBQUksY0FBYyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztnQ0FDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7NEJBQ2pFLENBQUM7aUNBQU0sQ0FBQztnQ0FDTixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7NEJBQzVELENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxJQUFJLGlCQUFpQixHQUFRLEVBQUUsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUM5RCxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUNwQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7Z0NBQ3pCLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQ3pDLENBQ0Y7b0NBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsRUFDRCxDQUFDO29DQUNELGlCQUFpQixDQUFDLElBQUksQ0FDcEIsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsQ0FBQztnQ0FDSixDQUFDOzRCQUNILENBQUMsQ0FDRixDQUFDO3dCQUNKLENBQUM7d0JBQ0QsSUFDRSxjQUFjLENBQUMsb0JBQW9CLENBQUM7NEJBQ3BDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVOzRCQUM3QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUM1QyxDQUFDOzRCQUNELHdCQUF3Qjs0QkFFeEIsSUFBSSwwQkFBMEIsR0FDNUIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLGVBQW9CLEVBQUUsRUFBRSxDQUN2QixlQUFlLENBQUMsWUFBWSxDQUFDO2dDQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2dDQUM5QixlQUFlLENBQUMsWUFBWSxDQUFDO29DQUMzQixhQUFhLENBQUMsWUFBWSxDQUFDLENBQ2hDLENBQUM7NEJBQ0osSUFBSSwwQkFBMEIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUN0QyxJQUFJLEdBQUcsR0FBUTtvQ0FDYixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztvQ0FDdkMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxZQUFZLENBQUM7b0NBQ3hDLE1BQU0sRUFBRSxFQUFFO29DQUNWLGdCQUFnQixFQUFFLENBQUM7b0NBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQ0FDMUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxXQUFXLENBQUM7aUNBQ3ZDLENBQUM7Z0NBQ0YsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dDQUM3Qyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3RDLENBQUM7aUNBQU0sQ0FBQztnQ0FDTix5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUNuRCxRQUFRLENBQ1QsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDbkMsQ0FBQzt3QkFDSCxDQUFDOzZCQUFNLElBQ0wsY0FBYyxDQUFDLG9CQUFvQixDQUFDOzRCQUNwQyxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTs0QkFDN0MsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ25ELEVBQ0QsQ0FBQzs0QkFDRCx3QkFBd0I7NEJBQ3hCLElBQUksMEJBQTBCLEdBQzVCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxlQUFvQixFQUFFLEVBQUUsQ0FDdkIsZUFBZSxDQUFDLFlBQVksQ0FBQztnQ0FDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQztnQ0FDOUIsZUFBZSxDQUFDLFlBQVksQ0FBQztvQ0FDM0IsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNoQyxDQUFDOzRCQUNKLElBQUksMEJBQTBCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDdEMsSUFBSSxHQUFHLEdBQVE7b0NBQ2IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7b0NBQ3ZDLFVBQVUsRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDO29DQUN4QyxNQUFNLEVBQ0osY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7d0NBQzNDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRDt3Q0FDSCxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7b0NBQ3hELGdCQUFnQixFQUFFLENBQUM7b0NBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQ0FDMUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxXQUFXLENBQUM7aUNBQ3ZDLENBQUM7Z0NBQ0YseUJBQXlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUN0QyxDQUFDO2lDQUFNLENBQUM7Z0NBQ04seUJBQXlCLENBQUMsMEJBQTBCLENBQUMsQ0FDbkQsUUFBUSxDQUNUO29DQUNDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO3dDQUMzQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQ7d0NBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7NEJBQzNELENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCw4SEFBOEg7d0JBQzlILDhPQUE4Tzt3QkFDOU8sNENBQTRDO3dCQUM1Qyx1QkFBdUI7d0JBQ3ZCLGlEQUFpRDt3QkFDakQsa0RBQWtEO3dCQUNsRCwwTkFBME47d0JBQzFOLDZCQUE2Qjt3QkFDN0Isb0RBQW9EO3dCQUNwRCxnREFBZ0Q7d0JBQ2hELFNBQVM7d0JBQ1QsMkNBQTJDO3dCQUMzQywwREFBMEQ7d0JBQzFELDBDQUEwQzt3QkFDMUMsd0VBQXdFO3dCQUN4RSxnRkFBZ0Y7d0JBQ2hGLDhLQUE4Szt3QkFDOUssZ0ZBQWdGO3dCQUNoRixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsVUFBVTt3QkFDVixzREFBc0Q7d0JBQ3RELFFBQVE7d0JBQ1IsYUFBYTt3QkFDYiwwREFBMEQ7d0JBQzFELDBEQUEwRDt3QkFDMUQsMENBQTBDO3dCQUMxQyx3RUFBd0U7d0JBQ3hFLGdGQUFnRjt3QkFDaEYsOEtBQThLO3dCQUM5SyxnRkFBZ0Y7d0JBQ2hGLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxVQUFVO3dCQUNWLHdHQUF3Rzt3QkFDeEcsZUFBZTt3QkFDZixxUkFBcVI7d0JBQ3JSLFFBQVE7d0JBRVIsTUFBTTt3QkFFTixJQUFJO3dCQUVKLHFFQUFxRTt3QkFDckUsZ1BBQWdQO3dCQUNoUCxxQkFBcUI7d0JBQ3JCLCtDQUErQzt3QkFDL0MsZ0RBQWdEO3dCQUNoRCx1REFBdUQ7d0JBQ3ZELDJCQUEyQjt3QkFDM0Isa0RBQWtEO3dCQUNsRCw4Q0FBOEM7d0JBQzlDLE9BQU87d0JBQ1Asa0RBQWtEO3dCQUNsRCwyQ0FBMkM7d0JBQzNDLGFBQWE7d0JBQ2Isc0hBQXNIO3dCQUN0SCxNQUFNO3dCQUNOLElBQUk7b0JBQ04sQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxNQUFNO2dCQUNOLElBQUk7WUFDTixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksMkJBQTJCLEdBQVE7Z0JBQ3JDLEdBQUcsSUFBSSxHQUFHLENBQ1IseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FDM0IsQ0FDRjthQUNGLENBQUM7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDJCQUEyQixDQUFDLEVBQUUsQ0FBQztnQkFDM0QsZ0JBQWdCLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUNqRCxDQUFDLFlBQWlCLEVBQUUsRUFBRSxDQUNwQixZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQ2hFLENBQUM7Z0JBQ0YsSUFBSSwyQkFBMkIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzdDLGdCQUFnQixHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FDakQsQ0FBQyxZQUFpQixFQUFFLEVBQUUsQ0FDcEIsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUNoRSxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxpQkFBaUIsR0FBUSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDOUMsY0FBYyxDQUFDLE9BQU8sQ0FDcEIsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FDakMsQ0FBQztnQkFDRixxR0FBcUc7Z0JBQ3JHLDhaQUE4WjtZQUNoYSxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDOUMsY0FBYyxDQUFDLE9BQU8sQ0FDcEIsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FDakMsQ0FBQztnQkFDRixzR0FBc0c7Z0JBQ3RHLDhaQUE4WjtZQUNoYSxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWTtRQUN6QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUNELElBQ0UsSUFBSSxLQUFLLE1BQU07Z0JBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUk7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxFQUNyQyxDQUFDO2dCQUNELFVBQVUsR0FBRyxVQUFVLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixJQUFJLE9BQU8sR0FBUSxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDckUsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3ZELENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO3dCQUM5RCxjQUFjO3dCQUNkLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzs0QkFDN0QsZUFBZSxDQUFDO29CQUNwQixPQUFPLEVBQ1AsQ0FBQztvQkFDRCx3Q0FBd0M7b0JBQ3hDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO3dCQUNsRSxJQUFJLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQ3ZELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLENBQ3JELENBQUM7d0JBQ0YsSUFBSSxlQUFlLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDckQsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sQ0FDckQsQ0FBQzt3QkFDRixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDOzRCQUM1QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUM7NEJBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQ2pEO2dDQUNDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxDQUFDLEVBQ0osQ0FBQzs0QkFDRCxPQUFPLEdBQUcsS0FBSyxDQUFDOzRCQUNoQix1RUFBdUU7NEJBQ3ZFLDRFQUE0RTs0QkFDNUUsc0VBQXNFOzRCQUN0RSxxRUFBcUU7NEJBQ3JFLGtEQUFrRDs0QkFDbEQsSUFBSTs0QkFDSiwwRkFBMEY7NEJBQzFGLGlEQUFpRDs0QkFDakQsNENBQTRDOzRCQUM1QyxnREFBZ0Q7NEJBQ2hELHVCQUF1Qjs0QkFDdkIsb0VBQW9FOzRCQUNwRSxRQUFROzRCQUNSLFdBQVc7NEJBQ1gsc0dBQXNHOzRCQUV0RyxJQUFJOzRCQUVKLGdCQUFnQjs0QkFDaEIsSUFBSTt3QkFDTixDQUFDO29CQUNILENBQUM7b0JBQ0QsOEJBQThCO29CQUM5QixJQUFJLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQzNELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLENBQ3BELENBQUM7b0JBQ0YsSUFDRSxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLEtBQUssSUFBSTt3QkFDM0QsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BEO3dCQUNELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO3dCQUNoRCxPQUFPLEVBQ1AsQ0FBQzt3QkFDRCxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNsQixDQUFDO2dCQUNILENBQUM7Z0JBRUQsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7b0JBQzVELGlDQUFpQztvQkFDakMsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQzt3QkFDNUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDaEUsaUJBQWlCLENBQUMsb0JBQW9CLENBQUM7d0JBQ3ZDLE9BQU87d0JBQ1AsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEtBQUssWUFBWTt3QkFDbEQsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLO3dCQUNuRCxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxhQUFhO3dCQUNuRCxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGNBQWM7d0JBQzVELGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLGlCQUFpQjt3QkFDdkQsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNO3dCQUNwRCxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU07d0JBQ3BELGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRzt3QkFDeEQsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ3REO3dCQUNELHdEQUF3RDt3QkFDeEQsaUhBQWlIO3dCQUNqSCxtSUFBbUk7d0JBQ25JLE9BQU8sRUFDUCxDQUFDO3dCQUNELE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ2xCLENBQUM7b0JBRUQsT0FBTztvQkFDUCwrREFBK0Q7b0JBQy9ELHFEQUFxRDtvQkFDckQsK0NBQStDO29CQUMvQyxNQUFNO29CQUNOLDhOQUE4TjtvQkFDOU4sZ0VBQWdFO29CQUNoRSxrTEFBa0w7b0JBQ2xMLGdEQUFnRDtvQkFDaEQsb0RBQW9EO29CQUNwRCwyQkFBMkI7b0JBQzNCLCtHQUErRztvQkFDL0csWUFBWTtvQkFDWixlQUFlO29CQUNmLG1KQUFtSjtvQkFDbkoseUlBQXlJO29CQUN6SSx1SEFBdUg7b0JBQ3ZILGdDQUFnQztvQkFDaEMscUNBQXFDO29CQUNyQyxpSkFBaUo7b0JBQ2pKLHlDQUF5QztvQkFDekMseUhBQXlIO29CQUN6SCxrQ0FBa0M7b0JBQ2xDLHVDQUF1QztvQkFDdkMsaURBQWlEO29CQUNqRCx5SEFBeUg7b0JBQ3pILGtDQUFrQztvQkFDbEMsdUNBQXVDO29CQUN2QyxZQUFZO29CQUNaLHFGQUFxRjtvQkFDckYsMENBQTBDO29CQUMxQyxVQUFVO29CQUNWLFFBQVE7b0JBQ1IsdUJBQXVCO29CQUN2QixvQkFBb0I7b0JBQ3BCLE1BQU07b0JBRU4sSUFBSTtvQkFDSix1Q0FBdUM7b0JBQ3ZDLElBQ0UsT0FBTzt3QkFDUCxpQkFBaUIsQ0FBQyxZQUFZLEtBQUssYUFBYTt3QkFDaEQsaUJBQWlCLENBQUMsb0JBQW9CLENBQUM7d0JBQ3ZDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7d0JBQ2hFLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxFQUM3QyxDQUFDO3dCQUNELElBQ0UsQ0FBQyxPQUFPOzRCQUNOLDhFQUE4RTs0QkFDOUUsbUVBQW1FOzRCQUNuRSx1RUFBdUU7NEJBQ3ZFLDhGQUE4Rjs0QkFDOUYsK0lBQStJOzRCQUMvSSxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUNuRCxHQUFHLENBQUM7NEJBQ1IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDdEQ7d0JBQ0QsSUFBSTt3QkFDSixpRUFBaUU7MEJBQ2pFLENBQUM7NEJBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFDbEIsQ0FBQztvQkFDSCxDQUFDO29CQUVELHVDQUF1QztvQkFDdkMsbUZBQW1GO29CQUNuRixnRkFBZ0Y7b0JBQ2hGLFdBQVc7b0JBQ1gsMENBQTBDO29CQUMxQyxxREFBcUQ7b0JBQ3JELDJEQUEyRDtvQkFDM0QscURBQXFEO29CQUNyRCxvR0FBb0c7b0JBQ3BHLDZHQUE2RztvQkFDN0csVUFBVTtvQkFDVix5QkFBeUI7b0JBQ3pCLG9FQUFvRTtvQkFDcEUsc0RBQXNEO29CQUN0RCw2QkFBNkI7b0JBQzdCLDBIQUEwSDtvQkFDMUgsY0FBYztvQkFDZCxVQUFVO29CQUNWLFFBQVE7b0JBQ1IsUUFBUTtvQkFDUixJQUFJO2dCQUNOLENBQUMsQ0FBQyxDQUFDO2dCQUVILG1DQUFtQztnQkFDbkMscUVBQXFFO2dCQUNyRSwrREFBK0Q7Z0JBQy9ELGlIQUFpSDtnQkFDakgsNEVBQTRFO2dCQUM1RSxzREFBc0Q7Z0JBQ3RELFNBQVM7Z0JBQ1QsdUJBQXVCO2dCQUN2QixzRkFBc0Y7Z0JBQ3RGLDJFQUEyRTtnQkFDM0UsK0VBQStFO2dCQUMvRSx1R0FBdUc7Z0JBQ3ZHLHVKQUF1SjtnQkFDdkosNFVBQTRVO2dCQUU1VSxvRkFBb0Y7Z0JBQ3BGLDhFQUE4RTtnQkFDOUUsNkVBQTZFO2dCQUM3RSxZQUFZO2dCQUNaLDJCQUEyQjtnQkFDM0IsdUVBQXVFO2dCQUN2RSxzRkFBc0Y7Z0JBQ3RGLHlEQUF5RDtnQkFDekQsb0RBQW9EO2dCQUNwRCx3REFBd0Q7Z0JBQ3hELCtCQUErQjtnQkFDL0IsMkdBQTJHO2dCQUMzRyxnQkFBZ0I7Z0JBQ2hCLFlBQVk7Z0JBQ1osd0JBQXdCO2dCQUN4QixhQUFhO2dCQUNiLFVBQVU7Z0JBQ1YsTUFBTTtnQkFDTixNQUFNO2dCQUNOLElBQUk7WUFDTixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxjQUFjLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdELENBQUM7d0dBOW5FVSx3QkFBd0I7NEZBQXhCLHdCQUF3QixpZ0JDakNyQyxpclJBdVBBLGkrQkRyT0ksWUFBWSwrUEFDWixXQUFXLGd4QkFDWCxtQkFBbUIsK0JBQ25CLGdCQUFnQiwySEFDaEIsY0FBYywySEFDZCxpQkFBaUIsOEhBQ2pCLGVBQWUscUlBQ2YsWUFBWSx1SEFDWixlQUFlLGlKQUNmLHVCQUF1Qiw2SUFDdkIsZ0JBQWdCOzs0RkFLUCx3QkFBd0I7a0JBbkJwQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUN2QixnQkFBZ0I7cUJBQ2pCOzJFQU0wQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHb29nbGVNYXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZ29vZ2xlLW1hcHMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgTmdab25lLCBBZnRlclZpZXdJbml0LCBpbnB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgcXVlc3Rpb25zUmVzcG9uc2UgZnJvbSAnLi9xdWVzdGlvbnMuanNvbidcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRleHRib3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi9yYWRpby9yYWRpby5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRG9iQ29tcG9uZW50IH0gZnJvbSAnLi4vZG9iL2RvYi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi91cGxvYWQvdXBsb2FkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE11bHRpcGxlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGlwbGUtc2VsZWN0L211bHRpcGxlLXNlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXN0ZXJDb250cm9sU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci1jb250cm9sLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItbWVkaWFsLXF1ZXN0aW9ucycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gICAgUmFkaW9Db21wb25lbnQsXHJcbiAgICBDaGVja2JveENvbXBvbmVudCxcclxuICAgIFNlbGVjdENvbXBvbmVudCxcclxuICAgIERvYkNvbXBvbmVudCxcclxuICAgIFVwbG9hZENvbXBvbmVudCxcclxuICAgIE11bHRpcGxlU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgR29vZ2xlTWFwc01vZHVsZSxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lZGlhbFF1ZXN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgbWVkaWFsUXVlc3Rpb25SZXNwb25zZSA9IGlucHV0PGFueT4oKTtcclxuICBAVmlld0NoaWxkKCdhZGRyZXNzSW5wdXQnKSBhZGRyZXNzSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlITogZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZTtcclxuICBzYXZlUXVlc3Rpb25SZXF1ZXN0TGE6IGFueSA9IFtdO1xyXG4gIHNhdmVRdWVzdGlvblJlcXVlc3RQaDogYW55ID0gW107XHJcbiAgZmllbGQ6IGFueSA9IGlucHV0LnJlcXVpcmVkPGFueT4oKTtcclxuICBxdWVzdGlvbkxpc3Q6IGFueSA9IFtdO1xyXG4gIGN1cnJlbnRDb29yZGluYXRlczogYW55ID0ge307XHJcbiAgcGVyc29uVXdSZXNwb25zZU9iajogYW55ID0gW107XHJcbiAgY2VudGVyOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsID0geyBsYXQ6IDQwLjczMDYxLCBsbmc6IC03My45MzUyNDIgfTtcclxuICBsYXRpdHVkZTogYW55O1xyXG4gIGxvbmdpdHVkZTogYW55O1xyXG4gIHpvb206IGFueTtcclxuICBtYXJrZXI6IGFueSA9IHt9O1xyXG5cclxuICBwZXJzb25Vd0Fuc3dlcnM6IGFueSA9IHtcclxuICAgIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0OiAnRkVFVCcsXHJcbiAgfTtcclxuICBtZWRRdWVzdGlvbk9iajogYW55ID0ge307XHJcbiAgbGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3g6IGFueSA9IFtdO1xyXG4gIG1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdDogYW55ID0gW107XHJcbiAgbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3Q6IGFueSA9IFtdO1xyXG4gIHF1ZXN0aW9uSGVhZGVyOiBhbnkgPSBbJ2VpYSBkZXRhaWxzJywgJ2FiaGEgZGV0YWlscycsICdwZXAgZGV0YWlscyddO1xyXG4gIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0VHlwZXM6IGFueSA9IFtcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdDbScsXHJcbiAgICAgIHZhbHVlOiAnQ00nLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdGZWV0JyxcclxuICAgICAgdmFsdWU6ICdGRUVUJyxcclxuICAgIH0sXHJcbiAgXTtcclxuICBzaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICBhZGRyZXNzU3VnZ2VzdGlvbnM6IGFueVtdID0gW107XHJcbiAgaG92ZXJlZEluZGV4ID0gLTE7XHJcbiAgc2VhcmNoVGltZW91dDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmdab25lOiBOZ1pvbmUpIHtcclxuICAgIGNvbnNvbGUubG9nKCdtZWRpYWxRdWVzdGlvblJlc3BvbnNlZWVlZWUnLCB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChcclxuICAgICAgY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddICYmXHJcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddLmN1cnJlbnRWYWx1ZSlcclxuICAgICkge1xyXG4gICAgICBpZiAoJ2dlb2xvY2F0aW9uJyBpbiBuYXZpZ2F0b3IpIHtcclxuICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKChwb3NpdGlvbikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZTtcclxuICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZTtcclxuICAgICAgICAgIHRoaXMuem9vbSA9IDE1O1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB7XHJcbiAgICAgICAgICAgIGxhdDogdGhpcy5sYXRpdHVkZSxcclxuICAgICAgICAgICAgbG5nOiB0aGlzLmxvbmdpdHVkZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgLi4udGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0aWFsaXplQXV0b2NvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVBdXRvY29tcGxldGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlKFxyXG4gICAgICB0aGlzLmFkZHJlc3NJbnB1dD8ubmF0aXZlRWxlbWVudCxcclxuICAgICAge1xyXG4gICAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXSxcclxuICAgICAgICBjb21wb25lbnRSZXN0cmljdGlvbnM6IHsgY291bnRyeTogJ0lOJyB9LFxyXG4gICAgICAgIGZpZWxkczogWydwbGFjZV9pZCcsICdnZW9tZXRyeScsICduYW1lJywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5hdXRvY29tcGxldGUuYWRkTGlzdGVuZXIoJ3BsYWNlX2NoYW5nZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblBsYWNlU2VsZWN0ZWQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25QbGFjZVNlbGVjdGVkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGxhY2UgPSB0aGlzLmF1dG9jb21wbGV0ZS5nZXRQbGFjZSgpO1xyXG5cclxuICAgIGlmICghcGxhY2UuZ2VvbWV0cnkgfHwgIXBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdObyBkZXRhaWxzIGF2YWlsYWJsZSBmb3IgaW5wdXQ6ICcsIHBsYWNlLm5hbWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbG9jYXRpb24gPSBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbjtcclxuICAgIHRoaXMuY2VudGVyID0ge1xyXG4gICAgICBsYXQ6IGxvY2F0aW9uLmxhdCgpLFxyXG4gICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XHJcblxyXG4gICAgaWYgKHBsYWNlLmdlb21ldHJ5LnZpZXdwb3J0KSB7XHJcbiAgICAgIHRoaXMuem9vbSA9IDE1O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy56b29tID0gMTM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHBsYWNlOicsIHtcclxuICAgICAgbmFtZTogcGxhY2UubmFtZSxcclxuICAgICAgYWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXHJcbiAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNlbnRlcixcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RvcmVTZWxlY3RlZEFkZHJlc3MocGxhY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9yZVNlbGVjdGVkQWRkcmVzcyhwbGFjZTogZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlUmVzdWx0KTogdm9pZCB7XHJcbiAgICBjb25zdCBhZGRyZXNzRGF0YSA9IHtcclxuICAgICAgcGxhY2VJZDogcGxhY2UucGxhY2VfaWQsXHJcbiAgICAgIG5hbWU6IHBsYWNlLm5hbWUsXHJcbiAgICAgIGZvcm1hdHRlZEFkZHJlc3M6IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzLFxyXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XHJcblxyXG4gICAgZ2VvY29kZXIuZ2VvY29kZSh7IGFkZHJlc3M6IGFkZHJlc3MgfSwgKHJlc3VsdHMsIHN0YXR1cykgPT4ge1xyXG4gICAgICBpZiAoc3RhdHVzID09PSAnT0snICYmIHJlc3VsdHMgJiYgcmVzdWx0c1swXSkge1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcmVzdWx0c1swXS5nZW9tZXRyeS5sb2NhdGlvbjtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSB7XHJcbiAgICAgICAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXHJcbiAgICAgICAgICAgIGxuZzogbG9jYXRpb24ubG5nKCksXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcclxuICAgICAgICAgIHRoaXMuem9vbSA9IDE1O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgJ0dlb2NvZGUgd2FzIG5vdCBzdWNjZXNzZnVsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbjogJyArIHN0YXR1c1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25BZGRyZXNzSW5wdXRLZXl1cChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBxdWVyeSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuXHJcbiAgICAvLyBDbGVhciBwcmV2aW91cyB0aW1lb3V0XHJcbiAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBhcnJvdyBrZXkgbmF2aWdhdGlvblxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSBNYXRoLm1pbihcclxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCArIDEsXHJcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoIC0gMVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XHJcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5tYXgodGhpcy5ob3ZlcmVkSW5kZXggLSAxLCAtMSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCA+PSAwICYmXHJcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWRkcmVzcyh0aGlzLmFkZHJlc3NTdWdnZXN0aW9uc1t0aGlzLmhvdmVyZWRJbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1ZXJ5Lmxlbmd0aCA8IDIpIHtcclxuICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNlYXJjaEFkZHJlc3NlcyhxdWVyeSk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5OiBzdHJpbmcpIHtcclxuICAgIC8vIFJlcGxhY2UgdGhpcyB3aXRoIHlvdXIgYWN0dWFsIGFkZHJlc3Mgc2VhcmNoIEFQSSBjYWxsXHJcbiAgICAvLyBGb3IgZXhhbXBsZSwgdXNpbmcgR29vZ2xlIFBsYWNlcyBBUEk6XHJcblxyXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlU2VydmljZSgpO1xyXG4gICAgc2VydmljZS5nZXRQbGFjZVByZWRpY3Rpb25zKFxyXG4gICAgICB7XHJcbiAgICAgICAgaW5wdXQ6IHF1ZXJ5LFxyXG4gICAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXSxcclxuICAgICAgfSxcclxuICAgICAgKHByZWRpY3Rpb25zLCBzdGF0dXMpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LICYmXHJcbiAgICAgICAgICBwcmVkaWN0aW9uc1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBwcmVkaWN0aW9ucy5tYXAoKHByZWRpY3Rpb24pID0+ICh7XHJcbiAgICAgICAgICAgIHBsYWNlX2lkOiBwcmVkaWN0aW9uLnBsYWNlX2lkLFxyXG4gICAgICAgICAgICBtYWluX3RleHQ6IHByZWRpY3Rpb24uc3RydWN0dXJlZF9mb3JtYXR0aW5nLm1haW5fdGV4dCxcclxuICAgICAgICAgICAgc2Vjb25kYXJ5X3RleHQ6IHByZWRpY3Rpb24uc3RydWN0dXJlZF9mb3JtYXR0aW5nLnNlY29uZGFyeV90ZXh0LFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJlZGljdGlvbi5kZXNjcmlwdGlvbixcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XHJcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XHJcbiAgICBjb25zdCBhZGRyZXNzSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAnI2FkZHJlc3NJbnB1dCdcclxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmIChhZGRyZXNzSW5wdXQpIHtcclxuICAgICAgYWRkcmVzc0lucHV0LnZhbHVlID0gc3VnZ2VzdGlvbi5kZXNjcmlwdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZXJ2aWNlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlKFxyXG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgKTtcclxuICAgIHNlcnZpY2UuZ2V0RGV0YWlscyhcclxuICAgICAge1xyXG4gICAgICAgIHBsYWNlSWQ6IHN1Z2dlc3Rpb24ucGxhY2VfaWQsXHJcbiAgICAgICAgZmllbGRzOiBbJ2dlb21ldHJ5JywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXHJcbiAgICAgIH0sXHJcbiAgICAgIChwbGFjZSwgc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0sgJiYgcGxhY2UpIHtcclxuICAgICAgICAgIGNvbnN0IGxhdCA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubGF0KCk7XHJcbiAgICAgICAgICBjb25zdCBsbmcgPSBwbGFjZS5nZW9tZXRyeT8ubG9jYXRpb24/LmxuZygpO1xyXG5cclxuICAgICAgICAgIGlmIChsYXQgIT09IHVuZGVmaW5lZCAmJiBsbmcgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IGxuZztcclxuICAgICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IGxhdDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0geyBsYXQsIGxuZyB9O1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRCbHVyKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgcHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqKCkge1xyXG4gICAgdGhpcy5xdWVzdGlvbkxpc3QgPSBbXTtcclxuICAgIGxldCBkYXRhOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKTtcclxuICAgIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3ggPSBbXTtcclxuXHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xyXG4gICAgICBsZXQgcGVyc29uVXdJZEFycmF5OiBhbnkgPSBbXTtcclxuICAgICAgZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAgICAgcGVyc29uVXdJZEFycmF5LnB1c2goc2luZ2xlUXVlc3Rpb25PYmpbJ3BlcnNvblVXSWQnXSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YSkgJiZcclxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XHJcbiAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XHJcbiAgICAgICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iamVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10pKSB7XHJcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWyd0aXRsZSddID09PSAnTWVkaWNhbCBEZXRhaWxzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHNpbmdsZVF1ZXN0aW9uW1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uVGV4dCdcclxuICAgICAgICAgICAgICAgICAgICBdLnJlcGxhY2UoL1xcXFxuL2csICdcXG4nKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPVxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW3NpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ11dO1xyXG5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHNpbmdsZVF1ZXN0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1BBTicpIHtcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsndmFsaWRhdGlvbnMnXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAne1wiVHlwZVwiOlwiQWxwaGFOdW1lcmljXCIsXCJNaW5WYWx1ZVwiOlwiMTBcIixcIk1heFZhbHVlXCI6XCIxMFwiLFwicmVnZXhQYXR0ZXJuXCI6XCIvXihbYS16QS1aXSl7NX0oWzAtOV0pezR9KFthLXpBLVpdKXsxfT8kL1wifSc7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8gaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnRnRjYUNudGNEZXRscycpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvblsndmFsaWRhdGlvbnMnXSA9ICd7XCJjdXN0b21WYWxpZGF0aW9uXCI6W3tcImNvdW50cnlcIjpcIklOXCIsXCJNaW5WYWx1ZVwiOlwiMTBcIixcIk1heFZhbHVlXCI6XCIxMFwiLFwicmVnZXhQYXR0ZXJuXCI6XCIoKF5bNi05XSl7MX0oWzAtOV0pezl9JClcIn0se1wiY291bnRyeVwiOlwiT1RIRVJcIixcIk1pblZhbHVlXCI6XCI1XCIsXCJNYXhWYWx1ZVwiOlwiMTRcIn1dfSc7XHJcbiAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25MaXN0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW3NpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ11dXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnSU1BR0UgVEVYVCcpIHtcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddID0gcXVlc3Rpb25bXHJcbiAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uVGV4dCdcclxuICAgICAgICAgICAgICAgICAgXS5yZXBsYWNlQWxsKCdcXFxcbicsICc8YnI+Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zRmVldExpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcclxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcclxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ10gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnRlJFRVRFWFQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xNZXRhSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZWN2U2Z0Q29weScpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmplY3RbJ3JvbGUnXV1bXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbkludGVybmFsVmFsdWU6IHF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBkb21haW5VaVZhbHVlOiAnTicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBkb21haW5JbnRlcm5hbFZhbHVlOiBxdWVzdGlvblsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbWFpblVpVmFsdWU6ICdZJyxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPSAnSEFSRCBDT1BZJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5zb3J0KFxyXG4gICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBxdWVzdGlvbnNMaXN0Rm9yTEE6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10gPT09IHN0ZXBzXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwOiBzdGVwcyxcclxuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVBlcnNvbk9iamVjdFsncGVyc29uVVdJZCddLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXHJcbiAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpcclxuICAgICAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzaG93U2VjdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSGFyZCBDb3B5IGFuZCBNYXAgcXVlc3Rpb25cclxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZWN2U2Z0Q29weSdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgIG9ialsncXVlc3Rpb25zJ10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnTUFQJyxcclxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ1knLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIE5SSSB0aGVuIHBhc3Nwb3J0IHVwbG9hZCBpcyByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvbjogYW55ID0gZmlsdGVyZWRPYmouZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ05hdGlvbmFsaXR5J1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdQQVNTUE9SVF9VUExPQUQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsUXVlc3Rpb246ICdOJyxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRleHQ6ICdQYXNzcG9ydCBEZXRhaWxzICcsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdmb3Jnbk5hdGlvbmFsJyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgb2JqWydxdWVzdGlvbnMnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdQQVNTUE9SVF9VUExPQUQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsUXVlc3Rpb246ICdOJyxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRleHQ6ICdQYXNzcG9ydCBEZXRhaWxzICcsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdmb3Jnbk5hdGlvbmFsJyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25zTGlzdEZvckxBLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGxldCBsaWZlQXNzdXJlZE9iamVjdEluZGV4SW5NYXN0ZXI6IGFueSA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbmRJbmRleCgoc2luZ2xlT2JqOiBhbnkpID0+IHNpbmdsZU9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmplY3RbJ3JvbGUnXSk7XHJcbiAgICAgICAgICAgIC8vIGlmIChsaWZlQXNzdXJlZE9iamVjdEluZGV4SW5NYXN0ZXIgIT09IHRoaXMubnVtYmVyTWludXNPbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QgPSBxdWVzdGlvbnNMaXN0Rm9yTEE7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqID0gZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcblxyXG4gICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXSA9IHtcclxuICAgICAgY29udHJvbFN0eWxlOiB7XHJcbiAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxyXG4gICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgIGZvbnRTaXplOiAnMTZweCcsXHJcbiAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXHJcbiAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxyXG4gICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxyXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgIHdpZHRoOiBudWxsLFxyXG4gICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcclxuICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXHJcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxyXG4gICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXHJcbiAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxyXG4gICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxyXG4gICAgICAgIHBhZGRpbmc6IG51bGwsXHJcbiAgICAgICAgbWFyZ2luOiBudWxsLFxyXG4gICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxyXG4gICAgICAgIGNvbnRyb2xNZXRhSWQ6ICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcclxuICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcclxuICAgICAgICBoZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxyXG4gICAgICAgIG1heEhlaWdodDogbnVsbCxcclxuICAgICAgICBtaW5XaWR0aDogbnVsbCxcclxuICAgICAgICBtYXhXaWR0aDogbnVsbCxcclxuICAgICAgICBjc3NDbGFzczogbnVsbCxcclxuICAgICAgfSxcclxuICAgICAgZmllbGROYW1lOiBudWxsLFxyXG4gICAgICBsYWJlbDogJ2ZlZXQgLyBpbmNoZXMnLFxyXG4gICAgICBwbGFjZUhvbGRlcjogJycsXHJcbiAgICAgIG1ldGFJZDogJycsXHJcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgaXNEaXNhYmxlOiBmYWxzZSxcclxuICAgICAgdmFsaWRhdG9yczoge1xyXG4gICAgICAgIGlzUmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJlcXVpcmVkTWVzc2FnZTogJ1RoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5JyxcclxuICAgICAgICBtaW5MZW5ndGg6IG51bGwsXHJcbiAgICAgICAgbWluTGVuZ3RoTWVzc2FnZTogbnVsbCxcclxuICAgICAgICBtYXhMZW5ndGg6IDE1MCxcclxuICAgICAgICBtYXhMZW5ndGhNZXNzYWdlOiBudWxsLFxyXG4gICAgICAgIHBhdHRlcm46IG51bGwsXHJcbiAgICAgICAgcGF0dGVybk1lc3NhZ2U6ICcnLFxyXG4gICAgICB9LFxyXG4gICAgICBvcHRpb25zOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGFiZWw6ICdDbScsXHJcbiAgICAgICAgICB2YWx1ZTogJ0NNJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxhYmVsOiAnRmVldCcsXHJcbiAgICAgICAgICB2YWx1ZTogJ0ZFRVQnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICAgIGNzc0NsYXNzOiBudWxsLFxyXG4gICAgICB2YWx1ZTogbnVsbCxcclxuICAgICAgc3R5bGU6IG51bGwsXHJcbiAgICAgIGltYWdlVXJsOiBudWxsLFxyXG4gICAgICBjb25maWdEYXRhOiB7fSxcclxuICAgICAgbWV0YURhdGFPYmo6IG51bGwsXHJcbiAgICAgIGlzU2hvd0xhYmVsOiBmYWxzZSxcclxuICAgICAgaXNNYXN0ZXJDb250cm9sOiBmYWxzZSxcclxuICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIHZhbHVlID09PSBudWxsIHx8XHJcbiAgICAgIHZhbHVlID09PSAnJyB8fFxyXG4gICAgICAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHx8XHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlKSA9PT0gJ3t9J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFRpdGxlQ2FzZShoZWFkZXI6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoaGVhZGVyKSB7XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSGVhZGVyLmluY2x1ZGVzKGhlYWRlci50b0xvY2FsZUxvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgIGxldCB2YWwgPSBoZWFkZXIuc3BsaXQoJyAnKTtcclxuICAgICAgICByZXR1cm4gdmFsWzBdLnRvVXBwZXJDYXNlKCkgKyAnICcgKyB0aGlzLnRvVGl0bGVDYXNlKHZhbFsxXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGhlYWRlci50b1VwcGVyQ2FzZSgpID09PSAnRkFUQ0EgREVUQUlMUycpIHtcclxuICAgICAgICAgIHJldHVybiBoZWFkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGhlYWRlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvVGl0bGVDYXNlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgL1xcd1xcUyovZyxcclxuICAgICAgICAgICh0eHQ6IGFueSkgPT4gdHh0WzBdLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGQocXVlc3Rpb25PYmo6IGFueSkge1xyXG4gICAgbGV0IG9wdGlvbnNPYmo6IGFueSA9IFtdO1xyXG4gICAgaWYgKHF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkge1xyXG4gICAgICBxdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlT3B0aW9uVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgIG9wdGlvbnNPYmoucHVzaCh7XHJcbiAgICAgICAgICBsYWJlbDogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpblVpVmFsdWUnXSxcclxuICAgICAgICAgIHZhbHVlOiBzaW5nbGVPcHRpb25WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGxldCBtaW5MZW5ndGg6IGFueSA9IG51bGw7XHJcbiAgICBsZXQgbWF4TGVuZ3RoOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IHBhdHRlcm46IGFueSA9IG51bGw7XHJcbiAgICBsZXQgcGF0dGVybk1lc3NhZ2U6IGFueSA9IG51bGw7XHJcbiAgICBsZXQgY29uZmlnRGF0YTogYW55ID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEpXHJcbiAgICAgID8gdGhpcy5maWVsZCgpPy5jb25maWdEYXRhXHJcbiAgICAgIDoge307XHJcblxyXG4gICAgaWYodGhpcy5maWVsZCgpWydjb250cm9sVHlwZSddID09PSAncmFkaW8nKSB7XHJcbiAgICAgIHRoaXMuZmllbGQoKVsnY29uZmlnRGF0YSddID0ge1xyXG4gICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IFwicmFkaW9cIixcclxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcclxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJXaWR0aFwiOiBcIjFweFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImJvcmRlclJhZGl1c1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IFwiMTJweFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvbnRXZWlnaHRcIjogXCI0MDBcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb250RmFtaWx5XCI6IFwiTXVsaXNoXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjNDQ0NDQ0XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBcIiNGRkZGRkZcIixcclxuICAgICAgICAgICAgICAgICAgXCJjYXJldENvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibnVkZ2VEaXNwbGF5SW1hZ2VcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlcldpZHRoXCI6IFwiMXB4XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJDb2xvclwiOiBcIiNmZmJiMDBcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JhY2tncm91bmRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0NvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcclxuICAgICAgICAgICAgICAgICAgXCJob3ZlckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImRpc2FibGVDb2xvclwiOiBcIiNFQ0VDRUNcIixcclxuICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQmFja2dyb3VuZFwiOiBcIiNFQ0VDRUNcIixcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwicGFkZGluZ1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcIm1hcmdpblwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiY29udHJvbE1ldGFJZFwiOiBcIkFMTF9DT01fR0VOX0NUUkxfcmFkaW9fbm9taW5lZUdlbmRlcl9WMVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImJvcmRlclN0eWxlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWluSGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWluV2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJtYXhXaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvbk9ialsndmFsaWRhdGlvbnMnXSkpIHtcclxuICAgICAgbGV0IHZhbGlkYXRpb25PYmo6IGFueSA9IEpTT04ucGFyc2UocXVlc3Rpb25PYmpbJ3ZhbGlkYXRpb25zJ10pO1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydNaW5WYWx1ZSddKSkge1xyXG4gICAgICAgIG1pbkxlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnTWF4VmFsdWUnXSkpIHtcclxuICAgICAgICBtYXhMZW5ndGggPSB2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ1R5cGUnXSkpIHtcclxuICAgICAgICBwYXR0ZXJuID0gdmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYycgPyAnXlswLTldKyQnIDogbnVsbDtcclxuICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9XHJcbiAgICAgICAgICB2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJ1xyXG4gICAgICAgICAgICA/ICdPbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQuJ1xyXG4gICAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICAgIGNvbmZpZ0RhdGFbJ2lucHV0VHlwZSddID0gdmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYycgPyAnbnVtYmVyJyA6ICd0ZXh0JztcclxuICAgICAgICBpZiAodmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYycpIHtcclxuICAgICAgICAgIG1heExlbmd0aCA9ICc5Jy5yZXBlYXQoTnVtYmVyKG1heExlbmd0aCkpO1xyXG4gICAgICAgICAgY29uZmlnRGF0YVsnbWF4VmFsdWUnXSA9IG1heExlbmd0aDtcclxuICAgICAgICAgIGNvbmZpZ0RhdGFbJ21pblZhbHVlJ10gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbmZpZ0RhdGE6IGNvbmZpZ0RhdGEsXHJcbiAgICAgIGNvbnRyb2xTdHlsZTogdGhpcy5maWVsZCgpPy5jb250cm9sU3R5bGUsXHJcbiAgICAgIGNvbnRyb2xUeXBlOlxyXG4gICAgICAgIHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0ZSRUUgVEVYVCdcclxuICAgICAgICAgID8gJ3RleHQnXHJcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcclxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRSdcclxuICAgICAgICAgID8gJ3JhZGlvJ1xyXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgfHxcclxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nXHJcbiAgICAgICAgICA/ICdjaGVja2JveCdcclxuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXHJcbiAgICAgICAgICA/ICdkYXRlJ1xyXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdEUk9QRE9XTidcclxuICAgICAgICAgID8gJ3NlbGVjdCdcclxuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRE9DVVBMT0FEJ1xyXG4gICAgICAgICAgPyAnZmlsZSdcclxuICAgICAgICAgIDogJycsXHJcbiAgICAgIGZpZWxkTmFtZTogcXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10sXHJcbiAgICAgIGlzRGlzYWJsZTogZmFsc2UsXHJcbiAgICAgIGxhYmVsOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXHJcbiAgICAgIHBsYWNlSG9sZGVyOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXHJcbiAgICAgIHZhbGlkYXRvcnM6IHtcclxuICAgICAgICBpc1JlcXVpcmVkOiBxdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgbWluTGVuZ3RoLFxyXG4gICAgICAgIG1heExlbmd0aCxcclxuICAgICAgICBwYXR0ZXJuLFxyXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlLFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxyXG4gICAgICBvcHRpb25zOiBvcHRpb25zT2JqLFxyXG4gICAgICBpc1Nob3dMYWJlbDogdHJ1ZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdWJRdWVzdGlvblZhbHVlcyhxdWVzdGlvbj86IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5xdWVzdGlvbkxpc3QpKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSkge1xyXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1F1ZXN0aW9uKHNpbmdsZVF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XHJcbiAgICAgICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoZG9tYWluVmFsdWVPYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tkb21haW5WYWx1ZU9ialsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpIHtcclxuICAgICAgICAgICAgICAvLyAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbZG9tYWluVmFsdWVPYmpbJ2RvbWFpbkludGVybmFsVmFsdWUnXV07XHJcbiAgICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXNOb25lSW5Eb21haW5WYWx1ZXM6IGFueSA9IHNpbmdsZVF1ZXN0aW9uW1xyXG4gICAgICAgICAgICAgICAgICAnZG9tYWluVmFsdWVzJ1xyXG4gICAgICAgICAgICAgICAgXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVPYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVPYmpbJ2RvbWFpblVpVmFsdWUnXS50b1VwcGVyQ2FzZSgpID09PSAnTk9ORSdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzTm9uZUluRG9tYWluVmFsdWVzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOb25lSW5Eb21haW5WYWx1ZXNbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNOb25lSW5Eb21haW5WYWx1ZXNbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gbm9uZSBpcyBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCBzZWxlY3RlZCBjaGVja2JveCBxdWVzdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5kb21haW5VaVZhbHVlLnRvVXBwZXJDYXNlKCkgIT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTk9ORSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWUuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBsZXQgaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdDogYW55ID0gdGhpcy5pc0Jsb2NrZWRRdWVzdGlvbnNMaXN0LmZpbHRlcigoc2luZ2xlQmxvY2tlZE9iajogYW55KSA9PiBzaW5nbGVCbG9ja2VkT2JqWydzZWN0aW9uVGl0bGUnXS50cmltKCkgPT09IHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udHJpbSgpKTtcclxuICAgICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdCkpIHtcclxuICAgICAgICAvLyAgIGlmIChpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0WzBdLmlzQmxvY2tlZEZvckN1c3RvbWVyRmxvdyAmJiAhdGhpcy5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcclxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWRJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSk7XHJcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAvLyAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2ZpbHRlcmVkSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xyXG4gICAgICAgIC8vICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ107XHJcbiAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgIC8vICAgICB9KTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGlmICgoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdFswXS5pc0Jsb2NrZWRGb3JBZ2VudEZsb3cgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMjAnIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDA1JyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QwNicpICYmIHRoaXMubG9hZGluZ0FnZW50cG9ydGFsKSB7XHJcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgbGV0IGZpbHRlcmVkSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pO1xyXG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gICAgICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtmaWx0ZXJlZEluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcclxuICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xyXG4gICAgICAgIC8vICAgICAgICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddO1xyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGxldCBoaWRkZW5RdWVzdGlvbnM6IGFueSA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbHRlcihcclxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uT2JqOiBhbnkpID0+ICFzaW5nbGVTZWN0aW9uT2JqWydzaG93U2VjdGlvbiddXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhpZGRlblF1ZXN0aW9ucykpIHtcclxuICAgICAgICAgIGhpZGRlblF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIC8vICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucXVlc3Rpb25MaXN0LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhWydzdGVwJ10gLSBiWydzdGVwJ10pO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbnMgbGlzdCcsIHRoaXMucXVlc3Rpb25MaXN0KTtcclxuICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbnMgYW5zd2VycycsIHRoaXMucGVyc29uVXdBbnN3ZXJzKTtcclxuICAgIHRoaXMuc2F2ZVF1ZXN0aW9uRGV0YWlscygpO1xyXG4gIH1cclxuXHJcbiAgc2hvd1F1ZXN0aW9uKGN1cnJlbnRRdWVzdGlvbjogYW55KSB7XHJcbiAgICBsZXQgc2hvd1F1ZXN0aW9uOiBhbnkgPSBmYWxzZTtcclxuICAgIGxldCBzdWJRdWVzdGlvbnM6IGFueSA9IFtdO1xyXG4gICAgLy8gbGV0IGN1cnJlbnRTZWN0aW9uSW5kZXg6IGFueSA9IHF1ZXN0aW9uc1Jlc3BvbnNlWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBwZXJzb25Sb2xlKVxyXG4gICAgLy8gbGV0IHJvbGUgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bY3VycmVudFNlY3Rpb25JbmRleF1bJ3JvbGUnXVxyXG5cclxuICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXS5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBsZXQgaXNTdWJRdWVzdGlvbk9iamVjdDogYW55ID0gW107XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pKSB7XHJcbiAgICAgICAgaXNTdWJRdWVzdGlvbk9iamVjdCA9IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZmlsdGVyKFxyXG4gICAgICAgICAgKHF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgcXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9uWydxdWVzdGlvbklkJ11cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc1N1YlF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBzdWJRdWVzdGlvbnMucHVzaChzaW5nbGVRdWVzdGlvbik7XHJcbiAgICAgICAgaXNTdWJRdWVzdGlvbk9iamVjdC5mb3JFYWNoKChzaW5nbGVTdWJRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddLnRvU3RyaW5nKClbMF0gIT09ICchJyAmJlxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID09PVxyXG4gICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXSkgfHxcclxuICAgICAgICAgICAgKHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10udG9TdHJpbmcoKVswXSA9PT0gJyEnICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dICE9PVxyXG4gICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJyEnKVsxXSkgfHxcclxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZU9ialsndmFsdWUnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXVxyXG4gICAgICAgICAgICAgICkubGVuZ3RoID4gMClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvbnMpICYmXHJcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXSlcclxuICAgICkge1xyXG4gICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKSAmJlxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cclxuICAgICAgKSAmJlxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxyXG4gICAgICAgIF1cclxuICAgICAgKSAmJlxyXG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXHJcbiAgICAgIF0gPT09IGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbkFuc3dlciddXHJcbiAgICApIHtcclxuICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJykge1xyXG4gICAgICBzaG93UXVlc3Rpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBzaG93UXVlc3Rpb247XHJcbiAgfVxyXG5cclxuICBzYXZlUXVlc3Rpb25EZXRhaWxzKCkge1xyXG4gICAgLy8gcmVtb3ZlIGFsbCBjaGVja2JveCBxdWVzdGlvbnMgcHJlc2VudCBpbiB2YWx1ZXNcclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3gpKSB7XHJcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZGtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddKTtcclxuICAgICAgLy8gbGV0IHBvbGljeUFzc3VyZWRLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ10pO1xyXG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRPbmVLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXSk7XHJcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZFR3b0tleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddKTtcclxuICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoaXNOYU4oTnVtYmVyKHNpbmdsZUtleSkpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgLy8gcG9saWN5QXNzdXJlZEtleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIC8vIGxpZmVBc3N1cmVkT25lS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ11bc2luZ2xlS2V5XSkpIHtcclxuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICAvLyBsaWZlQXNzdXJlZFR3b0tleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddW3NpbmdsZUtleV0pKSB7XHJcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgIH1cclxuICAgIC8vIGxldCBoZWlnaHRJbkluY2hlc09iajogYW55ID0gW107XHJcbiAgICAvLyBsZXQgaGVpZ2h0SW5GZWV0T2JqOiBhbnkgPSBbXTtcclxuICAgIC8vIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmo6IGFueSA9IFtdO1xyXG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XHJcbiAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcclxuICAgIC8vICAgbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWQnKTtcclxuICAgIC8vICAgaWYgKGxhSW5kZXggIT09IC0xICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF0pKSB7XHJcbiAgICAvLyAgICAgaGVpZ2h0SW5JbmNoZXNPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpO1xyXG4gICAgLy8gICAgIGhlaWdodEluRmVldE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyk7XHJcbiAgICAvLyAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBhbmQgbm9uIG1lZGljYWwgcXVlc3Rpb25zIDpcclxuICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9iaikgJiYgaXNWYWxpZCkge1xyXG4gICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmouZm9yRWFjaCgoc2luZ2xlUGVyc29uT2JqOiBhbnksIHNpbmdsZVBlcnNvbkluZGV4OiBhbnkpID0+IHtcclxuICAgIC8vICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddKSAmJiBpc1ZhbGlkKSB7XHJcbiAgICAvLyAgICAgICBsZXQgcm9sZTogYW55ID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZCcgPyBcImxpZmUgYXNzdXJlZFwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdwb2xpY3lIb2xkZXInID8gXCJwb2xpY3kgaG9sZGVyXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkT25lJyA/IFwiSm9pbnQgTGlmZSAxXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkVHdvJyA/IFwiSm9pbnQgTGlmZSAyXCIgOiBcIlwiO1xyXG4gICAgLy8gICAgICAgc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcclxuICAgIC8vICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJiAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PSAnVEVMTF9VU19NT1JFJyB8fCBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09ICdCQVNJQ19ERVRBSUxTJykgJiYgaXNWYWxpZCkge1xyXG5cclxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBlbnRlcmVkIGluIGZlZXRcclxuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKTtcclxuICAgIC8vICAgICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJiAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSkpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXHJcbiAgICAvLyAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyk7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmIGlzVmFsaWQpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gQ00gJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBDTSAnICsgcm9sZSwgJ0Nsb3NlJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcclxuICAgIC8vICAgICAgICAgICAgIGlmIChcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSkpIHx8XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQoc2luZ2xlUXVlc3Rpb25PYmosIHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSkpICYmIGlzVmFsaWRcclxuICAgIC8vICAgICAgICAgICAgICkge1xyXG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICByZWRpcmVjdFxyXG4gICAgLy8gICAgICAgICAgICAgKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iaikpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQoYCR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncXVlc3Rpb25UeXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsndHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3BlcnNvblR5cGUnXX1gKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXHJcbiAgICAvLyAgICAgICAgICAgICApIHtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXHJcbiAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICBpZiAoXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkgfHxcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICApIHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gfVxyXG4gICAgLy8gICAgICAgICAgIH0pO1xyXG5cclxuICAgIC8vICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBmYXRjaCBkZWNsYXJhdGlvblxyXG4gICAgLy8gICAgICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xyXG4gICAgLy8gICAgICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgaWYoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiYgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICApe1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XHJcblxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcclxuICAgIC8vICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgIC8vICAgfVxyXG4gICAgLy8gICAgICAgICAgIC8vIH0pO1xyXG4gICAgLy8gICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKChpc1ZhbGlkIHx8IHNhdmVkcmFmdCkgfHwgdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xyXG4gICAgLy8gaWYgKGlzVmFsaWQpIHtcclxuICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KHRydWUpO1xyXG4gICAgICAvLyBsZXQgcmVxdWVzdDogYW55ID0gW107XHJcbiAgICAgIGxldCBtYWluUmVxT2JqOiBhbnkgPSBbXTtcclxuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnM6IGFueSA9IFtdO1xyXG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JMYTogYW55ID0gW107XHJcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvclBoOiBhbnkgPSBbXTtcclxuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXSkpIHtcclxuICAgICAgICAvLyBzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcclxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XHJcbiAgICAgICAgICAgICdURUxMX1VTX01PUkUnIHx8XHJcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cclxuICAgICAgICAgICAgICAnQkFTSUNfREVUQUlMUycpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cclxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHBhc3MgaGVpZ2h0IGluIGNtIG9ialxyXG4gICAgICAgICAgICBsZXQgY21PYmpJbkFuc3dlcnNpbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbY21PYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgIHBhcnNlSW50KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhlaWdodCBpbiBpbmNoZXNcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPSAoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddICogMC4zOTM3MDFcclxuICAgICAgICAgICAgKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0OiBhbnkgPVxyXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSkgPiAxMlxyXG4gICAgICAgICAgICAgICAgPyAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgxKVxyXG4gICAgICAgICAgICAgICAgOiAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgbGV0IGluY2hlc29iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGluY2hlc29iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkluY2hlc09ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaGVpZ2h0IGluIGZlZXRcclxuXHJcbiAgICAgICAgICAgIGxldCBmZWV0T2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGZlZXRPYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZlZXRPYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5GZWV0KS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikpIHtcclxuICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgKlxyXG4gICAgICAgICAgICAgICAgICAxMiArXHJcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSk7XHJcbiAgICAgICAgICAgICAgbGV0IGhlaWdodEluQ206IGFueSA9IChcclxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5JbmNoZXMpIC8gMC4zOTM3MDFcclxuICAgICAgICAgICAgICApLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgbGV0IGZlZXRPYmpJbkFuc3dlcnNpbmRleDogYW55ID1cclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoZmVldE9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmZWV0T2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcclxuICAgICAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCdcclxuICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J1xyXG4gICAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXHJcbiAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsZXQgaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2luY2hlc29iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxldCBjbU9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tjbU9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkNtKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5DbUFuc3dlck9iamVjdDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DbUFuc3dlck9iamVjdCkgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ21BbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DbUFuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3Q6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0KSAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddXSA9XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3Q6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3QpICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbjogYW55ID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHNpbmdsZURhdGE6IGFueSkgPT4gc2luZ2xlRGF0YVsncXVlc3Rpb25UeXBlJ10gPT09ICdOT0RJU1BMQVknXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIDogW107XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gfHxcclxuICAgICAgICAgICAgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbi5sZW5ndGggPiAwKSAmJlxyXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xyXG4gICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gJ0VuZ2xpc2gnO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FycjogYW55ID0gW107XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoZWNrZWRPcHRpb25zQXJyKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAvLyBmb3IgY2hlY2tib3ggcXVlc3Rpb25cclxuXHJcbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBvYmpbJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVtcclxuICAgICAgICAgICAgICAgICAgJ2Fuc3dlcidcclxuICAgICAgICAgICAgICAgIF0gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIC8vIG5vbiBjaGVja2JveCBxdWVzdGlvblxyXG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdDogYW55ID1cclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjpcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcclxuICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bXHJcbiAgICAgICAgICAgICAgICAgICdhbnN3ZXInXHJcbiAgICAgICAgICAgICAgICBdID1cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXHJcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZihzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHtcclxuICAgICAgICAgICAgLy8gICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgOiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleCgoc2luZ2xlQW5zd2VyT2JqIDogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gICYmIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10pKVxyXG4gICAgICAgICAgICAvLyAgIGlmKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAvLyAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAvLyAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICAgIGFuc3dlcjogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInID8gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0obmV3IERhdGUodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pLCAneXl5eS1NTS1kZCcpIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXHJcbiAgICAgICAgICAgIC8vICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgIC8vICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgLy8gICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICB9O1xyXG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XHJcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICBvYmpbJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgLy8gb2JqZWN0IGFscmVhZHkgdGhlcmUgc28gb3ZlciByaWRlIHRoZSBuZXcgYW5zd2VyXHJcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XHJcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVsnYW5zd2VyJ10gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bJ2Fuc3dlciddID0gIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyA/IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSwgJ3l5eXktTU0tZGQnKSA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gICB9XHJcblxyXG4gICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZXRGaW5hbmNFbGdibCcpIHtcclxuICAgICAgICAgICAgLy8gICBsZXQgZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoKHNpbmdsZUFuc3dlck9iajogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiYgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSkpXHJcbiAgICAgICAgICAgIC8vICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAvLyAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgLy8gICAgIGFuc3dlcjogdGhpcy5zaGFyZWRTZXJ2aWNlLmZpbmFuY2lhbEVsaWdpYmlsaXR5LFxyXG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgLy8gICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgLy8gICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAvLyAgIH07XHJcbiAgICAgICAgICAgIC8vICAgaWYgKGZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4XVsnYW5zd2VyJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuZmluYW5jaWFsRWxpZ2liaWxpdHk7XHJcbiAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9KTtcclxuICAgICAgbGV0IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdDogYW55ID0gW1xyXG4gICAgICAgIC4uLm5ldyBTZXQoXHJcbiAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLm1hcCgoaXRlbTogYW55KSA9PlxyXG4gICAgICAgICAgICBpdGVtLnBlcnNvblVXSWQudG9TdHJpbmcoKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICksXHJcbiAgICAgIF07XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdCkpIHtcclxuICAgICAgICBtYWluUmVxdWVzdEZvckxhID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAoc2luZ2xlQW5zd2VyOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHNpbmdsZUFuc3dlclsncGVyc29uVVdJZCddID09PSBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3RbMF1cclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3QubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICBtYWluUmVxdWVzdEZvclBoID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChzaW5nbGVBbnN3ZXI6IGFueSkgPT5cclxuICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJbJ3BlcnNvblVXSWQnXSA9PT0gZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0WzFdXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgc2F2ZVJlcXVlc3RzQXJyYXk6IGFueSA9IFtdO1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdExhID0gbWFpblJlcXVlc3RGb3JMYTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RMYScsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JMYSwgIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcclxuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvckxhLCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCkgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgPyB0cnVlIDogIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvclBoKSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoID0gbWFpblJlcXVlc3RGb3JQaDtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RQaCcsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvclBoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yUGgsICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XHJcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JQaCwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQpICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6ICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb29raWVWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XHJcbiAgICBsZXQgdG9rZW5OYW1lID0gJyc7XHJcbiAgICBsZXQgdG9rZW5WYWx1ZSA9ICcnO1xyXG4gICAgY29uc3QgaW5kZXgyID0gMjtcclxuICAgIGNvb2tpZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhLnNwbGl0KCc9JylbMF0uaW5jbHVkZXMobmFtZSkgJiYgISFkYXRhLnNwbGl0KCc9JylbMV0pIHtcclxuICAgICAgICB0b2tlbk5hbWUgPSBkYXRhLnNwbGl0KCc9JylbMF0udHJpbSgpO1xyXG4gICAgICAgIHRva2VuVmFsdWUgPSBkYXRhLnNwbGl0KCc9JylbMV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIG5hbWUgPT09ICdsaW5rJyAmJlxyXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVswXS5pbmNsdWRlcyhuYW1lKSAmJlxyXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdICE9PSBudWxsICYmXHJcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml0gIT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICB0b2tlblZhbHVlID0gdG9rZW5WYWx1ZSArICc9JyArIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0b2tlblZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKCkge1xyXG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XHJcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmXHJcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxyXG4gICAgICAgICAgICAnVEVMTF9VU19NT1JFJyB8fFxyXG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XHJcbiAgICAgICAgICAgICAgJ0JBU0lDX0RFVEFJTFMnKSAmJlxyXG4gICAgICAgICAgaXNWYWxpZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxyXG4gICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cclxuICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxyXG4gICAgICAgICAgICAgICAgKSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAgICAgICAgICAgLy8gaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAgICAgICAvLyAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAgIC8vICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlXHJcbiAgICAgICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG5cclxuICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgIC8vIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxyXG4gICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXHJcbiAgICAgICAgICAgIGlzVmFsaWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAvLyAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAvLyAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0pKSB8fFxyXG4gICAgICAgICAgICAvLyAgIChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHNpbmdsZVF1ZXN0aW9uT2JqLCBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkpKVxyXG4gICAgICAgICAgICBpc1ZhbGlkXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGlmIChcclxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxyXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgJiZcclxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgICAvLyApIHtcclxuICAgICAgICAgIC8vICAgbGV0IGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmo6IGFueSA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UucXVlc3Rpb25zUGFzc3BvcnRVcGxvYWRPYmouZmlsdGVyKChzaW5nbGVPYmo6IGFueSkgPT4gKHNpbmdsZU9ialsncGVyc29uVHlwZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlT2JqWydkbXNJZCddKSkpO1xyXG4gICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqKSkge1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xyXG4gICAgICAgICAgLy8gICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIC8vICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZVxyXG4gICAgICAgICAgLy8gICAgICAgfSk7XHJcbiAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG4gICAgICAgICAgLy8gICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgICAgICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgICAgICAgLy8gICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XHJcbiAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAvLyAgIH1cclxuXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBkZWNsYXJhdGlvbiBxdWVzdGlvbnNcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIChpc1ZhbGlkICYmXHJcbiAgICAgICAgICAgICAgICAvLyAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcclxuICAgICAgICAgICAgICAgIC8vICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXHJcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICYmXHJcbiAgICAgICAgICAgICAgICAvLyAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gPT09XHJcbiAgICAgICAgICAgICAgICAgICdOJykgfHxcclxuICAgICAgICAgICAgICAhdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gfHxcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAvLyApXHJcbiAgICAgICAgICAgICAgLy8gfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXHJcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICBpZiAoXHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcclxuICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXHJcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkgfHxcclxuICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcclxuICAgICAgICAgIC8vICAgICApIHtcclxuICAgICAgICAgIC8vICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxyXG4gICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBmYXRjaCBkZWNsYXJhdGlvblxyXG4gICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xyXG4gICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgaWYoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiYgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xyXG4gICAgICAgIC8vICAgICApe1xyXG4gICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXHJcbiAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXHJcbiAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxyXG4gICAgICAgIC8vICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xyXG5cclxuICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAgICAgLy8gbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAvLyAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgICAgICAvLyAgICAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lzTWVkaWNhbFF1ZXN0aW9uc1ZhbGlkJywgaXNWYWxpZCk7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG48ZGl2ICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHF1ZXN0aW9uTGlzdFwiPlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgICFjaGVja0lmVmFsdWVJc0VtcHR5KHNlY3Rpb25bJ3F1ZXN0aW9ucyddKSAmJlxyXG4gICAgICAgIHNlY3Rpb25bJ3Nob3dTZWN0aW9uJ11cclxuICAgICAgXCJcclxuICAgICAgY2xhc3M9XCJjYXJkIHAtMyBteS0xXCJcclxuICAgICAgaWQ9XCJwZXJzb25Vd01lZGljYWxRdWVzdGlvbnNcIlxyXG4gICAgPlxyXG4gICAgICA8aDYgY2xhc3M9XCJwYWdlLXRpdGxlIGJvbGQtbGFiZWxcIj5cclxuICAgICAgICB7eyBnZXRUaXRsZUNhc2Uoc2VjdGlvbltcInNlY3Rpb25OYW1lXCJdKSB9fVxyXG4gICAgICA8L2g2PlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbnMgb2Ygc2VjdGlvblsncXVlc3Rpb25zJ11cIj5cclxuICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSU1BR0UgVEVYVCdcIj5cclxuICAgICAgICAgIDxpbWcgW3NyY109XCJxdWVzdGlvbnNbJ3NhbXBsZVMzTGluayddXCIgY2xhc3M9XCJkLWJsb2NrIG14LWF1dG9cIiBbYWx0XT1cInF1ZXN0aW9uc1sndGl0bGUnXVwiPlxyXG4gICAgICAgICAgPGgzIFtpbm5lckhUTUxdPVwicXVlc3Rpb25zWydxdWVzdGlvblRleHQnXVwiPjwvaDM+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIlwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJsZSBkLWJsb2NrXCJcclxuICAgICAgICAgICAgPnt7IHF1ZXN0aW9uc1tcInF1ZXN0aW9uVGV4dFwiXSB9fVxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMub3B0aW9uYWxRdWVzdGlvbiA9PT0gJ04nXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjZWUwMDAwXCJcclxuICAgICAgICAgICAgICA+JiM0Mjs8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9sYWJlbD4gLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbXktMVwiPlxyXG4gICAgICAgICAgICA8bGliLXRleHRib3ggWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChibHVyKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjYXJkLXRvcGljIGQtYmxvY2sgZmllbGQtbGFibGVcIlxyXG4gICAgICAgICAgICA+SGVpZ2h0XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogI2VlMDAwMFwiXHJcbiAgICAgICAgICAgICAgPiYjNDI7PC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY29sLWF1dG8gcHgtMCBteS0wIHB5LTAgaGVpZ2h0aW5wdXRcIlxyXG5cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb2wtMTIgbXktMVwiICpuZ0lmPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IHB5LTAgaGVpZ2h0SW5wdXRzXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXRleHRib3ggW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVwiICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTVcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydoZWlnaHRPYmplY3RUeXBlcyddXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cInJvd1wiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIHBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J1xyXG4gICAgICAgICAgICAgICAgXSA9PT0gJ0ZFRVQnXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydoZWlnaHRPYmplY3RUeXBlcyddXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInJvdyBtdC0wIHB0LTBcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ01BUCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcblxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLXNlYXJjaC1jb250YWluZXIgbWItM1wiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGNhcmQtdG9waWNcIj5Mb25naXR1ZGU8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvbmdpdHVkZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGxvbmdpdHVkZVwiXHJcbiAgICAgICAgICBzdGVwPVwiYW55XCJcclxuICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBjYXJkLXRvcGljXCI+TGF0aXR1ZGU8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImxhdGl0dWRlXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbGF0aXR1ZGVcIlxyXG4gICAgICAgICAgc3RlcD1cImFueVwiXHJcbiAgICAgICAgICByZWFkb25seVxyXG4gICAgICAgID5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgICNhZGRyZXNzSW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBhZGRyZXNzXCJcclxuICAgICAgICAoa2V5dXApPVwib25BZGRyZXNzSW5wdXRLZXl1cCgkZXZlbnQpXCJcclxuICAgICAgICAoZm9jdXMpPVwic2hvd0Ryb3Bkb3duID0gdHJ1ZVwiXHJcbiAgICAgICAgKGJsdXIpPVwib25JbnB1dEJsdXIoKVwiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dEcm9wZG93biAmJiBhZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoID4gMFwiXHJcbiAgICBjbGFzcz1cImF1dG9jb21wbGV0ZS1kcm9wZG93biBwb3NpdGlvbi1hYnNvbHV0ZSB3LTEwMCBtdC0xXCJcclxuICAgIHN0eWxlPVwiei1pbmRleDogMTAwMDsgbWF4LWhlaWdodDogMjAwcHg7IG92ZXJmbG93LXk6IGF1dG87IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBib3JkZXItcmFkaXVzOiA0cHg7IGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsMCwwLDAuMSk7XCJcclxuICA+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0Zvcj1cImxldCBzdWdnZXN0aW9uIG9mIGFkZHJlc3NTdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwLTJcIlxyXG4gICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XCJcclxuICAgICAgKG1vdXNlZG93bik9XCJzZWxlY3RBZGRyZXNzKHN1Z2dlc3Rpb24pXCJcclxuICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEluZGV4ID0gaVwiXHJcbiAgICAgIFtjbGFzcy5iZy1saWdodF09XCJob3ZlcmVkSW5kZXggPT09IGlcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPnt7IHN1Z2dlc3Rpb24ubWFpbl90ZXh0IH19PC9kaXY+XHJcbiAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj57eyBzdWdnZXN0aW9uLnNlY29uZGFyeV90ZXh0IH19PC9zbWFsbD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+U3RhcnQgdHlwaW5nIHRvIHNlYXJjaCBmb3IgYWRkcmVzc2VzPC9zbWFsbD5cclxuICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8Z29vZ2xlLW1hcCBbY2VudGVyXT1cImNlbnRlclwiIFt6b29tXT1cInpvb21cIj5cclxuICAgICAgICAgICAgICA8bWFwLW1hcmtlciBbcG9zaXRpb25dPVwiY3VycmVudENvb3JkaW5hdGVzXCI+PC9tYXAtbWFya2VyPlxyXG4gICAgICAgICAgICA8L2dvb2dsZS1tYXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibWVkaWNhbFF1ZXMgbXktMVwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAocXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcclxuICAgICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRScpICYmXHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLXJhZGlvIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLW11bHRpcGxlLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi1jaGVja2JveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRFJPUERPV04nICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItZG9iIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIlwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSEVJR0hUSU5QVVQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RPQ1VQTE9BRCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLXVwbG9hZCBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuIl19
|
|
1837
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUE2QixTQUFTLEVBQXlCLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7O0FBc0J2RixNQUFNLE9BQU8sd0JBQXdCO0lBdUNoQjtJQXRDbkIsc0JBQXNCLEdBQUcsS0FBSyxFQUFPLENBQUM7SUFDWCxZQUFZLENBQWdDO0lBQy9E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NklBQ3ZCLGdCQUFnQjs7NEZBS1Asd0JBQXdCO2tCQW5CcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixlQUFlO3dCQUNmLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3FCQUNqQjsyRUFNMEIsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR29vZ2xlTWFwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2dvb2dsZS1tYXBzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIE5nWm9uZSwgQWZ0ZXJWaWV3SW5pdCwgaW5wdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHF1ZXN0aW9uc1Jlc3BvbnNlIGZyb20gJy4vcXVlc3Rpb25zLmpzb24nXHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUZXh0Ym94Q29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vcmFkaW8vcmFkaW8uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERvYkNvbXBvbmVudCB9IGZyb20gJy4uL2RvYi9kb2IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBsb2FkL3VwbG9hZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNdWx0aXBsZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL211bHRpcGxlLXNlbGVjdC9tdWx0aXBsZS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWFzdGVyQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuLi9tYXN0ZXItY29udHJvbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLW1lZGlhbC1xdWVzdGlvbnMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgVGV4dGJveENvbXBvbmVudCxcclxuICAgIFJhZGlvQ29tcG9uZW50LFxyXG4gICAgQ2hlY2tib3hDb21wb25lbnQsXHJcbiAgICBTZWxlY3RDb21wb25lbnQsXHJcbiAgICBEb2JDb21wb25lbnQsXHJcbiAgICBVcGxvYWRDb21wb25lbnQsXHJcbiAgICBNdWx0aXBsZVNlbGVjdENvbXBvbmVudCxcclxuICAgIEdvb2dsZU1hcHNNb2R1bGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL21lZGlhbC1xdWVzdGlvbnMuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZWRpYWxRdWVzdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIG1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UgPSBpbnB1dDxhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZCgnYWRkcmVzc0lucHV0JykgYWRkcmVzc0lucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBwcml2YXRlIGF1dG9jb21wbGV0ZSE6IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGU7XHJcbiAgc2F2ZVF1ZXN0aW9uUmVxdWVzdExhOiBhbnkgPSBbXTtcclxuICBzYXZlUXVlc3Rpb25SZXF1ZXN0UGg6IGFueSA9IFtdO1xyXG4gIGZpZWxkOiBhbnkgPSBpbnB1dC5yZXF1aXJlZDxhbnk+KCk7XHJcbiAgcXVlc3Rpb25MaXN0OiBhbnkgPSBbXTtcclxuICBjdXJyZW50Q29vcmRpbmF0ZXM6IGFueSA9IHt9O1xyXG4gIHBlcnNvblV3UmVzcG9uc2VPYmo6IGFueSA9IFtdO1xyXG4gIGNlbnRlcjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCA9IHsgbGF0OiA0MC43MzA2MSwgbG5nOiAtNzMuOTM1MjQyIH07XHJcbiAgbGF0aXR1ZGU6IGFueTtcclxuICBsb25naXR1ZGU6IGFueTtcclxuICB6b29tOiBhbnk7XHJcbiAgbWFya2VyOiBhbnkgPSB7fTtcclxuXHJcbiAgcGVyc29uVXdBbnN3ZXJzOiBhbnkgPSB7XHJcbiAgICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdDogJ0ZFRVQnLFxyXG4gIH07XHJcbiAgbWVkUXVlc3Rpb25PYmo6IGFueSA9IHt9O1xyXG4gIGxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94OiBhbnkgPSBbXTtcclxuICBtZWRpY2FsUXVlc3Rpb25zRmVldExpc3Q6IGFueSA9IFtdO1xyXG4gIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0OiBhbnkgPSBbXTtcclxuICBxdWVzdGlvbkhlYWRlcjogYW55ID0gWydlaWEgZGV0YWlscycsICdhYmhhIGRldGFpbHMnLCAncGVwIGRldGFpbHMnXTtcclxuICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdFR5cGVzOiBhbnkgPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnQ20nLFxyXG4gICAgICB2YWx1ZTogJ0NNJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnRmVldCcsXHJcbiAgICAgIHZhbHVlOiAnRkVFVCcsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgYWRkcmVzc1N1Z2dlc3Rpb25zOiBhbnlbXSA9IFtdO1xyXG4gIGhvdmVyZWRJbmRleCA9IC0xO1xyXG4gIHNlYXJjaFRpbWVvdXQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIG5nWm9uZTogTmdab25lKSB7XHJcbiAgICBjb25zb2xlLmxvZygnbWVkaWFsUXVlc3Rpb25SZXNwb25zZWVlZWVlJywgdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKCkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoYW5nZXNbJ21lZGlhbFF1ZXN0aW9uUmVzcG9uc2UnXSAmJlxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ21lZGlhbFF1ZXN0aW9uUmVzcG9uc2UnXS5jdXJyZW50VmFsdWUpXHJcbiAgICApIHtcclxuICAgICAgaWYgKCdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yKSB7XHJcbiAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigocG9zaXRpb24pID0+IHtcclxuICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7XHJcbiAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7XHJcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0ge1xyXG4gICAgICAgICAgICBsYXQ6IHRoaXMubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgIGxuZzogdGhpcy5sb25naXR1ZGUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSB7IC4uLnRoaXMuY3VycmVudENvb3JkaW5hdGVzIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmooKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUF1dG9jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplQXV0b2NvbXBsZXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZShcclxuICAgICAgdGhpcy5hZGRyZXNzSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXHJcbiAgICAgICAgY29tcG9uZW50UmVzdHJpY3Rpb25zOiB7IGNvdW50cnk6ICdJTicgfSxcclxuICAgICAgICBmaWVsZHM6IFsncGxhY2VfaWQnLCAnZ2VvbWV0cnknLCAnbmFtZScsICdmb3JtYXR0ZWRfYWRkcmVzcyddLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZExpc3RlbmVyKCdwbGFjZV9jaGFuZ2VkJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25QbGFjZVNlbGVjdGVkKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUGxhY2VTZWxlY3RlZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBsYWNlID0gdGhpcy5hdXRvY29tcGxldGUuZ2V0UGxhY2UoKTtcclxuXHJcbiAgICBpZiAoIXBsYWNlLmdlb21ldHJ5IHx8ICFwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbikge1xyXG4gICAgICBjb25zb2xlLmxvZygnTm8gZGV0YWlscyBhdmFpbGFibGUgZm9yIGlucHV0OiAnLCBwbGFjZS5uYW1lKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxvY2F0aW9uID0gcGxhY2UuZ2VvbWV0cnkubG9jYXRpb247XHJcbiAgICB0aGlzLmNlbnRlciA9IHtcclxuICAgICAgbGF0OiBsb2NhdGlvbi5sYXQoKSxcclxuICAgICAgbG5nOiBsb2NhdGlvbi5sbmcoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xyXG5cclxuICAgIGlmIChwbGFjZS5nZW9tZXRyeS52aWV3cG9ydCkge1xyXG4gICAgICB0aGlzLnpvb20gPSAxNTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuem9vbSA9IDEzO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBwbGFjZTonLCB7XHJcbiAgICAgIG5hbWU6IHBsYWNlLm5hbWUsXHJcbiAgICAgIGFkZHJlc3M6IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzLFxyXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0b3JlU2VsZWN0ZWRBZGRyZXNzKHBsYWNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RvcmVTZWxlY3RlZEFkZHJlc3MocGxhY2U6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCk6IHZvaWQge1xyXG4gICAgY29uc3QgYWRkcmVzc0RhdGEgPSB7XHJcbiAgICAgIHBsYWNlSWQ6IHBsYWNlLnBsYWNlX2lkLFxyXG4gICAgICBuYW1lOiBwbGFjZS5uYW1lLFxyXG4gICAgICBmb3JtYXR0ZWRBZGRyZXNzOiBwbGFjZS5mb3JtYXR0ZWRfYWRkcmVzcyxcclxuICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY2VudGVyLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO1xyXG5cclxuICAgIGdlb2NvZGVyLmdlb2NvZGUoeyBhZGRyZXNzOiBhZGRyZXNzIH0sIChyZXN1bHRzLCBzdGF0dXMpID0+IHtcclxuICAgICAgaWYgKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzICYmIHJlc3VsdHNbMF0pIHtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHJlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb247XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2VudGVyID0ge1xyXG4gICAgICAgICAgICBsYXQ6IGxvY2F0aW9uLmxhdCgpLFxyXG4gICAgICAgICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XHJcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICdHZW9jb2RlIHdhcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb246ICcgKyBzdGF0dXNcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQWRkcmVzc0lucHV0S2V5dXAoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgcXVlcnkgPSBldmVudC50YXJnZXQudmFsdWU7XHJcblxyXG4gICAgLy8gQ2xlYXIgcHJldmlvdXMgdGltZW91dFxyXG4gICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBIYW5kbGUgYXJyb3cga2V5IG5hdmlnYXRpb25cclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XHJcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5taW4oXHJcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggKyAxLFxyXG4gICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zLmxlbmd0aCAtIDFcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xyXG4gICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IE1hdGgubWF4KHRoaXMuaG92ZXJlZEluZGV4IC0gMSwgLTEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPj0gMCAmJlxyXG4gICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zW3RoaXMuaG92ZXJlZEluZGV4XVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFkZHJlc3ModGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChxdWVyeS5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XHJcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZWFyY2hBZGRyZXNzZXMocXVlcnkpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEFkZHJlc3NlcyhxdWVyeTogc3RyaW5nKSB7XHJcbiAgICAvLyBSZXBsYWNlIHRoaXMgd2l0aCB5b3VyIGFjdHVhbCBhZGRyZXNzIHNlYXJjaCBBUEkgY2FsbFxyXG4gICAgLy8gRm9yIGV4YW1wbGUsIHVzaW5nIEdvb2dsZSBQbGFjZXMgQVBJOlxyXG5cclxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZVNlcnZpY2UoKTtcclxuICAgIHNlcnZpY2UuZ2V0UGxhY2VQcmVkaWN0aW9ucyhcclxuICAgICAge1xyXG4gICAgICAgIGlucHV0OiBxdWVyeSxcclxuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXHJcbiAgICAgIH0sXHJcbiAgICAgIChwcmVkaWN0aW9ucywgc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5PSyAmJlxyXG4gICAgICAgICAgcHJlZGljdGlvbnNcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gcHJlZGljdGlvbnMubWFwKChwcmVkaWN0aW9uKSA9PiAoe1xyXG4gICAgICAgICAgICBwbGFjZV9pZDogcHJlZGljdGlvbi5wbGFjZV9pZCxcclxuICAgICAgICAgICAgbWFpbl90ZXh0OiBwcmVkaWN0aW9uLnN0cnVjdHVyZWRfZm9ybWF0dGluZy5tYWluX3RleHQsXHJcbiAgICAgICAgICAgIHNlY29uZGFyeV90ZXh0OiBwcmVkaWN0aW9uLnN0cnVjdHVyZWRfZm9ybWF0dGluZy5zZWNvbmRhcnlfdGV4dCxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByZWRpY3Rpb24uZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93biA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBZGRyZXNzKHN1Z2dlc3Rpb246IGFueSkge1xyXG4gICAgY29uc3QgYWRkcmVzc0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgJyNhZGRyZXNzSW5wdXQnXHJcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoYWRkcmVzc0lucHV0KSB7XHJcbiAgICAgIGFkZHJlc3NJbnB1dC52YWx1ZSA9IHN1Z2dlc3Rpb24uZGVzY3JpcHRpb247XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZShcclxuICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgICk7XHJcbiAgICBzZXJ2aWNlLmdldERldGFpbHMoXHJcbiAgICAgIHtcclxuICAgICAgICBwbGFjZUlkOiBzdWdnZXN0aW9uLnBsYWNlX2lkLFxyXG4gICAgICAgIGZpZWxkczogWydnZW9tZXRyeScsICdmb3JtYXR0ZWRfYWRkcmVzcyddLFxyXG4gICAgICB9LFxyXG4gICAgICAocGxhY2UsIHN0YXR1cykgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LICYmIHBsYWNlKSB7XHJcbiAgICAgICAgICBjb25zdCBsYXQgPSBwbGFjZS5nZW9tZXRyeT8ubG9jYXRpb24/LmxhdCgpO1xyXG4gICAgICAgICAgY29uc3QgbG5nID0gcGxhY2UuZ2VvbWV0cnk/LmxvY2F0aW9uPy5sbmcoKTtcclxuXHJcbiAgICAgICAgICBpZiAobGF0ICE9PSB1bmRlZmluZWQgJiYgbG5nICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBsbmc7XHJcbiAgICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBsYXQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHsgbGF0LCBsbmcgfTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XHJcbiAgfVxyXG5cclxuICBvbklucHV0Qmx1cigpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpIHtcclxuICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gW107XHJcbiAgICBsZXQgZGF0YTogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKCk7XHJcbiAgICB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94ID0gW107XHJcblxyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcclxuICAgICAgbGV0IHBlcnNvblV3SWRBcnJheTogYW55ID0gW107XHJcbiAgICAgIGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xyXG4gICAgICAgIHBlcnNvblV3SWRBcnJheS5wdXNoKHNpbmdsZVF1ZXN0aW9uT2JqWydwZXJzb25VV0lkJ10pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGEpICYmXHJcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKVxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xyXG4gICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xyXG4gICAgICAgICAgZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXS5mb3JFYWNoKChzaW5nbGVQZXJzb25PYmplY3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddKSkge1xyXG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsndGl0bGUnXSA9PT0gJ01lZGljYWwgRGV0YWlscycpIHtcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UZXh0J10gPSBzaW5nbGVRdWVzdGlvbltcclxuICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvblRleHQnXHJcbiAgICAgICAgICAgICAgICAgICAgXS5yZXBsYWNlKC9cXFxcbi9nLCAnXFxuJyk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID1cclxuICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzaW5nbGVRdWVzdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdQQU4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3ZhbGlkYXRpb25zJ10gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgJ3tcIlR5cGVcIjpcIkFscGhhTnVtZXJpY1wiLFwiTWluVmFsdWVcIjpcIjEwXCIsXCJNYXhWYWx1ZVwiOlwiMTBcIixcInJlZ2V4UGF0dGVyblwiOlwiL14oW2EtekEtWl0pezV9KFswLTldKXs0fShbYS16QS1aXSl7MX0/JC9cIn0nO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0Z0Y2FDbnRjRGV0bHMnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25bJ3ZhbGlkYXRpb25zJ10gPSAne1wiY3VzdG9tVmFsaWRhdGlvblwiOlt7XCJjb3VudHJ5XCI6XCJJTlwiLFwiTWluVmFsdWVcIjpcIjEwXCIsXCJNYXhWYWx1ZVwiOlwiMTBcIixcInJlZ2V4UGF0dGVyblwiOlwiKCheWzYtOV0pezF9KFswLTldKXs5fSQpXCJ9LHtcImNvdW50cnlcIjpcIk9USEVSXCIsXCJNaW5WYWx1ZVwiOlwiNVwiLFwiTWF4VmFsdWVcIjpcIjE0XCJ9XX0nO1xyXG4gICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBzaW5nbGVQZXJzb25PYmplY3RbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0WydxdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ10pICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ11cclxuICAgICAgICAgICAgICAgICAgICAgIF0uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3gucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzaW5nbGVRdWVzdGlvblsnc3RlcCddKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzaW5nbGVRdWVzdGlvblsnc3RlcCddKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHF1ZXN0aW9uW1xyXG4gICAgICAgICAgICAgICAgICAgICdxdWVzdGlvblRleHQnXHJcbiAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZUFsbCgnXFxcXG4nLCAnPGJyPicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0ZlZXRMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ10gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xNZXRhSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ10gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xNZXRhSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ0ZSRUVURVhUJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcclxuICAgICAgICAgICAgICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmVjdlNmdENvcHknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqZWN0Wydyb2xlJ11dW10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkb21haW5JbnRlcm5hbFZhbHVlOiBxdWVzdGlvblsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluVWlWYWx1ZTogJ04nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluSW50ZXJuYWxWYWx1ZTogcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICBkb21haW5VaVZhbHVlOiAnWScsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ2hhcmRDb3B5TGFuZycpIHtcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID0gJ0hBUkQgQ09QWSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uc29ydChcclxuICAgICAgICAgICAgICAgIChhOiBhbnksIGI6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgcXVlc3Rpb25zTGlzdEZvckxBOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnc3RlcCddID09PSBzdGVwc1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgc3RlcDogc3RlcHMsXHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVQZXJzb25PYmplY3RbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXHJcbiAgICAgICAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcclxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXVxyXG4gICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikpIHtcclxuICAgICAgICAgICAgICAgIC8vIEhhcmQgQ29weSBhbmQgTWFwIHF1ZXN0aW9uXHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uOiBhbnkgPSBmaWx0ZXJlZE9iai5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmVjdlNmdENvcHknXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJ01BUCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdZJyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBOUkkgdGhlbiBwYXNzcG9ydCB1cGxvYWQgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdOYXRpb25hbGl0eSdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnUEFTU1BPUlRfVVBMT0FEJyxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiAnUGFzc3BvcnQgRGV0YWlscyAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIG9ialsncXVlc3Rpb25zJ10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnUEFTU1BPUlRfVVBMT0FEJyxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFF1ZXN0aW9uOiAnTicsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiAnUGFzc3BvcnQgRGV0YWlscyAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnZm9yZ25OYXRpb25hbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uc0xpc3RGb3JMQS5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBsZXQgbGlmZUFzc3VyZWRPYmplY3RJbmRleEluTWFzdGVyOiBhbnkgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maW5kSW5kZXgoKHNpbmdsZU9iajogYW55KSA9PiBzaW5nbGVPYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqZWN0Wydyb2xlJ10pO1xyXG4gICAgICAgICAgICAvLyBpZiAobGlmZUFzc3VyZWRPYmplY3RJbmRleEluTWFzdGVyICE9PSB0aGlzLm51bWJlck1pbnVzT25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gcXVlc3Rpb25zTGlzdEZvckxBO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9iaiA9IGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG5cclxuICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ10gPSB7XHJcbiAgICAgIGNvbnRyb2xTdHlsZToge1xyXG4gICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcclxuICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxyXG4gICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxyXG4gICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcclxuICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcclxuICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICB3aWR0aDogbnVsbCxcclxuICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXHJcbiAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcclxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcclxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcclxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcclxuICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxyXG4gICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcclxuICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcclxuICAgICAgICBwYWRkaW5nOiBudWxsLFxyXG4gICAgICAgIG1hcmdpbjogbnVsbCxcclxuICAgICAgICBpc01hc3RlckNzczogbnVsbCxcclxuICAgICAgICBjb250cm9sTWV0YUlkOiAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXHJcbiAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXHJcbiAgICAgICAgaGVpZ2h0OiBudWxsLFxyXG4gICAgICAgIG1pbkhlaWdodDogbnVsbCxcclxuICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgbWluV2lkdGg6IG51bGwsXHJcbiAgICAgICAgbWF4V2lkdGg6IG51bGwsXHJcbiAgICAgICAgY3NzQ2xhc3M6IG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpZWxkTmFtZTogbnVsbCxcclxuICAgICAgbGFiZWw6ICdmZWV0IC8gaW5jaGVzJyxcclxuICAgICAgcGxhY2VIb2xkZXI6ICcnLFxyXG4gICAgICBtZXRhSWQ6ICcnLFxyXG4gICAgICBpc1Zpc2libGU6IHRydWUsXHJcbiAgICAgIGlzRGlzYWJsZTogZmFsc2UsXHJcbiAgICAgIHZhbGlkYXRvcnM6IHtcclxuICAgICAgICBpc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICByZXF1aXJlZE1lc3NhZ2U6ICdUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eScsXHJcbiAgICAgICAgbWluTGVuZ3RoOiBudWxsLFxyXG4gICAgICAgIG1pbkxlbmd0aE1lc3NhZ2U6IG51bGwsXHJcbiAgICAgICAgbWF4TGVuZ3RoOiAxNTAsXHJcbiAgICAgICAgbWF4TGVuZ3RoTWVzc2FnZTogbnVsbCxcclxuICAgICAgICBwYXR0ZXJuOiBudWxsLFxyXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlOiAnJyxcclxuICAgICAgfSxcclxuICAgICAgb3B0aW9uczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxhYmVsOiAnQ20nLFxyXG4gICAgICAgICAgdmFsdWU6ICdDTScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsYWJlbDogJ0ZlZXQnLFxyXG4gICAgICAgICAgdmFsdWU6ICdGRUVUJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICBjc3NDbGFzczogbnVsbCxcclxuICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgIHN0eWxlOiBudWxsLFxyXG4gICAgICBpbWFnZVVybDogbnVsbCxcclxuICAgICAgY29uZmlnRGF0YToge30sXHJcbiAgICAgIG1ldGFEYXRhT2JqOiBudWxsLFxyXG4gICAgICBpc1Nob3dMYWJlbDogZmFsc2UsXHJcbiAgICAgIGlzTWFzdGVyQ29udHJvbDogZmFsc2UsXHJcbiAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxyXG4gICAgICB2YWx1ZSA9PT0gJycgfHxcclxuICAgICAgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB8fFxyXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09ICd7fSdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUaXRsZUNhc2UoaGVhZGVyOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGhlYWRlcikge1xyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkhlYWRlci5pbmNsdWRlcyhoZWFkZXIudG9Mb2NhbGVMb3dlckNhc2UoKSkpIHtcclxuICAgICAgICBsZXQgdmFsID0gaGVhZGVyLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgcmV0dXJuIHZhbFswXS50b1VwcGVyQ2FzZSgpICsgJyAnICsgdGhpcy50b1RpdGxlQ2FzZSh2YWxbMV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChoZWFkZXIudG9VcHBlckNhc2UoKSA9PT0gJ0ZBVENBIERFVEFJTFMnKSB7XHJcbiAgICAgICAgICByZXR1cm4gaGVhZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50b1RpdGxlQ2FzZShoZWFkZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b1RpdGxlQ2FzZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgIC9cXHdcXFMqL2csXHJcbiAgICAgICAgICAodHh0OiBhbnkpID0+IHR4dFswXS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZpZWxkKHF1ZXN0aW9uT2JqOiBhbnkpIHtcclxuICAgIGxldCBvcHRpb25zT2JqOiBhbnkgPSBbXTtcclxuICAgIGxldCBjb250cm9sU3R5bGUgOiBhbnkgPSB7fTtcclxuICAgIGlmIChxdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pIHtcclxuICAgICAgcXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZU9wdGlvblZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICBvcHRpb25zT2JqLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6IHNpbmdsZU9wdGlvblZhbHVlWydkb21haW5VaVZhbHVlJ10sXHJcbiAgICAgICAgICB2YWx1ZTogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBsZXQgbWluTGVuZ3RoOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IG1heExlbmd0aDogYW55ID0gbnVsbDtcclxuICAgIGxldCBwYXR0ZXJuOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IHBhdHRlcm5NZXNzYWdlOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IGNvbmZpZ0RhdGE6IGFueSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5maWVsZCgpPy5jb25maWdEYXRhKVxyXG4gICAgICA/IHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YVxyXG4gICAgICA6IHt9O1xyXG5cclxuICAgIGlmKHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gICdSQURJTyBCVVRUT04nIHx8IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0FERE1PUkUnKSB7XHJcbiAgICAgIGNvbnRyb2xTdHlsZSA9IHtcclxuICAgICAgICAgICAgICAgICAgXCJjb250cm9sVHlwZVwiOiBcInJhZGlvXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyQ29sb3JcIjogXCIjREFEQURBXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyV2lkdGhcIjogXCIxcHhcIixcclxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJSYWRpdXNcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiBcIjEycHhcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb250V2VpZ2h0XCI6IFwiNDAwXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9udEZhbWlseVwiOiBcIk11bGlzaFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImJhY2tncm91bmRcIjogXCIjRkZGRkZGXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiY2FyZXRDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcIm51ZGdlRGlzcGxheUltYWdlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Db2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyQ29sb3JcIjogXCIjZmZiYjAwXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCYWNrZ3JvdW5kXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNDb2xvclwiOiBcIiM0NDQ0NDRcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Db2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcclxuICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlcldpZHRoXCI6IFwiMXB4XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJDb2xvclwiOiBcIiM0NDQ0NDRcIixcclxuICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQ29sb3JcIjogXCIjRUNFQ0VDXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUJhY2tncm91bmRcIjogXCIjRUNFQ0VDXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlcldpZHRoXCI6IFwiMXB4XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2xvclwiOiBcIiM0NDQ0NDRcIixcclxuICAgICAgICAgICAgICAgICAgXCJjcmVhdGVkRGF0ZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcInBhZGRpbmdcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJtYXJnaW5cIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJpc01hc3RlckNzc1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImNvbnRyb2xNZXRhSWRcIjogXCJBTExfQ09NX0dFTl9DVFJMX3JhZGlvX25vbWluZWVHZW5kZXJfVjFcIixcclxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJTdHlsZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcIm1pbkhlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcIm1heEhlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcIm1pbldpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWF4V2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJjc3NDbGFzc1wiOiBudWxsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25PYmpbJ3ZhbGlkYXRpb25zJ10pKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0aW9uT2JqOiBhbnkgPSBKU09OLnBhcnNlKHF1ZXN0aW9uT2JqWyd2YWxpZGF0aW9ucyddKTtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnTWluVmFsdWUnXSkpIHtcclxuICAgICAgICBtaW5MZW5ndGggPSB2YWxpZGF0aW9uT2JqWydNaW5WYWx1ZSddO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ01heFZhbHVlJ10pKSB7XHJcbiAgICAgICAgbWF4TGVuZ3RoID0gdmFsaWRhdGlvbk9ialsnTWF4VmFsdWUnXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydUeXBlJ10pKSB7XHJcbiAgICAgICAgcGF0dGVybiA9IHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ051bWVyaWMnID8gJ15bMC05XSskJyA6IG51bGw7XHJcbiAgICAgICAgcGF0dGVybk1lc3NhZ2UgPVxyXG4gICAgICAgICAgdmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYydcclxuICAgICAgICAgICAgPyAnT25seSBudW1iZXJzIGFyZSBhbGxvd2VkLidcclxuICAgICAgICAgICAgOiBudWxsO1xyXG5cclxuICAgICAgICBjb25maWdEYXRhWydpbnB1dFR5cGUnXSA9IHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ051bWVyaWMnID8gJ251bWJlcicgOiAndGV4dCc7XHJcbiAgICAgICAgaWYgKHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ051bWVyaWMnKSB7XHJcbiAgICAgICAgICBtYXhMZW5ndGggPSAnOScucmVwZWF0KE51bWJlcihtYXhMZW5ndGgpKTtcclxuICAgICAgICAgIGNvbmZpZ0RhdGFbJ21heFZhbHVlJ10gPSBtYXhMZW5ndGg7XHJcbiAgICAgICAgICBjb25maWdEYXRhWydtaW5WYWx1ZSddID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb25maWdEYXRhOiBjb25maWdEYXRhLFxyXG4gICAgICBjb250cm9sU3R5bGU6IGNvbnRyb2xTdHlsZSxcclxuICAgICAgY29udHJvbFR5cGU6XHJcbiAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJ1xyXG4gICAgICAgICAgPyAndGV4dCdcclxuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUkFESU8gQlVUVE9OJyB8fFxyXG4gICAgICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJ1xyXG4gICAgICAgICAgPyAncmFkaW8nXHJcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyB8fFxyXG4gICAgICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTidcclxuICAgICAgICAgID8gJ2NoZWNrYm94J1xyXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcclxuICAgICAgICAgID8gJ2RhdGUnXHJcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RST1BET1dOJ1xyXG4gICAgICAgICAgPyAnc2VsZWN0J1xyXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnXHJcbiAgICAgICAgICA/ICdmaWxlJ1xyXG4gICAgICAgICAgOiAnJyxcclxuICAgICAgZmllbGROYW1lOiBxdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSxcclxuICAgICAgaXNEaXNhYmxlOiBmYWxzZSxcclxuICAgICAgbGFiZWw6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblRleHQnXSxcclxuICAgICAgcGxhY2VIb2xkZXI6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblRleHQnXSxcclxuICAgICAgdmFsaWRhdG9yczoge1xyXG4gICAgICAgIGlzUmVxdWlyZWQ6IHF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICBtaW5MZW5ndGgsXHJcbiAgICAgICAgbWF4TGVuZ3RoLFxyXG4gICAgICAgIHBhdHRlcm4sXHJcbiAgICAgICAgcGF0dGVybk1lc3NhZ2UsXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBpc1Zpc2libGU6IHRydWUsXHJcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNPYmosXHJcbiAgICAgIGlzU2hvd0xhYmVsOiB0cnVlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKHF1ZXN0aW9uPzogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZygnc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzJywgdGhpcy5xdWVzdGlvbkxpc3QpXHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnF1ZXN0aW9uTGlzdCkpIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pKSB7XHJcbiAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93UXVlc3Rpb24oc2luZ2xlUXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgLy8gaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChkb21haW5WYWx1ZU9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW2RvbWFpblZhbHVlT2JqWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkge1xyXG4gICAgICAgICAgICAgIC8vICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tkb21haW5WYWx1ZU9ialsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXTtcclxuICAgICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBpc05vbmVJbkRvbWFpblZhbHVlczogYW55ID0gc2luZ2xlUXVlc3Rpb25bXHJcbiAgICAgICAgICAgICAgICAgICdkb21haW5WYWx1ZXMnXHJcbiAgICAgICAgICAgICAgICBdLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZU9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZU9ialsnZG9tYWluVWlWYWx1ZSddLnRvVXBwZXJDYXNlKCkgPT09ICdOT05FJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaXNOb25lSW5Eb21haW5WYWx1ZXMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc05vbmVJbkRvbWFpblZhbHVlc1swXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc05vbmVJbkRvbWFpblZhbHVlc1swXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBub25lIGlzIHNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgYWxsIHNlbGVjdGVkIGNoZWNrYm94IHF1ZXN0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmRvbWFpblVpVmFsdWUudG9VcHBlckNhc2UoKSAhPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOT05FJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWUuaXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGxldCBpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0OiBhbnkgPSB0aGlzLmlzQmxvY2tlZFF1ZXN0aW9uc0xpc3QuZmlsdGVyKChzaW5nbGVCbG9ja2VkT2JqOiBhbnkpID0+IHNpbmdsZUJsb2NrZWRPYmpbJ3NlY3Rpb25UaXRsZSddLnRyaW0oKSA9PT0gc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50cmltKCkpO1xyXG4gICAgICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0KSkge1xyXG4gICAgICAgIC8vICAgaWYgKGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3RbMF0uaXNCbG9ja2VkRm9yQ3VzdG9tZXJGbG93ICYmICF0aGlzLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xyXG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZEluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKTtcclxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikpIHtcclxuICAgICAgICAvLyAgICAgICAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXTtcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgaWYgKChpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0WzBdLmlzQmxvY2tlZEZvckFnZW50RmxvdyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QyMCcgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMDUnIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDA2JykgJiYgdGhpcy5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcclxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWRJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSk7XHJcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAvLyAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2ZpbHRlcmVkSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xyXG4gICAgICAgIC8vICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ107XHJcbiAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgIC8vICAgICB9KTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgbGV0IGhpZGRlblF1ZXN0aW9uczogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25PYmo6IGFueSkgPT4gIXNpbmdsZVNlY3Rpb25PYmpbJ3Nob3dTZWN0aW9uJ11cclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGlkZGVuUXVlc3Rpb25zKSkge1xyXG4gICAgICAgICAgaGlkZGVuUXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5xdWVzdGlvbkxpc3Quc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBsaXN0JywgdGhpcy5xdWVzdGlvbkxpc3QpO1xyXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBhbnN3ZXJzJywgdGhpcy5wZXJzb25Vd0Fuc3dlcnMpO1xyXG4gICAgdGhpcy5zYXZlUXVlc3Rpb25EZXRhaWxzKCk7XHJcbiAgfVxyXG5cclxuICBzaG93UXVlc3Rpb24oY3VycmVudFF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIGxldCBzaG93UXVlc3Rpb246IGFueSA9IGZhbHNlO1xyXG4gICAgbGV0IHN1YlF1ZXN0aW9uczogYW55ID0gW107XHJcbiAgICAvLyBsZXQgY3VycmVudFNlY3Rpb25JbmRleDogYW55ID0gcXVlc3Rpb25zUmVzcG9uc2VbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHBlcnNvblJvbGUpXHJcbiAgICAvLyBsZXQgcm9sZSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtjdXJyZW50U2VjdGlvbkluZGV4XVsncm9sZSddXHJcblxyXG4gICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIGxldCBpc1N1YlF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBbXTtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSkpIHtcclxuICAgICAgICBpc1N1YlF1ZXN0aW9uT2JqZWN0ID0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5maWx0ZXIoXHJcbiAgICAgICAgICAocXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PlxyXG4gICAgICAgICAgICBxdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzU3ViUXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHN1YlF1ZXN0aW9ucy5wdXNoKHNpbmdsZVF1ZXN0aW9uKTtcclxuICAgICAgICBpc1N1YlF1ZXN0aW9uT2JqZWN0LmZvckVhY2goKHNpbmdsZVN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10udG9TdHJpbmcoKVswXSAhPT0gJyEnICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPT09XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddKSB8fFxyXG4gICAgICAgICAgICAoc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpWzBdID09PSAnIScgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gIT09XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnIScpWzFdKSB8fFxyXG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChzaW5nbGVPYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlT2JqWyd2YWx1ZSddID09PVxyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddXHJcbiAgICAgICAgICAgICAgKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHNob3dRdWVzdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9ucykgJiZcclxuICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKVxyXG4gICAgKSB7XHJcbiAgICAgIHNob3dRdWVzdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ10pICYmXHJcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxyXG4gICAgICApICYmXHJcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXHJcbiAgICAgICAgXVxyXG4gICAgICApICYmXHJcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cclxuICAgICAgXSA9PT0gY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uQW5zd2VyJ11cclxuICAgICkge1xyXG4gICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGN1cnJlbnRRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdOT0RJU1BMQVknKSB7XHJcbiAgICAgIHNob3dRdWVzdGlvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNob3dRdWVzdGlvbjtcclxuICB9XHJcblxyXG4gIHNhdmVRdWVzdGlvbkRldGFpbHMoKSB7XHJcbiAgICAvLyByZW1vdmUgYWxsIGNoZWNrYm94IHF1ZXN0aW9ucyBwcmVzZW50IGluIHZhbHVlc1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveCkpIHtcclxuICAgICAgLy8gbGV0IGxpZmVBc3N1cmVka2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ10pO1xyXG4gICAgICAvLyBsZXQgcG9saWN5QXNzdXJlZEtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXSk7XHJcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZE9uZUtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddKTtcclxuICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkVHdvS2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkVHdvJ10pO1xyXG4gICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vycy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgIGlmIChpc05hTihOdW1iZXIoc2luZ2xlS2V5KSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV0pKSB7XHJcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICAvLyBwb2xpY3lBc3N1cmVkS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV0pKSB7XHJcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgLy8gbGlmZUFzc3VyZWRPbmVLZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIC8vIGxpZmVBc3N1cmVkVHdvS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkVHdvJ11bc2luZ2xlS2V5XSkpIHtcclxuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gbGV0IGhlaWdodEluSW5jaGVzT2JqOiBhbnkgPSBbXTtcclxuICAgIC8vIGxldCBoZWlnaHRJbkZlZXRPYmo6IGFueSA9IFtdO1xyXG4gICAgLy8gbGV0IGhlaWdodEluQ2VudGltZXRlck9iajogYW55ID0gW107XHJcbiAgICBsZXQgaXNWYWxpZDogYW55ID0gdHJ1ZTtcclxuICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddKSkge1xyXG4gICAgLy8gICBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZCcpO1xyXG4gICAgLy8gICBpZiAobGFJbmRleCAhPT0gLTEgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XSkpIHtcclxuICAgIC8vICAgICBoZWlnaHRJbkluY2hlc09iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJyk7XHJcbiAgICAvLyAgICAgaGVpZ2h0SW5GZWV0T2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKTtcclxuICAgIC8vICAgICBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIGFuZCBub24gbWVkaWNhbCBxdWVzdGlvbnMgOlxyXG4gICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqKSAmJiBpc1ZhbGlkKSB7XHJcbiAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9iai5mb3JFYWNoKChzaW5nbGVQZXJzb25PYmo6IGFueSwgc2luZ2xlUGVyc29uSW5kZXg6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10pICYmIGlzVmFsaWQpIHtcclxuICAgIC8vICAgICAgIGxldCByb2xlOiBhbnkgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkJyA/IFwibGlmZSBhc3N1cmVkXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ3BvbGljeUhvbGRlcicgPyBcInBvbGljeSBob2xkZXJcIiA6IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWRPbmUnID8gXCJKb2ludCBMaWZlIDFcIiA6IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWRUd28nID8gXCJKb2ludCBMaWZlIDJcIiA6IFwiXCI7XHJcbiAgICAvLyAgICAgICBzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSkgJiYgaXNWYWxpZCkge1xyXG4gICAgLy8gICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09ICdURUxMX1VTX01PUkUnIHx8IHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT0gJ0JBU0lDX0RFVEFJTFMnKSAmJiBpc1ZhbGlkKSB7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxyXG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpO1xyXG4gICAgLy8gICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopICYmICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddKSkpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDEnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRU9ORScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAyJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVUV08nKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cclxuICAgIC8vICAgICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKTtcclxuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiYgaXNWYWxpZCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBDTSAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIENNICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDEnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRU9ORScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAyJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVUV08nKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGJhc2ljIHF1ZXN0aW9uc1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKFxyXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdERUNMQVJBVElPTicgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdoYXJkQ29weUxhbmcnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRGJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEknICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICgoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dKSkgfHxcclxuICAgIC8vICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChzaW5nbGVRdWVzdGlvbk9iaiwgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pKSkgJiYgaXNWYWxpZFxyXG4gICAgLy8gICAgICAgICAgICAgKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgIGlmIChcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHJlZGlyZWN0XHJcbiAgICAvLyAgICAgICAgICAgICApIHtcclxuICAgIC8vICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmo6IGFueSA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UucXVlc3Rpb25zUGFzc3BvcnRVcGxvYWRPYmouZmlsdGVyKChzaW5nbGVPYmo6IGFueSkgPT4gKHNpbmdsZU9ialsncGVyc29uVHlwZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlT2JqWydkbXNJZCddKSkpO1xyXG4gICAgLy8gICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBkZWNsYXJhdGlvbiBxdWVzdGlvbnNcclxuICAgIC8vICAgICAgICAgICAgIGlmIChpc1ZhbGlkICYmIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcclxuICAgIC8vICAgICAgICAgICAgICkge1xyXG4gICAgLy8gICAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnMpICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pKSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkpIHtcclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIHN1YiBxdWVzdGlvbnNcclxuICAgIC8vICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgIGlmIChcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHRoaXMuc2hvd1N1YlF1ZXN0aW9uKHF1ZXN0aW9uKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAoKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB8fFxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChxdWVzdGlvbiwgJ2xpZmVBc3N1cmVkJykpKVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICkge1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGFuc3dlciBhbGwgbWVkaWNhbCBzdWIgcXVlc3Rpb25zICcgKyBxdWVzdGlvblsncXVlc3Rpb25JZCddICsgJyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyB9XHJcbiAgICAvLyAgICAgICAgICAgfSk7XHJcblxyXG4gICAgLy8gICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGZhdGNoIGRlY2xhcmF0aW9uXHJcbiAgICAvLyAgICAgICAgICAgLy8gaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucykgJiYgaXNWYWxpZCl7XHJcbiAgICAvLyAgICAgICAgICAgLy8gc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMuZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6YW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICBpZihpc1ZhbGlkICYmIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJiBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICl7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgaWYoIGlzVmFsaWQgJiZcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnMpICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAgJiZcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pKSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkpIHtcclxuXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xyXG4gICAgLy8gICAgICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgLy8gICB9XHJcbiAgICAvLyAgICAgICAgICAgLy8gfSk7XHJcbiAgICAvLyAgICAgICAgICAgLy8gfVxyXG5cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAoKGlzVmFsaWQgfHwgc2F2ZWRyYWZ0KSB8fCB0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsKSB7XHJcbiAgICAvLyBpZiAoaXNWYWxpZCkge1xyXG4gICAgaWYgKGlzVmFsaWQpIHtcclxuICAgICAgLy8gdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkodHJ1ZSk7XHJcbiAgICAgIC8vIGxldCByZXF1ZXN0OiBhbnkgPSBbXTtcclxuICAgICAgbGV0IG1haW5SZXFPYmo6IGFueSA9IFtdO1xyXG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uczogYW55ID0gW107XHJcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvckxhOiBhbnkgPSBbXTtcclxuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yUGg6IGFueSA9IFtdO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddKSkge1xyXG4gICAgICAgIC8vIHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJlxyXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cclxuICAgICAgICAgICAgJ1RFTExfVVNfTU9SRScgfHxcclxuICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxyXG4gICAgICAgICAgICAgICdCQVNJQ19ERVRBSUxTJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxyXG4gICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgLy8gcGFzcyBoZWlnaHQgaW4gY20gb2JqXHJcbiAgICAgICAgICAgIGxldCBjbU9iakluQW5zd2Vyc2luZGV4OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGNtT2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tjbU9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxyXG4gICAgICAgICAgICAgICAgKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxyXG4gICAgICAgICAgICAgICAgKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGVpZ2h0IGluIGluY2hlc1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9IChcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gKiAwLjM5MzcwMVxyXG4gICAgICAgICAgICApLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXQ6IGFueSA9XHJcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdCgoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdKSA+IDEyXHJcbiAgICAgICAgICAgICAgICA/IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDEpXHJcbiAgICAgICAgICAgICAgICA6IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICBsZXQgaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tpbmNoZXNvYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBoZWlnaHQgaW4gZmVldFxyXG5cclxuICAgICAgICAgICAgbGV0IGZlZXRPYmpJbkFuc3dlcnNpbmRleDogYW55ID1cclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoZmVldE9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbZmVldE9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUZsb2F0KGhlaWdodEluRmVldCkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluRmVldE9ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cclxuICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSkge1xyXG4gICAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID1cclxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddKSAqXHJcbiAgICAgICAgICAgICAgICAgIDEyICtcclxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddKTtcclxuICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5DbTogYW55ID0gKFxyXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkluY2hlcykgLyAwLjM5MzcwMVxyXG4gICAgICAgICAgICAgICkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgICBsZXQgZmVldE9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChmZWV0T2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZlZXRPYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xyXG4gICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXHJcbiAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpICtcclxuICAgICAgICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCdcclxuICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxldCBpbmNoZXNvYmpJbkFuc3dlcnNpbmRleDogYW55ID1cclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChpbmNoZXNvYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkluY2hlc09ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbGV0IGNtT2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgaWYgKGNtT2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2NtT2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5DbSkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkNtQW5zd2VyT2JqZWN0OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNtQW5zd2VyT2JqZWN0KSAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DbUFuc3dlck9iamVjdFswXVsnYW5zd2VyJ10pXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2hlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddXSA9XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRJbkNtQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdDogYW55ID1cclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3QpICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdFswXVsnYW5zd2VyJ10pXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2hlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ11dID1cclxuICAgICAgICAgICAgICAgIGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10pXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldEFuc3dlck9iamVjdDogYW55ID1cclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldEFuc3dlck9iamVjdCkgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldEFuc3dlck9iamVjdFswXVsnYW5zd2VyJ10pXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2hlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddXSA9XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpc05vRGlzcGxheVF1ZXN0aW9uSW5TZWN0aW9uOiBhbnkgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ11cclxuICAgICAgICApXHJcbiAgICAgICAgICA/IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgICAoc2luZ2xlRGF0YTogYW55KSA9PiBzaW5nbGVEYXRhWydxdWVzdGlvblR5cGUnXSA9PT0gJ05PRElTUExBWSdcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgOiBbXTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSB8fFxyXG4gICAgICAgICAgICBpc05vRGlzcGxheVF1ZXN0aW9uSW5TZWN0aW9uLmxlbmd0aCA+IDApICYmXHJcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdoYXJkQ29weUxhbmcnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPSAnRW5nbGlzaCc7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWRPcHRpb25zQXJyLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY2hlY2tlZE9wdGlvbnNBcnIpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIC8vIGZvciBjaGVja2JveCBxdWVzdGlvblxyXG5cclxuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3Q6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZUFuc3dlck9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIG9ialsnYW5zd2VyJ10gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdW1xyXG4gICAgICAgICAgICAgICAgICAnYW5zd2VyJ1xyXG4gICAgICAgICAgICAgICAgXSA9IGNoZWNrZWRPcHRpb25zQXJyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgLy8gbm9uIGNoZWNrYm94IHF1ZXN0aW9uXHJcbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyOlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVtcclxuICAgICAgICAgICAgICAgICAgJ2Fuc3dlcidcclxuICAgICAgICAgICAgICAgIF0gPVxyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcclxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGlmKHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkge1xyXG4gICAgICAgICAgICAvLyAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KChzaW5nbGVBbnN3ZXJPYmogOiBhbnkpID0+IChzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAgJiYgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSkpXHJcbiAgICAgICAgICAgIC8vICAgaWYocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgLy8gICAgICAgYW5zd2VyOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUicgPyB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShuZXcgRGF0ZSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSksICd5eXl5LU1NLWRkJykgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSxcclxuICAgICAgICAgICAgLy8gICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgLy8gICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAvLyAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgLy8gICAgIH07XHJcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgLy8gICAgIGlmKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xyXG4gICAgICAgICAgICAvLyAgICAgICBsZXQgY2hlY2tlZE9wdGlvbnNBcnIgOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgLy8gICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZURvbWFpblZhbHVlIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10pO1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICAgIG9ialsnYW5zd2VyJ10gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vICAgICAvLyBvYmplY3QgYWxyZWFkeSB0aGVyZSBzbyBvdmVyIHJpZGUgdGhlIG5ldyBhbnN3ZXJcclxuICAgICAgICAgICAgLy8gICAgIGlmKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xyXG4gICAgICAgICAgICAvLyAgICAgICBsZXQgY2hlY2tlZE9wdGlvbnNBcnIgOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgLy8gICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZURvbWFpblZhbHVlIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10pO1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdWydhbnN3ZXInXSA9IGNoZWNrZWRPcHRpb25zQXJyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVsnYW5zd2VyJ10gPSAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInID8gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0obmV3IERhdGUodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pLCAneXl5eS1NTS1kZCcpIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XHJcbiAgICAgICAgICAgIC8vICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JldEZpbmFuY0VsZ2JsJykge1xyXG4gICAgICAgICAgICAvLyAgIGxldCBmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleCgoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+IChzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAmJiBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddKSlcclxuICAgICAgICAgICAgLy8gICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIC8vICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAvLyAgICAgYW5zd2VyOiB0aGlzLnNoYXJlZFNlcnZpY2UuZmluYW5jaWFsRWxpZ2liaWxpdHksXHJcbiAgICAgICAgICAgIC8vICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAvLyAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAvLyAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgIC8vICAgfTtcclxuICAgICAgICAgICAgLy8gICBpZiAoZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgLy8gICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xyXG4gICAgICAgICAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXhdWydhbnN3ZXInXSA9IHRoaXMuc2hhcmVkU2VydmljZS5maW5hbmNpYWxFbGlnaWJpbGl0eTtcclxuICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0OiBhbnkgPSBbXHJcbiAgICAgICAgLi4ubmV3IFNldChcclxuICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMubWFwKChpdGVtOiBhbnkpID0+XHJcbiAgICAgICAgICAgIGl0ZW0ucGVyc29uVVdJZC50b1N0cmluZygpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSxcclxuICAgICAgXTtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0KSkge1xyXG4gICAgICAgIG1haW5SZXF1ZXN0Rm9yTGEgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcclxuICAgICAgICAgIChzaW5nbGVBbnN3ZXI6IGFueSkgPT5cclxuICAgICAgICAgICAgc2luZ2xlQW5zd2VyWydwZXJzb25VV0lkJ10gPT09IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdFswXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdC5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yUGggPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcclxuICAgICAgICAgICAgKHNpbmdsZUFuc3dlcjogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHNpbmdsZUFuc3dlclsncGVyc29uVVdJZCddID09PSBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3RbMV1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBzYXZlUmVxdWVzdHNBcnJheTogYW55ID0gW107XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KG1haW5SZXF1ZXN0Rm9yTGEpKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlUXVlc3Rpb25SZXF1ZXN0TGEgPSBtYWluUmVxdWVzdEZvckxhO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICAnc2F2ZVF1ZXN0aW9uUmVxdWVzdExhJyxcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1haW5SZXF1ZXN0Rm9yTGEpXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvckxhLCAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xyXG4gICAgICAgIC8vIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yTGEsICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50KSAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50ICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSA/IHRydWUgOiAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KG1haW5SZXF1ZXN0Rm9yUGgpKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlUXVlc3Rpb25SZXF1ZXN0UGggPSBtYWluUmVxdWVzdEZvclBoO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICAnc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoJyxcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1haW5SZXF1ZXN0Rm9yUGgpXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyAgc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JQaCwgIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcclxuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvclBoLCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCkgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgPyB0cnVlIDogIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy52YWxpZGF0ZU1lZGljYWxRdWVzdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIGdldENvb2tpZVZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb29raWUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcclxuICAgIGxldCB0b2tlbk5hbWUgPSAnJztcclxuICAgIGxldCB0b2tlblZhbHVlID0gJyc7XHJcbiAgICBjb25zdCBpbmRleDIgPSAyO1xyXG4gICAgY29va2llLmZvckVhY2goKGRhdGEpID0+IHtcclxuICAgICAgaWYgKGRhdGEuc3BsaXQoJz0nKVswXS5pbmNsdWRlcyhuYW1lKSAmJiAhIWRhdGEuc3BsaXQoJz0nKVsxXSkge1xyXG4gICAgICAgIHRva2VuTmFtZSA9IGRhdGEuc3BsaXQoJz0nKVswXS50cmltKCk7XHJcbiAgICAgICAgdG9rZW5WYWx1ZSA9IGRhdGEuc3BsaXQoJz0nKVsxXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbmFtZSA9PT0gJ2xpbmsnICYmXHJcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpWzBdLmluY2x1ZGVzKG5hbWUpICYmXHJcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml0gIT09IG51bGwgJiZcclxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRva2VuVmFsdWUgPSB0b2tlblZhbHVlICsgJz0nICsgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRva2VuVmFsdWU7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZU1lZGljYWxRdWVzdGlvbnMoKSB7XHJcbiAgICBsZXQgaXNWYWxpZDogYW55ID0gdHJ1ZTtcclxuICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSkgJiYgaXNWYWxpZCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcclxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XHJcbiAgICAgICAgICAgICdURUxMX1VTX01PUkUnIHx8XHJcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cclxuICAgICAgICAgICAgICAnQkFTSUNfREVUQUlMUycpICYmXHJcbiAgICAgICAgICBpc1ZhbGlkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgZW50ZXJlZCBpbiBmZWV0XHJcbiAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdGRUVUJykge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURidcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVxyXG4gICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXHJcbiAgICAgICAgICAgICAgICApKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcclxuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XHJcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xyXG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgICAgICAgICAgIC8vICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgICAgLy8gICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGVcclxuICAgICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXHJcbiAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcclxuICAgICAgICAgICAgaXNWYWxpZFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGJhc2ljIHF1ZXN0aW9uc1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgICAgICAgICBpc1ZhbGlkICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdERUNMQVJBVElPTicgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdoYXJkQ29weUxhbmcnICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRGJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEknICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgIC8vICgoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgIC8vICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSkpIHx8XHJcbiAgICAgICAgICAgIC8vICAgKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQoc2luZ2xlUXVlc3Rpb25PYmosIHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSkpXHJcbiAgICAgICAgICAgIGlzVmFsaWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gaWYgKFxyXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyAmJlxyXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgIC8vICkge1xyXG4gICAgICAgICAgLy8gICBsZXQgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iajogYW55ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5xdWVzdGlvbnNQYXNzcG9ydFVwbG9hZE9iai5maWx0ZXIoKHNpbmdsZU9iajogYW55KSA9PiAoc2luZ2xlT2JqWydwZXJzb25UeXBlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddICYmIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVPYmpbJ2Rtc0lkJ10pKSk7XHJcbiAgICAgICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmopKSB7XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KGAke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3F1ZXN0aW9uVHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3R5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydwZXJzb25UeXBlJ119YCk7XHJcbiAgICAgICAgICAvLyAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgICAgICAgIC8vICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAgIC8vICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgLy8gICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlXHJcbiAgICAgICAgICAvLyAgICAgICB9KTtcclxuICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XHJcbiAgICAgICAgICAvLyAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAgICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xyXG4gICAgICAgICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcclxuICAgICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIC8vICAgfVxyXG5cclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGRlY2xhcmF0aW9uIHF1ZXN0aW9uc1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBpc1ZhbGlkICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgKGlzVmFsaWQgJiZcclxuICAgICAgICAgICAgICAgIC8vICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dKSAmJlxyXG4gICAgICAgICAgICAgICAgLy8gKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxyXG4gICAgICAgICAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcclxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcclxuICAgICAgICAgICAgICAgIC8vICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSA9PT1cclxuICAgICAgICAgICAgICAgICAgJ04nKSB8fFxyXG4gICAgICAgICAgICAgICF0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSB8fFxyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIC8vIClcclxuICAgICAgICAgICAgICAvLyB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIHN1YiBxdWVzdGlvbnNcclxuICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICAgIGlmIChcclxuICAgICAgICAgIC8vICAgICAgIHRoaXMuc2hvd1N1YlF1ZXN0aW9uKHF1ZXN0aW9uKSAmJlxyXG4gICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcclxuICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXHJcbiAgICAgICAgICAvLyAgICAgICAoKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB8fFxyXG4gICAgICAgICAgLy8gICAgICAgICAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChxdWVzdGlvbiwgJ2xpZmVBc3N1cmVkJykpKVxyXG4gICAgICAgICAgLy8gICAgICkge1xyXG4gICAgICAgICAgLy8gICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIC8vICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGFuc3dlciBhbGwgbWVkaWNhbCBzdWIgcXVlc3Rpb25zICcgKyBxdWVzdGlvblsncXVlc3Rpb25JZCddICsgJyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddXHJcbiAgICAgICAgICAvLyAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGZhdGNoIGRlY2xhcmF0aW9uXHJcbiAgICAgICAgLy8gaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucykgJiYgaXNWYWxpZCl7XHJcbiAgICAgICAgLy8gc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMuZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6YW55KSA9PiB7XHJcbiAgICAgICAgLy8gICBpZihpc1ZhbGlkICYmIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJiBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAvLyAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXHJcbiAgICAgICAgLy8gICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXHJcbiAgICAgICAgLy8gICAgICl7XHJcbiAgICAgICAgLy8gICAgICAgaWYoIGlzVmFsaWQgJiZcclxuICAgICAgICAvLyAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dKSAmJlxyXG4gICAgICAgIC8vICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxyXG4gICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgICYmXHJcbiAgICAgICAgLy8gICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxyXG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XHJcblxyXG4gICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcclxuICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAvLyAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxyXG4gICAgICAgIC8vICAgICAgICAgICB9KTtcclxuICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaXNNZWRpY2FsUXVlc3Rpb25zVmFsaWQnLCBpc1ZhbGlkKTtcclxuICB9XHJcbn1cclxuIiwiXHJcbjxkaXYgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgcXVlc3Rpb25MaXN0XCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgIWNoZWNrSWZWYWx1ZUlzRW1wdHkoc2VjdGlvblsncXVlc3Rpb25zJ10pICYmXHJcbiAgICAgICAgc2VjdGlvblsnc2hvd1NlY3Rpb24nXVxyXG4gICAgICBcIlxyXG4gICAgICBjbGFzcz1cImNhcmQgcC0zIG15LTFcIlxyXG4gICAgICBpZD1cInBlcnNvblV3TWVkaWNhbFF1ZXN0aW9uc1wiXHJcbiAgICA+XHJcbiAgICAgIDxoNiBjbGFzcz1cInBhZ2UtdGl0bGUgYm9sZC1sYWJlbFwiPlxyXG4gICAgICAgIHt7IGdldFRpdGxlQ2FzZShzZWN0aW9uW1wic2VjdGlvbk5hbWVcIl0pIH19XHJcbiAgICAgIDwvaDY+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHF1ZXN0aW9ucyBvZiBzZWN0aW9uWydxdWVzdGlvbnMnXVwiPlxyXG4gICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdJTUFHRSBURVhUJ1wiPlxyXG4gICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXN0aW9uc1snc2FtcGxlUzNMaW5rJ11cIiBjbGFzcz1cImQtYmxvY2sgbXgtYXV0b1wiIFthbHRdPVwicXVlc3Rpb25zWyd0aXRsZSddXCI+XHJcbiAgICAgICAgICA8aDMgW2lubmVySFRNTF09XCJxdWVzdGlvbnNbJ3F1ZXN0aW9uVGV4dCddXCI+PC9oMz5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdGUkVFIFRFWFQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmxlIGQtYmxvY2tcIlxyXG4gICAgICAgICAgICA+e3sgcXVlc3Rpb25zW1wicXVlc3Rpb25UZXh0XCJdIH19XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5vcHRpb25hbFF1ZXN0aW9uID09PSAnTidcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIlxyXG4gICAgICAgICAgICAgID4mIzQyOzwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2xhYmVsPiAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHgtMCBteS0xXCI+XHJcbiAgICAgICAgICAgIDxsaWItdGV4dGJveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgKGJsdXIpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0hFSUdIVElOUFVUJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNhcmQtdG9waWMgZC1ibG9jayBmaWVsZC1sYWJsZVwiXHJcbiAgICAgICAgICAgID5IZWlnaHRcclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjZWUwMDAwXCJcclxuICAgICAgICAgICAgICA+JiM0Mjs8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtYXV0byBweC0wIG15LTAgcHktMCBoZWlnaHRpbnB1dFwiXHJcblxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbC0xMiBteS0xXCIgKm5nSWY9XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgcHktMCBoZWlnaHRJbnB1dHNcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItdGV4dGJveCBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddXCIgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J11cIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ11cIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicm93XCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgcGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXHJcbiAgICAgICAgICAgICAgICBdID09PSAnRkVFVCdcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J11cIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ11cIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwicm93IG10LTAgcHQtMFwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnTUFQJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuXHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3Mtc2VhcmNoLWNvbnRhaW5lciBtYi0zXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgY2FyZC10b3BpY1wiPkxvbmdpdHVkZTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwibG9uZ2l0dWRlXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbG9uZ2l0dWRlXCJcclxuICAgICAgICAgIHN0ZXA9XCJhbnlcIlxyXG4gICAgICAgICAgcmVhZG9ubHlcclxuICAgICAgICA+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGNhcmQtdG9waWNcIj5MYXRpdHVkZTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwibGF0aXR1ZGVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBsYXRpdHVkZVwiXHJcbiAgICAgICAgICBzdGVwPVwiYW55XCJcclxuICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgI2FkZHJlc3NJbnB1dFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZm9yIGFkZHJlc3NcIlxyXG4gICAgICAgIChrZXl1cCk9XCJvbkFkZHJlc3NJbnB1dEtleXVwKCRldmVudClcIlxyXG4gICAgICAgIChmb2N1cyk9XCJzaG93RHJvcGRvd24gPSB0cnVlXCJcclxuICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigpXCJcclxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICpuZ0lmPVwic2hvd0Ryb3Bkb3duICYmIGFkZHJlc3NTdWdnZXN0aW9ucy5sZW5ndGggPiAwXCJcclxuICAgIGNsYXNzPVwiYXV0b2NvbXBsZXRlLWRyb3Bkb3duIHBvc2l0aW9uLWFic29sdXRlIHctMTAwIG10LTFcIlxyXG4gICAgc3R5bGU9XCJ6LWluZGV4OiAxMDAwOyBtYXgtaGVpZ2h0OiAyMDBweDsgb3ZlcmZsb3cteTogYXV0bzsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IGJvcmRlci1yYWRpdXM6IDRweDsgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwwLDAsMC4xKTtcIlxyXG4gID5cclxuICAgIDxkaXZcclxuICAgICAgKm5nRm9yPVwibGV0IHN1Z2dlc3Rpb24gb2YgYWRkcmVzc1N1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHAtMlwiXHJcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcIlxyXG4gICAgICAobW91c2Vkb3duKT1cInNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbilcIlxyXG4gICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkSW5kZXggPSBpXCJcclxuICAgICAgW2NsYXNzLmJnLWxpZ2h0XT1cImhvdmVyZWRJbmRleCA9PT0gaVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+e3sgc3VnZ2VzdGlvbi5tYWluX3RleHQgfX08L2Rpdj5cclxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPnt7IHN1Z2dlc3Rpb24uc2Vjb25kYXJ5X3RleHQgfX08L3NtYWxsPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj5TdGFydCB0eXBpbmcgdG8gc2VhcmNoIGZvciBhZGRyZXNzZXM8L3NtYWxsPlxyXG4gICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxnb29nbGUtbWFwIFtjZW50ZXJdPVwiY2VudGVyXCIgW3pvb21dPVwiem9vbVwiPlxyXG4gICAgICAgICAgICAgIDxtYXAtbWFya2VyIFtwb3NpdGlvbl09XCJjdXJyZW50Q29vcmRpbmF0ZXNcIj48L21hcC1tYXJrZXI+XHJcbiAgICAgICAgICAgIDwvZ29vZ2xlLW1hcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJtZWRpY2FsUXVlcyBteS0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIChxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnUkFESU8gQlVUVE9OJyB8fFxyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJykgJiZcclxuICAgICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItcmFkaW8gWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItbXVsdGlwbGUtc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLWNoZWNrYm94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdEUk9QRE9XTicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi1kb2IgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdIRUlHSFRJTlBVVCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRE9DVVBMT0FEJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItdXBsb2FkIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4iXX0=
|