@eqproject/eqp-dynamic-module 2.8.20 → 2.8.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -121,10 +121,35 @@ export class ListViewFormRecordComponent {
121
121
  });
122
122
  //console.log("TABELLAR VALUES", this.form, this.tabellarColumns, this.tabellarFields, this.tabellarValues);
123
123
  this.tabellarConditionLoaded = true;
124
- var heightValue = this.tabellarColumns.length * 60;
124
+ if (this.tabellarValues.length == 0) {
125
+ this.tabellarColumns = [];
126
+ }
125
127
  setTimeout(() => {
126
- document.querySelectorAll("#tabellar table")[0].setAttribute("height", heightValue + "px");
127
- }, 100);
128
+ // Non serve cercare i MAX, li setta CSS in automatico con la regola max-content
129
+ document.querySelectorAll("#tabellar table tbody tr:first-child td").forEach((el, index) => {
130
+ document.querySelectorAll("#tabellar table tbody tr:first-child td")[index].style.height = el.clientHeight + "px";
131
+ if (el.clientHeight > 68) {
132
+ document.querySelectorAll("#tabellar table thead tr:first-child th")[index].style.height = (el.clientHeight + 1) + "px";
133
+ document.querySelectorAll("#tabellar table thead tr:first-child th")[index].style.minHeight = (el.clientHeight + 1) + "px";
134
+ }
135
+ else {
136
+ document.querySelectorAll("#tabellar table tbody tr:first-child td")[index].style.height = "68px";
137
+ document.querySelectorAll("#tabellar table tbody tr:first-child td")[index].style.minHeight = "68px";
138
+ document.querySelectorAll("#tabellar table thead tr:first-child th")[index].style.height = "68px";
139
+ document.querySelectorAll("#tabellar table thead tr:first-child th")[index].style.minHeight = "68px";
140
+ }
141
+ document.querySelectorAll("#tabellar table tbody tr:nth-child(n+2) td:nth-child(" + (index + 1) + ")").forEach((el2) => {
142
+ el2.style.height = el.clientHeight + "px";
143
+ if (el.clientHeight > 68) {
144
+ el2.style.height = el.clientHeight + "px";
145
+ }
146
+ else {
147
+ el2.style.height = "68px";
148
+ el2.style.minHeight = "68px";
149
+ }
150
+ });
151
+ });
152
+ }, 300);
128
153
  }, 100);
129
154
  }
130
155
  configureListviewButtons() {
@@ -808,4 +833,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
808
833
  }], clickDragIndicator: [{
809
834
  type: Output
810
835
  }] } });
