@dollhousemcp/mcp-server 2.0.40 → 2.0.41

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 (44) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/di/Container.d.ts.map +1 -1
  3. package/dist/di/Container.js +10 -7
  4. package/dist/elements/agents/AgentManager.d.ts +25 -6
  5. package/dist/elements/agents/AgentManager.d.ts.map +1 -1
  6. package/dist/elements/agents/AgentManager.js +127 -21
  7. package/dist/elements/base/BaseElementManager.d.ts +18 -2
  8. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  9. package/dist/elements/base/BaseElementManager.js +36 -3
  10. package/dist/generated/version.d.ts +2 -2
  11. package/dist/generated/version.js +3 -3
  12. package/dist/handlers/ElementCRUDHandler.d.ts +36 -8
  13. package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
  14. package/dist/handlers/ElementCRUDHandler.js +227 -96
  15. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  16. package/dist/handlers/mcp-aql/MCPAQLHandler.js +3 -3
  17. package/dist/handlers/strategies/AgentActivationStrategy.d.ts.map +1 -1
  18. package/dist/handlers/strategies/AgentActivationStrategy.js +5 -2
  19. package/dist/handlers/strategies/ElementActivationStrategy.d.ts +2 -0
  20. package/dist/handlers/strategies/ElementActivationStrategy.d.ts.map +1 -1
  21. package/dist/handlers/strategies/ElementActivationStrategy.js +1 -1
  22. package/dist/index.d.ts +7 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/services/ActivationStore.d.ts +5 -4
  25. package/dist/services/ActivationStore.d.ts.map +1 -1
  26. package/dist/services/ActivationStore.js +35 -9
  27. package/dist/services/PolicyExportService.d.ts +8 -2
  28. package/dist/services/PolicyExportService.d.ts.map +1 -1
  29. package/dist/services/PolicyExportService.js +37 -6
  30. package/dist/storage/ElementStorageLayer.d.ts +3 -3
  31. package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
  32. package/dist/storage/ElementStorageLayer.js +33 -7
  33. package/dist/storage/IStorageLayer.d.ts +8 -1
  34. package/dist/storage/IStorageLayer.d.ts.map +1 -1
  35. package/dist/storage/IStorageLayer.js +1 -1
  36. package/dist/storage/MemoryStorageLayer.d.ts +4 -3
  37. package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
  38. package/dist/storage/MemoryStorageLayer.js +43 -13
  39. package/dist/storage/types.d.ts +7 -0
  40. package/dist/storage/types.d.ts.map +1 -1
  41. package/dist/storage/types.js +17 -2
  42. package/oauth-helper.mjs +19 -26
  43. package/package.json +1 -1
  44. package/server.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"AgentActivationStrategy.d.ts","sourceRoot":"","sources":["../../../src/handlers/strategies/AgentActivationStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAIxF,qBAAa,uBAAwB,SAAQ,sBAAuB,YAAW,yBAAyB;IAC1F,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,YAAY;IAIvD;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IA4LjF;;;;;OAKG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAUpD;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC;IA2B/C;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA8BtB;;;OAGG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAmJ5D"}
