@sunbird-cb/toc 0.0.19 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +3 -3
  2. package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +45 -13
  3. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +64 -9
  4. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +4 -1
  5. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +3 -3
  6. package/esm2022/lib/_services/widget-content.model.mjs +8 -1
  7. package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +67 -31
  8. package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +1 -1
  9. package/esm2022/lib/services/app-toc-v2.service.mjs +12 -5
  10. package/esm2022/lib/services/app-toc.service.mjs +5 -2
  11. package/fesm2022/sunbird-cb-toc.mjs +203 -60
  12. package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
  13. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts.map +1 -1
  14. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +8 -1
  15. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +1 -1
  16. package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts.map +1 -1
  17. package/lib/_services/widget-content.model.d.ts +6 -0
  18. package/lib/_services/widget-content.model.d.ts.map +1 -1
  19. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +2 -1
  20. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +1 -1
  21. package/lib/services/app-toc-v2.service.d.ts.map +1 -1
  22. package/lib/services/app-toc.service.d.ts.map +1 -1
  23. package/package.json +1 -1
@@ -348,7 +348,10 @@ export class AppTocService {
348
348
  // }
349
349
  break;
350
350
  case NsContent.EMimeTypes.PRACTICE_RESOURCE:
351
- if (content.primaryCategory === this.primaryCategory.PRACTICE_RESOURCE) {
351
+ if (content.contextCategory === NsContent.EAssessmentContextCategory.PRELIMINARY_ASSESSMENT) {
352
+ tocStructure['preEnrollmentAssessment'] += 1;
353
+ }
354
+ else if (content.primaryCategory === this.primaryCategory.PRACTICE_RESOURCE) {
352
355
  tocStructure.practiceTest += 1;
353
356
  }
354
357
  else if (content.primaryCategory === this.primaryCategory.FINAL_ASSESSMENT) {
@@ -1800,4 +1803,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1800
1803
  providedIn: 'root'
1801
1804
  }]
1802
1805
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ContentLanguageService }, { type: i3.ConfigurationsService }, { type: i4.WidgetContentService }]; } });
1803
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL3NlcnZpY2VzL2FwcC10b2Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFDLE9BQU8sRUFBRSxPQUFPLEVBQWMsS0FBSyxFQUFnQixlQUFlLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUVoRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFFM0UsT0FBTyxFQUFFLFFBQVEsRUFBYSxNQUFNLHlCQUF5QixDQUFBO0FBRTdELDJCQUEyQjtBQUMzQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7QUFFdEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTs7Ozs7O0FBRWhELHVDQUF1QztBQUN2QyxNQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUFBO0FBQzlDLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFBO0FBRXhDLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLFlBQVksRUFBRSxHQUFHLGFBQWEsaUNBQWlDO0lBQy9ELGVBQWUsRUFBRSxHQUFHLGlCQUFpQixrQkFBa0I7SUFDdkQsWUFBWSxFQUFFLEdBQUcsaUJBQWlCLGVBQWU7SUFDakQsaUJBQWlCLEVBQUUsdUNBQXVDO0lBQzFELGNBQWMsRUFBRSxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLFlBQVksU0FBUyxTQUFTO0lBQ3pGLG1CQUFtQixFQUFFLENBQUMsU0FBaUIsRUFBRSxPQUFlLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FDdkUsaURBQWlELFNBQVMs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QUNqRSxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRTtnQkFDUCxNQUFNO2dCQUNOLFFBQVE7Z0JBQ1IsT0FBTztnQkFDUCxXQUFXO2FBQ1o7U0FDRixDQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDeEMsQ0FBQzsrR0F2OERVLGFBQWE7bUhBQWIsYUFBYSxjQUZaLE1BQU07OzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBEYXRhIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgRU1QVFksIFN1YnNjcmlwdGlvbiwgQmVoYXZpb3JTdWJqZWN0LCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQubW9kZWwnXG5pbXBvcnQgeyBOc0NvbnRlbnRDb25zdGFudHMgfSBmcm9tICcuLi9fY29uc3RhbnRzL3dpZGdldC1jb250ZW50LmNvbnN0YW50cydcbmltcG9ydCB7IFdpZGdldENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vX3NlcnZpY2VzL3dpZGdldC1jb250ZW50LnNlcnZpY2UnXG5pbXBvcnQgeyBOc0FwcFRvYywgTnNDb2hvcnRzIH0gZnJvbSAnLi4vbW9kZWxzL2FwcC10b2MubW9kZWwnXG5pbXBvcnQgeyBURmV0Y2hTdGF0dXMsIENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBDb250ZW50TGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQHN1bmJpcmQtY2IvY29uc3VtcHRpb24nXG5pbXBvcnQgeyBtYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuLy8gVE9ETzogbW92ZSB0aGlzIGluIHNvbWUgY29tbW9uIHBsYWNlXG5jb25zdCBQUk9URUNURURfU0xBR19WOCA9ICcvYXBpcy9wcm90ZWN0ZWQvdjgnXG5jb25zdCBQUk9YWV9TTEFHX1Y4ID0gJy9hcGlzL3Byb3hpZXMvdjgnXG5cbmNvbnN0IEFQSV9FTkRfUE9JTlRTID0ge1xuICBCQVRDSF9DUkVBVEU6IGAke1BST1hZX1NMQUdfVjh9L2xlYXJuZXIvY291cnNlL3YxL2JhdGNoL2NyZWF0ZWAsXG4gIENPTlRFTlRfUEFSRU5UUzogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvcGFyZW50c2AsXG4gIENPTlRFTlRfTkVYVDogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvbmV4dGAsXG4gIENPTlRFTlRfSElTVE9SWVYyOiBgL2FwaXMvcHJveGllcy92OC9yZWFkL2NvbnRlbnQtcHJvZ3Jlc2AsXG4gIENPTlRFTlRfUEFSRU5UOiAoY29udGVudElkOiBzdHJpbmcpID0+IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50LyR7Y29udGVudElkfS9wYXJlbnRgLFxuICBDT05URU5UX0FVVEhfUEFSRU5UOiAoY29udGVudElkOiBzdHJpbmcsIHJvb3RPcmc6IHN0cmluZywgb3JnOiBzdHJpbmcpID0+XG4gICAgYC9hcGlzL2F1dGhBcGkvYWN0aW9uL2NvbnRlbnQvcGFyZW50L2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/cm9vdE9yZz0ke3Jvb3RPcmd9Jm9yZz0ke29yZ31gLFxuICBDT0hPUlRTOiAoY29ob3J0VHlwZTogTnNDb2hvcnRzLkVDb2hvcnRUeXBlcywgY29udGVudElkOiBzdHJpbmcpID0+XG4gICAgYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvaG9ydHMvJHtjb2hvcnRUeXBlfS8ke2NvbnRlbnRJZH1gLFxuICBFWFRFUk5BTF9DT05URU5UOiAoY29udGVudElkOiBzdHJpbmcpID0+XG4gICAgYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvZXh0ZXJuYWwtYWNjZXNzLyR7Y29udGVudElkfWAsXG4gIENPSE9SVFNfR1JPVVBfVVNFUjogKGdyb3VwSWQ6IG51bWJlcikgPT4gYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvaG9ydHMvJHtncm91cElkfWAsXG4gIFJFTEFURURfUkVTT1VSQ0U6IChjb250ZW50SWQ6IHN0cmluZywgY29udGVudFR5cGU6IHN0cmluZykgPT5cbiAgICBgJHtQUk9URUNURURfU0xBR19WOH0va2h1Yi9mZXRjaFJlbGF0ZWRSZXNvdXJjZXMvJHtjb250ZW50SWR9LyR7Y29udGVudFR5cGV9YCxcbiAgUE9TVF9BU1NFU1NNRU5UOiAoY29udGVudElkOiBzdHJpbmcpID0+XG4gICAgYCR7UFJPVEVDVEVEX1NMQUdfVjh9L3VzZXIvZXZhbHVhdGUvcG9zdC1hc3Nlc3NtZW50LyR7Y29udGVudElkfWAsXG4gIEdFVF9DT05URU5UOiAoY29udGVudElkOiBzdHJpbmcpID0+XG4gICAgYCR7UFJPWFlfU0xBR19WOH0vYWN0aW9uL2NvbnRlbnQvdjMvcmVhZC8ke2NvbnRlbnRJZH1gLFxuICBDRVJUX0RPV05MT0FEOiAoY2VydElkOiBhbnkpID0+IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb2hvcnRzL2NvdXJzZS9iYXRjaC9jZXJ0L2Rvd25sb2FkLyR7Y2VydElkfWAsXG4gIFNFUlZFUl9EQVRFOiAnYXBpcy9wdWJsaWMvdjgvc3lzdGVtRGF0ZScsXG4gIFNIQVJFX0NPTlRFTlQ6ICcvYXBpcy9wcm94aWVzL3Y4L3VzZXIvdjEvY29udGVudC9yZWNvbW1lbmQnLFxuICBHRVRfRk9STV9CWUlEOiAoZm9ybUlkOiBzdHJpbmcpID0+IGBhcGlzL3Byb3hpZXMvdjgvZm9ybXMvdjIvZ2V0Rm9ybUJ5SWQ/Zm9ybUlkPSR7Zm9ybUlkfWAsXG4gIC8vIFNVQk1JVF9GT1JNOiBgL2FwaXMvcHJveGllcy92OC9mb3Jtcy92MS9zYXZlRm9ybVN1Ym1pdGAsXG4gIFNVQk1JVF9GT1JNOiBgYXBpcy9wcm94aWVzL3Y4L2Zvcm1zL3YyL3NhdmVGb3JtU3VibWl0YCxcbiAgR0VUX0ZPUk1fQllJRF9QVUJMSUM6IChmb3JtSWQ6IHN0cmluZykgPT4gYGFwaXMvcHVibGljL3Y4L3B1YmxpYy9mb3Jtcy92Mi9nZXRGb3JtQnlJZD9mb3JtSWQ9JHtmb3JtSWR9YCxcbiAgU1VCTUlUX0ZPUk1fUFVCTElDOiBgYXBpcy9wdWJsaWMvdjgvcHVibGljL2Zvcm1zL3YyL3NhdmVGb3JtU3VibWl0YCxcbiAgLy8gZ2V0IGFuc3dlcnMgZm9yIGZvcm1cbiAgR0VUX0FQUExJQ0FUSU9OU19CWV9JRDogKGZvcm1JZDogc3RyaW5nLCBjb250ZXh0SWQ6IHN0cmluZykgPT4gYC9hcGlzL3Byb3hpZXMvdjgvZm9ybXMvdjIvZ2V0QXBwbGljYXRpb25zQnlJZD9mb3JtSWQ9JHtmb3JtSWR9JmNvbnRleHRJZD0ke2NvbnRleHRJZH1gLFxuICBBSV9SRVNPVVJDRV9WVFRfRklMRTogYCR7UFJPWFlfU0xBR19WOH0vY2hhdGJvdC92My90cmFuc2NvZGVyL3N0YXRzYCxcbiAgLy8gR0VUX0ZPUk1fQllJRDogKGZvcm1JZDogc3RyaW5nKSA9PiBgYXBpcy9wcm94aWVzL3Y4L2Zvcm1zL2dldEZvcm1CeUlkP2lkPSR7Zm9ybUlkfWAsXG4gIFBSRV9FTlJPTExNRU5UX1NUQVRFX1JFQUQ6IGAvYXBpcy9wcm94aWVzL3Y4L2NvbnRlbnQvdjIvc3RhdGUvcmVhZGAsXG4gIENSRUFURV9SRVNPVVJDRTogYGFwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9jcmVhdGVgLFxuICBSRUFEX1JFU09VUkNFOiBgYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2AsXG4gIFVQTE9BRF9GSUxFOiBgYXBpcy9wcm94aWVzL3Y4L3VwbG9hZC9hY3Rpb24vY29udGVudC92My9gLFxuICBVUERBVEVfUkVTT1VSQ0U6IGBhcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvdXBkYXRlYCxcbiAgU0VBUkNIOiBgYXBpcy9wcm94aWVzL3Y4L2Fzc2lnbm1lbnQvdjEvc2VhcmNoYCxcbiAgU1VCTUlUX0RSQUZUX0FTU0lHTk1FTlQ6IGBhcGlzL3Byb3hpZXMvdjgvYXNzaWdubWVudC92MS9zdWJtaXREcmFmdGAsXG4gIFNVQk1JVF9BU1NJR05NRU5UOiBgYXBpcy9wcm94aWVzL3Y4L2Fzc2lnbm1lbnQvdjEvc3VibWl0YCxcbiAgQVNTSUdOTUVOVF9TVEFUVVM6IGBhcGlzL3Byb3hpZXMvdjgvZm9ybXMvdjIvc3VibWlzc2lvbnMvc2VhcmNoYCxcbiAgVVBMT0FEX0FTU0lHTk1FTlQ6IGBhcGlzL3Byb3hpZXMvdjgvc3RvcmFnZS92MS9icC9hc3NpZ25tZW50L2Fuc3dlcmAsXG4gIFJFQURfQVNTSUdOTUVOVDogYGFwaXMvcHJveGllcy92OC9zdG9yYWdlL3YxL2JwL2Fzc2lnbm1lbnQvYW5zd2VyL3JlYWQvZmlsZWAsXG4gIE5PVElGWV9BU1NJR05NRU5UX1NVQk1JU1NJT046IGBhcGlzL3Byb3hpZXMvdjgvdjEvbm90aWZ5QXNzaWdubWVudC9zdWJtaXRgLFxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBcHBUb2NTZXJ2aWNlIHtcbiAgYW5hbHl0aWNzUmVwbGF5U3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKVxuICBhbmFseXRpY3NGZXRjaFN0YXR1czogVEZldGNoU3RhdHVzID0gJ25vbmUnXG4gIGJhdGNoUmVwbGF5U3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKVxuICBzZXRCYXRjaERhdGFTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpXG4gIGdldFNlbGVjdGVkQmF0Y2g6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KClcblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGVuc3VyZSBjb21wbGV0aW9uU3RhdHVzIGlzIGFsd2F5cyBhIG51bWJlclxuICAgKiBDb252ZXJ0cyBzdHJpbmcgdmFsdWVzIHRvIDAgYW5kIGVuc3VyZXMgdmFsaWQgbnVtYmVyIHJhbmdlICgwLCAxLCAyKVxuICAgKi9cbiAgcHJpdmF0ZSBzYWZlQ29tcGxldGlvblN0YXR1cyh2YWx1ZTogYW55KTogbnVtYmVyIHtcbiAgICBjb25zdCBudW1WYWx1ZSA9IE51bWJlcih2YWx1ZSlcbiAgICBpZiAoaXNOYU4obnVtVmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuICAgIHJldHVybiBudW1WYWx1ZVxuICB9XG4gIHNldFdGRGF0YVN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KClcbiAgcmVzdW1lRGF0YTogU3ViamVjdDxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhIHwgbnVsbD4gPSBuZXcgU3ViamVjdDxhbnk+KClcbiAgcHJpdmF0ZSBzaG93U3VidGl0bGVPbkJhbm5lcnMgPSBmYWxzZVxuICBwcml2YXRlIGNhblNob3dEZXNjcmlwdGlvbiA9IGZhbHNlXG4gIHJlc3VtZURhdGFTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIHByaW1hcnlDYXRlZ29yeSA9IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5XG4gIHByaXZhdGUgdXBkYXRlUmV2aWV3cyA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpXG4gIHVwZGF0ZVJldmlld3NPYnNlcnZhYmxlID0gdGhpcy51cGRhdGVSZXZpZXdzLmFzT2JzZXJ2YWJsZSgpXG4gIHB1YmxpYyBzZXJ2ZXJEYXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJylcbiAgY3VycmVudFNlcnZlckRhdGUgPSB0aGlzLnNlcnZlckRhdGUuYXNPYnNlcnZhYmxlKClcbiAgcHVibGljIGNvbnRlbnRMb2FkZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKVxuICBjb250ZW50TG9hZGVyJCA9IHRoaXMuY29udGVudExvYWRlci5hc09ic2VydmFibGUoKVxuICBwdWJsaWMgZ2V0UGFnZVNjcm9sbCA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSlcbiAgdXBkYXRlUGFnZVNjcm9sbCA9IHRoaXMuZ2V0UGFnZVNjcm9sbC5hc09ic2VydmFibGUoKVxuICBwdWJsaWMgaGFzaG1hcDogYW55ID0ge31cbiAgcHJpdmF0ZSBjdXJyZW50Um9vdENvbnRlbnRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwgLy8gVHJhY2sgY3VycmVudCBjb250ZW50IHRvIGF2b2lkIHVubmVjZXNzYXJ5IGhhc2htYXAgY2xlYXJpbmdcbiAgcHVibGljIGhhc2htYXBVcGRhdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpXG4gIGhhc2htYXBVcGRhdGVkJCA9IHRoaXMuaGFzaG1hcFVwZGF0ZWQuYXNPYnNlcnZhYmxlKClcbiAgcHJpdmF0ZSB0cmFuc3JpcHRpb25EYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTsgLy8gU3RhcnQgd2l0aCBudWxsXG4gIHRyYW5zY3JpcHRpb25EYXRhJCA9IHRoaXMudHJhbnNyaXB0aW9uRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHB1YmxpYyB0cmFuc3JpcHRpb25BY3RpdmVMYW5ndWFnZURhdGFPYmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gIHB1YmxpYyB0cmFuc3JpcHRpb25BY3RpdmVMYW5ndWFnZURhdGFPYmplY3QkID0gdGhpcy50cmFuc3JpcHRpb25BY3RpdmVMYW5ndWFnZURhdGFPYmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHB1YmxpYyB0cmFuc3JpcHRpb25JZGVudGlmaWVyID0gbmV3IFN1YmplY3QoKTsgLy8gU3RhcnQgd2l0aCBudWxsXG4gIGNoYW5nZVRyYW5zY3JpcHRpb25MYW5ndWFnZUV2ZW50ID0gbmV3IFN1YmplY3QoKVxuICBwbGF5VHJhbnNjcmlwdGlvblZpZGVvID0gbmV3IFN1YmplY3QoKVxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgY29udGVudExhbmdTdmM6IENvbnRlbnRMYW5ndWFnZVNlcnZpY2UsIHByaXZhdGUgY29uZmlnU3ZjOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsIHByaXZhdGUgd2lkZ2V0U3ZjOiBXaWRnZXRDb250ZW50U2VydmljZSkge1xuICAgIC8vIHRoaXMgcmVzdW1lIGRhdGEgc3Vic2NyaXB0aW9uIGlzIGZvciBvbiBsb2FkXG4gICAgdGhpcy5yZXN1bWVEYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5yZXN1bWVEYXRhLnN1YnNjcmliZShcbiAgICAgIChfZGF0YVJlc3VsdDogYW55KSA9PiB7XG4gICAgICB9KVxuICB9XG5cbiAgZ2V0IHN1YnRpdGxlT25CYW5uZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dTdWJ0aXRsZU9uQmFubmVyc1xuICB9XG4gIHNldCBzdWJ0aXRsZU9uQmFubmVycyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNob3dTdWJ0aXRsZU9uQmFubmVycyA9IHZhbFxuICB9XG4gIGdldCBzaG93RGVzY3JpcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FuU2hvd0Rlc2NyaXB0aW9uXG4gIH1cbiAgc2V0IHNob3dEZXNjcmlwdGlvbih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNhblNob3dEZXNjcmlwdGlvbiA9IHZhbFxuICB9XG5cbiAgdXBkYXRlQmF0Y2hEYXRhKCkge1xuICAgIHRoaXMuYmF0Y2hSZXBsYXlTdWJqZWN0Lm5leHQoKVxuICB9XG5cbiAgc2V0QmF0Y2hEYXRhKGRhdGE6IE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2UpIHtcbiAgICB0aGlzLnNldEJhdGNoRGF0YVN1YmplY3QubmV4dChkYXRhKVxuICB9XG5cbiAgc2V0V0ZEYXRhKGRhdGE6IGFueSkge1xuICAgIHRoaXMuc2V0V0ZEYXRhU3ViamVjdC5uZXh0KGRhdGEpXG4gIH1cblxuICB1cGRhdGVSZXN1bWFEYXRhKGRhdGE6IGFueSkge1xuICAgIHRoaXMucmVzdW1lRGF0YS5uZXh0KGRhdGEpXG4gIH1cblxuICBjaGFuZ2VVcGRhdGVSZXZpZXdzKHN0YXRlOiBib29sZWFuKSB7XG4gICAgdGhpcy51cGRhdGVSZXZpZXdzLm5leHQoc3RhdGUpXG4gIH1cbiAgZ2V0U2VsZWN0ZWRCYXRjaERhdGEoZGF0YTogYW55KSB7XG4gICAgdGhpcy5nZXRTZWxlY3RlZEJhdGNoLm5leHQoZGF0YSlcbiAgfVxuXG4gIGNoYW5nZVNlcnZlckRhdGUoc3RhdGU6IGFueSkge1xuICAgIHRoaXMuc2VydmVyRGF0ZS5uZXh0KHN0YXRlKVxuICB9XG5cbiAgbWFwU2Vzc2lvbkNvbXBsZXRpb25QZXJjZW50YWdlKGJhdGNoRGF0YTogYW55LCByZXN1bWVEYXRhUGFzcz86IGFueSkge1xuICAgIGlmIChyZXN1bWVEYXRhUGFzcyAmJiByZXN1bWVEYXRhUGFzcy5sZW5ndGgpIHtcbiAgICAgIGlmIChyZXN1bWVEYXRhUGFzcyAmJiByZXN1bWVEYXRhUGFzcy5sZW5ndGggJiYgYmF0Y2hEYXRhLmNvbnRlbnQgJiYgYmF0Y2hEYXRhLmNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbkNvbXBsZXRpb25QZXJjZW50YWdlKGJhdGNoRGF0YSwgcmVzdW1lRGF0YVBhc3MpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzdW1lRGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMucmVzdW1lRGF0YS5zdWJzY3JpYmUoXG4gICAgICAgIChkYXRhUmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YVJlc3VsdCAmJiBkYXRhUmVzdWx0Lmxlbmd0aCAmJiBiYXRjaERhdGEuY29udGVudCAmJiBiYXRjaERhdGEuY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbkNvbXBsZXRpb25QZXJjZW50YWdlKGJhdGNoRGF0YSwgZGF0YVJlc3VsdClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgfVxuICBzZXNzaW9uQ29tcGxldGlvblBlcmNlbnRhZ2UoYmF0Y2hEYXRhOiBhbnksIHJlc3VtZURhdGFQYXNzOiBhbnkpIHtcbiAgICBpZiAocmVzdW1lRGF0YVBhc3MgJiYgcmVzdW1lRGF0YVBhc3MubGVuZ3RoKSB7XG4gICAgICBpZiAoYmF0Y2hEYXRhICYmIGJhdGNoRGF0YS5jb250ZW50WzBdICYmXG4gICAgICAgIGJhdGNoRGF0YS5jb250ZW50WzBdLmJhdGNoQXR0cmlidXRlcyAmJlxuICAgICAgICBiYXRjaERhdGEuY29udGVudFswXS5iYXRjaEF0dHJpYnV0ZXMuc2Vzc2lvbkRldGFpbHNfdjJcbiAgICAgICkge1xuICAgICAgICBiYXRjaERhdGEuY29udGVudFswXS5iYXRjaEF0dHJpYnV0ZXMuc2Vzc2lvbkRldGFpbHNfdjIubWFwKChzZDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm91bmRDb250ZW50ID0gcmVzdW1lRGF0YVBhc3MuZmluZCgoZWw6IGFueSkgPT4gZWwuY29udGVudElkID09PSBzZC5zZXNzaW9uSWQpXG4gICAgICAgICAgaWYgKGZvdW5kQ29udGVudCkge1xuICAgICAgICAgICAgc2QuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBmb3VuZENvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgICAgICAgIHNkLmNvbXBsZXRpb25TdGF0dXMgPSB0aGlzLnNhZmVDb21wbGV0aW9uU3RhdHVzKGZvdW5kQ29udGVudC5zdGF0dXMpXG4gICAgICAgICAgICBzZC5sYXN0Q29tcGxldGVkVGltZSA9IGZvdW5kQ29udGVudC5sYXN0Q29tcGxldGVkVGltZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2hvd1N0YXJ0QnV0dG9uKGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwpOiB7IHNob3c6IGJvb2xlYW47IG1zZzogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHN0YXR1cyA9IHtcbiAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgbXNnOiAnJyxcbiAgICB9XG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY29udGVudC5hcnRpZmFjdFVybCAmJiBjb250ZW50LmFydGlmYWN0VXJsLm1hdGNoKC95b3V0dSguKT9iZS9naSkgJiZcbiAgICAgICAgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUgJiZcbiAgICAgICAgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUuY291bnRyeSA9PT0gJ0NoaW5hJ1xuICAgICAgKSB7XG4gICAgICAgIHN0YXR1cy5zaG93ID0gZmFsc2VcbiAgICAgICAgc3RhdHVzLm1zZyA9ICd5b3V0dWJlRm9yYmlkZGVuJ1xuICAgICAgICByZXR1cm4gc3RhdHVzXG4gICAgICB9XG4gICAgICBpZiAoY29udGVudC5yZXNvdXJjZVR5cGUgIT09ICdDZXJ0aWZpY2F0aW9uJykge1xuICAgICAgICBzdGF0dXMuc2hvdyA9IHRydWVcbiAgICAgICAgcmV0dXJuIHN0YXR1c1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhdHVzXG4gIH1cblxuICBpbml0RGF0YShkYXRhOiBEYXRhLCBuZWVkUmVzdW1lRGF0YTogYm9vbGVhbiA9IGZhbHNlKTogTnNBcHBUb2MuSVdzVG9jUmVzcG9uc2Uge1xuICAgIGxldCBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQgfCBudWxsID0gbnVsbFxuICAgIGxldCBlcnJvckNvZGU6IE5zQXBwVG9jLkVXc1RvY0Vycm9yQ29kZSB8IG51bGwgPSBudWxsXG4gICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQodHJ1ZSlcbiAgICBpZiAoZGF0YS5jb250ZW50ICYmIGRhdGEuY29udGVudC5kYXRhICYmIGRhdGEuY29udGVudC5kYXRhLmlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnRlbnQgPSBkYXRhLmNvbnRlbnQuZGF0YVxuICAgICAgaWYgKG5lZWRSZXN1bWVEYXRhKSB7XG4gICAgICAgIHRoaXMucmVzdW1lRGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMucmVzdW1lRGF0YS5zdWJzY3JpYmUoXG4gICAgICAgICAgKGRhdGFSZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGFSZXN1bHQgJiYgZGF0YVJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQodHJ1ZSlcbiAgICAgICAgICAgICAgdGhpcy5tYXBDb21wbGV0aW9uUGVyY2VudGFnZShjb250ZW50LCBkYXRhUmVzdWx0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3Igb24gcmVzdW1lRGF0YVN1YnNjcmlwdGlvbicpXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgICAgZXJyb3JDb2RlID0gTnNBcHBUb2MuRVdzVG9jRXJyb3JDb2RlLkFQSV9GQUlMVVJFXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvckNvZGUgPSBOc0FwcFRvYy5FV3NUb2NFcnJvckNvZGUuTk9fREFUQVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudCxcbiAgICAgIGVycm9yQ29kZSxcbiAgICB9XG4gIH1cblxuICBtYXBDb21wbGV0aW9uUGVyY2VudGFnZShjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQgfCBudWxsLCBkYXRhUmVzdWx0OiBhbnkpIHtcbiAgICBpZiAoY29udGVudCAmJiBjb250ZW50LmNoaWxkcmVuKSB7XG4gICAgICBjb250ZW50LmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgICAgIGNvbnN0IGZvdW5kQ29udGVudCA9IGRhdGFSZXN1bHQuZmluZCgoZWw6IGFueSkgPT4gZWwuY29udGVudElkID09PSBjaGlsZC5pZGVudGlmaWVyKVxuICAgICAgICBpZiAoZm91bmRDb250ZW50KSB7XG4gICAgICAgICAgY2hpbGQuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBmb3VuZENvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgZm91bmRDb250ZW50LnByb2dyZXNzXG4gICAgICAgICAgY2hpbGQuY29tcGxldGlvblN0YXR1cyA9IHRoaXMuc2FmZUNvbXBsZXRpb25TdGF0dXMoZm91bmRDb250ZW50LnN0YXR1cylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1hcENvbXBsZXRpb25QZXJjZW50YWdlKGNoaWxkLCBkYXRhUmVzdWx0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIG1hcE1vZHVsZUNvdW50KGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCkge1xuICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnRlbnQuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcbiAgICAgICAgaWYgKGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFKSB7XG4gICAgICAgICAgY29udGVudFsnbW9kdWxlQ291bnQnXSA9IGNvbnRlbnRbJ21vZHVsZUNvdW50J10gPyBjb250ZW50Wydtb2R1bGVDb3VudCddICsgMSA6IDFcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgICB0aGlzLm1hcE1vZHVsZUNvdW50KGNoaWxkKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldE1pbWVUeXBlKGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCwgaWRlbnRpZmllcjogc3RyaW5nKTogTnNDb250ZW50LkVNaW1lVHlwZXMge1xuICAgIGlmIChjb250ZW50LmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJldHVybiBjb250ZW50Lm1pbWVUeXBlXG4gICAgfVxuICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjb250ZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBpZiAoY29udGVudC5jaGlsZHJlblswXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICAgIC8vICAgcmV0dXJuIGNvbnRlbnQubWltZVR5cGVcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBiaWcgYmx1bmRlciBpbiBkYXRhXG4gICAgICAgIC8vIHRoaXMubG9nZ2VyLmxvZyhjb250ZW50LmlkZW50aWZpZXIsICdXcm9uZyBtaW1ldHlwZXMgZm9yIHJlc3VtZScpXG4gICAgICAgIHJldHVybiBjb250ZW50Lm1pbWVUeXBlXG4gICAgICB9XG4gICAgICBjb25zdCBmbGF0TGlzdDogYW55W10gPSBbXVxuICAgICAgY29uc3QgZ2V0QWxsSXRlbXNQZXJDaGlsZHJlbjogYW55ID0gKGl0ZW06IE5zQ29udGVudC5JQ29udGVudCkgPT4ge1xuICAgICAgICBmbGF0TGlzdC5wdXNoKGl0ZW0pXG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0uY2hpbGRyZW4ubWFwKChpOiBOc0NvbnRlbnQuSUNvbnRlbnQpID0+IGdldEFsbEl0ZW1zUGVyQ2hpbGRyZW4oaSkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBnZXRBbGxJdGVtc1BlckNoaWxkcmVuKGNvbnRlbnQpXG4gICAgICBjb25zdCBjaGxkID0gXy5maXJzdChfLmZpbHRlcihmbGF0TGlzdCwgeyBpZGVudGlmaWVyIH0pKVxuICAgICAgcmV0dXJuIChjaGxkICYmIGNobGQubWltZVR5cGUpIHx8ICcnXG4gICAgfVxuICAgIC8vIHJldHVybiBjaGxkLm1pbWVUeXBlXG4gICAgcmV0dXJuIE5zQ29udGVudC5FTWltZVR5cGVzLlVOS05PV05cbiAgfVxuXG4gIGdldFRvY1N0cnVjdHVyZShcbiAgICBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQsXG4gICAgdG9jU3RydWN0dXJlOiBOc0FwcFRvYy5JVG9jU3RydWN0dXJlLFxuICApOiBOc0FwcFRvYy5JVG9jU3RydWN0dXJlIHtcbiAgICBpZiAoXG4gICAgICBjb250ZW50ICYmXG4gICAgICAhKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5SRVNPVVJDRVxuICAgICAgICAvLyB8fCBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuS05PV0xFREdFX0FSVElGQUNUKVxuICAgICAgICB8fCBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuUFJBQ1RJQ0VfUkVTT1VSQ0VcbiAgICAgICAgfHwgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LkZJTkFMX0FTU0VTU01FTlRcbiAgICAgICAgfHwgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMucHJpbWFyeUNhdGVnb3J5Lk9GRkxJTkVfU0VTU0lPTlxuICAgICAgKSkge1xuICAgICAgaWYgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgdG9jU3RydWN0dXJlLmNvdXJzZSArPSAxXG4gICAgICB9IGVsc2UgaWYgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5NT0RVTEUpIHtcbiAgICAgICAgdG9jU3RydWN0dXJlLmxlYXJuaW5nTW9kdWxlICs9IDFcbiAgICAgIH1cbiAgICAgIF8uZWFjaChjb250ZW50LmNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tcGFyYW1ldGVyLXJlYXNzaWdubWVudFxuICAgICAgICB0b2NTdHJ1Y3R1cmUgPSB0aGlzLmdldFRvY1N0cnVjdHVyZShjaGlsZCwgdG9jU3RydWN0dXJlKVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY29udGVudCAmJlxuICAgICAgKFxuICAgICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUkVTT1VSQ0VcbiAgICAgICAgLy8gfHwgY29udGVudC5jb250ZW50VHlwZSA9PT0gJ0tub3dsZWRnZSBBcnRpZmFjdCdcbiAgICAgICAgfHwgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlBSQUNUSUNFX1JFU09VUkNFXG4gICAgICAgIHx8IGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5GSU5BTF9BU1NFU1NNRU5UXG4gICAgICAgIHx8IGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5PRkZMSU5FX1NFU1NJT04pXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKGNvbnRlbnQubWltZVR5cGUpIHtcbiAgICAgICAgLy8gY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5IQU5EU19PTjpcbiAgICAgICAgLy8gICB0b2NTdHJ1Y3R1cmUuaGFuZHNPbiArPSAxXG4gICAgICAgIC8vICAgYnJlYWtcbiAgICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDM6XG4gICAgICAgICAgdG9jU3RydWN0dXJlLnBvZGNhc3QgKz0gMVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuTVA0OlxuICAgICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLk0zVTg6XG4gICAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuWU9VVFVCRTpcbiAgICAgICAgICB0b2NTdHJ1Y3R1cmUudmlkZW8gKz0gMVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIC8vIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuSU5URVJBQ1RJT046XG4gICAgICAgIC8vICAgdG9jU3RydWN0dXJlLmludGVyYWN0aXZlVmlkZW8gKz0gMVxuICAgICAgICAvLyAgIGJyZWFrXG4gICAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuUERGOlxuICAgICAgICAgIHRvY1N0cnVjdHVyZS5wZGYgKz0gMVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIC8vIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuSFRNTDpcbiAgICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5URVhUX1dFQjpcbiAgICAgICAgICB0b2NTdHJ1Y3R1cmUud2ViUGFnZSArPSAxXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5TVVJWRVk6XG4gICAgICAgICAgdG9jU3RydWN0dXJlLnN1cnZleSArPSAxXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5RVUlaOlxuICAgICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLkFQUExJQ0FUSU9OX0pTT046XG4gICAgICAgICAgLy8gaWYgKGNvbnRlbnQucmVzb3VyY2VUeXBlID09PSAnQXNzZXNzbWVudCcpIHtcbiAgICAgICAgICB0b2NTdHJ1Y3R1cmUuYXNzZXNzbWVudCArPSAxXG4gICAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgICAvLyAgIHRvY1N0cnVjdHVyZS5xdWl6ICs9IDFcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5PRkZMSU5FX1NFU1NJT046XG4gICAgICAgICAgLy8gaWYgKGNvbnRlbnQucmVzb3VyY2VUeXBlID09PSAnQXNzZXNzbWVudCcpIHtcbiAgICAgICAgICB0b2NTdHJ1Y3R1cmUub2ZmbGluZVNlc3Npb24gKz0gMVxuICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgLy8gICB0b2NTdHJ1Y3R1cmUucXVpeiArPSAxXG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuUFJBQ1RJQ0VfUkVTT1VSQ0U6XG4gICAgICAgICAgaWYgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5QUkFDVElDRV9SRVNPVVJDRSkge1xuICAgICAgICAgICAgdG9jU3RydWN0dXJlLnByYWN0aWNlVGVzdCArPSAxXG4gICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuRklOQUxfQVNTRVNTTUVOVCkge1xuICAgICAgICAgICAgdG9jU3RydWN0dXJlLmZpbmFsVGVzdCArPSAxXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIC8vIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuV0VCX01PRFVMRTpcbiAgICAgICAgLy8gICB0b2NTdHJ1Y3R1cmUud2ViTW9kdWxlICs9IDFcbiAgICAgICAgLy8gICBicmVha1xuICAgICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLlpJUDI6XG4gICAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuWklQOlxuICAgICAgICAgIHRvY1N0cnVjdHVyZS5pbnRlcmFjdGl2ZWNvbnRlbnQgKz0gMVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIC8vIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuWU9VVFVCRTpcbiAgICAgICAgLy8gICB0b2NTdHJ1Y3R1cmUueW91dHViZSArPSAxXG4gICAgICAgIC8vICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0b2NTdHJ1Y3R1cmUub3RoZXIgKz0gMVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICByZXR1cm4gdG9jU3RydWN0dXJlXG4gICAgfVxuICAgIHJldHVybiB0b2NTdHJ1Y3R1cmVcbiAgfVxuXG4gIGZpbHRlclRvYyhcbiAgICBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQsXG4gICAgZmlsdGVyQ2F0ZWdvcnk6IE5zQ29udGVudC5FRmlsdGVyQ2F0ZWdvcnkgPSBOc0NvbnRlbnQuRUZpbHRlckNhdGVnb3J5LkFMTCxcbiAgKTogTnNDb250ZW50LklDb250ZW50IHwgbnVsbCB7XG4gICAgaWYgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5SRVNPVVJDRVxuICAgICAgLy8gIHx8IGNvbnRlbnQuY29udGVudFR5cGUgPT09ICdLbm93bGVkZ2UgQXJ0aWZhY3QnXG4gICAgICB8fCBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJBQ1RJQ0VfUkVTT1VSQ0VcbiAgICAgIHx8IGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5GSU5BTF9BU1NFU1NNRU5UXG4gICAgICB8fCBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuT0ZGTElORV9TRVNTSU9OKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJVbml0Q29udGVudChjb250ZW50LCBmaWx0ZXJDYXRlZ29yeSkgPyBjb250ZW50IDogbnVsbFxuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJlZENoaWxkcmVuOiBOc0NvbnRlbnQuSUNvbnRlbnRbXSA9XG4gICAgICBfLm1hcChfLmdldChjb250ZW50LCAnY2hpbGRyZW4nKSwgY2hpbGRDb250ZW50ID0+XG4gICAgICAgIHRoaXMuZmlsdGVyVG9jKGNoaWxkQ29udGVudCwgZmlsdGVyQ2F0ZWdvcnkpKVxuICAgICAgICAuZmlsdGVyKHVuaXRDb250ZW50ID0+IEJvb2xlYW4odW5pdENvbnRlbnQpKSBhcyBOc0NvbnRlbnQuSUNvbnRlbnRbXVxuICAgIGlmIChmaWx0ZXJlZENoaWxkcmVuICYmIGZpbHRlcmVkQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb250ZW50LFxuICAgICAgICBjaGlsZHJlbjogZmlsdGVyZWRDaGlsZHJlbixcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZpbHRlclVuaXRDb250ZW50KFxuICAgIGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCxcbiAgICBmaWx0ZXJDYXRlZ29yeTogTnNDb250ZW50LkVGaWx0ZXJDYXRlZ29yeSA9IE5zQ29udGVudC5FRmlsdGVyQ2F0ZWdvcnkuQUxMLFxuICApOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGZpbHRlckNhdGVnb3J5KSB7XG4gICAgICBjYXNlIE5zQ29udGVudC5FRmlsdGVyQ2F0ZWdvcnkuTEVBUk46XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgIU5zQ29udGVudENvbnN0YW50cy5WQUxJRF9QUkFDVElDRV9SRVNPVVJDRVMuaGFzKGNvbnRlbnQucmVzb3VyY2VUeXBlKSAmJlxuICAgICAgICAgICFOc0NvbnRlbnRDb25zdGFudHMuVkFMSURfQVNTRVNTTUVOVF9SRVNPVVJDRVMuaGFzKGNvbnRlbnQucmVzb3VyY2VUeXBlKVxuICAgICAgICApXG4gICAgICBjYXNlIE5zQ29udGVudC5FRmlsdGVyQ2F0ZWdvcnkuUFJBQ1RJQ0U6XG4gICAgICAgIHJldHVybiBOc0NvbnRlbnRDb25zdGFudHMuVkFMSURfUFJBQ1RJQ0VfUkVTT1VSQ0VTLmhhcyhjb250ZW50LnJlc291cmNlVHlwZSlcbiAgICAgIGNhc2UgTnNDb250ZW50LkVGaWx0ZXJDYXRlZ29yeS5BU1NFU1M6XG4gICAgICAgIHJldHVybiBOc0NvbnRlbnRDb25zdGFudHMuVkFMSURfQVNTRVNTTUVOVF9SRVNPVVJDRVMuaGFzKGNvbnRlbnQucmVzb3VyY2VUeXBlKVxuICAgICAgY2FzZSBOc0NvbnRlbnQuRUZpbHRlckNhdGVnb3J5LkFMTDpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIGZldGNoQ29udGVudEFuYWx5dGljc0NsaWVudERhdGEoY29udGVudElkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5hbmFseXRpY3NGZXRjaFN0YXR1cyAhPT0gJ2ZldGNoaW5nJyAmJiB0aGlzLmFuYWx5dGljc0ZldGNoU3RhdHVzICE9PSAnZG9uZScpIHtcbiAgICAgIHRoaXMuZ2V0Q29udGVudEFuYWx5dGljc0NsaWVudChjb250ZW50SWQpXG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0Q29udGVudEFuYWx5dGljc0NsaWVudChjb250ZW50SWQ6IHN0cmluZykge1xuICAgIHRoaXMuYW5hbHl0aWNzRmV0Y2hTdGF0dXMgPSAnZmV0Y2hpbmcnXG4gICAgY29uc3QgdXJsID0gYCR7UFJPWFlfU0xBR19WOH0vTEEvYXBpL2xhL2NvbnRlbnRhbmFseXRpY3M/Y29udGVudF9pZD0ke2NvbnRlbnRJZH0mdHlwZT1jb3Vyc2VgXG4gICAgdGhpcy5odHRwLmdldCh1cmwpLnN1YnNjcmliZShcbiAgICAgIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmFuYWx5dGljc0ZldGNoU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgIHRoaXMuYW5hbHl0aWNzUmVwbGF5U3ViamVjdC5uZXh0KHJlc3VsdClcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzUmVwbGF5U3ViamVjdC5uZXh0KG51bGwpXG4gICAgICAgIHRoaXMuYW5hbHl0aWNzRmV0Y2hTdGF0dXMgPSAnZG9uZSdcbiAgICAgIH0sXG4gICAgKVxuICB9XG5cbiAgZmV0Y2hDb250ZW50QW5hbHl0aWNzRGF0YShjb250ZW50SWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmFuYWx5dGljc0ZldGNoU3RhdHVzICE9PSAnZmV0Y2hpbmcnICYmIHRoaXMuYW5hbHl0aWNzRmV0Y2hTdGF0dXMgIT09ICdkb25lJykge1xuICAgICAgdGhpcy5nZXRDb250ZW50QW5hbHl0aWNzKGNvbnRlbnRJZClcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRDb250ZW50QW5hbHl0aWNzKGNvbnRlbnRJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5hbmFseXRpY3NGZXRjaFN0YXR1cyA9ICdmZXRjaGluZydcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgIGNvbnN0IHVybCA9IGAke1BST1hZX1NMQUdfVjh9L0xBL0xBL2FwaS9Vc2Vycz9yZWZpbmVtZW50ZmlsdGVyPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgJ1wic291cmNlXCI6W1wiaUdvdFwiLFwiTGVhcm5pbmcgSHViXCJdJyxcbiAgICApfSQke2VuY29kZVVSSUNvbXBvbmVudChgXCJjb3Vyc2VDb2RlXCI6IFtcIiR7Y29udGVudElkfVwiXWApfWBcbiAgICB0aGlzLmh0dHAuZ2V0KHVybCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzRmV0Y2hTdGF0dXMgPSAnZG9uZSdcbiAgICAgICAgdGhpcy5hbmFseXRpY3NSZXBsYXlTdWJqZWN0Lm5leHQocmVzdWx0KVxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5hbmFseXRpY3NSZXBsYXlTdWJqZWN0Lm5leHQobnVsbClcbiAgICAgICAgdGhpcy5hbmFseXRpY3NGZXRjaFN0YXR1cyA9ICdkb25lJ1xuICAgICAgfSxcbiAgICApXG4gIH1cblxuICBjbGVhckFuYWx5dGljc0RhdGEoKSB7XG4gICAgaWYgKHRoaXMuYW5hbHl0aWNzUmVwbGF5U3ViamVjdCkge1xuICAgICAgdGhpcy5hbmFseXRpY3NSZXBsYXlTdWJqZWN0LnVuc3Vic2NyaWJlKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgaGFzaG1hcCBhbmQgcmVsYXRlZCBjb250ZW50IGRhdGFcbiAgICogQ2FsbCB0aGlzIHdoZW4gbmF2aWdhdGluZyBhd2F5IGZyb20gY29udGVudCB0byBwcmV2ZW50IHN0YWxlIGRhdGFcbiAgICovXG4gIHJlc2V0Q29udGVudERhdGEoKSB7XG4gICAgdGhpcy5oYXNobWFwID0ge31cbiAgICB0aGlzLmN1cnJlbnRSb290Q29udGVudElkID0gbnVsbFxuICAgIHRoaXMuaGFzaG1hcFVwZGF0ZWQubmV4dChudWxsKVxuICB9XG5cbiAgZmV0Y2hDb250ZW50UGFyZW50cyhjb250ZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50TWluaW1hbFtdPiB7XG4gICAgLy8gcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50TWluaW1hbFtdPihcbiAgICAvLyAgIGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUEFSRU5UU30vJHtjb250ZW50SWR9YCxcbiAgICAvLyApXG4gICAgaWYgKGNvbnRlbnRJZCkgeyB9XG4gICAgcmV0dXJuIEVNUFRZXG4gIH1cbiAgZmV0Y2hDb250ZW50V2hhdHNOZXh0KFxuICAgIGNvbnRlbnRJZDogc3RyaW5nLFxuICAgIGNvbnRlbnRUeXBlPzogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudE1pbmltYWxbXT4ge1xuICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50TWluaW1hbFtdPihcbiAgICAgICAgYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9ORVhUfS8ke2NvbnRlbnRJZH0/Y29udGVudFR5cGU9JHtjb250ZW50VHlwZX1gLFxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnRNaW5pbWFsW10+KFxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9ORVhUfS8ke2NvbnRlbnRJZH0/dHM9JHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gLFxuICAgIClcbiAgfVxuXG4gIGZldGNoTW9yZUxpa2VUaGlzUGFpZChjb250ZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50TWluaW1hbFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50TWluaW1hbFtdPihcbiAgICAgIGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfTkVYVFxuICAgICAgfS8ke2NvbnRlbnRJZH0/ZXhjbHVzaXZlQ29udGVudD10cnVlJnRzPSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YCxcbiAgICApXG4gIH1cblxuICBmZXRjaE1vcmVMaWtlVGhpc0ZyZWUoY29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudE1pbmltYWxbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudE1pbmltYWxbXT4oXG4gICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT05URU5UX05FWFRcbiAgICAgIH0vJHtjb250ZW50SWR9P2V4Y2x1c2l2ZUNvbnRlbnQ9ZmFsc2UmdHM9JHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gLFxuICAgIClcbiAgfVxuXG4gIGZldGNoQ29udGVudENvaG9ydHMoXG4gICAgY29ob3J0VHlwZTogTnNDb2hvcnRzLkVDb2hvcnRUeXBlcyxcbiAgICBjb250ZW50SWQ6IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxOc0NvaG9ydHMuSUNvaG9ydHNDb250ZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvaG9ydHMuSUNvaG9ydHNDb250ZW50W10+KEFQSV9FTkRfUE9JTlRTLkNPSE9SVFMoY29ob3J0VHlwZSwgY29udGVudElkKSwge1xuICAgICAgaGVhZGVyczogeyByb290T3JnOiB0aGlzLmNvbmZpZ1N2Yy5yb290T3JnIHx8ICcnLCBvcmc6IHRoaXMuY29uZmlnU3ZjLm9yZyA/IHRoaXMuY29uZmlnU3ZjLm9yZ1swXSA6ICcnIH0sXG4gICAgfSlcbiAgfVxuICBmZXRjaEV4dGVybmFsQ29udGVudEFjY2Vzcyhjb250ZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8eyBoYXNBY2Nlc3M6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHsgaGFzQWNjZXNzOiBib29sZWFuIH0+KEFQSV9FTkRfUE9JTlRTLkVYVEVSTkFMX0NPTlRFTlQoY29udGVudElkKSlcbiAgfVxuICBmZXRjaENvaG9ydEdyb3VwVXNlcnMoZ3JvdXBJZDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb2hvcnRzLklDb2hvcnRzR3JvdXBVc2Vyc1tdPihBUElfRU5EX1BPSU5UUy5DT0hPUlRTX0dST1VQX1VTRVIoZ3JvdXBJZCkpXG4gIH1cbiAgZmV0Y2hNb3JlTGlrZVRoaXMoY29udGVudElkOiBzdHJpbmcsIGNvbnRlbnRUeXBlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudFtdPihcbiAgICAgIEFQSV9FTkRfUE9JTlRTLlJFTEFURURfUkVTT1VSQ0UoY29udGVudElkLCBjb250ZW50VHlwZSksXG4gICAgKVxuICB9XG5cbiAgZmV0Y2hQb3N0QXNzZXNzbWVudFN0YXR1cyhjb250ZW50SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHsgcmVzdWx0OiBOc0FwcFRvYy5JUG9zdEFzc2Vzc21lbnRbXSB9PihcbiAgICAgIEFQSV9FTkRfUE9JTlRTLlBPU1RfQVNTRVNTTUVOVChjb250ZW50SWQpLFxuICAgIClcbiAgfVxuXG4gIGZldGNoR2V0Q29udGVudERhdGEoY29udGVudElkOiBzdHJpbmcpIHtcbiAgICBsZXQgdXJsID0gJydcbiAgICBjb25zdCBmb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKVxuICAgIGlmICghZm9yUHJldmlldykge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8eyByZXN1bHQ6IGFueSB9PihcbiAgICAgICAgQVBJX0VORF9QT0lOVFMuR0VUX0NPTlRFTlQoY29udGVudElkKSxcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdlZGl0TW9kZT10cnVlJykgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ19yYycpKSB7XG4gICAgICB1cmwgPSBgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9yZWFkLyR7Y29udGVudElkfWBcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsID0gYC9hcGkvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWBcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8eyByZXN1bHQ6IGFueSB9Pih1cmwpXG5cbiAgfVxuXG4gIGZldGNoQ29udGVudFBhcmVudChjb250ZW50SWQ6IHN0cmluZywgZGF0YTogTnNBcHBUb2MuSUNvbnRlbnRQYXJlbnRSZXEsIGZvclByZXZpZXcgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxOc0FwcFRvYy5JQ29udGVudFBhcmVudFJlc3BvbnNlPihcbiAgICAgIGZvclByZXZpZXdcbiAgICAgICAgPyBBUElfRU5EX1BPSU5UUy5DT05URU5UX0FVVEhfUEFSRU5UKFxuICAgICAgICAgIGNvbnRlbnRJZCxcbiAgICAgICAgICB0aGlzLmNvbmZpZ1N2Yy5yb290T3JnIHx8ICcnLFxuICAgICAgICAgIHRoaXMuY29uZmlnU3ZjLm9yZyA/IHRoaXMuY29uZmlnU3ZjLm9yZ1swXSA6ICcnLFxuICAgICAgICApXG4gICAgICAgIDogQVBJX0VORF9QT0lOVFMuQ09OVEVOVF9QQVJFTlQoY29udGVudElkKSxcbiAgICAgIGRhdGEsXG4gICAgKVxuICB9XG5cbiAgY3JlYXRlQmF0Y2goYmF0Y2hEYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICBBUElfRU5EX1BPSU5UUy5CQVRDSF9DUkVBVEUsXG4gICAgICB7IHJlcXVlc3Q6IGJhdGNoRGF0YSB9LFxuICAgIClcbiAgfVxuXG4gIGFzeW5jIG1hcENvbXBsZXRpb25QZXJjZW50YWdlUHJvZ3JhbShjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQgfCBudWxsLCBlbnJvbG1lbnRMaXN0OiBhbnksIGNvbGxlY3Rpb25JZD86IHN0cmluZykge1xuICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KHRydWUpXG4gICAgbGV0IHRvdGFsQ291bnQgPSAwXG4gICAgbGV0IGxlYWZub2RlQ291bnQgPSAwXG4gICAgbGV0IGNvbXBsZXRlZExlYWZOb2RlczogYW55ID0gW11cbiAgICBsZXQgZmlyc3RVbmNvbXBsZXRlQ291cnNlOiBhbnkgPSAnJ1xuICAgIGxldCBpbnByb2dyZXNzRGF0YUNoZWNrOiBhbnkgPSBbXVxuICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGxlYWZub2RlQ291bnQgPSBjb250ZW50LmxlYWZOb2Rlc0NvdW50XG4gICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dCh0cnVlKVxuICAgICAgY29uc3QgZm91bmRQYXJlbnRDb250ZW50ID0gdGhpcy5maW5kRW5yb2xtZW50QnlDb2xsZWN0aW9uSWQoZW5yb2xtZW50TGlzdCwgY29sbGVjdGlvbklkIHx8IGNvbnRlbnQuaWRlbnRpZmllcilcbiAgICAgIGlmIChmb3VuZFBhcmVudENvbnRlbnQgJiYgZm91bmRQYXJlbnRDb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5tYXBDb21wbGV0aW9uQ2hpbGRQZXJjZW50YWdlUHJvZ3JhbShjb250ZW50KVxuICAgICAgICB0b3RhbENvdW50ID0gY29udGVudC5sZWFmTm9kZXNDb3VudFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNvbnRlbnQ/LnByaW1hcnlDYXRlZ29yeSAhPT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZW50LmNoaWxkcmVuLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAvLyBjb250ZW50LmNoaWxkcmVuLmZvckVhY2goYXN5bmMgKHBhcmVudENoaWxkLGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDaGlsZCA9IGNvbnRlbnQuY2hpbGRyZW5baV1cbiAgICAgICAgICAgIGlmIChwYXJlbnRDaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPVVJTRSkge1xuICAgICAgICAgICAgICBjb25zdCBmb3VuZENvbnRlbnQgPSB0aGlzLmZpbmRFbnJvbG1lbnRCeUNvbGxlY3Rpb25JZChlbnJvbG1lbnRMaXN0LCBwYXJlbnRDaGlsZD8uaWRlbnRpZmllcilcbiAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICAgICAgLy8gdG90YWxDb3VudCA9IGZvdW5kQ29udGVudCAmJiBmb3VuZENvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgPyB0b3RhbENvdW50ICsgZm91bmRDb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlIDogdG90YWxDb3VudCArIDBcbiAgICAgICAgICAgICAgLy8gY29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA9IE1hdGgucm91bmQodG90YWxDb3VudCAvIGxlYWZub2RlQ291bnQpXG4gICAgICAgICAgICAgIGlmIChmb3VuZENvbnRlbnQgJiYgZm91bmRDb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dCh0cnVlKVxuICAgICAgICAgICAgICAgIHRvdGFsQ291bnQgPSB0b3RhbENvdW50ICs9IHBhcmVudENoaWxkLmxlYWZOb2Rlc0NvdW50XG4gICAgICAgICAgICAgICAgY29tcGxldGVkTGVhZk5vZGVzID0gWy4uLmNvbXBsZXRlZExlYWZOb2RlcywgLi4ucGFyZW50Q2hpbGQubGVhZk5vZGVzXVxuICAgICAgICAgICAgICAgIGlmIChmb3VuZENvbnRlbnQuaXNzdWVkQ2VydGlmaWNhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNlcnRpZmljYXRlOiBhbnkgPSBmb3VuZENvbnRlbnQuaXNzdWVkQ2VydGlmaWNhdGVzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShhLmxhc3RJc3N1ZWRPbikuZ2V0VGltZSgpIC0gbmV3IERhdGUoYi5sYXN0SXNzdWVkT24pLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNlcnRJZDogYW55ID0gY2VydGlmaWNhdGVbMF0uaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgcGFyZW50Q2hpbGQuaXNzdWVkQ2VydGlmaWNhdGVzSWQgPSBjZXJ0SWRcbiAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGNlcnREYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmRvd29ubG9hZENlcnRpZmljYXRlKGNlcnRJZCkudG9Qcm9taXNlKCkuY2F0Y2goX2Vycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAvLyB9KVxuICAgICAgICAgICAgICAgICAgLy8gaWYgKGNlcnREYXRhICYmIGNlcnREYXRhLnJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgLy8gICBwYXJlbnRDaGlsZC5pc3N1ZWRDZXJ0aWZpY2F0ZXNTVkcgPSBjZXJ0RGF0YS5yZXN1bHQucHJpbnRVcmlcbiAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJlbnRDaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSA9IDEwMFxuICAgICAgICAgICAgICAgIHBhcmVudENoaWxkLmNvbXBsZXRpb25TdGF0dXMgPSAyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tYXBDb21wbGV0aW9uQ2hpbGRQZXJjZW50YWdlUHJvZ3JhbShwYXJlbnRDaGlsZClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dCh0cnVlKVxuICAgICAgICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmNvbnRlbnRMYW5nU3ZjLmdldENvbnRlbnRMYW5ndWFnZShwYXJlbnRDaGlsZClcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgICAgICAgICAgIGJhdGNoSWQ6IGZvdW5kQ29udGVudC5iYXRjaC5iYXRjaElkLFxuICAgICAgICAgICAgICAgICAgICAgIHVzZXJJZDogZm91bmRDb250ZW50LnVzZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgY291cnNlSWQ6IGZvdW5kQ29udGVudC5jb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgY29udGVudElkczogW10sXG4gICAgICAgICAgICAgICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAncHJvZ3Jlc3NkZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZmlyc3RVbmNvbXBsZXRlQ291cnNlID0gKHBhcmVudENoaWxkLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAwIHx8ICFwYXJlbnRDaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZpcnN0VW5jb21wbGV0ZUNvdXJzZSA/IHBhcmVudENoaWxkIDogZmlyc3RVbmNvbXBsZXRlQ291cnNlXG4gICAgICAgICAgICAgICAgICBpbnByb2dyZXNzRGF0YUNoZWNrID0gaW5wcm9ncmVzc0RhdGFDaGVja1xuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaENvbnRlbnRIaXN0b3J5VjIocmVxKS50b1Byb21pc2UoKS50aGVuKChwcm9ncmVzc2RhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSBwcm9ncmVzc2RhdGFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0ICYmIGRhdGE/LnJlc3VsdD8uY29udGVudExpc3Q/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0ZWRDb3VudCA9IGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5wcm9ncmVzcyA9PT0gMTAwKVxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb21wbGV0ZWRMZWFmbm9kZXMoY29tcGxldGVkTGVhZk5vZGVzLCBjb21wbGV0ZWRDb3VudClcbiAgICAgICAgICAgICAgICAgICAgICB0b3RhbENvdW50ID0gY29tcGxldGVkTGVhZk5vZGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgIGlucHJvZ3Jlc3NEYXRhQ2hlY2sgPSBbLi4uaW5wcm9ncmVzc0RhdGFDaGVjaywgLi4uZGF0YS5yZXN1bHQuY29udGVudExpc3RdXG4gICAgICAgICAgICAgICAgICAgICAgLy8gaW5wcm9ncmVzc0RhdGFDaGVjayA9IGlucHJvZ3Jlc3NEYXRhQ2hlY2sgPyBpbnByb2dyZXNzRGF0YUNoZWNrIDogIGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSZXN1bWFEYXRhKGlucHJvZ3Jlc3NEYXRhQ2hlY2spXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBDb21wbGV0aW9uUGVyY2VudGFnZShwYXJlbnRDaGlsZCwgZGF0YS5yZXN1bHQuY29udGVudExpc3QpXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBNb2R1bGVDb3VudChwYXJlbnRDaGlsZClcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcE1vZHVsZUNvdW50KHBhcmVudENoaWxkKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9ncmVzc2RhdGFcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgaWYgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ICE9PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0pIHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dCh0cnVlKVxuICAgICAgICAgICAgLy8gICAgIGNvbnN0IGZvdW5kQ29udGVudCA9IGVucm9sbWVudExpc3QgJiYgZW5yb2xtZW50TGlzdC5maW5kKChlbDogYW55KSA9PiBlbC5jb2xsZWN0aW9uSWQgPT09IGNvbnRlbnQuaWRlbnRpZmllcilcbiAgICAgICAgICAgIC8vICAgICBpZiAoZm91bmRDb250ZW50KSB7XG4gICAgICAgICAgICAvLyAgICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICBiYXRjaElkOiBmb3VuZENvbnRlbnQuYmF0Y2guYmF0Y2hJZCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICB1c2VySWQ6IGZvdW5kQ29udGVudC51c2VySWQsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgY291cnNlSWQ6IGZvdW5kQ29udGVudC5jb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgY29udGVudElkczogW10sXG4gICAgICAgICAgICAvLyAgICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAncHJvZ3Jlc3NkZXRhaWxzJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICBdLFxuICAgICAgICAgICAgLy8gICAgICAgICB9LFxuICAgICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgYXdhaXQgdGhpcy5mZXRjaENvbnRlbnRIaXN0b3J5VjIocmVxKS50b1Byb21pc2UoKS50aGVuKChwcm9ncmVzc2RhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBkYXRhOiBhbnkgID0gcHJvZ3Jlc3NkYXRhXG4gICAgICAgICAgICAvLyAgICAgICAgIGlmIChkYXRhLnJlc3VsdCAmJiBkYXRhLnJlc3VsdC5jb250ZW50TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgY29uc3QgY29tcGxldGVkQ291bnQgPSBkYXRhLnJlc3VsdC5jb250ZW50TGlzdC5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUucHJvZ3Jlc3MgPT09IDEwMClcbiAgICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLmNoZWNrQ29tcGxldGVkTGVhZm5vZGVzKGNvbXBsZXRlZExlYWZOb2RlcywgY29tcGxldGVkQ291bnQpXG4gICAgICAgICAgICAvLyAgICAgICAgICAgdG90YWxDb3VudCA9IGNvbXBsZXRlZExlYWZOb2Rlcy5sZW5ndGhcbiAgICAgICAgICAgIC8vICAgICAgICAgICBpbnByb2dyZXNzRGF0YUNoZWNrID0gaW5wcm9ncmVzc0RhdGFDaGVjayA/IGlucHJvZ3Jlc3NEYXRhQ2hlY2sgOiAgZGF0YS5yZXN1bHQuY29udGVudExpc3RcbiAgICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnVwZGF0ZVJlc3VtYURhdGEoaW5wcm9ncmVzc0RhdGFDaGVjaylcbiAgICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLm1hcENvbXBsZXRpb25QZXJjZW50YWdlKGNvbnRlbnQsIGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0KVxuICAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gcHJvZ3Jlc3NkYXRhXG4gICAgICAgICAgICAvLyAgICAgICB9KVxuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNXG4gICAgICAgICAgfHwgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPVVJTRVxuICAgICAgICAgIHx8IGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5TVEFOREFMT05FX0FTU0VTU01FTlRcbiAgICAgICAgICB8fCBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ1VSQVRFRF9QUk9HUkFNKSB7XG4gICAgICAgICAgLy8gdGhpcy5tYXBDb21wbGV0aW9uUGVyY2VudGFnZShjb250ZW50LCB0aGlzLnJlc3VtZURhdGEpXG4gICAgICAgICAgY29uc3QgZm91bmRQYXJlbnRDb250ZW50ID0gdGhpcy5maW5kRW5yb2xtZW50QnlDb2xsZWN0aW9uSWQoZW5yb2xtZW50TGlzdCwgY29sbGVjdGlvbklkIHx8IGNvbnRlbnQ/LmlkZW50aWZpZXIpXG4gICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmNvbnRlbnRMYW5nU3ZjLmdldENvbnRlbnRMYW5ndWFnZShjb250ZW50KVxuICAgICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgYmF0Y2hJZDogZm91bmRQYXJlbnRDb250ZW50Py5iYXRjaD8uYmF0Y2hJZCxcbiAgICAgICAgICAgICAgdXNlcklkOiBmb3VuZFBhcmVudENvbnRlbnQ/LnVzZXJJZCxcbiAgICAgICAgICAgICAgY291cnNlSWQ6IGZvdW5kUGFyZW50Q29udGVudD8uY29sbGVjdGlvbklkLFxuICAgICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgIGNvbnRlbnRJZHM6IFtdLFxuICAgICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgICAncHJvZ3Jlc3NkZXRhaWxzJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hDb250ZW50SGlzdG9yeVYyKHJlcSkudG9Qcm9taXNlKCkudGhlbigocHJvZ3Jlc3NkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHByb2dyZXNzZGF0YVxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5yZXN1bHQgJiYgZGF0YS5yZXN1bHQuY29udGVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBjb21wbGV0ZWRDb3VudCA9IGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5wcm9ncmVzcyA9PT0gMTAwKVxuICAgICAgICAgICAgICB0aGlzLmNoZWNrQ29tcGxldGVkTGVhZm5vZGVzKGNvbXBsZXRlZExlYWZOb2RlcywgY29tcGxldGVkQ291bnQpXG4gICAgICAgICAgICAgIHRvdGFsQ291bnQgPSBjb21wbGV0ZWRMZWFmTm9kZXMubGVuZ3RoXG4gICAgICAgICAgICAgIGlucHJvZ3Jlc3NEYXRhQ2hlY2sgPSBbLi4uaW5wcm9ncmVzc0RhdGFDaGVjaywgLi4uZGF0YS5yZXN1bHQuY29udGVudExpc3RdXG4gICAgICAgICAgICAgIC8vIGlucHJvZ3Jlc3NEYXRhQ2hlY2sgPSBpbnByb2dyZXNzRGF0YUNoZWNrID8gaW5wcm9ncmVzc0RhdGFDaGVjayA6ICBkYXRhLnJlc3VsdC5jb250ZW50TGlzdFxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJlc3VtYURhdGEoaW5wcm9ncmVzc0RhdGFDaGVjaylcbiAgICAgICAgICAgICAgdGhpcy5tYXBDb21wbGV0aW9uUGVyY2VudGFnZShjb250ZW50LCBkYXRhLnJlc3VsdC5jb250ZW50TGlzdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzZGF0YVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5wcm9ncmVzc0RhdGFDaGVjayAmJiBpbnByb2dyZXNzRGF0YUNoZWNrLmxlbmd0aCA9PT0gMCAmJiBmaXJzdFVuY29tcGxldGVDb3Vyc2UpIHtcbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkRGF0YSA9IHRoaXMud2lkZ2V0U3ZjLmdldEZpcnN0Q2hpbGRJbkhpZXJhcmNoeShmaXJzdFVuY29tcGxldGVDb3Vyc2UpXG4gICAgICAgICAgY29uc3QgY2hpbGRFbnJvbGxtZW50RGF0YSA9IGVucm9sbWVudExpc3QuZmluZCgoZWw6IGFueSkgPT5cbiAgICAgICAgICAgIGVsLmNvbGxlY3Rpb25JZCA9PT0gZmlyc3RVbmNvbXBsZXRlQ291cnNlLmlkZW50aWZpZXIpXG4gICAgICAgICAgY29uc3QgcmVzdW1lRGF0YSA9IFt7XG4gICAgICAgICAgICBjb250ZW50SWQ6IGZpcnN0Q2hpbGREYXRhLmlkZW50aWZpZXIsXG4gICAgICAgICAgICBiYXRjaElkOiBjaGlsZEVucm9sbG1lbnREYXRhICYmIGNoaWxkRW5yb2xsbWVudERhdGEuYmF0Y2hJZCxcbiAgICAgICAgICAgIGNvbXBsZXRlZENvdW50OiAxLFxuICAgICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IDAuMCxcbiAgICAgICAgICAgIHByb2dyZXNzOiAwLFxuICAgICAgICAgICAgdmlld0NvdW50OiAxLFxuICAgICAgICAgICAgY291cnNlSWQ6IGNoaWxkRW5yb2xsbWVudERhdGEgJiYgY2hpbGRFbnJvbGxtZW50RGF0YS5jb3Vyc2VJZCxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25JZDogY2hpbGRFbnJvbGxtZW50RGF0YSAmJiBjaGlsZEVucm9sbG1lbnREYXRhLmNvdXJzZUlkLFxuICAgICAgICAgICAgc3RhdHVzOiAxLFxuICAgICAgICAgIH1dXG4gICAgICAgICAgaW5wcm9ncmVzc0RhdGFDaGVjayA9IHJlc3VtZURhdGFcbiAgICAgICAgICB0aGlzLnVwZGF0ZVJlc3VtYURhdGEoaW5wcm9ncmVzc0RhdGFDaGVjaylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gY29uc3QgcGFyZW50Q29udGVudCA9IGVucm9sbWVudExpc3QuZmluZCgoZWw6IGFueSkgPT4gZWwuY29sbGVjdGlvbklkID09PSBjb250ZW50LmlkZW50aWZpZXIpXG4gICAgICAvLyBpZiAoIXBhcmVudENvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UpIHtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRQY3QgPSBNYXRoLmZsb29yKCh0b3RhbENvdW50IC8gbGVhZm5vZGVDb3VudCkgKiAxMDApXG4gICAgICBjb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID0gaXNOYU4oY2FsY3VsYXRlZFBjdCkgPyAwIDogY2FsY3VsYXRlZFBjdFxuICAgICAgY29udGVudC5jb21wbGV0aW9uU3RhdHVzID0gY29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDAgPyAyIDogKGNvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwID8gMSA6IDApXG4gICAgICBpZiAoY29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwICYmIGlucHJvZ3Jlc3NEYXRhQ2hlY2sgJiYgaW5wcm9ncmVzc0RhdGFDaGVjay5sZW5ndGggPT09IDAgJiYgIWZpcnN0VW5jb21wbGV0ZUNvdXJzZSkge1xuICAgICAgICBjb25zdCBmaXJzdENoaWxkRGF0YSA9IHRoaXMud2lkZ2V0U3ZjLmdldEZpcnN0Q2hpbGRJbkhpZXJhcmNoeShjb250ZW50KVxuICAgICAgICBjb25zdCBjaGlsZEVucm9sbG1lbnREYXRhID0gZW5yb2xtZW50TGlzdC5maW5kKChlbDogYW55KSA9PlxuICAgICAgICAgIGVsLmNvbGxlY3Rpb25JZCA9PT0gY29udGVudC5jaGlsZHJlblswXS5pZGVudGlmaWVyKVxuICAgICAgICBjb25zdCByZXN1bWVEYXRhID0gW3tcbiAgICAgICAgICBjb250ZW50SWQ6IGZpcnN0Q2hpbGREYXRhLmlkZW50aWZpZXIsXG4gICAgICAgICAgYmF0Y2hJZDogY2hpbGRFbnJvbGxtZW50RGF0YSAmJiBjaGlsZEVucm9sbG1lbnREYXRhLmJhdGNoSWQsXG4gICAgICAgICAgY29tcGxldGVkQ291bnQ6IDEsXG4gICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IDEwMCxcbiAgICAgICAgICBwcm9ncmVzczogMixcbiAgICAgICAgICB2aWV3Q291bnQ6IDEsXG4gICAgICAgICAgY291cnNlSWQ6IGNoaWxkRW5yb2xsbWVudERhdGEgJiYgY2hpbGRFbnJvbGxtZW50RGF0YS5jb3Vyc2VJZCxcbiAgICAgICAgICBjb2xsZWN0aW9uSWQ6IGNoaWxkRW5yb2xsbWVudERhdGEgJiYgY2hpbGRFbnJvbGxtZW50RGF0YS5jb3Vyc2VJZCxcbiAgICAgICAgICBzdGF0dXM6IDIsXG4gICAgICAgIH1dXG4gICAgICAgIGlucHJvZ3Jlc3NEYXRhQ2hlY2sgPSByZXN1bWVEYXRhXG4gICAgICAgIHRoaXMudXBkYXRlUmVzdW1hRGF0YShpbnByb2dyZXNzRGF0YUNoZWNrKVxuICAgICAgfVxuICAgICAgLy8gLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgY29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA9IHBhcmVudENvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgIC8vIC8vIH1cbiAgICAgIC8vIH0pXG4gICAgICAvLyB0aGlzLm1hcE1vZHVsZUR1cmF0aW9uQW5kUHJvZ3Jlc3MoY29udGVudCwgY29udGVudClcbiAgICAgIHRoaXMuY2FsbEhpcmFyY2h5UHJvZ3Jlc3NIYXNobWFwKGNvbnRlbnQpXG4gICAgICB0aGlzLmNoZWNrTW9kdWxlV2lzZURhdGEoY29udGVudClcbiAgICAgIC8vIENvbXB1dGUgbWlsZXN0b25lIGxvY2tpbmcgQUZURVIgcHJvZ3Jlc3MgZGF0YSBpcyBwb3B1bGF0ZWRcbiAgICAgIGlmIChjb250ZW50LmNvdXJzZUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUGF0aHdheScpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdXNlciBpcyBlbnJvbGxlZCBieSBjaGVja2luZyBpZiBlbnJvbGxtZW50IGRhdGEgZXhpc3RzXG4gICAgICAgIGNvbnN0IGlzVXNlckVucm9sbGVkID0gZW5yb2xtZW50TGlzdCAmJiBlbnJvbG1lbnRMaXN0Lmxlbmd0aCA+IDBcbiAgICAgICAgdGhpcy5jb21wdXRlTWlsZXN0b25lTG9ja2luZ1N0YXR1cyhpc1VzZXJFbnJvbGxlZClcbiAgICAgICAgLy8gRW5zdXJlIGhhc2htYXAgdXBkYXRlcyBhcmUgcHVibGlzaGVkIGZvciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgIHRoaXMuaGFzaG1hcCA9IHsgLi4udGhpcy5oYXNobWFwIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgIH1cbiAgfVxuICBjaGVja0NvbXBsZXRlZExlYWZub2RlcyhsZWFmTm9kZXM6IGFueSwgY29tcGxldGVkQ291bnQ6IGFueSkge1xuICAgIGlmIChjb21wbGV0ZWRDb3VudC5sZW5ndGggPiAwKSB7XG4gICAgICBjb21wbGV0ZWRDb3VudC5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIWxlYWZOb2Rlcy5pbmNsdWRlcyhlbGUuY29udGVudElkKSkge1xuICAgICAgICAgIGxlYWZOb2Rlcy5wdXNoKGVsZS5jb250ZW50SWQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLy8gYXN5bmMgZ2V0UHJvZ3Jlc3NGb3JDaGlsZENvdXJzZShyZXF1ZXN0OiBhbnksIGNvbnRlbnQ6IGFueSkge1xuICAvLyAgY29uc3QgZGF0YTogYW55ID0gICBhd2FpdCB0aGlzLmZldGNoQ29udGVudEhpc3RvcnlWMihyZXF1ZXN0KS50b1Byb21pc2UoKS5jYXRjaChfZXJyb3IgPT4ge30pXG4gIC8vICAgaWYgKGRhdGEucmVzdWx0ICYmIGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIHRoaXMubWFwQ29tcGxldGlvblBlcmNlbnRhZ2UoY29udGVudCwgZGF0YS5yZXN1bHQuY29udGVudExpc3QpXG4gIC8vIH1cbiAgLy8gfVxuXG4gIGZpbmRFbnJvbG1lbnRCeUNvbGxlY3Rpb25JZChlbnJvbG1lbnRMaXN0OiBhbnksIGlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIHJldHVybiBlbnJvbG1lbnRMaXN0ICYmIGVucm9sbWVudExpc3Q/Lmxlbmd0aCAmJiBlbnJvbG1lbnRMaXN0LmZpbmQoKGVsOiBhbnkpID0+IGVsPy5jb2xsZWN0aW9uSWQgPT09IGlkZW50aWZpZXIpXG4gIH1cblxuICBhc3luYyBtYXBDb21wbGV0aW9uQ2hpbGRQZXJjZW50YWdlUHJvZ3JhbShjb3Vyc2U6IGFueSkge1xuICAgIGlmIChjb3Vyc2UgJiYgY291cnNlLmNoaWxkcmVuKSB7XG4gICAgICBhd2FpdCBjb3Vyc2UuY2hpbGRyZW4ubWFwKGFzeW5jIChjb3Vyc2VDaGlsZDogYW55KSA9PiB7XG4gICAgICAgIGlmICgoY291cnNlQ2hpbGQgJiYgY291cnNlQ2hpbGQuY2hpbGRyZW4pIHx8IGNvdXJzZUNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFKSB7XG4gICAgICAgICAgdGhpcy5tYXBDb21wbGV0aW9uQ2hpbGRQZXJjZW50YWdlUHJvZ3JhbShjb3Vyc2VDaGlsZClcbiAgICAgICAgICBjb3Vyc2VbJ21vZHVsZUNvdW50J10gPSBjb3Vyc2VbJ21vZHVsZUNvdW50J10gPyBjb3Vyc2VbJ21vZHVsZUNvdW50J10gKyAxIDogMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvdXJzZUNoaWxkWydjb21wbGV0aW9uUGVyY2VudGFnZSddID0gMTAwXG4gICAgICAgICAgY291cnNlQ2hpbGRbJ2NvbXBsZXRpb25TdGF0dXMnXSA9IDJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbWFwTW9kdWxlRHVyYXRpb25BbmRQcm9ncmVzcyhjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQgfCBudWxsLCBwYXJlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwpIHtcbiAgICBpZiAoY29udGVudCAmJiBjb250ZW50LmNoaWxkcmVuKSB7XG4gICAgICBpZiAoY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1PRFVMRSkge1xuICAgICAgICAvLyBjb250ZW50LmNoaWxkcmVuLm1hcCgoaXRlbTogTnNDb250ZW50LklDb250ZW50KT0+IHtcbiAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG4gICAgICAgIGNvbnRlbnQgPSB0aGlzLmdldENhbGN1bGF0aW9uc0Zyb21DaGlsZHJlbihjb250ZW50KVxuICAgICAgICAvLyB9KVxuICAgICAgfVxuXG4gICAgICBjb250ZW50LmNoaWxkcmVuLm1hcCgoaXRlbTogTnNDb250ZW50LklDb250ZW50KSA9PiB7XG4gICAgICAgIC8vIGlmIChpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFKSB7XG4gICAgICAgIC8vICAgdGhpcy5tYXBNb2R1bGVEdXJhdGlvbkFuZFByb2dyZXNzKGl0ZW0sIHBhcmVudClcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICB0aGlzLm1hcE1vZHVsZUR1cmF0aW9uQW5kUHJvZ3Jlc3MoaXRlbSwgcGFyZW50KVxuICAgICAgICAvLyB9XG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICB0aGlzLm1hcE1vZHVsZUR1cmF0aW9uQW5kUHJvZ3Jlc3MoaXRlbSwgcGFyZW50KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVIaXJhcmNoeVByb2dyZXNzSGFzaG1hcChoaWVyYXJjaHlEYXRhOiBOc0NvbnRlbnQuSUNvbnRlbnQsIHJvb3RDb3Vyc2VDYXRlZ29yeT86IHN0cmluZywgcGFyZW50SWQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoaGllcmFyY2h5RGF0YSAmJiBoaWVyYXJjaHlEYXRhLmNoaWxkcmVuKSB7XG4gICAgICBoaWVyYXJjaHlEYXRhLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBOc0NvbnRlbnQuSUNvbnRlbnQpID0+IHtcbiAgICAgICAgLy8gSU1QT1JUQU5UOiBQYXNzIHRoZSBjdXJyZW50IGhpZXJhcmNoeURhdGEncyBpZGVudGlmaWVyIGFzIHRoZSBwYXJlbnQgZm9yIGNoaWxkcmVuXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyBjb3JyZWN0IHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGluIHRoZSBoYXNobWFwXG4gICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5jaGlsZHJlbikge1xuICAgICAgICAgIHRoaXMuY3JlYXRlSGlyYXJjaHlQcm9ncmVzc0hhc2htYXAoY2hpbGQsIHJvb3RDb3Vyc2VDYXRlZ29yeSwgaGllcmFyY2h5RGF0YS5pZGVudGlmaWVyKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByaW1hcnlDYXQgPSBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgYXMgc3RyaW5nXG4gICAgICAgIGNvbnN0IGNvdXJzZUNhdCA9IChjaGlsZC5jb3Vyc2VDYXRlZ29yeSB8fCBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgfHwgJycpIGFzIHN0cmluZ1xuICAgICAgICBjb25zdCBpc01pbGVzdG9uZSA9IHByaW1hcnlDYXQgPT09ICdNaWxlc3RvbmUnIHx8IGNvdXJzZUNhdCA9PT0gJ01pbGVzdG9uZSdcbiAgICAgICAgY29uc3QgaXNDb2xsZWN0aW9uID0gY2hpbGQubWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLkNPTExFQ1RJT05cbiAgICAgICAgY29uc3QgaXNNb2R1bGUgPSBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1PRFVMRVxuICAgICAgICBjb25zdCBpc1Jlc291cmNlID0gY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5SRVNPVVJDRSB8fFxuICAgICAgICAgIGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJBQ1RJQ0VfUkVTT1VSQ0UgfHxcbiAgICAgICAgICBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkZJTkFMX0FTU0VTU01FTlQgfHxcbiAgICAgICAgICBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPTVBfQVNTRVNTTUVOVFxuICAgICAgICBjb25zdCBpc0xlYXJuaW5nUGF0aHdheSA9IHJvb3RDb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29udGVudCBpcyBtYW5kYXRvcnkgKGlzTWFuZGF0b3J5IGZsYWcgb3IgbWFuZGF0b3J5IHByb3BlcnR5KVxuICAgICAgICAvLyBCeSBkZWZhdWx0LCBjb3Vyc2VzIGFyZSBtYW5kYXRvcnkgdW5sZXNzIGlzTWFuZGF0b3J5IGlzIGV4cGxpY2l0bHkgZmFsc2VcbiAgICAgICAgbGV0IGlzTWFuZGF0b3J5ID0gdHJ1ZVxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkLmlzTWFuZGF0b3J5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlzTWFuZGF0b3J5ID0gY2hpbGQuaXNNYW5kYXRvcnkgIT09IGZhbHNlXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIChjaGlsZCBhcyBhbnkpLm1hbmRhdG9yeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBpc01hbmRhdG9yeSA9IChjaGlsZCBhcyBhbnkpLm1hbmRhdG9yeSAhPT0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBwYXNzZWQgcGFyZW50SWQgKGZyb20gaXRlcmF0aW9uIGNvbnRleHQpIG9yIGZhbGxiYWNrIHRvIGNoaWxkPy5wYXJlbnQgKGZyb20gQVBJKVxuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgbmVzdGVkIGNoaWxkcmVuIChlLmcuLCBhc3Nlc3NtZW50cyBpbnNpZGUgY291cnNlcykgaGF2ZSBjb3JyZWN0IHBhcmVudCByZWZlcmVuY2VzXG4gICAgICAgIGNvbnN0IGNvcnJlY3RQYXJlbnRJZCA9IGhpZXJhcmNoeURhdGEuaWRlbnRpZmllciB8fCBjaGlsZD8ucGFyZW50XG5cbiAgICAgICAgbGV0IGxvY2FsTWFwOiBhbnkgPSB7XG4gICAgICAgICAgcGFyZW50OiBjb3JyZWN0UGFyZW50SWQsXG4gICAgICAgICAgaWRlbnRpZmllcjogY2hpbGQuaWRlbnRpZmllcixcbiAgICAgICAgICBsZWFmTm9kZXNDb3VudDogY2hpbGQubGVhZk5vZGVzQ291bnQgfHwgbnVsbCxcbiAgICAgICAgICBsZWFmTm9kZXM6IGNoaWxkLmxlYWZOb2RlcyB8fCBbXSxcbiAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogY2hpbGQuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgY2hpbGQucHJvZ3Jlc3MgfHwgMCxcbiAgICAgICAgICBjb21wbGV0aW9uU3RhdHVzOiB0aGlzLnNhZmVDb21wbGV0aW9uU3RhdHVzKGNoaWxkLmNvbXBsZXRpb25TdGF0dXMgfHwgY2hpbGQuc3RhdHVzKSxcbiAgICAgICAgICBzdGF0dXM6IHRoaXMuc2FmZUNvbXBsZXRpb25TdGF0dXMoY2hpbGQuc3RhdHVzIHx8IGNoaWxkLmNvbXBsZXRpb25TdGF0dXMpLFxuICAgICAgICAgIHByb2dyZXNzOiBjaGlsZC5wcm9ncmVzcyxcbiAgICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IGNoaWxkLnByaW1hcnlDYXRlZ29yeSxcbiAgICAgICAgICBjb3Vyc2VDYXRlZ29yeTogY291cnNlQ2F0LFxuICAgICAgICAgIGR1cmF0aW9uOiBjaGlsZC5kdXJhdGlvbiB8fCAwLFxuICAgICAgICAgIGV4cGVjdGVkRHVyYXRpb246IGNoaWxkLmV4cGVjdGVkRHVyYXRpb24gfHwgMCxcbiAgICAgICAgICAvLyBBZGRpdGlvbmFsIG1ldGFkYXRhIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cbiAgICAgICAgICBtaW1lVHlwZTogY2hpbGQubWltZVR5cGUsXG4gICAgICAgICAgaXNMb2NrZWQ6IGNoaWxkLmlzTG9ja2VkIHx8IGZhbHNlLFxuICAgICAgICAgIGFydGlmYWN0VXJsOiBjaGlsZC5hcnRpZmFjdFVybCB8fCBudWxsLFxuICAgICAgICAgIG5hbWU6IGNoaWxkLm5hbWUgfHwgJycsXG4gICAgICAgICAgY29udGVudFR5cGU6IGNoaWxkLmNvbnRlbnRUeXBlIHx8ICcnLFxuICAgICAgICAgIC8vIFByZS1jb21wdXRlZCBmbGFncyBmb3IgTGVhcm5pbmcgUGF0aHdheVxuICAgICAgICAgIGlzTWlsZXN0b25lOiBpc01pbGVzdG9uZSxcbiAgICAgICAgICBpc0NvbGxlY3Rpb246IGlzQ29sbGVjdGlvbixcbiAgICAgICAgICBpc01vZHVsZTogaXNNb2R1bGUsXG4gICAgICAgICAgaXNSZXNvdXJjZTogaXNSZXNvdXJjZSxcbiAgICAgICAgICBpc0xlYXJuaW5nUGF0aHdheTogaXNMZWFybmluZ1BhdGh3YXksXG4gICAgICAgICAgaXNNYW5kYXRvcnk6IGlzTWFuZGF0b3J5LFxuICAgICAgICAgIC8vIE1pbGVzdG9uZSBzcGVjaWZpYyBkYXRhXG4gICAgICAgICAgbWlsZXN0b25lSW5kZXg6IChjaGlsZCBhcyBhbnkpLm1pbGVzdG9uZUluZGV4LFxuICAgICAgICAgIGNvbXBsZXRlZExlYWZOb2Rlc0NvdW50OiAoY2hpbGQgYXMgYW55KS5jb21wbGV0ZWRMZWFmTm9kZXNDb3VudCB8fCAwLFxuICAgICAgICAgIC8vIFByZS1hc3Nlc3NtZW50IGZsYWcgKGZvciBtaWxlc3RvbmUgZ2F0aW5nKVxuICAgICAgICAgIGlzUHJlQXNzZXNzbWVudDogKGNoaWxkIGFzIGFueSkuaXNQcmVBc3Nlc3NtZW50IHx8IGZhbHNlLFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVidWcgbG9nZ2luZyBmb3IgbWlsZXN0b25lc1xuICAgICAgICBpZiAoaXNNaWxlc3RvbmUpIHtcbiAgICAgICAgICAvLyBQcm9ncmVzcyB0cmFja2VkIGZvciBtaWxlc3RvbmVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlYnVnIGxvZ2dpbmcgZm9yIGFzc2Vzc21lbnQgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHNcbiAgICAgICAgLy8gTm90ZTogRklOQUxfQVNTRVNTTUVOVCBtYXBzIHRvICdDb3Vyc2UgQXNzZXNzbWVudCcgaW4gdGhlIGVudW0sIG5vdCAnRmluYWwgQXNzZXNzbWVudCdcbiAgICAgICAgY29uc3QgaXNBc3Nlc3NtZW50ID0gXG4gICAgICAgICAgY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSAnQ291cnNlIEFzc2Vzc21lbnQnIHx8XG4gICAgICAgICAgY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSAnU3RhbmRhbG9uZSBBc3Nlc3NtZW50JyB8fFxuICAgICAgICAgIGNoaWxkLm1pbWVUeXBlID09PSAnYXBwbGljYXRpb24vdm5kLnN1bmJpcmQucXVlc3Rpb25zZXQnXG4gICAgICAgIFxuICAgICAgICBpZiAoaXNBc3Nlc3NtZW50KSB7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlYnVnOiBMb2cgd2hlbiBhZGRpbmcgaXRlbSB3aXRoIGlzUHJlQXNzZXNzbWVudCBmbGFnIHRvIGhhc2htYXBcbiAgICAgICAgaWYgKChjaGlsZCBhcyBhbnkpLmlzUHJlQXNzZXNzbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5SNIFtIQVNITUFQIEJVSUxEXSBBZGRpbmcgcHJlLWFzc2Vzc21lbnQgdG8gaGFzaG1hcDonLCB7XG4gICAgICAgICAgICBpZDogY2hpbGQuaWRlbnRpZmllcixcbiAgICAgICAgICAgIG5hbWU6IGNoaWxkLm5hbWUsXG4gICAgICAgICAgICBpc1ByZUFzc2Vzc21lbnQ6IGxvY2FsTWFwLmlzUHJlQXNzZXNzbWVudCxcbiAgICAgICAgICAgIHBhcmVudDogbG9jYWxNYXAucGFyZW50LFxuICAgICAgICAgICAgY29tcGxldGlvblN0YXR1czogbG9jYWxNYXAuY29tcGxldGlvblN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1czogbG9jYWxNYXAuc3RhdHVzXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFzaG1hcFtjaGlsZC5pZGVudGlmaWVyXSA9IGxvY2FsTWFwXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVQcmVBc3Nlc3NtZW50SGlyYXJjaHlQcm9ncmVzc0hhc2htYXAoaGllcmFyY2h5RGF0YTogTnNDb250ZW50LklDb250ZW50KSB7XG4gICAgaWYgKGhpZXJhcmNoeURhdGEgJiYgaGllcmFyY2h5RGF0YS5wcmVFbnJvbG1lbnRSZXNvdXJjZXMpIHtcbiAgICAgIGhpZXJhcmNoeURhdGEucHJlRW5yb2xtZW50UmVzb3VyY2VzLmZvckVhY2goKGNoaWxkOiBOc0NvbnRlbnQuSUNvbnRlbnQpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLnByZUVucm9sbWVudFJlc291cmNlcykge1xuICAgICAgICAgIHRoaXMuY3JlYXRlUHJlQXNzZXNzbWVudEhpcmFyY2h5UHJvZ3Jlc3NIYXNobWFwKGNoaWxkKVxuICAgICAgICB9XG4gICAgICAgIGxldCBsb2NhbE1hcCA9IHt9XG4gICAgICAgIGxvY2FsTWFwID0ge1xuICAgICAgICAgIHBhcmVudDogY2hpbGQ/LnBhcmVudCxcbiAgICAgICAgICBpZGVudGlmaWVyOiBjaGlsZC5pZGVudGlmaWVyLFxuICAgICAgICAgIGxlYWZOb2Rlc0NvdW50OiBjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCBudWxsLFxuICAgICAgICAgIGxlYWZOb2RlczogY2hpbGQubGVhZk5vZGVzIHx8IFtdLFxuICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBjaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBjaGlsZC5wcm9ncmVzcyxcbiAgICAgICAgICBjb21wbGV0aW9uU3RhdHVzOiB0aGlzLnNhZmVDb21wbGV0aW9uU3RhdHVzKGNoaWxkLmNvbXBsZXRpb25TdGF0dXMpLFxuICAgICAgICAgIHN0YXR1czogdGhpcy5zYWZlQ29tcGxldGlvblN0YXR1cyhjaGlsZC5zdGF0dXMgfHwgY2hpbGQuY29tcGxldGlvblN0YXR1cyksXG4gICAgICAgICAgcHJvZ3Jlc3M6IGNoaWxkLnByb2dyZXNzLFxuICAgICAgICAgIHByaW1hcnlDYXRlZ29yeTogY2hpbGQucHJpbWFyeUNhdGVnb3J5LFxuICAgICAgICAgIGNvdXJzZUNhdGVnb3J5OiBjaGlsZC5jb3Vyc2VDYXRlZ29yeSB8fCBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgfHwgJycsXG4gICAgICAgICAgZHVyYXRpb246IGNoaWxkLmR1cmF0aW9uIHx8IDAsXG4gICAgICAgICAgZXhwZWN0ZWREdXJhdGlvbjogY2hpbGQuZXhwZWN0ZWREdXJhdGlvbiB8fCAwLFxuICAgICAgICAgIC8vIE1hcmsgYXMgcHJlLWFzc2Vzc21lbnQgT05MWSBpZiBleHBsaWNpdGx5IHNldCAtIGRvIE5PVCBkZWZhdWx0IHRvIHRydWVcbiAgICAgICAgICBpc1ByZUFzc2Vzc21lbnQ6IGNoaWxkLmlzUHJlQXNzZXNzbWVudCB8fCBmYWxzZSxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhc2htYXBbY2hpbGQuaWRlbnRpZmllcl0gPSBsb2NhbE1hcFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2FsbEhpcmFyY2h5UHJvZ3Jlc3NIYXNobWFwKGhpZXJhcmNoeURhdGE6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwpIHtcbiAgICBpZiAoaGllcmFyY2h5RGF0YSkge1xuICAgICAgY29uc3Qgcm9vdENvdXJzZUNhdGVnb3J5ID0gaGllcmFyY2h5RGF0YS5jb3Vyc2VDYXRlZ29yeSB8fCBoaWVyYXJjaHlEYXRhLnByaW1hcnlDYXRlZ29yeSB8fCAnJ1xuICAgICAgY29uc3QgaXNMZWFybmluZ1BhdGh3YXkgPSByb290Q291cnNlQ2F0ZWdvcnkgPT09ICdMZWFybmluZyBQYXRod2F5J1xuXG4gICAgICAvLyBDUklUSUNBTDogT25seSBjbGVhciBoYXNobWFwIHdoZW4gbmF2aWdhdGluZyB0byBESUZGRVJFTlQgY29udGVudFxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyBsb3NzIG9mIHJlYWwtdGltZSBwcm9ncmVzcyB1cGRhdGVzIHdoZW4gY29udGVudCBpcyBiZWluZyBhY3RpdmVseSBjb25zdW1lZFxuICAgICAgLy8gQ2xlYXIgd2hlbjpcbiAgICAgIC8vIDEuIERpZmZlcmVudCBMZWFybmluZyBQYXRod2F5cyAod2hpY2ggbWF5IGhhdmUgbWlsZXN0b25lcyB3aXRoIHNhbWUgZ2VuZXJpYyBJRHMgbGlrZSBNMSwgTTIpXG4gICAgICAvLyAyLiBMZWFybmluZyBQYXRod2F5IHRvIHJlZ3VsYXIgQ291cnNlIChwcmV2ZW50cyBzdGFsZSBtaWxlc3RvbmUgZGF0YSlcbiAgICAgIC8vIDMuIFJlZ3VsYXIgQ291cnNlIHRvIExlYXJuaW5nIFBhdGh3YXlcbiAgICAgIC8vIDQuIERpZmZlcmVudCByZWd1bGFyIENvdXJzZVxuICAgICAgY29uc3QgaXNOZXdDb250ZW50ID0gdGhpcy5jdXJyZW50Um9vdENvbnRlbnRJZCAhPT0gaGllcmFyY2h5RGF0YS5pZGVudGlmaWVyXG4gICAgICBpZiAoaXNOZXdDb250ZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGDwn6e5IFtIQVNITUFQXSBDbGVhcmluZyBoYXNobWFwIC0gbmF2aWdhdGluZyBmcm9tICR7dGhpcy5jdXJyZW50Um9vdENvbnRlbnRJZH0gdG8gJHtoaWVyYXJjaHlEYXRhLmlkZW50aWZpZXJ9YClcbiAgICAgICAgdGhpcy5oYXNobWFwID0ge31cbiAgICAgICAgdGhpcy5jdXJyZW50Um9vdENvbnRlbnRJZCA9IGhpZXJhcmNoeURhdGEuaWRlbnRpZmllclxuICAgICAgfVxuXG4gICAgICB0aGlzLmhhc2htYXBbaGllcmFyY2h5RGF0YS5pZGVudGlmaWVyXSA9IHtcbiAgICAgICAgcGFyZW50OiBoaWVyYXJjaHlEYXRhLnBhcmVudCxcbiAgICAgICAgaWRlbnRpZmllcjogaGllcmFyY2h5RGF0YS5pZGVudGlmaWVyLFxuICAgICAgICBsZWFmTm9kZXNDb3VudDogaGllcmFyY2h5RGF0YS5sZWFmTm9kZXNDb3VudCB8fCBudWxsLFxuICAgICAgICBsZWFmTm9kZXM6IGhpZXJhcmNoeURhdGEubGVhZk5vZGVzIHx8IFtdLFxuICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogaGllcmFyY2h5RGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBoaWVyYXJjaHlEYXRhLnByb2dyZXNzIHx8IDAsXG4gICAgICAgIGNvbXBsZXRpb25TdGF0dXM6IHRoaXMuc2FmZUNvbXBsZXRpb25TdGF0dXMoaGllcmFyY2h5RGF0YS5jb21wbGV0aW9uU3RhdHVzKSxcbiAgICAgICAgcHJvZ3Jlc3M6IGhpZXJhcmNoeURhdGEucHJvZ3Jlc3MsXG4gICAgICAgIHByaW1hcnlDYXRlZ29yeTogaGllcmFyY2h5RGF0YS5wcmltYXJ5Q2F0ZWdvcnksXG4gICAgICAgIGNvdXJzZUNhdGVnb3J5OiByb290Q291cnNlQ2F0ZWdvcnksXG4gICAgICAgIGV4cGVjdGVkRHVyYXRpb246IGhpZXJhcmNoeURhdGEuZXhwZWN0ZWREdXJhdGlvbiB8fCAwLFxuICAgICAgICAvLyBBZGRpdGlvbmFsIG1ldGFkYXRhXG4gICAgICAgIG1pbWVUeXBlOiBoaWVyYXJjaHlEYXRhLm1pbWVUeXBlLFxuICAgICAgICBpc0xvY2tlZDogaGllcmFyY2h5RGF0YS5pc0xvY2tlZCB8fCBmYWxzZSxcbiAgICAgICAgYXJ0aWZhY3RVcmw6IGhpZXJhcmNoeURhdGEuYXJ0aWZhY3RVcmwgfHwgbnVsbCxcbiAgICAgICAgbmFtZTogaGllcmFyY2h5RGF0YS5uYW1lIHx8ICcnLFxuICAgICAgICBjb250ZW50VHlwZTogaGllcmFyY2h5RGF0YS5jb250ZW50VHlwZSB8fCAnJyxcbiAgICAgICAgaXNNaWxlc3RvbmU6IGZhbHNlLFxuICAgICAgICBpc0NvbGxlY3Rpb246IGhpZXJhcmNoeURhdGEubWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLkNPTExFQ1RJT04sXG4gICAgICAgIGlzTW9kdWxlOiBoaWVyYXJjaHlEYXRhLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFLFxuICAgICAgICBpc1Jlc291cmNlOiBmYWxzZSxcbiAgICAgICAgaXNMZWFybmluZ1BhdGh3YXk6IGlzTGVhcm5pbmdQYXRod2F5LFxuICAgICAgfVxuICAgICAgaWYgKGhpZXJhcmNoeURhdGEucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DVVJBVEVEX1BST0dSQU0gJiZcbiAgICAgICAgaGllcmFyY2h5RGF0YS5jb21wYXRpYmlsaXR5TGV2ZWwgPj0gNSAmJiBoaWVyYXJjaHlEYXRhLmNvbnRleHRMb2NraW5nVHlwZSAmJlxuICAgICAgICBoaWVyYXJjaHlEYXRhLmNvbnRleHRMb2NraW5nVHlwZSA9PT0gTnNDb250ZW50LkVDb250ZXh0TG9ja2luZ1R5cGUuQ09VUlNFX0FTU0VTU01FTlRfT05MWSkge1xuICAgICAgICB0aGlzLmhhc2htYXBbaGllcmFyY2h5RGF0YS5pZGVudGlmaWVyXSA9IHtcbiAgICAgICAgICAuLi50aGlzLmhhc2htYXBbaGllcmFyY2h5RGF0YS5pZGVudGlmaWVyXSxcbiAgICAgICAgICBjb250ZXh0TG9ja2luZ1R5cGU6IGhpZXJhcmNoeURhdGEuY29udGV4dExvY2tpbmdUeXBlLFxuICAgICAgICAgIGNvbXBhdGliaWxpdHlMZXZlbDogaGllcmFyY2h5RGF0YS5jb21wYXRpYmlsaXR5TGV2ZWwsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlYXRlSGlyYXJjaHlQcm9ncmVzc0hhc2htYXAoaGllcmFyY2h5RGF0YSwgcm9vdENvdXJzZUNhdGVnb3J5KVxuICAgICAgLy8gTk9URTogY29tcHV0ZU1pbGVzdG9uZUxvY2tpbmdTdGF0dXMgaXMgY2FsbGVkIEFGVEVSIHByb2dyZXNzIGRhdGEgaXMgcG9wdWxhdGVkXG4gICAgICAvLyBpbiBtYXBDb21wbGV0aW9uUGVyY2VudGFnZVByb2dyYW0sIG5vdCBoZXJlIHdoZXJlIGNvbXBsZXRpb24gZGF0YSBpcyBzdGlsbCAwXG4gICAgICB0aGlzLmhhc2htYXAgPSB7IC4uLnRoaXMuaGFzaG1hcCB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByZS1jb21wdXRlIG1pbGVzdG9uZSBsb2NraW5nIHN0YXR1cyBmb3IgYWxsIG1pbGVzdG9uZXMgaW4gTGVhcm5pbmcgUGF0aHdheVxuICAgKiBUaGlzIGF2b2lkcyBleHBlbnNpdmUgY2FsY3VsYXRpb25zIGluIGNvbXBvbmVudCBnZXR0ZXJzXG4gICAqIFxuICAgKiBMb2NraW5nIFJ1bGVzOlxuICAgKiAwLiBJZiB1c2VyIGlzIG5vdCBlbnJvbGxlZCwgQUxMIG1pbGVzdG9uZXMgYXJlIGxvY2tlZFxuICAgKiAxLiBBbGwgbWlsZXN0b25lcyBhcmUgbG9ja2VkIGJ5IGRlZmF1bHRcbiAgICogMi4gTWlsZXN0b25lIDEgKE0xKSB1bmxvY2tzIHdoZW4gcHJlLWFzc2Vzc21lbnQgaXMgY29tcGxldGVkXG4gICAqIDMuIE1pbGVzdG9uZSBOIChOID4gMSkgdW5sb2NrcyB3aGVuOlxuICAgKiAgICAtIEFsbCBtYW5kYXRvcnkgbGVhcm5pbmcgaXRlbXMgaW4gTWlsZXN0b25lIE4tMSBhcmUgY29tcGxldGVkXG4gICAqICAgIC0gVGhlIGFzc2Vzc21lbnQgb2YgTWlsZXN0b25lIE4tMSBpcyBjb21wbGV0ZWRcbiAgICovXG4gIC8qKlxuICAgKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgICogTEVBUk5JTkcgUEFUSFdBWSBNSUxFU1RPTkUgTE9DS0lORyBTWVNURU0gLSBTSU5HTEUgU09VUkNFIE9GIFRSVVRIXG4gICAqIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgKiBcbiAgICogVGhpcyBtZXRob2QgaXMgdGhlIFNJTkdMRSBTT1VSQ0UgT0YgVFJVVEggZm9yIGFsbCBtaWxlc3RvbmUgYW5kIGFzc2Vzc21lbnQgbG9ja2luZy5cbiAgICogQWxsIGxvY2tpbmcgbG9naWMgaXMgY29tcHV0ZWQgaGVyZSBhbmQgc3RvcmVkIGluIHRoZSBoYXNobWFwLlxuICAgKiBDb21wb25lbnRzIFJFQUQgT05MWSBmcm9tIHRoZSBoYXNobWFwIC0gdGhleSBkbyBOT1QgY29tcHV0ZSBsb2NrcyB0aGVtc2VsdmVzLlxuICAgKiBcbiAgICogTE9DS0lORyBSVUxFUzpcbiAgICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAqIDEuIERFRkFVTFQgU1RBVEU6IEFsbCBtaWxlc3RvbmVzIGFyZSBMT0NLRUQgYnkgZGVmYXVsdFxuICAgKiBcbiAgICogMi4gTUlMRVNUT05FIDEgVU5MT0NLSU5HOlxuICAgKiAgICAtIFVubG9ja3Mgd2hlbjogUHJlLWFzc2Vzc21lbnQgaXMgMTAwJSBjb21wbGV0ZVxuICAgKiAgICAtIExvY2sgbWVzc2FnZTogXCJDb21wbGV0ZSB0aGUgcHJlbGltaW5hcnkgYXNzZXNzbWVudCB0byB1bmxvY2sgdGhpcyBtaWxlc3RvbmVcIlxuICAgKiBcbiAgICogMy4gTUlMRVNUT05FIE4gKE4gPj0gMikgVU5MT0NLSU5HOlxuICAgKiAgICAtIFVubG9ja3Mgd2hlbjogUHJldmlvdXMgbWlsZXN0b25lIGlzIDEwMCUgY29tcGxldGVcbiAgICogICAgLSBQcmV2aW91cyBtaWxlc3RvbmUgaXMgY29tcGxldGUgd2hlbjpcbiAgICogICAgICBhKSBBbGwgTUFOREFUT1JZIGNvdXJzZXMgYXJlIDEwMCUgY29tcGxldGVcbiAgICogICAgICBiKSBNaWxlc3RvbmUgYXNzZXNzbWVudCBpcyAxMDAlIGNvbXBsZXRlXG4gICAqICAgIC0gTG9jayBtZXNzYWdlOiBcIkNvbXBsZXRlIGFsbCBtYW5kYXRvcnkgY29udGVudCBhbmQgYXNzZXNzbWVudCBpbiBNaWxlc3RvbmUgTi0xXCJcbiAgICogXG4gICAqIDQuIEFTU0VTU01FTlQgTE9DS0lORyAod2l0aGluIHVubG9ja2VkIG1pbGVzdG9uZXMpOlxuICAgKiAgICAtIEFzc2Vzc21lbnQgbG9ja2VkIHVudGlsOiBBbGwgTUFOREFUT1JZIGNvdXJzZXMgaW4gU0FNRSBtaWxlc3RvbmUgY29tcGxldGVcbiAgICogICAgLSBPcHRpb25hbCBjb3Vyc2VzIGRvIE5PVCBhZmZlY3QgYXNzZXNzbWVudCBsb2NraW5nXG4gICAqICAgIC0gQXNzZXNzbWVudCBsb2NrIG1lc3NhZ2U6IFwiQ29tcGxldGUgYWxsIG1hbmRhdG9yeSBpdGVtcyB0byB1bmxvY2sgdGhlIGFzc2Vzc21lbnRcIlxuICAgKiAgICAtIE9uY2UgYXNzZXNzbWVudCBpcyBjb21wbGV0ZWQsIGl0IHN0YXlzIHVubG9ja2VkXG4gICAqIFxuICAgKiA1LiBQQVJFTlQgTUlMRVNUT05FIExPQ0tJTkc6XG4gICAqICAgIC0gQWxsIGNvbnRlbnQgaW5zaWRlIGxvY2tlZCBtaWxlc3RvbmUgZ2V0cyBpc1BhcmVudE1pbGVzdG9uZUxvY2tlZCA9IHRydWVcbiAgICogICAgLSBUaGlzIGluY2x1ZGVzIGNvdXJzZXMsIGFzc2Vzc21lbnRzLCBuZXN0ZWQgcmVzb3VyY2VzXG4gICAqIFxuICAgKiA2LiBNQU5EQVRPUlkgdnMgT1BUSU9OQUw6XG4gICAqICAgIC0gQnkgZGVmYXVsdCwgQUxMIGNvdXJzZXMgYXJlIG1hbmRhdG9yeSAodW5sZXNzIGlzTWFuZGF0b3J5OiBmYWxzZSlcbiAgICogICAgLSBPcHRpb25hbCBjb3Vyc2VzIGRvIE5PVCBibG9jayBwcm9ncmVzc2lvblxuICAgKiBcbiAgICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICAqL1xuICBwdWJsaWMgY29tcHV0ZU1pbGVzdG9uZUxvY2tpbmdTdGF0dXMoaXNFbnJvbGxlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zb2xlLmxvZygn8J+agCBbTUlMRVNUT05FIExPQ0tdIGNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzIENBTExFRCB3aXRoIGlzRW5yb2xsZWQ6JywgaXNFbnJvbGxlZClcbiAgICBjb25zb2xlLmxvZygn8J+agCBbTUlMRVNUT05FIExPQ0tdIEhhc2htYXAgc2l6ZTonLCBPYmplY3Qua2V5cyh0aGlzLmhhc2htYXApLmxlbmd0aClcbiAgICBcbiAgICBpZiAoIXRoaXMuaGFzaG1hcCB8fCBPYmplY3Qua2V5cyh0aGlzLmhhc2htYXApLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKCfimqDvuI8gIEhhc2htYXAgaXMgZW1wdHkgLSBjYW5ub3QgY29tcHV0ZSBtaWxlc3RvbmUgbG9ja2luZycpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgXG4gICAgXG4gICAgLy8gU1RFUCAxOiBGaW5kIGFsbCBtaWxlc3RvbmVzIGFuZCBzb3J0IGJ5IGluZGV4XG4gICAgY29uc3QgbWlsZXN0b25lRW50cmllcyA9IE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcClcbiAgICAgIC5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaGFzaG1hcFtrZXldXG4gICAgICAgIHJldHVybiBpdGVtLmlzTWlsZXN0b25lIHx8IGl0ZW0ucHJpbWFyeUNhdGVnb3J5ID09PSAnTWlsZXN0b25lJyB8fCBpdGVtLmNvdXJzZUNhdGVnb3J5ID09PSAnTWlsZXN0b25lJ1xuICAgICAgfSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1BID0gdGhpcy5oYXNobWFwW2FdXG4gICAgICAgIGNvbnN0IGl0ZW1CID0gdGhpcy5oYXNobWFwW2JdXG4gICAgICAgIGlmIChpdGVtQS5taWxlc3RvbmVJbmRleCAhPT0gdW5kZWZpbmVkICYmIGl0ZW1CLm1pbGVzdG9uZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbUEubWlsZXN0b25lSW5kZXggLSBpdGVtQi5taWxlc3RvbmVJbmRleFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG51bUEgPSBwYXJzZUludChhLnJlcGxhY2UoL1xcRC9nLCAnJykpIHx8IDBcbiAgICAgICAgY29uc3QgbnVtQiA9IHBhcnNlSW50KGIucmVwbGFjZSgvXFxEL2csICcnKSkgfHwgMFxuICAgICAgICByZXR1cm4gbnVtQSAtIG51bUJcbiAgICAgIH0pXG5cbiAgICBpZiAobWlsZXN0b25lRW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBcbiAgICBtaWxlc3RvbmVFbnRyaWVzLmZvckVhY2goKGlkLCBpKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhgICAgTSR7aSArIDF9OiAke3RoaXMuaGFzaG1hcFtpZF0ubmFtZSB8fCBpZH1gKVxuICAgIH0pXG5cbiAgICAvLyBTVEVQIDI6IElmIHVzZXIgTk9UIGVucm9sbGVkLCBsb2NrIEFMTCBtaWxlc3RvbmVzIGFuZCBjaGlsZHJlblxuICAgIGlmICghaXNFbnJvbGxlZCkge1xuICAgICAgY29uc29sZS5sb2coJ1xcbuKaoO+4jyAgVXNlciBOT1QgZW5yb2xsZWQgLSBsb2NraW5nIEFMTCBtaWxlc3RvbmVzIGFuZCBjaGlsZHJlbicpXG4gICAgICBtaWxlc3RvbmVFbnRyaWVzLmZvckVhY2gobWlsZXN0b25lSWQgPT4ge1xuICAgICAgICB0aGlzLmhhc2htYXBbbWlsZXN0b25lSWRdLmNvbXB1dGVkSXNMb2NrZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF0udW5sb2NrTWVzc2FnZSA9ICdFbnJvbGwgaW4gdGhpcyBjb3Vyc2UgdG8gYWNjZXNzIG1pbGVzdG9uZXMnXG4gICAgICB9KVxuICAgICAgLy8gTG9jayBhbGwgY2hpbGRyZW5cbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaGFzaG1hcFtrZXldLmlzTWlsZXN0b25lKSB7XG4gICAgICAgICAgdGhpcy5oYXNobWFwW2tleV0uaXNQYXJlbnRNaWxlc3RvbmVMb2NrZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0aGlzLmhhc2htYXAgPSB7IC4uLnRoaXMuaGFzaG1hcCB9XG4gICAgICB0aGlzLmhhc2htYXBVcGRhdGVkLm5leHQoeyB0aW1lc3RhbXA6IERhdGUubm93KCksIGhhc2htYXA6IHRoaXMuaGFzaG1hcCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gU1RFUCAzOiBDaGVjayBwcmUtYXNzZXNzbWVudCBjb21wbGV0aW9uXG4gICAgY29uc3QgaXNQcmVBc3Nlc3NtZW50Q29tcGxldGVkID0gdGhpcy5jaGVja1ByZUFzc2Vzc21lbnRDb21wbGV0aW9uKClcbiAgICBjb25zb2xlLmxvZygn8J+UjSBbTUlMRVNUT05FIExPQ0tdIFByZS1hc3Nlc3NtZW50IGNvbXBsZXRlZDonLCBpc1ByZUFzc2Vzc21lbnRDb21wbGV0ZWQgPyAn4pyFIFlFUycgOiAn4p2MIE5PJylcblxuICAgIC8vIFNURVAgNDogQ29tcHV0ZSBsb2NraW5nIGZvciBlYWNoIG1pbGVzdG9uZVxuICAgIFxuICAgIG1pbGVzdG9uZUVudHJpZXMuZm9yRWFjaCgobWlsZXN0b25lSWQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBtaWxlc3RvbmUgPSB0aGlzLmhhc2htYXBbbWlsZXN0b25lSWRdXG4gICAgICBpZiAoIW1pbGVzdG9uZSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IG1pbGVzdG9uZU51bSA9IGluZGV4ICsgMVxuXG4gICAgICAvLyBNSUxFU1RPTkUgMTogVW5sb2NrcyB3aGVuIHByZS1hc3Nlc3NtZW50IGNvbXBsZXRlXG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgY29uc3QgaXNMb2NrZWQgPSAhaXNQcmVBc3Nlc3NtZW50Q29tcGxldGVkXG4gICAgICAgIHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF0uY29tcHV0ZWRJc0xvY2tlZCA9IGlzTG9ja2VkXG4gICAgICAgIHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF0udW5sb2NrTWVzc2FnZSA9IGlzTG9ja2VkID9cbiAgICAgICAgICAnQ29tcGxldGUgdGhlIHByZWxpbWluYXJ5IGFzc2Vzc21lbnQgdG8gdW5sb2NrIHRoaXMgbWlsZXN0b25lJyA6ICcnXG4gICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZyhg8J+TjCBbTUlMRVNUT05FIDFdICR7bWlsZXN0b25lLm5hbWV9OmAsIHtcbiAgICAgICAgICBpc1ByZUFzc2Vzc21lbnRDb21wbGV0ZWQsXG4gICAgICAgICAgaXNMb2NrZWQ6IGlzTG9ja2VkID8gJ/CflJIgTE9DS0VEJyA6ICfwn5STIFVOTE9DS0VEJyxcbiAgICAgICAgICB1bmxvY2tNZXNzYWdlOiB0aGlzLmhhc2htYXBbbWlsZXN0b25lSWRdLnVubG9ja01lc3NhZ2VcbiAgICAgICAgfSlcbiAgICAgICAgXG4gICAgICAgIC8vIEZvciB1bmxvY2tlZCBNMSwgY2hlY2sgYXNzZXNzbWVudCBsb2NraW5nXG4gICAgICAgIGlmICghaXNMb2NrZWQpIHtcbiAgICAgICAgICB0aGlzLmNvbXB1dGVBc3Nlc3NtZW50TG9ja2luZ0luTWlsZXN0b25lKG1pbGVzdG9uZUlkKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICDiqK8gTWlsZXN0b25lIGxvY2tlZCAtIG1hcmtpbmcgYWxsIGNoaWxkcmVuIGFzIHBhcmVudC1sb2NrZWRgKVxuICAgICAgICAgIHRoaXMubWFya01pbGVzdG9uZUNoaWxkcmVuQXNQYXJlbnRMb2NrZWQobWlsZXN0b25lSWQsIHRydWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIE1JTEVTVE9ORSBOIChOID4gMSk6IFVubG9ja3Mgd2hlbiBwcmV2aW91cyBtaWxlc3RvbmUgY29tcGxldGVcbiAgICAgIGNvbnN0IHByZXZpb3VzTWlsZXN0b25lSWQgPSBtaWxlc3RvbmVFbnRyaWVzW2luZGV4IC0gMV1cbiAgICAgIGNvbnN0IHByZXZpb3VzTWlsZXN0b25lID0gdGhpcy5oYXNobWFwW3ByZXZpb3VzTWlsZXN0b25lSWRdXG5cbiAgICAgIGlmIChwcmV2aW91c01pbGVzdG9uZSkge1xuICAgICAgICAvLyBDaGVjayBjb21wbGV0aW9uIHZpYSBtdWx0aXBsZSBzdHJhdGVnaWVzXG4gICAgICAgIGNvbnN0IHByZXZDb21wbGV0aW9uUGN0ID0gTnVtYmVyKHByZXZpb3VzTWlsZXN0b25lLmNvbXBsZXRpb25QZXJjZW50YWdlKSB8fCAwXG4gICAgICAgIGNvbnN0IHByZXZDb21wbGV0aW9uU3RhdHVzID0gTnVtYmVyKHByZXZpb3VzTWlsZXN0b25lLmNvbXBsZXRpb25TdGF0dXMpIHx8IDBcbiAgICAgICAgY29uc3QgcHJldlN0YXR1cyA9IE51bWJlcihwcmV2aW91c01pbGVzdG9uZS5zdGF0dXMpIHx8IDBcbiAgICAgICAgY29uc3QgcHJldkNvbXBsZXRlZExlYWZOb2RlcyA9IE51bWJlcihwcmV2aW91c01pbGVzdG9uZS5jb21wbGV0ZWRMZWFmTm9kZXNDb3VudCkgfHwgMFxuICAgICAgICBjb25zdCBwcmV2TGVhZk5vZGVzQ291bnQgPSBOdW1iZXIocHJldmlvdXNNaWxlc3RvbmUubGVhZk5vZGVzQ291bnQpIHx8IDBcblxuICAgICAgICBjb25zb2xlLmxvZyhg8J+UjSBbTUlMRVNUT05FICR7bWlsZXN0b25lTnVtfV0gQ2hlY2tpbmcgaWYgcHJldmlvdXMgTSR7aW5kZXh9IGlzIGNvbXBsZXRlOmAsIHtcbiAgICAgICAgICBwcmV2aW91c01pbGVzdG9uZU5hbWU6IHByZXZpb3VzTWlsZXN0b25lLm5hbWUsXG4gICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHByZXZDb21wbGV0aW9uUGN0LFxuICAgICAgICAgIGNvbXBsZXRpb25TdGF0dXM6IHByZXZDb21wbGV0aW9uU3RhdHVzLFxuICAgICAgICAgIHN0YXR1czogcHJldlN0YXR1cyxcbiAgICAgICAgICBjb21wbGV0ZWRMZWFmTm9kZXM6IHByZXZDb21wbGV0ZWRMZWFmTm9kZXMsXG4gICAgICAgICAgbGVhZk5vZGVzQ291bnQ6IHByZXZMZWFmTm9kZXNDb3VudFxuICAgICAgICB9KVxuXG4gICAgICAgIGxldCBwcmV2aW91c01pbGVzdG9uZUNvbXBsZXRlID1cbiAgICAgICAgICBwcmV2Q29tcGxldGlvblBjdCA+PSAxMDAgfHxcbiAgICAgICAgICBwcmV2Q29tcGxldGlvblN0YXR1cyA9PT0gMiB8fFxuICAgICAgICAgIHByZXZTdGF0dXMgPT09IDIgfHxcbiAgICAgICAgICAocHJldkxlYWZOb2Rlc0NvdW50ID4gMCAmJiBwcmV2Q29tcGxldGVkTGVhZk5vZGVzID49IHByZXZMZWFmTm9kZXNDb3VudClcblxuICAgICAgICBjb25zb2xlLmxvZyhgICAgUHJpbWFyeSBjaGVjayByZXN1bHQ6ICR7cHJldmlvdXNNaWxlc3RvbmVDb21wbGV0ZSA/ICfinIUgQ09NUExFVEUnIDogJ+KdjCBJTkNPTVBMRVRFJ31gKVxuXG4gICAgICAgIC8vIEZhbGxiYWNrOiBDaGVjayBpbmRpdmlkdWFsIGl0ZW1zXG4gICAgICAgIGlmICghcHJldmlvdXNNaWxlc3RvbmVDb21wbGV0ZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICBSdW5uaW5nIGZhbGxiYWNrIGNoZWNrIChtYW5kYXRvcnkgY29udGVudCArIGFzc2Vzc21lbnQpLi4uYClcbiAgICAgICAgICBjb25zdCBpc1ByZXZpb3VzTWlsZXN0b25lQXNzZXNzbWVudENvbXBsZXRlID0gdGhpcy5jaGVja01pbGVzdG9uZUFzc2Vzc21lbnRDb21wbGV0ZShwcmV2aW91c01pbGVzdG9uZUlkKVxuICAgICAgICAgIGNvbnN0IGlzUHJldmlvdXNNaWxlc3RvbmVNYW5kYXRvcnlDb21wbGV0ZSA9IHRoaXMuY2hlY2tNaWxlc3RvbmVNYW5kYXRvcnlDb250ZW50Q29tcGxldGUocHJldmlvdXNNaWxlc3RvbmVJZClcbiAgICAgICAgICBwcmV2aW91c01pbGVzdG9uZUNvbXBsZXRlID0gaXNQcmV2aW91c01pbGVzdG9uZUFzc2Vzc21lbnRDb21wbGV0ZSAmJiBpc1ByZXZpb3VzTWlsZXN0b25lTWFuZGF0b3J5Q29tcGxldGVcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAgRmFsbGJhY2sgY2hlY2s6IG1hbmRhdG9yeT0ke2lzUHJldmlvdXNNaWxlc3RvbmVNYW5kYXRvcnlDb21wbGV0ZX0sIGFzc2Vzc21lbnQ9JHtpc1ByZXZpb3VzTWlsZXN0b25lQXNzZXNzbWVudENvbXBsZXRlfSwgcmVzdWx0PSR7cHJldmlvdXNNaWxlc3RvbmVDb21wbGV0ZX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNMb2NrZWQgPSAhcHJldmlvdXNNaWxlc3RvbmVDb21wbGV0ZVxuICAgICAgICB0aGlzLmhhc2htYXBbbWlsZXN0b25lSWRdLmNvbXB1dGVkSXNMb2NrZWQgPSBpc0xvY2tlZFxuICAgICAgICB0aGlzLmhhc2htYXBbbWlsZXN0b25lSWRdLnVubG9ja01lc3NhZ2UgPSBpc0xvY2tlZCA/XG4gICAgICAgICAgYENvbXBsZXRlIGFsbCBtYW5kYXRvcnkgY29udGVudCBhbmQgYXNzZXNzbWVudCBpbiBNaWxlc3RvbmUgJHtpbmRleH0gdG8gdW5sb2NrIHRoaXMgbWlsZXN0b25lYCA6ICcnXG4gICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZyhgICAg8J+TiiBbTUlMRVNUT05FICR7bWlsZXN0b25lTnVtfV0gJHttaWxlc3RvbmUubmFtZX06YCwge1xuICAgICAgICAgIHByZXZpb3VzTWlsZXN0b25lQ29tcGxldGU6IHByZXZpb3VzTWlsZXN0b25lQ29tcGxldGUgPyAn4pyFIFlFUycgOiAn4p2MIE5PJyxcbiAgICAgICAgICBpc0xvY2tlZDogaXNMb2NrZWQgPyAn8J+UkiBMT0NLRUQnIDogJ/CflJMgVU5MT0NLRUQnLFxuICAgICAgICAgIHVubG9ja01lc3NhZ2U6IHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF0udW5sb2NrTWVzc2FnZVxuICAgICAgICB9KVxuICAgICAgICBcbiAgICAgICAgLy8gRm9yIHVubG9ja2VkIG1pbGVzdG9uZXMsIGNoZWNrIGFzc2Vzc21lbnQgbG9ja2luZ1xuICAgICAgICBpZiAoIWlzTG9ja2VkKSB7XG4gICAgICAgICAgdGhpcy5jb21wdXRlQXNzZXNzbWVudExvY2tpbmdJbk1pbGVzdG9uZShtaWxlc3RvbmVJZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAg4qivIE1pbGVzdG9uZSBsb2NrZWQgLSBtYXJraW5nIGFsbCBjaGlsZHJlbiBhcyBwYXJlbnQtbG9ja2VkYClcbiAgICAgICAgICB0aGlzLm1hcmtNaWxlc3RvbmVDaGlsZHJlbkFzUGFyZW50TG9ja2VkKG1pbGVzdG9uZUlkLCB0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhc2htYXBbbWlsZXN0b25lSWRdLmNvbXB1dGVkSXNMb2NrZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF0udW5sb2NrTWVzc2FnZSA9ICdQcmV2aW91cyBtaWxlc3RvbmUgbm90IGZvdW5kJ1xuICAgICAgICBjb25zb2xlLmxvZyhgICAg8J+UkiBMT0NLRUQgKHByZXZpb3VzIG1pbGVzdG9uZSBub3QgZm91bmQpYClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gU1RFUCA0LjU6IERlYnVnIGxvZyBtaWxlc3RvbmUgbGVhZiBub2RlcyBhbmQgdGhlaXIgY29tcGxldGlvbiBzdGF0dXNcbiAgICBjb25zb2xlLmxvZygnXFxu8J+TiiBNaWxlc3RvbmUgTGVhZiBOb2RlcyBDb21wbGV0aW9uIFN0YXR1czonKVxuICAgIG1pbGVzdG9uZUVudHJpZXMuZm9yRWFjaCgobWlsZXN0b25lSWQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBtaWxlc3RvbmUgPSB0aGlzLmhhc2htYXBbbWlsZXN0b25lSWRdXG4gICAgICBpZiAoIW1pbGVzdG9uZSkgcmV0dXJuXG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKGAgICBMZWFmIE5vZGVzIEFycmF5OmAsIG1pbGVzdG9uZS5sZWFmTm9kZXMpXG4gICAgICBjb25zb2xlLmxvZyhgICAgTGVhZiBOb2RlcyBDb3VudDogJHttaWxlc3RvbmUubGVhZk5vZGVzQ291bnR9YClcbiAgICAgIGNvbnNvbGUubG9nKGAgICBDb21wbGV0ZWQgTGVhZiBOb2RlcyBDb3VudDogJHttaWxlc3RvbmUuY29tcGxldGVkTGVhZk5vZGVzQ291bnQgfHwgMH1gKVxuICAgICAgY29uc29sZS5sb2coYCAgIENvbXBsZXRpb24gJTogJHttaWxlc3RvbmUuY29tcGxldGlvblBlcmNlbnRhZ2V9JWApXG4gICAgICBcbiAgICAgIGlmIChtaWxlc3RvbmUubGVhZk5vZGVzICYmIG1pbGVzdG9uZS5sZWFmTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAgSW5kaXZpZHVhbCBMZWFmIE5vZGUgU3RhdHVzOmApXG4gICAgICAgIG1pbGVzdG9uZS5sZWFmTm9kZXMuZm9yRWFjaCgobGVhZklkOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGxlYWZEYXRhID0gdGhpcy5oYXNobWFwW2xlYWZJZF1cbiAgICAgICAgICBpZiAobGVhZkRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ29tcGxldGUgPSBcbiAgICAgICAgICAgICAgbGVhZkRhdGEuY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBcbiAgICAgICAgICAgICAgbGVhZkRhdGEuc3RhdHVzID09PSAyIHx8IFxuICAgICAgICAgICAgICAobGVhZkRhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgJiYgbGVhZkRhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgPj0gMTAwKSB8fFxuICAgICAgICAgICAgICAobGVhZkRhdGEucHJvZ3Jlc3MgJiYgbGVhZkRhdGEucHJvZ3Jlc3MgPj0gMTAwKVxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgICR7aSArIDF9LiAke2xlYWZEYXRhLm5hbWUgfHwgbGVhZklkfSBbJHtsZWFmRGF0YS5wcmltYXJ5Q2F0ZWdvcnl9XTpgLCB7XG4gICAgICAgICAgICAgIGlkOiBsZWFmSWQsXG4gICAgICAgICAgICAgIGNvbXBsZXRpb25TdGF0dXM6IGxlYWZEYXRhLmNvbXBsZXRpb25TdGF0dXMsXG4gICAgICAgICAgICAgIHN0YXR1czogbGVhZkRhdGEuc3RhdHVzLFxuICAgICAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogbGVhZkRhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UsXG4gICAgICAgICAgICAgIHByb2dyZXNzOiBsZWFmRGF0YS5wcm9ncmVzcyxcbiAgICAgICAgICAgICAgaXNDb21wbGV0ZTogaXNDb21wbGV0ZSA/ICfinIUnIDogJ+KdjCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICAke2kgKyAxfS4g4pqg77iPIExlYWYgbm9kZSAke2xlYWZJZH0gTk9UIEZPVU5EIGluIGhhc2htYXBgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICDimqDvuI8gTm8gbGVhZiBub2RlcyBkZWZpbmVkIGZvciB0aGlzIG1pbGVzdG9uZWApXG4gICAgICB9XG4gICAgfSlcbiAgICBcbiAgICAvLyBTVEVQIDU6IENvbXB1dGUgcGFyZW50IG1pbGVzdG9uZSBsb2NrIHN0YXR1cyBmb3IgQUxMIGNoaWxkcmVuXG4gICAgY29uc29sZS5sb2coJ1xcbvCflJcgQ29tcHV0aW5nIHBhcmVudCBtaWxlc3RvbmUgbG9ja3MgZm9yIGFsbCBjaGlsZHJlbi4uLicpXG4gICAgT2JqZWN0LmtleXModGhpcy5oYXNobWFwKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5oYXNobWFwW2tleV1cbiAgICAgIGlmIChpdGVtLmlzTWlsZXN0b25lKSByZXR1cm4gLy8gU2tpcCBtaWxlc3RvbmVzIHRoZW1zZWx2ZXNcblxuICAgICAgLy8gVHJhdmVyc2UgdXAgdG8gZmluZCBpZiBhbnkgYW5jZXN0b3IgbWlsZXN0b25lIGlzIGxvY2tlZFxuICAgICAgbGV0IGN1cnJlbnRQYXJlbnRJZCA9IGl0ZW0ucGFyZW50XG4gICAgICBsZXQgZGVwdGggPSAwXG4gICAgICBjb25zdCBtYXhEZXB0aCA9IDVcbiAgICAgIGxldCBmb3VuZExvY2tlZFBhcmVudCA9IGZhbHNlXG5cbiAgICAgIHdoaWxlIChjdXJyZW50UGFyZW50SWQgJiYgZGVwdGggPCBtYXhEZXB0aCkge1xuICAgICAgICBjb25zdCBwYXJlbnREYXRhID0gdGhpcy5oYXNobWFwW2N1cnJlbnRQYXJlbnRJZF1cbiAgICAgICAgaWYgKHBhcmVudERhdGEpIHtcbiAgICAgICAgICBpZiAocGFyZW50RGF0YS5pc01pbGVzdG9uZSAmJiBwYXJlbnREYXRhLmNvbXB1dGVkSXNMb2NrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzaG1hcFtrZXldLmlzUGFyZW50TWlsZXN0b25lTG9ja2VkID0gdHJ1ZVxuICAgICAgICAgICAgZm91bmRMb2NrZWRQYXJlbnQgPSB0cnVlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50UGFyZW50SWQgPSBwYXJlbnREYXRhLnBhcmVudFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgZGVwdGgrK1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoIWZvdW5kTG9ja2VkUGFyZW50KSB7XG4gICAgICAgIHRoaXMuaGFzaG1hcFtrZXldLmlzUGFyZW50TWlsZXN0b25lTG9ja2VkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gU1RFUCA2OiBUcmlnZ2VyIGhhc2htYXAgdXBkYXRlXG4gICAgY29uc29sZS5sb2coJ+KchSBNaWxlc3RvbmUgbG9ja2luZyBjb21wdXRhdGlvbiBDT01QTEVURScpXG4gICAgXG4gICAgLy8gRGVidWc6IExvZyBmaW5hbCBsb2NrIHN0YXR1cyBmb3IgYWxsIG1pbGVzdG9uZXNcbiAgICBjb25zdCBtaWxlc3RvbmVzRmluYWwgPSBPYmplY3Qua2V5cyh0aGlzLmhhc2htYXApLmZpbHRlcihrZXkgPT4gXG4gICAgICB0aGlzLmhhc2htYXBba2V5XS5pc01pbGVzdG9uZSB8fCBcbiAgICAgIHRoaXMuaGFzaG1hcFtrZXldLnByaW1hcnlDYXRlZ29yeSA9PT0gJ01pbGVzdG9uZScgfHwgXG4gICAgICB0aGlzLmhhc2htYXBba2V5XS5jb3Vyc2VDYXRlZ29yeSA9PT0gJ01pbGVzdG9uZSdcbiAgICApXG4gICAgY29uc29sZS5sb2coJ/Cfk4ogW0ZJTkFMIExPQ0sgU1RBVFVTXSBBbGwgbWlsZXN0b25lczonKVxuICAgIG1pbGVzdG9uZXNGaW5hbC5mb3JFYWNoKChpZCwgaSkgPT4ge1xuICAgICAgY29uc3QgbSA9IHRoaXMuaGFzaG1hcFtpZF1cbiAgICAgIGNvbnNvbGUubG9nKGAgICAke2kgKyAxfS4gJHttLm5hbWV9OiBjb21wdXRlZElzTG9ja2VkPSR7bS5jb21wdXRlZElzTG9ja2VkfSwgdW5sb2NrTWVzc2FnZT1cIiR7bS51bmxvY2tNZXNzYWdlIHx8ICdOL0EnfVwiYClcbiAgICB9KVxuICAgIFxuICAgIHRoaXMuaGFzaG1hcCA9IHsgLi4udGhpcy5oYXNobWFwIH1cbiAgICBjb25zb2xlLmxvZygn8J+ToSBbU0VSVklDRV0gQnJvYWRjYXN0aW5nIGhhc2htYXAgdXBkYXRlIHdpdGggY29tcHV0ZWRJc0xvY2tlZCB2YWx1ZXMnKVxuICAgIHRoaXMuaGFzaG1hcFVwZGF0ZWQubmV4dCh7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgaGFzaG1hcDogdGhpcy5oYXNobWFwIH0pXG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlciBtaWxlc3RvbmUgbG9jayB1cGRhdGUgd2hlbiBoYXNobWFwIHByb2dyZXNzIGlzIHVwZGF0ZWQgZXh0ZXJuYWxseVxuICAgKiBDYWxsZWQgZnJvbSB2aWV3ZXItdXRpbC5zZXJ2aWNlLnRzIGFmdGVyIHByb2dyZXNzIHVwZGF0ZXNcbiAgICovXG4gIHB1YmxpYyB0cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpIHtcbiAgICBjb25zb2xlLmxvZygn8J+UlCBbVFJJR0dFUl0gdHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUgY2FsbGVkJylcbiAgICBcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgTGVhcm5pbmcgUGF0aHdheSBpbiB0aGUgaGFzaG1hcFxuICAgIGNvbnN0IGhhc0xlYXJuaW5nUGF0aHdheSA9IE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcCkuc29tZShrZXkgPT4ge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaGFzaG1hcFtrZXldXG4gICAgICAvLyBDaGVjayB1c2luZyBPUiBjb25kaXRpb24gLSBlaXRoZXIgZmxhZyBpbmRpY2F0ZXMgTGVhcm5pbmcgUGF0aHdheVxuICAgICAgcmV0dXJuIGl0ZW0uaXNMZWFybmluZ1BhdGh3YXkgPT09IHRydWUgfHwgaXRlbS5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknXG4gICAgfSlcbiAgICBcbiAgICBjb25zb2xlLmxvZyhgICAgSXMgTGVhcm5pbmcgUGF0aHdheTogJHtoYXNMZWFybmluZ1BhdGh3YXl9YClcbiAgICBcbiAgICBpZiAoaGFzTGVhcm5pbmdQYXRod2F5KSB7XG4gICAgICBjb25zb2xlLmxvZygn8J+UhCBbVFJJR0dFUl0gVHJpZ2dlcmluZyBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIGFmdGVyIHByb2dyZXNzIHVwZGF0ZScpXG4gICAgICAvLyBBc3N1bWUgZW5yb2xsZWQgc2luY2UgcHJvZ3Jlc3Mgd2FzIGp1c3QgdXBkYXRlZFxuICAgICAgdGhpcy5jb21wdXRlTWlsZXN0b25lTG9ja2luZ1N0YXR1cyh0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygn8J+UhCBbVFJJR0dFUl0gUmVndWxhciBjb250ZW50IC0gZW1pdHRpbmcgaGFzaG1hcCB1cGRhdGUgZm9yIHRvcC1iYXIgcmVmcmVzaCcpXG4gICAgICAvLyBGb3IgcmVndWxhciBjb250ZW50IChub24tTGVhcm5pbmcgUGF0aHdheSksIGp1c3QgZW1pdCB0aGUgaGFzaG1hcCB1cGRhdGVcbiAgICAgIC8vIHNvIHRoZSB0b3AtYmFyIGNvbXBvbmVudCBjYW4gcmVjYWxjdWxhdGUgdGhlIGNvbXBsZXRpb24gY291bnRcbiAgICAgIHRoaXMuaGFzaG1hcCA9IHsgLi4udGhpcy5oYXNobWFwIH1cbiAgICAgIGNvbnNvbGUubG9nKCfwn5OhIFtUUklHR0VSXSBCcm9hZGNhc3RpbmcgaGFzaG1hcCB1cGRhdGUgZXZlbnQnKVxuICAgICAgdGhpcy5oYXNobWFwVXBkYXRlZC5uZXh0KHsgdGltZXN0YW1wOiBEYXRlLm5vdygpLCBoYXNobWFwOiB0aGlzLmhhc2htYXAgfSlcbiAgICAgIGNvbnNvbGUubG9nKCfinIUgW1RSSUdHRVJdIEhhc2htYXAgdXBkYXRlIGJyb2FkY2FzdGVkJylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgcHJlLWFzc2Vzc21lbnQgKHByZWxpbWluYXJ5IGFzc2Vzc21lbnQpIGlzIGNvbXBsZXRlZFxuICAgKiBQcmUtYXNzZXNzbWVudCBpcyB0eXBpY2FsbHkgYSBDb3Vyc2UgQXNzZXNzbWVudCBhdCB0aGUgcm9vdCBsZXZlbCBvZiBMZWFybmluZyBQYXRod2F5IChiZWZvcmUgbWlsZXN0b25lcylcbiAgICovXG4gIHByaXZhdGUgY2hlY2tQcmVBc3Nlc3NtZW50Q29tcGxldGlvbigpOiBib29sZWFuIHtcbiAgICBjb25zb2xlLmxvZygn8J+UjSBbUFJFLUFTU0VTU01FTlRdIFN0YXJ0aW5nIHByZS1hc3Nlc3NtZW50IGNvbXBsZXRpb24gY2hlY2snKVxuICAgIGNvbnNvbGUubG9nKCfwn5SNIFtQUkUtQVNTRVNTTUVOVF0gSGFzaG1hcCBrZXlzOicsIE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcCkubGVuZ3RoKVxuICAgIFxuICAgIC8vIEZpbmQgdGhlIExlYXJuaW5nIFBhdGh3YXkgcm9vdCAtIGNoZWNrIG11bHRpcGxlIGNvbmRpdGlvbnNcbiAgICBsZXQgbGVhcm5pbmdQYXRod2F5SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5oYXNobWFwKSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaGFzaG1hcFtrZXldXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBMZWFybmluZyBQYXRod2F5IHJvb3QgYnkgYW55IG9mIHRoZXNlIGNvbmRpdGlvbnNcbiAgICAgIGlmIChpdGVtLmNvdXJzZUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUGF0aHdheScgfHwgXG4gICAgICAgICAgaXRlbS5pc0xlYXJuaW5nUGF0aHdheSA9PT0gdHJ1ZSB8fFxuICAgICAgICAgIChpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ0JsZW5kZWQgUHJvZ3JhbScgJiYgaXRlbS5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknKSkge1xuICAgICAgICBsZWFybmluZ1BhdGh3YXlJZCA9IGtleVxuICAgICAgICBjb25zb2xlLmxvZygn8J+UjSBbUFJFLUFTU0VTU01FTlRdIEZvdW5kIExlYXJuaW5nIFBhdGh3YXkgcm9vdDonLCBrZXksIGl0ZW0ubmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWxlYXJuaW5nUGF0aHdheUlkKSB7XG4gICAgICBjb25zb2xlLmxvZygn4pqg77iPIFtQUkUtQVNTRVNTTUVOVF0gTGVhcm5pbmcgUGF0aHdheSByb290IE5PVCBGT1VORCAtIHJldHVybmluZyBmYWxzZSB0byBrZWVwIG1pbGVzdG9uZXMgbG9ja2VkJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMTogTG9vayBmb3IgaXRlbXMgZXhwbGljaXRseSBtYXJrZWQgYXMgcHJlLWFzc2Vzc21lbnQgKGlzUHJlQXNzZXNzbWVudCBmbGFnKVxuICAgIGNvbnNvbGUubG9nKCfwn5SNIFtQUkUtQVNTRVNTTUVOVF0gU3RlcCAxOiBMb29raW5nIGZvciBpdGVtcyB3aXRoIGlzUHJlQXNzZXNzbWVudD10cnVlIGZsYWcuLi4nKVxuICAgIGNvbnNvbGUubG9nKCfwn5SNIFtQUkUtQVNTRVNTTUVOVF0gRHVtcGluZyBhbGwgaGFzaG1hcCBpdGVtcyBmb3IgZGVidWdnaW5nOicpXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5oYXNobWFwKSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaGFzaG1hcFtrZXldXG4gICAgICBpZiAoaXRlbS5pc1ByZUFzc2Vzc21lbnQgfHwgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdDb3Vyc2UgQXNzZXNzbWVudCcgfHwgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdTdGFuZGFsb25lIEFzc2Vzc21lbnQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICDwn5OEICR7a2V5fTogaXNQcmVBc3Nlc3NtZW50PSR7aXRlbS5pc1ByZUFzc2Vzc21lbnR9LCBwcmltYXJ5Q2F0ZWdvcnk9JHtpdGVtLnByaW1hcnlDYXRlZ29yeX0sIHBhcmVudD0ke2l0ZW0ucGFyZW50fSwgY29tcGxldGlvblN0YXR1cz0ke2l0ZW0uY29tcGxldGlvblN0YXR1c30sIHN0YXR1cz0ke2l0ZW0uc3RhdHVzfSwgY29tcGxldGlvblBlcmNlbnRhZ2U9JHtpdGVtLmNvbXBsZXRpb25QZXJjZW50YWdlfWApXG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGxldCBmb3VuZFByZUFzc2Vzc21lbnRGbGFnID0gZmFsc2VcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmhhc2htYXApKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5oYXNobWFwW2tleV1cbiAgICAgIGlmIChpdGVtLmlzUHJlQXNzZXNzbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFByZUFzc2Vzc21lbnRGbGFnID0gdHJ1ZVxuICAgICAgICBjb25zb2xlLmxvZygn8J+UjSBbUFJFLUFTU0VTU01FTlRdIEZvdW5kIGl0ZW0gd2l0aCBpc1ByZUFzc2Vzc21lbnQ9dHJ1ZTonLCB7XG4gICAgICAgICAgaWQ6IGtleSxcbiAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgY29tcGxldGlvblN0YXR1czogaXRlbS5jb21wbGV0aW9uU3RhdHVzLFxuICAgICAgICAgIHN0YXR1czogaXRlbS5zdGF0dXMsXG4gICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IGl0ZW0uY29tcGxldGlvblBlcmNlbnRhZ2UsXG4gICAgICAgICAgcHJvZ3Jlc3M6IGl0ZW0ucHJvZ3Jlc3NcbiAgICAgICAgfSlcbiAgICAgICAgLy8gU1RSSUNUIENIRUNLOiBPbmx5IHJldHVybiB0cnVlIGlmIGNvbXBsZXRpb25TdGF0dXMgaXMgRVhBQ1RMWSAyIChub3QgdW5kZWZpbmVkLCBudWxsLCBvciAwKVxuICAgICAgICAvLyBjb21wbGV0aW9uUGVyY2VudGFnZSBjaGVjayBtdXN0IGJlID49IDEwMCBBTkQgYmUgYSBudW1iZXJcbiAgICAgICAgY29uc3QgY29tcGxldGlvblN0YXR1cyA9IE51bWJlcihpdGVtLmNvbXBsZXRpb25TdGF0dXMpXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IE51bWJlcihpdGVtLnN0YXR1cylcbiAgICAgICAgY29uc3QgY29tcGxldGlvblBlcmNlbnRhZ2UgPSBOdW1iZXIoaXRlbS5jb21wbGV0aW9uUGVyY2VudGFnZSlcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBOdW1iZXIoaXRlbS5wcm9ncmVzcylcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGlzQ29tcGxldGVkID0gKGNvbXBsZXRpb25TdGF0dXMgPT09IDIgfHwgc3RhdHVzID09PSAyIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDAgJiYgIWlzTmFOKGNvbXBsZXRpb25QZXJjZW50YWdlKSkgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2dyZXNzID49IDEwMCAmJiAhaXNOYU4ocHJvZ3Jlc3MpKSlcbiAgICAgICAgY29uc29sZS5sb2coJ/CflI0gW1BSRS1BU1NFU1NNRU5UXSBQcmUtYXNzZXNzbWVudCBjb21wbGV0aW9uIHJlc3VsdDonLCBpc0NvbXBsZXRlZCA/ICfinIUgQ09NUExFVEVEJyA6ICfinYwgTk9UIENPTVBMRVRFRCcsIHtcbiAgICAgICAgICBjb21wbGV0aW9uU3RhdHVzQ2hlY2s6IGNvbXBsZXRpb25TdGF0dXMgPT09IDIsXG4gICAgICAgICAgc3RhdHVzQ2hlY2s6IHN0YXR1cyA9PT0gMixcbiAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZUNoZWNrOiBjb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDAsXG4gICAgICAgICAgcHJvZ3Jlc3NDaGVjazogcHJvZ3Jlc3MgPj0gMTAwXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBpc0NvbXBsZXRlZFxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAoIWZvdW5kUHJlQXNzZXNzbWVudEZsYWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCfimqDvuI8gW1BSRS1BU1NFU1NNRU5UXSBObyBpdGVtIHdpdGggaXNQcmVBc3Nlc3NtZW50PXRydWUgZm91bmQgaW4gaGFzaG1hcCcpXG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBGYWxsYmFjayAtIExvb2sgZm9yIENvdXJzZSBBc3Nlc3NtZW50IHRoYXQgaXMgYSBkaXJlY3QgY2hpbGQgb2YgTGVhcm5pbmcgUGF0aHdheSAobm90IGEgbWlsZXN0b25lIGNoaWxkKVxuICAgIGNvbnNvbGUubG9nKCfwn5SNIFtQUkUtQVNTRVNTTUVOVF0gU3RlcCAyOiBMb29raW5nIGZvciBDb3Vyc2UgQXNzZXNzbWVudCBkaXJlY3QgY2hpbGQgb2YgTGVhcm5pbmcgUGF0aHdheS4uLicpXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5oYXNobWFwKSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaGFzaG1hcFtrZXldXG4gICAgICAvLyBNdXN0IGJlIGEgZGlyZWN0IGNoaWxkIG9mIHRoZSBMZWFybmluZyBQYXRod2F5XG4gICAgICBpZiAoaXRlbS5wYXJlbnQgIT09IGxlYXJuaW5nUGF0aHdheUlkKSBjb250aW51ZVxuICAgICAgLy8gU2tpcCBtaWxlc3RvbmVzXG4gICAgICBpZiAoaXRlbS5pc01pbGVzdG9uZSB8fCBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ01pbGVzdG9uZScgfHwgaXRlbS5jb3Vyc2VDYXRlZ29yeSA9PT0gJ01pbGVzdG9uZScpIGNvbnRpbnVlXG4gICAgICAvLyBNdXN0IGJlIGEgQ291cnNlIEFzc2Vzc21lbnQgb3IgU3RhbmRhbG9uZSBBc3Nlc3NtZW50XG4gICAgICBpZiAoaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgIT09ICdDb3Vyc2UgQXNzZXNzbWVudCcgJiYgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgIT09ICdTdGFuZGFsb25lIEFzc2Vzc21lbnQnKSBjb250aW51ZVxuICAgICAgXG4gICAgICBjb25zb2xlLmxvZygn8J+UjSBbUFJFLUFTU0VTU01FTlRdIEZvdW5kIENvdXJzZSBBc3Nlc3NtZW50IGNoaWxkIG9mIExlYXJuaW5nIFBhdGh3YXk6Jywge1xuICAgICAgICBpZDoga2V5LFxuICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgIHByaW1hcnlDYXRlZ29yeTogaXRlbS5wcmltYXJ5Q2F0ZWdvcnksXG4gICAgICAgIGNvbXBsZXRpb25TdGF0dXM6IGl0ZW0uY29tcGxldGlvblN0YXR1cyxcbiAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcbiAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IGl0ZW0uY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgIH0pXG4gICAgICBcbiAgICAgIC8vIFNUUklDVCBDSEVDSzogT25seSByZXR1cm4gdHJ1ZSBpZiBjb21wbGV0aW9uU3RhdHVzIGlzIEVYQUNUTFkgMlxuICAgICAgY29uc3QgY29tcGxldGlvblN0YXR1cyA9IE51bWJlcihpdGVtLmNvbXBsZXRpb25TdGF0dXMpXG4gICAgICBjb25zdCBzdGF0dXMgPSBOdW1iZXIoaXRlbS5zdGF0dXMpXG4gICAgICBjb25zdCBjb21wbGV0aW9uUGVyY2VudGFnZSA9IE51bWJlcihpdGVtLmNvbXBsZXRpb25QZXJjZW50YWdlKVxuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBOdW1iZXIoaXRlbS5wcm9ncmVzcylcbiAgICAgIFxuICAgICAgY29uc3QgaXNDb21wbGV0ZWQgPSAoY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBzdGF0dXMgPT09IDIgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDAgJiYgIWlzTmFOKGNvbXBsZXRpb25QZXJjZW50YWdlKSkgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9ncmVzcyA+PSAxMDAgJiYgIWlzTmFOKHByb2dyZXNzKSkpXG4gICAgICBjb25zb2xlLmxvZygn8J+UjSBbUFJFLUFTU0VTU01FTlRdIENvdXJzZSBBc3Nlc3NtZW50IGNvbXBsZXRpb24gcmVzdWx0OicsIGlzQ29tcGxldGVkID8gJ+KchSBDT01QTEVURUQnIDogJ+KdjCBOT1QgQ09NUExFVEVEJywge1xuICAgICAgICBjb21wbGV0aW9uU3RhdHVzQ2hlY2s6IGNvbXBsZXRpb25TdGF0dXMgPT09IDIsXG4gICAgICAgIHN0YXR1c0NoZWNrOiBzdGF0dXMgPT09IDIsXG4gICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlQ2hlY2s6IGNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCxcbiAgICAgICAgcHJvZ3Jlc3NDaGVjazogcHJvZ3Jlc3MgPj0gMTAwXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGlzQ29tcGxldGVkXG4gICAgfVxuXG4gICAgLy8gU3RlcCAzOiBJZiBubyBwcmUtYXNzZXNzbWVudCBmb3VuZCBhdCBhbGwsIGtlZXAgbWlsZXN0b25lcyBMT0NLRUQgKGZhaWwtc2FmZSlcbiAgICBjb25zb2xlLmxvZygn4pqg77iPIFtQUkUtQVNTRVNTTUVOVF0gTm8gcHJlLWFzc2Vzc21lbnQgZm91bmQgaW4gaGFzaG1hcCAtIHJldHVybmluZyBGQUxTRSB0byBrZWVwIG1pbGVzdG9uZXMgTE9DS0VEJylcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG1pbGVzdG9uZSdzIGFzc2Vzc21lbnQgaXMgY29tcGxldGVkXG4gICAqIE9OTFkgY2hlY2tzIHRoZSBtaWxlc3RvbmUgYXNzZXNzbWVudCAoQ291cnNlIEFzc2Vzc21lbnQgdGhhdCBpcyBhIGRpcmVjdCBjaGlsZCBvZiB0aGUgbWlsZXN0b25lKVxuICAgKiBEb2VzIE5PVCBjaGVjayBhc3Nlc3NtZW50cyBuZXN0ZWQgaW5zaWRlIGNvdXJzZXMgd2l0aGluIHRoZSBtaWxlc3RvbmVcbiAgICovXG4gIHByaXZhdGUgY2hlY2tNaWxlc3RvbmVBc3Nlc3NtZW50Q29tcGxldGUobWlsZXN0b25lSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1pbGVzdG9uZSA9IHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF1cbiAgICBcbiAgICBsZXQgZm91bmRNaWxlc3RvbmVBc3Nlc3NtZW50ID0gZmFsc2VcbiAgICBsZXQgaXNNaWxlc3RvbmVBc3Nlc3NtZW50Q29tcGxldGUgPSBmYWxzZVxuXG4gICAgY29uc29sZS5sb2coYPCflI0gQ2hlY2tpbmcgbWlsZXN0b25lIGFzc2Vzc21lbnQgZm9yOiAke21pbGVzdG9uZUlkfWApXG5cbiAgICAvLyBDaGVjayBhbGwgaXRlbXMgaW4gaGFzaG1hcCB0aGF0IGFyZSBESVJFQ1QgY2hpbGRyZW4gb2YgdGhpcyBtaWxlc3RvbmVcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmhhc2htYXApKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5oYXNobWFwW2tleV1cblxuICAgICAgLy8gQ1JJVElDQUw6IE9ubHkgY2hlY2sgRElSRUNUIGNoaWxkcmVuIChwYXJlbnQgPT09IG1pbGVzdG9uZUlkKVxuICAgICAgaWYgKGl0ZW0ucGFyZW50ICE9PSBtaWxlc3RvbmVJZCkgY29udGludWVcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIG1pbGVzdG9uZSBhc3Nlc3NtZW50IChDb3Vyc2UgQXNzZXNzbWVudCBhcyBkaXJlY3QgY2hpbGQgb2YgbWlsZXN0b25lKVxuICAgICAgY29uc3QgaXNNaWxlc3RvbmVBc3Nlc3NtZW50ID1cbiAgICAgICAgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdDb3Vyc2UgQXNzZXNzbWVudCcgfHxcbiAgICAgICAgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdGaW5hbCBBc3Nlc3NtZW50JyB8fFxuICAgICAgICBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ1N0YW5kYWxvbmUgQXNzZXNzbWVudCdcblxuICAgICAgaWYgKCFpc01pbGVzdG9uZUFzc2Vzc21lbnQpIGNvbnRpbnVlXG5cbiAgICAgIC8vIEZvdW5kIHRoZSBtaWxlc3RvbmUgYXNzZXNzbWVudFxuICAgICAgZm91bmRNaWxlc3RvbmVBc3Nlc3NtZW50ID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDb21wbGV0ZWQgPSBpdGVtLmNvbXBsZXRpb25TdGF0dXMgPT09IDIgfHwgaXRlbS5zdGF0dXMgPT09IDIgfHwgaXRlbS5jb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDAgfHwgaXRlbS5wcm9ncmVzcyA+PSAxMDBcbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coYPCfk4sgRm91bmQgbWlsZXN0b25lIGFzc2Vzc21lbnQgKGRpcmVjdCBjaGlsZCk6ICR7aXRlbS5uYW1lIHx8IGtleX1gLCB7XG4gICAgICAgIG1pbGVzdG9uZUlkLFxuICAgICAgICBhc3Nlc3NtZW50SWQ6IGtleSxcbiAgICAgICAgY29tcGxldGlvblN0YXR1czogaXRlbS5jb21wbGV0aW9uU3RhdHVzLFxuICAgICAgICBzdGF0dXM6IGl0ZW0uc3RhdHVzLFxuICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogaXRlbS5jb21wbGV0aW9uUGVyY2VudGFnZSxcbiAgICAgICAgaXNDb21wbGV0ZWRcbiAgICAgIH0pXG4gICAgICBcbiAgICAgIGlmIChpc0NvbXBsZXRlZCkge1xuICAgICAgICBpc01pbGVzdG9uZUFzc2Vzc21lbnRDb21wbGV0ZSA9IHRydWVcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXN1YWxseSBvbmx5IG9uZSBtaWxlc3RvbmUgYXNzZXNzbWVudCBwZXIgbWlsZXN0b25lLCBidXQgY2hlY2sgYWxsIGp1c3QgaW4gY2FzZVxuICAgIH1cblxuICAgIC8vIENSSVRJQ0FMIExPR0lDOlxuICAgIC8vIC0gSWYgTk8gbWlsZXN0b25lIGFzc2Vzc21lbnQgZm91bmQg4oaSIGNvbnNpZGVyIGNvbXBsZXRlIChubyBhc3Nlc3NtZW50IHJlcXVpcmVtZW50KVxuICAgIC8vIC0gSWYgbWlsZXN0b25lIGFzc2Vzc21lbnQgZm91bmQg4oaSIGl0IG11c3QgYmUgY29tcGxldGVkXG4gICAgaWYgKCFmb3VuZE1pbGVzdG9uZUFzc2Vzc21lbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGDihLnvuI8gTm8gbWlsZXN0b25lIGFzc2Vzc21lbnQgKGRpcmVjdCBjaGlsZCkgZm91bmQgZm9yICR7bWlsZXN0b25lSWR9IC0gY29uc2lkZXJpbmcgYXMgY29tcGxldGVgKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgXG4gICAgY29uc29sZS5sb2coYCR7aXNNaWxlc3RvbmVBc3Nlc3NtZW50Q29tcGxldGUgPyAn4pyFJyA6ICfinYwnfSBNaWxlc3RvbmUgJHttaWxlc3RvbmVJZH0gYXNzZXNzbWVudDogJHtpc01pbGVzdG9uZUFzc2Vzc21lbnRDb21wbGV0ZSA/ICdDT01QTEVURScgOiAnSU5DT01QTEVURSd9YClcbiAgICByZXR1cm4gaXNNaWxlc3RvbmVBc3Nlc3NtZW50Q29tcGxldGVcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG1pbGVzdG9uZSdzIG1hbmRhdG9yeSBjb250ZW50IGlzIGNvbXBsZXRlZFxuICAgKiBPbmx5IGNoZWNrcyBjb3Vyc2VzL2NvbnRlbnQgdGhhdCBhcmUgbWFya2VkIGFzIGlzTWFuZGF0b3J5XG4gICAqL1xuICBwcml2YXRlIGNoZWNrTWlsZXN0b25lTWFuZGF0b3J5Q29udGVudENvbXBsZXRlKG1pbGVzdG9uZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBtaWxlc3RvbmUgPSB0aGlzLmhhc2htYXBbbWlsZXN0b25lSWRdXG5cbiAgICBsZXQgbWFuZGF0b3J5Q291bnQgPSAwXG4gICAgbGV0IGNvbXBsZXRlZE1hbmRhdG9yeUNvdW50ID0gMFxuXG4gICAgY29uc29sZS5sb2coYPCflI0gQ2hlY2tpbmcgbWFuZGF0b3J5IGNvbnRlbnQgZm9yIG1pbGVzdG9uZTogJHttaWxlc3RvbmVJZH1gKVxuXG4gICAgLy8gQ2hlY2sgYWxsIGl0ZW1zIGluIGhhc2htYXAgdGhhdCBhcmUgZGlyZWN0IGNoaWxkcmVuIG9mIHRoaXMgbWlsZXN0b25lIChjb3Vyc2VzKVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcCkpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmhhc2htYXBba2V5XVxuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGl0ZW0gaXMgYSBkaXJlY3QgY2hpbGQgb2YgdGhlIG1pbGVzdG9uZSAoY291cnNlIGxldmVsKVxuICAgICAgaWYgKGl0ZW0ucGFyZW50ICE9PSBtaWxlc3RvbmVJZCkgY29udGludWVcblxuICAgICAgLy8gU2tpcCBpZiBub3QgYSBjb3Vyc2Ugb3IgY29sbGVjdGlvblxuICAgICAgaWYgKGl0ZW0ucHJpbWFyeUNhdGVnb3J5ICE9PSAnQ291cnNlJyAmJiAhaXRlbS5pc0NvbGxlY3Rpb24pIGNvbnRpbnVlXG5cbiAgICAgIC8vIFNraXAgYXNzZXNzbWVudHMgLSB0aGV5J3JlIGNoZWNrZWQgc2VwYXJhdGVseVxuICAgICAgY29uc3QgaXNBc3Nlc3NtZW50ID1cbiAgICAgICAgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdDb3Vyc2UgQXNzZXNzbWVudCcgfHxcbiAgICAgICAgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdGaW5hbCBBc3Nlc3NtZW50JyB8fFxuICAgICAgICBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ1N0YW5kYWxvbmUgQXNzZXNzbWVudCcgfHxcbiAgICAgICAgaXRlbS5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0NvdXJzZSBBc3Nlc3NtZW50JyB8fFxuICAgICAgICAoaXRlbS5uYW1lICYmIGl0ZW0ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdhc3Nlc3NtZW50JykpXG4gICAgICBpZiAoaXNBc3Nlc3NtZW50KSBjb250aW51ZVxuXG4gICAgICAvLyBDUklUSUNBTDogQ2hlY2sgaWYgdGhpcyBjb250ZW50IGlzIG1hbmRhdG9yeVxuICAgICAgLy8gQnkgZGVmYXVsdCwgY291cnNlcyBBUkUgbWFuZGF0b3J5IHVubGVzcyBleHBsaWNpdGx5IG1hcmtlZCBhcyBvcHRpb25hbCAoaXNNYW5kYXRvcnk6IGZhbHNlKVxuICAgICAgY29uc3QgaXNNYW5kYXRvcnkgPSBpdGVtLmlzTWFuZGF0b3J5ICE9PSBmYWxzZVxuICAgICAgXG4gICAgICBpZiAoaXNNYW5kYXRvcnkpIHtcbiAgICAgICAgbWFuZGF0b3J5Q291bnQrK1xuICAgICAgICBjb25zdCBpc0NvbXBsZXRlZCA9IGl0ZW0uY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBpdGVtLnN0YXR1cyA9PT0gMiB8fCBpdGVtLmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCB8fCBpdGVtLnByb2dyZXNzID49IDEwMFxuICAgICAgICBcbiAgICAgICAgY29uc29sZS5sb2coYCAgIPCfk50gTWFuZGF0b3J5IGl0ZW06ICR7aXRlbS5uYW1lIHx8IGtleX1gLCB7XG4gICAgICAgICAgaXNNYW5kYXRvcnk6IGl0ZW0uaXNNYW5kYXRvcnksXG4gICAgICAgICAgY29tcGxldGlvblN0YXR1czogaXRlbS5jb21wbGV0aW9uU3RhdHVzLFxuICAgICAgICAgIHN0YXR1czogaXRlbS5zdGF0dXMsXG4gICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IGl0ZW0uY29tcGxldGlvblBlcmNlbnRhZ2UsXG4gICAgICAgICAgcHJvZ3Jlc3M6IGl0ZW0ucHJvZ3Jlc3MsXG4gICAgICAgICAgaXNDb21wbGV0ZWQsXG4gICAgICAgICAgaGFzQ29tcGxldGlvblN0YXR1czogaXRlbS5jb21wbGV0aW9uU3RhdHVzICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgaGFzU3RhdHVzOiBpdGVtLnN0YXR1cyAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgIGhhc0NvbXBsZXRpb25QZXJjZW50YWdlOiBpdGVtLmNvbXBsZXRpb25QZXJjZW50YWdlICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgaGFzUHJvZ3Jlc3M6IGl0ZW0ucHJvZ3Jlc3MgIT09IHVuZGVmaW5lZFxuICAgICAgICB9KVxuICAgICAgICBcbiAgICAgICAgaWYgKGlzQ29tcGxldGVkKSB7XG4gICAgICAgICAgY29tcGxldGVkTWFuZGF0b3J5Q291bnQrK1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWxsQ29tcGxldGUgPSBtYW5kYXRvcnlDb3VudCA9PT0gMCB8fCBjb21wbGV0ZWRNYW5kYXRvcnlDb3VudCA+PSBtYW5kYXRvcnlDb3VudFxuICAgIGNvbnNvbGUubG9nKGDwn5OKIE1pbGVzdG9uZSAke21pbGVzdG9uZUlkfSBtYW5kYXRvcnkgc3RhdHVzOiAke2NvbXBsZXRlZE1hbmRhdG9yeUNvdW50fS8ke21hbmRhdG9yeUNvdW50fSBjb21wbGV0ZSA9ICR7YWxsQ29tcGxldGUgPyAn4pyFIEFMTCBDT01QTEVURScgOiAn4p2MIElOQ09NUExFVEUnfWApXG4gICAgcmV0dXJuIGFsbENvbXBsZXRlXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBjb250ZW50IGl0ZW0gaXMgYSBjaGlsZCAoZGlyZWN0IG9yIG5lc3RlZCkgb2YgYSBtaWxlc3RvbmVcbiAgICovXG4gIHByaXZhdGUgaXNDaGlsZE9mTWlsZXN0b25lKGNvbnRlbnRJZDogc3RyaW5nLCBtaWxlc3RvbmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IGN1cnJlbnRJZCA9IGNvbnRlbnRJZFxuICAgIGxldCBkZXB0aCA9IDBcbiAgICBjb25zdCBtYXhEZXB0aCA9IDEwXG5cbiAgICB3aGlsZSAoY3VycmVudElkICYmIGRlcHRoIDwgbWF4RGVwdGgpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmhhc2htYXBbY3VycmVudElkXVxuICAgICAgaWYgKCFpdGVtKSByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChpdGVtLnBhcmVudCA9PT0gbWlsZXN0b25lSWQpIHJldHVybiB0cnVlXG4gICAgICBjdXJyZW50SWQgPSBpdGVtLnBhcmVudFxuICAgICAgZGVwdGgrK1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGFzc2Vzc21lbnQgbG9ja2luZyB3aXRoaW4gYW4gdW5sb2NrZWQgbWlsZXN0b25lXG4gICAqIEFzc2Vzc21lbnQgbG9ja3MgdW50aWwgYWxsIG1hbmRhdG9yeSBjb3Vyc2VzIGluIHRoZSBtaWxlc3RvbmUgYXJlIGNvbXBsZXRlZFxuICAgKi9cbiAgcHJpdmF0ZSBjb21wdXRlQXNzZXNzbWVudExvY2tpbmdJbk1pbGVzdG9uZShtaWxlc3RvbmVJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWlsZXN0b25lID0gdGhpcy5oYXNobWFwW21pbGVzdG9uZUlkXVxuICAgIGlmICghbWlsZXN0b25lKSByZXR1cm5cblxuICAgIGNvbnNvbGUubG9nKGBDb21wdXRpbmcgYXNzZXNzbWVudCBsb2NraW5nIGZvciBtaWxlc3RvbmU6ICR7bWlsZXN0b25lSWR9YClcblxuICAgIC8vIEZpbmQgYXNzZXNzbWVudCBpbiB0aGlzIG1pbGVzdG9uZVxuICAgIGxldCBhc3Nlc3NtZW50SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgbGV0IGFzc2Vzc21lbnQ6IGFueSA9IG51bGxcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcCkpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmhhc2htYXBba2V5XVxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGFzc2Vzc21lbnQgdGhhdCBiZWxvbmdzIHRvIHRoaXMgbWlsZXN0b25lXG4gICAgICAvLyBNdXN0IGhhdmUgQk9USDogY29ycmVjdCBjYXRlZ29yeS9taW1lVHlwZSBBTkQgcGFyZW50IGlzIG1pbGVzdG9uZVxuICAgICAgY29uc3QgaXNBc3Nlc3NtZW50ID0gKFxuICAgICAgICBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ0NvdXJzZSBBc3Nlc3NtZW50JyB8fFxuICAgICAgICBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ0ZpbmFsIEFzc2Vzc21lbnQnIHx8XG4gICAgICAgIGl0ZW0ucHJpbWFyeUNhdGVnb3J5ID09PSAnU3RhbmRhbG9uZSBBc3Nlc3NtZW50JyB8fFxuICAgICAgICBpdGVtLm1pbWVUeXBlID09PSAnYXBwbGljYXRpb24vdm5kLnN1bmJpcmQucXVlc3Rpb25zZXQnIHx8XG4gICAgICAgIGl0ZW0ubWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi9xdWl6J1xuICAgICAgKSAmJiBpdGVtLnBhcmVudCA9PT0gbWlsZXN0b25lSWQgIC8vIE1VU1QgYmUgZGlyZWN0IGNoaWxkIG9mIG1pbGVzdG9uZVxuXG4gICAgICBpZiAoaXNBc3Nlc3NtZW50KSB7XG4gICAgICAgIGFzc2Vzc21lbnRJZCA9IGtleVxuICAgICAgICBhc3Nlc3NtZW50ID0gaXRlbVxuICAgICAgICBjb25zb2xlLmxvZyhg4pyFIEZvdW5kIG1pbGVzdG9uZSBhc3Nlc3NtZW50OiAke2l0ZW0ubmFtZX0gKCR7a2V5fSlgKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghYXNzZXNzbWVudElkIHx8ICFhc3Nlc3NtZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhgTm8gYXNzZXNzbWVudCBmb3VuZCBpbiBtaWxlc3RvbmUgJHttaWxlc3RvbmVJZH1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYXNzZXNzbWVudCBpcyBhbHJlYWR5IGNvbXBsZXRlZCAtIHJlLXJlYWQgZnJvbSBoYXNobWFwIHRvIGdldCBsYXRlc3QgZGF0YVxuICAgIGNvbnN0IGxhdGVzdEFzc2Vzc21lbnQgPSB0aGlzLmhhc2htYXBbYXNzZXNzbWVudElkXVxuICAgIGNvbnN0IGFzc2Vzc21lbnRDb21wbGV0ZWQgPSBcbiAgICAgIGxhdGVzdEFzc2Vzc21lbnQuY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBcbiAgICAgIGxhdGVzdEFzc2Vzc21lbnQuc3RhdHVzID09PSAyIHx8IFxuICAgICAgbGF0ZXN0QXNzZXNzbWVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDBcblxuICAgIC8vIEFsd2F5cyBjaGVjayBpZiBhbGwgbWFuZGF0b3J5IGNvdXJzZXMgYXJlIGNvbXBsZXRlLCBldmVuIGlmIGFzc2Vzc21lbnQgaXMgbm90IGNvbXBsZXRlZFxuICAgIC8vIFRoaXMgZW5zdXJlcyBhc3Nlc3NtZW50IGlzIHVubG9ja2VkIGFzIHNvb24gYXMgYWxsIG1hbmRhdG9yeSBjb3Vyc2VzIGFyZSBkb25lXG4gICAgbGV0IG1hbmRhdG9yeUNvdW50ID0gMFxuICAgIGxldCBjb21wbGV0ZWRNYW5kYXRvcnlDb3VudCA9IDBcbiAgICBcbiAgICBjb25zb2xlLmxvZyhgW0FTU0VTU01FTlQgTE9DSyBDSEVDS10gQ2hlY2tpbmcgbWFuZGF0b3J5IGNvdXJzZXMgZm9yIG1pbGVzdG9uZTogJHttaWxlc3RvbmVJZH1gKVxuICAgIFxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcCkpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmhhc2htYXBba2V5XVxuICAgICAgaWYgKGtleSA9PT0gYXNzZXNzbWVudElkKSBjb250aW51ZVxuICAgICAgXG4gICAgICAvLyBPbmx5IGNoZWNrIERJUkVDVCBjaGlsZHJlbiBvZiB0aGUgbWlsZXN0b25lIChjb3Vyc2VzKVxuICAgICAgaWYgKGl0ZW0ucGFyZW50ICE9PSBtaWxlc3RvbmVJZCkgY29udGludWVcbiAgICAgIFxuICAgICAgLy8gU2tpcCBhc3Nlc3NtZW50c1xuICAgICAgY29uc3QgaXNJdGVtQXNzZXNzbWVudCA9XG4gICAgICAgIGl0ZW0ucHJpbWFyeUNhdGVnb3J5ID09PSAnQ291cnNlIEFzc2Vzc21lbnQnIHx8XG4gICAgICAgIGl0ZW0ucHJpbWFyeUNhdGVnb3J5ID09PSAnRmluYWwgQXNzZXNzbWVudCcgfHxcbiAgICAgICAgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdTdGFuZGFsb25lIEFzc2Vzc21lbnQnIHx8XG4gICAgICAgIGl0ZW0ubWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldCcgfHxcbiAgICAgICAgaXRlbS5taW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3F1aXonIHx8XG4gICAgICAgIChpdGVtLm5hbWUgJiYgaXRlbS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Fzc2Vzc21lbnQnKSlcbiAgICAgIGlmIChpc0l0ZW1Bc3Nlc3NtZW50KSBjb250aW51ZVxuICAgICAgXG4gICAgICAvLyBPbmx5IGNvdW50IGNvdXJzZXMsIG5vdCBvdGhlciBjb250ZW50IHR5cGVzXG4gICAgICBpZiAoaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgIT09ICdDb3Vyc2UnKSBjb250aW51ZVxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGNvdXJzZSBpcyBtYW5kYXRvcnlcbiAgICAgIGNvbnN0IGlzTWFuZGF0b3J5ID0gaXRlbS5pc01hbmRhdG9yeSAhPT0gZmFsc2VcbiAgICAgIFxuICAgICAgaWYgKGlzTWFuZGF0b3J5KSB7XG4gICAgICAgIG1hbmRhdG9yeUNvdW50KytcbiAgICAgICAgY29uc3QgaXNDb21wbGV0ZWQgPSBcbiAgICAgICAgICBpdGVtLmNvbXBsZXRpb25TdGF0dXMgPT09IDIgfHwgXG4gICAgICAgICAgaXRlbS5zdGF0dXMgPT09IDIgfHwgXG4gICAgICAgICAgaXRlbS5jb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDAgfHxcbiAgICAgICAgICBpdGVtLnByb2dyZXNzID49IDEwMFxuICAgICAgICBcbiAgICAgICAgY29uc29sZS5sb2coYCAgQ291cnNlOiAke2l0ZW0ubmFtZX1gLCB7XG4gICAgICAgICAgaXNNYW5kYXRvcnksXG4gICAgICAgICAgY29tcGxldGlvblN0YXR1czogaXRlbS5jb21wbGV0aW9uU3RhdHVzLFxuICAgICAgICAgIHN0YXR1czogaXRlbS5zdGF0dXMsXG4gICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IGl0ZW0uY29tcGxldGlvblBlcmNlbnRhZ2UsXG4gICAgICAgICAgcHJvZ3Jlc3M6IGl0ZW0ucHJvZ3Jlc3MsXG4gICAgICAgICAgaXNDb21wbGV0ZWRcbiAgICAgICAgfSlcbiAgICAgICAgXG4gICAgICAgIGlmIChpc0NvbXBsZXRlZCkge1xuICAgICAgICAgIGNvbXBsZXRlZE1hbmRhdG9yeUNvdW50KytcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBjb25zdCBhbGxNYW5kYXRvcnlDb21wbGV0ZSA9IG1hbmRhdG9yeUNvdW50ID09PSAwIHx8IGNvbXBsZXRlZE1hbmRhdG9yeUNvdW50ID49IG1hbmRhdG9yeUNvdW50XG4gICAgXG4gICAgY29uc29sZS5sb2coYFtBU1NFU1NNRU5UIExPQ0sgQ0hFQ0tdIFN1bW1hcnk6YCwge1xuICAgICAgbWFuZGF0b3J5Q291bnQsXG4gICAgICBjb21wbGV0ZWRNYW5kYXRvcnlDb3VudCxcbiAgICAgIGFsbE1hbmRhdG9yeUNvbXBsZXRlLFxuICAgICAgYXNzZXNzbWVudENvbXBsZXRlZCxcbiAgICAgIHdpbGxVbmxvY2s6IGFzc2Vzc21lbnRDb21wbGV0ZWQgfHwgYWxsTWFuZGF0b3J5Q29tcGxldGVcbiAgICB9KVxuICAgIFxuICAgIGlmIChhc3Nlc3NtZW50Q29tcGxldGVkIHx8IGFsbE1hbmRhdG9yeUNvbXBsZXRlKSB7XG4gICAgICB0aGlzLmhhc2htYXBbYXNzZXNzbWVudElkXS5pc0Fzc2Vzc21lbnRMb2NrZWQgPSBmYWxzZVxuICAgICAgdGhpcy5oYXNobWFwW2Fzc2Vzc21lbnRJZF0ubWlsZXN0b25lQXNzZXNzbWVudExvY2tlZCA9IGZhbHNlXG4gICAgICB0aGlzLmhhc2htYXBbYXNzZXNzbWVudElkXS5hc3Nlc3NtZW50TG9ja01lc3NhZ2UgPSAnJ1xuICAgICAgY29uc29sZS5sb2coYOKchSBBc3Nlc3NtZW50ICR7YXNzZXNzbWVudElkfSBpcyBVTkxPQ0tFRCAoY29tcGxldGVkIG9yIGFsbCBtYW5kYXRvcnkgZG9uZSlgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgbm90IHVubG9ja2VkLCBsb2NrIHRoZSBhc3Nlc3NtZW50XG4gICAgdGhpcy5oYXNobWFwW2Fzc2Vzc21lbnRJZF0uaXNBc3Nlc3NtZW50TG9ja2VkID0gdHJ1ZVxuICAgIHRoaXMuaGFzaG1hcFthc3Nlc3NtZW50SWRdLm1pbGVzdG9uZUFzc2Vzc21lbnRMb2NrZWQgPSB0cnVlXG4gICAgdGhpcy5oYXNobWFwW2Fzc2Vzc21lbnRJZF0uYXNzZXNzbWVudExvY2tNZXNzYWdlID0gJ1RoaXMgY29udGVudCBpcyBsb2NrZWQuIENvbXBsZXRlIGFsbCBtYW5kYXRvcnkgaXRlbXMgdG8gdW5sb2NrIHRoZSBhc3Nlc3NtZW50LidcblxuICAgIGNvbnNvbGUubG9nKGDwn5SSIEFzc2Vzc21lbnQgJHthc3Nlc3NtZW50SWR9IGlzIExPQ0tFRDpgLCB7XG4gICAgICBtYW5kYXRvcnlDb3VudCxcbiAgICAgIGNvbXBsZXRlZE1hbmRhdG9yeUNvdW50LFxuICAgICAgaXNMb2NrZWQ6IHRydWUsXG4gICAgICBtaWxlc3RvbmVBc3Nlc3NtZW50TG9ja2VkOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIGFsbCBjaGlsZHJlbiBvZiBhIG1pbGVzdG9uZSBhcyBwYXJlbnQtbG9ja2VkIG9yIHVubG9ja2VkXG4gICAqL1xuICBwcml2YXRlIG1hcmtNaWxlc3RvbmVDaGlsZHJlbkFzUGFyZW50TG9ja2VkKG1pbGVzdG9uZUlkOiBzdHJpbmcsIGlzTG9ja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5oYXNobWFwKSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaGFzaG1hcFtrZXldXG4gICAgICBcbiAgICAgIC8vIERpcmVjdCBjaGlsZHJlbiBvZiBtaWxlc3RvbmVcbiAgICAgIGlmIChpdGVtLnBhcmVudCA9PT0gbWlsZXN0b25lSWQpIHtcbiAgICAgICAgdGhpcy5oYXNobWFwW2tleV0uaXNQYXJlbnRNaWxlc3RvbmVMb2NrZWQgPSBpc0xvY2tlZFxuICAgICAgICBcbiAgICAgICAgLy8gQWxzbyBtYXJrIG5lc3RlZCBjaGlsZHJlbiAoZS5nLiwgcmVzb3VyY2VzIGluc2lkZSBjb3Vyc2VzKVxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgIHRoaXMubWFya05lc3RlZENoaWxkcmVuQXNQYXJlbnRMb2NrZWQoa2V5LCBpc0xvY2tlZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBtYXJrIG5lc3RlZCBjaGlsZHJlbiBhcyBwYXJlbnQtbG9ja2VkXG4gICAqL1xuICBwcml2YXRlIG1hcmtOZXN0ZWRDaGlsZHJlbkFzUGFyZW50TG9ja2VkKHBhcmVudElkOiBzdHJpbmcsIGlzTG9ja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5oYXNobWFwKSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaGFzaG1hcFtrZXldXG4gICAgICBcbiAgICAgIGlmIChpdGVtLnBhcmVudCA9PT0gcGFyZW50SWQpIHtcbiAgICAgICAgdGhpcy5oYXNobWFwW2tleV0uaXNQYXJlbnRNaWxlc3RvbmVMb2NrZWQgPSBpc0xvY2tlZFxuICAgICAgICBcbiAgICAgICAgLy8gUmVjdXJzZSBmb3IgZGVlcGVyIG5lc3RpbmdcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICB0aGlzLm1hcmtOZXN0ZWRDaGlsZHJlbkFzUGFyZW50TG9ja2VkKGtleSwgaXNMb2NrZWQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDYWxjdWxhdGlvbnNGcm9tQ2hpbGRyZW4oaXRlbTogTnNDb250ZW50LklDb250ZW50KSB7XG4gICAgaXRlbVsnZHVyYXRpb24nXSA9IGl0ZW0uY2hpbGRyZW4ucmVkdWNlKChzdW0sIGNoaWxkKSA9PiB7XG4gICAgICByZXR1cm4gc3VtICsgTnVtYmVyKGNoaWxkLmR1cmF0aW9uIHx8IDApXG4gICAgfSwgMClcbiAgICBjb25zdCBjb21wbGV0ZWRJdGVtcyA9IF8uZmlsdGVyKGl0ZW0uY2hpbGRyZW4sIHIgPT4gci5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IHIuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMClcbiAgICBjb25zdCB0b3RhbENvdW50ID0gXy50b0ludGVnZXIoXy5nZXQoaXRlbSwgJ2xlYWZOb2Rlc0NvdW50JykpIHx8IDFcbiAgICBpdGVtWydjb21wbGV0aW9uUGVyY2VudGFnZSddID0gTnVtYmVyKCgoY29tcGxldGVkSXRlbXMubGVuZ3RoIC8gdG90YWxDb3VudCkgKiAxMDApLnRvRml4ZWQoKSlcbiAgICBpdGVtWydjb21wbGV0aW9uU3RhdHVzJ10gPSAoaXRlbS5jb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDApID8gMiA6IDFcbiAgICByZXR1cm4gaXRlbVxuICB9XG5cbiAgZmV0Y2hDb250ZW50SGlzdG9yeVYyKHJlcTogTnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YVJlcSk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YT4ge1xuICAgIHJlcS5yZXF1ZXN0LmZpZWxkcyA9IFsncHJvZ3Jlc3NkZXRhaWxzJ11cblxuICAgIGlmIChyZXEucmVxdWVzdC5jb3Vyc2VJZCkge1xuICAgICAgY29uc3QgcmVzbHV0OiBhbnkgPSB0aGlzLmh0dHAucG9zdDxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPihcbiAgICAgICAgYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9ISVNUT1JZVjJ9LyR7cmVxLnJlcXVlc3QuY291cnNlSWR9YCwgcmVxXG4gICAgICApXG4gICAgICAvLyBkYXRhLnN1YnNjcmliZSgoc3Vic2NyaWJlRGF0YTogYW55KSA9PiB7XG4gICAgICAvLyAgICAgICB0aGlzLnByb2dyYW1DaGlsZENvdXJzZVJlc3VtZURhdGEubmV4dCh7IHJlc3VtZURhdGE6IHN1YnNjcmliZURhdGEucmVzdWx0LmNvbnRlbnRMaXN0LCBjb3Vyc2VJZDogcmVxLnJlcXVlc3QuY291cnNlSWQgfSlcbiAgICAgIC8vICAgICB9KVxuICAgICAgcmV0dXJuIHJlc2x1dFxuICAgIH1cbiAgICByZXR1cm4gb2YoKVxuXG4gIH1cblxuICBkb3dvbmxvYWRDZXJ0aWZpY2F0ZShjZXJ0SWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8eyByZXN1bHQ6IGFueSB9PihcbiAgICAgIEFQSV9FTkRfUE9JTlRTLkNFUlRfRE9XTkxPQUQoY2VydElkKSxcbiAgICApXG4gIH1cbiAgZ2V0U2VydmVyRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDx7IHJlc3VsdDogTnNBcHBUb2MuSVBvc3RBc3Nlc3NtZW50W10gfT4oXG4gICAgICBBUElfRU5EX1BPSU5UUy5TRVJWRVJfREFURSlcbiAgfVxuXG4gIGdldEZvcm1CeUlkKGZvcm1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoQVBJX0VORF9QT0lOVFMuR0VUX0ZPUk1fQllJRChmb3JtSWQpKVxuICB9XG5cbiAgc3VibWl0Rm9ybShmb3JtRGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oQVBJX0VORF9QT0lOVFMuU1VCTUlUX0ZPUk0sIGZvcm1EYXRhKVxuICB9XG5cbiAgZ2V0Rm9ybUJ5SWRQdWJsaWMoZm9ybUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChBUElfRU5EX1BPSU5UUy5HRVRfRk9STV9CWUlEX1BVQkxJQyhmb3JtSWQpKVxuICB9XG5cbiAgc3VibWl0Rm9ybVB1YmxpYyhmb3JtRGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oQVBJX0VORF9QT0lOVFMuU1VCTUlUX0ZPUk1fUFVCTElDLCBmb3JtRGF0YSlcbiAgfVxuXG4gIGdldEFwbGxpY2F0aW9uc0J5SWQoZm9ybUlkOiBzdHJpbmcsIGNvbnRleHRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KEFQSV9FTkRfUE9JTlRTLkdFVF9BUFBMSUNBVElPTlNfQllfSUQoZm9ybUlkLCBjb250ZXh0SWQpKVxuICB9XG5cbiAgc2hhcmVDb250ZW50KHJlcUJvZHk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke0FQSV9FTkRfUE9JTlRTLlNIQVJFX0NPTlRFTlR9YCwgcmVxQm9keSlcbiAgfVxuICBjaGVja01vZHVsZVdpc2VEYXRhKGNvbnRlbnQ6IGFueSkge1xuICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnRlbnQuY2hpbGRyZW4uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVsZS5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1PRFVMRSkge1xuICAgICAgICAgIGxldCBtb2R1bGVSZXNvdXJzZUNvdW50ID0gMFxuICAgICAgICAgIGxldCBvZmZsaW5lUmVzb3Vyc2VDb3VudCA9IDBcbiAgICAgICAgICBlbGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGRFbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkRWxlLnByaW1hcnlDYXRlZ29yeSAhPT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuT0ZGTElORV9TRVNTSU9OKSB7XG4gICAgICAgICAgICAgIG1vZHVsZVJlc291cnNlQ291bnQgPSBtb2R1bGVSZXNvdXJzZUNvdW50ICsgMVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2ZmbGluZVJlc291cnNlQ291bnQgPSBvZmZsaW5lUmVzb3Vyc2VDb3VudCArIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIGVsZVsnbW9kdWxlUmVzb3Vyc2VDb3VudCddID0gbW9kdWxlUmVzb3Vyc2VDb3VudFxuICAgICAgICAgIGVsZVsnb2ZmbGluZVJlc291cnNlQ291bnQnXSA9IG9mZmxpbmVSZXNvdXJzZUNvdW50XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGVsZS5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPVVJTRSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja01vZHVsZVdpc2VEYXRhKGVsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIGFzeW5jIGZldGNoQ291cnNlSGVpcmFyY2h5KGNvbnRlbnREYXRhOiBhbnkpIHtcbiAgICBpZiAoY29udGVudERhdGEgJiYgY29udGVudERhdGEuY2hpbGRyZW4pIHtcbiAgICAgIGZvciAoY29uc3QgZWxlIG9mIGNvbnRlbnREYXRhLmNoaWxkcmVuKSB7XG4gICAgICAgIGlmIChlbGUucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkNPVVJTRSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMud2lkZ2V0U3ZjLmZldGNoQ29udGVudChlbGUuaWRlbnRpZmllcikudG9Qcm9taXNlKCkudGhlbihhc3luYyAoc3ViRWxlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChzdWJFbGUucmVzdWx0ICYmIHN1YkVsZS5yZXN1bHQuY29udGVudFxuICAgICAgICAgICAgICAmJiBzdWJFbGUucmVzdWx0LmNvbnRlbnQuY2hpbGRyZW4gJiYgc3ViRWxlLnJlc3VsdC5jb250ZW50LmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICBlbGVbJ2NoaWxkcmVuJ10gPSBzdWJFbGUucmVzdWx0LmNvbnRlbnQuY2hpbGRyZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0VHJhbnNjcmlwdGlvbkRhdGEoZGF0YTogYW55KSB7XG4gICAgLy8gIGNvbnNvbGUubG9nKCdkYXRhLS0nLCBkYXRhKVxuICAgIHRoaXMudHJhbnNyaXB0aW9uRGF0YVN1YmplY3QubmV4dChkYXRhKTtcbiAgfVxuXG4gIHNldEFjdGl2ZVN1YnRpdGxlTGFuZ3VhZ2UoYWN0aXZlTGFuZzogYW55KSB7XG4gICAgdGhpcy50cmFuc3JpcHRpb25BY3RpdmVMYW5ndWFnZURhdGFPYmplY3QubmV4dChhY3RpdmVMYW5nKVxuICB9XG5cblxuXG4gIGFpR2V0UmVzb3VyY2VWdHRGaWxlKHJlc291cmNlSUQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQUlfUkVTT1VSQ0VfVlRUX0ZJTEV9P3Jlc291cmNlX2lkPSR7cmVzb3VyY2VJRH1gKVxuICB9XG5cbiAgcmVhZFByZUVucm9sbG1lbnRSZXNvdXJjZXNTdGF0ZShyZXE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KGAke0FQSV9FTkRfUE9JTlRTLlBSRV9FTlJPTExNRU5UX1NUQVRFX1JFQUR9YCwgcmVxKVxuICB9XG5cbiAgY3JlYXRlQ29udGVudFYyKHJlcXVlc3RCb2R5OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdChcbiAgICAgICAgYCR7QVBJX0VORF9QT0lOVFMuQ1JFQVRFX1JFU09VUkNFfWAsXG4gICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGRhdGEucmVzdWx0LmlkZW50aWZpZXJcbiAgICAgICAgfSksXG4gICAgICApXG4gIH1cblxuXG4gIHVwbG9hZEFzc2lnbm1lbnRBbnN3ZXIoY29udGVudElkOiBzdHJpbmcsIGJhdGNoSWQ6IHN0cmluZywgYXNzaWdubWVudElkOiBzdHJpbmcsIGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSwgZmlsZS5uYW1lKVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHtBUElfRU5EX1BPSU5UUy5VUExPQURfQVNTSUdOTUVOVH0vJHtjb250ZW50SWR9LyR7YmF0Y2hJZH0vJHthc3NpZ25tZW50SWR9YCwgZm9ybURhdGEpO1xuICB9XG5cblxuICByZWFkQ29udGVudFYyKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oXG4gICAgICBgJHtBUElfRU5EX1BPSU5UUy5SRUFEX1JFU09VUkNFfXJlYWQvJHtpZH0/bW9kZT1lZGl0YCxcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gZGF0YS5yZXN1bHQuY29udGVudFxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICB1cGxvYWQoXG4gICAgZGF0YTogRm9ybURhdGEsXG4gICAgY29udGVudERhdGE6IGFueSxcbiAgICBvcHRpb25zPzogYW55LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgY29uc3QgZmlsZSA9IGRhdGEuZ2V0KCdjb250ZW50JykgYXMgRmlsZVxuICAgIGxldCBmaWxlTmFtZSA9IGZpbGUubmFtZVxuICAgIGlmIChbJ2NoYW5uZWwuanNvbiddLmluZGV4T2YoZmlsZU5hbWUpIDwgMCkge1xuICAgICAgZmlsZU5hbWUgPSB0aGlzLmFwcGVuZFRvRmlsZW5hbWUoZmlsZU5hbWUpXG4gICAgfVxuICAgIGNvbnN0IG5ld0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICBuZXdGb3JtRGF0YS5hcHBlbmQoJ2RhdGEnLCBmaWxlLCBmaWxlTmFtZSlcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihcbiAgICAgIGAke0FQSV9FTkRfUE9JTlRTLlVQTE9BRF9GSUxFfXVwbG9hZC8ke2NvbnRlbnREYXRhLmNvbnRlbnRJZH1gLFxuICAgICAgbmV3Rm9ybURhdGEsXG4gICAgICBvcHRpb25zXG4gICAgKVxuICB9XG5cbiAgYXBwZW5kVG9GaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGltZVN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICBjb25zdCBkb3RJbmRleCA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJylcbiAgICBpZiAoZG90SW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZmlsZW5hbWUgKyB0aW1lU3RhbXBcbiAgICB9XG4gICAgcmV0dXJuIGZpbGVuYW1lLnN1YnN0cmluZygwLCBkb3RJbmRleCkgKyB0aW1lU3RhbXAgKyBmaWxlbmFtZS5zdWJzdHJpbmcoZG90SW5kZXgpXG4gIH1cblxuICB1cGRhdGVDb250ZW50V2l0aEZld0ZpZWxkcyhyZXF1ZXN0Qm9keTogYW55LCBpZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8YW55PihcbiAgICAgIGAke0FQSV9FTkRfUE9JTlRTLlVQREFURV9SRVNPVVJDRX0vJHtpZGVudGlmaWVyfWAsXG4gICAgICByZXF1ZXN0Qm9keSxcbiAgICApXG4gIH1cblxuICBzZWFyY2hBc3NpZ25tZW50cyhyZXF1ZXN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChBUElfRU5EX1BPSU5UUy5TRUFSQ0gsIHJlcXVlc3QpXG4gIH1cblxuICBzdWJtaXREcmFmdEFzc2lnbm1lbnQocmVxdWVzdDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChBUElfRU5EX1BPSU5UUy5TVUJNSVRfRFJBRlRfQVNTSUdOTUVOVCwgcmVxdWVzdClcbiAgfVxuXG4gIHN1Ym1pdEFzc2lnbm1lbnQocmVxdWVzdDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoQVBJX0VORF9QT0lOVFMuU1VCTUlUX0FTU0lHTk1FTlQsIHJlcXVlc3QpXG4gIH1cblxuICBub3RpZnlBc3NpZ25tZW50U3VibWlzc2lvbihwYXlsb2FkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChBUElfRU5EX1BPSU5UUy5OT1RJRllfQVNTSUdOTUVOVF9TVUJNSVNTSU9OLCBwYXlsb2FkKVxuICB9XG5cbiAgZ2V0QXNzaWdubWVudFN0YXR1cyhyZXF1ZXN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHtBUElfRU5EX1BPSU5UUy5BU1NJR05NRU5UX1NUQVRVU31gLCByZXF1ZXN0KVxuICB9XG5cbiAgcmVhZEFzc2lnbm1lbnRGaWxlKGNvbnRlbnRJZDogc3RyaW5nLCBiYXRjaElkOiBzdHJpbmcsIGFzc2lnbm1lbnRJZDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyBQcm9wZXJseSBlbmNvZGUgdGhlIHBhcmFtZXRlcnMgdG8gYXZvaWQgbWFsZm9ybWVkIHJlcXVlc3QgZXJyb3JzXG4gICAgY29uc3QgZW5jb2RlZFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgY29udGVudElkOiBjb250ZW50SWQgfHwgJycsXG4gICAgICBiYXRjaElkOiBiYXRjaElkIHx8ICcnLFxuICAgICAgZm9ybUlkOiBhc3NpZ25tZW50SWQgfHwgJycsXG4gICAgICBmaWxlTmFtZTogZmlsZU5hbWUgfHwgJydcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke0FQSV9FTkRfUE9JTlRTLlJFQURfQVNTSUdOTUVOVH0/JHtlbmNvZGVkUGFyYW1zLnRvU3RyaW5nKCl9YCwge1xuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtLCBhcHBsaWNhdGlvbi9wZGYsIGFwcGxpY2F0aW9uL21zd29yZCwgYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnXG4gICAgICB9XG4gICAgfSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIG1pbGVzdG9uZSBhY2hpZXZlbWVudFxuICAgKiBAcGFyYW0gdXNlcklkIFVzZXIgSURcbiAgICogQHBhcmFtIGNvdXJzZUlkIENvdXJzZSBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBiYXRjaElkIEJhdGNoIElEXG4gICAqIEBwYXJhbSBtaWxlc3RvbmVJZCBNaWxlc3RvbmUgaWRlbnRpZmllciAoZS5nLiwgJ20xJywgJ20yJylcbiAgICovXG4gIGdlbmVyYXRlTWlsZXN0b25lQWNoaWV2ZW1lbnQodXNlcklkOiBzdHJpbmcsIGNvdXJzZUlkOiBzdHJpbmcsIGJhdGNoSWQ6IHN0cmluZywgbWlsZXN0b25lSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYXBpVXJsID0gJy9hcGlzL3Byb3hpZXMvdjgvYWNoaWV2ZW1lbnQvZHluYW1pYy92MS9nZW5lcmF0ZSdcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICB1c2VySWQsXG4gICAgICAgIGNvdXJzZUlkLFxuICAgICAgICBiYXRjaElkLFxuICAgICAgICBtaWxlc3RvbmVJZFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYXBpVXJsLCByZXF1ZXN0KVxuICB9XG5cbn1cbiJdfQ==
1806
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL3NlcnZpY2VzL2FwcC10b2Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFDLE9BQU8sRUFBRSxPQUFPLEVBQWMsS0FBSyxFQUFnQixlQUFlLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUVoRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFFM0UsT0FBTyxFQUFFLFFBQVEsRUFBYSxNQUFNLHlCQUF5QixDQUFBO0FBRTdELDJCQUEyQjtBQUMzQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7QUFFdEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTs7Ozs7O0FBRWhELHVDQUF1QztBQUN2QyxNQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUFBO0FBQzlDLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFBO0FBRXhDLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLFlBQVksRUFBRSxHQUFHLGFBQWEsaUNBQWlDO0lBQy9ELGVBQWUsRUFBRSxHQUFHLGlCQUFpQixrQkFBa0I7SUFDdkQsWUFBWSxFQUFFLEdBQUcsaUJBQWlCLGVBQWU7SUFDakQsaUJBQWlCLEVBQUUsdUNBQXVDO0lBQzFELGNBQWMsRUFBRSxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLFlBQVksU0FBUyxTQUFTO0lBQ3pGLG1CQUFtQixFQUFFLENBQUMsU0FBaUIsRUFBRSxPQUFlLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FDdkUsaURBQWlELFNBQVMs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QUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsNEJBQTRCLENBQUMsTUFBYyxFQUFFLFFBQWdCLEVBQUUsT0FBZSxFQUFFLFdBQW1CO1FBQ2pHLE1BQU0sTUFBTSxHQUFHLGtEQUFrRCxDQUFBO1FBQ2pFLE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLE1BQU07Z0JBQ04sUUFBUTtnQkFDUixPQUFPO2dCQUNQLFdBQVc7YUFDWjtTQUNGLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUN4QyxDQUFDOytHQXo4RFUsYUFBYTttSEFBYixhQUFhLGNBRlosTUFBTTs7NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IERhdGEgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBFTVBUWSwgU3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3QsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4uL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5tb2RlbCdcbmltcG9ydCB7IE5zQ29udGVudENvbnN0YW50cyB9IGZyb20gJy4uL19jb25zdGFudHMvd2lkZ2V0LWNvbnRlbnQuY29uc3RhbnRzJ1xuaW1wb3J0IHsgV2lkZ2V0Q29udGVudFNlcnZpY2UgfSBmcm9tICcuLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQuc2VydmljZSdcbmltcG9ydCB7IE5zQXBwVG9jLCBOc0NvaG9ydHMgfSBmcm9tICcuLi9tb2RlbHMvYXBwLXRvYy5tb2RlbCdcbmltcG9ydCB7IFRGZXRjaFN0YXR1cywgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IENvbnRlbnRMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAc3VuYmlyZC1jYi9jb25zdW1wdGlvbidcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG4vLyBUT0RPOiBtb3ZlIHRoaXMgaW4gc29tZSBjb21tb24gcGxhY2VcbmNvbnN0IFBST1RFQ1RFRF9TTEFHX1Y4ID0gJy9hcGlzL3Byb3RlY3RlZC92OCdcbmNvbnN0IFBST1hZX1NMQUdfVjggPSAnL2FwaXMvcHJveGllcy92OCdcblxuY29uc3QgQVBJX0VORF9QT0lOVFMgPSB7XG4gIEJBVENIX0NSRUFURTogYCR7UFJPWFlfU0xBR19WOH0vbGVhcm5lci9jb3Vyc2UvdjEvYmF0Y2gvY3JlYXRlYCxcbiAgQ09OVEVOVF9QQVJFTlRTOiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9wYXJlbnRzYCxcbiAgQ09OVEVOVF9ORVhUOiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9uZXh0YCxcbiAgQ09OVEVOVF9ISVNUT1JZVjI6IGAvYXBpcy9wcm94aWVzL3Y4L3JlYWQvY29udGVudC1wcm9ncmVzYCxcbiAgQ09OVEVOVF9QQVJFTlQ6IChjb250ZW50SWQ6IHN0cmluZykgPT4gYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvJHtjb250ZW50SWR9L3BhcmVudGAsXG4gIENPTlRFTlRfQVVUSF9QQVJFTlQ6IChjb250ZW50SWQ6IHN0cmluZywgcm9vdE9yZzogc3RyaW5nLCBvcmc6IHN0cmluZykgPT5cbiAgICBgL2FwaXMvYXV0aEFwaS9hY3Rpb24vY29udGVudC9wYXJlbnQvaGllcmFyY2h5LyR7Y29udGVudElkfT9yb290T3JnPSR7cm9vdE9yZ30mb3JnPSR7b3JnfWAsXG4gIENPSE9SVFM6IChjb2hvcnRUeXBlOiBOc0NvaG9ydHMuRUNvaG9ydFR5cGVzLCBjb250ZW50SWQ6IHN0cmluZykgPT5cbiAgICBgJHtQUk9URUNURURfU0xBR19WOH0vY29ob3J0cy8ke2NvaG9ydFR5cGV9LyR7Y29udGVudElkfWAsXG4gIEVYVEVSTkFMX0NPTlRFTlQ6IChjb250ZW50SWQ6IHN0cmluZykgPT5cbiAgICBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9leHRlcm5hbC1hY2Nlc3MvJHtjb250ZW50SWR9YCxcbiAgQ09IT1JUU19HUk9VUF9VU0VSOiAoZ3JvdXBJZDogbnVtYmVyKSA9PiBgJHtQUk9URUNURURfU0xBR19WOH0vY29ob3J0cy8ke2dyb3VwSWR9YCxcbiAgUkVMQVRFRF9SRVNPVVJDRTogKGNvbnRlbnRJZDogc3RyaW5nLCBjb250ZW50VHlwZTogc3RyaW5nKSA9PlxuICAgIGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9raHViL2ZldGNoUmVsYXRlZFJlc291cmNlcy8ke2NvbnRlbnRJZH0vJHtjb250ZW50VHlwZX1gLFxuICBQT1NUX0FTU0VTU01FTlQ6IChjb250ZW50SWQ6IHN0cmluZykgPT5cbiAgICBgJHtQUk9URUNURURfU0xBR19WOH0vdXNlci9ldmFsdWF0ZS9wb3N0LWFzc2Vzc21lbnQvJHtjb250ZW50SWR9YCxcbiAgR0VUX0NPTlRFTlQ6IChjb250ZW50SWQ6IHN0cmluZykgPT5cbiAgICBgJHtQUk9YWV9TTEFHX1Y4fS9hY3Rpb24vY29udGVudC92My9yZWFkLyR7Y29udGVudElkfWAsXG4gIENFUlRfRE9XTkxPQUQ6IChjZXJ0SWQ6IGFueSkgPT4gYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvaG9ydHMvY291cnNlL2JhdGNoL2NlcnQvZG93bmxvYWQvJHtjZXJ0SWR9YCxcbiAgU0VSVkVSX0RBVEU6ICdhcGlzL3B1YmxpYy92OC9zeXN0ZW1EYXRlJyxcbiAgU0hBUkVfQ09OVEVOVDogJy9hcGlzL3Byb3hpZXMvdjgvdXNlci92MS9jb250ZW50L3JlY29tbWVuZCcsXG4gIEdFVF9GT1JNX0JZSUQ6IChmb3JtSWQ6IHN0cmluZykgPT4gYGFwaXMvcHJveGllcy92OC9mb3Jtcy92Mi9nZXRGb3JtQnlJZD9mb3JtSWQ9JHtmb3JtSWR9YCxcbiAgLy8gU1VCTUlUX0ZPUk06IGAvYXBpcy9wcm94aWVzL3Y4L2Zvcm1zL3YxL3NhdmVGb3JtU3VibWl0YCxcbiAgU1VCTUlUX0ZPUk06IGBhcGlzL3Byb3hpZXMvdjgvZm9ybXMvdjIvc2F2ZUZvcm1TdWJtaXRgLFxuICBHRVRfRk9STV9CWUlEX1BVQkxJQzogKGZvcm1JZDogc3RyaW5nKSA9PiBgYXBpcy9wdWJsaWMvdjgvcHVibGljL2Zvcm1zL3YyL2dldEZvcm1CeUlkP2Zvcm1JZD0ke2Zvcm1JZH1gLFxuICBTVUJNSVRfRk9STV9QVUJMSUM6IGBhcGlzL3B1YmxpYy92OC9wdWJsaWMvZm9ybXMvdjIvc2F2ZUZvcm1TdWJtaXRgLFxuICAvLyBnZXQgYW5zd2VycyBmb3IgZm9ybVxuICBHRVRfQVBQTElDQVRJT05TX0JZX0lEOiAoZm9ybUlkOiBzdHJpbmcsIGNvbnRleHRJZDogc3RyaW5nKSA9PiBgL2FwaXMvcHJveGllcy92OC9mb3Jtcy92Mi9nZXRBcHBsaWNhdGlvbnNCeUlkP2Zvcm1JZD0ke2Zvcm1JZH0mY29udGV4dElkPSR7Y29udGV4dElkfWAsXG4gIEFJX1JFU09VUkNFX1ZUVF9GSUxFOiBgJHtQUk9YWV9TTEFHX1Y4fS9jaGF0Ym90L3YzL3RyYW5zY29kZXIvc3RhdHNgLFxuICAvLyBHRVRfRk9STV9CWUlEOiAoZm9ybUlkOiBzdHJpbmcpID0+IGBhcGlzL3Byb3hpZXMvdjgvZm9ybXMvZ2V0Rm9ybUJ5SWQ/aWQ9JHtmb3JtSWR9YCxcbiAgUFJFX0VOUk9MTE1FTlRfU1RBVEVfUkVBRDogYC9hcGlzL3Byb3hpZXMvdjgvY29udGVudC92Mi9zdGF0ZS9yZWFkYCxcbiAgQ1JFQVRFX1JFU09VUkNFOiBgYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2NyZWF0ZWAsXG4gIFJFQURfUkVTT1VSQ0U6IGBhcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvYCxcbiAgVVBMT0FEX0ZJTEU6IGBhcGlzL3Byb3hpZXMvdjgvdXBsb2FkL2FjdGlvbi9jb250ZW50L3YzL2AsXG4gIFVQREFURV9SRVNPVVJDRTogYGFwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My91cGRhdGVgLFxuICBTRUFSQ0g6IGBhcGlzL3Byb3hpZXMvdjgvYXNzaWdubWVudC92MS9zZWFyY2hgLFxuICBTVUJNSVRfRFJBRlRfQVNTSUdOTUVOVDogYGFwaXMvcHJveGllcy92OC9hc3NpZ25tZW50L3YxL3N1Ym1pdERyYWZ0YCxcbiAgU1VCTUlUX0FTU0lHTk1FTlQ6IGBhcGlzL3Byb3hpZXMvdjgvYXNzaWdubWVudC92MS9zdWJtaXRgLFxuICBBU1NJR05NRU5UX1NUQVRVUzogYGFwaXMvcHJveGllcy92OC9mb3Jtcy92Mi9zdWJtaXNzaW9ucy9zZWFyY2hgLFxuICBVUExPQURfQVNTSUdOTUVOVDogYGFwaXMvcHJveGllcy92OC9zdG9yYWdlL3YxL2JwL2Fzc2lnbm1lbnQvYW5zd2VyYCxcbiAgUkVBRF9BU1NJR05NRU5UOiBgYXBpcy9wcm94aWVzL3Y4L3N0b3JhZ2UvdjEvYnAvYXNzaWdubWVudC9hbnN3ZXIvcmVhZC9maWxlYCxcbiAgTk9USUZZX0FTU0lHTk1FTlRfU1VCTUlTU0lPTjogYGFwaXMvcHJveGllcy92OC92MS9ub3RpZnlBc3NpZ25tZW50L3N1Ym1pdGAsXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwcFRvY1NlcnZpY2Uge1xuICBhbmFseXRpY3NSZXBsYXlTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpXG4gIGFuYWx5dGljc0ZldGNoU3RhdHVzOiBURmV0Y2hTdGF0dXMgPSAnbm9uZSdcbiAgYmF0Y2hSZXBsYXlTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpXG4gIHNldEJhdGNoRGF0YVN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KClcbiAgZ2V0U2VsZWN0ZWRCYXRjaDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZW5zdXJlIGNvbXBsZXRpb25TdGF0dXMgaXMgYWx3YXlzIGEgbnVtYmVyXG4gICAqIENvbnZlcnRzIHN0cmluZyB2YWx1ZXMgdG8gMCBhbmQgZW5zdXJlcyB2YWxpZCBudW1iZXIgcmFuZ2UgKDAsIDEsIDIpXG4gICAqL1xuICBwcml2YXRlIHNhZmVDb21wbGV0aW9uU3RhdHVzKHZhbHVlOiBhbnkpOiBudW1iZXIge1xuICAgIGNvbnN0IG51bVZhbHVlID0gTnVtYmVyKHZhbHVlKVxuICAgIGlmIChpc05hTihudW1WYWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIDBcbiAgICB9XG4gICAgcmV0dXJuIG51bVZhbHVlXG4gIH1cbiAgc2V0V0ZEYXRhU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKVxuICByZXN1bWVEYXRhOiBTdWJqZWN0PE5zQ29udGVudC5JQ29udGludWVMZWFybmluZ0RhdGEgfCBudWxsPiA9IG5ldyBTdWJqZWN0PGFueT4oKVxuICBwcml2YXRlIHNob3dTdWJ0aXRsZU9uQmFubmVycyA9IGZhbHNlXG4gIHByaXZhdGUgY2FuU2hvd0Rlc2NyaXB0aW9uID0gZmFsc2VcbiAgcmVzdW1lRGF0YVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcbiAgcHJpbWFyeUNhdGVnb3J5ID0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnlcbiAgcHJpdmF0ZSB1cGRhdGVSZXZpZXdzID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSlcbiAgdXBkYXRlUmV2aWV3c09ic2VydmFibGUgPSB0aGlzLnVwZGF0ZVJldmlld3MuYXNPYnNlcnZhYmxlKClcbiAgcHVibGljIHNlcnZlckRhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKVxuICBjdXJyZW50U2VydmVyRGF0ZSA9IHRoaXMuc2VydmVyRGF0ZS5hc09ic2VydmFibGUoKVxuICBwdWJsaWMgY29udGVudExvYWRlciA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpXG4gIGNvbnRlbnRMb2FkZXIkID0gdGhpcy5jb250ZW50TG9hZGVyLmFzT2JzZXJ2YWJsZSgpXG4gIHB1YmxpYyBnZXRQYWdlU2Nyb2xsID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKVxuICB1cGRhdGVQYWdlU2Nyb2xsID0gdGhpcy5nZXRQYWdlU2Nyb2xsLmFzT2JzZXJ2YWJsZSgpXG4gIHB1YmxpYyBoYXNobWFwOiBhbnkgPSB7fVxuICBwcml2YXRlIGN1cnJlbnRSb290Q29udGVudElkOiBzdHJpbmcgfCBudWxsID0gbnVsbCAvLyBUcmFjayBjdXJyZW50IGNvbnRlbnQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgaGFzaG1hcCBjbGVhcmluZ1xuICBwdWJsaWMgaGFzaG1hcFVwZGF0ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbClcbiAgaGFzaG1hcFVwZGF0ZWQkID0gdGhpcy5oYXNobWFwVXBkYXRlZC5hc09ic2VydmFibGUoKVxuICBwcml2YXRlIHRyYW5zcmlwdGlvbkRhdGFTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpOyAvLyBTdGFydCB3aXRoIG51bGxcbiAgdHJhbnNjcmlwdGlvbkRhdGEkID0gdGhpcy50cmFuc3JpcHRpb25EYXRhU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgcHVibGljIHRyYW5zcmlwdGlvbkFjdGl2ZUxhbmd1YWdlRGF0YU9iamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgcHVibGljIHRyYW5zcmlwdGlvbkFjdGl2ZUxhbmd1YWdlRGF0YU9iamVjdCQgPSB0aGlzLnRyYW5zcmlwdGlvbkFjdGl2ZUxhbmd1YWdlRGF0YU9iamVjdC5hc09ic2VydmFibGUoKTtcbiAgcHVibGljIHRyYW5zcmlwdGlvbklkZW50aWZpZXIgPSBuZXcgU3ViamVjdCgpOyAvLyBTdGFydCB3aXRoIG51bGxcbiAgY2hhbmdlVHJhbnNjcmlwdGlvbkxhbmd1YWdlRXZlbnQgPSBuZXcgU3ViamVjdCgpXG4gIHBsYXlUcmFuc2NyaXB0aW9uVmlkZW8gPSBuZXcgU3ViamVjdCgpXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBjb250ZW50TGFuZ1N2YzogQ29udGVudExhbmd1YWdlU2VydmljZSwgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSwgcHJpdmF0ZSB3aWRnZXRTdmM6IFdpZGdldENvbnRlbnRTZXJ2aWNlKSB7XG4gICAgLy8gdGhpcyByZXN1bWUgZGF0YSBzdWJzY3JpcHRpb24gaXMgZm9yIG9uIGxvYWRcbiAgICB0aGlzLnJlc3VtZURhdGFTdWJzY3JpcHRpb24gPSB0aGlzLnJlc3VtZURhdGEuc3Vic2NyaWJlKFxuICAgICAgKF9kYXRhUmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIH0pXG4gIH1cblxuICBnZXQgc3VidGl0bGVPbkJhbm5lcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1N1YnRpdGxlT25CYW5uZXJzXG4gIH1cbiAgc2V0IHN1YnRpdGxlT25CYW5uZXJzKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2hvd1N1YnRpdGxlT25CYW5uZXJzID0gdmFsXG4gIH1cbiAgZ2V0IHNob3dEZXNjcmlwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYW5TaG93RGVzY3JpcHRpb25cbiAgfVxuICBzZXQgc2hvd0Rlc2NyaXB0aW9uKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuY2FuU2hvd0Rlc2NyaXB0aW9uID0gdmFsXG4gIH1cblxuICB1cGRhdGVCYXRjaERhdGEoKSB7XG4gICAgdGhpcy5iYXRjaFJlcGxheVN1YmplY3QubmV4dCgpXG4gIH1cblxuICBzZXRCYXRjaERhdGEoZGF0YTogTnNDb250ZW50LklCYXRjaExpc3RSZXNwb25zZSkge1xuICAgIHRoaXMuc2V0QmF0Y2hEYXRhU3ViamVjdC5uZXh0KGRhdGEpXG4gIH1cblxuICBzZXRXRkRhdGEoZGF0YTogYW55KSB7XG4gICAgdGhpcy5zZXRXRkRhdGFTdWJqZWN0Lm5leHQoZGF0YSlcbiAgfVxuXG4gIHVwZGF0ZVJlc3VtYURhdGEoZGF0YTogYW55KSB7XG4gICAgdGhpcy5yZXN1bWVEYXRhLm5leHQoZGF0YSlcbiAgfVxuXG4gIGNoYW5nZVVwZGF0ZVJldmlld3Moc3RhdGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnVwZGF0ZVJldmlld3MubmV4dChzdGF0ZSlcbiAgfVxuICBnZXRTZWxlY3RlZEJhdGNoRGF0YShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLmdldFNlbGVjdGVkQmF0Y2gubmV4dChkYXRhKVxuICB9XG5cbiAgY2hhbmdlU2VydmVyRGF0ZShzdGF0ZTogYW55KSB7XG4gICAgdGhpcy5zZXJ2ZXJEYXRlLm5leHQoc3RhdGUpXG4gIH1cblxuICBtYXBTZXNzaW9uQ29tcGxldGlvblBlcmNlbnRhZ2UoYmF0Y2hEYXRhOiBhbnksIHJlc3VtZURhdGFQYXNzPzogYW55KSB7XG4gICAgaWYgKHJlc3VtZURhdGFQYXNzICYmIHJlc3VtZURhdGFQYXNzLmxlbmd0aCkge1xuICAgICAgaWYgKHJlc3VtZURhdGFQYXNzICYmIHJlc3VtZURhdGFQYXNzLmxlbmd0aCAmJiBiYXRjaERhdGEuY29udGVudCAmJiBiYXRjaERhdGEuY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uQ29tcGxldGlvblBlcmNlbnRhZ2UoYmF0Y2hEYXRhLCByZXN1bWVEYXRhUGFzcylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN1bWVEYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5yZXN1bWVEYXRhLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGFSZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhUmVzdWx0ICYmIGRhdGFSZXN1bHQubGVuZ3RoICYmIGJhdGNoRGF0YS5jb250ZW50ICYmIGJhdGNoRGF0YS5jb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uQ29tcGxldGlvblBlcmNlbnRhZ2UoYmF0Y2hEYXRhLCBkYXRhUmVzdWx0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgICAgICB9KVxuICAgIH1cblxuICB9XG4gIHNlc3Npb25Db21wbGV0aW9uUGVyY2VudGFnZShiYXRjaERhdGE6IGFueSwgcmVzdW1lRGF0YVBhc3M6IGFueSkge1xuICAgIGlmIChyZXN1bWVEYXRhUGFzcyAmJiByZXN1bWVEYXRhUGFzcy5sZW5ndGgpIHtcbiAgICAgIGlmIChiYXRjaERhdGEgJiYgYmF0Y2hEYXRhLmNvbnRlbnRbMF0gJiZcbiAgICAgICAgYmF0Y2hEYXRhLmNvbnRlbnRbMF0uYmF0Y2hBdHRyaWJ1dGVzICYmXG4gICAgICAgIGJhdGNoRGF0YS5jb250ZW50WzBdLmJhdGNoQXR0cmlidXRlcy5zZXNzaW9uRGV0YWlsc192MlxuICAgICAgKSB7XG4gICAgICAgIGJhdGNoRGF0YS5jb250ZW50WzBdLmJhdGNoQXR0cmlidXRlcy5zZXNzaW9uRGV0YWlsc192Mi5tYXAoKHNkOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3VuZENvbnRlbnQgPSByZXN1bWVEYXRhUGFzcy5maW5kKChlbDogYW55KSA9PiBlbC5jb250ZW50SWQgPT09IHNkLnNlc3Npb25JZClcbiAgICAgICAgICBpZiAoZm91bmRDb250ZW50KSB7XG4gICAgICAgICAgICBzZC5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGZvdW5kQ29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgICAgICAgc2QuY29tcGxldGlvblN0YXR1cyA9IHRoaXMuc2FmZUNvbXBsZXRpb25TdGF0dXMoZm91bmRDb250ZW50LnN0YXR1cylcbiAgICAgICAgICAgIHNkLmxhc3RDb21wbGV0ZWRUaW1lID0gZm91bmRDb250ZW50Lmxhc3RDb21wbGV0ZWRUaW1lXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG93U3RhcnRCdXR0b24oY29udGVudDogTnNDb250ZW50LklDb250ZW50IHwgbnVsbCk6IHsgc2hvdzogYm9vbGVhbjsgbXNnOiBzdHJpbmcgfSB7XG4gICAgY29uc3Qgc3RhdHVzID0ge1xuICAgICAgc2hvdzogZmFsc2UsXG4gICAgICBtc2c6ICcnLFxuICAgIH1cbiAgICBpZiAoY29udGVudCkge1xuICAgICAgaWYgKFxuICAgICAgICBjb250ZW50LmFydGlmYWN0VXJsICYmIGNvbnRlbnQuYXJ0aWZhY3RVcmwubWF0Y2goL3lvdXR1KC4pP2JlL2dpKSAmJlxuICAgICAgICB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSAmJlxuICAgICAgICB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5jb3VudHJ5ID09PSAnQ2hpbmEnXG4gICAgICApIHtcbiAgICAgICAgc3RhdHVzLnNob3cgPSBmYWxzZVxuICAgICAgICBzdGF0dXMubXNnID0gJ3lvdXR1YmVGb3JiaWRkZW4nXG4gICAgICAgIHJldHVybiBzdGF0dXNcbiAgICAgIH1cbiAgICAgIGlmIChjb250ZW50LnJlc291cmNlVHlwZSAhPT0gJ0NlcnRpZmljYXRpb24nKSB7XG4gICAgICAgIHN0YXR1cy5zaG93ID0gdHJ1ZVxuICAgICAgICByZXR1cm4gc3RhdHVzXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdGF0dXNcbiAgfVxuXG4gIGluaXREYXRhKGRhdGE6IERhdGEsIG5lZWRSZXN1bWVEYXRhOiBib29sZWFuID0gZmFsc2UpOiBOc0FwcFRvYy5JV3NUb2NSZXNwb25zZSB7XG4gICAgbGV0IGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwgPSBudWxsXG4gICAgbGV0IGVycm9yQ29kZTogTnNBcHBUb2MuRVdzVG9jRXJyb3JDb2RlIHwgbnVsbCA9IG51bGxcbiAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dCh0cnVlKVxuICAgIGlmIChkYXRhLmNvbnRlbnQgJiYgZGF0YS5jb250ZW50LmRhdGEgJiYgZGF0YS5jb250ZW50LmRhdGEuaWRlbnRpZmllcikge1xuICAgICAgY29udGVudCA9IGRhdGEuY29udGVudC5kYXRhXG4gICAgICBpZiAobmVlZFJlc3VtZURhdGEpIHtcbiAgICAgICAgdGhpcy5yZXN1bWVEYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5yZXN1bWVEYXRhLnN1YnNjcmliZShcbiAgICAgICAgICAoZGF0YVJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YVJlc3VsdCAmJiBkYXRhUmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dCh0cnVlKVxuICAgICAgICAgICAgICB0aGlzLm1hcENvbXBsZXRpb25QZXJjZW50YWdlKGNvbnRlbnQsIGRhdGFSZXN1bHQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBvbiByZXN1bWVEYXRhU3Vic2NyaXB0aW9uJylcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICBlcnJvckNvZGUgPSBOc0FwcFRvYy5FV3NUb2NFcnJvckNvZGUuQVBJX0ZBSUxVUkVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yQ29kZSA9IE5zQXBwVG9jLkVXc1RvY0Vycm9yQ29kZS5OT19EQVRBXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHRoaXMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50LFxuICAgICAgZXJyb3JDb2RlLFxuICAgIH1cbiAgfVxuXG4gIG1hcENvbXBsZXRpb25QZXJjZW50YWdlKGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwsIGRhdGFSZXN1bHQ6IGFueSkge1xuICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnRlbnQuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcbiAgICAgICAgY29uc3QgZm91bmRDb250ZW50ID0gZGF0YVJlc3VsdC5maW5kKChlbDogYW55KSA9PiBlbC5jb250ZW50SWQgPT09IGNoaWxkLmlkZW50aWZpZXIpXG4gICAgICAgIGlmIChmb3VuZENvbnRlbnQpIHtcbiAgICAgICAgICBjaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGZvdW5kQ29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBmb3VuZENvbnRlbnQucHJvZ3Jlc3NcbiAgICAgICAgICBjaGlsZC5jb21wbGV0aW9uU3RhdHVzID0gdGhpcy5zYWZlQ29tcGxldGlvblN0YXR1cyhmb3VuZENvbnRlbnQuc3RhdHVzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWFwQ29tcGxldGlvblBlcmNlbnRhZ2UoY2hpbGQsIGRhdGFSZXN1bHQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgbWFwTW9kdWxlQ291bnQoY29udGVudDogTnNDb250ZW50LklDb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC5jaGlsZHJlbikge1xuICAgICAgY29udGVudC5jaGlsZHJlbi5tYXAoY2hpbGQgPT4ge1xuICAgICAgICBpZiAoY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5NT0RVTEUpIHtcbiAgICAgICAgICBjb250ZW50Wydtb2R1bGVDb3VudCddID0gY29udGVudFsnbW9kdWxlQ291bnQnXSA/IGNvbnRlbnRbJ21vZHVsZUNvdW50J10gKyAxIDogMVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPVVJTRSkge1xuICAgICAgICAgIHRoaXMubWFwTW9kdWxlQ291bnQoY2hpbGQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0TWltZVR5cGUoY29udGVudDogTnNDb250ZW50LklDb250ZW50LCBpZGVudGlmaWVyOiBzdHJpbmcpOiBOc0NvbnRlbnQuRU1pbWVUeXBlcyB7XG4gICAgaWYgKGNvbnRlbnQuaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmV0dXJuIGNvbnRlbnQubWltZVR5cGVcbiAgICB9XG4gICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC5jaGlsZHJlbikge1xuICAgICAgaWYgKGNvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGlmIChjb250ZW50LmNoaWxkcmVuWzBdLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgLy8gICByZXR1cm4gY29udGVudC5taW1lVHlwZVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGJpZyBibHVuZGVyIGluIGRhdGFcbiAgICAgICAgLy8gdGhpcy5sb2dnZXIubG9nKGNvbnRlbnQuaWRlbnRpZmllciwgJ1dyb25nIG1pbWV0eXBlcyBmb3IgcmVzdW1lJylcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQubWltZVR5cGVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZsYXRMaXN0OiBhbnlbXSA9IFtdXG4gICAgICBjb25zdCBnZXRBbGxJdGVtc1BlckNoaWxkcmVuOiBhbnkgPSAoaXRlbTogTnNDb250ZW50LklDb250ZW50KSA9PiB7XG4gICAgICAgIGZsYXRMaXN0LnB1c2goaXRlbSlcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5jaGlsZHJlbi5tYXAoKGk6IE5zQ29udGVudC5JQ29udGVudCkgPT4gZ2V0QWxsSXRlbXNQZXJDaGlsZHJlbihpKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGdldEFsbEl0ZW1zUGVyQ2hpbGRyZW4oY29udGVudClcbiAgICAgIGNvbnN0IGNobGQgPSBfLmZpcnN0KF8uZmlsdGVyKGZsYXRMaXN0LCB7IGlkZW50aWZpZXIgfSkpXG4gICAgICByZXR1cm4gKGNobGQgJiYgY2hsZC5taW1lVHlwZSkgfHwgJydcbiAgICB9XG4gICAgLy8gcmV0dXJuIGNobGQubWltZVR5cGVcbiAgICByZXR1cm4gTnNDb250ZW50LkVNaW1lVHlwZXMuVU5LTk9XTlxuICB9XG5cbiAgZ2V0VG9jU3RydWN0dXJlKFxuICAgIGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCxcbiAgICB0b2NTdHJ1Y3R1cmU6IE5zQXBwVG9jLklUb2NTdHJ1Y3R1cmUsXG4gICk6IE5zQXBwVG9jLklUb2NTdHJ1Y3R1cmUge1xuICAgIGlmIChcbiAgICAgIGNvbnRlbnQgJiZcbiAgICAgICEoY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFXG4gICAgICAgIC8vIHx8IGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5LTk9XTEVER0VfQVJUSUZBQ1QpXG4gICAgICAgIHx8IGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5QUkFDVElDRV9SRVNPVVJDRVxuICAgICAgICB8fCBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuRklOQUxfQVNTRVNTTUVOVFxuICAgICAgICB8fCBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5wcmltYXJ5Q2F0ZWdvcnkuT0ZGTElORV9TRVNTSU9OXG4gICAgICApKSB7XG4gICAgICBpZiAoY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPVVJTRSkge1xuICAgICAgICB0b2NTdHJ1Y3R1cmUuY291cnNlICs9IDFcbiAgICAgIH0gZWxzZSBpZiAoY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1PRFVMRSkge1xuICAgICAgICB0b2NTdHJ1Y3R1cmUubGVhcm5pbmdNb2R1bGUgKz0gMVxuICAgICAgfVxuICAgICAgXy5lYWNoKGNvbnRlbnQuY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1wYXJhbWV0ZXItcmVhc3NpZ25tZW50XG4gICAgICAgIHRvY1N0cnVjdHVyZSA9IHRoaXMuZ2V0VG9jU3RydWN0dXJlKGNoaWxkLCB0b2NTdHJ1Y3R1cmUpXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjb250ZW50ICYmXG4gICAgICAoXG4gICAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5SRVNPVVJDRVxuICAgICAgICAvLyB8fCBjb250ZW50LmNvbnRlbnRUeXBlID09PSAnS25vd2xlZGdlIEFydGlmYWN0J1xuICAgICAgICB8fCBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJBQ1RJQ0VfUkVTT1VSQ0VcbiAgICAgICAgfHwgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkZJTkFMX0FTU0VTU01FTlRcbiAgICAgICAgfHwgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk9GRkxJTkVfU0VTU0lPTilcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoY29udGVudC5taW1lVHlwZSkge1xuICAgICAgICAvLyBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLkhBTkRTX09OOlxuICAgICAgICAvLyAgIHRvY1N0cnVjdHVyZS5oYW5kc09uICs9IDFcbiAgICAgICAgLy8gICBicmVha1xuICAgICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLk1QMzpcbiAgICAgICAgICB0b2NTdHJ1Y3R1cmUucG9kY2FzdCArPSAxXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDQ6XG4gICAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuTTNVODpcbiAgICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5ZT1VUVUJFOlxuICAgICAgICAgIHRvY1N0cnVjdHVyZS52aWRlbyArPSAxXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgLy8gY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5JTlRFUkFDVElPTjpcbiAgICAgICAgLy8gICB0b2NTdHJ1Y3R1cmUuaW50ZXJhY3RpdmVWaWRlbyArPSAxXG4gICAgICAgIC8vICAgYnJlYWtcbiAgICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5QREY6XG4gICAgICAgICAgdG9jU3RydWN0dXJlLnBkZiArPSAxXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgLy8gY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5IVE1MOlxuICAgICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLlRFWFRfV0VCOlxuICAgICAgICAgIHRvY1N0cnVjdHVyZS53ZWJQYWdlICs9IDFcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLlNVUlZFWTpcbiAgICAgICAgICB0b2NTdHJ1Y3R1cmUuc3VydmV5ICs9IDFcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLlFVSVo6XG4gICAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuQVBQTElDQVRJT05fSlNPTjpcbiAgICAgICAgICAvLyBpZiAoY29udGVudC5yZXNvdXJjZVR5cGUgPT09ICdBc3Nlc3NtZW50Jykge1xuICAgICAgICAgIHRvY1N0cnVjdHVyZS5hc3Nlc3NtZW50ICs9IDFcbiAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgdG9jU3RydWN0dXJlLnF1aXogKz0gMVxuICAgICAgICAgIC8vIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLk9GRkxJTkVfU0VTU0lPTjpcbiAgICAgICAgICAvLyBpZiAoY29udGVudC5yZXNvdXJjZVR5cGUgPT09ICdBc3Nlc3NtZW50Jykge1xuICAgICAgICAgIHRvY1N0cnVjdHVyZS5vZmZsaW5lU2Vzc2lvbiArPSAxXG4gICAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgICAvLyAgIHRvY1N0cnVjdHVyZS5xdWl6ICs9IDFcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5QUkFDVElDRV9SRVNPVVJDRTpcbiAgICAgICAgICAgaWYoY29udGVudC5jb250ZXh0Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FQXNzZXNzbWVudENvbnRleHRDYXRlZ29yeS5QUkVMSU1JTkFSWV9BU1NFU1NNRU5UKSB7XG4gICAgICAgICAgICB0b2NTdHJ1Y3R1cmVbJ3ByZUVucm9sbG1lbnRBc3Nlc3NtZW50J10gKz0gMSBcbiAgICAgICAgICB9ZWxzZSBpZiAoY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LlBSQUNUSUNFX1JFU09VUkNFKSB7XG4gICAgICAgICAgICB0b2NTdHJ1Y3R1cmUucHJhY3RpY2VUZXN0ICs9IDFcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5GSU5BTF9BU1NFU1NNRU5UKSB7XG4gICAgICAgICAgICB0b2NTdHJ1Y3R1cmUuZmluYWxUZXN0ICs9IDFcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgLy8gY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5XRUJfTU9EVUxFOlxuICAgICAgICAvLyAgIHRvY1N0cnVjdHVyZS53ZWJNb2R1bGUgKz0gMVxuICAgICAgICAvLyAgIGJyZWFrXG4gICAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuWklQMjpcbiAgICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5aSVA6XG4gICAgICAgICAgdG9jU3RydWN0dXJlLmludGVyYWN0aXZlY29udGVudCArPSAxXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgLy8gY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5ZT1VUVUJFOlxuICAgICAgICAvLyAgIHRvY1N0cnVjdHVyZS55b3V0dWJlICs9IDFcbiAgICAgICAgLy8gICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRvY1N0cnVjdHVyZS5vdGhlciArPSAxXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0b2NTdHJ1Y3R1cmVcbiAgICB9XG4gICAgcmV0dXJuIHRvY1N0cnVjdHVyZVxuICB9XG5cbiAgZmlsdGVyVG9jKFxuICAgIGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCxcbiAgICBmaWx0ZXJDYXRlZ29yeTogTnNDb250ZW50LkVGaWx0ZXJDYXRlZ29yeSA9IE5zQ29udGVudC5FRmlsdGVyQ2F0ZWdvcnkuQUxMLFxuICApOiBOc0NvbnRlbnQuSUNvbnRlbnQgfCBudWxsIHtcbiAgICBpZiAoY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFXG4gICAgICAvLyAgfHwgY29udGVudC5jb250ZW50VHlwZSA9PT0gJ0tub3dsZWRnZSBBcnRpZmFjdCdcbiAgICAgIHx8IGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUkFDVElDRV9SRVNPVVJDRVxuICAgICAgfHwgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkZJTkFMX0FTU0VTU01FTlRcbiAgICAgIHx8IGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5PRkZMSU5FX1NFU1NJT04pIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlclVuaXRDb250ZW50KGNvbnRlbnQsIGZpbHRlckNhdGVnb3J5KSA/IGNvbnRlbnQgOiBudWxsXG4gICAgfVxuICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW46IE5zQ29udGVudC5JQ29udGVudFtdID1cbiAgICAgIF8ubWFwKF8uZ2V0KGNvbnRlbnQsICdjaGlsZHJlbicpLCBjaGlsZENvbnRlbnQgPT5cbiAgICAgICAgdGhpcy5maWx0ZXJUb2MoY2hpbGRDb250ZW50LCBmaWx0ZXJDYXRlZ29yeSkpXG4gICAgICAgIC5maWx0ZXIodW5pdENvbnRlbnQgPT4gQm9vbGVhbih1bml0Q29udGVudCkpIGFzIE5zQ29udGVudC5JQ29udGVudFtdXG4gICAgaWYgKGZpbHRlcmVkQ2hpbGRyZW4gJiYgZmlsdGVyZWRDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNvbnRlbnQsXG4gICAgICAgIGNoaWxkcmVuOiBmaWx0ZXJlZENoaWxkcmVuLFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZmlsdGVyVW5pdENvbnRlbnQoXG4gICAgY29udGVudDogTnNDb250ZW50LklDb250ZW50LFxuICAgIGZpbHRlckNhdGVnb3J5OiBOc0NvbnRlbnQuRUZpbHRlckNhdGVnb3J5ID0gTnNDb250ZW50LkVGaWx0ZXJDYXRlZ29yeS5BTEwsXG4gICk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAoZmlsdGVyQ2F0ZWdvcnkpIHtcbiAgICAgIGNhc2UgTnNDb250ZW50LkVGaWx0ZXJDYXRlZ29yeS5MRUFSTjpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAhTnNDb250ZW50Q29uc3RhbnRzLlZBTElEX1BSQUNUSUNFX1JFU09VUkNFUy5oYXMoY29udGVudC5yZXNvdXJjZVR5cGUpICYmXG4gICAgICAgICAgIU5zQ29udGVudENvbnN0YW50cy5WQUxJRF9BU1NFU1NNRU5UX1JFU09VUkNFUy5oYXMoY29udGVudC5yZXNvdXJjZVR5cGUpXG4gICAgICAgIClcbiAgICAgIGNhc2UgTnNDb250ZW50LkVGaWx0ZXJDYXRlZ29yeS5QUkFDVElDRTpcbiAgICAgICAgcmV0dXJuIE5zQ29udGVudENvbnN0YW50cy5WQUxJRF9QUkFDVElDRV9SRVNPVVJDRVMuaGFzKGNvbnRlbnQucmVzb3VyY2VUeXBlKVxuICAgICAgY2FzZSBOc0NvbnRlbnQuRUZpbHRlckNhdGVnb3J5LkFTU0VTUzpcbiAgICAgICAgcmV0dXJuIE5zQ29udGVudENvbnN0YW50cy5WQUxJRF9BU1NFU1NNRU5UX1JFU09VUkNFUy5oYXMoY29udGVudC5yZXNvdXJjZVR5cGUpXG4gICAgICBjYXNlIE5zQ29udGVudC5FRmlsdGVyQ2F0ZWdvcnkuQUxMOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgZmV0Y2hDb250ZW50QW5hbHl0aWNzQ2xpZW50RGF0YShjb250ZW50SWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmFuYWx5dGljc0ZldGNoU3RhdHVzICE9PSAnZmV0Y2hpbmcnICYmIHRoaXMuYW5hbHl0aWNzRmV0Y2hTdGF0dXMgIT09ICdkb25lJykge1xuICAgICAgdGhpcy5nZXRDb250ZW50QW5hbHl0aWNzQ2xpZW50KGNvbnRlbnRJZClcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRDb250ZW50QW5hbHl0aWNzQ2xpZW50KGNvbnRlbnRJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5hbmFseXRpY3NGZXRjaFN0YXR1cyA9ICdmZXRjaGluZydcbiAgICBjb25zdCB1cmwgPSBgJHtQUk9YWV9TTEFHX1Y4fS9MQS9hcGkvbGEvY29udGVudGFuYWx5dGljcz9jb250ZW50X2lkPSR7Y29udGVudElkfSZ0eXBlPWNvdXJzZWBcbiAgICB0aGlzLmh0dHAuZ2V0KHVybCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzRmV0Y2hTdGF0dXMgPSAnZG9uZSdcbiAgICAgICAgdGhpcy5hbmFseXRpY3NSZXBsYXlTdWJqZWN0Lm5leHQocmVzdWx0KVxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5hbmFseXRpY3NSZXBsYXlTdWJqZWN0Lm5leHQobnVsbClcbiAgICAgICAgdGhpcy5hbmFseXRpY3NGZXRjaFN0YXR1cyA9ICdkb25lJ1xuICAgICAgfSxcbiAgICApXG4gIH1cblxuICBmZXRjaENvbnRlbnRBbmFseXRpY3NEYXRhKGNvbnRlbnRJZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuYW5hbHl0aWNzRmV0Y2hTdGF0dXMgIT09ICdmZXRjaGluZycgJiYgdGhpcy5hbmFseXRpY3NGZXRjaFN0YXR1cyAhPT0gJ2RvbmUnKSB7XG4gICAgICB0aGlzLmdldENvbnRlbnRBbmFseXRpY3MoY29udGVudElkKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldENvbnRlbnRBbmFseXRpY3MoY29udGVudElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFuYWx5dGljc0ZldGNoU3RhdHVzID0gJ2ZldGNoaW5nJ1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgY29uc3QgdXJsID0gYCR7UFJPWFlfU0xBR19WOH0vTEEvTEEvYXBpL1VzZXJzP3JlZmluZW1lbnRmaWx0ZXI9JHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAnXCJzb3VyY2VcIjpbXCJpR290XCIsXCJMZWFybmluZyBIdWJcIl0nLFxuICAgICl9JCR7ZW5jb2RlVVJJQ29tcG9uZW50KGBcImNvdXJzZUNvZGVcIjogW1wiJHtjb250ZW50SWR9XCJdYCl9YFxuICAgIHRoaXMuaHR0cC5nZXQodXJsKS5zdWJzY3JpYmUoXG4gICAgICAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hbmFseXRpY3NGZXRjaFN0YXR1cyA9ICdkb25lJ1xuICAgICAgICB0aGlzLmFuYWx5dGljc1JlcGxheVN1YmplY3QubmV4dChyZXN1bHQpXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmFuYWx5dGljc1JlcGxheVN1YmplY3QubmV4dChudWxsKVxuICAgICAgICB0aGlzLmFuYWx5dGljc0ZldGNoU3RhdHVzID0gJ2RvbmUnXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIGNsZWFyQW5hbHl0aWNzRGF0YSgpIHtcbiAgICBpZiAodGhpcy5hbmFseXRpY3NSZXBsYXlTdWJqZWN0KSB7XG4gICAgICB0aGlzLmFuYWx5dGljc1JlcGxheVN1YmplY3QudW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBoYXNobWFwIGFuZCByZWxhdGVkIGNvbnRlbnQgZGF0YVxuICAgKiBDYWxsIHRoaXMgd2hlbiBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBjb250ZW50IHRvIHByZXZlbnQgc3RhbGUgZGF0YVxuICAgKi9cbiAgcmVzZXRDb250ZW50RGF0YSgpIHtcbiAgICB0aGlzLmhhc2htYXAgPSB7fVxuICAgIHRoaXMuY3VycmVudFJvb3RDb250ZW50SWQgPSBudWxsXG4gICAgdGhpcy5oYXNobWFwVXBkYXRlZC5uZXh0KG51bGwpXG4gIH1cblxuICBmZXRjaENvbnRlbnRQYXJlbnRzKGNvbnRlbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnRNaW5pbWFsW10+IHtcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnRNaW5pbWFsW10+KFxuICAgIC8vICAgYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9QQVJFTlRTfS8ke2NvbnRlbnRJZH1gLFxuICAgIC8vIClcbiAgICBpZiAoY29udGVudElkKSB7IH1cbiAgICByZXR1cm4gRU1QVFlcbiAgfVxuICBmZXRjaENvbnRlbnRXaGF0c05leHQoXG4gICAgY29udGVudElkOiBzdHJpbmcsXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmcsXG4gICk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50TWluaW1hbFtdPiB7XG4gICAgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnRNaW5pbWFsW10+KFxuICAgICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT05URU5UX05FWFR9LyR7Y29udGVudElkfT9jb250ZW50VHlwZT0ke2NvbnRlbnRUeXBlfWAsXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudE1pbmltYWxbXT4oXG4gICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT05URU5UX05FWFR9LyR7Y29udGVudElkfT90cz0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWAsXG4gICAgKVxuICB9XG5cbiAgZmV0Y2hNb3JlTGlrZVRoaXNQYWlkKGNvbnRlbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnRNaW5pbWFsW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnRNaW5pbWFsW10+KFxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9ORVhUXG4gICAgICB9LyR7Y29udGVudElkfT9leGNsdXNpdmVDb250ZW50PXRydWUmdHM9JHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gLFxuICAgIClcbiAgfVxuXG4gIGZldGNoTW9yZUxpa2VUaGlzRnJlZShjb250ZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50TWluaW1hbFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50TWluaW1hbFtdPihcbiAgICAgIGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfTkVYVFxuICAgICAgfS8ke2NvbnRlbnRJZH0/ZXhjbHVzaXZlQ29udGVudD1mYWxzZSZ0cz0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWAsXG4gICAgKVxuICB9XG5cbiAgZmV0Y2hDb250ZW50Q29ob3J0cyhcbiAgICBjb2hvcnRUeXBlOiBOc0NvaG9ydHMuRUNvaG9ydFR5cGVzLFxuICAgIGNvbnRlbnRJZDogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPE5zQ29ob3J0cy5JQ29ob3J0c0NvbnRlbnRbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29ob3J0cy5JQ29ob3J0c0NvbnRlbnRbXT4oQVBJX0VORF9QT0lOVFMuQ09IT1JUUyhjb2hvcnRUeXBlLCBjb250ZW50SWQpLCB7XG4gICAgICBoZWFkZXJzOiB7IHJvb3RPcmc6IHRoaXMuY29uZmlnU3ZjLnJvb3RPcmcgfHwgJycsIG9yZzogdGhpcy5jb25maWdTdmMub3JnID8gdGhpcy5jb25maWdTdmMub3JnWzBdIDogJycgfSxcbiAgICB9KVxuICB9XG4gIGZldGNoRXh0ZXJuYWxDb250ZW50QWNjZXNzKGNvbnRlbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx7IGhhc0FjY2VzczogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8eyBoYXNBY2Nlc3M6IGJvb2xlYW4gfT4oQVBJX0VORF9QT0lOVFMuRVhURVJOQUxfQ09OVEVOVChjb250ZW50SWQpKVxuICB9XG4gIGZldGNoQ29ob3J0R3JvdXBVc2Vycyhncm91cElkOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvaG9ydHMuSUNvaG9ydHNHcm91cFVzZXJzW10+KEFQSV9FTkRfUE9JTlRTLkNPSE9SVFNfR1JPVVBfVVNFUihncm91cElkKSlcbiAgfVxuICBmZXRjaE1vcmVMaWtlVGhpcyhjb250ZW50SWQ6IHN0cmluZywgY29udGVudFR5cGU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50W10+KFxuICAgICAgQVBJX0VORF9QT0lOVFMuUkVMQVRFRF9SRVNPVVJDRShjb250ZW50SWQsIGNvbnRlbnRUeXBlKSxcbiAgICApXG4gIH1cblxuICBmZXRjaFBvc3RBc3Nlc3NtZW50U3RhdHVzKGNvbnRlbnRJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8eyByZXN1bHQ6IE5zQXBwVG9jLklQb3N0QXNzZXNzbWVudFtdIH0+KFxuICAgICAgQVBJX0VORF9QT0lOVFMuUE9TVF9BU1NFU1NNRU5UKGNvbnRlbnRJZCksXG4gICAgKVxuICB9XG5cbiAgZmV0Y2hHZXRDb250ZW50RGF0YShjb250ZW50SWQ6IHN0cmluZykge1xuICAgIGxldCB1cmwgPSAnJ1xuICAgIGNvbnN0IGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gICAgaWYgKCFmb3JQcmV2aWV3KSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDx7IHJlc3VsdDogYW55IH0+KFxuICAgICAgICBBUElfRU5EX1BPSU5UUy5HRVRfQ09OVEVOVChjb250ZW50SWQpLFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2VkaXRNb2RlPXRydWUnKSAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnX3JjJykpIHtcbiAgICAgIHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL3JlYWQvJHtjb250ZW50SWR9YFxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgPSBgL2FwaS9jb250ZW50L3YxL3JlYWQvJHtjb250ZW50SWR9YFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDx7IHJlc3VsdDogYW55IH0+KHVybClcblxuICB9XG5cbiAgZmV0Y2hDb250ZW50UGFyZW50KGNvbnRlbnRJZDogc3RyaW5nLCBkYXRhOiBOc0FwcFRvYy5JQ29udGVudFBhcmVudFJlcSwgZm9yUHJldmlldyA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE5zQXBwVG9jLklDb250ZW50UGFyZW50UmVzcG9uc2U+KFxuICAgICAgZm9yUHJldmlld1xuICAgICAgICA/IEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfQVVUSF9QQVJFTlQoXG4gICAgICAgICAgY29udGVudElkLFxuICAgICAgICAgIHRoaXMuY29uZmlnU3ZjLnJvb3RPcmcgfHwgJycsXG4gICAgICAgICAgdGhpcy5jb25maWdTdmMub3JnID8gdGhpcy5jb25maWdTdmMub3JnWzBdIDogJycsXG4gICAgICAgIClcbiAgICAgICAgOiBBUElfRU5EX1BPSU5UUy5DT05URU5UX1BBUkVOVChjb250ZW50SWQpLFxuICAgICAgZGF0YSxcbiAgICApXG4gIH1cblxuICBjcmVhdGVCYXRjaChiYXRjaERhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIEFQSV9FTkRfUE9JTlRTLkJBVENIX0NSRUFURSxcbiAgICAgIHsgcmVxdWVzdDogYmF0Y2hEYXRhIH0sXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgbWFwQ29tcGxldGlvblBlcmNlbnRhZ2VQcm9ncmFtKGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwsIGVucm9sbWVudExpc3Q6IGFueSwgY29sbGVjdGlvbklkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQodHJ1ZSlcbiAgICBsZXQgdG90YWxDb3VudCA9IDBcbiAgICBsZXQgbGVhZm5vZGVDb3VudCA9IDBcbiAgICBsZXQgY29tcGxldGVkTGVhZk5vZGVzOiBhbnkgPSBbXVxuICAgIGxldCBmaXJzdFVuY29tcGxldGVDb3Vyc2U6IGFueSA9ICcnXG4gICAgbGV0IGlucHJvZ3Jlc3NEYXRhQ2hlY2s6IGFueSA9IFtdXG4gICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC5jaGlsZHJlbikge1xuICAgICAgbGVhZm5vZGVDb3VudCA9IGNvbnRlbnQubGVhZk5vZGVzQ291bnRcbiAgICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KHRydWUpXG4gICAgICBjb25zdCBmb3VuZFBhcmVudENvbnRlbnQgPSB0aGlzLmZpbmRFbnJvbG1lbnRCeUNvbGxlY3Rpb25JZChlbnJvbG1lbnRMaXN0LCBjb2xsZWN0aW9uSWQgfHwgY29udGVudC5pZGVudGlmaWVyKVxuICAgICAgaWYgKGZvdW5kUGFyZW50Q29udGVudCAmJiBmb3VuZFBhcmVudENvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCkge1xuICAgICAgICBhd2FpdCB0aGlzLm1hcENvbXBsZXRpb25DaGlsZFBlcmNlbnRhZ2VQcm9ncmFtKGNvbnRlbnQpXG4gICAgICAgIHRvdGFsQ291bnQgPSBjb250ZW50LmxlYWZOb2Rlc0NvdW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY29udGVudD8ucHJpbWFyeUNhdGVnb3J5ICE9PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIC8vIGNvbnRlbnQuY2hpbGRyZW4uZm9yRWFjaChhc3luYyAocGFyZW50Q2hpbGQsaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENoaWxkID0gY29udGVudC5jaGlsZHJlbltpXVxuICAgICAgICAgICAgaWYgKHBhcmVudENoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kQ29udGVudCA9IHRoaXMuZmluZEVucm9sbWVudEJ5Q29sbGVjdGlvbklkKGVucm9sbWVudExpc3QsIHBhcmVudENoaWxkPy5pZGVudGlmaWVyKVxuICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgICAvLyB0b3RhbENvdW50ID0gZm91bmRDb250ZW50ICYmIGZvdW5kQ29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA/IHRvdGFsQ291bnQgKyBmb3VuZENvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgOiB0b3RhbENvdW50ICsgMFxuICAgICAgICAgICAgICAvLyBjb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID0gTWF0aC5yb3VuZCh0b3RhbENvdW50IC8gbGVhZm5vZGVDb3VudClcbiAgICAgICAgICAgICAgaWYgKGZvdW5kQ29udGVudCAmJiBmb3VuZENvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KHRydWUpXG4gICAgICAgICAgICAgICAgdG90YWxDb3VudCA9IHRvdGFsQ291bnQgKz0gcGFyZW50Q2hpbGQubGVhZk5vZGVzQ291bnRcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWRMZWFmTm9kZXMgPSBbLi4uY29tcGxldGVkTGVhZk5vZGVzLCAuLi5wYXJlbnRDaGlsZC5sZWFmTm9kZXNdXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kQ29udGVudC5pc3N1ZWRDZXJ0aWZpY2F0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2VydGlmaWNhdGU6IGFueSA9IGZvdW5kQ29udGVudC5pc3N1ZWRDZXJ0aWZpY2F0ZXMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGEubGFzdElzc3VlZE9uKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiLmxhc3RJc3N1ZWRPbikuZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgICAgY29uc3QgY2VydElkOiBhbnkgPSBjZXJ0aWZpY2F0ZVswXS5pZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgICBwYXJlbnRDaGlsZC5pc3N1ZWRDZXJ0aWZpY2F0ZXNJZCA9IGNlcnRJZFxuICAgICAgICAgICAgICAgICAgLy8gY29uc3QgY2VydERhdGE6IGFueSA9IGF3YWl0IHRoaXMuZG93b25sb2FkQ2VydGlmaWNhdGUoY2VydElkKS50b1Byb21pc2UoKS5jYXRjaChfZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgICAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICAgICAgICAvLyBpZiAoY2VydERhdGEgJiYgY2VydERhdGEucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAvLyAgIHBhcmVudENoaWxkLmlzc3VlZENlcnRpZmljYXRlc1NWRyA9IGNlcnREYXRhLnJlc3VsdC5wcmludFVyaVxuICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcmVudENoaWxkLmNvbXBsZXRpb25QZXJjZW50YWdlID0gMTAwXG4gICAgICAgICAgICAgICAgcGFyZW50Q2hpbGQuY29tcGxldGlvblN0YXR1cyA9IDJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1hcENvbXBsZXRpb25DaGlsZFBlcmNlbnRhZ2VQcm9ncmFtKHBhcmVudENoaWxkKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KHRydWUpXG4gICAgICAgICAgICAgICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuY29udGVudExhbmdTdmMuZ2V0Q29udGVudExhbmd1YWdlKHBhcmVudENoaWxkKVxuICAgICAgICAgICAgICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgYmF0Y2hJZDogZm91bmRDb250ZW50LmJhdGNoLmJhdGNoSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdXNlcklkOiBmb3VuZENvbnRlbnQudXNlcklkLFxuICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VJZDogZm91bmRDb250ZW50LmNvbGxlY3Rpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZW50SWRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdwcm9ncmVzc2RldGFpbHMnLFxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmaXJzdFVuY29tcGxldGVDb3Vyc2UgPSAocGFyZW50Q2hpbGQuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDAgfHwgIXBhcmVudENoaWxkLmNvbXBsZXRpb25QZXJjZW50YWdlKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmlyc3RVbmNvbXBsZXRlQ291cnNlID8gcGFyZW50Q2hpbGQgOiBmaXJzdFVuY29tcGxldGVDb3Vyc2VcbiAgICAgICAgICAgICAgICAgIGlucHJvZ3Jlc3NEYXRhQ2hlY2sgPSBpbnByb2dyZXNzRGF0YUNoZWNrXG4gICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoQ29udGVudEhpc3RvcnlWMihyZXEpLnRvUHJvbWlzZSgpLnRoZW4oKHByb2dyZXNzZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHByb2dyZXNzZGF0YVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQgJiYgZGF0YT8ucmVzdWx0Py5jb250ZW50TGlzdD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlZENvdW50ID0gZGF0YS5yZXN1bHQuY29udGVudExpc3QuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLnByb2dyZXNzID09PSAxMDApXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0NvbXBsZXRlZExlYWZub2Rlcyhjb21wbGV0ZWRMZWFmTm9kZXMsIGNvbXBsZXRlZENvdW50KVxuICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQ291bnQgPSBjb21wbGV0ZWRMZWFmTm9kZXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgaW5wcm9ncmVzc0RhdGFDaGVjayA9IFsuLi5pbnByb2dyZXNzRGF0YUNoZWNrLCAuLi5kYXRhLnJlc3VsdC5jb250ZW50TGlzdF1cbiAgICAgICAgICAgICAgICAgICAgICAvLyBpbnByb2dyZXNzRGF0YUNoZWNrID0gaW5wcm9ncmVzc0RhdGFDaGVjayA/IGlucHJvZ3Jlc3NEYXRhQ2hlY2sgOiAgZGF0YS5yZXN1bHQuY29udGVudExpc3RcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJlc3VtYURhdGEoaW5wcm9ncmVzc0RhdGFDaGVjaylcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcENvbXBsZXRpb25QZXJjZW50YWdlKHBhcmVudENoaWxkLCBkYXRhLnJlc3VsdC5jb250ZW50TGlzdClcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcE1vZHVsZUNvdW50KHBhcmVudENoaWxkKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwTW9kdWxlQ291bnQocGFyZW50Q2hpbGQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzZGF0YVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gIGVsc2Uge1xuICAgICAgICAgICAgLy8gICBpZiAoY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgIT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSkge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KHRydWUpXG4gICAgICAgICAgICAvLyAgICAgY29uc3QgZm91bmRDb250ZW50ID0gZW5yb2xtZW50TGlzdCAmJiBlbnJvbG1lbnRMaXN0LmZpbmQoKGVsOiBhbnkpID0+IGVsLmNvbGxlY3Rpb25JZCA9PT0gY29udGVudC5pZGVudGlmaWVyKVxuICAgICAgICAgICAgLy8gICAgIGlmIChmb3VuZENvbnRlbnQpIHtcbiAgICAgICAgICAgIC8vICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgLy8gICAgICAgICAgIGJhdGNoSWQ6IGZvdW5kQ29udGVudC5iYXRjaC5iYXRjaElkLFxuICAgICAgICAgICAgLy8gICAgICAgICAgIHVzZXJJZDogZm91bmRDb250ZW50LnVzZXJJZCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICBjb3Vyc2VJZDogZm91bmRDb250ZW50LmNvbGxlY3Rpb25JZCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICBjb250ZW50SWRzOiBbXSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICdwcm9ncmVzc2RldGFpbHMnLFxuICAgICAgICAgICAgLy8gICAgICAgICAgIF0sXG4gICAgICAgICAgICAvLyAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICBhd2FpdCB0aGlzLmZldGNoQ29udGVudEhpc3RvcnlWMihyZXEpLnRvUHJvbWlzZSgpLnRoZW4oKHByb2dyZXNzZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnN0IGRhdGE6IGFueSAgPSBwcm9ncmVzc2RhdGFcbiAgICAgICAgICAgIC8vICAgICAgICAgaWYgKGRhdGEucmVzdWx0ICYmIGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICBjb25zdCBjb21wbGV0ZWRDb3VudCA9IGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5wcm9ncmVzcyA9PT0gMTAwKVxuICAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuY2hlY2tDb21wbGV0ZWRMZWFmbm9kZXMoY29tcGxldGVkTGVhZk5vZGVzLCBjb21wbGV0ZWRDb3VudClcbiAgICAgICAgICAgIC8vICAgICAgICAgICB0b3RhbENvdW50ID0gY29tcGxldGVkTGVhZk5vZGVzLmxlbmd0aFxuICAgICAgICAgICAgLy8gICAgICAgICAgIGlucHJvZ3Jlc3NEYXRhQ2hlY2sgPSBpbnByb2dyZXNzRGF0YUNoZWNrID8gaW5wcm9ncmVzc0RhdGFDaGVjayA6ICBkYXRhLnJlc3VsdC5jb250ZW50TGlzdFxuICAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMudXBkYXRlUmVzdW1hRGF0YShpbnByb2dyZXNzRGF0YUNoZWNrKVxuICAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMubWFwQ29tcGxldGlvblBlcmNlbnRhZ2UoY29udGVudCwgZGF0YS5yZXN1bHQuY29udGVudExpc3QpXG4gICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBwcm9ncmVzc2RhdGFcbiAgICAgICAgICAgIC8vICAgICAgIH0pXG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY29udGVudExvYWRlci5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRMb2FkZXIubmV4dChmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU1cbiAgICAgICAgICB8fCBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFXG4gICAgICAgICAgfHwgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlNUQU5EQUxPTkVfQVNTRVNTTUVOVFxuICAgICAgICAgIHx8IGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DVVJBVEVEX1BST0dSQU0pIHtcbiAgICAgICAgICAvLyB0aGlzLm1hcENvbXBsZXRpb25QZXJjZW50YWdlKGNvbnRlbnQsIHRoaXMucmVzdW1lRGF0YSlcbiAgICAgICAgICBjb25zdCBmb3VuZFBhcmVudENvbnRlbnQgPSB0aGlzLmZpbmRFbnJvbG1lbnRCeUNvbGxlY3Rpb25JZChlbnJvbG1lbnRMaXN0LCBjb2xsZWN0aW9uSWQgfHwgY29udGVudD8uaWRlbnRpZmllcilcbiAgICAgICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuY29udGVudExhbmdTdmMuZ2V0Q29udGVudExhbmd1YWdlKGNvbnRlbnQpXG4gICAgICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgICBiYXRjaElkOiBmb3VuZFBhcmVudENvbnRlbnQ/LmJhdGNoPy5iYXRjaElkLFxuICAgICAgICAgICAgICB1c2VySWQ6IGZvdW5kUGFyZW50Q29udGVudD8udXNlcklkLFxuICAgICAgICAgICAgICBjb3Vyc2VJZDogZm91bmRQYXJlbnRDb250ZW50Py5jb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZSxcbiAgICAgICAgICAgICAgY29udGVudElkczogW10sXG4gICAgICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAgICAgICdwcm9ncmVzc2RldGFpbHMnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaENvbnRlbnRIaXN0b3J5VjIocmVxKS50b1Byb21pc2UoKS50aGVuKChwcm9ncmVzc2RhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YTogYW55ID0gcHJvZ3Jlc3NkYXRhXG4gICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnJlc3VsdCAmJiBkYXRhLnJlc3VsdC5jb250ZW50TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlZENvdW50ID0gZGF0YS5yZXN1bHQuY29udGVudExpc3QuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLnByb2dyZXNzID09PSAxMDApXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tDb21wbGV0ZWRMZWFmbm9kZXMoY29tcGxldGVkTGVhZk5vZGVzLCBjb21wbGV0ZWRDb3VudClcbiAgICAgICAgICAgICAgdG90YWxDb3VudCA9IGNvbXBsZXRlZExlYWZOb2Rlcy5sZW5ndGhcbiAgICAgICAgICAgICAgaW5wcm9ncmVzc0RhdGFDaGVjayA9IFsuLi5pbnByb2dyZXNzRGF0YUNoZWNrLCAuLi5kYXRhLnJlc3VsdC5jb250ZW50TGlzdF1cbiAgICAgICAgICAgICAgLy8gaW5wcm9ncmVzc0RhdGFDaGVjayA9IGlucHJvZ3Jlc3NEYXRhQ2hlY2sgPyBpbnByb2dyZXNzRGF0YUNoZWNrIDogIGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlUmVzdW1hRGF0YShpbnByb2dyZXNzRGF0YUNoZWNrKVxuICAgICAgICAgICAgICB0aGlzLm1hcENvbXBsZXRpb25QZXJjZW50YWdlKGNvbnRlbnQsIGRhdGEucmVzdWx0LmNvbnRlbnRMaXN0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3NkYXRhXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnByb2dyZXNzRGF0YUNoZWNrICYmIGlucHJvZ3Jlc3NEYXRhQ2hlY2subGVuZ3RoID09PSAwICYmIGZpcnN0VW5jb21wbGV0ZUNvdXJzZSkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGREYXRhID0gdGhpcy53aWRnZXRTdmMuZ2V0Rmlyc3RDaGlsZEluSGllcmFyY2h5KGZpcnN0VW5jb21wbGV0ZUNvdXJzZSlcbiAgICAgICAgICBjb25zdCBjaGlsZEVucm9sbG1lbnREYXRhID0gZW5yb2xtZW50TGlzdC5maW5kKChlbDogYW55KSA9PlxuICAgICAgICAgICAgZWwuY29sbGVjdGlvbklkID09PSBmaXJzdFVuY29tcGxldGVDb3Vyc2UuaWRlbnRpZmllcilcbiAgICAgICAgICBjb25zdCByZXN1bWVEYXRhID0gW3tcbiAgICAgICAgICAgIGNvbnRlbnRJZDogZmlyc3RDaGlsZERhdGEuaWRlbnRpZmllcixcbiAgICAgICAgICAgIGJhdGNoSWQ6IGNoaWxkRW5yb2xsbWVudERhdGEgJiYgY2hpbGRFbnJvbGxtZW50RGF0YS5iYXRjaElkLFxuICAgICAgICAgICAgY29tcGxldGVkQ291bnQ6IDEsXG4gICAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogMC4wLFxuICAgICAgICAgICAgcHJvZ3Jlc3M6IDAsXG4gICAgICAgICAgICB2aWV3Q291bnQ6IDEsXG4gICAgICAgICAgICBjb3Vyc2VJZDogY2hpbGRFbnJvbGxtZW50RGF0YSAmJiBjaGlsZEVucm9sbG1lbnREYXRhLmNvdXJzZUlkLFxuICAgICAgICAgICAgY29sbGVjdGlvbklkOiBjaGlsZEVucm9sbG1lbnREYXRhICYmIGNoaWxkRW5yb2xsbWVudERhdGEuY291cnNlSWQsXG4gICAgICAgICAgICBzdGF0dXM6IDEsXG4gICAgICAgICAgfV1cbiAgICAgICAgICBpbnByb2dyZXNzRGF0YUNoZWNrID0gcmVzdW1lRGF0YVxuICAgICAgICAgIHRoaXMudXBkYXRlUmVzdW1hRGF0YShpbnByb2dyZXNzRGF0YUNoZWNrKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBjb25zdCBwYXJlbnRDb250ZW50ID0gZW5yb2xtZW50TGlzdC5maW5kKChlbDogYW55KSA9PiBlbC5jb2xsZWN0aW9uSWQgPT09IGNvbnRlbnQuaWRlbnRpZmllcilcbiAgICAgIC8vIGlmICghcGFyZW50Q29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSkge1xuICAgICAgY29uc3QgY2FsY3VsYXRlZFBjdCA9IE1hdGguZmxvb3IoKHRvdGFsQ291bnQgLyBsZWFmbm9kZUNvdW50KSAqIDEwMClcbiAgICAgIGNvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBpc05hTihjYWxjdWxhdGVkUGN0KSA/IDAgOiBjYWxjdWxhdGVkUGN0XG4gICAgICBjb250ZW50LmNvbXBsZXRpb25TdGF0dXMgPSBjb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCA/IDIgOiAoY29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDAgPyAxIDogMClcbiAgICAgIGlmIChjb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgJiYgaW5wcm9ncmVzc0RhdGFDaGVjayAmJiBpbnByb2dyZXNzRGF0YUNoZWNrLmxlbmd0aCA9PT0gMCAmJiAhZmlyc3RVbmNvbXBsZXRlQ291cnNlKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q2hpbGREYXRhID0gdGhpcy53aWRnZXRTdmMuZ2V0Rmlyc3RDaGlsZEluSGllcmFyY2h5KGNvbnRlbnQpXG4gICAgICAgIGNvbnN0IGNoaWxkRW5yb2xsbWVudERhdGEgPSBlbnJvbG1lbnRMaXN0LmZpbmQoKGVsOiBhbnkpID0+XG4gICAgICAgICAgZWwuY29sbGVjdGlvbklkID09PSBjb250ZW50LmNoaWxkcmVuWzBdLmlkZW50aWZpZXIpXG4gICAgICAgIGNvbnN0IHJlc3VtZURhdGEgPSBbe1xuICAgICAgICAgIGNvbnRlbnRJZDogZmlyc3RDaGlsZERhdGEuaWRlbnRpZmllcixcbiAgICAgICAgICBiYXRjaElkOiBjaGlsZEVucm9sbG1lbnREYXRhICYmIGNoaWxkRW5yb2xsbWVudERhdGEuYmF0Y2hJZCxcbiAgICAgICAgICBjb21wbGV0ZWRDb3VudDogMSxcbiAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogMTAwLFxuICAgICAgICAgIHByb2dyZXNzOiAyLFxuICAgICAgICAgIHZpZXdDb3VudDogMSxcbiAgICAgICAgICBjb3Vyc2VJZDogY2hpbGRFbnJvbGxtZW50RGF0YSAmJiBjaGlsZEVucm9sbG1lbnREYXRhLmNvdXJzZUlkLFxuICAgICAgICAgIGNvbGxlY3Rpb25JZDogY2hpbGRFbnJvbGxtZW50RGF0YSAmJiBjaGlsZEVucm9sbG1lbnREYXRhLmNvdXJzZUlkLFxuICAgICAgICAgIHN0YXR1czogMixcbiAgICAgICAgfV1cbiAgICAgICAgaW5wcm9ncmVzc0RhdGFDaGVjayA9IHJlc3VtZURhdGFcbiAgICAgICAgdGhpcy51cGRhdGVSZXN1bWFEYXRhKGlucHJvZ3Jlc3NEYXRhQ2hlY2spXG4gICAgICB9XG4gICAgICAvLyAvLyB9IGVsc2Uge1xuICAgICAgLy8gICBjb250ZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID0gcGFyZW50Q29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgLy8gLy8gfVxuICAgICAgLy8gfSlcbiAgICAgIC8vIHRoaXMubWFwTW9kdWxlRHVyYXRpb25BbmRQcm9ncmVzcyhjb250ZW50LCBjb250ZW50KVxuICAgICAgdGhpcy5jYWxsSGlyYXJjaHlQcm9ncmVzc0hhc2htYXAoY29udGVudClcbiAgICAgIHRoaXMuY2hlY2tNb2R1bGVXaXNlRGF0YShjb250ZW50KVxuICAgICAgLy8gQ29tcHV0ZSBtaWxlc3RvbmUgbG9ja2luZyBBRlRFUiBwcm9ncmVzcyBkYXRhIGlzIHBvcHVsYXRlZFxuICAgICAgaWYgKGNvbnRlbnQuY291cnNlQ2F0ZWdvcnkgPT09ICdMZWFybmluZyBQYXRod2F5Jykge1xuICAgICAgICAvLyBDaGVjayBpZiB1c2VyIGlzIGVucm9sbGVkIGJ5IGNoZWNraW5nIGlmIGVucm9sbG1lbnQgZGF0YSBleGlzdHNcbiAgICAgICAgY29uc3QgaXNVc2VyRW5yb2xsZWQgPSBlbnJvbG1lbnRMaXN0ICYmIGVucm9sbWVudExpc3QubGVuZ3RoID4gMFxuICAgICAgICB0aGlzLmNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzKGlzVXNlckVucm9sbGVkKVxuICAgICAgICAvLyBFbnN1cmUgaGFzaG1hcCB1cGRhdGVzIGFyZSBwdWJsaXNoZWQgZm9yIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgICAgdGhpcy5oYXNobWFwID0geyAuLi50aGlzLmhhc2htYXAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jb250ZW50TG9hZGVyLm5leHQoZmFsc2UpXG4gICAgfVxuICB9XG4gIGNoZWNrQ29tcGxldGVkTGVhZm5vZGVzKGxlYWZOb2RlczogYW55LCBjb21wbGV0ZWRDb3VudDogYW55KSB7XG4gICAgaWYgKGNvbXBsZXRlZENvdW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbXBsZXRlZENvdW50LmZvckVhY2goKGVsZTogYW55KSA9PiB7XG4gICAgICAgIGlmICghbGVhZk5vZGVzLmluY2x1ZGVzKGVsZS5jb250ZW50SWQpKSB7XG4gICAgICAgICAgbGVhZk5vZGVzLnB1c2goZWxlLmNvbnRlbnRJZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvLyBhc3luYyBnZXRQcm9ncmVzc0ZvckNoaWxkQ291cnNlKHJlcXVlc3Q6IGFueSwgY29udGVudDogYW55KSB7XG4gIC8vICBjb25zdCBkYXRhOiBhbnkgPSAgIGF3YWl0IHRoaXMuZmV0Y2hDb250ZW50SGlzdG9yeVYyKHJlcXVlc3QpLnRvUHJvbWlzZSgpLmNhdGNoKF9lcnJvciA9PiB7fSlcbiAgLy8gICBpZiAoZGF0YS5yZXN1bHQgJiYgZGF0YS5yZXN1bHQuY29udGVudExpc3QubGVuZ3RoID4gMCkge1xuICAvLyAgICAgdGhpcy5tYXBDb21wbGV0aW9uUGVyY2VudGFnZShjb250ZW50LCBkYXRhLnJlc3VsdC5jb250ZW50TGlzdClcbiAgLy8gfVxuICAvLyB9XG5cbiAgZmluZEVucm9sbWVudEJ5Q29sbGVjdGlvbklkKGVucm9sbWVudExpc3Q6IGFueSwgaWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGVucm9sbWVudExpc3QgJiYgZW5yb2xtZW50TGlzdD8ubGVuZ3RoICYmIGVucm9sbWVudExpc3QuZmluZCgoZWw6IGFueSkgPT4gZWw/LmNvbGxlY3Rpb25JZCA9PT0gaWRlbnRpZmllcilcbiAgfVxuXG4gIGFzeW5jIG1hcENvbXBsZXRpb25DaGlsZFBlcmNlbnRhZ2VQcm9ncmFtKGNvdXJzZTogYW55KSB7XG4gICAgaWYgKGNvdXJzZSAmJiBjb3Vyc2UuY2hpbGRyZW4pIHtcbiAgICAgIGF3YWl0IGNvdXJzZS5jaGlsZHJlbi5tYXAoYXN5bmMgKGNvdXJzZUNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKChjb3Vyc2VDaGlsZCAmJiBjb3Vyc2VDaGlsZC5jaGlsZHJlbikgfHwgY291cnNlQ2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5NT0RVTEUpIHtcbiAgICAgICAgICB0aGlzLm1hcENvbXBsZXRpb25DaGlsZFBlcmNlbnRhZ2VQcm9ncmFtKGNvdXJzZUNoaWxkKVxuICAgICAgICAgIGNvdXJzZVsnbW9kdWxlQ291bnQnXSA9IGNvdXJzZVsnbW9kdWxlQ291bnQnXSA/IGNvdXJzZVsnbW9kdWxlQ291bnQnXSArIDEgOiAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY291cnNlQ2hpbGRbJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSAxMDBcbiAgICAgICAgICBjb3Vyc2VDaGlsZFsnY29tcGxldGlvblN0YXR1cyddID0gMlxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBtYXBNb2R1bGVEdXJhdGlvbkFuZFByb2dyZXNzKGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwsIHBhcmVudDogTnNDb250ZW50LklDb250ZW50IHwgbnVsbCkge1xuICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFKSB7XG4gICAgICAgIC8vIGNvbnRlbnQuY2hpbGRyZW4ubWFwKChpdGVtOiBOc0NvbnRlbnQuSUNvbnRlbnQpPT4ge1xuICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICAgICAgY29udGVudCA9IHRoaXMuZ2V0Q2FsY3VsYXRpb25zRnJvbUNoaWxkcmVuKGNvbnRlbnQpXG4gICAgICAgIC8vIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnRlbnQuY2hpbGRyZW4ubWFwKChpdGVtOiBOc0NvbnRlbnQuSUNvbnRlbnQpID0+IHtcbiAgICAgICAgLy8gaWYgKGl0ZW0ucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5NT0RVTEUpIHtcbiAgICAgICAgLy8gICB0aGlzLm1hcE1vZHVsZUR1cmF0aW9uQW5kUHJvZ3Jlc3MoaXRlbSwgcGFyZW50KVxuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgIHRoaXMubWFwTW9kdWxlRHVyYXRpb25BbmRQcm9ncmVzcyhpdGVtLCBwYXJlbnQpXG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgIHRoaXMubWFwTW9kdWxlRHVyYXRpb25BbmRQcm9ncmVzcyhpdGVtLCBwYXJlbnQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZUhpcmFyY2h5UHJvZ3Jlc3NIYXNobWFwKGhpZXJhcmNoeURhdGE6IE5zQ29udGVudC5JQ29udGVudCwgcm9vdENvdXJzZUNhdGVnb3J5Pzogc3RyaW5nLCBwYXJlbnRJZD86IHN0cmluZykge1xuICAgIGlmIChoaWVyYXJjaHlEYXRhICYmIGhpZXJhcmNoeURhdGEuY2hpbGRyZW4pIHtcbiAgICAgIGhpZXJhcmNoeURhdGEuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IE5zQ29udGVudC5JQ29udGVudCkgPT4ge1xuICAgICAgICAvLyBJTVBPUlRBTlQ6IFBhc3MgdGhlIGN1cnJlbnQgaGllcmFyY2h5RGF0YSdzIGlkZW50aWZpZXIgYXMgdGhlIHBhcmVudCBmb3IgY2hpbGRyZW5cbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIGNvcnJlY3QgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgaW4gdGhlIGhhc2htYXBcbiAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVIaXJhcmNoeVByb2dyZXNzSGFzaG1hcChjaGlsZCwgcm9vdENvdXJzZUNhdGVnb3J5LCBoaWVyYXJjaHlEYXRhLmlkZW50aWZpZXIpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJpbWFyeUNhdCA9IGNoaWxkLnByaW1hcnlDYXRlZ29yeSBhcyBzdHJpbmdcbiAgICAgICAgY29uc3QgY291cnNlQ2F0ID0gKGNoaWxkLmNvdXJzZUNhdGVnb3J5IHx8IGNoaWxkLnByaW1hcnlDYXRlZ29yeSB8fCAnJykgYXMgc3RyaW5nXG4gICAgICAgIGNvbnN0IGlzTWlsZXN0b25lID0gcHJpbWFyeUNhdCA9PT0gJ01pbGVzdG9uZScgfHwgY291cnNlQ2F0ID09PSAnTWlsZXN0b25lJ1xuICAgICAgICBjb25zdCBpc0NvbGxlY3Rpb24gPSBjaGlsZC5taW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuQ09MTEVDVElPTlxuICAgICAgICBjb25zdCBpc01vZHVsZSA9IGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFXG4gICAgICAgIGNvbnN0IGlzUmVzb3VyY2UgPSBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFIHx8XG4gICAgICAgICAgY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUkFDVElDRV9SRVNPVVJDRSB8fFxuICAgICAgICAgIGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuRklOQUxfQVNTRVNTTUVOVCB8fFxuICAgICAgICAgIGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09NUF9BU1NFU1NNRU5UXG4gICAgICAgIGNvbnN0IGlzTGVhcm5pbmdQYXRod2F5ID0gcm9vdENvdXJzZUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUGF0aHdheSdcblxuICAgICAgICAvLyBDaGVjayBpZiBjb250ZW50IGlzIG1hbmRhdG9yeSAoaXNNYW5kYXRvcnkgZmxhZyBvciBtYW5kYXRvcnkgcHJvcGVydHkpXG4gICAgICAgIC8vIEJ5IGRlZmF1bHQsIGNvdXJzZXMgYXJlIG1hbmRhdG9yeSB1bmxlc3MgaXNNYW5kYXRvcnkgaXMgZXhwbGljaXRseSBmYWxzZVxuICAgICAgICBsZXQgaXNNYW5kYXRvcnkgPSB0cnVlXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQuaXNNYW5kYXRvcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaXNNYW5kYXRvcnkgPSBjaGlsZC5pc01hbmRhdG9yeSAhPT0gZmFsc2VcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKGNoaWxkIGFzIGFueSkubWFuZGF0b3J5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlzTWFuZGF0b3J5ID0gKGNoaWxkIGFzIGFueSkubWFuZGF0b3J5ICE9PSBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIHBhc3NlZCBwYXJlbnRJZCAoZnJvbSBpdGVyYXRpb24gY29udGV4dCkgb3IgZmFsbGJhY2sgdG8gY2hpbGQ/LnBhcmVudCAoZnJvbSBBUEkpXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyBuZXN0ZWQgY2hpbGRyZW4gKGUuZy4sIGFzc2Vzc21lbnRzIGluc2lkZSBjb3Vyc2VzKSBoYXZlIGNvcnJlY3QgcGFyZW50IHJlZmVyZW5jZXNcbiAgICAgICAgY29uc3QgY29ycmVjdFBhcmVudElkID0gaGllcmFyY2h5RGF0YS5pZGVudGlmaWVyIHx8IGNoaWxkPy5wYXJlbnRcblxuICAgICAgICBsZXQgbG9jYWxNYXA6IGFueSA9IHtcbiAgICAgICAgICBwYXJlbnQ6IGNvcnJlY3RQYXJlbnRJZCxcbiAgICAgICAgICBpZGVudGlmaWVyOiBjaGlsZC5pZGVudGlmaWVyLFxuICAgICAgICAgIGxlYWZOb2Rlc0NvdW50OiBjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCBudWxsLFxuICAgICAgICAgIGxlYWZOb2RlczogY2hpbGQubGVhZk5vZGVzIHx8IFtdLFxuICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBjaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBjaGlsZC5wcm9ncmVzcyB8fCAwLFxuICAgICAgICAgIGNvbXBsZXRpb25TdGF0dXM6IHRoaXMuc2FmZUNvbXBsZXRpb25TdGF0dXMoY2hpbGQuY29tcGxldGlvblN0YXR1cyB8fCBjaGlsZC5zdGF0dXMpLFxuICAgICAgICAgIHN0YXR1czogdGhpcy5zYWZlQ29tcGxldGlvblN0YXR1cyhjaGlsZC5zdGF0dXMgfHwgY2hpbGQuY29tcGxldGlvblN0YXR1cyksXG4gICAgICAgICAgcHJvZ3Jlc3M6IGNoaWxkLnByb2dyZXNzLFxuICAgICAgICAgIHByaW1hcnlDYXRlZ29yeTogY2hpbGQucHJpbWFyeUNhdGVnb3J5LFxuICAgICAgICAgIGNvdXJzZUNhdGVnb3J5OiBjb3Vyc2VDYXQsXG4gICAgICAgICAgZHVyYXRpb246IGNoaWxkLmR1cmF0aW9uIHx8IDAsXG4gICAgICAgICAgZXhwZWN0ZWREdXJhdGlvbjogY2hpbGQuZXhwZWN0ZWREdXJhdGlvbiB8fCAwLFxuICAgICAgICAgIC8vIEFkZGl0aW9uYWwgbWV0YWRhdGEgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICAgICAgICAgIG1pbWVUeXBlOiBjaGlsZC5taW1lVHlwZSxcbiAgICAgICAgICBpc0xvY2tlZDogY2hpbGQuaXNMb2NrZWQgfHwgZmFsc2UsXG4gICAgICAgICAgYXJ0aWZhY3RVcmw6IGNoaWxkLmFydGlmYWN0VXJsIHx8IG51bGwsXG4gICAgICAgICAgbmFtZTogY2hpbGQubmFtZSB8fCAnJyxcbiAgICAgICAgICBjb250ZW50VHlwZTogY2hpbGQuY29udGVudFR5cGUgfHwgJycsXG4gICAgICAgICAgLy8gUHJlLWNvbXB1dGVkIGZsYWdzIGZvciBMZWFybmluZyBQYXRod2F5XG4gICAgICAgICAgaXNNaWxlc3RvbmU6IGlzTWlsZXN0b25lLFxuICAgICAgICAgIGlzQ29sbGVjdGlvbjogaXNDb2xsZWN0aW9uLFxuICAgICAgICAgIGlzTW9kdWxlOiBpc01vZHVsZSxcbiAgICAgICAgICBpc1Jlc291cmNlOiBpc1Jlc291cmNlLFxuICAgICAgICAgIGlzTGVhcm5pbmdQYXRod2F5OiBpc0xlYXJuaW5nUGF0aHdheSxcbiAgICAgICAgICBpc01hbmRhdG9yeTogaXNNYW5kYXRvcnksXG4gICAgICAgICAgLy8gTWlsZXN0b25lIHNwZWNpZmljIGRhdGFcbiAgICAgICAgICBtaWxlc3RvbmVJbmRleDogKGNoaWxkIGFzIGFueSkubWlsZXN0b25lSW5kZXgsXG4gICAgICAgICAgY29tcGxldGVkTGVhZk5vZGVzQ291bnQ6IChjaGlsZCBhcyBhbnkpLmNvbXBsZXRlZExlYWZOb2Rlc0NvdW50IHx8IDAsXG4gICAgICAgICAgLy8gUHJlLWFzc2Vzc21lbnQgZmxhZyAoZm9yIG1pbGVzdG9uZSBnYXRpbmcpXG4gICAgICAgICAgaXNQcmVBc3Nlc3NtZW50OiAoY2hpbGQgYXMgYW55KS5pc1ByZUFzc2Vzc21lbnQgfHwgZmFsc2UsXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWJ1ZyBsb2dnaW5nIGZvciBtaWxlc3RvbmVzXG4gICAgICAgIGlmIChpc01pbGVzdG9uZSkge1xuICAgICAgICAgIC8vIFByb2dyZXNzIHRyYWNrZWQgZm9yIG1pbGVzdG9uZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVidWcgbG9nZ2luZyBmb3IgYXNzZXNzbWVudCBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwc1xuICAgICAgICAvLyBOb3RlOiBGSU5BTF9BU1NFU1NNRU5UIG1hcHMgdG8gJ0NvdXJzZSBBc3Nlc3NtZW50JyBpbiB0aGUgZW51bSwgbm90ICdGaW5hbCBBc3Nlc3NtZW50J1xuICAgICAgICBjb25zdCBpc0Fzc2Vzc21lbnQgPSBcbiAgICAgICAgICBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdDb3Vyc2UgQXNzZXNzbWVudCcgfHxcbiAgICAgICAgICBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdTdGFuZGFsb25lIEFzc2Vzc21lbnQnIHx8XG4gICAgICAgICAgY2hpbGQubWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldCdcbiAgICAgICAgXG4gICAgICAgIGlmIChpc0Fzc2Vzc21lbnQpIHtcblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVidWc6IExvZyB3aGVuIGFkZGluZyBpdGVtIHdpdGggaXNQcmVBc3Nlc3NtZW50IGZsYWcgdG8gaGFzaG1hcFxuICAgICAgICBpZiAoKGNoaWxkIGFzIGFueSkuaXNQcmVBc3Nlc3NtZW50ID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ/CflI0gW0hBU0hNQVAgQlVJTERdIEFkZGluZyBwcmUtYXNzZXNzbWVudCB0byBoYXNobWFwOicsIHtcbiAgICAgICAgICAgIGlkOiBjaGlsZC5pZGVudGlmaWVyLFxuICAgICAgICAgICAgbmFtZTogY2hpbGQubmFtZSxcbiAgICAgICAgICAgIGlzUHJlQXNzZXNzbWVudDogbG9jYWxNYXAuaXNQcmVBc3Nlc3NtZW50LFxuICAgICAgICAgICAgcGFyZW50OiBsb2NhbE1hcC5wYXJlbnQsXG4gICAgICAgICAgICBjb21wbGV0aW9uU3RhdHVzOiBsb2NhbE1hcC5jb21wbGV0aW9uU3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzOiBsb2NhbE1hcC5zdGF0dXNcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYXNobWFwW2NoaWxkLmlkZW50aWZpZXJdID0gbG9jYWxNYXBcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZVByZUFzc2Vzc21lbnRIaXJhcmNoeVByb2dyZXNzSGFzaG1hcChoaWVyYXJjaHlEYXRhOiBOc0NvbnRlbnQuSUNvbnRlbnQpIHtcbiAgICBpZiAoaGllcmFyY2h5RGF0YSAmJiBoaWVyYXJjaHlEYXRhLnByZUVucm9sbWVudFJlc291cmNlcykge1xuICAgICAgaGllcmFyY2h5RGF0YS5wcmVFbnJvbG1lbnRSZXNvdXJjZXMuZm9yRWFjaCgoY2hpbGQ6IE5zQ29udGVudC5JQ29udGVudCkgPT4ge1xuICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQucHJlRW5yb2xtZW50UmVzb3VyY2VzKSB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVQcmVBc3Nlc3NtZW50SGlyYXJjaHlQcm9ncmVzc0hhc2htYXAoY2hpbGQpXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvY2FsTWFwID0ge31cbiAgICAgICAgbG9jYWxNYXAgPSB7XG4gICAgICAgICAgcGFyZW50OiBjaGlsZD8ucGFyZW50LFxuICAgICAgICAgIGlkZW50aWZpZXI6IGNoaWxkLmlkZW50aWZpZXIsXG4gICAgICAgICAgbGVhZk5vZGVzQ291bnQ6IGNoaWxkLmxlYWZOb2Rlc0NvdW50IHx8IG51bGwsXG4gICAgICAgICAgbGVhZk5vZGVzOiBjaGlsZC5sZWFmTm9kZXMgfHwgW10sXG4gICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IGNoaWxkLmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGNoaWxkLnByb2dyZXNzLFxuICAgICAgICAgIGNvbXBsZXRpb25TdGF0dXM6IHRoaXMuc2FmZUNvbXBsZXRpb25TdGF0dXMoY2hpbGQuY29tcGxldGlvblN0YXR1cyksXG4gICAgICAgICAgc3RhdHVzOiB0aGlzLnNhZmVDb21wbGV0aW9uU3RhdHVzKGNoaWxkLnN0YXR1cyB8fCBjaGlsZC5jb21wbGV0aW9uU3RhdHVzKSxcbiAgICAgICAgICBwcm9ncmVzczogY2hpbGQucHJvZ3Jlc3MsXG4gICAgICAgICAgcHJpbWFyeUNhdGVnb3J5OiBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnksXG4gICAgICAgICAgY291cnNlQ2F0ZWdvcnk6IGNoaWxkLmNvdXJzZUNhdGVnb3J5IHx8IGNoaWxkLnByaW1hcnlDYXRlZ29yeSB8fCAnJyxcbiAgICAgICAgICBkdXJhdGlvbjogY2hpbGQuZHVyYXRpb24gfHwgMCxcbiAgICAgICAgICBleHBlY3RlZER1cmF0aW9uOiBjaGlsZC5leHBlY3RlZER1cmF0aW9uIHx8IDAsXG4gICAgICAgICAgLy8gTWFyayBhcyBwcmUtYXNzZXNzbWVudCBPTkxZIGlmIGV4cGxpY2l0bHkgc2V0IC0gZG8gTk9UIGRlZmF1bHQgdG8gdHJ1ZVxuICAgICAgICAgIGlzUHJlQXNzZXNzbWVudDogY2hpbGQuaXNQcmVBc3Nlc3NtZW50IHx8IGZhbHNlLFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFzaG1hcFtjaGlsZC5pZGVudGlmaWVyXSA9IGxvY2FsTWFwXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYWxsSGlyYXJjaHlQcm9ncmVzc0hhc2htYXAoaGllcmFyY2h5RGF0YTogTnNDb250ZW50LklDb250ZW50IHwgbnVsbCkge1xuICAgIGlmIChoaWVyYXJjaHlEYXRhKSB7XG4gICAgICBjb25zdCByb290Q291cnNlQ2F0ZWdvcnkgPSBoaWVyYXJjaHlEYXRhLmNvdXJzZUNhdGVnb3J5IHx8IGhpZXJhcmNoeURhdGEucHJpbWFyeUNhdGVnb3J5IHx8ICcnXG4gICAgICBjb25zdCBpc0xlYXJuaW5nUGF0aHdheSA9IHJvb3RDb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknXG5cbiAgICAgIC8vIENSSVRJQ0FMOiBPbmx5IGNsZWFyIGhhc2htYXAgd2hlbiBuYXZpZ2F0aW5nIHRvIERJRkZFUkVOVCBjb250ZW50XG4gICAgICAvLyBUaGlzIHByZXZlbnRzIGxvc3Mgb2YgcmVhbC10aW1lIHByb2dyZXNzIHVwZGF0ZXMgd2hlbiBjb250ZW50IGlzIGJlaW5nIGFjdGl2ZWx5IGNvbnN1bWVkXG4gICAgICAvLyBDbGVhciB3aGVuOlxuICAgICAgLy8gMS4gRGlmZmVyZW50IExlYXJuaW5nIFBhdGh3YXlzICh3aGljaCBtYXkgaGF2ZSBtaWxlc3RvbmVzIHdpdGggc2FtZSBnZW5lcmljIElEcyBsaWtlIE0xLCBNMilcbiAgICAgIC8vIDIuIExlYXJuaW5nIFBhdGh3YXkgdG8gcmVndWxhciBDb3Vyc2UgKHByZXZlbnRzIHN0YWxlIG1pbGVzdG9uZSBkYXRhKVxuICAgICAgLy8gMy4gUmVndWxhciBDb3Vyc2UgdG8gTGVhcm5pbmcgUGF0aHdheVxuICAgICAgLy8gNC4gRGlmZmVyZW50IHJlZ3VsYXIgQ291cnNlXG4gICAgICBjb25zdCBpc05ld0NvbnRlbnQgPSB0aGlzLmN1cnJlbnRSb290Q29udGVudElkICE9PSBoaWVyYXJjaHlEYXRhLmlkZW50aWZpZXJcbiAgICAgIGlmIChpc05ld0NvbnRlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYPCfp7kgW0hBU0hNQVBdIENsZWFyaW5nIGhhc2htYXAgLSBuYXZpZ2F0aW5nIGZyb20gJHt0aGlzLmN1cnJlbnRSb290Q29udGVudElkfSB0byAke2hpZXJhcmNoeURhdGEuaWRlbnRpZmllcn1gKVxuICAgICAgICB0aGlzLmhhc2htYXAgPSB7fVxuICAgICAgICB0aGlzLmN1cnJlbnRSb290Q29udGVudElkID0gaGllcmFyY2h5RGF0YS5pZGVudGlmaWVyXG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGFzaG1hcFtoaWVyYXJjaHlEYXRhLmlkZW50aWZpZXJdID0ge1xuICAgICAgICBwYXJlbnQ6IGhpZXJhcmNoeURhdGEucGFyZW50LFxuICAgICAgICBpZGVudGlmaWVyOiBoaWVyYXJjaHlEYXRhLmlkZW50aWZpZXIsXG4gICAgICAgIGxlYWZOb2Rlc0NvdW50OiBoaWVyYXJjaHlEYXRhLmxlYWZOb2Rlc0NvdW50IHx8IG51bGwsXG4gICAgICAgIGxlYWZOb2RlczogaGllcmFyY2h5RGF0YS5sZWFmTm9kZXMgfHwgW10sXG4gICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBoaWVyYXJjaHlEYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGhpZXJhcmNoeURhdGEucHJvZ3Jlc3MgfHwgMCxcbiAgICAgICAgY29tcGxldGlvblN0YXR1czogdGhpcy5zYWZlQ29tcGxldGlvblN0YXR1cyhoaWVyYXJjaHlEYXRhLmNvbXBsZXRpb25TdGF0dXMpLFxuICAgICAgICBwcm9ncmVzczogaGllcmFyY2h5RGF0YS5wcm9ncmVzcyxcbiAgICAgICAgcHJpbWFyeUNhdGVnb3J5OiBoaWVyYXJjaHlEYXRhLnByaW1hcnlDYXRlZ29yeSxcbiAgICAgICAgY291cnNlQ2F0ZWdvcnk6IHJvb3RDb3Vyc2VDYXRlZ29yeSxcbiAgICAgICAgZXhwZWN0ZWREdXJhdGlvbjogaGllcmFyY2h5RGF0YS5leHBlY3RlZER1cmF0aW9uIHx8IDAsXG4gICAgICAgIC8vIEFkZGl0aW9uYWwgbWV0YWRhdGFcbiAgICAgICAgbWltZVR5cGU6IGhpZXJhcmNoeURhdGEubWltZVR5cGUsXG4gICAgICAgIGlzTG9ja2VkOiBoaWVyYXJjaHlEYXRhLmlzTG9ja2VkIHx8IGZhbHNlLFxuICAgICAgICBhcnRpZmFjdFVybDogaGllcmFyY2h5RGF0YS5hcnRpZmFjdFVybCB8fCBudWxsLFxuICAgICAgICBuYW1lOiBoaWVyYXJjaHlEYXRhLm5hbWUgfHwgJycsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBoaWVyYXJjaHlEYXRhLmNvbnRlbnRUeXBlIHx8ICcnLFxuICAgICAgICBpc01pbGVzdG9uZTogZmFsc2UsXG4gICAgICAgIGlzQ29sbGVjdGlvbjogaGllcmFyY2h5RGF0YS5taW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuQ09MTEVDVElPTixcbiAgICAgICAgaXNNb2R1bGU6IGhpZXJhcmNoeURhdGEucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5NT0RVTEUsXG4gICAgICAgIGlzUmVzb3VyY2U6IGZhbHNlLFxuICAgICAgICBpc0xlYXJuaW5nUGF0aHdheTogaXNMZWFybmluZ1BhdGh3YXksXG4gICAgICB9XG4gICAgICBpZiAoaGllcmFyY2h5RGF0YS5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNVUkFURURfUFJPR1JBTSAmJlxuICAgICAgICBoaWVyYXJjaHlEYXRhLmNvbXBhdGliaWxpdHlMZXZlbCA+PSA1ICYmIGhpZXJhcmNoeURhdGEuY29udGV4dExvY2tpbmdUeXBlICYmXG4gICAgICAgIGhpZXJhcmNoeURhdGEuY29udGV4dExvY2tpbmdUeXBlID09PSBOc0NvbnRlbnQuRUNvbnRleHRMb2NraW5nVHlwZS5DT1VSU0VfQVNTRVNTTUVOVF9PTkxZKSB7XG4gICAgICAgIHRoaXMuaGFzaG1hcFtoaWVyYXJjaHlEYXRhLmlkZW50aWZpZXJdID0ge1xuICAgICAgICAgIC4uLnRoaXMuaGFzaG1hcFtoaWVyYXJjaHlEYXRhLmlkZW50aWZpZXJdLFxuICAgICAgICAgIGNvbnRleHRMb2NraW5nVHlwZTogaGllcmFyY2h5RGF0YS5jb250ZXh0TG9ja2luZ1R5cGUsXG4gICAgICAgICAgY29tcGF0aWJpbGl0eUxldmVsOiBoaWVyYXJjaHlEYXRhLmNvbXBhdGliaWxpdHlMZXZlbCxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jcmVhdGVIaXJhcmNoeVByb2dyZXNzSGFzaG1hcChoaWVyYXJjaHlEYXRhLCByb290Q291cnNlQ2F0ZWdvcnkpXG4gICAgICAvLyBOT1RFOiBjb21wdXRlTWlsZXN0b25lTG9ja2luZ1N0YXR1cyBpcyBjYWxsZWQgQUZURVIgcHJvZ3Jlc3MgZGF0YSBpcyBwb3B1bGF0ZWRcbiAgICAgIC8vIGluIG1hcENvbXBsZXRpb25QZXJjZW50YWdlUHJvZ3JhbSwgbm90IGhlcmUgd2hlcmUgY29tcGxldGlvbiBkYXRhIGlzIHN0aWxsIDBcbiAgICAgIHRoaXMuaGFzaG1hcCA9IHsgLi4udGhpcy5oYXNobWFwIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlLWNvbXB1dGUgbWlsZXN0b25lIGxvY2tpbmcgc3RhdHVzIGZvciBhbGwgbWlsZXN0b25lcyBpbiBMZWFybmluZyBQYXRod2F5XG4gICAqIFRoaXMgYXZvaWRzIGV4cGVuc2l2ZSBjYWxjdWxhdGlvbnMgaW4gY29tcG9uZW50IGdldHRlcnNcbiAgICogXG4gICAqIExvY2tpbmcgUnVsZXM6XG4gICAqIDAuIElmIHVzZXIgaXMgbm90IGVucm9sbGVkLCBBTEwgbWlsZXN0b25lcyBhcmUgbG9ja2VkXG4gICAqIDEuIEFsbCBtaWxlc3RvbmVzIGFyZSBsb2NrZWQgYnkgZGVmYXVsdFxuICAgKiAyLiBNaWxlc3RvbmUgMSAoTTEpIHVubG9ja3Mgd2hlbiBwcmUtYXNzZXNzbWVudCBpcyBjb21wbGV0ZWRcbiAgICogMy4gTWlsZXN0b25lIE4gKE4gPiAxKSB1bmxvY2tzIHdoZW46XG4gICAqICAgIC0gQWxsIG1hbmRhdG9yeSBsZWFybmluZyBpdGVtcyBpbiBNaWxlc3RvbmUgTi0xIGFyZSBjb21wbGV0ZWRcbiAgICogICAgLSBUaGUgYXNzZXNzbWVudCBvZiBNaWxlc3RvbmUgTi0xIGlzIGNvbXBsZXRlZFxuICAgKi9cbiAgLyoqXG4gICAqIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgKiBMRUFSTklORyBQQVRIV0FZIE1JTEVTVE9ORSBMT0NLSU5HIFNZU1RFTSAtIFNJTkdMRSBTT1VSQ0UgT0YgVFJVVEhcbiAgICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgU0lOR0xFIFNPVVJDRSBPRiBUUlVUSCBmb3IgYWxsIG1pbGVzdG9uZSBhbmQgYXNzZXNzbWVudCBsb2NraW5nLlxuICAgKiBBbGwgbG9ja2luZyBsb2dpYyBpcyBjb21wdXRlZCBoZXJlIGFuZCBzdG9yZWQgaW4gdGhlIGhhc2htYXAuXG4gICAqIENvbXBvbmVudHMgUkVBRCBPTkxZIGZyb20gdGhlIGhhc2htYXAgLSB0aGV5IGRvIE5PVCBjb21wdXRlIGxvY2tzIHRoZW1zZWx2ZXMuXG4gICAqIFxuICAgKiBMT0NLSU5HIFJVTEVTOlxuICAgKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICogMS4gREVGQVVMVCBTVEFURTogQWxsIG1pbGVzdG9uZXMgYXJlIExPQ0tFRCBieSBkZWZhdWx0XG4gICAqIFxuICAgKiAyLiBNSUxFU1RPTkUgMSBVTkxPQ0tJTkc6XG4gICAqICAgIC0gVW5sb2NrcyB3aGVuOiBQcmUtYXNzZXNzbWVudCBpcyAxMDAlIGNvbXBsZXRlXG4gICAqICAgIC0gTG9jayBtZXNzYWdlOiBcIkNvbXBsZXRlIHRoZSBwcmVsaW1pbmFyeSBhc3Nlc3NtZW50IHRvIHVubG9jayB0aGlzIG1pbGVzdG9uZVwiXG4gICAqIFxuICAgKiAzLiBNSUxFU1RPTkUgTiAoTiA+PSAyKSBVTkxPQ0tJTkc6XG4gICAqICAgIC0gVW5sb2NrcyB3aGVuOiBQcmV2aW91cyBtaWxlc3RvbmUgaXMgMTAwJSBjb21wbGV0ZVxuICAgKiAgICAtIFByZXZpb3VzIG1pbGVzdG9uZSBpcyBjb21wbGV0ZSB3aGVuOlxuICAgKiAgICAgIGEpIEFsbCBNQU5EQVRPUlkgY291cnNlcyBhcmUgMTAwJSBjb21wbGV0ZVxuICAgKiAgICAgIGIpIE1pbGVzdG9uZSBhc3Nlc3NtZW50IGlzIDEwMCUgY29tcGxldGVcbiAgICogICAgLSBMb2NrIG1lc3NhZ2U6IFwiQ29tcGxldGUgYWxsIG1hbmRhdG9yeSBjb250ZW50IGFuZCBhc3Nlc3NtZW50IGluIE1pbGVzdG9uZSBOLTFcIlxuICAgKiBcbiAgICogNC4gQVNTRVNTTUVOVCBMT0NLSU5HICh3aXRoaW4gdW5sb2NrZWQgbWlsZXN0b25lcyk6XG4gICAqICAgIC0gQXNzZXNzbWVudCBsb2NrZWQgdW50aWw6IEFsbCBNQU5EQVRPUlkgY291cnNlcyBpbiBTQU1FIG1pbGVzdG9uZSBjb21wbGV0ZVxuICAgKiAgICAtIE9wdGlvbmFsIGNvdXJzZXMgZG8gTk9UIGFmZmVjdCBhc3Nlc3NtZW50IGxvY2tpbmdcbiAgICogICAgLSBBc3Nlc3NtZW50IGxvY2sgbWVzc2FnZTogXCJDb21wbGV0ZSBhbGwgbWFuZGF0b3J5IGl0ZW1zIHRvIHVubG9jayB0aGUgYXNzZXNzbWVudFwiXG4gICAqICAgIC0gT25jZSBhc3Nlc3NtZW50IGlzIGNvbXBsZXRlZCwgaXQgc3RheXMgdW5sb2NrZWRcbiAgICogXG4gICAqIDUuIFBBUkVOVCBNSUxFU1RPTkUgTE9DS0lORzpcbiAgICogICAgLSBBbGwgY29udGVudCBpbnNpZGUgbG9ja2VkIG1pbGVzdG9uZSBnZXRzIGlzUGFyZW50TWlsZXN0b25lTG9ja2VkID0gdHJ1ZVxuICAgKiAgICAtIFRoaXMgaW5jbHVkZXMgY291cnNlcywgYXNzZXNzbWVudHMsIG5lc3RlZCByZXNvdXJjZXNcbiAgICogXG4gICAqIDYuIE1BTkRBVE9SWSB2cyBPUFRJT05BTDpcbiAgICogICAgLSBCeSBkZWZhdWx0LCBBTEwgY291cnNlcyBhcmUgbWFuZGF0b3J5ICh1bmxlc3MgaXNNYW5kYXRvcnk6IGZhbHNlKVxuICAgKiAgICAtIE9wdGlvbmFsIGNvdXJzZXMgZG8gTk9UIGJsb2NrIHByb2dyZXNzaW9uXG4gICAqIFxuICAgKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgICovXG4gIHB1YmxpYyBjb21wdXRlTWlsZXN0b25lTG9ja2luZ1N0YXR1cyhpc0Vucm9sbGVkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnNvbGUubG9nKCfwn5qAIFtNSUxFU1RPTkUgTE9DS10gY29tcHV0ZU1pbGVzdG9uZUxvY2tpbmdTdGF0dXMgQ0FMTEVEIHdpdGggaXNFbnJvbGxlZDonLCBpc0Vucm9sbGVkKVxuICAgIGNvbnNvbGUubG9nKCfwn5qAIFtNSUxFU1RPTkUgTE9DS10gSGFzaG1hcCBzaXplOicsIE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcCkubGVuZ3RoKVxuICAgIFxuICAgIGlmICghdGhpcy5oYXNobWFwIHx8IE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcCkubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyAgSGFzaG1hcCBpcyBlbXB0eSAtIGNhbm5vdCBjb21wdXRlIG1pbGVzdG9uZSBsb2NraW5nJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBcbiAgICBcbiAgICAvLyBTVEVQIDE6IEZpbmQgYWxsIG1pbGVzdG9uZXMgYW5kIHNvcnQgYnkgaW5kZXhcbiAgICBjb25zdCBtaWxlc3RvbmVFbnRyaWVzID0gT2JqZWN0LmtleXModGhpcy5oYXNobWFwKVxuICAgICAgLmZpbHRlcihrZXkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5oYXNobWFwW2tleV1cbiAgICAgICAgcmV0dXJuIGl0ZW0uaXNNaWxlc3RvbmUgfHwgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdNaWxlc3RvbmUnIHx8IGl0ZW0uY291cnNlQ2F0ZWdvcnkgPT09ICdNaWxlc3RvbmUnXG4gICAgICB9KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbUEgPSB0aGlzLmhhc2htYXBbYV1cbiAgICAgICAgY29uc3QgaXRlbUIgPSB0aGlzLmhhc2htYXBbYl1cbiAgICAgICAgaWYgKGl0ZW1BLm1pbGVzdG9uZUluZGV4ICE9PSB1bmRlZmluZWQgJiYgaXRlbUIubWlsZXN0b25lSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBpdGVtQS5taWxlc3RvbmVJbmRleCAtIGl0ZW1CLm1pbGVzdG9uZUluZGV4XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnVtQSA9IHBhcnNlSW50KGEucmVwbGFjZSgvXFxEL2csICcnKSkgfHwgMFxuICAgICAgICBjb25zdCBudW1CID0gcGFyc2VJbnQoYi5yZXBsYWNlKC9cXEQvZywgJycpKSB8fCAwXG4gICAgICAgIHJldHVybiBudW1BIC0gbnVtQlxuICAgICAgfSlcblxuICAgIGlmIChtaWxlc3RvbmVFbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIFxuICAgIG1pbGVzdG9uZUVudHJpZXMuZm9yRWFjaCgoaWQsIGkpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBNJHtpICsgMX06ICR7dGhpcy5oYXNobWFwW2lkXS5uYW1lIHx8IGlkfWApXG4gICAgfSlcblxuICAgIC8vIFNURVAgMjogSWYgdXNlciBOT1QgZW5yb2xsZWQsIGxvY2sgQUxMIG1pbGVzdG9uZXMgYW5kIGNoaWxkcmVuXG4gICAgaWYgKCFpc0Vucm9sbGVkKSB7XG4gICAgICBjb25zb2xlLmxvZygnXFxu4pqg77iPICBVc2VyIE5PVCBlbnJvbGxlZCAtIGxvY2tpbmcgQUxMIG1pbGVzdG9uZXMgYW5kIGNoaWxkcmVuJylcbiAgICAgIG1pbGVzdG9uZUVudHJpZXMuZm9yRWFjaChtaWxlc3RvbmVJZCA9PiB7XG4gICAgICAgIHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF0uY29tcHV0ZWRJc0xvY2tlZCA9IHRydWVcbiAgICAgICAgdGhpcy5oYXNobWFwW21pbGVzdG9uZUlkXS51bmxvY2tNZXNzYWdlID0gJ0Vucm9sbCBpbiB0aGlzIGNvdXJzZSB0byBhY2Nlc3MgbWlsZXN0b25lcydcbiAgICAgIH0pXG4gICAgICAvLyBMb2NrIGFsbCBjaGlsZHJlblxuICAgICAgT2JqZWN0LmtleXModGhpcy5oYXNobWFwKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5oYXNobWFwW2tleV0uaXNNaWxlc3RvbmUpIHtcbiAgICAgICAgICB0aGlzLmhhc2htYXBba2V5XS5pc1BhcmVudE1pbGVzdG9uZUxvY2tlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHRoaXMuaGFzaG1hcCA9IHsgLi4udGhpcy5oYXNobWFwIH1cbiAgICAgIHRoaXMuaGFzaG1hcFVwZGF0ZWQubmV4dCh7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgaGFzaG1hcDogdGhpcy5oYXNobWFwIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTVEVQIDM6IENoZWNrIHByZS1hc3Nlc3NtZW50IGNvbXBsZXRpb25cbiAgICBjb25zdCBpc1ByZUFzc2Vzc21lbnRDb21wbGV0ZWQgPSB0aGlzLmNoZWNrUHJlQXNzZXNzbWVudENvbXBsZXRpb24oKVxuICAgIGNvbnNvbGUubG9nKCfwn5SNIFtNSUxFU1RPTkUgTE9DS10gUHJlLWFzc2Vzc21lbnQgY29tcGxldGVkOicsIGlzUHJlQXNzZXNzbWVudENvbXBsZXRlZCA/ICfinIUgWUVTJyA6ICfinYwgTk8nKVxuXG4gICAgLy8gU1RFUCA0OiBDb21wdXRlIGxvY2tpbmcgZm9yIGVhY2ggbWlsZXN0b25lXG4gICAgXG4gICAgbWlsZXN0b25lRW50cmllcy5mb3JFYWNoKChtaWxlc3RvbmVJZCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG1pbGVzdG9uZSA9IHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF1cbiAgICAgIGlmICghbWlsZXN0b25lKSByZXR1cm5cblxuICAgICAgY29uc3QgbWlsZXN0b25lTnVtID0gaW5kZXggKyAxXG5cbiAgICAgIC8vIE1JTEVTVE9ORSAxOiBVbmxvY2tzIHdoZW4gcHJlLWFzc2Vzc21lbnQgY29tcGxldGVcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBpc0xvY2tlZCA9ICFpc1ByZUFzc2Vzc21lbnRDb21wbGV0ZWRcbiAgICAgICAgdGhpcy5oYXNobWFwW21pbGVzdG9uZUlkXS5jb21wdXRlZElzTG9ja2VkID0gaXNMb2NrZWRcbiAgICAgICAgdGhpcy5oYXNobWFwW21pbGVzdG9uZUlkXS51bmxvY2tNZXNzYWdlID0gaXNMb2NrZWQgP1xuICAgICAgICAgICdDb21wbGV0ZSB0aGUgcHJlbGltaW5hcnkgYXNzZXNzbWVudCB0byB1bmxvY2sgdGhpcyBtaWxlc3RvbmUnIDogJydcbiAgICAgICAgXG4gICAgICAgIGNvbnNvbGUubG9nKGDwn5OMIFtNSUxFU1RPTkUgMV0gJHttaWxlc3RvbmUubmFtZX06YCwge1xuICAgICAgICAgIGlzUHJlQXNzZXNzbWVudENvbXBsZXRlZCxcbiAgICAgICAgICBpc0xvY2tlZDogaXNMb2NrZWQgPyAn8J+UkiBMT0NLRUQnIDogJ/CflJMgVU5MT0NLRUQnLFxuICAgICAgICAgIHVubG9ja01lc3NhZ2U6IHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF0udW5sb2NrTWVzc2FnZVxuICAgICAgICB9KVxuICAgICAgICBcbiAgICAgICAgLy8gRm9yIHVubG9ja2VkIE0xLCBjaGVjayBhc3Nlc3NtZW50IGxvY2tpbmdcbiAgICAgICAgaWYgKCFpc0xvY2tlZCkge1xuICAgICAgICAgIHRoaXMuY29tcHV0ZUFzc2Vzc21lbnRMb2NraW5nSW5NaWxlc3RvbmUobWlsZXN0b25lSWQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgIOKoryBNaWxlc3RvbmUgbG9ja2VkIC0gbWFya2luZyBhbGwgY2hpbGRyZW4gYXMgcGFyZW50LWxvY2tlZGApXG4gICAgICAgICAgdGhpcy5tYXJrTWlsZXN0b25lQ2hpbGRyZW5Bc1BhcmVudExvY2tlZChtaWxlc3RvbmVJZCwgdHJ1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gTUlMRVNUT05FIE4gKE4gPiAxKTogVW5sb2NrcyB3aGVuIHByZXZpb3VzIG1pbGVzdG9uZSBjb21wbGV0ZVxuICAgICAgY29uc3QgcHJldmlvdXNNaWxlc3RvbmVJZCA9IG1pbGVzdG9uZUVudHJpZXNbaW5kZXggLSAxXVxuICAgICAgY29uc3QgcHJldmlvdXNNaWxlc3RvbmUgPSB0aGlzLmhhc2htYXBbcHJldmlvdXNNaWxlc3RvbmVJZF1cblxuICAgICAgaWYgKHByZXZpb3VzTWlsZXN0b25lKSB7XG4gICAgICAgIC8vIENoZWNrIGNvbXBsZXRpb24gdmlhIG11bHRpcGxlIHN0cmF0ZWdpZXNcbiAgICAgICAgY29uc3QgcHJldkNvbXBsZXRpb25QY3QgPSBOdW1iZXIocHJldmlvdXNNaWxlc3RvbmUuY29tcGxldGlvblBlcmNlbnRhZ2UpIHx8IDBcbiAgICAgICAgY29uc3QgcHJldkNvbXBsZXRpb25TdGF0dXMgPSBOdW1iZXIocHJldmlvdXNNaWxlc3RvbmUuY29tcGxldGlvblN0YXR1cykgfHwgMFxuICAgICAgICBjb25zdCBwcmV2U3RhdHVzID0gTnVtYmVyKHByZXZpb3VzTWlsZXN0b25lLnN0YXR1cykgfHwgMFxuICAgICAgICBjb25zdCBwcmV2Q29tcGxldGVkTGVhZk5vZGVzID0gTnVtYmVyKHByZXZpb3VzTWlsZXN0b25lLmNvbXBsZXRlZExlYWZOb2Rlc0NvdW50KSB8fCAwXG4gICAgICAgIGNvbnN0IHByZXZMZWFmTm9kZXNDb3VudCA9IE51bWJlcihwcmV2aW91c01pbGVzdG9uZS5sZWFmTm9kZXNDb3VudCkgfHwgMFxuXG4gICAgICAgIGNvbnNvbGUubG9nKGDwn5SNIFtNSUxFU1RPTkUgJHttaWxlc3RvbmVOdW19XSBDaGVja2luZyBpZiBwcmV2aW91cyBNJHtpbmRleH0gaXMgY29tcGxldGU6YCwge1xuICAgICAgICAgIHByZXZpb3VzTWlsZXN0b25lTmFtZTogcHJldmlvdXNNaWxlc3RvbmUubmFtZSxcbiAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogcHJldkNvbXBsZXRpb25QY3QsXG4gICAgICAgICAgY29tcGxldGlvblN0YXR1czogcHJldkNvbXBsZXRpb25TdGF0dXMsXG4gICAgICAgICAgc3RhdHVzOiBwcmV2U3RhdHVzLFxuICAgICAgICAgIGNvbXBsZXRlZExlYWZOb2RlczogcHJldkNvbXBsZXRlZExlYWZOb2RlcyxcbiAgICAgICAgICBsZWFmTm9kZXNDb3VudDogcHJldkxlYWZOb2Rlc0NvdW50XG4gICAgICAgIH0pXG5cbiAgICAgICAgbGV0IHByZXZpb3VzTWlsZXN0b25lQ29tcGxldGUgPVxuICAgICAgICAgIHByZXZDb21wbGV0aW9uUGN0ID49IDEwMCB8fFxuICAgICAgICAgIHByZXZDb21wbGV0aW9uU3RhdHVzID09PSAyIHx8XG4gICAgICAgICAgcHJldlN0YXR1cyA9PT0gMiB8fFxuICAgICAgICAgIChwcmV2TGVhZk5vZGVzQ291bnQgPiAwICYmIHByZXZDb21wbGV0ZWRMZWFmTm9kZXMgPj0gcHJldkxlYWZOb2Rlc0NvdW50KVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGAgICBQcmltYXJ5IGNoZWNrIHJlc3VsdDogJHtwcmV2aW91c01pbGVzdG9uZUNvbXBsZXRlID8gJ+KchSBDT01QTEVURScgOiAn4p2MIElOQ09NUExFVEUnfWApXG5cbiAgICAgICAgLy8gRmFsbGJhY2s6IENoZWNrIGluZGl2aWR1YWwgaXRlbXNcbiAgICAgICAgaWYgKCFwcmV2aW91c01pbGVzdG9uZUNvbXBsZXRlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgIFJ1bm5pbmcgZmFsbGJhY2sgY2hlY2sgKG1hbmRhdG9yeSBjb250ZW50ICsgYXNzZXNzbWVudCkuLi5gKVxuICAgICAgICAgIGNvbnN0IGlzUHJldmlvdXNNaWxlc3RvbmVBc3Nlc3NtZW50Q29tcGxldGUgPSB0aGlzLmNoZWNrTWlsZXN0b25lQXNzZXNzbWVudENvbXBsZXRlKHByZXZpb3VzTWlsZXN0b25lSWQpXG4gICAgICAgICAgY29uc3QgaXNQcmV2aW91c01pbGVzdG9uZU1hbmRhdG9yeUNvbXBsZXRlID0gdGhpcy5jaGVja01pbGVzdG9uZU1hbmRhdG9yeUNvbnRlbnRDb21wbGV0ZShwcmV2aW91c01pbGVzdG9uZUlkKVxuICAgICAgICAgIHByZXZpb3VzTWlsZXN0b25lQ29tcGxldGUgPSBpc1ByZXZpb3VzTWlsZXN0b25lQXNzZXNzbWVudENvbXBsZXRlICYmIGlzUHJldmlvdXNNaWxlc3RvbmVNYW5kYXRvcnlDb21wbGV0ZVxuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICBGYWxsYmFjayBjaGVjazogbWFuZGF0b3J5PSR7aXNQcmV2aW91c01pbGVzdG9uZU1hbmRhdG9yeUNvbXBsZXRlfSwgYXNzZXNzbWVudD0ke2lzUHJldmlvdXNNaWxlc3RvbmVBc3Nlc3NtZW50Q29tcGxldGV9LCByZXN1bHQ9JHtwcmV2aW91c01pbGVzdG9uZUNvbXBsZXRlfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0xvY2tlZCA9ICFwcmV2aW91c01pbGVzdG9uZUNvbXBsZXRlXG4gICAgICAgIHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF0uY29tcHV0ZWRJc0xvY2tlZCA9IGlzTG9ja2VkXG4gICAgICAgIHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF0udW5sb2NrTWVzc2FnZSA9IGlzTG9ja2VkID9cbiAgICAgICAgICBgQ29tcGxldGUgYWxsIG1hbmRhdG9yeSBjb250ZW50IGFuZCBhc3Nlc3NtZW50IGluIE1pbGVzdG9uZSAke2luZGV4fSB0byB1bmxvY2sgdGhpcyBtaWxlc3RvbmVgIDogJydcbiAgICAgICAgXG4gICAgICAgIGNvbnNvbGUubG9nKGAgICDwn5OKIFtNSUxFU1RPTkUgJHttaWxlc3RvbmVOdW19XSAke21pbGVzdG9uZS5uYW1lfTpgLCB7XG4gICAgICAgICAgcHJldmlvdXNNaWxlc3RvbmVDb21wbGV0ZTogcHJldmlvdXNNaWxlc3RvbmVDb21wbGV0ZSA/ICfinIUgWUVTJyA6ICfinYwgTk8nLFxuICAgICAgICAgIGlzTG9ja2VkOiBpc0xvY2tlZCA/ICfwn5SSIExPQ0tFRCcgOiAn8J+UkyBVTkxPQ0tFRCcsXG4gICAgICAgICAgdW5sb2NrTWVzc2FnZTogdGhpcy5oYXNobWFwW21pbGVzdG9uZUlkXS51bmxvY2tNZXNzYWdlXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICAvLyBGb3IgdW5sb2NrZWQgbWlsZXN0b25lcywgY2hlY2sgYXNzZXNzbWVudCBsb2NraW5nXG4gICAgICAgIGlmICghaXNMb2NrZWQpIHtcbiAgICAgICAgICB0aGlzLmNvbXB1dGVBc3Nlc3NtZW50TG9ja2luZ0luTWlsZXN0b25lKG1pbGVzdG9uZUlkKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICDiqK8gTWlsZXN0b25lIGxvY2tlZCAtIG1hcmtpbmcgYWxsIGNoaWxkcmVuIGFzIHBhcmVudC1sb2NrZWRgKVxuICAgICAgICAgIHRoaXMubWFya01pbGVzdG9uZUNoaWxkcmVuQXNQYXJlbnRMb2NrZWQobWlsZXN0b25lSWQsIHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF0uY29tcHV0ZWRJc0xvY2tlZCA9IHRydWVcbiAgICAgICAgdGhpcy5oYXNobWFwW21pbGVzdG9uZUlkXS51bmxvY2tNZXNzYWdlID0gJ1ByZXZpb3VzIG1pbGVzdG9uZSBub3QgZm91bmQnXG4gICAgICAgIGNvbnNvbGUubG9nKGAgICDwn5SSIExPQ0tFRCAocHJldmlvdXMgbWlsZXN0b25lIG5vdCBmb3VuZClgKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBTVEVQIDQuNTogRGVidWcgbG9nIG1pbGVzdG9uZSBsZWFmIG5vZGVzIGFuZCB0aGVpciBjb21wbGV0aW9uIHN0YXR1c1xuICAgIGNvbnNvbGUubG9nKCdcXG7wn5OKIE1pbGVzdG9uZSBMZWFmIE5vZGVzIENvbXBsZXRpb24gU3RhdHVzOicpXG4gICAgbWlsZXN0b25lRW50cmllcy5mb3JFYWNoKChtaWxlc3RvbmVJZCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG1pbGVzdG9uZSA9IHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF1cbiAgICAgIGlmICghbWlsZXN0b25lKSByZXR1cm5cbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coYCAgIExlYWYgTm9kZXMgQXJyYXk6YCwgbWlsZXN0b25lLmxlYWZOb2RlcylcbiAgICAgIGNvbnNvbGUubG9nKGAgICBMZWFmIE5vZGVzIENvdW50OiAke21pbGVzdG9uZS5sZWFmTm9kZXNDb3VudH1gKVxuICAgICAgY29uc29sZS5sb2coYCAgIENvbXBsZXRlZCBMZWFmIE5vZGVzIENvdW50OiAke21pbGVzdG9uZS5jb21wbGV0ZWRMZWFmTm9kZXNDb3VudCB8fCAwfWApXG4gICAgICBjb25zb2xlLmxvZyhgICAgQ29tcGxldGlvbiAlOiAke21pbGVzdG9uZS5jb21wbGV0aW9uUGVyY2VudGFnZX0lYClcbiAgICAgIFxuICAgICAgaWYgKG1pbGVzdG9uZS5sZWFmTm9kZXMgJiYgbWlsZXN0b25lLmxlYWZOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICBJbmRpdmlkdWFsIExlYWYgTm9kZSBTdGF0dXM6YClcbiAgICAgICAgbWlsZXN0b25lLmxlYWZOb2Rlcy5mb3JFYWNoKChsZWFmSWQ6IHN0cmluZywgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGVhZkRhdGEgPSB0aGlzLmhhc2htYXBbbGVhZklkXVxuICAgICAgICAgIGlmIChsZWFmRGF0YSkge1xuICAgICAgICAgICAgY29uc3QgaXNDb21wbGV0ZSA9IFxuICAgICAgICAgICAgICBsZWFmRGF0YS5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IFxuICAgICAgICAgICAgICBsZWFmRGF0YS5zdGF0dXMgPT09IDIgfHwgXG4gICAgICAgICAgICAgIChsZWFmRGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSAmJiBsZWFmRGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDApIHx8XG4gICAgICAgICAgICAgIChsZWFmRGF0YS5wcm9ncmVzcyAmJiBsZWFmRGF0YS5wcm9ncmVzcyA+PSAxMDApXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgJHtpICsgMX0uICR7bGVhZkRhdGEubmFtZSB8fCBsZWFmSWR9IFske2xlYWZEYXRhLnByaW1hcnlDYXRlZ29yeX1dOmAsIHtcbiAgICAgICAgICAgICAgaWQ6IGxlYWZJZCxcbiAgICAgICAgICAgICAgY29tcGxldGlvblN0YXR1czogbGVhZkRhdGEuY29tcGxldGlvblN0YXR1cyxcbiAgICAgICAgICAgICAgc3RhdHVzOiBsZWFmRGF0YS5zdGF0dXMsXG4gICAgICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBsZWFmRGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IGxlYWZEYXRhLnByb2dyZXNzLFxuICAgICAgICAgICAgICBpc0NvbXBsZXRlOiBpc0NvbXBsZXRlID8gJ+KchScgOiAn4p2MJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgICR7aSArIDF9LiDimqDvuI8gTGVhZiBub2RlICR7bGVhZklkfSBOT1QgRk9VTkQgaW4gaGFzaG1hcGApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgIOKaoO+4jyBObyBsZWFmIG5vZGVzIGRlZmluZWQgZm9yIHRoaXMgbWlsZXN0b25lYClcbiAgICAgIH1cbiAgICB9KVxuICAgIFxuICAgIC8vIFNURVAgNTogQ29tcHV0ZSBwYXJlbnQgbWlsZXN0b25lIGxvY2sgc3RhdHVzIGZvciBBTEwgY2hpbGRyZW5cbiAgICBjb25zb2xlLmxvZygnXFxu8J+UlyBDb21wdXRpbmcgcGFyZW50IG1pbGVzdG9uZSBsb2NrcyBmb3IgYWxsIGNoaWxkcmVuLi4uJylcbiAgICBPYmplY3Qua2V5cyh0aGlzLmhhc2htYXApLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmhhc2htYXBba2V5XVxuICAgICAgaWYgKGl0ZW0uaXNNaWxlc3RvbmUpIHJldHVybiAvLyBTa2lwIG1pbGVzdG9uZXMgdGhlbXNlbHZlc1xuXG4gICAgICAvLyBUcmF2ZXJzZSB1cCB0byBmaW5kIGlmIGFueSBhbmNlc3RvciBtaWxlc3RvbmUgaXMgbG9ja2VkXG4gICAgICBsZXQgY3VycmVudFBhcmVudElkID0gaXRlbS5wYXJlbnRcbiAgICAgIGxldCBkZXB0aCA9IDBcbiAgICAgIGNvbnN0IG1heERlcHRoID0gNVxuICAgICAgbGV0IGZvdW5kTG9ja2VkUGFyZW50ID0gZmFsc2VcblxuICAgICAgd2hpbGUgKGN1cnJlbnRQYXJlbnRJZCAmJiBkZXB0aCA8IG1heERlcHRoKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudERhdGEgPSB0aGlzLmhhc2htYXBbY3VycmVudFBhcmVudElkXVxuICAgICAgICBpZiAocGFyZW50RGF0YSkge1xuICAgICAgICAgIGlmIChwYXJlbnREYXRhLmlzTWlsZXN0b25lICYmIHBhcmVudERhdGEuY29tcHV0ZWRJc0xvY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5oYXNobWFwW2tleV0uaXNQYXJlbnRNaWxlc3RvbmVMb2NrZWQgPSB0cnVlXG4gICAgICAgICAgICBmb3VuZExvY2tlZFBhcmVudCA9IHRydWVcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRQYXJlbnRJZCA9IHBhcmVudERhdGEucGFyZW50XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBkZXB0aCsrXG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICghZm91bmRMb2NrZWRQYXJlbnQpIHtcbiAgICAgICAgdGhpcy5oYXNobWFwW2tleV0uaXNQYXJlbnRNaWxlc3RvbmVMb2NrZWQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBTVEVQIDY6IFRyaWdnZXIgaGFzaG1hcCB1cGRhdGVcbiAgICBjb25zb2xlLmxvZygn4pyFIE1pbGVzdG9uZSBsb2NraW5nIGNvbXB1dGF0aW9uIENPTVBMRVRFJylcbiAgICBcbiAgICAvLyBEZWJ1ZzogTG9nIGZpbmFsIGxvY2sgc3RhdHVzIGZvciBhbGwgbWlsZXN0b25lc1xuICAgIGNvbnN0IG1pbGVzdG9uZXNGaW5hbCA9IE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcCkuZmlsdGVyKGtleSA9PiBcbiAgICAgIHRoaXMuaGFzaG1hcFtrZXldLmlzTWlsZXN0b25lIHx8IFxuICAgICAgdGhpcy5oYXNobWFwW2tleV0ucHJpbWFyeUNhdGVnb3J5ID09PSAnTWlsZXN0b25lJyB8fCBcbiAgICAgIHRoaXMuaGFzaG1hcFtrZXldLmNvdXJzZUNhdGVnb3J5ID09PSAnTWlsZXN0b25lJ1xuICAgIClcbiAgICBjb25zb2xlLmxvZygn8J+TiiBbRklOQUwgTE9DSyBTVEFUVVNdIEFsbCBtaWxlc3RvbmVzOicpXG4gICAgbWlsZXN0b25lc0ZpbmFsLmZvckVhY2goKGlkLCBpKSA9PiB7XG4gICAgICBjb25zdCBtID0gdGhpcy5oYXNobWFwW2lkXVxuICAgICAgY29uc29sZS5sb2coYCAgICR7aSArIDF9LiAke20ubmFtZX06IGNvbXB1dGVkSXNMb2NrZWQ9JHttLmNvbXB1dGVkSXNMb2NrZWR9LCB1bmxvY2tNZXNzYWdlPVwiJHttLnVubG9ja01lc3NhZ2UgfHwgJ04vQSd9XCJgKVxuICAgIH0pXG4gICAgXG4gICAgdGhpcy5oYXNobWFwID0geyAuLi50aGlzLmhhc2htYXAgfVxuICAgIGNvbnNvbGUubG9nKCfwn5OhIFtTRVJWSUNFXSBCcm9hZGNhc3RpbmcgaGFzaG1hcCB1cGRhdGUgd2l0aCBjb21wdXRlZElzTG9ja2VkIHZhbHVlcycpXG4gICAgdGhpcy5oYXNobWFwVXBkYXRlZC5uZXh0KHsgdGltZXN0YW1wOiBEYXRlLm5vdygpLCBoYXNobWFwOiB0aGlzLmhhc2htYXAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIG1pbGVzdG9uZSBsb2NrIHVwZGF0ZSB3aGVuIGhhc2htYXAgcHJvZ3Jlc3MgaXMgdXBkYXRlZCBleHRlcm5hbGx5XG4gICAqIENhbGxlZCBmcm9tIHZpZXdlci11dGlsLnNlcnZpY2UudHMgYWZ0ZXIgcHJvZ3Jlc3MgdXBkYXRlc1xuICAgKi9cbiAgcHVibGljIHRyaWdnZXJNaWxlc3RvbmVMb2NrVXBkYXRlKCkge1xuICAgIGNvbnNvbGUubG9nKCfwn5SUIFtUUklHR0VSXSB0cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSBjYWxsZWQnKVxuICAgIFxuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBMZWFybmluZyBQYXRod2F5IGluIHRoZSBoYXNobWFwXG4gICAgY29uc3QgaGFzTGVhcm5pbmdQYXRod2F5ID0gT2JqZWN0LmtleXModGhpcy5oYXNobWFwKS5zb21lKGtleSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5oYXNobWFwW2tleV1cbiAgICAgIC8vIENoZWNrIHVzaW5nIE9SIGNvbmRpdGlvbiAtIGVpdGhlciBmbGFnIGluZGljYXRlcyBMZWFybmluZyBQYXRod2F5XG4gICAgICByZXR1cm4gaXRlbS5pc0xlYXJuaW5nUGF0aHdheSA9PT0gdHJ1ZSB8fCBpdGVtLmNvdXJzZUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUGF0aHdheSdcbiAgICB9KVxuICAgIFxuICAgIGNvbnNvbGUubG9nKGAgICBJcyBMZWFybmluZyBQYXRod2F5OiAke2hhc0xlYXJuaW5nUGF0aHdheX1gKVxuICAgIFxuICAgIGlmIChoYXNMZWFybmluZ1BhdGh3YXkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SEIFtUUklHR0VSXSBUcmlnZ2VyaW5nIG1pbGVzdG9uZSBsb2NrIHJlY29tcHV0YXRpb24gYWZ0ZXIgcHJvZ3Jlc3MgdXBkYXRlJylcbiAgICAgIC8vIEFzc3VtZSBlbnJvbGxlZCBzaW5jZSBwcm9ncmVzcyB3YXMganVzdCB1cGRhdGVkXG4gICAgICB0aGlzLmNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzKHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SEIFtUUklHR0VSXSBSZWd1bGFyIGNvbnRlbnQgLSBlbWl0dGluZyBoYXNobWFwIHVwZGF0ZSBmb3IgdG9wLWJhciByZWZyZXNoJylcbiAgICAgIC8vIEZvciByZWd1bGFyIGNvbnRlbnQgKG5vbi1MZWFybmluZyBQYXRod2F5KSwganVzdCBlbWl0IHRoZSBoYXNobWFwIHVwZGF0ZVxuICAgICAgLy8gc28gdGhlIHRvcC1iYXIgY29tcG9uZW50IGNhbiByZWNhbGN1bGF0ZSB0aGUgY29tcGxldGlvbiBjb3VudFxuICAgICAgdGhpcy5oYXNobWFwID0geyAuLi50aGlzLmhhc2htYXAgfVxuICAgICAgY29uc29sZS5sb2coJ/Cfk6EgW1RSSUdHRVJdIEJyb2FkY2FzdGluZyBoYXNobWFwIHVwZGF0ZSBldmVudCcpXG4gICAgICB0aGlzLmhhc2htYXBVcGRhdGVkLm5leHQoeyB0aW1lc3RhbXA6IERhdGUubm93KCksIGhhc2htYXA6IHRoaXMuaGFzaG1hcCB9KVxuICAgICAgY29uc29sZS5sb2coJ+KchSBbVFJJR0dFUl0gSGFzaG1hcCB1cGRhdGUgYnJvYWRjYXN0ZWQnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwcmUtYXNzZXNzbWVudCAocHJlbGltaW5hcnkgYXNzZXNzbWVudCkgaXMgY29tcGxldGVkXG4gICAqIFByZS1hc3Nlc3NtZW50IGlzIHR5cGljYWxseSBhIENvdXJzZSBBc3Nlc3NtZW50IGF0IHRoZSByb290IGxldmVsIG9mIExlYXJuaW5nIFBhdGh3YXkgKGJlZm9yZSBtaWxlc3RvbmVzKVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1ByZUFzc2Vzc21lbnRDb21wbGV0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnNvbGUubG9nKCfwn5SNIFtQUkUtQVNTRVNTTUVOVF0gU3RhcnRpbmcgcHJlLWFzc2Vzc21lbnQgY29tcGxldGlvbiBjaGVjaycpXG4gICAgY29uc29sZS5sb2coJ/CflI0gW1BSRS1BU1NFU1NNRU5UXSBIYXNobWFwIGtleXM6JywgT2JqZWN0LmtleXModGhpcy5oYXNobWFwKS5sZW5ndGgpXG4gICAgXG4gICAgLy8gRmluZCB0aGUgTGVhcm5pbmcgUGF0aHdheSByb290IC0gY2hlY2sgbXVsdGlwbGUgY29uZGl0aW9uc1xuICAgIGxldCBsZWFybmluZ1BhdGh3YXlJZDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmhhc2htYXApKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5oYXNobWFwW2tleV1cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgdGhlIExlYXJuaW5nIFBhdGh3YXkgcm9vdCBieSBhbnkgb2YgdGhlc2UgY29uZGl0aW9uc1xuICAgICAgaWYgKGl0ZW0uY291cnNlQ2F0ZWdvcnkgPT09ICdMZWFybmluZyBQYXRod2F5JyB8fCBcbiAgICAgICAgICBpdGVtLmlzTGVhcm5pbmdQYXRod2F5ID09PSB0cnVlIHx8XG4gICAgICAgICAgKGl0ZW0ucHJpbWFyeUNhdGVnb3J5ID09PSAnQmxlbmRlZCBQcm9ncmFtJyAmJiBpdGVtLmNvdXJzZUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUGF0aHdheScpKSB7XG4gICAgICAgIGxlYXJuaW5nUGF0aHdheUlkID0ga2V5XG4gICAgICAgIGNvbnNvbGUubG9nKCfwn5SNIFtQUkUtQVNTRVNTTUVOVF0gRm91bmQgTGVhcm5pbmcgUGF0aHdheSByb290OicsIGtleSwgaXRlbS5uYW1lKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbGVhcm5pbmdQYXRod2F5SWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCfimqDvuI8gW1BSRS1BU1NFU1NNRU5UXSBMZWFybmluZyBQYXRod2F5IHJvb3QgTk9UIEZPVU5EIC0gcmV0dXJuaW5nIGZhbHNlIHRvIGtlZXAgbWlsZXN0b25lcyBsb2NrZWQnKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gU3RlcCAxOiBMb29rIGZvciBpdGVtcyBleHBsaWNpdGx5IG1hcmtlZCBhcyBwcmUtYXNzZXNzbWVudCAoaXNQcmVBc3Nlc3NtZW50IGZsYWcpXG4gICAgY29uc29sZS5sb2coJ/CflI0gW1BSRS1BU1NFU1NNRU5UXSBTdGVwIDE6IExvb2tpbmcgZm9yIGl0ZW1zIHdpdGggaXNQcmVBc3Nlc3NtZW50PXRydWUgZmxhZy4uLicpXG4gICAgY29uc29sZS5sb2coJ/CflI0gW1BSRS1BU1NFU1NNRU5UXSBEdW1waW5nIGFsbCBoYXNobWFwIGl0ZW1zIGZvciBkZWJ1Z2dpbmc6JylcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmhhc2htYXApKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5oYXNobWFwW2tleV1cbiAgICAgIGlmIChpdGVtLmlzUHJlQXNzZXNzbWVudCB8fCBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ0NvdXJzZSBBc3Nlc3NtZW50JyB8fCBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ1N0YW5kYWxvbmUgQXNzZXNzbWVudCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgIPCfk4QgJHtrZXl9OiBpc1ByZUFzc2Vzc21lbnQ9JHtpdGVtLmlzUHJlQXNzZXNzbWVudH0sIHByaW1hcnlDYXRlZ29yeT0ke2l0ZW0ucHJpbWFyeUNhdGVnb3J5fSwgcGFyZW50PSR7aXRlbS5wYXJlbnR9LCBjb21wbGV0aW9uU3RhdHVzPSR7aXRlbS5jb21wbGV0aW9uU3RhdHVzfSwgc3RhdHVzPSR7aXRlbS5zdGF0dXN9LCBjb21wbGV0aW9uUGVyY2VudGFnZT0ke2l0ZW0uY29tcGxldGlvblBlcmNlbnRhZ2V9YClcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgbGV0IGZvdW5kUHJlQXNzZXNzbWVudEZsYWcgPSBmYWxzZVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcCkpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmhhc2htYXBba2V5XVxuICAgICAgaWYgKGl0ZW0uaXNQcmVBc3Nlc3NtZW50ID09PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kUHJlQXNzZXNzbWVudEZsYWcgPSB0cnVlXG4gICAgICAgIGNvbnNvbGUubG9nKCfwn5SNIFtQUkUtQVNTRVNTTUVOVF0gRm91bmQgaXRlbSB3aXRoIGlzUHJlQXNzZXNzbWVudD10cnVlOicsIHtcbiAgICAgICAgICBpZDoga2V5LFxuICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICBjb21wbGV0aW9uU3RhdHVzOiBpdGVtLmNvbXBsZXRpb25TdGF0dXMsXG4gICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcbiAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogaXRlbS5jb21wbGV0aW9uUGVyY2VudGFnZSxcbiAgICAgICAgICBwcm9ncmVzczogaXRlbS5wcm9ncmVzc1xuICAgICAgICB9KVxuICAgICAgICAvLyBTVFJJQ1QgQ0hFQ0s6IE9ubHkgcmV0dXJuIHRydWUgaWYgY29tcGxldGlvblN0YXR1cyBpcyBFWEFDVExZIDIgKG5vdCB1bmRlZmluZWQsIG51bGwsIG9yIDApXG4gICAgICAgIC8vIGNvbXBsZXRpb25QZXJjZW50YWdlIGNoZWNrIG11c3QgYmUgPj0gMTAwIEFORCBiZSBhIG51bWJlclxuICAgICAgICBjb25zdCBjb21wbGV0aW9uU3RhdHVzID0gTnVtYmVyKGl0ZW0uY29tcGxldGlvblN0YXR1cylcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gTnVtYmVyKGl0ZW0uc3RhdHVzKVxuICAgICAgICBjb25zdCBjb21wbGV0aW9uUGVyY2VudGFnZSA9IE51bWJlcihpdGVtLmNvbXBsZXRpb25QZXJjZW50YWdlKVxuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE51bWJlcihpdGVtLnByb2dyZXNzKVxuICAgICAgICBcbiAgICAgICAgY29uc3QgaXNDb21wbGV0ZWQgPSAoY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBzdGF0dXMgPT09IDIgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCAmJiAhaXNOYU4oY29tcGxldGlvblBlcmNlbnRhZ2UpKSB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ3Jlc3MgPj0gMTAwICYmICFpc05hTihwcm9ncmVzcykpKVxuICAgICAgICBjb25zb2xlLmxvZygn8J+UjSBbUFJFLUFTU0VTU01FTlRdIFByZS1hc3Nlc3NtZW50IGNvbXBsZXRpb24gcmVzdWx0OicsIGlzQ29tcGxldGVkID8gJ+KchSBDT01QTEVURUQnIDogJ+KdjCBOT1QgQ09NUExFVEVEJywge1xuICAgICAgICAgIGNvbXBsZXRpb25TdGF0dXNDaGVjazogY29tcGxldGlvblN0YXR1cyA9PT0gMixcbiAgICAgICAgICBzdGF0dXNDaGVjazogc3RhdHVzID09PSAyLFxuICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlQ2hlY2s6IGNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCxcbiAgICAgICAgICBwcm9ncmVzc0NoZWNrOiBwcm9ncmVzcyA+PSAxMDBcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIGlzQ29tcGxldGVkXG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmICghZm91bmRQcmVBc3Nlc3NtZW50RmxhZykge1xuICAgICAgY29uc29sZS5sb2coJ+KaoO+4jyBbUFJFLUFTU0VTU01FTlRdIE5vIGl0ZW0gd2l0aCBpc1ByZUFzc2Vzc21lbnQ9dHJ1ZSBmb3VuZCBpbiBoYXNobWFwJylcbiAgICB9XG5cbiAgICAvLyBTdGVwIDI6IEZhbGxiYWNrIC0gTG9vayBmb3IgQ291cnNlIEFzc2Vzc21lbnQgdGhhdCBpcyBhIGRpcmVjdCBjaGlsZCBvZiBMZWFybmluZyBQYXRod2F5IChub3QgYSBtaWxlc3RvbmUgY2hpbGQpXG4gICAgY29uc29sZS5sb2coJ/CflI0gW1BSRS1BU1NFU1NNRU5UXSBTdGVwIDI6IExvb2tpbmcgZm9yIENvdXJzZSBBc3Nlc3NtZW50IGRpcmVjdCBjaGlsZCBvZiBMZWFybmluZyBQYXRod2F5Li4uJylcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmhhc2htYXApKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5oYXNobWFwW2tleV1cbiAgICAgIC8vIE11c3QgYmUgYSBkaXJlY3QgY2hpbGQgb2YgdGhlIExlYXJuaW5nIFBhdGh3YXlcbiAgICAgIGlmIChpdGVtLnBhcmVudCAhPT0gbGVhcm5pbmdQYXRod2F5SWQpIGNvbnRpbnVlXG4gICAgICAvLyBTa2lwIG1pbGVzdG9uZXNcbiAgICAgIGlmIChpdGVtLmlzTWlsZXN0b25lIHx8IGl0ZW0ucHJpbWFyeUNhdGVnb3J5ID09PSAnTWlsZXN0b25lJyB8fCBpdGVtLmNvdXJzZUNhdGVnb3J5ID09PSAnTWlsZXN0b25lJykgY29udGludWVcbiAgICAgIC8vIE11c3QgYmUgYSBDb3Vyc2UgQXNzZXNzbWVudCBvciBTdGFuZGFsb25lIEFzc2Vzc21lbnRcbiAgICAgIGlmIChpdGVtLnByaW1hcnlDYXRlZ29yeSAhPT0gJ0NvdXJzZSBBc3Nlc3NtZW50JyAmJiBpdGVtLnByaW1hcnlDYXRlZ29yeSAhPT0gJ1N0YW5kYWxvbmUgQXNzZXNzbWVudCcpIGNvbnRpbnVlXG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SNIFtQUkUtQVNTRVNTTUVOVF0gRm91bmQgQ291cnNlIEFzc2Vzc21lbnQgY2hpbGQgb2YgTGVhcm5pbmcgUGF0aHdheTonLCB7XG4gICAgICAgIGlkOiBrZXksXG4gICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgcHJpbWFyeUNhdGVnb3J5OiBpdGVtLnByaW1hcnlDYXRlZ29yeSxcbiAgICAgICAgY29tcGxldGlvblN0YXR1czogaXRlbS5jb21wbGV0aW9uU3RhdHVzLFxuICAgICAgICBzdGF0dXM6IGl0ZW0uc3RhdHVzLFxuICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogaXRlbS5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgfSlcbiAgICAgIFxuICAgICAgLy8gU1RSSUNUIENIRUNLOiBPbmx5IHJldHVybiB0cnVlIGlmIGNvbXBsZXRpb25TdGF0dXMgaXMgRVhBQ1RMWSAyXG4gICAgICBjb25zdCBjb21wbGV0aW9uU3RhdHVzID0gTnVtYmVyKGl0ZW0uY29tcGxldGlvblN0YXR1cylcbiAgICAgIGNvbnN0IHN0YXR1cyA9IE51bWJlcihpdGVtLnN0YXR1cylcbiAgICAgIGNvbnN0IGNvbXBsZXRpb25QZXJjZW50YWdlID0gTnVtYmVyKGl0ZW0uY29tcGxldGlvblBlcmNlbnRhZ2UpXG4gICAgICBjb25zdCBwcm9ncmVzcyA9IE51bWJlcihpdGVtLnByb2dyZXNzKVxuICAgICAgXG4gICAgICBjb25zdCBpc0NvbXBsZXRlZCA9IChjb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IHN0YXR1cyA9PT0gMiB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCAmJiAhaXNOYU4oY29tcGxldGlvblBlcmNlbnRhZ2UpKSB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2dyZXNzID49IDEwMCAmJiAhaXNOYU4ocHJvZ3Jlc3MpKSlcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SNIFtQUkUtQVNTRVNTTUVOVF0gQ291cnNlIEFzc2Vzc21lbnQgY29tcGxldGlvbiByZXN1bHQ6JywgaXNDb21wbGV0ZWQgPyAn4pyFIENPTVBMRVRFRCcgOiAn4p2MIE5PVCBDT01QTEVURUQnLCB7XG4gICAgICAgIGNvbXBsZXRpb25TdGF0dXNDaGVjazogY29tcGxldGlvblN0YXR1cyA9PT0gMixcbiAgICAgICAgc3RhdHVzQ2hlY2s6IHN0YXR1cyA9PT0gMixcbiAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2VDaGVjazogY29tcGxldGlvblBlcmNlbnRhZ2UgPj0gMTAwLFxuICAgICAgICBwcm9ncmVzc0NoZWNrOiBwcm9ncmVzcyA+PSAxMDBcbiAgICAgIH0pXG4gICAgICByZXR1cm4gaXNDb21wbGV0ZWRcbiAgICB9XG5cbiAgICAvLyBTdGVwIDM6IElmIG5vIHByZS1hc3Nlc3NtZW50IGZvdW5kIGF0IGFsbCwga2VlcCBtaWxlc3RvbmVzIExPQ0tFRCAoZmFpbC1zYWZlKVxuICAgIGNvbnNvbGUubG9nKCfimqDvuI8gW1BSRS1BU1NFU1NNRU5UXSBObyBwcmUtYXNzZXNzbWVudCBmb3VuZCBpbiBoYXNobWFwIC0gcmV0dXJuaW5nIEZBTFNFIHRvIGtlZXAgbWlsZXN0b25lcyBMT0NLRUQnKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbWlsZXN0b25lJ3MgYXNzZXNzbWVudCBpcyBjb21wbGV0ZWRcbiAgICogT05MWSBjaGVja3MgdGhlIG1pbGVzdG9uZSBhc3Nlc3NtZW50IChDb3Vyc2UgQXNzZXNzbWVudCB0aGF0IGlzIGEgZGlyZWN0IGNoaWxkIG9mIHRoZSBtaWxlc3RvbmUpXG4gICAqIERvZXMgTk9UIGNoZWNrIGFzc2Vzc21lbnRzIG5lc3RlZCBpbnNpZGUgY291cnNlcyB3aXRoaW4gdGhlIG1pbGVzdG9uZVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja01pbGVzdG9uZUFzc2Vzc21lbnRDb21wbGV0ZShtaWxlc3RvbmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWlsZXN0b25lID0gdGhpcy5oYXNobWFwW21pbGVzdG9uZUlkXVxuICAgIFxuICAgIGxldCBmb3VuZE1pbGVzdG9uZUFzc2Vzc21lbnQgPSBmYWxzZVxuICAgIGxldCBpc01pbGVzdG9uZUFzc2Vzc21lbnRDb21wbGV0ZSA9IGZhbHNlXG5cbiAgICBjb25zb2xlLmxvZyhg8J+UjSBDaGVja2luZyBtaWxlc3RvbmUgYXNzZXNzbWVudCBmb3I6ICR7bWlsZXN0b25lSWR9YClcblxuICAgIC8vIENoZWNrIGFsbCBpdGVtcyBpbiBoYXNobWFwIHRoYXQgYXJlIERJUkVDVCBjaGlsZHJlbiBvZiB0aGlzIG1pbGVzdG9uZVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuaGFzaG1hcCkpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmhhc2htYXBba2V5XVxuXG4gICAgICAvLyBDUklUSUNBTDogT25seSBjaGVjayBESVJFQ1QgY2hpbGRyZW4gKHBhcmVudCA9PT0gbWlsZXN0b25lSWQpXG4gICAgICBpZiAoaXRlbS5wYXJlbnQgIT09IG1pbGVzdG9uZUlkKSBjb250aW51ZVxuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgbWlsZXN0b25lIGFzc2Vzc21lbnQgKENvdXJzZSBBc3Nlc3NtZW50IGFzIGRpcmVjdCBjaGlsZCBvZiBtaWxlc3RvbmUpXG4gICAgICBjb25zdCBpc01pbGVzdG9uZUFzc2Vzc21lbnQgPVxuICAgICAgICBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ0NvdXJzZSBBc3Nlc3NtZW50JyB8fFxuICAgICAgICBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ0ZpbmFsIEFzc2Vzc21lbnQnIHx8XG4gICAgICAgIGl0ZW0ucHJpbWFyeUNhdGVnb3J5ID09PSAnU3RhbmRhbG9uZSBBc3Nlc3NtZW50J1xuXG4gICAgICBpZiAoIWlzTWlsZXN0b25lQXNzZXNzbWVudCkgY29udGludWVcblxuICAgICAgLy8gRm91bmQgdGhlIG1pbGVzdG9uZSBhc3Nlc3NtZW50XG4gICAgICBmb3VuZE1pbGVzdG9uZUFzc2Vzc21lbnQgPSB0cnVlXG4gICAgICBjb25zdCBpc0NvbXBsZXRlZCA9IGl0ZW0uY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBpdGVtLnN0YXR1cyA9PT0gMiB8fCBpdGVtLmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCB8fCBpdGVtLnByb2dyZXNzID49IDEwMFxuICAgICAgXG4gICAgICBjb25zb2xlLmxvZyhg8J+TiyBGb3VuZCBtaWxlc3RvbmUgYXNzZXNzbWVudCAoZGlyZWN0IGNoaWxkKTogJHtpdGVtLm5hbWUgfHwga2V5fWAsIHtcbiAgICAgICAgbWlsZXN0b25lSWQsXG4gICAgICAgIGFzc2Vzc21lbnRJZDoga2V5LFxuICAgICAgICBjb21wbGV0aW9uU3RhdHVzOiBpdGVtLmNvbXBsZXRpb25TdGF0dXMsXG4gICAgICAgIHN0YXR1czogaXRlbS5zdGF0dXMsXG4gICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBpdGVtLmNvbXBsZXRpb25QZXJjZW50YWdlLFxuICAgICAgICBpc0NvbXBsZXRlZFxuICAgICAgfSlcbiAgICAgIFxuICAgICAgaWYgKGlzQ29tcGxldGVkKSB7XG4gICAgICAgIGlzTWlsZXN0b25lQXNzZXNzbWVudENvbXBsZXRlID0gdHJ1ZVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVc3VhbGx5IG9ubHkgb25lIG1pbGVzdG9uZSBhc3Nlc3NtZW50IHBlciBtaWxlc3RvbmUsIGJ1dCBjaGVjayBhbGwganVzdCBpbiBjYXNlXG4gICAgfVxuXG4gICAgLy8gQ1JJVElDQUwgTE9HSUM6XG4gICAgLy8gLSBJZiBOTyBtaWxlc3RvbmUgYXNzZXNzbWVudCBmb3VuZCDihpIgY29uc2lkZXIgY29tcGxldGUgKG5vIGFzc2Vzc21lbnQgcmVxdWlyZW1lbnQpXG4gICAgLy8gLSBJZiBtaWxlc3RvbmUgYXNzZXNzbWVudCBmb3VuZCDihpIgaXQgbXVzdCBiZSBjb21wbGV0ZWRcbiAgICBpZiAoIWZvdW5kTWlsZXN0b25lQXNzZXNzbWVudCkge1xuICAgICAgY29uc29sZS5sb2coYOKEue+4jyBObyBtaWxlc3RvbmUgYXNzZXNzbWVudCAoZGlyZWN0IGNoaWxkKSBmb3VuZCBmb3IgJHttaWxlc3RvbmVJZH0gLSBjb25zaWRlcmluZyBhcyBjb21wbGV0ZWApXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBcbiAgICBjb25zb2xlLmxvZyhgJHtpc01pbGVzdG9uZUFzc2Vzc21lbnRDb21wbGV0ZSA/ICfinIUnIDogJ+KdjCd9IE1pbGVzdG9uZSAke21pbGVzdG9uZUlkfSBhc3Nlc3NtZW50OiAke2lzTWlsZXN0b25lQXNzZXNzbWVudENvbXBsZXRlID8gJ0NPTVBMRVRFJyA6ICdJTkNPTVBMRVRFJ31gKVxuICAgIHJldHVybiBpc01pbGVzdG9uZUFzc2Vzc21lbnRDb21wbGV0ZVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbWlsZXN0b25lJ3MgbWFuZGF0b3J5IGNvbnRlbnQgaXMgY29tcGxldGVkXG4gICAqIE9ubHkgY2hlY2tzIGNvdXJzZXMvY29udGVudCB0aGF0IGFyZSBtYXJrZWQgYXMgaXNNYW5kYXRvcnlcbiAgICovXG4gIHByaXZhdGUgY2hlY2tNaWxlc3RvbmVNYW5kYXRvcnlDb250ZW50Q29tcGxldGUobWlsZXN0b25lSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1pbGVzdG9uZSA9IHRoaXMuaGFzaG1hcFttaWxlc3RvbmVJZF1cblxuICAgIGxldCBtYW5kYXRvcnlDb3VudCA9IDBcbiAgICBsZXQgY29tcGxldGVkTWFuZGF0b3J5Q291bnQgPSAwXG5cbiAgICBjb25zb2xlLmxvZyhg8J+UjSBDaGVja2luZyBtYW5kYXRvcnkgY29udGVudCBmb3IgbWlsZXN0b25lOiAke21pbGVzdG9uZUlkfWApXG5cbiAgICAvLyBDaGVjayBhbGwgaXRlbXMgaW4gaGFzaG1hcCB0aGF0IGFyZSBkaXJlY3QgY2hpbGRyZW4gb2YgdGhpcyBtaWxlc3RvbmUgKGNvdXJzZXMpXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5oYXNobWFwKSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaGFzaG1hcFtrZXldXG5cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXRlbSBpcyBhIGRpcmVjdCBjaGlsZCBvZiB0aGUgbWlsZXN0b25lIChjb3Vyc2UgbGV2ZWwpXG4gICAgICBpZiAoaXRlbS5wYXJlbnQgIT09IG1pbGVzdG9uZUlkKSBjb250aW51ZVxuXG4gICAgICAvLyBTa2lwIGlmIG5vdCBhIGNvdXJzZSBvciBjb2xsZWN0aW9uXG4gICAgICBpZiAoaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgIT09ICdDb3Vyc2UnICYmICFpdGVtLmlzQ29sbGVjdGlvbikgY29udGludWVcblxuICAgICAgLy8gU2tpcCBhc3Nlc3NtZW50cyAtIHRoZXkncmUgY2hlY2tlZCBzZXBhcmF0ZWx5XG4gICAgICBjb25zdCBpc0Fzc2Vzc21lbnQgPVxuICAgICAgICBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ0NvdXJzZSBBc3Nlc3NtZW50JyB8fFxuICAgICAgICBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ0ZpbmFsIEFzc2Vzc21lbnQnIHx8XG4gICAgICAgIGl0ZW0ucHJpbWFyeUNhdGVnb3J5ID09PSAnU3RhbmRhbG9uZSBBc3Nlc3NtZW50JyB8fFxuICAgICAgICBpdGVtLmNvdXJzZUNhdGVnb3J5ID09PSAnQ291cnNlIEFzc2Vzc21lbnQnIHx8XG4gICAgICAgIChpdGVtLm5hbWUgJiYgaXRlbS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Fzc2Vzc21lbnQnKSlcbiAgICAgIGlmIChpc0Fzc2Vzc21lbnQpIGNvbnRpbnVlXG5cbiAgICAgIC8vIENSSVRJQ0FMOiBDaGVjayBpZiB0aGlzIGNvbnRlbnQgaXMgbWFuZGF0b3J5XG4gICAgICAvLyBCeSBkZWZhdWx0LCBjb3Vyc2VzIEFSRSBtYW5kYXRvcnkgdW5sZXNzIGV4cGxpY2l0bHkgbWFya2VkIGFzIG9wdGlvbmFsIChpc01hbmRhdG9yeTogZmFsc2UpXG4gICAgICBjb25zdCBpc01hbmRhdG9yeSA9IGl0ZW0uaXNNYW5kYXRvcnkgIT09IGZhbHNlXG4gICAgICBcbiAgICAgIGlmIChpc01hbmRhdG9yeSkge1xuICAgICAgICBtYW5kYXRvcnlDb3VudCsrXG4gICAgICAgIGNvbnN0IGlzQ29tcGxldGVkID0gaXRlbS5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IGl0ZW0uc3RhdHVzID09PSAyIHx8IGl0ZW0uY29tcGxldGlvblBlcmNlbnRhZ2UgPj0gMTAwIHx8IGl0ZW0ucHJvZ3Jlc3MgPj0gMTAwXG4gICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZyhgICAg8J+TnSBNYW5kYXRvcnkgaXRlbTogJHtpdGVtLm5hbWUgfHwga2V5fWAsIHtcbiAgICAgICAgICBpc01hbmRhdG9yeTogaXRlbS5pc01hbmRhdG9yeSxcbiAgICAgICAgICBjb21wbGV0aW9uU3RhdHVzOiBpdGVtLmNvbXBsZXRpb25TdGF0dXMsXG4gICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcbiAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogaXRlbS5jb21wbGV0aW9uUGVyY2VudGFnZSxcbiAgICAgICAgICBwcm9ncmVzczogaXRlbS5wcm9ncmVzcyxcbiAgICAgICAgICBpc0NvbXBsZXRlZCxcbiAgICAgICAgICBoYXNDb21wbGV0aW9uU3RhdHVzOiBpdGVtLmNvbXBsZXRpb25TdGF0dXMgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICBoYXNTdGF0dXM6IGl0ZW0uc3RhdHVzICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgaGFzQ29tcGxldGlvblBlcmNlbnRhZ2U6IGl0ZW0uY29tcGxldGlvblBlcmNlbnRhZ2UgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICBoYXNQcm9ncmVzczogaXRlbS5wcm9ncmVzcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICBpZiAoaXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICBjb21wbGV0ZWRNYW5kYXRvcnlDb3VudCsrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDb21wbGV0ZSA9IG1hbmRhdG9yeUNvdW50ID09PSAwIHx8IGNvbXBsZXRlZE1hbmRhdG9yeUNvdW50ID49IG1hbmRhdG9yeUNvdW50XG4gICAgY29uc29sZS5sb2coYPCfk4ogTWlsZXN0b25lICR7bWlsZXN0b25lSWR9IG1hbmRhdG9yeSBzdGF0dXM6ICR7Y29tcGxldGVkTWFuZGF0b3J5Q291bnR9LyR7bWFuZGF0b3J5Q291bnR9IGNvbXBsZXRlID0gJHthbGxDb21wbGV0ZSA/ICfinIUgQUxMIENPTVBMRVRFJyA6ICfinYwgSU5DT01QTEVURSd9YClcbiAgICByZXR1cm4gYWxsQ29tcGxldGVcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGNvbnRlbnQgaXRlbSBpcyBhIGNoaWxkIChkaXJlY3Qgb3IgbmVzdGVkKSBvZiBhIG1pbGVzdG9uZVxuICAgKi9cbiAgcHJpdmF0ZSBpc0NoaWxkT2ZNaWxlc3RvbmUoY29udGVudElkOiBzdHJpbmcsIG1pbGVzdG9uZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgY3VycmVudElkID0gY29udGVudElkXG4gICAgbGV0IGRlcHRoID0gMFxuICAgIGNvbnN0IG1heERlcHRoID0gMTBcblxuICAgIHdoaWxlIChjdXJyZW50SWQgJiYgZGVwdGggPCBtYXhEZXB0aCkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaGFzaG1hcFtjdXJyZW50SWRdXG4gICAgICBpZiAoIWl0ZW0pIHJldHVybiBmYWxzZVxuICAgICAgaWYgKGl0ZW0ucGFyZW50ID09PSBtaWxlc3RvbmVJZCkgcmV0dXJuIHRydWVcbiAgICAgIGN1cnJlbnRJZCA9IGl0ZW0ucGFyZW50XG4gICAgICBkZXB0aCsrXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYXNzZXNzbWVudCBsb2NraW5nIHdpdGhpbiBhbiB1bmxvY2tlZCBtaWxlc3RvbmVcbiAgICogQXNzZXNzbWVudCBsb2NrcyB1bnRpbCBhbGwgbWFuZGF0b3J5IGNvdXJzZXMgaW4gdGhlIG1pbGVzdG9uZSBhcmUgY29tcGxldGVkXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVBc3Nlc3NtZW50TG9ja2luZ0luTWlsZXN0b25lKG1pbGVzdG9uZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBtaWxlc3RvbmUgPSB0aGlzLmhhc2htYXBbbWlsZXN0b25lSWRdXG4gICAgaWYgKCFtaWxlc3RvbmUpIHJldHVyblxuXG4gICAgY29uc29sZS5sb2coYENvbXB1dGluZyBhc3Nlc3NtZW50IGxvY2tpbmcgZm9yIG1pbGVzdG9uZTogJHttaWxlc3RvbmVJZH1gKVxuXG4gICAgLy8gRmluZCBhc3Nlc3NtZW50IGluIHRoaXMgbWlsZXN0b25lXG4gICAgbGV0IGFzc2Vzc21lbnRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgICBsZXQgYXNzZXNzbWVudDogYW55ID0gbnVsbFxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5oYXNobWFwKSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaGFzaG1hcFtrZXldXG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gYXNzZXNzbWVudCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBtaWxlc3RvbmVcbiAgICAgIC8vIE11c3QgaGF2ZSBCT1RIOiBjb3JyZWN0IGNhdGVnb3J5L21pbWVUeXBlIEFORCBwYXJlbnQgaXMgbWlsZXN0b25lXG4gICAgICBjb25zdCBpc0Fzc2Vzc21lbnQgPSAoXG4gICAgICAgIGl0ZW0ucHJpbWFyeUNhdGVnb3J5ID09PSAnQ291cnNlIEFzc2Vzc21lbnQnIHx8XG4gICAgICAgIGl0ZW0ucHJpbWFyeUNhdGVnb3J5ID09PSAnRmluYWwgQXNzZXNzbWVudCcgfHxcbiAgICAgICAgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdTdGFuZGFsb25lIEFzc2Vzc21lbnQnIHx8XG4gICAgICAgIGl0ZW0ubWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldCcgfHxcbiAgICAgICAgaXRlbS5taW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3F1aXonXG4gICAgICApICYmIGl0ZW0ucGFyZW50ID09PSBtaWxlc3RvbmVJZCAgLy8gTVVTVCBiZSBkaXJlY3QgY2hpbGQgb2YgbWlsZXN0b25lXG5cbiAgICAgIGlmIChpc0Fzc2Vzc21lbnQpIHtcbiAgICAgICAgYXNzZXNzbWVudElkID0ga2V5XG4gICAgICAgIGFzc2Vzc21lbnQgPSBpdGVtXG4gICAgICAgIGNvbnNvbGUubG9nKGDinIUgRm91bmQgbWlsZXN0b25lIGFzc2Vzc21lbnQ6ICR7aXRlbS5uYW1lfSAoJHtrZXl9KWApXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhc3Nlc3NtZW50SWQgfHwgIWFzc2Vzc21lbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBObyBhc3Nlc3NtZW50IGZvdW5kIGluIG1pbGVzdG9uZSAke21pbGVzdG9uZUlkfWApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBhc3Nlc3NtZW50IGlzIGFscmVhZHkgY29tcGxldGVkIC0gcmUtcmVhZCBmcm9tIGhhc2htYXAgdG8gZ2V0IGxhdGVzdCBkYXRhXG4gICAgY29uc3QgbGF0ZXN0QXNzZXNzbWVudCA9IHRoaXMuaGFzaG1hcFthc3Nlc3NtZW50SWRdXG4gICAgY29uc3QgYXNzZXNzbWVudENvbXBsZXRlZCA9IFxuICAgICAgbGF0ZXN0QXNzZXNzbWVudC5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IFxuICAgICAgbGF0ZXN0QXNzZXNzbWVudC5zdGF0dXMgPT09IDIgfHwgXG4gICAgICBsYXRlc3RBc3Nlc3NtZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMFxuXG4gICAgLy8gQWx3YXlzIGNoZWNrIGlmIGFsbCBtYW5kYXRvcnkgY291cnNlcyBhcmUgY29tcGxldGUsIGV2ZW4gaWYgYXNzZXNzbWVudCBpcyBub3QgY29tcGxldGVkXG4gICAgLy8gVGhpcyBlbnN1cmVzIGFzc2Vzc21lbnQgaXMgdW5sb2NrZWQgYXMgc29vbiBhcyBhbGwgbWFuZGF0b3J5IGNvdXJzZXMgYXJlIGRvbmVcbiAgICBsZXQgbWFuZGF0b3J5Q291bnQgPSAwXG4gICAgbGV0IGNvbXBsZXRlZE1hbmRhdG9yeUNvdW50ID0gMFxuICAgIFxuICAgIGNvbnNvbGUubG9nKGBbQVNTRVNTTUVOVCBMT0NLIENIRUNLXSBDaGVja2luZyBtYW5kYXRvcnkgY291cnNlcyBmb3IgbWlsZXN0b25lOiAke21pbGVzdG9uZUlkfWApXG4gICAgXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5oYXNobWFwKSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaGFzaG1hcFtrZXldXG4gICAgICBpZiAoa2V5ID09PSBhc3Nlc3NtZW50SWQpIGNvbnRpbnVlXG4gICAgICBcbiAgICAgIC8vIE9ubHkgY2hlY2sgRElSRUNUIGNoaWxkcmVuIG9mIHRoZSBtaWxlc3RvbmUgKGNvdXJzZXMpXG4gICAgICBpZiAoaXRlbS5wYXJlbnQgIT09IG1pbGVzdG9uZUlkKSBjb250aW51ZVxuICAgICAgXG4gICAgICAvLyBTa2lwIGFzc2Vzc21lbnRzXG4gICAgICBjb25zdCBpc0l0ZW1Bc3Nlc3NtZW50ID1cbiAgICAgICAgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdDb3Vyc2UgQXNzZXNzbWVudCcgfHxcbiAgICAgICAgaXRlbS5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdGaW5hbCBBc3Nlc3NtZW50JyB8fFxuICAgICAgICBpdGVtLnByaW1hcnlDYXRlZ29yeSA9PT0gJ1N0YW5kYWxvbmUgQXNzZXNzbWVudCcgfHxcbiAgICAgICAgaXRlbS5taW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3ZuZC5zdW5iaXJkLnF1ZXN0aW9uc2V0JyB8fFxuICAgICAgICBpdGVtLm1pbWVUeXBlID09PSAnYXBwbGljYXRpb24vcXVpeicgfHxcbiAgICAgICAgKGl0ZW0ubmFtZSAmJiBpdGVtLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYXNzZXNzbWVudCcpKVxuICAgICAgaWYgKGlzSXRlbUFzc2Vzc21lbnQpIGNvbnRpbnVlXG4gICAgICBcbiAgICAgIC8vIE9ubHkgY291bnQgY291cnNlcywgbm90IG90aGVyIGNvbnRlbnQgdHlwZXNcbiAgICAgIGlmIChpdGVtLnByaW1hcnlDYXRlZ29yeSAhPT0gJ0NvdXJzZScpIGNvbnRpbnVlXG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgY291cnNlIGlzIG1hbmRhdG9yeVxuICAgICAgY29uc3QgaXNNYW5kYXRvcnkgPSBpdGVtLmlzTWFuZGF0b3J5ICE9PSBmYWxzZVxuICAgICAgXG4gICAgICBpZiAoaXNNYW5kYXRvcnkpIHtcbiAgICAgICAgbWFuZGF0b3J5Q291bnQrK1xuICAgICAgICBjb25zdCBpc0NvbXBsZXRlZCA9IFxuICAgICAgICAgIGl0ZW0uY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBcbiAgICAgICAgICBpdGVtLnN0YXR1cyA9PT0gMiB8fCBcbiAgICAgICAgICBpdGVtLmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCB8fFxuICAgICAgICAgIGl0ZW0ucHJvZ3Jlc3MgPj0gMTAwXG4gICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZyhgICBDb3Vyc2U6ICR7aXRlbS5uYW1lfWAsIHtcbiAgICAgICAgICBpc01hbmRhdG9yeSxcbiAgICAgICAgICBjb21wbGV0aW9uU3RhdHVzOiBpdGVtLmNvbXBsZXRpb25TdGF0dXMsXG4gICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcbiAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogaXRlbS5jb21wbGV0aW9uUGVyY2VudGFnZSxcbiAgICAgICAgICBwcm9ncmVzczogaXRlbS5wcm9ncmVzcyxcbiAgICAgICAgICBpc0NvbXBsZXRlZFxuICAgICAgICB9KVxuICAgICAgICBcbiAgICAgICAgaWYgKGlzQ29tcGxldGVkKSB7XG4gICAgICAgICAgY29tcGxldGVkTWFuZGF0b3J5Q291bnQrK1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGFsbE1hbmRhdG9yeUNvbXBsZXRlID0gbWFuZGF0b3J5Q291bnQgPT09IDAgfHwgY29tcGxldGVkTWFuZGF0b3J5Q291bnQgPj0gbWFuZGF0b3J5Q291bnRcbiAgICBcbiAgICBjb25zb2xlLmxvZyhgW0FTU0VTU01FTlQgTE9DSyBDSEVDS10gU3VtbWFyeTpgLCB7XG4gICAgICBtYW5kYXRvcnlDb3VudCxcbiAgICAgIGNvbXBsZXRlZE1hbmRhdG9yeUNvdW50LFxuICAgICAgYWxsTWFuZGF0b3J5Q29tcGxldGUsXG4gICAgICBhc3Nlc3NtZW50Q29tcGxldGVkLFxuICAgICAgd2lsbFVubG9jazogYXNzZXNzbWVudENvbXBsZXRlZCB8fCBhbGxNYW5kYXRvcnlDb21wbGV0ZVxuICAgIH0pXG4gICAgXG4gICAgaWYgKGFzc2Vzc21lbnRDb21wbGV0ZWQgfHwgYWxsTWFuZGF0b3J5Q29tcGxldGUpIHtcbiAgICAgIHRoaXMuaGFzaG1hcFthc3Nlc3NtZW50SWRdLmlzQXNzZXNzbWVudExvY2tlZCA9IGZhbHNlXG4gICAgICB0aGlzLmhhc2htYXBbYXNzZXNzbWVudElkXS5taWxlc3RvbmVBc3Nlc3NtZW50TG9ja2VkID0gZmFsc2VcbiAgICAgIHRoaXMuaGFzaG1hcFthc3Nlc3NtZW50SWRdLmFzc2Vzc21lbnRMb2NrTWVzc2FnZSA9ICcnXG4gICAgICBjb25zb2xlLmxvZyhg4pyFIEFzc2Vzc21lbnQgJHthc3Nlc3NtZW50SWR9IGlzIFVOTE9DS0VEIChjb21wbGV0ZWQgb3IgYWxsIG1hbmRhdG9yeSBkb25lKWApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBub3QgdW5sb2NrZWQsIGxvY2sgdGhlIGFzc2Vzc21lbnRcbiAgICB0aGlzLmhhc2htYXBbYXNzZXNzbWVudElkXS5pc0Fzc2Vzc21lbnRMb2NrZWQgPSB0cnVlXG4gICAgdGhpcy5oYXNobWFwW2Fzc2Vzc21lbnRJZF0ubWlsZXN0b25lQXNzZXNzbWVudExvY2tlZCA9IHRydWVcbiAgICB0aGlzLmhhc2htYXBbYXNzZXNzbWVudElkXS5hc3Nlc3NtZW50TG9ja01lc3NhZ2UgPSAnVGhpcyBjb250ZW50IGlzIGxvY2tlZC4gQ29tcGxldGUgYWxsIG1hbmRhdG9yeSBpdGVtcyB0byB1bmxvY2sgdGhlIGFzc2Vzc21lbnQuJ1xuXG4gICAgY29uc29sZS5sb2coYPCflJIgQXNzZXNzbWVudCAke2Fzc2Vzc21lbnRJZH0gaXMgTE9DS0VEOmAsIHtcbiAgICAgIG1hbmRhdG9yeUNvdW50LFxuICAgICAgY29tcGxldGVkTWFuZGF0b3J5Q291bnQsXG4gICAgICBpc0xvY2tlZDogdHJ1ZSxcbiAgICAgIG1pbGVzdG9uZUFzc2Vzc21lbnRMb2NrZWQ6IHRydWVcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgYWxsIGNoaWxkcmVuIG9mIGEgbWlsZXN0b25lIGFzIHBhcmVudC1sb2NrZWQgb3IgdW5sb2NrZWRcbiAgICovXG4gIHByaXZhdGUgbWFya01pbGVzdG9uZUNoaWxkcmVuQXNQYXJlbnRMb2NrZWQobWlsZXN0b25lSWQ6IHN0cmluZywgaXNMb2NrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmhhc2htYXApKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5oYXNobWFwW2tleV1cbiAgICAgIFxuICAgICAgLy8gRGlyZWN0IGNoaWxkcmVuIG9mIG1pbGVzdG9uZVxuICAgICAgaWYgKGl0ZW0ucGFyZW50ID09PSBtaWxlc3RvbmVJZCkge1xuICAgICAgICB0aGlzLmhhc2htYXBba2V5XS5pc1BhcmVudE1pbGVzdG9uZUxvY2tlZCA9IGlzTG9ja2VkXG4gICAgICAgIFxuICAgICAgICAvLyBBbHNvIG1hcmsgbmVzdGVkIGNoaWxkcmVuIChlLmcuLCByZXNvdXJjZXMgaW5zaWRlIGNvdXJzZXMpXG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgdGhpcy5tYXJrTmVzdGVkQ2hpbGRyZW5Bc1BhcmVudExvY2tlZChrZXksIGlzTG9ja2VkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IG1hcmsgbmVzdGVkIGNoaWxkcmVuIGFzIHBhcmVudC1sb2NrZWRcbiAgICovXG4gIHByaXZhdGUgbWFya05lc3RlZENoaWxkcmVuQXNQYXJlbnRMb2NrZWQocGFyZW50SWQ6IHN0cmluZywgaXNMb2NrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmhhc2htYXApKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5oYXNobWFwW2tleV1cbiAgICAgIFxuICAgICAgaWYgKGl0ZW0ucGFyZW50ID09PSBwYXJlbnRJZCkge1xuICAgICAgICB0aGlzLmhhc2htYXBba2V5XS5pc1BhcmVudE1pbGVzdG9uZUxvY2tlZCA9IGlzTG9ja2VkXG4gICAgICAgIFxuICAgICAgICAvLyBSZWN1cnNlIGZvciBkZWVwZXIgbmVzdGluZ1xuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgIHRoaXMubWFya05lc3RlZENoaWxkcmVuQXNQYXJlbnRMb2NrZWQoa2V5LCBpc0xvY2tlZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldENhbGN1bGF0aW9uc0Zyb21DaGlsZHJlbihpdGVtOiBOc0NvbnRlbnQuSUNvbnRlbnQpIHtcbiAgICBpdGVtWydkdXJhdGlvbiddID0gaXRlbS5jaGlsZHJlbi5yZWR1Y2UoKHN1bSwgY2hpbGQpID0+IHtcbiAgICAgIHJldHVybiBzdW0gKyBOdW1iZXIoY2hpbGQuZHVyYXRpb24gfHwgMClcbiAgICB9LCAwKVxuICAgIGNvbnN0IGNvbXBsZXRlZEl0ZW1zID0gXy5maWx0ZXIoaXRlbS5jaGlsZHJlbiwgciA9PiByLmNvbXBsZXRpb25TdGF0dXMgPT09IDIgfHwgci5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwKVxuICAgIGNvbnN0IHRvdGFsQ291bnQgPSBfLnRvSW50ZWdlcihfLmdldChpdGVtLCAnbGVhZk5vZGVzQ291bnQnKSkgfHwgMVxuICAgIGl0ZW1bJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSBOdW1iZXIoKChjb21wbGV0ZWRJdGVtcy5sZW5ndGggLyB0b3RhbENvdW50KSAqIDEwMCkudG9GaXhlZCgpKVxuICAgIGl0ZW1bJ2NvbXBsZXRpb25TdGF0dXMnXSA9IChpdGVtLmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCkgPyAyIDogMVxuICAgIHJldHVybiBpdGVtXG4gIH1cblxuICBmZXRjaENvbnRlbnRIaXN0b3J5VjIocmVxOiBOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhUmVxKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPiB7XG4gICAgcmVxLnJlcXVlc3QuZmllbGRzID0gWydwcm9ncmVzc2RldGFpbHMnXVxuXG4gICAgaWYgKHJlcS5yZXF1ZXN0LmNvdXJzZUlkKSB7XG4gICAgICBjb25zdCByZXNsdXQ6IGFueSA9IHRoaXMuaHR0cC5wb3N0PE5zQ29udGVudC5JQ29udGludWVMZWFybmluZ0RhdGE+KFxuICAgICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT05URU5UX0hJU1RPUllWMn0vJHtyZXEucmVxdWVzdC5jb3Vyc2VJZH1gLCByZXFcbiAgICAgIClcbiAgICAgIC8vIGRhdGEuc3Vic2NyaWJlKChzdWJzY3JpYmVEYXRhOiBhbnkpID0+IHtcbiAgICAgIC8vICAgICAgIHRoaXMucHJvZ3JhbUNoaWxkQ291cnNlUmVzdW1lRGF0YS5uZXh0KHsgcmVzdW1lRGF0YTogc3Vic2NyaWJlRGF0YS5yZXN1bHQuY29udGVudExpc3QsIGNvdXJzZUlkOiByZXEucmVxdWVzdC5jb3Vyc2VJZCB9KVxuICAgICAgLy8gICAgIH0pXG4gICAgICByZXR1cm4gcmVzbHV0XG4gICAgfVxuICAgIHJldHVybiBvZigpXG5cbiAgfVxuXG4gIGRvd29ubG9hZENlcnRpZmljYXRlKGNlcnRJZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDx7IHJlc3VsdDogYW55IH0+KFxuICAgICAgQVBJX0VORF9QT0lOVFMuQ0VSVF9ET1dOTE9BRChjZXJ0SWQpLFxuICAgIClcbiAgfVxuICBnZXRTZXJ2ZXJEYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHsgcmVzdWx0OiBOc0FwcFRvYy5JUG9zdEFzc2Vzc21lbnRbXSB9PihcbiAgICAgIEFQSV9FTkRfUE9JTlRTLlNFUlZFUl9EQVRFKVxuICB9XG5cbiAgZ2V0Rm9ybUJ5SWQoZm9ybUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChBUElfRU5EX1BPSU5UUy5HRVRfRk9STV9CWUlEKGZvcm1JZCkpXG4gIH1cblxuICBzdWJtaXRGb3JtKGZvcm1EYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihBUElfRU5EX1BPSU5UUy5TVUJNSVRfRk9STSwgZm9ybURhdGEpXG4gIH1cblxuICBnZXRGb3JtQnlJZFB1YmxpYyhmb3JtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KEFQSV9FTkRfUE9JTlRTLkdFVF9GT1JNX0JZSURfUFVCTElDKGZvcm1JZCkpXG4gIH1cblxuICBzdWJtaXRGb3JtUHVibGljKGZvcm1EYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihBUElfRU5EX1BPSU5UUy5TVUJNSVRfRk9STV9QVUJMSUMsIGZvcm1EYXRhKVxuICB9XG5cbiAgZ2V0QXBsbGljYXRpb25zQnlJZChmb3JtSWQ6IHN0cmluZywgY29udGV4dElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oQVBJX0VORF9QT0lOVFMuR0VUX0FQUExJQ0FUSU9OU19CWV9JRChmb3JtSWQsIGNvbnRleHRJZCkpXG4gIH1cblxuICBzaGFyZUNvbnRlbnQocmVxQm9keTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuU0hBUkVfQ09OVEVOVH1gLCByZXFCb2R5KVxuICB9XG4gIGNoZWNrTW9kdWxlV2lzZURhdGEoY29udGVudDogYW55KSB7XG4gICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC5jaGlsZHJlbikge1xuICAgICAgY29udGVudC5jaGlsZHJlbi5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZWxlLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFKSB7XG4gICAgICAgICAgbGV0IG1vZHVsZVJlc291cnNlQ291bnQgPSAwXG4gICAgICAgICAgbGV0IG9mZmxpbmVSZXNvdXJzZUNvdW50ID0gMFxuICAgICAgICAgIGVsZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZEVsZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hpbGRFbGUucHJpbWFyeUNhdGVnb3J5ICE9PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5PRkZMSU5FX1NFU1NJT04pIHtcbiAgICAgICAgICAgICAgbW9kdWxlUmVzb3Vyc2VDb3VudCA9IG1vZHVsZVJlc291cnNlQ291bnQgKyAxXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvZmZsaW5lUmVzb3Vyc2VDb3VudCA9IG9mZmxpbmVSZXNvdXJzZUNvdW50ICsgMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgZWxlWydtb2R1bGVSZXNvdXJzZUNvdW50J10gPSBtb2R1bGVSZXNvdXJzZUNvdW50XG4gICAgICAgICAgZWxlWydvZmZsaW5lUmVzb3Vyc2VDb3VudCddID0gb2ZmbGluZVJlc291cnNlQ291bnRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZWxlLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrTW9kdWxlV2lzZURhdGEoZWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgYXN5bmMgZmV0Y2hDb3Vyc2VIZWlyYXJjaHkoY29udGVudERhdGE6IGFueSkge1xuICAgIGlmIChjb250ZW50RGF0YSAmJiBjb250ZW50RGF0YS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBlbGUgb2YgY29udGVudERhdGEuY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKGVsZS5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuQ09VUlNFKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy53aWRnZXRTdmMuZmV0Y2hDb250ZW50KGVsZS5pZGVudGlmaWVyKS50b1Byb21pc2UoKS50aGVuKGFzeW5jIChzdWJFbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHN1YkVsZS5yZXN1bHQgJiYgc3ViRWxlLnJlc3VsdC5jb250ZW50XG4gICAgICAgICAgICAgICYmIHN1YkVsZS5yZXN1bHQuY29udGVudC5jaGlsZHJlbiAmJiBzdWJFbGUucmVzdWx0LmNvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGVsZVsnY2hpbGRyZW4nXSA9IHN1YkVsZS5yZXN1bHQuY29udGVudC5jaGlsZHJlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRUcmFuc2NyaXB0aW9uRGF0YShkYXRhOiBhbnkpIHtcbiAgICAvLyAgY29uc29sZS5sb2coJ2RhdGEtLScsIGRhdGEpXG4gICAgdGhpcy50cmFuc3JpcHRpb25EYXRhU3ViamVjdC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgc2V0QWN0aXZlU3VidGl0bGVMYW5ndWFnZShhY3RpdmVMYW5nOiBhbnkpIHtcbiAgICB0aGlzLnRyYW5zcmlwdGlvbkFjdGl2ZUxhbmd1YWdlRGF0YU9iamVjdC5uZXh0KGFjdGl2ZUxhbmcpXG4gIH1cblxuXG5cbiAgYWlHZXRSZXNvdXJjZVZ0dEZpbGUocmVzb3VyY2VJRDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHtBUElfRU5EX1BPSU5UUy5BSV9SRVNPVVJDRV9WVFRfRklMRX0/cmVzb3VyY2VfaWQ9JHtyZXNvdXJjZUlEfWApXG4gIH1cblxuICByZWFkUHJlRW5yb2xsbWVudFJlc291cmNlc1N0YXRlKHJlcTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QoYCR7QVBJX0VORF9QT0lOVFMuUFJFX0VOUk9MTE1FTlRfU1RBVEVfUkVBRH1gLCByZXEpXG4gIH1cblxuICBjcmVhdGVDb250ZW50VjIocmVxdWVzdEJvZHk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KFxuICAgICAgICBgJHtBUElfRU5EX1BPSU5UUy5DUkVBVEVfUkVTT1VSQ0V9YCxcbiAgICAgICAgcmVxdWVzdEJvZHksXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gZGF0YS5yZXN1bHQuaWRlbnRpZmllclxuICAgICAgICB9KSxcbiAgICAgIClcbiAgfVxuXG5cbiAgdXBsb2FkQXNzaWdubWVudEFuc3dlcihjb250ZW50SWQ6IHN0cmluZywgYmF0Y2hJZDogc3RyaW5nLCBhc3NpZ25tZW50SWQ6IHN0cmluZywgZmlsZTogRmlsZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLCBmaWxlLm5hbWUpXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke0FQSV9FTkRfUE9JTlRTLlVQTE9BRF9BU1NJR05NRU5UfS8ke2NvbnRlbnRJZH0vJHtiYXRjaElkfS8ke2Fzc2lnbm1lbnRJZH1gLCBmb3JtRGF0YSk7XG4gIH1cblxuXG4gIHJlYWRDb250ZW50VjIoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihcbiAgICAgIGAke0FQSV9FTkRfUE9JTlRTLlJFQURfUkVTT1VSQ0V9cmVhZC8ke2lkfT9tb2RlPWVkaXRgLFxuICAgICkucGlwZShcbiAgICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBkYXRhLnJlc3VsdC5jb250ZW50XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHVwbG9hZChcbiAgICBkYXRhOiBGb3JtRGF0YSxcbiAgICBjb250ZW50RGF0YTogYW55LFxuICAgIG9wdGlvbnM/OiBhbnksXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICBjb25zdCBmaWxlID0gZGF0YS5nZXQoJ2NvbnRlbnQnKSBhcyBGaWxlXG4gICAgbGV0IGZpbGVOYW1lID0gZmlsZS5uYW1lXG4gICAgaWYgKFsnY2hhbm5lbC5qc29uJ10uaW5kZXhPZihmaWxlTmFtZSkgPCAwKSB7XG4gICAgICBmaWxlTmFtZSA9IHRoaXMuYXBwZW5kVG9GaWxlbmFtZShmaWxlTmFtZSlcbiAgICB9XG4gICAgY29uc3QgbmV3Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgIG5ld0Zvcm1EYXRhLmFwcGVuZCgnZGF0YScsIGZpbGUsIGZpbGVOYW1lKVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KFxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuVVBMT0FEX0ZJTEV9dXBsb2FkLyR7Y29udGVudERhdGEuY29udGVudElkfWAsXG4gICAgICBuZXdGb3JtRGF0YSxcbiAgICAgIG9wdGlvbnNcbiAgICApXG4gIH1cblxuICBhcHBlbmRUb0ZpbGVuYW1lKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0aW1lU3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgIGNvbnN0IGRvdEluZGV4ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKVxuICAgIGlmIChkb3RJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmaWxlbmFtZSArIHRpbWVTdGFtcFxuICAgIH1cbiAgICByZXR1cm4gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIGRvdEluZGV4KSArIHRpbWVTdGFtcCArIGZpbGVuYW1lLnN1YnN0cmluZyhkb3RJbmRleClcbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnRXaXRoRmV3RmllbGRzKHJlcXVlc3RCb2R5OiBhbnksIGlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxhbnk+KFxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuVVBEQVRFX1JFU09VUkNFfS8ke2lkZW50aWZpZXJ9YCxcbiAgICAgIHJlcXVlc3RCb2R5LFxuICAgIClcbiAgfVxuXG4gIHNlYXJjaEFzc2lnbm1lbnRzKHJlcXVlc3Q6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KEFQSV9FTkRfUE9JTlRTLlNFQVJDSCwgcmVxdWVzdClcbiAgfVxuXG4gIHN1Ym1pdERyYWZ0QXNzaWdubWVudChyZXF1ZXN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KEFQSV9FTkRfUE9JTlRTLlNVQk1JVF9EUkFGVF9BU1NJR05NRU5ULCByZXF1ZXN0KVxuICB9XG5cbiAgc3VibWl0QXNzaWdubWVudChyZXF1ZXN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChBUElfRU5EX1BPSU5UUy5TVUJNSVRfQVNTSUdOTUVOVCwgcmVxdWVzdClcbiAgfVxuXG4gIG5vdGlmeUFzc2lnbm1lbnRTdWJtaXNzaW9uKHBheWxvYWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KEFQSV9FTkRfUE9JTlRTLk5PVElGWV9BU1NJR05NRU5UX1NVQk1JU1NJT04sIHBheWxvYWQpXG4gIH1cblxuICBnZXRBc3NpZ25tZW50U3RhdHVzKHJlcXVlc3Q6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke0FQSV9FTkRfUE9JTlRTLkFTU0lHTk1FTlRfU1RBVFVTfWAsIHJlcXVlc3QpXG4gIH1cblxuICByZWFkQXNzaWdubWVudEZpbGUoY29udGVudElkOiBzdHJpbmcsIGJhdGNoSWQ6IHN0cmluZywgYXNzaWdubWVudElkOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vIFByb3Blcmx5IGVuY29kZSB0aGUgcGFyYW1ldGVycyB0byBhdm9pZCBtYWxmb3JtZWQgcmVxdWVzdCBlcnJvcnNcbiAgICBjb25zdCBlbmNvZGVkUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBjb250ZW50SWQ6IGNvbnRlbnRJZCB8fCAnJyxcbiAgICAgIGJhdGNoSWQ6IGJhdGNoSWQgfHwgJycsXG4gICAgICBmb3JtSWQ6IGFzc2lnbm1lbnRJZCB8fCAnJyxcbiAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSB8fCAnJ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7QVBJX0VORF9QT0lOVFMuUkVBRF9BU1NJR05NRU5UfT8ke2VuY29kZWRQYXJhbXMudG9TdHJpbmcoKX1gLCB7XG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0sIGFwcGxpY2F0aW9uL3BkZiwgYXBwbGljYXRpb24vbXN3b3JkLCBhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCdcbiAgICAgIH1cbiAgICB9KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgbWlsZXN0b25lIGFjaGlldmVtZW50XG4gICAqIEBwYXJhbSB1c2VySWQgVXNlciBJRFxuICAgKiBAcGFyYW0gY291cnNlSWQgQ291cnNlIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGJhdGNoSWQgQmF0Y2ggSURcbiAgICogQHBhcmFtIG1pbGVzdG9uZUlkIE1pbGVzdG9uZSBpZGVudGlmaWVyIChlLmcuLCAnbTEnLCAnbTInKVxuICAgKi9cbiAgZ2VuZXJhdGVNaWxlc3RvbmVBY2hpZXZlbWVudCh1c2VySWQ6IHN0cmluZywgY291cnNlSWQ6IHN0cmluZywgYmF0Y2hJZDogc3RyaW5nLCBtaWxlc3RvbmVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBhcGlVcmwgPSAnL2FwaXMvcHJveGllcy92OC9hY2hpZXZlbWVudC9keW5hbWljL3YxL2dlbmVyYXRlJ1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgY291cnNlSWQsXG4gICAgICAgIGJhdGNoSWQsXG4gICAgICAgIG1pbGVzdG9uZUlkXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChhcGlVcmwsIHJlcXVlc3QpXG4gIH1cblxufVxuIl19