@pipeline-builder/pipeline-data 4.3.6 → 4.3.7

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.
Files changed (70) hide show
  1. package/lib/api/access-control-builder.js +1 -1
  2. package/lib/api/alert-destinations.js +1 -1
  3. package/lib/api/crud-service.js +1 -1
  4. package/lib/api/ecosystem-privacy.js +1 -1
  5. package/lib/api/keyset-cursor.js +1 -1
  6. package/lib/api/pipeline-step-resolution.js +1 -1
  7. package/lib/api/plugin-advisories.js +1 -1
  8. package/lib/api/plugin-consumption-policy.js +1 -1
  9. package/lib/api/plugin-resolution.js +6 -1
  10. package/lib/api/public-directory.d.ts +71 -3
  11. package/lib/api/public-directory.js +68 -22
  12. package/lib/api/query-builders.js +47 -2
  13. package/lib/api/reporting/analytics-queries.js +1 -1
  14. package/lib/api/reporting/caches.js +1 -1
  15. package/lib/api/reporting/daily-rollup.js +1 -1
  16. package/lib/api/reporting/deploy-rollup.js +1 -1
  17. package/lib/api/reporting/dora-scoring.js +1 -1
  18. package/lib/api/reporting/dora.js +1 -1
  19. package/lib/api/reporting/failure-classifier.js +1 -1
  20. package/lib/api/reporting/ingest.js +1 -1
  21. package/lib/api/reporting/last-deploy.js +1 -1
  22. package/lib/api/reporting/needs-attention.js +1 -1
  23. package/lib/api/reporting/plugin-exposure.js +1 -1
  24. package/lib/api/reporting/plugin-runtime.js +1 -1
  25. package/lib/api/reporting/query-scope.js +1 -1
  26. package/lib/api/reporting/retention-sweep.js +1 -1
  27. package/lib/api/reporting/retention.js +1 -1
  28. package/lib/api/reporting/sql-helpers.js +1 -1
  29. package/lib/api/reporting/stakeholder/compose.js +1 -1
  30. package/lib/api/reporting/stakeholder/index.js +1 -1
  31. package/lib/api/reporting/stakeholder/period.js +1 -1
  32. package/lib/api/reporting/stakeholder/report-html.js +1 -1
  33. package/lib/api/reporting/stakeholder/sections.js +1 -1
  34. package/lib/api/reporting/stakeholder/store.js +1 -1
  35. package/lib/api/reporting/stakeholder/templates.js +1 -1
  36. package/lib/api/reporting/types.js +1 -1
  37. package/lib/api/reporting-service.js +1 -1
  38. package/lib/api/semver-range.js +1 -1
  39. package/lib/api/soft-delete-sweep.js +1 -1
  40. package/lib/api/support-cases.js +1 -1
  41. package/lib/api/version-references.js +1 -1
  42. package/lib/api/viewer-context.js +1 -1
  43. package/lib/core/query-filters.d.ts +25 -0
  44. package/lib/core/query-filters.js +1 -1
  45. package/lib/database/drizzle-schema.d.ts +19 -0
  46. package/lib/database/drizzle-schema.js +1 -1
  47. package/lib/database/index.js +1 -1
  48. package/lib/database/pg-result.js +1 -1
  49. package/lib/database/postgres-connection.js +1 -1
  50. package/lib/database/public-reader.js +1 -1
  51. package/lib/database/read-connection.js +1 -1
  52. package/lib/database/read-lag.js +1 -1
  53. package/lib/database/retry-strategy.js +1 -1
  54. package/lib/database/schema/alert.js +1 -1
  55. package/lib/database/schema/compliance.js +1 -1
  56. package/lib/database/schema/dashboard.js +1 -1
  57. package/lib/database/schema/ecosystem.d.ts +17 -0
  58. package/lib/database/schema/ecosystem.js +3 -1
  59. package/lib/database/schema/message-attachment.js +1 -1
  60. package/lib/database/schema/message.d.ts +19 -0
  61. package/lib/database/schema/message.js +18 -1
  62. package/lib/database/schema/pipeline-template.js +1 -1
  63. package/lib/database/schema/pipeline.js +1 -1
  64. package/lib/database/schema/plugin.js +1 -1
  65. package/lib/database/schema/reporting-analytics.js +1 -1
  66. package/lib/database/schema/reporting-stakeholder.js +1 -1
  67. package/lib/database/schema/support.js +1 -1
  68. package/lib/database/tenancy.js +1 -1
  69. package/lib/index.js +1 -1
  70. package/package.json +8 -8
@@ -389,4 +389,4 @@ export async function ingestEvents(events, onMetric, caller) {
389
389
  insertedPipelineIds: [...new Set(insertedRows.map((r) => r.pipelineId).filter((id) => !!id))],
390
390
  };
391
391
  }
