@discordeno/rest 22.0.1-next.e41b0bc → 22.0.1-next.e8cf59e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/manager.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Buffer } from 'node:buffer';
2
2
  import { inspect } from 'node:util';
3
- import { calculateBits, camelize, camelToSnakeCase, DISCORDENO_VERSION, delay, getBotIdFromToken, hasProperty, logger, processReactionString, snowflakeToTimestamp, urlToBase64 } from '@discordeno/utils';
3
+ import { camelize, camelToSnakeCase, DISCORDENO_VERSION, delay, getBotIdFromToken, hasProperty, logger, processReactionString, snowflakeToTimestamp, urlToBase64 } from '@discordeno/utils';
4
4
  import { createInvalidRequestBucket } from './invalidBucket.js';
5
5
  import { Queue } from './queue.js';
6
6
  import { createRoutes } from './routes.js';
@@ -132,17 +132,8 @@ export function createRestManager(options) {
132
132
  newObj[key] = value;
133
133
  continue;
134
134
  }
135
- // Some falsy values should be allowed like null or 0
136
135
  if (value !== undefined) {
137
136
  switch(key){
138
- case 'permissions':
139
- case 'allow':
140
- case 'deny':
141
- newObj[key] = typeof value === 'string' ? value : calculateBits(value);
142
- continue;
143
- case 'defaultMemberPermissions':
144
- newObj.default_member_permissions = typeof value === 'string' ? value : calculateBits(value);
145
- continue;
146
137
  case 'nameLocalizations':
147
138
  newObj.name_localizations = value;
148
139
  continue;
@@ -237,7 +228,7 @@ export function createRestManager(options) {
237
228
  let rateLimited = false;
238
229
  // GET ALL NECESSARY HEADERS
239
230
  const remaining = headers.get(RATE_LIMIT_REMAINING_HEADER);
240
- const retryAfter = headers.get(RATE_LIMIT_RESET_AFTER_HEADER);
231
+ const retryAfter = headers.get('Retry-After') ?? headers.get(RATE_LIMIT_RESET_AFTER_HEADER);
241
232
  const reset = Date.now() + Number(retryAfter) * 1000;
242
233
  const global = headers.get(RATE_LIMIT_GLOBAL_HEADER);
243
234
  // undefined override null needed for typings
@@ -317,7 +308,7 @@ export function createRestManager(options) {
317
308
  headers: loggingHeaders
318
309
  });
319
310
  const response = await fetch(request).catch(async (error)=>{
320
- rest.logger.error(error);
311
+ rest.logger.debug(`request fetch to ${url} failed.`, error);
321
312
  rest.events.requestError(request, error, {
322
313
  body: options.requestBodyOptions?.body
323
314
  });
@@ -326,10 +317,12 @@ export function createRestManager(options) {
326
317
  options.reject({
327
318
  ok: false,
328
319
  status: 999,
329
- error: 'Possible network or request shape issue occurred. If this is rare, its a network glitch. If it occurs a lot something is wrong.'
320
+ error: 'Possible network or request shape issue occurred. If this is rare, its a network glitch. If it occurs a lot something is wrong.',
321
+ errorObject: error
330
322
  });
331
- throw error;
332
323
  });
324
+ // If response is undefined, the error has been handled in the catch block above
325
+ if (!response) return;
333
326
  rest.logger.debug(`request fetched from ${url} with status ${response.status} & ${response.statusText}`);
334
327
  // Sometimes the Content-Type may be "application/json; charset=utf-8", for this reason, we need to check the start of the header
335
328
  const body = await (response.headers.get('Content-Type')?.startsWith('application/json') ? response.json() : response.text()).catch(()=>null);
@@ -367,7 +360,7 @@ export function createRestManager(options) {
367
360
  return;
368
361
  }
369
362
  options.retryCount += 1;
370
- const resetAfter = response.headers.get(RATE_LIMIT_RESET_AFTER_HEADER);
363
+ const resetAfter = response.headers.get('retry-after');
371
364
  if (resetAfter) await delay(Number(resetAfter) * 1000);
372
365
  return await options.retryRequest?.(options);
373
366
  }
@@ -429,7 +422,7 @@ export function createRestManager(options) {
429
422
  await rest.sendRequest(request);
430
423
  return;
431
424
  }
432
- // If we the request has a token, use it
425
+ // If the request has a token, use it
433
426
  // Else fallback to prefix with the bot token
434
427
  const queueIdentifier = request.requestBodyOptions?.headers?.authorization ?? `Bot ${rest.token}`;
435
428
  const queue = rest.queues.get(`${queueIdentifier}${url}`);
@@ -488,7 +481,7 @@ export function createRestManager(options) {
488
481
  await rest.processRequest(payload);
489
482
  },
490
483
  resolve: (data)=>{
491
- resolve(data.status !== 204 ? typeof data.body === 'string' ? JSON.parse(data.body) : data.body : undefined);
484
+ resolve(data.status !== 204 ? data.body : undefined);
492
485
  },
493
486
  reject: (reason)=>{
494
487
  let errorText;
@@ -519,7 +512,7 @@ export function createRestManager(options) {
519
512
  }
520
513
  error.message = `[${reason.status}] ${errorText}`;
521
514
  // 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
522
- // https://discord.com/developers/docs/reference#error-messages
515
+ // https://docs.discord.com/developers/reference#error-messages
523
516
  if (typeof reason.body === 'object' && hasProperty(reason.body, 'code') && hasProperty(reason.body, 'message')) {
524
517
  error.message += `\nDiscord error: [${reason.body.code}] ${reason.body.message}`;
525
518
  }
@@ -645,8 +638,21 @@ export function createRestManager(options) {
645
638
  });
646
639
  },
647
640
  async createInvite (channelId, body = {}, reason) {
641
+ if (!body.targetUsersFile) {
642
+ return await rest.post(rest.routes.channels.invites(channelId), {
643
+ body,
644
+ reason
645
+ });
646
+ }
647
+ // When we have to upload a file, we need to use FormData, and all other fields need to be part of the payload_json field.
648
+ const form = new FormData();
649
+ form.append('payload_json', JSON.stringify(rest.changeToDiscordFormat({
650
+ ...body,
651
+ targetUsersFile: undefined
652
+ })));
653
+ form.append('target_users_file', body.targetUsersFile);
648
654
  return await rest.post(rest.routes.channels.invites(channelId), {
649
- body,
655
+ body: form,
650
656
  reason
651
657
  });
652
658
  },
@@ -732,6 +738,19 @@ export function createRestManager(options) {
732
738
  reason
733
739
  });
734
740
  },
