@eqproject/eqp-dynamic-module 2.4.34 → 2.4.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +8 -2
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +16 -13
- package/esm2020/lib/models/baseField.model.mjs +3 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +23 -12
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +23 -12
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/models/baseField.model.d.ts +1 -0
- package/package.json +1 -1
|
@@ -581,6 +581,9 @@ export class EqpDynamicModuleConfiguratorComponent {
|
|
|
581
581
|
// Per far arrivare al server l'array di Field bisogna passarli su Any
|
|
582
582
|
this.form.ObjectFields = [];
|
|
583
583
|
this.form.Fields.forEach((field) => {
|
|
584
|
+
// Trasformo il datagetter in Base64
|
|
585
|
+
field.DataGetterValueBase64String = btoa(JSON.stringify(field.DataGetter));
|
|
586
|
+
field.DataGetter = null;
|
|
584
587
|
if (field.FieldType == FieldTypeEnum.Allegato) {
|
|
585
588
|
const fldA = field;
|
|
586
589
|
fldA.MetadataObjectFields = fldA.MetadataFields;
|
|
@@ -637,6 +640,9 @@ export class EqpDynamicModuleConfiguratorComponent {
|
|
|
637
640
|
this.form = form;
|
|
638
641
|
if (typeof this.form.Fields != "undefined") {
|
|
639
642
|
this.form.Fields.forEach((field) => {
|
|
643
|
+
// Trasformo il Base64String del Datagetter nel Datagetter vero e proprio
|
|
644
|
+
field.DataGetter = JSON.parse(atob(field.DataGetterValueBase64String));
|
|
645
|
+
field.DataGetterValueBase64String = null;
|
|
640
646
|
field.DataGetter.DataGetterType = field.DataGetter.DataGetterType == null ? DataGetterTypeEnum.Manuale : field.DataGetter.DataGetterType;
|
|
641
647
|
});
|
|
642
648
|
}
|
|
@@ -702,7 +708,7 @@ export class EqpDynamicModuleConfiguratorComponent {
|
|
|
702
708
|
styles: { flex: "0 0 12rem" },
|
|
703
709
|
},
|
|
704
710
|
{
|
|
705
|
-
key: "DataGetterType",
|
|
711
|
+
key: "DataGetter.DataGetterType",
|
|
706
712
|
display: "Tipo Recupero Dati",
|
|
707
713
|
type: TypeColumn.Enum,
|
|
708
714
|
enumModel: DataGetterTypeEnum,
|
|
@@ -1024,4 +1030,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
1024
1030
|
}], out: [{
|
|
1025
1031
|
type: Output
|
|
1026
1032
|
}] } });
|
|
1027
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQ7QUFDakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLFVBQVUsR0FDWCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQW9CLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLGNBQWMsRUFDZCxJQUFJLEVBRUosa0JBQWtCLEVBQ2xCLFlBQVksR0FDYixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVB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SSxFQUFFO2dCQUUxQywwQkFBMEI7c0JBRHpCLFNBQVM7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVN6RCxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVE5QyxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU1wRCxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU96QyxhQUFhO3NCQUF0QixNQUFNO2dCQUtHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHRyxHQUFHO3NCQUFaLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyBUaHJvd1N0bXQgfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtcclxuICBDZWxsQWxpZ25tZW50RW51bSxcclxuICBDb25maWdDb2x1bW4sXHJcbiAgRXFwVGFibGVDb21wb25lbnQsXHJcbiAgVHlwZUNvbHVtbixcclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgQ29sU3BhblNpemVzRW51bSwgRGF0YUdldHRlclR5cGVFbnVtLCBGaWVsZEludmlzaWJpbGl0eUVudW0sIEZpZWxkVHlwZUVudW0gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9jb250ZXh0Lm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgQWN0aW9uT25SZWNvcmQsXHJcbiAgRm9ybSxcclxuICBGb3JtRmllbGRHcm91cCxcclxuICBGb3JtU2NhbGFyVHlwZUVudW0sXHJcbiAgRm9ybVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBcnJheVZhbGlkYXRvcnMgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvY3VzdG9tLWZvcm0tdmFsaWRhdG9ycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJlcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBcclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcgPVxyXG4gICAgbmV3IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcoKTtcclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZyA9IG51bGw7XHJcbiAgQElucHV0KCkgUHJvamVjdE5hbWU6IHN0cmluZztcclxuICBASW5wdXQoKSB2aWV3TW9kZTogc3RyaW5nID0gXCJhZGRPckVkaXRcIjsgLy8gRXhwb3J0XHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG5cclxuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBUb2tlbiBkYSB1c2FyZSBuZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gc29sbyBzZSB2aWVuZSBwb3BvbGF0YSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiLlxyXG4gICAqL1xyXG4gIHVzZXJUb2tlbjogc3RyaW5nID0gbnVsbDtcclxuICAvKipcclxuICAgKiBDb25maWd1cmF6aW9uZSBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSBkYXRpLlxyXG4gICAqIFB1w7IgZXNzZXJlIGRlZmluaXRhIGRhbGwndXRlbnRlIG9wcHVyZSBsYXNjaWF0YSBudWxsLCB2aWVuZSBwb3BvbGF0YSBjb24gZGVpXHJcbiAgICogdmFsb3JpIGRpIGRlZmF1bHQgc2UgdmllbmUgdmFsb3JpenphdGEgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIiBhbHRyaW1lbnRpXHJcbiAgICogdmllbmUgbGFzY2lhdGEgbnVsbCBlIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGFsIHNlcnZlci5cclxuICAgKi9cclxuICBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbiA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogVXJsIGRlbCBzZXJ2ZXIgZGEgY2hpYW1hcmUgcGVyIHJlY3VlcmFyZSwgc2FsdmFyZSBvIGVsaW1pbmFyZSBpIHJlY29yZC5cclxuICAgKiBVc2F0byBwZXIgY3JlYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRpIGRlZmF1bHQgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUuXHJcbiAgICovXHJcbiAgYmFzZVNlcnZlclVybDogc3RyaW5nID0gbnVsbDtcclxuICBjb250ZXh0OiBDb250ZXh0ID0gbmV3IENvbnRleHQoKTtcclxuXHJcbiAgLyogZXhwb3J0IHZhcmlhYmxlcyAqL1xyXG4gIGRvd25sb2FkTmFtZTogc3RyaW5nO1xyXG4gIGRvd25sb2FkSnNvbkhyZWY6IGFueTtcclxuICBzdHJpbmdpZmllZEZvcm06IHN0cmluZztcclxuXHJcbiAgLyogaW1wb3J0IHZhcmlhYmxlcyAqL1xyXG4gIGltcG9ydGVkTW9kdWxlOiBzdHJpbmcgPSBudWxsOyAvLyBqc29uIG9iamVjdFxyXG4gIGRpYWxvZ0ltcG9ydFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dJbXBvcnRcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nSW1wb3J0OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBmb3JtOiBGb3JtID0gbmV3IEZvcm0oKTtcclxuICBiYWNrdXBGb3JtOiBGb3JtID0gbnVsbDtcclxuICBzYXZlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9yZ2FJRDogc3RyaW5nID0gbnVsbDtcclxuICBVc2VySUQ6IG51bWJlciA9IDM2O1xyXG4gIGlubmVyRm9ybU1hbmFnbWVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlubmVyRm9ybVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICAvKiBDT05GSUdVUkFaSU9ORSBQRVIgVklTVUFMSVpaQVpJT05FIEZPUk0gQ1JFQVRBICovXHJcbiAgdmlld0NvbmZpZzogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICB0cnVlLFxyXG4gICAgZmFsc2UsXHJcbiAgICBmYWxzZSxcclxuICAgIFwiMFwiXHJcbiAgKTtcclxuXHJcbiAgZm9ybUZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCA9IG51bGw7XHJcbiAgZm9ybUNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gIHByZXZpZXdGb3JtOiBGb3JtO1xyXG4gIGZvcm1GaWVsZEdyb3VwTmFtZTogc3RyaW5nO1xyXG5cclxuICBhY3Rpb25BdXRvY29tcGxldGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XHJcblxyXG4gIC8vI3JlZ2lvbiBFbnVtZXJhdG9yaSB1c2F0aSBuZWxsJ2h0bWxcclxuICBGb3JtVHlwZUVudW0gPSBGb3JtVHlwZUVudW07XHJcbiAgRm9ybVNjYWxhclR5cGVFbnVtID0gRm9ybVNjYWxhclR5cGVFbnVtO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXppb25lL21vZGlmaWNhIGNhbXBvXHJcbiAgZmllbGRzQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICBAVmlld0NoaWxkKFwiZmllbGRzVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIGZpZWxkc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZEZpZWxkOiBCYXNlRmllbGQgfCBhbnk7XHJcbiAgaW5kZXhTZWxlY3RlZEZpZWxkOiBudW1iZXI7XHJcbiAgYWN0aW9uT25SZWNvcmRGb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgZGlhbG9nRmllbGRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nRmllbGRcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nRmllbGQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhcmUvbW9kaWZpY2FyZSB1bmEgRm9ybSBkaSBkZXR0YWdsaW9cclxuICBzZWxlY3RlZElubmVyRm9ybTogRm9ybTtcclxuICBpbmRleFNlbGVjdGVkSW5uZXJGb3JtOiBudW1iZXI7XHJcbiAgZGlhbG9nSW5uZXJGb3JtUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0lubmVyRm9ybVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRpYWxvZ0lubmVyRm9ybTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBpbm5lckZvcm1Db25maWc6IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWc7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhcmUvbW9kaWZpY2FyZSB1bmEgYWN0aW9uIHN1aSByZWNvcmQgZGkgdW5hIEZvcm1cclxuICBhY3Rpb25zT25SZWNvcmRDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJhY3Rpb25zT25SZWNvcmRUYWJsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBhY3Rpb25zT25SZWNvcmRUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRBY3Rpb246IEFjdGlvbk9uUmVjb3JkO1xyXG4gIGluZGV4U2VsZWN0ZWRBY3Rpb246IG51bWJlcjtcclxuICBkaWFsb2dBY3Rpb25PblJlY29yZFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dBY3Rpb25PblJlY29yZFwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRpYWxvZ0FjdGlvbk9uUmVjb3JkOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZW1lc3NvIHF1YW5kbyBzaSBzYWx2YSB1bmEgZm9ybSBlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2F2ZUZvcm1FdmVudDogRXZlbnRFbWl0dGVyPEZvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZW1lc3NvIERPUE8gYXZlciBlc2VndWl0byB1bmEgY2hpYW1hdGEgYWwgc2VydmVyIHBlciBpbCBzYWx2YXRhZ2dpb2RpIHVuYSBmb3JtIGFsbCdlbmRwb2ludCBzcGVjaWZpY2F0by5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlRm9ybUV2ZW50OiBFdmVudEVtaXR0ZXI8Rm9ybT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm0+KCk7XHJcblxyXG4gIC8vIE91dCBjb21wb25lbnRlIGVzdGVybm9cclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdNb2RlID0gdGhpcy5kZWJ1Z01vZGU7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uSW5pdCAtIGNvbmZpZ3VyYXRpb25zJywgdGhpcy5jb25maWd1cmF0aW9ucyk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uSW5pdCAtIGZvcm1JRCcsIHRoaXMuZm9ybUlEKTtcclxuXHJcbiAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmJhc2VTZXJ2ZXJVcmw7XHJcbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmNvbnRleHQ7XHJcbiAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gICAgLy8gdGhpcy5mb3JtSUQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmZvcm1JRDtcclxuICAgIHRoaXMudXNlclRva2VuID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy51c2VyVG9rZW47XHJcblxyXG4gICAgdGhpcy5mb3JtID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybTtcclxuICAgIHRoaXMub3JnYUlEID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcub3JnYUlEO1xyXG4gICAgdGhpcy5Vc2VySUQgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5Vc2VySUQ7XHJcbiAgICB0aGlzLmlubmVyRm9ybU1hbmFnbWVudCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybU1hbmFnbWVudDtcclxuICAgIHRoaXMuaW5uZXJGb3JtUmVmID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtUmVmO1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpO1xyXG4gICAgdGhpcy5nZXRGb3JtQnlJRCgpO1xyXG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xyXG4gICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5TZXRDb250ZXh0KHRoaXMuY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICogU2UgbGEgcHJvcHJpZXTDoCBiYXNlU2VydmVyVXJsIMOoIG51bGwgZSBub24gc29ubyBzdGF0aSBjb25maWd1cmF0aSBpIHZhcmkgZW5kcG9pbnQgYWxsb3JhXHJcbiAgICogbm9uIHZpZW5lIGVzZWd1aXRhIG5lc3N1bmEgY2hpYW1hdGEgaHR0cCBwZXIgcmVjdXBlcmFyZS9zYWx2YXJlIGkgZGF0aS5cclxuICAgKi9cclxuICBjb25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJiB0aGlzLmJhc2VTZXJ2ZXJVcmwpIHtcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPVxyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuQ29uZmlndXJlRGVmYXVsdEVuZFBvaW50cyhcclxuICAgICAgICAgIHRoaXMuYmFzZVNlcnZlclVybCxcclxuICAgICAgICAgIHRoaXMudXNlclRva2VuXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKHRoaXMuZm9ybUlEKSB7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LlBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzdHJpbmdTYW5pdGl6ZXIodmFsdWUpIHtcclxuICAgIGlmICghVXRpbGl0eUhlbHBlclNlcnZpY2Uuc3RyaW5nQ2hlY2tQYXJlbnRlc2lzKHZhbHVlKSkge1xyXG4gICAgICBhbGVydChcImVycm9yZSEgZXJhbm8gcHJlc2VudGkgZGVsbGUgcGFyZW50ZXNpLlwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxuICBzZXROYW1lKE5hbWU6IHN0cmluZykge1xyXG4gICAgaWYoIXRoaXMuc3RyaW5nU2FuaXRpemVyKE5hbWUpKXtcclxuICAgICAgY29uc3QgUmVnRXhwUGFyZXRlc2lzID0gL1tcXChcXClcXFtcXF1cXHtcXH1dL2c7XHJcbiAgICAgIC8vIFJpbXVvdmkgdHV0dGUgbGUgcGFyZW50ZXNpIG5vbiBiaWxhbmNpYXRlXHJcbiAgICAgIHRoaXMuZm9ybS5OYW1lID0gTmFtZS5yZXBsYWNlKFJlZ0V4cFBhcmV0ZXNpcywgJycpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5mb3JtLklEID09IG51bGwpeyAvLyB0aGlzLmZvcm0uQ29kZSA9PSBudWxsIHx8IHRoaXMuZm9ybS5Db2RlID09IHVuZGVmaW5lZCB8fCB0aGlzLmZvcm0uQ29kZSA9PSBcIlwiICl7XHJcbiAgICAgIHRoaXMuc2V0Q29kZSh0aGlzLmZvcm0uTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldENvZGUoQ29kZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0cmluZ1Nhbml0aXplcihDb2RlKTtcclxuICAgIFxyXG4gICAgY29uc3QgUmVnRXhwUGxhaW4gPSAvW15cXHddL2c7XHJcbiAgICB0aGlzLmZvcm0uQ29kZSA9IENvZGUudG9VcHBlckNhc2UoKS5yZXBsYWNlKFJlZ0V4cFBsYWluLCBcIlwiKTtcclxuICB9XHJcbiAgb21pdF9zcGVjaWFsX2NoYXIoZXZlbnQpIHtcclxuICAgIHZhciBrO1xyXG4gICAgayA9IGV2ZW50LmtleUNvZGU7IC8vICAgICAgICAgayA9IGV2ZW50LmtleUNvZGU7ICAoQm90aCBjYW4gYmUgdXNlZClcclxuICAgIGlmIChrID09IDM0KSB7XHJcbiAgICAgIGV2ZW50LmtleUNvZGUgPSAwO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBJTVBPUlQgRlVOQ1RJT04gKi9cclxuICBvbkltcG9ydChldmVudCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICBmaWxlUmVhZGVyLnJlYWRBc1RleHQoc2VsZWN0ZWRGaWxlLCBcIlVURi04XCIpO1xyXG4gICAgZmlsZVJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvbkltcG9ydCAtIGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCknLCBmaWxlUmVhZGVyLnJlc3VsdC50b1N0cmluZygpKTtcclxuICAgICAgdGhpcy5pbXBvcnRlZE1vZHVsZSA9IGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pbXBvcnRlZE1vZHVsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpcm0oXCJzdGFpIHBlciBzb3ZyYXNjcml2ZXJlIGlsIG1vZHVsb1wiKSkge1xyXG4gICAgICAgICAgLy8gY2hpYW1vIGlsIHBhcnNlIGNvc8OsIGRhIG5vbiBjcmVhcmUgdW4gcmVmZXJlbmNlQmluZGluZ1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKEpTT04ucGFyc2UodGhpcy5pbXBvcnRlZE1vZHVsZSkpO1xyXG4gICAgICAgICAgdGhpcy5jbG9zZUltcG9ydCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbGVydChcInNlbGV6aW9uYSB1biBmaWxlXCIpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgZmlsZVJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiB7XHJcbiAgICAgIGFsZXJ0KFwic2VsZXppb25hIHVuIGZpbGUgdmFsaWRvIG8gY29udHJvbGxhIGNoZSBub24gc2lhIGNvcnJvdHRvXCIpO1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBpbXBvcnRNb2R1bGUoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0ltcG9ydFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbXBvcnQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgLy8gd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIC8vIG1heEhlaWdodDogXCI4MCVcIixcclxuICAgICAgLy8gaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUltcG9ydCgpIHtcclxuICAgIHRoaXMuZGlhbG9nSW1wb3J0UmVmLmNsb3NlKCk7XHJcbiAgfVxyXG4gIC8qIEVORCBJTVBPUlQgRlVOQ1RJT04gKi9cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqL1xyXG4gIGdldEZvcm1CeUlEKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm1JRCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3JtcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgLyogZ2V0dGluZyByZWFkeSBmb3IgZXhwb3J0ICovXHJcbiAgICAgICAgICBsZXQgY2xvbmUgPSBuZXcgRm9ybSgpO1xyXG4gICAgICAgICAgY2xvbmUuQ29kZSA9IFwiSU1QT1JUX1wiICsgcmVzLkNvZGU7XHJcbiAgICAgICAgICBjbG9uZS5OYW1lID0gXCJpbXBvcnRfXCIgKyByZXMuTmFtZTtcclxuICAgICAgICAgIGNsb25lLkRlc2NyaXB0aW9uID0gcmVzLkRlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgY2xvbmUuRm9ybVNjYWxhclR5cGUgPSByZXMuRm9ybVNjYWxhclR5cGU7XHJcbiAgICAgICAgICBjbG9uZS5Gb3JtRmllbGRzR3JvdXBzID0gcmVzLkZvcm1GaWVsZHNHcm91cHM7XHJcbiAgICAgICAgICBjbG9uZS5BY3Rpb25zT25SZWNvcmQgPSByZXMuQWN0aW9uc09uUmVjb3JkO1xyXG4gICAgICAgICAgY2xvbmUuRmllbGRzID0gcmVzLkZpZWxkcztcclxuICAgICAgICAgIGNsb25lLk9iamVjdEZpZWxkcyA9IHJlcy5PYmplY3RGaWVsZHM7XHJcbiAgICAgICAgICBjbG9uZS5Jbm5lckZvcm1zID0gcmVzLklubmVyRm9ybXM7XHJcbiAgICAgICAgICBjbG9uZS5Sb290RW50aXR5SUQgPSByZXMuUm9vdEVudGl0eUlEO1xyXG5cclxuICAgICAgICAgIHRoaXMuZG93bmxvYWROYW1lID0gXCJleHBvcnRfXCIgKyByZXMuTmFtZTtcclxuICAgICAgICAgIHRoaXMuc3RyaW5naWZpZWRGb3JtID0gSlNPTi5zdHJpbmdpZnkoY2xvbmUpO1xyXG4gICAgICAgICAgdGhpcy5kb3dubG9hZEpzb25IcmVmID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChcclxuICAgICAgICAgICAgXCJkYXRhOnRleHQvanNvbjtjaGFyc2V0PVVURi04LFwiICtcclxuICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zdHJpbmdpZmllZEZvcm0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLyogZW5kIGV4cG9ydCAqL1xyXG5cclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShyZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKG5ldyBGb3JtKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdGlwbyBkaSB2aXN1YWxpenphemlvbmUgZGVsbGEgZm9ybS5cclxuICAgKiBTZSBsJ3V0ZW50ZSBzY2VnbGllIHVuYSB2aXN1YWxpenphemlvbmUgcmFnZ3J1cHBhdGEgaWwgbWV0b2RvIGFnZ2l1bmdlIGFsIEZvcm1Hcm91cCB1biBudW92b1xyXG4gICAqIGNvbnRyb2xsbyBwZXIgbCdhcnJheSBkZWkgbm9taSBkZWxsZSBzZXppb25pIGRhIGNyZWFyZS5cclxuICAgKi9cclxuICBvbkNoYW5nZUZvcm1TY2FsYXJUeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm1Gb3JtR3JvdXAuY29udGFpbnMoXCJGb3JtRmllbGRzR3JvdXBzXCIpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJGb3JtRmllbGRzR3JvdXBzXCIpO1xyXG4gICAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJGb3JtRmllbGRzR3JvdXBzXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLCBbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgIEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzID0gbnVsbDtcclxuICAgICAgaWYgKHRoaXMuZm9ybUZvcm1Hcm91cC5jb250YWlucyhcIkZvcm1GaWVsZHNHcm91cHNcIikpXHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJGb3JtRmllbGRzR3JvdXBzXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtRm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGludm9jYXRvIGFsIGtleXVwIG5lbGwnaW5wdXQgcGVyIGluc2VyaXJlIGkgbm9taSBkZWxsZSBzZXppb25pIHBlciBsYSB2aXN1YWxpenphemlvbmVcclxuICAgKiByYWdncnVwcGF0YSBkZWxsYSBmb3JtLiBRdWFudG8gbCd1dGVudGUgcHJlbWUgaWwgdGFzdG8gaW52aW8gdmllbmUgYWdnaXVudG8gaWwgbnVvdm8gbm9tZSBhbGxlXHJcbiAgICogc2V6aW9uaSBkaXNwb2JpbGkgc2Ugbm9uIG5lIGVzaXN0ZSB1bmEgY29uIGxvIHN0ZXNzbyBub21lLlxyXG4gICAqIEBwYXJhbSBldmVudCBFdmVudG8gY2hlIHJhcHByZXNlbnRhIGlsIGtleXVwIHN1bGxhIHRhc3RpZXJhLlxyXG4gICAqL1xyXG4gIG9uRm9ybUZpZWxkR3JvdXBOYW1lS2V5VXAoZXZlbnQpIHtcclxuICAgIGlmIChldmVudC5jb2RlID09PSBcIkVudGVyXCIgfHwgZXZlbnQuY29kZSA9PT0gXCJOdW1wYWRFbnRlclwiKSB7XHJcbiAgICAgIGlmICghdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMpIHtcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3VwcyA9IG5ldyBBcnJheTxGb3JtRmllbGRHcm91cD4oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLmZpbmQoXHJcbiAgICAgICAgICAobikgPT4gbi5OYW1lID09IHRoaXMuZm9ybUZpZWxkR3JvdXBOYW1lXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5wdXNoKHsgTmFtZTogdGhpcy5mb3JtRmllbGRHcm91cE5hbWUgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSW1wb3N0byBpbCBudW92byB2YWxvcmUgZGVsIEZvcm1Db250cm9sIHBlciBhZ2dpb3JuYXJlIGxvIHN0YXRvIGRlbGxhIGZvcm0uXHJcbiAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm1GaWVsZHNHcm91cHNcIl0uc2V0VmFsdWUoXHJcbiAgICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHNcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5mb3JtRmllbGRHcm91cE5hbWUgPSBudWxsO1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpbXVvdmVyZSBsYSBzZXppb25lIHNlbGV6aW9uYXRhIGRhIHF1ZWxsZSBkaXNwb25pYmlsaSBwZXIgbGEgZm9ybS5cclxuICAgKiBAcGFyYW0gZ3JvdXBOYW1lIE5vbWUgZGVsbGEgc2V6aW9uZSBkYSBlbGltaW5hcmUuXHJcbiAgICovXHJcbiAgb25EZWxldGVGb3JtRmllbGRHcm91cE5hbWUoZ3JvdXBOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLnNwbGljZShcclxuICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZmluZEluZGV4KChnKSA9PiBnLk5hbWUgPT09IGdyb3VwTmFtZSksXHJcbiAgICAgIDFcclxuICAgICk7XHJcbiAgICAvLyBJbXBvc3RvIGlsIG51b3ZvIHZhbG9yZSBkZWwgRm9ybUNvbnRyb2wgcGVyIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGVsbGEgZm9ybS5cclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm1GaWVsZHNHcm91cHNcIl0uc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzXHJcbiAgICApO1xyXG4gICAgLy8gU2UgZXNpc3Rvbm8gRmllbGQgbGVnYXRpIGFsbGEgc2V6aW9uZSBjaGUgc2kgdnVvbGUgZWxpbWluYXJlIGFsbG9yYSByb21wbyBpbCBsZWdhbWUuXHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lKSkge1xyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5GaWVsZEdyb3VwID09IGdyb3VwTmFtZSkuZm9yRWFjaChcclxuICAgICAgICAoZikgPT4gKGYuRmllbGRHcm91cCA9IG51bGwpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUgdW4gbnVvdm8gY2FtcG8gbyBzaSB2dW9sZSBtb2RpZmljYXJlIHVubyBlc2lzdGVudGUuXHJcbiAgICogTWVtb3JpenphIGwnZXZlbnR1YWxlIEZpZWxkIHNjZWx0byBvbmUgY3JlYSB1bm8gbnVvdm8gcHJpbWEgZGkgYXByaXJlIGlsIGRpYWxvZyBwZXIgbW9kaWZpY2FybG8vYWdnaXVuZ2VybG8uXHJcbiAgICogQHBhcmFtIGZpZWxkIE9nZ2V0dG8gQmFzZUZpZWxkIGRhIG1vZGlmaWNhcmUuIFNlIG51bGwgbmUgdmllbmUgY3JlYXRhIHVuYSBudW92YSBpc3RhbnphIHBlciBsJ2FnZ2l1bnRhLlxyXG4gICAqL1xyXG4gIG9wZW5GaWVsZERpYWxvZyhmaWVsZDogQmFzZUZpZWxkID0gbnVsbCkge1xyXG4gICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGZpZWxkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmaWVsZCkpO1xyXG4gICAgICBpZih0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID0geyBJbkxpc3RWaWV3OiB0cnVlLCBWaXNpYmxlSWY6IG51bGwsIEZpZWxkc3R5bGVDU1M6IFwiXCIsIExhYmVsc3R5bGVDU1M6IFwiXCIsIENvbFNwYW5TaXplczogW10gfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpYWxvZ0ZpZWxkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0ZpZWxkLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBoZWlnaHQ6IFwiODAlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2FsdmEgaWwgY2FtcG8gYXBwZW5hIGNyZWF0byBvIG1vZGlmaWNhdG8uXHJcbiAgICogUHJpbWEgZGVsIHNhbHZhdGFnZ2lvIGNvbnRyb2xsYSBzZSBlc2lzdGUgdW4gYWx0cm8gY2FtcG8gY29uIGxhIHN0ZXNzYSBsYWJlbCwgaW4gcXVlc3RvXHJcbiAgICogY2FzZSBnZW5lcmUgdW4gZXJyb3JlIChpIGNhbXBpIGRldm9ubyBhdmVyZSBub21pLCBlIHF1aW5kaSBsYWJlbCwgdW5pdm9jaGUgLSBpIG5vbWkgdmVuZ29ub1xyXG4gICAqIHJpY2F2YXRpIHVuZW5kbyBsZSBwYXJvbGUgY2hlIGZvcm1hbm8gbGEgbGFiZWwgdHJhbWl0ZSBcIl9cIikuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIHNhbHZhcmVcclxuICAgKi9cclxuICBvblNhdmVGaWVsZChmaWVsZDogQmFzZUZpZWxkKSB7XHJcbiAgICBpZiAoZmllbGQpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMgJiZcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAoZiwgaSkgPT5cclxuICAgICAgICAgICAgZi5MYWJlbCA9PT0gZmllbGQuTGFiZWwgJiZcclxuICAgICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID09IG51bGxcclxuICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9PSBpKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhcclxuICAgICAgICAgIFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGNhbXBpIGNvbiBsbyBzdGVzc28gQ29kaWNlLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgY2FtcGkgY29uIGxvIHN0ZXNzbyBDb2RpY2UuXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT0gbnVsbCAmJiB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZF0gPSBmaWVsZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5GaWVsZHMpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5GaWVsZHMgPSBuZXcgQXJyYXk8QmFzZUZpZWxkPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25TYXZlRmllbGRcIiwgdGhpcy5mb3JtKVxyXG4gICAgdGhpcy5jbG9zZUZpZWxkRGlhbG9nKCk7XHJcbiAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIGNvbnRyb2xsYSBzZSBsbyBzdGVwIHBlciBsJ2FnZ2l1bnRhIGRlaSBjYW1waSBuZWxsYSBmb3JtIMOoIGNvbmNsdXNvLlxyXG4gICAqIEByZXR1cm5zIFNlIFRSVUUgbG8gc3RlcCB2aWVuZSBjb25zaWRlcmF0byBjb21wbGV0YXRvIGVkIMOoIHBvc3NiaWxlIHBhc3NhcmUgYWwgc3VjY2Vzc2l2by5cclxuICAgKi9cclxuICBpc0ZpZWxkU3RlcENvbXBsZXRlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5mb3JtLkZpZWxkcykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UgJiZcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiAhZi5GaWVsZEdyb3VwKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlbGxlIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIFNlIGlsIHBhcmFtZXRybyBwYXNzYXRvIMOoIG51bGwgc29ubyBpbiBhZ2dpdW50YSBhbHRyaW1lbnRpIHNvbm8gaW4gbW9kaWZpY2EuXHJcbiAgICogQHBhcmFtIGlubmVuckZvcm0gRm9ybSBkaSBkZXR0YWdsaW8gZGEgbW9kaWZpY2FyZSAoc2UgbnVsbCBhbGxvcmEgdmFkbyBpbiBhZGQpLlxyXG4gICAqL1xyXG4gIG9wZW5Jbm5lckZvcm1EaWFsb2coaW5uZW5yRm9ybTogRm9ybSA9IG51bGwpIHtcclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcoKTtcclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1NYW5hZ21lbnQgPVxyXG4gICAgICB0cnVlO1xyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm1cclxuICAgIC8vIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtLk9sZE5hbWVcclxuICAgIC8vIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1SZWZcclxuICAgIC8vIFtmb3JtXT1cInNlbGVjdGVkSW5uZXJGb3JtXCJcclxuICAgIC8vIFtpbm5lckZvcm1NYW5hZ21lbnRdPVwidHJ1ZVwiXHJcbiAgICAvLyBbaW5uZXJGb3JtUmVmXT1cImRpYWxvZ0lubmVyRm9ybVJlZlwiXHJcblxyXG4gICAgaWYgKGlubmVuckZvcm0pIHtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID0gdGhpcy5mb3JtLklubmVyRm9ybXMuaW5kZXhPZihpbm5lbnJGb3JtKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlubmVuckZvcm0pKTtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybS5PbGROYW1lID0gaW5uZW5yRm9ybS5OYW1lO1xyXG4gICAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybSA9XHJcbiAgICAgICAgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbm5lbnJGb3JtKSk7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtLk9sZE5hbWUgPVxyXG4gICAgICAgIGlubmVuckZvcm0uTmFtZTtcclxuXHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGYpID0+IGYuTGFiZWwgPT09IGlubmVuckZvcm0uTmFtZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtID1cclxuICAgICAgICBuZXcgRm9ybSgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPSBudWxsO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmRpYWxvZ0lubmVyRm9ybVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbm5lckZvcm0sIHtcclxuXHJcbiAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtUmVmID1cclxuICAgICAgdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybSwge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICB3aWR0aDogXCI4NSVcIixcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gc2NhdGVuYXRvIGFsIHNhbHZhdGFnZ2lvIGRpIHVuYSBmb3JtIGRpIGRldHRhZ2xpby5cclxuICAgKiBAcGFyYW0gZXZlbnQgRm9ybSBjcmVhdGEvbW9kaWZpY2F0YSBkYWxsJ3V0ZW50ZS4gU2Ugw6ggbnVsbCBhbGxvcmEgbCd1dGVudGUgaGEgYWJiYW5kb25hdG8gbGEgY29uZmlndXJhemlvbmUuXHJcbiAgICovXHJcbiAgb25TYXZlT3JFeGl0SW5uZXJGb3JtKGV2ZW50OiBGb3JtKSB7XHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mb3JtLk5hbWUgPT09IGV2ZW50Lk5hbWUgfHxcclxuICAgICAgICAodGhpcy5mb3JtLklubmVyRm9ybXMgJiZcclxuICAgICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoXHJcbiAgICAgICAgICAgIChhLCBpKSA9PlxyXG4gICAgICAgICAgICAgIGEuTmFtZSA9PT0gZXZlbnQuTmFtZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSAhPT0gaSlcclxuICAgICAgICAgICkpIHx8XHJcbiAgICAgICAgKHRoaXMuZm9ybS5GaWVsZHMgJiZcclxuICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9PSBudWxsICYmXHJcbiAgICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAgIChmLCBpKSA9PlxyXG4gICAgICAgICAgICAgIGYuTGFiZWwgPT09IGV2ZW50Lk5hbWUgJiZcclxuICAgICAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9PSBpKVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhcclxuICAgICAgICAgIFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGZvcm0gZGkgZGV0dGFnbGlvIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgZm9ybSBkaSBkZXR0YWdsaW8gY29uIGxvIHN0ZXNzbyBub21lLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaW5uZXJGb3JtRmllbGQ6IEJhc2VGaWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuTmFtZSA9IGV2ZW50Lk5hbWUuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5MYWJlbCA9IGV2ZW50Lk5hbWU7XHJcbiAgICAgIGlubmVyRm9ybUZpZWxkLkZpZWxkVHlwZSA9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuRmllbGRHcm91cCA9XHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT0gbnVsbFxyXG4gICAgICAgICAgPyB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXS5GaWVsZEdyb3VwXHJcbiAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtICE9IG51bGwgJiZcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPj0gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtc1t0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm1dID0gZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZF0gPSBpbm5lckZvcm1GaWVsZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5Jbm5lckZvcm1zKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3JtcyA9IG5ldyBBcnJheTxGb3JtPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5wdXNoKGV2ZW50KTtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLnB1c2goaW5uZXJGb3JtRmllbGQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlbGxlIGFjdGlvbi5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gcGFzc2F0byDDqCBudWxsIHNvbm8gaW4gYWdnaXVudGEgYWx0cmltZW50aSBzb25vIGluIG1vZGlmaWNhLlxyXG4gICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uT25SZWNvcmQgZGEgbW9kaWZpY2FyZSAoc2UgbnVsbCBhbGxvcmEgdmFkbyBpbiBhZGQpLlxyXG4gICAqL1xyXG4gIG9wZW5BY3Rpb25PblJlY29yZERpYWxvZyhhY3Rpb246IEFjdGlvbk9uUmVjb3JkID0gbnVsbCkge1xyXG4gICAgaWYgKGFjdGlvbikge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb24gPSB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYWN0aW9uKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uID0gbmV3IEFjdGlvbk9uUmVjb3JkKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNyZWF0ZUFjdGlvbk9uUmVjb3JkRm9ybSgpO1xyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIGRlbCBjYW1wbyBGb3JtdWxhLlxyXG4gICAqIFZpZW5lIHNjYXRlbmF0byBhbCBmb2N1cyAoaW4gcXVlc3RvIGNhc28gdmllbmUgcGFzc2F0byBpbCBwYXJhbWV0cm8gYSBudWxsIHBlciBkaWZmZXJlbnppYXJsb1xyXG4gICAqIGRhbGwnZXZlbnRvIGRpIGNsaWNrIHN1bGxhIHRhc3RpZXJhKSBlIGFsIGtleXVwIHN1bGwnaW5wdXQgKGlsIHBhcmFtZXRybyDDqCBkaXZlcnNvIGRhIG51bGwpLlxyXG4gICAqIEBwYXJhbSBrZXlib2FyZEV2ZW50IEV2ZW50byBzY2F0ZW5hdG8gYWwga2V5dXAgc3VsbGEgdGFzdGllcmEuIFNlIG51bGwgYWxsb3JhIGlsIG1ldG9kbyDDqCBzdGF0byBpbnZvY2F0byBkYWwgZm9jdXMgc3VsbCdpbnB1dC5cclxuICAgKiBAc3VtbWFyeSBBZ2dpb3JuYSBsJ2VsZW5jbyBkZWkgc3VnZ2VyaW1lbnRpIHBlciBsJ2F1dG9jb21wbGV0ZSBzZSBsJ3V0ZW50ZSBlc2VndWUgaWwgZm9jdXMgc3VsbCdpbnB1dFxyXG4gICAqIG9wcHVyZSBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYSBkaSB1biB0YXN0byBkaXZlcnNvIGRhbGxlIGZyZWNjZS5cclxuICAgKi9cclxuICBzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIENyZW8gbCdhcnJheSBwZXIgbCdhdXRvY29tcGxldGUgc29sbyBzZSBzdG8gZmFjZW5kbyBpbCBmb2N1cyBzdWxsJ2lucHV0IG8gc2Ugc3RvIHByZW1lbmRvIHVuIHRhc3RvXHJcbiAgICAvLyBzdWxsYSB0YXN0aWVyYSBkaXZlcnNvIGRhbGxlIGZyZWNjZSAoaW4gcXVlc3QndWx0aW1vIGNhc28sIHNlIG5vbiB2aWVuZSBlc2VndWl0byBpbCBmaWx0cm8gc3VsbCdldmVudG8sXHJcbiAgICAvLyBub24gc2kgcHXDsiBzZWxlemlvbmFyZSB1biBzdWdnZXJpbWVudG8gZGVsbCdhdXRvY29tcGxldGUgcGVyY2jDqCBhbCBjbGljayB2ZXJyZWJiZSByaWNhcmljYXRvIGwnYXJyYXkgZVxyXG4gICAgLy8gc2kgcHJlZGVyZWJiZSBsYSBzZWxlemlvbmUgYXBwZW5hIGZhdHRhKS5cclxuICAgIGlmICgha2V5Ym9hcmRFdmVudCB8fCAha2V5Ym9hcmRFdmVudC5jb2RlLmluY2x1ZGVzKFwiQXJyb3dcIikpIHtcclxuICAgICAgdGhpcy5hY3Rpb25BdXRvY29tcGxldGVPcHRpb25zID1cclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGwnYXppb25lIGNyZWF0YS9tb2RpZmljYXRlLlxyXG4gICAqL1xyXG4gIHNhdmVBY3Rpb25PblJlY29yZCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCAmJlxyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmZpbmQoXHJcbiAgICAgICAgKGEsIGkpID0+XHJcbiAgICAgICAgICBhLk5hbWUgPT09IHRoaXMuc2VsZWN0ZWRBY3Rpb24uTmFtZSAmJlxyXG4gICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9PSBudWxsXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPT0gaSlcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcoXHJcbiAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICApO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPSBudWxsICYmIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmRbdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uXSA9IHRoaXMuc2VsZWN0ZWRBY3Rpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkID0gbmV3IEFycmF5PEFjdGlvbk9uUmVjb3JkPigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQucHVzaCh0aGlzLnNlbGVjdGVkQWN0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpO1xyXG4gICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY2hpdWRlcmUgaWwgZGlhbG9nIGRlbGxhIGlubmVyIGZvcm0uXHJcbiAgICovXHJcbiAgY2xvc2VEaWFsb2dJbm5lckZvcm0oKSB7XHJcbiAgICB0aGlzLmlubmVyRm9ybVJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjaGl1ZGVyZSBpbCBkaWFsb2cgZGkgZ2VzdGlvbmUgZGVsbGUgYWN0aW9uLlxyXG4gICAqL1xyXG4gIGNsb3NlRGlhbG9nQWN0aW9uT25SZWNvcmQoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNlZ25hcmUgY29tZSBjb25jbHVzYSBsYSBjcmVhemlvbmUgZGVsbGEgZm9ybSBlIHBlciBjcmVhcm5lIHVuYSBjb3BpYVxyXG4gICAqIGRhIHZpc2FsaXp6YXJlIGNvbWUgYW50ZXByaW1hLlxyXG4gICAqIEBwYXJhbSBjb21wbGV0ZWQgU2UgVFJVRSBzZWduYSBsYSBmb3JtIGNvbWUgY29uY2x1c2EgZSBuZSBjcmVhIHVuYSBjb3BpYSBkYSB2aXN1YWxpenphcmVcclxuICAgKi9cclxuICBzZXRGb3JtU3RhdHVzKGNvbXBsZXRlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKGNvbXBsZXRlZCkge1xyXG4gICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnByZXZpZXdGb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0pKTtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInByZXZpZXdGb3JtXCIsIHRoaXMucHJldmlld0Zvcm0pXHJcblxyXG4gICAgICAvLyBQZXIgdmlzdWFsaXp6YXJlIGNvcnJldHRhbWVudGUgbCdvYW50ZXByaW1hIGRlbGxhIGZvcm0gYXBwZW5hIGNyZWF0YVxyXG4gICAgICAvLyBiaXNvZ25hIHZhbG9yaXp6YXJlIGxhIHByb3ByaWV0w6AgTmFtZSBkZWkgY2FtcGkgZGVsbGEgZm9ybSBlIGRlbGxlIElubmVyRm9ybXMuXHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuTmFtZSA9IGZpZWxkLkxhYmVsLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMgJiZcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgICAgZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgZmllbGQuTmFtZSA9IGZpZWxkLkxhYmVsLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgbGEgZm9ybSBjcmVhdGEgYWxsYSBmaW5lIGRlbCB3aXphcmQuXHJcbiAgICogU2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kUG9pbnQgcGVyIGlsIHNhbHZhdGFnZ2lvIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciBwYXNzYW5kbyBsJ29nZ2V0byBkYSBzYWx2YXJlXHJcbiAgICogbmVsIGJvZHkgZGVsbGEgY2hpYW1hdGEsIGFsdHJpbWVudGkgc2NhdGVuYSBsJ2V2ZW50byBcInNhdmVGb3JtRXZlbnRcIi5cclxuICAgKi9cclxuICBzYXZlRm9ybSgpIHtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuU2F2ZUVuZFBvaW50XHJcbiAgICApIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5zYXZlZCl7XHJcbiAgICAgICAgdGhpcy5iYWNrdXBGb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0pKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYmFja3VwRm9ybSkpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG5cclxuICAgICAgLy8gUGVyIGZhciBhcnJpdmFyZSBhbCBzZXJ2ZXIgbCdhcnJheSBkaSBGaWVsZCBiaXNvZ25hIHBhc3NhcmxpIHN1IEFueVxyXG4gICAgICB0aGlzLmZvcm0uT2JqZWN0RmllbGRzID0gW107XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW0uQWxsZWdhdG8pIHtcclxuICAgICAgICAgIGNvbnN0IGZsZEE6IGFueSA9IGZpZWxkO1xyXG4gICAgICAgICAgZmxkQS5NZXRhZGF0YU9iamVjdEZpZWxkcyA9IGZsZEEuTWV0YWRhdGFGaWVsZHM7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhRmllbGRzID0gW107XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT2JqZWN0RmllbGRzLnB1c2goZmxkQSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1heFZhbHVlID09IG51bGxcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1heFZhbHVlID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWluVmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWluVmFsdWUgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT2JqZWN0RmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZm9ybS5Qcm9qZWN0TmFtZSA9IHRoaXMuUHJvamVjdE5hbWU7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMgPSBudWxsO1xyXG4gICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uQ3JlYXRpb25EYXRlID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQ3JlYXRpb25EYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0aGlzLmZvcm0uQ3JlYXRpb25Vc2VyID0gdGhpcy5Vc2VySUQ7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtLk1vZGlmeVVzZXIgPSB0aGlzLlVzZXJJRDtcclxuICAgICAgLy8gY2hpYW1hdGEgZWZmZXR0aXZhXHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIkZvcm1cIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybSxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuXHJcbiAgICAgIHRoaXMuc2F2ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuU2F2ZUVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcyhcIkZvcm0gc2FsdmF0YSBjb24gc3VjY2Vzc28hXCIpO1xyXG4gICAgICAgICAgdGhpcy5hZnRlclNhdmVGb3JtRXZlbnQuZW1pdCh0aGlzLmZvcm0pO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZUZvcm1FdmVudC5lbWl0KHRoaXMuZm9ybSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gRlVOWklPTkkgUFJJVkFURVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGltcG9zdGFyZSBsYSBmb3JtIGUgY29uZmlndXJhcmUgY29sb25uZS9Gb3JtR291cnAuXHJcbiAgICogQHBhcmFtIGZvcm0gRm9ybSBkYSB1dGlsaXp6YXJlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Rm9ybUFuZENvbmZpZ3VyZShmb3JtOiBGb3JtID0gbnVsbCkge1xyXG4gICAgaWYgKGZvcm0gIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmZvcm0gPSBmb3JtO1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuZm9ybS5GaWVsZHMgIT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9IGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gbnVsbCA/IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlIDogZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Gb3JtKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmEgbGUgY29sb25uZSBwZXIgbGUgdGFiZWxsZSBuZWNlc3NhcmllIGFsbGEgY3JlYXppb25lIGRlbGxhIGZvcm06XHJcbiAgICogIC0gcGVyIGxhIHZpc3VhbGl6emF6aW9uZSBkZWkgY2FtcGkgaW5zZXJpdGlcclxuICAgKiAgLSBwZXIgbGUgZm9ybSBkaSBkZXR0YWdsaW8gY3JlYXRlXHJcbiAgICogIC0gcGVyIGxlIGF6aW9uaSBjb25maWd1cmF0ZSBzdWkgcmVjb3JkIGRlbGxhIGZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmZpZWxkc0NvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDRyZW1cIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmVkaXRGaWVsZChlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRHVwbGljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZHVwbGljYXRlRmllbGQoZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmRlbGV0ZUVsZW1lbnQoZWxlbWVudCwgXCJGaWVsZHNcIiksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlNwb3N0YSBzdVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X3Vwd2FyZFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCB0cnVlLCBcIkZpZWxkc1wiKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PiB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZWxlbWVudCkgPT09IDAsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlNwb3N0YSBnacO5XCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYXJyb3dfZG93bndhcmRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgZmFsc2UsIFwiRmllbGRzXCIpLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGVsZW1lbnQpID49IHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoIC0gMSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJGaWVsZFR5cGVcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlRpcG9sb2dpYVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRW51bSxcclxuICAgICAgICBlbnVtTW9kZWw6IEZpZWxkVHlwZUVudW0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEycmVtXCIgfSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiTGFiZWxcIiwgZGlzcGxheTogXCJMYWJlbFwiLCBzdHlsZXM6IHsgZmxleDogXCIwIDAgOHJlbVwiIH0gfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJEZXNjcmlwdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiRGVzY3JpemlvbmVcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkRhdGFHZXR0ZXJUeXBlXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJUaXBvIFJlY3VwZXJvIERhdGlcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkVudW0sXHJcbiAgICAgICAgZW51bU1vZGVsOiBEYXRhR2V0dGVyVHlwZUVudW0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEycmVtXCIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJSZXF1aXJlZFwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiT2JibGlnYXRvcmlvXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LlJlcXVpcmVkLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA1cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkZvcm11bGFcIixcclxuICAgICAgICBkaXNwbGF5OiBcIkNhbGNvbGF0b1wiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5Gb3JtdWxhICE9IG51bGwgJiYgZWxlbWVudC5Gb3JtdWxhICE9ICcnLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA1cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkluTGlzdFZpZXdcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlZpc2liaWxlIGluIENvbXBpbGF6aW9uZVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5Jbkxpc3RWaWV3LFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA3cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkludmlzaWJpbGl0eVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiT2NjdXBhIHNwYXppbz9cIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuSW5MaXN0VmlldyB8fCBlbGVtZW50LkludmlzaWJpbGl0eSA9PSBGaWVsZEludmlzaWJpbGl0eUVudW1bXCJOQVNDT1NUTyBDT04gQVJFQSBWSVNJQklMRVwiXSxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgN3JlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJWaXNpYmxlSWZcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlZpc2liaWxpdMOgIGNvbmRpemlvbmF0YVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5WaXNpYmxlSWYgIT0gbnVsbCAmJiBlbGVtZW50LlZpc2libGVJZiAhPSBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA3cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkFuc3dlclN0eWxlLkluTGlzdFZpZXdcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlZpc2liaWxlIG5lbGxhIHJpc3Bvc3RhXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiAhZWxlbWVudC5BbnN3ZXJTdHlsZSB8fCBlbGVtZW50LkFuc3dlclN0eWxlICYmIGVsZW1lbnQuQW5zd2VyU3R5bGUuSW5MaXN0VmlldyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNXJlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgJiZcclxuICAgICAgdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZmllbGRzQ29sdW1ucy5zcGxpY2UoMSwgMCwge1xyXG4gICAgICAgIGtleTogXCJGaWVsZEdyb3VwXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJTZXppb25lXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGUsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDE0cmVtXCIgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIHRoaXMuZmllbGRzQ29sdW1ucy5wdXNoKFxyXG4gICAgICAvLyAgIHtcclxuICAgICAgLy8gICAgIGtleTogXCJGaWVsZEdyb3VwXCIsXHJcbiAgICAgIC8vICAgICBkaXNwbGF5OiBcIlNlemlvbmVcIixcclxuICAgICAgLy8gICAgIHR5cGU6IFR5cGVDb2x1bW4uRXh0ZXJuYWxUZW1wbGF0ZSxcclxuICAgICAgLy8gICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGUsXHJcbiAgICAgIC8vICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTRyZW1cIiB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aW9uc09uUmVjb3JkQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLm9wZW5BY3Rpb25PblJlY29yZERpYWxvZyhlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVFbGVtZW50KGVsZW1lbnQsIFwiQWN0aW9uc09uUmVjb3JkXCIpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgc3VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvd191cHdhcmRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgdHJ1ZSwgXCJBY3Rpb25zT25SZWNvcmRcIiksXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoZWxlbWVudCkgPT09IDAsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlNwb3N0YSBnacO5XCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYXJyb3dfZG93bndhcmRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgZmFsc2UsIFwiQWN0aW9uc09uUmVjb3JkXCIpLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGVsZW1lbnQpID49XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5sZW5ndGggLSAxLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICB7IGtleTogXCJJY29uXCIsIGRpc3BsYXk6IFwiSWNvbmFcIiwgc3R5bGVzOiB7IGZsZXg6IFwiIDAgMCAxNSVcIiB9IH0sXHJcbiAgICAgIHsga2V5OiBcIk5hbWVcIiwgZGlzcGxheTogXCJOb21lXCIsIHN0eWxlczogeyBmbGV4OiBcIiAwIDAgMjAlXCIgfSB9LFxyXG4gICAgICB7IGtleTogXCJBY3Rpb25cIiwgZGlzcGxheTogXCJBemlvbmVcIiB9LFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWEgaWwgRm9ybUdyb3VwIHBlciBsJ29nZ2V0dG8gRm9ybVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUZvcm0oKSB7XHJcbiAgICB0aGlzLmZvcm1Gb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgQ29kZTogW3RoaXMuZm9ybS5Db2RlXSxcclxuICAgICAgTmFtZTogW3RoaXMuZm9ybS5OYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgRGVzY3JpcHRpb246IFt0aGlzLmZvcm0uRGVzY3JpcHRpb25dLFxyXG4gICAgICBGb3JtU2NhbGFyVHlwZTogW3RoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMub25DaGFuZ2VGb3JtU2NhbGFyVHlwZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSBpbCBGb3JtR3JvdXAgZXByIGwnYWdnaXVudGEgbyBsYSBtb2RpZmljYSBkaSB1bmEgYWN0aW9uIHN1aSByZWNvcmQgZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUFjdGlvbk9uUmVjb3JkRm9ybSgpIHtcclxuICAgIHRoaXMuYWN0aW9uT25SZWNvcmRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgTmFtZTogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uTmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIEljb246IFt0aGlzLnNlbGVjdGVkQWN0aW9uLkljb24sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBBY3Rpb246IFt0aGlzLnNlbGVjdGVkQWN0aW9uLkFjdGlvbiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoaXVkZSBpbCBkaWFsb2cgcGVyIGFnZ2l1bmdlcmUvbW9kaWZpY2FyZSB1biBGaWVsZCBzZW56YSBzYWx2YXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjbG9zZUZpZWxkRGlhbG9nKCkge1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nRmllbGRSZWYgIT0gdW5kZWZpbmVkKSB0aGlzLmRpYWxvZ0ZpZWxkUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgbCdhcGVydHVyYSBkZWwgZGlhbG9nIHBlciBsYSBtb2RpZmljYSBkaSB1biBGaWVsZC5cclxuICAgKiBTZSBpbCBmaWVsZCDDqCBkaSB0aXBvIFwiRm9ybSBkaSBkZXR0YWdsaW9cIiBhcHJlIGlsIGRpYWxvZyBwZXIgbGEgbW9kaWZpY2EgZGkgdW5hXHJcbiAgICogSW5uZXJGb3JtIGFsdHJpbWVudGkgYXByZSBxdWVsbG8gcGVyIGxhIG1vZGlmaWNhIGRpIHVuIEZpZWxkLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBDYW1wbyBkYSBtb2RpZmljYXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlZGl0RmllbGQoZmllbGQ6IEJhc2VGaWVsZCkge1xyXG4gICAgaWYgKGZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pIHtcclxuICAgICAgdGhpcy5vcGVuRmllbGREaWFsb2coZmllbGQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcGVuSW5uZXJGb3JtRGlhbG9nKFxyXG4gICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoKGYpID0+IGYuTmFtZSA9PSBmaWVsZC5MYWJlbClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBsYSBkdXBsaWNhemlvbmUgZGkgdW4gRmllbGQuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIG1vZGlmaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGR1cGxpY2F0ZUZpZWxkKGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgIT0gRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdKSB7XHJcbiAgICAgIC8vIHJpY3JlbyBsJ29nZ2V0dG8gcGFzc2FuZG8gcGVyIHVuIGpzb25cclxuICAgICAgbGV0IGNsb25lRmllbGQ6IEJhc2VGaWVsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcclxuXHJcbiAgICAgIGNsb25lRmllbGQuTGFiZWwgPSBmaWVsZFtcIkxhYmVsXCJdICsgXCJDb3B5XCI7XHJcbiAgICAgIGNsb25lRmllbGQuT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggKyAxO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICAgIHRoaXMub25TYXZlRmllbGQoY2xvbmVGaWVsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhbGVydChcIm5vbiDDqCBwb3NzaWJpbGUgZHVwbGljYXJlIHVuYSBmb3JtIGRpIGRldHRhZ2xpb1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmltdW92ZXJlIHVuIEZpZWxkIGFsbCdpbnRlcm5vIGRpIHVuYSBGb3JtLlxyXG4gICAqIFJpY2hpZWRlIGNvbmZlcm1hIGFsbCd1dGVudGUgcHJpbWEgZGkgcmltdW92ZXJsby5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIGRhIHJpbXVvdmVyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGVsZXRlRWxlbWVudChcclxuICAgIGVsZW1lbnQ6IEJhc2VGaWVsZCB8IEFjdGlvbk9uUmVjb3JkIHwgRm9ybSxcclxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Db25maXJtKFxyXG4gICAgICBcIkVsaW1pbmFyZSBsJ2VsZW1lbnRvIHNlbGV6aW9uYXRvP1wiLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKFxyXG4gICAgICAgICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uaW5kZXhPZihlbGVtZW50KSxcclxuICAgICAgICAgIDFcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiRmllbGRzXCIpIHtcclxuICAgICAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJBY3Rpb25zT25SZWNvcmRcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBcIlJpY2hpZXN0YSBjb25mZXJtYVwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzcG9zdGFyZSB1biBjYW1wbyBhbGwnaW50ZXJubyBkZWxsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBPZ2dldHRvIGRpIHRpcG8gQmFzZUZpZWxkIGRhIHNwb3N0YXJlLlxyXG4gICAqIEBwYXJhbSBtb3ZlVXAgU2UgVFJVRSBhbGxvcmEgc3Bvc3RhIHZlcnNvIGwnYWx0byBpbCBjYW1wbyAoYWJiYXNzYSBsJ2luZGljZSkgYWx0cmltZW50aSBpbCBjb250cmFyaW8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtb3ZlRWxlbWVudChcclxuICAgIGVsZW1lbnQ6IEJhc2VGaWVsZCB8IEFjdGlvbk9uUmVjb3JkLFxyXG4gICAgbW92ZVVwOiBib29sZWFuLFxyXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIGNvbnN0IHN0YXJ0aW5nSW5kZXggPSB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKGVsZW1lbnQpO1xyXG4gICAgY29uc3QgZW5kaW5nSW5kZXggPSBzdGFydGluZ0luZGV4ICsgKG1vdmVVcCA/IC0xIDogMSk7XHJcblxyXG4gICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKHN0YXJ0aW5nSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKGVuZGluZ0luZGV4LCAwLCBlbGVtZW50KTtcclxuXHJcbiAgICBpZiAocHJvcGVydHlOYW1lID09PSBcIkZpZWxkc1wiKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiQWN0aW9uc09uUmVjb3JkXCIpIHtcclxuICAgICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlbGxlIHNlemlvbmkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZm9yRWFjaCgoZywgaSkgPT4gKGcuT3JkaW5hbFBvc2l0aW9uID0gaSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBmaWVsZC5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZmllbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgdGFiZWxsYSBkZWkgY2FtcGkgYWdnaXVudGkgaW4gdW5hIGZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEZpZWxkc1RhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGRzVGFibGUpIHtcclxuICAgICAgdGhpcy5maWVsZHNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgbCdvcmRpbmFtZW50byBkZWkgY2FtcGkgYWxsJ2ludGVybm8gZGVsbGEgZm9ybSBpbiBiYXNlIGFsbCdvcmRpbmUgY2hlIGwndXRlbnRlXHJcbiAgICogaGEgZGVmaW5pdG8gbmVsbGEgdGFiZWxsYSBpbiBjdWkgc29ubyBtb3N0cmF0aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0QWN0aW9uT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICBhY3Rpb24uT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGFjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSB0YWJlbGxhIGRlbGxlIGF6aW9uaSBhZ2dpdW50aXZlIHN1aSByZWNvcmQgZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEFjdGlvbnNPblJlY29yZFRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWN0aW9uc09uUmVjb3JkVGFibGUpIHtcclxuICAgICAgdGhpcy5hY3Rpb25zT25SZWNvcmRUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCl7XHJcbiAgICB0aGlzLm91dC5lbWl0KGV2KTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxlcXAtZHluYW1pYy1tb2R1bGUtc3Bpbm5lcj48L2VxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPlxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItaGVhZGVyIHJvdyB0aXRsZSBwLTFcIiAqbmdJZj1cImlubmVyRm9ybU1hbmFnbWVudFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGUtc3RhbmRhcmRcIj5BZ2dpdW50YSBmb3JtIGRpIGRldHRhZ2xpbzwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiB0ZXh0LXJpZ2h0XCI+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJjbG9zZVwiIChjbGljayk9XCJjbG9zZURpYWxvZ0lubmVyRm9ybSgpXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0jcmVnaW9uIEVYUE9SVCBNT0RVTEUgLS0+XHJcbjxkaXYgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItZXhwb3J0ZXJcIiAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSAnRXhwb3J0J1wiIGNsYXNzPVwicC0zXCI+XHJcbiAgPGFcclxuICAgIGNsYXNzPVwiYnRuIGJ0bi1jbGVhclwiXHJcbiAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgIHRpdGxlPVwiRG93bmxvYWQgSlNPTlwiXHJcbiAgICBbaHJlZl09XCJkb3dubG9hZEpzb25IcmVmXCJcclxuICAgIGRvd25sb2FkPVwie3sgZG93bmxvYWROYW1lIH19Lmpzb25cIlxyXG4gICAgPkV4cG9ydDwvYVxyXG4gID5cclxuICA8YnIgLz5cclxuICB7eyBzdHJpbmdpZmllZEZvcm0gfX1cclxuPC9kaXY+XHJcbjwhLS0jZW5kcmVnaW9uIEVYUE9SVCBNT0RVTEUgLS0+XHJcblxyXG48bWF0LWhvcml6b250YWwtc3RlcHBlclxyXG4gICpuZ0lmPVwibG9hZGVyICYmIGZvcm1Gb3JtR3JvdXAgJiYgdmlld01vZGUgPT0gJ2FkZE9yRWRpdCdcIlxyXG4gIGxpbmVhclxyXG4gICNzdGVwcGVyXHJcbiAgW25nQ2xhc3NdPVwieyBvdXRlckZvcm06IHRydWUsICdpbm5lckZvcm1NYW5hZ21lbnQtc3RlcHBlcic6IGlubmVyRm9ybU1hbmFnbWVudCAgfVwiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3Itc3RlcHBlciB7eyAnbGFzdC1lZGl0ZWQtc3RlcC0nICsgc3RlcHBlci5zZWxlY3RlZEluZGV4IH19XCJcclxuPlxyXG4gIDwhLS0jcmVnaW9uIERBVEkgR0VORVJBTEkgREVMTEEgRk9STSAtLT5cclxuICA8bWF0LXN0ZXAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItZ2VuZXJhbC1kYXRhXCIgW3N0ZXBDb250cm9sXT1cImZvcm1Gb3JtR3JvdXBcIj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUZvcm1Hcm91cFwiIChrZXlkb3duLmVudGVyKT1cIihmYWxzZSlcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgRGF0aSBnZW5lcmFsaSBkZWxsYSBmb3JtXHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGZpcnN0Um93XCI+XHJcbiAgICAgICAgPCEtLSBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgIFttYXRUb29sdGlwXT1cIidWYSBpbnNlcml0byBwZXIgZXNzZXJlIHV0aWxpenphdG8gY29tZSByaWZlcmltZW50byBuZWkgdGVtcGxhdGUuIG5vbiBhY2NldHRhIGNhcmF0dGVyaSBzcGVjaWFsaSBuZSBzcGF6aS4nXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgQ29kaWNlIFVuaXZvY28gXHJcbiAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInVmEgaW5zZXJpdG8gcGVyIGVzc2VyZSB1dGlsaXp6YXRvIGNvbWUgcmlmZXJpbWVudG8gbmVpIHRlbXBsYXRlLiBub24gYWNjZXR0YSBjYXJhdHRlcmkgc3BlY2lhbGkgbmUgc3BhemkuJ1wiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiQ29kZVwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtLkNvZGVcIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInNldENvZGUoZm9ybS5Db2RlKVwiXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICByZWFkb25seT1cInRydWVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+PC9kaXY+XHJcbiAgICAgICAgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPk5vbWU8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm5hbWVcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJOYW1lXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm0uTmFtZVwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic2V0TmFtZShmb3JtLk5hbWUpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRpIHZpc3VhbGl6emF6aW9uZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGVxcC1zZWxlY3RcclxuICAgICAgICAgICAgY2xhc3M9XCJuYW1lU2VjdGlvblwiXHJcbiAgICAgICAgICAgIFtlbnVtRGF0YV09XCJGb3JtU2NhbGFyVHlwZUVudW1cIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZVwiXHJcbiAgICAgICAgICAgIFtpc1JlcXVpcmVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZm9ybUZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRm9ybVNjYWxhclR5cGUnXCJcclxuICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNoYW5nZUZvcm1TY2FsYXJUeXBlKClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5EZXNjcml6aW9uZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm0uRGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZm9ybS5OYW1lKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwicm93IGluc2VydGVkXCJcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgZm9ybS5Gb3JtU2NhbGFyVHlwZSAmJlxyXG4gICAgICAgICAgZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPiBOb21lIHNlemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm5hbWVTZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGRHcm91cE5hbWVcIlxyXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgKGtleXVwKT1cIm9uRm9ybUZpZWxkR3JvdXBOYW1lS2V5VXAoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0zXCI+U2V6aW9uaSBpbnNlcml0ZTo8L3NwYW4+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJzZWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBncm91cE5hbWUgb2YgZm9ybS5Gb3JtRmllbGRzR3JvdXBzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWN0aW9uSW5zZXJ0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0xXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlRm9ybUZpZWxkR3JvdXBOYW1lKGdyb3VwTmFtZS5OYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgID5jbG9zZSA8L21hdC1pY29uXHJcbiAgICAgICAgICAgICAgICA+e3sgZ3JvdXBOYW1lLk5hbWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgPCEtLSBJTVBPUlQgLS0+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCIhdGhpcy5mb3JtSURcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWNsZWFyIGJ1dHRvbi1uZXh0IG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiaW1wb3J0TW9kdWxlKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEltcG9ydGFcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8IS0tIEVORCBJTVBPUlQgLS0+XHJcblxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHRcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICBtYXRTdGVwcGVyTmV4dFxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Gb3JtR3JvdXAuaW52YWxpZFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIERBVEkgR0VORVJBTEkgREVMTEEgRk9STSAtLT5cclxuXHJcbiAgPCEtLSNyZWdpb24gQUdHSVVOVEEgREVJIENBTVBJIERFTExBIEZPUk0gLS0+XHJcbiAgPG1hdC1zdGVwIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLWFkZC1maWVsZFwiIFtjb21wbGV0ZWRdPVwiaXNGaWVsZFN0ZXBDb21wbGV0ZWQoKVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj48L2Rpdj5cclxuICAgICAgPG1hdC1sYWJlbD5DYW1waSBkYSBpbnNlcmlyZTwvbWF0LWxhYmVsPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1zdGFydCBhZGRCdXR0b25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtZS0yXCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkRGlhbG9nKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGNhbXBvPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZWQgbWUtMlwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5Jbm5lckZvcm1EaWFsb2coKVwiXHJcbiAgICAgICAgICAqbmdJZj1cIiFpbm5lckZvcm1NYW5hZ21lbnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGZvcm0gZGkgZGV0dGFnbGlvPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxlcXAtdGFibGVcclxuICAgICAgY2xhc3M9XCJ0YWJsZVwiXHJcbiAgICAgICNmaWVsZHNUYWJsZVxyXG4gICAgICBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiXHJcbiAgICAgIFtjb2x1bW5zXT1cImZpZWxkc0NvbHVtbnNcIlxyXG4gICAgICBbZGF0YV09XCJmb3JtLkZpZWxkc1wiXHJcbiAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuIGNhbXBvIGluc2VyaXRvJ1wiXHJcbiAgICAgIFtzZWFyY2hUZXh0XT1cIicnXCJcclxuICAgID5cclxuICAgIDwvZXFwLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0U3RlcHBlck5leHRcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIWlzRmllbGRTdGVwQ29tcGxldGVkKClcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGZvcm1Gb3JtR3JvdXAuaW52YWxpZCB9XCJcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gQUdHSVVOVEEgREVJIENBTVBJIERFTExBIEZPUk0gLS0+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBtYXRTdGVwcGVySWNvbj1cImVkaXRcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgPG1hdC1sYWJlbD57eyBpbmRleCArIDEgfX08L21hdC1sYWJlbD5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8IS0tI3JlZ2lvbiBBR0dJVU5UQSBERUxMRSBPUEVSQVpJT05JIFNVSSBSRUNPUkQgLS0+XHJcbiAgPG1hdC1zdGVwPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj48L2Rpdj5cclxuICAgICAgQXppb25pIGFnZ2l1bnRpdmUgc3VpIHJlY29yZFxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1zdGFydCBhZGRCdXR0b25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5BY3Rpb25PblJlY29yZERpYWxvZygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSBhemlvbmU8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZXFwLXRhYmxlXHJcbiAgICAgIGNsYXNzPVwidGFibGVcIlxyXG4gICAgICAjYWN0aW9uc09uUmVjb3JkVGFibGVcclxuICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICBbY29sdW1uc109XCJhY3Rpb25zT25SZWNvcmRDb2x1bW5zXCJcclxuICAgICAgW2RhdGFdPVwiZm9ybS5BY3Rpb25zT25SZWNvcmRcIlxyXG4gICAgICBbZW1wdHlUYWJsZU1lc3NhZ2VdPVwiJ05lc3N1bmEgYWN0aW9uIGluc2VyaXRhJ1wiXHJcbiAgICAgIFtzZWFyY2hUZXh0XT1cIicnXCJcclxuICAgID5cclxuICAgIDwvZXFwLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbnNOZXh0RGl2XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0U3RlcHBlck5leHRcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyh0cnVlKVwiXHJcbiAgICAgID5cclxuICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtc3RlcD5cclxuICA8IS0tI2VuZHJlZ2lvbiBBR0dJVU5UQSBERUxMRSBPUEVSQVpJT05JIFNVSSBSRUNPUkQgLS0+XHJcblxyXG4gIDwhLS0jcmVnaW9uIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAtLT5cclxuICA8bWF0LXN0ZXAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItcHJldmlld1wiPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoIGZvcm1Gb3JtR3JvdXAudmFsaWQgJiYgZm9ybS5GaWVsZHMgJiYgZm9ybS5GaWVsZHMubGVuZ3RoID4gMCApXCJcclxuICAgICAgPjwvZGl2PlxyXG4gICAgICBBbnRlcHJpbWFcclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGFkZC1mb3JtLXJlY29yZFxyXG4gICAgICAqbmdJZj1cInByZXZpZXdGb3JtICYmIGZvcm1Db21wbGV0ZWRcIlxyXG4gICAgICBbZm9ybV09XCJwcmV2aWV3Rm9ybVwiXHJcbiAgICAgIFtjb25maWd1cmF0aW9uc109XCJ2aWV3Q29uZmlnXCJcclxuICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiXHJcbiAgICAgIFtpbkNvbmZpZ109XCJ0cnVlXCJcclxuICAgICAgPlxyXG4gICAgPC9hZGQtZm9ybS1yZWNvcmQ+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYnV0dG9uLW5leHREaXZcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwibXItMiBidXR0b24tZXhpdFwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBtYXRTdGVwcGVyUHJldmlvdXNcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHRcIlxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAoY2xpY2spPVwic2F2ZUZvcm0oKVwiXHJcbiAgICAgID5cclxuICAgICAgICBTYWx2YSBmb3JtXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtc3RlcD5cclxuICA8IS0tI2VuZHJlZ2lvbiBWSVNVQUxJWlpBWklPTkUgRk9STSBDUkVBVEEgLS0+XHJcblxyXG48L21hdC1ob3Jpem9udGFsLXN0ZXBwZXI+XHJcblxyXG48IS0tIERJQUxPRyBBR0dJVU5UQS9NT0RJRklDQSBDQU1QTyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dGaWVsZD5cclxuICA8ZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtLWZpZWxkXHJcbiAgICBbZmllbGRdPVwic2VsZWN0ZWRGaWVsZFwiXHJcbiAgICBbaW5kZXhGaWVsZF09XCJpbmRleFNlbGVjdGVkRmllbGRcIlxyXG4gICAgKHNhdmVGaWVsZEV2ZW50KT1cIm9uU2F2ZUZpZWxkKCRldmVudClcIlxyXG4gICAgW2F2YWlsYWJsZUZpZWxkc109XCJmb3JtLkZpZWxkc1wiXHJcbiAgICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIlxyXG4gICAgW2Zvcm1GaWVsZHNHcm91cHNdPVwiXHJcbiAgICAgIGZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlXHJcbiAgICAgICAgPyBmb3JtLkZvcm1GaWVsZHNHcm91cHNcclxuICAgICAgICA6IG51bGxcclxuICAgIFwiXHJcblxyXG4gICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9lcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBWSVNVQUxJWlpBUkUgTEEgQ09MT05OQSBERUxMQSBTRVpJT05FIE5FTExBIFRBQkVMTEEgREVJIEZJRUxEUyAtLT5cclxuPG5nLXRlbXBsYXRlICNmaWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZSBsZXQtcm93PVwicm93XCI+XHJcbiAgPGVxcC1zZWxlY3RcclxuICAgIFthcnJheURhdGFdPVwiZm9ybS5Gb3JtRmllbGRzR3JvdXBzXCJcclxuICAgIFsobmdNb2RlbElucHV0KV09XCJyb3cuRmllbGRHcm91cFwiXHJcbiAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInTmFtZSdcIlxyXG4gICAgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInTmFtZSdcIlxyXG4gICAgcGxhY2Vob2xkZXI9XCJTZXppb25lXCJcclxuICAgIFtpc1JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgW2luY2x1ZGVGdWxsT2JqZWN0XT1cImZhbHNlXCJcclxuICA+XHJcbiAgPC9lcXAtc2VsZWN0PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgUEVSIEFHR0lVTkdFUkUvTU9ESUZJQ0FSRSBVTkEgQUNUSU9OIFNVSSBSRUNPUkQgREVMTEEgRk9STSAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dBY3Rpb25PblJlY29yZD5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCB0aGlyZC1tb2RhbFwiXHJcbiAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDcwdmggIWltcG9ydGFudDsgb3ZlcmZsb3cteDogaGlkZGVuOyBvdmVyZmxvdy15OiBhdXRvXCJcclxuICA+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGl0bGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlLXN0YW5kYXJkXCI+XHJcbiAgICAgICAgICB7e1xyXG4gICAgICAgICAgICBpbmRleFNlbGVjdGVkQWN0aW9uICE9IG51bGwgJiYgaW5kZXhTZWxlY3RlZEFjdGlvbiA+PSAwXHJcbiAgICAgICAgICAgICAgPyBcIk1vZGlmaWNhXCJcclxuICAgICAgICAgICAgICA6IFwiQWdnaXVuZ2lcIlxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGF6aW9uZSBzdWwgcmVjb3JkXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPiBOb21lIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJOYW1lXCJcclxuICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFjdGlvbi5OYW1lXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNCBtdC0yXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPiBJY29uYSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiSWNvblwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRBY3Rpb24uSWNvblwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTJcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+QXppb25lIChKYXZhc2NyaXB0KTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8dGV4dGFyZWFcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIFtyb3dzXT1cIjNcIlxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQWN0aW9uLkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhY3Rpb25BdXRvY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgIChrZXl1cCk9XCJzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKG51bGwpXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgbGlnaHRncmF5ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhY3Rpb25BdXRvY29tcGxldGU9XCJtYXRBdXRvY29tcGxldGVcIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhY3Rpb25BdXRvY29tcGxldGVPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtMiBtYi0xXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNGb3JtXCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIG1hdC1yYWlzZWQtYnV0dG9uIGNhbmNlbFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZURpYWxvZ0FjdGlvbk9uUmVjb3JkKClcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgQW5udWxsYVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXItMiBzYXZlXCJcclxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVBY3Rpb25PblJlY29yZCgpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwLmludmFsaWRcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgU2FsdmFcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIENPTkZJR1VSQVJFIExFIEZPUk0gREkgREVUVEFHTElPIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0lubmVyRm9ybT5cclxuICA8IS0tIFtmb3JtXT1cInNlbGVjdGVkSW5uZXJGb3JtXCJcclxuICAgIFtpbm5lckZvcm1NYW5hZ21lbnRdPVwidHJ1ZVwiXHJcbiAgICBbaW5uZXJGb3JtUmVmXT1cImRpYWxvZ0lubmVyRm9ybVJlZlwiIC0tPlxyXG4gIDxlcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yXHJcbiAgICBbUHJvamVjdE5hbWVdPVwiUHJvamVjdE5hbWVcIlxyXG4gICAgW2NvbmZpZ3VyYXRpb25zXT1cImlubmVyRm9ybUNvbmZpZ1wiXHJcbiAgICAoc2F2ZUZvcm1FdmVudCk9XCJvblNhdmVPckV4aXRJbm5lckZvcm0oJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIElNUE9SVCAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dJbXBvcnQ+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiaW1wb3J0RGlhbG9nXCI+XHJcbiAgICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwicC0yIGp1c3RpZnktY29udGVudC1hcm91bmRcIj4gXHJcbiAgICAgIDxtYXQtY2FyZC10aXRsZT5cclxuICAgICAgICBJbXBvcnRcclxuICAgICAgPC9tYXQtY2FyZC10aXRsZT4gICAgICAgIFxyXG4gICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cInAtMlwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBjbGFzcz1cImlucHV0LWZpbGUtYnRuIHBiLTJcIiAoY2hhbmdlKT1cIm9uSW1wb3J0KCRldmVudClcIiAvPlxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPG1hdC1jYXJkLWZvb3RlciBjbGFzcz1cInAtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWNsZWFyIGJ1dHRvbi1iYWNrIG1lLTJcIlxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlSW1wb3J0KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgQW5udWxsYVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
|
1033
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQ7QUFDakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLFVBQVUsR0FDWCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQW9CLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLGNBQWMsRUFDZCxJQUFJLEVBRUosa0JBQWtCLEVBQ2xCLFlBQVksR0FDYixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVB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O2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQThCdUMsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQWdDRSxXQUFXO3NCQUF2RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBS0MsV0FBVztzQkFBdEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUUxQywwQkFBMEI7c0JBRHpCLFNBQVM7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVN6RCxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVE5QyxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU1wRCxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU96QyxhQUFhO3NCQUF0QixNQUFNO2dCQUtHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHRyxHQUFHO3NCQUFaLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyBUaHJvd1N0bXQgfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtcclxuICBDZWxsQWxpZ25tZW50RW51bSxcclxuICBDb25maWdDb2x1bW4sXHJcbiAgRXFwVGFibGVDb21wb25lbnQsXHJcbiAgVHlwZUNvbHVtbixcclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgQ29sU3BhblNpemVzRW51bSwgRGF0YUdldHRlclR5cGVFbnVtLCBGaWVsZEludmlzaWJpbGl0eUVudW0sIEZpZWxkVHlwZUVudW0gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9jb250ZXh0Lm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgQWN0aW9uT25SZWNvcmQsXHJcbiAgRm9ybSxcclxuICBGb3JtRmllbGRHcm91cCxcclxuICBGb3JtU2NhbGFyVHlwZUVudW0sXHJcbiAgRm9ybVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBcnJheVZhbGlkYXRvcnMgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvY3VzdG9tLWZvcm0tdmFsaWRhdG9ycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJlcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBcclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcgPVxyXG4gICAgbmV3IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcoKTtcclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZyA9IG51bGw7XHJcbiAgQElucHV0KCkgUHJvamVjdE5hbWU6IHN0cmluZztcclxuICBASW5wdXQoKSB2aWV3TW9kZTogc3RyaW5nID0gXCJhZGRPckVkaXRcIjsgLy8gRXhwb3J0XHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG5cclxuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBUb2tlbiBkYSB1c2FyZSBuZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gc29sbyBzZSB2aWVuZSBwb3BvbGF0YSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiLlxyXG4gICAqL1xyXG4gIHVzZXJUb2tlbjogc3RyaW5nID0gbnVsbDtcclxuICAvKipcclxuICAgKiBDb25maWd1cmF6aW9uZSBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSBkYXRpLlxyXG4gICAqIFB1w7IgZXNzZXJlIGRlZmluaXRhIGRhbGwndXRlbnRlIG9wcHVyZSBsYXNjaWF0YSBudWxsLCB2aWVuZSBwb3BvbGF0YSBjb24gZGVpXHJcbiAgICogdmFsb3JpIGRpIGRlZmF1bHQgc2UgdmllbmUgdmFsb3JpenphdGEgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIiBhbHRyaW1lbnRpXHJcbiAgICogdmllbmUgbGFzY2lhdGEgbnVsbCBlIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGFsIHNlcnZlci5cclxuICAgKi9cclxuICBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbiA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogVXJsIGRlbCBzZXJ2ZXIgZGEgY2hpYW1hcmUgcGVyIHJlY3VlcmFyZSwgc2FsdmFyZSBvIGVsaW1pbmFyZSBpIHJlY29yZC5cclxuICAgKiBVc2F0byBwZXIgY3JlYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRpIGRlZmF1bHQgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUuXHJcbiAgICovXHJcbiAgYmFzZVNlcnZlclVybDogc3RyaW5nID0gbnVsbDtcclxuICBjb250ZXh0OiBDb250ZXh0ID0gbmV3IENvbnRleHQoKTtcclxuXHJcbiAgLyogZXhwb3J0IHZhcmlhYmxlcyAqL1xyXG4gIGRvd25sb2FkTmFtZTogc3RyaW5nO1xyXG4gIGRvd25sb2FkSnNvbkhyZWY6IGFueTtcclxuICBzdHJpbmdpZmllZEZvcm06IHN0cmluZztcclxuXHJcbiAgLyogaW1wb3J0IHZhcmlhYmxlcyAqL1xyXG4gIGltcG9ydGVkTW9kdWxlOiBzdHJpbmcgPSBudWxsOyAvLyBqc29uIG9iamVjdFxyXG4gIGRpYWxvZ0ltcG9ydFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dJbXBvcnRcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nSW1wb3J0OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBmb3JtOiBGb3JtID0gbmV3IEZvcm0oKTtcclxuICBiYWNrdXBGb3JtOiBGb3JtID0gbnVsbDtcclxuICBzYXZlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9yZ2FJRDogc3RyaW5nID0gbnVsbDtcclxuICBVc2VySUQ6IG51bWJlciA9IDM2O1xyXG4gIGlubmVyRm9ybU1hbmFnbWVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlubmVyRm9ybVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICAvKiBDT05GSUdVUkFaSU9ORSBQRVIgVklTVUFMSVpaQVpJT05FIEZPUk0gQ1JFQVRBICovXHJcbiAgdmlld0NvbmZpZzogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICB0cnVlLFxyXG4gICAgZmFsc2UsXHJcbiAgICBmYWxzZSxcclxuICAgIFwiMFwiXHJcbiAgKTtcclxuXHJcbiAgZm9ybUZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCA9IG51bGw7XHJcbiAgZm9ybUNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gIHByZXZpZXdGb3JtOiBGb3JtO1xyXG4gIGZvcm1GaWVsZEdyb3VwTmFtZTogc3RyaW5nO1xyXG5cclxuICBhY3Rpb25BdXRvY29tcGxldGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XHJcblxyXG4gIC8vI3JlZ2lvbiBFbnVtZXJhdG9yaSB1c2F0aSBuZWxsJ2h0bWxcclxuICBGb3JtVHlwZUVudW0gPSBGb3JtVHlwZUVudW07XHJcbiAgRm9ybVNjYWxhclR5cGVFbnVtID0gRm9ybVNjYWxhclR5cGVFbnVtO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXppb25lL21vZGlmaWNhIGNhbXBvXHJcbiAgZmllbGRzQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICBAVmlld0NoaWxkKFwiZmllbGRzVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIGZpZWxkc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZEZpZWxkOiBCYXNlRmllbGQgfCBhbnk7XHJcbiAgaW5kZXhTZWxlY3RlZEZpZWxkOiBudW1iZXI7XHJcbiAgYWN0aW9uT25SZWNvcmRGb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgZGlhbG9nRmllbGRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nRmllbGRcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nRmllbGQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhcmUvbW9kaWZpY2FyZSB1bmEgRm9ybSBkaSBkZXR0YWdsaW9cclxuICBzZWxlY3RlZElubmVyRm9ybTogRm9ybTtcclxuICBpbmRleFNlbGVjdGVkSW5uZXJGb3JtOiBudW1iZXI7XHJcbiAgZGlhbG9nSW5uZXJGb3JtUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0lubmVyRm9ybVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRpYWxvZ0lubmVyRm9ybTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBpbm5lckZvcm1Db25maWc6IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWc7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBjcmVhcmUvbW9kaWZpY2FyZSB1bmEgYWN0aW9uIHN1aSByZWNvcmQgZGkgdW5hIEZvcm1cclxuICBhY3Rpb25zT25SZWNvcmRDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJhY3Rpb25zT25SZWNvcmRUYWJsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBhY3Rpb25zT25SZWNvcmRUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRBY3Rpb246IEFjdGlvbk9uUmVjb3JkO1xyXG4gIGluZGV4U2VsZWN0ZWRBY3Rpb246IG51bWJlcjtcclxuICBkaWFsb2dBY3Rpb25PblJlY29yZFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dBY3Rpb25PblJlY29yZFwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRpYWxvZ0FjdGlvbk9uUmVjb3JkOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZW1lc3NvIHF1YW5kbyBzaSBzYWx2YSB1bmEgZm9ybSBlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2F2ZUZvcm1FdmVudDogRXZlbnRFbWl0dGVyPEZvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZW1lc3NvIERPUE8gYXZlciBlc2VndWl0byB1bmEgY2hpYW1hdGEgYWwgc2VydmVyIHBlciBpbCBzYWx2YXRhZ2dpb2RpIHVuYSBmb3JtIGFsbCdlbmRwb2ludCBzcGVjaWZpY2F0by5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlRm9ybUV2ZW50OiBFdmVudEVtaXR0ZXI8Rm9ybT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm0+KCk7XHJcblxyXG4gIC8vIE91dCBjb21wb25lbnRlIGVzdGVybm9cclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdNb2RlID0gdGhpcy5kZWJ1Z01vZGU7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uSW5pdCAtIGNvbmZpZ3VyYXRpb25zJywgdGhpcy5jb25maWd1cmF0aW9ucyk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uSW5pdCAtIGZvcm1JRCcsIHRoaXMuZm9ybUlEKTtcclxuXHJcbiAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmJhc2VTZXJ2ZXJVcmw7XHJcbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmNvbnRleHQ7XHJcbiAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gICAgLy8gdGhpcy5mb3JtSUQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmZvcm1JRDtcclxuICAgIHRoaXMudXNlclRva2VuID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy51c2VyVG9rZW47XHJcblxyXG4gICAgdGhpcy5mb3JtID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybTtcclxuICAgIHRoaXMub3JnYUlEID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcub3JnYUlEO1xyXG4gICAgdGhpcy5Vc2VySUQgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5Vc2VySUQ7XHJcbiAgICB0aGlzLmlubmVyRm9ybU1hbmFnbWVudCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybU1hbmFnbWVudDtcclxuICAgIHRoaXMuaW5uZXJGb3JtUmVmID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtUmVmO1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpO1xyXG4gICAgdGhpcy5nZXRGb3JtQnlJRCgpO1xyXG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xyXG4gICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5TZXRDb250ZXh0KHRoaXMuY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICogU2UgbGEgcHJvcHJpZXTDoCBiYXNlU2VydmVyVXJsIMOoIG51bGwgZSBub24gc29ubyBzdGF0aSBjb25maWd1cmF0aSBpIHZhcmkgZW5kcG9pbnQgYWxsb3JhXHJcbiAgICogbm9uIHZpZW5lIGVzZWd1aXRhIG5lc3N1bmEgY2hpYW1hdGEgaHR0cCBwZXIgcmVjdXBlcmFyZS9zYWx2YXJlIGkgZGF0aS5cclxuICAgKi9cclxuICBjb25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJiB0aGlzLmJhc2VTZXJ2ZXJVcmwpIHtcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPVxyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuQ29uZmlndXJlRGVmYXVsdEVuZFBvaW50cyhcclxuICAgICAgICAgIHRoaXMuYmFzZVNlcnZlclVybCxcclxuICAgICAgICAgIHRoaXMudXNlclRva2VuXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKHRoaXMuZm9ybUlEKSB7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LlBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzdHJpbmdTYW5pdGl6ZXIodmFsdWUpIHtcclxuICAgIGlmICghVXRpbGl0eUhlbHBlclNlcnZpY2Uuc3RyaW5nQ2hlY2tQYXJlbnRlc2lzKHZhbHVlKSkge1xyXG4gICAgICBhbGVydChcImVycm9yZSEgZXJhbm8gcHJlc2VudGkgZGVsbGUgcGFyZW50ZXNpLlwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxuICBzZXROYW1lKE5hbWU6IHN0cmluZykge1xyXG4gICAgaWYoIXRoaXMuc3RyaW5nU2FuaXRpemVyKE5hbWUpKXtcclxuICAgICAgY29uc3QgUmVnRXhwUGFyZXRlc2lzID0gL1tcXChcXClcXFtcXF1cXHtcXH1dL2c7XHJcbiAgICAgIC8vIFJpbXVvdmkgdHV0dGUgbGUgcGFyZW50ZXNpIG5vbiBiaWxhbmNpYXRlXHJcbiAgICAgIHRoaXMuZm9ybS5OYW1lID0gTmFtZS5yZXBsYWNlKFJlZ0V4cFBhcmV0ZXNpcywgJycpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5mb3JtLklEID09IG51bGwpeyAvLyB0aGlzLmZvcm0uQ29kZSA9PSBudWxsIHx8IHRoaXMuZm9ybS5Db2RlID09IHVuZGVmaW5lZCB8fCB0aGlzLmZvcm0uQ29kZSA9PSBcIlwiICl7XHJcbiAgICAgIHRoaXMuc2V0Q29kZSh0aGlzLmZvcm0uTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldENvZGUoQ29kZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0cmluZ1Nhbml0aXplcihDb2RlKTtcclxuICAgIFxyXG4gICAgY29uc3QgUmVnRXhwUGxhaW4gPSAvW15cXHddL2c7XHJcbiAgICB0aGlzLmZvcm0uQ29kZSA9IENvZGUudG9VcHBlckNhc2UoKS5yZXBsYWNlKFJlZ0V4cFBsYWluLCBcIlwiKTtcclxuICB9XHJcbiAgb21pdF9zcGVjaWFsX2NoYXIoZXZlbnQpIHtcclxuICAgIHZhciBrO1xyXG4gICAgayA9IGV2ZW50LmtleUNvZGU7IC8vICAgICAgICAgayA9IGV2ZW50LmtleUNvZGU7ICAoQm90aCBjYW4gYmUgdXNlZClcclxuICAgIGlmIChrID09IDM0KSB7XHJcbiAgICAgIGV2ZW50LmtleUNvZGUgPSAwO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBJTVBPUlQgRlVOQ1RJT04gKi9cclxuICBvbkltcG9ydChldmVudCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICBmaWxlUmVhZGVyLnJlYWRBc1RleHQoc2VsZWN0ZWRGaWxlLCBcIlVURi04XCIpO1xyXG4gICAgZmlsZVJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvbkltcG9ydCAtIGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCknLCBmaWxlUmVhZGVyLnJlc3VsdC50b1N0cmluZygpKTtcclxuICAgICAgdGhpcy5pbXBvcnRlZE1vZHVsZSA9IGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pbXBvcnRlZE1vZHVsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpcm0oXCJzdGFpIHBlciBzb3ZyYXNjcml2ZXJlIGlsIG1vZHVsb1wiKSkge1xyXG4gICAgICAgICAgLy8gY2hpYW1vIGlsIHBhcnNlIGNvc8OsIGRhIG5vbiBjcmVhcmUgdW4gcmVmZXJlbmNlQmluZGluZ1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKEpTT04ucGFyc2UodGhpcy5pbXBvcnRlZE1vZHVsZSkpO1xyXG4gICAgICAgICAgdGhpcy5jbG9zZUltcG9ydCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbGVydChcInNlbGV6aW9uYSB1biBmaWxlXCIpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgZmlsZVJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiB7XHJcbiAgICAgIGFsZXJ0KFwic2VsZXppb25hIHVuIGZpbGUgdmFsaWRvIG8gY29udHJvbGxhIGNoZSBub24gc2lhIGNvcnJvdHRvXCIpO1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBpbXBvcnRNb2R1bGUoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0ltcG9ydFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbXBvcnQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgLy8gd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIC8vIG1heEhlaWdodDogXCI4MCVcIixcclxuICAgICAgLy8gaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUltcG9ydCgpIHtcclxuICAgIHRoaXMuZGlhbG9nSW1wb3J0UmVmLmNsb3NlKCk7XHJcbiAgfVxyXG4gIC8qIEVORCBJTVBPUlQgRlVOQ1RJT04gKi9cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqL1xyXG4gIGdldEZvcm1CeUlEKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm1JRCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3JtcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgLyogZ2V0dGluZyByZWFkeSBmb3IgZXhwb3J0ICovXHJcbiAgICAgICAgICBsZXQgY2xvbmUgPSBuZXcgRm9ybSgpO1xyXG4gICAgICAgICAgY2xvbmUuQ29kZSA9IFwiSU1QT1JUX1wiICsgcmVzLkNvZGU7XHJcbiAgICAgICAgICBjbG9uZS5OYW1lID0gXCJpbXBvcnRfXCIgKyByZXMuTmFtZTtcclxuICAgICAgICAgIGNsb25lLkRlc2NyaXB0aW9uID0gcmVzLkRlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgY2xvbmUuRm9ybVNjYWxhclR5cGUgPSByZXMuRm9ybVNjYWxhclR5cGU7XHJcbiAgICAgICAgICBjbG9uZS5Gb3JtRmllbGRzR3JvdXBzID0gcmVzLkZvcm1GaWVsZHNHcm91cHM7XHJcbiAgICAgICAgICBjbG9uZS5BY3Rpb25zT25SZWNvcmQgPSByZXMuQWN0aW9uc09uUmVjb3JkO1xyXG4gICAgICAgICAgY2xvbmUuRmllbGRzID0gcmVzLkZpZWxkcztcclxuICAgICAgICAgIGNsb25lLk9iamVjdEZpZWxkcyA9IHJlcy5PYmplY3RGaWVsZHM7XHJcbiAgICAgICAgICBjbG9uZS5Jbm5lckZvcm1zID0gcmVzLklubmVyRm9ybXM7XHJcbiAgICAgICAgICBjbG9uZS5Sb290RW50aXR5SUQgPSByZXMuUm9vdEVudGl0eUlEO1xyXG5cclxuICAgICAgICAgIHRoaXMuZG93bmxvYWROYW1lID0gXCJleHBvcnRfXCIgKyByZXMuTmFtZTtcclxuICAgICAgICAgIHRoaXMuc3RyaW5naWZpZWRGb3JtID0gSlNPTi5zdHJpbmdpZnkoY2xvbmUpO1xyXG4gICAgICAgICAgdGhpcy5kb3dubG9hZEpzb25IcmVmID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChcclxuICAgICAgICAgICAgXCJkYXRhOnRleHQvanNvbjtjaGFyc2V0PVVURi04LFwiICtcclxuICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zdHJpbmdpZmllZEZvcm0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLyogZW5kIGV4cG9ydCAqL1xyXG5cclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShyZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKG5ldyBGb3JtKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdGlwbyBkaSB2aXN1YWxpenphemlvbmUgZGVsbGEgZm9ybS5cclxuICAgKiBTZSBsJ3V0ZW50ZSBzY2VnbGllIHVuYSB2aXN1YWxpenphemlvbmUgcmFnZ3J1cHBhdGEgaWwgbWV0b2RvIGFnZ2l1bmdlIGFsIEZvcm1Hcm91cCB1biBudW92b1xyXG4gICAqIGNvbnRyb2xsbyBwZXIgbCdhcnJheSBkZWkgbm9taSBkZWxsZSBzZXppb25pIGRhIGNyZWFyZS5cclxuICAgKi9cclxuICBvbkNoYW5nZUZvcm1TY2FsYXJUeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm1Gb3JtR3JvdXAuY29udGFpbnMoXCJGb3JtRmllbGRzR3JvdXBzXCIpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJGb3JtRmllbGRzR3JvdXBzXCIpO1xyXG4gICAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJGb3JtRmllbGRzR3JvdXBzXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLCBbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgIEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzID0gbnVsbDtcclxuICAgICAgaWYgKHRoaXMuZm9ybUZvcm1Hcm91cC5jb250YWlucyhcIkZvcm1GaWVsZHNHcm91cHNcIikpXHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJGb3JtRmllbGRzR3JvdXBzXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtRm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGludm9jYXRvIGFsIGtleXVwIG5lbGwnaW5wdXQgcGVyIGluc2VyaXJlIGkgbm9taSBkZWxsZSBzZXppb25pIHBlciBsYSB2aXN1YWxpenphemlvbmVcclxuICAgKiByYWdncnVwcGF0YSBkZWxsYSBmb3JtLiBRdWFudG8gbCd1dGVudGUgcHJlbWUgaWwgdGFzdG8gaW52aW8gdmllbmUgYWdnaXVudG8gaWwgbnVvdm8gbm9tZSBhbGxlXHJcbiAgICogc2V6aW9uaSBkaXNwb2JpbGkgc2Ugbm9uIG5lIGVzaXN0ZSB1bmEgY29uIGxvIHN0ZXNzbyBub21lLlxyXG4gICAqIEBwYXJhbSBldmVudCBFdmVudG8gY2hlIHJhcHByZXNlbnRhIGlsIGtleXVwIHN1bGxhIHRhc3RpZXJhLlxyXG4gICAqL1xyXG4gIG9uRm9ybUZpZWxkR3JvdXBOYW1lS2V5VXAoZXZlbnQpIHtcclxuICAgIGlmIChldmVudC5jb2RlID09PSBcIkVudGVyXCIgfHwgZXZlbnQuY29kZSA9PT0gXCJOdW1wYWRFbnRlclwiKSB7XHJcbiAgICAgIGlmICghdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMpIHtcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3VwcyA9IG5ldyBBcnJheTxGb3JtRmllbGRHcm91cD4oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLmZpbmQoXHJcbiAgICAgICAgICAobikgPT4gbi5OYW1lID09IHRoaXMuZm9ybUZpZWxkR3JvdXBOYW1lXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5wdXNoKHsgTmFtZTogdGhpcy5mb3JtRmllbGRHcm91cE5hbWUgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSW1wb3N0byBpbCBudW92byB2YWxvcmUgZGVsIEZvcm1Db250cm9sIHBlciBhZ2dpb3JuYXJlIGxvIHN0YXRvIGRlbGxhIGZvcm0uXHJcbiAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm1GaWVsZHNHcm91cHNcIl0uc2V0VmFsdWUoXHJcbiAgICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHNcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5mb3JtRmllbGRHcm91cE5hbWUgPSBudWxsO1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpbXVvdmVyZSBsYSBzZXppb25lIHNlbGV6aW9uYXRhIGRhIHF1ZWxsZSBkaXNwb25pYmlsaSBwZXIgbGEgZm9ybS5cclxuICAgKiBAcGFyYW0gZ3JvdXBOYW1lIE5vbWUgZGVsbGEgc2V6aW9uZSBkYSBlbGltaW5hcmUuXHJcbiAgICovXHJcbiAgb25EZWxldGVGb3JtRmllbGRHcm91cE5hbWUoZ3JvdXBOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLnNwbGljZShcclxuICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZmluZEluZGV4KChnKSA9PiBnLk5hbWUgPT09IGdyb3VwTmFtZSksXHJcbiAgICAgIDFcclxuICAgICk7XHJcbiAgICAvLyBJbXBvc3RvIGlsIG51b3ZvIHZhbG9yZSBkZWwgRm9ybUNvbnRyb2wgcGVyIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGVsbGEgZm9ybS5cclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm1GaWVsZHNHcm91cHNcIl0uc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzXHJcbiAgICApO1xyXG4gICAgLy8gU2UgZXNpc3Rvbm8gRmllbGQgbGVnYXRpIGFsbGEgc2V6aW9uZSBjaGUgc2kgdnVvbGUgZWxpbWluYXJlIGFsbG9yYSByb21wbyBpbCBsZWdhbWUuXHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lKSkge1xyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5GaWVsZEdyb3VwID09IGdyb3VwTmFtZSkuZm9yRWFjaChcclxuICAgICAgICAoZikgPT4gKGYuRmllbGRHcm91cCA9IG51bGwpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUgdW4gbnVvdm8gY2FtcG8gbyBzaSB2dW9sZSBtb2RpZmljYXJlIHVubyBlc2lzdGVudGUuXHJcbiAgICogTWVtb3JpenphIGwnZXZlbnR1YWxlIEZpZWxkIHNjZWx0byBvbmUgY3JlYSB1bm8gbnVvdm8gcHJpbWEgZGkgYXByaXJlIGlsIGRpYWxvZyBwZXIgbW9kaWZpY2FybG8vYWdnaXVuZ2VybG8uXHJcbiAgICogQHBhcmFtIGZpZWxkIE9nZ2V0dG8gQmFzZUZpZWxkIGRhIG1vZGlmaWNhcmUuIFNlIG51bGwgbmUgdmllbmUgY3JlYXRhIHVuYSBudW92YSBpc3RhbnphIHBlciBsJ2FnZ2l1bnRhLlxyXG4gICAqL1xyXG4gIG9wZW5GaWVsZERpYWxvZyhmaWVsZDogQmFzZUZpZWxkID0gbnVsbCkge1xyXG4gICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGZpZWxkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmaWVsZCkpO1xyXG4gICAgICBpZih0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID0geyBJbkxpc3RWaWV3OiB0cnVlLCBWaXNpYmxlSWY6IG51bGwsIEZpZWxkc3R5bGVDU1M6IFwiXCIsIExhYmVsc3R5bGVDU1M6IFwiXCIsIENvbFNwYW5TaXplczogW10gfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpYWxvZ0ZpZWxkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0ZpZWxkLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBoZWlnaHQ6IFwiODAlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2FsdmEgaWwgY2FtcG8gYXBwZW5hIGNyZWF0byBvIG1vZGlmaWNhdG8uXHJcbiAgICogUHJpbWEgZGVsIHNhbHZhdGFnZ2lvIGNvbnRyb2xsYSBzZSBlc2lzdGUgdW4gYWx0cm8gY2FtcG8gY29uIGxhIHN0ZXNzYSBsYWJlbCwgaW4gcXVlc3RvXHJcbiAgICogY2FzZSBnZW5lcmUgdW4gZXJyb3JlIChpIGNhbXBpIGRldm9ubyBhdmVyZSBub21pLCBlIHF1aW5kaSBsYWJlbCwgdW5pdm9jaGUgLSBpIG5vbWkgdmVuZ29ub1xyXG4gICAqIHJpY2F2YXRpIHVuZW5kbyBsZSBwYXJvbGUgY2hlIGZvcm1hbm8gbGEgbGFiZWwgdHJhbWl0ZSBcIl9cIikuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIHNhbHZhcmVcclxuICAgKi9cclxuICBvblNhdmVGaWVsZChmaWVsZDogQmFzZUZpZWxkKSB7XHJcbiAgICBpZiAoZmllbGQpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMgJiZcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAoZiwgaSkgPT5cclxuICAgICAgICAgICAgZi5MYWJlbCA9PT0gZmllbGQuTGFiZWwgJiZcclxuICAgICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID09IG51bGxcclxuICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9PSBpKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhcclxuICAgICAgICAgIFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGNhbXBpIGNvbiBsbyBzdGVzc28gQ29kaWNlLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgY2FtcGkgY29uIGxvIHN0ZXNzbyBDb2RpY2UuXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT0gbnVsbCAmJiB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZF0gPSBmaWVsZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5GaWVsZHMpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5GaWVsZHMgPSBuZXcgQXJyYXk8QmFzZUZpZWxkPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25TYXZlRmllbGRcIiwgdGhpcy5mb3JtKVxyXG4gICAgdGhpcy5jbG9zZUZpZWxkRGlhbG9nKCk7XHJcbiAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIGNvbnRyb2xsYSBzZSBsbyBzdGVwIHBlciBsJ2FnZ2l1bnRhIGRlaSBjYW1waSBuZWxsYSBmb3JtIMOoIGNvbmNsdXNvLlxyXG4gICAqIEByZXR1cm5zIFNlIFRSVUUgbG8gc3RlcCB2aWVuZSBjb25zaWRlcmF0byBjb21wbGV0YXRvIGVkIMOoIHBvc3NiaWxlIHBhc3NhcmUgYWwgc3VjY2Vzc2l2by5cclxuICAgKi9cclxuICBpc0ZpZWxkU3RlcENvbXBsZXRlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5mb3JtLkZpZWxkcykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UgJiZcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiAhZi5GaWVsZEdyb3VwKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlbGxlIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIFNlIGlsIHBhcmFtZXRybyBwYXNzYXRvIMOoIG51bGwgc29ubyBpbiBhZ2dpdW50YSBhbHRyaW1lbnRpIHNvbm8gaW4gbW9kaWZpY2EuXHJcbiAgICogQHBhcmFtIGlubmVuckZvcm0gRm9ybSBkaSBkZXR0YWdsaW8gZGEgbW9kaWZpY2FyZSAoc2UgbnVsbCBhbGxvcmEgdmFkbyBpbiBhZGQpLlxyXG4gICAqL1xyXG4gIG9wZW5Jbm5lckZvcm1EaWFsb2coaW5uZW5yRm9ybTogRm9ybSA9IG51bGwpIHtcclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcoKTtcclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1NYW5hZ21lbnQgPVxyXG4gICAgICB0cnVlO1xyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm1cclxuICAgIC8vIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtLk9sZE5hbWVcclxuICAgIC8vIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1SZWZcclxuICAgIC8vIFtmb3JtXT1cInNlbGVjdGVkSW5uZXJGb3JtXCJcclxuICAgIC8vIFtpbm5lckZvcm1NYW5hZ21lbnRdPVwidHJ1ZVwiXHJcbiAgICAvLyBbaW5uZXJGb3JtUmVmXT1cImRpYWxvZ0lubmVyRm9ybVJlZlwiXHJcblxyXG4gICAgaWYgKGlubmVuckZvcm0pIHtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID0gdGhpcy5mb3JtLklubmVyRm9ybXMuaW5kZXhPZihpbm5lbnJGb3JtKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlubmVuckZvcm0pKTtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybS5PbGROYW1lID0gaW5uZW5yRm9ybS5OYW1lO1xyXG4gICAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybSA9XHJcbiAgICAgICAgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbm5lbnJGb3JtKSk7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtLk9sZE5hbWUgPVxyXG4gICAgICAgIGlubmVuckZvcm0uTmFtZTtcclxuXHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gdGhpcy5mb3JtLkZpZWxkcy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGYpID0+IGYuTGFiZWwgPT09IGlubmVuckZvcm0uTmFtZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtID1cclxuICAgICAgICBuZXcgRm9ybSgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPSBudWxsO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmRpYWxvZ0lubmVyRm9ybVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbm5lckZvcm0sIHtcclxuXHJcbiAgICB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuaW5uZXJGb3JtUmVmID1cclxuICAgICAgdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybSwge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICB3aWR0aDogXCI4NSVcIixcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gc2NhdGVuYXRvIGFsIHNhbHZhdGFnZ2lvIGRpIHVuYSBmb3JtIGRpIGRldHRhZ2xpby5cclxuICAgKiBAcGFyYW0gZXZlbnQgRm9ybSBjcmVhdGEvbW9kaWZpY2F0YSBkYWxsJ3V0ZW50ZS4gU2Ugw6ggbnVsbCBhbGxvcmEgbCd1dGVudGUgaGEgYWJiYW5kb25hdG8gbGEgY29uZmlndXJhemlvbmUuXHJcbiAgICovXHJcbiAgb25TYXZlT3JFeGl0SW5uZXJGb3JtKGV2ZW50OiBGb3JtKSB7XHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mb3JtLk5hbWUgPT09IGV2ZW50Lk5hbWUgfHxcclxuICAgICAgICAodGhpcy5mb3JtLklubmVyRm9ybXMgJiZcclxuICAgICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoXHJcbiAgICAgICAgICAgIChhLCBpKSA9PlxyXG4gICAgICAgICAgICAgIGEuTmFtZSA9PT0gZXZlbnQuTmFtZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSAhPT0gaSlcclxuICAgICAgICAgICkpIHx8XHJcbiAgICAgICAgKHRoaXMuZm9ybS5GaWVsZHMgJiZcclxuICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9PSBudWxsICYmXHJcbiAgICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAgIChmLCBpKSA9PlxyXG4gICAgICAgICAgICAgIGYuTGFiZWwgPT09IGV2ZW50Lk5hbWUgJiZcclxuICAgICAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkICE9PSBpKVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuV2FybmluZyhcclxuICAgICAgICAgIFwiSW1wb3NzaWJpbGUgaW5zZXJpcmUgZHVlIGZvcm0gZGkgZGV0dGFnbGlvIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgZm9ybSBkaSBkZXR0YWdsaW8gY29uIGxvIHN0ZXNzbyBub21lLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaW5uZXJGb3JtRmllbGQ6IEJhc2VGaWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuTmFtZSA9IGV2ZW50Lk5hbWUuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5MYWJlbCA9IGV2ZW50Lk5hbWU7XHJcbiAgICAgIGlubmVyRm9ybUZpZWxkLkZpZWxkVHlwZSA9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuRmllbGRHcm91cCA9XHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT0gbnVsbFxyXG4gICAgICAgICAgPyB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXS5GaWVsZEdyb3VwXHJcbiAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtICE9IG51bGwgJiZcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPj0gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtc1t0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm1dID0gZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkc1t0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZF0gPSBpbm5lckZvcm1GaWVsZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5Jbm5lckZvcm1zKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3JtcyA9IG5ldyBBcnJheTxGb3JtPigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5wdXNoKGV2ZW50KTtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLnB1c2goaW5uZXJGb3JtRmllbGQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlbGxlIGFjdGlvbi5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gcGFzc2F0byDDqCBudWxsIHNvbm8gaW4gYWdnaXVudGEgYWx0cmltZW50aSBzb25vIGluIG1vZGlmaWNhLlxyXG4gICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uT25SZWNvcmQgZGEgbW9kaWZpY2FyZSAoc2UgbnVsbCBhbGxvcmEgdmFkbyBpbiBhZGQpLlxyXG4gICAqL1xyXG4gIG9wZW5BY3Rpb25PblJlY29yZERpYWxvZyhhY3Rpb246IEFjdGlvbk9uUmVjb3JkID0gbnVsbCkge1xyXG4gICAgaWYgKGFjdGlvbikge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRBY3Rpb24gPSB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYWN0aW9uKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uID0gbmV3IEFjdGlvbk9uUmVjb3JkKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNyZWF0ZUFjdGlvbk9uUmVjb3JkRm9ybSgpO1xyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIGRlbCBjYW1wbyBGb3JtdWxhLlxyXG4gICAqIFZpZW5lIHNjYXRlbmF0byBhbCBmb2N1cyAoaW4gcXVlc3RvIGNhc28gdmllbmUgcGFzc2F0byBpbCBwYXJhbWV0cm8gYSBudWxsIHBlciBkaWZmZXJlbnppYXJsb1xyXG4gICAqIGRhbGwnZXZlbnRvIGRpIGNsaWNrIHN1bGxhIHRhc3RpZXJhKSBlIGFsIGtleXVwIHN1bGwnaW5wdXQgKGlsIHBhcmFtZXRybyDDqCBkaXZlcnNvIGRhIG51bGwpLlxyXG4gICAqIEBwYXJhbSBrZXlib2FyZEV2ZW50IEV2ZW50byBzY2F0ZW5hdG8gYWwga2V5dXAgc3VsbGEgdGFzdGllcmEuIFNlIG51bGwgYWxsb3JhIGlsIG1ldG9kbyDDqCBzdGF0byBpbnZvY2F0byBkYWwgZm9jdXMgc3VsbCdpbnB1dC5cclxuICAgKiBAc3VtbWFyeSBBZ2dpb3JuYSBsJ2VsZW5jbyBkZWkgc3VnZ2VyaW1lbnRpIHBlciBsJ2F1dG9jb21wbGV0ZSBzZSBsJ3V0ZW50ZSBlc2VndWUgaWwgZm9jdXMgc3VsbCdpbnB1dFxyXG4gICAqIG9wcHVyZSBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYSBkaSB1biB0YXN0byBkaXZlcnNvIGRhbGxlIGZyZWNjZS5cclxuICAgKi9cclxuICBzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIENyZW8gbCdhcnJheSBwZXIgbCdhdXRvY29tcGxldGUgc29sbyBzZSBzdG8gZmFjZW5kbyBpbCBmb2N1cyBzdWxsJ2lucHV0IG8gc2Ugc3RvIHByZW1lbmRvIHVuIHRhc3RvXHJcbiAgICAvLyBzdWxsYSB0YXN0aWVyYSBkaXZlcnNvIGRhbGxlIGZyZWNjZSAoaW4gcXVlc3QndWx0aW1vIGNhc28sIHNlIG5vbiB2aWVuZSBlc2VndWl0byBpbCBmaWx0cm8gc3VsbCdldmVudG8sXHJcbiAgICAvLyBub24gc2kgcHXDsiBzZWxlemlvbmFyZSB1biBzdWdnZXJpbWVudG8gZGVsbCdhdXRvY29tcGxldGUgcGVyY2jDqCBhbCBjbGljayB2ZXJyZWJiZSByaWNhcmljYXRvIGwnYXJyYXkgZVxyXG4gICAgLy8gc2kgcHJlZGVyZWJiZSBsYSBzZWxlemlvbmUgYXBwZW5hIGZhdHRhKS5cclxuICAgIGlmICgha2V5Ym9hcmRFdmVudCB8fCAha2V5Ym9hcmRFdmVudC5jb2RlLmluY2x1ZGVzKFwiQXJyb3dcIikpIHtcclxuICAgICAgdGhpcy5hY3Rpb25BdXRvY29tcGxldGVPcHRpb25zID1cclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGwnYXppb25lIGNyZWF0YS9tb2RpZmljYXRlLlxyXG4gICAqL1xyXG4gIHNhdmVBY3Rpb25PblJlY29yZCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCAmJlxyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmZpbmQoXHJcbiAgICAgICAgKGEsIGkpID0+XHJcbiAgICAgICAgICBhLk5hbWUgPT09IHRoaXMuc2VsZWN0ZWRBY3Rpb24uTmFtZSAmJlxyXG4gICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9PSBudWxsXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPT0gaSlcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcoXHJcbiAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICApO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPSBudWxsICYmIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmRbdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uXSA9IHRoaXMuc2VsZWN0ZWRBY3Rpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkID0gbmV3IEFycmF5PEFjdGlvbk9uUmVjb3JkPigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQucHVzaCh0aGlzLnNlbGVjdGVkQWN0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpO1xyXG4gICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY2hpdWRlcmUgaWwgZGlhbG9nIGRlbGxhIGlubmVyIGZvcm0uXHJcbiAgICovXHJcbiAgY2xvc2VEaWFsb2dJbm5lckZvcm0oKSB7XHJcbiAgICB0aGlzLmlubmVyRm9ybVJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjaGl1ZGVyZSBpbCBkaWFsb2cgZGkgZ2VzdGlvbmUgZGVsbGUgYWN0aW9uLlxyXG4gICAqL1xyXG4gIGNsb3NlRGlhbG9nQWN0aW9uT25SZWNvcmQoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNlZ25hcmUgY29tZSBjb25jbHVzYSBsYSBjcmVhemlvbmUgZGVsbGEgZm9ybSBlIHBlciBjcmVhcm5lIHVuYSBjb3BpYVxyXG4gICAqIGRhIHZpc2FsaXp6YXJlIGNvbWUgYW50ZXByaW1hLlxyXG4gICAqIEBwYXJhbSBjb21wbGV0ZWQgU2UgVFJVRSBzZWduYSBsYSBmb3JtIGNvbWUgY29uY2x1c2EgZSBuZSBjcmVhIHVuYSBjb3BpYSBkYSB2aXN1YWxpenphcmVcclxuICAgKi9cclxuICBzZXRGb3JtU3RhdHVzKGNvbXBsZXRlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKGNvbXBsZXRlZCkge1xyXG4gICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnByZXZpZXdGb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0pKTtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInByZXZpZXdGb3JtXCIsIHRoaXMucHJldmlld0Zvcm0pXHJcblxyXG4gICAgICAvLyBQZXIgdmlzdWFsaXp6YXJlIGNvcnJldHRhbWVudGUgbCdvYW50ZXByaW1hIGRlbGxhIGZvcm0gYXBwZW5hIGNyZWF0YVxyXG4gICAgICAvLyBiaXNvZ25hIHZhbG9yaXp6YXJlIGxhIHByb3ByaWV0w6AgTmFtZSBkZWkgY2FtcGkgZGVsbGEgZm9ybSBlIGRlbGxlIElubmVyRm9ybXMuXHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuTmFtZSA9IGZpZWxkLkxhYmVsLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMgJiZcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnByZXZpZXdGb3JtLklubmVyRm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgICAgZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgZmllbGQuTmFtZSA9IGZpZWxkLkxhYmVsLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgbGEgZm9ybSBjcmVhdGEgYWxsYSBmaW5lIGRlbCB3aXphcmQuXHJcbiAgICogU2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kUG9pbnQgcGVyIGlsIHNhbHZhdGFnZ2lvIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciBwYXNzYW5kbyBsJ29nZ2V0byBkYSBzYWx2YXJlXHJcbiAgICogbmVsIGJvZHkgZGVsbGEgY2hpYW1hdGEsIGFsdHJpbWVudGkgc2NhdGVuYSBsJ2V2ZW50byBcInNhdmVGb3JtRXZlbnRcIi5cclxuICAgKi9cclxuICBzYXZlRm9ybSgpIHtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuU2F2ZUVuZFBvaW50XHJcbiAgICApIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5zYXZlZCl7XHJcbiAgICAgICAgdGhpcy5iYWNrdXBGb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0pKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYmFja3VwRm9ybSkpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG5cclxuICAgICAgLy8gUGVyIGZhciBhcnJpdmFyZSBhbCBzZXJ2ZXIgbCdhcnJheSBkaSBGaWVsZCBiaXNvZ25hIHBhc3NhcmxpIHN1IEFueVxyXG4gICAgICB0aGlzLmZvcm0uT2JqZWN0RmllbGRzID0gW107XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHJcbiAgICAgICAgLy8gVHJhc2Zvcm1vIGlsIGRhdGFnZXR0ZXIgaW4gQmFzZTY0XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nID0gYnRvYShKU09OLnN0cmluZ2lmeShmaWVsZC5EYXRhR2V0dGVyKSk7XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bS5BbGxlZ2F0bykge1xyXG4gICAgICAgICAgY29uc3QgZmxkQTogYW55ID0gZmllbGQ7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhT2JqZWN0RmllbGRzID0gZmxkQS5NZXRhZGF0YUZpZWxkcztcclxuICAgICAgICAgIGZsZEEuTWV0YWRhdGFGaWVsZHMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMucHVzaChmbGRBKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl0pIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NYXhWYWx1ZSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1pblZhbHVlID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mb3JtLlByb2plY3ROYW1lID0gdGhpcy5Qcm9qZWN0TmFtZTtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5DcmVhdGlvbkRhdGUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5DcmVhdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5DcmVhdGlvblVzZXIgPSB0aGlzLlVzZXJJRDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm0uTW9kaWZ5VXNlciA9IHRoaXMuVXNlcklEO1xyXG4gICAgICAvLyBjaGlhbWF0YSBlZmZldHRpdmFcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiRm9ybVwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5zYXZlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5TYXZlRW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5TdWNjZXNzKFwiRm9ybSBzYWx2YXRhIGNvbiBzdWNjZXNzbyFcIik7XHJcbiAgICAgICAgICB0aGlzLmFmdGVyU2F2ZUZvcm1FdmVudC5lbWl0KHRoaXMuZm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlRm9ybUV2ZW50LmVtaXQodGhpcy5mb3JtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBGVU5aSU9OSSBQUklWQVRFXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgaW1wb3N0YXJlIGxhIGZvcm0gZSBjb25maWd1cmFyZSBjb2xvbm5lL0Zvcm1Hb3VycC5cclxuICAgKiBAcGFyYW0gZm9ybSBGb3JtIGRhIHV0aWxpenphcmUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGb3JtQW5kQ29uZmlndXJlKGZvcm06IEZvcm0gPSBudWxsKSB7XHJcbiAgICBpZiAoZm9ybSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZm9ybSA9IGZvcm07XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5mb3JtLkZpZWxkcyAhPSBcInVuZGVmaW5lZFwiKXtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblxyXG4gICAgICAgIC8vIFRyYXNmb3JtbyBpbCBCYXNlNjRTdHJpbmcgZGVsIERhdGFnZXR0ZXIgbmVsIERhdGFnZXR0ZXIgdmVybyBlIHByb3ByaW9cclxuICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gSlNPTi5wYXJzZShhdG9iKGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZykpO1xyXG4gICAgICAgIGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgICAgICAgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9IGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gbnVsbCA/IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlIDogZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Gb3JtKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmEgbGUgY29sb25uZSBwZXIgbGUgdGFiZWxsZSBuZWNlc3NhcmllIGFsbGEgY3JlYXppb25lIGRlbGxhIGZvcm06XHJcbiAgICogIC0gcGVyIGxhIHZpc3VhbGl6emF6aW9uZSBkZWkgY2FtcGkgaW5zZXJpdGlcclxuICAgKiAgLSBwZXIgbGUgZm9ybSBkaSBkZXR0YWdsaW8gY3JlYXRlXHJcbiAgICogIC0gcGVyIGxlIGF6aW9uaSBjb25maWd1cmF0ZSBzdWkgcmVjb3JkIGRlbGxhIGZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmZpZWxkc0NvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDRyZW1cIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmVkaXRGaWVsZChlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRHVwbGljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZHVwbGljYXRlRmllbGQoZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmRlbGV0ZUVsZW1lbnQoZWxlbWVudCwgXCJGaWVsZHNcIiksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlNwb3N0YSBzdVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X3Vwd2FyZFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCB0cnVlLCBcIkZpZWxkc1wiKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PiB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZWxlbWVudCkgPT09IDAsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlNwb3N0YSBnacO5XCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYXJyb3dfZG93bndhcmRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgZmFsc2UsIFwiRmllbGRzXCIpLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGVsZW1lbnQpID49IHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoIC0gMSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJGaWVsZFR5cGVcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlRpcG9sb2dpYVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRW51bSxcclxuICAgICAgICBlbnVtTW9kZWw6IEZpZWxkVHlwZUVudW0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEycmVtXCIgfSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiTGFiZWxcIiwgZGlzcGxheTogXCJMYWJlbFwiLCBzdHlsZXM6IHsgZmxleDogXCIwIDAgOHJlbVwiIH0gfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJEZXNjcmlwdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiRGVzY3JpemlvbmVcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGVcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlRpcG8gUmVjdXBlcm8gRGF0aVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRW51bSxcclxuICAgICAgICBlbnVtTW9kZWw6IERhdGFHZXR0ZXJUeXBlRW51bSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlJlcXVpcmVkXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJPYmJsaWdhdG9yaW9cIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuUmVxdWlyZWQsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiRm9ybXVsYVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiQ2FsY29sYXRvXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkZvcm11bGEgIT0gbnVsbCAmJiBlbGVtZW50LkZvcm11bGEgIT0gJycsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiSW5MaXN0Vmlld1wiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGUgaW4gQ29tcGlsYXppb25lXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkluTGlzdFZpZXcsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiSW52aXNpYmlsaXR5XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJPY2N1cGEgc3BhemlvP1wiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5Jbkxpc3RWaWV3IHx8IGVsZW1lbnQuSW52aXNpYmlsaXR5ID09IEZpZWxkSW52aXNpYmlsaXR5RW51bVtcIk5BU0NPU1RPIENPTiBBUkVBIFZJU0lCSUxFXCJdLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA3cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlZpc2libGVJZlwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGl0w6AgY29uZGl6aW9uYXRhXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LlZpc2libGVJZiAhPSBudWxsICYmIGVsZW1lbnQuVmlzaWJsZUlmICE9IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiQW5zd2VyU3R5bGUuSW5MaXN0Vmlld1wiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGUgbmVsbGEgcmlzcG9zdGFcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+ICFlbGVtZW50LkFuc3dlclN0eWxlIHx8IGVsZW1lbnQuQW5zd2VyU3R5bGUgJiYgZWxlbWVudC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3LFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA1cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAmJlxyXG4gICAgICB0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5maWVsZHNDb2x1bW5zLnNwbGljZSgxLCAwLCB7XHJcbiAgICAgICAga2V5OiBcIkZpZWxkR3JvdXBcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlNlemlvbmVcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5maWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTRyZW1cIiB9LFxyXG4gICAgICB9KTtcclxuICAgICAgLy8gdGhpcy5maWVsZHNDb2x1bW5zLnB1c2goXHJcbiAgICAgIC8vICAge1xyXG4gICAgICAvLyAgICAga2V5OiBcIkZpZWxkR3JvdXBcIixcclxuICAgICAgLy8gICAgIGRpc3BsYXk6IFwiU2V6aW9uZVwiLFxyXG4gICAgICAvLyAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICAvLyAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5maWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZSxcclxuICAgICAgLy8gICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxNHJlbVwiIH1cclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3Rpb25zT25SZWNvcmRDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMub3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUVsZW1lbnQoZWxlbWVudCwgXCJBY3Rpb25zT25SZWNvcmRcIiksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlNwb3N0YSBzdVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X3Vwd2FyZFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCB0cnVlLCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihlbGVtZW50KSA9PT0gMCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIGdpw7lcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvd19kb3dud2FyZFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCBmYWxzZSwgXCJBY3Rpb25zT25SZWNvcmRcIiksXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoZWxlbWVudCkgPj1cclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmxlbmd0aCAtIDEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHsga2V5OiBcIkljb25cIiwgZGlzcGxheTogXCJJY29uYVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDE1JVwiIH0gfSxcclxuICAgICAgeyBrZXk6IFwiTmFtZVwiLCBkaXNwbGF5OiBcIk5vbWVcIiwgc3R5bGVzOiB7IGZsZXg6IFwiIDAgMCAyMCVcIiB9IH0sXHJcbiAgICAgIHsga2V5OiBcIkFjdGlvblwiLCBkaXNwbGF5OiBcIkF6aW9uZVwiIH0sXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSBpbCBGb3JtR3JvdXAgcGVyIGwnb2dnZXR0byBGb3JtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBDb2RlOiBbdGhpcy5mb3JtLkNvZGVdLFxyXG4gICAgICBOYW1lOiBbdGhpcy5mb3JtLk5hbWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBEZXNjcmlwdGlvbjogW3RoaXMuZm9ybS5EZXNjcmlwdGlvbl0sXHJcbiAgICAgIEZvcm1TY2FsYXJUeXBlOiBbdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZUZvcm1TY2FsYXJUeXBlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhIGlsIEZvcm1Hcm91cCBlcHIgbCdhZ2dpdW50YSBvIGxhIG1vZGlmaWNhIGRpIHVuYSBhY3Rpb24gc3VpIHJlY29yZCBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQWN0aW9uT25SZWNvcmRGb3JtKCkge1xyXG4gICAgdGhpcy5hY3Rpb25PblJlY29yZEZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBOYW1lOiBbdGhpcy5zZWxlY3RlZEFjdGlvbi5OYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgSWNvbjogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uSWNvbiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIEFjdGlvbjogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hpdWRlIGlsIGRpYWxvZyBwZXIgYWdnaXVuZ2VyZS9tb2RpZmljYXJlIHVuIEZpZWxkIHNlbnphIHNhbHZhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGNsb3NlRmllbGREaWFsb2coKSB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dGaWVsZFJlZiAhPSB1bmRlZmluZWQpIHRoaXMuZGlhbG9nRmllbGRSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBsJ2FwZXJ0dXJhIGRlbCBkaWFsb2cgcGVyIGxhIG1vZGlmaWNhIGRpIHVuIEZpZWxkLlxyXG4gICAqIFNlIGlsIGZpZWxkIMOoIGRpIHRpcG8gXCJGb3JtIGRpIGRldHRhZ2xpb1wiIGFwcmUgaWwgZGlhbG9nIHBlciBsYSBtb2RpZmljYSBkaSB1bmFcclxuICAgKiBJbm5lckZvcm0gYWx0cmltZW50aSBhcHJlIHF1ZWxsbyBwZXIgbGEgbW9kaWZpY2EgZGkgdW4gRmllbGQuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIG1vZGlmaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGVkaXRGaWVsZChmaWVsZDogQmFzZUZpZWxkKSB7XHJcbiAgICBpZiAoZmllbGQuRmllbGRUeXBlICE9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSkge1xyXG4gICAgICB0aGlzLm9wZW5GaWVsZERpYWxvZyhmaWVsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wZW5Jbm5lckZvcm1EaWFsb2coXHJcbiAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZCgoZikgPT4gZi5OYW1lID09IGZpZWxkLkxhYmVsKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGxhIGR1cGxpY2F6aW9uZSBkaSB1biBGaWVsZC5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gZGEgbW9kaWZpY2FyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZHVwbGljYXRlRmllbGQoZmllbGQ6IEJhc2VGaWVsZCkge1xyXG4gICAgaWYgKGZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pIHtcclxuICAgICAgLy8gcmljcmVvIGwnb2dnZXR0byBwYXNzYW5kbyBwZXIgdW4ganNvblxyXG4gICAgICBsZXQgY2xvbmVGaWVsZDogQmFzZUZpZWxkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmaWVsZCkpO1xyXG5cclxuICAgICAgY2xvbmVGaWVsZC5MYWJlbCA9IGZpZWxkW1wiTGFiZWxcIl0gKyBcIkNvcHlcIjtcclxuICAgICAgY2xvbmVGaWVsZC5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCArIDE7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSBuZXcgQmFzZUZpZWxkKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuICAgICAgdGhpcy5vblNhdmVGaWVsZChjbG9uZUZpZWxkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFsZXJ0KFwibm9uIMOoIHBvc3NpYmlsZSBkdXBsaWNhcmUgdW5hIGZvcm0gZGkgZGV0dGFnbGlvXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW11b3ZlcmUgdW4gRmllbGQgYWxsJ2ludGVybm8gZGkgdW5hIEZvcm0uXHJcbiAgICogUmljaGllZGUgY29uZmVybWEgYWxsJ3V0ZW50ZSBwcmltYSBkaSByaW11b3ZlcmxvLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgZGEgcmltdW92ZXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZWxldGVFbGVtZW50KFxyXG4gICAgZWxlbWVudDogQmFzZUZpZWxkIHwgQWN0aW9uT25SZWNvcmQgfCBGb3JtLFxyXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgIFwiRWxpbWluYXJlIGwnZWxlbWVudG8gc2VsZXppb25hdG8/XCIsXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2UoXHJcbiAgICAgICAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKGVsZW1lbnQpLFxyXG4gICAgICAgICAgMVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJGaWVsZHNcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09PSBcIkFjdGlvbnNPblJlY29yZFwiKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIFwiUmljaGllc3RhIGNvbmZlcm1hXCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNwb3N0YXJlIHVuIGNhbXBvIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0uXHJcbiAgICogQHBhcmFtIGZpZWxkIE9nZ2V0dG8gZGkgdGlwbyBCYXNlRmllbGQgZGEgc3Bvc3RhcmUuXHJcbiAgICogQHBhcmFtIG1vdmVVcCBTZSBUUlVFIGFsbG9yYSBzcG9zdGEgdmVyc28gbCdhbHRvIGlsIGNhbXBvIChhYmJhc3NhIGwnaW5kaWNlKSBhbHRyaW1lbnRpIGlsIGNvbnRyYXJpby5cclxuICAgKi9cclxuICBwcml2YXRlIG1vdmVFbGVtZW50KFxyXG4gICAgZWxlbWVudDogQmFzZUZpZWxkIHwgQWN0aW9uT25SZWNvcmQsXHJcbiAgICBtb3ZlVXA6IGJvb2xlYW4sXHJcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgY29uc3Qgc3RhcnRpbmdJbmRleCA9IHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLmluZGV4T2YoZWxlbWVudCk7XHJcbiAgICBjb25zdCBlbmRpbmdJbmRleCA9IHN0YXJ0aW5nSW5kZXggKyAobW92ZVVwID8gLTEgOiAxKTtcclxuXHJcbiAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2Uoc3RhcnRpbmdJbmRleCwgMSk7XHJcbiAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2UoZW5kaW5nSW5kZXgsIDAsIGVsZW1lbnQpO1xyXG5cclxuICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiRmllbGRzXCIpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcbiAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJBY3Rpb25zT25SZWNvcmRcIikge1xyXG4gICAgICB0aGlzLnNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICB0aGlzLnJlbG9hZEFjdGlvbnNPblJlY29yZFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGwnb3JkaW5hbWVudG8gZGVsbGUgc2V6aW9uaSBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Rm9ybUZpZWxkR3JvdXBPcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5mb3JFYWNoKChnLCBpKSA9PiAoZy5PcmRpbmFsUG9zaXRpb24gPSBpKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGwnb3JkaW5hbWVudG8gZGVpIGNhbXBpIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0gaW4gYmFzZSBhbGwnb3JkaW5lIGNoZSBsJ3V0ZW50ZVxyXG4gICAqIGhhIGRlZmluaXRvIG5lbGxhIHRhYmVsbGEgaW4gY3VpIHNvbm8gbW9zdHJhdGlcclxuICAgKi9cclxuICBwcml2YXRlIHNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMpIHtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGZpZWxkLk9yZGluYWxQb3NpdGlvbiA9IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihmaWVsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSB0YWJlbGxhIGRlaSBjYW1waSBhZ2dpdW50aSBpbiB1bmEgZm9ybVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkRmllbGRzVGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZHNUYWJsZSkge1xyXG4gICAgICB0aGlzLmZpZWxkc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCkge1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmZvckVhY2goKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGFjdGlvbi5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIHRhYmVsbGEgZGVsbGUgYXppb25pIGFnZ2l1bnRpdmUgc3VpIHJlY29yZCBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5hY3Rpb25zT25SZWNvcmRUYWJsZSkge1xyXG4gICAgICB0aGlzLmFjdGlvbnNPblJlY29yZFRhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uRXh0ZXJuYWxDb21wb25lbnRPdXQoZXY6IGV2ZW50T3V0KXtcclxuICAgIHRoaXMub3V0LmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGVxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPjwvZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1oZWFkZXIgcm93IHRpdGxlIHAtMVwiICpuZ0lmPVwiaW5uZXJGb3JtTWFuYWdtZW50XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZS1zdGFuZGFyZFwiPkFnZ2l1bnRhIGZvcm0gZGkgZGV0dGFnbGlvPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIHRleHQtcmlnaHRcIj5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNsb3NlXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nSW5uZXJGb3JtKClcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSNyZWdpb24gRVhQT1JUIE1PRFVMRSAtLT5cclxuPGRpdiBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1leHBvcnRlclwiICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09ICdFeHBvcnQnXCIgY2xhc3M9XCJwLTNcIj5cclxuICA8YVxyXG4gICAgY2xhc3M9XCJidG4gYnRuLWNsZWFyXCJcclxuICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgdGl0bGU9XCJEb3dubG9hZCBKU09OXCJcclxuICAgIFtocmVmXT1cImRvd25sb2FkSnNvbkhyZWZcIlxyXG4gICAgZG93bmxvYWQ9XCJ7eyBkb3dubG9hZE5hbWUgfX0uanNvblwiXHJcbiAgICA+RXhwb3J0PC9hXHJcbiAgPlxyXG4gIDxiciAvPlxyXG4gIHt7IHN0cmluZ2lmaWVkRm9ybSB9fVxyXG48L2Rpdj5cclxuPCEtLSNlbmRyZWdpb24gRVhQT1JUIE1PRFVMRSAtLT5cclxuXHJcbjxtYXQtaG9yaXpvbnRhbC1zdGVwcGVyXHJcbiAgKm5nSWY9XCJsb2FkZXIgJiYgZm9ybUZvcm1Hcm91cCAmJiB2aWV3TW9kZSA9PSAnYWRkT3JFZGl0J1wiXHJcbiAgbGluZWFyXHJcbiAgI3N0ZXBwZXJcclxuICBbbmdDbGFzc109XCJ7IG91dGVyRm9ybTogdHJ1ZSwgJ2lubmVyRm9ybU1hbmFnbWVudC1zdGVwcGVyJzogaW5uZXJGb3JtTWFuYWdtZW50ICB9XCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1zdGVwcGVyIHt7ICdsYXN0LWVkaXRlZC1zdGVwLScgKyBzdGVwcGVyLnNlbGVjdGVkSW5kZXggfX1cIlxyXG4+XHJcbiAgPCEtLSNyZWdpb24gREFUSSBHRU5FUkFMSSBERUxMQSBGT1JNIC0tPlxyXG4gIDxtYXQtc3RlcCBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1nZW5lcmFsLWRhdGFcIiBbc3RlcENvbnRyb2xdPVwiZm9ybUZvcm1Hcm91cFwiPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtRm9ybUdyb3VwXCIgKGtleWRvd24uZW50ZXIpPVwiKGZhbHNlKVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIlxyXG4gICAgICAgID48L2Rpdj5cclxuICAgICAgICBEYXRpIGdlbmVyYWxpIGRlbGxhIGZvcm1cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZmlyc3RSb3dcIj5cclxuICAgICAgICA8IS0tIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1ZhIGluc2VyaXRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb21lIHJpZmVyaW1lbnRvIG5laSB0ZW1wbGF0ZS4gbm9uIGFjY2V0dGEgY2FyYXR0ZXJpIHNwZWNpYWxpIG5lIHNwYXppLidcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBDb2RpY2UgVW5pdm9jbyBcclxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidWYSBpbnNlcml0byBwZXIgZXNzZXJlIHV0aWxpenphdG8gY29tZSByaWZlcmltZW50byBuZWkgdGVtcGxhdGUuIG5vbiBhY2NldHRhIGNhcmF0dGVyaSBzcGVjaWFsaSBuZSBzcGF6aS4nXCJcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJDb2RlXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm0uQ29kZVwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic2V0Q29kZShmb3JtLkNvZGUpXCJcclxuICAgICAgICAgICAgICBkaXNhYmxlZD1cInRydWVcIlxyXG4gICAgICAgICAgICAgIHJlYWRvbmx5PVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PiBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj48L2Rpdj5cclxuICAgICAgICAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+Tm9tZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIk5hbWVcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybS5OYW1lXCJcclxuICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgIChmb2N1c291dCk9XCJzZXROYW1lKGZvcm0uTmFtZSlcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGkgdmlzdWFsaXp6YXppb25lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8ZXFwLXNlbGVjdFxyXG4gICAgICAgICAgICBjbGFzcz1cIm5hbWVTZWN0aW9uXCJcclxuICAgICAgICAgICAgW2VudW1EYXRhXT1cIkZvcm1TY2FsYXJUeXBlRW51bVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmb3JtLkZvcm1TY2FsYXJUeXBlXCJcclxuICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmb3JtRm9ybUdyb3VwXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cIidGb3JtU2NhbGFyVHlwZSdcIlxyXG4gICAgICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ2hhbmdlRm9ybVNjYWxhclR5cGUoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPkRlc2NyaXppb25lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiRGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybS5EZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInN0cmluZ1Nhbml0aXplcihmb3JtLk5hbWUpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJyb3cgaW5zZXJ0ZWRcIlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBmb3JtLkZvcm1TY2FsYXJUeXBlICYmXHJcbiAgICAgICAgICBmb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+IE5vbWUgc2V6aW9uZSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZEdyb3VwTmFtZVwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAoa2V5dXApPVwib25Gb3JtRmllbGRHcm91cE5hbWVLZXlVcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTNcIj5TZXppb25pIGluc2VyaXRlOjwvc3Bhbj5cclxuICAgICAgICAgIDx1bCBjbGFzcz1cInNlY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGdyb3VwTmFtZSBvZiBmb3JtLkZvcm1GaWVsZHNHcm91cHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlY3Rpb25JbnNlcnRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVGb3JtRmllbGRHcm91cE5hbWUoZ3JvdXBOYW1lLk5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgPmNsb3NlIDwvbWF0LWljb25cclxuICAgICAgICAgICAgICAgID57eyBncm91cE5hbWUuTmFtZSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICA8IS0tIElNUE9SVCAtLT5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIiF0aGlzLmZvcm1JRFwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tY2xlYXIgYnV0dG9uLW5leHQgbWUtMlwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIChjbGljayk9XCJpbXBvcnRNb2R1bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgSW1wb3J0YVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwhLS0gRU5EIElNUE9SVCAtLT5cclxuXHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIG1hdFN0ZXBwZXJOZXh0XHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZvcm1Hcm91cC5pbnZhbGlkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gREFUSSBHRU5FUkFMSSBERUxMQSBGT1JNIC0tPlxyXG5cclxuICA8IS0tI3JlZ2lvbiBBR0dJVU5UQSBERUkgQ0FNUEkgREVMTEEgRk9STSAtLT5cclxuICA8bWF0LXN0ZXAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItYWRkLWZpZWxkXCIgW2NvbXBsZXRlZF09XCJpc0ZpZWxkU3RlcENvbXBsZXRlZCgpXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPjwvZGl2PlxyXG4gICAgICA8bWF0LWxhYmVsPkNhbXBpIGRhIGluc2VyaXJlPC9tYXQtbGFiZWw+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuRmllbGREaWFsb2coKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2kgY2FtcG88L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lZCBtZS0yXCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbklubmVyRm9ybURpYWxvZygpXCJcclxuICAgICAgICAgICpuZ0lmPVwiIWlubmVyRm9ybU1hbmFnbWVudFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2kgZm9ybSBkaSBkZXR0YWdsaW88L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGVxcC10YWJsZVxyXG4gICAgICBjbGFzcz1cInRhYmxlXCJcclxuICAgICAgI2ZpZWxkc1RhYmxlXHJcbiAgICAgIFtjcmVhdGVNYXRDYXJkXT1cImZhbHNlXCJcclxuICAgICAgW2NvbHVtbnNdPVwiZmllbGRzQ29sdW1uc1wiXHJcbiAgICAgIFtkYXRhXT1cImZvcm0uRmllbGRzXCJcclxuICAgICAgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW4gY2FtcG8gaW5zZXJpdG8nXCJcclxuICAgICAgW3NlYXJjaFRleHRdPVwiJydcIlxyXG4gICAgPlxyXG4gICAgPC9lcXAtdGFibGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgcHJldmlvdXNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+XHJcbiAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHRcIlxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBtYXRTdGVwcGVyTmV4dFxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhaXNGaWVsZFN0ZXBDb21wbGV0ZWQoKVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZm9ybUZvcm1Hcm91cC5pbnZhbGlkIH1cIlxyXG4gICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiXHJcbiAgICAgID5cclxuICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtc3RlcD5cclxuICA8IS0tI2VuZHJlZ2lvbiBBR0dJVU5UQSBERUkgQ0FNUEkgREVMTEEgRk9STSAtLT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBwZXJJY29uPVwiZWRpdFwiIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgICA8bWF0LWxhYmVsPnt7IGluZGV4ICsgMSB9fTwvbWF0LWxhYmVsPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDwhLS0jcmVnaW9uIEFHR0lVTlRBIERFTExFIE9QRVJBWklPTkkgU1VJIFJFQ09SRCAtLT5cclxuICA8bWF0LXN0ZXA+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPjwvZGl2PlxyXG4gICAgICBBemlvbmkgYWdnaXVudGl2ZSBzdWkgcmVjb3JkXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGF6aW9uZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxlcXAtdGFibGVcclxuICAgICAgY2xhc3M9XCJ0YWJsZVwiXHJcbiAgICAgICNhY3Rpb25zT25SZWNvcmRUYWJsZVxyXG4gICAgICBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiXHJcbiAgICAgIFtjb2x1bW5zXT1cImFjdGlvbnNPblJlY29yZENvbHVtbnNcIlxyXG4gICAgICBbZGF0YV09XCJmb3JtLkFjdGlvbnNPblJlY29yZFwiXHJcbiAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuYSBhY3Rpb24gaW5zZXJpdGEnXCJcclxuICAgICAgW3NlYXJjaFRleHRdPVwiJydcIlxyXG4gICAgPlxyXG4gICAgPC9lcXAtdGFibGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYnV0dG9uc05leHREaXZcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgcHJldmlvdXNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+XHJcbiAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHRcIlxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBtYXRTdGVwcGVyTmV4dFxyXG4gICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKHRydWUpXCJcclxuICAgICAgPlxyXG4gICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIEFHR0lVTlRBIERFTExFIE9QRVJBWklPTkkgU1VJIFJFQ09SRCAtLT5cclxuXHJcbiAgPCEtLSNyZWdpb24gVklTVUFMSVpaQVpJT05FIEZPUk0gQ1JFQVRBIC0tPlxyXG4gIDxtYXQtc3RlcCBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1wcmV2aWV3XCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCJcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyggZm9ybUZvcm1Hcm91cC52YWxpZCAmJiBmb3JtLkZpZWxkcyAmJiBmb3JtLkZpZWxkcy5sZW5ndGggPiAwIClcIlxyXG4gICAgICA+PC9kaXY+XHJcbiAgICAgIEFudGVwcmltYVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8YWRkLWZvcm0tcmVjb3JkXHJcbiAgICAgICpuZ0lmPVwicHJldmlld0Zvcm0gJiYgZm9ybUNvbXBsZXRlZFwiXHJcbiAgICAgIFtmb3JtXT1cInByZXZpZXdGb3JtXCJcclxuICAgICAgW2NvbmZpZ3VyYXRpb25zXT1cInZpZXdDb25maWdcIlxyXG4gICAgICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIlxyXG4gICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICAgICAgW2luQ29uZmlnXT1cInRydWVcIlxyXG4gICAgICA+XHJcbiAgICA8L2FkZC1mb3JtLXJlY29yZD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBidXR0b24tbmV4dERpdlwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJtci0yIGJ1dHRvbi1leGl0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIG1hdFN0ZXBwZXJQcmV2aW91c1xyXG4gICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiXHJcbiAgICAgID5cclxuICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIChjbGljayk9XCJzYXZlRm9ybSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIFNhbHZhIGZvcm1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAtLT5cclxuXHJcbjwvbWF0LWhvcml6b250YWwtc3RlcHBlcj5cclxuXHJcbjwhLS0gRElBTE9HIEFHR0lVTlRBL01PRElGSUNBIENBTVBPIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0ZpZWxkPlxyXG4gIDxlcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGRcclxuICAgIFtmaWVsZF09XCJzZWxlY3RlZEZpZWxkXCJcclxuICAgIFtpbmRleEZpZWxkXT1cImluZGV4U2VsZWN0ZWRGaWVsZFwiXHJcbiAgICAoc2F2ZUZpZWxkRXZlbnQpPVwib25TYXZlRmllbGQoJGV2ZW50KVwiXHJcbiAgICBbYXZhaWxhYmxlRmllbGRzXT1cImZvcm0uRmllbGRzXCJcclxuICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiXHJcbiAgICBbZm9ybUZpZWxkc0dyb3Vwc109XCJcclxuICAgICAgZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcclxuICAgICAgICA/IGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1xyXG4gICAgICAgIDogbnVsbFxyXG4gICAgXCJcclxuXHJcbiAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIlxyXG4gID5cclxuICA8L2VxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIFZJU1VBTElaWkFSRSBMQSBDT0xPTk5BIERFTExBIFNFWklPTkUgTkVMTEEgVEFCRUxMQSBERUkgRklFTERTIC0tPlxyXG48bmctdGVtcGxhdGUgI2ZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cclxuICA8ZXFwLXNlbGVjdFxyXG4gICAgW2FycmF5RGF0YV09XCJmb3JtLkZvcm1GaWVsZHNHcm91cHNcIlxyXG4gICAgWyhuZ01vZGVsSW5wdXQpXT1cInJvdy5GaWVsZEdyb3VwXCJcclxuICAgIFthcnJheUtleVByb3BlcnR5XT1cIidOYW1lJ1wiXHJcbiAgICBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidOYW1lJ1wiXHJcbiAgICBwbGFjZWhvbGRlcj1cIlNlemlvbmVcIlxyXG4gICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIlxyXG4gID5cclxuICA8L2VxcC1zZWxlY3Q+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBQRVIgQUdHSVVOR0VSRS9NT0RJRklDQVJFIFVOQSBBQ1RJT04gU1VJIFJFQ09SRCBERUxMQSBGT1JNIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0FjdGlvbk9uUmVjb3JkPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHRoaXJkLW1vZGFsXCJcclxuICAgIHN0eWxlPVwibWF4LWhlaWdodDogNzB2aCAhaW1wb3J0YW50OyBvdmVyZmxvdy14OiBoaWRkZW47IG92ZXJmbG93LXk6IGF1dG9cIlxyXG4gID5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiYWN0aW9uT25SZWNvcmRGb3JtR3JvdXBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyB0aXRsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGUtc3RhbmRhcmRcIj5cclxuICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgIGluZGV4U2VsZWN0ZWRBY3Rpb24gIT0gbnVsbCAmJiBpbmRleFNlbGVjdGVkQWN0aW9uID49IDBcclxuICAgICAgICAgICAgICA/IFwiTW9kaWZpY2FcIlxyXG4gICAgICAgICAgICAgIDogXCJBZ2dpdW5naVwiXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgYXppb25lIHN1bCByZWNvcmRcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+IE5vbWUgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIk5hbWVcIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQWN0aW9uLk5hbWVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+IEljb25hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJJY29uXCJcclxuICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFjdGlvbi5JY29uXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtMlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5BemlvbmUgKEphdmFzY3JpcHQpPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYVxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgW3Jvd3NdPVwiM1wiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiQWN0aW9uXCJcclxuICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRBY3Rpb24uQWN0aW9uXCJcclxuICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImFjdGlvbkF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgKGtleXVwKT1cInNldEFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cInNldEFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMobnVsbClcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXkgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2FjdGlvbkF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC0yIG1iLTFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc0Zvcm1cIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gbWF0LXJhaXNlZC1idXR0b24gY2FuY2VsXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlRGlhbG9nQWN0aW9uT25SZWNvcmQoKVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBBbm51bGxhXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJtci0yIHNhdmVcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2F2ZUFjdGlvbk9uUmVjb3JkKClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uT25SZWNvcmRGb3JtR3JvdXAuaW52YWxpZFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBTYWx2YVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgQ09ORklHVVJBUkUgTEUgRk9STSBESSBERVRUQUdMSU8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nSW5uZXJGb3JtPlxyXG4gIDwhLS0gW2Zvcm1dPVwic2VsZWN0ZWRJbm5lckZvcm1cIlxyXG4gICAgW2lubmVyRm9ybU1hbmFnbWVudF09XCJ0cnVlXCJcclxuICAgIFtpbm5lckZvcm1SZWZdPVwiZGlhbG9nSW5uZXJGb3JtUmVmXCIgLS0+XHJcbiAgPGVxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3JcclxuICAgIFtQcm9qZWN0TmFtZV09XCJQcm9qZWN0TmFtZVwiXHJcbiAgICBbY29uZmlndXJhdGlvbnNdPVwiaW5uZXJGb3JtQ29uZmlnXCJcclxuICAgIChzYXZlRm9ybUV2ZW50KT1cIm9uU2F2ZU9yRXhpdElubmVyRm9ybSgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgSU1QT1JUIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0ltcG9ydD5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJpbXBvcnREaWFsb2dcIj5cclxuICAgIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJwLTIganVzdGlmeS1jb250ZW50LWFyb3VuZFwiPiBcclxuICAgICAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgIEltcG9ydFxyXG4gICAgICA8L21hdC1jYXJkLXRpdGxlPiAgICAgICAgXHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0yXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGNsYXNzPVwiaW5wdXQtZmlsZS1idG4gcGItMlwiIChjaGFuZ2UpPVwib25JbXBvcnQoJGV2ZW50KVwiIC8+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8bWF0LWNhcmQtZm9vdGVyIGNsYXNzPVwicC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tY2xlYXIgYnV0dG9uLWJhY2sgbWUtMlwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cImRpc2FibGVkXCJcclxuICAgICAgICAoY2xpY2spPVwiY2xvc2VJbXBvcnQoKVwiXHJcbiAgICAgID5cclxuICAgICAgICBBbm51bGxhXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|