@dollhousemcp/mcp-server 2.0.39 → 2.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/cache/CollectionCache.d.ts +1 -0
- package/dist/cache/CollectionCache.d.ts.map +1 -1
- package/dist/cache/CollectionCache.js +7 -16
- package/dist/cache/CollectionIndexCache.d.ts +1 -1
- package/dist/cache/CollectionIndexCache.d.ts.map +1 -1
- package/dist/cache/CollectionIndexCache.js +3 -2
- package/dist/cache/cachePaths.d.ts +7 -0
- package/dist/cache/cachePaths.d.ts.map +1 -0
- package/dist/cache/cachePaths.js +15 -0
- package/dist/di/Container.js +2 -2
- package/dist/elements/agents/AgentManager.d.ts +121 -1
- package/dist/elements/agents/AgentManager.d.ts.map +1 -1
- package/dist/elements/agents/AgentManager.js +203 -31
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +4 -18
- package/dist/elements/memories/Memory.d.ts +7 -0
- package/dist/elements/memories/Memory.d.ts.map +1 -1
- package/dist/elements/memories/Memory.js +68 -34
- package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
- package/dist/elements/memories/MemoryManager.js +10 -2
- package/dist/elements/memories/memoryYamlValidation.d.ts +6 -0
- package/dist/elements/memories/memoryYamlValidation.d.ts.map +1 -0
- package/dist/elements/memories/memoryYamlValidation.js +25 -0
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/CollectionHandler.d.ts.map +1 -1
- package/dist/handlers/CollectionHandler.js +2 -3
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +135 -71
- package/dist/handlers/mcp-aql/OperationSchema.js +4 -4
- package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ElementPolicies.js +7 -5
- package/dist/portfolio/PortfolioManager.d.ts +5 -1
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioManager.js +9 -3
- package/dist/security/contentValidator.d.ts +9 -1
- package/dist/security/contentValidator.d.ts.map +1 -1
- package/dist/security/contentValidator.js +24 -3
- package/dist/security/secureYamlParser.d.ts +3 -1
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +3 -3
- package/dist/security/securityMonitor.d.ts +1 -1
- package/dist/security/securityMonitor.d.ts.map +1 -1
- package/dist/security/securityMonitor.js +1 -1
- package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
- package/dist/security/validation/BackgroundValidator.js +6 -4
- package/dist/storage/MemoryMetadataExtractor.d.ts.map +1 -1
- package/dist/storage/MemoryMetadataExtractor.js +7 -2
- package/dist/utils/filesystem.d.ts +6 -0
- package/dist/utils/filesystem.d.ts.map +1 -1
- package/dist/utils/filesystem.js +22 -1
- package/package.json +9 -9
- package/server.json +2 -2
package/dist/di/Container.js
CHANGED
|
@@ -432,7 +432,7 @@ export class DollhouseContainer {
|
|
|
432
432
|
return tracker;
|
|
433
433
|
}));
|
|
434
434
|
this.register('EnhancedIndexManager', () => new EnhancedIndexManager(this.resolve('IndexConfigManager'), this.resolve('ConfigManager'), this.resolve('PortfolioIndexManager'), this.resolve('NLPScoringManager'), this.resolve('VerbTriggerManager'), this.resolve('RelationshipManager'), this.resolve('EnhancedIndexHelpers'), this.resolve('FileOperationsService')));
|
|
435
|
-
this.register('CollectionIndexCache', () => new CollectionIndexCache(this.resolve('GitHubClient'),
|
|
435
|
+
this.register('CollectionIndexCache', () => new CollectionIndexCache(this.resolve('GitHubClient'), undefined, this.resolve('PerformanceMonitor'), this.resolve('FileOperationsService')));
|
|
436
436
|
this.register('UnifiedIndexManager', () => new UnifiedIndexManager({
|
|
437
437
|
portfolioIndexManager: this.resolve('PortfolioIndexManager'),
|
|
438
438
|
githubIndexer: this.resolve('GitHubPortfolioIndexer'),
|
|
@@ -1344,4 +1344,4 @@ export class DollhouseContainer {
|
|
|
1344
1344
|
}
|
|
1345
1345
|
}
|
|
1346
1346
|
}
|
|
1347
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpL0NvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLElBQUksT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxnQkFBZ0IsR0FDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBd0IsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMvRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsV0FBVyxFQUNYLG1CQUFtQixHQUNwQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLCtCQUErQixFQUMvQiw4QkFBOEIsRUFDOUIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUN6QiwwQkFBMEIsR0FDM0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQWtDbEYsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDNUMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFDMUMscUVBQXFFO0lBQzlELHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUVyQztRQUNFLHdEQUF3RDtRQUN4RCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7WUFDL0IsSUFBSSxFQUFFLDBCQUEwQjtZQUNoQyxRQUFRLEVBQUUsS0FBSztZQUNmLE1BQU0sRUFBRSxnQ0FBZ0M7WUFDeEMsT0FBTyxFQUFFLDZDQUE2QztTQUN2RCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxRQUFRLENBQUksSUFBWSxFQUFFLE9BQWdCLEVBQUUsVUFBbUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1FBQ3ZHLGlEQUFpRDtRQUNqRCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7WUFDL0IsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixRQUFRLEVBQUUsS0FBSztZQUNmLE1BQU0sRUFBRSw2QkFBNkI7WUFDckMsT0FBTyxFQUFFLHVCQUF1QixJQUFJLEVBQUU7WUFDdEMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7U0FDNUUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ3RCLE9BQU8sRUFBRSxPQUF3QjtZQUNqQyxRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUk7U0FDckMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSSxPQUFPLENBQUksSUFBWTtRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYix3REFBd0Q7WUFDeEQsZUFBZSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQixJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsTUFBTSxFQUFFLDRCQUE0QjtnQkFDcEMsT0FBTyxFQUFFLDJCQUEyQixJQUFJLEVBQUU7Z0JBQzFDLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7YUFDdEMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JDLG9EQUFvRDtnQkFDcEQsZUFBZSxDQUFDLGdCQUFnQixDQUFDO29CQUMvQixJQUFJLEVBQUUsaUJBQWlCO29CQUN2QixRQUFRLEVBQUUsS0FBSztvQkFDZixNQUFNLEVBQUUsNEJBQTRCO29CQUNwQyxPQUFPLEVBQUUsMkJBQTJCLElBQUksRUFBRTtvQkFDMUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtpQkFDdEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDLFFBQWEsQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFPLENBQUM7SUFDaEMsQ0FBQztJQUVPLGdCQUFnQjtRQUd0Qiw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRXhELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUM7WUFDN0QsZ0JBQWdCLEVBQUUsa0NBQWtDLEVBQUU7U0FDdkQsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFvQixDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1lBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQzFFLDhFQUE4RTtZQUM5RSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7WUFDeEQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUM3QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtZQUNwQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQW1CLGtCQUFrQixDQUFDLENBQUM7WUFDNUUsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RSxvSEFBb0g7WUFDcEgsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFpQixnQkFBZ0IsQ0FBQyxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDaEgsT0FBTyxJQUFJLGVBQWUsQ0FDeEIsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixTQUFTLEVBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUN0QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FDN0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUM3QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksc0JBQXNCLENBQUM7WUFDdkUsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7U0FDdEQsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2SyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUNyQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhGLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsU0FBUyxDQUNWLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxjQUFjLENBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUNuQztZQUNFLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ3ZELGlCQUFpQixFQUFFLElBQUk7WUFDdkIsMEJBQTBCLEVBQUUsSUFBSTtZQUNoQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1lBQy9DLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUM3QyxDQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxxQkFBcUIsQ0FDcEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUMvQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksdUJBQXVCLENBQ3hFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FDdkMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4SyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN6RixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELG1CQUFtQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUM7WUFDeEQsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7U0FDdEQsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQ2xFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQzVCLDBCQUEwQixFQUFFLENBQzdCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxzQkFBc0IsQ0FDdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUNyQyxDQUFDLENBQUM7UUFFSCxXQUFXO1FBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksa0JBQWtCLENBQzlELElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxFQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQ2hDLENBQUMsQ0FBQztRQUVILFVBQVU7UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7WUFDL0IsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFdkMsdUJBQXVCO1lBQ3ZCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEtBQUssT0FBTztnQkFDNUMsQ0FBQyxDQUFDLElBQUksY0FBYyxFQUFFO2dCQUN0QixDQUFDLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDO2dCQUMvQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQ3JCLFNBQVM7Z0JBQ1QsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUMvQixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQ25DLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxxQkFBcUI7Z0JBQ25ELGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtnQkFDdkMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLG1CQUFtQjthQUNoRCxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRTdCLHlCQUF5QjtZQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLGFBQWEsQ0FBQztnQkFDbkMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7Z0JBQ3JDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0I7Z0JBQy9DLFlBQVksRUFBRSxNQUFNLENBQUMsa0JBQWtCO2dCQUN2QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsdUJBQXVCO2FBQ2xELENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFakQsdURBQXVEO1lBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ1YsRUFBRSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDbkMsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLEtBQUssRUFBRSxNQUFNO2dCQUNiLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixPQUFPLEVBQUUsaUJBQWlCLE9BQU8sV0FBVztnQkFDNUMsSUFBSSxFQUFFO29CQUNKLE9BQU8sRUFBRSxPQUFPO29CQUNoQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0JBQ3pCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztvQkFDM0IsT0FBTyxFQUFFLEdBQUcsQ0FBQyxxQkFBcUI7d0JBQ2hDLENBQUMsQ0FBQyw4QkFBOEIsR0FBRyxDQUFDLDBCQUEwQixFQUFFO3dCQUNoRSxDQUFDLENBQUMsVUFBVTtpQkFDZjthQUNGLENBQUMsQ0FBQztZQUVILE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgscUJBQXFCO1FBQ3JCLDBFQUEwRTtRQUMxRSwwRUFBMEU7UUFDMUUsc0NBQXNDO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7Z0JBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDMUQsT0FBTyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxZQUFZO1FBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUNsRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUVILHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQztZQUNFLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQW1CLGtCQUFrQixDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsVUFBVSxDQUFDO1lBQ3JHLG9CQUFvQixFQUFFLGdDQUFnQyxFQUFFO1lBQ3hELE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxlQUFlO1NBQzlDLENBQ0YsQ0FBQyxDQUFDO1FBRUgsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztZQUNqRSwwQkFBMEIsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDckMsSUFBSSxDQUFDO29CQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQXFCLG9CQUFvQixDQUFDLENBQUM7b0JBQ3ZFLE9BQU8sT0FBTyxDQUFDLDBCQUEwQixFQUFFLENBQUM7Z0JBQzlDLENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUM7WUFDSCxDQUFDO1lBQ0QsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsZUFBZTtTQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVKLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQzlCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxlQUFlLENBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUM5QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQW1CLGtCQUFrQixDQUFDLENBQUMsVUFBVSxFQUFFLEVBQy9ELElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQzlCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBYSxDQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FDOUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQzlCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDM0Usa0VBQWtFO1FBQ2xFLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztRQUN0RixnR0FBZ0c7UUFDaEcsWUFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUMsV0FBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzNGLDJGQUEyRjtRQUMzRixZQUFZLENBQUMsNkJBQTZCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDckYsK0ZBQStGO1FBQy9GLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUVuRiw2REFBNkQ7UUFDN0QsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksbUJBQW1CLENBQ2hFLElBQUksQ0FBQyxPQUFPLENBQW9CLG1CQUFtQixDQUFDLEVBQ3BELElBQUksQ0FBQyxPQUFPLENBQWdCLGVBQWUsQ0FBQyxFQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFjLGFBQWEsQ0FBQyxDQUN6QyxDQUFDLENBQUM7UUFFSCxhQUFhO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDZCQUE2QixFQUFFLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO1FBRTFGLG9CQUFvQjtRQUNwQiwyRkFBMkY7UUFDM0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixDQUM5RCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUNILHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZUFBZSxDQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUNILDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksWUFBWSxDQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FDL0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQ2pDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FDaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUM5QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBRXJGLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtZQUNwQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQXFCLG9CQUFvQixDQUFDLENBQUM7WUFDbEYsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUMsT0FBTyxJQUFJLGlCQUFpQixDQUFDO2dCQUN6QixXQUFXLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLEdBQUcsSUFBSTtnQkFDdEQsY0FBYyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYztnQkFDekMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWTtnQkFDckMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7YUFDbEQsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7WUFDckMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQztnQkFDMUIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUI7Z0JBQ3JELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCO2dCQUNuRCxlQUFlLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlO2FBQ2hELENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7WUFDdEMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQztnQkFDM0IsTUFBTSxFQUFFO29CQUNKLGFBQWEsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQjtvQkFDckQsbUJBQW1CLEVBQUUsSUFBSTtpQkFDNUI7Z0JBQ0Qsa0JBQWtCO2dCQUNsQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2dCQUN0RCxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUNoRCxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckwsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDJCQUEyQixDQUN6RSxJQUFJLHdCQUF3QixFQUFFLEVBQzlCLElBQUksMkJBQTJCLENBQUM7WUFDOUIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDN0MsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztTQUN6RCxDQUFDLEVBQ0YsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksc0JBQXNCLENBQUMsT0FBTyxDQUFDLEVBQ2hELENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDVixNQUFNLE9BQU8sR0FBRyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQztnQkFDSCxPQUFPLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQy9CLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxNQUFNLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FDeEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUM1QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3hDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztZQUMvRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1lBQzVELGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQzFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNsQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDdEQsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7U0FDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUkscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFFdEUsZUFBZTtRQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxvQkFBb0IsQ0FBQztZQUNqRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1lBQ25ELGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDbkQsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUM7WUFDL0MsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDckQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDN0YsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDOUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1lBQzVELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDOUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDckQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDO1lBQ2pFLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUM1QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUM7WUFDL0MsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDckQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQzdDLENBQUMsQ0FBQyxDQUFDO1FBRUosU0FBUztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksV0FBVyxDQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFpQixnQkFBZ0IsQ0FBQyxDQUMvQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUNyQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtZQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1lBQzVFLDJDQUEyQztZQUMzQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQWUsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNwRSxPQUFPLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDbEUsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDekMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksd0JBQXdCLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLEtBQUssQ0FBQyxnQkFBZ0I7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBZSxjQUFjLENBQUMsQ0FBQztRQUN6RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFtQixrQkFBa0IsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBbUIsa0JBQWtCLENBQUMsQ0FBQztRQUU1RSxtQ0FBbUM7UUFDbkMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFeEMsdUZBQXVGO1FBQ3ZGLHlFQUF5RTtRQUN6RSxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDdkMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFO1lBQ2pDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtTQUMxQixDQUFDLENBQUM7UUFFSCx5Q0FBeUM7UUFDekMsTUFBTSxXQUFXLEdBQTJDLEVBQUUsQ0FBQztRQUUvRCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLGNBQWMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDZixLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JHLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLGVBQWUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDZixLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JHLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxtREFBbUQ7UUFDbkQsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxxREFBcUQ7UUFDckQsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xILENBQUM7UUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWhDLDRDQUE0QztRQUM1QyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUMvRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRWhFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixNQUFNLENBQUMsYUFBYSxXQUFXLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pELENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQztZQUN6RCxNQUFNLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQscUZBQXFGO1FBQ3JGLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDM0MsTUFBTSxDQUFDLElBQUksQ0FBQywwRUFBMEUsRUFBRSxHQUFHLENBQUMsQ0FDN0YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2RSxvQ0FBb0M7UUFDcEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsQ0FBQztRQUNuRSxNQUFNLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxXQUFXLDJCQUEyQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUMzSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLHFCQUFxQjtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFlLGNBQWMsQ0FBQyxDQUFDO1FBRXpELG1GQUFtRjtRQUNuRixnRkFBZ0Y7UUFDaEYsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLFNBQVMsSUFBSSxDQUFDLENBQUM7WUFDN0QsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUVsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLElBQUksQ0FDVCx5Q0FBeUMsTUFBTSxDQUFDLFVBQVUsS0FBSztZQUMvRCxtQkFBbUIsTUFBTSxDQUFDLE9BQU8saUJBQWlCLE1BQU0sQ0FBQyxjQUFjLEtBQUssQ0FDN0UsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBb0I7UUFDakQsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLG9CQUFvQixDQUFDLEtBQW9CO1FBQ3BELGlGQUFpRjtRQUNqRixxRkFBcUY7UUFDckYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUN4RSxNQUFNLG1CQUFtQixFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFFNUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBb0I7UUFDdkQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsQ0FBQztZQUNuRSxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUM7WUFFekMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxjQUFjLEdBQUcsTUFBTSxhQUFhLENBQUMsK0JBQStCLEVBQUUsQ0FBQztnQkFFN0UsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxDQUFDLElBQUksQ0FDVCx3Q0FBd0MsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLFlBQVksRUFDaEYsY0FBYyxDQUFDLE1BQU0sQ0FDdEIsQ0FBQztnQkFDSixDQUFDO2dCQUVELE1BQU0sQ0FBQyxJQUFJLENBQ1QsMkJBQTJCLGNBQWMsQ0FBQyxNQUFNLFlBQVk7b0JBQzVELEtBQUssY0FBYyxDQUFDLFdBQVcsYUFBYSxjQUFjLENBQUMsT0FBTyxVQUFVLENBQzdFLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1lBQzNFLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELEtBQUssRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sS0FBSyxDQUFDLHlCQUF5QixDQUFDLEtBQW9CO1FBQzFELEtBQUssRUFBRSxVQUFVLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBa0IsaUJBQWlCLENBQUMsQ0FBQztZQUN6RSxNQUFNLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUVuQyxJQUFJLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxLQUFLLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0I7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFzQixxQkFBcUIsQ0FBQyxDQUFDO1lBQ3JGLE1BQU0sbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDN0MsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQW9CO1FBQ2pELEtBQUssRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWEsWUFBWSxDQUFDLENBQUM7WUFDMUQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsS0FBSyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sS0FBSyxDQUFDLHlCQUF5QixDQUFDLEtBQW9CO1FBQzFELEtBQUssRUFBRSxVQUFVLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBaUIsZ0JBQWdCLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0MsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELEtBQUssRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsc0VBQXNFO0lBQzlELFVBQVUsQ0FBSSxJQUFZO1FBQ2hDLElBQUksQ0FBQztZQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBSSxJQUFJLENBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFBQyxPQUFPLFNBQVMsQ0FBQztRQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELG1EQUFtRDtJQUMzQyxpQkFBaUIsQ0FDdkIsU0FBcUQsRUFDckQsV0FBMEM7UUFFMUMsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBYSxZQUFZLENBQUMsQ0FBQztZQUMxRCxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMvQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3pFLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFvQjtRQUNuRCxLQUFLLEVBQUUsVUFBVSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQjtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUU1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFrQixpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3hELE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQW1CLGtCQUFrQixDQUFDLENBQUM7WUFDNUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBZ0IsZUFBZSxDQUFDLENBQUM7WUFDaEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBb0IsbUJBQW1CLENBQUMsQ0FBQztZQUM1RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFnQixlQUFlLENBQUMsQ0FBQztZQUN0RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFhLFlBQVksQ0FBQyxDQUFDO1lBRTFELGdFQUFnRTtZQUNoRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsQ0FBQztZQUNuRSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFTLGNBQWMsQ0FBQyxDQUFDO1lBRXBFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFDakYsTUFBTSxNQUFNLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQztnQkFDdkMsU0FBUztnQkFDVCxlQUFlO2dCQUNmLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7Z0JBQzNDLFVBQVU7Z0JBQ1YsV0FBVztnQkFDWCxhQUFhO2dCQUNiLGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3hELGlCQUFpQixFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7Z0JBQ2pGLElBQUksRUFBRSxVQUFVO2FBQ2pCLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULEtBQUssRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsd0JBQXdCLENBQUMsYUFBMEMsRUFBRSxLQUFvQjtRQUNyRyxLQUFLLEVBQUUsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO2dCQUM3RixPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO2dCQUNoRixPQUFPO1lBQ1QsQ0FBQztZQUVELG9FQUFvRTtZQUNwRSxzRUFBc0U7WUFDdEUsMEVBQTBFO1lBQzFFLE1BQU0sSUFBSSxHQUFHLGFBQWEsRUFBRSxJQUFJLEtBQUssUUFBUTtnQkFDM0MsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJO2dCQUNwQixDQUFDLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBRTVDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7Z0JBQzdGLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRTNCLE1BQU0sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ2xHLE1BQU0sQ0FBQyxLQUFLLENBQUMsNERBQTRELElBQUksRUFBRSxDQUFDLENBQUM7WUFDakYsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7WUFFN0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztZQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxJQUFJLEtBQUssU0FBUyxLQUFLLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0NBQStDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELEtBQUssRUFBRSxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDLEtBQW9CO1FBQ3ZELEtBQUssRUFBRSxVQUFVLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sa0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLHVEQUF1RCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxLQUFLLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxLQUFvQjtRQUMxRCxLQUFLLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQztZQUNILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBcUIsQ0FBQztZQUM5RSxNQUFNLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsdURBQXVELEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUNELEtBQUssRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sS0FBSyxDQUFDLDJCQUEyQixDQUFDLEtBQW9CO1FBQzVELEtBQUssRUFBRSxVQUFVLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFRLENBQUM7WUFDdkUsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsS0FBSyxFQUFFLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQXNCO1FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWlCLGdCQUFnQixDQUFDLENBQUM7UUFDdEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBZSxjQUFjLENBQUMsQ0FBQztRQUNoRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFlLGNBQWMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWdCLGVBQWUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWtCLGlCQUFpQixDQUFDLENBQUM7UUFFekUsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUVyQixvRUFBb0U7UUFDcEUsbUZBQW1GO1FBQ25GLEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQztnQkFDSCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQzFELE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ25CLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQy9FLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4RCxZQUFZLEVBQUUsQ0FBQztnQkFDakIsQ0FBQztZQUNILENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQy9FLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4RCxZQUFZLEVBQUUsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQztRQUVELGlCQUFpQjtRQUNqQixtRkFBbUY7UUFDbkYsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixhQUFhLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEQsWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxpQkFBaUI7UUFDakIsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixhQUFhLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEQsWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvRCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUUsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDeEQsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLFVBQVUsQ0FBQyxJQUFJLDBDQUEwQyxDQUFDLENBQUM7Z0JBQ3JHLFNBQVM7WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25FLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixhQUFhLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUM5RSxLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkQsWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUM5RSxLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkQsWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ25CLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQ2hGLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN6RCxZQUFZLEVBQUUsQ0FBQztnQkFDakIsQ0FBQztZQUNILENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ2hGLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6RCxZQUFZLEVBQUUsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksYUFBYSxHQUFHLENBQUMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxDQUFDLElBQUksQ0FDVCw4QkFBOEIsYUFBYSx3QkFBd0IsWUFBWSx1QkFBdUIsS0FBSyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQzlILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQTBCLHlCQUF5QixDQUFDLENBQUM7UUFDMUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBaUIsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUF3Qix1QkFBdUIsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUM7UUFDakcsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO1FBRW5ILDJDQUEyQztRQUMzQyxNQUFNLHFCQUFxQixHQUFHO1lBQzVCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLElBQUksSUFBSTtZQUM5RCxHQUFHLEVBQUUsQ0FBQyxLQUFvQixFQUFFLEVBQUU7Z0JBQzVCLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsMkVBQTJFO29CQUMzRSw2RUFBNkU7b0JBQzdFLDBFQUEwRTtvQkFDMUUsY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDaEQsTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsS0FBSyxrQ0FBa0MsRUFBRSxHQUFHLENBQUMsQ0FDekcsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sY0FBYyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUN2QyxjQUFjLEVBQ2QsZUFBZSxFQUNmLGVBQWUsRUFDZixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLHFCQUFxQixDQUN0QixDQUFDO1FBRUYsTUFBTSxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFOUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGtCQUFrQixDQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixjQUFjLEVBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUNwQyxDQUFDO1FBQ0Ysc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUU5RCxrRUFBa0U7UUFDbEUsZ0RBQWdEO1FBRWhELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFDeEIsY0FBYyxFQUFFLGtDQUFrQztRQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsRUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLEVBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FDdEMsQ0FBQztRQUVGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQ25DLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQ3JDLENBQUM7UUFFRixNQUFNLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLENBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQ25ELGNBQWMsRUFDZCxXQUFXLEVBQ1gsZ0JBQWdCLENBQ2pCLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FDekMsY0FBYyxFQUNkLFdBQVcsRUFDWCxnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxDQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUM3QixXQUFXLEVBQ1gsZ0JBQWdCLENBQ2pCLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUM3QixnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUNwQyxnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLHVEQUF1RDtRQUN2RCx5R0FBeUc7UUFDekcsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFO1lBQzNDLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsNkJBQTZCLEVBQUUsSUFBSTtZQUNuQywyQkFBMkIsRUFBRSxHQUFHLENBQUMsNkNBQTZDO1NBQy9FLENBQUMsQ0FBQztRQUVILDRGQUE0RjtRQUM1RixtRUFBbUU7UUFDbkUsMERBQTBEO1FBQzFELDREQUE0RDtRQUM1RCx1RkFBdUY7UUFDdkYsd0ZBQXdGO1FBQ3hGLE1BQU0sV0FBVyxHQUFvQjtZQUNuQyxXQUFXLEVBQUUsa0JBQWtCO1lBQy9CLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUM1QyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDMUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDO1lBQ3hELDBDQUEwQztZQUMxQyxpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsYUFBYTtZQUNiLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2QsV0FBVztZQUNYLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7WUFDbEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUNwRCxVQUFVLEVBQUcsMENBQTBDO1lBQ3ZELGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDdEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFHLGlDQUFpQztZQUN4RixvQkFBb0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQUcsa0NBQWtDO1lBQy9GLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsRUFBRyxzQ0FBc0M7WUFDakcsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBcUIsb0JBQW9CLENBQUM7WUFDMUUsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBMEIseUJBQXlCLENBQUM7WUFDekYsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBMkIsMEJBQTBCLENBQUM7U0FDN0YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRTtZQUNoRCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBb0IsbUJBQW1CLENBQUMsQ0FBQztZQUFDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQUMsT0FBTyxTQUFTLENBQUM7WUFBQyxDQUFDLENBQUMsQ0FBQztZQUMvRyxZQUFZLEVBQUUsSUFBSTtZQUNsQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBaUIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBRXJHLHdEQUF3RDtRQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVuRSxPQUFPO1lBQ0wsY0FBYztZQUNkLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixvQkFBb0I7WUFDcEIsZUFBZTtZQUNmLGFBQWE7WUFDYixXQUFXO1lBQ1gsWUFBWSxFQUFFLFNBQW9DLEVBQUUsMENBQTBDO1lBQzlGLG9CQUFvQjtZQUNwQixhQUFhO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQWM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUU5QyxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QywwREFBMEQ7UUFDMUQsK0RBQStEO1FBQy9ELDJFQUEyRTtRQUMzRSx5RUFBeUU7UUFDekUsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1FBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFcEQsSUFBSSxhQUFhLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakMsK0NBQStDO1lBQy9DLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDekQsWUFBWSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzdELFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMvRCxZQUFZLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDN0QsWUFBWSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pELFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztnQkFDL0IscUJBQXFCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNqQyxNQUFNLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztnQkFDckQsbUJBQW1CLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUMvQixNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQzthQUNsRCxDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsMEJBQTBCLENBQ3JDLE1BQU0sQ0FBQyxvQkFBb0IsRUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBcUIsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FDbkUsQ0FBQztZQUNGLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNOLDRDQUE0QztZQUM1QyxZQUFZLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUN4RSxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7WUFDckMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtZQUM3QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1lBQzNDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDekMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtZQUMzQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7WUFDbkMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7U0FDbEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBYyxhQUFhLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV0RyxPQUFPO1lBQ0wsR0FBRyxNQUFNO1lBQ1QsWUFBWTtTQUNiLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNLLGlCQUFpQixDQUN2QixZQUEwQixFQUMxQixhQUFvQyxFQUNwQyxhQUE0QixFQUM1QixnQkFTQztRQUVELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzFELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXJELG1EQUFtRDtRQUNuRCxJQUFJLGlCQUF5QixDQUFDO1FBQzlCLElBQUksb0JBQTRCLENBQUM7UUFFakMsSUFBSSxhQUFhLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakMsc0RBQXNEO1lBQ3RELE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQVksQ0FBQyxDQUFDO1lBQ3BELFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNoRCxpQkFBaUIsR0FBRyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN4RCxvQkFBb0IsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDTixzREFBc0Q7WUFDdEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBWSxDQUFDLENBQUM7WUFDcEQsWUFBWSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ25FLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZFLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pFLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3ZFLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ25FLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztnQkFDL0IscUJBQXFCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNqQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDO2dCQUMvRCxtQkFBbUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQy9CLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7YUFDNUQsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLDBCQUEwQixDQUNyQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBcUIsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FDbkUsQ0FBQztZQUNGLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUN0RSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN4RCxvQkFBb0IsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckQsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsR0FBRyxhQUFhLENBQUM7UUFDcEQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUVSLHFCQUFxQjtRQUNyQixNQUFNLENBQUMsSUFBSSxDQUNULCtCQUErQixnQkFBZ0IsWUFBWSxhQUFhLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FDbkcsQ0FBQztRQUVGLElBQUksYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLHNDQUFzQztZQUN0QyxNQUFNLENBQUMsSUFBSSxDQUNULGtCQUFrQixTQUFTLENBQUMsY0FBYyxFQUFFLGtCQUFrQixjQUFjLHdCQUF3QixvQkFBb0IsWUFBWSxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUNqTCxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixnREFBZ0Q7WUFDaEQsTUFBTSxDQUFDLElBQUksQ0FDVCxzQ0FBc0Msb0JBQW9CLFlBQVksaUJBQWlCLENBQUMsY0FBYyxFQUFFLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUM1TCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxxQkFBcUIsQ0FBQyxjQUE4QjtRQUMxRCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBOEQsb0JBQW9CLENBQUMsQ0FBQztZQUNoSCxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSwyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWhDLDhEQUE4RDtRQUM5RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQztZQUNILGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUvQiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBeUUsbUJBQW1CLENBQUMsQ0FBQztZQUM1SCxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWhDLDZCQUE2QjtRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUEyRCxpQkFBaUIsQ0FBQyxDQUFDO1lBQzlHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFaEMsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQztZQUNILGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLCtCQUErQixFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUvQixpRkFBaUY7UUFDakYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBc0Usc0JBQXNCLENBQUMsQ0FBQztZQUNoSSxzRUFBc0U7WUFDdEUsSUFBSSx1QkFBdUIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxPQUFPLEdBQUksYUFBcUIsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDN0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNoRixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWhDLGtDQUFrQztRQUNsQyxJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFzRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQzlILGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFaEMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQTBCLHlCQUF5QixDQUFDLENBQUM7WUFDbkYsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUkseUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVoQyxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBMkIsMEJBQTBCLENBQUMsQ0FBQztZQUNyRixjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsTUFBTSxNQUFNLEdBQXdGLEVBQUUsQ0FBQztRQUN2RyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUE0RCxVQUFVLENBQUMsQ0FBQztZQUNyRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBZSxFQUFFLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUvQixNQUFNLFlBQVksR0FBRztZQUNuQixnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsY0FBYztZQUNoRCxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCO1NBQzdDLENBQUM7UUFDWCxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUEyRSxJQUFJLENBQUMsQ0FBQztnQkFDekcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQix1RUFBdUU7UUFDdkUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMvRCxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBRXhDLHNFQUFzRTtRQUN0RSxJQUFJLENBQUM7WUFDSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBRXZELCtDQUErQztRQUMvQyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFpQixrQkFBa0IsQ0FBQyxDQUFDO1lBQ2xFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE1BQU0sUUFBUSxHQUFvRCxFQUFFLENBQUM7UUFDckUsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7Z0JBQUUsU0FBUztZQUNoQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBZSxDQUFDO1lBQ3pDLElBQUksT0FBTyxRQUFRLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUMzQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRixDQUFDO2lCQUFNLElBQUksT0FBTyxRQUFRLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNsRCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsZ0JBQWlFLEVBQ2pFLE9BQXFDO1FBRXJDLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM5QixLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDaEQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2hHLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLFdBQVcsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2RSxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxRQUFRLENBQUMsTUFBTSxzQkFBc0IsZ0JBQWdCLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQztRQUM1SCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUI7UUFDckMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBa0IsaUJBQWlCLENBQUMsQ0FBQztZQUN6RSxNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaURBQWlELENBQUMsQ0FBQztnQkFDL0QsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsbUNBQW1DLENBQUMsQ0FBQztnQkFDL0UsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsUUFBUSxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7WUFDNUUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sS0FBSyxHQUFHLE1BQU0sZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNwRCxNQUFNLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztZQUMvRSxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixZQUFZLENBQUMsUUFBUSxDQUFDLDhDQUE4QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBQQUNLQUdFX1ZFUlNJT04sIFBBQ0tBR0VfVkVSU0lPTiBhcyBWRVJTSU9OIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzXCI7XG5pbXBvcnQgeyBWZXJiVHJpZ2dlck1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1ZlcmJUcmlnZ2VyTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUmVsYXRpb25zaGlwTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUmVsYXRpb25zaGlwTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgTkxQU2NvcmluZ01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL05MUFNjb3JpbmdNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGxvYWRJbmRpY2F0b3JDb25maWcgfSBmcm9tIFwiLi4vY29uZmlnL2luZGljYXRvci1jb25maWcuanNcIjtcbmltcG9ydCB7IGVudiB9IGZyb20gXCIuLi9jb25maWcvZW52LmpzXCI7XG5pbXBvcnQgeyBBUElDYWNoZSwgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSW5kZXhDYWNoZSwgQ2FjaGVNZW1vcnlCdWRnZXQgfSBmcm9tIFwiLi4vY2FjaGUvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldFZhbGlkYXRlZEdsb2JhbENhY2hlTWVtb3J5Qnl0ZXMsIGdldFZhbGlkYXRlZE1heEJhY2t1cHNQZXJFbGVtZW50LCBTVE9SQUdFX0xBWUVSX0NPTkZJRyB9IGZyb20gXCIuLi9jb25maWcvcGVyZm9ybWFuY2UtY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBCYWNrdXBTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0JhY2t1cFNlcnZpY2UuanNcIjtcbmltcG9ydCB7XG4gIEdpdEh1YkNsaWVudCxcbiAgQ29sbGVjdGlvbkJyb3dzZXIsXG4gIENvbGxlY3Rpb25JbmRleE1hbmFnZXIsXG4gIENvbGxlY3Rpb25TZWFyY2gsXG4gIFBlcnNvbmFEZXRhaWxzLFxuICBFbGVtZW50SW5zdGFsbGVyLFxufSBmcm9tIFwiLi4vY29sbGVjdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgR2l0SHViQXV0aE1hbmFnZXIgfSBmcm9tIFwiLi4vYXV0aC9HaXRIdWJBdXRoTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvTWFuYWdlciwgRWxlbWVudFR5cGUgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanNcIjtcbmltcG9ydCB7IE1pZ3JhdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL01pZ3JhdGlvbk1hbmFnZXIuanNcIjtcbmltcG9ydCB7IEVuaGFuY2VkSW5kZXhNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9FbmhhbmNlZEluZGV4TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgRW5oYW5jZWRJbmRleEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvRW5oYW5jZWRJbmRleEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IE1DUEFRTEhhbmRsZXIsIHR5cGUgSGFuZGxlclJlZ2lzdHJ5IH0gZnJvbSBcIi4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgR2F0ZWtlZXBlciB9IGZyb20gXCIuLi9oYW5kbGVycy9tY3AtYXFsL0dhdGVrZWVwZXIuanNcIjtcbmltcG9ydCB7IFNraWxsTWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9za2lsbHMvaW5kZXguanNcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy90ZW1wbGF0ZXMvVGVtcGxhdGVNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVJlbmRlcmVyIH0gZnJvbSBcIi4uL3V0aWxzL1RlbXBsYXRlUmVuZGVyZXIuanNcIjtcbmltcG9ydCB7IEFnZW50TWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9hZ2VudHMvQWdlbnRNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBNZW1vcnkgfSBmcm9tIFwiLi4vZWxlbWVudHMvbWVtb3JpZXMvTWVtb3J5LmpzXCI7XG5pbXBvcnQgeyBNZW1vcnlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFdlYlNTRUxvZ1NpbmsgfSBmcm9tIFwiLi4vd2ViL3NpbmtzL1dlYlNTRUxvZ1NpbmsuanNcIjtcbmltcG9ydCB7IFdlYlNTRU1ldHJpY3NTaW5rIH0gZnJvbSBcIi4uL3dlYi9zaW5rcy9XZWJTU0VNZXRyaWNzU2luay5qc1wiO1xuaW1wb3J0IHsgRW5zZW1ibGVNYW5hZ2VyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL2Vuc2VtYmxlcy9FbnNlbWJsZU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBlcnNvbmFFeHBvcnRlciwgUGVyc29uYUltcG9ydGVyIH0gZnJvbSBcIi4uL3BlcnNvbmEvZXhwb3J0LWltcG9ydC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgUGVyc29uYU1hbmFnZXIgfSBmcm9tIFwiLi4vcGVyc29uYS9QZXJzb25hTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUGVyc29uYUhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvUGVyc29uYUhhbmRsZXIuanNcIjtcbmltcG9ydCB7IEVsZW1lbnRDUlVESGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9FbGVtZW50Q1JVREhhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25IYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0NvbGxlY3Rpb25IYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9IYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1BvcnRmb2xpb0hhbmRsZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb1B1bGxIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1BvcnRmb2xpb1B1bGxIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJBdXRoSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9HaXRIdWJBdXRoSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgRGlzcGxheUNvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvRGlzcGxheUNvbmZpZ0hhbmRsZXIuanNcIjtcbmltcG9ydCB7IElkZW50aXR5SGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9JZGVudGl0eUhhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvQ29uZmlnSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgU3luY0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvU3luY0hhbmRsZXJWMi5qc1wiO1xuaW1wb3J0IHsgVG9vbFJlZ2lzdHJ5IH0gZnJvbSBcIi4uL2hhbmRsZXJzL1Rvb2xSZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgU2VydmVyU2V0dXAgfSBmcm9tIFwiLi4vc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXJ2ZXJTdGFydHVwIH0gZnJvbSBcIi4uL3NlcnZlci9zdGFydHVwLmpzXCI7XG5pbXBvcnQgeyBQYXRoVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3BhdGhWYWxpZGF0b3IuanNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXIuanNcIjtcbmltcG9ydCB7IEVycm9ySGFuZGxlciB9IGZyb20gXCIuLi91dGlscy9FcnJvckhhbmRsZXIuanNcIjtcbmltcG9ydCB7IFVuaWZpZWRJbmRleE1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1VuaWZpZWRJbmRleE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb0luZGV4TWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUG9ydGZvbGlvSW5kZXhNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTdWJtaXRUb1BvcnRmb2xpb1Rvb2wgfSBmcm9tIFwiLi4vdG9vbHMvcG9ydGZvbGlvL3N1Ym1pdFRvUG9ydGZvbGlvVG9vbC5qc1wiO1xuaW1wb3J0IHsgQ29uZmlnTWFuYWdlciB9IGZyb20gXCIuLi9jb25maWcvQ29uZmlnTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9TeW5jTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUG9ydGZvbGlvU3luY01hbmFnZXIuanNcIjtcbmltcG9ydCB7IGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lIH0gZnJvbSBcIi4uL2NvbmZpZy9wb3J0Zm9saW9Db25maWcuanNcIjtcbmltcG9ydCB7IEdpdEh1YlBvcnRmb2xpb0luZGV4ZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIuanNcIjtcbmltcG9ydCB7IEluZGV4Q29uZmlnTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vY29uZmlnL0luZGV4Q29uZmlnLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9TeW5jQ29tcGFyZXIgfSBmcm9tIFwiLi4vc3luYy9Qb3J0Zm9saW9TeW5jQ29tcGFyZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb0Rvd25sb2FkZXIgfSBmcm9tIFwiLi4vc3luYy9Qb3J0Zm9saW9Eb3dubG9hZGVyLmpzXCI7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZU1vbml0b3IgfSBmcm9tIFwiLi4vdXRpbHMvUGVyZm9ybWFuY2VNb25pdG9yLmpzXCI7XG5pbXBvcnQgeyBCdWlsZEluZm9TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0J1aWxkSW5mb1NlcnZpY2UuanNcIjtcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9Jbml0aWFsaXphdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1BlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU3RhdGVDaGFuZ2VOb3RpZmllciB9IGZyb20gXCIuLi9zZXJ2aWNlcy9TdGF0ZUNoYW5nZU5vdGlmaWVyLmpzXCI7XG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9TZXJpYWxpemF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZVdhdGNoU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9GaWxlV2F0Y2hTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvTWV0YWRhdGFTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tIFwiLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uUmVnaXN0cnkuanNcIjtcbmltcG9ydCB7IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy92YWxpZGF0aW9uL1RyaWdnZXJWYWxpZGF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgR2l0SHViUmF0ZUxpbWl0ZXIgfSBmcm9tIFwiLi4vdXRpbHMvR2l0SHViUmF0ZUxpbWl0ZXIuanNcIjtcbmltcG9ydCB7IEFudGhyb3BpY1RvRG9sbGhvdXNlQ29udmVydGVyLCBEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlciB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBEYW5nZXJab25lRW5mb3JjZXIgfSBmcm9tIFwiLi4vc2VjdXJpdHkvRGFuZ2VyWm9uZUVuZm9yY2VyLmpzXCI7XG5pbXBvcnQgeyBBY3RpdmF0aW9uU3RvcmUgfSBmcm9tIFwiLi4vc2VydmljZXMvQWN0aXZhdGlvblN0b3JlLmpzXCI7XG5pbXBvcnQgeyBWZXJpZmljYXRpb25TdG9yZSB9IGZyb20gXCJAZG9sbGhvdXNlbWNwL3NhZmV0eVwiO1xuaW1wb3J0IHsgVmVyaWZpY2F0aW9uTm90aWZpZXIgfSBmcm9tIFwiLi4vc2VydmljZXMvVmVyaWZpY2F0aW9uTm90aWZpZXIuanNcIjtcbmltcG9ydCB7IFBhdHRlcm5FbmNyeXB0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvZW5jcnlwdGlvbi9QYXR0ZXJuRW5jcnlwdG9yLmpzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuRGVjcnlwdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2VuY3J5cHRpb24vUGF0dGVybkRlY3J5cHRvci5qc1wiO1xuaW1wb3J0IHsgQ29udGV4dFRyYWNrZXIgfSBmcm9tIFwiLi4vc2VjdXJpdHkvZW5jcnlwdGlvbi9Db250ZXh0VHJhY2tlci5qc1wiO1xuaW1wb3J0IHsgUGF0dGVybkV4dHJhY3RvciB9IGZyb20gXCIuLi9zZWN1cml0eS92YWxpZGF0aW9uL1BhdHRlcm5FeHRyYWN0b3IuanNcIjtcbmltcG9ydCB7IEJhY2tncm91bmRWYWxpZGF0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdmFsaWRhdGlvbi9CYWNrZ3JvdW5kVmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgeyBTZWN1cml0eVRlbGVtZXRyeSB9IGZyb20gXCIuLi9zZWN1cml0eS90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanNcIjtcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qc1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uYWxUZWxlbWV0cnkgfSBmcm9tIFwiLi4vdGVsZW1ldHJ5L09wZXJhdGlvbmFsVGVsZW1ldHJ5LmpzXCI7XG5pbXBvcnQgeyBTdGFydHVwVGltZXIgfSBmcm9tIFwiLi4vdGVsZW1ldHJ5L1N0YXJ0dXBUaW1lci5qc1wiO1xuaW1wb3J0IHsgRGVmYXVsdEVuaGFuY2VkSW5kZXhIZWxwZXJzIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9FbmhhbmNlZEluZGV4SGVscGVycy5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudERlZmluaXRpb25CdWlsZGVyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9FbGVtZW50RGVmaW5pdGlvbkJ1aWxkZXIuanNcIjtcbmltcG9ydCB7IEFjdGlvblRyaWdnZXJFeHRyYWN0b3IgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L0FjdGlvblRyaWdnZXJFeHRyYWN0b3IuanNcIjtcbmltcG9ydCB7IFRyaWdnZXJNZXRyaWNzVHJhY2tlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvVHJpZ2dlck1ldHJpY3NUcmFja2VyLmpzXCI7XG5pbXBvcnQgeyBTZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2UgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L1NlbWFudGljUmVsYXRpb25zaGlwU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudEV2ZW50RGlzcGF0Y2hlciB9IGZyb20gJy4uL2V2ZW50cy9FbGVtZW50RXZlbnREaXNwYXRjaGVyLmpzJztcbmltcG9ydCB7IFRva2VuTWFuYWdlciB9IGZyb20gXCIuLi9zZWN1cml0eS90b2tlbk1hbmFnZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgVW5pZmllZENvbnNvbGVSZXN1bHQgfSBmcm9tIFwiLi4vd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUuanNcIjtcbmltcG9ydCB7XG4gIFBhZ2luYXRpb25TZXJ2aWNlLFxuICBGaWx0ZXJTZXJ2aWNlLFxuICBTb3J0U2VydmljZSxcbiAgRWxlbWVudFF1ZXJ5U2VydmljZSxcbn0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvaW5kZXguanMnO1xuaW1wb3J0IHsgUmV0ZW50aW9uUG9saWN5U2VydmljZSwgTWVtb3J5UmV0ZW50aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9SZXRlbnRpb25Qb2xpY3lTZXJ2aWNlLmpzJztcbmltcG9ydCB7IFBvbGljeUV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLmpzJztcbmltcG9ydCB7IExvZ01hbmFnZXIsIGJ1aWxkTG9nTWFuYWdlckNvbmZpZyB9IGZyb20gJy4uL2xvZ2dpbmcvTG9nTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBGaWxlTG9nU2luayB9IGZyb20gJy4uL2xvZ2dpbmcvc2lua3MvRmlsZUxvZ1NpbmsuanMnO1xuaW1wb3J0IHsgTWVtb3J5TG9nU2luayB9IGZyb20gJy4uL2xvZ2dpbmcvc2lua3MvTWVtb3J5TG9nU2luay5qcyc7XG5pbXBvcnQgeyBQbGFpblRleHRGb3JtYXR0ZXIgfSBmcm9tICcuLi9sb2dnaW5nL2Zvcm1hdHRlcnMvUGxhaW5UZXh0Rm9ybWF0dGVyLmpzJztcbmltcG9ydCB7IEpzb25sRm9ybWF0dGVyIH0gZnJvbSAnLi4vbG9nZ2luZy9mb3JtYXR0ZXJzL0pzb25sRm9ybWF0dGVyLmpzJztcbmltcG9ydCB7IHdpcmVMb2dIb29rcywgZ2V0VHJpZ2dlck1ldHJpY3NMb2dMaXN0ZW5lciB9IGZyb20gJy4uL2xvZ2dpbmcvTG9nSG9va3MuanMnO1xuaW1wb3J0IHsgTWV0cmljc01hbmFnZXIgfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NNYW5hZ2VyLmpzJztcbmltcG9ydCB7IE1lbW9yeU1ldHJpY3NTaW5rIH0gZnJvbSAnLi4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcyc7XG5pbXBvcnQgeyBidWlsZE1ldHJpY3NNYW5hZ2VyQ29uZmlnIH0gZnJvbSAnLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBQZXJmb3JtYW5jZU1vbml0b3JDb2xsZWN0b3IsXG4gIExSVUNhY2hlQ29sbGVjdG9yLFxuICBTZWN1cml0eU1vbml0b3JDb2xsZWN0b3IsXG4gIFNlY3VyaXR5VGVsZW1ldHJ5Q29sbGVjdG9yLFxuICBGaWxlTG9ja01hbmFnZXJDb2xsZWN0b3IsXG4gIERlZmF1bHRFbGVtZW50UHJvdmlkZXJDb2xsZWN0b3IsXG4gIFRyaWdnZXJNZXRyaWNzVHJhY2tlckNvbGxlY3RvcixcbiAgT3BlcmF0aW9uYWxUZWxlbWV0cnlDb2xsZWN0b3IsXG4gIE9wZXJhdGlvbk1ldHJpY3NDb2xsZWN0b3IsXG4gIEdhdGVrZWVwZXJNZXRyaWNzQ29sbGVjdG9yLFxufSBmcm9tICcuLi9tZXRyaWNzL2NvbGxlY3RvcnMvaW5kZXguanMnO1xuaW1wb3J0IHsgT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIgfSBmcm9tICcuLi9tZXRyaWNzL09wZXJhdGlvbk1ldHJpY3NUcmFja2VyLmpzJztcbmltcG9ydCB7IEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlciB9IGZyb20gJy4uL21ldHJpY3MvR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyLmpzJztcblxuLy8gU3RhdGUgaXMgb3duZWQgYnkgUGVyc29uYU1hbmFnZXIgYW5kIHNlcnZpY2VzXG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlckJ1bmRsZSB7XG4gIHBlcnNvbmFIYW5kbGVyOiBQZXJzb25hSGFuZGxlcjtcbiAgZWxlbWVudENydWRIYW5kbGVyOiBFbGVtZW50Q1JVREhhbmRsZXI7XG4gIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcbiAgcG9ydGZvbGlvSGFuZGxlcjogUG9ydGZvbGlvSGFuZGxlcjtcbiAgZ2l0aHViQXV0aEhhbmRsZXI6IEdpdEh1YkF1dGhIYW5kbGVyO1xuICBkaXNwbGF5Q29uZmlnSGFuZGxlcjogRGlzcGxheUNvbmZpZ0hhbmRsZXI7XG4gIGlkZW50aXR5SGFuZGxlcjogSWRlbnRpdHlIYW5kbGVyO1xuICBjb25maWdIYW5kbGVyOiBDb25maWdIYW5kbGVyO1xuICBzeW5jSGFuZGxlcjogU3luY0hhbmRsZXI7XG4gIHRvb2xSZWdpc3RyeTogVG9vbFJlZ2lzdHJ5O1xuICBlbmhhbmNlZEluZGV4SGFuZGxlcjogRW5oYW5jZWRJbmRleEhhbmRsZXI7XG4gIG1jcEFxbEhhbmRsZXI6IE1DUEFRTEhhbmRsZXI7XG59XG5cbi8qKlxuICogVHlwZS1zYWZlIHNlcnZpY2UgcmVjb3JkIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiBjb250YWluZXJcbiAqXG4gKiBGSVg6IFJlcGxhY2VkICdhbnknIHR5cGVzIHdpdGggcHJvcGVyIGdlbmVyaWNzIHRvIGVuc3VyZSB0eXBlIHNhZmV0eVxuICogUHJldmlvdXNseTogVXNlZCAnYW55JyB3aGljaCBhbGxvd2VkIHVuc2FmZSBjYXN0cyBhbmQgcnVudGltZSBlcnJvcnNcbiAqIE5vdzogVXNlcyBnZW5lcmljIFQgd2l0aCAndW5rbm93bicgZmFsbGJhY2sgZm9yIGNvbXBpbGUtdGltZSB0eXBlIGNoZWNraW5nXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHNlcnZpY2UgdHlwZSAoZGVmYXVsdHMgdG8gdW5rbm93biBmb3IgbWF4aW11bSBzYWZldHkpXG4gKi9cbmludGVyZmFjZSBTZXJ2aWNlUmVjb3JkPFQgPSB1bmtub3duPiB7XG4gIGZhY3Rvcnk6ICgpID0+IFQ7XG4gIGluc3RhbmNlOiBUIHwgbnVsbDtcbiAgc2luZ2xldG9uOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRG9sbGhvdXNlQ29udGFpbmVyIHtcbiAgcHJpdmF0ZSBzZXJ2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXJ2aWNlUmVjb3JkPigpO1xuICBwcml2YXRlIHBlcnNvbmFzRGlyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgLyoqIElzc3VlICM3MDY6IFNldCB0byB0cnVlIG9uY2UgY29tcGxldGVEZWZlcnJlZFNldHVwKCkgcmVzb2x2ZXMuICovXG4gIHB1YmxpYyBkZWZlcnJlZFNldHVwQ29tcGxldGUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEF1ZGl0IERJIGNvbnRhaW5lciBpbml0aWFsaXphdGlvblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdQT1JURk9MSU9fSU5JVElBTElaQVRJT04nLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnRG9sbGhvdXNlQ29udGFpbmVyLmNvbnN0cnVjdG9yJyxcbiAgICAgIGRldGFpbHM6ICdEZXBlbmRlbmN5IGluamVjdGlvbiBjb250YWluZXIgaW5pdGlhbGl6aW5nJ1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJTZXJ2aWNlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgc2VydmljZSB3aXRoIHRoZSBESSBjb250YWluZXJcbiAgICpcbiAgICogRklYOiBBZGRlZCBleHBsaWNpdCB0eXBlIHBhcmFtZXRlciBmb3IgdHlwZSBzYWZldHlcbiAgICogVGhlIGZhY3RvcnkgaXMgc3RvcmVkIGFzICgpID0+IHVua25vd24gaW50ZXJuYWxseSB0byBhbGxvdyBoZXRlcm9nZW5lb3VzIHN0b3JhZ2UsXG4gICAqIGJ1dCB0aGUgdHlwZSBUIGlzIHByZXNlcnZlZCBmb3IgcmVzb2x2ZSgpIGNhbGxzXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBUIFRoZSBzZXJ2aWNlIHR5cGVcbiAgICogQHBhcmFtIG5hbWUgVW5pcXVlIHNlcnZpY2UgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gZmFjdG9yeSBGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyB0aGUgc2VydmljZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgKHNpbmdsZXRvbiBiZWhhdmlvcilcbiAgICovXG4gIHB1YmxpYyByZWdpc3RlcjxUPihuYW1lOiBzdHJpbmcsIGZhY3Rvcnk6ICgpID0+IFQsIG9wdGlvbnM6IHsgc2luZ2xldG9uPzogYm9vbGVhbiB9ID0geyBzaW5nbGV0b246IHRydWUgfSk6IHZvaWQge1xuICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQXVkaXQgc2VydmljZSByZWdpc3RyYXRpb25cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5yZWdpc3RlcicsXG4gICAgICBkZXRhaWxzOiBgU2VydmljZSByZWdpc3RlcmVkOiAke25hbWV9YCxcbiAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IHNlcnZpY2VOYW1lOiBuYW1lLCBzaW5nbGV0b246IG9wdGlvbnMuc2luZ2xldG9uID8/IHRydWUgfVxuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZXMuc2V0KG5hbWUsIHtcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkgYXMgKCkgPT4gdW5rbm93bixcbiAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgc2luZ2xldG9uOiBvcHRpb25zLnNpbmdsZXRvbiA/PyB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhIHNlcnZpY2UgZnJvbSB0aGUgREkgY29udGFpbmVyXG4gICAqXG4gICAqIEZJWDogVHlwZSBzYWZldHkgaW1wcm92ZWQgd2l0aCBleHBsaWNpdCBjYXN0aW5nIGFuZCB2YWxpZGF0aW9uXG4gICAqIFRoZSAnYXMgVCcgY2FzdCBpcyBzYWZlIGJlY2F1c2U6XG4gICAqIDEuIFNlcnZpY2VzIGFyZSByZWdpc3RlcmVkIHdpdGggdHlwZWQgZmFjdG9yaWVzXG4gICAqIDIuIFRoZSBzZXJ2aWNlIG5hbWUgYWN0cyBhcyBhIHR5cGUgZGlzY3JpbWluYXRvclxuICAgKiAzLiBJbmNvcnJlY3QgdXNhZ2Ugd2lsbCBiZSBjYXVnaHQgYXQgdGhlIHJlZ2lzdHJhdGlvbiBzaXRlXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBUIFRoZSBleHBlY3RlZCBzZXJ2aWNlIHR5cGVcbiAgICogQHBhcmFtIG5hbWUgU2VydmljZSBpZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIFRoZSBzZXJ2aWNlIGluc3RhbmNlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgc2VydmljZSBpcyBub3QgcmVnaXN0ZXJlZFxuICAgKi9cbiAgcHVibGljIHJlc29sdmU8VD4obmFtZTogc3RyaW5nKTogVCB7XG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXMuZ2V0KG5hbWUpO1xuICAgIGlmICghc2VydmljZSkge1xuICAgICAgLy8gRklYOiBETUNQLVNFQy0wMDYgLSBBdWRpdCBzZXJ2aWNlIHJlc29sdXRpb24gZmFpbHVyZXNcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ01FTU9SWV9MT0FEX0ZBSUxFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnRG9sbGhvdXNlQ29udGFpbmVyLnJlc29sdmUnLFxuICAgICAgICBkZXRhaWxzOiBgU2VydmljZSBub3QgcmVnaXN0ZXJlZDogJHtuYW1lfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IHNlcnZpY2VOYW1lOiBuYW1lIH1cbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2aWNlIG5vdCByZWdpc3RlcmVkOiAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2Uuc2luZ2xldG9uKSB7XG4gICAgICBpZiAoIXNlcnZpY2UuaW5zdGFuY2UpIHtcbiAgICAgICAgc2VydmljZS5pbnN0YW5jZSA9IHNlcnZpY2UuZmFjdG9yeSgpO1xuICAgICAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEF1ZGl0IHNpbmdsZXRvbiBpbnN0YW50aWF0aW9uXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgc291cmNlOiAnRG9sbGhvdXNlQ29udGFpbmVyLnJlc29sdmUnLFxuICAgICAgICAgIGRldGFpbHM6IGBTaW5nbGV0b24gaW5zdGFudGlhdGVkOiAke25hbWV9YCxcbiAgICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBzZXJ2aWNlTmFtZTogbmFtZSB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlcnZpY2UuaW5zdGFuY2UgYXMgVDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VydmljZS5mYWN0b3J5KCkgYXMgVDtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJTZXJ2aWNlcygpOiB2b2lkIHtcblxuXG4gICAgLy8gSXNzdWUgIzcwNjogU3RhcnR1cCB0aW1pbmcgaW5zdHJ1bWVudGF0aW9uXG4gICAgdGhpcy5yZWdpc3RlcignU3RhcnR1cFRpbWVyJywgKCkgPT4gbmV3IFN0YXJ0dXBUaW1lcigpKTtcblxuICAgIC8vIENPUkUgJiBDQUNISU5HXG4gICAgdGhpcy5yZWdpc3RlcignQ2FjaGVNZW1vcnlCdWRnZXQnLCAoKSA9PiBuZXcgQ2FjaGVNZW1vcnlCdWRnZXQoe1xuICAgICAgZ2xvYmFsTGltaXRCeXRlczogZ2V0VmFsaWRhdGVkR2xvYmFsQ2FjaGVNZW1vcnlCeXRlcygpLFxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdBUElDYWNoZScsICgpID0+IG5ldyBBUElDYWNoZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uQ2FjaGUnLCAoKSA9PiBuZXcgQ29sbGVjdGlvbkNhY2hlKHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksIHVuZGVmaW5lZCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1JhdGVMaW1pdFRyYWNrZXInLCAoKSA9PiBuZXcgTWFwPHN0cmluZywgbnVtYmVyW10+KCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0ZpbGVMb2NrTWFuYWdlcicsICgpID0+IG5ldyBGaWxlTG9ja01hbmFnZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJywgKCkgPT4gbmV3IEZpbGVPcGVyYXRpb25zU2VydmljZSh0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29uZmlnTWFuYWdlcicsICgpID0+IHtcbiAgICAgIHJldHVybiBuZXcgQ29uZmlnTWFuYWdlcih0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLCBvcyk7XG4gICAgfSk7XG4gICAgLy8gSXNzdWUgIzUxOiBHZW5lcmljIHJldGVudGlvbiBwb2xpY3kgc2VydmljZSB3aXRoIHN0cmF0ZWd5IHBhdHRlcm5cbiAgICB0aGlzLnJlZ2lzdGVyKCdSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmljZSA9IG5ldyBSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlKHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpKTtcbiAgICAgIC8vIFJlZ2lzdGVyIG1lbW9yeSByZXRlbnRpb24gc3RyYXRlZ3kgKGZpcnN0IG9mIHBvdGVudGlhbGx5IDUwKyBlbGVtZW50IHR5cGVzKVxuICAgICAgc2VydmljZS5yZWdpc3RlclN0cmF0ZWd5KG5ldyBNZW1vcnlSZXRlbnRpb25TdHJhdGVneSgpKTtcbiAgICAgIHJldHVybiBzZXJ2aWNlO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0luZGV4Q29uZmlnTWFuYWdlcicsICgpID0+IG5ldyBJbmRleENvbmZpZ01hbmFnZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignSW5kaWNhdG9yQ29uZmlnJywgKCkgPT4gbG9hZEluZGljYXRvckNvbmZpZygpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdTdGF0ZUNoYW5nZU5vdGlmaWVyJywgKCkgPT4gbmV3IFN0YXRlQ2hhbmdlTm90aWZpZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignR2l0SHViUmF0ZUxpbWl0ZXInLCAoKSA9PiBuZXcgR2l0SHViUmF0ZUxpbWl0ZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRWxlbWVudEV2ZW50RGlzcGF0Y2hlcicsICgpID0+IEVsZW1lbnRFdmVudERpc3BhdGNoZXIuZ2V0U2hhcmVkRGlzcGF0Y2hlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdNQ1BMb2dnZXInLCAoKSA9PiBsb2dnZXIpO1xuXG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYUltcG9ydGVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgcG9ydGZvbGlvTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpO1xuICAgICAgY29uc3QgcGVyc29uYXNEaXIgPSBwb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuUEVSU09OQSk7XG4gICAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjayB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeS4gV2UgcmVzb2x2ZSBQZXJzb25hTWFuYWdlciBpbnNpZGUgdGhlIHByb3ZpZGVyIGZ1bmN0aW9uLlxuICAgICAgY29uc3QgY3VycmVudFVzZXJQcm92aWRlciA9ICgpID0+IHRoaXMucmVzb2x2ZTxQZXJzb25hTWFuYWdlcj4oJ1BlcnNvbmFNYW5hZ2VyJykuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpO1xuICAgICAgcmV0dXJuIG5ldyBQZXJzb25hSW1wb3J0ZXIoXG4gICAgICAgIHBlcnNvbmFzRGlyLFxuICAgICAgICBjdXJyZW50VXNlclByb3ZpZGVyLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBHSVRIVUIgJiBDT0xMRUNUSU9OXG4gICAgdGhpcy5yZWdpc3RlcignR2l0SHViQ2xpZW50JywgKCkgPT4gbmV3IEdpdEh1YkNsaWVudChcbiAgICAgIHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUmF0ZUxpbWl0VHJhY2tlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YkF1dGhNYW5hZ2VyJywgKCkgPT4gbmV3IEdpdEh1YkF1dGhNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdBUElDYWNoZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvbkluZGV4TWFuYWdlcicsICgpID0+IG5ldyBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyKHtcbiAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbGxlY3Rpb25Ccm93c2VyJywgKCkgPT4gbmV3IENvbGxlY3Rpb25Ccm93c2VyKHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkNhY2hlJyksIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkluZGV4TWFuYWdlcicpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvblNlYXJjaCcsICgpID0+IG5ldyBDb2xsZWN0aW9uU2VhcmNoKFxuICAgICAgdGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkNhY2hlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25JbmRleENhY2hlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJzb25hRGV0YWlscycsICgpID0+IG5ldyBQZXJzb25hRGV0YWlscyh0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpKSk7XG5cbiAgICAvLyBQT1JURk9MSU8gJiBNQU5BR0VSU1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb01hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB1bmRlZmluZWRcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJzb25hTWFuYWdlcicsICgpID0+IG5ldyBQZXJzb25hTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdJbmRpY2F0b3JDb25maWcnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFJbXBvcnRlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTdGF0ZUNoYW5nZU5vdGlmaWVyJyksXG4gICAgICB7XG4gICAgICAgIGV2ZW50RGlzcGF0Y2hlcjogdGhpcy5yZXNvbHZlKCdFbGVtZW50RXZlbnREaXNwYXRjaGVyJyksXG4gICAgICAgIGVuYWJsZUZpbGVXYXRjaGVyOiB0cnVlLFxuICAgICAgICBhdXRvUmVsb2FkT25FeHRlcm5hbENoYW5nZTogdHJ1ZSxcbiAgICAgICAgZmlsZVdhdGNoU2VydmljZTogdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICAgIG1lbW9yeUJ1ZGdldDogdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgICBiYWNrdXBTZXJ2aWNlOiB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICAgfVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0luaXRpYWxpemF0aW9uU2VydmljZScsICgpID0+IG5ldyBJbml0aWFsaXphdGlvblNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFNYW5hZ2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJzb25hSW5kaWNhdG9yU2VydmljZScsICgpID0+IG5ldyBQZXJzb25hSW5kaWNhdG9yU2VydmljZShcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGVyc29uYU1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnSW5kaWNhdG9yQ29uZmlnJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1N0YXRlQ2hhbmdlTm90aWZpZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRWxlbWVudEV2ZW50RGlzcGF0Y2hlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignTWlncmF0aW9uTWFuYWdlcicsICgpID0+IG5ldyBNaWdyYXRpb25NYW5hZ2VyKHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRWxlbWVudEluc3RhbGxlcicsICgpID0+IG5ldyBFbGVtZW50SW5zdGFsbGVyKHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksIHtcbiAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdW5pZmllZEluZGV4TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdVbmlmaWVkSW5kZXhNYW5hZ2VyJyksXG4gICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicsICgpID0+IG5ldyBQb3J0Zm9saW9SZXBvTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJyksXG4gICAgICBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSgpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignR2l0SHViUG9ydGZvbGlvSW5kZXhlcicsICgpID0+IG5ldyBHaXRIdWJQb3J0Zm9saW9JbmRleGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicpXG4gICAgKSk7XG4gICAgXG4gICAgLy8gU0VSVklDRVNcbiAgICB0aGlzLnJlZ2lzdGVyKCdTZXJpYWxpemF0aW9uU2VydmljZScsICgpID0+IG5ldyBTZXJpYWxpemF0aW9uU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdNZXRhZGF0YVNlcnZpY2UnLCAoKSA9PiBuZXcgTWV0YWRhdGFTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1RyaWdnZXJWYWxpZGF0aW9uU2VydmljZScsICgpID0+IG5ldyBUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVmFsaWRhdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgVmFsaWRhdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRmlsZVdhdGNoU2VydmljZScsICgpID0+IG5ldyBGaWxlV2F0Y2hTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1ZhbGlkYXRpb25SZWdpc3RyeScsICgpID0+IG5ldyBWYWxpZGF0aW9uUmVnaXN0cnkoXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1RyaWdnZXJWYWxpZGF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKVxuICAgICkpO1xuXG4gICAgLy8gTE9HR0lOR1xuICAgIHRoaXMucmVnaXN0ZXIoJ0xvZ01hbmFnZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSBidWlsZExvZ01hbmFnZXJDb25maWcoZW52KTtcbiAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTG9nTWFuYWdlcihjb25maWcpO1xuXG4gICAgICAvLyBQaGFzZSAyOiBGaWxlTG9nU2lua1xuICAgICAgY29uc3QgZm9ybWF0dGVyID0gY29uZmlnLmxvZ0Zvcm1hdCA9PT0gJ2pzb25sJ1xuICAgICAgICA/IG5ldyBKc29ubEZvcm1hdHRlcigpXG4gICAgICAgIDogbmV3IFBsYWluVGV4dEZvcm1hdHRlcigpO1xuICAgICAgY29uc3QgZmlsZVNpbmsgPSBuZXcgRmlsZUxvZ1Npbmsoe1xuICAgICAgICBsb2dEaXI6IGNvbmZpZy5sb2dEaXIsXG4gICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgbWF4RmlsZVNpemU6IGNvbmZpZy5maWxlTWF4U2l6ZSxcbiAgICAgICAgcmV0ZW50aW9uRGF5czogY29uZmlnLnJldGVudGlvbkRheXMsXG4gICAgICAgIHNlY3VyaXR5UmV0ZW50aW9uRGF5czogY29uZmlnLnNlY3VyaXR5UmV0ZW50aW9uRGF5cyxcbiAgICAgICAgbWF4RGlyU2l6ZUJ5dGVzOiBjb25maWcubWF4RGlyU2l6ZUJ5dGVzLFxuICAgICAgICBtYXhGaWxlc1BlckNhdGVnb3J5OiBjb25maWcubWF4RmlsZXNQZXJDYXRlZ29yeSxcbiAgICAgIH0pO1xuICAgICAgbWFuYWdlci5yZWdpc3RlclNpbmsoZmlsZVNpbmspO1xuICAgICAgZmlsZVNpbmsuc3RhcnRDbGVhbnVwVGltZXIoKTtcblxuICAgICAgLy8gUGhhc2UgMzogTWVtb3J5TG9nU2lua1xuICAgICAgY29uc3QgbWVtb3J5U2luayA9IG5ldyBNZW1vcnlMb2dTaW5rKHtcbiAgICAgICAgYXBwQ2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlBcHBDYXBhY2l0eSxcbiAgICAgICAgc2VjdXJpdHlDYXBhY2l0eTogY29uZmlnLm1lbW9yeVNlY3VyaXR5Q2FwYWNpdHksXG4gICAgICAgIHBlcmZDYXBhY2l0eTogY29uZmlnLm1lbW9yeVBlcmZDYXBhY2l0eSxcbiAgICAgICAgdGVsZW1ldHJ5Q2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlUZWxlbWV0cnlDYXBhY2l0eSxcbiAgICAgIH0pO1xuICAgICAgbWFuYWdlci5yZWdpc3RlclNpbmsobWVtb3J5U2luayk7XG5cbiAgICAgIHRoaXMucmVnaXN0ZXIoJ01lbW9yeUxvZ1NpbmsnLCAoKSA9PiBtZW1vcnlTaW5rKTtcblxuICAgICAgLy8gU3RhcnR1cCBtYXJrZXIg4oCUIGZpcnN0IGVudHJ5IGluIGV2ZXJ5IHNlcnZlciBzZXNzaW9uXG4gICAgICBtYW5hZ2VyLmxvZyh7XG4gICAgICAgIGlkOiBtYW5hZ2VyLmdlbmVyYXRlSWQoKSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiAnYXBwbGljYXRpb24nLFxuICAgICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgICBzb3VyY2U6ICdEb2xsaG91c2VNQ1AnLFxuICAgICAgICBtZXNzYWdlOiBgRG9sbGhvdXNlTUNQIHYke1ZFUlNJT059IHN0YXJ0aW5nYCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHZlcnNpb246IFZFUlNJT04sXG4gICAgICAgICAgbG9nTGV2ZWw6IGNvbmZpZy5sb2dMZXZlbCxcbiAgICAgICAgICBsb2dGb3JtYXQ6IGNvbmZpZy5sb2dGb3JtYXQsXG4gICAgICAgICAgY29uc29sZTogZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRVxuICAgICAgICAgICAgPyBgaHR0cDovL2RvbGxob3VzZS5sb2NhbGhvc3Q6JHtlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlR9YFxuICAgICAgICAgICAgOiAnZGlzYWJsZWQnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBtYW5hZ2VyO1xuICAgIH0pO1xuXG4gICAgLy8gTUVUUklDUyBDT0xMRUNUSU9OXG4gICAgLy8gTWVtb3J5TWV0cmljc1NpbmsgaXMgcmVnaXN0ZXJlZCBzZXBhcmF0ZWx5IChub3QgYXMgYSBzaWRlIGVmZmVjdCBpbnNpZGVcbiAgICAvLyBNZXRyaWNzTWFuYWdlcidzIGZhY3RvcnkpIHNvIGl0J3MgYXZhaWxhYmxlIGluIHRoZSBjb250YWluZXIgcmVnYXJkbGVzc1xuICAgIC8vIG9mIE1ldHJpY3NNYW5hZ2VyIHJlc29sdXRpb24gb3JkZXIuXG4gICAgY29uc3QgbWV0cmljc0NvbmZpZyA9IGJ1aWxkTWV0cmljc01hbmFnZXJDb25maWcoZW52KTtcbiAgICBpZiAobWV0cmljc0NvbmZpZy5lbmFibGVkKSB7XG4gICAgICBjb25zdCBtZW1vcnlNZXRyaWNzU2luayA9IG5ldyBNZW1vcnlNZXRyaWNzU2luayhtZXRyaWNzQ29uZmlnLm1lbW9yeVNuYXBzaG90Q2FwYWNpdHkpO1xuICAgICAgdGhpcy5yZWdpc3RlcignTWVtb3J5TWV0cmljc1NpbmsnLCAoKSA9PiBtZW1vcnlNZXRyaWNzU2luayk7XG5cbiAgICAgIHRoaXMucmVnaXN0ZXIoJ01ldHJpY3NNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IE1ldHJpY3NNYW5hZ2VyKG1ldHJpY3NDb25maWcsIGxvZ2dlcik7XG4gICAgICAgIG1hbmFnZXIucmVnaXN0ZXJTaW5rKG1lbW9yeU1ldHJpY3NTaW5rKTtcbiAgICAgICAgcmV0dXJuIG1hbmFnZXI7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBURUxFTUVUUllcbiAgICB0aGlzLnJlZ2lzdGVyKCdPcGVyYXRpb25hbFRlbGVtZXRyeScsICgpID0+IG5ldyBPcGVyYXRpb25hbFRlbGVtZXRyeShcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcblxuICAgIC8vIEJBQ0tVUCBTRVJWSUNFIChJc3N1ZSAjNjU5OiBVbml2ZXJzYWwgYmFja3VwIGZvciBhbGwgZWxlbWVudCB0eXBlcylcbiAgICB0aGlzLnJlZ2lzdGVyKCdCYWNrdXBTZXJ2aWNlJywgKCkgPT4gbmV3IEJhY2t1cFNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAge1xuICAgICAgICBiYWNrdXBSb290RGlyOiBwYXRoLmpvaW4odGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJykuZ2V0QmFzZURpcigpLCAnLmJhY2t1cHMnKSxcbiAgICAgICAgbWF4QmFja3Vwc1BlckVsZW1lbnQ6IGdldFZhbGlkYXRlZE1heEJhY2t1cHNQZXJFbGVtZW50KCksXG4gICAgICAgIGVuYWJsZWQ6IFNUT1JBR0VfTEFZRVJfQ09ORklHLkJBQ0tVUFNfRU5BQkxFRCxcbiAgICAgIH1cbiAgICApKTtcblxuICAgIC8vIFBPTElDWSBFWFBPUlQgU0VSVklDRSAoSXNzdWUgIzc2MjogRXhwb3J0IHBvbGljaWVzIHRvIGJyaWRnZSlcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb2xpY3lFeHBvcnRTZXJ2aWNlJywgKCkgPT4gbmV3IFBvbGljeUV4cG9ydFNlcnZpY2Uoe1xuICAgICAgZ2V0QWN0aXZlRWxlbWVudHNGb3JQb2xpY3k6IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5yZXNvbHZlPEVsZW1lbnRDUlVESGFuZGxlcj4oJ0VsZW1lbnRDUlVESGFuZGxlcicpO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVyLmdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5KCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldFNlcnZlclZlcnNpb246ICgpID0+IFBBQ0tBR0VfVkVSU0lPTixcbiAgICB9KSk7XG5cbiAgICAvLyBFTEVNRU5UIE1BTkFHRVJTXG4gICAgdGhpcy5yZWdpc3RlcignU2tpbGxNYW5hZ2VyJywgKCkgPT4gbmV3IFNraWxsTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUZW1wbGF0ZU1hbmFnZXInLCAoKSA9PiBuZXcgVGVtcGxhdGVNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1NlcmlhbGl6YXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1RlbXBsYXRlUmVuZGVyZXInLCAoKSA9PiBuZXcgVGVtcGxhdGVSZW5kZXJlcih0aGlzLnJlc29sdmUoJ1RlbXBsYXRlTWFuYWdlcicpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQWdlbnRNYW5hZ2VyJywgKCkgPT4gbmV3IEFnZW50TWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpLmdldEJhc2VEaXIoKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdNZW1vcnlNYW5hZ2VyJywgKCkgPT4gbmV3IE1lbW9yeU1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2VyaWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5zZW1ibGVNYW5hZ2VyJywgKCkgPT4gbmV3IEVuc2VtYmxlTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICBNZW1vcnkuY29uZmlndXJlTWVtb3J5TWFuYWdlclJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpKTtcbiAgICAvLyBJc3N1ZSAjNTE6IENvbmZpZ3VyZSByZXRlbnRpb24gcG9saWN5IHJlc29sdmVyIGZvciBNZW1vcnkgY2xhc3NcbiAgICBNZW1vcnkuY29uZmlndXJlUmV0ZW50aW9uUG9saWN5UmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlJykpO1xuICAgIC8vIElzc3VlICMxMTE6IENvbmZpZ3VyZSBlbGVtZW50IG1hbmFnZXIgcmVzb2x2ZXIgZm9yIEFnZW50TWFuYWdlciAoZWxlbWVudC1hZ25vc3RpYyBhY3RpdmF0aW9uKVxuICAgIEFnZW50TWFuYWdlci5zZXRFbGVtZW50TWFuYWdlclJlc29sdmVyKChtYW5hZ2VyTmFtZTogc3RyaW5nKSA9PiB0aGlzLnJlc29sdmUobWFuYWdlck5hbWUpKTtcbiAgICAvLyBJc3N1ZSAjNDAyOiBDb25maWd1cmUgRGFuZ2VyWm9uZUVuZm9yY2VyIHJlc29sdmVyIGZvciBBZ2VudE1hbmFnZXIgKGF1dG9ub215IGV2YWx1YXRpb24pXG4gICAgQWdlbnRNYW5hZ2VyLnNldERhbmdlclpvbmVFbmZvcmNlclJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnRGFuZ2VyWm9uZUVuZm9yY2VyJykpO1xuICAgIC8vIElzc3VlICMxNDI6IENvbmZpZ3VyZSBWZXJpZmljYXRpb25TdG9yZSByZXNvbHZlciBmb3IgQWdlbnRNYW5hZ2VyIChkYW5nZXIgem9uZSB2ZXJpZmljYXRpb24pXG4gICAgQWdlbnRNYW5hZ2VyLnNldFZlcmlmaWNhdGlvblN0b3JlUmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25TdG9yZScpKTtcblxuICAgIC8vIFFVRVJZIFNFUlZJQ0VTIChJc3N1ZSAjMzg6IFBhZ2luYXRpb24sIGZpbHRlcmluZywgc29ydGluZylcbiAgICAvLyBUaGVzZSBzZXJ2aWNlcyBhcmUgZWxlbWVudC1hZ25vc3RpYyBhbmQgY2FuIGJlIHVzZWQgd2l0aCBhbnkgZWxlbWVudCB0eXBlXG4gICAgdGhpcy5yZWdpc3RlcignUGFnaW5hdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgUGFnaW5hdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRmlsdGVyU2VydmljZScsICgpID0+IG5ldyBGaWx0ZXJTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NvcnRTZXJ2aWNlJywgKCkgPT4gbmV3IFNvcnRTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRRdWVyeVNlcnZpY2UnLCAoKSA9PiBuZXcgRWxlbWVudFF1ZXJ5U2VydmljZShcbiAgICAgIHRoaXMucmVzb2x2ZTxQYWdpbmF0aW9uU2VydmljZT4oJ1BhZ2luYXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmU8RmlsdGVyU2VydmljZT4oJ0ZpbHRlclNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZTxTb3J0U2VydmljZT4oJ1NvcnRTZXJ2aWNlJylcbiAgICApKTtcblxuICAgIC8vIENPTlZFUlRFUlNcbiAgICB0aGlzLnJlZ2lzdGVyKCdBbnRocm9waWNUb0RvbGxob3VzZUNvbnZlcnRlcicsICgpID0+IG5ldyBBbnRocm9waWNUb0RvbGxob3VzZUNvbnZlcnRlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlcicsICgpID0+IG5ldyBEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlcigpKTtcblxuICAgIC8vIFNFQ1VSSVRZIFNFUlZJQ0VTXG4gICAgLy8gSXNzdWUgIzQwMjogRGFuZ2VyWm9uZUVuZm9yY2VyIGFzIERJLW1hbmFnZWQgc2luZ2xldG9uIChyZXBsYWNlcyBtb2R1bGUtbGV2ZWwgc2luZ2xldG9uKVxuICAgIHRoaXMucmVnaXN0ZXIoJ0RhbmdlclpvbmVFbmZvcmNlcicsICgpID0+IG5ldyBEYW5nZXJab25lRW5mb3JjZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG4gICAgLy8gSXNzdWUgIzU5ODogQWN0aXZhdGlvblN0b3JlIGZvciBwZXItc2Vzc2lvbiBhY3RpdmF0aW9uIHBlcnNpc3RlbmNlXG4gICAgdGhpcy5yZWdpc3RlcignQWN0aXZhdGlvblN0b3JlJywgKCkgPT4gbmV3IEFjdGl2YXRpb25TdG9yZShcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICAvLyBJc3N1ZSAjMTQyOiBWZXJpZmljYXRpb25TdG9yZSBmb3IgZGFuZ2VyIHpvbmUgY2hhbGxlbmdlIGNvZGVzIChzZXJ2ZXItc2lkZSlcbiAgICB0aGlzLnJlZ2lzdGVyKCdWZXJpZmljYXRpb25TdG9yZScsICgpID0+IG5ldyBWZXJpZmljYXRpb25TdG9yZSgpKTtcbiAgICAvLyBJc3N1ZSAjNTIyOiBOb24tYmxvY2tpbmcgT1MgZGlhbG9nIG5vdGlmaWVyIGZvciB2ZXJpZmljYXRpb24gY29kZXNcbiAgICB0aGlzLnJlZ2lzdGVyKCdWZXJpZmljYXRpb25Ob3RpZmllcicsICgpID0+IG5ldyBWZXJpZmljYXRpb25Ob3RpZmllcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUb2tlbk1hbmFnZXInLCAoKSA9PiBuZXcgVG9rZW5NYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BhdHRlcm5FbmNyeXB0b3InLCAoKSA9PiBuZXcgUGF0dGVybkVuY3J5cHRvcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb250ZXh0VHJhY2tlcicsICgpID0+IG5ldyBDb250ZXh0VHJhY2tlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQYXR0ZXJuRGVjcnlwdG9yJywgKCkgPT4gbmV3IFBhdHRlcm5EZWNyeXB0b3IoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BhdHRlcm5FbmNyeXB0b3InKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29udGV4dFRyYWNrZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BhdHRlcm5FeHRyYWN0b3InLCAoKSA9PiBuZXcgUGF0dGVybkV4dHJhY3RvcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGF0dGVybkVuY3J5cHRvcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQmFja2dyb3VuZFZhbGlkYXRvcicsICgpID0+IG5ldyBCYWNrZ3JvdW5kVmFsaWRhdG9yKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQYXR0ZXJuRXh0cmFjdG9yJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NlY3VyaXR5VGVsZW1ldHJ5JywgKCkgPT4gbmV3IFNlY3VyaXR5VGVsZW1ldHJ5KCkpO1xuICAgIENvbnRlbnRWYWxpZGF0b3IuY29uZmlndXJlVGVsZW1ldHJ5UmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdTZWN1cml0eVRlbGVtZXRyeScpKTtcblxuICAgIC8vIE5MUCAmIElOREVYSU5HXG4gICAgdGhpcy5yZWdpc3RlcignTkxQU2NvcmluZ01hbmFnZXInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4Q29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxJbmRleENvbmZpZ01hbmFnZXI+KCdJbmRleENvbmZpZ01hbmFnZXInKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gaW5kZXhDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuICAgICAgICByZXR1cm4gbmV3IE5MUFNjb3JpbmdNYW5hZ2VyKHtcbiAgICAgICAgICAgIGNhY2hlRXhwaXJ5OiBjb25maWcubmxwLmNhY2hlRXhwaXJ5TWludXRlcyAqIDYwICogMTAwMCxcbiAgICAgICAgICAgIG1pblRva2VuTGVuZ3RoOiBjb25maWcubmxwLm1pblRva2VuTGVuZ3RoLFxuICAgICAgICAgICAgZW50cm9weUJhbmRzOiBjb25maWcubmxwLmVudHJvcHlCYW5kcyxcbiAgICAgICAgICAgIGphY2NhcmRUaHJlc2hvbGRzOiBjb25maWcubmxwLmphY2NhcmRUaHJlc2hvbGRzXG4gICAgICAgIH0sIGluZGV4Q29uZmlnTWFuYWdlcik7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignVmVyYlRyaWdnZXJNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleENvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8SW5kZXhDb25maWdNYW5hZ2VyPignSW5kZXhDb25maWdNYW5hZ2VyJyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGluZGV4Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBWZXJiVHJpZ2dlck1hbmFnZXIoe1xuICAgICAgICAgICAgY29uZmlkZW5jZVRocmVzaG9sZDogY29uZmlnLnZlcmJzLmNvbmZpZGVuY2VUaHJlc2hvbGQsXG4gICAgICAgICAgICBtYXhFbGVtZW50c1BlclZlcmI6IGNvbmZpZy52ZXJicy5tYXhFbGVtZW50c1BlclZlcmIsXG4gICAgICAgICAgICBpbmNsdWRlU3lub255bXM6IGNvbmZpZy52ZXJicy5pbmNsdWRlU3lub255bXNcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignUmVsYXRpb25zaGlwTWFuYWdlcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhDb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBpbmRleENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHJldHVybiBuZXcgUmVsYXRpb25zaGlwTWFuYWdlcih7XG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgICBtaW5Db25maWRlbmNlOiBjb25maWcucGVyZm9ybWFuY2Uuc2ltaWxhcml0eVRocmVzaG9sZCxcbiAgICAgICAgICAgICAgICBlbmFibGVBdXRvRGlzY292ZXJ5OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5kZXhDb25maWdNYW5hZ2VyLFxuICAgICAgICAgICAgdmVyYlRyaWdnZXJNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1ZlcmJUcmlnZ2VyTWFuYWdlcicpLFxuICAgICAgICAgICAgbmxwU2NvcmluZzogdGhpcy5yZXNvbHZlKCdOTFBTY29yaW5nTWFuYWdlcicpLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvSW5kZXhNYW5hZ2VyKHRoaXMucmVzb2x2ZSgnSW5kZXhDb25maWdNYW5hZ2VyJyksIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5oYW5jZWRJbmRleEhlbHBlcnMnLCAoKSA9PiBuZXcgRGVmYXVsdEVuaGFuY2VkSW5kZXhIZWxwZXJzKFxuICAgICAgbmV3IEVsZW1lbnREZWZpbml0aW9uQnVpbGRlcigpLFxuICAgICAgbmV3IFNlbWFudGljUmVsYXRpb25zaGlwU2VydmljZSh7XG4gICAgICAgIG5scFNjb3Jpbmc6IHRoaXMucmVzb2x2ZSgnTkxQU2NvcmluZ01hbmFnZXInKSxcbiAgICAgICAgcmVsYXRpb25zaGlwTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdSZWxhdGlvbnNoaXBNYW5hZ2VyJylcbiAgICAgIH0pLFxuICAgICAgKGNvbnRleHQpID0+IG5ldyBBY3Rpb25UcmlnZ2VyRXh0cmFjdG9yKGNvbnRleHQpLFxuICAgICAgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdHJhY2tlciA9IG5ldyBUcmlnZ2VyTWV0cmljc1RyYWNrZXIob3B0aW9ucyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdHJhY2tlci5hZGRMb2dMaXN0ZW5lcihnZXRUcmlnZ2VyTWV0cmljc0xvZ0xpc3RlbmVyKFxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKCdMb2dNYW5hZ2VyJyksXG4gICAgICAgICAgICB0aGlzLnJlc29sdmUoJ0NvbnRleHRUcmFja2VyJylcbiAgICAgICAgICApKTtcbiAgICAgICAgfSBjYXRjaCB7IC8qIExvZ01hbmFnZXIgbm90IHlldCByZWdpc3RlcmVkICovIH1cbiAgICAgICAgcmV0dXJuIHRyYWNrZXI7XG4gICAgICB9XG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5oYW5jZWRJbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgRW5oYW5jZWRJbmRleE1hbmFnZXIoXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnSW5kZXhDb25maWdNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ05MUFNjb3JpbmdNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnVmVyYlRyaWdnZXJNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnUmVsYXRpb25zaGlwTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0VuaGFuY2VkSW5kZXhIZWxwZXJzJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uSW5kZXhDYWNoZScsICgpID0+IG5ldyBDb2xsZWN0aW9uSW5kZXhDYWNoZShcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSxcbiAgICAgICAgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdQZXJmb3JtYW5jZU1vbml0b3InKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1VuaWZpZWRJbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgVW5pZmllZEluZGV4TWFuYWdlcih7XG4gICAgICAgIHBvcnRmb2xpb0luZGV4TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgICAgZ2l0aHViSW5kZXhlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJQb3J0Zm9saW9JbmRleGVyJyksXG4gICAgICAgIGNvbGxlY3Rpb25JbmRleENhY2hlOiB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25JbmRleENhY2hlJyksXG4gICAgICAgIGdpdGh1YkNsaWVudDogdGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSxcbiAgICAgICAgYXBpQ2FjaGU6IHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgICAgcmF0ZUxpbWl0VHJhY2tlcjogdGhpcy5yZXNvbHZlKCdSYXRlTGltaXRUcmFja2VyJyksXG4gICAgICAgIHBlcmZvcm1hbmNlTW9uaXRvcjogdGhpcy5yZXNvbHZlKCdQZXJmb3JtYW5jZU1vbml0b3InKSxcbiAgICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICB9KSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9TeW5jQ29tcGFyZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvU3luY0NvbXBhcmVyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb0Rvd25sb2FkZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvRG93bmxvYWRlcigpKTtcblxuICAgIC8vIFNZTkMgJiBUT09MU1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb1B1bGxIYW5kbGVyJywgKCkgPT4gbmV3IFBvcnRmb2xpb1B1bGxIYW5kbGVyKHtcbiAgICAgICAgcG9ydGZvbGlvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICAgIGluZGV4TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgICAgZ2l0aHViSW5kZXhlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJQb3J0Zm9saW9JbmRleGVyJyksXG4gICAgICAgIHBvcnRmb2xpb1JlcG9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJyksXG4gICAgICAgIHN5bmNDb21wYXJlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9TeW5jQ29tcGFyZXInKSxcbiAgICAgICAgZG93bmxvYWRlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9Eb3dubG9hZGVyJyksXG4gICAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgICB0b2tlbk1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJyksXG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1N1Ym1pdFRvUG9ydGZvbGlvVG9vbCcsICgpID0+IG5ldyBTdWJtaXRUb1BvcnRmb2xpb1Rvb2wodGhpcy5yZXNvbHZlKCdBUElDYWNoZScpLCB7XG4gICAgICAgIGF1dGhNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YkF1dGhNYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgICBwb3J0Zm9saW9JbmRleE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb1JlcG9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJyksXG4gICAgICAgIHJhdGVMaW1pdGVyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YlJhdGVMaW1pdGVyJyksXG4gICAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgICB0b2tlbk1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJylcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvU3luY01hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvU3luY01hbmFnZXIoe1xuICAgICAgICBjb25maWdNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgICAgcG9ydGZvbGlvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb1JlcG9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJyksXG4gICAgICAgIGluZGV4ZXI6IHRoaXMucmVzb2x2ZSgnR2l0SHViUG9ydGZvbGlvSW5kZXhlcicpLFxuICAgICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgICAgdG9rZW5NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgfSkpO1xuXG4gICAgLy8gU0VSVkVSXG4gICAgdGhpcy5yZWdpc3RlcignU2VydmVyU2V0dXAnLCAoKSA9PiBuZXcgU2VydmVyU2V0dXAoXG4gICAgICB0aGlzLnJlc29sdmU8Q29udGV4dFRyYWNrZXI+KCdDb250ZXh0VHJhY2tlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignU2VydmVyU3RhcnR1cCcsICgpID0+IG5ldyBTZXJ2ZXJTdGFydHVwKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01pZ3JhdGlvbk1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdPcGVyYXRpb25hbFRlbGVtZXRyeScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQnVpbGRJbmZvU2VydmljZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgQnVpbGRJbmZvU2VydmljZSh0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpKTtcbiAgICAgIC8vIElzc3VlICM3MDY6IFdpcmUgc3RhcnR1cCBpbnN0cnVtZW50YXRpb25cbiAgICAgIHNlcnZpY2Uuc2V0U3RhcnR1cFRpbWVyKHRoaXMucmVzb2x2ZTxTdGFydHVwVGltZXI+KCdTdGFydHVwVGltZXInKSk7XG4gICAgICBzZXJ2aWNlLnNldERlZmVycmVkU2V0dXBDaGVja2VyKCgpID0+IHRoaXMuZGVmZXJyZWRTZXR1cENvbXBsZXRlKTtcbiAgICAgIHJldHVybiBzZXJ2aWNlO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BlcmZvcm1hbmNlTW9uaXRvcicsICgpID0+IHtcbiAgICAgIGNvbnN0IG1vbml0b3IgPSBuZXcgUGVyZm9ybWFuY2VNb25pdG9yKCk7XG4gICAgICBtb25pdG9yLnN0YXJ0TW9uaXRvcmluZygpO1xuICAgICAgcmV0dXJuIG1vbml0b3I7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCdPcGVyYXRpb25NZXRyaWNzVHJhY2tlcicsICgpID0+IG5ldyBPcGVyYXRpb25NZXRyaWNzVHJhY2tlcigpLCB7IHNpbmdsZXRvbjogdHJ1ZSB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdHYXRla2VlcGVyTWV0cmljc1RyYWNrZXInLCAoKSA9PiBuZXcgR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyKCksIHsgc2luZ2xldG9uOiB0cnVlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFBlcnNvbmFzRGlyKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFzRGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgcG9ydGZvbGlvIOKAlCBjcml0aWNhbCBwYXRoIG9ubHkuXG4gICAqXG4gICAqIElzc3VlICM3MDY6IFNwbGl0IGZyb20gdGhlIG9yaWdpbmFsIG1vbm9saXRoaWMgcHJlcGFyZVBvcnRmb2xpbygpLlxuICAgKiBPbmx5IHdvcmsgcmVxdWlyZWQgYmVmb3JlIE1DUCBjb25uZWN0KCkgcnVucyBoZXJlLiBOb24tY3JpdGljYWwgd29ya1xuICAgKiAobWVtb3J5IGF1dG8tbG9hZCwgYWN0aXZhdGlvbiByZXN0b3JlLCBsb2cgaG9va3MsIGRhbmdlciB6b25lIGluaXQpXG4gICAqIGlzIGRlZmVycmVkIHRvIGNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpIHdoaWNoIHJ1bnMgcG9zdC1jb25uZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByZXBhcmVQb3J0Zm9saW8oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSB0aGlzLnJlc29sdmU8U3RhcnR1cFRpbWVyPignU3RhcnR1cFRpbWVyJyk7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBtaWdyYXRpb25NYW5hZ2VyID0gdGhpcy5yZXNvbHZlPE1pZ3JhdGlvbk1hbmFnZXI+KCdNaWdyYXRpb25NYW5hZ2VyJyk7XG4gICAgY29uc3QgcG9ydGZvbGlvTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpO1xuXG4gICAgLy8gLS0tIGNvbmZpZ19jaGVja3MgKGNyaXRpY2FsKSAtLS1cbiAgICB0aW1lci5zdGFydFBoYXNlKCdjb25maWdfY2hlY2tzJywgdHJ1ZSk7XG5cbiAgICAvLyBQRVJGT1JNQU5DRSBPUFRJTUlaQVRJT046IFJ1biBpbmRlcGVuZGVudCBjaGVja3MgaW4gcGFyYWxsZWwgKDQwLTYwJSBmYXN0ZXIgc3RhcnR1cClcbiAgICAvLyBVc2UgUHJvbWlzZS5hbGxTZXR0bGVkIHRvIGNhcHR1cmUgYWxsIGNoZWNrIHJlc3VsdHMsIGV2ZW4gaWYgb25lIGZhaWxzXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICBtaWdyYXRpb25NYW5hZ2VyLm5lZWRzTWlncmF0aW9uKCksXG4gICAgICBwb3J0Zm9saW9NYW5hZ2VyLmV4aXN0cygpXG4gICAgXSk7XG5cbiAgICAvLyBFeHRyYWN0IHJlc3VsdHMgYW5kIGNvbGxlY3QgYW55IGVycm9yc1xuICAgIGNvbnN0IGNoZWNrRXJyb3JzOiBBcnJheTx7IGNoZWNrOiBzdHJpbmc7IGVycm9yOiBFcnJvciB9PiA9IFtdO1xuXG4gICAgbGV0IG5lZWRzTWlncmF0aW9uID0gZmFsc2U7XG4gICAgaWYgKHJlc3VsdHNbMF0uc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgbmVlZHNNaWdyYXRpb24gPSByZXN1bHRzWzBdLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja0Vycm9ycy5wdXNoKHtcbiAgICAgICAgY2hlY2s6ICdtaWdyYXRpb24nLFxuICAgICAgICBlcnJvcjogcmVzdWx0c1swXS5yZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlc3VsdHNbMF0ucmVhc29uIDogbmV3IEVycm9yKFN0cmluZyhyZXN1bHRzWzBdLnJlYXNvbikpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgcG9ydGZvbGlvRXhpc3RzID0gZmFsc2U7XG4gICAgaWYgKHJlc3VsdHNbMV0uc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgcG9ydGZvbGlvRXhpc3RzID0gcmVzdWx0c1sxXS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tFcnJvcnMucHVzaCh7XG4gICAgICAgIGNoZWNrOiAncG9ydGZvbGlvJyxcbiAgICAgICAgZXJyb3I6IHJlc3VsdHNbMV0ucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHRzWzFdLnJlYXNvbiA6IG5ldyBFcnJvcihTdHJpbmcocmVzdWx0c1sxXS5yZWFzb24pKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSWYgYm90aCBjaGVja3MgZmFpbGVkLCB0aHJvdyBjb21wcmVoZW5zaXZlIGVycm9yXG4gICAgaWYgKGNoZWNrRXJyb3JzLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IGNoZWNrRXJyb3JzLm1hcChlID0+IGAke2UuY2hlY2t9OiAke2UuZXJyb3IubWVzc2FnZX1gKS5qb2luKCc7ICcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb3J0Zm9saW8gcHJlcGFyYXRpb24gZmFpbGVkIC0gYWxsIGNoZWNrcyBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlc31gKTtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IG9uZSBjaGVjayBmYWlsZWQsIGxvZyB3YXJuaW5nIGJ1dCBjb250aW51ZVxuICAgIGlmIChjaGVja0Vycm9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBQb3J0Zm9saW8gY2hlY2sgZmFpbGVkIGJ1dCBjb250aW51aW5nOiAke2NoZWNrRXJyb3JzWzBdLmNoZWNrfSAtICR7Y2hlY2tFcnJvcnNbMF0uZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICB0aW1lci5lbmRQaGFzZSgnY29uZmlnX2NoZWNrcycpO1xuXG4gICAgLy8gLS0tIG1pZ3JhdGlvbiAoY3JpdGljYWwsIGNvbmRpdGlvbmFsKSAtLS1cbiAgICBpZiAobmVlZHNNaWdyYXRpb24pIHtcbiAgICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ21pZ3JhdGlvbicsIHRydWUpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJMZWdhY3kgcGVyc29uYXMgZGV0ZWN0ZWQuIFN0YXJ0aW5nIG1pZ3JhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1pZ3JhdGlvbk1hbmFnZXIubWlncmF0ZSh7IGJhY2t1cDogdHJ1ZSB9KTtcblxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdWNjZXNzZnVsbHkgbWlncmF0ZWQgJHtyZXN1bHQubWlncmF0ZWRDb3VudH0gcGVyc29uYXNgKTtcbiAgICAgICAgaWYgKHJlc3VsdC5iYWNrZWRVcCAmJiByZXN1bHQuYmFja3VwUGF0aCkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBCYWNrdXAgY3JlYXRlZCBhdDogJHtyZXN1bHQuYmFja3VwUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKFwiTWlncmF0aW9uIGNvbXBsZXRlZCB3aXRoIGVycm9yczpcIik7XG4gICAgICAgIHJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyKSA9PiBsb2dnZXIuZXJyb3IoYCAgLSAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgICB0aW1lci5lbmRQaGFzZSgnbWlncmF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gLS0tIHBvcnRmb2xpb19pbml0IChjcml0aWNhbCwgY29uZGl0aW9uYWwpIC0tLVxuICAgIGlmICghcG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICB0aW1lci5zdGFydFBoYXNlKCdwb3J0Zm9saW9faW5pdCcsIHRydWUpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJDcmVhdGluZyBwb3J0Zm9saW8gZGlyZWN0b3J5IHN0cnVjdHVyZS4uLlwiKTtcbiAgICAgIGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgdGltZXIuZW5kUGhhc2UoJ3BvcnRmb2xpb19pbml0Jyk7XG4gICAgfVxuXG4gICAgLy8gUEVSRk9STUFOQ0UgT1BUSU1JWkFUSU9OOiBJbml0aWFsaXplIGNvbGxlY3Rpb24gY2FjaGUgaW4gYmFja2dyb3VuZCAobm9uLWJsb2NraW5nKVxuICAgIC8vIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGNvbGxlY3Rpb24gY2FjaGUgaXMgbm90IGNyaXRpY2FsIGZvciBzdGFydHVwXG4gICAgdGhpcy5pbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlKCkuY2F0Y2goZXJyID0+XG4gICAgICBsb2dnZXIud2FybignQmFja2dyb3VuZCBjb2xsZWN0aW9uIGNhY2hlIGluaXRpYWxpemF0aW9uIGZhaWxlZCAod2lsbCByZXRyeSBvbiBkZW1hbmQpJywgZXJyKVxuICAgICk7XG5cbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuXG4gICAgLy8gLS0tIGNvbmZpZ19tYW5hZ2VyIChjcml0aWNhbCkgLS0tXG4gICAgdGltZXIuc3RhcnRQaGFzZSgnY29uZmlnX21hbmFnZXInLCB0cnVlKTtcbiAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPENvbmZpZ01hbmFnZXI+KCdDb25maWdNYW5hZ2VyJyk7XG4gICAgYXdhaXQgY29uZmlnTWFuYWdlci5pbml0aWFsaXplKCk7XG4gICAgdGltZXIuZW5kUGhhc2UoJ2NvbmZpZ19tYW5hZ2VyJyk7XG5cbiAgICBjb25zdCBlbGFwc2VkVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgbG9nZ2VyLmluZm8oYFtTdGFydHVwXSBDcml0aWNhbCBwb3J0Zm9saW8gcGF0aCBjb21wbGV0ZWQgaW4gJHtlbGFwc2VkVGltZX1tcyAocGVyc29uYXMgZGlyZWN0b3J5OiAke3RoaXMucGVyc29uYXNEaXJ9KWApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIG5vbi1jcml0aWNhbCBzZXR1cCBhZnRlciBNQ1AgY29ubmVjdCgpLlxuICAgKlxuICAgKiBJc3N1ZSAjNzA2OiBUaGVzZSBvcGVyYXRpb25zIHdlcmUgcHJldmlvdXNseSBpbiBwcmVwYXJlUG9ydGZvbGlvKCkgYnV0IGFyZVxuICAgKiBub24tZmF0YWwgYW5kIGNhbiBzYWZlbHkgcnVuIGFmdGVyIHRoZSBzZXJ2ZXIgaXMgYWNjZXB0aW5nIGNvbm5lY3Rpb25zLlxuICAgKiBUaGlzIHNocmlua3MgdGhlIGNyaXRpY2FsIHBhdGggYnkgMTAwMC0zNzAwbXMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29tcGxldGVEZWZlcnJlZFNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gdGhpcy5yZXNvbHZlPFN0YXJ0dXBUaW1lcj4oJ1N0YXJ0dXBUaW1lcicpO1xuXG4gICAgLy8gSXNzdWUgIzcwNjogVGVzdCBob29rIOKAlCBpbmplY3QgYXJ0aWZpY2lhbCBkZWxheSB0byBzaW11bGF0ZSBzbG93IGRlZmVycmVkIHNldHVwLlxuICAgIC8vIE9ubHkgYWN0aXZlIHdoZW4gRE9MTEhPVVNFX1RFU1RfREVGRVJSRURfREVMQVlfTVMgaXMgc2V0IChpbnRlZ3JhdGlvbiB0ZXN0cykuXG4gICAgY29uc3QgdGVzdERlbGF5ID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1RFU1RfREVGRVJSRURfREVMQVlfTVMgfHwgJzAnLCAxMCk7XG4gICAgaWYgKHRlc3REZWxheSA+IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBbU3RhcnR1cF0gVGVzdCBkZWxheSBpbmplY3RlZDogJHt0ZXN0RGVsYXl9bXNgKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0ZXN0RGVsYXkpKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmNvbXBsZXRlU2lua1NldHVwKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmNvbXBsZXRlQ29uc29sZVNldHVwKHRpbWVyKTtcblxuICAgIHRoaXMuZGVmZXJyZWRTZXR1cENvbXBsZXRlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHJlcG9ydCA9IHRpbWVyLmdldFJlcG9ydCgpO1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFtTdGFydHVwXSBEZWZlcnJlZCBzZXR1cCBjb21wbGV0ZWQgaW4gJHtyZXBvcnQuZGVmZXJyZWRNc31tcyBgICtcbiAgICAgIGAodG90YWwgc3RhcnR1cDogJHtyZXBvcnQudG90YWxNc31tcywgY3JpdGljYWw6ICR7cmVwb3J0LmNyaXRpY2FsUGF0aE1zfW1zKWBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpcmUgc2lua3MsIGhvb2tzLCBjb2xsZWN0b3JzLCBhbmQgc2VjdXJpdHkg4oCUIGV2ZXJ5dGhpbmcgRVhDRVBUXG4gICAqIHRoZSB3ZWIgY29uc29sZSBsZWFkZXIgZWxlY3Rpb24gYW5kIHBlcm1pc3Npb24gc2VydmVyLlxuICAgKlxuICAgKiBDYWxsZWQgYnkgY29tcGxldGVEZWZlcnJlZFNldHVwKCkgaW4gTUNQIHN0ZGlvIG1vZGUsIGFuZCBkaXJlY3RseVxuICAgKiBieSB0aGUgLS13ZWIgc3RhbmRhbG9uZSBwYXRoIHdoaWNoIElTIHRoZSBzZXJ2ZXIgKCMxODY2KS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZVNpbmtTZXR1cCh0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRNZW1vcnlBdXRvbG9hZCh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZEFjdGl2YXRpb25SZXN0b3JlKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkUG9saWN5RXhwb3J0KCk7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZExvZ0hvb2tzKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkTWV0cmljc0NvbGxlY3RvcnModGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWREYW5nZXJab25lSW5pdCh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZFBhdHRlcm5FbmNyeXB0aW9uKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkQmFja2dyb3VuZFZhbGlkYXRvcih0aW1lcik7XG4gIH1cblxuICAvKipcbiAgICogTGVhZGVyIGVsZWN0aW9uLCB3ZWIgY29uc29sZSBzZXJ2ZXIsIGFuZCBwZXJtaXNzaW9uIHNlcnZlci5cbiAgICogT25seSBjYWxsZWQgaW4gTUNQIHN0ZGlvIG1vZGUg4oCUIC0td2ViIHN0YW5kYWxvbmUgbW9kZSBJUyB0aGUgc2VydmVyICgjMTg2NikuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29tcGxldGVDb25zb2xlU2V0dXAodGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBTd2VlcCBzdGFsZSBwb3J0IGZpbGVzIGZyb20gcHJpb3Igc2Vzc2lvbnMgYmVmb3JlIGFueSBwb3J0IG9wZXJhdGlvbnMgKCMxODU2KS5cbiAgICAvLyBSdW5zIHVuY29uZGl0aW9uYWxseSDigJQgc3RhbGUgZmlsZXMgYWNjdW11bGF0ZSByZWdhcmRsZXNzIG9mIERPTExIT1VTRV9XRUJfQ09OU09MRS5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBzd2VlcFN0YWxlUG9ydEZpbGVzIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3dlYi9wb3J0RGlzY292ZXJ5LmpzJyk7XG4gICAgICBhd2FpdCBzd2VlcFN0YWxlUG9ydEZpbGVzKCk7XG4gICAgfSBjYXRjaCB7IC8qIHN3ZWVwIGZhaWx1cmUgaXMgbm9uLWZhdGFsICovIH1cblxuICAgIGNvbnN0IGNvbnNvbGVSZXN1bHQgPSBhd2FpdCB0aGlzLmRlZmVycmVkV2ViQ29uc29sZSh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZFBlcm1pc3Npb25TZXJ2ZXIoY29uc29sZVJlc3VsdCwgdGltZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZE1lbW9yeUF1dG9sb2FkKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ21lbW9yeV9hdXRvbG9hZCcsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxDb25maWdNYW5hZ2VyPignQ29uZmlnTWFuYWdlcicpO1xuICAgICAgY29uc3QgY29uZmlnID0gY29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcblxuICAgICAgaWYgKGNvbmZpZy5hdXRvTG9hZC5lbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IG1lbW9yeU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWVtb3J5TWFuYWdlcj4oJ01lbW9yeU1hbmFnZXInKTtcbiAgICAgICAgY29uc3QgYXV0b0xvYWRSZXN1bHQgPSBhd2FpdCBtZW1vcnlNYW5hZ2VyLmxvYWRBbmRBY3RpdmF0ZUF1dG9Mb2FkTWVtb3JpZXMoKTtcblxuICAgICAgICBpZiAoYXV0b0xvYWRSZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIGBbQ29udGFpbmVyXSBBdXRvLWxvYWQgY29tcGxldGVkIHdpdGggJHthdXRvTG9hZFJlc3VsdC5lcnJvcnMubGVuZ3RofSBlcnJvcihzKTpgLFxuICAgICAgICAgICAgYXV0b0xvYWRSZXN1bHQuZXJyb3JzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBbQ29udGFpbmVyXSBBdXRvLWxvYWRlZCAke2F1dG9Mb2FkUmVzdWx0LmxvYWRlZH0gbWVtb3JpZXMgYCArXG4gICAgICAgICAgYCh+JHthdXRvTG9hZFJlc3VsdC50b3RhbFRva2Vuc30gdG9rZW5zKSwgJHthdXRvTG9hZFJlc3VsdC5za2lwcGVkfSBza2lwcGVkYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdbQ29udGFpbmVyXSBBdXRvLWxvYWQgbWVtb3JpZXMgZGlzYWJsZWQgaW4gY29uZmlndXJhdGlvbicpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tDb250YWluZXJdIE1lbW9yeSBhdXRvLWxvYWQgZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXI/LmVuZFBoYXNlKCdtZW1vcnlfYXV0b2xvYWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRBY3RpdmF0aW9uUmVzdG9yZSh0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCdhY3RpdmF0aW9uX3Jlc3RvcmUnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFjdGl2YXRpb25TdG9yZSA9IHRoaXMucmVzb2x2ZTxBY3RpdmF0aW9uU3RvcmU+KCdBY3RpdmF0aW9uU3RvcmUnKTtcbiAgICAgIGF3YWl0IGFjdGl2YXRpb25TdG9yZS5pbml0aWFsaXplKCk7XG5cbiAgICAgIGlmIChhY3RpdmF0aW9uU3RvcmUuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN0b3JlQWN0aXZhdGlvbnMoYWN0aXZhdGlvblN0b3JlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIEFjdGl2YXRpb24gc3RhdGUgcmVzdG9yYXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXI/LmVuZFBoYXNlKCdhY3RpdmF0aW9uX3Jlc3RvcmUnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRQb2xpY3lFeHBvcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBvbGljeUV4cG9ydFNlcnZpY2UgPSB0aGlzLnJlc29sdmU8UG9saWN5RXhwb3J0U2VydmljZT4oJ1BvbGljeUV4cG9ydFNlcnZpY2UnKTtcbiAgICAgIGF3YWl0IHBvbGljeUV4cG9ydFNlcnZpY2UuZXhwb3J0UG9saWNpZXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbQ29udGFpbmVyXSBQb2xpY3kgZXhwb3J0IHNraXBwZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRMb2dIb29rcyh0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCdsb2dfaG9va3MnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TG9nTWFuYWdlcj4oJ0xvZ01hbmFnZXInKTtcbiAgICAgIGNvbnN0IGxvZ0NsZWFudXBzID0gd2lyZUxvZ0hvb2tzKGxvZ01hbmFnZXIsIHRoaXMpO1xuICAgICAgdGhpcy5yZWdpc3RlcignX2xvZ0hvb2tDbGVhbnVwcycsICgpID0+IGxvZ0NsZWFudXBzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIEZhaWxlZCB0byB3aXJlIGxvZyBob29rczonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgnbG9nX2hvb2tzJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkTWV0cmljc0NvbGxlY3RvcnModGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lcj8uc3RhcnRQaGFzZSgnbWV0cmljc19jb2xsZWN0b3JzJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRyaWNzTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxNZXRyaWNzTWFuYWdlcj4oJ01ldHJpY3NNYW5hZ2VyJyk7XG4gICAgICB0aGlzLndpcmVNZXRyaWNzQ29sbGVjdG9ycyhtZXRyaWNzTWFuYWdlcik7XG4gICAgICBtZXRyaWNzTWFuYWdlci5zdGFydCgpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tDb250YWluZXJdIE1ldHJpY3MgY29sbGVjdGlvbiBzdGFydGVkJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBNZXRyaWNzIHdpcmluZyBza2lwcGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXI/LmVuZFBoYXNlKCdtZXRyaWNzX2NvbGxlY3RvcnMnKTtcbiAgfVxuXG4gIC8qKiBUcnkgdG8gcmVzb2x2ZSBhIHNlcnZpY2UsIHJldHVybmluZyB1bmRlZmluZWQgaWYgbm90IHJlZ2lzdGVyZWQgKi9cbiAgcHJpdmF0ZSB0cnlSZXNvbHZlPFQ+KG5hbWU6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgIHRyeSB7IHJldHVybiB0aGlzLnJlc29sdmU8VD4obmFtZSk7IH0gY2F0Y2ggeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIH1cblxuICAvKiogV2lyZSBTU0UgYnJvYWRjYXN0IHNpbmtzIGZvciB0aGUgd2ViIGNvbnNvbGUgKi9cbiAgcHJpdmF0ZSB3aXJlU1NFQnJvYWRjYXN0cyhcbiAgICB3ZWJSZXN1bHQ6IGltcG9ydCgnLi4vd2ViL3NlcnZlci5qcycpLldlYlNlcnZlclJlc3VsdCxcbiAgICBtZXRyaWNzU2luazogTWVtb3J5TWV0cmljc1NpbmsgfCB1bmRlZmluZWQsXG4gICk6IHZvaWQge1xuICAgIGlmICh3ZWJSZXN1bHQubG9nQnJvYWRjYXN0KSB7XG4gICAgICBjb25zdCBsb2dNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPExvZ01hbmFnZXI+KCdMb2dNYW5hZ2VyJyk7XG4gICAgICBsb2dNYW5hZ2VyLnJlZ2lzdGVyU2luayhuZXcgV2ViU1NFTG9nU2luayh3ZWJSZXN1bHQubG9nQnJvYWRjYXN0KSk7XG4gICAgfVxuICAgIGlmICh3ZWJSZXN1bHQubWV0cmljc09uU25hcHNob3QgJiYgbWV0cmljc1NpbmspIHtcbiAgICAgIGNvbnN0IG1ldHJpY3NNYW5hZ2VyID0gdGhpcy50cnlSZXNvbHZlPE1ldHJpY3NNYW5hZ2VyPignTWV0cmljc01hbmFnZXInKTtcbiAgICAgIGlmIChtZXRyaWNzTWFuYWdlcikge1xuICAgICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlclNpbmsobmV3IFdlYlNTRU1ldHJpY3NTaW5rKHdlYlJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRXZWJDb25zb2xlKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdCB8IG51bGw+IHtcbiAgICB0aW1lcj8uc3RhcnRQaGFzZSgnd2ViX2NvbnNvbGUnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRSkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IGFjdGl2YXRpb25TdG9yZSA9IHRoaXMucmVzb2x2ZTxBY3RpdmF0aW9uU3RvcmU+KCdBY3RpdmF0aW9uU3RvcmUnKTtcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGFjdGl2YXRpb25TdG9yZS5nZXRSdW50aW1lU2Vzc2lvbklkKCk7XG4gICAgICBjb25zdCBzdGFibGVTZXNzaW9uSWQgPSBhY3RpdmF0aW9uU3RvcmUuZ2V0U2Vzc2lvbklkKCk7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJyk7XG4gICAgICBjb25zdCBtZW1vcnlTaW5rID0gdGhpcy5yZXNvbHZlPE1lbW9yeUxvZ1Npbms+KCdNZW1vcnlMb2dTaW5rJyk7XG4gICAgICBjb25zdCBtZXRyaWNzU2luayA9IHRoaXMudHJ5UmVzb2x2ZTxNZW1vcnlNZXRyaWNzU2luaz4oJ01lbW9yeU1ldHJpY3NTaW5rJyk7XG4gICAgICBjb25zdCBtY3BBcWxIYW5kbGVyID0gdGhpcy50cnlSZXNvbHZlPE1DUEFRTEhhbmRsZXI+KCdtY3BBcWxIYW5kbGVyJyk7XG4gICAgICBjb25zdCBsb2dNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPExvZ01hbmFnZXI+KCdMb2dNYW5hZ2VyJyk7XG5cbiAgICAgIC8vIFJlc29sdmUgY29uc29sZSBwb3J0OiBjb25maWcgZmlsZSDihpIgZW52IHZhciDihpIgZGVmYXVsdCAoIzE4NDApXG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPENvbmZpZ01hbmFnZXI+KCdDb25maWdNYW5hZ2VyJyk7XG4gICAgICBjb25zdCBjb25maWdQb3J0ID0gY29uZmlnTWFuYWdlci5nZXRTZXR0aW5nPG51bWJlcj4oJ2NvbnNvbGUucG9ydCcpO1xuXG4gICAgICBjb25zdCB7IHN0YXJ0VW5pZmllZENvbnNvbGUgfSA9IGF3YWl0IGltcG9ydCgnLi4vd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUuanMnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0VW5pZmllZENvbnNvbGUoe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHN0YWJsZVNlc3Npb25JZCxcbiAgICAgICAgcG9ydGZvbGlvRGlyOiBwb3J0Zm9saW9NYW5hZ2VyLmdldEJhc2VEaXIoKSxcbiAgICAgICAgbWVtb3J5U2luayxcbiAgICAgICAgbWV0cmljc1NpbmssXG4gICAgICAgIG1jcEFxbEhhbmRsZXIsXG4gICAgICAgIHJlZ2lzdGVyTG9nU2luazogKHNpbmspID0+IGxvZ01hbmFnZXIucmVnaXN0ZXJTaW5rKHNpbmspLFxuICAgICAgICB3aXJlU1NFQnJvYWRjYXN0czogKHdlYlJlc3VsdCwgbVNpbmspID0+IHRoaXMud2lyZVNTRUJyb2FkY2FzdHMod2ViUmVzdWx0LCBtU2luayksXG4gICAgICAgIHBvcnQ6IGNvbmZpZ1BvcnQsXG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmluZm8oYFtDb250YWluZXJdIFdlYiBjb25zb2xlIHN0YXJ0ZWQgYXMgJHtyZXN1bHQucm9sZX1gKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBXZWIgY29uc29sZSBzdGFydHVwIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGltZXI/LmVuZFBoYXNlKCd3ZWJfY29uc29sZScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRQZXJtaXNzaW9uU2VydmVyKGNvbnNvbGVSZXN1bHQ6IFVuaWZpZWRDb25zb2xlUmVzdWx0IHwgbnVsbCwgdGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lcj8uc3RhcnRQaGFzZSgncGVybWlzc2lvbl9zZXJ2ZXInLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghZW52LkRPTExIT1VTRV9QRVJNSVNTSU9OX1NFUlZFUikge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1tDb250YWluZXJdIFBlcm1pc3Npb24gc2VydmVyIGRpc2FibGVkIHZpYSBET0xMSE9VU0VfUEVSTUlTU0lPTl9TRVJWRVI9ZmFsc2UnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdbQ29udGFpbmVyXSBQZXJtaXNzaW9uIHNlcnZlciBza2lwcGVkIOKAlCB3ZWIgY29uc29sZSBpcyBkaXNhYmxlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFBlcm1pc3Npb24gcm91dGVzIGFyZSBhbHJlYWR5IG1vdW50ZWQgb24gdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gICAgICAvLyBXZSBqdXN0IG5lZWQgdG8gd3JpdGUgdGhlIGFjdGl2ZSBsZWFkZXIgcG9ydCBzbyB0aGUgUHJlVG9vbFVzZSBob29rXG4gICAgICAvLyBzY3JpcHQgcmVhY2hlcyB0aGUgc2FtZSBjb25zb2xlIGluc3RhbmNlIHRoYXQgb3ducyB0aGUgbGl2ZSBhdWRpdCBmZWVkLlxuICAgICAgY29uc3QgcG9ydCA9IGNvbnNvbGVSZXN1bHQ/LnJvbGUgPT09ICdsZWFkZXInXG4gICAgICAgID8gY29uc29sZVJlc3VsdC5wb3J0XG4gICAgICAgIDogY29uc29sZVJlc3VsdD8uZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0O1xuXG4gICAgICBpZiAoIXBvcnQpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdbQ29udGFpbmVyXSBQZXJtaXNzaW9uIHNlcnZlciBza2lwcGVkIOKAlCBubyBhY3RpdmUgd2ViIGNvbnNvbGUgcG9ydCBhdmFpbGFibGUnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydE1zID0gRGF0ZS5ub3coKTtcblxuICAgICAgY29uc3QgeyB3cml0ZVBvcnRGaWxlLCByZWdpc3RlclBvcnRDbGVhbnVwIH0gPSBhd2FpdCBpbXBvcnQoJy4uL2F1dG8tZG9sbGhvdXNlL3BvcnREaXNjb3ZlcnkuanMnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0NvbnRhaW5lcl0gV3JpdGluZyBwZXJtaXNzaW9uIHNlcnZlciBwb3J0IGZpbGUgZm9yIHBvcnQgJHtwb3J0fWApO1xuICAgICAgYXdhaXQgd3JpdGVQb3J0RmlsZShwb3J0KTtcbiAgICAgIHJlZ2lzdGVyUG9ydENsZWFudXAoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0NvbnRhaW5lcl0gUG9ydCBjbGVhbnVwIGhhbmRsZXJzIHJlZ2lzdGVyZWRgKTtcblxuICAgICAgY29uc3QgZWxhcHNlZE1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0TXM7XG4gICAgICBsb2dnZXIuaW5mbyhgW0NvbnRhaW5lcl0gUGVybWlzc2lvbiBzZXJ2ZXIgcG9ydCBmaWxlIHdyaXR0ZW4gKHBvcnQgJHtwb3J0fSwgJHtlbGFwc2VkTXN9bXMpYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBQZXJtaXNzaW9uIHNlcnZlciBzdGFydHVwIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgncGVybWlzc2lvbl9zZXJ2ZXInKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWREYW5nZXJab25lSW5pdCh0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCdkYW5nZXJfem9uZV9pbml0JywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYW5nZXJab25lRW5mb3JjZXIgPSB0aGlzLnJlc29sdmU8RGFuZ2VyWm9uZUVuZm9yY2VyPignRGFuZ2VyWm9uZUVuZm9yY2VyJyk7XG4gICAgICBhd2FpdCBkYW5nZXJab25lRW5mb3JjZXIuaW5pdGlhbGl6ZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gRGFuZ2VyWm9uZUVuZm9yY2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgnZGFuZ2VyX3pvbmVfaW5pdCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFBhdHRlcm5FbmNyeXB0aW9uKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ3BhdHRlcm5fZW5jcnlwdGlvbicsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF0dGVybkVuY3J5cHRvciA9IHRoaXMucmVzb2x2ZSgnUGF0dGVybkVuY3J5cHRvcicpIGFzIFBhdHRlcm5FbmNyeXB0b3I7XG4gICAgICBhd2FpdCBwYXR0ZXJuRW5jcnlwdG9yLmluaXRpYWxpemUoKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiUGF0dGVybiBlbmNyeXB0aW9uIGluaXRpYWxpemVkXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gUGF0dGVybiBlbmNyeXB0aW9uIGluaXRpYWxpemF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgncGF0dGVybl9lbmNyeXB0aW9uJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkQmFja2dyb3VuZFZhbGlkYXRvcih0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCdiYWNrZ3JvdW5kX3ZhbGlkYXRvcicsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFja2dyb3VuZFZhbGlkYXRvciA9IHRoaXMucmVzb2x2ZSgnQmFja2dyb3VuZFZhbGlkYXRvcicpIGFzIGFueTtcbiAgICAgIGJhY2tncm91bmRWYWxpZGF0b3Iuc3RhcnQoKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiQmFja2dyb3VuZCB2YWxpZGF0b3Igc3RhcnRlZCBmb3IgbWVtb3J5IHNlY3VyaXR5XCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gQmFja2dyb3VuZCB2YWxpZGF0b3Igc3RhcnQgZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXI/LmVuZFBoYXNlKCdiYWNrZ3JvdW5kX3ZhbGlkYXRvcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgcGVyLXNlc3Npb24gYWN0aXZhdGlvbiBzdGF0ZSBmcm9tIHRoZSBBY3RpdmF0aW9uU3RvcmUuXG4gICAqIENhbGxlZCBkdXJpbmcgcHJlcGFyZVBvcnRmb2xpbygpIGFmdGVyIGF1dG8tbG9hZCBtZW1vcmllcy5cbiAgICpcbiAgICogSXNzdWUgIzU5ODogRWFjaCBlbGVtZW50IHR5cGUgaXMgcmVzdG9yZWQgaW5kZXBlbmRlbnRseS5cbiAgICogTWlzc2luZyBlbGVtZW50cyAoZGVsZXRlZCBzaW5jZSBsYXN0IHNlc3Npb24pIGFyZSBza2lwcGVkIGFuZCBwcnVuZWQuXG4gICAqIEF1dG8tbG9hZGVkIG1lbW9yaWVzIGFyZSBkZWR1cGxpY2F0ZWQgKG5vdCBhY3RpdmF0ZWQgdHdpY2UpLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXN0b3JlQWN0aXZhdGlvbnMoc3RvcmU6IEFjdGl2YXRpb25TdG9yZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBlcnNvbmFNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBlcnNvbmFNYW5hZ2VyPignUGVyc29uYU1hbmFnZXInKTtcbiAgICBjb25zdCBza2lsbE1hbmFnZXIgPSB0aGlzLnJlc29sdmU8U2tpbGxNYW5hZ2VyPignU2tpbGxNYW5hZ2VyJyk7XG4gICAgY29uc3QgYWdlbnRNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEFnZW50TWFuYWdlcj4oJ0FnZW50TWFuYWdlcicpO1xuICAgIGNvbnN0IG1lbW9yeU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWVtb3J5TWFuYWdlcj4oJ01lbW9yeU1hbmFnZXInKTtcbiAgICBjb25zdCBlbnNlbWJsZU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8RW5zZW1ibGVNYW5hZ2VyPignRW5zZW1ibGVNYW5hZ2VyJyk7XG5cbiAgICBsZXQgcmVzdG9yZWRDb3VudCA9IDA7XG4gICAgbGV0IHNraXBwZWRDb3VudCA9IDA7XG5cbiAgICAvLyBSZXN0b3JlIHBlcnNvbmFzICh1c2VzIGZpbGVuYW1lIGlmIGF2YWlsYWJsZSwgZmFsbHMgYmFjayB0byBuYW1lKVxuICAgIC8vIElzc3VlICM4NDM6IGFjdGl2YXRlUGVyc29uYSgpIGlzIG5vdyBhc3luYyDigJQgdXNlcyBkaXNrIGZhbGxiYWNrIGZvciBjYWNoZSBtaXNzZXNcbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ3BlcnNvbmEnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IGFjdGl2YXRpb24uZmlsZW5hbWUgfHwgYWN0aXZhdGlvbi5uYW1lO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJzb25hTWFuYWdlci5hY3RpdmF0ZVBlcnNvbmEoaWRlbnRpZmllcik7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBwZXJzb25hICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdwZXJzb25hJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIHBlcnNvbmEgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdwZXJzb25hJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBza2lsbHNcbiAgICAvLyBOT1RFOiBhY3RpdmF0ZVNraWxsKCkgcmV0dXJucyB7c3VjY2VzcywgbWVzc2FnZX0g4oCUIGl0IG5ldmVyIHRocm93cyBvbiBub3QtZm91bmQuXG4gICAgZm9yIChjb25zdCBhY3RpdmF0aW9uIG9mIHN0b3JlLmdldEFjdGl2YXRpb25zKCdza2lsbCcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBza2lsbE1hbmFnZXIuYWN0aXZhdGVTa2lsbChhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN0b3JlZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBQcnVuaW5nIG1pc3Npbmcgc2tpbGwgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ3NraWxsJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIHNraWxsICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignc2tpbGwnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIGFnZW50c1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygnYWdlbnQnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWdlbnRNYW5hZ2VyLmFjdGl2YXRlQWdlbnQoYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIGFnZW50ICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdhZ2VudCcsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBhZ2VudCAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2FnZW50JywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBtZW1vcmllcyAoZGVkdXAgYWdhaW5zdCBhdXRvLWxvYWRlZCBvbmVzKVxuICAgIGNvbnN0IGFjdGl2ZU1lbW9yaWVzID0gYXdhaXQgbWVtb3J5TWFuYWdlci5nZXRBY3RpdmVNZW1vcmllcygpO1xuICAgIGNvbnN0IGFjdGl2ZU1lbW9yeU5hbWVzID0gbmV3IFNldChhY3RpdmVNZW1vcmllcy5tYXAobSA9PiBtLm1ldGFkYXRhLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ21lbW9yeScpKSB7XG4gICAgICBpZiAoYWN0aXZlTWVtb3J5TmFtZXMuaGFzKGFjdGl2YXRpb24ubmFtZSkpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBNZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfScgYWxyZWFkeSBhY3RpdmUgKGF1dG8tbG9hZGVkKSwgc2tpcHBpbmdgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtZW1vcnlNYW5hZ2VyLmFjdGl2YXRlTWVtb3J5KGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBtZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ21lbW9yeScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBtZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdtZW1vcnknLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIGVuc2VtYmxlc1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygnZW5zZW1ibGUnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW5zZW1ibGVNYW5hZ2VyLmFjdGl2YXRlRW5zZW1ibGUoYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIGVuc2VtYmxlICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdlbnNlbWJsZScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBlbnNlbWJsZSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2Vuc2VtYmxlJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3RvcmVkQ291bnQgPiAwIHx8IHNraXBwZWRDb3VudCA+IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgW0FjdGl2YXRpb25TdG9yZV0gUmVzdG9yZWQgJHtyZXN0b3JlZENvdW50fSBlbGVtZW50KHMpLCBza2lwcGVkICR7c2tpcHBlZENvdW50fSBzdGFsZSBmb3Igc2Vzc2lvbiAnJHtzdG9yZS5nZXRTZXNzaW9uSWQoKX0nYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQm9vdHN0cmFwIGFsbCBoYW5kbGVycyB3aXRob3V0IHJlZ2lzdGVyaW5nIE1DUCB0b29scy5cbiAgICogVXNlZCBieSB3ZWItb25seSBtb2RlICgtLXdlYikgdG8gZ2V0IE1DUEFRTEhhbmRsZXIgd2l0aG91dCBhbiBNQ1AgU2VydmVyLlxuICAgKiBJc3N1ZSAjNzk2OiBTcGxpdCBESSBjb250YWluZXIgYm9vdHN0cmFwIGZyb20gdHJhbnNwb3J0IGNvbm5lY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYm9vdHN0cmFwSGFuZGxlcnMoKTogUHJvbWlzZTxIYW5kbGVyQnVuZGxlPiB7XG4gICAgaWYgKCF0aGlzLnBlcnNvbmFzRGlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQZXJzb25hIGRpcmVjdG9yeSBub3QgaW5pdGlhbGl6ZWQuIENhbGwgcHJlcGFyZVBvcnRmb2xpbygpIGZpcnN0LlwiKTtcbiAgICB9XG5cbiAgICBQYXRoVmFsaWRhdG9yLmluaXRpYWxpemUodGhpcy5wZXJzb25hc0Rpcik7XG5cbiAgICBjb25zdCBpbmRpY2F0b3JTZXJ2aWNlID0gdGhpcy5yZXNvbHZlPFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlPignUGVyc29uYUluZGljYXRvclNlcnZpY2UnKTtcbiAgICBjb25zdCBwZXJzb25hTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQZXJzb25hTWFuYWdlcj4oJ1BlcnNvbmFNYW5hZ2VyJyk7XG4gICAgY29uc3QgaW5pdFNlcnZpY2UgPSB0aGlzLnJlc29sdmU8SW5pdGlhbGl6YXRpb25TZXJ2aWNlPignSW5pdGlhbGl6YXRpb25TZXJ2aWNlJyk7XG4gICAgY29uc3QgcGVyc29uYUV4cG9ydGVyID0gbmV3IFBlcnNvbmFFeHBvcnRlcigoKSA9PiBwZXJzb25hTWFuYWdlci5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCkpO1xuICAgIGNvbnN0IHBlcnNvbmFJbXBvcnRlciA9IG5ldyBQZXJzb25hSW1wb3J0ZXIodGhpcy5wZXJzb25hc0RpciwgKCkgPT4gcGVyc29uYU1hbmFnZXIuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpKTtcblxuICAgIC8vIENyZWF0ZSBzdGF0ZSBhY2Nlc3NvciBmb3IgUGVyc29uYUhhbmRsZXJcbiAgICBjb25zdCBhY3RpdmVQZXJzb25hQWNjZXNzb3IgPSB7XG4gICAgICBnZXQ6ICgpID0+IHBlcnNvbmFNYW5hZ2VyLmdldEFjdGl2ZVBlcnNvbmEoKT8uZmlsZW5hbWUgfHwgbnVsbCxcbiAgICAgIHNldDogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIC8vIElzc3VlICM4NDM6IGFjdGl2YXRlUGVyc29uYSBpcyBub3cgYXN5bmMgYnV0IHRoaXMgc2V0dGVyIGlzIHN5bmNocm9ub3VzLlxuICAgICAgICAgIC8vIEZpcmUtYW5kLWZvcmdldCDigJQgUGVyc29uYUhhbmRsZXIgZG9lcyBpdHMgb3duIGxvb2t1cCBiZWZvcmUgY2FsbGluZyBzZXQoKS5cbiAgICAgICAgICAvLyBMb2cgYXQgZXJyb3IgbGV2ZWwgc2luY2UgYWN0aXZhdGlvbiBmYWlsdXJlcyBoZXJlIGluZGljYXRlIHN0YWxlIHN0YXRlLlxuICAgICAgICAgIHBlcnNvbmFNYW5hZ2VyLmFjdGl2YXRlUGVyc29uYSh2YWx1ZSkuY2F0Y2goZXJyID0+XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFtDb250YWluZXJdIFBlcnNvbmEgYWN0aXZhdGlvbiBmYWlsZWQgZm9yIFwiJHt2YWx1ZX1cIiDigJQgc3RhdGUgYWNjZXNzb3IgbWF5IGJlIHN0YWxlOmAsIGVycilcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlcnNvbmFNYW5hZ2VyLmRlYWN0aXZhdGVQZXJzb25hKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcGVyc29uYUhhbmRsZXIgPSBuZXcgUGVyc29uYUhhbmRsZXIoXG4gICAgICBwZXJzb25hTWFuYWdlcixcbiAgICAgIHBlcnNvbmFFeHBvcnRlcixcbiAgICAgIHBlcnNvbmFJbXBvcnRlcixcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIGFjdGl2ZVBlcnNvbmFBY2Nlc3NvclxuICAgICk7XG5cbiAgICBhd2FpdCBwZXJzb25hTWFuYWdlci5yZWxvYWQoKTtcblxuICAgIGNvbnN0IGVsZW1lbnRDcnVkSGFuZGxlciA9IG5ldyBFbGVtZW50Q1JVREhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1NraWxsTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUZW1wbGF0ZU1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVGVtcGxhdGVSZW5kZXJlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdBZ2VudE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbnNlbWJsZU1hbmFnZXInKSxcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2UsXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbGVtZW50UXVlcnlTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdBY3RpdmF0aW9uU3RvcmUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb2xpY3lFeHBvcnRTZXJ2aWNlJylcbiAgICApO1xuICAgIC8vIFJlZ2lzdGVyIGZvciBsYXp5IHJlc29sdXRpb24gYnkgUG9saWN5RXhwb3J0U2VydmljZVxuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRDUlVESGFuZGxlcicsICgpID0+IGVsZW1lbnRDcnVkSGFuZGxlcik7XG5cbiAgICAvLyBNQ1BBUUxIYW5kbGVyIGNyZWF0ZWQgbGF0ZXIgYWZ0ZXIgYWxsIGhhbmRsZXJzIGFyZSBpbnN0YW50aWF0ZWRcbiAgICAvLyBTZWUgYmVsb3cgYWZ0ZXIgZW5oYW5jZWRJbmRleEhhbmRsZXIgY3JlYXRpb25cblxuICAgIGNvbnN0IGNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uQnJvd3NlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uU2VhcmNoJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFEZXRhaWxzJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0VsZW1lbnRJbnN0YWxsZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkNhY2hlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLCAvLyBVc2UgdGhlIHJlc29sdmVkIFBlcnNvbmFNYW5hZ2VyXG4gICAgICB0aGlzLnJlc29sdmUoJ1N1Ym1pdFRvUG9ydGZvbGlvVG9vbCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdVbmlmaWVkSW5kZXhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0luaXRpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hSW5kaWNhdG9yU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICk7XG5cbiAgICBjb25zdCBwb3J0Zm9saW9IYW5kbGVyID0gbmV3IFBvcnRmb2xpb0hhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0dpdEh1YkF1dGhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUHVsbEhhbmRsZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1VuaWZpZWRJbmRleE1hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJylcbiAgICApO1xuXG4gICAgY29uc3QgZ2l0aHViQXV0aEhhbmRsZXIgPSBuZXcgR2l0SHViQXV0aEhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0dpdEh1YkF1dGhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApO1xuXG4gICAgY29uc3QgZGlzcGxheUNvbmZpZ0hhbmRsZXIgPSBuZXcgRGlzcGxheUNvbmZpZ0hhbmRsZXIoXG4gICAgICBwZXJzb25hTWFuYWdlcixcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICBjb25zdCBpZGVudGl0eUhhbmRsZXIgPSBuZXcgSWRlbnRpdHlIYW5kbGVyKFxuICAgICAgcGVyc29uYU1hbmFnZXIsXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuXG4gICAgY29uc3QgY29uZmlnSGFuZGxlciA9IG5ldyBDb25maWdIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuICAgIGNvbnN0IHN5bmNIYW5kbGVyID0gbmV3IFN5bmNIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9TeW5jTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIGNvbnN0IGVuaGFuY2VkSW5kZXhIYW5kbGVyID0gbmV3IEVuaGFuY2VkSW5kZXhIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbmhhbmNlZEluZGV4TWFuYWdlcicpLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICAvLyBJc3N1ZSAjNDUyOiBDcmVhdGUgR2F0ZWtlZXBlciBwb2xpY3kgZW5naW5lIGluc3RhbmNlXG4gICAgLy8gSXNzdWUgIzY3OTogYWxsb3dFbGVtZW50UG9saWN5T3ZlcnJpZGVzIHdpcmVkIGZyb20gZW52IChET0xMSE9VU0VfR0FURUtFRVBFUl9FTEVNRU5UX1BPTElDWV9PVkVSUklERVMpXG4gICAgY29uc3QgZ2F0ZWtlZXBlciA9IG5ldyBHYXRla2VlcGVyKHVuZGVmaW5lZCwge1xuICAgICAgZW5hYmxlQXVkaXRMb2dnaW5nOiB0cnVlLFxuICAgICAgcmVxdWlyZURhbmdlclpvbmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgICBhbGxvd0VsZW1lbnRQb2xpY3lPdmVycmlkZXM6IGVudi5ET0xMSE9VU0VfR0FURUtFRVBFUl9FTEVNRU5UX1BPTElDWV9PVkVSUklERVMsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgTUNQQVFMSGFuZGxlciB3aXRoIGFsbCBhdmFpbGFibGUgaGFuZGxlcnMgZm9yIGZ1bGwgb3BlcmF0aW9uIGNvdmVyYWdlIChJc3N1ZSAjMjQxKVxuICAgIC8vIElzc3VlICMzMDE6IFBhc3MgQ29udGV4dFRyYWNrZXIgZm9yIHJlcXVlc3QgY29ycmVsYXRpb24gbWV0YWRhdGFcbiAgICAvLyBJc3N1ZSAjNDAyOiBQYXNzIERhbmdlclpvbmVFbmZvcmNlciB2aWEgSGFuZGxlclJlZ2lzdHJ5XG4gICAgLy8gQnVpbGQgaGFuZGxlciByZWdpc3RyeSwgdGhlbiBhZGQgbGF6eSBtZXRyaWNzU2luayBnZXR0ZXIuXG4gICAgLy8gTWVtb3J5TWV0cmljc1NpbmsgaXMgcmVnaXN0ZXJlZCBkdXJpbmcgZGVmZXJyZWRTZXR1cCAoYWZ0ZXIgTWV0cmljc01hbmFnZXIuc3RhcnQoKSksXG4gICAgLy8gc28gaXQgaXNuJ3QgYXZhaWxhYmxlIGF0IGhhbmRsZXIgY29uc3RydWN0aW9uIHRpbWUg4oCUIHJlc29sdmUgb24gZmlyc3QgYWNjZXNzIGluc3RlYWQuXG4gICAgY29uc3QgaGFuZGxlckRlcHM6IEhhbmRsZXJSZWdpc3RyeSA9IHtcbiAgICAgIGVsZW1lbnRDUlVEOiBlbGVtZW50Q3J1ZEhhbmRsZXIsXG4gICAgICBtZW1vcnlNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKSxcbiAgICAgIGFnZW50TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdBZ2VudE1hbmFnZXInKSxcbiAgICAgIHRlbXBsYXRlUmVuZGVyZXI6IHRoaXMucmVzb2x2ZSgnVGVtcGxhdGVSZW5kZXJlcicpLFxuICAgICAgZWxlbWVudFF1ZXJ5U2VydmljZTogdGhpcy5yZXNvbHZlKCdFbGVtZW50UXVlcnlTZXJ2aWNlJyksXG4gICAgICAvLyBNQ1AtQVFMIGV4dGVuc2lvbiBoYW5kbGVycyAoSXNzdWUgIzI0MSlcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyLFxuICAgICAgcG9ydGZvbGlvSGFuZGxlcixcbiAgICAgIGF1dGhIYW5kbGVyOiBnaXRodWJBdXRoSGFuZGxlcixcbiAgICAgIGNvbmZpZ0hhbmRsZXIsXG4gICAgICBlbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgIHBlcnNvbmFIYW5kbGVyLFxuICAgICAgc3luY0hhbmRsZXIsXG4gICAgICBidWlsZEluZm9TZXJ2aWNlOiB0aGlzLnJlc29sdmUoJ0J1aWxkSW5mb1NlcnZpY2UnKSxcbiAgICAgIGNhY2hlTWVtb3J5QnVkZ2V0OiB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICBnYXRla2VlcGVyLCAgLy8gSXNzdWUgIzQ1MjogUG9saWN5IGVuZ2luZSBmb3IgZW5mb3JjZSgpXG4gICAgICBkYW5nZXJab25lRW5mb3JjZXI6IHRoaXMucmVzb2x2ZSgnRGFuZ2VyWm9uZUVuZm9yY2VyJyksXG4gICAgICB2ZXJpZmljYXRpb25TdG9yZTogdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25TdG9yZScpLCAgLy8gSXNzdWUgIzE0MjogVmVyaWZpY2F0aW9uIGNvZGVzXG4gICAgICB2ZXJpZmljYXRpb25Ob3RpZmllcjogdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25Ob3RpZmllcicpLCAgLy8gSXNzdWUgIzUyMjogT1MgZGlhbG9nIGZvciBjb2Rlc1xuICAgICAgbWVtb3J5U2luazogdGhpcy5yZXNvbHZlPE1lbW9yeUxvZ1Npbms+KCdNZW1vcnlMb2dTaW5rJyksICAvLyBJc3N1ZSAjNTI4OiBDUlVERS1yb3V0ZWQgcXVlcnlfbG9nc1xuICAgICAgcGVyZm9ybWFuY2VNb25pdG9yOiB0aGlzLnJlc29sdmU8UGVyZm9ybWFuY2VNb25pdG9yPignUGVyZm9ybWFuY2VNb25pdG9yJyksXG4gICAgICBvcGVyYXRpb25NZXRyaWNzVHJhY2tlcjogdGhpcy5yZXNvbHZlPE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyPignT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInKSxcbiAgICAgIGdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcjogdGhpcy5yZXNvbHZlPEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcj4oJ0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcicpLFxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGhhbmRsZXJEZXBzLCAnbWV0cmljc1NpbmsnLCB7XG4gICAgICBnZXQ6ICgpID0+IHsgdHJ5IHsgcmV0dXJuIHRoaXMucmVzb2x2ZTxNZW1vcnlNZXRyaWNzU2luaz4oJ01lbW9yeU1ldHJpY3NTaW5rJyk7IH0gY2F0Y2ggeyByZXR1cm4gdW5kZWZpbmVkOyB9IH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IG1jcEFxbEhhbmRsZXIgPSBuZXcgTUNQQVFMSGFuZGxlcihoYW5kbGVyRGVwcywgdGhpcy5yZXNvbHZlPENvbnRleHRUcmFja2VyPignQ29udGV4dFRyYWNrZXInKSk7XG5cbiAgICAvLyBSZWdpc3RlciBtY3BBcWxIYW5kbGVyIGFzIGEgc2luZ2xldG9uIGZvciB0ZXN0IGFjY2Vzc1xuICAgIHRoaXMucmVnaXN0ZXIoJ21jcEFxbEhhbmRsZXInLCAoKSA9PiBtY3BBcWxIYW5kbGVyLCB7IHNpbmdsZXRvbjogdHJ1ZSB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdnYXRla2VlcGVyJywgKCkgPT4gZ2F0ZWtlZXBlciwgeyBzaW5nbGV0b246IHRydWUgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGVyc29uYUhhbmRsZXIsXG4gICAgICBlbGVtZW50Q3J1ZEhhbmRsZXIsXG4gICAgICBjb2xsZWN0aW9uSGFuZGxlcixcbiAgICAgIHBvcnRmb2xpb0hhbmRsZXIsXG4gICAgICBnaXRodWJBdXRoSGFuZGxlcixcbiAgICAgIGRpc3BsYXlDb25maWdIYW5kbGVyLFxuICAgICAgaWRlbnRpdHlIYW5kbGVyLFxuICAgICAgY29uZmlnSGFuZGxlcixcbiAgICAgIHN5bmNIYW5kbGVyLFxuICAgICAgdG9vbFJlZ2lzdHJ5OiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUb29sUmVnaXN0cnksIC8vIE5vIHRvb2wgcmVnaXN0cnkgaW4gYm9vdHN0cmFwLW9ubHkgbW9kZVxuICAgICAgZW5oYW5jZWRJbmRleEhhbmRsZXIsXG4gICAgICBtY3BBcWxIYW5kbGVyLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFsbCBoYW5kbGVycyB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGFuZCByZWdpc3RlciBNQ1AgdG9vbHMuXG4gICAqIEBwYXJhbSBzZXJ2ZXIgLSBNQ1AgU2VydmVyIGluc3RhbmNlIGZvciB0b29sIHJlZ2lzdHJhdGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUhhbmRsZXJzKHNlcnZlcjogU2VydmVyKTogUHJvbWlzZTxIYW5kbGVyQnVuZGxlPiB7XG4gICAgY29uc3QgYnVuZGxlID0gYXdhaXQgdGhpcy5ib290c3RyYXBIYW5kbGVycygpO1xuXG4gICAgY29uc3QgdG9vbFJlZ2lzdHJ5ID0gbmV3IFRvb2xSZWdpc3RyeShzZXJ2ZXIpO1xuXG4gICAgLy8gUmVnaXN0ZXIgdG9vbHMgYmFzZWQgb24gTUNQX0lOVEVSRkFDRV9NT0RFIChJc3N1ZSAjMjM3KVxuICAgIC8vIC0gJ2Rpc2NyZXRlJzogUmVnaXN0ZXIgaW5kaXZpZHVhbCBkaXNjcmV0ZSB0b29scyAofjQwIHRvb2xzKVxuICAgIC8vIC0gJ21jcGFxbCc6IFJlZ2lzdGVyIGNvbnNvbGlkYXRlZCBNQ1AtQVFMIGludGVyZmFjZSBvbmx5ICh+NCBvciAxIHRvb2xzKVxuICAgIC8vIFRva2VuIGNvdW50cyBhcmUgbG9nZ2VkIGR5bmFtaWNhbGx5IGF0IHN0YXJ0dXAgdmlhIGxvZ1Rvb2xUb2tlblN0YXRzKClcbiAgICBjb25zdCBpbnRlcmZhY2VNb2RlID0gZW52Lk1DUF9JTlRFUkZBQ0VfTU9ERTtcbiAgICBsb2dnZXIuaW5mbyhgTUNQIEludGVyZmFjZSBNb2RlOiAke2ludGVyZmFjZU1vZGV9YCk7XG5cbiAgICBpZiAoaW50ZXJmYWNlTW9kZSA9PT0gJ2Rpc2NyZXRlJykge1xuICAgICAgLy8gRGlzY3JldGUgbW9kZTogUmVnaXN0ZXIgYWxsIGluZGl2aWR1YWwgdG9vbHNcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlclBlcnNvbmFUb29scyhidW5kbGUucGVyc29uYUhhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyRWxlbWVudFRvb2xzKGJ1bmRsZS5lbGVtZW50Q3J1ZEhhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyQ29sbGVjdGlvblRvb2xzKGJ1bmRsZS5jb2xsZWN0aW9uSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJQb3J0Zm9saW9Ub29scyhidW5kbGUucG9ydGZvbGlvSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJBdXRoVG9vbHMoYnVuZGxlLmdpdGh1YkF1dGhIYW5kbGVyKTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlckNvbmZpZ1Rvb2xzKHtcbiAgICAgICAgaGFuZGxlQ29uZmlnT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBidW5kbGUuY29uZmlnSGFuZGxlci5oYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICAgIGhhbmRsZVN5bmNPcGVyYXRpb246IChvcHRpb25zKSA9PlxuICAgICAgICAgIGJ1bmRsZS5zeW5jSGFuZGxlci5oYW5kbGVTeW5jT3BlcmF0aW9uKG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJFbmhhbmNlZEluZGV4VG9vbHMoXG4gICAgICAgIGJ1bmRsZS5lbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgICAgdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpLmdldENvbmZpZygpXG4gICAgICApO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyQnVpbGRJbmZvVG9vbHModGhpcy5yZXNvbHZlKCdCdWlsZEluZm9TZXJ2aWNlJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNQ1AtQVFMIG1vZGU6IFJlZ2lzdGVyIG9ubHkgTUNQLUFRTCB0b29sc1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyTUNQQVFMVG9vbHMoYnVuZGxlLm1jcEFxbEhhbmRsZXIpO1xuICAgIH1cblxuICAgIC8vIExvZyB0b2tlbiBzdGF0aXN0aWNzIChJc3N1ZSAjMjM3IGVuaGFuY2VtZW50KVxuICAgIHRoaXMubG9nVG9vbFRva2VuU3RhdHModG9vbFJlZ2lzdHJ5LCBpbnRlcmZhY2VNb2RlLCBidW5kbGUubWNwQXFsSGFuZGxlciwge1xuICAgICAgcGVyc29uYUhhbmRsZXI6IGJ1bmRsZS5wZXJzb25hSGFuZGxlcixcbiAgICAgIGVsZW1lbnRDcnVkSGFuZGxlcjogYnVuZGxlLmVsZW1lbnRDcnVkSGFuZGxlcixcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyOiBidW5kbGUuY29sbGVjdGlvbkhhbmRsZXIsXG4gICAgICBwb3J0Zm9saW9IYW5kbGVyOiBidW5kbGUucG9ydGZvbGlvSGFuZGxlcixcbiAgICAgIGdpdGh1YkF1dGhIYW5kbGVyOiBidW5kbGUuZ2l0aHViQXV0aEhhbmRsZXIsXG4gICAgICBjb25maWdIYW5kbGVyOiBidW5kbGUuY29uZmlnSGFuZGxlcixcbiAgICAgIHN5bmNIYW5kbGVyOiBidW5kbGUuc3luY0hhbmRsZXIsXG4gICAgICBlbmhhbmNlZEluZGV4SGFuZGxlcjogYnVuZGxlLmVuaGFuY2VkSW5kZXhIYW5kbGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvbHZlPFNlcnZlclNldHVwPignU2VydmVyU2V0dXAnKS5zZXR1cFNlcnZlcihzZXJ2ZXIsIHRvb2xSZWdpc3RyeSwgYnVuZGxlLmVsZW1lbnRDcnVkSGFuZGxlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYnVuZGxlLFxuICAgICAgdG9vbFJlZ2lzdHJ5LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTG9nIHRvb2wgdG9rZW4gc3RhdGlzdGljcyBmb3IgbW9uaXRvcmluZyBhbmQgZG9jdW1lbnRhdGlvbi5cbiAgICogU2hvd3MgY3VycmVudCBtb2RlIHRva2VuIGNvdW50LCBhbHRlcm5hdGl2ZSBtb2RlIGNvbXBhcmlzb24sIGFuZCBzYXZpbmdzLlxuICAgKlxuICAgKiBUaGlzIGlzIGltcG9ydGFudCBmb3I6XG4gICAqIDEuIERvY3VtZW50aW5nIGFjdHVhbCB0b2tlbiBzYXZpbmdzIGFjaGlldmVkXG4gICAqIDIuIE1vbml0b3JpbmcgY29udGV4dCB3aW5kb3cgdXNhZ2VcbiAgICogMy4gU3VwcG9ydGluZyBmdXR1cmUgTUNQLUFRTCBhZGFwdGVyIGRldmVsb3BtZW50XG4gICAqXG4gICAqIElzc3VlICMyMzcgZW5oYW5jZW1lbnRcbiAgICovXG4gIHByaXZhdGUgbG9nVG9vbFRva2VuU3RhdHMoXG4gICAgdG9vbFJlZ2lzdHJ5OiBUb29sUmVnaXN0cnksXG4gICAgaW50ZXJmYWNlTW9kZTogJ2Rpc2NyZXRlJyB8ICdtY3BhcWwnLFxuICAgIG1jcEFxbEhhbmRsZXI6IE1DUEFRTEhhbmRsZXIsXG4gICAgZGlzY3JldGVIYW5kbGVyczoge1xuICAgICAgcGVyc29uYUhhbmRsZXI6IFBlcnNvbmFIYW5kbGVyO1xuICAgICAgZWxlbWVudENydWRIYW5kbGVyOiBFbGVtZW50Q1JVREhhbmRsZXI7XG4gICAgICBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG4gICAgICBwb3J0Zm9saW9IYW5kbGVyOiBQb3J0Zm9saW9IYW5kbGVyO1xuICAgICAgZ2l0aHViQXV0aEhhbmRsZXI6IEdpdEh1YkF1dGhIYW5kbGVyO1xuICAgICAgY29uZmlnSGFuZGxlcjogQ29uZmlnSGFuZGxlcjtcbiAgICAgIHN5bmNIYW5kbGVyOiBTeW5jSGFuZGxlcjtcbiAgICAgIGVuaGFuY2VkSW5kZXhIYW5kbGVyOiBFbmhhbmNlZEluZGV4SGFuZGxlcjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRUb2tlbnMgPSB0b29sUmVnaXN0cnkuZ2V0VG9vbFRva2VuRXN0aW1hdGUoKTtcbiAgICBjb25zdCBjdXJyZW50VG9vbENvdW50ID0gdG9vbFJlZ2lzdHJ5LmdldFRvb2xDb3VudCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFsdGVybmF0aXZlIG1vZGUgdG9rZW5zIGZvciBjb21wYXJpc29uXG4gICAgbGV0IGFsdGVybmF0aXZlVG9rZW5zOiBudW1iZXI7XG4gICAgbGV0IGFsdGVybmF0aXZlVG9vbENvdW50OiBudW1iZXI7XG5cbiAgICBpZiAoaW50ZXJmYWNlTW9kZSA9PT0gJ2Rpc2NyZXRlJykge1xuICAgICAgLy8gQ3VycmVudCBpcyBkaXNjcmV0ZSwgY2FsY3VsYXRlIHdoYXQgbWNwYXFsIHdvdWxkIGJlXG4gICAgICBjb25zdCB0ZW1wUmVnaXN0cnkgPSBuZXcgVG9vbFJlZ2lzdHJ5KHt9IGFzIFNlcnZlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJNQ1BBUUxUb29scyhtY3BBcWxIYW5kbGVyKTtcbiAgICAgIGFsdGVybmF0aXZlVG9rZW5zID0gdGVtcFJlZ2lzdHJ5LmdldFRvb2xUb2tlbkVzdGltYXRlKCk7XG4gICAgICBhbHRlcm5hdGl2ZVRvb2xDb3VudCA9IHRlbXBSZWdpc3RyeS5nZXRUb29sQ291bnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3VycmVudCBpcyBtY3BhcWwsIGNhbGN1bGF0ZSB3aGF0IGRpc2NyZXRlIHdvdWxkIGJlXG4gICAgICBjb25zdCB0ZW1wUmVnaXN0cnkgPSBuZXcgVG9vbFJlZ2lzdHJ5KHt9IGFzIFNlcnZlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJQZXJzb25hVG9vbHMoZGlzY3JldGVIYW5kbGVycy5wZXJzb25hSGFuZGxlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJFbGVtZW50VG9vbHMoZGlzY3JldGVIYW5kbGVycy5lbGVtZW50Q3J1ZEhhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQ29sbGVjdGlvblRvb2xzKGRpc2NyZXRlSGFuZGxlcnMuY29sbGVjdGlvbkhhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyUG9ydGZvbGlvVG9vbHMoZGlzY3JldGVIYW5kbGVycy5wb3J0Zm9saW9IYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckF1dGhUb29scyhkaXNjcmV0ZUhhbmRsZXJzLmdpdGh1YkF1dGhIYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckNvbmZpZ1Rvb2xzKHtcbiAgICAgICAgaGFuZGxlQ29uZmlnT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBkaXNjcmV0ZUhhbmRsZXJzLmNvbmZpZ0hhbmRsZXIuaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnMpLFxuICAgICAgICBoYW5kbGVTeW5jT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBkaXNjcmV0ZUhhbmRsZXJzLnN5bmNIYW5kbGVyLmhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckVuaGFuY2VkSW5kZXhUb29scyhcbiAgICAgICAgZGlzY3JldGVIYW5kbGVycy5lbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgICAgdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpLmdldENvbmZpZygpXG4gICAgICApO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQnVpbGRJbmZvVG9vbHModGhpcy5yZXNvbHZlKCdCdWlsZEluZm9TZXJ2aWNlJykpO1xuICAgICAgYWx0ZXJuYXRpdmVUb2tlbnMgPSB0ZW1wUmVnaXN0cnkuZ2V0VG9vbFRva2VuRXN0aW1hdGUoKTtcbiAgICAgIGFsdGVybmF0aXZlVG9vbENvdW50ID0gdGVtcFJlZ2lzdHJ5LmdldFRvb2xDb3VudCgpO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBzYXZpbmdzIChwb3NpdGl2ZSA9IGN1cnJlbnQgbW9kZSBzYXZlcyB0b2tlbnMpXG4gICAgY29uc3QgdG9rZW5EaWZmID0gYWx0ZXJuYXRpdmVUb2tlbnMgLSBjdXJyZW50VG9rZW5zO1xuICAgIGNvbnN0IHNhdmluZ3NQZXJjZW50ID0gYWx0ZXJuYXRpdmVUb2tlbnMgPiAwXG4gICAgICA/ICgodG9rZW5EaWZmIC8gYWx0ZXJuYXRpdmVUb2tlbnMpICogMTAwKS50b0ZpeGVkKDEpXG4gICAgICA6ICcwJztcblxuICAgIC8vIExvZyB0aGUgY29tcGFyaXNvblxuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFRvb2wgUmVnaXN0cmF0aW9uIENvbXBsZXRlOiAke2N1cnJlbnRUb29sQ291bnR9IHRvb2xzLCB+JHtjdXJyZW50VG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IHRva2Vuc2BcbiAgICApO1xuXG4gICAgaWYgKGludGVyZmFjZU1vZGUgPT09ICdtY3BhcWwnKSB7XG4gICAgICAvLyBIaWdobGlnaHQgc2F2aW5ncyB3aGVuIHVzaW5nIG1jcGFxbFxuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBUb2tlbiBTYXZpbmdzOiAke3Rva2VuRGlmZi50b0xvY2FsZVN0cmluZygpfSB0b2tlbnMgc2F2ZWQgKCR7c2F2aW5nc1BlcmNlbnR9JSkgdnMgZGlzY3JldGUgbW9kZSAoJHthbHRlcm5hdGl2ZVRvb2xDb3VudH0gdG9vbHMsIH4ke2FsdGVybmF0aXZlVG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IHRva2VucylgXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBkaXNjcmV0ZSBtb2RlLCBzaG93IHdoYXQgbWNwYXFsIHdvdWxkIHNhdmVcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgQWx0ZXJuYXRpdmU6IG1jcGFxbCBtb2RlIHdvdWxkIHVzZSAke2FsdGVybmF0aXZlVG9vbENvdW50fSB0b29scywgfiR7YWx0ZXJuYXRpdmVUb2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gdG9rZW5zICgke01hdGguYWJzKE51bWJlcihzYXZpbmdzUGVyY2VudCkpfSUgJHt0b2tlbkRpZmYgPCAwID8gJ21vcmUnIDogJ2xlc3MnfSlgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaXJlIGFsbCBtZXRyaWMgY29sbGVjdG9ycyBpbnRvIHRoZSBNZXRyaWNzTWFuYWdlci5cbiAgICogTWlycm9ycyB3aXJlTG9nSG9va3MoKSDigJQga2VlcHMgY29sbGVjdG9yIHJlZ2lzdHJhdGlvbiBvdXQgb2YgdGhlIGNvbnN0cnVjdG9yLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlTWV0cmljc0NvbGxlY3RvcnMobWV0cmljc01hbmFnZXI6IE1ldHJpY3NNYW5hZ2VyKTogdm9pZCB7XG4gICAgLy8gUGVyZm9ybWFuY2VNb25pdG9yIChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9uaXRvciA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3V0aWxzL1BlcmZvcm1hbmNlTW9uaXRvci5qcycpLlBlcmZvcm1hbmNlTW9uaXRvcj4oJ1BlcmZvcm1hbmNlTW9uaXRvcicpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IFBlcmZvcm1hbmNlTW9uaXRvckNvbGxlY3Rvcihtb25pdG9yKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIExSVUNhY2hlIGluc3RhbmNlcyDigJQgQVBJIGNhY2hlICsgYWxsIGVsZW1lbnQgbWFuYWdlciBjYWNoZXNcbiAgICBjb25zdCBjYWNoZXMgPSB0aGlzLmNvbGxlY3RMcnVDYWNoZXNGb3JNZXRyaWNzKCk7XG4gICAgaWYgKGNhY2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgTFJVQ2FjaGVDb2xsZWN0b3IoY2FjaGVzKSk7XG4gICAgfVxuXG4gICAgLy8gU2VjdXJpdHlNb25pdG9yIChzdGF0aWMpXG4gICAgdHJ5IHtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBTZWN1cml0eU1vbml0b3JDb2xsZWN0b3IoKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCBhdmFpbGFibGUgKi8gfVxuXG4gICAgLy8gU2VjdXJpdHlUZWxlbWV0cnkgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnkgPSB0aGlzLnJlc29sdmU8aW1wb3J0KCcuLi9zZWN1cml0eS90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanMnKS5TZWN1cml0eVRlbGVtZXRyeT4oJ1NlY3VyaXR5VGVsZW1ldHJ5Jyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgU2VjdXJpdHlUZWxlbWV0cnlDb2xsZWN0b3IodGVsZW1ldHJ5KSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIEZpbGVMb2NrTWFuYWdlciAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2tNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJykuRmlsZUxvY2tNYW5hZ2VyPignRmlsZUxvY2tNYW5hZ2VyJyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgRmlsZUxvY2tNYW5hZ2VyQ29sbGVjdG9yKGxvY2tNYW5hZ2VyKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIERlZmF1bHRFbGVtZW50UHJvdmlkZXIgKHN0YXRpYylcbiAgICB0cnkge1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IERlZmF1bHRFbGVtZW50UHJvdmlkZXJDb2xsZWN0b3IoKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCBhdmFpbGFibGUgKi8gfVxuXG4gICAgLy8gVHJpZ2dlck1ldHJpY3NUcmFja2VyIChpbnN0YW5jZSDigJQgY3JlYXRlZCBpbnNpZGUgRW5oYW5jZWRJbmRleE1hbmFnZXIgZmFjdG9yeSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5oYW5jZWRJbmRleCA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3BvcnRmb2xpby9FbmhhbmNlZEluZGV4TWFuYWdlci5qcycpLkVuaGFuY2VkSW5kZXhNYW5hZ2VyPignRW5oYW5jZWRJbmRleE1hbmFnZXInKTtcbiAgICAgIC8vIEVuaGFuY2VkSW5kZXhNYW5hZ2VyIGV4cG9zZXMgdHJhY2tlciB2aWEgcHVibGljIGdldHRlciBpZiBhdmFpbGFibGVcbiAgICAgIGlmICgndHJpZ2dlck1ldHJpY3NUcmFja2VyJyBpbiBlbmhhbmNlZEluZGV4KSB7XG4gICAgICAgIGNvbnN0IHRyYWNrZXIgPSAoZW5oYW5jZWRJbmRleCBhcyBhbnkpLnRyaWdnZXJNZXRyaWNzVHJhY2tlcjtcbiAgICAgICAgaWYgKHRyYWNrZXIpIHtcbiAgICAgICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgVHJpZ2dlck1ldHJpY3NUcmFja2VyQ29sbGVjdG9yKHRyYWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBPcGVyYXRpb25hbFRlbGVtZXRyeSAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9wVGVsZW1ldHJ5ID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vdGVsZW1ldHJ5L09wZXJhdGlvbmFsVGVsZW1ldHJ5LmpzJykuT3BlcmF0aW9uYWxUZWxlbWV0cnk+KCdPcGVyYXRpb25hbFRlbGVtZXRyeScpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IE9wZXJhdGlvbmFsVGVsZW1ldHJ5Q29sbGVjdG9yKG9wVGVsZW1ldHJ5KSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyIChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3BUcmFja2VyID0gdGhpcy5yZXNvbHZlPE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyPignT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBPcGVyYXRpb25NZXRyaWNzQ29sbGVjdG9yKG9wVHJhY2tlcikpO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBHYXRla2VlcGVyTWV0cmljc1RyYWNrZXIgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBna1RyYWNrZXIgPSB0aGlzLnJlc29sdmU8R2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyPignR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyJyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgR2F0ZWtlZXBlck1ldHJpY3NDb2xsZWN0b3IoZ2tUcmFja2VyKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdExydUNhY2hlc0Zvck1ldHJpY3MoKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGluc3RhbmNlOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuTFJVQ2FjaGU8dW5rbm93bj4gfT4ge1xuICAgIGNvbnN0IGNhY2hlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGluc3RhbmNlOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuTFJVQ2FjaGU8dW5rbm93bj4gfT4gPSBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBpQ2FjaGUgPSB0aGlzLnJlc29sdmU8eyBnZXRTdGF0cygpOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuQ2FjaGVTdGF0cyB9PignQVBJQ2FjaGUnKTtcbiAgICAgIGNhY2hlcy5wdXNoKHsgbmFtZTogJ0FQSUNhY2hlJywgaW5zdGFuY2U6IGFwaUNhY2hlIGFzIGFueSB9KTtcbiAgICB9IGNhdGNoIHsgLyogbm90IGF2YWlsYWJsZSAqLyB9XG5cbiAgICBjb25zdCBtYW5hZ2VyTmFtZXMgPSBbXG4gICAgICAnUGVyc29uYU1hbmFnZXInLCAnU2tpbGxNYW5hZ2VyJywgJ0FnZW50TWFuYWdlcicsXG4gICAgICAnTWVtb3J5TWFuYWdlcicsICdFbnNlbWJsZU1hbmFnZXInLCAnVGVtcGxhdGVNYW5hZ2VyJyxcbiAgICBdIGFzIGNvbnN0O1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBtYW5hZ2VyTmFtZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1nciA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL2VsZW1lbnRzL2Jhc2UvQmFzZUVsZW1lbnRNYW5hZ2VyLmpzJykuQmFzZUVsZW1lbnRNYW5hZ2VyPGFueT4+KG5hbWUpO1xuICAgICAgICBjYWNoZXMucHVzaCguLi5tZ3IuZ2V0TWV0cmljc0NhY2hlcygpKTtcbiAgICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENsb3NlIHRoZSBIVFRQIHNlcnZlciBmaXJzdCBzbyB0aGUgcG9ydCBpcyBmcmVlZCBpbW1lZGlhdGVseSAoIzE4NTYpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgc2h1dGRvd25XZWJTZXJ2ZXIgfSA9IGF3YWl0IGltcG9ydCgnLi4vd2ViL3NlcnZlci5qcycpO1xuICAgICAgc2h1dGRvd25XZWJTZXJ2ZXIoKTtcbiAgICB9IGNhdGNoIHsgLyogd2ViIHNlcnZlciBub3Qgc3RhcnRlZCAqLyB9XG5cbiAgICAvLyBDbG9zZSBNZXRyaWNzTWFuYWdlciBiZWZvcmUgZ2VuZXJhbCBkaXNwb3NhbCAoZmx1c2ggZmluYWwgc25hcHNob3QpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldHJpY3NNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPE1ldHJpY3NNYW5hZ2VyPignTWV0cmljc01hbmFnZXInKTtcbiAgICAgIGF3YWl0IG1ldHJpY3NNYW5hZ2VyLmNsb3NlKCk7XG4gICAgfSBjYXRjaCB7IC8qIG1ldHJpY3Mgbm90IGVuYWJsZWQgb3Igbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gQ2xlYW4gdXAgbG9nIGhvb2tzIGJlZm9yZSBkaXNwb3Npbmcgc2VydmljZXNcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xlYW51cHMgPSB0aGlzLnJlc29sdmU8KCgpID0+IHZvaWQpW10+KCdfbG9nSG9va0NsZWFudXBzJyk7XG4gICAgICBjbGVhbnVwcy5mb3JFYWNoKGZuID0+IGZuKCkpO1xuICAgIH0gY2F0Y2ggeyAvKiBob29rcyBub3QgeWV0IHdpcmVkICovIH1cblxuICAgIGNvbnN0IGRpc3Bvc2FsUHJvbWlzZXMgPSB0aGlzLmJ1aWxkRGlzcG9zYWxQcm9taXNlcygpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoZGlzcG9zYWxQcm9taXNlcy5tYXAoZCA9PiBkLnByb21pc2UpKTtcbiAgICB0aGlzLnJlcG9ydERpc3Bvc2FsRmFpbHVyZXMoZGlzcG9zYWxQcm9taXNlcywgcmVzdWx0cyk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGlzcG9zYWxQcm9taXNlcygpOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgcHJvbWlzZTogUHJvbWlzZTx2b2lkPiB9PiB7XG4gICAgY29uc3QgcHJvbWlzZXM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwcm9taXNlOiBQcm9taXNlPHZvaWQ+IH0+ID0gW107XG4gICAgZm9yIChjb25zdCBbbmFtZSwgc2VydmljZV0gb2YgdGhpcy5zZXJ2aWNlcykge1xuICAgICAgaWYgKCFzZXJ2aWNlLmluc3RhbmNlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gc2VydmljZS5pbnN0YW5jZSBhcyBhbnk7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaCh7IG5hbWUsIHByb21pc2U6IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gaW5zdGFuY2UuZGlzcG9zZSgpKSB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLmNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaCh7IG5hbWUsIHByb21pc2U6IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gaW5zdGFuY2UuY2xlYW51cCgpKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb21pc2VzO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvcnREaXNwb3NhbEZhaWx1cmVzKFxuICAgIGRpc3Bvc2FsUHJvbWlzZXM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwcm9taXNlOiBQcm9taXNlPHZvaWQ+IH0+LFxuICAgIHJlc3VsdHM6IFByb21pc2VTZXR0bGVkUmVzdWx0PHZvaWQ+W10sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2luZGV4LCByZXN1bHRdIG9mIHJlc3VsdHMuZW50cmllcygpKSB7XG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IGRpc3Bvc2FsUHJvbWlzZXNbaW5kZXhdLm5hbWU7XG4gICAgICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVzdWx0LnJlYXNvbiA6IG5ldyBFcnJvcihTdHJpbmcocmVzdWx0LnJlYXNvbikpO1xuICAgICAgICBmYWlsdXJlcy5wdXNoKHNlcnZpY2VOYW1lKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBkaXNwb3NlIHNlcnZpY2UgJyR7c2VydmljZU5hbWV9J2AsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmYWlsdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIud2FybihgQ29udGFpbmVyIGRpc3Bvc2FsIGNvbXBsZXRlZCB3aXRoICR7ZmFpbHVyZXMubGVuZ3RofSBmYWlsdXJlKHMpIG91dCBvZiAke2Rpc3Bvc2FsUHJvbWlzZXMubGVuZ3RofSBzZXJ2aWNlc2ApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29sbGVjdGlvbkNhY2hlID0gdGhpcy5yZXNvbHZlPENvbGxlY3Rpb25DYWNoZT4oJ0NvbGxlY3Rpb25DYWNoZScpO1xuICAgICAgY29uc3QgaXNDYWNoZVZhbGlkID0gYXdhaXQgY29sbGVjdGlvbkNhY2hlLmlzQ2FjaGVWYWxpZCgpO1xuICAgICAgaWYgKCFpc0NhY2hlVmFsaWQpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJJbml0aWFsaXppbmcgY29sbGVjdGlvbiBjYWNoZSB3aXRoIHNlZWQgZGF0YS4uLlwiKTtcbiAgICAgICAgY29uc3QgeyBDb2xsZWN0aW9uU2VlZGVyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWVkZXIuanNcIik7XG4gICAgICAgIGNvbnN0IHNlZWREYXRhID0gQ29sbGVjdGlvblNlZWRlci5nZXRTZWVkRGF0YSgpO1xuICAgICAgICBhd2FpdCBjb2xsZWN0aW9uQ2FjaGUuc2F2ZUNhY2hlKHNlZWREYXRhKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYENvbGxlY3Rpb24gY2FjaGUgaW5pdGlhbGl6ZWQgd2l0aCAke3NlZWREYXRhLmxlbmd0aH0gaXRlbXNgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgY29sbGVjdGlvbkNhY2hlLmdldENhY2hlU3RhdHMoKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBDb2xsZWN0aW9uIGNhY2hlIGFscmVhZHkgdmFsaWQgd2l0aCAke3N0YXRzLml0ZW1Db3VudH0gaXRlbXNgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKFwiRG9sbGhvdXNlQ29udGFpbmVyLmluaXRpYWxpemVDb2xsZWN0aW9uQ2FjaGVcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
1347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpL0NvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLElBQUksT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxnQkFBZ0IsR0FDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBd0IsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMvRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsV0FBVyxFQUNYLG1CQUFtQixHQUNwQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLCtCQUErQixFQUMvQiw4QkFBOEIsRUFDOUIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUN6QiwwQkFBMEIsR0FDM0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQWtDbEYsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDNUMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFDMUMscUVBQXFFO0lBQzlELHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUVyQztRQUNFLHdEQUF3RDtRQUN4RCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7WUFDL0IsSUFBSSxFQUFFLDBCQUEwQjtZQUNoQyxRQUFRLEVBQUUsS0FBSztZQUNmLE1BQU0sRUFBRSxnQ0FBZ0M7WUFDeEMsT0FBTyxFQUFFLDZDQUE2QztTQUN2RCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxRQUFRLENBQUksSUFBWSxFQUFFLE9BQWdCLEVBQUUsVUFBbUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1FBQ3ZHLGlEQUFpRDtRQUNqRCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7WUFDL0IsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixRQUFRLEVBQUUsS0FBSztZQUNmLE1BQU0sRUFBRSw2QkFBNkI7WUFDckMsT0FBTyxFQUFFLHVCQUF1QixJQUFJLEVBQUU7WUFDdEMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7U0FDNUUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ3RCLE9BQU8sRUFBRSxPQUF3QjtZQUNqQyxRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUk7U0FDckMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSSxPQUFPLENBQUksSUFBWTtRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYix3REFBd0Q7WUFDeEQsZUFBZSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQixJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsTUFBTSxFQUFFLDRCQUE0QjtnQkFDcEMsT0FBTyxFQUFFLDJCQUEyQixJQUFJLEVBQUU7Z0JBQzFDLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7YUFDdEMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JDLG9EQUFvRDtnQkFDcEQsZUFBZSxDQUFDLGdCQUFnQixDQUFDO29CQUMvQixJQUFJLEVBQUUsaUJBQWlCO29CQUN2QixRQUFRLEVBQUUsS0FBSztvQkFDZixNQUFNLEVBQUUsNEJBQTRCO29CQUNwQyxPQUFPLEVBQUUsMkJBQTJCLElBQUksRUFBRTtvQkFDMUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtpQkFDdEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDLFFBQWEsQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFPLENBQUM7SUFDaEMsQ0FBQztJQUVPLGdCQUFnQjtRQUd0Qiw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRXhELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUM7WUFDN0QsZ0JBQWdCLEVBQUUsa0NBQWtDLEVBQUU7U0FDdkQsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFvQixDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1lBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQzFFLDhFQUE4RTtZQUM5RSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7WUFDeEQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUM3QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtZQUNwQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQW1CLGtCQUFrQixDQUFDLENBQUM7WUFDNUUsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RSxvSEFBb0g7WUFDcEgsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFpQixnQkFBZ0IsQ0FBQyxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDaEgsT0FBTyxJQUFJLGVBQWUsQ0FDeEIsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixTQUFTLEVBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUN0QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FDN0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUM3QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksc0JBQXNCLENBQUM7WUFDdkUsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7U0FDdEQsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2SyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUNyQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhGLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsU0FBUyxDQUNWLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxjQUFjLENBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUNuQztZQUNFLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ3ZELGlCQUFpQixFQUFFLElBQUk7WUFDdkIsMEJBQTBCLEVBQUUsSUFBSTtZQUNoQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1lBQy9DLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUM3QyxDQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxxQkFBcUIsQ0FDcEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUMvQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksdUJBQXVCLENBQ3hFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FDdkMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4SyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN6RixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELG1CQUFtQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUM7WUFDeEQsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7U0FDdEQsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQ2xFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQzVCLDBCQUEwQixFQUFFLENBQzdCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxzQkFBc0IsQ0FDdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUNyQyxDQUFDLENBQUM7UUFFSCxXQUFXO1FBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksa0JBQWtCLENBQzlELElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxFQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQ2hDLENBQUMsQ0FBQztRQUVILFVBQVU7UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7WUFDL0IsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFdkMsdUJBQXVCO1lBQ3ZCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEtBQUssT0FBTztnQkFDNUMsQ0FBQyxDQUFDLElBQUksY0FBYyxFQUFFO2dCQUN0QixDQUFDLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDO2dCQUMvQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQ3JCLFNBQVM7Z0JBQ1QsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUMvQixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQ25DLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxxQkFBcUI7Z0JBQ25ELGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtnQkFDdkMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLG1CQUFtQjthQUNoRCxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRTdCLHlCQUF5QjtZQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLGFBQWEsQ0FBQztnQkFDbkMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7Z0JBQ3JDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0I7Z0JBQy9DLFlBQVksRUFBRSxNQUFNLENBQUMsa0JBQWtCO2dCQUN2QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsdUJBQXVCO2FBQ2xELENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFakQsdURBQXVEO1lBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ1YsRUFBRSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDbkMsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLEtBQUssRUFBRSxNQUFNO2dCQUNiLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixPQUFPLEVBQUUsaUJBQWlCLE9BQU8sV0FBVztnQkFDNUMsSUFBSSxFQUFFO29CQUNKLE9BQU8sRUFBRSxPQUFPO29CQUNoQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0JBQ3pCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztvQkFDM0IsT0FBTyxFQUFFLEdBQUcsQ0FBQyxxQkFBcUI7d0JBQ2hDLENBQUMsQ0FBQyw4QkFBOEIsR0FBRyxDQUFDLDBCQUEwQixFQUFFO3dCQUNoRSxDQUFDLENBQUMsVUFBVTtpQkFDZjthQUNGLENBQUMsQ0FBQztZQUVILE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgscUJBQXFCO1FBQ3JCLDBFQUEwRTtRQUMxRSwwRUFBMEU7UUFDMUUsc0NBQXNDO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7Z0JBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDMUQsT0FBTyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxZQUFZO1FBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUNsRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUVILHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQztZQUNFLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQW1CLGtCQUFrQixDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsVUFBVSxDQUFDO1lBQ3JHLG9CQUFvQixFQUFFLGdDQUFnQyxFQUFFO1lBQ3hELE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxlQUFlO1NBQzlDLENBQ0YsQ0FBQyxDQUFDO1FBRUgsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztZQUNqRSwwQkFBMEIsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDckMsSUFBSSxDQUFDO29CQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQXFCLG9CQUFvQixDQUFDLENBQUM7b0JBQ3ZFLE9BQU8sT0FBTyxDQUFDLDBCQUEwQixFQUFFLENBQUM7Z0JBQzlDLENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUM7WUFDSCxDQUFDO1lBQ0QsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsZUFBZTtTQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVKLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQzlCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxlQUFlLENBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUM5QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQW1CLGtCQUFrQixDQUFDLENBQUMsVUFBVSxFQUFFLEVBQy9ELElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQzlCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBYSxDQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FDOUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQzlCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDM0Usa0VBQWtFO1FBQ2xFLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztRQUN0RixnR0FBZ0c7UUFDaEcsWUFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUMsV0FBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzNGLDJGQUEyRjtRQUMzRixZQUFZLENBQUMsNkJBQTZCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDckYsK0ZBQStGO1FBQy9GLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUVuRiw2REFBNkQ7UUFDN0QsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksbUJBQW1CLENBQ2hFLElBQUksQ0FBQyxPQUFPLENBQW9CLG1CQUFtQixDQUFDLEVBQ3BELElBQUksQ0FBQyxPQUFPLENBQWdCLGVBQWUsQ0FBQyxFQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFjLGFBQWEsQ0FBQyxDQUN6QyxDQUFDLENBQUM7UUFFSCxhQUFhO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDZCQUE2QixFQUFFLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO1FBRTFGLG9CQUFvQjtRQUNwQiwyRkFBMkY7UUFDM0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixDQUM5RCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUNILHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZUFBZSxDQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUNILDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksWUFBWSxDQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FDL0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQ2pDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FDaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUM5QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBRXJGLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtZQUNwQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQXFCLG9CQUFvQixDQUFDLENBQUM7WUFDbEYsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUMsT0FBTyxJQUFJLGlCQUFpQixDQUFDO2dCQUN6QixXQUFXLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLEdBQUcsSUFBSTtnQkFDdEQsY0FBYyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYztnQkFDekMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWTtnQkFDckMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7YUFDbEQsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7WUFDckMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQztnQkFDMUIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUI7Z0JBQ3JELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCO2dCQUNuRCxlQUFlLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlO2FBQ2hELENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7WUFDdEMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQztnQkFDM0IsTUFBTSxFQUFFO29CQUNKLGFBQWEsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQjtvQkFDckQsbUJBQW1CLEVBQUUsSUFBSTtpQkFDNUI7Z0JBQ0Qsa0JBQWtCO2dCQUNsQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2dCQUN0RCxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUNoRCxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckwsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDJCQUEyQixDQUN6RSxJQUFJLHdCQUF3QixFQUFFLEVBQzlCLElBQUksMkJBQTJCLENBQUM7WUFDOUIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDN0MsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztTQUN6RCxDQUFDLEVBQ0YsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksc0JBQXNCLENBQUMsT0FBTyxDQUFDLEVBQ2hELENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDVixNQUFNLE9BQU8sR0FBRyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQztnQkFDSCxPQUFPLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQy9CLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxNQUFNLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FDeEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUM1QixTQUFTLEVBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3hDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztZQUMvRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1lBQzVELGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQzFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNsQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDdEQsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7U0FDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUkscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFFdEUsZUFBZTtRQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxvQkFBb0IsQ0FBQztZQUNqRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1lBQ25ELGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDbkQsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUM7WUFDL0MsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDckQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDN0YsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDOUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1lBQzVELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDOUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDckQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDO1lBQ2pFLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUM1QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUM7WUFDL0MsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDckQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQzdDLENBQUMsQ0FBQyxDQUFDO1FBRUosU0FBUztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksV0FBVyxDQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFpQixnQkFBZ0IsQ0FBQyxDQUMvQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUNyQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtZQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1lBQzVFLDJDQUEyQztZQUMzQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQWUsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNwRSxPQUFPLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDbEUsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDekMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksd0JBQXdCLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLEtBQUssQ0FBQyxnQkFBZ0I7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBZSxjQUFjLENBQUMsQ0FBQztRQUN6RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFtQixrQkFBa0IsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBbUIsa0JBQWtCLENBQUMsQ0FBQztRQUU1RSxtQ0FBbUM7UUFDbkMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFeEMsdUZBQXVGO1FBQ3ZGLHlFQUF5RTtRQUN6RSxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDdkMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFO1lBQ2pDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtTQUMxQixDQUFDLENBQUM7UUFFSCx5Q0FBeUM7UUFDekMsTUFBTSxXQUFXLEdBQTJDLEVBQUUsQ0FBQztRQUUvRCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLGNBQWMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDZixLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JHLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLGVBQWUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDZixLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JHLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxtREFBbUQ7UUFDbkQsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxxREFBcUQ7UUFDckQsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xILENBQUM7UUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWhDLDRDQUE0QztRQUM1QyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUMvRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRWhFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixNQUFNLENBQUMsYUFBYSxXQUFXLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pELENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQztZQUN6RCxNQUFNLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQscUZBQXFGO1FBQ3JGLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDM0MsTUFBTSxDQUFDLElBQUksQ0FBQywwRUFBMEUsRUFBRSxHQUFHLENBQUMsQ0FDN0YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2RSxvQ0FBb0M7UUFDcEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsQ0FBQztRQUNuRSxNQUFNLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxXQUFXLDJCQUEyQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUMzSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLHFCQUFxQjtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFlLGNBQWMsQ0FBQyxDQUFDO1FBRXpELG1GQUFtRjtRQUNuRixnRkFBZ0Y7UUFDaEYsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLFNBQVMsSUFBSSxDQUFDLENBQUM7WUFDN0QsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUVsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLElBQUksQ0FDVCx5Q0FBeUMsTUFBTSxDQUFDLFVBQVUsS0FBSztZQUMvRCxtQkFBbUIsTUFBTSxDQUFDLE9BQU8saUJBQWlCLE1BQU0sQ0FBQyxjQUFjLEtBQUssQ0FDN0UsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBb0I7UUFDakQsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLG9CQUFvQixDQUFDLEtBQW9CO1FBQ3BELGlGQUFpRjtRQUNqRixxRkFBcUY7UUFDckYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUN4RSxNQUFNLG1CQUFtQixFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFFNUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBb0I7UUFDdkQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsQ0FBQztZQUNuRSxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUM7WUFFekMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxjQUFjLEdBQUcsTUFBTSxhQUFhLENBQUMsK0JBQStCLEVBQUUsQ0FBQztnQkFFN0UsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxDQUFDLElBQUksQ0FDVCx3Q0FBd0MsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLFlBQVksRUFDaEYsY0FBYyxDQUFDLE1BQU0sQ0FDdEIsQ0FBQztnQkFDSixDQUFDO2dCQUVELE1BQU0sQ0FBQyxJQUFJLENBQ1QsMkJBQTJCLGNBQWMsQ0FBQyxNQUFNLFlBQVk7b0JBQzVELEtBQUssY0FBYyxDQUFDLFdBQVcsYUFBYSxjQUFjLENBQUMsT0FBTyxVQUFVLENBQzdFLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1lBQzNFLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELEtBQUssRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sS0FBSyxDQUFDLHlCQUF5QixDQUFDLEtBQW9CO1FBQzFELEtBQUssRUFBRSxVQUFVLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBa0IsaUJBQWlCLENBQUMsQ0FBQztZQUN6RSxNQUFNLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUVuQyxJQUFJLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxLQUFLLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0I7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFzQixxQkFBcUIsQ0FBQyxDQUFDO1lBQ3JGLE1BQU0sbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDN0MsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQW9CO1FBQ2pELEtBQUssRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWEsWUFBWSxDQUFDLENBQUM7WUFDMUQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsS0FBSyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sS0FBSyxDQUFDLHlCQUF5QixDQUFDLEtBQW9CO1FBQzFELEtBQUssRUFBRSxVQUFVLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBaUIsZ0JBQWdCLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0MsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELEtBQUssRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsc0VBQXNFO0lBQzlELFVBQVUsQ0FBSSxJQUFZO1FBQ2hDLElBQUksQ0FBQztZQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBSSxJQUFJLENBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFBQyxPQUFPLFNBQVMsQ0FBQztRQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELG1EQUFtRDtJQUMzQyxpQkFBaUIsQ0FDdkIsU0FBcUQsRUFDckQsV0FBMEM7UUFFMUMsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBYSxZQUFZLENBQUMsQ0FBQztZQUMxRCxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMvQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3pFLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFvQjtRQUNuRCxLQUFLLEVBQUUsVUFBVSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQjtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUU1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFrQixpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3hELE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQW1CLGtCQUFrQixDQUFDLENBQUM7WUFDNUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBZ0IsZUFBZSxDQUFDLENBQUM7WUFDaEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBb0IsbUJBQW1CLENBQUMsQ0FBQztZQUM1RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFnQixlQUFlLENBQUMsQ0FBQztZQUN0RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFhLFlBQVksQ0FBQyxDQUFDO1lBRTFELGdFQUFnRTtZQUNoRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsQ0FBQztZQUNuRSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFTLGNBQWMsQ0FBQyxDQUFDO1lBRXBFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFDakYsTUFBTSxNQUFNLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQztnQkFDdkMsU0FBUztnQkFDVCxlQUFlO2dCQUNmLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7Z0JBQzNDLFVBQVU7Z0JBQ1YsV0FBVztnQkFDWCxhQUFhO2dCQUNiLGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3hELGlCQUFpQixFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7Z0JBQ2pGLElBQUksRUFBRSxVQUFVO2FBQ2pCLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULEtBQUssRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsd0JBQXdCLENBQUMsYUFBMEMsRUFBRSxLQUFvQjtRQUNyRyxLQUFLLEVBQUUsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO2dCQUM3RixPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO2dCQUNoRixPQUFPO1lBQ1QsQ0FBQztZQUVELG9FQUFvRTtZQUNwRSxzRUFBc0U7WUFDdEUsMEVBQTBFO1lBQzFFLE1BQU0sSUFBSSxHQUFHLGFBQWEsRUFBRSxJQUFJLEtBQUssUUFBUTtnQkFDM0MsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJO2dCQUNwQixDQUFDLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBRTVDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7Z0JBQzdGLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRTNCLE1BQU0sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ2xHLE1BQU0sQ0FBQyxLQUFLLENBQUMsNERBQTRELElBQUksRUFBRSxDQUFDLENBQUM7WUFDakYsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7WUFFN0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztZQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxJQUFJLEtBQUssU0FBUyxLQUFLLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0NBQStDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELEtBQUssRUFBRSxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDLEtBQW9CO1FBQ3ZELEtBQUssRUFBRSxVQUFVLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sa0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLHVEQUF1RCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxLQUFLLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxLQUFvQjtRQUMxRCxLQUFLLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQztZQUNILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBcUIsQ0FBQztZQUM5RSxNQUFNLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsdURBQXVELEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUNELEtBQUssRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sS0FBSyxDQUFDLDJCQUEyQixDQUFDLEtBQW9CO1FBQzVELEtBQUssRUFBRSxVQUFVLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFRLENBQUM7WUFDdkUsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsS0FBSyxFQUFFLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQXNCO1FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWlCLGdCQUFnQixDQUFDLENBQUM7UUFDdEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBZSxjQUFjLENBQUMsQ0FBQztRQUNoRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFlLGNBQWMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWdCLGVBQWUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWtCLGlCQUFpQixDQUFDLENBQUM7UUFFekUsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUVyQixvRUFBb0U7UUFDcEUsbUZBQW1GO1FBQ25GLEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQztnQkFDSCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQzFELE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ25CLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQy9FLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4RCxZQUFZLEVBQUUsQ0FBQztnQkFDakIsQ0FBQztZQUNILENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQy9FLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4RCxZQUFZLEVBQUUsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQztRQUVELGlCQUFpQjtRQUNqQixtRkFBbUY7UUFDbkYsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixhQUFhLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEQsWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxpQkFBaUI7UUFDakIsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixhQUFhLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEQsWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvRCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUUsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDeEQsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLFVBQVUsQ0FBQyxJQUFJLDBDQUEwQyxDQUFDLENBQUM7Z0JBQ3JHLFNBQVM7WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25FLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixhQUFhLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUM5RSxLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkQsWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUM5RSxLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkQsWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ25CLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQ2hGLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN6RCxZQUFZLEVBQUUsQ0FBQztnQkFDakIsQ0FBQztZQUNILENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ2hGLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6RCxZQUFZLEVBQUUsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksYUFBYSxHQUFHLENBQUMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxDQUFDLElBQUksQ0FDVCw4QkFBOEIsYUFBYSx3QkFBd0IsWUFBWSx1QkFBdUIsS0FBSyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQzlILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQTBCLHlCQUF5QixDQUFDLENBQUM7UUFDMUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBaUIsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUF3Qix1QkFBdUIsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUM7UUFDakcsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO1FBRW5ILDJDQUEyQztRQUMzQyxNQUFNLHFCQUFxQixHQUFHO1lBQzVCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLElBQUksSUFBSTtZQUM5RCxHQUFHLEVBQUUsQ0FBQyxLQUFvQixFQUFFLEVBQUU7Z0JBQzVCLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsMkVBQTJFO29CQUMzRSw2RUFBNkU7b0JBQzdFLDBFQUEwRTtvQkFDMUUsY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDaEQsTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsS0FBSyxrQ0FBa0MsRUFBRSxHQUFHLENBQUMsQ0FDekcsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sY0FBYyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUN2QyxjQUFjLEVBQ2QsZUFBZSxFQUNmLGVBQWUsRUFDZixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLHFCQUFxQixDQUN0QixDQUFDO1FBRUYsTUFBTSxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFOUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGtCQUFrQixDQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixjQUFjLEVBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUNwQyxDQUFDO1FBQ0Ysc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUU5RCxrRUFBa0U7UUFDbEUsZ0RBQWdEO1FBRWhELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFDeEIsY0FBYyxFQUFFLGtDQUFrQztRQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsRUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLEVBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FDdEMsQ0FBQztRQUVGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQ25DLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQ3JDLENBQUM7UUFFRixNQUFNLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLENBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQ25ELGNBQWMsRUFDZCxXQUFXLEVBQ1gsZ0JBQWdCLENBQ2pCLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FDekMsY0FBYyxFQUNkLFdBQVcsRUFDWCxnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxDQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUM3QixXQUFXLEVBQ1gsZ0JBQWdCLENBQ2pCLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUM3QixnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUNwQyxnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLHVEQUF1RDtRQUN2RCx5R0FBeUc7UUFDekcsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFO1lBQzNDLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsNkJBQTZCLEVBQUUsSUFBSTtZQUNuQywyQkFBMkIsRUFBRSxHQUFHLENBQUMsNkNBQTZDO1NBQy9FLENBQUMsQ0FBQztRQUVILDRGQUE0RjtRQUM1RixtRUFBbUU7UUFDbkUsMERBQTBEO1FBQzFELDREQUE0RDtRQUM1RCx1RkFBdUY7UUFDdkYsd0ZBQXdGO1FBQ3hGLE1BQU0sV0FBVyxHQUFvQjtZQUNuQyxXQUFXLEVBQUUsa0JBQWtCO1lBQy9CLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUM1QyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDMUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDO1lBQ3hELDBDQUEwQztZQUMxQyxpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsYUFBYTtZQUNiLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2QsV0FBVztZQUNYLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7WUFDbEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUNwRCxVQUFVLEVBQUcsMENBQTBDO1lBQ3ZELGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDdEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFHLGlDQUFpQztZQUN4RixvQkFBb0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQUcsa0NBQWtDO1lBQy9GLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsRUFBRyxzQ0FBc0M7WUFDakcsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBcUIsb0JBQW9CLENBQUM7WUFDMUUsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBMEIseUJBQXlCLENBQUM7WUFDekYsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBMkIsMEJBQTBCLENBQUM7U0FDN0YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRTtZQUNoRCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBb0IsbUJBQW1CLENBQUMsQ0FBQztZQUFDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQUMsT0FBTyxTQUFTLENBQUM7WUFBQyxDQUFDLENBQUMsQ0FBQztZQUMvRyxZQUFZLEVBQUUsSUFBSTtZQUNsQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBaUIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBRXJHLHdEQUF3RDtRQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVuRSxPQUFPO1lBQ0wsY0FBYztZQUNkLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixvQkFBb0I7WUFDcEIsZUFBZTtZQUNmLGFBQWE7WUFDYixXQUFXO1lBQ1gsWUFBWSxFQUFFLFNBQW9DLEVBQUUsMENBQTBDO1lBQzlGLG9CQUFvQjtZQUNwQixhQUFhO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQWM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUU5QyxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QywwREFBMEQ7UUFDMUQsK0RBQStEO1FBQy9ELDJFQUEyRTtRQUMzRSx5RUFBeUU7UUFDekUsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1FBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFcEQsSUFBSSxhQUFhLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakMsK0NBQStDO1lBQy9DLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDekQsWUFBWSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzdELFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMvRCxZQUFZLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDN0QsWUFBWSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pELFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztnQkFDL0IscUJBQXFCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNqQyxNQUFNLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztnQkFDckQsbUJBQW1CLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUMvQixNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQzthQUNsRCxDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsMEJBQTBCLENBQ3JDLE1BQU0sQ0FBQyxvQkFBb0IsRUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBcUIsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FDbkUsQ0FBQztZQUNGLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNOLDRDQUE0QztZQUM1QyxZQUFZLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUN4RSxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7WUFDckMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtZQUM3QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1lBQzNDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDekMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtZQUMzQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7WUFDbkMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7U0FDbEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBYyxhQUFhLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV0RyxPQUFPO1lBQ0wsR0FBRyxNQUFNO1lBQ1QsWUFBWTtTQUNiLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNLLGlCQUFpQixDQUN2QixZQUEwQixFQUMxQixhQUFvQyxFQUNwQyxhQUE0QixFQUM1QixnQkFTQztRQUVELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzFELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXJELG1EQUFtRDtRQUNuRCxJQUFJLGlCQUF5QixDQUFDO1FBQzlCLElBQUksb0JBQTRCLENBQUM7UUFFakMsSUFBSSxhQUFhLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakMsc0RBQXNEO1lBQ3RELE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQVksQ0FBQyxDQUFDO1lBQ3BELFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNoRCxpQkFBaUIsR0FBRyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN4RCxvQkFBb0IsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDTixzREFBc0Q7WUFDdEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBWSxDQUFDLENBQUM7WUFDcEQsWUFBWSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ25FLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZFLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pFLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3ZFLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ25FLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztnQkFDL0IscUJBQXFCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNqQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDO2dCQUMvRCxtQkFBbUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQy9CLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7YUFDNUQsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLDBCQUEwQixDQUNyQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBcUIsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FDbkUsQ0FBQztZQUNGLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUN0RSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN4RCxvQkFBb0IsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckQsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsR0FBRyxhQUFhLENBQUM7UUFDcEQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUVSLHFCQUFxQjtRQUNyQixNQUFNLENBQUMsSUFBSSxDQUNULCtCQUErQixnQkFBZ0IsWUFBWSxhQUFhLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FDbkcsQ0FBQztRQUVGLElBQUksYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLHNDQUFzQztZQUN0QyxNQUFNLENBQUMsSUFBSSxDQUNULGtCQUFrQixTQUFTLENBQUMsY0FBYyxFQUFFLGtCQUFrQixjQUFjLHdCQUF3QixvQkFBb0IsWUFBWSxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUNqTCxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixnREFBZ0Q7WUFDaEQsTUFBTSxDQUFDLElBQUksQ0FDVCxzQ0FBc0Msb0JBQW9CLFlBQVksaUJBQWlCLENBQUMsY0FBYyxFQUFFLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUM1TCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxxQkFBcUIsQ0FBQyxjQUE4QjtRQUMxRCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBOEQsb0JBQW9CLENBQUMsQ0FBQztZQUNoSCxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSwyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWhDLDhEQUE4RDtRQUM5RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQztZQUNILGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUvQiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBeUUsbUJBQW1CLENBQUMsQ0FBQztZQUM1SCxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWhDLDZCQUE2QjtRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUEyRCxpQkFBaUIsQ0FBQyxDQUFDO1lBQzlHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFaEMsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQztZQUNILGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLCtCQUErQixFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUvQixpRkFBaUY7UUFDakYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBc0Usc0JBQXNCLENBQUMsQ0FBQztZQUNoSSxzRUFBc0U7WUFDdEUsSUFBSSx1QkFBdUIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxPQUFPLEdBQUksYUFBcUIsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDN0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNoRixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWhDLGtDQUFrQztRQUNsQyxJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFzRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQzlILGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFaEMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQTBCLHlCQUF5QixDQUFDLENBQUM7WUFDbkYsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUkseUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVoQyxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBMkIsMEJBQTBCLENBQUMsQ0FBQztZQUNyRixjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsTUFBTSxNQUFNLEdBQXdGLEVBQUUsQ0FBQztRQUN2RyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUE0RCxVQUFVLENBQUMsQ0FBQztZQUNyRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBZSxFQUFFLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUvQixNQUFNLFlBQVksR0FBRztZQUNuQixnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsY0FBYztZQUNoRCxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCO1NBQzdDLENBQUM7UUFDWCxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUEyRSxJQUFJLENBQUMsQ0FBQztnQkFDekcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQix1RUFBdUU7UUFDdkUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMvRCxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBRXhDLHNFQUFzRTtRQUN0RSxJQUFJLENBQUM7WUFDSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBRXZELCtDQUErQztRQUMvQyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFpQixrQkFBa0IsQ0FBQyxDQUFDO1lBQ2xFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE1BQU0sUUFBUSxHQUFvRCxFQUFFLENBQUM7UUFDckUsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7Z0JBQUUsU0FBUztZQUNoQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBZSxDQUFDO1lBQ3pDLElBQUksT0FBTyxRQUFRLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUMzQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRixDQUFDO2lCQUFNLElBQUksT0FBTyxRQUFRLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNsRCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsZ0JBQWlFLEVBQ2pFLE9BQXFDO1FBRXJDLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM5QixLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDaEQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2hHLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLFdBQVcsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2RSxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxRQUFRLENBQUMsTUFBTSxzQkFBc0IsZ0JBQWdCLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQztRQUM1SCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUI7UUFDckMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBa0IsaUJBQWlCLENBQUMsQ0FBQztZQUN6RSxNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaURBQWlELENBQUMsQ0FBQztnQkFDL0QsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsbUNBQW1DLENBQUMsQ0FBQztnQkFDL0UsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsUUFBUSxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7WUFDNUUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sS0FBSyxHQUFHLE1BQU0sZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNwRCxNQUFNLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztZQUMvRSxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixZQUFZLENBQUMsUUFBUSxDQUFDLDhDQUE4QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBQQUNLQUdFX1ZFUlNJT04sIFBBQ0tBR0VfVkVSU0lPTiBhcyBWRVJTSU9OIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzXCI7XG5pbXBvcnQgeyBWZXJiVHJpZ2dlck1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1ZlcmJUcmlnZ2VyTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUmVsYXRpb25zaGlwTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUmVsYXRpb25zaGlwTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgTkxQU2NvcmluZ01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL05MUFNjb3JpbmdNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGxvYWRJbmRpY2F0b3JDb25maWcgfSBmcm9tIFwiLi4vY29uZmlnL2luZGljYXRvci1jb25maWcuanNcIjtcbmltcG9ydCB7IGVudiB9IGZyb20gXCIuLi9jb25maWcvZW52LmpzXCI7XG5pbXBvcnQgeyBBUElDYWNoZSwgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSW5kZXhDYWNoZSwgQ2FjaGVNZW1vcnlCdWRnZXQgfSBmcm9tIFwiLi4vY2FjaGUvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldFZhbGlkYXRlZEdsb2JhbENhY2hlTWVtb3J5Qnl0ZXMsIGdldFZhbGlkYXRlZE1heEJhY2t1cHNQZXJFbGVtZW50LCBTVE9SQUdFX0xBWUVSX0NPTkZJRyB9IGZyb20gXCIuLi9jb25maWcvcGVyZm9ybWFuY2UtY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBCYWNrdXBTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0JhY2t1cFNlcnZpY2UuanNcIjtcbmltcG9ydCB7XG4gIEdpdEh1YkNsaWVudCxcbiAgQ29sbGVjdGlvbkJyb3dzZXIsXG4gIENvbGxlY3Rpb25JbmRleE1hbmFnZXIsXG4gIENvbGxlY3Rpb25TZWFyY2gsXG4gIFBlcnNvbmFEZXRhaWxzLFxuICBFbGVtZW50SW5zdGFsbGVyLFxufSBmcm9tIFwiLi4vY29sbGVjdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgR2l0SHViQXV0aE1hbmFnZXIgfSBmcm9tIFwiLi4vYXV0aC9HaXRIdWJBdXRoTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvTWFuYWdlciwgRWxlbWVudFR5cGUgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanNcIjtcbmltcG9ydCB7IE1pZ3JhdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL01pZ3JhdGlvbk1hbmFnZXIuanNcIjtcbmltcG9ydCB7IEVuaGFuY2VkSW5kZXhNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9FbmhhbmNlZEluZGV4TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgRW5oYW5jZWRJbmRleEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvRW5oYW5jZWRJbmRleEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IE1DUEFRTEhhbmRsZXIsIHR5cGUgSGFuZGxlclJlZ2lzdHJ5IH0gZnJvbSBcIi4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgR2F0ZWtlZXBlciB9IGZyb20gXCIuLi9oYW5kbGVycy9tY3AtYXFsL0dhdGVrZWVwZXIuanNcIjtcbmltcG9ydCB7IFNraWxsTWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9za2lsbHMvaW5kZXguanNcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy90ZW1wbGF0ZXMvVGVtcGxhdGVNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVJlbmRlcmVyIH0gZnJvbSBcIi4uL3V0aWxzL1RlbXBsYXRlUmVuZGVyZXIuanNcIjtcbmltcG9ydCB7IEFnZW50TWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9hZ2VudHMvQWdlbnRNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBNZW1vcnkgfSBmcm9tIFwiLi4vZWxlbWVudHMvbWVtb3JpZXMvTWVtb3J5LmpzXCI7XG5pbXBvcnQgeyBNZW1vcnlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFdlYlNTRUxvZ1NpbmsgfSBmcm9tIFwiLi4vd2ViL3NpbmtzL1dlYlNTRUxvZ1NpbmsuanNcIjtcbmltcG9ydCB7IFdlYlNTRU1ldHJpY3NTaW5rIH0gZnJvbSBcIi4uL3dlYi9zaW5rcy9XZWJTU0VNZXRyaWNzU2luay5qc1wiO1xuaW1wb3J0IHsgRW5zZW1ibGVNYW5hZ2VyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL2Vuc2VtYmxlcy9FbnNlbWJsZU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBlcnNvbmFFeHBvcnRlciwgUGVyc29uYUltcG9ydGVyIH0gZnJvbSBcIi4uL3BlcnNvbmEvZXhwb3J0LWltcG9ydC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgUGVyc29uYU1hbmFnZXIgfSBmcm9tIFwiLi4vcGVyc29uYS9QZXJzb25hTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUGVyc29uYUhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvUGVyc29uYUhhbmRsZXIuanNcIjtcbmltcG9ydCB7IEVsZW1lbnRDUlVESGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9FbGVtZW50Q1JVREhhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25IYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0NvbGxlY3Rpb25IYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9IYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1BvcnRmb2xpb0hhbmRsZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb1B1bGxIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1BvcnRmb2xpb1B1bGxIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJBdXRoSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9HaXRIdWJBdXRoSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgRGlzcGxheUNvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvRGlzcGxheUNvbmZpZ0hhbmRsZXIuanNcIjtcbmltcG9ydCB7IElkZW50aXR5SGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9JZGVudGl0eUhhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvQ29uZmlnSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgU3luY0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvU3luY0hhbmRsZXJWMi5qc1wiO1xuaW1wb3J0IHsgVG9vbFJlZ2lzdHJ5IH0gZnJvbSBcIi4uL2hhbmRsZXJzL1Rvb2xSZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgU2VydmVyU2V0dXAgfSBmcm9tIFwiLi4vc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXJ2ZXJTdGFydHVwIH0gZnJvbSBcIi4uL3NlcnZlci9zdGFydHVwLmpzXCI7XG5pbXBvcnQgeyBQYXRoVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3BhdGhWYWxpZGF0b3IuanNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXIuanNcIjtcbmltcG9ydCB7IEVycm9ySGFuZGxlciB9IGZyb20gXCIuLi91dGlscy9FcnJvckhhbmRsZXIuanNcIjtcbmltcG9ydCB7IFVuaWZpZWRJbmRleE1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1VuaWZpZWRJbmRleE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb0luZGV4TWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUG9ydGZvbGlvSW5kZXhNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTdWJtaXRUb1BvcnRmb2xpb1Rvb2wgfSBmcm9tIFwiLi4vdG9vbHMvcG9ydGZvbGlvL3N1Ym1pdFRvUG9ydGZvbGlvVG9vbC5qc1wiO1xuaW1wb3J0IHsgQ29uZmlnTWFuYWdlciB9IGZyb20gXCIuLi9jb25maWcvQ29uZmlnTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9TeW5jTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUG9ydGZvbGlvU3luY01hbmFnZXIuanNcIjtcbmltcG9ydCB7IGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lIH0gZnJvbSBcIi4uL2NvbmZpZy9wb3J0Zm9saW9Db25maWcuanNcIjtcbmltcG9ydCB7IEdpdEh1YlBvcnRmb2xpb0luZGV4ZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIuanNcIjtcbmltcG9ydCB7IEluZGV4Q29uZmlnTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vY29uZmlnL0luZGV4Q29uZmlnLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9TeW5jQ29tcGFyZXIgfSBmcm9tIFwiLi4vc3luYy9Qb3J0Zm9saW9TeW5jQ29tcGFyZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb0Rvd25sb2FkZXIgfSBmcm9tIFwiLi4vc3luYy9Qb3J0Zm9saW9Eb3dubG9hZGVyLmpzXCI7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZU1vbml0b3IgfSBmcm9tIFwiLi4vdXRpbHMvUGVyZm9ybWFuY2VNb25pdG9yLmpzXCI7XG5pbXBvcnQgeyBCdWlsZEluZm9TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0J1aWxkSW5mb1NlcnZpY2UuanNcIjtcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9Jbml0aWFsaXphdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1BlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU3RhdGVDaGFuZ2VOb3RpZmllciB9IGZyb20gXCIuLi9zZXJ2aWNlcy9TdGF0ZUNoYW5nZU5vdGlmaWVyLmpzXCI7XG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9TZXJpYWxpemF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZVdhdGNoU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9GaWxlV2F0Y2hTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvTWV0YWRhdGFTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tIFwiLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uUmVnaXN0cnkuanNcIjtcbmltcG9ydCB7IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy92YWxpZGF0aW9uL1RyaWdnZXJWYWxpZGF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgR2l0SHViUmF0ZUxpbWl0ZXIgfSBmcm9tIFwiLi4vdXRpbHMvR2l0SHViUmF0ZUxpbWl0ZXIuanNcIjtcbmltcG9ydCB7IEFudGhyb3BpY1RvRG9sbGhvdXNlQ29udmVydGVyLCBEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlciB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBEYW5nZXJab25lRW5mb3JjZXIgfSBmcm9tIFwiLi4vc2VjdXJpdHkvRGFuZ2VyWm9uZUVuZm9yY2VyLmpzXCI7XG5pbXBvcnQgeyBBY3RpdmF0aW9uU3RvcmUgfSBmcm9tIFwiLi4vc2VydmljZXMvQWN0aXZhdGlvblN0b3JlLmpzXCI7XG5pbXBvcnQgeyBWZXJpZmljYXRpb25TdG9yZSB9IGZyb20gXCJAZG9sbGhvdXNlbWNwL3NhZmV0eVwiO1xuaW1wb3J0IHsgVmVyaWZpY2F0aW9uTm90aWZpZXIgfSBmcm9tIFwiLi4vc2VydmljZXMvVmVyaWZpY2F0aW9uTm90aWZpZXIuanNcIjtcbmltcG9ydCB7IFBhdHRlcm5FbmNyeXB0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvZW5jcnlwdGlvbi9QYXR0ZXJuRW5jcnlwdG9yLmpzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuRGVjcnlwdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2VuY3J5cHRpb24vUGF0dGVybkRlY3J5cHRvci5qc1wiO1xuaW1wb3J0IHsgQ29udGV4dFRyYWNrZXIgfSBmcm9tIFwiLi4vc2VjdXJpdHkvZW5jcnlwdGlvbi9Db250ZXh0VHJhY2tlci5qc1wiO1xuaW1wb3J0IHsgUGF0dGVybkV4dHJhY3RvciB9IGZyb20gXCIuLi9zZWN1cml0eS92YWxpZGF0aW9uL1BhdHRlcm5FeHRyYWN0b3IuanNcIjtcbmltcG9ydCB7IEJhY2tncm91bmRWYWxpZGF0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdmFsaWRhdGlvbi9CYWNrZ3JvdW5kVmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgeyBTZWN1cml0eVRlbGVtZXRyeSB9IGZyb20gXCIuLi9zZWN1cml0eS90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanNcIjtcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qc1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uYWxUZWxlbWV0cnkgfSBmcm9tIFwiLi4vdGVsZW1ldHJ5L09wZXJhdGlvbmFsVGVsZW1ldHJ5LmpzXCI7XG5pbXBvcnQgeyBTdGFydHVwVGltZXIgfSBmcm9tIFwiLi4vdGVsZW1ldHJ5L1N0YXJ0dXBUaW1lci5qc1wiO1xuaW1wb3J0IHsgRGVmYXVsdEVuaGFuY2VkSW5kZXhIZWxwZXJzIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9FbmhhbmNlZEluZGV4SGVscGVycy5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudERlZmluaXRpb25CdWlsZGVyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9FbGVtZW50RGVmaW5pdGlvbkJ1aWxkZXIuanNcIjtcbmltcG9ydCB7IEFjdGlvblRyaWdnZXJFeHRyYWN0b3IgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L0FjdGlvblRyaWdnZXJFeHRyYWN0b3IuanNcIjtcbmltcG9ydCB7IFRyaWdnZXJNZXRyaWNzVHJhY2tlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvVHJpZ2dlck1ldHJpY3NUcmFja2VyLmpzXCI7XG5pbXBvcnQgeyBTZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2UgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L1NlbWFudGljUmVsYXRpb25zaGlwU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudEV2ZW50RGlzcGF0Y2hlciB9IGZyb20gJy4uL2V2ZW50cy9FbGVtZW50RXZlbnREaXNwYXRjaGVyLmpzJztcbmltcG9ydCB7IFRva2VuTWFuYWdlciB9IGZyb20gXCIuLi9zZWN1cml0eS90b2tlbk1hbmFnZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgVW5pZmllZENvbnNvbGVSZXN1bHQgfSBmcm9tIFwiLi4vd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUuanNcIjtcbmltcG9ydCB7XG4gIFBhZ2luYXRpb25TZXJ2aWNlLFxuICBGaWx0ZXJTZXJ2aWNlLFxuICBTb3J0U2VydmljZSxcbiAgRWxlbWVudFF1ZXJ5U2VydmljZSxcbn0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvaW5kZXguanMnO1xuaW1wb3J0IHsgUmV0ZW50aW9uUG9saWN5U2VydmljZSwgTWVtb3J5UmV0ZW50aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9SZXRlbnRpb25Qb2xpY3lTZXJ2aWNlLmpzJztcbmltcG9ydCB7IFBvbGljeUV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLmpzJztcbmltcG9ydCB7IExvZ01hbmFnZXIsIGJ1aWxkTG9nTWFuYWdlckNvbmZpZyB9IGZyb20gJy4uL2xvZ2dpbmcvTG9nTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBGaWxlTG9nU2luayB9IGZyb20gJy4uL2xvZ2dpbmcvc2lua3MvRmlsZUxvZ1NpbmsuanMnO1xuaW1wb3J0IHsgTWVtb3J5TG9nU2luayB9IGZyb20gJy4uL2xvZ2dpbmcvc2lua3MvTWVtb3J5TG9nU2luay5qcyc7XG5pbXBvcnQgeyBQbGFpblRleHRGb3JtYXR0ZXIgfSBmcm9tICcuLi9sb2dnaW5nL2Zvcm1hdHRlcnMvUGxhaW5UZXh0Rm9ybWF0dGVyLmpzJztcbmltcG9ydCB7IEpzb25sRm9ybWF0dGVyIH0gZnJvbSAnLi4vbG9nZ2luZy9mb3JtYXR0ZXJzL0pzb25sRm9ybWF0dGVyLmpzJztcbmltcG9ydCB7IHdpcmVMb2dIb29rcywgZ2V0VHJpZ2dlck1ldHJpY3NMb2dMaXN0ZW5lciB9IGZyb20gJy4uL2xvZ2dpbmcvTG9nSG9va3MuanMnO1xuaW1wb3J0IHsgTWV0cmljc01hbmFnZXIgfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NNYW5hZ2VyLmpzJztcbmltcG9ydCB7IE1lbW9yeU1ldHJpY3NTaW5rIH0gZnJvbSAnLi4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcyc7XG5pbXBvcnQgeyBidWlsZE1ldHJpY3NNYW5hZ2VyQ29uZmlnIH0gZnJvbSAnLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBQZXJmb3JtYW5jZU1vbml0b3JDb2xsZWN0b3IsXG4gIExSVUNhY2hlQ29sbGVjdG9yLFxuICBTZWN1cml0eU1vbml0b3JDb2xsZWN0b3IsXG4gIFNlY3VyaXR5VGVsZW1ldHJ5Q29sbGVjdG9yLFxuICBGaWxlTG9ja01hbmFnZXJDb2xsZWN0b3IsXG4gIERlZmF1bHRFbGVtZW50UHJvdmlkZXJDb2xsZWN0b3IsXG4gIFRyaWdnZXJNZXRyaWNzVHJhY2tlckNvbGxlY3RvcixcbiAgT3BlcmF0aW9uYWxUZWxlbWV0cnlDb2xsZWN0b3IsXG4gIE9wZXJhdGlvbk1ldHJpY3NDb2xsZWN0b3IsXG4gIEdhdGVrZWVwZXJNZXRyaWNzQ29sbGVjdG9yLFxufSBmcm9tICcuLi9tZXRyaWNzL2NvbGxlY3RvcnMvaW5kZXguanMnO1xuaW1wb3J0IHsgT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIgfSBmcm9tICcuLi9tZXRyaWNzL09wZXJhdGlvbk1ldHJpY3NUcmFja2VyLmpzJztcbmltcG9ydCB7IEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlciB9IGZyb20gJy4uL21ldHJpY3MvR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyLmpzJztcblxuLy8gU3RhdGUgaXMgb3duZWQgYnkgUGVyc29uYU1hbmFnZXIgYW5kIHNlcnZpY2VzXG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlckJ1bmRsZSB7XG4gIHBlcnNvbmFIYW5kbGVyOiBQZXJzb25hSGFuZGxlcjtcbiAgZWxlbWVudENydWRIYW5kbGVyOiBFbGVtZW50Q1JVREhhbmRsZXI7XG4gIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcbiAgcG9ydGZvbGlvSGFuZGxlcjogUG9ydGZvbGlvSGFuZGxlcjtcbiAgZ2l0aHViQXV0aEhhbmRsZXI6IEdpdEh1YkF1dGhIYW5kbGVyO1xuICBkaXNwbGF5Q29uZmlnSGFuZGxlcjogRGlzcGxheUNvbmZpZ0hhbmRsZXI7XG4gIGlkZW50aXR5SGFuZGxlcjogSWRlbnRpdHlIYW5kbGVyO1xuICBjb25maWdIYW5kbGVyOiBDb25maWdIYW5kbGVyO1xuICBzeW5jSGFuZGxlcjogU3luY0hhbmRsZXI7XG4gIHRvb2xSZWdpc3RyeTogVG9vbFJlZ2lzdHJ5O1xuICBlbmhhbmNlZEluZGV4SGFuZGxlcjogRW5oYW5jZWRJbmRleEhhbmRsZXI7XG4gIG1jcEFxbEhhbmRsZXI6IE1DUEFRTEhhbmRsZXI7XG59XG5cbi8qKlxuICogVHlwZS1zYWZlIHNlcnZpY2UgcmVjb3JkIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiBjb250YWluZXJcbiAqXG4gKiBGSVg6IFJlcGxhY2VkICdhbnknIHR5cGVzIHdpdGggcHJvcGVyIGdlbmVyaWNzIHRvIGVuc3VyZSB0eXBlIHNhZmV0eVxuICogUHJldmlvdXNseTogVXNlZCAnYW55JyB3aGljaCBhbGxvd2VkIHVuc2FmZSBjYXN0cyBhbmQgcnVudGltZSBlcnJvcnNcbiAqIE5vdzogVXNlcyBnZW5lcmljIFQgd2l0aCAndW5rbm93bicgZmFsbGJhY2sgZm9yIGNvbXBpbGUtdGltZSB0eXBlIGNoZWNraW5nXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHNlcnZpY2UgdHlwZSAoZGVmYXVsdHMgdG8gdW5rbm93biBmb3IgbWF4aW11bSBzYWZldHkpXG4gKi9cbmludGVyZmFjZSBTZXJ2aWNlUmVjb3JkPFQgPSB1bmtub3duPiB7XG4gIGZhY3Rvcnk6ICgpID0+IFQ7XG4gIGluc3RhbmNlOiBUIHwgbnVsbDtcbiAgc2luZ2xldG9uOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRG9sbGhvdXNlQ29udGFpbmVyIHtcbiAgcHJpdmF0ZSBzZXJ2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXJ2aWNlUmVjb3JkPigpO1xuICBwcml2YXRlIHBlcnNvbmFzRGlyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgLyoqIElzc3VlICM3MDY6IFNldCB0byB0cnVlIG9uY2UgY29tcGxldGVEZWZlcnJlZFNldHVwKCkgcmVzb2x2ZXMuICovXG4gIHB1YmxpYyBkZWZlcnJlZFNldHVwQ29tcGxldGUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEF1ZGl0IERJIGNvbnRhaW5lciBpbml0aWFsaXphdGlvblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdQT1JURk9MSU9fSU5JVElBTElaQVRJT04nLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnRG9sbGhvdXNlQ29udGFpbmVyLmNvbnN0cnVjdG9yJyxcbiAgICAgIGRldGFpbHM6ICdEZXBlbmRlbmN5IGluamVjdGlvbiBjb250YWluZXIgaW5pdGlhbGl6aW5nJ1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJTZXJ2aWNlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgc2VydmljZSB3aXRoIHRoZSBESSBjb250YWluZXJcbiAgICpcbiAgICogRklYOiBBZGRlZCBleHBsaWNpdCB0eXBlIHBhcmFtZXRlciBmb3IgdHlwZSBzYWZldHlcbiAgICogVGhlIGZhY3RvcnkgaXMgc3RvcmVkIGFzICgpID0+IHVua25vd24gaW50ZXJuYWxseSB0byBhbGxvdyBoZXRlcm9nZW5lb3VzIHN0b3JhZ2UsXG4gICAqIGJ1dCB0aGUgdHlwZSBUIGlzIHByZXNlcnZlZCBmb3IgcmVzb2x2ZSgpIGNhbGxzXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBUIFRoZSBzZXJ2aWNlIHR5cGVcbiAgICogQHBhcmFtIG5hbWUgVW5pcXVlIHNlcnZpY2UgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gZmFjdG9yeSBGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyB0aGUgc2VydmljZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgKHNpbmdsZXRvbiBiZWhhdmlvcilcbiAgICovXG4gIHB1YmxpYyByZWdpc3RlcjxUPihuYW1lOiBzdHJpbmcsIGZhY3Rvcnk6ICgpID0+IFQsIG9wdGlvbnM6IHsgc2luZ2xldG9uPzogYm9vbGVhbiB9ID0geyBzaW5nbGV0b246IHRydWUgfSk6IHZvaWQge1xuICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQXVkaXQgc2VydmljZSByZWdpc3RyYXRpb25cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5yZWdpc3RlcicsXG4gICAgICBkZXRhaWxzOiBgU2VydmljZSByZWdpc3RlcmVkOiAke25hbWV9YCxcbiAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IHNlcnZpY2VOYW1lOiBuYW1lLCBzaW5nbGV0b246IG9wdGlvbnMuc2luZ2xldG9uID8/IHRydWUgfVxuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZXMuc2V0KG5hbWUsIHtcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkgYXMgKCkgPT4gdW5rbm93bixcbiAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgc2luZ2xldG9uOiBvcHRpb25zLnNpbmdsZXRvbiA/PyB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhIHNlcnZpY2UgZnJvbSB0aGUgREkgY29udGFpbmVyXG4gICAqXG4gICAqIEZJWDogVHlwZSBzYWZldHkgaW1wcm92ZWQgd2l0aCBleHBsaWNpdCBjYXN0aW5nIGFuZCB2YWxpZGF0aW9uXG4gICAqIFRoZSAnYXMgVCcgY2FzdCBpcyBzYWZlIGJlY2F1c2U6XG4gICAqIDEuIFNlcnZpY2VzIGFyZSByZWdpc3RlcmVkIHdpdGggdHlwZWQgZmFjdG9yaWVzXG4gICAqIDIuIFRoZSBzZXJ2aWNlIG5hbWUgYWN0cyBhcyBhIHR5cGUgZGlzY3JpbWluYXRvclxuICAgKiAzLiBJbmNvcnJlY3QgdXNhZ2Ugd2lsbCBiZSBjYXVnaHQgYXQgdGhlIHJlZ2lzdHJhdGlvbiBzaXRlXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBUIFRoZSBleHBlY3RlZCBzZXJ2aWNlIHR5cGVcbiAgICogQHBhcmFtIG5hbWUgU2VydmljZSBpZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIFRoZSBzZXJ2aWNlIGluc3RhbmNlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgc2VydmljZSBpcyBub3QgcmVnaXN0ZXJlZFxuICAgKi9cbiAgcHVibGljIHJlc29sdmU8VD4obmFtZTogc3RyaW5nKTogVCB7XG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXMuZ2V0KG5hbWUpO1xuICAgIGlmICghc2VydmljZSkge1xuICAgICAgLy8gRklYOiBETUNQLVNFQy0wMDYgLSBBdWRpdCBzZXJ2aWNlIHJlc29sdXRpb24gZmFpbHVyZXNcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ01FTU9SWV9MT0FEX0ZBSUxFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnRG9sbGhvdXNlQ29udGFpbmVyLnJlc29sdmUnLFxuICAgICAgICBkZXRhaWxzOiBgU2VydmljZSBub3QgcmVnaXN0ZXJlZDogJHtuYW1lfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IHNlcnZpY2VOYW1lOiBuYW1lIH1cbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2aWNlIG5vdCByZWdpc3RlcmVkOiAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2Uuc2luZ2xldG9uKSB7XG4gICAgICBpZiAoIXNlcnZpY2UuaW5zdGFuY2UpIHtcbiAgICAgICAgc2VydmljZS5pbnN0YW5jZSA9IHNlcnZpY2UuZmFjdG9yeSgpO1xuICAgICAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEF1ZGl0IHNpbmdsZXRvbiBpbnN0YW50aWF0aW9uXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgc291cmNlOiAnRG9sbGhvdXNlQ29udGFpbmVyLnJlc29sdmUnLFxuICAgICAgICAgIGRldGFpbHM6IGBTaW5nbGV0b24gaW5zdGFudGlhdGVkOiAke25hbWV9YCxcbiAgICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBzZXJ2aWNlTmFtZTogbmFtZSB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlcnZpY2UuaW5zdGFuY2UgYXMgVDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VydmljZS5mYWN0b3J5KCkgYXMgVDtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJTZXJ2aWNlcygpOiB2b2lkIHtcblxuXG4gICAgLy8gSXNzdWUgIzcwNjogU3RhcnR1cCB0aW1pbmcgaW5zdHJ1bWVudGF0aW9uXG4gICAgdGhpcy5yZWdpc3RlcignU3RhcnR1cFRpbWVyJywgKCkgPT4gbmV3IFN0YXJ0dXBUaW1lcigpKTtcblxuICAgIC8vIENPUkUgJiBDQUNISU5HXG4gICAgdGhpcy5yZWdpc3RlcignQ2FjaGVNZW1vcnlCdWRnZXQnLCAoKSA9PiBuZXcgQ2FjaGVNZW1vcnlCdWRnZXQoe1xuICAgICAgZ2xvYmFsTGltaXRCeXRlczogZ2V0VmFsaWRhdGVkR2xvYmFsQ2FjaGVNZW1vcnlCeXRlcygpLFxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdBUElDYWNoZScsICgpID0+IG5ldyBBUElDYWNoZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uQ2FjaGUnLCAoKSA9PiBuZXcgQ29sbGVjdGlvbkNhY2hlKHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksIHVuZGVmaW5lZCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1JhdGVMaW1pdFRyYWNrZXInLCAoKSA9PiBuZXcgTWFwPHN0cmluZywgbnVtYmVyW10+KCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0ZpbGVMb2NrTWFuYWdlcicsICgpID0+IG5ldyBGaWxlTG9ja01hbmFnZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJywgKCkgPT4gbmV3IEZpbGVPcGVyYXRpb25zU2VydmljZSh0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29uZmlnTWFuYWdlcicsICgpID0+IHtcbiAgICAgIHJldHVybiBuZXcgQ29uZmlnTWFuYWdlcih0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLCBvcyk7XG4gICAgfSk7XG4gICAgLy8gSXNzdWUgIzUxOiBHZW5lcmljIHJldGVudGlvbiBwb2xpY3kgc2VydmljZSB3aXRoIHN0cmF0ZWd5IHBhdHRlcm5cbiAgICB0aGlzLnJlZ2lzdGVyKCdSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmljZSA9IG5ldyBSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlKHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpKTtcbiAgICAgIC8vIFJlZ2lzdGVyIG1lbW9yeSByZXRlbnRpb24gc3RyYXRlZ3kgKGZpcnN0IG9mIHBvdGVudGlhbGx5IDUwKyBlbGVtZW50IHR5cGVzKVxuICAgICAgc2VydmljZS5yZWdpc3RlclN0cmF0ZWd5KG5ldyBNZW1vcnlSZXRlbnRpb25TdHJhdGVneSgpKTtcbiAgICAgIHJldHVybiBzZXJ2aWNlO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0luZGV4Q29uZmlnTWFuYWdlcicsICgpID0+IG5ldyBJbmRleENvbmZpZ01hbmFnZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignSW5kaWNhdG9yQ29uZmlnJywgKCkgPT4gbG9hZEluZGljYXRvckNvbmZpZygpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdTdGF0ZUNoYW5nZU5vdGlmaWVyJywgKCkgPT4gbmV3IFN0YXRlQ2hhbmdlTm90aWZpZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignR2l0SHViUmF0ZUxpbWl0ZXInLCAoKSA9PiBuZXcgR2l0SHViUmF0ZUxpbWl0ZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRWxlbWVudEV2ZW50RGlzcGF0Y2hlcicsICgpID0+IEVsZW1lbnRFdmVudERpc3BhdGNoZXIuZ2V0U2hhcmVkRGlzcGF0Y2hlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdNQ1BMb2dnZXInLCAoKSA9PiBsb2dnZXIpO1xuXG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYUltcG9ydGVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgcG9ydGZvbGlvTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpO1xuICAgICAgY29uc3QgcGVyc29uYXNEaXIgPSBwb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuUEVSU09OQSk7XG4gICAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjayB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeS4gV2UgcmVzb2x2ZSBQZXJzb25hTWFuYWdlciBpbnNpZGUgdGhlIHByb3ZpZGVyIGZ1bmN0aW9uLlxuICAgICAgY29uc3QgY3VycmVudFVzZXJQcm92aWRlciA9ICgpID0+IHRoaXMucmVzb2x2ZTxQZXJzb25hTWFuYWdlcj4oJ1BlcnNvbmFNYW5hZ2VyJykuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpO1xuICAgICAgcmV0dXJuIG5ldyBQZXJzb25hSW1wb3J0ZXIoXG4gICAgICAgIHBlcnNvbmFzRGlyLFxuICAgICAgICBjdXJyZW50VXNlclByb3ZpZGVyLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBHSVRIVUIgJiBDT0xMRUNUSU9OXG4gICAgdGhpcy5yZWdpc3RlcignR2l0SHViQ2xpZW50JywgKCkgPT4gbmV3IEdpdEh1YkNsaWVudChcbiAgICAgIHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUmF0ZUxpbWl0VHJhY2tlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YkF1dGhNYW5hZ2VyJywgKCkgPT4gbmV3IEdpdEh1YkF1dGhNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdBUElDYWNoZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvbkluZGV4TWFuYWdlcicsICgpID0+IG5ldyBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyKHtcbiAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbGxlY3Rpb25Ccm93c2VyJywgKCkgPT4gbmV3IENvbGxlY3Rpb25Ccm93c2VyKHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkNhY2hlJyksIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkluZGV4TWFuYWdlcicpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvblNlYXJjaCcsICgpID0+IG5ldyBDb2xsZWN0aW9uU2VhcmNoKFxuICAgICAgdGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkNhY2hlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25JbmRleENhY2hlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJzb25hRGV0YWlscycsICgpID0+IG5ldyBQZXJzb25hRGV0YWlscyh0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpKSk7XG5cbiAgICAvLyBQT1JURk9MSU8gJiBNQU5BR0VSU1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb01hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB1bmRlZmluZWRcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJzb25hTWFuYWdlcicsICgpID0+IG5ldyBQZXJzb25hTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdJbmRpY2F0b3JDb25maWcnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFJbXBvcnRlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTdGF0ZUNoYW5nZU5vdGlmaWVyJyksXG4gICAgICB7XG4gICAgICAgIGV2ZW50RGlzcGF0Y2hlcjogdGhpcy5yZXNvbHZlKCdFbGVtZW50RXZlbnREaXNwYXRjaGVyJyksXG4gICAgICAgIGVuYWJsZUZpbGVXYXRjaGVyOiB0cnVlLFxuICAgICAgICBhdXRvUmVsb2FkT25FeHRlcm5hbENoYW5nZTogdHJ1ZSxcbiAgICAgICAgZmlsZVdhdGNoU2VydmljZTogdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICAgIG1lbW9yeUJ1ZGdldDogdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgICBiYWNrdXBTZXJ2aWNlOiB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICAgfVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0luaXRpYWxpemF0aW9uU2VydmljZScsICgpID0+IG5ldyBJbml0aWFsaXphdGlvblNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFNYW5hZ2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJzb25hSW5kaWNhdG9yU2VydmljZScsICgpID0+IG5ldyBQZXJzb25hSW5kaWNhdG9yU2VydmljZShcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGVyc29uYU1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnSW5kaWNhdG9yQ29uZmlnJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1N0YXRlQ2hhbmdlTm90aWZpZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRWxlbWVudEV2ZW50RGlzcGF0Y2hlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignTWlncmF0aW9uTWFuYWdlcicsICgpID0+IG5ldyBNaWdyYXRpb25NYW5hZ2VyKHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRWxlbWVudEluc3RhbGxlcicsICgpID0+IG5ldyBFbGVtZW50SW5zdGFsbGVyKHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksIHtcbiAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdW5pZmllZEluZGV4TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdVbmlmaWVkSW5kZXhNYW5hZ2VyJyksXG4gICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicsICgpID0+IG5ldyBQb3J0Zm9saW9SZXBvTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJyksXG4gICAgICBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSgpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignR2l0SHViUG9ydGZvbGlvSW5kZXhlcicsICgpID0+IG5ldyBHaXRIdWJQb3J0Zm9saW9JbmRleGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicpXG4gICAgKSk7XG4gICAgXG4gICAgLy8gU0VSVklDRVNcbiAgICB0aGlzLnJlZ2lzdGVyKCdTZXJpYWxpemF0aW9uU2VydmljZScsICgpID0+IG5ldyBTZXJpYWxpemF0aW9uU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdNZXRhZGF0YVNlcnZpY2UnLCAoKSA9PiBuZXcgTWV0YWRhdGFTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1RyaWdnZXJWYWxpZGF0aW9uU2VydmljZScsICgpID0+IG5ldyBUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVmFsaWRhdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgVmFsaWRhdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRmlsZVdhdGNoU2VydmljZScsICgpID0+IG5ldyBGaWxlV2F0Y2hTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1ZhbGlkYXRpb25SZWdpc3RyeScsICgpID0+IG5ldyBWYWxpZGF0aW9uUmVnaXN0cnkoXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1RyaWdnZXJWYWxpZGF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKVxuICAgICkpO1xuXG4gICAgLy8gTE9HR0lOR1xuICAgIHRoaXMucmVnaXN0ZXIoJ0xvZ01hbmFnZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSBidWlsZExvZ01hbmFnZXJDb25maWcoZW52KTtcbiAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTG9nTWFuYWdlcihjb25maWcpO1xuXG4gICAgICAvLyBQaGFzZSAyOiBGaWxlTG9nU2lua1xuICAgICAgY29uc3QgZm9ybWF0dGVyID0gY29uZmlnLmxvZ0Zvcm1hdCA9PT0gJ2pzb25sJ1xuICAgICAgICA/IG5ldyBKc29ubEZvcm1hdHRlcigpXG4gICAgICAgIDogbmV3IFBsYWluVGV4dEZvcm1hdHRlcigpO1xuICAgICAgY29uc3QgZmlsZVNpbmsgPSBuZXcgRmlsZUxvZ1Npbmsoe1xuICAgICAgICBsb2dEaXI6IGNvbmZpZy5sb2dEaXIsXG4gICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgbWF4RmlsZVNpemU6IGNvbmZpZy5maWxlTWF4U2l6ZSxcbiAgICAgICAgcmV0ZW50aW9uRGF5czogY29uZmlnLnJldGVudGlvbkRheXMsXG4gICAgICAgIHNlY3VyaXR5UmV0ZW50aW9uRGF5czogY29uZmlnLnNlY3VyaXR5UmV0ZW50aW9uRGF5cyxcbiAgICAgICAgbWF4RGlyU2l6ZUJ5dGVzOiBjb25maWcubWF4RGlyU2l6ZUJ5dGVzLFxuICAgICAgICBtYXhGaWxlc1BlckNhdGVnb3J5OiBjb25maWcubWF4RmlsZXNQZXJDYXRlZ29yeSxcbiAgICAgIH0pO1xuICAgICAgbWFuYWdlci5yZWdpc3RlclNpbmsoZmlsZVNpbmspO1xuICAgICAgZmlsZVNpbmsuc3RhcnRDbGVhbnVwVGltZXIoKTtcblxuICAgICAgLy8gUGhhc2UgMzogTWVtb3J5TG9nU2lua1xuICAgICAgY29uc3QgbWVtb3J5U2luayA9IG5ldyBNZW1vcnlMb2dTaW5rKHtcbiAgICAgICAgYXBwQ2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlBcHBDYXBhY2l0eSxcbiAgICAgICAgc2VjdXJpdHlDYXBhY2l0eTogY29uZmlnLm1lbW9yeVNlY3VyaXR5Q2FwYWNpdHksXG4gICAgICAgIHBlcmZDYXBhY2l0eTogY29uZmlnLm1lbW9yeVBlcmZDYXBhY2l0eSxcbiAgICAgICAgdGVsZW1ldHJ5Q2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlUZWxlbWV0cnlDYXBhY2l0eSxcbiAgICAgIH0pO1xuICAgICAgbWFuYWdlci5yZWdpc3RlclNpbmsobWVtb3J5U2luayk7XG5cbiAgICAgIHRoaXMucmVnaXN0ZXIoJ01lbW9yeUxvZ1NpbmsnLCAoKSA9PiBtZW1vcnlTaW5rKTtcblxuICAgICAgLy8gU3RhcnR1cCBtYXJrZXIg4oCUIGZpcnN0IGVudHJ5IGluIGV2ZXJ5IHNlcnZlciBzZXNzaW9uXG4gICAgICBtYW5hZ2VyLmxvZyh7XG4gICAgICAgIGlkOiBtYW5hZ2VyLmdlbmVyYXRlSWQoKSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiAnYXBwbGljYXRpb24nLFxuICAgICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgICBzb3VyY2U6ICdEb2xsaG91c2VNQ1AnLFxuICAgICAgICBtZXNzYWdlOiBgRG9sbGhvdXNlTUNQIHYke1ZFUlNJT059IHN0YXJ0aW5nYCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHZlcnNpb246IFZFUlNJT04sXG4gICAgICAgICAgbG9nTGV2ZWw6IGNvbmZpZy5sb2dMZXZlbCxcbiAgICAgICAgICBsb2dGb3JtYXQ6IGNvbmZpZy5sb2dGb3JtYXQsXG4gICAgICAgICAgY29uc29sZTogZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRVxuICAgICAgICAgICAgPyBgaHR0cDovL2RvbGxob3VzZS5sb2NhbGhvc3Q6JHtlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlR9YFxuICAgICAgICAgICAgOiAnZGlzYWJsZWQnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBtYW5hZ2VyO1xuICAgIH0pO1xuXG4gICAgLy8gTUVUUklDUyBDT0xMRUNUSU9OXG4gICAgLy8gTWVtb3J5TWV0cmljc1NpbmsgaXMgcmVnaXN0ZXJlZCBzZXBhcmF0ZWx5IChub3QgYXMgYSBzaWRlIGVmZmVjdCBpbnNpZGVcbiAgICAvLyBNZXRyaWNzTWFuYWdlcidzIGZhY3RvcnkpIHNvIGl0J3MgYXZhaWxhYmxlIGluIHRoZSBjb250YWluZXIgcmVnYXJkbGVzc1xuICAgIC8vIG9mIE1ldHJpY3NNYW5hZ2VyIHJlc29sdXRpb24gb3JkZXIuXG4gICAgY29uc3QgbWV0cmljc0NvbmZpZyA9IGJ1aWxkTWV0cmljc01hbmFnZXJDb25maWcoZW52KTtcbiAgICBpZiAobWV0cmljc0NvbmZpZy5lbmFibGVkKSB7XG4gICAgICBjb25zdCBtZW1vcnlNZXRyaWNzU2luayA9IG5ldyBNZW1vcnlNZXRyaWNzU2luayhtZXRyaWNzQ29uZmlnLm1lbW9yeVNuYXBzaG90Q2FwYWNpdHkpO1xuICAgICAgdGhpcy5yZWdpc3RlcignTWVtb3J5TWV0cmljc1NpbmsnLCAoKSA9PiBtZW1vcnlNZXRyaWNzU2luayk7XG5cbiAgICAgIHRoaXMucmVnaXN0ZXIoJ01ldHJpY3NNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IE1ldHJpY3NNYW5hZ2VyKG1ldHJpY3NDb25maWcsIGxvZ2dlcik7XG4gICAgICAgIG1hbmFnZXIucmVnaXN0ZXJTaW5rKG1lbW9yeU1ldHJpY3NTaW5rKTtcbiAgICAgICAgcmV0dXJuIG1hbmFnZXI7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBURUxFTUVUUllcbiAgICB0aGlzLnJlZ2lzdGVyKCdPcGVyYXRpb25hbFRlbGVtZXRyeScsICgpID0+IG5ldyBPcGVyYXRpb25hbFRlbGVtZXRyeShcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcblxuICAgIC8vIEJBQ0tVUCBTRVJWSUNFIChJc3N1ZSAjNjU5OiBVbml2ZXJzYWwgYmFja3VwIGZvciBhbGwgZWxlbWVudCB0eXBlcylcbiAgICB0aGlzLnJlZ2lzdGVyKCdCYWNrdXBTZXJ2aWNlJywgKCkgPT4gbmV3IEJhY2t1cFNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAge1xuICAgICAgICBiYWNrdXBSb290RGlyOiBwYXRoLmpvaW4odGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJykuZ2V0QmFzZURpcigpLCAnLmJhY2t1cHMnKSxcbiAgICAgICAgbWF4QmFja3Vwc1BlckVsZW1lbnQ6IGdldFZhbGlkYXRlZE1heEJhY2t1cHNQZXJFbGVtZW50KCksXG4gICAgICAgIGVuYWJsZWQ6IFNUT1JBR0VfTEFZRVJfQ09ORklHLkJBQ0tVUFNfRU5BQkxFRCxcbiAgICAgIH1cbiAgICApKTtcblxuICAgIC8vIFBPTElDWSBFWFBPUlQgU0VSVklDRSAoSXNzdWUgIzc2MjogRXhwb3J0IHBvbGljaWVzIHRvIGJyaWRnZSlcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb2xpY3lFeHBvcnRTZXJ2aWNlJywgKCkgPT4gbmV3IFBvbGljeUV4cG9ydFNlcnZpY2Uoe1xuICAgICAgZ2V0QWN0aXZlRWxlbWVudHNGb3JQb2xpY3k6IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5yZXNvbHZlPEVsZW1lbnRDUlVESGFuZGxlcj4oJ0VsZW1lbnRDUlVESGFuZGxlcicpO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVyLmdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5KCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldFNlcnZlclZlcnNpb246ICgpID0+IFBBQ0tBR0VfVkVSU0lPTixcbiAgICB9KSk7XG5cbiAgICAvLyBFTEVNRU5UIE1BTkFHRVJTXG4gICAgdGhpcy5yZWdpc3RlcignU2tpbGxNYW5hZ2VyJywgKCkgPT4gbmV3IFNraWxsTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUZW1wbGF0ZU1hbmFnZXInLCAoKSA9PiBuZXcgVGVtcGxhdGVNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1NlcmlhbGl6YXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1RlbXBsYXRlUmVuZGVyZXInLCAoKSA9PiBuZXcgVGVtcGxhdGVSZW5kZXJlcih0aGlzLnJlc29sdmUoJ1RlbXBsYXRlTWFuYWdlcicpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQWdlbnRNYW5hZ2VyJywgKCkgPT4gbmV3IEFnZW50TWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpLmdldEJhc2VEaXIoKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdNZW1vcnlNYW5hZ2VyJywgKCkgPT4gbmV3IE1lbW9yeU1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2VyaWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5zZW1ibGVNYW5hZ2VyJywgKCkgPT4gbmV3IEVuc2VtYmxlTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICBNZW1vcnkuY29uZmlndXJlTWVtb3J5TWFuYWdlclJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpKTtcbiAgICAvLyBJc3N1ZSAjNTE6IENvbmZpZ3VyZSByZXRlbnRpb24gcG9saWN5IHJlc29sdmVyIGZvciBNZW1vcnkgY2xhc3NcbiAgICBNZW1vcnkuY29uZmlndXJlUmV0ZW50aW9uUG9saWN5UmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlJykpO1xuICAgIC8vIElzc3VlICMxMTE6IENvbmZpZ3VyZSBlbGVtZW50IG1hbmFnZXIgcmVzb2x2ZXIgZm9yIEFnZW50TWFuYWdlciAoZWxlbWVudC1hZ25vc3RpYyBhY3RpdmF0aW9uKVxuICAgIEFnZW50TWFuYWdlci5zZXRFbGVtZW50TWFuYWdlclJlc29sdmVyKChtYW5hZ2VyTmFtZTogc3RyaW5nKSA9PiB0aGlzLnJlc29sdmUobWFuYWdlck5hbWUpKTtcbiAgICAvLyBJc3N1ZSAjNDAyOiBDb25maWd1cmUgRGFuZ2VyWm9uZUVuZm9yY2VyIHJlc29sdmVyIGZvciBBZ2VudE1hbmFnZXIgKGF1dG9ub215IGV2YWx1YXRpb24pXG4gICAgQWdlbnRNYW5hZ2VyLnNldERhbmdlclpvbmVFbmZvcmNlclJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnRGFuZ2VyWm9uZUVuZm9yY2VyJykpO1xuICAgIC8vIElzc3VlICMxNDI6IENvbmZpZ3VyZSBWZXJpZmljYXRpb25TdG9yZSByZXNvbHZlciBmb3IgQWdlbnRNYW5hZ2VyIChkYW5nZXIgem9uZSB2ZXJpZmljYXRpb24pXG4gICAgQWdlbnRNYW5hZ2VyLnNldFZlcmlmaWNhdGlvblN0b3JlUmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25TdG9yZScpKTtcblxuICAgIC8vIFFVRVJZIFNFUlZJQ0VTIChJc3N1ZSAjMzg6IFBhZ2luYXRpb24sIGZpbHRlcmluZywgc29ydGluZylcbiAgICAvLyBUaGVzZSBzZXJ2aWNlcyBhcmUgZWxlbWVudC1hZ25vc3RpYyBhbmQgY2FuIGJlIHVzZWQgd2l0aCBhbnkgZWxlbWVudCB0eXBlXG4gICAgdGhpcy5yZWdpc3RlcignUGFnaW5hdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgUGFnaW5hdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRmlsdGVyU2VydmljZScsICgpID0+IG5ldyBGaWx0ZXJTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NvcnRTZXJ2aWNlJywgKCkgPT4gbmV3IFNvcnRTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRRdWVyeVNlcnZpY2UnLCAoKSA9PiBuZXcgRWxlbWVudFF1ZXJ5U2VydmljZShcbiAgICAgIHRoaXMucmVzb2x2ZTxQYWdpbmF0aW9uU2VydmljZT4oJ1BhZ2luYXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmU8RmlsdGVyU2VydmljZT4oJ0ZpbHRlclNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZTxTb3J0U2VydmljZT4oJ1NvcnRTZXJ2aWNlJylcbiAgICApKTtcblxuICAgIC8vIENPTlZFUlRFUlNcbiAgICB0aGlzLnJlZ2lzdGVyKCdBbnRocm9waWNUb0RvbGxob3VzZUNvbnZlcnRlcicsICgpID0+IG5ldyBBbnRocm9waWNUb0RvbGxob3VzZUNvbnZlcnRlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlcicsICgpID0+IG5ldyBEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlcigpKTtcblxuICAgIC8vIFNFQ1VSSVRZIFNFUlZJQ0VTXG4gICAgLy8gSXNzdWUgIzQwMjogRGFuZ2VyWm9uZUVuZm9yY2VyIGFzIERJLW1hbmFnZWQgc2luZ2xldG9uIChyZXBsYWNlcyBtb2R1bGUtbGV2ZWwgc2luZ2xldG9uKVxuICAgIHRoaXMucmVnaXN0ZXIoJ0RhbmdlclpvbmVFbmZvcmNlcicsICgpID0+IG5ldyBEYW5nZXJab25lRW5mb3JjZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG4gICAgLy8gSXNzdWUgIzU5ODogQWN0aXZhdGlvblN0b3JlIGZvciBwZXItc2Vzc2lvbiBhY3RpdmF0aW9uIHBlcnNpc3RlbmNlXG4gICAgdGhpcy5yZWdpc3RlcignQWN0aXZhdGlvblN0b3JlJywgKCkgPT4gbmV3IEFjdGl2YXRpb25TdG9yZShcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICAvLyBJc3N1ZSAjMTQyOiBWZXJpZmljYXRpb25TdG9yZSBmb3IgZGFuZ2VyIHpvbmUgY2hhbGxlbmdlIGNvZGVzIChzZXJ2ZXItc2lkZSlcbiAgICB0aGlzLnJlZ2lzdGVyKCdWZXJpZmljYXRpb25TdG9yZScsICgpID0+IG5ldyBWZXJpZmljYXRpb25TdG9yZSgpKTtcbiAgICAvLyBJc3N1ZSAjNTIyOiBOb24tYmxvY2tpbmcgT1MgZGlhbG9nIG5vdGlmaWVyIGZvciB2ZXJpZmljYXRpb24gY29kZXNcbiAgICB0aGlzLnJlZ2lzdGVyKCdWZXJpZmljYXRpb25Ob3RpZmllcicsICgpID0+IG5ldyBWZXJpZmljYXRpb25Ob3RpZmllcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUb2tlbk1hbmFnZXInLCAoKSA9PiBuZXcgVG9rZW5NYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BhdHRlcm5FbmNyeXB0b3InLCAoKSA9PiBuZXcgUGF0dGVybkVuY3J5cHRvcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb250ZXh0VHJhY2tlcicsICgpID0+IG5ldyBDb250ZXh0VHJhY2tlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQYXR0ZXJuRGVjcnlwdG9yJywgKCkgPT4gbmV3IFBhdHRlcm5EZWNyeXB0b3IoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BhdHRlcm5FbmNyeXB0b3InKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29udGV4dFRyYWNrZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BhdHRlcm5FeHRyYWN0b3InLCAoKSA9PiBuZXcgUGF0dGVybkV4dHJhY3RvcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGF0dGVybkVuY3J5cHRvcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQmFja2dyb3VuZFZhbGlkYXRvcicsICgpID0+IG5ldyBCYWNrZ3JvdW5kVmFsaWRhdG9yKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQYXR0ZXJuRXh0cmFjdG9yJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NlY3VyaXR5VGVsZW1ldHJ5JywgKCkgPT4gbmV3IFNlY3VyaXR5VGVsZW1ldHJ5KCkpO1xuICAgIENvbnRlbnRWYWxpZGF0b3IuY29uZmlndXJlVGVsZW1ldHJ5UmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdTZWN1cml0eVRlbGVtZXRyeScpKTtcblxuICAgIC8vIE5MUCAmIElOREVYSU5HXG4gICAgdGhpcy5yZWdpc3RlcignTkxQU2NvcmluZ01hbmFnZXInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4Q29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxJbmRleENvbmZpZ01hbmFnZXI+KCdJbmRleENvbmZpZ01hbmFnZXInKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gaW5kZXhDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuICAgICAgICByZXR1cm4gbmV3IE5MUFNjb3JpbmdNYW5hZ2VyKHtcbiAgICAgICAgICAgIGNhY2hlRXhwaXJ5OiBjb25maWcubmxwLmNhY2hlRXhwaXJ5TWludXRlcyAqIDYwICogMTAwMCxcbiAgICAgICAgICAgIG1pblRva2VuTGVuZ3RoOiBjb25maWcubmxwLm1pblRva2VuTGVuZ3RoLFxuICAgICAgICAgICAgZW50cm9weUJhbmRzOiBjb25maWcubmxwLmVudHJvcHlCYW5kcyxcbiAgICAgICAgICAgIGphY2NhcmRUaHJlc2hvbGRzOiBjb25maWcubmxwLmphY2NhcmRUaHJlc2hvbGRzXG4gICAgICAgIH0sIGluZGV4Q29uZmlnTWFuYWdlcik7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignVmVyYlRyaWdnZXJNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleENvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8SW5kZXhDb25maWdNYW5hZ2VyPignSW5kZXhDb25maWdNYW5hZ2VyJyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGluZGV4Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBWZXJiVHJpZ2dlck1hbmFnZXIoe1xuICAgICAgICAgICAgY29uZmlkZW5jZVRocmVzaG9sZDogY29uZmlnLnZlcmJzLmNvbmZpZGVuY2VUaHJlc2hvbGQsXG4gICAgICAgICAgICBtYXhFbGVtZW50c1BlclZlcmI6IGNvbmZpZy52ZXJicy5tYXhFbGVtZW50c1BlclZlcmIsXG4gICAgICAgICAgICBpbmNsdWRlU3lub255bXM6IGNvbmZpZy52ZXJicy5pbmNsdWRlU3lub255bXNcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignUmVsYXRpb25zaGlwTWFuYWdlcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhDb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBpbmRleENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHJldHVybiBuZXcgUmVsYXRpb25zaGlwTWFuYWdlcih7XG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgICBtaW5Db25maWRlbmNlOiBjb25maWcucGVyZm9ybWFuY2Uuc2ltaWxhcml0eVRocmVzaG9sZCxcbiAgICAgICAgICAgICAgICBlbmFibGVBdXRvRGlzY292ZXJ5OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5kZXhDb25maWdNYW5hZ2VyLFxuICAgICAgICAgICAgdmVyYlRyaWdnZXJNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1ZlcmJUcmlnZ2VyTWFuYWdlcicpLFxuICAgICAgICAgICAgbmxwU2NvcmluZzogdGhpcy5yZXNvbHZlKCdOTFBTY29yaW5nTWFuYWdlcicpLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvSW5kZXhNYW5hZ2VyKHRoaXMucmVzb2x2ZSgnSW5kZXhDb25maWdNYW5hZ2VyJyksIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5oYW5jZWRJbmRleEhlbHBlcnMnLCAoKSA9PiBuZXcgRGVmYXVsdEVuaGFuY2VkSW5kZXhIZWxwZXJzKFxuICAgICAgbmV3IEVsZW1lbnREZWZpbml0aW9uQnVpbGRlcigpLFxuICAgICAgbmV3IFNlbWFudGljUmVsYXRpb25zaGlwU2VydmljZSh7XG4gICAgICAgIG5scFNjb3Jpbmc6IHRoaXMucmVzb2x2ZSgnTkxQU2NvcmluZ01hbmFnZXInKSxcbiAgICAgICAgcmVsYXRpb25zaGlwTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdSZWxhdGlvbnNoaXBNYW5hZ2VyJylcbiAgICAgIH0pLFxuICAgICAgKGNvbnRleHQpID0+IG5ldyBBY3Rpb25UcmlnZ2VyRXh0cmFjdG9yKGNvbnRleHQpLFxuICAgICAgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdHJhY2tlciA9IG5ldyBUcmlnZ2VyTWV0cmljc1RyYWNrZXIob3B0aW9ucyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdHJhY2tlci5hZGRMb2dMaXN0ZW5lcihnZXRUcmlnZ2VyTWV0cmljc0xvZ0xpc3RlbmVyKFxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKCdMb2dNYW5hZ2VyJyksXG4gICAgICAgICAgICB0aGlzLnJlc29sdmUoJ0NvbnRleHRUcmFja2VyJylcbiAgICAgICAgICApKTtcbiAgICAgICAgfSBjYXRjaCB7IC8qIExvZ01hbmFnZXIgbm90IHlldCByZWdpc3RlcmVkICovIH1cbiAgICAgICAgcmV0dXJuIHRyYWNrZXI7XG4gICAgICB9XG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5oYW5jZWRJbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgRW5oYW5jZWRJbmRleE1hbmFnZXIoXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnSW5kZXhDb25maWdNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ05MUFNjb3JpbmdNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnVmVyYlRyaWdnZXJNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnUmVsYXRpb25zaGlwTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0VuaGFuY2VkSW5kZXhIZWxwZXJzJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uSW5kZXhDYWNoZScsICgpID0+IG5ldyBDb2xsZWN0aW9uSW5kZXhDYWNoZShcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ1BlcmZvcm1hbmNlTW9uaXRvcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVW5pZmllZEluZGV4TWFuYWdlcicsICgpID0+IG5ldyBVbmlmaWVkSW5kZXhNYW5hZ2VyKHtcbiAgICAgICAgcG9ydGZvbGlvSW5kZXhNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicpLFxuICAgICAgICBnaXRodWJJbmRleGVyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXInKSxcbiAgICAgICAgY29sbGVjdGlvbkluZGV4Q2FjaGU6IHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkluZGV4Q2FjaGUnKSxcbiAgICAgICAgZ2l0aHViQ2xpZW50OiB0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpLFxuICAgICAgICBhcGlDYWNoZTogdGhpcy5yZXNvbHZlKCdBUElDYWNoZScpLFxuICAgICAgICByYXRlTGltaXRUcmFja2VyOiB0aGlzLnJlc29sdmUoJ1JhdGVMaW1pdFRyYWNrZXInKSxcbiAgICAgICAgcGVyZm9ybWFuY2VNb25pdG9yOiB0aGlzLnJlc29sdmUoJ1BlcmZvcm1hbmNlTW9uaXRvcicpLFxuICAgICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgIH0pKTtcblxuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb1N5bmNDb21wYXJlcicsICgpID0+IG5ldyBQb3J0Zm9saW9TeW5jQ29tcGFyZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvRG93bmxvYWRlcicsICgpID0+IG5ldyBQb3J0Zm9saW9Eb3dubG9hZGVyKCkpO1xuXG4gICAgLy8gU1lOQyAmIFRPT0xTXG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvUHVsbEhhbmRsZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvUHVsbEhhbmRsZXIoe1xuICAgICAgICBwb3J0Zm9saW9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgICAgaW5kZXhNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicpLFxuICAgICAgICBnaXRodWJJbmRleGVyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXInKSxcbiAgICAgICAgcG9ydGZvbGlvUmVwb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUmVwb01hbmFnZXInKSxcbiAgICAgICAgc3luY0NvbXBhcmVyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1N5bmNDb21wYXJlcicpLFxuICAgICAgICBkb3dubG9hZGVyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0Rvd25sb2FkZXInKSxcbiAgICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICAgIHRva2VuTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKSxcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignU3VibWl0VG9Qb3J0Zm9saW9Ub29sJywgKCkgPT4gbmV3IFN1Ym1pdFRvUG9ydGZvbGlvVG9vbCh0aGlzLnJlc29sdmUoJ0FQSUNhY2hlJyksIHtcbiAgICAgICAgYXV0aE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnR2l0SHViQXV0aE1hbmFnZXInKSxcbiAgICAgICAgcG9ydGZvbGlvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb0luZGV4TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgICAgcG9ydGZvbGlvUmVwb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUmVwb01hbmFnZXInKSxcbiAgICAgICAgcmF0ZUxpbWl0ZXI6IHRoaXMucmVzb2x2ZSgnR2l0SHViUmF0ZUxpbWl0ZXInKSxcbiAgICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICAgIHRva2VuTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9TeW5jTWFuYWdlcicsICgpID0+IG5ldyBQb3J0Zm9saW9TeW5jTWFuYWdlcih7XG4gICAgICAgIGNvbmZpZ01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgICBwb3J0Zm9saW9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgICAgcG9ydGZvbGlvUmVwb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUmVwb01hbmFnZXInKSxcbiAgICAgICAgaW5kZXhlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJQb3J0Zm9saW9JbmRleGVyJyksXG4gICAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgICB0b2tlbk1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJylcbiAgICB9KSk7XG5cbiAgICAvLyBTRVJWRVJcbiAgICB0aGlzLnJlZ2lzdGVyKCdTZXJ2ZXJTZXR1cCcsICgpID0+IG5ldyBTZXJ2ZXJTZXR1cChcbiAgICAgIHRoaXMucmVzb2x2ZTxDb250ZXh0VHJhY2tlcj4oJ0NvbnRleHRUcmFja2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdTZXJ2ZXJTdGFydHVwJywgKCkgPT4gbmV3IFNlcnZlclN0YXJ0dXAoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWlncmF0aW9uTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZW1vcnlNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ09wZXJhdGlvbmFsVGVsZW1ldHJ5JylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdCdWlsZEluZm9TZXJ2aWNlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmljZSA9IG5ldyBCdWlsZEluZm9TZXJ2aWNlKHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJykpO1xuICAgICAgLy8gSXNzdWUgIzcwNjogV2lyZSBzdGFydHVwIGluc3RydW1lbnRhdGlvblxuICAgICAgc2VydmljZS5zZXRTdGFydHVwVGltZXIodGhpcy5yZXNvbHZlPFN0YXJ0dXBUaW1lcj4oJ1N0YXJ0dXBUaW1lcicpKTtcbiAgICAgIHNlcnZpY2Uuc2V0RGVmZXJyZWRTZXR1cENoZWNrZXIoKCkgPT4gdGhpcy5kZWZlcnJlZFNldHVwQ29tcGxldGUpO1xuICAgICAgcmV0dXJuIHNlcnZpY2U7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGVyZm9ybWFuY2VNb25pdG9yJywgKCkgPT4ge1xuICAgICAgY29uc3QgbW9uaXRvciA9IG5ldyBQZXJmb3JtYW5jZU1vbml0b3IoKTtcbiAgICAgIG1vbml0b3Iuc3RhcnRNb25pdG9yaW5nKCk7XG4gICAgICByZXR1cm4gbW9uaXRvcjtcbiAgICB9KTtcblxuICAgIHRoaXMucmVnaXN0ZXIoJ09wZXJhdGlvbk1ldHJpY3NUcmFja2VyJywgKCkgPT4gbmV3IE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyKCksIHsgc2luZ2xldG9uOiB0cnVlIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcicsICgpID0+IG5ldyBHYXRla2VlcGVyTWV0cmljc1RyYWNrZXIoKSwgeyBzaW5nbGV0b246IHRydWUgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGVyc29uYXNEaXIoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYXNEaXI7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBwb3J0Zm9saW8g4oCUIGNyaXRpY2FsIHBhdGggb25seS5cbiAgICpcbiAgICogSXNzdWUgIzcwNjogU3BsaXQgZnJvbSB0aGUgb3JpZ2luYWwgbW9ub2xpdGhpYyBwcmVwYXJlUG9ydGZvbGlvKCkuXG4gICAqIE9ubHkgd29yayByZXF1aXJlZCBiZWZvcmUgTUNQIGNvbm5lY3QoKSBydW5zIGhlcmUuIE5vbi1jcml0aWNhbCB3b3JrXG4gICAqIChtZW1vcnkgYXV0by1sb2FkLCBhY3RpdmF0aW9uIHJlc3RvcmUsIGxvZyBob29rcywgZGFuZ2VyIHpvbmUgaW5pdClcbiAgICogaXMgZGVmZXJyZWQgdG8gY29tcGxldGVEZWZlcnJlZFNldHVwKCkgd2hpY2ggcnVucyBwb3N0LWNvbm5lY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJlcGFyZVBvcnRmb2xpbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IHRoaXMucmVzb2x2ZTxTdGFydHVwVGltZXI+KCdTdGFydHVwVGltZXInKTtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG1pZ3JhdGlvbk1hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWlncmF0aW9uTWFuYWdlcj4oJ01pZ3JhdGlvbk1hbmFnZXInKTtcbiAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJyk7XG5cbiAgICAvLyAtLS0gY29uZmlnX2NoZWNrcyAoY3JpdGljYWwpIC0tLVxuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ2NvbmZpZ19jaGVja3MnLCB0cnVlKTtcblxuICAgIC8vIFBFUkZPUk1BTkNFIE9QVElNSVpBVElPTjogUnVuIGluZGVwZW5kZW50IGNoZWNrcyBpbiBwYXJhbGxlbCAoNDAtNjAlIGZhc3RlciBzdGFydHVwKVxuICAgIC8vIFVzZSBQcm9taXNlLmFsbFNldHRsZWQgdG8gY2FwdHVyZSBhbGwgY2hlY2sgcmVzdWx0cywgZXZlbiBpZiBvbmUgZmFpbHNcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgIG1pZ3JhdGlvbk1hbmFnZXIubmVlZHNNaWdyYXRpb24oKSxcbiAgICAgIHBvcnRmb2xpb01hbmFnZXIuZXhpc3RzKClcbiAgICBdKTtcblxuICAgIC8vIEV4dHJhY3QgcmVzdWx0cyBhbmQgY29sbGVjdCBhbnkgZXJyb3JzXG4gICAgY29uc3QgY2hlY2tFcnJvcnM6IEFycmF5PHsgY2hlY2s6IHN0cmluZzsgZXJyb3I6IEVycm9yIH0+ID0gW107XG5cbiAgICBsZXQgbmVlZHNNaWdyYXRpb24gPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0c1swXS5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBuZWVkc01pZ3JhdGlvbiA9IHJlc3VsdHNbMF0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrRXJyb3JzLnB1c2goe1xuICAgICAgICBjaGVjazogJ21pZ3JhdGlvbicsXG4gICAgICAgIGVycm9yOiByZXN1bHRzWzBdLnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVzdWx0c1swXS5yZWFzb24gOiBuZXcgRXJyb3IoU3RyaW5nKHJlc3VsdHNbMF0ucmVhc29uKSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBwb3J0Zm9saW9FeGlzdHMgPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0c1sxXS5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBwb3J0Zm9saW9FeGlzdHMgPSByZXN1bHRzWzFdLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja0Vycm9ycy5wdXNoKHtcbiAgICAgICAgY2hlY2s6ICdwb3J0Zm9saW8nLFxuICAgICAgICBlcnJvcjogcmVzdWx0c1sxXS5yZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlc3VsdHNbMV0ucmVhc29uIDogbmV3IEVycm9yKFN0cmluZyhyZXN1bHRzWzFdLnJlYXNvbikpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBib3RoIGNoZWNrcyBmYWlsZWQsIHRocm93IGNvbXByZWhlbnNpdmUgZXJyb3JcbiAgICBpZiAoY2hlY2tFcnJvcnMubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gY2hlY2tFcnJvcnMubWFwKGUgPT4gYCR7ZS5jaGVja306ICR7ZS5lcnJvci5tZXNzYWdlfWApLmpvaW4oJzsgJyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvcnRmb2xpbyBwcmVwYXJhdGlvbiBmYWlsZWQgLSBhbGwgY2hlY2tzIGZhaWxlZDogJHtlcnJvck1lc3NhZ2VzfWApO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgb25lIGNoZWNrIGZhaWxlZCwgbG9nIHdhcm5pbmcgYnV0IGNvbnRpbnVlXG4gICAgaWYgKGNoZWNrRXJyb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgbG9nZ2VyLndhcm4oYFBvcnRmb2xpbyBjaGVjayBmYWlsZWQgYnV0IGNvbnRpbnVpbmc6ICR7Y2hlY2tFcnJvcnNbMF0uY2hlY2t9IC0gJHtjaGVja0Vycm9yc1swXS5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIHRpbWVyLmVuZFBoYXNlKCdjb25maWdfY2hlY2tzJyk7XG5cbiAgICAvLyAtLS0gbWlncmF0aW9uIChjcml0aWNhbCwgY29uZGl0aW9uYWwpIC0tLVxuICAgIGlmIChuZWVkc01pZ3JhdGlvbikge1xuICAgICAgdGltZXIuc3RhcnRQaGFzZSgnbWlncmF0aW9uJywgdHJ1ZSk7XG4gICAgICBsb2dnZXIuaW5mbyhcIkxlZ2FjeSBwZXJzb25hcyBkZXRlY3RlZC4gU3RhcnRpbmcgbWlncmF0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWlncmF0aW9uTWFuYWdlci5taWdyYXRlKHsgYmFja3VwOiB0cnVlIH0pO1xuXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFN1Y2Nlc3NmdWxseSBtaWdyYXRlZCAke3Jlc3VsdC5taWdyYXRlZENvdW50fSBwZXJzb25hc2ApO1xuICAgICAgICBpZiAocmVzdWx0LmJhY2tlZFVwICYmIHJlc3VsdC5iYWNrdXBQYXRoKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYEJhY2t1cCBjcmVhdGVkIGF0OiAke3Jlc3VsdC5iYWNrdXBQYXRofWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJNaWdyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzOlwiKTtcbiAgICAgICAgcmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnIpID0+IGxvZ2dlci5lcnJvcihgICAtICR7ZXJyfWApKTtcbiAgICAgIH1cbiAgICAgIHRpbWVyLmVuZFBoYXNlKCdtaWdyYXRpb24nKTtcbiAgICB9XG5cbiAgICAvLyAtLS0gcG9ydGZvbGlvX2luaXQgKGNyaXRpY2FsLCBjb25kaXRpb25hbCkgLS0tXG4gICAgaWYgKCFwb3J0Zm9saW9FeGlzdHMpIHtcbiAgICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ3BvcnRmb2xpb19pbml0JywgdHJ1ZSk7XG4gICAgICBsb2dnZXIuaW5mbyhcIkNyZWF0aW5nIHBvcnRmb2xpbyBkaXJlY3Rvcnkgc3RydWN0dXJlLi4uXCIpO1xuICAgICAgYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5pbml0aWFsaXplKCk7XG4gICAgICB0aW1lci5lbmRQaGFzZSgncG9ydGZvbGlvX2luaXQnKTtcbiAgICB9XG5cbiAgICAvLyBQRVJGT1JNQU5DRSBPUFRJTUlaQVRJT046IEluaXRpYWxpemUgY29sbGVjdGlvbiBjYWNoZSBpbiBiYWNrZ3JvdW5kIChub24tYmxvY2tpbmcpXG4gICAgLy8gVGhpcyBpcyBzYWZlIGJlY2F1c2UgY29sbGVjdGlvbiBjYWNoZSBpcyBub3QgY3JpdGljYWwgZm9yIHN0YXJ0dXBcbiAgICB0aGlzLmluaXRpYWxpemVDb2xsZWN0aW9uQ2FjaGUoKS5jYXRjaChlcnIgPT5cbiAgICAgIGxvZ2dlci53YXJuKCdCYWNrZ3JvdW5kIGNvbGxlY3Rpb24gY2FjaGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkICh3aWxsIHJldHJ5IG9uIGRlbWFuZCknLCBlcnIpXG4gICAgKTtcblxuICAgIHRoaXMucGVyc29uYXNEaXIgPSBwb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuUEVSU09OQSk7XG5cbiAgICAvLyAtLS0gY29uZmlnX21hbmFnZXIgKGNyaXRpY2FsKSAtLS1cbiAgICB0aW1lci5zdGFydFBoYXNlKCdjb25maWdfbWFuYWdlcicsIHRydWUpO1xuICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8Q29uZmlnTWFuYWdlcj4oJ0NvbmZpZ01hbmFnZXInKTtcbiAgICBhd2FpdCBjb25maWdNYW5hZ2VyLmluaXRpYWxpemUoKTtcbiAgICB0aW1lci5lbmRQaGFzZSgnY29uZmlnX21hbmFnZXInKTtcblxuICAgIGNvbnN0IGVsYXBzZWRUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBsb2dnZXIuaW5mbyhgW1N0YXJ0dXBdIENyaXRpY2FsIHBvcnRmb2xpbyBwYXRoIGNvbXBsZXRlZCBpbiAke2VsYXBzZWRUaW1lfW1zIChwZXJzb25hcyBkaXJlY3Rvcnk6ICR7dGhpcy5wZXJzb25hc0Rpcn0pYCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgbm9uLWNyaXRpY2FsIHNldHVwIGFmdGVyIE1DUCBjb25uZWN0KCkuXG4gICAqXG4gICAqIElzc3VlICM3MDY6IFRoZXNlIG9wZXJhdGlvbnMgd2VyZSBwcmV2aW91c2x5IGluIHByZXBhcmVQb3J0Zm9saW8oKSBidXQgYXJlXG4gICAqIG5vbi1mYXRhbCBhbmQgY2FuIHNhZmVseSBydW4gYWZ0ZXIgdGhlIHNlcnZlciBpcyBhY2NlcHRpbmcgY29ubmVjdGlvbnMuXG4gICAqIFRoaXMgc2hyaW5rcyB0aGUgY3JpdGljYWwgcGF0aCBieSAxMDAwLTM3MDBtcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZURlZmVycmVkU2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSB0aGlzLnJlc29sdmU8U3RhcnR1cFRpbWVyPignU3RhcnR1cFRpbWVyJyk7XG5cbiAgICAvLyBJc3N1ZSAjNzA2OiBUZXN0IGhvb2sg4oCUIGluamVjdCBhcnRpZmljaWFsIGRlbGF5IHRvIHNpbXVsYXRlIHNsb3cgZGVmZXJyZWQgc2V0dXAuXG4gICAgLy8gT25seSBhY3RpdmUgd2hlbiBET0xMSE9VU0VfVEVTVF9ERUZFUlJFRF9ERUxBWV9NUyBpcyBzZXQgKGludGVncmF0aW9uIHRlc3RzKS5cbiAgICBjb25zdCB0ZXN0RGVsYXkgPSBwYXJzZUludChwcm9jZXNzLmVudi5ET0xMSE9VU0VfVEVTVF9ERUZFUlJFRF9ERUxBWV9NUyB8fCAnMCcsIDEwKTtcbiAgICBpZiAodGVzdERlbGF5ID4gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFtTdGFydHVwXSBUZXN0IGRlbGF5IGluamVjdGVkOiAke3Rlc3REZWxheX1tc2ApO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRlc3REZWxheSkpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuY29tcGxldGVTaW5rU2V0dXAodGltZXIpO1xuICAgIGF3YWl0IHRoaXMuY29tcGxldGVDb25zb2xlU2V0dXAodGltZXIpO1xuXG4gICAgdGhpcy5kZWZlcnJlZFNldHVwQ29tcGxldGUgPSB0cnVlO1xuXG4gICAgY29uc3QgcmVwb3J0ID0gdGltZXIuZ2V0UmVwb3J0KCk7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgW1N0YXJ0dXBdIERlZmVycmVkIHNldHVwIGNvbXBsZXRlZCBpbiAke3JlcG9ydC5kZWZlcnJlZE1zfW1zIGAgK1xuICAgICAgYCh0b3RhbCBzdGFydHVwOiAke3JlcG9ydC50b3RhbE1zfW1zLCBjcml0aWNhbDogJHtyZXBvcnQuY3JpdGljYWxQYXRoTXN9bXMpYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2lyZSBzaW5rcywgaG9va3MsIGNvbGxlY3RvcnMsIGFuZCBzZWN1cml0eSDigJQgZXZlcnl0aGluZyBFWENFUFRcbiAgICogdGhlIHdlYiBjb25zb2xlIGxlYWRlciBlbGVjdGlvbiBhbmQgcGVybWlzc2lvbiBzZXJ2ZXIuXG4gICAqXG4gICAqIENhbGxlZCBieSBjb21wbGV0ZURlZmVycmVkU2V0dXAoKSBpbiBNQ1Agc3RkaW8gbW9kZSwgYW5kIGRpcmVjdGx5XG4gICAqIGJ5IHRoZSAtLXdlYiBzdGFuZGFsb25lIHBhdGggd2hpY2ggSVMgdGhlIHNlcnZlciAoIzE4NjYpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlU2lua1NldHVwKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZE1lbW9yeUF1dG9sb2FkKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkQWN0aXZhdGlvblJlc3RvcmUodGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRQb2xpY3lFeHBvcnQoKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkTG9nSG9va3ModGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRNZXRyaWNzQ29sbGVjdG9ycyh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZERhbmdlclpvbmVJbml0KHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkUGF0dGVybkVuY3J5cHRpb24odGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRCYWNrZ3JvdW5kVmFsaWRhdG9yKHRpbWVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMZWFkZXIgZWxlY3Rpb24sIHdlYiBjb25zb2xlIHNlcnZlciwgYW5kIHBlcm1pc3Npb24gc2VydmVyLlxuICAgKiBPbmx5IGNhbGxlZCBpbiBNQ1Agc3RkaW8gbW9kZSDigJQgLS13ZWIgc3RhbmRhbG9uZSBtb2RlIElTIHRoZSBzZXJ2ZXIgKCMxODY2KS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZUNvbnNvbGVTZXR1cCh0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFN3ZWVwIHN0YWxlIHBvcnQgZmlsZXMgZnJvbSBwcmlvciBzZXNzaW9ucyBiZWZvcmUgYW55IHBvcnQgb3BlcmF0aW9ucyAoIzE4NTYpLlxuICAgIC8vIFJ1bnMgdW5jb25kaXRpb25hbGx5IOKAlCBzdGFsZSBmaWxlcyBhY2N1bXVsYXRlIHJlZ2FyZGxlc3Mgb2YgRE9MTEhPVVNFX1dFQl9DT05TT0xFLlxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHN3ZWVwU3RhbGVQb3J0RmlsZXMgfSA9IGF3YWl0IGltcG9ydCgnLi4vd2ViL3BvcnREaXNjb3ZlcnkuanMnKTtcbiAgICAgIGF3YWl0IHN3ZWVwU3RhbGVQb3J0RmlsZXMoKTtcbiAgICB9IGNhdGNoIHsgLyogc3dlZXAgZmFpbHVyZSBpcyBub24tZmF0YWwgKi8gfVxuXG4gICAgY29uc3QgY29uc29sZVJlc3VsdCA9IGF3YWl0IHRoaXMuZGVmZXJyZWRXZWJDb25zb2xlKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkUGVybWlzc2lvblNlcnZlcihjb25zb2xlUmVzdWx0LCB0aW1lcik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkTWVtb3J5QXV0b2xvYWQodGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lcj8uc3RhcnRQaGFzZSgnbWVtb3J5X2F1dG9sb2FkJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPENvbmZpZ01hbmFnZXI+KCdDb25maWdNYW5hZ2VyJyk7XG4gICAgICBjb25zdCBjb25maWcgPSBjb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuXG4gICAgICBpZiAoY29uZmlnLmF1dG9Mb2FkLmVuYWJsZWQpIHtcbiAgICAgICAgY29uc3QgbWVtb3J5TWFuYWdlciA9IHRoaXMucmVzb2x2ZTxNZW1vcnlNYW5hZ2VyPignTWVtb3J5TWFuYWdlcicpO1xuICAgICAgICBjb25zdCBhdXRvTG9hZFJlc3VsdCA9IGF3YWl0IG1lbW9yeU1hbmFnZXIubG9hZEFuZEFjdGl2YXRlQXV0b0xvYWRNZW1vcmllcygpO1xuXG4gICAgICAgIGlmIChhdXRvTG9hZFJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgYFtDb250YWluZXJdIEF1dG8tbG9hZCBjb21wbGV0ZWQgd2l0aCAke2F1dG9Mb2FkUmVzdWx0LmVycm9ycy5sZW5ndGh9IGVycm9yKHMpOmAsXG4gICAgICAgICAgICBhdXRvTG9hZFJlc3VsdC5lcnJvcnNcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgYFtDb250YWluZXJdIEF1dG8tbG9hZGVkICR7YXV0b0xvYWRSZXN1bHQubG9hZGVkfSBtZW1vcmllcyBgICtcbiAgICAgICAgICBgKH4ke2F1dG9Mb2FkUmVzdWx0LnRvdGFsVG9rZW5zfSB0b2tlbnMpLCAke2F1dG9Mb2FkUmVzdWx0LnNraXBwZWR9IHNraXBwZWRgXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1tDb250YWluZXJdIEF1dG8tbG9hZCBtZW1vcmllcyBkaXNhYmxlZCBpbiBjb25maWd1cmF0aW9uJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW0NvbnRhaW5lcl0gTWVtb3J5IGF1dG8tbG9hZCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lcj8uZW5kUGhhc2UoJ21lbW9yeV9hdXRvbG9hZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZEFjdGl2YXRpb25SZXN0b3JlKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ2FjdGl2YXRpb25fcmVzdG9yZScsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWN0aXZhdGlvblN0b3JlID0gdGhpcy5yZXNvbHZlPEFjdGl2YXRpb25TdG9yZT4oJ0FjdGl2YXRpb25TdG9yZScpO1xuICAgICAgYXdhaXQgYWN0aXZhdGlvblN0b3JlLmluaXRpYWxpemUoKTtcblxuICAgICAgaWYgKGFjdGl2YXRpb25TdG9yZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3RvcmVBY3RpdmF0aW9ucyhhY3RpdmF0aW9uU3RvcmUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gQWN0aXZhdGlvbiBzdGF0ZSByZXN0b3JhdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lcj8uZW5kUGhhc2UoJ2FjdGl2YXRpb25fcmVzdG9yZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFBvbGljeUV4cG9ydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcG9saWN5RXhwb3J0U2VydmljZSA9IHRoaXMucmVzb2x2ZTxQb2xpY3lFeHBvcnRTZXJ2aWNlPignUG9saWN5RXhwb3J0U2VydmljZScpO1xuICAgICAgYXdhaXQgcG9saWN5RXhwb3J0U2VydmljZS5leHBvcnRQb2xpY2llcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tDb250YWluZXJdIFBvbGljeSBleHBvcnQgc2tpcHBlZDonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZExvZ0hvb2tzKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ2xvZ19ob29rcycsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9nTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxMb2dNYW5hZ2VyPignTG9nTWFuYWdlcicpO1xuICAgICAgY29uc3QgbG9nQ2xlYW51cHMgPSB3aXJlTG9nSG9va3MobG9nTWFuYWdlciwgdGhpcyk7XG4gICAgICB0aGlzLnJlZ2lzdGVyKCdfbG9nSG9va0NsZWFudXBzJywgKCkgPT4gbG9nQ2xlYW51cHMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gRmFpbGVkIHRvIHdpcmUgbG9nIGhvb2tzOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXI/LmVuZFBoYXNlKCdsb2dfaG9va3MnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRNZXRyaWNzQ29sbGVjdG9ycyh0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCdtZXRyaWNzX2NvbGxlY3RvcnMnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldHJpY3NNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPE1ldHJpY3NNYW5hZ2VyPignTWV0cmljc01hbmFnZXInKTtcbiAgICAgIHRoaXMud2lyZU1ldHJpY3NDb2xsZWN0b3JzKG1ldHJpY3NNYW5hZ2VyKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnN0YXJ0KCk7XG4gICAgICBsb2dnZXIuaW5mbygnW0NvbnRhaW5lcl0gTWV0cmljcyBjb2xsZWN0aW9uIHN0YXJ0ZWQnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIE1ldHJpY3Mgd2lyaW5nIHNraXBwZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lcj8uZW5kUGhhc2UoJ21ldHJpY3NfY29sbGVjdG9ycycpO1xuICB9XG5cbiAgLyoqIFRyeSB0byByZXNvbHZlIGEgc2VydmljZSwgcmV0dXJuaW5nIHVuZGVmaW5lZCBpZiBub3QgcmVnaXN0ZXJlZCAqL1xuICBwcml2YXRlIHRyeVJlc29sdmU8VD4obmFtZTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHsgcmV0dXJuIHRoaXMucmVzb2x2ZTxUPihuYW1lKTsgfSBjYXRjaCB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgfVxuXG4gIC8qKiBXaXJlIFNTRSBicm9hZGNhc3Qgc2lua3MgZm9yIHRoZSB3ZWIgY29uc29sZSAqL1xuICBwcml2YXRlIHdpcmVTU0VCcm9hZGNhc3RzKFxuICAgIHdlYlJlc3VsdDogaW1wb3J0KCcuLi93ZWIvc2VydmVyLmpzJykuV2ViU2VydmVyUmVzdWx0LFxuICAgIG1ldHJpY3NTaW5rOiBNZW1vcnlNZXRyaWNzU2luayB8IHVuZGVmaW5lZCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHdlYlJlc3VsdC5sb2dCcm9hZGNhc3QpIHtcbiAgICAgIGNvbnN0IGxvZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TG9nTWFuYWdlcj4oJ0xvZ01hbmFnZXInKTtcbiAgICAgIGxvZ01hbmFnZXIucmVnaXN0ZXJTaW5rKG5ldyBXZWJTU0VMb2dTaW5rKHdlYlJlc3VsdC5sb2dCcm9hZGNhc3QpKTtcbiAgICB9XG4gICAgaWYgKHdlYlJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdCAmJiBtZXRyaWNzU2luaykge1xuICAgICAgY29uc3QgbWV0cmljc01hbmFnZXIgPSB0aGlzLnRyeVJlc29sdmU8TWV0cmljc01hbmFnZXI+KCdNZXRyaWNzTWFuYWdlcicpO1xuICAgICAgaWYgKG1ldHJpY3NNYW5hZ2VyKSB7XG4gICAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyU2luayhuZXcgV2ViU1NFTWV0cmljc1Npbmsod2ViUmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFdlYkNvbnNvbGUodGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPFVuaWZpZWRDb25zb2xlUmVzdWx0IHwgbnVsbD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCd3ZWJfY29uc29sZScsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgaWYgKCFlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFKSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgYWN0aXZhdGlvblN0b3JlID0gdGhpcy5yZXNvbHZlPEFjdGl2YXRpb25TdG9yZT4oJ0FjdGl2YXRpb25TdG9yZScpO1xuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gYWN0aXZhdGlvblN0b3JlLmdldFJ1bnRpbWVTZXNzaW9uSWQoKTtcbiAgICAgIGNvbnN0IHN0YWJsZVNlc3Npb25JZCA9IGFjdGl2YXRpb25TdG9yZS5nZXRTZXNzaW9uSWQoKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSB0aGlzLnJlc29sdmU8UG9ydGZvbGlvTWFuYWdlcj4oJ1BvcnRmb2xpb01hbmFnZXInKTtcbiAgICAgIGNvbnN0IG1lbW9yeVNpbmsgPSB0aGlzLnJlc29sdmU8TWVtb3J5TG9nU2luaz4oJ01lbW9yeUxvZ1NpbmsnKTtcbiAgICAgIGNvbnN0IG1ldHJpY3NTaW5rID0gdGhpcy50cnlSZXNvbHZlPE1lbW9yeU1ldHJpY3NTaW5rPignTWVtb3J5TWV0cmljc1NpbmsnKTtcbiAgICAgIGNvbnN0IG1jcEFxbEhhbmRsZXIgPSB0aGlzLnRyeVJlc29sdmU8TUNQQVFMSGFuZGxlcj4oJ21jcEFxbEhhbmRsZXInKTtcbiAgICAgIGNvbnN0IGxvZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TG9nTWFuYWdlcj4oJ0xvZ01hbmFnZXInKTtcblxuICAgICAgLy8gUmVzb2x2ZSBjb25zb2xlIHBvcnQ6IGNvbmZpZyBmaWxlIOKGkiBlbnYgdmFyIOKGkiBkZWZhdWx0ICgjMTg0MClcbiAgICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8Q29uZmlnTWFuYWdlcj4oJ0NvbmZpZ01hbmFnZXInKTtcbiAgICAgIGNvbnN0IGNvbmZpZ1BvcnQgPSBjb25maWdNYW5hZ2VyLmdldFNldHRpbmc8bnVtYmVyPignY29uc29sZS5wb3J0Jyk7XG5cbiAgICAgIGNvbnN0IHsgc3RhcnRVbmlmaWVkQ29uc29sZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi93ZWIvY29uc29sZS9VbmlmaWVkQ29uc29sZS5qcycpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnRVbmlmaWVkQ29uc29sZSh7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgc3RhYmxlU2Vzc2lvbklkLFxuICAgICAgICBwb3J0Zm9saW9EaXI6IHBvcnRmb2xpb01hbmFnZXIuZ2V0QmFzZURpcigpLFxuICAgICAgICBtZW1vcnlTaW5rLFxuICAgICAgICBtZXRyaWNzU2luayxcbiAgICAgICAgbWNwQXFsSGFuZGxlcixcbiAgICAgICAgcmVnaXN0ZXJMb2dTaW5rOiAoc2luaykgPT4gbG9nTWFuYWdlci5yZWdpc3RlclNpbmsoc2luayksXG4gICAgICAgIHdpcmVTU0VCcm9hZGNhc3RzOiAod2ViUmVzdWx0LCBtU2luaykgPT4gdGhpcy53aXJlU1NFQnJvYWRjYXN0cyh3ZWJSZXN1bHQsIG1TaW5rKSxcbiAgICAgICAgcG9ydDogY29uZmlnUG9ydCxcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgW0NvbnRhaW5lcl0gV2ViIGNvbnNvbGUgc3RhcnRlZCBhcyAke3Jlc3VsdC5yb2xlfWApO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIFdlYiBjb25zb2xlIHN0YXJ0dXAgZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aW1lcj8uZW5kUGhhc2UoJ3dlYl9jb25zb2xlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFBlcm1pc3Npb25TZXJ2ZXIoY29uc29sZVJlc3VsdDogVW5pZmllZENvbnNvbGVSZXN1bHQgfCBudWxsLCB0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCdwZXJtaXNzaW9uX3NlcnZlcicsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgaWYgKCFlbnYuRE9MTEhPVVNFX1BFUk1JU1NJT05fU0VSVkVSKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRhaW5lcl0gUGVybWlzc2lvbiBzZXJ2ZXIgZGlzYWJsZWQgdmlhIERPTExIT1VTRV9QRVJNSVNTSU9OX1NFUlZFUj1mYWxzZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1tDb250YWluZXJdIFBlcm1pc3Npb24gc2VydmVyIHNraXBwZWQg4oCUIHdlYiBjb25zb2xlIGlzIGRpc2FibGVkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gUGVybWlzc2lvbiByb3V0ZXMgYXJlIGFscmVhZHkgbW91bnRlZCBvbiB0aGUgdW5pZmllZCB3ZWIgY29uc29sZS5cbiAgICAgIC8vIFdlIGp1c3QgbmVlZCB0byB3cml0ZSB0aGUgYWN0aXZlIGxlYWRlciBwb3J0IHNvIHRoZSBQcmVUb29sVXNlIGhvb2tcbiAgICAgIC8vIHNjcmlwdCByZWFjaGVzIHRoZSBzYW1lIGNvbnNvbGUgaW5zdGFuY2UgdGhhdCBvd25zIHRoZSBsaXZlIGF1ZGl0IGZlZWQuXG4gICAgICBjb25zdCBwb3J0ID0gY29uc29sZVJlc3VsdD8ucm9sZSA9PT0gJ2xlYWRlcidcbiAgICAgICAgPyBjb25zb2xlUmVzdWx0LnBvcnRcbiAgICAgICAgOiBjb25zb2xlUmVzdWx0Py5lbGVjdGlvbi5sZWFkZXJJbmZvLnBvcnQ7XG5cbiAgICAgIGlmICghcG9ydCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1tDb250YWluZXJdIFBlcm1pc3Npb24gc2VydmVyIHNraXBwZWQg4oCUIG5vIGFjdGl2ZSB3ZWIgY29uc29sZSBwb3J0IGF2YWlsYWJsZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0TXMgPSBEYXRlLm5vdygpO1xuXG4gICAgICBjb25zdCB7IHdyaXRlUG9ydEZpbGUsIHJlZ2lzdGVyUG9ydENsZWFudXAgfSA9IGF3YWl0IGltcG9ydCgnLi4vYXV0by1kb2xsaG91c2UvcG9ydERpc2NvdmVyeS5qcycpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbQ29udGFpbmVyXSBXcml0aW5nIHBlcm1pc3Npb24gc2VydmVyIHBvcnQgZmlsZSBmb3IgcG9ydCAke3BvcnR9YCk7XG4gICAgICBhd2FpdCB3cml0ZVBvcnRGaWxlKHBvcnQpO1xuICAgICAgcmVnaXN0ZXJQb3J0Q2xlYW51cCgpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbQ29udGFpbmVyXSBQb3J0IGNsZWFudXAgaGFuZGxlcnMgcmVnaXN0ZXJlZGApO1xuXG4gICAgICBjb25zdCBlbGFwc2VkTXMgPSBEYXRlLm5vdygpIC0gc3RhcnRNcztcbiAgICAgIGxvZ2dlci5pbmZvKGBbQ29udGFpbmVyXSBQZXJtaXNzaW9uIHNlcnZlciBwb3J0IGZpbGUgd3JpdHRlbiAocG9ydCAke3BvcnR9LCAke2VsYXBzZWRNc31tcylgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIFBlcm1pc3Npb24gc2VydmVyIHN0YXJ0dXAgZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXI/LmVuZFBoYXNlKCdwZXJtaXNzaW9uX3NlcnZlcicpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZERhbmdlclpvbmVJbml0KHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ2Rhbmdlcl96b25lX2luaXQnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhbmdlclpvbmVFbmZvcmNlciA9IHRoaXMucmVzb2x2ZTxEYW5nZXJab25lRW5mb3JjZXI+KCdEYW5nZXJab25lRW5mb3JjZXInKTtcbiAgICAgIGF3YWl0IGRhbmdlclpvbmVFbmZvcmNlci5pbml0aWFsaXplKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBEYW5nZXJab25lRW5mb3JjZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXI/LmVuZFBoYXNlKCdkYW5nZXJfem9uZV9pbml0Jyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkUGF0dGVybkVuY3J5cHRpb24odGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lcj8uc3RhcnRQaGFzZSgncGF0dGVybl9lbmNyeXB0aW9uJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXR0ZXJuRW5jcnlwdG9yID0gdGhpcy5yZXNvbHZlKCdQYXR0ZXJuRW5jcnlwdG9yJykgYXMgUGF0dGVybkVuY3J5cHRvcjtcbiAgICAgIGF3YWl0IHBhdHRlcm5FbmNyeXB0b3IuaW5pdGlhbGl6ZSgpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJQYXR0ZXJuIGVuY3J5cHRpb24gaW5pdGlhbGl6ZWRcIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBQYXR0ZXJuIGVuY3J5cHRpb24gaW5pdGlhbGl6YXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXI/LmVuZFBoYXNlKCdwYXR0ZXJuX2VuY3J5cHRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRCYWNrZ3JvdW5kVmFsaWRhdG9yKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ2JhY2tncm91bmRfdmFsaWRhdG9yJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYWNrZ3JvdW5kVmFsaWRhdG9yID0gdGhpcy5yZXNvbHZlKCdCYWNrZ3JvdW5kVmFsaWRhdG9yJykgYXMgYW55O1xuICAgICAgYmFja2dyb3VuZFZhbGlkYXRvci5zdGFydCgpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJCYWNrZ3JvdW5kIHZhbGlkYXRvciBzdGFydGVkIGZvciBtZW1vcnkgc2VjdXJpdHlcIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBCYWNrZ3JvdW5kIHZhbGlkYXRvciBzdGFydCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lcj8uZW5kUGhhc2UoJ2JhY2tncm91bmRfdmFsaWRhdG9yJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSBwZXItc2Vzc2lvbiBhY3RpdmF0aW9uIHN0YXRlIGZyb20gdGhlIEFjdGl2YXRpb25TdG9yZS5cbiAgICogQ2FsbGVkIGR1cmluZyBwcmVwYXJlUG9ydGZvbGlvKCkgYWZ0ZXIgYXV0by1sb2FkIG1lbW9yaWVzLlxuICAgKlxuICAgKiBJc3N1ZSAjNTk4OiBFYWNoIGVsZW1lbnQgdHlwZSBpcyByZXN0b3JlZCBpbmRlcGVuZGVudGx5LlxuICAgKiBNaXNzaW5nIGVsZW1lbnRzIChkZWxldGVkIHNpbmNlIGxhc3Qgc2Vzc2lvbikgYXJlIHNraXBwZWQgYW5kIHBydW5lZC5cbiAgICogQXV0by1sb2FkZWQgbWVtb3JpZXMgYXJlIGRlZHVwbGljYXRlZCAobm90IGFjdGl2YXRlZCB0d2ljZSkuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc3RvcmVBY3RpdmF0aW9ucyhzdG9yZTogQWN0aXZhdGlvblN0b3JlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGVyc29uYU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8UGVyc29uYU1hbmFnZXI+KCdQZXJzb25hTWFuYWdlcicpO1xuICAgIGNvbnN0IHNraWxsTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxTa2lsbE1hbmFnZXI+KCdTa2lsbE1hbmFnZXInKTtcbiAgICBjb25zdCBhZ2VudE1hbmFnZXIgPSB0aGlzLnJlc29sdmU8QWdlbnRNYW5hZ2VyPignQWdlbnRNYW5hZ2VyJyk7XG4gICAgY29uc3QgbWVtb3J5TWFuYWdlciA9IHRoaXMucmVzb2x2ZTxNZW1vcnlNYW5hZ2VyPignTWVtb3J5TWFuYWdlcicpO1xuICAgIGNvbnN0IGVuc2VtYmxlTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxFbnNlbWJsZU1hbmFnZXI+KCdFbnNlbWJsZU1hbmFnZXInKTtcblxuICAgIGxldCByZXN0b3JlZENvdW50ID0gMDtcbiAgICBsZXQgc2tpcHBlZENvdW50ID0gMDtcblxuICAgIC8vIFJlc3RvcmUgcGVyc29uYXMgKHVzZXMgZmlsZW5hbWUgaWYgYXZhaWxhYmxlLCBmYWxscyBiYWNrIHRvIG5hbWUpXG4gICAgLy8gSXNzdWUgIzg0MzogYWN0aXZhdGVQZXJzb25hKCkgaXMgbm93IGFzeW5jIOKAlCB1c2VzIGRpc2sgZmFsbGJhY2sgZm9yIGNhY2hlIG1pc3Nlc1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygncGVyc29uYScpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpZGVudGlmaWVyID0gYWN0aXZhdGlvbi5maWxlbmFtZSB8fCBhY3RpdmF0aW9uLm5hbWU7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcnNvbmFNYW5hZ2VyLmFjdGl2YXRlUGVyc29uYShpZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIHBlcnNvbmEgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ3BlcnNvbmEnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBTa2lwcGluZyBmYWlsZWQgcGVyc29uYSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ3BlcnNvbmEnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIHNraWxsc1xuICAgIC8vIE5PVEU6IGFjdGl2YXRlU2tpbGwoKSByZXR1cm5zIHtzdWNjZXNzLCBtZXNzYWdlfSDigJQgaXQgbmV2ZXIgdGhyb3dzIG9uIG5vdC1mb3VuZC5cbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ3NraWxsJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNraWxsTWFuYWdlci5hY3RpdmF0ZVNraWxsKGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBza2lsbCAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignc2tpbGwnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBTa2lwcGluZyBmYWlsZWQgc2tpbGwgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdza2lsbCcsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgYWdlbnRzXG4gICAgZm9yIChjb25zdCBhY3RpdmF0aW9uIG9mIHN0b3JlLmdldEFjdGl2YXRpb25zKCdhZ2VudCcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhZ2VudE1hbmFnZXIuYWN0aXZhdGVBZ2VudChhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN0b3JlZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBQcnVuaW5nIG1pc3NpbmcgYWdlbnQgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2FnZW50JywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIGFnZW50ICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignYWdlbnQnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIG1lbW9yaWVzIChkZWR1cCBhZ2FpbnN0IGF1dG8tbG9hZGVkIG9uZXMpXG4gICAgY29uc3QgYWN0aXZlTWVtb3JpZXMgPSBhd2FpdCBtZW1vcnlNYW5hZ2VyLmdldEFjdGl2ZU1lbW9yaWVzKCk7XG4gICAgY29uc3QgYWN0aXZlTWVtb3J5TmFtZXMgPSBuZXcgU2V0KGFjdGl2ZU1lbW9yaWVzLm1hcChtID0+IG0ubWV0YWRhdGEubmFtZSkpO1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygnbWVtb3J5JykpIHtcbiAgICAgIGlmIChhY3RpdmVNZW1vcnlOYW1lcy5oYXMoYWN0aXZhdGlvbi5uYW1lKSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIE1lbW9yeSAnJHthY3RpdmF0aW9uLm5hbWV9JyBhbHJlYWR5IGFjdGl2ZSAoYXV0by1sb2FkZWQpLCBza2lwcGluZ2ApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1lbW9yeU1hbmFnZXIuYWN0aXZhdGVNZW1vcnkoYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIG1lbW9yeSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignbWVtb3J5JywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIG1lbW9yeSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ21lbW9yeScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgZW5zZW1ibGVzXG4gICAgZm9yIChjb25zdCBhY3RpdmF0aW9uIG9mIHN0b3JlLmdldEFjdGl2YXRpb25zKCdlbnNlbWJsZScpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnNlbWJsZU1hbmFnZXIuYWN0aXZhdGVFbnNlbWJsZShhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN0b3JlZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBQcnVuaW5nIG1pc3NpbmcgZW5zZW1ibGUgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2Vuc2VtYmxlJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIGVuc2VtYmxlICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignZW5zZW1ibGUnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdG9yZWRDb3VudCA+IDAgfHwgc2tpcHBlZENvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBbQWN0aXZhdGlvblN0b3JlXSBSZXN0b3JlZCAke3Jlc3RvcmVkQ291bnR9IGVsZW1lbnQocyksIHNraXBwZWQgJHtza2lwcGVkQ291bnR9IHN0YWxlIGZvciBzZXNzaW9uICcke3N0b3JlLmdldFNlc3Npb25JZCgpfSdgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCb290c3RyYXAgYWxsIGhhbmRsZXJzIHdpdGhvdXQgcmVnaXN0ZXJpbmcgTUNQIHRvb2xzLlxuICAgKiBVc2VkIGJ5IHdlYi1vbmx5IG1vZGUgKC0td2ViKSB0byBnZXQgTUNQQVFMSGFuZGxlciB3aXRob3V0IGFuIE1DUCBTZXJ2ZXIuXG4gICAqIElzc3VlICM3OTY6IFNwbGl0IERJIGNvbnRhaW5lciBib290c3RyYXAgZnJvbSB0cmFuc3BvcnQgY29ubmVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBib290c3RyYXBIYW5kbGVycygpOiBQcm9taXNlPEhhbmRsZXJCdW5kbGU+IHtcbiAgICBpZiAoIXRoaXMucGVyc29uYXNEaXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBlcnNvbmEgZGlyZWN0b3J5IG5vdCBpbml0aWFsaXplZC4gQ2FsbCBwcmVwYXJlUG9ydGZvbGlvKCkgZmlyc3QuXCIpO1xuICAgIH1cblxuICAgIFBhdGhWYWxpZGF0b3IuaW5pdGlhbGl6ZSh0aGlzLnBlcnNvbmFzRGlyKTtcblxuICAgIGNvbnN0IGluZGljYXRvclNlcnZpY2UgPSB0aGlzLnJlc29sdmU8UGVyc29uYUluZGljYXRvclNlcnZpY2U+KCdQZXJzb25hSW5kaWNhdG9yU2VydmljZScpO1xuICAgIGNvbnN0IHBlcnNvbmFNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBlcnNvbmFNYW5hZ2VyPignUGVyc29uYU1hbmFnZXInKTtcbiAgICBjb25zdCBpbml0U2VydmljZSA9IHRoaXMucmVzb2x2ZTxJbml0aWFsaXphdGlvblNlcnZpY2U+KCdJbml0aWFsaXphdGlvblNlcnZpY2UnKTtcbiAgICBjb25zdCBwZXJzb25hRXhwb3J0ZXIgPSBuZXcgUGVyc29uYUV4cG9ydGVyKCgpID0+IHBlcnNvbmFNYW5hZ2VyLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKSk7XG4gICAgY29uc3QgcGVyc29uYUltcG9ydGVyID0gbmV3IFBlcnNvbmFJbXBvcnRlcih0aGlzLnBlcnNvbmFzRGlyLCAoKSA9PiBwZXJzb25hTWFuYWdlci5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCkpO1xuXG4gICAgLy8gQ3JlYXRlIHN0YXRlIGFjY2Vzc29yIGZvciBQZXJzb25hSGFuZGxlclxuICAgIGNvbnN0IGFjdGl2ZVBlcnNvbmFBY2Nlc3NvciA9IHtcbiAgICAgIGdldDogKCkgPT4gcGVyc29uYU1hbmFnZXIuZ2V0QWN0aXZlUGVyc29uYSgpPy5maWxlbmFtZSB8fCBudWxsLFxuICAgICAgc2V0OiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgLy8gSXNzdWUgIzg0MzogYWN0aXZhdGVQZXJzb25hIGlzIG5vdyBhc3luYyBidXQgdGhpcyBzZXR0ZXIgaXMgc3luY2hyb25vdXMuXG4gICAgICAgICAgLy8gRmlyZS1hbmQtZm9yZ2V0IOKAlCBQZXJzb25hSGFuZGxlciBkb2VzIGl0cyBvd24gbG9va3VwIGJlZm9yZSBjYWxsaW5nIHNldCgpLlxuICAgICAgICAgIC8vIExvZyBhdCBlcnJvciBsZXZlbCBzaW5jZSBhY3RpdmF0aW9uIGZhaWx1cmVzIGhlcmUgaW5kaWNhdGUgc3RhbGUgc3RhdGUuXG4gICAgICAgICAgcGVyc29uYU1hbmFnZXIuYWN0aXZhdGVQZXJzb25hKHZhbHVlKS5jYXRjaChlcnIgPT5cbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgW0NvbnRhaW5lcl0gUGVyc29uYSBhY3RpdmF0aW9uIGZhaWxlZCBmb3IgXCIke3ZhbHVlfVwiIOKAlCBzdGF0ZSBhY2Nlc3NvciBtYXkgYmUgc3RhbGU6YCwgZXJyKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVyc29uYU1hbmFnZXIuZGVhY3RpdmF0ZVBlcnNvbmEoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBwZXJzb25hSGFuZGxlciA9IG5ldyBQZXJzb25hSGFuZGxlcihcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLFxuICAgICAgcGVyc29uYUV4cG9ydGVyLFxuICAgICAgcGVyc29uYUltcG9ydGVyLFxuICAgICAgaW5pdFNlcnZpY2UsXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlLFxuICAgICAgYWN0aXZlUGVyc29uYUFjY2Vzc29yXG4gICAgKTtcblxuICAgIGF3YWl0IHBlcnNvbmFNYW5hZ2VyLnJlbG9hZCgpO1xuXG4gICAgY29uc3QgZWxlbWVudENydWRIYW5kbGVyID0gbmV3IEVsZW1lbnRDUlVESGFuZGxlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2tpbGxNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1RlbXBsYXRlTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUZW1wbGF0ZVJlbmRlcmVyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0FnZW50TWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZW1vcnlNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0Vuc2VtYmxlTWFuYWdlcicpLFxuICAgICAgcGVyc29uYU1hbmFnZXIsXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0VsZW1lbnRRdWVyeVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0FjdGl2YXRpb25TdG9yZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvbGljeUV4cG9ydFNlcnZpY2UnKVxuICAgICk7XG4gICAgLy8gUmVnaXN0ZXIgZm9yIGxhenkgcmVzb2x1dGlvbiBieSBQb2xpY3lFeHBvcnRTZXJ2aWNlXG4gICAgdGhpcy5yZWdpc3RlcignRWxlbWVudENSVURIYW5kbGVyJywgKCkgPT4gZWxlbWVudENydWRIYW5kbGVyKTtcblxuICAgIC8vIE1DUEFRTEhhbmRsZXIgY3JlYXRlZCBsYXRlciBhZnRlciBhbGwgaGFuZGxlcnMgYXJlIGluc3RhbnRpYXRlZFxuICAgIC8vIFNlZSBiZWxvdyBhZnRlciBlbmhhbmNlZEluZGV4SGFuZGxlciBjcmVhdGlvblxuXG4gICAgY29uc3QgY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25Ccm93c2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25TZWFyY2gnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGVyc29uYURldGFpbHMnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRWxlbWVudEluc3RhbGxlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uQ2FjaGUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdBUElDYWNoZScpLFxuICAgICAgcGVyc29uYU1hbmFnZXIsIC8vIFVzZSB0aGUgcmVzb2x2ZWQgUGVyc29uYU1hbmFnZXJcbiAgICAgIHRoaXMucmVzb2x2ZSgnU3VibWl0VG9Qb3J0Zm9saW9Ub29sJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1VuaWZpZWRJbmRleE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnSW5pdGlhbGl6YXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKTtcblxuICAgIGNvbnN0IHBvcnRmb2xpb0hhbmRsZXIgPSBuZXcgUG9ydGZvbGlvSGFuZGxlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnR2l0SHViQXV0aE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9QdWxsSGFuZGxlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVW5pZmllZEluZGV4TWFuYWdlcicpLFxuICAgICAgaW5pdFNlcnZpY2UsXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUmVwb01hbmFnZXInKVxuICAgICk7XG5cbiAgICBjb25zdCBnaXRodWJBdXRoSGFuZGxlciA9IG5ldyBHaXRIdWJBdXRoSGFuZGxlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnR2l0SHViQXV0aE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgaW5pdFNlcnZpY2UsXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICk7XG5cbiAgICBjb25zdCBkaXNwbGF5Q29uZmlnSGFuZGxlciA9IG5ldyBEaXNwbGF5Q29uZmlnSGFuZGxlcihcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLFxuICAgICAgaW5pdFNlcnZpY2UsXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIGNvbnN0IGlkZW50aXR5SGFuZGxlciA9IG5ldyBJZGVudGl0eUhhbmRsZXIoXG4gICAgICBwZXJzb25hTWFuYWdlcixcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICBjb25zdCBjb25maWdIYW5kbGVyID0gbmV3IENvbmZpZ0hhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG4gICAgY29uc3Qgc3luY0hhbmRsZXIgPSBuZXcgU3luY0hhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1N5bmNNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuXG4gICAgY29uc3QgZW5oYW5jZWRJbmRleEhhbmRsZXIgPSBuZXcgRW5oYW5jZWRJbmRleEhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0VuaGFuY2VkSW5kZXhNYW5hZ2VyJyksXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIC8vIElzc3VlICM0NTI6IENyZWF0ZSBHYXRla2VlcGVyIHBvbGljeSBlbmdpbmUgaW5zdGFuY2VcbiAgICAvLyBJc3N1ZSAjNjc5OiBhbGxvd0VsZW1lbnRQb2xpY3lPdmVycmlkZXMgd2lyZWQgZnJvbSBlbnYgKERPTExIT1VTRV9HQVRFS0VFUEVSX0VMRU1FTlRfUE9MSUNZX09WRVJSSURFUylcbiAgICBjb25zdCBnYXRla2VlcGVyID0gbmV3IEdhdGVrZWVwZXIodW5kZWZpbmVkLCB7XG4gICAgICBlbmFibGVBdWRpdExvZ2dpbmc6IHRydWUsXG4gICAgICByZXF1aXJlRGFuZ2VyWm9uZVZlcmlmaWNhdGlvbjogdHJ1ZSxcbiAgICAgIGFsbG93RWxlbWVudFBvbGljeU92ZXJyaWRlczogZW52LkRPTExIT1VTRV9HQVRFS0VFUEVSX0VMRU1FTlRfUE9MSUNZX09WRVJSSURFUyxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBNQ1BBUUxIYW5kbGVyIHdpdGggYWxsIGF2YWlsYWJsZSBoYW5kbGVycyBmb3IgZnVsbCBvcGVyYXRpb24gY292ZXJhZ2UgKElzc3VlICMyNDEpXG4gICAgLy8gSXNzdWUgIzMwMTogUGFzcyBDb250ZXh0VHJhY2tlciBmb3IgcmVxdWVzdCBjb3JyZWxhdGlvbiBtZXRhZGF0YVxuICAgIC8vIElzc3VlICM0MDI6IFBhc3MgRGFuZ2VyWm9uZUVuZm9yY2VyIHZpYSBIYW5kbGVyUmVnaXN0cnlcbiAgICAvLyBCdWlsZCBoYW5kbGVyIHJlZ2lzdHJ5LCB0aGVuIGFkZCBsYXp5IG1ldHJpY3NTaW5rIGdldHRlci5cbiAgICAvLyBNZW1vcnlNZXRyaWNzU2luayBpcyByZWdpc3RlcmVkIGR1cmluZyBkZWZlcnJlZFNldHVwIChhZnRlciBNZXRyaWNzTWFuYWdlci5zdGFydCgpKSxcbiAgICAvLyBzbyBpdCBpc24ndCBhdmFpbGFibGUgYXQgaGFuZGxlciBjb25zdHJ1Y3Rpb24gdGltZSDigJQgcmVzb2x2ZSBvbiBmaXJzdCBhY2Nlc3MgaW5zdGVhZC5cbiAgICBjb25zdCBoYW5kbGVyRGVwczogSGFuZGxlclJlZ2lzdHJ5ID0ge1xuICAgICAgZWxlbWVudENSVUQ6IGVsZW1lbnRDcnVkSGFuZGxlcixcbiAgICAgIG1lbW9yeU1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpLFxuICAgICAgYWdlbnRNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ0FnZW50TWFuYWdlcicpLFxuICAgICAgdGVtcGxhdGVSZW5kZXJlcjogdGhpcy5yZXNvbHZlKCdUZW1wbGF0ZVJlbmRlcmVyJyksXG4gICAgICBlbGVtZW50UXVlcnlTZXJ2aWNlOiB0aGlzLnJlc29sdmUoJ0VsZW1lbnRRdWVyeVNlcnZpY2UnKSxcbiAgICAgIC8vIE1DUC1BUUwgZXh0ZW5zaW9uIGhhbmRsZXJzIChJc3N1ZSAjMjQxKVxuICAgICAgY29sbGVjdGlvbkhhbmRsZXIsXG4gICAgICBwb3J0Zm9saW9IYW5kbGVyLFxuICAgICAgYXV0aEhhbmRsZXI6IGdpdGh1YkF1dGhIYW5kbGVyLFxuICAgICAgY29uZmlnSGFuZGxlcixcbiAgICAgIGVuaGFuY2VkSW5kZXhIYW5kbGVyLFxuICAgICAgcGVyc29uYUhhbmRsZXIsXG4gICAgICBzeW5jSGFuZGxlcixcbiAgICAgIGJ1aWxkSW5mb1NlcnZpY2U6IHRoaXMucmVzb2x2ZSgnQnVpbGRJbmZvU2VydmljZScpLFxuICAgICAgY2FjaGVNZW1vcnlCdWRnZXQ6IHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIGdhdGVrZWVwZXIsICAvLyBJc3N1ZSAjNDUyOiBQb2xpY3kgZW5naW5lIGZvciBlbmZvcmNlKClcbiAgICAgIGRhbmdlclpvbmVFbmZvcmNlcjogdGhpcy5yZXNvbHZlKCdEYW5nZXJab25lRW5mb3JjZXInKSxcbiAgICAgIHZlcmlmaWNhdGlvblN0b3JlOiB0aGlzLnJlc29sdmUoJ1ZlcmlmaWNhdGlvblN0b3JlJyksICAvLyBJc3N1ZSAjMTQyOiBWZXJpZmljYXRpb24gY29kZXNcbiAgICAgIHZlcmlmaWNhdGlvbk5vdGlmaWVyOiB0aGlzLnJlc29sdmUoJ1ZlcmlmaWNhdGlvbk5vdGlmaWVyJyksICAvLyBJc3N1ZSAjNTIyOiBPUyBkaWFsb2cgZm9yIGNvZGVzXG4gICAgICBtZW1vcnlTaW5rOiB0aGlzLnJlc29sdmU8TWVtb3J5TG9nU2luaz4oJ01lbW9yeUxvZ1NpbmsnKSwgIC8vIElzc3VlICM1Mjg6IENSVURFLXJvdXRlZCBxdWVyeV9sb2dzXG4gICAgICBwZXJmb3JtYW5jZU1vbml0b3I6IHRoaXMucmVzb2x2ZTxQZXJmb3JtYW5jZU1vbml0b3I+KCdQZXJmb3JtYW5jZU1vbml0b3InKSxcbiAgICAgIG9wZXJhdGlvbk1ldHJpY3NUcmFja2VyOiB0aGlzLnJlc29sdmU8T3BlcmF0aW9uTWV0cmljc1RyYWNrZXI+KCdPcGVyYXRpb25NZXRyaWNzVHJhY2tlcicpLFxuICAgICAgZ2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyOiB0aGlzLnJlc29sdmU8R2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyPignR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyJyksXG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaGFuZGxlckRlcHMsICdtZXRyaWNzU2luaycsIHtcbiAgICAgIGdldDogKCkgPT4geyB0cnkgeyByZXR1cm4gdGhpcy5yZXNvbHZlPE1lbW9yeU1ldHJpY3NTaW5rPignTWVtb3J5TWV0cmljc1NpbmsnKTsgfSBjYXRjaCB7IHJldHVybiB1bmRlZmluZWQ7IH0gfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgY29uc3QgbWNwQXFsSGFuZGxlciA9IG5ldyBNQ1BBUUxIYW5kbGVyKGhhbmRsZXJEZXBzLCB0aGlzLnJlc29sdmU8Q29udGV4dFRyYWNrZXI+KCdDb250ZXh0VHJhY2tlcicpKTtcblxuICAgIC8vIFJlZ2lzdGVyIG1jcEFxbEhhbmRsZXIgYXMgYSBzaW5nbGV0b24gZm9yIHRlc3QgYWNjZXNzXG4gICAgdGhpcy5yZWdpc3RlcignbWNwQXFsSGFuZGxlcicsICgpID0+IG1jcEFxbEhhbmRsZXIsIHsgc2luZ2xldG9uOiB0cnVlIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ2dhdGVrZWVwZXInLCAoKSA9PiBnYXRla2VlcGVyLCB7IHNpbmdsZXRvbjogdHJ1ZSB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBwZXJzb25hSGFuZGxlcixcbiAgICAgIGVsZW1lbnRDcnVkSGFuZGxlcixcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyLFxuICAgICAgcG9ydGZvbGlvSGFuZGxlcixcbiAgICAgIGdpdGh1YkF1dGhIYW5kbGVyLFxuICAgICAgZGlzcGxheUNvbmZpZ0hhbmRsZXIsXG4gICAgICBpZGVudGl0eUhhbmRsZXIsXG4gICAgICBjb25maWdIYW5kbGVyLFxuICAgICAgc3luY0hhbmRsZXIsXG4gICAgICB0b29sUmVnaXN0cnk6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFRvb2xSZWdpc3RyeSwgLy8gTm8gdG9vbCByZWdpc3RyeSBpbiBib290c3RyYXAtb25seSBtb2RlXG4gICAgICBlbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgIG1jcEFxbEhhbmRsZXIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIGhhbmRsZXJzIHdpdGggZGVwZW5kZW5jeSBpbmplY3Rpb24gYW5kIHJlZ2lzdGVyIE1DUCB0b29scy5cbiAgICogQHBhcmFtIHNlcnZlciAtIE1DUCBTZXJ2ZXIgaW5zdGFuY2UgZm9yIHRvb2wgcmVnaXN0cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlSGFuZGxlcnMoc2VydmVyOiBTZXJ2ZXIpOiBQcm9taXNlPEhhbmRsZXJCdW5kbGU+IHtcbiAgICBjb25zdCBidW5kbGUgPSBhd2FpdCB0aGlzLmJvb3RzdHJhcEhhbmRsZXJzKCk7XG5cbiAgICBjb25zdCB0b29sUmVnaXN0cnkgPSBuZXcgVG9vbFJlZ2lzdHJ5KHNlcnZlcik7XG5cbiAgICAvLyBSZWdpc3RlciB0b29scyBiYXNlZCBvbiBNQ1BfSU5URVJGQUNFX01PREUgKElzc3VlICMyMzcpXG4gICAgLy8gLSAnZGlzY3JldGUnOiBSZWdpc3RlciBpbmRpdmlkdWFsIGRpc2NyZXRlIHRvb2xzICh+NDAgdG9vbHMpXG4gICAgLy8gLSAnbWNwYXFsJzogUmVnaXN0ZXIgY29uc29saWRhdGVkIE1DUC1BUUwgaW50ZXJmYWNlIG9ubHkgKH40IG9yIDEgdG9vbHMpXG4gICAgLy8gVG9rZW4gY291bnRzIGFyZSBsb2dnZWQgZHluYW1pY2FsbHkgYXQgc3RhcnR1cCB2aWEgbG9nVG9vbFRva2VuU3RhdHMoKVxuICAgIGNvbnN0IGludGVyZmFjZU1vZGUgPSBlbnYuTUNQX0lOVEVSRkFDRV9NT0RFO1xuICAgIGxvZ2dlci5pbmZvKGBNQ1AgSW50ZXJmYWNlIE1vZGU6ICR7aW50ZXJmYWNlTW9kZX1gKTtcblxuICAgIGlmIChpbnRlcmZhY2VNb2RlID09PSAnZGlzY3JldGUnKSB7XG4gICAgICAvLyBEaXNjcmV0ZSBtb2RlOiBSZWdpc3RlciBhbGwgaW5kaXZpZHVhbCB0b29sc1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyUGVyc29uYVRvb2xzKGJ1bmRsZS5wZXJzb25hSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJFbGVtZW50VG9vbHMoYnVuZGxlLmVsZW1lbnRDcnVkSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJDb2xsZWN0aW9uVG9vbHMoYnVuZGxlLmNvbGxlY3Rpb25IYW5kbGVyKTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlclBvcnRmb2xpb1Rvb2xzKGJ1bmRsZS5wb3J0Zm9saW9IYW5kbGVyKTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlckF1dGhUb29scyhidW5kbGUuZ2l0aHViQXV0aEhhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyQ29uZmlnVG9vbHMoe1xuICAgICAgICBoYW5kbGVDb25maWdPcGVyYXRpb246IChvcHRpb25zKSA9PlxuICAgICAgICAgIGJ1bmRsZS5jb25maWdIYW5kbGVyLmhhbmRsZUNvbmZpZ09wZXJhdGlvbihvcHRpb25zKSxcbiAgICAgICAgaGFuZGxlU3luY09wZXJhdGlvbjogKG9wdGlvbnMpID0+XG4gICAgICAgICAgYnVuZGxlLnN5bmNIYW5kbGVyLmhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlckVuaGFuY2VkSW5kZXhUb29scyhcbiAgICAgICAgYnVuZGxlLmVuaGFuY2VkSW5kZXhIYW5kbGVyLFxuICAgICAgICB0aGlzLnJlc29sdmU8SW5kZXhDb25maWdNYW5hZ2VyPignSW5kZXhDb25maWdNYW5hZ2VyJykuZ2V0Q29uZmlnKClcbiAgICAgICk7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJCdWlsZEluZm9Ub29scyh0aGlzLnJlc29sdmUoJ0J1aWxkSW5mb1NlcnZpY2UnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1DUC1BUUwgbW9kZTogUmVnaXN0ZXIgb25seSBNQ1AtQVFMIHRvb2xzXG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJNQ1BBUUxUb29scyhidW5kbGUubWNwQXFsSGFuZGxlcik7XG4gICAgfVxuXG4gICAgLy8gTG9nIHRva2VuIHN0YXRpc3RpY3MgKElzc3VlICMyMzcgZW5oYW5jZW1lbnQpXG4gICAgdGhpcy5sb2dUb29sVG9rZW5TdGF0cyh0b29sUmVnaXN0cnksIGludGVyZmFjZU1vZGUsIGJ1bmRsZS5tY3BBcWxIYW5kbGVyLCB7XG4gICAgICBwZXJzb25hSGFuZGxlcjogYnVuZGxlLnBlcnNvbmFIYW5kbGVyLFxuICAgICAgZWxlbWVudENydWRIYW5kbGVyOiBidW5kbGUuZWxlbWVudENydWRIYW5kbGVyLFxuICAgICAgY29sbGVjdGlvbkhhbmRsZXI6IGJ1bmRsZS5jb2xsZWN0aW9uSGFuZGxlcixcbiAgICAgIHBvcnRmb2xpb0hhbmRsZXI6IGJ1bmRsZS5wb3J0Zm9saW9IYW5kbGVyLFxuICAgICAgZ2l0aHViQXV0aEhhbmRsZXI6IGJ1bmRsZS5naXRodWJBdXRoSGFuZGxlcixcbiAgICAgIGNvbmZpZ0hhbmRsZXI6IGJ1bmRsZS5jb25maWdIYW5kbGVyLFxuICAgICAgc3luY0hhbmRsZXI6IGJ1bmRsZS5zeW5jSGFuZGxlcixcbiAgICAgIGVuaGFuY2VkSW5kZXhIYW5kbGVyOiBidW5kbGUuZW5oYW5jZWRJbmRleEhhbmRsZXIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc29sdmU8U2VydmVyU2V0dXA+KCdTZXJ2ZXJTZXR1cCcpLnNldHVwU2VydmVyKHNlcnZlciwgdG9vbFJlZ2lzdHJ5LCBidW5kbGUuZWxlbWVudENydWRIYW5kbGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5idW5kbGUsXG4gICAgICB0b29sUmVnaXN0cnksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2cgdG9vbCB0b2tlbiBzdGF0aXN0aWNzIGZvciBtb25pdG9yaW5nIGFuZCBkb2N1bWVudGF0aW9uLlxuICAgKiBTaG93cyBjdXJyZW50IG1vZGUgdG9rZW4gY291bnQsIGFsdGVybmF0aXZlIG1vZGUgY29tcGFyaXNvbiwgYW5kIHNhdmluZ3MuXG4gICAqXG4gICAqIFRoaXMgaXMgaW1wb3J0YW50IGZvcjpcbiAgICogMS4gRG9jdW1lbnRpbmcgYWN0dWFsIHRva2VuIHNhdmluZ3MgYWNoaWV2ZWRcbiAgICogMi4gTW9uaXRvcmluZyBjb250ZXh0IHdpbmRvdyB1c2FnZVxuICAgKiAzLiBTdXBwb3J0aW5nIGZ1dHVyZSBNQ1AtQVFMIGFkYXB0ZXIgZGV2ZWxvcG1lbnRcbiAgICpcbiAgICogSXNzdWUgIzIzNyBlbmhhbmNlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb2dUb29sVG9rZW5TdGF0cyhcbiAgICB0b29sUmVnaXN0cnk6IFRvb2xSZWdpc3RyeSxcbiAgICBpbnRlcmZhY2VNb2RlOiAnZGlzY3JldGUnIHwgJ21jcGFxbCcsXG4gICAgbWNwQXFsSGFuZGxlcjogTUNQQVFMSGFuZGxlcixcbiAgICBkaXNjcmV0ZUhhbmRsZXJzOiB7XG4gICAgICBwZXJzb25hSGFuZGxlcjogUGVyc29uYUhhbmRsZXI7XG4gICAgICBlbGVtZW50Q3J1ZEhhbmRsZXI6IEVsZW1lbnRDUlVESGFuZGxlcjtcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcbiAgICAgIHBvcnRmb2xpb0hhbmRsZXI6IFBvcnRmb2xpb0hhbmRsZXI7XG4gICAgICBnaXRodWJBdXRoSGFuZGxlcjogR2l0SHViQXV0aEhhbmRsZXI7XG4gICAgICBjb25maWdIYW5kbGVyOiBDb25maWdIYW5kbGVyO1xuICAgICAgc3luY0hhbmRsZXI6IFN5bmNIYW5kbGVyO1xuICAgICAgZW5oYW5jZWRJbmRleEhhbmRsZXI6IEVuaGFuY2VkSW5kZXhIYW5kbGVyO1xuICAgIH1cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFRva2VucyA9IHRvb2xSZWdpc3RyeS5nZXRUb29sVG9rZW5Fc3RpbWF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRUb29sQ291bnQgPSB0b29sUmVnaXN0cnkuZ2V0VG9vbENvdW50KCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgYWx0ZXJuYXRpdmUgbW9kZSB0b2tlbnMgZm9yIGNvbXBhcmlzb25cbiAgICBsZXQgYWx0ZXJuYXRpdmVUb2tlbnM6IG51bWJlcjtcbiAgICBsZXQgYWx0ZXJuYXRpdmVUb29sQ291bnQ6IG51bWJlcjtcblxuICAgIGlmIChpbnRlcmZhY2VNb2RlID09PSAnZGlzY3JldGUnKSB7XG4gICAgICAvLyBDdXJyZW50IGlzIGRpc2NyZXRlLCBjYWxjdWxhdGUgd2hhdCBtY3BhcWwgd291bGQgYmVcbiAgICAgIGNvbnN0IHRlbXBSZWdpc3RyeSA9IG5ldyBUb29sUmVnaXN0cnkoe30gYXMgU2VydmVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3Rlck1DUEFRTFRvb2xzKG1jcEFxbEhhbmRsZXIpO1xuICAgICAgYWx0ZXJuYXRpdmVUb2tlbnMgPSB0ZW1wUmVnaXN0cnkuZ2V0VG9vbFRva2VuRXN0aW1hdGUoKTtcbiAgICAgIGFsdGVybmF0aXZlVG9vbENvdW50ID0gdGVtcFJlZ2lzdHJ5LmdldFRvb2xDb3VudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXJyZW50IGlzIG1jcGFxbCwgY2FsY3VsYXRlIHdoYXQgZGlzY3JldGUgd291bGQgYmVcbiAgICAgIGNvbnN0IHRlbXBSZWdpc3RyeSA9IG5ldyBUb29sUmVnaXN0cnkoe30gYXMgU2VydmVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlclBlcnNvbmFUb29scyhkaXNjcmV0ZUhhbmRsZXJzLnBlcnNvbmFIYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckVsZW1lbnRUb29scyhkaXNjcmV0ZUhhbmRsZXJzLmVsZW1lbnRDcnVkSGFuZGxlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJDb2xsZWN0aW9uVG9vbHMoZGlzY3JldGVIYW5kbGVycy5jb2xsZWN0aW9uSGFuZGxlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJQb3J0Zm9saW9Ub29scyhkaXNjcmV0ZUhhbmRsZXJzLnBvcnRmb2xpb0hhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQXV0aFRvb2xzKGRpc2NyZXRlSGFuZGxlcnMuZ2l0aHViQXV0aEhhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQ29uZmlnVG9vbHMoe1xuICAgICAgICBoYW5kbGVDb25maWdPcGVyYXRpb246IChvcHRpb25zKSA9PlxuICAgICAgICAgIGRpc2NyZXRlSGFuZGxlcnMuY29uZmlnSGFuZGxlci5oYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICAgIGhhbmRsZVN5bmNPcGVyYXRpb246IChvcHRpb25zKSA9PlxuICAgICAgICAgIGRpc2NyZXRlSGFuZGxlcnMuc3luY0hhbmRsZXIuaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zKSxcbiAgICAgIH0pO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyRW5oYW5jZWRJbmRleFRvb2xzKFxuICAgICAgICBkaXNjcmV0ZUhhbmRsZXJzLmVuaGFuY2VkSW5kZXhIYW5kbGVyLFxuICAgICAgICB0aGlzLnJlc29sdmU8SW5kZXhDb25maWdNYW5hZ2VyPignSW5kZXhDb25maWdNYW5hZ2VyJykuZ2V0Q29uZmlnKClcbiAgICAgICk7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJCdWlsZEluZm9Ub29scyh0aGlzLnJlc29sdmUoJ0J1aWxkSW5mb1NlcnZpY2UnKSk7XG4gICAgICBhbHRlcm5hdGl2ZVRva2VucyA9IHRlbXBSZWdpc3RyeS5nZXRUb29sVG9rZW5Fc3RpbWF0ZSgpO1xuICAgICAgYWx0ZXJuYXRpdmVUb29sQ291bnQgPSB0ZW1wUmVnaXN0cnkuZ2V0VG9vbENvdW50KCk7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIHNhdmluZ3MgKHBvc2l0aXZlID0gY3VycmVudCBtb2RlIHNhdmVzIHRva2VucylcbiAgICBjb25zdCB0b2tlbkRpZmYgPSBhbHRlcm5hdGl2ZVRva2VucyAtIGN1cnJlbnRUb2tlbnM7XG4gICAgY29uc3Qgc2F2aW5nc1BlcmNlbnQgPSBhbHRlcm5hdGl2ZVRva2VucyA+IDBcbiAgICAgID8gKCh0b2tlbkRpZmYgLyBhbHRlcm5hdGl2ZVRva2VucykgKiAxMDApLnRvRml4ZWQoMSlcbiAgICAgIDogJzAnO1xuXG4gICAgLy8gTG9nIHRoZSBjb21wYXJpc29uXG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgVG9vbCBSZWdpc3RyYXRpb24gQ29tcGxldGU6ICR7Y3VycmVudFRvb2xDb3VudH0gdG9vbHMsIH4ke2N1cnJlbnRUb2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gdG9rZW5zYFxuICAgICk7XG5cbiAgICBpZiAoaW50ZXJmYWNlTW9kZSA9PT0gJ21jcGFxbCcpIHtcbiAgICAgIC8vIEhpZ2hsaWdodCBzYXZpbmdzIHdoZW4gdXNpbmcgbWNwYXFsXG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFRva2VuIFNhdmluZ3M6ICR7dG9rZW5EaWZmLnRvTG9jYWxlU3RyaW5nKCl9IHRva2VucyBzYXZlZCAoJHtzYXZpbmdzUGVyY2VudH0lKSB2cyBkaXNjcmV0ZSBtb2RlICgke2FsdGVybmF0aXZlVG9vbENvdW50fSB0b29scywgfiR7YWx0ZXJuYXRpdmVUb2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gdG9rZW5zKWBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluIGRpc2NyZXRlIG1vZGUsIHNob3cgd2hhdCBtY3BhcWwgd291bGQgc2F2ZVxuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBBbHRlcm5hdGl2ZTogbWNwYXFsIG1vZGUgd291bGQgdXNlICR7YWx0ZXJuYXRpdmVUb29sQ291bnR9IHRvb2xzLCB+JHthbHRlcm5hdGl2ZVRva2Vucy50b0xvY2FsZVN0cmluZygpfSB0b2tlbnMgKCR7TWF0aC5hYnMoTnVtYmVyKHNhdmluZ3NQZXJjZW50KSl9JSAke3Rva2VuRGlmZiA8IDAgPyAnbW9yZScgOiAnbGVzcyd9KWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdpcmUgYWxsIG1ldHJpYyBjb2xsZWN0b3JzIGludG8gdGhlIE1ldHJpY3NNYW5hZ2VyLlxuICAgKiBNaXJyb3JzIHdpcmVMb2dIb29rcygpIOKAlCBrZWVwcyBjb2xsZWN0b3IgcmVnaXN0cmF0aW9uIG91dCBvZiB0aGUgY29uc3RydWN0b3IuXG4gICAqL1xuICBwcml2YXRlIHdpcmVNZXRyaWNzQ29sbGVjdG9ycyhtZXRyaWNzTWFuYWdlcjogTWV0cmljc01hbmFnZXIpOiB2b2lkIHtcbiAgICAvLyBQZXJmb3JtYW5jZU1vbml0b3IgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBtb25pdG9yID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vdXRpbHMvUGVyZm9ybWFuY2VNb25pdG9yLmpzJykuUGVyZm9ybWFuY2VNb25pdG9yPignUGVyZm9ybWFuY2VNb25pdG9yJyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgUGVyZm9ybWFuY2VNb25pdG9yQ29sbGVjdG9yKG1vbml0b3IpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gTFJVQ2FjaGUgaW5zdGFuY2VzIOKAlCBBUEkgY2FjaGUgKyBhbGwgZWxlbWVudCBtYW5hZ2VyIGNhY2hlc1xuICAgIGNvbnN0IGNhY2hlcyA9IHRoaXMuY29sbGVjdExydUNhY2hlc0Zvck1ldHJpY3MoKTtcbiAgICBpZiAoY2FjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBMUlVDYWNoZUNvbGxlY3RvcihjYWNoZXMpKTtcbiAgICB9XG5cbiAgICAvLyBTZWN1cml0eU1vbml0b3IgKHN0YXRpYylcbiAgICB0cnkge1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IFNlY3VyaXR5TW9uaXRvckNvbGxlY3RvcigpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IGF2YWlsYWJsZSAqLyB9XG5cbiAgICAvLyBTZWN1cml0eVRlbGVtZXRyeSAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeSA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3NlY3VyaXR5L3RlbGVtZXRyeS9TZWN1cml0eVRlbGVtZXRyeS5qcycpLlNlY3VyaXR5VGVsZW1ldHJ5PignU2VjdXJpdHlUZWxlbWV0cnknKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBTZWN1cml0eVRlbGVtZXRyeUNvbGxlY3Rvcih0ZWxlbWV0cnkpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gRmlsZUxvY2tNYW5hZ2VyIChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9ja01hbmFnZXIgPSB0aGlzLnJlc29sdmU8aW1wb3J0KCcuLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnKS5GaWxlTG9ja01hbmFnZXI+KCdGaWxlTG9ja01hbmFnZXInKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBGaWxlTG9ja01hbmFnZXJDb2xsZWN0b3IobG9ja01hbmFnZXIpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gRGVmYXVsdEVsZW1lbnRQcm92aWRlciAoc3RhdGljKVxuICAgIHRyeSB7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgRGVmYXVsdEVsZW1lbnRQcm92aWRlckNvbGxlY3RvcigpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IGF2YWlsYWJsZSAqLyB9XG5cbiAgICAvLyBUcmlnZ2VyTWV0cmljc1RyYWNrZXIgKGluc3RhbmNlIOKAlCBjcmVhdGVkIGluc2lkZSBFbmhhbmNlZEluZGV4TWFuYWdlciBmYWN0b3J5KVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbmhhbmNlZEluZGV4ID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vcG9ydGZvbGlvL0VuaGFuY2VkSW5kZXhNYW5hZ2VyLmpzJykuRW5oYW5jZWRJbmRleE1hbmFnZXI+KCdFbmhhbmNlZEluZGV4TWFuYWdlcicpO1xuICAgICAgLy8gRW5oYW5jZWRJbmRleE1hbmFnZXIgZXhwb3NlcyB0cmFja2VyIHZpYSBwdWJsaWMgZ2V0dGVyIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKCd0cmlnZ2VyTWV0cmljc1RyYWNrZXInIGluIGVuaGFuY2VkSW5kZXgpIHtcbiAgICAgICAgY29uc3QgdHJhY2tlciA9IChlbmhhbmNlZEluZGV4IGFzIGFueSkudHJpZ2dlck1ldHJpY3NUcmFja2VyO1xuICAgICAgICBpZiAodHJhY2tlcikge1xuICAgICAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBUcmlnZ2VyTWV0cmljc1RyYWNrZXJDb2xsZWN0b3IodHJhY2tlcikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIE9wZXJhdGlvbmFsVGVsZW1ldHJ5IChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3BUZWxlbWV0cnkgPSB0aGlzLnJlc29sdmU8aW1wb3J0KCcuLi90ZWxlbWV0cnkvT3BlcmF0aW9uYWxUZWxlbWV0cnkuanMnKS5PcGVyYXRpb25hbFRlbGVtZXRyeT4oJ09wZXJhdGlvbmFsVGVsZW1ldHJ5Jyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgT3BlcmF0aW9uYWxUZWxlbWV0cnlDb2xsZWN0b3Iob3BUZWxlbWV0cnkpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcFRyYWNrZXIgPSB0aGlzLnJlc29sdmU8T3BlcmF0aW9uTWV0cmljc1RyYWNrZXI+KCdPcGVyYXRpb25NZXRyaWNzVHJhY2tlcicpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IE9wZXJhdGlvbk1ldHJpY3NDb2xsZWN0b3Iob3BUcmFja2VyKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlciAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdrVHJhY2tlciA9IHRoaXMucmVzb2x2ZTxHYXRla2VlcGVyTWV0cmljc1RyYWNrZXI+KCdHYXRla2VlcGVyTWV0cmljc1RyYWNrZXInKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBHYXRla2VlcGVyTWV0cmljc0NvbGxlY3Rvcihna1RyYWNrZXIpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0THJ1Q2FjaGVzRm9yTWV0cmljcygpOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgaW5zdGFuY2U6IGltcG9ydCgnLi4vY2FjaGUvTFJVQ2FjaGUuanMnKS5MUlVDYWNoZTx1bmtub3duPiB9PiB7XG4gICAgY29uc3QgY2FjaGVzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgaW5zdGFuY2U6IGltcG9ydCgnLi4vY2FjaGUvTFJVQ2FjaGUuanMnKS5MUlVDYWNoZTx1bmtub3duPiB9PiA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcGlDYWNoZSA9IHRoaXMucmVzb2x2ZTx7IGdldFN0YXRzKCk6IGltcG9ydCgnLi4vY2FjaGUvTFJVQ2FjaGUuanMnKS5DYWNoZVN0YXRzIH0+KCdBUElDYWNoZScpO1xuICAgICAgY2FjaGVzLnB1c2goeyBuYW1lOiAnQVBJQ2FjaGUnLCBpbnN0YW5jZTogYXBpQ2FjaGUgYXMgYW55IH0pO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgYXZhaWxhYmxlICovIH1cblxuICAgIGNvbnN0IG1hbmFnZXJOYW1lcyA9IFtcbiAgICAgICdQZXJzb25hTWFuYWdlcicsICdTa2lsbE1hbmFnZXInLCAnQWdlbnRNYW5hZ2VyJyxcbiAgICAgICdNZW1vcnlNYW5hZ2VyJywgJ0Vuc2VtYmxlTWFuYWdlcicsICdUZW1wbGF0ZU1hbmFnZXInLFxuICAgIF0gYXMgY29uc3Q7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIG1hbmFnZXJOYW1lcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbWdyID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vZWxlbWVudHMvYmFzZS9CYXNlRWxlbWVudE1hbmFnZXIuanMnKS5CYXNlRWxlbWVudE1hbmFnZXI8YW55Pj4obmFtZSk7XG4gICAgICAgIGNhY2hlcy5wdXNoKC4uLm1nci5nZXRNZXRyaWNzQ2FjaGVzKCkpO1xuICAgICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGVzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ2xvc2UgdGhlIEhUVFAgc2VydmVyIGZpcnN0IHNvIHRoZSBwb3J0IGlzIGZyZWVkIGltbWVkaWF0ZWx5ICgjMTg1NilcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBzaHV0ZG93bldlYlNlcnZlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi93ZWIvc2VydmVyLmpzJyk7XG4gICAgICBzaHV0ZG93bldlYlNlcnZlcigpO1xuICAgIH0gY2F0Y2ggeyAvKiB3ZWIgc2VydmVyIG5vdCBzdGFydGVkICovIH1cblxuICAgIC8vIENsb3NlIE1ldHJpY3NNYW5hZ2VyIGJlZm9yZSBnZW5lcmFsIGRpc3Bvc2FsIChmbHVzaCBmaW5hbCBzbmFwc2hvdClcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0cmljc01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWV0cmljc01hbmFnZXI+KCdNZXRyaWNzTWFuYWdlcicpO1xuICAgICAgYXdhaXQgbWV0cmljc01hbmFnZXIuY2xvc2UoKTtcbiAgICB9IGNhdGNoIHsgLyogbWV0cmljcyBub3QgZW5hYmxlZCBvciBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBDbGVhbiB1cCBsb2cgaG9va3MgYmVmb3JlIGRpc3Bvc2luZyBzZXJ2aWNlc1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGVhbnVwcyA9IHRoaXMucmVzb2x2ZTwoKCkgPT4gdm9pZClbXT4oJ19sb2dIb29rQ2xlYW51cHMnKTtcbiAgICAgIGNsZWFudXBzLmZvckVhY2goZm4gPT4gZm4oKSk7XG4gICAgfSBjYXRjaCB7IC8qIGhvb2tzIG5vdCB5ZXQgd2lyZWQgKi8gfVxuXG4gICAgY29uc3QgZGlzcG9zYWxQcm9taXNlcyA9IHRoaXMuYnVpbGREaXNwb3NhbFByb21pc2VzKCk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChkaXNwb3NhbFByb21pc2VzLm1hcChkID0+IGQucHJvbWlzZSkpO1xuICAgIHRoaXMucmVwb3J0RGlzcG9zYWxGYWlsdXJlcyhkaXNwb3NhbFByb21pc2VzLCByZXN1bHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREaXNwb3NhbFByb21pc2VzKCk6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwcm9taXNlOiBQcm9taXNlPHZvaWQ+IH0+IHtcbiAgICBjb25zdCBwcm9taXNlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHByb21pc2U6IFByb21pc2U8dm9pZD4gfT4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBzZXJ2aWNlXSBvZiB0aGlzLnNlcnZpY2VzKSB7XG4gICAgICBpZiAoIXNlcnZpY2UuaW5zdGFuY2UpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBzZXJ2aWNlLmluc3RhbmNlIGFzIGFueTtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHsgbmFtZSwgcHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBpbnN0YW5jZS5kaXNwb3NlKCkpIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuY2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHsgbmFtZSwgcHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBpbnN0YW5jZS5jbGVhbnVwKCkpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZXM7XG4gIH1cblxuICBwcml2YXRlIHJlcG9ydERpc3Bvc2FsRmFpbHVyZXMoXG4gICAgZGlzcG9zYWxQcm9taXNlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHByb21pc2U6IFByb21pc2U8dm9pZD4gfT4sXG4gICAgcmVzdWx0czogUHJvbWlzZVNldHRsZWRSZXN1bHQ8dm9pZD5bXSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIHJlc3VsdF0gb2YgcmVzdWx0cy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gZGlzcG9zYWxQcm9taXNlc1tpbmRleF0ubmFtZTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSByZXN1bHQucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHQucmVhc29uIDogbmV3IEVycm9yKFN0cmluZyhyZXN1bHQucmVhc29uKSk7XG4gICAgICAgIGZhaWx1cmVzLnB1c2goc2VydmljZU5hbWUpO1xuICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGRpc3Bvc2Ugc2VydmljZSAnJHtzZXJ2aWNlTmFtZX0nYCwgeyBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZhaWx1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBDb250YWluZXIgZGlzcG9zYWwgY29tcGxldGVkIHdpdGggJHtmYWlsdXJlcy5sZW5ndGh9IGZhaWx1cmUocykgb3V0IG9mICR7ZGlzcG9zYWxQcm9taXNlcy5sZW5ndGh9IHNlcnZpY2VzYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uQ2FjaGUgPSB0aGlzLnJlc29sdmU8Q29sbGVjdGlvbkNhY2hlPignQ29sbGVjdGlvbkNhY2hlJyk7XG4gICAgICBjb25zdCBpc0NhY2hlVmFsaWQgPSBhd2FpdCBjb2xsZWN0aW9uQ2FjaGUuaXNDYWNoZVZhbGlkKCk7XG4gICAgICBpZiAoIWlzQ2FjaGVWYWxpZCkge1xuICAgICAgICBsb2dnZXIuaW5mbyhcIkluaXRpYWxpemluZyBjb2xsZWN0aW9uIGNhY2hlIHdpdGggc2VlZCBkYXRhLi4uXCIpO1xuICAgICAgICBjb25zdCB7IENvbGxlY3Rpb25TZWVkZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2NvbGxlY3Rpb24vQ29sbGVjdGlvblNlZWRlci5qc1wiKTtcbiAgICAgICAgY29uc3Qgc2VlZERhdGEgPSBDb2xsZWN0aW9uU2VlZGVyLmdldFNlZWREYXRhKCk7XG4gICAgICAgIGF3YWl0IGNvbGxlY3Rpb25DYWNoZS5zYXZlQ2FjaGUoc2VlZERhdGEpO1xuICAgICAgICBsb2dnZXIuaW5mbyhgQ29sbGVjdGlvbiBjYWNoZSBpbml0aWFsaXplZCB3aXRoICR7c2VlZERhdGEubGVuZ3RofSBpdGVtc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBjb2xsZWN0aW9uQ2FjaGUuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYENvbGxlY3Rpb24gY2FjaGUgYWxyZWFkeSB2YWxpZCB3aXRoICR7c3RhdHMuaXRlbUNvdW50fSBpdGVtc2ApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoXCJEb2xsaG91c2VDb250YWluZXIuaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZVwiLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iXX0=
|