392
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5nZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvaW5nZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0SSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHekQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFjaEQscUVBQXFFO0FBQ3JFLFNBQVMsY0FBYyxDQUFDLENBQWM7SUFDcEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDO1dBQ3ZELENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUM7V0FDbkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDdkMsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLFVBQWtCLEVBQUUsU0FBaUIs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RSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztRQUNQLHVCQUF1QjtRQUN2QixZQUFZO1FBQ1osaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsb0JBQW9CLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzVHLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRXZlbnQgaW5nZXN0OiB0aGUgV1JJVEUgaGFsZiBvZiByZXBvcnRpbmcuIFJlc29sdmVzIGluY29taW5nIHBpcGVsaW5lIGV2ZW50c1xuICogYWdhaW5zdCB0aGUgcGlwZWxpbmUgcmVnaXN0cnksIHNjcnVicyBldmVyeSBmcmVlLWZvcm0gc3RyaW5nLCBiYXRjaC1pbnNlcnRzXG4gKiB0aGUgbWF0Y2hlZCByb3dzIGlkZW1wb3RlbnRseSwgYW5kIGludmFsaWRhdGVzIHRoZSBhZmZlY3RlZCBvcmdzJyByZXBvcnRcbiAqIGNhY2hlcy4gU2VwYXJhdGUgZnJvbSB0aGUgcmVwb3J0IHF1ZXJpZXMgYmVjYXVzZSB0aGlzIGlzIHJlcG9ydGluZydzIG9ubHlcbiAqIGR1cmFibGUgcGVyc2lzdGVuY2UgYm91bmRhcnkg4oCUIGV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgc2VydmljZSBvbmx5IHJlYWRzLlxuICovXG5cbmltcG9ydCB7IGNvbXB1dGVDcmVkaXRzRm9yLCBjcmVhdGVMb2dnZXIsIGVycm9yTWVzc2FnZSwgbm9ybWFsaXplQ29tcHV0ZVR5cGUsIHNjcnViQXdzSWRlbnRpZmllcnMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBpbkFycmF5IH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgaW52YWxpZGF0ZU9yZ1JlcG9ydHMgfSBmcm9tICcuL2NhY2hlcy5qcyc7XG5pbXBvcnQgeyB1cHNlcnREZXBsb3ltZW50cyB9IGZyb20gJy4vZGVwbG95LXJvbGx1cC5qcyc7XG5pbXBvcnQgeyBjbGFzc2lmeUZhaWx1cmUgfSBmcm9tICcuL2ZhaWx1cmUtY2xhc3NpZmllci5qcyc7XG5pbXBvcnQgeyBzY3J1Yk9wdGlvbmFsIH0gZnJvbSAnLi9zcWwtaGVscGVycy5qcyc7XG5pbXBvcnQgdHlwZSB7IEluZ2VzdENhbGxlciwgSW5nZXN0RXZlbnQsIEluZ2VzdE1ldHJpYywgSW5nZXN0UmVzdWx0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgeyB3aXRoVGVuYW50VHggfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcbmltcG9ydCB0eXBlIHsgQ3J1ZFR4IH0gZnJvbSAnLi4vY3J1ZC1zZXJ2aWNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdyZXBvcnRpbmctaW5nZXN0Jyk7XG5cbnR5cGUgUGlwZWxpbmVFdmVudEluc2VydCA9IHR5cGVvZiBzY2hlbWEucGlwZWxpbmVFdmVudC4kaW5mZXJJbnNlcnQ7XG5cblxuLyoqIFRoZSBwbHVnaW4gYSBwaXBlbGluZSBzdGVwIHJ1bnMsIGZyb20gdGhlIHN0ZXAgbWFuaWZlc3QgaXRzIGxhc3QgZGVwbG95IHJlZ2lzdGVyZWQuICovXG5pbnRlcmZhY2UgU3RlcFBsdWdpbiB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHBsdWdpblB1Ymxpc2hlcjogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luUHVibGlzaGVySWQ6IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpbk5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpblZlcnNpb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBBbiBhY3Rpb24vYnVpbGQgZXZlbnQgdGhhdCBjYW4gYmUgYXR0cmlidXRlZCB0byBhIHBsdWdpbiBzdGVwLiAqL1xuZnVuY3Rpb24gaXNBdHRyaWJ1dGFibGUoZTogSW5nZXN0RXZlbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChlLmV2ZW50VHlwZSA9PT0gJ0FDVElPTicgfHwgZS5ldmVudFR5cGUgPT09ICdCVUlMRCcpXG4gICAgJiYgKGUuZXZlbnRTb3VyY2UgPT09ICdjb2RlcGlwZWxpbmUnIHx8IGUuZXZlbnRTb3VyY2UgPT09ICdjb2RlYnVpbGQnKVxuICAgICYmICEhZS5zdGFnZU5hbWUgJiYgISFlLmFjdGlvbk5hbWU7XG59XG5cbmZ1bmN0aW9uIHN0ZXBLZXkocGlwZWxpbmVJZDogc3RyaW5nLCBzdGFnZU5hbWU6IHN0cmluZywgYWN0aW9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3BpcGVsaW5lSWR9XFx1MDAwMCR7c3RhZ2VOYW1lfVxcdTAwMDAke2FjdGlvbk5hbWV9YDtcbn1cblxuLyoqXG4gKiBQbHVnaW4gYXR0cmlidXRpb246IHRoZSBzdGVwIG1hbmlmZXN0cyBvZiBldmVyeSBwaXBlbGluZSB3aXRoIGFuIGF0dHJpYnV0YWJsZVxuICogZXZlbnQsIGluIE9ORSByZWFkIHBlciBiYXRjaCwga2V5ZWQgZm9yIGFuIGluLW1lbW9yeSBqb2luLiBOYW1lcyBhcmUgY29tcGFyZWRcbiAqIHBvc3Qtc2NydWIgb24gYm90aCBzaWRlcyAodGhlIG1hbmlmZXN0IHN0b3JlcyB0aGVtIHNjcnViYmVkIHRoZSBzYW1lIHdheSkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRTdGVwUGx1Z2lucyh0eDogQ3J1ZFR4LCBhdHRyaWJ1dGFibGU6IEluZ2VzdEV2ZW50W10pOiBQcm9taXNlPE1hcDxzdHJpbmcsIFN0ZXBQbHVnaW4+PiB7XG4gIGNvbnN0IHBpcGVsaW5lSWRzID0gWy4uLm5ldyBTZXQoYXR0cmlidXRhYmxlLm1hcCgoZSkgPT4gZS5waXBlbGluZUlkKSldO1xuICBpZiAocGlwZWxpbmVJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IE1hcCgpO1xuICBjb25zdCByb3dzID0gYXdhaXQgdHhcbiAgICAuc2VsZWN0KHtcbiAgICAgIHBpcGVsaW5lSWQ6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5waXBlbGluZUlkLFxuICAgICAgb3JnSWQ6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5vcmdJZCxcbiAgICAgIHN0YWdlTmFtZTogc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0LnN0YWdlTmFtZSxcbiAgICAgIGFjdGlvbk5hbWU6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5hY3Rpb25OYW1lLFxuICAgICAgcGx1Z2luUHVibGlzaGVyOiBzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3QucGx1Z2luUHVibGlzaGVyLFxuICAgICAgcGx1Z2luUHVibGlzaGVySWQ6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5wbHVnaW5QdWJsaXNoZXJJZCxcbiAgICAgIHBsdWdpbk5hbWU6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5wbHVnaW5OYW1lLFxuICAgICAgcGx1Z2luVmVyc2lvbjogc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0LnBsdWdpblZlcnNpb24sXG4gICAgfSlcbiAgICAuZnJvbShzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3QpXG4gICAgLndoZXJlKGluQXJyYXkoc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0LnBpcGVsaW5lSWQsIHBpcGVsaW5lSWRzKSk7XG4gIHJldHVybiBuZXcgTWFwKHJvd3MubWFwKChtKSA9PiBbc3RlcEtleShtLnBpcGVsaW5lSWQsIG0uc3RhZ2VOYW1lLCBtLmFjdGlvbk5hbWUpLCBtXSkpO1xufVxuXG4vKipcbiAqIEFsbG93YW5jZSBmb3IgY2xvY2sgc2tldyBiZXR3ZWVuIGFuIEFXUyBldmVudCdzIHNvdXJjZSBjbG9jayBhbmQgb3Vycy4gQSByZWFsXG4gKiBDb2RlUGlwZWxpbmUgZXZlbnQgY2FuIGNhcnJ5IGEgdGltZXN0YW1wIGEgbGl0dGxlIGFoZWFkIG9mIG91ciBgbm93YDsgd2l0aG91dFxuICogc29tZSB0b2xlcmFuY2UgdGhlIHZhbGlkYXRpb24gYmVsb3cgd291bGQgZHJvcCBoZWFsdGh5IGV2ZW50cyBkdXJpbmcgbm9ybWFsXG4gKiBOVFAgZHJpZnQsIHdoaWNoIGlzIGZhciB3b3JzZSB0aGFuIGFkbWl0dGluZyBhIGZldyBzZWNvbmRzIG9mIHNrZXcuXG4gKi9cbmNvbnN0IENMT0NLX1NLRVdfVE9MRVJBTkNFX01TID0gNSAqIDYwICogMTAwMDtcblxuLyoqXG4gKiBXaHkgdGhpcyBldmVudCdzIHRpbWVzdGFtcHMgYXJlIGltcG9zc2libGUsIG9yIG51bGwgd2hlbiB0aGV5IGFyZSB1c2FibGUuXG4gKlxuICogQ2hlY2tlZCBhdCBJTkdFU1Qg4oCUIHRoZSBkdXJhYmxlIGJvdW5kYXJ5IOKAlCByYXRoZXIgdGhhbiBjbGFtcGVkIHdoZW4gdGhlIG1ldHJpY3NcbiAqIGFyZSBjb21wdXRlZC4gQSBuZWdhdGl2ZSBkdXJhdGlvbiBvciBhIGZ1dHVyZSBkZXBsb3kgdXNlZCB0byBiZSBjbGFtcGVkIHRvIDBcbiAqIGRvd25zdHJlYW0sIHdoaWNoIHJlcG9ydGVkIGEgYnJva2VuIGNsb2NrIGFzIGFuIGluc3RhbnQgZGVwbG95IGFuZCBxdWlldGx5XG4gKiBtb3ZlZCBkZXBsb3ltZW50IGZyZXF1ZW5jeSwgY2hhbmdlLWZhaWx1cmUgcmF0ZSBhbmQgbGVhZCB0aW1lIGZvciB0aGUgb3JnLlxuICpcbiAqIE5PVCBjaGVja2VkIGhlcmU6IGNvbW1pdCB0aW1lIHZzIGRlcGxveSBjb21wbGV0aW9uLiBgY29tbWl0X3RpbWVzdGFtcGAgcmlkZXMgdGhlXG4gKiBQSVBFTElORS9zb3VyY2UgZXZlbnQgd2hpbGUgdGhlIGRlcGxveSdzIGBjb21wbGV0ZWRfYXRgIGlzIG9uIGEgc2VwYXJhdGUgU1RBR0VcbiAqIHJvdywgam9pbmVkIGJ5IGBleGVjdXRpb25faWRgIG9ubHkgd2hlbiBET1JBIGlzIHF1ZXJpZWQg4oCUIHNvIG5vIHNpbmdsZSBldmVudFxuICogY2FycmllcyBib3RoLCBhbmQgdGhhdCBvcmRlcmluZyBjYW4gb25seSBiZSBndWFyZGVkIHdoZXJlIHRoZSB0d28gbWVldC5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZEV2ZW50VGltZXMoZXZlbnQ6IEluZ2VzdEV2ZW50LCBub3dNczogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGNlaWxpbmcgPSBub3dNcyArIENMT0NLX1NLRVdfVE9MRVJBTkNFX01TO1xuICBjb25zdCBwYXJzZWQ6IEFycmF5PFtzdHJpbmcsIG51bWJlcl0+ID0gW107XG4gIGZvciAoY29uc3QgZmllbGQgb2YgWydzdGFydGVkQXQnLCAnY29tcGxldGVkQXQnLCAnY29tbWl0VGltZXN0YW1wJ10gYXMgY29uc3QpIHtcbiAgICBjb25zdCByYXcgPSBldmVudFtmaWVsZF07XG4gICAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gbnVsbCkgY29udGludWU7XG4gICAgY29uc3QgbXMgPSBEYXRlLnBhcnNlKFN0cmluZyhyYXcpKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtcykpIHJldHVybiBgJHtmaWVsZH0gaXMgbm90IGEgcGFyc2VhYmxlIHRpbWVzdGFtcGA7XG4gICAgaWYgKG1zID4gY2VpbGluZykgcmV0dXJuIGAke2ZpZWxkfSBpcyBpbiB0aGUgZnV0dXJlYDtcbiAgICBwYXJzZWQucHVzaChbZmllbGQsIG1zXSk7XG4gIH1cbiAgY29uc3Qgc3RhcnRlZCA9IHBhcnNlZC5maW5kKChbZl0pID0+IGYgPT09ICdzdGFydGVkQXQnKT8uWzFdO1xuICBjb25zdCBjb21wbGV0ZWQgPSBwYXJzZWQuZmluZCgoW2ZdKSA9PiBmID09PSAnY29tcGxldGVkQXQnKT8uWzFdO1xuICBpZiAoc3RhcnRlZCAhPT0gdW5kZWZpbmVkICYmIGNvbXBsZXRlZCAhPT0gdW5kZWZpbmVkICYmIGNvbXBsZXRlZCA8IHN0YXJ0ZWQpIHtcbiAgICByZXR1cm4gJ2NvbXBsZXRlZEF0IGlzIGJlZm9yZSBzdGFydGVkQXQnO1xuICB9XG4gIGlmIChldmVudC5kdXJhdGlvbk1zICE9PSB1bmRlZmluZWQgJiYgZXZlbnQuZHVyYXRpb25NcyAhPT0gbnVsbCAmJiBldmVudC5kdXJhdGlvbk1zIDwgMCkge1xuICAgIHJldHVybiAnZHVyYXRpb25NcyBpcyBuZWdhdGl2ZSc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogVGhlIHBlcnNpc3RlZCByb3cgZm9yIG9uZSBpbmdlc3RlZCBldmVudC4gVGhpcyBpcyB0aGUgRFVSQUJMRSBwZXJzaXN0ZW5jZVxuICogYm91bmRhcnk6IGV2ZXJ5IHVzZXIvQVdTLWRlcml2ZWQgZnJlZS1mb3JtIHN0cmluZyBpcyBzY3J1YmJlZCBoZXJlLCBhbmRcbiAqIHRlbmFuY3kgY29tZXMgZnJvbSB0aGUgcGlwZWxpbmUgcmVnaXN0cnksIG5ldmVyIHRoZSBjYWxsZXIncyBjbGFpbWVkIG9yZy5cbiAqL1xuLyoqIFRoZSBzeW50aCByZWZ1c2FsIGNvZGUgdGhlIGV2ZW50cyBMYW1iZGEgYXR0YWNoZWQgKGBkZXRhaWwucGJGYWlsdXJlLmNvZGVgKSwgaWYgYW55LiAqL1xuZnVuY3Rpb24gcGJGYWlsdXJlQ29kZShkZXRhaWw6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGZhaWx1cmUgPSBkZXRhaWw/LnBiRmFpbHVyZTtcbiAgY29uc3QgY29kZSA9IGZhaWx1cmUgJiYgdHlwZW9mIGZhaWx1cmUgPT09ICdvYmplY3QnID8gKGZhaWx1cmUgYXMgeyBjb2RlPzogdW5rbm93biB9KS5jb2RlIDogdW5kZWZpbmVkO1xuICByZXR1cm4gdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIC9eW0EtWl1bQS1aMC05X117MCw2M30kLy50ZXN0KGNvZGUpID8gY29kZSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHRvRXZlbnRSb3coZXZlbnQ6IEluZ2VzdEV2ZW50LCByZWdpc3RyeTogeyBwaXBlbGluZUlkOiBzdHJpbmc7IG9yZ0lkOiBzdHJpbmcgfSwgcGx1Z2luOiBTdGVwUGx1Z2luIHwgdW5kZWZpbmVkLCBrZXlJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUGlwZWxpbmVFdmVudEluc2VydCB7XG4gIGNvbnN0IGRldGFpbCA9IGV2ZW50LnNvdXJjZU1lc3NhZ2VJZCAhPT0gdW5kZWZpbmVkXG4gICAgPyB7IC4uLihldmVudC5kZXRhaWwgPz8ge30pLCBzb3VyY2VNZXNzYWdlSWQ6IGV2ZW50LnNvdXJjZU1lc3NhZ2VJZCB9XG4gICAgOiBldmVudC5kZXRhaWw7XG4gIHJldHVybiB7XG4gICAgLy8gcmVnaXN0cnkucGlwZWxpbmVJZCA9PT0gZXZlbnQucGlwZWxpbmVJZDsgdGhlIHJlZ2lzdHJ5J3MgaXMgYWx3YXlzIGEgcm93XG4gICAgLy8gdGhhdCBleGlzdHMgKEZLKSBhbmQgaXRzIG9yZ0lkIGlzIHRoZSB0cnVzdGVkIHRlbmFudC5cbiAgICBwaXBlbGluZUlkOiByZWdpc3RyeS5waXBlbGluZUlkLFxuICAgIG9yZ0lkOiByZWdpc3RyeS5vcmdJZCxcbiAgICBldmVudFNvdXJjZTogZXZlbnQuZXZlbnRTb3VyY2UsXG4gICAgZXZlbnRUeXBlOiBldmVudC5ldmVudFR5cGUsXG4gICAgc3RhdHVzOiBldmVudC5zdGF0dXMsXG4gICAgLy8gQW4gQVdTLUFTU0lHTkVEIFVVSUQsIG5vdCBmcmVlLWZvcm0gdGV4dDogaXQgY2FuJ3QgY2FycnkgYW4gYWNjb3VudCBpZCxcbiAgICAvLyBhbmQgc2NydWJiaW5nIGEgMTItZGlnaXQgcnVuIGluc2lkZSBpdCB3b3VsZCBjb3JydXB0IHRoZSBjb3JyZWxhdGlvbiBrZXkuXG4gICAgZXhlY3V0aW9uSWQ6IGV2ZW50LmV4ZWN1dGlvbklkLFxuICAgIC8vIFVTRVItQVVUSE9SRUQgcGlwZWxpbmUtc3RydWN0dXJlIG5hbWVzIOKAlCBzYW1lIHVudHJ1c3RlZCBvcmlnaW4gYXNcbiAgICAvLyBlcnJvck1lc3NhZ2UsIHNvIHNjcnViYmVkIChhIHN0YWdlIG5hbWVkIHdpdGggYW4gQVJOIG11c3Qgbm90IHBlcnNpc3QpLlxuICAgIHN0YWdlTmFtZTogc2NydWJPcHRpb25hbChldmVudC5zdGFnZU5hbWUpLFxuICAgIGFjdGlvbk5hbWU6IHNjcnViT3B0aW9uYWwoZXZlbnQuYWN0aW9uTmFtZSksXG4gICAgLy8gSEFSRCBDT05TVFJBSU5UOiBhbiBBV1MgYWNjb3VudCBpZCBtdXN0IE5FVkVSIGJlIHBlcnNpc3RlZC4gRmFpbHVyZSBkZXRhaWxcbiAgICAvLyBhbmQgbWVzc2FnZXMgcm91dGluZWx5IGNhcnJ5IEFSTnMgYW5kIGJhcmUgMTItZGlnaXQgYWNjb3VudCBpZHMuXG4gICAgZXJyb3JNZXNzYWdlOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmVycm9yTWVzc2FnZSksXG4gICAgc3RhcnRlZEF0OiBldmVudC5zdGFydGVkQXQgPyBuZXcgRGF0ZShldmVudC5zdGFydGVkQXQpIDogdW5kZWZpbmVkLFxuICAgIGNvbXBsZXRlZEF0OiBldmVudC5jb21wbGV0ZWRBdCA/IG5ldyBEYXRlKGV2ZW50LmNvbXBsZXRlZEF0KSA6IHVuZGVmaW5lZCxcbiAgICBkdXJhdGlvbk1zOiBldmVudC5kdXJhdGlvbk1zLFxuICAgIC8vIERlcGxveSBhdHRyaWJ1dGlvbiDigJQgc2NydWJiZWQgbGlrZSB0aGUgb3RoZXIgZnJlZS1mb3JtIHN0cmluZ3MuXG4gICAgY29tbWl0U2hhOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmNvbW1pdFNoYSksXG4gICAgY29tbWl0UmVmOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmNvbW1pdFJlZiksXG4gICAgZW52aXJvbm1lbnQ6IHNjcnViT3B0aW9uYWwoZXZlbnQuZW52aXJvbm1lbnQpLFxuICAgIC8vIE1lYXN1cmVkIGxlYWQgdGltZTogdGhlIG9sZGVzdCB1bnNoaXBwZWQgY29tbWl0J3MgdGltZSArIHRoZSBjb3VudC4gQW5cbiAgICAvLyBTQ00tZGVyaXZlZCBpbnN0YW50IGFuZCBhIHBsYWluIGludGVnZXIg4oCUIG5vdGhpbmcgdG8gc2NydWIuXG4gICAgY29tbWl0VGltZXN0YW1wOiBldmVudC5jb21taXRUaW1lc3RhbXAgPyBuZXcgRGF0ZShldmVudC5jb21taXRUaW1lc3RhbXApIDogdW5kZWZpbmVkLFxuICAgIGNvbW1pdENvdW50OiBldmVudC5jb21taXRDb3VudCxcbiAgICAvLyBOVUxMIGZvciBub24tcGx1Z2luIGFjdGlvbnMgYW5kIGZvciBwaXBlbGluZXMgZGVwbG95ZWQgd2l0aG91dCBhIG1hbmlmZXN0LlxuICAgIHBsdWdpblB1Ymxpc2hlcjogcGx1Z2luPy5wbHVnaW5QdWJsaXNoZXIgPz8gbnVsbCxcbiAgICBwbHVnaW5QdWJsaXNoZXJJZDogcGx1Z2luPy5wbHVnaW5QdWJsaXNoZXJJZCA/PyBudWxsLFxuICAgIHBsdWdpbk5hbWU6IHBsdWdpbj8ucGx1Z2luTmFtZSA/PyBudWxsLFxuICAgIHBsdWdpblZlcnNpb246IHBsdWdpbj8ucGx1Z2luVmVyc2lvbiA/PyBudWxsLFxuICAgIC8vIFdIQVQgS0lORCBvZiB0aGluZyBicm9rZSwgY2xhc3NpZmllZCBoZXJlIHJhdGhlciB0aGFuIGF0IHJlYWQgdGltZTogdGhlXG4gICAgLy8gZXJyb3IgdGV4dCBpcyBzY3J1YmJlZCBhYm92ZSBhbmQgZXZlbnR1YWxseSBzd2VwdCBieSByZXRlbnRpb24sIHNvIGFcbiAgICAvLyBjYXRlZ29yeSBkZXJpdmVkIGxhdGVyIHdvdWxkIGhhdmUgbm90aGluZyBsZWZ0IHRvIHJlYWQuIE5VTEwgZm9yIGFueXRoaW5nXG4gICAgLy8gdGhhdCBpcyBub3QgYSBmYWlsdXJlLCBzbyBpdHMgcHJlc2VuY2UgYWx3YXlzIG1lYW5zIFwidGhpcyBicm9rZVwiLlxuICAgIGZhaWx1cmVDYXRlZ29yeTogY2xhc3NpZnlGYWlsdXJlKHtcbiAgICAgIHN0YXR1czogZXZlbnQuc3RhdHVzLFxuICAgICAgZXJyb3JNZXNzYWdlOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmVycm9yTWVzc2FnZSksXG4gICAgICBhY3Rpb25OYW1lOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmFjdGlvbk5hbWUpLFxuICAgICAgc3RhZ2VOYW1lOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LnN0YWdlTmFtZSksXG4gICAgICBmYWlsdXJlQ29kZTogcGJGYWlsdXJlQ29kZShldmVudC5kZXRhaWwpLFxuICAgIH0pLFxuICAgIC8vIFByb3ZlbmFuY2UuIEJvdGggYXJlIG9wYXF1ZSBpZHMg4oCUIGFuIEFXUy1hc3NpZ25lZCBldmVudCBVVUlEIGFuZCBvdXIgb3duXG4gICAgLy8ga2V5IGlkIOKAlCBzbyBuZWl0aGVyIGNhbiBjYXJyeSBhbiBhY2NvdW50IGlkIGFuZCBuZWl0aGVyIGlzIHNjcnViYmVkXG4gICAgLy8gKHNjcnViYmluZyBhIGRpZ2l0IHJ1biBpbnNpZGUgb25lIHdvdWxkIGNvcnJ1cHQgdGhlIGNvcnJlbGF0aW9uIGtleSkuXG4gICAgc291cmNlRXZlbnRJZDogZXZlbnQuc291cmNlRXZlbnRJZCxcbiAgICBpbmdlc3RLZXlJZDoga2V5SWQsXG4gICAgZGV0YWlsOiBkZXRhaWwgIT09IHVuZGVmaW5lZCA/IHNjcnViQXdzSWRlbnRpZmllcnMoZGV0YWlsKSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBGYW4gdGVybWluYWwgU1RBR0Ugb3V0Y29tZXMgYW5kIHBlci1BQ1RJT04gY29tcHV0ZSBjb25zdW1wdGlvbiBpbnRvIHRoZVxuICogcm91dGUncyBtZXRyaWMgaG9vayAocGlwZWxpbmUtZGF0YSBjYW4ndCBpbXBvcnQgYXBpLXNlcnZlcidzIHJlZ2lzdHJ5KSBhZnRlclxuICogdGhlIGluc2VydCBjb21taXRzLlxuICpcbiAqIERyaXZlbiBvZmYgdGhlIElOU0VSVEVEIHJvd3MsIHNvIGEgcmUtZGVsaXZlcmVkIGV2ZW50IHRoZSBkZWR1cCBpbmRleFxuICogc3dhbGxvd2VkIGlzIG5ldmVyIGNvdW50ZWQgdHdpY2UuIFRoYXQgcHJvcGVydHkgaXMgbG9hZC1iZWFyaW5nIGZvciB0aGVcbiAqIGNvbXB1dGUgc2VyaWVzIGluIGEgd2F5IGl0IHdhcyBub3QgZm9yIHRoZSBzdGFnZSBvbmU6IGEgZHVwbGljYXRlZCBzdGFnZVxuICogb3V0Y29tZSBkaXN0b3J0cyBhIHJhdGUsIHdoZXJlYXMgYSBkdXBsaWNhdGVkIHZDUFUtbWludXRlIGZpZ3VyZSBpcyBhXG4gKiBkb3VibGUtY2hhcmdlIHdhaXRpbmcgZm9yIHRoZSBkYXkgdGhlIGNoYXJnZSBpcyBzd2l0Y2hlZCBvbi5cbiAqXG4gKiBBIG5vbi1udWxsIGVudmlyb25tZW50IG1hcmtzIGEgZGVwbG95LlxuICovXG5mdW5jdGlvbiBlbWl0SW5nZXN0TWV0cmljcyhcbiAgcm93czogUmVhZG9ubHlBcnJheTx7XG4gICAgb3JnSWQ6IHN0cmluZztcbiAgICBwaXBlbGluZUlkOiBzdHJpbmcgfCBudWxsO1xuICAgIGV2ZW50VHlwZTogc3RyaW5nO1xuICAgIHN0YXR1czogc3RyaW5nO1xuICAgIHN0YWdlTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBlbnZpcm9ubWVudDogc3RyaW5nIHwgbnVsbDtcbiAgICBkdXJhdGlvbk1zPzogbnVtYmVyIHwgbnVsbDtcbiAgICBkZXRhaWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw7XG4gIH0+LFxuICBvbk1ldHJpYzogKG06IEluZ2VzdE1ldHJpYykgPT4gdm9pZCxcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93cykge1xuICAgIGlmICghci5waXBlbGluZUlkKSBjb250aW51ZTtcblxuICAgIC8vIENvbXB1dGUgY29uc3VtcHRpb246IGV2ZXJ5IFRFUk1JTkFMIGFjdGlvbiwgbWVhc3VyYWJsZSBvciBub3QuIFRoZVxuICAgIC8vIHVubWVhc3VyYWJsZSBvbmVzIGFyZSB0aGUgcG9pbnQg4oCUIHRoZXkgYXJlIHdoYXQgdGhlIGNvdmVyYWdlIHJhdGlvIGNvdW50cy5cbiAgICBpZiAoci5ldmVudFR5cGUgPT09ICdBQ1RJT04nICYmIFRFUk1JTkFMX0FDVElPTl9TVEFURVMuaW5jbHVkZXMoci5zdGF0dXMpKSB7XG4gICAgICBjb25zdCBjb21wdXRlVHlwZSA9IG5vcm1hbGl6ZUNvbXB1dGVUeXBlKFxuICAgICAgICB0eXBlb2Ygci5kZXRhaWw/LmNvbXB1dGVUeXBlID09PSAnc3RyaW5nJyA/IHIuZGV0YWlsLmNvbXB1dGVUeXBlIDogbnVsbCxcbiAgICAgICk7XG4gICAgICBjb25zdCBkdXJhdGlvbk1zID0gci5kdXJhdGlvbk1zID8/IG51bGw7XG4gICAgICBvbk1ldHJpYyh7XG4gICAgICAgIGtpbmQ6ICdjb21wdXRlJyxcbiAgICAgICAgcGlwZWxpbmVJZDogci5waXBlbGluZUlkLFxuICAgICAgICBvcmdJZDogci5vcmdJZCxcbiAgICAgICAgY29tcHV0ZVR5cGUsXG4gICAgICAgIGR1cmF0aW9uTXMsXG4gICAgICAgIGNyZWRpdHM6IGNvbXB1dGVDcmVkaXRzRm9yKGR1cmF0aW9uTXMsIGNvbXB1dGVUeXBlKSxcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHIuZXZlbnRUeXBlICE9PSAnU1RBR0UnIHx8IChyLnN0YXR1cyAhPT0gJ1NVQ0NFRURFRCcgJiYgci5zdGF0dXMgIT09ICdGQUlMRUQnKSkgY29udGludWU7XG4gICAgb25NZXRyaWMoe1xuICAgICAga2luZDogJ3N0YWdlJyxcbiAgICAgIHBpcGVsaW5lSWQ6IHIucGlwZWxpbmVJZCxcbiAgICAgIG9yZ0lkOiByLm9yZ0lkLFxuICAgICAgc3RhZ2U6IHIuc3RhZ2VOYW1lID8/ICcnLFxuICAgICAgZW52aXJvbm1lbnQ6IHIuZW52aXJvbm1lbnQgPz8gbnVsbCxcbiAgICAgIHJlc3VsdDogci5zdGF0dXMgPT09ICdTVUNDRUVERUQnID8gJ3N1Y2NlZWRlZCcgOiAnZmFpbGVkJyxcbiAgICB9KTtcbiAgfVxufVxuXG4vKiogQWN0aW9uIHN0YXRlcyB0aGF0IG1lYW4gdGhlIGFjdGlvbiBpcyBvdmVyIGFuZCBpdHMgY29uc3VtcHRpb24gaXMgZmluYWwuICovXG5jb25zdCBURVJNSU5BTF9BQ1RJT05fU1RBVEVTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnU1VDQ0VFREVEJywgJ0ZBSUxFRCcsICdTVE9QUEVEJ107XG5cbi8qKlxuICogUmVzb2x2ZSBpbmNvbWluZyBldmVudHMgYWdhaW5zdCB0aGUgcGlwZWxpbmUgcmVnaXN0cnksIGJhdGNoLWluc2VydCB0aGVcbiAqIG1hdGNoZWQgb25lcywgYW5kIGludmFsaWRhdGUgcmVwb3J0aW5nIGNhY2hlcyBmb3IgYWZmZWN0ZWQgb3Jncy5cbiAqIEV2ZW50cyBmb3IgdW5yZWdpc3RlcmVkIHBpcGVsaW5lIGlkcyBhcmUgZHJvcHBlZCAoYW5kIGxvZ2dlZCBhdCBXQVJOXG4gKiB3aXRoIHNhbXBsZSBpZHMgc28gYW4gb3BlcmF0b3IgY2FuIHNlZSB3aGVuIEV2ZW50QnJpZGdlIGlzIGRlbGl2ZXJpbmdcbiAqIGV2ZW50cyBmb3IgcGlwZWxpbmVzIHRoYXQgaGF2ZW4ndCBjYWxsZWQgUE9TVCAvcGlwZWxpbmVzL3JlZ2lzdHJ5IHlldCkuXG4gKlxuICogUmV0dXJucyBjb3VudHMgKyBhIHNhbXBsZSBvZiB1bnJlZ2lzdGVyZWQgcGlwZWxpbmUgaWRzIGZvciBvYnNlcnZhYmlsaXR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5nZXN0RXZlbnRzKFxuICBldmVudHM6IEluZ2VzdEV2ZW50W10sXG4gIG9uTWV0cmljPzogKG06IEluZ2VzdE1ldHJpYykgPT4gdm9pZCxcbiAgY2FsbGVyPzogSW5nZXN0Q2FsbGVyLFxuKTogUHJvbWlzZTxJbmdlc3RSZXN1bHQ+IHtcbiAgLy8gVEVOQU5DWS4gQW4gZXZlbnQncyBvcmcgY29tZXMgZnJvbSB0aGUgcGlwZWxpbmUgUkVHSVNUUlksIG5vdCB0aGUgdG9rZW4sIHNvXG4gIC8vIHRoZSBzY29wZSBjaGVjayBhbG9uZSBsZXQgYW55IGByZXBvcnRpbmc6aW5nZXN0YCBob2xkZXIgcG9zdCBldmVudHMgZm9yXG4gIC8vIGFub3RoZXIgb3JnJ3MgcGlwZWxpbmUgaWQgYW5kIGhhdmUgdGhlbSBhdHRyaWJ1dGVkIHRoZXJlLiBgY2FsbGVyYCBjYXJyaWVzXG4gIC8vIHRoZSBvcmcgaWRzIHRoaXMgdG9rZW4gbWF5IHdyaXRlIGZvcjsgYW55dGhpbmcgZWxzZSBpcyBkcm9wcGVkIGJlbG93LlxuICAvL1xuICAvLyBgY2FsbGVyYCBpcyBvcHRpb25hbCBvbmx5IHNvIGluLXByb2Nlc3MgY2FsbGVycyB0aGF0IGFscmVhZHkgcnVuXG4gIC8vIGNyb3NzLXRlbmFudCAodGVzdHMsIGJhY2tmaWxscykga2VlcCB3b3JraW5nIOKAlCBhbiBBQlNFTlQgY2FsbGVyIG1lYW5zIFwibm9cbiAgLy8gcmVzdHJpY3Rpb25cIiwgYW5kIHRoZSByb3V0ZSBhbHdheXMgc3VwcGxpZXMgb25lLiBBIGNhbGxlciB3aXRoIGFuIEVNUFRZXG4gIC8vIGFsbG93LWxpc3QgYW5kIG5vIGNyb3NzVGVuYW50IGZsYWcgdGhlcmVmb3JlIGRyb3BzIGV2ZXJ5dGhpbmcsIHdoaWNoIGlzIHRoZVxuICAvLyByaWdodCBhbnN3ZXIgd2hlbiB0aGUgcm91dGUgY291bGQgbm90IGVzdGFibGlzaCB3aG8gaXMgd3JpdGluZy5cbiAgY29uc3QgdW5yZXN0cmljdGVkID0gY2FsbGVyID09PSB1bmRlZmluZWQgfHwgY2FsbGVyLmNyb3NzVGVuYW50ID09PSB0cnVlO1xuICBjb25zdCBhbGxvd2VkID0gbmV3IFNldChjYWxsZXI/LmFsbG93ZWRPcmdJZHMgPz8gW10pO1xuICAvLyBNdWx0aS1vcmcgYmF0Y2ggaW5zZXJ0OiB0aGUgY2FsbGVyIHJlc29sdmVzIHRvIG11bHRpcGxlIG9yZ3MgdmlhIHRoZVxuICAvLyBwaXBlbGluZS1yZWdpc3RyeSBsb29rdXAgYmVsb3csIHNvIHRoZSByb3V0ZSBsYXllciBNVVNUIGVzdGFibGlzaCBhXG4gIC8vIGBydW5XaXRoVGVuYW50Q29udGV4dCh7IGlzU3VwZXJBZG1pbjogdHJ1ZSB9LCAuLi4pYCBzY29wZSBiZWZvcmUgY2FsbGluZ1xuICAvLyB0aGlzIGZ1bmN0aW9uLiBVbmRlciBGT1JDRSdkIFJMUywgYSBzaW5nbGUgdHggd2l0aCBgYXBwLm9yZ19pZCA9IDxvbmVcbiAgLy8gb3JnPmAgY291bGQgb25seSB3cml0ZSBldmVudHMgZm9yIHRoYXQgb3JnOyBieXBhc3MgdmlhIHN5c2FkbWluIGlzXG4gIC8vIHRoZSByaWdodCBnYXRlIGZvciB0aGlzIHNlcnZlci1pbnRlcm5hbCBjcm9zcy10ZW5hbnQgZW5kcG9pbnQuIFNlZVxuICAvLyBhcGkvcmVwb3J0aW5nL3NyYy9yb3V0ZXMvZXZlbnQtaW5nZXN0LnRzIGZvciB0aGUgd3JhcHBlci5cbiAgLy8gQ2FjaGVzIGFyZSBpbnZhbGlkYXRlZCBBRlRFUiB0aGUgdHggcmVzb2x2ZXM6IGRvaW5nIGl0IGluc2lkZSBoZWxkIHRoZSBwZ1xuICAvLyBsb2NrcyBvcGVuIGFjcm9zcyB1bnJlbGF0ZWQgY2FjaGUgcm91bmQtdHJpcHMuIFRoZSBUVEwgaXMgMi01IG1pbiwgc28gYVxuICAvLyBmaXJlLWFuZC1mb3JnZXQgcG9zdC1jb21taXQgaW52YWxpZGF0aW9uIGlzIGFuIGFjY2VwdGFibGUgdHJhZGUuXG4gIGNvbnN0IHsgaW5zZXJ0ZWQsIHNraXBwZWQsIHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzLCBhZmZlY3RlZE9yZ3MsIGRyb3BwZWRGb3JlaWduT3JnLCBkcm9wcGVkSW52YWxpZFRpbWUsIGZvcmVpZ25QaXBlbGluZUlkcywgaW5zZXJ0ZWRSb3dzIH0gPSBhd2FpdCB3aXRoVGVuYW50VHgoYXN5bmMgKHR4KSA9PiB7XG4gICAgLy8gQmF0Y2gtcmVzb2x2ZSBhbGwgdW5pcXVlIHBpcGVsaW5lIGlkcyBpbiBvbmUgcXVlcnlcbiAgICBjb25zdCB1bmlxdWVJZHMgPSBbLi4ubmV3IFNldChldmVudHMubWFwKGUgPT4gZS5waXBlbGluZUlkKSldO1xuICAgIGNvbnN0IHJlZ2lzdHJ5Um93cyA9IGF3YWl0IHR4XG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgcGlwZWxpbmVJZDogc2NoZW1hLnBpcGVsaW5lUmVnaXN0cnkucGlwZWxpbmVJZCxcbiAgICAgICAgb3JnSWQ6IHNjaGVtYS5waXBlbGluZVJlZ2lzdHJ5Lm9yZ0lkLFxuICAgICAgfSlcbiAgICAgIC5mcm9tKHNjaGVtYS5waXBlbGluZVJlZ2lzdHJ5KVxuICAgICAgLndoZXJlKGluQXJyYXkoc2NoZW1hLnBpcGVsaW5lUmVnaXN0cnkucGlwZWxpbmVJZCwgdW5pcXVlSWRzKSk7XG5cbiAgICBjb25zdCBpZE1hcCA9IG5ldyBNYXAocmVnaXN0cnlSb3dzLm1hcChyID0+IFtyLnBpcGVsaW5lSWQsIHJdKSk7XG4gICAgY29uc3Qgc3RlcFBsdWdpbnMgPSBhd2FpdCBsb2FkU3RlcFBsdWdpbnModHgsIGV2ZW50cy5maWx0ZXIoKGUpID0+IGlzQXR0cmlidXRhYmxlKGUpICYmIGlkTWFwLmhhcyhlLnBpcGVsaW5lSWQpKSk7XG5cbiAgICAvLyBCdWlsZCBpbnNlcnQgYmF0Y2ggKHNraXAgZXZlbnRzIHdob3NlIHBpcGVsaW5lIGlzbid0IHJlZ2lzdGVyZWQpXG4gICAgY29uc3Qgcm93czogUGlwZWxpbmVFdmVudEluc2VydFtdID0gW107XG4gICAgbGV0IHNraXBwZWRMb2NhbCA9IDA7XG4gICAgbGV0IGZvcmVpZ25Mb2NhbCA9IDA7XG4gICAgbGV0IGludmFsaWRUaW1lTG9jYWwgPSAwO1xuICAgIGNvbnN0IGludmFsaWRUaW1lUmVhc29ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGZvcmVpZ25PcmdJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBmb3JlaWduUGlwZWxpbmVJZHNMb2NhbCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHVucmVnaXN0ZXJlZExvY2FsOiBzdHJpbmdbXSA9IFtdO1xuICAgIC8vIE9uZSBgbm93YCBmb3IgdGhlIHdob2xlIGJhdGNoOiBwZXItZXZlbnQgY2xvY2tzIHdvdWxkIGxldCBhbiBldmVudCBwYXNzIG9yXG4gICAgLy8gZmFpbCBkZXBlbmRpbmcgb24gd2hlcmUgaXQgc2F0IGluIHRoZSBsb29wLlxuICAgIGNvbnN0IG5vd01zID0gRGF0ZS5ub3coKTtcblxuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IGlkTWFwLmdldChldmVudC5waXBlbGluZUlkKTtcbiAgICAgIGlmICghcmVnaXN0cnkpIHtcbiAgICAgICAgc2tpcHBlZExvY2FsKys7XG4gICAgICAgIHVucmVnaXN0ZXJlZExvY2FsLnB1c2goZXZlbnQucGlwZWxpbmVJZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhlIHBpcGVsaW5lIHJlc29sdmVzIHRvIGFuIG9yZyB0aGlzIGNhbGxlciBtYXkgbm90IHdyaXRlIGZvci4gQ291bnRlZFxuICAgICAgLy8gc2VwYXJhdGVseSBmcm9tIGBza2lwcGVkYCAoYW4gdW5yZWdpc3RlcmVkIGlkIGlzIGEgcHJvZHVjZXIgcnVubmluZ1xuICAgICAgLy8gYWhlYWQgb2YgcmVnaXN0cmF0aW9uOyB0aGlzIGlzIGEgdGVuYW5jeSByZWZ1c2FsKSBhbmQgbmV2ZXIgaW5zZXJ0ZWQuXG4gICAgICBpZiAoIXVucmVzdHJpY3RlZCAmJiAhYWxsb3dlZC5oYXMocmVnaXN0cnkub3JnSWQpKSB7XG4gICAgICAgIGZvcmVpZ25Mb2NhbCsrO1xuICAgICAgICBmb3JlaWduT3JnSWRzLmFkZChyZWdpc3RyeS5vcmdJZCk7XG4gICAgICAgIGZvcmVpZ25QaXBlbGluZUlkc0xvY2FsLmFkZChldmVudC5waXBlbGluZUlkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBJbXBvc3NpYmxlIHRpbWVzdGFtcHMgYXJlIHJlZnVzZWQgYXQgdGhlIGJvdW5kYXJ5LCBzbyBubyBkb3duc3RyZWFtXG4gICAgICAvLyBtZXRyaWMgaGFzIHRvIGNsYW1wIGEgbmVnYXRpdmUgZ2FwIGFuZCBjYWxsIGl0IHplcm8uXG4gICAgICBjb25zdCBiYWRUaW1lID0gaW52YWxpZEV2ZW50VGltZXMoZXZlbnQsIG5vd01zKTtcbiAgICAgIGlmIChiYWRUaW1lKSB7XG4gICAgICAgIGludmFsaWRUaW1lTG9jYWwrKztcbiAgICAgICAgaW52YWxpZFRpbWVSZWFzb25zLmFkZChiYWRUaW1lKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFnZU5hbWUgPSBzY3J1Yk9wdGlvbmFsKGV2ZW50LnN0YWdlTmFtZSk7XG4gICAgICBjb25zdCBhY3Rpb25OYW1lID0gc2NydWJPcHRpb25hbChldmVudC5hY3Rpb25OYW1lKTtcbiAgICAgIGNvbnN0IHN0ZXAgPSBpc0F0dHJpYnV0YWJsZShldmVudCkgJiYgc3RhZ2VOYW1lICYmIGFjdGlvbk5hbWVcbiAgICAgICAgPyBzdGVwUGx1Z2lucy5nZXQoc3RlcEtleShyZWdpc3RyeS5waXBlbGluZUlkLCBzdGFnZU5hbWUsIGFjdGlvbk5hbWUpKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIC8vIFNhbWUtb3JnIGd1YXJkOiBhIG1hbmlmZXN0IHJvdyBpcyBvbmx5IGV2ZXIgd3JpdHRlbiBieSB0aGUgb3JnIHRoYXRcbiAgICAgIC8vIG93bnMgdGhlIHBpcGVsaW5lLCBidXQgdGhlIGluZ2VzdCBydW5zIGNyb3NzLXRlbmFudCwgc28gZG9uJ3QgbGVhbiBvbiBpdC5cbiAgICAgIHJvd3MucHVzaCh0b0V2ZW50Um93KGV2ZW50LCByZWdpc3RyeSwgc3RlcCAmJiBzdGVwLm9yZ0lkID09PSByZWdpc3RyeS5vcmdJZCA/IHN0ZXAgOiB1bmRlZmluZWQsIGNhbGxlcj8ua2V5SWQpKTtcbiAgICB9XG5cbiAgICAvLyBTUVMgaXMgYXQtbGVhc3Qtb25jZSwgc28gRXZlbnRCcmlkZ2UgY2FuIGRlbGl2ZXIgdGhlIHNhbWUgc3RhdGUtY2hhbmdlXG4gICAgLy8gdHdpY2UuIGBvbkNvbmZsaWN0RG9Ob3RoaW5nYCArIHRoZSBwYXJ0aWFsIHVuaXF1ZSBpbmRleGVzIG9uXG4gICAgLy8gKHBpcGVsaW5lX2lkLCBleGVjdXRpb25faWQsIGV2ZW50X3R5cGUsIHN0YXR1cywgc3RhZ2VfbmFtZSwgYWN0aW9uX25hbWUpXG4gICAgLy8gYW5kIG9uIHNvdXJjZV9ldmVudF9pZCAodGhlIEV2ZW50QnJpZGdlIGlkLCB3aGVuIHByZXNlbnQpIG1ha2VcbiAgICAvLyByZS1kZWxpdmVyeSBpZGVtcG90ZW50LiBgcmV0dXJuaW5nYCBnaXZlcyB0aGUgUkVBTCBpbnNlcnRlZCBzZXQgc29cbiAgICAvLyBjb3VudHMsIG1ldHJpY3MgYW5kIGNhY2hlIGludmFsaWRhdGlvbiBhbGwgaWdub3JlIGR1cGxpY2F0ZXMuXG4gICAgY29uc3QgbGFuZGVkID0gcm93cy5sZW5ndGggPiAwXG4gICAgICA/IGF3YWl0IHR4Lmluc2VydChzY2hlbWEucGlwZWxpbmVFdmVudCkudmFsdWVzKHJvd3MpXG4gICAgICAgIC5vbkNvbmZsaWN0RG9Ob3RoaW5nKClcbiAgICAgICAgLnJldHVybmluZyh7XG4gICAgICAgICAgb3JnSWQ6IHNjaGVtYS5waXBlbGluZUV2ZW50Lm9yZ0lkLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LnBpcGVsaW5lSWQsXG4gICAgICAgICAgZXZlbnRUeXBlOiBzY2hlbWEucGlwZWxpbmVFdmVudC5ldmVudFR5cGUsXG4gICAgICAgICAgc3RhdHVzOiBzY2hlbWEucGlwZWxpbmVFdmVudC5zdGF0dXMsXG4gICAgICAgICAgc3RhZ2VOYW1lOiBzY2hlbWEucGlwZWxpbmVFdmVudC5zdGFnZU5hbWUsXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LmVudmlyb25tZW50LFxuICAgICAgICAgIC8vIEZvciB0aGUgcGVyLWRlcGxveSByb2xsdXAgYmVsb3c6IGV2ZXJ5dGhpbmcgYGRvcmFfZGVwbG95bWVudHNgIG5lZWRzLFxuICAgICAgICAgIC8vIHRha2VuIGZyb20gdGhlIHJvd3MgdGhhdCBBQ1RVQUxMWSBsYW5kZWQgc28gYSByZS1kZWxpdmVyeSBjYW5ub3RcbiAgICAgICAgICAvLyBwcm9kdWNlIGEgc2Vjb25kIGRlcGxveS5cbiAgICAgICAgICBleGVjdXRpb25JZDogc2NoZW1hLnBpcGVsaW5lRXZlbnQuZXhlY3V0aW9uSWQsXG4gICAgICAgICAgY29tbWl0U2hhOiBzY2hlbWEucGlwZWxpbmVFdmVudC5jb21taXRTaGEsXG4gICAgICAgICAgY29tbWl0VGltZXN0YW1wOiBzY2hlbWEucGlwZWxpbmVFdmVudC5jb21taXRUaW1lc3RhbXAsXG4gICAgICAgICAgY29tbWl0Q291bnQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LmNvbW1pdENvdW50LFxuICAgICAgICAgIGNvbXBsZXRlZEF0OiBzY2hlbWEucGlwZWxpbmVFdmVudC5jb21wbGV0ZWRBdCxcbiAgICAgICAgICBzdGFydGVkQXQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LnN0YXJ0ZWRBdCxcbiAgICAgICAgICBjcmVhdGVkQXQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LmNyZWF0ZWRBdCxcbiAgICAgICAgICBkZXRhaWw6IHNjaGVtYS5waXBlbGluZUV2ZW50LmRldGFpbCxcbiAgICAgICAgICBzb3VyY2VFdmVudElkOiBzY2hlbWEucGlwZWxpbmVFdmVudC5zb3VyY2VFdmVudElkLFxuICAgICAgICB9KVxuICAgICAgOiBbXTtcblxuICAgIC8vIExvZyBpbnNpZGUgdGhlIHR4IHNjb3BlIHdoaWxlIHRoZSBvcmcgc2V0IGlzIGluIGhhbmQuIFdBUk4sIG5vdCBlcnJvcjpcbiAgICAvLyBhIG1pc3JvdXRlZCBwcm9kdWNlciBpcyB0aGUgY29tbW9uIGNhdXNlLCBidXQgdGhlIHNhbWUgbGluZSBpcyB0aGUgb25seVxuICAgIC8vIHNpZ25hbCBvZiBhbiBpbmplY3Rpb24gYXR0ZW1wdCwgc28gaXQgbmFtZXMgdGhlIG9yZ3MgaXQgcmVmdXNlZC5cbiAgICBpZiAoZm9yZWlnbkxvY2FsID4gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ0Ryb3BwZWQgaW5nZXN0IGV2ZW50cyBmb3Igb3JncyB0aGUgY2FsbGVyIG1heSBub3Qgd3JpdGUgZm9yJywge1xuICAgICAgICBkcm9wcGVkOiBmb3JlaWduTG9jYWwsXG4gICAgICAgIGZvcmVpZ25PcmdJZHM6IFsuLi5mb3JlaWduT3JnSWRzXSxcbiAgICAgICAgYWxsb3dlZE9yZ0lkczogWy4uLmFsbG93ZWRdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGludmFsaWRUaW1lTG9jYWwgPiAwKSB7XG4gICAgICBsb2dnZXIud2FybignRHJvcHBlZCBpbmdlc3QgZXZlbnRzIHdpdGggaW1wb3NzaWJsZSB0aW1lc3RhbXBzJywge1xuICAgICAgICBkcm9wcGVkOiBpbnZhbGlkVGltZUxvY2FsLFxuICAgICAgICByZWFzb25zOiBbLi4uaW52YWxpZFRpbWVSZWFzb25zXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbnNlcnRlZDogbGFuZGVkLmxlbmd0aCxcbiAgICAgIHNraXBwZWQ6IHNraXBwZWRMb2NhbCxcbiAgICAgIHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzOiB1bnJlZ2lzdGVyZWRMb2NhbCxcbiAgICAgIGFmZmVjdGVkT3JnczogWy4uLm5ldyBTZXQobGFuZGVkLm1hcChyID0+IHIub3JnSWQpKV0sXG4gICAgICBkcm9wcGVkRm9yZWlnbk9yZzogZm9yZWlnbkxvY2FsLFxuICAgICAgZHJvcHBlZEludmFsaWRUaW1lOiBpbnZhbGlkVGltZUxvY2FsLFxuICAgICAgZm9yZWlnblBpcGVsaW5lSWRzOiBbLi4uZm9yZWlnblBpcGVsaW5lSWRzTG9jYWxdLFxuICAgICAgaW5zZXJ0ZWRSb3dzOiBsYW5kZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgaWYgKG9uTWV0cmljKSBlbWl0SW5nZXN0TWV0cmljcyhpbnNlcnRlZFJvd3MsIG9uTWV0cmljKTtcblxuICAvLyBQZXItZGVwbG95IHJvbGx1cC4gQUZURVIgdGhlIGV2ZW50cyBjb21taXQgYW5kIG91dHNpZGUgdGhlaXIgdHJhbnNhY3Rpb246IHRoZVxuICAvLyBldmVudHMgYXJlIHRoZSBkdXJhYmxlIHJlY29yZCBhbmQgYGRvcmFfZGVwbG95bWVudHNgIGlzIGRlcml2ZWQgZnJvbSB0aGVtLCBzb1xuICAvLyBhIHJvbGx1cCBmYWlsdXJlIG11c3Qgbm90IHJvbGwgYmFjayBhbiBpbmdlc3QgdGhhdCBzdWNjZWVkZWQuIFJlYnVpbGRhYmxlXG4gIC8vIGVpdGhlciB3YXkuIGB1cHNlcnREZXBsb3ltZW50c2AgbmV2ZXIgdGhyb3dzIGZvciB0aGF0IHJlYXNvbi5cbiAgYXdhaXQgdXBzZXJ0RGVwbG95bWVudHMoaW5zZXJ0ZWRSb3dzKTtcblxuICAvLyBTdXJmYWNlIHRoZSBzaWxlbnQgc2tpcDogYW4gdW5yZWdpc3RlcmVkIHBpcGVsaW5lIGlkIHVzdWFsbHkgbWVhbnMgdGhlXG4gIC8vIHBpcGVsaW5lIGhhc24ndCBjYWxsZWQgUE9TVCAvcGlwZWxpbmVzL3JlZ2lzdHJ5IHlldCAob3IgaXRzXG4gIC8vIHBiLnBpcGVsaW5lLWlkIHRhZyBpcyBtaXNzaW5nL3VucmVhZGFibGUgYnkgdGhlIExhbWJkYSkuIExvZ2dpbmcgaXRcbiAgLy8gbWFrZXMgYSBicm9rZW4gam9pbiB2aXNpYmxlIGluc3RlYWQgb2YgbG9va2luZyBsaWtlIFwibm8gYWN0aXZpdHlcIi5cbiAgaWYgKHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybignUGlwZWxpbmUgZXZlbnRzIHNraXBwZWQ6IHBpcGVsaW5lIGlkIG5vdCBmb3VuZCBpbiByZWdpc3RyeScsIHtcbiAgICAgIGNvdW50OiB1bnJlZ2lzdGVyZWRQaXBlbGluZUlkcy5sZW5ndGgsXG4gICAgICBzYW1wbGU6IHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzLnNsaWNlKDAsIDMpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUG9zdC1jb21taXQgY2FjaGUgaW52YWxpZGF0aW9uLiBGaXJlLWFuZC1mb3JnZXQgd2l0aCBsb2dnaW5nIOKAlCBUVEwgaXNcbiAgLy8gc2hvcnQgZW5vdWdoIHRoYXQgYSBtaXNzZWQgaW52YWxpZGF0aW9uIHNlbGYtaGVhbHMuXG4gIGlmIChhZmZlY3RlZE9yZ3MubGVuZ3RoID4gMCkge1xuICAgIHZvaWQgUHJvbWlzZS5hbGwoYWZmZWN0ZWRPcmdzLm1hcCgob3JnKSA9PlxuICAgICAgaW52YWxpZGF0ZU9yZ1JlcG9ydHMob3JnKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdSZXBvcnRpbmcgY2FjaGUgaW52YWxpZGF0aW9uIGZhaWxlZCcsIHsgb3JnSWQ6IG9yZywgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgICAgfSksXG4gICAgKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGluc2VydGVkLFxuICAgIHNraXBwZWQsXG4gICAgdW5yZWdpc3RlcmVkUGlwZWxpbmVJZHMsXG4gICAgYWZmZWN0ZWRPcmdzLFxuICAgIGRyb3BwZWRGb3JlaWduT3JnLFxuICAgIGRyb3BwZWRJbnZhbGlkVGltZSxcbiAgICBmb3JlaWduUGlwZWxpbmVJZHMsXG4gICAgaW5zZXJ0ZWRFeGVjdXRpb25JZHM6IFsuLi5uZXcgU2V0KGluc2VydGVkUm93cy5tYXAoKHIpID0+IHIuZXhlY3V0aW9uSWQpLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gISFpZCkpXSxcbiAgICBpbnNlcnRlZFBpcGVsaW5lSWRzOiBbLi4ubmV3IFNldChpbnNlcnRlZFJvd3MubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gISFpZCkpXSxcbiAgfTtcbn1cbiJdfQ==
392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5nZXN0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9pbmdlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd6RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQWNoRCxxRUFBcUU7QUFDckUsU0FBUyxjQUFjLENBQUMsQ0FBYztJQUNwQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUM7V0FDdkQsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLGNBQWMsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQztXQUNuRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUN2QyxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsVUFBa0IsRUFBRSxTQUFpQixFQUFFLFVBQWtCO0lBQ3hF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LEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTztRQUNMLFFBQVE7UUFDUixPQUFPO1FBQ1AsdUJBQXVCO1FBQ3ZCLFlBQVk7UUFDWixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLGtCQUFrQjtRQUNsQixvQkFBb0IsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdHLG1CQUFtQixFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDNUcsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBFdmVudCBpbmdlc3Q6IHRoZSBXUklURSBoYWxmIG9mIHJlcG9ydGluZy4gUmVzb2x2ZXMgaW5jb21pbmcgcGlwZWxpbmUgZXZlbnRzXG4gKiBhZ2FpbnN0IHRoZSBwaXBlbGluZSByZWdpc3RyeSwgc2NydWJzIGV2ZXJ5IGZyZWUtZm9ybSBzdHJpbmcsIGJhdGNoLWluc2VydHNcbiAqIHRoZSBtYXRjaGVkIHJvd3MgaWRlbXBvdGVudGx5LCBhbmQgaW52YWxpZGF0ZXMgdGhlIGFmZmVjdGVkIG9yZ3MnIHJlcG9ydFxuICogY2FjaGVzLiBTZXBhcmF0ZSBmcm9tIHRoZSByZXBvcnQgcXVlcmllcyBiZWNhdXNlIHRoaXMgaXMgcmVwb3J0aW5nJ3Mgb25seVxuICogZHVyYWJsZSBwZXJzaXN0ZW5jZSBib3VuZGFyeSDigJQgZXZlcnl0aGluZyBlbHNlIGluIHRoZSBzZXJ2aWNlIG9ubHkgcmVhZHMuXG4gKi9cblxuaW1wb3J0IHsgY29tcHV0ZUNyZWRpdHNGb3IsIGNyZWF0ZUxvZ2dlciwgZXJyb3JNZXNzYWdlLCBub3JtYWxpemVDb21wdXRlVHlwZSwgc2NydWJBd3NJZGVudGlmaWVycyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IGluQXJyYXkgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBpbnZhbGlkYXRlT3JnUmVwb3J0cyB9IGZyb20gJy4vY2FjaGVzLmpzJztcbmltcG9ydCB7IHVwc2VydERlcGxveW1lbnRzIH0gZnJvbSAnLi9kZXBsb3ktcm9sbHVwLmpzJztcbmltcG9ydCB7IGNsYXNzaWZ5RmFpbHVyZSB9IGZyb20gJy4vZmFpbHVyZS1jbGFzc2lmaWVyLmpzJztcbmltcG9ydCB7IHNjcnViT3B0aW9uYWwgfSBmcm9tICcuL3NxbC1oZWxwZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgSW5nZXN0Q2FsbGVyLCBJbmdlc3RFdmVudCwgSW5nZXN0TWV0cmljLCBJbmdlc3RSZXN1bHQgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL2RyaXp6bGUtc2NoZW1hLmpzJztcbmltcG9ydCB7IHdpdGhUZW5hbnRUeCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuaW1wb3J0IHR5cGUgeyBDcnVkVHggfSBmcm9tICcuLi9jcnVkLXNlcnZpY2UuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3JlcG9ydGluZy1pbmdlc3QnKTtcblxudHlwZSBQaXBlbGluZUV2ZW50SW5zZXJ0ID0gdHlwZW9mIHNjaGVtYS5waXBlbGluZUV2ZW50LiRpbmZlckluc2VydDtcblxuXG4vKiogVGhlIHBsdWdpbiBhIHBpcGVsaW5lIHN0ZXAgcnVucywgZnJvbSB0aGUgc3RlcCBtYW5pZmVzdCBpdHMgbGFzdCBkZXBsb3kgcmVnaXN0ZXJlZC4gKi9cbmludGVyZmFjZSBTdGVwUGx1Z2luIHtcbiAgb3JnSWQ6IHN0cmluZztcbiAgcGx1Z2luUHVibGlzaGVyOiBzdHJpbmcgfCBudWxsO1xuICBwbHVnaW5QdWJsaXNoZXJJZDogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIEFuIGFjdGlvbi9idWlsZCBldmVudCB0aGF0IGNhbiBiZSBhdHRyaWJ1dGVkIHRvIGEgcGx1Z2luIHN0ZXAuICovXG5mdW5jdGlvbiBpc0F0dHJpYnV0YWJsZShlOiBJbmdlc3RFdmVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKGUuZXZlbnRUeXBlID09PSAnQUNUSU9OJyB8fCBlLmV2ZW50VHlwZSA9PT0gJ0JVSUxEJylcbiAgICAmJiAoZS5ldmVudFNvdXJjZSA9PT0gJ2NvZGVwaXBlbGluZScgfHwgZS5ldmVudFNvdXJjZSA9PT0gJ2NvZGVidWlsZCcpXG4gICAgJiYgISFlLnN0YWdlTmFtZSAmJiAhIWUuYWN0aW9uTmFtZTtcbn1cblxuZnVuY3Rpb24gc3RlcEtleShwaXBlbGluZUlkOiBzdHJpbmcsIHN0YWdlTmFtZTogc3RyaW5nLCBhY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cGlwZWxpbmVJZH1cXHUwMDAwJHtzdGFnZU5hbWV9XFx1MDAwMCR7YWN0aW9uTmFtZX1gO1xufVxuXG4vKipcbiAqIFBsdWdpbiBhdHRyaWJ1dGlvbjogdGhlIHN0ZXAgbWFuaWZlc3RzIG9mIGV2ZXJ5IHBpcGVsaW5lIHdpdGggYW4gYXR0cmlidXRhYmxlXG4gKiBldmVudCwgaW4gT05FIHJlYWQgcGVyIGJhdGNoLCBrZXllZCBmb3IgYW4gaW4tbWVtb3J5IGpvaW4uIE5hbWVzIGFyZSBjb21wYXJlZFxuICogcG9zdC1zY3J1YiBvbiBib3RoIHNpZGVzICh0aGUgbWFuaWZlc3Qgc3RvcmVzIHRoZW0gc2NydWJiZWQgdGhlIHNhbWUgd2F5KS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZFN0ZXBQbHVnaW5zKHR4OiBDcnVkVHgsIGF0dHJpYnV0YWJsZTogSW5nZXN0RXZlbnRbXSk6IFByb21pc2U8TWFwPHN0cmluZywgU3RlcFBsdWdpbj4+IHtcbiAgY29uc3QgcGlwZWxpbmVJZHMgPSBbLi4ubmV3IFNldChhdHRyaWJ1dGFibGUubWFwKChlKSA9PiBlLnBpcGVsaW5lSWQpKV07XG4gIGlmIChwaXBlbGluZUlkcy5sZW5ndGggPT09IDApIHJldHVybiBuZXcgTWFwKCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB0eFxuICAgIC5zZWxlY3Qoe1xuICAgICAgcGlwZWxpbmVJZDogc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0LnBpcGVsaW5lSWQsXG4gICAgICBvcmdJZDogc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0Lm9yZ0lkLFxuICAgICAgc3RhZ2VOYW1lOiBzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3Quc3RhZ2VOYW1lLFxuICAgICAgYWN0aW9uTmFtZTogc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0LmFjdGlvbk5hbWUsXG4gICAgICBwbHVnaW5QdWJsaXNoZXI6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5wbHVnaW5QdWJsaXNoZXIsXG4gICAgICBwbHVnaW5QdWJsaXNoZXJJZDogc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0LnBsdWdpblB1Ymxpc2hlcklkLFxuICAgICAgcGx1Z2luTmFtZTogc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0LnBsdWdpbk5hbWUsXG4gICAgICBwbHVnaW5WZXJzaW9uOiBzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3QucGx1Z2luVmVyc2lvbixcbiAgICB9KVxuICAgIC5mcm9tKHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdClcbiAgICAud2hlcmUoaW5BcnJheShzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3QucGlwZWxpbmVJZCwgcGlwZWxpbmVJZHMpKTtcbiAgcmV0dXJuIG5ldyBNYXAocm93cy5tYXAoKG0pID0+IFtzdGVwS2V5KG0ucGlwZWxpbmVJZCwgbS5zdGFnZU5hbWUsIG0uYWN0aW9uTmFtZSksIG1dKSk7XG59XG5cbi8qKlxuICogQWxsb3dhbmNlIGZvciBjbG9jayBza2V3IGJldHdlZW4gYW4gQVdTIGV2ZW50J3Mgc291cmNlIGNsb2NrIGFuZCBvdXJzLiBBIHJlYWxcbiAqIENvZGVQaXBlbGluZSBldmVudCBjYW4gY2FycnkgYSB0aW1lc3RhbXAgYSBsaXR0bGUgYWhlYWQgb2Ygb3VyIGBub3dgOyB3aXRob3V0XG4gKiBzb21lIHRvbGVyYW5jZSB0aGUgdmFsaWRhdGlvbiBiZWxvdyB3b3VsZCBkcm9wIGhlYWx0aHkgZXZlbnRzIGR1cmluZyBub3JtYWxcbiAqIE5UUCBkcmlmdCwgd2hpY2ggaXMgZmFyIHdvcnNlIHRoYW4gYWRtaXR0aW5nIGEgZmV3IHNlY29uZHMgb2Ygc2tldy5cbiAqL1xuY29uc3QgQ0xPQ0tfU0tFV19UT0xFUkFOQ0VfTVMgPSA1ICogNjAgKiAxMDAwO1xuXG4vKipcbiAqIFdoeSB0aGlzIGV2ZW50J3MgdGltZXN0YW1wcyBhcmUgaW1wb3NzaWJsZSwgb3IgbnVsbCB3aGVuIHRoZXkgYXJlIHVzYWJsZS5cbiAqXG4gKiBDaGVja2VkIGF0IElOR0VTVCDigJQgdGhlIGR1cmFibGUgYm91bmRhcnkg4oCUIHJhdGhlciB0aGFuIGNsYW1wZWQgd2hlbiB0aGUgbWV0cmljc1xuICogYXJlIGNvbXB1dGVkLiBBIG5lZ2F0aXZlIGR1cmF0aW9uIG9yIGEgZnV0dXJlIGRlcGxveSB1c2VkIHRvIGJlIGNsYW1wZWQgdG8gMFxuICogZG93bnN0cmVhbSwgd2hpY2ggcmVwb3J0ZWQgYSBicm9rZW4gY2xvY2sgYXMgYW4gaW5zdGFudCBkZXBsb3kgYW5kIHF1aWV0bHlcbiAqIG1vdmVkIGRlcGxveW1lbnQgZnJlcXVlbmN5LCBjaGFuZ2UtZmFpbHVyZSByYXRlIGFuZCBsZWFkIHRpbWUgZm9yIHRoZSBvcmcuXG4gKlxuICogTk9UIGNoZWNrZWQgaGVyZTogY29tbWl0IHRpbWUgdnMgZGVwbG95IGNvbXBsZXRpb24uIGBjb21taXRfdGltZXN0YW1wYCByaWRlcyB0aGVcbiAqIFBJUEVMSU5FL3NvdXJjZSBldmVudCB3aGlsZSB0aGUgZGVwbG95J3MgYGNvbXBsZXRlZF9hdGAgaXMgb24gYSBzZXBhcmF0ZSBTVEFHRVxuICogcm93LCBqb2luZWQgYnkgYGV4ZWN1dGlvbl9pZGAgb25seSB3aGVuIERPUkEgaXMgcXVlcmllZCDigJQgc28gbm8gc2luZ2xlIGV2ZW50XG4gKiBjYXJyaWVzIGJvdGgsIGFuZCB0aGF0IG9yZGVyaW5nIGNhbiBvbmx5IGJlIGd1YXJkZWQgd2hlcmUgdGhlIHR3byBtZWV0LlxuICovXG5mdW5jdGlvbiBpbnZhbGlkRXZlbnRUaW1lcyhldmVudDogSW5nZXN0RXZlbnQsIG5vd01zOiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgY2VpbGluZyA9IG5vd01zICsgQ0xPQ0tfU0tFV19UT0xFUkFOQ0VfTVM7XG4gIGNvbnN0IHBhcnNlZDogQXJyYXk8W3N0cmluZywgbnVtYmVyXT4gPSBbXTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBbJ3N0YXJ0ZWRBdCcsICdjb21wbGV0ZWRBdCcsICdjb21taXRUaW1lc3RhbXAnXSBhcyBjb25zdCkge1xuICAgIGNvbnN0IHJhdyA9IGV2ZW50W2ZpZWxkXTtcbiAgICBpZiAocmF3ID09PSB1bmRlZmluZWQgfHwgcmF3ID09PSBudWxsKSBjb250aW51ZTtcbiAgICBjb25zdCBtcyA9IERhdGUucGFyc2UoU3RyaW5nKHJhdykpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG1zKSkgcmV0dXJuIGAke2ZpZWxkfSBpcyBub3QgYSBwYXJzZWFibGUgdGltZXN0YW1wYDtcbiAgICBpZiAobXMgPiBjZWlsaW5nKSByZXR1cm4gYCR7ZmllbGR9IGlzIGluIHRoZSBmdXR1cmVgO1xuICAgIHBhcnNlZC5wdXNoKFtmaWVsZCwgbXNdKTtcbiAgfVxuICBjb25zdCBzdGFydGVkID0gcGFyc2VkLmZpbmQoKFtmXSkgPT4gZiA9PT0gJ3N0YXJ0ZWRBdCcpPy5bMV07XG4gIGNvbnN0IGNvbXBsZXRlZCA9IHBhcnNlZC5maW5kKChbZl0pID0+IGYgPT09ICdjb21wbGV0ZWRBdCcpPy5bMV07XG4gIGlmIChzdGFydGVkICE9PSB1bmRlZmluZWQgJiYgY29tcGxldGVkICE9PSB1bmRlZmluZWQgJiYgY29tcGxldGVkIDwgc3RhcnRlZCkge1xuICAgIHJldHVybiAnY29tcGxldGVkQXQgaXMgYmVmb3JlIHN0YXJ0ZWRBdCc7XG4gIH1cbiAgaWYgKGV2ZW50LmR1cmF0aW9uTXMgIT09IHVuZGVmaW5lZCAmJiBldmVudC5kdXJhdGlvbk1zICE9PSBudWxsICYmIGV2ZW50LmR1cmF0aW9uTXMgPCAwKSB7XG4gICAgcmV0dXJuICdkdXJhdGlvbk1zIGlzIG5lZ2F0aXZlJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBUaGUgcGVyc2lzdGVkIHJvdyBmb3Igb25lIGluZ2VzdGVkIGV2ZW50LiBUaGlzIGlzIHRoZSBEVVJBQkxFIHBlcnNpc3RlbmNlXG4gKiBib3VuZGFyeTogZXZlcnkgdXNlci9BV1MtZGVyaXZlZCBmcmVlLWZvcm0gc3RyaW5nIGlzIHNjcnViYmVkIGhlcmUsIGFuZFxuICogdGVuYW5jeSBjb21lcyBmcm9tIHRoZSBwaXBlbGluZSByZWdpc3RyeSwgbmV2ZXIgdGhlIGNhbGxlcidzIGNsYWltZWQgb3JnLlxuICovXG4vKiogVGhlIHN5bnRoIHJlZnVzYWwgY29kZSB0aGUgZXZlbnRzIExhbWJkYSBhdHRhY2hlZCAoYGRldGFpbC5wYkZhaWx1cmUuY29kZWApLCBpZiBhbnkuICovXG5mdW5jdGlvbiBwYkZhaWx1cmVDb2RlKGRldGFpbDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZmFpbHVyZSA9IGRldGFpbD8ucGJGYWlsdXJlO1xuICBjb25zdCBjb2RlID0gZmFpbHVyZSAmJiB0eXBlb2YgZmFpbHVyZSA9PT0gJ29iamVjdCcgPyAoZmFpbHVyZSBhcyB7IGNvZGU/OiB1bmtub3duIH0pLmNvZGUgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycgJiYgL15bQS1aXVtBLVowLTlfXXswLDYzfSQvLnRlc3QoY29kZSkgPyBjb2RlIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gdG9FdmVudFJvdyhldmVudDogSW5nZXN0RXZlbnQsIHJlZ2lzdHJ5OiB7IHBpcGVsaW5lSWQ6IHN0cmluZzsgb3JnSWQ6IHN0cmluZyB9LCBwbHVnaW46IFN0ZXBQbHVnaW4gfCB1bmRlZmluZWQsIGtleUlkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQaXBlbGluZUV2ZW50SW5zZXJ0IHtcbiAgY29uc3QgZGV0YWlsID0gZXZlbnQuc291cmNlTWVzc2FnZUlkICE9PSB1bmRlZmluZWRcbiAgICA/IHsgLi4uKGV2ZW50LmRldGFpbCA/PyB7fSksIHNvdXJjZU1lc3NhZ2VJZDogZXZlbnQuc291cmNlTWVzc2FnZUlkIH1cbiAgICA6IGV2ZW50LmRldGFpbDtcbiAgcmV0dXJuIHtcbiAgICAvLyByZWdpc3RyeS5waXBlbGluZUlkID09PSBldmVudC5waXBlbGluZUlkOyB0aGUgcmVnaXN0cnkncyBpcyBhbHdheXMgYSByb3dcbiAgICAvLyB0aGF0IGV4aXN0cyAoRkspIGFuZCBpdHMgb3JnSWQgaXMgdGhlIHRydXN0ZWQgdGVuYW50LlxuICAgIHBpcGVsaW5lSWQ6IHJlZ2lzdHJ5LnBpcGVsaW5lSWQsXG4gICAgb3JnSWQ6IHJlZ2lzdHJ5Lm9yZ0lkLFxuICAgIGV2ZW50U291cmNlOiBldmVudC5ldmVudFNvdXJjZSxcbiAgICBldmVudFR5cGU6IGV2ZW50LmV2ZW50VHlwZSxcbiAgICBzdGF0dXM6IGV2ZW50LnN0YXR1cyxcbiAgICAvLyBBbiBBV1MtQVNTSUdORUQgVVVJRCwgbm90IGZyZWUtZm9ybSB0ZXh0OiBpdCBjYW4ndCBjYXJyeSBhbiBhY2NvdW50IGlkLFxuICAgIC8vIGFuZCBzY3J1YmJpbmcgYSAxMi1kaWdpdCBydW4gaW5zaWRlIGl0IHdvdWxkIGNvcnJ1cHQgdGhlIGNvcnJlbGF0aW9uIGtleS5cbiAgICBleGVjdXRpb25JZDogZXZlbnQuZXhlY3V0aW9uSWQsXG4gICAgLy8gVVNFUi1BVVRIT1JFRCBwaXBlbGluZS1zdHJ1Y3R1cmUgbmFtZXMg4oCUIHNhbWUgdW50cnVzdGVkIG9yaWdpbiBhc1xuICAgIC8vIGVycm9yTWVzc2FnZSwgc28gc2NydWJiZWQgKGEgc3RhZ2UgbmFtZWQgd2l0aCBhbiBBUk4gbXVzdCBub3QgcGVyc2lzdCkuXG4gICAgc3RhZ2VOYW1lOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LnN0YWdlTmFtZSksXG4gICAgYWN0aW9uTmFtZTogc2NydWJPcHRpb25hbChldmVudC5hY3Rpb25OYW1lKSxcbiAgICAvLyBIQVJEIENPTlNUUkFJTlQ6IGFuIEFXUyBhY2NvdW50IGlkIG11c3QgTkVWRVIgYmUgcGVyc2lzdGVkLiBGYWlsdXJlIGRldGFpbFxuICAgIC8vIGFuZCBtZXNzYWdlcyByb3V0aW5lbHkgY2FycnkgQVJOcyBhbmQgYmFyZSAxMi1kaWdpdCBhY2NvdW50IGlkcy5cbiAgICBlcnJvck1lc3NhZ2U6IHNjcnViT3B0aW9uYWwoZXZlbnQuZXJyb3JNZXNzYWdlKSxcbiAgICBzdGFydGVkQXQ6IGV2ZW50LnN0YXJ0ZWRBdCA/IG5ldyBEYXRlKGV2ZW50LnN0YXJ0ZWRBdCkgOiB1bmRlZmluZWQsXG4gICAgY29tcGxldGVkQXQ6IGV2ZW50LmNvbXBsZXRlZEF0ID8gbmV3IERhdGUoZXZlbnQuY29tcGxldGVkQXQpIDogdW5kZWZpbmVkLFxuICAgIGR1cmF0aW9uTXM6IGV2ZW50LmR1cmF0aW9uTXMsXG4gICAgLy8gRGVwbG95IGF0dHJpYnV0aW9uIOKAlCBzY3J1YmJlZCBsaWtlIHRoZSBvdGhlciBmcmVlLWZvcm0gc3RyaW5ncy5cbiAgICBjb21taXRTaGE6IHNjcnViT3B0aW9uYWwoZXZlbnQuY29tbWl0U2hhKSxcbiAgICBjb21taXRSZWY6IHNjcnViT3B0aW9uYWwoZXZlbnQuY29tbWl0UmVmKSxcbiAgICBlbnZpcm9ubWVudDogc2NydWJPcHRpb25hbChldmVudC5lbnZpcm9ubWVudCksXG4gICAgLy8gTWVhc3VyZWQgbGVhZCB0aW1lOiB0aGUgb2xkZXN0IHVuc2hpcHBlZCBjb21taXQncyB0aW1lICsgdGhlIGNvdW50LiBBblxuICAgIC8vIFNDTS1kZXJpdmVkIGluc3RhbnQgYW5kIGEgcGxhaW4gaW50ZWdlciDigJQgbm90aGluZyB0byBzY3J1Yi5cbiAgICBjb21taXRUaW1lc3RhbXA6IGV2ZW50LmNvbW1pdFRpbWVzdGFtcCA/IG5ldyBEYXRlKGV2ZW50LmNvbW1pdFRpbWVzdGFtcCkgOiB1bmRlZmluZWQsXG4gICAgY29tbWl0Q291bnQ6IGV2ZW50LmNvbW1pdENvdW50LFxuICAgIC8vIE5VTEwgZm9yIG5vbi1wbHVnaW4gYWN0aW9ucyBhbmQgZm9yIHBpcGVsaW5lcyBkZXBsb3llZCB3aXRob3V0IGEgbWFuaWZlc3QuXG4gICAgcGx1Z2luUHVibGlzaGVyOiBwbHVnaW4/LnBsdWdpblB1Ymxpc2hlciA/PyBudWxsLFxuICAgIHBsdWdpblB1Ymxpc2hlcklkOiBwbHVnaW4/LnBsdWdpblB1Ymxpc2hlcklkID8/IG51bGwsXG4gICAgcGx1Z2luTmFtZTogcGx1Z2luPy5wbHVnaW5OYW1lID8/IG51bGwsXG4gICAgcGx1Z2luVmVyc2lvbjogcGx1Z2luPy5wbHVnaW5WZXJzaW9uID8/IG51bGwsXG4gICAgLy8gV0hBVCBLSU5EIG9mIHRoaW5nIGJyb2tlLCBjbGFzc2lmaWVkIGhlcmUgcmF0aGVyIHRoYW4gYXQgcmVhZCB0aW1lOiB0aGVcbiAgICAvLyBlcnJvciB0ZXh0IGlzIHNjcnViYmVkIGFib3ZlIGFuZCBldmVudHVhbGx5IHN3ZXB0IGJ5IHJldGVudGlvbiwgc28gYVxuICAgIC8vIGNhdGVnb3J5IGRlcml2ZWQgbGF0ZXIgd291bGQgaGF2ZSBub3RoaW5nIGxlZnQgdG8gcmVhZC4gTlVMTCBmb3IgYW55dGhpbmdcbiAgICAvLyB0aGF0IGlzIG5vdCBhIGZhaWx1cmUsIHNvIGl0cyBwcmVzZW5jZSBhbHdheXMgbWVhbnMgXCJ0aGlzIGJyb2tlXCIuXG4gICAgZmFpbHVyZUNhdGVnb3J5OiBjbGFzc2lmeUZhaWx1cmUoe1xuICAgICAgc3RhdHVzOiBldmVudC5zdGF0dXMsXG4gICAgICBlcnJvck1lc3NhZ2U6IHNjcnViT3B0aW9uYWwoZXZlbnQuZXJyb3JNZXNzYWdlKSxcbiAgICAgIGFjdGlvbk5hbWU6IHNjcnViT3B0aW9uYWwoZXZlbnQuYWN0aW9uTmFtZSksXG4gICAgICBzdGFnZU5hbWU6IHNjcnViT3B0aW9uYWwoZXZlbnQuc3RhZ2VOYW1lKSxcbiAgICAgIGZhaWx1cmVDb2RlOiBwYkZhaWx1cmVDb2RlKGV2ZW50LmRldGFpbCksXG4gICAgfSksXG4gICAgLy8gUHJvdmVuYW5jZS4gQm90aCBhcmUgb3BhcXVlIGlkcyDigJQgYW4gQVdTLWFzc2lnbmVkIGV2ZW50IFVVSUQgYW5kIG91ciBvd25cbiAgICAvLyBrZXkgaWQg4oCUIHNvIG5laXRoZXIgY2FuIGNhcnJ5IGFuIGFjY291bnQgaWQgYW5kIG5laXRoZXIgaXMgc2NydWJiZWRcbiAgICAvLyAoc2NydWJiaW5nIGEgZGlnaXQgcnVuIGluc2lkZSBvbmUgd291bGQgY29ycnVwdCB0aGUgY29ycmVsYXRpb24ga2V5KS5cbiAgICBzb3VyY2VFdmVudElkOiBldmVudC5zb3VyY2VFdmVudElkLFxuICAgIGluZ2VzdEtleUlkOiBrZXlJZCxcbiAgICBkZXRhaWw6IGRldGFpbCAhPT0gdW5kZWZpbmVkID8gc2NydWJBd3NJZGVudGlmaWVycyhkZXRhaWwpIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG4vKipcbiAqIEZhbiB0ZXJtaW5hbCBTVEFHRSBvdXRjb21lcyBhbmQgcGVyLUFDVElPTiBjb21wdXRlIGNvbnN1bXB0aW9uIGludG8gdGhlXG4gKiByb3V0ZSdzIG1ldHJpYyBob29rIChwaXBlbGluZS1kYXRhIGNhbid0IGltcG9ydCBhcGktc2VydmVyJ3MgcmVnaXN0cnkpIGFmdGVyXG4gKiB0aGUgaW5zZXJ0IGNvbW1pdHMuXG4gKlxuICogRHJpdmVuIG9mZiB0aGUgSU5TRVJURUQgcm93cywgc28gYSByZS1kZWxpdmVyZWQgZXZlbnQgdGhlIGRlZHVwIGluZGV4XG4gKiBzd2FsbG93ZWQgaXMgbmV2ZXIgY291bnRlZCB0d2ljZS4gVGhhdCBwcm9wZXJ0eSBpcyBsb2FkLWJlYXJpbmcgZm9yIHRoZVxuICogY29tcHV0ZSBzZXJpZXMgaW4gYSB3YXkgaXQgd2FzIG5vdCBmb3IgdGhlIHN0YWdlIG9uZTogYSBkdXBsaWNhdGVkIHN0YWdlXG4gKiBvdXRjb21lIGRpc3RvcnRzIGEgcmF0ZSwgd2hlcmVhcyBhIGR1cGxpY2F0ZWQgdkNQVS1taW51dGUgZmlndXJlIGlzIGFcbiAqIGRvdWJsZS1jaGFyZ2Ugd2FpdGluZyBmb3IgdGhlIGRheSB0aGUgY2hhcmdlIGlzIHN3aXRjaGVkIG9uLlxuICpcbiAqIEEgbm9uLW51bGwgZW52aXJvbm1lbnQgbWFya3MgYSBkZXBsb3kuXG4gKi9cbmZ1bmN0aW9uIGVtaXRJbmdlc3RNZXRyaWNzKFxuICByb3dzOiBSZWFkb25seUFycmF5PHtcbiAgICBvcmdJZDogc3RyaW5nO1xuICAgIHBpcGVsaW5lSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgZXZlbnRUeXBlOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGVudmlyb25tZW50OiBzdHJpbmcgfCBudWxsO1xuICAgIGR1cmF0aW9uTXM/OiBudW1iZXIgfCBudWxsO1xuICAgIGRldGFpbD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDtcbiAgfT4sXG4gIG9uTWV0cmljOiAobTogSW5nZXN0TWV0cmljKSA9PiB2b2lkLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgciBvZiByb3dzKSB7XG4gICAgaWYgKCFyLnBpcGVsaW5lSWQpIGNvbnRpbnVlO1xuXG4gICAgLy8gQ29tcHV0ZSBjb25zdW1wdGlvbjogZXZlcnkgVEVSTUlOQUwgYWN0aW9uLCBtZWFzdXJhYmxlIG9yIG5vdC4gVGhlXG4gICAgLy8gdW5tZWFzdXJhYmxlIG9uZXMgYXJlIHRoZSBwb2ludCDigJQgdGhleSBhcmUgd2hhdCB0aGUgY292ZXJhZ2UgcmF0aW8gY291bnRzLlxuICAgIGlmIChyLmV2ZW50VHlwZSA9PT0gJ0FDVElPTicgJiYgVEVSTUlOQUxfQUNUSU9OX1NUQVRFUy5pbmNsdWRlcyhyLnN0YXR1cykpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVUeXBlID0gbm9ybWFsaXplQ29tcHV0ZVR5cGUoXG4gICAgICAgIHR5cGVvZiByLmRldGFpbD8uY29tcHV0ZVR5cGUgPT09ICdzdHJpbmcnID8gci5kZXRhaWwuY29tcHV0ZVR5cGUgOiBudWxsLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSByLmR1cmF0aW9uTXMgPz8gbnVsbDtcbiAgICAgIG9uTWV0cmljKHtcbiAgICAgICAga2luZDogJ2NvbXB1dGUnLFxuICAgICAgICBwaXBlbGluZUlkOiByLnBpcGVsaW5lSWQsXG4gICAgICAgIG9yZ0lkOiByLm9yZ0lkLFxuICAgICAgICBjb21wdXRlVHlwZSxcbiAgICAgICAgZHVyYXRpb25NcyxcbiAgICAgICAgY3JlZGl0czogY29tcHV0ZUNyZWRpdHNGb3IoZHVyYXRpb25NcywgY29tcHV0ZVR5cGUpLFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoci5ldmVudFR5cGUgIT09ICdTVEFHRScgfHwgKHIuc3RhdHVzICE9PSAnU1VDQ0VFREVEJyAmJiByLnN0YXR1cyAhPT0gJ0ZBSUxFRCcpKSBjb250aW51ZTtcbiAgICBvbk1ldHJpYyh7XG4gICAgICBraW5kOiAnc3RhZ2UnLFxuICAgICAgcGlwZWxpbmVJZDogci5waXBlbGluZUlkLFxuICAgICAgb3JnSWQ6IHIub3JnSWQsXG4gICAgICBzdGFnZTogci5zdGFnZU5hbWUgPz8gJycsXG4gICAgICBlbnZpcm9ubWVudDogci5lbnZpcm9ubWVudCA/PyBudWxsLFxuICAgICAgcmVzdWx0OiByLnN0YXR1cyA9PT0gJ1NVQ0NFRURFRCcgPyAnc3VjY2VlZGVkJyA6ICdmYWlsZWQnLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKiBBY3Rpb24gc3RhdGVzIHRoYXQgbWVhbiB0aGUgYWN0aW9uIGlzIG92ZXIgYW5kIGl0cyBjb25zdW1wdGlvbiBpcyBmaW5hbC4gKi9cbmNvbnN0IFRFUk1JTkFMX0FDVElPTl9TVEFURVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWydTVUNDRUVERUQnLCAnRkFJTEVEJywgJ1NUT1BQRUQnXTtcblxuLyoqXG4gKiBSZXNvbHZlIGluY29taW5nIGV2ZW50cyBhZ2FpbnN0IHRoZSBwaXBlbGluZSByZWdpc3RyeSwgYmF0Y2gtaW5zZXJ0IHRoZVxuICogbWF0Y2hlZCBvbmVzLCBhbmQgaW52YWxpZGF0ZSByZXBvcnRpbmcgY2FjaGVzIGZvciBhZmZlY3RlZCBvcmdzLlxuICogRXZlbnRzIGZvciB1bnJlZ2lzdGVyZWQgcGlwZWxpbmUgaWRzIGFyZSBkcm9wcGVkIChhbmQgbG9nZ2VkIGF0IFdBUk5cbiAqIHdpdGggc2FtcGxlIGlkcyBzbyBhbiBvcGVyYXRvciBjYW4gc2VlIHdoZW4gRXZlbnRCcmlkZ2UgaXMgZGVsaXZlcmluZ1xuICogZXZlbnRzIGZvciBwaXBlbGluZXMgdGhhdCBoYXZlbid0IGNhbGxlZCBQT1NUIC9waXBlbGluZXMvcmVnaXN0cnkgeWV0KS5cbiAqXG4gKiBSZXR1cm5zIGNvdW50cyArIGEgc2FtcGxlIG9mIHVucmVnaXN0ZXJlZCBwaXBlbGluZSBpZHMgZm9yIG9ic2VydmFiaWxpdHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbmdlc3RFdmVudHMoXG4gIGV2ZW50czogSW5nZXN0RXZlbnRbXSxcbiAgb25NZXRyaWM/OiAobTogSW5nZXN0TWV0cmljKSA9PiB2b2lkLFxuICBjYWxsZXI/OiBJbmdlc3RDYWxsZXIsXG4pOiBQcm9taXNlPEluZ2VzdFJlc3VsdD4ge1xuICAvLyBURU5BTkNZLiBBbiBldmVudCdzIG9yZyBjb21lcyBmcm9tIHRoZSBwaXBlbGluZSBSRUdJU1RSWSwgbm90IHRoZSB0b2tlbiwgc29cbiAgLy8gdGhlIHNjb3BlIGNoZWNrIGFsb25lIGxldCBhbnkgYHJlcG9ydGluZzppbmdlc3RgIGhvbGRlciBwb3N0IGV2ZW50cyBmb3JcbiAgLy8gYW5vdGhlciBvcmcncyBwaXBlbGluZSBpZCBhbmQgaGF2ZSB0aGVtIGF0dHJpYnV0ZWQgdGhlcmUuIGBjYWxsZXJgIGNhcnJpZXNcbiAgLy8gdGhlIG9yZyBpZHMgdGhpcyB0b2tlbiBtYXkgd3JpdGUgZm9yOyBhbnl0aGluZyBlbHNlIGlzIGRyb3BwZWQgYmVsb3cuXG4gIC8vXG4gIC8vIGBjYWxsZXJgIGlzIG9wdGlvbmFsIG9ubHkgc28gaW4tcHJvY2VzcyBjYWxsZXJzIHRoYXQgYWxyZWFkeSBydW5cbiAgLy8gY3Jvc3MtdGVuYW50ICh0ZXN0cywgYmFja2ZpbGxzKSBrZWVwIHdvcmtpbmcg4oCUIGFuIEFCU0VOVCBjYWxsZXIgbWVhbnMgXCJub1xuICAvLyByZXN0cmljdGlvblwiLCBhbmQgdGhlIHJvdXRlIGFsd2F5cyBzdXBwbGllcyBvbmUuIEEgY2FsbGVyIHdpdGggYW4gRU1QVFlcbiAgLy8gYWxsb3ctbGlzdCBhbmQgbm8gY3Jvc3NUZW5hbnQgZmxhZyB0aGVyZWZvcmUgZHJvcHMgZXZlcnl0aGluZywgd2hpY2ggaXMgdGhlXG4gIC8vIHJpZ2h0IGFuc3dlciB3aGVuIHRoZSByb3V0ZSBjb3VsZCBub3QgZXN0YWJsaXNoIHdobyBpcyB3cml0aW5nLlxuICBjb25zdCB1bnJlc3RyaWN0ZWQgPSBjYWxsZXIgPT09IHVuZGVmaW5lZCB8fCBjYWxsZXIuY3Jvc3NUZW5hbnQgPT09IHRydWU7XG4gIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0KGNhbGxlcj8uYWxsb3dlZE9yZ0lkcyA/PyBbXSk7XG4gIC8vIE11bHRpLW9yZyBiYXRjaCBpbnNlcnQ6IHRoZSBjYWxsZXIgcmVzb2x2ZXMgdG8gbXVsdGlwbGUgb3JncyB2aWEgdGhlXG4gIC8vIHBpcGVsaW5lLXJlZ2lzdHJ5IGxvb2t1cCBiZWxvdywgc28gdGhlIHJvdXRlIGxheWVyIE1VU1QgZXN0YWJsaXNoIGFcbiAgLy8gYHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgaXNTdXBlckFkbWluOiB0cnVlIH0sIC4uLilgIHNjb3BlIGJlZm9yZSBjYWxsaW5nXG4gIC8vIHRoaXMgZnVuY3Rpb24uIFVuZGVyIEZPUkNFJ2QgUkxTLCBhIHNpbmdsZSB0eCB3aXRoIGBhcHAub3JnX2lkID0gPG9uZVxuICAvLyBvcmc+YCBjb3VsZCBvbmx5IHdyaXRlIGV2ZW50cyBmb3IgdGhhdCBvcmc7IGJ5cGFzcyB2aWEgc3lzYWRtaW4gaXNcbiAgLy8gdGhlIHJpZ2h0IGdhdGUgZm9yIHRoaXMgc2VydmVyLWludGVybmFsIGNyb3NzLXRlbmFudCBlbmRwb2ludC4gU2VlXG4gIC8vIGFwaS9yZXBvcnRpbmcvc3JjL3JvdXRlcy9ldmVudC1pbmdlc3QudHMgZm9yIHRoZSB3cmFwcGVyLlxuICAvLyBDYWNoZXMgYXJlIGludmFsaWRhdGVkIEFGVEVSIHRoZSB0eCByZXNvbHZlczogZG9pbmcgaXQgaW5zaWRlIGhlbGQgdGhlIHBnXG4gIC8vIGxvY2tzIG9wZW4gYWNyb3NzIHVucmVsYXRlZCBjYWNoZSByb3VuZC10cmlwcy4gVGhlIFRUTCBpcyAyLTUgbWluLCBzbyBhXG4gIC8vIGZpcmUtYW5kLWZvcmdldCBwb3N0LWNvbW1pdCBpbnZhbGlkYXRpb24gaXMgYW4gYWNjZXB0YWJsZSB0cmFkZS5cbiAgY29uc3QgeyBpbnNlcnRlZCwgc2tpcHBlZCwgdW5yZWdpc3RlcmVkUGlwZWxpbmVJZHMsIGFmZmVjdGVkT3JncywgZHJvcHBlZEZvcmVpZ25PcmcsIGRyb3BwZWRJbnZhbGlkVGltZSwgZm9yZWlnblBpcGVsaW5lSWRzLCBpbnNlcnRlZFJvd3MgfSA9IGF3YWl0IHdpdGhUZW5hbnRUeChhc3luYyAodHgpID0+IHtcbiAgICAvLyBCYXRjaC1yZXNvbHZlIGFsbCB1bmlxdWUgcGlwZWxpbmUgaWRzIGluIG9uZSBxdWVyeVxuICAgIGNvbnN0IHVuaXF1ZUlkcyA9IFsuLi5uZXcgU2V0KGV2ZW50cy5tYXAoZSA9PiBlLnBpcGVsaW5lSWQpKV07XG4gICAgY29uc3QgcmVnaXN0cnlSb3dzID0gYXdhaXQgdHhcbiAgICAgIC5zZWxlY3Qoe1xuICAgICAgICBwaXBlbGluZUlkOiBzY2hlbWEucGlwZWxpbmVSZWdpc3RyeS5waXBlbGluZUlkLFxuICAgICAgICBvcmdJZDogc2NoZW1hLnBpcGVsaW5lUmVnaXN0cnkub3JnSWQsXG4gICAgICB9KVxuICAgICAgLmZyb20oc2NoZW1hLnBpcGVsaW5lUmVnaXN0cnkpXG4gICAgICAud2hlcmUoaW5BcnJheShzY2hlbWEucGlwZWxpbmVSZWdpc3RyeS5waXBlbGluZUlkLCB1bmlxdWVJZHMpKTtcblxuICAgIGNvbnN0IGlkTWFwID0gbmV3IE1hcChyZWdpc3RyeVJvd3MubWFwKHIgPT4gW3IucGlwZWxpbmVJZCwgcl0pKTtcbiAgICBjb25zdCBzdGVwUGx1Z2lucyA9IGF3YWl0IGxvYWRTdGVwUGx1Z2lucyh0eCwgZXZlbnRzLmZpbHRlcigoZSkgPT4gaXNBdHRyaWJ1dGFibGUoZSkgJiYgaWRNYXAuaGFzKGUucGlwZWxpbmVJZCkpKTtcblxuICAgIC8vIEJ1aWxkIGluc2VydCBiYXRjaCAoc2tpcCBldmVudHMgd2hvc2UgcGlwZWxpbmUgaXNuJ3QgcmVnaXN0ZXJlZClcbiAgICBjb25zdCByb3dzOiBQaXBlbGluZUV2ZW50SW5zZXJ0W10gPSBbXTtcbiAgICBsZXQgc2tpcHBlZExvY2FsID0gMDtcbiAgICBsZXQgZm9yZWlnbkxvY2FsID0gMDtcbiAgICBsZXQgaW52YWxpZFRpbWVMb2NhbCA9IDA7XG4gICAgY29uc3QgaW52YWxpZFRpbWVSZWFzb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgZm9yZWlnbk9yZ0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGZvcmVpZ25QaXBlbGluZUlkc0xvY2FsID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdW5yZWdpc3RlcmVkTG9jYWw6IHN0cmluZ1tdID0gW107XG4gICAgLy8gT25lIGBub3dgIGZvciB0aGUgd2hvbGUgYmF0Y2g6IHBlci1ldmVudCBjbG9ja3Mgd291bGQgbGV0IGFuIGV2ZW50IHBhc3Mgb3JcbiAgICAvLyBmYWlsIGRlcGVuZGluZyBvbiB3aGVyZSBpdCBzYXQgaW4gdGhlIGxvb3AuXG4gICAgY29uc3Qgbm93TXMgPSBEYXRlLm5vdygpO1xuXG4gICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gaWRNYXAuZ2V0KGV2ZW50LnBpcGVsaW5lSWQpO1xuICAgICAgaWYgKCFyZWdpc3RyeSkge1xuICAgICAgICBza2lwcGVkTG9jYWwrKztcbiAgICAgICAgdW5yZWdpc3RlcmVkTG9jYWwucHVzaChldmVudC5waXBlbGluZUlkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBUaGUgcGlwZWxpbmUgcmVzb2x2ZXMgdG8gYW4gb3JnIHRoaXMgY2FsbGVyIG1heSBub3Qgd3JpdGUgZm9yLiBDb3VudGVkXG4gICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gYHNraXBwZWRgIChhbiB1bnJlZ2lzdGVyZWQgaWQgaXMgYSBwcm9kdWNlciBydW5uaW5nXG4gICAgICAvLyBhaGVhZCBvZiByZWdpc3RyYXRpb247IHRoaXMgaXMgYSB0ZW5hbmN5IHJlZnVzYWwpIGFuZCBuZXZlciBpbnNlcnRlZC5cbiAgICAgIGlmICghdW5yZXN0cmljdGVkICYmICFhbGxvd2VkLmhhcyhyZWdpc3RyeS5vcmdJZCkpIHtcbiAgICAgICAgZm9yZWlnbkxvY2FsKys7XG4gICAgICAgIGZvcmVpZ25PcmdJZHMuYWRkKHJlZ2lzdHJ5Lm9yZ0lkKTtcbiAgICAgICAgZm9yZWlnblBpcGVsaW5lSWRzTG9jYWwuYWRkKGV2ZW50LnBpcGVsaW5lSWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIEltcG9zc2libGUgdGltZXN0YW1wcyBhcmUgcmVmdXNlZCBhdCB0aGUgYm91bmRhcnksIHNvIG5vIGRvd25zdHJlYW1cbiAgICAgIC8vIG1ldHJpYyBoYXMgdG8gY2xhbXAgYSBuZWdhdGl2ZSBnYXAgYW5kIGNhbGwgaXQgemVyby5cbiAgICAgIGNvbnN0IGJhZFRpbWUgPSBpbnZhbGlkRXZlbnRUaW1lcyhldmVudCwgbm93TXMpO1xuICAgICAgaWYgKGJhZFRpbWUpIHtcbiAgICAgICAgaW52YWxpZFRpbWVMb2NhbCsrO1xuICAgICAgICBpbnZhbGlkVGltZVJlYXNvbnMuYWRkKGJhZFRpbWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHNjcnViT3B0aW9uYWwoZXZlbnQuc3RhZ2VOYW1lKTtcbiAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBzY3J1Yk9wdGlvbmFsKGV2ZW50LmFjdGlvbk5hbWUpO1xuICAgICAgY29uc3Qgc3RlcCA9IGlzQXR0cmlidXRhYmxlKGV2ZW50KSAmJiBzdGFnZU5hbWUgJiYgYWN0aW9uTmFtZVxuICAgICAgICA/IHN0ZXBQbHVnaW5zLmdldChzdGVwS2V5KHJlZ2lzdHJ5LnBpcGVsaW5lSWQsIHN0YWdlTmFtZSwgYWN0aW9uTmFtZSkpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgLy8gU2FtZS1vcmcgZ3VhcmQ6IGEgbWFuaWZlc3Qgcm93IGlzIG9ubHkgZXZlciB3cml0dGVuIGJ5IHRoZSBvcmcgdGhhdFxuICAgICAgLy8gb3ducyB0aGUgcGlwZWxpbmUsIGJ1dCB0aGUgaW5nZXN0IHJ1bnMgY3Jvc3MtdGVuYW50LCBzbyBkb24ndCBsZWFuIG9uIGl0LlxuICAgICAgcm93cy5wdXNoKHRvRXZlbnRSb3coZXZlbnQsIHJlZ2lzdHJ5LCBzdGVwICYmIHN0ZXAub3JnSWQgPT09IHJlZ2lzdHJ5Lm9yZ0lkID8gc3RlcCA6IHVuZGVmaW5lZCwgY2FsbGVyPy5rZXlJZCkpO1xuICAgIH1cblxuICAgIC8vIFNRUyBpcyBhdC1sZWFzdC1vbmNlLCBzbyBFdmVudEJyaWRnZSBjYW4gZGVsaXZlciB0aGUgc2FtZSBzdGF0ZS1jaGFuZ2VcbiAgICAvLyB0d2ljZS4gYG9uQ29uZmxpY3REb05vdGhpbmdgICsgdGhlIHBhcnRpYWwgdW5pcXVlIGluZGV4ZXMgb25cbiAgICAvLyAocGlwZWxpbmVfaWQsIGV4ZWN1dGlvbl9pZCwgZXZlbnRfdHlwZSwgc3RhdHVzLCBzdGFnZV9uYW1lLCBhY3Rpb25fbmFtZSlcbiAgICAvLyBhbmQgb24gc291cmNlX2V2ZW50X2lkICh0aGUgRXZlbnRCcmlkZ2UgaWQsIHdoZW4gcHJlc2VudCkgbWFrZVxuICAgIC8vIHJlLWRlbGl2ZXJ5IGlkZW1wb3RlbnQuIGByZXR1cm5pbmdgIGdpdmVzIHRoZSBSRUFMIGluc2VydGVkIHNldCBzb1xuICAgIC8vIGNvdW50cywgbWV0cmljcyBhbmQgY2FjaGUgaW52YWxpZGF0aW9uIGFsbCBpZ25vcmUgZHVwbGljYXRlcy5cbiAgICBjb25zdCBsYW5kZWQgPSByb3dzLmxlbmd0aCA+IDBcbiAgICAgID8gYXdhaXQgdHguaW5zZXJ0KHNjaGVtYS5waXBlbGluZUV2ZW50KS52YWx1ZXMocm93cylcbiAgICAgICAgLm9uQ29uZmxpY3REb05vdGhpbmcoKVxuICAgICAgICAucmV0dXJuaW5nKHtcbiAgICAgICAgICBvcmdJZDogc2NoZW1hLnBpcGVsaW5lRXZlbnQub3JnSWQsXG4gICAgICAgICAgcGlwZWxpbmVJZDogc2NoZW1hLnBpcGVsaW5lRXZlbnQucGlwZWxpbmVJZCxcbiAgICAgICAgICBldmVudFR5cGU6IHNjaGVtYS5waXBlbGluZUV2ZW50LmV2ZW50VHlwZSxcbiAgICAgICAgICBzdGF0dXM6IHNjaGVtYS5waXBlbGluZUV2ZW50LnN0YXR1cyxcbiAgICAgICAgICBzdGFnZU5hbWU6IHNjaGVtYS5waXBlbGluZUV2ZW50LnN0YWdlTmFtZSxcbiAgICAgICAgICBlbnZpcm9ubWVudDogc2NoZW1hLnBpcGVsaW5lRXZlbnQuZW52aXJvbm1lbnQsXG4gICAgICAgICAgLy8gRm9yIHRoZSBwZXItZGVwbG95IHJvbGx1cCBiZWxvdzogZXZlcnl0aGluZyBgZG9yYV9kZXBsb3ltZW50c2AgbmVlZHMsXG4gICAgICAgICAgLy8gdGFrZW4gZnJvbSB0aGUgcm93cyB0aGF0IEFDVFVBTExZIGxhbmRlZCBzbyBhIHJlLWRlbGl2ZXJ5IGNhbm5vdFxuICAgICAgICAgIC8vIHByb2R1Y2UgYSBzZWNvbmQgZGVwbG95LlxuICAgICAgICAgIGV4ZWN1dGlvbklkOiBzY2hlbWEucGlwZWxpbmVFdmVudC5leGVjdXRpb25JZCxcbiAgICAgICAgICBjb21taXRTaGE6IHNjaGVtYS5waXBlbGluZUV2ZW50LmNvbW1pdFNoYSxcbiAgICAgICAgICBjb21taXRUaW1lc3RhbXA6IHNjaGVtYS5waXBlbGluZUV2ZW50LmNvbW1pdFRpbWVzdGFtcCxcbiAgICAgICAgICBjb21taXRDb3VudDogc2NoZW1hLnBpcGVsaW5lRXZlbnQuY29tbWl0Q291bnQsXG4gICAgICAgICAgY29tcGxldGVkQXQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LmNvbXBsZXRlZEF0LFxuICAgICAgICAgIHN0YXJ0ZWRBdDogc2NoZW1hLnBpcGVsaW5lRXZlbnQuc3RhcnRlZEF0LFxuICAgICAgICAgIGNyZWF0ZWRBdDogc2NoZW1hLnBpcGVsaW5lRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgICAgIGRldGFpbDogc2NoZW1hLnBpcGVsaW5lRXZlbnQuZGV0YWlsLFxuICAgICAgICAgIHNvdXJjZUV2ZW50SWQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LnNvdXJjZUV2ZW50SWQsXG4gICAgICAgIH0pXG4gICAgICA6IFtdO1xuXG4gICAgLy8gTG9nIGluc2lkZSB0aGUgdHggc2NvcGUgd2hpbGUgdGhlIG9yZyBzZXQgaXMgaW4gaGFuZC4gV0FSTiwgbm90IGVycm9yOlxuICAgIC8vIGEgbWlzcm91dGVkIHByb2R1Y2VyIGlzIHRoZSBjb21tb24gY2F1c2UsIGJ1dCB0aGUgc2FtZSBsaW5lIGlzIHRoZSBvbmx5XG4gICAgLy8gc2lnbmFsIG9mIGFuIGluamVjdGlvbiBhdHRlbXB0LCBzbyBpdCBuYW1lcyB0aGUgb3JncyBpdCByZWZ1c2VkLlxuICAgIGlmIChmb3JlaWduTG9jYWwgPiAwKSB7XG4gICAgICBsb2dnZXIud2FybignRHJvcHBlZCBpbmdlc3QgZXZlbnRzIGZvciBvcmdzIHRoZSBjYWxsZXIgbWF5IG5vdCB3cml0ZSBmb3InLCB7XG4gICAgICAgIGRyb3BwZWQ6IGZvcmVpZ25Mb2NhbCxcbiAgICAgICAgZm9yZWlnbk9yZ0lkczogWy4uLmZvcmVpZ25PcmdJZHNdLFxuICAgICAgICBhbGxvd2VkT3JnSWRzOiBbLi4uYWxsb3dlZF0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaW52YWxpZFRpbWVMb2NhbCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKCdEcm9wcGVkIGluZ2VzdCBldmVudHMgd2l0aCBpbXBvc3NpYmxlIHRpbWVzdGFtcHMnLCB7XG4gICAgICAgIGRyb3BwZWQ6IGludmFsaWRUaW1lTG9jYWwsXG4gICAgICAgIHJlYXNvbnM6IFsuLi5pbnZhbGlkVGltZVJlYXNvbnNdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluc2VydGVkOiBsYW5kZWQubGVuZ3RoLFxuICAgICAgc2tpcHBlZDogc2tpcHBlZExvY2FsLFxuICAgICAgdW5yZWdpc3RlcmVkUGlwZWxpbmVJZHM6IHVucmVnaXN0ZXJlZExvY2FsLFxuICAgICAgYWZmZWN0ZWRPcmdzOiBbLi4ubmV3IFNldChsYW5kZWQubWFwKHIgPT4gci5vcmdJZCkpXSxcbiAgICAgIGRyb3BwZWRGb3JlaWduT3JnOiBmb3JlaWduTG9jYWwsXG4gICAgICBkcm9wcGVkSW52YWxpZFRpbWU6IGludmFsaWRUaW1lTG9jYWwsXG4gICAgICBmb3JlaWduUGlwZWxpbmVJZHM6IFsuLi5mb3JlaWduUGlwZWxpbmVJZHNMb2NhbF0sXG4gICAgICBpbnNlcnRlZFJvd3M6IGxhbmRlZCxcbiAgICB9O1xuICB9KTtcblxuICBpZiAob25NZXRyaWMpIGVtaXRJbmdlc3RNZXRyaWNzKGluc2VydGVkUm93cywgb25NZXRyaWMpO1xuXG4gIC8vIFBlci1kZXBsb3kgcm9sbHVwLiBBRlRFUiB0aGUgZXZlbnRzIGNvbW1pdCBhbmQgb3V0c2lkZSB0aGVpciB0cmFuc2FjdGlvbjogdGhlXG4gIC8vIGV2ZW50cyBhcmUgdGhlIGR1cmFibGUgcmVjb3JkIGFuZCBgZG9yYV9kZXBsb3ltZW50c2AgaXMgZGVyaXZlZCBmcm9tIHRoZW0sIHNvXG4gIC8vIGEgcm9sbHVwIGZhaWx1cmUgbXVzdCBub3Qgcm9sbCBiYWNrIGFuIGluZ2VzdCB0aGF0IHN1Y2NlZWRlZC4gUmVidWlsZGFibGVcbiAgLy8gZWl0aGVyIHdheS4gYHVwc2VydERlcGxveW1lbnRzYCBuZXZlciB0aHJvd3MgZm9yIHRoYXQgcmVhc29uLlxuICBhd2FpdCB1cHNlcnREZXBsb3ltZW50cyhpbnNlcnRlZFJvd3MpO1xuXG4gIC8vIFN1cmZhY2UgdGhlIHNpbGVudCBza2lwOiBhbiB1bnJlZ2lzdGVyZWQgcGlwZWxpbmUgaWQgdXN1YWxseSBtZWFucyB0aGVcbiAgLy8gcGlwZWxpbmUgaGFzbid0IGNhbGxlZCBQT1NUIC9waXBlbGluZXMvcmVnaXN0cnkgeWV0IChvciBpdHNcbiAgLy8gcGIucGlwZWxpbmUtaWQgdGFnIGlzIG1pc3NpbmcvdW5yZWFkYWJsZSBieSB0aGUgTGFtYmRhKS4gTG9nZ2luZyBpdFxuICAvLyBtYWtlcyBhIGJyb2tlbiBqb2luIHZpc2libGUgaW5zdGVhZCBvZiBsb29raW5nIGxpa2UgXCJubyBhY3Rpdml0eVwiLlxuICBpZiAodW5yZWdpc3RlcmVkUGlwZWxpbmVJZHMubGVuZ3RoID4gMCkge1xuICAgIGxvZ2dlci53YXJuKCdQaXBlbGluZSBldmVudHMgc2tpcHBlZDogcGlwZWxpbmUgaWQgbm90IGZvdW5kIGluIHJlZ2lzdHJ5Jywge1xuICAgICAgY291bnQ6IHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzLmxlbmd0aCxcbiAgICAgIHNhbXBsZTogdW5yZWdpc3RlcmVkUGlwZWxpbmVJZHMuc2xpY2UoMCwgMyksXG4gICAgfSk7XG4gIH1cblxuICAvLyBQb3N0LWNvbW1pdCBjYWNoZSBpbnZhbGlkYXRpb24uIEZpcmUtYW5kLWZvcmdldCB3aXRoIGxvZ2dpbmcg4oCUIFRUTCBpc1xuICAvLyBzaG9ydCBlbm91Z2ggdGhhdCBhIG1pc3NlZCBpbnZhbGlkYXRpb24gc2VsZi1oZWFscy5cbiAgaWYgKGFmZmVjdGVkT3Jncy5sZW5ndGggPiAwKSB7XG4gICAgdm9pZCBQcm9taXNlLmFsbChhZmZlY3RlZE9yZ3MubWFwKChvcmcpID0+XG4gICAgICBpbnZhbGlkYXRlT3JnUmVwb3J0cyhvcmcpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1JlcG9ydGluZyBjYWNoZSBpbnZhbGlkYXRpb24gZmFpbGVkJywgeyBvcmdJZDogb3JnLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICB9KSxcbiAgICApKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5zZXJ0ZWQsXG4gICAgc2tpcHBlZCxcbiAgICB1bnJlZ2lzdGVyZWRQaXBlbGluZUlkcyxcbiAgICBhZmZlY3RlZE9yZ3MsXG4gICAgZHJvcHBlZEZvcmVpZ25PcmcsXG4gICAgZHJvcHBlZEludmFsaWRUaW1lLFxuICAgIGZvcmVpZ25QaXBlbGluZUlkcyxcbiAgICBpbnNlcnRlZEV4ZWN1dGlvbklkczogWy4uLm5ldyBTZXQoaW5zZXJ0ZWRSb3dzLm1hcCgocikgPT4gci5leGVjdXRpb25JZCkuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiAhIWlkKSldLFxuICAgIGluc2VydGVkUGlwZWxpbmVJZHM6IFsuLi5uZXcgU2V0KGluc2VydGVkUm93cy5tYXAoKHIpID0+IHIucGlwZWxpbmVJZCkuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiAhIWlkKSldLFxuICB9O1xufVxuIl19
@@ -90,4 +90,4 @@ export async function getLastDeployedCommit(pipelineId, environment, caller) {
90
90
  return { commitSha: row.commit_sha ?? null, deployedAt: row.completed_at ?? null };
91
91
  });