1
+ {"version":3,"file":"AgentActivationStrategy.d.ts","sourceRoot":"","sources":["../../../src/handlers/strategies/AgentActivationStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAIxF,qBAAa,uBAAwB,SAAQ,sBAAuB,YAAW,yBAAyB;IAC1F,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,YAAY;IAIvD;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IA4LjF;;;;;OAKG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAapD;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC;IA2B/C;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA8BtB;;;OAGG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAmJ5D"}
@@ -194,7 +194,10 @@ export class AgentActivationStrategy extends BaseActivationStrategy {
194
194
  if (!result.success) {
195
195
  this.throwNotFoundError(name, 'Agent');
196
196
  }
197
- return this.createSuccessResponse(result.message);
197
+ return {
198
+ ...this.createSuccessResponse(result.message),
199
+ ...(result.filename ? { stableIdentity: result.filename } : {}),
200
+ };
198
201
  }
199
202
  /**
200
203
  * Get all active agents
@@ -390,4 +393,4 @@ export class AgentActivationStrategy extends BaseActivationStrategy {
390
393
  };
391
394
  }
392
395
  }
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRBY3RpdmF0aW9uU3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGFuZGxlcnMvc3RyYXRlZ2llcy9BZ2VudEFjdGl2YXRpb25TdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBR0gsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsc0JBQXNCO0lBQ3BDO0lBQTdCLFlBQTZCLFlBQTBCO1FBQ3JELEtBQUssRUFBRSxDQUFDO1FBRG1CLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBRXZELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBWSxFQUFFLE9BQTZCO1FBQ3hELGlFQUFpRTtRQUNqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUUzQixxQ0FBcUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksSUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEQsd0NBQXdDO1FBQ3hDLCtEQUErRDtRQUMvRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxF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QUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ3pCLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBZ2VudEFjdGl2YXRpb25TdHJhdGVneSAtIFN0cmF0ZWd5IGZvciBhZ2VudCBlbGVtZW50IGFjdGl2YXRpb25cbiAqXG4gKiBIYW5kbGVzIGFjdGl2YXRpb24sIGRlYWN0aXZhdGlvbiwgYW5kIHN0YXR1cyB0cmFja2luZyBmb3IgYWdlbnQgZWxlbWVudHMuXG4gKiBVc2VzIFwiZXhlY3V0aW9uXCIgc3RyYXRlZ3kgd2l0aCBzdGF0ZSBmaWxlIG1hbmFnZW1lbnQuXG4gKlxuICogU0VDVVJJVFkgJiBDT05TSVNURU5DWSBJTVBST1ZFTUVOVFM6XG4gKiAtIFNlY3VyaXR5IGxvZ2dpbmcgZm9yIGFjdGl2YXRpb24gZXJyb3JzIChJc3N1ZSAjMjQgLSBNZWRpdW0gUHJpb3JpdHkpXG4gKiAtIEFjdGl2YXRpb24gcm9sbGJhY2sgb24gY3JpdGljYWwgZmFpbHVyZXMgKElzc3VlICMyNCAtIE1lZGl1bSBQcmlvcml0eSlcbiAqIC0gT3B0aW1pc3RpYyBsb2NraW5nIGZvciBzdGF0ZSB1cGRhdGVzIChJc3N1ZSAjMjQgLSBNZWRpdW0gUHJpb3JpdHkpXG4gKi9cblxuaW1wb3J0IHsgQWdlbnRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvYWdlbnRzL0FnZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBCYXNlQWN0aXZhdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9CYXNlQWN0aXZhdGlvblN0cmF0ZWd5LmpzJztcbmltcG9ydCB7IEVsZW1lbnRBY3RpdmF0aW9uU3RyYXRlZ3ksIE1DUFJlc3BvbnNlIH0gZnJvbSAnLi9FbGVtZW50QWN0aXZhdGlvblN0cmF0ZWd5LmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgQWdlbnRBY3RpdmF0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBCYXNlQWN0aXZhdGlvblN0cmF0ZWd5IGltcGxlbWVudHMgRWxlbWVudEFjdGl2YXRpb25TdHJhdGVneSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYWdlbnRNYW5hZ2VyOiBBZ2VudE1hbmFnZXIpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIGFuIGFnZW50IHdpdGggZXhlY3V0aW9uIHN0cmF0ZWd5XG4gICAqIEV4ZWN1dGVzIGFnZW50IGxvZ2ljLCB1cGRhdGVzIHN0YXRlIGZpbGUsIGFuZCB0cmFja3MgYWN0aXZhdGlvblxuICAgKlxuICAgKiBJTVBST1ZFTUVOVDogRW5oYW5jZWQgZXJyb3IgaGFuZGxpbmcgd2l0aCBzZWN1cml0eSBsb2dnaW5nIGFuZCByb2xsYmFjayAoSXNzdWUgIzI0KVxuICAgKi9cbiAgYXN5bmMgYWN0aXZhdGUobmFtZTogc3RyaW5nLCBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8TUNQUmVzcG9uc2U+IHtcbiAgICAvLyBVc2UgdGhlIG1hbmFnZXIncyBhY3RpdmF0aW9uIG1ldGhvZCB3aGljaCB0cmFja3MgYWN0aXZlIGFnZW50c1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmFjdGl2YXRlQWdlbnQobmFtZSk7XG5cbiAgICBpZiAoIXJlc3VsdC5zdWNjZXNzIHx8ICFyZXN1bHQuYWdlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU5vdEZvdW5kUmVzcG9uc2UobmFtZSwgJ0FnZW50Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgYWdlbnQgPSByZXN1bHQuYWdlbnQ7XG5cbiAgICAvLyBFeHRyYWN0IG9wdGlvbmFsIGdvYWwgZnJvbSBjb250ZXh0XG4gICAgY29uc3QgZ29hbCA9IGNvbnRleHQ/LmdvYWwgfHwgY29udGV4dD8uZ29hbHM/LlswXTtcblxuICAgIC8vIEV4ZWN1dGUgYWdlbnQgbG9naWMgKGdvYWxzL2RlY2lzaW9ucylcbiAgICAvLyBGb3Igbm93LCB0aGlzIGlzIGEgc2lkZS1lZmZlY3QgYWN0aXZhdGlvbiB0aGF0IHVwZGF0ZXMgc3RhdGVcbiAgICBjb25zdCBzdGF0ZSA9IGFnZW50LmdldFN0YXRlKCk7XG4gICAgY29uc3QgZXhlY3V0aW9uU3VtbWFyeTogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIFRyYWNrIGlmIHdlIG5lZWQgdG8gcm9sbGJhY2sgYWN0aXZhdGlvbiBvbiBjcml0aWNhbCBmYWlsdXJlXG4gICAgbGV0IGNyaXRpY2FsRmFpbHVyZSA9IGZhbHNlO1xuXG4gICAgaWYgKGdvYWwpIHtcbiAgICAgIC8vIElmIGdvYWwgcHJvdmlkZWQsIGFkZCBpdCB0byB0aGUgYWdlbnQncyBnb2Fsc1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWdlbnQuYWRkR29hbCh7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGdvYWwuZGVzY3JpcHRpb24gfHwgZ29hbCxcbiAgICAgICAgICBwcmlvcml0eTogZ29hbC5wcmlvcml0eSB8fCAnbWVkaXVtJyxcbiAgICAgICAgICBpbXBvcnRhbmNlOiBnb2FsLmltcG9ydGFuY2UgfHwgNSxcbiAgICAgICAgICB1cmdlbmN5OiBnb2FsLnVyZ2VuY3kgfHwgNVxuICAgICAgICB9KTtcbiAgICAgICAgZXhlY3V0aW9uU3VtbWFyeS5wdXNoKGBHb2FsIGFkZGVkOiAke2dvYWwuZGVzY3JpcHRpb24gfHwgZ29hbH1gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEZJWDogRW5oYW5jZWQgZXJyb3IgbG9nZ2luZyB3aXRoIHNlY3VyaXR5IG1vbml0b3JpbmcgKElzc3VlICMyNClcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnQ291bGQgbm90IGFkZCBnb2FsJztcblxuICAgICAgICAvLyBMb2cgdG8gc2VjdXJpdHkgbW9uaXRvciBmb3IgYXVkaXQgdHJhaWxcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdBR0VOVF9BQ1RJVkFUSU9OX0ZBSUxFRCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICAgIHNvdXJjZTogJ0FnZW50QWN0aXZhdGlvblN0cmF0ZWd5LmFjdGl2YXRlJyxcbiAgICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIGFkZCBnb2FsIGR1cmluZyBhZ2VudCBhY3RpdmF0aW9uOiAke2Vycm9yTWVzc2FnZX1gLFxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgICAgICBhZ2VudE5hbWU6IG5hbWUsXG4gICAgICAgICAgICBnb2FsRGVzY3JpcHRpb246IGdvYWwuZGVzY3JpcHRpb24gfHwgZ29hbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIExvZyB0byBzdGFuZGFyZCBsb2dnZXIgZm9yIGRlYnVnZ2luZ1xuICAgICAgICBsb2dnZXIud2FybihgR29hbCBhZGRpdGlvbiBmYWlsZWQgZHVyaW5nIGFnZW50IGFjdGl2YXRpb25gLCB7XG4gICAgICAgICAgYWdlbnROYW1lOiBuYW1lLFxuICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhlY3V0aW9uU3VtbWFyeS5wdXNoKGBOb3RlOiAke2Vycm9yTWVzc2FnZX1gKTtcblxuICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGNyaXRpY2FsIGZhaWx1cmUgcmVxdWlyaW5nIHJvbGxiYWNrXG4gICAgICAgIC8vIENyaXRpY2FsIGZhaWx1cmVzOiB2YWxpZGF0aW9uIGVycm9ycyB0aGF0IGluZGljYXRlIGJhZCBpbnB1dCBvciBzZWN1cml0eSBpc3N1ZXNcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgKFxuICAgICAgICAgIGVycm9yTWVzc2FnZS5pbmNsdWRlcygnaGFybWZ1bCBjb250ZW50JykgfHxcbiAgICAgICAgICBlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJ3NlY3VyaXR5JykgfHxcbiAgICAgICAgICBlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJ01heGltdW0gbnVtYmVyIG9mIGdvYWxzJylcbiAgICAgICAgKSkge1xuICAgICAgICAgIGNyaXRpY2FsRmFpbHVyZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGSVg6IFJvbGxiYWNrIGFjdGl2YXRpb24gb24gY3JpdGljYWwgZmFpbHVyZXMgKElzc3VlICMyNClcbiAgICBpZiAoY3JpdGljYWxGYWlsdXJlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYENyaXRpY2FsIGZhaWx1cmUgZHVyaW5nIGFnZW50IGFjdGl2YXRpb24sIHJvbGxpbmcgYmFja2AsIHtcbiAgICAgICAgYWdlbnROYW1lOiBuYW1lXG4gICAgICB9KTtcblxuICAgICAgLy8gRGVhY3RpdmF0ZSB0aGUgYWdlbnQgdG8gcm9sbGJhY2tcbiAgICAgIGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmRlYWN0aXZhdGVBZ2VudChuYW1lKTtcblxuICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50IGZvciByb2xsYmFja1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnQUdFTlRfQUNUSVZBVElPTl9ST0xMQkFDSycsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ0FnZW50QWN0aXZhdGlvblN0cmF0ZWd5LmFjdGl2YXRlJyxcbiAgICAgICAgZGV0YWlsczogYEFnZW50IGFjdGl2YXRpb24gcm9sbGVkIGJhY2sgZHVlIHRvIGNyaXRpY2FsIGZhaWx1cmVgLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIGFnZW50TmFtZTogbmFtZSxcbiAgICAgICAgICByZWFzb246ICdDcml0aWNhbCBnb2FsIGFkZGl0aW9uIGZhaWx1cmUnXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBSZXR1cm4gZXJyb3IgcmVzcG9uc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBBZ2VudCBhY3RpdmF0aW9uIGZhaWxlZCBhbmQgd2FzIHJvbGxlZCBiYWNrXFxuXFxuQ3JpdGljYWwgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGdvYWwgYWRkaXRpb24uIFBsZWFzZSByZXZpZXcgdGhlIGdvYWwgcGFyYW1ldGVycyBhbmQgdHJ5IGFnYWluLmBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRklYOiBPcHRpbWlzdGljIGxvY2tpbmcgZm9yIHN0YXRlIHVwZGF0ZXMgKElzc3VlICMyNClcbiAgICAvLyBVc2UgcHVibGljIHBlcnNpc3RTdGF0ZSBBUEkgd2hpY2ggaW1wbGVtZW50cyBPcHRpb24gQyBwYXR0ZXJuIChJc3N1ZSAjMTIzKVxuICAgIGNvbnN0IGZpbGVuYW1lID0gYWdlbnQubWV0YWRhdGEubmFtZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBTYXZlIHN0YXRlIHdpdGggYXRvbWljIHdyaXRlIGFuZCBwcm9wZXIgdmVyc2lvbiBoYW5kbGluZ1xuICAgICAgYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIucGVyc2lzdFN0YXRlKGZpbGVuYW1lKTtcblxuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gYWdlbnQuZ2V0U3RhdGUoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQWdlbnQgc3RhdGUgcGVyc2lzdGVkIHN1Y2Nlc3NmdWxseWAsIHtcbiAgICAgICAgYWdlbnROYW1lOiBuYW1lLFxuICAgICAgICBzZXNzaW9uQ291bnQ6IGN1cnJlbnRTdGF0ZS5zZXNzaW9uQ291bnQsXG4gICAgICAgIGdvYWxDb3VudDogY3VycmVudFN0YXRlLmdvYWxzLmxlbmd0aFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFN0YXRlIHNhdmUgZmFpbHVyZSAtIGxvZyBhbmQgY29udGludWUgKGFnZW50IGlzIHN0aWxsIGFjdGl2YXRlZClcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdNRU1PUllfU0FWRV9GQUlMRUQnLCAvLyBVc2luZyBleGlzdGluZyBldmVudCB0eXBlIGZvciBzdGF0ZSBzYXZlIGZhaWx1cmVzXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnQWdlbnRBY3RpdmF0aW9uU3RyYXRlZ3kuYWN0aXZhdGUnLFxuICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIHNhdmUgYWdlbnQgc3RhdGUgYWZ0ZXIgYWN0aXZhdGlvbjogJHtlcnJvck1lc3NhZ2V9YCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICBhZ2VudE5hbWU6IG5hbWUsXG4gICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLndhcm4oYEFnZW50IHN0YXRlIHNhdmUgZmFpbGVkLCBidXQgYWdlbnQgcmVtYWlucyBhY3RpdmF0ZWRgLCB7XG4gICAgICAgIGFnZW50TmFtZTogbmFtZSxcbiAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZVxuICAgICAgfSk7XG5cbiAgICAgIGV4ZWN1dGlvblN1bW1hcnkucHVzaChgV2FybmluZzogU3RhdGUgcGVyc2lzdGVuY2UgZmFpbGVkIC0gJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgZXhlY3V0aW9uIHJlc3BvbnNlXG4gICAgY29uc3QgcGFydHMgPSBbXG4gICAgICBnb2FsXG4gICAgICAgID8gYOKchSBBZ2VudCBhY3RpdmF0ZWQgYW5kIGV4ZWN1dGVkIGdvYWw6ICR7Z29hbC5kZXNjcmlwdGlvbiB8fCBnb2FsfWBcbiAgICAgICAgOiBg4pyFIEFnZW50IGFjdGl2YXRlZCBzdWNjZXNzZnVsbHlgLFxuICAgICAgJydcbiAgICBdO1xuXG4gICAgLy8gQWRkIG91dGNvbWUgZGVzY3JpcHRpb24gZm9yIHRlc3QgZXhwZWN0YXRpb25zXG4gICAgaWYgKGdvYWwpIHtcbiAgICAgIHBhcnRzLnB1c2goJ0FnZW50IGFjdGl2YXRlcyB3aXRoIGluaXRpYWwgZ29hbHMgbG9hZGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRzLnB1c2goJ0FnZW50IGJlY29tZXMgYWN0aXZlLCBpbmNyZW1lbnRzIHNlc3Npb24gY291bnQnKTtcbiAgICB9XG4gICAgcGFydHMucHVzaCgnJyk7XG5cbiAgICBwYXJ0cy5wdXNoKGAqKlNlc3Npb24qKjogIyR7c3RhdGUuc2Vzc2lvbkNvdW50ICsgMX1gKTtcbiAgICBwYXJ0cy5wdXNoKC4uLnRoaXMuZm9ybWF0VjFGaWVsZHMoYWdlbnQubWV0YWRhdGEgYXMgYW55LCBhZ2VudC5leHRlbnNpb25zIGFzIGFueSkpO1xuXG4gICAgaWYgKGV4ZWN1dGlvblN1bW1hcnkubGVuZ3RoID4gMCkge1xuICAgICAgcGFydHMucHVzaCgnJyk7XG4gICAgICBwYXJ0cy5wdXNoKCcqKkV4ZWN1dGlvbiBTdW1tYXJ5Kio6Jyk7XG4gICAgICBleGVjdXRpb25TdW1tYXJ5LmZvckVhY2gobGluZSA9PiBwYXJ0cy5wdXNoKGAtICR7bGluZX1gKSk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlR29hbHMgPSBhZ2VudC5nZXRTdGF0ZSgpLmdvYWxzLmZpbHRlcigoZzogeyBzdGF0dXM6IHN0cmluZyB9KSA9PiBnLnN0YXR1cyA9PT0gJ2luX3Byb2dyZXNzJyk7XG4gICAgaWYgKGFjdGl2ZUdvYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goJycpO1xuICAgICAgcGFydHMucHVzaChgKipBY3RpdmUgR29hbHMqKjogJHthY3RpdmVHb2Fscy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgcGFydHMucHVzaCgnJyk7XG4gICAgcGFydHMucHVzaCgnQWdlbnQgZXhlY3V0aW9uIGNvbXBsZXRlZCcpO1xuXG4gICAgLy8gSXNzdWUgIzY0MjogRmFpbC1zYWZlIHdhcm5pbmcgZm9yIENMSSByZXN0cmljdGlvbnNcbiAgICBjb25zdCByZXN0cmljdGlvbldhcm5pbmcgPSB0aGlzLmZvcm1hdFJlc3RyaWN0aW9uV2FybmluZyhhZ2VudC5tZXRhZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICBpZiAocmVzdHJpY3Rpb25XYXJuaW5nKSB7XG4gICAgICBwYXJ0cy5wdXNoKHJlc3RyaWN0aW9uV2FybmluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2F0ZWtlZXBlcldhcm5pbmcgPSB0aGlzLmZvcm1hdEdhdGVrZWVwZXJWYWxpZGl0eVdhcm5pbmcoYWdlbnQubWV0YWRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgaWYgKGdhdGVrZWVwZXJXYXJuaW5nKSB7XG4gICAgICBwYXJ0cy5wdXNoKGdhdGVrZWVwZXJXYXJuaW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3tcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IHBhcnRzLmpvaW4oJ1xcbicpXG4gICAgICB9XVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZSBhbiBhZ2VudFxuICAgKlxuICAgKiBAdGhyb3dzIHtFbGVtZW50Tm90Rm91bmRFcnJvcn0gV2hlbiBhZ2VudCBkb2VzIG5vdCBleGlzdFxuICAgKiBAc2VlIElzc3VlICMyNzUgLSBIYW5kbGVycyByZXR1cm4gc3VjY2Vzcz10cnVlIGZvciBtaXNzaW5nIGVsZW1lbnRzXG4gICAqL1xuICBhc3luYyBkZWFjdGl2YXRlKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TUNQUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5kZWFjdGl2YXRlQWdlbnQobmFtZSk7XG5cbiAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICB0aGlzLnRocm93Tm90Rm91bmRFcnJvcihuYW1lLCAnQWdlbnQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVTdWNjZXNzUmVzcG9uc2UocmVzdWx0Lm1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgYWN0aXZlIGFnZW50c1xuICAgKi9cbiAgYXN5bmMgZ2V0QWN0aXZlRWxlbWVudHMoKTogUHJvbWlzZTxNQ1BSZXNwb25zZT4ge1xuICAgIC8vIFVzZSB0aGUgbWFuYWdlcidzIG1ldGhvZCB0byBnZXQgYWN0aXZlIGFnZW50cyBkaXJlY3RseVxuICAgIGNvbnN0IGFjdGl2ZUFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmdldEFjdGl2ZUFnZW50cygpO1xuXG4gICAgaWYgKGFjdGl2ZUFnZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogXCLwn6SWIE5vIGFjdGl2ZSBhZ2VudHNcIlxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2VudExpc3QgPSBhY3RpdmVBZ2VudHMubWFwKGEgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhLmdldFN0YXRlKCk7XG4gICAgICBjb25zdCBnb2FscyA9IHN0YXRlLmdvYWxzPy5sZW5ndGggfHwgMDtcbiAgICAgIHJldHVybiBg8J+kliAke2EubWV0YWRhdGEubmFtZX0gKCR7Z29hbHN9IGFjdGl2ZSBnb2FscylgO1xuICAgIH0pLmpvaW4oJ1xcbicpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBgQWN0aXZlIGFnZW50czpcXG4ke2FnZW50TGlzdH1gXG4gICAgICB9XVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHYxIGFnZW50IGZpZWxkcyAoc3BlY2lhbGl6YXRpb25zLCBkZWNpc2lvbkZyYW1ld29yaywgcmlza1RvbGVyYW5jZSlcbiAgICogZm9yIGRpc3BsYXkuIE9ubHkgaW5jbHVkZXMgZmllbGRzIHRoYXQgYXJlIGV4cGxpY2l0bHkgc2V0IOKAlCBhdm9pZHMgc2hvd2luZ1xuICAgKiBwaGFudG9tIGRlZmF1bHRzIG9uIHYyIGFnZW50cy4gKElzc3VlICM3NDkpXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFYxRmllbGRzKFxuICAgIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGV4dGVuc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IHN0cmluZ1tdIHtcbiAgICAvLyBJc3N1ZSAjNzQ5OiBWMiBhZ2VudHMgc2hvdWxkIG5vdCBzaG93IFYxIGRlZmF1bHRzLlxuICAgIC8vIGBnb2FsYCAoc2luZ3VsYXIsIEFnZW50R29hbENvbmZpZykgaXMgdGhlIGRlZmluaXRpdmUgVjIgbWFya2VyIOKAlCBpdCdzXG4gICAgLy8gcmVxdWlyZWQgb24gQWdlbnRNZXRhZGF0YVYyIGFuZCBuZXZlciBwcmVzZW50IG9uIFYxIGFnZW50cyAod2hpY2ggdXNlXG4gICAgLy8gYGdvYWxzYCBwbHVyYWwpLiBUaGUgQWdlbnQgY29uc3RydWN0b3IgYWx3YXlzIGRlZmF1bHRzIGRlY2lzaW9uRnJhbWV3b3JrXG4gICAgLy8gYW5kIHJpc2tUb2xlcmFuY2UsIHNvIGNoZWNraW5nIHRydXRoaW5lc3MgYWxvbmUgc2hvd3MgcGhhbnRvbSB2YWx1ZXMuXG4gICAgaWYgKG1ldGFkYXRhLmdvYWwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBzcGVjcyA9IG1ldGFkYXRhLnNwZWNpYWxpemF0aW9ucztcbiAgICBjb25zdCBmcmFtZXdvcmsgPSBleHRlbnNpb25zPy5kZWNpc2lvbkZyYW1ld29yayA/PyBtZXRhZGF0YS5kZWNpc2lvbkZyYW1ld29yaztcbiAgICBjb25zdCByaXNrID0gZXh0ZW5zaW9ucz8ucmlza1RvbGVyYW5jZSA/PyBtZXRhZGF0YS5yaXNrVG9sZXJhbmNlO1xuXG4gICAgaWYgKHNwZWNzPy5sZW5ndGggPiAwKSB7XG4gICAgICBsaW5lcy5wdXNoKGAqKlNwZWNpYWxpemF0aW9ucyoqOiAke3NwZWNzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGlmIChmcmFtZXdvcmspIHtcbiAgICAgIGxpbmVzLnB1c2goYCoqRGVjaXNpb24gRnJhbWV3b3JrKio6ICR7ZnJhbWV3b3JrfWApO1xuICAgIH1cbiAgICBpZiAocmlzaykge1xuICAgICAgbGluZXMucHVzaChgKipSaXNrIFRvbGVyYW5jZSoqOiAke3Jpc2t9YCk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYW4gYWdlbnRcbiAgICogRXh0cmFjdGVkIGZyb20gRWxlbWVudENSVURIYW5kbGVyLnRzIGxpbmVzIDczMC03NzBcbiAgICovXG4gIGFzeW5jIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TUNQUmVzcG9uc2U+IHtcbiAgICAvLyBVc2UgZmxleGlibGUgZmluZGluZyB0byBzdXBwb3J0IGJvdGggZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZVxuICAgIGNvbnN0IGFsbEFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxBZ2VudHMpO1xuICAgIGlmICghYWdlbnQpIHtcbiAgICAgIHRoaXMudGhyb3dOb3RGb3VuZEVycm9yKG5hbWUsICdBZ2VudCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGFkYXRhID0gYWdlbnQubWV0YWRhdGEgYXMgYW55O1xuXG4gICAgY29uc3QgZGV0YWlscyA9IFtcbiAgICAgIGDwn6SWICoqJHthZ2VudC5tZXRhZGF0YS5uYW1lfSoqYCxcbiAgICAgIGAke2FnZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9ufWAsXG4gICAgICBgYCxcbiAgICAgIGAqKlN0YXR1cyoqOiAke2FnZW50LmdldFN0YXR1cygpfWBcbiAgICBdO1xuXG4gICAgZGV0YWlscy5wdXNoKC4uLnRoaXMuZm9ybWF0VjFGaWVsZHMobWV0YWRhdGEpKTtcblxuICAgIC8vIFYyIGZpZWxkc1xuICAgIGlmIChtZXRhZGF0YS5nb2FsKSB7XG4gICAgICBkZXRhaWxzLnB1c2goJycpO1xuICAgICAgZGV0YWlscy5wdXNoKCcqKkdvYWwgQ29uZmlndXJhdGlvbioqOicpO1xuICAgICAgZGV0YWlscy5wdXNoKGAtIFRlbXBsYXRlOiAke21ldGFkYXRhLmdvYWwudGVtcGxhdGV9YCk7XG4gICAgICBpZiAobWV0YWRhdGEuZ29hbC5wYXJhbWV0ZXJzICYmIG1ldGFkYXRhLmdvYWwucGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBQYXJhbWV0ZXJzOiAke21ldGFkYXRhLmdvYWwucGFyYW1ldGVycy5sZW5ndGh9IGRlZmluZWRgKTtcbiAgICAgICAgbWV0YWRhdGEuZ29hbC5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlZCA9IHBhcmFtLnJlcXVpcmVkID8gJ3JlcXVpcmVkJyA6ICdvcHRpb25hbCc7XG4gICAgICAgICAgZGV0YWlscy5wdXNoKGAgIC0gJHtwYXJhbS5uYW1lfSAoJHtwYXJhbS50eXBlfSwgJHtyZXF1aXJlZH0pYCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGV0YWlscy5wdXNoKCctIFBhcmFtZXRlcnM6IG5vbmUnKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRhZGF0YS5nb2FsLnN1Y2Nlc3NDcml0ZXJpYSAmJiBtZXRhZGF0YS5nb2FsLnN1Y2Nlc3NDcml0ZXJpYS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBTdWNjZXNzIENyaXRlcmlhOiAke21ldGFkYXRhLmdvYWwuc3VjY2Vzc0NyaXRlcmlhLmxlbmd0aH0gZGVmaW5lZGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtZXRhZGF0YS5hY3RpdmF0ZXMpIHtcbiAgICAgIGRldGFpbHMucHVzaCgnJyk7XG4gICAgICBkZXRhaWxzLnB1c2goJyoqQWN0aXZhdGVzKio6Jyk7XG4gICAgICBjb25zdCBlbGVtZW50VHlwZXMgPSBPYmplY3Qua2V5cyhtZXRhZGF0YS5hY3RpdmF0ZXMpO1xuICAgICAgZWxlbWVudFR5cGVzLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gbWV0YWRhdGEuYWN0aXZhdGVzW3R5cGVdO1xuICAgICAgICBpZiAoZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRldGFpbHMucHVzaChgLSAke3R5cGV9OiAke2VsZW1lbnRzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChtZXRhZGF0YS50b29scykge1xuICAgICAgZGV0YWlscy5wdXNoKCcnKTtcbiAgICAgIGRldGFpbHMucHVzaCgnKipUb29scyoqOicpO1xuICAgICAgaWYgKG1ldGFkYXRhLnRvb2xzLmFsbG93ZWQgJiYgbWV0YWRhdGEudG9vbHMuYWxsb3dlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBBbGxvd2VkOiAke21ldGFkYXRhLnRvb2xzLmFsbG93ZWQubGVuZ3RofSB0b29sc2ApO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGFkYXRhLnRvb2xzLmRlbmllZCAmJiBtZXRhZGF0YS50b29scy5kZW5pZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gRGVuaWVkOiAke21ldGFkYXRhLnRvb2xzLmRlbmllZC5sZW5ndGh9IHRvb2xzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLnN5c3RlbVByb21wdCkge1xuICAgICAgZGV0YWlscy5wdXNoKCcnKTtcbiAgICAgIGRldGFpbHMucHVzaCgnKipTeXN0ZW0gUHJvbXB0Kio6Jyk7XG4gICAgICBjb25zdCB0cnVuY2F0ZWQgPSBtZXRhZGF0YS5zeXN0ZW1Qcm9tcHQubGVuZ3RoID4gMTAwXG4gICAgICAgID8gYCR7bWV0YWRhdGEuc3lzdGVtUHJvbXB0LnN1YnN0cmluZygwLCAxMDApfS4uLmBcbiAgICAgICAgOiBtZXRhZGF0YS5zeXN0ZW1Qcm9tcHQ7XG4gICAgICBkZXRhaWxzLnB1c2godHJ1bmNhdGVkKTtcbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEuYXV0b25vbXkpIHtcbiAgICAgIGRldGFpbHMucHVzaCgnJyk7XG4gICAgICBkZXRhaWxzLnB1c2goJyoqQXV0b25vbXkgQ29uZmlndXJhdGlvbioqOicpO1xuICAgICAgaWYgKG1ldGFkYXRhLmF1dG9ub215LnJpc2tUb2xlcmFuY2UpIHtcbiAgICAgICAgZGV0YWlscy5wdXNoKGAtIFJpc2sgVG9sZXJhbmNlOiAke21ldGFkYXRhLmF1dG9ub215LnJpc2tUb2xlcmFuY2V9YCk7XG4gICAgICB9XG4gICAgICBpZiAobWV0YWRhdGEuYXV0b25vbXkubWF4QXV0b25vbW91c1N0ZXBzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgc3RlcHNMYWJlbCA9IG1ldGFkYXRhLmF1dG9ub215Lm1heEF1dG9ub21vdXNTdGVwcyA9PT0gMCA/ICd1bmxpbWl0ZWQnIDogbWV0YWRhdGEuYXV0b25vbXkubWF4QXV0b25vbW91c1N0ZXBzO1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gTWF4IEF1dG9ub21vdXMgU3RlcHM6ICR7c3RlcHNMYWJlbH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRhZGF0YS5hdXRvbm9teS5yZXF1aXJlc0FwcHJvdmFsICYmIG1ldGFkYXRhLmF1dG9ub215LnJlcXVpcmVzQXBwcm92YWwubGVuZ3RoID4gMCkge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gUmVxdWlyZXMgQXBwcm92YWw6ICR7bWV0YWRhdGEuYXV0b25vbXkucmVxdWlyZXNBcHByb3ZhbC5sZW5ndGh9IHBhdHRlcm5zYCk7XG4gICAgICB9XG4gICAgICBpZiAobWV0YWRhdGEuYXV0b25vbXkuYXV0b0FwcHJvdmUgJiYgbWV0YWRhdGEuYXV0b25vbXkuYXV0b0FwcHJvdmUubGVuZ3RoID4gMCkge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gQXV0byBBcHByb3ZlOiAke21ldGFkYXRhLmF1dG9ub215LmF1dG9BcHByb3ZlLmxlbmd0aH0gcGF0dGVybnNgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNzIyOiBEaXNwbGF5IHJlc2lsaWVuY2UgcG9saWN5XG4gICAgaWYgKG1ldGFkYXRhLnJlc2lsaWVuY2UpIHtcbiAgICAgIGRldGFpbHMucHVzaCgnJyk7XG4gICAgICBkZXRhaWxzLnB1c2goJyoqUmVzaWxpZW5jZSBQb2xpY3kqKjonKTtcbiAgICAgIGlmIChtZXRhZGF0YS5yZXNpbGllbmNlLm9uU3RlcExpbWl0UmVhY2hlZCkge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gT24gU3RlcCBMaW1pdCBSZWFjaGVkOiAke21ldGFkYXRhLnJlc2lsaWVuY2Uub25TdGVwTGltaXRSZWFjaGVkfWApO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGFkYXRhLnJlc2lsaWVuY2Uub25FeGVjdXRpb25GYWlsdXJlKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBPbiBFeGVjdXRpb24gRmFpbHVyZTogJHttZXRhZGF0YS5yZXNpbGllbmNlLm9uRXhlY3V0aW9uRmFpbHVyZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRhZGF0YS5yZXNpbGllbmNlLm1heFJldHJpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gTWF4IFJldHJpZXM6ICR7bWV0YWRhdGEucmVzaWxpZW5jZS5tYXhSZXRyaWVzfWApO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGFkYXRhLnJlc2lsaWVuY2UubWF4Q29udGludWF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBNYXggQ29udGludWF0aW9uczogJHttZXRhZGF0YS5yZXNpbGllbmNlLm1heENvbnRpbnVhdGlvbnN9YCk7XG4gICAgICB9XG4gICAgICAvLyBJc3N1ZSAjNzQ5OiBEaXNwbGF5IHJldHJ5QmFja29mZiBhbmQgcHJlc2VydmVTdGF0ZSAod2VyZSBtaXNzaW5nKVxuICAgICAgaWYgKG1ldGFkYXRhLnJlc2lsaWVuY2UucmV0cnlCYWNrb2ZmKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBSZXRyeSBCYWNrb2ZmOiAke21ldGFkYXRhLnJlc2lsaWVuY2UucmV0cnlCYWNrb2ZmfWApO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGFkYXRhLnJlc2lsaWVuY2UucHJlc2VydmVTdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBQcmVzZXJ2ZSBTdGF0ZTogJHttZXRhZGF0YS5yZXNpbGllbmNlLnByZXNlcnZlU3RhdGV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgIzcyMjogRGlzcGxheSB0YWdzIGFuZCB0cmlnZ2Vyc1xuICAgIGlmIChtZXRhZGF0YS50YWdzICYmIG1ldGFkYXRhLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZGV0YWlscy5wdXNoKCcnKTtcbiAgICAgIGRldGFpbHMucHVzaChgKipUYWdzKio6ICR7bWV0YWRhdGEudGFncy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBpZiAobWV0YWRhdGEudHJpZ2dlcnMgJiYgbWV0YWRhdGEudHJpZ2dlcnMubGVuZ3RoID4gMCkge1xuICAgICAgZGV0YWlscy5wdXNoKGAqKlRyaWdnZXJzKio6ICR7bWV0YWRhdGEudHJpZ2dlcnMuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICBkZXRhaWxzLnB1c2goJycpO1xuICAgIGRldGFpbHMucHVzaCgnKipJbnN0cnVjdGlvbnMqKjonKTtcbiAgICBkZXRhaWxzLnB1c2goKGFnZW50IGFzIGFueSkuaW5zdHJ1Y3Rpb25zIHx8IChhZ2VudCBhcyBhbnkpLmV4dGVuc2lvbnM/Lmluc3RydWN0aW9ucyB8fCAnTm8gaW5zdHJ1Y3Rpb25zIGF2YWlsYWJsZScpO1xuXG4gICAgaWYgKChhZ2VudCBhcyBhbnkpLmNvbnRlbnQ/LnRyaW0oKSkge1xuICAgICAgZGV0YWlscy5wdXNoKCcnKTtcbiAgICAgIGRldGFpbHMucHVzaCgnKipSZWZlcmVuY2U6KionKTtcbiAgICAgIGRldGFpbHMucHVzaCgoYWdlbnQgYXMgYW55KS5jb250ZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2VudFN0YXRlID0gKGFnZW50IGFzIGFueSkuc3RhdGU7XG4gICAgaWYgKGFnZW50U3RhdGU/LmdvYWxzICYmIGFnZW50U3RhdGUuZ29hbHMubGVuZ3RoID4gMCkge1xuICAgICAgZGV0YWlscy5wdXNoKCcnLCAnKipDdXJyZW50IEdvYWxzKio6Jyk7XG4gICAgICBhZ2VudFN0YXRlLmdvYWxzLmZvckVhY2goKGc6IGFueSkgPT4ge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gJHtnLmRlc2NyaXB0aW9ufSAoJHtnLnN0YXR1c30pYCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3tcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IGRldGFpbHMuam9pbignXFxuJylcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxufVxuIl19
396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRBY3RpdmF0aW9uU3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGFuZGxlcnMvc3RyYXRlZ2llcy9BZ2VudEFjdGl2YXRpb25TdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBR0gsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsc0JBQXNCO0lBQ3BDO0lBQTdCLFlBQTZCLFlBQTBCO1FBQ3JELEtBQUssRUFBRSxDQUFDO1FBRG1CLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBRXZELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBWSxFQUFFLE9BQTZCO1FBQ3hELGlFQUFpRTtRQUNqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUUzQixxQ0FBcUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksSUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEQsd0NBQXdDO1FBQ3hDLCtEQUErRDtRQUMvRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxF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LENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2lCQUN6QixDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWdlbnRBY3RpdmF0aW9uU3RyYXRlZ3kgLSBTdHJhdGVneSBmb3IgYWdlbnQgZWxlbWVudCBhY3RpdmF0aW9uXG4gKlxuICogSGFuZGxlcyBhY3RpdmF0aW9uLCBkZWFjdGl2YXRpb24sIGFuZCBzdGF0dXMgdHJhY2tpbmcgZm9yIGFnZW50IGVsZW1lbnRzLlxuICogVXNlcyBcImV4ZWN1dGlvblwiIHN0cmF0ZWd5IHdpdGggc3RhdGUgZmlsZSBtYW5hZ2VtZW50LlxuICpcbiAqIFNFQ1VSSVRZICYgQ09OU0lTVEVOQ1kgSU1QUk9WRU1FTlRTOlxuICogLSBTZWN1cml0eSBsb2dnaW5nIGZvciBhY3RpdmF0aW9uIGVycm9ycyAoSXNzdWUgIzI0IC0gTWVkaXVtIFByaW9yaXR5KVxuICogLSBBY3RpdmF0aW9uIHJvbGxiYWNrIG9uIGNyaXRpY2FsIGZhaWx1cmVzIChJc3N1ZSAjMjQgLSBNZWRpdW0gUHJpb3JpdHkpXG4gKiAtIE9wdGltaXN0aWMgbG9ja2luZyBmb3Igc3RhdGUgdXBkYXRlcyAoSXNzdWUgIzI0IC0gTWVkaXVtIFByaW9yaXR5KVxuICovXG5cbmltcG9ydCB7IEFnZW50TWFuYWdlciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2FnZW50cy9BZ2VudE1hbmFnZXIuanMnO1xuaW1wb3J0IHsgQmFzZUFjdGl2YXRpb25TdHJhdGVneSB9IGZyb20gJy4vQmFzZUFjdGl2YXRpb25TdHJhdGVneS5qcyc7XG5pbXBvcnQgeyBFbGVtZW50QWN0aXZhdGlvblN0cmF0ZWd5LCBNQ1BSZXNwb25zZSB9IGZyb20gJy4vRWxlbWVudEFjdGl2YXRpb25TdHJhdGVneS5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuZXhwb3J0IGNsYXNzIEFnZW50QWN0aXZhdGlvblN0cmF0ZWd5IGV4dGVuZHMgQmFzZUFjdGl2YXRpb25TdHJhdGVneSBpbXBsZW1lbnRzIEVsZW1lbnRBY3RpdmF0aW9uU3RyYXRlZ3kge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFnZW50TWFuYWdlcjogQWdlbnRNYW5hZ2VyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBhbiBhZ2VudCB3aXRoIGV4ZWN1dGlvbiBzdHJhdGVneVxuICAgKiBFeGVjdXRlcyBhZ2VudCBsb2dpYywgdXBkYXRlcyBzdGF0ZSBmaWxlLCBhbmQgdHJhY2tzIGFjdGl2YXRpb25cbiAgICpcbiAgICogSU1QUk9WRU1FTlQ6IEVuaGFuY2VkIGVycm9yIGhhbmRsaW5nIHdpdGggc2VjdXJpdHkgbG9nZ2luZyBhbmQgcm9sbGJhY2sgKElzc3VlICMyNClcbiAgICovXG4gIGFzeW5jIGFjdGl2YXRlKG5hbWU6IHN0cmluZywgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPE1DUFJlc3BvbnNlPiB7XG4gICAgLy8gVXNlIHRoZSBtYW5hZ2VyJ3MgYWN0aXZhdGlvbiBtZXRob2Qgd2hpY2ggdHJhY2tzIGFjdGl2ZSBhZ2VudHNcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5hY3RpdmF0ZUFnZW50KG5hbWUpO1xuXG4gICAgaWYgKCFyZXN1bHQuc3VjY2VzcyB8fCAhcmVzdWx0LmFnZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVOb3RGb3VuZFJlc3BvbnNlKG5hbWUsICdBZ2VudCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFnZW50ID0gcmVzdWx0LmFnZW50O1xuXG4gICAgLy8gRXh0cmFjdCBvcHRpb25hbCBnb2FsIGZyb20gY29udGV4dFxuICAgIGNvbnN0IGdvYWwgPSBjb250ZXh0Py5nb2FsIHx8IGNvbnRleHQ/LmdvYWxzPy5bMF07XG5cbiAgICAvLyBFeGVjdXRlIGFnZW50IGxvZ2ljIChnb2Fscy9kZWNpc2lvbnMpXG4gICAgLy8gRm9yIG5vdywgdGhpcyBpcyBhIHNpZGUtZWZmZWN0IGFjdGl2YXRpb24gdGhhdCB1cGRhdGVzIHN0YXRlXG4gICAgY29uc3Qgc3RhdGUgPSBhZ2VudC5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGV4ZWN1dGlvblN1bW1hcnk6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBUcmFjayBpZiB3ZSBuZWVkIHRvIHJvbGxiYWNrIGFjdGl2YXRpb24gb24gY3JpdGljYWwgZmFpbHVyZVxuICAgIGxldCBjcml0aWNhbEZhaWx1cmUgPSBmYWxzZTtcblxuICAgIGlmIChnb2FsKSB7XG4gICAgICAvLyBJZiBnb2FsIHByb3ZpZGVkLCBhZGQgaXQgdG8gdGhlIGFnZW50J3MgZ29hbHNcbiAgICAgIHRyeSB7XG4gICAgICAgIGFnZW50LmFkZEdvYWwoe1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBnb2FsLmRlc2NyaXB0aW9uIHx8IGdvYWwsXG4gICAgICAgICAgcHJpb3JpdHk6IGdvYWwucHJpb3JpdHkgfHwgJ21lZGl1bScsXG4gICAgICAgICAgaW1wb3J0YW5jZTogZ29hbC5pbXBvcnRhbmNlIHx8IDUsXG4gICAgICAgICAgdXJnZW5jeTogZ29hbC51cmdlbmN5IHx8IDVcbiAgICAgICAgfSk7XG4gICAgICAgIGV4ZWN1dGlvblN1bW1hcnkucHVzaChgR29hbCBhZGRlZDogJHtnb2FsLmRlc2NyaXB0aW9uIHx8IGdvYWx9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBGSVg6IEVuaGFuY2VkIGVycm9yIGxvZ2dpbmcgd2l0aCBzZWN1cml0eSBtb25pdG9yaW5nIChJc3N1ZSAjMjQpXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0NvdWxkIG5vdCBhZGQgZ29hbCc7XG5cbiAgICAgICAgLy8gTG9nIHRvIHNlY3VyaXR5IG1vbml0b3IgZm9yIGF1ZGl0IHRyYWlsXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnQUdFTlRfQUNUSVZBVElPTl9GQUlMRUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgICBzb3VyY2U6ICdBZ2VudEFjdGl2YXRpb25TdHJhdGVneS5hY3RpdmF0ZScsXG4gICAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBhZGQgZ29hbCBkdXJpbmcgYWdlbnQgYWN0aXZhdGlvbjogJHtlcnJvck1lc3NhZ2V9YCxcbiAgICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgICAgYWdlbnROYW1lOiBuYW1lLFxuICAgICAgICAgICAgZ29hbERlc2NyaXB0aW9uOiBnb2FsLmRlc2NyaXB0aW9uIHx8IGdvYWwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBMb2cgdG8gc3RhbmRhcmQgbG9nZ2VyIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgbG9nZ2VyLndhcm4oYEdvYWwgYWRkaXRpb24gZmFpbGVkIGR1cmluZyBhZ2VudCBhY3RpdmF0aW9uYCwge1xuICAgICAgICAgIGFnZW50TmFtZTogbmFtZSxcbiAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGlvblN1bW1hcnkucHVzaChgTm90ZTogJHtlcnJvck1lc3NhZ2V9YCk7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBjcml0aWNhbCBmYWlsdXJlIHJlcXVpcmluZyByb2xsYmFja1xuICAgICAgICAvLyBDcml0aWNhbCBmYWlsdXJlczogdmFsaWRhdGlvbiBlcnJvcnMgdGhhdCBpbmRpY2F0ZSBiYWQgaW5wdXQgb3Igc2VjdXJpdHkgaXNzdWVzXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIChcbiAgICAgICAgICBlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJ2hhcm1mdWwgY29udGVudCcpIHx8XG4gICAgICAgICAgZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCdzZWN1cml0eScpIHx8XG4gICAgICAgICAgZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCdNYXhpbXVtIG51bWJlciBvZiBnb2FscycpXG4gICAgICAgICkpIHtcbiAgICAgICAgICBjcml0aWNhbEZhaWx1cmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRklYOiBSb2xsYmFjayBhY3RpdmF0aW9uIG9uIGNyaXRpY2FsIGZhaWx1cmVzIChJc3N1ZSAjMjQpXG4gICAgaWYgKGNyaXRpY2FsRmFpbHVyZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKGBDcml0aWNhbCBmYWlsdXJlIGR1cmluZyBhZ2VudCBhY3RpdmF0aW9uLCByb2xsaW5nIGJhY2tgLCB7XG4gICAgICAgIGFnZW50TmFtZTogbmFtZVxuICAgICAgfSk7XG5cbiAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGFnZW50IHRvIHJvbGxiYWNrXG4gICAgICBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5kZWFjdGl2YXRlQWdlbnQobmFtZSk7XG5cbiAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudCBmb3Igcm9sbGJhY2tcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0FHRU5UX0FDVElWQVRJT05fUk9MTEJBQ0snLFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICdBZ2VudEFjdGl2YXRpb25TdHJhdGVneS5hY3RpdmF0ZScsXG4gICAgICAgIGRldGFpbHM6IGBBZ2VudCBhY3RpdmF0aW9uIHJvbGxlZCBiYWNrIGR1ZSB0byBjcml0aWNhbCBmYWlsdXJlYCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICBhZ2VudE5hbWU6IG5hbWUsXG4gICAgICAgICAgcmVhc29uOiAnQ3JpdGljYWwgZ29hbCBhZGRpdGlvbiBmYWlsdXJlJ1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gUmV0dXJuIGVycm9yIHJlc3BvbnNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgQWdlbnQgYWN0aXZhdGlvbiBmYWlsZWQgYW5kIHdhcyByb2xsZWQgYmFja1xcblxcbkNyaXRpY2FsIGVycm9yIG9jY3VycmVkIGR1cmluZyBnb2FsIGFkZGl0aW9uLiBQbGVhc2UgcmV2aWV3IHRoZSBnb2FsIHBhcmFtZXRlcnMgYW5kIHRyeSBhZ2Fpbi5gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZJWDogT3B0aW1pc3RpYyBsb2NraW5nIGZvciBzdGF0ZSB1cGRhdGVzIChJc3N1ZSAjMjQpXG4gICAgLy8gVXNlIHB1YmxpYyBwZXJzaXN0U3RhdGUgQVBJIHdoaWNoIGltcGxlbWVudHMgT3B0aW9uIEMgcGF0dGVybiAoSXNzdWUgIzEyMylcbiAgICBjb25zdCBmaWxlbmFtZSA9IGFnZW50Lm1ldGFkYXRhLm5hbWU7XG5cbiAgICB0cnkge1xuICAgICAgLy8gU2F2ZSBzdGF0ZSB3aXRoIGF0b21pYyB3cml0ZSBhbmQgcHJvcGVyIHZlcnNpb24gaGFuZGxpbmdcbiAgICAgIGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLnBlcnNpc3RTdGF0ZShmaWxlbmFtZSk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGFnZW50LmdldFN0YXRlKCk7XG4gICAgICBsb2dnZXIuZGVidWcoYEFnZW50IHN0YXRlIHBlcnNpc3RlZCBzdWNjZXNzZnVsbHlgLCB7XG4gICAgICAgIGFnZW50TmFtZTogbmFtZSxcbiAgICAgICAgc2Vzc2lvbkNvdW50OiBjdXJyZW50U3RhdGUuc2Vzc2lvbkNvdW50LFxuICAgICAgICBnb2FsQ291bnQ6IGN1cnJlbnRTdGF0ZS5nb2Fscy5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTdGF0ZSBzYXZlIGZhaWx1cmUgLSBsb2cgYW5kIGNvbnRpbnVlIChhZ2VudCBpcyBzdGlsbCBhY3RpdmF0ZWQpXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJztcblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnTUVNT1JZX1NBVkVfRkFJTEVEJywgLy8gVXNpbmcgZXhpc3RpbmcgZXZlbnQgdHlwZSBmb3Igc3RhdGUgc2F2ZSBmYWlsdXJlc1xuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ0FnZW50QWN0aXZhdGlvblN0cmF0ZWd5LmFjdGl2YXRlJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBzYXZlIGFnZW50IHN0YXRlIGFmdGVyIGFjdGl2YXRpb246ICR7ZXJyb3JNZXNzYWdlfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgICAgYWdlbnROYW1lOiBuYW1lLFxuICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci53YXJuKGBBZ2VudCBzdGF0ZSBzYXZlIGZhaWxlZCwgYnV0IGFnZW50IHJlbWFpbnMgYWN0aXZhdGVkYCwge1xuICAgICAgICBhZ2VudE5hbWU6IG5hbWUsXG4gICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2VcbiAgICAgIH0pO1xuXG4gICAgICBleGVjdXRpb25TdW1tYXJ5LnB1c2goYFdhcm5pbmc6IFN0YXRlIHBlcnNpc3RlbmNlIGZhaWxlZCAtICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGV4ZWN1dGlvbiByZXNwb25zZVxuICAgIGNvbnN0IHBhcnRzID0gW1xuICAgICAgZ29hbFxuICAgICAgICA/IGDinIUgQWdlbnQgYWN0aXZhdGVkIGFuZCBleGVjdXRlZCBnb2FsOiAke2dvYWwuZGVzY3JpcHRpb24gfHwgZ29hbH1gXG4gICAgICAgIDogYOKchSBBZ2VudCBhY3RpdmF0ZWQgc3VjY2Vzc2Z1bGx5YCxcbiAgICAgICcnXG4gICAgXTtcblxuICAgIC8vIEFkZCBvdXRjb21lIGRlc2NyaXB0aW9uIGZvciB0ZXN0IGV4cGVjdGF0aW9uc1xuICAgIGlmIChnb2FsKSB7XG4gICAgICBwYXJ0cy5wdXNoKCdBZ2VudCBhY3RpdmF0ZXMgd2l0aCBpbml0aWFsIGdvYWxzIGxvYWRlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0cy5wdXNoKCdBZ2VudCBiZWNvbWVzIGFjdGl2ZSwgaW5jcmVtZW50cyBzZXNzaW9uIGNvdW50Jyk7XG4gICAgfVxuICAgIHBhcnRzLnB1c2goJycpO1xuXG4gICAgcGFydHMucHVzaChgKipTZXNzaW9uKio6ICMke3N0YXRlLnNlc3Npb25Db3VudCArIDF9YCk7XG4gICAgcGFydHMucHVzaCguLi50aGlzLmZvcm1hdFYxRmllbGRzKGFnZW50Lm1ldGFkYXRhIGFzIGFueSwgYWdlbnQuZXh0ZW5zaW9ucyBhcyBhbnkpKTtcblxuICAgIGlmIChleGVjdXRpb25TdW1tYXJ5Lmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goJycpO1xuICAgICAgcGFydHMucHVzaCgnKipFeGVjdXRpb24gU3VtbWFyeSoqOicpO1xuICAgICAgZXhlY3V0aW9uU3VtbWFyeS5mb3JFYWNoKGxpbmUgPT4gcGFydHMucHVzaChgLSAke2xpbmV9YCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUdvYWxzID0gYWdlbnQuZ2V0U3RhdGUoKS5nb2Fscy5maWx0ZXIoKGc6IHsgc3RhdHVzOiBzdHJpbmcgfSkgPT4gZy5zdGF0dXMgPT09ICdpbl9wcm9ncmVzcycpO1xuICAgIGlmIChhY3RpdmVHb2Fscy5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKCcnKTtcbiAgICAgIHBhcnRzLnB1c2goYCoqQWN0aXZlIEdvYWxzKio6ICR7YWN0aXZlR29hbHMubGVuZ3RofWApO1xuICAgIH1cblxuICAgIHBhcnRzLnB1c2goJycpO1xuICAgIHBhcnRzLnB1c2goJ0FnZW50IGV4ZWN1dGlvbiBjb21wbGV0ZWQnKTtcblxuICAgIC8vIElzc3VlICM2NDI6IEZhaWwtc2FmZSB3YXJuaW5nIGZvciBDTEkgcmVzdHJpY3Rpb25zXG4gICAgY29uc3QgcmVzdHJpY3Rpb25XYXJuaW5nID0gdGhpcy5mb3JtYXRSZXN0cmljdGlvbldhcm5pbmcoYWdlbnQubWV0YWRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgaWYgKHJlc3RyaWN0aW9uV2FybmluZykge1xuICAgICAgcGFydHMucHVzaChyZXN0cmljdGlvbldhcm5pbmcpO1xuICAgIH1cblxuICAgIGNvbnN0IGdhdGVrZWVwZXJXYXJuaW5nID0gdGhpcy5mb3JtYXRHYXRla2VlcGVyVmFsaWRpdHlXYXJuaW5nKGFnZW50Lm1ldGFkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIGlmIChnYXRla2VlcGVyV2FybmluZykge1xuICAgICAgcGFydHMucHVzaChnYXRla2VlcGVyV2FybmluZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBwYXJ0cy5qb2luKCdcXG4nKVxuICAgICAgfV1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGUgYW4gYWdlbnRcbiAgICpcbiAgICogQHRocm93cyB7RWxlbWVudE5vdEZvdW5kRXJyb3J9IFdoZW4gYWdlbnQgZG9lcyBub3QgZXhpc3RcbiAgICogQHNlZSBJc3N1ZSAjMjc1IC0gSGFuZGxlcnMgcmV0dXJuIHN1Y2Nlc3M9dHJ1ZSBmb3IgbWlzc2luZyBlbGVtZW50c1xuICAgKi9cbiAgYXN5bmMgZGVhY3RpdmF0ZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1DUFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuZGVhY3RpdmF0ZUFnZW50KG5hbWUpO1xuXG4gICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgdGhpcy50aHJvd05vdEZvdW5kRXJyb3IobmFtZSwgJ0FnZW50Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY3JlYXRlU3VjY2Vzc1Jlc3BvbnNlKHJlc3VsdC5tZXNzYWdlKSxcbiAgICAgIC4uLihyZXN1bHQuZmlsZW5hbWUgPyB7IHN0YWJsZUlkZW50aXR5OiByZXN1bHQuZmlsZW5hbWUgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgYWN0aXZlIGFnZW50c1xuICAgKi9cbiAgYXN5bmMgZ2V0QWN0aXZlRWxlbWVudHMoKTogUHJvbWlzZTxNQ1BSZXNwb25zZT4ge1xuICAgIC8vIFVzZSB0aGUgbWFuYWdlcidzIG1ldGhvZCB0byBnZXQgYWN0aXZlIGFnZW50cyBkaXJlY3RseVxuICAgIGNvbnN0IGFjdGl2ZUFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmdldEFjdGl2ZUFnZW50cygpO1xuXG4gICAgaWYgKGFjdGl2ZUFnZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogXCLwn6SWIE5vIGFjdGl2ZSBhZ2VudHNcIlxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2VudExpc3QgPSBhY3RpdmVBZ2VudHMubWFwKGEgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhLmdldFN0YXRlKCk7XG4gICAgICBjb25zdCBnb2FscyA9IHN0YXRlLmdvYWxzPy5sZW5ndGggfHwgMDtcbiAgICAgIHJldHVybiBg8J+kliAke2EubWV0YWRhdGEubmFtZX0gKCR7Z29hbHN9IGFjdGl2ZSBnb2FscylgO1xuICAgIH0pLmpvaW4oJ1xcbicpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBgQWN0aXZlIGFnZW50czpcXG4ke2FnZW50TGlzdH1gXG4gICAgICB9XVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHYxIGFnZW50IGZpZWxkcyAoc3BlY2lhbGl6YXRpb25zLCBkZWNpc2lvbkZyYW1ld29yaywgcmlza1RvbGVyYW5jZSlcbiAgICogZm9yIGRpc3BsYXkuIE9ubHkgaW5jbHVkZXMgZmllbGRzIHRoYXQgYXJlIGV4cGxpY2l0bHkgc2V0IOKAlCBhdm9pZHMgc2hvd2luZ1xuICAgKiBwaGFudG9tIGRlZmF1bHRzIG9uIHYyIGFnZW50cy4gKElzc3VlICM3NDkpXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFYxRmllbGRzKFxuICAgIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGV4dGVuc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IHN0cmluZ1tdIHtcbiAgICAvLyBJc3N1ZSAjNzQ5OiBWMiBhZ2VudHMgc2hvdWxkIG5vdCBzaG93IFYxIGRlZmF1bHRzLlxuICAgIC8vIGBnb2FsYCAoc2luZ3VsYXIsIEFnZW50R29hbENvbmZpZykgaXMgdGhlIGRlZmluaXRpdmUgVjIgbWFya2VyIOKAlCBpdCdzXG4gICAgLy8gcmVxdWlyZWQgb24gQWdlbnRNZXRhZGF0YVYyIGFuZCBuZXZlciBwcmVzZW50IG9uIFYxIGFnZW50cyAod2hpY2ggdXNlXG4gICAgLy8gYGdvYWxzYCBwbHVyYWwpLiBUaGUgQWdlbnQgY29uc3RydWN0b3IgYWx3YXlzIGRlZmF1bHRzIGRlY2lzaW9uRnJhbWV3b3JrXG4gICAgLy8gYW5kIHJpc2tUb2xlcmFuY2UsIHNvIGNoZWNraW5nIHRydXRoaW5lc3MgYWxvbmUgc2hvd3MgcGhhbnRvbSB2YWx1ZXMuXG4gICAgaWYgKG1ldGFkYXRhLmdvYWwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBzcGVjcyA9IG1ldGFkYXRhLnNwZWNpYWxpemF0aW9ucztcbiAgICBjb25zdCBmcmFtZXdvcmsgPSBleHRlbnNpb25zPy5kZWNpc2lvbkZyYW1ld29yayA/PyBtZXRhZGF0YS5kZWNpc2lvbkZyYW1ld29yaztcbiAgICBjb25zdCByaXNrID0gZXh0ZW5zaW9ucz8ucmlza1RvbGVyYW5jZSA/PyBtZXRhZGF0YS5yaXNrVG9sZXJhbmNlO1xuXG4gICAgaWYgKHNwZWNzPy5sZW5ndGggPiAwKSB7XG4gICAgICBsaW5lcy5wdXNoKGAqKlNwZWNpYWxpemF0aW9ucyoqOiAke3NwZWNzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGlmIChmcmFtZXdvcmspIHtcbiAgICAgIGxpbmVzLnB1c2goYCoqRGVjaXNpb24gRnJhbWV3b3JrKio6ICR7ZnJhbWV3b3JrfWApO1xuICAgIH1cbiAgICBpZiAocmlzaykge1xuICAgICAgbGluZXMucHVzaChgKipSaXNrIFRvbGVyYW5jZSoqOiAke3Jpc2t9YCk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYW4gYWdlbnRcbiAgICogRXh0cmFjdGVkIGZyb20gRWxlbWVudENSVURIYW5kbGVyLnRzIGxpbmVzIDczMC03NzBcbiAgICovXG4gIGFzeW5jIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TUNQUmVzcG9uc2U+IHtcbiAgICAvLyBVc2UgZmxleGlibGUgZmluZGluZyB0byBzdXBwb3J0IGJvdGggZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZVxuICAgIGNvbnN0IGFsbEFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxBZ2VudHMpO1xuICAgIGlmICghYWdlbnQpIHtcbiAgICAgIHRoaXMudGhyb3dOb3RGb3VuZEVycm9yKG5hbWUsICdBZ2VudCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGFkYXRhID0gYWdlbnQubWV0YWRhdGEgYXMgYW55O1xuXG4gICAgY29uc3QgZGV0YWlscyA9IFtcbiAgICAgIGDwn6SWICoqJHthZ2VudC5tZXRhZGF0YS5uYW1lfSoqYCxcbiAgICAgIGAke2FnZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9ufWAsXG4gICAgICBgYCxcbiAgICAgIGAqKlN0YXR1cyoqOiAke2FnZW50LmdldFN0YXR1cygpfWBcbiAgICBdO1xuXG4gICAgZGV0YWlscy5wdXNoKC4uLnRoaXMuZm9ybWF0VjFGaWVsZHMobWV0YWRhdGEpKTtcblxuICAgIC8vIFYyIGZpZWxkc1xuICAgIGlmIChtZXRhZGF0YS5nb2FsKSB7XG4gICAgICBkZXRhaWxzLnB1c2goJycpO1xuICAgICAgZGV0YWlscy5wdXNoKCcqKkdvYWwgQ29uZmlndXJhdGlvbioqOicpO1xuICAgICAgZGV0YWlscy5wdXNoKGAtIFRlbXBsYXRlOiAke21ldGFkYXRhLmdvYWwudGVtcGxhdGV9YCk7XG4gICAgICBpZiAobWV0YWRhdGEuZ29hbC5wYXJhbWV0ZXJzICYmIG1ldGFkYXRhLmdvYWwucGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBQYXJhbWV0ZXJzOiAke21ldGFkYXRhLmdvYWwucGFyYW1ldGVycy5sZW5ndGh9IGRlZmluZWRgKTtcbiAgICAgICAgbWV0YWRhdGEuZ29hbC5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlZCA9IHBhcmFtLnJlcXVpcmVkID8gJ3JlcXVpcmVkJyA6ICdvcHRpb25hbCc7XG4gICAgICAgICAgZGV0YWlscy5wdXNoKGAgIC0gJHtwYXJhbS5uYW1lfSAoJHtwYXJhbS50eXBlfSwgJHtyZXF1aXJlZH0pYCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGV0YWlscy5wdXNoKCctIFBhcmFtZXRlcnM6IG5vbmUnKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRhZGF0YS5nb2FsLnN1Y2Nlc3NDcml0ZXJpYSAmJiBtZXRhZGF0YS5nb2FsLnN1Y2Nlc3NDcml0ZXJpYS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBTdWNjZXNzIENyaXRlcmlhOiAke21ldGFkYXRhLmdvYWwuc3VjY2Vzc0NyaXRlcmlhLmxlbmd0aH0gZGVmaW5lZGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtZXRhZGF0YS5hY3RpdmF0ZXMpIHtcbiAgICAgIGRldGFpbHMucHVzaCgnJyk7XG4gICAgICBkZXRhaWxzLnB1c2goJyoqQWN0aXZhdGVzKio6Jyk7XG4gICAgICBjb25zdCBlbGVtZW50VHlwZXMgPSBPYmplY3Qua2V5cyhtZXRhZGF0YS5hY3RpdmF0ZXMpO1xuICAgICAgZWxlbWVudFR5cGVzLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gbWV0YWRhdGEuYWN0aXZhdGVzW3R5cGVdO1xuICAgICAgICBpZiAoZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRldGFpbHMucHVzaChgLSAke3R5cGV9OiAke2VsZW1lbnRzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChtZXRhZGF0YS50b29scykge1xuICAgICAgZGV0YWlscy5wdXNoKCcnKTtcbiAgICAgIGRldGFpbHMucHVzaCgnKipUb29scyoqOicpO1xuICAgICAgaWYgKG1ldGFkYXRhLnRvb2xzLmFsbG93ZWQgJiYgbWV0YWRhdGEudG9vbHMuYWxsb3dlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBBbGxvd2VkOiAke21ldGFkYXRhLnRvb2xzLmFsbG93ZWQubGVuZ3RofSB0b29sc2ApO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGFkYXRhLnRvb2xzLmRlbmllZCAmJiBtZXRhZGF0YS50b29scy5kZW5pZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gRGVuaWVkOiAke21ldGFkYXRhLnRvb2xzLmRlbmllZC5sZW5ndGh9IHRvb2xzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLnN5c3RlbVByb21wdCkge1xuICAgICAgZGV0YWlscy5wdXNoKCcnKTtcbiAgICAgIGRldGFpbHMucHVzaCgnKipTeXN0ZW0gUHJvbXB0Kio6Jyk7XG4gICAgICBjb25zdCB0cnVuY2F0ZWQgPSBtZXRhZGF0YS5zeXN0ZW1Qcm9tcHQubGVuZ3RoID4gMTAwXG4gICAgICAgID8gYCR7bWV0YWRhdGEuc3lzdGVtUHJvbXB0LnN1YnN0cmluZygwLCAxMDApfS4uLmBcbiAgICAgICAgOiBtZXRhZGF0YS5zeXN0ZW1Qcm9tcHQ7XG4gICAgICBkZXRhaWxzLnB1c2godHJ1bmNhdGVkKTtcbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEuYXV0b25vbXkpIHtcbiAgICAgIGRldGFpbHMucHVzaCgnJyk7XG4gICAgICBkZXRhaWxzLnB1c2goJyoqQXV0b25vbXkgQ29uZmlndXJhdGlvbioqOicpO1xuICAgICAgaWYgKG1ldGFkYXRhLmF1dG9ub215LnJpc2tUb2xlcmFuY2UpIHtcbiAgICAgICAgZGV0YWlscy5wdXNoKGAtIFJpc2sgVG9sZXJhbmNlOiAke21ldGFkYXRhLmF1dG9ub215LnJpc2tUb2xlcmFuY2V9YCk7XG4gICAgICB9XG4gICAgICBpZiAobWV0YWRhdGEuYXV0b25vbXkubWF4QXV0b25vbW91c1N0ZXBzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgc3RlcHNMYWJlbCA9IG1ldGFkYXRhLmF1dG9ub215Lm1heEF1dG9ub21vdXNTdGVwcyA9PT0gMCA/ICd1bmxpbWl0ZWQnIDogbWV0YWRhdGEuYXV0b25vbXkubWF4QXV0b25vbW91c1N0ZXBzO1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gTWF4IEF1dG9ub21vdXMgU3RlcHM6ICR7c3RlcHNMYWJlbH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRhZGF0YS5hdXRvbm9teS5yZXF1aXJlc0FwcHJvdmFsICYmIG1ldGFkYXRhLmF1dG9ub215LnJlcXVpcmVzQXBwcm92YWwubGVuZ3RoID4gMCkge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gUmVxdWlyZXMgQXBwcm92YWw6ICR7bWV0YWRhdGEuYXV0b25vbXkucmVxdWlyZXNBcHByb3ZhbC5sZW5ndGh9IHBhdHRlcm5zYCk7XG4gICAgICB9XG4gICAgICBpZiAobWV0YWRhdGEuYXV0b25vbXkuYXV0b0FwcHJvdmUgJiYgbWV0YWRhdGEuYXV0b25vbXkuYXV0b0FwcHJvdmUubGVuZ3RoID4gMCkge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gQXV0byBBcHByb3ZlOiAke21ldGFkYXRhLmF1dG9ub215LmF1dG9BcHByb3ZlLmxlbmd0aH0gcGF0dGVybnNgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNzIyOiBEaXNwbGF5IHJlc2lsaWVuY2UgcG9saWN5XG4gICAgaWYgKG1ldGFkYXRhLnJlc2lsaWVuY2UpIHtcbiAgICAgIGRldGFpbHMucHVzaCgnJyk7XG4gICAgICBkZXRhaWxzLnB1c2goJyoqUmVzaWxpZW5jZSBQb2xpY3kqKjonKTtcbiAgICAgIGlmIChtZXRhZGF0YS5yZXNpbGllbmNlLm9uU3RlcExpbWl0UmVhY2hlZCkge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gT24gU3RlcCBMaW1pdCBSZWFjaGVkOiAke21ldGFkYXRhLnJlc2lsaWVuY2Uub25TdGVwTGltaXRSZWFjaGVkfWApO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGFkYXRhLnJlc2lsaWVuY2Uub25FeGVjdXRpb25GYWlsdXJlKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBPbiBFeGVjdXRpb24gRmFpbHVyZTogJHttZXRhZGF0YS5yZXNpbGllbmNlLm9uRXhlY3V0aW9uRmFpbHVyZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRhZGF0YS5yZXNpbGllbmNlLm1heFJldHJpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gTWF4IFJldHJpZXM6ICR7bWV0YWRhdGEucmVzaWxpZW5jZS5tYXhSZXRyaWVzfWApO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGFkYXRhLnJlc2lsaWVuY2UubWF4Q29udGludWF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBNYXggQ29udGludWF0aW9uczogJHttZXRhZGF0YS5yZXNpbGllbmNlLm1heENvbnRpbnVhdGlvbnN9YCk7XG4gICAgICB9XG4gICAgICAvLyBJc3N1ZSAjNzQ5OiBEaXNwbGF5IHJldHJ5QmFja29mZiBhbmQgcHJlc2VydmVTdGF0ZSAod2VyZSBtaXNzaW5nKVxuICAgICAgaWYgKG1ldGFkYXRhLnJlc2lsaWVuY2UucmV0cnlCYWNrb2ZmKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBSZXRyeSBCYWNrb2ZmOiAke21ldGFkYXRhLnJlc2lsaWVuY2UucmV0cnlCYWNrb2ZmfWApO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGFkYXRhLnJlc2lsaWVuY2UucHJlc2VydmVTdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRldGFpbHMucHVzaChgLSBQcmVzZXJ2ZSBTdGF0ZTogJHttZXRhZGF0YS5yZXNpbGllbmNlLnByZXNlcnZlU3RhdGV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgIzcyMjogRGlzcGxheSB0YWdzIGFuZCB0cmlnZ2Vyc1xuICAgIGlmIChtZXRhZGF0YS50YWdzICYmIG1ldGFkYXRhLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZGV0YWlscy5wdXNoKCcnKTtcbiAgICAgIGRldGFpbHMucHVzaChgKipUYWdzKio6ICR7bWV0YWRhdGEudGFncy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBpZiAobWV0YWRhdGEudHJpZ2dlcnMgJiYgbWV0YWRhdGEudHJpZ2dlcnMubGVuZ3RoID4gMCkge1xuICAgICAgZGV0YWlscy5wdXNoKGAqKlRyaWdnZXJzKio6ICR7bWV0YWRhdGEudHJpZ2dlcnMuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICBkZXRhaWxzLnB1c2goJycpO1xuICAgIGRldGFpbHMucHVzaCgnKipJbnN0cnVjdGlvbnMqKjonKTtcbiAgICBkZXRhaWxzLnB1c2goKGFnZW50IGFzIGFueSkuaW5zdHJ1Y3Rpb25zIHx8IChhZ2VudCBhcyBhbnkpLmV4dGVuc2lvbnM/Lmluc3RydWN0aW9ucyB8fCAnTm8gaW5zdHJ1Y3Rpb25zIGF2YWlsYWJsZScpO1xuXG4gICAgaWYgKChhZ2VudCBhcyBhbnkpLmNvbnRlbnQ/LnRyaW0oKSkge1xuICAgICAgZGV0YWlscy5wdXNoKCcnKTtcbiAgICAgIGRldGFpbHMucHVzaCgnKipSZWZlcmVuY2U6KionKTtcbiAgICAgIGRldGFpbHMucHVzaCgoYWdlbnQgYXMgYW55KS5jb250ZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2VudFN0YXRlID0gKGFnZW50IGFzIGFueSkuc3RhdGU7XG4gICAgaWYgKGFnZW50U3RhdGU/LmdvYWxzICYmIGFnZW50U3RhdGUuZ29hbHMubGVuZ3RoID4gMCkge1xuICAgICAgZGV0YWlscy5wdXNoKCcnLCAnKipDdXJyZW50IEdvYWxzKio6Jyk7XG4gICAgICBhZ2VudFN0YXRlLmdvYWxzLmZvckVhY2goKGc6IGFueSkgPT4ge1xuICAgICAgICBkZXRhaWxzLnB1c2goYC0gJHtnLmRlc2NyaXB0aW9ufSAoJHtnLnN0YXR1c30pYCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3tcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IGRldGFpbHMuam9pbignXFxuJylcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -13,6 +13,8 @@ export interface MCPResponse {
13
13
  type: string;
14
14
  text: string;
15
15
  }>;
16
+ /** Internal stable identity consumed by ElementCRUDHandler before response return. */
17
+ stableIdentity?: string;
16
18
  }