741
+ async getTargetUsers (inviteCode) {
742
+ return await rest.get(rest.routes.guilds.inviteTargetUsers(inviteCode));
743
+ },
744
+ async updateTargetUsers (inviteCode, targetUsersFile) {
745
+ const form = new FormData();
746
+ form.append('target_users_file', targetUsersFile);
747
+ await rest.put(rest.routes.guilds.inviteTargetUsers(inviteCode), {
748
+ body: form
749
+ });
750
+ },
751
+ async getTargetUsersJobStatus (inviteCode) {
752
+ return await rest.get(rest.routes.guilds.inviteTargetUsersJobStatus(inviteCode));
753
+ },
735
754
  async deleteMessage (channelId, messageId, reason) {
736
755
  await rest.delete(rest.routes.channels.message(channelId, messageId), {
737
756
  reason
@@ -1623,4 +1642,4 @@ var HttpResponseCode = /*#__PURE__*/ function(HttpResponseCode) {
1623
1642
  return HttpResponseCode;
1624
1643
  }(HttpResponseCode || {});
1625
1644
 
1626
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJztcbmltcG9ydCB7IHR5cGUgSW5zcGVjdE9wdGlvbnMsIGluc3BlY3QgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHR5cGUge1xuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZSxcbiAgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEsXG4gIERpc2NvcmRBdWRpdExvZyxcbiAgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZSxcbiAgRGlzY29yZEJhbixcbiAgRGlzY29yZEJ1bGtCYW4sXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkQ29ubmVjdGlvbixcbiAgRGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uLFxuICBEaXNjb3JkRW1vamksXG4gIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgRGlzY29yZEZvbGxvd2VkQ2hhbm5lbCxcbiAgRGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2UsXG4gIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICBEaXNjb3JkR3VpbGQsXG4gIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW5jaWRlbnRzRGF0YSxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlLFxuICBEaXNjb3JkSW52aXRlLFxuICBEaXNjb3JkSW52aXRlTWV0YWRhdGEsXG4gIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIERpc2NvcmRMb2JieSxcbiAgRGlzY29yZExvYmJ5TWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIERpc2NvcmRNZXNzYWdlLFxuICBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIERpc2NvcmRSb2xlLFxuICBEaXNjb3JkU2NoZWR1bGVkRXZlbnQsXG4gIERpc2NvcmRTa3UsXG4gIERpc2NvcmRTb3VuZGJvYXJkU291bmQsXG4gIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICBEaXNjb3JkU3RpY2tlcixcbiAgRGlzY29yZFN0aWNrZXJQYWNrLFxuICBEaXNjb3JkU3Vic2NyaXB0aW9uLFxuICBEaXNjb3JkVGVtcGxhdGUsXG4gIERpc2NvcmRUaHJlYWRNZW1iZXIsXG4gIERpc2NvcmRVc2VyLFxuICBEaXNjb3JkVmFuaXR5VXJsLFxuICBEaXNjb3JkVm9pY2VSZWdpb24sXG4gIERpc2NvcmRWb2ljZVN0YXRlLFxuICBEaXNjb3JkV2ViaG9vayxcbiAgRGlzY29yZFdlbGNvbWVTY3JlZW4sXG4gIE1vZGlmeUd1aWxkVGVtcGxhdGUsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsaXplLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBESVNDT1JERU5PX1ZFUlNJT04sXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaGFzUHJvcGVydHksXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICBzbm93Zmxha2VUb1RpbWVzdGFtcCxcbiAgdXJsVG9CYXNlNjQsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJztcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBNYWtlUmVxdWVzdE9wdGlvbnMsIFJlc3RNYW5hZ2VyLCBTZW5kUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1ZFUlNJT04gPSAxMDtcbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9VUkwgPSAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknO1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJztcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIgPSAneC1yYXRlbGltaXQtcmVtYWluaW5nJztcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcic7XG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCc7XG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWJ1Y2tldCc7XG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9MSU1JVF9IRUFERVIgPSAneC1yYXRlbGltaXQtbGltaXQnO1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyk6IFJlc3RNYW5hZ2VyIHtcbiAgY29uc3QgYXBwbGljYXRpb25JZCA9IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbik7XG5cbiAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMucHJveHk/LmJhc2VVcmwgPz8gRElTQ09SRF9BUElfVVJMO1xuICAvLyBEaXNjb3JkIGVycm9yIGNhbiBnZXQgbmVzdGVkIGEgbG90LCBzbyB3ZSB1c2UgYSBjdXN0b20gaW5zcGVjdCB0byBjaGFuZ2UgdGhlIGRlcHRoIHRvIEluZmluaXR5XG4gIGNvbnN0IGJhc2VFcnJvclByb3RvdHlwZSA9IHtcbiAgICBbaW5zcGVjdC5jdXN0b21dKF9kZXB0aDogbnVtYmVyLCBvcHRpb25zOiBJbnNwZWN0T3B0aW9ucywgX2luc3BlY3Q6IHR5cGVvZiBpbnNwZWN0KSB7XG4gICAgICByZXR1cm4gX2luc3BlY3QodGhpcywge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBkZXB0aDogSW5maW5pdHksXG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbGwgaW5zcGVjdCBvbiBvdXJzZWxmLCB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlIGNhbGxzIHRvIHRoZSBpbnNwZWN0LmN1c3RvbSBzeW1ib2wgb3IgZWxzZSBpdCB3aWxsIGNhdXNlIGFuIGluZmluaXRlIGxvb3AuXG4gICAgICAgIGN1c3RvbUluc3BlY3Q6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCByZXN0OiBSZXN0TWFuYWdlciA9IHtcbiAgICBhcHBsaWNhdGlvbklkLFxuICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb24sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlcjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbkhlYWRlciA/PyAnYXV0aG9yaXphdGlvbicsXG4gICAgYmFzZVVybCxcbiAgICBkZWxldGVRdWV1ZURlbGF5OiA2MDAwMCxcbiAgICBnbG9iYWxseVJhdGVMaW1pdGVkOiBmYWxzZSxcbiAgICBpbnZhbGlkQnVja2V0OiBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCh7IGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgfSksXG4gICAgaXNQcm94aWVkOiAhYmFzZVVybC5zdGFydHNXaXRoKERJU0NPUkRfQVBJX1VSTCksXG4gICAgdXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludDogb3B0aW9ucy5wcm94eT8udXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBESVNDT1JEX0FQSV9WRVJTSU9OLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuICAgIGV2ZW50czoge1xuICAgICAgcmVxdWVzdDogKCkgPT4ge30sXG4gICAgICByZXNwb25zZTogKCkgPT4ge30sXG4gICAgICByZXF1ZXN0RXJyb3I6ICgpID0+IHt9LFxuICAgICAgLi4ub3B0aW9ucy5ldmVudHMsXG4gICAgfSxcblxuICAgIHJvdXRlczogY3JlYXRlUm91dGVzKCksXG5cbiAgICBjcmVhdGVCYXNlSGVhZGVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke0RJU0NPUkRFTk9fVkVSU0lPTn0pYCxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwsIGlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApO1xuXG4gICAgICBjb25zdCBnbG9iYWwgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KCdnbG9iYWwnKTtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3c7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWwgJiYgbm93IDwgZ2xvYmFsLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwucmVzZXRUaW1lc3RhbXAgLSBub3c7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gO1xuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWU7XG5cbiAgICAgICAgcmVzdC5xdWV1ZXMuZGVsZXRlKGtleSk7XG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyO1xuXG4gICAgICAgIGNvbnN0IG5ld0tleSA9IGAke25ld0lkZW50aWZpZXJ9JHtxdWV1ZS51cmx9YDtcbiAgICAgICAgY29uc3QgbmV3UXVldWUgPSByZXN0LnF1ZXVlcy5nZXQobmV3S2V5KTtcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKTtcbiAgICAgICAgICBuZXdRdWV1ZS5wZW5kaW5nLnVuc2hpZnQoLi4ucXVldWUucGVuZGluZyk7XG5cbiAgICAgICAgICBxdWV1ZS53YWl0aW5nID0gW107XG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdO1xuXG4gICAgICAgICAgcXVldWUuY2xlYW51cCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3QucXVldWVzLnNldChuZXdLZXksIHF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGgudXJsfWAsIHJhdGVsaW1pdFBhdGgpO1xuXG4gICAgICAgIGlmIChyYXRlbGltaXRQYXRoLmJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC5idWNrZXRJZH1gLCByYXRlbGltaXRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KGl0ZW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG5cbiAgICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gc25ha2VfY2FzZSB3ZSBjYW4gYXNzdW1lIGl0IGlzIGFscmVhZHkgaW4gdGhlIGRpc2NvcmQgZm9ybWF0LlxuICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlICdkZWZhdWx0TWVtYmVyUGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlICduYW1lTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLm5hbWVfbG9jYWxpemF0aW9ucyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T2JqW2NhbWVsVG9TbmFrZUNhc2Uoa2V5KV0gPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHJldHVybiBvYmoudG9TdHJpbmcoKTtcblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpO1xuXG4gICAgICBpZiAob3B0aW9ucz8udW5hdXRob3JpemVkICE9PSB0cnVlKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gO1xuXG4gICAgICAvLyBJRiBBIFJFQVNPTiBJUyBQUk9WSURFRCBFTkNPREUgSVQgSU4gSEVBREVSU1xuICAgICAgaWYgKG9wdGlvbnM/LnJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlYWRlcnNbQVVESVRfTE9HX1JFQVNPTl9IRUFERVJdID0gZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnM/LnJlYXNvbik7XG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZDtcblxuICAgICAgLy8gSGF2ZSB0byBjaGVjayBmb3IgYXR0YWNobWVudHMgZmlyc3QsIHNpbmNlIGJvZHkgdGhlbiBoYXMgdG8gYmUgc2VuZCBpbiBhIGRpZmZlcmVudCB3YXkuXG4gICAgICBpZiAob3B0aW9ucz8uZmlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5maWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGBmaWxlc1ske2l9XWAsIG9wdGlvbnMuZmlsZXNbaV0uYmxvYiwgb3B0aW9ucy5maWxlc1tpXS5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKTtcblxuICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIGJvZHkgPSBmb3JtO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICYmIG9wdGlvbnMuaGVhZGVycyAmJiBvcHRpb25zLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgICAvLyBPQXV0aDIgYm9keSBoYW5kbGluZ1xuICAgICAgICBjb25zdCBmb3JtQm9keTogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGRpc2NvcmRCb2R5KSB7XG4gICAgICAgICAgZm9ybUJvZHkucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc2NvcmRCb2R5W3Byb3BdKX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkgPSBmb3JtQm9keS5qb2luKCcmJyk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5O1xuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSk7XG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBgYXBwbGljYXRpb24vanNvbmA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCkge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWU7XG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdCBpcyBvdmVyLCBkZWxldGUgdGhlIHJhdGUgbGltaXRlclxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZGVsZXRlKGtleSk7XG4gICAgICAgIC8vIElmIGl0IHdhcyBnbG9iYWwsIGFsc28gbWFyayB0aGUgZ2xvYmFsIHZhbHVlIGFzIGZhbHNlXG4gICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnKSByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSB0cnVlO1xuICAgICAgICAvLyBSRUNIRUNLIElOIDEgU0VDT05EXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoJ1tSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgc2V0VGltZW91dC4nKVxuICAgICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgICBwcm9jZXNzSGVhZGVycyh1cmwsIGhlYWRlcnMsIGlkZW50aWZpZXIpIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlO1xuXG4gICAgICAvLyBHRVQgQUxMIE5FQ0VTU0FSWSBIRUFERVJTXG4gICAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIpO1xuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKTtcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDA7XG4gICAgICBjb25zdCBnbG9iYWwgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIpO1xuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUik7XG5cbiAgICAgIC8vIElmIHdlIGRpZG4ndCByZWNlaXZlZCB0aGUgaWRlbnRpZmllciwgZmFsbGJhY2sgdG8gdGhlIGJvdCB0b2tlblxuICAgICAgaWRlbnRpZmllciA/Pz0gYEJvdCAke3Jlc3QudG9rZW59YDtcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZTtcblxuICAgICAgICAvLyBTQVZFIFRIRSBVUkwgQVMgTElNSVRFRCwgSU1QT1JUQU5UIEZPUiBORVcgUkVRVUVTVFMgQlkgVVNFUiBXSVRIT1VUIEJVQ0tFVFxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgR0xPQkFMIExJTUlULCBNQVJLIElUIFJBVEUgTElNSVRFRCBHTE9CQUxMWVxuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTnVtYmVyKGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpKSAqIDEwMDA7XG4gICAgICAgIGNvbnN0IGdsb2JhbFJlc2V0ID0gRGF0ZS5ub3coKSArIHJldHJ5QWZ0ZXI7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWU7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSwgcmV0cnlBZnRlcik7XG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGlkZW50aWZpZXIsIHtcbiAgICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7b3B0aW9ucy5yb3V0ZX1gO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKTtcblxuICAgICAgY29uc3QgbG9nZ2luZ0hlYWRlcnMgPSB7IC4uLnBheWxvYWQuaGVhZGVycyB9O1xuXG4gICAgICBpZiAocGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXphdGlvblNjaGVtZSA9IHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uPy5zcGxpdCgnICcpWzBdO1xuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwgcGF5bG9hZCk7XG4gICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0KHJlcXVlc3QsIHtcbiAgICAgICAgYm9keTogb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnM/LmJvZHksXG4gICAgICB9KTtcblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgICAgIHJlc3QuZXZlbnRzLnJlcXVlc3RFcnJvcihyZXF1ZXN0LCBlcnJvciwgeyBib2R5OiBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucz8uYm9keSB9KTtcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFzIGNvbXBsZXRlZFxuICAgICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdCg5OTksIGZhbHNlKTtcbiAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IDk5OSxcbiAgICAgICAgICBlcnJvcjogJ1Bvc3NpYmxlIG5ldHdvcmsgb3IgcmVxdWVzdCBzaGFwZSBpc3N1ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyByYXJlLCBpdHMgYSBuZXR3b3JrIGdsaXRjaC4gSWYgaXQgb2NjdXJzIGEgbG90IHNvbWV0aGluZyBpcyB3cm9uZy4nLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuXG4gICAgICAvLyBTb21ldGltZXMgdGhlIENvbnRlbnQtVHlwZSBtYXkgYmUgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsIGZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlclxuICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSA/IHJlc3BvbnNlLmpzb24oKSA6IHJlc3BvbnNlLnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbCk7XG5cbiAgICAgIHJlc3QuZXZlbnRzLnJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlLCB7XG4gICAgICAgIHJlcXVlc3RCb2R5OiBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucz8uYm9keSxcbiAgICAgICAgcmVzcG9uc2VCb2R5OiBib2R5LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhcyBjb21wbGV0ZWRcbiAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuaGVhZGVycy5nZXQoUkFURV9MSU1JVF9TQ09QRV9IRUFERVIpID09PSAnc2hhcmVkJyk7XG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pO1xuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZDtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA8IEh0dHBSZXNwb25zZUNvZGUuU3VjY2VzcyB8fCByZXNwb25zZS5zdGF0dXMgPj0gSHR0cFJlc3BvbnNlQ29kZS5FcnJvcikge1xuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZmFpbGVkLmApO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LCBib2R5IH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYCk7XG4gICAgICAgIC8vIFRvbyBtYW55IGF0dGVtcHRzLCBnZXQgcmlkIG9mIHJlcXVlc3QgZnJvbSBxdWV1ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucmV0cnlDb3VudCA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZCk7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5yZXRyeUNvdW50ICs9IDE7XG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKTtcbiAgICAgICAgaWYgKHJlc2V0QWZ0ZXIpIGF3YWl0IGRlbGF5KE51bWJlcihyZXNldEFmdGVyKSAqIDEwMDApO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCBvcHRpb25zLnJldHJ5UmVxdWVzdD8uKG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBhIHJlc3BvbnNlIHdpdGggbm8gY29udGVudFxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYm9keSB9KTtcbiAgICB9LFxuXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGNvbnN0IHJvdXRlSW5mb3JtYXRpb25LZXk6IHN0cmluZ1tdID0gW21ldGhvZF07XG5cbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1JbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgICBjb25zdCByb3V0ZSA9IHF1ZXJ5UGFyYW1JbmRleCAhPT0gLTEgPyB1cmwuc2xpY2UoMCwgcXVlcnlQYXJhbUluZGV4KSA6IHVybDtcblxuICAgICAgLy8gU2luY2UgdGhlIHVybHMgc3RhcnQgd2l0aCAvIHRoZSBmaXJzdCBwYXJ0IHdpbGwgYWx3YXlzIGJlIGVtcHR5XG4gICAgICBjb25zdCBzcGxpdHRlZFJvdXRlID0gcm91dGUuc3BsaXQoJy8nKTtcblxuICAgICAgLy8gMSkgU3RyaXAgdGhlIG1pbm9yIHBhcmFtc1xuICAgICAgLy8gICAgVGhlIG9ubHkgbWFqb3JzIGFyZSBjaGFubmVscywgZ3VpbGRzLCB3ZWJob29rcyBhbmQgd2ViaG9va3Mgd2l0aCB0aGVpciB0b2tlblxuXG4gICAgICBjb25zdCBzdHJpcHBlZFJvdXRlID0gc3BsaXR0ZWRSb3V0ZVxuICAgICAgICAubWFwKChwYXJ0LCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgICAvLyBXaGlsZSBwYXJzZUludCB3aWxsIHRydW5jYXRlIHRoZSBzbm93Zmxha2UgaWQsIGl0IHdpbGwgc3RpbGwgdGVsbCB1cyBpZiBpdCBpcyBhIG51bWJlclxuICAgICAgICAgIGNvbnN0IGlzTnVtYmVyID0gTnVtYmVyLmlzRmluaXRlKHBhcnNlSW50KHBhcnQsIDEwKSk7XG5cbiAgICAgICAgICBpZiAoIWlzTnVtYmVyKSB7XG4gICAgICAgICAgICAvLyBSZWFjdGlvbnMgZW1vamkgbmVlZCB0byBiZSBzdHJpcHBlZCBhcyBpdCBpcyBhIG1pbm9yIHBhcmFtZXRlclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDEgJiYgYXJyYXlbaW5kZXggLSAxXSA9PT0gJ3JlYWN0aW9ucycpIHJldHVybiAneCc7XG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgb24gYSB3ZWJob29rIG9yIGlmIGl0IGlzIHBhcnQgb2YgdGhlIHJvdXRlLCBrZWVwIGl0IGFzIGl0IGlzIGEgbWFqb3IgcGFyYW1ldGVyXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgb24gYSBjaGFubmVsIGlkLCBhIGd1aWxkIGlkIG9yIGEgd2ViaG9vayBpZFxuICAgICAgICAgIGNvbnN0IGlzTWFqb3IgPSBpbmRleCA+PSAxICYmIChhcnJheVtpbmRleCAtIDFdID09PSAnY2hhbm5lbHMnIHx8IGFycmF5W2luZGV4IC0gMV0gPT09ICdndWlsZHMnIHx8IGFycmF5W2luZGV4IC0gMV0gPT09ICd3ZWJob29rcycpO1xuXG4gICAgICAgICAgaWYgKGlzTWFqb3IpIHJldHVybiBwYXJ0O1xuXG4gICAgICAgICAgcmV0dXJuICd4JztcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJy8nKTtcblxuICAgICAgcm91dGVJbmZvcm1hdGlvbktleS5wdXNoKHN0cmlwcGVkUm91dGUpO1xuXG4gICAgICAvLyAyKSBBY2NvdW50IGZvciBleGNlcHRpb25zXG4gICAgICAvLyAgICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkL2Rpc2NvcmQtYXBpLWRvY3MvaXNzdWVzLzEwOTJcbiAgICAgIC8vICAgIC0gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTI5NVxuXG4gICAgICAvLyBUaGUgMiBleGNlcHRpb25zIGFyZSBmb3IgbWVzc2FnZSBkZWxldGUsIHNvIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgYXJlIGluIHRoYXQgcm91dGVcbiAgICAgIGlmIChtZXRob2QgPT09ICdERUxFVEUnICYmIHNwbGl0dGVkUm91dGUubGVuZ3RoID09PSA1ICYmIHNwbGl0dGVkUm91dGVbMV0gPT09ICdjaGFubmVscycgJiYgc3RyaXBwZWRSb3V0ZS5lbmRzV2l0aCgnL21lc3NhZ2VzL3gnKSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlSWQgPSBzcGxpdHRlZFJvdXRlWzRdO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBzbm93Zmxha2VUb1RpbWVzdGFtcChtZXNzYWdlSWQpO1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkL2Rpc2NvcmQtYXBpLWRvY3MvaXNzdWVzLzEwOTJcbiAgICAgICAgaWYgKG5vdyAtIHRpbWVzdGFtcCA8IDEwXzAwMCkge1xuICAgICAgICAgIHJvdXRlSW5mb3JtYXRpb25LZXkucHVzaCgnbWVzc2FnZS1kZWxldGUtMTBzJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZC9kaXNjb3JkLWFwaS1kb2NzL2lzc3Vlcy8xMjk1XG4gICAgICAgIC8vIDIgd2Vla3MgPSAyICogNyAqIDI0ICogNjAgKiA2MCAqIDEwMDAgPSAxMjA5NjAwMDAwXG4gICAgICAgIGlmIChub3cgLSB0aW1lc3RhbXAgPiAxMjA5NjAwMDAwKSB7XG4gICAgICAgICAgcm91dGVJbmZvcm1hdGlvbktleS5wdXNoKCdtZXNzYWdlLWRlbGV0ZS0ydycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByb3V0ZUluZm9ybWF0aW9uS2V5LmpvaW4oJzonKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3Qucm91dGUsIHJlcXVlc3QubWV0aG9kKTtcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgdGhlIHJlcXVlc3QgaGFzIGEgdG9rZW4sIHVzZSBpdFxuICAgICAgLy8gRWxzZSBmYWxsYmFjayB0byBwcmVmaXggd2l0aCB0aGUgYm90IHRva2VuXG4gICAgICBjb25zdCBxdWV1ZUlkZW50aWZpZXIgPSByZXF1ZXN0LnJlcXVlc3RCb2R5T3B0aW9ucz8uaGVhZGVycz8uYXV0aG9yaXphdGlvbiA/PyBgQm90ICR7cmVzdC50b2tlbn1gO1xuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YCk7XG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ1JFQVRFUyBBIE5FVyBRVUVVRVxuICAgICAgICBjb25zdCBidWNrZXRRdWV1ZSA9IG5ldyBRdWV1ZShyZXN0LCB7IHVybCwgZGVsZXRlUXVldWVEZWxheTogcmVzdC5kZWxldGVRdWV1ZURlbGF5LCBpZGVudGlmaWVyOiBxdWV1ZUlkZW50aWZpZXIgfSk7XG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKTtcblxuICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBxdWV1ZVxuICAgICAgICBidWNrZXRRdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbWFrZVJlcXVlc3QobWV0aG9kLCByb3V0ZSwgb3B0aW9ucykge1xuICAgICAgLy8gVGhpcyBlcnJvciBuZWVkcyB0byBiZSBjcmVhdGVkIGhlcmUgYmVjYXVzZSBvZiBob3cgc3RhY2sgdHJhY2VzIGdldCBjYWxjdWxhdGVkXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9O1xuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA/Pz0ge307XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtyb3V0ZX1gLCByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykpO1xuICAgICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0KHJlcXVlc3QsIHtcbiAgICAgICAgICBib2R5OiBvcHRpb25zPy5ib2R5LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KTtcblxuICAgICAgICAvLyBTb21ldGltZXMgdGhlIENvbnRlbnQtVHlwZSBtYXkgYmUgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsIGZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgKHJlc3VsdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSA/IHJlc3VsdC5qc29uKCkgOiByZXN1bHQudGV4dCgpKS5jYXRjaCgoKSA9PiBudWxsKTtcblxuICAgICAgICByZXN0LmV2ZW50cy5yZXNwb25zZShyZXF1ZXN0LCByZXN1bHQsIHtcbiAgICAgICAgICByZXF1ZXN0Qm9keTogb3B0aW9ucz8uYm9keSxcbiAgICAgICAgICByZXNwb25zZUJvZHk6IGJvZHksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgZXJyb3IuY2F1c2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYmFzZUVycm9yUHJvdG90eXBlKSwge1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgIT09IDIwNCA/ICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keSkgOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcmVxdWVzdEJvZHlPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyAocGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/ICh0eXBlb2YgZGF0YS5ib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YS5ib2R5KSA6IGRhdGEuYm9keSkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgZXJyb3JUZXh0OiBzdHJpbmc7XG5cbiAgICAgICAgICAgIHN3aXRjaCAocmVhc29uLnN0YXR1cykge1xuICAgICAgICAgICAgICBjYXNlIDQwMDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSBvcHRpb25zIHdhcyBpbXByb3Blcmx5IGZvcm1hdHRlZCwgb3IgdGhlIHNlcnZlciBjb3VsZG4ndCB1bmRlcnN0YW5kIGl0LlwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHdhcyBtaXNzaW5nIG9yIGludmFsaWQuJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIHRva2VuIHlvdSBwYXNzZWQgZGlkIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gdGhlIHJlc291cmNlLic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiVGhlIHJlc291cmNlIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgZG9lc24ndCBleGlzdC5cIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0MDU6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBIVFRQIG1ldGhvZCB1c2VkIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGxvY2F0aW9uIHNwZWNpZmllZC4nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIllvdSdyZSBiZWluZyByYXRlbGltaXRlZC5cIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA1MDI6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZXJlIHdhcyBub3QgYSBnYXRld2F5IGF2YWlsYWJsZSB0byBwcm9jZXNzIHlvdXIgb3B0aW9ucy4gV2FpdCBhIGJpdCBhbmQgcmV0cnkuJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSByZWFzb24uc3RhdHVzVGV4dCA/PyAnVW5rbm93biBlcnJvcic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgWyR7cmVhc29uLnN0YXR1c31dICR7ZXJyb3JUZXh0fWA7XG5cbiAgICAgICAgICAgIC8vIElmIGRpc2NvcmQgc2VudCB1cyBKU09OLCBpdCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhbiBlcnJvciBtZXNzYWdlIGZyb20gd2hpY2ggd2UgY2FuIGdldCBhbmQgYWRkIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIHRvIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgZnVsbCBib2R5IHdpbGwgYmUgaW4gdGhlIGVycm9yLmNhdXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZWZlcmVuY2UjZXJyb3ItbWVzc2FnZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVhc29uLmJvZHkgPT09ICdvYmplY3QnICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnY29kZScpICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnbWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gYFxcbkRpc2NvcmQgZXJyb3I6IFske3JlYXNvbi5ib2R5LmNvZGV9XSAke3JlYXNvbi5ib2R5Lm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IuY2F1c2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYmFzZUVycm9yUHJvdG90eXBlKSwgcmVhc29uKTtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+O1xuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+O1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+O1xuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+O1xuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKTtcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbik7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSwgeyBib2R5IH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBdXRvbW9kUnVsZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUFwcGxpY2F0aW9uRW1vamkoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCksIHsgYm9keSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfTtcblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWU7XG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH07XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlO1xuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBmb3JtLmFwcGVuZCgnZmlsZScsIG9wdGlvbnMuZmlsZS5ibG9iLCBvcHRpb25zLmZpbGUubmFtZSk7XG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSk7XG4gICAgICBmb3JtLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBvcHRpb25zLmRlc2NyaXB0aW9uKTtcbiAgICAgIGZvcm0uYXBwZW5kKCd0YWdzJywgb3B0aW9ucy50YWdzKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRm9ydW1UaHJlYWQoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvcnVtKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMsIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRSb2xlTWVtYmVyQ291bnRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyQ291bnRzKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUm9sZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVdlYmhvb2soY2hhbm5lbElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICBhdmF0YXI6IG9wdGlvbnMuYXZhdGFyID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5hdmF0YXIpIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnZpdGUoaW52aXRlQ29kZSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzKGNoYW5uZWxJZCwgbWVzc2FnZUlkcywgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMuYnVsayhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBtZXNzYWdlczogbWVzc2FnZUlkcy5zbGljZSgwLCAxMDApLm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbik7XG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0FsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmFsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKTtcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmVtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSb2xlKGd1aWxkSWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVVzZXJSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgdXNlcklkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pO1xuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rKHdlYmhvb2tJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBwZXJtaXNzaW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkw7XG4gICAgICBjb25zdCBiYW5uZXIgPSBvcHRpb25zPy5ib3RCYW5uZXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RCYW5uZXJVUkwpIDogb3B0aW9ucz8uYm90QmFubmVyVVJMO1xuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMuY3VycmVudFVzZXIoKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWU/LnRyaW0oKSxcbiAgICAgICAgICBhdmF0YXIsXG4gICAgICAgICAgYmFubmVyLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBib2R5LmlkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUG9zaXRpb25zKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHkgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25FbW9qaShpZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpLCB7IGJvZHkgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIGJvZHk6IE1vZGlmeUd1aWxkVGVtcGxhdGUpOiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpLCB7IGJvZHkgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcmVxdWVzdFRvU3BlYWtUaW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCB0b3BpYywgcmVhc29uPzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyBib2R5OiB7IHRvcGljIH0sIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwgeyBib2R5OiBvcHRpb25zIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdpZGdldFNldHRpbmdzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmb2xsb3dBbm5vdW5jZW1lbnQoc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgd2ViaG9va0NoYW5uZWxJZDogdGFyZ2V0Q2hhbm5lbElkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fTtcblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWU7XG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge307XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlO1xuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuYXBwbGljYXRpb24oKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmN1cnJlbnRBdXRob3JpemF0aW9uKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhjaGFuZ2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApO1xuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChib2R5LmdyYW50VHlwZSA9PT0gJ2NsaWVudF9jcmVkZW50aWFscycpIHtcbiAgICAgICAgcmVzdE9wdGlvbnMuYm9keS5zY29wZSA9IGJvZHkuc2NvcGUuam9pbignICcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBY2Nlc3NUb2tlblJlc3BvbnNlPihyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5FeGNoYW5nZSgpLCByZXN0T3B0aW9ucyk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YCk7XG5cbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5SZXZva2UoKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdWRpdExvZyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1ZGl0TG9nPihyZXN0LnJvdXRlcy5ndWlsZHMuYXVkaXRsb2dzKGd1aWxkSWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5yZWdpb25zKCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW5zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbnMoZ3VpbGRJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoaWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsV2ViaG9va3MoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRJZDogdXNlcklkIH0sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3JvdXBEbUNoYW5uZWwoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamkoZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGVtb2ppSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamlzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRFbW9qaVtdIH0+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQsIG9wdGlvbnM/LndpdGhMb2NhbGl6YXRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRzKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBtYWtlUmVxdWVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyB8IHVuZGVmaW5lZCA9IHRva2VuXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PFBhcnRpYWw8RGlzY29yZEd1aWxkPltdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIG9wdGlvbnM/LndpdGhMb2NhbGl6YXRpb25zKSxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkUHJldmlldyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkUHJldmlldz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnByZXZpZXcoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlYmhvb2tzKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVzKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrPihyZXN0LnJvdXRlcy5zdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2tzKCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxQaW5zKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VQaW5zKGNoYW5uZWxJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50cyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50W10+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2F0ZXdheUJvdCgpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3duVm9pY2VTdGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgdXNlcklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXIoc3RpY2tlcklkOiBCaWdTdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuc3RpY2tlcihzdGlja2VySWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcj4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5nZXRVc2VyKGNoYW5uZWxJZCwgdXNlcklkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlcihpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy51c2VyKGlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2sod2ViaG9va0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2VsY29tZVNjcmVlbihndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgam9pblRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBwdWJsaXNoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY3Jvc3Nwb3N0KGNoYW5uZWxJZCwgbWVzc2FnZUlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVEbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx2b2lkIHwgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5jYWxsYmFjayhpbnRlcmFjdGlvbklkLCB0b2tlbiwgcGFyYW1zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcyB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBvbGxBbnN3ZXJWb3RlcnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBvbGxzLnZvdGVzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBiYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0PHZvaWQ+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRJbmNpZGVudHNEYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHVuYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMudHlwaW5nKGNoYW5uZWxJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfTtcblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWU7XG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfTtcblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWU7XG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBhZGRHdWlsZE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RFbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudFtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTa3VzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2t1W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5za3VzKGFwcGxpY2F0aW9uSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uW10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kU291bmRib2FyZFNvdW5kKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuc2VuZFNvdW5kKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmxpc3REZWZhdWx0KCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkU291bmRib2FyZFNvdW5kW10gfT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlTG9iYnkob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmNyZWF0ZSgpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TG9iYnkobG9iYnlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlMb2JieShsb2JieUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTG9iYnkobG9iYnlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkTWVtYmVyVG9Mb2JieShsb2JieUlkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkTG9iYnlNZW1iZXI+KHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlTWVtYmVyRnJvbUxvYmJ5KGxvYmJ5SWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVMb2JieShsb2JieUlkLCBiZWFyZXJUb2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmxvYmJ5LmxlYXZlKGxvYmJ5SWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGxpbmtDaGFubmVsVG9Mb2JieShsb2JieUlkLCBiZWFyZXJUb2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5saW5rKGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHVubGlua0NoYW5uZWxUb0xvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxpbmsobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgcHJlZmVyU25ha2VDYXNlKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgIGNvbnN0IGNhbWVsaXplciA9IGVuYWJsZWQgPyAoeDogYW55KSA9PiB4IDogY2FtZWxpemU7XG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpO1xuICAgICAgfTtcblxuICAgICAgcmVzdC5wb3N0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIG9wdGlvbnMpKTtcbiAgICAgIH07XG5cbiAgICAgIHJlc3QuZGVsZXRlID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSk7XG4gICAgICB9O1xuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSk7XG4gICAgICB9O1xuXG4gICAgICByZXN0LnB1dCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIG9wdGlvbnMpKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiByZXN0O1xuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIHJlc3Q7XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJCdWZmZXIiLCJpbnNwZWN0IiwiY2FsY3VsYXRlQml0cyIsImNhbWVsaXplIiwiY2FtZWxUb1NuYWtlQ2FzZSIsIkRJU0NPUkRFTk9fVkVSU0lPTiIsImRlbGF5IiwiZ2V0Qm90SWRGcm9tVG9rZW4iLCJoYXNQcm9wZXJ0eSIsImxvZ2dlciIsInByb2Nlc3NSZWFjdGlvblN0cmluZyIsInNub3dmbGFrZVRvVGltZXN0YW1wIiwidXJsVG9CYXNlNjQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsIlF1ZXVlIiwiY3JlYXRlUm91dGVzIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIkRJU0NPUkRfQVBJX1VSTCIsIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfU0NPUEVfSEVBREVSIiwiY3JlYXRlUmVzdE1hbmFnZXIiLCJvcHRpb25zIiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwiYmFzZUVycm9yUHJvdG90eXBlIiwiY3VzdG9tIiwiX2RlcHRoIiwiX2luc3BlY3QiLCJkZXB0aCIsIkluZmluaXR5IiwiY3VzdG9tSW5zcGVjdCIsInJlc3QiLCJhdXRob3JpemF0aW9uIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsImRlbGV0ZVF1ZXVlRGVsYXkiLCJnbG9iYWxseVJhdGVMaW1pdGVkIiwiaW52YWxpZEJ1Y2tldCIsImlzUHJveGllZCIsInN0YXJ0c1dpdGgiLCJ1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50IiwibWF4UmV0cnlDb3VudCIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInZlcnNpb24iLCJldmVudHMiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJyZXF1ZXN0RXJyb3IiLCJyb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImlkZW50aWZpZXIiLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsIkRhdGUiLCJyZXNldFRpbWVzdGFtcCIsInVwZGF0ZVRva2VuUXVldWVzIiwib2xkVG9rZW4iLCJuZXdUb2tlbiIsIkVycm9yIiwiaGVhZGVycyIsInVuZGVmaW5lZCIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXdJZGVudGlmaWVyIiwia2V5IiwicXVldWUiLCJlbnRyaWVzIiwiZGVsZXRlIiwibmV3S2V5IiwibmV3UXVldWUiLCJ3YWl0aW5nIiwidW5zaGlmdCIsInBlbmRpbmciLCJjbGVhbnVwIiwic2V0IiwicmF0ZWxpbWl0UGF0aCIsImJ1Y2tldElkIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMiLCJuYW1lX2xvY2FsaXphdGlvbnMiLCJkZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zIiwidG9TdHJpbmciLCJjcmVhdGVSZXF1ZXN0Qm9keSIsInVuYXV0aG9yaXplZCIsInJlYXNvbiIsImVuY29kZVVSSUNvbXBvbmVudCIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiaSIsImxlbmd0aCIsImFwcGVuZCIsImJsb2IiLCJuYW1lIiwiZm9ybUJvZHkiLCJkaXNjb3JkQm9keSIsInByb3AiLCJwdXNoIiwiam9pbiIsImFzc2lnbiIsInByb2Nlc3NSYXRlTGltaXRlZFBhdGhzIiwic2l6ZSIsInNldFRpbWVvdXQiLCJwcm9jZXNzSGVhZGVycyIsInJhdGVMaW1pdGVkIiwicmVtYWluaW5nIiwicmV0cnlBZnRlciIsInJlc2V0IiwiTnVtYmVyIiwibGltaXQiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaW50ZXJ2YWwiLCJtYXgiLCJnbG9iYWxSZXNldCIsInNlbmRSZXF1ZXN0Iiwicm91dGUiLCJwYXlsb2FkIiwicmVxdWVzdEJvZHlPcHRpb25zIiwibG9nZ2luZ0hlYWRlcnMiLCJhdXRob3JpemF0aW9uU2NoZW1lIiwic3BsaXQiLCJSZXF1ZXN0IiwiZGVidWciLCJjYXRjaCIsImVycm9yIiwicmVqZWN0Iiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwianNvbiIsInRleHQiLCJyZXF1ZXN0Qm9keSIsInJlc3BvbnNlQm9keSIsInNpbXBsaWZ5VXJsIiwicmV0cnlDb3VudCIsInJlc2V0QWZ0ZXIiLCJyZXRyeVJlcXVlc3QiLCJyZXNvbHZlIiwicm91dGVJbmZvcm1hdGlvbktleSIsInF1ZXJ5UGFyYW1JbmRleCIsImluZGV4T2YiLCJzbGljZSIsInNwbGl0dGVkUm91dGUiLCJzdHJpcHBlZFJvdXRlIiwicGFydCIsImluZGV4IiwiYXJyYXkiLCJpc051bWJlciIsImlzRmluaXRlIiwicGFyc2VJbnQiLCJpc01ham9yIiwiZW5kc1dpdGgiLCJtZXNzYWdlSWQiLCJ0aW1lc3RhbXAiLCJwcm9jZXNzUmVxdWVzdCIsInJ1blRocm91Z2hRdWV1ZSIsInF1ZXVlSWRlbnRpZmllciIsIm1ha2VSZXF1ZXN0IiwiYnVja2V0UXVldWUiLCJyZXN1bHQiLCJjYXVzZSIsImNyZWF0ZSIsInBhcnNlIiwiUHJvbWlzZSIsImRhdGEiLCJlcnJvclRleHQiLCJtZXNzYWdlIiwiY29kZSIsInBvc3QiLCJwYXRjaCIsInB1dCIsImFkZFJlYWN0aW9uIiwiY2hhbm5lbElkIiwicmVhY3Rpb24iLCJjaGFubmVscyIsInJlYWN0aW9ucyIsImJvdCIsImFkZFJlYWN0aW9ucyIsIm9yZGVyZWQiLCJhbGwiLCJhZGRSb2xlIiwiZ3VpbGRJZCIsInVzZXJJZCIsInJvbGVJZCIsImd1aWxkcyIsInJvbGVzIiwibWVtYmVyIiwiYWRkVGhyZWFkTWVtYmVyIiwidGhyZWFkcyIsInVzZXIiLCJhZGREbVJlY2lwaWVudCIsImRtUmVjaXBpZW50IiwiY3JlYXRlQXV0b21vZFJ1bGUiLCJhdXRvbW9kIiwicnVsZXMiLCJjcmVhdGVDaGFubmVsIiwiY3JlYXRlRW1vamkiLCJlbW9qaXMiLCJjcmVhdGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaXMiLCJjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJyZXN0T3B0aW9ucyIsImJlYXJlclRva2VuIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkU3RpY2tlciIsImZpbGUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJzdGlja2VycyIsImNyZWF0ZUd1aWxkVGVtcGxhdGUiLCJ0ZW1wbGF0ZXMiLCJjcmVhdGVGb3J1bVRocmVhZCIsImZvcnVtIiwiY3JlYXRlSW52aXRlIiwiaW52aXRlcyIsImdldEd1aWxkUm9sZU1lbWJlckNvdW50cyIsIm1lbWJlckNvdW50cyIsImNyZWF0ZVJvbGUiLCJjcmVhdGVTY2hlZHVsZWRFdmVudCIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZXMiLCJjcmVhdGVXZWJob29rIiwid2ViaG9va3MiLCJhdmF0YXIiLCJkZWxldGVBdXRvbW9kUnVsZSIsInJ1bGVJZCIsInJ1bGUiLCJkZWxldGVDaGFubmVsIiwiY2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJvdmVyd3JpdGVJZCIsIm92ZXJ3cml0ZSIsImRlbGV0ZUVtb2ppIiwiaWQiLCJlbW9qaSIsImRlbGV0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwicmVzcG9uc2VzIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY29tbWFuZElkIiwiY29tbWFuZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwib25lIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwic3RpY2tlcklkIiwic3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJndWlsZCIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJvcmlnaW5hbCIsImRlbGV0ZU93blJlYWN0aW9uIiwiZGVsZXRlUmVhY3Rpb25zQWxsIiwiZGVsZXRlUmVhY3Rpb25zRW1vamkiLCJkZWxldGVSb2xlIiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudElkIiwiZXZlbnQiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwic3RhZ2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwid2ViaG9va0lkIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwid2ViaG9vayIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImVkaXRBdXRvbW9kUnVsZSIsImVkaXRCb3RQcm9maWxlIiwiYm90QXZhdGFyVVJMIiwiYmFubmVyIiwiYm90QmFubmVyVVJMIiwiY3VycmVudFVzZXIiLCJ1c2VybmFtZSIsInRyaW0iLCJlZGl0Q2hhbm5lbCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImVkaXRDaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEFwcGxpY2F0aW9uRW1vamkiLCJlZGl0Rm9sbG93dXBNZXNzYWdlIiwiZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZCIsImVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZFN0aWNrZXIiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImVkaXRNZXNzYWdlIiwiZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRPd25Wb2ljZVN0YXRlIiwidm9pY2UiLCJyZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCIsInRvSVNPU3RyaW5nIiwiZWRpdFNjaGVkdWxlZEV2ZW50IiwiZWRpdFJvbGUiLCJlZGl0Um9sZVBvc2l0aW9ucyIsImVkaXRTdGFnZUluc3RhbmNlIiwidG9waWMiLCJlZGl0VXNlclZvaWNlU3RhdGUiLCJlZGl0V2ViaG9vayIsImVkaXRXZWJob29rTWVzc2FnZSIsImVkaXRXZWJob29rV2l0aFRva2VuIiwiZWRpdFdlbGNvbWVTY3JlZW4iLCJ3ZWxjb21lIiwiZWRpdFdpZGdldFNldHRpbmdzIiwid2lkZ2V0IiwiZXhlY3V0ZVdlYmhvb2siLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJmb2xsb3ciLCJ3ZWJob29rQ2hhbm5lbElkIiwiZ2V0QWN0aXZlVGhyZWFkcyIsImFjdGl2ZSIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24iLCJhY2Nlc3NUb2tlbiIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiZ2V0QXBwbGljYXRpb25JbmZvIiwib2F1dGgyIiwiYXBwbGljYXRpb24iLCJlZGl0QXBwbGljYXRpb25JbmZvIiwiZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyIsImN1cnJlbnRBdXRob3JpemF0aW9uIiwiZXhjaGFuZ2VUb2tlbiIsImNsaWVudElkIiwiY2xpZW50U2VjcmV0IiwiYmFzaWNDcmVkZW50aWFscyIsImZyb20iLCJncmFudFR5cGUiLCJzY29wZSIsInRva2VuRXhjaGFuZ2UiLCJyZXZva2VUb2tlbiIsInRva2VuUmV2b2tlIiwiZ2V0QXVkaXRMb2ciLCJhdWRpdGxvZ3MiLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucyIsInJlZ2lvbnMiLCJnZXRCYW4iLCJtZW1iZXJzIiwiYmFuIiwiZ2V0QmFucyIsImJhbnMiLCJnZXRDaGFubmVsIiwiZ2V0Q2hhbm5lbEludml0ZXMiLCJnZXRDaGFubmVscyIsImdldENoYW5uZWxXZWJob29rcyIsImdldERtQ2hhbm5lbCIsImRtIiwicmVjaXBpZW50SWQiLCJnZXRHcm91cERtQ2hhbm5lbCIsImdldEVtb2ppIiwiZW1vamlJZCIsImdldEFwcGxpY2F0aW9uRW1vamkiLCJnZXRFbW9qaXMiLCJnZXRBcHBsaWNhdGlvbkVtb2ppcyIsImdldEZvbGxvd3VwTWVzc2FnZSIsImdldEdhdGV3YXlCb3QiLCJnYXRld2F5Qm90IiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsIndpdGhMb2NhbGl6YXRpb25zIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldENoYW5uZWxQaW5zIiwibWVzc2FnZVBpbnMiLCJnZXRQaW5uZWRNZXNzYWdlcyIsInBpbnMiLCJnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzIiwicHJpdmF0ZSIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJqb2luZWQiLCJnZXRQcnVuZUNvdW50IiwicHJ1bmUiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJwdWJsaWMiLCJnZXRSb2xlcyIsImdldFJvbGUiLCJnZXRTY2hlZHVsZWRFdmVudCIsIndpdGhVc2VyQ291bnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwidXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRPd25Wb2ljZVN0YXRlIiwiZ2V0VXNlclZvaWNlU3RhdGUiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFVzZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0Q3VycmVudFVzZXIiLCJnZXRVc2VyQ29ubmVjdGlvbnMiLCJjb25uZWN0aW9ucyIsImdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwicm9sZUNvbm5lY3Rpb25zIiwiZ2V0VmFuaXR5VXJsIiwidmFuaXR5IiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJ3aWRnZXRKc29uIiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibWUiLCJsZWF2ZUd1aWxkIiwibGVhdmUiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwiY3Jvc3Nwb3N0IiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInJlbW92ZURtUmVjaXBpZW50Iiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwiaW50ZXJhY3Rpb25JZCIsInBhcmFtcyIsImNhbGxiYWNrIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsImdldFBvbGxBbnN3ZXJWb3RlcnMiLCJhbnN3ZXJJZCIsInBvbGxzIiwidm90ZXMiLCJlbmRQb2xsIiwiZXhwaXJlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJidWxrQmFuTWVtYmVycyIsImJ1bGtCYW4iLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldEN1cnJlbnRNZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwiZ2V0TWVtYmVycyIsImdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImluc3RhbmNlSWQiLCJhcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsIm1lc3NhZ2VQaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsIm1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zIiwiaW5jaWRlbnRBY3Rpb25zIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImdldEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwibGlzdFN1YnNjcmlwdGlvbnMiLCJza3VJZCIsInN1YnNjcmlwdGlvbnMiLCJnZXRTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25JZCIsInN1YnNjcmlwdGlvbiIsInNlbmRTb3VuZGJvYXJkU291bmQiLCJzb3VuZGJvYXJkIiwic2VuZFNvdW5kIiwibGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzIiwibGlzdERlZmF1bHQiLCJsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzIiwiZ3VpbGRTb3VuZHMiLCJnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kSWQiLCJndWlsZFNvdW5kIiwiY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhIiwidXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMiLCJjcmVhdGVMb2JieSIsImxvYmJ5IiwiZ2V0TG9iYnkiLCJsb2JieUlkIiwibW9kaWZ5TG9iYnkiLCJkZWxldGVMb2JieSIsImFkZE1lbWJlclRvTG9iYnkiLCJyZW1vdmVNZW1iZXJGcm9tTG9iYnkiLCJsZWF2ZUxvYmJ5IiwibGlua0NoYW5uZWxUb0xvYmJ5IiwibGluayIsInVubGlua0NoYW5uZWxUb0xvYmJ5IiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxNQUFNLFFBQVEsY0FBYztBQUNyQyxTQUE4QkMsT0FBTyxRQUFRLFlBQVk7QUEyRHpELFNBQ0VDLGFBQWEsRUFDYkMsUUFBUSxFQUNSQyxnQkFBZ0IsRUFDaEJDLGtCQUFrQixFQUNsQkMsS0FBSyxFQUNMQyxpQkFBaUIsRUFDakJDLFdBQVcsRUFDWEMsTUFBTSxFQUNOQyxxQkFBcUIsRUFDckJDLG9CQUFvQixFQUNwQkMsV0FBVyxRQUNOLG9CQUFvQjtBQUMzQixTQUFTQywwQkFBMEIsUUFBUSxxQkFBcUI7QUFDaEUsU0FBU0MsS0FBSyxRQUFRLGFBQWE7QUFD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
1645
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJztcbmltcG9ydCB7IHR5cGUgSW5zcGVjdE9wdGlvbnMsIGluc3BlY3QgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHR5cGUge1xuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZSxcbiAgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEsXG4gIERpc2NvcmRBdWRpdExvZyxcbiAgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZSxcbiAgRGlzY29yZEJhbixcbiAgRGlzY29yZEJ1bGtCYW4sXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkQ29ubmVjdGlvbixcbiAgRGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uLFxuICBEaXNjb3JkRW1vamksXG4gIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgRGlzY29yZEZvbGxvd2VkQ2hhbm5lbCxcbiAgRGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2UsXG4gIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICBEaXNjb3JkR3VpbGQsXG4gIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW5jaWRlbnRzRGF0YSxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlLFxuICBEaXNjb3JkSW52aXRlLFxuICBEaXNjb3JkSW52aXRlTWV0YWRhdGEsXG4gIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIERpc2NvcmRMb2JieSxcbiAgRGlzY29yZExvYmJ5TWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIERpc2NvcmRNZXNzYWdlLFxuICBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIERpc2NvcmRSb2xlLFxuICBEaXNjb3JkU2NoZWR1bGVkRXZlbnQsXG4gIERpc2NvcmRTa3UsXG4gIERpc2NvcmRTb3VuZGJvYXJkU291bmQsXG4gIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICBEaXNjb3JkU3RpY2tlcixcbiAgRGlzY29yZFN0aWNrZXJQYWNrLFxuICBEaXNjb3JkU3Vic2NyaXB0aW9uLFxuICBEaXNjb3JkVGFyZ2V0VXNlcnNKb2JTdGF0dXMsXG4gIERpc2NvcmRUZW1wbGF0ZSxcbiAgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgRGlzY29yZFVzZXIsXG4gIERpc2NvcmRWYW5pdHlVcmwsXG4gIERpc2NvcmRWb2ljZVJlZ2lvbixcbiAgRGlzY29yZFZvaWNlU3RhdGUsXG4gIERpc2NvcmRXZWJob29rLFxuICBEaXNjb3JkV2VsY29tZVNjcmVlbixcbiAgTW9kaWZ5R3VpbGRUZW1wbGF0ZSxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnO1xuaW1wb3J0IHtcbiAgY2FtZWxpemUsXG4gIGNhbWVsVG9TbmFrZUNhc2UsXG4gIERJU0NPUkRFTk9fVkVSU0lPTixcbiAgZGVsYXksXG4gIGdldEJvdElkRnJvbVRva2VuLFxuICBoYXNQcm9wZXJ0eSxcbiAgbG9nZ2VyLFxuICBwcm9jZXNzUmVhY3Rpb25TdHJpbmcsXG4gIHNub3dmbGFrZVRvVGltZXN0YW1wLFxuICB1cmxUb0Jhc2U2NCxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnO1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJztcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMsIE1ha2VSZXF1ZXN0T3B0aW9ucywgUmVzdE1hbmFnZXIsIFNlbmRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwO1xuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1VSTCA9ICdodHRwczovL2Rpc2NvcmQuY29tL2FwaSc7XG5cbmV4cG9ydCBjb25zdCBBVURJVF9MT0dfUkVBU09OX0hFQURFUiA9ICd4LWF1ZGl0LWxvZy1yZWFzb24nO1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnO1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJztcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIgPSAneC1yYXRlbGltaXQtZ2xvYmFsJztcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0JztcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1saW1pdCc7XG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9TQ09QRV9IRUFERVIgPSAneC1yYXRlbGltaXQtc2NvcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKTtcblxuICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5wcm94eT8uYmFzZVVybCA/PyBESVNDT1JEX0FQSV9VUkw7XG4gIC8vIERpc2NvcmQgZXJyb3IgY2FuIGdldCBuZXN0ZWQgYSBsb3QsIHNvIHdlIHVzZSBhIGN1c3RvbSBpbnNwZWN0IHRvIGNoYW5nZSB0aGUgZGVwdGggdG8gSW5maW5pdHlcbiAgY29uc3QgYmFzZUVycm9yUHJvdG90eXBlID0ge1xuICAgIFtpbnNwZWN0LmN1c3RvbV0oX2RlcHRoOiBudW1iZXIsIG9wdGlvbnM6IEluc3BlY3RPcHRpb25zLCBfaW5zcGVjdDogdHlwZW9mIGluc3BlY3QpIHtcbiAgICAgIHJldHVybiBfaW5zcGVjdCh0aGlzLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGRlcHRoOiBJbmZpbml0eSxcbiAgICAgICAgLy8gU2luY2Ugd2UgY2FsbCBpbnNwZWN0IG9uIG91cnNlbGYsIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgY2FsbHMgdG8gdGhlIGluc3BlY3QuY3VzdG9tIHN5bWJvbCBvciBlbHNlIGl0IHdpbGwgY2F1c2UgYW4gaW5maW5pdGUgbG9vcC5cbiAgICAgICAgY3VzdG9tSW5zcGVjdDogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG4gICAgZXZlbnRzOiB7XG4gICAgICByZXF1ZXN0OiAoKSA9PiB7fSxcbiAgICAgIHJlc3BvbnNlOiAoKSA9PiB7fSxcbiAgICAgIHJlcXVlc3RFcnJvcjogKCkgPT4ge30sXG4gICAgICAuLi5vcHRpb25zLmV2ZW50cyxcbiAgICB9LFxuXG4gICAgcm91dGVzOiBjcmVhdGVSb3V0ZXMoKSxcblxuICAgIGNyZWF0ZUJhc2VIZWFkZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBgRGlzY29yZEJvdCAoaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVubywgdiR7RElTQ09SREVOT19WRVJTSU9OfSlgLFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk7XG5cbiAgICAgIGNvbnN0IGdsb2JhbCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoJ2dsb2JhbCcpO1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vdztcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JhbCAmJiBub3cgPCBnbG9iYWwucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5yZXNldFRpbWVzdGFtcCAtIG5vdztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgICAgIGlmIChyZXN0LmF1dGhvcml6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdJZGVudGlmaWVyID0gYEJlYXJlciAke25ld1Rva2VufWA7XG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZTtcblxuICAgICAgICByZXN0LnF1ZXVlcy5kZWxldGUoa2V5KTtcbiAgICAgICAgcXVldWUuaWRlbnRpZmllciA9IG5ld0lkZW50aWZpZXI7XG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gO1xuICAgICAgICBjb25zdCBuZXdRdWV1ZSA9IHJlc3QucXVldWVzLmdldChuZXdLZXkpO1xuXG4gICAgICAgIC8vIE1lcmdlIHRoZSBxdWV1ZXNcbiAgICAgICAgaWYgKG5ld1F1ZXVlKSB7XG4gICAgICAgICAgbmV3UXVldWUud2FpdGluZy51bnNoaWZ0KC4uLnF1ZXVlLndhaXRpbmcpO1xuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKTtcblxuICAgICAgICAgIHF1ZXVlLndhaXRpbmcgPSBbXTtcbiAgICAgICAgICBxdWV1ZS5wZW5kaW5nID0gW107XG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KG5ld0tleSwgcXVldWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgcmF0ZWxpbWl0UGF0aF0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWU7XG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aCk7XG5cbiAgICAgICAgaWYgKHJhdGVsaW1pdFBhdGguYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLmJ1Y2tldElkfWAsIHJhdGVsaW1pdFBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3T2JqOiBhbnkgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgICAgIC8vIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiBzbmFrZV9jYXNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgYWxyZWFkeSBpbiB0aGUgZGlzY29yZCBmb3JtYXQuXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPYmpbY2FtZWxUb1NuYWtlQ2FzZShrZXkpXSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPYmo7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpO1xuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG5cbiAgICBjcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmNyZWF0ZUJhc2VIZWFkZXJzKCk7XG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWA7XG5cbiAgICAgIC8vIElGIEEgUkVBU09OIElTIFBST1ZJREVEIEVOQ09ERSBJVCBJTiBIRUFERVJTXG4gICAgICBpZiAob3B0aW9ucz8ucmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVhZGVyc1tBVURJVF9MT0dfUkVBU09OX0hFQURFUl0gPSBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucz8ucmVhc29uKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGJvZHk6IHN0cmluZyB8IEZvcm1EYXRhIHwgdW5kZWZpbmVkO1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmZpbGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoYGZpbGVzWyR7aX1dYCwgb3B0aW9ucy5maWxlc1tpXS5ibG9iLCBvcHRpb25zLmZpbGVzW2ldLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGF2ZSB0byB1c2UgY2hhbmdlVG9EaXNjb3JkRm9ybWF0IG9yIGVsc2UgSlNPTi5zdHJpbmdpZnkgbWF5IHRocm93IGFuIGVycm9yIGZvciB0aGUgcHJlc2VuY2Ugb2YgQmlnSW50KHMpIGluIHRoZSBqc29uXG4gICAgICAgIGZvcm0uYXBwZW5kKCdwYXlsb2FkX2pzb24nLCBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh7IC4uLm9wdGlvbnMuYm9keSwgZmlsZXM6IHVuZGVmaW5lZCB9KSkpO1xuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm07XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgJiYgb3B0aW9ucy5oZWFkZXJzICYmIG9wdGlvbnMuaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICAgIC8vIE9BdXRoMiBib2R5IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IGZvcm1Cb2R5OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGRpc2NvcmRCb2R5ID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgYm9keSA9IGZvcm1Cb2R5LmpvaW4oJyYnKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgIGJvZHkgPSBvcHRpb25zLmJvZHk7XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKTtcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGBhcHBsaWNhdGlvbi9qc29uYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTT01FVElNRVMgU1BFQ0lBTCBIRUFERVJTIChFLkcuIENVU1RPTSBBVVRIT1JJWkFUSU9OKSBORUVEIFRPIEJFIFVTRURcbiAgICAgIGlmIChvcHRpb25zPy5oZWFkZXJzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgb3B0aW9ucy5oZWFkZXJzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgZm9yIG9mIGxvb3AuICR7XG4gICAgICAgIC8vICAgdmFsdWUucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgICAgLy8gfWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIC8vIElmIHRoZSB0aW1lIGhhcyBub3QgcmVhY2hlZCBjYW5jZWxcbiAgICAgICAgaWYgKHZhbHVlLnJlc2V0VGltZXN0YW1wID4gbm93KSBjb250aW51ZTtcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KTtcbiAgICAgICAgLy8gSWYgaXQgd2FzIGdsb2JhbCwgYWxzbyBtYXJrIHRoZSBnbG9iYWwgdmFsdWUgYXMgZmFsc2VcbiAgICAgICAgaWYgKGtleSA9PT0gJ2dsb2JhbCcpIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBBTEwgUEFUSFMgQVJFIENMRUFSRUQgQ0FOIENBTkNFTCBPVVQhXG4gICAgICBpZiAocmVzdC5yYXRlTGltaXRlZFBhdGhzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWU7XG4gICAgICAgIC8vIFJFQ0hFQ0sgSU4gMSBTRUNPTkRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZygnW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBzZXRUaW1lb3V0LicpXG4gICAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2U7XG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUik7XG4gICAgICBjb25zdCByZXRyeUFmdGVyID0gaGVhZGVycy5nZXQoJ1JldHJ5LUFmdGVyJykgPz8gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpO1xuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMDtcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUik7XG4gICAgICAvLyB1bmRlZmluZWQgb3ZlcnJpZGUgbnVsbCBuZWVkZWQgZm9yIHR5cGluZ3NcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSKSA/PyB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKTtcblxuICAgICAgLy8gSWYgd2UgZGlkbid0IHJlY2VpdmVkIHRoZSBpZGVudGlmaWVyLCBmYWxsYmFjayB0byB0aGUgYm90IHRva2VuXG4gICAgICBpZGVudGlmaWVyID8/PSBgQm90ICR7cmVzdC50b2tlbn1gO1xuXG4gICAgICByZXN0LnF1ZXVlcy5nZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gKT8uaGFuZGxlQ29tcGxldGVkUmVxdWVzdCh7XG4gICAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nID8gTnVtYmVyKHJlbWFpbmluZykgOiB1bmRlZmluZWQsXG4gICAgICAgIGludGVydmFsOiByZXRyeUFmdGVyID8gTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4OiBsaW1pdCA/IE51bWJlcihsaW1pdCkgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlO1xuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU0FWRSBUSEUgQlVDS0VUIEFTIExJTUlURUQgU0lOQ0UgRElGRkVSRU5UIFVSTFMgTUFZIFNIQVJFIEEgQlVDS0VUXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke2J1Y2tldElkfWAsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMDtcbiAgICAgICAgY29uc3QgZ2xvYmFsUmVzZXQgPSBEYXRlLm5vdygpICsgcmV0cnlBZnRlcjtcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgPSBHbG9iYWxseSBSYXRlIExpbWl0ZWRdIFVSTDogJHt1cmx9IHwgR2xvYmFsIFJlc3Q6ICR7Z2xvYmFsUmVzZXR9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gdHJ1ZTtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlO1xuICAgICAgICB9LCByZXRyeUFmdGVyKTtcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoaWRlbnRpZmllciwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyYXRlTGltaXRlZCAmJiAhcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocykge1xuICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnJvdXRlfWA7XG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShvcHRpb25zLm1ldGhvZCwgb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnMpO1xuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH07XG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBjb25zdCBhdXRob3JpemF0aW9uU2NoZW1lID0gcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24/LnNwbGl0KCcgJylbMF07XG4gICAgICAgIGxvZ2dpbmdIZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9uU2NoZW1lfSB0b2tlbmhlcmVgO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBwYXlsb2FkKTtcbiAgICAgIHJlc3QuZXZlbnRzLnJlcXVlc3QocmVxdWVzdCwge1xuICAgICAgICBib2R5OiBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucz8uYm9keSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCkuY2F0Y2goYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoIHRvICR7dXJsfSBmYWlsZWQuYCwgZXJyb3IpO1xuICAgICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0RXJyb3IocmVxdWVzdCwgZXJyb3IsIHsgYm9keTogb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnM/LmJvZHkgfSk7XG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhcyBjb21wbGV0ZWRcbiAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoOTk5LCBmYWxzZSk7XG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgICBlcnJvck9iamVjdDogZXJyb3IsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHJlc3BvbnNlIGlzIHVuZGVmaW5lZCwgdGhlIGVycm9yIGhhcyBiZWVuIGhhbmRsZWQgaW4gdGhlIGNhdGNoIGJsb2NrIGFib3ZlXG4gICAgICBpZiAoIXJlc3BvbnNlKSByZXR1cm47XG5cbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuXG4gICAgICAvLyBTb21ldGltZXMgdGhlIENvbnRlbnQtVHlwZSBtYXkgYmUgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsIGZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlclxuICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSA/IHJlc3BvbnNlLmpzb24oKSA6IHJlc3BvbnNlLnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbCk7XG5cbiAgICAgIHJlc3QuZXZlbnRzLnJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlLCB7XG4gICAgICAgIHJlcXVlc3RCb2R5OiBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucz8uYm9keSxcbiAgICAgICAgcmVzcG9uc2VCb2R5OiBib2R5LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhcyBjb21wbGV0ZWRcbiAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuaGVhZGVycy5nZXQoUkFURV9MSU1JVF9TQ09QRV9IRUFERVIpID09PSAnc2hhcmVkJyk7XG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pO1xuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZDtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA8IEh0dHBSZXNwb25zZUNvZGUuU3VjY2VzcyB8fCByZXNwb25zZS5zdGF0dXMgPj0gSHR0cFJlc3BvbnNlQ29kZS5FcnJvcikge1xuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZmFpbGVkLmApO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LCBib2R5IH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYCk7XG4gICAgICAgIC8vIFRvbyBtYW55IGF0dGVtcHRzLCBnZXQgcmlkIG9mIHJlcXVlc3QgZnJvbSBxdWV1ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucmV0cnlDb3VudCA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZCk7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5yZXRyeUNvdW50ICs9IDE7XG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpO1xuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMCk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIC8vIERpc2NvcmQgc29tZXRpbWVzIHNlbmRzIGEgcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50XG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBib2R5IH0pO1xuICAgIH0sXG5cbiAgICBzaW1wbGlmeVVybCh1cmwsIG1ldGhvZCkge1xuICAgICAgY29uc3Qgcm91dGVJbmZvcm1hdGlvbktleTogc3RyaW5nW10gPSBbbWV0aG9kXTtcblxuICAgICAgY29uc3QgcXVlcnlQYXJhbUluZGV4ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgIGNvbnN0IHJvdXRlID0gcXVlcnlQYXJhbUluZGV4ICE9PSAtMSA/IHVybC5zbGljZSgwLCBxdWVyeVBhcmFtSW5kZXgpIDogdXJsO1xuXG4gICAgICAvLyBTaW5jZSB0aGUgdXJscyBzdGFydCB3aXRoIC8gdGhlIGZpcnN0IHBhcnQgd2lsbCBhbHdheXMgYmUgZW1wdHlcbiAgICAgIGNvbnN0IHNwbGl0dGVkUm91dGUgPSByb3V0ZS5zcGxpdCgnLycpO1xuXG4gICAgICAvLyAxKSBTdHJpcCB0aGUgbWlub3IgcGFyYW1zXG4gICAgICAvLyAgICBUaGUgb25seSBtYWpvcnMgYXJlIGNoYW5uZWxzLCBndWlsZHMsIHdlYmhvb2tzIGFuZCB3ZWJob29rcyB3aXRoIHRoZWlyIHRva2VuXG5cbiAgICAgIGNvbnN0IHN0cmlwcGVkUm91dGUgPSBzcGxpdHRlZFJvdXRlXG4gICAgICAgIC5tYXAoKHBhcnQsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICAgIC8vIFdoaWxlIHBhcnNlSW50IHdpbGwgdHJ1bmNhdGUgdGhlIHNub3dmbGFrZSBpZCwgaXQgd2lsbCBzdGlsbCB0ZWxsIHVzIGlmIGl0IGlzIGEgbnVtYmVyXG4gICAgICAgICAgY29uc3QgaXNOdW1iZXIgPSBOdW1iZXIuaXNGaW5pdGUocGFyc2VJbnQocGFydCwgMTApKTtcblxuICAgICAgICAgIGlmICghaXNOdW1iZXIpIHtcbiAgICAgICAgICAgIC8vIFJlYWN0aW9ucyBlbW9qaSBuZWVkIHRvIGJlIHN0cmlwcGVkIGFzIGl0IGlzIGEgbWlub3IgcGFyYW1ldGVyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMSAmJiBhcnJheVtpbmRleCAtIDFdID09PSAncmVhY3Rpb25zJykgcmV0dXJuICd4JztcbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBvbiBhIHdlYmhvb2sgb3IgaWYgaXQgaXMgcGFydCBvZiB0aGUgcm91dGUsIGtlZXAgaXQgYXMgaXQgaXMgYSBtYWpvciBwYXJhbWV0ZXJcbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBvbiBhIGNoYW5uZWwgaWQsIGEgZ3VpbGQgaWQgb3IgYSB3ZWJob29rIGlkXG4gICAgICAgICAgY29uc3QgaXNNYWpvciA9IGluZGV4ID49IDEgJiYgKGFycmF5W2luZGV4IC0gMV0gPT09ICdjaGFubmVscycgfHwgYXJyYXlbaW5kZXggLSAxXSA9PT0gJ2d1aWxkcycgfHwgYXJyYXlbaW5kZXggLSAxXSA9PT0gJ3dlYmhvb2tzJyk7XG5cbiAgICAgICAgICBpZiAoaXNNYWpvcikgcmV0dXJuIHBhcnQ7XG5cbiAgICAgICAgICByZXR1cm4gJ3gnO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignLycpO1xuXG4gICAgICByb3V0ZUluZm9ybWF0aW9uS2V5LnB1c2goc3RyaXBwZWRSb3V0ZSk7XG5cbiAgICAgIC8vIDIpIEFjY291bnQgZm9yIGV4Y2VwdGlvbnNcbiAgICAgIC8vICAgIC0gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTA5MlxuICAgICAgLy8gICAgLSBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZC9kaXNjb3JkLWFwaS1kb2NzL2lzc3Vlcy8xMjk1XG5cbiAgICAgIC8vIFRoZSAyIGV4Y2VwdGlvbnMgYXJlIGZvciBtZXNzYWdlIGRlbGV0ZSwgc28gd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBhcmUgaW4gdGhhdCByb3V0ZVxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc3BsaXR0ZWRSb3V0ZS5sZW5ndGggPT09IDUgJiYgc3BsaXR0ZWRSb3V0ZVsxXSA9PT0gJ2NoYW5uZWxzJyAmJiBzdHJpcHBlZFJvdXRlLmVuZHNXaXRoKCcvbWVzc2FnZXMveCcpKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHNwbGl0dGVkUm91dGVbNF07XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHNub3dmbGFrZVRvVGltZXN0YW1wKG1lc3NhZ2VJZCk7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTA5MlxuICAgICAgICBpZiAobm93IC0gdGltZXN0YW1wIDwgMTBfMDAwKSB7XG4gICAgICAgICAgcm91dGVJbmZvcm1hdGlvbktleS5wdXNoKCdtZXNzYWdlLWRlbGV0ZS0xMHMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkL2Rpc2NvcmQtYXBpLWRvY3MvaXNzdWVzLzEyOTVcbiAgICAgICAgLy8gMiB3ZWVrcyA9IDIgKiA3ICogMjQgKiA2MCAqIDYwICogMTAwMCA9IDEyMDk2MDAwMDBcbiAgICAgICAgaWYgKG5vdyAtIHRpbWVzdGFtcCA+IDEyMDk2MDAwMDApIHtcbiAgICAgICAgICByb3V0ZUluZm9ybWF0aW9uS2V5LnB1c2goJ21lc3NhZ2UtZGVsZXRlLTJ3Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlSW5mb3JtYXRpb25LZXkuam9pbignOicpO1xuICAgIH0sXG5cbiAgICBhc3luYyBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0OiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IHJlc3Quc2ltcGxpZnlVcmwocmVxdWVzdC5yb3V0ZSwgcmVxdWVzdC5tZXRob2QpO1xuXG4gICAgICBpZiAocmVxdWVzdC5ydW5UaHJvdWdoUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3QocmVxdWVzdCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgcmVxdWVzdCBoYXMgYSB0b2tlbiwgdXNlIGl0XG4gICAgICAvLyBFbHNlIGZhbGxiYWNrIHRvIHByZWZpeCB3aXRoIHRoZSBib3QgdG9rZW5cbiAgICAgIGNvbnN0IHF1ZXVlSWRlbnRpZmllciA9IHJlcXVlc3QucmVxdWVzdEJvZHlPcHRpb25zPy5oZWFkZXJzPy5hdXRob3JpemF0aW9uID8/IGBCb3QgJHtyZXN0LnRva2VufWA7XG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke3F1ZXVlSWRlbnRpZmllcn0ke3VybH1gKTtcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDUkVBVEVTIEEgTkVXIFFVRVVFXG4gICAgICAgIGNvbnN0IGJ1Y2tldFF1ZXVlID0gbmV3IFF1ZXVlKHJlc3QsIHsgdXJsLCBkZWxldGVRdWV1ZURlbGF5OiByZXN0LmRlbGV0ZVF1ZXVlRGVsYXksIGlkZW50aWZpZXI6IHF1ZXVlSWRlbnRpZmllciB9KTtcblxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YCwgYnVja2V0UXVldWUpO1xuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBtYWtlUmVxdWVzdChtZXRob2QsIHJvdXRlLCBvcHRpb25zKSB7XG4gICAgICAvLyBUaGlzIGVycm9yIG5lZWRzIHRvIGJlIGNyZWF0ZWQgaGVyZSBiZWNhdXNlIG9mIGhvdyBzdGFjayB0cmFjZXMgZ2V0IGNhbGN1bGF0ZWRcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG5cbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgICAgb3B0aW9ucyA/Pz0ge307XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fTtcbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke3JvdXRlfWAsIHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSk7XG4gICAgICAgIHJlc3QuZXZlbnRzLnJlcXVlc3QocmVxdWVzdCwge1xuICAgICAgICAgIGJvZHk6IG9wdGlvbnM/LmJvZHksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKHJlcXVlc3QpO1xuXG4gICAgICAgIC8vIFNvbWV0aW1lcyB0aGUgQ29udGVudC1UeXBlIG1heSBiZSBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIiwgZm9yIHRoaXMgcmVhc29uLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBzdGFydCBvZiB0aGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCAocmVzdWx0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uc3RhcnRzV2l0aCgnYXBwbGljYXRpb24vanNvbicpID8gcmVzdWx0Lmpzb24oKSA6IHJlc3VsdC50ZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpO1xuXG4gICAgICAgIHJlc3QuZXZlbnRzLnJlc3BvbnNlKHJlcXVlc3QsIHJlc3VsdCwge1xuICAgICAgICAgIHJlcXVlc3RCb2R5OiBvcHRpb25zPy5ib2R5LFxuICAgICAgICAgIHJlc3BvbnNlQm9keTogYm9keSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICBlcnJvci5jYXVzZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShiYXNlRXJyb3JQcm90b3R5cGUpLCB7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyAhPT0gMjA0ID8gKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoYm9keSkgOiBib2R5KSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICByZXF1ZXN0Qm9keU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIChwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gKGRhdGEuYm9keSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiByZXNvbHZlPlswXSkgOiB1bmRlZmluZWQhKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yVGV4dDogc3RyaW5nO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHJlYXNvbi5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgY2FzZSA0MDA6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJUaGUgb3B0aW9ucyB3YXMgaW1wcm9wZXJseSBmb3JtYXR0ZWQsIG9yIHRoZSBzZXJ2ZXIgY291bGRuJ3QgdW5kZXJzdGFuZCBpdC5cIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIGhlYWRlciB3YXMgbWlzc2luZyBvciBpbnZhbGlkLic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgQXV0aG9yaXphdGlvbiB0b2tlbiB5b3UgcGFzc2VkIGRpZCBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHRoZSByZXNvdXJjZS4nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSByZXNvdXJjZSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGRvZXNuJ3QgZXhpc3QuXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDA1OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgSFRUUCBtZXRob2QgdXNlZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQuJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0Mjk6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJZb3UncmUgYmVpbmcgcmF0ZWxpbWl0ZWQuXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNTAyOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGVyZSB3YXMgbm90IGEgZ2F0ZXdheSBhdmFpbGFibGUgdG8gcHJvY2VzcyB5b3VyIG9wdGlvbnMuIFdhaXQgYSBiaXQgYW5kIHJldHJ5Lic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gcmVhc29uLnN0YXR1c1RleHQgPz8gJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFske3JlYXNvbi5zdGF0dXN9XSAke2Vycm9yVGV4dH1gO1xuXG4gICAgICAgICAgICAvLyBJZiBkaXNjb3JkIHNlbnQgdXMgSlNPTiwgaXQgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYW4gZXJyb3IgbWVzc2FnZSBmcm9tIHdoaWNoIHdlIGNhbiBnZXQgYW5kIGFkZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvciB0byB0aGUgZXJyb3IgbWVzc2FnZSwgdGhlIGZ1bGwgYm9keSB3aWxsIGJlIGluIHRoZSBlcnJvci5jYXVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmRpc2NvcmQuY29tL2RldmVsb3BlcnMvcmVmZXJlbmNlI2Vycm9yLW1lc3NhZ2VzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlYXNvbi5ib2R5ID09PSAnb2JqZWN0JyAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ2NvZGUnKSAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ21lc3NhZ2UnKSkge1xuICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlICs9IGBcXG5EaXNjb3JkIGVycm9yOiBbJHtyZWFzb24uYm9keS5jb2RlfV0gJHtyZWFzb24uYm9keS5tZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGJhc2VFcnJvclByb3RvdHlwZSksIHJlYXNvbik7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPjtcbiAgICB9LFxuXG4gICAgYXN5bmMgcG9zdDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPjtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPjtcbiAgICB9LFxuXG4gICAgYXN5bmMgcHV0PFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPjtcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbik7XG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb25zLCBvcmRlcmVkID0gZmFsc2UpIHtcbiAgICAgIGlmICghb3JkZXJlZCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICByZWFjdGlvbnMubWFwKGFzeW5jIChyZWFjdGlvbikgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcmVhY3Rpb24gb2YgcmVhY3Rpb25zKSB7XG4gICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZERtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCksIHsgYm9keSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUVtb2ppKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH07XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlO1xuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9O1xuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZTtcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpO1xuICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpO1xuICAgICAgZm9ybS5hcHBlbmQoJ2Rlc2NyaXB0aW9uJywgb3B0aW9ucy5kZXNjcmlwdGlvbik7XG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncyk7XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgeyBib2R5OiBmb3JtLCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHkgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIGJvZHkgPSB7fSwgcmVhc29uKSB7XG4gICAgICBpZiAoIWJvZHkudGFyZ2V0VXNlcnNGaWxlKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gV2hlbiB3ZSBoYXZlIHRvIHVwbG9hZCBhIGZpbGUsIHdlIG5lZWQgdG8gdXNlIEZvcm1EYXRhLCBhbmQgYWxsIG90aGVyIGZpZWxkcyBuZWVkIHRvIGJlIHBhcnQgb2YgdGhlIHBheWxvYWRfanNvbiBmaWVsZC5cbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcblxuICAgICAgZm9ybS5hcHBlbmQoJ3BheWxvYWRfanNvbicsIEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHsgLi4uYm9keSwgdGFyZ2V0VXNlcnNGaWxlOiB1bmRlZmluZWQgfSkpKTtcbiAgICAgIGZvcm0uYXBwZW5kKCd0YXJnZXRfdXNlcnNfZmlsZScsIGJvZHkudGFyZ2V0VXNlcnNGaWxlKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkSW52aXRlPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCksIHsgYm9keTogZm9ybSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFJvbGVNZW1iZXJDb3VudHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXJDb3VudHMoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU3RhZ2VJbnN0YW5jZShib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlcygpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRW1vamkoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUFwcGxpY2F0aW9uRW1vamkoaWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUYXJnZXRVc2VycyhpbnZpdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8c3RyaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlVGFyZ2V0VXNlcnMoaW52aXRlQ29kZSkpO1xuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUYXJnZXRVc2VycyhpbnZpdGVDb2RlLCB0YXJnZXRVc2Vyc0ZpbGUpIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGZvcm0uYXBwZW5kKCd0YXJnZXRfdXNlcnNfZmlsZScsIHRhcmdldFVzZXJzRmlsZSk7XG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVUYXJnZXRVc2VycyhpbnZpdGVDb2RlKSwgeyBib2R5OiBmb3JtIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUYXJnZXRVc2Vyc0pvYlN0YXR1cyhpbnZpdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRhcmdldFVzZXJzSm9iU3RhdHVzPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlVGFyZ2V0VXNlcnNKb2JTdGF0dXMoaW52aXRlQ29kZSkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPd25SZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKTtcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zQWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0Vtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pO1xuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVXNlclJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCB1c2VySWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbik7XG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy51c2VyKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgdXNlcklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdFByb2ZpbGUob3B0aW9ucykge1xuICAgICAgY29uc3QgYXZhdGFyID0gb3B0aW9ucz8uYm90QXZhdGFyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QXZhdGFyVVJMKSA6IG9wdGlvbnM/LmJvdEF2YXRhclVSTDtcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkw7XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZT8udHJpbSgpLFxuICAgICAgICAgIGF2YXRhcixcbiAgICAgICAgICBiYW5uZXIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWwoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEVtb2ppKGd1aWxkSWQsIGlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpLCB7IGJvZHkgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcyB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICByZXF1ZXN0VG9TcGVha1RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHRvcGljLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IGJvZHk6IHsgdG9waWMgfSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgb3B0aW9ucy51c2VySWQpLCB7IGJvZHk6IG9wdGlvbnMgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGV4ZWN1dGVXZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB3ZWJob29rQ2hhbm5lbElkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBY3RpdmVUaHJlYWRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWN0aXZlKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9O1xuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZTtcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fTtcblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWU7XG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5hcHBsaWNhdGlvbigpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uSW5mbyhib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBleGNoYW5nZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YCk7XG5cbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2U+KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlbkV4Y2hhbmdlKCksIHJlc3RPcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmV2b2tlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKTtcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1ZGl0TG9nKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXVkaXRMb2c+KHJlc3Qucm91dGVzLmd1aWxkcy5hdWRpdGxvZ3MoZ3VpbGRJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLnJlZ2lvbnMoKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsSW52aXRlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RG1DaGFubmVsKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5OiB7IHJlY2lwaWVudElkOiB1c2VySWQgfSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHcm91cERtQ2hhbm5lbChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamkoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaShlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgZW1vamlJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaXMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZEVtb2ppW10gfT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCwgb3B0aW9ucz8ud2l0aExvY2FsaXphdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8UGFydGlhbDxEaXNjb3JkR3VpbGQ+W10+KHJlc3Qucm91dGVzLmd1aWxkcy51c2VyR3VpbGRzKG9wdGlvbnMpLCBtYWtlUmVxdWVzdE9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aExvY2FsaXphdGlvbnMpLFxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRQcmV2aWV3KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRQcmV2aWV3PihyZXN0LnJvdXRlcy5ndWlsZHMucHJldmlldyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnRlZ3JhdGlvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnRlZ3JhdGlvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb25zKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2s+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2tzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFja1tdPihyZXN0LnJvdXRlcy5zdGlja2VyUGFja3MoKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFBpbnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbnMoY2hhbm5lbElkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBpbm5lZE1lc3NhZ2VzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbnMoY2hhbm5lbElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBydW5lQ291bnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQcnVuZWRDb3VudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnBydW5lKGd1aWxkSWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlKGd1aWxkSWQsIHJvbGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudFVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxBcnJheTx7IHVzZXI6IERpc2NvcmRVc2VyOyBtZW1iZXI/OiBEaXNjb3JkTWVtYmVyIH0+PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLnVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VTdGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCB1c2VySWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmdldFVzZXIoY2hhbm5lbElkLCB1c2VySWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVycyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVtYmVycyhjaGFubmVsSWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudFVzZXIodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMuY3VycmVudFVzZXIoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZhbml0eVVybChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZhbml0eVVybD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZhbml0eShndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWxjb21lU2NyZWVuKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldEpzb24oZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVHdWlsZChndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubGVhdmUoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5jcm9zc3Bvc3QoY2hhbm5lbElkLCBtZXNzYWdlSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZURtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kRm9sbG93dXBNZXNzYWdlKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2socmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHZvaWQgfCBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuLCBwYXJhbXMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVuZFBvbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBvbGxzLmV4cGlyZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBidWxrQmFuTWVtYmVycyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEJ1bGtCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJ1bGtCYW4oZ3VpbGRJZCksIHsgYm9keTogb3B0aW9ucywgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZShhcHBsaWNhdGlvbklkLCBpbnN0YW5jZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFjdGl2aXR5SW5zdGFuY2U+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZShhcHBsaWNhdGlvbklkLCBpbnN0YW5jZUlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VQaW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJ1bmVNZW1iZXJzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5wcnVuZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkT25ib2FyZGluZyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEluY2lkZW50c0RhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCksIHsgYm9keTogb3B0aW9ucyB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5waW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VQaW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9O1xuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZTtcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9O1xuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZTtcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZEd1aWxkTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFNrdXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTa3VbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnNrdXMoYXBwbGljYXRpb25JZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb25bXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb24+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRTb3VuZGJvYXJkU291bmQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuc291bmRib2FyZC5zZW5kU291bmQoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kW10+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQubGlzdERlZmF1bHQoKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRTb3VuZGJvYXJkU291bmRbXSB9PihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEoYXBwbGljYXRpb25JZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVMb2JieShvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkuY3JlYXRlKCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRMb2JieShsb2JieUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5sb2JieShsb2JieUlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUxvYmJ5KGxvYmJ5SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVMb2JieShsb2JieUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBhZGRNZW1iZXJUb0xvYmJ5KGxvYmJ5SWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRMb2JieU1lbWJlcj4ocmVzdC5yb3V0ZXMubG9iYnkubWVtYmVyKGxvYmJ5SWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVNZW1iZXJGcm9tTG9iYnkobG9iYnlJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubWVtYmVyKGxvYmJ5SWQsIHVzZXJJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUxvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubGVhdmUobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlua0NoYW5uZWxUb0xvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxpbmsobG9iYnlJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5saW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBwcmVmZXJTbmFrZUNhc2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2FtZWxpemVyID0gZW5hYmxlZCA/ICh4OiBhbnkpID0+IHggOiBjYW1lbGl6ZTtcblxuICAgICAgcmVzdC5nZXQgPSBhc3luYyAodXJsLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnR0VUJywgdXJsLCBvcHRpb25zKSk7XG4gICAgICB9O1xuXG4gICAgICByZXN0LnBvc3QgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpO1xuICAgICAgfTtcblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKTtcbiAgICAgIH07XG5cbiAgICAgIHJlc3QucGF0Y2ggPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKTtcbiAgICAgIH07XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3Q7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gcmVzdDtcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkJ1ZmZlciIsImluc3BlY3QiLCJjYW1lbGl6ZSIsImNhbWVsVG9TbmFrZUNhc2UiLCJESVNDT1JERU5PX1ZFUlNJT04iLCJkZWxheSIsImdldEJvdElkRnJvbVRva2VuIiwiaGFzUHJvcGVydHkiLCJsb2dnZXIiLCJwcm9jZXNzUmVhY3Rpb25TdHJpbmciLCJzbm93Zmxha2VUb1RpbWVzdGFtcCIsInVybFRvQmFzZTY0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJRdWV1ZSIsImNyZWF0ZVJvdXRlcyIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJESVNDT1JEX0FQSV9VUkwiLCJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSIiwiUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSIiwiUkFURV9MSU1JVF9MSU1JVF9IRUFERVIiLCJSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJ0b2tlbiIsImJhc2VVcmwiLCJwcm94eSIsImJhc2VFcnJvclByb3RvdHlwZSIsImN1c3RvbSIsIl9kZXB0aCIsIl9pbnNwZWN0IiwiZGVwdGgiLCJJbmZpbml0eSIsImN1c3RvbUluc3BlY3QiLCJyZXN0IiwiYXV0aG9yaXphdGlvbiIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJkZWxldGVRdWV1ZURlbGF5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsImludmFsaWRCdWNrZXQiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJ2ZXJzaW9uIiwiZXZlbnRzIiwicmVxdWVzdCIsInJlc3BvbnNlIiwicmVxdWVzdEVycm9yIiwicm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJpbmNsdWRlcyIsIm5hbWVfbG9jYWxpemF0aW9ucyIsImRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmlsZXMiLCJmb3JtIiwiRm9ybURhdGEiLCJpIiwibGVuZ3RoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJsaW1pdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJyb3V0ZSIsInBheWxvYWQiLCJyZXF1ZXN0Qm9keU9wdGlvbnMiLCJsb2dnaW5nSGVhZGVycyIsImF1dGhvcml6YXRpb25TY2hlbWUiLCJzcGxpdCIsIlJlcXVlc3QiLCJkZWJ1ZyIsImNhdGNoIiwiZXJyb3IiLCJyZWplY3QiLCJvayIsInN0YXR1cyIsImVycm9yT2JqZWN0Iiwic3RhdHVzVGV4dCIsImpzb24iLCJ0ZXh0IiwicmVxdWVzdEJvZHkiLCJyZXNwb25zZUJvZHkiLCJzaW1wbGlmeVVybCIsInJldHJ5Q291bnQiLCJyZXNldEFmdGVyIiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInJvdXRlSW5mb3JtYXRpb25LZXkiLCJxdWVyeVBhcmFtSW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJzcGxpdHRlZFJvdXRlIiwic3RyaXBwZWRSb3V0ZSIsInBhcnQiLCJpbmRleCIsImFycmF5IiwiaXNOdW1iZXIiLCJpc0Zpbml0ZSIsInBhcnNlSW50IiwiaXNNYWpvciIsImVuZHNXaXRoIiwibWVzc2FnZUlkIiwidGltZXN0YW1wIiwicHJvY2Vzc1JlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJxdWV1ZUlkZW50aWZpZXIiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwicmVzdWx0IiwiY2F1c2UiLCJjcmVhdGUiLCJwYXJzZSIsIlByb21pc2UiLCJkYXRhIiwiZXJyb3JUZXh0IiwibWVzc2FnZSIsImNvZGUiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsInJlYWN0aW9uIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwidGVtcGxhdGVzIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsInRhcmdldFVzZXJzRmlsZSIsImludml0ZXMiLCJnZXRHdWlsZFJvbGVNZW1iZXJDb3VudHMiLCJtZW1iZXJDb3VudHMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsIm9uZSIsImRlbGV0ZUd1aWxkU3RpY2tlciIsInN0aWNrZXJJZCIsInN0aWNrZXIiLCJkZWxldGVHdWlsZFRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiZ3VpbGQiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbiIsImRlbGV0ZUludml0ZSIsImludml0ZUNvZGUiLCJpbnZpdGUiLCJnZXRUYXJnZXRVc2VycyIsImludml0ZVRhcmdldFVzZXJzIiwidXBkYXRlVGFyZ2V0VXNlcnMiLCJnZXRUYXJnZXRVc2Vyc0pvYlN0YXR1cyIsImludml0ZVRhcmdldFVzZXJzSm9iU3RhdHVzIiwiZGVsZXRlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2VzIiwibWVzc2FnZUlkcyIsImJ1bGsiLCJtZXNzYWdlcyIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwid2l0aExvY2FsaXphdGlvbnMiLCJnZXRHdWlsZCIsImNvdW50cyIsImdldEd1aWxkcyIsIm1ha2VSZXF1ZXN0T3B0aW9ucyIsInVzZXJHdWlsZHMiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkUHJldmlldyIsInByZXZpZXciLCJnZXRHdWlsZFRlbXBsYXRlIiwiZ2V0R3VpbGRUZW1wbGF0ZXMiLCJnZXRHdWlsZFdlYmhvb2tzIiwiZ2V0SW50ZWdyYXRpb25zIiwiaW50ZWdyYXRpb25zIiwiZ2V0SW52aXRlIiwiZ2V0SW52aXRlcyIsImdldE1lc3NhZ2UiLCJnZXRNZXNzYWdlcyIsImdldFN0aWNrZXJQYWNrIiwic3RpY2tlclBhY2tJZCIsInN0aWNrZXJQYWNrIiwiZ2V0U3RpY2tlclBhY2tzIiwic3RpY2tlclBhY2tzIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0Q2hhbm5lbFBpbnMiLCJtZXNzYWdlUGlucyIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0Um9sZSIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldE93blZvaWNlU3RhdGUiLCJnZXRVc2VyVm9pY2VTdGF0ZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VXNlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwicGFyYW1zIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwiZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwiaW5zdGFuY2VJZCIsImFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwibWVzc2FnZVBpbiIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJxdWVyeSIsInNlYXJjaCIsImdldEd1aWxkT25ib2FyZGluZyIsIm9uYm9hcmRpbmciLCJlZGl0R3VpbGRPbmJvYXJkaW5nIiwibW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMiLCJpbmNpZGVudEFjdGlvbnMiLCJ1bmJhbk1lbWJlciIsInVucGluTWVzc2FnZSIsInRyaWdnZXJUeXBpbmdJbmRpY2F0b3IiLCJ0eXBpbmciLCJ1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwidXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwiYWRkR3VpbGRNZW1iZXIiLCJjcmVhdGVUZXN0RW50aXRsZW1lbnQiLCJtb25ldGl6YXRpb24iLCJlbnRpdGxlbWVudHMiLCJsaXN0RW50aXRsZW1lbnRzIiwiZ2V0RW50aXRsZW1lbnQiLCJlbnRpdGxlbWVudElkIiwiZW50aXRsZW1lbnQiLCJkZWxldGVUZXN0RW50aXRsZW1lbnQiLCJjb25zdW1lRW50aXRsZW1lbnQiLCJsaXN0U2t1cyIsInNrdXMiLCJsaXN0U3Vic2NyaXB0aW9ucyIsInNrdUlkIiwic3Vic2NyaXB0aW9ucyIsImdldFN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvbklkIiwic3Vic2NyaXB0aW9uIiwic2VuZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kYm9hcmQiLCJzZW5kU291bmQiLCJsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHMiLCJsaXN0RGVmYXVsdCIsImxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHMiLCJndWlsZFNvdW5kcyIsImdldEd1aWxkU291bmRib2FyZFNvdW5kIiwic291bmRJZCIsImd1aWxkU291bmQiLCJjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsIm1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kIiwiZGVsZXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMiLCJhcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEiLCJ1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyIsImNyZWF0ZUxvYmJ5IiwibG9iYnkiLCJnZXRMb2JieSIsImxvYmJ5SWQiLCJtb2RpZnlMb2JieSIsImRlbGV0ZUxvYmJ5IiwiYWRkTWVtYmVyVG9Mb2JieSIsInJlbW92ZU1lbWJlckZyb21Mb2JieSIsImxlYXZlTG9iYnkiLCJsaW5rQ2hhbm5lbFRvTG9iYnkiLCJsaW5rIiwidW5saW5rQ2hhbm5lbFRvTG9iYnkiLCJwcmVmZXJTbmFrZUNhc2UiLCJlbmFibGVkIiwiY2FtZWxpemVyIiwieCIsIkh0dHBSZXNwb25zZUNvZGUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE1BQU0sUUFBUSxjQUFjO0FBQ3JDLFNBQThCQyxPQUFPLFFBQVEsWUFBWTtBQTREekQsU0FDRUMsUUFBUSxFQUNSQyxnQkFBZ0IsRUFDaEJDLGtCQUFrQixFQUNsQkMsS0FBSyxFQUNMQyxpQkFBaUIsRUFDakJDLFdBQVcsRUFDWEMsTUFBTSxFQUNOQyxxQkFBcUIsRUFDckJDLG9CQUFvQixFQUNwQkMsV0FBVyxRQUNOLG9CQUFvQjtBQUMzQixTQUFTQywwQkFBMEIsUUFBUSxxQkFBcUI7QUFDaEUsU0FBU0MsS0FBSyxRQUFRLGFBQWE7QUFDbkMsU0FBU0MsWUFBWSxRQUFR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