@seniorsistemas/yms-integration 1.9.0 → 2.0.0
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/bundles/seniorsistemas-yms-integration.umd.js +48 -2
- package/bundles/seniorsistemas-yms-integration.umd.js.map +1 -1
- package/bundles/seniorsistemas-yms-integration.umd.min.js +1 -1
- package/bundles/seniorsistemas-yms-integration.umd.min.js.map +1 -1
- package/esm2015/src/erp-senior/core/erp-process-data/erp-process-data.js +1 -1
- package/esm2015/src/erp-senior/core/erp-process-data/erp-process-service.js +45 -1
- package/esm2015/src/erp-senior/recebimento/form/recebimento-form.component.js +2 -2
- package/esm2015/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.js +2 -2
- package/esm5/src/erp-senior/core/erp-process-data/erp-process-data.js +1 -1
- package/esm5/src/erp-senior/core/erp-process-data/erp-process-service.js +47 -1
- package/esm5/src/erp-senior/recebimento/form/recebimento-form.component.js +2 -2
- package/esm5/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.js +2 -2
- package/fesm2015/seniorsistemas-yms-integration.js +46 -2
- package/fesm2015/seniorsistemas-yms-integration.js.map +1 -1
- package/fesm5/seniorsistemas-yms-integration.js +48 -2
- package/fesm5/seniorsistemas-yms-integration.js.map +1 -1
- package/package.json +1 -1
- package/seniorsistemas-yms-integration.metadata.json +1 -1
- package/src/erp-senior/core/erp-process-data/erp-process-data.d.ts +1 -0
- package/src/erp-senior/core/erp-process-data/erp-process-service.d.ts +6 -0
|
@@ -405,7 +405,7 @@ var RecebimentoFormComponent = /** @class */ (function () {
|
|
|
405
405
|
if (this.isNew() || !this.enableRevalidation) {
|
|
406
406
|
return this.saveAndInit(start);
|
|
407
407
|
}
|
|
408
|
-
this.erpProcessData = this.erpProcessService.
|
|
408
|
+
this.erpProcessData = this.erpProcessService.builderErpProcessDataValidaNotaNoContrato(this.erpProcessData, this.formGroup);
|
|
409
409
|
this.erpProcessService.changeDataErp(this.erpProcessData);
|
|
410
410
|
return this.agendaService
|
|
411
411
|
.checarRevalidacao(this.erpProcessData)
|
|
@@ -1805,4 +1805,4 @@ var RecebimentoFormComponent = /** @class */ (function () {
|
|
|
1805
1805
|
return RecebimentoFormComponent;
|
|
1806
1806
|
}());
|
|
1807
1807
|
export { RecebimentoFormComponent };
|
|
1808
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjZWJpbWVudG8tZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMveW1zLWludGVncmF0aW9uLyIsInNvdXJjZXMiOlsic3JjL2VycC1zZW5pb3IvcmVjZWJpbWVudG8vZm9ybS9yZWNlYmltZW50by1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDeEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFxQixXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQVUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQVksTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxF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QVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzFGLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0UsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzVGLFVBQVUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hDLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFB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QUFqNURELElBaTVEQztTQWo1RFksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyaWZpY2FOb3RhZmlzY2FsIH0gZnJvbSAnLi4vLi4vY29yZS92ZXJpZmljYS1ub3RhLWZpc2NhbC92ZXJpZmljYU5vdGFGaXNjYWwnO1xuaW1wb3J0IHsgRXJwRm9ybUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLy4uLy4uL2NvcmUvZXJwLWZvcm0tY29uZmlnL2VycC1mb3JtLWNvbmZpZy1zZXJ2aWNlJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtRmllbGQsIElUb2tlbiB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBIb3RrZXksIEhvdGtleXNTZXJ2aWNlIH0gZnJvbSBcImFuZ3VsYXIyLWhvdGtleXNcIjtcbmltcG9ydCAqIGFzIF9tb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgRGlhbG9nU2VydmljZSwgU29ydE1ldGEgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmcvY29tcG9uZW50cy9jb21tb24vbWVzc2FnZXNlcnZpY2VcIjtcbmltcG9ydCB7IGVtcHR5LCBmb3JrSm9pbiwgb2YsIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY29uY2F0TWFwLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmluYWxpemUsIG1hcCwgbWVyZ2VNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWVsZEN1c3RvbWl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2ZpZWxkLWN1c3RvbWl6YXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgRm9jdXNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2ZvY3VzLnNlcnZpY2VcIjtcbmltcG9ydCB7IG9uTG9va3VwUmVxdWVzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb29rdXAtdXRpbHNcIjtcbmltcG9ydCB7IGRpYWxvZ0NvbmZpZywgaXNWYWxpZEZpbHRlciwgbWVyZ2VVbmlxdWUsIHVzZXJDYW5WaXN1YWxpemUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IE5vdGFGb3JtQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbm90YS1mb3JtL25vdGEtZm9ybS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEFnZW5kYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2FnZW5kYS9hZ2VuZGFcIjtcbmltcG9ydCB7IENvbnRyYXRvQ29tcHJhSXRlbSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2NvbnRyYXRvLWNvbXByYS1pdGVtL2NvbnRyYXRvLWNvbXByYS1pdGVtXCI7XG5pbXBvcnQgeyBDb250cmF0b0NvbXByYUR0byB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2NvbnRyYXRvLWNvbXByYS9jb250cmF0by1jb21wcmEtZHRvXCI7XG5pbXBvcnQgeyBDb250cmF0b0NvbXByYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9jb250cmF0by1jb21wcmEvY29udHJhdG8tY29tcHJhLnNlcnZpY2VcIjtcbmltcG9ydCB7IERlcml2YWNhbyB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2Rlcml2YWNhby9kZXJpdmFjYW9cIjtcbmltcG9ydCB7IERlcml2YWNhb1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9kZXJpdmFjYW8vZGVyaXZhY2FvLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZpbGlhbCB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2ZpbGlhbC9maWxpYWxcIjtcbmltcG9ydCB7IEZpbGlhbFNlcnZpY2UsIFBlc3F1aXNhckZpbGlhaXNJbnB1dCB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2ZpbGlhbC9maWxpYWwuc2VydmljZVwiO1xuaW1wb3J0IHsgUGVzc29hRW5kZXJlY28gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EtZW5kZXJlY28vcGVzc29hLWVuZGVyZWNvXCI7XG5pbXBvcnQgeyBQZXNzb2FFbmRlcmVjb1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EtZW5kZXJlY28vcGVzc29hLWVuZGVyZWNvLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBlc3NvYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2FcIjtcbmltcG9ydCB7IFBlc3NvYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EvcGVzc29hLnNlcnZpY2VcIjtcbmltcG9ydCB7IFByb2R1dG8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wcm9kdXRvL3Byb2R1dG9cIjtcbmltcG9ydCB7IFByb2R1dG9SZWNlYmltZW50b1BhcmFtcywgUHJvZHV0b1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wcm9kdXRvL3Byb2R1dG8uc2VydmljZVwiO1xuaW1wb3J0IHsgUmVjZWJpbWVudG9Db250cmF0byB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3JlY2ViaW1lbnRvLWNvbnRyYXRvL3JlY2ViaW1lbnRvXCI7XG5pbXBvcnQgeyBSZWNlYmltZW50b0NvbnRyYXRvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3JlY2ViaW1lbnRvLWNvbnRyYXRvL3JlY2ViaW1lbnRvLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zZ2VuaWEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy90cmFuc2dlbmlhL3RyYW5zZ2VuaWFcIjtcbmltcG9ydCB7IFRyYW5zZ2VuaWFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNnZW5pYS90cmFuc2dlbmlhLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNwb3J0YWRvcmEvdHJhbnNwb3J0YWRvcmFcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zcG9ydGFkb3JhL3RyYW5zcG9ydGFkb3JhLnNlcnZpY2VcIjtcbmltcG9ydCB7IFN0YXR1c0FnZW5kYSB9IGZyb20gXCIuLy4uLy4uL2NvcmUvZW51bXMvc3RhdHVzLWFnZW5kYVwiO1xuaW1wb3J0IHsgVGlwb05vdGFGaXNjYWwgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnVtcy90aXBvLW5vdGEtZmlzY2FsXCI7XG5pbXBvcnQgeyBUaXBvUGFydGljaXBhbnRlVHJhbnNnZW5pYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudW1zL3RpcG8tcGFydGljaXBhbnRlLXRyYW5zZ2VuaWFcIjtcbmltcG9ydCB7IE5vdGFWYWxpZGF0b3JTZXJ2aWNlLCBQZXNxdWlzYXJEb2N1bWVudG9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi9jb3JlL25vdGEtdmFsaWRhdG9yLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbnRyYXRvRm9ybUNvbXBvbmVudCB9IGZyb20gXCIuLi9jb250cmF0by1mb3JtL2NvbnRyYXRvLWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBSZWNlYmltZW50b0NoZWdhZGFWZWljdWxvT3ZlcnJpZGUgfSBmcm9tIFwiLi4vcmVjZWJpbWVudG8tY2hlZ2FkYS12ZWljdWxvLm92ZXJyaWRlXCI7XG5pbXBvcnQgeyBBZ2VuZGFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFcnBQcm9jZXNzRGF0YSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1wcm9jZXNzLWRhdGEvZXJwLXByb2Nlc3MtZGF0YVwiO1xuaW1wb3J0IHsgRXJwUHJvY2Vzc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtcHJvY2Vzcy1kYXRhL2VycC1wcm9jZXNzLXNlcnZpY2VcIjtcbmltcG9ydCB7IEhhc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2hhcy1jaGFuZ2UvaGFzLWNoYW5nZS1zZXJ2aWNlJztcblxuY29uc3QgbW9tZW50ID0gX21vbWVudDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdyZWNlYmltZW50by1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3JlY2ViaW1lbnRvLWZvcm0uY29tcG9uZW50Lmh0bWxcIixcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBdLFxuICAgIHN0eWxlVXJsczogWycuLi8uLi9lcnAtc2VuaW9yLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZWNlYmltZW50b0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHVibGljIGxvY2FsZUNvbmZpZzogYW55ID0ge307XG4gICAgcHVibGljIGN1cnJlbmN5TG9jYWxlT3B0aW9uczogYW55ID0ge307XG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgYWxsUGVybWlzc2lvbnM6IGFueSA9IHt9O1xuXG4gICAgcHVibGljIHZpc2libGVEaWFsb2cgPSBmYWxzZTtcbiAgICBwdWJsaWMgcXVhbnRpZGFkZVNlbGVjaW9uYWRhID0gMTtcblxuICAgIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgaXRlbUZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xuICAgIHB1YmxpYyBtYWluUGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBmaWxpYWxMb29rdXBTdWdnZXN0aW9uczogRmlsaWFsW107XG4gICAgcHVibGljIGZpbGlhbExvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiZW1wcmVzYS5ub21lXCJdO1xuICAgIHB1YmxpYyBmaWxpYWxBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIiwgXCJlbXByZXNhLm5vbWVcIl07XG4gICAgcHVibGljIGZpbGlhbExvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gICAgcHVibGljIGZpbGlhbFNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGZpbGlhbFNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBmaWxpYWxTZWFyY2hHcmlkRGF0YTogRmlsaWFsW107XG4gICAgcHVibGljIGZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIGZvcm5lY2Vkb3JMb29rdXBTdWdnZXN0aW9uczogUGVzc29hW107XG4gICAgcHVibGljIGZvcm5lY2Vkb3JMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiLCBcImNwZkNucGpcIl07XG4gICAgcHVibGljIGZvcm5lY2Vkb3JBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIiwgXCJzaXR1YWNhb1wiLCBcImNwZkNucGpcIiwgXCJ0aXBvUGFydGljaXBhbnRlXCJdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgZm9ybmVjZWRvclNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGZvcm5lY2Vkb3JTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvclNlYXJjaEdyaWREYXRhOiBQZXNzb2FbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvclNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIG9yaWdlbU1lcmNhZG9yaWFMb29rdXBTdWdnZXN0aW9uczogUGVzc29hRW5kZXJlY29bXTtcbiAgICBwdWJsaWMgb3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJjZXBcIiwgXCJlbmRlcmVjb1wiLCBcImVtcHJlc2EuZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJjZXBcIiwgXCJlbmRlcmVjb1wiLCBcIm51bWVyb1wiLCBcImNvbXBsZW1lbnRvXCIsIFwiY2lkYWRlLipcIiwgXCJiYWlycm9cIiwgXCJzaXR1YWNhb1wiLCBcImVtcHJlc2EuZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgb3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIG9yaWdlbU1lcmNhZG9yaWFTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgb3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEdyaWREYXRhOiBQZXNzb2FFbmRlcmVjb1tdO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgcHJvZHV0b0xvb2t1cFN1Z2dlc3Rpb25zOiBQcm9kdXRvW107XG4gICAgcHVibGljIHByb2R1dG9Mb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCIsIFwidGlwb1wiXTtcbiAgICBwdWJsaWMgcHJvZHV0b0FkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwiY29tcHJhZG9cIiwgXCJkZXNjcmljYW9cIiwgXCJwcm9kdXRvTWlzdG9cIiwgXCJzaXR1YWNhb1wiLCBcInRpcG9cIl07XG4gICAgcHVibGljIHByb2R1dG9Mb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHB1YmxpYyBwcm9kdXRvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgcHJvZHV0b1NlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBwcm9kdXRvU2VhcmNoR3JpZERhdGE6IFByb2R1dG9bXTtcbiAgICBwdWJsaWMgcHJvZHV0b1NlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIGFnZW5kYUxvb2t1cFN1Z2dlc3Rpb25zOiBBZ2VuZGFbXTtcbiAgICBwdWJsaWMgYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBhZ2VuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBwdWJsaWMgYWdlbmRhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgYWdlbmRhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgYWdlbmRhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGFnZW5kYVNlYXJjaEdyaWREYXRhOiBBZ2VuZGFbXTtcbiAgICBwdWJsaWMgYWdlbmRhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgZGVyaXZhY2FvTG9va3VwU3VnZ2VzdGlvbnM6IERlcml2YWNhb1tdO1xuICAgIHB1YmxpYyBkZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBkZXJpdmFjYW9BZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBwdWJsaWMgZGVyaXZhY2FvTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgZGVyaXZhY2FvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZGVyaXZhY2FvU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGRlcml2YWNhb1NlYXJjaEdyaWREYXRhOiBEZXJpdmFjYW9bXTtcbiAgICBwdWJsaWMgZGVyaXZhY2FvU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFMb29rdXBTdWdnZXN0aW9uczogVHJhbnNwb3J0YWRvcmFbXTtcbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwicGVzc29hLm5vbWVcIiwgXCJwZXNzb2EuY3BmQ25walwiXTtcbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcInBlc3NvYS5ub21lXCIsIFwicGVzc29hLmNwZkNucGpcIl07XG4gICAgcHVibGljIHRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWREYXRhOiBUcmFuc3BvcnRhZG9yYVtdO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIHRyYW5zZ2VuaWFMb29rdXBTdWdnZXN0aW9uczogVHJhbnNnZW5pYVtdO1xuICAgIHB1YmxpYyB0cmFuc2dlbmlhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBwdWJsaWMgdHJhbnNnZW5pYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyB0cmFuc2dlbmlhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgdHJhbnNnZW5pYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIHRyYW5zZ2VuaWFTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgdHJhbnNnZW5pYVNlYXJjaEdyaWREYXRhOiBUcmFuc2dlbmlhW107XG4gICAgcHVibGljIHRyYW5zZ2VuaWFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHB1YmxpYyBkaXNhYmxlQnV0dG9uU2F2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBkaXNhYmxlT3JkZXJzQnV0dG9uczogYm9vbGVhbiA9IHRydWU7XG4gICAgcHVibGljIGNyZWF0ZWRCeUVycDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyB0b3RhbEVpeG9zQ29udHJhdGFkb3M6IG51bWJlciA9IDA7XG4gICAgcHVibGljIHRvdGFsRWl4b3NDb21wb3NpY2FvOiBudW1iZXIgPSAwO1xuXG4gICAgcHVibGljIHRpcG9zTm90YTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogVGlwb05vdGFGaXNjYWwgfVtdID0gW1xuICAgICAgICB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50aXBvX25vdGFfZmlzY2FsX2VtcHJlc2FfanVyaWRpY2FcIiksIHZhbHVlOiBUaXBvTm90YUZpc2NhbC5FTVBSRVNBX0pVUklESUNBIH0sXG4gICAgICAgIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRpcG9fbm90YV9maXNjYWxfcHJvZHV0b3JfcnVyYWxcIiksIHZhbHVlOiBUaXBvTm90YUZpc2NhbC5QUk9EVVRPUl9SVVJBTCB9LFxuICAgIF07XG5cbiAgICBwdWJsaWMgc2F2ZUFuZEluaXRCdXR0b246IGFueTtcblxuICAgIEBJbnB1dCgpIHByaXZhdGUgYWdlbmRhOiBBZ2VuZGE7XG5cbiAgICBAVmlld0NoaWxkKFwiY3VzdG9tVGVtcGxhdGVcIilcbiAgICBwdWJsaWMgY3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKFwiY3VzdG9tRm9ybUZpZWxkc1wiKVxuICAgIHB1YmxpYyBjdXN0b21Gb3JtRmllbGRzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHVibGljIGNoYXZlTm90YUZpc2NhbDogc3RyaW5nO1xuICAgIHB1YmxpYyBlcnJvQ2hhdmVOb3RhID0gZmFsc2U7XG4gICAgcHVibGljIGVycm9Gb3JuZWNlZG9yZXMgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBub3Rhc1Rva2VuczogSVRva2VuW10gPSBbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvck5vdGFzVG9rZW5zOiBJVG9rZW5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yTm90YXMgPSBbXTtcblxuICAgIHB1YmxpYyBjb250cmF0b1NlbGVjaW9uYWRvOiBhbnkgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByaXZhdGUgZm9ybUNhcnJlZ2FkbzogYW55O1xuXG4gICAgcHJpdmF0ZSBlcnBQcm9jZXNzRGF0YTogRXJwUHJvY2Vzc0RhdGE7XG4gICAgcHJpdmF0ZSBlbmFibGVSZXZhbGlkYXRpb246IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGNvbnRyYXRvczogYW55O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVjZWJpbWVudG9TZXJ2aWNlOiBSZWNlYmltZW50b0NvbnRyYXRvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBob3RrZXlzU2VydmljZTogSG90a2V5c1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmllbGRDdXN0b21pemF0aW9uOiBGaWVsZEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZvY3VzU2VydmljZTogRm9jdXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZpbGlhbFNlcnZpY2U6IEZpbGlhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNwb3J0YWRvcmFTZXJ2aWNlOiBUcmFuc3BvcnRhZG9yYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGVzc29hRW5kZXJlY29TZXJ2aWNlOiBQZXNzb2FFbmRlcmVjb1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29udHJhdG9Db21wcmFTZXJ2aWNlOiBDb250cmF0b0NvbXByYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGVzc29hU2VydmljZTogUGVzc29hU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcm9kdXRvU2VydmljZTogUHJvZHV0b1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGVyaXZhY2FvU2VydmljZTogRGVyaXZhY2FvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWNlYmltZW50b0NoZWdhZGFPdmVycmlkZTogUmVjZWJpbWVudG9DaGVnYWRhVmVpY3Vsb092ZXJyaWRlLFxuICAgICAgICBwcml2YXRlIG5vdGFWYWxpZGF0b3JTZXJ2aWNlOiBOb3RhVmFsaWRhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2dlbmlhU2VydmljZTogVHJhbnNnZW5pYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhZ2VuZGFTZXJ2aWNlOiBBZ2VuZGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVycFByb2Nlc3NTZXJ2aWNlOiBFcnBQcm9jZXNzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnBGb3JtQ29uZmlnU2VydmljZTogRXJwRm9ybUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmVyaWZpY2FOb3RhRmlzY2FsOiBWZXJpZmljYU5vdGFmaXNjYWwsXG4gICAgICAgIHByaXZhdGUgaGFzQ2hhbmdlU2VydmljZTogSGFzQ2hhbmdlU2VydmljZSxcblxuICAgICkgeyB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5nZXRGb3JtR3JvdXAoKTtcbiAgICAgICAgdGhpcy5pdGVtRm9ybUdyb3VwID0gdGhpcy5nZXRJdGVtRm9ybSgpO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKVxuICAgICAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25GaWxpYWxWYWx1ZUNoYW5nZSk7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKVxuICAgICAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVyaXZhY2FvID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZGVyaXZhY2FvXCIpLnZhbHVlIGFzIERlcml2YWNhbztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhZGVyaXZhY2FvICYmIGRlcml2YWNhby5wcm9kdXRvLmlkID09PSB2YWx1ZS5pZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAodmFsdWUgPT4gdGhpcy5kZXJpdmFjYW9TZXJ2aWNlLmxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeTogYHByb2R1dG8uaWQgZXEgJyR7dmFsdWUuaWR9JyBhbmQgc2l0dWFjYW8gZXEgJ0FUSVZPJ2AsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDFcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29udGVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5zZXRWYWx1ZShjb250ZW50c1swXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZGVyaXZhY2FvXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5vblJvdXRlRGF0YUNoYW5nZShkYXRhKSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh7IGFnZW5kYSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoYWdlbmRhID09ICduZXcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXNjYXJGaWxpYWwoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRSZWNlYmltZW50byhhZ2VuZGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAuZ2V0KCd0cmFuc3BvcnRhZG9yYScpXG4gICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAuZ2V0KCd0cmFuc2dlbmlhJylcbiAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25DaGFuZ2VSZXZhbGlkYXRpb24pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgIC5nZXQoJ2Zvcm5lY2Vkb3JlcycpXG4gICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZmlsaWFsU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yU2VhcmNoRmllbGRzID0gdGhpcy5nZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZm9ybmVjZWRvclNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEZvcm5lY2Vkb3JTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRPcmlnZW1NZXJjYWRvcmlhRmllbGRzKCk7XG4gICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldE9yaWdlbU1lcmNhZG9yaWFHcmlkRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5wcm9kdXRvU2VhcmNoRmllbGRzID0gdGhpcy5nZXRQcm9kdXRvU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMucHJvZHV0b1NlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFByb2R1dG9TZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5hZ2VuZGFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLmFnZW5kYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLmRlcml2YWNhb1NlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0RGVyaXZhY2FvU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0RGVyaXZhY2FvU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLnRyYW5zZ2VuaWFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldFRyYW5zZ2VuaWFTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy50cmFuc2dlbmlhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0VHJhbnNnZW5pYVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLnNldEhvdGtleXMoKTtcblxuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VHJhbnNwb3J0YWRvcmEodGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQuY25waik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudmVpY3VsbyA/IHRoaXMuYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICAgICAgY29uc3Qgc3RhdHVzQWdlbmRhID0gW1xuICAgICAgICAgICAgXCJBR1VBUkRBTkRPX0NPTkZJUk1BQ0FPX1NPTElDSVRBTlRFXCIsXG4gICAgICAgICAgICBcIkFHRU5EQURPXCIsXG4gICAgICAgICAgICBcIkFHVUFSREFORE9fQ09ORklSTUFDQU9cIixcbiAgICAgICAgICAgIFwiRU1fRVhFQ1VDQU9cIixcbiAgICAgICAgICAgIFwiUkVKRUlUQURPX1BPUl9WQUxJREFDQU9cIixcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgIXN0YXR1c0FnZW5kYS5pbmNsdWRlcyh0aGlzLmFnZW5kYS5zdGF0dXMpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVCdXR0b25TYXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuY3VycmVudC5zdWJzY3JpYmUobWVzc2FnZSA9PiB0aGlzLmVycFByb2Nlc3NEYXRhID0gbWVzc2FnZSk7XG4gICAgICAgIHRoaXMuZXJwRm9ybUNvbmZpZ1NlcnZpY2UuY3VycmVudC5zdWJzY3JpYmUobWVzc2FnZSA9PiB0aGlzLmVuYWJsZVJldmFsaWRhdGlvbiA9IG1lc3NhZ2UpO1xuXG4gICAgICAgIHRoaXMudmVyaWZpY2FTZVRlbUFsdGVyYWNhbygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmVyaWZpY2FTZVRlbUFsdGVyYWNhbygpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtQ2FycmVnYWRvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25DaGFuZ2VSZXZhbGlkYXRpb24gPSAoXykgPT4ge1xuICAgICAgICBpZiAodGhpcy5lcnBQcm9jZXNzRGF0YSAmJiB0aGlzLmZvcm1Hcm91cCkge1xuICAgICAgICAgICAgdGhpcy5lcnBQcm9jZXNzRGF0YSA9IHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuYnVpbGRlckVycFByb2Nlc3NEYXRhKHRoaXMuZXJwUHJvY2Vzc0RhdGEsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICAgICAgICAgIHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuY2hhbmdlRGF0YSh0aGlzLmVycFByb2Nlc3NEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgaW5wdXRMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbnB1dCA9IEFycmF5LmZyb20oaW5wdXRMaXN0KS5maW5kKChmOiBhbnkpID0+ICFmLmRpc2FibGVkKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSW5wdXQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5yZWNlYmltZW50b0NoZWdhZGFPdmVycmlkZS5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5pdCcpO1xuICAgICAgICB0aGlzLmNyZWF0ZWRCeUVycERpc2FibGVGb3JtKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yZWNlYmltZW50b0NoZWdhZGFPdmVycmlkZS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlZEJ5RXJwRGlzYWJsZUZvcm0oKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU9yZGVyc0J1dHRvbnMgPSB0aGlzLmFnZW5kYS5jcmVhdGVkQnlFcnA7XG4gICAgICAgIGlmICh0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS5jcmVhdGVkQnlFcnApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnZmlsaWFsJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdwcm9kdXRvJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdkZXJpdmFjYW8nKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVGb3JuZWNlZG9yZXMoKTtcblxuICAgICAgICAgICAgaWYgKCEhdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNwb3J0YWRvcmFcIikudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3RyYW5zcG9ydGFkb3JhJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVGb3JuZWNlZG9yZXMoKSB7ICAgICAgICBcbiAgICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZvckVhY2goZm9ybSA9PiBmb3JtLmdldChcImZvcm5lY2Vkb3JcIikuZGlzYWJsZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0SG90a2V5cygpIHtcbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K3hcIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmV4Y2x1aXIpIHRoaXMub25EZWxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtzXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc05ldygpIHx8IHRoaXMucGVybWlzc2lvbnMuZWRpdGFyKSB0aGlzLm9uU2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K2NcIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJsdXJDaGF2ZU5vdGFGaXNjYWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnZlcmlmaWNhTm90YUZpc2NhbC52ZXJpZmljYVNlTm90YUZpc2NhbEVzdGFEdXBsaWNhZGEodGhpcy5jaGF2ZU5vdGFGaXNjYWwsIHRoaXMuY29udHJhdG9zLCB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2VucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlTm90YUVycm9yKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jaGF2ZU5vdGFGaXNjYWw7XG4gICAgICAgIGlmICghIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUJ1c2NhbmRvTm90YSgpO1xuICAgICAgICAgICAgdGhpcy5ub3RhVmFsaWRhdG9yU2VydmljZS5wZXNxdWlzYXJEb2N1bWVudG9WYWxpZGFOb3RhRW1Vc28oe1xuICAgICAgICAgICAgICAgIGZpbGlhbElkOiAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlICYmIHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZS5pZCkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgICBjaGF2ZURvY3VtZW50bzogdmFsdWUudHJpbSgpXG4gICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB0aGlzLmFkaWNpb25hck5vdmFOb3RhKHJlc3BvbnNlKSk7XG4gICAgICAgIH0gXG4gICAgfVxuXG4gICAgcHVibGljIGlzTmV3KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuZm9ybUdyb3VwLnZhbHVlLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVTdWdnZXN0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZS5mb3JuZWNlZG9yKSB7XG4gICAgICAgICAgICB2YWx1ZS5mb3JuZWNlZG9yLmxhYmVsID0gdGhpcy5nZXRTdWdnZXN0aW9uVmFsdWUoXG4gICAgICAgICAgICAgICAgW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJub21lXCIsIFwic2l0dWFjYW9cIl0sXG4gICAgICAgICAgICAgICAgXCJmb3JuZWNlZG9yXCIsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmZvcm5lY2Vkb3IubGFiZWwudHJpbSgpID09PSB0aGlzLmZvcm5lY2Vkb3JMb29rdXBTZXBhcmF0b3IudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLmZvcm5lY2Vkb3IubGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUucHJvZHV0bykge1xuICAgICAgICAgICAgdmFsdWUucHJvZHV0by5sYWJlbCA9IHRoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlKFxuICAgICAgICAgICAgICAgIFtcImlkXCIsIFwiY29kaWdvXCIsIFwiY29tcHJhZG9cIiwgXCJkZXNjcmljYW9cIiwgXCJwcm9kdXRvTWlzdG9cIiwgXCJzaXR1YWNhb1wiLCBcInRpcG9cIl0sXG4gICAgICAgICAgICAgICAgXCJwcm9kdXRvXCIsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdXRvTG9va3VwU2VwYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHZhbHVlLnByb2R1dG8ubGFiZWwudHJpbSgpID09PSB0aGlzLnByb2R1dG9Mb29rdXBTZXBhcmF0b3IudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLnByb2R1dG8ubGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUuYWdlbmRhKSB7XG4gICAgICAgICAgICB2YWx1ZS5hZ2VuZGEubGFiZWwgPSB0aGlzLmdldFN1Z2dlc3Rpb25WYWx1ZShbXCJpZFwiLCBcImRlc2NyaWNhb1wiXSwgXCJhZ2VuZGFcIiwgdmFsdWUsIHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5hZ2VuZGEubGFiZWwudHJpbSgpID09PSB0aGlzLmFnZW5kYUxvb2t1cFNlcGFyYXRvci50cmltKCkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUuYWdlbmRhLmxhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmRlcml2YWNhbykge1xuICAgICAgICAgICAgdmFsdWUuZGVyaXZhY2FvLmxhYmVsID0gdGhpcy5nZXRTdWdnZXN0aW9uVmFsdWUoXG4gICAgICAgICAgICAgICAgW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl0sXG4gICAgICAgICAgICAgICAgXCJkZXJpdmFjYW9cIixcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5kZXJpdmFjYW8ubGFiZWwudHJpbSgpID09PSB0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvci50cmltKCkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUuZGVyaXZhY2FvLmxhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN1Z2dlc3Rpb25WYWx1ZShkaXNwbGF5RmllbGRzOiBzdHJpbmdbXSwgb3duZXJFbnRpdHk6IHN0cmluZywgdmFsdWU6IGFueSwgc2VwYXJhdG9yOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgIC5tYXAoZmllbGQgPT4gdGhpcy5nZXRQcm9wKHZhbHVlLCBgJHtvd25lckVudGl0eX0uJHtmaWVsZH1gKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYzogYW55LCB2YWw6IGFueSkgPT4gYCR7YWNjfSR7c2VwYXJhdG9yfSR7dmFsfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvdXRlRGF0YUNoYW5nZShkYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW5jeVN5bWJvbCwgdGhvdXNhbmRzU2VwYXJhdG9yLCBkZWNpbWFsU2VwYXJhdG9yIH0gPSBkYXRhLmxvY2FsZUNvbmZpZy5udW1iZXI7XG5cbiAgICAgICAgdGhpcy5sb2NhbGVDb25maWcgPSBkYXRhLmxvY2FsZUNvbmZpZztcbiAgICAgICAgdGhpcy5jdXJyZW5jeUxvY2FsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhbGlnbjogXCJsZWZ0XCIsXG4gICAgICAgICAgICBwcmVmaXg6IGN1cnJlbmN5U3ltYm9sLFxuICAgICAgICAgICAgdGhvdXNhbmRzOiB0aG91c2FuZHNTZXBhcmF0b3IsXG4gICAgICAgICAgICBkZWNpbWFsOiBkZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gZGF0YS5hbGxQZXJtaXNzaW9ucy5yZWNlYmltZW50bztcbiAgICAgICAgdGhpcy5hbGxQZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnM7XG4gICAgICAgIC8vdGhpcy52YWxpZGF0ZVZpc3VhbGl6YXRpb24oKTtcbiAgICAgICAgaWYgKGRhdGEuZW50aXR5KSB7XG4gICAgICAgICAgICBjb25zdCBjYW5FZGl0ID0gdGhpcy5wZXJtaXNzaW9ucy5lZGl0YXI7XG4gICAgICAgICAgICBpZiAoIWNhbkVkaXQpIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBSZWNlYmltZW50b0NvbnRyYXRvLmZyb21EdG8oZGF0YS5lbnRpdHkpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdWdnZXN0aW9ucyh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3IFJlY2ViaW1lbnRvQ29udHJhdG8oKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuZ29CYWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VuZEZpbGUoZmlsZXNUb0RlbGV0ZTogYW55LCBmaWxlc1RvQ29tbWl0OiBhbnlbXSkge1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlczogYW55W10gPSBbXTtcblxuICAgICAgICBpZiAoIXRoaXMuZmllbGRDdXN0b21pemF0aW9uLmlzRW1wdHkoZmlsZXNUb0RlbGV0ZSkpIHtcbiAgICAgICAgICAgIG9ic2VydmFibGVzLnB1c2godGhpcy5maWVsZEN1c3RvbWl6YXRpb24uZGVsZXRlRmlsZXMoZmlsZXNUb0RlbGV0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShmaWxlc1RvQ29tbWl0KSkge1xuICAgICAgICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5jb21taXRGaWxlcyhmaWxlc1RvQ29tbWl0KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZmllbGRDdXN0b21pemF0aW9uLmlzRW1wdHkob2JzZXJ2YWJsZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4ob2JzZXJ2YWJsZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblNhdmUoc3RhcnQ/OiBib29sZWFuKSB7XG4gICAgICAgIFxuICAgICAgICBpZiAoKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9Gb3JuZWNlZG9yZXMgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyh0aGlzLmZvcm1Hcm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTmV3KCkgIHx8ICF0aGlzLmVuYWJsZVJldmFsaWRhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFuZEluaXQoc3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lcnBQcm9jZXNzRGF0YSA9IHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuYnVpbGRlckVycFByb2Nlc3NEYXRhKHRoaXMuZXJwUHJvY2Vzc0RhdGEsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICAgICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhRXJwKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAgICAgICAuY2hlY2FyUmV2YWxpZGFjYW8odGhpcy5lcnBQcm9jZXNzRGF0YSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVxdWVyUmV2YWxpZGFjYW8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHVhbGl6YUFnZW5kYVBhcmFSZWplaXRhZG9Qb3JWYWxpZGFjYW8oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFuZEluaXQoc3RhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXR1YWxpemFBZ2VuZGFQYXJhUmVqZWl0YWRvUG9yVmFsaWRhY2FvKCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uYWdlbmRhX3JldmFsaWRhY2FvX3RpdGxlXCIpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5wYXRpby5hZ2VuZGFfcmV2YWxpZGFjYW9fbWVzc2FnZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5kYS5zdGF0dXMgPSBTdGF0dXNBZ2VuZGEuUkVKRUlUQURPX1BPUl9WQUxJREFDQU87XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGEubW90b3Jpc3RhID0ge2lkOiB0aGlzLmVycFByb2Nlc3NEYXRhLm1vdG9yaXN0YUlkfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5kYS52ZWljdWxvID0ge2lkOiB0aGlzLmVycFByb2Nlc3NEYXRhLnZlaWN1bG9JZH07XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5hdHVhbGl6YXJBZ2VuZGEodGhpcy5hZ2VuZGEpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKF8pID0+IHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL2NoZWdhZGEtdmVpY3Vsb1wiXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWplY3Q6ICgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVBbmRJbml0KHN0YXJ0OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImlkXCIpLnNldFZhbHVlKHZhbHVlLmlkIHx8IG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICYmIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbi5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3VjY2Vzc01lc3NhZ2UoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIHNldmVyaXR5OiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJzYXZlZF9tZXNzYWdlX3RpdGxlXCIpLFxuICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwic2F2ZWRfbWVzc2FnZV9jb250ZW50XCIpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EZWxldGUoKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlbGV0ZV9jb25maXJtYXRpb25fbWVzc2FnZVwiKSxcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVsZXRlX2NvbmZpcm1hdGlvbl90aXRsZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmdldERlbGV0ZU9ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VHJhbnNwb3J0YWRvcmEodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNucGogPSB2YWx1ZS5yZXBsYWNlKCcuJywgJycpLnJlcGxhY2UoJy8nLCAnJykucmVwbGFjZSgnLScsICcnKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gYHBlc3NvYS5jcGZDbnBqIGVxICcke2NucGp9J2A7XG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZS5saXN0KHsgZmlsdGVyUXVlcnksIHBhZ2U6IDAsIHNpemU6IDEwIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBjb250ZW50c1swXS5jb2RpZ28gPyBjb250ZW50c1swXS5jb2RpZ28udG9TdHJpbmcoKSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBjb250ZW50c1swXS5kZXNjcmljYW8gPyBjb250ZW50c1swXS5kZXNjcmljYW8udG9TdHJpbmcoKSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXNjcmlwdGlvbi50cmltKCkgJiYgIWNvZGUudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbMF0ubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5bXMuZXJwLmRlcml2YWNhb19zZW1fZGVzY3JpY2FvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzWzBdLmxhYmVsID0gYCR7Y29kZX0gLSAke2Rlc2NyaXB0aW9ufWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3RyYW5zcG9ydGFkb3JhJykuc2V0VmFsdWUoY29udGVudHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJvcChvYmo6IGFueSwgcGF0aDogYW55KSB7XG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKHJlc3VsdDogYW55LCBwcm9wOiBhbnkpID0+IChyZXN1bHRbcHJvcF0gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiByZXN1bHRbcHJvcF0pLCBvYmopO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWNlYmltZW50byhhZ2VuZGFJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucmVjZWJpbWVudG9TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7XG4gICAgICAgICAgICAgICAgZmlsdGVyUXVlcnk6IGBhZ2VuZGEuaWQgZXEgJyR7YWdlbmRhSWR9J2AsXG4gICAgICAgICAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgICAgICAgICBwYWdlOiAwXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29udGVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVzY2FyRmlsaWFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb250cmF0YWRvcyA9IGNvbnRlbnRzWzBdLmVpeG9zIHx8IDA7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbEVpeG9zQ29tcG9zaWNhbyA9IGNvbnRlbnRzWzBdLmFnZW5kYSAmJiBjb250ZW50c1swXS5hZ2VuZGEudmVpY3Vsb1xuICAgICAgICAgICAgICAgICAgICA/IGNvbnRlbnRzWzBdLmFnZW5kYS52ZWljdWxvLmVpeG9zIHx8IDAgOiAwO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWJpbWVudG8gPSBSZWNlYmltZW50b0NvbnRyYXRvLmZyb21EdG8oY29udGVudHNbMF0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUocmVjZWJpbWVudG8pO1xuXG4gICAgICAgICAgICAgICAgcmVjZWJpbWVudG8uZm9ybmVjZWRvcmVzLmZvckVhY2goZm9ybmVjZWRvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEZvcm5lY2Vkb3JGb3JtKGZvcm5lY2Vkb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3JlcygpLnB1c2goZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9ybmVjZWRvci5jb250cmF0b3MuZm9yRWFjaChjb250cmF0byA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cmF0b0Zvcm0gPSB0aGlzLmdldENvbnRyYXRvRm9ybShjb250cmF0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyYXRvcyhmb3JtKS5wdXNoKGNvbnRyYXRvRm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYXRvLml0ZW5zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbUZvcm0gPSB0aGlzLmdldEl0ZW1Gb3JtKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0SXRlbnNDb250cmF0byhjb250cmF0b0Zvcm0pLnB1c2goaXRlbUZvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYXRvLm5vdGFzLmZvckVhY2gobm90YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90YUZvcm0gPSB0aGlzLmdldE5vdGFGb3JtKG5vdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm90YXMoY29udHJhdG9Gb3JtKS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZWRCeUVycERpc2FibGVGb3JtKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWxpYWxMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAucmVkdWNlKChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IHZhbHVlLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH0sIHsgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLCBwYWdpbmE6IHsgbGltaXQ6IDEwLCBvZmZzZXQ6IDAgfSB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dCk7XG5cbiAgICAgICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdEZpbGlhaXMoZmlsdGVySW5wdXQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4gdGhpcy5maWxpYWxMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuZmlsaWFpcy5tYXAoRmlsaWFsLmZyb21EdG8pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWxpYWxTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQ6IFNvcnRNZXRhW10gPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBzb3J0Rm9ybWF0dGVkID0gISEoc29ydCB8fCBbXSkubGVuZ3RoICYmIHsgY2FtcG86IHNvcnRbMF0uZmllbGQsIG9yZGVuYWNhbzogc29ydFswXS5vcmRlciA+IDAgPyAnQXNjJyA6ICdEZXNjJyB9O1xuICAgICAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAucmVkdWNlKChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH0sIHsgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLCBwYWdpbmE6IHsgbGltaXQ6IHJvd3MsIG9mZnNldDogcGFnZSwgbGlzdGFPcmRlbmFjYW86IHNvcnRGb3JtYXR0ZWQgPyBbeyAuLi4oc29ydEZvcm1hdHRlZCkgfV0gOiBudWxsIH0gfSBhcyBQZXNxdWlzYXJGaWxpYWlzSW5wdXQpO1xuXG4gICAgICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaEdyaWREYXRhID0gbGlzdC5maWxpYWlzLm1hcChGaWxpYWwuZnJvbUR0byk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnF0ZFRvdGFsUmVnaXN0cm9zO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRm9ybmVjZWRvckxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzb3J0ID0gdGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7IGZpZWxkLCBvcmRlcjogMSB9KSk7XG5cbiAgICAgICAgbGV0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBvciBcIik7XG5cbiAgICAgICAgZmlsdGVyUXVlcnkgPSBgKCR7ZmlsdGVyUXVlcnl9KSR7ISFmaWx0ZXJRdWVyeSA/ICcgYW5kICcgOiBcIlwifXNpdHVhY2FvIGVxICdBVElWTycgYW5kIGZvcm5lY2Vkb3IgZXEgdHJ1ZWA7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuZm9ybmVjZWRvckFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMucGVzc29hU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMuZm9ybmVjZWRvckxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvckxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZvcm5lY2Vkb3JTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5LmNvbmNhdChgJHshIWZpbHRlclF1ZXJ5ID8gJyBhbmQgJyA6IFwiXCJ9c2l0dWFjYW8gZXEgJ0FUSVZPJyBhbmQgZm9ybmVjZWRvciBlcSB0cnVlYCk7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuZm9ybmVjZWRvckFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMucGVzc29hU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMuZm9ybmVjZWRvckxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvclNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm5lY2Vkb3JTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PcmlnZW1NZXJjYWRvcmlhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nLCBmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pKTtcblxuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldE9yaWdlbU1lcmNhZG9yaWFGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBmaWx0ZXJRdWVyeSA9IGAoJHtmaWx0ZXJRdWVyeX0pJHshIWZpbHRlclF1ZXJ5ID8gJyBhbmQgJyA6ICcnfXNpdHVhY2FvIGVxICdBVElWTycgYW5kIHBlc3NvYS5pZCBlcSAnJHtmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLmlkfSdgO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLnBlc3NvYUVuZGVyZWNvU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk9yaWdlbU1lcmNhZG9yaWFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnksIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldE9yaWdlbU1lcmNhZG9yaWFGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5LmNvbmNhdChgJHshIWZpbHRlclF1ZXJ5ID8gJyBhbmQgJyA6ICcnfXNpdHVhY2FvIGVxICdBVElWTycgYW5kIHBlc3NvYS5pZCBlcSAnJHtmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLmlkfSdgKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5vcmlnZW1NZXJjYWRvcmlhQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5wZXNzb2FFbmRlcmVjb1NlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbih0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlY1BhZ2luYShmaXJzdDogbnVtYmVyLCByb3dzOiBudW1iZXIsIHNvcnQ6IGFueSkge1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBvcmRlckJ5ID0gc29ydCAmJiBzb3J0Lmxlbmd0aCBcbiAgICAgICAgICAgID8gc29ydC5tYXAoKHM6IGFueSkgPT4gKHsgY2FtcG86IHMuZmllbGQsIG9yZGVuYWNhbzogcy5vcmRlciA9PT0gMSA/ICdBc2MnIDogJ0Rlc2MnIH0pKSBcbiAgICAgICAgICAgIDogW107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvZmZzZXQ6IHBhZ2UsXG4gICAgICAgICAgICBsaW1pdDogcm93cyxcbiAgICAgICAgICAgIGxpc3RhT3JkZW5hY2FvOiBvcmRlckJ5XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qcm9kdXRvTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbGlhbCA9IHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZTtcbiAgICAgICAgY29uc3QgdGlwb0FnZW5kYW1lbnRvID0gdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvO1xuXG4gICAgICAgIHRoaXMucHJvZHV0b1NlcnZpY2VcbiAgICAgICAgICAgIC5saXN0UHJvZHV0b3NSZWNlYmltZW50byh7XG4gICAgICAgICAgICAgICAgcGVzcXVpc2E6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGVtcHJlc2FJZDogISFmaWxpYWwgPyBmaWxpYWwuZW1wcmVzYS5pZCA6IG51bGwsXG4gICAgICAgICAgICAgICAgZmlsaWFsSWQ6ICEhZmlsaWFsID8gZmlsaWFsLmlkIDogbnVsbCxcbiAgICAgICAgICAgICAgICB0aXBvQWdlbmRhbWVudG9JZDogISF0aXBvQWdlbmRhbWVudG8gPyB0aXBvQWdlbmRhbWVudG8uaWQgOiBudWxsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1dG9Mb29rdXBTdWdnZXN0aW9ucyA9IChsaXN0LnByb2R1dG9zIHx8IFtdKS5tYXAoKHByb2R1dG86IGFueSkgPT4gUHJvZHV0by5mcm9tRHRvKHByb2R1dG8pKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblByb2R1dG9TZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQ6IFNvcnRNZXRhW10gPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBzb3J0Rm9ybWF0dGVkID0gISEoc29ydCB8fCBbXSkubGVuZ3RoICYmIHsgY2FtcG86IHNvcnRbMF0uZmllbGQsIG9yZGVuYWNhbzogc29ydFswXS5vcmRlciA+IDAgPyAnQXNjJyA6ICdEZXNjJyB9O1xuICAgICAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuZ2V0UHJvZHV0b1NlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLnJlZHVjZSgoYSwgeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5JbnRlZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogYCR7dmFsdWV9YC5yZXBsYWNlKC9cXEQvLCBcIlwiKSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IHZhbHVlIH07XG4gICAgICAgICAgICB9LCB7IHBhZ2luYTogeyBsaW1pdDogcm93cywgb2Zmc2V0OiBwYWdlLCBsaXN0YU9yZGVuYWNhbzogc29ydEZvcm1hdHRlZCA/IFt7IC4uLihzb3J0Rm9ybWF0dGVkKSB9XSA6IG51bGwgfSB9IGFzIFByb2R1dG9SZWNlYmltZW50b1BhcmFtcyk7XG5cbiAgICAgICAgY29uc3QgZmlsaWFsID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlO1xuICAgICAgICBjb25zdCB0aXBvQWdlbmRhbWVudG8gPSB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG87XG5cbiAgICAgICAgdGhpcy5wcm9kdXRvU2VydmljZVxuICAgICAgICAgICAgLmxpc3RQcm9kdXRvc1JlY2ViaW1lbnRvKHtcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXJJbnB1dCxcbiAgICAgICAgICAgICAgICBlbXByZXNhSWQ6ICEhZmlsaWFsID8gZmlsaWFsLmVtcHJlc2EuaWQgOiBudWxsLFxuICAgICAgICAgICAgICAgIGZpbGlhbElkOiAhIWZpbGlhbCA/IGZpbGlhbC5pZCA6IG51bGwsXG4gICAgICAgICAgICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6ICEhdGlwb0FnZW5kYW1lbnRvID8gdGlwb0FnZW5kYW1lbnRvLmlkIDogbnVsbFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1dG9TZWFyY2hUb3RhbFJlY29yZHMgPSByZXMucXRkVG90YWxSZWdpc3Ryb3M7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdXRvU2VhcmNoR3JpZERhdGEgPSByZXMucHJvZHV0b3MubWFwKFByb2R1dG8uZnJvbUR0byk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EZXJpdmFjYW9Mb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ydCA9IHRoaXMuZGVyaXZhY2FvTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7IGZpZWxkLCBvcmRlcjogMSB9KSk7XG5cbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldERlcml2YWNhb1NlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuZGVyaXZhY2FvQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5kZXJpdmFjYW9TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5kZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbih0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRGVyaXZhY2FvU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldERlcml2YWNhb1NlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuZGVyaXZhY2FvQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5kZXJpdmFjYW9TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5kZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbih0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVHJhbnNwb3J0YWRvcmFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgb25Mb29rdXBSZXF1ZXN0KHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMsIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yLCB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZSwgdmFsdWUpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UcmFuc3BvcnRhZG9yYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuXG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbih0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVHJhbnNnZW5pYUxvb2t1cFJlcXVlc3QodmFsdWU6IGFueSkge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy5nZXRUcmFuc2dlbmlhU2VhcmNoRmllbGRzKCksIHRoaXMudHJhbnNnZW5pYUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMudHJhbnNnZW5pYUFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy50cmFuc2dlbmlhTG9va3VwU2VwYXJhdG9yLCB0aGlzLnRyYW5zZ2VuaWFTZXJ2aWNlLCB2YWx1ZSxcbiAgICAgICAgICAgIGBlbXByZXNhLmlkIGVxICcke3RoaXMuZm9ybUdyb3VwLmdldCgnZmlsaWFsJykudmFsdWUuZW1wcmVzYS5pZH0nIGFuZCB0aXBvUGFydGljaXBhbnRlIGVxICcke3RoaXMuZ2V0VGlwb1RyYW5zZ2VuaWEoKX0nYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB0aGlzLnRyYW5zZ2VuaWFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRyYW5zZ2VuaWFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0VHJhbnNnZW5pYVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy50cmFuc2dlbmlhTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy50cmFuc2dlbmlhQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy50cmFuc2dlbmlhU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNnZW5pYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy50cmFuc2dlbmlhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2dlbmlhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNnZW5pYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGb3JuZWNlZG9yKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHRoaXMuZXJyb0Zvcm5lY2Vkb3JlcyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRGb3JuZWNlZG9yRm9ybShkYXRhKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmVGb3JuZWNlZG9yKGZvcm0pO1xuICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3JlcygpLnB1c2goZm9ybSk7XG4gICAgICAgIHJldHVybiBmb3JtO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVGb3JuZWNlZG9yKGNvbnRyb2w6IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9mb3JuZWNlZG9yX2hlYWRlclwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9mb3JuZWNlZG9yX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Rm9ybmVjZWRvcmVzKCkuY29udHJvbHMuaW5kZXhPZihjb250cm9sKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3JlcygpLnJlbW92ZUF0KGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm5lY2Vkb3JlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbnRyYXRvKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlXG4gICAgICAgICAgICAub3BlbihDb250cmF0b0Zvcm1Db21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAuLi5kaWFsb2dDb25maWcsXG4gICAgICAgICAgICAgICAgaGVhZGVyOiAnQWRpY2lvbmFyIENvbnRyYXRvJyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGFnZW5kYTogdGhpcy5hZ2VuZGEsXG4gICAgICAgICAgICAgICAgICAgIGZpbGlhbDogdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9kdXRvOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yOiBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjb250cmF0b3M6IGZvcm5lY2Vkb3JGb3JtLmdldChcImNvbnRyYXRvc1wiKS52YWx1ZSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uQ2xvc2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRyYXRvIH06IGFueSkgPT4gdGhpcy5vbkNvbnRyYXRvU2F2ZWQoY29udHJhdG8sIGZvcm5lY2Vkb3JGb3JtKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZXJDb250cmF0byhmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBjb250cmF0b0Zvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9jb250cmF0b19oZWFkZXJcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfY29udHJhdG9fbWVzc2FnZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKGZvcm5lY2Vkb3JGb3JtLmdldChcImNvbnRyYXRvc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmluZGV4T2YoY29udHJhdG9Gb3JtKTtcbiAgICAgICAgICAgICAgICAoZm9ybmVjZWRvckZvcm0uZ2V0KFwiY29udHJhdG9zXCIpIGFzIEZvcm1BcnJheSkucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5jb250cmF0b3MgPSBmb3JuZWNlZG9yRm9ybS5nZXQoXCJjb250cmF0b3NcIilcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJhdG9zIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTm90YShmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihOb3RhRm9ybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5hZGljaW9uYXJfbm90YVwiKSxcbiAgICAgICAgICAgIC4uLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBmb3JuZWNlZG9yOiBmb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZSxcbiAgICAgICAgICAgICAgICBwcm9kdXRvOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIGZpbGlhbDogdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JOb3Rhc1Rva2VuczogdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMsXG4gICAgICAgICAgICAgICAgY29udHJhdG9zOiB0aGlzLmNvbnRyYXRvcyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uQ2xvc2VcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSlcbiAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLm9uTm90YVNhdmVkKHZhbHVlLCBmb3JtR3JvdXApKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3Zlck5vdGEoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgY29udHJhdG9Gb3JtOiBGb3JtR3JvdXAsIG5vdGFGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfbm90YV9oZWFkZXJcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfbm90YV9tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJhdG9JZCA9IGNvbnRyYXRvRm9ybVtcInZhbHVlXCJdW1wiY29udHJhdG9cIl1bXCJpZFwiXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtLCBjb250cmF0b0lkKS5jb250cm9scy5pbmRleE9mKG5vdGFGb3JtKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldE5vdGFzRnJvbUNvbnRyYXRvcyhmb3JuZWNlZG9yRm9ybSwgY29udHJhdG9JZCkucmVtb3ZlQXQoaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90YSA9IG5vdGFGb3JtW1widmFsdWVcIl07XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBub3RhLmNoYXZlTm90YUZpc2NhbCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IG5vdGEubnVtZXJvTm90YUZpc2NhbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IG5vdGEuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBzZXJpZU5vdGFGaXNjYWw6IG5vdGEuc2VyaWVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogbm90YS5zZXJpZUxlZ2FsTm90YUZpc2NhbCxcbiAgICAgICAgICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogbm90YS5udW1lcm9Ob3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Tm90YXMoY29udHJhdG9Gb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgcmV0dXJuIGNvbnRyYXRvRm9ybVtcImNvbnRyb2xzXCJdW1wibm90YXNcIl0gYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJdGVuc0NvbnRyYXRvKGNvbnRyYXRvRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHJldHVybiBjb250cmF0b0Zvcm0uZ2V0KFwiaXRlbnNcIikgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93QnV0dG9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFnZW5kYSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgU3RhdHVzQWdlbmRhLkFHRU5EQURPLFxuICAgICAgICAgICAgU3RhdHVzQWdlbmRhLkFHVUFSREFORE9fQ09ORklSTUFDQU8sXG4gICAgICAgICAgICBTdGF0dXNBZ2VuZGEuQUdVQVJEQU5ET19DT05GSVJNQUNBT19TT0xJQ0lUQU5URSxcbiAgICAgICAgICAgIFN0YXR1c0FnZW5kYS5SRUpFSVRBRE9fUE9SX1ZBTElEQUNBT1xuICAgICAgICBdLmluY2x1ZGVzKHRoaXMuYWdlbmRhLnN0YXR1cyBhcyBTdGF0dXNBZ2VuZGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlQWRpY2lvbmFyTm90YSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJhdG9TZWxlY2lvbmFkbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGlwb1RyYW5zZ2VuaWEgPSAoKSA9PiB7XG4gICAgICAgIGlmICgodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiBUaXBvUGFydGljaXBhbnRlVHJhbnNnZW5pYS5OQU9fSU5GT1JNQURPO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcm5lY2Vkb3IgPSAoKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLmF0KDApIGFzIEZvcm1Hcm91cCkuZ2V0UmF3VmFsdWUoKS5mb3JuZWNlZG9yO1xuICAgICAgICByZXR1cm4gZm9ybmVjZWRvciA/IChmb3JuZWNlZG9yLnRpcG9QYXJ0aWNpcGFudGUgfHwgVGlwb1BhcnRpY2lwYW50ZVRyYW5zZ2VuaWEuTkFPX0lORk9STUFETykgOiBUaXBvUGFydGljaXBhbnRlVHJhbnNnZW5pYS5OQU9fSU5GT1JNQURPO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGdldE5vdGFGb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGNoYXZlTm90YUZpc2NhbDogW2RhdGEuY2hhdmVOb3RhRmlzY2FsXSxcbiAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogW2RhdGEuc2VyaWVOb3RhRmlzY2FsXSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBbZGF0YS5zZXJpZUxlZ2FsTm90YUZpc2NhbF0sXG4gICAgICAgICAgICBudW1lcm9Ob3RhRmlzY2FsOiBbZGF0YS5udW1lcm9Ob3RhRmlzY2FsXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250cmF0b0Zvcm0oZGF0YTogYW55ID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgY29udHJhdG86IFtkYXRhLmNvbnRyYXRvLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGl0ZW5zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcbiAgICAgICAgICAgIG5vdGFzOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEl0ZW1Gb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGl0ZW06IFtkYXRhLml0ZW0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgcXVhbnRpZGFkZTogW2RhdGEucXVhbnRpZGFkZV1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yRm9ybShkYXRhOiBhbnkgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBmb3JuZWNlZG9yOiBbZGF0YS5mb3JuZWNlZG9yLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIG9yaWdlbU1lcmNhZG9yaWE6IFtkYXRhLm9yaWdlbU1lcmNhZG9yaWEsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgICAgICAgIHRpcG9Ob3RhRmlzY2FsOiBbZGF0YS50aXBvTm90YUZpc2NhbCB8fCBUaXBvTm90YUZpc2NhbC5FTVBSRVNBX0pVUklESUNBLCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGNvbnRyYXRvczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybUdyb3VwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBpZDogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBmaWxpYWw6IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgcHJvZHV0bzogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSldLFxuICAgICAgICAgICAgZGVyaXZhY2FvOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIHRyYW5zcG9ydGFkb3JhOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBhZ2VuZGE6IFt7IHZhbHVlOiB0aGlzLmFnZW5kYSwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgICAgICAgIHRyYW5zZ2VuaWE6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgZm9ybmVjZWRvcmVzOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcbiAgICAgICAgICAgIGNyZWF0ZWRCeTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBjcmVhdGVkRGF0ZTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWRCeTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWREYXRlOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGN1c3RvbTogW10sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybmVjZWRvckJ5Q29udHJhdG8oY29udHJhdG86IENvbnRyYXRvQ29tcHJhRHRvLCBmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMucGVzc29hU2VydmljZS5saXN0KHsgc2l6ZTogMSwgcGFnZTogMCwgZmlsdGVyUXVlcnk6IGBpZCBlcSAnJHtjb250cmF0by5wZXNzb2EuaWR9J2AgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIG1hcCgoeyBjb250ZW50cyB9KSA9PiAoY29udGVudHMgfHwgW10pLmxlbmd0aCAmJiBjb250ZW50c1swXSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHBlc3NvYSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS5zZXRWYWx1ZShQZXNzb2EuZnJvbUR0byhwZXNzb2EpKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvZHV0b0J5Q29udHJhdG8oY29udHJhdG86IENvbnRyYXRvQ29tcHJhRHRvKSB7XG4gICAgICAgIHRoaXMuY29udHJhdG9Db21wcmFTZXJ2aWNlLmxpc3RJdGVucyhjb250cmF0by5pZCwgeyBzaXplOiAxLCBwYWdlOiAwLCBkaXNwbGF5RmllbGRzOiBbJ3NrdS5pZCddIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHJldHVybiB0aGlzLnByb2R1dG9TZXJ2aWNlLmxpc3QoeyBzaXplOiAxLCBwYWdlOiAwLCBmaWx0ZXJRdWVyeTogYGlkIGVxICcke2NvbnRlbnRzWzBdLnNrdS5pZH0nYCB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCh7IGNvbnRlbnRzIH0pID0+IChjb250ZW50cyB8fCBbXSkubGVuZ3RoICYmIGNvbnRlbnRzWzBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eSgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShwcm9kdXRvID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnNldFZhbHVlKFByb2R1dG8uZnJvbUR0byhwcm9kdXRvKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ29udHJhdG9TYXZlZChjb250cmF0bzogYW55LCBmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKS52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRQcm9kdXRvQnlDb250cmF0byhjb250cmF0by5jb250cmF0byk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvckJ5Q29udHJhdG8oY29udHJhdG8uY29udHJhdG8sIGZvcm5lY2Vkb3JGb3JtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRyYXRvRm9ybSA9IHRoaXMuZ2V0Q29udHJhdG9Gb3JtKGNvbnRyYXRvKTtcbiAgICAgICAgKGNvbnRyYXRvLml0ZW5zIHx8IFtdKS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IChjb250cmF0b0Zvcm0uZ2V0KFwiaXRlbnNcIikgYXMgRm9ybUFycmF5KS5wdXNoKHRoaXMuZ2V0SXRlbUZvcm0oaXRlbSkpKTtcblxuICAgICAgICB0aGlzLmdldENvbnRyYXRvcyhmb3JuZWNlZG9yRm9ybSkucHVzaChjb250cmF0b0Zvcm0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVuc2FnZW1Db250cmF0b05hb1NlbGVjaW9uYWRvKCkge1xuICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXCJlcnJvclwiLCBcIkNvbnRyYXRvIG7Do28gc2VsZWNpb25hZG9cIiwgXCJOZW5odW0gY29udHJhdG8gZm9pIHNlbGVjaW9uYWRvIVwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uTm90YVNhdmVkKHZhbHVlOiBhbnksIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcblxuICAgICAgICBpZiAodGhpcy5jb250cmF0b1NlbGVjaW9uYWRvID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnNhZ2VtQ29udHJhdG9OYW9TZWxlY2lvbmFkbygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWx1ZS5hZGRGb3JuZWNlZG9yKSB7XG4gICAgICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbUNvbnRyYXRvcyhmb3JuZWNlZG9yRm9ybSwgdGhpcy5jb250cmF0b1NlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIGlmIChub3Rhc0Zvcm0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBub3Rhc0Zvcm0ucHVzaCh0aGlzLmdldE5vdGFGb3JtKHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleGlzdHNGb3JuZWNlZG9yID0gKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZpbmQoKGZvcm0pID0+IChmb3JtLnZhbHVlLmZvcm5lY2Vkb3IgfHwgeyBpZDogdW5kZWZpbmVkIH0pLmlkID09PSB2YWx1ZS5mb3JuZWNlZG9yLmlkKTtcbiAgICAgICAgY29uc3QgZm9ybmVjZWRvck9mR3JvdXAgPSB0aGlzLnZhbGlkYXJDbnBqRm9ybmVjZWRvcigoZm9ybmVjZWRvckZvcm0udmFsdWUuZm9ybmVjZWRvciB8fCB7IGNwZkNucGo6IHVuZGVmaW5lZCB9KS5jcGZDbnBqKTtcbiAgICAgICAgY29uc3QgeyBpbmZvTm90YSB9ID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IG5vdGFGb3JtID0gdGhpcy5nZXROb3RhRm9ybSh7IFxuICAgICAgICAgICAgY2hhdmVOb3RhRmlzY2FsOiBpbmZvTm90YS5jaGF2ZSxcbiAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogaW5mb05vdGEuc2VyaWUsXG4gICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogaW5mb05vdGEuc2VyaWVMZWdhbCxcbiAgICAgICAgICAgIG51bWVyb05vdGFGaXNjYWw6IGluZm9Ob3RhLm51bWVybyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCEhZXhpc3RzRm9ybmVjZWRvcikge1xuICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21Db250cmF0b3MoZXhpc3RzRm9ybmVjZWRvciwgdGhpcy5jb250cmF0b1NlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgfSBlbHNlIGlmICghZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZSkge1xuICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS5zZXRWYWx1ZShQZXNzb2EuZnJvbUR0byh2YWx1ZS5mb3JuZWNlZG9yKSk7XG4gICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJvcmlnZW1NZXJjYWRvcmlhXCIpLnNldFZhbHVlKFBlc3NvYUVuZGVyZWNvLmZyb21EdG8odmFsdWUub3JpZ2VtTWVyY2Fkb3JpYSkpO1xuICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvckZvcm0sIHRoaXMuY29udHJhdG9TZWxlY2lvbmFkby5pZCk7XG4gICAgICAgICAgICBub3Rhc0Zvcm0ucHVzaChub3RhRm9ybSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybmVjZWRvck9mR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgICAgICBoZWFkZXI6ICdGb3JuZWNlZG9yIGRvIG1lc21vIGdydXBvIGrDoSBjYWRhc3RyYWRvJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVW0gZm9ybmVjZWRvciBkbyBtZXNtbyBncnVwbyBwYXJlY2UgasOhIHRlciBzaWRvIHNlbGVjaW9uYWRvLCBkZXNlamEgdmluY3VsYXIgYSBub3RhIGFvIG1lc21vIGZvcm5lY2Vkb3I/JyxcbiAgICAgICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvck9mR3JvdXAsIHRoaXMuY29udHJhdG9TZWxlY2lvbmFkby5pZCk7XG4gICAgICAgICAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JuZWNlZG9yID0gdGhpcy5hZGRGb3JuZWNlZG9yKHsgZm9ybmVjZWRvcjogUGVzc29hLmZyb21EdG8odmFsdWUuZm9ybmVjZWRvciksIG9yaWdlbU1lcmNhZG9yaWE6IFBlc3NvYUVuZGVyZWNvLmZyb21EdG8odmFsdWUub3JpZ2VtTWVyY2Fkb3JpYSkgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3IsIHRoaXMuY29udHJhdG9TZWxlY2lvbmFkby5pZCk7XG4gICAgICAgICAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm5lY2Vkb3IgPSB0aGlzLmFkZEZvcm5lY2Vkb3IoeyBmb3JuZWNlZG9yOiBQZXNzb2EuZnJvbUR0byh2YWx1ZS5mb3JuZWNlZG9yKSwgb3JpZ2VtTWVyY2Fkb3JpYTogUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZS5vcmlnZW1NZXJjYWRvcmlhKSB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3IsIHRoaXMuY29udHJhdG9TZWxlY2lvbmFkby5pZCk7XG4gICAgICAgICAgICBub3Rhc0Zvcm0ucHVzaChub3RhRm9ybSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtOiBBYnN0cmFjdENvbnRyb2wsIGNvbnRyYXRvSWQ6IGFueSkge1xuICAgICAgICBsZXQgY29udHJhdG9zRm9ybVNlbGVjaW9uYWRvID0gbnVsbDtcbiAgICAgICAgY29uc3QgY29udHJhdG9zRm9ybSA9IGZvcm5lY2Vkb3JGb3JtW1wiY29udHJvbHNcIl1bXCJjb250cmF0b3NcIl1bXCJjb250cm9sc1wiXTtcblxuICAgICAgICBmb3IgKGxldCBjb250cmF0b0Zvcm0gb2YgY29udHJhdG9zRm9ybSkge1xuICAgICAgICAgICAgaWYgKGNvbnRyYXRvRm9ybVtcImNvbnRyb2xzXCJdW1wiY29udHJhdG9cIl1bXCJ2YWx1ZVwiXS5pZCA9PT0gY29udHJhdG9JZCkge1xuICAgICAgICAgICAgICAgIGNvbnRyYXRvc0Zvcm1TZWxlY2lvbmFkbyA9IGNvbnRyYXRvRm9ybVtcImNvbnRyb2xzXCJdW1wibm90YXNcIl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyYXRvc0Zvcm1TZWxlY2lvbmFkbyBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuRW1Db250cmF0byhmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCB0b2tlbjogSVRva2VuKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyYXRvU2VsZWNpb25hZG8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW1Db250cmF0b05hb1NlbGVjaW9uYWRvKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3RhcyA9IHRoaXMuZm9ybmVjZWRvck5vdGFzLmZpbHRlcihmb3JuZWNlZG9yTm90YSA9PiBmb3JuZWNlZG9yTm90YS5jaGF2ZU5vdGFGaXNjYWwgPT09IHRva2VuLmlkKTtcbiAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvckZvcm0sIHRoaXMuY29udHJhdG9TZWxlY2lvbmFkby5pZCk7XG4gICAgICAgIGlmIChub3Rhc0Zvcm0gIT09IG51bGwgJiYgbm90YXNbMF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKHRoaXMuZ2V0Tm90YUZvcm0obm90YXNbMF0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlRm9ybmVjZWRvck5vdGFzVG9rZW5Eb0NvbnRyYXRvKHRva2VuKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRm9ybmVjZWRvck5vdGFzVG9rZW5Eb0NvbnRyYXRvKHRva2VuOiBJVG9rZW4pIHtcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMuc3BsaWNlKHRoaXMuZm9ybmVjZWRvck5vdGFzVG9rZW5zLmluZGV4T2YodG9rZW4pLCAxKTtcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXMgPSB0aGlzLmZvcm5lY2Vkb3JOb3Rhcy5maWx0ZXIoZm9ybmVjZWRvck5vdGEgPT4gZm9ybmVjZWRvck5vdGEuY2hhdmVOb3RhRmlzY2FsICE9PSB0b2tlbi5pZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGljaW9uYXJOb3ZhTm90YShyZXNwb25zZTogUGVzcXVpc2FyRG9jdW1lbnRvUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAocmVzcG9uc2UuZG9jdW1lbnRvcyB8fCBbXSkubGVuZ3RoID8gcmVzcG9uc2UuZG9jdW1lbnRvc1swXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1Qcm9kdXRvID0gdmFsdWUuaXRlbnNbMF0gfHwgeyBwcm9kdXRvOiB1bmRlZmluZWQsIGRlcml2YWNhbzogdW5kZWZpbmVkIH0gYXMgYW55O1xuICAgICAgICBjb25zdCBwcm9kdXRvID0gUHJvZHV0by5mcm9tRHRvKGl0ZW1Qcm9kdXRvLnByb2R1dG8pO1xuXG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKS52YWx1ZSAmJiAhIWl0ZW1Qcm9kdXRvLnByb2R1dG8pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuc2V0VmFsdWUocHJvZHV0byk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuc2V0VmFsdWUoRGVyaXZhY2FvLmZyb21EdG8oaXRlbVByb2R1dG8uZGVyaXZhY2FvKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoISFpdGVtUHJvZHV0by5wcm9kdXRvICYmICF0aGlzLnZhbGlkYXRlUHJvZHV0byhwcm9kdXRvKSkge1xuICAgICAgICAgICAgdGhpcy5hZGROb3RhRXJyb3IoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm5lY2Vkb3IgPSBQZXNzb2EuZnJvbUR0byh2YWx1ZS5mb3JuZWNlZG9yKTtcbiAgICAgICAgY29uc3Qgb3JpZ2VtTWVyY2Fkb3JpYSA9IFBlc3NvYUVuZGVyZWNvLmZyb21EdG8odmFsdWUub3JpZ2VtTWVyY2Fkb3JpYSk7XG5cbiAgICAgICAgY29uc3QgZm9ybmVjZWRvckZvcm0gPSB0aGlzLmdldEZvcm5lY2Vkb3JlcygpLmNvbnRyb2xzLmZpbmQoKHsgdmFsdWUgfSkgPT4gdmFsdWUuZm9ybmVjZWRvci5pZCA9PT0gZm9ybmVjZWRvci5pZCkgYXMgRm9ybUdyb3VwO1xuICAgICAgICBjb25zdCBmb3JuZWNlZG9yT2ZHcm91cCA9IHRoaXMudmFsaWRhckNucGpGb3JuZWNlZG9yKGZvcm5lY2Vkb3IuY3BmQ25waik7XG5cbiAgICAgICAgaWYgKGZvcm5lY2Vkb3JPZkdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiAnRm9ybmVjZWRvciBkbyBtZXNtbyBncnVwbyBqw6EgY2FkYXN0cmFkbycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VtIGZvcm5lY2Vkb3IgZG8gbWVzbW8gZ3J1cG8gcGFyZWNlIGrDoSB0ZXIgc2lkbyBzZWxlY2lvbmFkbywgZGVzZWphIHZpbmN1bGFyIGEgbm90YSBhbyBtZXNtbyBmb3JuZWNlZG9yPycsXG4gICAgICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvck5vdGFzVG9rZW4odmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybmVjZWRvckZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvcih7IGZvcm5lY2Vkb3IsIG9yaWdlbU1lcmNhZG9yaWEgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRGb3JuZWNlZG9yTm90YXNUb2tlbih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSBlbHNlIGlmICghZm9ybmVjZWRvckZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvcih7IGZvcm5lY2Vkb3IsIG9yaWdlbU1lcmNhZG9yaWEgfSk7XG4gICAgICAgICAgICB0aGlzLmFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRm9ybmVjZWRvck5vdGFzVG9rZW4odmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5wdXNoKHsgaWQ6IHRoaXMuY2hhdmVOb3RhRmlzY2FsLCBsYWJlbDogdmFsdWUubnVtZXJvIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzLnB1c2goe1xuICAgICAgICAgICAgY2hhdmVOb3RhRmlzY2FsOiB0aGlzLmNoYXZlTm90YUZpc2NhbCxcbiAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogdmFsdWUuc2VyaWUsXG4gICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogdmFsdWUuc2VyaWVMZWdhbCxcbiAgICAgICAgICAgIG51bWVyb05vdGFGaXNjYWw6IHZhbHVlLm51bWVybyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jaGF2ZU5vdGFGaXNjYWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlTm90YUVycm9yKCkge1xuICAgICAgICB0aGlzLmVycm9DaGF2ZU5vdGEgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE5vdGFFcnJvcigpIHtcbiAgICAgICAgdGhpcy5lcnJvQ2hhdmVOb3RhID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlUHJvZHV0byhwcm9kdXRvOiBQcm9kdXRvKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIik7XG4gICAgICAgIGlmICh2YWx1ZS5pZCAhPT0gcHJvZHV0by5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlclxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX25vbWVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZ1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY3BmQ25walwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jb2RpZ29cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9tZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNwZkNucGpcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NwZkNucGpcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JpZ2VtTWVyY2Fkb3JpYUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19jb2RpZ29cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXJcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjZXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2NlcFwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW5kZXJlY29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2VuZGVyZWNvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJudW1lcm9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX251bWVyb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiYmFpcnJvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19iYWlycm9cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZ1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmlnZW1NZXJjYWRvcmlhR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19jb2RpZ29cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXJcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjZXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2NlcFwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW5kZXJlY29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2VuZGVyZWNvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJudW1lcm9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX251bWVyb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiYmFpcnJvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19iYWlycm9cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcHJlc2EuZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmVtcHJlc2FcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2R1dG9TZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wcm9kdXRvX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wcm9kdXRvX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2R1dG9TZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucHJvZHV0b19jb2RpZ29cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucHJvZHV0b19kZXNjcmljYW9cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9Db21wbGVtZW50YXJcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucHJvZHV0b19kZXNjcmljYW9fY29tcGxlbWVudGFyXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFnZW5kYVNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmFnZW5kYV9kZXNjcmljYW9cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWdlbmRhU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmFnZW5kYV9kZXNjcmljYW9cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGVyaXZhY2FvU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fZGVzY3JpY2FvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERlcml2YWNhb1NlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fY29kaWdvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19kZXNjcmljYW9cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2Rlc2NyaWNhb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlc3NvYS5jcGZDbnBqXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY25walwiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlc3NvYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jbnBqXCIpXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNnZW5pYVNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNnZW5pYV9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc2dlbmlhX2Rlc2NyaWNhb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2dlbmlhU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNnZW5pYV9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc2dlbmlhX2Rlc2NyaWNhb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnb0JhY2soKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUm91dGUgPSBcIi4uL1wiO1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcHJldmlvdXNSb3V0ZV0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIGNvbnRyb2wubWFya0FzRGlydHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKGNvbnRyb2wpO1xuICAgICAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkgY29udHJvbC5jb250cm9scy5mb3JFYWNoKGZvcm0gPT4gdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybSBhcyBGb3JtR3JvdXApKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNGaXJzdEludmFsaWRJbnB1dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2F2ZU9ic2VydmFibGUoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgdmFsdWUuYWdlbmRhID0gdGhpcy5hZ2VuZGE7XG4gICAgICAgIGNvbnN0IHJlY2ViaW1lbnRvRHRvID0gUmVjZWJpbWVudG9Db250cmF0by50b0R0byh2YWx1ZSk7XG5cbiAgICAgICAgbGV0IG9ic2VydmFibGU7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNOZXcoKSAmJiAhdmFsdWUuaWQpIHtcbiAgICAgICAgICAgIG9ic2VydmFibGUgPSB0aGlzLnJlY2ViaW1lbnRvU2VydmljZS5pbnNlcnQocmVjZWJpbWVudG9EdG8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWQgPSB2YWx1ZS5pZDtcbiAgICAgICAgICAgIG9ic2VydmFibGUgPSB0aGlzLnJlY2ViaW1lbnRvU2VydmljZS51cGRhdGUoaWQsIHJlY2ViaW1lbnRvRHRvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGVsZXRlT2JzZXJ2YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjZWJpbWVudG9TZXJ2aWNlLmRlbGV0ZSgnJykucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFwic3VjY2Vzc1wiLCBcInltcy5lcnAuZGVsZXRlZF9tZXNzYWdlX3RpdGxlXCIsIFwieW1zLmVycC5kZWxldGVkX21lc3NhZ2VfY29udGVudFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdvQmFjaygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlVmlzdWFsaXphdGlvbigpIHtcbiAgICAgICAgaWYgKCF1c2VyQ2FuVmlzdWFsaXplKHRoaXMuZm9ybUdyb3VwLCB0aGlzLmFsbFBlcm1pc3Npb25zKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFwiZXJyb3JcIiwgXCJ5bXMuZXJwLmNhbm5vdF92aXN1YWxpemVfZm9ybV9zdW1tYXJ5XCIsIFwieW1zLmVycC5jYW5ub3RfdmlzdWFsaXplX2Zvcm1fZGV0YWlsXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRNZXNzYWdlKHNldmVyaXR5OiBzdHJpbmcsIHN1bW1hcnk6IHN0cmluZywgZGV0YWlsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgc2V2ZXJpdHksXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHN1bW1hcnkpLFxuICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGRldGFpbCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25GaWxpYWxWYWx1ZUNoYW5nZSA9IChmaWxpYWw6IEZpbGlhbCkgPT4ge1xuICAgICAgICB0aGlzLmRpc2FibGVPcmRlcnNCdXR0b25zID0gIWZpbGlhbDtcbiAgICAgICAgaWYgKCFmaWxpYWwgJiYgdGhpcy5pc05ldygpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zZ2VuaWFcIikuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zZ2VuaWFcIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKS5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNnZW5pYVwiKS5lbmFibGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1c2NhckZpbGlhbCgpIHtcbiAgICAgICAgY29uc3QgcGxhbnRhID0gdGhpcy5hZ2VuZGEucGxhbnRhIHx8IHsgY25wajogW10gfTtcbiAgICAgICAgaWYgKHBsYW50YS5jbnBqLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ2FycmVnYWRvID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgICAgICAgLmxpc3Qoe1xuICAgICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeTogYHBlc3NvYS5jcGZDbnBqIGVxICcke3BsYW50YS5jbnBqWzBdfSdgLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZHM6IFsnKicsICdlbXByZXNhLm5vbWUnXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikuc2V0VmFsdWUoRmlsaWFsLmZyb21EdG8oY29udGVudHNbMF0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ2FycmVnYWRvID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlndXJlRm9ybmVjZWRvcihmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIilcbiAgICAgICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZWhQZXNzb2FKdXJpZGljYSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJ0aXBvTm90YUZpc2NhbFwiKS5zZXRWYWx1ZShUaXBvTm90YUZpc2NhbC5FTVBSRVNBX0pVUklESUNBKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJ0aXBvTm90YUZpc2NhbFwiKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLnNldFZhbHVlKFRpcG9Ob3RhRmlzY2FsLlBST0RVVE9SX1JVUkFMKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJ0aXBvTm90YUZpc2NhbFwiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLnNldFZhbHVlKFRpcG9Ob3RhRmlzY2FsLkVNUFJFU0FfSlVSSURJQ0EpO1xuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJ0aXBvTm90YUZpc2NhbFwiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc2dlbmlhXCIpLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNnZW5pYVwiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAodmFsdWUgPT4gdGhpcy5wZXNzb2FFbmRlcmVjb1NlcnZpY2UubGlzdCh7IHNpemU6IDEwLCBwYWdlOiAwLCBmaWx0ZXJRdWVyeTogYHNpdHVhY2FvIGVxICdBVElWTycgYW5kIHBlc3NvYS5pZCBlcSAnJHt2YWx1ZS5pZH0nYCB9KVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc2dlbmlhXCIpLmVuYWJsZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJvcmlnZW1NZXJjYWRvcmlhXCIpLnNldFZhbHVlKFBlc3NvYUVuZGVyZWNvLmZyb21EdG8oY29udGVudHNbMF0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcIm9yaWdlbU1lcmNhZG9yaWFcIikuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JpZ2VtTWVyY2Fkb3JpYVwiKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVoUGVzc29hSnVyaWRpY2EocGVzc29hOiBQZXNzb2EpIHtcbiAgICAgICAgY29uc3QgY3BmQ25waiA9IChwZXNzb2EuY3BmQ25waiB8fCBcIlwiKS5yZXBsYWNlKC9cXEQrL2csIFwiXCIpO1xuICAgICAgICByZXR1cm4gY3BmQ25wai5sZW5ndGggPiAxMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lbnNhZ2VtQnVzY2FuZG9Ob3RhKCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBzZXZlcml0eTogJ2luZm8nLFxuICAgICAgICAgICAgc3VtbWFyeTogJ0J1c2NhbmRvIGRhZG9zIGRhIG5vdGEnLFxuICAgICAgICAgICAgZGV0YWlsOiAnQWd1YXJkZSwgYnVzY2FuZG8gZGFkb3MgZGEgbm90YScsXG4gICAgICAgICAgICBsaWZlOiA1MDAwXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhckNucGpGb3JuZWNlZG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVoUGVzc29hSnVyaWRpY2EoeyBjcGZDbnBqOiB2YWx1ZSB9IGFzIFBlc3NvYSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgZm9ybmVjZWRvciA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS5jb250cm9scy5maW5kKChmb3JtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKChmb3JtLnZhbHVlLmZvcm5lY2Vkb3IgfHwgeyBjcGZDbnBqOiAnJyB9KS5jcGZDbnBqIGFzIHN0cmluZykuc3Vic3RyaW5nKDAsIDgpID09PSB2YWx1ZS5zdWJzdHJpbmcoMCwgOClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmb3JuZWNlZG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250cmF0b0l0ZW0ge1xuICAgIGl0ZW06IENvbnRyYXRvQ29tcHJhSXRlbTtcbiAgICBxdWFudGlkYWRlOiBudW1iZXI7XG59XG4iXX0=
|
|
1808
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjZWJpbWVudG8tZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMveW1zLWludGVncmF0aW9uLyIsInNvdXJjZXMiOlsic3JjL2VycC1zZW5pb3IvcmVjZWJpbWVudG8vZm9ybS9yZWNlYmltZW50by1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDeEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFxQixXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQVUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQVksTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxF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QVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzFGLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0UsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzVGLFVBQVUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hDLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFB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QUFqNURELElBaTVEQztTQWo1RFksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyaWZpY2FOb3RhZmlzY2FsIH0gZnJvbSAnLi4vLi4vY29yZS92ZXJpZmljYS1ub3RhLWZpc2NhbC92ZXJpZmljYU5vdGFGaXNjYWwnO1xuaW1wb3J0IHsgRXJwRm9ybUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLy4uLy4uL2NvcmUvZXJwLWZvcm0tY29uZmlnL2VycC1mb3JtLWNvbmZpZy1zZXJ2aWNlJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtRmllbGQsIElUb2tlbiB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBIb3RrZXksIEhvdGtleXNTZXJ2aWNlIH0gZnJvbSBcImFuZ3VsYXIyLWhvdGtleXNcIjtcbmltcG9ydCAqIGFzIF9tb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgRGlhbG9nU2VydmljZSwgU29ydE1ldGEgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmcvY29tcG9uZW50cy9jb21tb24vbWVzc2FnZXNlcnZpY2VcIjtcbmltcG9ydCB7IGVtcHR5LCBmb3JrSm9pbiwgb2YsIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY29uY2F0TWFwLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmluYWxpemUsIG1hcCwgbWVyZ2VNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWVsZEN1c3RvbWl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2ZpZWxkLWN1c3RvbWl6YXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgRm9jdXNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2ZvY3VzLnNlcnZpY2VcIjtcbmltcG9ydCB7IG9uTG9va3VwUmVxdWVzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb29rdXAtdXRpbHNcIjtcbmltcG9ydCB7IGRpYWxvZ0NvbmZpZywgaXNWYWxpZEZpbHRlciwgbWVyZ2VVbmlxdWUsIHVzZXJDYW5WaXN1YWxpemUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IE5vdGFGb3JtQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbm90YS1mb3JtL25vdGEtZm9ybS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEFnZW5kYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2FnZW5kYS9hZ2VuZGFcIjtcbmltcG9ydCB7IENvbnRyYXRvQ29tcHJhSXRlbSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2NvbnRyYXRvLWNvbXByYS1pdGVtL2NvbnRyYXRvLWNvbXByYS1pdGVtXCI7XG5pbXBvcnQgeyBDb250cmF0b0NvbXByYUR0byB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2NvbnRyYXRvLWNvbXByYS9jb250cmF0by1jb21wcmEtZHRvXCI7XG5pbXBvcnQgeyBDb250cmF0b0NvbXByYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9jb250cmF0by1jb21wcmEvY29udHJhdG8tY29tcHJhLnNlcnZpY2VcIjtcbmltcG9ydCB7IERlcml2YWNhbyB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2Rlcml2YWNhby9kZXJpdmFjYW9cIjtcbmltcG9ydCB7IERlcml2YWNhb1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9kZXJpdmFjYW8vZGVyaXZhY2FvLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZpbGlhbCB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2ZpbGlhbC9maWxpYWxcIjtcbmltcG9ydCB7IEZpbGlhbFNlcnZpY2UsIFBlc3F1aXNhckZpbGlhaXNJbnB1dCB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2ZpbGlhbC9maWxpYWwuc2VydmljZVwiO1xuaW1wb3J0IHsgUGVzc29hRW5kZXJlY28gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EtZW5kZXJlY28vcGVzc29hLWVuZGVyZWNvXCI7XG5pbXBvcnQgeyBQZXNzb2FFbmRlcmVjb1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EtZW5kZXJlY28vcGVzc29hLWVuZGVyZWNvLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBlc3NvYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2FcIjtcbmltcG9ydCB7IFBlc3NvYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EvcGVzc29hLnNlcnZpY2VcIjtcbmltcG9ydCB7IFByb2R1dG8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wcm9kdXRvL3Byb2R1dG9cIjtcbmltcG9ydCB7IFByb2R1dG9SZWNlYmltZW50b1BhcmFtcywgUHJvZHV0b1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wcm9kdXRvL3Byb2R1dG8uc2VydmljZVwiO1xuaW1wb3J0IHsgUmVjZWJpbWVudG9Db250cmF0byB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3JlY2ViaW1lbnRvLWNvbnRyYXRvL3JlY2ViaW1lbnRvXCI7XG5pbXBvcnQgeyBSZWNlYmltZW50b0NvbnRyYXRvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3JlY2ViaW1lbnRvLWNvbnRyYXRvL3JlY2ViaW1lbnRvLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zZ2VuaWEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy90cmFuc2dlbmlhL3RyYW5zZ2VuaWFcIjtcbmltcG9ydCB7IFRyYW5zZ2VuaWFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNnZW5pYS90cmFuc2dlbmlhLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNwb3J0YWRvcmEvdHJhbnNwb3J0YWRvcmFcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zcG9ydGFkb3JhL3RyYW5zcG9ydGFkb3JhLnNlcnZpY2VcIjtcbmltcG9ydCB7IFN0YXR1c0FnZW5kYSB9IGZyb20gXCIuLy4uLy4uL2NvcmUvZW51bXMvc3RhdHVzLWFnZW5kYVwiO1xuaW1wb3J0IHsgVGlwb05vdGFGaXNjYWwgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnVtcy90aXBvLW5vdGEtZmlzY2FsXCI7XG5pbXBvcnQgeyBUaXBvUGFydGljaXBhbnRlVHJhbnNnZW5pYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudW1zL3RpcG8tcGFydGljaXBhbnRlLXRyYW5zZ2VuaWFcIjtcbmltcG9ydCB7IE5vdGFWYWxpZGF0b3JTZXJ2aWNlLCBQZXNxdWlzYXJEb2N1bWVudG9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi9jb3JlL25vdGEtdmFsaWRhdG9yLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbnRyYXRvRm9ybUNvbXBvbmVudCB9IGZyb20gXCIuLi9jb250cmF0by1mb3JtL2NvbnRyYXRvLWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBSZWNlYmltZW50b0NoZWdhZGFWZWljdWxvT3ZlcnJpZGUgfSBmcm9tIFwiLi4vcmVjZWJpbWVudG8tY2hlZ2FkYS12ZWljdWxvLm92ZXJyaWRlXCI7XG5pbXBvcnQgeyBBZ2VuZGFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFcnBQcm9jZXNzRGF0YSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1wcm9jZXNzLWRhdGEvZXJwLXByb2Nlc3MtZGF0YVwiO1xuaW1wb3J0IHsgRXJwUHJvY2Vzc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtcHJvY2Vzcy1kYXRhL2VycC1wcm9jZXNzLXNlcnZpY2VcIjtcbmltcG9ydCB7IEhhc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2hhcy1jaGFuZ2UvaGFzLWNoYW5nZS1zZXJ2aWNlJztcblxuY29uc3QgbW9tZW50ID0gX21vbWVudDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdyZWNlYmltZW50by1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3JlY2ViaW1lbnRvLWZvcm0uY29tcG9uZW50Lmh0bWxcIixcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBdLFxuICAgIHN0eWxlVXJsczogWycuLi8uLi9lcnAtc2VuaW9yLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZWNlYmltZW50b0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHVibGljIGxvY2FsZUNvbmZpZzogYW55ID0ge307XG4gICAgcHVibGljIGN1cnJlbmN5TG9jYWxlT3B0aW9uczogYW55ID0ge307XG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgYWxsUGVybWlzc2lvbnM6IGFueSA9IHt9O1xuXG4gICAgcHVibGljIHZpc2libGVEaWFsb2cgPSBmYWxzZTtcbiAgICBwdWJsaWMgcXVhbnRpZGFkZVNlbGVjaW9uYWRhID0gMTtcblxuICAgIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgaXRlbUZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xuICAgIHB1YmxpYyBtYWluUGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBmaWxpYWxMb29rdXBTdWdnZXN0aW9uczogRmlsaWFsW107XG4gICAgcHVibGljIGZpbGlhbExvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiZW1wcmVzYS5ub21lXCJdO1xuICAgIHB1YmxpYyBmaWxpYWxBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIiwgXCJlbXByZXNhLm5vbWVcIl07XG4gICAgcHVibGljIGZpbGlhbExvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gICAgcHVibGljIGZpbGlhbFNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGZpbGlhbFNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBmaWxpYWxTZWFyY2hHcmlkRGF0YTogRmlsaWFsW107XG4gICAgcHVibGljIGZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIGZvcm5lY2Vkb3JMb29rdXBTdWdnZXN0aW9uczogUGVzc29hW107XG4gICAgcHVibGljIGZvcm5lY2Vkb3JMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiLCBcImNwZkNucGpcIl07XG4gICAgcHVibGljIGZvcm5lY2Vkb3JBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIiwgXCJzaXR1YWNhb1wiLCBcImNwZkNucGpcIiwgXCJ0aXBvUGFydGljaXBhbnRlXCJdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgZm9ybmVjZWRvclNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGZvcm5lY2Vkb3JTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvclNlYXJjaEdyaWREYXRhOiBQZXNzb2FbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvclNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIG9yaWdlbU1lcmNhZG9yaWFMb29rdXBTdWdnZXN0aW9uczogUGVzc29hRW5kZXJlY29bXTtcbiAgICBwdWJsaWMgb3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJjZXBcIiwgXCJlbmRlcmVjb1wiLCBcImVtcHJlc2EuZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJjZXBcIiwgXCJlbmRlcmVjb1wiLCBcIm51bWVyb1wiLCBcImNvbXBsZW1lbnRvXCIsIFwiY2lkYWRlLipcIiwgXCJiYWlycm9cIiwgXCJzaXR1YWNhb1wiLCBcImVtcHJlc2EuZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgb3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIG9yaWdlbU1lcmNhZG9yaWFTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgb3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEdyaWREYXRhOiBQZXNzb2FFbmRlcmVjb1tdO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgcHJvZHV0b0xvb2t1cFN1Z2dlc3Rpb25zOiBQcm9kdXRvW107XG4gICAgcHVibGljIHByb2R1dG9Mb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCIsIFwidGlwb1wiXTtcbiAgICBwdWJsaWMgcHJvZHV0b0FkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwiY29tcHJhZG9cIiwgXCJkZXNjcmljYW9cIiwgXCJwcm9kdXRvTWlzdG9cIiwgXCJzaXR1YWNhb1wiLCBcInRpcG9cIl07XG4gICAgcHVibGljIHByb2R1dG9Mb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHB1YmxpYyBwcm9kdXRvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgcHJvZHV0b1NlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBwcm9kdXRvU2VhcmNoR3JpZERhdGE6IFByb2R1dG9bXTtcbiAgICBwdWJsaWMgcHJvZHV0b1NlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIGFnZW5kYUxvb2t1cFN1Z2dlc3Rpb25zOiBBZ2VuZGFbXTtcbiAgICBwdWJsaWMgYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBhZ2VuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBwdWJsaWMgYWdlbmRhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgYWdlbmRhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgYWdlbmRhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGFnZW5kYVNlYXJjaEdyaWREYXRhOiBBZ2VuZGFbXTtcbiAgICBwdWJsaWMgYWdlbmRhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgZGVyaXZhY2FvTG9va3VwU3VnZ2VzdGlvbnM6IERlcml2YWNhb1tdO1xuICAgIHB1YmxpYyBkZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBkZXJpdmFjYW9BZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBwdWJsaWMgZGVyaXZhY2FvTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgZGVyaXZhY2FvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZGVyaXZhY2FvU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGRlcml2YWNhb1NlYXJjaEdyaWREYXRhOiBEZXJpdmFjYW9bXTtcbiAgICBwdWJsaWMgZGVyaXZhY2FvU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFMb29rdXBTdWdnZXN0aW9uczogVHJhbnNwb3J0YWRvcmFbXTtcbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwicGVzc29hLm5vbWVcIiwgXCJwZXNzb2EuY3BmQ25walwiXTtcbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcInBlc3NvYS5ub21lXCIsIFwicGVzc29hLmNwZkNucGpcIl07XG4gICAgcHVibGljIHRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWREYXRhOiBUcmFuc3BvcnRhZG9yYVtdO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIHRyYW5zZ2VuaWFMb29rdXBTdWdnZXN0aW9uczogVHJhbnNnZW5pYVtdO1xuICAgIHB1YmxpYyB0cmFuc2dlbmlhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBwdWJsaWMgdHJhbnNnZW5pYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyB0cmFuc2dlbmlhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgdHJhbnNnZW5pYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIHRyYW5zZ2VuaWFTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgdHJhbnNnZW5pYVNlYXJjaEdyaWREYXRhOiBUcmFuc2dlbmlhW107XG4gICAgcHVibGljIHRyYW5zZ2VuaWFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHB1YmxpYyBkaXNhYmxlQnV0dG9uU2F2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBkaXNhYmxlT3JkZXJzQnV0dG9uczogYm9vbGVhbiA9IHRydWU7XG4gICAgcHVibGljIGNyZWF0ZWRCeUVycDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyB0b3RhbEVpeG9zQ29udHJhdGFkb3M6IG51bWJlciA9IDA7XG4gICAgcHVibGljIHRvdGFsRWl4b3NDb21wb3NpY2FvOiBudW1iZXIgPSAwO1xuXG4gICAgcHVibGljIHRpcG9zTm90YTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogVGlwb05vdGFGaXNjYWwgfVtdID0gW1xuICAgICAgICB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50aXBvX25vdGFfZmlzY2FsX2VtcHJlc2FfanVyaWRpY2FcIiksIHZhbHVlOiBUaXBvTm90YUZpc2NhbC5FTVBSRVNBX0pVUklESUNBIH0sXG4gICAgICAgIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRpcG9fbm90YV9maXNjYWxfcHJvZHV0b3JfcnVyYWxcIiksIHZhbHVlOiBUaXBvTm90YUZpc2NhbC5QUk9EVVRPUl9SVVJBTCB9LFxuICAgIF07XG5cbiAgICBwdWJsaWMgc2F2ZUFuZEluaXRCdXR0b246IGFueTtcblxuICAgIEBJbnB1dCgpIHByaXZhdGUgYWdlbmRhOiBBZ2VuZGE7XG5cbiAgICBAVmlld0NoaWxkKFwiY3VzdG9tVGVtcGxhdGVcIilcbiAgICBwdWJsaWMgY3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKFwiY3VzdG9tRm9ybUZpZWxkc1wiKVxuICAgIHB1YmxpYyBjdXN0b21Gb3JtRmllbGRzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHVibGljIGNoYXZlTm90YUZpc2NhbDogc3RyaW5nO1xuICAgIHB1YmxpYyBlcnJvQ2hhdmVOb3RhID0gZmFsc2U7XG4gICAgcHVibGljIGVycm9Gb3JuZWNlZG9yZXMgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBub3Rhc1Rva2VuczogSVRva2VuW10gPSBbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvck5vdGFzVG9rZW5zOiBJVG9rZW5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yTm90YXMgPSBbXTtcblxuICAgIHB1YmxpYyBjb250cmF0b1NlbGVjaW9uYWRvOiBhbnkgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByaXZhdGUgZm9ybUNhcnJlZ2FkbzogYW55O1xuXG4gICAgcHJpdmF0ZSBlcnBQcm9jZXNzRGF0YTogRXJwUHJvY2Vzc0RhdGE7XG4gICAgcHJpdmF0ZSBlbmFibGVSZXZhbGlkYXRpb246IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGNvbnRyYXRvczogYW55O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVjZWJpbWVudG9TZXJ2aWNlOiBSZWNlYmltZW50b0NvbnRyYXRvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBob3RrZXlzU2VydmljZTogSG90a2V5c1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmllbGRDdXN0b21pemF0aW9uOiBGaWVsZEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZvY3VzU2VydmljZTogRm9jdXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZpbGlhbFNlcnZpY2U6IEZpbGlhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNwb3J0YWRvcmFTZXJ2aWNlOiBUcmFuc3BvcnRhZG9yYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGVzc29hRW5kZXJlY29TZXJ2aWNlOiBQZXNzb2FFbmRlcmVjb1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29udHJhdG9Db21wcmFTZXJ2aWNlOiBDb250cmF0b0NvbXByYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGVzc29hU2VydmljZTogUGVzc29hU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcm9kdXRvU2VydmljZTogUHJvZHV0b1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGVyaXZhY2FvU2VydmljZTogRGVyaXZhY2FvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWNlYmltZW50b0NoZWdhZGFPdmVycmlkZTogUmVjZWJpbWVudG9DaGVnYWRhVmVpY3Vsb092ZXJyaWRlLFxuICAgICAgICBwcml2YXRlIG5vdGFWYWxpZGF0b3JTZXJ2aWNlOiBOb3RhVmFsaWRhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2dlbmlhU2VydmljZTogVHJhbnNnZW5pYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhZ2VuZGFTZXJ2aWNlOiBBZ2VuZGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVycFByb2Nlc3NTZXJ2aWNlOiBFcnBQcm9jZXNzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnBGb3JtQ29uZmlnU2VydmljZTogRXJwRm9ybUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmVyaWZpY2FOb3RhRmlzY2FsOiBWZXJpZmljYU5vdGFmaXNjYWwsXG4gICAgICAgIHByaXZhdGUgaGFzQ2hhbmdlU2VydmljZTogSGFzQ2hhbmdlU2VydmljZSxcblxuICAgICkgeyB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5nZXRGb3JtR3JvdXAoKTtcbiAgICAgICAgdGhpcy5pdGVtRm9ybUdyb3VwID0gdGhpcy5nZXRJdGVtRm9ybSgpO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKVxuICAgICAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25GaWxpYWxWYWx1ZUNoYW5nZSk7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKVxuICAgICAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVyaXZhY2FvID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZGVyaXZhY2FvXCIpLnZhbHVlIGFzIERlcml2YWNhbztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhZGVyaXZhY2FvICYmIGRlcml2YWNhby5wcm9kdXRvLmlkID09PSB2YWx1ZS5pZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAodmFsdWUgPT4gdGhpcy5kZXJpdmFjYW9TZXJ2aWNlLmxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeTogYHByb2R1dG8uaWQgZXEgJyR7dmFsdWUuaWR9JyBhbmQgc2l0dWFjYW8gZXEgJ0FUSVZPJ2AsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDFcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29udGVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5zZXRWYWx1ZShjb250ZW50c1swXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZGVyaXZhY2FvXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5vblJvdXRlRGF0YUNoYW5nZShkYXRhKSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh7IGFnZW5kYSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoYWdlbmRhID09ICduZXcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXNjYXJGaWxpYWwoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRSZWNlYmltZW50byhhZ2VuZGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAuZ2V0KCd0cmFuc3BvcnRhZG9yYScpXG4gICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAuZ2V0KCd0cmFuc2dlbmlhJylcbiAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25DaGFuZ2VSZXZhbGlkYXRpb24pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgIC5nZXQoJ2Zvcm5lY2Vkb3JlcycpXG4gICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZmlsaWFsU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yU2VhcmNoRmllbGRzID0gdGhpcy5nZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZm9ybmVjZWRvclNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEZvcm5lY2Vkb3JTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRPcmlnZW1NZXJjYWRvcmlhRmllbGRzKCk7XG4gICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldE9yaWdlbU1lcmNhZG9yaWFHcmlkRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5wcm9kdXRvU2VhcmNoRmllbGRzID0gdGhpcy5nZXRQcm9kdXRvU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMucHJvZHV0b1NlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFByb2R1dG9TZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5hZ2VuZGFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLmFnZW5kYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLmRlcml2YWNhb1NlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0RGVyaXZhY2FvU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0RGVyaXZhY2FvU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLnRyYW5zZ2VuaWFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldFRyYW5zZ2VuaWFTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy50cmFuc2dlbmlhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0VHJhbnNnZW5pYVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLnNldEhvdGtleXMoKTtcblxuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VHJhbnNwb3J0YWRvcmEodGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQuY25waik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudmVpY3VsbyA/IHRoaXMuYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICAgICAgY29uc3Qgc3RhdHVzQWdlbmRhID0gW1xuICAgICAgICAgICAgXCJBR1VBUkRBTkRPX0NPTkZJUk1BQ0FPX1NPTElDSVRBTlRFXCIsXG4gICAgICAgICAgICBcIkFHRU5EQURPXCIsXG4gICAgICAgICAgICBcIkFHVUFSREFORE9fQ09ORklSTUFDQU9cIixcbiAgICAgICAgICAgIFwiRU1fRVhFQ1VDQU9cIixcbiAgICAgICAgICAgIFwiUkVKRUlUQURPX1BPUl9WQUxJREFDQU9cIixcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgIXN0YXR1c0FnZW5kYS5pbmNsdWRlcyh0aGlzLmFnZW5kYS5zdGF0dXMpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVCdXR0b25TYXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuY3VycmVudC5zdWJzY3JpYmUobWVzc2FnZSA9PiB0aGlzLmVycFByb2Nlc3NEYXRhID0gbWVzc2FnZSk7XG4gICAgICAgIHRoaXMuZXJwRm9ybUNvbmZpZ1NlcnZpY2UuY3VycmVudC5zdWJzY3JpYmUobWVzc2FnZSA9PiB0aGlzLmVuYWJsZVJldmFsaWRhdGlvbiA9IG1lc3NhZ2UpO1xuXG4gICAgICAgIHRoaXMudmVyaWZpY2FTZVRlbUFsdGVyYWNhbygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmVyaWZpY2FTZVRlbUFsdGVyYWNhbygpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtQ2FycmVnYWRvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25DaGFuZ2VSZXZhbGlkYXRpb24gPSAoXykgPT4ge1xuICAgICAgICBpZiAodGhpcy5lcnBQcm9jZXNzRGF0YSAmJiB0aGlzLmZvcm1Hcm91cCkge1xuICAgICAgICAgICAgdGhpcy5lcnBQcm9jZXNzRGF0YSA9IHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuYnVpbGRlckVycFByb2Nlc3NEYXRhKHRoaXMuZXJwUHJvY2Vzc0RhdGEsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICAgICAgICAgIHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuY2hhbmdlRGF0YSh0aGlzLmVycFByb2Nlc3NEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgaW5wdXRMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbnB1dCA9IEFycmF5LmZyb20oaW5wdXRMaXN0KS5maW5kKChmOiBhbnkpID0+ICFmLmRpc2FibGVkKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSW5wdXQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5yZWNlYmltZW50b0NoZWdhZGFPdmVycmlkZS5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5pdCcpO1xuICAgICAgICB0aGlzLmNyZWF0ZWRCeUVycERpc2FibGVGb3JtKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yZWNlYmltZW50b0NoZWdhZGFPdmVycmlkZS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlZEJ5RXJwRGlzYWJsZUZvcm0oKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU9yZGVyc0J1dHRvbnMgPSB0aGlzLmFnZW5kYS5jcmVhdGVkQnlFcnA7XG4gICAgICAgIGlmICh0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS5jcmVhdGVkQnlFcnApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnZmlsaWFsJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdwcm9kdXRvJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdkZXJpdmFjYW8nKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVGb3JuZWNlZG9yZXMoKTtcblxuICAgICAgICAgICAgaWYgKCEhdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNwb3J0YWRvcmFcIikudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3RyYW5zcG9ydGFkb3JhJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVGb3JuZWNlZG9yZXMoKSB7ICAgICAgICBcbiAgICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZvckVhY2goZm9ybSA9PiBmb3JtLmdldChcImZvcm5lY2Vkb3JcIikuZGlzYWJsZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0SG90a2V5cygpIHtcbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K3hcIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmV4Y2x1aXIpIHRoaXMub25EZWxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtzXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc05ldygpIHx8IHRoaXMucGVybWlzc2lvbnMuZWRpdGFyKSB0aGlzLm9uU2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K2NcIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJsdXJDaGF2ZU5vdGFGaXNjYWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnZlcmlmaWNhTm90YUZpc2NhbC52ZXJpZmljYVNlTm90YUZpc2NhbEVzdGFEdXBsaWNhZGEodGhpcy5jaGF2ZU5vdGFGaXNjYWwsIHRoaXMuY29udHJhdG9zLCB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2VucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlTm90YUVycm9yKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jaGF2ZU5vdGFGaXNjYWw7XG4gICAgICAgIGlmICghIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUJ1c2NhbmRvTm90YSgpO1xuICAgICAgICAgICAgdGhpcy5ub3RhVmFsaWRhdG9yU2VydmljZS5wZXNxdWlzYXJEb2N1bWVudG9WYWxpZGFOb3RhRW1Vc28oe1xuICAgICAgICAgICAgICAgIGZpbGlhbElkOiAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlICYmIHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZS5pZCkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgICBjaGF2ZURvY3VtZW50bzogdmFsdWUudHJpbSgpXG4gICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB0aGlzLmFkaWNpb25hck5vdmFOb3RhKHJlc3BvbnNlKSk7XG4gICAgICAgIH0gXG4gICAgfVxuXG4gICAgcHVibGljIGlzTmV3KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuZm9ybUdyb3VwLnZhbHVlLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVTdWdnZXN0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZS5mb3JuZWNlZG9yKSB7XG4gICAgICAgICAgICB2YWx1ZS5mb3JuZWNlZG9yLmxhYmVsID0gdGhpcy5nZXRTdWdnZXN0aW9uVmFsdWUoXG4gICAgICAgICAgICAgICAgW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJub21lXCIsIFwic2l0dWFjYW9cIl0sXG4gICAgICAgICAgICAgICAgXCJmb3JuZWNlZG9yXCIsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmZvcm5lY2Vkb3IubGFiZWwudHJpbSgpID09PSB0aGlzLmZvcm5lY2Vkb3JMb29rdXBTZXBhcmF0b3IudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLmZvcm5lY2Vkb3IubGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUucHJvZHV0bykge1xuICAgICAgICAgICAgdmFsdWUucHJvZHV0by5sYWJlbCA9IHRoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlKFxuICAgICAgICAgICAgICAgIFtcImlkXCIsIFwiY29kaWdvXCIsIFwiY29tcHJhZG9cIiwgXCJkZXNjcmljYW9cIiwgXCJwcm9kdXRvTWlzdG9cIiwgXCJzaXR1YWNhb1wiLCBcInRpcG9cIl0sXG4gICAgICAgICAgICAgICAgXCJwcm9kdXRvXCIsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdXRvTG9va3VwU2VwYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHZhbHVlLnByb2R1dG8ubGFiZWwudHJpbSgpID09PSB0aGlzLnByb2R1dG9Mb29rdXBTZXBhcmF0b3IudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLnByb2R1dG8ubGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUuYWdlbmRhKSB7XG4gICAgICAgICAgICB2YWx1ZS5hZ2VuZGEubGFiZWwgPSB0aGlzLmdldFN1Z2dlc3Rpb25WYWx1ZShbXCJpZFwiLCBcImRlc2NyaWNhb1wiXSwgXCJhZ2VuZGFcIiwgdmFsdWUsIHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5hZ2VuZGEubGFiZWwudHJpbSgpID09PSB0aGlzLmFnZW5kYUxvb2t1cFNlcGFyYXRvci50cmltKCkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUuYWdlbmRhLmxhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmRlcml2YWNhbykge1xuICAgICAgICAgICAgdmFsdWUuZGVyaXZhY2FvLmxhYmVsID0gdGhpcy5nZXRTdWdnZXN0aW9uVmFsdWUoXG4gICAgICAgICAgICAgICAgW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl0sXG4gICAgICAgICAgICAgICAgXCJkZXJpdmFjYW9cIixcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5kZXJpdmFjYW8ubGFiZWwudHJpbSgpID09PSB0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvci50cmltKCkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUuZGVyaXZhY2FvLmxhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN1Z2dlc3Rpb25WYWx1ZShkaXNwbGF5RmllbGRzOiBzdHJpbmdbXSwgb3duZXJFbnRpdHk6IHN0cmluZywgdmFsdWU6IGFueSwgc2VwYXJhdG9yOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgIC5tYXAoZmllbGQgPT4gdGhpcy5nZXRQcm9wKHZhbHVlLCBgJHtvd25lckVudGl0eX0uJHtmaWVsZH1gKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYzogYW55LCB2YWw6IGFueSkgPT4gYCR7YWNjfSR7c2VwYXJhdG9yfSR7dmFsfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvdXRlRGF0YUNoYW5nZShkYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW5jeVN5bWJvbCwgdGhvdXNhbmRzU2VwYXJhdG9yLCBkZWNpbWFsU2VwYXJhdG9yIH0gPSBkYXRhLmxvY2FsZUNvbmZpZy5udW1iZXI7XG5cbiAgICAgICAgdGhpcy5sb2NhbGVDb25maWcgPSBkYXRhLmxvY2FsZUNvbmZpZztcbiAgICAgICAgdGhpcy5jdXJyZW5jeUxvY2FsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhbGlnbjogXCJsZWZ0XCIsXG4gICAgICAgICAgICBwcmVmaXg6IGN1cnJlbmN5U3ltYm9sLFxuICAgICAgICAgICAgdGhvdXNhbmRzOiB0aG91c2FuZHNTZXBhcmF0b3IsXG4gICAgICAgICAgICBkZWNpbWFsOiBkZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gZGF0YS5hbGxQZXJtaXNzaW9ucy5yZWNlYmltZW50bztcbiAgICAgICAgdGhpcy5hbGxQZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnM7XG4gICAgICAgIC8vdGhpcy52YWxpZGF0ZVZpc3VhbGl6YXRpb24oKTtcbiAgICAgICAgaWYgKGRhdGEuZW50aXR5KSB7XG4gICAgICAgICAgICBjb25zdCBjYW5FZGl0ID0gdGhpcy5wZXJtaXNzaW9ucy5lZGl0YXI7XG4gICAgICAgICAgICBpZiAoIWNhbkVkaXQpIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBSZWNlYmltZW50b0NvbnRyYXRvLmZyb21EdG8oZGF0YS5lbnRpdHkpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdWdnZXN0aW9ucyh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3IFJlY2ViaW1lbnRvQ29udHJhdG8oKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuZ29CYWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VuZEZpbGUoZmlsZXNUb0RlbGV0ZTogYW55LCBmaWxlc1RvQ29tbWl0OiBhbnlbXSkge1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlczogYW55W10gPSBbXTtcblxuICAgICAgICBpZiAoIXRoaXMuZmllbGRDdXN0b21pemF0aW9uLmlzRW1wdHkoZmlsZXNUb0RlbGV0ZSkpIHtcbiAgICAgICAgICAgIG9ic2VydmFibGVzLnB1c2godGhpcy5maWVsZEN1c3RvbWl6YXRpb24uZGVsZXRlRmlsZXMoZmlsZXNUb0RlbGV0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShmaWxlc1RvQ29tbWl0KSkge1xuICAgICAgICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5jb21taXRGaWxlcyhmaWxlc1RvQ29tbWl0KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZmllbGRDdXN0b21pemF0aW9uLmlzRW1wdHkob2JzZXJ2YWJsZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4ob2JzZXJ2YWJsZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblNhdmUoc3RhcnQ/OiBib29sZWFuKSB7XG4gICAgICAgIFxuICAgICAgICBpZiAoKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9Gb3JuZWNlZG9yZXMgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyh0aGlzLmZvcm1Hcm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTmV3KCkgIHx8ICF0aGlzLmVuYWJsZVJldmFsaWRhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFuZEluaXQoc3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lcnBQcm9jZXNzRGF0YSA9IHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuYnVpbGRlckVycFByb2Nlc3NEYXRhVmFsaWRhTm90YU5vQ29udHJhdG8odGhpcy5lcnBQcm9jZXNzRGF0YSwgdGhpcy5mb3JtR3JvdXApO1xuICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmNoYW5nZURhdGFFcnAodGhpcy5lcnBQcm9jZXNzRGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgICAgIC5jaGVjYXJSZXZhbGlkYWNhbyh0aGlzLmVycFByb2Nlc3NEYXRhKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXF1ZXJSZXZhbGlkYWNhbykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dWFsaXphQWdlbmRhUGFyYVJlamVpdGFkb1BvclZhbGlkYWNhbygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlQW5kSW5pdChzdGFydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdHVhbGl6YUFnZW5kYVBhcmFSZWplaXRhZG9Qb3JWYWxpZGFjYW8oKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5wYXRpby5hZ2VuZGFfcmV2YWxpZGFjYW9fdGl0bGVcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLnBhdGlvLmFnZW5kYV9yZXZhbGlkYWNhb19tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZVNhdmUodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWdlbmRhLnN0YXR1cyA9IFN0YXR1c0FnZW5kYS5SRUpFSVRBRE9fUE9SX1ZBTElEQUNBTztcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5kYS5tb3RvcmlzdGEgPSB7aWQ6IHRoaXMuZXJwUHJvY2Vzc0RhdGEubW90b3Jpc3RhSWR9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWdlbmRhLnZlaWN1bG8gPSB7aWQ6IHRoaXMuZXJwUHJvY2Vzc0RhdGEudmVpY3Vsb0lkfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLmF0dWFsaXphckFnZW5kYSh0aGlzLmFnZW5kYSlcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoXykgPT4gdGhpcy5nZXRTYXZlT2JzZXJ2YWJsZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvY2hlZ2FkYS12ZWljdWxvXCJdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlamVjdDogKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZUFuZEluaXQoc3RhcnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5nZXRTYXZlT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiaWRcIikuc2V0VmFsdWUodmFsdWUuaWQgfHwgbnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgJiYgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVBbmRJbml0QnV0dG9uLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWNjZXNzTWVzc2FnZSgpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgc2V2ZXJpdHk6IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfdGl0bGVcIiksXG4gICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJzYXZlZF9tZXNzYWdlX2NvbnRlbnRcIiksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRlbGV0ZSgpIHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVsZXRlX2NvbmZpcm1hdGlvbl9tZXNzYWdlXCIpLFxuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZWxldGVfY29uZmlybWF0aW9uX3RpdGxlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGVsZXRlT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUcmFuc3BvcnRhZG9yYSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY25waiA9IHZhbHVlLnJlcGxhY2UoJy4nLCAnJykucmVwbGFjZSgnLycsICcnKS5yZXBsYWNlKCctJywgJycpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSBgcGVzc29hLmNwZkNucGogZXEgJyR7Y25wan0nYDtcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlLmxpc3QoeyBmaWx0ZXJRdWVyeSwgcGFnZTogMCwgc2l6ZTogMTAgfSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGNvbnRlbnRzWzBdLmNvZGlnbyA/IGNvbnRlbnRzWzBdLmNvZGlnby50b1N0cmluZygpIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGNvbnRlbnRzWzBdLmRlc2NyaWNhbyA/IGNvbnRlbnRzWzBdLmRlc2NyaWNhby50b1N0cmluZygpIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0aW9uLnRyaW0oKSAmJiAhY29kZS50cmltKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1swXS5sYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3ltcy5lcnAuZGVyaXZhY2FvX3NlbV9kZXNjcmljYW8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbMF0ubGFiZWwgPSBgJHtjb2RlfSAtICR7ZGVzY3JpcHRpb259YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgndHJhbnNwb3J0YWRvcmEnKS5zZXRWYWx1ZShjb250ZW50c1swXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQcm9wKG9iajogYW55LCBwYXRoOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLnJlZHVjZSgocmVzdWx0OiBhbnksIHByb3A6IGFueSkgPT4gKHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHJlc3VsdFtwcm9wXSksIG9iaik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlY2ViaW1lbnRvKGFnZW5kYUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNlYmltZW50b1NlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeTogYGFnZW5kYS5pZCBlcSAnJHthZ2VuZGFJZH0nYCxcbiAgICAgICAgICAgICAgICBzaXplOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2U6IDBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNjYXJGaWxpYWwoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudG90YWxFaXhvc0NvbnRyYXRhZG9zID0gY29udGVudHNbMF0uZWl4b3MgfHwgMDtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gY29udGVudHNbMF0uYWdlbmRhICYmIGNvbnRlbnRzWzBdLmFnZW5kYS52ZWljdWxvXG4gICAgICAgICAgICAgICAgICAgID8gY29udGVudHNbMF0uYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZWNlYmltZW50byA9IFJlY2ViaW1lbnRvQ29udHJhdG8uZnJvbUR0byhjb250ZW50c1swXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShyZWNlYmltZW50byk7XG5cbiAgICAgICAgICAgICAgICByZWNlYmltZW50by5mb3JuZWNlZG9yZXMuZm9yRWFjaChmb3JuZWNlZG9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0Rm9ybmVjZWRvckZvcm0oZm9ybmVjZWRvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvcmVzKCkucHVzaChmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yLmNvbnRyYXRvcy5mb3JFYWNoKGNvbnRyYXRvID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyYXRvRm9ybSA9IHRoaXMuZ2V0Q29udHJhdG9Gb3JtKGNvbnRyYXRvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJhdG9zKGZvcm0pLnB1c2goY29udHJhdG9Gb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhdG8uaXRlbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRm9ybSA9IHRoaXMuZ2V0SXRlbUZvcm0oaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRJdGVuc0NvbnRyYXRvKGNvbnRyYXRvRm9ybSkucHVzaChpdGVtRm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhdG8ubm90YXMuZm9yRWFjaChub3RhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RhRm9ybSA9IHRoaXMuZ2V0Tm90YUZvcm0obm90YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROb3Rhcyhjb250cmF0b0Zvcm0pLnB1c2gobm90YUZvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ2FycmVnYWRvID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwRGlzYWJsZUZvcm0oKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZpbGlhbExvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5JbnRlZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfSwgeyBjbnBqczogdGhpcy5hZ2VuZGEucGxhbnRhLmNucGosIHBhZ2luYTogeyBsaW1pdDogMTAsIG9mZnNldDogMCB9IH0gYXMgUGVzcXVpc2FyRmlsaWFpc0lucHV0KTtcblxuICAgICAgICB0aGlzLmZpbGlhbFNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0RmlsaWFpcyhmaWx0ZXJJbnB1dClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB0aGlzLmZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5maWxpYWlzLm1hcChGaWxpYWwuZnJvbUR0bykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZpbGlhbFNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydDogU29ydE1ldGFbXSA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IHNvcnRGb3JtYXR0ZWQgPSAhIShzb3J0IHx8IFtdKS5sZW5ndGggJiYgeyBjYW1wbzogc29ydFswXS5maWVsZCwgb3JkZW5hY2FvOiBzb3J0WzBdLm9yZGVyID4gMCA/ICdBc2MnIDogJ0Rlc2MnIH07XG4gICAgICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5yZWR1Y2UoKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IGAke3ZhbHVlfWAucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfSwgeyBjbnBqczogdGhpcy5hZ2VuZGEucGxhbnRhLmNucGosIHBhZ2luYTogeyBsaW1pdDogcm93cywgb2Zmc2V0OiBwYWdlLCBsaXN0YU9yZGVuYWNhbzogc29ydEZvcm1hdHRlZCA/IFt7IC4uLihzb3J0Rm9ybWF0dGVkKSB9XSA6IG51bGwgfSB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dCk7XG5cbiAgICAgICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdEZpbGlhaXMoZmlsdGVySW5wdXQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsaWFsU2VhcmNoR3JpZERhdGEgPSBsaXN0LmZpbGlhaXMubWFwKEZpbGlhbC5mcm9tRHRvKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QucXRkVG90YWxSZWdpc3Ryb3M7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Gb3JuZWNlZG9yTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLmZvcm5lY2Vkb3JMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pKTtcblxuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBmaWx0ZXJRdWVyeSA9IGAoJHtmaWx0ZXJRdWVyeX0pJHshIWZpbHRlclF1ZXJ5ID8gJyBhbmQgJyA6IFwiXCJ9c2l0dWFjYW8gZXEgJ0FUSVZPJyBhbmQgZm9ybmVjZWRvciBlcSB0cnVlYDtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5mb3JuZWNlZG9yQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy5mb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRm9ybmVjZWRvclNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Rm9ybmVjZWRvclNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkuY29uY2F0KGAkeyEhZmlsdGVyUXVlcnkgPyAnIGFuZCAnIDogXCJcIn1zaXR1YWNhbyBlcSAnQVRJVk8nIGFuZCBmb3JuZWNlZG9yIGVxIHRydWVgKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5mb3JuZWNlZG9yQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy5mb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvclNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk9yaWdlbU1lcmNhZG9yaWFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcsIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgY29uc3Qgc29ydCA9IHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiAoeyBmaWVsZCwgb3JkZXI6IDEgfSkpO1xuXG4gICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0T3JpZ2VtTWVyY2Fkb3JpYUZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgICAgIGZpbHRlclF1ZXJ5ID0gYCgke2ZpbHRlclF1ZXJ5fSkkeyEhZmlsdGVyUXVlcnkgPyAnIGFuZCAnIDogJyd9c2l0dWFjYW8gZXEgJ0FUSVZPJyBhbmQgcGVzc29hLmlkIGVxICcke2Zvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUuaWR9J2A7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMucGVzc29hRW5kZXJlY29TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uT3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSwgZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0T3JpZ2VtTWVyY2Fkb3JpYUZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkuY29uY2F0KGAkeyEhZmlsdGVyUXVlcnkgPyAnIGFuZCAnIDogJyd9c2l0dWFjYW8gZXEgJ0FUSVZPJyBhbmQgcGVzc29hLmlkIGVxICcke2Zvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUuaWR9J2ApO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLnBlc3NvYUVuZGVyZWNvU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVjUGFnaW5hKGZpcnN0OiBudW1iZXIsIHJvd3M6IG51bWJlciwgc29ydDogYW55KSB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IG9yZGVyQnkgPSBzb3J0ICYmIHNvcnQubGVuZ3RoIFxuICAgICAgICAgICAgPyBzb3J0Lm1hcCgoczogYW55KSA9PiAoeyBjYW1wbzogcy5maWVsZCwgb3JkZW5hY2FvOiBzLm9yZGVyID09PSAxID8gJ0FzYycgOiAnRGVzYycgfSkpIFxuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9mZnNldDogcGFnZSxcbiAgICAgICAgICAgIGxpbWl0OiByb3dzLFxuICAgICAgICAgICAgbGlzdGFPcmRlbmFjYW86IG9yZGVyQnlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblByb2R1dG9Mb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsaWFsID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlO1xuICAgICAgICBjb25zdCB0aXBvQWdlbmRhbWVudG8gPSB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG87XG5cbiAgICAgICAgdGhpcy5wcm9kdXRvU2VydmljZVxuICAgICAgICAgICAgLmxpc3RQcm9kdXRvc1JlY2ViaW1lbnRvKHtcbiAgICAgICAgICAgICAgICBwZXNxdWlzYTogdmFsdWUsXG4gICAgICAgICAgICAgICAgZW1wcmVzYUlkOiAhIWZpbGlhbCA/IGZpbGlhbC5lbXByZXNhLmlkIDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaWxpYWxJZDogISFmaWxpYWwgPyBmaWxpYWwuaWQgOiBudWxsLFxuICAgICAgICAgICAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOiAhIXRpcG9BZ2VuZGFtZW50byA/IHRpcG9BZ2VuZGFtZW50by5pZCA6IG51bGxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHV0b0xvb2t1cFN1Z2dlc3Rpb25zID0gKGxpc3QucHJvZHV0b3MgfHwgW10pLm1hcCgocHJvZHV0bzogYW55KSA9PiBQcm9kdXRvLmZyb21EdG8ocHJvZHV0bykpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJvZHV0b1NlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydDogU29ydE1ldGFbXSA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IHNvcnRGb3JtYXR0ZWQgPSAhIShzb3J0IHx8IFtdKS5sZW5ndGggJiYgeyBjYW1wbzogc29ydFswXS5maWVsZCwgb3JkZW5hY2FvOiBzb3J0WzBdLm9yZGVyID4gMCA/ICdBc2MnIDogJ0Rlc2MnIH07XG4gICAgICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5nZXRQcm9kdXRvU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAucmVkdWNlKChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH0sIHsgcGFnaW5hOiB7IGxpbWl0OiByb3dzLCBvZmZzZXQ6IHBhZ2UsIGxpc3RhT3JkZW5hY2FvOiBzb3J0Rm9ybWF0dGVkID8gW3sgLi4uKHNvcnRGb3JtYXR0ZWQpIH1dIDogbnVsbCB9IH0gYXMgUHJvZHV0b1JlY2ViaW1lbnRvUGFyYW1zKTtcblxuICAgICAgICBjb25zdCBmaWxpYWwgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWU7XG4gICAgICAgIGNvbnN0IHRpcG9BZ2VuZGFtZW50byA9IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50bztcblxuICAgICAgICB0aGlzLnByb2R1dG9TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdFByb2R1dG9zUmVjZWJpbWVudG8oe1xuICAgICAgICAgICAgICAgIC4uLmZpbHRlcklucHV0LFxuICAgICAgICAgICAgICAgIGVtcHJlc2FJZDogISFmaWxpYWwgPyBmaWxpYWwuZW1wcmVzYS5pZCA6IG51bGwsXG4gICAgICAgICAgICAgICAgZmlsaWFsSWQ6ICEhZmlsaWFsID8gZmlsaWFsLmlkIDogbnVsbCxcbiAgICAgICAgICAgICAgICB0aXBvQWdlbmRhbWVudG9JZDogISF0aXBvQWdlbmRhbWVudG8gPyB0aXBvQWdlbmRhbWVudG8uaWQgOiBudWxsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHV0b1NlYXJjaFRvdGFsUmVjb3JkcyA9IHJlcy5xdGRUb3RhbFJlZ2lzdHJvcztcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1dG9TZWFyY2hHcmlkRGF0YSA9IHJlcy5wcm9kdXRvcy5tYXAoUHJvZHV0by5mcm9tRHRvKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRlcml2YWNhb0xvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzb3J0ID0gdGhpcy5kZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pKTtcblxuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0RGVyaXZhY2FvU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBvciBcIik7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuZGVyaXZhY2FvTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5kZXJpdmFjYW9BZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLmRlcml2YWNhb1NlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMuZGVyaXZhY2FvTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXJpdmFjYW9Mb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EZXJpdmFjYW9TZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0RGVyaXZhY2FvU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuZGVyaXZhY2FvTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5kZXJpdmFjYW9BZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLmRlcml2YWNhb1NlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMuZGVyaXZhY2FvTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXJpdmFjYW9TZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXJpdmFjYW9TZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UcmFuc3BvcnRhZG9yYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcywgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMudHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IsIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlLCB2YWx1ZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRyYW5zcG9ydGFkb3JhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG5cbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMudHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UcmFuc2dlbmlhTG9va3VwUmVxdWVzdCh2YWx1ZTogYW55KSB7XG4gICAgICAgIG9uTG9va3VwUmVxdWVzdCh0aGlzLmdldFRyYW5zZ2VuaWFTZWFyY2hGaWVsZHMoKSwgdGhpcy50cmFuc2dlbmlhTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy50cmFuc2dlbmlhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zZ2VuaWFMb29rdXBTZXBhcmF0b3IsIHRoaXMudHJhbnNnZW5pYVNlcnZpY2UsIHZhbHVlLFxuICAgICAgICAgICAgYGVtcHJlc2EuaWQgZXEgJyR7dGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWxpYWwnKS52YWx1ZS5lbXByZXNhLmlkfScgYW5kIHRpcG9QYXJ0aWNpcGFudGUgZXEgJyR7dGhpcy5nZXRUaXBvVHJhbnNnZW5pYSgpfSdgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHRoaXMudHJhbnNnZW5pYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cyk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVHJhbnNnZW5pYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRUcmFuc2dlbmlhU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLnRyYW5zZ2VuaWFMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zZ2VuaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLnRyYW5zZ2VuaWFTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2dlbmlhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbih0aGlzLnRyYW5zZ2VuaWFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZ2VuaWFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2dlbmlhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZvcm5lY2Vkb3IoZGF0YTogYW55ID0ge30pIHtcbiAgICAgICAgdGhpcy5lcnJvRm9ybmVjZWRvcmVzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEZvcm5lY2Vkb3JGb3JtKGRhdGEpO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZUZvcm5lY2Vkb3IoZm9ybSk7XG4gICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvcmVzKCkucHVzaChmb3JtKTtcbiAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZvcm5lY2Vkb3IoY29udHJvbDogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX2Zvcm5lY2Vkb3JfaGVhZGVyXCIpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX2Zvcm5lY2Vkb3JfbWVzc2FnZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGb3JuZWNlZG9yZXMoKS5jb250cm9scy5pbmRleE9mKGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvcmVzKCkucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybmVjZWRvcmVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29udHJhdG8oZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2VcbiAgICAgICAgICAgIC5vcGVuKENvbnRyYXRvRm9ybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIC4uLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgICAgICBoZWFkZXI6ICdBZGljaW9uYXIgQ29udHJhdG8nLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYWdlbmRhOiB0aGlzLmFnZW5kYSxcbiAgICAgICAgICAgICAgICAgICAgZmlsaWFsOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb2R1dG86IHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3I6IGZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyYXRvczogZm9ybmVjZWRvckZvcm0uZ2V0KFwiY29udHJhdG9zXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub25DbG9zZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgY29udHJhdG8gfTogYW55KSA9PiB0aGlzLm9uQ29udHJhdG9TYXZlZChjb250cmF0bywgZm9ybmVjZWRvckZvcm0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlckNvbnRyYXRvKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIGNvbnRyYXRvRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX2NvbnRyYXRvX2hlYWRlclwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9jb250cmF0b19tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSAoZm9ybmVjZWRvckZvcm0uZ2V0KFwiY29udHJhdG9zXCIpIGFzIEZvcm1BcnJheSkuY29udHJvbHMuaW5kZXhPZihjb250cmF0b0Zvcm0pO1xuICAgICAgICAgICAgICAgIChmb3JuZWNlZG9yRm9ybS5nZXQoXCJjb250cmF0b3NcIikgYXMgRm9ybUFycmF5KS5yZW1vdmVBdChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250cmF0b3MoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbnRyYXRvcyA9IGZvcm5lY2Vkb3JGb3JtLmdldChcImNvbnRyYXRvc1wiKVxuICAgICAgICByZXR1cm4gdGhpcy5jb250cmF0b3MgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGROb3RhKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKE5vdGFGb3JtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmFkaWNpb25hcl9ub3RhXCIpLFxuICAgICAgICAgICAgLi4uZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3I6IGZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIHByb2R1dG86IHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWUsXG4gICAgICAgICAgICAgICAgZmlsaWFsOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUsXG4gICAgICAgICAgICAgICAgZm9ybmVjZWRvck5vdGFzVG9rZW5zOiB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2VucyxcbiAgICAgICAgICAgICAgICBjb250cmF0b3M6IHRoaXMuY29udHJhdG9zLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub25DbG9zZVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpKVxuICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMub25Ob3RhU2F2ZWQodmFsdWUsIGZvcm1Hcm91cCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVyTm90YShmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBjb250cmF0b0Zvcm06IEZvcm1Hcm91cCwgbm90YUZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9ub3RhX2hlYWRlclwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9ub3RhX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cmF0b0lkID0gY29udHJhdG9Gb3JtW1widmFsdWVcIl1bXCJjb250cmF0b1wiXVtcImlkXCJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvckZvcm0sIGNvbnRyYXRvSWQpLmNvbnRyb2xzLmluZGV4T2Yobm90YUZvcm0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtLCBjb250cmF0b0lkKS5yZW1vdmVBdChpbmRleCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBub3RhID0gbm90YUZvcm1bXCJ2YWx1ZVwiXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG5vdGEuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogbm90YS5udW1lcm9Ob3RhRmlzY2FsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNoYXZlTm90YUZpc2NhbDogbm90YS5jaGF2ZU5vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogbm90YS5zZXJpZU5vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBub3RhLnNlcmllTGVnYWxOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBudW1lcm9Ob3RhRmlzY2FsOiBub3RhLm51bWVyb05vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROb3Rhcyhjb250cmF0b0Zvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICByZXR1cm4gY29udHJhdG9Gb3JtW1wiY29udHJvbHNcIl1bXCJub3Rhc1wiXSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZW5zQ29udHJhdG8oY29udHJhdG9Gb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgcmV0dXJuIGNvbnRyYXRvRm9ybS5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dCdXR0b25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuYWdlbmRhKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBTdGF0dXNBZ2VuZGEuQUdFTkRBRE8sXG4gICAgICAgICAgICBTdGF0dXNBZ2VuZGEuQUdVQVJEQU5ET19DT05GSVJNQUNBTyxcbiAgICAgICAgICAgIFN0YXR1c0FnZW5kYS5BR1VBUkRBTkRPX0NPTkZJUk1BQ0FPX1NPTElDSVRBTlRFLFxuICAgICAgICAgICAgU3RhdHVzQWdlbmRhLlJFSkVJVEFET19QT1JfVkFMSURBQ0FPXG4gICAgICAgIF0uaW5jbHVkZXModGhpcy5hZ2VuZGEuc3RhdHVzIGFzIFN0YXR1c0FnZW5kYSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVBZGljaW9uYXJOb3RhKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5jb250cmF0b1NlbGVjaW9uYWRvID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUaXBvVHJhbnNnZW5pYSA9ICgpID0+IHtcbiAgICAgICAgaWYgKCh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFRpcG9QYXJ0aWNpcGFudGVUcmFuc2dlbmlhLk5BT19JTkZPUk1BRE87XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybmVjZWRvciA9ICgodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheSkuYXQoMCkgYXMgRm9ybUdyb3VwKS5nZXRSYXdWYWx1ZSgpLmZvcm5lY2Vkb3I7XG4gICAgICAgIHJldHVybiBmb3JuZWNlZG9yID8gKGZvcm5lY2Vkb3IudGlwb1BhcnRpY2lwYW50ZSB8fCBUaXBvUGFydGljaXBhbnRlVHJhbnNnZW5pYS5OQU9fSU5GT1JNQURPKSA6IFRpcG9QYXJ0aWNpcGFudGVUcmFuc2dlbmlhLk5BT19JTkZPUk1BRE87XG4gICAgfTtcblxuICAgIHByaXZhdGUgZ2V0Tm90YUZvcm0oZGF0YTogYW55ID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgY2hhdmVOb3RhRmlzY2FsOiBbZGF0YS5jaGF2ZU5vdGFGaXNjYWxdLFxuICAgICAgICAgICAgc2VyaWVOb3RhRmlzY2FsOiBbZGF0YS5zZXJpZU5vdGFGaXNjYWxdLFxuICAgICAgICAgICAgc2VyaWVMZWdhbE5vdGFGaXNjYWw6IFtkYXRhLnNlcmllTGVnYWxOb3RhRmlzY2FsXSxcbiAgICAgICAgICAgIG51bWVyb05vdGFGaXNjYWw6IFtkYXRhLm51bWVyb05vdGFGaXNjYWxdLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbnRyYXRvRm9ybShkYXRhOiBhbnkgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBjb250cmF0bzogW2RhdGEuY29udHJhdG8sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgaXRlbnM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgICAgICAgICAgbm90YXM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXRlbUZvcm0oZGF0YTogYW55ID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgaXRlbTogW2RhdGEuaXRlbSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBxdWFudGlkYWRlOiBbZGF0YS5xdWFudGlkYWRlXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm5lY2Vkb3JGb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGZvcm5lY2Vkb3I6IFtkYXRhLmZvcm5lY2Vkb3IsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgb3JpZ2VtTWVyY2Fkb3JpYTogW2RhdGEub3JpZ2VtTWVyY2Fkb3JpYSwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSldLFxuICAgICAgICAgICAgdGlwb05vdGFGaXNjYWw6IFtkYXRhLnRpcG9Ob3RhRmlzY2FsIHx8IFRpcG9Ob3RhRmlzY2FsLkVNUFJFU0FfSlVSSURJQ0EsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgY29udHJhdG9zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtR3JvdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGlkOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGZpbGlhbDogW3VuZGVmaW5lZCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBwcm9kdXRvOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKV0sXG4gICAgICAgICAgICBkZXJpdmFjYW86IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgdHJhbnNwb3J0YWRvcmE6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGFnZW5kYTogW3sgdmFsdWU6IHRoaXMuYWdlbmRhLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSldLFxuICAgICAgICAgICAgdHJhbnNnZW5pYTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBmb3JuZWNlZG9yZXM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgICAgICAgICAgY3JlYXRlZEJ5OiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZEJ5OiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZERhdGU6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgY3VzdG9tOiBbXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yQnlDb250cmF0byhjb250cmF0bzogQ29udHJhdG9Db21wcmFEdG8sIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLmxpc3QoeyBzaXplOiAxLCBwYWdlOiAwLCBmaWx0ZXJRdWVyeTogYGlkIGVxICcke2NvbnRyYXRvLnBlc3NvYS5pZH0nYCB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgbWFwKCh7IGNvbnRlbnRzIH0pID0+IChjb250ZW50cyB8fCBbXSkubGVuZ3RoICYmIGNvbnRlbnRzWzBdKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocGVzc29hID0+IHtcbiAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnNldFZhbHVlKFBlc3NvYS5mcm9tRHRvKHBlc3NvYSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9kdXRvQnlDb250cmF0byhjb250cmF0bzogQ29udHJhdG9Db21wcmFEdG8pIHtcbiAgICAgICAgdGhpcy5jb250cmF0b0NvbXByYVNlcnZpY2UubGlzdEl0ZW5zKGNvbnRyYXRvLmlkLCB7IHNpemU6IDEsIHBhZ2U6IDAsIGRpc3BsYXlGaWVsZHM6IFsnc2t1LmlkJ10gfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRoaXMucHJvZHV0b1NlcnZpY2UubGlzdCh7IHNpemU6IDEsIHBhZ2U6IDAsIGZpbHRlclF1ZXJ5OiBgaWQgZXEgJyR7Y29udGVudHNbMF0uc2t1LmlkfSdgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHsgY29udGVudHMgfSkgPT4gKGNvbnRlbnRzIHx8IFtdKS5sZW5ndGggJiYgY29udGVudHNbMF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHByb2R1dG8gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuc2V0VmFsdWUoUHJvZHV0by5mcm9tRHRvKHByb2R1dG8pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Db250cmF0b1NhdmVkKGNvbnRyYXRvOiBhbnksIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmdldFByb2R1dG9CeUNvbnRyYXRvKGNvbnRyYXRvLmNvbnRyYXRvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGb3JuZWNlZG9yQnlDb250cmF0byhjb250cmF0by5jb250cmF0bywgZm9ybmVjZWRvckZvcm0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udHJhdG9Gb3JtID0gdGhpcy5nZXRDb250cmF0b0Zvcm0oY29udHJhdG8pO1xuICAgICAgICAoY29udHJhdG8uaXRlbnMgfHwgW10pLmZvckVhY2goKGl0ZW06IGFueSkgPT4gKGNvbnRyYXRvRm9ybS5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2godGhpcy5nZXRJdGVtRm9ybShpdGVtKSkpO1xuXG4gICAgICAgIHRoaXMuZ2V0Q29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtKS5wdXNoKGNvbnRyYXRvRm9ybSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZW5zYWdlbUNvbnRyYXRvTmFvU2VsZWNpb25hZG8oKSB7XG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZShcImVycm9yXCIsIFwiQ29udHJhdG8gbsOjbyBzZWxlY2lvbmFkb1wiLCBcIk5lbmh1bSBjb250cmF0byBmb2kgc2VsZWNpb25hZG8hXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Ob3RhU2F2ZWQodmFsdWU6IGFueSwgZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyYXRvU2VsZWNpb25hZG8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW1Db250cmF0b05hb1NlbGVjaW9uYWRvKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbHVlLmFkZEZvcm5lY2Vkb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtLCB0aGlzLmNvbnRyYXRvU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICAgICAgaWYgKG5vdGFzRm9ybSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKHRoaXMuZ2V0Tm90YUZvcm0odmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXN0c0Zvcm5lY2Vkb3IgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheSkuY29udHJvbHMuZmluZCgoZm9ybSkgPT4gKGZvcm0udmFsdWUuZm9ybmVjZWRvciB8fCB7IGlkOiB1bmRlZmluZWQgfSkuaWQgPT09IHZhbHVlLmZvcm5lY2Vkb3IuaWQpO1xuICAgICAgICBjb25zdCBmb3JuZWNlZG9yT2ZHcm91cCA9IHRoaXMudmFsaWRhckNucGpGb3JuZWNlZG9yKChmb3JuZWNlZG9yRm9ybS52YWx1ZS5mb3JuZWNlZG9yIHx8IHsgY3BmQ25wajogdW5kZWZpbmVkIH0pLmNwZkNucGopO1xuICAgICAgICBjb25zdCB7IGluZm9Ob3RhIH0gPSB2YWx1ZTtcbiAgICAgICAgY29uc3Qgbm90YUZvcm0gPSB0aGlzLmdldE5vdGFGb3JtKHsgXG4gICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IGluZm9Ob3RhLmNoYXZlLFxuICAgICAgICAgICAgc2VyaWVOb3RhRmlzY2FsOiBpbmZvTm90YS5zZXJpZSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBpbmZvTm90YS5zZXJpZUxlZ2FsLFxuICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogaW5mb05vdGEubnVtZXJvLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoISFleGlzdHNGb3JuZWNlZG9yKSB7XG4gICAgICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbUNvbnRyYXRvcyhleGlzdHNGb3JuZWNlZG9yLCB0aGlzLmNvbnRyYXRvU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICAgICAgbm90YXNGb3JtLnB1c2gobm90YUZvcm0pO1xuICAgICAgICB9IGVsc2UgaWYgKCFmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlKSB7XG4gICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnNldFZhbHVlKFBlc3NvYS5mcm9tRHRvKHZhbHVlLmZvcm5lY2Vkb3IpKTtcbiAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcIm9yaWdlbU1lcmNhZG9yaWFcIikuc2V0VmFsdWUoUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZS5vcmlnZW1NZXJjYWRvcmlhKSk7XG4gICAgICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbUNvbnRyYXRvcyhmb3JuZWNlZG9yRm9ybSwgdGhpcy5jb250cmF0b1NlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JuZWNlZG9yT2ZHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIGhlYWRlcjogJ0Zvcm5lY2Vkb3IgZG8gbWVzbW8gZ3J1cG8gasOhIGNhZGFzdHJhZG8nLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVbSBmb3JuZWNlZG9yIGRvIG1lc21vIGdydXBvIHBhcmVjZSBqw6EgdGVyIHNpZG8gc2VsZWNpb25hZG8sIGRlc2VqYSB2aW5jdWxhciBhIG5vdGEgYW8gbWVzbW8gZm9ybmVjZWRvcj8nLFxuICAgICAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbUNvbnRyYXRvcyhmb3JuZWNlZG9yT2ZHcm91cCwgdGhpcy5jb250cmF0b1NlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgbm90YXNGb3JtLnB1c2gobm90YUZvcm0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm5lY2Vkb3IgPSB0aGlzLmFkZEZvcm5lY2Vkb3IoeyBmb3JuZWNlZG9yOiBQZXNzb2EuZnJvbUR0byh2YWx1ZS5mb3JuZWNlZG9yKSwgb3JpZ2VtTWVyY2Fkb3JpYTogUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZS5vcmlnZW1NZXJjYWRvcmlhKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvciwgdGhpcy5jb250cmF0b1NlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgbm90YXNGb3JtLnB1c2gobm90YUZvcm0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZm9ybmVjZWRvciA9IHRoaXMuYWRkRm9ybmVjZWRvcih7IGZvcm5lY2Vkb3I6IFBlc3NvYS5mcm9tRHRvKHZhbHVlLmZvcm5lY2Vkb3IpLCBvcmlnZW1NZXJjYWRvcmlhOiBQZXNzb2FFbmRlcmVjby5mcm9tRHRvKHZhbHVlLm9yaWdlbU1lcmNhZG9yaWEpIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvciwgdGhpcy5jb250cmF0b1NlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvckZvcm06IEFic3RyYWN0Q29udHJvbCwgY29udHJhdG9JZDogYW55KSB7XG4gICAgICAgIGxldCBjb250cmF0b3NGb3JtU2VsZWNpb25hZG8gPSBudWxsO1xuICAgICAgICBjb25zdCBjb250cmF0b3NGb3JtID0gZm9ybmVjZWRvckZvcm1bXCJjb250cm9sc1wiXVtcImNvbnRyYXRvc1wiXVtcImNvbnRyb2xzXCJdO1xuXG4gICAgICAgIGZvciAobGV0IGNvbnRyYXRvRm9ybSBvZiBjb250cmF0b3NGb3JtKSB7XG4gICAgICAgICAgICBpZiAoY29udHJhdG9Gb3JtW1wiY29udHJvbHNcIl1bXCJjb250cmF0b1wiXVtcInZhbHVlXCJdLmlkID09PSBjb250cmF0b0lkKSB7XG4gICAgICAgICAgICAgICAgY29udHJhdG9zRm9ybVNlbGVjaW9uYWRvID0gY29udHJhdG9Gb3JtW1wiY29udHJvbHNcIl1bXCJub3Rhc1wiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJhdG9zRm9ybVNlbGVjaW9uYWRvIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRm9ybmVjZWRvck5vdGFzVG9rZW5FbUNvbnRyYXRvKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIHRva2VuOiBJVG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJhdG9TZWxlY2lvbmFkbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUNvbnRyYXRvTmFvU2VsZWNpb25hZG8oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vdGFzID0gdGhpcy5mb3JuZWNlZG9yTm90YXMuZmlsdGVyKGZvcm5lY2Vkb3JOb3RhID0+IGZvcm5lY2Vkb3JOb3RhLmNoYXZlTm90YUZpc2NhbCA9PT0gdG9rZW4uaWQpO1xuICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbUNvbnRyYXRvcyhmb3JuZWNlZG9yRm9ybSwgdGhpcy5jb250cmF0b1NlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgaWYgKG5vdGFzRm9ybSAhPT0gbnVsbCAmJiBub3Rhc1swXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbm90YXNGb3JtLnB1c2godGhpcy5nZXROb3RhRm9ybShub3Rhc1swXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVGb3JuZWNlZG9yTm90YXNUb2tlbkRvQ29udHJhdG8odG9rZW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVGb3JuZWNlZG9yTm90YXNUb2tlbkRvQ29udHJhdG8odG9rZW46IElUb2tlbikge1xuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5zcGxpY2UodGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMuaW5kZXhPZih0b2tlbiksIDEpO1xuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3RhcyA9IHRoaXMuZm9ybmVjZWRvck5vdGFzLmZpbHRlcihmb3JuZWNlZG9yTm90YSA9PiBmb3JuZWNlZG9yTm90YS5jaGF2ZU5vdGFGaXNjYWwgIT09IHRva2VuLmlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkaWNpb25hck5vdmFOb3RhKHJlc3BvbnNlOiBQZXNxdWlzYXJEb2N1bWVudG9SZXNwb25zZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChyZXNwb25zZS5kb2N1bWVudG9zIHx8IFtdKS5sZW5ndGggPyByZXNwb25zZS5kb2N1bWVudG9zWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgaXRlbVByb2R1dG8gPSB2YWx1ZS5pdGVuc1swXSB8fCB7IHByb2R1dG86IHVuZGVmaW5lZCwgZGVyaXZhY2FvOiB1bmRlZmluZWQgfSBhcyBhbnk7XG4gICAgICAgIGNvbnN0IHByb2R1dG8gPSBQcm9kdXRvLmZyb21EdG8oaXRlbVByb2R1dG8ucHJvZHV0byk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlICYmICEhaXRlbVByb2R1dG8ucHJvZHV0bykge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKS5zZXRWYWx1ZShwcm9kdXRvKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5zZXRWYWx1ZShEZXJpdmFjYW8uZnJvbUR0byhpdGVtUHJvZHV0by5kZXJpdmFjYW8pKTtcbiAgICAgICAgfSBlbHNlIGlmICghIWl0ZW1Qcm9kdXRvLnByb2R1dG8gJiYgIXRoaXMudmFsaWRhdGVQcm9kdXRvKHByb2R1dG8pKSB7XG4gICAgICAgICAgICB0aGlzLmFkZE5vdGFFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybmVjZWRvciA9IFBlc3NvYS5mcm9tRHRvKHZhbHVlLmZvcm5lY2Vkb3IpO1xuICAgICAgICBjb25zdCBvcmlnZW1NZXJjYWRvcmlhID0gUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZS5vcmlnZW1NZXJjYWRvcmlhKTtcblxuICAgICAgICBjb25zdCBmb3JuZWNlZG9yRm9ybSA9IHRoaXMuZ2V0Rm9ybmVjZWRvcmVzKCkuY29udHJvbHMuZmluZCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZS5mb3JuZWNlZG9yLmlkID09PSBmb3JuZWNlZG9yLmlkKSBhcyBGb3JtR3JvdXA7XG4gICAgICAgIGNvbnN0IGZvcm5lY2Vkb3JPZkdyb3VwID0gdGhpcy52YWxpZGFyQ25wakZvcm5lY2Vkb3IoZm9ybmVjZWRvci5jcGZDbnBqKTtcblxuICAgICAgICBpZiAoZm9ybmVjZWRvck9mR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgICAgICBoZWFkZXI6ICdGb3JuZWNlZG9yIGRvIG1lc21vIGdydXBvIGrDoSBjYWRhc3RyYWRvJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVW0gZm9ybmVjZWRvciBkbyBtZXNtbyBncnVwbyBwYXJlY2UgasOhIHRlciBzaWRvIHNlbGVjaW9uYWRvLCBkZXNlamEgdmluY3VsYXIgYSBub3RhIGFvIG1lc21vIGZvcm5lY2Vkb3I/JyxcbiAgICAgICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRGb3JuZWNlZG9yTm90YXNUb2tlbih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JuZWNlZG9yRm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRGb3JuZWNlZG9yKHsgZm9ybmVjZWRvciwgb3JpZ2VtTWVyY2Fkb3JpYSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9IGVsc2UgaWYgKCFmb3JuZWNlZG9yRm9ybSkge1xuICAgICAgICAgICAgdGhpcy5hZGRGb3JuZWNlZG9yKHsgZm9ybmVjZWRvciwgb3JpZ2VtTWVyY2Fkb3JpYSB9KTtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvck5vdGFzVG9rZW4odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGb3JuZWNlZG9yTm90YXNUb2tlbih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzVG9rZW5zLnB1c2goeyBpZDogdGhpcy5jaGF2ZU5vdGFGaXNjYWwsIGxhYmVsOiB2YWx1ZS5udW1lcm8gfSk7XG5cbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXMucHVzaCh7XG4gICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IHRoaXMuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgc2VyaWVOb3RhRmlzY2FsOiB2YWx1ZS5zZXJpZSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiB2YWx1ZS5zZXJpZUxlZ2FsLFxuICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogdmFsdWUubnVtZXJvLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYXZlTm90YUZpc2NhbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVOb3RhRXJyb3IoKSB7XG4gICAgICAgIHRoaXMuZXJyb0NoYXZlTm90YSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTm90YUVycm9yKCkge1xuICAgICAgICB0aGlzLmVycm9DaGF2ZU5vdGEgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVQcm9kdXRvKHByb2R1dG86IFByb2R1dG8pIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKTtcbiAgICAgICAgaWYgKHZhbHVlLmlkICE9PSBwcm9kdXRvLmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWxpYWxTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfY29kaWdvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9tZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfbm9tZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY29kaWdvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX25vbWVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjcGZDbnBqXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jcGZDbnBqXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm5lY2Vkb3JTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY3BmQ25walwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmlnZW1NZXJjYWRvcmlhRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlclxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNlcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfZW5kZXJlY29fY2VwXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbmRlcmVjb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfZW5kZXJlY29fZW5kZXJlY29cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfZW5kZXJlY29fbnVtZXJvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJiYWlycm9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2JhaXJyb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yaWdlbU1lcmNhZG9yaWFHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlclxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNlcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfZW5kZXJlY29fY2VwXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbmRlcmVjb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfZW5kZXJlY29fZW5kZXJlY29cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfZW5kZXJlY29fbnVtZXJvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJiYWlycm9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2JhaXJyb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wcmVzYS5kZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZW1wcmVzYVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvZHV0b1NlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnByb2R1dG9fY29kaWdvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnByb2R1dG9fZGVzY3JpY2FvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvZHV0b1NlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wcm9kdXRvX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wcm9kdXRvX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb0NvbXBsZW1lbnRhclwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wcm9kdXRvX2Rlc2NyaWNhb19jb21wbGVtZW50YXJcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWdlbmRhU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuYWdlbmRhX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBZ2VuZGFTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuYWdlbmRhX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZXJpdmFjYW9TZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fY29kaWdvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19kZXNjcmljYW9cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGVyaXZhY2FvU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19jb2RpZ29cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlc3NvYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jbnBqXCIpXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX25vbWVcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2EuY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2dlbmlhU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc2dlbmlhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zZ2VuaWFfZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zZ2VuaWFTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc2dlbmlhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zZ2VuaWFfZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdvQmFjaygpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNSb3V0ZSA9IFwiLi4vXCI7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwcmV2aW91c1JvdXRlXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLnBhcmVudCB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgICAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkgY29udHJvbC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoY29udHJvbCk7XG4gICAgICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSBjb250cm9sLmNvbnRyb2xzLmZvckVhY2goZm9ybSA9PiB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtIGFzIEZvcm1Hcm91cCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvY3VzU2VydmljZS5mb2N1c0ZpcnN0SW52YWxpZElucHV0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTYXZlT2JzZXJ2YWJsZSgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICB2YWx1ZS5hZ2VuZGEgPSB0aGlzLmFnZW5kYTtcbiAgICAgICAgY29uc3QgcmVjZWJpbWVudG9EdG8gPSBSZWNlYmltZW50b0NvbnRyYXRvLnRvRHRvKHZhbHVlKTtcblxuICAgICAgICBsZXQgb2JzZXJ2YWJsZTtcblxuICAgICAgICBpZiAodGhpcy5pc05ldygpICYmICF2YWx1ZS5pZCkge1xuICAgICAgICAgICAgb2JzZXJ2YWJsZSA9IHRoaXMucmVjZWJpbWVudG9TZXJ2aWNlLmluc2VydChyZWNlYmltZW50b0R0byk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHZhbHVlLmlkO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZSA9IHRoaXMucmVjZWJpbWVudG9TZXJ2aWNlLnVwZGF0ZShpZCwgcmVjZWJpbWVudG9EdG8pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZWxldGVPYnNlcnZhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWNlYmltZW50b1NlcnZpY2UuZGVsZXRlKCcnKS5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXCJzdWNjZXNzXCIsIFwieW1zLmVycC5kZWxldGVkX21lc3NhZ2VfdGl0bGVcIiwgXCJ5bXMuZXJwLmRlbGV0ZWRfbWVzc2FnZV9jb250ZW50XCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ29CYWNrKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVWaXN1YWxpemF0aW9uKCkge1xuICAgICAgICBpZiAoIXVzZXJDYW5WaXN1YWxpemUodGhpcy5mb3JtR3JvdXAsIHRoaXMuYWxsUGVybWlzc2lvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXCJlcnJvclwiLCBcInltcy5lcnAuY2Fubm90X3Zpc3VhbGl6ZV9mb3JtX3N1bW1hcnlcIiwgXCJ5bXMuZXJwLmNhbm5vdF92aXN1YWxpemVfZm9ybV9kZXRhaWxcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE1lc3NhZ2Uoc2V2ZXJpdHk6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nLCBkZXRhaWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBzZXZlcml0eSxcbiAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoc3VtbWFyeSksXG4gICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZGV0YWlsKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkZpbGlhbFZhbHVlQ2hhbmdlID0gKGZpbGlhbDogRmlsaWFsKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU9yZGVyc0J1dHRvbnMgPSAhZmlsaWFsO1xuICAgICAgICBpZiAoIWZpbGlhbCAmJiB0aGlzLmlzTmV3KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNnZW5pYVwiKS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNnZW5pYVwiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc2dlbmlhXCIpLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVzY2FyRmlsaWFsKCkge1xuICAgICAgICBjb25zdCBwbGFudGEgPSB0aGlzLmFnZW5kYS5wbGFudGEgfHwgeyBjbnBqOiBbXSB9O1xuICAgICAgICBpZiAocGxhbnRhLmNucGoubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7XG4gICAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgICAgICBzaXplOiAxLFxuICAgICAgICAgICAgICAgIGZpbHRlclF1ZXJ5OiBgcGVzc29hLmNwZkNucGogZXEgJyR7cGxhbnRhLmNucGpbMF19J2AsXG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkczogWycqJywgJ2VtcHJlc2Eubm9tZSddXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS5zZXRWYWx1ZShGaWxpYWwuZnJvbUR0byhjb250ZW50c1swXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maWd1cmVGb3JuZWNlZG9yKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKVxuICAgICAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgICAgICAgdGFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5laFBlc3NvYUp1cmlkaWNhKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLnNldFZhbHVlKFRpcG9Ob3RhRmlzY2FsLkVNUFJFU0FfSlVSSURJQ0EpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwidGlwb05vdGFGaXNjYWxcIikuc2V0VmFsdWUoVGlwb05vdGFGaXNjYWwuUFJPRFVUT1JfUlVSQUwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwidGlwb05vdGFGaXNjYWxcIikuc2V0VmFsdWUoVGlwb05vdGFGaXNjYWwuRU1QUkVTQV9KVVJJRElDQSk7XG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zZ2VuaWFcIikuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc2dlbmlhXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCh2YWx1ZSA9PiB0aGlzLnBlc3NvYUVuZGVyZWNvU2VydmljZS5saXN0KHsgc2l6ZTogMTAsIHBhZ2U6IDAsIGZpbHRlclF1ZXJ5OiBgc2l0dWFjYW8gZXEgJ0FUSVZPJyBhbmQgcGVzc29hLmlkIGVxICcke3ZhbHVlLmlkfSdgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zZ2VuaWFcIikuZW5hYmxlKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcIm9yaWdlbU1lcmNhZG9yaWFcIikuc2V0VmFsdWUoUGVzc29hRW5kZXJlY28uZnJvbUR0byhjb250ZW50c1swXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JpZ2VtTWVyY2Fkb3JpYVwiKS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJvcmlnZW1NZXJjYWRvcmlhXCIpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZWhQZXNzb2FKdXJpZGljYShwZXNzb2E6IFBlc3NvYSkge1xuICAgICAgICBjb25zdCBjcGZDbnBqID0gKHBlc3NvYS5jcGZDbnBqIHx8IFwiXCIpLnJlcGxhY2UoL1xcRCsvZywgXCJcIik7XG4gICAgICAgIHJldHVybiBjcGZDbnBqLmxlbmd0aCA+IDExO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVuc2FnZW1CdXNjYW5kb05vdGEoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIHNldmVyaXR5OiAnaW5mbycsXG4gICAgICAgICAgICBzdW1tYXJ5OiAnQnVzY2FuZG8gZGFkb3MgZGEgbm90YScsXG4gICAgICAgICAgICBkZXRhaWw6ICdBZ3VhcmRlLCBidXNjYW5kbyBkYWRvcyBkYSBub3RhJyxcbiAgICAgICAgICAgIGxpZmU6IDUwMDBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGFyQ25wakZvcm5lY2Vkb3IodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuZWhQZXNzb2FKdXJpZGljYSh7IGNwZkNucGo6IHZhbHVlIH0gYXMgUGVzc29hKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBmb3JuZWNlZG9yID0gKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZpbmQoKGZvcm0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKGZvcm0udmFsdWUuZm9ybmVjZWRvciB8fCB7IGNwZkNucGo6ICcnIH0pLmNwZkNucGogYXMgc3RyaW5nKS5zdWJzdHJpbmcoMCwgOCkgPT09IHZhbHVlLnN1YnN0cmluZygwLCA4KVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZvcm5lY2Vkb3I7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyYXRvSXRlbSB7XG4gICAgaXRlbTogQ29udHJhdG9Db21wcmFJdGVtO1xuICAgIHF1YW50aWRhZGU6IG51bWJlcjtcbn1cbiJdfQ==
|