@discordeno/rest 19.0.0-next.9e101a0 → 19.0.0-next.9e516a0

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.
@@ -85,8 +85,8 @@ function createRestManager(options) {
85
85
  'user-agent': `DiscordBot (https://github.com/discordeno/discordeno, v${version})`
86
86
  };
87
87
  },
88
- checkRateLimits (url, requestAuthorization) {
89
- const ratelimited = rest.rateLimitedPaths.get(`${requestAuthorization}${url}`);
88
+ checkRateLimits (url, identifier) {
89
+ const ratelimited = rest.rateLimitedPaths.get(`${identifier}${url}`);
90
90
  const global = rest.rateLimitedPaths.get('global');
91
91
  const now = Date.now();
92
92
  if (ratelimited && now < ratelimited.resetTimestamp) {
@@ -118,13 +118,13 @@ function createRestManager(options) {
118
118
  });
119
119
  return;
120
120
  }
121
- const newAuthorization = `Bearer ${newToken}`;
121
+ const newIdentifier = `Bearer ${newToken}`;
122
122
  // Update all the queues
123
123
  for (const [key, queue] of rest.queues.entries()){
124
124
  if (!key.startsWith(`Bearer ${oldToken}`)) continue;
125
125
  rest.queues.delete(key);
126
- queue.requestAuthorization = newAuthorization;
127
- const newKey = `${newAuthorization}${queue.url}`;
126
+ queue.identifier = newIdentifier;
127
+ const newKey = `${newIdentifier}${queue.url}`;
128
128
  const newQueue = rest.queues.get(newKey);
129
129
  // Merge the queues
130
130
  if (newQueue) {
@@ -139,9 +139,9 @@ function createRestManager(options) {
139
139
  }
140
140
  for (const [key, ratelimitPath] of rest.rateLimitedPaths.entries()){
141
141
  if (!key.startsWith(`Bearer ${oldToken}`)) continue;
142
- rest.rateLimitedPaths.set(`${newAuthorization}${ratelimitPath.url}`, ratelimitPath);
142
+ rest.rateLimitedPaths.set(`${newIdentifier}${ratelimitPath.url}`, ratelimitPath);
143
143
  if (ratelimitPath.bucketId) {
144
- rest.rateLimitedPaths.set(`${newAuthorization}${ratelimitPath.bucketId}`, ratelimitPath);
144
+ rest.rateLimitedPaths.set(`${newIdentifier}${ratelimitPath.bucketId}`, ratelimitPath);
145
145
  }
146
146
  }
147
147
  },
@@ -154,6 +154,11 @@ function createRestManager(options) {
154
154
  const newObj = {};
155
155
  for (const key of Object.keys(obj)){
156
156
  const value = obj[key];
157
+ // If the key is already in snake_case we can assume it is already in the discord format.
158
+ if (key.includes('_')) {
159
+ newObj[key] = value;
160
+ continue;
161
+ }
157
162
  // Some falsy values should be allowed like null or 0
158
163
  if (value !== undefined) {
159
164
  switch(key){
@@ -257,7 +262,7 @@ function createRestManager(options) {
257
262
  }, 1000);
258
263
  }
259
264
  },
260
- /** Processes the rate limit headers and determines if it needs to be rate limited and returns the bucket id if available */ processHeaders (url, headers, requestAuthorization) {
265
+ /** Processes the rate limit headers and determines if it needs to be rate limited and returns the bucket id if available */ processHeaders (url, headers, identifier) {
261
266
  let rateLimited = false;
262
267
  // GET ALL NECESSARY HEADERS
263
268
  const remaining = headers.get(RATE_LIMIT_REMAINING_HEADER);
@@ -267,7 +272,9 @@ function createRestManager(options) {
267
272
  // undefined override null needed for typings
268
273
  const bucketId = headers.get(RATE_LIMIT_BUCKET_HEADER) ?? undefined;
269
274
  const limit = headers.get(RATE_LIMIT_LIMIT_HEADER);
270
- rest.queues.get(`${requestAuthorization}${url}`)?.handleCompletedRequest({
275
+ // If we didn't received the identifier, fallback to the bot token
276
+ identifier ??= `Bot ${rest.token}`;
277
+ rest.queues.get(`${identifier}${url}`)?.handleCompletedRequest({
271
278
  remaining: remaining ? Number(remaining) : undefined,
272
279
  interval: retryAfter ? Number(retryAfter) * 1000 : undefined,
273
280
  max: limit ? Number(limit) : undefined
@@ -276,14 +283,14 @@ function createRestManager(options) {
276
283
  if (remaining === '0') {
277
284
  rateLimited = true;
278
285
  // SAVE THE URL AS LIMITED, IMPORTANT FOR NEW REQUESTS BY USER WITHOUT BUCKET
279
- rest.rateLimitedPaths.set(`${requestAuthorization}${url}`, {
286
+ rest.rateLimitedPaths.set(`${identifier}${url}`, {
280
287
  url,
281
288
  resetTimestamp: reset,
282
289
  bucketId
283
290
  });
284
291
  // SAVE THE BUCKET AS LIMITED SINCE DIFFERENT URLS MAY SHARE A BUCKET
285
292
  if (bucketId) {
286
- rest.rateLimitedPaths.set(`${requestAuthorization}${bucketId}`, {
293
+ rest.rateLimitedPaths.set(`${identifier}${bucketId}`, {
287
294
  url,
288
295
  resetTimestamp: reset,
289
296
  bucketId
@@ -308,7 +315,7 @@ function createRestManager(options) {
308
315
  bucketId
309
316
  });
310
317
  if (bucketId) {
311
- rest.rateLimitedPaths.set(requestAuthorization, {
318
+ rest.rateLimitedPaths.set(identifier, {
312
319
  url: 'global',
313
320
  resetTimestamp: globalReset,
314
321
  bucketId
@@ -414,8 +421,10 @@ function createRestManager(options) {
414
421
  await rest.sendRequest(request);
415
422
  return;
416
423
  }
417
- const authorization = request.requestBodyOptions?.headers?.authorization ?? `Bot ${rest.token}`;
418
- const queue = rest.queues.get(`${authorization}${url}`);
424
+ // If we the request has a token, use it
425
+ // Else fallback to prefix with the bot token
426
+ const queueIdentifier = request.requestBodyOptions?.headers?.authorization ?? `Bot ${rest.token}`;
427
+ const queue = rest.queues.get(`${queueIdentifier}${url}`);
419
428
  if (queue !== undefined) {
420
429
  queue.makeRequest(request);
421
430
  } else {
@@ -423,10 +432,10 @@ function createRestManager(options) {
423
432
  const bucketQueue = new _queue.Queue(rest, {
424
433
  url,
425
434
  deleteQueueDelay: rest.deleteQueueDelay,
426
- requestAuthorization: authorization
435
+ identifier: queueIdentifier
427
436
  });
428
437
  // Save queue
429
- rest.queues.set(`${authorization}${url}`, bucketQueue);
438
+ rest.queues.set(`${queueIdentifier}${url}`, bucketQueue);
430
439
  // Add request to queue
431
440
  bucketQueue.makeRequest(request);
432
441
  }
@@ -532,6 +541,11 @@ function createRestManager(options) {
532
541
  reason
533
542
  });
534
543
  },
544
+ async createApplicationEmoji (body) {
545
+ return await rest.post(rest.routes.applicationEmojis(rest.applicationId), {
546
+ body
547
+ });
548
+ },
535
549
  async createGlobalApplicationCommand (body, options) {
536
550
  const restOptions = {
537
551
  body
@@ -645,6 +659,9 @@ function createRestManager(options) {
645
659
  reason
646
660
  });
647
661
  },
662
+ async deleteApplicationEmoji (id) {
663
+ await rest.delete(rest.routes.applicationEmoji(rest.applicationId, id));
664
+ },
648
665
  async deleteFollowupMessage (token, messageId) {
649
666
  await rest.delete(rest.routes.interactions.responses.message(rest.applicationId, token, messageId), {
650
667
  unauthorized: true
@@ -732,7 +749,9 @@ function createRestManager(options) {
732
749
  await rest.delete(rest.routes.webhooks.message(webhookId, token, messageId, options));
733
750
  },
734
751
  async deleteWebhookWithToken (webhookId, token) {
735
- await rest.delete(rest.routes.webhooks.webhook(webhookId, token));
752
+ await rest.delete(rest.routes.webhooks.webhook(webhookId, token), {
753
+ unauthorized: true
754
+ });
736
755
  },
737
756
  async editApplicationCommandPermissions (guildId, commandId, bearerToken, permissions) {
738
757
  return await rest.put(rest.routes.interactions.commands.permission(rest.applicationId, guildId, commandId), {
@@ -784,6 +803,11 @@ function createRestManager(options) {
784
803
  reason
785
804
  });
786
805
  },
806
+ async editApplicationEmoji (id, body) {
807
+ return await rest.patch(rest.routes.applicationEmoji(rest.applicationId, id), {
808
+ body
809
+ });
810
+ },
787
811
  async editFollowupMessage (token, messageId, body) {
788
812
  return await rest.patch(rest.routes.interactions.responses.message(rest.applicationId, token, messageId), {
789
813
  body,
@@ -852,7 +876,7 @@ function createRestManager(options) {
852
876
  await rest.patch(rest.routes.guilds.voice(guildId), {
853
877
  body: {
854
878
  ...options,
855
- request_to_speak_timestamp: options.requestToSpeakTimestamp ? new Date(options.requestToSpeakTimestamp).toISOString() : options.requestToSpeakTimestamp
879
+ requestToSpeakTimestamp: options.requestToSpeakTimestamp ? new Date(options.requestToSpeakTimestamp).toISOString() : options.requestToSpeakTimestamp
856
880
  }
857
881
  });
858
882
  },
@@ -896,12 +920,14 @@ function createRestManager(options) {
896
920
  async editWebhookMessage (webhookId, token, messageId, options) {
897
921
  return await rest.patch(rest.routes.webhooks.message(webhookId, token, messageId, options), {
898
922
  body: options,
899
- files: options.files
923
+ files: options.files,
924
+ unauthorized: true
900
925
  });
901
926
  },
902
927
  async editWebhookWithToken (webhookId, token, body) {
903
928
  return await rest.patch(rest.routes.webhooks.webhook(webhookId, token), {
904
- body
929
+ body,
930
+ unauthorized: true
905
931
  });
906
932
  },
907
933
  async editWelcomeScreen (guildId, body, reason) {
@@ -918,13 +944,14 @@ function createRestManager(options) {
918
944
  },
919
945
  async executeWebhook (webhookId, token, options) {
920
946
  return await rest.post(rest.routes.webhooks.webhook(webhookId, token, options), {
921
- body: options
947
+ body: options,
948
+ unauthorized: true
922
949
  });
923
950
  },
924
951
  async followAnnouncement (sourceChannelId, targetChannelId, reason) {
925
952
  return await rest.post(rest.routes.channels.follow(sourceChannelId), {
926
953
  body: {
927
- webhook_channel_id: targetChannelId
954
+ webhookChannelId: targetChannelId
928
955
  },
929
956
  reason
930
957
  });
@@ -976,6 +1003,7 @@ function createRestManager(options) {
976
1003
  'content-type': 'application/x-www-form-urlencoded',
977
1004
  authorization: `Basic ${basicCredentials.toString('base64')}`
978
1005
  },
1006
+ runThroughQueue: false,
979
1007
  unauthorized: true
980
1008
  };
981
1009
  if (body.grantType === 'client_credentials') {
@@ -1027,7 +1055,7 @@ function createRestManager(options) {
1027
1055
  async getDmChannel (userId) {
1028
1056
  return await rest.post(rest.routes.channels.dm(), {
1029
1057
  body: {
1030
- recipient_id: userId
1058
+ recipientId: userId
1031
1059
  }
1032
1060
  });
1033
1061
  },
@@ -1039,9 +1067,15 @@ function createRestManager(options) {
1039
1067
  async getEmoji (guildId, emojiId) {
1040
1068
  return await rest.get(rest.routes.guilds.emoji(guildId, emojiId));
1041
1069
  },
1070
+ async getApplicationEmoji (emojiId) {
1071
+ return await rest.get(rest.routes.applicationEmoji(rest.applicationId, emojiId));
1072
+ },
1042
1073
  async getEmojis (guildId) {
1043
1074
  return await rest.get(rest.routes.guilds.emojis(guildId));
1044
1075
  },
1076
+ async getApplicationEmojis () {
1077
+ return await rest.get(rest.routes.applicationEmojis(rest.applicationId));
1078
+ },
1045
1079
  async getFollowupMessage (token, messageId) {
1046
1080
  return await rest.get(rest.routes.interactions.responses.message(rest.applicationId, token, messageId), {
1047
1081
  unauthorized: true
@@ -1103,6 +1137,9 @@ function createRestManager(options) {
1103
1137
  async getMessages (channelId, options) {
1104
1138
  return await rest.get(rest.routes.channels.messages(channelId, options));
1105
1139
  },
1140
+ async getStickerPack (stickerPackId) {
1141
+ return await rest.get(rest.routes.stickerPack(stickerPackId));
1142
+ },
1106
1143
  async getStickerPacks () {
1107
1144
  return await rest.get(rest.routes.stickerPacks());
1108
1145
  },
@@ -1129,6 +1166,9 @@ function createRestManager(options) {
1129
1166
  async getRoles (guildId) {
1130
1167
  return await rest.get(rest.routes.guilds.roles.all(guildId));
1131
1168
  },
1169
+ async getRole (guildId, roleId) {
1170
+ return await rest.get(rest.routes.guilds.roles.one(guildId, roleId));
1171
+ },
1132
1172
  async getScheduledEvent (guildId, eventId, options) {
1133
1173
  return await rest.get(rest.routes.guilds.events.event(guildId, eventId, options?.withUserCount));
1134
1174
  },
@@ -1144,6 +1184,12 @@ function createRestManager(options) {
1144
1184
  async getStageInstance (channelId) {
1145
1185
  return await rest.get(rest.routes.channels.stage(channelId));
1146
1186
  },
1187
+ async getOwnVoiceState (guildId) {
1188
+ return await rest.get(rest.routes.guilds.voice(guildId));
1189
+ },
1190
+ async getUserVoiceState (guildId, userId) {
1191
+ return await rest.get(rest.routes.guilds.voice(guildId, userId));
1192
+ },
1147
1193
  async getSticker (stickerId) {
1148
1194
  return await rest.get(rest.routes.sticker(stickerId));
1149
1195
  },
@@ -1199,10 +1245,14 @@ function createRestManager(options) {
1199
1245
  return await rest.get(rest.routes.webhooks.id(webhookId));
1200
1246
  },
1201
1247
  async getWebhookMessage (webhookId, token, messageId, options) {
1202
- return await rest.get(rest.routes.webhooks.message(webhookId, token, messageId, options));
1248
+ return await rest.get(rest.routes.webhooks.message(webhookId, token, messageId, options), {
1249
+ unauthorized: true
1250
+ });
1203
1251
  },
1204
1252
  async getWebhookWithToken (webhookId, token) {
1205
- return await rest.get(rest.routes.webhooks.webhook(webhookId, token));
1253
+ return await rest.get(rest.routes.webhooks.webhook(webhookId, token), {
1254
+ unauthorized: true
1255
+ });
1206
1256
  },
1207
1257
  async getWelcomeScreen (guildId) {
1208
1258
  return await rest.get(rest.routes.guilds.welcome(guildId));
@@ -1442,4 +1492,4 @@ var HttpResponseCode;
1442
1492
  /** This request got rate limited. */ HttpResponseCode[HttpResponseCode["TooManyRequests"] = 429] = "TooManyRequests";
1443
1493
  })(HttpResponseCode || (HttpResponseCode = {}));
1444
1494
 
1445
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW52aXRlLFxuICB0eXBlIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgdHlwZSBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIHR5cGUgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIHR5cGUgRGlzY29yZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2UsXG4gIHR5cGUgRGlzY29yZFBhcnRpYWxHdWlsZCxcbiAgdHlwZSBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIHR5cGUgRGlzY29yZFJvbGUsXG4gIHR5cGUgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICB0eXBlIERpc2NvcmRTa3UsXG4gIHR5cGUgRGlzY29yZFN0YWdlSW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXIsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXJQYWNrLFxuICB0eXBlIERpc2NvcmRUZW1wbGF0ZSxcbiAgdHlwZSBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRVc2VyLFxuICB0eXBlIERpc2NvcmRWYW5pdHlVcmwsXG4gIHR5cGUgRGlzY29yZFZvaWNlUmVnaW9uLFxuICB0eXBlIERpc2NvcmRXZWJob29rLFxuICB0eXBlIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMsXG4gIHR5cGUgTWZhTGV2ZWxzLFxuICB0eXBlIE1vZGlmeUd1aWxkVGVtcGxhdGUsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQml0cywgY2FtZWxUb1NuYWtlQ2FzZSwgY2FtZWxpemUsIGRlbGF5LCBnZXRCb3RJZEZyb21Ub2tlbiwgbG9nZ2VyLCBwcm9jZXNzUmVhY3Rpb25TdHJpbmcsIHVybFRvQmFzZTY0IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCB9IGZyb20gJy4vaW52YWxpZEJ1Y2tldC5qcydcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZS5qcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucywgTWFrZVJlcXVlc3RPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuLy8gVE9ETzogbWFrZSBkeW5hbWljIGJhc2VkIG9uIHBhY2thZ2UuanNvbiBmaWxlXG5jb25zdCB2ZXJzaW9uID0gJzE5LjAuMC1hbHBoYS4xJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG5cbiAgICByb3V0ZXM6IGNyZWF0ZVJvdXRlcygpLFxuXG4gICAgY3JlYXRlQmFzZUhlYWRlcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHt2ZXJzaW9ufSlgLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGVja1JhdGVMaW1pdHModXJsLCByZXF1ZXN0QXV0aG9yaXphdGlvbikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke3JlcXVlc3RBdXRob3JpemF0aW9ufSR7dXJsfWApXG5cbiAgICAgIGNvbnN0IGdsb2JhbCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoJ2dsb2JhbCcpXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JhbCAmJiBub3cgPCBnbG9iYWwucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0F1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7bmV3VG9rZW59YFxuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnF1ZXVlcy5kZWxldGUoa2V5KVxuICAgICAgICBxdWV1ZS5yZXF1ZXN0QXV0aG9yaXphdGlvbiA9IG5ld0F1dGhvcml6YXRpb25cblxuICAgICAgICBjb25zdCBuZXdLZXkgPSBgJHtuZXdBdXRob3JpemF0aW9ufSR7cXVldWUudXJsfWBcbiAgICAgICAgY29uc3QgbmV3UXVldWUgPSByZXN0LnF1ZXVlcy5nZXQobmV3S2V5KVxuXG4gICAgICAgIC8vIE1lcmdlIHRoZSBxdWV1ZXNcbiAgICAgICAgaWYgKG5ld1F1ZXVlKSB7XG4gICAgICAgICAgbmV3UXVldWUud2FpdGluZy51bnNoaWZ0KC4uLnF1ZXVlLndhaXRpbmcpXG4gICAgICAgICAgbmV3UXVldWUucGVuZGluZy51bnNoaWZ0KC4uLnF1ZXVlLnBlbmRpbmcpXG5cbiAgICAgICAgICBxdWV1ZS53YWl0aW5nID0gW11cbiAgICAgICAgICBxdWV1ZS5wZW5kaW5nID0gW11cblxuICAgICAgICAgIHF1ZXVlLmNsZWFudXAoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3QucXVldWVzLnNldChuZXdLZXksIHF1ZXVlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgcmF0ZWxpbWl0UGF0aF0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0F1dGhvcml6YXRpb259JHtyYXRlbGltaXRQYXRoLnVybH1gLCByYXRlbGltaXRQYXRoKVxuXG4gICAgICAgIGlmIChyYXRlbGltaXRQYXRoLmJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdBdXRob3JpemF0aW9ufSR7cmF0ZWxpbWl0UGF0aC5idWNrZXRJZH1gLCByYXRlbGltaXRQYXRoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XVxuXG4gICAgICAgICAgLy8gU29tZSBmYWxzeSB2YWx1ZXMgc2hvdWxkIGJlIGFsbG93ZWQgbGlrZSBudWxsIG9yIDBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgY2FzZSAncGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICBjYXNlICdhbGxvdyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2RlbnknOlxuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZWZhdWx0TWVtYmVyUGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnbmFtZUxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5uYW1lX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T2JqW2NhbWVsVG9TbmFrZUNhc2Uoa2V5KV0gPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPYmpcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSByZXR1cm4gb2JqLnRvU3RyaW5nKClcblxuICAgICAgcmV0dXJuIG9ialxuICAgIH0sXG5cbiAgICBjcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmNyZWF0ZUJhc2VIZWFkZXJzKClcblxuICAgICAgaWYgKG9wdGlvbnM/LnVuYXV0aG9yaXplZCAhPT0gdHJ1ZSkgaGVhZGVycy5hdXRob3JpemF0aW9uID0gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICAvLyBJRiBBIFJFQVNPTiBJUyBQUk9WSURFRCBFTkNPREUgSVQgSU4gSEVBREVSU1xuICAgICAgaWYgKG9wdGlvbnM/LnJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlYWRlcnNbQVVESVRfTE9HX1JFQVNPTl9IRUFERVJdID0gZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnM/LnJlYXNvbilcbiAgICAgIH1cblxuICAgICAgbGV0IGJvZHk6IHN0cmluZyB8IEZvcm1EYXRhIHwgdW5kZWZpbmVkXG5cbiAgICAgIC8vIFRPRE86IGNoZWNrIGlmIHdlIG5lZWQgdG8gYWRkIHNwZWNpZmljIGNoZWNrIGZvciBHRVQgbWV0aG9kXG4gICAgICAvLyBTaW5jZSBHRVQgZG9lcyBub3QgYWxsb3cgYm9kaWVzXG5cbiAgICAgIC8vIEhhdmUgdG8gY2hlY2sgZm9yIGF0dGFjaG1lbnRzIGZpcnN0LCBzaW5jZSBib2R5IHRoZW4gaGFzIHRvIGJlIHNlbmQgaW4gYSBkaWZmZXJlbnQgd2F5LlxuICAgICAgaWYgKG9wdGlvbnM/LmZpbGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5maWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGBmaWxlJHtpfWAsIG9wdGlvbnMuZmlsZXNbaV0uYmxvYiwgb3B0aW9ucy5maWxlc1tpXS5uYW1lKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGF2ZSB0byB1c2UgY2hhbmdlVG9EaXNjb3JkRm9ybWF0IG9yIGVsc2UgSlNPTi5zdHJpbmdpZnkgbWF5IHRocm93IGFuIGVycm9yIGZvciB0aGUgcHJlc2VuY2Ugb2YgQmlnSW50KHMpIGluIHRoZSBqc29uXG4gICAgICAgIGZvcm0uYXBwZW5kKCdwYXlsb2FkX2pzb24nLCBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh7IC4uLm9wdGlvbnMuYm9keSwgZmlsZXM6IHVuZGVmaW5lZCB9KSkpXG5cbiAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICBib2R5ID0gZm9ybVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICYmIG9wdGlvbnMuaGVhZGVycyAmJiBvcHRpb25zLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgICAvLyBPQXV0aDIgYm9keSBoYW5kbGluZ1xuICAgICAgICBjb25zdCBmb3JtQm9keTogc3RyaW5nW10gPSBbXVxuXG4gICAgICAgIGNvbnN0IGRpc2NvcmRCb2R5ID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KVxuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBkaXNjb3JkQm9keSkge1xuICAgICAgICAgIGZvcm1Cb2R5LnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHByb3ApfT0ke2VuY29kZVVSSUNvbXBvbmVudChkaXNjb3JkQm9keVtwcm9wXSl9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkgPSBmb3JtQm9keS5qb2luKCcmJylcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgIGJvZHkgPSBvcHRpb25zLmJvZHlcbiAgICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSkpXG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBgYXBwbGljYXRpb24vanNvbmBcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTT01FVElNRVMgU1BFQ0lBTCBIRUFERVJTIChFLkcuIENVU1RPTSBBVVRIT1JJWkFUSU9OKSBORUVEIFRPIEJFIFVTRURcbiAgICAgIGlmIChvcHRpb25zPy5oZWFkZXJzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgb3B0aW9ucy5oZWFkZXJzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBtZXRob2QsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCkge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgZm9yIG9mIGxvb3AuICR7XG4gICAgICAgIC8vICAgdmFsdWUucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgICAgLy8gfWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIC8vIElmIHRoZSB0aW1lIGhhcyBub3QgcmVhY2hlZCBjYW5jZWxcbiAgICAgICAgaWYgKHZhbHVlLnJlc2V0VGltZXN0YW1wID4gbm93KSBjb250aW51ZVxuXG4gICAgICAgIC8vIFJhdGUgbGltaXQgaXMgb3ZlciwgZGVsZXRlIHRoZSByYXRlIGxpbWl0ZXJcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmRlbGV0ZShrZXkpXG4gICAgICAgIC8vIElmIGl0IHdhcyBnbG9iYWwsIGFsc28gbWFyayB0aGUgZ2xvYmFsIHZhbHVlIGFzIGZhbHNlXG4gICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnKSByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBBTEwgUEFUSFMgQVJFIENMRUFSRUQgQ0FOIENBTkNFTCBPVVQhXG4gICAgICBpZiAocmVzdC5yYXRlTGltaXRlZFBhdGhzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gdHJ1ZVxuICAgICAgICAvLyBSRUNIRUNLIElOIDEgU0VDT05EXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoJ1tSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgc2V0VGltZW91dC4nKVxuICAgICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgICB9LCAxMDAwKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKiogUHJvY2Vzc2VzIHRoZSByYXRlIGxpbWl0IGhlYWRlcnMgYW5kIGRldGVybWluZXMgaWYgaXQgbmVlZHMgdG8gYmUgcmF0ZSBsaW1pdGVkIGFuZCByZXR1cm5zIHRoZSBidWNrZXQgaWQgaWYgYXZhaWxhYmxlICovXG4gICAgcHJvY2Vzc0hlYWRlcnModXJsLCBoZWFkZXJzLCByZXF1ZXN0QXV0aG9yaXphdGlvbikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICByZXN0LnF1ZXVlcy5nZXQoYCR7cmVxdWVzdEF1dGhvcml6YXRpb259JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtyZXF1ZXN0QXV0aG9yaXphdGlvbn0ke3VybH1gLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTQVZFIFRIRSBCVUNLRVQgQVMgTElNSVRFRCBTSU5DRSBESUZGRVJFTlQgVVJMUyBNQVkgU0hBUkUgQSBCVUNLRVRcbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtyZXF1ZXN0QXV0aG9yaXphdGlvbn0ke2J1Y2tldElkfWAsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIEdMT0JBTCBMSU1JVCwgTUFSSyBJVCBSQVRFIExJTUlURUQgR0xPQkFMTFlcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IE51bWJlcihoZWFkZXJzLmdldCgncmV0cnktYWZ0ZXInKSkgKiAxMDAwXG4gICAgICAgIGNvbnN0IGdsb2JhbFJlc2V0ID0gRGF0ZS5ub3coKSArIHJldHJ5QWZ0ZXJcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgPSBHbG9iYWxseSBSYXRlIExpbWl0ZWRdIFVSTDogJHt1cmx9IHwgR2xvYmFsIFJlc3Q6ICR7Z2xvYmFsUmVzZXR9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gdHJ1ZVxuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgICB9LCByZXRyeUFmdGVyKVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoJ2dsb2JhbCcsIHtcbiAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KHJlcXVlc3RBdXRob3JpemF0aW9uLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5lcnJvcihlcnJvcilcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFuZCBjb21wbGV0ZWRcbiAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoOTk5LCBmYWxzZSlcbiAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IDk5OSxcbiAgICAgICAgICBlcnJvcjogJ1Bvc3NpYmxlIG5ldHdvcmsgb3IgcmVxdWVzdCBzaGFwZSBpc3N1ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyByYXJlLCBpdHMgYSBuZXR3b3JrIGdsaXRjaC4gSWYgaXQgb2NjdXJzIGEgbG90IHNvbWV0aGluZyBpcyB3cm9uZy4nLFxuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYClcbiAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50ID49IHJlc3QubWF4UmV0cnlDb3VudCkge1xuICAgICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHJldHJpZXMuYCwgJ3dpdGggcGF5bG9hZDonLCBwYXlsb2FkKVxuICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcbiAgICAgICAgLy8gcHJvY2VzcyB0aGUgcmVzcG9uc2UgdG8gcHJldmVudCBtZW0gbGVha1xuICAgICAgICBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSByZXF1ZXN0LnJlcXVlc3RCb2R5T3B0aW9ucz8uaGVhZGVycz8uYXV0aG9yaXphdGlvbiA/PyBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke2F1dGhvcml6YXRpb259JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgcmVxdWVzdEF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb24gfSlcblxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHthdXRob3JpemF0aW9ufSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcHRpb25zID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2goYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtyb3V0ZX1gLCByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykpXG5cbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICBjb25zdCBlcnIgPSAoYXdhaXQgcmVzdWx0Lmpzb24oKS5jYXRjaCgoKSA9PiB7fSkpIGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICAgICAgICAvLyBMZWdhY3kgSGFuZGxpbmcgdG8gbm90IGJyZWFrIG9sZCBjb2RlIG9yIHdoZW4gYm9keSBpcyBtaXNzaW5nXG4gICAgICAgICAgaWYgKCFlcnI/LmJvZHkpIHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7ZXJyLm1lc3NhZ2UgPz8gcmVzdWx0LnN0YXR1c1RleHR9YClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyBhd2FpdCByZXN1bHQuanNvbigpIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdGYWlsZWQgdG8gc2VuZCByZXF1ZXN0IHRvIGRpc2NvcmQuJ1xuXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgcm91dGUsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIHJlcXVlc3RCb2R5T3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgKHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/IEpTT04ucGFyc2UoZGF0YS5ib2R5ID8/ICd7fScpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICBlcnJvci5jYXVzZSA9IHJlYXNvblxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuYWxsKCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlKHRlbXBsYXRlQ29kZSwgYm9keSkge1xuICAgICAgaWYgKGJvZHkuaWNvbikge1xuICAgICAgICBib2R5Lmljb24gPSBhd2FpdCB1cmxUb0Jhc2U2NChib2R5Lmljb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBwZXJtaXNzaW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90UHJvZmlsZShvcHRpb25zKSB7XG4gICAgICBjb25zdCBhdmF0YXIgPSBvcHRpb25zPy5ib3RBdmF0YXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RBdmF0YXJVUkwpIDogb3B0aW9ucz8uYm90QXZhdGFyVVJMXG4gICAgICBjb25zdCBiYW5uZXIgPSBvcHRpb25zPy5ib3RCYW5uZXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RCYW5uZXJVUkwpIDogb3B0aW9ucz8uYm90QmFubmVyVVJMXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZT8udHJpbSgpLFxuICAgICAgICAgIGF2YXRhcixcbiAgICAgICAgICBiYW5uZXIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBib2R5LmlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0RW1vamkoZ3VpbGRJZCwgaWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE1mYUxldmVsKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuZ3VpbGRzLm1mYShndWlsZElkKSwgeyBib2R5OiB7IGxldmVsOiBtZmFMZXZlbCB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mub3JpZ2luYWwod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHR5cGU6IEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcy5VcGRhdGVNZXNzYWdlLFxuICAgICAgICAgIGRhdGE6IG9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICByZXF1ZXN0X3RvX3NwZWFrX3RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgdG9waWMsIHJlYXNvbj86IHN0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgYm9keTogeyB0b3BpYyB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9sbG93KHNvdXJjZUNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHdlYmhvb2tfY2hhbm5lbF9pZDogdGFyZ2V0Q2hhbm5lbElkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBY3RpdmVUaHJlYWRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWN0aXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5hcHBsaWNhdGlvbigpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25JbmZvKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb24oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmN1cnJlbnRBdXRob3JpemF0aW9uKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGNoYW5nZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9XG5cbiAgICAgIGlmIChib2R5LmdyYW50VHlwZSA9PT0gJ2NsaWVudF9jcmVkZW50aWFscycpIHtcbiAgICAgICAgcmVzdE9wdGlvbnMuYm9keS5zY29wZSA9IGJvZHkuc2NvcGUuam9pbignICcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2U+KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlbkV4Y2hhbmdlKCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXZva2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5SZXZva2UoKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1ZGl0TG9nKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXVkaXRMb2c+KHJlc3Qucm91dGVzLmd1aWxkcy5hdWRpdGxvZ3MoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLnJlZ2lvbnMoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW5zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHk6IHsgcmVjaXBpZW50X2lkOiB1c2VySWQgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdyb3VwRG1DaGFubmVsKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZChndWlsZElkLCBvcHRpb25zID0geyBjb3VudHM6IHRydWUgfSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQsIG9wdGlvbnMuY291bnRzKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRzKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBtYWtlUmVxdWVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyB8IHVuZGVmaW5lZCA9IHRva2VuXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBhcnRpYWxHdWlsZFtdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2tzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFja1tdPihyZXN0LnJvdXRlcy5zdGlja2VyUGFja3MoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBpbm5lZE1lc3NhZ2VzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBydW5lQ291bnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQcnVuZWRDb3VudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnBydW5lKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMga2lja01lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkT25ib2FyZGluZyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFNrdXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTa3VbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnNrdXMoYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiRElTQ09SRF9BUElfVVJMIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIlJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiIsIlJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiIsIlJBVEVfTElNSVRfTElNSVRfSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwidmVyc2lvbiIsIm9wdGlvbnMiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwiZ2V0Qm90SWRGcm9tVG9rZW4iLCJ0b2tlbiIsImJhc2VVcmwiLCJwcm94eSIsInJlc3QiLCJhdXRob3JpemF0aW9uIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsImRlbGV0ZVF1ZXVlRGVsYXkiLCJnbG9iYWxseVJhdGVMaW1pdGVkIiwiaW52YWxpZEJ1Y2tldCIsImNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IiwibG9nZ2VyIiwiaXNQcm94aWVkIiwic3RhcnRzV2l0aCIsInVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJyb3V0ZXMiLCJjcmVhdGVSb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsInJlcXVlc3RBdXRob3JpemF0aW9uIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3QXV0aG9yaXphdGlvbiIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJjYWxjdWxhdGVCaXRzIiwiZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMiLCJuYW1lX2xvY2FsaXphdGlvbnMiLCJkZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zIiwiY2FtZWxUb1NuYWtlQ2FzZSIsInRvU3RyaW5nIiwiY3JlYXRlUmVxdWVzdEJvZHkiLCJ1bmF1dGhvcml6ZWQiLCJyZWFzb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImkiLCJsZW5ndGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImxpbWl0IiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInJvdXRlIiwicGF5bG9hZCIsInJlcXVlc3RCb2R5T3B0aW9ucyIsImxvZ2dpbmdIZWFkZXJzIiwiYXV0aG9yaXphdGlvblNjaGVtZSIsInNwbGl0IiwiZGVidWciLCJyZXNwb25zZSIsImNhdGNoIiwiZXJyb3IiLCJyZWplY3QiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsInRleHQiLCJyZXRyeUNvdW50IiwicmVzZXRBZnRlciIsImRlbGF5IiwiYXJyYXlCdWZmZXIiLCJyZXRyeVJlcXVlc3QiLCJyZXNvbHZlIiwicGFydHMiLCJzZWNvbmRMYXN0UGFydCIsInNwbGljZSIsInByb2Nlc3NSZXF1ZXN0IiwicmVxdWVzdCIsInJ1blRocm91Z2hRdWV1ZSIsIm1ha2VSZXF1ZXN0IiwiYnVja2V0UXVldWUiLCJRdWV1ZSIsInJlc3VsdCIsImVyciIsImpzb24iLCJtZXNzYWdlIiwiUHJvbWlzZSIsImRhdGEiLCJwYXJzZSIsImNhdXNlIiwiY2FtZWxpemUiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsIm1lc3NhZ2VJZCIsInJlYWN0aW9uIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGQiLCJjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiaWNvbiIsInVybFRvQmFzZTY0IiwidGVtcGxhdGVzIiwiY29kZSIsImNyZWF0ZUd1aWxkU3RpY2tlciIsImZpbGUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJzdGlja2VycyIsImNyZWF0ZUd1aWxkVGVtcGxhdGUiLCJjcmVhdGVGb3J1bVRocmVhZCIsImZvcnVtIiwiY3JlYXRlSW52aXRlIiwiaW52aXRlcyIsImNyZWF0ZVJvbGUiLCJjcmVhdGVTY2hlZHVsZWRFdmVudCIsImV2ZW50cyIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZXMiLCJjcmVhdGVXZWJob29rIiwid2ViaG9va3MiLCJhdmF0YXIiLCJkZWxldGVBdXRvbW9kUnVsZSIsInJ1bGVJZCIsInJ1bGUiLCJkZWxldGVDaGFubmVsIiwiY2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJvdmVyd3JpdGVJZCIsIm92ZXJ3cml0ZSIsImRlbGV0ZUVtb2ppIiwiaWQiLCJlbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZCIsImd1aWxkIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJvbmUiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJzdGlja2VySWQiLCJzdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0Rm9sbG93dXBNZXNzYWdlIiwiZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZCIsImVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZE1mYUxldmVsIiwibWZhTGV2ZWwiLCJtZmEiLCJsZXZlbCIsImVkaXRHdWlsZFN0aWNrZXIiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImVkaXRNZXNzYWdlIiwiZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlIiwidHlwZSIsIkludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyIsIlVwZGF0ZU1lc3NhZ2UiLCJlZGl0T3duVm9pY2VTdGF0ZSIsInZvaWNlIiwicmVxdWVzdF90b19zcGVha190aW1lc3RhbXAiLCJyZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCIsInRvSVNPU3RyaW5nIiwiZWRpdFNjaGVkdWxlZEV2ZW50IiwiZWRpdFJvbGUiLCJlZGl0Um9sZVBvc2l0aW9ucyIsImVkaXRTdGFnZUluc3RhbmNlIiwidG9waWMiLCJlZGl0VXNlclZvaWNlU3RhdGUiLCJlZGl0V2ViaG9vayIsImVkaXRXZWJob29rTWVzc2FnZSIsImVkaXRXZWJob29rV2l0aFRva2VuIiwiZWRpdFdlbGNvbWVTY3JlZW4iLCJ3ZWxjb21lIiwiZWRpdFdpZGdldFNldHRpbmdzIiwid2lkZ2V0IiwiZXhlY3V0ZVdlYmhvb2siLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJmb2xsb3ciLCJ3ZWJob29rX2NoYW5uZWxfaWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiQnVmZmVyIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRfaWQiLCJnZXRHcm91cERtQ2hhbm5lbCIsImdldEVtb2ppIiwiZW1vamlJZCIsImdldEVtb2ppcyIsImdldEZvbGxvd3VwTWVzc2FnZSIsImdldEdhdGV3YXlCb3QiLCJnYXRld2F5Qm90IiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkIiwiY291bnRzIiwiZ2V0R3VpbGRzIiwibWFrZVJlcXVlc3RPcHRpb25zIiwidXNlckd1aWxkcyIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGRQcmV2aWV3IiwicHJldmlldyIsImdldEd1aWxkVGVtcGxhdGUiLCJnZXRHdWlsZFRlbXBsYXRlcyIsImdldEd1aWxkV2ViaG9va3MiLCJnZXRJbnRlZ3JhdGlvbnMiLCJpbnRlZ3JhdGlvbnMiLCJnZXRJbnZpdGUiLCJnZXRJbnZpdGVzIiwiZ2V0TWVzc2FnZSIsImdldE1lc3NhZ2VzIiwiZ2V0U3RpY2tlclBhY2tzIiwic3RpY2tlclBhY2tzIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0UGlubmVkTWVzc2FnZXMiLCJwaW5zIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsInByaXZhdGUiLCJnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzIiwiam9pbmVkIiwiZ2V0UHJ1bmVDb3VudCIsInBydW5lIiwiZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzIiwicHVibGljIiwiZ2V0Um9sZXMiLCJnZXRTY2hlZHVsZWRFdmVudCIsIndpdGhVc2VyQ291bnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwidXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRVc2VyIiwiZ2V0Q3VycmVudFVzZXIiLCJnZXRVc2VyQ29ubmVjdGlvbnMiLCJjb25uZWN0aW9ucyIsImdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwicm9sZUNvbm5lY3Rpb25zIiwiZ2V0VmFuaXR5VXJsIiwidmFuaXR5IiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJ3aWRnZXRKc29uIiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibWUiLCJsZWF2ZUd1aWxkIiwibGVhdmUiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwiY3Jvc3Nwb3N0IiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInJlbW92ZURtUmVjaXBpZW50Iiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwiaW50ZXJhY3Rpb25JZCIsImNhbGxiYWNrIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsImdldFBvbGxBbnN3ZXJWb3RlcnMiLCJhbnN3ZXJJZCIsInBvbGxzIiwidm90ZXMiLCJlbmRQb2xsIiwiZXhwaXJlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJidWxrQmFuTWVtYmVycyIsImJ1bGtCYW4iLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldEN1cnJlbnRNZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwiZ2V0TWVtYmVycyIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwicGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJ1bmJhbk1lbWJlciIsInVucGluTWVzc2FnZSIsInRyaWdnZXJUeXBpbmdJbmRpY2F0b3IiLCJ0eXBpbmciLCJ1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwidXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwiYWRkR3VpbGRNZW1iZXIiLCJjcmVhdGVUZXN0RW50aXRsZW1lbnQiLCJtb25ldGl6YXRpb24iLCJlbnRpdGxlbWVudHMiLCJsaXN0RW50aXRsZW1lbnRzIiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQWlFYUEsdUJBQXVCO2VBQXZCQTs7SUFGQUMsZUFBZTtlQUFmQTs7SUFEQUMsbUJBQW1CO2VBQW5CQTs7SUFPQUMsd0JBQXdCO2VBQXhCQTs7SUFEQUMsd0JBQXdCO2VBQXhCQTs7SUFFQUMsdUJBQXVCO2VBQXZCQTs7SUFKQUMsMkJBQTJCO2VBQTNCQTs7SUFDQUMsNkJBQTZCO2VBQTdCQTs7SUFJQUMsdUJBQXVCO2VBQXZCQTs7SUFFR0MsaUJBQWlCO2VBQWpCQTs7OzRCQXpFTzt1QkFvRGhCO3VCQUN5SDsrQkFDckY7dUJBQ3JCO3dCQUNPO0FBRzdCLGdEQUFnRDtBQUNoRCxNQUFNQyxVQUFVO0FBRVQsTUFBTVIsc0JBQXNCO0FBQzVCLE1BQU1ELGtCQUFrQjtBQUV4QixNQUFNRCwwQkFBMEI7QUFDaEMsTUFBTU0sOEJBQThCO0FBQ3BDLE1BQU1DLGdDQUFnQztBQUN0QyxNQUFNSCwyQkFBMkI7QUFDakMsTUFBTUQsMkJBQTJCO0FBQ2pDLE1BQU1FLDBCQUEwQjtBQUNo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
1495
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW52aXRlLFxuICB0eXBlIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgdHlwZSBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIHR5cGUgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIHR5cGUgRGlzY29yZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2UsXG4gIHR5cGUgRGlzY29yZFBydW5lZENvdW50LFxuICB0eXBlIERpc2NvcmRSb2xlLFxuICB0eXBlIERpc2NvcmRTY2hlZHVsZWRFdmVudCxcbiAgdHlwZSBEaXNjb3JkU2t1LFxuICB0eXBlIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICB0eXBlIERpc2NvcmRTdGlja2VyLFxuICB0eXBlIERpc2NvcmRTdGlja2VyUGFjayxcbiAgdHlwZSBEaXNjb3JkVGVtcGxhdGUsXG4gIHR5cGUgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkVXNlcixcbiAgdHlwZSBEaXNjb3JkVmFuaXR5VXJsLFxuICB0eXBlIERpc2NvcmRWb2ljZVJlZ2lvbixcbiAgdHlwZSBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgdHlwZSBEaXNjb3JkV2ViaG9vayxcbiAgdHlwZSBEaXNjb3JkV2VsY29tZVNjcmVlbixcbiAgSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLFxuICB0eXBlIE1mYUxldmVscyxcbiAgdHlwZSBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IGNhbGN1bGF0ZUJpdHMsIGNhbWVsVG9TbmFrZUNhc2UsIGNhbWVsaXplLCBkZWxheSwgZ2V0Qm90SWRGcm9tVG9rZW4sIGxvZ2dlciwgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLCB1cmxUb0Jhc2U2NCB9IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMsIE1ha2VSZXF1ZXN0T3B0aW9ucywgUmVzdE1hbmFnZXIsIFNlbmRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbi8vIFRPRE86IG1ha2UgZHluYW1pYyBiYXNlZCBvbiBwYWNrYWdlLmpzb24gZmlsZVxuY29uc3QgdmVyc2lvbiA9ICcxOS4wLjAtYWxwaGEuMSdcblxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1ZFUlNJT04gPSAxMFxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1VSTCA9ICdodHRwczovL2Rpc2NvcmQuY29tL2FwaSdcblxuZXhwb3J0IGNvbnN0IEFVRElUX0xPR19SRUFTT05fSEVBREVSID0gJ3gtYXVkaXQtbG9nLXJlYXNvbidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIgPSAneC1yYXRlbGltaXQtcmVtYWluaW5nJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1nbG9iYWwnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWJ1Y2tldCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1saW1pdCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1zY29wZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyk6IFJlc3RNYW5hZ2VyIHtcbiAgY29uc3QgYXBwbGljYXRpb25JZCA9IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbilcblxuICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5wcm94eT8uYmFzZVVybCA/PyBESVNDT1JEX0FQSV9VUkxcblxuICBjb25zdCByZXN0OiBSZXN0TWFuYWdlciA9IHtcbiAgICBhcHBsaWNhdGlvbklkLFxuICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb24sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlcjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbkhlYWRlciA/PyAnYXV0aG9yaXphdGlvbicsXG4gICAgYmFzZVVybCxcbiAgICBkZWxldGVRdWV1ZURlbGF5OiA2MDAwMCxcbiAgICBnbG9iYWxseVJhdGVMaW1pdGVkOiBmYWxzZSxcbiAgICBpbnZhbGlkQnVja2V0OiBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCh7IGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgfSksXG4gICAgaXNQcm94aWVkOiAhYmFzZVVybC5zdGFydHNXaXRoKERJU0NPUkRfQVBJX1VSTCksXG4gICAgdXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludDogb3B0aW9ucy5wcm94eT8udXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBESVNDT1JEX0FQSV9WRVJTSU9OLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuXG4gICAgcm91dGVzOiBjcmVhdGVSb3V0ZXMoKSxcblxuICAgIGNyZWF0ZUJhc2VIZWFkZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBgRGlzY29yZEJvdCAoaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVubywgdiR7dmVyc2lvbn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gXG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucXVldWVzLmRlbGV0ZShrZXkpXG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyXG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gXG4gICAgICAgIGNvbnN0IG5ld1F1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KG5ld0tleSlcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKVxuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKVxuXG4gICAgICAgICAgcXVldWUud2FpdGluZyA9IFtdXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdXG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0LnF1ZXVlcy5zZXQobmV3S2V5LCBxdWV1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aClcblxuICAgICAgICBpZiAocmF0ZWxpbWl0UGF0aC5idWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGguYnVja2V0SWR9YCwgcmF0ZWxpbWl0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiBzbmFrZV9jYXNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgYWxyZWFkeSBpbiB0aGUgZGlzY29yZCBmb3JtYXQuXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGFkZCBzcGVjaWZpYyBjaGVjayBmb3IgR0VUIG1ldGhvZFxuICAgICAgLy8gU2luY2UgR0VUIGRvZXMgbm90IGFsbG93IGJvZGllc1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZSR7aX1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgcmVjZWl2ZWQgdGhlIGlkZW50aWZpZXIsIGZhbGxiYWNrIHRvIHRoZSBib3QgdG9rZW5cbiAgICAgIGlkZW50aWZpZXIgPz89IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7dXJsfWAsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5lcnJvcihlcnJvcilcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFuZCBjb21wbGV0ZWRcbiAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoOTk5LCBmYWxzZSlcbiAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IDk5OSxcbiAgICAgICAgICBlcnJvcjogJ1Bvc3NpYmxlIG5ldHdvcmsgb3IgcmVxdWVzdCBzaGFwZSBpc3N1ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyByYXJlLCBpdHMgYSBuZXR3b3JrIGdsaXRjaC4gSWYgaXQgb2NjdXJzIGEgbG90IHNvbWV0aGluZyBpcyB3cm9uZy4nLFxuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYClcbiAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50ID49IHJlc3QubWF4UmV0cnlDb3VudCkge1xuICAgICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHJldHJpZXMuYCwgJ3dpdGggcGF5bG9hZDonLCBwYXlsb2FkKVxuICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcbiAgICAgICAgLy8gcHJvY2VzcyB0aGUgcmVzcG9uc2UgdG8gcHJldmVudCBtZW0gbGVha1xuICAgICAgICBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcHRpb25zID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2goYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtyb3V0ZX1gLCByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykpXG5cbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICBjb25zdCBlcnIgPSAoYXdhaXQgcmVzdWx0Lmpzb24oKS5jYXRjaCgoKSA9PiB7fSkpIGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICAgICAgICAvLyBMZWdhY3kgSGFuZGxpbmcgdG8gbm90IGJyZWFrIG9sZCBjb2RlIG9yIHdoZW4gYm9keSBpcyBtaXNzaW5nXG4gICAgICAgICAgaWYgKCFlcnI/LmJvZHkpIHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7ZXJyLm1lc3NhZ2UgPz8gcmVzdWx0LnN0YXR1c1RleHR9YClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyBhd2FpdCByZXN1bHQuanNvbigpIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdGYWlsZWQgdG8gc2VuZCByZXF1ZXN0IHRvIGRpc2NvcmQuJ1xuXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgcm91dGUsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIHJlcXVlc3RCb2R5T3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgKHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/IEpTT04ucGFyc2UoZGF0YS5ib2R5ID8/ICd7fScpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICBlcnJvci5jYXVzZSA9IHJlYXNvblxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXBwbGljYXRpb25FbW9qaShib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmFsbCgpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUsIGJvZHkpIHtcbiAgICAgIGlmIChib2R5Lmljb24pIHtcbiAgICAgICAgYm9keS5pY29uID0gYXdhaXQgdXJsVG9CYXNlNjQoYm9keS5pY29uKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgIGZvcm0uYXBwZW5kKCdmaWxlJywgb3B0aW9ucy5maWxlLmJsb2IsIG9wdGlvbnMuZmlsZS5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBvcHRpb25zLmRlc2NyaXB0aW9uKVxuICAgICAgZm9ybS5hcHBlbmQoJ3RhZ3MnLCBvcHRpb25zLnRhZ3MpXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgeyBib2R5OiBmb3JtLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVGb3J1bVRocmVhZChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9ydW0oY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIGJvZHkgPSB7fSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRJbnZpdGU+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUm9sZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTdGFnZUluc3RhbmNlKGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2VzKCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVdlYmhvb2soY2hhbm5lbElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICBhdmF0YXI6IG9wdGlvbnMuYXZhdGFyID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5hdmF0YXIpIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRW1vamkoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXBwbGljYXRpb25FbW9qaShpZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzKGNoYW5uZWxJZCwgbWVzc2FnZUlkcywgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMuYnVsayhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBtZXNzYWdlczogbWVzc2FnZUlkcy5zbGljZSgwLCAxMDApLm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU93blJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zQWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zRW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmVtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVXNlclJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCB1c2VySWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLnVzZXIoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rKHdlYmhvb2tJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBwZXJtaXNzaW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90UHJvZmlsZShvcHRpb25zKSB7XG4gICAgICBjb25zdCBhdmF0YXIgPSBvcHRpb25zPy5ib3RBdmF0YXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RBdmF0YXJVUkwpIDogb3B0aW9ucz8uYm90QXZhdGFyVVJMXG4gICAgICBjb25zdCBiYW5uZXIgPSBvcHRpb25zPy5ib3RCYW5uZXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RCYW5uZXJVUkwpIDogb3B0aW9ucz8uYm90QmFubmVyVVJMXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZT8udHJpbSgpLFxuICAgICAgICAgIGF2YXRhcixcbiAgICAgICAgICBiYW5uZXIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBib2R5LmlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0RW1vamkoZ3VpbGRJZCwgaWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25FbW9qaShpZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRNZmFMZXZlbChndWlsZElkOiBCaWdTdHJpbmcsIG1mYUxldmVsOiBNZmFMZXZlbHMsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmd1aWxkcy5tZmEoZ3VpbGRJZCksIHsgYm9keTogeyBsZXZlbDogbWZhTGV2ZWwgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm9yaWdpbmFsKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB0eXBlOiBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMuVXBkYXRlTWVzc2FnZSxcbiAgICAgICAgICBkYXRhOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcmVxdWVzdFRvU3BlYWtUaW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHRvcGljLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IGJvZHk6IHsgdG9waWMgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2xsb3dBbm5vdW5jZW1lbnQoc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgd2ViaG9va0NoYW5uZWxJZDogdGFyZ2V0Q2hhbm5lbElkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBY3RpdmVUaHJlYWRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWN0aXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5hcHBsaWNhdGlvbigpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25JbmZvKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb24oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmN1cnJlbnRBdXRob3JpemF0aW9uKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGNoYW5nZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9XG5cbiAgICAgIGlmIChib2R5LmdyYW50VHlwZSA9PT0gJ2NsaWVudF9jcmVkZW50aWFscycpIHtcbiAgICAgICAgcmVzdE9wdGlvbnMuYm9keS5zY29wZSA9IGJvZHkuc2NvcGUuam9pbignICcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2U+KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlbkV4Y2hhbmdlKCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXZva2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5SZXZva2UoKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1ZGl0TG9nKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXVkaXRMb2c+KHJlc3Qucm91dGVzLmd1aWxkcy5hdWRpdGxvZ3MoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLnJlZ2lvbnMoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW5zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHk6IHsgcmVjaXBpZW50SWQ6IHVzZXJJZCB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3JvdXBEbUNoYW5uZWwoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamkoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppKGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaXMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZEVtb2ppW10gfT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZChndWlsZElkLCBvcHRpb25zID0geyBjb3VudHM6IHRydWUgfSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQsIG9wdGlvbnMuY291bnRzKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRzKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBtYWtlUmVxdWVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyB8IHVuZGVmaW5lZCA9IHRva2VuXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8UGFydGlhbDxEaXNjb3JkR3VpbGQ+W10+KHJlc3Qucm91dGVzLmd1aWxkcy51c2VyR3VpbGRzKG9wdGlvbnMpLCBtYWtlUmVxdWVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkUHJldmlldyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkUHJldmlldz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnByZXZpZXcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlYmhvb2tzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnRlZ3JhdGlvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnRlZ3JhdGlvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrPihyZXN0LnJvdXRlcy5zdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2tzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFja1tdPihyZXN0LnJvdXRlcy5zdGlja2VyUGFja3MoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBpbm5lZE1lc3NhZ2VzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBydW5lQ291bnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQcnVuZWRDb3VudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnBydW5lKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlKGd1aWxkSWQsIHJvbGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50cyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50W10+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudFVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxBcnJheTx7IHVzZXI6IERpc2NvcmRVc2VyOyBtZW1iZXI/OiBEaXNjb3JkTWVtYmVyIH0+PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLnVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTZXNzaW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEdhdGV3YXlCb3QoKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VTdGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VTdGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXIoc3RpY2tlcklkOiBCaWdTdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuc3RpY2tlcihzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcj4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVycyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVtYmVycyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlcihpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy51c2VyKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudFVzZXIodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMuY3VycmVudFVzZXIoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJDb25uZWN0aW9ucyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDb25uZWN0aW9uW10+KHJlc3Qucm91dGVzLm9hdXRoMi5jb25uZWN0aW9ucygpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZhbml0eVVybChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZhbml0eVVybD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZhbml0eShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Vm9pY2VSZWdpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJlZ2lvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2sod2ViaG9va0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2VsY29tZVNjcmVlbihndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldEpzb24oZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldFNldHRpbmdzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgam9pblRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVHdWlsZChndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubGVhdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwdWJsaXNoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY3Jvc3Nwb3N0KGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVEbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kRm9sbG93dXBNZXNzYWdlKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2socmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRJbnRlcmFjdGlvblJlc3BvbnNlKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMuY2FsbGJhY2soaW50ZXJhY3Rpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnR5cGluZyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRHdWlsZE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnRbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U2t1cyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNrdVtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc2t1cyhhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgcHJlZmVyU25ha2VDYXNlKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgIGNvbnN0IGNhbWVsaXplciA9IGVuYWJsZWQgPyAoeDogYW55KSA9PiB4IDogY2FtZWxpemVcblxuICAgICAgcmVzdC5nZXQgPSBhc3luYyAodXJsLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnR0VUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wb3N0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LmRlbGV0ZSA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucGF0Y2ggPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnB1dCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdFxuICAgIH0sXG4gIH1cblxuICByZXR1cm4gcmVzdFxufVxuXG5lbnVtIEh0dHBSZXNwb25zZUNvZGUge1xuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb2RlciB0byBjb25zaWRlciB0aGF0IGl0IHdhcyBzdWNjZXNzZnVsLiAqL1xuICBTdWNjZXNzID0gMjAwLFxuICAvKiogUmVxdWVzdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBidXQgRGlzY29yZCByZXR1cm5lZCBhbiBlbXB0eSBib2R5LiAqL1xuICBOb0NvbnRlbnQgPSAyMDQsXG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvcmRlciB0byBjb25zaWRlciB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nLiAqL1xuICBFcnJvciA9IDQwMCxcbiAgLyoqIFRoaXMgcmVxdWVzdCBnb3QgcmF0ZSBsaW1pdGVkLiAqL1xuICBUb29NYW55UmVxdWVzdHMgPSA0MjksXG59XG4iXSwibmFtZXMiOlsiQVVESVRfTE9HX1JFQVNPTl9IRUFERVIiLCJESVNDT1JEX0FQSV9VUkwiLCJESVNDT1JEX0FQSV9WRVJTSU9OIiwiUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSIiwiUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSIiwiUkFURV9MSU1JVF9MSU1JVF9IRUFERVIiLCJSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIiLCJSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiIsIlJBVEVfTElNSVRfU0NPUEVfSEVBREVSIiwiY3JlYXRlUmVzdE1hbmFnZXIiLCJ2ZXJzaW9uIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJnZXRCb3RJZEZyb21Ub2tlbiIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJsb2dnZXIiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJJbmZpbml0eSIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInJvdXRlcyIsImNyZWF0ZVJvdXRlcyIsImNyZWF0ZUJhc2VIZWFkZXJzIiwiY2hlY2tSYXRlTGltaXRzIiwidXJsIiwiaWRlbnRpZmllciIsInJhdGVsaW1pdGVkIiwiZ2V0IiwiZ2xvYmFsIiwibm93IiwiRGF0ZSIsInJlc2V0VGltZXN0YW1wIiwidXBkYXRlVG9rZW5RdWV1ZXMiLCJvbGRUb2tlbiIsIm5ld1Rva2VuIiwiRXJyb3IiLCJoZWFkZXJzIiwidW5kZWZpbmVkIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm5ld0lkZW50aWZpZXIiLCJrZXkiLCJxdWV1ZSIsImVudHJpZXMiLCJkZWxldGUiLCJuZXdLZXkiLCJuZXdRdWV1ZSIsIndhaXRpbmciLCJ1bnNoaWZ0IiwicGVuZGluZyIsImNsZWFudXAiLCJzZXQiLCJyYXRlbGltaXRQYXRoIiwiYnVja2V0SWQiLCJjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQiLCJvYmoiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpdGVtIiwibmV3T2JqIiwiT2JqZWN0Iiwia2V5cyIsInZhbHVlIiwiaW5jbHVkZXMiLCJjYWxjdWxhdGVCaXRzIiwiZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMiLCJuYW1lX2xvY2FsaXphdGlvbnMiLCJkZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zIiwiY2FtZWxUb1NuYWtlQ2FzZSIsInRvU3RyaW5nIiwiY3JlYXRlUmVxdWVzdEJvZHkiLCJ1bmF1dGhvcml6ZWQiLCJyZWFzb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImkiLCJsZW5ndGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImxpbWl0IiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInJvdXRlIiwicGF5bG9hZCIsInJlcXVlc3RCb2R5T3B0aW9ucyIsImxvZ2dpbmdIZWFkZXJzIiwiYXV0aG9yaXphdGlvblNjaGVtZSIsInNwbGl0IiwiZGVidWciLCJyZXNwb25zZSIsImNhdGNoIiwiZXJyb3IiLCJyZWplY3QiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsInRleHQiLCJyZXRyeUNvdW50IiwicmVzZXRBZnRlciIsImRlbGF5IiwiYXJyYXlCdWZmZXIiLCJyZXRyeVJlcXVlc3QiLCJyZXNvbHZlIiwicGFydHMiLCJzZWNvbmRMYXN0UGFydCIsInNwbGljZSIsInByb2Nlc3NSZXF1ZXN0IiwicmVxdWVzdCIsInJ1blRocm91Z2hRdWV1ZSIsInF1ZXVlSWRlbnRpZmllciIsIm1ha2VSZXF1ZXN0IiwiYnVja2V0UXVldWUiLCJRdWV1ZSIsInJlc3VsdCIsImVyciIsImpzb24iLCJtZXNzYWdlIiwiUHJvbWlzZSIsImRhdGEiLCJwYXJzZSIsImNhdXNlIiwiY2FtZWxpemUiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsIm1lc3NhZ2VJZCIsInJlYWN0aW9uIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGQiLCJjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiaWNvbiIsInVybFRvQmFzZTY0IiwidGVtcGxhdGVzIiwiY29kZSIsImNyZWF0ZUd1aWxkU3RpY2tlciIsImZpbGUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJzdGlja2VycyIsImNyZWF0ZUd1aWxkVGVtcGxhdGUiLCJjcmVhdGVGb3J1bVRocmVhZCIsImZvcnVtIiwiY3JlYXRlSW52aXRlIiwiaW52aXRlcyIsImNyZWF0ZVJvbGUiLCJjcmVhdGVTY2hlZHVsZWRFdmVudCIsImV2ZW50cyIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZXMiLCJjcmVhdGVXZWJob29rIiwid2ViaG9va3MiLCJhdmF0YXIiLCJkZWxldGVBdXRvbW9kUnVsZSIsInJ1bGVJZCIsInJ1bGUiLCJkZWxldGVDaGFubmVsIiwiY2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJvdmVyd3JpdGVJZCIsIm92ZXJ3cml0ZSIsImRlbGV0ZUVtb2ppIiwiaWQiLCJlbW9qaSIsImRlbGV0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwicmVzcG9uc2VzIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY29tbWFuZElkIiwiY29tbWFuZCIsImRlbGV0ZUd1aWxkIiwiZ3VpbGQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsIm9uZSIsImRlbGV0ZUd1aWxkU3RpY2tlciIsInN0aWNrZXJJZCIsInN0aWNrZXIiLCJkZWxldGVHdWlsZFRlbXBsYXRlIiwiZGVsZXRlSW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb24iLCJkZWxldGVJbnZpdGUiLCJpbnZpdGVDb2RlIiwiaW52aXRlIiwiZGVsZXRlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2VzIiwibWVzc2FnZUlkcyIsImJ1bGsiLCJtZXNzYWdlcyIsInNsaWNlIiwiZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwib3JpZ2luYWwiLCJkZWxldGVPd25SZWFjdGlvbiIsImRlbGV0ZVJlYWN0aW9uc0FsbCIsImRlbGV0ZVJlYWN0aW9uc0Vtb2ppIiwiZGVsZXRlUm9sZSIsImRlbGV0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRJZCIsImV2ZW50IiwiZGVsZXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlIiwiZGVsZXRlVXNlclJlYWN0aW9uIiwiZGVsZXRlV2ViaG9vayIsIndlYmhvb2tJZCIsImRlbGV0ZVdlYmhvb2tNZXNzYWdlIiwiZGVsZXRlV2ViaG9va1dpdGhUb2tlbiIsIndlYmhvb2siLCJlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb24iLCJlZGl0QXV0b21vZFJ1bGUiLCJlZGl0Qm90UHJvZmlsZSIsImJvdEF2YXRhclVSTCIsImJhbm5lciIsImJvdEJhbm5lclVSTCIsImN1cnJlbnRVc2VyIiwidXNlcm5hbWUiLCJ0cmltIiwiZWRpdENoYW5uZWwiLCJlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMiLCJlZGl0Q2hhbm5lbFBvc2l0aW9ucyIsImVkaXRFbW9qaSIsImVkaXRBcHBsaWNhdGlvbkVtb2ppIiwiZWRpdEZvbGxvd3VwTWVzc2FnZSIsImVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGQiLCJlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGRNZmFMZXZlbCIsIm1mYUxldmVsIiwibWZhIiwibGV2ZWwiLCJlZGl0R3VpbGRTdGlja2VyIiwiZWRpdEd1aWxkVGVtcGxhdGUiLCJlZGl0TWVzc2FnZSIsImVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSIsInR5cGUiLCJJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMiLCJVcGRhdGVNZXNzYWdlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiQnVmZmVyIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0Um9sZSIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldE93blZvaWNlU3RhdGUiLCJnZXRVc2VyVm9pY2VTdGF0ZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VGhyZWFkTWVtYmVycyIsImdldFJlYWN0aW9ucyIsImdldFVzZXIiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwia2lja01lbWJlciIsInBpbk1lc3NhZ2UiLCJwaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJkZWxldGVUZXN0RW50aXRsZW1lbnQiLCJlbnRpdGxlbWVudElkIiwiZW50aXRsZW1lbnQiLCJjb25zdW1lRW50aXRsZW1lbnQiLCJsaXN0U2t1cyIsInNrdXMiLCJwcmVmZXJTbmFrZUNhc2UiLCJlbmFibGVkIiwiY2FtZWxpemVyIiwieCIsIkh0dHBSZXNwb25zZUNvZGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBaUVhQSx1QkFBdUI7ZUFBdkJBOztJQUZBQyxlQUFlO2VBQWZBOztJQURBQyxtQkFBbUI7ZUFBbkJBOztJQU9BQyx3QkFBd0I7ZUFBeEJBOztJ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