@dollhousemcp/mcp-server 2.0.13 → 2.0.15

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 (35) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/di/Container.d.ts.map +1 -1
  3. package/dist/di/Container.js +19 -9
  4. package/dist/elements/BaseElement.js +2 -2
  5. package/dist/elements/memories/Memory.d.ts.map +1 -1
  6. package/dist/elements/memories/Memory.js +3 -3
  7. package/dist/elements/skills/Skill.d.ts.map +1 -1
  8. package/dist/elements/skills/Skill.js +4 -4
  9. package/dist/elements/templates/Template.d.ts.map +1 -1
  10. package/dist/elements/templates/Template.js +4 -4
  11. package/dist/generated/version.d.ts +2 -2
  12. package/dist/generated/version.js +3 -3
  13. package/dist/handlers/ElementCRUDHandler.d.ts +10 -0
  14. package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
  15. package/dist/handlers/ElementCRUDHandler.js +123 -1
  16. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +1 -0
  17. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  18. package/dist/handlers/mcp-aql/MCPAQLHandler.js +31 -2
  19. package/dist/services/ActivationStore.d.ts +20 -0
  20. package/dist/services/ActivationStore.d.ts.map +1 -1
  21. package/dist/services/ActivationStore.js +104 -1
  22. package/dist/web/console/IngestRoutes.d.ts +1 -0
  23. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  24. package/dist/web/console/IngestRoutes.js +4 -1
  25. package/dist/web/console/UnifiedConsole.js +2 -1
  26. package/dist/web/public/permissions.css +224 -16
  27. package/dist/web/public/permissions.js +326 -63
  28. package/dist/web/public/sessions.js +218 -98
  29. package/dist/web/public/styles.css +15 -10
  30. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  31. package/dist/web/routes/permissionRoutes.js +57 -19
  32. package/dist/web/server.d.ts.map +1 -1
  33. package/dist/web/server.js +2 -1
  34. package/package.json +1 -1
  35. package/server.json +2 -2
