@seniorsistemas/yms-integration 1.16.0 → 1.16.1

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.
@@ -224,13 +224,7 @@ var RecebimentoFormComponent = /** @class */ (function () {
224
224
  this.setTransportadora(this.agenda.externalTenant.cnpj);
225
225
  }
226
226
  this.totalEixosComposicao = this.agenda && this.agenda.veiculo ? this.agenda.veiculo.eixos || 0 : 0;
227
- var statusAgenda = [
228
- "AGUARDANDO_CONFIRMACAO_SOLICITANTE",
229
- "AGENDADO",
230
- "AGUARDANDO_CONFIRMACAO",
231
- "EM_EXECUCAO",
232
- "REJEITADO_POR_VALIDACAO",
233
- ];
227
+ var statusAgenda = ["AGUARDANDO_CONFIRMACAO_SOLICITANTE", "AGENDADO", "AGUARDANDO_CONFIRMACAO", "REJEITADO_POR_VALIDACAO"];
234
228
  if (this.agenda && !statusAgenda.includes(this.agenda.status)) {
235
229
  this.formGroup.disable();
236
230
  this.disableButtonSave = true;
@@ -1852,4 +1846,4 @@ var RecebimentoFormComponent = /** @class */ (function () {
1852
1846
  return RecebimentoFormComponent;
1853
1847
  }());
1854
1848
  export { RecebimentoFormComponent };
1855
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjZWJpbWVudG8tZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMveW1zLWludGVncmF0aW9uLyIsInNvdXJjZXMiOlsic3JjL2VycC1zZW5pb3IvcmVjZWJpbWVudG8vZm9ybS9yZWNlYmltZW50by1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBaUIsU0FBUyxFQUFFLEtBQUssRUFBcUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQW1CLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFVLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRCxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFZLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FB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QUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNwRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMxRixTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekUsY0FBYyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM1RixVQUFVLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUUsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFD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QUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFsNERRO1FBQVIsS0FBSyxFQUFFOzBDQUFpQixNQUFNOzREQUFDO0lBR2hDO1FBREMsU0FBUyxDQUFDLGdCQUFnQixDQUFDOzBDQUNMLFdBQVc7b0VBQU07SUFHeEM7UUFEQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7MENBQ0wsV0FBVztzRUFBTTtJQTNHakMsd0JBQXdCO1FBUnBDLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIscWpyQkFBZ0Q7WUFDaEQsU0FBUyxFQUFFO2dCQUNQLG1CQUFtQjthQUN0Qjs7U0FFSixDQUFDO2lEQXVJa0MsMEJBQTBCO1lBQ3RDLE1BQU07WUFDUCxjQUFjO1lBQ0wsY0FBYztZQUNULG1CQUFtQjtZQUMzQixXQUFXO1lBQ2IsZ0JBQWdCO1lBQ1gsY0FBYztZQUNWLHlCQUF5QjtZQUMvQixZQUFZO1lBQ1gsYUFBYTtZQUNMLHFCQUFxQjtZQUNyQixxQkFBcUI7WUFDckIscUJBQXFCO1lBQzdCLGFBQWE7WUFDWixjQUFjO1lBQ1osZ0JBQWdCO1lBQ04saUNBQWlDO1lBQ3ZDLG9CQUFvQjtZQUN2QixpQkFBaUI7WUFDckIsYUFBYTtZQUNiLGFBQWE7WUFDVCxpQkFBaUI7WUFDZCxvQkFBb0I7WUFDdEIsa0JBQWtCO1lBQ3BCLGdCQUFnQjtZQUNULGNBQWM7T0FoSzFDLHdCQUF3QixDQXcrRHBDO0lBQUQsK0JBQUM7Q0FBQSxBQXgrREQsSUF3K0RDO1NBeCtEWSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWlsZEZvcm1GaWVsZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2J1aWxkLWZvcm0tZmllbGQnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZvcm1GaWVsZCwgSVRva2VuIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHNcIjtcbmltcG9ydCB7IEhvdGtleSwgSG90a2V5c1NlcnZpY2UgfSBmcm9tIFwiYW5ndWxhcjItaG90a2V5c1wiO1xuaW1wb3J0ICogYXMgX21vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBEaWFsb2dTZXJ2aWNlLCBTb3J0TWV0YSB9IGZyb20gXCJwcmltZW5nL2FwaVwiO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwicHJpbWVuZy9jb21wb25lbnRzL2NvbW1vbi9tZXNzYWdlc2VydmljZVwiO1xuaW1wb3J0IHsgZW1wdHksIGZvcmtKb2luLCBvZiwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBjb25jYXRNYXAsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmaW5hbGl6ZSwgbWFwLCBtZXJnZU1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEZpZWxkQ3VzdG9taXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZmllbGQtY3VzdG9taXphdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZm9jdXMuc2VydmljZVwiO1xuaW1wb3J0IHsgb25Mb29rdXBSZXF1ZXN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2xvb2t1cC11dGlsc1wiO1xuaW1wb3J0IHsgZGlhbG9nQ29uZmlnLCBpc1ZhbGlkRmlsdGVyLCBtZXJnZVVuaXF1ZSwgdXNlckNhblZpc3VhbGl6ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgTm90YUZvcm1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ub3RhLWZvcm0vbm90YS1mb3JtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQWdlbmRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYVwiO1xuaW1wb3J0IHsgQWdlbmRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2FnZW5kYS9hZ2VuZGEuc2VydmljZVwiO1xuaW1wb3J0IHsgQ29udHJhdG9Db21wcmFJdGVtIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvY29udHJhdG8tY29tcHJhLWl0ZW0vY29udHJhdG8tY29tcHJhLWl0ZW1cIjtcbmltcG9ydCB7IENvbnRyYXRvQ29tcHJhRHRvIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvY29udHJhdG8tY29tcHJhL2NvbnRyYXRvLWNvbXByYS1kdG9cIjtcbmltcG9ydCB7IENvbnRyYXRvQ29tcHJhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2NvbnRyYXRvLWNvbXByYS9jb250cmF0by1jb21wcmEuc2VydmljZVwiO1xuaW1wb3J0IHsgRGVyaXZhY2FvIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZGVyaXZhY2FvL2Rlcml2YWNhb1wiO1xuaW1wb3J0IHsgRGVyaXZhY2FvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2Rlcml2YWNhby9kZXJpdmFjYW8uc2VydmljZVwiO1xuaW1wb3J0IHsgRmlsaWFsIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZmlsaWFsL2ZpbGlhbFwiO1xuaW1wb3J0IHsgRmlsaWFsU2VydmljZSwgUGVzcXVpc2FyRmlsaWFpc0lucHV0IH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZmlsaWFsL2ZpbGlhbC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQZXNzb2FFbmRlcmVjbyB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS1lbmRlcmVjby9wZXNzb2EtZW5kZXJlY29cIjtcbmltcG9ydCB7IFBlc3NvYUVuZGVyZWNvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS1lbmRlcmVjby9wZXNzb2EtZW5kZXJlY28uc2VydmljZVwiO1xuaW1wb3J0IHsgUGVzc29hIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVzc29hL3Blc3NvYVwiO1xuaW1wb3J0IHsgUGVzc29hU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2Euc2VydmljZVwiO1xuaW1wb3J0IHsgUHJvZHV0byB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Byb2R1dG8vcHJvZHV0b1wiO1xuaW1wb3J0IHsgUHJvZHV0b1JlY2ViaW1lbnRvUGFyYW1zLCBQcm9kdXRvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Byb2R1dG8vcHJvZHV0by5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBSZWNlYmltZW50b0NvbnRyYXRvIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcmVjZWJpbWVudG8tY29udHJhdG8vcmVjZWJpbWVudG9cIjtcbmltcG9ydCB7IFJlY2ViaW1lbnRvQ29udHJhdG9TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcmVjZWJpbWVudG8tY29udHJhdG8vcmVjZWJpbWVudG8uc2VydmljZVwiO1xuaW1wb3J0IHsgVHJhbnNnZW5pYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zZ2VuaWEvdHJhbnNnZW5pYVwiO1xuaW1wb3J0IHsgVHJhbnNnZW5pYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy90cmFuc2dlbmlhL3RyYW5zZ2VuaWEuc2VydmljZVwiO1xuaW1wb3J0IHsgVHJhbnNwb3J0YWRvcmEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy90cmFuc3BvcnRhZG9yYS90cmFuc3BvcnRhZG9yYVwiO1xuaW1wb3J0IHsgVHJhbnNwb3J0YWRvcmFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNwb3J0YWRvcmEvdHJhbnNwb3J0YWRvcmEuc2VydmljZVwiO1xuaW1wb3J0IHsgVGlwb05vdGFGaXNjYWwgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnVtcy90aXBvLW5vdGEtZmlzY2FsXCI7XG5pbXBvcnQgeyBFcnBQcm9jZXNzRGF0YSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1wcm9jZXNzLWRhdGEvZXJwLXByb2Nlc3MtZGF0YVwiO1xuaW1wb3J0IHsgRXJwUHJvY2Vzc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtcHJvY2Vzcy1kYXRhL2VycC1wcm9jZXNzLXNlcnZpY2VcIjtcbmltcG9ydCB7IEhhc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2hhcy1jaGFuZ2UvaGFzLWNoYW5nZS1zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGFWYWxpZGF0b3JTZXJ2aWNlLCBQZXNxdWlzYXJEb2N1bWVudG9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi9jb3JlL25vdGEtdmFsaWRhdG9yLnNlcnZpY2VcIjtcbmltcG9ydCB7IFZlcmlmaWNhTm90YWZpc2NhbCB9IGZyb20gJy4uLy4uL2NvcmUvdmVyaWZpY2Etbm90YS1maXNjYWwvdmVyaWZpY2FOb3RhRmlzY2FsJztcbmltcG9ydCB7IENvbnRyYXRvRm9ybUNvbXBvbmVudCB9IGZyb20gXCIuLi9jb250cmF0by1mb3JtL2NvbnRyYXRvLWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBSZWNlYmltZW50b0NoZWdhZGFWZWljdWxvT3ZlcnJpZGUgfSBmcm9tIFwiLi4vcmVjZWJpbWVudG8tY2hlZ2FkYS12ZWljdWxvLm92ZXJyaWRlXCI7XG5pbXBvcnQgeyBTdGF0dXNBZ2VuZGEgfSBmcm9tIFwiLi8uLi8uLi9jb3JlL2VudW1zL3N0YXR1cy1hZ2VuZGFcIjtcbmltcG9ydCB7IEVycEZvcm1Db25maWdTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9jb3JlL2VycC1mb3JtLWNvbmZpZy9lcnAtZm9ybS1jb25maWctc2VydmljZSc7XG5pbXBvcnQgeyBTaXR1YWNhbyB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvc2l0dWFjYW8nO1xuXG5jb25zdCBtb21lbnQgPSBfbW9tZW50O1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdyZWNlYmltZW50by1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3JlY2ViaW1lbnRvLWZvcm0uY29tcG9uZW50Lmh0bWxcIixcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBdLFxuICAgIHN0eWxlVXJsczogWycuLi8uLi9lcnAtc2VuaW9yLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZWNlYmltZW50b0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHVibGljIGxvY2FsZUNvbmZpZzogYW55ID0ge307XG4gICAgcHVibGljIGN1cnJlbmN5TG9jYWxlT3B0aW9uczogYW55ID0ge307XG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgYWxsUGVybWlzc2lvbnM6IGFueSA9IHt9O1xuXG4gICAgcHVibGljIHZpc2libGVEaWFsb2cgPSBmYWxzZTtcbiAgICBwdWJsaWMgcXVhbnRpZGFkZVNlbGVjaW9uYWRhID0gMTtcblxuICAgIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgaXRlbUZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xuICAgIHB1YmxpYyBtYWluUGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBmaWxpYWxMb29rdXBTdWdnZXN0aW9uczogRmlsaWFsW107XG4gICAgcHVibGljIGZpbGlhbExvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiZW1wcmVzYS5ub21lXCJdO1xuICAgIHB1YmxpYyBmaWxpYWxBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIiwgXCJlbXByZXNhLm5vbWVcIl07XG4gICAgcHVibGljIGZpbGlhbExvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gICAgcHVibGljIGZpbGlhbFNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGZpbGlhbFNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBmaWxpYWxTZWFyY2hHcmlkRGF0YTogRmlsaWFsW107XG4gICAgcHVibGljIGZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIGZvcm5lY2Vkb3JMb29rdXBTdWdnZXN0aW9uczogUGVzc29hW107XG4gICAgcHVibGljIGZvcm5lY2Vkb3JMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiLCBcImNwZkNucGpcIl07XG4gICAgcHVibGljIGZvcm5lY2Vkb3JBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIiwgXCJzaXR1YWNhb1wiLCBcImNwZkNucGpcIiwgXCJ0aXBvUGFydGljaXBhbnRlXCJdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgZm9ybmVjZWRvclNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGZvcm5lY2Vkb3JTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvclNlYXJjaEdyaWREYXRhOiBQZXNzb2FbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvclNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIG9yaWdlbU1lcmNhZG9yaWFMb29rdXBTdWdnZXN0aW9uczogUGVzc29hRW5kZXJlY29bXTtcbiAgICBwdWJsaWMgb3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJjZXBcIiwgXCJlbmRlcmVjb1wiLCBcImVtcHJlc2EuZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJjZXBcIiwgXCJlbmRlcmVjb1wiLCBcIm51bWVyb1wiLCBcImNvbXBsZW1lbnRvXCIsIFwiY2lkYWRlLipcIiwgXCJiYWlycm9cIiwgXCJzaXR1YWNhb1wiLCBcImVtcHJlc2EuZGVzY3JpY2FvXCIsXG4gICAgICAgIFwiY25wakNwZlwiLCBcImluc2NyaWNhb0VzdGFkdWFsXCJdO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgb3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIG9yaWdlbU1lcmNhZG9yaWFTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgb3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEdyaWREYXRhOiBQZXNzb2FFbmRlcmVjb1tdO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgcHJvZHV0b0xvb2t1cFN1Z2dlc3Rpb25zOiBQcm9kdXRvW107XG4gICAgcHVibGljIHByb2R1dG9Mb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCIsIFwidGlwb1wiXTtcbiAgICBwdWJsaWMgcHJvZHV0b0FkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwiY29tcHJhZG9cIiwgXCJkZXNjcmljYW9cIiwgXCJwcm9kdXRvTWlzdG9cIiwgXCJzaXR1YWNhb1wiLCBcInRpcG9cIl07XG4gICAgcHVibGljIHByb2R1dG9Mb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHB1YmxpYyBwcm9kdXRvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgcHJvZHV0b1NlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBwcm9kdXRvU2VhcmNoR3JpZERhdGE6IFByb2R1dG9bXTtcbiAgICBwdWJsaWMgcHJvZHV0b1NlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIGFnZW5kYUxvb2t1cFN1Z2dlc3Rpb25zOiBBZ2VuZGFbXTtcbiAgICBwdWJsaWMgYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBhZ2VuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBwdWJsaWMgYWdlbmRhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgYWdlbmRhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgYWdlbmRhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGFnZW5kYVNlYXJjaEdyaWREYXRhOiBBZ2VuZGFbXTtcbiAgICBwdWJsaWMgYWdlbmRhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgZGVyaXZhY2FvTG9va3VwU3VnZ2VzdGlvbnM6IERlcml2YWNhb1tdO1xuICAgIHB1YmxpYyBkZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBkZXJpdmFjYW9BZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBwdWJsaWMgZGVyaXZhY2FvTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgZGVyaXZhY2FvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZGVyaXZhY2FvU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGRlcml2YWNhb1NlYXJjaEdyaWREYXRhOiBEZXJpdmFjYW9bXTtcbiAgICBwdWJsaWMgZGVyaXZhY2FvU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFMb29rdXBTdWdnZXN0aW9uczogVHJhbnNwb3J0YWRvcmFbXTtcbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwicGVzc29hLm5vbWVcIiwgXCJwZXNzb2EuY3BmQ25walwiXTtcbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcInBlc3NvYS5ub21lXCIsIFwicGVzc29hLmNwZkNucGpcIl07XG4gICAgcHVibGljIHRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWREYXRhOiBUcmFuc3BvcnRhZG9yYVtdO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHVibGljIHRyYW5zZ2VuaWFMb29rdXBTdWdnZXN0aW9uczogVHJhbnNnZW5pYVtdO1xuICAgIHB1YmxpYyB0cmFuc2dlbmlhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBwdWJsaWMgdHJhbnNnZW5pYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCIsIFwiZmFtaWxpYVwiLCBcInRpcG9QYXJ0aWNpcGFudGVcIiwgXCJzaXR1YWNhb1wiXTtcbiAgICBwdWJsaWMgdHJhbnNnZW5pYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gICAgcHVibGljIHRyYW5zZ2VuaWFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyB0cmFuc2dlbmlhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIHRyYW5zZ2VuaWFTZWFyY2hHcmlkRGF0YTogVHJhbnNnZW5pYVtdO1xuICAgIHB1YmxpYyB0cmFuc2dlbmlhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgZGlzYWJsZUJ1dHRvblNhdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgZGlzYWJsZU9yZGVyc0J1dHRvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHB1YmxpYyBjcmVhdGVkQnlFcnA6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgdG90YWxFaXhvc0NvbnRyYXRhZG9zOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyB0b3RhbEVpeG9zQ29tcG9zaWNhbzogbnVtYmVyID0gMDtcblxuICAgIHB1YmxpYyB0aXBvc05vdGE6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IFRpcG9Ob3RhRmlzY2FsIH1bXSA9IFtcbiAgICAgICAgeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudGlwb19ub3RhX2Zpc2NhbF9lbXByZXNhX2p1cmlkaWNhXCIpLCB2YWx1ZTogVGlwb05vdGFGaXNjYWwuRU1QUkVTQV9KVVJJRElDQSB9LFxuICAgICAgICB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50aXBvX25vdGFfZmlzY2FsX3Byb2R1dG9yX3J1cmFsXCIpLCB2YWx1ZTogVGlwb05vdGFGaXNjYWwuUFJPRFVUT1JfUlVSQUwgfSxcbiAgICBdO1xuXG4gICAgcHVibGljIHNhdmVBbmRJbml0QnV0dG9uOiBhbnk7XG5cbiAgICBASW5wdXQoKSBwcml2YXRlIGFnZW5kYTogQWdlbmRhO1xuXG4gICAgQFZpZXdDaGlsZChcImN1c3RvbVRlbXBsYXRlXCIpXG4gICAgcHVibGljIGN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZChcImN1c3RvbUZvcm1GaWVsZHNcIilcbiAgICBwdWJsaWMgY3VzdG9tRm9ybUZpZWxkczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHB1YmxpYyBjaGF2ZU5vdGFGaXNjYWw6IHN0cmluZztcbiAgICBwdWJsaWMgZXJyb0NoYXZlTm90YSA9IGZhbHNlO1xuICAgIHB1YmxpYyBlcnJvRm9ybmVjZWRvcmVzID0gZmFsc2U7XG4gICAgcHVibGljIGVycm9Gb3JuZWNlZG9yZXNOb3RhRHVwbGljYWRhOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgcHVibGljIG5vdGFzVG9rZW5zOiBJVG9rZW5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yTm90YXNUb2tlbnM6IElUb2tlbltdID0gW107XG4gICAgcHVibGljIGZvcm5lY2Vkb3JOb3RhcyA9IFtdO1xuXG4gICAgcHVibGljIGNvbnRyYXRvU2VsZWNpb25hZG86IGFueSA9IG51bGw7XG5cbiAgICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSBmb3JtQ2FycmVnYWRvOiBhbnk7XG5cbiAgICBwcml2YXRlIGVycFByb2Nlc3NEYXRhOiBFcnBQcm9jZXNzRGF0YTtcbiAgICBwcml2YXRlIGVuYWJsZVJldmFsaWRhdGlvbjogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgY29udHJhdG9zOiBhbnk7XG5cbiAgICBwcml2YXRlIGNhcnJlZ2FuZG9FcnBGaWxpYWwgPSB0cnVlO1xuICAgIHByaXZhdGUgY2FycmVnYW5kb0VycFJvdXRlRGF0YSA9IHRydWU7XG4gICAgcHJpdmF0ZSBjYXJyZWdhbmRvRXJwUmVjZWJpbWVudG8gPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVjZWJpbWVudG9TZXJ2aWNlOiBSZWNlYmltZW50b0NvbnRyYXRvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBob3RrZXlzU2VydmljZTogSG90a2V5c1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmllbGRDdXN0b21pemF0aW9uOiBGaWVsZEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZvY3VzU2VydmljZTogRm9jdXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZpbGlhbFNlcnZpY2U6IEZpbGlhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNwb3J0YWRvcmFTZXJ2aWNlOiBUcmFuc3BvcnRhZG9yYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGVzc29hRW5kZXJlY29TZXJ2aWNlOiBQZXNzb2FFbmRlcmVjb1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29udHJhdG9Db21wcmFTZXJ2aWNlOiBDb250cmF0b0NvbXByYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGVzc29hU2VydmljZTogUGVzc29hU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcm9kdXRvU2VydmljZTogUHJvZHV0b1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGVyaXZhY2FvU2VydmljZTogRGVyaXZhY2FvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWNlYmltZW50b0NoZWdhZGFPdmVycmlkZTogUmVjZWJpbWVudG9DaGVnYWRhVmVpY3Vsb092ZXJyaWRlLFxuICAgICAgICBwcml2YXRlIG5vdGFWYWxpZGF0b3JTZXJ2aWNlOiBOb3RhVmFsaWRhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2dlbmlhU2VydmljZTogVHJhbnNnZW5pYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhZ2VuZGFTZXJ2aWNlOiBBZ2VuZGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVycFByb2Nlc3NTZXJ2aWNlOiBFcnBQcm9jZXNzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnBGb3JtQ29uZmlnU2VydmljZTogRXJwRm9ybUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmVyaWZpY2FOb3RhRmlzY2FsOiBWZXJpZmljYU5vdGFmaXNjYWwsXG4gICAgICAgIHByaXZhdGUgaGFzQ2hhbmdlU2VydmljZTogSGFzQ2hhbmdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBidWlsZEZvcm1GaWVsZDogQnVpbGRGb3JtRmllbGQsXG4gICAgKSB7IH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cCgpO1xuICAgICAgICB0aGlzLml0ZW1Gb3JtR3JvdXAgPSB0aGlzLmdldEl0ZW1Gb3JtKCk7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpXG4gICAgICAgICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vbkZpbGlhbFZhbHVlQ2hhbmdlKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpXG4gICAgICAgICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXJpdmFjYW8gPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikudmFsdWUgYXMgRGVyaXZhY2FvO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISFkZXJpdmFjYW8gJiYgZGVyaXZhY2FvLnByb2R1dG8uaWQgPT09IHZhbHVlLmlkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZGVyaXZhY2FvXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCh2YWx1ZSA9PiB0aGlzLmRlcml2YWNhb1NlcnZpY2UubGlzdCh7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclF1ZXJ5OiBgcHJvZHV0by5pZCBlcSAnJHt2YWx1ZS5pZH0nIGFuZCBzaXR1YWNhbyBlcSAnQVRJVk8nYCxcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZGVyaXZhY2FvXCIpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZGVyaXZhY2FvXCIpLnNldFZhbHVlKGNvbnRlbnRzWzBdKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLm9uUm91dGVEYXRhQ2hhbmdlKGRhdGEpKTtcblxuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHsgYWdlbmRhIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChhZ2VuZGEgPT0gJ25ldycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2NhckZpbGlhbCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFJlY2ViaW1lbnRvKGFnZW5kYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgIC5nZXQoJ3RyYW5zcG9ydGFkb3JhJylcbiAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25DaGFuZ2VSZXZhbGlkYXRpb24pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgIC5nZXQoJ3RyYW5zZ2VuaWEnKVxuICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUodGhpcy5vbkNoYW5nZVJldmFsaWRhdGlvbik7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICAgICAgLmdldCgnZm9ybmVjZWRvcmVzJylcbiAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25DaGFuZ2VSZXZhbGlkYXRpb24pO1xuXG4gICAgICAgIHRoaXMuZmlsaWFsU2VhcmNoRmllbGRzID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMgPSB0aGlzLmdldEZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0Rm9ybmVjZWRvclNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldE9yaWdlbU1lcmNhZG9yaWFGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0T3JpZ2VtTWVyY2Fkb3JpYUdyaWRGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLnByb2R1dG9TZWFyY2hGaWVsZHMgPSB0aGlzLmdldFByb2R1dG9TZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5wcm9kdXRvU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0UHJvZHV0b1NlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLmFnZW5kYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMuYWdlbmRhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoRmllbGRzID0gdGhpcy5nZXREZXJpdmFjYW9TZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5kZXJpdmFjYW9TZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXREZXJpdmFjYW9TZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgICAgIHRoaXMudHJhbnNnZW5pYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0VHJhbnNnZW5pYVNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLnRyYW5zZ2VuaWFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRUcmFuc2dlbmlhU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgICAgIHRoaXMuc2V0SG90a2V5cygpO1xuXG4gICAgICAgIGlmICh0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUcmFuc3BvcnRhZG9yYSh0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudC5jbnBqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG90YWxFaXhvc0NvbXBvc2ljYW8gPSB0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS52ZWljdWxvID8gdGhpcy5hZ2VuZGEudmVpY3Vsby5laXhvcyB8fCAwIDogMDtcblxuICAgICAgICBjb25zdCBzdGF0dXNBZ2VuZGEgPSBbXG4gICAgICAgICAgICBcIkFHVUFSREFORE9fQ09ORklSTUFDQU9fU09MSUNJVEFOVEVcIixcbiAgICAgICAgICAgIFwiQUdFTkRBRE9cIixcbiAgICAgICAgICAgIFwiQUdVQVJEQU5ET19DT05GSVJNQUNBT1wiLFxuICAgICAgICAgICAgXCJFTV9FWEVDVUNBT1wiLFxuICAgICAgICAgICAgXCJSRUpFSVRBRE9fUE9SX1ZBTElEQUNBT1wiLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmFnZW5kYSAmJiAhc3RhdHVzQWdlbmRhLmluY2x1ZGVzKHRoaXMuYWdlbmRhLnN0YXR1cykpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvblNhdmUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShtZXNzYWdlID0+IHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSBtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5lcnBGb3JtQ29uZmlnU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShtZXNzYWdlID0+IHRoaXMuZW5hYmxlUmV2YWxpZGF0aW9uID0gbWVzc2FnZSk7XG5cbiAgICAgICAgdGhpcy52ZXJpZmljYVNlVGVtQWx0ZXJhY2FvKCk7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdwcm9kdXRvJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYVRyYW5zZ2VuaWEoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnZm9ybmVjZWRvcmVzJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYVRyYW5zZ2VuaWEoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJpZmljYVNlVGVtQWx0ZXJhY2FvKCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZVJldmFsaWRhdGlvbiA9IChfKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmVycFByb2Nlc3NEYXRhICYmIHRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLmVycFByb2Nlc3NEYXRhID0gdGhpcy5lcnBQcm9jZXNzU2VydmljZS5idWlsZGVyRXJwUHJvY2Vzc0RhdGEodGhpcy5lcnBQcm9jZXNzRGF0YSwgdGhpcy5mb3JtR3JvdXApO1xuICAgICAgICAgICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYVRyYW5zZ2VuaWEoKSB7XG4gICAgICAgIGlmICh0aGlzLmVycENhcnJlZ2FkbygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmFuc2dlbmlhID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNnZW5pYVwiKS52YWx1ZTtcbiAgICAgICAgY29uc3QgcHJvZHV0byA9IHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWU7XG4gICAgICAgIGNvbnN0IGZhbWlsaWFQcm9kdXRvID0gdGhpcy5nZXRGYW1pbGlhUHJvZHV0bygpO1xuXG4gICAgICAgIGlmKCFwcm9kdXRvIHx8ICF0cmFuc2dlbmlhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighdGhpcy52YWxpZGFGYW1pbGlhUHJvZHV0b0NvcnJlc3BvbmRlRmFtaWxpYVRyYW5nZW5pYSh0cmFuc2dlbmlhLCBmYW1pbGlhUHJvZHV0bykpIHtcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW1UcmFuc2dlbmlhSW52YWxpZGEoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsaWRhRm9ybmVjZWRvckNvcnJlc3BvbmRlVGlwb1BhdGljaXBhbnRlRGFUcmFuc2dlbmlhKHRyYW5zZ2VuaWEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXJwQ2FycmVnYWRvKCl7XG4gICAgICAgIGlmICggdGhpcy5jYXJyZWdhbmRvRXJwRmlsaWFsICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMuY2FycmVnYW5kb0VycFJvdXRlRGF0YSApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCB0aGlzLmNhcnJlZ2FuZG9FcnBSZWNlYmltZW50byApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVuc2FnZW1UcmFuc2dlbmlhSW52YWxpZGEoKXtcbiAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFwiZXJyb3JcIiwgXCJ5bXMuaW50ZWdyYXRpb24ubWVuc2FnZW1fZXJyb190aXR1bG9faW5mb3JtYXJfdHJhbnNnZW5pYVwiLCBcInltcy5pbnRlZ3JhdGlvbi5tZW5zYWdlbV9lcnJvX2NvbnRldXRvX2luZm9ybWFyX3RyYW5zZ2VuaWFcIik7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zZ2VuaWFcIikuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYUZhbWlsaWFQcm9kdXRvQ29ycmVzcG9uZGVGYW1pbGlhVHJhbmdlbmlhKHRyYW5zZ2VuaWE6IGFueSwgZmFtaWxpYVByb2R1dG86IGFueSkge1xuICAgICAgICBpZihmYW1pbGlhUHJvZHV0byAhPT0gbnVsbCAmJiB0cmFuc2dlbmlhLmZhbWlsaWEgPT09IGZhbWlsaWFQcm9kdXRvKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGFGb3JuZWNlZG9yQ29ycmVzcG9uZGVUaXBvUGF0aWNpcGFudGVEYVRyYW5zZ2VuaWEodHJhbnNnZW5pYTogYW55KSB7XG4gICAgICAgIGNvbnN0IHRpcG9QYXJ0aWNpcGFudGVGb3JuZWNlZG9yZXMgPSB0aGlzLmdldFRpcG9UcmFuc2dlbmlhKCk7XG4gICAgICAgIGNvbnN0IGZvcm5lY2Vkb3JlcyA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KTtcblxuICAgICAgICBpZiAoZm9ybmVjZWRvcmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBmb3JuZWNlZG9yRXN0YVZhemlvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvcm5lY2Vkb3Jlcy5jb250cm9scy5mb3JFYWNoKGZvcm0gPT4ge1xuICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JFc3RhVmF6aW8gPSBmb3JtLnZhbHVlLmZvcm5lY2Vkb3IgPT09IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGZvcm5lY2Vkb3JFc3RhVmF6aW8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYodGlwb1BhcnRpY2lwYW50ZUZvcm5lY2Vkb3JlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWVuc2FnZW1UcmFuc2dlbmlhSW52YWxpZGEoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRpcG9QYXJ0aWNpcGFudGVGb3JuZWNlZG9yZXMgIT09IHRyYW5zZ2VuaWEudGlwb1BhcnRpY2lwYW50ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWVuc2FnZW1UcmFuc2dlbmlhSW52YWxpZGEoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKHRpcG9QYXJ0aWNpcGFudGVGb3JuZWNlZG9yZXMgPT09IHRyYW5zZ2VuaWEudGlwb1BhcnRpY2lwYW50ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgfVxuICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGNvbnN0IGlucHV0TGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSW5wdXQgPSBBcnJheS5mcm9tKGlucHV0TGlzdCkuZmluZCgoZjogYW55KSA9PiAhZi5kaXNhYmxlZCk7XG4gICAgICAgIGlmIChzZWxlY3RlZElucHV0KSB7XG4gICAgICAgICAgICBzZWxlY3RlZElucHV0LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMucmVjZWJpbWVudG9DaGVnYWRhT3ZlcnJpZGUuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNhdmVBbmRJbml0QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luaXQnKTtcbiAgICAgICAgdGhpcy5jcmVhdGVkQnlFcnBEaXNhYmxlRm9ybSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtQ2FycmVnYWRvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMucmVjZWJpbWVudG9DaGVnYWRhT3ZlcnJpZGUucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZWRCeUVycERpc2FibGVGb3JtKCkge1xuICAgICAgICB0aGlzLmRpc2FibGVPcmRlcnNCdXR0b25zID0gdGhpcy5hZ2VuZGEuY3JlYXRlZEJ5RXJwO1xuICAgICAgICBpZiAodGhpcy5pc05ldygpKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZWRCeUVycCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWxpYWwnKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgncHJvZHV0bycpLmVuYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdkZXJpdmFjYW8nKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgndHJhbnNwb3J0YWRvcmEnKS5lbmFibGUoKTtcbiAgICAgICAgICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS5jb250cm9scy5mb3JFYWNoKGZvcm0gPT4gZm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLmVuYWJsZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEuY3JlYXRlZEJ5RXJwKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZWRCeUVycCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpbGlhbCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgncHJvZHV0bycpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnZGVyaXZhY2FvJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRm9ybmVjZWRvcmVzKCk7XG5cbiAgICAgICAgICAgIGlmICghIXRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCd0cmFuc3BvcnRhZG9yYScpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlRm9ybmVjZWRvcmVzKCkgeyAgICAgICAgXG4gICAgICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS5jb250cm9scy5mb3JFYWNoKGZvcm0gPT4gZm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLmRpc2FibGUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEhvdGtleXMoKSB7XG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCt4XCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5leGNsdWlyKSB0aGlzLm9uRGVsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChcbiAgICAgICAgICAgIG5ldyBIb3RrZXkoXG4gICAgICAgICAgICAgICAgXCJhbHQrc2hpZnQrc1wiLFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNOZXcoKSB8fCB0aGlzLnBlcm1pc3Npb25zLmVkaXRhcikgdGhpcy5vblNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtjXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25CbHVyQ2hhdmVOb3RhRmlzY2FsKCkge1xuICAgICAgICBpZiAodGhpcy52ZXJpZmljYU5vdGFGaXNjYWwudmVyaWZpY2FTZU5vdGFGaXNjYWxFc3RhRHVwbGljYWRhKHRoaXMuY2hhdmVOb3RhRmlzY2FsLCB0aGlzLmNvbnRyYXRvcywgdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbW92ZU5vdGFFcnJvcigpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY2hhdmVOb3RhRmlzY2FsO1xuICAgICAgICBpZiAoISF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW1CdXNjYW5kb05vdGEoKTtcbiAgICAgICAgICAgIHRoaXMubm90YVZhbGlkYXRvclNlcnZpY2UucGVzcXVpc2FyRG9jdW1lbnRvVmFsaWRhTm90YUVtVXNvKHtcbiAgICAgICAgICAgICAgICBmaWxpYWxJZDogKHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZSAmJiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUuaWQpIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgY2hhdmVEb2N1bWVudG86IHZhbHVlLnRyaW0oKVxuICAgICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSlcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4gdGhpcy5hZGROb3ZhTm90YShyZXNwb25zZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGROb3ZhTm90YShyZXNwb25zZTogUGVzcXVpc2FyRG9jdW1lbnRvUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAocmVzcG9uc2UuZG9jdW1lbnRvcyB8fCBbXSkubGVuZ3RoID8gcmVzcG9uc2UuZG9jdW1lbnRvc1swXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1Qcm9kdXRvID0gdmFsdWUuaXRlbnNbMF0gfHwgeyBwcm9kdXRvOiB1bmRlZmluZWQsIGRlcml2YWNhbzogdW5kZWZpbmVkIH0gYXMgYW55O1xuICAgICAgICBjb25zdCBwcm9kdXRvID0gUHJvZHV0by5mcm9tRHRvKGl0ZW1Qcm9kdXRvLnByb2R1dG8pO1xuXG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKS52YWx1ZSAmJiAhIWl0ZW1Qcm9kdXRvLnByb2R1dG8pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuc2V0VmFsdWUocHJvZHV0byk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuc2V0VmFsdWUoRGVyaXZhY2FvLmZyb21EdG8oaXRlbVByb2R1dG8uZGVyaXZhY2FvKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoISFpdGVtUHJvZHV0by5wcm9kdXRvICYmICF0aGlzLnZhbGlkYXRlUHJvZHV0byhwcm9kdXRvKSkge1xuICAgICAgICAgICAgdGhpcy5hZGROb3RhRXJyb3IoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgXG4gICAgICAgIGNvbnN0IGZvcm5lY2Vkb3IgPSBQZXNzb2EuZnJvbUR0byh2YWx1ZS5mb3JuZWNlZG9yKTtcbiAgICAgICAgY29uc3Qgb3JpZ2VtTWVyY2Fkb3JpYSA9IFBlc3NvYUVuZGVyZWNvLmZyb21EdG8odmFsdWUub3JpZ2VtTWVyY2Fkb3JpYSk7XG5cbiAgICAgICAgY29uc3QgZm9ybmVjZWRvckZvcm0gPSB0aGlzLmdldEZvcm5lY2Vkb3Jlc0Zvcm0oKS5jb250cm9scy5maW5kKCh7IHZhbHVlIH0pID0+IHZhbHVlLmZvcm5lY2Vkb3IuaWQgPT09IGZvcm5lY2Vkb3IuaWQpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgY29uc3QgZm9ybmVjZWRvck9mR3JvdXAgPSB0aGlzLnZhbGlkYXJDbnBqRm9ybmVjZWRvcihmb3JuZWNlZG9yLmNwZkNucGopO1xuXG4gICAgICAgIGlmIChmb3JuZWNlZG9yT2ZHcm91cCkge1xuICAgICAgICAgICAgaWYgKCFmb3JuZWNlZG9yRm9ybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvcih7IGZvcm5lY2Vkb3IsIG9yaWdlbU1lcmNhZG9yaWEgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghZm9ybmVjZWRvckZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvcih7IGZvcm5lY2Vkb3IsIG9yaWdlbU1lcmNhZG9yaWEgfSk7XG4gICAgICAgICAgICB0aGlzLmFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYVJldG9ybm9QZXNxdWlzYURvY3VtZW50b3MocmVzcG9uc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhUmV0b3Jub1Blc3F1aXNhRG9jdW1lbnRvcyhyZXNwb25zZTogUGVzcXVpc2FyRG9jdW1lbnRvUmVzcG9uc2UpIHsgICAgICAgIFxuICAgICAgICBsZXQgZHVwbGljYXRlRm9ybmVjZWRvcmVzID0gdGhpcy52ZXJpZmljYU5vdGFGaXNjYWwuZmluZER1cGxpY2F0ZUZvcm5lY2Vkb3JlcyhyZXNwb25zZSk7XG4gICAgICAgIGlmIChkdXBsaWNhdGVGb3JuZWNlZG9yZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb0Zvcm5lY2Vkb3Jlc05vdGFEdXBsaWNhZGEgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLnBhdGlvLmR1cGxpY2F0ZV9zdXBwbGllclwiKSArIGR1cGxpY2F0ZUZvcm5lY2Vkb3JlcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRm9ybmVjZWRvck5vdGFzVG9rZW4odmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5wdXNoKHsgaWQ6IHRoaXMuY2hhdmVOb3RhRmlzY2FsLCBsYWJlbDogdmFsdWUubnVtZXJvIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzLnB1c2goe1xuICAgICAgICAgICAgY2hhdmVOb3RhRmlzY2FsOiB0aGlzLmNoYXZlTm90YUZpc2NhbCxcbiAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogdmFsdWUuc2VyaWUsXG4gICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogdmFsdWUuc2VyaWVMZWdhbCxcbiAgICAgICAgICAgIG51bWVyb05vdGFGaXNjYWw6IHZhbHVlLm51bWVybyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jaGF2ZU5vdGFGaXNjYWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc05ldygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmZvcm1Hcm91cC52YWx1ZS5pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlU3VnZ2VzdGlvbnModmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodmFsdWUuZm9ybmVjZWRvcikge1xuICAgICAgICAgICAgdmFsdWUuZm9ybmVjZWRvci5sYWJlbCA9IHRoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlKFxuICAgICAgICAgICAgICAgIFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiLCBcInNpdHVhY2FvXCJdLFxuICAgICAgICAgICAgICAgIFwiZm9ybmVjZWRvclwiLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvckxvb2t1cFNlcGFyYXRvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5mb3JuZWNlZG9yLmxhYmVsLnRyaW0oKSA9PT0gdGhpcy5mb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yLnRyaW0oKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZS5mb3JuZWNlZG9yLmxhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLnByb2R1dG8pIHtcbiAgICAgICAgICAgIHZhbHVlLnByb2R1dG8ubGFiZWwgPSB0aGlzLmdldFN1Z2dlc3Rpb25WYWx1ZShcbiAgICAgICAgICAgICAgICBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImNvbXByYWRvXCIsIFwiZGVzY3JpY2FvXCIsIFwicHJvZHV0b01pc3RvXCIsIFwic2l0dWFjYW9cIiwgXCJ0aXBvXCJdLFxuICAgICAgICAgICAgICAgIFwicHJvZHV0b1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHRoaXMucHJvZHV0b0xvb2t1cFNlcGFyYXRvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5wcm9kdXRvLmxhYmVsLnRyaW0oKSA9PT0gdGhpcy5wcm9kdXRvTG9va3VwU2VwYXJhdG9yLnRyaW0oKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZS5wcm9kdXRvLmxhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmFnZW5kYSkge1xuICAgICAgICAgICAgdmFsdWUuYWdlbmRhLmxhYmVsID0gdGhpcy5nZXRTdWdnZXN0aW9uVmFsdWUoW1wiaWRcIiwgXCJkZXNjcmljYW9cIl0sIFwiYWdlbmRhXCIsIHZhbHVlLCB0aGlzLmFnZW5kYUxvb2t1cFNlcGFyYXRvcik7XG4gICAgICAgICAgICBpZiAodmFsdWUuYWdlbmRhLmxhYmVsLnRyaW0oKSA9PT0gdGhpcy5hZ2VuZGFMb29rdXBTZXBhcmF0b3IudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLmFnZW5kYS5sYWJlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5kZXJpdmFjYW8pIHtcbiAgICAgICAgICAgIHZhbHVlLmRlcml2YWNhby5sYWJlbCA9IHRoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlKFxuICAgICAgICAgICAgICAgIFtcImlkXCIsIFwiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdLFxuICAgICAgICAgICAgICAgIFwiZGVyaXZhY2FvXCIsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5kZXJpdmFjYW9Mb29rdXBTZXBhcmF0b3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodmFsdWUuZGVyaXZhY2FvLmxhYmVsLnRyaW0oKSA9PT0gdGhpcy5kZXJpdmFjYW9Mb29rdXBTZXBhcmF0b3IudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLmRlcml2YWNhby5sYWJlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTdWdnZXN0aW9uVmFsdWUoZGlzcGxheUZpZWxkczogc3RyaW5nW10sIG93bmVyRW50aXR5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHNlcGFyYXRvcjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBkaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAubWFwKGZpZWxkID0+IHRoaXMuZ2V0UHJvcCh2YWx1ZSwgYCR7b3duZXJFbnRpdHl9LiR7ZmllbGR9YCkpXG4gICAgICAgICAgICAucmVkdWNlKChhY2M6IGFueSwgdmFsOiBhbnkpID0+IGAke2FjY30ke3NlcGFyYXRvcn0ke3ZhbH1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3V0ZURhdGFDaGFuZ2UoZGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVuY3lTeW1ib2wsIHRob3VzYW5kc1NlcGFyYXRvciwgZGVjaW1hbFNlcGFyYXRvciB9ID0gZGF0YS5sb2NhbGVDb25maWcubnVtYmVyO1xuXG4gICAgICAgIHRoaXMubG9jYWxlQ29uZmlnID0gZGF0YS5sb2NhbGVDb25maWc7XG4gICAgICAgIHRoaXMuY3VycmVuY3lMb2NhbGVPcHRpb25zID0ge1xuICAgICAgICAgICAgYWxpZ246IFwibGVmdFwiLFxuICAgICAgICAgICAgcHJlZml4OiBjdXJyZW5jeVN5bWJvbCxcbiAgICAgICAgICAgIHRob3VzYW5kczogdGhvdXNhbmRzU2VwYXJhdG9yLFxuICAgICAgICAgICAgZGVjaW1hbDogZGVjaW1hbFNlcGFyYXRvcixcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnMucmVjZWJpbWVudG87XG4gICAgICAgIHRoaXMuYWxsUGVybWlzc2lvbnMgPSBkYXRhLmFsbFBlcm1pc3Npb25zO1xuICAgICAgICBpZiAoZGF0YS5lbnRpdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbkVkaXQgPSB0aGlzLnBlcm1pc3Npb25zLmVkaXRhcjtcbiAgICAgICAgICAgIGlmICghY2FuRWRpdCkgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWU6IGFueSA9IFJlY2ViaW1lbnRvQ29udHJhdG8uZnJvbUR0byhkYXRhLmVudGl0eSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN1Z2dlc3Rpb25zKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShuZXcgUmVjZWJpbWVudG9Db250cmF0bygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FycmVnYW5kb0VycFJvdXRlRGF0YSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5nb0JhY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZW5kRmlsZShmaWxlc1RvRGVsZXRlOiBhbnksIGZpbGVzVG9Db21taXQ6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShmaWxlc1RvRGVsZXRlKSkge1xuICAgICAgICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5kZWxldGVGaWxlcyhmaWxlc1RvRGVsZXRlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5pc0VtcHR5KGZpbGVzVG9Db21taXQpKSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlcy5wdXNoKHRoaXMuZmllbGRDdXN0b21pemF0aW9uLmNvbW1pdEZpbGVzKGZpbGVzVG9Db21taXQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShvYnNlcnZhYmxlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JrSm9pbihvYnNlcnZhYmxlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZShzdGFydD86IGJvb2xlYW4pIHtcbiAgICAgICAgXG4gICAgICAgIGlmICgodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb0Zvcm5lY2Vkb3JlcyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKHRoaXMuZm9ybUdyb3VwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNOZXcoKSAgfHwgIXRoaXMuZW5hYmxlUmV2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zYXZlQW5kSW5pdChzdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVycFByb2Nlc3NEYXRhID0gdGhpcy5lcnBQcm9jZXNzU2VydmljZS5idWlsZGVyRXJwUHJvY2Vzc0RhdGFWYWxpZGFOb3RhTm9Db250cmF0byh0aGlzLmVycFByb2Nlc3NEYXRhLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgICAgIHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuY2hhbmdlRGF0YUVycCh0aGlzLmVycFByb2Nlc3NEYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgICAgICAgLmNoZWNhclJldmFsaWRhY2FvKHRoaXMuZXJwUHJvY2Vzc0RhdGEpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlcXVlclJldmFsaWRhY2FvKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXR1YWxpemFBZ2VuZGFQYXJhUmVqZWl0YWRvUG9yVmFsaWRhY2FvKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVBbmRJbml0KHN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGF0dWFsaXphQWdlbmRhUGFyYVJlamVpdGFkb1BvclZhbGlkYWNhbygpIHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLnBhdGlvLmFnZW5kYV9yZXZhbGlkYWNhb190aXRsZVwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uYWdlbmRhX3JldmFsaWRhY2FvX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGEuc3RhdHVzID0gU3RhdHVzQWdlbmRhLlJFSkVJVEFET19QT1JfVkFMSURBQ0FPO1xuICAgICAgICAgICAgICAgIHRoaXMuYWdlbmRhLm1vdG9yaXN0YSA9IHtpZDogdGhpcy5lcnBQcm9jZXNzRGF0YS5tb3RvcmlzdGFJZH07XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGEudmVpY3VsbyA9IHtpZDogdGhpcy5lcnBQcm9jZXNzRGF0YS52ZWljdWxvSWR9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuYXR1YWxpemFyQWdlbmRhKHRoaXMuYWdlbmRhKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKChfKSA9PiB0aGlzLmdldFNhdmVPYnNlcnZhYmxlKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9jaGVnYWRhLXZlaWN1bG9cIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlQW5kSW5pdChzdGFydDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmdldFNhdmVPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJpZFwiKS5zZXRWYWx1ZSh2YWx1ZS5pZCB8fCBudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZVNhdmUodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCAmJiB0aGlzLnNhdmVBbmRJbml0QnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24uY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1Y2Nlc3NNZXNzYWdlKCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBzZXZlcml0eTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwic2F2ZWRfbWVzc2FnZV90aXRsZVwiKSxcbiAgICAgICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfY29udGVudFwiKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRGVsZXRlKCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZWxldGVfY29uZmlybWF0aW9uX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlbGV0ZV9jb25maXJtYXRpb25fdGl0bGVcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5nZXREZWxldGVPYnNlcnZhYmxlKClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFRyYW5zcG9ydGFkb3JhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjbnBqID0gdmFsdWUucmVwbGFjZSgnLicsICcnKS5yZXBsYWNlKCcvJywgJycpLnJlcGxhY2UoJy0nLCAnJyk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IGBwZXNzb2EuY3BmQ25waiBlcSAnJHtjbnBqfSdgO1xuICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2UubGlzdCh7IGZpbHRlclF1ZXJ5LCBwYWdlOiAwLCBzaXplOiAxMCB9KVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0gY29udGVudHNbMF0uY29kaWdvID8gY29udGVudHNbMF0uY29kaWdvLnRvU3RyaW5nKCkgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gY29udGVudHNbMF0uZGVzY3JpY2FvID8gY29udGVudHNbMF0uZGVzY3JpY2FvLnRvU3RyaW5nKCkgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVzY3JpcHRpb24udHJpbSgpICYmICFjb2RlLnRyaW0oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzWzBdLmxhYmVsID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneW1zLmVycC5kZXJpdmFjYW9fc2VtX2Rlc2NyaWNhbycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1swXS5sYWJlbCA9IGAke2NvZGV9IC0gJHtkZXNjcmlwdGlvbn1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCd0cmFuc3BvcnRhZG9yYScpLnNldFZhbHVlKGNvbnRlbnRzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFByb3Aob2JqOiBhbnksIHBhdGg6IGFueSkge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdChcIi5cIikucmVkdWNlKChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PiAocmVzdWx0W3Byb3BdID09PSB1bmRlZmluZWQgPyBcIlwiIDogcmVzdWx0W3Byb3BdKSwgb2JqKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVjZWJpbWVudG8oYWdlbmRhSWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlY2ViaW1lbnRvU2VydmljZVxuICAgICAgICAgICAgLmxpc3Qoe1xuICAgICAgICAgICAgICAgIGZpbHRlclF1ZXJ5OiBgYWdlbmRhLmlkIGVxICcke2FnZW5kYUlkfSdgLFxuICAgICAgICAgICAgICAgIHNpemU6IDEsXG4gICAgICAgICAgICAgICAgcGFnZTogMFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c2NhckZpbGlhbCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbEVpeG9zQ29udHJhdGFkb3MgPSBjb250ZW50c1swXS5laXhvcyB8fCAwO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxFaXhvc0NvbXBvc2ljYW8gPSBjb250ZW50c1swXS5hZ2VuZGEgJiYgY29udGVudHNbMF0uYWdlbmRhLnZlaWN1bG9cbiAgICAgICAgICAgICAgICAgICAgPyBjb250ZW50c1swXS5hZ2VuZGEudmVpY3Vsby5laXhvcyB8fCAwIDogMDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2ViaW1lbnRvID0gUmVjZWJpbWVudG9Db250cmF0by5mcm9tRHRvKGNvbnRlbnRzWzBdKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHJlY2ViaW1lbnRvKTtcblxuICAgICAgICAgICAgICAgIHJlY2ViaW1lbnRvLmZvcm5lY2Vkb3Jlcy5mb3JFYWNoKGZvcm5lY2Vkb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRGb3JuZWNlZG9yRm9ybShmb3JuZWNlZG9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb3JuZWNlZG9yZXNGb3JtKCkucHVzaChmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yLmNvbnRyYXRvcy5mb3JFYWNoKGNvbnRyYXRvID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyYXRvRm9ybSA9IHRoaXMuZ2V0Q29udHJhdG9Gb3JtKGNvbnRyYXRvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJhdG9zKGZvcm0pLnB1c2goY29udHJhdG9Gb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhdG8uaXRlbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRm9ybSA9IHRoaXMuZ2V0SXRlbUZvcm0oaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRJdGVuc0NvbnRyYXRvKGNvbnRyYXRvRm9ybSkucHVzaChpdGVtRm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhdG8ubm90YXMuZm9yRWFjaChub3RhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RhRm9ybSA9IHRoaXMuZ2V0Tm90YUZvcm0obm90YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROb3Rhcyhjb250cmF0b0Zvcm0pLnB1c2gobm90YUZvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwRGlzYWJsZUZvcm0oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FycmVnYW5kb0VycFJlY2ViaW1lbnRvID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWxpYWxMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAucmVkdWNlKChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IHZhbHVlLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH0sIHsgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLCBwYWdpbmE6IHsgbGltaXQ6IDEwLCBvZmZzZXQ6IDAgfSB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dCk7XG5cbiAgICAgICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdEZpbGlhaXMoZmlsdGVySW5wdXQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4gdGhpcy5maWxpYWxMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuZmlsaWFpcy5tYXAoRmlsaWFsLmZyb21EdG8pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWxpYWxTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQ6IFNvcnRNZXRhW10gPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBzb3J0Rm9ybWF0dGVkID0gISEoc29ydCB8fCBbXSkubGVuZ3RoICYmIHsgY2FtcG86IHNvcnRbMF0uZmllbGQsIG9yZGVuYWNhbzogc29ydFswXS5vcmRlciA+IDAgPyAnQXNjJyA6ICdEZXNjJyB9O1xuICAgICAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAucmVkdWNlKChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH0sIHsgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLCBwYWdpbmE6IHsgbGltaXQ6IHJvd3MsIG9mZnNldDogcGFnZSwgbGlzdGFPcmRlbmFjYW86IHNvcnRGb3JtYXR0ZWQgPyBbeyAuLi4oc29ydEZvcm1hdHRlZCkgfV0gOiBudWxsIH0gfSBhcyBQZXNxdWlzYXJGaWxpYWlzSW5wdXQpO1xuXG4gICAgICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaEdyaWREYXRhID0gbGlzdC5maWxpYWlzLm1hcChGaWxpYWwuZnJvbUR0byk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnF0ZFRvdGFsUmVnaXN0cm9zO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRm9ybmVjZWRvckxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzb3J0ID0gdGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7IGZpZWxkLCBvcmRlcjogMSB9KSk7XG5cbiAgICAgICAgbGV0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBvciBcIik7XG5cbiAgICAgICAgZmlsdGVyUXVlcnkgPSBgKCR7ZmlsdGVyUXVlcnl9KSR7ISFmaWx0ZXJRdWVyeSA/ICcgYW5kICcgOiBcIlwifXNpdHVhY2FvIGVxICdBVElWTycgYW5kIGZvcm5lY2Vkb3IgZXEgdHJ1ZWA7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuZm9ybmVjZWRvckFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMucGVzc29hU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMuZm9ybmVjZWRvckxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvckxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZvcm5lY2Vkb3JTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5LmNvbmNhdChgJHshIWZpbHRlclF1ZXJ5ID8gJyBhbmQgJyA6IFwiXCJ9c2l0dWFjYW8gZXEgJ0FUSVZPJyBhbmQgZm9ybmVjZWRvciBlcSB0cnVlYCk7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuZm9ybmVjZWRvckFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMucGVzc29hU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMuZm9ybmVjZWRvckxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvclNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm5lY2Vkb3JTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcHJpdmF0ZSBtb250YVF1ZXJ5T3JpZ2VtTWVyY2Fkb3JpYShwZXNzb2FJZDogYW55KSB7XG4gICAgICAgIHJldHVybiAgYHNpdHVhY2FvIGVxICdBVElWTycgYW5kIG9yaWdlbSBlcSAndHJ1ZScgYW5kIHBlc3NvYS5pZCBlcSAnJHtwZXNzb2FJZH0nYDtcbiAgICB9XG4gICAgXG4gICAgcHVibGljIG9uT3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZywgZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICBjb25zdCBzb3J0ID0gdGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7IGZpZWxkLCBvcmRlcjogMSB9KSk7XG5cbiAgICAgICAgbGV0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRPcmlnZW1NZXJjYWRvcmlhRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBvciBcIik7XG5cbiAgICAgICAgZmlsdGVyUXVlcnkgPSBgKCR7ZmlsdGVyUXVlcnl9KSR7ISFmaWx0ZXJRdWVyeSA/ICcgYW5kICcgOiAnJ31gO1xuICAgICAgICBmaWx0ZXJRdWVyeSArPSB0aGlzLm1vbnRhUXVlcnlPcmlnZW1NZXJjYWRvcmlhKGZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUuaWQpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLnBlc3NvYUVuZGVyZWNvU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk9yaWdlbU1lcmNhZG9yaWFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnksIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldE9yaWdlbU1lcmNhZG9yaWFGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcbiAgICAgICAgICAgIFxuICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5LmNvbmNhdChgJHshIWZpbHRlclF1ZXJ5ID8gJyBhbmQgJyA6ICcnfWApO1xuICAgICAgICBmaWx0ZXJRdWVyeSArPSB0aGlzLm1vbnRhUXVlcnlPcmlnZW1NZXJjYWRvcmlhKGZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUuaWQpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLnBlc3NvYUVuZGVyZWNvU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVjUGFnaW5hKGZpcnN0OiBudW1iZXIsIHJvd3M6IG51bWJlciwgc29ydDogYW55KSB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IG9yZGVyQnkgPSBzb3J0ICYmIHNvcnQubGVuZ3RoIFxuICAgICAgICAgICAgPyBzb3J0Lm1hcCgoczogYW55KSA9PiAoeyBjYW1wbzogcy5maWVsZCwgb3JkZW5hY2FvOiBzLm9yZGVyID09PSAxID8gJ0FzYycgOiAnRGVzYycgfSkpIFxuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9mZnNldDogcGFnZSxcbiAgICAgICAgICAgIGxpbWl0OiByb3dzLFxuICAgICAgICAgICAgbGlzdGFPcmRlbmFjYW86IG9yZGVyQnlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblByb2R1dG9Mb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsaWFsID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlO1xuICAgICAgICBjb25zdCB0aXBvQWdlbmRhbWVudG8gPSB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG87XG5cbiAgICAgICAgdGhpcy5wcm9kdXRvU2VydmljZVxuICAgICAgICAgICAgLmxpc3RQcm9kdXRvc1JlY2ViaW1lbnRvKHtcbiAgICAgICAgICAgICAgICBwZXNxdWlzYTogdmFsdWUsXG4gICAgICAgICAgICAgICAgZW1wcmVzYUlkOiAhIWZpbGlhbCA/IGZpbGlhbC5lbXByZXNhLmlkIDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaWxpYWxJZDogISFmaWxpYWwgPyBmaWxpYWwuaWQgOiBudWxsLFxuICAgICAgICAgICAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOiAhIXRpcG9BZ2VuZGFtZW50byA/IHRpcG9BZ2VuZGFtZW50by5pZCA6IG51bGxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHV0b0xvb2t1cFN1Z2dlc3Rpb25zID0gKGxpc3QucHJvZHV0b3MgfHwgW10pLm1hcCgocHJvZHV0bzogYW55KSA9PiBQcm9kdXRvLmZyb21EdG8ocHJvZHV0bykpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJvZHV0b1NlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydDogU29ydE1ldGFbXSA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IHNvcnRGb3JtYXR0ZWQgPSAhIShzb3J0IHx8IFtdKS5sZW5ndGggJiYgeyBjYW1wbzogc29ydFswXS5maWVsZCwgb3JkZW5hY2FvOiBzb3J0WzBdLm9yZGVyID4gMCA/ICdBc2MnIDogJ0Rlc2MnIH07XG4gICAgICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5nZXRQcm9kdXRvU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAucmVkdWNlKChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH0sIHsgcGFnaW5hOiB7IGxpbWl0OiByb3dzLCBvZmZzZXQ6IHBhZ2UsIGxpc3RhT3JkZW5hY2FvOiBzb3J0Rm9ybWF0dGVkID8gW3sgLi4uKHNvcnRGb3JtYXR0ZWQpIH1dIDogbnVsbCB9IH0gYXMgUHJvZHV0b1JlY2ViaW1lbnRvUGFyYW1zKTtcblxuICAgICAgICBjb25zdCBmaWxpYWwgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWU7XG4gICAgICAgIGNvbnN0IHRpcG9BZ2VuZGFtZW50byA9IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50bztcblxuICAgICAgICB0aGlzLnByb2R1dG9TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdFByb2R1dG9zUmVjZWJpbWVudG8oe1xuICAgICAgICAgICAgICAgIC4uLmZpbHRlcklucHV0LFxuICAgICAgICAgICAgICAgIGVtcHJlc2FJZDogISFmaWxpYWwgPyBmaWxpYWwuZW1wcmVzYS5pZCA6IG51bGwsXG4gICAgICAgICAgICAgICAgZmlsaWFsSWQ6ICEhZmlsaWFsID8gZmlsaWFsLmlkIDogbnVsbCxcbiAgICAgICAgICAgICAgICB0aXBvQWdlbmRhbWVudG9JZDogISF0aXBvQWdlbmRhbWVudG8gPyB0aXBvQWdlbmRhbWVudG8uaWQgOiBudWxsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHV0b1NlYXJjaFRvdGFsUmVjb3JkcyA9IHJlcy5xdGRUb3RhbFJlZ2lzdHJvcztcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1dG9TZWFyY2hHcmlkRGF0YSA9IChyZXMucHJvZHV0b3MgfHwgW10pLm1hcCgocHJvZHV0bzogYW55KSA9PiBQcm9kdXRvLmZyb21EdG8ocHJvZHV0bykpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRGVyaXZhY2FvTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLmRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiAoeyBmaWVsZCwgb3JkZXI6IDEgfSkpO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXREZXJpdmFjYW9TZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5kZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmRlcml2YWNhb0FkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuZGVyaXZhY2FvU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGVyaXZhY2FvTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy5kZXJpdmFjYW9Mb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcml2YWNhb0xvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRlcml2YWNhb1NlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXREZXJpdmFjYW9TZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5kZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmRlcml2YWNhb0FkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuZGVyaXZhY2FvU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGVyaXZhY2FvTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy5kZXJpdmFjYW9Mb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcml2YWNhb1NlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLmRlcml2YWNhb1NlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRyYW5zcG9ydGFkb3JhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIG9uTG9va3VwUmVxdWVzdCh0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy50cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvciwgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2UsIHZhbHVlKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVHJhbnNwb3J0YWRvcmFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcblxuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy50cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRyYW5zZ2VuaWFMb29rdXBSZXF1ZXN0KHZhbHVlOiBhbnkpIHtcbiAgICAgICAgb25Mb29rdXBSZXF1ZXN0KHRoaXMuZ2V0VHJhbnNnZW5pYVNlYXJjaEZpZWxkcygpLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNnZW5pYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2dlbmlhQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNnZW5pYUxvb2t1cFNlcGFyYXRvcixcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZ2VuaWFTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2VyYUZpbHRyb1RyYW5zZ2VuaWEoKSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB0aGlzLnRyYW5zZ2VuaWFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRyYW5zZ2VuaWFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldFRyYW5zZ2VuaWFTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICAgICAgY29uc3QgIGZpbHRyb1RyYW5zZ2VuaWEgPSB0aGlzLmdlcmFGaWx0cm9UcmFuc2dlbmlhKCk7XG4gICAgICAgIGlmIChmaWx0cm9UcmFuc2dlbmlhICYmIGZpbHRyb1RyYW5zZ2VuaWEudHJpbSgpKSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ID8gYCgke2ZpbHRlclF1ZXJ5fSkgYW5kICR7ZmlsdHJvVHJhbnNnZW5pYX1gIDogZmlsdHJvVHJhbnNnZW5pYTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLnRyYW5zZ2VuaWFMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zZ2VuaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLnRyYW5zZ2VuaWFTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2dlbmlhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbih0aGlzLnRyYW5zZ2VuaWFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZ2VuaWFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2dlbmlhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZvcm5lY2Vkb3IoZGF0YTogYW55ID0ge30pIHtcbiAgICAgICAgdGhpcy5lcnJvRm9ybmVjZWRvcmVzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEZvcm5lY2Vkb3JGb3JtKGRhdGEpO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZUZvcm5lY2Vkb3IoZm9ybSk7XG4gICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvcmVzRm9ybSgpLnB1c2goZm9ybSk7XG4gICAgICAgIHJldHVybiBmb3JtO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVGb3JuZWNlZG9yKGNvbnRyb2w6IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9mb3JuZWNlZG9yX2hlYWRlclwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9mb3JuZWNlZG9yX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Rm9ybmVjZWRvcmVzRm9ybSgpLmNvbnRyb2xzLmluZGV4T2YoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRGb3JuZWNlZG9yZXNGb3JtKCkucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybmVjZWRvcmVzRm9ybSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbnRyYXRvKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlXG4gICAgICAgICAgICAub3BlbihDb250cmF0b0Zvcm1Db21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAuLi5kaWFsb2dDb25maWcsXG4gICAgICAgICAgICAgICAgaGVhZGVyOiAnQWRpY2lvbmFyIENvbnRyYXRvJyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGFnZW5kYTogdGhpcy5hZ2VuZGEsXG4gICAgICAgICAgICAgICAgICAgIGZpbGlhbDogdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9kdXRvOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yOiBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjb250cmF0b3M6IGZvcm5lY2Vkb3JGb3JtLmdldChcImNvbnRyYXRvc1wiKS52YWx1ZSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uQ2xvc2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRyYXRvIH06IGFueSkgPT4gdGhpcy5vbkNvbnRyYXRvU2F2ZWQoY29udHJhdG8sIGZvcm5lY2Vkb3JGb3JtKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZXJDb250cmF0byhmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBjb250cmF0b0Zvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9jb250cmF0b19oZWFkZXJcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfY29udHJhdG9fbWVzc2FnZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKGZvcm5lY2Vkb3JGb3JtLmdldChcImNvbnRyYXRvc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmluZGV4T2YoY29udHJhdG9Gb3JtKTtcbiAgICAgICAgICAgICAgICAoZm9ybmVjZWRvckZvcm0uZ2V0KFwiY29udHJhdG9zXCIpIGFzIEZvcm1BcnJheSkucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5jb250cmF0b3MgPSBmb3JuZWNlZG9yRm9ybS5nZXQoXCJjb250cmF0b3NcIilcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJhdG9zIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTm90YShmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihOb3RhRm9ybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5hZGljaW9uYXJfbm90YVwiKSxcbiAgICAgICAgICAgIC4uLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBmb3JuZWNlZG9yOiBmb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZSxcbiAgICAgICAgICAgICAgICBwcm9kdXRvOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIGZpbGlhbDogdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JOb3Rhc1Rva2VuczogdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMsXG4gICAgICAgICAgICAgICAgY29udHJhdG9zOiB0aGlzLmNvbnRyYXRvcyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uQ2xvc2VcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSlcbiAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLm9uTm90YVNhdmVkKHZhbHVlLCBmb3JtR3JvdXApKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3Zlck5vdGEoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgY29udHJhdG9Gb3JtOiBGb3JtR3JvdXAsIG5vdGFGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfbm90YV9oZWFkZXJcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfbm90YV9tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJhdG9JZCA9IGNvbnRyYXRvRm9ybVtcInZhbHVlXCJdW1wiY29udHJhdG9cIl1bXCJpZFwiXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtLCBjb250cmF0b0lkKS5jb250cm9scy5pbmRleE9mKG5vdGFGb3JtKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldE5vdGFzRnJvbUNvbnRyYXRvcyhmb3JuZWNlZG9yRm9ybSwgY29udHJhdG9JZCkucmVtb3ZlQXQoaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90YSA9IG5vdGFGb3JtW1widmFsdWVcIl07XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBub3RhLmNoYXZlTm90YUZpc2NhbCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IG5vdGEubnVtZXJvTm90YUZpc2NhbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IG5vdGEuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBzZXJpZU5vdGFGaXNjYWw6IG5vdGEuc2VyaWVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogbm90YS5zZXJpZUxlZ2FsTm90YUZpc2NhbCxcbiAgICAgICAgICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogbm90YS5udW1lcm9Ob3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Tm90YXMoY29udHJhdG9Gb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgcmV0dXJuIGNvbnRyYXRvRm9ybVtcImNvbnRyb2xzXCJdW1wibm90YXNcIl0gYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJdGVuc0NvbnRyYXRvKGNvbnRyYXRvRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHJldHVybiBjb250cmF0b0Zvcm0uZ2V0KFwiaXRlbnNcIikgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93QnV0dG9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFnZW5kYSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcy5pc05ldygpIHx8IFtcbiAgICAgICAgICAgIFN0YXR1c0FnZW5kYS5BR0VOREFETyxcbiAgICAgICAgICAgIFN0YXR1c0FnZW5kYS5BR1VBUkRBTkRPX0NPTkZJUk1BQ0FPLFxuICAgICAgICAgICAgU3RhdHVzQWdlbmRhLkFHVUFSREFORE9fQ09ORklSTUFDQU9fU09MSUNJVEFOVEUsXG4gICAgICAgICAgICBTdGF0dXNBZ2VuZGEuUkVKRUlUQURPX1BPUl9WQUxJREFDQU9cbiAgICAgICAgXS5pbmNsdWRlcyh0aGlzLmFnZW5kYS5zdGF0dXMgYXMgU3RhdHVzQWdlbmRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZUFkaWNpb25hck5vdGEoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyYXRvU2VsZWNpb25hZG8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRpcG9UcmFuc2dlbmlhKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICgodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBsZXQgdGlwb1BhcnRpY2lwYW50ZVRyYW5zZ2VuaWFHZXJhbCA9IG51bGw7ICAgICAgICBcbiAgICAgICAgY29uc3QgcmVjZWJpbWVudG9EdG8gPSBSZWNlYmltZW50b0NvbnRyYXRvLnRvRHRvKHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkpOyAgICAgICAgXG4gICAgICAgIHJlY2ViaW1lbnRvRHRvLmZvcm5lY2Vkb3Jlcy5mb3JFYWNoKGN1cnJlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuZm9ybmVjZWRvciAhPSBudWxsICYmIGN1cnJlbnQuZm9ybmVjZWRvci50aXBvUGFydGljaXBhbnRlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aXBvUGFydGljaXBhbnRlVHJhbnNnZW5pYUdlcmFsID0gY3VycmVudC5mb3JuZWNlZG9yLnRpcG9QYXJ0aWNpcGFudGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGlwb1BhcnRpY2lwYW50ZVRyYW5zZ2VuaWFHZXJhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZhbWlsaWFQcm9kdXRvKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHByb2R1dG8gPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlO1xuXG4gICAgICAgIGlmKHByb2R1dG8gJiYgcHJvZHV0by5mYW1pbGlhICYmIHByb2R1dG8uZmFtaWxpYS5jb2RpZ28pe1xuICAgICAgICAgICAgcmV0dXJuIHByb2R1dG8uZmFtaWxpYS5jb2RpZ287XG4gICAgICAgIH1cblxuICAgICAgICBpZihwcm9kdXRvICYmIHByb2R1dG8uZmFtaWxpYSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb2R1dG8uZmFtaWxpYTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VyYUZpbHRyb1RyYW5zZ2VuaWEoKXsgICAgICAgIFxuICAgICAgICBsZXQgYnVpbGRTdHJpbmcgPSBgZW1wcmVzYS5pZCBlcSAnJHt0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpbGlhbCcpLnZhbHVlLmVtcHJlc2EuaWR9J2A7XG5cbiAgICAgICAgYnVpbGRTdHJpbmcgKz0gYGFuZCBzaXR1YWNhbyBlcSAnJHtTaXR1YWNhby5BVElWT30nYDtcblxuICAgICAgICBjb25zdCBmYW1pbGlhID0gdGhpcy5nZXRGYW1pbGlhUHJvZHV0bygpO1xuICAgICAgICBpZiAoZmFtaWxpYSkge1xuICAgICAgICAgICAgYnVpbGRTdHJpbmcgKz0gYCBhbmQgYDtcbiAgICAgICAgICAgIGJ1aWxkU3RyaW5nICs9IGBmYW1pbGlhIGVxICcke2ZhbWlsaWF9J2A7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aXBvVHJhbnNnZW5pYSA9IHRoaXMuZ2V0VGlwb1RyYW5zZ2VuaWEoKTtcbiAgICAgICAgaWYgKHRpcG9UcmFuc2dlbmlhKSB7XG4gICAgICAgICAgICBidWlsZFN0cmluZyArPSBgIGFuZCBgO1xuICAgICAgICAgICAgYnVpbGRTdHJpbmcgKz0gYHRpcG9QYXJ0aWNpcGFudGUgZXEgJyR7dGlwb1RyYW5zZ2VuaWF9J2A7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnVpbGRTdHJpbmc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROb3RhRm9ybShkYXRhOiBhbnkgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IFtkYXRhLmNoYXZlTm90YUZpc2NhbF0sXG4gICAgICAgICAgICBzZXJpZU5vdGFGaXNjYWw6IFtkYXRhLnNlcmllTm90YUZpc2NhbF0sXG4gICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogW2RhdGEuc2VyaWVMZWdhbE5vdGFGaXNjYWxdLFxuICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogW2RhdGEubnVtZXJvTm90YUZpc2NhbF0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udHJhdG9Gb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGNvbnRyYXRvOiBbZGF0YS5jb250cmF0bywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBpdGVuczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICAgICAgICBub3RhczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJdGVtRm9ybShkYXRhOiBhbnkgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBpdGVtOiBbZGF0YS5pdGVtLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHF1YW50aWRhZGU6IFtkYXRhLnF1YW50aWRhZGVdXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybmVjZWRvckZvcm0oZGF0YTogYW55ID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgZm9ybmVjZWRvcjogW2RhdGEuZm9ybmVjZWRvciwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBvcmlnZW1NZXJjYWRvcmlhOiBbZGF0YS5vcmlnZW1NZXJjYWRvcmlhLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKV0sXG4gICAgICAgICAgICB0aXBvTm90YUZpc2NhbDogW2RhdGEudGlwb05vdGFGaXNjYWwgfHwgVGlwb05vdGFGaXNjYWwuRU1QUkVTQV9KVVJJRElDQSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBjb250cmF0b3M6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm1Hcm91cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgaWQ6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgZmlsaWFsOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBwcm9kdXRvOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKV0sXG4gICAgICAgICAgICBkZXJpdmFjYW86IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgdHJhbnNwb3J0YWRvcmE6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGFnZW5kYTogW3sgdmFsdWU6IHRoaXMuYWdlbmRhLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSldLFxuICAgICAgICAgICAgdHJhbnNnZW5pYTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBmb3JuZWNlZG9yZXM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgICAgICAgICAgY3JlYXRlZEJ5OiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZEJ5OiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZERhdGU6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgY3VzdG9tOiBbXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yQnlDb250cmF0byhjb250cmF0bzogQ29udHJhdG9Db21wcmFEdG8sIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLmxpc3QoeyBzaXplOiAxLCBwYWdlOiAwLCBmaWx0ZXJRdWVyeTogYGlkIGVxICcke2NvbnRyYXRvLnBlc3NvYS5pZH0nYCB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgbWFwKCh7IGNvbnRlbnRzIH0pID0+IChjb250ZW50cyB8fCBbXSkubGVuZ3RoICYmIGNvbnRlbnRzWzBdKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocGVzc29hID0+IHtcbiAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnNldFZhbHVlKFBlc3NvYS5mcm9tRHRvKHBlc3NvYSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9kdXRvQnlDb250cmF0byhjb250cmF0bzogQ29udHJhdG9Db21wcmFEdG8pIHtcbiAgICAgICAgdGhpcy5jb250cmF0b0NvbXByYVNlcnZpY2UubGlzdEl0ZW5zKGNvbnRyYXRvLmlkLCB7IHNpemU6IDEsIHBhZ2U6IDAsIGRpc3BsYXlGaWVsZHM6IFsnc2t1LmlkJ10gfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRoaXMucHJvZHV0b1NlcnZpY2UubGlzdCh7IHNpemU6IDEsIHBhZ2U6IDAsIGZpbHRlclF1ZXJ5OiBgaWQgZXEgJyR7Y29udGVudHNbMF0uc2t1LmlkfSdgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHsgY29udGVudHMgfSkgPT4gKGNvbnRlbnRzIHx8IFtdKS5sZW5ndGggJiYgY29udGVudHNbMF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHByb2R1dG8gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuc2V0VmFsdWUoUHJvZHV0by5mcm9tRHRvKHByb2R1dG8pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Db250cmF0b1NhdmVkKGNvbnRyYXRvOiBhbnksIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmdldFByb2R1dG9CeUNvbnRyYXRvKGNvbnRyYXRvLmNvbnRyYXRvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGb3JuZWNlZG9yQnlDb250cmF0byhjb250cmF0by5jb250cmF0bywgZm9ybmVjZWRvckZvcm0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udHJhdG9Gb3JtID0gdGhpcy5nZXRDb250cmF0b0Zvcm0oY29udHJhdG8pO1xuICAgICAgICAoY29udHJhdG8uaXRlbnMgfHwgW10pLmZvckVhY2goKGl0ZW06IGFueSkgPT4gKGNvbnRyYXRvRm9ybS5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2godGhpcy5nZXRJdGVtRm9ybShpdGVtKSkpO1xuXG4gICAgICAgIHRoaXMuZ2V0Q29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtKS5wdXNoKGNvbnRyYXRvRm9ybSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZW5zYWdlbUNvbnRyYXRvTmFvU2VsZWNpb25hZG8oKSB7XG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZShcImVycm9yXCIsIFwiQ29udHJhdG8gbsOjbyBzZWxlY2lvbmFkb1wiLCBcIk5lbmh1bSBjb250cmF0byBmb2kgc2VsZWNpb25hZG8hXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Ob3RhU2F2ZWQodmFsdWU6IGFueSwgZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyYXRvU2VsZWNpb25hZG8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW1Db250cmF0b05hb1NlbGVjaW9uYWRvKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbHVlLmFkZEZvcm5lY2Vkb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtLCB0aGlzLmNvbnRyYXRvU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICAgICAgaWYgKG5vdGFzRm9ybSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKHRoaXMuZ2V0Tm90YUZvcm0odmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXN0c0Zvcm5lY2Vkb3IgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheSkuY29udHJvbHMuZmluZCgoZm9ybSkgPT4gKGZvcm0udmFsdWUuZm9ybmVjZWRvciB8fCB7IGlkOiB1bmRlZmluZWQgfSkuaWQgPT09IHZhbHVlLmZvcm5lY2Vkb3IuaWQpO1xuICAgICAgICBjb25zdCB7IGluZm9Ob3RhIH0gPSB2YWx1ZTtcbiAgICAgICAgY29uc3Qgbm90YUZvcm0gPSB0aGlzLmdldE5vdGFGb3JtKHsgXG4gICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IGluZm9Ob3RhLmNoYXZlLFxuICAgICAgICAgICAgc2VyaWVOb3RhRmlzY2FsOiBpbmZvTm90YS5zZXJpZSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBpbmZvTm90YS5zZXJpZUxlZ2FsLFxuICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogaW5mb05vdGEubnVtZXJvLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoISFleGlzdHNGb3JuZWNlZG9yKSB7XG4gICAgICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbUNvbnRyYXRvcyhleGlzdHNGb3JuZWNlZG9yLCB0aGlzLmNvbnRyYXRvU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICAgICAgbm90YXNGb3JtLnB1c2gobm90YUZvcm0pO1xuICAgICAgICB9IGVsc2UgaWYgKCFmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlKSB7XG4gICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnNldFZhbHVlKFBlc3NvYS5mcm9tRHRvKHZhbHVlLmZvcm5lY2Vkb3IpKTtcbiAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcIm9yaWdlbU1lcmNhZG9yaWFcIikuc2V0VmFsdWUoUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZS5vcmlnZW1NZXJjYWRvcmlhKSk7XG4gICAgICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbUNvbnRyYXRvcyhmb3JuZWNlZG9yRm9ybSwgdGhpcy5jb250cmF0b1NlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm5lY2Vkb3IgPSB0aGlzLmFkZEZvcm5lY2Vkb3IoeyBmb3JuZWNlZG9yOiBQZXNzb2EuZnJvbUR0byh2YWx1ZS5mb3JuZWNlZG9yKSwgb3JpZ2VtTWVyY2Fkb3JpYTogUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZS5vcmlnZW1NZXJjYWRvcmlhKSB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3IsIHRoaXMuY29udHJhdG9TZWxlY2lvbmFkby5pZCk7XG4gICAgICAgICAgICBub3Rhc0Zvcm0ucHVzaChub3RhRm9ybSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtOiBBYnN0cmFjdENvbnRyb2wsIGNvbnRyYXRvSWQ6IGFueSkge1xuICAgICAgICBsZXQgY29udHJhdG9zRm9ybVNlbGVjaW9uYWRvID0gbnVsbDtcbiAgICAgICAgY29uc3QgY29udHJhdG9zRm9ybSA9IGZvcm5lY2Vkb3JGb3JtW1wiY29udHJvbHNcIl1bXCJjb250cmF0b3NcIl1bXCJjb250cm9sc1wiXTtcblxuICAgICAgICBmb3IgKGxldCBjb250cmF0b0Zvcm0gb2YgY29udHJhdG9zRm9ybSkge1xuICAgICAgICAgICAgaWYgKGNvbnRyYXRvRm9ybVtcImNvbnRyb2xzXCJdW1wiY29udHJhdG9cIl1bXCJ2YWx1ZVwiXS5pZCA9PT0gY29udHJhdG9JZCkge1xuICAgICAgICAgICAgICAgIGNvbnRyYXRvc0Zvcm1TZWxlY2lvbmFkbyA9IGNvbnRyYXRvRm9ybVtcImNvbnRyb2xzXCJdW1wibm90YXNcIl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyYXRvc0Zvcm1TZWxlY2lvbmFkbyBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuRW1Db250cmF0byhmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCB0b2tlbjogSVRva2VuKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyYXRvU2VsZWNpb25hZG8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW1Db250cmF0b05hb1NlbGVjaW9uYWRvKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3RhcyA9IHRoaXMuZm9ybmVjZWRvck5vdGFzLmZpbHRlcihmb3JuZWNlZG9yTm90YSA9PiBmb3JuZWNlZG9yTm90YS5jaGF2ZU5vdGFGaXNjYWwgPT09IHRva2VuLmlkKTtcbiAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvckZvcm0sIHRoaXMuY29udHJhdG9TZWxlY2lvbmFkby5pZCk7XG4gICAgICAgIGlmIChub3Rhc0Zvcm0gIT09IG51bGwgJiYgbm90YXNbMF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKHRoaXMuZ2V0Tm90YUZvcm0obm90YXNbMF0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlRm9ybmVjZWRvck5vdGFzVG9rZW5Eb0NvbnRyYXRvKHRva2VuKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRm9ybmVjZWRvck5vdGFzVG9rZW5Eb0NvbnRyYXRvKHRva2VuOiBJVG9rZW4pIHtcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMuc3BsaWNlKHRoaXMuZm9ybmVjZWRvck5vdGFzVG9rZW5zLmluZGV4T2YodG9rZW4pLCAxKTtcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXMgPSB0aGlzLmZvcm5lY2Vkb3JOb3Rhcy5maWx0ZXIoZm9ybmVjZWRvck5vdGEgPT4gZm9ybmVjZWRvck5vdGEuY2hhdmVOb3RhRmlzY2FsICE9PSB0b2tlbi5pZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVOb3RhRXJyb3IoKSB7XG4gICAgICAgIHRoaXMuZXJyb0Zvcm5lY2Vkb3Jlc05vdGFEdXBsaWNhZGEgPSBudWxsO1xuICAgICAgICB0aGlzLmVycm9DaGF2ZU5vdGEgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE5vdGFFcnJvcigpIHtcbiAgICAgICAgdGhpcy5lcnJvQ2hhdmVOb3RhID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlUHJvZHV0byhwcm9kdXRvOiBQcm9kdXRvKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIik7XG4gICAgICAgIGlmICh2YWx1ZS5pZCAhPT0gcHJvZHV0by5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlclxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX25vbWVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZ1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY3BmQ25walwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybmVjZWRvclNlYXJjaEZpZWxkcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JpZ2VtTWVyY2Fkb3JpYUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGb3JtRmllbGQuYnVpbGRGb3JJbnRlZ2VyKFwiY29kaWdvXCIsIFwieW1zLmVycC5wZXNzb2FfZW5kZXJlY29fY29kaWdvXCIpLFxuICAgICAgICAgICAgdGhpcy5idWlsZEZvcm1GaWVsZC5idWlsZEZvclN0cmluZyhcImNucGpDcGZcIiwgXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19jbnBqX2NwZlwiKSxcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGb3JtRmllbGQuYnVpbGRGb3JTdHJpbmcoXCJpbnNjcmljYW9Fc3RhZHVhbFwiLCBcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2luc2NyaWNhb19lc3RhZHVhbFwiKSxcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGb3JtRmllbGQuYnVpbGRGb3JTdHJpbmcoXCJjZXBcIiwgXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19jZXBcIiksXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRm9ybUZpZWxkLmJ1aWxkRm9yU3RyaW5nKFwiZW5kZXJlY29cIiwgXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19lbmRlcmVjb1wiKSxcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGb3JtRmllbGQuYnVpbGRGb3JTdHJpbmcoXCJudW1lcm9cIiwgXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19udW1lcm9cIiksXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRm9ybUZpZWxkLmJ1aWxkRm9yU3RyaW5nKFwiYmFpcnJvXCIsIFwieW1zLmVycC5wZXNzb2FfZW5kZXJlY29fYmFpcnJvXCIpLFxuICAgICAgICBdO1xuICAgIH1cbiAgXG4gICAgcHJpdmF0ZSBnZXRPcmlnZW1NZXJjYWRvcmlhR3JpZEZpZWxkcygpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2VtTWVyY2Fkb3JpYUZpZWxkcyA9IHRoaXMuZ2V0T3JpZ2VtTWVyY2Fkb3JpYUZpZWxkcygpO1xuICAgICAgICBvcmlnZW1NZXJjYWRvcmlhRmllbGRzLnB1c2goIHRoaXMuYnVpbGRGb3JtRmllbGQuYnVpbGRGb3JTdHJpbmcoXCJlbXByZXNhLmRlc2NyaWNhb1wiLCBcInltcy5lcnAuZW1wcmVzYVwiKSApO1xuICAgICAgICByZXR1cm4gb3JpZ2VtTWVyY2Fkb3JpYUZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2R1dG9TZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wcm9kdXRvX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wcm9kdXRvX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2R1dG9TZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICBjb25zdCBwcm9kdXRvU2VhcmNoRmllbGRzID0gdGhpcy5nZXRQcm9kdXRvU2VhcmNoRmllbGRzKCk7XG4gICAgICAgICBwcm9kdXRvU2VhcmNoRmllbGRzLnB1c2goXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb0NvbXBsZW1lbnRhclwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wcm9kdXRvX2Rlc2NyaWNhb19jb21wbGVtZW50YXJcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBwcm9kdXRvU2VhcmNoRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWdlbmRhU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuYWdlbmRhX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBZ2VuZGFTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuYWdlbmRhX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZXJpdmFjYW9TZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fY29kaWdvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19kZXNjcmljYW9cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGVyaXZhY2FvU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19jb2RpZ29cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlc3NvYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jbnBqXCIpXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX25vbWVcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2EuY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2dlbmlhU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc2dlbmlhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zZ2VuaWFfZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zZ2VuaWFTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc2dlbmlhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zZ2VuaWFfZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdvQmFjaygpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNSb3V0ZSA9IFwiLi4vXCI7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwcmV2aW91c1JvdXRlXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLnBhcmVudCB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgICAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkgY29udHJvbC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoY29udHJvbCk7XG4gICAgICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSBjb250cm9sLmNvbnRyb2xzLmZvckVhY2goZm9ybSA9PiB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtIGFzIEZvcm1Hcm91cCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvY3VzU2VydmljZS5mb2N1c0ZpcnN0SW52YWxpZElucHV0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTYXZlT2JzZXJ2YWJsZSgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICB2YWx1ZS5hZ2VuZGEgPSB0aGlzLmFnZW5kYTtcbiAgICAgICAgY29uc3QgcmVjZWJpbWVudG9EdG8gPSBSZWNlYmltZW50b0NvbnRyYXRvLnRvRHRvKHZhbHVlKTtcblxuICAgICAgICBsZXQgZm9ybmVjZWRvcmVzOiBhbnlbXSA9IHJlY2ViaW1lbnRvRHRvLmZvcm5lY2Vkb3JlcztcbiAgICAgICAgcmVjZWJpbWVudG9EdG8uZm9ybmVjZWRvcmVzLmZvckVhY2goYW50ZXJpb3IgPT4ge1xuICAgICAgICAgICAgcmVjZWJpbWVudG9EdG8uZm9ybmVjZWRvcmVzLmZvckVhY2gocG9zdGVyaW9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYW50ZXJpb3IuZm9ybmVjZWRvci5pZCA9PT0gcG9zdGVyaW9yLmZvcm5lY2Vkb3IuaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgYW50ZXJpb3Iub3JpZ2VtTWVyY2Fkb3JpYS5pZCA9PT0gcG9zdGVyaW9yLm9yaWdlbU1lcmNhZG9yaWEuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zdGVyaW9yLmNvbnRyYXRvcy5mb3JFYWNoKChjb250cmF0bzogYW55KSA9PiBhbnRlcmlvci5jb250cmF0b3MucHVzaChjb250cmF0bykpO1xuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yZXMgPSBmb3JuZWNlZG9yZXMuc3BsaWNlKGZvcm5lY2Vkb3Jlcy5pbmRleE9mKHBvc3RlcmlvciksIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVjZWJpbWVudG9EdG8uZm9ybmVjZWRvcmVzID0gZm9ybmVjZWRvcmVzO1xuXG4gICAgICAgIGxldCBvYnNlcnZhYmxlOiBhbnk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNOZXcoKSAmJiAhdmFsdWUuaWQpIHtcbiAgICAgICAgICAgIG9ic2VydmFibGUgPSB0aGlzLnJlY2ViaW1lbnRvU2VydmljZS5pbnNlcnQocmVjZWJpbWVudG9EdG8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWQgPSB2YWx1ZS5pZDtcbiAgICAgICAgICAgIG9ic2VydmFibGUgPSB0aGlzLnJlY2ViaW1lbnRvU2VydmljZS51cGRhdGUoaWQsIHJlY2ViaW1lbnRvRHRvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGVsZXRlT2JzZXJ2YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjZWJpbWVudG9TZXJ2aWNlLmRlbGV0ZSgnJykucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFwic3VjY2Vzc1wiLCBcInltcy5lcnAuZGVsZXRlZF9tZXNzYWdlX3RpdGxlXCIsIFwieW1zLmVycC5kZWxldGVkX21lc3NhZ2VfY29udGVudFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdvQmFjaygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlVmlzdWFsaXphdGlvbigpIHtcbiAgICAgICAgaWYgKCF1c2VyQ2FuVmlzdWFsaXplKHRoaXMuZm9ybUdyb3VwLCB0aGlzLmFsbFBlcm1pc3Npb25zKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFwiZXJyb3JcIiwgXCJ5bXMuZXJwLmNhbm5vdF92aXN1YWxpemVfZm9ybV9zdW1tYXJ5XCIsIFwieW1zLmVycC5jYW5ub3RfdmlzdWFsaXplX2Zvcm1fZGV0YWlsXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRNZXNzYWdlKHNldmVyaXR5OiBzdHJpbmcsIHN1bW1hcnk6IHN0cmluZywgZGV0YWlsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgc2V2ZXJpdHksXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHN1bW1hcnkpLFxuICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGRldGFpbCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgb25GaWxpYWxWYWx1ZUNoYW5nZSA9IChmaWxpYWw6IEZpbGlhbCkgPT4ge1xuICAgICAgICB0aGlzLmRpc2FibGVPcmRlcnNCdXR0b25zID0gIWZpbGlhbDtcbiAgICAgICAgaWYgKCFmaWxpYWwgJiYgdGhpcy5pc05ldygpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zZ2VuaWFcIikuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zZ2VuaWFcIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvRXJwRmlsaWFsID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc2dlbmlhXCIpLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLmNhcnJlZ2FuZG9FcnBGaWxpYWwgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1c2NhckZpbGlhbCgpIHtcbiAgICAgICAgY29uc3QgcGxhbnRhID0gdGhpcy5hZ2VuZGEucGxhbnRhIHx8IHsgY25wajogW10gfTtcbiAgICAgICAgaWYgKHBsYW50YS5jbnBqLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ2FycmVnYWRvID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgICAgICAgLmxpc3Qoe1xuICAgICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeTogYHBlc3NvYS5jcGZDbnBqIGVxICcke3BsYW50YS5jbnBqWzBdfSdgLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZHM6IFsnKicsICdlbXByZXNhLm5vbWUnXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikuc2V0VmFsdWUoRmlsaWFsLmZyb21EdG8oY29udGVudHNbMF0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ2FycmVnYWRvID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlndXJlRm9ybmVjZWRvcihmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIilcbiAgICAgICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZWhQZXNzb2FKdXJpZGljYSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJ0aXBvTm90YUZpc2NhbFwiKS5zZXRWYWx1ZShUaXBvTm90YUZpc2NhbC5FTVBSRVNBX0pVUklESUNBKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJ0aXBvTm90YUZpc2NhbFwiKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLnNldFZhbHVlKFRpcG9Ob3RhRmlzY2FsLlBST0RVVE9SX1JVUkFMKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJ0aXBvTm90YUZpc2NhbFwiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLnNldFZhbHVlKFRpcG9Ob3RhRmlzY2FsLkVNUFJFU0FfSlVSSURJQ0EpO1xuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJ0aXBvTm90YUZpc2NhbFwiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc2dlbmlhXCIpLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNnZW5pYVwiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAodmFsdWUgPT4gdGhpcy5wZXNzb2FFbmRlcmVjb1NlcnZpY2UubGlzdCh7IHNpemU6IDEwLCBwYWdlOiAwLCBmaWx0ZXJRdWVyeTogYHNpdHVhY2FvIGVxICdBVElWTycgYW5kIHBlc3NvYS5pZCBlcSAnJHt2YWx1ZS5pZH0nYCB9KVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc2dlbmlhXCIpLmVuYWJsZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJvcmlnZW1NZXJjYWRvcmlhXCIpLnNldFZhbHVlKFBlc3NvYUVuZGVyZWNvLmZyb21EdG8oY29udGVudHNbMF0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcIm9yaWdlbU1lcmNhZG9yaWFcIikuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JpZ2VtTWVyY2Fkb3JpYVwiKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVoUGVzc29hSnVyaWRpY2EocGVzc29hOiBQZXNzb2EpIHtcbiAgICAgICAgY29uc3QgY3BmQ25waiA9IChwZXNzb2EuY3BmQ25waiB8fCBcIlwiKS5yZXBsYWNlKC9cXEQrL2csIFwiXCIpO1xuICAgICAgICByZXR1cm4gY3BmQ25wai5sZW5ndGggPiAxMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lbnNhZ2VtQnVzY2FuZG9Ob3RhKCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBzZXZlcml0eTogJ2luZm8nLFxuICAgICAgICAgICAgc3VtbWFyeTogJ0J1c2NhbmRvIGRhZG9zIGRhIG5vdGEnLFxuICAgICAgICAgICAgZGV0YWlsOiAnQWd1YXJkZSwgYnVzY2FuZG8gZGFkb3MgZGEgbm90YScsXG4gICAgICAgICAgICBsaWZlOiA1MDAwXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhckNucGpGb3JuZWNlZG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVoUGVzc29hSnVyaWRpY2EoeyBjcGZDbnBqOiB2YWx1ZSB9IGFzIFBlc3NvYSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgZm9ybmVjZWRvciA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS5jb250cm9scy5maW5kKChmb3JtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKChmb3JtLnZhbHVlLmZvcm5lY2Vkb3IgfHwgeyBjcGZDbnBqOiAnJyB9KS5jcGZDbnBqIGFzIHN0cmluZykuc3Vic3RyaW5nKDAsIDgpID09PSB2YWx1ZS5zdWJzdHJpbmcoMCwgOClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmb3JuZWNlZG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250cmF0b0l0ZW0ge1xuICAgIGl0ZW06IENvbnRyYXRvQ29tcHJhSXRlbTtcbiAgICBxdWFudGlkYWRlOiBudW1iZXI7XG59XG4iXX0=
1849
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjZWJpbWVudG8tZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMveW1zLWludGVncmF0aW9uLyIsInNvdXJjZXMiOlsic3JjL2VycC1zZW5pb3IvcmVjZWJpbWVudG8vZm9ybS9yZWNlYmltZW50by1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBaUIsU0FBUyxFQUFFLEtBQUssRUFBcUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQW1CLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFVLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRCxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFZLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FB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LElBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3BFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzFGLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0UsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzVGLFVBQVUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hDLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RSxXQUFXLEVBQUUs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O1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQTMzRFE7UUFBUixLQUFLLEVBQUU7MENBQWlCLE1BQU07NERBQUM7SUFHaEM7UUFEQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7MENBQ0wsV0FBVztvRUFBTTtJQUd4QztRQURDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQzswQ0FDTCxXQUFXO3NFQUFNO0lBM0dqQyx3QkFBd0I7UUFScEMsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QixxanJCQUFnRDtZQUNoRCxTQUFTLEVBQUU7Z0JBQ1AsbUJBQW1CO2FBQ3RCOztTQUVKLENBQUM7aURBdUlrQywwQkFBMEI7WUFDdEMsTUFBTTtZQUNQLGNBQWM7WUFDTCxjQUFjO1lBQ1QsbUJBQW1CO1lBQzNCLFdBQVc7WUFDYixnQkFBZ0I7WUFDWCxjQUFjO1lBQ1YseUJBQXlCO1lBQy9CLFlBQVk7WUFDWCxhQUFhO1lBQ0wscUJBQXFCO1lBQ3JCLHFCQUFxQjtZQUNyQixxQkFBcUI7WUFDN0IsYUFBYTtZQUNaLGNBQWM7WUFDWixnQkFBZ0I7WUFDTixpQ0FBaUM7WUFDdkMsb0JBQW9CO1lBQ3ZCLGlCQUFpQjtZQUNyQixhQUFhO1lBQ2IsYUFBYTtZQUNULGlCQUFpQjtZQUNkLG9CQUFvQjtZQUN0QixrQkFBa0I7WUFDcEIsZ0JBQWdCO1lBQ1QsY0FBYztPQWhLMUMsd0JBQXdCLENBaStEcEM7SUFBRCwrQkFBQztDQUFBLEFBaitERCxJQWkrREM7U0FqK0RZLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkRm9ybUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYnVpbGQtZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybUZpZWxkLCBJVG9rZW4gfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgSG90a2V5LCBIb3RrZXlzU2VydmljZSB9IGZyb20gXCJhbmd1bGFyMi1ob3RrZXlzXCI7XG5pbXBvcnQgKiBhcyBfbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIERpYWxvZ1NlcnZpY2UsIFNvcnRNZXRhIH0gZnJvbSBcInByaW1lbmcvYXBpXCI7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCJwcmltZW5nL2NvbXBvbmVudHMvY29tbW9uL21lc3NhZ2VzZXJ2aWNlXCI7XG5pbXBvcnQgeyBlbXB0eSwgZm9ya0pvaW4sIG9mLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGNvbmNhdE1hcCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIG1lcmdlTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmllbGRDdXN0b21pemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9maWVsZC1jdXN0b21pemF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZvY3VzU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9mb2N1cy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBvbkxvb2t1cFJlcXVlc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9va3VwLXV0aWxzXCI7XG5pbXBvcnQgeyBkaWFsb2dDb25maWcsIGlzVmFsaWRGaWx0ZXIsIG1lcmdlVW5pcXVlLCB1c2VyQ2FuVmlzdWFsaXplIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBOb3RhRm9ybUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL25vdGEtZm9ybS9ub3RhLWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBZ2VuZGEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9hZ2VuZGEvYWdlbmRhXCI7XG5pbXBvcnQgeyBBZ2VuZGFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBDb250cmF0b0NvbXByYUl0ZW0gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9jb250cmF0by1jb21wcmEtaXRlbS9jb250cmF0by1jb21wcmEtaXRlbVwiO1xuaW1wb3J0IHsgQ29udHJhdG9Db21wcmFEdG8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9jb250cmF0by1jb21wcmEvY29udHJhdG8tY29tcHJhLWR0b1wiO1xuaW1wb3J0IHsgQ29udHJhdG9Db21wcmFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvY29udHJhdG8tY29tcHJhL2NvbnRyYXRvLWNvbXByYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEZXJpdmFjYW8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9kZXJpdmFjYW8vZGVyaXZhY2FvXCI7XG5pbXBvcnQgeyBEZXJpdmFjYW9TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZGVyaXZhY2FvL2Rlcml2YWNhby5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGaWxpYWwgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9maWxpYWwvZmlsaWFsXCI7XG5pbXBvcnQgeyBGaWxpYWxTZXJ2aWNlLCBQZXNxdWlzYXJGaWxpYWlzSW5wdXQgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9maWxpYWwvZmlsaWFsLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBlc3NvYUVuZGVyZWNvIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVzc29hLWVuZGVyZWNvL3Blc3NvYS1lbmRlcmVjb1wiO1xuaW1wb3J0IHsgUGVzc29hRW5kZXJlY29TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVzc29hLWVuZGVyZWNvL3Blc3NvYS1lbmRlcmVjby5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQZXNzb2EgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EvcGVzc29hXCI7XG5pbXBvcnQgeyBQZXNzb2FTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVzc29hL3Blc3NvYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQcm9kdXRvIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcHJvZHV0by9wcm9kdXRvXCI7XG5pbXBvcnQgeyBQcm9kdXRvUmVjZWJpbWVudG9QYXJhbXMsIFByb2R1dG9TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcHJvZHV0by9wcm9kdXRvLnNlcnZpY2VcIjtcbmltcG9ydCB7IFJlY2ViaW1lbnRvQ29udHJhdG8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9yZWNlYmltZW50by1jb250cmF0by9yZWNlYmltZW50b1wiO1xuaW1wb3J0IHsgUmVjZWJpbWVudG9Db250cmF0b1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9yZWNlYmltZW50by1jb250cmF0by9yZWNlYmltZW50by5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUcmFuc2dlbmlhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNnZW5pYS90cmFuc2dlbmlhXCI7XG5pbXBvcnQgeyBUcmFuc2dlbmlhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zZ2VuaWEvdHJhbnNnZW5pYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUcmFuc3BvcnRhZG9yYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zcG9ydGFkb3JhL3RyYW5zcG9ydGFkb3JhXCI7XG5pbXBvcnQgeyBUcmFuc3BvcnRhZG9yYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy90cmFuc3BvcnRhZG9yYS90cmFuc3BvcnRhZG9yYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUaXBvTm90YUZpc2NhbCB9IGZyb20gXCIuLi8uLi9jb3JlL2VudW1zL3RpcG8tbm90YS1maXNjYWxcIjtcbmltcG9ydCB7IEVycFByb2Nlc3NEYXRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZXJwLXByb2Nlc3MtZGF0YS9lcnAtcHJvY2Vzcy1kYXRhXCI7XG5pbXBvcnQgeyBFcnBQcm9jZXNzU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1wcm9jZXNzLWRhdGEvZXJwLXByb2Nlc3Mtc2VydmljZVwiO1xuaW1wb3J0IHsgSGFzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvaGFzLWNoYW5nZS9oYXMtY2hhbmdlLXNlcnZpY2UnO1xuaW1wb3J0IHsgTm90YVZhbGlkYXRvclNlcnZpY2UsIFBlc3F1aXNhckRvY3VtZW50b1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvbm90YS12YWxpZGF0b3Iuc2VydmljZVwiO1xuaW1wb3J0IHsgVmVyaWZpY2FOb3RhZmlzY2FsIH0gZnJvbSAnLi4vLi4vY29yZS92ZXJpZmljYS1ub3RhLWZpc2NhbC92ZXJpZmljYU5vdGFGaXNjYWwnO1xuaW1wb3J0IHsgQ29udHJhdG9Gb3JtQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbnRyYXRvLWZvcm0vY29udHJhdG8tZm9ybS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFJlY2ViaW1lbnRvQ2hlZ2FkYVZlaWN1bG9PdmVycmlkZSB9IGZyb20gXCIuLi9yZWNlYmltZW50by1jaGVnYWRhLXZlaWN1bG8ub3ZlcnJpZGVcIjtcbmltcG9ydCB7IFN0YXR1c0FnZW5kYSB9IGZyb20gXCIuLy4uLy4uL2NvcmUvZW51bXMvc3RhdHVzLWFnZW5kYVwiO1xuaW1wb3J0IHsgRXJwRm9ybUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLy4uLy4uL2NvcmUvZXJwLWZvcm0tY29uZmlnL2VycC1mb3JtLWNvbmZpZy1zZXJ2aWNlJztcbmltcG9ydCB7IFNpdHVhY2FvIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy9zaXR1YWNhbyc7XG5cbmNvbnN0IG1vbWVudCA9IF9tb21lbnQ7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JlY2ViaW1lbnRvLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vcmVjZWJpbWVudG8tZm9ybS5jb21wb25lbnQuaHRtbFwiLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIF0sXG4gICAgc3R5bGVVcmxzOiBbJy4uLy4uL2VycC1zZW5pb3Iuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJlY2ViaW1lbnRvRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgICBwdWJsaWMgbG9jYWxlQ29uZmlnOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgY3VycmVuY3lMb2NhbGVPcHRpb25zOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgcGVybWlzc2lvbnM6IGFueSA9IHt9O1xuICAgIHB1YmxpYyBhbGxQZXJtaXNzaW9uczogYW55ID0ge307XG5cbiAgICBwdWJsaWMgdmlzaWJsZURpYWxvZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBxdWFudGlkYWRlU2VsZWNpb25hZGEgPSAxO1xuXG4gICAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBpdGVtRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gICAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgcHVibGljIG1haW5QYW5lbENvbGxhcHNlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zOiBGaWxpYWxbXTtcbiAgICBwdWJsaWMgZmlsaWFsTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcIm5vbWVcIiwgXCJlbXByZXNhLm5vbWVcIl07XG4gICAgcHVibGljIGZpbGlhbEFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiLCBcImVtcHJlc2Eubm9tZVwiXTtcbiAgICBwdWJsaWMgZmlsaWFsTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgZmlsaWFsU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZmlsaWFsU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGZpbGlhbFNlYXJjaEdyaWREYXRhOiBGaWxpYWxbXTtcbiAgICBwdWJsaWMgZmlsaWFsU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgZm9ybmVjZWRvckxvb2t1cFN1Z2dlc3Rpb25zOiBQZXNzb2FbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiY3BmQ25walwiXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvckFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiLCBcInNpdHVhY2FvXCIsIFwiY3BmQ25walwiLCBcInRpcG9QYXJ0aWNpcGFudGVcIl07XG4gICAgcHVibGljIGZvcm5lY2Vkb3JMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvclNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yU2VhcmNoR3JpZERhdGE6IFBlc3NvYVtdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgb3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFN1Z2dlc3Rpb25zOiBQZXNzb2FFbmRlcmVjb1tdO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcImNlcFwiLCBcImVuZGVyZWNvXCIsIFwiZW1wcmVzYS5kZXNjcmljYW9cIl07XG4gICAgcHVibGljIG9yaWdlbU1lcmNhZG9yaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImNlcFwiLCBcImVuZGVyZWNvXCIsIFwibnVtZXJvXCIsIFwiY29tcGxlbWVudG9cIiwgXCJjaWRhZGUuKlwiLCBcImJhaXJyb1wiLCBcInNpdHVhY2FvXCIsIFwiZW1wcmVzYS5kZXNjcmljYW9cIixcbiAgICAgICAgXCJjbnBqQ3BmXCIsIFwiaW5zY3JpY2FvRXN0YWR1YWxcIl07XG4gICAgcHVibGljIG9yaWdlbU1lcmNhZG9yaWFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgb3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBvcmlnZW1NZXJjYWRvcmlhU2VhcmNoR3JpZERhdGE6IFBlc3NvYUVuZGVyZWNvW107XG4gICAgcHVibGljIG9yaWdlbU1lcmNhZG9yaWFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHB1YmxpYyBwcm9kdXRvTG9va3VwU3VnZ2VzdGlvbnM6IFByb2R1dG9bXTtcbiAgICBwdWJsaWMgcHJvZHV0b0xvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIiwgXCJ0aXBvXCJdO1xuICAgIHB1YmxpYyBwcm9kdXRvQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJjb21wcmFkb1wiLCBcImRlc2NyaWNhb1wiLCBcInByb2R1dG9NaXN0b1wiLCBcInNpdHVhY2FvXCIsIFwidGlwb1wiXTtcbiAgICBwdWJsaWMgcHJvZHV0b0xvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gICAgcHVibGljIHByb2R1dG9TZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBwcm9kdXRvU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIHByb2R1dG9TZWFyY2hHcmlkRGF0YTogUHJvZHV0b1tdO1xuICAgIHB1YmxpYyBwcm9kdXRvU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgYWdlbmRhTG9va3VwU3VnZ2VzdGlvbnM6IEFnZW5kYVtdO1xuICAgIHB1YmxpYyBhZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJkZXNjcmljYW9cIl07XG4gICAgcHVibGljIGFnZW5kYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBhZ2VuZGFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHB1YmxpYyBhZ2VuZGFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBhZ2VuZGFTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgYWdlbmRhU2VhcmNoR3JpZERhdGE6IEFnZW5kYVtdO1xuICAgIHB1YmxpYyBhZ2VuZGFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHB1YmxpYyBkZXJpdmFjYW9Mb29rdXBTdWdnZXN0aW9uczogRGVyaXZhY2FvW107XG4gICAgcHVibGljIGRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgcHVibGljIGRlcml2YWNhb0FkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyBkZXJpdmFjYW9Mb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHB1YmxpYyBkZXJpdmFjYW9TZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBkZXJpdmFjYW9TZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZGVyaXZhY2FvU2VhcmNoR3JpZERhdGE6IERlcml2YWNhb1tdO1xuICAgIHB1YmxpYyBkZXJpdmFjYW9TZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zOiBUcmFuc3BvcnRhZG9yYVtdO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJwZXNzb2Eubm9tZVwiLCBcInBlc3NvYS5jcGZDbnBqXCJdO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwicGVzc29hLm5vbWVcIiwgXCJwZXNzb2EuY3BmQ25walwiXTtcbiAgICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZERhdGE6IFRyYW5zcG9ydGFkb3JhW107XG4gICAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgdHJhbnNnZW5pYUxvb2t1cFN1Z2dlc3Rpb25zOiBUcmFuc2dlbmlhW107XG4gICAgcHVibGljIHRyYW5zZ2VuaWFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHB1YmxpYyB0cmFuc2dlbmlhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIiwgXCJmYW1pbGlhXCIsIFwidGlwb1BhcnRpY2lwYW50ZVwiLCBcInNpdHVhY2FvXCJdO1xuICAgIHB1YmxpYyB0cmFuc2dlbmlhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBwdWJsaWMgdHJhbnNnZW5pYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIHRyYW5zZ2VuaWFTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgdHJhbnNnZW5pYVNlYXJjaEdyaWREYXRhOiBUcmFuc2dlbmlhW107XG4gICAgcHVibGljIHRyYW5zZ2VuaWFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHB1YmxpYyBkaXNhYmxlQnV0dG9uU2F2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBkaXNhYmxlT3JkZXJzQnV0dG9uczogYm9vbGVhbiA9IHRydWU7XG4gICAgcHVibGljIGNyZWF0ZWRCeUVycDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyB0b3RhbEVpeG9zQ29udHJhdGFkb3M6IG51bWJlciA9IDA7XG4gICAgcHVibGljIHRvdGFsRWl4b3NDb21wb3NpY2FvOiBudW1iZXIgPSAwO1xuXG4gICAgcHVibGljIHRpcG9zTm90YTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogVGlwb05vdGFGaXNjYWwgfVtdID0gW1xuICAgICAgICB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50aXBvX25vdGFfZmlzY2FsX2VtcHJlc2FfanVyaWRpY2FcIiksIHZhbHVlOiBUaXBvTm90YUZpc2NhbC5FTVBSRVNBX0pVUklESUNBIH0sXG4gICAgICAgIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRpcG9fbm90YV9maXNjYWxfcHJvZHV0b3JfcnVyYWxcIiksIHZhbHVlOiBUaXBvTm90YUZpc2NhbC5QUk9EVVRPUl9SVVJBTCB9LFxuICAgIF07XG5cbiAgICBwdWJsaWMgc2F2ZUFuZEluaXRCdXR0b246IGFueTtcblxuICAgIEBJbnB1dCgpIHByaXZhdGUgYWdlbmRhOiBBZ2VuZGE7XG5cbiAgICBAVmlld0NoaWxkKFwiY3VzdG9tVGVtcGxhdGVcIilcbiAgICBwdWJsaWMgY3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKFwiY3VzdG9tRm9ybUZpZWxkc1wiKVxuICAgIHB1YmxpYyBjdXN0b21Gb3JtRmllbGRzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHVibGljIGNoYXZlTm90YUZpc2NhbDogc3RyaW5nO1xuICAgIHB1YmxpYyBlcnJvQ2hhdmVOb3RhID0gZmFsc2U7XG4gICAgcHVibGljIGVycm9Gb3JuZWNlZG9yZXMgPSBmYWxzZTtcbiAgICBwdWJsaWMgZXJyb0Zvcm5lY2Vkb3Jlc05vdGFEdXBsaWNhZGE6IHN0cmluZyA9IG51bGw7XG5cbiAgICBwdWJsaWMgbm90YXNUb2tlbnM6IElUb2tlbltdID0gW107XG4gICAgcHVibGljIGZvcm5lY2Vkb3JOb3Rhc1Rva2VuczogSVRva2VuW10gPSBbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvck5vdGFzID0gW107XG5cbiAgICBwdWJsaWMgY29udHJhdG9TZWxlY2lvbmFkbzogYW55ID0gbnVsbDtcblxuICAgIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIGZvcm1DYXJyZWdhZG86IGFueTtcblxuICAgIHByaXZhdGUgZXJwUHJvY2Vzc0RhdGE6IEVycFByb2Nlc3NEYXRhO1xuICAgIHByaXZhdGUgZW5hYmxlUmV2YWxpZGF0aW9uOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBjb250cmF0b3M6IGFueTtcblxuICAgIHByaXZhdGUgY2FycmVnYW5kb0VycEZpbGlhbCA9IHRydWU7XG4gICAgcHJpdmF0ZSBjYXJyZWdhbmRvRXJwUm91dGVEYXRhID0gdHJ1ZTtcbiAgICBwcml2YXRlIGNhcnJlZ2FuZG9FcnBSZWNlYmltZW50byA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWNlYmltZW50b1NlcnZpY2U6IFJlY2ViaW1lbnRvQ29udHJhdG9TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGhvdGtleXNTZXJ2aWNlOiBIb3RrZXlzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBmaWVsZEN1c3RvbWl6YXRpb246IEZpZWxkQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZm9jdXNTZXJ2aWNlOiBGb2N1c1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmlsaWFsU2VydmljZTogRmlsaWFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc3BvcnRhZG9yYVNlcnZpY2U6IFRyYW5zcG9ydGFkb3JhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwZXNzb2FFbmRlcmVjb1NlcnZpY2U6IFBlc3NvYUVuZGVyZWNvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250cmF0b0NvbXByYVNlcnZpY2U6IENvbnRyYXRvQ29tcHJhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwZXNzb2FTZXJ2aWNlOiBQZXNzb2FTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHByb2R1dG9TZXJ2aWNlOiBQcm9kdXRvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkZXJpdmFjYW9TZXJ2aWNlOiBEZXJpdmFjYW9TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlY2ViaW1lbnRvQ2hlZ2FkYU92ZXJyaWRlOiBSZWNlYmltZW50b0NoZWdhZGFWZWljdWxvT3ZlcnJpZGUsXG4gICAgICAgIHByaXZhdGUgbm90YVZhbGlkYXRvclNlcnZpY2U6IE5vdGFWYWxpZGF0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zZ2VuaWFTZXJ2aWNlOiBUcmFuc2dlbmlhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFnZW5kYVNlcnZpY2U6IEFnZW5kYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZXJwUHJvY2Vzc1NlcnZpY2U6IEVycFByb2Nlc3NTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVycEZvcm1Db25maWdTZXJ2aWNlOiBFcnBGb3JtQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2ZXJpZmljYU5vdGFGaXNjYWw6IFZlcmlmaWNhTm90YWZpc2NhbCxcbiAgICAgICAgcHJpdmF0ZSBoYXNDaGFuZ2VTZXJ2aWNlOiBIYXNDaGFuZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkRm9ybUZpZWxkOiBCdWlsZEZvcm1GaWVsZCxcbiAgICApIHsgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwKCk7XG4gICAgICAgIHRoaXMuaXRlbUZvcm1Hcm91cCA9IHRoaXMuZ2V0SXRlbUZvcm0oKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIilcbiAgICAgICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uRmlsaWFsVmFsdWVDaGFuZ2UpO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIilcbiAgICAgICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcml2YWNhbyA9IHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS52YWx1ZSBhcyBEZXJpdmFjYW87XG4gICAgICAgICAgICAgICAgICAgIGlmICghIWRlcml2YWNhbyAmJiBkZXJpdmFjYW8ucHJvZHV0by5pZCA9PT0gdmFsdWUuaWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZGVyaXZhY2FvXCIpLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKHZhbHVlID0+IHRoaXMuZGVyaXZhY2FvU2VydmljZS5saXN0KHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyUXVlcnk6IGBwcm9kdXRvLmlkIGVxICcke3ZhbHVlLmlkfScgYW5kIHNpdHVhY2FvIGVxICdBVElWTydgLFxuICAgICAgICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiAxXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuc2V0VmFsdWUoY29udGVudHNbMF0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJvdXRlLmRhdGEucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHRoaXMub25Sb3V0ZURhdGFDaGFuZ2UoZGF0YSkpO1xuXG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoeyBhZ2VuZGEgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGFnZW5kYSA9PSAnbmV3Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVzY2FyRmlsaWFsKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UmVjZWJpbWVudG8oYWdlbmRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICAgICAgLmdldCgndHJhbnNwb3J0YWRvcmEnKVxuICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUodGhpcy5vbkNoYW5nZVJldmFsaWRhdGlvbik7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICAgICAgLmdldCgndHJhbnNnZW5pYScpXG4gICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAuZ2V0KCdmb3JuZWNlZG9yZXMnKVxuICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUodGhpcy5vbkNoYW5nZVJldmFsaWRhdGlvbik7XG5cbiAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpO1xuXG4gICAgICAgIHRoaXMuZm9ybmVjZWRvclNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0Rm9ybmVjZWRvclNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRGb3JuZWNlZG9yU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0T3JpZ2VtTWVyY2Fkb3JpYUZpZWxkcygpO1xuICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRPcmlnZW1NZXJjYWRvcmlhR3JpZEZpZWxkcygpO1xuXG4gICAgICAgIHRoaXMucHJvZHV0b1NlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0UHJvZHV0b1NlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLnByb2R1dG9TZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRQcm9kdXRvU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgICAgIHRoaXMuYWdlbmRhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRBZ2VuZGFTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5hZ2VuZGFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRBZ2VuZGFTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5kZXJpdmFjYW9TZWFyY2hGaWVsZHMgPSB0aGlzLmdldERlcml2YWNhb1NlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLmRlcml2YWNhb1NlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldERlcml2YWNhb1NlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy50cmFuc2dlbmlhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRUcmFuc2dlbmlhU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMudHJhbnNnZW5pYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFRyYW5zZ2VuaWFTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5zZXRIb3RrZXlzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLmV4dGVybmFsVGVuYW50KSB7XG4gICAgICAgICAgICB0aGlzLnNldFRyYW5zcG9ydGFkb3JhKHRoaXMuYWdlbmRhLmV4dGVybmFsVGVuYW50LmNucGopO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b3RhbEVpeG9zQ29tcG9zaWNhbyA9IHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLnZlaWN1bG8gPyB0aGlzLmFnZW5kYS52ZWljdWxvLmVpeG9zIHx8IDAgOiAwO1xuXG4gICAgICAgIGNvbnN0IHN0YXR1c0FnZW5kYSA9IFtcIkFHVUFSREFORE9fQ09ORklSTUFDQU9fU09MSUNJVEFOVEVcIiwgXCJBR0VOREFET1wiLCBcIkFHVUFSREFORE9fQ09ORklSTUFDQU9cIiwgXCJSRUpFSVRBRE9fUE9SX1ZBTElEQUNBT1wiXTtcbiAgICAgICAgaWYgKHRoaXMuYWdlbmRhICYmICFzdGF0dXNBZ2VuZGEuaW5jbHVkZXModGhpcy5hZ2VuZGEuc3RhdHVzKSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uU2F2ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lcnBQcm9jZXNzRGF0YSA9IG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmVycEZvcm1Db25maWdTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lbmFibGVSZXZhbGlkYXRpb24gPSBtZXNzYWdlKTtcblxuICAgICAgICB0aGlzLnZlcmlmaWNhU2VUZW1BbHRlcmFjYW8oKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3Byb2R1dG8nKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhVHJhbnNnZW5pYSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdmb3JuZWNlZG9yZXMnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhVHJhbnNnZW5pYSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZlcmlmaWNhU2VUZW1BbHRlcmFjYW8oKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUNhcnJlZ2Fkbykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2UodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlUmV2YWxpZGF0aW9uID0gKF8pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZXJwUHJvY2Vzc0RhdGEgJiYgdGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmJ1aWxkZXJFcnBQcm9jZXNzRGF0YSh0aGlzLmVycFByb2Nlc3NEYXRhLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmNoYW5nZURhdGEodGhpcy5lcnBQcm9jZXNzRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhVHJhbnNnZW5pYSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJwQ2FycmVnYWRvKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyYW5zZ2VuaWEgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc2dlbmlhXCIpLnZhbHVlO1xuICAgICAgICBjb25zdCBwcm9kdXRvID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKS52YWx1ZTtcbiAgICAgICAgY29uc3QgZmFtaWxpYVByb2R1dG8gPSB0aGlzLmdldEZhbWlsaWFQcm9kdXRvKCk7XG5cbiAgICAgICAgaWYoIXByb2R1dG8gfHwgIXRyYW5zZ2VuaWEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCF0aGlzLnZhbGlkYUZhbWlsaWFQcm9kdXRvQ29ycmVzcG9uZGVGYW1pbGlhVHJhbmdlbmlhKHRyYW5zZ2VuaWEsIGZhbWlsaWFQcm9kdXRvKSkge1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbVRyYW5zZ2VuaWFJbnZhbGlkYSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGFGb3JuZWNlZG9yQ29ycmVzcG9uZGVUaXBvUGF0aWNpcGFudGVEYVRyYW5zZ2VuaWEodHJhbnNnZW5pYSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlcnBDYXJyZWdhZG8oKXtcbiAgICAgICAgaWYgKCB0aGlzLmNhcnJlZ2FuZG9FcnBGaWxpYWwgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggdGhpcy5jYXJyZWdhbmRvRXJwUm91dGVEYXRhICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMuY2FycmVnYW5kb0VycFJlY2ViaW1lbnRvICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZW5zYWdlbVRyYW5zZ2VuaWFJbnZhbGlkYSgpe1xuICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXCJlcnJvclwiLCBcInltcy5pbnRlZ3JhdGlvbi5tZW5zYWdlbV9lcnJvX3RpdHVsb19pbmZvcm1hcl90cmFuc2dlbmlhXCIsIFwieW1zLmludGVncmF0aW9uLm1lbnNhZ2VtX2Vycm9fY29udGV1dG9faW5mb3JtYXJfdHJhbnNnZW5pYVwiKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNnZW5pYVwiKS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhRmFtaWxpYVByb2R1dG9Db3JyZXNwb25kZUZhbWlsaWFUcmFuZ2VuaWEodHJhbnNnZW5pYTogYW55LCBmYW1pbGlhUHJvZHV0bzogYW55KSB7XG4gICAgICAgIGlmKGZhbWlsaWFQcm9kdXRvICE9PSBudWxsICYmIHRyYW5zZ2VuaWEuZmFtaWxpYSA9PT0gZmFtaWxpYVByb2R1dG8pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYUZvcm5lY2Vkb3JDb3JyZXNwb25kZVRpcG9QYXRpY2lwYW50ZURhVHJhbnNnZW5pYSh0cmFuc2dlbmlhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdGlwb1BhcnRpY2lwYW50ZUZvcm5lY2Vkb3JlcyA9IHRoaXMuZ2V0VGlwb1RyYW5zZ2VuaWEoKTtcbiAgICAgICAgY29uc3QgZm9ybmVjZWRvcmVzID0gKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpO1xuXG4gICAgICAgIGlmIChmb3JuZWNlZG9yZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGZvcm5lY2Vkb3JFc3RhVmF6aW8gPSB0cnVlO1xuICAgICAgICAgICAgZm9ybmVjZWRvcmVzLmNvbnRyb2xzLmZvckVhY2goZm9ybSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybmVjZWRvckVzdGFWYXppbyA9IGZvcm0udmFsdWUuZm9ybmVjZWRvciA9PT0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoZm9ybmVjZWRvckVzdGFWYXppbykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZih0aXBvUGFydGljaXBhbnRlRm9ybmVjZWRvcmVzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW5zYWdlbVRyYW5zZ2VuaWFJbnZhbGlkYSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGlwb1BhcnRpY2lwYW50ZUZvcm5lY2Vkb3JlcyAhPT0gdHJhbnNnZW5pYS50aXBvUGFydGljaXBhbnRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW5zYWdlbVRyYW5zZ2VuaWFJbnZhbGlkYSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYodGlwb1BhcnRpY2lwYW50ZUZvcm5lY2Vkb3JlcyA9PT0gdHJhbnNnZW5pYS50aXBvUGFydGljaXBhbnRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgaW5wdXRMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbnB1dCA9IEFycmF5LmZyb20oaW5wdXRMaXN0KS5maW5kKChmOiBhbnkpID0+ICFmLmRpc2FibGVkKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSW5wdXQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5yZWNlYmltZW50b0NoZWdhZGFPdmVycmlkZS5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5pdCcpO1xuICAgICAgICB0aGlzLmNyZWF0ZWRCeUVycERpc2FibGVGb3JtKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yZWNlYmltZW50b0NoZWdhZGFPdmVycmlkZS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlZEJ5RXJwRGlzYWJsZUZvcm0oKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU9yZGVyc0J1dHRvbnMgPSB0aGlzLmFnZW5kYS5jcmVhdGVkQnlFcnA7XG4gICAgICAgIGlmICh0aGlzLmlzTmV3KCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpbGlhbCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdwcm9kdXRvJykuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2Rlcml2YWNhbycpLmVuYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCd0cmFuc3BvcnRhZG9yYScpLmVuYWJsZSgpO1xuICAgICAgICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZvckVhY2goZm9ybSA9PiBmb3JtLmdldChcImZvcm5lY2Vkb3JcIikuZW5hYmxlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS5jcmVhdGVkQnlFcnApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnZmlsaWFsJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdwcm9kdXRvJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdkZXJpdmFjYW8nKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVGb3JuZWNlZG9yZXMoKTtcblxuICAgICAgICAgICAgaWYgKCEhdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNwb3J0YWRvcmFcIikudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3RyYW5zcG9ydGFkb3JhJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVGb3JuZWNlZG9yZXMoKSB7ICAgICAgICBcbiAgICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZvckVhY2goZm9ybSA9PiBmb3JtLmdldChcImZvcm5lY2Vkb3JcIikuZGlzYWJsZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0SG90a2V5cygpIHtcbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K3hcIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmV4Y2x1aXIpIHRoaXMub25EZWxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtzXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc05ldygpIHx8IHRoaXMucGVybWlzc2lvbnMuZWRpdGFyKSB0aGlzLm9uU2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K2NcIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJsdXJDaGF2ZU5vdGFGaXNjYWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnZlcmlmaWNhTm90YUZpc2NhbC52ZXJpZmljYVNlTm90YUZpc2NhbEVzdGFEdXBsaWNhZGEodGhpcy5jaGF2ZU5vdGFGaXNjYWwsIHRoaXMuY29udHJhdG9zLCB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2VucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlTm90YUVycm9yKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jaGF2ZU5vdGFGaXNjYWw7XG4gICAgICAgIGlmICghIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUJ1c2NhbmRvTm90YSgpO1xuICAgICAgICAgICAgdGhpcy5ub3RhVmFsaWRhdG9yU2VydmljZS5wZXNxdWlzYXJEb2N1bWVudG9WYWxpZGFOb3RhRW1Vc28oe1xuICAgICAgICAgICAgICAgIGZpbGlhbElkOiAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlICYmIHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZS5pZCkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgICBjaGF2ZURvY3VtZW50bzogdmFsdWUudHJpbSgpXG4gICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB0aGlzLmFkZE5vdmFOb3RhKHJlc3BvbnNlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE5vdmFOb3RhKHJlc3BvbnNlOiBQZXNxdWlzYXJEb2N1bWVudG9SZXNwb25zZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChyZXNwb25zZS5kb2N1bWVudG9zIHx8IFtdKS5sZW5ndGggPyByZXNwb25zZS5kb2N1bWVudG9zWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgaXRlbVByb2R1dG8gPSB2YWx1ZS5pdGVuc1swXSB8fCB7IHByb2R1dG86IHVuZGVmaW5lZCwgZGVyaXZhY2FvOiB1bmRlZmluZWQgfSBhcyBhbnk7XG4gICAgICAgIGNvbnN0IHByb2R1dG8gPSBQcm9kdXRvLmZyb21EdG8oaXRlbVByb2R1dG8ucHJvZHV0byk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlICYmICEhaXRlbVByb2R1dG8ucHJvZHV0bykge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKS5zZXRWYWx1ZShwcm9kdXRvKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5zZXRWYWx1ZShEZXJpdmFjYW8uZnJvbUR0byhpdGVtUHJvZHV0by5kZXJpdmFjYW8pKTtcbiAgICAgICAgfSBlbHNlIGlmICghIWl0ZW1Qcm9kdXRvLnByb2R1dG8gJiYgIXRoaXMudmFsaWRhdGVQcm9kdXRvKHByb2R1dG8pKSB7XG4gICAgICAgICAgICB0aGlzLmFkZE5vdGFFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICBcbiAgICAgICAgY29uc3QgZm9ybmVjZWRvciA9IFBlc3NvYS5mcm9tRHRvKHZhbHVlLmZvcm5lY2Vkb3IpO1xuICAgICAgICBjb25zdCBvcmlnZW1NZXJjYWRvcmlhID0gUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZS5vcmlnZW1NZXJjYWRvcmlhKTtcblxuICAgICAgICBjb25zdCBmb3JuZWNlZG9yRm9ybSA9IHRoaXMuZ2V0Rm9ybmVjZWRvcmVzRm9ybSgpLmNvbnRyb2xzLmZpbmQoKHsgdmFsdWUgfSkgPT4gdmFsdWUuZm9ybmVjZWRvci5pZCA9PT0gZm9ybmVjZWRvci5pZCkgYXMgRm9ybUdyb3VwO1xuICAgICAgICBjb25zdCBmb3JuZWNlZG9yT2ZHcm91cCA9IHRoaXMudmFsaWRhckNucGpGb3JuZWNlZG9yKGZvcm5lY2Vkb3IuY3BmQ25waik7XG5cbiAgICAgICAgaWYgKGZvcm5lY2Vkb3JPZkdyb3VwKSB7XG4gICAgICAgICAgICBpZiAoIWZvcm5lY2Vkb3JGb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGb3JuZWNlZG9yKHsgZm9ybmVjZWRvciwgb3JpZ2VtTWVyY2Fkb3JpYSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvck5vdGFzVG9rZW4odmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFmb3JuZWNlZG9yRm9ybSkge1xuICAgICAgICAgICAgdGhpcy5hZGRGb3JuZWNlZG9yKHsgZm9ybmVjZWRvciwgb3JpZ2VtTWVyY2Fkb3JpYSB9KTtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvck5vdGFzVG9rZW4odmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsaWRhUmV0b3Jub1Blc3F1aXNhRG9jdW1lbnRvcyhyZXNwb25zZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGFSZXRvcm5vUGVzcXVpc2FEb2N1bWVudG9zKHJlc3BvbnNlOiBQZXNxdWlzYXJEb2N1bWVudG9SZXNwb25zZSkgeyAgICAgICAgXG4gICAgICAgIGxldCBkdXBsaWNhdGVGb3JuZWNlZG9yZXMgPSB0aGlzLnZlcmlmaWNhTm90YUZpc2NhbC5maW5kRHVwbGljYXRlRm9ybmVjZWRvcmVzKHJlc3BvbnNlKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZUZvcm5lY2Vkb3JlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvRm9ybmVjZWRvcmVzTm90YUR1cGxpY2FkYSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uZHVwbGljYXRlX3N1cHBsaWVyXCIpICsgZHVwbGljYXRlRm9ybmVjZWRvcmVzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGb3JuZWNlZG9yTm90YXNUb2tlbih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzVG9rZW5zLnB1c2goeyBpZDogdGhpcy5jaGF2ZU5vdGFGaXNjYWwsIGxhYmVsOiB2YWx1ZS5udW1lcm8gfSk7XG5cbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXMucHVzaCh7XG4gICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IHRoaXMuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgc2VyaWVOb3RhRmlzY2FsOiB2YWx1ZS5zZXJpZSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiB2YWx1ZS5zZXJpZUxlZ2FsLFxuICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogdmFsdWUubnVtZXJvLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYXZlTm90YUZpc2NhbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTmV3KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuZm9ybUdyb3VwLnZhbHVlLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVTdWdnZXN0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZS5mb3JuZWNlZG9yKSB7XG4gICAgICAgICAgICB2YWx1ZS5mb3JuZWNlZG9yLmxhYmVsID0gdGhpcy5nZXRTdWdnZXN0aW9uVmFsdWUoXG4gICAgICAgICAgICAgICAgW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJub21lXCIsIFwic2l0dWFjYW9cIl0sXG4gICAgICAgICAgICAgICAgXCJmb3JuZWNlZG9yXCIsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmZvcm5lY2Vkb3IubGFiZWwudHJpbSgpID09PSB0aGlzLmZvcm5lY2Vkb3JMb29rdXBTZXBhcmF0b3IudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLmZvcm5lY2Vkb3IubGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUucHJvZHV0bykge1xuICAgICAgICAgICAgdmFsdWUucHJvZHV0by5sYWJlbCA9IHRoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlKFxuICAgICAgICAgICAgICAgIFtcImlkXCIsIFwiY29kaWdvXCIsIFwiY29tcHJhZG9cIiwgXCJkZXNjcmljYW9cIiwgXCJwcm9kdXRvTWlzdG9cIiwgXCJzaXR1YWNhb1wiLCBcInRpcG9cIl0sXG4gICAgICAgICAgICAgICAgXCJwcm9kdXRvXCIsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdXRvTG9va3VwU2VwYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHZhbHVlLnByb2R1dG8ubGFiZWwudHJpbSgpID09PSB0aGlzLnByb2R1dG9Mb29rdXBTZXBhcmF0b3IudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLnByb2R1dG8ubGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUuYWdlbmRhKSB7XG4gICAgICAgICAgICB2YWx1ZS5hZ2VuZGEubGFiZWwgPSB0aGlzLmdldFN1Z2dlc3Rpb25WYWx1ZShbXCJpZFwiLCBcImRlc2NyaWNhb1wiXSwgXCJhZ2VuZGFcIiwgdmFsdWUsIHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5hZ2VuZGEubGFiZWwudHJpbSgpID09PSB0aGlzLmFnZW5kYUxvb2t1cFNlcGFyYXRvci50cmltKCkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUuYWdlbmRhLmxhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmRlcml2YWNhbykge1xuICAgICAgICAgICAgdmFsdWUuZGVyaXZhY2FvLmxhYmVsID0gdGhpcy5nZXRTdWdnZXN0aW9uVmFsdWUoXG4gICAgICAgICAgICAgICAgW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl0sXG4gICAgICAgICAgICAgICAgXCJkZXJpdmFjYW9cIixcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5kZXJpdmFjYW8ubGFiZWwudHJpbSgpID09PSB0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvci50cmltKCkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUuZGVyaXZhY2FvLmxhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN1Z2dlc3Rpb25WYWx1ZShkaXNwbGF5RmllbGRzOiBzdHJpbmdbXSwgb3duZXJFbnRpdHk6IHN0cmluZywgdmFsdWU6IGFueSwgc2VwYXJhdG9yOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgIC5tYXAoZmllbGQgPT4gdGhpcy5nZXRQcm9wKHZhbHVlLCBgJHtvd25lckVudGl0eX0uJHtmaWVsZH1gKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYzogYW55LCB2YWw6IGFueSkgPT4gYCR7YWNjfSR7c2VwYXJhdG9yfSR7dmFsfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvdXRlRGF0YUNoYW5nZShkYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW5jeVN5bWJvbCwgdGhvdXNhbmRzU2VwYXJhdG9yLCBkZWNpbWFsU2VwYXJhdG9yIH0gPSBkYXRhLmxvY2FsZUNvbmZpZy5udW1iZXI7XG5cbiAgICAgICAgdGhpcy5sb2NhbGVDb25maWcgPSBkYXRhLmxvY2FsZUNvbmZpZztcbiAgICAgICAgdGhpcy5jdXJyZW5jeUxvY2FsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhbGlnbjogXCJsZWZ0XCIsXG4gICAgICAgICAgICBwcmVmaXg6IGN1cnJlbmN5U3ltYm9sLFxuICAgICAgICAgICAgdGhvdXNhbmRzOiB0aG91c2FuZHNTZXBhcmF0b3IsXG4gICAgICAgICAgICBkZWNpbWFsOiBkZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gZGF0YS5hbGxQZXJtaXNzaW9ucy5yZWNlYmltZW50bztcbiAgICAgICAgdGhpcy5hbGxQZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnM7XG4gICAgICAgIGlmIChkYXRhLmVudGl0eSkge1xuICAgICAgICAgICAgY29uc3QgY2FuRWRpdCA9IHRoaXMucGVybWlzc2lvbnMuZWRpdGFyO1xuICAgICAgICAgICAgaWYgKCFjYW5FZGl0KSB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZTogYW55ID0gUmVjZWJpbWVudG9Db250cmF0by5mcm9tRHRvKGRhdGEuZW50aXR5KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3VnZ2VzdGlvbnModmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKG5ldyBSZWNlYmltZW50b0NvbnRyYXRvKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYXJyZWdhbmRvRXJwUm91dGVEYXRhID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2FuY2VsKCkge1xuICAgICAgICB0aGlzLmdvQmFjaygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlbmRGaWxlKGZpbGVzVG9EZWxldGU6IGFueSwgZmlsZXNUb0NvbW1pdDogYW55W10pIHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXM6IGFueVtdID0gW107XG5cbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5pc0VtcHR5KGZpbGVzVG9EZWxldGUpKSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlcy5wdXNoKHRoaXMuZmllbGRDdXN0b21pemF0aW9uLmRlbGV0ZUZpbGVzKGZpbGVzVG9EZWxldGUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZmllbGRDdXN0b21pemF0aW9uLmlzRW1wdHkoZmlsZXNUb0NvbW1pdCkpIHtcbiAgICAgICAgICAgIG9ic2VydmFibGVzLnB1c2godGhpcy5maWVsZEN1c3RvbWl6YXRpb24uY29tbWl0RmlsZXMoZmlsZXNUb0NvbW1pdCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5pc0VtcHR5KG9ic2VydmFibGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlKHN0YXJ0PzogYm9vbGVhbikge1xuICAgICAgICBcbiAgICAgICAgaWYgKCh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvRm9ybmVjZWRvcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtR3JvdXApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5pc05ldygpICB8fCAhdGhpcy5lbmFibGVSZXZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNhdmVBbmRJbml0KHN0YXJ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmJ1aWxkZXJFcnBQcm9jZXNzRGF0YVZhbGlkYU5vdGFOb0NvbnRyYXRvKHRoaXMuZXJwUHJvY2Vzc0RhdGEsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICAgICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhRXJwKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAgICAgICAuY2hlY2FyUmV2YWxpZGFjYW8odGhpcy5lcnBQcm9jZXNzRGF0YSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVxdWVyUmV2YWxpZGFjYW8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHVhbGl6YUFnZW5kYVBhcmFSZWplaXRhZG9Qb3JWYWxpZGFjYW8oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFuZEluaXQoc3RhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXR1YWxpemFBZ2VuZGFQYXJhUmVqZWl0YWRvUG9yVmFsaWRhY2FvKCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uYWdlbmRhX3JldmFsaWRhY2FvX3RpdGxlXCIpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5wYXRpby5hZ2VuZGFfcmV2YWxpZGFjYW9fbWVzc2FnZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5kYS5zdGF0dXMgPSBTdGF0dXNBZ2VuZGEuUkVKRUlUQURPX1BPUl9WQUxJREFDQU87XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGEubW90b3Jpc3RhID0ge2lkOiB0aGlzLmVycFByb2Nlc3NEYXRhLm1vdG9yaXN0YUlkfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5kYS52ZWljdWxvID0ge2lkOiB0aGlzLmVycFByb2Nlc3NEYXRhLnZlaWN1bG9JZH07XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5hdHVhbGl6YXJBZ2VuZGEodGhpcy5hZ2VuZGEpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKF8pID0+IHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL2NoZWdhZGEtdmVpY3Vsb1wiXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWplY3Q6ICgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVBbmRJbml0KHN0YXJ0OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImlkXCIpLnNldFZhbHVlKHZhbHVlLmlkIHx8IG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICYmIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbi5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3VjY2Vzc01lc3NhZ2UoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIHNldmVyaXR5OiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJzYXZlZF9tZXNzYWdlX3RpdGxlXCIpLFxuICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwic2F2ZWRfbWVzc2FnZV9jb250ZW50XCIpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EZWxldGUoKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlbGV0ZV9jb25maXJtYXRpb25fbWVzc2FnZVwiKSxcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVsZXRlX2NvbmZpcm1hdGlvbl90aXRsZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmdldERlbGV0ZU9ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VHJhbnNwb3J0YWRvcmEodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNucGogPSB2YWx1ZS5yZXBsYWNlKCcuJywgJycpLnJlcGxhY2UoJy8nLCAnJykucmVwbGFjZSgnLScsICcnKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gYHBlc3NvYS5jcGZDbnBqIGVxICcke2NucGp9J2A7XG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZS5saXN0KHsgZmlsdGVyUXVlcnksIHBhZ2U6IDAsIHNpemU6IDEwIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBjb250ZW50c1swXS5jb2RpZ28gPyBjb250ZW50c1swXS5jb2RpZ28udG9TdHJpbmcoKSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBjb250ZW50c1swXS5kZXNjcmljYW8gPyBjb250ZW50c1swXS5kZXNjcmljYW8udG9TdHJpbmcoKSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXNjcmlwdGlvbi50cmltKCkgJiYgIWNvZGUudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbMF0ubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5bXMuZXJwLmRlcml2YWNhb19zZW1fZGVzY3JpY2FvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzWzBdLmxhYmVsID0gYCR7Y29kZX0gLSAke2Rlc2NyaXB0aW9ufWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3RyYW5zcG9ydGFkb3JhJykuc2V0VmFsdWUoY29udGVudHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJvcChvYmo6IGFueSwgcGF0aDogYW55KSB7XG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKHJlc3VsdDogYW55LCBwcm9wOiBhbnkpID0+IChyZXN1bHRbcHJvcF0gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiByZXN1bHRbcHJvcF0pLCBvYmopO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWNlYmltZW50byhhZ2VuZGFJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucmVjZWJpbWVudG9TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7XG4gICAgICAgICAgICAgICAgZmlsdGVyUXVlcnk6IGBhZ2VuZGEuaWQgZXEgJyR7YWdlbmRhSWR9J2AsXG4gICAgICAgICAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgICAgICAgICBwYWdlOiAwXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29udGVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVzY2FyRmlsaWFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb250cmF0YWRvcyA9IGNvbnRlbnRzWzBdLmVpeG9zIHx8IDA7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbEVpeG9zQ29tcG9zaWNhbyA9IGNvbnRlbnRzWzBdLmFnZW5kYSAmJiBjb250ZW50c1swXS5hZ2VuZGEudmVpY3Vsb1xuICAgICAgICAgICAgICAgICAgICA/IGNvbnRlbnRzWzBdLmFnZW5kYS52ZWljdWxvLmVpeG9zIHx8IDAgOiAwO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWJpbWVudG8gPSBSZWNlYmltZW50b0NvbnRyYXRvLmZyb21EdG8oY29udGVudHNbMF0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUocmVjZWJpbWVudG8pO1xuXG4gICAgICAgICAgICAgICAgcmVjZWJpbWVudG8uZm9ybmVjZWRvcmVzLmZvckVhY2goZm9ybmVjZWRvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEZvcm5lY2Vkb3JGb3JtKGZvcm5lY2Vkb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3Jlc0Zvcm0oKS5wdXNoKGZvcm0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3IuY29udHJhdG9zLmZvckVhY2goY29udHJhdG8gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJhdG9Gb3JtID0gdGhpcy5nZXRDb250cmF0b0Zvcm0oY29udHJhdG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cmF0b3MoZm9ybSkucHVzaChjb250cmF0b0Zvcm0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cmF0by5pdGVucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Gb3JtID0gdGhpcy5nZXRJdGVtRm9ybShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEl0ZW5zQ29udHJhdG8oY29udHJhdG9Gb3JtKS5wdXNoKGl0ZW1Gb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cmF0by5ub3Rhcy5mb3JFYWNoKG5vdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdGFGb3JtID0gdGhpcy5nZXROb3RhRm9ybShub3RhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE5vdGFzKGNvbnRyYXRvRm9ybSkucHVzaChub3RhRm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVkQnlFcnBEaXNhYmxlRm9ybSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvRXJwUmVjZWJpbWVudG8gPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZpbGlhbExvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5JbnRlZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfSwgeyBjbnBqczogdGhpcy5hZ2VuZGEucGxhbnRhLmNucGosIHBhZ2luYTogeyBsaW1pdDogMTAsIG9mZnNldDogMCB9IH0gYXMgUGVzcXVpc2FyRmlsaWFpc0lucHV0KTtcblxuICAgICAgICB0aGlzLmZpbGlhbFNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0RmlsaWFpcyhmaWx0ZXJJbnB1dClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB0aGlzLmZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5maWxpYWlzLm1hcChGaWxpYWwuZnJvbUR0bykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZpbGlhbFNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydDogU29ydE1ldGFbXSA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IHNvcnRGb3JtYXR0ZWQgPSAhIShzb3J0IHx8IFtdKS5sZW5ndGggJiYgeyBjYW1wbzogc29ydFswXS5maWVsZCwgb3JkZW5hY2FvOiBzb3J0WzBdLm9yZGVyID4gMCA/ICdBc2MnIDogJ0Rlc2MnIH07XG4gICAgICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5yZWR1Y2UoKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IGAke3ZhbHVlfWAucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfSwgeyBjbnBqczogdGhpcy5hZ2VuZGEucGxhbnRhLmNucGosIHBhZ2luYTogeyBsaW1pdDogcm93cywgb2Zmc2V0OiBwYWdlLCBsaXN0YU9yZGVuYWNhbzogc29ydEZvcm1hdHRlZCA/IFt7IC4uLihzb3J0Rm9ybWF0dGVkKSB9XSA6IG51bGwgfSB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dCk7XG5cbiAgICAgICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdEZpbGlhaXMoZmlsdGVySW5wdXQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsaWFsU2VhcmNoR3JpZERhdGEgPSBsaXN0LmZpbGlhaXMubWFwKEZpbGlhbC5mcm9tRHRvKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QucXRkVG90YWxSZWdpc3Ryb3M7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Gb3JuZWNlZG9yTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLmZvcm5lY2Vkb3JMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pKTtcblxuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBmaWx0ZXJRdWVyeSA9IGAoJHtmaWx0ZXJRdWVyeX0pJHshIWZpbHRlclF1ZXJ5ID8gJyBhbmQgJyA6IFwiXCJ9c2l0dWFjYW8gZXEgJ0FUSVZPJyBhbmQgZm9ybmVjZWRvciBlcSB0cnVlYDtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5mb3JuZWNlZG9yQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy5mb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRm9ybmVjZWRvclNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Rm9ybmVjZWRvclNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkuY29uY2F0KGAkeyEhZmlsdGVyUXVlcnkgPyAnIGFuZCAnIDogXCJcIn1zaXR1YWNhbyBlcSAnQVRJVk8nIGFuZCBmb3JuZWNlZG9yIGVxIHRydWVgKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5mb3JuZWNlZG9yQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy5mb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvclNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICBwcml2YXRlIG1vbnRhUXVlcnlPcmlnZW1NZXJjYWRvcmlhKHBlc3NvYUlkOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICBgc2l0dWFjYW8gZXEgJ0FUSVZPJyBhbmQgb3JpZ2VtIGVxICd0cnVlJyBhbmQgcGVzc29hLmlkIGVxICcke3Blc3NvYUlkfSdgO1xuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgb25PcmlnZW1NZXJjYWRvcmlhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nLCBmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pKTtcblxuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldE9yaWdlbU1lcmNhZG9yaWFGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBmaWx0ZXJRdWVyeSA9IGAoJHtmaWx0ZXJRdWVyeX0pJHshIWZpbHRlclF1ZXJ5ID8gJyBhbmQgJyA6ICcnfWA7XG4gICAgICAgIGZpbHRlclF1ZXJ5ICs9IHRoaXMubW9udGFRdWVyeU9yaWdlbU1lcmNhZG9yaWEoZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZS5pZCk7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMucGVzc29hRW5kZXJlY29TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uT3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSwgZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0T3JpZ2VtTWVyY2Fkb3JpYUZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuICAgICAgICAgICAgXG4gICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkuY29uY2F0KGAkeyEhZmlsdGVyUXVlcnkgPyAnIGFuZCAnIDogJyd9YCk7XG4gICAgICAgIGZpbHRlclF1ZXJ5ICs9IHRoaXMubW9udGFRdWVyeU9yaWdlbU1lcmNhZG9yaWEoZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZS5pZCk7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMucGVzc29hRW5kZXJlY29TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWNQYWdpbmEoZmlyc3Q6IG51bWJlciwgcm93czogbnVtYmVyLCBzb3J0OiBhbnkpIHtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgb3JkZXJCeSA9IHNvcnQgJiYgc29ydC5sZW5ndGggXG4gICAgICAgICAgICA/IHNvcnQubWFwKChzOiBhbnkpID0+ICh7IGNhbXBvOiBzLmZpZWxkLCBvcmRlbmFjYW86IHMub3JkZXIgPT09IDEgPyAnQXNjJyA6ICdEZXNjJyB9KSkgXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb2Zmc2V0OiBwYWdlLFxuICAgICAgICAgICAgbGltaXQ6IHJvd3MsXG4gICAgICAgICAgICBsaXN0YU9yZGVuYWNhbzogb3JkZXJCeVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJvZHV0b0xvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWxpYWwgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWU7XG4gICAgICAgIGNvbnN0IHRpcG9BZ2VuZGFtZW50byA9IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50bztcblxuICAgICAgICB0aGlzLnByb2R1dG9TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdFByb2R1dG9zUmVjZWJpbWVudG8oe1xuICAgICAgICAgICAgICAgIHBlc3F1aXNhOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBlbXByZXNhSWQ6ICEhZmlsaWFsID8gZmlsaWFsLmVtcHJlc2EuaWQgOiBudWxsLFxuICAgICAgICAgICAgICAgIGZpbGlhbElkOiAhIWZpbGlhbCA/IGZpbGlhbC5pZCA6IG51bGwsXG4gICAgICAgICAgICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6ICEhdGlwb0FnZW5kYW1lbnRvID8gdGlwb0FnZW5kYW1lbnRvLmlkIDogbnVsbFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdXRvTG9va3VwU3VnZ2VzdGlvbnMgPSAobGlzdC5wcm9kdXRvcyB8fCBbXSkubWFwKChwcm9kdXRvOiBhbnkpID0+IFByb2R1dG8uZnJvbUR0byhwcm9kdXRvKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qcm9kdXRvU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBzb3J0OiBTb3J0TWV0YVtdID0gbXVsdGlTb3J0TWV0YTtcbiAgICAgICAgY29uc3Qgc29ydEZvcm1hdHRlZCA9ICEhKHNvcnQgfHwgW10pLmxlbmd0aCAmJiB7IGNhbXBvOiBzb3J0WzBdLmZpZWxkLCBvcmRlbmFjYW86IHNvcnRbMF0ub3JkZXIgPiAwID8gJ0FzYycgOiAnRGVzYycgfTtcbiAgICAgICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldFByb2R1dG9TZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5yZWR1Y2UoKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IGAke3ZhbHVlfWAucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfSwgeyBwYWdpbmE6IHsgbGltaXQ6IHJvd3MsIG9mZnNldDogcGFnZSwgbGlzdGFPcmRlbmFjYW86IHNvcnRGb3JtYXR0ZWQgPyBbeyAuLi4oc29ydEZvcm1hdHRlZCkgfV0gOiBudWxsIH0gfSBhcyBQcm9kdXRvUmVjZWJpbWVudG9QYXJhbXMpO1xuXG4gICAgICAgIGNvbnN0IGZpbGlhbCA9IHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZTtcbiAgICAgICAgY29uc3QgdGlwb0FnZW5kYW1lbnRvID0gdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvO1xuXG4gICAgICAgIHRoaXMucHJvZHV0b1NlcnZpY2VcbiAgICAgICAgICAgIC5saXN0UHJvZHV0b3NSZWNlYmltZW50byh7XG4gICAgICAgICAgICAgICAgLi4uZmlsdGVySW5wdXQsXG4gICAgICAgICAgICAgICAgZW1wcmVzYUlkOiAhIWZpbGlhbCA/IGZpbGlhbC5lbXByZXNhLmlkIDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaWxpYWxJZDogISFmaWxpYWwgPyBmaWxpYWwuaWQgOiBudWxsLFxuICAgICAgICAgICAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOiAhIXRpcG9BZ2VuZGFtZW50byA/IHRpcG9BZ2VuZGFtZW50by5pZCA6IG51bGxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdXRvU2VhcmNoVG90YWxSZWNvcmRzID0gcmVzLnF0ZFRvdGFsUmVnaXN0cm9zO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHV0b1NlYXJjaEdyaWREYXRhID0gKHJlcy5wcm9kdXRvcyB8fCBbXSkubWFwKChwcm9kdXRvOiBhbnkpID0+IFByb2R1dG8uZnJvbUR0byhwcm9kdXRvKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EZXJpdmFjYW9Mb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ydCA9IHRoaXMuZGVyaXZhY2FvTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7IGZpZWxkLCBvcmRlcjogMSB9KSk7XG5cbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldERlcml2YWNhb1NlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuZGVyaXZhY2FvQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5kZXJpdmFjYW9TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5kZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbih0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRGVyaXZhY2FvU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldERlcml2YWNhb1NlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuZGVyaXZhY2FvQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5kZXJpdmFjYW9TZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5kZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbih0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVHJhbnNwb3J0YWRvcmFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgb25Mb29rdXBSZXF1ZXN0KHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMsIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yLCB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZSwgdmFsdWUpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UcmFuc3BvcnRhZG9yYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuXG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbih0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVHJhbnNnZW5pYUxvb2t1cFJlcXVlc3QodmFsdWU6IGFueSkge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy5nZXRUcmFuc2dlbmlhU2VhcmNoRmllbGRzKCksXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2dlbmlhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZ2VuaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2dlbmlhTG9va3VwU2VwYXJhdG9yLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNnZW5pYVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5nZXJhRmlsdHJvVHJhbnNnZW5pYSgpKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHRoaXMudHJhbnNnZW5pYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cyk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVHJhbnNnZW5pYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0VHJhbnNnZW5pYVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBjb25zdCAgZmlsdHJvVHJhbnNnZW5pYSA9IHRoaXMuZ2VyYUZpbHRyb1RyYW5zZ2VuaWEoKTtcbiAgICAgICAgaWYgKGZpbHRyb1RyYW5zZ2VuaWEgJiYgZmlsdHJvVHJhbnNnZW5pYS50cmltKCkpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgPyBgKCR7ZmlsdGVyUXVlcnl9KSBhbmQgJHtmaWx0cm9UcmFuc2dlbmlhfWAgOiBmaWx0cm9UcmFuc2dlbmlhO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMudHJhbnNnZW5pYUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMudHJhbnNnZW5pYUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMudHJhbnNnZW5pYVNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zZ2VuaWFMb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKHRoaXMudHJhbnNnZW5pYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNnZW5pYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZ2VuaWFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRm9ybmVjZWRvcihkYXRhOiBhbnkgPSB7fSkge1xuICAgICAgICB0aGlzLmVycm9Gb3JuZWNlZG9yZXMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0Rm9ybmVjZWRvckZvcm0oZGF0YSk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlRm9ybmVjZWRvcihmb3JtKTtcbiAgICAgICAgdGhpcy5nZXRGb3JuZWNlZG9yZXNGb3JtKCkucHVzaChmb3JtKTtcbiAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZvcm5lY2Vkb3IoY29udHJvbDogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX2Zvcm5lY2Vkb3JfaGVhZGVyXCIpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX2Zvcm5lY2Vkb3JfbWVzc2FnZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGb3JuZWNlZG9yZXNGb3JtKCkuY29udHJvbHMuaW5kZXhPZihjb250cm9sKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3Jlc0Zvcm0oKS5yZW1vdmVBdChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JuZWNlZG9yZXNGb3JtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29udHJhdG8oZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2VcbiAgICAgICAgICAgIC5vcGVuKENvbnRyYXRvRm9ybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIC4uLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgICAgICBoZWFkZXI6ICdBZGljaW9uYXIgQ29udHJhdG8nLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYWdlbmRhOiB0aGlzLmFnZW5kYSxcbiAgICAgICAgICAgICAgICAgICAgZmlsaWFsOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb2R1dG86IHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3I6IGZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyYXRvczogZm9ybmVjZWRvckZvcm0uZ2V0KFwiY29udHJhdG9zXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub25DbG9zZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgY29udHJhdG8gfTogYW55KSA9PiB0aGlzLm9uQ29udHJhdG9TYXZlZChjb250cmF0bywgZm9ybmVjZWRvckZvcm0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlckNvbnRyYXRvKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIGNvbnRyYXRvRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX2NvbnRyYXRvX2hlYWRlclwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9jb250cmF0b19tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSAoZm9ybmVjZWRvckZvcm0uZ2V0KFwiY29udHJhdG9zXCIpIGFzIEZvcm1BcnJheSkuY29udHJvbHMuaW5kZXhPZihjb250cmF0b0Zvcm0pO1xuICAgICAgICAgICAgICAgIChmb3JuZWNlZG9yRm9ybS5nZXQoXCJjb250cmF0b3NcIikgYXMgRm9ybUFycmF5KS5yZW1vdmVBdChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250cmF0b3MoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbnRyYXRvcyA9IGZvcm5lY2Vkb3JGb3JtLmdldChcImNvbnRyYXRvc1wiKVxuICAgICAgICByZXR1cm4gdGhpcy5jb250cmF0b3MgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGROb3RhKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKE5vdGFGb3JtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmFkaWNpb25hcl9ub3RhXCIpLFxuICAgICAgICAgICAgLi4uZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3I6IGZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIHByb2R1dG86IHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWUsXG4gICAgICAgICAgICAgICAgZmlsaWFsOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUsXG4gICAgICAgICAgICAgICAgZm9ybmVjZWRvck5vdGFzVG9rZW5zOiB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2VucyxcbiAgICAgICAgICAgICAgICBjb250cmF0b3M6IHRoaXMuY29udHJhdG9zLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub25DbG9zZVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpKVxuICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMub25Ob3RhU2F2ZWQodmFsdWUsIGZvcm1Hcm91cCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVyTm90YShmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBjb250cmF0b0Zvcm06IEZvcm1Hcm91cCwgbm90YUZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9ub3RhX2hlYWRlclwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9ub3RhX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cmF0b0lkID0gY29udHJhdG9Gb3JtW1widmFsdWVcIl1bXCJjb250cmF0b1wiXVtcImlkXCJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvckZvcm0sIGNvbnRyYXRvSWQpLmNvbnRyb2xzLmluZGV4T2Yobm90YUZvcm0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtLCBjb250cmF0b0lkKS5yZW1vdmVBdChpbmRleCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBub3RhID0gbm90YUZvcm1bXCJ2YWx1ZVwiXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG5vdGEuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogbm90YS5udW1lcm9Ob3RhRmlzY2FsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNoYXZlTm90YUZpc2NhbDogbm90YS5jaGF2ZU5vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogbm90YS5zZXJpZU5vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBub3RhLnNlcmllTGVnYWxOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBudW1lcm9Ob3RhRmlzY2FsOiBub3RhLm51bWVyb05vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROb3Rhcyhjb250cmF0b0Zvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICByZXR1cm4gY29udHJhdG9Gb3JtW1wiY29udHJvbHNcIl1bXCJub3Rhc1wiXSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZW5zQ29udHJhdG8oY29udHJhdG9Gb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgcmV0dXJuIGNvbnRyYXRvRm9ybS5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dCdXR0b25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuYWdlbmRhKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTmV3KCkgfHwgW1xuICAgICAgICAgICAgU3RhdHVzQWdlbmRhLkFHRU5EQURPLFxuICAgICAgICAgICAgU3RhdHVzQWdlbmRhLkFHVUFSREFORE9fQ09ORklSTUFDQU8sXG4gICAgICAgICAgICBTdGF0dXNBZ2VuZGEuQUdVQVJEQU5ET19DT05GSVJNQUNBT19TT0xJQ0lUQU5URSxcbiAgICAgICAgICAgIFN0YXR1c0FnZW5kYS5SRUpFSVRBRE9fUE9SX1ZBTElEQUNBT1xuICAgICAgICBdLmluY2x1ZGVzKHRoaXMuYWdlbmRhLnN0YXR1cyBhcyBTdGF0dXNBZ2VuZGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlQWRpY2lvbmFyTm90YSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJhdG9TZWxlY2lvbmFkbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGlwb1RyYW5zZ2VuaWEoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGxldCB0aXBvUGFydGljaXBhbnRlVHJhbnNnZW5pYUdlcmFsID0gbnVsbDsgICAgICAgIFxuICAgICAgICBjb25zdCByZWNlYmltZW50b0R0byA9IFJlY2ViaW1lbnRvQ29udHJhdG8udG9EdG8odGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSk7ICAgICAgICBcbiAgICAgICAgcmVjZWJpbWVudG9EdG8uZm9ybmVjZWRvcmVzLmZvckVhY2goY3VycmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC5mb3JuZWNlZG9yICE9IG51bGwgJiYgY3VycmVudC5mb3JuZWNlZG9yLnRpcG9QYXJ0aWNpcGFudGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRpcG9QYXJ0aWNpcGFudGVUcmFuc2dlbmlhR2VyYWwgPSBjdXJyZW50LmZvcm5lY2Vkb3IudGlwb1BhcnRpY2lwYW50ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aXBvUGFydGljaXBhbnRlVHJhbnNnZW5pYUdlcmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmFtaWxpYVByb2R1dG8oKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcHJvZHV0byA9IHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWU7XG5cbiAgICAgICAgaWYocHJvZHV0byAmJiBwcm9kdXRvLmZhbWlsaWEgJiYgcHJvZHV0by5mYW1pbGlhLmNvZGlnbyl7XG4gICAgICAgICAgICByZXR1cm4gcHJvZHV0by5mYW1pbGlhLmNvZGlnbztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHByb2R1dG8gJiYgcHJvZHV0by5mYW1pbGlhKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvZHV0by5mYW1pbGlhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXJhRmlsdHJvVHJhbnNnZW5pYSgpeyAgICAgICAgXG4gICAgICAgIGxldCBidWlsZFN0cmluZyA9IGBlbXByZXNhLmlkIGVxICcke3RoaXMuZm9ybUdyb3VwLmdldCgnZmlsaWFsJykudmFsdWUuZW1wcmVzYS5pZH0nYDtcblxuICAgICAgICBidWlsZFN0cmluZyArPSBgYW5kIHNpdHVhY2FvIGVxICcke1NpdHVhY2FvLkFUSVZPfSdgO1xuXG4gICAgICAgIGNvbnN0IGZhbWlsaWEgPSB0aGlzLmdldEZhbWlsaWFQcm9kdXRvKCk7XG4gICAgICAgIGlmIChmYW1pbGlhKSB7XG4gICAgICAgICAgICBidWlsZFN0cmluZyArPSBgIGFuZCBgO1xuICAgICAgICAgICAgYnVpbGRTdHJpbmcgKz0gYGZhbWlsaWEgZXEgJyR7ZmFtaWxpYX0nYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpcG9UcmFuc2dlbmlhID0gdGhpcy5nZXRUaXBvVHJhbnNnZW5pYSgpO1xuICAgICAgICBpZiAodGlwb1RyYW5zZ2VuaWEpIHtcbiAgICAgICAgICAgIGJ1aWxkU3RyaW5nICs9IGAgYW5kIGA7XG4gICAgICAgICAgICBidWlsZFN0cmluZyArPSBgdGlwb1BhcnRpY2lwYW50ZSBlcSAnJHt0aXBvVHJhbnNnZW5pYX0nYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBidWlsZFN0cmluZztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vdGFGb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGNoYXZlTm90YUZpc2NhbDogW2RhdGEuY2hhdmVOb3RhRmlzY2FsXSxcbiAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogW2RhdGEuc2VyaWVOb3RhRmlzY2FsXSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBbZGF0YS5zZXJpZUxlZ2FsTm90YUZpc2NhbF0sXG4gICAgICAgICAgICBudW1lcm9Ob3RhRmlzY2FsOiBbZGF0YS5udW1lcm9Ob3RhRmlzY2FsXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250cmF0b0Zvcm0oZGF0YTogYW55ID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgY29udHJhdG86IFtkYXRhLmNvbnRyYXRvLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGl0ZW5zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcbiAgICAgICAgICAgIG5vdGFzOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEl0ZW1Gb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGl0ZW06IFtkYXRhLml0ZW0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgcXVhbnRpZGFkZTogW2RhdGEucXVhbnRpZGFkZV1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yRm9ybShkYXRhOiBhbnkgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBmb3JuZWNlZG9yOiBbZGF0YS5mb3JuZWNlZG9yLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIG9yaWdlbU1lcmNhZG9yaWE6IFtkYXRhLm9yaWdlbU1lcmNhZG9yaWEsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgICAgICAgIHRpcG9Ob3RhRmlzY2FsOiBbZGF0YS50aXBvTm90YUZpc2NhbCB8fCBUaXBvTm90YUZpc2NhbC5FTVBSRVNBX0pVUklESUNBLCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGNvbnRyYXRvczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybUdyb3VwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBpZDogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBmaWxpYWw6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHByb2R1dG86IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcbiAgICAgICAgICAgIGRlcml2YWNhbzogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICB0cmFuc3BvcnRhZG9yYTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgYWdlbmRhOiBbeyB2YWx1ZTogdGhpcy5hZ2VuZGEsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKV0sXG4gICAgICAgICAgICB0cmFuc2dlbmlhOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGZvcm5lY2Vkb3JlczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICAgICAgICBjcmVhdGVkQnk6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgY3JlYXRlZERhdGU6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkQnk6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkRGF0ZTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBjdXN0b206IFtdLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm5lY2Vkb3JCeUNvbnRyYXRvKGNvbnRyYXRvOiBDb250cmF0b0NvbXByYUR0bywgZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLnBlc3NvYVNlcnZpY2UubGlzdCh7IHNpemU6IDEsIHBhZ2U6IDAsIGZpbHRlclF1ZXJ5OiBgaWQgZXEgJyR7Y29udHJhdG8ucGVzc29hLmlkfSdgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBtYXAoKHsgY29udGVudHMgfSkgPT4gKGNvbnRlbnRzIHx8IFtdKS5sZW5ndGggJiYgY29udGVudHNbMF0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShwZXNzb2EgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikuc2V0VmFsdWUoUGVzc29hLmZyb21EdG8ocGVzc29hKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2R1dG9CeUNvbnRyYXRvKGNvbnRyYXRvOiBDb250cmF0b0NvbXByYUR0bykge1xuICAgICAgICB0aGlzLmNvbnRyYXRvQ29tcHJhU2VydmljZS5saXN0SXRlbnMoY29udHJhdG8uaWQsIHsgc2l6ZTogMSwgcGFnZTogMCwgZGlzcGxheUZpZWxkczogWydza3UuaWQnXSB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSByZXR1cm4gdGhpcy5wcm9kdXRvU2VydmljZS5saXN0KHsgc2l6ZTogMSwgcGFnZTogMCwgZmlsdGVyUXVlcnk6IGBpZCBlcSAnJHtjb250ZW50c1swXS5za3UuaWR9J2AgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoeyBjb250ZW50cyB9KSA9PiAoY29udGVudHMgfHwgW10pLmxlbmd0aCAmJiBjb250ZW50c1swXSksXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHkoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocHJvZHV0byA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKS5zZXRWYWx1ZShQcm9kdXRvLmZyb21EdG8ocHJvZHV0bykpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNvbnRyYXRvU2F2ZWQoY29udHJhdG86IGFueSwgZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0UHJvZHV0b0J5Q29udHJhdG8oY29udHJhdG8uY29udHJhdG8pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3JCeUNvbnRyYXRvKGNvbnRyYXRvLmNvbnRyYXRvLCBmb3JuZWNlZG9yRm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250cmF0b0Zvcm0gPSB0aGlzLmdldENvbnRyYXRvRm9ybShjb250cmF0byk7XG4gICAgICAgIChjb250cmF0by5pdGVucyB8fCBbXSkuZm9yRWFjaCgoaXRlbTogYW55KSA9PiAoY29udHJhdG9Gb3JtLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucHVzaCh0aGlzLmdldEl0ZW1Gb3JtKGl0ZW0pKSk7XG5cbiAgICAgICAgdGhpcy5nZXRDb250cmF0b3MoZm9ybmVjZWRvckZvcm0pLnB1c2goY29udHJhdG9Gb3JtKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lbnNhZ2VtQ29udHJhdG9OYW9TZWxlY2lvbmFkbygpIHtcbiAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFwiZXJyb3JcIiwgXCJDb250cmF0byBuw6NvIHNlbGVjaW9uYWRvXCIsIFwiTmVuaHVtIGNvbnRyYXRvIGZvaSBzZWxlY2lvbmFkbyFcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk5vdGFTYXZlZCh2YWx1ZTogYW55LCBmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJhdG9TZWxlY2lvbmFkbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUNvbnRyYXRvTmFvU2VsZWNpb25hZG8oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsdWUuYWRkRm9ybmVjZWRvcikge1xuICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvckZvcm0sIHRoaXMuY29udHJhdG9TZWxlY2lvbmFkby5pZCk7XG4gICAgICAgICAgICBpZiAobm90YXNGb3JtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbm90YXNGb3JtLnB1c2godGhpcy5nZXROb3RhRm9ybSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhpc3RzRm9ybmVjZWRvciA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS5jb250cm9scy5maW5kKChmb3JtKSA9PiAoZm9ybS52YWx1ZS5mb3JuZWNlZG9yIHx8IHsgaWQ6IHVuZGVmaW5lZCB9KS5pZCA9PT0gdmFsdWUuZm9ybmVjZWRvci5pZCk7XG4gICAgICAgIGNvbnN0IHsgaW5mb05vdGEgfSA9IHZhbHVlO1xuICAgICAgICBjb25zdCBub3RhRm9ybSA9IHRoaXMuZ2V0Tm90YUZvcm0oeyBcbiAgICAgICAgICAgIGNoYXZlTm90YUZpc2NhbDogaW5mb05vdGEuY2hhdmUsXG4gICAgICAgICAgICBzZXJpZU5vdGFGaXNjYWw6IGluZm9Ob3RhLnNlcmllLFxuICAgICAgICAgICAgc2VyaWVMZWdhbE5vdGFGaXNjYWw6IGluZm9Ob3RhLnNlcmllTGVnYWwsXG4gICAgICAgICAgICBudW1lcm9Ob3RhRmlzY2FsOiBpbmZvTm90YS5udW1lcm8sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghIWV4aXN0c0Zvcm5lY2Vkb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGV4aXN0c0Zvcm5lY2Vkb3IsIHRoaXMuY29udHJhdG9TZWxlY2lvbmFkby5pZCk7XG4gICAgICAgICAgICBub3Rhc0Zvcm0ucHVzaChub3RhRm9ybSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUpIHtcbiAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikuc2V0VmFsdWUoUGVzc29hLmZyb21EdG8odmFsdWUuZm9ybmVjZWRvcikpO1xuICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JpZ2VtTWVyY2Fkb3JpYVwiKS5zZXRWYWx1ZShQZXNzb2FFbmRlcmVjby5mcm9tRHRvKHZhbHVlLm9yaWdlbU1lcmNhZG9yaWEpKTtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tQ29udHJhdG9zKGZvcm5lY2Vkb3JGb3JtLCB0aGlzLmNvbnRyYXRvU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICAgICAgbm90YXNGb3JtLnB1c2gobm90YUZvcm0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZm9ybmVjZWRvciA9IHRoaXMuYWRkRm9ybmVjZWRvcih7IGZvcm5lY2Vkb3I6IFBlc3NvYS5mcm9tRHRvKHZhbHVlLmZvcm5lY2Vkb3IpLCBvcmlnZW1NZXJjYWRvcmlhOiBQZXNzb2FFbmRlcmVjby5mcm9tRHRvKHZhbHVlLm9yaWdlbU1lcmNhZG9yaWEpIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvciwgdGhpcy5jb250cmF0b1NlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXROb3Rhc0Zyb21Db250cmF0b3MoZm9ybmVjZWRvckZvcm06IEFic3RyYWN0Q29udHJvbCwgY29udHJhdG9JZDogYW55KSB7XG4gICAgICAgIGxldCBjb250cmF0b3NGb3JtU2VsZWNpb25hZG8gPSBudWxsO1xuICAgICAgICBjb25zdCBjb250cmF0b3NGb3JtID0gZm9ybmVjZWRvckZvcm1bXCJjb250cm9sc1wiXVtcImNvbnRyYXRvc1wiXVtcImNvbnRyb2xzXCJdO1xuXG4gICAgICAgIGZvciAobGV0IGNvbnRyYXRvRm9ybSBvZiBjb250cmF0b3NGb3JtKSB7XG4gICAgICAgICAgICBpZiAoY29udHJhdG9Gb3JtW1wiY29udHJvbHNcIl1bXCJjb250cmF0b1wiXVtcInZhbHVlXCJdLmlkID09PSBjb250cmF0b0lkKSB7XG4gICAgICAgICAgICAgICAgY29udHJhdG9zRm9ybVNlbGVjaW9uYWRvID0gY29udHJhdG9Gb3JtW1wiY29udHJvbHNcIl1bXCJub3Rhc1wiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJhdG9zRm9ybVNlbGVjaW9uYWRvIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRm9ybmVjZWRvck5vdGFzVG9rZW5FbUNvbnRyYXRvKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIHRva2VuOiBJVG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJhdG9TZWxlY2lvbmFkbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUNvbnRyYXRvTmFvU2VsZWNpb25hZG8oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vdGFzID0gdGhpcy5mb3JuZWNlZG9yTm90YXMuZmlsdGVyKGZvcm5lY2Vkb3JOb3RhID0+IGZvcm5lY2Vkb3JOb3RhLmNoYXZlTm90YUZpc2NhbCA9PT0gdG9rZW4uaWQpO1xuICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbUNvbnRyYXRvcyhmb3JuZWNlZG9yRm9ybSwgdGhpcy5jb250cmF0b1NlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgaWYgKG5vdGFzRm9ybSAhPT0gbnVsbCAmJiBub3Rhc1swXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbm90YXNGb3JtLnB1c2godGhpcy5nZXROb3RhRm9ybShub3Rhc1swXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVGb3JuZWNlZG9yTm90YXNUb2tlbkRvQ29udHJhdG8odG9rZW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVGb3JuZWNlZG9yTm90YXNUb2tlbkRvQ29udHJhdG8odG9rZW46IElUb2tlbikge1xuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5zcGxpY2UodGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMuaW5kZXhPZih0b2tlbiksIDEpO1xuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3RhcyA9IHRoaXMuZm9ybmVjZWRvck5vdGFzLmZpbHRlcihmb3JuZWNlZG9yTm90YSA9PiBmb3JuZWNlZG9yTm90YS5jaGF2ZU5vdGFGaXNjYWwgIT09IHRva2VuLmlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZU5vdGFFcnJvcigpIHtcbiAgICAgICAgdGhpcy5lcnJvRm9ybmVjZWRvcmVzTm90YUR1cGxpY2FkYSA9IG51bGw7XG4gICAgICAgIHRoaXMuZXJyb0NoYXZlTm90YSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTm90YUVycm9yKCkge1xuICAgICAgICB0aGlzLmVycm9DaGF2ZU5vdGEgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVQcm9kdXRvKHByb2R1dG86IFByb2R1dG8pIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKTtcbiAgICAgICAgaWYgKHZhbHVlLmlkICE9PSBwcm9kdXRvLmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWxpYWxTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfY29kaWdvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9tZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfbm9tZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY29kaWdvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX25vbWVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjcGZDbnBqXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jcGZDbnBqXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm5lY2Vkb3JTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmlnZW1NZXJjYWRvcmlhRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5idWlsZEZvcm1GaWVsZC5idWlsZEZvckludGVnZXIoXCJjb2RpZ29cIiwgXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19jb2RpZ29cIiksXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRm9ybUZpZWxkLmJ1aWxkRm9yU3RyaW5nKFwiY25wakNwZlwiLCBcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2NucGpfY3BmXCIpLFxuICAgICAgICAgICAgdGhpcy5idWlsZEZvcm1GaWVsZC5idWlsZEZvclN0cmluZyhcImluc2NyaWNhb0VzdGFkdWFsXCIsIFwieW1zLmVycC5wZXNzb2FfZW5kZXJlY29faW5zY3JpY2FvX2VzdGFkdWFsXCIpLFxuICAgICAgICAgICAgdGhpcy5idWlsZEZvcm1GaWVsZC5idWlsZEZvclN0cmluZyhcImNlcFwiLCBcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2NlcFwiKSxcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGb3JtRmllbGQuYnVpbGRGb3JTdHJpbmcoXCJlbmRlcmVjb1wiLCBcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2VuZGVyZWNvXCIpLFxuICAgICAgICAgICAgdGhpcy5idWlsZEZvcm1GaWVsZC5idWlsZEZvclN0cmluZyhcIm51bWVyb1wiLCBcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX251bWVyb1wiKSxcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGb3JtRmllbGQuYnVpbGRGb3JTdHJpbmcoXCJiYWlycm9cIiwgXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19iYWlycm9cIiksXG4gICAgICAgIF07XG4gICAgfVxuICBcbiAgICBwcml2YXRlIGdldE9yaWdlbU1lcmNhZG9yaWFHcmlkRmllbGRzKCkge1xuICAgICAgICBjb25zdCBvcmlnZW1NZXJjYWRvcmlhRmllbGRzID0gdGhpcy5nZXRPcmlnZW1NZXJjYWRvcmlhRmllbGRzKCk7XG4gICAgICAgIG9yaWdlbU1lcmNhZG9yaWFGaWVsZHMucHVzaCggdGhpcy5idWlsZEZvcm1GaWVsZC5idWlsZEZvclN0cmluZyhcImVtcHJlc2EuZGVzY3JpY2FvXCIsIFwieW1zLmVycC5lbXByZXNhXCIpICk7XG4gICAgICAgIHJldHVybiBvcmlnZW1NZXJjYWRvcmlhRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvZHV0b1NlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnByb2R1dG9fY29kaWdvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnByb2R1dG9fZGVzY3JpY2FvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvZHV0b1NlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIGNvbnN0IHByb2R1dG9TZWFyY2hGaWVsZHMgPSB0aGlzLmdldFByb2R1dG9TZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgIHByb2R1dG9TZWFyY2hGaWVsZHMucHVzaChcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvQ29tcGxlbWVudGFyXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnByb2R1dG9fZGVzY3JpY2FvX2NvbXBsZW1lbnRhclwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHByb2R1dG9TZWFyY2hGaWVsZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBZ2VuZGFTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5hZ2VuZGFfZGVzY3JpY2FvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFnZW5kYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5hZ2VuZGFfZGVzY3JpY2FvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERlcml2YWNhb1NlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19jb2RpZ29cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZXJpdmFjYW9TZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2NvZGlnb1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fZGVzY3JpY2FvXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9kZXNjcmljYW9cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2EuY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlc3NvYS5jcGZDbnBqXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY25walwiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zZ2VuaWFTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zZ2VuaWFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNnZW5pYV9kZXNjcmljYW9cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNnZW5pYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zZ2VuaWFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNnZW5pYV9kZXNjcmljYW9cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ29CYWNrKCkge1xuICAgICAgICBjb25zdCBwcmV2aW91c1JvdXRlID0gXCIuLi9cIjtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3ByZXZpb3VzUm91dGVdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50IH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSBjb250cm9sLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyhjb250cm9sKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIGNvbnRyb2wuY29udHJvbHMuZm9yRWFjaChmb3JtID0+IHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm0gYXMgRm9ybUdyb3VwKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzRmlyc3RJbnZhbGlkSW5wdXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNhdmVPYnNlcnZhYmxlKCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHZhbHVlLmFnZW5kYSA9IHRoaXMuYWdlbmRhO1xuICAgICAgICBjb25zdCByZWNlYmltZW50b0R0byA9IFJlY2ViaW1lbnRvQ29udHJhdG8udG9EdG8odmFsdWUpO1xuXG4gICAgICAgIGxldCBmb3JuZWNlZG9yZXM6IGFueVtdID0gcmVjZWJpbWVudG9EdG8uZm9ybmVjZWRvcmVzO1xuICAgICAgICByZWNlYmltZW50b0R0by5mb3JuZWNlZG9yZXMuZm9yRWFjaChhbnRlcmlvciA9PiB7XG4gICAgICAgICAgICByZWNlYmltZW50b0R0by5mb3JuZWNlZG9yZXMuZm9yRWFjaChwb3N0ZXJpb3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbnRlcmlvci5mb3JuZWNlZG9yLmlkID09PSBwb3N0ZXJpb3IuZm9ybmVjZWRvci5pZCAmJlxuICAgICAgICAgICAgICAgICAgICBhbnRlcmlvci5vcmlnZW1NZXJjYWRvcmlhLmlkID09PSBwb3N0ZXJpb3Iub3JpZ2VtTWVyY2Fkb3JpYS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBwb3N0ZXJpb3IuY29udHJhdG9zLmZvckVhY2goKGNvbnRyYXRvOiBhbnkpID0+IGFudGVyaW9yLmNvbnRyYXRvcy5wdXNoKGNvbnRyYXRvKSk7XG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JlcyA9IGZvcm5lY2Vkb3Jlcy5zcGxpY2UoZm9ybmVjZWRvcmVzLmluZGV4T2YocG9zdGVyaW9yKSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZWNlYmltZW50b0R0by5mb3JuZWNlZG9yZXMgPSBmb3JuZWNlZG9yZXM7XG5cbiAgICAgICAgbGV0IG9ic2VydmFibGU6IGFueTtcblxuICAgICAgICBpZiAodGhpcy5pc05ldygpICYmICF2YWx1ZS5pZCkge1xuICAgICAgICAgICAgb2JzZXJ2YWJsZSA9IHRoaXMucmVjZWJpbWVudG9TZXJ2aWNlLmluc2VydChyZWNlYmltZW50b0R0byk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHZhbHVlLmlkO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZSA9IHRoaXMucmVjZWJpbWVudG9TZXJ2aWNlLnVwZGF0ZShpZCwgcmVjZWJpbWVudG9EdG8pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZWxldGVPYnNlcnZhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWNlYmltZW50b1NlcnZpY2UuZGVsZXRlKCcnKS5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXCJzdWNjZXNzXCIsIFwieW1zLmVycC5kZWxldGVkX21lc3NhZ2VfdGl0bGVcIiwgXCJ5bXMuZXJwLmRlbGV0ZWRfbWVzc2FnZV9jb250ZW50XCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ29CYWNrKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVWaXN1YWxpemF0aW9uKCkge1xuICAgICAgICBpZiAoIXVzZXJDYW5WaXN1YWxpemUodGhpcy5mb3JtR3JvdXAsIHRoaXMuYWxsUGVybWlzc2lvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXCJlcnJvclwiLCBcInltcy5lcnAuY2Fubm90X3Zpc3VhbGl6ZV9mb3JtX3N1bW1hcnlcIiwgXCJ5bXMuZXJwLmNhbm5vdF92aXN1YWxpemVfZm9ybV9kZXRhaWxcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE1lc3NhZ2Uoc2V2ZXJpdHk6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nLCBkZXRhaWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBzZXZlcml0eSxcbiAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoc3VtbWFyeSksXG4gICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZGV0YWlsKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBvbkZpbGlhbFZhbHVlQ2hhbmdlID0gKGZpbGlhbDogRmlsaWFsKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU9yZGVyc0J1dHRvbnMgPSAhZmlsaWFsO1xuICAgICAgICBpZiAoIWZpbGlhbCAmJiB0aGlzLmlzTmV3KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNnZW5pYVwiKS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNnZW5pYVwiKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmNhcnJlZ2FuZG9FcnBGaWxpYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuZW5hYmxlKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zZ2VuaWFcIikuZW5hYmxlKCk7XG4gICAgICAgIHRoaXMuY2FycmVnYW5kb0VycEZpbGlhbCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVzY2FyRmlsaWFsKCkge1xuICAgICAgICBjb25zdCBwbGFudGEgPSB0aGlzLmFnZW5kYS5wbGFudGEgfHwgeyBjbnBqOiBbXSB9O1xuICAgICAgICBpZiAocGxhbnRhLmNucGoubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7XG4gICAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgICAgICBzaXplOiAxLFxuICAgICAgICAgICAgICAgIGZpbHRlclF1ZXJ5OiBgcGVzc29hLmNwZkNucGogZXEgJyR7cGxhbnRhLmNucGpbMF19J2AsXG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkczogWycqJywgJ2VtcHJlc2Eubm9tZSddXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS5zZXRWYWx1ZShGaWxpYWwuZnJvbUR0byhjb250ZW50c1swXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maWd1cmVGb3JuZWNlZG9yKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKVxuICAgICAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgICAgICAgdGFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5laFBlc3NvYUp1cmlkaWNhKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLnNldFZhbHVlKFRpcG9Ob3RhRmlzY2FsLkVNUFJFU0FfSlVSSURJQ0EpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwidGlwb05vdGFGaXNjYWxcIikuc2V0VmFsdWUoVGlwb05vdGFGaXNjYWwuUFJPRFVUT1JfUlVSQUwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwidGlwb05vdGFGaXNjYWxcIikuc2V0VmFsdWUoVGlwb05vdGFGaXNjYWwuRU1QUkVTQV9KVVJJRElDQSk7XG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcInRpcG9Ob3RhRmlzY2FsXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zZ2VuaWFcIikuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc2dlbmlhXCIpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCh2YWx1ZSA9PiB0aGlzLnBlc3NvYUVuZGVyZWNvU2VydmljZS5saXN0KHsgc2l6ZTogMTAsIHBhZ2U6IDAsIGZpbHRlclF1ZXJ5OiBgc2l0dWFjYW8gZXEgJ0FUSVZPJyBhbmQgcGVzc29hLmlkIGVxICcke3ZhbHVlLmlkfSdgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zZ2VuaWFcIikuZW5hYmxlKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcIm9yaWdlbU1lcmNhZG9yaWFcIikuc2V0VmFsdWUoUGVzc29hRW5kZXJlY28uZnJvbUR0byhjb250ZW50c1swXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JpZ2VtTWVyY2Fkb3JpYVwiKS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJvcmlnZW1NZXJjYWRvcmlhXCIpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZWhQZXNzb2FKdXJpZGljYShwZXNzb2E6IFBlc3NvYSkge1xuICAgICAgICBjb25zdCBjcGZDbnBqID0gKHBlc3NvYS5jcGZDbnBqIHx8IFwiXCIpLnJlcGxhY2UoL1xcRCsvZywgXCJcIik7XG4gICAgICAgIHJldHVybiBjcGZDbnBqLmxlbmd0aCA+IDExO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVuc2FnZW1CdXNjYW5kb05vdGEoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIHNldmVyaXR5OiAnaW5mbycsXG4gICAgICAgICAgICBzdW1tYXJ5OiAnQnVzY2FuZG8gZGFkb3MgZGEgbm90YScsXG4gICAgICAgICAgICBkZXRhaWw6ICdBZ3VhcmRlLCBidXNjYW5kbyBkYWRvcyBkYSBub3RhJyxcbiAgICAgICAgICAgIGxpZmU6IDUwMDBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGFyQ25wakZvcm5lY2Vkb3IodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuZWhQZXNzb2FKdXJpZGljYSh7IGNwZkNucGo6IHZhbHVlIH0gYXMgUGVzc29hKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBmb3JuZWNlZG9yID0gKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZpbmQoKGZvcm0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKGZvcm0udmFsdWUuZm9ybmVjZWRvciB8fCB7IGNwZkNucGo6ICcnIH0pLmNwZkNucGogYXMgc3RyaW5nKS5zdWJzdHJpbmcoMCwgOCkgPT09IHZhbHVlLnN1YnN0cmluZygwLCA4KVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZvcm5lY2Vkb3I7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyYXRvSXRlbSB7XG4gICAgaXRlbTogQ29udHJhdG9Db21wcmFJdGVtO1xuICAgIHF1YW50aWRhZGU6IG51bWJlcjtcbn1cbiJdfQ==