17
19
  /**
18
20
  * Strategy interface for element activation operations
@@ -1 +1 @@
1
- {"version":3,"file":"ElementActivationStrategy.d.ts","sourceRoot":"","sources":["../../../src/handlers/strategies/ElementActivationStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE5E;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE/C;;;OAGG;IACH,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1C;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACvD"}
1
+ {"version":3,"file":"ElementActivationStrategy.d.ts","sourceRoot":"","sources":["../../../src/handlers/strategies/ElementActivationStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,sFAAsF;IACtF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE5E;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE/C;;;OAGG;IACH,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1C;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACvD"}
@@ -6,4 +6,4 @@
6
6
  * implements this interface to provide custom activation logic.
7
7
  */
8
8
  export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudEFjdGl2YXRpb25TdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9zdHJhdGVnaWVzL0VsZW1lbnRBY3RpdmF0aW9uU3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbGVtZW50QWN0aXZhdGlvblN0cmF0ZWd5IC0gSW50ZXJmYWNlIGZvciBlbGVtZW50IGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIHN0cmF0ZWdpZXNcbiAqXG4gKiBEZWZpbmVzIHRoZSBjb250cmFjdCBmb3IgYWxsIGVsZW1lbnQgdHlwZS1zcGVjaWZpYyBhY3RpdmF0aW9uIHN0cmF0ZWdpZXMuXG4gKiBFYWNoIGVsZW1lbnQgdHlwZSAocGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMsIG1lbW9yaWVzLCBlbnNlbWJsZXMpXG4gKiBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHRvIHByb3ZpZGUgY3VzdG9tIGFjdGl2YXRpb24gbG9naWMuXG4gKi9cblxuLyoqXG4gKiBTdGFuZGFyZCBNQ1AgcmVzcG9uc2UgZm9ybWF0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUNQUmVzcG9uc2Uge1xuICBjb250ZW50OiBBcnJheTx7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHRleHQ6IHN0cmluZztcbiAgfT47XG59XG5cbi8qKlxuICogU3RyYXRlZ3kgaW50ZXJmYWNlIGZvciBlbGVtZW50IGFjdGl2YXRpb24gb3BlcmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRBY3RpdmF0aW9uU3RyYXRlZ3kge1xuICAvKipcbiAgICogQWN0aXZhdGUgYW4gZWxlbWVudCBieSBuYW1lXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gYWN0aXZhdGVcbiAgICogQHBhcmFtIGNvbnRleHQgLSBPcHRpb25hbCBhY3RpdmF0aW9uIGNvbnRleHQgKHBhcmFtZXRlcnMsIHZhcmlhYmxlcywgZXRjLilcbiAgICogQHJldHVybnMgTUNQLWZvcm1hdHRlZCByZXNwb25zZSB3aXRoIGFjdGl2YXRpb24gcmVzdWx0XG4gICAqL1xuICBhY3RpdmF0ZShuYW1lOiBzdHJpbmcsIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxNQ1BSZXNwb25zZT47XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGUgYW4gZWxlbWVudCBieSBuYW1lXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gZGVhY3RpdmF0ZVxuICAgKiBAcmV0dXJucyBNQ1AtZm9ybWF0dGVkIHJlc3BvbnNlIHdpdGggZGVhY3RpdmF0aW9uIHJlc3VsdFxuICAgKi9cbiAgZGVhY3RpdmF0ZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1DUFJlc3BvbnNlPjtcblxuICAvKipcbiAgICogR2V0IGFsbCBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnRzIG9mIHRoaXMgdHlwZVxuICAgKiBAcmV0dXJucyBNQ1AtZm9ybWF0dGVkIHJlc3BvbnNlIHdpdGggbGlzdCBvZiBhY3RpdmUgZWxlbWVudHNcbiAgICovXG4gIGdldEFjdGl2ZUVsZW1lbnRzKCk6IFByb21pc2U8TUNQUmVzcG9uc2U+O1xuXG4gIC8qKlxuICAgKiBHZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBlbGVtZW50XG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gZ2V0IGRldGFpbHMgZm9yXG4gICAqIEByZXR1cm5zIE1DUC1mb3JtYXR0ZWQgcmVzcG9uc2Ugd2l0aCBlbGVtZW50IGRldGFpbHNcbiAgICovXG4gIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TUNQUmVzcG9uc2U+O1xufVxuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudEFjdGl2YXRpb25TdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9zdHJhdGVnaWVzL0VsZW1lbnRBY3RpdmF0aW9uU3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbGVtZW50QWN0aXZhdGlvblN0cmF0ZWd5IC0gSW50ZXJmYWNlIGZvciBlbGVtZW50IGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIHN0cmF0ZWdpZXNcbiAqXG4gKiBEZWZpbmVzIHRoZSBjb250cmFjdCBmb3IgYWxsIGVsZW1lbnQgdHlwZS1zcGVjaWZpYyBhY3RpdmF0aW9uIHN0cmF0ZWdpZXMuXG4gKiBFYWNoIGVsZW1lbnQgdHlwZSAocGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMsIG1lbW9yaWVzLCBlbnNlbWJsZXMpXG4gKiBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIHRvIHByb3ZpZGUgY3VzdG9tIGFjdGl2YXRpb24gbG9naWMuXG4gKi9cblxuLyoqXG4gKiBTdGFuZGFyZCBNQ1AgcmVzcG9uc2UgZm9ybWF0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUNQUmVzcG9uc2Uge1xuICBjb250ZW50OiBBcnJheTx7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHRleHQ6IHN0cmluZztcbiAgfT47XG4gIC8qKiBJbnRlcm5hbCBzdGFibGUgaWRlbnRpdHkgY29uc3VtZWQgYnkgRWxlbWVudENSVURIYW5kbGVyIGJlZm9yZSByZXNwb25zZSByZXR1cm4uICovXG4gIHN0YWJsZUlkZW50aXR5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0cmF0ZWd5IGludGVyZmFjZSBmb3IgZWxlbWVudCBhY3RpdmF0aW9uIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50QWN0aXZhdGlvblN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIEFjdGl2YXRlIGFuIGVsZW1lbnQgYnkgbmFtZVxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IHRvIGFjdGl2YXRlXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gT3B0aW9uYWwgYWN0aXZhdGlvbiBjb250ZXh0IChwYXJhbWV0ZXJzLCB2YXJpYWJsZXMsIGV0Yy4pXG4gICAqIEByZXR1cm5zIE1DUC1mb3JtYXR0ZWQgcmVzcG9uc2Ugd2l0aCBhY3RpdmF0aW9uIHJlc3VsdFxuICAgKi9cbiAgYWN0aXZhdGUobmFtZTogc3RyaW5nLCBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8TUNQUmVzcG9uc2U+O1xuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlIGFuIGVsZW1lbnQgYnkgbmFtZVxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IHRvIGRlYWN0aXZhdGVcbiAgICogQHJldHVybnMgTUNQLWZvcm1hdHRlZCByZXNwb25zZSB3aXRoIGRlYWN0aXZhdGlvbiByZXN1bHRcbiAgICovXG4gIGRlYWN0aXZhdGUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxNQ1BSZXNwb25zZT47XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50cyBvZiB0aGlzIHR5cGVcbiAgICogQHJldHVybnMgTUNQLWZvcm1hdHRlZCByZXNwb25zZSB3aXRoIGxpc3Qgb2YgYWN0aXZlIGVsZW1lbnRzXG4gICAqL1xuICBnZXRBY3RpdmVFbGVtZW50cygpOiBQcm9taXNlPE1DUFJlc3BvbnNlPjtcblxuICAvKipcbiAgICogR2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgZWxlbWVudFxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IHRvIGdldCBkZXRhaWxzIGZvclxuICAgKiBAcmV0dXJucyBNQ1AtZm9ybWF0dGVkIHJlc3BvbnNlIHdpdGggZWxlbWVudCBkZXRhaWxzXG4gICAqL1xuICBnZXRFbGVtZW50RGV0YWlscyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1DUFJlc3BvbnNlPjtcbn1cbiJdfQ==
