@discordeno/rest 21.0.0-next.cd396cf → 21.0.0-next.cf8304c

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.
@@ -359,10 +359,12 @@ function createRestManager(options) {
359
359
  if (response.status < 200 || response.status >= 400) {
360
360
  rest.logger.debug(`Request to ${url} failed.`);
361
361
  if (response.status !== 429) {
362
+ const body = response.headers.get('Content-Type') === 'application/json' ? await response.json() : await response.text();
362
363
  options.reject({
363
364
  ok: false,
364
365
  status: response.status,
365
- body: await response.text()
366
+ statusText: response.statusText,
367
+ body
366
368
  });
367
369
  return;
368
370
  }
@@ -376,6 +378,7 @@ function createRestManager(options) {
376
378
  options.reject({
377
379
  ok: false,
378
380
  status: response.status,
381
+ statusText: response.statusText,
379
382
  error: 'The request was rate limited and it maxed out the retries limit.'
380
383
  });
381
384
  return;
@@ -441,7 +444,6 @@ function createRestManager(options) {
441
444
  async makeRequest (method, route, options) {
442
445
  // This error needs to be created here because of how stack traces get calculated
443
446
  const error = new Error();
444
- error.message = 'Failed to send request to discord.';
445
447
  if (rest.isProxied) {
446
448
  if (rest.authorization) {
447
449
  options ??= {};
@@ -450,11 +452,11 @@ function createRestManager(options) {
450
452
  }
451
453
  const result = await fetch(`${rest.baseUrl}/v${rest.version}${route}`, rest.createRequestBody(method, options));
452
454
  if (!result.ok) {
453
- const errText = await result.text().catch(()=>null);
455
+ const body = (result.headers.get('Content-Type') === 'application/json' ? await result.json() : await result.text()).catch(()=>null);
454
456
  error.cause = {
455
457
  ok: false,
456
458
  status: result.status,
457
- body: errText
459
+ body
458
460
  };
459
461
  throw error;
460
462
  }
@@ -473,6 +475,38 @@ function createRestManager(options) {
473
475
  resolve(data.status !== 204 ? JSON.parse(data.body ?? '{}') : undefined);
474
476
  },
475
477
  reject: (reason)=>{
478
+ let errorText;
479
+ switch(reason.status){
480
+ case 400:
481
+ errorText = "The options was improperly formatted, or the server couldn't understand it.";
482
+ break;
483
+ case 401:
484
+ errorText = 'The Authorization header was missing or invalid.';
485
+ break;
486
+ case 403:
487
+ errorText = 'The Authorization token you passed did not have permission to the resource.';
488
+ break;
489
+ case 404:
490
+ errorText = "The resource at the location specified doesn't exist.";
491
+ break;
492
+ case 405:
493
+ errorText = 'The HTTP method used is not valid for the location specified.';
494
+ break;
495
+ case 429:
496
+ errorText = "You're being ratelimited.";
497
+ break;
498
+ case 502:
499
+ errorText = 'There was not a gateway available to process your options. Wait a bit and retry.';
500
+ break;
501
+ default:
502
+ errorText = reason.statusText ?? 'Unknown error';
503
+ }
504
+ error.message = `[${reason.status}] ${errorText}`;
505
+ // If discord sent us JSON, it is probably going to be an error message from which we can get and add some information about the error to the error message, the full body will be in the error.cause
506
+ // https://discord.com/developers/docs/reference#error-messages
507
+ if (typeof reason.body === 'object' && (0, _utils.hasProperty)(reason.body, 'code') && (0, _utils.hasProperty)(reason.body, 'message')) {
508
+ error.message += `\nDiscord error: [${reason.body.code}] ${reason.body.message}`;
509
+ }
476
510
  error.cause = reason;
477
511
  reject(error);
478
512
  },
@@ -1200,11 +1234,11 @@ function createRestManager(options) {
1200
1234
  async getGuildStickers (guildId) {
1201
1235
  return await rest.get(rest.routes.guilds.stickers(guildId));
1202
1236
  },
1203
- async getThreadMember (channelId, userId) {
1204
- return await rest.get(rest.routes.channels.threads.user(channelId, userId));
1237
+ async getThreadMember (channelId, userId, options) {
1238
+ return await rest.get(rest.routes.channels.threads.getUser(channelId, userId, options));
1205
1239
  },
1206
- async getThreadMembers (channelId) {
1207
- return await rest.get(rest.routes.channels.threads.members(channelId));
1240
+ async getThreadMembers (channelId, options) {
1241
+ return await rest.get(rest.routes.channels.threads.members(channelId, options));
1208
1242
  },
1209
1243
  async getReactions (channelId, messageId, reaction, options) {
1210
1244
  return await rest.get(rest.routes.channels.reactions.message(channelId, messageId, reaction, options));
@@ -1398,6 +1432,11 @@ function createRestManager(options) {
1398
1432
  reason
1399
1433
  });
1400
1434
  },
1435
+ async modifyGuildIncidentActions (guildId, options) {
1436
+ return await rest.put(rest.routes.guilds.incidentActions(guildId), {
1437
+ body: options
1438
+ });
1439
+ },
1401
1440
  async unbanMember (guildId, userId, reason) {
1402
1441
  await rest.delete(rest.routes.guilds.members.ban(guildId, userId), {
1403
1442
  reason
@@ -1506,6 +1545,14 @@ function createRestManager(options) {
1506
1545
  reason
1507
1546
  });
1508
1547
  },
1548
+ async listApplicationRoleConnectionsMetadataRecords (applicationId) {
1549
+ return await rest.get(rest.routes.applicationRoleConnectionMetadata(applicationId));
1550
+ },
1551
+ async updateApplicationRoleConnectionsMetadataRecords (applicationId, options) {
1552
+ return await rest.put(rest.routes.applicationRoleConnectionMetadata(applicationId), {
1553
+ body: options
1554
+ });
1555
+ },
1509
1556
  preferSnakeCase (enabled) {
1510
1557
  const camelizer = enabled ? (x)=>x : _utils.camelize;
1511
1558
  rest.get = async (url, options)=>{
@@ -1536,4 +1583,4 @@ var HttpResponseCode = /*#__PURE__*/ function(HttpResponseCode) {
1536
1583
  return HttpResponseCode;
1537
1584
  }(HttpResponseCode || {});
1538
1585
 
1539
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRJbnZpdGUsXG4gIHR5cGUgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICB0eXBlIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgdHlwZSBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgdHlwZSBEaXNjb3JkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZSxcbiAgdHlwZSBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIHR5cGUgRGlzY29yZFJvbGUsXG4gIHR5cGUgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICB0eXBlIERpc2NvcmRTa3UsXG4gIHR5cGUgRGlzY29yZFNvdW5kYm9hcmRTb3VuZCxcbiAgdHlwZSBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgdHlwZSBEaXNjb3JkU3RpY2tlcixcbiAgdHlwZSBEaXNjb3JkU3RpY2tlclBhY2ssXG4gIHR5cGUgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgdHlwZSBEaXNjb3JkVGVtcGxhdGUsXG4gIHR5cGUgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkVXNlcixcbiAgdHlwZSBEaXNjb3JkVmFuaXR5VXJsLFxuICB0eXBlIERpc2NvcmRWb2ljZVJlZ2lvbixcbiAgdHlwZSBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgdHlwZSBEaXNjb3JkV2ViaG9vayxcbiAgdHlwZSBEaXNjb3JkV2VsY29tZVNjcmVlbixcbiAgSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLFxuICB0eXBlIE1mYUxldmVscyxcbiAgdHlwZSBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIERJU0NPUkRFTk9fVkVSU0lPTixcbiAgY2FsY3VsYXRlQml0cyxcbiAgY2FtZWxUb1NuYWtlQ2FzZSxcbiAgY2FtZWxpemUsXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgbG9nZ2VyLFxuICBwcm9jZXNzUmVhY3Rpb25TdHJpbmcsXG4gIHVybFRvQmFzZTY0LFxufSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMuanMnXG5pbXBvcnQgdHlwZSB7IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBNYWtlUmVxdWVzdE9wdGlvbnMsIFJlc3RNYW5hZ2VyLCBTZW5kUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG5cbiAgICByb3V0ZXM6IGNyZWF0ZVJvdXRlcygpLFxuXG4gICAgY3JlYXRlQmFzZUhlYWRlcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHtESVNDT1JERU5PX1ZFUlNJT059KWAsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwsIGlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApXG5cbiAgICAgIGNvbnN0IGdsb2JhbCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoJ2dsb2JhbCcpXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JhbCAmJiBub3cgPCBnbG9iYWwucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0lkZW50aWZpZXIgPSBgQmVhcmVyICR7bmV3VG9rZW59YFxuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnF1ZXVlcy5kZWxldGUoa2V5KVxuICAgICAgICBxdWV1ZS5pZGVudGlmaWVyID0gbmV3SWRlbnRpZmllclxuXG4gICAgICAgIGNvbnN0IG5ld0tleSA9IGAke25ld0lkZW50aWZpZXJ9JHtxdWV1ZS51cmx9YFxuICAgICAgICBjb25zdCBuZXdRdWV1ZSA9IHJlc3QucXVldWVzLmdldChuZXdLZXkpXG5cbiAgICAgICAgLy8gTWVyZ2UgdGhlIHF1ZXVlc1xuICAgICAgICBpZiAobmV3UXVldWUpIHtcbiAgICAgICAgICBuZXdRdWV1ZS53YWl0aW5nLnVuc2hpZnQoLi4ucXVldWUud2FpdGluZylcbiAgICAgICAgICBuZXdRdWV1ZS5wZW5kaW5nLnVuc2hpZnQoLi4ucXVldWUucGVuZGluZylcblxuICAgICAgICAgIHF1ZXVlLndhaXRpbmcgPSBbXVxuICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBbXVxuXG4gICAgICAgICAgcXVldWUuY2xlYW51cCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KG5ld0tleSwgcXVldWUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCByYXRlbGltaXRQYXRoXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGgudXJsfWAsIHJhdGVsaW1pdFBhdGgpXG5cbiAgICAgICAgaWYgKHJhdGVsaW1pdFBhdGguYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLmJ1Y2tldElkfWAsIHJhdGVsaW1pdFBhdGgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9iajogYW55KTogYW55IHtcbiAgICAgIGlmIChvYmogPT09IG51bGwpIHJldHVybiBudWxsXG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KGl0ZW0pKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3T2JqOiBhbnkgPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldXG5cbiAgICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gc25ha2VfY2FzZSB3ZSBjYW4gYXNzdW1lIGl0IGlzIGFscmVhZHkgaW4gdGhlIGRpc2NvcmQgZm9ybWF0LlxuICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTb21lIGZhbHN5IHZhbHVlcyBzaG91bGQgYmUgYWxsb3dlZCBsaWtlIG51bGwgb3IgMFxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICBjYXNlICdwZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2FsbG93JzpcbiAgICAgICAgICAgICAgY2FzZSAnZGVueSc6XG4gICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRNZW1iZXJQZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICduYW1lTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLm5hbWVfbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPYmpbY2FtZWxUb1NuYWtlQ2FzZShrZXkpXSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09ialxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHJldHVybiBvYmoudG9TdHJpbmcoKVxuXG4gICAgICByZXR1cm4gb2JqXG4gICAgfSxcblxuICAgIGNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuY3JlYXRlQmFzZUhlYWRlcnMoKVxuXG4gICAgICBpZiAob3B0aW9ucz8udW5hdXRob3JpemVkICE9PSB0cnVlKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIC8vIElGIEEgUkVBU09OIElTIFBST1ZJREVEIEVOQ09ERSBJVCBJTiBIRUFERVJTXG4gICAgICBpZiAob3B0aW9ucz8ucmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVhZGVyc1tBVURJVF9MT0dfUkVBU09OX0hFQURFUl0gPSBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucz8ucmVhc29uKVxuICAgICAgfVxuXG4gICAgICBsZXQgYm9keTogc3RyaW5nIHwgRm9ybURhdGEgfCB1bmRlZmluZWRcblxuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgd2UgbmVlZCB0byBhZGQgc3BlY2lmaWMgY2hlY2sgZm9yIEdFVCBtZXRob2RcbiAgICAgIC8vIFNpbmNlIEdFVCBkb2VzIG5vdCBhbGxvdyBib2RpZXNcblxuICAgICAgLy8gSGF2ZSB0byBjaGVjayBmb3IgYXR0YWNobWVudHMgZmlyc3QsIHNpbmNlIGJvZHkgdGhlbiBoYXMgdG8gYmUgc2VuZCBpbiBhIGRpZmZlcmVudCB3YXkuXG4gICAgICBpZiAob3B0aW9ucz8uZmlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmZpbGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoYGZpbGVzWyR7aX1dYCwgb3B0aW9ucy5maWxlc1tpXS5ibG9iLCBvcHRpb25zLmZpbGVzW2ldLm5hbWUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYXZlIHRvIHVzZSBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQgb3IgZWxzZSBKU09OLnN0cmluZ2lmeSBtYXkgdGhyb3cgYW4gZXJyb3IgZm9yIHRoZSBwcmVzZW5jZSBvZiBCaWdJbnQocykgaW4gdGhlIGpzb25cbiAgICAgICAgZm9ybS5hcHBlbmQoJ3BheWxvYWRfanNvbicsIEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHsgLi4ub3B0aW9ucy5ib2R5LCBmaWxlczogdW5kZWZpbmVkIH0pKSlcblxuICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIGJvZHkgPSBmb3JtXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgJiYgb3B0aW9ucy5oZWFkZXJzICYmIG9wdGlvbnMuaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICAgIC8vIE9BdXRoMiBib2R5IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IGZvcm1Cb2R5OiBzdHJpbmdbXSA9IFtdXG5cbiAgICAgICAgY29uc3QgZGlzY29yZEJvZHkgPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpXG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGRpc2NvcmRCb2R5KSB7XG4gICAgICAgICAgZm9ybUJvZHkucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc2NvcmRCb2R5W3Byb3BdKX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgYm9keSA9IGZvcm1Cb2R5LmpvaW4oJyYnKVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgYm9keSA9IG9wdGlvbnMuYm9keVxuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSlcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGBhcHBsaWNhdGlvbi9qc29uYFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNPTUVUSU1FUyBTUEVDSUFMIEhFQURFUlMgKEUuRy4gQ1VTVE9NIEFVVEhPUklaQVRJT04pIE5FRUQgVE8gQkUgVVNFRFxuICAgICAgaWYgKG9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBvcHRpb25zLmhlYWRlcnMpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBmb3Igb2YgbG9vcC4gJHtcbiAgICAgICAgLy8gICB2YWx1ZS5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgICAvLyB9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgLy8gSWYgdGhlIHRpbWUgaGFzIG5vdCByZWFjaGVkIGNhbmNlbFxuICAgICAgICBpZiAodmFsdWUucmVzZXRUaW1lc3RhbXAgPiBub3cpIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdCBpcyBvdmVyLCBkZWxldGUgdGhlIHJhdGUgbGltaXRlclxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZGVsZXRlKGtleSlcbiAgICAgICAgLy8gSWYgaXQgd2FzIGdsb2JhbCwgYWxzbyBtYXJrIHRoZSBnbG9iYWwgdmFsdWUgYXMgZmFsc2VcbiAgICAgICAgaWYgKGtleSA9PT0gJ2dsb2JhbCcpIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIEFMTCBQQVRIUyBBUkUgQ0xFQVJFRCBDQU4gQ0FOQ0VMIE9VVCFcbiAgICAgIGlmIChyZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSB0cnVlXG4gICAgICAgIC8vIFJFQ0hFQ0sgSU4gMSBTRUNPTkRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZygnW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBzZXRUaW1lb3V0LicpXG4gICAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICAgIH0sIDEwMDApXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgICBwcm9jZXNzSGVhZGVycyh1cmwsIGhlYWRlcnMsIGlkZW50aWZpZXIpIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUilcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUilcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUilcblxuICAgICAgLy8gSWYgd2UgZGlkbid0IHJlY2VpdmVkIHRoZSBpZGVudGlmaWVyLCBmYWxsYmFjayB0byB0aGUgYm90IHRva2VuXG4gICAgICBpZGVudGlmaWVyID8/PSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIHJlc3QucXVldWVzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTQVZFIFRIRSBCVUNLRVQgQVMgTElNSVRFRCBTSU5DRSBESUZGRVJFTlQgVVJMUyBNQVkgU0hBUkUgQSBCVUNLRVRcbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7YnVja2V0SWR9YCwge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgR0xPQkFMIExJTUlULCBNQVJLIElUIFJBVEUgTElNSVRFRCBHTE9CQUxMWVxuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTnVtYmVyKGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpKSAqIDEwMDBcbiAgICAgICAgY29uc3QgZ2xvYmFsUmVzZXQgPSBEYXRlLm5vdygpICsgcmV0cnlBZnRlclxuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCA9IEdsb2JhbGx5IFJhdGUgTGltaXRlZF0gVVJMOiAke3VybH0gfCBHbG9iYWwgUmVzdDogJHtnbG9iYWxSZXNldH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSB0cnVlXG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICAgIH0sIHJldHJ5QWZ0ZXIpXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoaWRlbnRpZmllciwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJhdGVMaW1pdGVkICYmICFyZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnJvdXRlfWBcbiAgICAgIGNvbnN0IHBheWxvYWQgPSByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucylcblxuICAgICAgY29uc3QgbG9nZ2luZ0hlYWRlcnMgPSB7IC4uLnBheWxvYWQuaGVhZGVycyB9XG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBjb25zdCBhdXRob3JpemF0aW9uU2NoZW1lID0gcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24/LnNwbGl0KCcgJylbMF1cbiAgICAgICAgbG9nZ2luZ0hlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb25TY2hlbWV9IHRva2VuaGVyZWBcbiAgICAgIH1cblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgSHR0cFJlc3BvbnNlQ29kZS5TdWNjZXNzIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwUmVzcG9uc2VDb2RlLkVycm9yKSB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgYm9keTogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25zdW1lIHRoZSByZXNwb25zZSBib2R5IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5XG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKClcblxuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gd2FzIHJhdGVsaW1pdGVkLmApXG4gICAgICAgIC8vIFRvbyBtYW55IGF0dGVtcHRzLCBnZXQgcmlkIG9mIHJlcXVlc3QgZnJvbSBxdWV1ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucmV0cnlDb3VudCA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZClcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKGBbUkVTVCAtIFJldHJpZXNNYXhlZF0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgZXJyb3I6ICdUaGUgcmVxdWVzdCB3YXMgcmF0ZSBsaW1pdGVkIGFuZCBpdCBtYXhlZCBvdXQgdGhlIHJldHJpZXMgbGltaXQuJyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgICAgaWYgKHJlc2V0QWZ0ZXIpIGF3YWl0IGRlbGF5KE51bWJlcihyZXNldEFmdGVyKSAqIDEwMDApXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdGYWlsZWQgdG8gc2VuZCByZXF1ZXN0IHRvIGRpc2NvcmQuJ1xuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke3JvdXRlfWAsIHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIGNvbnN0IGVyclRleHQgPSBhd2FpdCByZXN1bHQudGV4dCgpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgICAgICAgICBlcnJvci5jYXVzZSA9IHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHk6IGVyclRleHQsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyBhd2FpdCByZXN1bHQuanNvbigpIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcmVxdWVzdEJvZHlPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyAocGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gcmVhc29uXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuYWxsKCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlKHRlbXBsYXRlQ29kZSwgYm9keSkge1xuICAgICAgaWYgKGJvZHkuaWNvbikge1xuICAgICAgICBib2R5Lmljb24gPSBhd2FpdCB1cmxUb0Jhc2U2NChib2R5Lmljb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE1mYUxldmVsKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuZ3VpbGRzLm1mYShndWlsZElkKSwgeyBib2R5OiB7IGxldmVsOiBtZmFMZXZlbCB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mub3JpZ2luYWwod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHR5cGU6IEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcy5VcGRhdGVNZXNzYWdlLFxuICAgICAgICAgIGRhdGE6IG9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICByZXF1ZXN0VG9TcGVha1RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgdG9waWMsIHJlYXNvbj86IHN0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgYm9keTogeyB0b3BpYyB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB3ZWJob29rQ2hhbm5lbElkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRJZDogdXNlcklkIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHcm91cERtQ2hhbm5lbChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamkoZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkRW1vamlbXSB9PihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxQYXJ0aWFsPERpc2NvcmRHdWlsZD5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRQcmV2aWV3KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRQcmV2aWV3PihyZXN0LnJvdXRlcy5ndWlsZHMucHJldmlldyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2s+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PEFycmF5PHsgdXNlcjogRGlzY29yZFVzZXI7IG1lbWJlcj86IERpc2NvcmRNZW1iZXIgfT4+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMudXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2F0ZXdheUJvdCgpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE93blZvaWNlU3RhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWxjb21lU2NyZWVuKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0PihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0SnNvbihndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5jcm9zc3Bvc3QoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZURtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx2b2lkIHwgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5jYWxsYmFjayhpbnRlcmFjdGlvbklkLCB0b2tlbiwgcGFyYW1zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQWN0aXZpdHlJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnR5cGluZyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRHdWlsZE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnRbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5jb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTa3VzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2t1W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5za3VzKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb25bXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbj4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kU291bmRib2FyZFNvdW5kKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuc2VuZFNvdW5kKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kW10+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQubGlzdERlZmF1bHQoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdIH0+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiRElTQ09SRF9BUElfVVJMIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIlJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiIsIlJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiIsIlJBVEVfTElNSVRfTElNSVRfSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJnZXRCb3RJZEZyb21Ub2tlbiIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJsb2dnZXIiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJJbmZpbml0eSIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInZlcnNpb24iLCJyb3V0ZXMiLCJjcmVhdGVSb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsIkRJU0NPUkRFTk9fVkVSU0lPTiIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImlkZW50aWZpZXIiLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsIkRhdGUiLCJyZXNldFRpbWVzdGFtcCIsInVwZGF0ZVRva2VuUXVldWVzIiwib2xkVG9rZW4iLCJuZXdUb2tlbiIsIkVycm9yIiwiaGVhZGVycyIsInVuZGVmaW5lZCIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXdJZGVudGlmaWVyIiwia2V5IiwicXVldWUiLCJlbnRyaWVzIiwiZGVsZXRlIiwibmV3S2V5IiwibmV3UXVldWUiLCJ3YWl0aW5nIiwidW5zaGlmdCIsInBlbmRpbmciLCJjbGVhbnVwIiwic2V0IiwicmF0ZWxpbWl0UGF0aCIsImJ1Y2tldElkIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiY2FsY3VsYXRlQml0cyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsImNhbWVsVG9TbmFrZUNhc2UiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmlsZXMiLCJmb3JtIiwiRm9ybURhdGEiLCJpIiwibGVuZ3RoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJsaW1pdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJyb3V0ZSIsInBheWxvYWQiLCJyZXF1ZXN0Qm9keU9wdGlvbnMiLCJsb2dnaW5nSGVhZGVycyIsImF1dGhvcml6YXRpb25TY2hlbWUiLCJzcGxpdCIsImRlYnVnIiwicmVzcG9uc2UiLCJjYXRjaCIsImVycm9yIiwicmVqZWN0Iiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwic2ltcGxpZnlVcmwiLCJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJyZXRyeUNvdW50IiwicmVzZXRBZnRlciIsImRlbGF5IiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInBhcnRzIiwic2Vjb25kTGFzdFBhcnQiLCJzcGxpY2UiLCJwcm9jZXNzUmVxdWVzdCIsInJlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJxdWV1ZUlkZW50aWZpZXIiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwiUXVldWUiLCJtZXNzYWdlIiwicmVzdWx0IiwiZXJyVGV4dCIsImNhdXNlIiwianNvbiIsIlByb21pc2UiLCJkYXRhIiwicGFyc2UiLCJjYW1lbGl6ZSIsInBvc3QiLCJwYXRjaCIsInB1dCIsImFkZFJlYWN0aW9uIiwiY2hhbm5lbElkIiwibWVzc2FnZUlkIiwicmVhY3Rpb24iLCJwcm9jZXNzUmVhY3Rpb25TdHJpbmciLCJjaGFubmVscyIsInJlYWN0aW9ucyIsImJvdCIsImFkZFJlYWN0aW9ucyIsIm9yZGVyZWQiLCJhbGwiLCJhZGRSb2xlIiwiZ3VpbGRJZCIsInVzZXJJZCIsInJvbGVJZCIsImd1aWxkcyIsInJvbGVzIiwibWVtYmVyIiwiYWRkVGhyZWFkTWVtYmVyIiwidGhyZWFkcyIsInVzZXIiLCJhZGREbVJlY2lwaWVudCIsImRtUmVjaXBpZW50IiwiY3JlYXRlQXV0b21vZFJ1bGUiLCJhdXRvbW9kIiwicnVsZXMiLCJjcmVhdGVDaGFubmVsIiwiY3JlYXRlRW1vamkiLCJlbW9qaXMiLCJjcmVhdGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaXMiLCJjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJyZXN0T3B0aW9ucyIsImJlYXJlclRva2VuIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjcmVhdGVHdWlsZCIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJpY29uIiwidXJsVG9CYXNlNjQiLCJ0ZW1wbGF0ZXMiLCJjb2RlIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiZmlsZSIsImRlc2NyaXB0aW9uIiwidGFncyIsInN0aWNrZXJzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiZm9ydW0iLCJjcmVhdGVJbnZpdGUiLCJpbnZpdGVzIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRzIiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlcyIsImNyZWF0ZVdlYmhvb2siLCJ3ZWJob29rcyIsImF2YXRhciIsImRlbGV0ZUF1dG9tb2RSdWxlIiwicnVsZUlkIiwicnVsZSIsImRlbGV0ZUNoYW5uZWwiLCJjaGFubmVsIiwiZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZSIsIm92ZXJ3cml0ZUlkIiwib3ZlcndyaXRlIiwiZGVsZXRlRW1vamkiLCJpZCIsImVtb2ppIiwiZGVsZXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamkiLCJkZWxldGVGb2xsb3d1cE1lc3NhZ2UiLCJyZXNwb25zZXMiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJjb21tYW5kSWQiLCJjb21tYW5kIiwiZGVsZXRlR3VpbGQiLCJndWlsZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwib25lIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwic3RpY2tlcklkIiwic3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbiIsImRlbGV0ZUludml0ZSIsImludml0ZUNvZGUiLCJpbnZpdGUiLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVzc2FnZXMiLCJtZXNzYWdlSWRzIiwiYnVsayIsIm1lc3NhZ2VzIiwic2xpY2UiLCJkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJvcmlnaW5hbCIsImRlbGV0ZU93blJlYWN0aW9uIiwiZGVsZXRlUmVhY3Rpb25zQWxsIiwiZGVsZXRlUmVhY3Rpb25zRW1vamkiLCJkZWxldGVSb2xlIiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudElkIiwiZXZlbnQiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwic3RhZ2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwid2ViaG9va0lkIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwid2ViaG9vayIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImVkaXRBdXRvbW9kUnVsZSIsImVkaXRCb3RQcm9maWxlIiwiYm90QXZhdGFyVVJMIiwiYmFubmVyIiwiYm90QmFubmVyVVJMIiwiY3VycmVudFVzZXIiLCJ1c2VybmFtZSIsInRyaW0iLCJlZGl0Q2hhbm5lbCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImVkaXRDaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEFwcGxpY2F0aW9uRW1vamkiLCJlZGl0Rm9sbG93dXBNZXNzYWdlIiwiZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZCIsImVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZE1mYUxldmVsIiwibWZhTGV2ZWwiLCJtZmEiLCJsZXZlbCIsImVkaXRHdWlsZFN0aWNrZXIiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImVkaXRNZXNzYWdlIiwiZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlIiwidHlwZSIsIkludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyIsIlVwZGF0ZU1lc3NhZ2UiLCJlZGl0T3duVm9pY2VTdGF0ZSIsInZvaWNlIiwicmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImVkaXRTY2hlZHVsZWRFdmVudCIsImVkaXRSb2xlIiwiZWRpdFJvbGVQb3NpdGlvbnMiLCJlZGl0U3RhZ2VJbnN0YW5jZSIsInRvcGljIiwiZWRpdFVzZXJWb2ljZVN0YXRlIiwiZWRpdFdlYmhvb2siLCJlZGl0V2ViaG9va01lc3NhZ2UiLCJlZGl0V2ViaG9va1dpdGhUb2tlbiIsImVkaXRXZWxjb21lU2NyZWVuIiwid2VsY29tZSIsImVkaXRXaWRnZXRTZXR0aW5ncyIsIndpZGdldCIsImV4ZWN1dGVXZWJob29rIiwiZm9sbG93QW5ub3VuY2VtZW50Iiwic291cmNlQ2hhbm5lbElkIiwidGFyZ2V0Q2hhbm5lbElkIiwiZm9sbG93Iiwid2ViaG9va0NoYW5uZWxJZCIsImdldEFjdGl2ZVRocmVhZHMiLCJhY3RpdmUiLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uIiwiYWNjZXNzVG9rZW4iLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsImdldEFwcGxpY2F0aW9uSW5mbyIsIm9hdXRoMiIsImFwcGxpY2F0aW9uIiwiZWRpdEFwcGxpY2F0aW9uSW5mbyIsImdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8iLCJjdXJyZW50QXV0aG9yaXphdGlvbiIsImV4Y2hhbmdlVG9rZW4iLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImJhc2ljQ3JlZGVudGlhbHMiLCJCdWZmZXIiLCJmcm9tIiwiZ3JhbnRUeXBlIiwic2NvcGUiLCJ0b2tlbkV4Y2hhbmdlIiwicmV2b2tlVG9rZW4iLCJ0b2tlblJldm9rZSIsImdldEF1ZGl0TG9nIiwiYXVkaXRsb2dzIiwiZ2V0QXV0b21vZFJ1bGUiLCJnZXRBdXRvbW9kUnVsZXMiLCJnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMiLCJyZWdpb25zIiwiZ2V0QmFuIiwibWVtYmVycyIsImJhbiIsImdldEJhbnMiLCJiYW5zIiwiZ2V0Q2hhbm5lbCIsImdldENoYW5uZWxJbnZpdGVzIiwiZ2V0Q2hhbm5lbHMiLCJnZXRDaGFubmVsV2ViaG9va3MiLCJnZXREbUNoYW5uZWwiLCJkbSIsInJlY2lwaWVudElkIiwiZ2V0R3JvdXBEbUNoYW5uZWwiLCJnZXRFbW9qaSIsImVtb2ppSWQiLCJnZXRBcHBsaWNhdGlvbkVtb2ppIiwiZ2V0RW1vamlzIiwiZ2V0QXBwbGljYXRpb25FbW9qaXMiLCJnZXRGb2xsb3d1cE1lc3NhZ2UiLCJnZXRHYXRld2F5Qm90IiwiZ2F0ZXdheUJvdCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZCIsImNvdW50cyIsImdldEd1aWxkcyIsIm1ha2VSZXF1ZXN0T3B0aW9ucyIsInVzZXJHdWlsZHMiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkUHJldmlldyIsInByZXZpZXciLCJnZXRHdWlsZFRlbXBsYXRlIiwiZ2V0R3VpbGRUZW1wbGF0ZXMiLCJnZXRHdWlsZFdlYmhvb2tzIiwiZ2V0SW50ZWdyYXRpb25zIiwiaW50ZWdyYXRpb25zIiwiZ2V0SW52aXRlIiwiZ2V0SW52aXRlcyIsImdldE1lc3NhZ2UiLCJnZXRNZXNzYWdlcyIsImdldFN0aWNrZXJQYWNrIiwic3RpY2tlclBhY2tJZCIsInN0aWNrZXJQYWNrIiwiZ2V0U3RpY2tlclBhY2tzIiwic3RpY2tlclBhY2tzIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0UGlubmVkTWVzc2FnZXMiLCJwaW5zIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsInByaXZhdGUiLCJnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzIiwiam9pbmVkIiwiZ2V0UHJ1bmVDb3VudCIsInBydW5lIiwiZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzIiwicHVibGljIiwiZ2V0Um9sZXMiLCJnZXRSb2xlIiwiZ2V0U2NoZWR1bGVkRXZlbnQiLCJ3aXRoVXNlckNvdW50IiwiZ2V0U2NoZWR1bGVkRXZlbnRzIiwiZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyIsInVzZXJzIiwiZ2V0U2Vzc2lvbkluZm8iLCJnZXRTdGFnZUluc3RhbmNlIiwiZ2V0T3duVm9pY2VTdGF0ZSIsImdldFVzZXJWb2ljZVN0YXRlIiwiZ2V0U3RpY2tlciIsImdldEd1aWxkU3RpY2tlciIsImdldEd1aWxkU3RpY2tlcnMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0VXNlciIsImdldEN1cnJlbnRVc2VyIiwiZ2V0VXNlckNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbnMiLCJnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsInJvbGVDb25uZWN0aW9ucyIsImdldFZhbml0eVVybCIsInZhbml0eSIsImdldFZvaWNlUmVnaW9ucyIsImdldFdlYmhvb2siLCJnZXRXZWJob29rTWVzc2FnZSIsImdldFdlYmhvb2tXaXRoVG9rZW4iLCJnZXRXZWxjb21lU2NyZWVuIiwiZ2V0V2lkZ2V0Iiwid2lkZ2V0SnNvbiIsImdldFdpZGdldFNldHRpbmdzIiwiam9pblRocmVhZCIsIm1lIiwibGVhdmVHdWlsZCIsImxlYXZlIiwibGVhdmVUaHJlYWQiLCJwdWJsaXNoTWVzc2FnZSIsImNyb3NzcG9zdCIsInJlbW92ZVJvbGUiLCJyZW1vdmVUaHJlYWRNZW1iZXIiLCJyZW1vdmVEbVJlY2lwaWVudCIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsImludGVyYWN0aW9uSWQiLCJwYXJhbXMiLCJjYWxsYmFjayIsInNlbmRNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRoTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJnZXRQb2xsQW5zd2VyVm90ZXJzIiwiYW5zd2VySWQiLCJwb2xscyIsInZvdGVzIiwiZW5kUG9sbCIsImV4cGlyZSIsInN5bmNHdWlsZFRlbXBsYXRlIiwiYmFuTWVtYmVyIiwiYnVsa0Jhbk1lbWJlcnMiLCJidWxrQmFuIiwiZWRpdEJvdE1lbWJlciIsImVkaXRNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXRDdXJyZW50TWVtYmVyIiwiY3VycmVudE1lbWJlciIsImdldE1lbWJlcnMiLCJnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJpbnN0YW5jZUlkIiwiYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwia2lja01lbWJlciIsInBpbk1lc3NhZ2UiLCJwaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJnZXRFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsImxpc3RTdWJzY3JpcHRpb25zIiwic2t1SWQiLCJzdWJzY3JpcHRpb25zIiwiZ2V0U3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJzdWJzY3JpcHRpb24iLCJzZW5kU291bmRib2FyZFNvdW5kIiwic291bmRib2FyZCIsInNlbmRTb3VuZCIsImxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcyIsImxpc3REZWZhdWx0IiwibGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyIsImd1aWxkU291bmRzIiwiZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQiLCJzb3VuZElkIiwiZ3VpbGRTb3VuZCIsImNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQiLCJkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsInByZWZlclNuYWtlQ2FzZSIsImVuYWJsZWQiLCJjYW1lbGl6ZXIiLCJ4IiwiSHR0cFJlc3BvbnNlQ29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUE0RWFBLHVCQUF1QjtlQUF2QkE7O0lBRkFDLGVBQWU7ZUFBZkE7O0lBREFDLG1CQUFtQjtlQUFuQkE7O0lBT0FDLHdCQUF3QjtlQUF4QkE7O0lBREFDLHdCQUF3QjtlQUF4QkE7O0lBRUFDLHVCQUF1QjtlQUF2QkE7O0lBSkFDLDJCQUEyQjtlQUEzQkE7O0lBQ0FDLDZCQUE2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
1586
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YSxcbiAgdHlwZSBEaXNjb3JkQXVkaXRMb2csXG4gIHR5cGUgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZSxcbiAgdHlwZSBEaXNjb3JkQmFuLFxuICB0eXBlIERpc2NvcmRCdWxrQmFuLFxuICB0eXBlIERpc2NvcmRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRDb25uZWN0aW9uLFxuICB0eXBlIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgdHlwZSBEaXNjb3JkRW1vamksXG4gIHR5cGUgRGlzY29yZEVudGl0bGVtZW50LFxuICB0eXBlIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIHR5cGUgRGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEdldEdhdGV3YXlCb3QsXG4gIHR5cGUgRGlzY29yZEd1aWxkLFxuICB0eXBlIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICB0eXBlIERpc2NvcmRHdWlsZE9uYm9hcmRpbmcsXG4gIHR5cGUgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3MsXG4gIHR5cGUgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIHR5cGUgRGlzY29yZEludGVncmF0aW9uLFxuICB0eXBlIERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEludml0ZSxcbiAgdHlwZSBEaXNjb3JkSW52aXRlTWV0YWRhdGEsXG4gIHR5cGUgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzLFxuICB0eXBlIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICB0eXBlIERpc2NvcmRNZW1iZXIsXG4gIHR5cGUgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICB0eXBlIERpc2NvcmRNZXNzYWdlLFxuICB0eXBlIERpc2NvcmRQcnVuZWRDb3VudCxcbiAgdHlwZSBEaXNjb3JkUm9sZSxcbiAgdHlwZSBEaXNjb3JkU2NoZWR1bGVkRXZlbnQsXG4gIHR5cGUgRGlzY29yZFNrdSxcbiAgdHlwZSBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICB0eXBlIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICB0eXBlIERpc2NvcmRTdGlja2VyLFxuICB0eXBlIERpc2NvcmRTdGlja2VyUGFjayxcbiAgdHlwZSBEaXNjb3JkU3Vic2NyaXB0aW9uLFxuICB0eXBlIERpc2NvcmRUZW1wbGF0ZSxcbiAgdHlwZSBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRVc2VyLFxuICB0eXBlIERpc2NvcmRWYW5pdHlVcmwsXG4gIHR5cGUgRGlzY29yZFZvaWNlUmVnaW9uLFxuICB0eXBlIERpc2NvcmRWb2ljZVN0YXRlLFxuICB0eXBlIERpc2NvcmRXZWJob29rLFxuICB0eXBlIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMsXG4gIHR5cGUgTWZhTGV2ZWxzLFxuICB0eXBlIE1vZGlmeUd1aWxkVGVtcGxhdGUsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHtcbiAgRElTQ09SREVOT19WRVJTSU9OLFxuICBjYWxjdWxhdGVCaXRzLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBjYW1lbGl6ZSxcbiAgZGVsYXksXG4gIGdldEJvdElkRnJvbVRva2VuLFxuICBoYXNQcm9wZXJ0eSxcbiAgbG9nZ2VyLFxuICBwcm9jZXNzUmVhY3Rpb25TdHJpbmcsXG4gIHVybFRvQmFzZTY0LFxufSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMuanMnXG5pbXBvcnQgdHlwZSB7IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBNYWtlUmVxdWVzdE9wdGlvbnMsIFJlc3RNYW5hZ2VyLCBTZW5kUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG5cbiAgICByb3V0ZXM6IGNyZWF0ZVJvdXRlcygpLFxuXG4gICAgY3JlYXRlQmFzZUhlYWRlcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHtESVNDT1JERU5PX1ZFUlNJT059KWAsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwsIGlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApXG5cbiAgICAgIGNvbnN0IGdsb2JhbCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoJ2dsb2JhbCcpXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JhbCAmJiBub3cgPCBnbG9iYWwucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0lkZW50aWZpZXIgPSBgQmVhcmVyICR7bmV3VG9rZW59YFxuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnF1ZXVlcy5kZWxldGUoa2V5KVxuICAgICAgICBxdWV1ZS5pZGVudGlmaWVyID0gbmV3SWRlbnRpZmllclxuXG4gICAgICAgIGNvbnN0IG5ld0tleSA9IGAke25ld0lkZW50aWZpZXJ9JHtxdWV1ZS51cmx9YFxuICAgICAgICBjb25zdCBuZXdRdWV1ZSA9IHJlc3QucXVldWVzLmdldChuZXdLZXkpXG5cbiAgICAgICAgLy8gTWVyZ2UgdGhlIHF1ZXVlc1xuICAgICAgICBpZiAobmV3UXVldWUpIHtcbiAgICAgICAgICBuZXdRdWV1ZS53YWl0aW5nLnVuc2hpZnQoLi4ucXVldWUud2FpdGluZylcbiAgICAgICAgICBuZXdRdWV1ZS5wZW5kaW5nLnVuc2hpZnQoLi4ucXVldWUucGVuZGluZylcblxuICAgICAgICAgIHF1ZXVlLndhaXRpbmcgPSBbXVxuICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBbXVxuXG4gICAgICAgICAgcXVldWUuY2xlYW51cCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KG5ld0tleSwgcXVldWUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCByYXRlbGltaXRQYXRoXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGgudXJsfWAsIHJhdGVsaW1pdFBhdGgpXG5cbiAgICAgICAgaWYgKHJhdGVsaW1pdFBhdGguYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLmJ1Y2tldElkfWAsIHJhdGVsaW1pdFBhdGgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9iajogYW55KTogYW55IHtcbiAgICAgIGlmIChvYmogPT09IG51bGwpIHJldHVybiBudWxsXG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KGl0ZW0pKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3T2JqOiBhbnkgPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldXG5cbiAgICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gc25ha2VfY2FzZSB3ZSBjYW4gYXNzdW1lIGl0IGlzIGFscmVhZHkgaW4gdGhlIGRpc2NvcmQgZm9ybWF0LlxuICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTb21lIGZhbHN5IHZhbHVlcyBzaG91bGQgYmUgYWxsb3dlZCBsaWtlIG51bGwgb3IgMFxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICBjYXNlICdwZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2FsbG93JzpcbiAgICAgICAgICAgICAgY2FzZSAnZGVueSc6XG4gICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRNZW1iZXJQZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICduYW1lTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLm5hbWVfbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPYmpbY2FtZWxUb1NuYWtlQ2FzZShrZXkpXSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09ialxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHJldHVybiBvYmoudG9TdHJpbmcoKVxuXG4gICAgICByZXR1cm4gb2JqXG4gICAgfSxcblxuICAgIGNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuY3JlYXRlQmFzZUhlYWRlcnMoKVxuXG4gICAgICBpZiAob3B0aW9ucz8udW5hdXRob3JpemVkICE9PSB0cnVlKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIC8vIElGIEEgUkVBU09OIElTIFBST1ZJREVEIEVOQ09ERSBJVCBJTiBIRUFERVJTXG4gICAgICBpZiAob3B0aW9ucz8ucmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVhZGVyc1tBVURJVF9MT0dfUkVBU09OX0hFQURFUl0gPSBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucz8ucmVhc29uKVxuICAgICAgfVxuXG4gICAgICBsZXQgYm9keTogc3RyaW5nIHwgRm9ybURhdGEgfCB1bmRlZmluZWRcblxuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgd2UgbmVlZCB0byBhZGQgc3BlY2lmaWMgY2hlY2sgZm9yIEdFVCBtZXRob2RcbiAgICAgIC8vIFNpbmNlIEdFVCBkb2VzIG5vdCBhbGxvdyBib2RpZXNcblxuICAgICAgLy8gSGF2ZSB0byBjaGVjayBmb3IgYXR0YWNobWVudHMgZmlyc3QsIHNpbmNlIGJvZHkgdGhlbiBoYXMgdG8gYmUgc2VuZCBpbiBhIGRpZmZlcmVudCB3YXkuXG4gICAgICBpZiAob3B0aW9ucz8uZmlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmZpbGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoYGZpbGVzWyR7aX1dYCwgb3B0aW9ucy5maWxlc1tpXS5ibG9iLCBvcHRpb25zLmZpbGVzW2ldLm5hbWUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYXZlIHRvIHVzZSBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQgb3IgZWxzZSBKU09OLnN0cmluZ2lmeSBtYXkgdGhyb3cgYW4gZXJyb3IgZm9yIHRoZSBwcmVzZW5jZSBvZiBCaWdJbnQocykgaW4gdGhlIGpzb25cbiAgICAgICAgZm9ybS5hcHBlbmQoJ3BheWxvYWRfanNvbicsIEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHsgLi4ub3B0aW9ucy5ib2R5LCBmaWxlczogdW5kZWZpbmVkIH0pKSlcblxuICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIGJvZHkgPSBmb3JtXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgJiYgb3B0aW9ucy5oZWFkZXJzICYmIG9wdGlvbnMuaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICAgIC8vIE9BdXRoMiBib2R5IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IGZvcm1Cb2R5OiBzdHJpbmdbXSA9IFtdXG5cbiAgICAgICAgY29uc3QgZGlzY29yZEJvZHkgPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpXG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGRpc2NvcmRCb2R5KSB7XG4gICAgICAgICAgZm9ybUJvZHkucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc2NvcmRCb2R5W3Byb3BdKX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgYm9keSA9IGZvcm1Cb2R5LmpvaW4oJyYnKVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgYm9keSA9IG9wdGlvbnMuYm9keVxuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSlcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGBhcHBsaWNhdGlvbi9qc29uYFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNPTUVUSU1FUyBTUEVDSUFMIEhFQURFUlMgKEUuRy4gQ1VTVE9NIEFVVEhPUklaQVRJT04pIE5FRUQgVE8gQkUgVVNFRFxuICAgICAgaWYgKG9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBvcHRpb25zLmhlYWRlcnMpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBmb3Igb2YgbG9vcC4gJHtcbiAgICAgICAgLy8gICB2YWx1ZS5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgICAvLyB9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgLy8gSWYgdGhlIHRpbWUgaGFzIG5vdCByZWFjaGVkIGNhbmNlbFxuICAgICAgICBpZiAodmFsdWUucmVzZXRUaW1lc3RhbXAgPiBub3cpIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdCBpcyBvdmVyLCBkZWxldGUgdGhlIHJhdGUgbGltaXRlclxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZGVsZXRlKGtleSlcbiAgICAgICAgLy8gSWYgaXQgd2FzIGdsb2JhbCwgYWxzbyBtYXJrIHRoZSBnbG9iYWwgdmFsdWUgYXMgZmFsc2VcbiAgICAgICAgaWYgKGtleSA9PT0gJ2dsb2JhbCcpIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIEFMTCBQQVRIUyBBUkUgQ0xFQVJFRCBDQU4gQ0FOQ0VMIE9VVCFcbiAgICAgIGlmIChyZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSB0cnVlXG4gICAgICAgIC8vIFJFQ0hFQ0sgSU4gMSBTRUNPTkRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZygnW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBzZXRUaW1lb3V0LicpXG4gICAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICAgIH0sIDEwMDApXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgICBwcm9jZXNzSGVhZGVycyh1cmwsIGhlYWRlcnMsIGlkZW50aWZpZXIpIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUilcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUilcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUilcblxuICAgICAgLy8gSWYgd2UgZGlkbid0IHJlY2VpdmVkIHRoZSBpZGVudGlmaWVyLCBmYWxsYmFjayB0byB0aGUgYm90IHRva2VuXG4gICAgICBpZGVudGlmaWVyID8/PSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIHJlc3QucXVldWVzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTQVZFIFRIRSBCVUNLRVQgQVMgTElNSVRFRCBTSU5DRSBESUZGRVJFTlQgVVJMUyBNQVkgU0hBUkUgQSBCVUNLRVRcbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7YnVja2V0SWR9YCwge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgR0xPQkFMIExJTUlULCBNQVJLIElUIFJBVEUgTElNSVRFRCBHTE9CQUxMWVxuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTnVtYmVyKGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpKSAqIDEwMDBcbiAgICAgICAgY29uc3QgZ2xvYmFsUmVzZXQgPSBEYXRlLm5vdygpICsgcmV0cnlBZnRlclxuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCA9IEdsb2JhbGx5IFJhdGUgTGltaXRlZF0gVVJMOiAke3VybH0gfCBHbG9iYWwgUmVzdDogJHtnbG9iYWxSZXNldH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSB0cnVlXG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICAgIH0sIHJldHJ5QWZ0ZXIpXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoaWRlbnRpZmllciwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJhdGVMaW1pdGVkICYmICFyZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnJvdXRlfWBcbiAgICAgIGNvbnN0IHBheWxvYWQgPSByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucylcblxuICAgICAgY29uc3QgbG9nZ2luZ0hlYWRlcnMgPSB7IC4uLnBheWxvYWQuaGVhZGVycyB9XG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBjb25zdCBhdXRob3JpemF0aW9uU2NoZW1lID0gcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24/LnNwbGl0KCcgJylbMF1cbiAgICAgICAgbG9nZ2luZ0hlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb25TY2hlbWV9IHRva2VuaGVyZWBcbiAgICAgIH1cblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgSHR0cFJlc3BvbnNlQ29kZS5TdWNjZXNzIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwUmVzcG9uc2VDb2RlLkVycm9yKSB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgPT09ICdhcHBsaWNhdGlvbi9qc29uJyA/ICgoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBvYmplY3QpIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpXG5cbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7IG9rOiBmYWxzZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsIGJvZHkgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnN1bWUgdGhlIHJlc3BvbnNlIGJvZHkgdG8gYXZvaWQgbGVha2luZyBtZW1vcnlcbiAgICAgICAgYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYClcbiAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50ID49IHJlc3QubWF4UmV0cnlDb3VudCkge1xuICAgICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHJldHJpZXMuYCwgJ3dpdGggcGF5bG9hZDonLCBwYXlsb2FkKVxuICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgZXJyb3I6ICdUaGUgcmVxdWVzdCB3YXMgcmF0ZSBsaW1pdGVkIGFuZCBpdCBtYXhlZCBvdXQgdGhlIHJldHJpZXMgbGltaXQuJyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgICAgaWYgKHJlc2V0QWZ0ZXIpIGF3YWl0IGRlbGF5KE51bWJlcihyZXNldEFmdGVyKSAqIDEwMDApXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke3JvdXRlfWAsIHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSAocmVzdWx0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gYXdhaXQgcmVzdWx0Lmpzb24oKSA6IGF3YWl0IHJlc3VsdC50ZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgICAgICAgICBlcnJvci5jYXVzZSA9IHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyBhd2FpdCByZXN1bHQuanNvbigpIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcmVxdWVzdEJvZHlPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyAocGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBlcnJvclRleHQ6IHN0cmluZ1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHJlYXNvbi5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgY2FzZSA0MDA6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJUaGUgb3B0aW9ucyB3YXMgaW1wcm9wZXJseSBmb3JtYXR0ZWQsIG9yIHRoZSBzZXJ2ZXIgY291bGRuJ3QgdW5kZXJzdGFuZCBpdC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgd2FzIG1pc3Npbmcgb3IgaW52YWxpZC4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIHRva2VuIHlvdSBwYXNzZWQgZGlkIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gdGhlIHJlc291cmNlLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSByZXNvdXJjZSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGRvZXNuJ3QgZXhpc3QuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwNTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEhUVFAgbWV0aG9kIHVzZWQgaXMgbm90IHZhbGlkIGZvciB0aGUgbG9jYXRpb24gc3BlY2lmaWVkLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIllvdSdyZSBiZWluZyByYXRlbGltaXRlZC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNTAyOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGVyZSB3YXMgbm90IGEgZ2F0ZXdheSBhdmFpbGFibGUgdG8gcHJvY2VzcyB5b3VyIG9wdGlvbnMuIFdhaXQgYSBiaXQgYW5kIHJldHJ5LidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IHJlYXNvbi5zdGF0dXNUZXh0ID8/ICdVbmtub3duIGVycm9yJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFske3JlYXNvbi5zdGF0dXN9XSAke2Vycm9yVGV4dH1gXG5cbiAgICAgICAgICAgIC8vIElmIGRpc2NvcmQgc2VudCB1cyBKU09OLCBpdCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhbiBlcnJvciBtZXNzYWdlIGZyb20gd2hpY2ggd2UgY2FuIGdldCBhbmQgYWRkIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIHRvIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgZnVsbCBib2R5IHdpbGwgYmUgaW4gdGhlIGVycm9yLmNhdXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZWZlcmVuY2UjZXJyb3ItbWVzc2FnZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVhc29uLmJvZHkgPT09ICdvYmplY3QnICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnY29kZScpICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnbWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gYFxcbkRpc2NvcmQgZXJyb3I6IFske3JlYXNvbi5ib2R5LmNvZGV9XSAke3JlYXNvbi5ib2R5Lm1lc3NhZ2V9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5jYXVzZSA9IHJlYXNvblxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXBwbGljYXRpb25FbW9qaShib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmFsbCgpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUsIGJvZHkpIHtcbiAgICAgIGlmIChib2R5Lmljb24pIHtcbiAgICAgICAgYm9keS5pY29uID0gYXdhaXQgdXJsVG9CYXNlNjQoYm9keS5pY29uKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgIGZvcm0uYXBwZW5kKCdmaWxlJywgb3B0aW9ucy5maWxlLmJsb2IsIG9wdGlvbnMuZmlsZS5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBvcHRpb25zLmRlc2NyaXB0aW9uKVxuICAgICAgZm9ybS5hcHBlbmQoJ3RhZ3MnLCBvcHRpb25zLnRhZ3MpXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgeyBib2R5OiBmb3JtLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVGb3J1bVRocmVhZChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9ydW0oY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIGJvZHkgPSB7fSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRJbnZpdGU+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUm9sZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTdGFnZUluc3RhbmNlKGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2VzKCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVdlYmhvb2soY2hhbm5lbElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICBhdmF0YXI6IG9wdGlvbnMuYXZhdGFyID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5hdmF0YXIpIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRW1vamkoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXBwbGljYXRpb25FbW9qaShpZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzKGNoYW5uZWxJZCwgbWVzc2FnZUlkcywgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMuYnVsayhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBtZXNzYWdlczogbWVzc2FnZUlkcy5zbGljZSgwLCAxMDApLm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU93blJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zQWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zRW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmVtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVXNlclJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCB1c2VySWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLnVzZXIoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rKHdlYmhvb2tJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBwZXJtaXNzaW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90UHJvZmlsZShvcHRpb25zKSB7XG4gICAgICBjb25zdCBhdmF0YXIgPSBvcHRpb25zPy5ib3RBdmF0YXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RBdmF0YXJVUkwpIDogb3B0aW9ucz8uYm90QXZhdGFyVVJMXG4gICAgICBjb25zdCBiYW5uZXIgPSBvcHRpb25zPy5ib3RCYW5uZXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RCYW5uZXJVUkwpIDogb3B0aW9ucz8uYm90QmFubmVyVVJMXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZT8udHJpbSgpLFxuICAgICAgICAgIGF2YXRhcixcbiAgICAgICAgICBiYW5uZXIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBib2R5LmlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0RW1vamkoZ3VpbGRJZCwgaWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25FbW9qaShpZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRNZmFMZXZlbChndWlsZElkOiBCaWdTdHJpbmcsIG1mYUxldmVsOiBNZmFMZXZlbHMsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmd1aWxkcy5tZmEoZ3VpbGRJZCksIHsgYm9keTogeyBsZXZlbDogbWZhTGV2ZWwgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm9yaWdpbmFsKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB0eXBlOiBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMuVXBkYXRlTWVzc2FnZSxcbiAgICAgICAgICBkYXRhOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcmVxdWVzdFRvU3BlYWtUaW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHRvcGljLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IGJvZHk6IHsgdG9waWMgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2xsb3dBbm5vdW5jZW1lbnQoc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgd2ViaG9va0NoYW5uZWxJZDogdGFyZ2V0Q2hhbm5lbElkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBY3RpdmVUaHJlYWRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWN0aXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5hcHBsaWNhdGlvbigpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25JbmZvKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb24oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmN1cnJlbnRBdXRob3JpemF0aW9uKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGNoYW5nZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9XG5cbiAgICAgIGlmIChib2R5LmdyYW50VHlwZSA9PT0gJ2NsaWVudF9jcmVkZW50aWFscycpIHtcbiAgICAgICAgcmVzdE9wdGlvbnMuYm9keS5zY29wZSA9IGJvZHkuc2NvcGUuam9pbignICcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2U+KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlbkV4Y2hhbmdlKCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXZva2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5SZXZva2UoKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1ZGl0TG9nKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXVkaXRMb2c+KHJlc3Qucm91dGVzLmd1aWxkcy5hdWRpdGxvZ3MoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLnJlZ2lvbnMoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW5zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHk6IHsgcmVjaXBpZW50SWQ6IHVzZXJJZCB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3JvdXBEbUNoYW5uZWwoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamkoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppKGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaXMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZEVtb2ppW10gfT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZChndWlsZElkLCBvcHRpb25zID0geyBjb3VudHM6IHRydWUgfSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQsIG9wdGlvbnMuY291bnRzKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRzKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBtYWtlUmVxdWVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyB8IHVuZGVmaW5lZCA9IHRva2VuXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8UGFydGlhbDxEaXNjb3JkR3VpbGQ+W10+KHJlc3Qucm91dGVzLmd1aWxkcy51c2VyR3VpbGRzKG9wdGlvbnMpLCBtYWtlUmVxdWVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkUHJldmlldyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkUHJldmlldz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnByZXZpZXcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlYmhvb2tzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnRlZ3JhdGlvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnRlZ3JhdGlvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrPihyZXN0LnJvdXRlcy5zdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2tzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFja1tdPihyZXN0LnJvdXRlcy5zdGlja2VyUGFja3MoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBpbm5lZE1lc3NhZ2VzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBydW5lQ291bnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQcnVuZWRDb3VudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnBydW5lKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlKGd1aWxkSWQsIHJvbGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50cyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50W10+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudFVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxBcnJheTx7IHVzZXI6IERpc2NvcmRVc2VyOyBtZW1iZXI/OiBEaXNjb3JkTWVtYmVyIH0+PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLnVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTZXNzaW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEdhdGV3YXlCb3QoKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VTdGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VTdGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXIoc3RpY2tlcklkOiBCaWdTdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuc3RpY2tlcihzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcj4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5nZXRVc2VyKGNoYW5uZWxJZCwgdXNlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVycyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVtYmVycyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlcihpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy51c2VyKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudFVzZXIodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMuY3VycmVudFVzZXIoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJDb25uZWN0aW9ucyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDb25uZWN0aW9uW10+KHJlc3Qucm91dGVzLm9hdXRoMi5jb25uZWN0aW9ucygpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZhbml0eVVybChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZhbml0eVVybD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZhbml0eShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Vm9pY2VSZWdpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJlZ2lvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2sod2ViaG9va0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2VsY29tZVNjcmVlbihndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldEpzb24oZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldFNldHRpbmdzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgam9pblRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVHdWlsZChndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubGVhdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwdWJsaXNoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY3Jvc3Nwb3N0KGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVEbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kRm9sbG93dXBNZXNzYWdlKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2socmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRJbnRlcmFjdGlvblJlc3BvbnNlKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zLCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8dm9pZCB8IERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMuY2FsbGJhY2soaW50ZXJhY3Rpb25JZCwgdG9rZW4sIHBhcmFtcyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZGF0YT8uZmlsZXMsXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWxsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBvbGxBbnN3ZXJWb3RlcnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBvbGxzLnZvdGVzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGVuZFBvbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBvbGxzLmV4cGlyZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHN5bmNHdWlsZFRlbXBsYXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBiYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0PHZvaWQ+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBidWxrQmFuTWVtYmVycyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEJ1bGtCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJ1bGtCYW4oZ3VpbGRJZCksIHsgYm9keTogb3B0aW9ucywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RNZW1iZXIoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5ib3QoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50TWVtYmVyKGd1aWxkSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5jdXJyZW50TWVtYmVyKGd1aWxkSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZShhcHBsaWNhdGlvbklkLCBpbnN0YW5jZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFjdGl2aXR5SW5zdGFuY2U+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZShhcHBsaWNhdGlvbklkLCBpbnN0YW5jZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMga2lja01lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkT25ib2FyZGluZyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRJbmNpZGVudHNEYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U2t1cyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNrdVtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc2t1cyhhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uW10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb24+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFNvdW5kYm9hcmRTb3VuZChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLnNlbmRTb3VuZChjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmxpc3REZWZhdWx0KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRTb3VuZGJvYXJkU291bmRbXSB9PihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiRElTQ09SRF9BUElfVVJMIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIlJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiIsIlJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiIsIlJBVEVfTElNSVRfTElNSVRfSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJnZXRCb3RJZEZyb21Ub2tlbiIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJsb2dnZXIiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJJbmZpbml0eSIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInZlcnNpb24iLCJyb3V0ZXMiLCJjcmVhdGVSb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsIkRJU0NPUkRFTk9fVkVSU0lPTiIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImlkZW50aWZpZXIiLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsIkRhdGUiLCJyZXNldFRpbWVzdGFtcCIsInVwZGF0ZVRva2VuUXVldWVzIiwib2xkVG9rZW4iLCJuZXdUb2tlbiIsIkVycm9yIiwiaGVhZGVycyIsInVuZGVmaW5lZCIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXdJZGVudGlmaWVyIiwia2V5IiwicXVldWUiLCJlbnRyaWVzIiwiZGVsZXRlIiwibmV3S2V5IiwibmV3UXVldWUiLCJ3YWl0aW5nIiwidW5zaGlmdCIsInBlbmRpbmciLCJjbGVhbnVwIiwic2V0IiwicmF0ZWxpbWl0UGF0aCIsImJ1Y2tldElkIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiY2FsY3VsYXRlQml0cyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsImNhbWVsVG9TbmFrZUNhc2UiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmlsZXMiLCJmb3JtIiwiRm9ybURhdGEiLCJpIiwibGVuZ3RoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJsaW1pdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJyb3V0ZSIsInBheWxvYWQiLCJyZXF1ZXN0Qm9keU9wdGlvbnMiLCJsb2dnaW5nSGVhZGVycyIsImF1dGhvcml6YXRpb25TY2hlbWUiLCJzcGxpdCIsImRlYnVnIiwicmVzcG9uc2UiLCJjYXRjaCIsImVycm9yIiwicmVqZWN0Iiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwic2ltcGxpZnlVcmwiLCJqc29uIiwidGV4dCIsImFycmF5QnVmZmVyIiwicmV0cnlDb3VudCIsInJlc2V0QWZ0ZXIiLCJkZWxheSIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJwYXJ0cyIsInNlY29uZExhc3RQYXJ0Iiwic3BsaWNlIiwicHJvY2Vzc1JlcXVlc3QiLCJyZXF1ZXN0IiwicnVuVGhyb3VnaFF1ZXVlIiwicXVldWVJZGVudGlmaWVyIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsIlF1ZXVlIiwicmVzdWx0IiwiY2F1c2UiLCJQcm9taXNlIiwiZGF0YSIsInBhcnNlIiwiZXJyb3JUZXh0IiwibWVzc2FnZSIsImhhc1Byb3BlcnR5IiwiY29kZSIsImNhbWVsaXplIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJjaGFubmVsSWQiLCJtZXNzYWdlSWQiLCJyZWFjdGlvbiIsInByb2Nlc3NSZWFjdGlvblN0cmluZyIsImNoYW5uZWxzIiwicmVhY3Rpb25zIiwiYm90IiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFsbCIsImFkZFJvbGUiLCJndWlsZElkIiwidXNlcklkIiwicm9sZUlkIiwiZ3VpbGRzIiwicm9sZXMiLCJtZW1iZXIiLCJhZGRUaHJlYWRNZW1iZXIiLCJ0aHJlYWRzIiwidXNlciIsImFkZERtUmVjaXBpZW50IiwiZG1SZWNpcGllbnQiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImF1dG9tb2QiLCJydWxlcyIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImVtb2ppcyIsImNyZWF0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppcyIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsInJlc3RPcHRpb25zIiwiYmVhcmVyVG9rZW4iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNyZWF0ZUd1aWxkIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImljb24iLCJ1cmxUb0Jhc2U2NCIsInRlbXBsYXRlcyIsImNyZWF0ZUd1aWxkU3RpY2tlciIsImZpbGUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJzdGlja2VycyIsImNyZWF0ZUd1aWxkVGVtcGxhdGUiLCJjcmVhdGVGb3J1bVRocmVhZCIsImZvcnVtIiwiY3JlYXRlSW52aXRlIiwiaW52aXRlcyIsImNyZWF0ZVJvbGUiLCJjcmVhdGVTY2hlZHVsZWRFdmVudCIsImV2ZW50cyIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZXMiLCJjcmVhdGVXZWJob29rIiwid2ViaG9va3MiLCJhdmF0YXIiLCJkZWxldGVBdXRvbW9kUnVsZSIsInJ1bGVJZCIsInJ1bGUiLCJkZWxldGVDaGFubmVsIiwiY2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJvdmVyd3JpdGVJZCIsIm92ZXJ3cml0ZSIsImRlbGV0ZUVtb2ppIiwiaWQiLCJlbW9qaSIsImRlbGV0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwicmVzcG9uc2VzIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY29tbWFuZElkIiwiY29tbWFuZCIsImRlbGV0ZUd1aWxkIiwiZ3VpbGQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsIm9uZSIsImRlbGV0ZUd1aWxkU3RpY2tlciIsInN0aWNrZXJJZCIsInN0aWNrZXIiLCJkZWxldGVHdWlsZFRlbXBsYXRlIiwiZGVsZXRlSW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb24iLCJkZWxldGVJbnZpdGUiLCJpbnZpdGVDb2RlIiwiaW52aXRlIiwiZGVsZXRlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2VzIiwibWVzc2FnZUlkcyIsImJ1bGsiLCJtZXNzYWdlcyIsInNsaWNlIiwiZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwib3JpZ2luYWwiLCJkZWxldGVPd25SZWFjdGlvbiIsImRlbGV0ZVJlYWN0aW9uc0FsbCIsImRlbGV0ZVJlYWN0aW9uc0Vtb2ppIiwiZGVsZXRlUm9sZSIsImRlbGV0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRJZCIsImV2ZW50IiwiZGVsZXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlIiwiZGVsZXRlVXNlclJlYWN0aW9uIiwiZGVsZXRlV2ViaG9vayIsIndlYmhvb2tJZCIsImRlbGV0ZVdlYmhvb2tNZXNzYWdlIiwiZGVsZXRlV2ViaG9va1dpdGhUb2tlbiIsIndlYmhvb2siLCJlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb24iLCJlZGl0QXV0b21vZFJ1bGUiLCJlZGl0Qm90UHJvZmlsZSIsImJvdEF2YXRhclVSTCIsImJhbm5lciIsImJvdEJhbm5lclVSTCIsImN1cnJlbnRVc2VyIiwidXNlcm5hbWUiLCJ0cmltIiwiZWRpdENoYW5uZWwiLCJlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMiLCJlZGl0Q2hhbm5lbFBvc2l0aW9ucyIsImVkaXRFbW9qaSIsImVkaXRBcHBsaWNhdGlvbkVtb2ppIiwiZWRpdEZvbGxvd3VwTWVzc2FnZSIsImVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGQiLCJlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGRNZmFMZXZlbCIsIm1mYUxldmVsIiwibWZhIiwibGV2ZWwiLCJlZGl0R3VpbGRTdGlja2VyIiwiZWRpdEd1aWxkVGVtcGxhdGUiLCJlZGl0TWVzc2FnZSIsImVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSIsInR5cGUiLCJJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMiLCJVcGRhdGVNZXNzYWdlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiQnVmZmVyIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0Um9sZSIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldE93blZvaWNlU3RhdGUiLCJnZXRVc2VyVm9pY2VTdGF0ZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VXNlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwicGFyYW1zIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwiZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwiaW5zdGFuY2VJZCIsImFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwicGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyIsImluY2lkZW50QWN0aW9ucyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJnZXRFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsImxpc3RTdWJzY3JpcHRpb25zIiwic2t1SWQiLCJzdWJzY3JpcHRpb25zIiwiZ2V0U3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJzdWJzY3JpcHRpb24iLCJzZW5kU291bmRib2FyZFNvdW5kIiwic291bmRib2FyZCIsInNlbmRTb3VuZCIsImxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcyIsImxpc3REZWZhdWx0IiwibGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyIsImd1aWxkU291bmRzIiwiZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQiLCJzb3VuZElkIiwiZ3VpbGRTb3VuZCIsImNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQiLCJkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImxpc3RBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyIsImFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YSIsInVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQStFYUEsdUJBQXVCO2VBQXZCQTs7SUFGQUMsZUFBZTtlQUFmQTs7SUFEQUMsbUJBQW1CO2VBQW5CQTs7SUFPQUMsd0JBQXdCO2VBQXhCQTs7SUFEQUMsd0JBQXdCO2VBQXhCQTs7SUFFQUMsdUJBQXVCO2VBQXZCQTs7SUFKQUMsMkJBQTJCO2VBQTNCQTs7SUFDQUMsNkJBQTZCO2VBQTdCQTs7SUFJQUMsdUJBQXVCO2VBQXZCQTs7SUFFR0MsaUJBQWlCO2VBQWpCQTs7OzRCQXZGTzt1QkEwRGhCO3VCQVlBOytCQUNvQzt1QkFDckI7d0JBQ087QUFHdEIsTUFBTVAsc0JBQXNCO0FBQzVCLE1BQU1ELGtCQUFrQjtBQUV4QixNQUFNRCwwQkFBMEI7QUFDaEMsTUFBTU0sOEJBQThCO0FBQ3BDLE1BQU1DLGdDQUFnQztBQUN0QyxNQUFNSCwyQkFBMkI7QUFDakMsTUFBTUQsMkJBQTJCO0FBQ2pDLE1BQU1FLDBCQUEwQjtBQUNoQyxNQUFNRywwQkFBMEI7QUFFaEMsU0FBU0Msa0JBQWtCQyxPQUFpQztJQUNqRSxNQUFNQyxnQkFBZ0JELFFBQVFDLGFBQWEsR0FBR0MsT0FBT0YsUUFBUUMsYUFBYSxJQUFJRSxJQUFBQSx3QkFBaUIsRUFBQ0gsUUFBUUksS0FBSztJQUU3RyxNQUFNQyxVQUFVTCxRQUFRTSxLQUFLLEVBQUVELFdBQVdkO0lBRTFDLE1BQU1nQixPQUFvQjtRQUN4Qk47UUFDQU8sZUFBZVIsUUFBUU0sS0FBSyxFQUFFRTtRQUM5QkMscUJBQXFCVCxRQUFRTSxLQUFLLEVBQUVHLHVCQUF1QjtRQUMzREo7UUFDQUssa0JBQWtCO1FBQ2xCQyxxQkFBcUI7UUFDckJDLGVBQWVDLElBQUFBLHlDQUEwQixFQUFDO1lBQUVDLFFBQVFkLFFBQVFjLE1BQU07UUFBQztRQUNuRUMsV0FBVyxDQUFD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