92
92
  }
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFzdC1kZXBsb3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9sYXN0LWRlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFakQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFVckQsTUFBTSxJQUFJLEdBQXVCLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFFdkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLFVBQWtCLEVBQ2xCLFdBQW9CLEVBQ3BCLE1BQXFCO0lBRXJCLE1BQU0sWUFBWSxHQUFHLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUM7SUFDekUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVyRCxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sRUFBRTthQUN4QixNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7YUFDN0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDN0Qsd0VBQXdFO1FBQ3hFLGdGQUFnRjtRQUNoRixJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTNCLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLEVBQUU7Z0JBQzVFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQzthQUN0RSxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQTZELENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQTs7O2VBRy9GLE1BQU0sQ0FBQyxhQUFhO2dDQUNILFVBQVU7MkJBQ2YsUUFBUSxDQUFDLEtBQUs7WUFDN0IsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUEsdUJBQXVCLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUEsK0JBQStCOzs7Ozs7Ozs7YUFTekYsTUFBTSxDQUFDLGFBQWE7OzZCQUVKLFVBQVU7d0JBQ2YsUUFBUSxDQUFDLEtBQUs7Ozs7S0FJakMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFVixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN0QixPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3JGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBsYXN0IGNvbW1pdCB0aGlzIHBpcGVsaW5lIGRlcGxveWVkIHRvIGFuIGVudmlyb25tZW50IOKAlCB0aGUgZXhjbHVzaXZlIGxvd2VyXG4gKiBib3VuZCB0aGUgZXZlbnRzIExhbWJkYSBuZWVkcyB0byBhc2sgYW4gU0NNIFwid2hhdCBzaGlwcGVkIHNpbmNlP1wiLlxuICpcbiAqIFRoZSBMYW1iZGEga2VlcHMgdGhhdCBib3VuZCBpbiBhIHdhcm0tY29udGFpbmVyIG1hcCAoYGxhc3RTaGFCeVBpcGVsaW5lYCBpblxuICogYHNjbS50c2ApLiBBIGNvbGQgc3RhcnQgZW1wdGllcyBpdCwgc28gdGhlIG5leHQgZGVwbG95IHJlc29sdmVkIGFzIGEgU0lOR0xFXG4gKiBjb21taXQ6IGxlYWQgdGltZSBjYW1lIG91dCBhcyB0aGUgYWdlIG9mIHRoZSBuZXdlc3QgY29tbWl0IGFsb25lIGFuZFxuICogYGNvbW1pdENvdW50YCBhcyAxLCBib3RoIGZhciB0b28gc21hbGwsIGFuZCBub3RoaW5nIGluIHRoZSBkYXRhIG1hcmtlZCB0aGVcbiAqIG51bWJlciBhcyBkZWdyYWRlZC4gTGFtYmRhIGNvbnRhaW5lcnMgcmVjeWNsZSBjb25zdGFudGx5LCBzbyB0aGlzIHdhcyB0aGVcbiAqIGNvbW1vbiBjYXNlLCBub3QgYW4gZWRnZSBvbmUuXG4gKlxuICogUmVhZGluZyBpdCBiYWNrIGZyb20gYGNvbW1pdF9zaGFgIOKAlCBhbHJlYWR5IHBlcnNpc3RlZCBmb3IgZXZlcnkgZXZlbnQgdGhhdFxuICogY2FycmllZCBvbmUg4oCUIG1ha2VzIHRoZSBib3VuZCBzdXJ2aXZlIGEgY29sZCBzdGFydCB3aXRob3V0IGFueSBuZXcgc3RhdGUuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgZXEsIHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB0eXBlIHsgSW5nZXN0Q2FsbGVyIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgeyB3aXRoVGVuYW50VHggfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcbmltcG9ydCB7IGRyaXp6bGVSb3dzIH0gZnJvbSAnLi4vY3J1ZC1zZXJ2aWNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdyZXBvcnRpbmctbGFzdC1kZXBsb3knKTtcblxuLyoqIFRoZSBib3VuZCwgb3IgbnVsbHMgd2hlbiB0aGlzIHBpcGVsaW5lIGhhcyBubyByZWNvcmRlZCBkZXBsb3kgY2FycnlpbmcgYSBjb21taXQuICovXG5leHBvcnQgaW50ZXJmYWNlIExhc3REZXBsb3llZENvbW1pdCB7XG4gIC8qKiBDb21taXQgc2hhIG9mIHRoZSBtb3N0IHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveSB0byB0aGUgZW52aXJvbm1lbnQuICovXG4gIGNvbW1pdFNoYTogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFdoZW4gdGhhdCBkZXBsb3kgY29tcGxldGVkLCBJU08gdGV4dCDigJQgZm9yIHRoZSBjYWxsZXIncyBvd24gbG9nZ2luZy4gKi9cbiAgZGVwbG95ZWRBdDogc3RyaW5nIHwgbnVsbDtcbn1cblxuY29uc3QgTk9ORTogTGFzdERlcGxveWVkQ29tbWl0ID0geyBjb21taXRTaGE6IG51bGwsIGRlcGxveWVkQXQ6IG51bGwgfTtcblxuLyoqXG4gKiBUaGUgY29tbWl0IHNoYSBvZiB0aGUgbW9zdCByZWNlbnQgU1VDQ0VFREVEIGRlcGxveS1zdGFnZSBleGVjdXRpb24gZm9yIHRoaXNcbiAqIHBpcGVsaW5lIOKAlCBuYXJyb3dlZCB0byBvbmUgYGVudmlyb25tZW50YCB3aGVuIGdpdmVuLlxuICpcbiAqIFR3byBzdGVwcywgYmVjYXVzZSB0aGUgdHdvIGZhY3RzIGxpdmUgb24gZGlmZmVyZW50IHJvd3M6IGBlbnZpcm9ubWVudGAgaXNcbiAqIHN0YW1wZWQgb24gdGhlIGRlcGxveSBTVEFHRSBldmVudCwgd2hpbGUgYGNvbW1pdF9zaGFgIHJpZGVzIHRoZSBzb3VyY2VcbiAqIEFDVElPTi9QSVBFTElORSBldmVudCBvZiB0aGUgc2FtZSBleGVjdXRpb24uIFRoZXkgYXJlIGpvaW5lZCBieSBgZXhlY3V0aW9uX2lkYCxcbiAqIGV4YWN0bHkgYXMgdGhlIERPUkEgbGVhZC10aW1lIHF1ZXJ5IGRvZXMgaXQuXG4gKlxuICogYGVudmlyb25tZW50YCBpcyBPUFRJT05BTCBiZWNhdXNlIG9mIHdobyBhc2tzLiBUaGUgZXZlbnRzIExhbWJkYSByZXNvbHZlcyBhXG4gKiBjb21taXQgd2hpbGUgaGFuZGxpbmcgdGhlIFNPVVJDRSBldmVudCwgYW5kIGEgc291cmNlIHN0YWdlIGNhcnJpZXMgbm9cbiAqIGVudmlyb25tZW50IOKAlCB0aGUgZXhlY3V0aW9uIGhhcyBub3QgcmVhY2hlZCBhIGRlcGxveSBzdGFnZSB5ZXQsIHNvIGF0IHRoYXRcbiAqIG1vbWVudCB0aGUgZW52aXJvbm1lbnQgaXMgZ2VudWluZWx5IHVua25vd24uIE9taXR0aW5nIGl0IGFuc3dlcnMgXCJ3aGF0IGRpZCB0aGlzXG4gKiBwaXBlbGluZSBsYXN0IHNoaXAgYW55d2hlcmVcIiwgd2hpY2ggaXMgdGhlIHJpZ2h0IGxvd2VyIGJvdW5kIGZvciBhbiBTQ00gcmFuZ2U7XG4gKiBwYXNzaW5nIGl0IGFuc3dlcnMgcGVyLWVudmlyb25tZW50LCBmb3IgY2FsbGVycyB0aGF0IGtub3cuXG4gKlxuICogVEVOQU5DWS4gYGNhbGxlcmAgaXMgZW5mb3JjZWQgdGhlIHNhbWUgd2F5IGFzIHtAbGluayBpbmdlc3RFdmVudHN9OiB0aGUgb3JnXG4gKiBjb21lcyBmcm9tIHRoZSBwaXBlbGluZSBSRUdJU1RSWSwgbmV2ZXIgZnJvbSB0aGUgY2FsbGVyLCBhbmQgYSBwaXBlbGluZSBvdXRzaWRlXG4gKiB0aGUgY2FsbGVyJ3MgYWxsb3ctbGlzdCByZXR1cm5zIG5vdGhpbmcuIFdpdGhvdXQgdGhpcyB0aGUgZW5kcG9pbnQgd291bGQgaGFuZFxuICogYW55IGByZXBvcnRpbmc6aW5nZXN0YCBob2xkZXIgYW5vdGhlciB0ZW5hbnQncyBjb21taXQgaGlzdG9yeSDigJQgdGhlIHNhbWUgaG9sZVxuICogdGhlIGluZ2VzdCB0ZW5hbmN5IGNoZWNrIGNsb3NlcyBvbiB0aGUgd3JpdGUgc2lkZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExhc3REZXBsb3llZENvbW1pdChcbiAgcGlwZWxpbmVJZDogc3RyaW5nLFxuICBlbnZpcm9ubWVudD86IHN0cmluZyxcbiAgY2FsbGVyPzogSW5nZXN0Q2FsbGVyLFxuKTogUHJvbWlzZTxMYXN0RGVwbG95ZWRDb21taXQ+IHtcbiAgY29uc3QgdW5yZXN0cmljdGVkID0gY2FsbGVyID09PSB1bmRlZmluZWQgfHwgY2FsbGVyLmNyb3NzVGVuYW50ID09PSB0cnVlO1xuICBjb25zdCBhbGxvd2VkID0gbmV3IFNldChjYWxsZXI/LmFsbG93ZWRPcmdJZHMgPz8gW10pO1xuXG4gIHJldHVybiB3aXRoVGVuYW50VHgoYXN5bmMgKHR4KSA9PiB7XG4gICAgY29uc3QgW3JlZ2lzdHJ5XSA9IGF3YWl0IHR4XG4gICAgICAuc2VsZWN0KHsgb3JnSWQ6IHNjaGVtYS5waXBlbGluZVJlZ2lzdHJ5Lm9yZ0lkIH0pXG4gICAgICAuZnJvbShzY2hlbWEucGlwZWxpbmVSZWdpc3RyeSlcbiAgICAgIC53aGVyZShlcShzY2hlbWEucGlwZWxpbmVSZWdpc3RyeS5waXBlbGluZUlkLCBwaXBlbGluZUlkKSk7XG4gICAgLy8gVW5yZWdpc3RlcmVkIHBpcGVsaW5lOiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIFwibm8gZGVwbG95cyB5ZXRcIiB0byB0aGVcbiAgICAvLyBjYWxsZXIsIGRlbGliZXJhdGVseSDigJQgYW4gdW5yZWdpc3RlcmVkIGlkIG11c3Qgbm90IGNvbmZpcm0gb3IgZGVueSBleGlzdGVuY2UuXG4gICAgaWYgKCFyZWdpc3RyeSkgcmV0dXJuIE5PTkU7XG5cbiAgICBpZiAoIXVucmVzdHJpY3RlZCAmJiAhYWxsb3dlZC5oYXMocmVnaXN0cnkub3JnSWQpKSB7XG4gICAgICBsb2dnZXIud2FybignUmVmdXNlZCBsYXN0LWRlcGxveS1jb21taXQgbG9va3VwIG91dHNpZGUgdGhlIGNhbGxlciBvcmcgc2NvcGUnLCB7XG4gICAgICAgIHBpcGVsaW5lSWQsIGZvcmVpZ25PcmdJZDogcmVnaXN0cnkub3JnSWQsIGFsbG93ZWRPcmdJZHM6IFsuLi5hbGxvd2VkXSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIE5PTkU7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93cyA9IGRyaXp6bGVSb3dzPHsgY29tbWl0X3NoYTogc3RyaW5nIHwgbnVsbDsgY29tcGxldGVkX2F0OiBzdHJpbmcgfCBudWxsIH0+KChhd2FpdCB0eC5leGVjdXRlKHNxbGBcbiAgICAgIFdJVEggbGFzdF9kZXBsb3kgQVMgKFxuICAgICAgICBTRUxFQ1QgZS5leGVjdXRpb25faWQgQVMgZXhlY3V0aW9uX2lkLCBlLmNvbXBsZXRlZF9hdCBBUyBjb21wbGV0ZWRfYXRcbiAgICAgICAgRlJPTSAke3NjaGVtYS5waXBlbGluZUV2ZW50fSBlXG4gICAgICAgIFdIRVJFIGUucGlwZWxpbmVfaWQgPSAke3BpcGVsaW5lSWR9XG4gICAgICAgICAgQU5EIGUub3JnX2lkID0gJHtyZWdpc3RyeS5vcmdJZH1cbiAgICAgICAgICAke2Vudmlyb25tZW50ID8gc3FsYEFORCBlLmVudmlyb25tZW50ID0gJHtlbnZpcm9ubWVudH1gIDogc3FsYEFORCBlLmVudmlyb25tZW50IElTIE5PVCBOVUxMYH1cbiAgICAgICAgICBBTkQgZS5ldmVudF90eXBlID0gJ1NUQUdFJ1xuICAgICAgICAgIEFORCBlLnN0YXR1cyA9ICdTVUNDRUVERUQnXG4gICAgICAgICAgQU5EIGUuY29tcGxldGVkX2F0IElTIE5PVCBOVUxMXG4gICAgICAgIE9SREVSIEJZIGUuY29tcGxldGVkX2F0IERFU0NcbiAgICAgICAgTElNSVQgMVxuICAgICAgKVxuICAgICAgU0VMRUNUIGMuY29tbWl0X3NoYSBBUyBjb21taXRfc2hhLCBsZC5jb21wbGV0ZWRfYXQ6OnRleHQgQVMgY29tcGxldGVkX2F0XG4gICAgICBGUk9NIGxhc3RfZGVwbG95IGxkXG4gICAgICBKT0lOICR7c2NoZW1hLnBpcGVsaW5lRXZlbnR9IGNcbiAgICAgICAgT04gYy5leGVjdXRpb25faWQgPSBsZC5leGVjdXRpb25faWRcbiAgICAgICBBTkQgYy5waXBlbGluZV9pZCA9ICR7cGlwZWxpbmVJZH1cbiAgICAgICBBTkQgYy5vcmdfaWQgPSAke3JlZ2lzdHJ5Lm9yZ0lkfVxuICAgICAgV0hFUkUgYy5jb21taXRfc2hhIElTIE5PVCBOVUxMXG4gICAgICBPUkRFUiBCWSBjLmNyZWF0ZWRfYXQgREVTQ1xuICAgICAgTElNSVQgMVxuICAgIGApKS5yb3dzKTtcblxuICAgIGNvbnN0IHJvdyA9IHJvd3NbMF07XG4gICAgaWYgKCFyb3cpIHJldHVybiBOT05FO1xuICAgIHJldHVybiB7IGNvbW1pdFNoYTogcm93LmNvbW1pdF9zaGEgPz8gbnVsbCwgZGVwbG95ZWRBdDogcm93LmNvbXBsZXRlZF9hdCA/PyBudWxsIH07XG4gIH0pO1xufVxuIl19
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFzdC1kZXBsb3kuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcmVwb3J0aW5nL2xhc3QtZGVwbG95LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQVVyRCxNQUFNLElBQUksR0FBdUIsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUV2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsVUFBa0IsRUFDbEIsV0FBb0IsRUFDcEIsTUFBcUI7SUFFckIsTUFBTSxZQUFZLEdBQUcsTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQztJQUN6RSxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXJELE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUMvQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxFQUFFO2FBQ3hCLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzthQUM3QixLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM3RCx3RUFBd0U7UUFDeEUsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFM0IsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxDQUFDLElBQUksQ0FBQyxnRUFBZ0UsRUFBRTtnQkFDNUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO2FBQ3RFLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBNkQsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFBOzs7ZUFHL0YsTUFBTSxDQUFDLGFBQWE7Z0NBQ0gsVUFBVTsyQkFDZixRQUFRLENBQUMsS0FBSztZQUM3QixXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQSx1QkFBdUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQSwrQkFBK0I7Ozs7Ozs7OzthQVN6RixNQUFNLENBQUMsYUFBYTs7NkJBRUosVUFBVTt3QkFDZixRQUFRLENBQUMsS0FBSzs7OztLQUlqQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVWLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3RCLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFLENBQUM7SUFDckYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIGxhc3QgY29tbWl0IHRoaXMgcGlwZWxpbmUgZGVwbG95ZWQgdG8gYW4gZW52aXJvbm1lbnQg4oCUIHRoZSBleGNsdXNpdmUgbG93ZXJcbiAqIGJvdW5kIHRoZSBldmVudHMgTGFtYmRhIG5lZWRzIHRvIGFzayBhbiBTQ00gXCJ3aGF0IHNoaXBwZWQgc2luY2U/XCIuXG4gKlxuICogVGhlIExhbWJkYSBrZWVwcyB0aGF0IGJvdW5kIGluIGEgd2FybS1jb250YWluZXIgbWFwIChgbGFzdFNoYUJ5UGlwZWxpbmVgIGluXG4gKiBgc2NtLnRzYCkuIEEgY29sZCBzdGFydCBlbXB0aWVzIGl0LCBzbyB0aGUgbmV4dCBkZXBsb3kgcmVzb2x2ZWQgYXMgYSBTSU5HTEVcbiAqIGNvbW1pdDogbGVhZCB0aW1lIGNhbWUgb3V0IGFzIHRoZSBhZ2Ugb2YgdGhlIG5ld2VzdCBjb21taXQgYWxvbmUgYW5kXG4gKiBgY29tbWl0Q291bnRgIGFzIDEsIGJvdGggZmFyIHRvbyBzbWFsbCwgYW5kIG5vdGhpbmcgaW4gdGhlIGRhdGEgbWFya2VkIHRoZVxuICogbnVtYmVyIGFzIGRlZ3JhZGVkLiBMYW1iZGEgY29udGFpbmVycyByZWN5Y2xlIGNvbnN0YW50bHksIHNvIHRoaXMgd2FzIHRoZVxuICogY29tbW9uIGNhc2UsIG5vdCBhbiBlZGdlIG9uZS5cbiAqXG4gKiBSZWFkaW5nIGl0IGJhY2sgZnJvbSBgY29tbWl0X3NoYWAg4oCUIGFscmVhZHkgcGVyc2lzdGVkIGZvciBldmVyeSBldmVudCB0aGF0XG4gKiBjYXJyaWVkIG9uZSDigJQgbWFrZXMgdGhlIGJvdW5kIHN1cnZpdmUgYSBjb2xkIHN0YXJ0IHdpdGhvdXQgYW55IG5ldyBzdGF0ZS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBlcSwgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHR5cGUgeyBJbmdlc3RDYWxsZXIgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL2RyaXp6bGUtc2NoZW1hLmpzJztcbmltcG9ydCB7IHdpdGhUZW5hbnRUeCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuaW1wb3J0IHsgZHJpenpsZVJvd3MgfSBmcm9tICcuLi9jcnVkLXNlcnZpY2UuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3JlcG9ydGluZy1sYXN0LWRlcGxveScpO1xuXG4vKiogVGhlIGJvdW5kLCBvciBudWxscyB3aGVuIHRoaXMgcGlwZWxpbmUgaGFzIG5vIHJlY29yZGVkIGRlcGxveSBjYXJyeWluZyBhIGNvbW1pdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFzdERlcGxveWVkQ29tbWl0IHtcbiAgLyoqIENvbW1pdCBzaGEgb2YgdGhlIG1vc3QgcmVjZW50IHN1Y2Nlc3NmdWwgZGVwbG95IHRvIHRoZSBlbnZpcm9ubWVudC4gKi9cbiAgY29tbWl0U2hhOiBzdHJpbmcgfCBudWxsO1xuICAvKiogV2hlbiB0aGF0IGRlcGxveSBjb21wbGV0ZWQsIElTTyB0ZXh0IOKAlCBmb3IgdGhlIGNhbGxlcidzIG93biBsb2dnaW5nLiAqL1xuICBkZXBsb3llZEF0OiBzdHJpbmcgfCBudWxsO1xufVxuXG5jb25zdCBOT05FOiBMYXN0RGVwbG95ZWRDb21taXQgPSB7IGNvbW1pdFNoYTogbnVsbCwgZGVwbG95ZWRBdDogbnVsbCB9O1xuXG4vKipcbiAqIFRoZSBjb21taXQgc2hhIG9mIHRoZSBtb3N0IHJlY2VudCBTVUNDRUVERUQgZGVwbG95LXN0YWdlIGV4ZWN1dGlvbiBmb3IgdGhpc1xuICogcGlwZWxpbmUg4oCUIG5hcnJvd2VkIHRvIG9uZSBgZW52aXJvbm1lbnRgIHdoZW4gZ2l2ZW4uXG4gKlxuICogVHdvIHN0ZXBzLCBiZWNhdXNlIHRoZSB0d28gZmFjdHMgbGl2ZSBvbiBkaWZmZXJlbnQgcm93czogYGVudmlyb25tZW50YCBpc1xuICogc3RhbXBlZCBvbiB0aGUgZGVwbG95IFNUQUdFIGV2ZW50LCB3aGlsZSBgY29tbWl0X3NoYWAgcmlkZXMgdGhlIHNvdXJjZVxuICogQUNUSU9OL1BJUEVMSU5FIGV2ZW50IG9mIHRoZSBzYW1lIGV4ZWN1dGlvbi4gVGhleSBhcmUgam9pbmVkIGJ5IGBleGVjdXRpb25faWRgLFxuICogZXhhY3RseSBhcyB0aGUgRE9SQSBsZWFkLXRpbWUgcXVlcnkgZG9lcyBpdC5cbiAqXG4gKiBgZW52aXJvbm1lbnRgIGlzIE9QVElPTkFMIGJlY2F1c2Ugb2Ygd2hvIGFza3MuIFRoZSBldmVudHMgTGFtYmRhIHJlc29sdmVzIGFcbiAqIGNvbW1pdCB3aGlsZSBoYW5kbGluZyB0aGUgU09VUkNFIGV2ZW50LCBhbmQgYSBzb3VyY2Ugc3RhZ2UgY2FycmllcyBub1xuICogZW52aXJvbm1lbnQg4oCUIHRoZSBleGVjdXRpb24gaGFzIG5vdCByZWFjaGVkIGEgZGVwbG95IHN0YWdlIHlldCwgc28gYXQgdGhhdFxuICogbW9tZW50IHRoZSBlbnZpcm9ubWVudCBpcyBnZW51aW5lbHkgdW5rbm93bi4gT21pdHRpbmcgaXQgYW5zd2VycyBcIndoYXQgZGlkIHRoaXNcbiAqIHBpcGVsaW5lIGxhc3Qgc2hpcCBhbnl3aGVyZVwiLCB3aGljaCBpcyB0aGUgcmlnaHQgbG93ZXIgYm91bmQgZm9yIGFuIFNDTSByYW5nZTtcbiAqIHBhc3NpbmcgaXQgYW5zd2VycyBwZXItZW52aXJvbm1lbnQsIGZvciBjYWxsZXJzIHRoYXQga25vdy5cbiAqXG4gKiBURU5BTkNZLiBgY2FsbGVyYCBpcyBlbmZvcmNlZCB0aGUgc2FtZSB3YXkgYXMge0BsaW5rIGluZ2VzdEV2ZW50c306IHRoZSBvcmdcbiAqIGNvbWVzIGZyb20gdGhlIHBpcGVsaW5lIFJFR0lTVFJZLCBuZXZlciBmcm9tIHRoZSBjYWxsZXIsIGFuZCBhIHBpcGVsaW5lIG91dHNpZGVcbiAqIHRoZSBjYWxsZXIncyBhbGxvdy1saXN0IHJldHVybnMgbm90aGluZy4gV2l0aG91dCB0aGlzIHRoZSBlbmRwb2ludCB3b3VsZCBoYW5kXG4gKiBhbnkgYHJlcG9ydGluZzppbmdlc3RgIGhvbGRlciBhbm90aGVyIHRlbmFudCdzIGNvbW1pdCBoaXN0b3J5IOKAlCB0aGUgc2FtZSBob2xlXG4gKiB0aGUgaW5nZXN0IHRlbmFuY3kgY2hlY2sgY2xvc2VzIG9uIHRoZSB3cml0ZSBzaWRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGFzdERlcGxveWVkQ29tbWl0KFxuICBwaXBlbGluZUlkOiBzdHJpbmcsXG4gIGVudmlyb25tZW50Pzogc3RyaW5nLFxuICBjYWxsZXI/OiBJbmdlc3RDYWxsZXIsXG4pOiBQcm9taXNlPExhc3REZXBsb3llZENvbW1pdD4ge1xuICBjb25zdCB1bnJlc3RyaWN0ZWQgPSBjYWxsZXIgPT09IHVuZGVmaW5lZCB8fCBjYWxsZXIuY3Jvc3NUZW5hbnQgPT09IHRydWU7XG4gIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0KGNhbGxlcj8uYWxsb3dlZE9yZ0lkcyA/PyBbXSk7XG5cbiAgcmV0dXJuIHdpdGhUZW5hbnRUeChhc3luYyAodHgpID0+IHtcbiAgICBjb25zdCBbcmVnaXN0cnldID0gYXdhaXQgdHhcbiAgICAgIC5zZWxlY3QoeyBvcmdJZDogc2NoZW1hLnBpcGVsaW5lUmVnaXN0cnkub3JnSWQgfSlcbiAgICAgIC5mcm9tKHNjaGVtYS5waXBlbGluZVJlZ2lzdHJ5KVxuICAgICAgLndoZXJlKGVxKHNjaGVtYS5waXBlbGluZVJlZ2lzdHJ5LnBpcGVsaW5lSWQsIHBpcGVsaW5lSWQpKTtcbiAgICAvLyBVbnJlZ2lzdGVyZWQgcGlwZWxpbmU6IGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gXCJubyBkZXBsb3lzIHlldFwiIHRvIHRoZVxuICAgIC8vIGNhbGxlciwgZGVsaWJlcmF0ZWx5IOKAlCBhbiB1bnJlZ2lzdGVyZWQgaWQgbXVzdCBub3QgY29uZmlybSBvciBkZW55IGV4aXN0ZW5jZS5cbiAgICBpZiAoIXJlZ2lzdHJ5KSByZXR1cm4gTk9ORTtcblxuICAgIGlmICghdW5yZXN0cmljdGVkICYmICFhbGxvd2VkLmhhcyhyZWdpc3RyeS5vcmdJZCkpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdSZWZ1c2VkIGxhc3QtZGVwbG95LWNvbW1pdCBsb29rdXAgb3V0c2lkZSB0aGUgY2FsbGVyIG9yZyBzY29wZScsIHtcbiAgICAgICAgcGlwZWxpbmVJZCwgZm9yZWlnbk9yZ0lkOiByZWdpc3RyeS5vcmdJZCwgYWxsb3dlZE9yZ0lkczogWy4uLmFsbG93ZWRdLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gTk9ORTtcbiAgICB9XG5cbiAgICBjb25zdCByb3dzID0gZHJpenpsZVJvd3M8eyBjb21taXRfc2hhOiBzdHJpbmcgfCBudWxsOyBjb21wbGV0ZWRfYXQ6IHN0cmluZyB8IG51bGwgfT4oKGF3YWl0IHR4LmV4ZWN1dGUoc3FsYFxuICAgICAgV0lUSCBsYXN0X2RlcGxveSBBUyAoXG4gICAgICAgIFNFTEVDVCBlLmV4ZWN1dGlvbl9pZCBBUyBleGVjdXRpb25faWQsIGUuY29tcGxldGVkX2F0IEFTIGNvbXBsZXRlZF9hdFxuICAgICAgICBGUk9NICR7c2NoZW1hLnBpcGVsaW5lRXZlbnR9IGVcbiAgICAgICAgV0hFUkUgZS5waXBlbGluZV9pZCA9ICR7cGlwZWxpbmVJZH1cbiAgICAgICAgICBBTkQgZS5vcmdfaWQgPSAke3JlZ2lzdHJ5Lm9yZ0lkfVxuICAgICAgICAgICR7ZW52aXJvbm1lbnQgPyBzcWxgQU5EIGUuZW52aXJvbm1lbnQgPSAke2Vudmlyb25tZW50fWAgOiBzcWxgQU5EIGUuZW52aXJvbm1lbnQgSVMgTk9UIE5VTExgfVxuICAgICAgICAgIEFORCBlLmV2ZW50X3R5cGUgPSAnU1RBR0UnXG4gICAgICAgICAgQU5EIGUuc3RhdHVzID0gJ1NVQ0NFRURFRCdcbiAgICAgICAgICBBTkQgZS5jb21wbGV0ZWRfYXQgSVMgTk9UIE5VTExcbiAgICAgICAgT1JERVIgQlkgZS5jb21wbGV0ZWRfYXQgREVTQ1xuICAgICAgICBMSU1JVCAxXG4gICAgICApXG4gICAgICBTRUxFQ1QgYy5jb21taXRfc2hhIEFTIGNvbW1pdF9zaGEsIGxkLmNvbXBsZXRlZF9hdDo6dGV4dCBBUyBjb21wbGV0ZWRfYXRcbiAgICAgIEZST00gbGFzdF9kZXBsb3kgbGRcbiAgICAgIEpPSU4gJHtzY2hlbWEucGlwZWxpbmVFdmVudH0gY1xuICAgICAgICBPTiBjLmV4ZWN1dGlvbl9pZCA9IGxkLmV4ZWN1dGlvbl9pZFxuICAgICAgIEFORCBjLnBpcGVsaW5lX2lkID0gJHtwaXBlbGluZUlkfVxuICAgICAgIEFORCBjLm9yZ19pZCA9ICR7cmVnaXN0cnkub3JnSWR9XG4gICAgICBXSEVSRSBjLmNvbW1pdF9zaGEgSVMgTk9UIE5VTExcbiAgICAgIE9SREVSIEJZIGMuY3JlYXRlZF9hdCBERVNDXG4gICAgICBMSU1JVCAxXG4gICAgYCkpLnJvd3MpO1xuXG4gICAgY29uc3Qgcm93ID0gcm93c1swXTtcbiAgICBpZiAoIXJvdykgcmV0dXJuIE5PTkU7XG4gICAgcmV0dXJuIHsgY29tbWl0U2hhOiByb3cuY29tbWl0X3NoYSA/PyBudWxsLCBkZXBsb3llZEF0OiByb3cuY29tcGxldGVkX2F0ID8/IG51bGwgfTtcbiAgfSk7XG59XG4iXX0=
@@ -149,4 +149,4 @@ export function evaluateNeedsAttention(input) {
149
149
  export function thresholdsFrom(stored) {
150
150
  return { ...DEFAULT_THRESHOLDS, ...(stored ?? {}) };
151
151
  }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVlZHMtYXR0ZW50aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvbmVlZHMtYXR0ZW50aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFzQ3RDOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUF1QyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xGLGNBQWMsRUFBRSxFQUFFO0lBQ2xCLGNBQWMsRUFBRSxFQUFFO0lBQ2xCLG1CQUFtQixFQUFFLENBQUM7SUFDdEIsU0FBUyxFQUFFLENBQUM7SUFDWix1QkFBdUIsRUFBRSxFQUFFO0NBQzVCLENBQUMsQ0FBQztBQStDSCx1REFBdUQ7QUFDdkQsU0FBUyxRQUFRLENBQUMsRUFBVTtJQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNwQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqQyxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNqRSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBcUI7SUFDMUQsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixFQUFFLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3pELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxJ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LENBQUM7Z0JBQ1QsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO2dCQUMxQixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7Z0JBQzlCLFFBQVE7Z0JBQ1IsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUTthQUMxRSxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekIsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRO1lBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBNEQ7SUFDekYsT0FBTyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXaGljaCBwaXBlbGluZXMgbmVlZCBzb21lYm9keSB0byBsb29rIGF0IHRoZW0sIGFuZCBXSFkuXG4gKlxuICogVGhlIHJlc3Qgb2YgdGhlIHJlcG9ydCBkZXNjcmliZXM7IHRoaXMgZGVjaWRlcy4gVGhhdCBpcyBhIG1lYW5pbmdmdWwgZGlmZmVyZW5jZSxcbiAqIGFuZCBpdCBpcyB3aHkgZXZlcnkgZmluZGluZyBjYXJyaWVzIGl0cyBFVklERU5DRSDigJQgXCJwOTUgdXAgMzElLCA0bTEycyDihpIgNW0zMXNcIixcbiAqIG5vdCBcInBlcmZvcm1hbmNlIGRlZ3JhZGVkXCIuIEEgZmxhZyB3aXRob3V0IHRoZSBudW1iZXIgYmVoaW5kIGl0IGlzIGFuIG9waW5pb24gdGhlXG4gKiByZWFkZXIgaGFzIHRvIHRha2Ugb24gdHJ1c3QsIGFuZCB0aGUgZmlyc3QgdGltZSBvbmUgaXMgd3JvbmcgdGhlIHdob2xlIHNlY3Rpb25cbiAqIHN0b3BzIGJlaW5nIHJlYWQuXG4gKlxuICogVEhFIFRIUkVTSE9MRFMgQVJFIE9SRy1DT05GSUdVUkFCTEUsIHdpdGggZGVmYXVsdHMgc3RhdGVkIGJlbG93LiBUaGV5IGhhdmUgdG8gYmU6XG4gKiA5MCUgc3VjY2VzcyBpcyBhIGNyaXNpcyBmb3IgYSBkZXBsb3kgcGlwZWxpbmUgYW5kIHVucmVtYXJrYWJsZSBmb3IgYSBmbGFreVxuICogaW50ZWdyYXRpb24gc3VpdGUgc29tZWJvZHkgaXMgYWxyZWFkeSByZXdyaXRpbmcsIGFuZCBhIHBsYXRmb3JtLWltcG9zZWQgbnVtYmVyXG4gKiB3b3VsZCBtYWtlIHRoZSBzZWN0aW9uIHdyb25nIGZvciBvbmUgb2YgdGhlbSBieSBjb25zdHJ1Y3Rpb24uXG4gKlxuICogV0hBVCBJUyBERUxJQkVSQVRFTFkgTk9UIEEgUlVMRTogYW55dGhpbmcgcGVyLXBlcnNvbiwgYW55dGhpbmcgYWJvdXQgdm9sdW1lXG4gKiAoXCJ0aGlzIHRlYW0gc2hpcHBlZCBsZXNzIHRoYW4gdGhhdCB0ZWFtXCIpLCBhbmQgYW55dGhpbmcgY29tcGFyaW5nIG9uZSB0ZWFtIHRvXG4gKiBhbm90aGVyLiBUaG9zZSBhcmUgdGhlIGZsYWdzIHRoYXQgdHVybiBhIGRlbGl2ZXJ5IHJlcG9ydCBpbnRvIGEgcGVyZm9ybWFuY2VcbiAqIHJldmlldywgd2hpY2ggaXMgdGhlIGZhaWx1cmUgbW9kZSB0aGlzIHdob2xlIGZlYXR1cmUgaXMgdHJ5aW5nIHRvIGF2b2lkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUGlwZWxpbmVCcmVha2Rvd25Sb3cgfSBmcm9tICcuL2FuYWx5dGljcy1xdWVyaWVzLmpzJztcblxuLyoqIFRoZSB0aHJlc2hvbGRzIGEgcnVsZSB0cmlwcyBhdC4gRXZlcnkgb25lIGlzIG92ZXJyaWRhYmxlIHBlciBvcmcuICovXG5leHBvcnQgaW50ZXJmYWNlIE5lZWRzQXR0ZW50aW9uVGhyZXNob2xkcyB7XG4gIC8qKiBTdWNjZXNzIHJhdGUgYmVsb3cgdGhpcywgYXMgYSBwZXJjZW50YWdlLiAqL1xuICBzdWNjZXNzUmF0ZVBjdDogbnVtYmVyO1xuICAvKiogcDk1IGR1cmF0aW9uIHVwIGJ5IG1vcmUgdGhhbiB0aGlzLCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHByZXZpb3VzIHBlcmlvZC4gKi9cbiAgcDk1SW5jcmVhc2VQY3Q6IG51bWJlcjtcbiAgLyoqIFRoaXMgbWFueSBjb25zZWN1dGl2ZSBmYWlsdXJlcy4gKi9cbiAgY29uc2VjdXRpdmVGYWlsdXJlczogbnVtYmVyO1xuICAvKiogTm8gc3VjY2Vzc2Z1bCBydW4gaW4gdGhpcyBtYW55IGRheXMuICovXG4gIHN0YWxlRGF5czogbnVtYmVyO1xuICAvKiogQSBmYWlsdXJlIHdpdGhpbiB0aGlzIG1hbnkgaG91cnMgb2YgYSBwaXBlbGluZSBjb25maWd1cmF0aW9uIGNoYW5nZS4gKi9cbiAgZmFpbHVyZUFmdGVyQ2hhbmdlSG91cnM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdHMuXG4gKlxuICogRWFjaCBpcyB0aGUgcG9pbnQgYXQgd2hpY2ggYSByZWFzb25hYmxlIGxlYWQgd291bGQgd2FudCB0byBrbm93LCBub3QgdGhlIHBvaW50IGF0XG4gKiB3aGljaCBzb21ldGhpbmcgaXMgZGVmaW5pdGVseSB3cm9uZyDigJQgdGhlIHNlY3Rpb24ncyBqb2IgaXMgdG8gcmFpc2UgYXR0ZW50aW9uLFxuICogYW5kIGEgdGhyZXNob2xkIHNldCB3aGVyZSB0aGUgcHJvYmxlbSBpcyBhbHJlYWR5IHVuZGVuaWFibGUgcmFpc2VzIGl0IHRvbyBsYXRlLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USFJFU0hPTERTOiBSZWFkb25seTxOZWVkc0F0dGVudGlvblRocmVzaG9sZHM+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHN1Y2Nlc3NSYXRlUGN0OiA5MCxcbiAgcDk1SW5jcmVhc2VQY3Q6IDI1LFxuICBjb25zZWN1dGl2ZUZhaWx1cmVzOiAzLFxuICBzdGFsZURheXM6IDcsXG4gIGZhaWx1cmVBZnRlckNoYW5nZUhvdXJzOiAyNCxcbn0pO1xuXG4vKiogV2h5IGEgcGlwZWxpbmUgd2FzIGZsYWdnZWQuIFRoZSBpZCBpcyBzdGFibGU7IHRoZSBldmlkZW5jZSBpcyBodW1hbi4gKi9cbmV4cG9ydCB0eXBlIEF0dGVudGlvblJ1bGVJZCA9XG4gIHwgJ2xvd19zdWNjZXNzX3JhdGUnXG4gIHwgJ3Nsb3dlcl9wOTUnXG4gIHwgJ2NvbnNlY3V0aXZlX2ZhaWx1cmVzJ1xuICB8ICdub19yZWNlbnRfc3VjY2VzcydcbiAgfCAnZmFpbGVkX2FmdGVyX2NvbmZpZ19jaGFuZ2UnXG4gIHwgJ3Z1bG5lcmFibGVfcGx1Z2luJ1xuICB8ICdub19kZXBsb3lfdHJhY2tpbmcnO1xuXG4vKiogT25lIGZpbmRpbmcgYWJvdXQgb25lIHBpcGVsaW5lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRlbnRpb25GaW5kaW5nIHtcbiAgcnVsZTogQXR0ZW50aW9uUnVsZUlkO1xuICAvKiogVGhlIHNlbnRlbmNlIGEgbGVhZCByZWFkcywgd2l0aCB0aGUgbnVtYmVyIGluIGl0LiAqL1xuICBldmlkZW5jZTogc3RyaW5nO1xuICAvKiogYGhpZ2hgIG1lYW5zIFwidGhpcyBpcyBicm9rZW4gbm93XCI7IGBtZWRpdW1gIG1lYW5zIFwidGhpcyBpcyBkcmlmdGluZ1wiLiAqL1xuICBzZXZlcml0eTogJ2hpZ2gnIHwgJ21lZGl1bSc7XG59XG5cbi8qKiBBIGZsYWdnZWQgcGlwZWxpbmUgYW5kIGV2ZXJ5dGhpbmcgdGhhdCB0cmlwcGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRlbnRpb25JdGVtIHtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGZpbmRpbmdzOiBBdHRlbnRpb25GaW5kaW5nW107XG4gIC8qKiBUaGUgd29yc3Qgc2V2ZXJpdHkgYW1vbmcgdGhlIGZpbmRpbmdzIOKAlCB3aGF0IHRoZSBsaXN0IHNvcnRzIG9uLiAqL1xuICBzZXZlcml0eTogJ2hpZ2gnIHwgJ21lZGl1bSc7XG59XG5cbi8qKiBXaGF0IHRoZSBldmFsdWF0b3IgbmVlZHMgYmV5b25kIHRoZSBjdXJyZW50IHBlcmlvZCdzIGJyZWFrZG93bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXR0ZW50aW9uSW5wdXQge1xuICBjdXJyZW50OiByZWFkb25seSBQaXBlbGluZUJyZWFrZG93blJvd1tdO1xuICAvKiogVGhlIHByZXZpb3VzIHBlcmlvZCwgZm9yIHRoZSBwOTUgY29tcGFyaXNvbi4gQWJzZW50IOKHkiB0aGF0IHJ1bGUgaXMgc2tpcHBlZC4gKi9cbiAgcHJldmlvdXM/OiByZWFkb25seSBQaXBlbGluZUJyZWFrZG93blJvd1tdO1xuICAvKiogUGVyIHBpcGVsaW5lOiBjb25zZWN1dGl2ZSBmYWlsdXJlcyBlbmRpbmcgdGhlIHBlcmlvZCwgYW5kIGxhc3Qgc3VjY2Vzcy4gKi9cbiAgc3RyZWFrcz86IFJlYWRvbmx5TWFwPHN0cmluZywgeyBjb25zZWN1dGl2ZUZhaWx1cmVzOiBudW1iZXI7IGxhc3RTdWNjZXNzQXQ6IERhdGUgfCBudWxsIH0+O1xuICAvKiogUGVyIHBpcGVsaW5lOiB0aGUgbW9zdCByZWNlbnQgY29uZmlnIGNoYW5nZSwgZnJvbSB0aGUgYXVkaXQgdHJhaWwuICovXG4gIGNvbmZpZ0NoYW5nZXM/OiBSZWFkb25seU1hcDxzdHJpbmcsIERhdGU+O1xuICAvKiogUGlwZWxpbmVzIHdpdGggYW4gb3BlbiBDcml0aWNhbCBwbHVnaW4gZXhwb3N1cmUuICovXG4gIHZ1bG5lcmFibGVQaXBlbGluZXM/OiBSZWFkb25seVNldDxzdHJpbmc+O1xuICAvKiogUGlwZWxpbmVzIHRoYXQgcmFuIGJ1dCBwcm9kdWNlZCBubyBkZXBsb3kgcm93cyDigJQgRE9SQSBjYW5ub3Qgc2VlIHRoZW0uICovXG4gIHVudHJhY2tlZFBpcGVsaW5lcz86IFJlYWRvbmx5U2V0PHN0cmluZz47XG4gIHRocmVzaG9sZHM/OiBQYXJ0aWFsPE5lZWRzQXR0ZW50aW9uVGhyZXNob2xkcz47XG4gIG5vdz86IERhdGU7XG59XG5cbi8qKiBgMjcyMDAwYCDihpIgYDRtMzJzYCwgZm9yIGV2aWRlbmNlIGEgcGVyc29uIHJlYWRzLiAqL1xuZnVuY3Rpb24gZHVyYXRpb24obXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHRvdGFsID0gTWF0aC5yb3VuZChtcyAvIDEwMDApO1xuICBjb25zdCBtID0gTWF0aC5mbG9vcih0b3RhbCAvIDYwKTtcbiAgY29uc3QgcyA9IHRvdGFsICUgNjA7XG4gIHJldHVybiBtID4gMCA/IGAke219bSR7U3RyaW5nKHMpLnBhZFN0YXJ0KDIsICcwJyl9c2AgOiBgJHtzfXNgO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlIGV2ZXJ5IHJ1bGUgYWdhaW5zdCB0aGUgcGVyaW9kLlxuICpcbiAqIFJldHVybnMgb25seSB0aGUgcGlwZWxpbmVzIHRoYXQgdHJpcHBlZCBzb21ldGhpbmcsIHdvcnN0IGZpcnN0LCBzbyB0aGUgc2VjdGlvbiBpc1xuICogYSBzaG9ydCBsaXN0IG9mIHRoaW5ncyB0byBkbyByYXRoZXIgdGhhbiBhIHRhYmxlIG9mIGV2ZXJ5dGhpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZU5lZWRzQXR0ZW50aW9uKGlucHV0OiBBdHRlbnRpb25JbnB1dCk6IEF0dGVudGlvbkl0ZW1bXSB7XG4gIGNvbnN0IHQgPSB7IC4uLkRFRkFVTFRfVEhSRVNIT0xEUywgLi4uaW5wdXQudGhyZXNob2xkcyB9O1xuICBjb25zdCBub3cgPSBpbnB1dC5ub3cgPz8gbmV3IERhdGUoKTtcbiAgY29uc3QgcHJpb3JCeVBpcGVsaW5lID0gbmV3IE1hcCgoaW5wdXQucHJldmlvdXMgPz8gW10pLm1hcCgocCkgPT4gW3AucGlwZWxpbmVJZCwgcF0pKTtcbiAgY29uc3QgaXRlbXM6IEF0dGVudGlvbkl0ZW1bXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qgcm93IG9mIGlucHV0LmN1cnJlbnQpIHtcbiAgICBjb25zdCBmaW5kaW5nczogQXR0ZW50aW9uRmluZGluZ1tdID0gW107XG5cbiAgICAvLyAxLiBTdWNjZXNzIHJhdGUuIFNraXBwZWQgZW50aXJlbHkgZm9yIGEgcGlwZWxpbmUgd2l0aCBubyBydW5zOiBhIHBpcGVsaW5lXG4gICAgLy8gbm9ib2R5IHJhbiBoYXMgbm8gc3VjY2VzcyByYXRlLCBhbmQgZmxhZ2dpbmcgaXQgYXMgMCUgd291bGQgcHV0IGV2ZXJ5XG4gICAgLy8gZG9ybWFudCBwaXBlbGluZSBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0IGZvcmV2ZXIuXG4gICAgaWYgKHJvdy5ydW5zID4gMCAmJiByb3cuc3VjY2Vzc1BjdCAhPT0gbnVsbCAmJiByb3cuc3VjY2Vzc1BjdCA8IHQuc3VjY2Vzc1JhdGVQY3QpIHtcbiAgICAgIGZpbmRpbmdzLnB1c2goe1xuICAgICAgICBydWxlOiAnbG93X3N1Y2Nlc3NfcmF0ZScsXG4gICAgICAgIHNldmVyaXR5OiByb3cuc3VjY2Vzc1BjdCA8IHQuc3VjY2Vzc1JhdGVQY3QgLyAyID8gJ2hpZ2gnIDogJ21lZGl1bScsXG4gICAgICAgIGV2aWRlbmNlOiBgJHtyb3cuc3VjY2Vzc1BjdH0lIG9mICR7cm93LnJ1bnN9IHJ1bnMgc3VjY2VlZGVkIChiZWxvdyAke3Quc3VjY2Vzc1JhdGVQY3R9JSlgLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gMi4gR2V0dGluZyBzbG93ZXIuIE5lZWRzIGJvdGggcGVyaW9kcyBBTkQgYSByZWFsIGJhc2VsaW5lIOKAlCBhIGp1bXAgZnJvbSAyc1xuICAgIC8vIHRvIDNzIGlzIDUwJSBhbmQgbWVhbnMgbm90aGluZywgc28gYSB0aW55IGJhc2VsaW5lIGlzIG5vdCBldmlkZW5jZS5cbiAgICBjb25zdCBwcmlvciA9IHByaW9yQnlQaXBlbGluZS5nZXQocm93LnBpcGVsaW5lSWQpO1xuICAgIGlmIChyb3cucDk1TXMgIT09IG51bGwgJiYgcHJpb3I/LnA5NU1zICYmIHByaW9yLnA5NU1zID4gMTBfMDAwKSB7XG4gICAgICBjb25zdCBkZWx0YVBjdCA9ICgocm93LnA5NU1zIC0gcHJpb3IucDk1TXMpIC8gcHJpb3IucDk1TXMpICogMTAwO1xuICAgICAgaWYgKGRlbHRhUGN0ID4gdC5wOTVJbmNyZWFzZVBjdCkge1xuICAgICAgICBmaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICBydWxlOiAnc2xvd2VyX3A5NScsXG4gICAgICAgICAgc2V2ZXJpdHk6IGRlbHRhUGN0ID4gdC5wOTVJbmNyZWFzZVBjdCAqIDIgPyAnaGlnaCcgOiAnbWVkaXVtJyxcbiAgICAgICAgICBldmlkZW5jZTogYHA5NSB1cCAke2RlbHRhUGN0LnRvRml4ZWQoMCl9JSwgJHtkdXJhdGlvbihwcmlvci5wOTVNcyl9IOKGkiAke2R1cmF0aW9uKHJvdy5wOTVNcyl9YCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyZWFrID0gaW5wdXQuc3RyZWFrcz8uZ2V0KHJvdy5waXBlbGluZUlkKTtcblxuICAgIC8vIDMuIENvbnNlY3V0aXZlIGZhaWx1cmVzLiBUaGUgY2xlYXJlc3QgXCJ0aGlzIGlzIGJyb2tlbiBub3dcIiBzaWduYWwgdGhlcmUgaXM6XG4gICAgLy8gYSA3MCUgc3VjY2VzcyByYXRlIG92ZXIgYSBtb250aCBhbmQgdGhyZWUgZmFpbHVyZXMgaW4gYSByb3cgYXJlIHZlcnlcbiAgICAvLyBkaWZmZXJlbnQgc2l0dWF0aW9ucywgYW5kIG9ubHkgdGhlIHNlY29uZCBuZWVkcyBzb21lYm9keSB0b2RheS5cbiAgICBpZiAoc3RyZWFrICYmIHN0cmVhay5jb25zZWN1dGl2ZUZhaWx1cmVzID49IHQuY29uc2VjdXRpdmVGYWlsdXJlcykge1xuICAgICAgZmluZGluZ3MucHVzaCh7XG4gICAgICAgIHJ1bGU6ICdjb25zZWN1dGl2ZV9mYWlsdXJlcycsXG4gICAgICAgIHNldmVyaXR5OiAnaGlnaCcsXG4gICAgICAgIGV2aWRlbmNlOiBgJHtzdHJlYWsuY29uc2VjdXRpdmVGYWlsdXJlc30gY29uc2VjdXRpdmUgZmFpbHVyZXNgLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gNC4gTm90aGluZyBoYXMgd29ya2VkIGxhdGVseS4gRGlzdGluY3QgZnJvbSB0aGUgcmF0ZTogYSBwaXBlbGluZSB0aGF0XG4gICAgLy8gc3VjY2VlZGVkIDkwJSBvZiB0aGUgdGltZSBhbmQgdGhlbiBzdG9wcGVkIHN1Y2NlZWRpbmcgZW50aXJlbHkgbG9va3MgZmluZVxuICAgIC8vIGJ5IHJhdGUgYW5kIGlzIGNvbXBsZXRlbHkgYnJva2VuLlxuICAgIGlmIChzdHJlYWsgJiYgcm93LnJ1bnMgPiAwKSB7XG4gICAgICBjb25zdCBkYXlzID0gc3RyZWFrLmxhc3RTdWNjZXNzQXRcbiAgICAgICAgPyBNYXRoLmZsb29yKChub3cuZ2V0VGltZSgpIC0gc3RyZWFrLmxhc3RTdWNjZXNzQXQuZ2V0VGltZSgpKSAvIDg2XzQwMF8wMDApXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGlmIChkYXlzID09PSBudWxsKSB7XG4gICAgICAgIGZpbmRpbmdzLnB1c2goe1xuICAgICAgICAgIHJ1bGU6ICdub19yZWNlbnRfc3VjY2VzcycsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdoaWdoJyxcbiAgICAgICAgICBldmlkZW5jZTogYG5vIHN1Y2Nlc3NmdWwgcnVuIGluIHRoaXMgcGVyaW9kICgke3Jvdy5ydW5zfSBhdHRlbXB0cylgLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZGF5cyA+PSB0LnN0YWxlRGF5cykge1xuICAgICAgICBmaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICBydWxlOiAnbm9fcmVjZW50X3N1Y2Nlc3MnLFxuICAgICAgICAgIHNldmVyaXR5OiBkYXlzID49IHQuc3RhbGVEYXlzICogMiA/ICdoaWdoJyA6ICdtZWRpdW0nLFxuICAgICAgICAgIGV2aWRlbmNlOiBgbGFzdCBzdWNjZWVkZWQgJHtkYXlzfSBkYXlzIGFnb2AsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuIEJyb2tlIHNob3J0bHkgYWZ0ZXIgc29tZWJvZHkgY2hhbmdlZCBpdC4gVGhlIG1vc3QgdXNlZnVsIGNvcnJlbGF0aW9uIGluXG4gICAgLy8gdGhlIHdob2xlIHNlY3Rpb24sIGJlY2F1c2UgaXQgbmFtZXMgYSBsaWtlbHkgY2F1c2UgcmF0aGVyIHRoYW4gYSBzeW1wdG9tIOKAlFxuICAgIC8vIGFuZCBpdCBpcyB0aGUgb25lIGEgaHVtYW4gd291bGQgd29yayBvdXQgYnkgaGFuZCBmcm9tIHR3byBzY3JlZW5zLlxuICAgIGNvbnN0IGNoYW5nZWRBdCA9IGlucHV0LmNvbmZpZ0NoYW5nZXM/LmdldChyb3cucGlwZWxpbmVJZCk7XG4gICAgaWYgKGNoYW5nZWRBdCAmJiByb3cubGFzdEZhaWx1cmVBdCkge1xuICAgICAgY29uc3QgZ2FwSG91cnMgPSAobmV3IERhdGUocm93Lmxhc3RGYWlsdXJlQXQpLmdldFRpbWUoKSAtIGNoYW5nZWRBdC5nZXRUaW1lKCkpIC8gMzYwMF8wMDA7XG4gICAgICBpZiAoZ2FwSG91cnMgPj0gMCAmJiBnYXBIb3VycyA8PSB0LmZhaWx1cmVBZnRlckNoYW5nZUhvdXJzKSB7XG4gICAgICAgIGZpbmRpbmdzLnB1c2goe1xuICAgICAgICAgIHJ1bGU6ICdmYWlsZWRfYWZ0ZXJfY29uZmlnX2NoYW5nZScsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdoaWdoJyxcbiAgICAgICAgICBldmlkZW5jZTogYGZhaWxlZCAke2dhcEhvdXJzIDwgMSA/ICdsZXNzIHRoYW4gYW4gaG91cicgOiBgJHtNYXRoLnJvdW5kKGdhcEhvdXJzKX1oYH0gYWZ0ZXIgYSBjb25maWd1cmF0aW9uIGNoYW5nZWBcbiAgICAgICAgICAgICsgKHJvdy5sYXN0RmFpbHVyZVN0YWdlID8gYCAoJHtyb3cubGFzdEZhaWx1cmVTdGFnZX0pYCA6ICcnKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNi4gUnVubmluZyBhIHBsdWdpbiB2ZXJzaW9uIHdpdGggb3BlbiBDcml0aWNhbCBmaW5kaW5ncy5cbiAgICBpZiAoaW5wdXQudnVsbmVyYWJsZVBpcGVsaW5lcz8uaGFzKHJvdy5waXBlbGluZUlkKSkge1xuICAgICAgZmluZGluZ3MucHVzaCh7XG4gICAgICAgIHJ1bGU6ICd2dWxuZXJhYmxlX3BsdWdpbicsXG4gICAgICAgIHNldmVyaXR5OiAnaGlnaCcsXG4gICAgICAgIGV2aWRlbmNlOiAncnVucyBhIHBsdWdpbiB2ZXJzaW9uIHdpdGggb3BlbiBDcml0aWNhbCB2dWxuZXJhYmlsaXRpZXMnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gNy4gSW52aXNpYmxlIHRvIERPUkEuIE5vdCBhIGZhaWx1cmUg4oCUIGEgTUVBU1VSRU1FTlQgZ2FwLCBhbmQgZmxhZ2dlZFxuICAgIC8vIGJlY2F1c2UgYSBwaXBlbGluZSBub2JvZHkgY2FuIHNlZSBkZXBsb3lpbmcgaXMgdGhlIHJlYXNvbiBhIGRlcGxveW1lbnQtXG4gICAgLy8gZnJlcXVlbmN5IG51bWJlciBpcyB3cm9uZywgYW5kIG5vdGhpbmcgZWxzZSBpbiB0aGUgcmVwb3J0IHdvdWxkIHNheSBzby5cbiAgICBpZiAoaW5wdXQudW50cmFja2VkUGlwZWxpbmVzPy5oYXMocm93LnBpcGVsaW5lSWQpICYmIHJvdy5ydW5zID4gMCkge1xuICAgICAgZmluZGluZ3MucHVzaCh7XG4gICAgICAgIHJ1bGU6ICdub19kZXBsb3lfdHJhY2tpbmcnLFxuICAgICAgICBzZXZlcml0eTogJ21lZGl1bScsXG4gICAgICAgIGV2aWRlbmNlOiAncmFuLCBidXQgcHJvZHVjZWQgbm8gZGVwbG95IGRhdGEg4oCUIHJlLXN5bnRoIHRvIGluY2x1ZGUgZGVwbG95IHRhZ3MnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGZpbmRpbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICBwaXBlbGluZUlkOiByb3cucGlwZWxpbmVJZCxcbiAgICAgICAgcGlwZWxpbmVOYW1lOiByb3cucGlwZWxpbmVOYW1lLFxuICAgICAgICBmaW5kaW5ncyxcbiAgICAgICAgc2V2ZXJpdHk6IGZpbmRpbmdzLnNvbWUoKGYpID0+IGYuc2V2ZXJpdHkgPT09ICdoaWdoJykgPyAnaGlnaCcgOiAnbWVkaXVtJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhpZ2ggZmlyc3QsIHRoZW4gdGhlIHBpcGVsaW5lcyB3aXRoIHRoZSBtb3N0IHdyb25nIHdpdGggdGhlbS5cbiAgcmV0dXJuIGl0ZW1zLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoYS5zZXZlcml0eSAhPT0gYi5zZXZlcml0eSkgcmV0dXJuIGEuc2V2ZXJpdHkgPT09ICdoaWdoJyA/IC0xIDogMTtcbiAgICByZXR1cm4gYi5maW5kaW5ncy5sZW5ndGggLSBhLmZpbmRpbmdzLmxlbmd0aDtcbiAgfSk7XG59XG5cbi8qKlxuICogUmVhZCBhbiBvcmcncyB0aHJlc2hvbGRzIG91dCBvZiBzdG9yZWQgc2V0dGluZ3MsIGZhbGxpbmcgYmFjayBwZXIgZmllbGQuXG4gKlxuICogUGVyIEZJRUxELCBub3QgcGVyIG9iamVjdDogYW4gb3JnIHRoYXQgc2V0IG9ubHkgYHN1Y2Nlc3NSYXRlUGN0YCBrZWVwcyB0aGVcbiAqIGRlZmF1bHRzIGZvciBldmVyeXRoaW5nIGVsc2UsIHJhdGhlciB0aGFuIHNpbGVudGx5IGRpc2FibGluZyBmb3VyIHJ1bGVzIGJ5XG4gKiBjb25maWd1cmluZyBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJlc2hvbGRzRnJvbShzdG9yZWQ6IFBhcnRpYWw8TmVlZHNBdHRlbnRpb25UaHJlc2hvbGRzPiB8IG51bGwgfCB1bmRlZmluZWQpOiBOZWVkc0F0dGVudGlvblRocmVzaG9sZHMge1xuICByZXR1cm4geyAuLi5ERUZBVUxUX1RIUkVTSE9MRFMsIC4uLihzdG9yZWQgPz8ge30pIH07XG59XG4iXX0=
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVlZHMtYXR0ZW50aW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9uZWVkcy1hdHRlbnRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQXNDdEM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXVDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEYsY0FBYyxFQUFFLEVBQUU7SUFDbEIsY0FBYyxFQUFFLEVBQUU7SUFDbEIsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QixTQUFTLEVBQUUsQ0FBQztJQUNaLHVCQUF1QixFQUFFLEVBQUU7Q0FDNUIsQ0FBQyxDQUFDO0FBK0NILHVEQUF1RDtBQUN2RCxTQUFTLFFBQVEsQ0FBQyxFQUFVO0lBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ2pFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxLQUFxQjtJQUMxRCxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO0lB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LEVBQUUsR0FBRyxDQUFDLFVBQVU7Z0JBQzFCLFlBQVksRUFBRSxHQUFHLENBQUMsWUFBWTtnQkFDOUIsUUFBUTtnQkFDUixRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRO2FBQzFFLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN6QixJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVE7WUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUE0RDtJQUN6RixPQUFPLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFdoaWNoIHBpcGVsaW5lcyBuZWVkIHNvbWVib2R5IHRvIGxvb2sgYXQgdGhlbSwgYW5kIFdIWS5cbiAqXG4gKiBUaGUgcmVzdCBvZiB0aGUgcmVwb3J0IGRlc2NyaWJlczsgdGhpcyBkZWNpZGVzLiBUaGF0IGlzIGEgbWVhbmluZ2Z1bCBkaWZmZXJlbmNlLFxuICogYW5kIGl0IGlzIHdoeSBldmVyeSBmaW5kaW5nIGNhcnJpZXMgaXRzIEVWSURFTkNFIOKAlCBcInA5NSB1cCAzMSUsIDRtMTJzIOKGkiA1bTMxc1wiLFxuICogbm90IFwicGVyZm9ybWFuY2UgZGVncmFkZWRcIi4gQSBmbGFnIHdpdGhvdXQgdGhlIG51bWJlciBiZWhpbmQgaXQgaXMgYW4gb3BpbmlvbiB0aGVcbiAqIHJlYWRlciBoYXMgdG8gdGFrZSBvbiB0cnVzdCwgYW5kIHRoZSBmaXJzdCB0aW1lIG9uZSBpcyB3cm9uZyB0aGUgd2hvbGUgc2VjdGlvblxuICogc3RvcHMgYmVpbmcgcmVhZC5cbiAqXG4gKiBUSEUgVEhSRVNIT0xEUyBBUkUgT1JHLUNPTkZJR1VSQUJMRSwgd2l0aCBkZWZhdWx0cyBzdGF0ZWQgYmVsb3cuIFRoZXkgaGF2ZSB0byBiZTpcbiAqIDkwJSBzdWNjZXNzIGlzIGEgY3Jpc2lzIGZvciBhIGRlcGxveSBwaXBlbGluZSBhbmQgdW5yZW1hcmthYmxlIGZvciBhIGZsYWt5XG4gKiBpbnRlZ3JhdGlvbiBzdWl0ZSBzb21lYm9keSBpcyBhbHJlYWR5IHJld3JpdGluZywgYW5kIGEgcGxhdGZvcm0taW1wb3NlZCBudW1iZXJcbiAqIHdvdWxkIG1ha2UgdGhlIHNlY3Rpb24gd3JvbmcgZm9yIG9uZSBvZiB0aGVtIGJ5IGNvbnN0cnVjdGlvbi5cbiAqXG4gKiBXSEFUIElTIERFTElCRVJBVEVMWSBOT1QgQSBSVUxFOiBhbnl0aGluZyBwZXItcGVyc29uLCBhbnl0aGluZyBhYm91dCB2b2x1bWVcbiAqIChcInRoaXMgdGVhbSBzaGlwcGVkIGxlc3MgdGhhbiB0aGF0IHRlYW1cIiksIGFuZCBhbnl0aGluZyBjb21wYXJpbmcgb25lIHRlYW0gdG9cbiAqIGFub3RoZXIuIFRob3NlIGFyZSB0aGUgZmxhZ3MgdGhhdCB0dXJuIGEgZGVsaXZlcnkgcmVwb3J0IGludG8gYSBwZXJmb3JtYW5jZVxuICogcmV2aWV3LCB3aGljaCBpcyB0aGUgZmFpbHVyZSBtb2RlIHRoaXMgd2hvbGUgZmVhdHVyZSBpcyB0cnlpbmcgdG8gYXZvaWQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQaXBlbGluZUJyZWFrZG93blJvdyB9IGZyb20gJy4vYW5hbHl0aWNzLXF1ZXJpZXMuanMnO1xuXG4vKiogVGhlIHRocmVzaG9sZHMgYSBydWxlIHRyaXBzIGF0LiBFdmVyeSBvbmUgaXMgb3ZlcnJpZGFibGUgcGVyIG9yZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmVlZHNBdHRlbnRpb25UaHJlc2hvbGRzIHtcbiAgLyoqIFN1Y2Nlc3MgcmF0ZSBiZWxvdyB0aGlzLCBhcyBhIHBlcmNlbnRhZ2UuICovXG4gIHN1Y2Nlc3NSYXRlUGN0OiBudW1iZXI7XG4gIC8qKiBwOTUgZHVyYXRpb24gdXAgYnkgbW9yZSB0aGFuIHRoaXMsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgcHJldmlvdXMgcGVyaW9kLiAqL1xuICBwOTVJbmNyZWFzZVBjdDogbnVtYmVyO1xuICAvKiogVGhpcyBtYW55IGNvbnNlY3V0aXZlIGZhaWx1cmVzLiAqL1xuICBjb25zZWN1dGl2ZUZhaWx1cmVzOiBudW1iZXI7XG4gIC8qKiBObyBzdWNjZXNzZnVsIHJ1biBpbiB0aGlzIG1hbnkgZGF5cy4gKi9cbiAgc3RhbGVEYXlzOiBudW1iZXI7XG4gIC8qKiBBIGZhaWx1cmUgd2l0aGluIHRoaXMgbWFueSBob3VycyBvZiBhIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24gY2hhbmdlLiAqL1xuICBmYWlsdXJlQWZ0ZXJDaGFuZ2VIb3VyczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBkZWZhdWx0cy5cbiAqXG4gKiBFYWNoIGlzIHRoZSBwb2ludCBhdCB3aGljaCBhIHJlYXNvbmFibGUgbGVhZCB3b3VsZCB3YW50IHRvIGtub3csIG5vdCB0aGUgcG9pbnQgYXRcbiAqIHdoaWNoIHNvbWV0aGluZyBpcyBkZWZpbml0ZWx5IHdyb25nIOKAlCB0aGUgc2VjdGlvbidzIGpvYiBpcyB0byByYWlzZSBhdHRlbnRpb24sXG4gKiBhbmQgYSB0aHJlc2hvbGQgc2V0IHdoZXJlIHRoZSBwcm9ibGVtIGlzIGFscmVhZHkgdW5kZW5pYWJsZSByYWlzZXMgaXQgdG9vIGxhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RIUkVTSE9MRFM6IFJlYWRvbmx5PE5lZWRzQXR0ZW50aW9uVGhyZXNob2xkcz4gPSBPYmplY3QuZnJlZXplKHtcbiAgc3VjY2Vzc1JhdGVQY3Q6IDkwLFxuICBwOTVJbmNyZWFzZVBjdDogMjUsXG4gIGNvbnNlY3V0aXZlRmFpbHVyZXM6IDMsXG4gIHN0YWxlRGF5czogNyxcbiAgZmFpbHVyZUFmdGVyQ2hhbmdlSG91cnM6IDI0LFxufSk7XG5cbi8qKiBXaHkgYSBwaXBlbGluZSB3YXMgZmxhZ2dlZC4gVGhlIGlkIGlzIHN0YWJsZTsgdGhlIGV2aWRlbmNlIGlzIGh1bWFuLiAqL1xuZXhwb3J0IHR5cGUgQXR0ZW50aW9uUnVsZUlkID1cbiAgfCAnbG93X3N1Y2Nlc3NfcmF0ZSdcbiAgfCAnc2xvd2VyX3A5NSdcbiAgfCAnY29uc2VjdXRpdmVfZmFpbHVyZXMnXG4gIHwgJ25vX3JlY2VudF9zdWNjZXNzJ1xuICB8ICdmYWlsZWRfYWZ0ZXJfY29uZmlnX2NoYW5nZSdcbiAgfCAndnVsbmVyYWJsZV9wbHVnaW4nXG4gIHwgJ25vX2RlcGxveV90cmFja2luZyc7XG5cbi8qKiBPbmUgZmluZGluZyBhYm91dCBvbmUgcGlwZWxpbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dGVudGlvbkZpbmRpbmcge1xuICBydWxlOiBBdHRlbnRpb25SdWxlSWQ7XG4gIC8qKiBUaGUgc2VudGVuY2UgYSBsZWFkIHJlYWRzLCB3aXRoIHRoZSBudW1iZXIgaW4gaXQuICovXG4gIGV2aWRlbmNlOiBzdHJpbmc7XG4gIC8qKiBgaGlnaGAgbWVhbnMgXCJ0aGlzIGlzIGJyb2tlbiBub3dcIjsgYG1lZGl1bWAgbWVhbnMgXCJ0aGlzIGlzIGRyaWZ0aW5nXCIuICovXG4gIHNldmVyaXR5OiAnaGlnaCcgfCAnbWVkaXVtJztcbn1cblxuLyoqIEEgZmxhZ2dlZCBwaXBlbGluZSBhbmQgZXZlcnl0aGluZyB0aGF0IHRyaXBwZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dGVudGlvbkl0ZW0ge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZmluZGluZ3M6IEF0dGVudGlvbkZpbmRpbmdbXTtcbiAgLyoqIFRoZSB3b3JzdCBzZXZlcml0eSBhbW9uZyB0aGUgZmluZGluZ3Mg4oCUIHdoYXQgdGhlIGxpc3Qgc29ydHMgb24uICovXG4gIHNldmVyaXR5OiAnaGlnaCcgfCAnbWVkaXVtJztcbn1cblxuLyoqIFdoYXQgdGhlIGV2YWx1YXRvciBuZWVkcyBiZXlvbmQgdGhlIGN1cnJlbnQgcGVyaW9kJ3MgYnJlYWtkb3duLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRlbnRpb25JbnB1dCB7XG4gIGN1cnJlbnQ6IHJlYWRvbmx5IFBpcGVsaW5lQnJlYWtkb3duUm93W107XG4gIC8qKiBUaGUgcHJldmlvdXMgcGVyaW9kLCBmb3IgdGhlIHA5NSBjb21wYXJpc29uLiBBYnNlbnQg4oeSIHRoYXQgcnVsZSBpcyBza2lwcGVkLiAqL1xuICBwcmV2aW91cz86IHJlYWRvbmx5IFBpcGVsaW5lQnJlYWtkb3duUm93W107XG4gIC8qKiBQZXIgcGlwZWxpbmU6IGNvbnNlY3V0aXZlIGZhaWx1cmVzIGVuZGluZyB0aGUgcGVyaW9kLCBhbmQgbGFzdCBzdWNjZXNzLiAqL1xuICBzdHJlYWtzPzogUmVhZG9ubHlNYXA8c3RyaW5nLCB7IGNvbnNlY3V0aXZlRmFpbHVyZXM6IG51bWJlcjsgbGFzdFN1Y2Nlc3NBdDogRGF0ZSB8IG51bGwgfT47XG4gIC8qKiBQZXIgcGlwZWxpbmU6IHRoZSBtb3N0IHJlY2VudCBjb25maWcgY2hhbmdlLCBmcm9tIHRoZSBhdWRpdCB0cmFpbC4gKi9cbiAgY29uZmlnQ2hhbmdlcz86IFJlYWRvbmx5TWFwPHN0cmluZywgRGF0ZT47XG4gIC8qKiBQaXBlbGluZXMgd2l0aCBhbiBvcGVuIENyaXRpY2FsIHBsdWdpbiBleHBvc3VyZS4gKi9cbiAgdnVsbmVyYWJsZVBpcGVsaW5lcz86IFJlYWRvbmx5U2V0PHN0cmluZz47XG4gIC8qKiBQaXBlbGluZXMgdGhhdCByYW4gYnV0IHByb2R1Y2VkIG5vIGRlcGxveSByb3dzIOKAlCBET1JBIGNhbm5vdCBzZWUgdGhlbS4gKi9cbiAgdW50cmFja2VkUGlwZWxpbmVzPzogUmVhZG9ubHlTZXQ8c3RyaW5nPjtcbiAgdGhyZXNob2xkcz86IFBhcnRpYWw8TmVlZHNBdHRlbnRpb25UaHJlc2hvbGRzPjtcbiAgbm93PzogRGF0ZTtcbn1cblxuLyoqIGAyNzIwMDBgIOKGkiBgNG0zMnNgLCBmb3IgZXZpZGVuY2UgYSBwZXJzb24gcmVhZHMuICovXG5mdW5jdGlvbiBkdXJhdGlvbihtczogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgdG90YWwgPSBNYXRoLnJvdW5kKG1zIC8gMTAwMCk7XG4gIGNvbnN0IG0gPSBNYXRoLmZsb29yKHRvdGFsIC8gNjApO1xuICBjb25zdCBzID0gdG90YWwgJSA2MDtcbiAgcmV0dXJuIG0gPiAwID8gYCR7bX1tJHtTdHJpbmcocykucGFkU3RhcnQoMiwgJzAnKX1zYCA6IGAke3N9c2A7XG59XG5cbi8qKlxuICogRXZhbHVhdGUgZXZlcnkgcnVsZSBhZ2FpbnN0IHRoZSBwZXJpb2QuXG4gKlxuICogUmV0dXJucyBvbmx5IHRoZSBwaXBlbGluZXMgdGhhdCB0cmlwcGVkIHNvbWV0aGluZywgd29yc3QgZmlyc3QsIHNvIHRoZSBzZWN0aW9uIGlzXG4gKiBhIHNob3J0IGxpc3Qgb2YgdGhpbmdzIHRvIGRvIHJhdGhlciB0aGFuIGEgdGFibGUgb2YgZXZlcnl0aGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlTmVlZHNBdHRlbnRpb24oaW5wdXQ6IEF0dGVudGlvbklucHV0KTogQXR0ZW50aW9uSXRlbVtdIHtcbiAgY29uc3QgdCA9IHsgLi4uREVGQVVMVF9USFJFU0hPTERTLCAuLi5pbnB1dC50aHJlc2hvbGRzIH07XG4gIGNvbnN0IG5vdyA9IGlucHV0Lm5vdyA/PyBuZXcgRGF0ZSgpO1xuICBjb25zdCBwcmlvckJ5UGlwZWxpbmUgPSBuZXcgTWFwKChpbnB1dC5wcmV2aW91cyA/PyBbXSkubWFwKChwKSA9PiBbcC5waXBlbGluZUlkLCBwXSkpO1xuICBjb25zdCBpdGVtczogQXR0ZW50aW9uSXRlbVtdID0gW107XG5cbiAgZm9yIChjb25zdCByb3cgb2YgaW5wdXQuY3VycmVudCkge1xuICAgIGNvbnN0IGZpbmRpbmdzOiBBdHRlbnRpb25GaW5kaW5nW10gPSBbXTtcblxuICAgIC8vIDEuIFN1Y2Nlc3MgcmF0ZS4gU2tpcHBlZCBlbnRpcmVseSBmb3IgYSBwaXBlbGluZSB3aXRoIG5vIHJ1bnM6IGEgcGlwZWxpbmVcbiAgICAvLyBub2JvZHkgcmFuIGhhcyBubyBzdWNjZXNzIHJhdGUsIGFuZCBmbGFnZ2luZyBpdCBhcyAwJSB3b3VsZCBwdXQgZXZlcnlcbiAgICAvLyBkb3JtYW50IHBpcGVsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QgZm9yZXZlci5cbiAgICBpZiAocm93LnJ1bnMgPiAwICYmIHJvdy5zdWNjZXNzUGN0ICE9PSBudWxsICYmIHJvdy5zdWNjZXNzUGN0IDwgdC5zdWNjZXNzUmF0ZVBjdCkge1xuICAgICAgZmluZGluZ3MucHVzaCh7XG4gICAgICAgIHJ1bGU6ICdsb3dfc3VjY2Vzc19yYXRlJyxcbiAgICAgICAgc2V2ZXJpdHk6IHJvdy5zdWNjZXNzUGN0IDwgdC5zdWNjZXNzUmF0ZVBjdCAvIDIgPyAnaGlnaCcgOiAnbWVkaXVtJyxcbiAgICAgICAgZXZpZGVuY2U6IGAke3Jvdy5zdWNjZXNzUGN0fSUgb2YgJHtyb3cucnVuc30gcnVucyBzdWNjZWVkZWQgKGJlbG93ICR7dC5zdWNjZXNzUmF0ZVBjdH0lKWAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAyLiBHZXR0aW5nIHNsb3dlci4gTmVlZHMgYm90aCBwZXJpb2RzIEFORCBhIHJlYWwgYmFzZWxpbmUg4oCUIGEganVtcCBmcm9tIDJzXG4gICAgLy8gdG8gM3MgaXMgNTAlIGFuZCBtZWFucyBub3RoaW5nLCBzbyBhIHRpbnkgYmFzZWxpbmUgaXMgbm90IGV2aWRlbmNlLlxuICAgIGNvbnN0IHByaW9yID0gcHJpb3JCeVBpcGVsaW5lLmdldChyb3cucGlwZWxpbmVJZCk7XG4gICAgaWYgKHJvdy5wOTVNcyAhPT0gbnVsbCAmJiBwcmlvcj8ucDk1TXMgJiYgcHJpb3IucDk1TXMgPiAxMF8wMDApIHtcbiAgICAgIGNvbnN0IGRlbHRhUGN0ID0gKChyb3cucDk1TXMgLSBwcmlvci5wOTVNcykgLyBwcmlvci5wOTVNcykgKiAxMDA7XG4gICAgICBpZiAoZGVsdGFQY3QgPiB0LnA5NUluY3JlYXNlUGN0KSB7XG4gICAgICAgIGZpbmRpbmdzLnB1c2goe1xuICAgICAgICAgIHJ1bGU6ICdzbG93ZXJfcDk1JyxcbiAgICAgICAgICBzZXZlcml0eTogZGVsdGFQY3QgPiB0LnA5NUluY3JlYXNlUGN0ICogMiA/ICdoaWdoJyA6ICdtZWRpdW0nLFxuICAgICAgICAgIGV2aWRlbmNlOiBgcDk1IHVwICR7ZGVsdGFQY3QudG9GaXhlZCgwKX0lLCAke2R1cmF0aW9uKHByaW9yLnA5NU1zKX0g4oaSICR7ZHVyYXRpb24ocm93LnA5NU1zKX1gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdHJlYWsgPSBpbnB1dC5zdHJlYWtzPy5nZXQocm93LnBpcGVsaW5lSWQpO1xuXG4gICAgLy8gMy4gQ29uc2VjdXRpdmUgZmFpbHVyZXMuIFRoZSBjbGVhcmVzdCBcInRoaXMgaXMgYnJva2VuIG5vd1wiIHNpZ25hbCB0aGVyZSBpczpcbiAgICAvLyBhIDcwJSBzdWNjZXNzIHJhdGUgb3ZlciBhIG1vbnRoIGFuZCB0aHJlZSBmYWlsdXJlcyBpbiBhIHJvdyBhcmUgdmVyeVxuICAgIC8vIGRpZmZlcmVudCBzaXR1YXRpb25zLCBhbmQgb25seSB0aGUgc2Vjb25kIG5lZWRzIHNvbWVib2R5IHRvZGF5LlxuICAgIGlmIChzdHJlYWsgJiYgc3RyZWFrLmNvbnNlY3V0aXZlRmFpbHVyZXMgPj0gdC5jb25zZWN1dGl2ZUZhaWx1cmVzKSB7XG4gICAgICBmaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgcnVsZTogJ2NvbnNlY3V0aXZlX2ZhaWx1cmVzJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdoaWdoJyxcbiAgICAgICAgZXZpZGVuY2U6IGAke3N0cmVhay5jb25zZWN1dGl2ZUZhaWx1cmVzfSBjb25zZWN1dGl2ZSBmYWlsdXJlc2AsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyA0LiBOb3RoaW5nIGhhcyB3b3JrZWQgbGF0ZWx5LiBEaXN0aW5jdCBmcm9tIHRoZSByYXRlOiBhIHBpcGVsaW5lIHRoYXRcbiAgICAvLyBzdWNjZWVkZWQgOTAlIG9mIHRoZSB0aW1lIGFuZCB0aGVuIHN0b3BwZWQgc3VjY2VlZGluZyBlbnRpcmVseSBsb29rcyBmaW5lXG4gICAgLy8gYnkgcmF0ZSBhbmQgaXMgY29tcGxldGVseSBicm9rZW4uXG4gICAgaWYgKHN0cmVhayAmJiByb3cucnVucyA+IDApIHtcbiAgICAgIGNvbnN0IGRheXMgPSBzdHJlYWsubGFzdFN1Y2Nlc3NBdFxuICAgICAgICA/IE1hdGguZmxvb3IoKG5vdy5nZXRUaW1lKCkgLSBzdHJlYWsubGFzdFN1Y2Nlc3NBdC5nZXRUaW1lKCkpIC8gODZfNDAwXzAwMClcbiAgICAgICAgOiBudWxsO1xuICAgICAgaWYgKGRheXMgPT09IG51bGwpIHtcbiAgICAgICAgZmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgcnVsZTogJ25vX3JlY2VudF9zdWNjZXNzJyxcbiAgICAgICAgICBzZXZlcml0eTogJ2hpZ2gnLFxuICAgICAgICAgIGV2aWRlbmNlOiBgbm8gc3VjY2Vzc2Z1bCBydW4gaW4gdGhpcyBwZXJpb2QgKCR7cm93LnJ1bnN9IGF0dGVtcHRzKWAsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChkYXlzID49IHQuc3RhbGVEYXlzKSB7XG4gICAgICAgIGZpbmRpbmdzLnB1c2goe1xuICAgICAgICAgIHJ1bGU6ICdub19yZWNlbnRfc3VjY2VzcycsXG4gICAgICAgICAgc2V2ZXJpdHk6IGRheXMgPj0gdC5zdGFsZURheXMgKiAyID8gJ2hpZ2gnIDogJ21lZGl1bScsXG4gICAgICAgICAgZXZpZGVuY2U6IGBsYXN0IHN1Y2NlZWRlZCAke2RheXN9IGRheXMgYWdvYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gQnJva2Ugc2hvcnRseSBhZnRlciBzb21lYm9keSBjaGFuZ2VkIGl0LiBUaGUgbW9zdCB1c2VmdWwgY29ycmVsYXRpb24gaW5cbiAgICAvLyB0aGUgd2hvbGUgc2VjdGlvbiwgYmVjYXVzZSBpdCBuYW1lcyBhIGxpa2VseSBjYXVzZSByYXRoZXIgdGhhbiBhIHN5bXB0b20g4oCUXG4gICAgLy8gYW5kIGl0IGlzIHRoZSBvbmUgYSBodW1hbiB3b3VsZCB3b3JrIG91dCBieSBoYW5kIGZyb20gdHdvIHNjcmVlbnMuXG4gICAgY29uc3QgY2hhbmdlZEF0ID0gaW5wdXQuY29uZmlnQ2hhbmdlcz8uZ2V0KHJvdy5waXBlbGluZUlkKTtcbiAgICBpZiAoY2hhbmdlZEF0ICYmIHJvdy5sYXN0RmFpbHVyZUF0KSB7XG4gICAgICBjb25zdCBnYXBIb3VycyA9IChuZXcgRGF0ZShyb3cubGFzdEZhaWx1cmVBdCkuZ2V0VGltZSgpIC0gY2hhbmdlZEF0LmdldFRpbWUoKSkgLyAzNjAwXzAwMDtcbiAgICAgIGlmIChnYXBIb3VycyA+PSAwICYmIGdhcEhvdXJzIDw9IHQuZmFpbHVyZUFmdGVyQ2hhbmdlSG91cnMpIHtcbiAgICAgICAgZmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgcnVsZTogJ2ZhaWxlZF9hZnRlcl9jb25maWdfY2hhbmdlJyxcbiAgICAgICAgICBzZXZlcml0eTogJ2hpZ2gnLFxuICAgICAgICAgIGV2aWRlbmNlOiBgZmFpbGVkICR7Z2FwSG91cnMgPCAxID8gJ2xlc3MgdGhhbiBhbiBob3VyJyA6IGAke01hdGgucm91bmQoZ2FwSG91cnMpfWhgfSBhZnRlciBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlYFxuICAgICAgICAgICAgKyAocm93Lmxhc3RGYWlsdXJlU3RhZ2UgPyBgICgke3Jvdy5sYXN0RmFpbHVyZVN0YWdlfSlgIDogJycpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA2LiBSdW5uaW5nIGEgcGx1Z2luIHZlcnNpb24gd2l0aCBvcGVuIENyaXRpY2FsIGZpbmRpbmdzLlxuICAgIGlmIChpbnB1dC52dWxuZXJhYmxlUGlwZWxpbmVzPy5oYXMocm93LnBpcGVsaW5lSWQpKSB7XG4gICAgICBmaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgcnVsZTogJ3Z1bG5lcmFibGVfcGx1Z2luJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdoaWdoJyxcbiAgICAgICAgZXZpZGVuY2U6ICdydW5zIGEgcGx1Z2luIHZlcnNpb24gd2l0aCBvcGVuIENyaXRpY2FsIHZ1bG5lcmFiaWxpdGllcycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyA3LiBJbnZpc2libGUgdG8gRE9SQS4gTm90IGEgZmFpbHVyZSDigJQgYSBNRUFTVVJFTUVOVCBnYXAsIGFuZCBmbGFnZ2VkXG4gICAgLy8gYmVjYXVzZSBhIHBpcGVsaW5lIG5vYm9keSBjYW4gc2VlIGRlcGxveWluZyBpcyB0aGUgcmVhc29uIGEgZGVwbG95bWVudC1cbiAgICAvLyBmcmVxdWVuY3kgbnVtYmVyIGlzIHdyb25nLCBhbmQgbm90aGluZyBlbHNlIGluIHRoZSByZXBvcnQgd291bGQgc2F5IHNvLlxuICAgIGlmIChpbnB1dC51bnRyYWNrZWRQaXBlbGluZXM/Lmhhcyhyb3cucGlwZWxpbmVJZCkgJiYgcm93LnJ1bnMgPiAwKSB7XG4gICAgICBmaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgcnVsZTogJ25vX2RlcGxveV90cmFja2luZycsXG4gICAgICAgIHNldmVyaXR5OiAnbWVkaXVtJyxcbiAgICAgICAgZXZpZGVuY2U6ICdyYW4sIGJ1dCBwcm9kdWNlZCBubyBkZXBsb3kgZGF0YSDigJQgcmUtc3ludGggdG8gaW5jbHVkZSBkZXBsb3kgdGFncycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZmluZGluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgIHBpcGVsaW5lSWQ6IHJvdy5waXBlbGluZUlkLFxuICAgICAgICBwaXBlbGluZU5hbWU6IHJvdy5waXBlbGluZU5hbWUsXG4gICAgICAgIGZpbmRpbmdzLFxuICAgICAgICBzZXZlcml0eTogZmluZGluZ3Muc29tZSgoZikgPT4gZi5zZXZlcml0eSA9PT0gJ2hpZ2gnKSA/ICdoaWdoJyA6ICdtZWRpdW0nLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGlnaCBmaXJzdCwgdGhlbiB0aGUgcGlwZWxpbmVzIHdpdGggdGhlIG1vc3Qgd3Jvbmcgd2l0aCB0aGVtLlxuICByZXR1cm4gaXRlbXMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLnNldmVyaXR5ICE9PSBiLnNldmVyaXR5KSByZXR1cm4gYS5zZXZlcml0eSA9PT0gJ2hpZ2gnID8gLTEgOiAxO1xuICAgIHJldHVybiBiLmZpbmRpbmdzLmxlbmd0aCAtIGEuZmluZGluZ3MubGVuZ3RoO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZWFkIGFuIG9yZydzIHRocmVzaG9sZHMgb3V0IG9mIHN0b3JlZCBzZXR0aW5ncywgZmFsbGluZyBiYWNrIHBlciBmaWVsZC5cbiAqXG4gKiBQZXIgRklFTEQsIG5vdCBwZXIgb2JqZWN0OiBhbiBvcmcgdGhhdCBzZXQgb25seSBgc3VjY2Vzc1JhdGVQY3RgIGtlZXBzIHRoZVxuICogZGVmYXVsdHMgZm9yIGV2ZXJ5dGhpbmcgZWxzZSwgcmF0aGVyIHRoYW4gc2lsZW50bHkgZGlzYWJsaW5nIGZvdXIgcnVsZXMgYnlcbiAqIGNvbmZpZ3VyaW5nIG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocmVzaG9sZHNGcm9tKHN0b3JlZDogUGFydGlhbDxOZWVkc0F0dGVudGlvblRocmVzaG9sZHM+IHwgbnVsbCB8IHVuZGVmaW5lZCk6IE5lZWRzQXR0ZW50aW9uVGhyZXNob2xkcyB7XG4gIHJldHVybiB7IC4uLkRFRkFVTFRfVEhSRVNIT0xEUywgLi4uKHN0b3JlZCA/PyB7fSkgfTtcbn1cbiJdfQ==