@pipeline-builder/api-core 4.1.9 → 4.1.11

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.
@@ -127,6 +127,10 @@ export const REMOTE_AUDIT_ACTIONS = [
127
127
  // cross-tenant copy moves data across customer boundaries, so it needs the
128
128
  // durable, tamper-evident trail — not just the Loki operator line.
129
129
  'registry.image.copy',
130
+ // A plugin image signed + SBOM-attested by the platform's plugin-signing key
131
+ // (api/image-registry POST /internal/plugin-signatures, called by the plugin
132
+ // build worker). The key is what synth trusts, so every use is on the trail.
133
+ 'registry.image.sign',
130
134
  // Messaging (api/message) — admin BROADCAST announcements + destructive
131
135
  // deletes. 1:1 user messages are intentionally NOT audited (noise + they would
132
136
  // pull private content into the trail). `details` carry metadata only
@@ -245,12 +249,20 @@ export function createRemoteAuditClient(config = {}) {
245
249
  * the same key as its original live attempt — the two collapse to one row.
246
250
  */
247
251
  async function deliver(event, serviceName) {
248
- const authHeader = getServiceAuthHeader({ serviceName, orgId: event.orgId, role: 'member' });
249
- const headers = {
250
- 'Authorization': authHeader,
251
- 'Idempotency-Key': event.idempotencyKey ?? randomUUID(),
252
- };
253
252
  try {
253
+ // Minting the token is INSIDE the try on purpose. It can throw — the
254
+ // signing key unreadable, not an EC P-256 key, or `SERVICE_NAME` not
255
+ // matching this client's name — and it used to sit above the `try`, so
256
+ // `deliver` rejected instead of resolving `false` as documented. `record`
257
+ // fires it with a bare `.then` and no `.catch`, so the rejection went
258
+ // unhandled, `runServer`'s crash handler exited, and the pod crash-looped
259
+ // on its first audited write or `authz.denied` event. Now a key problem is
260
+ // just an undeliverable event: spooled, or dropped and metered.
261
+ const authHeader = getServiceAuthHeader({ serviceName, orgId: event.orgId, role: 'member' });
262
+ const headers = {
263
+ 'Authorization': authHeader,
264
+ 'Idempotency-Key': event.idempotencyKey ?? randomUUID(),
265
+ };
254
266
  const response = await client.post('/audit/events', event, { headers, ...AUDIT_REQUEST_OPTIONS });
255
267
  const ok = !!response && response.statusCode >= 200 && response.statusCode < 300;
256
268
  if (!ok) {
@@ -342,6 +354,13 @@ export function createRemoteAuditClient(config = {}) {
342
354
  else {
343
355
  emitCounter('audit_dropped_total', { service: serviceName });
344
356
  }
357
+ }).catch((err) => {
358
+ // Belt and braces. `deliver` no longer rejects, but anything that throws
359
+ // in the continuation would otherwise become an unhandled rejection —
360
+ // and in this process that is a crash, not a log line. An audit event
361
+ // must never take the service down.
362
+ emitCounter('audit_dropped_total', { service: serviceName });
363
+ logger.error('Remote audit record failed unexpectedly', { action: stamped.action, error: errorMessage(err) });
345
364
  });
346
365
  },
347
366
  close() {
@@ -418,4 +437,4 @@ export function createRemoteAuditAccessor(serviceName) {
418
437
  emit: (event) => svc().emit(event),
419
438
  };
420
439
  }
421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9yZW1vdGUtYXVkaXQtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsd0JBQXdCLEVBQXlDLE1BQU0sa0JBQWtCLENBQUM7QUFDbkcsT0FBTyxFQUFFLGdCQUFnQixFQUF1QixNQUFNLGtCQUFrQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBd0IsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFNUM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHFCQUFxQixHQUErRDtJQUN4RixtQkFBbUIsRUFBRSxDQUFDO0lBQ3RCLFVBQVUsRUFBRSxDQUFDO0NBQ2QsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRztJQUNsQyx3QkFBd0I7SUFDeEIscUJBQXFCO0lBQ3JCLHNCQUFzQjtJQUN0Qiw2RUFBNkU7SUFDN0UsK0VBQStFO0lBQy9FLHFFQUFxRTtJQUNyRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YsZUFBZTtJQUNmLDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNw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QUM7QUFlRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsV0FBbUIsRUFBRSxNQUFNLEdBQTRCLEVBQUU7SUFDaEcsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSx3QkFBd0IsRUFBRSxJQUFJLFNBQVMsQ0FBQztJQUN0RSxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0QsT0FBTztRQUNMLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDO1FBQ2xELE1BQU07S0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsV0FBbUI7SUFJM0QsSUFBSSxLQUFLLEdBQThCLElBQUksQ0FBQztJQUM1QyxNQUFNLEdBQUcsR0FBRyxHQUF1QixFQUFFO1FBQ25DLElBQUksQ0FBQyxLQUFLO1lBQUUsS0FBSyxHQUFHLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBQ0YsT0FBTztRQUNMLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNO1FBQ2xDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGNyZWF0ZUVudlJlZGlzQXVkaXRTcG9vbCwgdHlwZSBBdWRpdFNwb29sLCB0eXBlIEF1ZGl0U3Bvb2xFbnRyeSB9IGZyb20gJy4vYXVkaXQtc3Bvb2wuanMnO1xuaW1wb3J0IHsgY3JlYXRlU2FmZUNsaWVudCwgdHlwZSBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaHR0cC1jbGllbnQuanMnO1xuaW1wb3J0IHsgZ2V0U2VydmljZUF1dGhIZWFkZXIsIHNldEF1dGh6RGVuaWFsQXVkaXRvciwgdHlwZSBBdXRoekRlbmlhbEluZm8gfSBmcm9tICcuLi9taWRkbGV3YXJlL2F1dGguanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9uLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdyZW1vdGUtYXVkaXQnKTtcblxuLyoqXG4gKiBBdWRpdCBpbmdlc3QgaXMgYmVzdC1lZmZvcnQgYW5kIE1VU1QgTk9UIGJsb2NrIHRoZSBjYWxsZXIsIGJ1dCBhIHRyYW5zaWVudFxuICogZmFpbHVyZSAoNDI5IC8gNXh4IC8gY29ubmVjdGlvbiByZXNldCAvIHRpbWVvdXQpIHNob3VsZCBub3Qgc2lsZW50bHkgZHJvcCB0aGVcbiAqIHJvdyBvbiB0aGUgZmlyc3QgYXR0ZW1wdC4gRWFjaCBlbWlzc2lvbiBjYXJyaWVzIGEgc3RhYmxlIHBlci1ldmVudFxuICogYElkZW1wb3RlbmN5LUtleWAgKHNlZSBgcmVjb3JkYCksIHNvIHRoZSBodHRwLWNsaWVudCB0cmVhdHMgdGhlIFBPU1QgYXNcbiAqIHJldHJ5LXNhZmUgYW5kIHRoZSBwbGF0Zm9ybSBjYW4gZGVkdXAgYSByZXRyaWVkIGRlbGl2ZXJ5IGluc3RlYWQgb2Ygd3JpdGluZyBhXG4gKiBkdXBsaWNhdGUgcm93LiBCdWRnZXQgaXMga2VwdCBzbWFsbCBzbyBhIGhhcmQtZG93biBwbGF0Zm9ybSBjYW4ndCBiYWNrIHRoZVxuICogd29ya2VyIHVwIGZvciBsb25nOiBiYXNlIGRlbGF5IMOXKDIgcmV0cmllcykgKyBhIGNvdXBsZSBvZiA0MjkgYmFja29mZnMuXG4gKi9cbmNvbnN0IEFVRElUX1JFUVVFU1RfT1BUSU9OUzogUGljazxSZXF1ZXN0T3B0aW9ucywgJ21heFJhdGVMaW1pdFJldHJpZXMnIHwgJ21heFJldHJpZXMnPiA9IHtcbiAgbWF4UmF0ZUxpbWl0UmV0cmllczogMixcbiAgbWF4UmV0cmllczogMixcbn07XG5cbi8qKlxuICogVGhlIGV4YWN0IHNldCBvZiBhdWRpdCBhY3Rpb25zIGEgTk9OLVBMQVRGT1JNIChyZW1vdGUpIHNlcnZpY2UgaXMgcGVybWl0dGVkIHRvXG4gKiBlbWl0IHRocm91Z2ggYFBPU1QgL2F1ZGl0L2V2ZW50c2AuIFRoaXMgaXMgdGhlIFNJTkdMRSBTT1VSQ0Ug4oCUIGBSZW1vdGVBdWRpdEFjdGlvbmBcbiAqIGlzIGRlcml2ZWQgZnJvbSBpdCwgc28gdGhlIHR5cGUgYW5kIHRoZSBydW50aW1lIGFsbG93LWxpc3QgY2FuIG5ldmVyIGRyaWZ0LlxuICpcbiAqIFNFQ1VSSVRZOiBwbGF0Zm9ybSdzIGluZ2VzdCB2YWxpZGF0ZXMgYGFjdGlvbmAgYWdhaW5zdCB0aGlzIHN1YnNldCAodmlhXG4gKiB7QGxpbmsgaXNSZW1vdGVBdWRpdEFjdGlvbn0pLCBOT1QgdGhlIGZ1bGwgcGxhdGZvcm0gYEF1ZGl0QWN0aW9uYCB1bmlvbiDigJQgYVxuICogYHNlcnZpY2U6KmAgdG9rZW4gbXVzdCBub3QgYmUgYWJsZSB0byBmb3JnZSBwbGF0Zm9ybS1hdXRob3JpdHkgZXZlbnRzXG4gKiAoYGFkbWluLnN1cGVyYWRtaW4uZ3JhbnRgLCBgb3JnLm93bmVyc2hpcC50cmFuc2ZlcmAsIGB1c2VyLmxvZ2luYCwg4oCmKS4gS2VlcFxuICogdGhpcyBsaXN0IGZyZWUgb2YgYW55IHBsYXRmb3JtLW9ubHkgYWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUkVNT1RFX0FVRElUX0FDVElPTlMgPSBbXG4gICdwbHVnaW4uYnVpbGQuY29tcGxldGVkJyxcbiAgJ3BsdWdpbi5idWlsZC5mYWlsZWQnLFxuICAncGx1Z2luLmJ1aWxkLnRpbWVvdXQnLFxuICAvLyBQbHVnaW4gbGlmZWN5Y2xlIG11dGF0aW9ucyAoYXBpL3BsdWdpbiByb3V0ZSBoYW5kbGVycykg4oCUIHRoZSBkZXN0cnVjdGl2ZSAvXG4gIC8vIHB1Ymxpc2hpbmcgc3VyZmFjZSB0aGF0IGJ1aWxkcyBhbHJlYWR5IGF1ZGl0J3MgY291bnRlcnBhcnQ6IHJlZ2lzdHJ5IGRlbGV0ZSxcbiAgLy8gc291cmNlIHVwbG9hZCwgYW5kIGRlcGxveS10by1jbHVzdGVyLiBgdGFyZ2V0SWRgIGlzIHRoZSBwbHVnaW4gaWQuXG4gICdwbHVnaW4uZGVsZXRlJyxcbiAgJ3BsdWdpbi5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGx1Z2luIHRvbWJzdG9uZSBvblxuICAvLyBkZW1hbmQgKGZpbmFsaXplcyB3aGF0IHRoZSByZXRlbnRpb24gc3dlZXAgd291bGQgb3RoZXJ3aXNlIGRvIGxhdGVyKS5cbiAgJ3BsdWdpbi5wdXJnZScsXG4gICdwbHVnaW4udXBkYXRlJyxcbiAgJ3BsdWdpbi51cGxvYWQnLFxuICAncGx1Z2luLmRlcGxveScsXG4gIC8vIFBsdWdpbiBidWxrIG11dGF0aW9ucyAoYXBpL3BsdWdpbiBidWxrLXBsdWdpbiByb3V0ZSkgKyBETFEgcHVyZ2UgKGRyb3BzIGFsbFxuICAvLyBkZWFkLWxldHRlcmVkIGJ1aWxkIGpvYnMsIGNyb3NzLW9yZywgc3lzYWRtaW4pLiBgZGV0YWlsc2AgY2FycmllcyBjb3VudHMuXG4gICdwbHVnaW4uYnVsay51cGRhdGUnLFxuICAncGx1Z2luLmJ1bGsuZGVsZXRlJyxcbiAgJ3BsdWdpbi5kbHEucHVyZ2UnLFxuICAvLyBCdWlsZCByZS1ydW5zIGZyb20gdGhlIHF1ZXVlLXRyaWFnZSBzdXJmYWNlOiByZS1lbnF1ZXVlIGEgRkFJTEVEIGJ1aWxkXG4gIC8vIChgcGx1Z2luLmJ1aWxkLnJldHJ5YCkgb3IgYSBkZWFkLWxldHRlcmVkIG9uZSAoYHBsdWdpbi5kbHEucmVwbGF5YCkuIEJvdGhcbiAgLy8gcmUtcnVuIGFuIGltYWdlIGJ1aWxkICsgcGx1Z2luIHBlcnNpc3Qgb24gdGhlIGNhbGxlcidzIGF1dGhvcml0eSwgc28gdGhleVxuICAvLyBhcmUgYXVkaXRlZCBtdXRhdGlvbnM7IGBhZmZlY3RlZE9yZ0lkYCBjYXJyaWVzIHRoZSBqb2IncyBvd25pbmcgb3JnLlxuICAncGx1Z2luLmJ1aWxkLnJldHJ5JyxcbiAgJ3BsdWdpbi5kbHEucmVwbGF5JyxcbiAgLy8gUGlwZWxpbmUgbXV0YXRpb25zIOKAlCBlbWl0dGVkIGJ5IGFwaS9waXBlbGluZSdzIHJvdXRlIGhhbmRsZXJzXG4gIC8vIChjcmVhdGUvdXBkYXRlL2RlbGV0ZSArIENvZGVQaXBlbGluZSBleGVjdXRpb24gdHJpZ2dlci9jYW5jZWwpIGFuZFxuICAvLyBwb3N0ZWQgdG8gcGxhdGZvcm0ncyBgUE9TVCAvYXVkaXQvZXZlbnRzYCBpbmdlc3QuXG4gICdwaXBlbGluZS5jcmVhdGUnLFxuICAncGlwZWxpbmUudXBkYXRlJyxcbiAgJ3BpcGVsaW5lLmRlbGV0ZScsXG4gICdwaXBlbGluZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGlwZWxpbmUgL1xuICAvLyBwaXBlbGluZV90ZW1wbGF0ZSB0b21ic3RvbmUgb24gZGVtYW5kIChmaW5hbGl6ZXMgd2hhdCB0aGUgcmV0ZW50aW9uIHN3ZWVwXG4gIC8vIHdvdWxkIG90aGVyd2lzZSBkbyBsYXRlcikuIGB0YXJnZXRJZGAgaXMgdGhlIHB1cmdlZCBpZC5cbiAgJ3BpcGVsaW5lLnB1cmdlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLmNyZWF0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS51cGRhdGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUuZGVsZXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnJlc3RvcmUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUucHVyZ2UnLFxuICAncGlwZWxpbmUuZXhlY3V0aW9uLnN0YXJ0JyxcbiAgJ3BpcGVsaW5lLmV4ZWN1dGlvbi5jYW5jZWwnLFxuICAvLyBDb2RlUGlwZWxpbmUgQVJOLXJlZ2lzdHJ5IGNvbmZpZyAoYXBpL3BpcGVsaW5lIHJlZ2lzdHJ5IHJvdXRlKSDigJQgcmVnaXN0ZXJpbmcgL1xuICAvLyBkZXJlZ2lzdGVyaW5nIHRoZSBleHRlcm5hbCBDb2RlUGlwZWxpbmUgdGhhdCBiYWNrcyBhIHBpcGVsaW5lIChkZXBsb3ktYWZmZWN0aW5nKS5cbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LnJlZ2lzdGVyJyxcbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LmRlcmVnaXN0ZXInLFxuICAvLyBRdW90YSBhZG1pbmlzdHJhdGlvbiAoYXBpL3F1b3RhKSDigJQgYSBzdXBlcmFkbWluIHJlc2V0dGluZyBhbiBvcmcncyB1c2FnZVxuICAvLyBjb3VudGVyIG9yIGVkaXRpbmcgaXRzIHRpZXIgbGltaXRzLiBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlIG9yZyBjaGFuZ2VkO1xuICAvLyBgZGV0YWlsc2AgY2FycmllcyB0aGUgcXVvdGFUeXBlICsgb2xkL25ldyB2YWx1ZS5cbiAgJ3F1b3RhLnJlc2V0JyxcbiAgJ3F1b3RhLmxpbWl0LnVwZGF0ZScsXG4gIC8vIEEgc3VwZXJhZG1pbiBkZWxldGluZyBhbiBvcmcncyBlbnRpcmUgcXVvdGEgZG9jdW1lbnQuXG4gICdxdW90YS5kZWxldGUnLFxuICAvLyBDb21wbGlhbmNlIGFkbWluaXN0cmF0aW9uIChhcGkvY29tcGxpYW5jZSkg4oCUIHRoZSBlbmZvcmNlbWVudC1wb3N0dXJlIHN1cmZhY2UuXG4gIC8vIEFwcHJvdmluZy9yZXZva2luZyBhbiBleGVtcHRpb24sIHRvZ2dsaW5nL2F1dGhvcmluZy9kZWxldGluZyBhIHJ1bGUsXG4gIC8vIGF1dGhvcmluZy9kZWxldGluZyBhIHBvbGljeSwgbWFuYWdpbmcgc2NhbiBzY2hlZHVsZXMsIGFwcGx5aW5nIGEgdGVtcGxhdGUsXG4gIC8vIG9yIGNhbmNlbGxpbmcgYSBydW5uaW5nIHNjYW4uIGB0YXJnZXRJZGAgaXMgdGhlIHJ1bGUvcG9saWN5L2V4ZW1wdGlvbi9zY2FuIGlkLlxuICAnY29tcGxpYW5jZS5leGVtcHRpb24uYXBwcm92ZScsXG4gICdjb21wbGlhbmNlLmV4ZW1wdGlvbi5yZXZva2UnLFxuICAnY29tcGxpYW5jZS5ydWxlLnRvZ2dsZScsXG4gICdjb21wbGlhbmNlLnJ1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBvbi1kZW1hbmQgaGFyZC1kZWxldGUgKFBVUkdFKSBvZiBhIHNvZnQtZGVsZXRlZCBydWxlL3BvbGljeSB0b21ic3RvbmUg4oCUXG4gIC8vIHRoZSBjYWxsZXItaW5pdGlhdGVkIGNvdW50ZXJwYXJ0IHRvIHRoZSByZXRlbnRpb24gc3dlZXAncyBhdXRvLXB1cmdlLiBEZXN0cm95c1xuICAvLyB0aGUgdG9tYnN0b25lIHBlcm1hbmVudGx5LCBzbyBpdCBjYXJyaWVzIHRoZSBkdXJhYmxlLCB0YW1wZXItZXZpZGVudCB0cmFpbC5cbiAgJ2NvbXBsaWFuY2UucnVsZS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5yZXN0b3JlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnB1cmdlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuZGVsZXRlJyxcbiAgJ2NvbXBsaWFuY2UudGVtcGxhdGUuYXBwbHknLFxuICAvLyBMYXVuY2hpbmcgYW4gb3JnLXdpZGUgcmUtZXZhbHVhdGlvbiAodGhlIGNvdW50ZXJwYXJ0IHRvIGAuY2FuY2VsYCkg4oCUIGl0XG4gIC8vIHBlcnNpc3RzIGEgc2NhbiBhbmQgY2FuIGJsb2NrIGVudGl0aWVzIHRoYXQgcGFzc2VkIGJlZm9yZS5cbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLmNhbmNlbCcsXG4gIC8vIFBlci1vcmcgY29tcGxpYW5jZSBub3RpZmljYXRpb24gc2V0dGluZ3M6IHJlY2lwaWVudHMgKyB0aGUgb3V0Ym91bmQgd2ViaG9va1xuICAvLyBVUkwvc2VjcmV0LiBCZWFyZXItZXF1aXZhbGVudCBjb25maWcgdGhhdCByZWRpcmVjdHMgdmlvbGF0aW9uIG5vdGljZXMsIHNvIGFcbiAgLy8gY2hhbmdlIGNhcnJpZXMgdGhlIGR1cmFibGUgdHJhaWwgKG5ldmVyIHRoZSBzZWNyZXQgaXRzZWxmKS5cbiAgJ2NvbXBsaWFuY2Uubm90aWZpY2F0aW9uLXByZWZlcmVuY2UudXBkYXRlJyxcbiAgLy8gSW1hZ2UtcmVnaXN0cnkgZGVzdHJ1Y3RpdmUgb3BzIChhcGkvaW1hZ2UtcmVnaXN0cnkpIOKAlCBnYXJiYWdlLWNvbGxlY3Rpb25cbiAgLy8gc3dlZXBzIGFuZCBleHBsaWNpdCBpbWFnZS90YWcgZGVsZXRlcyAocHJldmlvdXNseSBvbmx5IGEgbG9nIGxpbmUpLlxuICAncmVnaXN0cnkuZ2MnLFxuICAncmVnaXN0cnkuaW1hZ2UuZGVsZXRlJyxcbiAgLy8gQ3Jvc3MtcmVwbyB0YWcvaW1hZ2UgY29weSAoYXBpL2ltYWdlLXJlZ2lzdHJ5IFBPU1QgL2FwaS9pbWFnZXMvY29weSkuIEFcbiAgLy8gY3Jvc3MtdGVuYW50IGNvcHkgbW92ZXMgZGF0YSBhY3Jvc3MgY3VzdG9tZXIgYm91bmRhcmllcywgc28gaXQgbmVlZHMgdGhlXG4gIC8vIGR1cmFibGUsIHRhbXBlci1ldmlkZW50IHRyYWlsIOKAlCBub3QganVzdCB0aGUgTG9raSBvcGVyYXRvciBsaW5lLlxuICAncmVnaXN0cnkuaW1hZ2UuY29weScsXG4gIC8vIE1lc3NhZ2luZyAoYXBpL21lc3NhZ2UpIOKAlCBhZG1pbiBCUk9BRENBU1QgYW5ub3VuY2VtZW50cyArIGRlc3RydWN0aXZlXG4gIC8vIGRlbGV0ZXMuIDE6MSB1c2VyIG1lc3NhZ2VzIGFyZSBpbnRlbnRpb25hbGx5IE5PVCBhdWRpdGVkIChub2lzZSArIHRoZXkgd291bGRcbiAgLy8gcHVsbCBwcml2YXRlIGNvbnRlbnQgaW50byB0aGUgdHJhaWwpLiBgZGV0YWlsc2AgY2FycnkgbWV0YWRhdGEgb25seVxuICAvLyAoc3ViamVjdC90eXBlL3Njb3BlKSwgTkVWRVIgbWVzc2FnZSBib2R5IGNvbnRlbnQuXG4gICdtZXNzYWdlLmFubm91bmNlbWVudC5jcmVhdGUnLFxuICAnbWVzc2FnZS5kZWxldGUnLFxuICAnbWVzc2FnZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIG9uLWRlbWFuZCBQVVJHRSAocGVybWFuZW50IGhhcmQtZGVsZXRlKSBvZiBhbiBhbHJlYWR5LXNvZnQtZGVsZXRlZFxuICAvLyBtZXNzYWdlIHRvbWJzdG9uZSDigJQgdGhlIGRlc3RydWN0aXZlIGZpbmFsaXplciB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkXG4gIC8vIG90aGVyd2lzZSBwZXJmb3JtIGF0IHRoZSBwdXJnZSBkZWFkbGluZS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHkuXG4gICdtZXNzYWdlLnB1cmdlJyxcbiAgLy8gQmlsbGluZyAoYXBpL2JpbGxpbmcpIOKAlCBzdWJzY3JpcHRpb24gKyBlbnRpdGxlbWVudCBtdXRhdGlvbnMsIG1pcnJvcmVkIHRvIHRoZVxuICAvLyBjZW50cmFsIGF1ZGl0IHRyYWlsICh0aGVzZSBhbHNvIHdyaXRlIHRvIHRoZSBzZXJ2aWNlLWxvY2FsIGJpbGxpbmdfZXZlbnRzXG4gIC8vIGNvbGxlY3Rpb24pLiBgZGV0YWlsc2AgY2FycnkgcGxhbi90aWVyL2FkZG9uIGlkcyBvbmx5IOKAlCBuZXZlciBjYXJkL3BheW1lbnRcbiAgLy8gc2VjcmV0cyBvciBhbiBBV1MgYWNjb3VudCBpZC5cbiAgLy8gU3Vic2NyaXB0aW9uIGxpZmVjeWNsZSBhIENVU1RPTUVSIGRyaXZlcyAodGhlIGFkbWluIGNvdW50ZXJwYXJ0IGlzXG4gIC8vIGBiaWxsaW5nLnRpZXIub3ZlcnJpZGVgKTogc2VsZi1zZXJ2ZSBjcmVhdGUgKGRpcmVjdCBvciBNYXJrZXRwbGFjZSBjbGFpbSksXG4gIC8vIHBsYW4vaW50ZXJ2YWwgY2hhbmdlLCBjYW5jZWwtYXQtcGVyaW9kLWVuZCwgdW5kby1jYW5jZWwsIGNhc2NhZGUgZGVsZXRlLlxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLnVwZGF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5yZWFjdGl2YXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNhbmNlbCcsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5kZWxldGUnLFxuICAnYmlsbGluZy50aWVyLm92ZXJyaWRlJyxcbiAgLy8gT3BlcmF0b3Itb25seSByZXNlZWQgb2YgdGhlIGludm9pY2UgbGVkZ2VyIGZyb20gdGhlIHBheW1lbnQgcHJvdmlkZXInc1xuICAvLyBoaXN0b3J5IChQT1NUIC9iaWxsaW5nL2FkbWluL2JhY2tmaWxsKSDigJQgbXV0YXRlcyBmaW5hbmNlIGRhdGEgZmxlZXQtd2lkZS5cbiAgJ2JpbGxpbmcuYWRkb24uYWRkJyxcbiAgJ2JpbGxpbmcuYWRkb24ucmVtb3ZlJyxcbiAgLy8gU3lzdGVtLWluaXRpYXRlZCByZW1vdmFsIG9mIGEgdGllci1pbmNsdWRlZCBhZGQtb24gb24gYSBwbGFuIHVwZ3JhZGUgKHRoZVxuICAvLyBhY2NvdW50J3MgbmV3IHRpZXIgbm93IGJ1bmRsZXMgdGhlIGZlYXR1cmUpIOKAlCBkaXN0aW5jdCBmcm9tIGEgdXNlci1pbml0aWF0ZWRcbiAgLy8gYHJlbW92ZWAgc28gZmluYW5jZSBjYW4gdGVsbCBhbiBhdXRvLXBydW5lIGZyb20gYSBjdXN0b21lciBhY3Rpb24uXG4gICdiaWxsaW5nLmFkZG9uLnBydW5lJyxcbiAgLy8gRGlzY291bnRzIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kKSDigJQgbWludC9pc3N1ZS9hcHBseS9yZW1vdmUvcmV2b2tlIG9mIGFcbiAgLy8gcHJpY2UgY291cG9uIG9yIHVzYWdlIGNyZWRpdC4gYGRldGFpbHNgIGNhcnJ5IHRoZSBkaXNjb3VudCBpZCArIGtpbmQvdmFsdWVcbiAgLy8gb25seSwgbmV2ZXIgdGhlIG9wYXF1ZSB0b2tlbiBvciBzaWduaW5nIGtleS5cbiAgJ2JpbGxpbmcuZGlzY291bnQuZ2VuZXJhdGUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5pc3N1ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50LmFwcGx5JyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmVtb3ZlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmV2b2tlJyxcbiAgLy8gUHJvbW90aW9ucyAoZG9jcy9iaWxsaW5nLWRpc2NvdW50cy5tZCNwcm9tb3Rpb25zKSDigJQgcnVsZS1kcml2ZW4gYXV0by1ncmFudFxuICAvLyBjYW1wYWlnbnMuIGBkZXRhaWxzYCBjYXJyeSB0aGUgcHJvbW90aW9uIGlkICsgY2VudHMvZXZlbnQgb25seS5cbiAgJ2JpbGxpbmcucHJvbW90aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24ucmV2b2tlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmdyYW50JyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmFjdGl2YXRlJyxcbiAgLy8gVXNhZ2UtY3JlZGl0IHJlYWxpemF0aW9uIOKAlCBhIGN1c3RvbWVyL2NvbXBsaWFuY2UtdmlzaWJsZSByZWNvcmQgb2YgY3JlZGl0XG4gIC8vIG1vdmVtZW50OiBgY29uc3VtZWRgIChNYXJrZXRwbGFjZSBtZXRlcmVkIGRyYXdkb3duKSwgYGV4aGF1c3RlZGAgKGJhbGFuY2UgaGl0XG4gIC8vIHplcm8pLCBhbmQgYSBjb21ibyBlbmRpbmcuIGBkZXRhaWxzYCBjYXJyeSBjZW50cy9pZHMgb25seSwgbm8gcGF5bWVudCBzZWNyZXRzLlxuICAnYmlsbGluZy5jcmVkaXQuY29uc3VtZWQnLFxuICAnYmlsbGluZy5jcmVkaXQuZXhoYXVzdGVkJyxcbiAgJ2JpbGxpbmcuY29tYm8uZXhwaXJlZCcsXG4gIC8vIFJlcG9ydGluZyAoYXBpL3JlcG9ydGluZykg4oCUIHRoZSB0aHJlZSByZXBvcnRpbmcgbXV0YXRpb25zIHdob3NlIGVmZmVjdFxuICAvLyBvdXRsaXZlcyBhIHJlcXVlc3QgbG9nOiB0aGUgcGVyLW9yZyBjb3JyZWxhdGlvbi13aW5kb3cgY29uZmlnIHdyaXRlLCBhXG4gIC8vIHBvc3QtZGVwbG95IG91dGNvbWUgbWFya2VyIChpdCBtb3ZlcyB0aGUgb3JnJ3MgRE9SQSBDRlIvTVRUUiksIGFuZCB0aGVcbiAgLy8gaW5ib3VuZCBiaWxsaW5n4oaScmVwb3J0aW5nIHJldGVudGlvbi1lbnRpdGxlbWVudCBzeW5jIChhIHJldGVudGlvbiBjdXQgaXMgYVxuICAvLyBkYXRhLWRlc3Ryb3lpbmcgY2hhbmdlIGFwcGxpZWQgYnkgdGhlIG5leHQgc3dlZXApLiBgZGV0YWlsc2AgY2FycnkgdGhlXG4gIC8vIHNldHRpbmdzL291dGNvbWUgdmFsdWVzIG9ubHkuXG4gICdyZXBvcnRpbmcuc2V0dGluZ3MudXBkYXRlJyxcbiAgJ3JlcG9ydGluZy5kZXBsb3ltZW50Lm91dGNvbWUnLFxuICAncmVwb3J0aW5nLnJldGVudGlvbi5zeW5jJyxcbiAgLy8gRGVuaWVkIGF1dGhvcml6YXRpb24gYXR0ZW1wdCDigJQgZW1pdHRlZCBiZXN0LWVmZm9ydCBieSB0aGUgc2hhcmVkXG4gIC8vIGByZXF1aXJlUGVybWlzc2lvbmAgLyBgcmVxdWlyZVN5c3RlbUFkbWluYCBnYXRlIHdoZW4gYSBzdGF0ZS1jaGFuZ2luZ1xuICAvLyAobm9uLUdFVCkgcmVxdWVzdCBpcyByZWplY3RlZCwgc28gcHJvYmluZy9lc2NhbGF0aW9uIGF0dGVtcHRzIGFyZSB2aXNpYmxlXG4gIC8vIHJhdGhlciB0aGFuIGludmlzaWJsZS4gYGRldGFpbHNgIGNhcnJpZXMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb24gKyBwYXRoO1xuICAvLyBgb3V0Y29tZWAgaXMgJ2ZhaWx1cmUnLlxuICAnYXV0aHouZGVuaWVkJyxcbiAgLy8gXCJBc2tcIiBhc3Npc3RhbnQgYWN0aXZpdHkg4oCUIHZpc2liaWxpdHkgaW50byB3aGF0IHRoZSBhc3Npc3RhbnQgZGlkIG9uIGEgdXNlcidzXG4gIC8vIGJlaGFsZi4gYGFzay5xdWVyeWAgaXMgYSByZWFkLW9ubHkgaG93LXRvIHR1cm47IGBhc2suYWdlbnQudHVybmAgaXMgYSB0b29sLWNhbGxpbmdcbiAgLy8gdHVybi4gYGRldGFpbHNgIGNhcnJ5IFNBRkUgTUVUQURBVEEgT05MWSAodG9vbHMgdXNlZCwgcHJvcG9zYWwga2luZHMsIHF1ZXJ5XG4gIC8vIGxlbmd0aCwgb3V0Y29tZSksIG5ldmVyIHRoZSByYXcgcXVlcnkgdGV4dC5cbiAgJ2Fzay5xdWVyeScsXG4gICdhc2suYWdlbnQudHVybicsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZW1vdGVBdWRpdEFjdGlvbiA9IHR5cGVvZiBSRU1PVEVfQVVESVRfQUNUSU9OU1tudW1iZXJdO1xuXG4vKiogV2hldGhlciBgdmFsdWVgIGlzIGFuIGFjdGlvbiBhIHJlbW90ZSBzZXJ2aWNlIG1heSBlbWl0ICh0aGUgaW5nZXN0IGFsbG93LWxpc3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlQXVkaXRBY3Rpb24odmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFJlbW90ZUF1ZGl0QWN0aW9uIHtcbiAgcmV0dXJuIChSRU1PVEVfQVVESVRfQUNUSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZUF1ZGl0RXZlbnQge1xuICBhY3Rpb246IFJlbW90ZUF1ZGl0QWN0aW9uO1xuICBhY3RvcklkOiBzdHJpbmc7XG4gIGFjdG9yRW1haWw/OiBzdHJpbmc7XG4gIG9yZ0lkPzogc3RyaW5nO1xuICBhZmZlY3RlZE9yZ0lkPzogc3RyaW5nO1xuICB0YXJnZXRUeXBlPzogc3RyaW5nO1xuICB0YXJnZXRJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIERpZCB0aGUgYXVkaXRlZCBhY3Rpb24gc3VjY2VlZCBvciBmYWlsPyBEZWZhdWx0cyB0byAnc3VjY2Vzcycgd2hlbiBvbWl0dGVkXG4gICAqICh0aGUgcGxhdGZvcm0gaW5nZXN0IGFwcGxpZXMgdGhlIHNhbWUgZGVmYXVsdCkuIERlbmllZC1hdXRoeiBldmVudHMgc2V0XG4gICAqICdmYWlsdXJlJyBzbyBhIHJldmlld2VyIGNhbiBmaWx0ZXIgYXR0ZW1wdHMgZnJvbSBjb21wbGV0ZWQgYWN0aW9ucy5cbiAgICovXG4gIG91dGNvbWU/OiAnc3VjY2VzcycgfCAnZmFpbHVyZSc7XG4gIC8qKlxuICAgKiBXaGVuIHRoZSBhdWRpdGVkIGFjdGlvbiBhY3R1YWxseSBPQ0NVUlJFRCAoSVNPLTg2MDEpLCBzdGFtcGVkIGF0IGVtaXNzaW9uLlxuICAgKiBUaGUgcGxhdGZvcm0gc3RvcmVzIHRoaXMgZm9yIHJldmlld2VyczsgaXQgaXMgTk9UIHRoZSBjaGFpbi1vcmRlcmluZyBmaWVsZFxuICAgKiAodGhlIHRhbXBlci1ldmlkZW50IGNoYWluIG9yZGVycyBieSBpbmdlc3QvYGNyZWF0ZWRBdGApLiBJdCBtYXR0ZXJzIGZvclxuICAgKiBTUE9PTEVEIGV2ZW50czogb25lIGJ1ZmZlcmVkIGR1cmluZyBhIHBsYXRmb3JtIG91dGFnZSBpcyByZS1kZWxpdmVyZWQg4oCUIGFuZFxuICAgKiBzbyBjaGFpbmVkIOKAlCBsYXRlciwgYnV0IGBvY2N1cnJlZEF0YCBwcmVzZXJ2ZXMgd2hlbiBpdCByZWFsbHkgaGFwcGVuZWQuXG4gICAqL1xuICBvY2N1cnJlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogU3RhYmxlIHBlci1lbWlzc2lvbiBkZWR1cCBrZXkgKGFsc28gc2VudCBhcyB0aGUgYElkZW1wb3RlbmN5LUtleWAgaGVhZGVyIHRoZVxuICAgKiBwbGF0Zm9ybSBpbmdlc3QgZGVkdXBzIG9uKS4gU3RhbXBlZCBieSBgcmVjb3JkKClgIGFuZCBjYXJyaWVkIG9uIHRoZSBzcG9vbGVkXG4gICAqIGNvcHkgc28gYSBsaXZlIGF0dGVtcHQgYW5kIGl0cyBsYXRlciByZS1kZWxpdmVyeSBjb2xsYXBzZSB0byBPTkUgc3RvcmVkIHJvdy5cbiAgICovXG4gIGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xuICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogQ2xpZW50IGZvciBQT1NUaW5nIGF1ZGl0IGV2ZW50cyB0byB0aGUgcGxhdGZvcm0ncyBgL2F1ZGl0LWV2ZW50c2AgaW5nZXN0XG4gKiBlbmRwb2ludC4gTWludHMgYSBmcmVzaCBzZXJ2aWNlIHRva2VuIHBlciBjYWxsICg1IG1pbiBUVEwpICB0aGVyZSdzIG5vXG4gKiBtZWFuaW5nZnVsIGNhY2hpbmcgYmVuZWZpdCB3aGVuIGVtaXNzaW9ucyBhcmUgc3BhcnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZUF1ZGl0Q2xpZW50IHtcbiAgLyoqXG4gICAqIEZpcmUtYW5kLWZvcmdldCBhdWRpdCBlbWlzc2lvbi4gRmFpbHVyZXMgYXJlIGxvZ2dlZCBhdCB3YXJuIGxldmVsIGJ1dFxuICAgKiBuZXZlciB0aHJvd24gIHRoZSBvcmlnaW5hdGluZyBhY3Rpb24gKGUuZy4gYSBwbHVnaW4gYnVpbGQpIGhhcyBpdHNcbiAgICogb3duIHN1Y2Nlc3MvZmFpbHVyZSBwYXRoIHRoYXQgc2hvdWxkbid0IGdldCBwb2xsdXRlZCBieSBhIGZsYWt5IGF1ZGl0XG4gICAqIGRvd25zdHJlYW0uIFdoZW4gYSB7QGxpbmsgQXVkaXRTcG9vbH0gaXMgY29uZmlndXJlZCwgYW4gZW1pc3Npb24gdGhhdFxuICAgKiBleGhhdXN0cyBpdHMgbGl2ZSByZXRyaWVzIGlzIGJ1ZmZlcmVkIGFuZCByZS1kZWxpdmVyZWQgbGF0ZXIgaW5zdGVhZCBvZlxuICAgKiBiZWluZyBkcm9wcGVkLlxuICAgKi9cbiAgcmVjb3JkKGV2ZW50OiBSZW1vdGVBdWRpdEV2ZW50LCBzZXJ2aWNlTmFtZTogc3RyaW5nKTogdm9pZDtcbiAgLyoqIFN0b3AgdGhlIGJhY2tncm91bmQgc3Bvb2wtZHJhaW4gdGltZXIgKGlmIGFueSkuIFNhZmUgdG8gY2FsbCByZXBlYXRlZGx5LiAqL1xuICBjbG9zZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSByZW1vdGUgYXVkaXQgY2xpZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZUF1ZGl0Q2xpZW50Q29uZmlnIHtcbiAgLyoqIFBsYXRmb3JtIHNlcnZpY2UgaG9zdCAoZGVmYXVsdDogZW52IFBMQVRGT1JNX1NFUlZJQ0VfSE9TVCBvciAncGxhdGZvcm0nKSAqL1xuICBob3N0Pzogc3RyaW5nO1xuICAvKiogUGxhdGZvcm0gc2VydmljZSBwb3J0IChkZWZhdWx0OiBlbnYgUExBVEZPUk1fU0VSVklDRV9QT1JUIG9yIDMwMDApICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBSZXF1ZXN0IHRpbWVvdXQgbXMgKGRlZmF1bHQgMzAwMCAgYXVkaXQgc2hvdWxkbid0IGJsb2NrIHRoZSB3b3JrZXIpLiAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKipcbiAgICogT3B0aW9uYWwgZHVyYWJsZSBidWZmZXIuIFdoZW4gc2V0LCBhbiBlbWlzc2lvbiB0aGF0IGV4aGF1c3RzIGl0cyBsaXZlIHJldHJ5XG4gICAqIGJ1ZGdldCAoc3VzdGFpbmVkIHBsYXRmb3JtIG91dGFnZSkgaXMgc3Bvb2xlZCBhbmQgcmUtZGVsaXZlcmVkIOKAlCBvbiB0aGUgbmV4dFxuICAgKiBzdWNjZXNzZnVsIGVtaXNzaW9uIGFuZCBvbiBhIHBlcmlvZGljIHRpbWVyIOKAlCBpbnN0ZWFkIG9mIGJlaW5nIGxvc3QuXG4gICAqL1xuICBzcG9vbD86IEF1ZGl0U3Bvb2w7XG4gIC8qKiBTcG9vbC1kcmFpbiBpbnRlcnZhbCBtcyAoZGVmYXVsdCAzMF8wMDApLiBPbmx5IHVzZWQgd2hlbiBgc3Bvb2xgIGlzIHNldC4gKi9cbiAgZHJhaW5JbnRlcnZhbE1zPzogbnVtYmVyO1xuICAvKiogTWF4IGVudHJpZXMgZHJhaW5lZCBwZXIgc3dlZXAgKGRlZmF1bHQgMTAwKS4gKi9cbiAgZHJhaW5CYXRjaFNpemU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IGEgcmVtb3RlLWF1ZGl0IGNsaWVudCB0YXJnZXRlZCBhdCB0aGUgcGxhdGZvcm0gc2VydmljZS5cbiAqXG4gKiBVc2VkIGJ5IGFwaS9wbHVnaW4ncyBidWlsZCB3b3JrZXIgdG8gcHVzaCBgcGx1Z2luLmJ1aWxkLipgIGV2ZW50cyBpbnRvXG4gKiB0aGUgcGxhdGZvcm0ncyBNb25nb0RCIGBhdWRpdF9ldmVudHNgIGNvbGxlY3Rpb24uIE90aGVyIHNlcnZpY2VzXG4gKiB3aXRoIHdvcmtlci1zdHlsZSBlbWl0dGVycyBjYW4gdXNlIHRoZSBzYW1lIGNsaWVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYXVkaXRDbGllbnQgPSBjcmVhdGVSZW1vdGVBdWRpdENsaWVudCgpO1xuICogYXVkaXRDbGllbnQucmVjb3JkKHtcbiAqIGFjdGlvbjogJ3BsdWdpbi5idWlsZC5jb21wbGV0ZWQnLFxuICogYWN0b3JJZDogJ3VzZXItMTIzJyxcbiAqIG9yZ0lkOiAnb3JnLWFjbWUnLFxuICogdGFyZ2V0VHlwZTogJ3BsdWdpbicsXG4gKiB0YXJnZXRJZDogJ3BsdWdpbi1hYmMnLFxuICogZGV0YWlsczogeyBuYW1lOiAnbXktcGx1Z2luJywgdmVyc2lvbjogJzEuMC4wJyB9LFxuICogfSwgJ3BsdWdpbicpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZW1vdGVBdWRpdENsaWVudChjb25maWc6IFJlbW90ZUF1ZGl0Q2xpZW50Q29uZmlnID0ge30pOiBSZW1vdGVBdWRpdENsaWVudCB7XG4gIGNvbnN0IHNlcnZpY2VDb25maWc6IFNlcnZpY2VDb25maWcgPSB7XG4gICAgaG9zdDogY29uZmlnLmhvc3QgPz8gcHJvY2Vzcy5lbnYuUExBVEZPUk1fU0VSVklDRV9IT1NUID8/ICdwbGF0Zm9ybScsXG4gICAgcG9ydDogY29uZmlnLnBvcnQgPz8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExBVEZPUk1fU0VSVklDRV9QT1JUID8/ICczMDAwJywgMTApLFxuICAgIHRpbWVvdXQ6IGNvbmZpZy50aW1lb3V0ID8/IDMwMDAsXG4gIH07XG4gIGNvbnN0IGNsaWVudCA9IGNyZWF0ZVNhZmVDbGllbnQoc2VydmljZUNvbmZpZyk7XG4gIGNvbnN0IHNwb29sID0gY29uZmlnLnNwb29sO1xuICBjb25zdCBkcmFpbkJhdGNoU2l6ZSA9IGNvbmZpZy5kcmFpbkJhdGNoU2l6ZSA/PyAxMDA7XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgT05FIGxpdmUgZGVsaXZlcnkuIFJlc29sdmVzIGB0cnVlYCBvbiBhIDJ4eCBhY2NlcHQsIGBmYWxzZWAgb24gYW55XG4gICAqIG5vbi0yeHggLyB0aHJvd24gZXJyb3IgKHRoZSBodHRwLWNsaWVudCBoYXMgYWxyZWFkeSBhcHBsaWVkIHRoZSByZXRyeVxuICAgKiBidWRnZXQpLiBBIHN0YWJsZSBwZXItZW1pc3Npb24gYElkZW1wb3RlbmN5LUtleWAgbWFrZXMgdGhpcyBub24taWRlbXBvdGVudFxuICAgKiBQT1NUIHJldHJ5LXNhZmUgYW5kIGxldHMgdGhlIHBsYXRmb3JtIGluZ2VzdCBkZWR1cCBhIHJlLWRlbGl2ZXJlZCBldmVudFxuICAgKiBpbnN0ZWFkIG9mIHdyaXRpbmcgYSBkdXBsaWNhdGUgYXVkaXQgcm93IChhbmQgZHVwbGljYXRlIGNoYWluIGxpbmspLlxuICAgKiBgSWRlbXBvdGVuY3ktS2V5YCBpcyBkZXJpdmVkIGZyb20gdGhlIGV2ZW50IHNvIGEgU1BPT0xFRCByZS1kZWxpdmVyeSByZXVzZXNcbiAgICogdGhlIHNhbWUga2V5IGFzIGl0cyBvcmlnaW5hbCBsaXZlIGF0dGVtcHQg4oCUIHRoZSB0d28gY29sbGFwc2UgdG8gb25lIHJvdy5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIGRlbGl2ZXIoZXZlbnQ6IFJlbW90ZUF1ZGl0RXZlbnQsIHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBhdXRoSGVhZGVyID0gZ2V0U2VydmljZUF1dGhIZWFkZXIoeyBzZXJ2aWNlTmFtZSwgb3JnSWQ6IGV2ZW50Lm9yZ0lkLCByb2xlOiAnbWVtYmVyJyB9KTtcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ0F1dGhvcml6YXRpb24nOiBhdXRoSGVhZGVyLFxuICAgICAgJ0lkZW1wb3RlbmN5LUtleSc6IGV2ZW50LmlkZW1wb3RlbmN5S2V5ID8/IHJhbmRvbVVVSUQoKSxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KCcvYXVkaXQvZXZlbnRzJywgZXZlbnQsIHsgaGVhZGVycywgLi4uQVVESVRfUkVRVUVTVF9PUFRJT05TIH0pO1xuICAgICAgY29uc3Qgb2sgPSAhIXJlc3BvbnNlICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgPCAzMDA7XG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdSZW1vdGUgYXVkaXQgaW5nZXN0IG5vbi1vaycsIHsgYWN0aW9uOiBldmVudC5hY3Rpb24sIHN0YXR1c0NvZGU6IHJlc3BvbnNlPy5zdGF0dXNDb2RlIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9rO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1JlbW90ZSBhdWRpdCBpbmdlc3QgdGhyZXcnLCB7IGFjdGlvbjogZXZlbnQuYWN0aW9uLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU2VyaWFsaXplIHNwb29sIGRyYWlucyBzbyBhIHBlcmlvZGljIHRpY2sgYW5kIGFuIG9uLXN1Y2Nlc3MgZHJhaW4gY2FuJ3QgYm90aFxuICAvLyBwdWxsIHRoZSBzYW1lIGJhdGNoLiBTdG9wcyBlYXJseSB0aGUgbW9tZW50IGEgcmUtZGVsaXZlcnkgZmFpbHMgKHBsYXRmb3JtXG4gIC8vIHN0aWxsIGRvd24pIHNvIHdlIGRvbid0IGhhbW1lciBpdCBvciBjaHVybiB0aGUgYnVmZmVyLlxuICBsZXQgZHJhaW5pbmcgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gZHJhaW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFzcG9vbCB8fCBkcmFpbmluZykgcmV0dXJuO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICBjb25zdCBiYXRjaCA9IGF3YWl0IHNwb29sLnRha2UoZHJhaW5CYXRjaFNpemUpO1xuICAgICAgICBpZiAoYmF0Y2gubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGRlbGl2ZXJlZDogQXVkaXRTcG9vbEVudHJ5W10gPSBbXTtcbiAgICAgICAgY29uc3QgZmFpbGVkOiBBdWRpdFNwb29sRW50cnlbXSA9IFtdO1xuICAgICAgICBsZXQgcGxhdGZvcm1Eb3duID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgYmF0Y2gpIHtcbiAgICAgICAgICBpZiAocGxhdGZvcm1Eb3duKSB7IGZhaWxlZC5wdXNoKGVudHJ5KTsgY29udGludWU7IH1cbiAgICAgICAgICBjb25zdCBvayA9IGF3YWl0IGRlbGl2ZXIoZW50cnkuZXZlbnQsIGVudHJ5LnNlcnZpY2VOYW1lKTtcbiAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgIGRlbGl2ZXJlZC5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgIGVtaXRDb3VudGVyKCdhdWRpdF9zcG9vbF9yZWRlbGl2ZXJlZF90b3RhbCcsIHsgc2VydmljZTogZW50cnkuc2VydmljZU5hbWUgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBsYXRmb3JtRG93biA9IHRydWU7XG4gICAgICAgICAgICBmYWlsZWQucHVzaChlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEFja25vd2xlZGdlIHRoZSBkZWxpdmVyZWQgcHJlZml4IHNvIGl0IGNsZWFycyB0aGUgaW4tcHJvZ3Jlc3MgbGlzdDsgdGhlXG4gICAgICAgIC8vIHJlbGlhYmxlIHRha2UoKSBtb3ZlZCB0aGUgd2hvbGUgYmF0Y2ggdGhlcmUsIHNvIHVuYWNrZWQgc3Vydml2b3JzIGFyZVxuICAgICAgICAvLyByZWNsYWltZWQgYnkgcmVjb3ZlcigpIGFmdGVyIGEgY3Jhc2ggcmF0aGVyIHRoYW4gYmVpbmcgc2lsZW50bHkgbG9zdC5cbiAgICAgICAgaWYgKGRlbGl2ZXJlZC5sZW5ndGggPiAwKSBhd2FpdCBzcG9vbC5hY2soZGVsaXZlcmVkKTtcbiAgICAgICAgaWYgKGZhaWxlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYXdhaXQgc3Bvb2wucmVxdWV1ZShmYWlsZWQpO1xuICAgICAgICAgIHJldHVybjsgLy8gc3RpbGwgZG93biDigJQgdHJ5IGFnYWluIG9uIHRoZSBuZXh0IHRpY2tcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0F1ZGl0IHNwb29sIGRyYWluIGZhaWxlZCcsIHsgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGxldCBkcmFpblRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCB1bmRlZmluZWQ7XG4gIGlmIChzcG9vbCkge1xuICAgIC8vIFJlY2xhaW0gYW55IGJhdGNoIHN0cmFuZGVkIG9uIHRoZSBpbi1wcm9ncmVzcyBsaXN0IGJ5IGEgcHJpb3IgY3Jhc2gsIHRoZW5cbiAgICAvLyBhdHRlbXB0IHRvIGZsdXNoIGl0LiBCb3RoIGFyZSBiZXN0LWVmZm9ydCAodGhlIHNwb29sIHN3YWxsb3dzIGl0cyBlcnJvcnMpLlxuICAgIHZvaWQgc3Bvb2wucmVjb3ZlcigpLnRoZW4oKCkgPT4gZHJhaW4oKSk7XG4gICAgZHJhaW5UaW1lciA9IHNldEludGVydmFsKCgpID0+IHsgdm9pZCBkcmFpbigpOyB9LCBjb25maWcuZHJhaW5JbnRlcnZhbE1zID8/IDMwXzAwMCk7XG4gICAgLy8gRG9uJ3QgbGV0IHRoZSBkcmFpbiB0aW1lciBrZWVwIHRoZSBwcm9jZXNzIGFsaXZlIG9uIHNodXRkb3duLlxuICAgIChkcmFpblRpbWVyIGFzIHVua25vd24gYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZWNvcmQoZXZlbnQsIHNlcnZpY2VOYW1lKSB7XG4gICAgICAvLyBTdGFtcCB3aGVuIHRoZSBhY3Rpb24gYWN0dWFsbHkgb2NjdXJyZWQgKHN1cnZpdmVzIHNwb29sIGRlbGF5KSBhbmQgcGluIGFcbiAgICAgIC8vIHN0YWJsZSBpZGVtcG90ZW5jeSBrZXkgc28gYSBsaXZlIGF0dGVtcHQgYW5kIGl0cyBzcG9vbGVkIHJldHJ5IGRlZHVwLlxuICAgICAgY29uc3Qgc3RhbXBlZDogUmVtb3RlQXVkaXRFdmVudCA9IHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIG9jY3VycmVkQXQ6IGV2ZW50Lm9jY3VycmVkQXQgPz8gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBpZGVtcG90ZW5jeUtleTogZXZlbnQuaWRlbXBvdGVuY3lLZXkgPz8gcmFuZG9tVVVJRCgpLFxuICAgICAgfTtcbiAgICAgIHZvaWQgZGVsaXZlcihzdGFtcGVkLCBzZXJ2aWNlTmFtZSkudGhlbigob2spID0+IHtcbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgZW1pdENvdW50ZXIoJ2F1ZGl0X2VtaXR0ZWRfdG90YWwnLCB7IHNlcnZpY2U6IHNlcnZpY2VOYW1lLCBvdXRjb21lOiBzdGFtcGVkLm91dGNvbWUgPz8gJ3N1Y2Nlc3MnIH0pO1xuICAgICAgICAgIGlmIChzcG9vbCkgdm9pZCBkcmFpbigpOyAvLyBwbGF0Zm9ybSBpcyByZWFjaGFibGUg4oCUIGZsdXNoIGFueSBiYWNrbG9nXG4gICAgICAgIH0gZWxzZSBpZiAoc3Bvb2wpIHtcbiAgICAgICAgICB2b2lkIHNwb29sLmVucXVldWUoeyBldmVudDogc3RhbXBlZCwgc2VydmljZU5hbWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW1pdENvdW50ZXIoJ2F1ZGl0X2Ryb3BwZWRfdG90YWwnLCB7IHNlcnZpY2U6IHNlcnZpY2VOYW1lIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNsb3NlKCkge1xuICAgICAgaWYgKGRyYWluVGltZXIpIHsgY2xlYXJJbnRlcnZhbChkcmFpblRpbWVyKTsgZHJhaW5UaW1lciA9IHVuZGVmaW5lZDsgfVxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIHN0YW5kYXJkIGBhdXRoei5kZW5pZWRgIHNpbmsgdXNlZCBieSBldmVyeSByZW1vdGUtYXVkaXQgc2VydmljZVxuICogKHBpcGVsaW5lLCBwbHVnaW4sIGNvbXBsaWFuY2UsIHF1b3RhLCBtZXNzYWdlLCBiaWxsaW5nLCByZXBvcnRpbmcsIOKApikuXG4gKlxuICogVGhlIHNoYXJlZCBgcmVxdWlyZUF1dGhgIGdhdGUgZm9yd2FyZHMgZWFjaCBERU5JRUQgc3RhdGUtY2hhbmdpbmcgcmVxdWVzdCB0b1xuICogdGhlIGF1ZGl0b3Igc2V0IHZpYSB7QGxpbmsgc2V0QXV0aHpEZW5pYWxBdWRpdG9yfTsgdGhpcyB3aXJlcyB0aGF0IGhvb2sgdG8gdGhlXG4gKiBzZXJ2aWNlJ3Mge0BsaW5rIFJlbW90ZUF1ZGl0Q2xpZW50fSwgZm9yd2FyZGluZyBhIGBmYWlsdXJlYC1vdXRjb21lXG4gKiBgYXV0aHouZGVuaWVkYCBldmVudCBzbyBwcm9iaW5nIC8gcHJpdmlsZWdlLWVzY2FsYXRpb24gYXR0ZW1wdHMgbGVhdmUgYSB0cmFpbC5cbiAqIEVtaXNzaW9uIGlzIGZpcmUtYW5kLWZvcmdldCAodGhlIGNsaWVudCBuZXZlciB0aHJvd3MpLiBgZ2V0Q2xpZW50YCBpcyBhIGdldHRlclxuICogc28gdGhlIGNsaWVudCBzdGF5cyBsYXppbHkgY29uc3RydWN0ZWQgKHNlcnZpY2VzIG1lbW9pemUgaXQgb24gZmlyc3QgdXNlKS5cbiAqXG4gKiBQbGF0Zm9ybSBpcyBpbnRlbnRpb25hbGx5IE5PVCBhIGNhbGxlciDigJQgaXQgaXMgdGhlIGF1ZGl0IGF1dGhvcml0eSBhbmQgd3JpdGVzXG4gKiBgYXV0aHouZGVuaWVkYCBzdHJhaWdodCB0byBpdHMgbG9jYWwgc3RvcmUgKHdpdGggYGFmZmVjdGVkT3JnSWRgKSwgbm90IHRocm91Z2hcbiAqIGEgUmVtb3RlQXVkaXRDbGllbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXJlQXV0aHpEZW5pYWxBdWRpdG9yKHNlcnZpY2VOYW1lOiBzdHJpbmcsIGdldENsaWVudDogKCkgPT4gUmVtb3RlQXVkaXRDbGllbnQpOiB2b2lkIHtcbiAgc2V0QXV0aHpEZW5pYWxBdWRpdG9yKChpbmZvOiBBdXRoekRlbmlhbEluZm8pID0+IGdldENsaWVudCgpLnJlY29yZCh7XG4gICAgYWN0aW9uOiAnYXV0aHouZGVuaWVkJyxcbiAgICBhY3RvcklkOiBpbmZvLmFjdG9ySWQgPz8gJ2Fub255bW91cycsXG4gICAgYWN0b3JFbWFpbDogaW5mby5hY3RvckVtYWlsLFxuICAgIG9yZ0lkOiBpbmZvLm9yZ0lkLFxuICAgIG91dGNvbWU6ICdmYWlsdXJlJyxcbiAgICBkZXRhaWxzOiB7IG1ldGhvZDogaW5mby5tZXRob2QsIHBhdGg6IGluZm8ucGF0aCwgcmVxdWlyZWQ6IGluZm8ucmVxdWlyZWQgfSxcbiAgfSwgc2VydmljZU5hbWUpKTtcbn1cblxuLyoqXG4gKiBBIHNlcnZpY2Utc2NvcGVkIGF1ZGl0IGNsaWVudDogYSBkdXJhYmxlLXNwb29sLWJhY2tlZCB7QGxpbmsgUmVtb3RlQXVkaXRDbGllbnR9XG4gKiB3aXRoIHRoZSBzZXJ2aWNlIG5hbWUgcHJlLWJvdW5kIGZvciBlbWlzc2lvbi4gUmVwbGFjZXMgdGhlIHBlci1zZXJ2aWNlXG4gKiBib2lsZXJwbGF0ZSBvZiBgY3JlYXRlUmVtb3RlQXVkaXRDbGllbnQoeyBzcG9vbDogY3JlYXRlRW52UmVkaXNBdWRpdFNwb29sKCkgPz8gdW5kZWZpbmVkIH0pYFxuICogcGx1cyBhIGhhbmQtcm9sbGVkIGBlbWl0PFNlcnZpY2U+QXVkaXRgIHdyYXBwZXIgdGhhdCByZXBlYXRzIHRoZSBzZXJ2aWNlIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUF1ZGl0Q2xpZW50IHtcbiAgLyoqIEVtaXQgYW4gYXVkaXQgZXZlbnQgd2l0aCB0aGUgc2VydmljZSBuYW1lIGJvdW5kLiBGaXJlLWFuZC1mb3JnZXQuICovXG4gIGVtaXQoZXZlbnQ6IFJlbW90ZUF1ZGl0RXZlbnQpOiB2b2lkO1xuICAvKiogVGhlIHVuZGVybHlpbmcgcmVtb3RlIGNsaWVudCDigJQgZm9yIGB3aXJlQXV0aHpEZW5pYWxBdWRpdG9yYCArIGBjbG9zZSgpYC4gKi9cbiAgcmVhZG9ubHkgY2xpZW50OiBSZW1vdGVBdWRpdENsaWVudDtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHNlcnZpY2UncyBhdWRpdCBjbGllbnQ6IGEgUmVtb3RlQXVkaXRDbGllbnQgd2lyZWQgdG8gdGhlIGR1cmFibGUgUmVkaXNcbiAqIHNwb29sIChmcm9tIGFtYmllbnQgZW52OyBudWxsIOKGkiBubyBzcG9vbCkgd2l0aCBgc2VydmljZU5hbWVgIGJvdW5kLiBDb25zdHJ1Y3RcbiAqIE9OQ0UgcGVyIHByb2Nlc3Mg4oCUIG1lbW9pemUgYmVoaW5kIGEgbGF6eSBgZ2V0QXVkaXRDbGllbnQoKWAgaW4gdGhlIHNlcnZpY2Unc1xuICogYHNlcnZpY2VzL2F1ZGl0LnRzYC4gUGFzcyBgY29uZmlnLnNwb29sYCB0byBvdmVycmlkZSB0aGUgZW52LWRlcml2ZWQgc3Bvb2xcbiAqIChlLmcuIHJldXNlIGEgc2VydmljZSdzIGV4aXN0aW5nIGlvcmVkaXMgY29ubmVjdGlvbikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXJ2aWNlQXVkaXRDbGllbnQoc2VydmljZU5hbWU6IHN0cmluZywgY29uZmlnOiBSZW1vdGVBdWRpdENsaWVudENvbmZpZyA9IHt9KTogU2VydmljZUF1ZGl0Q2xpZW50IHtcbiAgY29uc3Qgc3Bvb2wgPSBjb25maWcuc3Bvb2wgPz8gY3JlYXRlRW52UmVkaXNBdWRpdFNwb29sKCkgPz8gdW5kZWZpbmVkO1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVSZW1vdGVBdWRpdENsaWVudCh7IC4uLmNvbmZpZywgc3Bvb2wgfSk7XG4gIHJldHVybiB7XG4gICAgZW1pdDogKGV2ZW50KSA9PiBjbGllbnQucmVjb3JkKGV2ZW50LCBzZXJ2aWNlTmFtZSksXG4gICAgY2xpZW50LFxuICB9O1xufVxuXG4vKipcbiAqIExhemlseS1jb25zdHJ1Y3RlZCByZW1vdGUtYXVkaXQgYWNjZXNzb3IgZm9yIGEgc2VydmljZS4gRXZlcnkgc2VydmljZSdzXG4gKiBgc2VydmljZXMvYXVkaXQudHNgIHVzZWQgdG8gaGFuZC1yb2xsIHRoZSBzYW1lIG1vZHVsZSBzaW5nbGV0b24gKGEgYGxldCBhdWRpdGBcbiAqICsgYHN2YygpYCB0aGF0IGJ1aWxkcyBhIHtAbGluayBTZXJ2aWNlQXVkaXRDbGllbnR9IG9uIGZpcnN0IHVzZSwgdGhlbiBhXG4gKiBgZ2V0QXVkaXRDbGllbnQoKWAgcmV0dXJuaW5nIGAuY2xpZW50YCBhbmQgYW4gYGVtaXQoZXZlbnQpYCBmb3J3YXJkaW5nIHRvXG4gKiBgLmVtaXRgKS4gVGhpcyBwYWNrYWdlcyB0aGF0IHBhdHRlcm4gaW4gT05FIHBsYWNlIHNvIGVhY2ggc2VydmljZSdzIGF1ZGl0XG4gKiB3aXJpbmcgaXMgYSBvbmUtbGluZXIgYW5kIGNhbid0IGRyaWZ0LlxuICpcbiAqIExhenkgb24gcHVycG9zZTogdGhlIHVuZGVybHlpbmcgY2xpZW50IHdpcmVzIGFuIGVudi1SZWRpcyBhdWRpdCBzcG9vbCwgc29cbiAqIGJ1aWxkaW5nIGl0IGF0IGltcG9ydCB0aW1lIHdvdWxkIGZvcmNlIHRoYXQgY29ubmVjdGlvbiB3aGVyZXZlciB0aGUgbW9kdWxlIGlzXG4gKiBtZXJlbHkgaW1wb3J0ZWQgKGUuZy4gdGVzdHMpLiBgZ2V0QXVkaXRDbGllbnRgIGlzIHBhc3NlZCB0b1xuICogYHdpcmVBdXRoekRlbmlhbEF1ZGl0b3JgOyBgZW1pdGAgYmFja3MgdGhlIHBlci1zZXJ2aWNlIGBlbWl0WEF1ZGl0YCBoZWxwZXJzLlxuICogQm90aCBzdGF5IEZJUkUtQU5ELUZPUkdFVCAocmVjb3JkIG5ldmVyIHRocm93cyAvIGlzIG5vdCBhd2FpdGVkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUF1ZGl0QWNjZXNzb3Ioc2VydmljZU5hbWU6IHN0cmluZyk6IHtcbiAgZ2V0QXVkaXRDbGllbnQ6ICgpID0+IFJlbW90ZUF1ZGl0Q2xpZW50O1xuICBlbWl0OiAoZXZlbnQ6IFJlbW90ZUF1ZGl0RXZlbnQpID0+IHZvaWQ7XG59IHtcbiAgbGV0IGF1ZGl0OiBTZXJ2aWNlQXVkaXRDbGllbnQgfCBudWxsID0gbnVsbDtcbiAgY29uc3Qgc3ZjID0gKCk6IFNlcnZpY2VBdWRpdENsaWVudCA9PiB7XG4gICAgaWYgKCFhdWRpdCkgYXVkaXQgPSBjcmVhdGVTZXJ2aWNlQXVkaXRDbGllbnQoc2VydmljZU5hbWUpO1xuICAgIHJldHVybiBhdWRpdDtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBnZXRBdWRpdENsaWVudDogKCkgPT4gc3ZjKCkuY2xpZW50LFxuICAgIGVtaXQ6IChldmVudCkgPT4gc3ZjKCkuZW1pdChldmVudCksXG4gIH07XG59XG4iXX0=
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9yZW1vdGUtYXVkaXQtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsd0JBQXdCLEVBQXlDLE1BQU0sa0JBQWtCLENBQUM7QUFDbkcsT0FBTyxFQUFFLGdCQUFnQixFQUF1QixNQUFNLGtCQUFrQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBd0IsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFNUM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHFCQUFxQixHQUErRDtJQUN4RixtQkFBbUIsRUFBRSxDQUFDO0lBQ3RCLFVBQVUsRUFBRSxDQUFDO0NBQ2QsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRztJQUNsQyx3QkFBd0I7SUFDeEIscUJBQXFCO0lBQ3JCLHNCQUFzQjtJQUN0Qiw2RUFBNkU7SUFDN0UsK0VBQStFO0lBQy9FLHFFQUFxRTtJQUNyRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YsZUFBZTtJQUNmLDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNw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O1FBQ25DLElBQUksQ0FBQyxLQUFLO1lBQUUsS0FBSyxHQUFHLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBQ0YsT0FBTztRQUNMLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNO1FBQ2xDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGNyZWF0ZUVudlJlZGlzQXVkaXRTcG9vbCwgdHlwZSBBdWRpdFNwb29sLCB0eXBlIEF1ZGl0U3Bvb2xFbnRyeSB9IGZyb20gJy4vYXVkaXQtc3Bvb2wuanMnO1xuaW1wb3J0IHsgY3JlYXRlU2FmZUNsaWVudCwgdHlwZSBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaHR0cC1jbGllbnQuanMnO1xuaW1wb3J0IHsgZ2V0U2VydmljZUF1dGhIZWFkZXIsIHNldEF1dGh6RGVuaWFsQXVkaXRvciwgdHlwZSBBdXRoekRlbmlhbEluZm8gfSBmcm9tICcuLi9taWRkbGV3YXJlL2F1dGguanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9uLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdyZW1vdGUtYXVkaXQnKTtcblxuLyoqXG4gKiBBdWRpdCBpbmdlc3QgaXMgYmVzdC1lZmZvcnQgYW5kIE1VU1QgTk9UIGJsb2NrIHRoZSBjYWxsZXIsIGJ1dCBhIHRyYW5zaWVudFxuICogZmFpbHVyZSAoNDI5IC8gNXh4IC8gY29ubmVjdGlvbiByZXNldCAvIHRpbWVvdXQpIHNob3VsZCBub3Qgc2lsZW50bHkgZHJvcCB0aGVcbiAqIHJvdyBvbiB0aGUgZmlyc3QgYXR0ZW1wdC4gRWFjaCBlbWlzc2lvbiBjYXJyaWVzIGEgc3RhYmxlIHBlci1ldmVudFxuICogYElkZW1wb3RlbmN5LUtleWAgKHNlZSBgcmVjb3JkYCksIHNvIHRoZSBodHRwLWNsaWVudCB0cmVhdHMgdGhlIFBPU1QgYXNcbiAqIHJldHJ5LXNhZmUgYW5kIHRoZSBwbGF0Zm9ybSBjYW4gZGVkdXAgYSByZXRyaWVkIGRlbGl2ZXJ5IGluc3RlYWQgb2Ygd3JpdGluZyBhXG4gKiBkdXBsaWNhdGUgcm93LiBCdWRnZXQgaXMga2VwdCBzbWFsbCBzbyBhIGhhcmQtZG93biBwbGF0Zm9ybSBjYW4ndCBiYWNrIHRoZVxuICogd29ya2VyIHVwIGZvciBsb25nOiBiYXNlIGRlbGF5IMOXKDIgcmV0cmllcykgKyBhIGNvdXBsZSBvZiA0MjkgYmFja29mZnMuXG4gKi9cbmNvbnN0IEFVRElUX1JFUVVFU1RfT1BUSU9OUzogUGljazxSZXF1ZXN0T3B0aW9ucywgJ21heFJhdGVMaW1pdFJldHJpZXMnIHwgJ21heFJldHJpZXMnPiA9IHtcbiAgbWF4UmF0ZUxpbWl0UmV0cmllczogMixcbiAgbWF4UmV0cmllczogMixcbn07XG5cbi8qKlxuICogVGhlIGV4YWN0IHNldCBvZiBhdWRpdCBhY3Rpb25zIGEgTk9OLVBMQVRGT1JNIChyZW1vdGUpIHNlcnZpY2UgaXMgcGVybWl0dGVkIHRvXG4gKiBlbWl0IHRocm91Z2ggYFBPU1QgL2F1ZGl0L2V2ZW50c2AuIFRoaXMgaXMgdGhlIFNJTkdMRSBTT1VSQ0Ug4oCUIGBSZW1vdGVBdWRpdEFjdGlvbmBcbiAqIGlzIGRlcml2ZWQgZnJvbSBpdCwgc28gdGhlIHR5cGUgYW5kIHRoZSBydW50aW1lIGFsbG93LWxpc3QgY2FuIG5ldmVyIGRyaWZ0LlxuICpcbiAqIFNFQ1VSSVRZOiBwbGF0Zm9ybSdzIGluZ2VzdCB2YWxpZGF0ZXMgYGFjdGlvbmAgYWdhaW5zdCB0aGlzIHN1YnNldCAodmlhXG4gKiB7QGxpbmsgaXNSZW1vdGVBdWRpdEFjdGlvbn0pLCBOT1QgdGhlIGZ1bGwgcGxhdGZvcm0gYEF1ZGl0QWN0aW9uYCB1bmlvbiDigJQgYVxuICogYHNlcnZpY2U6KmAgdG9rZW4gbXVzdCBub3QgYmUgYWJsZSB0byBmb3JnZSBwbGF0Zm9ybS1hdXRob3JpdHkgZXZlbnRzXG4gKiAoYGFkbWluLnN1cGVyYWRtaW4uZ3JhbnRgLCBgb3JnLm93bmVyc2hpcC50cmFuc2ZlcmAsIGB1c2VyLmxvZ2luYCwg4oCmKS4gS2VlcFxuICogdGhpcyBsaXN0IGZyZWUgb2YgYW55IHBsYXRmb3JtLW9ubHkgYWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUkVNT1RFX0FVRElUX0FDVElPTlMgPSBbXG4gICdwbHVnaW4uYnVpbGQuY29tcGxldGVkJyxcbiAgJ3BsdWdpbi5idWlsZC5mYWlsZWQnLFxuICAncGx1Z2luLmJ1aWxkLnRpbWVvdXQnLFxuICAvLyBQbHVnaW4gbGlmZWN5Y2xlIG11dGF0aW9ucyAoYXBpL3BsdWdpbiByb3V0ZSBoYW5kbGVycykg4oCUIHRoZSBkZXN0cnVjdGl2ZSAvXG4gIC8vIHB1Ymxpc2hpbmcgc3VyZmFjZSB0aGF0IGJ1aWxkcyBhbHJlYWR5IGF1ZGl0J3MgY291bnRlcnBhcnQ6IHJlZ2lzdHJ5IGRlbGV0ZSxcbiAgLy8gc291cmNlIHVwbG9hZCwgYW5kIGRlcGxveS10by1jbHVzdGVyLiBgdGFyZ2V0SWRgIGlzIHRoZSBwbHVnaW4gaWQuXG4gICdwbHVnaW4uZGVsZXRlJyxcbiAgJ3BsdWdpbi5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGx1Z2luIHRvbWJzdG9uZSBvblxuICAvLyBkZW1hbmQgKGZpbmFsaXplcyB3aGF0IHRoZSByZXRlbnRpb24gc3dlZXAgd291bGQgb3RoZXJ3aXNlIGRvIGxhdGVyKS5cbiAgJ3BsdWdpbi5wdXJnZScsXG4gICdwbHVnaW4udXBkYXRlJyxcbiAgJ3BsdWdpbi51cGxvYWQnLFxuICAncGx1Z2luLmRlcGxveScsXG4gIC8vIFBsdWdpbiBidWxrIG11dGF0aW9ucyAoYXBpL3BsdWdpbiBidWxrLXBsdWdpbiByb3V0ZSkgKyBETFEgcHVyZ2UgKGRyb3BzIGFsbFxuICAvLyBkZWFkLWxldHRlcmVkIGJ1aWxkIGpvYnMsIGNyb3NzLW9yZywgc3lzYWRtaW4pLiBgZGV0YWlsc2AgY2FycmllcyBjb3VudHMuXG4gICdwbHVnaW4uYnVsay51cGRhdGUnLFxuICAncGx1Z2luLmJ1bGsuZGVsZXRlJyxcbiAgJ3BsdWdpbi5kbHEucHVyZ2UnLFxuICAvLyBCdWlsZCByZS1ydW5zIGZyb20gdGhlIHF1ZXVlLXRyaWFnZSBzdXJmYWNlOiByZS1lbnF1ZXVlIGEgRkFJTEVEIGJ1aWxkXG4gIC8vIChgcGx1Z2luLmJ1aWxkLnJldHJ5YCkgb3IgYSBkZWFkLWxldHRlcmVkIG9uZSAoYHBsdWdpbi5kbHEucmVwbGF5YCkuIEJvdGhcbiAgLy8gcmUtcnVuIGFuIGltYWdlIGJ1aWxkICsgcGx1Z2luIHBlcnNpc3Qgb24gdGhlIGNhbGxlcidzIGF1dGhvcml0eSwgc28gdGhleVxuICAvLyBhcmUgYXVkaXRlZCBtdXRhdGlvbnM7IGBhZmZlY3RlZE9yZ0lkYCBjYXJyaWVzIHRoZSBqb2IncyBvd25pbmcgb3JnLlxuICAncGx1Z2luLmJ1aWxkLnJldHJ5JyxcbiAgJ3BsdWdpbi5kbHEucmVwbGF5JyxcbiAgLy8gUGlwZWxpbmUgbXV0YXRpb25zIOKAlCBlbWl0dGVkIGJ5IGFwaS9waXBlbGluZSdzIHJvdXRlIGhhbmRsZXJzXG4gIC8vIChjcmVhdGUvdXBkYXRlL2RlbGV0ZSArIENvZGVQaXBlbGluZSBleGVjdXRpb24gdHJpZ2dlci9jYW5jZWwpIGFuZFxuICAvLyBwb3N0ZWQgdG8gcGxhdGZvcm0ncyBgUE9TVCAvYXVkaXQvZXZlbnRzYCBpbmdlc3QuXG4gICdwaXBlbGluZS5jcmVhdGUnLFxuICAncGlwZWxpbmUudXBkYXRlJyxcbiAgJ3BpcGVsaW5lLmRlbGV0ZScsXG4gICdwaXBlbGluZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGlwZWxpbmUgL1xuICAvLyBwaXBlbGluZV90ZW1wbGF0ZSB0b21ic3RvbmUgb24gZGVtYW5kIChmaW5hbGl6ZXMgd2hhdCB0aGUgcmV0ZW50aW9uIHN3ZWVwXG4gIC8vIHdvdWxkIG90aGVyd2lzZSBkbyBsYXRlcikuIGB0YXJnZXRJZGAgaXMgdGhlIHB1cmdlZCBpZC5cbiAgJ3BpcGVsaW5lLnB1cmdlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLmNyZWF0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS51cGRhdGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUuZGVsZXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnJlc3RvcmUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUucHVyZ2UnLFxuICAncGlwZWxpbmUuZXhlY3V0aW9uLnN0YXJ0JyxcbiAgJ3BpcGVsaW5lLmV4ZWN1dGlvbi5jYW5jZWwnLFxuICAvLyBDb2RlUGlwZWxpbmUgQVJOLXJlZ2lzdHJ5IGNvbmZpZyAoYXBpL3BpcGVsaW5lIHJlZ2lzdHJ5IHJvdXRlKSDigJQgcmVnaXN0ZXJpbmcgL1xuICAvLyBkZXJlZ2lzdGVyaW5nIHRoZSBleHRlcm5hbCBDb2RlUGlwZWxpbmUgdGhhdCBiYWNrcyBhIHBpcGVsaW5lIChkZXBsb3ktYWZmZWN0aW5nKS5cbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LnJlZ2lzdGVyJyxcbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LmRlcmVnaXN0ZXInLFxuICAvLyBRdW90YSBhZG1pbmlzdHJhdGlvbiAoYXBpL3F1b3RhKSDigJQgYSBzdXBlcmFkbWluIHJlc2V0dGluZyBhbiBvcmcncyB1c2FnZVxuICAvLyBjb3VudGVyIG9yIGVkaXRpbmcgaXRzIHRpZXIgbGltaXRzLiBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlIG9yZyBjaGFuZ2VkO1xuICAvLyBgZGV0YWlsc2AgY2FycmllcyB0aGUgcXVvdGFUeXBlICsgb2xkL25ldyB2YWx1ZS5cbiAgJ3F1b3RhLnJlc2V0JyxcbiAgJ3F1b3RhLmxpbWl0LnVwZGF0ZScsXG4gIC8vIEEgc3VwZXJhZG1pbiBkZWxldGluZyBhbiBvcmcncyBlbnRpcmUgcXVvdGEgZG9jdW1lbnQuXG4gICdxdW90YS5kZWxldGUnLFxuICAvLyBDb21wbGlhbmNlIGFkbWluaXN0cmF0aW9uIChhcGkvY29tcGxpYW5jZSkg4oCUIHRoZSBlbmZvcmNlbWVudC1wb3N0dXJlIHN1cmZhY2UuXG4gIC8vIEFwcHJvdmluZy9yZXZva2luZyBhbiBleGVtcHRpb24sIHRvZ2dsaW5nL2F1dGhvcmluZy9kZWxldGluZyBhIHJ1bGUsXG4gIC8vIGF1dGhvcmluZy9kZWxldGluZyBhIHBvbGljeSwgbWFuYWdpbmcgc2NhbiBzY2hlZHVsZXMsIGFwcGx5aW5nIGEgdGVtcGxhdGUsXG4gIC8vIG9yIGNhbmNlbGxpbmcgYSBydW5uaW5nIHNjYW4uIGB0YXJnZXRJZGAgaXMgdGhlIHJ1bGUvcG9saWN5L2V4ZW1wdGlvbi9zY2FuIGlkLlxuICAnY29tcGxpYW5jZS5leGVtcHRpb24uYXBwcm92ZScsXG4gICdjb21wbGlhbmNlLmV4ZW1wdGlvbi5yZXZva2UnLFxuICAnY29tcGxpYW5jZS5ydWxlLnRvZ2dsZScsXG4gICdjb21wbGlhbmNlLnJ1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBvbi1kZW1hbmQgaGFyZC1kZWxldGUgKFBVUkdFKSBvZiBhIHNvZnQtZGVsZXRlZCBydWxlL3BvbGljeSB0b21ic3RvbmUg4oCUXG4gIC8vIHRoZSBjYWxsZXItaW5pdGlhdGVkIGNvdW50ZXJwYXJ0IHRvIHRoZSByZXRlbnRpb24gc3dlZXAncyBhdXRvLXB1cmdlLiBEZXN0cm95c1xuICAvLyB0aGUgdG9tYnN0b25lIHBlcm1hbmVudGx5LCBzbyBpdCBjYXJyaWVzIHRoZSBkdXJhYmxlLCB0YW1wZXItZXZpZGVudCB0cmFpbC5cbiAgJ2NvbXBsaWFuY2UucnVsZS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5yZXN0b3JlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnB1cmdlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuZGVsZXRlJyxcbiAgJ2NvbXBsaWFuY2UudGVtcGxhdGUuYXBwbHknLFxuICAvLyBMYXVuY2hpbmcgYW4gb3JnLXdpZGUgcmUtZXZhbHVhdGlvbiAodGhlIGNvdW50ZXJwYXJ0IHRvIGAuY2FuY2VsYCkg4oCUIGl0XG4gIC8vIHBlcnNpc3RzIGEgc2NhbiBhbmQgY2FuIGJsb2NrIGVudGl0aWVzIHRoYXQgcGFzc2VkIGJlZm9yZS5cbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLmNhbmNlbCcsXG4gIC8vIFBlci1vcmcgY29tcGxpYW5jZSBub3RpZmljYXRpb24gc2V0dGluZ3M6IHJlY2lwaWVudHMgKyB0aGUgb3V0Ym91bmQgd2ViaG9va1xuICAvLyBVUkwvc2VjcmV0LiBCZWFyZXItZXF1aXZhbGVudCBjb25maWcgdGhhdCByZWRpcmVjdHMgdmlvbGF0aW9uIG5vdGljZXMsIHNvIGFcbiAgLy8gY2hhbmdlIGNhcnJpZXMgdGhlIGR1cmFibGUgdHJhaWwgKG5ldmVyIHRoZSBzZWNyZXQgaXRzZWxmKS5cbiAgJ2NvbXBsaWFuY2Uubm90aWZpY2F0aW9uLXByZWZlcmVuY2UudXBkYXRlJyxcbiAgLy8gSW1hZ2UtcmVnaXN0cnkgZGVzdHJ1Y3RpdmUgb3BzIChhcGkvaW1hZ2UtcmVnaXN0cnkpIOKAlCBnYXJiYWdlLWNvbGxlY3Rpb25cbiAgLy8gc3dlZXBzIGFuZCBleHBsaWNpdCBpbWFnZS90YWcgZGVsZXRlcyAocHJldmlvdXNseSBvbmx5IGEgbG9nIGxpbmUpLlxuICAncmVnaXN0cnkuZ2MnLFxuICAncmVnaXN0cnkuaW1hZ2UuZGVsZXRlJyxcbiAgLy8gQ3Jvc3MtcmVwbyB0YWcvaW1hZ2UgY29weSAoYXBpL2ltYWdlLXJlZ2lzdHJ5IFBPU1QgL2FwaS9pbWFnZXMvY29weSkuIEFcbiAgLy8gY3Jvc3MtdGVuYW50IGNvcHkgbW92ZXMgZGF0YSBhY3Jvc3MgY3VzdG9tZXIgYm91bmRhcmllcywgc28gaXQgbmVlZHMgdGhlXG4gIC8vIGR1cmFibGUsIHRhbXBlci1ldmlkZW50IHRyYWlsIOKAlCBub3QganVzdCB0aGUgTG9raSBvcGVyYXRvciBsaW5lLlxuICAncmVnaXN0cnkuaW1hZ2UuY29weScsXG4gIC8vIEEgcGx1Z2luIGltYWdlIHNpZ25lZCArIFNCT00tYXR0ZXN0ZWQgYnkgdGhlIHBsYXRmb3JtJ3MgcGx1Z2luLXNpZ25pbmcga2V5XG4gIC8vIChhcGkvaW1hZ2UtcmVnaXN0cnkgUE9TVCAvaW50ZXJuYWwvcGx1Z2luLXNpZ25hdHVyZXMsIGNhbGxlZCBieSB0aGUgcGx1Z2luXG4gIC8vIGJ1aWxkIHdvcmtlcikuIFRoZSBrZXkgaXMgd2hhdCBzeW50aCB0cnVzdHMsIHNvIGV2ZXJ5IHVzZSBpcyBvbiB0aGUgdHJhaWwuXG4gICdyZWdpc3RyeS5pbWFnZS5zaWduJyxcbiAgLy8gTWVzc2FnaW5nIChhcGkvbWVzc2FnZSkg4oCUIGFkbWluIEJST0FEQ0FTVCBhbm5vdW5jZW1lbnRzICsgZGVzdHJ1Y3RpdmVcbiAgLy8gZGVsZXRlcy4gMToxIHVzZXIgbWVzc2FnZXMgYXJlIGludGVudGlvbmFsbHkgTk9UIGF1ZGl0ZWQgKG5vaXNlICsgdGhleSB3b3VsZFxuICAvLyBwdWxsIHByaXZhdGUgY29udGVudCBpbnRvIHRoZSB0cmFpbCkuIGBkZXRhaWxzYCBjYXJyeSBtZXRhZGF0YSBvbmx5XG4gIC8vIChzdWJqZWN0L3R5cGUvc2NvcGUpLCBORVZFUiBtZXNzYWdlIGJvZHkgY29udGVudC5cbiAgJ21lc3NhZ2UuYW5ub3VuY2VtZW50LmNyZWF0ZScsXG4gICdtZXNzYWdlLmRlbGV0ZScsXG4gICdtZXNzYWdlLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgb24tZGVtYW5kIFBVUkdFIChwZXJtYW5lbnQgaGFyZC1kZWxldGUpIG9mIGFuIGFscmVhZHktc29mdC1kZWxldGVkXG4gIC8vIG1lc3NhZ2UgdG9tYnN0b25lIOKAlCB0aGUgZGVzdHJ1Y3RpdmUgZmluYWxpemVyIHRoZSByZXRlbnRpb24gc3dlZXAgd291bGRcbiAgLy8gb3RoZXJ3aXNlIHBlcmZvcm0gYXQgdGhlIHB1cmdlIGRlYWRsaW5lLiBgZGV0YWlsc2AgY2FycnkgbWV0YWRhdGEgb25seS5cbiAgJ21lc3NhZ2UucHVyZ2UnLFxuICAvLyBCaWxsaW5nIChhcGkvYmlsbGluZykg4oCUIHN1YnNjcmlwdGlvbiArIGVudGl0bGVtZW50IG11dGF0aW9ucywgbWlycm9yZWQgdG8gdGhlXG4gIC8vIGNlbnRyYWwgYXVkaXQgdHJhaWwgKHRoZXNlIGFsc28gd3JpdGUgdG8gdGhlIHNlcnZpY2UtbG9jYWwgYmlsbGluZ19ldmVudHNcbiAgLy8gY29sbGVjdGlvbikuIGBkZXRhaWxzYCBjYXJyeSBwbGFuL3RpZXIvYWRkb24gaWRzIG9ubHkg4oCUIG5ldmVyIGNhcmQvcGF5bWVudFxuICAvLyBzZWNyZXRzIG9yIGFuIEFXUyBhY2NvdW50IGlkLlxuICAvLyBTdWJzY3JpcHRpb24gbGlmZWN5Y2xlIGEgQ1VTVE9NRVIgZHJpdmVzICh0aGUgYWRtaW4gY291bnRlcnBhcnQgaXNcbiAgLy8gYGJpbGxpbmcudGllci5vdmVycmlkZWApOiBzZWxmLXNlcnZlIGNyZWF0ZSAoZGlyZWN0IG9yIE1hcmtldHBsYWNlIGNsYWltKSxcbiAgLy8gcGxhbi9pbnRlcnZhbCBjaGFuZ2UsIGNhbmNlbC1hdC1wZXJpb2QtZW5kLCB1bmRvLWNhbmNlbCwgY2FzY2FkZSBkZWxldGUuXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5jcmVhdGUnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24udXBkYXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLnJlYWN0aXZhdGUnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uY2FuY2VsJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmRlbGV0ZScsXG4gICdiaWxsaW5nLnRpZXIub3ZlcnJpZGUnLFxuICAvLyBPcGVyYXRvci1vbmx5IHJlc2VlZCBvZiB0aGUgaW52b2ljZSBsZWRnZXIgZnJvbSB0aGUgcGF5bWVudCBwcm92aWRlcidzXG4gIC8vIGhpc3RvcnkgKFBPU1QgL2JpbGxpbmcvYWRtaW4vYmFja2ZpbGwpIOKAlCBtdXRhdGVzIGZpbmFuY2UgZGF0YSBmbGVldC13aWRlLlxuICAnYmlsbGluZy5hZGRvbi5hZGQnLFxuICAnYmlsbGluZy5hZGRvbi5yZW1vdmUnLFxuICAvLyBTeXN0ZW0taW5pdGlhdGVkIHJlbW92YWwgb2YgYSB0aWVyLWluY2x1ZGVkIGFkZC1vbiBvbiBhIHBsYW4gdXBncmFkZSAodGhlXG4gIC8vIGFjY291bnQncyBuZXcgdGllciBub3cgYnVuZGxlcyB0aGUgZmVhdHVyZSkg4oCUIGRpc3RpbmN0IGZyb20gYSB1c2VyLWluaXRpYXRlZFxuICAvLyBgcmVtb3ZlYCBzbyBmaW5hbmNlIGNhbiB0ZWxsIGFuIGF1dG8tcHJ1bmUgZnJvbSBhIGN1c3RvbWVyIGFjdGlvbi5cbiAgJ2JpbGxpbmcuYWRkb24ucHJ1bmUnLFxuICAvLyBEaXNjb3VudHMgKGRvY3MvYmlsbGluZy1kaXNjb3VudHMubWQpIOKAlCBtaW50L2lzc3VlL2FwcGx5L3JlbW92ZS9yZXZva2Ugb2YgYVxuICAvLyBwcmljZSBjb3Vwb24gb3IgdXNhZ2UgY3JlZGl0LiBgZGV0YWlsc2AgY2FycnkgdGhlIGRpc2NvdW50IGlkICsga2luZC92YWx1ZVxuICAvLyBvbmx5LCBuZXZlciB0aGUgb3BhcXVlIHRva2VuIG9yIHNpZ25pbmcga2V5LlxuICAnYmlsbGluZy5kaXNjb3VudC5nZW5lcmF0ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50Lmlzc3VlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQuYXBwbHknLFxuICAnYmlsbGluZy5kaXNjb3VudC5yZW1vdmUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5yZXZva2UnLFxuICAvLyBQcm9tb3Rpb25zIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kI3Byb21vdGlvbnMpIOKAlCBydWxlLWRyaXZlbiBhdXRvLWdyYW50XG4gIC8vIGNhbXBhaWducy4gYGRldGFpbHNgIGNhcnJ5IHRoZSBwcm9tb3Rpb24gaWQgKyBjZW50cy9ldmVudCBvbmx5LlxuICAnYmlsbGluZy5wcm9tb3Rpb24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLnVwZGF0ZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi5yZXZva2UnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24uZ3JhbnQnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24uYWN0aXZhdGUnLFxuICAvLyBVc2FnZS1jcmVkaXQgcmVhbGl6YXRpb24g4oCUIGEgY3VzdG9tZXIvY29tcGxpYW5jZS12aXNpYmxlIHJlY29yZCBvZiBjcmVkaXRcbiAgLy8gbW92ZW1lbnQ6IGBjb25zdW1lZGAgKE1hcmtldHBsYWNlIG1ldGVyZWQgZHJhd2Rvd24pLCBgZXhoYXVzdGVkYCAoYmFsYW5jZSBoaXRcbiAgLy8gemVybyksIGFuZCBhIGNvbWJvIGVuZGluZy4gYGRldGFpbHNgIGNhcnJ5IGNlbnRzL2lkcyBvbmx5LCBubyBwYXltZW50IHNlY3JldHMuXG4gICdiaWxsaW5nLmNyZWRpdC5jb25zdW1lZCcsXG4gICdiaWxsaW5nLmNyZWRpdC5leGhhdXN0ZWQnLFxuICAnYmlsbGluZy5jb21iby5leHBpcmVkJyxcbiAgLy8gUmVwb3J0aW5nIChhcGkvcmVwb3J0aW5nKSDigJQgdGhlIHRocmVlIHJlcG9ydGluZyBtdXRhdGlvbnMgd2hvc2UgZWZmZWN0XG4gIC8vIG91dGxpdmVzIGEgcmVxdWVzdCBsb2c6IHRoZSBwZXItb3JnIGNvcnJlbGF0aW9uLXdpbmRvdyBjb25maWcgd3JpdGUsIGFcbiAgLy8gcG9zdC1kZXBsb3kgb3V0Y29tZSBtYXJrZXIgKGl0IG1vdmVzIHRoZSBvcmcncyBET1JBIENGUi9NVFRSKSwgYW5kIHRoZVxuICAvLyBpbmJvdW5kIGJpbGxpbmfihpJyZXBvcnRpbmcgcmV0ZW50aW9uLWVudGl0bGVtZW50IHN5bmMgKGEgcmV0ZW50aW9uIGN1dCBpcyBhXG4gIC8vIGRhdGEtZGVzdHJveWluZyBjaGFuZ2UgYXBwbGllZCBieSB0aGUgbmV4dCBzd2VlcCkuIGBkZXRhaWxzYCBjYXJyeSB0aGVcbiAgLy8gc2V0dGluZ3Mvb3V0Y29tZSB2YWx1ZXMgb25seS5cbiAgJ3JlcG9ydGluZy5zZXR0aW5ncy51cGRhdGUnLFxuICAncmVwb3J0aW5nLmRlcGxveW1lbnQub3V0Y29tZScsXG4gICdyZXBvcnRpbmcucmV0ZW50aW9uLnN5bmMnLFxuICAvLyBEZW5pZWQgYXV0aG9yaXphdGlvbiBhdHRlbXB0IOKAlCBlbWl0dGVkIGJlc3QtZWZmb3J0IGJ5IHRoZSBzaGFyZWRcbiAgLy8gYHJlcXVpcmVQZXJtaXNzaW9uYCAvIGByZXF1aXJlU3lzdGVtQWRtaW5gIGdhdGUgd2hlbiBhIHN0YXRlLWNoYW5naW5nXG4gIC8vIChub24tR0VUKSByZXF1ZXN0IGlzIHJlamVjdGVkLCBzbyBwcm9iaW5nL2VzY2FsYXRpb24gYXR0ZW1wdHMgYXJlIHZpc2libGVcbiAgLy8gcmF0aGVyIHRoYW4gaW52aXNpYmxlLiBgZGV0YWlsc2AgY2FycmllcyB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbiArIHBhdGg7XG4gIC8vIGBvdXRjb21lYCBpcyAnZmFpbHVyZScuXG4gICdhdXRoei5kZW5pZWQnLFxuICAvLyBcIkFza1wiIGFzc2lzdGFudCBhY3Rpdml0eSDigJQgdmlzaWJpbGl0eSBpbnRvIHdoYXQgdGhlIGFzc2lzdGFudCBkaWQgb24gYSB1c2VyJ3NcbiAgLy8gYmVoYWxmLiBgYXNrLnF1ZXJ5YCBpcyBhIHJlYWQtb25seSBob3ctdG8gdHVybjsgYGFzay5hZ2VudC50dXJuYCBpcyBhIHRvb2wtY2FsbGluZ1xuICAvLyB0dXJuLiBgZGV0YWlsc2AgY2FycnkgU0FGRSBNRVRBREFUQSBPTkxZICh0b29scyB1c2VkLCBwcm9wb3NhbCBraW5kcywgcXVlcnlcbiAgLy8gbGVuZ3RoLCBvdXRjb21lKSwgbmV2ZXIgdGhlIHJhdyBxdWVyeSB0ZXh0LlxuICAnYXNrLnF1ZXJ5JyxcbiAgJ2Fzay5hZ2VudC50dXJuJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFJlbW90ZUF1ZGl0QWN0aW9uID0gdHlwZW9mIFJFTU9URV9BVURJVF9BQ1RJT05TW251bWJlcl07XG5cbi8qKiBXaGV0aGVyIGB2YWx1ZWAgaXMgYW4gYWN0aW9uIGEgcmVtb3RlIHNlcnZpY2UgbWF5IGVtaXQgKHRoZSBpbmdlc3QgYWxsb3ctbGlzdCkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZW1vdGVBdWRpdEFjdGlvbih2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgUmVtb3RlQXVkaXRBY3Rpb24ge1xuICByZXR1cm4gKFJFTU9URV9BVURJVF9BQ1RJT05TIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlQXVkaXRFdmVudCB7XG4gIGFjdGlvbjogUmVtb3RlQXVkaXRBY3Rpb247XG4gIGFjdG9ySWQ6IHN0cmluZztcbiAgYWN0b3JFbWFpbD86IHN0cmluZztcbiAgb3JnSWQ/OiBzdHJpbmc7XG4gIGFmZmVjdGVkT3JnSWQ/OiBzdHJpbmc7XG4gIHRhcmdldFR5cGU/OiBzdHJpbmc7XG4gIHRhcmdldElkPzogc3RyaW5nO1xuICAvKipcbiAgICogRGlkIHRoZSBhdWRpdGVkIGFjdGlvbiBzdWNjZWVkIG9yIGZhaWw/IERlZmF1bHRzIHRvICdzdWNjZXNzJyB3aGVuIG9taXR0ZWRcbiAgICogKHRoZSBwbGF0Zm9ybSBpbmdlc3QgYXBwbGllcyB0aGUgc2FtZSBkZWZhdWx0KS4gRGVuaWVkLWF1dGh6IGV2ZW50cyBzZXRcbiAgICogJ2ZhaWx1cmUnIHNvIGEgcmV2aWV3ZXIgY2FuIGZpbHRlciBhdHRlbXB0cyBmcm9tIGNvbXBsZXRlZCBhY3Rpb25zLlxuICAgKi9cbiAgb3V0Y29tZT86ICdzdWNjZXNzJyB8ICdmYWlsdXJlJztcbiAgLyoqXG4gICAqIFdoZW4gdGhlIGF1ZGl0ZWQgYWN0aW9uIGFjdHVhbGx5IE9DQ1VSUkVEIChJU08tODYwMSksIHN0YW1wZWQgYXQgZW1pc3Npb24uXG4gICAqIFRoZSBwbGF0Zm9ybSBzdG9yZXMgdGhpcyBmb3IgcmV2aWV3ZXJzOyBpdCBpcyBOT1QgdGhlIGNoYWluLW9yZGVyaW5nIGZpZWxkXG4gICAqICh0aGUgdGFtcGVyLWV2aWRlbnQgY2hhaW4gb3JkZXJzIGJ5IGluZ2VzdC9gY3JlYXRlZEF0YCkuIEl0IG1hdHRlcnMgZm9yXG4gICAqIFNQT09MRUQgZXZlbnRzOiBvbmUgYnVmZmVyZWQgZHVyaW5nIGEgcGxhdGZvcm0gb3V0YWdlIGlzIHJlLWRlbGl2ZXJlZCDigJQgYW5kXG4gICAqIHNvIGNoYWluZWQg4oCUIGxhdGVyLCBidXQgYG9jY3VycmVkQXRgIHByZXNlcnZlcyB3aGVuIGl0IHJlYWxseSBoYXBwZW5lZC5cbiAgICovXG4gIG9jY3VycmVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTdGFibGUgcGVyLWVtaXNzaW9uIGRlZHVwIGtleSAoYWxzbyBzZW50IGFzIHRoZSBgSWRlbXBvdGVuY3ktS2V5YCBoZWFkZXIgdGhlXG4gICAqIHBsYXRmb3JtIGluZ2VzdCBkZWR1cHMgb24pLiBTdGFtcGVkIGJ5IGByZWNvcmQoKWAgYW5kIGNhcnJpZWQgb24gdGhlIHNwb29sZWRcbiAgICogY29weSBzbyBhIGxpdmUgYXR0ZW1wdCBhbmQgaXRzIGxhdGVyIHJlLWRlbGl2ZXJ5IGNvbGxhcHNlIHRvIE9ORSBzdG9yZWQgcm93LlxuICAgKi9cbiAgaWRlbXBvdGVuY3lLZXk/OiBzdHJpbmc7XG4gIGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBDbGllbnQgZm9yIFBPU1RpbmcgYXVkaXQgZXZlbnRzIHRvIHRoZSBwbGF0Zm9ybSdzIGAvYXVkaXQtZXZlbnRzYCBpbmdlc3RcbiAqIGVuZHBvaW50LiBNaW50cyBhIGZyZXNoIHNlcnZpY2UgdG9rZW4gcGVyIGNhbGwgKDUgbWluIFRUTCkgIHRoZXJlJ3Mgbm9cbiAqIG1lYW5pbmdmdWwgY2FjaGluZyBiZW5lZml0IHdoZW4gZW1pc3Npb25zIGFyZSBzcGFyc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlQXVkaXRDbGllbnQge1xuICAvKipcbiAgICogRmlyZS1hbmQtZm9yZ2V0IGF1ZGl0IGVtaXNzaW9uLiBGYWlsdXJlcyBhcmUgbG9nZ2VkIGF0IHdhcm4gbGV2ZWwgYnV0XG4gICAqIG5ldmVyIHRocm93biAgdGhlIG9yaWdpbmF0aW5nIGFjdGlvbiAoZS5nLiBhIHBsdWdpbiBidWlsZCkgaGFzIGl0c1xuICAgKiBvd24gc3VjY2Vzcy9mYWlsdXJlIHBhdGggdGhhdCBzaG91bGRuJ3QgZ2V0IHBvbGx1dGVkIGJ5IGEgZmxha3kgYXVkaXRcbiAgICogZG93bnN0cmVhbS4gV2hlbiBhIHtAbGluayBBdWRpdFNwb29sfSBpcyBjb25maWd1cmVkLCBhbiBlbWlzc2lvbiB0aGF0XG4gICAqIGV4aGF1c3RzIGl0cyBsaXZlIHJldHJpZXMgaXMgYnVmZmVyZWQgYW5kIHJlLWRlbGl2ZXJlZCBsYXRlciBpbnN0ZWFkIG9mXG4gICAqIGJlaW5nIGRyb3BwZWQuXG4gICAqL1xuICByZWNvcmQoZXZlbnQ6IFJlbW90ZUF1ZGl0RXZlbnQsIHNlcnZpY2VOYW1lOiBzdHJpbmcpOiB2b2lkO1xuICAvKiogU3RvcCB0aGUgYmFja2dyb3VuZCBzcG9vbC1kcmFpbiB0aW1lciAoaWYgYW55KS4gU2FmZSB0byBjYWxsIHJlcGVhdGVkbHkuICovXG4gIGNsb3NlKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHJlbW90ZSBhdWRpdCBjbGllbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlQXVkaXRDbGllbnRDb25maWcge1xuICAvKiogUGxhdGZvcm0gc2VydmljZSBob3N0IChkZWZhdWx0OiBlbnYgUExBVEZPUk1fU0VSVklDRV9IT1NUIG9yICdwbGF0Zm9ybScpICovXG4gIGhvc3Q/OiBzdHJpbmc7XG4gIC8qKiBQbGF0Zm9ybSBzZXJ2aWNlIHBvcnQgKGRlZmF1bHQ6IGVudiBQTEFURk9STV9TRVJWSUNFX1BPUlQgb3IgMzAwMCkgKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqIFJlcXVlc3QgdGltZW91dCBtcyAoZGVmYXVsdCAzMDAwICBhdWRpdCBzaG91bGRuJ3QgYmxvY2sgdGhlIHdvcmtlcikuICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBkdXJhYmxlIGJ1ZmZlci4gV2hlbiBzZXQsIGFuIGVtaXNzaW9uIHRoYXQgZXhoYXVzdHMgaXRzIGxpdmUgcmV0cnlcbiAgICogYnVkZ2V0IChzdXN0YWluZWQgcGxhdGZvcm0gb3V0YWdlKSBpcyBzcG9vbGVkIGFuZCByZS1kZWxpdmVyZWQg4oCUIG9uIHRoZSBuZXh0XG4gICAqIHN1Y2Nlc3NmdWwgZW1pc3Npb24gYW5kIG9uIGEgcGVyaW9kaWMgdGltZXIg4oCUIGluc3RlYWQgb2YgYmVpbmcgbG9zdC5cbiAgICovXG4gIHNwb29sPzogQXVkaXRTcG9vbDtcbiAgLyoqIFNwb29sLWRyYWluIGludGVydmFsIG1zIChkZWZhdWx0IDMwXzAwMCkuIE9ubHkgdXNlZCB3aGVuIGBzcG9vbGAgaXMgc2V0LiAqL1xuICBkcmFpbkludGVydmFsTXM/OiBudW1iZXI7XG4gIC8qKiBNYXggZW50cmllcyBkcmFpbmVkIHBlciBzd2VlcCAoZGVmYXVsdCAxMDApLiAqL1xuICBkcmFpbkJhdGNoU2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSByZW1vdGUtYXVkaXQgY2xpZW50IHRhcmdldGVkIGF0IHRoZSBwbGF0Zm9ybSBzZXJ2aWNlLlxuICpcbiAqIFVzZWQgYnkgYXBpL3BsdWdpbidzIGJ1aWxkIHdvcmtlciB0byBwdXNoIGBwbHVnaW4uYnVpbGQuKmAgZXZlbnRzIGludG9cbiAqIHRoZSBwbGF0Zm9ybSdzIE1vbmdvREIgYGF1ZGl0X2V2ZW50c2AgY29sbGVjdGlvbi4gT3RoZXIgc2VydmljZXNcbiAqIHdpdGggd29ya2VyLXN0eWxlIGVtaXR0ZXJzIGNhbiB1c2UgdGhlIHNhbWUgY2xpZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhdWRpdENsaWVudCA9IGNyZWF0ZVJlbW90ZUF1ZGl0Q2xpZW50KCk7XG4gKiBhdWRpdENsaWVudC5yZWNvcmQoe1xuICogYWN0aW9uOiAncGx1Z2luLmJ1aWxkLmNvbXBsZXRlZCcsXG4gKiBhY3RvcklkOiAndXNlci0xMjMnLFxuICogb3JnSWQ6ICdvcmctYWNtZScsXG4gKiB0YXJnZXRUeXBlOiAncGx1Z2luJyxcbiAqIHRhcmdldElkOiAncGx1Z2luLWFiYycsXG4gKiBkZXRhaWxzOiB7IG5hbWU6ICdteS1wbHVnaW4nLCB2ZXJzaW9uOiAnMS4wLjAnIH0sXG4gKiB9LCAncGx1Z2luJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUF1ZGl0Q2xpZW50KGNvbmZpZzogUmVtb3RlQXVkaXRDbGllbnRDb25maWcgPSB7fSk6IFJlbW90ZUF1ZGl0Q2xpZW50IHtcbiAgY29uc3Qgc2VydmljZUNvbmZpZzogU2VydmljZUNvbmZpZyA9IHtcbiAgICBob3N0OiBjb25maWcuaG9zdCA/PyBwcm9jZXNzLmVudi5QTEFURk9STV9TRVJWSUNFX0hPU1QgPz8gJ3BsYXRmb3JtJyxcbiAgICBwb3J0OiBjb25maWcucG9ydCA/PyBwYXJzZUludChwcm9jZXNzLmVudi5QTEFURk9STV9TRVJWSUNFX1BPUlQgPz8gJzMwMDAnLCAxMCksXG4gICAgdGltZW91dDogY29uZmlnLnRpbWVvdXQgPz8gMzAwMCxcbiAgfTtcbiAgY29uc3QgY2xpZW50ID0gY3JlYXRlU2FmZUNsaWVudChzZXJ2aWNlQ29uZmlnKTtcbiAgY29uc3Qgc3Bvb2wgPSBjb25maWcuc3Bvb2w7XG4gIGNvbnN0IGRyYWluQmF0Y2hTaXplID0gY29uZmlnLmRyYWluQmF0Y2hTaXplID8/IDEwMDtcblxuICAvKipcbiAgICogQXR0ZW1wdCBPTkUgbGl2ZSBkZWxpdmVyeS4gUmVzb2x2ZXMgYHRydWVgIG9uIGEgMnh4IGFjY2VwdCwgYGZhbHNlYCBvbiBhbnlcbiAgICogbm9uLTJ4eCAvIHRocm93biBlcnJvciAodGhlIGh0dHAtY2xpZW50IGhhcyBhbHJlYWR5IGFwcGxpZWQgdGhlIHJldHJ5XG4gICAqIGJ1ZGdldCkuIEEgc3RhYmxlIHBlci1lbWlzc2lvbiBgSWRlbXBvdGVuY3ktS2V5YCBtYWtlcyB0aGlzIG5vbi1pZGVtcG90ZW50XG4gICAqIFBPU1QgcmV0cnktc2FmZSBhbmQgbGV0cyB0aGUgcGxhdGZvcm0gaW5nZXN0IGRlZHVwIGEgcmUtZGVsaXZlcmVkIGV2ZW50XG4gICAqIGluc3RlYWQgb2Ygd3JpdGluZyBhIGR1cGxpY2F0ZSBhdWRpdCByb3cgKGFuZCBkdXBsaWNhdGUgY2hhaW4gbGluaykuXG4gICAqIGBJZGVtcG90ZW5jeS1LZXlgIGlzIGRlcml2ZWQgZnJvbSB0aGUgZXZlbnQgc28gYSBTUE9PTEVEIHJlLWRlbGl2ZXJ5IHJldXNlc1xuICAgKiB0aGUgc2FtZSBrZXkgYXMgaXRzIG9yaWdpbmFsIGxpdmUgYXR0ZW1wdCDigJQgdGhlIHR3byBjb2xsYXBzZSB0byBvbmUgcm93LlxuICAgKi9cbiAgYXN5bmMgZnVuY3Rpb24gZGVsaXZlcihldmVudDogUmVtb3RlQXVkaXRFdmVudCwgc2VydmljZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBNaW50aW5nIHRoZSB0b2tlbiBpcyBJTlNJREUgdGhlIHRyeSBvbiBwdXJwb3NlLiBJdCBjYW4gdGhyb3cg4oCUIHRoZVxuICAgICAgLy8gc2lnbmluZyBrZXkgdW5yZWFkYWJsZSwgbm90IGFuIEVDIFAtMjU2IGtleSwgb3IgYFNFUlZJQ0VfTkFNRWAgbm90XG4gICAgICAvLyBtYXRjaGluZyB0aGlzIGNsaWVudCdzIG5hbWUg4oCUIGFuZCBpdCB1c2VkIHRvIHNpdCBhYm92ZSB0aGUgYHRyeWAsIHNvXG4gICAgICAvLyBgZGVsaXZlcmAgcmVqZWN0ZWQgaW5zdGVhZCBvZiByZXNvbHZpbmcgYGZhbHNlYCBhcyBkb2N1bWVudGVkLiBgcmVjb3JkYFxuICAgICAgLy8gZmlyZXMgaXQgd2l0aCBhIGJhcmUgYC50aGVuYCBhbmQgbm8gYC5jYXRjaGAsIHNvIHRoZSByZWplY3Rpb24gd2VudFxuICAgICAgLy8gdW5oYW5kbGVkLCBgcnVuU2VydmVyYCdzIGNyYXNoIGhhbmRsZXIgZXhpdGVkLCBhbmQgdGhlIHBvZCBjcmFzaC1sb29wZWRcbiAgICAgIC8vIG9uIGl0cyBmaXJzdCBhdWRpdGVkIHdyaXRlIG9yIGBhdXRoei5kZW5pZWRgIGV2ZW50LiBOb3cgYSBrZXkgcHJvYmxlbSBpc1xuICAgICAgLy8ganVzdCBhbiB1bmRlbGl2ZXJhYmxlIGV2ZW50OiBzcG9vbGVkLCBvciBkcm9wcGVkIGFuZCBtZXRlcmVkLlxuICAgICAgY29uc3QgYXV0aEhlYWRlciA9IGdldFNlcnZpY2VBdXRoSGVhZGVyKHsgc2VydmljZU5hbWUsIG9yZ0lkOiBldmVudC5vcmdJZCwgcm9sZTogJ21lbWJlcicgfSk7XG4gICAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGF1dGhIZWFkZXIsXG4gICAgICAgICdJZGVtcG90ZW5jeS1LZXknOiBldmVudC5pZGVtcG90ZW5jeUtleSA/PyByYW5kb21VVUlEKCksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdCgnL2F1ZGl0L2V2ZW50cycsIGV2ZW50LCB7IGhlYWRlcnMsIC4uLkFVRElUX1JFUVVFU1RfT1BUSU9OUyB9KTtcbiAgICAgIGNvbnN0IG9rID0gISFyZXNwb25zZSAmJiByZXNwb25zZS5zdGF0dXNDb2RlID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXNDb2RlIDwgMzAwO1xuICAgICAgaWYgKCFvaykge1xuICAgICAgICBsb2dnZXIud2FybignUmVtb3RlIGF1ZGl0IGluZ2VzdCBub24tb2snLCB7IGFjdGlvbjogZXZlbnQuYWN0aW9uLCBzdGF0dXNDb2RlOiByZXNwb25zZT8uc3RhdHVzQ29kZSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvaztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdSZW1vdGUgYXVkaXQgaW5nZXN0IHRocmV3JywgeyBhY3Rpb246IGV2ZW50LmFjdGlvbiwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSBzcG9vbCBkcmFpbnMgc28gYSBwZXJpb2RpYyB0aWNrIGFuZCBhbiBvbi1zdWNjZXNzIGRyYWluIGNhbid0IGJvdGhcbiAgLy8gcHVsbCB0aGUgc2FtZSBiYXRjaC4gU3RvcHMgZWFybHkgdGhlIG1vbWVudCBhIHJlLWRlbGl2ZXJ5IGZhaWxzIChwbGF0Zm9ybVxuICAvLyBzdGlsbCBkb3duKSBzbyB3ZSBkb24ndCBoYW1tZXIgaXQgb3IgY2h1cm4gdGhlIGJ1ZmZlci5cbiAgbGV0IGRyYWluaW5nID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghc3Bvb2wgfHwgZHJhaW5pbmcpIHJldHVybjtcbiAgICBkcmFpbmluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgY29uc3QgYmF0Y2ggPSBhd2FpdCBzcG9vbC50YWtlKGRyYWluQmF0Y2hTaXplKTtcbiAgICAgICAgaWYgKGJhdGNoLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBkZWxpdmVyZWQ6IEF1ZGl0U3Bvb2xFbnRyeVtdID0gW107XG4gICAgICAgIGNvbnN0IGZhaWxlZDogQXVkaXRTcG9vbEVudHJ5W10gPSBbXTtcbiAgICAgICAgbGV0IHBsYXRmb3JtRG93biA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGJhdGNoKSB7XG4gICAgICAgICAgaWYgKHBsYXRmb3JtRG93bikgeyBmYWlsZWQucHVzaChlbnRyeSk7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCBkZWxpdmVyKGVudHJ5LmV2ZW50LCBlbnRyeS5zZXJ2aWNlTmFtZSk7XG4gICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICBkZWxpdmVyZWQucHVzaChlbnRyeSk7XG4gICAgICAgICAgICBlbWl0Q291bnRlcignYXVkaXRfc3Bvb2xfcmVkZWxpdmVyZWRfdG90YWwnLCB7IHNlcnZpY2U6IGVudHJ5LnNlcnZpY2VOYW1lIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwbGF0Zm9ybURvd24gPSB0cnVlO1xuICAgICAgICAgICAgZmFpbGVkLnB1c2goZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBBY2tub3dsZWRnZSB0aGUgZGVsaXZlcmVkIHByZWZpeCBzbyBpdCBjbGVhcnMgdGhlIGluLXByb2dyZXNzIGxpc3Q7IHRoZVxuICAgICAgICAvLyByZWxpYWJsZSB0YWtlKCkgbW92ZWQgdGhlIHdob2xlIGJhdGNoIHRoZXJlLCBzbyB1bmFja2VkIHN1cnZpdm9ycyBhcmVcbiAgICAgICAgLy8gcmVjbGFpbWVkIGJ5IHJlY292ZXIoKSBhZnRlciBhIGNyYXNoIHJhdGhlciB0aGFuIGJlaW5nIHNpbGVudGx5IGxvc3QuXG4gICAgICAgIGlmIChkZWxpdmVyZWQubGVuZ3RoID4gMCkgYXdhaXQgc3Bvb2wuYWNrKGRlbGl2ZXJlZCk7XG4gICAgICAgIGlmIChmYWlsZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGF3YWl0IHNwb29sLnJlcXVldWUoZmFpbGVkKTtcbiAgICAgICAgICByZXR1cm47IC8vIHN0aWxsIGRvd24g4oCUIHRyeSBhZ2FpbiBvbiB0aGUgbmV4dCB0aWNrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdBdWRpdCBzcG9vbCBkcmFpbiBmYWlsZWQnLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsZXQgZHJhaW5UaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgdW5kZWZpbmVkO1xuICBpZiAoc3Bvb2wpIHtcbiAgICAvLyBSZWNsYWltIGFueSBiYXRjaCBzdHJhbmRlZCBvbiB0aGUgaW4tcHJvZ3Jlc3MgbGlzdCBieSBhIHByaW9yIGNyYXNoLCB0aGVuXG4gICAgLy8gYXR0ZW1wdCB0byBmbHVzaCBpdC4gQm90aCBhcmUgYmVzdC1lZmZvcnQgKHRoZSBzcG9vbCBzd2FsbG93cyBpdHMgZXJyb3JzKS5cbiAgICB2b2lkIHNwb29sLnJlY292ZXIoKS50aGVuKCgpID0+IGRyYWluKCkpO1xuICAgIGRyYWluVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7IHZvaWQgZHJhaW4oKTsgfSwgY29uZmlnLmRyYWluSW50ZXJ2YWxNcyA/PyAzMF8wMDApO1xuICAgIC8vIERvbid0IGxldCB0aGUgZHJhaW4gdGltZXIga2VlcCB0aGUgcHJvY2VzcyBhbGl2ZSBvbiBzaHV0ZG93bi5cbiAgICAoZHJhaW5UaW1lciBhcyB1bmtub3duIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVjb3JkKGV2ZW50LCBzZXJ2aWNlTmFtZSkge1xuICAgICAgLy8gU3RhbXAgd2hlbiB0aGUgYWN0aW9uIGFjdHVhbGx5IG9jY3VycmVkIChzdXJ2aXZlcyBzcG9vbCBkZWxheSkgYW5kIHBpbiBhXG4gICAgICAvLyBzdGFibGUgaWRlbXBvdGVuY3kga2V5IHNvIGEgbGl2ZSBhdHRlbXB0IGFuZCBpdHMgc3Bvb2xlZCByZXRyeSBkZWR1cC5cbiAgICAgIGNvbnN0IHN0YW1wZWQ6IFJlbW90ZUF1ZGl0RXZlbnQgPSB7XG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBvY2N1cnJlZEF0OiBldmVudC5vY2N1cnJlZEF0ID8/IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgaWRlbXBvdGVuY3lLZXk6IGV2ZW50LmlkZW1wb3RlbmN5S2V5ID8/IHJhbmRvbVVVSUQoKSxcbiAgICAgIH07XG4gICAgICB2b2lkIGRlbGl2ZXIoc3RhbXBlZCwgc2VydmljZU5hbWUpLnRoZW4oKG9rKSA9PiB7XG4gICAgICAgIGlmIChvaykge1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdhdWRpdF9lbWl0dGVkX3RvdGFsJywgeyBzZXJ2aWNlOiBzZXJ2aWNlTmFtZSwgb3V0Y29tZTogc3RhbXBlZC5vdXRjb21lID8/ICdzdWNjZXNzJyB9KTtcbiAgICAgICAgICBpZiAoc3Bvb2wpIHZvaWQgZHJhaW4oKTsgLy8gcGxhdGZvcm0gaXMgcmVhY2hhYmxlIOKAlCBmbHVzaCBhbnkgYmFja2xvZ1xuICAgICAgICB9IGVsc2UgaWYgKHNwb29sKSB7XG4gICAgICAgICAgdm9pZCBzcG9vbC5lbnF1ZXVlKHsgZXZlbnQ6IHN0YW1wZWQsIHNlcnZpY2VOYW1lIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdhdWRpdF9kcm9wcGVkX3RvdGFsJywgeyBzZXJ2aWNlOiBzZXJ2aWNlTmFtZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAvLyBCZWx0IGFuZCBicmFjZXMuIGBkZWxpdmVyYCBubyBsb25nZXIgcmVqZWN0cywgYnV0IGFueXRoaW5nIHRoYXQgdGhyb3dzXG4gICAgICAgIC8vIGluIHRoZSBjb250aW51YXRpb24gd291bGQgb3RoZXJ3aXNlIGJlY29tZSBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uIOKAlFxuICAgICAgICAvLyBhbmQgaW4gdGhpcyBwcm9jZXNzIHRoYXQgaXMgYSBjcmFzaCwgbm90IGEgbG9nIGxpbmUuIEFuIGF1ZGl0IGV2ZW50XG4gICAgICAgIC8vIG11c3QgbmV2ZXIgdGFrZSB0aGUgc2VydmljZSBkb3duLlxuICAgICAgICBlbWl0Q291bnRlcignYXVkaXRfZHJvcHBlZF90b3RhbCcsIHsgc2VydmljZTogc2VydmljZU5hbWUgfSk7XG4gICAgICAgIGxvZ2dlci5lcnJvcignUmVtb3RlIGF1ZGl0IHJlY29yZCBmYWlsZWQgdW5leHBlY3RlZGx5JywgeyBhY3Rpb246IHN0YW1wZWQuYWN0aW9uLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNsb3NlKCkge1xuICAgICAgaWYgKGRyYWluVGltZXIpIHsgY2xlYXJJbnRlcnZhbChkcmFpblRpbWVyKTsgZHJhaW5UaW1lciA9IHVuZGVmaW5lZDsgfVxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIHN0YW5kYXJkIGBhdXRoei5kZW5pZWRgIHNpbmsgdXNlZCBieSBldmVyeSByZW1vdGUtYXVkaXQgc2VydmljZVxuICogKHBpcGVsaW5lLCBwbHVnaW4sIGNvbXBsaWFuY2UsIHF1b3RhLCBtZXNzYWdlLCBiaWxsaW5nLCByZXBvcnRpbmcsIOKApikuXG4gKlxuICogVGhlIHNoYXJlZCBgcmVxdWlyZUF1dGhgIGdhdGUgZm9yd2FyZHMgZWFjaCBERU5JRUQgc3RhdGUtY2hhbmdpbmcgcmVxdWVzdCB0b1xuICogdGhlIGF1ZGl0b3Igc2V0IHZpYSB7QGxpbmsgc2V0QXV0aHpEZW5pYWxBdWRpdG9yfTsgdGhpcyB3aXJlcyB0aGF0IGhvb2sgdG8gdGhlXG4gKiBzZXJ2aWNlJ3Mge0BsaW5rIFJlbW90ZUF1ZGl0Q2xpZW50fSwgZm9yd2FyZGluZyBhIGBmYWlsdXJlYC1vdXRjb21lXG4gKiBgYXV0aHouZGVuaWVkYCBldmVudCBzbyBwcm9iaW5nIC8gcHJpdmlsZWdlLWVzY2FsYXRpb24gYXR0ZW1wdHMgbGVhdmUgYSB0cmFpbC5cbiAqIEVtaXNzaW9uIGlzIGZpcmUtYW5kLWZvcmdldCAodGhlIGNsaWVudCBuZXZlciB0aHJvd3MpLiBgZ2V0Q2xpZW50YCBpcyBhIGdldHRlclxuICogc28gdGhlIGNsaWVudCBzdGF5cyBsYXppbHkgY29uc3RydWN0ZWQgKHNlcnZpY2VzIG1lbW9pemUgaXQgb24gZmlyc3QgdXNlKS5cbiAqXG4gKiBQbGF0Zm9ybSBpcyBpbnRlbnRpb25hbGx5IE5PVCBhIGNhbGxlciDigJQgaXQgaXMgdGhlIGF1ZGl0IGF1dGhvcml0eSBhbmQgd3JpdGVzXG4gKiBgYXV0aHouZGVuaWVkYCBzdHJhaWdodCB0byBpdHMgbG9jYWwgc3RvcmUgKHdpdGggYGFmZmVjdGVkT3JnSWRgKSwgbm90IHRocm91Z2hcbiAqIGEgUmVtb3RlQXVkaXRDbGllbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXJlQXV0aHpEZW5pYWxBdWRpdG9yKHNlcnZpY2VOYW1lOiBzdHJpbmcsIGdldENsaWVudDogKCkgPT4gUmVtb3RlQXVkaXRDbGllbnQpOiB2b2lkIHtcbiAgc2V0QXV0aHpEZW5pYWxBdWRpdG9yKChpbmZvOiBBdXRoekRlbmlhbEluZm8pID0+IGdldENsaWVudCgpLnJlY29yZCh7XG4gICAgYWN0aW9uOiAnYXV0aHouZGVuaWVkJyxcbiAgICBhY3RvcklkOiBpbmZvLmFjdG9ySWQgPz8gJ2Fub255bW91cycsXG4gICAgYWN0b3JFbWFpbDogaW5mby5hY3RvckVtYWlsLFxuICAgIG9yZ0lkOiBpbmZvLm9yZ0lkLFxuICAgIG91dGNvbWU6ICdmYWlsdXJlJyxcbiAgICBkZXRhaWxzOiB7IG1ldGhvZDogaW5mby5tZXRob2QsIHBhdGg6IGluZm8ucGF0aCwgcmVxdWlyZWQ6IGluZm8ucmVxdWlyZWQgfSxcbiAgfSwgc2VydmljZU5hbWUpKTtcbn1cblxuLyoqXG4gKiBBIHNlcnZpY2Utc2NvcGVkIGF1ZGl0IGNsaWVudDogYSBkdXJhYmxlLXNwb29sLWJhY2tlZCB7QGxpbmsgUmVtb3RlQXVkaXRDbGllbnR9XG4gKiB3aXRoIHRoZSBzZXJ2aWNlIG5hbWUgcHJlLWJvdW5kIGZvciBlbWlzc2lvbi4gUmVwbGFjZXMgdGhlIHBlci1zZXJ2aWNlXG4gKiBib2lsZXJwbGF0ZSBvZiBgY3JlYXRlUmVtb3RlQXVkaXRDbGllbnQoeyBzcG9vbDogY3JlYXRlRW52UmVkaXNBdWRpdFNwb29sKCkgPz8gdW5kZWZpbmVkIH0pYFxuICogcGx1cyBhIGhhbmQtcm9sbGVkIGBlbWl0PFNlcnZpY2U+QXVkaXRgIHdyYXBwZXIgdGhhdCByZXBlYXRzIHRoZSBzZXJ2aWNlIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUF1ZGl0Q2xpZW50IHtcbiAgLyoqIEVtaXQgYW4gYXVkaXQgZXZlbnQgd2l0aCB0aGUgc2VydmljZSBuYW1lIGJvdW5kLiBGaXJlLWFuZC1mb3JnZXQuICovXG4gIGVtaXQoZXZlbnQ6IFJlbW90ZUF1ZGl0RXZlbnQpOiB2b2lkO1xuICAvKiogVGhlIHVuZGVybHlpbmcgcmVtb3RlIGNsaWVudCDigJQgZm9yIGB3aXJlQXV0aHpEZW5pYWxBdWRpdG9yYCArIGBjbG9zZSgpYC4gKi9cbiAgcmVhZG9ubHkgY2xpZW50OiBSZW1vdGVBdWRpdENsaWVudDtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHNlcnZpY2UncyBhdWRpdCBjbGllbnQ6IGEgUmVtb3RlQXVkaXRDbGllbnQgd2lyZWQgdG8gdGhlIGR1cmFibGUgUmVkaXNcbiAqIHNwb29sIChmcm9tIGFtYmllbnQgZW52OyBudWxsIOKGkiBubyBzcG9vbCkgd2l0aCBgc2VydmljZU5hbWVgIGJvdW5kLiBDb25zdHJ1Y3RcbiAqIE9OQ0UgcGVyIHByb2Nlc3Mg4oCUIG1lbW9pemUgYmVoaW5kIGEgbGF6eSBgZ2V0QXVkaXRDbGllbnQoKWAgaW4gdGhlIHNlcnZpY2Unc1xuICogYHNlcnZpY2VzL2F1ZGl0LnRzYC4gUGFzcyBgY29uZmlnLnNwb29sYCB0byBvdmVycmlkZSB0aGUgZW52LWRlcml2ZWQgc3Bvb2xcbiAqIChlLmcuIHJldXNlIGEgc2VydmljZSdzIGV4aXN0aW5nIGlvcmVkaXMgY29ubmVjdGlvbikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXJ2aWNlQXVkaXRDbGllbnQoc2VydmljZU5hbWU6IHN0cmluZywgY29uZmlnOiBSZW1vdGVBdWRpdENsaWVudENvbmZpZyA9IHt9KTogU2VydmljZUF1ZGl0Q2xpZW50IHtcbiAgY29uc3Qgc3Bvb2wgPSBjb25maWcuc3Bvb2wgPz8gY3JlYXRlRW52UmVkaXNBdWRpdFNwb29sKCkgPz8gdW5kZWZpbmVkO1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVSZW1vdGVBdWRpdENsaWVudCh7IC4uLmNvbmZpZywgc3Bvb2wgfSk7XG4gIHJldHVybiB7XG4gICAgZW1pdDogKGV2ZW50KSA9PiBjbGllbnQucmVjb3JkKGV2ZW50LCBzZXJ2aWNlTmFtZSksXG4gICAgY2xpZW50LFxuICB9O1xufVxuXG4vKipcbiAqIExhemlseS1jb25zdHJ1Y3RlZCByZW1vdGUtYXVkaXQgYWNjZXNzb3IgZm9yIGEgc2VydmljZS4gRXZlcnkgc2VydmljZSdzXG4gKiBgc2VydmljZXMvYXVkaXQudHNgIHVzZWQgdG8gaGFuZC1yb2xsIHRoZSBzYW1lIG1vZHVsZSBzaW5nbGV0b24gKGEgYGxldCBhdWRpdGBcbiAqICsgYHN2YygpYCB0aGF0IGJ1aWxkcyBhIHtAbGluayBTZXJ2aWNlQXVkaXRDbGllbnR9IG9uIGZpcnN0IHVzZSwgdGhlbiBhXG4gKiBgZ2V0QXVkaXRDbGllbnQoKWAgcmV0dXJuaW5nIGAuY2xpZW50YCBhbmQgYW4gYGVtaXQoZXZlbnQpYCBmb3J3YXJkaW5nIHRvXG4gKiBgLmVtaXRgKS4gVGhpcyBwYWNrYWdlcyB0aGF0IHBhdHRlcm4gaW4gT05FIHBsYWNlIHNvIGVhY2ggc2VydmljZSdzIGF1ZGl0XG4gKiB3aXJpbmcgaXMgYSBvbmUtbGluZXIgYW5kIGNhbid0IGRyaWZ0LlxuICpcbiAqIExhenkgb24gcHVycG9zZTogdGhlIHVuZGVybHlpbmcgY2xpZW50IHdpcmVzIGFuIGVudi1SZWRpcyBhdWRpdCBzcG9vbCwgc29cbiAqIGJ1aWxkaW5nIGl0IGF0IGltcG9ydCB0aW1lIHdvdWxkIGZvcmNlIHRoYXQgY29ubmVjdGlvbiB3aGVyZXZlciB0aGUgbW9kdWxlIGlzXG4gKiBtZXJlbHkgaW1wb3J0ZWQgKGUuZy4gdGVzdHMpLiBgZ2V0QXVkaXRDbGllbnRgIGlzIHBhc3NlZCB0b1xuICogYHdpcmVBdXRoekRlbmlhbEF1ZGl0b3JgOyBgZW1pdGAgYmFja3MgdGhlIHBlci1zZXJ2aWNlIGBlbWl0WEF1ZGl0YCBoZWxwZXJzLlxuICogQm90aCBzdGF5IEZJUkUtQU5ELUZPUkdFVCAocmVjb3JkIG5ldmVyIHRocm93cyAvIGlzIG5vdCBhd2FpdGVkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUF1ZGl0QWNjZXNzb3Ioc2VydmljZU5hbWU6IHN0cmluZyk6IHtcbiAgZ2V0QXVkaXRDbGllbnQ6ICgpID0+IFJlbW90ZUF1ZGl0Q2xpZW50O1xuICBlbWl0OiAoZXZlbnQ6IFJlbW90ZUF1ZGl0RXZlbnQpID0+IHZvaWQ7XG59IHtcbiAgbGV0IGF1ZGl0OiBTZXJ2aWNlQXVkaXRDbGllbnQgfCBudWxsID0gbnVsbDtcbiAgY29uc3Qgc3ZjID0gKCk6IFNlcnZpY2VBdWRpdENsaWVudCA9PiB7XG4gICAgaWYgKCFhdWRpdCkgYXVkaXQgPSBjcmVhdGVTZXJ2aWNlQXVkaXRDbGllbnQoc2VydmljZU5hbWUpO1xuICAgIHJldHVybiBhdWRpdDtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBnZXRBdWRpdENsaWVudDogKCkgPT4gc3ZjKCkuY2xpZW50LFxuICAgIGVtaXQ6IChldmVudCkgPT4gc3ZjKCkuZW1pdChldmVudCksXG4gIH07XG59XG4iXX0=
@@ -301,8 +301,15 @@ export function signServiceJwt(claims, options) {
301
301
  */
302
302
  export function verifyServiceJwt(token, options) {
303
303
  const entry = verificationKeys().get(options.kid);
304
+ // EVERY emission of this counter carries the same label KEYS. The Prometheus
305
+ // counter is registered lazily with whatever keys its first emission used,
306
+ // and an increment with a different set throws — which `emitCounter`
307
+ // swallows. So when the first token a pod verified was bad (`{ result }`
308
+ // alone), every later `ok` and `subject_mismatch` (`{ result, service }`) was
309
+ // silently dropped for the life of the process: the metric that tells you
310
+ // service-to-service auth is healthy went quiet exactly when it mattered.
304
311
  if (!entry) {
305
- emitCounter('service_token_verify_total', { result: 'unknown_kid' });
312
+ emitCounter('service_token_verify_total', { result: 'unknown_kid', service: 'unknown' });
306
313
  throw new jwt.JsonWebTokenError(`No published service key for kid ${options.kid}`);
307
314
  }
308
315
  let claims;
@@ -314,7 +321,7 @@ export function verifyServiceJwt(token, options) {
314
321
  });
315
322
  }
316
323
  catch (error) {
317
- emitCounter('service_token_verify_total', { result: 'invalid' });
324
+ emitCounter('service_token_verify_total', { result: 'invalid', service: entry.serviceName });
318
325
  throw error;
319
326
  }
320
327
  if (claims.sub !== `${SERVICE_SUBJECT_PREFIX}${entry.serviceName}`) {
@@ -352,4 +359,4 @@ export function _resetServiceKeysForTests() {
352
359
  ephemeralKeys = undefined;
353
360
  ephemeralWarned = false;
354
361
  }
355
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1rZXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3NlcnZpY2Uta2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtERztBQUVILE9BQU8sTUFBTSxFQUFFLEVBQWtCLE1BQU0sUUFBUSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzVDLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFrQixNQUFNLGlCQUFpQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUU1Qyx1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDO0FBRS9DLHVGQUF1RjtBQUN2RixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUM7QUFFakQsaUZBQWlGO0FBQ2pGLE1BQU0sMEJBQTBCLEdBQUcsT0FBTyxDQUFDLENBQUMsWUFBWTtBQW9CeEQsNkVBQTZFO0FBQzdFLE1BQU0sT0FBTyxlQUFnQixTQUFRLEtBQUs7SUFDeEMsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxN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QU8sRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN4RixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSw2QkFBNkI7SUFDM0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx5QkFBeUI7SUFDdkMsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUNyQixNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ25CLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDMUIsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUGVyLXNlcnZpY2Ugc2lnbmluZyBrZXlzIGZvciBJTlRFUk5BTCBzZXJ2aWNlLXRvLXNlcnZpY2UgdG9rZW5zICgjMTQpLlxuICpcbiAqIEJlZm9yZSB0aGlzLCBldmVyeSBzZXJ2aWNlIGhlbGQgb25lIHNoYXJlZCBgSldUX1NFQ1JFVGAsIHNvIGFueSBzZXJ2aWNlIGNvdWxkXG4gKiBtaW50IGEgdG9rZW4gbmFtaW5nIGFueSBPVEhFUiBzZXJ2aWNlIOKAlCBcImJpbGxpbmcgc2FpZCBzb1wiIHdhcyB1bmZhbHNpZmlhYmxlLFxuICogYW5kIGEgc2luZ2xlIGNvbXByb21pc2VkIHdvcmtsb2FkIGNvdWxkIHNwZWFrIGZvciB0aGUgd2hvbGUgZmxlZXQuIE5vdyBlYWNoXG4gKiBzZXJ2aWNlIHNpZ25zIHdpdGggaXRzIE9XTiBFUzI1NiAoRUMgUC0yNTYpIGtleSBhbmQgY29uc3VtZXJzIHZlcmlmeSBhZ2FpbnN0XG4gKiB0aGUgcHVibGljIGhhbHZlcy4gVGhlIGBraWRgIGlzIGJvdW5kIHRvIHRoZSBzaWduZXIncyBOQU1FLCBzbyBhIHRva2VuIHdob3NlXG4gKiBgc3ViYCBzYXlzIGBzZXJ2aWNlOmJpbGxpbmdgIGJ1dCB3YXMgc2lnbmVkIHdpdGggY29tcGxpYW5jZSdzIGtleSBpcyBhXG4gKiBmb3JnZXJ5LCBub3QgYSB2YWxpZCB0b2tlbiB3aXRoIGEgY29uZnVzaW5nIHN1YmplY3QuXG4gKlxuICogIyMgV2h5IHB1YmxpYyBrZXlzIGFyZSBkaXN0cmlidXRlZCBieSBDT05GSUcsIG5vdCBieSBwZXItc2VydmljZSBKV0tTIGVuZHBvaW50c1xuICpcbiAqIFRoZSB1c2VyIGNoYWluICgjNSkgZmV0Y2hlcyBwbGF0Zm9ybSdzIEpXS1Mgb3ZlciBIVFRQIGJlY2F1c2UgdGhlcmUgaXMgZXhhY3RseVxuICogb25lIHNpZ25lciBhbmQgaXQgaXMgdGhlIG9uZSBzZXJ2aWNlIHRoYXQgbXVzdCBiZSB1cCBmb3IgYW55Ym9keSB0byBzaWduIGluLlxuICogVGhlIHNlcnZpY2UgY2hhaW4gaXMgdGhlIG9wcG9zaXRlIHNoYXBlLCBhbmQgdGhyZWUgcHJvcGVydGllcyBkZWNpZGVkIGl0OlxuICpcbiAqICAxLiAqKmB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsYCBtdXN0IHN0YXkgc3luY2hyb25vdXMuKiogVGhlIGdsb2JhbCByYXRlXG4gKiAgICAgbGltaXRlcidzIGBza2lwYCBhbmQgYXBwLWZhY3RvcnkncyBgL3dhcm11cGAgZ3VhcmQgdmVyaWZ5IGEgc2VydmljZSB0b2tlblxuICogICAgIEJFRk9SRSBgcmVxdWlyZUF1dGhgIHJ1bnMsIGluIHN5bmNocm9ub3VzIEV4cHJlc3MgY2FsbGJhY2tzLiBBbiBIVFRQIEpXS1NcbiAqICAgICBmZXRjaCB3b3VsZCBmb3JjZSB0aG9zZSBhc3luYyDigJQgYSBjaGFuZ2UgdGhhdCByZWFjaGVzIGludG8gZXZlcnlcbiAqICAgICBzZXJ2aWNlJ3MgbGltaXRlciB3aXJpbmcuXG4gKiAgMi4gKipObyBhdmFpbGFiaWxpdHkgY291cGxpbmcuKiogV2l0aCBwZXItc2VydmljZSBKV0tTIGVuZHBvaW50cywgdmVyaWZ5aW5nIGFcbiAqICAgICB0b2tlbiBtaW50ZWQgYnkgYGJpbGxpbmdgIG5lZWRzIGBiaWxsaW5nYCB0byBiZSByZWFjaGFibGUg4oCUIHNvIGJpbGxpbmdcbiAqICAgICBiZWluZyBkb3duIHdvdWxkIHN0b3AgcGxhdGZvcm0gZnJvbSBhY2NlcHRpbmcgYmlsbGluZydzIGluLWZsaWdodCBjYWxscyxcbiAqICAgICB0dXJuaW5nIG9uZSBvdXRhZ2UgaW50byBzZXZlcmFsLiBBIG1vdW50ZWQgZmlsZSBoYXMgbm8gc3VjaCBlZGdlLlxuICogIDMuICoqTm8gTsOXTiBhZGRyZXNzIGNvbmZpZy4qKiAxMCBzZXJ2aWNlcyB3b3VsZCBlYWNoIG5lZWQgZXZlcnkgcGVlcidzXG4gKiAgICAgaG9zdC9wb3J0IChhbmQgY29tcG9zZSwgd2hpY2ggaGFzIG5vIG1lc2gsIHdvdWxkIG5lZWQgdGhlbSB0b28pLlxuICpcbiAqIFNvIHRoZSBkZXBsb3kgZ2VuZXJhdGVzIG9uZSBrZXlwYWlyIHBlciBzZXJ2aWNlLCBtb3VudHMgZWFjaCBwcml2YXRlIGtleSBPTkxZXG4gKiBpbnRvIGl0cyBvd24gc2VydmljZSwgYW5kIG1vdW50cyBPTkUgcHVibGljIGJ1bmRsZSAocmVhZC1vbmx5KSBldmVyeXdoZXJlOlxuICpcbiAqICAgYFNFUlZJQ0VfU0lHTklOR19LRVlfRklMRWAgIHRoaXMgc2VydmljZSdzIEVDIFAtMjU2IHByaXZhdGUga2V5IChQS0NTIzggUEVNKVxuICogICBgU0VSVklDRV9LRVlfQlVORExFX0ZJTEVgICAgYHsgXCJzZXJ2aWNlc1wiOiB7IFwiPG5hbWU+XCI6IHsgXCJrZXlzXCI6IFs8andrPuKApl0gfSB9IH1gXG4gKlxuICogUm90YXRpb24gaXMgYnkgYGtpZGAsIGluIHRoZSBzYW1lIHNoYXBlIGFzIHRoZSB1c2VyIGNoYWluOiBhZGQgdGhlIG5ldyBwdWJsaWNcbiAqIGtleSB0byB0aGUgYnVuZGxlICh0aGUgc2VydmljZSBub3cgcHVibGlzaGVzIHR3byksIHJvbGwgdGhlIGJ1bmRsZSBvdXQsIHN3YXBcbiAqIHRoYXQgc2VydmljZSdzIHByaXZhdGUga2V5LCB0aGVuIGRyb3AgdGhlIHJldGlyZWQgcHVibGljIGtleS4gVGhlIGJ1bmRsZSBpc1xuICogcmUtcmVhZCBvbiBhbiBpbnRlcnZhbCBBTkQgb24gYW4gbXRpbWUgY2hhbmdlLCBzbyBhIHJvdGF0aW9uIG5lZWRzIG5vIHJlc3RhcnQuXG4gKiBgZGVwbG95L2Jpbi9zZXJ2aWNlLXNpZ25pbmcta2V5cy5zaGAgZ2VuZXJhdGVzIGFuZCByb3RhdGVzIGJvdGggaGFsdmVzLlxuICpcbiAqICMjIEVwaGVtZXJhbCBtb2RlXG4gKlxuICogV2l0aCBubyBgU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFYCBjb25maWd1cmVkLCBhIGtleXBhaXIgaXMgZ2VuZXJhdGVkXG4gKiBJTi1QUk9DRVNTIHBlciByZXF1ZXN0ZWQgc2VydmljZSBuYW1lIGFuZCByZWdpc3RlcmVkIGluIHRoZSBpbi1tZW1vcnkgYnVuZGxlLlxuICogVGhhdCBrZWVwcyBzaW5nbGUtcHJvY2VzcyBzdWl0ZXMgYW5kIGxvY2FsIG9uZS1vZmYgc2NyaXB0cyB3b3JraW5nIHdpdGggbm8ga2V5XG4gKiBtYXRlcmlhbCwgYW5kIGl0IGNhbiBuZXZlciB3aWRlbiB0cnVzdDogdGhlIG9ubHkgdmVyaWZpZXIgdGhhdCBhY2NlcHRzIHN1Y2ggYVxuICogdG9rZW4gaXMgdGhlIHByb2Nlc3MgdGhhdCBtaW50ZWQgaXQuIEl0IGlzIGxvZ2dlZCBvbmNlIGF0IHdhcm4gbGV2ZWwsIGFuZFxuICogY291bnRlZCwgYmVjYXVzZSBpbiBhIHJlYWwgZGVwbG95bWVudCBpdCBtZWFucyB0aGlzIHNlcnZpY2UncyBwZWVycyB3aWxsXG4gKiByZWplY3QgZXZlcnl0aGluZyBpdCBzZW5kcy5cbiAqL1xuXG5pbXBvcnQgY3J5cHRvLCB7IHR5cGUgS2V5T2JqZWN0IH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYywgc3RhdFN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgand0IGZyb20gJ2pzb253ZWJ0b2tlbic7XG5pbXBvcnQgeyBwdWJsaWNKd2tGcm9tLCBwdWJsaWNLZXlGcm9tSndrLCB0eXBlIFB1YmxpY0p3ayB9IGZyb20gJy4uL3V0aWxzL2p3ay5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignc2VydmljZS1rZXlzJyk7XG5cbi8qKiBUaGUgT05MWSBhbGdvcml0aG0gYW4gaW50ZXJuYWwgc2VydmljZSB0b2tlbiBtYXkgYmUgc2lnbmVkIHdpdGguICovXG5leHBvcnQgY29uc3QgU0VSVklDRV9UT0tFTl9BTEdPUklUSE0gPSAnRVMyNTYnO1xuXG4vKiogU3ViamVjdCBwcmVmaXggbmFtaW5nIHRoZSBjYWxsaW5nIHNlcnZpY2Ugb24gYSBzZXJ2aWNlIHRva2VuIChgc2VydmljZTo8bmFtZT5gKS4gKi9cbmV4cG9ydCBjb25zdCBTRVJWSUNFX1NVQkpFQ1RfUFJFRklYID0gJ3NlcnZpY2U6JztcblxuLyoqIEhvdyBsb25nIGEgbG9hZGVkIGJ1bmRsZSBpcyBzZXJ2ZWQgYmVmb3JlIGl0IGlzIHJlLXJlYWQgKHJvdGF0aW9uIHBpY2t1cCkuICovXG5jb25zdCBCVU5ETEVfUkVGUkVTSF9JTlRFUlZBTF9NUyA9IDMwMF8wMDA7IC8vIDUgbWludXRlc1xuXG4vKiogT25lIHNlcnZpY2UncyBwdWJsaXNoZWQgdmVyaWZpY2F0aW9uIGtleXMsIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBidW5kbGUgZmlsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUtleUVudHJ5IHtcbiAga2V5czogUHVibGljSndrW107XG59XG5cbi8qKiBUaGUgZG9jdW1lbnQgYFNFUlZJQ0VfS0VZX0JVTkRMRV9GSUxFYCBob2xkczogZXZlcnkgc2VydmljZSdzIHB1YmxpYyBrZXlzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlS2V5QnVuZGxlIHtcbiAgc2VydmljZXM6IFJlY29yZDxzdHJpbmcsIFNlcnZpY2VLZXlFbnRyeT47XG59XG5cbi8qKiBBIHNpZ25pbmcga2V5IHRoaXMgcHJvY2VzcyBob2xkcywgaW4gdGhlIGZvcm1zIHNpZ25pbmcgbmVlZHMuICovXG5pbnRlcmZhY2UgTG9jYWxTaWduaW5nS2V5IHtcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAga2lkOiBzdHJpbmc7XG4gIHByaXZhdGVLZXk6IEtleU9iamVjdDtcbiAgcHVibGljSndrOiBQdWJsaWNKd2s7XG59XG5cbi8qKiBUaGUgYnVuZGxlIGNvdWxkIG5vdCBiZSBsb2FkZWQgb3IgZG9lcyBub3Qga25vdyB0aGUga2V5IGEgdG9rZW4gbmFtZXMuICovXG5leHBvcnQgY2xhc3MgU2VydmljZUtleUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnU2VydmljZUtleUVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgcHJvY2VzcydzIHNlcnZpY2UgaWRlbnRpdHkg4oCUIHRoZSBgPG5hbWU+YCBpbiBgc2VydmljZTo8bmFtZT5gIGFuZCB0aGVcbiAqIG5hbWUgaXRzIGtleSBpcyBwdWJsaXNoZWQgdW5kZXIuIGBTRVJWSUNFX05BTUVgIGlzIGFscmVhZHkgc2V0IHBlciBzZXJ2aWNlIGluXG4gKiBldmVyeSBkZXBsb3kgdGFyZ2V0IChjb21wb3NlLCBtaW5pa3ViZSwgZWMyLCBla3MpLCBhbmQgaXMgdGhlIHNhbWUgdmFsdWUgdGhlXG4gKiBhdWRpdCBhbmQgbWV0cmljIGxhYmVscyB1c2UsIHNvIHRoZXJlIGlzIG9uZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIFwid2hvIGFtIElcIi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VJZGVudGl0eSgpOiBzdHJpbmcge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FIHx8ICdhcGknO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExvY2FsIHNpZ25pbmcga2V5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubGV0IGxvY2FsS2V5OiBMb2NhbFNpZ25pbmdLZXkgfCB1bmRlZmluZWQ7XG5sZXQgZXBoZW1lcmFsS2V5czogTWFwPHN0cmluZywgTG9jYWxTaWduaW5nS2V5PiB8IHVuZGVmaW5lZDtcbmxldCBlcGhlbWVyYWxXYXJuZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gbG9hZENvbmZpZ3VyZWRTaWduaW5nS2V5KGZpbGU6IHN0cmluZyk6IExvY2FsU2lnbmluZ0tleSB7XG4gIGNvbnN0IHNlcnZpY2VOYW1lID0gc2VydmljZUlkZW50aXR5KCk7XG4gIGxldCBwcml2YXRlS2V5OiBLZXlPYmplY3Q7XG4gIHRyeSB7XG4gICAgcHJpdmF0ZUtleSA9IGNyeXB0by5jcmVhdGVQcml2YXRlS2V5KHJlYWRGaWxlU3luYyhmaWxlLCAndXRmOCcpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGBDb3VsZCBub3QgcmVhZCB0aGUgc2VydmljZSBzaWduaW5nIGtleSBhdCAke2ZpbGV9OiAke2Vycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gIH1cbiAgLy8gcHVibGljSndrRnJvbSByZWplY3RzIGFueXRoaW5nIGJ1dCBhbiBFQyBQLTI1NiBrZXksIHNvIGEgc2VydmljZSBjb25maWd1cmVkXG4gIC8vIHdpdGggKHNheSkgYW4gUlNBIGtleSBmYWlscyBIRVJFIHJhdGhlciB0aGFuIG1pbnRpbmcgdG9rZW5zIG5vYm9keSB2ZXJpZmllcy5cbiAgY29uc3QgcHVibGljSndrID0gcHVibGljSndrRnJvbShjcnlwdG8uY3JlYXRlUHVibGljS2V5KHByaXZhdGVLZXkpKTtcbiAgcmV0dXJuIHsgc2VydmljZU5hbWUsIGtpZDogcHVibGljSndrLmtpZCwgcHJpdmF0ZUtleSwgcHVibGljSndrIH07XG59XG5cbi8qKlxuICogVGhlIGluLXByb2Nlc3Mga2V5IGZvciBgc2VydmljZU5hbWVgIGluIGVwaGVtZXJhbCBtb2RlLCBnZW5lcmF0ZWQgb24gZmlyc3RcbiAqIHVzZSBhbmQgcmVnaXN0ZXJlZCBpbiB0aGUgaW4tbWVtb3J5IGJ1bmRsZSBzbyB0aGlzIHByb2Nlc3MgY2FuIHZlcmlmeSBpdHMgb3duXG4gKiB0b2tlbnMuIEtleWVkIGJ5IE5BTUUgKG5vdCBqdXN0IG9uZSBrZXkpIHNvIGEgc2luZ2xlLXByb2Nlc3Mgc3VpdGUgY2FuIG1pbnRcbiAqIHRva2VucyBmb3Igc2V2ZXJhbCBzZXJ2aWNlcywgYXMgdGhlIHJlYWwgZmxlZXQgZG9lcyBhY3Jvc3MgcHJvY2Vzc2VzLlxuICovXG5mdW5jdGlvbiBlcGhlbWVyYWxTaWduaW5nS2V5KHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBMb2NhbFNpZ25pbmdLZXkge1xuICBlcGhlbWVyYWxLZXlzID8/PSBuZXcgTWFwKCk7XG4gIGNvbnN0IGV4aXN0aW5nID0gZXBoZW1lcmFsS2V5cy5nZXQoc2VydmljZU5hbWUpO1xuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICBpZiAoIWVwaGVtZXJhbFdhcm5lZCkge1xuICAgIGVwaGVtZXJhbFdhcm5lZCA9IHRydWU7XG4gICAgZW1pdENvdW50ZXIoJ3NlcnZpY2Vfc2lnbmluZ19lcGhlbWVyYWxfa2V5X3RvdGFsJywgeyBzZXJ2aWNlOiBzZXJ2aWNlSWRlbnRpdHkoKSB9KTtcbiAgICBsb2dnZXIud2FybignU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFIGlzIG5vdCBzZXQg4oCUIG1pbnRpbmcgaW50ZXJuYWwgc2VydmljZSB0b2tlbnMgd2l0aCBhbiBFUEhFTUVSQUwga2V5LiBPbmx5IHRoaXMgcHJvY2VzcyB3aWxsIGFjY2VwdCB0aGVtOyBldmVyeSBwZWVyIHdpbGwgcmVqZWN0IHRoZW0uIFNldCBTRVJWSUNFX1NJR05JTkdfS0VZX0ZJTEUgKyBTRVJWSUNFX0tFWV9CVU5ETEVfRklMRSAoZGVwbG95L2Jpbi9zZXJ2aWNlLXNpZ25pbmcta2V5cy5zaCkuJyk7XG4gIH1cbiAgY29uc3QgeyBwcml2YXRlS2V5LCBwdWJsaWNLZXkgfSA9IGNyeXB0by5nZW5lcmF0ZUtleVBhaXJTeW5jKCdlYycsIHsgbmFtZWRDdXJ2ZTogJ3ByaW1lMjU2djEnIH0pO1xuICBjb25zdCBwdWJsaWNKd2sgPSBwdWJsaWNKd2tGcm9tKHB1YmxpY0tleSk7XG4gIGNvbnN0IGdlbmVyYXRlZDogTG9jYWxTaWduaW5nS2V5ID0geyBzZXJ2aWNlTmFtZSwga2lkOiBwdWJsaWNKd2sua2lkLCBwcml2YXRlS2V5LCBwdWJsaWNKd2sgfTtcbiAgZXBoZW1lcmFsS2V5cy5zZXQoc2VydmljZU5hbWUsIGdlbmVyYXRlZCk7XG4gIHJldHVybiBnZW5lcmF0ZWQ7XG59XG5cbi8qKiBXaGV0aGVyIHRoaXMgcHJvY2VzcyBzaWducyB3aXRoIGEgbW91bnRlZCBrZXkgKGBjb25maWd1cmVkYCkgb3IgYW4gaW4tcHJvY2VzcyBvbmUuICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZUtleU1vZGUoKTogJ2NvbmZpZ3VyZWQnIHwgJ2VwaGVtZXJhbCcge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFID8gJ2NvbmZpZ3VyZWQnIDogJ2VwaGVtZXJhbCc7XG59XG5cbi8qKlxuICogVGhlIGtleSBgc2VydmljZU5hbWVgIG11c3QgYmUgc2lnbmVkIHdpdGguXG4gKlxuICogSW4gYGNvbmZpZ3VyZWRgIG1vZGUgdGhlcmUgaXMgZXhhY3RseSBPTkUga2V5IOKAlCB0aGlzIHNlcnZpY2UncyDigJQgc28gYSByZXF1ZXN0XG4gKiB0byBzaWduIGFzIHNvbWUgT1RIRVIgc2VydmljZSBpcyBhIGJ1ZyBhbmQgdGhyb3dzLiBUaGF0IG1hdHRlcnM6IGJlZm9yZSAjMTQgYVxuICogc2VydmljZSBjb3VsZCBsZWdpdGltYXRlbHkgbWludCBgc2VydmljZTpwbGF0Zm9ybWAgd2l0aCB0aGUgc2hhcmVkIHNlY3JldFxuICogKGFwaS9wbHVnaW4gZGlkLCBmb3IgaXRzIHJlZ2lzdHJ5IHB1c2hlcyksIGFuZCB1bmRlciBwZXItc2VydmljZSBrZXlzIHN1Y2ggYVxuICogdG9rZW4gd291bGQgYmUgc2lsZW50bHkgdW52ZXJpZmlhYmxlIGV2ZXJ5d2hlcmUuIEZhaWxpbmcgYXQgdGhlIG1pbnQgdHVybnNcbiAqIHRoYXQgaW50byBhbiBpbW1lZGlhdGUsIG9idmlvdXMgZXJyb3IgaW5zdGVhZCBvZiBhIHJ1bnRpbWUgNDAxLlxuICovXG5mdW5jdGlvbiBzaWduaW5nS2V5Rm9yKHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBMb2NhbFNpZ25pbmdLZXkge1xuICBjb25zdCBmaWxlID0gcHJvY2Vzcy5lbnYuU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFO1xuICBpZiAoIWZpbGUpIHJldHVybiBlcGhlbWVyYWxTaWduaW5nS2V5KHNlcnZpY2VOYW1lKTtcblxuICBpZiAoIWxvY2FsS2V5IHx8IGxvY2FsS2V5LnNlcnZpY2VOYW1lICE9PSBzZXJ2aWNlSWRlbnRpdHkoKSkge1xuICAgIGxvY2FsS2V5ID0gbG9hZENvbmZpZ3VyZWRTaWduaW5nS2V5KGZpbGUpO1xuICB9XG4gIGlmIChzZXJ2aWNlTmFtZSAhPT0gbG9jYWxLZXkuc2VydmljZU5hbWUpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKFxuICAgICAgYFRoaXMgcHJvY2VzcyBpcyAnJHtsb2NhbEtleS5zZXJ2aWNlTmFtZX0nIGFuZCBob2xkcyBvbmx5IGl0cyBvd24gc2lnbmluZyBrZXksIHNvIGl0IGNhbm5vdCBtaW50IGEgdG9rZW4gZm9yICcke3NlcnZpY2VOYW1lfScuIGBcbiAgICAgICsgJ05hbWUgdGhlIGNhbGxpbmcgc2VydmljZSBjb3JyZWN0bHksIG9yIGdpdmUgdGhlIGNhbGxlciBpdHMgb3duIGtleS4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGxvY2FsS2V5O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFZlcmlmaWNhdGlvbiBidW5kbGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbnRlcmZhY2UgTG9hZGVkQnVuZGxlIHtcbiAgLyoqIGBraWRgIOKGkiB0aGUgc2VydmljZSB0aGF0IHB1Ymxpc2hlZCBpdCwgcGx1cyB0aGUgdmVyaWZpY2F0aW9uIGtleS4gKi9cbiAgYnlLaWQ6IE1hcDxzdHJpbmcsIHsgc2VydmljZU5hbWU6IHN0cmluZzsga2V5OiBLZXlPYmplY3QgfT47XG4gIGxvYWRlZEF0OiBudW1iZXI7XG4gIG10aW1lTXM6IG51bWJlcjtcbn1cblxubGV0IGJ1bmRsZTogTG9hZGVkQnVuZGxlIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBwYXJzZUJ1bmRsZShyYXc6IHN0cmluZywgZmlsZTogc3RyaW5nKTogTWFwPHN0cmluZywgeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBrZXk6IEtleU9iamVjdCB9PiB7XG4gIGxldCBkb2N1bWVudDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBkb2N1bWVudCA9IEpTT04ucGFyc2UocmF3KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGlzIG5vdCB2YWxpZCBKU09OOiAke2Vycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gIH1cbiAgY29uc3Qgc2VydmljZXMgPSAoZG9jdW1lbnQgYXMgUGFydGlhbDxTZXJ2aWNlS2V5QnVuZGxlPik/LnNlcnZpY2VzO1xuICBpZiAoIXNlcnZpY2VzIHx8IHR5cGVvZiBzZXJ2aWNlcyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGhhcyBubyBcInNlcnZpY2VzXCIgb2JqZWN0YCk7XG4gIH1cbiAgY29uc3QgYnlLaWQgPSBuZXcgTWFwPHN0cmluZywgeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBrZXk6IEtleU9iamVjdCB9PigpO1xuICBmb3IgKGNvbnN0IFtzZXJ2aWNlTmFtZSwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKHNlcnZpY2VzKSkge1xuICAgIGZvciAoY29uc3QgandrIG9mIGVudHJ5Py5rZXlzID8/IFtdKSB7XG4gICAgICBpZiAoIWp3az8ua2lkKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJ5S2lkLnNldChqd2sua2lkLCB7IHNlcnZpY2VOYW1lLCBrZXk6IHB1YmxpY0tleUZyb21Kd2soandrKSB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE9uZSB1bnVzYWJsZSBlbnRyeSBtdXN0IG5vdCBkaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBidW5kbGUg4oCUIHRoZSBzYW1lXG4gICAgICAgIC8vIHJ1bGUgdGhlIEpXS1MgY2FjaGUgYXBwbGllcyB0byBwbGF0Zm9ybSdzIHB1Ymxpc2hlZCBzZXQuXG4gICAgICAgIGxvZ2dlci53YXJuKCdTa2lwcGluZyB1bnVzYWJsZSBzZXJ2aWNlIGtleScsIHsgc2VydmljZU5hbWUsIGtpZDogandrLmtpZCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChieUtpZC5zaXplID09PSAwKSB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGNvbnRhaW5lZCBubyB1c2FibGUgc2VydmljZSBrZXlzYCk7XG4gIHJldHVybiBieUtpZDtcbn1cblxuLyoqXG4gKiBUaGUgYGtpZGAg4oaSIHNlcnZpY2UgbWFwLCByZS1yZWFkIHdoZW4gdGhlIHJlZnJlc2ggaW50ZXJ2YWwgaGFzIHBhc3NlZCBvciB0aGVcbiAqIGZpbGUncyBtdGltZSBjaGFuZ2VkIChzbyBhIHJvdGF0aW9uIGlzIHBpY2tlZCB1cCB3aXRob3V0IGEgcmVzdGFydCkuXG4gKlxuICogSW4gZXBoZW1lcmFsIG1vZGUgdGhlIFwiYnVuZGxlXCIgaXMgd2hhdGV2ZXIgdGhpcyBwcm9jZXNzIGdlbmVyYXRlZCBmb3IgaXRzZWxmLlxuICogTmV2ZXIgdGhyb3dzIGZvciBhIG1pc3NpbmcgZmlsZSBpbiB0aGF0IG1vZGUg4oCUIGl0IGp1c3QgaG9sZHMgdGhvc2Uga2V5cy5cbiAqL1xuZnVuY3Rpb24gdmVyaWZpY2F0aW9uS2V5cygpOiBNYXA8c3RyaW5nLCB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGtleTogS2V5T2JqZWN0IH0+IHtcbiAgY29uc3QgZmlsZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfS0VZX0JVTkRMRV9GSUxFO1xuICBpZiAoIWZpbGUpIHtcbiAgICBjb25zdCBsb2NhbCA9IG5ldyBNYXA8c3RyaW5nLCB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGtleTogS2V5T2JqZWN0IH0+KCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZXBoZW1lcmFsS2V5cz8udmFsdWVzKCkgPz8gW10pIHtcbiAgICAgIGxvY2FsLnNldChrZXkua2lkLCB7IHNlcnZpY2VOYW1lOiBrZXkuc2VydmljZU5hbWUsIGtleTogY3J5cHRvLmNyZWF0ZVB1YmxpY0tleShrZXkucHJpdmF0ZUtleSkgfSk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbDtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGxldCBtdGltZU1zID0gMDtcbiAgdHJ5IHtcbiAgICBtdGltZU1zID0gc3RhdFN5bmMoZmlsZSkubXRpbWVNcztcbiAgfSBjYXRjaCB7XG4gICAgLy8gVW5yZWFkYWJsZSBub3c6IGtlZXAgc2VydmluZyBhIGJ1bmRsZSBhbHJlYWR5IGluIGhhbmQgKHB1YmxpYyBrZXlzIGRvbid0XG4gICAgLy8gZXhwaXJlLCBhbmQgcmVmdXNpbmcgZXZlcnkgaW50ZXJuYWwgY2FsbCBiZWNhdXNlIGEgbW91bnQgYmxpcHBlZCB3b3VsZCBiZVxuICAgIC8vIGEgc2VsZi1pbmZsaWN0ZWQgb3V0YWdlKS4gV2l0aCBub3RoaW5nIGluIGhhbmQsIGZhaWwgY2xvc2VkIGJlbG93LlxuICAgIGlmIChidW5kbGUpIHJldHVybiBidW5kbGUuYnlLaWQ7XG4gIH1cbiAgaWYgKGJ1bmRsZSAmJiBidW5kbGUubXRpbWVNcyA9PT0gbXRpbWVNcyAmJiBub3cgLSBidW5kbGUubG9hZGVkQXQgPCBCVU5ETEVfUkVGUkVTSF9JTlRFUlZBTF9NUykge1xuICAgIHJldHVybiBidW5kbGUuYnlLaWQ7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGJ5S2lkID0gcGFyc2VCdW5kbGUocmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4JyksIGZpbGUpO1xuICAgIGJ1bmRsZSA9IHsgYnlLaWQsIGxvYWRlZEF0OiBub3csIG10aW1lTXMgfTtcbiAgICByZXR1cm4gYnlLaWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGJ1bmRsZSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1NlcnZpY2Uga2V5IGJ1bmRsZSByZWxvYWQgZmFpbGVkOyBjb250aW51aW5nIG9uIHRoZSBsb2FkZWQgY29weScsIHsgZmlsZSwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICByZXR1cm4gYnVuZGxlLmJ5S2lkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvciBpbnN0YW5jZW9mIFNlcnZpY2VLZXlFcnJvciA/IGVycm9yIDogbmV3IFNlcnZpY2VLZXlFcnJvcihTdHJpbmcoZXJyb3IpKTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZXRoZXIgYGtpZGAgYmVsb25ncyB0byBhbiBpbnRlcm5hbCBTRVJWSUNFIGtleS4gVGhpcyBpcyBob3cgYSBiZWFyZXIgdG9rZW5cbiAqIGlzIHJvdXRlZCBiZXR3ZWVuIHRoZSB0d28gRVMyNTYgY2hhaW5zOiBib3RoIHVzZXIgYW5kIHNlcnZpY2UgdG9rZW5zIGFyZVxuICogRVMyNTYgd2l0aCBhIGBraWRgLCBhbmQgYGtpZGAgaXMgYW4gUkZDIDc2MzggdGh1bWJwcmludCwgc28gb3duZXJzaGlwIG9mIHRoZVxuICogaWQg4oCUIG5vdCBhIGNsYWltIGluc2lkZSB0aGUgdG9rZW4g4oCUIGRlY2lkZXMgd2hpY2gga2V5IHNldCBtYXkgdmVyaWZ5IGl0LlxuICogUmV0dXJucyBgZmFsc2VgIChuZXZlciB0aHJvd3MpIHdoZW4gbm8gYnVuZGxlIGNhbiBiZSByZWFkOyB0aGUgdG9rZW4gdGhlblxuICogdGFrZXMgdGhlIHVzZXIgY2hhaW4gYW5kIGlzIHJlamVjdGVkIHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXJ2aWNlS2lkKGtpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHZlcmlmaWNhdGlvbktleXMoKS5oYXMoa2lkKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKiBFdmVyeSBzZXJ2aWNlIG5hbWUgdGhlIGJ1bmRsZSBwdWJsaXNoZXMgYSBrZXkgZm9yLiBEaWFnbm9zdGljcyBhbmQgdGVzdHMuICovXG5leHBvcnQgZnVuY3Rpb24ga25vd25TZXJ2aWNlTmFtZXMoKTogc3RyaW5nW10ge1xuICB0cnkge1xuICAgIHJldHVybiBbLi4ubmV3IFNldChbLi4udmVyaWZpY2F0aW9uS2V5cygpLnZhbHVlcygpXS5tYXAoKHYpID0+IHYuc2VydmljZU5hbWUpKV0uc29ydCgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTaWduIC8gdmVyaWZ5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIGJhc2U2NHVybCBvZiBhIEpTT04gdmFsdWUsIHRoZSBKV1Mgd2F5IChubyBwYWRkaW5nLCBVUkwgYWxwaGFiZXQpLiAqL1xuZnVuY3Rpb24gYjY0dUpzb24odmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUpLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0dXJsJyk7XG59XG5cbi8qKlxuICogU2lnbiBgY2xhaW1zYCBhcyB0aGlzIHNlcnZpY2UncyBpbnRlcm5hbCB0b2tlbjogRVMyNTYsIGBraWRgID0gdGhlIHNpZ25lcidzXG4gKiB0aHVtYnByaW50LCBgc3ViYCA9IGBzZXJ2aWNlOjxzZXJ2aWNlTmFtZT5gLiBgaWF0YC9gZXhwYCBhbmQgdGhlIG9wdGlvbmFsXG4gKiBpc3N1ZXIvYXVkaWVuY2UgYXJlIHN0YW1wZWQgaGVyZSBzbyB0aGVyZSBpcyBvbmUgcGxhY2UgdGhhdCBkZWNpZGVzIHdoYXQgYVxuICogc2VydmljZSB0b2tlbiBzYXlzLlxuICpcbiAqIEhhbmQtcm9sbGVkIChyYXRoZXIgdGhhbiBgand0LnNpZ25gKSBvbmx5IHNvIHRoZSBoZWFkZXIgY2FycmllcyB0aGUgYGtpZGAgaW5cbiAqIHRoZSBzYW1lIHNoYXBlIHBsYXRmb3JtJ3Mgc2lnbmVyIHByb2R1Y2VzIOKAlCBgY3J5cHRvLnNpZ25gIGlzIHN5bmNocm9ub3VzLCBzb1xuICogdW5saWtlIHRoZSBLTVMgcGF0aCB0aGlzIGNvc3RzIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduU2VydmljZUp3dChcbiAgY2xhaW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9uczogeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBleHBpcmVzSW5TZWNvbmRzOiBudW1iZXI7IGlzc3Vlcj86IHN0cmluZzsgYXVkaWVuY2U/OiBzdHJpbmcgfSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGtleSA9IHNpZ25pbmdLZXlGb3Iob3B0aW9ucy5zZXJ2aWNlTmFtZSk7XG4gIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICBjb25zdCBib2R5ID0ge1xuICAgIC4uLmNsYWltcyxcbiAgICBzdWI6IGAke1NFUlZJQ0VfU1VCSkVDVF9QUkVGSVh9JHtvcHRpb25zLnNlcnZpY2VOYW1lfWAsXG4gICAgaWF0OiBub3csXG4gICAgZXhwOiBub3cgKyBvcHRpb25zLmV4cGlyZXNJblNlY29uZHMsXG4gICAgLi4uKG9wdGlvbnMuaXNzdWVyID8geyBpc3M6IG9wdGlvbnMuaXNzdWVyIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMuYXVkaWVuY2UgPyB7IGF1ZDogb3B0aW9ucy5hdWRpZW5jZSB9IDoge30pLFxuICB9O1xuICBjb25zdCBzaWduaW5nSW5wdXQgPSBgJHtiNjR1SnNvbih7IGFsZzogU0VSVklDRV9UT0tFTl9BTEdPUklUSE0sIHR5cDogJ0pXVCcsIGtpZDoga2V5LmtpZCB9KX0uJHtiNjR1SnNvbihib2R5KX1gO1xuICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uc2lnbignc2hhMjU2JywgQnVmZmVyLmZyb20oc2lnbmluZ0lucHV0LCAndXRmLTgnKSwge1xuICAgIGtleToga2V5LnByaXZhdGVLZXksXG4gICAgZHNhRW5jb2Rpbmc6ICdpZWVlLXAxMzYzJyxcbiAgfSk7XG4gIHJldHVybiBgJHtzaWduaW5nSW5wdXR9LiR7c2lnbmF0dXJlLnRvU3RyaW5nKCdiYXNlNjR1cmwnKX1gO1xufVxuXG4vKipcbiAqIFZlcmlmeSBhbiBpbnRlcm5hbCBzZXJ2aWNlIHRva2VuLCBTWU5DSFJPTk9VU0xZLCBhbmQgcmV0dXJuIGl0cyBjbGFpbXMuXG4gKlxuICogVGhlIHNlY3VyaXR5IHByb3BlcnR5IHRoaXMgZnVuY3Rpb24gZXhpc3RzIGZvcjogdGhlIGBraWRgIHNlbGVjdHMgdGhlIGtleVxuICogQU5EIG5hbWVzIHRoZSBzaWduZXIsIGFuZCB0aGUgdG9rZW4ncyBgc3ViYCBtdXN0IGFncmVlLiBTbyBgYmlsbGluZ2AgY2Fubm90XG4gKiBiZSBpbXBlcnNvbmF0ZWQgYnkgYW55IG90aGVyIHNlcnZpY2Ug4oCUIG5vdCBldmVuIG9uZSB0aGF0IGhvbGRzIGEgdmFsaWQga2V5IG9mXG4gKiBpdHMgb3duIOKAlCB3aGljaCBpcyB3aGF0IHRoZSBzaGFyZWQgc2VjcmV0IGNvdWxkIG5ldmVyIGd1YXJhbnRlZS5cbiAqXG4gKiBAdGhyb3dzIHtqd3QuSnNvbldlYlRva2VuRXJyb3J9IHVua25vd24gYGtpZGAsIHdyb25nIGFsZ29yaXRobSwgYmFkXG4gKiAgICAgICAgIHNpZ25hdHVyZSwgZXhwaXJlZCwgb3IgYSBgc3ViYCB0aGF0IGRpc2FncmVlcyB3aXRoIHRoZSBzaWduaW5nIGtleS5cbiAqIEB0aHJvd3Mge1NlcnZpY2VLZXlFcnJvcn0gbm8gdmVyaWZpY2F0aW9uIGJ1bmRsZSBjb3VsZCBiZSByZWFkIGF0IGFsbCDigJQgdGhlXG4gKiAgICAgICAgIHRva2VuJ3MgdmFsaWRpdHkgaXMgVU5LTk9XTiBhbmQgdGhlIGNhbGxlciBtdXN0IG5vdCB0cmVhdCBpdCBhcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNlcnZpY2VKd3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgdG9rZW46IHN0cmluZyxcbiAgb3B0aW9uczogeyBraWQ6IHN0cmluZzsgaXNzdWVyPzogc3RyaW5nOyBhdWRpZW5jZT86IHN0cmluZyB9LFxuKTogVCB7XG4gIGNvbnN0IGVudHJ5ID0gdmVyaWZpY2F0aW9uS2V5cygpLmdldChvcHRpb25zLmtpZCk7XG4gIGlmICghZW50cnkpIHtcbiAgICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl92ZXJpZnlfdG90YWwnLCB7IHJlc3VsdDogJ3Vua25vd25fa2lkJyB9KTtcbiAgICB0aHJvdyBuZXcgand0Lkpzb25XZWJUb2tlbkVycm9yKGBObyBwdWJsaXNoZWQgc2VydmljZSBrZXkgZm9yIGtpZCAke29wdGlvbnMua2lkfWApO1xuICB9XG4gIGxldCBjbGFpbXM6IFQgJiB7IHN1Yj86IHVua25vd24gfTtcbiAgdHJ5IHtcbiAgICBjbGFpbXMgPSBqd3QudmVyaWZ5KHRva2VuLCBlbnRyeS5rZXksIHtcbiAgICAgIGFsZ29yaXRobXM6IFtTRVJWSUNFX1RPS0VOX0FMR09SSVRITV0sXG4gICAgICAuLi4ob3B0aW9ucy5pc3N1ZXIgPyB7IGlzc3Vlcjogb3B0aW9ucy5pc3N1ZXIgfSA6IHt9KSxcbiAgICAgIC4uLihvcHRpb25zLmF1ZGllbmNlID8geyBhdWRpZW5jZTogb3B0aW9ucy5hdWRpZW5jZSB9IDoge30pLFxuICAgIH0pIGFzIFQgJiB7IHN1Yj86IHVua25vd24gfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl92ZXJpZnlfdG90YWwnLCB7IHJlc3VsdDogJ2ludmFsaWQnIH0pO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGlmIChjbGFpbXMuc3ViICE9PSBgJHtTRVJWSUNFX1NVQkpFQ1RfUFJFRklYfSR7ZW50cnkuc2VydmljZU5hbWV9YCkge1xuICAgIC8vIEEgdmFsaWQgc2lnbmF0dXJlIGJ5IHRoZSBXUk9ORyBzZXJ2aWNlOiB0aGUga2V5IGJlbG9uZ3MgdG8gYGVudHJ5LnNlcnZpY2VOYW1lYFxuICAgIC8vIGJ1dCB0aGUgdG9rZW4gc3BlYWtzIGZvciBzb21lb25lIGVsc2UuIFRoaXMgaXMgdGhlIGNyb3NzLXNlcnZpY2UgZm9yZ2VyeVxuICAgIC8vIHRoZSBzaGFyZWQgc2VjcmV0IG1hZGUgdW5kZXRlY3RhYmxlLlxuICAgIGVtaXRDb3VudGVyKCdzZXJ2aWNlX3Rva2VuX3ZlcmlmeV90b3RhbCcsIHsgcmVzdWx0OiAnc3ViamVjdF9taXNtYXRjaCcsIHNlcnZpY2U6IGVudHJ5LnNlcnZpY2VOYW1lIH0pO1xuICAgIHRocm93IG5ldyBqd3QuSnNvbldlYlRva2VuRXJyb3IoYFNlcnZpY2UgdG9rZW4gc3ViamVjdCAke1N0cmluZyhjbGFpbXMuc3ViKX0gd2FzIHNpZ25lZCBieSAke2VudHJ5LnNlcnZpY2VOYW1lfWApO1xuICB9XG4gIGVtaXRDb3VudGVyKCdzZXJ2aWNlX3Rva2VuX3ZlcmlmeV90b3RhbCcsIHsgcmVzdWx0OiAnb2snLCBzZXJ2aWNlOiBlbnRyeS5zZXJ2aWNlTmFtZSB9KTtcbiAgcmV0dXJuIGNsYWltcztcbn1cblxuLyoqXG4gKiBUcnVlIHdoaWxlIHRoaXMgc2VydmljZSBzdGlsbCBwdWJsaXNoZXMgbW9yZSB0aGFuIG9uZSB2ZXJpZmljYXRpb24ga2V5IOKAlCBpLmUuXG4gKiBhIHNpZ25pbmcta2V5IHJvdGF0aW9uIGlzIG9wZW4gYW5kIHRoZSByZXRpcmluZyBrZXkgaXMgc3RpbGwgdHJ1c3RlZC4gRmVlZHNcbiAqIHRoZSBgc2VjcmV0X3JvdGF0aW9uX3ByZXZpb3VzX3NldHtzZWNyZXQ9XCJTRVJWSUNFX1NJR05JTkdfS0VZXCJ9YCBnYXVnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmV0aXJpbmdTZXJ2aWNlS2V5UHVibGlzaGVkKCk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IG1lID0gc2VydmljZUlkZW50aXR5KCk7XG4gICAgcmV0dXJuIFsuLi52ZXJpZmljYXRpb25LZXlzKCkudmFsdWVzKCldLmZpbHRlcigodikgPT4gdi5zZXJ2aWNlTmFtZSA9PT0gbWUpLmxlbmd0aCA+IDE7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRlc3Qgc2VhbTogZHJvcCB0aGUgbG9hZGVkIHNpZ25pbmcga2V5LCB0aGUgYnVuZGxlIGFuZCBhbnkgZXBoZW1lcmFsIGtleXMgc29cbiAqIHRoZSBuZXh0IHNpZ24vdmVyaWZ5IHJlLXJlYWRzIHRoZSBlbnZpcm9ubWVudC4gRG9uJ3QgY2FsbCBmcm9tIHByb2R1Y3Rpb24gY29kZVxuICog4oCUIHJvdGF0aW9uIGlzIHBpY2tlZCB1cCBieSB0aGUgcmVmcmVzaCBpbnRlcnZhbCBhbmQgdGhlIG10aW1lIGNoZWNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX3Jlc2V0U2VydmljZUtleXNGb3JUZXN0cygpOiB2b2lkIHtcbiAgbG9jYWxLZXkgPSB1bmRlZmluZWQ7XG4gIGJ1bmRsZSA9IHVuZGVmaW5lZDtcbiAgZXBoZW1lcmFsS2V5cyA9IHVuZGVmaW5lZDtcbiAgZXBoZW1lcmFsV2FybmVkID0gZmFsc2U7XG59XG4iXX0=
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1rZXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3NlcnZpY2Uta2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtERztBQUVILE9BQU8sTUFBTSxFQUFFLEVBQWtCLE1BQU0sUUFBUSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzVDLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFrQixNQUFNLGlCQUFpQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUU1Qyx1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDO0FBRS9DLHVGQUF1RjtBQUN2RixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUM7QUFFakQsaUZBQWlGO0FBQ2pGLE1BQU0sMEJBQTBCLEdBQUcsT0FBTyxDQUFDLENBQUMsWUFBWTtBQW9CeEQsNkVBQTZFO0FBQzdFLE1BQU0sT0FBTyxlQUFnQixTQUFRLEtBQUs7SUFDeEMsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxN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Qyx5QkFBeUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3BILENBQUM7SUFDRCxXQUFXLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN4RixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSw2QkFBNkI7SUFDM0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx5QkFBeUI7SUFDdkMsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUNyQixNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ25CLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDMUIsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUGVyLXNlcnZpY2Ugc2lnbmluZyBrZXlzIGZvciBJTlRFUk5BTCBzZXJ2aWNlLXRvLXNlcnZpY2UgdG9rZW5zICgjMTQpLlxuICpcbiAqIEJlZm9yZSB0aGlzLCBldmVyeSBzZXJ2aWNlIGhlbGQgb25lIHNoYXJlZCBgSldUX1NFQ1JFVGAsIHNvIGFueSBzZXJ2aWNlIGNvdWxkXG4gKiBtaW50IGEgdG9rZW4gbmFtaW5nIGFueSBPVEhFUiBzZXJ2aWNlIOKAlCBcImJpbGxpbmcgc2FpZCBzb1wiIHdhcyB1bmZhbHNpZmlhYmxlLFxuICogYW5kIGEgc2luZ2xlIGNvbXByb21pc2VkIHdvcmtsb2FkIGNvdWxkIHNwZWFrIGZvciB0aGUgd2hvbGUgZmxlZXQuIE5vdyBlYWNoXG4gKiBzZXJ2aWNlIHNpZ25zIHdpdGggaXRzIE9XTiBFUzI1NiAoRUMgUC0yNTYpIGtleSBhbmQgY29uc3VtZXJzIHZlcmlmeSBhZ2FpbnN0XG4gKiB0aGUgcHVibGljIGhhbHZlcy4gVGhlIGBraWRgIGlzIGJvdW5kIHRvIHRoZSBzaWduZXIncyBOQU1FLCBzbyBhIHRva2VuIHdob3NlXG4gKiBgc3ViYCBzYXlzIGBzZXJ2aWNlOmJpbGxpbmdgIGJ1dCB3YXMgc2lnbmVkIHdpdGggY29tcGxpYW5jZSdzIGtleSBpcyBhXG4gKiBmb3JnZXJ5LCBub3QgYSB2YWxpZCB0b2tlbiB3aXRoIGEgY29uZnVzaW5nIHN1YmplY3QuXG4gKlxuICogIyMgV2h5IHB1YmxpYyBrZXlzIGFyZSBkaXN0cmlidXRlZCBieSBDT05GSUcsIG5vdCBieSBwZXItc2VydmljZSBKV0tTIGVuZHBvaW50c1xuICpcbiAqIFRoZSB1c2VyIGNoYWluICgjNSkgZmV0Y2hlcyBwbGF0Zm9ybSdzIEpXS1Mgb3ZlciBIVFRQIGJlY2F1c2UgdGhlcmUgaXMgZXhhY3RseVxuICogb25lIHNpZ25lciBhbmQgaXQgaXMgdGhlIG9uZSBzZXJ2aWNlIHRoYXQgbXVzdCBiZSB1cCBmb3IgYW55Ym9keSB0byBzaWduIGluLlxuICogVGhlIHNlcnZpY2UgY2hhaW4gaXMgdGhlIG9wcG9zaXRlIHNoYXBlLCBhbmQgdGhyZWUgcHJvcGVydGllcyBkZWNpZGVkIGl0OlxuICpcbiAqICAxLiAqKmB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsYCBtdXN0IHN0YXkgc3luY2hyb25vdXMuKiogVGhlIGdsb2JhbCByYXRlXG4gKiAgICAgbGltaXRlcidzIGBza2lwYCBhbmQgYXBwLWZhY3RvcnkncyBgL3dhcm11cGAgZ3VhcmQgdmVyaWZ5IGEgc2VydmljZSB0b2tlblxuICogICAgIEJFRk9SRSBgcmVxdWlyZUF1dGhgIHJ1bnMsIGluIHN5bmNocm9ub3VzIEV4cHJlc3MgY2FsbGJhY2tzLiBBbiBIVFRQIEpXS1NcbiAqICAgICBmZXRjaCB3b3VsZCBmb3JjZSB0aG9zZSBhc3luYyDigJQgYSBjaGFuZ2UgdGhhdCByZWFjaGVzIGludG8gZXZlcnlcbiAqICAgICBzZXJ2aWNlJ3MgbGltaXRlciB3aXJpbmcuXG4gKiAgMi4gKipObyBhdmFpbGFiaWxpdHkgY291cGxpbmcuKiogV2l0aCBwZXItc2VydmljZSBKV0tTIGVuZHBvaW50cywgdmVyaWZ5aW5nIGFcbiAqICAgICB0b2tlbiBtaW50ZWQgYnkgYGJpbGxpbmdgIG5lZWRzIGBiaWxsaW5nYCB0byBiZSByZWFjaGFibGUg4oCUIHNvIGJpbGxpbmdcbiAqICAgICBiZWluZyBkb3duIHdvdWxkIHN0b3AgcGxhdGZvcm0gZnJvbSBhY2NlcHRpbmcgYmlsbGluZydzIGluLWZsaWdodCBjYWxscyxcbiAqICAgICB0dXJuaW5nIG9uZSBvdXRhZ2UgaW50byBzZXZlcmFsLiBBIG1vdW50ZWQgZmlsZSBoYXMgbm8gc3VjaCBlZGdlLlxuICogIDMuICoqTm8gTsOXTiBhZGRyZXNzIGNvbmZpZy4qKiAxMCBzZXJ2aWNlcyB3b3VsZCBlYWNoIG5lZWQgZXZlcnkgcGVlcidzXG4gKiAgICAgaG9zdC9wb3J0IChhbmQgY29tcG9zZSwgd2hpY2ggaGFzIG5vIG1lc2gsIHdvdWxkIG5lZWQgdGhlbSB0b28pLlxuICpcbiAqIFNvIHRoZSBkZXBsb3kgZ2VuZXJhdGVzIG9uZSBrZXlwYWlyIHBlciBzZXJ2aWNlLCBtb3VudHMgZWFjaCBwcml2YXRlIGtleSBPTkxZXG4gKiBpbnRvIGl0cyBvd24gc2VydmljZSwgYW5kIG1vdW50cyBPTkUgcHVibGljIGJ1bmRsZSAocmVhZC1vbmx5KSBldmVyeXdoZXJlOlxuICpcbiAqICAgYFNFUlZJQ0VfU0lHTklOR19LRVlfRklMRWAgIHRoaXMgc2VydmljZSdzIEVDIFAtMjU2IHByaXZhdGUga2V5IChQS0NTIzggUEVNKVxuICogICBgU0VSVklDRV9LRVlfQlVORExFX0ZJTEVgICAgYHsgXCJzZXJ2aWNlc1wiOiB7IFwiPG5hbWU+XCI6IHsgXCJrZXlzXCI6IFs8andrPuKApl0gfSB9IH1gXG4gKlxuICogUm90YXRpb24gaXMgYnkgYGtpZGAsIGluIHRoZSBzYW1lIHNoYXBlIGFzIHRoZSB1c2VyIGNoYWluOiBhZGQgdGhlIG5ldyBwdWJsaWNcbiAqIGtleSB0byB0aGUgYnVuZGxlICh0aGUgc2VydmljZSBub3cgcHVibGlzaGVzIHR3byksIHJvbGwgdGhlIGJ1bmRsZSBvdXQsIHN3YXBcbiAqIHRoYXQgc2VydmljZSdzIHByaXZhdGUga2V5LCB0aGVuIGRyb3AgdGhlIHJldGlyZWQgcHVibGljIGtleS4gVGhlIGJ1bmRsZSBpc1xuICogcmUtcmVhZCBvbiBhbiBpbnRlcnZhbCBBTkQgb24gYW4gbXRpbWUgY2hhbmdlLCBzbyBhIHJvdGF0aW9uIG5lZWRzIG5vIHJlc3RhcnQuXG4gKiBgZGVwbG95L2Jpbi9zZXJ2aWNlLXNpZ25pbmcta2V5cy5zaGAgZ2VuZXJhdGVzIGFuZCByb3RhdGVzIGJvdGggaGFsdmVzLlxuICpcbiAqICMjIEVwaGVtZXJhbCBtb2RlXG4gKlxuICogV2l0aCBubyBgU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFYCBjb25maWd1cmVkLCBhIGtleXBhaXIgaXMgZ2VuZXJhdGVkXG4gKiBJTi1QUk9DRVNTIHBlciByZXF1ZXN0ZWQgc2VydmljZSBuYW1lIGFuZCByZWdpc3RlcmVkIGluIHRoZSBpbi1tZW1vcnkgYnVuZGxlLlxuICogVGhhdCBrZWVwcyBzaW5nbGUtcHJvY2VzcyBzdWl0ZXMgYW5kIGxvY2FsIG9uZS1vZmYgc2NyaXB0cyB3b3JraW5nIHdpdGggbm8ga2V5XG4gKiBtYXRlcmlhbCwgYW5kIGl0IGNhbiBuZXZlciB3aWRlbiB0cnVzdDogdGhlIG9ubHkgdmVyaWZpZXIgdGhhdCBhY2NlcHRzIHN1Y2ggYVxuICogdG9rZW4gaXMgdGhlIHByb2Nlc3MgdGhhdCBtaW50ZWQgaXQuIEl0IGlzIGxvZ2dlZCBvbmNlIGF0IHdhcm4gbGV2ZWwsIGFuZFxuICogY291bnRlZCwgYmVjYXVzZSBpbiBhIHJlYWwgZGVwbG95bWVudCBpdCBtZWFucyB0aGlzIHNlcnZpY2UncyBwZWVycyB3aWxsXG4gKiByZWplY3QgZXZlcnl0aGluZyBpdCBzZW5kcy5cbiAqL1xuXG5pbXBvcnQgY3J5cHRvLCB7IHR5cGUgS2V5T2JqZWN0IH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYywgc3RhdFN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgand0IGZyb20gJ2pzb253ZWJ0b2tlbic7XG5pbXBvcnQgeyBwdWJsaWNKd2tGcm9tLCBwdWJsaWNLZXlGcm9tSndrLCB0eXBlIFB1YmxpY0p3ayB9IGZyb20gJy4uL3V0aWxzL2p3ay5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignc2VydmljZS1rZXlzJyk7XG5cbi8qKiBUaGUgT05MWSBhbGdvcml0aG0gYW4gaW50ZXJuYWwgc2VydmljZSB0b2tlbiBtYXkgYmUgc2lnbmVkIHdpdGguICovXG5leHBvcnQgY29uc3QgU0VSVklDRV9UT0tFTl9BTEdPUklUSE0gPSAnRVMyNTYnO1xuXG4vKiogU3ViamVjdCBwcmVmaXggbmFtaW5nIHRoZSBjYWxsaW5nIHNlcnZpY2Ugb24gYSBzZXJ2aWNlIHRva2VuIChgc2VydmljZTo8bmFtZT5gKS4gKi9cbmV4cG9ydCBjb25zdCBTRVJWSUNFX1NVQkpFQ1RfUFJFRklYID0gJ3NlcnZpY2U6JztcblxuLyoqIEhvdyBsb25nIGEgbG9hZGVkIGJ1bmRsZSBpcyBzZXJ2ZWQgYmVmb3JlIGl0IGlzIHJlLXJlYWQgKHJvdGF0aW9uIHBpY2t1cCkuICovXG5jb25zdCBCVU5ETEVfUkVGUkVTSF9JTlRFUlZBTF9NUyA9IDMwMF8wMDA7IC8vIDUgbWludXRlc1xuXG4vKiogT25lIHNlcnZpY2UncyBwdWJsaXNoZWQgdmVyaWZpY2F0aW9uIGtleXMsIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBidW5kbGUgZmlsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUtleUVudHJ5IHtcbiAga2V5czogUHVibGljSndrW107XG59XG5cbi8qKiBUaGUgZG9jdW1lbnQgYFNFUlZJQ0VfS0VZX0JVTkRMRV9GSUxFYCBob2xkczogZXZlcnkgc2VydmljZSdzIHB1YmxpYyBrZXlzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlS2V5QnVuZGxlIHtcbiAgc2VydmljZXM6IFJlY29yZDxzdHJpbmcsIFNlcnZpY2VLZXlFbnRyeT47XG59XG5cbi8qKiBBIHNpZ25pbmcga2V5IHRoaXMgcHJvY2VzcyBob2xkcywgaW4gdGhlIGZvcm1zIHNpZ25pbmcgbmVlZHMuICovXG5pbnRlcmZhY2UgTG9jYWxTaWduaW5nS2V5IHtcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAga2lkOiBzdHJpbmc7XG4gIHByaXZhdGVLZXk6IEtleU9iamVjdDtcbiAgcHVibGljSndrOiBQdWJsaWNKd2s7XG59XG5cbi8qKiBUaGUgYnVuZGxlIGNvdWxkIG5vdCBiZSBsb2FkZWQgb3IgZG9lcyBub3Qga25vdyB0aGUga2V5IGEgdG9rZW4gbmFtZXMuICovXG5leHBvcnQgY2xhc3MgU2VydmljZUtleUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnU2VydmljZUtleUVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgcHJvY2VzcydzIHNlcnZpY2UgaWRlbnRpdHkg4oCUIHRoZSBgPG5hbWU+YCBpbiBgc2VydmljZTo8bmFtZT5gIGFuZCB0aGVcbiAqIG5hbWUgaXRzIGtleSBpcyBwdWJsaXNoZWQgdW5kZXIuIGBTRVJWSUNFX05BTUVgIGlzIGFscmVhZHkgc2V0IHBlciBzZXJ2aWNlIGluXG4gKiBldmVyeSBkZXBsb3kgdGFyZ2V0IChjb21wb3NlLCBtaW5pa3ViZSwgZWMyLCBla3MpLCBhbmQgaXMgdGhlIHNhbWUgdmFsdWUgdGhlXG4gKiBhdWRpdCBhbmQgbWV0cmljIGxhYmVscyB1c2UsIHNvIHRoZXJlIGlzIG9uZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIFwid2hvIGFtIElcIi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VJZGVudGl0eSgpOiBzdHJpbmcge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FIHx8ICdhcGknO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExvY2FsIHNpZ25pbmcga2V5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubGV0IGxvY2FsS2V5OiBMb2NhbFNpZ25pbmdLZXkgfCB1bmRlZmluZWQ7XG5sZXQgZXBoZW1lcmFsS2V5czogTWFwPHN0cmluZywgTG9jYWxTaWduaW5nS2V5PiB8IHVuZGVmaW5lZDtcbmxldCBlcGhlbWVyYWxXYXJuZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gbG9hZENvbmZpZ3VyZWRTaWduaW5nS2V5KGZpbGU6IHN0cmluZyk6IExvY2FsU2lnbmluZ0tleSB7XG4gIGNvbnN0IHNlcnZpY2VOYW1lID0gc2VydmljZUlkZW50aXR5KCk7XG4gIGxldCBwcml2YXRlS2V5OiBLZXlPYmplY3Q7XG4gIHRyeSB7XG4gICAgcHJpdmF0ZUtleSA9IGNyeXB0by5jcmVhdGVQcml2YXRlS2V5KHJlYWRGaWxlU3luYyhmaWxlLCAndXRmOCcpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGBDb3VsZCBub3QgcmVhZCB0aGUgc2VydmljZSBzaWduaW5nIGtleSBhdCAke2ZpbGV9OiAke2Vycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gIH1cbiAgLy8gcHVibGljSndrRnJvbSByZWplY3RzIGFueXRoaW5nIGJ1dCBhbiBFQyBQLTI1NiBrZXksIHNvIGEgc2VydmljZSBjb25maWd1cmVkXG4gIC8vIHdpdGggKHNheSkgYW4gUlNBIGtleSBmYWlscyBIRVJFIHJhdGhlciB0aGFuIG1pbnRpbmcgdG9rZW5zIG5vYm9keSB2ZXJpZmllcy5cbiAgY29uc3QgcHVibGljSndrID0gcHVibGljSndrRnJvbShjcnlwdG8uY3JlYXRlUHVibGljS2V5KHByaXZhdGVLZXkpKTtcbiAgcmV0dXJuIHsgc2VydmljZU5hbWUsIGtpZDogcHVibGljSndrLmtpZCwgcHJpdmF0ZUtleSwgcHVibGljSndrIH07XG59XG5cbi8qKlxuICogVGhlIGluLXByb2Nlc3Mga2V5IGZvciBgc2VydmljZU5hbWVgIGluIGVwaGVtZXJhbCBtb2RlLCBnZW5lcmF0ZWQgb24gZmlyc3RcbiAqIHVzZSBhbmQgcmVnaXN0ZXJlZCBpbiB0aGUgaW4tbWVtb3J5IGJ1bmRsZSBzbyB0aGlzIHByb2Nlc3MgY2FuIHZlcmlmeSBpdHMgb3duXG4gKiB0b2tlbnMuIEtleWVkIGJ5IE5BTUUgKG5vdCBqdXN0IG9uZSBrZXkpIHNvIGEgc2luZ2xlLXByb2Nlc3Mgc3VpdGUgY2FuIG1pbnRcbiAqIHRva2VucyBmb3Igc2V2ZXJhbCBzZXJ2aWNlcywgYXMgdGhlIHJlYWwgZmxlZXQgZG9lcyBhY3Jvc3MgcHJvY2Vzc2VzLlxuICovXG5mdW5jdGlvbiBlcGhlbWVyYWxTaWduaW5nS2V5KHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBMb2NhbFNpZ25pbmdLZXkge1xuICBlcGhlbWVyYWxLZXlzID8/PSBuZXcgTWFwKCk7XG4gIGNvbnN0IGV4aXN0aW5nID0gZXBoZW1lcmFsS2V5cy5nZXQoc2VydmljZU5hbWUpO1xuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICBpZiAoIWVwaGVtZXJhbFdhcm5lZCkge1xuICAgIGVwaGVtZXJhbFdhcm5lZCA9IHRydWU7XG4gICAgZW1pdENvdW50ZXIoJ3NlcnZpY2Vfc2lnbmluZ19lcGhlbWVyYWxfa2V5X3RvdGFsJywgeyBzZXJ2aWNlOiBzZXJ2aWNlSWRlbnRpdHkoKSB9KTtcbiAgICBsb2dnZXIud2FybignU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFIGlzIG5vdCBzZXQg4oCUIG1pbnRpbmcgaW50ZXJuYWwgc2VydmljZSB0b2tlbnMgd2l0aCBhbiBFUEhFTUVSQUwga2V5LiBPbmx5IHRoaXMgcHJvY2VzcyB3aWxsIGFjY2VwdCB0aGVtOyBldmVyeSBwZWVyIHdpbGwgcmVqZWN0IHRoZW0uIFNldCBTRVJWSUNFX1NJR05JTkdfS0VZX0ZJTEUgKyBTRVJWSUNFX0tFWV9CVU5ETEVfRklMRSAoZGVwbG95L2Jpbi9zZXJ2aWNlLXNpZ25pbmcta2V5cy5zaCkuJyk7XG4gIH1cbiAgY29uc3QgeyBwcml2YXRlS2V5LCBwdWJsaWNLZXkgfSA9IGNyeXB0by5nZW5lcmF0ZUtleVBhaXJTeW5jKCdlYycsIHsgbmFtZWRDdXJ2ZTogJ3ByaW1lMjU2djEnIH0pO1xuICBjb25zdCBwdWJsaWNKd2sgPSBwdWJsaWNKd2tGcm9tKHB1YmxpY0tleSk7XG4gIGNvbnN0IGdlbmVyYXRlZDogTG9jYWxTaWduaW5nS2V5ID0geyBzZXJ2aWNlTmFtZSwga2lkOiBwdWJsaWNKd2sua2lkLCBwcml2YXRlS2V5LCBwdWJsaWNKd2sgfTtcbiAgZXBoZW1lcmFsS2V5cy5zZXQoc2VydmljZU5hbWUsIGdlbmVyYXRlZCk7XG4gIHJldHVybiBnZW5lcmF0ZWQ7XG59XG5cbi8qKiBXaGV0aGVyIHRoaXMgcHJvY2VzcyBzaWducyB3aXRoIGEgbW91bnRlZCBrZXkgKGBjb25maWd1cmVkYCkgb3IgYW4gaW4tcHJvY2VzcyBvbmUuICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZUtleU1vZGUoKTogJ2NvbmZpZ3VyZWQnIHwgJ2VwaGVtZXJhbCcge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFID8gJ2NvbmZpZ3VyZWQnIDogJ2VwaGVtZXJhbCc7XG59XG5cbi8qKlxuICogVGhlIGtleSBgc2VydmljZU5hbWVgIG11c3QgYmUgc2lnbmVkIHdpdGguXG4gKlxuICogSW4gYGNvbmZpZ3VyZWRgIG1vZGUgdGhlcmUgaXMgZXhhY3RseSBPTkUga2V5IOKAlCB0aGlzIHNlcnZpY2UncyDigJQgc28gYSByZXF1ZXN0XG4gKiB0byBzaWduIGFzIHNvbWUgT1RIRVIgc2VydmljZSBpcyBhIGJ1ZyBhbmQgdGhyb3dzLiBUaGF0IG1hdHRlcnM6IGJlZm9yZSAjMTQgYVxuICogc2VydmljZSBjb3VsZCBsZWdpdGltYXRlbHkgbWludCBgc2VydmljZTpwbGF0Zm9ybWAgd2l0aCB0aGUgc2hhcmVkIHNlY3JldFxuICogKGFwaS9wbHVnaW4gZGlkLCBmb3IgaXRzIHJlZ2lzdHJ5IHB1c2hlcyksIGFuZCB1bmRlciBwZXItc2VydmljZSBrZXlzIHN1Y2ggYVxuICogdG9rZW4gd291bGQgYmUgc2lsZW50bHkgdW52ZXJpZmlhYmxlIGV2ZXJ5d2hlcmUuIEZhaWxpbmcgYXQgdGhlIG1pbnQgdHVybnNcbiAqIHRoYXQgaW50byBhbiBpbW1lZGlhdGUsIG9idmlvdXMgZXJyb3IgaW5zdGVhZCBvZiBhIHJ1bnRpbWUgNDAxLlxuICovXG5mdW5jdGlvbiBzaWduaW5nS2V5Rm9yKHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBMb2NhbFNpZ25pbmdLZXkge1xuICBjb25zdCBmaWxlID0gcHJvY2Vzcy5lbnYuU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFO1xuICBpZiAoIWZpbGUpIHJldHVybiBlcGhlbWVyYWxTaWduaW5nS2V5KHNlcnZpY2VOYW1lKTtcblxuICBpZiAoIWxvY2FsS2V5IHx8IGxvY2FsS2V5LnNlcnZpY2VOYW1lICE9PSBzZXJ2aWNlSWRlbnRpdHkoKSkge1xuICAgIGxvY2FsS2V5ID0gbG9hZENvbmZpZ3VyZWRTaWduaW5nS2V5KGZpbGUpO1xuICB9XG4gIGlmIChzZXJ2aWNlTmFtZSAhPT0gbG9jYWxLZXkuc2VydmljZU5hbWUpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKFxuICAgICAgYFRoaXMgcHJvY2VzcyBpcyAnJHtsb2NhbEtleS5zZXJ2aWNlTmFtZX0nIGFuZCBob2xkcyBvbmx5IGl0cyBvd24gc2lnbmluZyBrZXksIHNvIGl0IGNhbm5vdCBtaW50IGEgdG9rZW4gZm9yICcke3NlcnZpY2VOYW1lfScuIGBcbiAgICAgICsgJ05hbWUgdGhlIGNhbGxpbmcgc2VydmljZSBjb3JyZWN0bHksIG9yIGdpdmUgdGhlIGNhbGxlciBpdHMgb3duIGtleS4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGxvY2FsS2V5O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFZlcmlmaWNhdGlvbiBidW5kbGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbnRlcmZhY2UgTG9hZGVkQnVuZGxlIHtcbiAgLyoqIGBraWRgIOKGkiB0aGUgc2VydmljZSB0aGF0IHB1Ymxpc2hlZCBpdCwgcGx1cyB0aGUgdmVyaWZpY2F0aW9uIGtleS4gKi9cbiAgYnlLaWQ6IE1hcDxzdHJpbmcsIHsgc2VydmljZU5hbWU6IHN0cmluZzsga2V5OiBLZXlPYmplY3QgfT47XG4gIGxvYWRlZEF0OiBudW1iZXI7XG4gIG10aW1lTXM6IG51bWJlcjtcbn1cblxubGV0IGJ1bmRsZTogTG9hZGVkQnVuZGxlIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBwYXJzZUJ1bmRsZShyYXc6IHN0cmluZywgZmlsZTogc3RyaW5nKTogTWFwPHN0cmluZywgeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBrZXk6IEtleU9iamVjdCB9PiB7XG4gIGxldCBkb2N1bWVudDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBkb2N1bWVudCA9IEpTT04ucGFyc2UocmF3KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGlzIG5vdCB2YWxpZCBKU09OOiAke2Vycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gIH1cbiAgY29uc3Qgc2VydmljZXMgPSAoZG9jdW1lbnQgYXMgUGFydGlhbDxTZXJ2aWNlS2V5QnVuZGxlPik/LnNlcnZpY2VzO1xuICBpZiAoIXNlcnZpY2VzIHx8IHR5cGVvZiBzZXJ2aWNlcyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGhhcyBubyBcInNlcnZpY2VzXCIgb2JqZWN0YCk7XG4gIH1cbiAgY29uc3QgYnlLaWQgPSBuZXcgTWFwPHN0cmluZywgeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBrZXk6IEtleU9iamVjdCB9PigpO1xuICBmb3IgKGNvbnN0IFtzZXJ2aWNlTmFtZSwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKHNlcnZpY2VzKSkge1xuICAgIGZvciAoY29uc3QgandrIG9mIGVudHJ5Py5rZXlzID8/IFtdKSB7XG4gICAgICBpZiAoIWp3az8ua2lkKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJ5S2lkLnNldChqd2sua2lkLCB7IHNlcnZpY2VOYW1lLCBrZXk6IHB1YmxpY0tleUZyb21Kd2soandrKSB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE9uZSB1bnVzYWJsZSBlbnRyeSBtdXN0IG5vdCBkaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBidW5kbGUg4oCUIHRoZSBzYW1lXG4gICAgICAgIC8vIHJ1bGUgdGhlIEpXS1MgY2FjaGUgYXBwbGllcyB0byBwbGF0Zm9ybSdzIHB1Ymxpc2hlZCBzZXQuXG4gICAgICAgIGxvZ2dlci53YXJuKCdTa2lwcGluZyB1bnVzYWJsZSBzZXJ2aWNlIGtleScsIHsgc2VydmljZU5hbWUsIGtpZDogandrLmtpZCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChieUtpZC5zaXplID09PSAwKSB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGNvbnRhaW5lZCBubyB1c2FibGUgc2VydmljZSBrZXlzYCk7XG4gIHJldHVybiBieUtpZDtcbn1cblxuLyoqXG4gKiBUaGUgYGtpZGAg4oaSIHNlcnZpY2UgbWFwLCByZS1yZWFkIHdoZW4gdGhlIHJlZnJlc2ggaW50ZXJ2YWwgaGFzIHBhc3NlZCBvciB0aGVcbiAqIGZpbGUncyBtdGltZSBjaGFuZ2VkIChzbyBhIHJvdGF0aW9uIGlzIHBpY2tlZCB1cCB3aXRob3V0IGEgcmVzdGFydCkuXG4gKlxuICogSW4gZXBoZW1lcmFsIG1vZGUgdGhlIFwiYnVuZGxlXCIgaXMgd2hhdGV2ZXIgdGhpcyBwcm9jZXNzIGdlbmVyYXRlZCBmb3IgaXRzZWxmLlxuICogTmV2ZXIgdGhyb3dzIGZvciBhIG1pc3NpbmcgZmlsZSBpbiB0aGF0IG1vZGUg4oCUIGl0IGp1c3QgaG9sZHMgdGhvc2Uga2V5cy5cbiAqL1xuZnVuY3Rpb24gdmVyaWZpY2F0aW9uS2V5cygpOiBNYXA8c3RyaW5nLCB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGtleTogS2V5T2JqZWN0IH0+IHtcbiAgY29uc3QgZmlsZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfS0VZX0JVTkRMRV9GSUxFO1xuICBpZiAoIWZpbGUpIHtcbiAgICBjb25zdCBsb2NhbCA9IG5ldyBNYXA8c3RyaW5nLCB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGtleTogS2V5T2JqZWN0IH0+KCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZXBoZW1lcmFsS2V5cz8udmFsdWVzKCkgPz8gW10pIHtcbiAgICAgIGxvY2FsLnNldChrZXkua2lkLCB7IHNlcnZpY2VOYW1lOiBrZXkuc2VydmljZU5hbWUsIGtleTogY3J5cHRvLmNyZWF0ZVB1YmxpY0tleShrZXkucHJpdmF0ZUtleSkgfSk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbDtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGxldCBtdGltZU1zID0gMDtcbiAgdHJ5IHtcbiAgICBtdGltZU1zID0gc3RhdFN5bmMoZmlsZSkubXRpbWVNcztcbiAgfSBjYXRjaCB7XG4gICAgLy8gVW5yZWFkYWJsZSBub3c6IGtlZXAgc2VydmluZyBhIGJ1bmRsZSBhbHJlYWR5IGluIGhhbmQgKHB1YmxpYyBrZXlzIGRvbid0XG4gICAgLy8gZXhwaXJlLCBhbmQgcmVmdXNpbmcgZXZlcnkgaW50ZXJuYWwgY2FsbCBiZWNhdXNlIGEgbW91bnQgYmxpcHBlZCB3b3VsZCBiZVxuICAgIC8vIGEgc2VsZi1pbmZsaWN0ZWQgb3V0YWdlKS4gV2l0aCBub3RoaW5nIGluIGhhbmQsIGZhaWwgY2xvc2VkIGJlbG93LlxuICAgIGlmIChidW5kbGUpIHJldHVybiBidW5kbGUuYnlLaWQ7XG4gIH1cbiAgaWYgKGJ1bmRsZSAmJiBidW5kbGUubXRpbWVNcyA9PT0gbXRpbWVNcyAmJiBub3cgLSBidW5kbGUubG9hZGVkQXQgPCBCVU5ETEVfUkVGUkVTSF9JTlRFUlZBTF9NUykge1xuICAgIHJldHVybiBidW5kbGUuYnlLaWQ7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGJ5S2lkID0gcGFyc2VCdW5kbGUocmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4JyksIGZpbGUpO1xuICAgIGJ1bmRsZSA9IHsgYnlLaWQsIGxvYWRlZEF0OiBub3csIG10aW1lTXMgfTtcbiAgICByZXR1cm4gYnlLaWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGJ1bmRsZSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1NlcnZpY2Uga2V5IGJ1bmRsZSByZWxvYWQgZmFpbGVkOyBjb250aW51aW5nIG9uIHRoZSBsb2FkZWQgY29weScsIHsgZmlsZSwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICByZXR1cm4gYnVuZGxlLmJ5S2lkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvciBpbnN0YW5jZW9mIFNlcnZpY2VLZXlFcnJvciA/IGVycm9yIDogbmV3IFNlcnZpY2VLZXlFcnJvcihTdHJpbmcoZXJyb3IpKTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZXRoZXIgYGtpZGAgYmVsb25ncyB0byBhbiBpbnRlcm5hbCBTRVJWSUNFIGtleS4gVGhpcyBpcyBob3cgYSBiZWFyZXIgdG9rZW5cbiAqIGlzIHJvdXRlZCBiZXR3ZWVuIHRoZSB0d28gRVMyNTYgY2hhaW5zOiBib3RoIHVzZXIgYW5kIHNlcnZpY2UgdG9rZW5zIGFyZVxuICogRVMyNTYgd2l0aCBhIGBraWRgLCBhbmQgYGtpZGAgaXMgYW4gUkZDIDc2MzggdGh1bWJwcmludCwgc28gb3duZXJzaGlwIG9mIHRoZVxuICogaWQg4oCUIG5vdCBhIGNsYWltIGluc2lkZSB0aGUgdG9rZW4g4oCUIGRlY2lkZXMgd2hpY2gga2V5IHNldCBtYXkgdmVyaWZ5IGl0LlxuICogUmV0dXJucyBgZmFsc2VgIChuZXZlciB0aHJvd3MpIHdoZW4gbm8gYnVuZGxlIGNhbiBiZSByZWFkOyB0aGUgdG9rZW4gdGhlblxuICogdGFrZXMgdGhlIHVzZXIgY2hhaW4gYW5kIGlzIHJlamVjdGVkIHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXJ2aWNlS2lkKGtpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHZlcmlmaWNhdGlvbktleXMoKS5oYXMoa2lkKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKiBFdmVyeSBzZXJ2aWNlIG5hbWUgdGhlIGJ1bmRsZSBwdWJsaXNoZXMgYSBrZXkgZm9yLiBEaWFnbm9zdGljcyBhbmQgdGVzdHMuICovXG5leHBvcnQgZnVuY3Rpb24ga25vd25TZXJ2aWNlTmFtZXMoKTogc3RyaW5nW10ge1xuICB0cnkge1xuICAgIHJldHVybiBbLi4ubmV3IFNldChbLi4udmVyaWZpY2F0aW9uS2V5cygpLnZhbHVlcygpXS5tYXAoKHYpID0+IHYuc2VydmljZU5hbWUpKV0uc29ydCgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTaWduIC8gdmVyaWZ5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIGJhc2U2NHVybCBvZiBhIEpTT04gdmFsdWUsIHRoZSBKV1Mgd2F5IChubyBwYWRkaW5nLCBVUkwgYWxwaGFiZXQpLiAqL1xuZnVuY3Rpb24gYjY0dUpzb24odmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUpLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0dXJsJyk7XG59XG5cbi8qKlxuICogU2lnbiBgY2xhaW1zYCBhcyB0aGlzIHNlcnZpY2UncyBpbnRlcm5hbCB0b2tlbjogRVMyNTYsIGBraWRgID0gdGhlIHNpZ25lcidzXG4gKiB0aHVtYnByaW50LCBgc3ViYCA9IGBzZXJ2aWNlOjxzZXJ2aWNlTmFtZT5gLiBgaWF0YC9gZXhwYCBhbmQgdGhlIG9wdGlvbmFsXG4gKiBpc3N1ZXIvYXVkaWVuY2UgYXJlIHN0YW1wZWQgaGVyZSBzbyB0aGVyZSBpcyBvbmUgcGxhY2UgdGhhdCBkZWNpZGVzIHdoYXQgYVxuICogc2VydmljZSB0b2tlbiBzYXlzLlxuICpcbiAqIEhhbmQtcm9sbGVkIChyYXRoZXIgdGhhbiBgand0LnNpZ25gKSBvbmx5IHNvIHRoZSBoZWFkZXIgY2FycmllcyB0aGUgYGtpZGAgaW5cbiAqIHRoZSBzYW1lIHNoYXBlIHBsYXRmb3JtJ3Mgc2lnbmVyIHByb2R1Y2VzIOKAlCBgY3J5cHRvLnNpZ25gIGlzIHN5bmNocm9ub3VzLCBzb1xuICogdW5saWtlIHRoZSBLTVMgcGF0aCB0aGlzIGNvc3RzIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduU2VydmljZUp3dChcbiAgY2xhaW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9uczogeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBleHBpcmVzSW5TZWNvbmRzOiBudW1iZXI7IGlzc3Vlcj86IHN0cmluZzsgYXVkaWVuY2U/OiBzdHJpbmcgfSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGtleSA9IHNpZ25pbmdLZXlGb3Iob3B0aW9ucy5zZXJ2aWNlTmFtZSk7XG4gIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICBjb25zdCBib2R5ID0ge1xuICAgIC4uLmNsYWltcyxcbiAgICBzdWI6IGAke1NFUlZJQ0VfU1VCSkVDVF9QUkVGSVh9JHtvcHRpb25zLnNlcnZpY2VOYW1lfWAsXG4gICAgaWF0OiBub3csXG4gICAgZXhwOiBub3cgKyBvcHRpb25zLmV4cGlyZXNJblNlY29uZHMsXG4gICAgLi4uKG9wdGlvbnMuaXNzdWVyID8geyBpc3M6IG9wdGlvbnMuaXNzdWVyIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMuYXVkaWVuY2UgPyB7IGF1ZDogb3B0aW9ucy5hdWRpZW5jZSB9IDoge30pLFxuICB9O1xuICBjb25zdCBzaWduaW5nSW5wdXQgPSBgJHtiNjR1SnNvbih7IGFsZzogU0VSVklDRV9UT0tFTl9BTEdPUklUSE0sIHR5cDogJ0pXVCcsIGtpZDoga2V5LmtpZCB9KX0uJHtiNjR1SnNvbihib2R5KX1gO1xuICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uc2lnbignc2hhMjU2JywgQnVmZmVyLmZyb20oc2lnbmluZ0lucHV0LCAndXRmLTgnKSwge1xuICAgIGtleToga2V5LnByaXZhdGVLZXksXG4gICAgZHNhRW5jb2Rpbmc6ICdpZWVlLXAxMzYzJyxcbiAgfSk7XG4gIHJldHVybiBgJHtzaWduaW5nSW5wdXR9LiR7c2lnbmF0dXJlLnRvU3RyaW5nKCdiYXNlNjR1cmwnKX1gO1xufVxuXG4vKipcbiAqIFZlcmlmeSBhbiBpbnRlcm5hbCBzZXJ2aWNlIHRva2VuLCBTWU5DSFJPTk9VU0xZLCBhbmQgcmV0dXJuIGl0cyBjbGFpbXMuXG4gKlxuICogVGhlIHNlY3VyaXR5IHByb3BlcnR5IHRoaXMgZnVuY3Rpb24gZXhpc3RzIGZvcjogdGhlIGBraWRgIHNlbGVjdHMgdGhlIGtleVxuICogQU5EIG5hbWVzIHRoZSBzaWduZXIsIGFuZCB0aGUgdG9rZW4ncyBgc3ViYCBtdXN0IGFncmVlLiBTbyBgYmlsbGluZ2AgY2Fubm90XG4gKiBiZSBpbXBlcnNvbmF0ZWQgYnkgYW55IG90aGVyIHNlcnZpY2Ug4oCUIG5vdCBldmVuIG9uZSB0aGF0IGhvbGRzIGEgdmFsaWQga2V5IG9mXG4gKiBpdHMgb3duIOKAlCB3aGljaCBpcyB3aGF0IHRoZSBzaGFyZWQgc2VjcmV0IGNvdWxkIG5ldmVyIGd1YXJhbnRlZS5cbiAqXG4gKiBAdGhyb3dzIHtqd3QuSnNvbldlYlRva2VuRXJyb3J9IHVua25vd24gYGtpZGAsIHdyb25nIGFsZ29yaXRobSwgYmFkXG4gKiAgICAgICAgIHNpZ25hdHVyZSwgZXhwaXJlZCwgb3IgYSBgc3ViYCB0aGF0IGRpc2FncmVlcyB3aXRoIHRoZSBzaWduaW5nIGtleS5cbiAqIEB0aHJvd3Mge1NlcnZpY2VLZXlFcnJvcn0gbm8gdmVyaWZpY2F0aW9uIGJ1bmRsZSBjb3VsZCBiZSByZWFkIGF0IGFsbCDigJQgdGhlXG4gKiAgICAgICAgIHRva2VuJ3MgdmFsaWRpdHkgaXMgVU5LTk9XTiBhbmQgdGhlIGNhbGxlciBtdXN0IG5vdCB0cmVhdCBpdCBhcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNlcnZpY2VKd3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgdG9rZW46IHN0cmluZyxcbiAgb3B0aW9uczogeyBraWQ6IHN0cmluZzsgaXNzdWVyPzogc3RyaW5nOyBhdWRpZW5jZT86IHN0cmluZyB9LFxuKTogVCB7XG4gIGNvbnN0IGVudHJ5ID0gdmVyaWZpY2F0aW9uS2V5cygpLmdldChvcHRpb25zLmtpZCk7XG4gIC8vIEVWRVJZIGVtaXNzaW9uIG9mIHRoaXMgY291bnRlciBjYXJyaWVzIHRoZSBzYW1lIGxhYmVsIEtFWVMuIFRoZSBQcm9tZXRoZXVzXG4gIC8vIGNvdW50ZXIgaXMgcmVnaXN0ZXJlZCBsYXppbHkgd2l0aCB3aGF0ZXZlciBrZXlzIGl0cyBmaXJzdCBlbWlzc2lvbiB1c2VkLFxuICAvLyBhbmQgYW4gaW5jcmVtZW50IHdpdGggYSBkaWZmZXJlbnQgc2V0IHRocm93cyDigJQgd2hpY2ggYGVtaXRDb3VudGVyYFxuICAvLyBzd2FsbG93cy4gU28gd2hlbiB0aGUgZmlyc3QgdG9rZW4gYSBwb2QgdmVyaWZpZWQgd2FzIGJhZCAoYHsgcmVzdWx0IH1gXG4gIC8vIGFsb25lKSwgZXZlcnkgbGF0ZXIgYG9rYCBhbmQgYHN1YmplY3RfbWlzbWF0Y2hgIChgeyByZXN1bHQsIHNlcnZpY2UgfWApIHdhc1xuICAvLyBzaWxlbnRseSBkcm9wcGVkIGZvciB0aGUgbGlmZSBvZiB0aGUgcHJvY2VzczogdGhlIG1ldHJpYyB0aGF0IHRlbGxzIHlvdVxuICAvLyBzZXJ2aWNlLXRvLXNlcnZpY2UgYXV0aCBpcyBoZWFsdGh5IHdlbnQgcXVpZXQgZXhhY3RseSB3aGVuIGl0IG1hdHRlcmVkLlxuICBpZiAoIWVudHJ5KSB7XG4gICAgZW1pdENvdW50ZXIoJ3NlcnZpY2VfdG9rZW5fdmVyaWZ5X3RvdGFsJywgeyByZXN1bHQ6ICd1bmtub3duX2tpZCcsIHNlcnZpY2U6ICd1bmtub3duJyB9KTtcbiAgICB0aHJvdyBuZXcgand0Lkpzb25XZWJUb2tlbkVycm9yKGBObyBwdWJsaXNoZWQgc2VydmljZSBrZXkgZm9yIGtpZCAke29wdGlvbnMua2lkfWApO1xuICB9XG4gIGxldCBjbGFpbXM6IFQgJiB7IHN1Yj86IHVua25vd24gfTtcbiAgdHJ5IHtcbiAgICBjbGFpbXMgPSBqd3QudmVyaWZ5KHRva2VuLCBlbnRyeS5rZXksIHtcbiAgICAgIGFsZ29yaXRobXM6IFtTRVJWSUNFX1RPS0VOX0FMR09SSVRITV0sXG4gICAgICAuLi4ob3B0aW9ucy5pc3N1ZXIgPyB7IGlzc3Vlcjogb3B0aW9ucy5pc3N1ZXIgfSA6IHt9KSxcbiAgICAgIC4uLihvcHRpb25zLmF1ZGllbmNlID8geyBhdWRpZW5jZTogb3B0aW9ucy5hdWRpZW5jZSB9IDoge30pLFxuICAgIH0pIGFzIFQgJiB7IHN1Yj86IHVua25vd24gfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl92ZXJpZnlfdG90YWwnLCB7IHJlc3VsdDogJ2ludmFsaWQnLCBzZXJ2aWNlOiBlbnRyeS5zZXJ2aWNlTmFtZSB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAoY2xhaW1zLnN1YiAhPT0gYCR7U0VSVklDRV9TVUJKRUNUX1BSRUZJWH0ke2VudHJ5LnNlcnZpY2VOYW1lfWApIHtcbiAgICAvLyBBIHZhbGlkIHNpZ25hdHVyZSBieSB0aGUgV1JPTkcgc2VydmljZTogdGhlIGtleSBiZWxvbmdzIHRvIGBlbnRyeS5zZXJ2aWNlTmFtZWBcbiAgICAvLyBidXQgdGhlIHRva2VuIHNwZWFrcyBmb3Igc29tZW9uZSBlbHNlLiBUaGlzIGlzIHRoZSBjcm9zcy1zZXJ2aWNlIGZvcmdlcnlcbiAgICAvLyB0aGUgc2hhcmVkIHNlY3JldCBtYWRlIHVuZGV0ZWN0YWJsZS5cbiAgICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl92ZXJpZnlfdG90YWwnLCB7IHJlc3VsdDogJ3N1YmplY3RfbWlzbWF0Y2gnLCBzZXJ2aWNlOiBlbnRyeS5zZXJ2aWNlTmFtZSB9KTtcbiAgICB0aHJvdyBuZXcgand0Lkpzb25XZWJUb2tlbkVycm9yKGBTZXJ2aWNlIHRva2VuIHN1YmplY3QgJHtTdHJpbmcoY2xhaW1zLnN1Yil9IHdhcyBzaWduZWQgYnkgJHtlbnRyeS5zZXJ2aWNlTmFtZX1gKTtcbiAgfVxuICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl92ZXJpZnlfdG90YWwnLCB7IHJlc3VsdDogJ29rJywgc2VydmljZTogZW50cnkuc2VydmljZU5hbWUgfSk7XG4gIHJldHVybiBjbGFpbXM7XG59XG5cbi8qKlxuICogVHJ1ZSB3aGlsZSB0aGlzIHNlcnZpY2Ugc3RpbGwgcHVibGlzaGVzIG1vcmUgdGhhbiBvbmUgdmVyaWZpY2F0aW9uIGtleSDigJQgaS5lLlxuICogYSBzaWduaW5nLWtleSByb3RhdGlvbiBpcyBvcGVuIGFuZCB0aGUgcmV0aXJpbmcga2V5IGlzIHN0aWxsIHRydXN0ZWQuIEZlZWRzXG4gKiB0aGUgYHNlY3JldF9yb3RhdGlvbl9wcmV2aW91c19zZXR7c2VjcmV0PVwiU0VSVklDRV9TSUdOSU5HX0tFWVwifWAgZ2F1Z2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JldGlyaW5nU2VydmljZUtleVB1Ymxpc2hlZCgpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBtZSA9IHNlcnZpY2VJZGVudGl0eSgpO1xuICAgIHJldHVybiBbLi4udmVyaWZpY2F0aW9uS2V5cygpLnZhbHVlcygpXS5maWx0ZXIoKHYpID0+IHYuc2VydmljZU5hbWUgPT09IG1lKS5sZW5ndGggPiAxO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUZXN0IHNlYW06IGRyb3AgdGhlIGxvYWRlZCBzaWduaW5nIGtleSwgdGhlIGJ1bmRsZSBhbmQgYW55IGVwaGVtZXJhbCBrZXlzIHNvXG4gKiB0aGUgbmV4dCBzaWduL3ZlcmlmeSByZS1yZWFkcyB0aGUgZW52aXJvbm1lbnQuIERvbid0IGNhbGwgZnJvbSBwcm9kdWN0aW9uIGNvZGVcbiAqIOKAlCByb3RhdGlvbiBpcyBwaWNrZWQgdXAgYnkgdGhlIHJlZnJlc2ggaW50ZXJ2YWwgYW5kIHRoZSBtdGltZSBjaGVjay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldFNlcnZpY2VLZXlzRm9yVGVzdHMoKTogdm9pZCB7XG4gIGxvY2FsS2V5ID0gdW5kZWZpbmVkO1xuICBidW5kbGUgPSB1bmRlZmluZWQ7XG4gIGVwaGVtZXJhbEtleXMgPSB1bmRlZmluZWQ7XG4gIGVwaGVtZXJhbFdhcm5lZCA9IGZhbHNlO1xufVxuIl19
@@ -47,6 +47,10 @@ export declare enum ErrorCode {
47
47
  CONFLICT = "CONFLICT",
48
48
  DUPLICATE_ENTRY = "DUPLICATE_ENTRY",
49
49
  SCAN_CONFLICT = "SCAN_CONFLICT",
50
+ /** A plugin image's cosign signature (or its signed SBOM attestation) did
51
+ * not verify against the platform's plugin-signing key — the registry
52
+ * content no longer matches what the platform built and signed. */
53
+ IMAGE_VERIFICATION_FAILED = "IMAGE_VERIFICATION_FAILED",
50
54
  PAYMENT_METHOD_REQUIRED = "PAYMENT_METHOD_REQUIRED",// 402
51
55
  DISCOUNT_CEILING_EXCEEDED = "DISCOUNT_CEILING_EXCEEDED",// 400
52
56
  DISCOUNT_NOT_FOUND = "DISCOUNT_NOT_FOUND",// 404
@@ -57,6 +57,10 @@ export var ErrorCode;
57
57
  ErrorCode["CONFLICT"] = "CONFLICT";
58
58
  ErrorCode["DUPLICATE_ENTRY"] = "DUPLICATE_ENTRY";
59
59
  ErrorCode["SCAN_CONFLICT"] = "SCAN_CONFLICT";
60
+ /** A plugin image's cosign signature (or its signed SBOM attestation) did
61
+ * not verify against the platform's plugin-signing key — the registry
62
+ * content no longer matches what the platform built and signed. */
63
+ ErrorCode["IMAGE_VERIFICATION_FAILED"] = "IMAGE_VERIFICATION_FAILED";
60
64
  // Billing errors
61
65
  ErrorCode["PAYMENT_METHOD_REQUIRED"] = "PAYMENT_METHOD_REQUIRED";
62
66
  ErrorCode["DISCOUNT_CEILING_EXCEEDED"] = "DISCOUNT_CEILING_EXCEEDED";
@@ -107,6 +111,7 @@ export const ErrorCodeStatus = {
107
111
  [ErrorCode.CONFLICT]: 409,
108
112
  [ErrorCode.DUPLICATE_ENTRY]: 409,
109
113
  [ErrorCode.SCAN_CONFLICT]: 409,
114
+ [ErrorCode.IMAGE_VERIFICATION_FAILED]: 409,
110
115
  [ErrorCode.PAYMENT_METHOD_REQUIRED]: 402,
111
116
  [ErrorCode.DISCOUNT_CEILING_EXCEEDED]: 400,
112
117
  [ErrorCode.DISCOUNT_NOT_FOUND]: 404,
@@ -125,4 +130,4 @@ export const ErrorCodeStatus = {
125
130
  export function getStatusForErrorCode(code) {
126
131
  return ErrorCodeStatus[code] ?? 500;
127
132
  }
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZXJyb3ItY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFOLElBQVksU0F5RVg7QUF6RUQsV0FBWSxTQUFTO0lBQ25CLDhCQUE4QjtJQUM5QiwwQ0FBNkIsQ0FBQTtJQUM3Qiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQjs7O3VEQUdtRDtJQUNuRCwwQ0FBNkIsQ0FBQTtJQUM3Qjs4RUFDMEU7SUFDMUUsZ0RBQW1DLENBQUE7SUFFbkMsNkJBQTZCO0lBQzdCLGtFQUFxRCxDQUFBO0lBQ3JEO3dFQUNvRTtJQUNwRSw4REFBaUQsQ0FBQTtJQUNqRDtvRUFDZ0U7SUFDaEUsZ0VBQW1ELENBQUE7SUFDbkQsMENBQTZCLENBQUE7SUFDN0IsMERBQTZDLENBQUE7SUFFN0MseUJBQXlCO0lBQ3pCLG9DQUF1QixDQUFBO0lBQ3ZCLDRDQUErQixDQUFBO0lBRS9CLDBCQUEwQjtJQUMxQixrREFBcUMsQ0FBQTtJQUNyQyw4REFBaUQsQ0FBQTtJQUNqRCw0REFBK0MsQ0FBQTtJQUMvQyw4Q0FBaUMsQ0FBQTtJQUNqQywwREFBNkMsQ0FBQTtJQUM3Qyw4REFBaUQsQ0FBQTtJQUNqRCxvRUFBdUQsQ0FBQTtJQUN2RCx3RUFBMkQsQ0FBQTtJQUMzRCw4REFBaUQsQ0FBQTtJQUNqRCxzRUFBeUQsQ0FBQTtJQUV6RCxnQ0FBZ0M7SUFDaEMsOENBQWlDLENBQUE7SUFDakMsd0RBQTJDLENBQUE7SUFFM0MsdUJBQXVCO0lBQ3ZCLG9EQUF1QyxDQUFBO0lBRXZDLHdCQUF3QjtJQUN4QixrQ0FBcUIsQ0FBQTtJQUNyQixnREFBbUMsQ0FBQTtJQUNuQyw0Q0FBK0IsQ0FBQTtJQUUvQixpQkFB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Q0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRztJQUNoQyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsRUFBRSxHQUFHO0NBQ2hELENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUFlO0lBQ25ELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU3RhbmRhcmRpemVkIGVycm9yIGNvZGVzIHVzZWQgYWNyb3NzIGFsbCBBUEkgbWljcm9zZXJ2aWNlcy5cbiAqIFVzZSB0aGVzZSBjb2RlcyBpbiBlcnJvciByZXNwb25zZXMgZm9yIGNvbnNpc3RlbnQgY2xpZW50IGhhbmRsaW5nLlxuICpcbiAqIEVhY2ggSFRUUCBzdGF0dXMgY2F0ZWdvcnkgaGFzIG9uZSBwcmltYXJ5IGNvZGUuIFVzZSB0aGUgYGRldGFpbHNgXG4gKiBmaWVsZCBpbiBlcnJvciByZXNwb25zZXMgZm9yIHN1Yi10eXBlIGluZm9ybWF0aW9uIChlLmcuIHdoaWNoIHF1b3RhXG4gKiB3YXMgZXhjZWVkZWQsIHdoaWNoIGZpZWxkIGZhaWxlZCB2YWxpZGF0aW9uKS5cbiAqL1xuZXhwb3J0IGVudW0gRXJyb3JDb2RlIHtcbiAgLy8gQXV0aGVudGljYXRpb24gZXJyb3JzICg0MDEpXG4gIFVOQVVUSE9SSVpFRCA9ICdVTkFVVEhPUklaRUQnLFxuICBUT0tFTl9FWFBJUkVEID0gJ1RPS0VOX0VYUElSRUQnLFxuICBUT0tFTl9JTlZBTElEID0gJ1RPS0VOX0lOVkFMSUQnLFxuICBUT0tFTl9NSVNTSU5HID0gJ1RPS0VOX01JU1NJTkcnLFxuICBUT0tFTl9SRVZPS0VEID0gJ1RPS0VOX1JFVk9LRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgbm90IE1GQS1ncmFkZSAoYGFhbGAgYmVsb3cgdGhlIHJvdXRlJ3MgYG1pbkFzc3VyYW5jZWApLlxuICAgKiAgVGhlIGNsaWVudCBzZW5kcyB0aGUgcGVyc29uIHRvIGVucm9sIC8gc2lnbiBpbiBhZ2FpbiB3aXRoIGEgc2Vjb25kXG4gICAqICBmYWN0b3Ig4oCUIGl0IG11c3QgTk9UIHNpZ24gdGhlbSBvdXQgb3IgcmV0cnkgYSB0b2tlbiByZWZyZXNoLCBzaW5jZSBhXG4gICAqICByZWZyZXNoIGNhbiBuZXZlciByYWlzZSB0aGUgYXNzdXJhbmNlIGxldmVsLiAqL1xuICBNRkFfUkVRVUlSRUQgPSAnTUZBX1JFUVVJUkVEJyxcbiAgLyoqIFRoZSBzZXNzaW9uIGlzIE1GQS1ncmFkZSBidXQgaXRzIGBhdXRoX3RpbWVgIGlzIG9sZGVyIHRoYW4gdGhlIHJvdXRlJ3NcbiAgICogIGBtYXhBZ2VgIOKAlCB0aGUgcGVyc29uIG11c3QgYXV0aGVudGljYXRlIGFnYWluIChub3QgbWVyZWx5IHJlZnJlc2gpLiAqL1xuICBSRUFVVEhfUkVRVUlSRUQgPSAnUkVBVVRIX1JFUVVJUkVEJyxcblxuICAvLyBBdXRob3JpemF0aW9uIGVycm9ycyAoNDAzKVxuICBJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMgPSAnSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TJyxcbiAgLyoqIEEgbWFjaGluZSBjcmVkZW50aWFsIChzZXJ2aWNlIHByaW5jaXBhbCwgb3JnIHNlcnZpY2UgYWNjb3VudCwgb3IgYW5cbiAgICogIGV4Y2hhbmdlZCBhY2Nlc3Mga2V5KSByZWFjaGVkIGEgcm91dGUgdGhhdCByZXF1aXJlcyBhIHBlcnNvbi4gKi9cbiAgSFVNQU5fU0VTU0lPTl9SRVFVSVJFRCA9ICdIVU1BTl9TRVNTSU9OX1JFUVVJUkVEJyxcbiAgLyoqIEEgYm9vdHN0cmFwLWFkbWluIGVucm9sbWVudCBzZXNzaW9uIChgbWZhRW5yb2xsbWVudFBlbmRpbmdgKSByZWFjaGVkIGFcbiAgICogIHJvdXRlIG91dHNpZGUgdGhlIGVucm9sbWVudCAvIHNpZ24tb3V0IC8gc2V0dXAgYWxsb3dsaXN0LiAqL1xuICBNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCA9ICdNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCcsXG4gIE9SR19NSVNNQVRDSCA9ICdPUkdfTUlTTUFUQ0gnLFxuICBDT01QTElBTkNFX1ZJT0xBVElPTiA9ICdDT01QTElBTkNFX1ZJT0xBVElPTicsXG5cbiAgLy8gTm90IGZvdW5kIGVycm9ycyAoNDA0KVxuICBOT1RfRk9VTkQgPSAnTk9UX0ZPVU5EJyxcbiAgT1JHX05PVF9GT1VORCA9ICdPUkdfTk9UX0ZPVU5EJyxcblxuICAvLyBWYWxpZGF0aW9uIGVycm9ycyAoNDAwKVxuICBWQUxJREFUSU9OX0VSUk9SID0gJ1ZBTElEQVRJT05fRVJST1InLFxuICBNSVNTSU5HX1JFUVVJUkVEX0ZJRUxEID0gJ01JU1NJTkdfUkVRVUlSRURfRklFTEQnLFxuICBURU1QTEFURV9VTktOT1dOX1BBVEggPSAnVEVNUExBVEVfVU5LTk9XTl9QQVRIJyxcbiAgVEVNUExBVEVfQ1lDTEUgPSAnVEVNUExBVEVfQ1lDTEUnLFxuICBURU1QTEFURV9QQVJTRV9FUlJPUiA9ICdURU1QTEFURV9QQVJTRV9FUlJPUicsXG4gIFRFTVBMQVRFX1RZUEVfTUlTTUFUQ0ggPSAnVEVNUExBVEVfVFlQRV9NSVNNQVRDSCcsXG4gIFRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQgPSAnVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRCcsXG4gIFRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTiA9ICdURU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT04nLFxuICBURU1QTEFURV9TSVpFX0VYQ0VFREVEID0gJ1RFTVBMQVRFX1NJWkVfRVhDRUVERUQnLFxuICBURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCA9ICdURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCcsXG5cbiAgLy8gUXVvdGEvUmF0ZSBsaW1pdCBlcnJvcnMgKDQyOSlcbiAgUVVPVEFfRVhDRUVERUQgPSAnUVVPVEFfRVhDRUVERUQnLFxuICBSQVRFX0xJTUlUX0VYQ0VFREVEID0gJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuXG4gIC8vIFBheWxvYWQgZXJyb3JzICg0MTMpXG4gIFBBWUxPQURfVE9PX0xBUkdFID0gJ1BBWUxPQURfVE9PX0xBUkdFJyxcblxuICAvLyBDb25mbGljdCBlcnJvcnMgKDQwOSlcbiAgQ09ORkxJQ1QgPSAnQ09ORkxJQ1QnLFxuICBEVVBMSUNBVEVfRU5UUlkgPSAnRFVQTElDQVRFX0VOVFJZJyxcbiAgU0NBTl9DT05GTElDVCA9ICdTQ0FOX0NPTkZMSUNUJyxcblxuICAvLyBCaWxsaW5nIGVycm9yc1xuICBQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCA9ICdQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCcsIC8vIDQwMlxuICBESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEID0gJ0RJU0NPVU5UX0NFSUxJTkdfRVhDRUVERUQnLCAvLyA0MDBcbiAgRElTQ09VTlRfTk9UX0ZPVU5EID0gJ0RJU0NPVU5UX05PVF9GT1VORCcsIC8vIDQwNFxuICBESVNDT1VOVF9JTkFDVElWRSA9ICdESVNDT1VOVF9JTkFDVElWRScsIC8vIDQwOVxuICBQTEFOX09WRVJfQ0FQID0gJ1BMQU5fT1ZFUl9DQVAnLCAvLyA0MDlcbiAgQURET05fT1ZFUl9DQVAgPSAnQURET05fT1ZFUl9DQVAnLCAvLyA0MDlcblxuICAvLyBTZXJ2ZXIgZXJyb3JzICg1MDApXG4gIElOVEVSTkFMX0VSUk9SID0gJ0lOVEVSTkFMX0VSUk9SJyxcbiAgREFUQUJBU0VfRVJST1IgPSAnREFUQUJBU0VfRVJST1InLFxuXG4gIC8vIE5vdCBpbXBsZW1lbnRlZCAoNTAxKSDigJQgdGhlIGNvbmZpZ3VyZWQgcHJvdmlkZXIgaGFzIG5vIHN1Y2ggY2FwYWJpbGl0eVxuICBOT1RfSU1QTEVNRU5URUQgPSAnTk9UX0lNUExFTUVOVEVEJyxcblxuICAvLyBTZXJ2aWNlIHVuYXZhaWxhYmxlICg1MDMpXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEUgPSAnU0VSVklDRV9VTkFWQUlMQUJMRScsXG4gIENPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRSA9ICdDT01QTElBTkNFX1NFUlZJQ0VfVU5BVkFJTEFCTEUnLFxufVxuXG4vKipcbiAqIE1hcHMgZXJyb3IgY29kZXMgdG8gdGhlaXIgZGVmYXVsdCBIVFRQIHN0YXR1cyBjb2Rlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZVN0YXR1czogUmVjb3JkPEVycm9yQ29kZSwgbnVtYmVyPiA9IHtcbiAgW0Vycm9yQ29kZS5VTkFVVEhPUklaRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fRVhQSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9JTlZBTElEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX01JU1NJTkddOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fUkVWT0tFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5NRkFfUkVRVUlSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuUkVBVVRIX1JFUVVJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OU106IDQwMyxcbiAgW0Vycm9yQ29kZS5IVU1BTl9TRVNTSU9OX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLk1GQV9FTlJPTExNRU5UX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLk9SR19NSVNNQVRDSF06IDQwMyxcbiAgW0Vycm9yQ29kZS5DT01QTElBTkNFX1ZJT0xBVElPTl06IDQwMyxcbiAgW0Vycm9yQ29kZS5OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuT1JHX05PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SXTogNDAwLFxuICBbRXJyb3JDb2RlLk1JU1NJTkdfUkVRVUlSRURfRklFTERdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVU5LTk9XTl9QQVRIXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX0NZQ0xFXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1BBUlNFX0VSUk9SXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1RZUEVfTUlTTUFUQ0hdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT05dOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfU0laRV9FWENFRURFRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5RVU9UQV9FWENFRURFRF06IDQyOSxcbiAgW0Vycm9yQ29kZS5SQVRFX0xJTUlUX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLlBBWUxPQURfVE9PX0xBUkdFXTogNDEzLFxuICBbRXJyb3JDb2RlLkNPTkZMSUNUXTogNDA5LFxuICBbRXJyb3JDb2RlLkRVUExJQ0FURV9FTlRSWV06IDQwOSxcbiAgW0Vycm9yQ29kZS5TQ0FOX0NPTkZMSUNUXTogNDA5LFxuICBbRXJyb3JDb2RlLlBBWU1FTlRfTUVUSE9EX1JFUVVJUkVEXTogNDAyLFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX0NFSUxJTkdfRVhDRUVERURdOiA0MDAsXG4gIFtFcnJvckNvZGUuRElTQ09VTlRfTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX0lOQUNUSVZFXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMQU5fT1ZFUl9DQVBdOiA0MDksXG4gIFtFcnJvckNvZGUuQURET05fT1ZFUl9DQVBdOiA0MDksXG4gIFtFcnJvckNvZGUuSU5URVJOQUxfRVJST1JdOiA1MDAsXG4gIFtFcnJvckNvZGUuREFUQUJBU0VfRVJST1JdOiA1MDAsXG4gIFtFcnJvckNvZGUuTk9UX0lNUExFTUVOVEVEXTogNTAxLFxuICBbRXJyb3JDb2RlLlNFUlZJQ0VfVU5BVkFJTEFCTEVdOiA1MDMsXG4gIFtFcnJvckNvZGUuQ09NUExJQU5DRV9TRVJWSUNFX1VOQVZBSUxBQkxFXTogNTAzLFxufTtcblxuLyoqXG4gKiBHZXQgdGhlIEhUVFAgc3RhdHVzIGNvZGUgZm9yIGFuIGVycm9yIGNvZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0dXNGb3JFcnJvckNvZGUoY29kZTogRXJyb3JDb2RlKTogbnVtYmVyIHtcbiAgcmV0dXJuIEVycm9yQ29kZVN0YXR1c1tjb2RlXSA/PyA1MDA7XG59XG4iXX0=
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZXJyb3ItY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFOLElBQVksU0E2RVg7QUE3RUQsV0FBWSxTQUFTO0lBQ25CLDhCQUE4QjtJQUM5QiwwQ0FBNkIsQ0FBQTtJQUM3Qiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQjs7O3VEQUdtRDtJQUNuRCwwQ0FBNkIsQ0FBQTtJQUM3Qjs4RUFDMEU7SUFDMUUsZ0RBQW1DLENBQUE7SUFFbkMsNkJBQTZCO0lBQzdCLGtFQUFxRCxDQUFBO0lBQ3JEO3dFQUNvRTtJQUNwRSw4REFBaUQsQ0FBQTtJQUNqRDtvRUFDZ0U7SUFDaEUsZ0VBQW1ELENBQUE7SUFDbkQsMENBQTZCLENBQUE7SUFDN0IsMERBQTZDLENBQUE7SUFFN0MseUJBQXlCO0lBQ3pCLG9DQUF1QixDQUFBO0lBQ3ZCLDRDQUErQixDQUFBO0lBRS9CLDBCQUEwQjtJQUMxQixrREFBcUMsQ0FBQTtJQUNyQyw4REFBaUQsQ0FBQTtJQUNqRCw0REFBK0MsQ0FBQTtJQUMvQyw4Q0FBaUMsQ0FBQTtJQUNqQywwREFBNkMsQ0FBQTtJQUM3Qyw4REFBaUQsQ0FBQTtJQUNqRCxvRUFBdUQsQ0FBQTtJQUN2RCx3RUFBMkQsQ0FBQTtJQUMzRCw4REFBaUQsQ0FBQTtJQUNqRCxzRUFBeUQsQ0FBQTtJQUV6RCxnQ0FBZ0M7SUFDaEMsOENBQWlDLENBQUE7SUFDakMsd0RBQTJDLENBQUE7SUFFM0MsdUJBQXVCO0lBQ3ZCLG9EQUF1QyxDQUFBO0lBRXZDLHdCQUF3QjtJQUN4QixrQ0FBcUIsQ0FBQTtJQUNyQixnREFBbUMsQ0FBQTtJQUNuQyw0Q0FBK0IsQ0FBQTtJQUMvQjs7d0VBRW9FO0lBQ3BFLG9FQUF1RCxDQUFBO0lBRXZELGlCQUFpQjtJQUNqQixnRUFBbUQsQ0FBQTtJQUNuRCxvRUFBdUQsQ0FBQTtJQUN2RCxzREFBeUMsQ0FBQTtJQUN6QyxvREFBdUMsQ0FBQTtJQUN2Qyw0Q0FBK0IsQ0FBQTtJQUMvQiw4Q0FBaUMsQ0FBQTtJQUVqQyxzQkFBc0I7SUFDdEIsOENBQWlDLENBQUE7SUFDakMsOENBQWlDLENBQUE7SUFFakMseUVBQXlFO0lBQ3pFLGdEQUFtQyxDQUFBO0lBRW5DLDRCQUE0QjtJQUM1Qix3REFBMkMsQ0FBQTtJQUMzQyw4RUFBaUUsQ0FBQTtBQUNuRSxDQUFDLEVBN0VXLFNBQVMsS0FBVCxTQUFTLFFBNkVwQjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUE4QjtJQUN4RCxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHO0lBQzdCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHO0lBQzlCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRztJQUM3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHO0lBQ2hDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsR0FBRztJQUN6QyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsRUFBRSxHQUFHO0lBQ3hDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUc7SUFDN0IsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxHQUFHO0lBQ3JDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUc7SUFDMUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUc7SUFDakMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxHQUFHO0lBQ3ZDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsR0FBRztJQUN0QyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsR0FBRztJQUNyQyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsRUFBRSxHQUFHO0lBQzFDLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsR0FBRztJQUM1QyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMsMEJBQTBCLENBQUMsRUFBRSxHQUFHO0lBQzNDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxHQUFHO0lBQ3BDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsR0FBRztJQUNsQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHO0lBQ3pCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUc7SUFDaEMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEdBQUc7SUFDMUMsQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsRUFBRSxHQUFHO0lBQ3hDLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsR0FBRztJQUMxQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUc7SUFDbkMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHO0lBQ2xDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRztJQUNoQyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsRUFBRSxHQUFHO0NBQ2hELENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUFlO0lBQ25ELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU3RhbmRhcmRpemVkIGVycm9yIGNvZGVzIHVzZWQgYWNyb3NzIGFsbCBBUEkgbWljcm9zZXJ2aWNlcy5cbiAqIFVzZSB0aGVzZSBjb2RlcyBpbiBlcnJvciByZXNwb25zZXMgZm9yIGNvbnNpc3RlbnQgY2xpZW50IGhhbmRsaW5nLlxuICpcbiAqIEVhY2ggSFRUUCBzdGF0dXMgY2F0ZWdvcnkgaGFzIG9uZSBwcmltYXJ5IGNvZGUuIFVzZSB0aGUgYGRldGFpbHNgXG4gKiBmaWVsZCBpbiBlcnJvciByZXNwb25zZXMgZm9yIHN1Yi10eXBlIGluZm9ybWF0aW9uIChlLmcuIHdoaWNoIHF1b3RhXG4gKiB3YXMgZXhjZWVkZWQsIHdoaWNoIGZpZWxkIGZhaWxlZCB2YWxpZGF0aW9uKS5cbiAqL1xuZXhwb3J0IGVudW0gRXJyb3JDb2RlIHtcbiAgLy8gQXV0aGVudGljYXRpb24gZXJyb3JzICg0MDEpXG4gIFVOQVVUSE9SSVpFRCA9ICdVTkFVVEhPUklaRUQnLFxuICBUT0tFTl9FWFBJUkVEID0gJ1RPS0VOX0VYUElSRUQnLFxuICBUT0tFTl9JTlZBTElEID0gJ1RPS0VOX0lOVkFMSUQnLFxuICBUT0tFTl9NSVNTSU5HID0gJ1RPS0VOX01JU1NJTkcnLFxuICBUT0tFTl9SRVZPS0VEID0gJ1RPS0VOX1JFVk9LRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgbm90IE1GQS1ncmFkZSAoYGFhbGAgYmVsb3cgdGhlIHJvdXRlJ3MgYG1pbkFzc3VyYW5jZWApLlxuICAgKiAgVGhlIGNsaWVudCBzZW5kcyB0aGUgcGVyc29uIHRvIGVucm9sIC8gc2lnbiBpbiBhZ2FpbiB3aXRoIGEgc2Vjb25kXG4gICAqICBmYWN0b3Ig4oCUIGl0IG11c3QgTk9UIHNpZ24gdGhlbSBvdXQgb3IgcmV0cnkgYSB0b2tlbiByZWZyZXNoLCBzaW5jZSBhXG4gICAqICByZWZyZXNoIGNhbiBuZXZlciByYWlzZSB0aGUgYXNzdXJhbmNlIGxldmVsLiAqL1xuICBNRkFfUkVRVUlSRUQgPSAnTUZBX1JFUVVJUkVEJyxcbiAgLyoqIFRoZSBzZXNzaW9uIGlzIE1GQS1ncmFkZSBidXQgaXRzIGBhdXRoX3RpbWVgIGlzIG9sZGVyIHRoYW4gdGhlIHJvdXRlJ3NcbiAgICogIGBtYXhBZ2VgIOKAlCB0aGUgcGVyc29uIG11c3QgYXV0aGVudGljYXRlIGFnYWluIChub3QgbWVyZWx5IHJlZnJlc2gpLiAqL1xuICBSRUFVVEhfUkVRVUlSRUQgPSAnUkVBVVRIX1JFUVVJUkVEJyxcblxuICAvLyBBdXRob3JpemF0aW9uIGVycm9ycyAoNDAzKVxuICBJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMgPSAnSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TJyxcbiAgLyoqIEEgbWFjaGluZSBjcmVkZW50aWFsIChzZXJ2aWNlIHByaW5jaXBhbCwgb3JnIHNlcnZpY2UgYWNjb3VudCwgb3IgYW5cbiAgICogIGV4Y2hhbmdlZCBhY2Nlc3Mga2V5KSByZWFjaGVkIGEgcm91dGUgdGhhdCByZXF1aXJlcyBhIHBlcnNvbi4gKi9cbiAgSFVNQU5fU0VTU0lPTl9SRVFVSVJFRCA9ICdIVU1BTl9TRVNTSU9OX1JFUVVJUkVEJyxcbiAgLyoqIEEgYm9vdHN0cmFwLWFkbWluIGVucm9sbWVudCBzZXNzaW9uIChgbWZhRW5yb2xsbWVudFBlbmRpbmdgKSByZWFjaGVkIGFcbiAgICogIHJvdXRlIG91dHNpZGUgdGhlIGVucm9sbWVudCAvIHNpZ24tb3V0IC8gc2V0dXAgYWxsb3dsaXN0LiAqL1xuICBNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCA9ICdNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCcsXG4gIE9SR19NSVNNQVRDSCA9ICdPUkdfTUlTTUFUQ0gnLFxuICBDT01QTElBTkNFX1ZJT0xBVElPTiA9ICdDT01QTElBTkNFX1ZJT0xBVElPTicsXG5cbiAgLy8gTm90IGZvdW5kIGVycm9ycyAoNDA0KVxuICBOT1RfRk9VTkQgPSAnTk9UX0ZPVU5EJyxcbiAgT1JHX05PVF9GT1VORCA9ICdPUkdfTk9UX0ZPVU5EJyxcblxuICAvLyBWYWxpZGF0aW9uIGVycm9ycyAoNDAwKVxuICBWQUxJREFUSU9OX0VSUk9SID0gJ1ZBTElEQVRJT05fRVJST1InLFxuICBNSVNTSU5HX1JFUVVJUkVEX0ZJRUxEID0gJ01JU1NJTkdfUkVRVUlSRURfRklFTEQnLFxuICBURU1QTEFURV9VTktOT1dOX1BBVEggPSAnVEVNUExBVEVfVU5LTk9XTl9QQVRIJyxcbiAgVEVNUExBVEVfQ1lDTEUgPSAnVEVNUExBVEVfQ1lDTEUnLFxuICBURU1QTEFURV9QQVJTRV9FUlJPUiA9ICdURU1QTEFURV9QQVJTRV9FUlJPUicsXG4gIFRFTVBMQVRFX1RZUEVfTUlTTUFUQ0ggPSAnVEVNUExBVEVfVFlQRV9NSVNNQVRDSCcsXG4gIFRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQgPSAnVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRCcsXG4gIFRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTiA9ICdURU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT04nLFxuICBURU1QTEFURV9TSVpFX0VYQ0VFREVEID0gJ1RFTVBMQVRFX1NJWkVfRVhDRUVERUQnLFxuICBURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCA9ICdURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCcsXG5cbiAgLy8gUXVvdGEvUmF0ZSBsaW1pdCBlcnJvcnMgKDQyOSlcbiAgUVVPVEFfRVhDRUVERUQgPSAnUVVPVEFfRVhDRUVERUQnLFxuICBSQVRFX0xJTUlUX0VYQ0VFREVEID0gJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuXG4gIC8vIFBheWxvYWQgZXJyb3JzICg0MTMpXG4gIFBBWUxPQURfVE9PX0xBUkdFID0gJ1BBWUxPQURfVE9PX0xBUkdFJyxcblxuICAvLyBDb25mbGljdCBlcnJvcnMgKDQwOSlcbiAgQ09ORkxJQ1QgPSAnQ09ORkxJQ1QnLFxuICBEVVBMSUNBVEVfRU5UUlkgPSAnRFVQTElDQVRFX0VOVFJZJyxcbiAgU0NBTl9DT05GTElDVCA9ICdTQ0FOX0NPTkZMSUNUJyxcbiAgLyoqIEEgcGx1Z2luIGltYWdlJ3MgY29zaWduIHNpZ25hdHVyZSAob3IgaXRzIHNpZ25lZCBTQk9NIGF0dGVzdGF0aW9uKSBkaWRcbiAgICogIG5vdCB2ZXJpZnkgYWdhaW5zdCB0aGUgcGxhdGZvcm0ncyBwbHVnaW4tc2lnbmluZyBrZXkg4oCUIHRoZSByZWdpc3RyeVxuICAgKiAgY29udGVudCBubyBsb25nZXIgbWF0Y2hlcyB3aGF0IHRoZSBwbGF0Zm9ybSBidWlsdCBhbmQgc2lnbmVkLiAqL1xuICBJTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEID0gJ0lNQUdFX1ZFUklGSUNBVElPTl9GQUlMRUQnLFxuXG4gIC8vIEJpbGxpbmcgZXJyb3JzXG4gIFBBWU1FTlRfTUVUSE9EX1JFUVVJUkVEID0gJ1BBWU1FTlRfTUVUSE9EX1JFUVVJUkVEJywgLy8gNDAyXG4gIERJU0NPVU5UX0NFSUxJTkdfRVhDRUVERUQgPSAnRElTQ09VTlRfQ0VJTElOR19FWENFRURFRCcsIC8vIDQwMFxuICBESVNDT1VOVF9OT1RfRk9VTkQgPSAnRElTQ09VTlRfTk9UX0ZPVU5EJywgLy8gNDA0XG4gIERJU0NPVU5UX0lOQUNUSVZFID0gJ0RJU0NPVU5UX0lOQUNUSVZFJywgLy8gNDA5XG4gIFBMQU5fT1ZFUl9DQVAgPSAnUExBTl9PVkVSX0NBUCcsIC8vIDQwOVxuICBBRERPTl9PVkVSX0NBUCA9ICdBRERPTl9PVkVSX0NBUCcsIC8vIDQwOVxuXG4gIC8vIFNlcnZlciBlcnJvcnMgKDUwMClcbiAgSU5URVJOQUxfRVJST1IgPSAnSU5URVJOQUxfRVJST1InLFxuICBEQVRBQkFTRV9FUlJPUiA9ICdEQVRBQkFTRV9FUlJPUicsXG5cbiAgLy8gTm90IGltcGxlbWVudGVkICg1MDEpIOKAlCB0aGUgY29uZmlndXJlZCBwcm92aWRlciBoYXMgbm8gc3VjaCBjYXBhYmlsaXR5XG4gIE5PVF9JTVBMRU1FTlRFRCA9ICdOT1RfSU1QTEVNRU5URUQnLFxuXG4gIC8vIFNlcnZpY2UgdW5hdmFpbGFibGUgKDUwMylcbiAgU0VSVklDRV9VTkFWQUlMQUJMRSA9ICdTRVJWSUNFX1VOQVZBSUxBQkxFJyxcbiAgQ09NUExJQU5DRV9TRVJWSUNFX1VOQVZBSUxBQkxFID0gJ0NPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRScsXG59XG5cbi8qKlxuICogTWFwcyBlcnJvciBjb2RlcyB0byB0aGVpciBkZWZhdWx0IEhUVFAgc3RhdHVzIGNvZGVzLlxuICovXG5leHBvcnQgY29uc3QgRXJyb3JDb2RlU3RhdHVzOiBSZWNvcmQ8RXJyb3JDb2RlLCBudW1iZXI+ID0ge1xuICBbRXJyb3JDb2RlLlVOQVVUSE9SSVpFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9FWFBJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX0lOVkFMSURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fTUlTU0lOR106IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9SRVZPS0VEXTogNDAxLFxuICBbRXJyb3JDb2RlLk1GQV9SRVFVSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5SRUFVVEhfUkVRVUlSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TXTogNDAzLFxuICBbRXJyb3JDb2RlLkhVTUFOX1NFU1NJT05fUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuTUZBX0VOUk9MTE1FTlRfUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuT1JHX01JU01BVENIXTogNDAzLFxuICBbRXJyb3JDb2RlLkNPTVBMSUFOQ0VfVklPTEFUSU9OXTogNDAzLFxuICBbRXJyb3JDb2RlLk5PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5PUkdfTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1JdOiA0MDAsXG4gIFtFcnJvckNvZGUuTUlTU0lOR19SRVFVSVJFRF9GSUVMRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9VTktOT1dOX1BBVEhdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfQ1lDTEVdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfUEFSU0VfRVJST1JdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVFlQRV9NSVNNQVRDSF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9TRUNSRVRTX1JFU0VSVkVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTl06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9TSVpFX0VYQ0VFREVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1ZBTElEQVRJT05fRkFJTEVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLlJBVEVfTElNSVRfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuUEFZTE9BRF9UT09fTEFSR0VdOiA0MTMsXG4gIFtFcnJvckNvZGUuQ09ORkxJQ1RdOiA0MDksXG4gIFtFcnJvckNvZGUuRFVQTElDQVRFX0VOVFJZXTogNDA5LFxuICBbRXJyb3JDb2RlLlNDQU5fQ09ORkxJQ1RdOiA0MDksXG4gIFtFcnJvckNvZGUuSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QQVlNRU5UX01FVEhPRF9SRVFVSVJFRF06IDQwMixcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEXTogNDAwLFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX05PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9JTkFDVElWRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTEFOX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLkFERE9OX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLkRBVEFCQVNFX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLk5PVF9JTVBMRU1FTlRFRF06IDUwMSxcbiAgW0Vycm9yQ29kZS5TRVJWSUNFX1VOQVZBSUxBQkxFXTogNTAzLFxuICBbRXJyb3JDb2RlLkNPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRV06IDUwMyxcbn07XG5cbi8qKlxuICogR2V0IHRoZSBIVFRQIHN0YXR1cyBjb2RlIGZvciBhbiBlcnJvciBjb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzRm9yRXJyb3JDb2RlKGNvZGU6IEVycm9yQ29kZSk6IG51bWJlciB7XG4gIHJldHVybiBFcnJvckNvZGVTdGF0dXNbY29kZV0gPz8gNTAwO1xufVxuIl19
package/package.json CHANGED
@@ -97,7 +97,7 @@
97
97
  ]
98
98
  }
99
99
  },
100
- "version": "4.1.9",
100
+ "version": "4.1.11",
101
101
  "bugs": {
102
102
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
103
103
  },