811
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNYLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV6SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sa0RBQWtELENBQUM7QUFPMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBYSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUc5RSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUV4RixPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVks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LDJCQUEyQixtbkNDMUR4Qyw4eFRBbVBBOzRGRHpMYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsdUJBQXVCOzJPQU14QixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQWlCdUMsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVFJLGFBQWE7c0JBQTNELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHSSxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkF1QnJDLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFLRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxHQUFHO3NCQUFaLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBDZWxsQWxpZ25tZW50RW51bSxcclxuICBDb25maWdDb2x1bW4sXHJcbiAgRXFwVGFibGVDb21wb25lbnQsXHJcbiAgTnVtYmVyQ29sdW1uUGlwZSxcclxuICBUeXBlQ29sdW1uXHJcbn0gZnJvbSBcIkBlcXByb2plY3QvZXFwLXRhYmxlXCI7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluUmVjb3JkLCBSZWNvcmQsIFJlY29yZEJ1dHRvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0XCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gXCIuLy4uLy4uLy4uLy4uLy9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4vLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgRmlyZVRyaWdnZXIsIFRyaWdnZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcbmltcG9ydCB7IGRiRGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvZGItZGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgTGlzdFZhbHVlRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9udW1lcmljRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBEYXRlRmllbGQsIERhdGVUaW1lVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2RhdGVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IExhYmVsRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9sYWJlbEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IE1vZGVFbnVtLCBUaW1lVHlwZUVudW0gfSBmcm9tICd0bXctcGlja2VyJztcclxuaW1wb3J0IHsgVGFiZWxsYXJGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ncmFwaC5tb2RlbCc7XHJcbmltcG9ydCB7IF9fdmFsdWVzIH0gZnJvbSBcInRzbGliXCI7XHJcblxyXG50eXBlIFBhbmVsID0ge1xyXG4gIHJlY29yZDogUmVjb3JkLFxyXG4gIGlzT3BlbjogYm9vbGVhbixcclxuICBwYWdlU3RhdGU6IHN0cmluZyxcclxuICBoaWdobGlnaHRlZDogYm9vbGVhblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaXN0LXZpZXctZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCJsaXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vbGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlzdFZpZXdGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIFxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBASW5wdXQoKSBjb21waWxlQ29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIG91dENvbXBpbGVDb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3JnYUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7XHJcbiAgQElucHV0KCkgZGVmYXVsdExpc3RWaWV3RnVuY3Rpb246IEZ1bmN0aW9uID0gbnVsbDtcclxuICBASW5wdXQoKSBleHRlcm5hbEJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIEBJbnB1dCgpIG9ubHlWaWV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByZWNvcmRzOiBBcnJheTxEeW5SZWNvcmQ+ID0gbnVsbDtcclxuICBASW5wdXQoKSBoaWdobGlnaHRGaWx0ZXI6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG5cclxuICBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG4gIHNob3dUaXRsZSA9IHRydWU7XHJcbiAgLy8gdmFsdWVzOiBBcnJheTxSZWNvcmQ+O1xyXG4gIHRlc3QgPSBmYWxzZTtcclxuICBpc0R1cGxpY2F0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRSZWNvcmQ6IGFueTsgLy8gUmVjb3JkIHwgc3RyaW5nO1xyXG4gIGxvYWRlcjogYm9vbGVhbjtcclxuICBsb2FkZWRmb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGFuZWxPcGVuU3RhdGU6IGJvb2xlYW5bXSA9IG5ldyBBcnJheTxib29sZWFuPigpO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICB2aXN1YWxpenphQ29udGVudXRvID0gZmFsc2U7XHJcbiAgbW9kaWZpY2FDb250ZW51dG8gPSBmYWxzZTtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0YWJsZVJlY29yZHNcIiwgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVSZWNvcmRzOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgY29sdW1ucyA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgdGFiZWxsYXJDb2x1bW5zID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBwYW5lbHM6IEFycmF5PFBhbmVsPlxyXG4gIGJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIHBvcHVwTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJvcGVuQWRkRGlhbG9nXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBvcGVuQWRkRGlhbG9nOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG9wZW5BZGREaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgQFZpZXdDaGlsZChcIm9wZW5HcmFwaERpYWxvZ1wiLCB7IHN0YXRpYzogZmFsc2UgfSkgb3BlbkdyYXBoRGlhbG9nOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG9wZW5HcmFwaERpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICB0b2RvTGlzdDogYW55O1xyXG4gIGlzRnVsbE9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc1RhYmVsbGFyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNMaXN0VmlldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgdGFiZWxsYXJDb25kaXRpb25Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbWlucGVyaW9kOiBEYXRlO1xyXG4gIG1heHBlcmlvZDogRGF0ZTtcclxuXHJcbiAgdGFiZWxsYXJGaWVsZHM6IEFycmF5PFRhYmVsbGFyRmllbGQ+ID0gbmV3IEFycmF5PFRhYmVsbGFyRmllbGQ+KCk7XHJcbiAgc2VsZWN0ZWRUYWJlbGxhckZpZWxkczogQXJyYXk8VGFiZWxsYXJGaWVsZD47XHJcbiAgdGFiZWxsYXJWYWx1ZXM6IEFycmF5PGFueT4gPSBuZXcgQXJyYXk8YW55PigpO1xyXG5cclxuICAvLyBUTVctUElDS0VSXHJcbiAgbW9kZXMgPSBNb2RlRW51bVxyXG4gIHRpbWVUeXBlID0gVGltZVR5cGVFbnVtXHJcbiAgbW9kZTogTW9kZUVudW07XHJcblxyXG4gIC8vIGFkZCBuZXdcclxuICBAT3V0cHV0KCkgb25BZGRWaWV3RWRpdFJlY29yZDogRXZlbnRFbWl0dGVyPHtcclxuICAgIHJlY29yZDogUmVjb3JkO1xyXG4gICAgb25seVZpZXc6IGJvb2xlYW47XHJcbiAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgZHJhZ1N0YXJ0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRyYWdSZWxlYXNlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRHJhZ0luZGljYXRvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGRiRGF0ZVNlcnZpY2U6IGRiRGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5wYW5lbE9wZW5TdGF0ZSA9IFtcclxuICAgIC8vICAgLi4uQXJyYXkodGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubGVuZ3RoICsgMSksXHJcbiAgICAvLyBdLm1hcCgoKSA9PiBmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmRlZmF1bHRMaXN0QWN0aW9ucztcclxuICAgIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1NhdmVCdXR0b24sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy51c2VySUQsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxJbmZvLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5wcmVmaWx0ZXJQYXJhbXMsXHJcbiAgICApO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12aWV3IC0gb3V0Y29tcGlsZUNvbmZpZ3VyYXRpb25zIFwiLCB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucyk7XHJcbiAgICB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUxpc3R2aWV3QnV0dG9ucygpO1xyXG5cclxuICAgIC8vIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnVzZXJJRDtcclxuICAgIC8vIHRoaXMudmFsdWVzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXNcclxuICAgIC8vIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uQ2hhbmdlcycsIGNoYW5nZXMpO1xyXG5cclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChcclxuICAgICAgY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0uZmlyc3RDaGFuZ2UgPT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMucmVsb2FkVGFibGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk9wZW5pbmcoaW5kaWNlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGljZTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlVGFiZWxsYXIoKXtcclxuXHJcbiAgICB0aGlzLnRhYmVsbGFyQ29uZGl0aW9uTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudGFiZWxsYXJDb2x1bW5zID0gW107XHJcbiAgICAgIHRoaXMudGFiZWxsYXJWYWx1ZXMgPSBbXTtcclxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiZWxsYXJGaWVsZHMuZmluZCh4ID0+IHguRGVzY3JpcHRpb24gPT0gY29sLmtleSkpe1xyXG4gICAgICAgICAgdGhpcy50YWJlbGxhckNvbHVtbnMucHVzaChjb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm1heHBlcmlvZC5zZXRIb3VycygyMyw1OSw1OSw1OSk7XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmIChuZXcgRGF0ZSh2YWx1ZS5BbnN3ZXJEYXRlKSA+PSB0aGlzLm1pbnBlcmlvZCAmJiBuZXcgRGF0ZSh2YWx1ZS5BbnN3ZXJEYXRlKSA8PSB0aGlzLm1heHBlcmlvZCl7XHJcbiAgICAgICAgICB0aGlzLnRhYmVsbGFyVmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7IFxyXG5cclxuXHJcbiAgICAgIHRoaXMudGFiZWxsYXJDb2x1bW5zLmZvckVhY2goKHRjb2wpID0+IHtcclxuICAgICAgICB0Y29sLmRpc3BsYXkgPSB0aGlzLmZvcm0uRmllbGRzLmZpbmQoeCA9PiB4Lk5hbWUgPT0gdGNvbC5rZXkpLkRlc2NyaXB0aW9uO1xyXG4gICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJUQUJFTExBUiBWQUxVRVNcIiwgdGhpcy5mb3JtLCB0aGlzLnRhYmVsbGFyQ29sdW1ucywgdGhpcy50YWJlbGxhckZpZWxkcywgdGhpcy50YWJlbGxhclZhbHVlcyk7XHJcblxyXG4gICAgICB0aGlzLnRhYmVsbGFyQ29uZGl0aW9uTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciBoZWlnaHRWYWx1ZSA9IHRoaXMudGFiZWxsYXJDb2x1bW5zLmxlbmd0aCAqIDYwO1xyXG4gICAgICBcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIiN0YWJlbGxhciB0YWJsZVwiKVswXS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIixoZWlnaHRWYWx1ZStcInB4XCIpO1xyXG4gICAgICB9LDEwMCk7XHJcbiAgICB9LDEwMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgY29uZmlndXJlTGlzdHZpZXdCdXR0b25zKCkge1xyXG4gICAgdGhpcy5idXR0b25zID0gW1xyXG5cclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcInZpc2liaWxpdHlcIixcclxuICAgICAgICBcInRleHRcIjogXCJWaXN1YWxpenphXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLnZpZXcgJiYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmVkaXQgfHwgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlIHx8IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmRlbGV0ZSksXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwidmlldy1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy52aWV3UmVjb3JkKHBhbmVsLCB0cnVlLCBpLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwiZWRpdFwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmVkaXQsXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwiZWRpdC1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5FZGl0UmVjb3JkKHBhbmVsLCBmYWxzZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIkR1cGxpY2FcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImR1cGxpY2F0ZS1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kdXBsaWNhdGVSZWNvcmQocGFuZWwsIGZhbHNlLCBpLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiQ2FuY2VsbGFcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZGVsZXRlLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImRlbGV0ZS1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVSZWNvcmQocGFuZWwsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICBdXHJcbiAgICB0aGlzLmJ1dHRvbnMgPSB0aGlzLmJ1dHRvbnMuY29uY2F0KHRoaXMuZXh0ZXJuYWxCdXR0b25zKS5maWx0ZXIoeCA9PiB4LnZpc2libGUpO1xyXG4gIH1cclxuXHJcbiAgb3BlblRhYmVsbGFyKCl7XHJcbiAgICB0aGlzLnRhYmVsbGFyRmllbGRzID0gW107XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAgIHRoaXMudGFiZWxsYXJGaWVsZHMucHVzaCh7RGVzY3JpcHRpb246IGNvbC5rZXl9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaXNMaXN0VmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1RhYmVsbGFyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9wZW5MaXN0Vmlldygpe1xyXG4gICAgdGhpcy5pc1RhYmVsbGFyID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTGlzdFZpZXcgPSB0cnVlO1xyXG4gIH0gIFxyXG5cclxuICBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAgIGlmICh0aGlzLmZvcm0gPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgICAgfSAgICAgICAgICBcclxuXHJcbiAgICAgICAgICB0aGlzLmxvYWRlZGZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBsZSBjb2xvbm5lIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbHVtbnMoKSB7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmVUYWJlbGxhckNvbHVtbnMoKTtcclxuXHJcbiAgICAvLyB0aGlzLmNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zKCk7XHJcbiAgICAvLyB0aGlzLmNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcygpO1xyXG4gICAgaWYgKHRoaXMucmVjb3JkcyA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ1JlY29yZHMgRXhpc3RzJywgdGhpcy5yZWNvcmRzKTtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUFuc3dlcnNBcnJheSh0aGlzLnJlY29yZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVUYWJlbGxhckNvbHVtbnMoKXtcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkZWxsZSBjb2xvbm5lIHBlciBsYSBlcXAtdGFibGUuXHJcbiAgICAgICAqIEluZGl2aWR1YSBpIEJhc2VGaWVsZCBkYSBtb3N0cmFyZSBlIGxpIHVzYSBwZXIgY3JlYXJlIGxlIENvbmZpZ0NvbHVtbi5cclxuICAgICAgICogTGUgY29sb25uZSB2ZW5nb25vIGNyZWF0ZSBwZXIgaSBCYXNlRmllbGQgY29uIGlsIGZsYWcgSW5MaXN0VmlldyBhIFRSVUVcclxuICAgICAgICogb3BwdXJlLCBuZWwgY2FzbyBub24gc2lhbm8gc3RhdGkgc3BlY2lmaWNhdGkgaSBjYW1waSBkYSB2aXN1YWxpenphcmUsXHJcbiAgICAgICAqIHNlbGV6aW9uYSBpIHByaW1pIDYuXHJcbiAgICAgICAqL1xyXG5cclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzJywgdGhpcy5mb3JtKTtcclxuICAgIFxyXG4gICAgICAgIHZhciBmaWVsZHNGb3JDb2x1bW5zOiBBcnJheTxCYXNlRmllbGQ+O1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0uRmllbGRzLmZpbmQoKGYpID0+IGYuSW5MaXN0VmlldykpIHtcclxuICAgICAgICAgIGZpZWxkc0ZvckNvbHVtbnMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5Jbkxpc3RWaWV3KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZmllbGRzRm9yQ29sdW1ucyA9IHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiBmLk9yZGluYWxQb3NpdGlvbiA8IDYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWVsZHNGb3JDb2x1bW5zXHJcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT5cclxuICAgICAgICAgICAgYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgICAgID8gMVxyXG4gICAgICAgICAgICAgIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgICAgID8gLTFcclxuICAgICAgICAgICAgICA6IDBcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh0aGlzLmNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkKSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkZJTkFMIENPTFVNU05cIiwgdGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsJ29nZ2V0dG8gQ29uZmlndXJlQ29sdW1uIGNoZSByYXBwcmVzZW50YSBpbCBCYXNlRmllbGQgcGFzc2F0byBpbiBpbnB1dC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGxhIGNvbG9ubmEgbmVsbGEgZXFwLXRhYmxlXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW5hIENvbmZpZ0NvbHVtbiBwZXIgbGEgZXFwLXRhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWVsZENvbHVtbihmaWVsZDogQmFzZUZpZWxkKTogQ29uZmlnQ29sdW1uIHtcclxuICAgIHZhciBjb2x1bW46IENvbmZpZ0NvbHVtbiA9IHsga2V5OiBmaWVsZC5OYW1lLCBkaXNwbGF5OiBmaWVsZC5MYWJlbCB9O1xyXG4gICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQm9vbGVhbm9cIl06XHJcbiAgICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkJvb2xlYW47XHJcbiAgICAgICAgY29sdW1uLmJvb2xlYW5WYWx1ZXMgPSB7XHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtdGltZXMgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHVtbi5zdHlsZXMgPSB7XHJcbiAgICAgICAgICBmbGV4OiBcIjAgMCA3JVwiLFxyXG4gICAgICAgICAgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlICE9IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIG9yYXJpb1wiXVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkRhdGU7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIkRhdGEgZSBvcmFcIl1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gXCJkZC9NTS95eXl5IEhIOm1tXCI7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIGRhdGFcIl1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICAgID8gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdC5yZXBsYWNlKFwiRERcIiwgXCJkZFwiKVxyXG4gICAgICAgICAgICAgIDogXCJkZC9NTS95eXl5XCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2wpIHtcclxuICAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5DVVJSRU5DWTtcclxuICAgICAgICAgIGNvbHVtbi5jdXJyZW5jeVBpcGVDb2RlID0gKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2w7XHJcbiAgICAgICAgfSBlbHNlIGlmICghKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuSXNJbnRlZ2VyKSB7XHJcbiAgICAgICAgICBjb2x1bW4ubnVtYmVyUGlwZSA9IE51bWJlckNvbHVtblBpcGUuREVDSU1BTDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFsbGVnYXRvXCJdOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZVwiXTpcclxuICAgICBcclxuICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFdGljaGV0dGFcIl06XHJcbiAgICAgICAgY29sdW1uLnZhbHVlID0gKGVsZW1lbnQ6IFJlY29yZCkgPT4geyByZXR1cm4gKGZpZWxkIGFzIExhYmVsRmllbGQpLkV0aWNoZXR0YTsgfTtcclxuICAgICAgYnJlYWs7ICAgICAgICBcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG5cclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jc011bHRpQ2hvaWNoZSkge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnRbZmllbGQuTmFtZV0gfHwgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChrKSA9PlxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50W2ZpZWxkLk5hbWVdLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXVxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgaWYgKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyA9PSBudWxsKXsgXHJcblxyXG4gICAgICAgICAgICAgIHZhciB2cyA9IChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgaWYgKHZzICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB2cy5zcGxpdChcIjtcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm91bmR2YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZvckVhY2goKG9wKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBvcC5zcGxpdChcInxcIik7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbMV0gPT0gZWxlbWVudFtmaWVsZC5OYW1lXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm91bmR2YWx1ZSA9IHZhbHVlc1swXTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmR2YWx1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKS5maW5kKFxyXG4gICAgICAgICAgICAgIChrKSA9PlxyXG4gICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdID09IGVsZW1lbnRbZmllbGQuTmFtZV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHVtbi5pc1NvcnRhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgY29sdW1uLmlzU2VhcmNoYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiTG9va3VwXCJdOlxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBjb2x1bW47XHJcbiAgfSAgXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKiBMYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBkZXZlIGVzc2VyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRpIHRpcG8gXCJEeW5SZWNvcmRcIlxyXG4gICAqIGEgcGFydGlyZSBkYWkgcXVhbGkgdmVuZ29ubyByaWNyZWF0aSBpIFJlY29yZCB1c2F0aSBuZWwgY2xpZW50LlxyXG4gICAqL1xyXG4gIGFzeW5jIGdldFJlY29yZHNCeUZvcm1JRCgpIHtcclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEID09IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICAvLyBzZSBub24gY29ub3NjbyBsJ3V0ZW50ZVxyXG4gICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0dldEJ5Rm9ybUlERW5kUG9pbnQnLCByZXMpXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIHNlIGNvbm9zY28gbCd1dGVudGVcclxuICAgICAgbGV0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJVc2VySURcIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCcsIHJlcylcclxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiY29udHJvbGxhcmUgbGUgY29uZmlndXJhemlvbmkgZGVsbCdlbmRwb2ludFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IG5ldyBBcnJheTxSZWNvcmQ+KCk7XHJcbiAgICB0aGlzLnBhbmVscyA9IG5ldyBBcnJheTxQYW5lbD4oKTtcclxuICAgIHJlcy5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImdlbmVyYXRlQW5zd2Vyc0FycmF5XCIsIHIpXHJcbiAgICAgIHZhciB0bXBSZWM6IFJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiU2VyaWFsaXplZFZhbHVlc1wiLCByLlNlcmlhbGl6ZWRWYWx1ZXMpXHJcbiAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2Uoci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgdG1wUmVjLklEID0gci5JRDtcclxuICAgICAgdG1wUmVjLkVudElEID0gci5FbnRJRDtcclxuICAgICAgdG1wUmVjLlZlcnNpb24gPSByLlZlcnNpb247XHJcbiAgICAgIHRtcFJlYy51c2VySUQgPSByLnVzZXJJRDtcclxuICAgICAgdG1wUmVjLkFuc3dlckRhdGUgPSB0aGlzLmRiRGF0ZVNlcnZpY2UucGFyc2VEYXRlZnJvbURCKHIuQW5zd2VyRGF0ZSkudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIHRtcFJlYy5IVE1McmVhZGFibGVWYWx1ZXMgPSByLkhUTUxyZWFkYWJsZVZhbHVlcztcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQWRkaXRpb25hbFBhcmFtc1wiLCByLkFkZGl0aW9uYWxQYXJhbXMpXHJcbiAgICAgIHRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zID0gci5BZGRpdGlvbmFsUGFyYW1zICE9IFwiXCIgJiYgci5BZGRpdGlvbmFsUGFyYW1zICE9IG51bGwgPyBKU09OLnBhcnNlKHIuQWRkaXRpb25hbFBhcmFtcykgOiBcIlwiO1xyXG4gICAgICB0bXBSZWMuQWRkaXRpb25hbEluZm8gPSByLkFkZGl0aW9uYWxJbmZvICE9IFwiXCIgJiYgci5BZGRpdGlvbmFsSW5mbyAhPSBudWxsID8gSlNPTi5wYXJzZShyLkFkZGl0aW9uYWxJbmZvKSA6IFwiXCI7XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLnB1c2godG1wUmVjKTtcclxuXHJcbiAgICAgIHZhciBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmhpZ2hsaWdodEZpbHRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgaXNIaWdobGlnaHRlZCA9IHRydWU7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5oaWdobGlnaHRGaWx0ZXIpLmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0bXBSZWMuQWRkaXRpb25hbFBhcmFtc1tmaWx0ZXJdIHx8IHRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zW2ZpbHRlcl0gIT0gdGhpcy5oaWdobGlnaHRGaWx0ZXJbZmlsdGVyXSkge1xyXG4gICAgICAgICAgICBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucGFuZWxzLnB1c2goeyByZWNvcmQ6IHRtcFJlYywgaXNPcGVuOiBmYWxzZSwgcGFnZVN0YXRlOiBudWxsLCBoaWdobGlnaHRlZDogaXNIaWdobGlnaHRlZCB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKF8pID0+IHtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9LCAwKTsgLy8gcmVmcmVzaCB1aVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGFuZWwocGFuZWw6IGFueSwgcmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygndG9nZ2xlUGFuZWwnKVxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdExpc3RWaWV3RnVuY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2RlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uJywgcmVjb3JkKVxyXG4gICAgICB0aGlzLmRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uKHJlY29yZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghcGFuZWwuaXNPcGVuKSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgICAgLy8gU2ltdWxhIHVuIGNhbGNvbG8gYXNpbmNyb25vXHJcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyB9LCAxMDAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzY2F0ZW5hIGwnZXZlbnRvIGRpIE91dHB1dCBwZXIgbW9zdHJhcmUgbyBtb2RpZmljYXJlIGlsIHJlY29yZFxyXG4gICAqIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gb25seVZpZXcgU2UgVFJVRSB2aWVuZSBtb3N0cmF0byBpbCBjb21wb25lbnRlIGFkZC1mb3JtLXJlY29yZCBpbiBzb2xhIGxldHR1cmEuXHJcbiAgICovXHJcbiAgdmlld09yRWRpdFJlY29yZChyZWNvcmQ6IFJlY29yZCwgb25seVZpZXc6IGJvb2xlYW4sIGkpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygndmlld09yRWRpdFJlY29yZCcpXHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuICB2aWV3UmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd2aWV3UmVjb3JkJylcclxuICAgIGxldCByZWNvcmQgPSBwYW5lbC5yZWNvcmRcclxuICAgIHRoaXMudmlzdWFsaXp6YUNvbnRlbnV0byA9IHRydWU7XHJcbiAgICB0aGlzLm1vZGlmaWNhQ29udGVudXRvID0gZmFsc2U7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICBpZiAocGFuZWwucGFnZVN0YXRlID09ICd2aXN1YWxpenphQ29udGVudXRvJykge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgIH1cclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGUubWFwKCgpID0+IGZhbHNlKTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPSB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG4gIEVkaXRSZWNvcmQocGFuZWw6IFBhbmVsLCBvbmx5VmlldzogYm9vbGVhbiwgaSwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0VkaXRSZWNvcmQnKVxyXG5cclxuICAgIGxldCByZWNvcmQgPSBwYW5lbC5yZWNvcmRcclxuICAgIHBhbmVsLnJlY29yZC5BZGRpdGlvbmFsSW5mbyA9IE9iamVjdC5hc3NpZ24oe30sIHJlY29yZC5BZGRpdGlvbmFsSW5mbywgdGhpcy5jb25maWd1cmF0aW9ucy51cGRhdGVJbmZvKTtcclxuICAgIHRoaXMudmlzdWFsaXp6YUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb2RpZmljYUNvbnRlbnV0byA9IHRydWU7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICBpZiAocGFuZWwucGFnZVN0YXRlID09ICdtb2RpZmljYUNvbnRlbnV0bycpIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAnbW9kaWZpY2FDb250ZW51dG8nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcblxyXG4gIGV4dGVybmFsQ2FsbGJhY2soZXY6IEV2ZW50LCBjYWxsYmFjazogRnVuY3Rpb24sIHJlY29yZDogYW55KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBjYWxsYmFjayhyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBkdXBsaWNhcmUgdW4gcmVjb3JkIGRlbGxhIGZvcm0uXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZHVwbGljYXJlLlxyXG4gICAqL1xyXG4gIGR1cGxpY2F0ZVJlY29yZChwYW5lbDogUGFuZWwsIG9ubHlWaWV3OiBib29sZWFuLCBpLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2R1cGxpY2F0ZVJlY29yZCcpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBwYW5lbC5yZWNvcmQuSUQ7XHJcbiAgICB0aGlzLmlzRHVwbGljYXRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMub3BlbkFkZERpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuQWRkRGlhbG9nLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjgwdndcIixcclxuICAgICAgbWluSGVpZ2h0OiBcIjEwMHB4XCIsXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVsaW1pbmFyZSB1biByZWNvcmQgZGFsbGEgbGlzdGEuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZWxpbWluYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBkZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQsIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vbkRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZFRhYmxlcygpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlUmVjb3Jkcykge1xyXG4gICAgICB0aGlzLnRhYmxlUmVjb3Jkcy5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpIGRhdGkgaW5zZXJpdGkgZGFsbCd1dGVudGUgdW5hIHZvbHRhIGNvbmNsdXNhIGxhIGNvbXBpbGF6aW9uZSBkZWxsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHNhdmVPckV4aXRGb3JtKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3Qtdmlldy1mb3JtLXJlY29yZCBzYXZlJywgcmVjb3JkKVxyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICBvbkFmdGVyU2F2ZVJlY29yZChldmVudCkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LXZpZXctZm9ybS1yZWNvcmQgYWZ0ZXJzYXZlJywgZXZlbnQpXHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSwgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSB1biByZWNvcmQuXHJcbiAgICogU2UgbCdldmVudG8gw6ggbnVsbCB2dW9sIGRpcmUgY2hlIHN0aWFtbyBhZ2dpdW5nZW5kbyB1biBudW92byByZWNvcmQgYWx0cmltZW50aSBzaWFtbyBpbiBtb2RpZmljYVxyXG4gICAqIG8gdmlzdWFsaXp6YXppb25lLiBJbiBxdWVzdGkgdWx0aW1pIGR1ZSBjYXNpLCBzZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRwb2ludCBwZXIgaWwgcmVjdXBlcm9cclxuICAgKiBkZWwgcmVjb3JkIGNvbXBsZXRvIGFsbG9yYSB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIsIGFsdHJpbWVudGkgdmllbmUgdXNhdG8gbCdvZ2dldHRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGNvbiBkdWUgcHJvcHJpZXTDoDpcclxuICAgKiBcInJlY29yZFwiID0gb2dnZXR0byBkYSBtb2RpZmljYXJlL3Zpc3VhbGl6emFyZSxcclxuICAgKiBcIm9ubHlWaWV3XCIgPSBib29sZWFubyAoc2UgVFJVRSBzaWFtbyBpbiB2aXN1YWxpenphemlvbmUgYWx0cmltZW50aSBpbiBtb2RpZmljYSlcclxuICAgKi9cclxuICBvbkFkZFZpZXdFZGl0UmVjb3JkMihldmVudDogeyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfSkge1xyXG5cclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLm9ubHlWaWV3ID0gZXZlbnQub25seVZpZXc7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b24gPSBmYWxzZTtcclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uID0gIWV2ZW50Lm9ubHlWaWV3O1xyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1RpdGxlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5FbnRJRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiVmVyc2lvblwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuVmVyc2lvbixcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50LFxyXG4gICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgLy8gcHJlcGFybyBpIGRhdGkgZGVsIHJlY29yZFxyXG4gICAgICAgICAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5JRCxcclxuICAgICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgICAgICAgIGR5bmFtaWNSZWNvcmRQYXJhbXMsXHJcbiAgICAgICAgICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gSlNPTi5wYXJzZShyZXMuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLklEID0gcmVzLklEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5FbnRJRCA9IHJlcy5FbnRJRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQudXNlcklEID0gcmVzLnVzZXJJRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuVmVyc2lvbiA9IHJlcy5WZXJzaW9uO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShldmVudC5yZWNvcmQpKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgICB9ICAgICAgICAgIFxyXG5cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5vbmx5VmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4geyB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgLy8gdGhpcy5vbmx5VmlldyA9IGZhbHNlO1xyXG4gICAgICAvLyB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlbkFsbCgpe1xyXG4gICAgdGhpcy5pc0Z1bGxPcGVuZWQgPSAhdGhpcy5pc0Z1bGxPcGVuZWQ7XHJcbiAgICB0aGlzLnBhbmVscy5mb3JFYWNoKChwYW5lbCkgPT4ge1xyXG4gICAgICBpZiAocGFuZWwuaXNPcGVuICE9IHRoaXMuaXNGdWxsT3BlbmVkKXtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInAtXCIrcGFuZWwucmVjb3JkLklEK1wiLXZpc2liaWxpdHlcIikuY2xpY2soKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9wZW5BZGRQb3B1cCgpIHtcclxuICAgIC8vIG1pIHNzaWN1cm8gY2hlIG5vbiBjaSBzaWFubyBwYW5uZWxsaSBpbiBtb2RpZmljYSBwZXJjaMOoIGFsdHJpbWVudGkgdmEgaW4gY29uZmxpdHRvIGwndXBkYXRlIGNvbiBsJ2FkZFxyXG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaCgocGFuZWwpID0+IHtcclxuICAgICAgaWYocGFuZWwucGFnZVN0YXRlID0gJ21vZGlmaWNhQ29udGVudXRvJyl7XHJcbiAgICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID0gbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucG9wdXBMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNEdXBsaWNhdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm9wZW5BZGREaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkFkZERpYWxvZywge1xyXG4gICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgICB3aWR0aDogXCI4MHZ3XCIsXHJcbiAgICAgICAgICBtaW5IZWlnaHQ6IFwiMTAwcHhcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3IgUnVuRW5kUG9pbnRDYWxsXCIsIGVycik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvcGVuR3JhcGhzKCkge1xyXG4gICAgXHJcbiAgICB0aGlzLm9wZW5HcmFwaERpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuR3JhcGhEaWFsb2csIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgbWluV2lkdGg6IFwiODB2d1wiLFxyXG4gICAgICBtaW5IZWlnaHQ6IFwiNzB2aFwiLFxyXG4gICAgICBtYXhIZWlnaHQ6IFwiMTAwdmhcIlxyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2R5bmFtaWMtbW9kdWxlLWdyYXBocy8nICsgdGhpcy5mb3JtSUQgKyAnLycgKyB0aGlzLnVzZXJJRF0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VHcmFwaHMoKSB7XHJcbiAgICB0aGlzLm9wZW5HcmFwaERpYWxvZ1JlZi5jbG9zZSgpXHJcbiAgfVxyXG4gICAgXHJcbiAgb25BZGRTYXZlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuQWRkRGlhbG9nUmVmICE9IG51bGwpIHsgdGhpcy5vcGVuQWRkRGlhbG9nUmVmLmNsb3NlKCk7IH1cclxuICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICBvbkFkZEFmdGVyU2F2ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgaWYgKHRoaXMub3BlbkFkZERpYWxvZ1JlZiAhPSBudWxsKSB7IHRoaXMub3BlbkFkZERpYWxvZ1JlZi5jbG9zZSgpOyB9XHJcbiAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgcHJpbnRBZGRpdGlvbmFsSW5mbyhyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgbGV0IG91dCA9IFwiXCI7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUgIT0gbnVsbCAmJiB0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy5saXN0Vmlld1JlY29yZFRpdGxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHJlY29yZC5BZGRpdGlvbmFsSW5mbyAhPSBudWxsKXtcclxuXHJcbiAgICAgICAgY29uc3QgcmVnZXggPSAvXFwoKC4rKVxcKS9nOzsgLy8gcGF0dGVybiBwZXIgdW5vIG8gcGnDuSBudW1lcmlcclxuICAgICAgICBcclxuICAgICAgICAvLyAoZGF0ZWZvcm1hdD1FRUVFLCBkIE1NTU0geSwgSDptbTpzcylcclxuICAgICAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMoaXRlbSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICBsZXQgbXltYXRjaCA9IG1hdGNoWzFdO1xyXG4gICAgICAgICAgaWYobXltYXRjaC5pbmNsdWRlcyhcImRhdGVmb3JtYXRcIikpe1xyXG4gICAgICAgICAgICBsZXQgZm9ybWF0ID0gbXltYXRjaC5zcGxpdChcIj1cIilbMV07XHJcbiAgICAgICAgICAgIGxldCB0b2tlbiA9IGl0ZW0uc3BsaXQoXCIoXCIpWzBdO1xyXG4gICAgICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgJiYgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW3Rva2VuXSAhPSBudWxsID8gXCIgXCIgKyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZWNvcmQuQWRkaXRpb25hbEluZm9bdG9rZW5dLCBmb3JtYXQpIDogcmVjb3JkW3Rva2VuXSA/IFwiIFwiICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVjb3JkW3Rva2VuXSwgZm9ybWF0KSA6ICBcIiBcIiArIHRva2VuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgJiYgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW2l0ZW1dICE9IG51bGwgPyBcIiBcIiArIHJlY29yZC5BZGRpdGlvbmFsSW5mb1tpdGVtXSA6IHJlY29yZFtpdGVtXSA/IFwiIFwiICsgcmVjb3JkW2l0ZW1dIDogIFwiIFwiICsgaXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrRHJhZ0luZGljYXRvcihlbDogYW55KXtcclxuICAgIHRoaXMuY2xpY2tEcmFnSW5kaWNhdG9yLmVtaXQoZWwpO1xyXG59XHJcblxyXG4gIG9uRHJhZ1N0YXJ0ZWQoZWw6IGFueSl7XHJcbiAgICAgIHRoaXMuZHJhZ1N0YXJ0ZWQuZW1pdChlbCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdSZWxlYXNlZCgpe1xyXG4gICAgICB0aGlzLmRyYWdSZWxlYXNlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCl7XHJcbiAgICB0aGlzLm91dC5lbWl0KGV2KTtcclxuICB9XHJcblxyXG4gIG9uRmlyZVRyaWdnZXIoZXY6IEZpcmVUcmlnZ2VyKXtcclxuICAgIHRoaXMuZmlyZVRyaWdnZXIuZW1pdChldik7XHJcbiAgfSBcclxuXHJcbn1cclxuXHJcbiIsIjxtYXQtY2FyZCBjbGFzcz1cImxpc3Qtdmlldy1mb3JtLXJlY29yZFwiPlxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgKm5nSWY9XCJzaG93VGl0bGUgfHwgZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJzaG93VGl0bGUgJiYgbG9hZGVkZm9ybVwiPk1vZHVsbyB7eyBmb3JtLk5hbWUgfX0gPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDxtYXQtY2FyZC1hY3Rpb25zICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmFkZCB8fCBkZWZhdWx0TGlzdEFjdGlvbnMuZ3JhcGhzXCI+XHJcblxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgICpuZ0lmPVwiaXNMaXN0Vmlld1wiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuVGFiZWxsYXIoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj50YWJsZTwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPlRhYmVsbGFyZTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgICpuZ0lmPVwiaXNUYWJlbGxhclwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuTGlzdFZpZXcoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+TGlzdGE8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPiAgICAgIFxyXG5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5BbGwoKVwiXHJcbiAgICAgICAgKm5nSWY9XCJpc0xpc3RWaWV3XCI+XHJcbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWlzRnVsbE9wZW5lZFwiPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCIgKm5nSWY9XCIhaXNGdWxsT3BlbmVkXCI+QXByaSB0dXR0bzwvc3Bhbj5cclxuXHJcbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaXNGdWxsT3BlbmVkICYmIGlzTGlzdFZpZXdcIj5leHBhbmRfbGVzczwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiICpuZ0lmPVwiaXNGdWxsT3BlbmVkXCI+Q2hpdWRpIHR1dHRvPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj4gICAgICBcclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5ncmFwaHNcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkdyYXBocygpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnBpZV9jaGFydDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkdyYWZpY2k8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkFkZFBvcHVwKClcIj5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2k8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPiAgICAgIFxyXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICBcclxuICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXNUYWJlbGxhclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyIGNsYXNzPVwiZGF0ZVwiIFtwbGFjZWhvbGRlcl09XCInUGVyaW9kbyBpbml6aW8nXCIgW2xhYmVsXT1cIidQZXJpb2RvIGluaXppbydcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cIm1pbnBlcmlvZFwiXHJcbiAgICAgICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2Rlcy5EQVRFUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyIGNsYXNzPVwiZGF0ZVwiIFtwbGFjZWhvbGRlcl09XCInUGVyaW9kbyBmaW5lJ1wiIFtsYWJlbF09XCInUGVyaW9kbyBmaW5lJ1wiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwibWF4cGVyaW9kXCJcclxuICAgICAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGVzLkRBVEVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj4gICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtMyBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwidGFiZWxsYXJGaWVsZHNcIiBbKG5nTW9kZWxJbnB1dCldPVwic2VsZWN0ZWRUYWJlbGxhckZpZWxkc1wiIFtwbGFjZWhvbGRlcl09XCInU2VsZXppb25lIGRlaSBjYW1waSdcIlxyXG4gICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInRGVzY3JpcHRpb24nXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInRGVzY3JpcHRpb24nXCIgW2lzTXVsdGlTZWxlY3RdPVwidHJ1ZVwiIGNsYXNzPVwiZXFwLWZvcm0tZmllbGRcIj5cclxuICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PiAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zIG10LTJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0ZWRUYWJlbGxhckZpZWxkcyA9PSBudWxsIHx8IHNlbGVjdGVkVGFiZWxsYXJGaWVsZHMubGVuZ3RoID09IDBcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZ3JhcGgtZ2VuZXJhdGUgYnV0dG9uLW5leHQgbWUtMlwiXHJcbiAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJnZW5lcmF0ZVRhYmVsbGFyKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEdlbmVyYVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxlcXAtdGFibGUgaWQ9XCJ0YWJlbGxhclwiIGNsYXNzPVwibGlzdC1mb3JtLXJlY29yZC10YWJsZVwiICN0YWJsZVJlY29yZHMgKm5nSWY9XCJ0YWJlbGxhckNvbmRpdGlvbkxvYWRlZFwiXHJcbiAgICAgIFtkYXRhXT1cInRhYmVsbGFyVmFsdWVzXCIgW2NvbHVtbnNdPVwidGFiZWxsYXJDb2x1bW5zXCI+PC9lcXAtdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgIDxtYXQtYWNjb3JkaW9uICAjZG9uZUxpc3Q9XCJjZGtEcm9wTGlzdFwiIGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlt0b2RvTGlzdF1cIiBbaGlkZVRvZ2dsZV09XCJ0ZXN0XCIgW211bHRpXT1cInRydWVcIiBjbGFzcz1cImRmLWxpc3Qtdmlldy1hY2NvcmRpb25cIiAqbmdJZj1cImlzTGlzdFZpZXdcIj5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IHBhbmVsIG9mIHBhbmVsczsgaW5kZXggYXMgaVwiIFxyXG4gICAgICAgIFtleHBhbmRlZF09XCJwYW5lbC5pc09wZW5cIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIxXCIgXHJcbiAgICAgICAgW2NsYXNzXT1cInBhbmVsLmhpZ2hsaWdodGVkID8gJ2RtX3BhbmVsX2hpZ2hsaWdodGVkJyA6ICcwJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgXHJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKHBhbmVsLCBwYW5lbC5yZWNvcmQpXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlICpuZ0lmPVwiY29uZmlndXJhdGlvbnMuaXNEcmFnZ2FibGVMaXN0Vmlld1wiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cIm9uQ2xpY2tEcmFnSW5kaWNhdG9yKFtwYW5lbC5yZWNvcmQsZm9ybV0pXCIgY2xhc3M9XCJjbGljay1pY29uXCIgKm5nSWY9XCJjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPiB7eyAhc2hvd1RpdGxlID8gZm9ybS5OYW1lIDogXCJcIiB9fSB2Lnt7IHBhbmVsLnJlY29yZC5WZXJzaW9uIH19IC0ge3sgcHJpbnRBZGRpdGlvbmFsSW5mbyhwYW5lbC5yZWNvcmQpIH19XHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCIhY29uZmlndXJhdGlvbnMuaXNEcmFnZ2FibGVMaXN0Vmlld1wiPlxyXG4gICAgICAgICAgICB7eyAhc2hvd1RpdGxlID8gZm9ybS5OYW1lIDogXCJcIiB9fSB2Lnt7IHBhbmVsLnJlY29yZC5WZXJzaW9uIH19IC0ge3sgcHJpbnRBZGRpdGlvbmFsSW5mbyhwYW5lbC5yZWNvcmQpIH19XHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT4gICAgICAgICAgXHJcbiAgICAgICAgICA8IS0tI3JlZ2lvbiBCT1RUT05JIFBFUiBMRSBBWklPTkkgLS0+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYnV0dG9uc1wiIFxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICBpZD1cInAte3twYW5lbC5yZWNvcmQuSUR9fS17e2J1dHRvbi5pY29ufX1cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicmVjb3JkLWljb24ge3tidXR0b24uZXh0cmFDbGFzc319XCIgXHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYnV0dG9uLnRleHRcIlxyXG4gICAgICAgICAgICAgIFtoaWRkZW5dPVwiYnV0dG9uLmljb24gPT0gJ2ZpbGVfY29weScgJiYgKHBhbmVscy5sZW5ndGggPT0gMCB8fCBwYW5lbC5yZWNvcmQuVmVyc2lvbiAhPSBwYW5lbHNbMF0ucmVjb3JkLlZlcnNpb24pXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uLmZuKHBhbmVsLGksJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj57e2J1dHRvbi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGV4dGVybmFsQnV0dG9uc1wiIFxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICBjbGFzcz1cInJlY29yZC1pY29uIHt7YnV0dG9uLmV4dHJhQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYnV0dG9uLnRleHRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJleHRlcm5hbENhbGxiYWNrKCRldmVudCxidXR0b24uZm4scGFuZWwucmVjb3JkKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj57e2J1dHRvbi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJleGFtcGxlLXNwYWNlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIEJPVFRPTkkgUEVSIExFIEFaSU9OSSAtLT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuICAgICAgICA8IS0tICNyZWdpb24gQ09OVEVOVVRPIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYW5lbC5wYWdlU3RhdGUgIT0gbnVsbFwiPlxyXG5cclxuICAgICAgICAgIDxsaWItc2luZ2xlLXJlY29yZFxyXG4gICAgICAgICAgICBbb25seVZpZXddPVwib25seVZpZXdcIlxyXG4gICAgICAgICAgICBbcmVjb3JkXSA9IFwicGFuZWwucmVjb3JkXCIgXHJcbiAgICAgICAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dID0gXCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcclxuICAgICAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG4gICAgICAgICAgICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIlxyXG4gICAgICAgICAgICBbb3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zXT1cIm91dENvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgICAgIFtwYWdlU3RhdGVdPVwicGFuZWwucGFnZVN0YXRlXCJcclxuICAgICAgICAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIlxyXG4gICAgICAgICAgICAoc2F2ZVJlY29yZEV2ZW50KT1cInNhdmVPckV4aXRGb3JtKCRldmVudClcIlxyXG4gICAgICAgICAgICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIlxyXG4gICAgICAgICAgPlxyXG5cclxuICAgICAgICAgIDwvbGliLXNpbmdsZS1yZWNvcmQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSNlbmRyZWdpb24gQ09OVEVOVVRPIC0tPlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8L21hdC1hY2NvcmRpb24+XHJcblxyXG5cclxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPG1hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuPC9tYXQtY2FyZD5cclxuXHJcbjwhLS0jcmVnaW9uIERJQUxPRyBBR0dJVU5UQSBSSVNQT1NUQSAtLT5cclxuPG5nLXRlbXBsYXRlICNvcGVuQWRkRGlhbG9nPlxyXG4gIDxtYXQtY2FyZCBjbGFzcz1cImNhcmQtZGVmYXVsdCBvdmVybGF5LWNhcmQgY2FyZC1pbm1vZGFsLXRydWVcIj5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgPGFkZC1mb3JtLXJlY29yZFxyXG4gICAgICAgIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29tcGlsZVwiXHJcbiAgICAgICAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gICAgICAgIFtvcmdhSURdPVwib3JnYUlEXCJcclxuICAgICAgICBbb25seVZpZXddPVwiZmFsc2VcIlxyXG4gICAgICAgIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gICAgICAgIFtpc0R1cGxpY2F0ZV09XCJpc0R1cGxpY2F0aW5nXCJcclxuICAgICAgICBcclxuICAgICAgICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIlxyXG4gICAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICBbdXNlcklEXT1cInVzZXJJRFwiXHJcblxyXG4gICAgICAgIFtjb25maWd1cmF0aW9uc109XCJjb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG5cclxuICAgICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNhdmVSZWNvcmRFdmVudCk9XCJvbkFkZFNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGFmdGVyU2F2ZVJlY29yZEV2ZW50KT1cIm9uQWRkQWZ0ZXJTYXZlUmVjb3JkKCRldmVudClcIlxyXG4gICAgICAgIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvYWRkLWZvcm0tcmVjb3JkPlxyXG5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBESUFMT0cgQUdHSVVOVEEgUklTUE9TVEEgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBESUFMT0cgVklTVUFMSVpaQVpJT05FIEdSQUZJQ0kgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjb3BlbkdyYXBoRGlhbG9nPlxyXG4gIDxtYXQtY2FyZCBjbGFzcz1cImNhcmQtZGVmYXVsdCBvdmVybGF5LWNhcmQgY2FyZC1pbm1vZGFsLXRydWUgZ3JhcGhDYXJkXCI+XHJcbiAgICBcclxuICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICA8bWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZXFwLWR5bmFtaWMtbW9kdWxlLXRpdGxlIGdyYXBoLWhlYWRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPHNwYW4+R3JhZmljbyB7eyBmb3JtLk5hbWUgfX0gPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8bWF0LWNhcmQtYWN0aW9ucz5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlR3JhcGhzKClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+XHJcbiAgICAgICAgICBhcnJvd19iYWNrXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkluZGlldHJvPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgPGdyYXBoc1xyXG4gICAgICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICAgICAgICBbdXNlcklEXT1cInVzZXJJRFwiXHJcbiAgICAgICAgW2NvbmZpZ3VyYXRpb25zXSA9IFwib3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zXCJcclxuICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXSA9IFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgPlxyXG4gICAgICA8L2dyYXBocz5cclxuXHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRElBTE9HIFZJU1VBTElaWkFaSU9ORSBHUkFGSUNJIC0tPlxyXG4iXX0=
836
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNYLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV6SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sa0RBQWtELENBQUM7QUFPMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBYSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUc5RSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUV4RixPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCcEQsTUFBTSxPQUFPLDJCQUEyQjtJQWdGdEMsWUFDVSxvQkFBMEMsRUFDMUMsY0FBaUMsRUFDakMsTUFBaUIsRUFDakIsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLFFBQWtCO1FBTGxCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVU7UUE3RW5CLFNBQUksR0FBUyxJQUFJLENBQUM7UUFDbEIsNEJBQXVCLEdBQWEsSUFBSSxDQUFDO1FBQ3pDLG9CQUFlLEdBQXdCLElBQUksS0FBSyxFQUFnQixDQUFDO1FBQ2pFLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFDekIsWUFBTyxHQUFxQixJQUFJLENBQUM7UUFDakMsb0JBQWUsR0FBUSxJQUFJLENBQUM7UUFHckMsdUJBQWtCLEdBQ2hCLElBQUkseUNBQXlDLEVBQUUsQ0FBQztRQUNsRCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLHlCQUF5QjtRQUN6QixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2Isa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFHL0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixtQkFBYyxHQUFjLElBQUksS0FBSyxFQUFXLENBQUM7UUFDMUMsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO1FBQzNDLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFLMUIsWUFBTyxHQUFHLElBQUksS0FBSyxFQUFnQixDQUFDO1FBQ3BDLG9CQUFlLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFFNUMsWUFBTyxHQUF3QixJQUFJLEtBQUssRUFBZ0IsQ0FBQztRQUN6RCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQVM3QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUU5QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0IsNEJBQXVCLEdBQVksS0FBSyxDQUFDO1FBS3pDLG1CQUFjLEdBQXlCLElBQUksS0FBSyxFQUFpQixDQUFDO1FBRWxFLG1CQUFjLEdBQWUsSUFBSSxLQUFLLEVBQU8sQ0FBQztRQUU5QyxhQUFhO1FBQ2IsVUFBSyxHQUFHLFFBQVEsQ0FBQTtRQUNoQixhQUFRLEdBQUcsWUFBWSxDQUFBO1FBR3ZCLFVBQVU7UUFDQSx3QkFBbUIsR0FHeEIsSUFBSSxZQUFZLEVBQXlDLENBQUM7UUFFckQsbUJBQWMsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNsRSxvQkFBZSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ25FLHlCQUFvQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3hFLGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekQsaUJBQVksR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUM1RCxRQUFHLEdBQTJCLElBQUksWUFBWSxFQUFZLENBQUM7UUFDM0QsZ0JBQVcsR0FBOEIsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUN6RSx1QkFBa0IsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQVN0RSxDQUFDO0lBRUwsUUFBUTtRQUNOLDBCQUEwQjtRQUMxQixxREFBcUQ7UUFDckQsc0JBQXNCO1FBRXRCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7UUFFL0MsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksMEJBQTBCLENBQzVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQ3BDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQ3pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQ3pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsRUFDM0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFDekMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FDM0MsQ0FBQztRQUNGLGlHQUFpRztRQUNqRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFaEMsd0NBQXdDO1FBQ3hDLDJDQUEyQztRQUMzQywyQkFBMkI7SUFJN0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxpREFBaUQ7UUFFakQsMEVBQTBFO1FBQzFFLElBQ0UsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksU0FBUztZQUN0QyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxXQUFXLElBQUksS0FBSyxFQUM5QztZQUNBLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUNwRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELGdCQUFnQjtRQUVkLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFFckMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFDO29CQUNsRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDaEM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXJDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMzQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFDO29CQUMvRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDakM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUdILElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQzVFLENBQUMsQ0FBQyxDQUFDO1lBRUgsNEdBQTRHO1lBRTVHLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7WUFFcEMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUM7Z0JBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO2FBQzNCO1lBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFFZCxnRkFBZ0Y7Z0JBRWhGLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBRTtvQkFDeEYsUUFBUSxDQUFDLGdCQUFnQixDQUFjLHlDQUF5QyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsWUFBWSxHQUFDLElBQUksQ0FBQztvQkFDN0gsSUFBSSxFQUFFLENBQUMsWUFBWSxHQUFHLEVBQUUsRUFBQzt3QkFDdkIsUUFBUSxDQUFDLGdCQUFnQixDQUFjLHlDQUF5QyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDO3dCQUNqSSxRQUFRLENBQUMsZ0JBQWdCLENBQWMseUNBQXlDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUM7cUJBQ3JJO3lCQUFNO3dCQUNMLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBYyx5Q0FBeUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO3dCQUMvRyxRQUFRLENBQUMsZ0JBQWdCLENBQWMseUNBQXlDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQzt3QkFDbEgsUUFBUSxDQUFDLGdCQUFnQixDQUFjLHlDQUF5QyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7d0JBQy9HLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBYyx5Q0FBeUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO3FCQUNuSDtvQkFFRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsdURBQXVELEdBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQzlHLEdBQW1CLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsWUFBWSxHQUFDLElBQUksQ0FBQzt3QkFDekQsSUFBSSxFQUFFLENBQUMsWUFBWSxHQUFHLEVBQUUsRUFBQzs0QkFDdEIsR0FBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDO3lCQUMxRDs2QkFBTTs0QkFDSixHQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOzRCQUMxQyxHQUFtQixDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO3lCQUMvQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNULENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUVULENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUViO2dCQUNFLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztnQkFDaEosWUFBWSxFQUFFLGtCQUFrQjtnQkFDaEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekMsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSTtnQkFDdkMsWUFBWSxFQUFFLGtCQUFrQjtnQkFDaEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDMUMsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVM7Z0JBQzVDLFlBQVksRUFBRSx1QkFBdUI7Z0JBQ3JDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9DLENBQUM7YUFDRjtZQUNEO2dCQUNFLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUN6QyxZQUFZLEVBQUUsb0JBQW9CO2dCQUNsQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbEMsQ0FBQzthQUNGO1NBRUYsQ0FBQTtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYSxJQUFJLENBQUMsTUFBTTtRQUNsQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ3JCLE1BQU0sbUJBQW1CLEdBQ3ZCLElBQUksS0FBSyxFQUFzQixDQUFDO1lBQ2xDLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDdkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7YUFDeEMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDdkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQ2hELG1CQUFtQixFQUNuQixDQUFDLEdBQVMsRUFBRSxFQUFFO2dCQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2dCQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUUvQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUM7b0JBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDM0Q7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQVcsQ0FBQztpQkFDM0M7Z0JBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUNiLENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0I7UUFFdEIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFaEMsa0NBQWtDO1FBQ2xDLHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO2FBQU07WUFDTCx5REFBeUQ7WUFDekQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFTyx3QkFBd0I7UUFFNUI7Ozs7OztXQU1HO1FBRUQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxnREFBZ0QsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEYsSUFBSSxnQkFBa0MsQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzlDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2pFO2FBQU07WUFDTCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDMUU7UUFDRCxnQkFBZ0I7YUFDYixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDYixDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxlQUFlO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWU7Z0JBQ3ZDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUMsQ0FDTjthQUNBLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRW5ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssaUJBQWlCLENBQUMsS0FBZ0I7UUFDeEMsSUFBSSxNQUFNLEdBQWlCLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyRSxRQUFRLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDdkIsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUM1QixNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxhQUFhLEdBQUc7b0JBQ3JCLEtBQUssRUFBRSx5Q0FBeUM7b0JBQ2hELElBQUksRUFBRSwyQ0FBMkM7aUJBQ2xELENBQUM7Z0JBQ0YsTUFBTSxDQUFDLE1BQU0sR0FBRztvQkFDZCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtpQkFDeEMsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxhQUFhLENBQUMsY0FBYyxDQUFDO2dCQUNoQyxJQUNHLEtBQW1CLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxFQUNsRTtvQkFDQSxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQzlCLElBQ0csS0FBbUIsQ0FBQyxVQUFVLElBQUksZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQ2pFO3dCQUNBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUM7cUJBQ3BDO3lCQUFNLElBQ0osS0FBbUIsQ0FBQyxVQUFVLElBQUksZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEVBQ2hFO3dCQUNBLE1BQU0sQ0FBQyxNQUFNLEdBQUksS0FBbUIsQ0FBQyxVQUFVOzRCQUM3QyxDQUFDLENBQUUsS0FBbUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7NEJBQ3JELENBQUMsQ0FBQyxZQUFZLENBQUM7cUJBQ2xCO2lCQUNGO2dCQUNELE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDbEMsSUFBSyxLQUFzQixDQUFDLGNBQWMsRUFBRTtvQkFDMUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7b0JBQzlDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBSSxLQUFzQixDQUFDLGNBQWMsQ0FBQztpQkFDbEU7cUJBQU0sSUFBSSxDQUFFLEtBQXNCLENBQUMsU0FBUyxFQUFFO29CQUM3QyxNQUFNLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztpQkFDOUM7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQztnQkFDNUIsTUFBTTtZQUNSLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQztnQkFFOUIsTUFBTTtZQUVOLEtBQUssYUFBYSxDQUFDLFdBQVcsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLEdBQUcsT0FBUSxLQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEYsTUFBTTtZQUNOLEtBQUssYUFBYSxDQUFDLGlCQUFpQixDQUFDO2dCQUVuQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7b0JBQ2pDLElBQUssS0FBd0IsQ0FBQyxjQUFjLEVBQUU7d0JBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTs0QkFDM0QsT0FBTyxJQUFJLENBQUM7eUJBQ2I7NkJBQU07NEJBQ0wsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFFLEtBQXdCLENBQUMsVUFBVSxDQUFDO2lDQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUN6QixLQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDeEMsQ0FDRjtpQ0FDQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ2Y7cUJBQ0Y7eUJBQU07d0JBRUwsSUFBSyxLQUF3QixDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUM7NEJBRS9DLElBQUksRUFBRSxHQUFJLEtBQXdCLENBQUMsV0FBVyxDQUFDOzRCQUMvQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUM7Z0NBQ2IsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDNUIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO2dDQUNwQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7b0NBQ3JCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBQzNCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUM7d0NBQ25DLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7cUNBQ3hCO2dDQUNILENBQUMsQ0FBQyxDQUFDO2dDQUNILE9BQU8sVUFBVSxDQUFDOzZCQUNuQjtpQ0FBTTtnQ0FDTCxPQUFPLEVBQUUsQ0FBQzs2QkFDWDt5QkFFRjt3QkFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUUsS0FBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQzNELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSCxLQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUNqRSxDQUFDO3FCQUNIO2dCQUNILENBQUMsQ0FBQztnQkFDRixNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBRTVCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxRQUFRLENBQUM7Z0JBQzFCLE9BQU87Z0JBQ1AsTUFBTTtTQUNUO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQjtRQUN0QixJQUFJLG1CQUFtQixHQUFHO1lBQ3hCO2dCQUNFLFNBQVMsRUFBRSxPQUFPO2dCQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QixTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQzthQUN4QztTQUNGLENBQUM7UUFFRixJQUNFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUk7WUFDbEMsSUFBSSxDQUFDLHFCQUFxQjtZQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTztZQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUN0RDtZQUNBLDBCQUEwQjtZQUMxQixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQ3RELG1CQUFtQixFQUNuQixDQUFDLEdBQXFCLEVBQUUsRUFBRTtnQkFDeEIsb0RBQW9EO2dCQUNwRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUNGLENBQUM7U0FDSDthQUFNLElBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSTtZQUNsQyxJQUFJLENBQUMscUJBQXFCO1lBQzFCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLEVBQy9EO1lBQ0Esc0JBQXNCO1lBQ3RCLElBQUksbUJBQW1CLEdBQUc7Z0JBQ3hCO29CQUNFLFNBQVMsRUFBRSxPQUFPO29CQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUN4QixTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQztpQkFDeEM7Z0JBQ0Q7b0JBQ0UsU0FBUyxFQUFFLFFBQVE7b0JBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU07b0JBQ3RDLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2lCQUN4QzthQUNGLENBQUM7WUFFRixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLEVBQy9ELG1CQUFtQixFQUNuQixDQUFDLEdBQXFCLEVBQUUsRUFBRTtnQkFDeEIsNkRBQTZEO2dCQUM3RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUNGLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1NBQzlEO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEdBQXFCO1FBQ2hELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBUyxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNoQixtREFBbUQ7WUFDbkQsSUFBSSxNQUFNLEdBQVcsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNsQyxnRUFBZ0U7WUFDaEUsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUN2QixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDM0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRWhGLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsa0JBQWtCLENBQUM7WUFDakQsZ0VBQWdFO1lBQ2hFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2SCxNQUFNLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxjQUFjLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9HLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV4QyxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksRUFBRTtnQkFDaEMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQ3ZHLGFBQWEsR0FBRyxLQUFLLENBQUM7cUJBQ3ZCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ25HLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7SUFDdEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVLEVBQUUsTUFBYztRQUNwQyx1Q0FBdUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLElBQUksSUFBSSxFQUFFO1lBQ3hDLDJEQUEyRDtZQUMzRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDakIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDcEIsS0FBSyxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQztZQUN4Qyw4QkFBOEI7WUFDOUIscUJBQXFCO1lBQ3JCLFlBQVk7U0FDYjthQUFNO1lBQ0wsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDckIsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsUUFBaUIsRUFBRSxDQUFDO1FBQ25ELDRDQUE0QztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RSx1REFBdUQ7SUFDekQsQ0FBQztJQUNELFVBQVUsQ0FBQyxLQUFZLEVBQUUsUUFBaUIsRUFBRSxDQUFDLEVBQUUsRUFBUztRQUN0RCxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLHNDQUFzQztRQUN0QyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFBO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixtREFBbUQ7UUFDbkQsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLHFCQUFxQixFQUFFO1lBQzVDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNwQixLQUFLLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdkUsdURBQXVEO0lBQ3pELENBQUM7SUFDRCxVQUFVLENBQUMsS0FBWSxFQUFFLFFBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQVM7UUFDdEQsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixzQ0FBc0M7UUFFdEMsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQTtRQUN6QixLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLG1EQUFtRDtRQUNuRCxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksbUJBQW1CLEVBQUU7WUFDMUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDckIsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDeEI7YUFBTTtZQUNMLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RSx1REFBdUQ7SUFDekQsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQVMsRUFBRSxRQUFrQixFQUFFLE1BQVc7UUFDekQsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxLQUFZLEVBQUUsUUFBaUIsRUFBRSxDQUFDLEVBQUUsRUFBUztRQUMzRCxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXJCLDRDQUE0QztRQUU1QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzNELFlBQVksRUFBRSxJQUFJO1lBQ2xCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLEtBQUssRUFBRSxNQUFNO1lBQ2IsU0FBUyxFQUFFLE9BQU87U0FDbkIsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxNQUFjLEVBQUUsRUFBUztRQUNwQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVk7UUFDbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsTUFBYztRQUMzQiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELGlCQUFpQixDQUFDLEtBQUs7UUFDckIsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILG9CQUFvQixDQUFDLEtBQTRDO1FBRS9ELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBRTNCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUUvQixJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUNyRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUVoRCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDakIsSUFDRSxJQUFJLENBQUMscUJBQXFCO2dCQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTztnQkFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQ2xEO2dCQUNBLHdDQUF3QztnQkFDeEMsSUFBSSxtQkFBbUIsR0FBRztvQkFDeEI7d0JBQ0UsU0FBUyxFQUFFLE9BQU87d0JBQ2xCLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUs7d0JBQzlCLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO3FCQUN4QztvQkFDRDt3QkFDRSxTQUFTLEVBQUUsU0FBUzt3QkFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTzt3QkFDaEMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7cUJBQ3hDO2lCQUNGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDdkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFDMUQsbUJBQW1CLEVBQ25CLENBQUMsR0FBUyxFQUFFLEVBQUU7b0JBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBRS9CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBQzt3QkFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3FCQUMzRDt5QkFBTTt3QkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBVyxDQUFDO3FCQUMzQztvQkFFRCw0QkFBNEI7b0JBQzVCLElBQUksbUJBQW1CLEdBQUc7d0JBQ3hCOzRCQUNFLFNBQVMsRUFBRSxJQUFJOzRCQUNmLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7NEJBQzNCLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO3lCQUN4QztxQkFDRixDQUFDO29CQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUNsRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFjLEVBQUUsRUFBRTt3QkFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUN2RCxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO3dCQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO3dCQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO3dCQUUxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDckIsQ0FBQyxDQUNGLENBQUM7Z0JBQ0osQ0FBQyxDQUNGLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7YUFDcEI7U0FDRjthQUFNO1lBQ0wsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxLQUFLLEVBQXNCLENBQUM7WUFDbEMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUN2QixTQUFTLEVBQUUsSUFBSTtnQkFDZixVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3ZCLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2FBQ3hDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUNoRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFTLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFFL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFDO29CQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQzNEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFXLENBQUM7aUJBQzNDO2dCQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDckIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQ2IsQ0FBQztZQUVGLDhCQUE4QjtZQUM5Qix5QkFBeUI7WUFDekIscURBQXFEO1NBQ3REO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFDO2dCQUNwQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksR0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNyRTtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFlBQVk7UUFDVix3R0FBd0c7UUFDeEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1QixJQUFHLEtBQUssQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLEVBQUM7Z0JBQ3ZDLEtBQUssQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUM7YUFDekM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sbUJBQW1CLEdBQThCLElBQUksS0FBSyxFQUFzQixDQUFDO1FBQ3ZGLG1CQUFtQixDQUFDLElBQUksQ0FBQztZQUN2QixTQUFTLEVBQUUsSUFBSTtZQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUN2QixTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQztTQUN4QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFDaEQsbUJBQW1CLEVBQ25CLENBQUMsR0FBUyxFQUFFLEVBQUU7WUFDWixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBRS9CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBQztnQkFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzNEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFXLENBQUM7YUFDM0M7WUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUUzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDM0QsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixLQUFLLEVBQUUsTUFBTTtnQkFDYixTQUFTLEVBQUUsT0FBTzthQUNuQixDQUFDLENBQUM7UUFFTCxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVTtRQUVSLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQy9ELFlBQVksRUFBRSxJQUFJO1lBQ2xCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFNBQVMsRUFBRSxPQUFPO1NBQ25CLENBQUMsQ0FBQztRQUNILHNGQUFzRjtJQUN4RixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQWM7UUFDNUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFO1lBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1NBQUU7UUFDckUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQWM7UUFDakMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFO1lBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1NBQUU7UUFDckUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQWM7UUFDaEMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFFekcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdkQsSUFBSSxNQUFNLENBQUMsY0FBYyxJQUFJLElBQUksRUFBQztvQkFFaEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDO29CQUFBLENBQUMsQ0FBQywrQkFBK0I7b0JBRTNELHVDQUF1QztvQkFDdkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxLQUFLLEVBQUU7d0JBQ1QsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN2QixJQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUM7NEJBQ2hDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ25DLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQy9CLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQzt5QkFDMU87cUJBQ0Y7eUJBQU07d0JBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBRSxHQUFHLEdBQUcsSUFBSSxDQUFDO3FCQUNuSztpQkFFRjtZQUVILENBQUMsQ0FBQyxDQUFDO1NBRUY7UUFFRCw4Q0FBOEM7UUFDOUMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsb0JBQW9CLENBQUMsRUFBTztRQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFQyxhQUFhLENBQUMsRUFBTztRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELHNCQUFzQixDQUFDLEVBQVk7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUFlO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7O3lIQW42QlUsMkJBQTJCOzZHQUEzQiwyQkFBMkIsbW5DQzFEeEMsOHhUQW1QQTs0RkR6TGEsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLHVCQUF1QjsyT0FNeEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFpQnVDLFlBQVk7c0JBQXhELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFRSSxhQUFhO3NCQUEzRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR0ksZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBdUJyQyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBS0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2VsbEFsaWdubWVudEVudW0sXHJcbiAgQ29uZmlnQ29sdW1uLFxyXG4gIEVxcFRhYmxlQ29tcG9uZW50LFxyXG4gIE51bWJlckNvbHVtblBpcGUsXHJcbiAgVHlwZUNvbHVtblxyXG59IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkLCBSZWNvcmRCdXR0b24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tIFwiLi8uLi8uLi8uLi8uLi8vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLy4uLy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEZpcmVUcmlnZ2VyLCBUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBkYkRhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL2RiLWRhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUZpZWxkLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRGF0ZUZpZWxkLCBEYXRlVGltZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBMYWJlbEZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGFiZWxGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBNb2RlRW51bSwgVGltZVR5cGVFbnVtIH0gZnJvbSAndG13LXBpY2tlcic7XHJcbmltcG9ydCB7IFRhYmVsbGFyRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZ3JhcGgubW9kZWwnO1xyXG5pbXBvcnQgeyBfX3ZhbHVlcyB9IGZyb20gXCJ0c2xpYlwiO1xyXG5cclxudHlwZSBQYW5lbCA9IHtcclxuICByZWNvcmQ6IFJlY29yZCxcclxuICBpc09wZW46IGJvb2xlYW4sXHJcbiAgcGFnZVN0YXRlOiBzdHJpbmcsXHJcbiAgaGlnaGxpZ2h0ZWQ6IGJvb2xlYW5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGlzdC12aWV3LWZvcm0tcmVjb3JkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RWaWV3Rm9ybVJlY29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUxpc3RDb25maWc7XHJcbiAgQElucHV0KCkgY29tcGlsZUNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZztcclxuICBvdXRDb21waWxlQ29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG9yZ2FJRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm0gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uOiBGdW5jdGlvbiA9IG51bGw7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBvbmx5VmlldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcmVjb3JkczogQXJyYXk8RHluUmVjb3JkPiA9IG51bGw7XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0RmlsdGVyOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuXHJcbiAgZGVmYXVsdExpc3RBY3Rpb25zOiBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICBzaG93VGl0bGUgPSB0cnVlO1xyXG4gIC8vIHZhbHVlczogQXJyYXk8UmVjb3JkPjtcclxuICB0ZXN0ID0gZmFsc2U7XHJcbiAgaXNEdXBsaWNhdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkUmVjb3JkOiBhbnk7IC8vIFJlY29yZCB8IHN0cmluZztcclxuICBsb2FkZXI6IGJvb2xlYW47XHJcbiAgbG9hZGVkZm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHBhbmVsT3BlblN0YXRlOiBib29sZWFuW10gPSBuZXcgQXJyYXk8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgdmlzdWFsaXp6YUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gIG1vZGlmaWNhQ29udGVudXRvID0gZmFsc2U7XHJcblxyXG5cclxuICBAVmlld0NoaWxkKFwidGFibGVSZWNvcmRzXCIsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlUmVjb3JkczogRXFwVGFibGVDb21wb25lbnQ7XHJcblxyXG4gIGNvbHVtbnMgPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIHRhYmVsbGFyQ29sdW1ucyA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgcGFuZWxzOiBBcnJheTxQYW5lbD5cclxuICBidXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBwb3B1cExvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKFwib3BlbkFkZERpYWxvZ1wiLCB7IHN0YXRpYzogZmFsc2UgfSkgb3BlbkFkZERpYWxvZzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBvcGVuQWRkRGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJvcGVuR3JhcGhEaWFsb2dcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIG9wZW5HcmFwaERpYWxvZzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBvcGVuR3JhcGhEaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgdG9kb0xpc3Q6IGFueTtcclxuICBpc0Z1bGxPcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNUYWJlbGxhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzTGlzdFZpZXc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHRhYmVsbGFyQ29uZGl0aW9uTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIG1pbnBlcmlvZDogRGF0ZTtcclxuICBtYXhwZXJpb2Q6IERhdGU7XHJcblxyXG4gIHRhYmVsbGFyRmllbGRzOiBBcnJheTxUYWJlbGxhckZpZWxkPiA9IG5ldyBBcnJheTxUYWJlbGxhckZpZWxkPigpO1xyXG4gIHNlbGVjdGVkVGFiZWxsYXJGaWVsZHM6IEFycmF5PFRhYmVsbGFyRmllbGQ+O1xyXG4gIHRhYmVsbGFyVmFsdWVzOiBBcnJheTxhbnk+ID0gbmV3IEFycmF5PGFueT4oKTtcclxuXHJcbiAgLy8gVE1XLVBJQ0tFUlxyXG4gIG1vZGVzID0gTW9kZUVudW1cclxuICB0aW1lVHlwZSA9IFRpbWVUeXBlRW51bVxyXG4gIG1vZGU6IE1vZGVFbnVtO1xyXG5cclxuICAvLyBhZGQgbmV3XHJcbiAgQE91dHB1dCgpIG9uQWRkVmlld0VkaXRSZWNvcmQ6IEV2ZW50RW1pdHRlcjx7XHJcbiAgICByZWNvcmQ6IFJlY29yZDtcclxuICAgIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25EZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGRyYWdTdGFydGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkcmFnUmVsZWFzZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgZmlyZVRyaWdnZXI6IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPigpO1xyXG4gIEBPdXRwdXQoKSBjbGlja0RyYWdJbmRpY2F0b3I6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBkYkRhdGVTZXJ2aWNlOiBkYkRhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGVcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMucGFuZWxPcGVuU3RhdGUgPSBbXHJcbiAgICAvLyAgIC4uLkFycmF5KHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLmxlbmd0aCArIDEpLFxyXG4gICAgLy8gXS5tYXAoKCkgPT4gZmFsc2UpO1xyXG5cclxuICAgIHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5kZWZhdWx0TGlzdEFjdGlvbnM7XHJcbiAgICB0aGlzLnNob3dUaXRsZSA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlO1xyXG5cclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zID0gbmV3IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnKFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93VGl0bGUsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93QmFja0J1dHRvbixcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsUGFyYW1zLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsSW5mbyxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMucHJlZmlsdGVyUGFyYW1zLFxyXG4gICAgKTtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmlldyAtIG91dGNvbXBpbGVDb25maWd1cmF0aW9ucyBcIiwgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMpO1xyXG4gICAgdGhpcy5nZXRGb3JtQnlJRCgpO1xyXG4gICAgdGhpcy5jb25maWd1cmVMaXN0dmlld0J1dHRvbnMoKTtcclxuXHJcbiAgICAvLyB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucy51c2VySUQ7XHJcbiAgICAvLyB0aGlzLnZhbHVlcyA9IHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzXHJcbiAgICAvLyB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbmdPbkNoYW5nZXMnLCBjaGFuZ2VzKTtcclxuXHJcbiAgICAvLyBTZSB2aWVuZSBtb2RpZmljYXRvIGlsIHZhbG9yZSBkaSBcIm5nTW9kZWxJbnB1dFwiIGFsbG9yYSBhZ2dpb3JuYSBsJ2lucHV0XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdLmZpcnN0Q2hhbmdlID09IGZhbHNlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnJlbG9hZFRhYmxlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25PcGVuaW5nKGluZGljZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRpY2U7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVRhYmVsbGFyKCl7XHJcblxyXG4gICAgdGhpcy50YWJlbGxhckNvbmRpdGlvbkxvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRhYmVsbGFyQ29sdW1ucyA9IFtdO1xyXG4gICAgICB0aGlzLnRhYmVsbGFyVmFsdWVzID0gW107XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYmVsbGFyRmllbGRzLmZpbmQoeCA9PiB4LkRlc2NyaXB0aW9uID09IGNvbC5rZXkpKXtcclxuICAgICAgICAgIHRoaXMudGFiZWxsYXJDb2x1bW5zLnB1c2goY29sKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5tYXhwZXJpb2Quc2V0SG91cnMoMjMsNTksNTksNTkpO1xyXG5cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcclxuICAgICAgICBpZiAobmV3IERhdGUodmFsdWUuQW5zd2VyRGF0ZSkgPj0gdGhpcy5taW5wZXJpb2QgJiYgbmV3IERhdGUodmFsdWUuQW5zd2VyRGF0ZSkgPD0gdGhpcy5tYXhwZXJpb2Qpe1xyXG4gICAgICAgICAgdGhpcy50YWJlbGxhclZhbHVlcy5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pOyBcclxuXHJcblxyXG4gICAgICB0aGlzLnRhYmVsbGFyQ29sdW1ucy5mb3JFYWNoKCh0Y29sKSA9PiB7XHJcbiAgICAgICAgdGNvbC5kaXNwbGF5ID0gdGhpcy5mb3JtLkZpZWxkcy5maW5kKHggPT4geC5OYW1lID09IHRjb2wua2V5KS5EZXNjcmlwdGlvbjtcclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgICAvL2NvbnNvbGUubG9nKFwiVEFCRUxMQVIgVkFMVUVTXCIsIHRoaXMuZm9ybSwgdGhpcy50YWJlbGxhckNvbHVtbnMsIHRoaXMudGFiZWxsYXJGaWVsZHMsIHRoaXMudGFiZWxsYXJWYWx1ZXMpO1xyXG5cclxuICAgICAgdGhpcy50YWJlbGxhckNvbmRpdGlvbkxvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICBpZiAodGhpcy50YWJlbGxhclZhbHVlcy5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgdGhpcy50YWJlbGxhckNvbHVtbnMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICAgIC8vIE5vbiBzZXJ2ZSBjZXJjYXJlIGkgTUFYLCBsaSBzZXR0YSBDU1MgaW4gYXV0b21hdGljbyBjb24gbGEgcmVnb2xhIG1heC1jb250ZW50XHJcblxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIjdGFiZWxsYXIgdGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGRcIikuZm9yRWFjaCgoZWwsaW5kZXgpID0+IHtcclxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFwiI3RhYmVsbGFyIHRhYmxlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkXCIpW2luZGV4XS5zdHlsZS5oZWlnaHQgPSBlbC5jbGllbnRIZWlnaHQrXCJweFwiO1xyXG4gICAgICAgICAgaWYgKGVsLmNsaWVudEhlaWdodCA+IDY4KXtcclxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXCIjdGFiZWxsYXIgdGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGhcIilbaW5kZXhdLnN0eWxlLmhlaWdodCA9IChlbC5jbGllbnRIZWlnaHQrMSkrXCJweFwiO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihcIiN0YWJlbGxhciB0YWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aFwiKVtpbmRleF0uc3R5bGUubWluSGVpZ2h0ID0gKGVsLmNsaWVudEhlaWdodCsxKStcInB4XCI7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihcIiN0YWJlbGxhciB0YWJsZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZFwiKVtpbmRleF0uc3R5bGUuaGVpZ2h0ID0gXCI2OHB4XCI7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFwiI3RhYmVsbGFyIHRhYmxlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkXCIpW2luZGV4XS5zdHlsZS5taW5IZWlnaHQgPSBcIjY4cHhcIjtcclxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXCIjdGFiZWxsYXIgdGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGhcIilbaW5kZXhdLnN0eWxlLmhlaWdodCA9IFwiNjhweFwiO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihcIiN0YWJlbGxhciB0YWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aFwiKVtpbmRleF0uc3R5bGUubWluSGVpZ2h0ID0gXCI2OHB4XCI7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIiN0YWJlbGxhciB0YWJsZSB0Ym9keSB0cjpudGgtY2hpbGQobisyKSB0ZDpudGgtY2hpbGQoXCIrKGluZGV4KzEpK1wiKVwiKS5mb3JFYWNoKChlbDIpID0+IHtcclxuICAgICAgICAgICAgKGVsMiBhcyBIVE1MRWxlbWVudCkuc3R5bGUuaGVpZ2h0ID0gZWwuY2xpZW50SGVpZ2h0K1wicHhcIjtcclxuICAgICAgICAgICAgaWYgKGVsLmNsaWVudEhlaWdodCA+IDY4KXtcclxuICAgICAgICAgICAgICAoZWwyIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5oZWlnaHQgPSBlbC5jbGllbnRIZWlnaHQrXCJweFwiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIChlbDIgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmhlaWdodCA9IFwiNjhweFwiO1xyXG4gICAgICAgICAgICAgIChlbDIgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLm1pbkhlaWdodCA9IFwiNjhweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sMzAwKTtcclxuICAgIH0sMTAwKTtcclxuXHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVMaXN0dmlld0J1dHRvbnMoKSB7XHJcbiAgICB0aGlzLmJ1dHRvbnMgPSBbXHJcblxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwidmlzaWJpbGl0eVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIlZpc3VhbGl6emFcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMudmlldyAmJiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZWRpdCB8fCB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kdXBsaWNhdGUgfHwgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZGVsZXRlKSxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJ2aWV3LWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsIGksIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdSZWNvcmQocGFuZWwsIHRydWUsIGksIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJlZGl0XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZWRpdCxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJlZGl0LWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsIGksIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkVkaXRSZWNvcmQocGFuZWwsIGZhbHNlLCBpLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiRHVwbGljYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kdXBsaWNhdGUsXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwiZHVwbGljYXRlLWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsIGksIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmR1cGxpY2F0ZVJlY29yZChwYW5lbCwgZmFsc2UsIGksIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJkZWxldGVcIixcclxuICAgICAgICBcInRleHRcIjogXCJDYW5jZWxsYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUsXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwiZGVsZXRlLWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsIGksIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRlbGV0ZVJlY29yZChwYW5lbCwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIF1cclxuICAgIHRoaXMuYnV0dG9ucyA9IHRoaXMuYnV0dG9ucy5jb25jYXQodGhpcy5leHRlcm5hbEJ1dHRvbnMpLmZpbHRlcih4ID0+IHgudmlzaWJsZSk7XHJcbiAgfVxyXG5cclxuICBvcGVuVGFiZWxsYXIoKXtcclxuICAgIHRoaXMudGFiZWxsYXJGaWVsZHMgPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgdGhpcy50YWJlbGxhckZpZWxkcy5wdXNoKHtEZXNjcmlwdGlvbjogY29sLmtleX0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pc0xpc3RWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzVGFiZWxsYXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb3Blbkxpc3RWaWV3KCl7XHJcbiAgICB0aGlzLmlzVGFiZWxsYXIgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNMaXN0VmlldyA9IHRydWU7XHJcbiAgfSAgXHJcblxyXG4gIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybSA9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogaWQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgICB9ICAgICAgICAgIFxyXG5cclxuICAgICAgICAgIHRoaXMubG9hZGVkZm9ybSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGxlIGNvbG9ubmUgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1ucygpO1xyXG5cclxuICAgIC8vIHRoaXMuY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKTtcclxuICAgIC8vIHRoaXMuY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzKCk7XHJcbiAgICBpZiAodGhpcy5yZWNvcmRzID09IG51bGwpIHtcclxuICAgICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnUmVjb3JkcyBFeGlzdHMnLCB0aGlzLnJlY29yZHMpO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHRoaXMucmVjb3Jkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1ucygpe1xyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1ldG9kbyBwZXIgY3JlYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRlbGxlIGNvbG9ubmUgcGVyIGxhIGVxcC10YWJsZS5cclxuICAgICAgICogSW5kaXZpZHVhIGkgQmFzZUZpZWxkIGRhIG1vc3RyYXJlIGUgbGkgdXNhIHBlciBjcmVhcmUgbGUgQ29uZmlnQ29sdW1uLlxyXG4gICAgICAgKiBMZSBjb2xvbm5lIHZlbmdvbm8gY3JlYXRlIHBlciBpIEJhc2VGaWVsZCBjb24gaWwgZmxhZyBJbkxpc3RWaWV3IGEgVFJVRVxyXG4gICAgICAgKiBvcHB1cmUsIG5lbCBjYXNvIG5vbiBzaWFubyBzdGF0aSBzcGVjaWZpY2F0aSBpIGNhbXBpIGRhIHZpc3VhbGl6emFyZSxcclxuICAgICAgICogc2VsZXppb25hIGkgcHJpbWkgNi5cclxuICAgICAgICovXHJcblxyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMnLCB0aGlzLmZvcm0pO1xyXG4gICAgXHJcbiAgICAgICAgdmFyIGZpZWxkc0ZvckNvbHVtbnM6IEFycmF5PEJhc2VGaWVsZD47XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMuZmluZCgoZikgPT4gZi5Jbkxpc3RWaWV3KSkge1xyXG4gICAgICAgICAgZmllbGRzRm9yQ29sdW1ucyA9IHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiBmLkluTGlzdFZpZXcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuT3JkaW5hbFBvc2l0aW9uIDwgNik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpZWxkc0ZvckNvbHVtbnNcclxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgPyAxXHJcbiAgICAgICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgPyAtMVxyXG4gICAgICAgICAgICAgIDogMFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHRoaXMuY3JlYXRlRmllbGRDb2x1bW4oZmllbGQpKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiRklOQUwgQ09MVU1TTlwiLCB0aGlzLmNvbHVtbnMpO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGwnb2dnZXR0byBDb25maWd1cmVDb2x1bW4gY2hlIHJhcHByZXNlbnRhIGlsIEJhc2VGaWVsZCBwYXNzYXRvIGluIGlucHV0LlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgcGVyIGN1aSBjcmVhcmUgbGEgY29sb25uYSBuZWxsYSBlcXAtdGFibGVcclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgQ29uZmlnQ29sdW1uIHBlciBsYSBlcXAtdGFibGVcclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkOiBCYXNlRmllbGQpOiBDb25maWdDb2x1bW4ge1xyXG4gICAgdmFyIGNvbHVtbjogQ29uZmlnQ29sdW1uID0geyBrZXk6IGZpZWxkLk5hbWUsIGRpc3BsYXk6IGZpZWxkLkxhYmVsIH07XHJcbiAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uQm9vbGVhbjtcclxuICAgICAgICBjb2x1bW4uYm9vbGVhblZhbHVlcyA9IHtcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS10aW1lcyBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uLnN0eWxlcyA9IHtcclxuICAgICAgICAgIGZsZXg6IFwiMCAwIDclXCIsXHJcbiAgICAgICAgICBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgIT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gb3JhcmlvXCJdXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uRGF0ZTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiRGF0YSBlIG9yYVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSBcImRkL01NL3l5eXkgSEg6bW1cIjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gZGF0YVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICAgPyAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0LnJlcGxhY2UoXCJERFwiLCBcImRkXCIpXHJcbiAgICAgICAgICAgICAgOiBcImRkL01NL3l5eXlcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbCkge1xyXG4gICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkNVUlJFTkNZO1xyXG4gICAgICAgICAgY29sdW1uLmN1cnJlbmN5UGlwZUNvZGUgPSAoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbDtcclxuICAgICAgICB9IGVsc2UgaWYgKCEoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5Jc0ludGVnZXIpIHtcclxuICAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5ERUNJTUFMO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQWxsZWdhdG9cIl06XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gICAgIFxyXG4gICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkV0aWNoZXR0YVwiXTpcclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7IHJldHVybiAoZmllbGQgYXMgTGFiZWxGaWVsZCkuRXRpY2hldHRhOyB9O1xyXG4gICAgICBicmVhazsgICAgICAgIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcblxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9IChlbGVtZW50OiBSZWNvcmQpID0+IHtcclxuICAgICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudFtmaWVsZC5OYW1lXSB8fCBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycylcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGspID0+XHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRbZmllbGQuTmFtZV0uaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID09IG51bGwpeyBcclxuXHJcbiAgICAgICAgICAgICAgdmFyIHZzID0gKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZztcclxuICAgICAgICAgICAgICBpZiAodnMgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHZzLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgICAgICAgIHZhciBmb3VuZHZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9yRWFjaCgob3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG9wLnNwbGl0KFwifFwiKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlc1sxXSA9PSBlbGVtZW50W2ZpZWxkLk5hbWVdKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3VuZHZhbHVlID0gdmFsdWVzWzBdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZHZhbHVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpLmZpbmQoXHJcbiAgICAgICAgICAgICAgKGspID0+XHJcbiAgICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba10gPT0gZWxlbWVudFtmaWVsZC5OYW1lXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uLmlzU29ydGFibGUgPSBmYWxzZTtcclxuICAgICAgICBjb2x1bW4uaXNTZWFyY2hhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbHVtbjtcclxuICB9ICBcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqIExhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIGRldmUgZXNzZXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGkgdGlwbyBcIkR5blJlY29yZFwiXHJcbiAgICogYSBwYXJ0aXJlIGRhaSBxdWFsaSB2ZW5nb25vIHJpY3JlYXRpIGkgUmVjb3JkIHVzYXRpIG5lbCBjbGllbnQuXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0UmVjb3Jkc0J5Rm9ybUlEKCkge1xyXG4gICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgPT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIHNlIG5vbiBjb25vc2NvIGwndXRlbnRlXHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnR2V0QnlGb3JtSURFbmRQb2ludCcsIHJlcylcclxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgLy8gc2UgY29ub3NjbyBsJ3V0ZW50ZVxyXG4gICAgICBsZXQgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5JRCxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIlVzZXJJRFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQsXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogQXJyYXk8RHluUmVjb3JkPikgPT4ge1xyXG4gICAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdHZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50JywgcmVzKVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUFuc3dlcnNBcnJheShyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJjb250cm9sbGFyZSBsZSBjb25maWd1cmF6aW9uaSBkZWxsJ2VuZHBvaW50XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUFuc3dlcnNBcnJheShyZXM6IEFycmF5PER5blJlY29yZD4pIHtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzID0gbmV3IEFycmF5PFJlY29yZD4oKTtcclxuICAgIHRoaXMucGFuZWxzID0gbmV3IEFycmF5PFBhbmVsPigpO1xyXG4gICAgcmVzLmZvckVhY2goKHIpID0+IHtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZ2VuZXJhdGVBbnN3ZXJzQXJyYXlcIiwgcilcclxuICAgICAgdmFyIHRtcFJlYzogUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJTZXJpYWxpemVkVmFsdWVzXCIsIHIuU2VyaWFsaXplZFZhbHVlcylcclxuICAgICAgdG1wUmVjID0gSlNPTi5wYXJzZShyLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICB0bXBSZWMuSUQgPSByLklEO1xyXG4gICAgICB0bXBSZWMuRW50SUQgPSByLkVudElEO1xyXG4gICAgICB0bXBSZWMuVmVyc2lvbiA9IHIuVmVyc2lvbjtcclxuICAgICAgdG1wUmVjLnVzZXJJRCA9IHIudXNlcklEO1xyXG4gICAgICB0bXBSZWMuQW5zd2VyRGF0ZSA9IHRoaXMuZGJEYXRlU2VydmljZS5wYXJzZURhdGVmcm9tREIoci5BbnN3ZXJEYXRlKS50b1N0cmluZygpO1xyXG5cclxuICAgICAgdG1wUmVjLkhUTUxyZWFkYWJsZVZhbHVlcyA9IHIuSFRNTHJlYWRhYmxlVmFsdWVzO1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBZGRpdGlvbmFsUGFyYW1zXCIsIHIuQWRkaXRpb25hbFBhcmFtcylcclxuICAgICAgdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXMgPSByLkFkZGl0aW9uYWxQYXJhbXMgIT0gXCJcIiAmJiByLkFkZGl0aW9uYWxQYXJhbXMgIT0gbnVsbCA/IEpTT04ucGFyc2Uoci5BZGRpdGlvbmFsUGFyYW1zKSA6IFwiXCI7XHJcbiAgICAgIHRtcFJlYy5BZGRpdGlvbmFsSW5mbyA9IHIuQWRkaXRpb25hbEluZm8gIT0gXCJcIiAmJiByLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgPyBKU09OLnBhcnNlKHIuQWRkaXRpb25hbEluZm8pIDogXCJcIjtcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMucHVzaCh0bXBSZWMpO1xyXG5cclxuICAgICAgdmFyIGlzSGlnaGxpZ2h0ZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0RmlsdGVyICE9IG51bGwpIHtcclxuICAgICAgICBpc0hpZ2hsaWdodGVkID0gdHJ1ZTtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmhpZ2hsaWdodEZpbHRlcikuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zW2ZpbHRlcl0gfHwgdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXNbZmlsdGVyXSAhPSB0aGlzLmhpZ2hsaWdodEZpbHRlcltmaWx0ZXJdKSB7XHJcbiAgICAgICAgICAgIGlzSGlnaGxpZ2h0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5wYW5lbHMucHVzaCh7IHJlY29yZDogdG1wUmVjLCBpc09wZW46IGZhbHNlLCBwYWdlU3RhdGU6IG51bGwsIGhpZ2hsaWdodGVkOiBpc0hpZ2hsaWdodGVkIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoXykgPT4ge1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDApOyAvLyByZWZyZXNoIHVpXHJcbiAgfVxyXG5cclxuICB0b2dnbGVQYW5lbChwYW5lbDogYW55LCByZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd0b2dnbGVQYW5lbCcpXHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdFZpZXdGdW5jdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZGVmYXVsdExpc3RWaWV3RnVuY3Rpb24nLCByZWNvcmQpXHJcbiAgICAgIHRoaXMuZGVmYXVsdExpc3RWaWV3RnVuY3Rpb24ocmVjb3JkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFwYW5lbC5pc09wZW4pIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgICAvLyBTaW11bGEgdW4gY2FsY29sbyBhc2luY3Jvbm9cclxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIH0sIDEwMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIHNjYXRlbmEgbCdldmVudG8gZGkgT3V0cHV0IHBlciBtb3N0cmFyZSBvIG1vZGlmaWNhcmUgaWwgcmVjb3JkXHJcbiAgICogc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIHZpZW5lIG1vc3RyYXRvIGlsIGNvbXBvbmVudGUgYWRkLWZvcm0tcmVjb3JkIGluIHNvbGEgbGV0dHVyYS5cclxuICAgKi9cclxuICB2aWV3T3JFZGl0UmVjb3JkKHJlY29yZDogUmVjb3JkLCBvbmx5VmlldzogYm9vbGVhbiwgaSkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd2aWV3T3JFZGl0UmVjb3JkJylcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQyKHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGUubWFwKCgpID0+IGZhbHNlKTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPSB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG4gIHZpZXdSZWNvcmQocGFuZWw6IFBhbmVsLCBvbmx5VmlldzogYm9vbGVhbiwgaSwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3ZpZXdSZWNvcmQnKVxyXG4gICAgbGV0IHJlY29yZCA9IHBhbmVsLnJlY29yZFxyXG4gICAgdGhpcy52aXN1YWxpenphQ29udGVudXRvID0gdHJ1ZTtcclxuICAgIHRoaXMubW9kaWZpY2FDb250ZW51dG8gPSBmYWxzZTtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQyKHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICAgIGlmIChwYW5lbC5wYWdlU3RhdGUgPT0gJ3Zpc3VhbGl6emFDb250ZW51dG8nKSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcbiAgRWRpdFJlY29yZChwYW5lbDogUGFuZWwsIG9ubHlWaWV3OiBib29sZWFuLCBpLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnRWRpdFJlY29yZCcpXHJcblxyXG4gICAgbGV0IHJlY29yZCA9IHBhbmVsLnJlY29yZFxyXG4gICAgcGFuZWwucmVjb3JkLkFkZGl0aW9uYWxJbmZvID0gT2JqZWN0LmFzc2lnbih7fSwgcmVjb3JkLkFkZGl0aW9uYWxJbmZvLCB0aGlzLmNvbmZpZ3VyYXRpb25zLnVwZGF0ZUluZm8pO1xyXG4gICAgdGhpcy52aXN1YWxpenphQ29udGVudXRvID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGlmaWNhQ29udGVudXRvID0gdHJ1ZTtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQyKHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICAgIGlmIChwYW5lbC5wYWdlU3RhdGUgPT0gJ21vZGlmaWNhQ29udGVudXRvJykge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICdtb2RpZmljYUNvbnRlbnV0byc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuXHJcbiAgZXh0ZXJuYWxDYWxsYmFjayhldjogRXZlbnQsIGNhbGxiYWNrOiBGdW5jdGlvbiwgcmVjb3JkOiBhbnkpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNhbGxiYWNrKHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGR1cGxpY2FyZSB1biByZWNvcmQgZGVsbGEgZm9ybS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBkdXBsaWNhcmUuXHJcbiAgICovXHJcbiAgZHVwbGljYXRlUmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZHVwbGljYXRlUmVjb3JkJyk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IHBhbmVsLnJlY29yZC5JRDtcclxuICAgIHRoaXMuaXNEdXBsaWNhdGluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5vcGVuQWRkRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLm9wZW5BZGREaWFsb2csIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiODB2d1wiLFxyXG4gICAgICBtaW5IZWlnaHQ6IFwiMTAwcHhcIixcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZWxpbWluYXJlIHVuIHJlY29yZCBkYWxsYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBlbGltaW5hcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIGRlbGV0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLm9uRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkVGFibGVzKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVSZWNvcmRzKSB7XHJcbiAgICAgIHRoaXMudGFibGVSZWNvcmRzLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0ocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC12aWV3LWZvcm0tcmVjb3JkIHNhdmUnLCByZWNvcmQpXHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIG9uQWZ0ZXJTYXZlUmVjb3JkKGV2ZW50KSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3Qtdmlldy1mb3JtLXJlY29yZCBhZnRlcnNhdmUnLCBldmVudClcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlLCB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHVuIHJlY29yZC5cclxuICAgKiBTZSBsJ2V2ZW50byDDqCBudWxsIHZ1b2wgZGlyZSBjaGUgc3RpYW1vIGFnZ2l1bmdlbmRvIHVuIG51b3ZvIHJlY29yZCBhbHRyaW1lbnRpIHNpYW1vIGluIG1vZGlmaWNhXHJcbiAgICogbyB2aXN1YWxpenphemlvbmUuIEluIHF1ZXN0aSB1bHRpbWkgZHVlIGNhc2ksIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZHBvaW50IHBlciBpbCByZWN1cGVyb1xyXG4gICAqIGRlbCByZWNvcmQgY29tcGxldG8gYWxsb3JhIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciwgYWx0cmltZW50aSB2aWVuZSB1c2F0byBsJ29nZ2V0dG8gc2VsZXppb25hdG8uXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gY29uIGR1ZSBwcm9wcmlldMOgOlxyXG4gICAqIFwicmVjb3JkXCIgPSBvZ2dldHRvIGRhIG1vZGlmaWNhcmUvdmlzdWFsaXp6YXJlLFxyXG4gICAqIFwib25seVZpZXdcIiA9IGJvb2xlYW5vIChzZSBUUlVFIHNpYW1vIGluIHZpc3VhbGl6emF6aW9uZSBhbHRyaW1lbnRpIGluIG1vZGlmaWNhKVxyXG4gICAqL1xyXG4gIG9uQWRkVmlld0VkaXRSZWNvcmQyKGV2ZW50OiB7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9KSB7XHJcblxyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG5cclxuICAgIHRoaXMub25seVZpZXcgPSBldmVudC5vbmx5VmlldztcclxuXHJcbiAgICB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93QmFja0J1dHRvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1NhdmVCdXR0b24gPSAhZXZlbnQub25seVZpZXc7XHJcbiAgICB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93VGl0bGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgLy8gcHJlcGFybyBsYSB2ZXJzaW9uZSBjb3JyZXR0YSBkZWwgZm9ybVxyXG4gICAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLkVudElELFxyXG4gICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJWZXJzaW9uXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5WZXJzaW9uLFxyXG4gICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURBbmRWZXJzaW9uRW5kUG9pbnQsXHJcbiAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICAgICAgICAgIHZhciBkeW5hbWljUmVjb3JkUGFyYW1zID0gW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLklELFxyXG4gICAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBEeW5SZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuSUQgPSByZXMuSUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGV2ZW50LnJlY29yZCkpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgIH0gICAgICAgICAgXHJcblxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG4gICAgICAvLyB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgIC8vIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuQWxsKCl7XHJcbiAgICB0aGlzLmlzRnVsbE9wZW5lZCA9ICF0aGlzLmlzRnVsbE9wZW5lZDtcclxuICAgIHRoaXMucGFuZWxzLmZvckVhY2goKHBhbmVsKSA9PiB7XHJcbiAgICAgIGlmIChwYW5lbC5pc09wZW4gIT0gdGhpcy5pc0Z1bGxPcGVuZWQpe1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicC1cIitwYW5lbC5yZWNvcmQuSUQrXCItdmlzaWJpbGl0eVwiKS5jbGljaygpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb3BlbkFkZFBvcHVwKCkge1xyXG4gICAgLy8gbWkgc3NpY3VybyBjaGUgbm9uIGNpIHNpYW5vIHBhbm5lbGxpIGluIG1vZGlmaWNhIHBlcmNow6ggYWx0cmltZW50aSB2YSBpbiBjb25mbGl0dG8gbCd1cGRhdGUgY29uIGwnYWRkXHJcbiAgICB0aGlzLnBhbmVscy5mb3JFYWNoKChwYW5lbCkgPT4ge1xyXG4gICAgICBpZihwYW5lbC5wYWdlU3RhdGUgPSAnbW9kaWZpY2FDb250ZW51dG8nKXtcclxuICAgICAgICBwYW5lbC5wYWdlU3RhdGUgPSAndmlzdWFsaXp6YUNvbnRlbnV0byc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPSBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wb3B1cExvYWRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc0R1cGxpY2F0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMub3BlbkFkZERpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuQWRkRGlhbG9nLCB7XHJcbiAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICAgIHdpZHRoOiBcIjgwdndcIixcclxuICAgICAgICAgIG1pbkhlaWdodDogXCIxMDBweFwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvciBSdW5FbmRQb2ludENhbGxcIiwgZXJyKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9wZW5HcmFwaHMoKSB7XHJcbiAgICBcclxuICAgIHRoaXMub3BlbkdyYXBoRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLm9wZW5HcmFwaERpYWxvZywge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICBtaW5XaWR0aDogXCI4MHZ3XCIsXHJcbiAgICAgIG1pbkhlaWdodDogXCI3MHZoXCIsXHJcbiAgICAgIG1heEhlaWdodDogXCIxMDB2aFwiXHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnZHluYW1pYy1tb2R1bGUtZ3JhcGhzLycgKyB0aGlzLmZvcm1JRCArICcvJyArIHRoaXMudXNlcklEXSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUdyYXBocygpIHtcclxuICAgIHRoaXMub3BlbkdyYXBoRGlhbG9nUmVmLmNsb3NlKClcclxuICB9XHJcbiAgICBcclxuICBvbkFkZFNhdmVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIGlmICh0aGlzLm9wZW5BZGREaWFsb2dSZWYgIT0gbnVsbCkgeyB0aGlzLm9wZW5BZGREaWFsb2dSZWYuY2xvc2UoKTsgfVxyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIG9uQWRkQWZ0ZXJTYXZlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuQWRkRGlhbG9nUmVmICE9IG51bGwpIHsgdGhpcy5vcGVuQWRkRGlhbG9nUmVmLmNsb3NlKCk7IH1cclxuICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICBwcmludEFkZGl0aW9uYWxJbmZvKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBsZXQgb3V0ID0gXCJcIjtcclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbnMubGlzdFZpZXdSZWNvcmRUaXRsZSAhPSBudWxsICYmIHRoaXMuY29uZmlndXJhdGlvbnMubGlzdFZpZXdSZWNvcmRUaXRsZS5sZW5ndGggPiAwKXtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAocmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwpe1xyXG5cclxuICAgICAgICBjb25zdCByZWdleCA9IC9cXCgoLispXFwpL2c7OyAvLyBwYXR0ZXJuIHBlciB1bm8gbyBwacO5IG51bWVyaVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIChkYXRlZm9ybWF0PUVFRUUsIGQgTU1NTSB5LCBIOm1tOnNzKVxyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhpdGVtKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgIGxldCBteW1hdGNoID0gbWF0Y2hbMV07XHJcbiAgICAgICAgICBpZihteW1hdGNoLmluY2x1ZGVzKFwiZGF0ZWZvcm1hdFwiKSl7XHJcbiAgICAgICAgICAgIGxldCBmb3JtYXQgPSBteW1hdGNoLnNwbGl0KFwiPVwiKVsxXTtcclxuICAgICAgICAgICAgbGV0IHRva2VuID0gaXRlbS5zcGxpdChcIihcIilbMF07XHJcbiAgICAgICAgICAgIG91dCArPSByZWNvcmQuQWRkaXRpb25hbEluZm8gIT0gbnVsbCAmJiByZWNvcmQuQWRkaXRpb25hbEluZm9bdG9rZW5dICE9IG51bGwgPyBcIiBcIiArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJlY29yZC5BZGRpdGlvbmFsSW5mb1t0b2tlbl0sIGZvcm1hdCkgOiByZWNvcmRbdG9rZW5dID8gXCIgXCIgKyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZWNvcmRbdG9rZW5dLCBmb3JtYXQpIDogIFwiIFwiICsgdG9rZW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG91dCArPSByZWNvcmQuQWRkaXRpb25hbEluZm8gIT0gbnVsbCAmJiByZWNvcmQuQWRkaXRpb25hbEluZm9baXRlbV0gIT0gbnVsbCA/IFwiIFwiICsgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW2l0ZW1dIDogcmVjb3JkW2l0ZW1dID8gXCIgXCIgKyByZWNvcmRbaXRlbV0gOiAgXCIgXCIgKyBpdGVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xyXG4gICAgcmV0dXJuIG91dDtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tEcmFnSW5kaWNhdG9yKGVsOiBhbnkpe1xyXG4gICAgdGhpcy5jbGlja0RyYWdJbmRpY2F0b3IuZW1pdChlbCk7XHJcbn1cclxuXHJcbiAgb25EcmFnU3RhcnRlZChlbDogYW55KXtcclxuICAgICAgdGhpcy5kcmFnU3RhcnRlZC5lbWl0KGVsKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ1JlbGVhc2VkKCl7XHJcbiAgICAgIHRoaXMuZHJhZ1JlbGVhc2VkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG9uRXh0ZXJuYWxDb21wb25lbnRPdXQoZXY6IGV2ZW50T3V0KXtcclxuICAgIHRoaXMub3V0LmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbiAgb25GaXJlVHJpZ2dlcihldjogRmlyZVRyaWdnZXIpe1xyXG4gICAgdGhpcy5maXJlVHJpZ2dlci5lbWl0KGV2KTtcclxuICB9IFxyXG5cclxufVxyXG5cclxuIiwiPG1hdC1jYXJkIGNsYXNzPVwibGlzdC12aWV3LWZvcm0tcmVjb3JkXCI+XHJcbiAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cInNob3dUaXRsZSB8fCBkZWZhdWx0TGlzdEFjdGlvbnMuYWRkXCIgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxtYXQtY2FyZC10aXRsZSAqbmdJZj1cInNob3dUaXRsZSAmJiBsb2FkZWRmb3JtXCI+TW9kdWxvIHt7IGZvcm0uTmFtZSB9fSA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPG1hdC1jYXJkLWFjdGlvbnMgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuYWRkIHx8IGRlZmF1bHRMaXN0QWN0aW9ucy5ncmFwaHNcIj5cclxuXHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKm5nSWY9XCJpc0xpc3RWaWV3XCJcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWJlbGxhcigpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnRhYmxlPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+VGFiZWxsYXJlPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKm5nSWY9XCJpc1RhYmVsbGFyXCJcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5MaXN0VmlldygpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmxpc3Q8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5MaXN0YTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+ICAgICAgXHJcblxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkFsbCgpXCJcclxuICAgICAgICAqbmdJZj1cImlzTGlzdFZpZXdcIj5cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhaXNGdWxsT3BlbmVkXCI+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIiAqbmdJZj1cIiFpc0Z1bGxPcGVuZWRcIj5BcHJpIHR1dHRvPC9zcGFuPlxyXG5cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpc0Z1bGxPcGVuZWQgJiYgaXNMaXN0Vmlld1wiPmV4cGFuZF9sZXNzPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCIgKm5nSWY9XCJpc0Z1bGxPcGVuZWRcIj5DaGl1ZGkgdHV0dG88L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPiAgICAgIFxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmdyYXBoc1wiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuR3JhcGhzKClcIj5cclxuICAgICAgICA8bWF0LWljb24+cGllX2NoYXJ0PC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+R3JhZmljaTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuYWRkXCJcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuQWRkUG9wdXAoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+ICAgICAgXHJcbiAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcblxyXG4gIFxyXG4gIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJpc1RhYmVsbGFyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgY2xhc3M9XCJkYXRlXCIgW3BsYWNlaG9sZGVyXT1cIidQZXJpb2RvIGluaXppbydcIiBbbGFiZWxdPVwiJ1BlcmlvZG8gaW5pemlvJ1wiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwibWlucGVyaW9kXCJcclxuICAgICAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGVzLkRBVEVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgY2xhc3M9XCJkYXRlXCIgW3BsYWNlaG9sZGVyXT1cIidQZXJpb2RvIGZpbmUnXCIgW2xhYmVsXT1cIidQZXJpb2RvIGZpbmUnXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJtYXhwZXJpb2RcIlxyXG4gICAgICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZXMuREFURVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0REL01NL1lZWVknXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDwvZGl2PiAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zIG10LTJcIj5cclxuICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJ0YWJlbGxhckZpZWxkc1wiIFsobmdNb2RlbElucHV0KV09XCJzZWxlY3RlZFRhYmVsbGFyRmllbGRzXCIgW3BsYWNlaG9sZGVyXT1cIidTZWxlemlvbmUgZGVpIGNhbXBpJ1wiXHJcbiAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidEZXNjcmlwdGlvbidcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidEZXNjcmlwdGlvbidcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCIgY2xhc3M9XCJlcXAtZm9ybS1maWVsZFwiPlxyXG4gICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+ICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTMgbXQtMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZFRhYmVsbGFyRmllbGRzID09IG51bGwgfHwgc2VsZWN0ZWRUYWJlbGxhckZpZWxkcy5sZW5ndGggPT0gMFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1ncmFwaC1nZW5lcmF0ZSBidXR0b24tbmV4dCBtZS0yXCJcclxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImdlbmVyYXRlVGFiZWxsYXIoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgR2VuZXJhXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGVxcC10YWJsZSBpZD1cInRhYmVsbGFyXCIgY2xhc3M9XCJsaXN0LWZvcm0tcmVjb3JkLXRhYmxlXCIgI3RhYmxlUmVjb3JkcyAqbmdJZj1cInRhYmVsbGFyQ29uZGl0aW9uTG9hZGVkXCJcclxuICAgICAgW2RhdGFdPVwidGFiZWxsYXJWYWx1ZXNcIiBbY29sdW1uc109XCJ0YWJlbGxhckNvbHVtbnNcIj48L2VxcC10YWJsZT5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG4gICAgPG1hdC1hY2NvcmRpb24gICNkb25lTGlzdD1cImNka0Ryb3BMaXN0XCIgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiW3RvZG9MaXN0XVwiIFtoaWRlVG9nZ2xlXT1cInRlc3RcIiBbbXVsdGldPVwidHJ1ZVwiIGNsYXNzPVwiZGYtbGlzdC12aWV3LWFjY29yZGlvblwiICpuZ0lmPVwiaXNMaXN0Vmlld1wiPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgcGFuZWxzOyBpbmRleCBhcyBpXCIgXHJcbiAgICAgICAgW2V4cGFuZGVkXT1cInBhbmVsLmlzT3BlblwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIjFcIiBcclxuICAgICAgICBbY2xhc3NdPVwicGFuZWwuaGlnaGxpZ2h0ZWQgPyAnZG1fcGFuZWxfaGlnaGxpZ2h0ZWQnIDogJzAnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBcclxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFuZWwocGFuZWwsIHBhbmVsLnJlY29yZClcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCJjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwib25DbGlja0RyYWdJbmRpY2F0b3IoW3BhbmVsLnJlY29yZCxmb3JtXSlcIiBjbGFzcz1cImNsaWNrLWljb25cIiAqbmdJZj1cImNvbmZpZ3VyYXRpb25zLmlzRHJhZ2dhYmxlTGlzdFZpZXdcIj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+IHt7ICFzaG93VGl0bGUgPyBmb3JtLk5hbWUgOiBcIlwiIH19IHYue3sgcGFuZWwucmVjb3JkLlZlcnNpb24gfX0gLSB7eyBwcmludEFkZGl0aW9uYWxJbmZvKHBhbmVsLnJlY29yZCkgfX1cclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cIiFjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+XHJcbiAgICAgICAgICAgIHt7ICFzaG93VGl0bGUgPyBmb3JtLk5hbWUgOiBcIlwiIH19IHYue3sgcGFuZWwucmVjb3JkLlZlcnNpb24gfX0gLSB7eyBwcmludEFkZGl0aW9uYWxJbmZvKHBhbmVsLnJlY29yZCkgfX1cclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPiAgICAgICAgICBcclxuICAgICAgICAgIDwhLS0jcmVnaW9uIEJPVFRPTkkgUEVSIExFIEFaSU9OSSAtLT5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zXCIgXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgIGlkPVwicC17e3BhbmVsLnJlY29yZC5JRH19LXt7YnV0dG9uLmljb259fVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWNvcmQtaWNvbiB7e2J1dHRvbi5leHRyYUNsYXNzfX1cIiBcclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJidXR0b24udGV4dFwiXHJcbiAgICAgICAgICAgICAgW2hpZGRlbl09XCJidXR0b24uaWNvbiA9PSAnZmlsZV9jb3B5JyAmJiAocGFuZWxzLmxlbmd0aCA9PSAwIHx8IHBhbmVsLnJlY29yZC5WZXJzaW9uICE9IHBhbmVsc1swXS5yZWNvcmQuVmVyc2lvbilcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJidXR0b24uZm4ocGFuZWwsaSwkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnt7YnV0dG9uLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZXh0ZXJuYWxCdXR0b25zXCIgXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicmVjb3JkLWljb24ge3tidXR0b24uZXh0cmFDbGFzc319XCJcclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJidXR0b24udGV4dFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4dGVybmFsQ2FsbGJhY2soJGV2ZW50LGJ1dHRvbi5mbixwYW5lbC5yZWNvcmQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnt7YnV0dG9uLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV4YW1wbGUtc3BhY2VyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgPCEtLSNlbmRyZWdpb24gQk9UVE9OSSBQRVIgTEUgQVpJT05JIC0tPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblxyXG4gICAgICAgIDwhLS0gI3JlZ2lvbiBDT05URU5VVE8gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhbmVsLnBhZ2VTdGF0ZSAhPSBudWxsXCI+XHJcblxyXG4gICAgICAgICAgPGxpYi1zaW5nbGUtcmVjb3JkXHJcbiAgICAgICAgICAgIFtvbmx5Vmlld109XCJvbmx5Vmlld1wiXHJcbiAgICAgICAgICAgIFtyZWNvcmRdID0gXCJwYW5lbC5yZWNvcmRcIiBcclxuICAgICAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl0gPSBcImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgICBbdXNlcklEXT1cInVzZXJJRFwiXHJcbiAgICAgICAgICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgIFtvdXRDb21waWxlQ29uZmlndXJhdGlvbnNdPVwib3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zXCJcclxuICAgICAgICAgICAgW3BhZ2VTdGF0ZV09XCJwYW5lbC5wYWdlU3RhdGVcIlxyXG4gICAgICAgICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChzYXZlUmVjb3JkRXZlbnQpPVwic2F2ZU9yRXhpdEZvcm0oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGZpcmVUcmlnZ2VyKT1cIm9uRmlyZVRyaWdnZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+XHJcblxyXG4gICAgICAgICAgPC9saWItc2luZ2xlLXJlY29yZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tI2VuZHJlZ2lvbiBDT05URU5VVE8gLS0+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgIDwvbWF0LWFjY29yZGlvbj5cclxuXHJcblxyXG4gIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8bWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuPCEtLSNyZWdpb24gRElBTE9HIEFHR0lVTlRBIFJJU1BPU1RBIC0tPlxyXG48bmctdGVtcGxhdGUgI29wZW5BZGREaWFsb2c+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiY2FyZC1kZWZhdWx0IG92ZXJsYXktY2FyZCBjYXJkLWlubW9kYWwtdHJ1ZVwiPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICA8YWRkLWZvcm0tcmVjb3JkXHJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb21waWxlXCJcclxuICAgICAgICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgICAgICAgW29yZ2FJRF09XCJvcmdhSURcIlxyXG4gICAgICAgIFtvbmx5Vmlld109XCJmYWxzZVwiXHJcbiAgICAgICAgW3JlY29yZF09XCJzZWxlY3RlZFJlY29yZFwiXHJcbiAgICAgICAgW2lzRHVwbGljYXRlXT1cImlzRHVwbGljYXRpbmdcIlxyXG4gICAgICAgIFxyXG4gICAgICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgICAgICAgW2NvbmZpZ3VyYXRpb25zXT1cImNvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcblxyXG4gICAgICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICAgICAgICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uQWRkU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZGRBZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZpcmVUcmlnZ2VyKT1cIm9uRmlyZVRyaWdnZXIoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9hZGQtZm9ybS1yZWNvcmQ+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIERJQUxPRyBBR0dJVU5UQSBSSVNQT1NUQSAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIERJQUxPRyBWSVNVQUxJWlpBWklPTkUgR1JBRklDSSAtLT5cclxuPG5nLXRlbXBsYXRlICNvcGVuR3JhcGhEaWFsb2c+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiY2FyZC1kZWZhdWx0IG92ZXJsYXktY2FyZCBjYXJkLWlubW9kYWwtdHJ1ZSBncmFwaENhcmRcIj5cclxuICAgIFxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxtYXQtY2FyZC10aXRsZT5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBlcXAtZHluYW1pYy1tb2R1bGUtdGl0bGUgZ3JhcGgtaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8c3Bhbj5HcmFmaWNvIHt7IGZvcm0uTmFtZSB9fSA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDxtYXQtY2FyZC1hY3Rpb25zPlxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwiY2xvc2VHcmFwaHMoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5cclxuICAgICAgICAgIGFycm93X2JhY2tcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+SW5kaWV0cm88L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICA8Z3JhcGhzXHJcbiAgICAgICAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuICAgICAgICBbY29uZmlndXJhdGlvbnNdID0gXCJvdXRDb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dID0gXCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICA+XHJcbiAgICAgIDwvZ3JhcGhzPlxyXG5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBESUFMT0cgVklTVUFMSVpaQVpJT05FIEdSQUZJQ0kgLS0+XHJcbiJdfQ==
@@ -6398,10 +6398,35 @@ class ListViewFormRecordComponent {
6398
6398
  });