package/dist/index.d.ts CHANGED
@@ -68,8 +68,13 @@ export declare class DollhouseMCPServer implements IToolHandler {
68
68
  }>;
69
69
  activateElement(name: string, type: string, context?: Record<string, any>): Promise<import("./handlers/strategies/ElementActivationStrategy.js").MCPResponse>;
70
70
  getActiveElements(type: string): Promise<import("./handlers/strategies/ElementActivationStrategy.js").MCPResponse>;
71
- deactivateElement(name: string, type: string): Promise<import("./handlers/strategies/ElementActivationStrategy.js").MCPResponse>;
72
- getElementDetails(name: string, type: string): Promise<import("./handlers/strategies/ElementActivationStrategy.js").MCPResponse>;
71
+ deactivateElement(name: string, type: string): Promise<{
72
+ content: {
73
+ type: string;
74
+ text: string;
75
+ }[];
76
+ }>;
77
+ getElementDetails(name: string, type: string): Promise<import("./handlers/element-crud/responseFormatter.js").McpToolResponse | import("./handlers/strategies/ElementActivationStrategy.js").MCPResponse>;
73
78
  reloadElements(type: string): Promise<{
74
79
  content: {
75
80
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAYA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAgBtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AA2BrE,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,MAAM,CAAS;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,oBAAoB,CAAC,CAAuB;IACpD,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,kBAAkB,CAAC,CAAqB;IAChD,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,oBAAoB,CAAC,CAAuB;IACpD,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,eAAe,CAAC,CAA0D;IAElF;;;;;;OAMG;gBACS,SAAS,EAAE,kBAAkB;YA6C3B,mBAAmB;IAKjC;;;;OAIG;YACW,sBAAsB;IAuBpC;;;;OAIG;YACW,0BAA0B;IAcxC;;;OAGG;YACW,iBAAiB;IA4BzB,YAAY;;;;;;IASZ,cAAc;;;;;;IAOd,YAAY,CAAC,IAAI,EAAE,MAAM;;;;;;IAkBzB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAiBzE,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAiB9B,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;IAiB5C,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAO5C,cAAc,CAAC,IAAI,EAAE,MAAM;;;;;;IAM3B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;;;IAK3D,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;;;IAKhE;;;OAGG;IACG,aAAa,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;KAAC;;;;;;IAShL,WAAW,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAC;;;;;;IAQ9E,eAAe,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAC;;;;;;IAQpE,aAAa,CAAC,IAAI,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC;;;;;;IAQtE,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;;;;;;IAKhD,gBAAgB,CAAC,KAAK,EAAE,MAAM;;;;;;IAK9B,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ;;;;;;IAKzD,oBAAoB,CAAC,IAAI,EAAE,MAAM;;;;;;IAKjC,cAAc,CAAC,SAAS,EAAE,MAAM;;;;;;IAKhC,aAAa,CAAC,iBAAiB,EAAE,MAAM;;;;;;IAKvC,wBAAwB;;;;;;IAMxB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;;;;;;IAKhD,eAAe;;;;;;IAKf,iBAAiB;;;;;;IAKvB,OAAO,CAAC,4BAA4B;IAK9B,eAAe;;;;;;IAKf,eAAe;;;;;;IAKf,oBAAoB,CAAC,OAAO,GAAE,OAAe;;;;;;IAO7C,eAAe;;;;;;IAMf,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM;;;;;;IAcvC;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC;;;;;;IAKzD;;OAEG;IACG,kBAAkB;;;;;;IAKxB;;OAEG;IACG,6BAA6B,CAAC,UAAU,EAAE,OAAO;;;;;;IAKvD;;OAEG;IACG,6BAA6B;;;;;;IAMnC;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM;;;;;;IAKvC;;OAEG;IACG,iBAAiB,CAAC,eAAe,UAAO;;;;;;IAK9C;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,UAAQ;;;;;;IAMrD;;OAEG;IAEH;;OAEG;IACG,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM;;;;;;IAKvC;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC;;;;;;IAK/F;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAC;;;;;;;;;;;;;;;;;;;IAK9H;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE;QAC3B,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B;IAKD;;MAEE;IACI,qBAAqB,CAAC,OAAO,EAAE,GAAG;;;;;;IAKxC;;OAEG;IACG,mBAAmB,CAAC,OAAO,EAAE,GAAG;;;;;;IAKhC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B;;;;;;IAKD;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;;;;;;IAKD;;OAEG;IACG,mBAAmB,CAAC,OAAO,EAAE;QACjC,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB;;;;;;IAID;;OAEG;IACG,uBAAuB,CAAC,OAAO,EAAE;QACrC,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC9B;;;;;;IAID;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf;;;;;;IAID;;OAEG;IACG,oBAAoB;;;;;;IAIpB,GAAG;CA2FV"}
@@ -24,7 +24,7 @@ import type { FileOperationsService } from './FileOperationsService.js';
24
24
  export interface PersistedActivation {
25
25
  /** Element name (human-readable, used for all types) */
26
26
  name: string;
27
- /** For personas only: the filename key used by PersonaManager */
27
+ /** Stable filename for element types whose display names may change */
28
28
  filename?: string;
29
29
  /** ISO-8601 timestamp of when activation was persisted */
30
30
  activatedAt: string;
@@ -79,11 +79,12 @@ export declare class ActivationStore {
79
79
  /**
80
80
  * Record an element deactivation. Fire-and-forget persist.
81
81
  */
82
- recordDeactivation(elementType: string, name: string): void;
82
+ recordDeactivation(elementType: string, name: string, filename?: string): void;
83
83
  /**
84
- * Remove a specific activation by name (used during restore to prune stale entries).
84
+ * Remove a specific activation by stable identity when available.
85
+ * Used during restore to prune stale entries.
85
86
  */
86
- removeStaleActivation(elementType: string, name: string): void;
87
+ removeStaleActivation(elementType: string, name: string, filename?: string): void;
87
88
  /**
88
89
  * Get all persisted activations for a given element type.
89
90
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ActivationStore.d.ts","sourceRoot":"","sources":["../../src/services/ActivationStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAQxE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AAYD,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;CACpD;AA4CD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,KAAK,CAA2B;gBAE5B,OAAO,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,MAAM;IAa7D;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoEjC;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA6B5E;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAoB3D;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9D;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAK1D;;;;;;;OAOG;IACG,6BAA6B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,EAAE,CAAC;YA6BtF,+BAA+B;YAS/B,4BAA4B;IAqB1C,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,6BAA6B;IAiBrC,OAAO,CAAC,4BAA4B;IAqBpC,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;;OAIG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAOhB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;YACW,OAAO;IAMrB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,0BAA0B;CAmBnC"}
1
+ {"version":3,"file":"ActivationStore.d.ts","sourceRoot":"","sources":["../../src/services/ActivationStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAQxE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AAYD,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;CACpD;AA4CD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,KAAK,CAA2B;gBAE5B,OAAO,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,MAAM;IAa7D;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoEjC;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAiD5E;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA4B9E;;;OAGG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAIjF;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAK1D;;;;;;;OAOG;IACG,6BAA6B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,EAAE,CAAC;YA6BtF,+BAA+B;YAS/B,4BAA4B;IAqB1C,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,6BAA6B;IAiBrC,OAAO,CAAC,4BAA4B;IAqBpC,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;;OAIG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAOhB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;YACW,OAAO;IAMrB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,0BAA0B;CAmBnC"}
@@ -185,11 +185,28 @@ export class ActivationStore {
185
185
  if (!this.state.activations[type]) {
186
186
  this.state.activations[type] = [];
187
187
  }
188
- // Deduplicate don't add if already present
188
+ // Deduplicate. Upgrade legacy name-only records when a stable filename is
189
+ // now available so future restarts survive external metadata renames.
189
190
  const existing = this.state.activations[type];
190
- const alreadyActive = existing.some(a => a.name === normalizedName);
191
- if (alreadyActive)
191
+ let activeRecord = normalizedFilename
192
+ ? existing.find(a => a.filename === normalizedFilename)
193
+ : undefined;
194
+ activeRecord ??= existing.find(a => a.name === normalizedName && (!normalizedFilename || !a.filename));
195
+ if (activeRecord) {
196
+ let changed = false;
197
+ if (activeRecord.name !== normalizedName) {
198
+ activeRecord.name = normalizedName;
199
+ changed = true;
200
+ }
201
+ if (normalizedFilename && activeRecord.filename !== normalizedFilename) {
202
+ activeRecord.filename = normalizedFilename;
203
+ changed = true;
204
+ }
205
+ if (changed) {
206
+ this.persistAsync();
207
+ }
192
208
  return;
209
+ }
193
210
  existing.push({
194
211
  name: normalizedName,
195
212
  ...(normalizedFilename ? { filename: normalizedFilename } : {}),
@@ -200,7 +217,7 @@ export class ActivationStore {
200
217
  /**
201
218
  * Record an element deactivation. Fire-and-forget persist.
202
219
  */
203
- recordDeactivation(elementType, name) {
220
+ recordDeactivation(elementType, name, filename) {
204
221
  if (!this.enabled)
205
222
  return;
206
223
  const type = normalizeType(elementType);
@@ -209,21 +226,30 @@ export class ActivationStore {
209
226
  const normalizedName = normalizeActivationIdentifier(name);
210
227
  if (!normalizedName)
211
228
  return;
229
+ const normalizedFilename = typeof filename === 'string'
230
+ ? normalizeActivationIdentifier(filename)
231
+ : undefined;
212
232
  const activations = this.state.activations[type];
213
233
  if (!activations)
214
234
  return;
215
235
  const initialLength = activations.length;
216
- this.state.activations[type] = activations.filter(a => a.name !== normalizedName);
236
+ this.state.activations[type] = activations.filter(a => {
237
+ const shouldRemove = normalizedFilename
238
+ ? a.filename === normalizedFilename || (!a.filename && a.name === normalizedName)
239
+ : a.name === normalizedName || a.filename === normalizedName;
240
+ return !shouldRemove;
241
+ });
217
242
  // Only persist if something actually changed
218
243
  if (this.state.activations[type].length !== initialLength) {
219
244
  this.persistAsync();
220
245
  }
221
246
  }
222
247
  /**
223
- * Remove a specific activation by name (used during restore to prune stale entries).
248
+ * Remove a specific activation by stable identity when available.
249
+ * Used during restore to prune stale entries.
224
250
  */
225
- removeStaleActivation(elementType, name) {
226
- this.recordDeactivation(elementType, name);
251
+ removeStaleActivation(elementType, name, filename) {
252
+ this.recordDeactivation(elementType, name, filename);
227
253
  }
228
254
  /**
229
255
  * Get all persisted activations for a given element type.
@@ -438,4 +464,4 @@ export class ActivationStore {
438
464
  }
439
465
  }
440
466
  }
441
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aXZhdGlvblN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FjdGl2YXRpb25TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixHQUVuQixNQUFNLHNCQUFzQixDQUFDO0FBOEI5Qiw0RUFBNEU7QUFDNUUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRXZGOzs7O0dBSUc7QUFDSCxNQUFNLGtCQUFrQixHQUEyQjtJQUNqRCxRQUFRLEVBQUUsU0FBUztJQUNuQixNQUFNLEVBQUUsT0FBTztJQUNmLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFLFFBQVE7SUFDbEIsU0FBUyxFQUFFLFVBQVU7Q0FDdEIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLFdBQW1CO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyw2QkFBNkIsQ0FBQyxLQUFhO0lBQ2xELE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFD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QUMsTUFBTSxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFFBQXlCO1FBQzFELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsMkVBQTJFLFFBQVEsQ0FBQyxTQUFTLDhDQUE4QyxRQUFRLENBQUMsZ0JBQWdCLG9DQUFvQyxDQUN6TSxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxDQUFDLElBQUksQ0FDVCxpQ0FBaUMsV0FBVywyR0FBMkcsUUFBUSxDQUFDLFNBQVMsWUFBWSxDQUN0TCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWN0aXZhdGlvbiBTdG9yZVxuICpcbiAqIFBlcnNpc3RzIHBlci1zZXNzaW9uIGVsZW1lbnQgYWN0aXZhdGlvbiBzdGF0ZSB0byBkaXNrLlxuICogRWFjaCBNQ1Agc2Vzc2lvbiAoaWRlbnRpZmllZCBieSBET0xMSE9VU0VfU0VTU0lPTl9JRCkgZ2V0cyBpdHMgb3duXG4gKiBhY3RpdmF0aW9uIGZpbGUgc28gY29uY3VycmVudCBzZXNzaW9ucyBtYWludGFpbiBpbmRlcGVuZGVudCBwcm9maWxlcy5cbiAqXG4gKiBGb2xsb3dzIHRoZSBEYW5nZXJab25lRW5mb3JjZXIgcGF0dGVybjpcbiAqIC0gREktbWFuYWdlZCBzaW5nbGV0b24gd2l0aCBGaWxlT3BlcmF0aW9uc1NlcnZpY2VcbiAqIC0gaW5pdGlhbGl6ZSgpIGxvYWRzIGZyb20gZGlzayAodG9sZXJhdGVzIG1pc3NpbmcvY29ycnVwdCBmaWxlcylcbiAqIC0gSW4tbWVtb3J5IHN0YXRlIGlzIHRoZSBob3QgcGF0aDsgZGlzayB3cml0ZXMgYXJlIGZpcmUtYW5kLWZvcmdldFxuICogLSBhdG9taWNXcml0ZUZpbGUgKHdyaXRlLXRvLXRlbXAgKyByZW5hbWUpIHByZXZlbnRzIHBhcnRpYWwgcmVhZHNcbiAqXG4gKiBGb3J3YXJkIGNvbXBhdGliaWxpdHk6IFRoZSB2ZXJzaW9uZWQgZmlsZSBmb3JtYXQgKHYxKSBjYW4gZXZvbHZlIHRvXG4gKiBpbmNsdWRlIHVzZXJJZCwgb3JnSWQsIGFuZCBhdWRpdCBmaWVsZHMgZm9yIG11bHRpLXVzZXIgSFRUUFMgbW9kZVxuICogd2l0aG91dCBicmVha2luZyBleGlzdGluZyBpbnN0YWxsYXRpb25zLlxuICpcbiAqIEBzaW5jZSB2Mi4wLjAgLSBJc3N1ZSAjNTk4XG4gKi9cblxuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHR5cGUgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7XG4gIHJlc29sdmVTZXNzaW9uSWRlbnRpdHksXG4gIFNFU1NJT05fSURfUEFUVEVSTixcbiAgdHlwZSBTZXNzaW9uSWRlbnRpdHksXG59IGZyb20gJy4vc2Vzc2lvbklkZW50aXR5LmpzJztcblxuLyoqXG4gKiBBIHBlcnNpc3RlZCBhY3RpdmF0aW9uIHJlY29yZCBmb3IgYSBzaW5nbGUgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJzaXN0ZWRBY3RpdmF0aW9uIHtcbiAgLyoqIEVsZW1lbnQgbmFtZSAoaHVtYW4tcmVhZGFibGUsIHVzZWQgZm9yIGFsbCB0eXBlcykgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogRm9yIHBlcnNvbmFzIG9ubHk6IHRoZSBmaWxlbmFtZSBrZXkgdXNlZCBieSBQZXJzb25hTWFuYWdlciAqL1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgLyoqIElTTy04NjAxIHRpbWVzdGFtcCBvZiB3aGVuIGFjdGl2YXRpb24gd2FzIHBlcnNpc3RlZCAqL1xuICBhY3RpdmF0ZWRBdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlcnNpc3RlZCBmaWxlIGZvcm1hdCAodmVyc2lvbmVkIGZvciBmb3J3YXJkIGNvbXBhdGliaWxpdHkpLlxuICovXG5pbnRlcmZhY2UgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlIHtcbiAgdmVyc2lvbjogbnVtYmVyO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgbGFzdFVwZGF0ZWQ6IHN0cmluZztcbiAgYWN0aXZhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3Qge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgbGFzdFVwZGF0ZWQ6IHN0cmluZztcbiAgYWN0aXZhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT47XG59XG5cbi8qKiBWYWxpZCBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBhY3RpdmF0aW9uIChzdG9yZWQgaW4gc2luZ3VsYXIgZm9ybSkgKi9cbmNvbnN0IEFDVElWQVRBQkxFX1RZUEVTID0gbmV3IFNldChbJ3BlcnNvbmEnLCAnc2tpbGwnLCAnYWdlbnQnLCAnbWVtb3J5JywgJ2Vuc2VtYmxlJ10pO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBlbGVtZW50IHR5cGUgdG8gc2luZ3VsYXIgZm9ybSBmb3IgY29uc2lzdGVudCBzdG9yYWdlLlxuICogRWxlbWVudFR5cGUgZW51bSB1c2VzIHBsdXJhbCAoJ3BlcnNvbmFzJywgJ3NraWxscycsIGV0Yy4pIGJ1dCB3ZVxuICogc3RvcmUgaW4gc2luZ3VsYXIgZm9ybSBmb3IgcmVhZGFiaWxpdHkgYW5kIGZvcndhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuY29uc3QgUExVUkFMX1RPX1NJTkdVTEFSOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBwZXJzb25hczogJ3BlcnNvbmEnLFxuICBza2lsbHM6ICdza2lsbCcsXG4gIGFnZW50czogJ2FnZW50JyxcbiAgbWVtb3JpZXM6ICdtZW1vcnknLFxuICBlbnNlbWJsZXM6ICdlbnNlbWJsZScsXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemVUeXBlKGVsZW1lbnRUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsb3dlciA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBQTFVSQUxfVE9fU0lOR1VMQVJbbG93ZXJdID8/IGxvd2VyO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHZhbHVlKS5ub3JtYWxpemVkQ29udGVudC50cmltKCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYWN0aXZhdGlvbiBwZXJzaXN0ZW5jZSBpcyBlbmFibGVkLlxuICovXG5mdW5jdGlvbiBpc1BlcnNpc3RlbmNlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgY29uc3QgZW52VmFsdWUgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQUNUSVZBVElPTl9QRVJTSVNURU5DRT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChlbnZWYWx1ZSA9PT0gJ2ZhbHNlJyB8fCBlbnZWYWx1ZSA9PT0gJzAnIHx8IGVudlZhbHVlID09PSAnbm8nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgZm9yIHRyYW5zaWVudCBkaXNrIGZhaWx1cmVzICovXG5jb25zdCBQRVJTSVNUX01BWF9SRVRSSUVTID0gMjtcblxuLyoqIERlbGF5IGJldHdlZW4gcmV0cnkgYXR0ZW1wdHMgaW4gbWlsbGlzZWNvbmRzICovXG5jb25zdCBQRVJTSVNUX1JFVFJZX0RFTEFZX01TID0gMTAwO1xuXG4vKipcbiAqIFBlci1zZXNzaW9uIGFjdGl2YXRpb24gc3RhdGUgcGVyc2lzdGVuY2UuXG4gKlxuICogUGVyc2lzdHMgZWxlbWVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGB+Ly5kb2xsaG91c2Uvc3RhdGUvYWN0aXZhdGlvbnMte3Nlc3Npb25JZH0uanNvbmAuXG4gKiBFYWNoIE1DUCBzZXNzaW9uIGlzIGlkZW50aWZpZWQgYnkgdGhlIGBET0xMSE9VU0VfU0VTU0lPTl9JRGAgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKlxuICogVGhyZWFkLXNhZmV0eSBub3RlOiBOb2RlLmpzIGlzIHNpbmdsZS10aHJlYWRlZCwgc28gTWFwIG9wZXJhdGlvbnMgYXJlIHNhZmUuXG4gKiBGb3IgbXVsdGktcHJvY2VzcyBkZXBsb3ltZW50cyAoZnV0dXJlIEhUVFBTKSwgY29uc2lkZXIgUmVkaXMgb3IgREIgYmFja2luZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIFNlc3Npb24gSUQgc2V0IHZpYSBlbnZpcm9ubWVudDpcbiAqIC8vIERPTExIT1VTRV9TRVNTSU9OX0lEPWNsYXVkZS1jb2RlXG4gKlxuICogY29uc3Qgc3RvcmUgPSBuZXcgQWN0aXZhdGlvblN0b3JlKGZpbGVPcHMpO1xuICogYXdhaXQgc3RvcmUuaW5pdGlhbGl6ZSgpOyAgLy8gbG9hZHMgfi8uZG9sbGhvdXNlL3N0YXRlL2FjdGl2YXRpb25zLWNsYXVkZS1jb2RlLmpzb25cbiAqXG4gKiBzdG9yZS5yZWNvcmRBY3RpdmF0aW9uKCdza2lsbCcsICdjb2RlLXJldmlld2VyJyk7XG4gKiBzdG9yZS5yZWNvcmRBY3RpdmF0aW9uKCdwZXJzb25hJywgJ0NyZWF0aXZlIERldicsICdjcmVhdGl2ZS1kZXYubWQnKTtcbiAqXG4gKiAvLyBPbiBuZXh0IHNlcnZlciBzdGFydCwgaW5pdGlhbGl6ZSgpIHJlc3RvcmVzIHRoZXNlIGFjdGl2YXRpb25zXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGl2YXRpb25TdG9yZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wczogRmlsZU9wZXJhdGlvbnNTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZVNlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3RQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIHN0YXRlOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGU7XG5cbiAgY29uc3RydWN0b3IoZmlsZU9wczogRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLCBzdGF0ZURpcj86IHN0cmluZykge1xuICAgIHRoaXMuZmlsZU9wcyA9IGZpbGVPcHM7XG4gICAgY29uc3QgaWRlbnRpdHkgPSByZXNvbHZlU2Vzc2lvbklkZW50aXR5KCk7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBpZGVudGl0eS5zZXNzaW9uSWQ7XG4gICAgdGhpcy5ydW50aW1lU2Vzc2lvbklkID0gaWRlbnRpdHkucnVudGltZVNlc3Npb25JZDtcbiAgICB0aGlzLmVuYWJsZWQgPSBpc1BlcnNpc3RlbmNlRW5hYmxlZCgpO1xuICAgIHRoaXMuc3RhdGVEaXIgPSBzdGF0ZURpciA/PyBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdzdGF0ZScpO1xuICAgIHRoaXMucGVyc2lzdFBhdGggPSBwYXRoLmpvaW4odGhpcy5zdGF0ZURpciwgYGFjdGl2YXRpb25zLSR7dGhpcy5zZXNzaW9uSWR9Lmpzb25gKTtcblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmNyZWF0ZUVtcHR5U3RhdGUoKTtcbiAgICB0aGlzLmxvZ1Jlc29sdmVkU2Vzc2lvbklkZW50aXR5KGlkZW50aXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHBlcnNpc3RlZCBhY3RpdmF0aW9ucyBmcm9tIGRpc2suXG4gICAqIENhbGwgb25jZSBhZnRlciBjb25zdHJ1Y3Rpb24gdG8gcmVzdG9yZSBzdGF0ZSBmcm9tIGEgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICogSWYgdGhlIGZpbGUgaXMgbWlzc2luZyBvciBjb3JydXB0LCBzdGFydHMgd2l0aCBlbXB0eSBhY3RpdmF0aW9ucy5cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0FjdGl2YXRpb25TdG9yZV0gUGVyc2lzdGVuY2UgZGlzYWJsZWQgdmlhIERPTExIT1VTRV9BQ1RJVkFUSU9OX1BFUlNJU1RFTkNFJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVPcHMucmVhZEZpbGUodGhpcy5wZXJzaXN0UGF0aCk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGU7XG5cbiAgICAgIGlmIChkYXRhLnZlcnNpb24gPT09IDEgJiYgZGF0YS5hY3RpdmF0aW9ucyAmJiB0eXBlb2YgZGF0YS5hY3RpdmF0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgYW5kIGxvYWQgb25seSBrbm93biBlbGVtZW50IHR5cGVzXG4gICAgICAgIGZvciAoY29uc3QgW3R5cGUsIGFjdGl2YXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhkYXRhLmFjdGl2YXRpb25zKSkge1xuICAgICAgICAgIGlmIChBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkgJiYgQXJyYXkuaXNBcnJheShhY3RpdmF0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPSBhY3RpdmF0aW9ucy5mbGF0TWFwKChhKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYSB8fCB0eXBlb2YgYS5uYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoYS5uYW1lKTtcbiAgICAgICAgICAgICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBhLmZpbGVuYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoYS5maWxlbmFtZSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLFxuICAgICAgICAgICAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5nZXRUb3RhbEFjdGl2YXRpb25Db3VudCgpO1xuICAgICAgICBpZiAodG90YWxDb3VudCA+IDApIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbQWN0aXZhdGlvblN0b3JlXSBSZXN0b3JlZCAke3RvdGFsQ291bnR9IGFjdGl2YXRpb24ocykgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9J2BcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ0FjdGl2YXRpb25TdG9yZS5pbml0aWFsaXplJyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBSZXN0b3JlZCAke3RvdGFsQ291bnR9IGFjdGl2YXRpb24ocykgZnJvbSBkaXNrIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfSdgLFxuICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgY291bnRzOiB0aGlzLmdldEFjdGl2YXRpb25Db3VudHMoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gTm8gYWN0aXZhdGlvbiBmaWxlIGZvdW5kIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfScsIHN0YXJ0aW5nIGZyZXNoYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybihgW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIGxvYWQgYWN0aXZhdGlvbiBmaWxlIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfScsIHN0YXJ0aW5nIGZyZXNoYCwgeyBlcnJvciB9KTtcblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgICAgc291cmNlOiAnQWN0aXZhdGlvblN0b3JlLmluaXRpYWxpemUnLFxuICAgICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gbG9hZCBhY3RpdmF0aW9uIGZpbGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9JyDigJQgc3RhcnRpbmcgZnJlc2ggKHBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbilgLFxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVycm9yOiBTdHJpbmcoZXJyb3IpLCBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgYW4gZWxlbWVudCBhY3RpdmF0aW9uLiBGaXJlLWFuZC1mb3JnZXQgcGVyc2lzdC5cbiAgICovXG4gIHJlY29yZEFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSByZXR1cm47XG5cbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKG5hbWUpO1xuICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0eXBlb2YgZmlsZW5hbWUgPT09ICdzdHJpbmcnXG4gICAgICA/IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0pIHtcbiAgICAgIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPSBbXTtcbiAgICB9XG5cbiAgICAvLyBEZWR1cGxpY2F0ZSDigJQgZG9uJ3QgYWRkIGlmIGFscmVhZHkgcHJlc2VudFxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSE7XG4gICAgY29uc3QgYWxyZWFkeUFjdGl2ZSA9IGV4aXN0aW5nLnNvbWUoYSA9PiBhLm5hbWUgPT09IG5vcm1hbGl6ZWROYW1lKTtcbiAgICBpZiAoYWxyZWFkeUFjdGl2ZSkgcmV0dXJuO1xuXG4gICAgZXhpc3RpbmcucHVzaCh7XG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgIGFjdGl2YXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhbiBlbGVtZW50IGRlYWN0aXZhdGlvbi4gRmlyZS1hbmQtZm9yZ2V0IHBlcnNpc3QuXG4gICAqL1xuICByZWNvcmREZWFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHR5cGUgPSBub3JtYWxpemVUeXBlKGVsZW1lbnRUeXBlKTtcbiAgICBpZiAoIUFDVElWQVRBQkxFX1RZUEVTLmhhcyh0eXBlKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIobmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgYWN0aXZhdGlvbnMgPSB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdO1xuICAgIGlmICghYWN0aXZhdGlvbnMpIHJldHVybjtcblxuICAgIGNvbnN0IGluaXRpYWxMZW5ndGggPSBhY3RpdmF0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSA9IGFjdGl2YXRpb25zLmZpbHRlcihhID0+IGEubmFtZSAhPT0gbm9ybWFsaXplZE5hbWUpO1xuXG4gICAgLy8gT25seSBwZXJzaXN0IGlmIHNvbWV0aGluZyBhY3R1YWxseSBjaGFuZ2VkXG4gICAgaWYgKHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0hLmxlbmd0aCAhPT0gaW5pdGlhbExlbmd0aCkge1xuICAgICAgdGhpcy5wZXJzaXN0QXN5bmMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgc3BlY2lmaWMgYWN0aXZhdGlvbiBieSBuYW1lICh1c2VkIGR1cmluZyByZXN0b3JlIHRvIHBydW5lIHN0YWxlIGVudHJpZXMpLlxuICAgKi9cbiAgcmVtb3ZlU3RhbGVBY3RpdmF0aW9uKGVsZW1lbnRUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRGVhY3RpdmF0aW9uKGVsZW1lbnRUeXBlLCBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHBlcnNpc3RlZCBhY3RpdmF0aW9ucyBmb3IgYSBnaXZlbiBlbGVtZW50IHR5cGUuXG4gICAqL1xuICBnZXRBY3RpdmF0aW9ucyhlbGVtZW50VHlwZTogc3RyaW5nKTogUGVyc2lzdGVkQWN0aXZhdGlvbltdIHtcbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPyBbLi4udGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSFdIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBwZXJzaXN0ZWQgYWN0aXZhdGlvbiBzbmFwc2hvdHMgZnJvbSBkaXNrIGZvciByZXBvcnRpbmcvZGlhZ25vc3RpY3MuXG4gICAqXG4gICAqIFRoaXMgaW50ZW50aW9uYWxseSBkb2VzIG5vdCBtdXRhdGUgdGhlIHN0b3JlJ3MgaW4tbWVtb3J5IHN0YXRlLCBhbmQgaXQgaXNcbiAgICogc2FmZSB0byBjYWxsIGZyb20gdGhlIHdlYiBjb25zb2xlIHRvIGluc3BlY3Qgb3RoZXIgc2Vzc2lvbnMnIHBlcnNpc3RlZFxuICAgKiBhY3RpdmF0aW9ucyB3aXRob3V0IGNoYW5naW5nIGxpdmUgcG9saWN5IGVuZm9yY2VtZW50IGZvciB0aGUgY3VycmVudFxuICAgKiBwcm9jZXNzLlxuICAgKi9cbiAgYXN5bmMgbGlzdFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZXMoc2Vzc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTxQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVTbmFwc2hvdFtdPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkU2Vzc2lvbklkID0gdHlwZW9mIHNlc3Npb25JZCA9PT0gJ3N0cmluZycgJiYgc2Vzc2lvbklkLnRyaW0oKVxuICAgICAgPyBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcihzZXNzaW9uSWQpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlbmFtZXMgPSBhd2FpdCB0aGlzLmdldFBlcnNpc3RlZEFjdGl2YXRpb25GaWxlbmFtZXMobm9ybWFsaXplZFNlc3Npb25JZCk7XG4gICAgICBjb25zdCBzdGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZmlsZW5hbWVzLm1hcChmaWxlbmFtZSA9PiB0aGlzLnJlYWRQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUoZmlsZW5hbWUpKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGVzXG4gICAgICAgIC5mbGF0TWFwKChzdGF0ZSkgPT4gKHN0YXRlID8gW3N0YXRlXSA6IFtdKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc2Vzc2lvbklkLmxvY2FsZUNvbXBhcmUoYi5zZXNzaW9uSWQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIGVudW1lcmF0ZSBhY3RpdmF0aW9uIHNuYXBzaG90cyBmb3IgcmVwb3J0aW5nJywge1xuICAgICAgICAgIHN0YXRlRGlyOiB0aGlzLnN0YXRlRGlyLFxuICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UGVyc2lzdGVkQWN0aXZhdGlvbkZpbGVuYW1lcyhzZXNzaW9uSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgcmV0dXJuIFtgYWN0aXZhdGlvbnMtJHtzZXNzaW9uSWR9Lmpzb25gXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlbmFtZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMuc3RhdGVEaXIpO1xuICAgIHJldHVybiBmaWxlbmFtZXMuZmlsdGVyKG5hbWUgPT4gL15hY3RpdmF0aW9ucy1bXi5dK1xcLmpzb24kL3UudGVzdChuYW1lKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8UGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3QgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5zdGF0ZURpciwgZmlsZW5hbWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVPcHMucmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlO1xuICAgICAgaWYgKCF0aGlzLmlzUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbklkLFxuICAgICAgICBsYXN0VXBkYXRlZDogZGF0YS5sYXN0VXBkYXRlZCxcbiAgICAgICAgYWN0aXZhdGlvbnM6IHRoaXMubm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbnMoZGF0YS5hY3RpdmF0aW9ucyksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvZ1NuYXBzaG90UmVhZEVycm9yKGZpbGVQYXRoLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGRhdGE6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRhLnZlcnNpb24gPT09IDFcbiAgICAgICYmIHR5cGVvZiBkYXRhLnNlc3Npb25JZCA9PT0gJ3N0cmluZydcbiAgICAgICYmIEJvb2xlYW4oZGF0YS5hY3RpdmF0aW9ucylcbiAgICAgICYmIHR5cGVvZiBkYXRhLmFjdGl2YXRpb25zID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbnMoYWN0aXZhdGlvbnM6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZVsnYWN0aXZhdGlvbnMnXSk6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW3R5cGUsIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGFjdGl2YXRpb25zKSkge1xuICAgICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkgfHwgIUFycmF5LmlzQXJyYXkoZW50cmllcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyaWVzID0gZW50cmllcy5mbGF0TWFwKChlbnRyeSkgPT4gdGhpcy5ub3JtYWxpemVQZXJzaXN0ZWRBY3RpdmF0aW9uKGVudHJ5KSk7XG4gICAgICBpZiAobm9ybWFsaXplZEVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBub3JtYWxpemVkW3R5cGVdID0gbm9ybWFsaXplZEVudHJpZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVBlcnNpc3RlZEFjdGl2YXRpb24oZW50cnk6IFBlcnNpc3RlZEFjdGl2YXRpb24gfCBudWxsIHwgdW5kZWZpbmVkKTogUGVyc2lzdGVkQWN0aXZhdGlvbltdIHtcbiAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5uYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZW50cnkubmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBlbnRyeS5maWxlbmFtZSA9PT0gJ3N0cmluZydcbiAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZW50cnkuZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBbe1xuICAgICAgLi4uZW50cnksXG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICB9XTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nU25hcHNob3RSZWFkRXJyb3IoZmlsZVBhdGg6IHN0cmluZywgZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoJ1tBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIHVucmVhZGFibGUgYWN0aXZhdGlvbiBzbmFwc2hvdCBkdXJpbmcgcmVwb3J0aW5nJywge1xuICAgICAgZmlsZVBhdGgsXG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vzc2lvbiBJRCB0aGlzIHN0b3JlIGlzIHNjb3BlZCB0by5cbiAgICovXG4gIGdldFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW50aW1lLXVuaXF1ZSBzZXNzaW9uIGlkZW50aWZpZXIgdXNlZCBmb3IgbGl2ZSBjb25zb2xlL3Nlc3Npb24gcmVnaXN0cnlcbiAgICogc3VyZmFjZXMgd2hlbiB0aGUgc3RhYmxlIHBlcnNpc3RlbmNlIGlkZW50aXR5IGlzIHNoYXJlZCBhY3Jvc3MgdW5uYW1lZFxuICAgKiBzZXNzaW9ucy5cbiAgICovXG4gIGdldFJ1bnRpbWVTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lU2Vzc2lvbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHBlcnNpc3RlbmNlIGlzIGVuYWJsZWQuXG4gICAqL1xuICBpc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgcGVyc2lzdGVkIGFjdGl2YXRpb25zLiBVc2VkIGZvciB0ZXN0aW5nIG9yIGFkbWluIHJlc2V0LlxuICAgKi9cbiAgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuY3JlYXRlRW1wdHlTdGF0ZSgpO1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMucGVyc2lzdEFzeW5jKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpcmUtYW5kLWZvcmdldCBwZXJzaXN0ZW5jZSB3aXRoIHJldHJ5IGZvciB0cmFuc2llbnQgZGlzayBmYWlsdXJlcy5cbiAgICogUmV0cmllcyB1cCB0byBQRVJTSVNUX01BWF9SRVRSSUVTIHRpbWVzIHdpdGggYSBzaG9ydCBkZWxheS5cbiAgICogRGlzayBmYWlsdXJlIGRvZXMgbm90IGJsb2NrIGFjdGl2YXRpb24gb3BlcmF0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgcGVyc2lzdEFzeW5jKCk6IHZvaWQge1xuICAgIHRoaXMucGVyc2lzdFdpdGhSZXRyeSgwKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBsb2dnZXIud2FybignW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIHBlcnNpc3QgYWN0aXZhdGlvbiBzdGF0ZSBhZnRlciByZXRyaWVzJywgeyBlcnJvciB9KTtcblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnRUxFTUVOVF9BQ1RJVkFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ0FjdGl2YXRpb25TdG9yZS5wZXJzaXN0QXN5bmMnLFxuICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIHBlcnNpc3QgYWN0aXZhdGlvbiBzdGF0ZSBmb3Igc2Vzc2lvbiAnJHt0aGlzLnNlc3Npb25JZH0nIGFmdGVyICR7UEVSU0lTVF9NQVhfUkVUUklFUyArIDF9IGF0dGVtcHRzIOKAlCBzdGF0ZSBjb250aW51ZXMgaW4tbWVtb3J5IG9ubHlgLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBlcnJvcjogU3RyaW5nKGVycm9yKSwgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byBwZXJzaXN0IHdpdGggcmV0cmllcyBmb3IgdHJhbnNpZW50IGZhaWx1cmVzIChlLmcuLCBFQlVTWSwgRUFHQUlOKS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGVyc2lzdFdpdGhSZXRyeShhdHRlbXB0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0KCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChhdHRlbXB0IDwgUEVSU0lTVF9NQVhfUkVUUklFUykge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgUEVSU0lTVF9SRVRSWV9ERUxBWV9NUykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0V2l0aFJldHJ5KGF0dGVtcHQgKyAxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSBjdXJyZW50IGFjdGl2YXRpb24gc3RhdGUgdG8gZGlzay5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGVyc2lzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMuc3RhdGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHRoaXMuZmlsZU9wcy53cml0ZUZpbGUodGhpcy5wZXJzaXN0UGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZSwgbnVsbCwgMikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFbXB0eVN0YXRlKCk6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGFjdGl2YXRpb25zOiB7fSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb3RhbEFjdGl2YXRpb25Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc3RhdGUuYWN0aXZhdGlvbnMpLnJlZHVjZShcbiAgICAgIChzdW0sIGFycikgPT4gc3VtICsgKGFycj8ubGVuZ3RoID8/IDApLCAwXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZhdGlvbkNvdW50cygpOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHtcbiAgICBjb25zdCBjb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFt0eXBlLCBhcnJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc3RhdGUuYWN0aXZhdGlvbnMpKSB7XG4gICAgICBpZiAoYXJyICYmIGFyci5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvdW50c1t0eXBlXSA9IGFyci5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudHM7XG4gIH1cblxuICBwcml2YXRlIGxvZ1Jlc29sdmVkU2Vzc2lvbklkZW50aXR5KGlkZW50aXR5OiBTZXNzaW9uSWRlbnRpdHkpOiB2b2lkIHtcbiAgICBjb25zdCByYXdFbnZWYWx1ZSA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9TRVNTSU9OX0lEPy50cmltKCk7XG4gICAgaWYgKGlkZW50aXR5LnNvdXJjZSA9PT0gJ2VudicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXJhd0VudlZhbHVlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFtBY3RpdmF0aW9uU3RvcmVdIE5vIERPTExIT1VTRV9TRVNTSU9OX0lEIHNldCDigJQgZGVyaXZlZCBzdGFibGUgc2Vzc2lvbiAnJHtpZGVudGl0eS5zZXNzaW9uSWR9JyBmcm9tIHdvcmtzcGFjZSBjb250ZXh0OyBydW50aW1lIHNlc3Npb24gJyR7aWRlbnRpdHkucnVudGltZVNlc3Npb25JZH0nIHJlbWFpbnMgdW5pcXVlIGZvciB0aGlzIHByb2Nlc3MuYFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIVNFU1NJT05fSURfUEFUVEVSTi50ZXN0KHJhd0VudlZhbHVlKSkge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGBJbnZhbGlkIERPTExIT1VTRV9TRVNTSU9OX0lEICcke3Jhd0VudlZhbHVlfScg4oCUIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgdGhlbiBhbHBoYW51bWVyaWMvaHlwaGVucy91bmRlcnNjb3JlcywgMS02NCBjaGFycy4gVXNpbmcgZGVyaXZlZCBzZXNzaW9uICcke2lkZW50aXR5LnNlc3Npb25JZH0nIGluc3RlYWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
467
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aXZhdGlvblN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FjdGl2YXRpb25TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixHQUVuQixNQUFNLHNCQUFzQixDQUFDO0FBOEI5Qiw0RUFBNEU7QUFDNUUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRXZGOzs7O0dBSUc7QUFDSCxNQUFNLGtCQUFrQixHQUEyQjtJQUNqRCxRQUFRLEVBQUUsU0FBUztJQUNuQixNQUFNLEVBQUUsT0FBTztJQUNmLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFLFFBQVE7SUFDbEIsU0FBUyxFQUFFLFVBQVU7Q0FDdEIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLFdBQW1CO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyw2QkFBNkIsQ0FBQyxLQUFhO0lBQ2xELE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsb0JBQW9CO0lBQzNCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEYsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxHQUFHLElBQUksUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELG1FQUFtRTtBQUNuRSxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUU5QixtREFBbUQ7QUFDbkQsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFFbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUNULE9BQU8sQ0FBd0I7SUFDL0IsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBUztJQUNsQixnQkFBZ0IsQ0FBUztJQUN6QixXQUFXLENBQVM7SUFDcEIsT0FBTyxDQUFVO0lBRTFCLEtBQUssQ0FBMkI7SUFFeEMsWUFBWSxPQUE4QixFQUFFLFFBQWlCO1FBQzNELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxlQUFlLElBQUksQ0FBQyxTQUFTLE9BQU8sQ0FBQyxDQUFDO1FBRWxGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFVBQVU7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkVBQTZFLENBQUMsQ0FBQztZQUM1RixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUE2QixDQUFDO1lBRTdELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ25GLDZDQUE2QztnQkFDN0MsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQ25FLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQzt3QkFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFOzRCQUN2RCxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRO2dDQUFFLE9BQU8sRUFBRSxDQUFDOzRCQUVoRCxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzdELElBQUksQ0FBQyxjQUFjO2dDQUFFLE9BQU8sRUFBRSxDQUFDOzRCQUUvQixNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRO2dDQUN2RCxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQ0FDM0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQzs0QkFFZCxPQUFPLENBQUM7b0NBQ04sR0FBRyxDQUFDO29DQUNKLElBQUksRUFBRSxjQUFjO29DQUNwQixHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQ0FDaEUsQ0FBQyxDQUFDO3dCQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQ1QsOEJBQThCLFVBQVUsK0JBQStCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FDekYsQ0FBQztvQkFFRixlQUFlLENBQUMsZ0JBQWdCLENBQUM7d0JBQy9CLElBQUksRUFBRSxtQkFBbUI7d0JBQ3pCLFFBQVEsRUFBRSxLQUFLO3dCQUNmLE1BQU0sRUFBRSw0QkFBNEI7d0JBQ3BDLE9BQU8sRUFBRSxZQUFZLFVBQVUseUNBQXlDLElBQUksQ0FBQyxTQUFTLEdBQUc7d0JBQ3pGLGNBQWMsRUFBRTs0QkFDZCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7NEJBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7eUJBQ25DO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSyxLQUErQixDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkQsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsSUFBSSxDQUFDLFNBQVMsbUJBQW1CLENBQUMsQ0FBQztZQUM3RyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxpRUFBaUUsSUFBSSxDQUFDLFNBQVMsbUJBQW1CLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUUzSCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7b0JBQy9CLElBQUksRUFBRSxtQkFBbUI7b0JBQ3pCLFFBQVEsRUFBRSxRQUFRO29CQUNsQixNQUFNLEVBQUUsNEJBQTRCO29CQUNwQyxPQUFPLEVBQUUsK0NBQStDLElBQUksQ0FBQyxTQUFTLCtDQUErQztvQkFDckgsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtpQkFDcEUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxXQUFtQixFQUFFLElBQVksRUFBRSxRQUFpQjtRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRTFCLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU87UUFDekMsTUFBTSxjQUFjLEdBQUcsNkJBQTZCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPO1FBQzVCLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxRQUFRLEtBQUssUUFBUTtZQUNyRCxDQUFDLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUVELDBFQUEwRTtRQUMxRSxzRUFBc0U7UUFDdEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFFLENBQUM7UUFDL0MsSUFBSSxZQUFZLEdBQUcsa0JBQWtCO1lBQ25DLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxrQkFBa0IsQ0FBQztZQUN2RCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsWUFBWSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDakMsQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDLGtCQUFrQixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUNsRSxDQUFDO1FBQ0YsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUN6QyxZQUFZLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztnQkFDbkMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNqQixDQUFDO1lBQ0QsSUFBSSxrQkFBa0IsSUFBSSxZQUFZLENBQUMsUUFBUSxLQUFLLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3ZFLFlBQVksQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUM7Z0JBQzNDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDakIsQ0FBQztZQUNELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDWixJQUFJLEVBQUUsY0FBYztZQUNwQixHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7U0FDdEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQixDQUFDLFdBQW1CLEVBQUUsSUFBWSxFQUFFLFFBQWlCO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFMUIsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTztRQUN6QyxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU87UUFDNUIsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRO1lBQ3JELENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUM7WUFDekMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUV6QixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsTUFBTSxZQUFZLEdBQUcsa0JBQWtCO2dCQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxrQkFBa0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQztnQkFDakYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssY0FBYyxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssY0FBYyxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCw2Q0FBNkM7UUFDN0MsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUUsQ0FBQyxNQUFNLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gscUJBQXFCLENBQUMsV0FBbUIsRUFBRSxJQUFZLEVBQUUsUUFBaUI7UUFDeEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLFdBQW1CO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2hGLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLDZCQUE2QixDQUFDLFNBQWtCO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksU0FBUyxDQUFDLElBQUksRUFBRTtZQUMzRSxDQUFDLENBQUMsNkJBQTZCLENBQUMsU0FBUyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxJQUFJLENBQUM7WUFDSCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDOUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUN2RSxDQUFDO1lBQ0YsT0FBTyxNQUFNO2lCQUNWLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUMxQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUssS0FBK0IsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3ZELE1BQU0sQ0FBQyxLQUFLLENBQUMsMEVBQTBFLEVBQUU7b0JBQ3ZGLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7aUJBQzlELENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU8sS0FBSyxDQUFDLCtCQUErQixDQUFDLFNBQWtCO1FBQzlELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsZUFBZSxTQUFTLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTyxLQUFLLENBQUMsNEJBQTRCLENBQUMsUUFBZ0I7UUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQTZCLENBQUM7WUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxPQUFPO2dCQUNMLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDbEUsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsSUFBOEI7UUFDL0QsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUM7ZUFDcEIsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVE7ZUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7ZUFDekIsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0lBRU8sNkJBQTZCLENBQUMsV0FBb0Q7UUFDeEYsTUFBTSxVQUFVLEdBQTBDLEVBQUUsQ0FBQztRQUU3RCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzVELFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRixJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLDRCQUE0QixDQUFDLEtBQTZDO1FBQ2hGLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUTtZQUMzRCxDQUFDLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUMvQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsT0FBTyxDQUFDO2dCQUNOLEdBQUcsS0FBSztnQkFDUixJQUFJLEVBQUUsY0FBYztnQkFDcEIsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDaEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsS0FBYztRQUMzRCxJQUFLLEtBQStCLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3ZELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyw0RUFBNEUsRUFBRTtZQUN6RixRQUFRO1lBQ1IsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDOUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxvRUFBb0UsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFN0YsZUFBZSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQixJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsTUFBTSxFQUFFLDhCQUE4QjtnQkFDdEMsT0FBTyxFQUFFLG1EQUFtRCxJQUFJLENBQUMsU0FBUyxXQUFXLG1CQUFtQixHQUFHLENBQUMsNENBQTRDO2dCQUN4SixjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO2FBQ3BFLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQWU7UUFDNUMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzFFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLE9BQU87UUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRCxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUM7WUFDVixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3JDLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDakQsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDMUMsQ0FBQztJQUNKLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDakUsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sMEJBQTBCLENBQUMsUUFBeUI7UUFDMUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM3RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDOUIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FDVCwyRUFBMkUsUUFBUSxDQUFDLFNBQVMsOENBQThDLFFBQVEsQ0FBQyxnQkFBZ0Isb0NBQW9DLENBQ3pNLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLENBQUMsSUFBSSxDQUNULGlDQUFpQyxXQUFXLDJHQUEyRyxRQUFRLENBQUMsU0FBUyxZQUFZLENBQ3RMLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBY3RpdmF0aW9uIFN0b3JlXG4gKlxuICogUGVyc2lzdHMgcGVyLXNlc3Npb24gZWxlbWVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGRpc2suXG4gKiBFYWNoIE1DUCBzZXNzaW9uIChpZGVudGlmaWVkIGJ5IERPTExIT1VTRV9TRVNTSU9OX0lEKSBnZXRzIGl0cyBvd25cbiAqIGFjdGl2YXRpb24gZmlsZSBzbyBjb25jdXJyZW50IHNlc3Npb25zIG1haW50YWluIGluZGVwZW5kZW50IHByb2ZpbGVzLlxuICpcbiAqIEZvbGxvd3MgdGhlIERhbmdlclpvbmVFbmZvcmNlciBwYXR0ZXJuOlxuICogLSBESS1tYW5hZ2VkIHNpbmdsZXRvbiB3aXRoIEZpbGVPcGVyYXRpb25zU2VydmljZVxuICogLSBpbml0aWFsaXplKCkgbG9hZHMgZnJvbSBkaXNrICh0b2xlcmF0ZXMgbWlzc2luZy9jb3JydXB0IGZpbGVzKVxuICogLSBJbi1tZW1vcnkgc3RhdGUgaXMgdGhlIGhvdCBwYXRoOyBkaXNrIHdyaXRlcyBhcmUgZmlyZS1hbmQtZm9yZ2V0XG4gKiAtIGF0b21pY1dyaXRlRmlsZSAod3JpdGUtdG8tdGVtcCArIHJlbmFtZSkgcHJldmVudHMgcGFydGlhbCByZWFkc1xuICpcbiAqIEZvcndhcmQgY29tcGF0aWJpbGl0eTogVGhlIHZlcnNpb25lZCBmaWxlIGZvcm1hdCAodjEpIGNhbiBldm9sdmUgdG9cbiAqIGluY2x1ZGUgdXNlcklkLCBvcmdJZCwgYW5kIGF1ZGl0IGZpZWxkcyBmb3IgbXVsdGktdXNlciBIVFRQUyBtb2RlXG4gKiB3aXRob3V0IGJyZWFraW5nIGV4aXN0aW5nIGluc3RhbGxhdGlvbnMuXG4gKlxuICogQHNpbmNlIHYyLjAuMCAtIElzc3VlICM1OThcbiAqL1xuXG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgdHlwZSB7IEZpbGVPcGVyYXRpb25zU2VydmljZSB9IGZyb20gJy4vRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZVNlc3Npb25JZGVudGl0eSxcbiAgU0VTU0lPTl9JRF9QQVRURVJOLFxuICB0eXBlIFNlc3Npb25JZGVudGl0eSxcbn0gZnJvbSAnLi9zZXNzaW9uSWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIEEgcGVyc2lzdGVkIGFjdGl2YXRpb24gcmVjb3JkIGZvciBhIHNpbmdsZSBlbGVtZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlcnNpc3RlZEFjdGl2YXRpb24ge1xuICAvKiogRWxlbWVudCBuYW1lIChodW1hbi1yZWFkYWJsZSwgdXNlZCBmb3IgYWxsIHR5cGVzKSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgZmlsZW5hbWUgZm9yIGVsZW1lbnQgdHlwZXMgd2hvc2UgZGlzcGxheSBuYW1lcyBtYXkgY2hhbmdlICovXG4gIGZpbGVuYW1lPzogc3RyaW5nO1xuICAvKiogSVNPLTg2MDEgdGltZXN0YW1wIG9mIHdoZW4gYWN0aXZhdGlvbiB3YXMgcGVyc2lzdGVkICovXG4gIGFjdGl2YXRlZEF0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGVyc2lzdGVkIGZpbGUgZm9ybWF0ICh2ZXJzaW9uZWQgZm9yIGZvcndhcmQgY29tcGF0aWJpbGl0eSkuXG4gKi9cbmludGVyZmFjZSBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUge1xuICB2ZXJzaW9uOiBudW1iZXI7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBsYXN0VXBkYXRlZDogc3RyaW5nO1xuICBhY3RpdmF0aW9uczogUmVjb3JkPHN0cmluZywgUGVyc2lzdGVkQWN0aXZhdGlvbltdPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVTbmFwc2hvdCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBsYXN0VXBkYXRlZDogc3RyaW5nO1xuICBhY3RpdmF0aW9uczogUmVjb3JkPHN0cmluZywgUGVyc2lzdGVkQWN0aXZhdGlvbltdPjtcbn1cblxuLyoqIFZhbGlkIGVsZW1lbnQgdHlwZXMgdGhhdCBzdXBwb3J0IGFjdGl2YXRpb24gKHN0b3JlZCBpbiBzaW5ndWxhciBmb3JtKSAqL1xuY29uc3QgQUNUSVZBVEFCTEVfVFlQRVMgPSBuZXcgU2V0KFsncGVyc29uYScsICdza2lsbCcsICdhZ2VudCcsICdtZW1vcnknLCAnZW5zZW1ibGUnXSk7XG5cbi8qKlxuICogTm9ybWFsaXplIGVsZW1lbnQgdHlwZSB0byBzaW5ndWxhciBmb3JtIGZvciBjb25zaXN0ZW50IHN0b3JhZ2UuXG4gKiBFbGVtZW50VHlwZSBlbnVtIHVzZXMgcGx1cmFsICgncGVyc29uYXMnLCAnc2tpbGxzJywgZXRjLikgYnV0IHdlXG4gKiBzdG9yZSBpbiBzaW5ndWxhciBmb3JtIGZvciByZWFkYWJpbGl0eSBhbmQgZm9yd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5jb25zdCBQTFVSQUxfVE9fU0lOR1VMQVI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHBlcnNvbmFzOiAncGVyc29uYScsXG4gIHNraWxsczogJ3NraWxsJyxcbiAgYWdlbnRzOiAnYWdlbnQnLFxuICBtZW1vcmllczogJ21lbW9yeScsXG4gIGVuc2VtYmxlczogJ2Vuc2VtYmxlJyxcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVR5cGUoZWxlbWVudFR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxvd2VyID0gZWxlbWVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIFBMVVJBTF9UT19TSU5HVUxBUltsb3dlcl0gPz8gbG93ZXI7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodmFsdWUpLm5vcm1hbGl6ZWRDb250ZW50LnRyaW0oKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhY3RpdmF0aW9uIHBlcnNpc3RlbmNlIGlzIGVuYWJsZWQuXG4gKi9cbmZ1bmN0aW9uIGlzUGVyc2lzdGVuY2VFbmFibGVkKCk6IGJvb2xlYW4ge1xuICBjb25zdCBlbnZWYWx1ZSA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9BQ1RJVkFUSU9OX1BFUlNJU1RFTkNFPy50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGVudlZhbHVlID09PSAnZmFsc2UnIHx8IGVudlZhbHVlID09PSAnMCcgfHwgZW52VmFsdWUgPT09ICdubycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBNYXhpbXVtIG51bWJlciBvZiByZXRyeSBhdHRlbXB0cyBmb3IgdHJhbnNpZW50IGRpc2sgZmFpbHVyZXMgKi9cbmNvbnN0IFBFUlNJU1RfTUFYX1JFVFJJRVMgPSAyO1xuXG4vKiogRGVsYXkgYmV0d2VlbiByZXRyeSBhdHRlbXB0cyBpbiBtaWxsaXNlY29uZHMgKi9cbmNvbnN0IFBFUlNJU1RfUkVUUllfREVMQVlfTVMgPSAxMDA7XG5cbi8qKlxuICogUGVyLXNlc3Npb24gYWN0aXZhdGlvbiBzdGF0ZSBwZXJzaXN0ZW5jZS5cbiAqXG4gKiBQZXJzaXN0cyBlbGVtZW50IGFjdGl2YXRpb24gc3RhdGUgdG8gYH4vLmRvbGxob3VzZS9zdGF0ZS9hY3RpdmF0aW9ucy17c2Vzc2lvbklkfS5qc29uYC5cbiAqIEVhY2ggTUNQIHNlc3Npb24gaXMgaWRlbnRpZmllZCBieSB0aGUgYERPTExIT1VTRV9TRVNTSU9OX0lEYCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqXG4gKiBUaHJlYWQtc2FmZXR5IG5vdGU6IE5vZGUuanMgaXMgc2luZ2xlLXRocmVhZGVkLCBzbyBNYXAgb3BlcmF0aW9ucyBhcmUgc2FmZS5cbiAqIEZvciBtdWx0aS1wcm9jZXNzIGRlcGxveW1lbnRzIChmdXR1cmUgSFRUUFMpLCBjb25zaWRlciBSZWRpcyBvciBEQiBiYWNraW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gU2Vzc2lvbiBJRCBzZXQgdmlhIGVudmlyb25tZW50OlxuICogLy8gRE9MTEhPVVNFX1NFU1NJT05fSUQ9Y2xhdWRlLWNvZGVcbiAqXG4gKiBjb25zdCBzdG9yZSA9IG5ldyBBY3RpdmF0aW9uU3RvcmUoZmlsZU9wcyk7XG4gKiBhd2FpdCBzdG9yZS5pbml0aWFsaXplKCk7ICAvLyBsb2FkcyB+Ly5kb2xsaG91c2Uvc3RhdGUvYWN0aXZhdGlvbnMtY2xhdWRlLWNvZGUuanNvblxuICpcbiAqIHN0b3JlLnJlY29yZEFjdGl2YXRpb24oJ3NraWxsJywgJ2NvZGUtcmV2aWV3ZXInKTtcbiAqIHN0b3JlLnJlY29yZEFjdGl2YXRpb24oJ3BlcnNvbmEnLCAnQ3JlYXRpdmUgRGV2JywgJ2NyZWF0aXZlLWRldi5tZCcpO1xuICpcbiAqIC8vIE9uIG5leHQgc2VydmVyIHN0YXJ0LCBpbml0aWFsaXplKCkgcmVzdG9yZXMgdGhlc2UgYWN0aXZhdGlvbnNcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQWN0aXZhdGlvblN0b3JlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlT3BzOiBGaWxlT3BlcmF0aW9uc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lU2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVyc2lzdFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgc3RhdGU6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZTtcblxuICBjb25zdHJ1Y3RvcihmaWxlT3BzOiBGaWxlT3BlcmF0aW9uc1NlcnZpY2UsIHN0YXRlRGlyPzogc3RyaW5nKSB7XG4gICAgdGhpcy5maWxlT3BzID0gZmlsZU9wcztcbiAgICBjb25zdCBpZGVudGl0eSA9IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkoKTtcbiAgICB0aGlzLnNlc3Npb25JZCA9IGlkZW50aXR5LnNlc3Npb25JZDtcbiAgICB0aGlzLnJ1bnRpbWVTZXNzaW9uSWQgPSBpZGVudGl0eS5ydW50aW1lU2Vzc2lvbklkO1xuICAgIHRoaXMuZW5hYmxlZCA9IGlzUGVyc2lzdGVuY2VFbmFibGVkKCk7XG4gICAgdGhpcy5zdGF0ZURpciA9IHN0YXRlRGlyID8/IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ3N0YXRlJyk7XG4gICAgdGhpcy5wZXJzaXN0UGF0aCA9IHBhdGguam9pbih0aGlzLnN0YXRlRGlyLCBgYWN0aXZhdGlvbnMtJHt0aGlzLnNlc3Npb25JZH0uanNvbmApO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuY3JlYXRlRW1wdHlTdGF0ZSgpO1xuICAgIHRoaXMubG9nUmVzb2x2ZWRTZXNzaW9uSWRlbnRpdHkoaWRlbnRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgcGVyc2lzdGVkIGFjdGl2YXRpb25zIGZyb20gZGlzay5cbiAgICogQ2FsbCBvbmNlIGFmdGVyIGNvbnN0cnVjdGlvbiB0byByZXN0b3JlIHN0YXRlIGZyb20gYSBwcmV2aW91cyBzZXNzaW9uLlxuICAgKiBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nIG9yIGNvcnJ1cHQsIHN0YXJ0cyB3aXRoIGVtcHR5IGFjdGl2YXRpb25zLlxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbQWN0aXZhdGlvblN0b3JlXSBQZXJzaXN0ZW5jZSBkaXNhYmxlZCB2aWEgRE9MTEhPVVNFX0FDVElWQVRJT05fUEVSU0lTVEVOQ0UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMuZmlsZU9wcy5yZWFkRmlsZSh0aGlzLnBlcnNpc3RQYXRoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZTtcblxuICAgICAgaWYgKGRhdGEudmVyc2lvbiA9PT0gMSAmJiBkYXRhLmFjdGl2YXRpb25zICYmIHR5cGVvZiBkYXRhLmFjdGl2YXRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBWYWxpZGF0ZSBhbmQgbG9hZCBvbmx5IGtub3duIGVsZW1lbnQgdHlwZXNcbiAgICAgICAgZm9yIChjb25zdCBbdHlwZSwgYWN0aXZhdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEuYWN0aXZhdGlvbnMpKSB7XG4gICAgICAgICAgaWYgKEFDVElWQVRBQkxFX1RZUEVTLmhhcyh0eXBlKSAmJiBBcnJheS5pc0FycmF5KGFjdGl2YXRpb25zKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSA9IGFjdGl2YXRpb25zLmZsYXRNYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFhIHx8IHR5cGVvZiBhLm5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gW107XG5cbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcihhLm5hbWUpO1xuICAgICAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWROYW1lKSByZXR1cm4gW107XG5cbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gdHlwZW9mIGEuZmlsZW5hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcihhLmZpbGVuYW1lKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgIHJldHVybiBbe1xuICAgICAgICAgICAgICAgIC4uLmEsXG4gICAgICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsXG4gICAgICAgICAgICAgICAgLi4uKG5vcm1hbGl6ZWRGaWxlbmFtZSA/IHsgZmlsZW5hbWU6IG5vcm1hbGl6ZWRGaWxlbmFtZSB9IDoge30pLFxuICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSB0aGlzLmdldFRvdGFsQWN0aXZhdGlvbkNvdW50KCk7XG4gICAgICAgIGlmICh0b3RhbENvdW50ID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFtBY3RpdmF0aW9uU3RvcmVdIFJlc3RvcmVkICR7dG90YWxDb3VudH0gYWN0aXZhdGlvbihzKSBmb3Igc2Vzc2lvbiAnJHt0aGlzLnNlc3Npb25JZH0nYFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnRUxFTUVOVF9BQ1RJVkFURUQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgc291cmNlOiAnQWN0aXZhdGlvblN0b3JlLmluaXRpYWxpemUnLFxuICAgICAgICAgICAgZGV0YWlsczogYFJlc3RvcmVkICR7dG90YWxDb3VudH0gYWN0aXZhdGlvbihzKSBmcm9tIGRpc2sgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9J2AsXG4gICAgICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICAgICAgICBjb3VudHM6IHRoaXMuZ2V0QWN0aXZhdGlvbkNvdW50cygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBObyBhY3RpdmF0aW9uIGZpbGUgZm91bmQgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9Jywgc3RhcnRpbmcgZnJlc2hgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBbQWN0aXZhdGlvblN0b3JlXSBGYWlsZWQgdG8gbG9hZCBhY3RpdmF0aW9uIGZpbGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9Jywgc3RhcnRpbmcgZnJlc2hgLCB7IGVycm9yIH0pO1xuXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnRUxFTUVOVF9BQ1RJVkFURUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgICBzb3VyY2U6ICdBY3RpdmF0aW9uU3RvcmUuaW5pdGlhbGl6ZScsXG4gICAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBsb2FkIGFjdGl2YXRpb24gZmlsZSBmb3Igc2Vzc2lvbiAnJHt0aGlzLnNlc3Npb25JZH0nIOKAlCBzdGFydGluZyBmcmVzaCAocG9zc2libGUgZGF0YSBjb3JydXB0aW9uKWAsXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgZXJyb3I6IFN0cmluZyhlcnJvciksIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhbiBlbGVtZW50IGFjdGl2YXRpb24uIEZpcmUtYW5kLWZvcmdldCBwZXJzaXN0LlxuICAgKi9cbiAgcmVjb3JkQWN0aXZhdGlvbihlbGVtZW50VHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGZpbGVuYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHR5cGUgPSBub3JtYWxpemVUeXBlKGVsZW1lbnRUeXBlKTtcbiAgICBpZiAoIUFDVElWQVRBQkxFX1RZUEVTLmhhcyh0eXBlKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIobmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBmaWxlbmFtZSA9PT0gJ3N0cmluZydcbiAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSkge1xuICAgICAgdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSA9IFtdO1xuICAgIH1cblxuICAgIC8vIERlZHVwbGljYXRlLiBVcGdyYWRlIGxlZ2FjeSBuYW1lLW9ubHkgcmVjb3JkcyB3aGVuIGEgc3RhYmxlIGZpbGVuYW1lIGlzXG4gICAgLy8gbm93IGF2YWlsYWJsZSBzbyBmdXR1cmUgcmVzdGFydHMgc3Vydml2ZSBleHRlcm5hbCBtZXRhZGF0YSByZW5hbWVzLlxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSE7XG4gICAgbGV0IGFjdGl2ZVJlY29yZCA9IG5vcm1hbGl6ZWRGaWxlbmFtZVxuICAgICAgPyBleGlzdGluZy5maW5kKGEgPT4gYS5maWxlbmFtZSA9PT0gbm9ybWFsaXplZEZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgYWN0aXZlUmVjb3JkID8/PSBleGlzdGluZy5maW5kKGEgPT5cbiAgICAgIGEubmFtZSA9PT0gbm9ybWFsaXplZE5hbWUgJiYgKCFub3JtYWxpemVkRmlsZW5hbWUgfHwgIWEuZmlsZW5hbWUpXG4gICAgKTtcbiAgICBpZiAoYWN0aXZlUmVjb3JkKSB7XG4gICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgaWYgKGFjdGl2ZVJlY29yZC5uYW1lICE9PSBub3JtYWxpemVkTmFtZSkge1xuICAgICAgICBhY3RpdmVSZWNvcmQubmFtZSA9IG5vcm1hbGl6ZWROYW1lO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChub3JtYWxpemVkRmlsZW5hbWUgJiYgYWN0aXZlUmVjb3JkLmZpbGVuYW1lICE9PSBub3JtYWxpemVkRmlsZW5hbWUpIHtcbiAgICAgICAgYWN0aXZlUmVjb3JkLmZpbGVuYW1lID0gbm9ybWFsaXplZEZpbGVuYW1lO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMucGVyc2lzdEFzeW5jKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXhpc3RpbmcucHVzaCh7XG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgIGFjdGl2YXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhbiBlbGVtZW50IGRlYWN0aXZhdGlvbi4gRmlyZS1hbmQtZm9yZ2V0IHBlcnNpc3QuXG4gICAqL1xuICByZWNvcmREZWFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSByZXR1cm47XG5cbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKG5hbWUpO1xuICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0eXBlb2YgZmlsZW5hbWUgPT09ICdzdHJpbmcnXG4gICAgICA/IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBhY3RpdmF0aW9ucyA9IHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV07XG4gICAgaWYgKCFhY3RpdmF0aW9ucykgcmV0dXJuO1xuXG4gICAgY29uc3QgaW5pdGlhbExlbmd0aCA9IGFjdGl2YXRpb25zLmxlbmd0aDtcbiAgICB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdID0gYWN0aXZhdGlvbnMuZmlsdGVyKGEgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkUmVtb3ZlID0gbm9ybWFsaXplZEZpbGVuYW1lXG4gICAgICAgID8gYS5maWxlbmFtZSA9PT0gbm9ybWFsaXplZEZpbGVuYW1lIHx8ICghYS5maWxlbmFtZSAmJiBhLm5hbWUgPT09IG5vcm1hbGl6ZWROYW1lKVxuICAgICAgICA6IGEubmFtZSA9PT0gbm9ybWFsaXplZE5hbWUgfHwgYS5maWxlbmFtZSA9PT0gbm9ybWFsaXplZE5hbWU7XG4gICAgICByZXR1cm4gIXNob3VsZFJlbW92ZTtcbiAgICB9KTtcblxuICAgIC8vIE9ubHkgcGVyc2lzdCBpZiBzb21ldGhpbmcgYWN0dWFsbHkgY2hhbmdlZFxuICAgIGlmICh0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdIS5sZW5ndGggIT09IGluaXRpYWxMZW5ndGgpIHtcbiAgICAgIHRoaXMucGVyc2lzdEFzeW5jKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHNwZWNpZmljIGFjdGl2YXRpb24gYnkgc3RhYmxlIGlkZW50aXR5IHdoZW4gYXZhaWxhYmxlLlxuICAgKiBVc2VkIGR1cmluZyByZXN0b3JlIHRvIHBydW5lIHN0YWxlIGVudHJpZXMuXG4gICAqL1xuICByZW1vdmVTdGFsZUFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRGVhY3RpdmF0aW9uKGVsZW1lbnRUeXBlLCBuYW1lLCBmaWxlbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBwZXJzaXN0ZWQgYWN0aXZhdGlvbnMgZm9yIGEgZ2l2ZW4gZWxlbWVudCB0eXBlLlxuICAgKi9cbiAgZ2V0QWN0aXZhdGlvbnMoZWxlbWVudFR5cGU6IHN0cmluZyk6IFBlcnNpc3RlZEFjdGl2YXRpb25bXSB7XG4gICAgY29uc3QgdHlwZSA9IG5vcm1hbGl6ZVR5cGUoZWxlbWVudFR5cGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdID8gWy4uLnRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0hXSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgcGVyc2lzdGVkIGFjdGl2YXRpb24gc25hcHNob3RzIGZyb20gZGlzayBmb3IgcmVwb3J0aW5nL2RpYWdub3N0aWNzLlxuICAgKlxuICAgKiBUaGlzIGludGVudGlvbmFsbHkgZG9lcyBub3QgbXV0YXRlIHRoZSBzdG9yZSdzIGluLW1lbW9yeSBzdGF0ZSwgYW5kIGl0IGlzXG4gICAqIHNhZmUgdG8gY2FsbCBmcm9tIHRoZSB3ZWIgY29uc29sZSB0byBpbnNwZWN0IG90aGVyIHNlc3Npb25zJyBwZXJzaXN0ZWRcbiAgICogYWN0aXZhdGlvbnMgd2l0aG91dCBjaGFuZ2luZyBsaXZlIHBvbGljeSBlbmZvcmNlbWVudCBmb3IgdGhlIGN1cnJlbnRcbiAgICogcHJvY2Vzcy5cbiAgICovXG4gIGFzeW5jIGxpc3RQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVzKHNlc3Npb25JZD86IHN0cmluZyk6IFByb21pc2U8UGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3RbXT4ge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFNlc3Npb25JZCA9IHR5cGVvZiBzZXNzaW9uSWQgPT09ICdzdHJpbmcnICYmIHNlc3Npb25JZC50cmltKClcbiAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoc2Vzc2lvbklkKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZW5hbWVzID0gYXdhaXQgdGhpcy5nZXRQZXJzaXN0ZWRBY3RpdmF0aW9uRmlsZW5hbWVzKG5vcm1hbGl6ZWRTZXNzaW9uSWQpO1xuICAgICAgY29uc3Qgc3RhdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGZpbGVuYW1lcy5tYXAoZmlsZW5hbWUgPT4gdGhpcy5yZWFkUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGZpbGVuYW1lKSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlc1xuICAgICAgICAuZmxhdE1hcCgoc3RhdGUpID0+IChzdGF0ZSA/IFtzdGF0ZV0gOiBbXSkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnNlc3Npb25JZC5sb2NhbGVDb21wYXJlKGIuc2Vzc2lvbklkKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1tBY3RpdmF0aW9uU3RvcmVdIEZhaWxlZCB0byBlbnVtZXJhdGUgYWN0aXZhdGlvbiBzbmFwc2hvdHMgZm9yIHJlcG9ydGluZycsIHtcbiAgICAgICAgICBzdGF0ZURpcjogdGhpcy5zdGF0ZURpcixcbiAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFBlcnNpc3RlZEFjdGl2YXRpb25GaWxlbmFtZXMoc2Vzc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGlmIChzZXNzaW9uSWQpIHtcbiAgICAgIHJldHVybiBbYGFjdGl2YXRpb25zLSR7c2Vzc2lvbklkfS5qc29uYF07XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZW5hbWVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnN0YXRlRGlyKTtcbiAgICByZXR1cm4gZmlsZW5hbWVzLmZpbHRlcihuYW1lID0+IC9eYWN0aXZhdGlvbnMtW14uXStcXC5qc29uJC91LnRlc3QobmFtZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZVNuYXBzaG90IHwgbnVsbD4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMuc3RhdGVEaXIsIGZpbGVuYW1lKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5maWxlT3BzLnJlYWRGaWxlKGZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZTtcbiAgICAgIGlmICghdGhpcy5pc1BlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZShkYXRhKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25JZCxcbiAgICAgICAgbGFzdFVwZGF0ZWQ6IGRhdGEubGFzdFVwZGF0ZWQsXG4gICAgICAgIGFjdGl2YXRpb25zOiB0aGlzLm5vcm1hbGl6ZVBlcnNpc3RlZEFjdGl2YXRpb25zKGRhdGEuYWN0aXZhdGlvbnMpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5sb2dTbmFwc2hvdFJlYWRFcnJvcihmaWxlUGF0aCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1BlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZShkYXRhOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0YS52ZXJzaW9uID09PSAxXG4gICAgICAmJiB0eXBlb2YgZGF0YS5zZXNzaW9uSWQgPT09ICdzdHJpbmcnXG4gICAgICAmJiBCb29sZWFuKGRhdGEuYWN0aXZhdGlvbnMpXG4gICAgICAmJiB0eXBlb2YgZGF0YS5hY3RpdmF0aW9ucyA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVBlcnNpc3RlZEFjdGl2YXRpb25zKGFjdGl2YXRpb25zOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVbJ2FjdGl2YXRpb25zJ10pOiBSZWNvcmQ8c3RyaW5nLCBQZXJzaXN0ZWRBY3RpdmF0aW9uW10+IHtcbiAgICBjb25zdCBub3JtYWxpemVkOiBSZWNvcmQ8c3RyaW5nLCBQZXJzaXN0ZWRBY3RpdmF0aW9uW10+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFt0eXBlLCBlbnRyaWVzXSBvZiBPYmplY3QuZW50cmllcyhhY3RpdmF0aW9ucykpIHtcbiAgICAgIGlmICghQUNUSVZBVEFCTEVfVFlQRVMuaGFzKHR5cGUpIHx8ICFBcnJheS5pc0FycmF5KGVudHJpZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkRW50cmllcyA9IGVudHJpZXMuZmxhdE1hcCgoZW50cnkpID0+IHRoaXMubm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbihlbnRyeSkpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbm9ybWFsaXplZFt0eXBlXSA9IG5vcm1hbGl6ZWRFbnRyaWVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVQZXJzaXN0ZWRBY3RpdmF0aW9uKGVudHJ5OiBQZXJzaXN0ZWRBY3RpdmF0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFBlcnNpc3RlZEFjdGl2YXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeSB8fCB0eXBlb2YgZW50cnkubmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGVudHJ5Lm5hbWUpO1xuICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0eXBlb2YgZW50cnkuZmlsZW5hbWUgPT09ICdzdHJpbmcnXG4gICAgICA/IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGVudHJ5LmZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gW3tcbiAgICAgIC4uLmVudHJ5LFxuICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsXG4gICAgICAuLi4obm9ybWFsaXplZEZpbGVuYW1lID8geyBmaWxlbmFtZTogbm9ybWFsaXplZEZpbGVuYW1lIH0gOiB7fSksXG4gICAgfV07XG4gIH1cblxuICBwcml2YXRlIGxvZ1NuYXBzaG90UmVhZEVycm9yKGZpbGVQYXRoOiBzdHJpbmcsIGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKCdbQWN0aXZhdGlvblN0b3JlXSBTa2lwcGluZyB1bnJlYWRhYmxlIGFjdGl2YXRpb24gc25hcHNob3QgZHVyaW5nIHJlcG9ydGluZycsIHtcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNlc3Npb24gSUQgdGhpcyBzdG9yZSBpcyBzY29wZWQgdG8uXG4gICAqL1xuICBnZXRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uSWQ7XG4gIH1cblxuICAvKipcbiAgICogUnVudGltZS11bmlxdWUgc2Vzc2lvbiBpZGVudGlmaWVyIHVzZWQgZm9yIGxpdmUgY29uc29sZS9zZXNzaW9uIHJlZ2lzdHJ5XG4gICAqIHN1cmZhY2VzIHdoZW4gdGhlIHN0YWJsZSBwZXJzaXN0ZW5jZSBpZGVudGl0eSBpcyBzaGFyZWQgYWNyb3NzIHVubmFtZWRcbiAgICogc2Vzc2lvbnMuXG4gICAqL1xuICBnZXRSdW50aW1lU2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucnVudGltZVNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwZXJzaXN0ZW5jZSBpcyBlbmFibGVkLlxuICAgKi9cbiAgaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIHBlcnNpc3RlZCBhY3RpdmF0aW9ucy4gVXNlZCBmb3IgdGVzdGluZyBvciBhZG1pbiByZXNldC5cbiAgICovXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmNyZWF0ZUVtcHR5U3RhdGUoKTtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlLWFuZC1mb3JnZXQgcGVyc2lzdGVuY2Ugd2l0aCByZXRyeSBmb3IgdHJhbnNpZW50IGRpc2sgZmFpbHVyZXMuXG4gICAqIFJldHJpZXMgdXAgdG8gUEVSU0lTVF9NQVhfUkVUUklFUyB0aW1lcyB3aXRoIGEgc2hvcnQgZGVsYXkuXG4gICAqIERpc2sgZmFpbHVyZSBkb2VzIG5vdCBibG9jayBhY3RpdmF0aW9uIG9wZXJhdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHBlcnNpc3RBc3luYygpOiB2b2lkIHtcbiAgICB0aGlzLnBlcnNpc3RXaXRoUmV0cnkoMCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tBY3RpdmF0aW9uU3RvcmVdIEZhaWxlZCB0byBwZXJzaXN0IGFjdGl2YXRpb24gc3RhdGUgYWZ0ZXIgcmV0cmllcycsIHsgZXJyb3IgfSk7XG5cbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdBY3RpdmF0aW9uU3RvcmUucGVyc2lzdEFzeW5jJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBwZXJzaXN0IGFjdGl2YXRpb24gc3RhdGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9JyBhZnRlciAke1BFUlNJU1RfTUFYX1JFVFJJRVMgKyAxfSBhdHRlbXB0cyDigJQgc3RhdGUgY29udGludWVzIGluLW1lbW9yeSBvbmx5YCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgZXJyb3I6IFN0cmluZyhlcnJvciksIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gcGVyc2lzdCB3aXRoIHJldHJpZXMgZm9yIHRyYW5zaWVudCBmYWlsdXJlcyAoZS5nLiwgRUJVU1ksIEVBR0FJTikuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcnNpc3RXaXRoUmV0cnkoYXR0ZW1wdDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGVyc2lzdCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoYXR0ZW1wdCA8IFBFUlNJU1RfTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIFBFUlNJU1RfUkVUUllfREVMQVlfTVMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdFdpdGhSZXRyeShhdHRlbXB0ICsgMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgY3VycmVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGRpc2suXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcnNpc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBhd2FpdCBmcy5ta2Rpcih0aGlzLnN0YXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCB0aGlzLmZpbGVPcHMud3JpdGVGaWxlKHRoaXMucGVyc2lzdFBhdGgsIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUsIG51bGwsIDIpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW1wdHlTdGF0ZSgpOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhY3RpdmF0aW9uczoge30sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG90YWxBY3RpdmF0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnN0YXRlLmFjdGl2YXRpb25zKS5yZWR1Y2UoXG4gICAgICAoc3VtLCBhcnIpID0+IHN1bSArIChhcnI/Lmxlbmd0aCA/PyAwKSwgMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2YXRpb25Db3VudHMoKTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB7XG4gICAgY29uc3QgY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgZm9yIChjb25zdCBbdHlwZSwgYXJyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnN0YXRlLmFjdGl2YXRpb25zKSkge1xuICAgICAgaWYgKGFyciAmJiBhcnIubGVuZ3RoID4gMCkge1xuICAgICAgICBjb3VudHNbdHlwZV0gPSBhcnIubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY291bnRzO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dSZXNvbHZlZFNlc3Npb25JZGVudGl0eShpZGVudGl0eTogU2Vzc2lvbklkZW50aXR5KTogdm9pZCB7XG4gICAgY29uc3QgcmF3RW52VmFsdWUgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfU0VTU0lPTl9JRD8udHJpbSgpO1xuICAgIGlmIChpZGVudGl0eS5zb3VyY2UgPT09ICdlbnYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFyYXdFbnZWYWx1ZSkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBbQWN0aXZhdGlvblN0b3JlXSBObyBET0xMSE9VU0VfU0VTU0lPTl9JRCBzZXQg4oCUIGRlcml2ZWQgc3RhYmxlIHNlc3Npb24gJyR7aWRlbnRpdHkuc2Vzc2lvbklkfScgZnJvbSB3b3Jrc3BhY2UgY29udGV4dDsgcnVudGltZSBzZXNzaW9uICcke2lkZW50aXR5LnJ1bnRpbWVTZXNzaW9uSWR9JyByZW1haW5zIHVuaXF1ZSBmb3IgdGhpcyBwcm9jZXNzLmBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFTRVNTSU9OX0lEX1BBVFRFUk4udGVzdChyYXdFbnZWYWx1ZSkpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgSW52YWxpZCBET0xMSE9VU0VfU0VTU0lPTl9JRCAnJHtyYXdFbnZWYWx1ZX0nIOKAlCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIHRoZW4gYWxwaGFudW1lcmljL2h5cGhlbnMvdW5kZXJzY29yZXMsIDEtNjQgY2hhcnMuIFVzaW5nIGRlcml2ZWQgc2Vzc2lvbiAnJHtpZGVudGl0eS5zZXNzaW9uSWR9JyBpbnN0ZWFkLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=