@eqproject/eqp-dynamic-module 2.10.18 → 2.10.20
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/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +13 -6
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +58 -7
- package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +30 -3
- package/esm2020/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.mjs +3 -3
- package/esm2020/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.mjs +4 -4
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +3 -3
- package/esm2020/lib/components/private/graphs/graph/graph.component.mjs +3 -3
- package/esm2020/lib/services/utilityHelper.services.mjs +12 -3
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +118 -24
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +118 -24
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +5 -2
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +11 -3
- package/lib/components/private/add-formula-field/add-formula-field.component.d.ts +2 -0
- package/package.json +2 -1
|
@@ -526,12 +526,12 @@ export class HListFormRecordComponent {
|
|
|
526
526
|
}
|
|
527
527
|
else if (aggrCol.AnswerDate == "SUM" && aggregations.indexOf(NumberAggregationFunctionEnum["SUM"]) != -1) {
|
|
528
528
|
var sum = 0;
|
|
529
|
-
this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).forEach(el => { sum += el[key]; });
|
|
529
|
+
this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).forEach(el => { sum += parseInt(el[key]); });
|
|
530
530
|
aggrCol[key] = sum;
|
|
531
531
|
}
|
|
532
532
|
else if (aggrCol.AnswerDate == "AVG" && aggregations.indexOf(NumberAggregationFunctionEnum["AVG"]) != -1) {
|
|
533
533
|
var avg = 0;
|
|
534
|
-
this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).forEach(el => { avg += el[key]; });
|
|
534
|
+
this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).forEach(el => { avg += parseInt(el[key]); });
|
|
535
535
|
aggrCol[key] = avg / this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).length;
|
|
536
536
|
}
|
|
537
537
|
else if (aggrCol.AnswerDate == "MIN" && aggregations.indexOf(NumberAggregationFunctionEnum["MIN"]) != -1) {
|
|
@@ -550,7 +550,7 @@ export class HListFormRecordComponent {
|
|
|
550
550
|
}
|
|
551
551
|
else if (aggrCol.AnswerDate == "STDEV" && aggregations.indexOf(NumberAggregationFunctionEnum["STDEV"]) != -1) {
|
|
552
552
|
var values = [];
|
|
553
|
-
this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).forEach(el => { values.push(el[key]); });
|
|
553
|
+
this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).forEach(el => { values.push(parseInt(el[key])); });
|
|
554
554
|
aggrCol[key] = this.standardDeviation(values);
|
|
555
555
|
}
|
|
556
556
|
else {
|
|
@@ -812,4 +812,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
812
812
|
}], onAfterDeleteRecord: [{
|
|
813
813
|
type: Output
|
|
814
814
|
}] } });
|
|
815
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGxpc3QtZm9ybS1yZWNvcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2Zvcm0tcmVjb3Jkcy9obGlzdC1mb3JtLXJlY29yZC9obGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2hsaXN0LWZvcm0tcmVjb3JkL2hsaXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWEsYUFBYSxFQUFlLE1BQU0sb0NBQW9DLENBQUM7QUFDM0YsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRixPQUFPLEVBRUwsZ0JBQWdCLEdBQ2pCLE1BQU0sMkNBQTJDLENBQUM7QUFHbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFFekgsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBS3RDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9D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QVEsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO2dCQUNsQixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3NIQS8wQlUsd0JBQXdCOzBHQUF4Qix3QkFBd0IsaWxCQy9DckMsOGdNQWlLQTs0RkRsSGEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLG1CQUFtQjtrS0FLcEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFLdUMsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU1qQyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIENvbmZpZ0NvbHVtbixcclxuICBFcXBUYWJsZUNvbXBvbmVudCxcclxuICBUeXBlQ29sdW1uLFxyXG59IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSwgQW5zd2VyU3R5bGUgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRHluUmVjb3JkLCBSZWNvcmQsIFJlY29yZEJ1dHRvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRGF0ZUZpZWxkLFxyXG4gIERhdGVUaW1lVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvZGF0ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0XCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE1vZGVFbnVtIH0gZnJvbSBcInRtdy1waWNrZXJcIjtcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VTZWxlY3RvckZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bkF0dGFjaG1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnRcIjtcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvc3RhdGlzdGljLm1vZGVsJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJobGlzdC1mb3JtLXJlY29yZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcImhsaXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2hsaXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSExpc3RGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBASW5wdXQoKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuXHJcbiAgLy8gbCd1bmEgbyBsJ2FsdHJhIHBlciBkdWUgbW9kYWxpdMOgIGQndXNvXHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7IC8vIGJvaCBtYSBjJ2VyYSBwcmltYVxyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGV4dGVybmFsQnV0dG9uczogQXJyYXk8UmVjb3JkQnV0dG9uPiA9IG5ldyBBcnJheTxSZWNvcmRCdXR0b24+KCk7XHJcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uczogQXJyYXk8QWN0aW9uQnV0dG9uPiA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcblxyXG4gIGRlZmF1bHRMaXN0QWN0aW9uczogRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPVxyXG4gICAgbmV3IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0KCk7XHJcbiAgc2hvd1RpdGxlID0gdHJ1ZTtcclxuICBAVmlld0NoaWxkKFwidGFibGVSZWNvcmRzXCIsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlUmVjb3JkczogRXFwVGFibGVDb21wb25lbnQ7XHJcblxyXG4gIGNvbHVtbnMgPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIGxvYWRlZEZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsb2FkZWRUYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgb25WaWV3UmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkFkZFZpZXdFZGl0UmVjb3JkOiBFdmVudEVtaXR0ZXI8eyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW47IH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25EZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uQWZ0ZXJEZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIG1vZGVzID0gTW9kZUVudW07XHJcbiAgbWluRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgbWF4RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gIC8vIGxlIHByb3ByaWV0w6AgZGVsbGEgcmlzcG9zdGEgZGEgc3RhbXBhcmUgbmVsbGUgcmlnaGVcclxuICBwcm9wZXJ0aWVzID0gW107XHJcbiAgLy8gbGUgbGFiZWwgYXNzb2NpYXRlIGFsbGUgcHJvcHJpZXTDoCBkYSBzdGFtcGFyZSBjaGUgY29uZGl2aWRvbm8gbG8gc3Rlc3NvIGluZGljZVxyXG4gIHByb3BlcnRpZXNMYWJlbCA9IFtdO1xyXG4gIHNlbGVjdGVkUHJvcGVydGllczogc3RyaW5nW107XHJcblxyXG4gIC8vIGkgZGF0aSBkZWxsZSByaXNwb3N0ZSBkYSBzdGFtcGFyZVxyXG4gIGZpbHRlcmVkQW5zd2VycyAvL2xlIHJpc3Bvc3RlIGZpbHRyYXRlIFxyXG5cclxuICAvLyBDb2xvbm5lIGRhIHZpc3VhbGl6emFyZSAoZmlzc2EgbGEgcHJpbWEgY29sb25uYSBlIGdlbmVyYSBkaW5hbWljYW1lbnRlIGxlIGFsdHJlKVxyXG4gIGRpc3BsYXllZENvbHVtbnMgPSBbXTtcclxuICBleGlzdGluZ0FnZ3JlZ2F0aW9uczogQXJyYXk8TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0+ID0gbnVsbDtcclxuICBudW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bSA9IE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtO1xyXG5cclxuICAvLyNyZWdpb24gQ29uc3RydWN0b3JcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGRhdGVwaXBlOiBEYXRlUGlwZVxyXG4gICkge1xyXG4gICAgLy8gdGhpcy5wcm9wZXJ0aWVzTGFiZWxbXCJBbnN3ZXJEYXRlXCJdID0gXCJEYXRhXCI7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvclxyXG5cclxuICAvLyNyZWdpb24gbmdPbkludGl0XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbnMuZGVmYXVsdExpc3RBY3Rpb25zO1xyXG4gICAgdGhpcy5zaG93VGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBuZ09uSW5pdCAtIGNvbmZpZ3VyYXRpb25zJywgdGhpcy5jb25maWd1cmF0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5nZXRGb3JtQnlJRCgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gbmdPbkludGl0XHJcblxyXG4gIC8vI3JlZ2lvbiBuZ09uQ2hhbmdlc1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjaGFuZ2VzJywgY2hhbmdlcyk7XHJcbiAgICAvLyBTZSB2aWVuZSBtb2RpZmljYXRvIGlsIHZhbG9yZSBkaSBcIm5nTW9kZWxJbnB1dFwiIGFsbG9yYSBhZ2dpb3JuYSBsJ2lucHV0XHJcbiAgICAvLyBpZiAoY2hhbmdlc1snY29uZmlndXJhdGlvbnMnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1snY29uZmlndXJhdGlvbnMnXS5maXJzdENoYW5nZSA9PSBmYWxzZSkge1xyXG4gICAgLy8gICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IGNoYW5nZXNbJ2NvbmZpZ3VyYXRpb25zJ10uY3VycmVudFZhbHVlO1xyXG4gICAgLy8gICB0aGlzLnJlbG9hZFRhYmxlcygpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gbmdPbkNoYW5nZXNcclxuXHJcbiAgLy8jcmVnaW9uIGdldEZvcm1CeUlEXHJcbiAgYXN5bmMgZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gZ2V0Rm9ybUJ5SUQnLCB0aGlzLmZvcm0pO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm0gPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2V0Rm9ybUJ5SURcclxuXHJcbiAgLy8jcmVnaW9uIGdldFJlY29yZHNCeUZvcm1JRFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKiBMYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBkZXZlIGVzc2VyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRpIHRpcG8gXCJEeW5SZWNvcmRcIlxyXG4gICAqIGEgcGFydGlyZSBkYWkgcXVhbGkgdmVuZ29ubyByaWNyZWF0aSBpIFJlY29yZCB1c2F0aSBuZWwgY2xpZW50LlxyXG4gICAqL1xyXG4gIGFzeW5jIGdldFJlY29yZHNCeUZvcm1JRCgpIHtcclxuICAgIC8qKlxyXG4gICAgICogcHJlbmRlIGxlIHJpc3Bvc3RlIGUgbGUgcmVuZGUgcGlhdHRlLCBhZGF0dGUgYSBkaXZlbnRhcmUgdW5hIHJpZ2EgZGEgdGFiZWxsYVxyXG4gICAgICogbWV0dGUgdHV0dGUgbGUgcmlzcG9zdGUgbmVsbGUgc3RydXR0dXJlIG5lY2Vzc2FyaWUgcGVyIGlsIHJlY3VwZXJvIGUgbGEgdmlzdWFsaXp6YXppb25lXHJcbiAgICAgKiBAcGFyYW0gYW5zd2VycyBcclxuICAgICAqL1xyXG4gICAgY29uc3QgcmVhcnJhbmdlQW5zd2Vyc0FuZFBvcHVsYXRlTGlzdHMgPSAoYW5zd2VycykgPT4ge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IG5ldyBBcnJheTxSZWNvcmQ+KCk7XHJcbiAgICAgIGFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyKSA9PiB7XHJcbiAgICAgICAgdmFyIHRtcFJlYzogUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2UoYW5zd2VyLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRtcFJlYy5JRCA9IGFuc3dlci5JRDtcclxuICAgICAgICB0bXBSZWMuRW50SUQgPSBhbnN3ZXIuRW50SUQ7XHJcbiAgICAgICAgdG1wUmVjLlZlcnNpb24gPSBhbnN3ZXIuVmVyc2lvbjtcclxuICAgICAgICB0bXBSZWMudXNlcklEID0gYW5zd2VyLnVzZXJJRDtcclxuICAgICAgICB0bXBSZWMuQW5zd2VyRGF0ZSA9IGFuc3dlci5BbnN3ZXJEYXRlO1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLnB1c2godG1wUmVjKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBwcmVwYXJhIGxhIGxpc3RhIGRlbGxlIGNvbG9ubmUgZGEgbW9zdHJhcmUgKHVuYSBwZXIgb2duaSByaXNwb3N0YSwgcGnDuSBsYSBjb2xvbm5hIGRlbGxlIHByb3ByaWV0w6ApXHJcbiAgICAgKiBpbXBvc3RhIGxhIGxpc3RhIGRlbGxlIHJpc3Bvc3RlIGRhIHZpc3VhbGl6emFyZVxyXG4gICAgICogbGliZXJhIGxlIHZhcmlhYmlsaSBkaSBjYXJpY2FtZW50byBwZXIgbW9zdHJhcmUgaSBjb250ZW51dGkgZGVsbGEgdmlzdGFcclxuICAgICAqL1xyXG4gICAgY29uc3QgbmFtZUNvbHVtbnNBbmRTdGFydFZpZXcgPSAoKSA9PiB7XHJcbiAgICAgIC8vZGVzdHJ1dHR1cmEgbCdhcnJheSByaXNwb3N0ZSBlIHBlciBvZ25pIHJpc3Bvc3RhIGdlbmVyYSB1biBlbGVtZW50byBjb2xbaV1cclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gW1wicHJvcGVydHlcIiwgLi4udGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubWFwKChfLCBpKSA9PiBgY29sJHtpfWApXTtcclxuICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcztcclxuICAgICAgdGhpcy5zZXRNaW5NYXhEYXRlcygpO1xyXG5cclxuICAgICAgdGhpcy5sb2FkZWRGaWx0ZXJzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkZWRUYWJsZSA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKF8pID0+IHtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMpIHtcclxuICAgICAgLy8gdmVuZ28gZGEgdW4nYWx0cmEgdmlzdWFsaXp6YXppb25lIGNoZSBoYSBnacOgIHJlY3VwZXJhdG8gbGUgcmlzcG9zdGVcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImhMaXN0IC0gZ2V0UmVjb3Jkc0J5Rm9ybUlEIEFcIiwgdGhpcy5jb25maWd1cmF0aW9ucylcclxuICAgICAgbmFtZUNvbHVtbnNBbmRTdGFydFZpZXcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHNvbm8gaW4gdW5hIG51b3ZhIGlzdGFuemEgaW4gY3VpIGRldm8gcmVjdXBlcmFyZSBsZSByaXNwb3N0ZVxyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaExpc3QgLSBnZXRSZWNvcmRzQnlGb3JtSUQgQlwiLCB0aGlzLmNvbmZpZ3VyYXRpb25zKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGxldCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIG5vbiBobyBzcGVjaWZpY2F0byB1biB1dGVudGVcclxuICAgICAgICAgICAgLy8gdmVkbyB0dXR0ZSBsZSByaXNwb3N0ZSBkZWwgbW9kdWxvXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludCxcclxuICAgICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJlYXJyYW5nZUFuc3dlcnNBbmRQb3B1bGF0ZUxpc3RzKHJlcyk7XHJcbiAgICAgICAgICAgICAgICBuYW1lQ29sdW1uc0FuZFN0YXJ0VmlldygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGNvbm9zY28gbCd1dGVudGVcclxuICAgICAgICAgICAgLy8gdm9nbGlvIHNvbGFtZW50ZSBsZSBzdWUgcmlzcG9zdGVcclxuICAgICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJVc2VySURcIixcclxuICAgICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCxcclxuICAgICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJlYXJyYW5nZUFuc3dlcnNBbmRQb3B1bGF0ZUxpc3RzKHJlcyk7XHJcbiAgICAgICAgICAgICAgICBuYW1lQ29sdW1uc0FuZFN0YXJ0VmlldygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignZXhjZXB0aW9uJywgZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2V0UmVjb3Jkc0J5Rm9ybUlEXHJcblxyXG5cclxuICAvLyNyZWdpb24gY29uZmlndXJlQ29sdW1uc1xyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgbGUgY29sb25uZSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5jb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW10sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy52aWV3ID09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogXCJWaXN1YWxpenphXCIsXHJcbiAgICAgICAgICBpY29uOiBcImluZm9cIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy52aWV3UmVjb3JkKGVsZW1lbnQpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmVkaXQgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy52aWV3T3JFZGl0UmVjb3JkKGVsZW1lbnQsIGZhbHNlKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kdXBsaWNhdGUgPT0gdHJ1ZSkge1xyXG4gICAgICAvKnRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IFwiRHVwbGljYVwiLFxyXG4gICAgICAgICAgaWNvbjogXCJmaWxlX2NvcHlcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kdXBsaWNhdGVSZWNvcmQoZWxlbWVudCksXHJcbiAgICAgICAgfSk7Ki9cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZGVsZXRlUmVjb3JkKGVsZW1lbnQpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZXh0ZXJuYWxCdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBidXR0b24udGV4dCxcclxuICAgICAgICAgIGljb246IGJ1dHRvbi5pY29uLFxyXG4gICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiBidXR0b24uZm4oKSxcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKTtcclxuICAgIHRoaXMuY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzKCk7XHJcbiAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gY29uZmlndXJlQ29sdW1uc1xyXG5cclxuICAvLyNyZWdpb24gY3JlYXRlQWRkaXRpb25hbEFjdGlvbnNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2l1bmdlcmUgbmVsbGEgY29sb25uYSBcImFjdGlvblwiIGRlbGxhIGVxcC10YWJsZSBsZSBhemlvbmkgc3VpIHJlY29yZFxyXG4gICAqIGRlZmluaXRlIGRhbGwndXRlbnRlIGFsbCdpbnRlcm5vIGRlbGxhIEZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVBZGRpdGlvbmFsQWN0aW9ucygpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjcmVhdGVBZGRpdGlvbmFsQWN0aW9ucycsIHRoaXMuZm9ybSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQgJiYgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuc29ydCgoYSwgYikgPT5cclxuICAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICA/IDFcclxuICAgICAgICAgIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgICA/IC0xXHJcbiAgICAgICAgICAgIDogMFxyXG4gICAgICApLmZvckVhY2goKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6IGFjdGlvbi5OYW1lLFxyXG4gICAgICAgICAgICBpY29uOiBhY3Rpb24uSWNvbixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVjID0gZWxlbWVudDtcclxuICAgICAgICAgICAgICBjb25zdCBjdHggPSBVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0O1xyXG4gICAgICAgICAgICAgIGV2YWwoYWN0aW9uLkFjdGlvbik7XHJcbiAgICAgICAgICAgICAgLy8gVE9ETzogc2FsdmFyZSBsZSBtb2RpZmljaGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zXHJcblxyXG5cclxuICAvLyNyZWdpb24gY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGVsbGUgY29sb25uZSBwZXIgbGEgZXFwLXRhYmxlLlxyXG4gICAqIEluZGl2aWR1YSBpIEJhc2VGaWVsZCBkYSBtb3N0cmFyZSBlIGxpIHVzYSBwZXIgY3JlYXJlIGxlIENvbmZpZ0NvbHVtbi5cclxuICAgKiBMZSBjb2xvbm5lIHZlbmdvbm8gY3JlYXRlIHBlciBpIEJhc2VGaWVsZCBjb24gaWwgZmxhZyBJbkxpc3RWaWV3IGEgVFJVRVxyXG4gICAqIG9wcHVyZSwgbmVsIGNhc28gbm9uIHNpYW5vIHN0YXRpIHNwZWNpZmljYXRpIGkgY2FtcGkgZGEgdmlzdWFsaXp6YXJlLFxyXG4gICAqIHNlbGV6aW9uYSBpIHByaW1pIDYuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMoKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzJywgdGhpcy5mb3JtKTtcclxuXHJcbiAgICB2YXIgZmllbGRzRm9yQ29sdW1uczogQXJyYXk8QmFzZUZpZWxkPjtcclxuICAgIGZpZWxkc0ZvckNvbHVtbnMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4ge1xyXG4gICAgICAvL25hc2NvbmRlcmUgY2FtcGkgZXRpY2hldHRhXHJcbiAgICAgIGlmKGYuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFdGljaGV0dGFcIl0pe1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZi5BbnN3ZXJTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmLkFuc3dlclN0eWxlLkluTGlzdFZpZXc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGYuSW5MaXN0VmlldztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5leGlzdGluZ0FnZ3JlZ2F0aW9ucyA9IFtdO1xyXG5cclxuICAgIGZpZWxkc0ZvckNvbHVtbnNcclxuICAgICAgLnNvcnQoKGEsIGIpID0+XHJcbiAgICAgICAgYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgPyAxXHJcbiAgICAgICAgICA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgICAgPyAtMVxyXG4gICAgICAgICAgICA6IDBcclxuICAgICAgKVxyXG4gICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBcclxuICAgICAgICAvLyB0aGlzLmNvbHVtbnMucHVzaCh0aGlzLmNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkKSk7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzLnB1c2goeyBsYWJlbDogZmllbGQuTGFiZWwsIHR5cGU6IGZpZWxkLkZpZWxkVHlwZSwgY29uZmlnOiBmaWVsZCB9KTtcclxuICAgICAgICB0aGlzLnByb3BlcnRpZXNMYWJlbFtmaWVsZC5MYWJlbF0gPSBmaWVsZC5EZXNjcmlwdGlvbjtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLkFnZ3JlZ2F0aW9ucyAhPSBudWxsICYmIGZpZWxkLkFnZ3JlZ2F0aW9ucy5sZW5ndGggPiAwICl7XHJcbiAgICAgICAgICBmaWVsZC5BZ2dyZWdhdGlvbnMuZm9yRWFjaCgoYWdncmVnYXRpb24pID0+IHsgIFxyXG4gICAgICAgICAgICBpZiAodGhpcy5leGlzdGluZ0FnZ3JlZ2F0aW9ucy5pbmRleE9mKGFnZ3JlZ2F0aW9uKSA9PSAtMSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ0FnZ3JlZ2F0aW9ucy5wdXNoKGFnZ3JlZ2F0aW9uKTtcclxuICAgICAgICAgICAgICAvL3RoaXMucHJvcGVydGllc0xhYmVsW051bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW2FnZ3JlZ2F0aW9uXS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCldID0gXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgdGhpcy5zZWxlY3RlZFByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzXHJcblxyXG4gIC8vI3JlZ2lvbiBjcmVhdGVGaWVsZENvbHVtblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGwnb2dnZXR0byBDb25maWd1cmVDb2x1bW4gY2hlIHJhcHByZXNlbnRhIGlsIEJhc2VGaWVsZCBwYXNzYXRvIGluIGlucHV0LlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgcGVyIGN1aSBjcmVhcmUgbGEgY29sb25uYSBuZWxsYSBlcXAtdGFibGVcclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgQ29uZmlnQ29sdW1uIHBlciBsYSBlcXAtdGFibGVcclxuICAgKi9cclxuICAvLyBwcml2YXRlIGNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkOiBCYXNlRmllbGQpOiBDb25maWdDb2x1bW4ge1xyXG4gIC8vICAgdmFyIGNvbHVtbjogQ29uZmlnQ29sdW1uID0geyBrZXk6IGZpZWxkLk5hbWUsIGRpc3BsYXk6IGZpZWxkLkxhYmVsIH07XHJcbiAgLy8gICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAvLyAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uQm9vbGVhbjtcclxuICAvLyAgICAgICBjb2x1bW4uYm9vbGVhblZhbHVlcyA9IHtcclxuICAvLyAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS10aW1lcyBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gIC8vICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gIC8vICAgICAgIH07XHJcbiAgLy8gICAgICAgY29sdW1uLnN0eWxlcyA9IHtcclxuICAvLyAgICAgICAgIGZsZXg6IFwiMCAwIDclXCIsXHJcbiAgLy8gICAgICAgICBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIsXHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdOlxyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgIT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gb3JhcmlvXCJdXHJcbiAgLy8gICAgICAgKSB7XHJcbiAgLy8gICAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uRGF0ZTtcclxuICAvLyAgICAgICAgIGlmIChcclxuICAvLyAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiRGF0YSBlIG9yYVwiXVxyXG4gIC8vICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSBcImRkL01NL3l5eXkgSEg6bW1cIjtcclxuICAvLyAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgLy8gICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gZGF0YVwiXVxyXG4gIC8vICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0XHJcbiAgLy8gICAgICAgICAgICAgPyAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0LnJlcGxhY2UoXCJERFwiLCBcImRkXCIpXHJcbiAgLy8gICAgICAgICAgICAgOiBcImRkL01NL3l5eXlcIjtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgYnJlYWs7XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gIC8vICAgICAgIGlmICgoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbCkge1xyXG4gIC8vICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkNVUlJFTkNZO1xyXG4gIC8vICAgICAgICAgY29sdW1uLmN1cnJlbmN5UGlwZUNvZGUgPSAoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbDtcclxuICAvLyAgICAgICB9IGVsc2UgaWYgKCEoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5Jc0ludGVnZXIpIHtcclxuICAvLyAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5ERUNJTUFMO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQWxsZWdhdG9cIl06XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG5cclxuICAvLyAgICAgICAvKlxyXG4gIC8vICAgICAgICAgY29sdW1uLnZhbHVlID0gKGVsZW1lbnQ6IFJlY29yZCkgPT4ge1xyXG4gIC8vICAgICAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAgICAgKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuSXNNdWx0aUF0dGFjaCB8fFxyXG4gIC8vICAgICAgICAgICAgICgoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbiAmJlxyXG4gIC8vICAgICAgICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaClcclxuICAvLyAgICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA+IDBcclxuICAvLyAgICAgICAgICAgICAgID8gKGVsZW1lbnRbZmllbGQuTmFtZV0gYXMgQXJyYXk8SUF0dGFjaG1lbnREVE8+KVxyXG4gIC8vICAgICAgICAgICAgICAgICAgIC5tYXAoKGEpID0+IGEuRmlsZU5hbWUpXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxyXG4gIC8vICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIHJldHVybiBlbGVtZW50W2ZpZWxkLk5hbWVdICE9IG51bGwgJiYgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPiAwXHJcbiAgLy8gICAgICAgICAgICAgICA/IChlbGVtZW50W2ZpZWxkLk5hbWVdIGFzIEFycmF5PElBdHRhY2htZW50RFRPPilbMF0uRmlsZU5hbWVcclxuICAvLyAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfTtcclxuICAvLyAgICAgICAgIGNvbHVtbi5pc1NvcnRhYmxlID0gZmFsc2U7XHJcbiAgLy8gICAgICAgICBjb2x1bW4uaXNTZWFyY2hhYmxlID0gZmFsc2U7XHJcbiAgLy8gICAgICAgKi9cclxuXHJcbiAgLy8gICAgICAgYnJlYWs7XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAvLyAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7XHJcbiAgLy8gICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jc011bHRpQ2hvaWNoZSkge1xyXG4gIC8vICAgICAgICAgICBpZiAoIWVsZW1lbnRbZmllbGQuTmFtZV0gfHwgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPT0gMCkge1xyXG4gIC8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpXHJcbiAgLy8gICAgICAgICAgICAgICAuZmlsdGVyKChrKSA9PlxyXG4gIC8vICAgICAgICAgICAgICAgICBlbGVtZW50W2ZpZWxkLk5hbWVdLmluY2x1ZGVzKFxyXG4gIC8vICAgICAgICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXVxyXG4gIC8vICAgICAgICAgICAgICAgICApXHJcbiAgLy8gICAgICAgICAgICAgICApXHJcbiAgLy8gICAgICAgICAgICAgICAuam9pbihcIiwgXCIpO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKS5maW5kKFxyXG4gIC8vICAgICAgICAgICAgIChrKSA9PlxyXG4gIC8vICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdID09IGVsZW1lbnRbZmllbGQuTmFtZV1cclxuICAvLyAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9O1xyXG4gIC8vICAgICAgIGNvbHVtbi5pc1NvcnRhYmxlID0gZmFsc2U7XHJcbiAgLy8gICAgICAgY29sdW1uLmlzU2VhcmNoYWJsZSA9IGZhbHNlO1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgLy8gICAgICAgLy8gVE9ET1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIGNvbHVtbjtcclxuICAvLyB9XHJcbiAgLy8jZW5kcmVnaW9uIGNyZWF0ZUZpZWxkQ29sdW1uXHJcblxyXG4gIC8vI3JlZ2lvbiB2aWV3UmVjb3JkXHJcbiAgdmlld1JlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5vblZpZXdSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gdmlld1JlY29yZFxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIHNjYXRlbmEgbCdldmVudG8gZGkgT3V0cHV0IHBlciBtb3N0cmFyZSBvIG1vZGlmaWNhcmUgaWwgcmVjb3JkXHJcbiAgICogc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIHZpZW5lIG1vc3RyYXRvIGlsIGNvbXBvbmVudGUgYWRkLWZvcm0tcmVjb3JkIGluIHNvbGEgbGV0dHVyYS5cclxuICAgKi9cclxuICBwcml2YXRlIHZpZXdPckVkaXRSZWNvcmQocmVjb3JkOiBSZWNvcmQsIG9ubHlWaWV3OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVsaW1pbmFyZSB1biByZWNvcmQgZGFsbGEgbGlzdGEuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZWxpbWluYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBkZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIHRoaXMub25EZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRUYWJsZXMoKSB7XHJcbiAgICBpZiAodGhpcy50YWJsZVJlY29yZHMpIHtcclxuICAgICAgdGhpcy50YWJsZVJlY29yZHMucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gb25TZWxlY3Rpb25DaGFuZ2VcclxuICAvKipcclxuICAgKiBGdW56aW9uZSBjaGUgdmllbmUgY2hpYW1hdGEgYWwgY2FtYmlvIGRpIHNlbGV6aW9uZSBkZWkgcGFyYW1ldHJpIGRhIG1vc3RyYXJlXHJcbiAgICogYWdnaW9ybmEgbGEgbGlzdGEgZGVsbGUgcHJvcHJpZXTDoCBzZWxlemlvbmF0ZSBjaGUgZ2VzdGlzY2UgbGUgcmlnaGUgbW9zdHJhdGUgcGVyIG9nbmkgcmlzcG9zdGFcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWRQcm9wZXJ0aWVzIFxyXG4gICAqL1xyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkUHJvcGVydGllcykge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm9uU2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGVkUHJvcGVydGllcy52YWx1ZVwiLHNlbGVjdGVkUHJvcGVydGllcy52YWx1ZSk7XHJcbiAgICBpZiAoc2VsZWN0ZWRQcm9wZXJ0aWVzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb3BlcnRpZXMgPSBzZWxlY3RlZFByb3BlcnRpZXMudmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJ0aGlzLnNlbGVjdGVkUHJvcGVydGllcyBhc3NlZ25hdGFcIix0aGlzLnNlbGVjdGVkUHJvcGVydGllcyk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvblNlbGVjdGlvbkNoYW5nZVxyXG5cclxuICAvLyNyZWdpb24gZmlsdGVyRGF0YUFuc3dlcnNcclxuICAvKipcclxuICAgKiBmdW56aW9uZSBjaGUgZmlsdHJhIGxlIHJpc3Bvc3RlIGluIGJhc2UgYWwgcmFuZ2UgZGkgZGF0ZSBiYXNhbmRvc2kgc3VsIGNhbXBvIGZpc3NvIEFuc3dlckRhdGUgcGVyIGlsIHBhcmFnb25lXHJcbiAgICovXHJcbiAgZmlsdGVyRGF0YUFuc3dlcnMoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMgPSBbXTtcclxuXHJcbiAgICAgIGlmKCF0aGlzLm1pbkRhdGUpe1xyXG4gICAgICAgIC8vIENvbnZlcnRvIGxlIGRhdGUgZGkgQW5zd2VyRGF0ZSBpbiBvZ2dldHRpIERhdGUgZSBvcmRpbm9cclxuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLm1hcCh2YWx1ZSA9PiBuZXcgRGF0ZSh2YWx1ZS5BbnN3ZXJEYXRlKSk7ICAgIFxyXG4gICAgICAgIC8vIFRyb3ZvIGxhIGRhdGEgcGnDuSByZWNlbnRlIChtYXgpIGUgbGEgcGnDuSB2ZWNjaGlhIChtaW4pXHJcbiAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoTWF0aC5taW4oLi4uZGF0ZXMubWFwKGRhdGUgPT4gZGF0ZS5nZXRUaW1lKCkpKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKCF0aGlzLm1heERhdGUpe1xyXG4gICAgICAgIC8vIENvbnZlcnRvIGxlIGRhdGUgZGkgQW5zd2VyRGF0ZSBpbiBvZ2dldHRpIERhdGUgZSBvcmRpbm9cclxuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLm1hcCh2YWx1ZSA9PiBuZXcgRGF0ZSh2YWx1ZS5BbnN3ZXJEYXRlKSk7ICAgIFxyXG4gICAgICAgIC8vIFRyb3ZvIGxhIGRhdGEgcGnDuSByZWNlbnRlIChtYXgpIGUgbGEgcGnDuSB2ZWNjaGlhIChtaW4pXHJcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUoTWF0aC5tYXgoLi4uZGF0ZXMubWFwKGRhdGUgPT4gZGF0ZS5nZXRUaW1lKCkpKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tYXhEYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDU5KTtcclxuXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMuZmlsdGVyKCB2YWx1ZSA9PiBuZXcgRGF0ZSh2YWx1ZS5BbnN3ZXJEYXRlKSA+PSB0aGlzLm1pbkRhdGUgJiYgbmV3IERhdGUodmFsdWUuQW5zd2VyRGF0ZSkgPD0gdGhpcy5tYXhEYXRlKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmV4aXN0aW5nQWdncmVnYXRpb25zICE9IG51bGwgJiYgdGhpcy5leGlzdGluZ0FnZ3JlZ2F0aW9ucy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgdGhpcy5leGlzdGluZ0FnZ3JlZ2F0aW9ucy5mb3JFYWNoKChhZ2dyZWdhdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciByZWNvcmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyZWRBbnN3ZXJzWzBdKSk7XHJcbiAgICAgICAgICAgICAgcmVjb3JkLklEID0gXCIwXCI7XHJcbiAgICAgICAgICAgICAgcmVjb3JkLkFuc3dlckRhdGUgPSBOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bVthZ2dyZWdhdGlvbl0udG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzLnB1c2gocmVjb3JkKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZpbGxBZ2dyZWdhdGlvbkNvbHVtbnMoKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFtcInByb3BlcnR5XCIsIC4uLnRoaXMuZmlsdGVyZWRBbnN3ZXJzLm1hcCgoXywgaSkgPT4gYGNvbCR7aX1gKV07XHJcblxyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGZpbHRlckRhdGFBbnN3ZXJzXHJcblxyXG4gIC8vI3JlZ2lvbiBzZXRNaW5NYXhEYXRlc1xyXG4gIC8vIEZ1bnppb25lIHBlciBvdHRlbmVyZSBsYSBkYXRhIHBpw7kgcmVjZW50ZSBlIHF1ZWxsYSBwacO5IHZlY2NoaWFcclxuICBzZXRNaW5NYXhEYXRlcygpIHtcclxuICAgIC8vIENvbnZlcnRvIGxlIGRhdGUgZGkgQW5zd2VyRGF0ZSBpbiBvZ2dldHRpIERhdGUgZSBvcmRpbm9cclxuICAgIGNvbnN0IGRhdGVzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubWFwKHZhbHVlID0+IG5ldyBEYXRlKHZhbHVlLkFuc3dlckRhdGUpKTtcclxuXHJcbiAgICAvLyBUcm92byBsYSBkYXRhIHBpw7kgcmVjZW50ZSAobWF4KSBlIGxhIHBpw7kgdmVjY2hpYSAobWluKVxyXG4gICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoTWF0aC5taW4oLi4uZGF0ZXMubWFwKGRhdGUgPT4gZGF0ZS5nZXRUaW1lKCkpKSk7XHJcbiAgICB0aGlzLm1heERhdGUgPSBuZXcgRGF0ZShNYXRoLm1heCguLi5kYXRlcy5tYXAoZGF0ZSA9PiBkYXRlLmdldFRpbWUoKSkpKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHNldE1pbk1heERhdGVzXHJcblxyXG4gIC8vI3JlZ2lvbiBmaWxsQWdncmVnYXRpb25Db2x1bW5zXHJcbiAgZmlsbEFnZ3JlZ2F0aW9uQ29sdW1ucygpe1xyXG4gICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCA9PSAnMCcpLmZvckVhY2goKGFnZ3JDb2wpID0+IHtcclxuICAgICAgT2JqZWN0LmtleXMoYWdnckNvbCkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcblxyXG4gICAgICAgIC8vaWYgKGtleSAhPSBcIkFuc3dlckRhdGVcIil7IGFnZ3JDb2xba2V5XSA9IFwiXCI7IH1cclxuXHJcbiAgICAgICAgdmFyIGZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5maW5kKHggPT4geC5MYWJlbCA9PSBrZXkpO1xyXG4gICAgICAgIGlmIChmaWVsZCA9PSBudWxsKXsgcmV0dXJuOyB9XHJcbiAgICAgICAgdmFyIGFnZ3JlZ2F0aW9uczogYW55ID0gZmllbGQuQWdncmVnYXRpb25zO1xyXG5cclxuICAgICAgICBpZiAoYWdncmVnYXRpb25zICE9IG51bGwpe1xyXG4gICAgICAgICAgaWYgKGFnZ3JDb2wuQW5zd2VyRGF0ZSA9PSBcIkNPVU5UXCIgJiYgYWdncmVnYXRpb25zLmluZGV4T2YoTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW1bXCJDT1VOVFwiXSkgIT0gLTEpeyBcclxuICAgICAgICAgICAgYWdnckNvbFtrZXldID0gdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCAhPSAnMCcpLmxlbmd0aDsgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChhZ2dyQ29sLkFuc3dlckRhdGUgPT0gXCJTVU1cIiAmJiBhZ2dyZWdhdGlvbnMuaW5kZXhPZihOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bVtcIlNVTVwiXSkgIT0gLTEpeyBcclxuICAgICAgICAgICAgdmFyIHN1bSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzLmZpbHRlcih4ID0+IHguSUQgIT0gJzAnICYmICFpc05hTih4W2tleV0pKS5mb3JFYWNoKGVsID0+IHsgc3VtICs9IGVsW2tleV07IH0pO1xyXG4gICAgICAgICAgICBhZ2dyQ29sW2tleV0gPSBzdW07ICAgICAgICAgIFxyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIGVsc2UgaWYgKGFnZ3JDb2wuQW5zd2VyRGF0ZSA9PSBcIkFWR1wiICYmIGFnZ3JlZ2F0aW9ucy5pbmRleE9mKE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW1wiQVZHXCJdKSAhPSAtMSl7IFxyXG4gICAgICAgICAgICB2YXIgYXZnID0gMDtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCAhPSAnMCcgJiYgIWlzTmFOKHhba2V5XSkpLmZvckVhY2goZWwgPT4geyBhdmcgKz0gZWxba2V5XTsgfSk7XHJcbiAgICAgICAgICAgIGFnZ3JDb2xba2V5XSA9IGF2ZyAvIHRoaXMuZmlsdGVyZWRBbnN3ZXJzLmZpbHRlcih4ID0+IHguSUQgIT0gJzAnICYmICFpc05hTih4W2tleV0pKS5sZW5ndGg7ICAgICAgICAgIFxyXG4gICAgICAgICAgfSAgIFxyXG4gICAgICAgICAgZWxzZSBpZiAoYWdnckNvbC5BbnN3ZXJEYXRlID09IFwiTUlOXCIgJiYgYWdncmVnYXRpb25zLmluZGV4T2YoTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW1bXCJNSU5cIl0pICE9IC0xKXsgXHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkQW5zd2Vycy5maWx0ZXIoeCA9PiB4LklEICE9ICcwJyAmJiAhaXNOYU4oeFtrZXldKSkuZm9yRWFjaChlbCA9PiB7IGlmIChtaW4gPT0gbnVsbCB8fCBlbFtrZXldIDwgbWluKSB7IG1pbiA9IGVsW2tleV07IH0gfSk7XHJcbiAgICAgICAgICAgIGFnZ3JDb2xba2V5XSA9IG1pbjsgICAgICAgICAgXHJcbiAgICAgICAgICB9ICAgICBcclxuICAgICAgICAgIGVsc2UgaWYgKGFnZ3JDb2wuQW5zd2VyRGF0ZSA9PSBcIk1BWFwiICYmIGFnZ3JlZ2F0aW9ucy5pbmRleE9mKE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW1wiTUFYXCJdKSAhPSAtMSl7IFxyXG4gICAgICAgICAgICB2YXIgbWF4ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCAhPSAnMCcgJiYgIWlzTmFOKHhba2V5XSkpLmZvckVhY2goZWwgPT4geyBpZiAobWluID09IG51bGwgfHwgZWxba2V5XSA+IG1heCkgeyBtYXggPSBlbFtrZXldOyB9IH0pO1xyXG4gICAgICAgICAgICBhZ2dyQ29sW2tleV0gPSBtYXg7ICAgICAgICAgIFxyXG4gICAgICAgICAgfSAgICAgXHJcbiAgICAgICAgICBlbHNlIGlmIChhZ2dyQ29sLkFuc3dlckRhdGUgPT0gXCJTVERFVlwiICYmIGFnZ3JlZ2F0aW9ucy5pbmRleE9mKE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW1wiU1RERVZcIl0pICE9IC0xKXsgXHJcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCAhPSAnMCcgJiYgIWlzTmFOKHhba2V5XSkpLmZvckVhY2goZWwgPT4geyB2YWx1ZXMucHVzaChlbFtrZXldKTsgfSk7XHJcbiAgICAgICAgICAgIGFnZ3JDb2xba2V5XSA9IHRoaXMuc3RhbmRhcmREZXZpYXRpb24odmFsdWVzKTsgICAgICAgICAgXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhZ2dyQ29sW2tleV0gPSBcIlwiO1xyXG4gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKGFnZ3JlZ2F0aW9ucyA9PSBudWxsIHx8IGFnZ3JlZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgYWdnckNvbFtrZXldID0gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGZpbGxBZ2dyZWdhdGlvbkNvbHVtbnNcclxuXHJcbiAgc3RhbmRhcmREZXZpYXRpb24oYXJyLCB1c2VQb3B1bGF0aW9uID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IG1lYW4gPSBhcnIucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgdmFsLCAwKSAvIGFyci5sZW5ndGg7XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KFxyXG4gICAgICBhcnJcclxuICAgICAgICAucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjLmNvbmNhdCgodmFsIC0gbWVhbikgKiogMiksIFtdKVxyXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApIC9cclxuICAgICAgICAoYXJyLmxlbmd0aCAtICh1c2VQb3B1bGF0aW9uID8gMCA6IDEpKVxyXG4gICAgKTtcclxuICB9OyAgIFxyXG5cclxuICAvLyNyZWdpb24gcHJpbnRWYWx1ZVxyXG4gIHByaW50VmFsdWUoZmllbGRUeXBlLCB2YWx1ZSwgZmllbGRjb25maWcsIHJlY29yZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOiB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IFwiXCIpeyByZXR1cm4gdmFsdWU7IH1cclxuICAgICAgICBpZighdmFsdWUpe1xyXG4gICAgICAgICAgcmV0dXJuIFwiTi9BXCI7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBsZXQgb3V0cHV0O1xyXG4gICAgICAgIGxldCBWYWx1ZVBhaXJzOiB7W2tleTpzdHJpbmddOiBhbnk7fSA9IFtdO1xyXG4gICAgICAgIC8vIFBSRVBBUk8vTEVHR08gSSBWQUxVRVBBSVJTXHJcbiAgICAgICAgaWYgKGZpZWxkY29uZmlnLkZvcm11bGEgIT0gbnVsbCAmJiBmaWVsZGNvbmZpZy5Gb3JtdWxhKSB7XHJcbiAgICAgICAgICB2YXIgdGVtcCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gICAgICAgICAgICBmaWVsZGNvbmZpZy5Gb3JtdWxhLFxyXG4gICAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICBpZih0eXBlb2YgdGVtcCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGxldCB0ZW1wMiA9IHRlbXAuc3BsaXQoXCI7XCIpO1xyXG4gICAgICAgICAgdGVtcCA9IFtdXHJcbiAgICAgICAgICB0ZW1wMi5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJJdGVtID0gaXRlbS5zcGxpdChcInxcIik7XHJcbiAgICAgICAgICAgIGlmKGFyckl0ZW0ubGVuZ3RoID4gMSl7XHJcbiAgICAgICAgICAgICAgdGVtcFthcnJJdGVtWzFdLnRyaW0oKV0gPSBhcnJJdGVtWzBdLnRyaW0oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0ZW1wW2Fyckl0ZW1bMF0udHJpbSgpXSA9IGFyckl0ZW1bMF0udHJpbSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQga2V5MiBpbiB0ZW1wKSB7XHJcbiAgICAgICAgICBWYWx1ZVBhaXJzW3RlbXBba2V5Ml1dID0ga2V5MjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGRjb25maWcpLlZhbHVlUGFpcnMgIT0gbnVsbCAmJiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkY29uZmlnKS5WYWx1ZVBhaXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIC8vIHZhIGJlbmUgY29zw6xcclxuICAgICAgICAgIFZhbHVlUGFpcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCg8TGlzdFZhbHVlRmllbGQ+ZmllbGRjb25maWcpLlZhbHVlUGFpcnMpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGRjb25maWcpLlZhbHVlU3RyaW5nICE9IG51bGwgJiYgKDxMaXN0VmFsdWVGaWVsZD5maWVsZGNvbmZpZykuVmFsdWVTdHJpbmcgIT0gXCJcIikge1xyXG4gICAgICAgICAgLy8gdmEgcHJlc2EgbGEgc3RyaWduYSBlIHJpbWFwcGF0YSBuZWwgZGlhcmlvXHJcbiAgICAgICAgICBWYWx1ZVBhaXJzID0gR2xvYmFsU2VydmljZS5zdHJpbmdUb1ZhbHVlUGFpcnMoKDxMaXN0VmFsdWVGaWVsZD5maWVsZGNvbmZpZykuVmFsdWVTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSU5WRVJUTyBJIFZBTFVFUEFJUlMgQ0hJQVZFL1ZBTE9SRSBJTiBWQUxST0UvQ0hJQVZFXHJcbiAgICAgICAgbGV0IGludmVydGVkID0ge307XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1wiLCAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzKTtcclxuICAgICAgICAvLyBWYWx1ZVBhaXJzOiB7U2k6ICdTaScsIE5vOiAnTm8nfVxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBWYWx1ZVBhaXJzKSB7XHJcbiAgICAgICAgICBpbnZlcnRlZFtWYWx1ZVBhaXJzW2tleV1dID0ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBWYWx1ZVBhaXJzID0gaW52ZXJ0ZWQ7XHJcblxyXG4gICAgICAgIC8vIExFR0dPIEkgVkFMT1JJIENIRSBWT0dMSU8gU1RBTVBBUkUgXHJcbiAgICAgICAgaWYgKHJlY29yZFtmaWVsZGNvbmZpZy5OYW1lXSAhPSBudWxsICYmICg8TGlzdFZhbHVlRmllbGQ+ZmllbGRjb25maWcpLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgICAgICAvLyBjYXNvIE1VTFRJU0NFTFRBXHJcbiAgICAgICAgICBsZXQgb3V0VmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgcmVjb3JkW2ZpZWxkY29uZmlnLk5hbWVdLmZvckVhY2goKGVsZW1lbnQsIGkpID0+IHtcclxuICAgICAgICAgICAgb3V0VmFsdWUgKz0gVmFsdWVQYWlyc1tlbGVtZW50XTtcclxuICAgICAgICAgICAgb3V0VmFsdWUgKz0gaSA9PSByZWNvcmRbZmllbGRjb25maWcuTmFtZV0ubGVuZ3RoIC0gMSA/IFwiXCIgOiBcIiwgXCJcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgb3V0cHV0ID0gb3V0VmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGNhc28gU0NFTFRBIFNJTkdPTEFcclxuICAgICAgICAgIG91dHB1dCA9IFZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkY29uZmlnLk5hbWVdXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgfTtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06IHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gXCJcIil7IHJldHVybiB2YWx1ZTsgfVxyXG4gICAgICAgIGlmICgoPE51bWVyaWNGaWVsZD5maWVsZGNvbmZpZykuSXNJbnRlZ2VyKSB7XHJcbiAgICAgICAgICBpZiAoKDxOdW1lcmljRmllbGQ+ZmllbGRjb25maWcpLkRlY2ltYWxTZXBhcmF0b3IgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih2YWx1ZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IGZpZWxkY29uZmlnLkRlY2ltYWxQcmVjaXNpb24gKiAxMDtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBkZWNpbWFscykgLyBkZWNpbWFscztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZGVjaW1hbHMgPSBmaWVsZGNvbmZpZy5EZWNpbWFsUHJlY2lzaW9uICogMTA7XHJcbiAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGRlY2ltYWxzKSAvIGRlY2ltYWxzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnSW1tYWdpbmUnXToge1xyXG4gICAgICAgIHJldHVybiBcImltbWFnaW5lXCI7XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImltbWFnaW5lIFwiICsgZmllbGRjb25maWcuTmFtZSArIFwiIDogXCIgKyB2YWx1ZSlcclxuICAgICAgICAvLyAvLyBSZWN1cGVybyBpbCBCQVNFNjQgZGVsbCdpbW1hZ2luZSBSZXNpemVkIHZpYSBwcm9taXNlIGNsaWVudFxyXG4gICAgICAgIC8vIHZhciByZXNpemVkQmFzZTY0ID0gYXdhaXQgdGhpcy5yZXNpemVCYXNlNjRJbWFnZShcImRhdGE6aW1hZ2UvXCIgKyB2YWx1ZS5GaWxlRXh0ZW5zaW9uICsgXCI7YmFzZTY0LFwiICsgdmFsdWUuRmlsZURhdGFCYXNlNjQpO1xyXG5cclxuICAgICAgICAvLyAvLyBBZ2dpdW5nbyBsJ0hUTUwgY29uIGlsIG51b3ZvIEJBU0U2NFxyXG4gICAgICAgIC8vIHJldHVybiBcIjxpbWcgc3JjPSdcIiArIHJlc2l6ZWRCYXNlNjQgKyBcIicgc3R5bGU9J2hlaWdodDogXCIgKyB2YWx1ZS5SZXNpemVkSW1hZ2VIZWlnaHRQeCArIFwicHgnPlwiO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfTtcclxuXHJcblxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0FsbGVnYXRvJ106IHtcclxuICAgICAgICByZXR1cm4gXCJBbGxlZ2F0b1wiO1xyXG4gICAgICAgIC8vIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBbGxlZ2F0byBcIiArIGZpZWxkLk5hbWUgKyBcIiA6IFwiICsgdmFsdWUsIHJlY29yZClcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgIGxldCByZXNpemVkQmFzZTY0O1xyXG4gICAgICAgICAgLy8gaWYgKHZhbHVlWzBdLklzSW1hZ2UpIHtcclxuICAgICAgICAgIC8vICAgLy8gUmVjdXBlcm8gaWwgQkFTRTY0IGRlbGwnaW1tYWdpbmUgUmVzaXplZCB2aWEgcHJvbWlzZSBjbGllbnRcclxuICAgICAgICAgIC8vICAgcmVzaXplZEJhc2U2NCA9IGF3YWl0IHRoaXMucmVzaXplQmFzZTY0SW1hZ2UoXCJkYXRhOmltYWdlL1wiICsgdmFsdWVbMF0uRmlsZUV4dGVuc2lvbiArIFwiO2Jhc2U2NCxcIiArIHZhbHVlWzBdLkZpbGVEYXRhQmFzZTY0KTtcclxuICAgICAgICAgIC8vICAgLy8gR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFsbGVnYXRvIHJlc2l6ZWRCYXNlNjRcIiwgcmVzaXplZEJhc2U2NClcclxuICAgICAgICAgIC8vICAgLy8gQWdnaXVuZ28gbCdIVE1MIGNvbiBpbCBudW92byBCQVNFNjRcclxuICAgICAgICAgIC8vICAgcmV0dXJuICc8aW1nIGNsYXNzPVwiaW1hZ2UtcHJldmlld1wiIHNyYz1cIicgKyByZXNpemVkQmFzZTY0ICsgJ1wiIHN0eWxlPVwiaGVpZ2h0OiAnICsgdmFsdWVbMF0uUmVzaXplZEltYWdlSGVpZ2h0UHggKyAncHhcIj4nO1xyXG4gICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZVswXS5GaWxlQ29udGVudFR5cGUgPT0gXCJhcHBsaWNhdGlvbi9wZGZcIikge1xyXG4gICAgICAgICAgLy8gICByZXR1cm4gJzxpZnJhbWUgc3JjPVwiZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0LCcgKyB2YWx1ZVswXS5GaWxlRGF0YUJhc2U2NCArICdcInN0eWxlPVwibWluLWhlaWdodDogMzAwcHg7IGhlaWdodDogMTAwJTtcIj48L2lmcmFtZT4nO1xyXG4gICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgcmV0dXJuICc8aWZyYW1lIHNyYz1cImRhdGE6XCInICsgdmFsdWVbMF0uRmlsZUV4dGVuc2lvbiArICdcIjtiYXNlNjQsJyArIHZhbHVlWzBdLkZpbGVEYXRhQmFzZTY0ICsgJ1wic3R5bGU9XCJtaW4taGVpZ2h0OiAzMDBweDsgaGVpZ2h0OiAxMDAlO1wiPjwvaWZyYW1lPic7XHJcbiAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgLy8gQWdnaXVuZ28gbCdIVE1MIGNvbiBpbCBudW92byBCQVNFNjRcclxuICAgICAgICAgIC8vIHJldHVybiAgXCI8aW1nIHNyYz0nXCIgKyByZXNpemVkQmFzZTY0ICsgXCInIHN0eWxlPSdoZWlnaHQ6IFwiICsgdmFsdWVbMF0uUmVzaXplZEltYWdlSGVpZ2h0UHggKyBcInB4Jz5cIjtcclxuICAgICAgICAgIC8vIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBbGxlZ2F0byBvdXRwdXRWYWx1ZXNBcnJheVwiLCBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSBjb24gbWFya2VycyddOiB7XHJcbiAgICAgICAgcmV0dXJuIFwiSW1tYWdpbmUgY29uIG1hcmtlcnNcIjtcclxuXHJcbiAgICAgICAgLy8gUmVjdXBlcm8gaWwgQkFTRTY0IGRlbGwnaW1tYWdpbmUgUmVzaXplZCB2aWEgcHJvbWlzZSBjbGllbnRcclxuICAgICAgICAvLyB2YXIgcmVzaXplZEJhc2U2NCA9IGF3YWl0IHRoaXMucmVzaXplQmFzZTY0SW1hZ2UoXCJkYXRhOmltYWdlL1wiICsgdmFsdWUuRmlsZUV4dGVuc2lvbiArIFwiO2Jhc2U2NCxcIiArIHZhbHVlLkZpbGVEYXRhQmFzZTY0KTtcclxuXHJcbiAgICAgICAgLy8gQWdnaXVuZ28gbCdIVE1MIGNvbiBpbCBudW92byBCQVNFNjRcclxuICAgICAgICAvLyByZXR1cm4gXCI8aW1nIHNyYz0nXCIgKyByZXNpemVkQmFzZTY0ICsgXCInIHN0eWxlPSdoZWlnaHQ6IFwiICsgdmFsdWUuUmVzaXplZEltYWdlSGVpZ2h0UHggKyBcInB4Jz5cIjtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBpbW1hZ2luaSddOiB7XHJcbiAgICAgICAgcmV0dXJuIFwiRWxlbmNvIGltbWFnaW5pXCI7XHJcbiAgICAgICAgbGV0IG91dHB1dFZhbHVlc0FycmF5ID0gXCJcIjtcclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZGNvbmZpZykuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgICAgIHZhbHVlLmZvckVhY2goKGltYWdlb2JqOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnRJbkZvcm06IER5bkF0dGFjaG1lbnQgPSAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZGNvbmZpZykuQXR0YWNobWVudExpc3QuZmluZCh4ID0+IHguSUQgPT0gaW1hZ2VvYmopO1xyXG4gICAgICAgICAgICBpZiAoYXR0YWNobWVudEluRm9ybSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXkgKz0gYXR0YWNobWVudEluRm9ybS5CdXR0b25LZXkgKyBcIiwgXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdmFyIHBhcnRzID0gb3V0cHV0VmFsdWVzQXJyYXkuc3BsaXQoXCIsIFwiKTtcclxuICAgICAgICAgIHJldHVybiBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKS5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFyIGF0dGFjaG1lbnRJbkZvcm06IER5bkF0dGFjaG1lbnQgPSAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZGNvbmZpZykuQXR0YWNobWVudExpc3QuZmluZCh4ID0+IHguSUQgPT0gdmFsdWUpO1xyXG4gICAgICAgICAgaWYgKGF0dGFjaG1lbnRJbkZvcm0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXR0YWNobWVudEluRm9ybS5CdXR0b25LZXk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfTtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydEYXRhIGUvbyBvcmEnXToge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBcIlwiKXsgcmV0dXJuIHZhbHVlOyB9XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkRhdGEgZS9vIG9yYVwiLCBmaWVsZGNvbmZpZyk7XHJcbiAgICAgICAgaWYgKCg8RGF0ZUZpZWxkPmZpZWxkY29uZmlnKS5EYXRlRm9ybWF0ICE9IG51bGwpIHtcclxuICAgICAgICAgIGxldCBmaXhEYXRlRm9ybWF0ID0gKDxEYXRlRmllbGQ+ZmllbGRjb25maWcpLkRhdGVGb3JtYXQucmVwbGFjZShcIkREXCIsIFwiZGRcIik7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0odmFsdWUsIGZpeERhdGVGb3JtYXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmICgoPERhdGVGaWVsZD5maWVsZGNvbmZpZykuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIGRhdGEnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0odmFsdWUsIFwiZGQvTU0veXl5eVwiKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoKDxEYXRlRmllbGQ+ZmllbGRjb25maWcpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnRGF0YSBlIG9yYSddKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybSh2YWx1ZSwgXCJkZC9NTS95eXl5IEhIOm1tXCIpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICgoPERhdGVGaWVsZD5maWVsZGNvbmZpZykuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIG9yYXJpbyddKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybSh2YWx1ZSwgXCJISDptbVwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBwcmludFZhbHVlXHJcblxyXG4gIC8vI3JlZ2lvbiByZXNpemVCYXNlNjRJbWFnZVxyXG4gIHByaXZhdGUgYXN5bmMgcmVzaXplQmFzZTY0SW1hZ2UoYmFzZTY0SW1hZ2U6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgaW1hZ2V0eXBlID0gL2RhdGE6aW1hZ2VcXC8oW1xcd10rKTsvO1xyXG4gICAgICBjb25zdCBtYXRjaCA9IGJhc2U2NEltYWdlLm1hdGNoKGltYWdldHlwZSk7XHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuc3JjID0gYmFzZTY0SW1hZ2U7XHJcbiAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcclxuICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IGltZy53aWR0aDtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHQ7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IDEyODtcclxuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IG5ld0hlaWdodCAqIGFzcGVjdFJhdGlvO1xyXG5cclxuICAgICAgICBjYW52YXMud2lkdGggPSBuZXdXaWR0aDtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTtcclxuICAgICAgICBsZXQgcXVhbGl0eSA9IDAuODtcclxuICAgICAgICBsZXQgZGF0YVVSTCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlLycgKyBtYXRjaFsxXSwgcXVhbGl0eSk7XHJcbiAgICAgICAgcmVzb2x2ZShkYXRhVVJMKTtcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gcmVzaXplQmFzZTY0SW1hZ2VcclxufVxyXG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJsaXN0LWZvcm0tcmVjb3JkXCI+XHJcbiAgPG1hdC1jYXJkLWhlYWRlciBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgPG1hdC1jYXJkLXRpdGxlICpuZ0lmPVwibG9hZGVkRmlsdGVycyAmJiBzaG93VGl0bGVcIlxyXG4gICAgICA+RWxlbmNvIHt7IGZvcm0uTmFtZSB9fTwvbWF0LWNhcmQtdGl0bGVcclxuICAgID5cclxuICAgIDwhLS0gPG1hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQobnVsbClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz4gLS0+XHJcbiAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8IS0tI3JlZ2lvbiBGSUxURVJTIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yXCIgKm5nSWY9XCJsb2FkZWRGaWx0ZXJzXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTMgYWxpZ24tY29udGVudC1lbmRcIj5cclxuICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyXHJcbiAgICAgICAgICBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQZXJpb2RvIGluaXppbydcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cIidQZXJpb2RvIGluaXppbydcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cIm1pbkRhdGVcIlxyXG4gICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJmaWx0ZXJEYXRhQW5zd2VycygpXCJcclxuICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGVzLkRBVEVQSUNLRVJcIlxyXG4gICAgICAgICAgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIlxyXG4gICAgICAgICAgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zIGFsaWduLWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlclxyXG4gICAgICAgICAgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGVyaW9kbyBmaW5lJ1wiXHJcbiAgICAgICAgICBbbGFiZWxdPVwiJ1BlcmlvZG8gZmluZSdcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cIm1heERhdGVcIlxyXG4gICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJmaWx0ZXJEYXRhQW5zd2VycygpXCJcclxuICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGVzLkRBVEVQSUNLRVJcIlxyXG4gICAgICAgICAgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIlxyXG4gICAgICAgICAgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPlNlbGV6aW9uZSBkZWkgY2FtcGk8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiIG11bHRpcGxlPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgcHJvcGVydHkgb2YgcHJvcGVydGllc1wiIFt2YWx1ZV09XCJwcm9wZXJ0eVwiPlxyXG4gICAgICAgICAgICAgIHt7IHByb3BlcnRpZXNMYWJlbFtwcm9wZXJ0eS5sYWJlbF0gfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTMgbXQtMlwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgc2VsZWN0ZWRQcm9wZXJ0aWVzID09IG51bGwgfHwgc2VsZWN0ZWRQcm9wZXJ0aWVzLmxlbmd0aCA9PSAwXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWdyYXBoLWdlbmVyYXRlIGJ1dHRvbi1uZXh0IG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyRGF0YUFuc3dlcnMoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgR2VuZXJhXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PiAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gRklMVEVSUyAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBUQUJMRSAtLT5cclxuICAgIDxkaXZcclxuICAgICpuZ0lmPVwiZmlsdGVyZWRBbnN3ZXJzICYmIGZpbHRlcmVkQW5zd2Vycy5sZW5ndGggPiAwOyBlbHNlIG5vX2Fuc3dlcnNcIlxyXG4gICAgICBjbGFzcz1cInRhYmxlLWNvbnRhaW5lciBtdC0zIG1iLTJcIlxyXG4gICAgPlxyXG4gICAgICA8dGFibGVcclxuICAgICAgICBtYXQtdGFibGVcclxuICAgICAgICBbZGF0YVNvdXJjZV09XCJzZWxlY3RlZFByb3BlcnRpZXNcIlxyXG4gICAgICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCBtYXQtdGFibGUtZml4ZWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPCEtLSBDb2xvbm5hIGZpc3NhIHBlciBsZSBwcm9wcmlldMOgIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicHJvcGVydHlcIiBzdGlja3k+XHJcbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwic3RpY2t5LWNvbHVtblwiPlxyXG4gICAgICAgICAgICBEYXRhIEluc2VyaW1lbnRvXHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICptYXRDZWxsRGVmPVwibGV0IHNlbGVjdGVkUHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic3RpY2t5LWNvbHVtblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHByb3BlcnRpZXNMYWJlbFtzZWxlY3RlZFByb3BlcnRpZXMubGFiZWxdIH19XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIEdlbmVyYSBkaW5hbWljYW1lbnRlIGxlIGNvbG9ubmUgcGVyIG9nbmkgcmlzcG9zdGEgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpbHRlcmVkQW5zd2VyczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cIidjb2wnICsgaVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ2YWx1ZS5JRCAhPSAnMCdcIj57eyB2YWx1ZS5BbnN3ZXJEYXRlIHwgZGF0ZSA6IFwiZGQvTU0veXl5eSBISDptbVwiIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInZhbHVlLklEID09ICcwJ1wiPnt7IHZhbHVlLkFuc3dlckRhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPCEtLSA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiB7eyB2YWx1ZS5BbnN3ZXJEYXRlIHwgZGF0ZTonZGQvTU0veXl5eSBISDptbScgfX0gPC90aD4gLS0+XHJcbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgc2VsZWN0ZWRQcm9wZXJ0aWVzXCI+XHJcbiAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9wZXJ0aWVzLmxhYmVsID09PSBcIkFuc3dlckRhdGVcIlxyXG4gICAgICAgICAgICAgICAgPyAodmFsdWUuQW5zd2VyRGF0ZSB8IGRhdGUgOiBcImRkL01NL3l5eXkgSEg6bW1cIilcclxuICAgICAgICAgICAgICAgIDogcHJpbnRWYWx1ZShcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFByb3BlcnRpZXMudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVtzZWxlY3RlZFByb3BlcnRpZXMubGFiZWxdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJvcGVydGllcy5jb25maWcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgKSA/PyBcIk4vQVwiXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwhLS0gLSBcclxuICAgICAgICAgICAge3tzZWxlY3RlZFByb3BlcnRpZXMudHlwZX19XHJcbiAgICAgICAgICAgIHt7c2VsZWN0ZWRQcm9wZXJ0aWVzLmxhYmVsfX0gLS0+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIEhlYWRlciBkZWxsYSB0YWJlbGxhIC0tPlxyXG4gICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XHJcblxyXG4gICAgICAgIDwhLS0gUmlnaGUgZGVsbGEgdGFiZWxsYSAtLT5cclxuICAgICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI25vX2Fuc3dlcnM+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIG1iLTIgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8c3Bhbj4gTm9uIGNpIHNvbm8gcmlzcG9zdGUgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBUQUJMRSAtLT5cclxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPG1hdC1jYXJkLWZvb3Rlcj5cclxuICAgIDwhLS0gPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+IC0tPlxyXG4gIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuPCEtLSA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBsaXN0LWZvcm0tcmVjb3JkLWhlYWRlclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgPGg0ICpuZ0lmPVwic2hvd1RpdGxlXCI+XHJcbiAgICAgIDxiPkVsZW5jbyB7eyBmb3JtLk5hbWUgfX08L2I+XHJcbiAgICA8L2g0PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LXJpZ2h0XCIgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuYWRkXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQobnVsbClcIj5cclxuICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxlcXAtdGFibGUgY2xhc3M9XCJsaXN0LWZvcm0tcmVjb3JkLXRhYmxlXCIgI3RhYmxlUmVjb3JkcyAqbmdJZj1cImxvYWRlciAmJiBjb25maWd1cmF0aW9ucy52YWx1ZXNcIlxyXG4gIFtkYXRhXT1cImNvbmZpZ3VyYXRpb25zLnZhbHVlc1wiIFtjb2x1bW5zXT1cImNvbHVtbnNcIj48L2VxcC10YWJsZT4gLS0+XHJcbiJdfQ==
|
|
815
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGxpc3QtZm9ybS1yZWNvcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2Zvcm0tcmVjb3Jkcy9obGlzdC1mb3JtLXJlY29yZC9obGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2hsaXN0LWZvcm0tcmVjb3JkL2hsaXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWEsYUFBYSxFQUFlLE1BQU0sb0NBQW9DLENBQUM7QUFDM0YsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRixPQUFPLEVBRUwsZ0JBQWdCLEdBQ2pCLE1BQU0sMkNBQTJDLENBQUM7QUFHbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFFekgsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBS3RDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7O0FBUW5GLE1BQU0sT0FBTyx3QkFBd0I7SUE0Q25DLHFCQUFxQjtJQUNyQixZQUNVLG9CQUEwQyxFQUMxQyxjQUFpQyxFQUNqQyxRQUFrQjtRQUZsQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBMUNuQixTQUFJLEdBQVMsSUFBSSxDQUFDLENBQUMscUJBQXFCO1FBQ3hDLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLG9CQUFlLEdBQXdCLElBQUksS0FBSyxFQUFnQixDQUFDO1FBQ2pFLGtCQUFhLEdBQXdCLElBQUksS0FBSyxFQUFnQixDQUFDO1FBRXhFLHVCQUFrQixHQUNoQixJQUFJLHlDQUF5QyxFQUFFLENBQUM7UUFDbEQsY0FBUyxHQUFHLElBQUksQ0FBQztRQUdqQixZQUFPLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFDcEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFbkIsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNoRSx3QkFBbUIsR0FBeUQsSUFBSSxZQUFZLEVBQXlDLENBQUM7UUFFdEksbUJBQWMsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNsRSx3QkFBbUIsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVqRixVQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JCLFlBQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXJCLHNEQUFzRDtRQUN0RCxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGlGQUFpRjtRQUNqRixvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQU1yQixtRkFBbUY7UUFDbkYscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLHlCQUFvQixHQUF5QyxJQUFJLENBQUM7UUFDbEUsa0NBQTZCLEdBQUcsNkJBQTZCLENBQUM7UUFRNUQsK0NBQStDO0lBQ2pELENBQUM7SUFDRCx3QkFBd0I7SUFFeEIsbUJBQW1CO0lBQ25CLFFBQVE7UUFDTixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1FBQy9DLGFBQWEsQ0FBQyxRQUFRLENBQUMsOENBQThDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTVGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBQ0Qsc0JBQXNCO0lBRXRCLHFCQUFxQjtJQUNyQixXQUFXLENBQUMsT0FBc0I7UUFDaEMsYUFBYSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RCwwRUFBMEU7UUFDMUUsa0dBQWtHO1FBQ2xHLHlFQUF5RTtRQUN6RSx5QkFBeUI7UUFDekIsSUFBSTtJQUNOLENBQUM7SUFDRCx3QkFBd0I7SUFFeEIscUJBQXFCO0lBQ3JCLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBYSxJQUFJLENBQUMsTUFBTTtRQUN4QyxhQUFhLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwRSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ3JCLE1BQU0sbUJBQW1CLEdBQ3ZCLElBQUksS0FBSyxFQUFzQixDQUFDO1lBQ2xDLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDdkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7YUFDeEMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFDaEQsbUJBQW1CLEVBQ25CLENBQUMsR0FBUyxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUNiLENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBQ0Qsd0JBQXdCO0lBRXhCLDRCQUE0QjtJQUM1Qjs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxrQkFBa0I7UUFDdEI7Ozs7V0FJRztRQUNILE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxNQUFNLEdBQVcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUM1QixNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDOUIsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUE7UUFFRDs7OztXQUlHO1FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLEVBQUU7WUFDbkMsNEVBQTRFO1lBQzVFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDbEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXRCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUN0QixDQUFDLENBQUE7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQzlCLHNFQUFzRTtZQUN0RSxhQUFhLENBQUMsUUFBUSxDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUMzRSx1QkFBdUIsRUFBRSxDQUFDO1NBQzNCO2FBQU07WUFDTCwrREFBK0Q7WUFDL0QsYUFBYSxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7WUFDM0UsSUFBSTtnQkFDRixJQUNFLElBQUksQ0FBQyxxQkFBcUI7b0JBQzFCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPO29CQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUN0RDtvQkFDQSxJQUFJLG1CQUFtQixHQUFHO3dCQUN4Qjs0QkFDRSxTQUFTLEVBQUUsT0FBTzs0QkFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDeEIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7eUJBQ3hDO3FCQUNGLENBQUM7b0JBQ0YsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7d0JBQ3RDLCtCQUErQjt3QkFDL0Isb0NBQW9DO3dCQUNwQyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQ3RELG1CQUFtQixFQUNuQixDQUFDLEdBQXFCLEVBQUUsRUFBRTs0QkFDeEIsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3RDLHVCQUF1QixFQUFFLENBQUM7d0JBQzVCLENBQUMsQ0FDRixDQUFDO3FCQUNIO3lCQUFNO3dCQUNMLG1CQUFtQjt3QkFDbkIsbUNBQW1DO3dCQUNuQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RCOzRCQUNFLFNBQVMsRUFBRSxRQUFROzRCQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNOzRCQUN0QyxTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQzt5QkFDeEMsQ0FBQyxDQUFDO3dCQUNMLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFDL0QsbUJBQW1CLEVBQ25CLENBQUMsR0FBcUIsRUFBRSxFQUFFOzRCQUN4QixnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDdEMsdUJBQXVCLEVBQUUsQ0FBQzt3QkFDNUIsQ0FBQyxDQUNGLENBQUM7cUJBRUg7aUJBQ0Y7YUFDRjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFBO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDO0lBQ0QsK0JBQStCO0lBRy9CLDBCQUEwQjtJQUMxQjs7T0FFRztJQUNLLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2I7Z0JBQ0UsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLFVBQVUsQ0FBQyxVQUFVO2dCQUMzQixjQUFjLEVBQUUsV0FBVztnQkFDM0IsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDMUIsT0FBTyxFQUFFLEVBQUU7YUFDWjtTQUNGLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxPQUFPO2lCQUNULElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUM7aUJBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1osSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLElBQUksRUFBRSxNQUFNO2dCQUNaLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUN0RCxDQUFDLENBQUM7U0FDTjtRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDeEMsSUFBSSxDQUFDLE9BQU87aUJBQ1QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQztpQkFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDWixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2FBQ25FLENBQUMsQ0FBQztTQUNOO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUM3Qzs7Ozs7O21CQU1PO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQzFDLElBQUksQ0FBQyxPQUFPO2lCQUNULElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUM7aUJBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1osSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3hELENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsT0FBTztpQkFDVCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDO2lCQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNaLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRTthQUN6QyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCw2QkFBNkI7SUFFN0IsaUNBQWlDO0lBQ2pDOzs7T0FHRztJQUNLLHVCQUF1QjtRQUM3QixhQUFhLENBQUMsUUFBUSxDQUFDLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3RDLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWU7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxlQUFlO29CQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLE9BQU87cUJBQ1QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQztxQkFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDakIsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTt3QkFDMUIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDO3dCQUNwQixNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7d0JBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3BCLDZCQUE2QjtvQkFDL0IsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUNELG9DQUFvQztJQUdwQyxxQ0FBcUM7SUFDckM7Ozs7OztPQU1HO0lBQ0ssMkJBQTJCO1FBQ2pDLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0RBQWdELEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBGLElBQUksZ0JBQWtDLENBQUM7UUFDdkMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsNEJBQTRCO1lBQzVCLElBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUM7Z0JBQzNDLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7YUFDakM7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBRS9CLGdCQUFnQjthQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNiLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWU7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsZUFBZTtnQkFDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQyxDQUNSO2FBQ0EsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFFakIsb0RBQW9EO1lBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUV0RCxJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDL0QsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO3dCQUN2RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUM1Qyw4RkFBOEY7cUJBQy9GO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFJSCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBRTVDLENBQUM7SUFDRCx3Q0FBd0M7SUFFeEMsMkJBQTJCO0lBQzNCOzs7O09BSUc7SUFDSCw4REFBOEQ7SUFDOUQsMEVBQTBFO0lBQzFFLCtCQUErQjtJQUMvQixzQ0FBc0M7SUFDdEMsMENBQTBDO0lBQzFDLGlDQUFpQztJQUNqQyw0REFBNEQ7SUFDNUQsNkRBQTZEO0lBQzdELFdBQVc7SUFDWCwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLG1EQUFtRDtJQUNuRCxXQUFXO0lBQ1gsZUFBZTtJQUNmLDBDQUEwQztJQUMxQyxhQUFhO0lBQ2IsNkVBQTZFO0lBQzdFLFlBQVk7SUFDWix5Q0FBeUM7SUFDekMsZUFBZTtJQUNmLDhFQUE4RTtJQUM5RSxjQUFjO0lBQ2QsZ0RBQWdEO0lBQ2hELHNCQUFzQjtJQUN0Qiw2RUFBNkU7SUFDN0UsY0FBYztJQUNkLDREQUE0RDtJQUM1RCxvRUFBb0U7SUFDcEUsOEJBQThCO0lBQzlCLFlBQVk7SUFDWixVQUFVO0lBQ1YsZUFBZTtJQUNmLDRDQUE0QztJQUM1QyxzREFBc0Q7SUFDdEQseURBQXlEO0lBQ3pELDRFQUE0RTtJQUM1RSx5REFBeUQ7SUFDekQsd0RBQXdEO0lBQ3hELFVBQVU7SUFDVixlQUFlO0lBQ2Ysc0NBQXNDO0lBQ3RDLHNDQUFzQztJQUV0QyxXQUFXO0lBQ1gsZ0RBQWdEO0lBQ2hELGlCQUFpQjtJQUNqQiwwREFBMEQ7SUFDMUQseURBQXlEO0lBQ3pELHNFQUFzRTtJQUN0RSxnQkFBZ0I7SUFDaEIsbUZBQW1GO0lBQ25GLGlFQUFpRTtJQUNqRSw0Q0FBNEM7SUFDNUMsZ0NBQWdDO0lBQ2hDLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsbUZBQW1GO0lBQ25GLDZFQUE2RTtJQUM3RSx3QkFBd0I7SUFDeEIsY0FBYztJQUNkLGFBQWE7SUFDYixxQ0FBcUM7SUFDckMsdUNBQXVDO0lBQ3ZDLFdBQVc7SUFFWCxlQUFlO0lBQ2YsNkNBQTZDO0lBQzdDLDhDQUE4QztJQUM5QywwREFBMEQ7SUFDMUQsMkVBQTJFO0lBQzNFLDJCQUEyQjtJQUMzQixxQkFBcUI7SUFDckIsdUVBQXVFO0lBQ3ZFLCtCQUErQjtJQUMvQixnREFBZ0Q7SUFDaEQsNERBQTREO0lBQzVELG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIsNkJBQTZCO0lBQzdCLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsMkVBQTJFO0lBQzNFLHFCQUFxQjtJQUNyQiwrRUFBK0U7SUFDL0UsZUFBZTtJQUNmLFlBQVk7SUFDWixXQUFXO0lBQ1gsbUNBQW1DO0lBQ25DLHFDQUFxQztJQUNyQyxlQUFlO0lBQ2Ysb0NBQW9DO0lBQ3BDLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YsTUFBTTtJQUNOLG1CQUFtQjtJQUNuQixJQUFJO0lBQ0osOEJBQThCO0lBRTlCLG9CQUFvQjtJQUNwQixVQUFVLENBQUMsTUFBYztRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsdUJBQXVCO0lBRXZCOzs7OztPQUtHO0lBQ0ssZ0JBQWdCLENBQUMsTUFBYyxFQUFFLFFBQWlCO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLE1BQWM7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRCwyQkFBMkI7SUFDM0I7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLGtCQUFrQjtRQUNsQyxhQUFhLENBQUMsUUFBUSxDQUFDLDRDQUE0QyxFQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlGLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQztTQUNwRDthQUFNO1lBQ0wsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDM0M7UUFDRCxhQUFhLENBQUMsUUFBUSxDQUFDLG1DQUFtQyxFQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFDRCw4QkFBOEI7SUFFOUIsMkJBQTJCO0lBQzNCOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBRTFCLElBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDO2dCQUNmLDBEQUEwRDtnQkFDMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xGLHlEQUF5RDtnQkFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6RTtZQUVELElBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDO2dCQUNmLDBEQUEwRDtnQkFDMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xGLHlEQUF5RDtnQkFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6RTtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXRDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU3SixJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7Z0JBQ3hFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDaEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqRSxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztvQkFDaEIsTUFBTSxDQUFDLFVBQVUsR0FBRyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDeEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2FBQ25DO1lBR0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6RixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQ0QsOEJBQThCO0lBRTlCLHdCQUF3QjtJQUN4QixpRUFBaUU7SUFDakUsY0FBYztRQUNaLDBEQUEwRDtRQUMxRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVsRix5REFBeUQ7UUFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCwyQkFBMkI7SUFFM0IsZ0NBQWdDO0lBQ2hDLHNCQUFzQjtRQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFFbkMsZ0RBQWdEO2dCQUVoRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUM7b0JBQUUsT0FBTztpQkFBRTtnQkFDN0IsSUFBSSxZQUFZLEdBQVEsS0FBSyxDQUFDLFlBQVksQ0FBQztnQkFFM0MsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFDO29CQUN2QixJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQzt3QkFDdEcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7cUJBQ3JFO3lCQUNJLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO3dCQUN2RyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7d0JBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDN0csT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztxQkFDcEI7eUJBQ0ksSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQzt3QkFDWixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM3RyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7cUJBQzdGO3lCQUNJLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO3dCQUN2RyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7d0JBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFOzRCQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDeEksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztxQkFDcEI7eUJBQ0ksSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7d0JBQ3ZHLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQzt3QkFDZixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUU7NEJBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzt5QkFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN4SSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO3FCQUNwQjt5QkFDSSxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQzt3QkFDM0csSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO3dCQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNuSCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUMvQzt5QkFBTTt3QkFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO3FCQUNuQjtpQkFDRjtxQkFBTSxJQUFJLFlBQVksSUFBSSxJQUFJLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQ25CO1lBSUgsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVDLE9BQU87SUFDYixDQUFDO0lBQ0QsbUNBQW1DO0lBRW5DLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxhQUFhLEdBQUcsS0FBSztRQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FDZCxHQUFHO2FBQ0EsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDdkQsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbkMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pDLENBQUM7SUFDSixDQUFDO0lBQUEsQ0FBQztJQUVGLG9CQUFvQjtJQUNwQixVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTTtRQUM5QyxRQUFRLFNBQVMsRUFBRTtZQUNqQixLQUFLLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFBRTtvQkFDckMsSUFBSSxLQUFLLElBQUksRUFBRSxFQUFDO3dCQUFFLE9BQU8sS0FBSyxDQUFDO3FCQUFFO29CQUNqQyxJQUFHLENBQUMsS0FBSyxFQUFDO3dCQUNSLE9BQU8sS0FBSyxDQUFDO3FCQUNkO29CQUNELElBQUksTUFBTSxDQUFDO29CQUNYLElBQUksVUFBVSxHQUF5QixFQUFFLENBQUM7b0JBQzFDLDZCQUE2QjtvQkFDN0IsSUFBSSxXQUFXLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFO3dCQUN0RCxJQUFJLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FDbEQsV0FBVyxDQUFDLE9BQU8sRUFDbkIsTUFBTSxFQUNOLElBQUksQ0FBQyxhQUFhLENBQ25CLENBQUM7d0JBQ0osSUFBRyxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7NEJBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzVCLElBQUksR0FBRyxFQUFFLENBQUE7NEJBQ1QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQ0FDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDaEMsSUFBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztvQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQ0FDN0M7cUNBQU07b0NBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQ0FDN0M7NEJBQ0gsQ0FBQyxDQUFDLENBQUE7eUJBQ0g7d0JBRUQsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7NEJBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7eUJBQzdCO3FCQUNGO3lCQUFNLElBQXFCLFdBQVksQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFxQixXQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2xILGVBQWU7d0JBQ2YsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBa0IsV0FBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7cUJBQ25GO3lCQUFNLElBQXFCLFdBQVksQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFxQixXQUFZLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRTt3QkFDL0csNkNBQTZDO3dCQUM3QyxVQUFVLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFrQixXQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7cUJBQzFGO29CQUVELHNEQUFzRDtvQkFDdEQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO29CQUNsQix5R0FBeUc7b0JBQ3pHLG1DQUFtQztvQkFDbkMsS0FBSyxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUU7d0JBQzFCLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7cUJBQ2pDO29CQUNELFVBQVUsR0FBRyxRQUFRLENBQUM7b0JBRXRCLHNDQUFzQztvQkFDdEMsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBcUIsV0FBWSxDQUFDLGNBQWMsRUFBRTt3QkFDcEYsbUJBQW1CO3dCQUNuQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7d0JBQ2xCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUM5QyxRQUFRLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDOzRCQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7d0JBQ2xFLENBQUMsQ0FBQyxDQUFDO3dCQUNILE1BQU0sR0FBRyxRQUFRLENBQUM7cUJBQ25CO3lCQUFNO3dCQUNMLHNCQUFzQjt3QkFDdEIsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7cUJBQy9DO29CQUNELE9BQU8sTUFBTSxDQUFDO2lCQUNmO2dCQUFBLENBQUM7WUFDRixLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFBRTtvQkFDcEMsSUFBSSxLQUFLLElBQUksRUFBRSxFQUFDO3dCQUFFLE9BQU8sS0FBSyxDQUFDO3FCQUFFO29CQUNqQyxJQUFtQixXQUFZLENBQUMsU0FBUyxFQUFFO3dCQUN6QyxJQUFtQixXQUFZLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFOzRCQUN4RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQzFCOzZCQUFNOzRCQUNMLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7NEJBQ25ELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO3lCQUNoRDtxQkFDRjt5QkFBTTt3QkFDTCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO3dCQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztxQkFDaEQ7b0JBQ0QsTUFBTTtpQkFDUDtnQkFBQSxDQUFDO1lBRUYsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUFFO29CQUM5QixPQUFPLFVBQVUsQ0FBQztvQkFDbEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUE7b0JBQ3RFLGlFQUFpRTtvQkFDakUsNkhBQTZIO29CQUU3SCx5Q0FBeUM7b0JBQ3pDLG1HQUFtRztvQkFFbkcsTUFBTTtpQkFDUDtnQkFBQSxDQUFDO1lBR0YsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUFFO29CQUM5QixPQUFPLFVBQVUsQ0FBQztvQkFDbEIsMkVBQTJFO29CQUUzRSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7d0JBQ2pCLElBQUksYUFBYSxDQUFDO3dCQUNsQiwwQkFBMEI7d0JBQzFCLG1FQUFtRTt3QkFDbkUsaUlBQWlJO3dCQUNqSSx1RUFBdUU7d0JBQ3ZFLDJDQUEyQzt3QkFDM0MsOEhBQThIO3dCQUM5SCw4REFBOEQ7d0JBQzlELDBJQUEwSTt3QkFDMUksV0FBVzt3QkFDWCwySkFBMko7d0JBQzNKLElBQUk7d0JBRUosc0NBQXNDO3dCQUN0Qyx1R0FBdUc7d0JBQ3ZHLHNGQUFzRjtxQkFDdkY7b0JBRUQsTUFBTTtpQkFDUDtnQkFBQSxDQUFDO1lBRUYsS0FBSyxhQUFhLENBQUMsc0JBQXNCLENBQUM7Z0JBQUU7b0JBQzFDLE9BQU8sc0JBQXNCLENBQUM7b0JBRTlCLDhEQUE4RDtvQkFDOUQsNkhBQTZIO29CQUU3SCxzQ0FBc0M7b0JBQ3RDLG1HQUFtRztvQkFFbkcsTUFBTTtpQkFDUDtnQkFBQSxDQUFDO1lBRUYsS0FBSyxhQUFhLENBQUMsaUJBQWlCLENBQUM7Z0JBQUU7b0JBQ3JDLE9BQU8saUJBQWlCLENBQUM7b0JBQ3pCLElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO29CQUMzQixJQUFJLEtBQUssSUFBSSxJQUFJLElBQXlCLFdBQVksQ0FBQyxjQUFjLEVBQUU7d0JBQ3JFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7NEJBQ2pDLElBQUksZ0JBQWdCLEdBQXVDLFdBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsQ0FBQzs0QkFDbkgsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7Z0NBQzVCLGlCQUFpQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7NkJBQ3hEO3dCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDMUMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDcEQ7eUJBQ0k7d0JBQ0gsSUFBSSxnQkFBZ0IsR0FBdUMsV0FBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDO3dCQUNoSCxJQUFJLGdCQUFnQixJQUFJLElBQUksRUFBRTs0QkFDNUIsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7eUJBQ25DO3FCQUNGO29CQUVELE1BQU07aUJBQ1A7Z0JBQUEsQ0FBQztZQUNGLEtBQUssYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksS0FBSyxJQUFJLEVBQUUsRUFBQztvQkFBRSxPQUFPLEtBQUssQ0FBQztpQkFBRTtnQkFDakMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ3BELElBQWdCLFdBQVksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO29CQUMvQyxJQUFJLGFBQWEsR0FBZSxXQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzVFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2lCQUN0RDtxQkFDSTtvQkFDSCxJQUFnQixXQUFZLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFO3dCQUN4RSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztxQkFDckQ7eUJBQU0sSUFBZ0IsV0FBWSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRTt3QkFDaEYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztxQkFDM0Q7eUJBQU0sSUFBZ0IsV0FBWSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsRUFBRTt3QkFDakYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7cUJBQ2hEO2lCQUNGO2dCQUNELE1BQU07YUFDUDtZQUVELE9BQU8sQ0FBQyxDQUFDO2dCQUNQLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtJQUVILENBQUM7SUFDRCx1QkFBdUI7SUFFdkIsMkJBQTJCO0lBQ25CLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFtQjtRQUNqRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztZQUN0QixHQUFHLENBQUMsTUFBTSxHQUFHO2dCQUNYLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3hCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQzFCLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7Z0JBRW5DLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztnQkFDdEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxHQUFHLFdBQVcsQ0FBQztnQkFFekMsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUMxQixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO2dCQUNsQixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3NIQS8wQlUsd0JBQXdCOzBHQUF4Qix3QkFBd0IsaWxCQy9DckMsOGdNQWlLQTs0RkRsSGEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLG1CQUFtQjtrS0FLcEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFLdUMsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU1qQyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIENvbmZpZ0NvbHVtbixcclxuICBFcXBUYWJsZUNvbXBvbmVudCxcclxuICBUeXBlQ29sdW1uLFxyXG59IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSwgQW5zd2VyU3R5bGUgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRHluUmVjb3JkLCBSZWNvcmQsIFJlY29yZEJ1dHRvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRGF0ZUZpZWxkLFxyXG4gIERhdGVUaW1lVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvZGF0ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0XCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE1vZGVFbnVtIH0gZnJvbSBcInRtdy1waWNrZXJcIjtcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VTZWxlY3RvckZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bkF0dGFjaG1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnRcIjtcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvc3RhdGlzdGljLm1vZGVsJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJobGlzdC1mb3JtLXJlY29yZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcImhsaXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2hsaXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSExpc3RGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBASW5wdXQoKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuXHJcbiAgLy8gbCd1bmEgbyBsJ2FsdHJhIHBlciBkdWUgbW9kYWxpdMOgIGQndXNvXHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7IC8vIGJvaCBtYSBjJ2VyYSBwcmltYVxyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGV4dGVybmFsQnV0dG9uczogQXJyYXk8UmVjb3JkQnV0dG9uPiA9IG5ldyBBcnJheTxSZWNvcmRCdXR0b24+KCk7XHJcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uczogQXJyYXk8QWN0aW9uQnV0dG9uPiA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcblxyXG4gIGRlZmF1bHRMaXN0QWN0aW9uczogRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPVxyXG4gICAgbmV3IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0KCk7XHJcbiAgc2hvd1RpdGxlID0gdHJ1ZTtcclxuICBAVmlld0NoaWxkKFwidGFibGVSZWNvcmRzXCIsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlUmVjb3JkczogRXFwVGFibGVDb21wb25lbnQ7XHJcblxyXG4gIGNvbHVtbnMgPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIGxvYWRlZEZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsb2FkZWRUYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgb25WaWV3UmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkFkZFZpZXdFZGl0UmVjb3JkOiBFdmVudEVtaXR0ZXI8eyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW47IH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25EZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uQWZ0ZXJEZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIG1vZGVzID0gTW9kZUVudW07XHJcbiAgbWluRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgbWF4RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gIC8vIGxlIHByb3ByaWV0w6AgZGVsbGEgcmlzcG9zdGEgZGEgc3RhbXBhcmUgbmVsbGUgcmlnaGVcclxuICBwcm9wZXJ0aWVzID0gW107XHJcbiAgLy8gbGUgbGFiZWwgYXNzb2NpYXRlIGFsbGUgcHJvcHJpZXTDoCBkYSBzdGFtcGFyZSBjaGUgY29uZGl2aWRvbm8gbG8gc3Rlc3NvIGluZGljZVxyXG4gIHByb3BlcnRpZXNMYWJlbCA9IFtdO1xyXG4gIHNlbGVjdGVkUHJvcGVydGllczogc3RyaW5nW107XHJcblxyXG4gIC8vIGkgZGF0aSBkZWxsZSByaXNwb3N0ZSBkYSBzdGFtcGFyZVxyXG4gIGZpbHRlcmVkQW5zd2VycyAvL2xlIHJpc3Bvc3RlIGZpbHRyYXRlIFxyXG5cclxuICAvLyBDb2xvbm5lIGRhIHZpc3VhbGl6emFyZSAoZmlzc2EgbGEgcHJpbWEgY29sb25uYSBlIGdlbmVyYSBkaW5hbWljYW1lbnRlIGxlIGFsdHJlKVxyXG4gIGRpc3BsYXllZENvbHVtbnMgPSBbXTtcclxuICBleGlzdGluZ0FnZ3JlZ2F0aW9uczogQXJyYXk8TnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW0+ID0gbnVsbDtcclxuICBudW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bSA9IE51bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtO1xyXG5cclxuICAvLyNyZWdpb24gQ29uc3RydWN0b3JcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGRhdGVwaXBlOiBEYXRlUGlwZVxyXG4gICkge1xyXG4gICAgLy8gdGhpcy5wcm9wZXJ0aWVzTGFiZWxbXCJBbnN3ZXJEYXRlXCJdID0gXCJEYXRhXCI7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvclxyXG5cclxuICAvLyNyZWdpb24gbmdPbkludGl0XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbnMuZGVmYXVsdExpc3RBY3Rpb25zO1xyXG4gICAgdGhpcy5zaG93VGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBuZ09uSW5pdCAtIGNvbmZpZ3VyYXRpb25zJywgdGhpcy5jb25maWd1cmF0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5nZXRGb3JtQnlJRCgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gbmdPbkludGl0XHJcblxyXG4gIC8vI3JlZ2lvbiBuZ09uQ2hhbmdlc1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjaGFuZ2VzJywgY2hhbmdlcyk7XHJcbiAgICAvLyBTZSB2aWVuZSBtb2RpZmljYXRvIGlsIHZhbG9yZSBkaSBcIm5nTW9kZWxJbnB1dFwiIGFsbG9yYSBhZ2dpb3JuYSBsJ2lucHV0XHJcbiAgICAvLyBpZiAoY2hhbmdlc1snY29uZmlndXJhdGlvbnMnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1snY29uZmlndXJhdGlvbnMnXS5maXJzdENoYW5nZSA9PSBmYWxzZSkge1xyXG4gICAgLy8gICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IGNoYW5nZXNbJ2NvbmZpZ3VyYXRpb25zJ10uY3VycmVudFZhbHVlO1xyXG4gICAgLy8gICB0aGlzLnJlbG9hZFRhYmxlcygpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gbmdPbkNoYW5nZXNcclxuXHJcbiAgLy8jcmVnaW9uIGdldEZvcm1CeUlEXHJcbiAgYXN5bmMgZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gZ2V0Rm9ybUJ5SUQnLCB0aGlzLmZvcm0pO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm0gPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2V0Rm9ybUJ5SURcclxuXHJcbiAgLy8jcmVnaW9uIGdldFJlY29yZHNCeUZvcm1JRFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKiBMYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBkZXZlIGVzc2VyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRpIHRpcG8gXCJEeW5SZWNvcmRcIlxyXG4gICAqIGEgcGFydGlyZSBkYWkgcXVhbGkgdmVuZ29ubyByaWNyZWF0aSBpIFJlY29yZCB1c2F0aSBuZWwgY2xpZW50LlxyXG4gICAqL1xyXG4gIGFzeW5jIGdldFJlY29yZHNCeUZvcm1JRCgpIHtcclxuICAgIC8qKlxyXG4gICAgICogcHJlbmRlIGxlIHJpc3Bvc3RlIGUgbGUgcmVuZGUgcGlhdHRlLCBhZGF0dGUgYSBkaXZlbnRhcmUgdW5hIHJpZ2EgZGEgdGFiZWxsYVxyXG4gICAgICogbWV0dGUgdHV0dGUgbGUgcmlzcG9zdGUgbmVsbGUgc3RydXR0dXJlIG5lY2Vzc2FyaWUgcGVyIGlsIHJlY3VwZXJvIGUgbGEgdmlzdWFsaXp6YXppb25lXHJcbiAgICAgKiBAcGFyYW0gYW5zd2VycyBcclxuICAgICAqL1xyXG4gICAgY29uc3QgcmVhcnJhbmdlQW5zd2Vyc0FuZFBvcHVsYXRlTGlzdHMgPSAoYW5zd2VycykgPT4ge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IG5ldyBBcnJheTxSZWNvcmQ+KCk7XHJcbiAgICAgIGFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyKSA9PiB7XHJcbiAgICAgICAgdmFyIHRtcFJlYzogUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2UoYW5zd2VyLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRtcFJlYy5JRCA9IGFuc3dlci5JRDtcclxuICAgICAgICB0bXBSZWMuRW50SUQgPSBhbnN3ZXIuRW50SUQ7XHJcbiAgICAgICAgdG1wUmVjLlZlcnNpb24gPSBhbnN3ZXIuVmVyc2lvbjtcclxuICAgICAgICB0bXBSZWMudXNlcklEID0gYW5zd2VyLnVzZXJJRDtcclxuICAgICAgICB0bXBSZWMuQW5zd2VyRGF0ZSA9IGFuc3dlci5BbnN3ZXJEYXRlO1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLnB1c2godG1wUmVjKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBwcmVwYXJhIGxhIGxpc3RhIGRlbGxlIGNvbG9ubmUgZGEgbW9zdHJhcmUgKHVuYSBwZXIgb2duaSByaXNwb3N0YSwgcGnDuSBsYSBjb2xvbm5hIGRlbGxlIHByb3ByaWV0w6ApXHJcbiAgICAgKiBpbXBvc3RhIGxhIGxpc3RhIGRlbGxlIHJpc3Bvc3RlIGRhIHZpc3VhbGl6emFyZVxyXG4gICAgICogbGliZXJhIGxlIHZhcmlhYmlsaSBkaSBjYXJpY2FtZW50byBwZXIgbW9zdHJhcmUgaSBjb250ZW51dGkgZGVsbGEgdmlzdGFcclxuICAgICAqL1xyXG4gICAgY29uc3QgbmFtZUNvbHVtbnNBbmRTdGFydFZpZXcgPSAoKSA9PiB7XHJcbiAgICAgIC8vZGVzdHJ1dHR1cmEgbCdhcnJheSByaXNwb3N0ZSBlIHBlciBvZ25pIHJpc3Bvc3RhIGdlbmVyYSB1biBlbGVtZW50byBjb2xbaV1cclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gW1wicHJvcGVydHlcIiwgLi4udGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubWFwKChfLCBpKSA9PiBgY29sJHtpfWApXTtcclxuICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcztcclxuICAgICAgdGhpcy5zZXRNaW5NYXhEYXRlcygpO1xyXG5cclxuICAgICAgdGhpcy5sb2FkZWRGaWx0ZXJzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkZWRUYWJsZSA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKF8pID0+IHtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMpIHtcclxuICAgICAgLy8gdmVuZ28gZGEgdW4nYWx0cmEgdmlzdWFsaXp6YXppb25lIGNoZSBoYSBnacOgIHJlY3VwZXJhdG8gbGUgcmlzcG9zdGVcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImhMaXN0IC0gZ2V0UmVjb3Jkc0J5Rm9ybUlEIEFcIiwgdGhpcy5jb25maWd1cmF0aW9ucylcclxuICAgICAgbmFtZUNvbHVtbnNBbmRTdGFydFZpZXcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHNvbm8gaW4gdW5hIG51b3ZhIGlzdGFuemEgaW4gY3VpIGRldm8gcmVjdXBlcmFyZSBsZSByaXNwb3N0ZVxyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaExpc3QgLSBnZXRSZWNvcmRzQnlGb3JtSUQgQlwiLCB0aGlzLmNvbmZpZ3VyYXRpb25zKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGxldCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIG5vbiBobyBzcGVjaWZpY2F0byB1biB1dGVudGVcclxuICAgICAgICAgICAgLy8gdmVkbyB0dXR0ZSBsZSByaXNwb3N0ZSBkZWwgbW9kdWxvXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludCxcclxuICAgICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJlYXJyYW5nZUFuc3dlcnNBbmRQb3B1bGF0ZUxpc3RzKHJlcyk7XHJcbiAgICAgICAgICAgICAgICBuYW1lQ29sdW1uc0FuZFN0YXJ0VmlldygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGNvbm9zY28gbCd1dGVudGVcclxuICAgICAgICAgICAgLy8gdm9nbGlvIHNvbGFtZW50ZSBsZSBzdWUgcmlzcG9zdGVcclxuICAgICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJVc2VySURcIixcclxuICAgICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCxcclxuICAgICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJlYXJyYW5nZUFuc3dlcnNBbmRQb3B1bGF0ZUxpc3RzKHJlcyk7XHJcbiAgICAgICAgICAgICAgICBuYW1lQ29sdW1uc0FuZFN0YXJ0VmlldygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignZXhjZXB0aW9uJywgZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2V0UmVjb3Jkc0J5Rm9ybUlEXHJcblxyXG5cclxuICAvLyNyZWdpb24gY29uZmlndXJlQ29sdW1uc1xyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgbGUgY29sb25uZSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5jb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW10sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy52aWV3ID09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogXCJWaXN1YWxpenphXCIsXHJcbiAgICAgICAgICBpY29uOiBcImluZm9cIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy52aWV3UmVjb3JkKGVsZW1lbnQpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmVkaXQgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy52aWV3T3JFZGl0UmVjb3JkKGVsZW1lbnQsIGZhbHNlKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kdXBsaWNhdGUgPT0gdHJ1ZSkge1xyXG4gICAgICAvKnRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IFwiRHVwbGljYVwiLFxyXG4gICAgICAgICAgaWNvbjogXCJmaWxlX2NvcHlcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kdXBsaWNhdGVSZWNvcmQoZWxlbWVudCksXHJcbiAgICAgICAgfSk7Ki9cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZGVsZXRlUmVjb3JkKGVsZW1lbnQpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZXh0ZXJuYWxCdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBidXR0b24udGV4dCxcclxuICAgICAgICAgIGljb246IGJ1dHRvbi5pY29uLFxyXG4gICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiBidXR0b24uZm4oKSxcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKTtcclxuICAgIHRoaXMuY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzKCk7XHJcbiAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gY29uZmlndXJlQ29sdW1uc1xyXG5cclxuICAvLyNyZWdpb24gY3JlYXRlQWRkaXRpb25hbEFjdGlvbnNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2l1bmdlcmUgbmVsbGEgY29sb25uYSBcImFjdGlvblwiIGRlbGxhIGVxcC10YWJsZSBsZSBhemlvbmkgc3VpIHJlY29yZFxyXG4gICAqIGRlZmluaXRlIGRhbGwndXRlbnRlIGFsbCdpbnRlcm5vIGRlbGxhIEZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVBZGRpdGlvbmFsQWN0aW9ucygpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjcmVhdGVBZGRpdGlvbmFsQWN0aW9ucycsIHRoaXMuZm9ybSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQgJiYgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuc29ydCgoYSwgYikgPT5cclxuICAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICA/IDFcclxuICAgICAgICAgIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgICA/IC0xXHJcbiAgICAgICAgICAgIDogMFxyXG4gICAgICApLmZvckVhY2goKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6IGFjdGlvbi5OYW1lLFxyXG4gICAgICAgICAgICBpY29uOiBhY3Rpb24uSWNvbixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVjID0gZWxlbWVudDtcclxuICAgICAgICAgICAgICBjb25zdCBjdHggPSBVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0O1xyXG4gICAgICAgICAgICAgIGV2YWwoYWN0aW9uLkFjdGlvbik7XHJcbiAgICAgICAgICAgICAgLy8gVE9ETzogc2FsdmFyZSBsZSBtb2RpZmljaGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zXHJcblxyXG5cclxuICAvLyNyZWdpb24gY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGVsbGUgY29sb25uZSBwZXIgbGEgZXFwLXRhYmxlLlxyXG4gICAqIEluZGl2aWR1YSBpIEJhc2VGaWVsZCBkYSBtb3N0cmFyZSBlIGxpIHVzYSBwZXIgY3JlYXJlIGxlIENvbmZpZ0NvbHVtbi5cclxuICAgKiBMZSBjb2xvbm5lIHZlbmdvbm8gY3JlYXRlIHBlciBpIEJhc2VGaWVsZCBjb24gaWwgZmxhZyBJbkxpc3RWaWV3IGEgVFJVRVxyXG4gICAqIG9wcHVyZSwgbmVsIGNhc28gbm9uIHNpYW5vIHN0YXRpIHNwZWNpZmljYXRpIGkgY2FtcGkgZGEgdmlzdWFsaXp6YXJlLFxyXG4gICAqIHNlbGV6aW9uYSBpIHByaW1pIDYuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMoKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzJywgdGhpcy5mb3JtKTtcclxuXHJcbiAgICB2YXIgZmllbGRzRm9yQ29sdW1uczogQXJyYXk8QmFzZUZpZWxkPjtcclxuICAgIGZpZWxkc0ZvckNvbHVtbnMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4ge1xyXG4gICAgICAvL25hc2NvbmRlcmUgY2FtcGkgZXRpY2hldHRhXHJcbiAgICAgIGlmKGYuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFdGljaGV0dGFcIl0pe1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZi5BbnN3ZXJTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmLkFuc3dlclN0eWxlLkluTGlzdFZpZXc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGYuSW5MaXN0VmlldztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5leGlzdGluZ0FnZ3JlZ2F0aW9ucyA9IFtdO1xyXG5cclxuICAgIGZpZWxkc0ZvckNvbHVtbnNcclxuICAgICAgLnNvcnQoKGEsIGIpID0+XHJcbiAgICAgICAgYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgPyAxXHJcbiAgICAgICAgICA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgICAgPyAtMVxyXG4gICAgICAgICAgICA6IDBcclxuICAgICAgKVxyXG4gICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBcclxuICAgICAgICAvLyB0aGlzLmNvbHVtbnMucHVzaCh0aGlzLmNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkKSk7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzLnB1c2goeyBsYWJlbDogZmllbGQuTGFiZWwsIHR5cGU6IGZpZWxkLkZpZWxkVHlwZSwgY29uZmlnOiBmaWVsZCB9KTtcclxuICAgICAgICB0aGlzLnByb3BlcnRpZXNMYWJlbFtmaWVsZC5MYWJlbF0gPSBmaWVsZC5EZXNjcmlwdGlvbjtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLkFnZ3JlZ2F0aW9ucyAhPSBudWxsICYmIGZpZWxkLkFnZ3JlZ2F0aW9ucy5sZW5ndGggPiAwICl7XHJcbiAgICAgICAgICBmaWVsZC5BZ2dyZWdhdGlvbnMuZm9yRWFjaCgoYWdncmVnYXRpb24pID0+IHsgIFxyXG4gICAgICAgICAgICBpZiAodGhpcy5leGlzdGluZ0FnZ3JlZ2F0aW9ucy5pbmRleE9mKGFnZ3JlZ2F0aW9uKSA9PSAtMSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ0FnZ3JlZ2F0aW9ucy5wdXNoKGFnZ3JlZ2F0aW9uKTtcclxuICAgICAgICAgICAgICAvL3RoaXMucHJvcGVydGllc0xhYmVsW051bWJlckFnZ3JlZ2F0aW9uRnVuY3Rpb25FbnVtW2FnZ3JlZ2F0aW9uXS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCldID0gXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgdGhpcy5zZWxlY3RlZFByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzXHJcblxyXG4gIC8vI3JlZ2lvbiBjcmVhdGVGaWVsZENvbHVtblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGwnb2dnZXR0byBDb25maWd1cmVDb2x1bW4gY2hlIHJhcHByZXNlbnRhIGlsIEJhc2VGaWVsZCBwYXNzYXRvIGluIGlucHV0LlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgcGVyIGN1aSBjcmVhcmUgbGEgY29sb25uYSBuZWxsYSBlcXAtdGFibGVcclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgQ29uZmlnQ29sdW1uIHBlciBsYSBlcXAtdGFibGVcclxuICAgKi9cclxuICAvLyBwcml2YXRlIGNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkOiBCYXNlRmllbGQpOiBDb25maWdDb2x1bW4ge1xyXG4gIC8vICAgdmFyIGNvbHVtbjogQ29uZmlnQ29sdW1uID0geyBrZXk6IGZpZWxkLk5hbWUsIGRpc3BsYXk6IGZpZWxkLkxhYmVsIH07XHJcbiAgLy8gICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAvLyAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uQm9vbGVhbjtcclxuICAvLyAgICAgICBjb2x1bW4uYm9vbGVhblZhbHVlcyA9IHtcclxuICAvLyAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS10aW1lcyBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gIC8vICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gIC8vICAgICAgIH07XHJcbiAgLy8gICAgICAgY29sdW1uLnN0eWxlcyA9IHtcclxuICAvLyAgICAgICAgIGZsZXg6IFwiMCAwIDclXCIsXHJcbiAgLy8gICAgICAgICBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIsXHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdOlxyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgIT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gb3JhcmlvXCJdXHJcbiAgLy8gICAgICAgKSB7XHJcbiAgLy8gICAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uRGF0ZTtcclxuICAvLyAgICAgICAgIGlmIChcclxuICAvLyAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiRGF0YSBlIG9yYVwiXVxyXG4gIC8vICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSBcImRkL01NL3l5eXkgSEg6bW1cIjtcclxuICAvLyAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgLy8gICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gZGF0YVwiXVxyXG4gIC8vICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0XHJcbiAgLy8gICAgICAgICAgICAgPyAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0LnJlcGxhY2UoXCJERFwiLCBcImRkXCIpXHJcbiAgLy8gICAgICAgICAgICAgOiBcImRkL01NL3l5eXlcIjtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgYnJlYWs7XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gIC8vICAgICAgIGlmICgoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbCkge1xyXG4gIC8vICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkNVUlJFTkNZO1xyXG4gIC8vICAgICAgICAgY29sdW1uLmN1cnJlbmN5UGlwZUNvZGUgPSAoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbDtcclxuICAvLyAgICAgICB9IGVsc2UgaWYgKCEoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5Jc0ludGVnZXIpIHtcclxuICAvLyAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5ERUNJTUFMO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQWxsZWdhdG9cIl06XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG5cclxuICAvLyAgICAgICAvKlxyXG4gIC8vICAgICAgICAgY29sdW1uLnZhbHVlID0gKGVsZW1lbnQ6IFJlY29yZCkgPT4ge1xyXG4gIC8vICAgICAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAgICAgKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuSXNNdWx0aUF0dGFjaCB8fFxyXG4gIC8vICAgICAgICAgICAgICgoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbiAmJlxyXG4gIC8vICAgICAgICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaClcclxuICAvLyAgICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA+IDBcclxuICAvLyAgICAgICAgICAgICAgID8gKGVsZW1lbnRbZmllbGQuTmFtZV0gYXMgQXJyYXk8SUF0dGFjaG1lbnREVE8+KVxyXG4gIC8vICAgICAgICAgICAgICAgICAgIC5tYXAoKGEpID0+IGEuRmlsZU5hbWUpXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxyXG4gIC8vICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIHJldHVybiBlbGVtZW50W2ZpZWxkLk5hbWVdICE9IG51bGwgJiYgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPiAwXHJcbiAgLy8gICAgICAgICAgICAgICA/IChlbGVtZW50W2ZpZWxkLk5hbWVdIGFzIEFycmF5PElBdHRhY2htZW50RFRPPilbMF0uRmlsZU5hbWVcclxuICAvLyAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfTtcclxuICAvLyAgICAgICAgIGNvbHVtbi5pc1NvcnRhYmxlID0gZmFsc2U7XHJcbiAgLy8gICAgICAgICBjb2x1bW4uaXNTZWFyY2hhYmxlID0gZmFsc2U7XHJcbiAgLy8gICAgICAgKi9cclxuXHJcbiAgLy8gICAgICAgYnJlYWs7XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAvLyAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7XHJcbiAgLy8gICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jc011bHRpQ2hvaWNoZSkge1xyXG4gIC8vICAgICAgICAgICBpZiAoIWVsZW1lbnRbZmllbGQuTmFtZV0gfHwgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPT0gMCkge1xyXG4gIC8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpXHJcbiAgLy8gICAgICAgICAgICAgICAuZmlsdGVyKChrKSA9PlxyXG4gIC8vICAgICAgICAgICAgICAgICBlbGVtZW50W2ZpZWxkLk5hbWVdLmluY2x1ZGVzKFxyXG4gIC8vICAgICAgICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXVxyXG4gIC8vICAgICAgICAgICAgICAgICApXHJcbiAgLy8gICAgICAgICAgICAgICApXHJcbiAgLy8gICAgICAgICAgICAgICAuam9pbihcIiwgXCIpO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKS5maW5kKFxyXG4gIC8vICAgICAgICAgICAgIChrKSA9PlxyXG4gIC8vICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdID09IGVsZW1lbnRbZmllbGQuTmFtZV1cclxuICAvLyAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9O1xyXG4gIC8vICAgICAgIGNvbHVtbi5pc1NvcnRhYmxlID0gZmFsc2U7XHJcbiAgLy8gICAgICAgY29sdW1uLmlzU2VhcmNoYWJsZSA9IGZhbHNlO1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgLy8gICAgICAgLy8gVE9ET1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIGNvbHVtbjtcclxuICAvLyB9XHJcbiAgLy8jZW5kcmVnaW9uIGNyZWF0ZUZpZWxkQ29sdW1uXHJcblxyXG4gIC8vI3JlZ2lvbiB2aWV3UmVjb3JkXHJcbiAgdmlld1JlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5vblZpZXdSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gdmlld1JlY29yZFxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIHNjYXRlbmEgbCdldmVudG8gZGkgT3V0cHV0IHBlciBtb3N0cmFyZSBvIG1vZGlmaWNhcmUgaWwgcmVjb3JkXHJcbiAgICogc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIHZpZW5lIG1vc3RyYXRvIGlsIGNvbXBvbmVudGUgYWRkLWZvcm0tcmVjb3JkIGluIHNvbGEgbGV0dHVyYS5cclxuICAgKi9cclxuICBwcml2YXRlIHZpZXdPckVkaXRSZWNvcmQocmVjb3JkOiBSZWNvcmQsIG9ubHlWaWV3OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVsaW1pbmFyZSB1biByZWNvcmQgZGFsbGEgbGlzdGEuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZWxpbWluYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBkZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIHRoaXMub25EZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRUYWJsZXMoKSB7XHJcbiAgICBpZiAodGhpcy50YWJsZVJlY29yZHMpIHtcclxuICAgICAgdGhpcy50YWJsZVJlY29yZHMucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gb25TZWxlY3Rpb25DaGFuZ2VcclxuICAvKipcclxuICAgKiBGdW56aW9uZSBjaGUgdmllbmUgY2hpYW1hdGEgYWwgY2FtYmlvIGRpIHNlbGV6aW9uZSBkZWkgcGFyYW1ldHJpIGRhIG1vc3RyYXJlXHJcbiAgICogYWdnaW9ybmEgbGEgbGlzdGEgZGVsbGUgcHJvcHJpZXTDoCBzZWxlemlvbmF0ZSBjaGUgZ2VzdGlzY2UgbGUgcmlnaGUgbW9zdHJhdGUgcGVyIG9nbmkgcmlzcG9zdGFcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWRQcm9wZXJ0aWVzIFxyXG4gICAqL1xyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkUHJvcGVydGllcykge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm9uU2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGVkUHJvcGVydGllcy52YWx1ZVwiLHNlbGVjdGVkUHJvcGVydGllcy52YWx1ZSk7XHJcbiAgICBpZiAoc2VsZWN0ZWRQcm9wZXJ0aWVzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb3BlcnRpZXMgPSBzZWxlY3RlZFByb3BlcnRpZXMudmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJ0aGlzLnNlbGVjdGVkUHJvcGVydGllcyBhc3NlZ25hdGFcIix0aGlzLnNlbGVjdGVkUHJvcGVydGllcyk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvblNlbGVjdGlvbkNoYW5nZVxyXG5cclxuICAvLyNyZWdpb24gZmlsdGVyRGF0YUFuc3dlcnNcclxuICAvKipcclxuICAgKiBmdW56aW9uZSBjaGUgZmlsdHJhIGxlIHJpc3Bvc3RlIGluIGJhc2UgYWwgcmFuZ2UgZGkgZGF0ZSBiYXNhbmRvc2kgc3VsIGNhbXBvIGZpc3NvIEFuc3dlckRhdGUgcGVyIGlsIHBhcmFnb25lXHJcbiAgICovXHJcbiAgZmlsdGVyRGF0YUFuc3dlcnMoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMgPSBbXTtcclxuXHJcbiAgICAgIGlmKCF0aGlzLm1pbkRhdGUpe1xyXG4gICAgICAgIC8vIENvbnZlcnRvIGxlIGRhdGUgZGkgQW5zd2VyRGF0ZSBpbiBvZ2dldHRpIERhdGUgZSBvcmRpbm9cclxuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLm1hcCh2YWx1ZSA9PiBuZXcgRGF0ZSh2YWx1ZS5BbnN3ZXJEYXRlKSk7ICAgIFxyXG4gICAgICAgIC8vIFRyb3ZvIGxhIGRhdGEgcGnDuSByZWNlbnRlIChtYXgpIGUgbGEgcGnDuSB2ZWNjaGlhIChtaW4pXHJcbiAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoTWF0aC5taW4oLi4uZGF0ZXMubWFwKGRhdGUgPT4gZGF0ZS5nZXRUaW1lKCkpKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKCF0aGlzLm1heERhdGUpe1xyXG4gICAgICAgIC8vIENvbnZlcnRvIGxlIGRhdGUgZGkgQW5zd2VyRGF0ZSBpbiBvZ2dldHRpIERhdGUgZSBvcmRpbm9cclxuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLm1hcCh2YWx1ZSA9PiBuZXcgRGF0ZSh2YWx1ZS5BbnN3ZXJEYXRlKSk7ICAgIFxyXG4gICAgICAgIC8vIFRyb3ZvIGxhIGRhdGEgcGnDuSByZWNlbnRlIChtYXgpIGUgbGEgcGnDuSB2ZWNjaGlhIChtaW4pXHJcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUoTWF0aC5tYXgoLi4uZGF0ZXMubWFwKGRhdGUgPT4gZGF0ZS5nZXRUaW1lKCkpKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tYXhEYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDU5KTtcclxuXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMuZmlsdGVyKCB2YWx1ZSA9PiBuZXcgRGF0ZSh2YWx1ZS5BbnN3ZXJEYXRlKSA+PSB0aGlzLm1pbkRhdGUgJiYgbmV3IERhdGUodmFsdWUuQW5zd2VyRGF0ZSkgPD0gdGhpcy5tYXhEYXRlKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmV4aXN0aW5nQWdncmVnYXRpb25zICE9IG51bGwgJiYgdGhpcy5leGlzdGluZ0FnZ3JlZ2F0aW9ucy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgdGhpcy5leGlzdGluZ0FnZ3JlZ2F0aW9ucy5mb3JFYWNoKChhZ2dyZWdhdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciByZWNvcmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyZWRBbnN3ZXJzWzBdKSk7XHJcbiAgICAgICAgICAgICAgcmVjb3JkLklEID0gXCIwXCI7XHJcbiAgICAgICAgICAgICAgcmVjb3JkLkFuc3dlckRhdGUgPSBOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bVthZ2dyZWdhdGlvbl0udG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzLnB1c2gocmVjb3JkKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZpbGxBZ2dyZWdhdGlvbkNvbHVtbnMoKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFtcInByb3BlcnR5XCIsIC4uLnRoaXMuZmlsdGVyZWRBbnN3ZXJzLm1hcCgoXywgaSkgPT4gYGNvbCR7aX1gKV07XHJcblxyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGZpbHRlckRhdGFBbnN3ZXJzXHJcblxyXG4gIC8vI3JlZ2lvbiBzZXRNaW5NYXhEYXRlc1xyXG4gIC8vIEZ1bnppb25lIHBlciBvdHRlbmVyZSBsYSBkYXRhIHBpw7kgcmVjZW50ZSBlIHF1ZWxsYSBwacO5IHZlY2NoaWFcclxuICBzZXRNaW5NYXhEYXRlcygpIHtcclxuICAgIC8vIENvbnZlcnRvIGxlIGRhdGUgZGkgQW5zd2VyRGF0ZSBpbiBvZ2dldHRpIERhdGUgZSBvcmRpbm9cclxuICAgIGNvbnN0IGRhdGVzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubWFwKHZhbHVlID0+IG5ldyBEYXRlKHZhbHVlLkFuc3dlckRhdGUpKTtcclxuXHJcbiAgICAvLyBUcm92byBsYSBkYXRhIHBpw7kgcmVjZW50ZSAobWF4KSBlIGxhIHBpw7kgdmVjY2hpYSAobWluKVxyXG4gICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoTWF0aC5taW4oLi4uZGF0ZXMubWFwKGRhdGUgPT4gZGF0ZS5nZXRUaW1lKCkpKSk7XHJcbiAgICB0aGlzLm1heERhdGUgPSBuZXcgRGF0ZShNYXRoLm1heCguLi5kYXRlcy5tYXAoZGF0ZSA9PiBkYXRlLmdldFRpbWUoKSkpKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHNldE1pbk1heERhdGVzXHJcblxyXG4gIC8vI3JlZ2lvbiBmaWxsQWdncmVnYXRpb25Db2x1bW5zXHJcbiAgZmlsbEFnZ3JlZ2F0aW9uQ29sdW1ucygpe1xyXG4gICAgdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCA9PSAnMCcpLmZvckVhY2goKGFnZ3JDb2wpID0+IHtcclxuICAgICAgT2JqZWN0LmtleXMoYWdnckNvbCkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcblxyXG4gICAgICAgIC8vaWYgKGtleSAhPSBcIkFuc3dlckRhdGVcIil7IGFnZ3JDb2xba2V5XSA9IFwiXCI7IH1cclxuXHJcbiAgICAgICAgdmFyIGZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5maW5kKHggPT4geC5MYWJlbCA9PSBrZXkpO1xyXG4gICAgICAgIGlmIChmaWVsZCA9PSBudWxsKXsgcmV0dXJuOyB9XHJcbiAgICAgICAgdmFyIGFnZ3JlZ2F0aW9uczogYW55ID0gZmllbGQuQWdncmVnYXRpb25zO1xyXG5cclxuICAgICAgICBpZiAoYWdncmVnYXRpb25zICE9IG51bGwpe1xyXG4gICAgICAgICAgaWYgKGFnZ3JDb2wuQW5zd2VyRGF0ZSA9PSBcIkNPVU5UXCIgJiYgYWdncmVnYXRpb25zLmluZGV4T2YoTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW1bXCJDT1VOVFwiXSkgIT0gLTEpeyBcclxuICAgICAgICAgICAgYWdnckNvbFtrZXldID0gdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCAhPSAnMCcpLmxlbmd0aDsgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChhZ2dyQ29sLkFuc3dlckRhdGUgPT0gXCJTVU1cIiAmJiBhZ2dyZWdhdGlvbnMuaW5kZXhPZihOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bVtcIlNVTVwiXSkgIT0gLTEpeyBcclxuICAgICAgICAgICAgdmFyIHN1bSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzLmZpbHRlcih4ID0+IHguSUQgIT0gJzAnICYmICFpc05hTih4W2tleV0pKS5mb3JFYWNoKGVsID0+IHsgc3VtICs9IHBhcnNlSW50KGVsW2tleV0pOyB9KTtcclxuICAgICAgICAgICAgYWdnckNvbFtrZXldID0gc3VtOyAgICAgICAgICBcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBlbHNlIGlmIChhZ2dyQ29sLkFuc3dlckRhdGUgPT0gXCJBVkdcIiAmJiBhZ2dyZWdhdGlvbnMuaW5kZXhPZihOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bVtcIkFWR1wiXSkgIT0gLTEpeyBcclxuICAgICAgICAgICAgdmFyIGF2ZyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzLmZpbHRlcih4ID0+IHguSUQgIT0gJzAnICYmICFpc05hTih4W2tleV0pKS5mb3JFYWNoKGVsID0+IHsgYXZnICs9IHBhcnNlSW50KGVsW2tleV0pOyB9KTtcclxuICAgICAgICAgICAgYWdnckNvbFtrZXldID0gYXZnIC8gdGhpcy5maWx0ZXJlZEFuc3dlcnMuZmlsdGVyKHggPT4geC5JRCAhPSAnMCcgJiYgIWlzTmFOKHhba2V5XSkpLmxlbmd0aDsgICAgICAgICAgXHJcbiAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICBlbHNlIGlmIChhZ2dyQ29sLkFuc3dlckRhdGUgPT0gXCJNSU5cIiAmJiBhZ2dyZWdhdGlvbnMuaW5kZXhPZihOdW1iZXJBZ2dyZWdhdGlvbkZ1bmN0aW9uRW51bVtcIk1JTlwiXSkgIT0gLTEpeyBcclxuICAgICAgICAgICAgdmFyIG1pbiA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRBbnN3ZXJzLmZpbHRlcih4ID0+IHguSUQgIT0gJzAnICYmICFpc05hTih4W2tleV0pKS5mb3JFYWNoKGVsID0+IHsgaWYgKG1pbiA9PSBudWxsIHx8IGVsW2tleV0gPCBtaW4pIHsgbWluID0gZWxba2V5XTsgfSB9KTtcclxuICAgICAgICAgICAgYWdnckNvbFtrZXldID0gbWluOyAgICAgICAgICBcclxuICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgICAgZWxzZSBpZiAoYWdnckNvbC5BbnN3ZXJEYXRlID09IFwiTUFYXCIgJiYgYWdncmVnYXRpb25zLmluZGV4T2YoTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW1bXCJNQVhcIl0pICE9IC0xKXsgXHJcbiAgICAgICAgICAgIHZhciBtYXggPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkQW5zd2Vycy5maWx0ZXIoeCA9PiB4LklEICE9ICcwJyAmJiAhaXNOYU4oeFtrZXldKSkuZm9yRWFjaChlbCA9PiB7IGlmIChtaW4gPT0gbnVsbCB8fCBlbFtrZXldID4gbWF4KSB7IG1heCA9IGVsW2tleV07IH0gfSk7XHJcbiAgICAgICAgICAgIGFnZ3JDb2xba2V5XSA9IG1heDsgICAgICAgICAgXHJcbiAgICAgICAgICB9ICAgICBcclxuICAgICAgICAgIGVsc2UgaWYgKGFnZ3JDb2wuQW5zd2VyRGF0ZSA9PSBcIlNUREVWXCIgJiYgYWdncmVnYXRpb25zLmluZGV4T2YoTnVtYmVyQWdncmVnYXRpb25GdW5jdGlvbkVudW1bXCJTVERFVlwiXSkgIT0gLTEpeyBcclxuICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkQW5zd2Vycy5maWx0ZXIoeCA9PiB4LklEICE9ICcwJyAmJiAhaXNOYU4oeFtrZXldKSkuZm9yRWFjaChlbCA9PiB7IHZhbHVlcy5wdXNoKHBhcnNlSW50KGVsW2tleV0pKTsgfSk7XHJcbiAgICAgICAgICAgIGFnZ3JDb2xba2V5XSA9IHRoaXMuc3RhbmRhcmREZXZpYXRpb24odmFsdWVzKTsgICAgICAgICAgXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhZ2dyQ29sW2tleV0gPSBcIlwiO1xyXG4gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKGFnZ3JlZ2F0aW9ucyA9PSBudWxsIHx8IGFnZ3JlZ2F0aW9ucy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgYWdnckNvbFtrZXldID0gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGZpbGxBZ2dyZWdhdGlvbkNvbHVtbnNcclxuXHJcbiAgc3RhbmRhcmREZXZpYXRpb24oYXJyLCB1c2VQb3B1bGF0aW9uID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IG1lYW4gPSBhcnIucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgdmFsLCAwKSAvIGFyci5sZW5ndGg7XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KFxyXG4gICAgICBhcnJcclxuICAgICAgICAucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjLmNvbmNhdCgodmFsIC0gbWVhbikgKiogMiksIFtdKVxyXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApIC9cclxuICAgICAgICAoYXJyLmxlbmd0aCAtICh1c2VQb3B1bGF0aW9uID8gMCA6IDEpKVxyXG4gICAgKTtcclxuICB9OyAgIFxyXG5cclxuICAvLyNyZWdpb24gcHJpbnRWYWx1ZVxyXG4gIHByaW50VmFsdWUoZmllbGRUeXBlLCB2YWx1ZSwgZmllbGRjb25maWcsIHJlY29yZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOiB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IFwiXCIpeyByZXR1cm4gdmFsdWU7IH1cclxuICAgICAgICBpZighdmFsdWUpe1xyXG4gICAgICAgICAgcmV0dXJuIFwiTi9BXCI7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBsZXQgb3V0cHV0O1xyXG4gICAgICAgIGxldCBWYWx1ZVBhaXJzOiB7W2tleTpzdHJpbmddOiBhbnk7fSA9IFtdO1xyXG4gICAgICAgIC8vIFBSRVBBUk8vTEVHR08gSSBWQUxVRVBBSVJTXHJcbiAgICAgICAgaWYgKGZpZWxkY29uZmlnLkZvcm11bGEgIT0gbnVsbCAmJiBmaWVsZGNvbmZpZy5Gb3JtdWxhKSB7XHJcbiAgICAgICAgICB2YXIgdGVtcCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gICAgICAgICAgICBmaWVsZGNvbmZpZy5Gb3JtdWxhLFxyXG4gICAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICBpZih0eXBlb2YgdGVtcCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGxldCB0ZW1wMiA9IHRlbXAuc3BsaXQoXCI7XCIpO1xyXG4gICAgICAgICAgdGVtcCA9IFtdXHJcbiAgICAgICAgICB0ZW1wMi5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJJdGVtID0gaXRlbS5zcGxpdChcInxcIik7XHJcbiAgICAgICAgICAgIGlmKGFyckl0ZW0ubGVuZ3RoID4gMSl7XHJcbiAgICAgICAgICAgICAgdGVtcFthcnJJdGVtWzFdLnRyaW0oKV0gPSBhcnJJdGVtWzBdLnRyaW0oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0ZW1wW2Fyckl0ZW1bMF0udHJpbSgpXSA9IGFyckl0ZW1bMF0udHJpbSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQga2V5MiBpbiB0ZW1wKSB7XHJcbiAgICAgICAgICBWYWx1ZVBhaXJzW3RlbXBba2V5Ml1dID0ga2V5MjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGRjb25maWcpLlZhbHVlUGFpcnMgIT0gbnVsbCAmJiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkY29uZmlnKS5WYWx1ZVBhaXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIC8vIHZhIGJlbmUgY29zw6xcclxuICAgICAgICAgIFZhbHVlUGFpcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCg8TGlzdFZhbHVlRmllbGQ+ZmllbGRjb25maWcpLlZhbHVlUGFpcnMpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGRjb25maWcpLlZhbHVlU3RyaW5nICE9IG51bGwgJiYgKDxMaXN0VmFsdWVGaWVsZD5maWVsZGNvbmZpZykuVmFsdWVTdHJpbmcgIT0gXCJcIikge1xyXG4gICAgICAgICAgLy8gdmEgcHJlc2EgbGEgc3RyaWduYSBlIHJpbWFwcGF0YSBuZWwgZGlhcmlvXHJcbiAgICAgICAgICBWYWx1ZVBhaXJzID0gR2xvYmFsU2VydmljZS5zdHJpbmdUb1ZhbHVlUGFpcnMoKDxMaXN0VmFsdWVGaWVsZD5maWVsZGNvbmZpZykuVmFsdWVTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSU5WRVJUTyBJIFZBTFVFUEFJUlMgQ0hJQVZFL1ZBTE9SRSBJTiBWQUxST0UvQ0hJQVZFXHJcbiAgICAgICAgbGV0IGludmVydGVkID0ge307XHJcbiAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1wiLCAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzKTtcclxuICAgICAgICAvLyBWYWx1ZVBhaXJzOiB7U2k6ICdTaScsIE5vOiAnTm8nfVxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBWYWx1ZVBhaXJzKSB7XHJcbiAgICAgICAgICBpbnZlcnRlZFtWYWx1ZVBhaXJzW2tleV1dID0ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBWYWx1ZVBhaXJzID0gaW52ZXJ0ZWQ7XHJcblxyXG4gICAgICAgIC8vIExFR0dPIEkgVkFMT1JJIENIRSBWT0dMSU8gU1RBTVBBUkUgXHJcbiAgICAgICAgaWYgKHJlY29yZFtmaWVsZGNvbmZpZy5OYW1lXSAhPSBudWxsICYmICg8TGlzdFZhbHVlRmllbGQ+ZmllbGRjb25maWcpLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgICAgICAvLyBjYXNvIE1VTFRJU0NFTFRBXHJcbiAgICAgICAgICBsZXQgb3V0VmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgcmVjb3JkW2ZpZWxkY29uZmlnLk5hbWVdLmZvckVhY2goKGVsZW1lbnQsIGkpID0+IHtcclxuICAgICAgICAgICAgb3V0VmFsdWUgKz0gVmFsdWVQYWlyc1tlbGVtZW50XTtcclxuICAgICAgICAgICAgb3V0VmFsdWUgKz0gaSA9PSByZWNvcmRbZmllbGRjb25maWcuTmFtZV0ubGVuZ3RoIC0gMSA/IFwiXCIgOiBcIiwgXCJcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgb3V0cHV0ID0gb3V0VmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGNhc28gU0NFTFRBIFNJTkdPTEFcclxuICAgICAgICAgIG91dHB1dCA9IFZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkY29uZmlnLk5hbWVdXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgfTtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06IHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gXCJcIil7IHJldHVybiB2YWx1ZTsgfVxyXG4gICAgICAgIGlmICgoPE51bWVyaWNGaWVsZD5maWVsZGNvbmZpZykuSXNJbnRlZ2VyKSB7XHJcbiAgICAgICAgICBpZiAoKDxOdW1lcmljRmllbGQ+ZmllbGRjb25maWcpLkRlY2ltYWxTZXBhcmF0b3IgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih2YWx1ZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IGZpZWxkY29uZmlnLkRlY2ltYWxQcmVjaXNpb24gKiAxMDtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBkZWNpbWFscykgLyBkZWNpbWFscztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZGVjaW1hbHMgPSBmaWVsZGNvbmZpZy5EZWNpbWFsUHJlY2lzaW9uICogMTA7XHJcbiAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGRlY2ltYWxzKSAvIGRlY2ltYWxzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnSW1tYWdpbmUnXToge1xyXG4gICAgICAgIHJldHVybiBcImltbWFnaW5lXCI7XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImltbWFnaW5lIFwiICsgZmllbGRjb25maWcuTmFtZSArIFwiIDogXCIgKyB2YWx1ZSlcclxuICAgICAgICAvLyAvLyBSZWN1cGVybyBpbCBCQVNFNjQgZGVsbCdpbW1hZ2luZSBSZXNpemVkIHZpYSBwcm9taXNlIGNsaWVudFxyXG4gICAgICAgIC8vIHZhciByZXNpemVkQmFzZTY0ID0gYXdhaXQgdGhpcy5yZXNpemVCYXNlNjRJbWFnZShcImRhdGE6aW1hZ2UvXCIgKyB2YWx1ZS5GaWxlRXh0ZW5zaW9uICsgXCI7YmFzZTY0LFwiICsgdmFsdWUuRmlsZURhdGFCYXNlNjQpO1xyXG5cclxuICAgICAgICAvLyAvLyBBZ2dpdW5nbyBsJ0hUTUwgY29uIGlsIG51b3ZvIEJBU0U2NFxyXG4gICAgICAgIC8vIHJldHVybiBcIjxpbWcgc3JjPSdcIiArIHJlc2l6ZWRCYXNlNjQgKyBcIicgc3R5bGU9J2hlaWdodDogXCIgKyB2YWx1ZS5SZXNpemVkSW1hZ2VIZWlnaHRQeCArIFwicHgnPlwiO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfTtcclxuXHJcblxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0FsbGVnYXRvJ106IHtcclxuICAgICAgICByZXR1cm4gXCJBbGxlZ2F0b1wiO1xyXG4gICAgICAgIC8vIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBbGxlZ2F0byBcIiArIGZpZWxkLk5hbWUgKyBcIiA6IFwiICsgdmFsdWUsIHJlY29yZClcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgIGxldCByZXNpemVkQmFzZTY0O1xyXG4gICAgICAgICAgLy8gaWYgKHZhbHVlWzBdLklzSW1hZ2UpIHtcclxuICAgICAgICAgIC8vICAgLy8gUmVjdXBlcm8gaWwgQkFTRTY0IGRlbGwnaW1tYWdpbmUgUmVzaXplZCB2aWEgcHJvbWlzZSBjbGllbnRcclxuICAgICAgICAgIC8vICAgcmVzaXplZEJhc2U2NCA9IGF3YWl0IHRoaXMucmVzaXplQmFzZTY0SW1hZ2UoXCJkYXRhOmltYWdlL1wiICsgdmFsdWVbMF0uRmlsZUV4dGVuc2lvbiArIFwiO2Jhc2U2NCxcIiArIHZhbHVlWzBdLkZpbGVEYXRhQmFzZTY0KTtcclxuICAgICAgICAgIC8vICAgLy8gR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFsbGVnYXRvIHJlc2l6ZWRCYXNlNjRcIiwgcmVzaXplZEJhc2U2NClcclxuICAgICAgICAgIC8vICAgLy8gQWdnaXVuZ28gbCdIVE1MIGNvbiBpbCBudW92byBCQVNFNjRcclxuICAgICAgICAgIC8vICAgcmV0dXJuICc8aW1nIGNsYXNzPVwiaW1hZ2UtcHJldmlld1wiIHNyYz1cIicgKyByZXNpemVkQmFzZTY0ICsgJ1wiIHN0eWxlPVwiaGVpZ2h0OiAnICsgdmFsdWVbMF0uUmVzaXplZEltYWdlSGVpZ2h0UHggKyAncHhcIj4nO1xyXG4gICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZVswXS5GaWxlQ29udGVudFR5cGUgPT0gXCJhcHBsaWNhdGlvbi9wZGZcIikge1xyXG4gICAgICAgICAgLy8gICByZXR1cm4gJzxpZnJhbWUgc3JjPVwiZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0LCcgKyB2YWx1ZVswXS5GaWxlRGF0YUJhc2U2NCArICdcInN0eWxlPVwibWluLWhlaWdodDogMzAwcHg7IGhlaWdodDogMTAwJTtcIj48L2lmcmFtZT4nO1xyXG4gICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgcmV0dXJuICc8aWZyYW1lIHNyYz1cImRhdGE6XCInICsgdmFsdWVbMF0uRmlsZUV4dGVuc2lvbiArICdcIjtiYXNlNjQsJyArIHZhbHVlWzBdLkZpbGVEYXRhQmFzZTY0ICsgJ1wic3R5bGU9XCJtaW4taGVpZ2h0OiAzMDBweDsgaGVpZ2h0OiAxMDAlO1wiPjwvaWZyYW1lPic7XHJcbiAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgLy8gQWdnaXVuZ28gbCdIVE1MIGNvbiBpbCBudW92byBCQVNFNjRcclxuICAgICAgICAgIC8vIHJldHVybiAgXCI8aW1nIHNyYz0nXCIgKyByZXNpemVkQmFzZTY0ICsgXCInIHN0eWxlPSdoZWlnaHQ6IFwiICsgdmFsdWVbMF0uUmVzaXplZEltYWdlSGVpZ2h0UHggKyBcInB4Jz5cIjtcclxuICAgICAgICAgIC8vIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBbGxlZ2F0byBvdXRwdXRWYWx1ZXNBcnJheVwiLCBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSBjb24gbWFya2VycyddOiB7XHJcbiAgICAgICAgcmV0dXJuIFwiSW1tYWdpbmUgY29uIG1hcmtlcnNcIjtcclxuXHJcbiAgICAgICAgLy8gUmVjdXBlcm8gaWwgQkFTRTY0IGRlbGwnaW1tYWdpbmUgUmVzaXplZCB2aWEgcHJvbWlzZSBjbGllbnRcclxuICAgICAgICAvLyB2YXIgcmVzaXplZEJhc2U2NCA9IGF3YWl0IHRoaXMucmVzaXplQmFzZTY0SW1hZ2UoXCJkYXRhOmltYWdlL1wiICsgdmFsdWUuRmlsZUV4dGVuc2lvbiArIFwiO2Jhc2U2NCxcIiArIHZhbHVlLkZpbGVEYXRhQmFzZTY0KTtcclxuXHJcbiAgICAgICAgLy8gQWdnaXVuZ28gbCdIVE1MIGNvbiBpbCBudW92byBCQVNFNjRcclxuICAgICAgICAvLyByZXR1cm4gXCI8aW1nIHNyYz0nXCIgKyByZXNpemVkQmFzZTY0ICsgXCInIHN0eWxlPSdoZWlnaHQ6IFwiICsgdmFsdWUuUmVzaXplZEltYWdlSGVpZ2h0UHggKyBcInB4Jz5cIjtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBpbW1hZ2luaSddOiB7XHJcbiAgICAgICAgcmV0dXJuIFwiRWxlbmNvIGltbWFnaW5pXCI7XHJcbiAgICAgICAgbGV0IG91dHB1dFZhbHVlc0FycmF5ID0gXCJcIjtcclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZGNvbmZpZykuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgICAgIHZhbHVlLmZvckVhY2goKGltYWdlb2JqOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnRJbkZvcm06IER5bkF0dGFjaG1lbnQgPSAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZGNvbmZpZykuQXR0YWNobWVudExpc3QuZmluZCh4ID0+IHguSUQgPT0gaW1hZ2VvYmopO1xyXG4gICAgICAgICAgICBpZiAoYXR0YWNobWVudEluRm9ybSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXkgKz0gYXR0YWNobWVudEluRm9ybS5CdXR0b25LZXkgKyBcIiwgXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdmFyIHBhcnRzID0gb3V0cHV0VmFsdWVzQXJyYXkuc3BsaXQoXCIsIFwiKTtcclxuICAgICAgICAgIHJldHVybiBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKS5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFyIGF0dGFjaG1lbnRJbkZvcm06IER5bkF0dGFjaG1lbnQgPSAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZGNvbmZpZykuQXR0YWNobWVudExpc3QuZmluZCh4ID0+IHguSUQgPT0gdmFsdWUpO1xyXG4gICAgICAgICAgaWYgKGF0dGFjaG1lbnRJbkZvcm0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXR0YWNobWVudEluRm9ybS5CdXR0b25LZXk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgfTtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydEYXRhIGUvbyBvcmEnXToge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBcIlwiKXsgcmV0dXJuIHZhbHVlOyB9XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkRhdGEgZS9vIG9yYVwiLCBmaWVsZGNvbmZpZyk7XHJcbiAgICAgICAgaWYgKCg8RGF0ZUZpZWxkPmZpZWxkY29uZmlnKS5EYXRlRm9ybWF0ICE9IG51bGwpIHtcclxuICAgICAgICAgIGxldCBmaXhEYXRlRm9ybWF0ID0gKDxEYXRlRmllbGQ+ZmllbGRjb25maWcpLkRhdGVGb3JtYXQucmVwbGFjZShcIkREXCIsIFwiZGRcIik7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0odmFsdWUsIGZpeERhdGVGb3JtYXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmICgoPERhdGVGaWVsZD5maWVsZGNvbmZpZykuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIGRhdGEnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0odmFsdWUsIFwiZGQvTU0veXl5eVwiKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoKDxEYXRlRmllbGQ+ZmllbGRjb25maWcpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnRGF0YSBlIG9yYSddKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybSh2YWx1ZSwgXCJkZC9NTS95eXl5IEhIOm1tXCIpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICgoPERhdGVGaWVsZD5maWVsZGNvbmZpZykuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIG9yYXJpbyddKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybSh2YWx1ZSwgXCJISDptbVwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBwcmludFZhbHVlXHJcblxyXG4gIC8vI3JlZ2lvbiByZXNpemVCYXNlNjRJbWFnZVxyXG4gIHByaXZhdGUgYXN5bmMgcmVzaXplQmFzZTY0SW1hZ2UoYmFzZTY0SW1hZ2U6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgaW1hZ2V0eXBlID0gL2RhdGE6aW1hZ2VcXC8oW1xcd10rKTsvO1xyXG4gICAgICBjb25zdCBtYXRjaCA9IGJhc2U2NEltYWdlLm1hdGNoKGltYWdldHlwZSk7XHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuc3JjID0gYmFzZTY0SW1hZ2U7XHJcbiAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcclxuICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IGltZy53aWR0aDtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHQ7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IDEyODtcclxuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IG5ld0hlaWdodCAqIGFzcGVjdFJhdGlvO1xyXG5cclxuICAgICAgICBjYW52YXMud2lkdGggPSBuZXdXaWR0aDtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTtcclxuICAgICAgICBsZXQgcXVhbGl0eSA9IDAuODtcclxuICAgICAgICBsZXQgZGF0YVVSTCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlLycgKyBtYXRjaFsxXSwgcXVhbGl0eSk7XHJcbiAgICAgICAgcmVzb2x2ZShkYXRhVVJMKTtcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gcmVzaXplQmFzZTY0SW1hZ2VcclxufVxyXG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJsaXN0LWZvcm0tcmVjb3JkXCI+XHJcbiAgPG1hdC1jYXJkLWhlYWRlciBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgPG1hdC1jYXJkLXRpdGxlICpuZ0lmPVwibG9hZGVkRmlsdGVycyAmJiBzaG93VGl0bGVcIlxyXG4gICAgICA+RWxlbmNvIHt7IGZvcm0uTmFtZSB9fTwvbWF0LWNhcmQtdGl0bGVcclxuICAgID5cclxuICAgIDwhLS0gPG1hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQobnVsbClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz4gLS0+XHJcbiAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8IS0tI3JlZ2lvbiBGSUxURVJTIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yXCIgKm5nSWY9XCJsb2FkZWRGaWx0ZXJzXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTMgYWxpZ24tY29udGVudC1lbmRcIj5cclxuICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyXHJcbiAgICAgICAgICBjbGFzcz1cImRhdGVcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQZXJpb2RvIGluaXppbydcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cIidQZXJpb2RvIGluaXppbydcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cIm1pbkRhdGVcIlxyXG4gICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJmaWx0ZXJEYXRhQW5zd2VycygpXCJcclxuICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGVzLkRBVEVQSUNLRVJcIlxyXG4gICAgICAgICAgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIlxyXG4gICAgICAgICAgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zIGFsaWduLWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlclxyXG4gICAgICAgICAgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGVyaW9kbyBmaW5lJ1wiXHJcbiAgICAgICAgICBbbGFiZWxdPVwiJ1BlcmlvZG8gZmluZSdcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cIm1heERhdGVcIlxyXG4gICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJmaWx0ZXJEYXRhQW5zd2VycygpXCJcclxuICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGVzLkRBVEVQSUNLRVJcIlxyXG4gICAgICAgICAgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIlxyXG4gICAgICAgICAgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPlNlbGV6aW9uZSBkZWkgY2FtcGk8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiIG11bHRpcGxlPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgcHJvcGVydHkgb2YgcHJvcGVydGllc1wiIFt2YWx1ZV09XCJwcm9wZXJ0eVwiPlxyXG4gICAgICAgICAgICAgIHt7IHByb3BlcnRpZXNMYWJlbFtwcm9wZXJ0eS5sYWJlbF0gfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTMgbXQtMlwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgc2VsZWN0ZWRQcm9wZXJ0aWVzID09IG51bGwgfHwgc2VsZWN0ZWRQcm9wZXJ0aWVzLmxlbmd0aCA9PSAwXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWdyYXBoLWdlbmVyYXRlIGJ1dHRvbi1uZXh0IG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyRGF0YUFuc3dlcnMoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgR2VuZXJhXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PiAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSNlbmRyZWdpb24gRklMVEVSUyAtLT5cclxuXHJcbiAgICA8IS0tI3JlZ2lvbiBUQUJMRSAtLT5cclxuICAgIDxkaXZcclxuICAgICpuZ0lmPVwiZmlsdGVyZWRBbnN3ZXJzICYmIGZpbHRlcmVkQW5zd2Vycy5sZW5ndGggPiAwOyBlbHNlIG5vX2Fuc3dlcnNcIlxyXG4gICAgICBjbGFzcz1cInRhYmxlLWNvbnRhaW5lciBtdC0zIG1iLTJcIlxyXG4gICAgPlxyXG4gICAgICA8dGFibGVcclxuICAgICAgICBtYXQtdGFibGVcclxuICAgICAgICBbZGF0YVNvdXJjZV09XCJzZWxlY3RlZFByb3BlcnRpZXNcIlxyXG4gICAgICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCBtYXQtdGFibGUtZml4ZWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPCEtLSBDb2xvbm5hIGZpc3NhIHBlciBsZSBwcm9wcmlldMOgIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicHJvcGVydHlcIiBzdGlja3k+XHJcbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwic3RpY2t5LWNvbHVtblwiPlxyXG4gICAgICAgICAgICBEYXRhIEluc2VyaW1lbnRvXHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICptYXRDZWxsRGVmPVwibGV0IHNlbGVjdGVkUHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic3RpY2t5LWNvbHVtblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHByb3BlcnRpZXNMYWJlbFtzZWxlY3RlZFByb3BlcnRpZXMubGFiZWxdIH19XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIEdlbmVyYSBkaW5hbWljYW1lbnRlIGxlIGNvbG9ubmUgcGVyIG9nbmkgcmlzcG9zdGEgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpbHRlcmVkQW5zd2VyczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cIidjb2wnICsgaVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ2YWx1ZS5JRCAhPSAnMCdcIj57eyB2YWx1ZS5BbnN3ZXJEYXRlIHwgZGF0ZSA6IFwiZGQvTU0veXl5eSBISDptbVwiIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInZhbHVlLklEID09ICcwJ1wiPnt7IHZhbHVlLkFuc3dlckRhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPCEtLSA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiB7eyB2YWx1ZS5BbnN3ZXJEYXRlIHwgZGF0ZTonZGQvTU0veXl5eSBISDptbScgfX0gPC90aD4gLS0+XHJcbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgc2VsZWN0ZWRQcm9wZXJ0aWVzXCI+XHJcbiAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9wZXJ0aWVzLmxhYmVsID09PSBcIkFuc3dlckRhdGVcIlxyXG4gICAgICAgICAgICAgICAgPyAodmFsdWUuQW5zd2VyRGF0ZSB8IGRhdGUgOiBcImRkL01NL3l5eXkgSEg6bW1cIilcclxuICAgICAgICAgICAgICAgIDogcHJpbnRWYWx1ZShcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFByb3BlcnRpZXMudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVtzZWxlY3RlZFByb3BlcnRpZXMubGFiZWxdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJvcGVydGllcy5jb25maWcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgKSA/PyBcIk4vQVwiXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwhLS0gLSBcclxuICAgICAgICAgICAge3tzZWxlY3RlZFByb3BlcnRpZXMudHlwZX19XHJcbiAgICAgICAgICAgIHt7c2VsZWN0ZWRQcm9wZXJ0aWVzLmxhYmVsfX0gLS0+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIEhlYWRlciBkZWxsYSB0YWJlbGxhIC0tPlxyXG4gICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XHJcblxyXG4gICAgICAgIDwhLS0gUmlnaGUgZGVsbGEgdGFiZWxsYSAtLT5cclxuICAgICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI25vX2Fuc3dlcnM+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIG1iLTIgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8c3Bhbj4gTm9uIGNpIHNvbm8gcmlzcG9zdGUgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8IS0tI3JlZ2lvbiBUQUJMRSAtLT5cclxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPG1hdC1jYXJkLWZvb3Rlcj5cclxuICAgIDwhLS0gPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+IC0tPlxyXG4gIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuPCEtLSA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBsaXN0LWZvcm0tcmVjb3JkLWhlYWRlclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgPGg0ICpuZ0lmPVwic2hvd1RpdGxlXCI+XHJcbiAgICAgIDxiPkVsZW5jbyB7eyBmb3JtLk5hbWUgfX08L2I+XHJcbiAgICA8L2g0PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LXJpZ2h0XCIgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuYWRkXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQobnVsbClcIj5cclxuICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxlcXAtdGFibGUgY2xhc3M9XCJsaXN0LWZvcm0tcmVjb3JkLXRhYmxlXCIgI3RhYmxlUmVjb3JkcyAqbmdJZj1cImxvYWRlciAmJiBjb25maWd1cmF0aW9ucy52YWx1ZXNcIlxyXG4gIFtkYXRhXT1cImNvbmZpZ3VyYXRpb25zLnZhbHVlc1wiIFtjb2x1bW5zXT1cImNvbHVtbnNcIj48L2VxcC10YWJsZT4gLS0+XHJcbiJdfQ==
|