@local-labs-jpollock/local-cli 0.0.2 → 0.0.4

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.
@@ -3219,7 +3219,8 @@ async function stopMcpServer(logger) {
3219
3219
  /**
3220
3220
  * Register IPC handlers for renderer communication
3221
3221
  */
3222
- function registerIpcHandlers(services, logger) {
3222
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3223
+ function _registerIpcHandlers(_services, _logger) {
3223
3224
  // Get MCP server status
3224
3225
  electron_1.ipcMain.handle('mcp:getStatus', async () => {
3225
3226
  if (!mcpServer) {
@@ -3237,7 +3238,7 @@ function registerIpcHandlers(services, logger) {
3237
3238
  // Start MCP server
3238
3239
  electron_1.ipcMain.handle('mcp:start', async () => {
3239
3240
  try {
3240
- await startMcpServer(services, logger);
3241
+ await startMcpServer(_services, _logger);
3241
3242
  return { success: true };
3242
3243
  }
3243
3244
  catch (error) {
@@ -3247,7 +3248,7 @@ function registerIpcHandlers(services, logger) {
3247
3248
  // Stop MCP server
3248
3249
  electron_1.ipcMain.handle('mcp:stop', async () => {
3249
3250
  try {
3250
- await stopMcpServer(logger);
3251
+ await stopMcpServer(_logger);
3251
3252
  return { success: true };
3252
3253
  }
3253
3254
  catch (error) {
@@ -3257,8 +3258,8 @@ function registerIpcHandlers(services, logger) {
3257
3258
  // Restart MCP server
3258
3259
  electron_1.ipcMain.handle('mcp:restart', async () => {
3259
3260
  try {
3260
- await stopMcpServer(logger);
3261
- await startMcpServer(services, logger);
3261
+ await stopMcpServer(_logger);
3262
+ await startMcpServer(_services, _logger);
3262
3263
  return { success: true };
3263
3264
  }
3264
3265
  catch (error) {
@@ -3278,7 +3279,7 @@ function registerIpcHandlers(services, logger) {
3278
3279
  return { success: false, error: error.message };
3279
3280
  }
3280
3281
  });
3281
- logger.info(`[${ADDON_NAME}] Registered IPC handlers: mcp:getStatus, mcp:getConnectionInfo, mcp:start, mcp:stop, mcp:restart, mcp:regenerateToken`);
3282
+ _logger.info(`[${ADDON_NAME}] Registered IPC handlers: mcp:getStatus, mcp:getConnectionInfo, mcp:start, mcp:stop, mcp:restart, mcp:regenerateToken`);
3282
3283
  }
3283
3284
  /**
3284
3285
  * Main addon initialization function
@@ -3293,7 +3294,8 @@ function default_1(_context) {
3293
3294
  graphql.registerGraphQLService('mcp-server', typeDefs, resolvers);
3294
3295
  localLogger.info(`[${ADDON_NAME}] Registered GraphQL: 29 tools (Phase 1-11b)`);
3295
3296
  // Start MCP server (for AI tools)
3296
- const localServices = {
3297
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3298
+ const _localServices = {
3297
3299
  siteData: services.siteData,
3298
3300
  siteProcessManager: services.siteProcessManager,
3299
3301
  wpCli: services.wpCli,
@@ -3311,12 +3313,12 @@ function default_1(_context) {
3311
3313
  };
3312
3314
  // MCP server disabled - CLI-only mode
3313
3315
  // To enable MCP server for AI tool integration, uncomment the following:
3314
- // startMcpServer(localServices, localLogger);
3315
- // registerIpcHandlers(localServices, localLogger);
3316
+ // startMcpServer(_localServices, localLogger);
3317
+ // _registerIpcHandlers(_localServices, localLogger);
3316
3318
  localLogger.info(`[${ADDON_NAME}] Successfully initialized (CLI-only mode)`);
3317
3319
  }
3318
3320
  catch (error) {
3319
3321
  localLogger.error(`[${ADDON_NAME}] Failed to initialize:`, error);
3320
3322
  }
3321
3323
  }
3322
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFpbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdzSEgsNEJBdUNDO0FBN3VIRCxtRUFBcUQ7QUFDckQsdUNBQW1DO0FBQ25DLDhEQUE4QjtBQUM5QiwrQ0FBNEM7QUFDNUMsbURBQWlEO0FBR2pELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztBQUVoQyxJQUFJLFNBQVMsR0FBcUIsSUFBSSxDQUFDO0FBRXZDOztHQUVHO0FBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBQSxxQkFBRyxFQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTR2Qm5CLENBQUM7QUFFRjs7R0FFRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWE7SUFDcEMsTUFBTSxFQUNKLFVBQVUsRUFBRSxpQkFBaUIsRUFDN0IsUUFBUSxFQUNSLFdBQVcsRUFDWCxLQUFLLEVBQ0wsa0JBQWtCLEVBQ2xCLE9BQU8sRUFBRSxjQUFjLEVBQ3ZCLFNBQVMsRUFBRSxnQkFBZ0IsRUFDM0IsVUFBVSxFQUFFLGlCQUFpQixFQUM3QixVQUFVLEVBQUUsaUJBQWlCLEVBQzdCLGNBQWMsRUFDZCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGVBQWUsRUFDZixVQUFVLEVBQUUsaUJBQWlCLEVBQzdCLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osYUFBYSxFQUFFLG9CQUFvQjtJQUNuQyw4QkFBOEI7SUFDOUIsUUFBUSxFQUFFLGVBQWUsRUFDekIsSUFBSSxFQUFFLFdBQVc7SUFDakIsMkJBQTJCO0lBQzNCLE9BQU8sRUFBRSxjQUFjLEVBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQ3ZCLGNBQWMsRUFBRSxxQkFBcUIsRUFDckMsY0FBYyxFQUFFLHFCQUFxQjtJQUNyQyx1RkFBdUY7SUFDdkYsZ0VBQWdFO01BQ2pFLEdBQUcsUUFBUSxDQUFDO0lBRWIsd0RBQXdEO0lBQ3hELG1EQUFtRDtJQUNuRCw0REFBNEQ7SUFDNUQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxtQ0FBbUM7SUFDdEUsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxrQ0FBa0M7SUFFckUsTUFBTSxlQUFlLEdBQUcsS0FBSyxFQUMzQixPQUFlLEVBQ2YsWUFBb0Isa0JBQWtCLEVBQ3RDLEdBQUcsSUFBVyxFQUNBLEVBQUU7UUFDaEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxPQUFPLFlBQVksU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3hFLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxPQUFPLFVBQVUsU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBRXBFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ3BELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQzlCLGtCQUFPLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDaEQsa0JBQU8sQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsZUFBZSxPQUFPLG9CQUFvQixjQUFjLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDeEYsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRWQsa0JBQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxNQUFXLEVBQUUsTUFBVyxFQUFFLEVBQUU7Z0JBQzdELFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdEIsa0JBQU8sQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM5QyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxzQkFBc0IsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDaEUsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztZQUVILGtCQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsTUFBVyxFQUFFLEtBQVUsRUFBRSxFQUFFO2dCQUMxRCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3RCLGtCQUFPLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDaEQsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsb0JBQW9CLE9BQU8sS0FBSyxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbEYsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sU0FBUyxHQUFHO2dCQUNoQixLQUFLLEVBQUUsQ0FBQyxZQUFvQixFQUFFLElBQVMsRUFBRSxFQUFFO29CQUN6QyxrQkFBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxDQUFDO2dCQUNELE1BQU0sRUFBRTtvQkFDTixJQUFJLEVBQUUsQ0FBQyxZQUFvQixFQUFFLElBQVMsRUFBRSxFQUFFO3dCQUN4QyxrQkFBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN6QyxDQUFDO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLE1BQU0sYUFBYSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztZQUNqRSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSwwQkFBMEIsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNwRSxrQkFBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsOERBQThEO0lBQzlELE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxJQUFrRCxFQUFFO1FBQ2xGLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLDJCQUEyQixFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDdkYsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUscUJBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRTlFLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqQixXQUFXLENBQUMsS0FBSyxDQUNmLElBQUksVUFBVSxxQ0FBcUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDMUUsQ0FBQztnQkFDRixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFRCx5RUFBeUU7WUFDekUsb0RBQW9EO1lBQ3BELElBQUksU0FBUyxHQUFRLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFFbkMsa0NBQWtDO1lBQ2xDLElBQUksU0FBUyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDNUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUNwQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztnQkFDL0IsQ0FBQztxQkFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksT0FBTyxTQUFTLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNwRSxzQkFBc0I7b0JBQ3RCLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUMvQixDQUFDO1lBQ0gsQ0FBQztZQUVELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLDBCQUEwQixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV0RixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsU0FBUyxTQUFTLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxDQUFDO2dCQUM3RSxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsbURBQW1ELE9BQU8sU0FBUyxFQUFFLENBQ3BGLENBQUM7WUFDRixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLHFDQUFxQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN0RixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixnQ0FBZ0M7SUFDaEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUN4QixPQUFZLEVBQ1osSUFBZ0csRUFDaEcsRUFBRTtRQUNGLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEdBQUcsSUFBSSxFQUFFLFVBQVUsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRW5GLElBQUksQ0FBQztZQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLHdCQUF3QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUzRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixPQUFPO29CQUNMLE9BQU8sRUFBRSxLQUFLO29CQUNkLE1BQU0sRUFBRSxJQUFJO29CQUNaLEtBQUssRUFBRSxtQkFBbUIsTUFBTSxFQUFFO2lCQUNuQyxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN6QixPQUFPO29CQUNMLE9BQU8sRUFBRSxLQUFLO29CQUNkLE1BQU0sRUFBRSxJQUFJO29CQUNaLEtBQUssRUFBRSxTQUFTLElBQUksQ0FBQyxJQUFJLDBEQUEwRCxJQUFJLENBQUMsSUFBSSxFQUFFO2lCQUMvRixDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUMzQyxXQUFXO2dCQUNYLFVBQVU7Z0JBQ1YsWUFBWSxFQUFFLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1lBRUgsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsaUNBQWlDLENBQUMsQ0FBQztZQUVsRSxPQUFPO2dCQUNMLE9BQU8sRUFBRSxJQUFJO2dCQUNiLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDNUIsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0QsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxNQUFNLEVBQUUsSUFBSTtnQkFDWixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO2FBQ3hDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLEtBQUssRUFBRTtZQUNMLFVBQVUsRUFBRSxZQUFZO1lBRXhCLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDckIsSUFBSSxDQUFDO29CQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLHVCQUF1QixDQUFDLENBQUM7b0JBRXhELE1BQU0sY0FBYyxHQUFHLE1BQU0saUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBRS9ELE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLElBQUk7d0JBQ1gsVUFBVSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7NEJBQzNDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSTs0QkFDYixZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVk7NEJBQzdCLDREQUE0RDs0QkFDNUQsVUFBVSxFQUNSLE9BQU8sRUFBRSxDQUFDLFVBQVUsS0FBSyxRQUFRO2dDQUMvQixDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPO2dDQUMvQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVU7NEJBQ25CLFNBQVMsRUFDUCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEtBQUssUUFBUTtnQ0FDOUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSTtnQ0FDMUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTOzRCQUNsQixRQUFRLEVBQ04sT0FBTyxFQUFFLENBQUMsUUFBUSxLQUFLLFFBQVE7Z0NBQzdCLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUk7Z0NBQ3hDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUTt5QkFDbEIsQ0FBQyxDQUFDO3FCQUNKLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDeEUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3dCQUN2QyxVQUFVLEVBQUUsRUFBRTtxQkFDZixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFZLEVBQUUsSUFBdUIsRUFBRSxFQUFFO2dCQUM1RCxNQUFNLEVBQUUsSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQztnQkFFOUIsSUFBSSxDQUFDO29CQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLDZCQUE2QixJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUVyRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsa0NBQWtDOzRCQUN6QyxRQUFRLEVBQUUsRUFBRTt5QkFDYixDQUFDO29CQUNKLENBQUM7b0JBRUQsTUFBTSxPQUFPLEdBQTJCO3dCQUN0QyxHQUFHLEVBQUUsS0FBSzt3QkFDVixRQUFRLEVBQUUsT0FBTzt3QkFDakIsU0FBUyxFQUFFLE9BQU87cUJBQ25CLENBQUM7b0JBRUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQzlELE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBRS9FLE1BQU0sV0FBVyxHQUEyRCxFQUFFLENBQUM7b0JBRS9FLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQzt3QkFDbEUsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBK0IsQ0FBQyxFQUFFLENBQUM7NEJBQzlFLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0NBQ2YsSUFBSTtnQ0FDSixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJO2dDQUN4QixPQUFPOzZCQUNSLENBQUMsQ0FBQzt3QkFDTCxDQUFDO29CQUNILENBQUM7b0JBRUQsT0FBTzt3QkFDTCxPQUFPLEVBQUUsSUFBSTt3QkFDYixLQUFLLEVBQUUsSUFBSTt3QkFDWCxRQUFRLEVBQUUsV0FBVztxQkFDdEIsQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNyRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7d0JBQ3ZDLFFBQVEsRUFBRSxFQUFFO3FCQUNiLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFFRCw4QkFBOEI7WUFDOUIsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNwQixJQUFJLENBQUM7b0JBQ0gsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsNENBQTRDLENBQUMsQ0FBQztvQkFFN0UsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUNyQixPQUFPOzRCQUNMLGFBQWEsRUFBRSxLQUFLOzRCQUNwQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxTQUFTLEVBQUUsSUFBSTs0QkFDZixXQUFXLEVBQUUsSUFBSTs0QkFDakIsV0FBVyxFQUFFLElBQUk7NEJBQ2pCLEtBQUssRUFBRSx1Q0FBdUM7eUJBQy9DLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxtRUFBbUU7b0JBQ25FLE1BQU0sV0FBVyxHQUFHLE1BQU0sZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUUzRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2pCLE9BQU87NEJBQ0wsYUFBYSxFQUFFLEtBQUs7NEJBQ3BCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFNBQVMsRUFBRSxJQUFJOzRCQUNmLFdBQVcsRUFBRSxJQUFJOzRCQUNqQixXQUFXLEVBQUUsSUFBSTs0QkFDakIsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQztvQkFDSixDQUFDO29CQUVELDhDQUE4QztvQkFDOUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUNqQixJQUFJLFdBQVcsRUFBRSxDQUFDO3dCQUNoQixJQUFJLENBQUM7NEJBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7NEJBQ3ZELEtBQUssR0FBRyxXQUFXLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQzt3QkFDckMsQ0FBQzt3QkFBQyxNQUFNLENBQUM7NEJBQ1AsbURBQW1EO3dCQUNyRCxDQUFDO29CQUNILENBQUM7b0JBRUQsT0FBTzt3QkFDTCxhQUFhLEVBQUUsSUFBSTt3QkFDbkIsS0FBSzt3QkFDTCxTQUFTLEVBQUUsSUFBSTt3QkFDZixXQUFXLEVBQUUsSUFBSTt3QkFDakIsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDeEUsT0FBTzt3QkFDTCxhQUFhLEVBQUUsS0FBSzt3QkFDcEIsS0FBSyxFQUFFLElBQUk7d0JBQ1gsU0FBUyxFQUFFLElBQUk7d0JBQ2YsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3FCQUN4QyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFZLEVBQUUsSUFBNEIsRUFBRSxFQUFFO2dCQUNqRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUUzQixJQUFJLENBQUM7b0JBQ0gsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsNEJBQTRCLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDekYsQ0FBQztvQkFFRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3JCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLHVDQUF1Qzs0QkFDOUMsS0FBSyxFQUFFLEVBQUU7NEJBQ1QsS0FBSyxFQUFFLENBQUM7eUJBQ1QsQ0FBQztvQkFDSixDQUFDO29CQUVELHVEQUF1RDtvQkFDdkQsTUFBTSxXQUFXLEdBQUcsTUFBTSxlQUFlLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDakIsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsK0RBQStEOzRCQUN0RSxLQUFLLEVBQUUsRUFBRTs0QkFDVCxLQUFLLEVBQUUsQ0FBQzt5QkFDVCxDQUFDO29CQUNKLENBQUM7b0JBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNqQixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxzQ0FBc0M7NEJBQzdDLEtBQUssRUFBRSxFQUFFOzRCQUNULEtBQUssRUFBRSxDQUFDO3lCQUNULENBQUM7b0JBQ0osQ0FBQztvQkFFRCw4Q0FBOEM7b0JBQzlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUVwRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2QsT0FBTzs0QkFDTCxPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQUUsSUFBSTs0QkFDWCxLQUFLLEVBQUUsRUFBRTs0QkFDVCxLQUFLLEVBQUUsQ0FBQzt5QkFDVCxDQUFDO29CQUNKLENBQUM7b0JBRUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDNUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO3dCQUNkLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTt3QkFDbEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksWUFBWTt3QkFDaEQsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSTt3QkFDdEMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJO3dCQUM3RCxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxTQUFTLElBQUksSUFBSTt3QkFDakQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksSUFBSTt3QkFDeEMsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksbUJBQW1CO3dCQUM1QyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUk7cUJBQ3ZCLENBQUMsQ0FBQyxDQUFDO29CQUVKLE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLElBQUk7d0JBQ1gsS0FBSzt3QkFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU07cUJBQ3BCLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDdEUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3dCQUN2QyxLQUFLLEVBQUUsRUFBRTt3QkFDVCxLQUFLLEVBQUUsQ0FBQztxQkFDVCxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsMEJBQTBCO1lBQzFCLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBWSxFQUFFLElBQXdCLEVBQUUsRUFBRTtnQkFDM0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztnQkFFeEIsSUFBSSxDQUFDO29CQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLHFDQUFxQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO29CQUU5RSx5QkFBeUI7b0JBQ3pCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDVixPQUFPOzRCQUNMLE1BQU0sRUFBRSxLQUFLOzRCQUNiLFFBQVEsRUFBRSxJQUFJOzRCQUNkLFdBQVcsRUFBRSxFQUFFOzRCQUNmLGVBQWUsRUFBRSxDQUFDOzRCQUNsQixPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQUUsbUJBQW1CLE1BQU0sRUFBRTt5QkFDbkMsQ0FBQztvQkFDSixDQUFDO29CQUVELGdDQUFnQztvQkFDaEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7b0JBQ25ELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUM7b0JBRTlFLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsT0FBTzs0QkFDTCxNQUFNLEVBQUUsS0FBSzs0QkFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7NEJBQ25CLFdBQVcsRUFBRSxFQUFFOzRCQUNmLGVBQWUsRUFBRSxDQUFDOzRCQUNsQixPQUFPLEVBQ0wsZ0dBQWdHOzRCQUNsRyxLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDO29CQUNKLENBQUM7b0JBRUQsMEVBQTBFO29CQUMxRSxNQUFNLFdBQVcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ25DLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQU0sRUFBRSxFQUFFO3dCQUNsQyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsa0JBQWtCO3dCQUNwRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7d0JBQ3JCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQzt3QkFFekIsOERBQThEO3dCQUM5RCxxRUFBcUU7d0JBQ3JFLElBQUksV0FBVyxJQUFJLE9BQU8sV0FBVyxDQUFDLGNBQWMsS0FBSyxVQUFVLEVBQUUsQ0FBQzs0QkFDcEUsSUFBSSxDQUFDO2dDQUNILFdBQVcsQ0FBQyxJQUFJLENBQ2QsSUFBSSxVQUFVLHNDQUFzQyxDQUFDLENBQUMsWUFBWSxTQUFTLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FDN0YsQ0FBQztnQ0FDRixNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQ0FDcEQsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsU0FBUyxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQ2xFLENBQUM7Z0NBQ0YsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQ0FDcEMsNENBQTRDO29DQUM1QyxXQUFXLENBQUMsSUFBSSxDQUNkLElBQUksVUFBVSwrQkFBK0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQ3BGLENBQUM7b0NBRUYscUVBQXFFO29DQUNyRSwwQ0FBMEM7b0NBQzFDLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQ25DLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDVCxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsWUFBWTt3Q0FDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQzFELENBQUM7b0NBRUYsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3Q0FDcEIsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsa0JBQWtCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dDQUN6RSxXQUFXLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQzt3Q0FDbkMsU0FBUyxHQUFHLG9DQUFvQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7d0NBQ3ZFLGFBQWE7NENBQ1gsZUFBZSxDQUFDLGNBQWMsSUFBSSxlQUFlLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztvQ0FDcEUsQ0FBQzt5Q0FBTSxDQUFDO3dDQUNOLFdBQVcsQ0FBQyxJQUFJLENBQ2QsSUFBSSxVQUFVLDJDQUEyQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQzFFLENBQUM7b0NBQ0osQ0FBQztnQ0FDSCxDQUFDOzRCQUNILENBQUM7NEJBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztnQ0FDaEIsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsMENBQTBDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FDcEUsQ0FBQzs0QkFDSixDQUFDO3dCQUNILENBQUM7NkJBQU0sQ0FBQzs0QkFDTixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSwrQ0FBK0MsQ0FBQyxDQUFDO3dCQUNsRixDQUFDO3dCQUVELE9BQU87NEJBQ0wsZUFBZSxFQUFFLENBQUMsQ0FBQyxZQUFZOzRCQUMvQixXQUFXOzRCQUNYLFdBQVcsRUFBRSxDQUFDLENBQUMsYUFBYSxJQUFJLElBQUk7NEJBQ3BDLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUk7NEJBQzlCLFNBQVM7NEJBQ1QsYUFBYTt5QkFDZCxDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7b0JBRUYsMkRBQTJEO29CQUMzRCxNQUFNLFlBQVksR0FBRzt3QkFDbkIsT0FBTyxFQUFFLElBQUk7d0JBQ2IsT0FBTyxFQUFFLElBQUk7d0JBQ2IsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUM7d0JBQ3pELGtCQUFrQixFQUFFLElBQUk7d0JBQ3hCLHFCQUFxQixFQUFFLElBQUk7cUJBQzVCLENBQUM7b0JBRUYsT0FBTzt3QkFDTCxNQUFNLEVBQUUsSUFBSTt3QkFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7d0JBQ25CLFdBQVc7d0JBQ1gsZUFBZSxFQUFFLFdBQVcsQ0FBQyxNQUFNO3dCQUNuQyxZQUFZO3dCQUNaLE9BQU8sRUFBRSxJQUFJO3dCQUNiLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSwyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDcEUsT0FBTzt3QkFDTCxNQUFNLEVBQUUsS0FBSzt3QkFDYixRQUFRLEVBQUUsSUFBSTt3QkFDZCxXQUFXLEVBQUUsRUFBRTt3QkFDZixlQUFlLEVBQUUsQ0FBQzt3QkFDbEIsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZTtxQkFDeEMsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELDBCQUEwQjtZQUMxQixZQUFZLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQztvQkFDSCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSwwQkFBMEIsQ0FBQyxDQUFDO29CQUUzRCxpREFBaUQ7b0JBQ2pELE1BQU0sU0FBUyxHQUFHLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztvQkFDN0MsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsU0FBUyxTQUFTLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxDQUFDO29CQUU3RSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQzNCLE9BQU87NEJBQ0wsU0FBUyxFQUFFLEtBQUs7NEJBQ2hCLGNBQWMsRUFBRSxLQUFLOzRCQUNyQixPQUFPLEVBQUUsSUFBSTs0QkFDYixXQUFXLEVBQUUsSUFBSTs0QkFDakIsT0FBTyxFQUNMLDZIQUE2SDs0QkFDL0gsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQztvQkFDSixDQUFDO29CQUVELDJDQUEyQztvQkFDM0MsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FDcEMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUNyRSxDQUFDO29CQUNULE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQ25DLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FDbkUsQ0FBQztvQkFFVCxNQUFNLGFBQWEsR0FBRyxlQUFlO3dCQUNuQyxDQUFDLENBQUM7NEJBQ0UsYUFBYSxFQUFFLElBQUk7NEJBQ25CLFNBQVMsRUFBRSxlQUFlLENBQUMsRUFBRTs0QkFDN0IsS0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLLElBQUksSUFBSTt5QkFDckM7d0JBQ0gsQ0FBQyxDQUFDOzRCQUNFLGFBQWEsRUFBRSxLQUFLOzRCQUNwQixTQUFTLEVBQUUsSUFBcUI7NEJBQ2hDLEtBQUssRUFBRSxJQUFxQjt5QkFDN0IsQ0FBQztvQkFFTixNQUFNLGlCQUFpQixHQUFHLGNBQWM7d0JBQ3RDLENBQUMsQ0FBQzs0QkFDRSxhQUFhLEVBQUUsSUFBSTs0QkFDbkIsU0FBUyxFQUFFLGNBQWMsQ0FBQyxFQUFFOzRCQUM1QixLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUssSUFBSSxJQUFJO3lCQUNwQzt3QkFDSCxDQUFDLENBQUM7NEJBQ0UsYUFBYSxFQUFFLEtBQUs7NEJBQ3BCLFNBQVMsRUFBRSxJQUFxQjs0QkFDaEMsS0FBSyxFQUFFLElBQXFCO3lCQUM3QixDQUFDO29CQUVOLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUV6QyxPQUFPO3dCQUNMLFNBQVMsRUFBRSxXQUFXO3dCQUN0QixjQUFjLEVBQUUsSUFBSTt3QkFDcEIsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLFdBQVcsRUFBRSxpQkFBaUI7d0JBQzlCLE9BQU8sRUFBRSxXQUFXOzRCQUNsQixDQUFDLENBQUMsSUFBSTs0QkFDTixDQUFDLENBQUMsNkZBQTZGO3dCQUNqRyxLQUFLLEVBQUUsSUFBSTtxQkFDWixDQUFDO2dCQUNKLENBQUM7Z0JBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztvQkFDcEIsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzNFLE9BQU87d0JBQ0wsU0FBUyxFQUFFLEtBQUs7d0JBQ2hCLGNBQWMsRUFBRSxLQUFLO3dCQUNyQixPQUFPLEVBQUUsSUFBSTt3QkFDYixXQUFXLEVBQUUsSUFBSTt3QkFDakIsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZTtxQkFDeEMsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBWSxFQUFFLElBQTBDLEVBQUUsRUFBRTtnQkFDOUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBRWxDLElBQUksQ0FBQztvQkFDSCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSw4QkFBOEIsTUFBTSxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBRXhGLFdBQVc7b0JBQ1gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNWLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsUUFBUSxFQUFFLElBQUk7NEJBQ2QsUUFBUTs0QkFDUixPQUFPLEVBQUUsRUFBRTs0QkFDWCxLQUFLLEVBQUUsQ0FBQzs0QkFDUixLQUFLLEVBQUUsbUJBQW1CLE1BQU0sRUFBRTt5QkFDbkMsQ0FBQztvQkFDSixDQUFDO29CQUVELHlDQUF5QztvQkFDekMsTUFBTSxTQUFTLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO29CQUM3QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQzNCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJOzRCQUNuQixRQUFROzRCQUNSLE9BQU8sRUFBRSxFQUFFOzRCQUNYLEtBQUssRUFBRSxDQUFDOzRCQUNSLEtBQUssRUFDSCxzRkFBc0Y7eUJBQ3pGLENBQUM7b0JBQ0osQ0FBQztvQkFFRCwyRUFBMkU7b0JBQzNFLE1BQU0sV0FBVyxHQUEyQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO29CQUMxRixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDO29CQUNyRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDO29CQUV4RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3JCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJOzRCQUNuQixRQUFROzRCQUNSLE9BQU8sRUFBRSxFQUFFOzRCQUNYLEtBQUssRUFBRSxDQUFDOzRCQUNSLEtBQUssRUFBRSxhQUFhLFFBQVEsZ0NBQWdDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7eUJBQzNHLENBQUM7b0JBQ0osQ0FBQztvQkFFRCwyRUFBMkU7b0JBQzNFLHlGQUF5RjtvQkFDekYsb0RBQW9EO29CQUNwRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FDbEMsNEJBQTRCLEVBQzVCLG1CQUFtQixFQUNuQixNQUFNLEVBQ04sZUFBZSxDQUFDLEVBQUUsRUFDbEIsQ0FBQyxDQUNGLENBQUM7b0JBQ0YsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsb0NBQW9DLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDM0UsQ0FBQztvQkFFRixJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDakIsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7NEJBQ25CLFFBQVE7NEJBQ1IsT0FBTyxFQUFFLEVBQUU7NEJBQ1gsS0FBSyxFQUFFLENBQUM7NEJBQ1IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLHdCQUF3Qjt5QkFDeEQsQ0FBQztvQkFDSixDQUFDO29CQUVELHdEQUF3RDtvQkFDeEQsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztvQkFDaEMsSUFBSSxXQUFXLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO3dCQUNsRiw2Q0FBNkM7d0JBQzdDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzs0QkFDdEMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7d0JBQ25DLENBQUM7NkJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDOzRCQUNoRCxXQUFXLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQzt3QkFDdEMsQ0FBQzs2QkFBTSxJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7NEJBQzdFLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQzt3QkFDN0MsQ0FBQztvQkFDSCxDQUFDO29CQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM5RCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxlQUFlLE9BQU8sQ0FBQyxNQUFNLFVBQVUsQ0FBQyxDQUFDO29CQUV4RSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDbkIsUUFBUTt3QkFDUixPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQzs0QkFDaEMsbUZBQW1GOzRCQUNuRixrREFBa0Q7NEJBQ2xELFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFFBQVE7NEJBQ2hELFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPOzRCQUMzRSxJQUFJLEVBQ0YsQ0FBQyxDQUFDLFlBQVksRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUU7NEJBQ3JGLFVBQVUsRUFBRSxDQUFDLENBQUMsWUFBWSxFQUFFLElBQUk7Z0NBQzlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxRQUFRO2dDQUNoQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTTs0QkFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7eUJBQ3ZFLENBQUMsQ0FBQzt3QkFDSCxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU07d0JBQ3JCLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSwyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDcEUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxRQUFRLEVBQUUsSUFBSTt3QkFDZCxRQUFRO3dCQUNSLE9BQU8sRUFBRSxFQUFFO3dCQUNYLEtBQUssRUFBRSxDQUFDO3dCQUNSLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7cUJBQ3hDLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFFRCwwQkFBMEI7WUFDMUIsY0FBYyxFQUFFLEtBQUssRUFBRSxPQUFZLEVBQUUsSUFBd0MsRUFBRSxFQUFFO2dCQUMvRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBRXBDLElBQUksQ0FBQztvQkFDSCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxtQ0FBbUMsTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFFNUUsK0JBQStCO29CQUMvQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ1YsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxRQUFRLEVBQUUsSUFBSTs0QkFDZCxNQUFNLEVBQUUsRUFBRTs0QkFDVixLQUFLLEVBQUUsQ0FBQzs0QkFDUixLQUFLLEVBQUUsbUJBQW1CLE1BQU0sRUFBRTt5QkFDbkMsQ0FBQztvQkFDSixDQUFDO29CQUVELCtDQUErQztvQkFDL0MsSUFBSSxDQUFDLHFCQUFxQixJQUFJLE9BQU8scUJBQXFCLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUNwRixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTs0QkFDbkIsTUFBTSxFQUFFLEVBQUU7NEJBQ1YsS0FBSyxFQUFFLENBQUM7NEJBQ1IsS0FBSyxFQUFFLG9DQUFvQzt5QkFDNUMsQ0FBQztvQkFDSixDQUFDO29CQUVELE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdkQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBRTdDLE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNuQixNQUFNLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQzs0QkFDckMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixJQUFJLElBQUk7NEJBQzlDLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUzs0QkFDdEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXOzRCQUMxQixTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7NEJBQ3RCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUk7eUJBQ3pCLENBQUMsQ0FBQzt3QkFDSCxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU07d0JBQzNCLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDeEUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxRQUFRLEVBQUUsSUFBSTt3QkFDZCxNQUFNLEVBQUUsRUFBRTt3QkFDVixLQUFLLEVBQUUsQ0FBQzt3QkFDUixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3FCQUN4QyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsOERBQThEO1lBQzlELGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBWSxFQUFFLElBQTRDLEVBQUUsRUFBRTtnQkFDbkYsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQUcsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUU1QyxJQUFJLENBQUM7b0JBQ0gsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsOEJBQThCLE1BQU0sZUFBZSxTQUFTLEVBQUUsQ0FDN0UsQ0FBQztvQkFFRixxQkFBcUI7b0JBQ3JCLElBQUksU0FBUyxLQUFLLE1BQU0sSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7d0JBQ2pELE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsUUFBUSxFQUFFLElBQUk7NEJBQ2QsU0FBUzs0QkFDVCxLQUFLLEVBQUUsRUFBRTs0QkFDVCxRQUFRLEVBQUUsRUFBRTs0QkFDWixPQUFPLEVBQUUsRUFBRTs0QkFDWCxZQUFZLEVBQUUsQ0FBQzs0QkFDZixPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQUUsOENBQThDO3lCQUN0RCxDQUFDO29CQUNKLENBQUM7b0JBRUQsV0FBVztvQkFDWCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ1YsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxRQUFRLEVBQUUsSUFBSTs0QkFDZCxTQUFTOzRCQUNULEtBQUssRUFBRSxFQUFFOzRCQUNULFFBQVEsRUFBRSxFQUFFOzRCQUNaLE9BQU8sRUFBRSxFQUFFOzRCQUNYLFlBQVksRUFBRSxDQUFDOzRCQUNmLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFBRSxtQkFBbUIsTUFBTSxFQUFFO3lCQUNuQyxDQUFDO29CQUNKLENBQUM7b0JBRUQsdUJBQXVCO29CQUN2QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQztvQkFDakYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUNuQixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTs0QkFDbkIsU0FBUzs0QkFDVCxLQUFLLEVBQUUsRUFBRTs0QkFDVCxRQUFRLEVBQUUsRUFBRTs0QkFDWixPQUFPLEVBQUUsRUFBRTs0QkFDWCxZQUFZLEVBQUUsQ0FBQzs0QkFDZixPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQ0gsK0VBQStFO3lCQUNsRixDQUFDO29CQUNKLENBQUM7b0JBRUQsNkJBQTZCO29CQUM3QixJQUNFLENBQUMscUJBQXFCO3dCQUN0QixPQUFPLHFCQUFxQixDQUFDLGlCQUFpQixLQUFLLFVBQVUsRUFDN0QsQ0FBQzt3QkFDRCxPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTs0QkFDbkIsU0FBUzs0QkFDVCxLQUFLLEVBQUUsRUFBRTs0QkFDVCxRQUFRLEVBQUUsRUFBRTs0QkFDWixPQUFPLEVBQUUsRUFBRTs0QkFDWCxZQUFZLEVBQUUsQ0FBQzs0QkFDZixPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQUUsbUNBQW1DO3lCQUMzQyxDQUFDO29CQUNKLENBQUM7b0JBRUQsZ0NBQWdDO29CQUNoQyxJQUFJLFdBQVcsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO29CQUM3QyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7b0JBQ3ZCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFFbkIsSUFBSSxXQUFXLElBQUksT0FBTyxXQUFXLENBQUMsY0FBYyxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUNwRSxNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDcEQsTUFBTSxlQUFlLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FDcEMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUNULENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLGFBQWEsQ0FBQyxZQUFZOzRCQUN6QyxDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FDbEYsQ0FBQzt3QkFDRixJQUFJLGVBQWUsRUFBRSxDQUFDOzRCQUNwQixXQUFXLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQzs0QkFDbkMsYUFBYTtnQ0FDWCxlQUFlLENBQUMsY0FBYztvQ0FDOUIsZUFBZSxDQUFDLEtBQUs7b0NBQ3JCLEdBQUcsZUFBZSxDQUFDLElBQUksZUFBZSxDQUFDOzRCQUN6QyxTQUFTLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQzt3QkFDakMsQ0FBQztvQkFDSCxDQUFDO29CQUVELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDbkIsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7NEJBQ25CLFNBQVM7NEJBQ1QsS0FBSyxFQUFFLEVBQUU7NEJBQ1QsUUFBUSxFQUFFLEVBQUU7NEJBQ1osT0FBTyxFQUFFLEVBQUU7NEJBQ1gsWUFBWSxFQUFFLENBQUM7NEJBQ2YsT0FBTyxFQUFFLElBQUk7NEJBQ2IsS0FBSyxFQUNILHFGQUFxRjt5QkFDeEYsQ0FBQztvQkFDSixDQUFDO29CQUVELG9EQUFvRDtvQkFDcEQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsbUNBQW1DLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQ2pGLE1BQU0sYUFBYSxHQUFHLE1BQU0scUJBQXFCLENBQUMsaUJBQWlCLENBQUM7d0JBQ2xFLFdBQVcsRUFBRTs0QkFDWCxtQkFBbUIsRUFBRSxXQUFXOzRCQUNoQyxpQkFBaUIsRUFBRSxTQUFTOzRCQUM1QixjQUFjLEVBQUUsYUFBYSxDQUFDLFlBQVk7NEJBQzFDLHFCQUFxQixFQUFFLGFBQWE7NEJBQ3BDLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRTt5QkFDckI7d0JBQ0QsU0FBUyxFQUFFLFNBQTRCO3dCQUN2QyxjQUFjLEVBQUUsS0FBSztxQkFDdEIsQ0FBQyxDQUFDO29CQUVILHFCQUFxQjtvQkFDckIsTUFBTSxLQUFLLEdBQUcsYUFBYTt5QkFDeEIsTUFBTSxDQUNMLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDVCxDQUFDLENBQUMsV0FBVyxLQUFLLFFBQVE7d0JBQzFCLENBQUMsQ0FBQyxXQUFXLEtBQUssUUFBUTt3QkFDMUIsQ0FBQyxDQUFDLFdBQVcsS0FBSyxVQUFVLENBQy9CO3lCQUNBLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDaEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO3dCQUNaLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVzt3QkFDMUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO3dCQUNaLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtxQkFDYixDQUFDLENBQUMsQ0FBQztvQkFFTixNQUFNLFFBQVEsR0FBRyxhQUFhO3lCQUMzQixNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDO3lCQUM5QyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ2hCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTt3QkFDWixXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7d0JBQzFCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTt3QkFDWixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7cUJBQ2IsQ0FBQyxDQUFDLENBQUM7b0JBRU4sTUFBTSxPQUFPLEdBQUcsYUFBYTt5QkFDMUIsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQzt5QkFDOUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNoQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7d0JBQ1osV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO3dCQUMxQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7d0JBQ1osSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO3FCQUNiLENBQUMsQ0FBQyxDQUFDO29CQUVOLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO29CQUNyRSxNQUFNLGNBQWMsR0FBRyxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztvQkFFNUUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsSUFBSTt3QkFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7d0JBQ25CLFNBQVM7d0JBQ1QsS0FBSzt3QkFDTCxRQUFRO3dCQUNSLE9BQU87d0JBQ1AsWUFBWTt3QkFDWixPQUFPLEVBQ0wsWUFBWSxHQUFHLENBQUM7NEJBQ2QsQ0FBQyxDQUFDLEdBQUcsWUFBWSxxQkFBcUIsY0FBYyxNQUFNLEtBQUssQ0FBQyxNQUFNLFdBQVcsUUFBUSxDQUFDLE1BQU0sY0FBYyxPQUFPLENBQUMsTUFBTSxVQUFVOzRCQUN0SSxDQUFDLENBQUMsd0JBQXdCLGNBQWMsR0FBRzt3QkFDL0MsS0FBSyxFQUFFLElBQUk7cUJBQ1osQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLCtCQUErQixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUN4RSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLFFBQVEsRUFBRSxJQUFJO3dCQUNkLFNBQVM7d0JBQ1QsS0FBSyxFQUFFLEVBQUU7d0JBQ1QsUUFBUSxFQUFFLEVBQUU7d0JBQ1osT0FBTyxFQUFFLEVBQUU7d0JBQ1gsWUFBWSxFQUFFLENBQUM7d0JBQ2YsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZTtxQkFDeEMsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztTQUNGO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsS0FBSyxFQUFFLFlBQVk7WUFFbkIsVUFBVSxFQUFFLEtBQUssRUFDZixPQUFZLEVBQ1osSUFXQyxFQUNELEVBQUU7Z0JBQ0YsK0JBQStCO2dCQUMvQixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxrQ0FBa0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBRXpGLE1BQU0sRUFDSixJQUFJLEVBQ0osVUFBVSxFQUNWLFNBQVMsR0FBRyxPQUFPLEVBQ25CLFFBQVEsR0FBRyxPQUFPLEVBQ2xCLGVBQWUsR0FBRyxPQUFPLEVBQ3pCLGVBQWUsR0FBRyxVQUFVLEVBQzVCLFlBQVksR0FBRyxrQkFBa0IsRUFDakMsU0FBUyxHQUNWLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFFZixpQ0FBaUM7Z0JBQ2pDLFdBQVcsQ0FBQyxJQUFJLENBQ2QsSUFBSSxVQUFVLDBCQUEwQixJQUFJLGdCQUFnQixTQUFTLHVCQUF1QixPQUFPLFNBQVMsRUFBRSxDQUMvRyxDQUFDO2dCQUVGLElBQUksQ0FBQztvQkFDSCxXQUFXLENBQUMsSUFBSSxDQUNkLElBQUksVUFBVSxvQkFBb0IsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDNUYsQ0FBQztvQkFFRixxQ0FBcUM7b0JBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUk7eUJBQ2xCLFdBQVcsRUFBRTt5QkFDYixPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQzt5QkFDM0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDekIsTUFBTSxVQUFVLEdBQUcsR0FBRyxRQUFRLFFBQVEsQ0FBQztvQkFFdkMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzdCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUVsRSw0RUFBNEU7b0JBQzVFLElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ2QsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsbUNBQW1DLFNBQVMsRUFBRSxDQUFDLENBQUM7d0JBRS9FLHlDQUF5Qzt3QkFDekMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDcEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsR0FBRyxTQUFTLE1BQU0sQ0FBQyxDQUFDO3dCQUVuRixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSwrQkFBK0IsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO3dCQUVsRiwwQkFBMEI7d0JBQzFCLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQzs0QkFDckMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsNkJBQTZCLGdCQUFnQixFQUFFLENBQUMsQ0FBQzs0QkFDakYsT0FBTztnQ0FDTCxPQUFPLEVBQUUsS0FBSztnQ0FDZCxLQUFLLEVBQUUsd0JBQXdCLFNBQVMsb0RBQW9EO2dDQUM1RixNQUFNLEVBQUUsSUFBSTtnQ0FDWixRQUFRLEVBQUUsSUFBSTtnQ0FDZCxVQUFVLEVBQUUsSUFBSTs2QkFDakIsQ0FBQzt3QkFDSixDQUFDO3dCQUVELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLHlCQUF5QixnQkFBZ0IsRUFBRSxDQUFDLENBQUM7d0JBRTVFLGtFQUFrRTt3QkFDbEUsSUFBSSxhQUFrQixDQUFDO3dCQUN2QixJQUFJLENBQUM7NEJBQ0gsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7NEJBQzdDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLHVDQUF1QyxDQUFDLENBQUM7NEJBRXhFLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7NEJBQzVELE1BQU0sT0FBTyxHQUFHLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUNwQyxXQUFXLENBQUMsSUFBSSxDQUNkLElBQUksVUFBVSxnQ0FBZ0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FDNUUsQ0FBQzs0QkFFRixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7Z0NBQ3pDLENBQUMsQ0FBQyxpQkFBaUI7Z0NBQ25CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQzs0QkFDM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsNEJBQTRCLFFBQVEsRUFBRSxDQUFDLENBQUM7NEJBRXZFLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQzs0QkFDM0MsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUNsRCxNQUFNLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDbEIsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsK0JBQStCLEVBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FDaEQsQ0FBQzt3QkFDSixDQUFDO3dCQUFDLE9BQU8sUUFBYSxFQUFFLENBQUM7NEJBQ3ZCLFdBQVcsQ0FBQyxLQUFLLENBQ2YsSUFBSSxVQUFVLG1DQUFtQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQ25FLFFBQVEsQ0FDVCxDQUFDOzRCQUNGLE9BQU87Z0NBQ0wsT0FBTyxFQUFFLEtBQUs7Z0NBQ2QsS0FBSyxFQUFFLHNDQUFzQyxRQUFRLENBQUMsT0FBTyxFQUFFO2dDQUMvRCxNQUFNLEVBQUUsSUFBSTtnQ0FDWixRQUFRLEVBQUUsSUFBSTtnQ0FDZCxVQUFVLEVBQUUsSUFBSTs2QkFDakIsQ0FBQzt3QkFDSixDQUFDO3dCQUVELHdCQUF3Qjt3QkFDeEIsTUFBTSxjQUFjLEdBQVE7NEJBQzFCLFFBQVEsRUFBRSxJQUFJOzRCQUNkLFVBQVUsRUFBRSxVQUFVOzRCQUN0QixRQUFRLEVBQUUsUUFBUTs0QkFDbEIsR0FBRyxFQUFFLGdCQUFnQjs0QkFDckIsVUFBVSxFQUFFO2dDQUNWLElBQUksRUFBRSxpQkFBaUI7Z0NBQ3ZCLE9BQU8sRUFBRSxhQUFhOzZCQUN2Qjs0QkFDRCxXQUFXLEVBQUUsYUFBYSxDQUFDLFdBQVcsSUFBSSxVQUFVOzRCQUNwRCxTQUFTLEVBQUUsU0FBUzt5QkFDckIsQ0FBQzt3QkFFRixvREFBb0Q7d0JBQ3BELElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUMzQixzQkFBc0I7NEJBQ3RCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDM0QsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUN0QixDQUFDOzRCQUNULElBQUksVUFBVSxFQUFFLENBQUM7Z0NBQ2YsY0FBYyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDOzRCQUNqRCxDQUFDOzRCQUVELG1CQUFtQjs0QkFDbkIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUMxRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQzlDLENBQUM7NEJBQ1QsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQ0FDZCxjQUFjLENBQUMsUUFBUSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7NEJBQ3JFLENBQUM7NEJBRUQscUJBQXFCOzRCQUNyQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQzNELENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FDM0MsQ0FBQzs0QkFDVCxJQUFJLFVBQVUsRUFBRSxDQUFDO2dDQUNmLGNBQWMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs0QkFDeEUsQ0FBQzt3QkFDSCxDQUFDOzZCQUFNLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDOzRCQUNwQyxjQUFjLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7d0JBQ3ZELENBQUM7d0JBRUQsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsNkJBQTZCLEVBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FDakQsQ0FBQzt3QkFFRixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzs0QkFDdkIsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsdUNBQXVDLENBQUMsQ0FBQzs0QkFDekUsT0FBTztnQ0FDTCxPQUFPLEVBQUUsS0FBSztnQ0FDZCxLQUFLLEVBQUUsOEJBQThCO2dDQUNyQyxNQUFNLEVBQUUsSUFBSTtnQ0FDWixRQUFRLEVBQUUsSUFBSTtnQ0FDZCxVQUFVLEVBQUUsSUFBSTs2QkFDakIsQ0FBQzt3QkFDSixDQUFDO3dCQUVELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLHNDQUFzQyxDQUFDLENBQUM7d0JBRXZFLHFEQUFxRDt3QkFDckQsTUFBTSxZQUFZLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBRWpFLFdBQVcsQ0FBQyxJQUFJLENBQ2QsSUFBSSxVQUFVLGtCQUFrQixFQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUN6RCxDQUFDO3dCQUVGLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQzs0QkFDcEMsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsK0NBQStDLElBQUksS0FBSyxZQUFZLENBQUMsRUFBRSxHQUFHLENBQ3pGLENBQUM7NEJBQ0YsT0FBTztnQ0FDTCxPQUFPLEVBQUUsSUFBSTtnQ0FDYixLQUFLLEVBQUUsSUFBSTtnQ0FDWCxNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0NBQ3ZCLFFBQVEsRUFBRSxJQUFJO2dDQUNkLFVBQVUsRUFBRSxVQUFVOzZCQUN2QixDQUFDO3dCQUNKLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSx3Q0FBd0MsQ0FBQyxDQUFDOzRCQUN6RSxPQUFPO2dDQUNMLE9BQU8sRUFBRSxJQUFJO2dDQUNiLEtBQUssRUFBRSxJQUFJO2dDQUNYLE1BQU0sRUFBRSxJQUFJO2dDQUNaLFFBQVEsRUFBRSxJQUFJO2dDQUNkLFVBQVUsRUFBRSxVQUFVOzZCQUN2QixDQUFDO3dCQUNKLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxxQ0FBcUM7b0JBQ3JDLE1BQU0sV0FBVyxHQUFRO3dCQUN2QixRQUFRLEVBQUUsSUFBSTt3QkFDZCxVQUFVLEVBQUUsVUFBVTt3QkFDdEIsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLFNBQVMsRUFBRSxTQUFTO3dCQUNwQixRQUFRLEVBQUUsUUFBUTtxQkFDbkIsQ0FBQztvQkFFRixJQUFJLFVBQVUsRUFBRSxDQUFDO3dCQUNmLFdBQVcsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO29CQUN0QyxDQUFDO29CQUVELE1BQU0sYUFBYSxHQUFHO3dCQUNwQixhQUFhLEVBQUUsZUFBZTt3QkFDOUIsYUFBYSxFQUFFLGVBQWU7d0JBQzlCLFVBQVUsRUFBRSxZQUFZO3FCQUN6QixDQUFDO29CQUVGLE1BQU0sSUFBSSxHQUFHLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQzt3QkFDeEMsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLFFBQVEsRUFBRSxLQUFLO3FCQUNoQixDQUFDLENBQUM7b0JBRUgsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsZ0NBQWdDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFFcEYsT0FBTzt3QkFDTCxPQUFPLEVBQUUsSUFBSTt3QkFDYixLQUFLLEVBQUUsSUFBSTt3QkFDWCxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQ2YsUUFBUSxFQUFFLElBQUk7d0JBQ2QsVUFBVSxFQUFFLFVBQVU7cUJBQ3ZCLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSwwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDbkUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3dCQUN2QyxNQUFNLEVBQUUsSUFBSTt3QkFDWixRQUFRLEVBQUUsSUFBSTt3QkFDZCxVQUFVLEVBQUUsSUFBSTtxQkFDakIsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELFVBQVUsRUFBRSxLQUFLLEVBQ2YsT0FBWSxFQUNaLElBQTRFLEVBQzVFLEVBQUU7Z0JBQ0YsTUFBTSxFQUFFLEVBQUUsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUVqRSxJQUFJLENBQUM7b0JBQ0gsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBRXpELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDVixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxFQUFFOzRCQUM5QixNQUFNLEVBQUUsRUFBRTt5QkFDWCxDQUFDO29CQUNKLENBQUM7b0JBRUQsTUFBTSxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7d0JBQ2pDLElBQUk7d0JBQ0osVUFBVTt3QkFDVixXQUFXO3FCQUNaLENBQUMsQ0FBQztvQkFFSCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7b0JBRTVFLE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLElBQUk7d0JBQ1gsTUFBTSxFQUFFLEVBQUU7cUJBQ1gsQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNuRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7d0JBQ3ZDLE1BQU0sRUFBRSxFQUFFO3FCQUNYLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFFRCxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQVksRUFBRSxJQUE2QyxFQUFFLEVBQUU7Z0JBQ2pGLE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztnQkFFeEMsSUFBSSxDQUFDO29CQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLGNBQWMsR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7b0JBRWpFLE1BQU0saUJBQWlCLENBQUMsV0FBVyxDQUFDO3dCQUNsQyxPQUFPLEVBQUUsR0FBRzt3QkFDWixVQUFVO3dCQUNWLFdBQVcsRUFBRSxJQUFJO3FCQUNsQixDQUFDLENBQUM7b0JBRUgsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsMEJBQTBCLEdBQUcsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDO29CQUU3RSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLEtBQUssRUFBRSxJQUFJO3dCQUNYLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztxQkFDdEIsQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNwRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7d0JBQ3ZDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztxQkFDdEIsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBWSxFQUFFLElBQWtELEVBQUUsRUFBRTtnQkFDbkYsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFFMUMsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDVixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxtQkFBbUIsTUFBTSxFQUFFOzRCQUNsQyxHQUFHLEVBQUUsSUFBSTt5QkFDVixDQUFDO29CQUNKLENBQUM7b0JBRUQsMkJBQTJCO29CQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDNUQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ3pCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksdURBQXVEOzRCQUNoRixHQUFHLEVBQUUsSUFBSTt5QkFDVixDQUFDO29CQUNKLENBQUM7b0JBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0JBQ25ELE1BQU0sR0FBRyxHQUFHLEdBQUcsUUFBUSxNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUM7b0JBRWxELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLDhCQUE4QixHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUVwRSxJQUFJLGNBQWMsRUFBRSxDQUFDO3dCQUNuQixNQUFNLGNBQWMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzFDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixpQ0FBaUM7d0JBQ2pDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ3RDLE1BQU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEMsQ0FBQztvQkFFRCxPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLEtBQUssRUFBRSxJQUFJO3dCQUNYLEdBQUc7cUJBQ0osQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNqRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7d0JBQ3ZDLEdBQUcsRUFBRSxJQUFJO3FCQUNWLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFFRCxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQVksRUFBRSxJQUFvRCxFQUFFLEVBQUU7Z0JBQ3RGLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFFdkMsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDVixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxtQkFBbUIsTUFBTSxFQUFFOzRCQUNsQyxTQUFTLEVBQUUsSUFBSTs0QkFDZixXQUFXLEVBQUUsSUFBSTs0QkFDakIsYUFBYSxFQUFFLElBQUk7eUJBQ3BCLENBQUM7b0JBQ0osQ0FBQztvQkFFRCx5REFBeUQ7b0JBQ3pELE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM1RCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDekIsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSw2Q0FBNkM7NEJBQ3RFLFNBQVMsRUFBRSxJQUFJOzRCQUNmLFdBQVcsRUFBRSxJQUFJOzRCQUNqQixhQUFhLEVBQUUsSUFBSTt5QkFDcEIsQ0FBQztvQkFDSixDQUFDO29CQUVELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLGtCQUFrQixJQUFJLENBQUMsSUFBSSxPQUFPLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBRTVFLE1BQU0sT0FBTyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsU0FBUyxDQUFDO3dCQUMvQyxJQUFJO3dCQUNKLFdBQVcsRUFBRSxPQUFPO3FCQUNyQixDQUFDLENBQUM7b0JBRUgsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsK0JBQStCLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUM1RSxDQUFDO29CQUVGLE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLElBQUk7d0JBQ1gsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFO3dCQUNyQixXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUk7d0JBQ3pCLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTTtxQkFDOUIsQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNsRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7d0JBQ3ZDLFNBQVMsRUFBRSxJQUFJO3dCQUNmLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixhQUFhLEVBQUUsSUFBSTtxQkFDcEIsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELFVBQVUsRUFBRSxLQUFLLEVBQ2YsT0FBWSxFQUNaLElBQXdELEVBQ3hELEVBQUU7Z0JBQ0YsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUMxQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFN0IsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDVixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxtQkFBbUIsTUFBTSxFQUFFOzRCQUNsQyxVQUFVLEVBQUUsSUFBSTt5QkFDakIsQ0FBQztvQkFDSixDQUFDO29CQUVELHdEQUF3RDtvQkFDeEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzVELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUN6QixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxTQUFTLElBQUksQ0FBQyxJQUFJLDhDQUE4Qzs0QkFDdkUsVUFBVSxFQUFFLElBQUk7eUJBQ2pCLENBQUM7b0JBQ0osQ0FBQztvQkFFRCw4QkFBOEI7b0JBQzlCLE1BQU0sU0FBUyxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztvQkFDckUsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzlFLE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLE1BQU0sQ0FBQztvQkFDakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBRWhELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLG9CQUFvQixJQUFJLENBQUMsSUFBSSxPQUFPLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBRS9FLHFEQUFxRDtvQkFDckQsTUFBTSxtQkFBbUIsR0FBRywrQkFBK0IsQ0FBQztvQkFFNUQsTUFBTSxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7d0JBQ2pDLElBQUk7d0JBQ0osVUFBVSxFQUFFLFFBQVE7d0JBQ3BCLE1BQU0sRUFBRSxtQkFBbUI7cUJBQzVCLENBQUMsQ0FBQztvQkFFSCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxvQ0FBb0MsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFFL0UsT0FBTzt3QkFDTCxPQUFPLEVBQUUsSUFBSTt3QkFDYixLQUFLLEVBQUUsSUFBSTt3QkFDWCxVQUFVLEVBQUUsUUFBUTtxQkFDckIsQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNuRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7d0JBQ3ZDLFVBQVUsRUFBRSxJQUFJO3FCQUNqQixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsYUFBYSxFQUFFLEtBQUssRUFBRSxPQUFZLEVBQUUsSUFBaUQsRUFBRSxFQUFFO2dCQUN2RixNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBRXBDLElBQUksQ0FBQztvQkFDSCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ1YsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsbUJBQW1CLE1BQU0sRUFBRTs0QkFDbEMsYUFBYSxFQUFFLElBQUk7eUJBQ3BCLENBQUM7b0JBQ0osQ0FBQztvQkFFRCx3REFBd0Q7b0JBQ3hELE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM1RCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDekIsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSx5REFBeUQ7NEJBQ2xGLGFBQWEsRUFBRSxJQUFJO3lCQUNwQixDQUFDO29CQUNKLENBQUM7b0JBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsaUJBQWlCLElBQUksQ0FBQyxJQUFJLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUVuRixxREFBcUQ7b0JBQ3JELE1BQU0sYUFBYSxHQUFHLCtCQUErQixDQUFDO29CQUV0RCxNQUFNLGlCQUFpQixDQUFDLGFBQWEsQ0FBQzt3QkFDcEMsSUFBSTt3QkFDSixNQUFNO3dCQUNOLE1BQU0sRUFBRSxhQUFhO3FCQUN0QixDQUFDLENBQUM7b0JBRUgsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsbUNBQW1DLElBQUksRUFBRSxDQUFDLENBQUM7b0JBRTFFLE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLElBQUk7d0JBQ1gsYUFBYSxFQUFFLElBQUk7cUJBQ3BCLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDdEUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3dCQUN2QyxhQUFhLEVBQUUsSUFBSTtxQkFDcEIsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELHVDQUF1QztZQUN2QyxjQUFjLEVBQUUsS0FBSyxFQUNuQixPQUFZLEVBQ1osSUFBd0QsRUFDeEQsRUFBRTtnQkFDRixNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQzFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVuQyxJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNWLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLG1CQUFtQixNQUFNLEVBQUU7NEJBQ2xDLFVBQVUsRUFBRSxJQUFJO3lCQUNqQixDQUFDO29CQUNKLENBQUM7b0JBRUQseURBQXlEO29CQUN6RCxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDNUQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ3pCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksdURBQXVEOzRCQUNoRixVQUFVLEVBQUUsSUFBSTt5QkFDakIsQ0FBQztvQkFDSixDQUFDO29CQUVELDZDQUE2QztvQkFDN0MsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FDakMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUNaLFdBQVcsRUFDWCxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUMvQyxDQUFDO29CQUNGLE1BQU0sU0FBUyxHQUFHLFVBQVUsSUFBSSxXQUFXLENBQUM7b0JBRTVDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLDRCQUE0QixJQUFJLENBQUMsSUFBSSxPQUFPLFNBQVMsRUFBRSxDQUFDLENBQUM7b0JBRXhGLG1FQUFtRTtvQkFDbkUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUNsQixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxnQ0FBZ0M7NEJBQ3ZDLFVBQVUsRUFBRSxJQUFJO3lCQUNqQixDQUFDO29CQUNKLENBQUM7b0JBRUQsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFFekMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsd0NBQXdDLFNBQVMsRUFBRSxDQUFDLENBQUM7b0JBRXBGLE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLElBQUk7d0JBQ1gsVUFBVSxFQUFFLFNBQVM7cUJBQ3RCLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDdkUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3dCQUN2QyxVQUFVLEVBQUUsSUFBSTtxQkFDakIsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELGNBQWMsRUFBRSxLQUFLLEVBQ25CLE9BQVksRUFDWixJQUFvRCxFQUNwRCxFQUFFO2dCQUNGLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDdkMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV6QixJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNWLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLG1CQUFtQixNQUFNLEVBQUU7eUJBQ25DLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUM1QixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSx1QkFBdUIsT0FBTyxFQUFFO3lCQUN4QyxDQUFDO29CQUNKLENBQUM7b0JBRUQseURBQXlEO29CQUN6RCxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDNUQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ3pCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksdURBQXVEO3lCQUNqRixDQUFDO29CQUNKLENBQUM7b0JBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsNEJBQTRCLElBQUksQ0FBQyxJQUFJLFNBQVMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFFeEYscUVBQXFFO29CQUNyRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzt3QkFDMUIsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsdUNBQXVDO3lCQUMvQyxDQUFDO29CQUNKLENBQUM7b0JBRUQsTUFBTSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBRTFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLDBDQUEwQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUVwRixPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDdkUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3FCQUN4QyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsV0FBVyxFQUFFLEtBQUssRUFBRSxPQUFZLEVBQUUsSUFBbUMsRUFBRSxFQUFFO2dCQUN2RSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFFOUIsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDVixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxtQkFBbUIsTUFBTSxFQUFFO3lCQUNuQyxDQUFDO29CQUNKLENBQUM7b0JBRUQseURBQXlEO29CQUN6RCxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDNUQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ3pCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksb0RBQW9EO3lCQUM5RSxDQUFDO29CQUNKLENBQUM7b0JBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUseUJBQXlCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUVyRSxJQUFJLE9BQU8sRUFBRSxDQUFDO3dCQUNaLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0IsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLCtCQUErQjt5QkFDdkMsQ0FBQztvQkFDSixDQUFDO29CQUVELE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLElBQUk7cUJBQ1osQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNwRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7cUJBQ3hDLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFFRCxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQVksRUFBRSxJQUFtQyxFQUFFLEVBQUU7Z0JBQ3BFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUU5QixJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNWLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLG1CQUFtQixNQUFNLEVBQUU7eUJBQ25DLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxzQkFBc0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7b0JBRWxFLElBQUksUUFBUSxFQUFFLENBQUM7d0JBQ2IsTUFBTSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNqQyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsd0NBQXdDO3lCQUNoRCxDQUFDO29CQUNKLENBQUM7b0JBRUQsT0FBTzt3QkFDTCxPQUFPLEVBQUUsSUFBSTt3QkFDYixLQUFLLEVBQUUsSUFBSTtxQkFDWixDQUFDO2dCQUNKLENBQUM7Z0JBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztvQkFDcEIsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ2pFLE9BQU87d0JBQ0wsT0FBTyxFQUFFLEtBQUs7d0JBQ2QsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZTtxQkFDeEMsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELGFBQWEsRUFBRSxLQUFLLEVBQUUsT0FBWSxFQUFFLElBQW9ELEVBQUUsRUFBRTtnQkFDMUYsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUV2QyxJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNWLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLG1CQUFtQixNQUFNLEVBQUU7NEJBQ2xDLE9BQU8sRUFBRSxJQUFJO3lCQUNkLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxjQUFjLElBQUksQ0FBQyxJQUFJLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFFeEUsZ0NBQWdDO29CQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztvQkFDcEIsTUFBTSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUVyRCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxtQ0FBbUMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFFN0UsT0FBTzt3QkFDTCxPQUFPLEVBQUUsSUFBSTt3QkFDYixLQUFLLEVBQUUsSUFBSTt3QkFDWCxPQUFPO3FCQUNSLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSwwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDbkUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3dCQUN2QyxPQUFPLEVBQUUsSUFBSTtxQkFDZCxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsZ0JBQWdCLEVBQUUsS0FBSyxFQUNyQixPQUFZLEVBQ1osSUFBdUQsRUFDdkQsRUFBRTtnQkFDRixNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBRTFDLElBQUksQ0FBQztvQkFDSCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ1YsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsbUJBQW1CLE1BQU0sRUFBRTs0QkFDbEMsVUFBVSxFQUFFLElBQUk7eUJBQ2pCLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxXQUFXLENBQUMsSUFBSSxDQUNkLElBQUksVUFBVSw4QkFBOEIsSUFBSSxDQUFDLElBQUksT0FBTyxVQUFVLEVBQUUsQ0FDekUsQ0FBQztvQkFFRixJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUNwQixNQUFNLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDN0QsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLHdDQUF3Qzs0QkFDL0MsVUFBVSxFQUFFLElBQUk7eUJBQ2pCLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSwwQ0FBMEMsVUFBVSxFQUFFLENBQUMsQ0FBQztvQkFFdkYsT0FBTzt3QkFDTCxPQUFPLEVBQUUsSUFBSTt3QkFDYixLQUFLLEVBQUUsSUFBSTt3QkFDWCxVQUFVO3FCQUNYLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDMUUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3dCQUN2QyxVQUFVLEVBQUUsSUFBSTtxQkFDakIsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBWSxFQUFFLElBQXVELEVBQUUsRUFBRTtnQkFDMUYsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN6QyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRXpCLElBQUksQ0FBQztvQkFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUM1QixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSx1QkFBdUIsT0FBTyxFQUFFOzRCQUN2QyxNQUFNLEVBQUUsSUFBSTs0QkFDWixRQUFRLEVBQUUsSUFBSTt5QkFDZixDQUFDO29CQUNKLENBQUM7b0JBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUseUJBQXlCLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBRW5FLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO3dCQUN2QixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxtQ0FBbUM7NEJBQzFDLE1BQU0sRUFBRSxJQUFJOzRCQUNaLFFBQVEsRUFBRSxJQUFJO3lCQUNmLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGlCQUFpQixDQUFDLEdBQUcsQ0FBQzt3QkFDekMsT0FBTzt3QkFDUCxRQUFRLEVBQUUsUUFBUSxJQUFJLFNBQVM7cUJBQ2hDLENBQUMsQ0FBQztvQkFFSCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxpQ0FBaUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7b0JBRS9FLE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLElBQUk7d0JBQ1gsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO3dCQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUk7cUJBQ3RCLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSwwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDbkUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3dCQUN2QyxNQUFNLEVBQUUsSUFBSTt3QkFDWixRQUFRLEVBQUUsSUFBSTtxQkFDZixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsMENBQTBDO1lBQzFDLFlBQVksRUFBRSxLQUFLLEVBQUUsT0FBWSxFQUFFLElBQXFELEVBQUUsRUFBRTtnQkFDMUYsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUV2QyxJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNWLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLG1CQUFtQixNQUFNLEVBQUU7NEJBQ2xDLE9BQU8sRUFBRSxJQUFJO3lCQUNkLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxXQUFXLENBQUMsSUFBSSxDQUNkLElBQUksVUFBVSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLGVBQWUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUNoRixDQUFDO29CQUVGLDJDQUEyQztvQkFDM0MsTUFBTSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUU5RCx1REFBdUQ7b0JBQ3ZELE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM1RCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDekIsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsMENBQTBDLENBQUMsQ0FBQzt3QkFDM0UsTUFBTSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLENBQUM7b0JBRUQsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsa0JBQWtCLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLFNBQVMsQ0FDMUUsQ0FBQztvQkFFRixPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLEtBQUssRUFBRSxJQUFJO3dCQUNYLE9BQU87cUJBQ1IsQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNyRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7d0JBQ3ZDLE9BQU8sRUFBRSxJQUFJO3FCQUNkLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFFRCxXQUFXLEVBQUUsS0FBSyxFQUNoQixPQUFZLEVBQ1osSUFBcUUsRUFDckUsRUFBRTtnQkFDRixNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQzVELE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDL0IsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVuQyx3Q0FBd0M7Z0JBQ3hDLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxRQUFnQixFQUFvQixFQUFFO29CQUM5RCxJQUFJLENBQUM7d0JBQ0gsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNsQyxPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDO29CQUFDLE1BQU0sQ0FBQzt3QkFDUCxPQUFPLEtBQUssQ0FBQztvQkFDZixDQUFDO2dCQUNILENBQUMsQ0FBQztnQkFFRix3Q0FBd0M7Z0JBQ3hDLE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxRQUFnQixFQUFFLFFBQWdCLEVBQW1CLEVBQUU7b0JBQ2xGLElBQUksQ0FBQzt3QkFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUM3RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNyQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO29CQUMzRCxDQUFDO29CQUFDLE1BQU0sQ0FBQzt3QkFDUCxPQUFPLEVBQUUsQ0FBQztvQkFDWixDQUFDO2dCQUNILENBQUMsQ0FBQztnQkFFRixJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNWLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLG1CQUFtQixNQUFNLEVBQUU7NEJBQ2xDLElBQUksRUFBRSxFQUFFO3lCQUNULENBQUM7b0JBQ0osQ0FBQztvQkFFRCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxhQUFhLE9BQU8sYUFBYSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFFN0UsTUFBTSxJQUFJLEdBQTJELEVBQUUsQ0FBQztvQkFDeEUsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUVuRCxNQUFNLFFBQVEsR0FBNkI7d0JBQ3pDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUM7d0JBQ3ZCLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQzt3QkFDaEIsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDO3dCQUNoQixHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7cUJBQzFDLENBQUM7b0JBRUYsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBRXJELEtBQUssTUFBTSxPQUFPLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2pDLGtDQUFrQzt3QkFDbEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzs0QkFDekQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FDN0IsT0FBTyxFQUNQLEdBQUcsT0FBTyxHQUFHLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUNyRCxDQUFDOzRCQUNGLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7NEJBRW5FLElBQUksU0FBUyxHQUFrQixJQUFJLENBQUM7NEJBQ3BDLElBQUksTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQ0FDOUIsU0FBUyxHQUFHLE9BQU8sQ0FBQzs0QkFDdEIsQ0FBQztpQ0FBTSxJQUFJLE1BQU0sVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0NBQ3hDLFNBQVMsR0FBRyxVQUFVLENBQUM7NEJBQ3pCLENBQUM7NEJBRUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQ0FDZCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0NBQ3RELElBQUksT0FBTyxFQUFFLENBQUM7b0NBQ1osSUFBSSxDQUFDLElBQUksQ0FBQzt3Q0FDUixJQUFJLEVBQUUsT0FBTzt3Q0FDYixPQUFPO3dDQUNQLElBQUksRUFBRSxTQUFTO3FDQUNoQixDQUFDLENBQUM7Z0NBQ0wsQ0FBQzs0QkFDSCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3RCLDRCQUE0Qjt3QkFDNUIsSUFBSSxNQUFNLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzRCQUM5QixNQUFNLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7NEJBQzNFLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7Z0NBQzVCLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7b0NBQ3hCLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQ0FDcEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29DQUNwRCxLQUFLLE1BQU0sT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO3dDQUNqQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzs0Q0FDN0IsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7NENBQ2pELE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzs0Q0FDcEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnREFDWixJQUFJLENBQUMsSUFBSSxDQUFDO29EQUNSLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtvREFDaEIsT0FBTztvREFDUCxJQUFJLEVBQUUsT0FBTztpREFDZCxDQUFDLENBQUM7NENBQ0wsQ0FBQzt3Q0FDSCxDQUFDO29DQUNILENBQUM7Z0NBQ0gsQ0FBQztxQ0FBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0NBQ3ZDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQ0FDckQsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO29DQUNwRCxJQUFJLE9BQU8sRUFBRSxDQUFDO3dDQUNaLElBQUksQ0FBQyxJQUFJLENBQUM7NENBQ1IsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7NENBQ3BDLE9BQU87NENBQ1AsSUFBSSxFQUFFLE9BQU87eUNBQ2QsQ0FBQyxDQUFDO29DQUNMLENBQUM7Z0NBQ0gsQ0FBQzs0QkFDSCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLEtBQUssRUFBRSxJQUFJO3dCQUNYLElBQUk7cUJBQ0wsQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNoRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7d0JBQ3ZDLElBQUksRUFBRSxFQUFFO3FCQUNULENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFFRCxtQ0FBbUM7WUFDbkMsWUFBWSxFQUFFLEtBQUssRUFDakIsT0FBWSxFQUNaLElBQXlELEVBQ3pELEVBQUU7Z0JBQ0YsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUV4QyxJQUFJLENBQUM7b0JBQ0gsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsOEJBQThCLE1BQU0sT0FBTyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUV0RixXQUFXO29CQUNYLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDVixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLFVBQVUsRUFBRSxJQUFJOzRCQUNoQixTQUFTLEVBQUUsSUFBSTs0QkFDZixPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQUUsbUJBQW1CLE1BQU0sRUFBRTt5QkFDbkMsQ0FBQztvQkFDSixDQUFDO29CQUVELHlDQUF5QztvQkFDekMsTUFBTSxTQUFTLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO29CQUM3QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQzNCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsVUFBVSxFQUFFLElBQUk7NEJBQ2hCLFNBQVMsRUFBRSxJQUFJOzRCQUNmLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFDSCxzRkFBc0Y7eUJBQ3pGLENBQUM7b0JBQ0osQ0FBQztvQkFFRCwyRUFBMkU7b0JBQzNFLE1BQU0sV0FBVyxHQUEyQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO29CQUMxRixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDO29CQUNyRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDO29CQUV4RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3JCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsVUFBVSxFQUFFLElBQUk7NEJBQ2hCLFNBQVMsRUFBRSxJQUFJOzRCQUNmLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFBRSxhQUFhLFFBQVEsZ0NBQWdDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7eUJBQzNHLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxpREFBaUQ7b0JBQ2pELHlGQUF5RjtvQkFDekYsTUFBTSxpQkFBaUIsR0FBMkIsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztvQkFDMUYsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQztvQkFDckYsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsK0JBQStCLGdCQUFnQixVQUFVLGVBQWUsQ0FBQyxFQUFFLEdBQUcsQ0FDN0YsQ0FBQztvQkFFRixpRUFBaUU7b0JBQ2pFLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSx3QkFBd0IsQ0FBQztvQkFDckQsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFlLENBQ2xDLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixXQUFXLENBQ1osQ0FBQztvQkFDRixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSx3QkFBd0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBRWpGLGdDQUFnQztvQkFDaEMsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2pCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsVUFBVSxFQUFFLElBQUk7NEJBQ2hCLFNBQVMsRUFBRSxJQUFJOzRCQUNmLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSx3QkFBd0I7eUJBQ3hELENBQUM7b0JBQ0osQ0FBQztvQkFFRCx5RUFBeUU7b0JBQ3pFLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0JBRW5DLCtFQUErRTtvQkFDL0UsSUFBSSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7d0JBQ3hCLE1BQU0sUUFBUSxHQUNaLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxlQUFlLENBQUM7d0JBQ3hGLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsVUFBVSxFQUFFLElBQUk7NEJBQ2hCLFNBQVMsRUFBRSxJQUFJOzRCQUNmLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFBRSxRQUFRO3lCQUNoQixDQUFDO29CQUNKLENBQUM7b0JBRUQscUVBQXFFO29CQUNyRSxJQUFJLFVBQVUsR0FBRyxZQUFZLEVBQUUsVUFBVSxJQUFJLFlBQVksRUFBRSxFQUFFLENBQUM7b0JBQzlELElBQUksQ0FBQyxVQUFVLElBQUksWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO3dCQUN4QyxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ3hFLENBQUM7b0JBRUQsb0ZBQW9GO29CQUNwRixzRUFBc0U7b0JBQ3RFLE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsVUFBVSxFQUFFLFVBQVUsSUFBSSxJQUFJO3dCQUM5QixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7d0JBQ25DLE9BQU8sRUFBRSxrQ0FBa0MsZUFBZSxDQUFDLElBQUksRUFBRTt3QkFDakUsS0FBSyxFQUFFLElBQUk7cUJBQ1osQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNyRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixTQUFTLEVBQUUsSUFBSTt3QkFDZixPQUFPLEVBQUUsSUFBSTt3QkFDYixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3FCQUN4QyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsYUFBYSxFQUFFLEtBQUssRUFDbEIsT0FBWSxFQUNaLElBQWlGLEVBQ2pGLEVBQUU7Z0JBQ0YsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBRS9ELElBQUksQ0FBQztvQkFDSCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxzQkFBc0IsVUFBVSxhQUFhLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBRXRGLHFCQUFxQjtvQkFDckIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNiLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsT0FBTyxFQUFFLElBQUk7NEJBQ2IsS0FBSyxFQUNILHFIQUFxSDt5QkFDeEgsQ0FBQztvQkFDSixDQUFDO29CQUVELFdBQVc7b0JBQ1gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNWLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsT0FBTyxFQUFFLElBQUk7NEJBQ2IsS0FBSyxFQUFFLG1CQUFtQixNQUFNLEVBQUU7eUJBQ25DLENBQUM7b0JBQ0osQ0FBQztvQkFFRCx5Q0FBeUM7b0JBQ3pDLE1BQU0sU0FBUyxHQUFHLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztvQkFDN0MsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUMzQixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFDSCxzRkFBc0Y7eUJBQ3pGLENBQUM7b0JBQ0osQ0FBQztvQkFFRCwyRUFBMkU7b0JBQzNFLE1BQU0sV0FBVyxHQUEyQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO29CQUMxRixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDO29CQUNyRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDO29CQUV4RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3JCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsT0FBTyxFQUFFLElBQUk7NEJBQ2IsS0FBSyxFQUFFLGFBQWEsUUFBUSxnQ0FBZ0MsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTt5QkFDM0csQ0FBQztvQkFDSixDQUFDO29CQUVELGlEQUFpRDtvQkFDakQsTUFBTSxpQkFBaUIsR0FBMkIsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztvQkFDMUYsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQztvQkFFckYsbUVBQW1FO29CQUNuRSxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FDbEMsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUNsQixNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLFVBQVUsQ0FDWCxDQUFDO29CQUNGLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLHFCQUFxQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFFOUUsdUZBQXVGO29CQUN2RixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO29CQUN0RCxJQUFJLFFBQVEsRUFBRSxDQUFDO3dCQUNiLE1BQU0sWUFBWSxHQUNoQixPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQzt3QkFDakYsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQUUsWUFBWTt5QkFDcEIsQ0FBQztvQkFDSixDQUFDO29CQUVELE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsT0FBTyxFQUFFLDZCQUE2QixVQUFVLEVBQUU7d0JBQ2xELEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDdEUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxPQUFPLEVBQUUsSUFBSTt3QkFDYixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3FCQUN4QyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsWUFBWSxFQUFFLEtBQUssRUFDakIsT0FBWSxFQUNaLElBQWlGLEVBQ2pGLEVBQUU7Z0JBQ0YsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBRS9ELElBQUksQ0FBQztvQkFDSCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxxQkFBcUIsVUFBVSxhQUFhLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBRXJGLHFCQUFxQjtvQkFDckIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNiLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsaUJBQWlCLEVBQUUsSUFBSTs0QkFDdkIsT0FBTyxFQUFFLElBQUk7NEJBQ2IsS0FBSyxFQUFFLDhEQUE4RDt5QkFDdEUsQ0FBQztvQkFDSixDQUFDO29CQUVELFdBQVc7b0JBQ1gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNWLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsaUJBQWlCLEVBQUUsSUFBSTs0QkFDdkIsT0FBTyxFQUFFLElBQUk7NEJBQ2IsS0FBSyxFQUFFLG1CQUFtQixNQUFNLEVBQUU7eUJBQ25DLENBQUM7b0JBQ0osQ0FBQztvQkFFRCx5Q0FBeUM7b0JBQ3pDLE1BQU0sU0FBUyxHQUFHLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztvQkFDN0MsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUMzQixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLGlCQUFpQixFQUFFLElBQUk7NEJBQ3ZCLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFDSCxzRkFBc0Y7eUJBQ3pGLENBQUM7b0JBQ0osQ0FBQztvQkFFRCwyRUFBMkU7b0JBQzNFLE1BQU0sV0FBVyxHQUEyQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO29CQUMxRixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDO29CQUNyRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDO29CQUV4RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3JCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsaUJBQWlCLEVBQUUsSUFBSTs0QkFDdkIsT0FBTyxFQUFFLElBQUk7NEJBQ2IsS0FBSyxFQUFFLGFBQWEsUUFBUSxnQ0FBZ0MsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTt5QkFDM0csQ0FBQztvQkFDSixDQUFDO29CQUVELGlEQUFpRDtvQkFDakQsTUFBTSxpQkFBaUIsR0FBMkIsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztvQkFDMUYsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQztvQkFFckYsbUVBQW1FO29CQUNuRSxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FDbEMsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLFVBQVUsQ0FDWCxDQUFDO29CQUVGLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNqQiwrRUFBK0U7d0JBQy9FLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7NEJBQ2hELE9BQU87Z0NBQ0wsT0FBTyxFQUFFLEtBQUs7Z0NBQ2QsaUJBQWlCLEVBQUUsSUFBSTtnQ0FDdkIsT0FBTyxFQUFFLElBQUk7Z0NBQ2IsS0FBSyxFQUNILCtGQUErRjs2QkFDbEcsQ0FBQzt3QkFDSixDQUFDO3dCQUNELE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsaUJBQWlCLEVBQUUsSUFBSTs0QkFDdkIsT0FBTyxFQUFFLElBQUk7NEJBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7eUJBQy9DLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLGlCQUFpQixFQUFFLFVBQVU7d0JBQzdCLE9BQU8sRUFBRSxnQkFBZ0I7d0JBQ3pCLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDckUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxpQkFBaUIsRUFBRSxJQUFJO3dCQUN2QixPQUFPLEVBQUUsSUFBSTt3QkFDYixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3FCQUN4QyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsY0FBYyxFQUFFLEtBQUssRUFDbkIsT0FBWSxFQUNaLElBQThELEVBQzlELEVBQUU7Z0JBQ0YsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUU5QyxJQUFJLENBQUM7b0JBQ0gsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsd0JBQXdCLFVBQVUsYUFBYSxNQUFNLEVBQUUsQ0FBQyxDQUFDO29CQUV4RixXQUFXO29CQUNYLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDVixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLFFBQVEsRUFBRSxJQUFJOzRCQUNkLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFBRSxtQkFBbUIsTUFBTSxFQUFFO3lCQUNuQyxDQUFDO29CQUNKLENBQUM7b0JBRUQseUNBQXlDO29CQUN6QyxNQUFNLFNBQVMsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7b0JBQzdDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDM0IsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxRQUFRLEVBQUUsSUFBSTs0QkFDZCxPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQ0gsc0ZBQXNGO3lCQUN6RixDQUFDO29CQUNKLENBQUM7b0JBRUQsMkVBQTJFO29CQUMzRSxNQUFNLFdBQVcsR0FBMkIsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztvQkFDMUYsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQztvQkFDckQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQztvQkFFeEUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUNyQixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLFFBQVEsRUFBRSxJQUFJOzRCQUNkLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFBRSxhQUFhLFFBQVEsZ0NBQWdDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7eUJBQzNHLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxpREFBaUQ7b0JBQ2pELE1BQU0saUJBQWlCLEdBQTJCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7b0JBQzFGLE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUM7b0JBRXJGLGtFQUFrRTtvQkFDbEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFlLENBQ2xDLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixVQUFVLENBQ1gsQ0FBQztvQkFFRixJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDakIsK0VBQStFO3dCQUMvRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDOzRCQUNoRCxPQUFPO2dDQUNMLE9BQU8sRUFBRSxLQUFLO2dDQUNkLFFBQVEsRUFBRSxJQUFJO2dDQUNkLE9BQU8sRUFBRSxJQUFJO2dDQUNiLEtBQUssRUFDSCxtR0FBbUc7NkJBQ3RHLENBQUM7d0JBQ0osQ0FBQzt3QkFDRCxPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLFFBQVEsRUFBRSxJQUFJOzRCQUNkLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxpQkFBaUI7eUJBQ2pELENBQUM7b0JBQ0osQ0FBQztvQkFFRCxPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxJQUFJO3dCQUN6QyxPQUFPLEVBQUUsdUNBQXVDO3dCQUNoRCxLQUFLLEVBQUUsSUFBSTtxQkFDWixDQUFDO2dCQUNKLENBQUM7Z0JBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztvQkFDcEIsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3ZFLE9BQU87d0JBQ0wsT0FBTyxFQUFFLEtBQUs7d0JBQ2QsUUFBUSxFQUFFLElBQUk7d0JBQ2QsT0FBTyxFQUFFLElBQUk7d0JBQ2IsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZTtxQkFDeEMsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELGNBQWMsRUFBRSxLQUFLLEVBQ25CLE9BQVksRUFDWixJQUE0RSxFQUM1RSxFQUFFO2dCQUNGLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBRXBELElBQUksQ0FBQztvQkFDSCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSw2QkFBNkIsVUFBVSxFQUFFLENBQUMsQ0FBQztvQkFFMUUsV0FBVztvQkFDWCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ1YsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxVQUFVLEVBQUUsSUFBSTs0QkFDaEIsSUFBSSxFQUFFLElBQUk7NEJBQ1YsS0FBSyxFQUFFLG1CQUFtQixNQUFNLEVBQUU7eUJBQ25DLENBQUM7b0JBQ0osQ0FBQztvQkFFRCx5Q0FBeUM7b0JBQ3pDLE1BQU0sU0FBUyxHQUFHLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztvQkFDN0MsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUMzQixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLFVBQVUsRUFBRSxJQUFJOzRCQUNoQixJQUFJLEVBQUUsSUFBSTs0QkFDVixLQUFLLEVBQ0gsc0ZBQXNGO3lCQUN6RixDQUFDO29CQUNKLENBQUM7b0JBRUQsMkVBQTJFO29CQUMzRSxNQUFNLFdBQVcsR0FBMkIsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztvQkFDMUYsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQztvQkFDckQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQztvQkFFeEUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUNyQixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLFVBQVUsRUFBRSxJQUFJOzRCQUNoQixJQUFJLEVBQUUsSUFBSTs0QkFDVixLQUFLLEVBQUUsYUFBYSxRQUFRLGdDQUFnQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO3lCQUMzRyxDQUFDO29CQUNKLENBQUM7b0JBRUQsaURBQWlEO29CQUNqRCxNQUFNLGlCQUFpQixHQUEyQixFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO29CQUMxRixNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDO29CQUVyRiw2REFBNkQ7b0JBQzdELE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUNsQyxtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLElBQUksQ0FDTCxDQUFDO29CQUVGLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNqQiwrRUFBK0U7d0JBQy9FLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7NEJBQ2hELE9BQU87Z0NBQ0wsT0FBTyxFQUFFLEtBQUs7Z0NBQ2QsVUFBVSxFQUFFLElBQUk7Z0NBQ2hCLElBQUksRUFBRSxJQUFJO2dDQUNWLEtBQUssRUFDSCxxR0FBcUc7NkJBQ3hHLENBQUM7d0JBQ0osQ0FBQzt3QkFDRCxPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLFVBQVUsRUFBRSxJQUFJOzRCQUNoQixJQUFJLEVBQUUsSUFBSTs0QkFDVixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksa0JBQWtCO3lCQUNsRCxDQUFDO29CQUNKLENBQUM7b0JBRUQsT0FBTzt3QkFDTCxPQUFPLEVBQUUsSUFBSTt3QkFDYixVQUFVO3dCQUNWLElBQUk7d0JBQ0osS0FBSyxFQUFFLElBQUk7cUJBQ1osQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLCtCQUErQixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUN4RSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixJQUFJLEVBQUUsSUFBSTt3QkFDVixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO3FCQUN4QyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsOEJBQThCO1lBQzlCLGVBQWUsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDMUIsSUFBSSxDQUFDO29CQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLHVDQUF1QyxDQUFDLENBQUM7b0JBRXhFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDckIsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsSUFBSTs0QkFDWCxPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQUUsdUNBQXVDO3lCQUMvQyxDQUFDO29CQUNKLENBQUM7b0JBRUQsK0RBQStEO29CQUMvRCxnREFBZ0Q7b0JBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUVwRCxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2pDLGtDQUFrQzt3QkFDbEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO3dCQUNqQixJQUFJLFdBQVcsRUFBRSxDQUFDOzRCQUNoQixJQUFJLENBQUM7Z0NBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7Z0NBQ3ZELEtBQUssR0FBRyxXQUFXLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQzs0QkFDckMsQ0FBQzs0QkFBQyxNQUFNLENBQUM7Z0NBQ1AsMEJBQTBCOzRCQUM1QixDQUFDO3dCQUNILENBQUM7d0JBRUQsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsd0NBQXdDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3BGLENBQUM7d0JBQ0YsT0FBTzs0QkFDTCxPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLOzRCQUNMLE9BQU8sRUFBRSwyQ0FBMkM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNaLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLEtBQUssRUFBRSxJQUFJO3dCQUNYLE9BQU8sRUFBRSxzRUFBc0U7d0JBQy9FLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDdkUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsSUFBSTt3QkFDWCxPQUFPLEVBQUUsSUFBSTt3QkFDYixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSx1QkFBdUI7cUJBQ2hELENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFFRCxTQUFTLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQztvQkFDSCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSw4QkFBOEIsQ0FBQyxDQUFDO29CQUUvRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3JCLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsT0FBTyxFQUFFLElBQUk7NEJBQ2IsS0FBSyxFQUFFLHVDQUF1Qzt5QkFDL0MsQ0FBQztvQkFDSixDQUFDO29CQUVELHFDQUFxQztvQkFDckMsTUFBTSxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBRXBDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLG9DQUFvQyxDQUFDLENBQUM7b0JBQ3JFLE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsT0FBTyxFQUFFLDJCQUEyQjt3QkFDcEMsS0FBSyxFQUFFLElBQUk7cUJBQ1osQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMvRCxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLE9BQU8sRUFBRSxJQUFJO3dCQUNiLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7cUJBQ3hDLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFFRCwrQkFBK0I7WUFDL0IsU0FBUyxFQUFFLEtBQUssRUFDZCxPQUFZLEVBQ1osSUFLQyxFQUNELEVBQUU7Z0JBQ0YsTUFBTSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsVUFBVSxHQUFHLEtBQUssRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUVuRixJQUFJLENBQUM7b0JBQ0gsV0FBVyxDQUFDLElBQUksQ0FDZCxJQUFJLFVBQVUsdUJBQXVCLFdBQVcsWUFBWSxlQUFlLGdCQUFnQixVQUFVLEVBQUUsQ0FDeEcsQ0FBQztvQkFFRiwyQ0FBMkM7b0JBQzNDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDYixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFDSCwyRkFBMkY7eUJBQzlGLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxxQkFBcUI7b0JBQ3JCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzNDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDVixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFBRSxtQkFBbUIsV0FBVyxFQUFFO3lCQUN4QyxDQUFDO29CQUNKLENBQUM7b0JBRUQsOEJBQThCO29CQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQztvQkFDakYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUNuQixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFDSCwrRUFBK0U7eUJBQ2xGLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxrQ0FBa0M7b0JBQ2xDLElBQUksQ0FBQyxjQUFjLElBQUksT0FBTyxjQUFjLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUNqRSxPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFBRSxnQ0FBZ0M7eUJBQ3hDLENBQUM7b0JBQ0osQ0FBQztvQkFFRCwyREFBMkQ7b0JBQzNELElBQUksV0FBVyxHQUFHLGVBQWUsQ0FBQztvQkFDbEMsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO29CQUN2QixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7b0JBRW5CLElBQUksV0FBVyxJQUFJLE9BQU8sV0FBVyxDQUFDLGNBQWMsS0FBSyxVQUFVLEVBQUUsQ0FBQzt3QkFDcEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3BELE1BQU0sZUFBZSxHQUFHLFFBQVEsRUFBRSxJQUFJLENBQ3BDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDVCxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxhQUFhLENBQUMsWUFBWTs0QkFDekMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQ2xGLENBQUM7d0JBQ0YsSUFBSSxlQUFlLEVBQUUsQ0FBQzs0QkFDcEIsV0FBVyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7NEJBQ25DLGFBQWE7Z0NBQ1gsZUFBZSxDQUFDLGNBQWM7b0NBQzlCLGVBQWUsQ0FBQyxLQUFLO29DQUNyQixHQUFHLGVBQWUsQ0FBQyxJQUFJLGVBQWUsQ0FBQzs0QkFDekMsU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUM7d0JBQ2pDLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBQ25CLE9BQU87NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsT0FBTyxFQUFFLElBQUk7NEJBQ2IsS0FBSyxFQUNILHFGQUFxRjt5QkFDeEYsQ0FBQztvQkFDSixDQUFDO29CQUVELHlEQUF5RDtvQkFDekQsY0FBYzt5QkFDWCxJQUFJLENBQUM7d0JBQ0osVUFBVTt3QkFDVixtQkFBbUIsRUFBRSxXQUFXO3dCQUNoQyxpQkFBaUIsRUFBRSxTQUFTO3dCQUM1QixjQUFjLEVBQUUsYUFBYSxDQUFDLFlBQVk7d0JBQzFDLHFCQUFxQixFQUFFLGFBQWE7d0JBQ3BDLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRTt3QkFDcEIsV0FBVyxFQUFFLGFBQWEsQ0FBQyxhQUFhO3dCQUN4QyxXQUFXLEVBQUUsS0FBSztxQkFDbkIsQ0FBQzt5QkFDRCxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDbEIsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3pELENBQUMsQ0FBQyxDQUFDO29CQUVMLE9BQU87d0JBQ0wsT0FBTyxFQUFFLElBQUk7d0JBQ2IsT0FBTyxFQUFFLG1CQUFtQixXQUFXLGdDQUFnQzt3QkFDdkUsS0FBSyxFQUFFLElBQUk7cUJBQ1osQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNsRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxLQUFLO3dCQUNkLE9BQU8sRUFBRSxJQUFJO3dCQUNiLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLHNCQUFzQjtxQkFDL0MsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELGlDQUFpQztZQUNqQyxXQUFXLEVBQUUsS0FBSyxFQUNoQixPQUFZLEVBQ1osSUFJQyxFQUNELEVBQUU7Z0JBQ0YsTUFBTSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsVUFBVSxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQztnQkFFbEUsSUFBSSxDQUFDO29CQUNILFdBQVcsQ0FBQyxJQUFJLENBQ2QsSUFBSSxVQUFVLHlCQUF5QixXQUFXLFlBQVksZUFBZSxnQkFBZ0IsVUFBVSxFQUFFLENBQzFHLENBQUM7b0JBRUYscUJBQXFCO29CQUNyQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUMzQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ1YsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQUUsbUJBQW1CLFdBQVcsRUFBRTt5QkFDeEMsQ0FBQztvQkFDSixDQUFDO29CQUVELDhCQUE4QjtvQkFDOUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUM7b0JBQ2pGLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDbkIsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQ0gsK0VBQStFO3lCQUNsRixDQUFDO29CQUNKLENBQUM7b0JBRUQsa0NBQWtDO29CQUNsQyxJQUFJLENBQUMsY0FBYyxJQUFJLE9BQU8sY0FBYyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQzt3QkFDakUsT0FBTzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxPQUFPLEVBQUUsSUFBSTs0QkFDYixLQUFLLEVBQUUsZ0NBQWdDO3lCQUN4QyxDQUFDO29CQUNKLENBQUM7b0JBRUQsZ0NBQWdDO29CQUNoQyxJQUFJLFdBQVcsR0FBRyxlQUFlLENBQUM7b0JBQ2xDLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO29CQUVuQixJQUFJLFdBQVcsSUFBSSxPQUFPLFdBQVcsQ0FBQyxjQUFjLEtBQUssVUFBVSxFQUFFLENBQUM7d0JBQ3BFLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUNwRCxNQUFNLGVBQWUsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUNwQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQ1QsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssYUFBYSxDQUFDLFlBQVk7NEJBQ3pDLENBQUMsQ0FBQyxhQUFhLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUNsRixDQUFDO3dCQUNGLElBQUksZUFBZSxFQUFFLENBQUM7NEJBQ3BCLFdBQVcsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDOzRCQUNuQyxhQUFhO2dDQUNYLGVBQWUsQ0FBQyxjQUFjO29DQUM5QixlQUFlLENBQUMsS0FBSztvQ0FDckIsR0FBRyxlQUFlLENBQUMsSUFBSSxlQUFlLENBQUM7NEJBQ3pDLFNBQVMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDO3dCQUNqQyxDQUFDO29CQUNILENBQUM7b0JBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUNuQixPQUFPOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLE9BQU8sRUFBRSxJQUFJOzRCQUNiLEtBQUssRUFDSCxxRkFBcUY7eUJBQ3hGLENBQUM7b0JBQ0osQ0FBQztvQkFFRCx5REFBeUQ7b0JBQ3pELGNBQWM7eUJBQ1gsSUFBSSxDQUFDO3dCQUNKLFVBQVU7d0JBQ1YsbUJBQW1CLEVBQUUsV0FBVzt3QkFDaEMsaUJBQWlCLEVBQUUsU0FBUzt3QkFDNUIsY0FBYyxFQUFFLGFBQWEsQ0FBQyxZQUFZO3dCQUMxQyxxQkFBcUIsRUFBRSxhQUFhO3dCQUNwQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQ3BCLFdBQVcsRUFBRSxhQUFhLENBQUMsYUFBYTt3QkFDeEMsV0FBVyxFQUFFLEtBQUs7cUJBQ25CLENBQUM7eUJBQ0QsS0FBSyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7d0JBQ2xCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUN6RCxDQUFDLENBQUMsQ0FBQztvQkFFTCxPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLE9BQU8sRUFBRSxxQkFBcUIsV0FBVyxnQ0FBZ0M7d0JBQ3pFLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO29CQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDbEUsT0FBTzt3QkFDTCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxPQUFPLEVBQUUsSUFBSTt3QkFDYixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxzQkFBc0I7cUJBQy9DLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsY0FBYyxDQUFDLFFBQXVCLEVBQUUsTUFBVztJQUNoRSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsOEJBQThCLENBQUMsQ0FBQztRQUMxRCxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsc0JBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFL0UsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFeEIsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxJQUFJLENBQ1QsSUFBSSxVQUFVLDhGQUE4RixDQUM3RyxDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsc0JBQXNCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLGFBQWEsQ0FBQyxNQUFXO0lBQ3RDLElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLHNCQUFzQixDQUFDLENBQUM7SUFDcEQsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsUUFBdUIsRUFBRSxNQUFXO0lBQy9ELHdCQUF3QjtJQUN4QixrQkFBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0lBRUgsc0JBQXNCO0lBQ3RCLGtCQUFPLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxtQkFBbUI7SUFDbkIsa0JBQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JDLElBQUksQ0FBQztZQUNILE1BQU0sY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2QyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsa0JBQWtCO0lBQ2xCLGtCQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwQyxJQUFJLENBQUM7WUFDSCxNQUFNLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgscUJBQXFCO0lBQ3JCLGtCQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2QyxJQUFJLENBQUM7WUFDSCxNQUFNLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixNQUFNLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILHdCQUF3QjtJQUN4QixrQkFBTyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMvQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLElBQUksQ0FDVCxJQUFJLFVBQVUsd0hBQXdILENBQ3ZJLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxtQkFBeUIsUUFBb0M7SUFDM0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLG1CQUFtQixFQUFFLENBQUMsTUFBYSxDQUFDO0lBQy9ELE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDO0lBRTFDLElBQUksQ0FBQztRQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLG1CQUFtQixDQUFDLENBQUM7UUFFcEQsc0RBQXNEO1FBQ3RELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSw4Q0FBOEMsQ0FBQyxDQUFDO1FBRS9FLGtDQUFrQztRQUNsQyxNQUFNLGFBQWEsR0FBa0I7WUFDbkMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO1lBQzNCLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7WUFDL0MsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3JCLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtZQUMvQixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87WUFDekIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1lBQ2pDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztZQUN6QixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7WUFDM0IsZUFBZSxFQUFFLFFBQVEsQ0FBQyxlQUFlO1lBQ3pDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtZQUMvQixpQkFBaUIsRUFBRSxRQUFRLENBQUMsaUJBQWlCO1lBQzdDLDhCQUE4QjtZQUM5QixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7WUFDM0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1NBQ3BCLENBQUM7UUFFRixzQ0FBc0M7UUFDdEMseUVBQXlFO1FBQ3pFLDhDQUE4QztRQUM5QyxtREFBbUQ7UUFFbkQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsNENBQTRDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ0xJIEJyaWRnZSBBZGRvbiAtIE1haW4gUHJvY2VzcyBFbnRyeSBQb2ludFxuICpcbiAqIFRoaXMgYWRkb24gZXh0ZW5kcyBMb2NhbCdzIGNhcGFiaWxpdGllczpcbiAqIC0gR3JhcGhRTCBtdXRhdGlvbnMgZm9yIGRlbGV0ZVNpdGUsIHdwQ2xpIChmb3IgbG9jYWwtY2xpKVxuICogLSBNQ1AgU2VydmVyIGZvciBBSSB0b29sIGludGVncmF0aW9uIChDbGF1ZGUgQ29kZSwgQ2hhdEdQVCwgZXRjLilcbiAqL1xuXG5pbXBvcnQgKiBhcyBMb2NhbE1haW4gZnJvbSAnQGdldGZseXdoZWVsL2xvY2FsL21haW4nO1xuaW1wb3J0IHsgaXBjTWFpbiB9IGZyb20gJ2VsZWN0cm9uJztcbmltcG9ydCBncWwgZnJvbSAnZ3JhcGhxbC10YWcnO1xuaW1wb3J0IHsgTWNwU2VydmVyIH0gZnJvbSAnLi9tY3AvTWNwU2VydmVyJztcbmltcG9ydCB7IE1DUF9TRVJWRVIgfSBmcm9tICcuLi9jb21tb24vY29uc3RhbnRzJztcbmltcG9ydCB7IExvY2FsU2VydmljZXMgfSBmcm9tICcuLi9jb21tb24vdHlwZXMnO1xuXG5jb25zdCBBRERPTl9OQU1FID0gJ01DUCBTZXJ2ZXInO1xuXG5sZXQgbWNwU2VydmVyOiBNY3BTZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuLyoqXG4gKiBHcmFwaFFMIHR5cGUgZGVmaW5pdGlvbnMgZm9yIENMSSBCcmlkZ2VcbiAqL1xuY29uc3QgdHlwZURlZnMgPSBncWxgXG4gIGlucHV0IERlbGV0ZVNpdGVJbnB1dCB7XG4gICAgXCJUaGUgc2l0ZSBJRCB0byBkZWxldGVcIlxuICAgIGlkOiBJRCFcbiAgICBcIldoZXRoZXIgdG8gbW92ZSBzaXRlIGZpbGVzIHRvIHRyYXNoICh0cnVlKSBvciBqdXN0IHJlbW92ZSBmcm9tIExvY2FsIChmYWxzZSlcIlxuICAgIHRyYXNoRmlsZXM6IEJvb2xlYW4gPSB0cnVlXG4gICAgXCJXaGV0aGVyIHRvIHVwZGF0ZSB0aGUgaG9zdHMgZmlsZVwiXG4gICAgdXBkYXRlSG9zdHM6IEJvb2xlYW4gPSB0cnVlXG4gIH1cblxuICB0eXBlIERlbGV0ZVNpdGVSZXN1bHQge1xuICAgIFwiV2hldGhlciB0aGUgZGVsZXRpb24gd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGRlbGV0aW9uIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICAgIFwiVGhlIElEIG9mIHRoZSBkZWxldGVkIHNpdGVcIlxuICAgIHNpdGVJZDogSURcbiAgfVxuXG4gIGlucHV0IFdwQ2xpSW5wdXQge1xuICAgIFwiVGhlIHNpdGUgSUQgdG8gcnVuIFdQLUNMSSBhZ2FpbnN0XCJcbiAgICBzaXRlSWQ6IElEIVxuICAgIFwiV1AtQ0xJIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyAoZS5nLiwgWydwbHVnaW4nLCAnbGlzdCcsICctLWZvcm1hdD1qc29uJ10pXCJcbiAgICBhcmdzOiBbU3RyaW5nIV0hXG4gICAgXCJTa2lwIGxvYWRpbmcgcGx1Z2lucyAoZGVmYXVsdDogdHJ1ZSlcIlxuICAgIHNraXBQbHVnaW5zOiBCb29sZWFuID0gdHJ1ZVxuICAgIFwiU2tpcCBsb2FkaW5nIHRoZW1lcyAoZGVmYXVsdDogdHJ1ZSlcIlxuICAgIHNraXBUaGVtZXM6IEJvb2xlYW4gPSB0cnVlXG4gIH1cblxuICB0eXBlIFdwQ2xpUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgdGhlIGNvbW1hbmQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiQ29tbWFuZCBvdXRwdXQgKHN0ZG91dClcIlxuICAgIG91dHB1dDogU3RyaW5nXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGNvbW1hbmQgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICBpbnB1dCBDcmVhdGVTaXRlSW5wdXQge1xuICAgIFwiU2l0ZSBuYW1lIChyZXF1aXJlZClcIlxuICAgIG5hbWU6IFN0cmluZyFcbiAgICBcIlBIUCB2ZXJzaW9uIChlLmcuLCAnOC4yLjEwJykuIFVzZXMgTG9jYWwgZGVmYXVsdCBpZiBub3Qgc3BlY2lmaWVkLlwiXG4gICAgcGhwVmVyc2lvbjogU3RyaW5nXG4gICAgXCJXZWIgc2VydmVyIHR5cGVcIlxuICAgIHdlYlNlcnZlcjogU3RyaW5nXG4gICAgXCJEYXRhYmFzZSB0eXBlXCJcbiAgICBkYXRhYmFzZTogU3RyaW5nXG4gICAgXCJXb3JkUHJlc3MgYWRtaW4gdXNlcm5hbWUgKGRlZmF1bHQ6IGFkbWluKVwiXG4gICAgd3BBZG1pblVzZXJuYW1lOiBTdHJpbmdcbiAgICBcIldvcmRQcmVzcyBhZG1pbiBwYXNzd29yZCAoZGVmYXVsdDogcGFzc3dvcmQpXCJcbiAgICB3cEFkbWluUGFzc3dvcmQ6IFN0cmluZ1xuICAgIFwiV29yZFByZXNzIGFkbWluIGVtYWlsIChkZWZhdWx0OiBhZG1pbkBsb2NhbC50ZXN0KVwiXG4gICAgd3BBZG1pbkVtYWlsOiBTdHJpbmdcbiAgICBcIkJsdWVwcmludCBuYW1lIHRvIGNyZWF0ZSBzaXRlIGZyb20uIFVzZSBsaXN0X2JsdWVwcmludHMgdG8gc2VlIGF2YWlsYWJsZSBibHVlcHJpbnRzLlwiXG4gICAgYmx1ZXByaW50OiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgQ3JlYXRlU2l0ZVJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHNpdGUgY3JlYXRpb24gd2FzIGluaXRpYXRlZCBzdWNjZXNzZnVsbHlcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGNyZWF0aW9uIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICAgIFwiVGhlIGNyZWF0ZWQgc2l0ZSBJRFwiXG4gICAgc2l0ZUlkOiBJRFxuICAgIFwiVGhlIHNpdGUgbmFtZVwiXG4gICAgc2l0ZU5hbWU6IFN0cmluZ1xuICAgIFwiVGhlIHNpdGUgZG9tYWluXCJcbiAgICBzaXRlRG9tYWluOiBTdHJpbmdcbiAgfVxuXG4gIGlucHV0IE9wZW5TaXRlSW5wdXQge1xuICAgIFwiVGhlIHNpdGUgSUQgdG8gb3BlblwiXG4gICAgc2l0ZUlkOiBJRCFcbiAgICBcIlBhdGggdG8gb3BlbiAoZGVmYXVsdDogLywgdXNlIC93cC1hZG1pbiBmb3IgYWRtaW4pXCJcbiAgICBwYXRoOiBTdHJpbmcgPSBcIi9cIlxuICB9XG5cbiAgdHlwZSBPcGVuU2l0ZVJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHRoZSBzaXRlIHdhcyBvcGVuZWQgc3VjY2Vzc2Z1bGx5XCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgICBcIlRoZSBVUkwgdGhhdCB3YXMgb3BlbmVkXCJcbiAgICB1cmw6IFN0cmluZ1xuICB9XG5cbiAgaW5wdXQgQ2xvbmVTaXRlSW5wdXQge1xuICAgIFwiVGhlIHNpdGUgSUQgdG8gY2xvbmVcIlxuICAgIHNpdGVJZDogSUQhXG4gICAgXCJOYW1lIGZvciB0aGUgY2xvbmVkIHNpdGVcIlxuICAgIG5ld05hbWU6IFN0cmluZyFcbiAgfVxuXG4gIHR5cGUgQ2xvbmVTaXRlUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgY2xvbmluZyB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gICAgXCJUaGUgbmV3IHNpdGUgSURcIlxuICAgIG5ld1NpdGVJZDogSURcbiAgICBcIlRoZSBuZXcgc2l0ZSBuYW1lXCJcbiAgICBuZXdTaXRlTmFtZTogU3RyaW5nXG4gICAgXCJUaGUgbmV3IHNpdGUgZG9tYWluXCJcbiAgICBuZXdTaXRlRG9tYWluOiBTdHJpbmdcbiAgfVxuXG4gIGlucHV0IEV4cG9ydFNpdGVJbnB1dCB7XG4gICAgXCJUaGUgc2l0ZSBJRCB0byBleHBvcnRcIlxuICAgIHNpdGVJZDogSUQhXG4gICAgXCJPdXRwdXQgZGlyZWN0b3J5IHBhdGggKGRlZmF1bHQ6IH4vRG93bmxvYWRzKVwiXG4gICAgb3V0cHV0UGF0aDogU3RyaW5nXG4gIH1cblxuICB0eXBlIEV4cG9ydFNpdGVSZXN1bHQge1xuICAgIFwiV2hldGhlciBleHBvcnQgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICAgIFwiUGF0aCB0byB0aGUgZXhwb3J0ZWQgemlwIGZpbGVcIlxuICAgIGV4cG9ydFBhdGg6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBCbHVlcHJpbnQge1xuICAgIFwiQmx1ZXByaW50IG5hbWVcIlxuICAgIG5hbWU6IFN0cmluZyFcbiAgICBcIkxhc3QgbW9kaWZpZWQgZGF0ZVwiXG4gICAgbGFzdE1vZGlmaWVkOiBTdHJpbmdcbiAgICBcIlBIUCB2ZXJzaW9uXCJcbiAgICBwaHBWZXJzaW9uOiBTdHJpbmdcbiAgICBcIldlYiBzZXJ2ZXIgdHlwZVwiXG4gICAgd2ViU2VydmVyOiBTdHJpbmdcbiAgICBcIkRhdGFiYXNlIHR5cGVcIlxuICAgIGRhdGFiYXNlOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgQmx1ZXByaW50c1Jlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHF1ZXJ5IHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgICBcIkxpc3Qgb2YgYmx1ZXByaW50c1wiXG4gICAgYmx1ZXByaW50czogW0JsdWVwcmludCFdXG4gIH1cblxuICBpbnB1dCBTYXZlQmx1ZXByaW50SW5wdXQge1xuICAgIFwiVGhlIHNpdGUgSUQgdG8gc2F2ZSBhcyBibHVlcHJpbnRcIlxuICAgIHNpdGVJZDogSUQhXG4gICAgXCJOYW1lIGZvciB0aGUgYmx1ZXByaW50XCJcbiAgICBuYW1lOiBTdHJpbmchXG4gIH1cblxuICB0eXBlIFNhdmVCbHVlcHJpbnRSZXN1bHQge1xuICAgIFwiV2hldGhlciBzYXZlIHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgICBcIlRoZSBibHVlcHJpbnQgbmFtZVwiXG4gICAgYmx1ZXByaW50TmFtZTogU3RyaW5nXG4gIH1cblxuICAjIFBoYXNlIDg6IFdvcmRQcmVzcyBEZXZlbG9wbWVudCBUb29sc1xuICBpbnB1dCBFeHBvcnREYXRhYmFzZUlucHV0IHtcbiAgICBcIlRoZSBzaXRlIElEXCJcbiAgICBzaXRlSWQ6IElEIVxuICAgIFwiT3V0cHV0IGZpbGUgcGF0aCAob3B0aW9uYWwsIGRlZmF1bHRzIHRvIH4vRG93bmxvYWRzLzxzaXRlLW5hbWU+LnNxbClcIlxuICAgIG91dHB1dFBhdGg6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBFeHBvcnREYXRhYmFzZVJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIGV4cG9ydCB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gICAgXCJQYXRoIHRvIHRoZSBleHBvcnRlZCBTUUwgZmlsZVwiXG4gICAgb3V0cHV0UGF0aDogU3RyaW5nXG4gIH1cblxuICBpbnB1dCBJbXBvcnREYXRhYmFzZUlucHV0IHtcbiAgICBcIlRoZSBzaXRlIElEXCJcbiAgICBzaXRlSWQ6IElEIVxuICAgIFwiUGF0aCB0byB0aGUgU1FMIGZpbGUgdG8gaW1wb3J0XCJcbiAgICBzcWxQYXRoOiBTdHJpbmchXG4gIH1cblxuICB0eXBlIEltcG9ydERhdGFiYXNlUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgaW1wb3J0IHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gIGlucHV0IE9wZW5BZG1pbmVySW5wdXQge1xuICAgIFwiVGhlIHNpdGUgSURcIlxuICAgIHNpdGVJZDogSUQhXG4gIH1cblxuICB0eXBlIE9wZW5BZG1pbmVyUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgb3BlbmluZyB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICBpbnB1dCBUcnVzdFNzbElucHV0IHtcbiAgICBcIlRoZSBzaXRlIElEXCJcbiAgICBzaXRlSWQ6IElEIVxuICB9XG5cbiAgdHlwZSBUcnVzdFNzbFJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHRydXN0IHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gIGlucHV0IE1jcFJlbmFtZVNpdGVJbnB1dCB7XG4gICAgXCJUaGUgc2l0ZSBJRFwiXG4gICAgc2l0ZUlkOiBJRCFcbiAgICBcIk5ldyBuYW1lIGZvciB0aGUgc2l0ZVwiXG4gICAgbmV3TmFtZTogU3RyaW5nIVxuICB9XG5cbiAgdHlwZSBNY3BSZW5hbWVTaXRlUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgcmVuYW1lIHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgICBcIlRoZSBuZXcgbmFtZVwiXG4gICAgbmV3TmFtZTogU3RyaW5nXG4gIH1cblxuICBpbnB1dCBDaGFuZ2VQaHBWZXJzaW9uSW5wdXQge1xuICAgIFwiVGhlIHNpdGUgSURcIlxuICAgIHNpdGVJZDogSUQhXG4gICAgXCJUYXJnZXQgUEhQIHZlcnNpb25cIlxuICAgIHBocFZlcnNpb246IFN0cmluZyFcbiAgfVxuXG4gIHR5cGUgQ2hhbmdlUGhwVmVyc2lvblJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIGNoYW5nZSB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gICAgXCJUaGUgbmV3IFBIUCB2ZXJzaW9uXCJcbiAgICBwaHBWZXJzaW9uOiBTdHJpbmdcbiAgfVxuXG4gIGlucHV0IEltcG9ydFNpdGVJbnB1dCB7XG4gICAgXCJQYXRoIHRvIHRoZSB6aXAgZmlsZSB0byBpbXBvcnRcIlxuICAgIHppcFBhdGg6IFN0cmluZyFcbiAgICBcIk5hbWUgZm9yIHRoZSBpbXBvcnRlZCBzaXRlIChvcHRpb25hbClcIlxuICAgIHNpdGVOYW1lOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgSW1wb3J0U2l0ZVJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIGltcG9ydCB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gICAgXCJUaGUgaW1wb3J0ZWQgc2l0ZSBJRFwiXG4gICAgc2l0ZUlkOiBJRFxuICAgIFwiVGhlIGltcG9ydGVkIHNpdGUgbmFtZVwiXG4gICAgc2l0ZU5hbWU6IFN0cmluZ1xuICB9XG5cbiAgIyBQaGFzZSA5OiBTaXRlIENvbmZpZ3VyYXRpb24gJiBEZXYgVG9vbHNcbiAgaW5wdXQgVG9nZ2xlWGRlYnVnSW5wdXQge1xuICAgIFwiVGhlIHNpdGUgSURcIlxuICAgIHNpdGVJZDogSUQhXG4gICAgXCJXaGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIFhkZWJ1Z1wiXG4gICAgZW5hYmxlZDogQm9vbGVhbiFcbiAgfVxuXG4gIHR5cGUgVG9nZ2xlWGRlYnVnUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgdG9nZ2xlIHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgICBcIkN1cnJlbnQgWGRlYnVnIHN0YXRlXCJcbiAgICBlbmFibGVkOiBCb29sZWFuXG4gIH1cblxuICBpbnB1dCBHZXRTaXRlTG9nc0lucHV0IHtcbiAgICBcIlRoZSBzaXRlIElEXCJcbiAgICBzaXRlSWQ6IElEIVxuICAgIFwiVHlwZSBvZiBsb2dzIHRvIHJldHJpZXZlIChwaHAsIG5naW54LCBteXNxbCwgYWxsKVwiXG4gICAgbG9nVHlwZTogU3RyaW5nID0gXCJwaHBcIlxuICAgIFwiTnVtYmVyIG9mIGxpbmVzIHRvIHJldHVyblwiXG4gICAgbGluZXM6IEludCA9IDEwMFxuICB9XG5cbiAgdHlwZSBMb2dFbnRyeSB7XG4gICAgXCJMb2cgdHlwZVwiXG4gICAgdHlwZTogU3RyaW5nIVxuICAgIFwiTG9nIGNvbnRlbnRcIlxuICAgIGNvbnRlbnQ6IFN0cmluZyFcbiAgICBcIkxvZyBmaWxlIHBhdGhcIlxuICAgIHBhdGg6IFN0cmluZyFcbiAgfVxuXG4gIHR5cGUgR2V0U2l0ZUxvZ3NSZXN1bHQge1xuICAgIFwiV2hldGhlciByZXRyaWV2YWwgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICAgIFwiTG9nIGVudHJpZXNcIlxuICAgIGxvZ3M6IFtMb2dFbnRyeSFdXG4gIH1cblxuICB0eXBlIFNlcnZpY2VJbmZvIHtcbiAgICBcIlNlcnZpY2Ugcm9sZSAocGhwLCBkYXRhYmFzZSwgd2Vic2VydmVyKVwiXG4gICAgcm9sZTogU3RyaW5nIVxuICAgIFwiU2VydmljZSBuYW1lXCJcbiAgICBuYW1lOiBTdHJpbmchXG4gICAgXCJTZXJ2aWNlIHZlcnNpb25cIlxuICAgIHZlcnNpb246IFN0cmluZyFcbiAgfVxuXG4gIHR5cGUgTGlzdFNlcnZpY2VzUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgbGlzdGluZyB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gICAgXCJBdmFpbGFibGUgc2VydmljZXNcIlxuICAgIHNlcnZpY2VzOiBbU2VydmljZUluZm8hXVxuICB9XG5cbiAgZXh0ZW5kIHR5cGUgTXV0YXRpb24ge1xuICAgIFwiQ3JlYXRlIGEgbmV3IFdvcmRQcmVzcyBzaXRlIHdpdGggZnVsbCBXb3JkUHJlc3MgaW5zdGFsbGF0aW9uXCJcbiAgICBjcmVhdGVTaXRlKGlucHV0OiBDcmVhdGVTaXRlSW5wdXQhKTogQ3JlYXRlU2l0ZVJlc3VsdCFcblxuICAgIFwiRGVsZXRlIGEgc2l0ZSBmcm9tIExvY2FsXCJcbiAgICBkZWxldGVTaXRlKGlucHV0OiBEZWxldGVTaXRlSW5wdXQhKTogRGVsZXRlU2l0ZVJlc3VsdCFcblxuICAgIFwiRGVsZXRlIG11bHRpcGxlIHNpdGVzIGZyb20gTG9jYWxcIlxuICAgIGRlbGV0ZVNpdGVzKGlkczogW0lEIV0hLCB0cmFzaEZpbGVzOiBCb29sZWFuID0gdHJ1ZSk6IERlbGV0ZVNpdGVSZXN1bHQhXG5cbiAgICBcIlJ1biBhIFdQLUNMSSBjb21tYW5kIGFnYWluc3QgYSBzaXRlXCJcbiAgICB3cENsaShpbnB1dDogV3BDbGlJbnB1dCEpOiBXcENsaVJlc3VsdCFcblxuICAgIFwiT3BlbiBhIHNpdGUgaW4gdGhlIGRlZmF1bHQgYnJvd3NlclwiXG4gICAgb3BlblNpdGUoaW5wdXQ6IE9wZW5TaXRlSW5wdXQhKTogT3BlblNpdGVSZXN1bHQhXG5cbiAgICBcIkNsb25lIGFuIGV4aXN0aW5nIHNpdGVcIlxuICAgIGNsb25lU2l0ZShpbnB1dDogQ2xvbmVTaXRlSW5wdXQhKTogQ2xvbmVTaXRlUmVzdWx0IVxuXG4gICAgXCJFeHBvcnQgYSBzaXRlIHRvIGEgemlwIGZpbGVcIlxuICAgIGV4cG9ydFNpdGUoaW5wdXQ6IEV4cG9ydFNpdGVJbnB1dCEpOiBFeHBvcnRTaXRlUmVzdWx0IVxuXG4gICAgXCJTYXZlIGEgc2l0ZSBhcyBhIGJsdWVwcmludFwiXG4gICAgc2F2ZUJsdWVwcmludChpbnB1dDogU2F2ZUJsdWVwcmludElucHV0ISk6IFNhdmVCbHVlcHJpbnRSZXN1bHQhXG5cbiAgICAjIFBoYXNlIDg6IFdvcmRQcmVzcyBEZXZlbG9wbWVudCBUb29sc1xuICAgIFwiRXhwb3J0IHNpdGUgZGF0YWJhc2UgdG8gU1FMIGZpbGVcIlxuICAgIGV4cG9ydERhdGFiYXNlKGlucHV0OiBFeHBvcnREYXRhYmFzZUlucHV0ISk6IEV4cG9ydERhdGFiYXNlUmVzdWx0IVxuXG4gICAgXCJJbXBvcnQgU1FMIGZpbGUgaW50byBzaXRlIGRhdGFiYXNlXCJcbiAgICBpbXBvcnREYXRhYmFzZShpbnB1dDogSW1wb3J0RGF0YWJhc2VJbnB1dCEpOiBJbXBvcnREYXRhYmFzZVJlc3VsdCFcblxuICAgIFwiT3BlbiBBZG1pbmVyIGRhdGFiYXNlIG1hbmFnZW1lbnQgVUlcIlxuICAgIG9wZW5BZG1pbmVyKGlucHV0OiBPcGVuQWRtaW5lcklucHV0ISk6IE9wZW5BZG1pbmVyUmVzdWx0IVxuXG4gICAgXCJUcnVzdCBzaXRlIFNTTCBjZXJ0aWZpY2F0ZVwiXG4gICAgdHJ1c3RTc2woaW5wdXQ6IFRydXN0U3NsSW5wdXQhKTogVHJ1c3RTc2xSZXN1bHQhXG5cbiAgICBcIlJlbmFtZSBhIHNpdGUgKE1DUCB2ZXJzaW9uKVwiXG4gICAgbWNwUmVuYW1lU2l0ZShpbnB1dDogTWNwUmVuYW1lU2l0ZUlucHV0ISk6IE1jcFJlbmFtZVNpdGVSZXN1bHQhXG5cbiAgICBcIkNoYW5nZSBzaXRlIFBIUCB2ZXJzaW9uXCJcbiAgICBjaGFuZ2VQaHBWZXJzaW9uKGlucHV0OiBDaGFuZ2VQaHBWZXJzaW9uSW5wdXQhKTogQ2hhbmdlUGhwVmVyc2lvblJlc3VsdCFcblxuICAgIFwiSW1wb3J0IHNpdGUgZnJvbSB6aXAgZmlsZVwiXG4gICAgaW1wb3J0U2l0ZShpbnB1dDogSW1wb3J0U2l0ZUlucHV0ISk6IEltcG9ydFNpdGVSZXN1bHQhXG5cbiAgICAjIFBoYXNlIDk6IFNpdGUgQ29uZmlndXJhdGlvbiAmIERldiBUb29sc1xuICAgIFwiVG9nZ2xlIFhkZWJ1ZyBmb3IgYSBzaXRlXCJcbiAgICB0b2dnbGVYZGVidWcoaW5wdXQ6IFRvZ2dsZVhkZWJ1Z0lucHV0ISk6IFRvZ2dsZVhkZWJ1Z1Jlc3VsdCFcblxuICAgIFwiR2V0IHNpdGUgbG9nIGZpbGVzXCJcbiAgICBnZXRTaXRlTG9ncyhpbnB1dDogR2V0U2l0ZUxvZ3NJbnB1dCEpOiBHZXRTaXRlTG9nc1Jlc3VsdCFcbiAgfVxuXG4gIGV4dGVuZCB0eXBlIFF1ZXJ5IHtcbiAgICBcIlJ1biBhIFdQLUNMSSBjb21tYW5kIGFnYWluc3QgYSBzaXRlIChyZWFkLW9ubHkgb3BlcmF0aW9ucylcIlxuICAgIHdwQ2xpUXVlcnkoaW5wdXQ6IFdwQ2xpSW5wdXQhKTogV3BDbGlSZXN1bHQhXG5cbiAgICBcIkxpc3QgYWxsIGF2YWlsYWJsZSBibHVlcHJpbnRzXCJcbiAgICBibHVlcHJpbnRzOiBCbHVlcHJpbnRzUmVzdWx0IVxuXG4gICAgXCJMaXN0IGF2YWlsYWJsZSBzZXJ2aWNlIHZlcnNpb25zXCJcbiAgICBsaXN0U2VydmljZXModHlwZTogU3RyaW5nKTogTGlzdFNlcnZpY2VzUmVzdWx0IVxuXG4gICAgIyBQaGFzZSAxMTogV1AgRW5naW5lIENvbm5lY3RcbiAgICBcIkNoZWNrIFdQIEVuZ2luZSBhdXRoZW50aWNhdGlvbiBzdGF0dXNcIlxuICAgIHdwZVN0YXR1czogV3BlQXV0aFN0YXR1cyFcblxuICAgIFwiTGlzdCBhbGwgc2l0ZXMgZnJvbSBXUCBFbmdpbmUgYWNjb3VudFwiXG4gICAgbGlzdFdwZVNpdGVzKGFjY291bnRJZDogU3RyaW5nKTogTGlzdFdwZVNpdGVzUmVzdWx0IVxuXG4gICAgIyBQaGFzZSAxMWI6IFNpdGUgTGlua2luZ1xuICAgIFwiR2V0IFdQIEVuZ2luZSBjb25uZWN0aW9uIGRldGFpbHMgZm9yIGEgbG9jYWwgc2l0ZVwiXG4gICAgZ2V0V3BlTGluayhzaXRlSWQ6IElEISk6IEdldFdwZUxpbmtSZXN1bHQhXG4gIH1cblxuICAjIFBoYXNlIDExOiBXUCBFbmdpbmUgQ29ubmVjdCBUeXBlc1xuICB0eXBlIFdwZUF1dGhTdGF0dXMge1xuICAgIFwiV2hldGhlciBhdXRoZW50aWNhdGVkIHdpdGggV1AgRW5naW5lXCJcbiAgICBhdXRoZW50aWNhdGVkOiBCb29sZWFuIVxuICAgIFwiVXNlciBlbWFpbCBpZiBhdXRoZW50aWNhdGVkXCJcbiAgICBlbWFpbDogU3RyaW5nXG4gICAgXCJBY2NvdW50IElEIGlmIGF1dGhlbnRpY2F0ZWRcIlxuICAgIGFjY291bnRJZDogU3RyaW5nXG4gICAgXCJBY2NvdW50IG5hbWUgaWYgYXV0aGVudGljYXRlZFwiXG4gICAgYWNjb3VudE5hbWU6IFN0cmluZ1xuICAgIFwiVG9rZW4gZXhwaXJ5IHRpbWVcIlxuICAgIHRva2VuRXhwaXJ5OiBTdHJpbmdcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgc3RhdHVzIGNoZWNrIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBXcGVBdXRoUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgYXV0aGVudGljYXRpb24gd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJVc2VyIGVtYWlsIGlmIHN1Y2Nlc3NmdWxcIlxuICAgIGVtYWlsOiBTdHJpbmdcbiAgICBcIk1lc3NhZ2UgYWJvdXQgdGhlIGF1dGhlbnRpY2F0aW9uIHJlc3VsdFwiXG4gICAgbWVzc2FnZTogU3RyaW5nXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBXcGVMb2dvdXRSZXN1bHQge1xuICAgIFwiV2hldGhlciBsb2dvdXQgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJNZXNzYWdlIGFib3V0IHRoZSBsb2dvdXQgcmVzdWx0XCJcbiAgICBtZXNzYWdlOiBTdHJpbmdcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICB0eXBlIFdwZVNpdGUge1xuICAgIFwiSW5zdGFsbCBJRFwiXG4gICAgaWQ6IFN0cmluZyFcbiAgICBcIkluc3RhbGwgbmFtZVwiXG4gICAgbmFtZTogU3RyaW5nIVxuICAgIFwiRW52aXJvbm1lbnQgKHByb2R1Y3Rpb24sIHN0YWdpbmcsIGRldmVsb3BtZW50KVwiXG4gICAgZW52aXJvbm1lbnQ6IFN0cmluZyFcbiAgICBcIlBIUCB2ZXJzaW9uXCJcbiAgICBwaHBWZXJzaW9uOiBTdHJpbmdcbiAgICBcIlByaW1hcnkgZG9tYWluXCJcbiAgICBwcmltYXJ5RG9tYWluOiBTdHJpbmdcbiAgICBcIkFjY291bnQgSURcIlxuICAgIGFjY291bnRJZDogU3RyaW5nXG4gICAgXCJBY2NvdW50IG5hbWVcIlxuICAgIGFjY291bnROYW1lOiBTdHJpbmdcbiAgICBcIlNGVFAgaG9zdFwiXG4gICAgc2Z0cEhvc3Q6IFN0cmluZ1xuICAgIFwiU0ZUUCB1c2VyXCJcbiAgICBzZnRwVXNlcjogU3RyaW5nXG4gIH1cblxuICB0eXBlIExpc3RXcGVTaXRlc1Jlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHF1ZXJ5IHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgICBcIkxpc3Qgb2YgV1AgRW5naW5lIHNpdGVzXCJcbiAgICBzaXRlczogW1dwZVNpdGUhXVxuICAgIFwiVG90YWwgY291bnQgb2Ygc2l0ZXNcIlxuICAgIGNvdW50OiBJbnRcbiAgfVxuXG4gICMgUGhhc2UgMTFiOiBTaXRlIExpbmtpbmcgVHlwZXNcbiAgdHlwZSBXcGVDb25uZWN0aW9uIHtcbiAgICBcIlJlbW90ZSBpbnN0YWxsIElEIChVVUlEIGZyb20gV1AgRW5naW5lKVwiXG4gICAgcmVtb3RlSW5zdGFsbElkOiBTdHJpbmchXG4gICAgXCJJbnN0YWxsIG5hbWUgKGh1bWFuLXJlYWRhYmxlLCB1c2VkIGluIHBvcnRhbCBVUkxzKVwiXG4gICAgaW5zdGFsbE5hbWU6IFN0cmluZ1xuICAgIFwiRW52aXJvbm1lbnQgKHByb2R1Y3Rpb24sIHN0YWdpbmcsIGRldmVsb3BtZW50KVwiXG4gICAgZW52aXJvbm1lbnQ6IFN0cmluZ1xuICAgIFwiQWNjb3VudCBJRFwiXG4gICAgYWNjb3VudElkOiBTdHJpbmdcbiAgICBcIldQIEVuZ2luZSBwb3J0YWwgVVJMXCJcbiAgICBwb3J0YWxVcmw6IFN0cmluZ1xuICAgIFwiUHJpbWFyeSBkb21haW4vQ05BTUVcIlxuICAgIHByaW1hcnlEb21haW46IFN0cmluZ1xuICB9XG5cbiAgXCJTeW5jIGNhcGFiaWxpdGllcyBhdmFpbGFibGUgZm9yIFdQRS1jb25uZWN0ZWQgc2l0ZXNcIlxuICB0eXBlIFdwZVN5bmNDYXBhYmlsaXRpZXMge1xuICAgIFwiV2hldGhlciB1c2VyIGNhbiBwdXNoIHRvIFdQIEVuZ2luZVwiXG4gICAgY2FuUHVzaDogQm9vbGVhbiFcbiAgICBcIldoZXRoZXIgdXNlciBjYW4gcHVsbCBmcm9tIFdQIEVuZ2luZVwiXG4gICAgY2FuUHVsbDogQm9vbGVhbiFcbiAgICBcIkF2YWlsYWJsZSBzeW5jIG1vZGVzXCJcbiAgICBzeW5jTW9kZXM6IFtTdHJpbmchXSFcbiAgICBcIldoZXRoZXIgTWFnaWMgU3luYyAoc2VsZWN0IGZpbGVzKSBpcyBhdmFpbGFibGVcIlxuICAgIG1hZ2ljU3luY0F2YWlsYWJsZTogQm9vbGVhbiFcbiAgICBcIldoZXRoZXIgZGF0YWJhc2Ugc3luYyBpcyBhdmFpbGFibGVcIlxuICAgIGRhdGFiYXNlU3luY0F2YWlsYWJsZTogQm9vbGVhbiFcbiAgfVxuXG4gIHR5cGUgR2V0V3BlTGlua1Jlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHNpdGUgaXMgbGlua2VkIHRvIFdQIEVuZ2luZVwiXG4gICAgbGlua2VkOiBCb29sZWFuIVxuICAgIFwiU2l0ZSBuYW1lXCJcbiAgICBzaXRlTmFtZTogU3RyaW5nXG4gICAgXCJXUCBFbmdpbmUgY29ubmVjdGlvbnNcIlxuICAgIGNvbm5lY3Rpb25zOiBbV3BlQ29ubmVjdGlvbiFdXG4gICAgXCJOdW1iZXIgb2YgY29ubmVjdGlvbnNcIlxuICAgIGNvbm5lY3Rpb25Db3VudDogSW50XG4gICAgXCJTeW5jIGNhcGFiaWxpdGllcyAob25seSBwcmVzZW50IGlmIGxpbmtlZClcIlxuICAgIGNhcGFiaWxpdGllczogV3BlU3luY0NhcGFiaWxpdGllc1xuICAgIFwiTWVzc2FnZSAoZm9yIHVubGlua2VkIHNpdGVzKVwiXG4gICAgbWVzc2FnZTogU3RyaW5nXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICB9XG5cbiAgIyBQaGFzZSAxMWM6IFN5bmMgT3BlcmF0aW9ucyBUeXBlc1xuICB0eXBlIFN5bmNIaXN0b3J5RXZlbnQge1xuICAgIFwiUmVtb3RlIGluc3RhbGwgbmFtZVwiXG4gICAgcmVtb3RlSW5zdGFsbE5hbWU6IFN0cmluZ1xuICAgIFwiVW5peCB0aW1lc3RhbXBcIlxuICAgIHRpbWVzdGFtcDogRmxvYXQhXG4gICAgXCJFbnZpcm9ubWVudCAocHJvZHVjdGlvbiwgc3RhZ2luZywgZGV2ZWxvcG1lbnQpXCJcbiAgICBlbnZpcm9ubWVudDogU3RyaW5nIVxuICAgIFwiU3luYyBkaXJlY3Rpb25cIlxuICAgIGRpcmVjdGlvbjogU3RyaW5nIVxuICAgIFwiU3luYyBzdGF0dXNcIlxuICAgIHN0YXR1czogU3RyaW5nXG4gIH1cblxuICB0eXBlIEdldFN5bmNIaXN0b3J5UmVzdWx0IHtcbiAgICBcIldoZXRoZXIgdGhlIHF1ZXJ5IHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiU2l0ZSBuYW1lXCJcbiAgICBzaXRlTmFtZTogU3RyaW5nXG4gICAgXCJTeW5jIGhpc3RvcnkgZXZlbnRzXCJcbiAgICBldmVudHM6IFtTeW5jSGlzdG9yeUV2ZW50IV1cbiAgICBcIk51bWJlciBvZiBldmVudHNcIlxuICAgIGNvdW50OiBJbnRcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICB0eXBlIFN5bmNSZXN1bHQge1xuICAgIFwiV2hldGhlciB0aGUgc3luYyB3YXMgaW5pdGlhdGVkIHN1Y2Nlc3NmdWxseVwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIlN0YXR1cyBtZXNzYWdlXCJcbiAgICBtZXNzYWdlOiBTdHJpbmdcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICAjIEZpbGUgY2hhbmdlIGRldGVjdGlvblxuICB0eXBlIEZpbGVDaGFuZ2Uge1xuICAgIFwiRmlsZSBwYXRoIHJlbGF0aXZlIHRvIHNpdGUgcm9vdFwiXG4gICAgcGF0aDogU3RyaW5nIVxuICAgIFwiQ2hhbmdlIHR5cGU6IGNyZWF0ZSwgdXBsb2FkLCBkb3dubG9hZCwgZGVsZXRlLCBtb2RpZnlcIlxuICAgIGluc3RydWN0aW9uOiBTdHJpbmchXG4gICAgXCJGaWxlIHNpemUgaW4gYnl0ZXNcIlxuICAgIHNpemU6IEludFxuICAgIFwiRmlsZSB0eXBlOiAtIChmaWxlKSBvciBkIChkaXJlY3RvcnkpXCJcbiAgICB0eXBlOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgR2V0U2l0ZUNoYW5nZXNSZXN1bHQge1xuICAgIFwiV2hldGhlciB0aGUgcXVlcnkgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJTaXRlIG5hbWVcIlxuICAgIHNpdGVOYW1lOiBTdHJpbmdcbiAgICBcIkRpcmVjdGlvbiBvZiBjb21wYXJpc29uXCJcbiAgICBkaXJlY3Rpb246IFN0cmluZ1xuICAgIFwiRmlsZXMgdGhhdCB3b3VsZCBiZSBhZGRlZC91cGxvYWRlZFwiXG4gICAgYWRkZWQ6IFtGaWxlQ2hhbmdlIV1cbiAgICBcIkZpbGVzIHRoYXQgd291bGQgYmUgbW9kaWZpZWRcIlxuICAgIG1vZGlmaWVkOiBbRmlsZUNoYW5nZSFdXG4gICAgXCJGaWxlcyB0aGF0IHdvdWxkIGJlIGRlbGV0ZWRcIlxuICAgIGRlbGV0ZWQ6IFtGaWxlQ2hhbmdlIV1cbiAgICBcIlRvdGFsIG51bWJlciBvZiBjaGFuZ2VzXCJcbiAgICB0b3RhbENoYW5nZXM6IEludFxuICAgIFwiU3VtbWFyeSBtZXNzYWdlXCJcbiAgICBtZXNzYWdlOiBTdHJpbmdcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICAjIFBoYXNlIDEwOiBDbG91ZCBCYWNrdXAgVHlwZXNcbiAgdHlwZSBCYWNrdXBQcm92aWRlclN0YXR1cyB7XG4gICAgXCJXaGV0aGVyIGF1dGhlbnRpY2F0ZWQgd2l0aCBwcm92aWRlclwiXG4gICAgYXV0aGVudGljYXRlZDogQm9vbGVhbiFcbiAgICBcIkFjY291bnQgSURcIlxuICAgIGFjY291bnRJZDogU3RyaW5nXG4gICAgXCJBY2NvdW50IGVtYWlsXCJcbiAgICBlbWFpbDogU3RyaW5nXG4gIH1cblxuICB0eXBlIEJhY2t1cFN0YXR1c1Jlc3VsdCB7XG4gICAgXCJXaGV0aGVyIGJhY2t1cHMgYXJlIGF2YWlsYWJsZVwiXG4gICAgYXZhaWxhYmxlOiBCb29sZWFuIVxuICAgIFwiV2hldGhlciB0aGUgZmVhdHVyZSBpcyBlbmFibGVkXCJcbiAgICBmZWF0dXJlRW5hYmxlZDogQm9vbGVhbiFcbiAgICBcIkRyb3Bib3ggYXV0aGVudGljYXRpb24gc3RhdHVzXCJcbiAgICBkcm9wYm94OiBCYWNrdXBQcm92aWRlclN0YXR1c1xuICAgIFwiR29vZ2xlIERyaXZlIGF1dGhlbnRpY2F0aW9uIHN0YXR1c1wiXG4gICAgZ29vZ2xlRHJpdmU6IEJhY2t1cFByb3ZpZGVyU3RhdHVzXG4gICAgXCJNZXNzYWdlIGlmIGJhY2t1cHMgdW5hdmFpbGFibGVcIlxuICAgIG1lc3NhZ2U6IFN0cmluZ1xuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgQmFja3VwTWV0YWRhdGEge1xuICAgIFwiU25hcHNob3QgSURcIlxuICAgIHNuYXBzaG90SWQ6IFN0cmluZyFcbiAgICBcIkJhY2t1cCB0aW1lc3RhbXAgKElTTyBmb3JtYXQpXCJcbiAgICB0aW1lc3RhbXA6IFN0cmluZ1xuICAgIFwiQmFja3VwIG5vdGUvZGVzY3JpcHRpb25cIlxuICAgIG5vdGU6IFN0cmluZ1xuICAgIFwiU2l0ZSBkb21haW5cIlxuICAgIHNpdGVEb21haW46IFN0cmluZ1xuICAgIFwiU2VydmljZXMgaW5mbyAoSlNPTilcIlxuICAgIHNlcnZpY2VzOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgTGlzdEJhY2t1cHNSZXN1bHQge1xuICAgIFwiV2hldGhlciBxdWVyeSB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIlNpdGUgbmFtZVwiXG4gICAgc2l0ZU5hbWU6IFN0cmluZ1xuICAgIFwiQmFja3VwIHByb3ZpZGVyXCJcbiAgICBwcm92aWRlcjogU3RyaW5nXG4gICAgXCJMaXN0IG9mIGJhY2t1cHNcIlxuICAgIGJhY2t1cHM6IFtCYWNrdXBNZXRhZGF0YSFdXG4gICAgXCJOdW1iZXIgb2YgYmFja3Vwc1wiXG4gICAgY291bnQ6IEludFxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgQ3JlYXRlQmFja3VwUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgYmFja3VwIHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseVwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIlNuYXBzaG90IElEXCJcbiAgICBzbmFwc2hvdElkOiBTdHJpbmdcbiAgICBcIkJhY2t1cCB0aW1lc3RhbXBcIlxuICAgIHRpbWVzdGFtcDogU3RyaW5nXG4gICAgXCJTdGF0dXMgbWVzc2FnZVwiXG4gICAgbWVzc2FnZTogU3RyaW5nXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBSZXN0b3JlQmFja3VwUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgcmVzdG9yZSB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIlN0YXR1cyBtZXNzYWdlXCJcbiAgICBtZXNzYWdlOiBTdHJpbmdcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICB0eXBlIERlbGV0ZUJhY2t1cFJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIGRlbGV0aW9uIHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRGVsZXRlZCBzbmFwc2hvdCBJRFwiXG4gICAgZGVsZXRlZFNuYXBzaG90SWQ6IFN0cmluZ1xuICAgIFwiU3RhdHVzIG1lc3NhZ2VcIlxuICAgIG1lc3NhZ2U6IFN0cmluZ1xuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgRG93bmxvYWRCYWNrdXBSZXN1bHQge1xuICAgIFwiV2hldGhlciBkb3dubG9hZCB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIlBhdGggdG8gZG93bmxvYWRlZCBmaWxlXCJcbiAgICBmaWxlUGF0aDogU3RyaW5nXG4gICAgXCJTdGF0dXMgbWVzc2FnZVwiXG4gICAgbWVzc2FnZTogU3RyaW5nXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBFZGl0QmFja3VwTm90ZVJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIGVkaXQgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJVcGRhdGVkIHNuYXBzaG90IElEXCJcbiAgICBzbmFwc2hvdElkOiBTdHJpbmdcbiAgICBcIlVwZGF0ZWQgbm90ZVwiXG4gICAgbm90ZTogU3RyaW5nXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICB9XG5cbiAgZXh0ZW5kIHR5cGUgUXVlcnkge1xuICAgICMgUGhhc2UgMTA6IENsb3VkIEJhY2t1cHNcbiAgICBcIkNoZWNrIGlmIGNsb3VkIGJhY2t1cHMgYXJlIGF2YWlsYWJsZSBhbmQgYXV0aGVudGljYXRlZFwiXG4gICAgYmFja3VwU3RhdHVzOiBCYWNrdXBTdGF0dXNSZXN1bHQhXG5cbiAgICBcIkxpc3QgYWxsIGJhY2t1cHMgZm9yIGEgc2l0ZVwiXG4gICAgbGlzdEJhY2t1cHMoc2l0ZUlkOiBJRCEsIHByb3ZpZGVyOiBTdHJpbmchKTogTGlzdEJhY2t1cHNSZXN1bHQhXG5cbiAgICAjIFBoYXNlIDExYzogU3luYyBPcGVyYXRpb25zXG4gICAgXCJHZXQgc3luYyBoaXN0b3J5IGZvciBhIGxvY2FsIHNpdGVcIlxuICAgIGdldFN5bmNIaXN0b3J5KHNpdGVJZDogSUQhLCBsaW1pdDogSW50KTogR2V0U3luY0hpc3RvcnlSZXN1bHQhXG5cbiAgICBcIkdldCBmaWxlIGNoYW5nZXMgYmV0d2VlbiBsb2NhbCBzaXRlIGFuZCBXUCBFbmdpbmUgKGRyeS1ydW4gY29tcGFyaXNvbilcIlxuICAgIGdldFNpdGVDaGFuZ2VzKHNpdGVJZDogSUQhLCBkaXJlY3Rpb246IFN0cmluZyA9IFwicHVzaFwiKTogR2V0U2l0ZUNoYW5nZXNSZXN1bHQhXG4gIH1cblxuICBleHRlbmQgdHlwZSBNdXRhdGlvbiB7XG4gICAgIyBQaGFzZSAxMDogQ2xvdWQgQmFja3Vwc1xuICAgIFwiQ3JlYXRlIGEgYmFja3VwIG9mIGEgc2l0ZSB0byBjbG91ZCBzdG9yYWdlXCJcbiAgICBjcmVhdGVCYWNrdXAoc2l0ZUlkOiBJRCEsIHByb3ZpZGVyOiBTdHJpbmchLCBub3RlOiBTdHJpbmcpOiBDcmVhdGVCYWNrdXBSZXN1bHQhXG5cbiAgICBcIlJlc3RvcmUgYSBzaXRlIGZyb20gYSBjbG91ZCBiYWNrdXBcIlxuICAgIHJlc3RvcmVCYWNrdXAoXG4gICAgICBzaXRlSWQ6IElEIVxuICAgICAgcHJvdmlkZXI6IFN0cmluZyFcbiAgICAgIHNuYXBzaG90SWQ6IFN0cmluZyFcbiAgICAgIGNvbmZpcm06IEJvb2xlYW4gPSBmYWxzZVxuICAgICk6IFJlc3RvcmVCYWNrdXBSZXN1bHQhXG5cbiAgICBcIkRlbGV0ZSBhIGJhY2t1cCBmcm9tIGNsb3VkIHN0b3JhZ2VcIlxuICAgIGRlbGV0ZUJhY2t1cChcbiAgICAgIHNpdGVJZDogSUQhXG4gICAgICBwcm92aWRlcjogU3RyaW5nIVxuICAgICAgc25hcHNob3RJZDogU3RyaW5nIVxuICAgICAgY29uZmlybTogQm9vbGVhbiA9IGZhbHNlXG4gICAgKTogRGVsZXRlQmFja3VwUmVzdWx0IVxuXG4gICAgXCJEb3dubG9hZCBhIGJhY2t1cCBhcyBhIFpJUCBmaWxlXCJcbiAgICBkb3dubG9hZEJhY2t1cChzaXRlSWQ6IElEISwgcHJvdmlkZXI6IFN0cmluZyEsIHNuYXBzaG90SWQ6IFN0cmluZyEpOiBEb3dubG9hZEJhY2t1cFJlc3VsdCFcblxuICAgIFwiVXBkYXRlIHRoZSBub3RlL2Rlc2NyaXB0aW9uIGZvciBhIGJhY2t1cFwiXG4gICAgZWRpdEJhY2t1cE5vdGUoXG4gICAgICBzaXRlSWQ6IElEIVxuICAgICAgcHJvdmlkZXI6IFN0cmluZyFcbiAgICAgIHNuYXBzaG90SWQ6IFN0cmluZyFcbiAgICAgIG5vdGU6IFN0cmluZyFcbiAgICApOiBFZGl0QmFja3VwTm90ZVJlc3VsdCFcblxuICAgICMgUGhhc2UgMTE6IFdQIEVuZ2luZSBDb25uZWN0XG4gICAgXCJBdXRoZW50aWNhdGUgd2l0aCBXUCBFbmdpbmUgKG9wZW5zIGJyb3dzZXIgZm9yIE9BdXRoKVwiXG4gICAgd3BlQXV0aGVudGljYXRlOiBXcGVBdXRoUmVzdWx0IVxuXG4gICAgXCJMb2dvdXQgZnJvbSBXUCBFbmdpbmVcIlxuICAgIHdwZUxvZ291dDogV3BlTG9nb3V0UmVzdWx0IVxuXG4gICAgIyBQaGFzZSAxMWM6IFN5bmMgT3BlcmF0aW9uc1xuICAgIFwiUHVzaCBsb2NhbCBzaXRlIHRvIFdQIEVuZ2luZVwiXG4gICAgcHVzaFRvV3BlKFxuICAgICAgbG9jYWxTaXRlSWQ6IElEIVxuICAgICAgcmVtb3RlSW5zdGFsbElkOiBJRCFcbiAgICAgIGluY2x1ZGVTcWw6IEJvb2xlYW4gPSBmYWxzZVxuICAgICAgY29uZmlybTogQm9vbGVhbiA9IGZhbHNlXG4gICAgKTogU3luY1Jlc3VsdCFcblxuICAgIFwiUHVsbCBmcm9tIFdQIEVuZ2luZSB0byBsb2NhbCBzaXRlXCJcbiAgICBwdWxsRnJvbVdwZShsb2NhbFNpdGVJZDogSUQhLCByZW1vdGVJbnN0YWxsSWQ6IElEISwgaW5jbHVkZVNxbDogQm9vbGVhbiA9IGZhbHNlKTogU3luY1Jlc3VsdCFcbiAgfVxuYDtcblxuLyoqXG4gKiBDcmVhdGUgR3JhcGhRTCByZXNvbHZlcnMgdGhhdCB1c2UgTG9jYWwncyBpbnRlcm5hbCBzZXJ2aWNlc1xuICovXG5mdW5jdGlvbiBjcmVhdGVSZXNvbHZlcnMoc2VydmljZXM6IGFueSkge1xuICBjb25zdCB7XG4gICAgZGVsZXRlU2l0ZTogZGVsZXRlU2l0ZVNlcnZpY2UsXG4gICAgc2l0ZURhdGEsXG4gICAgbG9jYWxMb2dnZXIsXG4gICAgd3BDbGksXG4gICAgc2l0ZVByb2Nlc3NNYW5hZ2VyLFxuICAgIGFkZFNpdGU6IGFkZFNpdGVTZXJ2aWNlLFxuICAgIGNsb25lU2l0ZTogY2xvbmVTaXRlU2VydmljZSxcbiAgICBleHBvcnRTaXRlOiBleHBvcnRTaXRlU2VydmljZSxcbiAgICBibHVlcHJpbnRzOiBibHVlcHJpbnRzU2VydmljZSxcbiAgICBicm93c2VyTWFuYWdlcixcbiAgICBhZG1pbmVyLFxuICAgIHg1MDlDZXJ0LFxuICAgIHNpdGVQcm92aXNpb25lcixcbiAgICBpbXBvcnRTaXRlOiBpbXBvcnRTaXRlU2VydmljZSxcbiAgICBsaWdodG5pbmdTZXJ2aWNlcyxcbiAgICBzaXRlRGF0YWJhc2UsXG4gICAgaW1wb3J0U1FMRmlsZTogaW1wb3J0U1FMRmlsZVNlcnZpY2UsXG4gICAgLy8gUGhhc2UgMTE6IFdQIEVuZ2luZSBDb25uZWN0XG4gICAgd3BlT0F1dGg6IHdwZU9BdXRoU2VydmljZSxcbiAgICBjYXBpOiBjYXBpU2VydmljZSxcbiAgICAvLyBQaGFzZSAxMWM6IFN5bmMgc2VydmljZXNcbiAgICB3cGVQdXNoOiB3cGVQdXNoU2VydmljZSxcbiAgICB3cGVQdWxsOiB3cGVQdWxsU2VydmljZSxcbiAgICBjb25uZWN0SGlzdG9yeTogY29ubmVjdEhpc3RvcnlTZXJ2aWNlLFxuICAgIHdwZUNvbm5lY3RCYXNlOiB3cGVDb25uZWN0QmFzZVNlcnZpY2UsXG4gICAgLy8gTm90ZTogUGhhc2UgMTAgQ2xvdWQgQmFja3VwIHNlcnZpY2VzIGFyZSBhY2Nlc3NlZCB2aWEgSVBDIHRvIHRoZSBDbG91ZCBCYWNrdXBzIGFkZG9uXG4gICAgLy8gKGJhY2t1cFNlcnZpY2UsIGRyb3Bib3gsIGdvb2dsZURyaXZlLCBmZWF0dXJlRmxhZ3MsIHVzZXJEYXRhKVxuICB9ID0gc2VydmljZXM7XG5cbiAgLy8gSGVscGVyIHRvIGludm9rZSBJUEMgY2FsbHMgdG8gdGhlIENsb3VkIEJhY2t1cHMgYWRkb25cbiAgLy8gVGhpcyB1c2VzIHRoZSBzYW1lIHBhdHRlcm4gYXMgdGhlIEJhY2t1cEFJQnJpZGdlXG4gIC8vIFRpbWVvdXQgY29uc3RhbnRzIGZvciBiYWNrdXAgb3BlcmF0aW9ucyAoaW4gbWlsbGlzZWNvbmRzKVxuICBjb25zdCBCQUNLVVBfSVBDX1RJTUVPVVQgPSA2MDAwMDA7IC8vIDEwIG1pbnV0ZXMgZm9yIGJhY2t1cCBvcGVyYXRpb25zXG4gIGNvbnN0IERFRkFVTFRfSVBDX1RJTUVPVVQgPSAzMDAwMDsgLy8gMzAgc2Vjb25kcyBmb3IgcXVpY2sgb3BlcmF0aW9uc1xuXG4gIGNvbnN0IGludm9rZUJhY2t1cElQQyA9IGFzeW5jIChcbiAgICBjaGFubmVsOiBzdHJpbmcsXG4gICAgdGltZW91dE1zOiBudW1iZXIgPSBCQUNLVVBfSVBDX1RJTUVPVVQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KTtcbiAgICAgIGNvbnN0IHN1Y2Nlc3NSZXBseUNoYW5uZWwgPSBgJHtjaGFubmVsfS1zdWNjZXNzLSR7dGltZXN0YW1wfS0ke3JhbmRvbX1gO1xuICAgICAgY29uc3QgZXJyb3JSZXBseUNoYW5uZWwgPSBgJHtjaGFubmVsfS1lcnJvci0ke3RpbWVzdGFtcH0tJHtyYW5kb219YDtcblxuICAgICAgY29uc3QgdGltZW91dFNlY29uZHMgPSBNYXRoLnJvdW5kKHRpbWVvdXRNcyAvIDEwMDApO1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhzdWNjZXNzUmVwbHlDaGFubmVsKTtcbiAgICAgICAgaXBjTWFpbi5yZW1vdmVBbGxMaXN0ZW5lcnMoZXJyb3JSZXBseUNoYW5uZWwpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBJUEMgY2FsbCB0byAke2NoYW5uZWx9IHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXRTZWNvbmRzfSBzZWNvbmRzYCkpO1xuICAgICAgfSwgdGltZW91dE1zKTtcblxuICAgICAgaXBjTWFpbi5vbmNlKHN1Y2Nlc3NSZXBseUNoYW5uZWwsIChfZXZlbnQ6IGFueSwgcmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhlcnJvclJlcGx5Q2hhbm5lbCk7XG4gICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBJUEMgc3VjY2VzcyBmcm9tICR7Y2hhbm5lbH1gKTtcbiAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdCB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpcGNNYWluLm9uY2UoZXJyb3JSZXBseUNoYW5uZWwsIChfZXZlbnQ6IGFueSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlwY01haW4ucmVtb3ZlQWxsTGlzdGVuZXJzKHN1Y2Nlc3NSZXBseUNoYW5uZWwpO1xuICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIElQQyBlcnJvciBmcm9tICR7Y2hhbm5lbH06ICR7ZXJyb3I/Lm1lc3NhZ2V9YCk7XG4gICAgICAgIHJlc29sdmUoeyBlcnJvciB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtb2NrRXZlbnQgPSB7XG4gICAgICAgIHJlcGx5OiAocmVwbHlDaGFubmVsOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGlwY01haW4uZW1pdChyZXBseUNoYW5uZWwsIG51bGwsIGRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICBzZW5kZXI6IHtcbiAgICAgICAgICBzZW5kOiAocmVwbHlDaGFubmVsOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgaXBjTWFpbi5lbWl0KHJlcGx5Q2hhbm5lbCwgbnVsbCwgZGF0YSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlcGx5Q2hhbm5lbHMgPSB7IHN1Y2Nlc3NSZXBseUNoYW5uZWwsIGVycm9yUmVwbHlDaGFubmVsIH07XG4gICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gSW52b2tpbmcgYmFja3VwIElQQzogJHtjaGFubmVsfWApO1xuICAgICAgaXBjTWFpbi5lbWl0KGNoYW5uZWwsIG1vY2tFdmVudCwgcmVwbHlDaGFubmVscywgLi4uYXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gSGVscGVyIHRvIGdldCBiYWNrdXAgcHJvdmlkZXJzIGZyb20gdGhlIENsb3VkIEJhY2t1cHMgYWRkb25cbiAgY29uc3QgZ2V0QmFja3VwUHJvdmlkZXJzID0gYXN5bmMgKCk6IFByb21pc2U8QXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW52b2tlQmFja3VwSVBDKCdiYWNrdXBzOmVuYWJsZWQtcHJvdmlkZXJzJywgREVGQVVMVF9JUENfVElNRU9VVCk7XG4gICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gUmF3IElQQyByZXN1bHQ6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcblxuICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihcbiAgICAgICAgICBgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBnZXQgYmFja3VwIHByb3ZpZGVyczogJHtyZXN1bHQuZXJyb3IubWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHJlc3BvbnNlIGlzIGRvdWJsZS1uZXN0ZWQ6IHJlc3VsdC5yZXN1bHQucmVzdWx0IGNvbnRhaW5zIHRoZSBhcnJheVxuICAgICAgLy8gU3RydWN0dXJlOiB7IHJlc3VsdDogeyByZXN1bHQ6IFtwcm92aWRlcnMuLi5dIH0gfVxuICAgICAgbGV0IHByb3ZpZGVyczogYW55ID0gcmVzdWx0LnJlc3VsdDtcblxuICAgICAgLy8gVW53cmFwIG5lc3RlZCByZXN1bHQgaWYgcHJlc2VudFxuICAgICAgaWYgKHByb3ZpZGVycyAmJiB0eXBlb2YgcHJvdmlkZXJzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShwcm92aWRlcnMpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3ZpZGVycy5yZXN1bHQpKSB7XG4gICAgICAgICAgcHJvdmlkZXJzID0gcHJvdmlkZXJzLnJlc3VsdDtcbiAgICAgICAgfSBlbHNlIGlmIChwcm92aWRlcnMucmVzdWx0ICYmIHR5cGVvZiBwcm92aWRlcnMucmVzdWx0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIC8vIEV2ZW4gZGVlcGVyIG5lc3RpbmdcbiAgICAgICAgICBwcm92aWRlcnMgPSBwcm92aWRlcnMucmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBFeHRyYWN0ZWQgcHJvdmlkZXJzOiAke0pTT04uc3RyaW5naWZ5KHByb3ZpZGVycyl9YCk7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3ZpZGVycykpIHtcbiAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEdvdCAke3Byb3ZpZGVycy5sZW5ndGh9IGJhY2t1cCBwcm92aWRlcnNgKTtcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVycztcbiAgICAgIH1cblxuICAgICAgbG9jYWxMb2dnZXIud2FybihcbiAgICAgICAgYFske0FERE9OX05BTUV9XSBVbmV4cGVjdGVkIHByb3ZpZGVycyBmb3JtYXQgYWZ0ZXIgdW53cmFwcGluZzogJHt0eXBlb2YgcHJvdmlkZXJzfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBFcnJvciBnZXR0aW5nIGJhY2t1cCBwcm92aWRlcnM6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH07XG5cbiAgLy8gU2hhcmVkIFdQLUNMSSBleGVjdXRpb24gbG9naWNcbiAgY29uc3QgZXhlY3V0ZVdwQ2xpID0gYXN5bmMgKFxuICAgIF9wYXJlbnQ6IGFueSxcbiAgICBhcmdzOiB7IGlucHV0OiB7IHNpdGVJZDogc3RyaW5nOyBhcmdzOiBzdHJpbmdbXTsgc2tpcFBsdWdpbnM/OiBib29sZWFuOyBza2lwVGhlbWVzPzogYm9vbGVhbiB9IH1cbiAgKSA9PiB7XG4gICAgY29uc3QgeyBzaXRlSWQsIGFyZ3M6IHdwQXJncywgc2tpcFBsdWdpbnMgPSB0cnVlLCBza2lwVGhlbWVzID0gdHJ1ZSB9ID0gYXJncy5pbnB1dDtcblxuICAgIHRyeSB7XG4gICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gUnVubmluZyBXUC1DTEk6IHdwICR7d3BBcmdzLmpvaW4oJyAnKX1gKTtcblxuICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIG91dHB1dDogbnVsbCxcbiAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBzaXRlUHJvY2Vzc01hbmFnZXIuZ2V0U2l0ZVN0YXR1cyhzaXRlKTtcbiAgICAgIGlmIChzdGF0dXMgIT09ICdydW5uaW5nJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIG91dHB1dDogbnVsbCxcbiAgICAgICAgICBlcnJvcjogYFNpdGUgXCIke3NpdGUubmFtZX1cIiBpcyBub3QgcnVubmluZy4gU3RhcnQgaXQgZmlyc3Qgd2l0aDogbG9jYWwtY2xpIHN0YXJ0ICR7c2l0ZS5uYW1lfWAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHdwQ2xpLnJ1bihzaXRlLCB3cEFyZ3MsIHtcbiAgICAgICAgc2tpcFBsdWdpbnMsXG4gICAgICAgIHNraXBUaGVtZXMsXG4gICAgICAgIGlnbm9yZUVycm9yczogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFdQLUNMSSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5YCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIG91dHB1dDogb3V0cHV0Py50cmltKCkgfHwgJycsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIFdQLUNMSSBmYWlsZWQ6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG91dHB1dDogbnVsbCxcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBRdWVyeToge1xuICAgICAgd3BDbGlRdWVyeTogZXhlY3V0ZVdwQ2xpLFxuXG4gICAgICBibHVlcHJpbnRzOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEZldGNoaW5nIGJsdWVwcmludHNgKTtcblxuICAgICAgICAgIGNvbnN0IGJsdWVwcmludHNMaXN0ID0gYXdhaXQgYmx1ZXByaW50c1NlcnZpY2UuZ2V0Qmx1ZXByaW50cygpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIGJsdWVwcmludHM6IGJsdWVwcmludHNMaXN0Lm1hcCgoYnA6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgbmFtZTogYnAubmFtZSxcbiAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBicC5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgb2JqZWN0cyAtIGV4dHJhY3QganVzdCB0aGUgbmFtZS90eXBlIHN0cmluZ1xuICAgICAgICAgICAgICBwaHBWZXJzaW9uOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBicC5waHBWZXJzaW9uID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgPyBicC5waHBWZXJzaW9uPy5uYW1lIHx8IGJwLnBocFZlcnNpb24/LnZlcnNpb25cbiAgICAgICAgICAgICAgICAgIDogYnAucGhwVmVyc2lvbixcbiAgICAgICAgICAgICAgd2ViU2VydmVyOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBicC53ZWJTZXJ2ZXIgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICA/IGJwLndlYlNlcnZlcj8ubmFtZSB8fCBicC53ZWJTZXJ2ZXI/LnR5cGVcbiAgICAgICAgICAgICAgICAgIDogYnAud2ViU2VydmVyLFxuICAgICAgICAgICAgICBkYXRhYmFzZTpcbiAgICAgICAgICAgICAgICB0eXBlb2YgYnAuZGF0YWJhc2UgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICA/IGJwLmRhdGFiYXNlPy5uYW1lIHx8IGJwLmRhdGFiYXNlPy50eXBlXG4gICAgICAgICAgICAgICAgICA6IGJwLmRhdGFiYXNlLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBmZXRjaCBibHVlcHJpbnRzOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBibHVlcHJpbnRzOiBbXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBsaXN0U2VydmljZXM6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgdHlwZT86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdHlwZSA9ICdhbGwnIH0gPSBhcmdzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIExpc3Rpbmcgc2VydmljZXMgKHR5cGU6ICR7dHlwZX0pYCk7XG5cbiAgICAgICAgICBpZiAoIWxpZ2h0bmluZ1NlcnZpY2VzKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6ICdMaWdodG5pbmcgc2VydmljZXMgbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICAgIHNlcnZpY2VzOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgcm9sZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgIHBocDogJ3BocCcsXG4gICAgICAgICAgICBkYXRhYmFzZTogJ215c3FsJyxcbiAgICAgICAgICAgIHdlYnNlcnZlcjogJ25naW54JyxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3Qgcm9sZUZpbHRlciA9IHR5cGUgIT09ICdhbGwnID8gcm9sZU1hcFt0eXBlXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCByZWdpc3RlcmVkU2VydmljZXMgPSBsaWdodG5pbmdTZXJ2aWNlcy5nZXRSZWdpc3RlcmVkU2VydmljZXMocm9sZUZpbHRlcik7XG5cbiAgICAgICAgICBjb25zdCBzZXJ2aWNlTGlzdDogQXJyYXk8eyByb2xlOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH0+ID0gW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IFtyb2xlLCB2ZXJzaW9uc10gb2YgT2JqZWN0LmVudHJpZXMocmVnaXN0ZXJlZFNlcnZpY2VzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbdmVyc2lvbiwgaW5mb10gb2YgT2JqZWN0LmVudHJpZXModmVyc2lvbnMgYXMgUmVjb3JkPHN0cmluZywgYW55PikpIHtcbiAgICAgICAgICAgICAgc2VydmljZUxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgcm9sZSxcbiAgICAgICAgICAgICAgICBuYW1lOiBpbmZvPy5uYW1lIHx8IHJvbGUsXG4gICAgICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIHNlcnZpY2VzOiBzZXJ2aWNlTGlzdCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gbGlzdCBzZXJ2aWNlczpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgc2VydmljZXM6IFtdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFBoYXNlIDExOiBXUCBFbmdpbmUgQ29ubmVjdFxuICAgICAgd3BlU3RhdHVzOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIENoZWNraW5nIFdQIEVuZ2luZSBhdXRoZW50aWNhdGlvbiBzdGF0dXNgKTtcblxuICAgICAgICAgIGlmICghd3BlT0F1dGhTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgZW1haWw6IG51bGwsXG4gICAgICAgICAgICAgIGFjY291bnRJZDogbnVsbCxcbiAgICAgICAgICAgICAgYWNjb3VudE5hbWU6IG51bGwsXG4gICAgICAgICAgICAgIHRva2VuRXhwaXJ5OiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogJ1dQIEVuZ2luZSBPQXV0aCBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIHZhbGlkIGNyZWRlbnRpYWxzIGJ5IHRyeWluZyB0byBnZXQgYWNjZXNzIHRva2VuXG4gICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCB3cGVPQXV0aFNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKTtcblxuICAgICAgICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBlbWFpbDogbnVsbCxcbiAgICAgICAgICAgICAgYWNjb3VudElkOiBudWxsLFxuICAgICAgICAgICAgICBhY2NvdW50TmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgdG9rZW5FeHBpcnk6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUcnkgdG8gZ2V0IHVzZXIgaW5mbyBmcm9tIENBUEkgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgbGV0IGVtYWlsID0gbnVsbDtcbiAgICAgICAgICBpZiAoY2FwaVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gYXdhaXQgY2FwaVNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgICAgICAgICAgZW1haWwgPSBjdXJyZW50VXNlcj8uZW1haWwgfHwgbnVsbDtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAvLyBVc2VyIGluZm8gbm90IGF2YWlsYWJsZSwgYnV0IHN0aWxsIGF1dGhlbnRpY2F0ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgYWNjb3VudElkOiBudWxsLFxuICAgICAgICAgICAgYWNjb3VudE5hbWU6IG51bGwsXG4gICAgICAgICAgICB0b2tlbkV4cGlyeTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBjaGVjayBXUEUgc3RhdHVzOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBlbWFpbDogbnVsbCxcbiAgICAgICAgICAgIGFjY291bnRJZDogbnVsbCxcbiAgICAgICAgICAgIGFjY291bnROYW1lOiBudWxsLFxuICAgICAgICAgICAgdG9rZW5FeHBpcnk6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgbGlzdFdwZVNpdGVzOiBhc3luYyAoX3BhcmVudDogYW55LCBhcmdzOiB7IGFjY291bnRJZD86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWNjb3VudElkIH0gPSBhcmdzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gTGlzdGluZyBXUCBFbmdpbmUgc2l0ZXMke2FjY291bnRJZCA/IGAgZm9yIGFjY291bnQgJHthY2NvdW50SWR9YCA6ICcnfWBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCF3cGVPQXV0aFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogJ1dQIEVuZ2luZSBPQXV0aCBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnLFxuICAgICAgICAgICAgICBzaXRlczogW10sXG4gICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBhdXRoZW50aWNhdGVkIGJ5IHRyeWluZyB0byBnZXQgYWNjZXNzIHRva2VuXG4gICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCB3cGVPQXV0aFNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6ICdOb3QgYXV0aGVudGljYXRlZCB3aXRoIFdQIEVuZ2luZS4gVXNlIHdwZV9hdXRoZW50aWNhdGUgZmlyc3QuJyxcbiAgICAgICAgICAgICAgc2l0ZXM6IFtdLFxuICAgICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFjYXBpU2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiAnV1AgRW5naW5lIENBUEkgc2VydmljZSBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgc2l0ZXM6IFtdLFxuICAgICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IGluc3RhbGxzIGZyb20gQ0FQSSB1c2luZyBnZXRJbnN0YWxsTGlzdFxuICAgICAgICAgIGNvbnN0IGluc3RhbGxzID0gYXdhaXQgY2FwaVNlcnZpY2UuZ2V0SW5zdGFsbExpc3QoKTtcblxuICAgICAgICAgIGlmICghaW5zdGFsbHMpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICBzaXRlczogW10sXG4gICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzaXRlcyA9IGluc3RhbGxzLm1hcCgoaW5zdGFsbDogYW55KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGluc3RhbGwuaWQsXG4gICAgICAgICAgICBuYW1lOiBpbnN0YWxsLm5hbWUsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogaW5zdGFsbC5lbnZpcm9ubWVudCB8fCAncHJvZHVjdGlvbicsXG4gICAgICAgICAgICBwaHBWZXJzaW9uOiBpbnN0YWxsLnBocFZlcnNpb24gfHwgbnVsbCxcbiAgICAgICAgICAgIHByaW1hcnlEb21haW46IGluc3RhbGwucHJpbWFyeURvbWFpbiB8fCBpbnN0YWxsLmNuYW1lIHx8IG51bGwsXG4gICAgICAgICAgICBhY2NvdW50SWQ6IGluc3RhbGwuYWNjb3VudElkIHx8IGFjY291bnRJZCB8fCBudWxsLFxuICAgICAgICAgICAgYWNjb3VudE5hbWU6IGluc3RhbGwuYWNjb3VudE5hbWUgfHwgbnVsbCxcbiAgICAgICAgICAgIHNmdHBIb3N0OiBgJHtpbnN0YWxsLm5hbWV9LnNzaC53cGVuZ2luZS5uZXRgLFxuICAgICAgICAgICAgc2Z0cFVzZXI6IGluc3RhbGwubmFtZSxcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgc2l0ZXMsXG4gICAgICAgICAgICBjb3VudDogc2l0ZXMubGVuZ3RoLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBsaXN0IFdQRSBzaXRlczpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgc2l0ZXM6IFtdLFxuICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gUGhhc2UgMTFiOiBTaXRlIExpbmtpbmdcbiAgICAgIGdldFdwZUxpbms6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgc2l0ZUlkOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCB9ID0gYXJncztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBHZXR0aW5nIFdQIEVuZ2luZSBsaW5rIGZvciBzaXRlICR7c2l0ZUlkfWApO1xuXG4gICAgICAgICAgLy8gR2V0IHNpdGUgZnJvbSBzaXRlRGF0YVxuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBsaW5rZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgY29ubmVjdGlvbnM6IFtdLFxuICAgICAgICAgICAgICBjb25uZWN0aW9uQ291bnQ6IDAsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdldCBob3N0Q29ubmVjdGlvbnMgZnJvbSBzaXRlXG4gICAgICAgICAgY29uc3QgaG9zdENvbm5lY3Rpb25zID0gc2l0ZS5ob3N0Q29ubmVjdGlvbnMgfHwgW107XG4gICAgICAgICAgY29uc3Qgd3BlQ29ubmVjdGlvbnMgPSBob3N0Q29ubmVjdGlvbnMuZmlsdGVyKChjOiBhbnkpID0+IGMuaG9zdElkID09PSAnd3BlJyk7XG5cbiAgICAgICAgICBpZiAod3BlQ29ubmVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBsaW5rZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogc2l0ZS5uYW1lLFxuICAgICAgICAgICAgICBjb25uZWN0aW9uczogW10sXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25Db3VudDogMCxcbiAgICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgICAnU2l0ZSBpcyBub3QgbGlua2VkIHRvIGFueSBXUCBFbmdpbmUgZW52aXJvbm1lbnQuIFVzZSBDb25uZWN0IGluIExvY2FsIHRvIHB1bGwgYSBzaXRlIGZyb20gV1BFLicsXG4gICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUcmFuc2Zvcm0gY29ubmVjdGlvbnMgZm9yIG91dHB1dCwgZW5yaWNoaW5nIHdpdGggQ0FQSSBkYXRhIGlmIGF2YWlsYWJsZVxuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICB3cGVDb25uZWN0aW9ucy5tYXAoYXN5bmMgKGM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgaW5zdGFsbE5hbWUgPSBjLnJlbW90ZVNpdGVJZDsgLy8gRGVmYXVsdCB0byBVVUlEXG4gICAgICAgICAgICAgIGxldCBwb3J0YWxVcmwgPSBudWxsO1xuICAgICAgICAgICAgICBsZXQgcHJpbWFyeURvbWFpbiA9IG51bGw7XG5cbiAgICAgICAgICAgICAgLy8gVHJ5IHRvIGdldCBpbnN0YWxsIGRldGFpbHMgZnJvbSBDQVBJIHRvIGdldCB0aGUgYWN0dWFsIG5hbWVcbiAgICAgICAgICAgICAgLy8gcmVtb3RlU2l0ZUlkIG1hdGNoZXMgaW5zdGFsbC5zaXRlLmlkIChXUEUgU2l0ZSBJRCksIG5vdCBpbnN0YWxsLmlkXG4gICAgICAgICAgICAgIGlmIChjYXBpU2VydmljZSAmJiB0eXBlb2YgY2FwaVNlcnZpY2UuZ2V0SW5zdGFsbExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBMb29raW5nIGZvciBpbnN0YWxsIHdpdGggc2l0ZS5pZD0ke2MucmVtb3RlU2l0ZUlkfSwgZW52PSR7Yy5yZW1vdGVTaXRlRW52fWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpbnN0YWxscyA9IGF3YWl0IGNhcGlTZXJ2aWNlLmdldEluc3RhbGxMaXN0KCk7XG4gICAgICAgICAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIEdvdCAke2luc3RhbGxzPy5sZW5ndGggfHwgMH0gaW5zdGFsbHMgZnJvbSBDQVBJYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChpbnN0YWxscyAmJiBpbnN0YWxscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIExvZyBmaXJzdCBpbnN0YWxsIHN0cnVjdHVyZSBmb3IgZGVidWdnaW5nXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBTYW1wbGUgaW5zdGFsbCBzdHJ1Y3R1cmU6ICR7SlNPTi5zdHJpbmdpZnkoaW5zdGFsbHNbMF0sIG51bGwsIDIpfWBcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBNYXRjaCBieSBzaXRlLmlkIChyZW1vdGVTaXRlSWQgaXMgdGhlIFdQRSBTaXRlIElELCBub3QgSW5zdGFsbCBJRClcbiAgICAgICAgICAgICAgICAgICAgLy8gQWxzbyBmaWx0ZXIgYnkgZW52aXJvbm1lbnQgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nSW5zdGFsbCA9IGluc3RhbGxzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgKGk6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGkuc2l0ZT8uaWQgPT09IGMucmVtb3RlU2l0ZUlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoIWMucmVtb3RlU2l0ZUVudiB8fCBpLmVudmlyb25tZW50ID09PSBjLnJlbW90ZVNpdGVFbnYpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nSW5zdGFsbCkge1xuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBGb3VuZCBtYXRjaDogJHttYXRjaGluZ0luc3RhbGwubmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsTmFtZSA9IG1hdGNoaW5nSW5zdGFsbC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgIHBvcnRhbFVybCA9IGBodHRwczovL215LndwZW5naW5lLmNvbS9pbnN0YWxscy8ke21hdGNoaW5nSW5zdGFsbC5uYW1lfWA7XG4gICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeURvbWFpbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGluZ0luc3RhbGwucHJpbWFyeV9kb21haW4gfHwgbWF0Y2hpbmdJbnN0YWxsLmNuYW1lIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWxMb2dnZXIud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gTm8gbWF0Y2hpbmcgaW5zdGFsbCBmb3VuZCBmb3Igc2l0ZS5pZD0ke2MucmVtb3RlU2l0ZUlkfWBcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgICBsb2NhbExvZ2dlci53YXJuKFxuICAgICAgICAgICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIENvdWxkIG5vdCBsb29rIHVwIGluc3RhbGwgZnJvbSBDQVBJOiAke2UubWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2NhbExvZ2dlci53YXJuKGBbJHtBRERPTl9OQU1FfV0gY2FwaVNlcnZpY2Ugb3IgZ2V0SW5zdGFsbExpc3Qgbm90IGF2YWlsYWJsZWApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZW1vdGVJbnN0YWxsSWQ6IGMucmVtb3RlU2l0ZUlkLFxuICAgICAgICAgICAgICAgIGluc3RhbGxOYW1lLFxuICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBjLnJlbW90ZVNpdGVFbnYgfHwgbnVsbCxcbiAgICAgICAgICAgICAgICBhY2NvdW50SWQ6IGMuYWNjb3VudElkIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgcG9ydGFsVXJsLFxuICAgICAgICAgICAgICAgIHByaW1hcnlEb21haW4sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBDYXBhYmlsaXRpZXMgYXJlIGFsd2F5cyB0aGUgc2FtZSBmb3IgV1BFLWNvbm5lY3RlZCBzaXRlc1xuICAgICAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IHtcbiAgICAgICAgICAgIGNhblB1c2g6IHRydWUsXG4gICAgICAgICAgICBjYW5QdWxsOiB0cnVlLFxuICAgICAgICAgICAgc3luY01vZGVzOiBbJ2FsbF9maWxlcycsICdzZWxlY3RfZmlsZXMnLCAnZGF0YWJhc2Vfb25seSddLFxuICAgICAgICAgICAgbWFnaWNTeW5jQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZGF0YWJhc2VTeW5jQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGlua2VkOiB0cnVlLFxuICAgICAgICAgICAgc2l0ZU5hbWU6IHNpdGUubmFtZSxcbiAgICAgICAgICAgIGNvbm5lY3Rpb25zLFxuICAgICAgICAgICAgY29ubmVjdGlvbkNvdW50OiBjb25uZWN0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGdldCBXUEUgbGluazpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmtlZDogZmFsc2UsXG4gICAgICAgICAgICBzaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgIGNvbm5lY3Rpb25zOiBbXSxcbiAgICAgICAgICAgIGNvbm5lY3Rpb25Db3VudDogMCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gUGhhc2UgMTA6IENsb3VkIEJhY2t1cHNcbiAgICAgIGJhY2t1cFN0YXR1czogYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBDaGVja2luZyBiYWNrdXAgc3RhdHVzYCk7XG5cbiAgICAgICAgICAvLyBHZXQgcHJvdmlkZXJzIGZyb20gQ2xvdWQgQmFja3VwcyBhZGRvbiB2aWEgSVBDXG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJzID0gYXdhaXQgZ2V0QmFja3VwUHJvdmlkZXJzKCk7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEdvdCAke3Byb3ZpZGVycy5sZW5ndGh9IGJhY2t1cCBwcm92aWRlcnNgKTtcblxuICAgICAgICAgIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBhdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBmZWF0dXJlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICAgIGRyb3Bib3g6IG51bGwsXG4gICAgICAgICAgICAgIGdvb2dsZURyaXZlOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgICdObyBjbG91ZCBzdG9yYWdlIHByb3ZpZGVycyBjb25maWd1cmVkLiBDb25uZWN0IEdvb2dsZSBEcml2ZSBvciBEcm9wYm94IGluIExvY2FsIEh1YiAoaHViLmxvY2Fsd3AuY29tL2FkZG9ucy9jbG91ZC1iYWNrdXBzKS4nLFxuICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWFwIHByb3ZpZGVyIGluZm8gdG8gb3VyIHJlc3BvbnNlIGZvcm1hdFxuICAgICAgICAgIGNvbnN0IGRyb3Bib3hQcm92aWRlciA9IHByb3ZpZGVycy5maW5kKFxuICAgICAgICAgICAgKHA6IGFueSkgPT4gcC5pZCA9PT0gJ2Ryb3Bib3gnIHx8IHAubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZHJvcGJveCcpXG4gICAgICAgICAgKSBhcyBhbnk7XG4gICAgICAgICAgY29uc3QgZ29vZ2xlUHJvdmlkZXIgPSBwcm92aWRlcnMuZmluZChcbiAgICAgICAgICAgIChwOiBhbnkpID0+IHAuaWQgPT09ICdnb29nbGUnIHx8IHAubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZ29vZ2xlJylcbiAgICAgICAgICApIGFzIGFueTtcblxuICAgICAgICAgIGNvbnN0IGRyb3Bib3hTdGF0dXMgPSBkcm9wYm94UHJvdmlkZXJcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgYWNjb3VudElkOiBkcm9wYm94UHJvdmlkZXIuaWQsXG4gICAgICAgICAgICAgICAgZW1haWw6IGRyb3Bib3hQcm92aWRlci5lbWFpbCB8fCBudWxsLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhY2NvdW50SWQ6IG51bGwgYXMgc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgICAgICAgICBlbWFpbDogbnVsbCBhcyBzdHJpbmcgfCBudWxsLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgZ29vZ2xlRHJpdmVTdGF0dXMgPSBnb29nbGVQcm92aWRlclxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhY2NvdW50SWQ6IGdvb2dsZVByb3ZpZGVyLmlkLFxuICAgICAgICAgICAgICAgIGVtYWlsOiBnb29nbGVQcm92aWRlci5lbWFpbCB8fCBudWxsLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhY2NvdW50SWQ6IG51bGwgYXMgc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgICAgICAgICBlbWFpbDogbnVsbCBhcyBzdHJpbmcgfCBudWxsLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgaGFzUHJvdmlkZXIgPSBwcm92aWRlcnMubGVuZ3RoID4gMDtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdmFpbGFibGU6IGhhc1Byb3ZpZGVyLFxuICAgICAgICAgICAgZmVhdHVyZUVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBkcm9wYm94OiBkcm9wYm94U3RhdHVzLFxuICAgICAgICAgICAgZ29vZ2xlRHJpdmU6IGdvb2dsZURyaXZlU3RhdHVzLFxuICAgICAgICAgICAgbWVzc2FnZTogaGFzUHJvdmlkZXJcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogJ05vIGNsb3VkIHN0b3JhZ2UgcHJvdmlkZXIgYXV0aGVudGljYXRlZC4gQ29ubmVjdCBEcm9wYm94IG9yIEdvb2dsZSBEcml2ZSBpbiBMb2NhbCBzZXR0aW5ncy4nLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGNoZWNrIGJhY2t1cCBzdGF0dXM6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZmVhdHVyZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZHJvcGJveDogbnVsbCxcbiAgICAgICAgICAgIGdvb2dsZURyaXZlOiBudWxsLFxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBsaXN0QmFja3VwczogYXN5bmMgKF9wYXJlbnQ6IGFueSwgYXJnczogeyBzaXRlSWQ6IHN0cmluZzsgcHJvdmlkZXI6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBwcm92aWRlciB9ID0gYXJncztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBMaXN0aW5nIGJhY2t1cHMgZm9yIHNpdGUgJHtzaXRlSWR9IGZyb20gJHtwcm92aWRlcn1gKTtcblxuICAgICAgICAgIC8vIEdldCBzaXRlXG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICAgIGJhY2t1cHM6IFtdLFxuICAgICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IHByb3ZpZGVycyBmcm9tIENsb3VkIEJhY2t1cHMgYWRkb25cbiAgICAgICAgICBjb25zdCBwcm92aWRlcnMgPSBhd2FpdCBnZXRCYWNrdXBQcm92aWRlcnMoKTtcbiAgICAgICAgICBpZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIHNpdGVOYW1lOiBzaXRlLm5hbWUsXG4gICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICBiYWNrdXBzOiBbXSxcbiAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICdObyBjbG91ZCBzdG9yYWdlIHByb3ZpZGVycyBjb25maWd1cmVkLiBDb25uZWN0IEdvb2dsZSBEcml2ZSBvciBEcm9wYm94IGluIExvY2FsIEh1Yi4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGaW5kIHRoZSBtYXRjaGluZyBwcm92aWRlciAobWFwICdnb29nbGVEcml2ZScgdG8gJ2dvb2dsZScgZm9yIHRoZSBhZGRvbilcbiAgICAgICAgICBjb25zdCBwcm92aWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgZ29vZ2xlRHJpdmU6ICdnb29nbGUnLCBkcm9wYm94OiAnZHJvcGJveCcgfTtcbiAgICAgICAgICBjb25zdCBwcm92aWRlcklkID0gcHJvdmlkZXJNYXBbcHJvdmlkZXJdIHx8IHByb3ZpZGVyO1xuICAgICAgICAgIGNvbnN0IG1hdGNoZWRQcm92aWRlciA9IHByb3ZpZGVycy5maW5kKChwOiBhbnkpID0+IHAuaWQgPT09IHByb3ZpZGVySWQpO1xuXG4gICAgICAgICAgaWYgKCFtYXRjaGVkUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogc2l0ZS5uYW1lLFxuICAgICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgICAgYmFja3VwczogW10sXG4gICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICBlcnJvcjogYFByb3ZpZGVyICcke3Byb3ZpZGVyfScgbm90IGNvbmZpZ3VyZWQuIEF2YWlsYWJsZTogJHtwcm92aWRlcnMubWFwKChwOiBhbnkpID0+IHAubmFtZSkuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGb3IgbGlzdGluZyBzbmFwc2hvdHMsIHVzZSB0aGUgSHViIHByb3ZpZGVyIElEIGRpcmVjdGx5IChlLmcuLCAnZ29vZ2xlJylcbiAgICAgICAgICAvLyBOT1QgdGhlIHJjbG9uZSBiYWNrZW5kIG5hbWUgKCdkcml2ZScpIC0gdGhlIEh1YiBxdWVyaWVzIGV4cGVjdCB0aGUgT0F1dGggcHJvdmlkZXIgbmFtZVxuICAgICAgICAgIC8vIEFsc28gcGFzcyBwYWdlT2Zmc2V0IHBhcmFtZXRlciAoMCBmb3IgZmlyc3QgcGFnZSlcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnZva2VCYWNrdXBJUEMoXG4gICAgICAgICAgICAnYmFja3Vwczpwcm92aWRlci1zbmFwc2hvdHMnLFxuICAgICAgICAgICAgREVGQVVMVF9JUENfVElNRU9VVCxcbiAgICAgICAgICAgIHNpdGVJZCxcbiAgICAgICAgICAgIG1hdGNoZWRQcm92aWRlci5pZCxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIFByb3ZpZGVyIHNuYXBzaG90cyByYXcgcmVzdWx0OiAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2l0ZU5hbWU6IHNpdGUubmFtZSxcbiAgICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICAgIGJhY2t1cHM6IFtdLFxuICAgICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgICAgZXJyb3I6IHJlc3VsdC5lcnJvci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBiYWNrdXBzJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVW53cmFwIG5lc3RlZCByZXN1bHQgc3RydWN0dXJlIChzaW1pbGFyIHRvIHByb3ZpZGVycylcbiAgICAgICAgICBsZXQgYmFja3Vwc0RhdGEgPSByZXN1bHQucmVzdWx0O1xuICAgICAgICAgIGlmIChiYWNrdXBzRGF0YSAmJiB0eXBlb2YgYmFja3Vwc0RhdGEgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGJhY2t1cHNEYXRhKSkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG5lc3RlZCByZXN1bHQgb3Igc25hcHNob3RzIGFycmF5XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShiYWNrdXBzRGF0YS5yZXN1bHQpKSB7XG4gICAgICAgICAgICAgIGJhY2t1cHNEYXRhID0gYmFja3Vwc0RhdGEucmVzdWx0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJhY2t1cHNEYXRhLnNuYXBzaG90cykpIHtcbiAgICAgICAgICAgICAgYmFja3Vwc0RhdGEgPSBiYWNrdXBzRGF0YS5zbmFwc2hvdHM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJhY2t1cHNEYXRhLnJlc3VsdCAmJiBBcnJheS5pc0FycmF5KGJhY2t1cHNEYXRhLnJlc3VsdC5zbmFwc2hvdHMpKSB7XG4gICAgICAgICAgICAgIGJhY2t1cHNEYXRhID0gYmFja3Vwc0RhdGEucmVzdWx0LnNuYXBzaG90cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBiYWNrdXBzID0gQXJyYXkuaXNBcnJheShiYWNrdXBzRGF0YSkgPyBiYWNrdXBzRGF0YSA6IFtdO1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBFeHRyYWN0ZWQgJHtiYWNrdXBzLmxlbmd0aH0gYmFja3Vwc2ApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBzaXRlTmFtZTogc2l0ZS5uYW1lLFxuICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICBiYWNrdXBzOiBiYWNrdXBzLm1hcCgoYjogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAvLyBVc2UgaGFzaCBmb3Igc25hcHNob3RJZCBhcyB0aGF0J3Mgd2hhdCByZXN0aWMgdXNlcyBmb3IgcmVzdG9yZS9kZWxldGUgb3BlcmF0aW9uc1xuICAgICAgICAgICAgICAvLyBUaGUgSHViIElEIChiLmlkKSBpcyBqdXN0IGEgZGF0YWJhc2UgaWRlbnRpZmllclxuICAgICAgICAgICAgICBzbmFwc2hvdElkOiBiLmhhc2ggfHwgYi5zbmFwc2hvdElkIHx8IGIuc2hvcnRfaWQsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogYi51cGRhdGVkQXQgfHwgYi5jcmVhdGVkQXQgfHwgYi50aW1lc3RhbXAgfHwgYi50aW1lIHx8IGIuY3JlYXRlZCxcbiAgICAgICAgICAgICAgbm90ZTpcbiAgICAgICAgICAgICAgICBiLmNvbmZpZ09iamVjdD8uZGVzY3JpcHRpb24gfHwgYi5ub3RlIHx8IGIuZGVzY3JpcHRpb24gfHwgYi50YWdzPy5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgc2l0ZURvbWFpbjogYi5jb25maWdPYmplY3Q/Lm5hbWVcbiAgICAgICAgICAgICAgICA/IGAke2IuY29uZmlnT2JqZWN0Lm5hbWV9LmxvY2FsYFxuICAgICAgICAgICAgICAgIDogYi5zaXRlRG9tYWluIHx8IHNpdGUuZG9tYWluLFxuICAgICAgICAgICAgICBzZXJ2aWNlczogSlNPTi5zdHJpbmdpZnkoYi5jb25maWdPYmplY3Q/LnNlcnZpY2VzIHx8IGIuc2VydmljZXMgfHwge30pLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY291bnQ6IGJhY2t1cHMubGVuZ3RoLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGxpc3QgYmFja3VwczpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgc2l0ZU5hbWU6IG51bGwsXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIGJhY2t1cHM6IFtdLFxuICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gUGhhc2UgMTFjOiBTeW5jIEhpc3RvcnlcbiAgICAgIGdldFN5bmNIaXN0b3J5OiBhc3luYyAoX3BhcmVudDogYW55LCBhcmdzOiB7IHNpdGVJZDogc3RyaW5nOyBsaW1pdD86IG51bWJlciB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBsaW1pdCA9IDMwIH0gPSBhcmdzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEdldHRpbmcgc3luYyBoaXN0b3J5IGZvciBzaXRlICR7c2l0ZUlkfWApO1xuXG4gICAgICAgICAgLy8gR2V0IHNpdGUgdG8gdmVyaWZ5IGl0IGV4aXN0c1xuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2l0ZU5hbWU6IG51bGwsXG4gICAgICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBjb25uZWN0SGlzdG9yeSBzZXJ2aWNlIGlzIGF2YWlsYWJsZVxuICAgICAgICAgIGlmICghY29ubmVjdEhpc3RvcnlTZXJ2aWNlIHx8IHR5cGVvZiBjb25uZWN0SGlzdG9yeVNlcnZpY2UuZ2V0RXZlbnRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2l0ZU5hbWU6IHNpdGUubmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRzOiBbXSxcbiAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgIGVycm9yOiAnU3luYyBoaXN0b3J5IHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGNvbm5lY3RIaXN0b3J5U2VydmljZS5nZXRFdmVudHMoc2l0ZUlkKTtcbiAgICAgICAgICBjb25zdCBsaW1pdGVkRXZlbnRzID0gZXZlbnRzLnNsaWNlKDAsIGxpbWl0KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgc2l0ZU5hbWU6IHNpdGUubmFtZSxcbiAgICAgICAgICAgIGV2ZW50czogbGltaXRlZEV2ZW50cy5tYXAoKGU6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgcmVtb3RlSW5zdGFsbE5hbWU6IGUucmVtb3RlSW5zdGFsbE5hbWUgfHwgbnVsbCxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBlLnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IGUuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgIGRpcmVjdGlvbjogZS5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgIHN0YXR1czogZS5zdGF0dXMgfHwgbnVsbCxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNvdW50OiBsaW1pdGVkRXZlbnRzLmxlbmd0aCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBnZXQgc3luYyBoaXN0b3J5OmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBzaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBHZXQgZmlsZSBjaGFuZ2VzIGJldHdlZW4gbG9jYWwgYW5kIFdQRSAoZHJ5LXJ1biBjb21wYXJpc29uKVxuICAgICAgZ2V0U2l0ZUNoYW5nZXM6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgc2l0ZUlkOiBzdHJpbmc7IGRpcmVjdGlvbj86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBkaXJlY3Rpb24gPSAncHVzaCcgfSA9IGFyZ3M7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBHZXR0aW5nIHNpdGUgY2hhbmdlcyBmb3IgJHtzaXRlSWR9LCBkaXJlY3Rpb249JHtkaXJlY3Rpb259YFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBWYWxpZGF0ZSBkaXJlY3Rpb25cbiAgICAgICAgICBpZiAoZGlyZWN0aW9uICE9PSAncHVzaCcgJiYgZGlyZWN0aW9uICE9PSAncHVsbCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgIG1vZGlmaWVkOiBbXSxcbiAgICAgICAgICAgICAgZGVsZXRlZDogW10sXG4gICAgICAgICAgICAgIHRvdGFsQ2hhbmdlczogMCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6ICdJbnZhbGlkIGRpcmVjdGlvbi4gTXVzdCBiZSBcInB1c2hcIiBvciBcInB1bGxcIi4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZXQgc2l0ZVxuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2l0ZU5hbWU6IG51bGwsXG4gICAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICBtb2RpZmllZDogW10sXG4gICAgICAgICAgICAgIGRlbGV0ZWQ6IFtdLFxuICAgICAgICAgICAgICB0b3RhbENoYW5nZXM6IDAsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIFdQRSBjb25uZWN0aW9uXG4gICAgICAgICAgY29uc3Qgd3BlQ29ubmVjdGlvbiA9IHNpdGUuaG9zdENvbm5lY3Rpb25zPy5maW5kKChjOiBhbnkpID0+IGMuaG9zdElkID09PSAnd3BlJyk7XG4gICAgICAgICAgaWYgKCF3cGVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2l0ZU5hbWU6IHNpdGUubmFtZSxcbiAgICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgIG1vZGlmaWVkOiBbXSxcbiAgICAgICAgICAgICAgZGVsZXRlZDogW10sXG4gICAgICAgICAgICAgIHRvdGFsQ2hhbmdlczogMCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ1NpdGUgaXMgbm90IGxpbmtlZCB0byBXUCBFbmdpbmUuIFVzZSBDb25uZWN0IGluIExvY2FsIHRvIGxpbmsgdGhlIHNpdGUgZmlyc3QuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgc2VydmljZSBhdmFpbGFiaWxpdHlcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhd3BlQ29ubmVjdEJhc2VTZXJ2aWNlIHx8XG4gICAgICAgICAgICB0eXBlb2Ygd3BlQ29ubmVjdEJhc2VTZXJ2aWNlLmxpc3RNb2RpZmljYXRpb25zICE9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2l0ZU5hbWU6IHNpdGUubmFtZSxcbiAgICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgIG1vZGlmaWVkOiBbXSxcbiAgICAgICAgICAgICAgZGVsZXRlZDogW10sXG4gICAgICAgICAgICAgIHRvdGFsQ2hhbmdlczogMCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6ICdXUEUgQ29ubmVjdCBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZXQgaW5zdGFsbCBkZXRhaWxzIGZyb20gQ0FQSVxuICAgICAgICAgIGxldCBpbnN0YWxsTmFtZSA9IHdwZUNvbm5lY3Rpb24ucmVtb3RlU2l0ZUlkO1xuICAgICAgICAgIGxldCBwcmltYXJ5RG9tYWluID0gJyc7XG4gICAgICAgICAgbGV0IGluc3RhbGxJZCA9ICcnO1xuXG4gICAgICAgICAgaWYgKGNhcGlTZXJ2aWNlICYmIHR5cGVvZiBjYXBpU2VydmljZS5nZXRJbnN0YWxsTGlzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFsbHMgPSBhd2FpdCBjYXBpU2VydmljZS5nZXRJbnN0YWxsTGlzdCgpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdJbnN0YWxsID0gaW5zdGFsbHM/LmZpbmQoXG4gICAgICAgICAgICAgIChpOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgaS5zaXRlPy5pZCA9PT0gd3BlQ29ubmVjdGlvbi5yZW1vdGVTaXRlSWQgJiZcbiAgICAgICAgICAgICAgICAoIXdwZUNvbm5lY3Rpb24ucmVtb3RlU2l0ZUVudiB8fCBpLmVudmlyb25tZW50ID09PSB3cGVDb25uZWN0aW9uLnJlbW90ZVNpdGVFbnYpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nSW5zdGFsbCkge1xuICAgICAgICAgICAgICBpbnN0YWxsTmFtZSA9IG1hdGNoaW5nSW5zdGFsbC5uYW1lO1xuICAgICAgICAgICAgICBwcmltYXJ5RG9tYWluID1cbiAgICAgICAgICAgICAgICBtYXRjaGluZ0luc3RhbGwucHJpbWFyeV9kb21haW4gfHxcbiAgICAgICAgICAgICAgICBtYXRjaGluZ0luc3RhbGwuY25hbWUgfHxcbiAgICAgICAgICAgICAgICBgJHttYXRjaGluZ0luc3RhbGwubmFtZX0ud3BlbmdpbmUuY29tYDtcbiAgICAgICAgICAgICAgaW5zdGFsbElkID0gbWF0Y2hpbmdJbnN0YWxsLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghcHJpbWFyeURvbWFpbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIHNpdGVOYW1lOiBzaXRlLm5hbWUsXG4gICAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICBtb2RpZmllZDogW10sXG4gICAgICAgICAgICAgIGRlbGV0ZWQ6IFtdLFxuICAgICAgICAgICAgICB0b3RhbENoYW5nZXM6IDAsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICdDb3VsZCBub3QgZGV0ZXJtaW5lIFdQIEVuZ2luZSBpbnN0YWxsIGRldGFpbHMuIFBsZWFzZSBlbnN1cmUgeW91IGFyZSBhdXRoZW50aWNhdGVkLicsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENhbGwgbGlzdE1vZGlmaWNhdGlvbnMgKGRyeS1ydW4gcnN5bmMgY29tcGFyaXNvbilcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gQ2FsbGluZyBsaXN0TW9kaWZpY2F0aW9ucyBmb3IgJHtpbnN0YWxsTmFtZX1gKTtcbiAgICAgICAgICBjb25zdCBtb2RpZmljYXRpb25zID0gYXdhaXQgd3BlQ29ubmVjdEJhc2VTZXJ2aWNlLmxpc3RNb2RpZmljYXRpb25zKHtcbiAgICAgICAgICAgIGNvbm5lY3RBcmdzOiB7XG4gICAgICAgICAgICAgIHdwZW5naW5lSW5zdGFsbE5hbWU6IGluc3RhbGxOYW1lLFxuICAgICAgICAgICAgICB3cGVuZ2luZUluc3RhbGxJZDogaW5zdGFsbElkLFxuICAgICAgICAgICAgICB3cGVuZ2luZVNpdGVJZDogd3BlQ29ubmVjdGlvbi5yZW1vdGVTaXRlSWQsXG4gICAgICAgICAgICAgIHdwZW5naW5lUHJpbWFyeURvbWFpbjogcHJpbWFyeURvbWFpbixcbiAgICAgICAgICAgICAgbG9jYWxTaXRlSWQ6IHNpdGUuaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24gYXMgJ3B1c2gnIHwgJ3B1bGwnLFxuICAgICAgICAgICAgaW5jbHVkZUlnbm9yZWQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ2F0ZWdvcml6ZSBjaGFuZ2VzXG4gICAgICAgICAgY29uc3QgYWRkZWQgPSBtb2RpZmljYXRpb25zXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAoZjogYW55KSA9PlxuICAgICAgICAgICAgICAgIGYuaW5zdHJ1Y3Rpb24gPT09ICdjcmVhdGUnIHx8XG4gICAgICAgICAgICAgICAgZi5pbnN0cnVjdGlvbiA9PT0gJ3VwbG9hZCcgfHxcbiAgICAgICAgICAgICAgICBmLmluc3RydWN0aW9uID09PSAnZG93bmxvYWQnXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubWFwKChmOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgIHBhdGg6IGYucGF0aCxcbiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb246IGYuaW5zdHJ1Y3Rpb24sXG4gICAgICAgICAgICAgIHNpemU6IGYuc2l6ZSxcbiAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgY29uc3QgbW9kaWZpZWQgPSBtb2RpZmljYXRpb25zXG4gICAgICAgICAgICAuZmlsdGVyKChmOiBhbnkpID0+IGYuaW5zdHJ1Y3Rpb24gPT09ICdtb2RpZnknKVxuICAgICAgICAgICAgLm1hcCgoZjogYW55KSA9PiAoe1xuICAgICAgICAgICAgICBwYXRoOiBmLnBhdGgsXG4gICAgICAgICAgICAgIGluc3RydWN0aW9uOiBmLmluc3RydWN0aW9uLFxuICAgICAgICAgICAgICBzaXplOiBmLnNpemUsXG4gICAgICAgICAgICAgIHR5cGU6IGYudHlwZSxcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSBtb2RpZmljYXRpb25zXG4gICAgICAgICAgICAuZmlsdGVyKChmOiBhbnkpID0+IGYuaW5zdHJ1Y3Rpb24gPT09ICdkZWxldGUnKVxuICAgICAgICAgICAgLm1hcCgoZjogYW55KSA9PiAoe1xuICAgICAgICAgICAgICBwYXRoOiBmLnBhdGgsXG4gICAgICAgICAgICAgIGluc3RydWN0aW9uOiBmLmluc3RydWN0aW9uLFxuICAgICAgICAgICAgICBzaXplOiBmLnNpemUsXG4gICAgICAgICAgICAgIHR5cGU6IGYudHlwZSxcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgIGNvbnN0IHRvdGFsQ2hhbmdlcyA9IGFkZGVkLmxlbmd0aCArIG1vZGlmaWVkLmxlbmd0aCArIGRlbGV0ZWQubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbkxhYmVsID0gZGlyZWN0aW9uID09PSAncHVzaCcgPyAnbG9jYWwg4oaSIFdQRScgOiAnV1BFIOKGkiBsb2NhbCc7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIHNpdGVOYW1lOiBzaXRlLm5hbWUsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICBhZGRlZCxcbiAgICAgICAgICAgIG1vZGlmaWVkLFxuICAgICAgICAgICAgZGVsZXRlZCxcbiAgICAgICAgICAgIHRvdGFsQ2hhbmdlcyxcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgIHRvdGFsQ2hhbmdlcyA+IDBcbiAgICAgICAgICAgICAgICA/IGAke3RvdGFsQ2hhbmdlc30gZmlsZShzKSBjaGFuZ2VkICgke2RpcmVjdGlvbkxhYmVsfSk6ICR7YWRkZWQubGVuZ3RofSBhZGRlZCwgJHttb2RpZmllZC5sZW5ndGh9IG1vZGlmaWVkLCAke2RlbGV0ZWQubGVuZ3RofSBkZWxldGVkYFxuICAgICAgICAgICAgICAgIDogYE5vIGNoYW5nZXMgZGV0ZWN0ZWQgKCR7ZGlyZWN0aW9uTGFiZWx9KWAsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gZ2V0IHNpdGUgY2hhbmdlczpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgc2l0ZU5hbWU6IG51bGwsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICBtb2RpZmllZDogW10sXG4gICAgICAgICAgICBkZWxldGVkOiBbXSxcbiAgICAgICAgICAgIHRvdGFsQ2hhbmdlczogMCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICAgIE11dGF0aW9uOiB7XG4gICAgICB3cENsaTogZXhlY3V0ZVdwQ2xpLFxuXG4gICAgICBjcmVhdGVTaXRlOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczoge1xuICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICBwaHBWZXJzaW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgd2ViU2VydmVyPzogc3RyaW5nO1xuICAgICAgICAgICAgZGF0YWJhc2U/OiBzdHJpbmc7XG4gICAgICAgICAgICB3cEFkbWluVXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgICB3cEFkbWluUGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAgICAgICAgICB3cEFkbWluRW1haWw/OiBzdHJpbmc7XG4gICAgICAgICAgICBibHVlcHJpbnQ/OiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgKSA9PiB7XG4gICAgICAgIC8vIERFQlVHOiBMb2cgcmF3IGFyZ3MgcmVjZWl2ZWRcbiAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIGNyZWF0ZVNpdGUgY2FsbGVkIHdpdGggYXJnczogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBwaHBWZXJzaW9uLFxuICAgICAgICAgIHdlYlNlcnZlciA9ICduZ2lueCcsXG4gICAgICAgICAgZGF0YWJhc2UgPSAnbXlzcWwnLFxuICAgICAgICAgIHdwQWRtaW5Vc2VybmFtZSA9ICdhZG1pbicsXG4gICAgICAgICAgd3BBZG1pblBhc3N3b3JkID0gJ3Bhc3N3b3JkJyxcbiAgICAgICAgICB3cEFkbWluRW1haWwgPSAnYWRtaW5AbG9jYWwudGVzdCcsXG4gICAgICAgICAgYmx1ZXByaW50LFxuICAgICAgICB9ID0gYXJncy5pbnB1dDtcblxuICAgICAgICAvLyBERUJVRzogTG9nIGRlc3RydWN0dXJlZCB2YWx1ZXNcbiAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICBgWyR7QURET05fTkFNRX1dIERlc3RydWN0dXJlZCAtIG5hbWU6ICR7bmFtZX0sIGJsdWVwcmludDogJHtibHVlcHJpbnR9LCB0eXBlb2YgYmx1ZXByaW50OiAke3R5cGVvZiBibHVlcHJpbnR9YFxuICAgICAgICApO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gQ3JlYXRpbmcgc2l0ZTogJHtuYW1lfSR7Ymx1ZXByaW50ID8gYCBmcm9tIGJsdWVwcmludDogJHtibHVlcHJpbnR9YCA6ICcnfWBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gR2VuZXJhdGUgc2x1ZyBhbmQgZG9tYWluIGZyb20gbmFtZVxuICAgICAgICAgIGNvbnN0IHNpdGVTbHVnID0gbmFtZVxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7XG4gICAgICAgICAgY29uc3Qgc2l0ZURvbWFpbiA9IGAke3NpdGVTbHVnfS5sb2NhbGA7XG5cbiAgICAgICAgICBjb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbiAgICAgICAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gICAgICAgICAgY29uc3Qgc2l0ZVBhdGggPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnTG9jYWwgU2l0ZXMnLCBzaXRlU2x1Zyk7XG5cbiAgICAgICAgICAvLyBJZiBibHVlcHJpbnQgaXMgcHJvdmlkZWQsIHVzZSBpbXBvcnRTaXRlU2VydmljZSBpbnN0ZWFkIG9mIGFkZFNpdGVTZXJ2aWNlXG4gICAgICAgICAgaWYgKGJsdWVwcmludCkge1xuICAgICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEJsdWVwcmludCBwYXJhbWV0ZXIgcmVjZWl2ZWQ6ICR7Ymx1ZXByaW50fWApO1xuXG4gICAgICAgICAgICAvLyBHZXQgdGhlIHVzZXJEYXRhUGF0aCBmcm9tIGVsZWN0cm9uIGFwcFxuICAgICAgICAgICAgY29uc3QgeyBhcHAgfSA9IHJlcXVpcmUoJ2VsZWN0cm9uJyk7XG4gICAgICAgICAgICBjb25zdCB1c2VyRGF0YVBhdGggPSBhcHAuZ2V0UGF0aCgndXNlckRhdGEnKTtcbiAgICAgICAgICAgIGNvbnN0IGJsdWVwcmludFppcFBhdGggPSBwYXRoLmpvaW4odXNlckRhdGFQYXRoLCAnYmx1ZXByaW50cycsIGAke2JsdWVwcmludH0uemlwYCk7XG5cbiAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBMb29raW5nIGZvciBibHVlcHJpbnQgYXQ6ICR7Ymx1ZXByaW50WmlwUGF0aH1gKTtcblxuICAgICAgICAgICAgLy8gVmVyaWZ5IGJsdWVwcmludCBleGlzdHNcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhibHVlcHJpbnRaaXBQYXRoKSkge1xuICAgICAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEJsdWVwcmludCBub3QgZm91bmQgYXQ6ICR7Ymx1ZXByaW50WmlwUGF0aH1gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogYEJsdWVwcmludCBub3QgZm91bmQ6ICR7Ymx1ZXByaW50fS4gVXNlIGxpc3RfYmx1ZXByaW50cyB0byBzZWUgYXZhaWxhYmxlIGJsdWVwcmludHMuYCxcbiAgICAgICAgICAgICAgICBzaXRlSWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgc2l0ZU5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgc2l0ZURvbWFpbjogbnVsbCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEZvdW5kIGJsdWVwcmludCBhdDogJHtibHVlcHJpbnRaaXBQYXRofWApO1xuXG4gICAgICAgICAgICAvLyBSZWFkIHRoZSBsb2NhbC1zaXRlLmpzb24gZnJvbSB0aGUgYmx1ZXByaW50IHppcCB0byBnZXQgbWFuaWZlc3RcbiAgICAgICAgICAgIGxldCBsb2NhbFNpdGVKU09OOiBhbnk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBTdHJlYW1aaXAgPSByZXF1aXJlKCdub2RlLXN0cmVhbS16aXAnKTtcbiAgICAgICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIG5vZGUtc3RyZWFtLXppcCBsb2FkZWQgc3VjY2Vzc2Z1bGx5YCk7XG5cbiAgICAgICAgICAgICAgY29uc3QgemlwID0gbmV3IFN0cmVhbVppcC5hc3luYyh7IGZpbGU6IGJsdWVwcmludFppcFBhdGggfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB6aXAuZW50cmllcygpO1xuICAgICAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gWmlwIGVudHJpZXMgbG9hZGVkLCBjb3VudDogJHtPYmplY3Qua2V5cyhlbnRyaWVzKS5sZW5ndGh9YFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gZW50cmllc1snbG9jYWwtc2l0ZS5qc29uJ11cbiAgICAgICAgICAgICAgICA/ICdsb2NhbC1zaXRlLmpzb24nXG4gICAgICAgICAgICAgICAgOiAncHJlc3NtYXRpYy1zaXRlLmpzb24nO1xuICAgICAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gUmVhZGluZyBtYW5pZmVzdCBmaWxlOiAke2ZpbGVuYW1lfWApO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB6aXAuZW50cnlEYXRhKGZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgbG9jYWxTaXRlSlNPTiA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygndXRmOCcpKTtcbiAgICAgICAgICAgICAgYXdhaXQgemlwLmNsb3NlKCk7XG4gICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgcmVhZCBtYW5pZmVzdDpgLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGxvY2FsU2l0ZUpTT04pLnN1YnN0cmluZygwLCAyMDApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoICh6aXBFcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIHJlYWQgYmx1ZXByaW50IHppcDogJHt6aXBFcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgICAgICAgemlwRXJyb3JcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogYEZhaWxlZCB0byByZWFkIGJsdWVwcmludCBtYW5pZmVzdDogJHt6aXBFcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgICAgICAgc2l0ZUlkOiBudWxsLFxuICAgICAgICAgICAgICAgIHNpdGVOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIHNpdGVEb21haW46IG51bGwsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJ1aWxkIGltcG9ydCBzZXR0aW5nc1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0U2V0dGluZ3M6IGFueSA9IHtcbiAgICAgICAgICAgICAgc2l0ZU5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIHNpdGVEb21haW46IHNpdGVEb21haW4sXG4gICAgICAgICAgICAgIHNpdGVQYXRoOiBzaXRlUGF0aCxcbiAgICAgICAgICAgICAgemlwOiBibHVlcHJpbnRaaXBQYXRoLFxuICAgICAgICAgICAgICBpbXBvcnREYXRhOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xvY2FsLWJsdWVwcmludCcsXG4gICAgICAgICAgICAgICAgb2xkU2l0ZTogbG9jYWxTaXRlSlNPTixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IGxvY2FsU2l0ZUpTT04uZW52aXJvbm1lbnQgfHwgJ2ZseXdoZWVsJyxcbiAgICAgICAgICAgICAgYmx1ZXByaW50OiBibHVlcHJpbnQsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBDb3B5IHNlcnZpY2UgdmVyc2lvbnMgZnJvbSBibHVlcHJpbnQgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgICBpZiAobG9jYWxTaXRlSlNPTi5zZXJ2aWNlcykge1xuICAgICAgICAgICAgICAvLyBFeHRyYWN0IFBIUCB2ZXJzaW9uXG4gICAgICAgICAgICAgIGNvbnN0IHBocFNlcnZpY2UgPSBPYmplY3QudmFsdWVzKGxvY2FsU2l0ZUpTT04uc2VydmljZXMpLmZpbmQoXG4gICAgICAgICAgICAgICAgKHM6IGFueSkgPT4gcy5yb2xlID09PSAncGhwJ1xuICAgICAgICAgICAgICApIGFzIGFueTtcbiAgICAgICAgICAgICAgaWYgKHBocFNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICBpbXBvcnRTZXR0aW5ncy5waHBWZXJzaW9uID0gcGhwU2VydmljZS52ZXJzaW9uO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gRXh0cmFjdCBkYXRhYmFzZVxuICAgICAgICAgICAgICBjb25zdCBkYlNlcnZpY2UgPSBPYmplY3QudmFsdWVzKGxvY2FsU2l0ZUpTT04uc2VydmljZXMpLmZpbmQoXG4gICAgICAgICAgICAgICAgKHM6IGFueSkgPT4gcy5yb2xlID09PSAnZGF0YWJhc2UnIHx8IHMucm9sZSA9PT0gJ2RiJ1xuICAgICAgICAgICAgICApIGFzIGFueTtcbiAgICAgICAgICAgICAgaWYgKGRiU2VydmljZSkge1xuICAgICAgICAgICAgICAgIGltcG9ydFNldHRpbmdzLmRhdGFiYXNlID0gYCR7ZGJTZXJ2aWNlLm5hbWV9LSR7ZGJTZXJ2aWNlLnZlcnNpb259YDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIEV4dHJhY3Qgd2ViIHNlcnZlclxuICAgICAgICAgICAgICBjb25zdCB3ZWJTZXJ2aWNlID0gT2JqZWN0LnZhbHVlcyhsb2NhbFNpdGVKU09OLnNlcnZpY2VzKS5maW5kKFxuICAgICAgICAgICAgICAgIChzOiBhbnkpID0+IHMucm9sZSA9PT0gJ2h0dHAnIHx8IHMucm9sZSA9PT0gJ3dlYidcbiAgICAgICAgICAgICAgKSBhcyBhbnk7XG4gICAgICAgICAgICAgIGlmICh3ZWJTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgaW1wb3J0U2V0dGluZ3Mud2ViU2VydmVyID0gYCR7d2ViU2VydmljZS5uYW1lfS0ke3dlYlNlcnZpY2UudmVyc2lvbn1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsU2l0ZUpTT04ucGhwVmVyc2lvbikge1xuICAgICAgICAgICAgICBpbXBvcnRTZXR0aW5ncy5waHBWZXJzaW9uID0gbG9jYWxTaXRlSlNPTi5waHBWZXJzaW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIEltcG9ydCBzZXR0aW5ncyBwcmVwYXJlZDpgLFxuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShpbXBvcnRTZXR0aW5ncykuc3Vic3RyaW5nKDAsIDUwMClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghaW1wb3J0U2l0ZVNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBpbXBvcnRTaXRlU2VydmljZSBpcyBub3QgYXZhaWxhYmxlIWApO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVycm9yOiAnSW1wb3J0IHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICAgICAgc2l0ZUlkOiBudWxsLFxuICAgICAgICAgICAgICAgIHNpdGVOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIHNpdGVEb21haW46IG51bGwsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBDYWxsaW5nIGltcG9ydFNpdGVTZXJ2aWNlLnJ1bigpLi4uYCk7XG5cbiAgICAgICAgICAgIC8vIFVzZSB0aGUgaW1wb3J0U2l0ZVNlcnZpY2UgdG8gY3JlYXRlIGZyb20gYmx1ZXByaW50XG4gICAgICAgICAgICBjb25zdCBpbXBvcnRSZXN1bHQgPSBhd2FpdCBpbXBvcnRTaXRlU2VydmljZS5ydW4oaW1wb3J0U2V0dGluZ3MpO1xuXG4gICAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIEltcG9ydCByZXN1bHQ6YCxcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaW1wb3J0UmVzdWx0IHx8ICdudWxsJykuc3Vic3RyaW5nKDAsIDUwMClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChpbXBvcnRSZXN1bHQgJiYgaW1wb3J0UmVzdWx0LmlkKSB7XG4gICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgY3JlYXRlZCBzaXRlIGZyb20gYmx1ZXByaW50OiAke25hbWV9ICgke2ltcG9ydFJlc3VsdC5pZH0pYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgc2l0ZUlkOiBpbXBvcnRSZXN1bHQuaWQsXG4gICAgICAgICAgICAgICAgc2l0ZU5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgc2l0ZURvbWFpbjogc2l0ZURvbWFpbixcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLndhcm4oYFske0FERE9OX05BTUV9XSBJbXBvcnQgcmV0dXJuZWQgYnV0IG5vIHNpdGUgSUQgZm91bmRgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgIHNpdGVJZDogbnVsbCxcbiAgICAgICAgICAgICAgICBzaXRlTmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICBzaXRlRG9tYWluOiBzaXRlRG9tYWluLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE5vIGJsdWVwcmludCAtIGNyZWF0ZSBhIGZyZXNoIHNpdGVcbiAgICAgICAgICBjb25zdCBuZXdTaXRlSW5mbzogYW55ID0ge1xuICAgICAgICAgICAgc2l0ZU5hbWU6IG5hbWUsXG4gICAgICAgICAgICBzaXRlRG9tYWluOiBzaXRlRG9tYWluLFxuICAgICAgICAgICAgc2l0ZVBhdGg6IHNpdGVQYXRoLFxuICAgICAgICAgICAgd2ViU2VydmVyOiB3ZWJTZXJ2ZXIsXG4gICAgICAgICAgICBkYXRhYmFzZTogZGF0YWJhc2UsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChwaHBWZXJzaW9uKSB7XG4gICAgICAgICAgICBuZXdTaXRlSW5mby5waHBWZXJzaW9uID0gcGhwVmVyc2lvbjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB3cENyZWRlbnRpYWxzID0ge1xuICAgICAgICAgICAgYWRtaW5Vc2VybmFtZTogd3BBZG1pblVzZXJuYW1lLFxuICAgICAgICAgICAgYWRtaW5QYXNzd29yZDogd3BBZG1pblBhc3N3b3JkLFxuICAgICAgICAgICAgYWRtaW5FbWFpbDogd3BBZG1pbkVtYWlsLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBzaXRlID0gYXdhaXQgYWRkU2l0ZVNlcnZpY2UuYWRkU2l0ZSh7XG4gICAgICAgICAgICBuZXdTaXRlSW5mbyxcbiAgICAgICAgICAgIHdwQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICBnb1RvU2l0ZTogZmFsc2UsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgc2l0ZTogJHtuYW1lfSAoJHtzaXRlLmlkfSlgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBzaXRlSWQ6IHNpdGUuaWQsXG4gICAgICAgICAgICBzaXRlTmFtZTogbmFtZSxcbiAgICAgICAgICAgIHNpdGVEb21haW46IHNpdGVEb21haW4sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGNyZWF0ZSBzaXRlOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBzaXRlSWQ6IG51bGwsXG4gICAgICAgICAgICBzaXRlTmFtZTogbmFtZSxcbiAgICAgICAgICAgIHNpdGVEb21haW46IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZGVsZXRlU2l0ZTogYXN5bmMgKFxuICAgICAgICBfcGFyZW50OiBhbnksXG4gICAgICAgIGFyZ3M6IHsgaW5wdXQ6IHsgaWQ6IHN0cmluZzsgdHJhc2hGaWxlcz86IGJvb2xlYW47IHVwZGF0ZUhvc3RzPzogYm9vbGVhbiB9IH1cbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCB7IGlkLCB0cmFzaEZpbGVzID0gdHJ1ZSwgdXBkYXRlSG9zdHMgPSB0cnVlIH0gPSBhcmdzLmlucHV0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIERlbGV0aW5nIHNpdGU6ICR7aWR9YCk7XG5cbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShpZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtpZH1gLFxuICAgICAgICAgICAgICBzaXRlSWQ6IGlkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCBkZWxldGVTaXRlU2VydmljZS5kZWxldGVTaXRlKHtcbiAgICAgICAgICAgIHNpdGUsXG4gICAgICAgICAgICB0cmFzaEZpbGVzLFxuICAgICAgICAgICAgdXBkYXRlSG9zdHMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgc2l0ZTogJHtzaXRlLm5hbWV9YCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgc2l0ZUlkOiBpZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gZGVsZXRlIHNpdGU6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgIHNpdGVJZDogaWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZGVsZXRlU2l0ZXM6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgaWRzOiBzdHJpbmdbXTsgdHJhc2hGaWxlcz86IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgICBjb25zdCB7IGlkcywgdHJhc2hGaWxlcyA9IHRydWUgfSA9IGFyZ3M7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gRGVsZXRpbmcgJHtpZHMubGVuZ3RofSBzaXRlc2ApO1xuXG4gICAgICAgICAgYXdhaXQgZGVsZXRlU2l0ZVNlcnZpY2UuZGVsZXRlU2l0ZXMoe1xuICAgICAgICAgICAgc2l0ZUlkczogaWRzLFxuICAgICAgICAgICAgdHJhc2hGaWxlcyxcbiAgICAgICAgICAgIHVwZGF0ZUhvc3RzOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFN1Y2Nlc3NmdWxseSBkZWxldGVkICR7aWRzLmxlbmd0aH0gc2l0ZXNgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBzaXRlSWQ6IGlkcy5qb2luKCcsJyksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGRlbGV0ZSBzaXRlczpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgc2l0ZUlkOiBpZHMuam9pbignLCcpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG9wZW5TaXRlOiBhc3luYyAoX3BhcmVudDogYW55LCBhcmdzOiB7IGlucHV0OiB7IHNpdGVJZDogc3RyaW5nOyBwYXRoPzogc3RyaW5nIH0gfSkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCwgcGF0aCA9ICcvJyB9ID0gYXJncy5pbnB1dDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgICAgdXJsOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBzaXRlIGlzIHJ1bm5pbmdcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBzaXRlUHJvY2Vzc01hbmFnZXIuZ2V0U2l0ZVN0YXR1cyhzaXRlKTtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAncnVubmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgXCIke3NpdGUubmFtZX1cIiBtdXN0IGJlIHJ1bm5pbmcgdG8gb3BlbiBpbiBicm93c2VyLiBTdGFydCBpdCBmaXJzdC5gLFxuICAgICAgICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHByb3RvY29sID0gc2l0ZS5pc1N0YXJyZWQgPyAnaHR0cHMnIDogJ2h0dHAnO1xuICAgICAgICAgIGNvbnN0IHVybCA9IGAke3Byb3RvY29sfTovLyR7c2l0ZS5kb21haW59JHtwYXRofWA7XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gT3BlbmluZyBzaXRlIGluIGJyb3dzZXI6ICR7dXJsfWApO1xuXG4gICAgICAgICAgaWYgKGJyb3dzZXJNYW5hZ2VyKSB7XG4gICAgICAgICAgICBhd2FpdCBicm93c2VyTWFuYWdlci5vcGVuSW5Ccm93c2VyKHVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNoZWxsLm9wZW5FeHRlcm5hbFxuICAgICAgICAgICAgY29uc3QgeyBzaGVsbCB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgICAgICAgIGF3YWl0IHNoZWxsLm9wZW5FeHRlcm5hbCh1cmwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIG9wZW4gc2l0ZTpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgdXJsOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGNsb25lU2l0ZTogYXN5bmMgKF9wYXJlbnQ6IGFueSwgYXJnczogeyBpbnB1dDogeyBzaXRlSWQ6IHN0cmluZzsgbmV3TmFtZTogc3RyaW5nIH0gfSkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCwgbmV3TmFtZSB9ID0gYXJncy5pbnB1dDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgICAgbmV3U2l0ZUlkOiBudWxsLFxuICAgICAgICAgICAgICBuZXdTaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgbmV3U2l0ZURvbWFpbjogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgc2l0ZSBpcyBydW5uaW5nIC0gbmVlZGVkIGZvciBkYXRhYmFzZSBjbG9uaW5nXG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc2l0ZVByb2Nlc3NNYW5hZ2VyLmdldFNpdGVTdGF0dXMoc2l0ZSk7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIFwiJHtzaXRlLm5hbWV9XCIgbXVzdCBiZSBydW5uaW5nIHRvIGNsb25lLiBTdGFydCBpdCBmaXJzdC5gLFxuICAgICAgICAgICAgICBuZXdTaXRlSWQ6IG51bGwsXG4gICAgICAgICAgICAgIG5ld1NpdGVOYW1lOiBudWxsLFxuICAgICAgICAgICAgICBuZXdTaXRlRG9tYWluOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gQ2xvbmluZyBzaXRlICR7c2l0ZS5uYW1lfSB0byAke25ld05hbWV9YCk7XG5cbiAgICAgICAgICBjb25zdCBuZXdTaXRlID0gYXdhaXQgY2xvbmVTaXRlU2VydmljZS5jbG9uZVNpdGUoe1xuICAgICAgICAgICAgc2l0ZSxcbiAgICAgICAgICAgIG5ld1NpdGVOYW1lOiBuZXdOYW1lLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5IGNsb25lZCBzaXRlOiAke25ld1NpdGUubmFtZX0gKCR7bmV3U2l0ZS5pZH0pYFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgbmV3U2l0ZUlkOiBuZXdTaXRlLmlkLFxuICAgICAgICAgICAgbmV3U2l0ZU5hbWU6IG5ld1NpdGUubmFtZSxcbiAgICAgICAgICAgIG5ld1NpdGVEb21haW46IG5ld1NpdGUuZG9tYWluLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBjbG9uZSBzaXRlOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBuZXdTaXRlSWQ6IG51bGwsXG4gICAgICAgICAgICBuZXdTaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgIG5ld1NpdGVEb21haW46IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZXhwb3J0U2l0ZTogYXN5bmMgKFxuICAgICAgICBfcGFyZW50OiBhbnksXG4gICAgICAgIGFyZ3M6IHsgaW5wdXQ6IHsgc2l0ZUlkOiBzdHJpbmc7IG91dHB1dFBhdGg/OiBzdHJpbmcgfSB9XG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIG91dHB1dFBhdGggfSA9IGFyZ3MuaW5wdXQ7XG4gICAgICAgIGNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgICAgZXhwb3J0UGF0aDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgc2l0ZSBpcyBydW5uaW5nIC0gbmVlZGVkIGZvciBkYXRhYmFzZSBleHBvcnRcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBzaXRlUHJvY2Vzc01hbmFnZXIuZ2V0U2l0ZVN0YXR1cyhzaXRlKTtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAncnVubmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgXCIke3NpdGUubmFtZX1cIiBtdXN0IGJlIHJ1bm5pbmcgdG8gZXhwb3J0LiBTdGFydCBpdCBmaXJzdC5gLFxuICAgICAgICAgICAgICBleHBvcnRQYXRoOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEZWZhdWx0IHRvIERvd25sb2FkcyBmb2xkZXJcbiAgICAgICAgICBjb25zdCBvdXRwdXREaXIgPSBvdXRwdXRQYXRoIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICdEb3dubG9hZHMnKTtcbiAgICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCAnLScpLnNsaWNlKDAsIDE5KTtcbiAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGAke3NpdGUubmFtZX0tJHt0aW1lc3RhbXB9LnppcGA7XG4gICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4ob3V0cHV0RGlyLCBmaWxlTmFtZSk7XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gRXhwb3J0aW5nIHNpdGUgJHtzaXRlLm5hbWV9IHRvICR7ZnVsbFBhdGh9YCk7XG5cbiAgICAgICAgICAvLyBVc2UgZGVmYXVsdCBleHBvcnQgZmlsdGVyIChleGNsdWRlcyBhcmNoaXZlIGZpbGVzKVxuICAgICAgICAgIGNvbnN0IGRlZmF1bHRFeHBvcnRGaWx0ZXIgPSAnKi56aXAsICoudGFyLmd6LCAqLmJ6MiwgKi50Z3onO1xuXG4gICAgICAgICAgYXdhaXQgZXhwb3J0U2l0ZVNlcnZpY2UuZXhwb3J0U2l0ZSh7XG4gICAgICAgICAgICBzaXRlLFxuICAgICAgICAgICAgb3V0cHV0UGF0aDogZnVsbFBhdGgsXG4gICAgICAgICAgICBmaWx0ZXI6IGRlZmF1bHRFeHBvcnRGaWx0ZXIsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5IGV4cG9ydGVkIHNpdGUgdG86ICR7ZnVsbFBhdGh9YCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgZXhwb3J0UGF0aDogZnVsbFBhdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGV4cG9ydCBzaXRlOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBleHBvcnRQYXRoOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNhdmVCbHVlcHJpbnQ6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgaW5wdXQ6IHsgc2l0ZUlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9IH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIG5hbWUgfSA9IGFyZ3MuaW5wdXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShzaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICAgIGJsdWVwcmludE5hbWU6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGlmIHNpdGUgaXMgcnVubmluZyAtIG5lZWRlZCBmb3IgZGF0YWJhc2UgZXhwb3J0XG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc2l0ZVByb2Nlc3NNYW5hZ2VyLmdldFNpdGVTdGF0dXMoc2l0ZSk7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIFwiJHtzaXRlLm5hbWV9XCIgbXVzdCBiZSBydW5uaW5nIHRvIHNhdmUgYXMgYmx1ZXByaW50LiBTdGFydCBpdCBmaXJzdC5gLFxuICAgICAgICAgICAgICBibHVlcHJpbnROYW1lOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gU2F2aW5nIHNpdGUgJHtzaXRlLm5hbWV9IGFzIGJsdWVwcmludDogJHtuYW1lfWApO1xuXG4gICAgICAgICAgLy8gVXNlIGRlZmF1bHQgZXhwb3J0IGZpbHRlciAoZXhjbHVkZXMgYXJjaGl2ZSBmaWxlcylcbiAgICAgICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gJyouemlwLCAqLnRhci5neiwgKi5iejIsICoudGd6JztcblxuICAgICAgICAgIGF3YWl0IGJsdWVwcmludHNTZXJ2aWNlLnNhdmVCbHVlcHJpbnQoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHNpdGVJZCxcbiAgICAgICAgICAgIGZpbHRlcjogZGVmYXVsdEZpbHRlcixcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgc2F2ZWQgYmx1ZXByaW50OiAke25hbWV9YCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgYmx1ZXByaW50TmFtZTogbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gc2F2ZSBibHVlcHJpbnQ6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgIGJsdWVwcmludE5hbWU6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gUGhhc2UgODogV29yZFByZXNzIERldmVsb3BtZW50IFRvb2xzXG4gICAgICBleHBvcnREYXRhYmFzZTogYXN5bmMgKFxuICAgICAgICBfcGFyZW50OiBhbnksXG4gICAgICAgIGFyZ3M6IHsgaW5wdXQ6IHsgc2l0ZUlkOiBzdHJpbmc7IG91dHB1dFBhdGg/OiBzdHJpbmcgfSB9XG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIG91dHB1dFBhdGggfSA9IGFyZ3MuaW5wdXQ7XG4gICAgICAgIGNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbiAgICAgICAgY29uc3QgcGF0aE1vZHVsZSA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgICAgb3V0cHV0UGF0aDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgc2l0ZSBpcyBydW5uaW5nIC0gZGF0YWJhc2UgbXVzdCBiZSBhY2Nlc3NpYmxlXG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc2l0ZVByb2Nlc3NNYW5hZ2VyLmdldFNpdGVTdGF0dXMoc2l0ZSk7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIFwiJHtzaXRlLm5hbWV9XCIgbXVzdCBiZSBydW5uaW5nIHRvIGV4cG9ydCBkYXRhYmFzZS4gU3RhcnQgaXQgZmlyc3QuYCxcbiAgICAgICAgICAgICAgb3V0cHV0UGF0aDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRGVmYXVsdCB0byBEb3dubG9hZHMgZm9sZGVyIHdpdGggc2l0ZSBuYW1lXG4gICAgICAgICAgY29uc3QgZGVmYXVsdFBhdGggPSBwYXRoTW9kdWxlLmpvaW4oXG4gICAgICAgICAgICBvcy5ob21lZGlyKCksXG4gICAgICAgICAgICAnRG93bmxvYWRzJyxcbiAgICAgICAgICAgIGAke3NpdGUubmFtZS5yZXBsYWNlKC9bXmEtejAtOV0vZ2ksICctJyl9LnNxbGBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGZpbmFsUGF0aCA9IG91dHB1dFBhdGggfHwgZGVmYXVsdFBhdGg7XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gRXhwb3J0aW5nIGRhdGFiYXNlIGZvciAke3NpdGUubmFtZX0gdG8gJHtmaW5hbFBhdGh9YCk7XG5cbiAgICAgICAgICAvLyBVc2Ugc2l0ZURhdGFiYXNlLmR1bXAoKSB3aGljaCBwcm9wZXJseSBzZXRzIHVwIE15U1FMIGVudmlyb25tZW50XG4gICAgICAgICAgaWYgKCFzaXRlRGF0YWJhc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogJ0RhdGFiYXNlIHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICAgIG91dHB1dFBhdGg6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHNpdGVEYXRhYmFzZS5kdW1wKHNpdGUsIGZpbmFsUGF0aCk7XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5IGV4cG9ydGVkIGRhdGFiYXNlIHRvOiAke2ZpbmFsUGF0aH1gKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBvdXRwdXRQYXRoOiBmaW5hbFBhdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGV4cG9ydCBkYXRhYmFzZTpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgb3V0cHV0UGF0aDogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBpbXBvcnREYXRhYmFzZTogYXN5bmMgKFxuICAgICAgICBfcGFyZW50OiBhbnksXG4gICAgICAgIGFyZ3M6IHsgaW5wdXQ6IHsgc2l0ZUlkOiBzdHJpbmc7IHNxbFBhdGg6IHN0cmluZyB9IH1cbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCwgc3FsUGF0aCB9ID0gYXJncy5pbnB1dDtcbiAgICAgICAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc3FsUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNRTCBmaWxlIG5vdCBmb3VuZDogJHtzcWxQYXRofWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGlmIHNpdGUgaXMgcnVubmluZyAtIGRhdGFiYXNlIG11c3QgYmUgYWNjZXNzaWJsZVxuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHNpdGVQcm9jZXNzTWFuYWdlci5nZXRTaXRlU3RhdHVzKHNpdGUpO1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdydW5uaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBcIiR7c2l0ZS5uYW1lfVwiIG11c3QgYmUgcnVubmluZyB0byBpbXBvcnQgZGF0YWJhc2UuIFN0YXJ0IGl0IGZpcnN0LmAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBJbXBvcnRpbmcgZGF0YWJhc2UgZm9yICR7c2l0ZS5uYW1lfSBmcm9tICR7c3FsUGF0aH1gKTtcblxuICAgICAgICAgIC8vIFVzZSBpbXBvcnRTUUxGaWxlIHNlcnZpY2Ugd2hpY2ggcHJvcGVybHkgc2V0cyB1cCBNeVNRTCBlbnZpcm9ubWVudFxuICAgICAgICAgIGlmICghaW1wb3J0U1FMRmlsZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogJ0ltcG9ydCBTUUwgZmlsZSBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCBpbXBvcnRTUUxGaWxlU2VydmljZShzaXRlLCBzcWxQYXRoKTtcblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgaW1wb3J0ZWQgZGF0YWJhc2UgZnJvbTogJHtzcWxQYXRofWApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gaW1wb3J0IGRhdGFiYXNlOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgb3BlbkFkbWluZXI6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgaW5wdXQ6IHsgc2l0ZUlkOiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkIH0gPSBhcmdzLmlucHV0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBzaXRlIGlzIHJ1bm5pbmcgLSBkYXRhYmFzZSBtdXN0IGJlIGFjY2Vzc2libGVcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBzaXRlUHJvY2Vzc01hbmFnZXIuZ2V0U2l0ZVN0YXR1cyhzaXRlKTtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAncnVubmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgXCIke3NpdGUubmFtZX1cIiBtdXN0IGJlIHJ1bm5pbmcgdG8gb3BlbiBBZG1pbmVyLiBTdGFydCBpdCBmaXJzdC5gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gT3BlbmluZyBBZG1pbmVyIGZvciAke3NpdGUubmFtZX1gKTtcblxuICAgICAgICAgIGlmIChhZG1pbmVyKSB7XG4gICAgICAgICAgICBhd2FpdCBhZG1pbmVyLm9wZW4oc2l0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogJ0FkbWluZXIgc2VydmljZSBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gb3BlbiBBZG1pbmVyOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgdHJ1c3RTc2w6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgaW5wdXQ6IHsgc2l0ZUlkOiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkIH0gPSBhcmdzLmlucHV0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gVHJ1c3RpbmcgU1NMIGZvciAke3NpdGUubmFtZX1gKTtcblxuICAgICAgICAgIGlmICh4NTA5Q2VydCkge1xuICAgICAgICAgICAgYXdhaXQgeDUwOUNlcnQudHJ1c3RDZXJ0KHNpdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6ICdYNTA5IGNlcnRpZmljYXRlIHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIHRydXN0IFNTTDpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG1jcFJlbmFtZVNpdGU6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgaW5wdXQ6IHsgc2l0ZUlkOiBzdHJpbmc7IG5ld05hbWU6IHN0cmluZyB9IH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIG5ld05hbWUgfSA9IGFyZ3MuaW5wdXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShzaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICAgIG5ld05hbWU6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBSZW5hbWluZyAke3NpdGUubmFtZX0gdG8gJHtuZXdOYW1lfWApO1xuXG4gICAgICAgICAgLy8gVXBkYXRlIHNpdGUgbmFtZSB2aWEgc2l0ZURhdGFcbiAgICAgICAgICBzaXRlLm5hbWUgPSBuZXdOYW1lO1xuICAgICAgICAgIGF3YWl0IHNpdGVEYXRhLnVwZGF0ZVNpdGUoc2l0ZUlkLCB7IG5hbWU6IG5ld05hbWUgfSk7XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5IHJlbmFtZWQgc2l0ZSB0bzogJHtuZXdOYW1lfWApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIG5ld05hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIHJlbmFtZSBzaXRlOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBuZXdOYW1lOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGNoYW5nZVBocFZlcnNpb246IGFzeW5jIChcbiAgICAgICAgX3BhcmVudDogYW55LFxuICAgICAgICBhcmdzOiB7IGlucHV0OiB7IHNpdGVJZDogc3RyaW5nOyBwaHBWZXJzaW9uOiBzdHJpbmcgfSB9XG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIHBocFZlcnNpb24gfSA9IGFyZ3MuaW5wdXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShzaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICAgIHBocFZlcnNpb246IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIENoYW5naW5nIFBIUCB2ZXJzaW9uIGZvciAke3NpdGUubmFtZX0gdG8gJHtwaHBWZXJzaW9ufWBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHNpdGVQcm92aXNpb25lcikge1xuICAgICAgICAgICAgYXdhaXQgc2l0ZVByb3Zpc2lvbmVyLnN3YXBTZXJ2aWNlKHNpdGUsICdwaHAnLCBwaHBWZXJzaW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiAnU2l0ZSBwcm92aXNpb25lciBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnLFxuICAgICAgICAgICAgICBwaHBWZXJzaW9uOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5IGNoYW5nZWQgUEhQIHZlcnNpb24gdG86ICR7cGhwVmVyc2lvbn1gKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBwaHBWZXJzaW9uLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBjaGFuZ2UgUEhQIHZlcnNpb246YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgIHBocFZlcnNpb246IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgaW1wb3J0U2l0ZTogYXN5bmMgKF9wYXJlbnQ6IGFueSwgYXJnczogeyBpbnB1dDogeyB6aXBQYXRoOiBzdHJpbmc7IHNpdGVOYW1lPzogc3RyaW5nIH0gfSkgPT4ge1xuICAgICAgICBjb25zdCB7IHppcFBhdGgsIHNpdGVOYW1lIH0gPSBhcmdzLmlucHV0O1xuICAgICAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoemlwUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFppcCBmaWxlIG5vdCBmb3VuZDogJHt6aXBQYXRofWAsXG4gICAgICAgICAgICAgIHNpdGVJZDogbnVsbCxcbiAgICAgICAgICAgICAgc2l0ZU5hbWU6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBJbXBvcnRpbmcgc2l0ZSBmcm9tICR7emlwUGF0aH1gKTtcblxuICAgICAgICAgIGlmICghaW1wb3J0U2l0ZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogJ0ltcG9ydCBzaXRlIHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICAgIHNpdGVJZDogbnVsbCxcbiAgICAgICAgICAgICAgc2l0ZU5hbWU6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGltcG9ydFNpdGVTZXJ2aWNlLnJ1bih7XG4gICAgICAgICAgICB6aXBQYXRoLFxuICAgICAgICAgICAgc2l0ZU5hbWU6IHNpdGVOYW1lIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgaW1wb3J0ZWQgc2l0ZTogJHtyZXN1bHQubmFtZX1gKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBzaXRlSWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgIHNpdGVOYW1lOiByZXN1bHQubmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gaW1wb3J0IHNpdGU6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgIHNpdGVJZDogbnVsbCxcbiAgICAgICAgICAgIHNpdGVOYW1lOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFBoYXNlIDk6IFNpdGUgQ29uZmlndXJhdGlvbiAmIERldiBUb29sc1xuICAgICAgdG9nZ2xlWGRlYnVnOiBhc3luYyAoX3BhcmVudDogYW55LCBhcmdzOiB7IGlucHV0OiB7IHNpdGVJZDogc3RyaW5nOyBlbmFibGVkOiBib29sZWFuIH0gfSkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCwgZW5hYmxlZCB9ID0gYXJncy5pbnB1dDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgICAgZW5hYmxlZDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gJHtlbmFibGVkID8gJ0VuYWJsaW5nJyA6ICdEaXNhYmxpbmcnfSBYZGVidWcgZm9yICR7c2l0ZS5uYW1lfWBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBzaXRlJ3MgeGRlYnVnRW5hYmxlZCBwcm9wZXJ0eVxuICAgICAgICAgIGF3YWl0IHNpdGVEYXRhLnVwZGF0ZVNpdGUoc2l0ZUlkLCB7IHhkZWJ1Z0VuYWJsZWQ6IGVuYWJsZWQgfSk7XG5cbiAgICAgICAgICAvLyBSZXN0YXJ0IHRoZSBzaXRlIGlmIGl0J3MgcnVubmluZyB0byBhcHBseSB0aGUgY2hhbmdlXG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc2l0ZVByb2Nlc3NNYW5hZ2VyLmdldFNpdGVTdGF0dXMoc2l0ZSk7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gUmVzdGFydGluZyBzaXRlIHRvIGFwcGx5IFhkZWJ1ZyBjaGFuZ2VgKTtcbiAgICAgICAgICAgIGF3YWl0IHNpdGVQcm9jZXNzTWFuYWdlci5yZXN0YXJ0KHNpdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIFN1Y2Nlc3NmdWxseSAke2VuYWJsZWQgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnfSBYZGVidWdgXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBlbmFibGVkLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byB0b2dnbGUgWGRlYnVnOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBlbmFibGVkOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGdldFNpdGVMb2dzOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczogeyBpbnB1dDogeyBzaXRlSWQ6IHN0cmluZzsgbG9nVHlwZT86IHN0cmluZzsgbGluZXM/OiBudW1iZXIgfSB9XG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIGxvZ1R5cGUgPSAncGhwJywgbGluZXMgPSAxMDAgfSA9IGFyZ3MuaW5wdXQ7XG4gICAgICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICAgICAgY29uc3QgZnNQcm9taXNlcyA9IGZzLnByb21pc2VzO1xuICAgICAgICBjb25zdCBwYXRoTW9kdWxlID0gcmVxdWlyZSgncGF0aCcpO1xuXG4gICAgICAgIC8vIEhlbHBlciBmb3IgYXN5bmMgZmlsZSBleGlzdGVuY2UgY2hlY2tcbiAgICAgICAgY29uc3QgZmlsZUV4aXN0cyA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZzUHJvbWlzZXMuYWNjZXNzKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBIZWxwZXIgdG8gcmVhZCBsYXN0IE4gbGluZXMgb2YgYSBmaWxlXG4gICAgICAgIGNvbnN0IHJlYWRMYXN0TGluZXMgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZywgbnVtTGluZXM6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmc1Byb21pc2VzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICAgIGNvbnN0IGxvZ0xpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICByZXR1cm4gbG9nTGluZXMuc2xpY2UoLW51bUxpbmVzKS5qb2luKCdcXG4nKSB8fCAnKGVtcHR5KSc7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgICBsb2dzOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEdldHRpbmcgJHtsb2dUeXBlfSBsb2dzIGZvciAke3NpdGUubmFtZX1gKTtcblxuICAgICAgICAgIGNvbnN0IGxvZ3M6IEFycmF5PHsgdHlwZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmc7IHBhdGg6IHN0cmluZyB9PiA9IFtdO1xuICAgICAgICAgIGNvbnN0IGxvZ3NEaXIgPSBwYXRoTW9kdWxlLmpvaW4oc2l0ZS5wYXRoLCAnbG9ncycpO1xuXG4gICAgICAgICAgY29uc3QgbG9nRmlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgICAgICAgICAgIHBocDogWydwaHAnLCAncGhwLWZwbSddLFxuICAgICAgICAgICAgbmdpbng6IFsnbmdpbngnXSxcbiAgICAgICAgICAgIG15c3FsOiBbJ215c3FsJ10sXG4gICAgICAgICAgICBhbGw6IFsncGhwJywgJ3BocC1mcG0nLCAnbmdpbngnLCAnbXlzcWwnXSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgdGFyZ2V0TG9ncyA9IGxvZ0ZpbGVzW2xvZ1R5cGVdIHx8IGxvZ0ZpbGVzLnBocDtcblxuICAgICAgICAgIGZvciAoY29uc3QgbG9nTmFtZSBvZiB0YXJnZXRMb2dzKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgZXJyb3IgYW5kIGFjY2VzcyBsb2dzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1ZmZpeCBvZiBbJ2Vycm9yLmxvZycsICdhY2Nlc3MubG9nJywgJy5sb2cnXSkge1xuICAgICAgICAgICAgICBjb25zdCBsb2dQYXRoID0gcGF0aE1vZHVsZS5qb2luKFxuICAgICAgICAgICAgICAgIGxvZ3NEaXIsXG4gICAgICAgICAgICAgICAgYCR7bG9nTmFtZX0ke3N1ZmZpeCA9PT0gJy5sb2cnID8gJycgOiAnLyd9JHtzdWZmaXh9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zdCBhbHRMb2dQYXRoID0gcGF0aE1vZHVsZS5qb2luKGxvZ3NEaXIsIGAke2xvZ05hbWV9JHtzdWZmaXh9YCk7XG5cbiAgICAgICAgICAgICAgbGV0IGZpbmFsUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChhd2FpdCBmaWxlRXhpc3RzKGxvZ1BhdGgpKSB7XG4gICAgICAgICAgICAgICAgZmluYWxQYXRoID0gbG9nUGF0aDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhd2FpdCBmaWxlRXhpc3RzKGFsdExvZ1BhdGgpKSB7XG4gICAgICAgICAgICAgICAgZmluYWxQYXRoID0gYWx0TG9nUGF0aDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChmaW5hbFBhdGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZExhc3RMaW5lcyhmaW5hbFBhdGgsIGxpbmVzKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgbG9ncy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogbG9nTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogZmluYWxQYXRoLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxvZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gZmluZCBhbnkgbG9nIGZpbGVzXG4gICAgICAgICAgICBpZiAoYXdhaXQgZmlsZUV4aXN0cyhsb2dzRGlyKSkge1xuICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZnNQcm9taXNlcy5yZWFkZGlyKGxvZ3NEaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YkRpciA9IHBhdGhNb2R1bGUuam9pbihsb2dzRGlyLCBlbnRyeS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YkVudHJpZXMgPSBhd2FpdCBmc1Byb21pc2VzLnJlYWRkaXIoc3ViRGlyKTtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViRmlsZSBvZiBzdWJFbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJGaWxlLmVuZHNXaXRoKCcubG9nJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2dQYXRoID0gcGF0aE1vZHVsZS5qb2luKHN1YkRpciwgc3ViRmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRMYXN0TGluZXMobG9nUGF0aCwgbGluZXMpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlbnRyeS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBsb2dQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5uYW1lLmVuZHNXaXRoKCcubG9nJykpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ1BhdGggPSBwYXRoTW9kdWxlLmpvaW4obG9nc0RpciwgZW50cnkubmFtZSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZExhc3RMaW5lcyhsb2dQYXRoLCBsaW5lcyk7XG4gICAgICAgICAgICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICBsb2dzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVudHJ5Lm5hbWUucmVwbGFjZSgnLmxvZycsICcnKSxcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGxvZ1BhdGgsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBsb2dzLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBnZXQgbG9nczpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgbG9nczogW10sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gUGhhc2UgMTA6IENsb3VkIEJhY2t1cCBNdXRhdGlvbnNcbiAgICAgIGNyZWF0ZUJhY2t1cDogYXN5bmMgKFxuICAgICAgICBfcGFyZW50OiBhbnksXG4gICAgICAgIGFyZ3M6IHsgc2l0ZUlkOiBzdHJpbmc7IHByb3ZpZGVyOiBzdHJpbmc7IG5vdGU/OiBzdHJpbmcgfVxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBwcm92aWRlciwgbm90ZSB9ID0gYXJncztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBDcmVhdGluZyBiYWNrdXAgZm9yIHNpdGUgJHtzaXRlSWR9IHRvICR7cHJvdmlkZXJ9YCk7XG5cbiAgICAgICAgICAvLyBHZXQgc2l0ZVxuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZXQgcHJvdmlkZXJzIGZyb20gQ2xvdWQgQmFja3VwcyBhZGRvblxuICAgICAgICAgIGNvbnN0IHByb3ZpZGVycyA9IGF3YWl0IGdldEJhY2t1cFByb3ZpZGVycygpO1xuICAgICAgICAgIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAnTm8gY2xvdWQgc3RvcmFnZSBwcm92aWRlcnMgY29uZmlndXJlZC4gQ29ubmVjdCBHb29nbGUgRHJpdmUgb3IgRHJvcGJveCBpbiBMb2NhbCBIdWIuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmluZCB0aGUgbWF0Y2hpbmcgcHJvdmlkZXIgKG1hcCAnZ29vZ2xlRHJpdmUnIHRvICdnb29nbGUnIGZvciB0aGUgYWRkb24pXG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IGdvb2dsZURyaXZlOiAnZ29vZ2xlJywgZHJvcGJveDogJ2Ryb3Bib3gnIH07XG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJJZCA9IHByb3ZpZGVyTWFwW3Byb3ZpZGVyXSB8fCBwcm92aWRlcjtcbiAgICAgICAgICBjb25zdCBtYXRjaGVkUHJvdmlkZXIgPSBwcm92aWRlcnMuZmluZCgocDogYW55KSA9PiBwLmlkID09PSBwcm92aWRlcklkKTtcblxuICAgICAgICAgIGlmICghbWF0Y2hlZFByb3ZpZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogYFByb3ZpZGVyICcke3Byb3ZpZGVyfScgbm90IGNvbmZpZ3VyZWQuIEF2YWlsYWJsZTogJHtwcm92aWRlcnMubWFwKChwOiBhbnkpID0+IHAubmFtZSkuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXAgdGhlIEh1YiBwcm92aWRlciBJRCB0byByY2xvbmUgYmFja2VuZCBuYW1lXG4gICAgICAgICAgLy8gVGhlIGFkZG9uIHVzZXMgJ2dvb2dsZScgaW4gZW5hYmxlZC1wcm92aWRlcnMgYnV0IGV4cGVjdHMgJ2RyaXZlJyBmb3IgYmFja3VwIG9wZXJhdGlvbnNcbiAgICAgICAgICBjb25zdCBiYWNrdXBQcm92aWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgZ29vZ2xlOiAnZHJpdmUnLCBkcm9wYm94OiAnZHJvcGJveCcgfTtcbiAgICAgICAgICBjb25zdCBiYWNrdXBQcm92aWRlcklkID0gYmFja3VwUHJvdmlkZXJNYXBbbWF0Y2hlZFByb3ZpZGVyLmlkXSB8fCBtYXRjaGVkUHJvdmlkZXIuaWQ7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gVXNpbmcgYmFja3VwIHByb3ZpZGVyIElEOiAke2JhY2t1cFByb3ZpZGVySWR9IChmcm9tICR7bWF0Y2hlZFByb3ZpZGVyLmlkfSlgXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIENyZWF0ZSBiYWNrdXAgdmlhIElQQyAodXNlIGxvbmcgdGltZW91dCBmb3IgYmFja3VwIG9wZXJhdGlvbnMpXG4gICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBub3RlIHx8ICdCYWNrdXAgY3JlYXRlZCB2aWEgTUNQJztcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnZva2VCYWNrdXBJUEMoXG4gICAgICAgICAgICAnYmFja3VwczpiYWNrdXAtc2l0ZScsXG4gICAgICAgICAgICBCQUNLVVBfSVBDX1RJTUVPVVQsXG4gICAgICAgICAgICBzaXRlSWQsXG4gICAgICAgICAgICBiYWNrdXBQcm92aWRlcklkLFxuICAgICAgICAgICAgZGVzY3JpcHRpb25cbiAgICAgICAgICApO1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBCYWNrdXAgSVBDIHJlc3VsdDogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIHRvcC1sZXZlbCBJUEMgZXJyb3JcbiAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yLm1lc3NhZ2UgfHwgJ0JhY2t1cCBjcmVhdGlvbiBmYWlsZWQnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBVbndyYXAgbmVzdGVkIHJlc3VsdCBzdHJ1Y3R1cmUgLSB0aGUgYWN0dWFsIHJlc3VsdCBpcyBhdCByZXN1bHQucmVzdWx0XG4gICAgICAgICAgY29uc3QgYmFja3VwUmVzdWx0ID0gcmVzdWx0LnJlc3VsdDtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBiYWNrdXAgcmVzdWx0IGNvbnRhaW5zIGFuIGVycm9yIChuZXN0ZWQgYXQgcmVzdWx0LnJlc3VsdC5lcnJvcilcbiAgICAgICAgICBpZiAoYmFja3VwUmVzdWx0Py5lcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNc2cgPVxuICAgICAgICAgICAgICBiYWNrdXBSZXN1bHQuZXJyb3IubWVzc2FnZSB8fCBiYWNrdXBSZXN1bHQuZXJyb3Iub3JpZ2luYWw/Lm1lc3NhZ2UgfHwgJ0JhY2t1cCBmYWlsZWQnO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIHNuYXBzaG90SWQ6IG51bGwsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogbnVsbCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yTXNnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUcnkgdG8gZXh0cmFjdCBzbmFwc2hvdCBJRCAobWF5IGJlIG5lc3RlZCBpbiByZXN1bHQucmVzdWx0LnJlc3VsdClcbiAgICAgICAgICBsZXQgc25hcHNob3RJZCA9IGJhY2t1cFJlc3VsdD8uc25hcHNob3RJZCB8fCBiYWNrdXBSZXN1bHQ/LmlkO1xuICAgICAgICAgIGlmICghc25hcHNob3RJZCAmJiBiYWNrdXBSZXN1bHQ/LnJlc3VsdCkge1xuICAgICAgICAgICAgc25hcHNob3RJZCA9IGJhY2t1cFJlc3VsdC5yZXN1bHQuc25hcHNob3RJZCB8fCBiYWNrdXBSZXN1bHQucmVzdWx0LmlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIElmIG5vIGVycm9yIHdhcyByZXR1cm5lZCwgdGhlIGJhY2t1cCBzdWNjZWVkZWQgZXZlbiBpZiBubyBzbmFwc2hvdCBJRCBpcyBwcm92aWRlZFxuICAgICAgICAgIC8vIFRoZSBhZGRvbiBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlIHNuYXBzaG90IElEIGluIGl0cyBJUEMgcmVzcG9uc2VcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIHNuYXBzaG90SWQ6IHNuYXBzaG90SWQgfHwgbnVsbCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgbWVzc2FnZTogYEJhY2t1cCBjcmVhdGVkIHN1Y2Nlc3NmdWxseSB0byAke21hdGNoZWRQcm92aWRlci5uYW1lfWAsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gY3JlYXRlIGJhY2t1cDpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgc25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbnVsbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgcmVzdG9yZUJhY2t1cDogYXN5bmMgKFxuICAgICAgICBfcGFyZW50OiBhbnksXG4gICAgICAgIGFyZ3M6IHsgc2l0ZUlkOiBzdHJpbmc7IHByb3ZpZGVyOiBzdHJpbmc7IHNuYXBzaG90SWQ6IHN0cmluZzsgY29uZmlybT86IGJvb2xlYW4gfVxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBwcm92aWRlciwgc25hcHNob3RJZCwgY29uZmlybSA9IGZhbHNlIH0gPSBhcmdzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFJlc3RvcmluZyBiYWNrdXAgJHtzbmFwc2hvdElkfSBmb3Igc2l0ZSAke3NpdGVJZH1gKTtcblxuICAgICAgICAgIC8vIENoZWNrIGNvbmZpcm1hdGlvblxuICAgICAgICAgIGlmICghY29uZmlybSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICdSZXN0b3JlIHJlcXVpcmVzIGNvbmZpcm09dHJ1ZSB0byBwcmV2ZW50IGFjY2lkZW50YWwgZGF0YSBsb3NzLiBDdXJyZW50IHNpdGUgZmlsZXMgYW5kIGRhdGFiYXNlIHdpbGwgYmUgb3ZlcndyaXR0ZW4uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IHNpdGVcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShzaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdldCBwcm92aWRlcnMgZnJvbSBDbG91ZCBCYWNrdXBzIGFkZG9uXG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJzID0gYXdhaXQgZ2V0QmFja3VwUHJvdmlkZXJzKCk7XG4gICAgICAgICAgaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAnTm8gY2xvdWQgc3RvcmFnZSBwcm92aWRlcnMgY29uZmlndXJlZC4gQ29ubmVjdCBHb29nbGUgRHJpdmUgb3IgRHJvcGJveCBpbiBMb2NhbCBIdWIuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmluZCB0aGUgbWF0Y2hpbmcgcHJvdmlkZXIgKG1hcCAnZ29vZ2xlRHJpdmUnIHRvICdnb29nbGUnIGZvciB0aGUgYWRkb24pXG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IGdvb2dsZURyaXZlOiAnZ29vZ2xlJywgZHJvcGJveDogJ2Ryb3Bib3gnIH07XG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJJZCA9IHByb3ZpZGVyTWFwW3Byb3ZpZGVyXSB8fCBwcm92aWRlcjtcbiAgICAgICAgICBjb25zdCBtYXRjaGVkUHJvdmlkZXIgPSBwcm92aWRlcnMuZmluZCgocDogYW55KSA9PiBwLmlkID09PSBwcm92aWRlcklkKTtcblxuICAgICAgICAgIGlmICghbWF0Y2hlZFByb3ZpZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IGBQcm92aWRlciAnJHtwcm92aWRlcn0nIG5vdCBjb25maWd1cmVkLiBBdmFpbGFibGU6ICR7cHJvdmlkZXJzLm1hcCgocDogYW55KSA9PiBwLm5hbWUpLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWFwIHRoZSBIdWIgcHJvdmlkZXIgSUQgdG8gcmNsb25lIGJhY2tlbmQgbmFtZVxuICAgICAgICAgIGNvbnN0IGJhY2t1cFByb3ZpZGVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBnb29nbGU6ICdkcml2ZScsIGRyb3Bib3g6ICdkcm9wYm94JyB9O1xuICAgICAgICAgIGNvbnN0IGJhY2t1cFByb3ZpZGVySWQgPSBiYWNrdXBQcm92aWRlck1hcFttYXRjaGVkUHJvdmlkZXIuaWRdIHx8IG1hdGNoZWRQcm92aWRlci5pZDtcblxuICAgICAgICAgIC8vIFJlc3RvcmUgYmFja3VwIHZpYSBJUEMgKHVzZSBsb25nIHRpbWVvdXQgZm9yIHJlc3RvcmUgb3BlcmF0aW9ucylcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnZva2VCYWNrdXBJUEMoXG4gICAgICAgICAgICAnYmFja3VwczpyZXN0b3JlLWJhY2t1cCcsXG4gICAgICAgICAgICBCQUNLVVBfSVBDX1RJTUVPVVQsXG4gICAgICAgICAgICBzaXRlSWQsXG4gICAgICAgICAgICBiYWNrdXBQcm92aWRlcklkLFxuICAgICAgICAgICAgc25hcHNob3RJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFJlc3RvcmUgcmVzdWx0OiAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG5cbiAgICAgICAgICAvLyBDaGVjayBmb3IgZXJyb3JzIC0gY2FuIGJlIGF0IHJlc3VsdC5lcnJvciBvciByZXN1bHQucmVzdWx0LmVycm9yIChJUEMgYXN5bmMgcGF0dGVybilcbiAgICAgICAgICBjb25zdCBpcGNFcnJvciA9IHJlc3VsdC5lcnJvciB8fCByZXN1bHQucmVzdWx0Py5lcnJvcjtcbiAgICAgICAgICBpZiAoaXBjRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgIHR5cGVvZiBpcGNFcnJvciA9PT0gJ3N0cmluZycgPyBpcGNFcnJvciA6IGlwY0Vycm9yLm1lc3NhZ2UgfHwgJ1Jlc3RvcmUgZmFpbGVkJztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBTaXRlIHJlc3RvcmVkIGZyb20gYmFja3VwICR7c25hcHNob3RJZH1gLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIHJlc3RvcmUgYmFja3VwOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGRlbGV0ZUJhY2t1cDogYXN5bmMgKFxuICAgICAgICBfcGFyZW50OiBhbnksXG4gICAgICAgIGFyZ3M6IHsgc2l0ZUlkOiBzdHJpbmc7IHByb3ZpZGVyOiBzdHJpbmc7IHNuYXBzaG90SWQ6IHN0cmluZzsgY29uZmlybT86IGJvb2xlYW4gfVxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBwcm92aWRlciwgc25hcHNob3RJZCwgY29uZmlybSA9IGZhbHNlIH0gPSBhcmdzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIERlbGV0aW5nIGJhY2t1cCAke3NuYXBzaG90SWR9IGZvciBzaXRlICR7c2l0ZUlkfWApO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgY29uZmlybWF0aW9uXG4gICAgICAgICAgaWYgKCFjb25maXJtKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGVsZXRlZFNuYXBzaG90SWQ6IG51bGwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiAnRGVsZXRlIHJlcXVpcmVzIGNvbmZpcm09dHJ1ZSB0byBwcmV2ZW50IGFjY2lkZW50YWwgZGVsZXRpb24uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IHNpdGVcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShzaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGRlbGV0ZWRTbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZXQgcHJvdmlkZXJzIGZyb20gQ2xvdWQgQmFja3VwcyBhZGRvblxuICAgICAgICAgIGNvbnN0IHByb3ZpZGVycyA9IGF3YWl0IGdldEJhY2t1cFByb3ZpZGVycygpO1xuICAgICAgICAgIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGVsZXRlZFNuYXBzaG90SWQ6IG51bGwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICdObyBjbG91ZCBzdG9yYWdlIHByb3ZpZGVycyBjb25maWd1cmVkLiBDb25uZWN0IEdvb2dsZSBEcml2ZSBvciBEcm9wYm94IGluIExvY2FsIEh1Yi4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGaW5kIHRoZSBtYXRjaGluZyBwcm92aWRlciAobWFwICdnb29nbGVEcml2ZScgdG8gJ2dvb2dsZScgZm9yIHRoZSBhZGRvbilcbiAgICAgICAgICBjb25zdCBwcm92aWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgZ29vZ2xlRHJpdmU6ICdnb29nbGUnLCBkcm9wYm94OiAnZHJvcGJveCcgfTtcbiAgICAgICAgICBjb25zdCBwcm92aWRlcklkID0gcHJvdmlkZXJNYXBbcHJvdmlkZXJdIHx8IHByb3ZpZGVyO1xuICAgICAgICAgIGNvbnN0IG1hdGNoZWRQcm92aWRlciA9IHByb3ZpZGVycy5maW5kKChwOiBhbnkpID0+IHAuaWQgPT09IHByb3ZpZGVySWQpO1xuXG4gICAgICAgICAgaWYgKCFtYXRjaGVkUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBkZWxldGVkU25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IGBQcm92aWRlciAnJHtwcm92aWRlcn0nIG5vdCBjb25maWd1cmVkLiBBdmFpbGFibGU6ICR7cHJvdmlkZXJzLm1hcCgocDogYW55KSA9PiBwLm5hbWUpLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWFwIHRoZSBIdWIgcHJvdmlkZXIgSUQgdG8gcmNsb25lIGJhY2tlbmQgbmFtZVxuICAgICAgICAgIGNvbnN0IGJhY2t1cFByb3ZpZGVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBnb29nbGU6ICdkcml2ZScsIGRyb3Bib3g6ICdkcm9wYm94JyB9O1xuICAgICAgICAgIGNvbnN0IGJhY2t1cFByb3ZpZGVySWQgPSBiYWNrdXBQcm92aWRlck1hcFttYXRjaGVkUHJvdmlkZXIuaWRdIHx8IG1hdGNoZWRQcm92aWRlci5pZDtcblxuICAgICAgICAgIC8vIFRyeSB0byBkZWxldGUgYmFja3VwIHZpYSBJUEMgKG1heSBub3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBhZGRvbilcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnZva2VCYWNrdXBJUEMoXG4gICAgICAgICAgICAnYmFja3VwczpkZWxldGUtYmFja3VwJyxcbiAgICAgICAgICAgIERFRkFVTFRfSVBDX1RJTUVPVVQsXG4gICAgICAgICAgICBzaXRlSWQsXG4gICAgICAgICAgICBiYWNrdXBQcm92aWRlcklkLFxuICAgICAgICAgICAgc25hcHNob3RJZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgSVBDIGNoYW5uZWwgZG9lc24ndCBleGlzdCBvciBpc24ndCBzdXBwb3J0ZWQsIHByb3ZpZGUgaGVscGZ1bCBtZXNzYWdlXG4gICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCd0aW1lZCBvdXQnKSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlbGV0ZWRTbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgICAnRGVsZXRlIGJhY2t1cCBvcGVyYXRpb24gaXMgbm90IGF2YWlsYWJsZSB2aWEgTUNQLiBQbGVhc2UgZGVsZXRlIGJhY2t1cHMgdGhyb3VnaCB0aGUgTG9jYWwgVUkuJyxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBkZWxldGVkU25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IHJlc3VsdC5lcnJvci5tZXNzYWdlIHx8ICdEZWxldGUgZmFpbGVkJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVkU25hcHNob3RJZDogc25hcHNob3RJZCxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdCYWNrdXAgZGVsZXRlZCcsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gZGVsZXRlIGJhY2t1cDpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZGVsZXRlZFNuYXBzaG90SWQ6IG51bGwsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGRvd25sb2FkQmFja3VwOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczogeyBzaXRlSWQ6IHN0cmluZzsgcHJvdmlkZXI6IHN0cmluZzsgc25hcHNob3RJZDogc3RyaW5nIH1cbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCwgcHJvdmlkZXIsIHNuYXBzaG90SWQgfSA9IGFyZ3M7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gRG93bmxvYWRpbmcgYmFja3VwICR7c25hcHNob3RJZH0gZm9yIHNpdGUgJHtzaXRlSWR9YCk7XG5cbiAgICAgICAgICAvLyBHZXQgc2l0ZVxuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZmlsZVBhdGg6IG51bGwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdldCBwcm92aWRlcnMgZnJvbSBDbG91ZCBCYWNrdXBzIGFkZG9uXG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJzID0gYXdhaXQgZ2V0QmFja3VwUHJvdmlkZXJzKCk7XG4gICAgICAgICAgaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBmaWxlUGF0aDogbnVsbCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ05vIGNsb3VkIHN0b3JhZ2UgcHJvdmlkZXJzIGNvbmZpZ3VyZWQuIENvbm5lY3QgR29vZ2xlIERyaXZlIG9yIERyb3Bib3ggaW4gTG9jYWwgSHViLicsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZpbmQgdGhlIG1hdGNoaW5nIHByb3ZpZGVyIChtYXAgJ2dvb2dsZURyaXZlJyB0byAnZ29vZ2xlJyBmb3IgdGhlIGFkZG9uKVxuICAgICAgICAgIGNvbnN0IHByb3ZpZGVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBnb29nbGVEcml2ZTogJ2dvb2dsZScsIGRyb3Bib3g6ICdkcm9wYm94JyB9O1xuICAgICAgICAgIGNvbnN0IHByb3ZpZGVySWQgPSBwcm92aWRlck1hcFtwcm92aWRlcl0gfHwgcHJvdmlkZXI7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlZFByb3ZpZGVyID0gcHJvdmlkZXJzLmZpbmQoKHA6IGFueSkgPT4gcC5pZCA9PT0gcHJvdmlkZXJJZCk7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoZWRQcm92aWRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGZpbGVQYXRoOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogYFByb3ZpZGVyICcke3Byb3ZpZGVyfScgbm90IGNvbmZpZ3VyZWQuIEF2YWlsYWJsZTogJHtwcm92aWRlcnMubWFwKChwOiBhbnkpID0+IHAubmFtZSkuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXAgdGhlIEh1YiBwcm92aWRlciBJRCB0byByY2xvbmUgYmFja2VuZCBuYW1lXG4gICAgICAgICAgY29uc3QgYmFja3VwUHJvdmlkZXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IGdvb2dsZTogJ2RyaXZlJywgZHJvcGJveDogJ2Ryb3Bib3gnIH07XG4gICAgICAgICAgY29uc3QgYmFja3VwUHJvdmlkZXJJZCA9IGJhY2t1cFByb3ZpZGVyTWFwW21hdGNoZWRQcm92aWRlci5pZF0gfHwgbWF0Y2hlZFByb3ZpZGVyLmlkO1xuXG4gICAgICAgICAgLy8gVHJ5IHRvIGRvd25sb2FkIGJhY2t1cCB2aWEgSVBDICh1c2UgbG9uZyB0aW1lb3V0IGZvciBkb3dubG9hZHMpXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW52b2tlQmFja3VwSVBDKFxuICAgICAgICAgICAgJ2JhY2t1cHM6ZG93bmxvYWQtYmFja3VwJyxcbiAgICAgICAgICAgIEJBQ0tVUF9JUENfVElNRU9VVCxcbiAgICAgICAgICAgIHNpdGVJZCxcbiAgICAgICAgICAgIGJhY2t1cFByb3ZpZGVySWQsXG4gICAgICAgICAgICBzbmFwc2hvdElkXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBJUEMgY2hhbm5lbCBkb2Vzbid0IGV4aXN0IG9yIGlzbid0IHN1cHBvcnRlZCwgcHJvdmlkZSBoZWxwZnVsIG1lc3NhZ2VcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ3RpbWVkIG91dCcpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgZmlsZVBhdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAgICdEb3dubG9hZCBiYWNrdXAgb3BlcmF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdmlhIE1DUC4gUGxlYXNlIGRvd25sb2FkIGJhY2t1cHMgdGhyb3VnaCB0aGUgTG9jYWwgVUkuJyxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBmaWxlUGF0aDogbnVsbCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IHJlc3VsdC5lcnJvci5tZXNzYWdlIHx8ICdEb3dubG9hZCBmYWlsZWQnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVQYXRoOiByZXN1bHQucmVzdWx0Py5maWxlUGF0aCB8fCBudWxsLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0JhY2t1cCBkb3dubG9hZGVkIHRvIERvd25sb2FkcyBmb2xkZXInLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGRvd25sb2FkIGJhY2t1cDpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZmlsZVBhdGg6IG51bGwsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGVkaXRCYWNrdXBOb3RlOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczogeyBzaXRlSWQ6IHN0cmluZzsgcHJvdmlkZXI6IHN0cmluZzsgc25hcHNob3RJZDogc3RyaW5nOyBub3RlOiBzdHJpbmcgfVxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBwcm92aWRlciwgc25hcHNob3RJZCwgbm90ZSB9ID0gYXJncztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBFZGl0aW5nIGJhY2t1cCBub3RlIGZvciAke3NuYXBzaG90SWR9YCk7XG5cbiAgICAgICAgICAvLyBHZXQgc2l0ZVxuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgbm90ZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IHByb3ZpZGVycyBmcm9tIENsb3VkIEJhY2t1cHMgYWRkb25cbiAgICAgICAgICBjb25zdCBwcm92aWRlcnMgPSBhd2FpdCBnZXRCYWNrdXBQcm92aWRlcnMoKTtcbiAgICAgICAgICBpZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIHNuYXBzaG90SWQ6IG51bGwsXG4gICAgICAgICAgICAgIG5vdGU6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICdObyBjbG91ZCBzdG9yYWdlIHByb3ZpZGVycyBjb25maWd1cmVkLiBDb25uZWN0IEdvb2dsZSBEcml2ZSBvciBEcm9wYm94IGluIExvY2FsIEh1Yi4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGaW5kIHRoZSBtYXRjaGluZyBwcm92aWRlciAobWFwICdnb29nbGVEcml2ZScgdG8gJ2dvb2dsZScgZm9yIHRoZSBhZGRvbilcbiAgICAgICAgICBjb25zdCBwcm92aWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgZ29vZ2xlRHJpdmU6ICdnb29nbGUnLCBkcm9wYm94OiAnZHJvcGJveCcgfTtcbiAgICAgICAgICBjb25zdCBwcm92aWRlcklkID0gcHJvdmlkZXJNYXBbcHJvdmlkZXJdIHx8IHByb3ZpZGVyO1xuICAgICAgICAgIGNvbnN0IG1hdGNoZWRQcm92aWRlciA9IHByb3ZpZGVycy5maW5kKChwOiBhbnkpID0+IHAuaWQgPT09IHByb3ZpZGVySWQpO1xuXG4gICAgICAgICAgaWYgKCFtYXRjaGVkUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICBub3RlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogYFByb3ZpZGVyICcke3Byb3ZpZGVyfScgbm90IGNvbmZpZ3VyZWQuIEF2YWlsYWJsZTogJHtwcm92aWRlcnMubWFwKChwOiBhbnkpID0+IHAubmFtZSkuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXAgdGhlIEh1YiBwcm92aWRlciBJRCB0byByY2xvbmUgYmFja2VuZCBuYW1lXG4gICAgICAgICAgY29uc3QgYmFja3VwUHJvdmlkZXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IGdvb2dsZTogJ2RyaXZlJywgZHJvcGJveDogJ2Ryb3Bib3gnIH07XG4gICAgICAgICAgY29uc3QgYmFja3VwUHJvdmlkZXJJZCA9IGJhY2t1cFByb3ZpZGVyTWFwW21hdGNoZWRQcm92aWRlci5pZF0gfHwgbWF0Y2hlZFByb3ZpZGVyLmlkO1xuXG4gICAgICAgICAgLy8gVHJ5IHRvIGVkaXQgYmFja3VwIG5vdGUgdmlhIElQQyAocXVpY2sgbWV0YWRhdGEgb3BlcmF0aW9uKVxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGludm9rZUJhY2t1cElQQyhcbiAgICAgICAgICAgICdiYWNrdXBzOmVkaXQtbm90ZScsXG4gICAgICAgICAgICBERUZBVUxUX0lQQ19USU1FT1VULFxuICAgICAgICAgICAgc2l0ZUlkLFxuICAgICAgICAgICAgYmFja3VwUHJvdmlkZXJJZCxcbiAgICAgICAgICAgIHNuYXBzaG90SWQsXG4gICAgICAgICAgICBub3RlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBJUEMgY2hhbm5lbCBkb2Vzbid0IGV4aXN0IG9yIGlzbid0IHN1cHBvcnRlZCwgcHJvdmlkZSBoZWxwZnVsIG1lc3NhZ2VcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ3RpbWVkIG91dCcpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgc25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgICBub3RlOiBudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICAgJ0VkaXQgYmFja3VwIG5vdGUgb3BlcmF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdmlhIE1DUC4gUGxlYXNlIGVkaXQgYmFja3VwIG5vdGVzIHRocm91Z2ggdGhlIExvY2FsIFVJLicsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgbm90ZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IHJlc3VsdC5lcnJvci5tZXNzYWdlIHx8ICdFZGl0IG5vdGUgZmFpbGVkJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBzbmFwc2hvdElkLFxuICAgICAgICAgICAgbm90ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBlZGl0IGJhY2t1cCBub3RlOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBzbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgbm90ZTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBQaGFzZSAxMTogV1AgRW5naW5lIENvbm5lY3RcbiAgICAgIHdwZUF1dGhlbnRpY2F0ZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBJbml0aWF0aW5nIFdQIEVuZ2luZSBhdXRoZW50aWNhdGlvbmApO1xuXG4gICAgICAgICAgaWYgKCF3cGVPQXV0aFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlbWFpbDogbnVsbCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6ICdXUCBFbmdpbmUgT0F1dGggc2VydmljZSBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVHJpZ2dlciBPQXV0aCBmbG93IC0gdGhpcyB3aWxsIG9wZW4gYnJvd3NlciBmb3IgdXNlciBjb25zZW50XG4gICAgICAgICAgLy8gYXV0aGVudGljYXRlKCkgcmV0dXJucyBPQXV0aFRva2VucyBvbiBzdWNjZXNzXG4gICAgICAgICAgY29uc3QgdG9rZW5zID0gYXdhaXQgd3BlT0F1dGhTZXJ2aWNlLmF1dGhlbnRpY2F0ZSgpO1xuXG4gICAgICAgICAgaWYgKHRva2VucyAmJiB0b2tlbnMuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIC8vIFRyeSB0byBnZXQgdXNlciBlbWFpbCBmcm9tIENBUElcbiAgICAgICAgICAgIGxldCBlbWFpbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoY2FwaVNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlciA9IGF3YWl0IGNhcGlTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgICAgICAgICAgZW1haWwgPSBjdXJyZW50VXNlcj8uZW1haWwgfHwgbnVsbDtcbiAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gVXNlciBpbmZvIG5vdCBhdmFpbGFibGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIFN1Y2Nlc3NmdWxseSBhdXRoZW50aWNhdGVkIHdpdGggV1BFJHtlbWFpbCA/IGAgYXMgJHtlbWFpbH1gIDogJyd9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnU3VjY2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZWQgd2l0aCBXUCBFbmdpbmUnLFxuICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlbWFpbDogbnVsbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdBdXRoZW50aWNhdGlvbiBpbml0aWF0ZWQuIFBsZWFzZSBjb21wbGV0ZSB0aGUgbG9naW4gaW4geW91ciBicm93c2VyLicsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBXUEUgYXV0aGVudGljYXRpb24gZmFpbGVkOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlbWFpbDogbnVsbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnQXV0aGVudGljYXRpb24gZmFpbGVkJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICB3cGVMb2dvdXQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gTG9nZ2luZyBvdXQgZnJvbSBXUCBFbmdpbmVgKTtcblxuICAgICAgICAgIGlmICghd3BlT0F1dGhTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6ICdXUCBFbmdpbmUgT0F1dGggc2VydmljZSBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY2xlYXJUb2tlbnMoKSBpcyB0aGUgbG9nb3V0IG1ldGhvZFxuICAgICAgICAgIGF3YWl0IHdwZU9BdXRoU2VydmljZS5jbGVhclRva2VucygpO1xuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFN1Y2Nlc3NmdWxseSBsb2dnZWQgb3V0IGZyb20gV1BFYCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnTG9nZ2VkIG91dCBmcm9tIFdQIEVuZ2luZScsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBXUEUgbG9nb3V0IGZhaWxlZDpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdMb2dvdXQgZmFpbGVkJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBQaGFzZSAxMWM6IFB1c2ggdG8gV1AgRW5naW5lXG4gICAgICBwdXNoVG9XcGU6IGFzeW5jIChcbiAgICAgICAgX3BhcmVudDogYW55LFxuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgbG9jYWxTaXRlSWQ6IHN0cmluZztcbiAgICAgICAgICByZW1vdGVJbnN0YWxsSWQ6IHN0cmluZztcbiAgICAgICAgICBpbmNsdWRlU3FsPzogYm9vbGVhbjtcbiAgICAgICAgICBjb25maXJtPzogYm9vbGVhbjtcbiAgICAgICAgfVxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgbG9jYWxTaXRlSWQsIHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbCA9IGZhbHNlLCBjb25maXJtID0gZmFsc2UgfSA9IGFyZ3M7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBQdXNoIHRvIFdQRTogc2l0ZT0ke2xvY2FsU2l0ZUlkfSwgcmVtb3RlPSR7cmVtb3RlSW5zdGFsbElkfSwgaW5jbHVkZVNxbD0ke2luY2x1ZGVTcWx9YFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBSZXF1aXJlIGNvbmZpcm1hdGlvbiBmb3IgcHVzaCBvcGVyYXRpb25zXG4gICAgICAgICAgaWYgKCFjb25maXJtKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ1B1c2ggcmVxdWlyZXMgY29uZmlybT10cnVlIHRvIHByZXZlbnQgYWNjaWRlbnRhbCBvdmVyd3JpdGVzLiBTZXQgY29uZmlybT10cnVlIHRvIHByb2NlZWQuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmVyaWZ5IHNpdGUgZXhpc3RzXG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUobG9jYWxTaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7bG9jYWxTaXRlSWR9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgV1BFIGNvbm5lY3Rpb24gZXhpc3RzXG4gICAgICAgICAgY29uc3Qgd3BlQ29ubmVjdGlvbiA9IHNpdGUuaG9zdENvbm5lY3Rpb25zPy5maW5kKChjOiBhbnkpID0+IGMuaG9zdElkID09PSAnd3BlJyk7XG4gICAgICAgICAgaWYgKCF3cGVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ1NpdGUgaXMgbm90IGxpbmtlZCB0byBXUCBFbmdpbmUuIFVzZSBDb25uZWN0IGluIExvY2FsIHRvIGxpbmsgdGhlIHNpdGUgZmlyc3QuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgcHVzaCBzZXJ2aWNlIGF2YWlsYWJpbGl0eVxuICAgICAgICAgIGlmICghd3BlUHVzaFNlcnZpY2UgfHwgdHlwZW9mIHdwZVB1c2hTZXJ2aWNlLnB1c2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogJ1dQRSBQdXNoIHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdldCBpbnN0YWxsIGRldGFpbHMgZnJvbSBDQVBJIHRvIGdldCByZXF1aXJlZCBwYXJhbWV0ZXJzXG4gICAgICAgICAgbGV0IGluc3RhbGxOYW1lID0gcmVtb3RlSW5zdGFsbElkO1xuICAgICAgICAgIGxldCBwcmltYXJ5RG9tYWluID0gJyc7XG4gICAgICAgICAgbGV0IGluc3RhbGxJZCA9ICcnO1xuXG4gICAgICAgICAgaWYgKGNhcGlTZXJ2aWNlICYmIHR5cGVvZiBjYXBpU2VydmljZS5nZXRJbnN0YWxsTGlzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFsbHMgPSBhd2FpdCBjYXBpU2VydmljZS5nZXRJbnN0YWxsTGlzdCgpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdJbnN0YWxsID0gaW5zdGFsbHM/LmZpbmQoXG4gICAgICAgICAgICAgIChpOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgaS5zaXRlPy5pZCA9PT0gd3BlQ29ubmVjdGlvbi5yZW1vdGVTaXRlSWQgJiZcbiAgICAgICAgICAgICAgICAoIXdwZUNvbm5lY3Rpb24ucmVtb3RlU2l0ZUVudiB8fCBpLmVudmlyb25tZW50ID09PSB3cGVDb25uZWN0aW9uLnJlbW90ZVNpdGVFbnYpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nSW5zdGFsbCkge1xuICAgICAgICAgICAgICBpbnN0YWxsTmFtZSA9IG1hdGNoaW5nSW5zdGFsbC5uYW1lO1xuICAgICAgICAgICAgICBwcmltYXJ5RG9tYWluID1cbiAgICAgICAgICAgICAgICBtYXRjaGluZ0luc3RhbGwucHJpbWFyeV9kb21haW4gfHxcbiAgICAgICAgICAgICAgICBtYXRjaGluZ0luc3RhbGwuY25hbWUgfHxcbiAgICAgICAgICAgICAgICBgJHttYXRjaGluZ0luc3RhbGwubmFtZX0ud3BlbmdpbmUuY29tYDtcbiAgICAgICAgICAgICAgaW5zdGFsbElkID0gbWF0Y2hpbmdJbnN0YWxsLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghcHJpbWFyeURvbWFpbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICdDb3VsZCBub3QgZGV0ZXJtaW5lIFdQIEVuZ2luZSBpbnN0YWxsIGRldGFpbHMuIFBsZWFzZSBlbnN1cmUgeW91IGFyZSBhdXRoZW50aWNhdGVkLicsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFN0YXJ0IHRoZSBwdXNoIG9wZXJhdGlvbiAoYXN5bmMgLSByZXR1cm5zIGltbWVkaWF0ZWx5KVxuICAgICAgICAgIHdwZVB1c2hTZXJ2aWNlXG4gICAgICAgICAgICAucHVzaCh7XG4gICAgICAgICAgICAgIGluY2x1ZGVTcWwsXG4gICAgICAgICAgICAgIHdwZW5naW5lSW5zdGFsbE5hbWU6IGluc3RhbGxOYW1lLFxuICAgICAgICAgICAgICB3cGVuZ2luZUluc3RhbGxJZDogaW5zdGFsbElkLFxuICAgICAgICAgICAgICB3cGVuZ2luZVNpdGVJZDogd3BlQ29ubmVjdGlvbi5yZW1vdGVTaXRlSWQsXG4gICAgICAgICAgICAgIHdwZW5naW5lUHJpbWFyeURvbWFpbjogcHJpbWFyeURvbWFpbixcbiAgICAgICAgICAgICAgbG9jYWxTaXRlSWQ6IHNpdGUuaWQsXG4gICAgICAgICAgICAgIGVudmlyb25tZW50OiB3cGVDb25uZWN0aW9uLnJlbW90ZVNpdGVFbnYsXG4gICAgICAgICAgICAgIGlzTWFnaWNTeW5jOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gUHVzaCBmYWlsZWQ6YCwgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBgUHVzaCBzdGFydGVkIHRvICR7aW5zdGFsbE5hbWV9LiBDaGVjayBMb2NhbCBVSSBmb3IgcHJvZ3Jlc3MuYCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBzdGFydCBwdXNoOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzdGFydCBwdXNoJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBQaGFzZSAxMWM6IFB1bGwgZnJvbSBXUCBFbmdpbmVcbiAgICAgIHB1bGxGcm9tV3BlOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczoge1xuICAgICAgICAgIGxvY2FsU2l0ZUlkOiBzdHJpbmc7XG4gICAgICAgICAgcmVtb3RlSW5zdGFsbElkOiBzdHJpbmc7XG4gICAgICAgICAgaW5jbHVkZVNxbD86IGJvb2xlYW47XG4gICAgICAgIH1cbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCB7IGxvY2FsU2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWwgPSBmYWxzZSB9ID0gYXJncztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIFB1bGwgZnJvbSBXUEU6IHNpdGU9JHtsb2NhbFNpdGVJZH0sIHJlbW90ZT0ke3JlbW90ZUluc3RhbGxJZH0sIGluY2x1ZGVTcWw9JHtpbmNsdWRlU3FsfWBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gVmVyaWZ5IHNpdGUgZXhpc3RzXG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUobG9jYWxTaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7bG9jYWxTaXRlSWR9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgV1BFIGNvbm5lY3Rpb24gZXhpc3RzXG4gICAgICAgICAgY29uc3Qgd3BlQ29ubmVjdGlvbiA9IHNpdGUuaG9zdENvbm5lY3Rpb25zPy5maW5kKChjOiBhbnkpID0+IGMuaG9zdElkID09PSAnd3BlJyk7XG4gICAgICAgICAgaWYgKCF3cGVDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ1NpdGUgaXMgbm90IGxpbmtlZCB0byBXUCBFbmdpbmUuIFVzZSBDb25uZWN0IGluIExvY2FsIHRvIGxpbmsgdGhlIHNpdGUgZmlyc3QuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgcHVsbCBzZXJ2aWNlIGF2YWlsYWJpbGl0eVxuICAgICAgICAgIGlmICghd3BlUHVsbFNlcnZpY2UgfHwgdHlwZW9mIHdwZVB1bGxTZXJ2aWNlLnB1bGwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogJ1dQRSBQdWxsIHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdldCBpbnN0YWxsIGRldGFpbHMgZnJvbSBDQVBJXG4gICAgICAgICAgbGV0IGluc3RhbGxOYW1lID0gcmVtb3RlSW5zdGFsbElkO1xuICAgICAgICAgIGxldCBwcmltYXJ5RG9tYWluID0gJyc7XG4gICAgICAgICAgbGV0IGluc3RhbGxJZCA9ICcnO1xuXG4gICAgICAgICAgaWYgKGNhcGlTZXJ2aWNlICYmIHR5cGVvZiBjYXBpU2VydmljZS5nZXRJbnN0YWxsTGlzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFsbHMgPSBhd2FpdCBjYXBpU2VydmljZS5nZXRJbnN0YWxsTGlzdCgpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdJbnN0YWxsID0gaW5zdGFsbHM/LmZpbmQoXG4gICAgICAgICAgICAgIChpOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgaS5zaXRlPy5pZCA9PT0gd3BlQ29ubmVjdGlvbi5yZW1vdGVTaXRlSWQgJiZcbiAgICAgICAgICAgICAgICAoIXdwZUNvbm5lY3Rpb24ucmVtb3RlU2l0ZUVudiB8fCBpLmVudmlyb25tZW50ID09PSB3cGVDb25uZWN0aW9uLnJlbW90ZVNpdGVFbnYpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nSW5zdGFsbCkge1xuICAgICAgICAgICAgICBpbnN0YWxsTmFtZSA9IG1hdGNoaW5nSW5zdGFsbC5uYW1lO1xuICAgICAgICAgICAgICBwcmltYXJ5RG9tYWluID1cbiAgICAgICAgICAgICAgICBtYXRjaGluZ0luc3RhbGwucHJpbWFyeV9kb21haW4gfHxcbiAgICAgICAgICAgICAgICBtYXRjaGluZ0luc3RhbGwuY25hbWUgfHxcbiAgICAgICAgICAgICAgICBgJHttYXRjaGluZ0luc3RhbGwubmFtZX0ud3BlbmdpbmUuY29tYDtcbiAgICAgICAgICAgICAgaW5zdGFsbElkID0gbWF0Y2hpbmdJbnN0YWxsLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghcHJpbWFyeURvbWFpbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICdDb3VsZCBub3QgZGV0ZXJtaW5lIFdQIEVuZ2luZSBpbnN0YWxsIGRldGFpbHMuIFBsZWFzZSBlbnN1cmUgeW91IGFyZSBhdXRoZW50aWNhdGVkLicsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFN0YXJ0IHRoZSBwdWxsIG9wZXJhdGlvbiAoYXN5bmMgLSByZXR1cm5zIGltbWVkaWF0ZWx5KVxuICAgICAgICAgIHdwZVB1bGxTZXJ2aWNlXG4gICAgICAgICAgICAucHVsbCh7XG4gICAgICAgICAgICAgIGluY2x1ZGVTcWwsXG4gICAgICAgICAgICAgIHdwZW5naW5lSW5zdGFsbE5hbWU6IGluc3RhbGxOYW1lLFxuICAgICAgICAgICAgICB3cGVuZ2luZUluc3RhbGxJZDogaW5zdGFsbElkLFxuICAgICAgICAgICAgICB3cGVuZ2luZVNpdGVJZDogd3BlQ29ubmVjdGlvbi5yZW1vdGVTaXRlSWQsXG4gICAgICAgICAgICAgIHdwZW5naW5lUHJpbWFyeURvbWFpbjogcHJpbWFyeURvbWFpbixcbiAgICAgICAgICAgICAgbG9jYWxTaXRlSWQ6IHNpdGUuaWQsXG4gICAgICAgICAgICAgIGVudmlyb25tZW50OiB3cGVDb25uZWN0aW9uLnJlbW90ZVNpdGVFbnYsXG4gICAgICAgICAgICAgIGlzTWFnaWNTeW5jOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gUHVsbCBmYWlsZWQ6YCwgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBgUHVsbCBzdGFydGVkIGZyb20gJHtpbnN0YWxsTmFtZX0uIENoZWNrIExvY2FsIFVJIGZvciBwcm9ncmVzcy5gLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIHN0YXJ0IHB1bGw6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN0YXJ0IHB1bGwnLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTdGFydCB0aGUgTUNQIHNlcnZlclxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydE1jcFNlcnZlcihzZXJ2aWNlczogTG9jYWxTZXJ2aWNlcywgbG9nZ2VyOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKG1jcFNlcnZlcikge1xuICAgIGxvZ2dlci53YXJuKGBbJHtBRERPTl9OQU1FfV0gTUNQIHNlcnZlciBhbHJlYWR5IHJ1bm5pbmdgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIG1jcFNlcnZlciA9IG5ldyBNY3BTZXJ2ZXIoeyBwb3J0OiBNQ1BfU0VSVkVSLkRFRkFVTFRfUE9SVCB9LCBzZXJ2aWNlcywgbG9nZ2VyKTtcblxuICAgIGF3YWl0IG1jcFNlcnZlci5zdGFydCgpO1xuXG4gICAgY29uc3QgaW5mbyA9IG1jcFNlcnZlci5nZXRDb25uZWN0aW9uSW5mbygpO1xuICAgIGxvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gTUNQIHNlcnZlciBzdGFydGVkIG9uIHBvcnQgJHtpbmZvLnBvcnR9YCk7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgWyR7QURET05fTkFNRX1dIE1DUCBjb25uZWN0aW9uIGluZm8gc2F2ZWQgdG86IH4vTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0L0xvY2FsL21jcC1jb25uZWN0aW9uLWluZm8uanNvbmBcbiAgICApO1xuICAgIGxvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gQXZhaWxhYmxlIHRvb2xzOiAke2luZm8udG9vbHMuam9pbignLCAnKX1gKTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGxvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBzdGFydCBNQ1Agc2VydmVyOmAsIGVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0b3AgdGhlIE1DUCBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RvcE1jcFNlcnZlcihsb2dnZXI6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAobWNwU2VydmVyKSB7XG4gICAgYXdhaXQgbWNwU2VydmVyLnN0b3AoKTtcbiAgICBtY3BTZXJ2ZXIgPSBudWxsO1xuICAgIGxvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gTUNQIHNlcnZlciBzdG9wcGVkYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlciBJUEMgaGFuZGxlcnMgZm9yIHJlbmRlcmVyIGNvbW11bmljYXRpb25cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJJcGNIYW5kbGVycyhzZXJ2aWNlczogTG9jYWxTZXJ2aWNlcywgbG9nZ2VyOiBhbnkpOiB2b2lkIHtcbiAgLy8gR2V0IE1DUCBzZXJ2ZXIgc3RhdHVzXG4gIGlwY01haW4uaGFuZGxlKCdtY3A6Z2V0U3RhdHVzJywgYXN5bmMgKCkgPT4ge1xuICAgIGlmICghbWNwU2VydmVyKSB7XG4gICAgICByZXR1cm4geyBydW5uaW5nOiBmYWxzZSwgcG9ydDogMCwgdXB0aW1lOiAwIH07XG4gICAgfVxuICAgIHJldHVybiBtY3BTZXJ2ZXIuZ2V0U3RhdHVzKCk7XG4gIH0pO1xuXG4gIC8vIEdldCBjb25uZWN0aW9uIGluZm9cbiAgaXBjTWFpbi5oYW5kbGUoJ21jcDpnZXRDb25uZWN0aW9uSW5mbycsIGFzeW5jICgpID0+IHtcbiAgICBpZiAoIW1jcFNlcnZlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBtY3BTZXJ2ZXIuZ2V0Q29ubmVjdGlvbkluZm8oKTtcbiAgfSk7XG5cbiAgLy8gU3RhcnQgTUNQIHNlcnZlclxuICBpcGNNYWluLmhhbmRsZSgnbWNwOnN0YXJ0JywgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdGFydE1jcFNlcnZlcihzZXJ2aWNlcywgbG9nZ2VyKTtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFN0b3AgTUNQIHNlcnZlclxuICBpcGNNYWluLmhhbmRsZSgnbWNwOnN0b3AnLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0b3BNY3BTZXJ2ZXIobG9nZ2VyKTtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFJlc3RhcnQgTUNQIHNlcnZlclxuICBpcGNNYWluLmhhbmRsZSgnbWNwOnJlc3RhcnQnLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0b3BNY3BTZXJ2ZXIobG9nZ2VyKTtcbiAgICAgIGF3YWl0IHN0YXJ0TWNwU2VydmVyKHNlcnZpY2VzLCBsb2dnZXIpO1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogZXJyb3IubWVzc2FnZSB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gUmVnZW5lcmF0ZSBhdXRoIHRva2VuXG4gIGlwY01haW4uaGFuZGxlKCdtY3A6cmVnZW5lcmF0ZVRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgIGlmICghbWNwU2VydmVyKSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdNQ1Agc2VydmVyIG5vdCBydW5uaW5nJyB9O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgbmV3VG9rZW4gPSBhd2FpdCBtY3BTZXJ2ZXIucmVnZW5lcmF0ZVRva2VuKCk7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCB0b2tlbjogbmV3VG9rZW4gfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfTtcbiAgICB9XG4gIH0pO1xuXG4gIGxvZ2dlci5pbmZvKFxuICAgIGBbJHtBRERPTl9OQU1FfV0gUmVnaXN0ZXJlZCBJUEMgaGFuZGxlcnM6IG1jcDpnZXRTdGF0dXMsIG1jcDpnZXRDb25uZWN0aW9uSW5mbywgbWNwOnN0YXJ0LCBtY3A6c3RvcCwgbWNwOnJlc3RhcnQsIG1jcDpyZWdlbmVyYXRlVG9rZW5gXG4gICk7XG59XG5cbi8qKlxuICogTWFpbiBhZGRvbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoX2NvbnRleHQ6IExvY2FsTWFpbi5BZGRvbk1haW5Db250ZXh0KTogdm9pZCB7XG4gIGNvbnN0IHNlcnZpY2VzID0gTG9jYWxNYWluLmdldFNlcnZpY2VDb250YWluZXIoKS5jcmFkbGUgYXMgYW55O1xuICBjb25zdCB7IGxvY2FsTG9nZ2VyLCBncmFwaHFsIH0gPSBzZXJ2aWNlcztcblxuICB0cnkge1xuICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBJbml0aWFsaXppbmcuLi5gKTtcblxuICAgIC8vIFJlZ2lzdGVyIEdyYXBoUUwgZXh0ZW5zaW9ucyAoZm9yIGxvY2FsLWNsaSBhbmQgTUNQKVxuICAgIGNvbnN0IHJlc29sdmVycyA9IGNyZWF0ZVJlc29sdmVycyhzZXJ2aWNlcyk7XG4gICAgZ3JhcGhxbC5yZWdpc3RlckdyYXBoUUxTZXJ2aWNlKCdtY3Atc2VydmVyJywgdHlwZURlZnMsIHJlc29sdmVycyk7XG4gICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFJlZ2lzdGVyZWQgR3JhcGhRTDogMjkgdG9vbHMgKFBoYXNlIDEtMTFiKWApO1xuXG4gICAgLy8gU3RhcnQgTUNQIHNlcnZlciAoZm9yIEFJIHRvb2xzKVxuICAgIGNvbnN0IGxvY2FsU2VydmljZXM6IExvY2FsU2VydmljZXMgPSB7XG4gICAgICBzaXRlRGF0YTogc2VydmljZXMuc2l0ZURhdGEsXG4gICAgICBzaXRlUHJvY2Vzc01hbmFnZXI6IHNlcnZpY2VzLnNpdGVQcm9jZXNzTWFuYWdlcixcbiAgICAgIHdwQ2xpOiBzZXJ2aWNlcy53cENsaSxcbiAgICAgIGRlbGV0ZVNpdGU6IHNlcnZpY2VzLmRlbGV0ZVNpdGUsXG4gICAgICBhZGRTaXRlOiBzZXJ2aWNlcy5hZGRTaXRlLFxuICAgICAgbG9jYWxMb2dnZXI6IHNlcnZpY2VzLmxvY2FsTG9nZ2VyLFxuICAgICAgYWRtaW5lcjogc2VydmljZXMuYWRtaW5lcixcbiAgICAgIHg1MDlDZXJ0OiBzZXJ2aWNlcy54NTA5Q2VydCxcbiAgICAgIHNpdGVQcm92aXNpb25lcjogc2VydmljZXMuc2l0ZVByb3Zpc2lvbmVyLFxuICAgICAgaW1wb3J0U2l0ZTogc2VydmljZXMuaW1wb3J0U2l0ZSxcbiAgICAgIGxpZ2h0bmluZ1NlcnZpY2VzOiBzZXJ2aWNlcy5saWdodG5pbmdTZXJ2aWNlcyxcbiAgICAgIC8vIFBoYXNlIDExOiBXUCBFbmdpbmUgQ29ubmVjdFxuICAgICAgd3BlT0F1dGg6IHNlcnZpY2VzLndwZU9BdXRoLFxuICAgICAgY2FwaTogc2VydmljZXMuY2FwaSxcbiAgICB9O1xuXG4gICAgLy8gTUNQIHNlcnZlciBkaXNhYmxlZCAtIENMSS1vbmx5IG1vZGVcbiAgICAvLyBUbyBlbmFibGUgTUNQIHNlcnZlciBmb3IgQUkgdG9vbCBpbnRlZ3JhdGlvbiwgdW5jb21tZW50IHRoZSBmb2xsb3dpbmc6XG4gICAgLy8gc3RhcnRNY3BTZXJ2ZXIobG9jYWxTZXJ2aWNlcywgbG9jYWxMb2dnZXIpO1xuICAgIC8vIHJlZ2lzdGVySXBjSGFuZGxlcnMobG9jYWxTZXJ2aWNlcywgbG9jYWxMb2dnZXIpO1xuXG4gICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCAoQ0xJLW9ubHkgbW9kZSlgKTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGluaXRpYWxpemU6YCwgZXJyb3IpO1xuICB9XG59XG4iXX0=
3324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFpbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlzSEgsNEJBd0NDO0FBL3VIRCxtRUFBcUQ7QUFDckQsdUNBQW1DO0FBQ25DLDhEQUE4QjtBQUM5QiwrQ0FBNEM7QUFDNUMsbURBQWlEO0FBR2pELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztBQUVoQyxJQUFJLFNBQVMsR0FBcUIsSUFBSSxDQUFDO0FBRXZDOztHQUVHO0FBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBQSxxQkFBRyxFQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUMsT0FBTztZQUN6QixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7WUFDakMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ3pCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUMzQixlQUFlLEVBQUUsUUFBUSxDQUFDLGVBQWU7WUFDekMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQy9CLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxpQkFBaUI7WUFDN0MsOEJBQThCO1lBQzlCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUMzQixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7U0FDcEIsQ0FBQztRQUVGLHNDQUFzQztRQUN0Qyx5RUFBeUU7UUFDekUsK0NBQStDO1FBQy9DLHFEQUFxRDtRQUVyRCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSw0Q0FBNEMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDTEkgQnJpZGdlIEFkZG9uIC0gTWFpbiBQcm9jZXNzIEVudHJ5IFBvaW50XG4gKlxuICogVGhpcyBhZGRvbiBleHRlbmRzIExvY2FsJ3MgY2FwYWJpbGl0aWVzOlxuICogLSBHcmFwaFFMIG11dGF0aW9ucyBmb3IgZGVsZXRlU2l0ZSwgd3BDbGkgKGZvciBsb2NhbC1jbGkpXG4gKiAtIE1DUCBTZXJ2ZXIgZm9yIEFJIHRvb2wgaW50ZWdyYXRpb24gKENsYXVkZSBDb2RlLCBDaGF0R1BULCBldGMuKVxuICovXG5cbmltcG9ydCAqIGFzIExvY2FsTWFpbiBmcm9tICdAZ2V0Zmx5d2hlZWwvbG9jYWwvbWFpbic7XG5pbXBvcnQgeyBpcGNNYWluIH0gZnJvbSAnZWxlY3Ryb24nO1xuaW1wb3J0IGdxbCBmcm9tICdncmFwaHFsLXRhZyc7XG5pbXBvcnQgeyBNY3BTZXJ2ZXIgfSBmcm9tICcuL21jcC9NY3BTZXJ2ZXInO1xuaW1wb3J0IHsgTUNQX1NFUlZFUiB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTG9jYWxTZXJ2aWNlcyB9IGZyb20gJy4uL2NvbW1vbi90eXBlcyc7XG5cbmNvbnN0IEFERE9OX05BTUUgPSAnTUNQIFNlcnZlcic7XG5cbmxldCBtY3BTZXJ2ZXI6IE1jcFNlcnZlciB8IG51bGwgPSBudWxsO1xuXG4vKipcbiAqIEdyYXBoUUwgdHlwZSBkZWZpbml0aW9ucyBmb3IgQ0xJIEJyaWRnZVxuICovXG5jb25zdCB0eXBlRGVmcyA9IGdxbGBcbiAgaW5wdXQgRGVsZXRlU2l0ZUlucHV0IHtcbiAgICBcIlRoZSBzaXRlIElEIHRvIGRlbGV0ZVwiXG4gICAgaWQ6IElEIVxuICAgIFwiV2hldGhlciB0byBtb3ZlIHNpdGUgZmlsZXMgdG8gdHJhc2ggKHRydWUpIG9yIGp1c3QgcmVtb3ZlIGZyb20gTG9jYWwgKGZhbHNlKVwiXG4gICAgdHJhc2hGaWxlczogQm9vbGVhbiA9IHRydWVcbiAgICBcIldoZXRoZXIgdG8gdXBkYXRlIHRoZSBob3N0cyBmaWxlXCJcbiAgICB1cGRhdGVIb3N0czogQm9vbGVhbiA9IHRydWVcbiAgfVxuXG4gIHR5cGUgRGVsZXRlU2l0ZVJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHRoZSBkZWxldGlvbiB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZGVsZXRpb24gZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gICAgXCJUaGUgSUQgb2YgdGhlIGRlbGV0ZWQgc2l0ZVwiXG4gICAgc2l0ZUlkOiBJRFxuICB9XG5cbiAgaW5wdXQgV3BDbGlJbnB1dCB7XG4gICAgXCJUaGUgc2l0ZSBJRCB0byBydW4gV1AtQ0xJIGFnYWluc3RcIlxuICAgIHNpdGVJZDogSUQhXG4gICAgXCJXUC1DTEkgY29tbWFuZCBhbmQgYXJndW1lbnRzIChlLmcuLCBbJ3BsdWdpbicsICdsaXN0JywgJy0tZm9ybWF0PWpzb24nXSlcIlxuICAgIGFyZ3M6IFtTdHJpbmchXSFcbiAgICBcIlNraXAgbG9hZGluZyBwbHVnaW5zIChkZWZhdWx0OiB0cnVlKVwiXG4gICAgc2tpcFBsdWdpbnM6IEJvb2xlYW4gPSB0cnVlXG4gICAgXCJTa2lwIGxvYWRpbmcgdGhlbWVzIChkZWZhdWx0OiB0cnVlKVwiXG4gICAgc2tpcFRoZW1lczogQm9vbGVhbiA9IHRydWVcbiAgfVxuXG4gIHR5cGUgV3BDbGlSZXN1bHQge1xuICAgIFwiV2hldGhlciB0aGUgY29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHlcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJDb21tYW5kIG91dHB1dCAoc3Rkb3V0KVwiXG4gICAgb3V0cHV0OiBTdHJpbmdcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgY29tbWFuZCBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gIGlucHV0IENyZWF0ZVNpdGVJbnB1dCB7XG4gICAgXCJTaXRlIG5hbWUgKHJlcXVpcmVkKVwiXG4gICAgbmFtZTogU3RyaW5nIVxuICAgIFwiUEhQIHZlcnNpb24gKGUuZy4sICc4LjIuMTAnKS4gVXNlcyBMb2NhbCBkZWZhdWx0IGlmIG5vdCBzcGVjaWZpZWQuXCJcbiAgICBwaHBWZXJzaW9uOiBTdHJpbmdcbiAgICBcIldlYiBzZXJ2ZXIgdHlwZVwiXG4gICAgd2ViU2VydmVyOiBTdHJpbmdcbiAgICBcIkRhdGFiYXNlIHR5cGVcIlxuICAgIGRhdGFiYXNlOiBTdHJpbmdcbiAgICBcIldvcmRQcmVzcyBhZG1pbiB1c2VybmFtZSAoZGVmYXVsdDogYWRtaW4pXCJcbiAgICB3cEFkbWluVXNlcm5hbWU6IFN0cmluZ1xuICAgIFwiV29yZFByZXNzIGFkbWluIHBhc3N3b3JkIChkZWZhdWx0OiBwYXNzd29yZClcIlxuICAgIHdwQWRtaW5QYXNzd29yZDogU3RyaW5nXG4gICAgXCJXb3JkUHJlc3MgYWRtaW4gZW1haWwgKGRlZmF1bHQ6IGFkbWluQGxvY2FsLnRlc3QpXCJcbiAgICB3cEFkbWluRW1haWw6IFN0cmluZ1xuICAgIFwiQmx1ZXByaW50IG5hbWUgdG8gY3JlYXRlIHNpdGUgZnJvbS4gVXNlIGxpc3RfYmx1ZXByaW50cyB0byBzZWUgYXZhaWxhYmxlIGJsdWVwcmludHMuXCJcbiAgICBibHVlcHJpbnQ6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBDcmVhdGVTaXRlUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgc2l0ZSBjcmVhdGlvbiB3YXMgaW5pdGlhdGVkIHN1Y2Nlc3NmdWxseVwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgY3JlYXRpb24gZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gICAgXCJUaGUgY3JlYXRlZCBzaXRlIElEXCJcbiAgICBzaXRlSWQ6IElEXG4gICAgXCJUaGUgc2l0ZSBuYW1lXCJcbiAgICBzaXRlTmFtZTogU3RyaW5nXG4gICAgXCJUaGUgc2l0ZSBkb21haW5cIlxuICAgIHNpdGVEb21haW46IFN0cmluZ1xuICB9XG5cbiAgaW5wdXQgT3BlblNpdGVJbnB1dCB7XG4gICAgXCJUaGUgc2l0ZSBJRCB0byBvcGVuXCJcbiAgICBzaXRlSWQ6IElEIVxuICAgIFwiUGF0aCB0byBvcGVuIChkZWZhdWx0OiAvLCB1c2UgL3dwLWFkbWluIGZvciBhZG1pbilcIlxuICAgIHBhdGg6IFN0cmluZyA9IFwiL1wiXG4gIH1cblxuICB0eXBlIE9wZW5TaXRlUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgdGhlIHNpdGUgd2FzIG9wZW5lZCBzdWNjZXNzZnVsbHlcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICAgIFwiVGhlIFVSTCB0aGF0IHdhcyBvcGVuZWRcIlxuICAgIHVybDogU3RyaW5nXG4gIH1cblxuICBpbnB1dCBDbG9uZVNpdGVJbnB1dCB7XG4gICAgXCJUaGUgc2l0ZSBJRCB0byBjbG9uZVwiXG4gICAgc2l0ZUlkOiBJRCFcbiAgICBcIk5hbWUgZm9yIHRoZSBjbG9uZWQgc2l0ZVwiXG4gICAgbmV3TmFtZTogU3RyaW5nIVxuICB9XG5cbiAgdHlwZSBDbG9uZVNpdGVSZXN1bHQge1xuICAgIFwiV2hldGhlciBjbG9uaW5nIHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgICBcIlRoZSBuZXcgc2l0ZSBJRFwiXG4gICAgbmV3U2l0ZUlkOiBJRFxuICAgIFwiVGhlIG5ldyBzaXRlIG5hbWVcIlxuICAgIG5ld1NpdGVOYW1lOiBTdHJpbmdcbiAgICBcIlRoZSBuZXcgc2l0ZSBkb21haW5cIlxuICAgIG5ld1NpdGVEb21haW46IFN0cmluZ1xuICB9XG5cbiAgaW5wdXQgRXhwb3J0U2l0ZUlucHV0IHtcbiAgICBcIlRoZSBzaXRlIElEIHRvIGV4cG9ydFwiXG4gICAgc2l0ZUlkOiBJRCFcbiAgICBcIk91dHB1dCBkaXJlY3RvcnkgcGF0aCAoZGVmYXVsdDogfi9Eb3dubG9hZHMpXCJcbiAgICBvdXRwdXRQYXRoOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgRXhwb3J0U2l0ZVJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIGV4cG9ydCB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gICAgXCJQYXRoIHRvIHRoZSBleHBvcnRlZCB6aXAgZmlsZVwiXG4gICAgZXhwb3J0UGF0aDogU3RyaW5nXG4gIH1cblxuICB0eXBlIEJsdWVwcmludCB7XG4gICAgXCJCbHVlcHJpbnQgbmFtZVwiXG4gICAgbmFtZTogU3RyaW5nIVxuICAgIFwiTGFzdCBtb2RpZmllZCBkYXRlXCJcbiAgICBsYXN0TW9kaWZpZWQ6IFN0cmluZ1xuICAgIFwiUEhQIHZlcnNpb25cIlxuICAgIHBocFZlcnNpb246IFN0cmluZ1xuICAgIFwiV2ViIHNlcnZlciB0eXBlXCJcbiAgICB3ZWJTZXJ2ZXI6IFN0cmluZ1xuICAgIFwiRGF0YWJhc2UgdHlwZVwiXG4gICAgZGF0YWJhc2U6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBCbHVlcHJpbnRzUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgcXVlcnkgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICAgIFwiTGlzdCBvZiBibHVlcHJpbnRzXCJcbiAgICBibHVlcHJpbnRzOiBbQmx1ZXByaW50IV1cbiAgfVxuXG4gIGlucHV0IFNhdmVCbHVlcHJpbnRJbnB1dCB7XG4gICAgXCJUaGUgc2l0ZSBJRCB0byBzYXZlIGFzIGJsdWVwcmludFwiXG4gICAgc2l0ZUlkOiBJRCFcbiAgICBcIk5hbWUgZm9yIHRoZSBibHVlcHJpbnRcIlxuICAgIG5hbWU6IFN0cmluZyFcbiAgfVxuXG4gIHR5cGUgU2F2ZUJsdWVwcmludFJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHNhdmUgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICAgIFwiVGhlIGJsdWVwcmludCBuYW1lXCJcbiAgICBibHVlcHJpbnROYW1lOiBTdHJpbmdcbiAgfVxuXG4gICMgUGhhc2UgODogV29yZFByZXNzIERldmVsb3BtZW50IFRvb2xzXG4gIGlucHV0IEV4cG9ydERhdGFiYXNlSW5wdXQge1xuICAgIFwiVGhlIHNpdGUgSURcIlxuICAgIHNpdGVJZDogSUQhXG4gICAgXCJPdXRwdXQgZmlsZSBwYXRoIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gfi9Eb3dubG9hZHMvPHNpdGUtbmFtZT4uc3FsKVwiXG4gICAgb3V0cHV0UGF0aDogU3RyaW5nXG4gIH1cblxuICB0eXBlIEV4cG9ydERhdGFiYXNlUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgZXhwb3J0IHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgICBcIlBhdGggdG8gdGhlIGV4cG9ydGVkIFNRTCBmaWxlXCJcbiAgICBvdXRwdXRQYXRoOiBTdHJpbmdcbiAgfVxuXG4gIGlucHV0IEltcG9ydERhdGFiYXNlSW5wdXQge1xuICAgIFwiVGhlIHNpdGUgSURcIlxuICAgIHNpdGVJZDogSUQhXG4gICAgXCJQYXRoIHRvIHRoZSBTUUwgZmlsZSB0byBpbXBvcnRcIlxuICAgIHNxbFBhdGg6IFN0cmluZyFcbiAgfVxuXG4gIHR5cGUgSW1wb3J0RGF0YWJhc2VSZXN1bHQge1xuICAgIFwiV2hldGhlciBpbXBvcnQgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICB9XG5cbiAgaW5wdXQgT3BlbkFkbWluZXJJbnB1dCB7XG4gICAgXCJUaGUgc2l0ZSBJRFwiXG4gICAgc2l0ZUlkOiBJRCFcbiAgfVxuXG4gIHR5cGUgT3BlbkFkbWluZXJSZXN1bHQge1xuICAgIFwiV2hldGhlciBvcGVuaW5nIHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gIGlucHV0IFRydXN0U3NsSW5wdXQge1xuICAgIFwiVGhlIHNpdGUgSURcIlxuICAgIHNpdGVJZDogSUQhXG4gIH1cblxuICB0eXBlIFRydXN0U3NsUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgdHJ1c3Qgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICB9XG5cbiAgaW5wdXQgTWNwUmVuYW1lU2l0ZUlucHV0IHtcbiAgICBcIlRoZSBzaXRlIElEXCJcbiAgICBzaXRlSWQ6IElEIVxuICAgIFwiTmV3IG5hbWUgZm9yIHRoZSBzaXRlXCJcbiAgICBuZXdOYW1lOiBTdHJpbmchXG4gIH1cblxuICB0eXBlIE1jcFJlbmFtZVNpdGVSZXN1bHQge1xuICAgIFwiV2hldGhlciByZW5hbWUgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICAgIFwiVGhlIG5ldyBuYW1lXCJcbiAgICBuZXdOYW1lOiBTdHJpbmdcbiAgfVxuXG4gIGlucHV0IENoYW5nZVBocFZlcnNpb25JbnB1dCB7XG4gICAgXCJUaGUgc2l0ZSBJRFwiXG4gICAgc2l0ZUlkOiBJRCFcbiAgICBcIlRhcmdldCBQSFAgdmVyc2lvblwiXG4gICAgcGhwVmVyc2lvbjogU3RyaW5nIVxuICB9XG5cbiAgdHlwZSBDaGFuZ2VQaHBWZXJzaW9uUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgY2hhbmdlIHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgICBcIlRoZSBuZXcgUEhQIHZlcnNpb25cIlxuICAgIHBocFZlcnNpb246IFN0cmluZ1xuICB9XG5cbiAgaW5wdXQgSW1wb3J0U2l0ZUlucHV0IHtcbiAgICBcIlBhdGggdG8gdGhlIHppcCBmaWxlIHRvIGltcG9ydFwiXG4gICAgemlwUGF0aDogU3RyaW5nIVxuICAgIFwiTmFtZSBmb3IgdGhlIGltcG9ydGVkIHNpdGUgKG9wdGlvbmFsKVwiXG4gICAgc2l0ZU5hbWU6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBJbXBvcnRTaXRlUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgaW1wb3J0IHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgICBcIlRoZSBpbXBvcnRlZCBzaXRlIElEXCJcbiAgICBzaXRlSWQ6IElEXG4gICAgXCJUaGUgaW1wb3J0ZWQgc2l0ZSBuYW1lXCJcbiAgICBzaXRlTmFtZTogU3RyaW5nXG4gIH1cblxuICAjIFBoYXNlIDk6IFNpdGUgQ29uZmlndXJhdGlvbiAmIERldiBUb29sc1xuICBpbnB1dCBUb2dnbGVYZGVidWdJbnB1dCB7XG4gICAgXCJUaGUgc2l0ZSBJRFwiXG4gICAgc2l0ZUlkOiBJRCFcbiAgICBcIldoZXRoZXIgdG8gZW5hYmxlIG9yIGRpc2FibGUgWGRlYnVnXCJcbiAgICBlbmFibGVkOiBCb29sZWFuIVxuICB9XG5cbiAgdHlwZSBUb2dnbGVYZGVidWdSZXN1bHQge1xuICAgIFwiV2hldGhlciB0b2dnbGUgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICAgIFwiQ3VycmVudCBYZGVidWcgc3RhdGVcIlxuICAgIGVuYWJsZWQ6IEJvb2xlYW5cbiAgfVxuXG4gIGlucHV0IEdldFNpdGVMb2dzSW5wdXQge1xuICAgIFwiVGhlIHNpdGUgSURcIlxuICAgIHNpdGVJZDogSUQhXG4gICAgXCJUeXBlIG9mIGxvZ3MgdG8gcmV0cmlldmUgKHBocCwgbmdpbngsIG15c3FsLCBhbGwpXCJcbiAgICBsb2dUeXBlOiBTdHJpbmcgPSBcInBocFwiXG4gICAgXCJOdW1iZXIgb2YgbGluZXMgdG8gcmV0dXJuXCJcbiAgICBsaW5lczogSW50ID0gMTAwXG4gIH1cblxuICB0eXBlIExvZ0VudHJ5IHtcbiAgICBcIkxvZyB0eXBlXCJcbiAgICB0eXBlOiBTdHJpbmchXG4gICAgXCJMb2cgY29udGVudFwiXG4gICAgY29udGVudDogU3RyaW5nIVxuICAgIFwiTG9nIGZpbGUgcGF0aFwiXG4gICAgcGF0aDogU3RyaW5nIVxuICB9XG5cbiAgdHlwZSBHZXRTaXRlTG9nc1Jlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHJldHJpZXZhbCB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gICAgXCJMb2cgZW50cmllc1wiXG4gICAgbG9nczogW0xvZ0VudHJ5IV1cbiAgfVxuXG4gIHR5cGUgU2VydmljZUluZm8ge1xuICAgIFwiU2VydmljZSByb2xlIChwaHAsIGRhdGFiYXNlLCB3ZWJzZXJ2ZXIpXCJcbiAgICByb2xlOiBTdHJpbmchXG4gICAgXCJTZXJ2aWNlIG5hbWVcIlxuICAgIG5hbWU6IFN0cmluZyFcbiAgICBcIlNlcnZpY2UgdmVyc2lvblwiXG4gICAgdmVyc2lvbjogU3RyaW5nIVxuICB9XG5cbiAgdHlwZSBMaXN0U2VydmljZXNSZXN1bHQge1xuICAgIFwiV2hldGhlciBsaXN0aW5nIHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgICBcIkF2YWlsYWJsZSBzZXJ2aWNlc1wiXG4gICAgc2VydmljZXM6IFtTZXJ2aWNlSW5mbyFdXG4gIH1cblxuICBleHRlbmQgdHlwZSBNdXRhdGlvbiB7XG4gICAgXCJDcmVhdGUgYSBuZXcgV29yZFByZXNzIHNpdGUgd2l0aCBmdWxsIFdvcmRQcmVzcyBpbnN0YWxsYXRpb25cIlxuICAgIGNyZWF0ZVNpdGUoaW5wdXQ6IENyZWF0ZVNpdGVJbnB1dCEpOiBDcmVhdGVTaXRlUmVzdWx0IVxuXG4gICAgXCJEZWxldGUgYSBzaXRlIGZyb20gTG9jYWxcIlxuICAgIGRlbGV0ZVNpdGUoaW5wdXQ6IERlbGV0ZVNpdGVJbnB1dCEpOiBEZWxldGVTaXRlUmVzdWx0IVxuXG4gICAgXCJEZWxldGUgbXVsdGlwbGUgc2l0ZXMgZnJvbSBMb2NhbFwiXG4gICAgZGVsZXRlU2l0ZXMoaWRzOiBbSUQhXSEsIHRyYXNoRmlsZXM6IEJvb2xlYW4gPSB0cnVlKTogRGVsZXRlU2l0ZVJlc3VsdCFcblxuICAgIFwiUnVuIGEgV1AtQ0xJIGNvbW1hbmQgYWdhaW5zdCBhIHNpdGVcIlxuICAgIHdwQ2xpKGlucHV0OiBXcENsaUlucHV0ISk6IFdwQ2xpUmVzdWx0IVxuXG4gICAgXCJPcGVuIGEgc2l0ZSBpbiB0aGUgZGVmYXVsdCBicm93c2VyXCJcbiAgICBvcGVuU2l0ZShpbnB1dDogT3BlblNpdGVJbnB1dCEpOiBPcGVuU2l0ZVJlc3VsdCFcblxuICAgIFwiQ2xvbmUgYW4gZXhpc3Rpbmcgc2l0ZVwiXG4gICAgY2xvbmVTaXRlKGlucHV0OiBDbG9uZVNpdGVJbnB1dCEpOiBDbG9uZVNpdGVSZXN1bHQhXG5cbiAgICBcIkV4cG9ydCBhIHNpdGUgdG8gYSB6aXAgZmlsZVwiXG4gICAgZXhwb3J0U2l0ZShpbnB1dDogRXhwb3J0U2l0ZUlucHV0ISk6IEV4cG9ydFNpdGVSZXN1bHQhXG5cbiAgICBcIlNhdmUgYSBzaXRlIGFzIGEgYmx1ZXByaW50XCJcbiAgICBzYXZlQmx1ZXByaW50KGlucHV0OiBTYXZlQmx1ZXByaW50SW5wdXQhKTogU2F2ZUJsdWVwcmludFJlc3VsdCFcblxuICAgICMgUGhhc2UgODogV29yZFByZXNzIERldmVsb3BtZW50IFRvb2xzXG4gICAgXCJFeHBvcnQgc2l0ZSBkYXRhYmFzZSB0byBTUUwgZmlsZVwiXG4gICAgZXhwb3J0RGF0YWJhc2UoaW5wdXQ6IEV4cG9ydERhdGFiYXNlSW5wdXQhKTogRXhwb3J0RGF0YWJhc2VSZXN1bHQhXG5cbiAgICBcIkltcG9ydCBTUUwgZmlsZSBpbnRvIHNpdGUgZGF0YWJhc2VcIlxuICAgIGltcG9ydERhdGFiYXNlKGlucHV0OiBJbXBvcnREYXRhYmFzZUlucHV0ISk6IEltcG9ydERhdGFiYXNlUmVzdWx0IVxuXG4gICAgXCJPcGVuIEFkbWluZXIgZGF0YWJhc2UgbWFuYWdlbWVudCBVSVwiXG4gICAgb3BlbkFkbWluZXIoaW5wdXQ6IE9wZW5BZG1pbmVySW5wdXQhKTogT3BlbkFkbWluZXJSZXN1bHQhXG5cbiAgICBcIlRydXN0IHNpdGUgU1NMIGNlcnRpZmljYXRlXCJcbiAgICB0cnVzdFNzbChpbnB1dDogVHJ1c3RTc2xJbnB1dCEpOiBUcnVzdFNzbFJlc3VsdCFcblxuICAgIFwiUmVuYW1lIGEgc2l0ZSAoTUNQIHZlcnNpb24pXCJcbiAgICBtY3BSZW5hbWVTaXRlKGlucHV0OiBNY3BSZW5hbWVTaXRlSW5wdXQhKTogTWNwUmVuYW1lU2l0ZVJlc3VsdCFcblxuICAgIFwiQ2hhbmdlIHNpdGUgUEhQIHZlcnNpb25cIlxuICAgIGNoYW5nZVBocFZlcnNpb24oaW5wdXQ6IENoYW5nZVBocFZlcnNpb25JbnB1dCEpOiBDaGFuZ2VQaHBWZXJzaW9uUmVzdWx0IVxuXG4gICAgXCJJbXBvcnQgc2l0ZSBmcm9tIHppcCBmaWxlXCJcbiAgICBpbXBvcnRTaXRlKGlucHV0OiBJbXBvcnRTaXRlSW5wdXQhKTogSW1wb3J0U2l0ZVJlc3VsdCFcblxuICAgICMgUGhhc2UgOTogU2l0ZSBDb25maWd1cmF0aW9uICYgRGV2IFRvb2xzXG4gICAgXCJUb2dnbGUgWGRlYnVnIGZvciBhIHNpdGVcIlxuICAgIHRvZ2dsZVhkZWJ1ZyhpbnB1dDogVG9nZ2xlWGRlYnVnSW5wdXQhKTogVG9nZ2xlWGRlYnVnUmVzdWx0IVxuXG4gICAgXCJHZXQgc2l0ZSBsb2cgZmlsZXNcIlxuICAgIGdldFNpdGVMb2dzKGlucHV0OiBHZXRTaXRlTG9nc0lucHV0ISk6IEdldFNpdGVMb2dzUmVzdWx0IVxuICB9XG5cbiAgZXh0ZW5kIHR5cGUgUXVlcnkge1xuICAgIFwiUnVuIGEgV1AtQ0xJIGNvbW1hbmQgYWdhaW5zdCBhIHNpdGUgKHJlYWQtb25seSBvcGVyYXRpb25zKVwiXG4gICAgd3BDbGlRdWVyeShpbnB1dDogV3BDbGlJbnB1dCEpOiBXcENsaVJlc3VsdCFcblxuICAgIFwiTGlzdCBhbGwgYXZhaWxhYmxlIGJsdWVwcmludHNcIlxuICAgIGJsdWVwcmludHM6IEJsdWVwcmludHNSZXN1bHQhXG5cbiAgICBcIkxpc3QgYXZhaWxhYmxlIHNlcnZpY2UgdmVyc2lvbnNcIlxuICAgIGxpc3RTZXJ2aWNlcyh0eXBlOiBTdHJpbmcpOiBMaXN0U2VydmljZXNSZXN1bHQhXG5cbiAgICAjIFBoYXNlIDExOiBXUCBFbmdpbmUgQ29ubmVjdFxuICAgIFwiQ2hlY2sgV1AgRW5naW5lIGF1dGhlbnRpY2F0aW9uIHN0YXR1c1wiXG4gICAgd3BlU3RhdHVzOiBXcGVBdXRoU3RhdHVzIVxuXG4gICAgXCJMaXN0IGFsbCBzaXRlcyBmcm9tIFdQIEVuZ2luZSBhY2NvdW50XCJcbiAgICBsaXN0V3BlU2l0ZXMoYWNjb3VudElkOiBTdHJpbmcpOiBMaXN0V3BlU2l0ZXNSZXN1bHQhXG5cbiAgICAjIFBoYXNlIDExYjogU2l0ZSBMaW5raW5nXG4gICAgXCJHZXQgV1AgRW5naW5lIGNvbm5lY3Rpb24gZGV0YWlscyBmb3IgYSBsb2NhbCBzaXRlXCJcbiAgICBnZXRXcGVMaW5rKHNpdGVJZDogSUQhKTogR2V0V3BlTGlua1Jlc3VsdCFcbiAgfVxuXG4gICMgUGhhc2UgMTE6IFdQIEVuZ2luZSBDb25uZWN0IFR5cGVzXG4gIHR5cGUgV3BlQXV0aFN0YXR1cyB7XG4gICAgXCJXaGV0aGVyIGF1dGhlbnRpY2F0ZWQgd2l0aCBXUCBFbmdpbmVcIlxuICAgIGF1dGhlbnRpY2F0ZWQ6IEJvb2xlYW4hXG4gICAgXCJVc2VyIGVtYWlsIGlmIGF1dGhlbnRpY2F0ZWRcIlxuICAgIGVtYWlsOiBTdHJpbmdcbiAgICBcIkFjY291bnQgSUQgaWYgYXV0aGVudGljYXRlZFwiXG4gICAgYWNjb3VudElkOiBTdHJpbmdcbiAgICBcIkFjY291bnQgbmFtZSBpZiBhdXRoZW50aWNhdGVkXCJcbiAgICBhY2NvdW50TmFtZTogU3RyaW5nXG4gICAgXCJUb2tlbiBleHBpcnkgdGltZVwiXG4gICAgdG9rZW5FeHBpcnk6IFN0cmluZ1xuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBzdGF0dXMgY2hlY2sgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICB0eXBlIFdwZUF1dGhSZXN1bHQge1xuICAgIFwiV2hldGhlciBhdXRoZW50aWNhdGlvbiB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIlVzZXIgZW1haWwgaWYgc3VjY2Vzc2Z1bFwiXG4gICAgZW1haWw6IFN0cmluZ1xuICAgIFwiTWVzc2FnZSBhYm91dCB0aGUgYXV0aGVudGljYXRpb24gcmVzdWx0XCJcbiAgICBtZXNzYWdlOiBTdHJpbmdcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICB0eXBlIFdwZUxvZ291dFJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIGxvZ291dCB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIk1lc3NhZ2UgYWJvdXQgdGhlIGxvZ291dCByZXN1bHRcIlxuICAgIG1lc3NhZ2U6IFN0cmluZ1xuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgV3BlU2l0ZSB7XG4gICAgXCJJbnN0YWxsIElEXCJcbiAgICBpZDogU3RyaW5nIVxuICAgIFwiSW5zdGFsbCBuYW1lXCJcbiAgICBuYW1lOiBTdHJpbmchXG4gICAgXCJFbnZpcm9ubWVudCAocHJvZHVjdGlvbiwgc3RhZ2luZywgZGV2ZWxvcG1lbnQpXCJcbiAgICBlbnZpcm9ubWVudDogU3RyaW5nIVxuICAgIFwiUEhQIHZlcnNpb25cIlxuICAgIHBocFZlcnNpb246IFN0cmluZ1xuICAgIFwiUHJpbWFyeSBkb21haW5cIlxuICAgIHByaW1hcnlEb21haW46IFN0cmluZ1xuICAgIFwiQWNjb3VudCBJRFwiXG4gICAgYWNjb3VudElkOiBTdHJpbmdcbiAgICBcIkFjY291bnQgbmFtZVwiXG4gICAgYWNjb3VudE5hbWU6IFN0cmluZ1xuICAgIFwiU0ZUUCBob3N0XCJcbiAgICBzZnRwSG9zdDogU3RyaW5nXG4gICAgXCJTRlRQIHVzZXJcIlxuICAgIHNmdHBVc2VyOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgTGlzdFdwZVNpdGVzUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgcXVlcnkgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICAgIFwiTGlzdCBvZiBXUCBFbmdpbmUgc2l0ZXNcIlxuICAgIHNpdGVzOiBbV3BlU2l0ZSFdXG4gICAgXCJUb3RhbCBjb3VudCBvZiBzaXRlc1wiXG4gICAgY291bnQ6IEludFxuICB9XG5cbiAgIyBQaGFzZSAxMWI6IFNpdGUgTGlua2luZyBUeXBlc1xuICB0eXBlIFdwZUNvbm5lY3Rpb24ge1xuICAgIFwiUmVtb3RlIGluc3RhbGwgSUQgKFVVSUQgZnJvbSBXUCBFbmdpbmUpXCJcbiAgICByZW1vdGVJbnN0YWxsSWQ6IFN0cmluZyFcbiAgICBcIkluc3RhbGwgbmFtZSAoaHVtYW4tcmVhZGFibGUsIHVzZWQgaW4gcG9ydGFsIFVSTHMpXCJcbiAgICBpbnN0YWxsTmFtZTogU3RyaW5nXG4gICAgXCJFbnZpcm9ubWVudCAocHJvZHVjdGlvbiwgc3RhZ2luZywgZGV2ZWxvcG1lbnQpXCJcbiAgICBlbnZpcm9ubWVudDogU3RyaW5nXG4gICAgXCJBY2NvdW50IElEXCJcbiAgICBhY2NvdW50SWQ6IFN0cmluZ1xuICAgIFwiV1AgRW5naW5lIHBvcnRhbCBVUkxcIlxuICAgIHBvcnRhbFVybDogU3RyaW5nXG4gICAgXCJQcmltYXJ5IGRvbWFpbi9DTkFNRVwiXG4gICAgcHJpbWFyeURvbWFpbjogU3RyaW5nXG4gIH1cblxuICBcIlN5bmMgY2FwYWJpbGl0aWVzIGF2YWlsYWJsZSBmb3IgV1BFLWNvbm5lY3RlZCBzaXRlc1wiXG4gIHR5cGUgV3BlU3luY0NhcGFiaWxpdGllcyB7XG4gICAgXCJXaGV0aGVyIHVzZXIgY2FuIHB1c2ggdG8gV1AgRW5naW5lXCJcbiAgICBjYW5QdXNoOiBCb29sZWFuIVxuICAgIFwiV2hldGhlciB1c2VyIGNhbiBwdWxsIGZyb20gV1AgRW5naW5lXCJcbiAgICBjYW5QdWxsOiBCb29sZWFuIVxuICAgIFwiQXZhaWxhYmxlIHN5bmMgbW9kZXNcIlxuICAgIHN5bmNNb2RlczogW1N0cmluZyFdIVxuICAgIFwiV2hldGhlciBNYWdpYyBTeW5jIChzZWxlY3QgZmlsZXMpIGlzIGF2YWlsYWJsZVwiXG4gICAgbWFnaWNTeW5jQXZhaWxhYmxlOiBCb29sZWFuIVxuICAgIFwiV2hldGhlciBkYXRhYmFzZSBzeW5jIGlzIGF2YWlsYWJsZVwiXG4gICAgZGF0YWJhc2VTeW5jQXZhaWxhYmxlOiBCb29sZWFuIVxuICB9XG5cbiAgdHlwZSBHZXRXcGVMaW5rUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgc2l0ZSBpcyBsaW5rZWQgdG8gV1AgRW5naW5lXCJcbiAgICBsaW5rZWQ6IEJvb2xlYW4hXG4gICAgXCJTaXRlIG5hbWVcIlxuICAgIHNpdGVOYW1lOiBTdHJpbmdcbiAgICBcIldQIEVuZ2luZSBjb25uZWN0aW9uc1wiXG4gICAgY29ubmVjdGlvbnM6IFtXcGVDb25uZWN0aW9uIV1cbiAgICBcIk51bWJlciBvZiBjb25uZWN0aW9uc1wiXG4gICAgY29ubmVjdGlvbkNvdW50OiBJbnRcbiAgICBcIlN5bmMgY2FwYWJpbGl0aWVzIChvbmx5IHByZXNlbnQgaWYgbGlua2VkKVwiXG4gICAgY2FwYWJpbGl0aWVzOiBXcGVTeW5jQ2FwYWJpbGl0aWVzXG4gICAgXCJNZXNzYWdlIChmb3IgdW5saW5rZWQgc2l0ZXMpXCJcbiAgICBtZXNzYWdlOiBTdHJpbmdcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICAjIFBoYXNlIDExYzogU3luYyBPcGVyYXRpb25zIFR5cGVzXG4gIHR5cGUgU3luY0hpc3RvcnlFdmVudCB7XG4gICAgXCJSZW1vdGUgaW5zdGFsbCBuYW1lXCJcbiAgICByZW1vdGVJbnN0YWxsTmFtZTogU3RyaW5nXG4gICAgXCJVbml4IHRpbWVzdGFtcFwiXG4gICAgdGltZXN0YW1wOiBGbG9hdCFcbiAgICBcIkVudmlyb25tZW50IChwcm9kdWN0aW9uLCBzdGFnaW5nLCBkZXZlbG9wbWVudClcIlxuICAgIGVudmlyb25tZW50OiBTdHJpbmchXG4gICAgXCJTeW5jIGRpcmVjdGlvblwiXG4gICAgZGlyZWN0aW9uOiBTdHJpbmchXG4gICAgXCJTeW5jIHN0YXR1c1wiXG4gICAgc3RhdHVzOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgR2V0U3luY0hpc3RvcnlSZXN1bHQge1xuICAgIFwiV2hldGhlciB0aGUgcXVlcnkgd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJTaXRlIG5hbWVcIlxuICAgIHNpdGVOYW1lOiBTdHJpbmdcbiAgICBcIlN5bmMgaGlzdG9yeSBldmVudHNcIlxuICAgIGV2ZW50czogW1N5bmNIaXN0b3J5RXZlbnQhXVxuICAgIFwiTnVtYmVyIG9mIGV2ZW50c1wiXG4gICAgY291bnQ6IEludFxuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgU3luY1Jlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHRoZSBzeW5jIHdhcyBpbml0aWF0ZWQgc3VjY2Vzc2Z1bGx5XCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiU3RhdHVzIG1lc3NhZ2VcIlxuICAgIG1lc3NhZ2U6IFN0cmluZ1xuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gICMgRmlsZSBjaGFuZ2UgZGV0ZWN0aW9uXG4gIHR5cGUgRmlsZUNoYW5nZSB7XG4gICAgXCJGaWxlIHBhdGggcmVsYXRpdmUgdG8gc2l0ZSByb290XCJcbiAgICBwYXRoOiBTdHJpbmchXG4gICAgXCJDaGFuZ2UgdHlwZTogY3JlYXRlLCB1cGxvYWQsIGRvd25sb2FkLCBkZWxldGUsIG1vZGlmeVwiXG4gICAgaW5zdHJ1Y3Rpb246IFN0cmluZyFcbiAgICBcIkZpbGUgc2l6ZSBpbiBieXRlc1wiXG4gICAgc2l6ZTogSW50XG4gICAgXCJGaWxlIHR5cGU6IC0gKGZpbGUpIG9yIGQgKGRpcmVjdG9yeSlcIlxuICAgIHR5cGU6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBHZXRTaXRlQ2hhbmdlc1Jlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHRoZSBxdWVyeSB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIlNpdGUgbmFtZVwiXG4gICAgc2l0ZU5hbWU6IFN0cmluZ1xuICAgIFwiRGlyZWN0aW9uIG9mIGNvbXBhcmlzb25cIlxuICAgIGRpcmVjdGlvbjogU3RyaW5nXG4gICAgXCJGaWxlcyB0aGF0IHdvdWxkIGJlIGFkZGVkL3VwbG9hZGVkXCJcbiAgICBhZGRlZDogW0ZpbGVDaGFuZ2UhXVxuICAgIFwiRmlsZXMgdGhhdCB3b3VsZCBiZSBtb2RpZmllZFwiXG4gICAgbW9kaWZpZWQ6IFtGaWxlQ2hhbmdlIV1cbiAgICBcIkZpbGVzIHRoYXQgd291bGQgYmUgZGVsZXRlZFwiXG4gICAgZGVsZXRlZDogW0ZpbGVDaGFuZ2UhXVxuICAgIFwiVG90YWwgbnVtYmVyIG9mIGNoYW5nZXNcIlxuICAgIHRvdGFsQ2hhbmdlczogSW50XG4gICAgXCJTdW1tYXJ5IG1lc3NhZ2VcIlxuICAgIG1lc3NhZ2U6IFN0cmluZ1xuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gICMgUGhhc2UgMTA6IENsb3VkIEJhY2t1cCBUeXBlc1xuICB0eXBlIEJhY2t1cFByb3ZpZGVyU3RhdHVzIHtcbiAgICBcIldoZXRoZXIgYXV0aGVudGljYXRlZCB3aXRoIHByb3ZpZGVyXCJcbiAgICBhdXRoZW50aWNhdGVkOiBCb29sZWFuIVxuICAgIFwiQWNjb3VudCBJRFwiXG4gICAgYWNjb3VudElkOiBTdHJpbmdcbiAgICBcIkFjY291bnQgZW1haWxcIlxuICAgIGVtYWlsOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgQmFja3VwU3RhdHVzUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgYmFja3VwcyBhcmUgYXZhaWxhYmxlXCJcbiAgICBhdmFpbGFibGU6IEJvb2xlYW4hXG4gICAgXCJXaGV0aGVyIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWRcIlxuICAgIGZlYXR1cmVFbmFibGVkOiBCb29sZWFuIVxuICAgIFwiRHJvcGJveCBhdXRoZW50aWNhdGlvbiBzdGF0dXNcIlxuICAgIGRyb3Bib3g6IEJhY2t1cFByb3ZpZGVyU3RhdHVzXG4gICAgXCJHb29nbGUgRHJpdmUgYXV0aGVudGljYXRpb24gc3RhdHVzXCJcbiAgICBnb29nbGVEcml2ZTogQmFja3VwUHJvdmlkZXJTdGF0dXNcbiAgICBcIk1lc3NhZ2UgaWYgYmFja3VwcyB1bmF2YWlsYWJsZVwiXG4gICAgbWVzc2FnZTogU3RyaW5nXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBCYWNrdXBNZXRhZGF0YSB7XG4gICAgXCJTbmFwc2hvdCBJRFwiXG4gICAgc25hcHNob3RJZDogU3RyaW5nIVxuICAgIFwiQmFja3VwIHRpbWVzdGFtcCAoSVNPIGZvcm1hdClcIlxuICAgIHRpbWVzdGFtcDogU3RyaW5nXG4gICAgXCJCYWNrdXAgbm90ZS9kZXNjcmlwdGlvblwiXG4gICAgbm90ZTogU3RyaW5nXG4gICAgXCJTaXRlIGRvbWFpblwiXG4gICAgc2l0ZURvbWFpbjogU3RyaW5nXG4gICAgXCJTZXJ2aWNlcyBpbmZvIChKU09OKVwiXG4gICAgc2VydmljZXM6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBMaXN0QmFja3Vwc1Jlc3VsdCB7XG4gICAgXCJXaGV0aGVyIHF1ZXJ5IHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiU2l0ZSBuYW1lXCJcbiAgICBzaXRlTmFtZTogU3RyaW5nXG4gICAgXCJCYWNrdXAgcHJvdmlkZXJcIlxuICAgIHByb3ZpZGVyOiBTdHJpbmdcbiAgICBcIkxpc3Qgb2YgYmFja3Vwc1wiXG4gICAgYmFja3VwczogW0JhY2t1cE1ldGFkYXRhIV1cbiAgICBcIk51bWJlciBvZiBiYWNrdXBzXCJcbiAgICBjb3VudDogSW50XG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBDcmVhdGVCYWNrdXBSZXN1bHQge1xuICAgIFwiV2hldGhlciBiYWNrdXAgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5XCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiU25hcHNob3QgSURcIlxuICAgIHNuYXBzaG90SWQ6IFN0cmluZ1xuICAgIFwiQmFja3VwIHRpbWVzdGFtcFwiXG4gICAgdGltZXN0YW1wOiBTdHJpbmdcbiAgICBcIlN0YXR1cyBtZXNzYWdlXCJcbiAgICBtZXNzYWdlOiBTdHJpbmdcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICB0eXBlIFJlc3RvcmVCYWNrdXBSZXN1bHQge1xuICAgIFwiV2hldGhlciByZXN0b3JlIHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiU3RhdHVzIG1lc3NhZ2VcIlxuICAgIG1lc3NhZ2U6IFN0cmluZ1xuICAgIFwiRXJyb3IgbWVzc2FnZSBpZiBmYWlsZWRcIlxuICAgIGVycm9yOiBTdHJpbmdcbiAgfVxuXG4gIHR5cGUgRGVsZXRlQmFja3VwUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgZGVsZXRpb24gd2FzIHN1Y2Nlc3NmdWxcIlxuICAgIHN1Y2Nlc3M6IEJvb2xlYW4hXG4gICAgXCJEZWxldGVkIHNuYXBzaG90IElEXCJcbiAgICBkZWxldGVkU25hcHNob3RJZDogU3RyaW5nXG4gICAgXCJTdGF0dXMgbWVzc2FnZVwiXG4gICAgbWVzc2FnZTogU3RyaW5nXG4gICAgXCJFcnJvciBtZXNzYWdlIGlmIGZhaWxlZFwiXG4gICAgZXJyb3I6IFN0cmluZ1xuICB9XG5cbiAgdHlwZSBEb3dubG9hZEJhY2t1cFJlc3VsdCB7XG4gICAgXCJXaGV0aGVyIGRvd25sb2FkIHdhcyBzdWNjZXNzZnVsXCJcbiAgICBzdWNjZXNzOiBCb29sZWFuIVxuICAgIFwiUGF0aCB0byBkb3dubG9hZGVkIGZpbGVcIlxuICAgIGZpbGVQYXRoOiBTdHJpbmdcbiAgICBcIlN0YXR1cyBtZXNzYWdlXCJcbiAgICBtZXNzYWdlOiBTdHJpbmdcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICB0eXBlIEVkaXRCYWNrdXBOb3RlUmVzdWx0IHtcbiAgICBcIldoZXRoZXIgZWRpdCB3YXMgc3VjY2Vzc2Z1bFwiXG4gICAgc3VjY2VzczogQm9vbGVhbiFcbiAgICBcIlVwZGF0ZWQgc25hcHNob3QgSURcIlxuICAgIHNuYXBzaG90SWQ6IFN0cmluZ1xuICAgIFwiVXBkYXRlZCBub3RlXCJcbiAgICBub3RlOiBTdHJpbmdcbiAgICBcIkVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkXCJcbiAgICBlcnJvcjogU3RyaW5nXG4gIH1cblxuICBleHRlbmQgdHlwZSBRdWVyeSB7XG4gICAgIyBQaGFzZSAxMDogQ2xvdWQgQmFja3Vwc1xuICAgIFwiQ2hlY2sgaWYgY2xvdWQgYmFja3VwcyBhcmUgYXZhaWxhYmxlIGFuZCBhdXRoZW50aWNhdGVkXCJcbiAgICBiYWNrdXBTdGF0dXM6IEJhY2t1cFN0YXR1c1Jlc3VsdCFcblxuICAgIFwiTGlzdCBhbGwgYmFja3VwcyBmb3IgYSBzaXRlXCJcbiAgICBsaXN0QmFja3VwcyhzaXRlSWQ6IElEISwgcHJvdmlkZXI6IFN0cmluZyEpOiBMaXN0QmFja3Vwc1Jlc3VsdCFcblxuICAgICMgUGhhc2UgMTFjOiBTeW5jIE9wZXJhdGlvbnNcbiAgICBcIkdldCBzeW5jIGhpc3RvcnkgZm9yIGEgbG9jYWwgc2l0ZVwiXG4gICAgZ2V0U3luY0hpc3Rvcnkoc2l0ZUlkOiBJRCEsIGxpbWl0OiBJbnQpOiBHZXRTeW5jSGlzdG9yeVJlc3VsdCFcblxuICAgIFwiR2V0IGZpbGUgY2hhbmdlcyBiZXR3ZWVuIGxvY2FsIHNpdGUgYW5kIFdQIEVuZ2luZSAoZHJ5LXJ1biBjb21wYXJpc29uKVwiXG4gICAgZ2V0U2l0ZUNoYW5nZXMoc2l0ZUlkOiBJRCEsIGRpcmVjdGlvbjogU3RyaW5nID0gXCJwdXNoXCIpOiBHZXRTaXRlQ2hhbmdlc1Jlc3VsdCFcbiAgfVxuXG4gIGV4dGVuZCB0eXBlIE11dGF0aW9uIHtcbiAgICAjIFBoYXNlIDEwOiBDbG91ZCBCYWNrdXBzXG4gICAgXCJDcmVhdGUgYSBiYWNrdXAgb2YgYSBzaXRlIHRvIGNsb3VkIHN0b3JhZ2VcIlxuICAgIGNyZWF0ZUJhY2t1cChzaXRlSWQ6IElEISwgcHJvdmlkZXI6IFN0cmluZyEsIG5vdGU6IFN0cmluZyk6IENyZWF0ZUJhY2t1cFJlc3VsdCFcblxuICAgIFwiUmVzdG9yZSBhIHNpdGUgZnJvbSBhIGNsb3VkIGJhY2t1cFwiXG4gICAgcmVzdG9yZUJhY2t1cChcbiAgICAgIHNpdGVJZDogSUQhXG4gICAgICBwcm92aWRlcjogU3RyaW5nIVxuICAgICAgc25hcHNob3RJZDogU3RyaW5nIVxuICAgICAgY29uZmlybTogQm9vbGVhbiA9IGZhbHNlXG4gICAgKTogUmVzdG9yZUJhY2t1cFJlc3VsdCFcblxuICAgIFwiRGVsZXRlIGEgYmFja3VwIGZyb20gY2xvdWQgc3RvcmFnZVwiXG4gICAgZGVsZXRlQmFja3VwKFxuICAgICAgc2l0ZUlkOiBJRCFcbiAgICAgIHByb3ZpZGVyOiBTdHJpbmchXG4gICAgICBzbmFwc2hvdElkOiBTdHJpbmchXG4gICAgICBjb25maXJtOiBCb29sZWFuID0gZmFsc2VcbiAgICApOiBEZWxldGVCYWNrdXBSZXN1bHQhXG5cbiAgICBcIkRvd25sb2FkIGEgYmFja3VwIGFzIGEgWklQIGZpbGVcIlxuICAgIGRvd25sb2FkQmFja3VwKHNpdGVJZDogSUQhLCBwcm92aWRlcjogU3RyaW5nISwgc25hcHNob3RJZDogU3RyaW5nISk6IERvd25sb2FkQmFja3VwUmVzdWx0IVxuXG4gICAgXCJVcGRhdGUgdGhlIG5vdGUvZGVzY3JpcHRpb24gZm9yIGEgYmFja3VwXCJcbiAgICBlZGl0QmFja3VwTm90ZShcbiAgICAgIHNpdGVJZDogSUQhXG4gICAgICBwcm92aWRlcjogU3RyaW5nIVxuICAgICAgc25hcHNob3RJZDogU3RyaW5nIVxuICAgICAgbm90ZTogU3RyaW5nIVxuICAgICk6IEVkaXRCYWNrdXBOb3RlUmVzdWx0IVxuXG4gICAgIyBQaGFzZSAxMTogV1AgRW5naW5lIENvbm5lY3RcbiAgICBcIkF1dGhlbnRpY2F0ZSB3aXRoIFdQIEVuZ2luZSAob3BlbnMgYnJvd3NlciBmb3IgT0F1dGgpXCJcbiAgICB3cGVBdXRoZW50aWNhdGU6IFdwZUF1dGhSZXN1bHQhXG5cbiAgICBcIkxvZ291dCBmcm9tIFdQIEVuZ2luZVwiXG4gICAgd3BlTG9nb3V0OiBXcGVMb2dvdXRSZXN1bHQhXG5cbiAgICAjIFBoYXNlIDExYzogU3luYyBPcGVyYXRpb25zXG4gICAgXCJQdXNoIGxvY2FsIHNpdGUgdG8gV1AgRW5naW5lXCJcbiAgICBwdXNoVG9XcGUoXG4gICAgICBsb2NhbFNpdGVJZDogSUQhXG4gICAgICByZW1vdGVJbnN0YWxsSWQ6IElEIVxuICAgICAgaW5jbHVkZVNxbDogQm9vbGVhbiA9IGZhbHNlXG4gICAgICBjb25maXJtOiBCb29sZWFuID0gZmFsc2VcbiAgICApOiBTeW5jUmVzdWx0IVxuXG4gICAgXCJQdWxsIGZyb20gV1AgRW5naW5lIHRvIGxvY2FsIHNpdGVcIlxuICAgIHB1bGxGcm9tV3BlKGxvY2FsU2l0ZUlkOiBJRCEsIHJlbW90ZUluc3RhbGxJZDogSUQhLCBpbmNsdWRlU3FsOiBCb29sZWFuID0gZmFsc2UpOiBTeW5jUmVzdWx0IVxuICB9XG5gO1xuXG4vKipcbiAqIENyZWF0ZSBHcmFwaFFMIHJlc29sdmVycyB0aGF0IHVzZSBMb2NhbCdzIGludGVybmFsIHNlcnZpY2VzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVycyhzZXJ2aWNlczogYW55KSB7XG4gIGNvbnN0IHtcbiAgICBkZWxldGVTaXRlOiBkZWxldGVTaXRlU2VydmljZSxcbiAgICBzaXRlRGF0YSxcbiAgICBsb2NhbExvZ2dlcixcbiAgICB3cENsaSxcbiAgICBzaXRlUHJvY2Vzc01hbmFnZXIsXG4gICAgYWRkU2l0ZTogYWRkU2l0ZVNlcnZpY2UsXG4gICAgY2xvbmVTaXRlOiBjbG9uZVNpdGVTZXJ2aWNlLFxuICAgIGV4cG9ydFNpdGU6IGV4cG9ydFNpdGVTZXJ2aWNlLFxuICAgIGJsdWVwcmludHM6IGJsdWVwcmludHNTZXJ2aWNlLFxuICAgIGJyb3dzZXJNYW5hZ2VyLFxuICAgIGFkbWluZXIsXG4gICAgeDUwOUNlcnQsXG4gICAgc2l0ZVByb3Zpc2lvbmVyLFxuICAgIGltcG9ydFNpdGU6IGltcG9ydFNpdGVTZXJ2aWNlLFxuICAgIGxpZ2h0bmluZ1NlcnZpY2VzLFxuICAgIHNpdGVEYXRhYmFzZSxcbiAgICBpbXBvcnRTUUxGaWxlOiBpbXBvcnRTUUxGaWxlU2VydmljZSxcbiAgICAvLyBQaGFzZSAxMTogV1AgRW5naW5lIENvbm5lY3RcbiAgICB3cGVPQXV0aDogd3BlT0F1dGhTZXJ2aWNlLFxuICAgIGNhcGk6IGNhcGlTZXJ2aWNlLFxuICAgIC8vIFBoYXNlIDExYzogU3luYyBzZXJ2aWNlc1xuICAgIHdwZVB1c2g6IHdwZVB1c2hTZXJ2aWNlLFxuICAgIHdwZVB1bGw6IHdwZVB1bGxTZXJ2aWNlLFxuICAgIGNvbm5lY3RIaXN0b3J5OiBjb25uZWN0SGlzdG9yeVNlcnZpY2UsXG4gICAgd3BlQ29ubmVjdEJhc2U6IHdwZUNvbm5lY3RCYXNlU2VydmljZSxcbiAgICAvLyBOb3RlOiBQaGFzZSAxMCBDbG91ZCBCYWNrdXAgc2VydmljZXMgYXJlIGFjY2Vzc2VkIHZpYSBJUEMgdG8gdGhlIENsb3VkIEJhY2t1cHMgYWRkb25cbiAgICAvLyAoYmFja3VwU2VydmljZSwgZHJvcGJveCwgZ29vZ2xlRHJpdmUsIGZlYXR1cmVGbGFncywgdXNlckRhdGEpXG4gIH0gPSBzZXJ2aWNlcztcblxuICAvLyBIZWxwZXIgdG8gaW52b2tlIElQQyBjYWxscyB0byB0aGUgQ2xvdWQgQmFja3VwcyBhZGRvblxuICAvLyBUaGlzIHVzZXMgdGhlIHNhbWUgcGF0dGVybiBhcyB0aGUgQmFja3VwQUlCcmlkZ2VcbiAgLy8gVGltZW91dCBjb25zdGFudHMgZm9yIGJhY2t1cCBvcGVyYXRpb25zIChpbiBtaWxsaXNlY29uZHMpXG4gIGNvbnN0IEJBQ0tVUF9JUENfVElNRU9VVCA9IDYwMDAwMDsgLy8gMTAgbWludXRlcyBmb3IgYmFja3VwIG9wZXJhdGlvbnNcbiAgY29uc3QgREVGQVVMVF9JUENfVElNRU9VVCA9IDMwMDAwOyAvLyAzMCBzZWNvbmRzIGZvciBxdWljayBvcGVyYXRpb25zXG5cbiAgY29uc3QgaW52b2tlQmFja3VwSVBDID0gYXN5bmMgKFxuICAgIGNoYW5uZWw6IHN0cmluZyxcbiAgICB0aW1lb3V0TXM6IG51bWJlciA9IEJBQ0tVUF9JUENfVElNRU9VVCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgcmFuZG9tID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpO1xuICAgICAgY29uc3Qgc3VjY2Vzc1JlcGx5Q2hhbm5lbCA9IGAke2NoYW5uZWx9LXN1Y2Nlc3MtJHt0aW1lc3RhbXB9LSR7cmFuZG9tfWA7XG4gICAgICBjb25zdCBlcnJvclJlcGx5Q2hhbm5lbCA9IGAke2NoYW5uZWx9LWVycm9yLSR7dGltZXN0YW1wfS0ke3JhbmRvbX1gO1xuXG4gICAgICBjb25zdCB0aW1lb3V0U2Vjb25kcyA9IE1hdGgucm91bmQodGltZW91dE1zIC8gMTAwMCk7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlwY01haW4ucmVtb3ZlQWxsTGlzdGVuZXJzKHN1Y2Nlc3NSZXBseUNoYW5uZWwpO1xuICAgICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhlcnJvclJlcGx5Q2hhbm5lbCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYElQQyBjYWxsIHRvICR7Y2hhbm5lbH0gdGltZWQgb3V0IGFmdGVyICR7dGltZW91dFNlY29uZHN9IHNlY29uZHNgKSk7XG4gICAgICB9LCB0aW1lb3V0TXMpO1xuXG4gICAgICBpcGNNYWluLm9uY2Uoc3VjY2Vzc1JlcGx5Q2hhbm5lbCwgKF9ldmVudDogYW55LCByZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlwY01haW4ucmVtb3ZlQWxsTGlzdGVuZXJzKGVycm9yUmVwbHlDaGFubmVsKTtcbiAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIElQQyBzdWNjZXNzIGZyb20gJHtjaGFubmVsfWApO1xuICAgICAgICByZXNvbHZlKHsgcmVzdWx0IH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlwY01haW4ub25jZShlcnJvclJlcGx5Q2hhbm5lbCwgKF9ldmVudDogYW55LCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgaXBjTWFpbi5yZW1vdmVBbGxMaXN0ZW5lcnMoc3VjY2Vzc1JlcGx5Q2hhbm5lbCk7XG4gICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gSVBDIGVycm9yIGZyb20gJHtjaGFubmVsfTogJHtlcnJvcj8ubWVzc2FnZX1gKTtcbiAgICAgICAgcmVzb2x2ZSh7IGVycm9yIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1vY2tFdmVudCA9IHtcbiAgICAgICAgcmVwbHk6IChyZXBseUNoYW5uZWw6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaXBjTWFpbi5lbWl0KHJlcGx5Q2hhbm5lbCwgbnVsbCwgZGF0YSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNlbmRlcjoge1xuICAgICAgICAgIHNlbmQ6IChyZXBseUNoYW5uZWw6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBpcGNNYWluLmVtaXQocmVwbHlDaGFubmVsLCBudWxsLCBkYXRhKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVwbHlDaGFubmVscyA9IHsgc3VjY2Vzc1JlcGx5Q2hhbm5lbCwgZXJyb3JSZXBseUNoYW5uZWwgfTtcbiAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBJbnZva2luZyBiYWNrdXAgSVBDOiAke2NoYW5uZWx9YCk7XG4gICAgICBpcGNNYWluLmVtaXQoY2hhbm5lbCwgbW9ja0V2ZW50LCByZXBseUNoYW5uZWxzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBIZWxwZXIgdG8gZ2V0IGJhY2t1cCBwcm92aWRlcnMgZnJvbSB0aGUgQ2xvdWQgQmFja3VwcyBhZGRvblxuICBjb25zdCBnZXRCYWNrdXBQcm92aWRlcnMgPSBhc3luYyAoKTogUHJvbWlzZTxBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9Pj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnZva2VCYWNrdXBJUEMoJ2JhY2t1cHM6ZW5hYmxlZC1wcm92aWRlcnMnLCBERUZBVUxUX0lQQ19USU1FT1VUKTtcbiAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBSYXcgSVBDIHJlc3VsdDogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuXG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKFxuICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGdldCBiYWNrdXAgcHJvdmlkZXJzOiAke3Jlc3VsdC5lcnJvci5tZXNzYWdlfWBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgcmVzcG9uc2UgaXMgZG91YmxlLW5lc3RlZDogcmVzdWx0LnJlc3VsdC5yZXN1bHQgY29udGFpbnMgdGhlIGFycmF5XG4gICAgICAvLyBTdHJ1Y3R1cmU6IHsgcmVzdWx0OiB7IHJlc3VsdDogW3Byb3ZpZGVycy4uLl0gfSB9XG4gICAgICBsZXQgcHJvdmlkZXJzOiBhbnkgPSByZXN1bHQucmVzdWx0O1xuXG4gICAgICAvLyBVbndyYXAgbmVzdGVkIHJlc3VsdCBpZiBwcmVzZW50XG4gICAgICBpZiAocHJvdmlkZXJzICYmIHR5cGVvZiBwcm92aWRlcnMgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHByb3ZpZGVycykpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvdmlkZXJzLnJlc3VsdCkpIHtcbiAgICAgICAgICBwcm92aWRlcnMgPSBwcm92aWRlcnMucmVzdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKHByb3ZpZGVycy5yZXN1bHQgJiYgdHlwZW9mIHByb3ZpZGVycy5yZXN1bHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgLy8gRXZlbiBkZWVwZXIgbmVzdGluZ1xuICAgICAgICAgIHByb3ZpZGVycyA9IHByb3ZpZGVycy5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEV4dHJhY3RlZCBwcm92aWRlcnM6ICR7SlNPTi5zdHJpbmdpZnkocHJvdmlkZXJzKX1gKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvdmlkZXJzKSkge1xuICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gR290ICR7cHJvdmlkZXJzLmxlbmd0aH0gYmFja3VwIHByb3ZpZGVyc2ApO1xuICAgICAgICByZXR1cm4gcHJvdmlkZXJzO1xuICAgICAgfVxuXG4gICAgICBsb2NhbExvZ2dlci53YXJuKFxuICAgICAgICBgWyR7QURET05fTkFNRX1dIFVuZXhwZWN0ZWQgcHJvdmlkZXJzIGZvcm1hdCBhZnRlciB1bndyYXBwaW5nOiAke3R5cGVvZiBwcm92aWRlcnN9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEVycm9yIGdldHRpbmcgYmFja3VwIHByb3ZpZGVyczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcblxuICAvLyBTaGFyZWQgV1AtQ0xJIGV4ZWN1dGlvbiBsb2dpY1xuICBjb25zdCBleGVjdXRlV3BDbGkgPSBhc3luYyAoXG4gICAgX3BhcmVudDogYW55LFxuICAgIGFyZ3M6IHsgaW5wdXQ6IHsgc2l0ZUlkOiBzdHJpbmc7IGFyZ3M6IHN0cmluZ1tdOyBza2lwUGx1Z2lucz86IGJvb2xlYW47IHNraXBUaGVtZXM/OiBib29sZWFuIH0gfVxuICApID0+IHtcbiAgICBjb25zdCB7IHNpdGVJZCwgYXJnczogd3BBcmdzLCBza2lwUGx1Z2lucyA9IHRydWUsIHNraXBUaGVtZXMgPSB0cnVlIH0gPSBhcmdzLmlucHV0O1xuXG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBSdW5uaW5nIFdQLUNMSTogd3AgJHt3cEFyZ3Muam9pbignICcpfWApO1xuXG4gICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShzaXRlSWQpO1xuICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHNpdGVQcm9jZXNzTWFuYWdlci5nZXRTaXRlU3RhdHVzKHNpdGUpO1xuICAgICAgaWYgKHN0YXR1cyAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICAgIGVycm9yOiBgU2l0ZSBcIiR7c2l0ZS5uYW1lfVwiIGlzIG5vdCBydW5uaW5nLiBTdGFydCBpdCBmaXJzdCB3aXRoOiBsb2NhbC1jbGkgc3RhcnQgJHtzaXRlLm5hbWV9YCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgd3BDbGkucnVuKHNpdGUsIHdwQXJncywge1xuICAgICAgICBza2lwUGx1Z2lucyxcbiAgICAgICAgc2tpcFRoZW1lcyxcbiAgICAgICAgaWdub3JlRXJyb3JzOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gV1AtQ0xJIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgb3V0cHV0OiBvdXRwdXQ/LnRyaW0oKSB8fCAnJyxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gV1AtQ0xJIGZhaWxlZDpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICB9O1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIFF1ZXJ5OiB7XG4gICAgICB3cENsaVF1ZXJ5OiBleGVjdXRlV3BDbGksXG5cbiAgICAgIGJsdWVwcmludHM6IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gRmV0Y2hpbmcgYmx1ZXByaW50c2ApO1xuXG4gICAgICAgICAgY29uc3QgYmx1ZXByaW50c0xpc3QgPSBhd2FpdCBibHVlcHJpbnRzU2VydmljZS5nZXRCbHVlcHJpbnRzKCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgYmx1ZXByaW50czogYmx1ZXByaW50c0xpc3QubWFwKChicDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICBuYW1lOiBicC5uYW1lLFxuICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGJwLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBvYmplY3RzIC0gZXh0cmFjdCBqdXN0IHRoZSBuYW1lL3R5cGUgc3RyaW5nXG4gICAgICAgICAgICAgIHBocFZlcnNpb246XG4gICAgICAgICAgICAgICAgdHlwZW9mIGJwLnBocFZlcnNpb24gPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICA/IGJwLnBocFZlcnNpb24/Lm5hbWUgfHwgYnAucGhwVmVyc2lvbj8udmVyc2lvblxuICAgICAgICAgICAgICAgICAgOiBicC5waHBWZXJzaW9uLFxuICAgICAgICAgICAgICB3ZWJTZXJ2ZXI6XG4gICAgICAgICAgICAgICAgdHlwZW9mIGJwLndlYlNlcnZlciA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgID8gYnAud2ViU2VydmVyPy5uYW1lIHx8IGJwLndlYlNlcnZlcj8udHlwZVxuICAgICAgICAgICAgICAgICAgOiBicC53ZWJTZXJ2ZXIsXG4gICAgICAgICAgICAgIGRhdGFiYXNlOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBicC5kYXRhYmFzZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgID8gYnAuZGF0YWJhc2U/Lm5hbWUgfHwgYnAuZGF0YWJhc2U/LnR5cGVcbiAgICAgICAgICAgICAgICAgIDogYnAuZGF0YWJhc2UsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGZldGNoIGJsdWVwcmludHM6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgIGJsdWVwcmludHM6IFtdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGxpc3RTZXJ2aWNlczogYXN5bmMgKF9wYXJlbnQ6IGFueSwgYXJnczogeyB0eXBlPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgY29uc3QgeyB0eXBlID0gJ2FsbCcgfSA9IGFyZ3M7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gTGlzdGluZyBzZXJ2aWNlcyAodHlwZTogJHt0eXBlfSlgKTtcblxuICAgICAgICAgIGlmICghbGlnaHRuaW5nU2VydmljZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogJ0xpZ2h0bmluZyBzZXJ2aWNlcyBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgc2VydmljZXM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByb2xlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgcGhwOiAncGhwJyxcbiAgICAgICAgICAgIGRhdGFiYXNlOiAnbXlzcWwnLFxuICAgICAgICAgICAgd2Vic2VydmVyOiAnbmdpbngnLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCByb2xlRmlsdGVyID0gdHlwZSAhPT0gJ2FsbCcgPyByb2xlTWFwW3R5cGVdIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IHJlZ2lzdGVyZWRTZXJ2aWNlcyA9IGxpZ2h0bmluZ1NlcnZpY2VzLmdldFJlZ2lzdGVyZWRTZXJ2aWNlcyhyb2xlRmlsdGVyKTtcblxuICAgICAgICAgIGNvbnN0IHNlcnZpY2VMaXN0OiBBcnJheTx7IHJvbGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfT4gPSBbXTtcblxuICAgICAgICAgIGZvciAoY29uc3QgW3JvbGUsIHZlcnNpb25zXSBvZiBPYmplY3QuZW50cmllcyhyZWdpc3RlcmVkU2VydmljZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFt2ZXJzaW9uLCBpbmZvXSBvZiBPYmplY3QuZW50cmllcyh2ZXJzaW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KSkge1xuICAgICAgICAgICAgICBzZXJ2aWNlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICByb2xlLFxuICAgICAgICAgICAgICAgIG5hbWU6IGluZm8/Lm5hbWUgfHwgcm9sZSxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgc2VydmljZXM6IHNlcnZpY2VMaXN0LFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBsaXN0IHNlcnZpY2VzOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBzZXJ2aWNlczogW10sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gUGhhc2UgMTE6IFdQIEVuZ2luZSBDb25uZWN0XG4gICAgICB3cGVTdGF0dXM6IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gQ2hlY2tpbmcgV1AgRW5naW5lIGF1dGhlbnRpY2F0aW9uIHN0YXR1c2ApO1xuXG4gICAgICAgICAgaWYgKCF3cGVPQXV0aFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBlbWFpbDogbnVsbCxcbiAgICAgICAgICAgICAgYWNjb3VudElkOiBudWxsLFxuICAgICAgICAgICAgICBhY2NvdW50TmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgdG9rZW5FeHBpcnk6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiAnV1AgRW5naW5lIE9BdXRoIHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgdmFsaWQgY3JlZGVudGlhbHMgYnkgdHJ5aW5nIHRvIGdldCBhY2Nlc3MgdG9rZW5cbiAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IHdwZU9BdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xuXG4gICAgICAgICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgIGVtYWlsOiBudWxsLFxuICAgICAgICAgICAgICBhY2NvdW50SWQ6IG51bGwsXG4gICAgICAgICAgICAgIGFjY291bnROYW1lOiBudWxsLFxuICAgICAgICAgICAgICB0b2tlbkV4cGlyeTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRyeSB0byBnZXQgdXNlciBpbmZvIGZyb20gQ0FQSSBpZiBhdmFpbGFibGVcbiAgICAgICAgICBsZXQgZW1haWwgPSBudWxsO1xuICAgICAgICAgIGlmIChjYXBpU2VydmljZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXIgPSBhd2FpdCBjYXBpU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICAgICAgICBlbWFpbCA9IGN1cnJlbnRVc2VyPy5lbWFpbCB8fCBudWxsO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIFVzZXIgaW5mbyBub3QgYXZhaWxhYmxlLCBidXQgc3RpbGwgYXV0aGVudGljYXRlZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAgICAgICAgZW1haWwsXG4gICAgICAgICAgICBhY2NvdW50SWQ6IG51bGwsXG4gICAgICAgICAgICBhY2NvdW50TmFtZTogbnVsbCxcbiAgICAgICAgICAgIHRva2VuRXhwaXJ5OiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGNoZWNrIFdQRSBzdGF0dXM6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGVtYWlsOiBudWxsLFxuICAgICAgICAgICAgYWNjb3VudElkOiBudWxsLFxuICAgICAgICAgICAgYWNjb3VudE5hbWU6IG51bGwsXG4gICAgICAgICAgICB0b2tlbkV4cGlyeTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBsaXN0V3BlU2l0ZXM6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgYWNjb3VudElkPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBhY2NvdW50SWQgfSA9IGFyZ3M7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBMaXN0aW5nIFdQIEVuZ2luZSBzaXRlcyR7YWNjb3VudElkID8gYCBmb3IgYWNjb3VudCAke2FjY291bnRJZH1gIDogJyd9YFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIXdwZU9BdXRoU2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiAnV1AgRW5naW5lIE9BdXRoIHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICAgIHNpdGVzOiBbXSxcbiAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGlmIGF1dGhlbnRpY2F0ZWQgYnkgdHJ5aW5nIHRvIGdldCBhY2Nlc3MgdG9rZW5cbiAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IHdwZU9BdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogJ05vdCBhdXRoZW50aWNhdGVkIHdpdGggV1AgRW5naW5lLiBVc2Ugd3BlX2F1dGhlbnRpY2F0ZSBmaXJzdC4nLFxuICAgICAgICAgICAgICBzaXRlczogW10sXG4gICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWNhcGlTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6ICdXUCBFbmdpbmUgQ0FQSSBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnLFxuICAgICAgICAgICAgICBzaXRlczogW10sXG4gICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZXQgaW5zdGFsbHMgZnJvbSBDQVBJIHVzaW5nIGdldEluc3RhbGxMaXN0XG4gICAgICAgICAgY29uc3QgaW5zdGFsbHMgPSBhd2FpdCBjYXBpU2VydmljZS5nZXRJbnN0YWxsTGlzdCgpO1xuXG4gICAgICAgICAgaWYgKCFpbnN0YWxscykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgIHNpdGVzOiBbXSxcbiAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNpdGVzID0gaW5zdGFsbHMubWFwKChpbnN0YWxsOiBhbnkpID0+ICh7XG4gICAgICAgICAgICBpZDogaW5zdGFsbC5pZCxcbiAgICAgICAgICAgIG5hbWU6IGluc3RhbGwubmFtZSxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBpbnN0YWxsLmVudmlyb25tZW50IHx8ICdwcm9kdWN0aW9uJyxcbiAgICAgICAgICAgIHBocFZlcnNpb246IGluc3RhbGwucGhwVmVyc2lvbiB8fCBudWxsLFxuICAgICAgICAgICAgcHJpbWFyeURvbWFpbjogaW5zdGFsbC5wcmltYXJ5RG9tYWluIHx8IGluc3RhbGwuY25hbWUgfHwgbnVsbCxcbiAgICAgICAgICAgIGFjY291bnRJZDogaW5zdGFsbC5hY2NvdW50SWQgfHwgYWNjb3VudElkIHx8IG51bGwsXG4gICAgICAgICAgICBhY2NvdW50TmFtZTogaW5zdGFsbC5hY2NvdW50TmFtZSB8fCBudWxsLFxuICAgICAgICAgICAgc2Z0cEhvc3Q6IGAke2luc3RhbGwubmFtZX0uc3NoLndwZW5naW5lLm5ldGAsXG4gICAgICAgICAgICBzZnRwVXNlcjogaW5zdGFsbC5uYW1lLFxuICAgICAgICAgIH0pKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBzaXRlcyxcbiAgICAgICAgICAgIGNvdW50OiBzaXRlcy5sZW5ndGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGxpc3QgV1BFIHNpdGVzOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBzaXRlczogW10sXG4gICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBQaGFzZSAxMWI6IFNpdGUgTGlua2luZ1xuICAgICAgZ2V0V3BlTGluazogYXN5bmMgKF9wYXJlbnQ6IGFueSwgYXJnczogeyBzaXRlSWQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkIH0gPSBhcmdzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEdldHRpbmcgV1AgRW5naW5lIGxpbmsgZm9yIHNpdGUgJHtzaXRlSWR9YCk7XG5cbiAgICAgICAgICAvLyBHZXQgc2l0ZSBmcm9tIHNpdGVEYXRhXG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGxpbmtlZDogZmFsc2UsXG4gICAgICAgICAgICAgIHNpdGVOYW1lOiBudWxsLFxuICAgICAgICAgICAgICBjb25uZWN0aW9uczogW10sXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25Db3VudDogMCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IGhvc3RDb25uZWN0aW9ucyBmcm9tIHNpdGVcbiAgICAgICAgICBjb25zdCBob3N0Q29ubmVjdGlvbnMgPSBzaXRlLmhvc3RDb25uZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgICBjb25zdCB3cGVDb25uZWN0aW9ucyA9IGhvc3RDb25uZWN0aW9ucy5maWx0ZXIoKGM6IGFueSkgPT4gYy5ob3N0SWQgPT09ICd3cGUnKTtcblxuICAgICAgICAgIGlmICh3cGVDb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGxpbmtlZDogZmFsc2UsXG4gICAgICAgICAgICAgIHNpdGVOYW1lOiBzaXRlLm5hbWUsXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25zOiBbXSxcbiAgICAgICAgICAgICAgY29ubmVjdGlvbkNvdW50OiAwLFxuICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgICdTaXRlIGlzIG5vdCBsaW5rZWQgdG8gYW55IFdQIEVuZ2luZSBlbnZpcm9ubWVudC4gVXNlIENvbm5lY3QgaW4gTG9jYWwgdG8gcHVsbCBhIHNpdGUgZnJvbSBXUEUuJyxcbiAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRyYW5zZm9ybSBjb25uZWN0aW9ucyBmb3Igb3V0cHV0LCBlbnJpY2hpbmcgd2l0aCBDQVBJIGRhdGEgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvbnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHdwZUNvbm5lY3Rpb25zLm1hcChhc3luYyAoYzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBpbnN0YWxsTmFtZSA9IGMucmVtb3RlU2l0ZUlkOyAvLyBEZWZhdWx0IHRvIFVVSURcbiAgICAgICAgICAgICAgbGV0IHBvcnRhbFVybCA9IG51bGw7XG4gICAgICAgICAgICAgIGxldCBwcmltYXJ5RG9tYWluID0gbnVsbDtcblxuICAgICAgICAgICAgICAvLyBUcnkgdG8gZ2V0IGluc3RhbGwgZGV0YWlscyBmcm9tIENBUEkgdG8gZ2V0IHRoZSBhY3R1YWwgbmFtZVxuICAgICAgICAgICAgICAvLyByZW1vdGVTaXRlSWQgbWF0Y2hlcyBpbnN0YWxsLnNpdGUuaWQgKFdQRSBTaXRlIElEKSwgbm90IGluc3RhbGwuaWRcbiAgICAgICAgICAgICAgaWYgKGNhcGlTZXJ2aWNlICYmIHR5cGVvZiBjYXBpU2VydmljZS5nZXRJbnN0YWxsTGlzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIExvb2tpbmcgZm9yIGluc3RhbGwgd2l0aCBzaXRlLmlkPSR7Yy5yZW1vdGVTaXRlSWR9LCBlbnY9JHtjLnJlbW90ZVNpdGVFbnZ9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbGxzID0gYXdhaXQgY2FwaVNlcnZpY2UuZ2V0SW5zdGFsbExpc3QoKTtcbiAgICAgICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gR290ICR7aW5zdGFsbHM/Lmxlbmd0aCB8fCAwfSBpbnN0YWxscyBmcm9tIENBUElgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbGxzICYmIGluc3RhbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTG9nIGZpcnN0IGluc3RhbGwgc3RydWN0dXJlIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIFNhbXBsZSBpbnN0YWxsIHN0cnVjdHVyZTogJHtKU09OLnN0cmluZ2lmeShpbnN0YWxsc1swXSwgbnVsbCwgMil9YFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIGJ5IHNpdGUuaWQgKHJlbW90ZVNpdGVJZCBpcyB0aGUgV1BFIFNpdGUgSUQsIG5vdCBJbnN0YWxsIElEKVxuICAgICAgICAgICAgICAgICAgICAvLyBBbHNvIGZpbHRlciBieSBlbnZpcm9ubWVudCBpZiBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdJbnN0YWxsID0gaW5zdGFsbHMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAoaTogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgaS5zaXRlPy5pZCA9PT0gYy5yZW1vdGVTaXRlSWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghYy5yZW1vdGVTaXRlRW52IHx8IGkuZW52aXJvbm1lbnQgPT09IGMucmVtb3RlU2l0ZUVudilcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmdJbnN0YWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEZvdW5kIG1hdGNoOiAke21hdGNoaW5nSW5zdGFsbC5uYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxOYW1lID0gbWF0Y2hpbmdJbnN0YWxsLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgcG9ydGFsVXJsID0gYGh0dHBzOi8vbXkud3BlbmdpbmUuY29tL2luc3RhbGxzLyR7bWF0Y2hpbmdJbnN0YWxsLm5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5RG9tYWluID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nSW5zdGFsbC5wcmltYXJ5X2RvbWFpbiB8fCBtYXRjaGluZ0luc3RhbGwuY25hbWUgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbExvZ2dlci53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBObyBtYXRjaGluZyBpbnN0YWxsIGZvdW5kIGZvciBzaXRlLmlkPSR7Yy5yZW1vdGVTaXRlSWR9YFxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLndhcm4oXG4gICAgICAgICAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gQ291bGQgbm90IGxvb2sgdXAgaW5zdGFsbCBmcm9tIENBUEk6ICR7ZS5tZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLndhcm4oYFske0FERE9OX05BTUV9XSBjYXBpU2VydmljZSBvciBnZXRJbnN0YWxsTGlzdCBub3QgYXZhaWxhYmxlYCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlbW90ZUluc3RhbGxJZDogYy5yZW1vdGVTaXRlSWQsXG4gICAgICAgICAgICAgICAgaW5zdGFsbE5hbWUsXG4gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IGMucmVtb3RlU2l0ZUVudiB8fCBudWxsLFxuICAgICAgICAgICAgICAgIGFjY291bnRJZDogYy5hY2NvdW50SWQgfHwgbnVsbCxcbiAgICAgICAgICAgICAgICBwb3J0YWxVcmwsXG4gICAgICAgICAgICAgICAgcHJpbWFyeURvbWFpbixcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIENhcGFiaWxpdGllcyBhcmUgYWx3YXlzIHRoZSBzYW1lIGZvciBXUEUtY29ubmVjdGVkIHNpdGVzXG4gICAgICAgICAgY29uc3QgY2FwYWJpbGl0aWVzID0ge1xuICAgICAgICAgICAgY2FuUHVzaDogdHJ1ZSxcbiAgICAgICAgICAgIGNhblB1bGw6IHRydWUsXG4gICAgICAgICAgICBzeW5jTW9kZXM6IFsnYWxsX2ZpbGVzJywgJ3NlbGVjdF9maWxlcycsICdkYXRhYmFzZV9vbmx5J10sXG4gICAgICAgICAgICBtYWdpY1N5bmNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgICBkYXRhYmFzZVN5bmNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5rZWQ6IHRydWUsXG4gICAgICAgICAgICBzaXRlTmFtZTogc2l0ZS5uYW1lLFxuICAgICAgICAgICAgY29ubmVjdGlvbnMsXG4gICAgICAgICAgICBjb25uZWN0aW9uQ291bnQ6IGNvbm5lY3Rpb25zLmxlbmd0aCxcbiAgICAgICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gZ2V0IFdQRSBsaW5rOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGlua2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHNpdGVOYW1lOiBudWxsLFxuICAgICAgICAgICAgY29ubmVjdGlvbnM6IFtdLFxuICAgICAgICAgICAgY29ubmVjdGlvbkNvdW50OiAwLFxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBQaGFzZSAxMDogQ2xvdWQgQmFja3Vwc1xuICAgICAgYmFja3VwU3RhdHVzOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIENoZWNraW5nIGJhY2t1cCBzdGF0dXNgKTtcblxuICAgICAgICAgIC8vIEdldCBwcm92aWRlcnMgZnJvbSBDbG91ZCBCYWNrdXBzIGFkZG9uIHZpYSBJUENcbiAgICAgICAgICBjb25zdCBwcm92aWRlcnMgPSBhd2FpdCBnZXRCYWNrdXBQcm92aWRlcnMoKTtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gR290ICR7cHJvdmlkZXJzLmxlbmd0aH0gYmFja3VwIHByb3ZpZGVyc2ApO1xuXG4gICAgICAgICAgaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGF2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGZlYXR1cmVFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgZHJvcGJveDogbnVsbCxcbiAgICAgICAgICAgICAgZ29vZ2xlRHJpdmU6IG51bGwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgJ05vIGNsb3VkIHN0b3JhZ2UgcHJvdmlkZXJzIGNvbmZpZ3VyZWQuIENvbm5lY3QgR29vZ2xlIERyaXZlIG9yIERyb3Bib3ggaW4gTG9jYWwgSHViIChodWIubG9jYWx3cC5jb20vYWRkb25zL2Nsb3VkLWJhY2t1cHMpLicsXG4gICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXAgcHJvdmlkZXIgaW5mbyB0byBvdXIgcmVzcG9uc2UgZm9ybWF0XG4gICAgICAgICAgY29uc3QgZHJvcGJveFByb3ZpZGVyID0gcHJvdmlkZXJzLmZpbmQoXG4gICAgICAgICAgICAocDogYW55KSA9PiBwLmlkID09PSAnZHJvcGJveCcgfHwgcC5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdkcm9wYm94JylcbiAgICAgICAgICApIGFzIGFueTtcbiAgICAgICAgICBjb25zdCBnb29nbGVQcm92aWRlciA9IHByb3ZpZGVycy5maW5kKFxuICAgICAgICAgICAgKHA6IGFueSkgPT4gcC5pZCA9PT0gJ2dvb2dsZScgfHwgcC5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdnb29nbGUnKVxuICAgICAgICAgICkgYXMgYW55O1xuXG4gICAgICAgICAgY29uc3QgZHJvcGJveFN0YXR1cyA9IGRyb3Bib3hQcm92aWRlclxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhY2NvdW50SWQ6IGRyb3Bib3hQcm92aWRlci5pZCxcbiAgICAgICAgICAgICAgICBlbWFpbDogZHJvcGJveFByb3ZpZGVyLmVtYWlsIHx8IG51bGwsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFjY291bnRJZDogbnVsbCBhcyBzdHJpbmcgfCBudWxsLFxuICAgICAgICAgICAgICAgIGVtYWlsOiBudWxsIGFzIHN0cmluZyB8IG51bGwsXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBnb29nbGVEcml2ZVN0YXR1cyA9IGdvb2dsZVByb3ZpZGVyXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGFjY291bnRJZDogZ29vZ2xlUHJvdmlkZXIuaWQsXG4gICAgICAgICAgICAgICAgZW1haWw6IGdvb2dsZVByb3ZpZGVyLmVtYWlsIHx8IG51bGwsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFjY291bnRJZDogbnVsbCBhcyBzdHJpbmcgfCBudWxsLFxuICAgICAgICAgICAgICAgIGVtYWlsOiBudWxsIGFzIHN0cmluZyB8IG51bGwsXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBoYXNQcm92aWRlciA9IHByb3ZpZGVycy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF2YWlsYWJsZTogaGFzUHJvdmlkZXIsXG4gICAgICAgICAgICBmZWF0dXJlRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIGRyb3Bib3g6IGRyb3Bib3hTdGF0dXMsXG4gICAgICAgICAgICBnb29nbGVEcml2ZTogZ29vZ2xlRHJpdmVTdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiBoYXNQcm92aWRlclxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiAnTm8gY2xvdWQgc3RvcmFnZSBwcm92aWRlciBhdXRoZW50aWNhdGVkLiBDb25uZWN0IERyb3Bib3ggb3IgR29vZ2xlIERyaXZlIGluIExvY2FsIHNldHRpbmdzLicsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gY2hlY2sgYmFja3VwIHN0YXR1czpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBmZWF0dXJlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBkcm9wYm94OiBudWxsLFxuICAgICAgICAgICAgZ29vZ2xlRHJpdmU6IG51bGwsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGxpc3RCYWNrdXBzOiBhc3luYyAoX3BhcmVudDogYW55LCBhcmdzOiB7IHNpdGVJZDogc3RyaW5nOyBwcm92aWRlcjogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIHByb3ZpZGVyIH0gPSBhcmdzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIExpc3RpbmcgYmFja3VwcyBmb3Igc2l0ZSAke3NpdGVJZH0gZnJvbSAke3Byb3ZpZGVyfWApO1xuXG4gICAgICAgICAgLy8gR2V0IHNpdGVcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShzaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIHNpdGVOYW1lOiBudWxsLFxuICAgICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgICAgYmFja3VwczogW10sXG4gICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZXQgcHJvdmlkZXJzIGZyb20gQ2xvdWQgQmFja3VwcyBhZGRvblxuICAgICAgICAgIGNvbnN0IHByb3ZpZGVycyA9IGF3YWl0IGdldEJhY2t1cFByb3ZpZGVycygpO1xuICAgICAgICAgIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2l0ZU5hbWU6IHNpdGUubmFtZSxcbiAgICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICAgIGJhY2t1cHM6IFtdLFxuICAgICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ05vIGNsb3VkIHN0b3JhZ2UgcHJvdmlkZXJzIGNvbmZpZ3VyZWQuIENvbm5lY3QgR29vZ2xlIERyaXZlIG9yIERyb3Bib3ggaW4gTG9jYWwgSHViLicsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZpbmQgdGhlIG1hdGNoaW5nIHByb3ZpZGVyIChtYXAgJ2dvb2dsZURyaXZlJyB0byAnZ29vZ2xlJyBmb3IgdGhlIGFkZG9uKVxuICAgICAgICAgIGNvbnN0IHByb3ZpZGVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBnb29nbGVEcml2ZTogJ2dvb2dsZScsIGRyb3Bib3g6ICdkcm9wYm94JyB9O1xuICAgICAgICAgIGNvbnN0IHByb3ZpZGVySWQgPSBwcm92aWRlck1hcFtwcm92aWRlcl0gfHwgcHJvdmlkZXI7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlZFByb3ZpZGVyID0gcHJvdmlkZXJzLmZpbmQoKHA6IGFueSkgPT4gcC5pZCA9PT0gcHJvdmlkZXJJZCk7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoZWRQcm92aWRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIHNpdGVOYW1lOiBzaXRlLm5hbWUsXG4gICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICBiYWNrdXBzOiBbXSxcbiAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgIGVycm9yOiBgUHJvdmlkZXIgJyR7cHJvdmlkZXJ9JyBub3QgY29uZmlndXJlZC4gQXZhaWxhYmxlOiAke3Byb3ZpZGVycy5tYXAoKHA6IGFueSkgPT4gcC5uYW1lKS5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZvciBsaXN0aW5nIHNuYXBzaG90cywgdXNlIHRoZSBIdWIgcHJvdmlkZXIgSUQgZGlyZWN0bHkgKGUuZy4sICdnb29nbGUnKVxuICAgICAgICAgIC8vIE5PVCB0aGUgcmNsb25lIGJhY2tlbmQgbmFtZSAoJ2RyaXZlJykgLSB0aGUgSHViIHF1ZXJpZXMgZXhwZWN0IHRoZSBPQXV0aCBwcm92aWRlciBuYW1lXG4gICAgICAgICAgLy8gQWxzbyBwYXNzIHBhZ2VPZmZzZXQgcGFyYW1ldGVyICgwIGZvciBmaXJzdCBwYWdlKVxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGludm9rZUJhY2t1cElQQyhcbiAgICAgICAgICAgICdiYWNrdXBzOnByb3ZpZGVyLXNuYXBzaG90cycsXG4gICAgICAgICAgICBERUZBVUxUX0lQQ19USU1FT1VULFxuICAgICAgICAgICAgc2l0ZUlkLFxuICAgICAgICAgICAgbWF0Y2hlZFByb3ZpZGVyLmlkLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gUHJvdmlkZXIgc25hcHNob3RzIHJhdyByZXN1bHQ6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogc2l0ZS5uYW1lLFxuICAgICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgICAgYmFja3VwczogW10sXG4gICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBsaXN0IGJhY2t1cHMnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBVbndyYXAgbmVzdGVkIHJlc3VsdCBzdHJ1Y3R1cmUgKHNpbWlsYXIgdG8gcHJvdmlkZXJzKVxuICAgICAgICAgIGxldCBiYWNrdXBzRGF0YSA9IHJlc3VsdC5yZXN1bHQ7XG4gICAgICAgICAgaWYgKGJhY2t1cHNEYXRhICYmIHR5cGVvZiBiYWNrdXBzRGF0YSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYmFja3Vwc0RhdGEpKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgbmVzdGVkIHJlc3VsdCBvciBzbmFwc2hvdHMgYXJyYXlcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJhY2t1cHNEYXRhLnJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgYmFja3Vwc0RhdGEgPSBiYWNrdXBzRGF0YS5yZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYmFja3Vwc0RhdGEuc25hcHNob3RzKSkge1xuICAgICAgICAgICAgICBiYWNrdXBzRGF0YSA9IGJhY2t1cHNEYXRhLnNuYXBzaG90cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYmFja3Vwc0RhdGEucmVzdWx0ICYmIEFycmF5LmlzQXJyYXkoYmFja3Vwc0RhdGEucmVzdWx0LnNuYXBzaG90cykpIHtcbiAgICAgICAgICAgICAgYmFja3Vwc0RhdGEgPSBiYWNrdXBzRGF0YS5yZXN1bHQuc25hcHNob3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGJhY2t1cHMgPSBBcnJheS5pc0FycmF5KGJhY2t1cHNEYXRhKSA/IGJhY2t1cHNEYXRhIDogW107XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEV4dHJhY3RlZCAke2JhY2t1cHMubGVuZ3RofSBiYWNrdXBzYCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIHNpdGVOYW1lOiBzaXRlLm5hbWUsXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIGJhY2t1cHM6IGJhY2t1cHMubWFwKChiOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgIC8vIFVzZSBoYXNoIGZvciBzbmFwc2hvdElkIGFzIHRoYXQncyB3aGF0IHJlc3RpYyB1c2VzIGZvciByZXN0b3JlL2RlbGV0ZSBvcGVyYXRpb25zXG4gICAgICAgICAgICAgIC8vIFRoZSBIdWIgSUQgKGIuaWQpIGlzIGp1c3QgYSBkYXRhYmFzZSBpZGVudGlmaWVyXG4gICAgICAgICAgICAgIHNuYXBzaG90SWQ6IGIuaGFzaCB8fCBiLnNuYXBzaG90SWQgfHwgYi5zaG9ydF9pZCxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBiLnVwZGF0ZWRBdCB8fCBiLmNyZWF0ZWRBdCB8fCBiLnRpbWVzdGFtcCB8fCBiLnRpbWUgfHwgYi5jcmVhdGVkLFxuICAgICAgICAgICAgICBub3RlOlxuICAgICAgICAgICAgICAgIGIuY29uZmlnT2JqZWN0Py5kZXNjcmlwdGlvbiB8fCBiLm5vdGUgfHwgYi5kZXNjcmlwdGlvbiB8fCBiLnRhZ3M/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICBzaXRlRG9tYWluOiBiLmNvbmZpZ09iamVjdD8ubmFtZVxuICAgICAgICAgICAgICAgID8gYCR7Yi5jb25maWdPYmplY3QubmFtZX0ubG9jYWxgXG4gICAgICAgICAgICAgICAgOiBiLnNpdGVEb21haW4gfHwgc2l0ZS5kb21haW4sXG4gICAgICAgICAgICAgIHNlcnZpY2VzOiBKU09OLnN0cmluZ2lmeShiLmNvbmZpZ09iamVjdD8uc2VydmljZXMgfHwgYi5zZXJ2aWNlcyB8fCB7fSksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBjb3VudDogYmFja3Vwcy5sZW5ndGgsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gbGlzdCBiYWNrdXBzOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBzaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgYmFja3VwczogW10sXG4gICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBQaGFzZSAxMWM6IFN5bmMgSGlzdG9yeVxuICAgICAgZ2V0U3luY0hpc3Rvcnk6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgc2l0ZUlkOiBzdHJpbmc7IGxpbWl0PzogbnVtYmVyIH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIGxpbWl0ID0gMzAgfSA9IGFyZ3M7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gR2V0dGluZyBzeW5jIGhpc3RvcnkgZm9yIHNpdGUgJHtzaXRlSWR9YCk7XG5cbiAgICAgICAgICAvLyBHZXQgc2l0ZSB0byB2ZXJpZnkgaXQgZXhpc3RzXG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgZXZlbnRzOiBbXSxcbiAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGlmIGNvbm5lY3RIaXN0b3J5IHNlcnZpY2UgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgaWYgKCFjb25uZWN0SGlzdG9yeVNlcnZpY2UgfHwgdHlwZW9mIGNvbm5lY3RIaXN0b3J5U2VydmljZS5nZXRFdmVudHMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogc2l0ZS5uYW1lLFxuICAgICAgICAgICAgICBldmVudHM6IFtdLFxuICAgICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgICAgZXJyb3I6ICdTeW5jIGhpc3Rvcnkgc2VydmljZSBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZXZlbnRzID0gY29ubmVjdEhpc3RvcnlTZXJ2aWNlLmdldEV2ZW50cyhzaXRlSWQpO1xuICAgICAgICAgIGNvbnN0IGxpbWl0ZWRFdmVudHMgPSBldmVudHMuc2xpY2UoMCwgbGltaXQpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBzaXRlTmFtZTogc2l0ZS5uYW1lLFxuICAgICAgICAgICAgZXZlbnRzOiBsaW1pdGVkRXZlbnRzLm1hcCgoZTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICByZW1vdGVJbnN0YWxsTmFtZTogZS5yZW1vdGVJbnN0YWxsTmFtZSB8fCBudWxsLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IGUudGltZXN0YW1wLFxuICAgICAgICAgICAgICBlbnZpcm9ubWVudDogZS5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgICAgZGlyZWN0aW9uOiBlLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgc3RhdHVzOiBlLnN0YXR1cyB8fCBudWxsLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY291bnQ6IGxpbWl0ZWRFdmVudHMubGVuZ3RoLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGdldCBzeW5jIGhpc3Rvcnk6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIHNpdGVOYW1lOiBudWxsLFxuICAgICAgICAgICAgZXZlbnRzOiBbXSxcbiAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIEdldCBmaWxlIGNoYW5nZXMgYmV0d2VlbiBsb2NhbCBhbmQgV1BFIChkcnktcnVuIGNvbXBhcmlzb24pXG4gICAgICBnZXRTaXRlQ2hhbmdlczogYXN5bmMgKF9wYXJlbnQ6IGFueSwgYXJnczogeyBzaXRlSWQ6IHN0cmluZzsgZGlyZWN0aW9uPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIGRpcmVjdGlvbiA9ICdwdXNoJyB9ID0gYXJncztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIEdldHRpbmcgc2l0ZSBjaGFuZ2VzIGZvciAke3NpdGVJZH0sIGRpcmVjdGlvbj0ke2RpcmVjdGlvbn1gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFZhbGlkYXRlIGRpcmVjdGlvblxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gIT09ICdwdXNoJyAmJiBkaXJlY3Rpb24gIT09ICdwdWxsJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIHNpdGVOYW1lOiBudWxsLFxuICAgICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgbW9kaWZpZWQ6IFtdLFxuICAgICAgICAgICAgICBkZWxldGVkOiBbXSxcbiAgICAgICAgICAgICAgdG90YWxDaGFuZ2VzOiAwLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogJ0ludmFsaWQgZGlyZWN0aW9uLiBNdXN0IGJlIFwicHVzaFwiIG9yIFwicHVsbFwiLicsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdldCBzaXRlXG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgIG1vZGlmaWVkOiBbXSxcbiAgICAgICAgICAgICAgZGVsZXRlZDogW10sXG4gICAgICAgICAgICAgIHRvdGFsQ2hhbmdlczogMCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgV1BFIGNvbm5lY3Rpb25cbiAgICAgICAgICBjb25zdCB3cGVDb25uZWN0aW9uID0gc2l0ZS5ob3N0Q29ubmVjdGlvbnM/LmZpbmQoKGM6IGFueSkgPT4gYy5ob3N0SWQgPT09ICd3cGUnKTtcbiAgICAgICAgICBpZiAoIXdwZUNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogc2l0ZS5uYW1lLFxuICAgICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgbW9kaWZpZWQ6IFtdLFxuICAgICAgICAgICAgICBkZWxldGVkOiBbXSxcbiAgICAgICAgICAgICAgdG90YWxDaGFuZ2VzOiAwLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAnU2l0ZSBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZS4gVXNlIENvbm5lY3QgaW4gTG9jYWwgdG8gbGluayB0aGUgc2l0ZSBmaXJzdC4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBzZXJ2aWNlIGF2YWlsYWJpbGl0eVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF3cGVDb25uZWN0QmFzZVNlcnZpY2UgfHxcbiAgICAgICAgICAgIHR5cGVvZiB3cGVDb25uZWN0QmFzZVNlcnZpY2UubGlzdE1vZGlmaWNhdGlvbnMgIT09ICdmdW5jdGlvbidcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogc2l0ZS5uYW1lLFxuICAgICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgbW9kaWZpZWQ6IFtdLFxuICAgICAgICAgICAgICBkZWxldGVkOiBbXSxcbiAgICAgICAgICAgICAgdG90YWxDaGFuZ2VzOiAwLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogJ1dQRSBDb25uZWN0IHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdldCBpbnN0YWxsIGRldGFpbHMgZnJvbSBDQVBJXG4gICAgICAgICAgbGV0IGluc3RhbGxOYW1lID0gd3BlQ29ubmVjdGlvbi5yZW1vdGVTaXRlSWQ7XG4gICAgICAgICAgbGV0IHByaW1hcnlEb21haW4gPSAnJztcbiAgICAgICAgICBsZXQgaW5zdGFsbElkID0gJyc7XG5cbiAgICAgICAgICBpZiAoY2FwaVNlcnZpY2UgJiYgdHlwZW9mIGNhcGlTZXJ2aWNlLmdldEluc3RhbGxMaXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YWxscyA9IGF3YWl0IGNhcGlTZXJ2aWNlLmdldEluc3RhbGxMaXN0KCk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0luc3RhbGwgPSBpbnN0YWxscz8uZmluZChcbiAgICAgICAgICAgICAgKGk6IGFueSkgPT5cbiAgICAgICAgICAgICAgICBpLnNpdGU/LmlkID09PSB3cGVDb25uZWN0aW9uLnJlbW90ZVNpdGVJZCAmJlxuICAgICAgICAgICAgICAgICghd3BlQ29ubmVjdGlvbi5yZW1vdGVTaXRlRW52IHx8IGkuZW52aXJvbm1lbnQgPT09IHdwZUNvbm5lY3Rpb24ucmVtb3RlU2l0ZUVudilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdJbnN0YWxsKSB7XG4gICAgICAgICAgICAgIGluc3RhbGxOYW1lID0gbWF0Y2hpbmdJbnN0YWxsLm5hbWU7XG4gICAgICAgICAgICAgIHByaW1hcnlEb21haW4gPVxuICAgICAgICAgICAgICAgIG1hdGNoaW5nSW5zdGFsbC5wcmltYXJ5X2RvbWFpbiB8fFxuICAgICAgICAgICAgICAgIG1hdGNoaW5nSW5zdGFsbC5jbmFtZSB8fFxuICAgICAgICAgICAgICAgIGAke21hdGNoaW5nSW5zdGFsbC5uYW1lfS53cGVuZ2luZS5jb21gO1xuICAgICAgICAgICAgICBpbnN0YWxsSWQgPSBtYXRjaGluZ0luc3RhbGwuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFwcmltYXJ5RG9tYWluKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2l0ZU5hbWU6IHNpdGUubmFtZSxcbiAgICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgIG1vZGlmaWVkOiBbXSxcbiAgICAgICAgICAgICAgZGVsZXRlZDogW10sXG4gICAgICAgICAgICAgIHRvdGFsQ2hhbmdlczogMCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBkZXRlcm1pbmUgV1AgRW5naW5lIGluc3RhbGwgZGV0YWlscy4gUGxlYXNlIGVuc3VyZSB5b3UgYXJlIGF1dGhlbnRpY2F0ZWQuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2FsbCBsaXN0TW9kaWZpY2F0aW9ucyAoZHJ5LXJ1biByc3luYyBjb21wYXJpc29uKVxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBDYWxsaW5nIGxpc3RNb2RpZmljYXRpb25zIGZvciAke2luc3RhbGxOYW1lfWApO1xuICAgICAgICAgIGNvbnN0IG1vZGlmaWNhdGlvbnMgPSBhd2FpdCB3cGVDb25uZWN0QmFzZVNlcnZpY2UubGlzdE1vZGlmaWNhdGlvbnMoe1xuICAgICAgICAgICAgY29ubmVjdEFyZ3M6IHtcbiAgICAgICAgICAgICAgd3BlbmdpbmVJbnN0YWxsTmFtZTogaW5zdGFsbE5hbWUsXG4gICAgICAgICAgICAgIHdwZW5naW5lSW5zdGFsbElkOiBpbnN0YWxsSWQsXG4gICAgICAgICAgICAgIHdwZW5naW5lU2l0ZUlkOiB3cGVDb25uZWN0aW9uLnJlbW90ZVNpdGVJZCxcbiAgICAgICAgICAgICAgd3BlbmdpbmVQcmltYXJ5RG9tYWluOiBwcmltYXJ5RG9tYWluLFxuICAgICAgICAgICAgICBsb2NhbFNpdGVJZDogc2l0ZS5pZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvbiBhcyAncHVzaCcgfCAncHVsbCcsXG4gICAgICAgICAgICBpbmNsdWRlSWdub3JlZDogZmFsc2UsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDYXRlZ29yaXplIGNoYW5nZXNcbiAgICAgICAgICBjb25zdCBhZGRlZCA9IG1vZGlmaWNhdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgIChmOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgZi5pbnN0cnVjdGlvbiA9PT0gJ2NyZWF0ZScgfHxcbiAgICAgICAgICAgICAgICBmLmluc3RydWN0aW9uID09PSAndXBsb2FkJyB8fFxuICAgICAgICAgICAgICAgIGYuaW5zdHJ1Y3Rpb24gPT09ICdkb3dubG9hZCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5tYXAoKGY6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgcGF0aDogZi5wYXRoLFxuICAgICAgICAgICAgICBpbnN0cnVjdGlvbjogZi5pbnN0cnVjdGlvbixcbiAgICAgICAgICAgICAgc2l6ZTogZi5zaXplLFxuICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBjb25zdCBtb2RpZmllZCA9IG1vZGlmaWNhdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGY6IGFueSkgPT4gZi5pbnN0cnVjdGlvbiA9PT0gJ21vZGlmeScpXG4gICAgICAgICAgICAubWFwKChmOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgIHBhdGg6IGYucGF0aCxcbiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb246IGYuaW5zdHJ1Y3Rpb24sXG4gICAgICAgICAgICAgIHNpemU6IGYuc2l6ZSxcbiAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgY29uc3QgZGVsZXRlZCA9IG1vZGlmaWNhdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGY6IGFueSkgPT4gZi5pbnN0cnVjdGlvbiA9PT0gJ2RlbGV0ZScpXG4gICAgICAgICAgICAubWFwKChmOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgIHBhdGg6IGYucGF0aCxcbiAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb246IGYuaW5zdHJ1Y3Rpb24sXG4gICAgICAgICAgICAgIHNpemU6IGYuc2l6ZSxcbiAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgY29uc3QgdG90YWxDaGFuZ2VzID0gYWRkZWQubGVuZ3RoICsgbW9kaWZpZWQubGVuZ3RoICsgZGVsZXRlZC5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgZGlyZWN0aW9uTGFiZWwgPSBkaXJlY3Rpb24gPT09ICdwdXNoJyA/ICdsb2NhbCDihpIgV1BFJyA6ICdXUEUg4oaSIGxvY2FsJztcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgc2l0ZU5hbWU6IHNpdGUubmFtZSxcbiAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkLFxuICAgICAgICAgICAgbW9kaWZpZWQsXG4gICAgICAgICAgICBkZWxldGVkLFxuICAgICAgICAgICAgdG90YWxDaGFuZ2VzLFxuICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgdG90YWxDaGFuZ2VzID4gMFxuICAgICAgICAgICAgICAgID8gYCR7dG90YWxDaGFuZ2VzfSBmaWxlKHMpIGNoYW5nZWQgKCR7ZGlyZWN0aW9uTGFiZWx9KTogJHthZGRlZC5sZW5ndGh9IGFkZGVkLCAke21vZGlmaWVkLmxlbmd0aH0gbW9kaWZpZWQsICR7ZGVsZXRlZC5sZW5ndGh9IGRlbGV0ZWRgXG4gICAgICAgICAgICAgICAgOiBgTm8gY2hhbmdlcyBkZXRlY3RlZCAoJHtkaXJlY3Rpb25MYWJlbH0pYCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBnZXQgc2l0ZSBjaGFuZ2VzOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBzaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgIG1vZGlmaWVkOiBbXSxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IFtdLFxuICAgICAgICAgICAgdG90YWxDaGFuZ2VzOiAwLFxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gICAgTXV0YXRpb246IHtcbiAgICAgIHdwQ2xpOiBleGVjdXRlV3BDbGksXG5cbiAgICAgIGNyZWF0ZVNpdGU6IGFzeW5jIChcbiAgICAgICAgX3BhcmVudDogYW55LFxuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIHBocFZlcnNpb24/OiBzdHJpbmc7XG4gICAgICAgICAgICB3ZWJTZXJ2ZXI/OiBzdHJpbmc7XG4gICAgICAgICAgICBkYXRhYmFzZT86IHN0cmluZztcbiAgICAgICAgICAgIHdwQWRtaW5Vc2VybmFtZT86IHN0cmluZztcbiAgICAgICAgICAgIHdwQWRtaW5QYXNzd29yZD86IHN0cmluZztcbiAgICAgICAgICAgIHdwQWRtaW5FbWFpbD86IHN0cmluZztcbiAgICAgICAgICAgIGJsdWVwcmludD86IHN0cmluZztcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICApID0+IHtcbiAgICAgICAgLy8gREVCVUc6IExvZyByYXcgYXJncyByZWNlaXZlZFxuICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gY3JlYXRlU2l0ZSBjYWxsZWQgd2l0aCBhcmdzOiAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfWApO1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHBocFZlcnNpb24sXG4gICAgICAgICAgd2ViU2VydmVyID0gJ25naW54JyxcbiAgICAgICAgICBkYXRhYmFzZSA9ICdteXNxbCcsXG4gICAgICAgICAgd3BBZG1pblVzZXJuYW1lID0gJ2FkbWluJyxcbiAgICAgICAgICB3cEFkbWluUGFzc3dvcmQgPSAncGFzc3dvcmQnLFxuICAgICAgICAgIHdwQWRtaW5FbWFpbCA9ICdhZG1pbkBsb2NhbC50ZXN0JyxcbiAgICAgICAgICBibHVlcHJpbnQsXG4gICAgICAgIH0gPSBhcmdzLmlucHV0O1xuXG4gICAgICAgIC8vIERFQlVHOiBMb2cgZGVzdHJ1Y3R1cmVkIHZhbHVlc1xuICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gRGVzdHJ1Y3R1cmVkIC0gbmFtZTogJHtuYW1lfSwgYmx1ZXByaW50OiAke2JsdWVwcmludH0sIHR5cGVvZiBibHVlcHJpbnQ6ICR7dHlwZW9mIGJsdWVwcmludH1gXG4gICAgICAgICk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBDcmVhdGluZyBzaXRlOiAke25hbWV9JHtibHVlcHJpbnQgPyBgIGZyb20gYmx1ZXByaW50OiAke2JsdWVwcmludH1gIDogJyd9YFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBHZW5lcmF0ZSBzbHVnIGFuZCBkb21haW4gZnJvbSBuYW1lXG4gICAgICAgICAgY29uc3Qgc2l0ZVNsdWcgPSBuYW1lXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgJy0nKVxuICAgICAgICAgICAgLnJlcGxhY2UoL14tfC0kL2csICcnKTtcbiAgICAgICAgICBjb25zdCBzaXRlRG9tYWluID0gYCR7c2l0ZVNsdWd9LmxvY2FsYDtcblxuICAgICAgICAgIGNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbiAgICAgICAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICAgICAgICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICAgICAgICBjb25zdCBzaXRlUGF0aCA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICdMb2NhbCBTaXRlcycsIHNpdGVTbHVnKTtcblxuICAgICAgICAgIC8vIElmIGJsdWVwcmludCBpcyBwcm92aWRlZCwgdXNlIGltcG9ydFNpdGVTZXJ2aWNlIGluc3RlYWQgb2YgYWRkU2l0ZVNlcnZpY2VcbiAgICAgICAgICBpZiAoYmx1ZXByaW50KSB7XG4gICAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gQmx1ZXByaW50IHBhcmFtZXRlciByZWNlaXZlZDogJHtibHVlcHJpbnR9YCk7XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgdXNlckRhdGFQYXRoIGZyb20gZWxlY3Ryb24gYXBwXG4gICAgICAgICAgICBjb25zdCB7IGFwcCB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJEYXRhUGF0aCA9IGFwcC5nZXRQYXRoKCd1c2VyRGF0YScpO1xuICAgICAgICAgICAgY29uc3QgYmx1ZXByaW50WmlwUGF0aCA9IHBhdGguam9pbih1c2VyRGF0YVBhdGgsICdibHVlcHJpbnRzJywgYCR7Ymx1ZXByaW50fS56aXBgKTtcblxuICAgICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIExvb2tpbmcgZm9yIGJsdWVwcmludCBhdDogJHtibHVlcHJpbnRaaXBQYXRofWApO1xuXG4gICAgICAgICAgICAvLyBWZXJpZnkgYmx1ZXByaW50IGV4aXN0c1xuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGJsdWVwcmludFppcFBhdGgpKSB7XG4gICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gQmx1ZXByaW50IG5vdCBmb3VuZCBhdDogJHtibHVlcHJpbnRaaXBQYXRofWApO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVycm9yOiBgQmx1ZXByaW50IG5vdCBmb3VuZDogJHtibHVlcHJpbnR9LiBVc2UgbGlzdF9ibHVlcHJpbnRzIHRvIHNlZSBhdmFpbGFibGUgYmx1ZXByaW50cy5gLFxuICAgICAgICAgICAgICAgIHNpdGVJZDogbnVsbCxcbiAgICAgICAgICAgICAgICBzaXRlTmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICBzaXRlRG9tYWluOiBudWxsLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gRm91bmQgYmx1ZXByaW50IGF0OiAke2JsdWVwcmludFppcFBhdGh9YCk7XG5cbiAgICAgICAgICAgIC8vIFJlYWQgdGhlIGxvY2FsLXNpdGUuanNvbiBmcm9tIHRoZSBibHVlcHJpbnQgemlwIHRvIGdldCBtYW5pZmVzdFxuICAgICAgICAgICAgbGV0IGxvY2FsU2l0ZUpTT046IGFueTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IFN0cmVhbVppcCA9IHJlcXVpcmUoJ25vZGUtc3RyZWFtLXppcCcpO1xuICAgICAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gbm9kZS1zdHJlYW0temlwIGxvYWRlZCBzdWNjZXNzZnVsbHlgKTtcblxuICAgICAgICAgICAgICBjb25zdCB6aXAgPSBuZXcgU3RyZWFtWmlwLmFzeW5jKHsgZmlsZTogYmx1ZXByaW50WmlwUGF0aCB9KTtcbiAgICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHppcC5lbnRyaWVzKCk7XG4gICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBaaXAgZW50cmllcyBsb2FkZWQsIGNvdW50OiAke09iamVjdC5rZXlzKGVudHJpZXMpLmxlbmd0aH1gXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBlbnRyaWVzWydsb2NhbC1zaXRlLmpzb24nXVxuICAgICAgICAgICAgICAgID8gJ2xvY2FsLXNpdGUuanNvbidcbiAgICAgICAgICAgICAgICA6ICdwcmVzc21hdGljLXNpdGUuanNvbic7XG4gICAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBSZWFkaW5nIG1hbmlmZXN0IGZpbGU6ICR7ZmlsZW5hbWV9YCk7XG5cbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHppcC5lbnRyeURhdGEoZmlsZW5hbWUpO1xuICAgICAgICAgICAgICBsb2NhbFNpdGVKU09OID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCd1dGY4JykpO1xuICAgICAgICAgICAgICBhd2FpdCB6aXAuY2xvc2UoKTtcbiAgICAgICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIFN1Y2Nlc3NmdWxseSByZWFkIG1hbmlmZXN0OmAsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobG9jYWxTaXRlSlNPTikuc3Vic3RyaW5nKDAsIDIwMClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHppcEVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gcmVhZCBibHVlcHJpbnQgemlwOiAke3ppcEVycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICB6aXBFcnJvclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVycm9yOiBgRmFpbGVkIHRvIHJlYWQgYmx1ZXByaW50IG1hbmlmZXN0OiAke3ppcEVycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICBzaXRlSWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgc2l0ZU5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgc2l0ZURvbWFpbjogbnVsbCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQnVpbGQgaW1wb3J0IHNldHRpbmdzXG4gICAgICAgICAgICBjb25zdCBpbXBvcnRTZXR0aW5nczogYW55ID0ge1xuICAgICAgICAgICAgICBzaXRlTmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgc2l0ZURvbWFpbjogc2l0ZURvbWFpbixcbiAgICAgICAgICAgICAgc2l0ZVBhdGg6IHNpdGVQYXRoLFxuICAgICAgICAgICAgICB6aXA6IGJsdWVwcmludFppcFBhdGgsXG4gICAgICAgICAgICAgIGltcG9ydERhdGE6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbG9jYWwtYmx1ZXByaW50JyxcbiAgICAgICAgICAgICAgICBvbGRTaXRlOiBsb2NhbFNpdGVKU09OLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlbnZpcm9ubWVudDogbG9jYWxTaXRlSlNPTi5lbnZpcm9ubWVudCB8fCAnZmx5d2hlZWwnLFxuICAgICAgICAgICAgICBibHVlcHJpbnQ6IGJsdWVwcmludCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIENvcHkgc2VydmljZSB2ZXJzaW9ucyBmcm9tIGJsdWVwcmludCBpZiBhdmFpbGFibGVcbiAgICAgICAgICAgIGlmIChsb2NhbFNpdGVKU09OLnNlcnZpY2VzKSB7XG4gICAgICAgICAgICAgIC8vIEV4dHJhY3QgUEhQIHZlcnNpb25cbiAgICAgICAgICAgICAgY29uc3QgcGhwU2VydmljZSA9IE9iamVjdC52YWx1ZXMobG9jYWxTaXRlSlNPTi5zZXJ2aWNlcykuZmluZChcbiAgICAgICAgICAgICAgICAoczogYW55KSA9PiBzLnJvbGUgPT09ICdwaHAnXG4gICAgICAgICAgICAgICkgYXMgYW55O1xuICAgICAgICAgICAgICBpZiAocGhwU2VydmljZSkge1xuICAgICAgICAgICAgICAgIGltcG9ydFNldHRpbmdzLnBocFZlcnNpb24gPSBwaHBTZXJ2aWNlLnZlcnNpb247XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBFeHRyYWN0IGRhdGFiYXNlXG4gICAgICAgICAgICAgIGNvbnN0IGRiU2VydmljZSA9IE9iamVjdC52YWx1ZXMobG9jYWxTaXRlSlNPTi5zZXJ2aWNlcykuZmluZChcbiAgICAgICAgICAgICAgICAoczogYW55KSA9PiBzLnJvbGUgPT09ICdkYXRhYmFzZScgfHwgcy5yb2xlID09PSAnZGInXG4gICAgICAgICAgICAgICkgYXMgYW55O1xuICAgICAgICAgICAgICBpZiAoZGJTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgaW1wb3J0U2V0dGluZ3MuZGF0YWJhc2UgPSBgJHtkYlNlcnZpY2UubmFtZX0tJHtkYlNlcnZpY2UudmVyc2lvbn1gO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gRXh0cmFjdCB3ZWIgc2VydmVyXG4gICAgICAgICAgICAgIGNvbnN0IHdlYlNlcnZpY2UgPSBPYmplY3QudmFsdWVzKGxvY2FsU2l0ZUpTT04uc2VydmljZXMpLmZpbmQoXG4gICAgICAgICAgICAgICAgKHM6IGFueSkgPT4gcy5yb2xlID09PSAnaHR0cCcgfHwgcy5yb2xlID09PSAnd2ViJ1xuICAgICAgICAgICAgICApIGFzIGFueTtcbiAgICAgICAgICAgICAgaWYgKHdlYlNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICBpbXBvcnRTZXR0aW5ncy53ZWJTZXJ2ZXIgPSBgJHt3ZWJTZXJ2aWNlLm5hbWV9LSR7d2ViU2VydmljZS52ZXJzaW9ufWA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxTaXRlSlNPTi5waHBWZXJzaW9uKSB7XG4gICAgICAgICAgICAgIGltcG9ydFNldHRpbmdzLnBocFZlcnNpb24gPSBsb2NhbFNpdGVKU09OLnBocFZlcnNpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gSW1wb3J0IHNldHRpbmdzIHByZXBhcmVkOmAsXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGltcG9ydFNldHRpbmdzKS5zdWJzdHJpbmcoMCwgNTAwKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFpbXBvcnRTaXRlU2VydmljZSkge1xuICAgICAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIGltcG9ydFNpdGVTZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUhYCk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgZXJyb3I6ICdJbXBvcnQgc2VydmljZSBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgICBzaXRlSWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgc2l0ZU5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgc2l0ZURvbWFpbjogbnVsbCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIENhbGxpbmcgaW1wb3J0U2l0ZVNlcnZpY2UucnVuKCkuLi5gKTtcblxuICAgICAgICAgICAgLy8gVXNlIHRoZSBpbXBvcnRTaXRlU2VydmljZSB0byBjcmVhdGUgZnJvbSBibHVlcHJpbnRcbiAgICAgICAgICAgIGNvbnN0IGltcG9ydFJlc3VsdCA9IGF3YWl0IGltcG9ydFNpdGVTZXJ2aWNlLnJ1bihpbXBvcnRTZXR0aW5ncyk7XG5cbiAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gSW1wb3J0IHJlc3VsdDpgLFxuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShpbXBvcnRSZXN1bHQgfHwgJ251bGwnKS5zdWJzdHJpbmcoMCwgNTAwKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGltcG9ydFJlc3VsdCAmJiBpbXBvcnRSZXN1bHQuaWQpIHtcbiAgICAgICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIFN1Y2Nlc3NmdWxseSBjcmVhdGVkIHNpdGUgZnJvbSBibHVlcHJpbnQ6ICR7bmFtZX0gKCR7aW1wb3J0UmVzdWx0LmlkfSlgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBzaXRlSWQ6IGltcG9ydFJlc3VsdC5pZCxcbiAgICAgICAgICAgICAgICBzaXRlTmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICBzaXRlRG9tYWluOiBzaXRlRG9tYWluLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9jYWxMb2dnZXIud2FybihgWyR7QURET05fTkFNRX1dIEltcG9ydCByZXR1cm5lZCBidXQgbm8gc2l0ZSBJRCBmb3VuZGApO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgc2l0ZUlkOiBudWxsLFxuICAgICAgICAgICAgICAgIHNpdGVOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIHNpdGVEb21haW46IHNpdGVEb21haW4sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTm8gYmx1ZXByaW50IC0gY3JlYXRlIGEgZnJlc2ggc2l0ZVxuICAgICAgICAgIGNvbnN0IG5ld1NpdGVJbmZvOiBhbnkgPSB7XG4gICAgICAgICAgICBzaXRlTmFtZTogbmFtZSxcbiAgICAgICAgICAgIHNpdGVEb21haW46IHNpdGVEb21haW4sXG4gICAgICAgICAgICBzaXRlUGF0aDogc2l0ZVBhdGgsXG4gICAgICAgICAgICB3ZWJTZXJ2ZXI6IHdlYlNlcnZlcixcbiAgICAgICAgICAgIGRhdGFiYXNlOiBkYXRhYmFzZSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHBocFZlcnNpb24pIHtcbiAgICAgICAgICAgIG5ld1NpdGVJbmZvLnBocFZlcnNpb24gPSBwaHBWZXJzaW9uO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHdwQ3JlZGVudGlhbHMgPSB7XG4gICAgICAgICAgICBhZG1pblVzZXJuYW1lOiB3cEFkbWluVXNlcm5hbWUsXG4gICAgICAgICAgICBhZG1pblBhc3N3b3JkOiB3cEFkbWluUGFzc3dvcmQsXG4gICAgICAgICAgICBhZG1pbkVtYWlsOiB3cEFkbWluRW1haWwsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IHNpdGUgPSBhd2FpdCBhZGRTaXRlU2VydmljZS5hZGRTaXRlKHtcbiAgICAgICAgICAgIG5ld1NpdGVJbmZvLFxuICAgICAgICAgICAgd3BDcmVkZW50aWFscyxcbiAgICAgICAgICAgIGdvVG9TaXRlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgY3JlYXRlZCBzaXRlOiAke25hbWV9ICgke3NpdGUuaWR9KWApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIHNpdGVJZDogc2l0ZS5pZCxcbiAgICAgICAgICAgIHNpdGVOYW1lOiBuYW1lLFxuICAgICAgICAgICAgc2l0ZURvbWFpbjogc2l0ZURvbWFpbixcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gY3JlYXRlIHNpdGU6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgIHNpdGVJZDogbnVsbCxcbiAgICAgICAgICAgIHNpdGVOYW1lOiBuYW1lLFxuICAgICAgICAgICAgc2l0ZURvbWFpbjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBkZWxldGVTaXRlOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczogeyBpbnB1dDogeyBpZDogc3RyaW5nOyB0cmFzaEZpbGVzPzogYm9vbGVhbjsgdXBkYXRlSG9zdHM/OiBib29sZWFuIH0gfVxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaWQsIHRyYXNoRmlsZXMgPSB0cnVlLCB1cGRhdGVIb3N0cyA9IHRydWUgfSA9IGFyZ3MuaW5wdXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gRGVsZXRpbmcgc2l0ZTogJHtpZH1gKTtcblxuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKGlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke2lkfWAsXG4gICAgICAgICAgICAgIHNpdGVJZDogaWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IGRlbGV0ZVNpdGVTZXJ2aWNlLmRlbGV0ZVNpdGUoe1xuICAgICAgICAgICAgc2l0ZSxcbiAgICAgICAgICAgIHRyYXNoRmlsZXMsXG4gICAgICAgICAgICB1cGRhdGVIb3N0cyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgZGVsZXRlZCBzaXRlOiAke3NpdGUubmFtZX1gKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBzaXRlSWQ6IGlkLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBkZWxldGUgc2l0ZTpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgc2l0ZUlkOiBpZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBkZWxldGVTaXRlczogYXN5bmMgKF9wYXJlbnQ6IGFueSwgYXJnczogeyBpZHM6IHN0cmluZ1tdOyB0cmFzaEZpbGVzPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaWRzLCB0cmFzaEZpbGVzID0gdHJ1ZSB9ID0gYXJncztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBEZWxldGluZyAke2lkcy5sZW5ndGh9IHNpdGVzYCk7XG5cbiAgICAgICAgICBhd2FpdCBkZWxldGVTaXRlU2VydmljZS5kZWxldGVTaXRlcyh7XG4gICAgICAgICAgICBzaXRlSWRzOiBpZHMsXG4gICAgICAgICAgICB0cmFzaEZpbGVzLFxuICAgICAgICAgICAgdXBkYXRlSG9zdHM6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgJHtpZHMubGVuZ3RofSBzaXRlc2ApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIHNpdGVJZDogaWRzLmpvaW4oJywnKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gZGVsZXRlIHNpdGVzOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBzaXRlSWQ6IGlkcy5qb2luKCcsJyksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgb3BlblNpdGU6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgaW5wdXQ6IHsgc2l0ZUlkOiBzdHJpbmc7IHBhdGg/OiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBwYXRoID0gJy8nIH0gPSBhcmdzLmlucHV0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGlmIHNpdGUgaXMgcnVubmluZ1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHNpdGVQcm9jZXNzTWFuYWdlci5nZXRTaXRlU3RhdHVzKHNpdGUpO1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdydW5uaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBcIiR7c2l0ZS5uYW1lfVwiIG11c3QgYmUgcnVubmluZyB0byBvcGVuIGluIGJyb3dzZXIuIFN0YXJ0IGl0IGZpcnN0LmAsXG4gICAgICAgICAgICAgIHVybDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcHJvdG9jb2wgPSBzaXRlLmlzU3RhcnJlZCA/ICdodHRwcycgOiAnaHR0cCc7XG4gICAgICAgICAgY29uc3QgdXJsID0gYCR7cHJvdG9jb2x9Oi8vJHtzaXRlLmRvbWFpbn0ke3BhdGh9YDtcblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBPcGVuaW5nIHNpdGUgaW4gYnJvd3NlcjogJHt1cmx9YCk7XG5cbiAgICAgICAgICBpZiAoYnJvd3Nlck1hbmFnZXIpIHtcbiAgICAgICAgICAgIGF3YWl0IGJyb3dzZXJNYW5hZ2VyLm9wZW5JbkJyb3dzZXIodXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2hlbGwub3BlbkV4dGVybmFsXG4gICAgICAgICAgICBjb25zdCB7IHNoZWxsIH0gPSByZXF1aXJlKCdlbGVjdHJvbicpO1xuICAgICAgICAgICAgYXdhaXQgc2hlbGwub3BlbkV4dGVybmFsKHVybCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gb3BlbiBzaXRlOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgY2xvbmVTaXRlOiBhc3luYyAoX3BhcmVudDogYW55LCBhcmdzOiB7IGlucHV0OiB7IHNpdGVJZDogc3RyaW5nOyBuZXdOYW1lOiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBuZXdOYW1lIH0gPSBhcmdzLmlucHV0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgICBuZXdTaXRlSWQ6IG51bGwsXG4gICAgICAgICAgICAgIG5ld1NpdGVOYW1lOiBudWxsLFxuICAgICAgICAgICAgICBuZXdTaXRlRG9tYWluOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBzaXRlIGlzIHJ1bm5pbmcgLSBuZWVkZWQgZm9yIGRhdGFiYXNlIGNsb25pbmdcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBzaXRlUHJvY2Vzc01hbmFnZXIuZ2V0U2l0ZVN0YXR1cyhzaXRlKTtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAncnVubmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgXCIke3NpdGUubmFtZX1cIiBtdXN0IGJlIHJ1bm5pbmcgdG8gY2xvbmUuIFN0YXJ0IGl0IGZpcnN0LmAsXG4gICAgICAgICAgICAgIG5ld1NpdGVJZDogbnVsbCxcbiAgICAgICAgICAgICAgbmV3U2l0ZU5hbWU6IG51bGwsXG4gICAgICAgICAgICAgIG5ld1NpdGVEb21haW46IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBDbG9uaW5nIHNpdGUgJHtzaXRlLm5hbWV9IHRvICR7bmV3TmFtZX1gKTtcblxuICAgICAgICAgIGNvbnN0IG5ld1NpdGUgPSBhd2FpdCBjbG9uZVNpdGVTZXJ2aWNlLmNsb25lU2l0ZSh7XG4gICAgICAgICAgICBzaXRlLFxuICAgICAgICAgICAgbmV3U2l0ZU5hbWU6IG5ld05hbWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgY2xvbmVkIHNpdGU6ICR7bmV3U2l0ZS5uYW1lfSAoJHtuZXdTaXRlLmlkfSlgXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBuZXdTaXRlSWQ6IG5ld1NpdGUuaWQsXG4gICAgICAgICAgICBuZXdTaXRlTmFtZTogbmV3U2l0ZS5uYW1lLFxuICAgICAgICAgICAgbmV3U2l0ZURvbWFpbjogbmV3U2l0ZS5kb21haW4sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGNsb25lIHNpdGU6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgIG5ld1NpdGVJZDogbnVsbCxcbiAgICAgICAgICAgIG5ld1NpdGVOYW1lOiBudWxsLFxuICAgICAgICAgICAgbmV3U2l0ZURvbWFpbjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBleHBvcnRTaXRlOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczogeyBpbnB1dDogeyBzaXRlSWQ6IHN0cmluZzsgb3V0cHV0UGF0aD86IHN0cmluZyB9IH1cbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCwgb3V0cHV0UGF0aCB9ID0gYXJncy5pbnB1dDtcbiAgICAgICAgY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuICAgICAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgICBleHBvcnRQYXRoOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBzaXRlIGlzIHJ1bm5pbmcgLSBuZWVkZWQgZm9yIGRhdGFiYXNlIGV4cG9ydFxuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHNpdGVQcm9jZXNzTWFuYWdlci5nZXRTaXRlU3RhdHVzKHNpdGUpO1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdydW5uaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBcIiR7c2l0ZS5uYW1lfVwiIG11c3QgYmUgcnVubmluZyB0byBleHBvcnQuIFN0YXJ0IGl0IGZpcnN0LmAsXG4gICAgICAgICAgICAgIGV4cG9ydFBhdGg6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERlZmF1bHQgdG8gRG93bmxvYWRzIGZvbGRlclxuICAgICAgICAgIGNvbnN0IG91dHB1dERpciA9IG91dHB1dFBhdGggfHwgcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJ0Rvd25sb2FkcycpO1xuICAgICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csICctJykuc2xpY2UoMCwgMTkpO1xuICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7c2l0ZS5uYW1lfS0ke3RpbWVzdGFtcH0uemlwYDtcbiAgICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihvdXRwdXREaXIsIGZpbGVOYW1lKTtcblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBFeHBvcnRpbmcgc2l0ZSAke3NpdGUubmFtZX0gdG8gJHtmdWxsUGF0aH1gKTtcblxuICAgICAgICAgIC8vIFVzZSBkZWZhdWx0IGV4cG9ydCBmaWx0ZXIgKGV4Y2x1ZGVzIGFyY2hpdmUgZmlsZXMpXG4gICAgICAgICAgY29uc3QgZGVmYXVsdEV4cG9ydEZpbHRlciA9ICcqLnppcCwgKi50YXIuZ3osICouYnoyLCAqLnRneic7XG5cbiAgICAgICAgICBhd2FpdCBleHBvcnRTaXRlU2VydmljZS5leHBvcnRTaXRlKHtcbiAgICAgICAgICAgIHNpdGUsXG4gICAgICAgICAgICBvdXRwdXRQYXRoOiBmdWxsUGF0aCxcbiAgICAgICAgICAgIGZpbHRlcjogZGVmYXVsdEV4cG9ydEZpbHRlcixcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgZXhwb3J0ZWQgc2l0ZSB0bzogJHtmdWxsUGF0aH1gKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBleHBvcnRQYXRoOiBmdWxsUGF0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gZXhwb3J0IHNpdGU6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgIGV4cG9ydFBhdGg6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgc2F2ZUJsdWVwcmludDogYXN5bmMgKF9wYXJlbnQ6IGFueSwgYXJnczogeyBpbnB1dDogeyBzaXRlSWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0gfSkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCwgbmFtZSB9ID0gYXJncy5pbnB1dDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgICAgYmx1ZXByaW50TmFtZTogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgc2l0ZSBpcyBydW5uaW5nIC0gbmVlZGVkIGZvciBkYXRhYmFzZSBleHBvcnRcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBzaXRlUHJvY2Vzc01hbmFnZXIuZ2V0U2l0ZVN0YXR1cyhzaXRlKTtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAncnVubmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgXCIke3NpdGUubmFtZX1cIiBtdXN0IGJlIHJ1bm5pbmcgdG8gc2F2ZSBhcyBibHVlcHJpbnQuIFN0YXJ0IGl0IGZpcnN0LmAsXG4gICAgICAgICAgICAgIGJsdWVwcmludE5hbWU6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBTYXZpbmcgc2l0ZSAke3NpdGUubmFtZX0gYXMgYmx1ZXByaW50OiAke25hbWV9YCk7XG5cbiAgICAgICAgICAvLyBVc2UgZGVmYXVsdCBleHBvcnQgZmlsdGVyIChleGNsdWRlcyBhcmNoaXZlIGZpbGVzKVxuICAgICAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSAnKi56aXAsICoudGFyLmd6LCAqLmJ6MiwgKi50Z3onO1xuXG4gICAgICAgICAgYXdhaXQgYmx1ZXByaW50c1NlcnZpY2Uuc2F2ZUJsdWVwcmludCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgc2l0ZUlkLFxuICAgICAgICAgICAgZmlsdGVyOiBkZWZhdWx0RmlsdGVyLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFN1Y2Nlc3NmdWxseSBzYXZlZCBibHVlcHJpbnQ6ICR7bmFtZX1gKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBibHVlcHJpbnROYW1lOiBuYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBzYXZlIGJsdWVwcmludDpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgYmx1ZXByaW50TmFtZTogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBQaGFzZSA4OiBXb3JkUHJlc3MgRGV2ZWxvcG1lbnQgVG9vbHNcbiAgICAgIGV4cG9ydERhdGFiYXNlOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczogeyBpbnB1dDogeyBzaXRlSWQ6IHN0cmluZzsgb3V0cHV0UGF0aD86IHN0cmluZyB9IH1cbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCwgb3V0cHV0UGF0aCB9ID0gYXJncy5pbnB1dDtcbiAgICAgICAgY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuICAgICAgICBjb25zdCBwYXRoTW9kdWxlID0gcmVxdWlyZSgncGF0aCcpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgICBvdXRwdXRQYXRoOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBzaXRlIGlzIHJ1bm5pbmcgLSBkYXRhYmFzZSBtdXN0IGJlIGFjY2Vzc2libGVcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBzaXRlUHJvY2Vzc01hbmFnZXIuZ2V0U2l0ZVN0YXR1cyhzaXRlKTtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAncnVubmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgXCIke3NpdGUubmFtZX1cIiBtdXN0IGJlIHJ1bm5pbmcgdG8gZXhwb3J0IGRhdGFiYXNlLiBTdGFydCBpdCBmaXJzdC5gLFxuICAgICAgICAgICAgICBvdXRwdXRQYXRoOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEZWZhdWx0IHRvIERvd25sb2FkcyBmb2xkZXIgd2l0aCBzaXRlIG5hbWVcbiAgICAgICAgICBjb25zdCBkZWZhdWx0UGF0aCA9IHBhdGhNb2R1bGUuam9pbihcbiAgICAgICAgICAgIG9zLmhvbWVkaXIoKSxcbiAgICAgICAgICAgICdEb3dubG9hZHMnLFxuICAgICAgICAgICAgYCR7c2l0ZS5uYW1lLnJlcGxhY2UoL1teYS16MC05XS9naSwgJy0nKX0uc3FsYFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZmluYWxQYXRoID0gb3V0cHV0UGF0aCB8fCBkZWZhdWx0UGF0aDtcblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBFeHBvcnRpbmcgZGF0YWJhc2UgZm9yICR7c2l0ZS5uYW1lfSB0byAke2ZpbmFsUGF0aH1gKTtcblxuICAgICAgICAgIC8vIFVzZSBzaXRlRGF0YWJhc2UuZHVtcCgpIHdoaWNoIHByb3Blcmx5IHNldHMgdXAgTXlTUUwgZW52aXJvbm1lbnRcbiAgICAgICAgICBpZiAoIXNpdGVEYXRhYmFzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiAnRGF0YWJhc2Ugc2VydmljZSBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgb3V0cHV0UGF0aDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgc2l0ZURhdGFiYXNlLmR1bXAoc2l0ZSwgZmluYWxQYXRoKTtcblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgZXhwb3J0ZWQgZGF0YWJhc2UgdG86ICR7ZmluYWxQYXRofWApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIG91dHB1dFBhdGg6IGZpbmFsUGF0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gZXhwb3J0IGRhdGFiYXNlOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBvdXRwdXRQYXRoOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGltcG9ydERhdGFiYXNlOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczogeyBpbnB1dDogeyBzaXRlSWQ6IHN0cmluZzsgc3FsUGF0aDogc3RyaW5nIH0gfVxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBzcWxQYXRoIH0gPSBhcmdzLmlucHV0O1xuICAgICAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShzaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhzcWxQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU1FMIGZpbGUgbm90IGZvdW5kOiAke3NxbFBhdGh9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgc2l0ZSBpcyBydW5uaW5nIC0gZGF0YWJhc2UgbXVzdCBiZSBhY2Nlc3NpYmxlXG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc2l0ZVByb2Nlc3NNYW5hZ2VyLmdldFNpdGVTdGF0dXMoc2l0ZSk7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIFwiJHtzaXRlLm5hbWV9XCIgbXVzdCBiZSBydW5uaW5nIHRvIGltcG9ydCBkYXRhYmFzZS4gU3RhcnQgaXQgZmlyc3QuYCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEltcG9ydGluZyBkYXRhYmFzZSBmb3IgJHtzaXRlLm5hbWV9IGZyb20gJHtzcWxQYXRofWApO1xuXG4gICAgICAgICAgLy8gVXNlIGltcG9ydFNRTEZpbGUgc2VydmljZSB3aGljaCBwcm9wZXJseSBzZXRzIHVwIE15U1FMIGVudmlyb25tZW50XG4gICAgICAgICAgaWYgKCFpbXBvcnRTUUxGaWxlU2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiAnSW1wb3J0IFNRTCBmaWxlIHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IGltcG9ydFNRTEZpbGVTZXJ2aWNlKHNpdGUsIHNxbFBhdGgpO1xuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBkYXRhYmFzZSBmcm9tOiAke3NxbFBhdGh9YCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBpbXBvcnQgZGF0YWJhc2U6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBvcGVuQWRtaW5lcjogYXN5bmMgKF9wYXJlbnQ6IGFueSwgYXJnczogeyBpbnB1dDogeyBzaXRlSWQ6IHN0cmluZyB9IH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQgfSA9IGFyZ3MuaW5wdXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShzaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGlmIHNpdGUgaXMgcnVubmluZyAtIGRhdGFiYXNlIG11c3QgYmUgYWNjZXNzaWJsZVxuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHNpdGVQcm9jZXNzTWFuYWdlci5nZXRTaXRlU3RhdHVzKHNpdGUpO1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdydW5uaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBcIiR7c2l0ZS5uYW1lfVwiIG11c3QgYmUgcnVubmluZyB0byBvcGVuIEFkbWluZXIuIFN0YXJ0IGl0IGZpcnN0LmAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBPcGVuaW5nIEFkbWluZXIgZm9yICR7c2l0ZS5uYW1lfWApO1xuXG4gICAgICAgICAgaWYgKGFkbWluZXIpIHtcbiAgICAgICAgICAgIGF3YWl0IGFkbWluZXIub3BlbihzaXRlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiAnQWRtaW5lciBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBvcGVuIEFkbWluZXI6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICB0cnVzdFNzbDogYXN5bmMgKF9wYXJlbnQ6IGFueSwgYXJnczogeyBpbnB1dDogeyBzaXRlSWQ6IHN0cmluZyB9IH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQgfSA9IGFyZ3MuaW5wdXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShzaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBUcnVzdGluZyBTU0wgZm9yICR7c2l0ZS5uYW1lfWApO1xuXG4gICAgICAgICAgaWYgKHg1MDlDZXJ0KSB7XG4gICAgICAgICAgICBhd2FpdCB4NTA5Q2VydC50cnVzdENlcnQoc2l0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogJ1g1MDkgY2VydGlmaWNhdGUgc2VydmljZSBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gdHJ1c3QgU1NMOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgbWNwUmVuYW1lU2l0ZTogYXN5bmMgKF9wYXJlbnQ6IGFueSwgYXJnczogeyBpbnB1dDogeyBzaXRlSWQ6IHN0cmluZzsgbmV3TmFtZTogc3RyaW5nIH0gfSkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCwgbmV3TmFtZSB9ID0gYXJncy5pbnB1dDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgICAgbmV3TmFtZTogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFJlbmFtaW5nICR7c2l0ZS5uYW1lfSB0byAke25ld05hbWV9YCk7XG5cbiAgICAgICAgICAvLyBVcGRhdGUgc2l0ZSBuYW1lIHZpYSBzaXRlRGF0YVxuICAgICAgICAgIHNpdGUubmFtZSA9IG5ld05hbWU7XG4gICAgICAgICAgYXdhaXQgc2l0ZURhdGEudXBkYXRlU2l0ZShzaXRlSWQsIHsgbmFtZTogbmV3TmFtZSB9KTtcblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgcmVuYW1lZCBzaXRlIHRvOiAke25ld05hbWV9YCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgbmV3TmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gcmVuYW1lIHNpdGU6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgIG5ld05hbWU6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgY2hhbmdlUGhwVmVyc2lvbjogYXN5bmMgKFxuICAgICAgICBfcGFyZW50OiBhbnksXG4gICAgICAgIGFyZ3M6IHsgaW5wdXQ6IHsgc2l0ZUlkOiBzdHJpbmc7IHBocFZlcnNpb246IHN0cmluZyB9IH1cbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCwgcGhwVmVyc2lvbiB9ID0gYXJncy5pbnB1dDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgICAgcGhwVmVyc2lvbjogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gQ2hhbmdpbmcgUEhQIHZlcnNpb24gZm9yICR7c2l0ZS5uYW1lfSB0byAke3BocFZlcnNpb259YFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc2l0ZVByb3Zpc2lvbmVyKSB7XG4gICAgICAgICAgICBhd2FpdCBzaXRlUHJvdmlzaW9uZXIuc3dhcFNlcnZpY2Uoc2l0ZSwgJ3BocCcsIHBocFZlcnNpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6ICdTaXRlIHByb3Zpc2lvbmVyIHNlcnZpY2Ugbm90IGF2YWlsYWJsZScsXG4gICAgICAgICAgICAgIHBocFZlcnNpb246IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBTdWNjZXNzZnVsbHkgY2hhbmdlZCBQSFAgdmVyc2lvbiB0bzogJHtwaHBWZXJzaW9ufWApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIHBocFZlcnNpb24sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGNoYW5nZSBQSFAgdmVyc2lvbjpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgcGhwVmVyc2lvbjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBpbXBvcnRTaXRlOiBhc3luYyAoX3BhcmVudDogYW55LCBhcmdzOiB7IGlucHV0OiB7IHppcFBhdGg6IHN0cmluZzsgc2l0ZU5hbWU/OiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgemlwUGF0aCwgc2l0ZU5hbWUgfSA9IGFyZ3MuaW5wdXQ7XG4gICAgICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh6aXBQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgWmlwIGZpbGUgbm90IGZvdW5kOiAke3ppcFBhdGh9YCxcbiAgICAgICAgICAgICAgc2l0ZUlkOiBudWxsLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEltcG9ydGluZyBzaXRlIGZyb20gJHt6aXBQYXRofWApO1xuXG4gICAgICAgICAgaWYgKCFpbXBvcnRTaXRlU2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiAnSW1wb3J0IHNpdGUgc2VydmljZSBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgc2l0ZUlkOiBudWxsLFxuICAgICAgICAgICAgICBzaXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW1wb3J0U2l0ZVNlcnZpY2UucnVuKHtcbiAgICAgICAgICAgIHppcFBhdGgsXG4gICAgICAgICAgICBzaXRlTmFtZTogc2l0ZU5hbWUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBzaXRlOiAke3Jlc3VsdC5uYW1lfWApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIHNpdGVJZDogcmVzdWx0LmlkLFxuICAgICAgICAgICAgc2l0ZU5hbWU6IHJlc3VsdC5uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBpbXBvcnQgc2l0ZTpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgc2l0ZUlkOiBudWxsLFxuICAgICAgICAgICAgc2l0ZU5hbWU6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gUGhhc2UgOTogU2l0ZSBDb25maWd1cmF0aW9uICYgRGV2IFRvb2xzXG4gICAgICB0b2dnbGVYZGVidWc6IGFzeW5jIChfcGFyZW50OiBhbnksIGFyZ3M6IHsgaW5wdXQ6IHsgc2l0ZUlkOiBzdHJpbmc7IGVuYWJsZWQ6IGJvb2xlYW4gfSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBlbmFibGVkIH0gPSBhcmdzLmlucHV0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgICBlbmFibGVkOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSAke2VuYWJsZWQgPyAnRW5hYmxpbmcnIDogJ0Rpc2FibGluZyd9IFhkZWJ1ZyBmb3IgJHtzaXRlLm5hbWV9YFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHNpdGUncyB4ZGVidWdFbmFibGVkIHByb3BlcnR5XG4gICAgICAgICAgYXdhaXQgc2l0ZURhdGEudXBkYXRlU2l0ZShzaXRlSWQsIHsgeGRlYnVnRW5hYmxlZDogZW5hYmxlZCB9KTtcblxuICAgICAgICAgIC8vIFJlc3RhcnQgdGhlIHNpdGUgaWYgaXQncyBydW5uaW5nIHRvIGFwcGx5IHRoZSBjaGFuZ2VcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBzaXRlUHJvY2Vzc01hbmFnZXIuZ2V0U2l0ZVN0YXR1cyhzaXRlKTtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAncnVubmluZycpIHtcbiAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBSZXN0YXJ0aW5nIHNpdGUgdG8gYXBwbHkgWGRlYnVnIGNoYW5nZWApO1xuICAgICAgICAgICAgYXdhaXQgc2l0ZVByb2Nlc3NNYW5hZ2VyLnJlc3RhcnQoc2l0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5ICR7ZW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9IFhkZWJ1Z2BcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIGVuYWJsZWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIHRvZ2dsZSBYZGVidWc6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgIGVuYWJsZWQ6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZ2V0U2l0ZUxvZ3M6IGFzeW5jIChcbiAgICAgICAgX3BhcmVudDogYW55LFxuICAgICAgICBhcmdzOiB7IGlucHV0OiB7IHNpdGVJZDogc3RyaW5nOyBsb2dUeXBlPzogc3RyaW5nOyBsaW5lcz86IG51bWJlciB9IH1cbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCB7IHNpdGVJZCwgbG9nVHlwZSA9ICdwaHAnLCBsaW5lcyA9IDEwMCB9ID0gYXJncy5pbnB1dDtcbiAgICAgICAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuICAgICAgICBjb25zdCBmc1Byb21pc2VzID0gZnMucHJvbWlzZXM7XG4gICAgICAgIGNvbnN0IHBhdGhNb2R1bGUgPSByZXF1aXJlKCdwYXRoJyk7XG5cbiAgICAgICAgLy8gSGVscGVyIGZvciBhc3luYyBmaWxlIGV4aXN0ZW5jZSBjaGVja1xuICAgICAgICBjb25zdCBmaWxlRXhpc3RzID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnNQcm9taXNlcy5hY2Nlc3MoZmlsZVBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEhlbHBlciB0byByZWFkIGxhc3QgTiBsaW5lcyBvZiBhIGZpbGVcbiAgICAgICAgY29uc3QgcmVhZExhc3RMaW5lcyA9IGFzeW5jIChmaWxlUGF0aDogc3RyaW5nLCBudW1MaW5lczogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzUHJvbWlzZXMucmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgICAgICAgY29uc3QgbG9nTGluZXMgPSBjb250ZW50LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHJldHVybiBsb2dMaW5lcy5zbGljZSgtbnVtTGluZXMpLmpvaW4oJ1xcbicpIHx8ICcoZW1wdHkpJztcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShzaXRlSWQpO1xuICAgICAgICAgIGlmICghc2l0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICAgIGxvZ3M6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gR2V0dGluZyAke2xvZ1R5cGV9IGxvZ3MgZm9yICR7c2l0ZS5uYW1lfWApO1xuXG4gICAgICAgICAgY29uc3QgbG9nczogQXJyYXk8eyB0eXBlOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZzsgcGF0aDogc3RyaW5nIH0+ID0gW107XG4gICAgICAgICAgY29uc3QgbG9nc0RpciA9IHBhdGhNb2R1bGUuam9pbihzaXRlLnBhdGgsICdsb2dzJyk7XG5cbiAgICAgICAgICBjb25zdCBsb2dGaWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAgICAgICAgICAgcGhwOiBbJ3BocCcsICdwaHAtZnBtJ10sXG4gICAgICAgICAgICBuZ2lueDogWyduZ2lueCddLFxuICAgICAgICAgICAgbXlzcWw6IFsnbXlzcWwnXSxcbiAgICAgICAgICAgIGFsbDogWydwaHAnLCAncGhwLWZwbScsICduZ2lueCcsICdteXNxbCddLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXRMb2dzID0gbG9nRmlsZXNbbG9nVHlwZV0gfHwgbG9nRmlsZXMucGhwO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBsb2dOYW1lIG9mIHRhcmdldExvZ3MpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBlcnJvciBhbmQgYWNjZXNzIGxvZ3NcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3VmZml4IG9mIFsnZXJyb3IubG9nJywgJ2FjY2Vzcy5sb2cnLCAnLmxvZyddKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxvZ1BhdGggPSBwYXRoTW9kdWxlLmpvaW4oXG4gICAgICAgICAgICAgICAgbG9nc0RpcixcbiAgICAgICAgICAgICAgICBgJHtsb2dOYW1lfSR7c3VmZml4ID09PSAnLmxvZycgPyAnJyA6ICcvJ30ke3N1ZmZpeH1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IGFsdExvZ1BhdGggPSBwYXRoTW9kdWxlLmpvaW4obG9nc0RpciwgYCR7bG9nTmFtZX0ke3N1ZmZpeH1gKTtcblxuICAgICAgICAgICAgICBsZXQgZmluYWxQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgICAgaWYgKGF3YWl0IGZpbGVFeGlzdHMobG9nUGF0aCkpIHtcbiAgICAgICAgICAgICAgICBmaW5hbFBhdGggPSBsb2dQYXRoO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF3YWl0IGZpbGVFeGlzdHMoYWx0TG9nUGF0aCkpIHtcbiAgICAgICAgICAgICAgICBmaW5hbFBhdGggPSBhbHRMb2dQYXRoO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGZpbmFsUGF0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkTGFzdExpbmVzKGZpbmFsUGF0aCwgbGluZXMpO1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICBsb2dzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBsb2dOYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaW5hbFBhdGgsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobG9ncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIFRyeSB0byBmaW5kIGFueSBsb2cgZmlsZXNcbiAgICAgICAgICAgIGlmIChhd2FpdCBmaWxlRXhpc3RzKGxvZ3NEaXIpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBmc1Byb21pc2VzLnJlYWRkaXIobG9nc0RpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViRGlyID0gcGF0aE1vZHVsZS5qb2luKGxvZ3NEaXIsIGVudHJ5Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViRW50cmllcyA9IGF3YWl0IGZzUHJvbWlzZXMucmVhZGRpcihzdWJEaXIpO1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJGaWxlIG9mIHN1YkVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YkZpbGUuZW5kc1dpdGgoJy5sb2cnKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ1BhdGggPSBwYXRoTW9kdWxlLmpvaW4oc3ViRGlyLCBzdWJGaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZExhc3RMaW5lcyhsb2dQYXRoLCBsaW5lcyk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVudHJ5Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGxvZ1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy5sb2cnKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbG9nUGF0aCA9IHBhdGhNb2R1bGUuam9pbihsb2dzRGlyLCBlbnRyeS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkTGFzdExpbmVzKGxvZ1BhdGgsIGxpbmVzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogZW50cnkubmFtZS5yZXBsYWNlKCcubG9nJywgJycpLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgcGF0aDogbG9nUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIGxvZ3MsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGdldCBsb2dzOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBsb2dzOiBbXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBQaGFzZSAxMDogQ2xvdWQgQmFja3VwIE11dGF0aW9uc1xuICAgICAgY3JlYXRlQmFja3VwOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczogeyBzaXRlSWQ6IHN0cmluZzsgcHJvdmlkZXI6IHN0cmluZzsgbm90ZT86IHN0cmluZyB9XG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIHByb3ZpZGVyLCBub3RlIH0gPSBhcmdzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIENyZWF0aW5nIGJhY2t1cCBmb3Igc2l0ZSAke3NpdGVJZH0gdG8gJHtwcm92aWRlcn1gKTtcblxuICAgICAgICAgIC8vIEdldCBzaXRlXG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IG51bGwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdldCBwcm92aWRlcnMgZnJvbSBDbG91ZCBCYWNrdXBzIGFkZG9uXG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJzID0gYXdhaXQgZ2V0QmFja3VwUHJvdmlkZXJzKCk7XG4gICAgICAgICAgaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IG51bGwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICdObyBjbG91ZCBzdG9yYWdlIHByb3ZpZGVycyBjb25maWd1cmVkLiBDb25uZWN0IEdvb2dsZSBEcml2ZSBvciBEcm9wYm94IGluIExvY2FsIEh1Yi4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGaW5kIHRoZSBtYXRjaGluZyBwcm92aWRlciAobWFwICdnb29nbGVEcml2ZScgdG8gJ2dvb2dsZScgZm9yIHRoZSBhZGRvbilcbiAgICAgICAgICBjb25zdCBwcm92aWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgZ29vZ2xlRHJpdmU6ICdnb29nbGUnLCBkcm9wYm94OiAnZHJvcGJveCcgfTtcbiAgICAgICAgICBjb25zdCBwcm92aWRlcklkID0gcHJvdmlkZXJNYXBbcHJvdmlkZXJdIHx8IHByb3ZpZGVyO1xuICAgICAgICAgIGNvbnN0IG1hdGNoZWRQcm92aWRlciA9IHByb3ZpZGVycy5maW5kKChwOiBhbnkpID0+IHAuaWQgPT09IHByb3ZpZGVySWQpO1xuXG4gICAgICAgICAgaWYgKCFtYXRjaGVkUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IG51bGwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBgUHJvdmlkZXIgJyR7cHJvdmlkZXJ9JyBub3QgY29uZmlndXJlZC4gQXZhaWxhYmxlOiAke3Byb3ZpZGVycy5tYXAoKHA6IGFueSkgPT4gcC5uYW1lKS5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hcCB0aGUgSHViIHByb3ZpZGVyIElEIHRvIHJjbG9uZSBiYWNrZW5kIG5hbWVcbiAgICAgICAgICAvLyBUaGUgYWRkb24gdXNlcyAnZ29vZ2xlJyBpbiBlbmFibGVkLXByb3ZpZGVycyBidXQgZXhwZWN0cyAnZHJpdmUnIGZvciBiYWNrdXAgb3BlcmF0aW9uc1xuICAgICAgICAgIGNvbnN0IGJhY2t1cFByb3ZpZGVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBnb29nbGU6ICdkcml2ZScsIGRyb3Bib3g6ICdkcm9wYm94JyB9O1xuICAgICAgICAgIGNvbnN0IGJhY2t1cFByb3ZpZGVySWQgPSBiYWNrdXBQcm92aWRlck1hcFttYXRjaGVkUHJvdmlkZXIuaWRdIHx8IG1hdGNoZWRQcm92aWRlci5pZDtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFske0FERE9OX05BTUV9XSBVc2luZyBiYWNrdXAgcHJvdmlkZXIgSUQ6ICR7YmFja3VwUHJvdmlkZXJJZH0gKGZyb20gJHttYXRjaGVkUHJvdmlkZXIuaWR9KWBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gQ3JlYXRlIGJhY2t1cCB2aWEgSVBDICh1c2UgbG9uZyB0aW1lb3V0IGZvciBiYWNrdXAgb3BlcmF0aW9ucylcbiAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IG5vdGUgfHwgJ0JhY2t1cCBjcmVhdGVkIHZpYSBNQ1AnO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGludm9rZUJhY2t1cElQQyhcbiAgICAgICAgICAgICdiYWNrdXBzOmJhY2t1cC1zaXRlJyxcbiAgICAgICAgICAgIEJBQ0tVUF9JUENfVElNRU9VVCxcbiAgICAgICAgICAgIHNpdGVJZCxcbiAgICAgICAgICAgIGJhY2t1cFByb3ZpZGVySWQsXG4gICAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEJhY2t1cCBJUEMgcmVzdWx0OiAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG5cbiAgICAgICAgICAvLyBDaGVjayBmb3IgdG9wLWxldmVsIElQQyBlcnJvclxuICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IG51bGwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3IubWVzc2FnZSB8fCAnQmFja3VwIGNyZWF0aW9uIGZhaWxlZCcsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVud3JhcCBuZXN0ZWQgcmVzdWx0IHN0cnVjdHVyZSAtIHRoZSBhY3R1YWwgcmVzdWx0IGlzIGF0IHJlc3VsdC5yZXN1bHRcbiAgICAgICAgICBjb25zdCBiYWNrdXBSZXN1bHQgPSByZXN1bHQucmVzdWx0O1xuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGJhY2t1cCByZXN1bHQgY29udGFpbnMgYW4gZXJyb3IgKG5lc3RlZCBhdCByZXN1bHQucmVzdWx0LmVycm9yKVxuICAgICAgICAgIGlmIChiYWNrdXBSZXN1bHQ/LmVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1zZyA9XG4gICAgICAgICAgICAgIGJhY2t1cFJlc3VsdC5lcnJvci5tZXNzYWdlIHx8IGJhY2t1cFJlc3VsdC5lcnJvci5vcmlnaW5hbD8ubWVzc2FnZSB8fCAnQmFja3VwIGZhaWxlZCc7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogZXJyb3JNc2csXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRyeSB0byBleHRyYWN0IHNuYXBzaG90IElEIChtYXkgYmUgbmVzdGVkIGluIHJlc3VsdC5yZXN1bHQucmVzdWx0KVxuICAgICAgICAgIGxldCBzbmFwc2hvdElkID0gYmFja3VwUmVzdWx0Py5zbmFwc2hvdElkIHx8IGJhY2t1cFJlc3VsdD8uaWQ7XG4gICAgICAgICAgaWYgKCFzbmFwc2hvdElkICYmIGJhY2t1cFJlc3VsdD8ucmVzdWx0KSB7XG4gICAgICAgICAgICBzbmFwc2hvdElkID0gYmFja3VwUmVzdWx0LnJlc3VsdC5zbmFwc2hvdElkIHx8IGJhY2t1cFJlc3VsdC5yZXN1bHQuaWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSWYgbm8gZXJyb3Igd2FzIHJldHVybmVkLCB0aGUgYmFja3VwIHN1Y2NlZWRlZCBldmVuIGlmIG5vIHNuYXBzaG90IElEIGlzIHByb3ZpZGVkXG4gICAgICAgICAgLy8gVGhlIGFkZG9uIGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUgc25hcHNob3QgSUQgaW4gaXRzIElQQyByZXNwb25zZVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgc25hcHNob3RJZDogc25hcHNob3RJZCB8fCBudWxsLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICBtZXNzYWdlOiBgQmFja3VwIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IHRvICR7bWF0Y2hlZFByb3ZpZGVyLm5hbWV9YCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBjcmVhdGUgYmFja3VwOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBzbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBudWxsLFxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICByZXN0b3JlQmFja3VwOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczogeyBzaXRlSWQ6IHN0cmluZzsgcHJvdmlkZXI6IHN0cmluZzsgc25hcHNob3RJZDogc3RyaW5nOyBjb25maXJtPzogYm9vbGVhbiB9XG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIHByb3ZpZGVyLCBzbmFwc2hvdElkLCBjb25maXJtID0gZmFsc2UgfSA9IGFyZ3M7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gUmVzdG9yaW5nIGJhY2t1cCAke3NuYXBzaG90SWR9IGZvciBzaXRlICR7c2l0ZUlkfWApO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgY29uZmlybWF0aW9uXG4gICAgICAgICAgaWYgKCFjb25maXJtKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ1Jlc3RvcmUgcmVxdWlyZXMgY29uZmlybT10cnVlIHRvIHByZXZlbnQgYWNjaWRlbnRhbCBkYXRhIGxvc3MuIEN1cnJlbnQgc2l0ZSBmaWxlcyBhbmQgZGF0YWJhc2Ugd2lsbCBiZSBvdmVyd3JpdHRlbi4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZXQgc2l0ZVxuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IHByb3ZpZGVycyBmcm9tIENsb3VkIEJhY2t1cHMgYWRkb25cbiAgICAgICAgICBjb25zdCBwcm92aWRlcnMgPSBhd2FpdCBnZXRCYWNrdXBQcm92aWRlcnMoKTtcbiAgICAgICAgICBpZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICdObyBjbG91ZCBzdG9yYWdlIHByb3ZpZGVycyBjb25maWd1cmVkLiBDb25uZWN0IEdvb2dsZSBEcml2ZSBvciBEcm9wYm94IGluIExvY2FsIEh1Yi4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGaW5kIHRoZSBtYXRjaGluZyBwcm92aWRlciAobWFwICdnb29nbGVEcml2ZScgdG8gJ2dvb2dsZScgZm9yIHRoZSBhZGRvbilcbiAgICAgICAgICBjb25zdCBwcm92aWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgZ29vZ2xlRHJpdmU6ICdnb29nbGUnLCBkcm9wYm94OiAnZHJvcGJveCcgfTtcbiAgICAgICAgICBjb25zdCBwcm92aWRlcklkID0gcHJvdmlkZXJNYXBbcHJvdmlkZXJdIHx8IHByb3ZpZGVyO1xuICAgICAgICAgIGNvbnN0IG1hdGNoZWRQcm92aWRlciA9IHByb3ZpZGVycy5maW5kKChwOiBhbnkpID0+IHAuaWQgPT09IHByb3ZpZGVySWQpO1xuXG4gICAgICAgICAgaWYgKCFtYXRjaGVkUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogYFByb3ZpZGVyICcke3Byb3ZpZGVyfScgbm90IGNvbmZpZ3VyZWQuIEF2YWlsYWJsZTogJHtwcm92aWRlcnMubWFwKChwOiBhbnkpID0+IHAubmFtZSkuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXAgdGhlIEh1YiBwcm92aWRlciBJRCB0byByY2xvbmUgYmFja2VuZCBuYW1lXG4gICAgICAgICAgY29uc3QgYmFja3VwUHJvdmlkZXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IGdvb2dsZTogJ2RyaXZlJywgZHJvcGJveDogJ2Ryb3Bib3gnIH07XG4gICAgICAgICAgY29uc3QgYmFja3VwUHJvdmlkZXJJZCA9IGJhY2t1cFByb3ZpZGVyTWFwW21hdGNoZWRQcm92aWRlci5pZF0gfHwgbWF0Y2hlZFByb3ZpZGVyLmlkO1xuXG4gICAgICAgICAgLy8gUmVzdG9yZSBiYWNrdXAgdmlhIElQQyAodXNlIGxvbmcgdGltZW91dCBmb3IgcmVzdG9yZSBvcGVyYXRpb25zKVxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGludm9rZUJhY2t1cElQQyhcbiAgICAgICAgICAgICdiYWNrdXBzOnJlc3RvcmUtYmFja3VwJyxcbiAgICAgICAgICAgIEJBQ0tVUF9JUENfVElNRU9VVCxcbiAgICAgICAgICAgIHNpdGVJZCxcbiAgICAgICAgICAgIGJhY2t1cFByb3ZpZGVySWQsXG4gICAgICAgICAgICBzbmFwc2hvdElkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gUmVzdG9yZSByZXN1bHQ6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcblxuICAgICAgICAgIC8vIENoZWNrIGZvciBlcnJvcnMgLSBjYW4gYmUgYXQgcmVzdWx0LmVycm9yIG9yIHJlc3VsdC5yZXN1bHQuZXJyb3IgKElQQyBhc3luYyBwYXR0ZXJuKVxuICAgICAgICAgIGNvbnN0IGlwY0Vycm9yID0gcmVzdWx0LmVycm9yIHx8IHJlc3VsdC5yZXN1bHQ/LmVycm9yO1xuICAgICAgICAgIGlmIChpcGNFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgdHlwZW9mIGlwY0Vycm9yID09PSAnc3RyaW5nJyA/IGlwY0Vycm9yIDogaXBjRXJyb3IubWVzc2FnZSB8fCAnUmVzdG9yZSBmYWlsZWQnO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogYFNpdGUgcmVzdG9yZWQgZnJvbSBiYWNrdXAgJHtzbmFwc2hvdElkfWAsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gcmVzdG9yZSBiYWNrdXA6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZGVsZXRlQmFja3VwOiBhc3luYyAoXG4gICAgICAgIF9wYXJlbnQ6IGFueSxcbiAgICAgICAgYXJnczogeyBzaXRlSWQ6IHN0cmluZzsgcHJvdmlkZXI6IHN0cmluZzsgc25hcHNob3RJZDogc3RyaW5nOyBjb25maXJtPzogYm9vbGVhbiB9XG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIHByb3ZpZGVyLCBzbmFwc2hvdElkLCBjb25maXJtID0gZmFsc2UgfSA9IGFyZ3M7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gRGVsZXRpbmcgYmFja3VwICR7c25hcHNob3RJZH0gZm9yIHNpdGUgJHtzaXRlSWR9YCk7XG5cbiAgICAgICAgICAvLyBDaGVjayBjb25maXJtYXRpb25cbiAgICAgICAgICBpZiAoIWNvbmZpcm0pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBkZWxldGVkU25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6ICdEZWxldGUgcmVxdWlyZXMgY29uZmlybT10cnVlIHRvIHByZXZlbnQgYWNjaWRlbnRhbCBkZWxldGlvbi4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZXQgc2l0ZVxuICAgICAgICAgIGNvbnN0IHNpdGUgPSBzaXRlRGF0YS5nZXRTaXRlKHNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGVsZXRlZFNuYXBzaG90SWQ6IG51bGwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBgU2l0ZSBub3QgZm91bmQ6ICR7c2l0ZUlkfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdldCBwcm92aWRlcnMgZnJvbSBDbG91ZCBCYWNrdXBzIGFkZG9uXG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJzID0gYXdhaXQgZ2V0QmFja3VwUHJvdmlkZXJzKCk7XG4gICAgICAgICAgaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBkZWxldGVkU25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ05vIGNsb3VkIHN0b3JhZ2UgcHJvdmlkZXJzIGNvbmZpZ3VyZWQuIENvbm5lY3QgR29vZ2xlIERyaXZlIG9yIERyb3Bib3ggaW4gTG9jYWwgSHViLicsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZpbmQgdGhlIG1hdGNoaW5nIHByb3ZpZGVyIChtYXAgJ2dvb2dsZURyaXZlJyB0byAnZ29vZ2xlJyBmb3IgdGhlIGFkZG9uKVxuICAgICAgICAgIGNvbnN0IHByb3ZpZGVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBnb29nbGVEcml2ZTogJ2dvb2dsZScsIGRyb3Bib3g6ICdkcm9wYm94JyB9O1xuICAgICAgICAgIGNvbnN0IHByb3ZpZGVySWQgPSBwcm92aWRlck1hcFtwcm92aWRlcl0gfHwgcHJvdmlkZXI7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlZFByb3ZpZGVyID0gcHJvdmlkZXJzLmZpbmQoKHA6IGFueSkgPT4gcC5pZCA9PT0gcHJvdmlkZXJJZCk7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoZWRQcm92aWRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGRlbGV0ZWRTbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogYFByb3ZpZGVyICcke3Byb3ZpZGVyfScgbm90IGNvbmZpZ3VyZWQuIEF2YWlsYWJsZTogJHtwcm92aWRlcnMubWFwKChwOiBhbnkpID0+IHAubmFtZSkuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXAgdGhlIEh1YiBwcm92aWRlciBJRCB0byByY2xvbmUgYmFja2VuZCBuYW1lXG4gICAgICAgICAgY29uc3QgYmFja3VwUHJvdmlkZXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IGdvb2dsZTogJ2RyaXZlJywgZHJvcGJveDogJ2Ryb3Bib3gnIH07XG4gICAgICAgICAgY29uc3QgYmFja3VwUHJvdmlkZXJJZCA9IGJhY2t1cFByb3ZpZGVyTWFwW21hdGNoZWRQcm92aWRlci5pZF0gfHwgbWF0Y2hlZFByb3ZpZGVyLmlkO1xuXG4gICAgICAgICAgLy8gVHJ5IHRvIGRlbGV0ZSBiYWNrdXAgdmlhIElQQyAobWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIGFkZG9uKVxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGludm9rZUJhY2t1cElQQyhcbiAgICAgICAgICAgICdiYWNrdXBzOmRlbGV0ZS1iYWNrdXAnLFxuICAgICAgICAgICAgREVGQVVMVF9JUENfVElNRU9VVCxcbiAgICAgICAgICAgIHNpdGVJZCxcbiAgICAgICAgICAgIGJhY2t1cFByb3ZpZGVySWQsXG4gICAgICAgICAgICBzbmFwc2hvdElkXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBJUEMgY2hhbm5lbCBkb2Vzbid0IGV4aXN0IG9yIGlzbid0IHN1cHBvcnRlZCwgcHJvdmlkZSBoZWxwZnVsIG1lc3NhZ2VcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ3RpbWVkIG91dCcpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGVsZXRlZFNuYXBzaG90SWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAgICdEZWxldGUgYmFja3VwIG9wZXJhdGlvbiBpcyBub3QgYXZhaWxhYmxlIHZpYSBNQ1AuIFBsZWFzZSBkZWxldGUgYmFja3VwcyB0aHJvdWdoIHRoZSBMb2NhbCBVSS4nLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGRlbGV0ZWRTbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yLm1lc3NhZ2UgfHwgJ0RlbGV0ZSBmYWlsZWQnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZWRTbmFwc2hvdElkOiBzbmFwc2hvdElkLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0JhY2t1cCBkZWxldGVkJyxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIEZhaWxlZCB0byBkZWxldGUgYmFja3VwOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBkZWxldGVkU25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZG93bmxvYWRCYWNrdXA6IGFzeW5jIChcbiAgICAgICAgX3BhcmVudDogYW55LFxuICAgICAgICBhcmdzOiB7IHNpdGVJZDogc3RyaW5nOyBwcm92aWRlcjogc3RyaW5nOyBzbmFwc2hvdElkOiBzdHJpbmcgfVxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2l0ZUlkLCBwcm92aWRlciwgc25hcHNob3RJZCB9ID0gYXJncztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBEb3dubG9hZGluZyBiYWNrdXAgJHtzbmFwc2hvdElkfSBmb3Igc2l0ZSAke3NpdGVJZH1gKTtcblxuICAgICAgICAgIC8vIEdldCBzaXRlXG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBmaWxlUGF0aDogbnVsbCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtzaXRlSWR9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IHByb3ZpZGVycyBmcm9tIENsb3VkIEJhY2t1cHMgYWRkb25cbiAgICAgICAgICBjb25zdCBwcm92aWRlcnMgPSBhd2FpdCBnZXRCYWNrdXBQcm92aWRlcnMoKTtcbiAgICAgICAgICBpZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGZpbGVQYXRoOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAnTm8gY2xvdWQgc3RvcmFnZSBwcm92aWRlcnMgY29uZmlndXJlZC4gQ29ubmVjdCBHb29nbGUgRHJpdmUgb3IgRHJvcGJveCBpbiBMb2NhbCBIdWIuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmluZCB0aGUgbWF0Y2hpbmcgcHJvdmlkZXIgKG1hcCAnZ29vZ2xlRHJpdmUnIHRvICdnb29nbGUnIGZvciB0aGUgYWRkb24pXG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IGdvb2dsZURyaXZlOiAnZ29vZ2xlJywgZHJvcGJveDogJ2Ryb3Bib3gnIH07XG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJJZCA9IHByb3ZpZGVyTWFwW3Byb3ZpZGVyXSB8fCBwcm92aWRlcjtcbiAgICAgICAgICBjb25zdCBtYXRjaGVkUHJvdmlkZXIgPSBwcm92aWRlcnMuZmluZCgocDogYW55KSA9PiBwLmlkID09PSBwcm92aWRlcklkKTtcblxuICAgICAgICAgIGlmICghbWF0Y2hlZFByb3ZpZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZmlsZVBhdGg6IG51bGwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBgUHJvdmlkZXIgJyR7cHJvdmlkZXJ9JyBub3QgY29uZmlndXJlZC4gQXZhaWxhYmxlOiAke3Byb3ZpZGVycy5tYXAoKHA6IGFueSkgPT4gcC5uYW1lKS5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hcCB0aGUgSHViIHByb3ZpZGVyIElEIHRvIHJjbG9uZSBiYWNrZW5kIG5hbWVcbiAgICAgICAgICBjb25zdCBiYWNrdXBQcm92aWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgZ29vZ2xlOiAnZHJpdmUnLCBkcm9wYm94OiAnZHJvcGJveCcgfTtcbiAgICAgICAgICBjb25zdCBiYWNrdXBQcm92aWRlcklkID0gYmFja3VwUHJvdmlkZXJNYXBbbWF0Y2hlZFByb3ZpZGVyLmlkXSB8fCBtYXRjaGVkUHJvdmlkZXIuaWQ7XG5cbiAgICAgICAgICAvLyBUcnkgdG8gZG93bmxvYWQgYmFja3VwIHZpYSBJUEMgKHVzZSBsb25nIHRpbWVvdXQgZm9yIGRvd25sb2FkcylcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnZva2VCYWNrdXBJUEMoXG4gICAgICAgICAgICAnYmFja3Vwczpkb3dubG9hZC1iYWNrdXAnLFxuICAgICAgICAgICAgQkFDS1VQX0lQQ19USU1FT1VULFxuICAgICAgICAgICAgc2l0ZUlkLFxuICAgICAgICAgICAgYmFja3VwUHJvdmlkZXJJZCxcbiAgICAgICAgICAgIHNuYXBzaG90SWRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgLy8gSWYgdGhlIElQQyBjaGFubmVsIGRvZXNuJ3QgZXhpc3Qgb3IgaXNuJ3Qgc3VwcG9ydGVkLCBwcm92aWRlIGhlbHBmdWwgbWVzc2FnZVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5lcnJvci5tZXNzYWdlPy5pbmNsdWRlcygndGltZWQgb3V0JykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmaWxlUGF0aDogbnVsbCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICAgJ0Rvd25sb2FkIGJhY2t1cCBvcGVyYXRpb24gaXMgbm90IGF2YWlsYWJsZSB2aWEgTUNQLiBQbGVhc2UgZG93bmxvYWQgYmFja3VwcyB0aHJvdWdoIHRoZSBMb2NhbCBVSS4nLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGZpbGVQYXRoOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yLm1lc3NhZ2UgfHwgJ0Rvd25sb2FkIGZhaWxlZCcsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZmlsZVBhdGg6IHJlc3VsdC5yZXN1bHQ/LmZpbGVQYXRoIHx8IG51bGwsXG4gICAgICAgICAgICBtZXNzYWdlOiAnQmFja3VwIGRvd25sb2FkZWQgdG8gRG93bmxvYWRzIGZvbGRlcicsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gZG93bmxvYWQgYmFja3VwOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBmaWxlUGF0aDogbnVsbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZWRpdEJhY2t1cE5vdGU6IGFzeW5jIChcbiAgICAgICAgX3BhcmVudDogYW55LFxuICAgICAgICBhcmdzOiB7IHNpdGVJZDogc3RyaW5nOyBwcm92aWRlcjogc3RyaW5nOyBzbmFwc2hvdElkOiBzdHJpbmc7IG5vdGU6IHN0cmluZyB9XG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgeyBzaXRlSWQsIHByb3ZpZGVyLCBzbmFwc2hvdElkLCBub3RlIH0gPSBhcmdzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEVkaXRpbmcgYmFja3VwIG5vdGUgZm9yICR7c25hcHNob3RJZH1gKTtcblxuICAgICAgICAgIC8vIEdldCBzaXRlXG4gICAgICAgICAgY29uc3Qgc2l0ZSA9IHNpdGVEYXRhLmdldFNpdGUoc2l0ZUlkKTtcbiAgICAgICAgICBpZiAoIXNpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICBub3RlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogYFNpdGUgbm90IGZvdW5kOiAke3NpdGVJZH1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZXQgcHJvdmlkZXJzIGZyb20gQ2xvdWQgQmFja3VwcyBhZGRvblxuICAgICAgICAgIGNvbnN0IHByb3ZpZGVycyA9IGF3YWl0IGdldEJhY2t1cFByb3ZpZGVycygpO1xuICAgICAgICAgIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc25hcHNob3RJZDogbnVsbCxcbiAgICAgICAgICAgICAgbm90ZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ05vIGNsb3VkIHN0b3JhZ2UgcHJvdmlkZXJzIGNvbmZpZ3VyZWQuIENvbm5lY3QgR29vZ2xlIERyaXZlIG9yIERyb3Bib3ggaW4gTG9jYWwgSHViLicsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZpbmQgdGhlIG1hdGNoaW5nIHByb3ZpZGVyIChtYXAgJ2dvb2dsZURyaXZlJyB0byAnZ29vZ2xlJyBmb3IgdGhlIGFkZG9uKVxuICAgICAgICAgIGNvbnN0IHByb3ZpZGVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBnb29nbGVEcml2ZTogJ2dvb2dsZScsIGRyb3Bib3g6ICdkcm9wYm94JyB9O1xuICAgICAgICAgIGNvbnN0IHByb3ZpZGVySWQgPSBwcm92aWRlck1hcFtwcm92aWRlcl0gfHwgcHJvdmlkZXI7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlZFByb3ZpZGVyID0gcHJvdmlkZXJzLmZpbmQoKHA6IGFueSkgPT4gcC5pZCA9PT0gcHJvdmlkZXJJZCk7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoZWRQcm92aWRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIHNuYXBzaG90SWQ6IG51bGwsXG4gICAgICAgICAgICAgIG5vdGU6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiBgUHJvdmlkZXIgJyR7cHJvdmlkZXJ9JyBub3QgY29uZmlndXJlZC4gQXZhaWxhYmxlOiAke3Byb3ZpZGVycy5tYXAoKHA6IGFueSkgPT4gcC5uYW1lKS5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hcCB0aGUgSHViIHByb3ZpZGVyIElEIHRvIHJjbG9uZSBiYWNrZW5kIG5hbWVcbiAgICAgICAgICBjb25zdCBiYWNrdXBQcm92aWRlck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgZ29vZ2xlOiAnZHJpdmUnLCBkcm9wYm94OiAnZHJvcGJveCcgfTtcbiAgICAgICAgICBjb25zdCBiYWNrdXBQcm92aWRlcklkID0gYmFja3VwUHJvdmlkZXJNYXBbbWF0Y2hlZFByb3ZpZGVyLmlkXSB8fCBtYXRjaGVkUHJvdmlkZXIuaWQ7XG5cbiAgICAgICAgICAvLyBUcnkgdG8gZWRpdCBiYWNrdXAgbm90ZSB2aWEgSVBDIChxdWljayBtZXRhZGF0YSBvcGVyYXRpb24pXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW52b2tlQmFja3VwSVBDKFxuICAgICAgICAgICAgJ2JhY2t1cHM6ZWRpdC1ub3RlJyxcbiAgICAgICAgICAgIERFRkFVTFRfSVBDX1RJTUVPVVQsXG4gICAgICAgICAgICBzaXRlSWQsXG4gICAgICAgICAgICBiYWNrdXBQcm92aWRlcklkLFxuICAgICAgICAgICAgc25hcHNob3RJZCxcbiAgICAgICAgICAgIG5vdGVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgLy8gSWYgdGhlIElQQyBjaGFubmVsIGRvZXNuJ3QgZXhpc3Qgb3IgaXNuJ3Qgc3VwcG9ydGVkLCBwcm92aWRlIGhlbHBmdWwgbWVzc2FnZVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5lcnJvci5tZXNzYWdlPy5pbmNsdWRlcygndGltZWQgb3V0JykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICAgIG5vdGU6IG51bGwsXG4gICAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgICAnRWRpdCBiYWNrdXAgbm90ZSBvcGVyYXRpb24gaXMgbm90IGF2YWlsYWJsZSB2aWEgTUNQLiBQbGVhc2UgZWRpdCBiYWNrdXAgbm90ZXMgdGhyb3VnaCB0aGUgTG9jYWwgVUkuJyxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBzbmFwc2hvdElkOiBudWxsLFxuICAgICAgICAgICAgICBub3RlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yLm1lc3NhZ2UgfHwgJ0VkaXQgbm90ZSBmYWlsZWQnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIHNuYXBzaG90SWQsXG4gICAgICAgICAgICBub3RlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIGVkaXQgYmFja3VwIG5vdGU6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIHNuYXBzaG90SWQ6IG51bGwsXG4gICAgICAgICAgICBub3RlOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFBoYXNlIDExOiBXUCBFbmdpbmUgQ29ubmVjdFxuICAgICAgd3BlQXV0aGVudGljYXRlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIEluaXRpYXRpbmcgV1AgRW5naW5lIGF1dGhlbnRpY2F0aW9uYCk7XG5cbiAgICAgICAgICBpZiAoIXdwZU9BdXRoU2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVtYWlsOiBudWxsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogJ1dQIEVuZ2luZSBPQXV0aCBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUcmlnZ2VyIE9BdXRoIGZsb3cgLSB0aGlzIHdpbGwgb3BlbiBicm93c2VyIGZvciB1c2VyIGNvbnNlbnRcbiAgICAgICAgICAvLyBhdXRoZW50aWNhdGUoKSByZXR1cm5zIE9BdXRoVG9rZW5zIG9uIHN1Y2Nlc3NcbiAgICAgICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCB3cGVPQXV0aFNlcnZpY2UuYXV0aGVudGljYXRlKCk7XG5cbiAgICAgICAgICBpZiAodG9rZW5zICYmIHRva2Vucy5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIGdldCB1c2VyIGVtYWlsIGZyb20gQ0FQSVxuICAgICAgICAgICAgbGV0IGVtYWlsID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChjYXBpU2VydmljZSkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gYXdhaXQgY2FwaVNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgICAgICAgICAgICBlbWFpbCA9IGN1cnJlbnRVc2VyPy5lbWFpbCB8fCBudWxsO1xuICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAvLyBVc2VyIGluZm8gbm90IGF2YWlsYWJsZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZWQgd2l0aCBXUEUke2VtYWlsID8gYCBhcyAke2VtYWlsfWAgOiAnJ31gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgZW1haWwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdTdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlZCB3aXRoIFdQIEVuZ2luZScsXG4gICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVtYWlsOiBudWxsLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0F1dGhlbnRpY2F0aW9uIGluaXRpYXRlZC4gUGxlYXNlIGNvbXBsZXRlIHRoZSBsb2dpbiBpbiB5b3VyIGJyb3dzZXIuJyxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIFdQRSBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVtYWlsOiBudWxsLFxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHdwZUxvZ291dDogYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBMb2dnaW5nIG91dCBmcm9tIFdQIEVuZ2luZWApO1xuXG4gICAgICAgICAgaWYgKCF3cGVPQXV0aFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjogJ1dQIEVuZ2luZSBPQXV0aCBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjbGVhclRva2VucygpIGlzIHRoZSBsb2dvdXQgbWV0aG9kXG4gICAgICAgICAgYXdhaXQgd3BlT0F1dGhTZXJ2aWNlLmNsZWFyVG9rZW5zKCk7XG5cbiAgICAgICAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5IGxvZ2dlZCBvdXQgZnJvbSBXUEVgKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdMb2dnZWQgb3V0IGZyb20gV1AgRW5naW5lJyxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBsb2NhbExvZ2dlci5lcnJvcihgWyR7QURET05fTkFNRX1dIFdQRSBsb2dvdXQgZmFpbGVkOmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ0xvZ291dCBmYWlsZWQnLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFBoYXNlIDExYzogUHVzaCB0byBXUCBFbmdpbmVcbiAgICAgIHB1c2hUb1dwZTogYXN5bmMgKFxuICAgICAgICBfcGFyZW50OiBhbnksXG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICBsb2NhbFNpdGVJZDogc3RyaW5nO1xuICAgICAgICAgIHJlbW90ZUluc3RhbGxJZDogc3RyaW5nO1xuICAgICAgICAgIGluY2x1ZGVTcWw/OiBib29sZWFuO1xuICAgICAgICAgIGNvbmZpcm0/OiBib29sZWFuO1xuICAgICAgICB9XG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgeyBsb2NhbFNpdGVJZCwgcmVtb3RlSW5zdGFsbElkLCBpbmNsdWRlU3FsID0gZmFsc2UsIGNvbmZpcm0gPSBmYWxzZSB9ID0gYXJncztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgWyR7QURET05fTkFNRX1dIFB1c2ggdG8gV1BFOiBzaXRlPSR7bG9jYWxTaXRlSWR9LCByZW1vdGU9JHtyZW1vdGVJbnN0YWxsSWR9LCBpbmNsdWRlU3FsPSR7aW5jbHVkZVNxbH1gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFJlcXVpcmUgY29uZmlybWF0aW9uIGZvciBwdXNoIG9wZXJhdGlvbnNcbiAgICAgICAgICBpZiAoIWNvbmZpcm0pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAnUHVzaCByZXF1aXJlcyBjb25maXJtPXRydWUgdG8gcHJldmVudCBhY2NpZGVudGFsIG92ZXJ3cml0ZXMuIFNldCBjb25maXJtPXRydWUgdG8gcHJvY2VlZC4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBWZXJpZnkgc2l0ZSBleGlzdHNcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShsb2NhbFNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtsb2NhbFNpdGVJZH1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBXUEUgY29ubmVjdGlvbiBleGlzdHNcbiAgICAgICAgICBjb25zdCB3cGVDb25uZWN0aW9uID0gc2l0ZS5ob3N0Q29ubmVjdGlvbnM/LmZpbmQoKGM6IGFueSkgPT4gYy5ob3N0SWQgPT09ICd3cGUnKTtcbiAgICAgICAgICBpZiAoIXdwZUNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAnU2l0ZSBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZS4gVXNlIENvbm5lY3QgaW4gTG9jYWwgdG8gbGluayB0aGUgc2l0ZSBmaXJzdC4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBwdXNoIHNlcnZpY2UgYXZhaWxhYmlsaXR5XG4gICAgICAgICAgaWYgKCF3cGVQdXNoU2VydmljZSB8fCB0eXBlb2Ygd3BlUHVzaFNlcnZpY2UucHVzaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiAnV1BFIFB1c2ggc2VydmljZSBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IGluc3RhbGwgZGV0YWlscyBmcm9tIENBUEkgdG8gZ2V0IHJlcXVpcmVkIHBhcmFtZXRlcnNcbiAgICAgICAgICBsZXQgaW5zdGFsbE5hbWUgPSByZW1vdGVJbnN0YWxsSWQ7XG4gICAgICAgICAgbGV0IHByaW1hcnlEb21haW4gPSAnJztcbiAgICAgICAgICBsZXQgaW5zdGFsbElkID0gJyc7XG5cbiAgICAgICAgICBpZiAoY2FwaVNlcnZpY2UgJiYgdHlwZW9mIGNhcGlTZXJ2aWNlLmdldEluc3RhbGxMaXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YWxscyA9IGF3YWl0IGNhcGlTZXJ2aWNlLmdldEluc3RhbGxMaXN0KCk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0luc3RhbGwgPSBpbnN0YWxscz8uZmluZChcbiAgICAgICAgICAgICAgKGk6IGFueSkgPT5cbiAgICAgICAgICAgICAgICBpLnNpdGU/LmlkID09PSB3cGVDb25uZWN0aW9uLnJlbW90ZVNpdGVJZCAmJlxuICAgICAgICAgICAgICAgICghd3BlQ29ubmVjdGlvbi5yZW1vdGVTaXRlRW52IHx8IGkuZW52aXJvbm1lbnQgPT09IHdwZUNvbm5lY3Rpb24ucmVtb3RlU2l0ZUVudilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdJbnN0YWxsKSB7XG4gICAgICAgICAgICAgIGluc3RhbGxOYW1lID0gbWF0Y2hpbmdJbnN0YWxsLm5hbWU7XG4gICAgICAgICAgICAgIHByaW1hcnlEb21haW4gPVxuICAgICAgICAgICAgICAgIG1hdGNoaW5nSW5zdGFsbC5wcmltYXJ5X2RvbWFpbiB8fFxuICAgICAgICAgICAgICAgIG1hdGNoaW5nSW5zdGFsbC5jbmFtZSB8fFxuICAgICAgICAgICAgICAgIGAke21hdGNoaW5nSW5zdGFsbC5uYW1lfS53cGVuZ2luZS5jb21gO1xuICAgICAgICAgICAgICBpbnN0YWxsSWQgPSBtYXRjaGluZ0luc3RhbGwuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFwcmltYXJ5RG9tYWluKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBkZXRlcm1pbmUgV1AgRW5naW5lIGluc3RhbGwgZGV0YWlscy4gUGxlYXNlIGVuc3VyZSB5b3UgYXJlIGF1dGhlbnRpY2F0ZWQuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RhcnQgdGhlIHB1c2ggb3BlcmF0aW9uIChhc3luYyAtIHJldHVybnMgaW1tZWRpYXRlbHkpXG4gICAgICAgICAgd3BlUHVzaFNlcnZpY2VcbiAgICAgICAgICAgIC5wdXNoKHtcbiAgICAgICAgICAgICAgaW5jbHVkZVNxbCxcbiAgICAgICAgICAgICAgd3BlbmdpbmVJbnN0YWxsTmFtZTogaW5zdGFsbE5hbWUsXG4gICAgICAgICAgICAgIHdwZW5naW5lSW5zdGFsbElkOiBpbnN0YWxsSWQsXG4gICAgICAgICAgICAgIHdwZW5naW5lU2l0ZUlkOiB3cGVDb25uZWN0aW9uLnJlbW90ZVNpdGVJZCxcbiAgICAgICAgICAgICAgd3BlbmdpbmVQcmltYXJ5RG9tYWluOiBwcmltYXJ5RG9tYWluLFxuICAgICAgICAgICAgICBsb2NhbFNpdGVJZDogc2l0ZS5pZCxcbiAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHdwZUNvbm5lY3Rpb24ucmVtb3RlU2l0ZUVudixcbiAgICAgICAgICAgICAgaXNNYWdpY1N5bmM6IGZhbHNlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBQdXNoIGZhaWxlZDpgLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBQdXNoIHN0YXJ0ZWQgdG8gJHtpbnN0YWxsTmFtZX0uIENoZWNrIExvY2FsIFVJIGZvciBwcm9ncmVzcy5gLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxvY2FsTG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIHN0YXJ0IHB1c2g6YCwgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN0YXJ0IHB1c2gnLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFBoYXNlIDExYzogUHVsbCBmcm9tIFdQIEVuZ2luZVxuICAgICAgcHVsbEZyb21XcGU6IGFzeW5jIChcbiAgICAgICAgX3BhcmVudDogYW55LFxuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgbG9jYWxTaXRlSWQ6IHN0cmluZztcbiAgICAgICAgICByZW1vdGVJbnN0YWxsSWQ6IHN0cmluZztcbiAgICAgICAgICBpbmNsdWRlU3FsPzogYm9vbGVhbjtcbiAgICAgICAgfVxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgbG9jYWxTaXRlSWQsIHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbCA9IGZhbHNlIH0gPSBhcmdzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbJHtBRERPTl9OQU1FfV0gUHVsbCBmcm9tIFdQRTogc2l0ZT0ke2xvY2FsU2l0ZUlkfSwgcmVtb3RlPSR7cmVtb3RlSW5zdGFsbElkfSwgaW5jbHVkZVNxbD0ke2luY2x1ZGVTcWx9YFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBWZXJpZnkgc2l0ZSBleGlzdHNcbiAgICAgICAgICBjb25zdCBzaXRlID0gc2l0ZURhdGEuZ2V0U2l0ZShsb2NhbFNpdGVJZCk7XG4gICAgICAgICAgaWYgKCFzaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6IGBTaXRlIG5vdCBmb3VuZDogJHtsb2NhbFNpdGVJZH1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBXUEUgY29ubmVjdGlvbiBleGlzdHNcbiAgICAgICAgICBjb25zdCB3cGVDb25uZWN0aW9uID0gc2l0ZS5ob3N0Q29ubmVjdGlvbnM/LmZpbmQoKGM6IGFueSkgPT4gYy5ob3N0SWQgPT09ICd3cGUnKTtcbiAgICAgICAgICBpZiAoIXdwZUNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAnU2l0ZSBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZS4gVXNlIENvbm5lY3QgaW4gTG9jYWwgdG8gbGluayB0aGUgc2l0ZSBmaXJzdC4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBwdWxsIHNlcnZpY2UgYXZhaWxhYmlsaXR5XG4gICAgICAgICAgaWYgKCF3cGVQdWxsU2VydmljZSB8fCB0eXBlb2Ygd3BlUHVsbFNlcnZpY2UucHVsbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICAgIGVycm9yOiAnV1BFIFB1bGwgc2VydmljZSBub3QgYXZhaWxhYmxlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IGluc3RhbGwgZGV0YWlscyBmcm9tIENBUElcbiAgICAgICAgICBsZXQgaW5zdGFsbE5hbWUgPSByZW1vdGVJbnN0YWxsSWQ7XG4gICAgICAgICAgbGV0IHByaW1hcnlEb21haW4gPSAnJztcbiAgICAgICAgICBsZXQgaW5zdGFsbElkID0gJyc7XG5cbiAgICAgICAgICBpZiAoY2FwaVNlcnZpY2UgJiYgdHlwZW9mIGNhcGlTZXJ2aWNlLmdldEluc3RhbGxMaXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YWxscyA9IGF3YWl0IGNhcGlTZXJ2aWNlLmdldEluc3RhbGxMaXN0KCk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0luc3RhbGwgPSBpbnN0YWxscz8uZmluZChcbiAgICAgICAgICAgICAgKGk6IGFueSkgPT5cbiAgICAgICAgICAgICAgICBpLnNpdGU/LmlkID09PSB3cGVDb25uZWN0aW9uLnJlbW90ZVNpdGVJZCAmJlxuICAgICAgICAgICAgICAgICghd3BlQ29ubmVjdGlvbi5yZW1vdGVTaXRlRW52IHx8IGkuZW52aXJvbm1lbnQgPT09IHdwZUNvbm5lY3Rpb24ucmVtb3RlU2l0ZUVudilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdJbnN0YWxsKSB7XG4gICAgICAgICAgICAgIGluc3RhbGxOYW1lID0gbWF0Y2hpbmdJbnN0YWxsLm5hbWU7XG4gICAgICAgICAgICAgIHByaW1hcnlEb21haW4gPVxuICAgICAgICAgICAgICAgIG1hdGNoaW5nSW5zdGFsbC5wcmltYXJ5X2RvbWFpbiB8fFxuICAgICAgICAgICAgICAgIG1hdGNoaW5nSW5zdGFsbC5jbmFtZSB8fFxuICAgICAgICAgICAgICAgIGAke21hdGNoaW5nSW5zdGFsbC5uYW1lfS53cGVuZ2luZS5jb21gO1xuICAgICAgICAgICAgICBpbnN0YWxsSWQgPSBtYXRjaGluZ0luc3RhbGwuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFwcmltYXJ5RG9tYWluKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBkZXRlcm1pbmUgV1AgRW5naW5lIGluc3RhbGwgZGV0YWlscy4gUGxlYXNlIGVuc3VyZSB5b3UgYXJlIGF1dGhlbnRpY2F0ZWQuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RhcnQgdGhlIHB1bGwgb3BlcmF0aW9uIChhc3luYyAtIHJldHVybnMgaW1tZWRpYXRlbHkpXG4gICAgICAgICAgd3BlUHVsbFNlcnZpY2VcbiAgICAgICAgICAgIC5wdWxsKHtcbiAgICAgICAgICAgICAgaW5jbHVkZVNxbCxcbiAgICAgICAgICAgICAgd3BlbmdpbmVJbnN0YWxsTmFtZTogaW5zdGFsbE5hbWUsXG4gICAgICAgICAgICAgIHdwZW5naW5lSW5zdGFsbElkOiBpbnN0YWxsSWQsXG4gICAgICAgICAgICAgIHdwZW5naW5lU2l0ZUlkOiB3cGVDb25uZWN0aW9uLnJlbW90ZVNpdGVJZCxcbiAgICAgICAgICAgICAgd3BlbmdpbmVQcmltYXJ5RG9tYWluOiBwcmltYXJ5RG9tYWluLFxuICAgICAgICAgICAgICBsb2NhbFNpdGVJZDogc2l0ZS5pZCxcbiAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHdwZUNvbm5lY3Rpb24ucmVtb3RlU2l0ZUVudixcbiAgICAgICAgICAgICAgaXNNYWdpY1N5bmM6IGZhbHNlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBQdWxsIGZhaWxlZDpgLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBQdWxsIHN0YXJ0ZWQgZnJvbSAke2luc3RhbGxOYW1lfS4gQ2hlY2sgTG9jYWwgVUkgZm9yIHByb2dyZXNzLmAsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gc3RhcnQgcHVsbDpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc3RhcnQgcHVsbCcsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSBNQ1Agc2VydmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0TWNwU2VydmVyKHNlcnZpY2VzOiBMb2NhbFNlcnZpY2VzLCBsb2dnZXI6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAobWNwU2VydmVyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFske0FERE9OX05BTUV9XSBNQ1Agc2VydmVyIGFscmVhZHkgcnVubmluZ2ApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbWNwU2VydmVyID0gbmV3IE1jcFNlcnZlcih7IHBvcnQ6IE1DUF9TRVJWRVIuREVGQVVMVF9QT1JUIH0sIHNlcnZpY2VzLCBsb2dnZXIpO1xuXG4gICAgYXdhaXQgbWNwU2VydmVyLnN0YXJ0KCk7XG5cbiAgICBjb25zdCBpbmZvID0gbWNwU2VydmVyLmdldENvbm5lY3Rpb25JbmZvKCk7XG4gICAgbG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBNQ1Agc2VydmVyIHN0YXJ0ZWQgb24gcG9ydCAke2luZm8ucG9ydH1gKTtcbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBbJHtBRERPTl9OQU1FfV0gTUNQIGNvbm5lY3Rpb24gaW5mbyBzYXZlZCB0bzogfi9MaWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQvTG9jYWwvbWNwLWNvbm5lY3Rpb24taW5mby5qc29uYFxuICAgICk7XG4gICAgbG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBBdmFpbGFibGUgdG9vbHM6ICR7aW5mby50b29scy5qb2luKCcsICcpfWApO1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgbG9nZ2VyLmVycm9yKGBbJHtBRERPTl9OQU1FfV0gRmFpbGVkIHRvIHN0YXJ0IE1DUCBzZXJ2ZXI6YCwgZXJyb3IpO1xuICB9XG59XG5cbi8qKlxuICogU3RvcCB0aGUgTUNQIHNlcnZlclxuICovXG5hc3luYyBmdW5jdGlvbiBzdG9wTWNwU2VydmVyKGxvZ2dlcjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChtY3BTZXJ2ZXIpIHtcbiAgICBhd2FpdCBtY3BTZXJ2ZXIuc3RvcCgpO1xuICAgIG1jcFNlcnZlciA9IG51bGw7XG4gICAgbG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBNQ1Agc2VydmVyIHN0b3BwZWRgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIElQQyBoYW5kbGVycyBmb3IgcmVuZGVyZXIgY29tbXVuaWNhdGlvblxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBfcmVnaXN0ZXJJcGNIYW5kbGVycyhfc2VydmljZXM6IExvY2FsU2VydmljZXMsIF9sb2dnZXI6IGFueSk6IHZvaWQge1xuICAvLyBHZXQgTUNQIHNlcnZlciBzdGF0dXNcbiAgaXBjTWFpbi5oYW5kbGUoJ21jcDpnZXRTdGF0dXMnLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFtY3BTZXJ2ZXIpIHtcbiAgICAgIHJldHVybiB7IHJ1bm5pbmc6IGZhbHNlLCBwb3J0OiAwLCB1cHRpbWU6IDAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG1jcFNlcnZlci5nZXRTdGF0dXMoKTtcbiAgfSk7XG5cbiAgLy8gR2V0IGNvbm5lY3Rpb24gaW5mb1xuICBpcGNNYWluLmhhbmRsZSgnbWNwOmdldENvbm5lY3Rpb25JbmZvJywgYXN5bmMgKCkgPT4ge1xuICAgIGlmICghbWNwU2VydmVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG1jcFNlcnZlci5nZXRDb25uZWN0aW9uSW5mbygpO1xuICB9KTtcblxuICAvLyBTdGFydCBNQ1Agc2VydmVyXG4gIGlwY01haW4uaGFuZGxlKCdtY3A6c3RhcnQnLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0YXJ0TWNwU2VydmVyKF9zZXJ2aWNlcywgX2xvZ2dlcik7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBlcnJvci5tZXNzYWdlIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBTdG9wIE1DUCBzZXJ2ZXJcbiAgaXBjTWFpbi5oYW5kbGUoJ21jcDpzdG9wJywgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdG9wTWNwU2VydmVyKF9sb2dnZXIpO1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogZXJyb3IubWVzc2FnZSB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gUmVzdGFydCBNQ1Agc2VydmVyXG4gIGlwY01haW4uaGFuZGxlKCdtY3A6cmVzdGFydCcsIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3RvcE1jcFNlcnZlcihfbG9nZ2VyKTtcbiAgICAgIGF3YWl0IHN0YXJ0TWNwU2VydmVyKF9zZXJ2aWNlcywgX2xvZ2dlcik7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBlcnJvci5tZXNzYWdlIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBSZWdlbmVyYXRlIGF1dGggdG9rZW5cbiAgaXBjTWFpbi5oYW5kbGUoJ21jcDpyZWdlbmVyYXRlVG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFtY3BTZXJ2ZXIpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ01DUCBzZXJ2ZXIgbm90IHJ1bm5pbmcnIH07XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBuZXdUb2tlbiA9IGF3YWl0IG1jcFNlcnZlci5yZWdlbmVyYXRlVG9rZW4oKTtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHRva2VuOiBuZXdUb2tlbiB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogZXJyb3IubWVzc2FnZSB9O1xuICAgIH1cbiAgfSk7XG5cbiAgX2xvZ2dlci5pbmZvKFxuICAgIGBbJHtBRERPTl9OQU1FfV0gUmVnaXN0ZXJlZCBJUEMgaGFuZGxlcnM6IG1jcDpnZXRTdGF0dXMsIG1jcDpnZXRDb25uZWN0aW9uSW5mbywgbWNwOnN0YXJ0LCBtY3A6c3RvcCwgbWNwOnJlc3RhcnQsIG1jcDpyZWdlbmVyYXRlVG9rZW5gXG4gICk7XG59XG5cbi8qKlxuICogTWFpbiBhZGRvbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoX2NvbnRleHQ6IExvY2FsTWFpbi5BZGRvbk1haW5Db250ZXh0KTogdm9pZCB7XG4gIGNvbnN0IHNlcnZpY2VzID0gTG9jYWxNYWluLmdldFNlcnZpY2VDb250YWluZXIoKS5jcmFkbGUgYXMgYW55O1xuICBjb25zdCB7IGxvY2FsTG9nZ2VyLCBncmFwaHFsIH0gPSBzZXJ2aWNlcztcblxuICB0cnkge1xuICAgIGxvY2FsTG9nZ2VyLmluZm8oYFske0FERE9OX05BTUV9XSBJbml0aWFsaXppbmcuLi5gKTtcblxuICAgIC8vIFJlZ2lzdGVyIEdyYXBoUUwgZXh0ZW5zaW9ucyAoZm9yIGxvY2FsLWNsaSBhbmQgTUNQKVxuICAgIGNvbnN0IHJlc29sdmVycyA9IGNyZWF0ZVJlc29sdmVycyhzZXJ2aWNlcyk7XG4gICAgZ3JhcGhxbC5yZWdpc3RlckdyYXBoUUxTZXJ2aWNlKCdtY3Atc2VydmVyJywgdHlwZURlZnMsIHJlc29sdmVycyk7XG4gICAgbG9jYWxMb2dnZXIuaW5mbyhgWyR7QURET05fTkFNRX1dIFJlZ2lzdGVyZWQgR3JhcGhRTDogMjkgdG9vbHMgKFBoYXNlIDEtMTFiKWApO1xuXG4gICAgLy8gU3RhcnQgTUNQIHNlcnZlciAoZm9yIEFJIHRvb2xzKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCBfbG9jYWxTZXJ2aWNlczogTG9jYWxTZXJ2aWNlcyA9IHtcbiAgICAgIHNpdGVEYXRhOiBzZXJ2aWNlcy5zaXRlRGF0YSxcbiAgICAgIHNpdGVQcm9jZXNzTWFuYWdlcjogc2VydmljZXMuc2l0ZVByb2Nlc3NNYW5hZ2VyLFxuICAgICAgd3BDbGk6IHNlcnZpY2VzLndwQ2xpLFxuICAgICAgZGVsZXRlU2l0ZTogc2VydmljZXMuZGVsZXRlU2l0ZSxcbiAgICAgIGFkZFNpdGU6IHNlcnZpY2VzLmFkZFNpdGUsXG4gICAgICBsb2NhbExvZ2dlcjogc2VydmljZXMubG9jYWxMb2dnZXIsXG4gICAgICBhZG1pbmVyOiBzZXJ2aWNlcy5hZG1pbmVyLFxuICAgICAgeDUwOUNlcnQ6IHNlcnZpY2VzLng1MDlDZXJ0LFxuICAgICAgc2l0ZVByb3Zpc2lvbmVyOiBzZXJ2aWNlcy5zaXRlUHJvdmlzaW9uZXIsXG4gICAgICBpbXBvcnRTaXRlOiBzZXJ2aWNlcy5pbXBvcnRTaXRlLFxuICAgICAgbGlnaHRuaW5nU2VydmljZXM6IHNlcnZpY2VzLmxpZ2h0bmluZ1NlcnZpY2VzLFxuICAgICAgLy8gUGhhc2UgMTE6IFdQIEVuZ2luZSBDb25uZWN0XG4gICAgICB3cGVPQXV0aDogc2VydmljZXMud3BlT0F1dGgsXG4gICAgICBjYXBpOiBzZXJ2aWNlcy5jYXBpLFxuICAgIH07XG5cbiAgICAvLyBNQ1Agc2VydmVyIGRpc2FibGVkIC0gQ0xJLW9ubHkgbW9kZVxuICAgIC8vIFRvIGVuYWJsZSBNQ1Agc2VydmVyIGZvciBBSSB0b29sIGludGVncmF0aW9uLCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZzpcbiAgICAvLyBzdGFydE1jcFNlcnZlcihfbG9jYWxTZXJ2aWNlcywgbG9jYWxMb2dnZXIpO1xuICAgIC8vIF9yZWdpc3RlcklwY0hhbmRsZXJzKF9sb2NhbFNlcnZpY2VzLCBsb2NhbExvZ2dlcik7XG5cbiAgICBsb2NhbExvZ2dlci5pbmZvKGBbJHtBRERPTl9OQU1FfV0gU3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIChDTEktb25seSBtb2RlKWApO1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgbG9jYWxMb2dnZXIuZXJyb3IoYFske0FERE9OX05BTUV9XSBGYWlsZWQgdG8gaW5pdGlhbGl6ZTpgLCBlcnJvcik7XG4gIH1cbn1cbiJdfQ==