@@ -113,6 +113,31 @@ export class ElementCRUDHandler {
113
113
  sanitizeMetadata(metadata) {
114
114
  return sanitizeMetadataRecord(metadata);
115
115
  }
116
+ normalizeLookupValue(value) {
117
+ return typeof value === 'string'
118
+ ? value.normalize('NFC').trim()
119
+ : '';
120
+ }
121
+ hasGatekeeperPolicy(metadata) {
122
+ return Boolean(metadata?.['gatekeeper']);
123
+ }
124
+ toPolicyElementType(type) {
125
+ const normalizedType = this.normalizeLookupValue(type).toLowerCase();
126
+ switch (normalizedType) {
127
+ case 'personas':
128
+ return 'persona';
129
+ case 'skills':
130
+ return 'skill';
131
+ case 'agents':
132
+ return 'agent';
133
+ case 'memories':
134
+ return 'memory';
135
+ case 'ensembles':
136
+ return 'ensemble';
137
+ default:
138
+ return normalizedType;
139
+ }
140
+ }
116
141
  /**
117
142
  * Create a new element
118
143
  * Extracted from index.ts:1492-1631 (140 lines - exact copy)
@@ -315,6 +340,22 @@ export class ElementCRUDHandler {
315
340
  catch (error) {
316
341
  logger.warn('Failed to gather active skills for policy evaluation', { error });
317
342
  }
343
+ try {
344
+ // Active agents (async)
345
+ const agents = await this.agentManager.getActiveAgents();
346
+ for (const agent of agents) {
347
+ const key = `agent:${agent.metadata.name}`;
348
+ seen.add(key);
349
+ result.push({
350
+ type: 'agent',
351
+ name: agent.metadata.name,
352
+ metadata: agent.metadata,
353
+ });
354
+ }
355
+ }
356
+ catch (error) {
357
+ logger.warn('Failed to gather active agents for policy evaluation', { error });
358
+ }
318
359
  try {
319
360
  // Active ensembles (async)
320
361
  const ensembles = await this.ensembleManager.getActiveEnsembles();
@@ -357,6 +398,87 @@ export class ElementCRUDHandler {
357
398
  }
358
399
  return result;
359
400
  }
401
+ async getPolicyElementsForReport(sessionId) {
402
+ const merged = new Map();
403
+ const addElement = (element, sessionIds = []) => {
404
+ if (!this.hasGatekeeperPolicy(element.metadata)) {
405
+ return;
406
+ }
407
+ const key = `${element.type}:${element.name}`;
408
+ const existing = merged.get(key);
409
+ if (existing) {
410
+ sessionIds.forEach(id => existing.sessionIds.add(id));
411
+ return;
412
+ }
413
+ merged.set(key, {
414
+ type: element.type,
415
+ name: element.name,
416
+ metadata: element.metadata,
417
+ sessionIds: new Set(sessionIds),
418
+ });
419
+ };
420
+ for (const activeElement of await this.getActiveElementsForPolicy()) {
421
+ addElement(activeElement, this.activationStore ? [this.activationStore.getSessionId()] : []);
422
+ }
423
+ if (this.activationStore?.isEnabled()) {
424
+ const persistedStates = await this.activationStore.listPersistedActivationStates(sessionId);
425
+ const catalogs = new Map();
426
+ const getCatalog = async (type) => {
427
+ const normalizedType = this.normalizeElementType(type);
428
+ if (!catalogs.has(normalizedType)) {
429
+ catalogs.set(normalizedType, (await this.getElements(normalizedType)));
430
+ }
431
+ return catalogs.get(normalizedType) ?? [];
432
+ };
433
+ const findPersistedElement = async (type, activation) => {
434
+ const catalog = await getCatalog(type);
435
+ const normalizedName = this.normalizeLookupValue(activation.name);
436
+ const normalizedFilename = this.normalizeLookupValue(activation.filename);
437
+ const found = catalog.find((element) => {
438
+ const metadata = element.metadata ?? {};
439
+ const elementName = this.normalizeLookupValue(metadata['name']);
440
+ const elementFilename = this.normalizeLookupValue(element.filename ?? metadata['filename'] ?? metadata['sourceFile']);
441
+ return elementName === normalizedName || (normalizedFilename !== '' && elementFilename === normalizedFilename);
442
+ });
443
+ if (!found?.metadata || !this.hasGatekeeperPolicy(found.metadata)) {
444
+ return null;
445
+ }
446
+ return {
447
+ type: this.toPolicyElementType(type),
448
+ name: found.metadata['name'] ?? activation.name,
449
+ metadata: found.metadata,
450
+ };
451
+ };
452
+ for (const state of persistedStates) {
453
+ await this.mergePersistedPolicyState(state, addElement, findPersistedElement);
454
+ }
455
+ }
456
+ return Array.from(merged.values()).map((entry) => ({
457
+ type: entry.type,
458
+ name: entry.name,
459
+ metadata: entry.metadata,
460
+ ...(entry.sessionIds.size > 0
461
+ ? { sessionIds: Array.from(entry.sessionIds).sort((a, b) => a.localeCompare(b)) }
462
+ : {}),
463
+ }));
464
+ }
465
+ async mergePersistedPolicyState(state, addElement, findPersistedElement) {
466
+ const pending = [];
467
+ for (const [type, activations] of Object.entries(state.activations)) {
468
+ for (const activation of activations ?? []) {
469
+ pending.push((async () => {
470
+ const found = await findPersistedElement(type, activation);
471
+ if (found) {
472
+ addElement(found, [state.sessionId]);
473
+ }
474
+ })());
475
+ }
476
+ }
477
+ if (pending.length === 0) {
478
+ return;
479
+ }
480
+ await Promise.allSettled(pending);
481
+ }
360
482
  async deactivateElement(name, type) {
361
483
  try {
362
484
  SecurityMonitor.logSecurityEvent({
@@ -733,4 +855,4 @@ export class ElementCRUDHandler {
733
855
  };
734
856
  }
735
857
  }
736
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudENSVURIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL0VsZW1lbnRDUlVESGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFvQixNQUFNLGtDQUFrQyxDQUFDO0FBT2pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxJQUFJLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGFBQWEsSUFBSSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxXQUFXLElBQUksa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsY0FBYyxJQUFJLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDM0YsT0FBTyxFQUFFLFlBQVksSUFBSSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsSUFBSSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxlQUFlLElBQUksc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUs5RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHeEUsT0FBTyxFQUNMLDBCQUEwQixFQUMxQix1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzNCLE1BQU0sdUJBQXVCLENBQUM7QUFPL0Is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QUFDO2dCQUM3QyxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsV0FBVyxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMvRSxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO3dCQUN2QixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7d0JBQ3ZCLENBQUMsQ0FBQywyQkFBMkI7aUJBQ2hDLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbGVtZW50Q1JVREhhbmRsZXIgLSBIYW5kbGVzIGFsbCBnZW5lcmljIGVsZW1lbnQgQ1JVRCBvcGVyYXRpb25zXG4gKlxuICogUHJvdmlkZXMgY3JlYXRlLCBlZGl0LCB2YWxpZGF0ZSwgYW5kIGRlbGV0ZSBvcGVyYXRpb25zIGZvciBhbGwgZWxlbWVudCB0eXBlc1xuICogKHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzLCBtZW1vcmllcykuXG4gKlxuICogVXNlcyBkZXBlbmRlbmN5IGluamVjdGlvbiBmb3IgYWxsIHNlcnZpY2VzOlxuICogLSBJbml0aWFsaXphdGlvblNlcnZpY2UgZm9yIHNldHVwIHRhc2tzXG4gKiAtIFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlIGZvciBwZXJzb25hIGluZGljYXRvciBmb3JtYXR0aW5nXG4gKiAtIEVsZW1lbnQgbWFuYWdlcnMgKFNraWxsTWFuYWdlciwgVGVtcGxhdGVNYW5hZ2VyLCBBZ2VudE1hbmFnZXIsIE1lbW9yeU1hbmFnZXIpXG4gKiAtIFBlcnNvbmFNYW5hZ2VyIGZvciBwZXJzb25hIG9wZXJhdGlvbnNcbiAqIC0gUG9ydGZvbGlvTWFuYWdlciBmb3IgcG9ydGZvbGlvIG9wZXJhdGlvbnNcbiAqXG4gKiBGSVg6IERNQ1AtU0VDLTAwNiAtIFNlY3VyaXR5IGF1ZGl0IHN1cHByZXNzaW9uXG4gKiBUaGlzIGhhbmRsZXIgZGVsZWdhdGVzIGFsbCBvcGVyYXRpb25zIHRvIHNwZWNpYWxpemVkIGVsZW1lbnQgbWFuYWdlcnMuXG4gKiBBdWRpdCBsb2dnaW5nIGhhcHBlbnMgaW4gdGhlIGVsZW1lbnQgbWFuYWdlcnMgdGhlbXNlbHZlcy5cbiAqIEBzZWN1cml0eS1hdWRpdC1zdXBwcmVzcyBETUNQLVNFQy0wMDZcbiAqL1xuXG5pbXBvcnQgeyBFbGVtZW50VHlwZSwgUG9ydGZvbGlvTWFuYWdlciB9IGZyb20gJy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IFNraWxsTWFuYWdlciB9IGZyb20gJy4uL2VsZW1lbnRzL3NraWxscy9pbmRleC5qcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tICcuLi9lbGVtZW50cy90ZW1wbGF0ZXMvVGVtcGxhdGVNYW5hZ2VyLmpzJztcbmltcG9ydCB7IFRlbXBsYXRlUmVuZGVyZXIgfSBmcm9tICcuLi91dGlscy9UZW1wbGF0ZVJlbmRlcmVyLmpzJztcbmltcG9ydCB7IEFnZW50TWFuYWdlciB9IGZyb20gJy4uL2VsZW1lbnRzL2FnZW50cy9BZ2VudE1hbmFnZXIuanMnO1xuaW1wb3J0IHsgTWVtb3J5TWFuYWdlciB9IGZyb20gJy4uL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeU1hbmFnZXIuanMnO1xuaW1wb3J0IHsgRW5zZW1ibGVNYW5hZ2VyIH0gZnJvbSAnLi4vZWxlbWVudHMvZW5zZW1ibGVzL0Vuc2VtYmxlTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudE5vdEZvdW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCBhcyBjcmVhdGVFbGVtZW50Q29tbWFuZCB9IGZyb20gJy4vZWxlbWVudC1jcnVkL2NyZWF0ZUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgZGVsZXRlRWxlbWVudCBhcyBkZWxldGVFbGVtZW50Q29tbWFuZCB9IGZyb20gJy4vZWxlbWVudC1jcnVkL2RlbGV0ZUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgZWRpdEVsZW1lbnQgYXMgZWRpdEVsZW1lbnRDb21tYW5kIH0gZnJvbSAnLi9lbGVtZW50LWNydWQvZWRpdEVsZW1lbnQuanMnO1xuaW1wb3J0IHsgdXBncmFkZUVsZW1lbnQgYXMgdXBncmFkZUVsZW1lbnRDb21tYW5kIH0gZnJvbSAnLi9lbGVtZW50LWNydWQvdXBncmFkZUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgbGlzdEVsZW1lbnRzIGFzIGxpc3RFbGVtZW50c0NvbW1hbmQgfSBmcm9tICcuL2VsZW1lbnQtY3J1ZC9saXN0RWxlbWVudHMuanMnO1xuaW1wb3J0IHsgZmluZEVsZW1lbnRGbGV4aWJseSwgc2FuaXRpemVNZXRhZGF0YSBhcyBzYW5pdGl6ZU1ldGFkYXRhUmVjb3JkIH0gZnJvbSAnLi9lbGVtZW50LWNydWQvaGVscGVycy5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUVsZW1lbnQgYXMgdmFsaWRhdGVFbGVtZW50Q29tbWFuZCB9IGZyb20gJy4vZWxlbWVudC1jcnVkL3ZhbGlkYXRlRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Q3J1ZENvbnRleHQgfSBmcm9tICcuL2VsZW1lbnQtY3J1ZC90eXBlcy5qcyc7XG5pbXBvcnQgeyBJbml0aWFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9Jbml0aWFsaXphdGlvblNlcnZpY2UuanMnO1xuaW1wb3J0IHsgUGVyc29uYUluZGljYXRvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9QZXJzb25hSW5kaWNhdG9yU2VydmljZS5qcyc7XG5pbXBvcnQgeyBQZXJzb25hTWFuYWdlciB9IGZyb20gJy4uL3BlcnNvbmEvUGVyc29uYU1hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IEVMRU1FTlRfVFlQRV9NQVAgfSBmcm9tICcuLi91dGlscy9lbGVtZW50VHlwZU5vcm1hbGl6YXRpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBJRmlsZU9wZXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLmpzJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudEFjdGl2YXRpb25TdHJhdGVneSwgTUNQUmVzcG9uc2UgfSBmcm9tICcuL3N0cmF0ZWdpZXMvaW5kZXguanMnO1xuaW1wb3J0IHtcbiAgVGVtcGxhdGVBY3RpdmF0aW9uU3RyYXRlZ3ksXG4gIFNraWxsQWN0aXZhdGlvblN0cmF0ZWd5LFxuICBBZ2VudEFjdGl2YXRpb25TdHJhdGVneSxcbiAgTWVtb3J5QWN0aXZhdGlvblN0cmF0ZWd5LFxuICBQZXJzb25hQWN0aXZhdGlvblN0cmF0ZWd5LFxuICBFbnNlbWJsZUFjdGl2YXRpb25TdHJhdGVneVxufSBmcm9tICcuL3N0cmF0ZWdpZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgRWxlbWVudFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L0VsZW1lbnRRdWVyeVNlcnZpY2UuanMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlZ2lzdHJ5IH0gZnJvbSAnLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uUmVnaXN0cnkuanMnO1xuaW1wb3J0IHR5cGUgeyBBY3RpdmF0aW9uU3RvcmUgfSBmcm9tICcuLi9zZXJ2aWNlcy9BY3RpdmF0aW9uU3RvcmUuanMnO1xuaW1wb3J0IHR5cGUgeyBCYWNrdXBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvQmFja3VwU2VydmljZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFBvbGljeUV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLmpzJztcbmltcG9ydCB0eXBlIHsgQmFzZUVsZW1lbnRNYW5hZ2VyIH0gZnJvbSAnLi4vZWxlbWVudHMvYmFzZS9CYXNlRWxlbWVudE1hbmFnZXIuanMnO1xuaW1wb3J0IHsgZm9ybWF0VmFsaWRhdGlvbkZhaWxlZEVycm9yIH0gZnJvbSAnLi9lbGVtZW50LWNydWQvcmVzcG9uc2VGb3JtYXR0ZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudENSVURIYW5kbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdHJhdGVnaWVzOiBNYXA8c3RyaW5nLCBFbGVtZW50QWN0aXZhdGlvblN0cmF0ZWd5PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNraWxsTWFuYWdlcjogU2tpbGxNYW5hZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVtcGxhdGVNYW5hZ2VyOiBUZW1wbGF0ZU1hbmFnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVJlbmRlcmVyOiBUZW1wbGF0ZVJlbmRlcmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWdlbnRNYW5hZ2VyOiBBZ2VudE1hbmFnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW1vcnlNYW5hZ2VyOiBNZW1vcnlNYW5hZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW5zZW1ibGVNYW5hZ2VyOiBFbnNlbWJsZU1hbmFnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJzb25hTWFuYWdlcjogUGVyc29uYU1hbmFnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0Zm9saW9NYW5hZ2VyOiBQb3J0Zm9saW9NYW5hZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5pdFNlcnZpY2U6IEluaXRpYWxpemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluZGljYXRvclNlcnZpY2U6IFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UXVlcnlTZXJ2aWNlOiBFbGVtZW50UXVlcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdGlvblJlZ2lzdHJ5OiBWYWxpZGF0aW9uUmVnaXN0cnksXG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmF0aW9uU3RvcmU/OiBBY3RpdmF0aW9uU3RvcmUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBiYWNrdXBTZXJ2aWNlPzogQmFja3VwU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvbGljeUV4cG9ydFNlcnZpY2U/OiBQb2xpY3lFeHBvcnRTZXJ2aWNlXG4gICkge1xuICAgIC8vIEluaXRpYWxpemUgc3RyYXRlZ3kgbWFwIHdpdGggYWxsIGVsZW1lbnQgdHlwZSBzdHJhdGVnaWVzXG4gICAgdGhpcy5zdHJhdGVnaWVzID0gbmV3IE1hcDxzdHJpbmcsIEVsZW1lbnRBY3RpdmF0aW9uU3RyYXRlZ3k+KFtcbiAgICAgIFtFbGVtZW50VHlwZS5QRVJTT05BLCBuZXcgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneShwZXJzb25hTWFuYWdlciwgaW5kaWNhdG9yU2VydmljZSldLFxuICAgICAgW0VsZW1lbnRUeXBlLlNLSUxMLCBuZXcgU2tpbGxBY3RpdmF0aW9uU3RyYXRlZ3koc2tpbGxNYW5hZ2VyKV0sXG4gICAgICBbRWxlbWVudFR5cGUuVEVNUExBVEUsIG5ldyBUZW1wbGF0ZUFjdGl2YXRpb25TdHJhdGVneSh0ZW1wbGF0ZU1hbmFnZXIpXSxcbiAgICAgIFtFbGVtZW50VHlwZS5BR0VOVCwgbmV3IEFnZW50QWN0aXZhdGlvblN0cmF0ZWd5KGFnZW50TWFuYWdlcildLFxuICAgICAgW0VsZW1lbnRUeXBlLk1FTU9SWSwgbmV3IE1lbW9yeUFjdGl2YXRpb25TdHJhdGVneShtZW1vcnlNYW5hZ2VyKV0sXG4gICAgICBbRWxlbWVudFR5cGUuRU5TRU1CTEUsIG5ldyBFbnNlbWJsZUFjdGl2YXRpb25TdHJhdGVneShcbiAgICAgICAgZW5zZW1ibGVNYW5hZ2VyLFxuICAgICAgICBwb3J0Zm9saW9NYW5hZ2VyLFxuICAgICAgICBza2lsbE1hbmFnZXIsXG4gICAgICAgIHRlbXBsYXRlTWFuYWdlcixcbiAgICAgICAgYWdlbnRNYW5hZ2VyLFxuICAgICAgICBtZW1vcnlNYW5hZ2VyLFxuICAgICAgICBwZXJzb25hTWFuYWdlclxuICAgICAgKV1cbiAgICBdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlSW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0U2VydmljZS5lbnN1cmVJbml0aWFsaXplZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJzb25hSW5kaWNhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHQoKTogRWxlbWVudENydWRDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5zdXJlSW5pdGlhbGl6ZWQ6ICgpID0+IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSxcbiAgICAgIGdldFBlcnNvbmFJbmRpY2F0b3I6ICgpID0+IHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpLFxuICAgICAgc2tpbGxNYW5hZ2VyOiB0aGlzLnNraWxsTWFuYWdlcixcbiAgICAgIHRlbXBsYXRlTWFuYWdlcjogdGhpcy50ZW1wbGF0ZU1hbmFnZXIsXG4gICAgICB0ZW1wbGF0ZVJlbmRlcmVyOiB0aGlzLnRlbXBsYXRlUmVuZGVyZXIsXG4gICAgICBhZ2VudE1hbmFnZXI6IHRoaXMuYWdlbnRNYW5hZ2VyLFxuICAgICAgbWVtb3J5TWFuYWdlcjogdGhpcy5tZW1vcnlNYW5hZ2VyLFxuICAgICAgZW5zZW1ibGVNYW5hZ2VyOiB0aGlzLmVuc2VtYmxlTWFuYWdlcixcbiAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucG9ydGZvbGlvTWFuYWdlcixcbiAgICAgIHBlcnNvbmFNYW5hZ2VyOiB0aGlzLnBlcnNvbmFNYW5hZ2VyLFxuICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMuZmlsZU9wZXJhdGlvbnMsXG4gICAgICBlbGVtZW50UXVlcnlTZXJ2aWNlOiB0aGlzLmVsZW1lbnRRdWVyeVNlcnZpY2UsXG4gICAgICB2YWxpZGF0aW9uUmVnaXN0cnk6IHRoaXMudmFsaWRhdGlvblJlZ2lzdHJ5LFxuICAgICAgYmFja3VwU2VydmljZTogdGhpcy5iYWNrdXBTZXJ2aWNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbiBlbGVtZW50IGJ5IG5hbWUsIHN1cHBvcnRpbmcgYm90aCBleGFjdCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lIChzbHVnKSBtYXRjaGluZ1xuICAgKiBIZWxwZXIgbWV0aG9kIGV4dHJhY3RlZCBmcm9tIGluZGV4LnRzOjM0Ni0zNzlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmluZEVsZW1lbnRGbGV4aWJseShuYW1lOiBzdHJpbmcsIGVsZW1lbnRMaXN0OiBhbnlbXSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIGZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgZWxlbWVudExpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplIG1ldGFkYXRhIG9iamVjdCB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICogSGVscGVyIG1ldGhvZCBleHRyYWN0ZWQgZnJvbSBpbmRleC50czozOTAtNDEwXG4gICAqL1xuICBwcml2YXRlIHNhbml0aXplTWV0YWRhdGEobWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gc2FuaXRpemVNZXRhZGF0YVJlY29yZChtZXRhZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGVsZW1lbnRcbiAgICogRXh0cmFjdGVkIGZyb20gaW5kZXgudHM6MTQ5Mi0xNjMxICgxNDAgbGluZXMgLSBleGFjdCBjb3B5KVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmc7IGNvbnRlbnQ/OiBzdHJpbmc7IGluc3RydWN0aW9ucz86IHN0cmluZzsgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+fSkge1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50Q29tbWFuZCh0aGlzLmdldENvbnRleHQoKSwgYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogRWRpdCBhbiBleGlzdGluZyBlbGVtZW50IHVzaW5nIEdyYXBoUUwtYWxpZ25lZCBuZXN0ZWQgaW5wdXQgb2JqZWN0cy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYXdhaXQgaGFuZGxlci5lZGl0RWxlbWVudCh7XG4gICAqICAgbmFtZTogJ215LXNraWxsJyxcbiAgICogICB0eXBlOiAnc2tpbGxzJyxcbiAgICogICBpbnB1dDoge1xuICAgKiAgICAgZGVzY3JpcHRpb246ICdVcGRhdGVkJyxcbiAgICogICAgIG1ldGFkYXRhOiB7IHRyaWdnZXJzOiBbJ2NvZGUnXSB9XG4gICAqICAgfVxuICAgKiB9KTtcbiAgICovXG4gIGFzeW5jIGVkaXRFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+fSkge1xuICAgIHJldHVybiBlZGl0RWxlbWVudENvbW1hbmQodGhpcy5nZXRDb250ZXh0KCksIGFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZ3JhZGUgZWxlbWVudCBmcm9tIHYxIHNpbmdsZS1ib2R5IHRvIHYyIGR1YWwtZmllbGQgZm9ybWF0IChpbnN0cnVjdGlvbnMgKyBjb250ZW50KVxuICAgKi9cbiAgYXN5bmMgdXBncmFkZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkcnlfcnVuPzogYm9vbGVhbjsgaW5zdHJ1Y3Rpb25zX292ZXJyaWRlPzogc3RyaW5nOyBjb250ZW50X292ZXJyaWRlPzogc3RyaW5nfSkge1xuICAgIHJldHVybiB1cGdyYWRlRWxlbWVudENvbW1hbmQodGhpcy5nZXRDb250ZXh0KCksIGFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuIGVsZW1lbnRcbiAgICogRXh0cmFjdGVkIGZyb20gaW5kZXgudHM6MTk0MS0yMDU0ICgxMTQgbGluZXMgLSBleGFjdCBjb3B5KVxuICAgKi9cbiAgYXN5bmMgdmFsaWRhdGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgc3RyaWN0PzogYm9vbGVhbn0pIHtcbiAgICByZXR1cm4gdmFsaWRhdGVFbGVtZW50Q29tbWFuZCh0aGlzLmdldENvbnRleHQoKSwgYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGFuIGVsZW1lbnRcbiAgICogRXh0cmFjdGVkIGZyb20gaW5kZXgudHM6MjA1Ni0yMzEwICgyNTUgbGluZXMgLSBleGFjdCBjb3B5LCBzcGxpdCBmb3IgcmVhZGFiaWxpdHkpXG4gICAqL1xuICBhc3luYyBkZWxldGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZGVsZXRlRGF0YT86IGJvb2xlYW59KSB7XG4gICAgcmV0dXJuIGRlbGV0ZUVsZW1lbnRDb21tYW5kKHRoaXMuZ2V0Q29udGV4dCgpLCBhcmdzKTtcbiAgfVxuXG4gIHB1YmxpYyBub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogc3RyaW5nIHtcbiAgICAvLyBJc3N1ZSAjNTAxOiBHdWFyZCBhZ2FpbnN0IG51bGwvdW5kZWZpbmVkIHRvIG1hdGNoIHNoYXJlZCB1dGlsaXR5IHBhdHRlcm5cbiAgICBpZiAodHlwZSA9PSBudWxsIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJyB8fCB0eXBlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBJZiBpdCdzIGFscmVhZHkgYSB2YWxpZCBFbGVtZW50VHlwZSB2YWx1ZSwgcmV0dXJuIGFzLWlzXG4gICAgaWYgKE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmluY2x1ZGVzKHR5cGUgYXMgRWxlbWVudFR5cGUpKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICAvLyBVc2Ugc2hhcmVkIG5vcm1hbGl6YXRpb24gbWFwIChJc3N1ZSAjNDMzKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBFTEVNRU5UX1RZUEVfTUFQW3R5cGUudHJpbSgpLnRvTG93ZXJDYXNlKCldO1xuICAgIGlmIChub3JtYWxpemVkKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICB9XG5cbiAgICAvLyBVbmtub3duIHR5cGUgLSByZXR1cm4gYXMtaXMgYW5kIGxldCB2YWxpZGF0aW9uIGhhbmRsZSBpdFxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgYXN5bmMgbGlzdEVsZW1lbnRzKHR5cGU6IHN0cmluZywgb3B0aW9ucz86IGltcG9ydCgnLi4vc2VydmljZXMvcXVlcnkvdHlwZXMuanMnKS5RdWVyeU9wdGlvbnMpIHtcbiAgICByZXR1cm4gbGlzdEVsZW1lbnRzQ29tbWFuZCh0aGlzLmdldENvbnRleHQoKSwgdHlwZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJhdyBlbGVtZW50cyBhcnJheSBmb3IgYSBnaXZlbiB0eXBlLlxuICAgKiBVbmxpa2UgbGlzdEVsZW1lbnRzIHdoaWNoIHJldHVybnMgTUNQUmVzcG9uc2UgZm9ybWF0LCB0aGlzIHJldHVybnMgcmF3IGVsZW1lbnQgb2JqZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBFbGVtZW50IHR5cGUgKHBlcnNvbmEsIHNraWxsLCB0ZW1wbGF0ZSwgYWdlbnQsIG1lbW9yeSwgZW5zZW1ibGUpXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHJhdyBlbGVtZW50IG9iamVjdHNcbiAgICovXG4gIGFzeW5jIGdldEVsZW1lbnRzKHR5cGU6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcblxuICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc29uYU1hbmFnZXIubGlzdCgpO1xuICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlTWFuYWdlci5saXN0KCk7XG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOlxuICAgICAgICByZXR1cm4gdGhpcy5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgICAgY2FzZSBFbGVtZW50VHlwZS5NRU1PUlk6XG4gICAgICAgIHJldHVybiB0aGlzLm1lbW9yeU1hbmFnZXIubGlzdCgpO1xuICAgICAgY2FzZSBFbGVtZW50VHlwZS5FTlNFTUJMRTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5zZW1ibGVNYW5hZ2VyLmxpc3QoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgZm9yIGVsZW1lbnQgYWN0aXZhdGlvblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnRUxFTUVOVF9BQ1RJVkFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0VsZW1lbnRDUlVESGFuZGxlci5hY3RpdmF0ZUVsZW1lbnQnLFxuICAgICAgICBkZXRhaWxzOiBgRWxlbWVudCBhY3RpdmF0aW9uIHJlcXVlc3RlZDogJHt0eXBlfS8ke25hbWV9YCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgZWxlbWVudFR5cGU6IHR5cGUsIGVsZW1lbnROYW1lOiBuYW1lLCBjb250ZXh0UHJvdmlkZWQ6ICEhY29udGV4dCB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLnN0cmF0ZWdpZXMuZ2V0KG5vcm1hbGl6ZWRUeXBlKTtcblxuICAgICAgaWYgKCFzdHJhdGVneSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0cmF0ZWd5LmFjdGl2YXRlKG5hbWUsIGNvbnRleHQpO1xuXG4gICAgICAvLyBJc3N1ZSAjNTk4OiBQZXJzaXN0IGFjdGl2YXRpb24gc3RhdGUgZm9yIHNlc3Npb24gcmVzdG9yZVxuICAgICAgaWYgKHRoaXMuYWN0aXZhdGlvblN0b3JlKSB7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gbm9ybWFsaXplZFR5cGUgPT09IEVsZW1lbnRUeXBlLlBFUlNPTkFcbiAgICAgICAgICA/IHRoaXMucGVyc29uYU1hbmFnZXIuZmluZFBlcnNvbmEobmFtZSk/LmZpbGVuYW1lXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYWN0aXZhdGlvblN0b3JlLnJlY29yZEFjdGl2YXRpb24obm9ybWFsaXplZFR5cGUsIG5hbWUsIGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgLy8gSXNzdWUgIzc2MjogRXhwb3J0IHBvbGljaWVzIHRvIGJyaWRnZSBhZnRlciBhY3RpdmF0aW9uXG4gICAgICB0aGlzLnBvbGljeUV4cG9ydFNlcnZpY2U/LmV4cG9ydFBvbGljaWVzKCkuY2F0Y2goKCkgPT4ge30pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBhY3RpdmF0ZSBlbGVtZW50OmAsIHsgdHlwZSwgbmFtZSwgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGFjdGl2YXRlICR7dHlwZX0gJyR7bmFtZX0nOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QWN0aXZlRWxlbWVudHModHlwZT86IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBJc3N1ZSAjNTAxOiBXaGVuIHR5cGUgaXMgb21pdHRlZCwgYWdncmVnYXRlIGFjdGl2ZSBlbGVtZW50cyBhY3Jvc3MgYWxsIHR5cGVzXG4gICAgICBpZiAoIXR5cGUgfHwgdHlwZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFnZ3JlZ2F0ZUFjdGl2ZUVsZW1lbnRzKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5zdHJhdGVnaWVzLmdldChub3JtYWxpemVkVHlwZSk7XG5cbiAgICAgIGlmICghc3RyYXRlZ3kpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgc3RyYXRlZ3kuZ2V0QWN0aXZlRWxlbWVudHMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSBlbGVtZW50czpgLCB7IHR5cGUsIGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBnZXQgYWN0aXZlICR7dHlwZSB8fCAnYWxsJ306ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJhdyBhY3RpdmUgZWxlbWVudHMgZm9yIEdhdGVrZWVwZXIgcG9saWN5IGV2YWx1YXRpb24uXG4gICAqIFJldHVybnMgYWN0aXZlIHBlcnNvbmFzLCBza2lsbHMsIGFuZCBlbnNlbWJsZXMgd2l0aCB0aGVpciBtZXRhZGF0YVxuICAgKiBtYXBwZWQgdG8gdGhlIHNoYXBlIGV4cGVjdGVkIGJ5IHRoZSBHYXRla2VlcGVyJ3MgQWN0aXZlRWxlbWVudCBpbnRlcmZhY2UuXG4gICAqXG4gICAqIElzc3VlICM0NTI6IFByb3ZpZGVzIGFjdGl2ZSBlbGVtZW50IGNvbnRleHQgZm9yIGVuZm9yY2UoKSBwb2xpY3kgY2hlY2tzLlxuICAgKi9cbiAgYXN5bmMgZ2V0QWN0aXZlRWxlbWVudHNGb3JQb2xpY3koKTogUHJvbWlzZTxBcnJheTx7IHR5cGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4+IHtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiA9IFtdO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBY3RpdmUgcGVyc29uYXMgKHN5bmMpXG4gICAgICBjb25zdCBwZXJzb25hcyA9IHRoaXMucGVyc29uYU1hbmFnZXIuZ2V0QWN0aXZlUGVyc29uYXMoKTtcbiAgICAgIGZvciAoY29uc3QgcCBvZiBwZXJzb25hcykge1xuICAgICAgICBjb25zdCBrZXkgPSBgcGVyc29uYToke3AubWV0YWRhdGEubmFtZX1gO1xuICAgICAgICBzZWVuLmFkZChrZXkpO1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ3BlcnNvbmEnLFxuICAgICAgICAgIG5hbWU6IHAubWV0YWRhdGEubmFtZSxcbiAgICAgICAgICBtZXRhZGF0YTogcC5tZXRhZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBnYXRoZXIgYWN0aXZlIHBlcnNvbmFzIGZvciBwb2xpY3kgZXZhbHVhdGlvbicsIHsgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEFjdGl2ZSBza2lsbHMgKGFzeW5jKVxuICAgICAgY29uc3Qgc2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIuZ2V0QWN0aXZlU2tpbGxzKCk7XG4gICAgICBmb3IgKGNvbnN0IHMgb2Ygc2tpbGxzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGBza2lsbDoke3MubWV0YWRhdGEubmFtZX1gO1xuICAgICAgICBzZWVuLmFkZChrZXkpO1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ3NraWxsJyxcbiAgICAgICAgICBuYW1lOiBzLm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHMubWV0YWRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gZ2F0aGVyIGFjdGl2ZSBza2lsbHMgZm9yIHBvbGljeSBldmFsdWF0aW9uJywgeyBlcnJvciB9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQWN0aXZlIGVuc2VtYmxlcyAoYXN5bmMpXG4gICAgICBjb25zdCBlbnNlbWJsZXMgPSBhd2FpdCB0aGlzLmVuc2VtYmxlTWFuYWdlci5nZXRBY3RpdmVFbnNlbWJsZXMoKTtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBlbnNlbWJsZXMpIHtcbiAgICAgICAgY29uc3QgZW5zZW1ibGVLZXkgPSBgZW5zZW1ibGU6JHtlLm1ldGFkYXRhLm5hbWV9YDtcbiAgICAgICAgc2Vlbi5hZGQoZW5zZW1ibGVLZXkpO1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2Vuc2VtYmxlJyxcbiAgICAgICAgICBuYW1lOiBlLm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgbWV0YWRhdGE6IGUubWV0YWRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSXNzdWUgIzYyNSBQaGFzZSA0OiBSZXNvbHZlIGVuc2VtYmxlIG1lbWJlciBnYXRla2VlcGVyIHBvbGljaWVzXG4gICAgICAgIGNvbnN0IG1lbWJlcnMgPSAoZS5tZXRhZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KT8uZWxlbWVudHMgYXNcbiAgICAgICAgICBBcnJheTx7IGVsZW1lbnRfbmFtZTogc3RyaW5nOyBlbGVtZW50X3R5cGU6IHN0cmluZyB9PiB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWVtYmVycykpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBtZW1iZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1iZXJLZXkgPSBgJHttZW1iZXIuZWxlbWVudF90eXBlfToke21lbWJlci5lbGVtZW50X25hbWV9YDtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhtZW1iZXJLZXkpKSBjb250aW51ZTsgLy8gQWxyZWFkeSBhY3RpdmUgaW5kaXZpZHVhbGx5XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBtZW1iZXJFbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudHMobWVtYmVyLmVsZW1lbnRfdHlwZSk7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gKG1lbWJlckVsZW1lbnRzIGFzIEFycmF5PHsgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+KS5maW5kKFxuICAgICAgICAgICAgICAgIGVsID0+IChlbD8ubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pPy5uYW1lID09PSBtZW1iZXIuZWxlbWVudF9uYW1lXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChmb3VuZD8ubWV0YWRhdGEgJiYgKGZvdW5kLm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KT8uZ2F0ZWtlZXBlcikge1xuICAgICAgICAgICAgICAgIHNlZW4uYWRkKG1lbWJlcktleSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgdHlwZTogbWVtYmVyLmVsZW1lbnRfdHlwZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IG1lbWJlci5lbGVtZW50X25hbWUsXG4gICAgICAgICAgICAgICAgICBtZXRhZGF0YTogZm91bmQubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAvLyBOb24tZmF0YWw6IHNraXAgbWVtYmVyIGlmIGVsZW1lbnQgdHlwZSBsb29rdXAgZmFpbHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBnYXRoZXIgYWN0aXZlIGVuc2VtYmxlcyBmb3IgcG9saWN5IGV2YWx1YXRpb24nLCB7IGVycm9yIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBkZWFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdFTEVNRU5UX0RFQUNUSVZBVEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdFbGVtZW50Q1JVREhhbmRsZXIuZGVhY3RpdmF0ZUVsZW1lbnQnLFxuICAgICAgICBkZXRhaWxzOiBgRWxlbWVudCBkZWFjdGl2YXRpb24gcmVxdWVzdGVkOiAke3R5cGV9LyR7bmFtZX1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBlbGVtZW50VHlwZTogdHlwZSwgZWxlbWVudE5hbWU6IG5hbWUgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5zdHJhdGVnaWVzLmdldChub3JtYWxpemVkVHlwZSk7XG5cbiAgICAgIGlmICghc3RyYXRlZ3kpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJhdGVneS5kZWFjdGl2YXRlKG5hbWUpO1xuXG4gICAgICAvLyBJc3N1ZSAjNTk4OiBQZXJzaXN0IGRlYWN0aXZhdGlvbiBzdGF0ZSBmb3Igc2Vzc2lvbiByZXN0b3JlXG4gICAgICBpZiAodGhpcy5hY3RpdmF0aW9uU3RvcmUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0aW9uU3RvcmUucmVjb3JkRGVhY3RpdmF0aW9uKG5vcm1hbGl6ZWRUeXBlLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgLy8gSXNzdWUgIzc2MjogRXhwb3J0IHBvbGljaWVzIHRvIGJyaWRnZSBhZnRlciBkZWFjdGl2YXRpb25cbiAgICAgIHRoaXMucG9saWN5RXhwb3J0U2VydmljZT8uZXhwb3J0UG9saWNpZXMoKS5jYXRjaCgoKSA9PiB7fSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFJlLXRocm93IEVsZW1lbnROb3RGb3VuZEVycm9yIHRvIHByb3BhZ2F0ZSB0byBNQ1AtQVFMIGxheWVyXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgb3BlcmF0aW9ucyByZXR1cm4gc3VjY2Vzcz1mYWxzZSBpbnN0ZWFkIG9mIHN1Y2Nlc3M9dHJ1ZSB3aXRoIGVycm9yIHRleHRcbiAgICAgIC8vIElzc3VlICMyNzU6IEhhbmRsZXJzIHJldHVybiBzdWNjZXNzPXRydWUgZm9yIG1pc3NpbmcgZWxlbWVudHNcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVsZW1lbnROb3RGb3VuZEVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICAvLyBBbHNvIHJlLXRocm93IHZhbGlkYXRpb24gZXJyb3JzIChlLmcuLCBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcnMpXG4gICAgICAvLyBzbyB0aGV5IHJlc3VsdCBpbiBzdWNjZXNzPWZhbHNlIGluc3RlYWQgb2Ygc3VjY2Vzcz10cnVlIHdpdGggZXJyb3IgY29udGVudFxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygncGFyYW1ldGVyIGlzIHJlcXVpcmVkJykpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlYWN0aXZhdGUgZWxlbWVudDpgLCB7IHR5cGUsIG5hbWUsIGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBkZWFjdGl2YXRlICR7dHlwZX0gJyR7bmFtZX0nOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM3MDg6IEdldCB0aGUgZWxlbWVudCBtYW5hZ2VyIGZvciBhIG5vcm1hbGl6ZWQgdHlwZS5cbiAgICogVXNlZCB0byBjaGVjayBpbnZhbGlkIGVsZW1lbnQgcmVjb3JkcyB3aGVuIGFuIGVsZW1lbnQgaXMgXCJub3QgZm91bmRcIi5cbiAgICovXG4gIHByaXZhdGUgZ2V0TWFuYWdlckZvclR5cGUobm9ybWFsaXplZFR5cGU6IHN0cmluZyk6IEJhc2VFbGVtZW50TWFuYWdlcjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6IHJldHVybiB0aGlzLnBlcnNvbmFNYW5hZ2VyIGFzIHVua25vd24gYXMgQmFzZUVsZW1lbnRNYW5hZ2VyPGFueT47XG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiByZXR1cm4gdGhpcy5za2lsbE1hbmFnZXI7XG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiByZXR1cm4gdGhpcy50ZW1wbGF0ZU1hbmFnZXI7XG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiByZXR1cm4gdGhpcy5hZ2VudE1hbmFnZXI7XG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWTogcmV0dXJuIHRoaXMubWVtb3J5TWFuYWdlcjtcbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuRU5TRU1CTEU6IHJldHVybiB0aGlzLmVuc2VtYmxlTWFuYWdlcjtcbiAgICAgIGRlZmF1bHQ6IHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0RWxlbWVudERldGFpbHMobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLnN0cmF0ZWdpZXMuZ2V0KG5vcm1hbGl6ZWRUeXBlKTtcblxuICAgICAgaWYgKCFzdHJhdGVneSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBzdHJhdGVneS5nZXRFbGVtZW50RGV0YWlscyhuYW1lKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSXNzdWUgIzcwODogV2hlbiBlbGVtZW50IGlzIFwibm90IGZvdW5kXCIsIGNoZWNrIGlmIGl0IGFjdHVhbGx5IGV4aXN0c1xuICAgICAgLy8gb24gZGlzayBidXQgZmFpbGVkIHZhbGlkYXRpb24uIFJldHVybiBhIGRpc3RpbmN0IGVycm9yIGluIHRoYXQgY2FzZS5cbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVsZW1lbnROb3RGb3VuZEVycm9yKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgICAgY29uc3QgbWFuYWdlciA9IHRoaXMuZ2V0TWFuYWdlckZvclR5cGUobm9ybWFsaXplZFR5cGUpO1xuICAgICAgICBpZiAobWFuYWdlciAmJiB0eXBlb2YgbWFuYWdlci5nZXRJbnZhbGlkRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IGludmFsaWRSZWNvcmQgPSBtYW5hZ2VyLmdldEludmFsaWRFbGVtZW50KG5hbWUpO1xuICAgICAgICAgIGlmIChpbnZhbGlkUmVjb3JkKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0VmFsaWRhdGlvbkZhaWxlZEVycm9yKFxuICAgICAgICAgICAgICBub3JtYWxpemVkVHlwZSBhcyBFbGVtZW50VHlwZSxcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgaW52YWxpZFJlY29yZC5yZWFzb24sXG4gICAgICAgICAgICAgIGludmFsaWRSZWNvcmQuZmlsZVBhdGhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBnZXQgZWxlbWVudCBkZXRhaWxzOmAsIHsgdHlwZSwgbmFtZSwgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGdldCAke3R5cGV9IGRldGFpbHMgZm9yICcke25hbWV9JzogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxvYWQgZWxlbWVudHMgb2YgYSBzcGVjaWZpYyB0eXBlIGZyb20gdGhlIGZpbGVzeXN0ZW1cbiAgICogRXh0cmFjdGVkIGZyb20gaW5kZXgudHM6NjA5LTY3OSAoZXhhY3QgY29weSwgYWRhcHRlZCBmb3IgaGFuZGxlciBwYXR0ZXJuKVxuICAgKi9cbiAgYXN5bmMgcmVsb2FkRWxlbWVudHModHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG5cbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLnBlcnNvbmFNYW5hZ2VyLnJlbG9hZFBlcnNvbmFzKCk7XG5cbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIHRoaXMuc2tpbGxNYW5hZ2VyLmNsZWFyQ2FjaGUoKTtcbiAgICAgICAgICBjb25zdCBza2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+UhCBSZWxvYWRlZCAke3NraWxscy5sZW5ndGh9IHNraWxscyBmcm9tIHBvcnRmb2xpb2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICAvLyBUZW1wbGF0ZSBtYW5hZ2VyIGRvZXNuJ3QgaGF2ZSBjbGVhckNhY2hlLCBqdXN0IGxpc3RcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+UhCBSZWxvYWRlZCAke3RlbXBsYXRlcy5sZW5ndGh9IHRlbXBsYXRlcyBmcm9tIHBvcnRmb2xpb2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICAvLyBBZ2VudCBtYW5hZ2VyIGRvZXNuJ3QgaGF2ZSBjbGVhckNhY2hlLCBqdXN0IGxpc3RcbiAgICAgICAgICBjb25zdCBhZ2VudHMgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+UhCBSZWxvYWRlZCAke2FnZW50cy5sZW5ndGh9IGFnZW50cyBmcm9tIHBvcnRmb2xpb2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOiB7XG4gICAgICAgICAgLy8gTWVtb3J5IG1hbmFnZXIgZG9lc24ndCBoYXZlIGNsZWFyQ2FjaGUsIGp1c3QgbGlzdFxuICAgICAgICAgIGNvbnN0IG1lbW9yaWVzID0gYXdhaXQgdGhpcy5tZW1vcnlNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5SEIFJlbG9hZGVkICR7bWVtb3JpZXMubGVuZ3RofSBtZW1vcmllcyBmcm9tIHBvcnRmb2xpb2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuRU5TRU1CTEU6IHtcbiAgICAgICAgICAvLyBFbnNlbWJsZSBtYW5hZ2VyIGRvZXNuJ3QgaGF2ZSBjbGVhckNhY2hlLCBqdXN0IGxpc3RcbiAgICAgICAgICBjb25zdCBlbnNlbWJsZXMgPSBhd2FpdCB0aGlzLmVuc2VtYmxlTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+UhCBSZWxvYWRlZCAke2Vuc2VtYmxlcy5sZW5ndGh9IGVuc2VtYmxlcyBmcm9tIHBvcnRmb2xpb2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gcmVsb2FkICR7dHlwZX06YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byByZWxvYWQgJHt0eXBlfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSB0ZW1wbGF0ZSB3aXRoIHZhcmlhYmxlc1xuICAgKiBFeHRyYWN0ZWQgZnJvbSBpbmRleC50czo2ODItNzAxIChleGFjdCBjb3B5KVxuICAgKlxuICAgKiBAdGhyb3dzIHtFbGVtZW50Tm90Rm91bmRFcnJvcn0gV2hlbiB0ZW1wbGF0ZSBkb2VzIG5vdCBleGlzdFxuICAgKiBAc2VlIElzc3VlICMyNzUgLSBIYW5kbGVycyByZXR1cm4gc3VjY2Vzcz10cnVlIGZvciBtaXNzaW5nIGVsZW1lbnRzXG4gICAqL1xuICBhc3luYyByZW5kZXJUZW1wbGF0ZShuYW1lOiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIC8vIFVzZSB0aGUgbmV3IFRlbXBsYXRlUmVuZGVyZXIgdXRpbGl0eSBmb3IgY2xlYW5lciBjb2RlIGFuZCBiZXR0ZXIgdmFsaWRhdGlvblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudGVtcGxhdGVSZW5kZXJlci5yZW5kZXIobmFtZSwgdmFyaWFibGVzKTtcblxuICAgIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQuY29udGVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg8J+ThCBSZW5kZXJlZCB0ZW1wbGF0ZSAnJHtuYW1lfSc6XFxuXFxuJHtyZXN1bHQuY29udGVudH1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJc3N1ZSAjMjc1OiBUaHJvdyBlcnJvciBmb3IgbWlzc2luZyB0ZW1wbGF0ZXMgaW5zdGVhZCBvZiByZXR1cm5pbmcgY29udGVudFxuICAgICAgaWYgKHJlc3VsdC5lcnJvcj8uaW5jbHVkZXMoJ25vdCBmb3VuZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFbGVtZW50Tm90Rm91bmRFcnJvcignVGVtcGxhdGUnLCBuYW1lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCAke3Jlc3VsdC5lcnJvciB8fCAnRmFpbGVkIHRvIHJlbmRlciB0ZW1wbGF0ZSd9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhbiBhZ2VudCB3aXRoIGdvYWwgcGFyYW1ldGVyc1xuICAgKiBSZXR1cm5zIGNvbnRleHQgZm9yIExMTSB0byBkcml2ZSB0aGUgYWdlbnRpYyBsb29wXG4gICAqL1xuICBhc3luYyBleGVjdXRlQWdlbnQobmFtZTogc3RyaW5nLCBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmV4ZWN1dGVBZ2VudChuYW1lLCBwYXJhbWV0ZXJzKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBGSVg6IElzc3VlICMyNzUgLSBSZS10aHJvdyBFbGVtZW50Tm90Rm91bmRFcnJvciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWxlbWVudE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBleGVjdXRlIGFnZW50ICcke25hbWV9JzpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGV4ZWN1dGUgYWdlbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIGEgc3RlcCBpbiBhZ2VudCBleGVjdXRpb25cbiAgICovXG4gIGFzeW5jIHJlY29yZEFnZW50U3RlcChhcmdzOiB7XG4gICAgYWdlbnROYW1lOiBzdHJpbmc7XG4gICAgc3RlcERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgb3V0Y29tZTogXCJzdWNjZXNzXCIgfCBcImZhaWx1cmVcIiB8IFwicGFydGlhbFwiO1xuICAgIGZpbmRpbmdzPzogc3RyaW5nO1xuICAgIGNvbmZpZGVuY2U/OiBudW1iZXI7XG4gICAgbmV4dEFjdGlvbkhpbnQ/OiBzdHJpbmc7XG4gICAgcmlza1Njb3JlPzogbnVtYmVyO1xuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLnJlY29yZEFnZW50U3RlcChhcmdzKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBGSVg6IElzc3VlICMyNzUgLSBSZS10aHJvdyBFbGVtZW50Tm90Rm91bmRFcnJvciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWxlbWVudE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byByZWNvcmQgYWdlbnQgc3RlcCBmb3IgJyR7YXJncy5hZ2VudE5hbWV9JzpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIHJlY29yZCBzdGVwOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGFuIGFnZW50IGdvYWxcbiAgICovXG4gIGFzeW5jIGNvbXBsZXRlQWdlbnRHb2FsKGFyZ3M6IHtcbiAgICBhZ2VudE5hbWU6IHN0cmluZztcbiAgICBnb2FsSWQ/OiBzdHJpbmc7XG4gICAgb3V0Y29tZTogXCJzdWNjZXNzXCIgfCBcImZhaWx1cmVcIiB8IFwicGFydGlhbFwiO1xuICAgIHN1bW1hcnk6IHN0cmluZztcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5jb21wbGV0ZUFnZW50R29hbChhcmdzKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBGSVg6IElzc3VlICMyNzUgLSBSZS10aHJvdyBFbGVtZW50Tm90Rm91bmRFcnJvciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWxlbWVudE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjb21wbGV0ZSBhZ2VudCBnb2FsIGZvciAnJHthcmdzLmFnZW50TmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gY29tcGxldGUgZ29hbDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWdlbnQgc3RhdGVcbiAgICovXG4gIGFzeW5jIGdldEFnZW50U3RhdGUoYXJnczoge1xuICAgIGFnZW50TmFtZTogc3RyaW5nO1xuICAgIGluY2x1ZGVEZWNpc2lvbkhpc3Rvcnk/OiBib29sZWFuO1xuICAgIGluY2x1ZGVDb250ZXh0PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5nZXRBZ2VudFN0YXRlKGFyZ3MpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEZJWDogSXNzdWUgIzI3NSAtIFJlLXRocm93IEVsZW1lbnROb3RGb3VuZEVycm9yIGZvciBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFbGVtZW50Tm90Rm91bmRFcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGdldCBhZ2VudCBzdGF0ZSBmb3IgJyR7YXJncy5hZ2VudE5hbWV9JzpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGdldCBzdGF0ZTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb250aW51ZSBhZ2VudCBleGVjdXRpb24gZnJvbSBwcmV2aW91cyBzdGF0ZVxuICAgKi9cbiAgYXN5bmMgY29udGludWVBZ2VudEV4ZWN1dGlvbihhcmdzOiB7XG4gICAgYWdlbnROYW1lOiBzdHJpbmc7XG4gICAgcGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgcHJldmlvdXNTdGVwUmVzdWx0Pzogc3RyaW5nO1xuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmNvbnRpbnVlQWdlbnRFeGVjdXRpb24oYXJncyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRklYOiBJc3N1ZSAjMjc1IC0gUmUtdGhyb3cgRWxlbWVudE5vdEZvdW5kRXJyb3IgZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVsZW1lbnROb3RGb3VuZEVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY29udGludWUgYWdlbnQgZXhlY3V0aW9uIGZvciAnJHthcmdzLmFnZW50TmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gY29udGludWUgZXhlY3V0aW9uOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFnZ3JlZ2F0ZSBhY3RpdmUgZWxlbWVudHMgYWNyb3NzIGFsbCByZWdpc3RlcmVkIGVsZW1lbnQgdHlwZXMuXG4gICAqIElzc3VlICM1MDE6IENhbGxlZCB3aGVuIGdldF9hY3RpdmVfZWxlbWVudHMgaXMgaW52b2tlZCB3aXRob3V0IGVsZW1lbnRfdHlwZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYWdncmVnYXRlQWN0aXZlRWxlbWVudHMoKTogUHJvbWlzZTxNQ1BSZXNwb25zZT4ge1xuICAgIGNvbnN0IHNlY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbZWxlbWVudFR5cGUsIHN0cmF0ZWd5XSBvZiB0aGlzLnN0cmF0ZWdpZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0cmF0ZWd5LmdldEFjdGl2ZUVsZW1lbnRzKCk7XG4gICAgICAgIGNvbnN0IHRleHQgPSByZXN1bHQuY29udGVudFswXT8udGV4dDtcbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICBzZWN0aW9ucy5wdXNoKGBbJHtlbGVtZW50VHlwZX1dXFxuJHt0ZXh0fWApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSAke2VsZW1lbnRUeXBlfSBlbGVtZW50c2AsIHsgZXJyb3I6IGVyciB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3tcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IHNlY3Rpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHNlY3Rpb25zLmpvaW4oJ1xcblxcbicpXG4gICAgICAgICAgOiAnTm8gYWN0aXZlIGVsZW1lbnRzIGZvdW5kLidcbiAgICAgIH1dXG4gICAgfTtcbiAgfVxuXG59XG4iXX0=
858
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudENSVURIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL0VsZW1lbnRDUlVESGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFvQixNQUFNLGtDQUFrQyxDQUFDO0FBT2pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxJQUFJLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGFBQWEsSUFBSSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxXQUFXLElBQUksa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsY0FBYyxJQUFJLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDM0YsT0FBTyxFQUFFLFlBQVksSUFBSSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsSUFBSSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxlQUFlLElBQUksc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUs5RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHeEUsT0FBTyxFQUNMLDBCQUEwQixFQUMxQix1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzNCLE1BQU0sdUJBQXVCLENBQUM7QUFPL0Is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LFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztnQkFDckMsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDVCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzdDLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixXQUFXLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDO29CQUNSLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7d0JBQ3ZCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzt3QkFDdkIsQ0FBQyxDQUFDLDJCQUEyQjtpQkFDaEMsQ0FBQztTQUNILENBQUM7SUFDSixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVsZW1lbnRDUlVESGFuZGxlciAtIEhhbmRsZXMgYWxsIGdlbmVyaWMgZWxlbWVudCBDUlVEIG9wZXJhdGlvbnNcbiAqXG4gKiBQcm92aWRlcyBjcmVhdGUsIGVkaXQsIHZhbGlkYXRlLCBhbmQgZGVsZXRlIG9wZXJhdGlvbnMgZm9yIGFsbCBlbGVtZW50IHR5cGVzXG4gKiAocGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMsIG1lbW9yaWVzKS5cbiAqXG4gKiBVc2VzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGZvciBhbGwgc2VydmljZXM6XG4gKiAtIEluaXRpYWxpemF0aW9uU2VydmljZSBmb3Igc2V0dXAgdGFza3NcbiAqIC0gUGVyc29uYUluZGljYXRvclNlcnZpY2UgZm9yIHBlcnNvbmEgaW5kaWNhdG9yIGZvcm1hdHRpbmdcbiAqIC0gRWxlbWVudCBtYW5hZ2VycyAoU2tpbGxNYW5hZ2VyLCBUZW1wbGF0ZU1hbmFnZXIsIEFnZW50TWFuYWdlciwgTWVtb3J5TWFuYWdlcilcbiAqIC0gUGVyc29uYU1hbmFnZXIgZm9yIHBlcnNvbmEgb3BlcmF0aW9uc1xuICogLSBQb3J0Zm9saW9NYW5hZ2VyIGZvciBwb3J0Zm9saW8gb3BlcmF0aW9uc1xuICpcbiAqIEZJWDogRE1DUC1TRUMtMDA2IC0gU2VjdXJpdHkgYXVkaXQgc3VwcHJlc3Npb25cbiAqIFRoaXMgaGFuZGxlciBkZWxlZ2F0ZXMgYWxsIG9wZXJhdGlvbnMgdG8gc3BlY2lhbGl6ZWQgZWxlbWVudCBtYW5hZ2Vycy5cbiAqIEF1ZGl0IGxvZ2dpbmcgaGFwcGVucyBpbiB0aGUgZWxlbWVudCBtYW5hZ2VycyB0aGVtc2VsdmVzLlxuICogQHNlY3VyaXR5LWF1ZGl0LXN1cHByZXNzIERNQ1AtU0VDLTAwNlxuICovXG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlLCBQb3J0Zm9saW9NYW5hZ2VyIH0gZnJvbSAnLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2tpbGxNYW5hZ2VyIH0gZnJvbSAnLi4vZWxlbWVudHMvc2tpbGxzL2luZGV4LmpzJztcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gJy4uL2VsZW1lbnRzL3RlbXBsYXRlcy9UZW1wbGF0ZU1hbmFnZXIuanMnO1xuaW1wb3J0IHsgVGVtcGxhdGVSZW5kZXJlciB9IGZyb20gJy4uL3V0aWxzL1RlbXBsYXRlUmVuZGVyZXIuanMnO1xuaW1wb3J0IHsgQWdlbnRNYW5hZ2VyIH0gZnJvbSAnLi4vZWxlbWVudHMvYWdlbnRzL0FnZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBNZW1vcnlNYW5hZ2VyIH0gZnJvbSAnLi4vZWxlbWVudHMvbWVtb3JpZXMvTWVtb3J5TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFbnNlbWJsZU1hbmFnZXIgfSBmcm9tICcuLi9lbGVtZW50cy9lbnNlbWJsZXMvRW5zZW1ibGVNYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Tm90Rm91bmRFcnJvciB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IGFzIGNyZWF0ZUVsZW1lbnRDb21tYW5kIH0gZnJvbSAnLi9lbGVtZW50LWNydWQvY3JlYXRlRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBkZWxldGVFbGVtZW50IGFzIGRlbGV0ZUVsZW1lbnRDb21tYW5kIH0gZnJvbSAnLi9lbGVtZW50LWNydWQvZGVsZXRlRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBlZGl0RWxlbWVudCBhcyBlZGl0RWxlbWVudENvbW1hbmQgfSBmcm9tICcuL2VsZW1lbnQtY3J1ZC9lZGl0RWxlbWVudC5qcyc7XG5pbXBvcnQgeyB1cGdyYWRlRWxlbWVudCBhcyB1cGdyYWRlRWxlbWVudENvbW1hbmQgfSBmcm9tICcuL2VsZW1lbnQtY3J1ZC91cGdyYWRlRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBsaXN0RWxlbWVudHMgYXMgbGlzdEVsZW1lbnRzQ29tbWFuZCB9IGZyb20gJy4vZWxlbWVudC1jcnVkL2xpc3RFbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBmaW5kRWxlbWVudEZsZXhpYmx5LCBzYW5pdGl6ZU1ldGFkYXRhIGFzIHNhbml0aXplTWV0YWRhdGFSZWNvcmQgfSBmcm9tICcuL2VsZW1lbnQtY3J1ZC9oZWxwZXJzLmpzJztcbmltcG9ydCB7IHZhbGlkYXRlRWxlbWVudCBhcyB2YWxpZGF0ZUVsZW1lbnRDb21tYW5kIH0gZnJvbSAnLi9lbGVtZW50LWNydWQvdmFsaWRhdGVFbGVtZW50LmpzJztcbmltcG9ydCB7IEVsZW1lbnRDcnVkQ29udGV4dCB9IGZyb20gJy4vZWxlbWVudC1jcnVkL3R5cGVzLmpzJztcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL0luaXRpYWxpemF0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBQZXJzb25hSW5kaWNhdG9yU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL1BlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlLmpzJztcbmltcG9ydCB7IFBlcnNvbmFNYW5hZ2VyIH0gZnJvbSAnLi4vcGVyc29uYS9QZXJzb25hTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgRUxFTUVOVF9UWVBFX01BUCB9IGZyb20gJy4uL3V0aWxzL2VsZW1lbnRUeXBlTm9ybWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanMnO1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50QWN0aXZhdGlvblN0cmF0ZWd5LCBNQ1BSZXNwb25zZSB9IGZyb20gJy4vc3RyYXRlZ2llcy9pbmRleC5qcyc7XG5pbXBvcnQge1xuICBUZW1wbGF0ZUFjdGl2YXRpb25TdHJhdGVneSxcbiAgU2tpbGxBY3RpdmF0aW9uU3RyYXRlZ3ksXG4gIEFnZW50QWN0aXZhdGlvblN0cmF0ZWd5LFxuICBNZW1vcnlBY3RpdmF0aW9uU3RyYXRlZ3ksXG4gIFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3ksXG4gIEVuc2VtYmxlQWN0aXZhdGlvblN0cmF0ZWd5XG59IGZyb20gJy4vc3RyYXRlZ2llcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBFbGVtZW50UXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvRWxlbWVudFF1ZXJ5U2VydmljZS5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tICcuLi9zZXJ2aWNlcy92YWxpZGF0aW9uL1ZhbGlkYXRpb25SZWdpc3RyeS5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGl2YXRpb25TdG9yZSwgUGVyc2lzdGVkQWN0aXZhdGlvbiwgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3QgfSBmcm9tICcuLi9zZXJ2aWNlcy9BY3RpdmF0aW9uU3RvcmUuanMnO1xuaW1wb3J0IHR5cGUgeyBCYWNrdXBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvQmFja3VwU2VydmljZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFBvbGljeUV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLmpzJztcbmltcG9ydCB0eXBlIHsgQmFzZUVsZW1lbnRNYW5hZ2VyIH0gZnJvbSAnLi4vZWxlbWVudHMvYmFzZS9CYXNlRWxlbWVudE1hbmFnZXIuanMnO1xuaW1wb3J0IHsgZm9ybWF0VmFsaWRhdGlvbkZhaWxlZEVycm9yIH0gZnJvbSAnLi9lbGVtZW50LWNydWQvcmVzcG9uc2VGb3JtYXR0ZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudENSVURIYW5kbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdHJhdGVnaWVzOiBNYXA8c3RyaW5nLCBFbGVtZW50QWN0aXZhdGlvblN0cmF0ZWd5PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNraWxsTWFuYWdlcjogU2tpbGxNYW5hZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVtcGxhdGVNYW5hZ2VyOiBUZW1wbGF0ZU1hbmFnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVJlbmRlcmVyOiBUZW1wbGF0ZVJlbmRlcmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWdlbnRNYW5hZ2VyOiBBZ2VudE1hbmFnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW1vcnlNYW5hZ2VyOiBNZW1vcnlNYW5hZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW5zZW1ibGVNYW5hZ2VyOiBFbnNlbWJsZU1hbmFnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJzb25hTWFuYWdlcjogUGVyc29uYU1hbmFnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0Zm9saW9NYW5hZ2VyOiBQb3J0Zm9saW9NYW5hZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5pdFNlcnZpY2U6IEluaXRpYWxpemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluZGljYXRvclNlcnZpY2U6IFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UXVlcnlTZXJ2aWNlOiBFbGVtZW50UXVlcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdGlvblJlZ2lzdHJ5OiBWYWxpZGF0aW9uUmVnaXN0cnksXG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmF0aW9uU3RvcmU/OiBBY3RpdmF0aW9uU3RvcmUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBiYWNrdXBTZXJ2aWNlPzogQmFja3VwU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvbGljeUV4cG9ydFNlcnZpY2U/OiBQb2xpY3lFeHBvcnRTZXJ2aWNlXG4gICkge1xuICAgIC8vIEluaXRpYWxpemUgc3RyYXRlZ3kgbWFwIHdpdGggYWxsIGVsZW1lbnQgdHlwZSBzdHJhdGVnaWVzXG4gICAgdGhpcy5zdHJhdGVnaWVzID0gbmV3IE1hcDxzdHJpbmcsIEVsZW1lbnRBY3RpdmF0aW9uU3RyYXRlZ3k+KFtcbiAgICAgIFtFbGVtZW50VHlwZS5QRVJTT05BLCBuZXcgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneShwZXJzb25hTWFuYWdlciwgaW5kaWNhdG9yU2VydmljZSldLFxuICAgICAgW0VsZW1lbnRUeXBlLlNLSUxMLCBuZXcgU2tpbGxBY3RpdmF0aW9uU3RyYXRlZ3koc2tpbGxNYW5hZ2VyKV0sXG4gICAgICBbRWxlbWVudFR5cGUuVEVNUExBVEUsIG5ldyBUZW1wbGF0ZUFjdGl2YXRpb25TdHJhdGVneSh0ZW1wbGF0ZU1hbmFnZXIpXSxcbiAgICAgIFtFbGVtZW50VHlwZS5BR0VOVCwgbmV3IEFnZW50QWN0aXZhdGlvblN0cmF0ZWd5KGFnZW50TWFuYWdlcildLFxuICAgICAgW0VsZW1lbnRUeXBlLk1FTU9SWSwgbmV3IE1lbW9yeUFjdGl2YXRpb25TdHJhdGVneShtZW1vcnlNYW5hZ2VyKV0sXG4gICAgICBbRWxlbWVudFR5cGUuRU5TRU1CTEUsIG5ldyBFbnNlbWJsZUFjdGl2YXRpb25TdHJhdGVneShcbiAgICAgICAgZW5zZW1ibGVNYW5hZ2VyLFxuICAgICAgICBwb3J0Zm9saW9NYW5hZ2VyLFxuICAgICAgICBza2lsbE1hbmFnZXIsXG4gICAgICAgIHRlbXBsYXRlTWFuYWdlcixcbiAgICAgICAgYWdlbnRNYW5hZ2VyLFxuICAgICAgICBtZW1vcnlNYW5hZ2VyLFxuICAgICAgICBwZXJzb25hTWFuYWdlclxuICAgICAgKV1cbiAgICBdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlSW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0U2VydmljZS5lbnN1cmVJbml0aWFsaXplZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJzb25hSW5kaWNhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHQoKTogRWxlbWVudENydWRDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5zdXJlSW5pdGlhbGl6ZWQ6ICgpID0+IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSxcbiAgICAgIGdldFBlcnNvbmFJbmRpY2F0b3I6ICgpID0+IHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpLFxuICAgICAgc2tpbGxNYW5hZ2VyOiB0aGlzLnNraWxsTWFuYWdlcixcbiAgICAgIHRlbXBsYXRlTWFuYWdlcjogdGhpcy50ZW1wbGF0ZU1hbmFnZXIsXG4gICAgICB0ZW1wbGF0ZVJlbmRlcmVyOiB0aGlzLnRlbXBsYXRlUmVuZGVyZXIsXG4gICAgICBhZ2VudE1hbmFnZXI6IHRoaXMuYWdlbnRNYW5hZ2VyLFxuICAgICAgbWVtb3J5TWFuYWdlcjogdGhpcy5tZW1vcnlNYW5hZ2VyLFxuICAgICAgZW5zZW1ibGVNYW5hZ2VyOiB0aGlzLmVuc2VtYmxlTWFuYWdlcixcbiAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucG9ydGZvbGlvTWFuYWdlcixcbiAgICAgIHBlcnNvbmFNYW5hZ2VyOiB0aGlzLnBlcnNvbmFNYW5hZ2VyLFxuICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMuZmlsZU9wZXJhdGlvbnMsXG4gICAgICBlbGVtZW50UXVlcnlTZXJ2aWNlOiB0aGlzLmVsZW1lbnRRdWVyeVNlcnZpY2UsXG4gICAgICB2YWxpZGF0aW9uUmVnaXN0cnk6IHRoaXMudmFsaWRhdGlvblJlZ2lzdHJ5LFxuICAgICAgYmFja3VwU2VydmljZTogdGhpcy5iYWNrdXBTZXJ2aWNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbiBlbGVtZW50IGJ5IG5hbWUsIHN1cHBvcnRpbmcgYm90aCBleGFjdCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lIChzbHVnKSBtYXRjaGluZ1xuICAgKiBIZWxwZXIgbWV0aG9kIGV4dHJhY3RlZCBmcm9tIGluZGV4LnRzOjM0Ni0zNzlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmluZEVsZW1lbnRGbGV4aWJseShuYW1lOiBzdHJpbmcsIGVsZW1lbnRMaXN0OiBhbnlbXSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIGZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgZWxlbWVudExpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplIG1ldGFkYXRhIG9iamVjdCB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICogSGVscGVyIG1ldGhvZCBleHRyYWN0ZWQgZnJvbSBpbmRleC50czozOTAtNDEwXG4gICAqL1xuICBwcml2YXRlIHNhbml0aXplTWV0YWRhdGEobWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gc2FuaXRpemVNZXRhZGF0YVJlY29yZChtZXRhZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUxvb2t1cFZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgPyB2YWx1ZS5ub3JtYWxpemUoJ05GQycpLnRyaW0oKVxuICAgICAgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgaGFzR2F0ZWtlZXBlclBvbGljeShtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihtZXRhZGF0YT8uWydnYXRla2VlcGVyJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1BvbGljeUVsZW1lbnRUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cFZhbHVlKHR5cGUpLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgY2FzZSAncGVyc29uYXMnOlxuICAgICAgICByZXR1cm4gJ3BlcnNvbmEnO1xuICAgICAgY2FzZSAnc2tpbGxzJzpcbiAgICAgICAgcmV0dXJuICdza2lsbCc7XG4gICAgICBjYXNlICdhZ2VudHMnOlxuICAgICAgICByZXR1cm4gJ2FnZW50JztcbiAgICAgIGNhc2UgJ21lbW9yaWVzJzpcbiAgICAgICAgcmV0dXJuICdtZW1vcnknO1xuICAgICAgY2FzZSAnZW5zZW1ibGVzJzpcbiAgICAgICAgcmV0dXJuICdlbnNlbWJsZSc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZFR5cGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBlbGVtZW50XG4gICAqIEV4dHJhY3RlZCBmcm9tIGluZGV4LnRzOjE0OTItMTYzMSAoMTQwIGxpbmVzIC0gZXhhY3QgY29weSlcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBjb250ZW50Pzogc3RyaW5nOyBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7IG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pn0pIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudENvbW1hbmQodGhpcy5nZXRDb250ZXh0KCksIGFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXQgYW4gZXhpc3RpbmcgZWxlbWVudCB1c2luZyBHcmFwaFFMLWFsaWduZWQgbmVzdGVkIGlucHV0IG9iamVjdHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF3YWl0IGhhbmRsZXIuZWRpdEVsZW1lbnQoe1xuICAgKiAgIG5hbWU6ICdteS1za2lsbCcsXG4gICAqICAgdHlwZTogJ3NraWxscycsXG4gICAqICAgaW5wdXQ6IHtcbiAgICogICAgIGRlc2NyaXB0aW9uOiAnVXBkYXRlZCcsXG4gICAqICAgICBtZXRhZGF0YTogeyB0cmlnZ2VyczogWydjb2RlJ10gfVxuICAgKiAgIH1cbiAgICogfSk7XG4gICAqL1xuICBhc3luYyBlZGl0RWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0pIHtcbiAgICByZXR1cm4gZWRpdEVsZW1lbnRDb21tYW5kKHRoaXMuZ2V0Q29udGV4dCgpLCBhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGdyYWRlIGVsZW1lbnQgZnJvbSB2MSBzaW5nbGUtYm9keSB0byB2MiBkdWFsLWZpZWxkIGZvcm1hdCAoaW5zdHJ1Y3Rpb25zICsgY29udGVudClcbiAgICovXG4gIGFzeW5jIHVwZ3JhZGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZHJ5X3J1bj86IGJvb2xlYW47IGluc3RydWN0aW9uc19vdmVycmlkZT86IHN0cmluZzsgY29udGVudF9vdmVycmlkZT86IHN0cmluZ30pIHtcbiAgICByZXR1cm4gdXBncmFkZUVsZW1lbnRDb21tYW5kKHRoaXMuZ2V0Q29udGV4dCgpLCBhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhbiBlbGVtZW50XG4gICAqIEV4dHJhY3RlZCBmcm9tIGluZGV4LnRzOjE5NDEtMjA1NCAoMTE0IGxpbmVzIC0gZXhhY3QgY29weSlcbiAgICovXG4gIGFzeW5jIHZhbGlkYXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHN0cmljdD86IGJvb2xlYW59KSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlRWxlbWVudENvbW1hbmQodGhpcy5nZXRDb250ZXh0KCksIGFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbiBlbGVtZW50XG4gICAqIEV4dHJhY3RlZCBmcm9tIGluZGV4LnRzOjIwNTYtMjMxMCAoMjU1IGxpbmVzIC0gZXhhY3QgY29weSwgc3BsaXQgZm9yIHJlYWRhYmlsaXR5KVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlbGV0ZURhdGE/OiBib29sZWFufSkge1xuICAgIHJldHVybiBkZWxldGVFbGVtZW50Q29tbWFuZCh0aGlzLmdldENvbnRleHQoKSwgYXJncyk7XG4gIH1cblxuICBwdWJsaWMgbm9ybWFsaXplRWxlbWVudFR5cGUodHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgLy8gSXNzdWUgIzUwMTogR3VhcmQgYWdhaW5zdCBudWxsL3VuZGVmaW5lZCB0byBtYXRjaCBzaGFyZWQgdXRpbGl0eSBwYXR0ZXJuXG4gICAgaWYgKHR5cGUgPT0gbnVsbCB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycgfHwgdHlwZS50cmltKCkgPT09ICcnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gSWYgaXQncyBhbHJlYWR5IGEgdmFsaWQgRWxlbWVudFR5cGUgdmFsdWUsIHJldHVybiBhcy1pc1xuICAgIGlmIChPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgLy8gVXNlIHNoYXJlZCBub3JtYWxpemF0aW9uIG1hcCAoSXNzdWUgIzQzMylcbiAgICBjb25zdCBub3JtYWxpemVkID0gRUxFTUVOVF9UWVBFX01BUFt0eXBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAobm9ybWFsaXplZCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gICAgfVxuXG4gICAgLy8gVW5rbm93biB0eXBlIC0gcmV0dXJuIGFzLWlzIGFuZCBsZXQgdmFsaWRhdGlvbiBoYW5kbGUgaXRcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RFbGVtZW50cyh0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBpbXBvcnQoJy4uL3NlcnZpY2VzL3F1ZXJ5L3R5cGVzLmpzJykuUXVlcnlPcHRpb25zKSB7XG4gICAgcmV0dXJuIGxpc3RFbGVtZW50c0NvbW1hbmQodGhpcy5nZXRDb250ZXh0KCksIHR5cGUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByYXcgZWxlbWVudHMgYXJyYXkgZm9yIGEgZ2l2ZW4gdHlwZS5cbiAgICogVW5saWtlIGxpc3RFbGVtZW50cyB3aGljaCByZXR1cm5zIE1DUFJlc3BvbnNlIGZvcm1hdCwgdGhpcyByZXR1cm5zIHJhdyBlbGVtZW50IG9iamVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gRWxlbWVudCB0eXBlIChwZXJzb25hLCBza2lsbCwgdGVtcGxhdGUsIGFnZW50LCBtZW1vcnksIGVuc2VtYmxlKVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiByYXcgZWxlbWVudCBvYmplY3RzXG4gICAqL1xuICBhc3luYyBnZXRFbGVtZW50cyh0eXBlOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd25bXT4ge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG5cbiAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgIHJldHVybiB0aGlzLnBlcnNvbmFNYW5hZ2VyLmxpc3QoKTtcbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6XG4gICAgICAgIHJldHVybiB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOlxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZU1hbmFnZXIubGlzdCgpO1xuICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOlxuICAgICAgICByZXR1cm4gdGhpcy5tZW1vcnlNYW5hZ2VyLmxpc3QoKTtcbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuRU5TRU1CTEU6XG4gICAgICAgIHJldHVybiB0aGlzLmVuc2VtYmxlTWFuYWdlci5saXN0KCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWN0aXZhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nLCBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIHRyeSB7XG4gICAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEFkZCBzZWN1cml0eSBhdWRpdCBsb2dnaW5nIGZvciBlbGVtZW50IGFjdGl2YXRpb25cbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdFbGVtZW50Q1JVREhhbmRsZXIuYWN0aXZhdGVFbGVtZW50JyxcbiAgICAgICAgZGV0YWlsczogYEVsZW1lbnQgYWN0aXZhdGlvbiByZXF1ZXN0ZWQ6ICR7dHlwZX0vJHtuYW1lfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVsZW1lbnRUeXBlOiB0eXBlLCBlbGVtZW50TmFtZTogbmFtZSwgY29udGV4dFByb3ZpZGVkOiAhIWNvbnRleHQgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5zdHJhdGVnaWVzLmdldChub3JtYWxpemVkVHlwZSk7XG5cbiAgICAgIGlmICghc3RyYXRlZ3kpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJhdGVneS5hY3RpdmF0ZShuYW1lLCBjb250ZXh0KTtcblxuICAgICAgLy8gSXNzdWUgIzU5ODogUGVyc2lzdCBhY3RpdmF0aW9uIHN0YXRlIGZvciBzZXNzaW9uIHJlc3RvcmVcbiAgICAgIGlmICh0aGlzLmFjdGl2YXRpb25TdG9yZSkge1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IG5vcm1hbGl6ZWRUeXBlID09PSBFbGVtZW50VHlwZS5QRVJTT05BXG4gICAgICAgICAgPyB0aGlzLnBlcnNvbmFNYW5hZ2VyLmZpbmRQZXJzb25hKG5hbWUpPy5maWxlbmFtZVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmFjdGl2YXRpb25TdG9yZS5yZWNvcmRBY3RpdmF0aW9uKG5vcm1hbGl6ZWRUeXBlLCBuYW1lLCBmaWxlbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElzc3VlICM3NjI6IEV4cG9ydCBwb2xpY2llcyB0byBicmlkZ2UgYWZ0ZXIgYWN0aXZhdGlvblxuICAgICAgdGhpcy5wb2xpY3lFeHBvcnRTZXJ2aWNlPy5leHBvcnRQb2xpY2llcygpLmNhdGNoKCgpID0+IHt9KTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gYWN0aXZhdGUgZWxlbWVudDpgLCB7IHR5cGUsIG5hbWUsIGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFjdGl2ZUVsZW1lbnRzKHR5cGU/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gSXNzdWUgIzUwMTogV2hlbiB0eXBlIGlzIG9taXR0ZWQsIGFnZ3JlZ2F0ZSBhY3RpdmUgZWxlbWVudHMgYWNyb3NzIGFsbCB0eXBlc1xuICAgICAgaWYgKCF0eXBlIHx8IHR5cGUudHJpbSgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZ2dyZWdhdGVBY3RpdmVFbGVtZW50cygpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMuc3RyYXRlZ2llcy5nZXQobm9ybWFsaXplZFR5cGUpO1xuXG4gICAgICBpZiAoIXN0cmF0ZWd5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHN0cmF0ZWd5LmdldEFjdGl2ZUVsZW1lbnRzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGdldCBhY3RpdmUgZWxlbWVudHM6YCwgeyB0eXBlLCBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZ2V0IGFjdGl2ZSAke3R5cGUgfHwgJ2FsbCd9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCByYXcgYWN0aXZlIGVsZW1lbnRzIGZvciBHYXRla2VlcGVyIHBvbGljeSBldmFsdWF0aW9uLlxuICAgKiBSZXR1cm5zIGFjdGl2ZSBwZXJzb25hcywgc2tpbGxzLCBhbmQgZW5zZW1ibGVzIHdpdGggdGhlaXIgbWV0YWRhdGFcbiAgICogbWFwcGVkIHRvIHRoZSBzaGFwZSBleHBlY3RlZCBieSB0aGUgR2F0ZWtlZXBlcidzIEFjdGl2ZUVsZW1lbnQgaW50ZXJmYWNlLlxuICAgKlxuICAgKiBJc3N1ZSAjNDUyOiBQcm92aWRlcyBhY3RpdmUgZWxlbWVudCBjb250ZXh0IGZvciBlbmZvcmNlKCkgcG9saWN5IGNoZWNrcy5cbiAgICovXG4gIGFzeW5jIGdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5KCk6IFByb21pc2U8QXJyYXk8eyB0eXBlOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+PiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTx7IHR5cGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4gPSBbXTtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQWN0aXZlIHBlcnNvbmFzIChzeW5jKVxuICAgICAgY29uc3QgcGVyc29uYXMgPSB0aGlzLnBlcnNvbmFNYW5hZ2VyLmdldEFjdGl2ZVBlcnNvbmFzKCk7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgcGVyc29uYXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYHBlcnNvbmE6JHtwLm1ldGFkYXRhLm5hbWV9YDtcbiAgICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdwZXJzb25hJyxcbiAgICAgICAgICBuYW1lOiBwLm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHAubWV0YWRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gZ2F0aGVyIGFjdGl2ZSBwZXJzb25hcyBmb3IgcG9saWN5IGV2YWx1YXRpb24nLCB7IGVycm9yIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBBY3RpdmUgc2tpbGxzIChhc3luYylcbiAgICAgIGNvbnN0IHNraWxscyA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmdldEFjdGl2ZVNraWxscygpO1xuICAgICAgZm9yIChjb25zdCBzIG9mIHNraWxscykge1xuICAgICAgICBjb25zdCBrZXkgPSBgc2tpbGw6JHtzLm1ldGFkYXRhLm5hbWV9YDtcbiAgICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdza2lsbCcsXG4gICAgICAgICAgbmFtZTogcy5tZXRhZGF0YS5uYW1lLFxuICAgICAgICAgIG1ldGFkYXRhOiBzLm1ldGFkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGdhdGhlciBhY3RpdmUgc2tpbGxzIGZvciBwb2xpY3kgZXZhbHVhdGlvbicsIHsgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEFjdGl2ZSBhZ2VudHMgKGFzeW5jKVxuICAgICAgY29uc3QgYWdlbnRzID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuZ2V0QWN0aXZlQWdlbnRzKCk7XG4gICAgICBmb3IgKGNvbnN0IGFnZW50IG9mIGFnZW50cykge1xuICAgICAgICBjb25zdCBrZXkgPSBgYWdlbnQ6JHthZ2VudC5tZXRhZGF0YS5uYW1lfWA7XG4gICAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnYWdlbnQnLFxuICAgICAgICAgIG5hbWU6IGFnZW50Lm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgbWV0YWRhdGE6IGFnZW50Lm1ldGFkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGdhdGhlciBhY3RpdmUgYWdlbnRzIGZvciBwb2xpY3kgZXZhbHVhdGlvbicsIHsgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEFjdGl2ZSBlbnNlbWJsZXMgKGFzeW5jKVxuICAgICAgY29uc3QgZW5zZW1ibGVzID0gYXdhaXQgdGhpcy5lbnNlbWJsZU1hbmFnZXIuZ2V0QWN0aXZlRW5zZW1ibGVzKCk7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgZW5zZW1ibGVzKSB7XG4gICAgICAgIGNvbnN0IGVuc2VtYmxlS2V5ID0gYGVuc2VtYmxlOiR7ZS5tZXRhZGF0YS5uYW1lfWA7XG4gICAgICAgIHNlZW4uYWRkKGVuc2VtYmxlS2V5KTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdlbnNlbWJsZScsXG4gICAgICAgICAgbmFtZTogZS5tZXRhZGF0YS5uYW1lLFxuICAgICAgICAgIG1ldGFkYXRhOiBlLm1ldGFkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIElzc3VlICM2MjUgUGhhc2UgNDogUmVzb2x2ZSBlbnNlbWJsZSBtZW1iZXIgZ2F0ZWtlZXBlciBwb2xpY2llc1xuICAgICAgICBjb25zdCBtZW1iZXJzID0gKGUubWV0YWRhdGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LmVsZW1lbnRzIGFzXG4gICAgICAgICAgQXJyYXk8eyBlbGVtZW50X25hbWU6IHN0cmluZzsgZWxlbWVudF90eXBlOiBzdHJpbmcgfT4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lbWJlcnMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2YgbWVtYmVycykge1xuICAgICAgICAgICAgY29uc3QgbWVtYmVyS2V5ID0gYCR7bWVtYmVyLmVsZW1lbnRfdHlwZX06JHttZW1iZXIuZWxlbWVudF9uYW1lfWA7XG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMobWVtYmVyS2V5KSkgY29udGludWU7IC8vIEFscmVhZHkgYWN0aXZlIGluZGl2aWR1YWxseVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgbWVtYmVyRWxlbWVudHMgPSBhd2FpdCB0aGlzLmdldEVsZW1lbnRzKG1lbWJlci5lbGVtZW50X3R5cGUpO1xuICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IChtZW1iZXJFbGVtZW50cyBhcyBBcnJheTx7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PikuZmluZChcbiAgICAgICAgICAgICAgICBlbCA9PiAoZWw/Lm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KT8ubmFtZSA9PT0gbWVtYmVyLmVsZW1lbnRfbmFtZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoZm91bmQ/Lm1ldGFkYXRhICYmIChmb3VuZC5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LmdhdGVrZWVwZXIpIHtcbiAgICAgICAgICAgICAgICBzZWVuLmFkZChtZW1iZXJLZXkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IG1lbWJlci5lbGVtZW50X3R5cGUsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBtZW1iZXIuZWxlbWVudF9uYW1lLFxuICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IGZvdW5kLm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgLy8gTm9uLWZhdGFsOiBza2lwIG1lbWJlciBpZiBlbGVtZW50IHR5cGUgbG9va3VwIGZhaWxzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gZ2F0aGVyIGFjdGl2ZSBlbnNlbWJsZXMgZm9yIHBvbGljeSBldmFsdWF0aW9uJywgeyBlcnJvciB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgZ2V0UG9saWN5RWxlbWVudHNGb3JSZXBvcnQoc2Vzc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTxBcnJheTx7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgc2Vzc2lvbklkcz86IHN0cmluZ1tdO1xuICB9Pj4ge1xuICAgIGNvbnN0IG1lcmdlZCA9IG5ldyBNYXA8c3RyaW5nLCB7XG4gICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBzZXNzaW9uSWRzOiBTZXQ8c3RyaW5nPjtcbiAgICB9PigpO1xuXG4gICAgY29uc3QgYWRkRWxlbWVudCA9IChcbiAgICAgIGVsZW1lbnQ6IHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9LFxuICAgICAgc2Vzc2lvbklkczogc3RyaW5nW10gPSBbXSxcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5oYXNHYXRla2VlcGVyUG9saWN5KGVsZW1lbnQubWV0YWRhdGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gYCR7ZWxlbWVudC50eXBlfToke2VsZW1lbnQubmFtZX1gO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBtZXJnZWQuZ2V0KGtleSk7XG4gICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgc2Vzc2lvbklkcy5mb3JFYWNoKGlkID0+IGV4aXN0aW5nLnNlc3Npb25JZHMuYWRkKGlkKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWVyZ2VkLnNldChrZXksIHtcbiAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgIG1ldGFkYXRhOiBlbGVtZW50Lm1ldGFkYXRhLFxuICAgICAgICBzZXNzaW9uSWRzOiBuZXcgU2V0KHNlc3Npb25JZHMpLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgYWN0aXZlRWxlbWVudCBvZiBhd2FpdCB0aGlzLmdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5KCkpIHtcbiAgICAgIGFkZEVsZW1lbnQoYWN0aXZlRWxlbWVudCwgdGhpcy5hY3RpdmF0aW9uU3RvcmUgPyBbdGhpcy5hY3RpdmF0aW9uU3RvcmUuZ2V0U2Vzc2lvbklkKCldIDogW10pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2YXRpb25TdG9yZT8uaXNFbmFibGVkKCkpIHtcbiAgICAgIGNvbnN0IHBlcnNpc3RlZFN0YXRlcyA9IGF3YWl0IHRoaXMuYWN0aXZhdGlvblN0b3JlLmxpc3RQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVzKHNlc3Npb25JZCk7XG4gICAgICBjb25zdCBjYXRhbG9ncyA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTx7IG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGZpbGVuYW1lPzogc3RyaW5nIH0+PigpO1xuXG4gICAgICBjb25zdCBnZXRDYXRhbG9nID0gYXN5bmMgKHR5cGU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICAgIGlmICghY2F0YWxvZ3MuaGFzKG5vcm1hbGl6ZWRUeXBlKSkge1xuICAgICAgICAgIGNhdGFsb2dzLnNldChcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRUeXBlLFxuICAgICAgICAgICAgKGF3YWl0IHRoaXMuZ2V0RWxlbWVudHMobm9ybWFsaXplZFR5cGUpKSBhcyBBcnJheTx7IG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGZpbGVuYW1lPzogc3RyaW5nIH0+LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhdGFsb2dzLmdldChub3JtYWxpemVkVHlwZSkgPz8gW107XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaW5kUGVyc2lzdGVkRWxlbWVudCA9IGFzeW5jIChcbiAgICAgICAgdHlwZTogc3RyaW5nLFxuICAgICAgICBhY3RpdmF0aW9uOiBQZXJzaXN0ZWRBY3RpdmF0aW9uLFxuICAgICAgKTogUHJvbWlzZTx7IHR5cGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSB8IG51bGw+ID0+IHtcbiAgICAgICAgY29uc3QgY2F0YWxvZyA9IGF3YWl0IGdldENhdGFsb2codHlwZSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gdGhpcy5ub3JtYWxpemVMb29rdXBWYWx1ZShhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cFZhbHVlKGFjdGl2YXRpb24uZmlsZW5hbWUpO1xuXG4gICAgICAgIGNvbnN0IGZvdW5kID0gY2F0YWxvZy5maW5kKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBlbGVtZW50Lm1ldGFkYXRhID8/IHt9O1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gdGhpcy5ub3JtYWxpemVMb29rdXBWYWx1ZShtZXRhZGF0YVsnbmFtZSddKTtcbiAgICAgICAgICBjb25zdCBlbGVtZW50RmlsZW5hbWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cFZhbHVlKFxuICAgICAgICAgICAgZWxlbWVudC5maWxlbmFtZSA/PyBtZXRhZGF0YVsnZmlsZW5hbWUnXSA/PyBtZXRhZGF0YVsnc291cmNlRmlsZSddLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gZWxlbWVudE5hbWUgPT09IG5vcm1hbGl6ZWROYW1lIHx8IChub3JtYWxpemVkRmlsZW5hbWUgIT09ICcnICYmIGVsZW1lbnRGaWxlbmFtZSA9PT0gbm9ybWFsaXplZEZpbGVuYW1lKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFmb3VuZD8ubWV0YWRhdGEgfHwgIXRoaXMuaGFzR2F0ZWtlZXBlclBvbGljeShmb3VuZC5tZXRhZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogdGhpcy50b1BvbGljeUVsZW1lbnRUeXBlKHR5cGUpLFxuICAgICAgICAgIG5hbWU6IChmb3VuZC5tZXRhZGF0YVsnbmFtZSddIGFzIHN0cmluZykgPz8gYWN0aXZhdGlvbi5uYW1lLFxuICAgICAgICAgIG1ldGFkYXRhOiBmb3VuZC5tZXRhZGF0YSxcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIGZvciAoY29uc3Qgc3RhdGUgb2YgcGVyc2lzdGVkU3RhdGVzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubWVyZ2VQZXJzaXN0ZWRQb2xpY3lTdGF0ZShzdGF0ZSwgYWRkRWxlbWVudCwgZmluZFBlcnNpc3RlZEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKG1lcmdlZC52YWx1ZXMoKSkubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIHR5cGU6IGVudHJ5LnR5cGUsXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgbWV0YWRhdGE6IGVudHJ5Lm1ldGFkYXRhLFxuICAgICAgLi4uKGVudHJ5LnNlc3Npb25JZHMuc2l6ZSA+IDBcbiAgICAgICAgPyB7IHNlc3Npb25JZHM6IEFycmF5LmZyb20oZW50cnkuc2Vzc2lvbklkcykuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKSB9XG4gICAgICAgIDoge30pLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWVyZ2VQZXJzaXN0ZWRQb2xpY3lTdGF0ZShcbiAgICBzdGF0ZTogUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3QsXG4gICAgYWRkRWxlbWVudDogKGVsZW1lbnQ6IHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9LCBzZXNzaW9uSWRzPzogc3RyaW5nW10pID0+IHZvaWQsXG4gICAgZmluZFBlcnNpc3RlZEVsZW1lbnQ6ICh0eXBlOiBzdHJpbmcsIGFjdGl2YXRpb246IFBlcnNpc3RlZEFjdGl2YXRpb24pID0+IFByb21pc2U8eyB0eXBlOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0gfCBudWxsPixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGVuZGluZzogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFt0eXBlLCBhY3RpdmF0aW9uc10gb2YgT2JqZWN0LmVudHJpZXMoc3RhdGUuYWN0aXZhdGlvbnMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2YgYWN0aXZhdGlvbnMgPz8gW10pIHtcbiAgICAgICAgcGVuZGluZy5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm91bmQgPSBhd2FpdCBmaW5kUGVyc2lzdGVkRWxlbWVudCh0eXBlLCBhY3RpdmF0aW9uKTtcbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIGFkZEVsZW1lbnQoZm91bmQsIFtzdGF0ZS5zZXNzaW9uSWRdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwZW5kaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChwZW5kaW5nKTtcbiAgfVxuXG4gIGFzeW5jIGRlYWN0aXZhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VMRU1FTlRfREVBQ1RJVkFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0VsZW1lbnRDUlVESGFuZGxlci5kZWFjdGl2YXRlRWxlbWVudCcsXG4gICAgICAgIGRldGFpbHM6IGBFbGVtZW50IGRlYWN0aXZhdGlvbiByZXF1ZXN0ZWQ6ICR7dHlwZX0vJHtuYW1lfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVsZW1lbnRUeXBlOiB0eXBlLCBlbGVtZW50TmFtZTogbmFtZSB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLnN0cmF0ZWdpZXMuZ2V0KG5vcm1hbGl6ZWRUeXBlKTtcblxuICAgICAgaWYgKCFzdHJhdGVneSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0cmF0ZWd5LmRlYWN0aXZhdGUobmFtZSk7XG5cbiAgICAgIC8vIElzc3VlICM1OTg6IFBlcnNpc3QgZGVhY3RpdmF0aW9uIHN0YXRlIGZvciBzZXNzaW9uIHJlc3RvcmVcbiAgICAgIGlmICh0aGlzLmFjdGl2YXRpb25TdG9yZSkge1xuICAgICAgICB0aGlzLmFjdGl2YXRpb25TdG9yZS5yZWNvcmREZWFjdGl2YXRpb24obm9ybWFsaXplZFR5cGUsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBJc3N1ZSAjNzYyOiBFeHBvcnQgcG9saWNpZXMgdG8gYnJpZGdlIGFmdGVyIGRlYWN0aXZhdGlvblxuICAgICAgdGhpcy5wb2xpY3lFeHBvcnRTZXJ2aWNlPy5leHBvcnRQb2xpY2llcygpLmNhdGNoKCgpID0+IHt9KTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gUmUtdGhyb3cgRWxlbWVudE5vdEZvdW5kRXJyb3IgdG8gcHJvcGFnYXRlIHRvIE1DUC1BUUwgbGF5ZXJcbiAgICAgIC8vIFRoaXMgZW5zdXJlcyBvcGVyYXRpb25zIHJldHVybiBzdWNjZXNzPWZhbHNlIGluc3RlYWQgb2Ygc3VjY2Vzcz10cnVlIHdpdGggZXJyb3IgdGV4dFxuICAgICAgLy8gSXNzdWUgIzI3NTogSGFuZGxlcnMgcmV0dXJuIHN1Y2Nlc3M9dHJ1ZSBmb3IgbWlzc2luZyBlbGVtZW50c1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWxlbWVudE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIEFsc28gcmUtdGhyb3cgdmFsaWRhdGlvbiBlcnJvcnMgKGUuZy4sIG1pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVycylcbiAgICAgIC8vIHNvIHRoZXkgcmVzdWx0IGluIHN1Y2Nlc3M9ZmFsc2UgaW5zdGVhZCBvZiBzdWNjZXNzPXRydWUgd2l0aCBlcnJvciBjb250ZW50XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdwYXJhbWV0ZXIgaXMgcmVxdWlyZWQnKSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVhY3RpdmF0ZSBlbGVtZW50OmAsIHsgdHlwZSwgbmFtZSwgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGRlYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXNzdWUgIzcwODogR2V0IHRoZSBlbGVtZW50IG1hbmFnZXIgZm9yIGEgbm9ybWFsaXplZCB0eXBlLlxuICAgKiBVc2VkIHRvIGNoZWNrIGludmFsaWQgZWxlbWVudCByZWNvcmRzIHdoZW4gYW4gZWxlbWVudCBpcyBcIm5vdCBmb3VuZFwiLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRNYW5hZ2VyRm9yVHlwZShub3JtYWxpemVkVHlwZTogc3RyaW5nKTogQmFzZUVsZW1lbnRNYW5hZ2VyPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTogcmV0dXJuIHRoaXMucGVyc29uYU1hbmFnZXIgYXMgdW5rbm93biBhcyBCYXNlRWxlbWVudE1hbmFnZXI8YW55PjtcbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IHJldHVybiB0aGlzLnNraWxsTWFuYWdlcjtcbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHJldHVybiB0aGlzLnRlbXBsYXRlTWFuYWdlcjtcbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHJldHVybiB0aGlzLmFnZW50TWFuYWdlcjtcbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOiByZXR1cm4gdGhpcy5tZW1vcnlNYW5hZ2VyO1xuICAgICAgY2FzZSBFbGVtZW50VHlwZS5FTlNFTUJMRTogcmV0dXJuIHRoaXMuZW5zZW1ibGVNYW5hZ2VyO1xuICAgICAgZGVmYXVsdDogcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRFbGVtZW50RGV0YWlscyhuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMuc3RyYXRlZ2llcy5nZXQobm9ybWFsaXplZFR5cGUpO1xuXG4gICAgICBpZiAoIXN0cmF0ZWd5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHN0cmF0ZWd5LmdldEVsZW1lbnREZXRhaWxzKG5hbWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJc3N1ZSAjNzA4OiBXaGVuIGVsZW1lbnQgaXMgXCJub3QgZm91bmRcIiwgY2hlY2sgaWYgaXQgYWN0dWFsbHkgZXhpc3RzXG4gICAgICAvLyBvbiBkaXNrIGJ1dCBmYWlsZWQgdmFsaWRhdGlvbi4gUmV0dXJuIGEgZGlzdGluY3QgZXJyb3IgaW4gdGhhdCBjYXNlLlxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWxlbWVudE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgICBjb25zdCBtYW5hZ2VyID0gdGhpcy5nZXRNYW5hZ2VyRm9yVHlwZShub3JtYWxpemVkVHlwZSk7XG4gICAgICAgIGlmIChtYW5hZ2VyICYmIHR5cGVvZiBtYW5hZ2VyLmdldEludmFsaWRFbGVtZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgaW52YWxpZFJlY29yZCA9IG1hbmFnZXIuZ2V0SW52YWxpZEVsZW1lbnQobmFtZSk7XG4gICAgICAgICAgaWYgKGludmFsaWRSZWNvcmQpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRWYWxpZGF0aW9uRmFpbGVkRXJyb3IoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRUeXBlIGFzIEVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBpbnZhbGlkUmVjb3JkLnJlYXNvbixcbiAgICAgICAgICAgICAgaW52YWxpZFJlY29yZC5maWxlUGF0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGdldCBlbGVtZW50IGRldGFpbHM6YCwgeyB0eXBlLCBuYW1lLCBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZ2V0ICR7dHlwZX0gZGV0YWlscyBmb3IgJyR7bmFtZX0nOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbG9hZCBlbGVtZW50cyBvZiBhIHNwZWNpZmljIHR5cGUgZnJvbSB0aGUgZmlsZXN5c3RlbVxuICAgKiBFeHRyYWN0ZWQgZnJvbSBpbmRleC50czo2MDktNjc5IChleGFjdCBjb3B5LCBhZGFwdGVkIGZvciBoYW5kbGVyIHBhdHRlcm4pXG4gICAqL1xuICBhc3luYyByZWxvYWRFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcblxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGVyc29uYU1hbmFnZXIucmVsb2FkUGVyc29uYXMoKTtcblxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgdGhpcy5za2lsbE1hbmFnZXIuY2xlYXJDYWNoZSgpO1xuICAgICAgICAgIGNvbnN0IHNraWxscyA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5SEIFJlbG9hZGVkICR7c2tpbGxzLmxlbmd0aH0gc2tpbGxzIGZyb20gcG9ydGZvbGlvYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIC8vIFRlbXBsYXRlIG1hbmFnZXIgZG9lc24ndCBoYXZlIGNsZWFyQ2FjaGUsIGp1c3QgbGlzdFxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5SEIFJlbG9hZGVkICR7dGVtcGxhdGVzLmxlbmd0aH0gdGVtcGxhdGVzIGZyb20gcG9ydGZvbGlvYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIC8vIEFnZW50IG1hbmFnZXIgZG9lc24ndCBoYXZlIGNsZWFyQ2FjaGUsIGp1c3QgbGlzdFxuICAgICAgICAgIGNvbnN0IGFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5SEIFJlbG9hZGVkICR7YWdlbnRzLmxlbmd0aH0gYWdlbnRzIGZyb20gcG9ydGZvbGlvYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5NRU1PUlk6IHtcbiAgICAgICAgICAvLyBNZW1vcnkgbWFuYWdlciBkb2Vzbid0IGhhdmUgY2xlYXJDYWNoZSwganVzdCBsaXN0XG4gICAgICAgICAgY29uc3QgbWVtb3JpZXMgPSBhd2FpdCB0aGlzLm1lbW9yeU1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCflIQgUmVsb2FkZWQgJHttZW1vcmllcy5sZW5ndGh9IG1lbW9yaWVzIGZyb20gcG9ydGZvbGlvYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5FTlNFTUJMRToge1xuICAgICAgICAgIC8vIEVuc2VtYmxlIG1hbmFnZXIgZG9lc24ndCBoYXZlIGNsZWFyQ2FjaGUsIGp1c3QgbGlzdFxuICAgICAgICAgIGNvbnN0IGVuc2VtYmxlcyA9IGF3YWl0IHRoaXMuZW5zZW1ibGVNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5SEIFJlbG9hZGVkICR7ZW5zZW1ibGVzLmxlbmd0aH0gZW5zZW1ibGVzIGZyb20gcG9ydGZvbGlvYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byByZWxvYWQgJHt0eXBlfTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIHJlbG9hZCAke3R5cGV9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBhIHRlbXBsYXRlIHdpdGggdmFyaWFibGVzXG4gICAqIEV4dHJhY3RlZCBmcm9tIGluZGV4LnRzOjY4Mi03MDEgKGV4YWN0IGNvcHkpXG4gICAqXG4gICAqIEB0aHJvd3Mge0VsZW1lbnROb3RGb3VuZEVycm9yfSBXaGVuIHRlbXBsYXRlIGRvZXMgbm90IGV4aXN0XG4gICAqIEBzZWUgSXNzdWUgIzI3NSAtIEhhbmRsZXJzIHJldHVybiBzdWNjZXNzPXRydWUgZm9yIG1pc3NpbmcgZWxlbWVudHNcbiAgICovXG4gIGFzeW5jIHJlbmRlclRlbXBsYXRlKG5hbWU6IHN0cmluZywgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgLy8gVXNlIHRoZSBuZXcgVGVtcGxhdGVSZW5kZXJlciB1dGlsaXR5IGZvciBjbGVhbmVyIGNvZGUgYW5kIGJldHRlciB2YWxpZGF0aW9uXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50ZW1wbGF0ZVJlbmRlcmVyLnJlbmRlcihuYW1lLCB2YXJpYWJsZXMpO1xuXG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzICYmIHJlc3VsdC5jb250ZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDwn5OEIFJlbmRlcmVkIHRlbXBsYXRlICcke25hbWV9JzpcXG5cXG4ke3Jlc3VsdC5jb250ZW50fWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElzc3VlICMyNzU6IFRocm93IGVycm9yIGZvciBtaXNzaW5nIHRlbXBsYXRlcyBpbnN0ZWFkIG9mIHJldHVybmluZyBjb250ZW50XG4gICAgICBpZiAocmVzdWx0LmVycm9yPy5pbmNsdWRlcygnbm90IGZvdW5kJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVsZW1lbnROb3RGb3VuZEVycm9yKCdUZW1wbGF0ZScsIG5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MICR7cmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gcmVuZGVyIHRlbXBsYXRlJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGFuIGFnZW50IHdpdGggZ29hbCBwYXJhbWV0ZXJzXG4gICAqIFJldHVybnMgY29udGV4dCBmb3IgTExNIHRvIGRyaXZlIHRoZSBhZ2VudGljIGxvb3BcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVBZ2VudChuYW1lOiBzdHJpbmcsIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuZXhlY3V0ZUFnZW50KG5hbWUsIHBhcmFtZXRlcnMpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEZJWDogSXNzdWUgIzI3NSAtIFJlLXRocm93IEVsZW1lbnROb3RGb3VuZEVycm9yIGZvciBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFbGVtZW50Tm90Rm91bmRFcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgYWdlbnQgJyR7bmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZXhlY3V0ZSBhZ2VudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgYSBzdGVwIGluIGFnZW50IGV4ZWN1dGlvblxuICAgKi9cbiAgYXN5bmMgcmVjb3JkQWdlbnRTdGVwKGFyZ3M6IHtcbiAgICBhZ2VudE5hbWU6IHN0cmluZztcbiAgICBzdGVwRGVzY3JpcHRpb246IHN0cmluZztcbiAgICBvdXRjb21lOiBcInN1Y2Nlc3NcIiB8IFwiZmFpbHVyZVwiIHwgXCJwYXJ0aWFsXCI7XG4gICAgZmluZGluZ3M/OiBzdHJpbmc7XG4gICAgY29uZmlkZW5jZT86IG51bWJlcjtcbiAgICBuZXh0QWN0aW9uSGludD86IHN0cmluZztcbiAgICByaXNrU2NvcmU/OiBudW1iZXI7XG4gIH0pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIucmVjb3JkQWdlbnRTdGVwKGFyZ3MpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEZJWDogSXNzdWUgIzI3NSAtIFJlLXRocm93IEVsZW1lbnROb3RGb3VuZEVycm9yIGZvciBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFbGVtZW50Tm90Rm91bmRFcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlY29yZCBhZ2VudCBzdGVwIGZvciAnJHthcmdzLmFnZW50TmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gcmVjb3JkIHN0ZXA6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgYW4gYWdlbnQgZ29hbFxuICAgKi9cbiAgYXN5bmMgY29tcGxldGVBZ2VudEdvYWwoYXJnczoge1xuICAgIGFnZW50TmFtZTogc3RyaW5nO1xuICAgIGdvYWxJZD86IHN0cmluZztcbiAgICBvdXRjb21lOiBcInN1Y2Nlc3NcIiB8IFwiZmFpbHVyZVwiIHwgXCJwYXJ0aWFsXCI7XG4gICAgc3VtbWFyeTogc3RyaW5nO1xuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmNvbXBsZXRlQWdlbnRHb2FsKGFyZ3MpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEZJWDogSXNzdWUgIzI3NSAtIFJlLXRocm93IEVsZW1lbnROb3RGb3VuZEVycm9yIGZvciBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFbGVtZW50Tm90Rm91bmRFcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNvbXBsZXRlIGFnZW50IGdvYWwgZm9yICcke2FyZ3MuYWdlbnROYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBjb21wbGV0ZSBnb2FsOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhZ2VudCBzdGF0ZVxuICAgKi9cbiAgYXN5bmMgZ2V0QWdlbnRTdGF0ZShhcmdzOiB7XG4gICAgYWdlbnROYW1lOiBzdHJpbmc7XG4gICAgaW5jbHVkZURlY2lzaW9uSGlzdG9yeT86IGJvb2xlYW47XG4gICAgaW5jbHVkZUNvbnRleHQ/OiBib29sZWFuO1xuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmdldEFnZW50U3RhdGUoYXJncyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRklYOiBJc3N1ZSAjMjc1IC0gUmUtdGhyb3cgRWxlbWVudE5vdEZvdW5kRXJyb3IgZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVsZW1lbnROb3RGb3VuZEVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0IGFnZW50IHN0YXRlIGZvciAnJHthcmdzLmFnZW50TmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZ2V0IHN0YXRlOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnRpbnVlIGFnZW50IGV4ZWN1dGlvbiBmcm9tIHByZXZpb3VzIHN0YXRlXG4gICAqL1xuICBhc3luYyBjb250aW51ZUFnZW50RXhlY3V0aW9uKGFyZ3M6IHtcbiAgICBhZ2VudE5hbWU6IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBwcmV2aW91c1N0ZXBSZXN1bHQ/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuY29udGludWVBZ2VudEV4ZWN1dGlvbihhcmdzKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBGSVg6IElzc3VlICMyNzUgLSBSZS10aHJvdyBFbGVtZW50Tm90Rm91bmRFcnJvciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWxlbWVudE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjb250aW51ZSBhZ2VudCBleGVjdXRpb24gZm9yICcke2FyZ3MuYWdlbnROYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBjb250aW51ZSBleGVjdXRpb246ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWdncmVnYXRlIGFjdGl2ZSBlbGVtZW50cyBhY3Jvc3MgYWxsIHJlZ2lzdGVyZWQgZWxlbWVudCB0eXBlcy5cbiAgICogSXNzdWUgIzUwMTogQ2FsbGVkIHdoZW4gZ2V0X2FjdGl2ZV9lbGVtZW50cyBpcyBpbnZva2VkIHdpdGhvdXQgZWxlbWVudF90eXBlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhZ2dyZWdhdGVBY3RpdmVFbGVtZW50cygpOiBQcm9taXNlPE1DUFJlc3BvbnNlPiB7XG4gICAgY29uc3Qgc2VjdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtlbGVtZW50VHlwZSwgc3RyYXRlZ3ldIG9mIHRoaXMuc3RyYXRlZ2llcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyYXRlZ3kuZ2V0QWN0aXZlRWxlbWVudHMoKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHJlc3VsdC5jb250ZW50WzBdPy50ZXh0O1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgIHNlY3Rpb25zLnB1c2goYFske2VsZW1lbnRUeXBlfV1cXG4ke3RleHR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZhaWxlZCB0byBnZXQgYWN0aXZlICR7ZWxlbWVudFR5cGV9IGVsZW1lbnRzYCwgeyBlcnJvcjogZXJyIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogc2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICAgID8gc2VjdGlvbnMuam9pbignXFxuXFxuJylcbiAgICAgICAgICA6ICdObyBhY3RpdmUgZWxlbWVudHMgZm91bmQuJ1xuICAgICAgfV1cbiAgICB9O1xuICB9XG5cbn1cbiJdfQ==
@@ -200,6 +200,7 @@ export declare class MCPAQLHandler {
200
200
  * array if gathering fails (fail-open: only route policies apply).
201
201
  */
202
202
  private getActiveElements;
203
+ private getPolicyReportElements;
203
204
  /**
204
205
  * Handle CREATE operations (additive, non-destructive)
205
206
  *
@@ -1 +1 @@
1
- {"version":3,"file":"MCPAQLHandler.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/MCPAQLHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MCPAQLHandler.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/MCPAQLHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAU7C,OAAO,EAEL,eAAe,EAOf,WAAW,EAIZ,MAAM,YAAY,CAAC;AAapB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAGpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAI1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAGvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAG1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAI1F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AA6P1F;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4CAA4C;IAC5C,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAuDD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,kBAAkB,CAAC;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,mBAAmB,EAAE,mBAAmB,CAAC;IAEzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,kCAAkC,EAAE,iBAAiB,CAAC;IACjF,UAAU,EAAE,UAAU,CAAC;IAEvB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAE7C,UAAU,CAAC,EAAE,aAAa,CAAC;IAE3B,WAAW,CAAC,EAAE,OAAO,0CAA0C,EAAE,iBAAiB,CAAC;IAEnF,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAElD,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;CACrD;AAcD;;;;;;;;;;;;;;GAcG;AACH;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,qBAAa,aAAa;IAsHtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAtHlC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAIxB;IACL,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAmF;IACzH,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAEtC;IACF,+FAA+F;IAC/F,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAEjC;IACF;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiC;IACzE,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAoC;IACxE;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CA0B3B;IAEL;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;gBAG/B,QAAQ,EAAE,eAAe,EACzB,cAAc,CAAC,EAAE,qBAAqB,YAAA;IAWzD;;;OAGG;IACH,sBAAsB,IAAI,mBAAmB;IAI7C;;;OAGG;IACH,kBAAkB,IAAI,uBAAuB;IAI7C;;;;;;;;;;;;;OAaG;YACW,iBAAiB;YAkCjB,uBAAuB;IAqBrC;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;IAO1E;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;IAOxE;;;;;;;;;;OAUG;IACG,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;IAO1E;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;IAO1E;;;;;;;;;;;;;;;;;;;OAmBG;IACG,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;IAO3E;;;;;;;;;;;;;;OAcG;YACW,gBAAgB;IAmN9B;;;;;;;;;;;;;OAaG;YACW,YAAY;IA4E1B;;;;;;;;;;;;;;;;;;;;;;OAsBG;YACW,QAAQ;IAsHtB;;OAEG;YACW,mBAAmB;IAiGjC;;;;;;;OAOG;YACW,mBAAmB;IAoFjC;;;;;;;OAOG;YACW,mBAAmB;IAwCjC;;;;;;OAMG;IAEH;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IA0D1B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;YAkB1B,cAAc;IA+D5B;;OAEG;YACW,aAAa;IAyB3B;;OAEG;YACW,gBAAgB;IA2B9B;;OAEG;YACW,kBAAkB;IAgDhC;;OAEG;YACW,cAAc;IA0F5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;;;;;;;;OAUG;YACW,oBAAoB;IAyHlC;;OAEG;YACW,kBAAkB;IAuChC;;OAEG;YACW,iBAAiB;IA8E/B;;OAEG;YACW,YAAY;IA8B1B;;OAEG;YACW,cAAc;IAyE5B;;OAEG;YACW,qBAAqB;IAuCnC;;OAEG;YACW,eAAe;IAyB7B;;;;;;;;;;;OAWG;YACW,kBAAkB;IA+qBhC;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAmBvB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH;;;;;;;;;;OAUG;IACH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAS/B,oDAAoD;IACpD,OAAO,CAAC,MAAM,CAAC,mBAAmB;YAMpB,eAAe;IAoC7B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAgE7B;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;;;;;;;;;;;;;OAcG;YACW,eAAe;IA0a7B,0EAA0E;IAC1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAM;IAE/C;;;;;;;OAOG;IACH,OAAO,CAAC,8BAA8B;IAgCtC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,oBAAoB;IAqE5B;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IA0I1B;;;;OAIG;YACW,gBAAgB;IAiB9B;;;;OAIG;IACH,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAQtC;;;OAGG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;IACH,OAAO,CAAC,OAAO;IAQf;;OAEG;IACH,OAAO,CAAC,OAAO;IAYf;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,mBAAmB;IA+D3B;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAwBnC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA4BhC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;OAGG;IACH,OAAO,CAAC,aAAa;CAQtB"}