6399
6399
  //console.log("TABELLAR VALUES", this.form, this.tabellarColumns, this.tabellarFields, this.tabellarValues);
6400
6400
  this.tabellarConditionLoaded = true;
6401
- var heightValue = this.tabellarColumns.length * 60;
6401
+ if (this.tabellarValues.length == 0) {
6402
+ this.tabellarColumns = [];
6403
+ }
6402
6404
  setTimeout(() => {
6403
- document.querySelectorAll("#tabellar table")[0].setAttribute("height", heightValue + "px");
6404
- }, 100);
6405
+ // Non serve cercare i MAX, li setta CSS in automatico con la regola max-content
6406
+ document.querySelectorAll("#tabellar table tbody tr:first-child td").forEach((el, index) => {
6407
+ document.querySelectorAll("#tabellar table tbody tr:first-child td")[index].style.height = el.clientHeight + "px";
6408
+ if (el.clientHeight > 68) {
6409
+ document.querySelectorAll("#tabellar table thead tr:first-child th")[index].style.height = (el.clientHeight + 1) + "px";
6410
+ document.querySelectorAll("#tabellar table thead tr:first-child th")[index].style.minHeight = (el.clientHeight + 1) + "px";
6411
+ }
6412
+ else {
6413
+ document.querySelectorAll("#tabellar table tbody tr:first-child td")[index].style.height = "68px";
6414
+ document.querySelectorAll("#tabellar table tbody tr:first-child td")[index].style.minHeight = "68px";
6415
+ document.querySelectorAll("#tabellar table thead tr:first-child th")[index].style.height = "68px";
6416
+ document.querySelectorAll("#tabellar table thead tr:first-child th")[index].style.minHeight = "68px";
6417
+ }
6418
+ document.querySelectorAll("#tabellar table tbody tr:nth-child(n+2) td:nth-child(" + (index + 1) + ")").forEach((el2) => {
6419
+ el2.style.height = el.clientHeight + "px";
6420
+ if (el.clientHeight > 68) {
6421
+ el2.style.height = el.clientHeight + "px";
6422
+ }
6423
+ else {
6424
+ el2.style.height = "68px";
6425
+ el2.style.minHeight = "68px";
6426
+ }
6427
+ });
6428
+ });
6429
+ }, 300);
6405
6430
  }, 100);
6406
6431
  }
6407
6432
  configureListviewButtons() {