@pipeline-builder/api-core 5.2.10 → 5.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/helpers/org-hierarchy-http.d.ts +3 -2
- package/lib/helpers/org-hierarchy-http.js +11 -5
- package/lib/middleware/index.d.ts +1 -1
- package/lib/middleware/index.js +2 -2
- package/lib/middleware/step-up.d.ts +4 -3
- package/lib/middleware/step-up.js +1 -1
- package/lib/services/index.d.ts +2 -2
- package/lib/services/index.js +2 -2
- package/lib/services/quota.d.ts +1 -2
- package/lib/services/quota.js +1 -1
- package/lib/services/version-vuln-policy.d.ts +1 -3
- package/lib/services/version-vuln-policy.js +2 -3
- package/lib/types/common.d.ts +13 -22
- package/lib/types/common.js +44 -5
- package/lib/types/ecosystem-notifications.d.ts +218 -26
- package/lib/types/ecosystem-notifications.js +26 -10
- package/lib/types/ecosystem.d.ts +1 -0
- package/lib/types/ecosystem.js +33 -23
- package/lib/types/error-codes.d.ts +41 -0
- package/lib/types/error-codes.js +62 -1
- package/lib/types/feature-flags.d.ts +11 -4
- package/lib/types/feature-flags.js +51 -11
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.js +2 -2
- package/lib/types/permissions.d.ts +353 -22
- package/lib/types/permissions.js +263 -125
- package/lib/types/pipeline.d.ts +2 -0
- package/lib/types/pipeline.js +3 -1
- package/lib/types/plugin-catalog.d.ts +68 -0
- package/lib/types/plugin-catalog.js +82 -1
- package/lib/types/quota-tiers.d.ts +6 -24
- package/lib/types/quota-tiers.js +6 -28
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +22 -1
- package/lib/types/tier-limits.d.ts +19 -0
- package/lib/types/tier-limits.js +27 -1
- package/lib/types/usage-projection.d.ts +0 -16
- package/lib/types/usage-projection.js +1 -20
- package/lib/types/wire-vocabulary.d.ts +81 -2
- package/lib/types/wire-vocabulary.js +89 -3
- package/lib/validation/index.d.ts +1 -1
- package/lib/validation/index.js +2 -2
- package/lib/validation/pipeline-schemas.d.ts +22 -0
- package/lib/validation/pipeline-schemas.js +19 -1
- package/lib/validation/plugin-spec-schema.d.ts +45 -2
- package/lib/validation/plugin-spec-schema.js +85 -7
- package/package.json +8 -1
|
@@ -108,6 +108,9 @@ export const REMOTE_AUDIT_ACTIONS = [
|
|
|
108
108
|
// two-person decision whose approval is recorded above.
|
|
109
109
|
'compliance.exemption.request',
|
|
110
110
|
'compliance.exemption.reject',
|
|
111
|
+
// The daily expiry sweep flipping approved exemptions past `expiresAt` to
|
|
112
|
+
// `expired` — once per org per tick (system actor, `details.ids`, `count`).
|
|
113
|
+
'compliance.exemption.expire',
|
|
111
114
|
'compliance.rule.toggle',
|
|
112
115
|
'compliance.rule.create',
|
|
113
116
|
'compliance.rule.update',
|
|
@@ -367,6 +370,9 @@ export const REMOTE_AUDIT_ACTIONS = [
|
|
|
367
370
|
'reporting.report.ownership.transfer',
|
|
368
371
|
'reporting.report.published',
|
|
369
372
|
'reporting.report.republished',
|
|
373
|
+
// A published run re-sent to the recipients/destinations its first delivery
|
|
374
|
+
// missed (relay outage, dead pod) — NOT a correction: the numbers are unchanged.
|
|
375
|
+
'reporting.report.redelivered',
|
|
370
376
|
'reporting.report.link.created',
|
|
371
377
|
'reporting.report.link.revoked',
|
|
372
378
|
'reporting.report.recipient.added',
|
|
@@ -478,6 +484,18 @@ export const REMOTE_AUDIT_ACTIONS = [
|
|
|
478
484
|
'plugin.version.pause',
|
|
479
485
|
'plugin.version.yank',
|
|
480
486
|
'plugin.version.unyank',
|
|
487
|
+
// Pipeline toolchain releases (docs/plans/bootstrap-image-versioning.md §13).
|
|
488
|
+
'toolchain.default.set',
|
|
489
|
+
'toolchain.default.initial',
|
|
490
|
+
'toolchain.default.restore',
|
|
491
|
+
'toolchain.rollout.update',
|
|
492
|
+
'toolchain.release.notes',
|
|
493
|
+
'toolchain.release.deprecate',
|
|
494
|
+
'toolchain.release.yank',
|
|
495
|
+
'toolchain.release.delete',
|
|
496
|
+
'toolchain.recovery.notify',
|
|
497
|
+
'toolchain.org_default.set',
|
|
498
|
+
'toolchain.org_default.clear',
|
|
481
499
|
'plugin.version.deprecate',
|
|
482
500
|
// Retiring a version's registry image to reclaim `storageBytes`. Distinct
|
|
483
501
|
// from the four above, which change whether a version RESOLVES and delete
|
|
@@ -592,9 +610,12 @@ export const REMOTE_AUDIT_ACTIONS = [
|
|
|
592
610
|
// tool, format, stage, the finding counts — never the findings themselves).
|
|
593
611
|
'pipeline.plugin.upgraded',
|
|
594
612
|
'pipeline.security_report.upload',
|
|
613
|
+
// A member removed one (tool, stage) report slot of a pipeline — a dropped
|
|
614
|
+
// scanner or renamed stage (`details`: tool, stage, the counts it carried).
|
|
615
|
+
'pipeline.security_report.delete',
|
|
595
616
|
];
|
|
596
617
|
/** Whether `value` is an action a remote service may emit (the ingest allow-list). */
|
|
597
618
|
export function isRemoteAuditAction(value) {
|
|
598
619
|
return REMOTE_AUDIT_ACTIONS.includes(value);
|
|
599
620
|
}
|
|
600
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9yZW1vdGUtYXVkaXQtYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7O0dBT0c7QUFHSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUc7SUFDbEMsd0JBQXdCO0lBQ3hCLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsOEVBQThFO0lBQzlFLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUscUJBQXFCO0lBQ3JCLHVFQUF1RTtJQUN2RSwyRUFBMkU7SUFDM0UsK0VBQStFO0lBQy9FLDhFQUE4RTtJQUM5RSxrRUFBa0U7SUFDbEUseUVBQXlFO0lBQ3pFLG9CQUFvQjtJQUNwQiwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLHNFQUFzRTtJQUN0RSw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLHVFQUF1RTtJQUN2RSxxQ0FBcUM7SUFDckMscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQiw2RUFBNkU7SUFDN0UsK0VBQStFO0lBQy9FLHFFQUFxRTtJQUNyRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YsZUFBZTtJQUNmLDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIseUVBQXlFO0lBQ3pFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsdUVBQXVFO0lBQ3ZFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsZ0VBQWdFO0lBQ2hFLHFFQUFxRTtJQUNyRSxvREFBb0Q7SUFDcEQsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG1FQUFtRTtJQUNuRSw0RUFB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QUFzQztJQUN0QyxxREFBcUQ7SUFDckQsb0NBQW9DO0lBQ3BDLHVFQUF1RTtJQUN2RSxvRUFBb0U7SUFDcEUseUVBQXlFO0lBQ3pFLGlFQUFpRTtJQUNqRSw2QkFBNkI7SUFDN0Isb0NBQW9DO0lBQ3BDLDJFQUEyRTtJQUMzRSx1RUFBdUU7SUFDdkUsaUVBQWlFO0lBQ2pFLHlCQUF5QjtJQUN6Qiw4QkFBOEI7SUFDOUIsd0VBQXdFO0lBQ3hFLDZFQUE2RTtJQUM3RSx3RUFBd0U7SUFDeEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSx3QkFBd0I7SUFDeEIsOEJBQThCO0lBQzlCLHdCQUF3QjtJQUN4Qix5RUFBeUU7SUFDekUsNEVBQTRFO0lBQzVFLGdDQUFnQztJQUNoQyx3RUFBd0U7SUFDeEUsK0VBQStFO0lBQy9FLDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUsMEJBQTBCO0lBQzFCLGlDQUFpQztDQUN6QixDQUFDO0FBSVgsc0ZBQXNGO0FBQ3RGLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFhO0lBQy9DLE9BQVEsb0JBQTBDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcmVtb3RlIChub24tcGxhdGZvcm0pIGF1ZGl0IEFDVElPTiBWT0NBQlVMQVJZLlxuICpcbiAqIEtlcHQgYXBhcnQgZnJvbSB0aGUgY2xpZW50IHRoYXQgc2hpcHMgdGhlIGV2ZW50cyAoYHNlcnZpY2VzL3JlbW90ZS1hdWRpdC1jbGllbnQudHNgKVxuICogYmVjYXVzZSBpdCBpcyBhbiBhbGxvdy1saXN0LCBub3QgbWFjaGluZXJ5OiBpdCBpcyB0aGUgdGhpbmcgYSByZXZpZXdlciByZWFkc1xuICogZW5kIHRvIGVuZCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgYSBzZXJ2aWNlIG1heSBlbWl0IGEgZ2l2ZW4gYWN0aW9uLCBhbmQgaXQgaXNcbiAqIHdoYXQgcGxhdGZvcm0ncyBpbmdlc3QgdmFsaWRhdGVzIGFnYWluc3QuXG4gKi9cblxuXG4vKipcbiAqIFRoZSBleGFjdCBzZXQgb2YgYXVkaXQgYWN0aW9ucyBhIE5PTi1QTEFURk9STSAocmVtb3RlKSBzZXJ2aWNlIGlzIHBlcm1pdHRlZCB0b1xuICogZW1pdCB0aHJvdWdoIGBQT1NUIC9hdWRpdC9ldmVudHNgLiBUaGlzIGlzIHRoZSBTSU5HTEUgU09VUkNFIOKAlCBgUmVtb3RlQXVkaXRBY3Rpb25gXG4gKiBpcyBkZXJpdmVkIGZyb20gaXQsIHNvIHRoZSB0eXBlIGFuZCB0aGUgcnVudGltZSBhbGxvdy1saXN0IGNhbiBuZXZlciBkcmlmdC5cbiAqXG4gKiBTRUNVUklUWTogcGxhdGZvcm0ncyBpbmdlc3QgdmFsaWRhdGVzIGBhY3Rpb25gIGFnYWluc3QgdGhpcyBzdWJzZXQgKHZpYVxuICoge0BsaW5rIGlzUmVtb3RlQXVkaXRBY3Rpb259KSwgTk9UIHRoZSBmdWxsIHBsYXRmb3JtIGBBdWRpdEFjdGlvbmAgdW5pb24g4oCUIGFcbiAqIGBzZXJ2aWNlOipgIHRva2VuIG11c3Qgbm90IGJlIGFibGUgdG8gZm9yZ2UgcGxhdGZvcm0tYXV0aG9yaXR5IGV2ZW50c1xuICogKGBhZG1pbi5zdXBlcmFkbWluLmdyYW50YCwgYG9yZy5vd25lcnNoaXAudHJhbnNmZXJgLCBgdXNlci5sb2dpbmAsIOKApikuIEtlZXBcbiAqIHRoaXMgbGlzdCBmcmVlIG9mIGFueSBwbGF0Zm9ybS1vbmx5IGFjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFTU9URV9BVURJVF9BQ1RJT05TID0gW1xuICAncGx1Z2luLmJ1aWxkLmNvbXBsZXRlZCcsXG4gICdwbHVnaW4uYnVpbGQuZmFpbGVkJyxcbiAgJ3BsdWdpbi5idWlsZC50aW1lb3V0JyxcbiAgLy8gQSB2ZXJzaW9uIHBlcnNpc3RlZCBVTlNDQU5ORUQgYmVjYXVzZSB0aGUgYnVpbGQtdGltZSBzY2FuIGNvdWxkIG5vdCBydW4gYW5kXG4gIC8vIHRoZSBvcGVyYXRvciBlc2NhcGUgaGF0Y2ggYFBMVUdJTl9BTExPV19VTlNDQU5ORURgIGlzIG9uICh3aXRob3V0IGl0IHRoZVxuICAvLyBidWlsZCBmYWlscyBgSU1BR0VfU0NBTl9VTkFWQUlMQUJMRWApLiBgZGV0YWlsc2AgY2FycnkgbmFtZS92ZXJzaW9uL2RpZ2VzdC5cbiAgJ3BsdWdpbi5zY2FuLnNraXBwZWQnLFxuICAvLyBGaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzIHdlcmUgRVhFTVBURUQgZnJvbSB0aGUgcGxhdGZvcm0gZmxvb3IgYnkgYVxuICAvLyBgUExVR0lOX1ZVTE5fV0FJVkVSU2AgZW50cnksIHNvIGEgYnVpbGQgdGhhdCB3b3VsZCBvdGhlcndpc2UgaGF2ZSBmYWlsZWRcbiAgLy8gUExVR0lOX1ZVTE5fR0FURSB3YXMgYWxsb3dlZCB0aHJvdWdoLiBUaGUgb3RoZXIgaGFsZiBvZiBwbHVnaW4uc2Nhbi5za2lwcGVkOlxuICAvLyBib3RoIGFyZSBvcGVyYXRvciBlc2NhcGUgaGF0Y2hlcyB0aGF0IGNoYW5nZSBhIGdhdGUncyB2ZXJkaWN0LCBhbmQgYSBtZXRyaWNcbiAgLy8gYW5kIGEgbG9nIGxpbmUgYXJlIG5vdCBhIGR1cmFibGUgcmVjb3JkIG9mIG9uZS4gYGRldGFpbHNgIGNhcnJ5XG4gIC8vIG5hbWUvdmVyc2lvbi9kaWdlc3QsIGhvdyBtYW55IGZpbmRpbmdzIHdlcmUgd2FpdmVkIGFuZCB3aGljaCBwYWNrYWdlcy5cbiAgJ3BsdWdpbi52dWxuLndhaXZlZCcsXG4gIC8vIFRoZSBuaWdodGx5IHJlc2NhbiBGTEFHR0VEIGEgc3RvcmVkIHZlcnNpb24gKGl0cyBnYXRlZCBDcml0aWNhbCBmaW5kaW5nc1xuICAvLyBub3cgZXhjZWVkIFBMVUdJTl9WVUxOX01BWF9GSU5ESU5HUyDigJQgbG9va3VwIGFuZCB0aGUgcGlwZWxpbmUncyBvd25lcnMgYXJlXG4gIC8vIHdhcm5lZCBhdCBgZXJyb3JgIHNldmVyaXR5KSwgb3IgQ0xFQVJFRCB0aGF0IGZsYWcuIEJvdGggY2hhbmdlIHdoYXRcbiAgLy8gcmVzb2x1dGlvbiBzYXlzIGFib3V0IGEgdmVyc2lvbiBub2JvZHkgcmVidWlsdCwgb24gbm9ib2R5J3MgcmVxdWVzdCwgc28gdGhlXG4gIC8vIHJlY29yZCBvZiBXSEVOIGFuZCBXSFkgbGl2ZXMgaW4gdGhlIGhhc2gtY2hhaW5lZCBsb2cgcmF0aGVyIHRoYW4gb25seSBpbiBhXG4gIC8vIGNvbHVtbiB0aGUgbmV4dCByZXNjYW4gb3ZlcndyaXRlcy4gYGRldGFpbHNgIGNhcnJ5IGNvdW50cywgdGhlIGdhdGVkXG4gIC8vIGFkdmlzb3J5IGlkcyBhbmQgdGhlIGltYWdlIGRpZ2VzdC5cbiAgJ3BsdWdpbi52dWxuLmZsYWdnZWQnLFxuICAncGx1Z2luLnZ1bG4uY2xlYXJlZCcsXG4gIC8vIFBsdWdpbiBsaWZlY3ljbGUgbXV0YXRpb25zIChhcGkvcGx1Z2luIHJvdXRlIGhhbmRsZXJzKSDigJQgdGhlIGRlc3RydWN0aXZlIC9cbiAgLy8gcHVibGlzaGluZyBzdXJmYWNlIHRoYXQgYnVpbGRzIGFscmVhZHkgYXVkaXQncyBjb3VudGVycGFydDogcmVnaXN0cnkgZGVsZXRlLFxuICAvLyBzb3VyY2UgdXBsb2FkLCBhbmQgZGVwbG95LXRvLWNsdXN0ZXIuIGB0YXJnZXRJZGAgaXMgdGhlIHBsdWdpbiBpZC5cbiAgJ3BsdWdpbi5kZWxldGUnLFxuICAncGx1Z2luLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgcHVyZ2U6IHBlcm1hbmVudCBoYXJkLWRlbGV0ZSBvZiBhIHNvZnQtZGVsZXRlZCBwbHVnaW4gdG9tYnN0b25lIG9uXG4gIC8vIGRlbWFuZCAoZmluYWxpemVzIHdoYXQgdGhlIHJldGVudGlvbiBzd2VlcCB3b3VsZCBvdGhlcndpc2UgZG8gbGF0ZXIpLlxuICAncGx1Z2luLnB1cmdlJyxcbiAgJ3BsdWdpbi51cGRhdGUnLFxuICAncGx1Z2luLnVwbG9hZCcsXG4gICdwbHVnaW4uZGVwbG95JyxcbiAgLy8gUGx1Z2luIGJ1bGsgbXV0YXRpb25zIChhcGkvcGx1Z2luIGJ1bGstcGx1Z2luIHJvdXRlKSArIERMUSBwdXJnZSAoZHJvcHMgYWxsXG4gIC8vIGRlYWQtbGV0dGVyZWQgYnVpbGQgam9icywgY3Jvc3Mtb3JnLCBzeXNhZG1pbikuIGBkZXRhaWxzYCBjYXJyaWVzIGNvdW50cy5cbiAgJ3BsdWdpbi5idWxrLnVwZGF0ZScsXG4gICdwbHVnaW4uYnVsay5kZWxldGUnLFxuICAncGx1Z2luLmRscS5wdXJnZScsXG4gIC8vIEJ1aWxkIHJlLXJ1bnMgZnJvbSB0aGUgcXVldWUtdHJpYWdlIHN1cmZhY2U6IHJlLWVucXVldWUgYSBGQUlMRUQgYnVpbGRcbiAgLy8gKGBwbHVnaW4uYnVpbGQucmV0cnlgKSBvciBhIGRlYWQtbGV0dGVyZWQgb25lIChgcGx1Z2luLmRscS5yZXBsYXlgKS4gQm90aFxuICAvLyByZS1ydW4gYW4gaW1hZ2UgYnVpbGQgKyBwbHVnaW4gcGVyc2lzdCBvbiB0aGUgY2FsbGVyJ3MgYXV0aG9yaXR5LCBzbyB0aGV5XG4gIC8vIGFyZSBhdWRpdGVkIG11dGF0aW9uczsgYGFmZmVjdGVkT3JnSWRgIGNhcnJpZXMgdGhlIGpvYidzIG93bmluZyBvcmcuXG4gICdwbHVnaW4uYnVpbGQucmV0cnknLFxuICAncGx1Z2luLmRscS5yZXBsYXknLFxuICAvLyBQaXBlbGluZSBtdXRhdGlvbnMg4oCUIGVtaXR0ZWQgYnkgYXBpL3BpcGVsaW5lJ3Mgcm91dGUgaGFuZGxlcnNcbiAgLy8gKGNyZWF0ZS91cGRhdGUvZGVsZXRlICsgQ29kZVBpcGVsaW5lIGV4ZWN1dGlvbiB0cmlnZ2VyL2NhbmNlbCkgYW5kXG4gIC8vIHBvc3RlZCB0byBwbGF0Zm9ybSdzIGBQT1NUIC9hdWRpdC9ldmVudHNgIGluZ2VzdC5cbiAgJ3BpcGVsaW5lLmNyZWF0ZScsXG4gICdwaXBlbGluZS51cGRhdGUnLFxuICAncGlwZWxpbmUuZGVsZXRlJyxcbiAgJ3BpcGVsaW5lLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgcHVyZ2U6IHBlcm1hbmVudCBoYXJkLWRlbGV0ZSBvZiBhIHNvZnQtZGVsZXRlZCBwaXBlbGluZSAvXG4gIC8vIHBpcGVsaW5lX3RlbXBsYXRlIHRvbWJzdG9uZSBvbiBkZW1hbmQgKGZpbmFsaXplcyB3aGF0IHRoZSByZXRlbnRpb24gc3dlZXBcbiAgLy8gd291bGQgb3RoZXJ3aXNlIGRvIGxhdGVyKS4gYHRhcmdldElkYCBpcyB0aGUgcHVyZ2VkIGlkLlxuICAncGlwZWxpbmUucHVyZ2UnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUuY3JlYXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnVwZGF0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5kZWxldGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUucmVzdG9yZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5wdXJnZScsXG4gICdwaXBlbGluZS5leGVjdXRpb24uc3RhcnQnLFxuICAncGlwZWxpbmUuZXhlY3V0aW9uLmNhbmNlbCcsXG4gIC8vIENvZGVQaXBlbGluZSBBUk4tcmVnaXN0cnkgY29uZmlnIChhcGkvcGlwZWxpbmUgcmVnaXN0cnkgcm91dGUpIOKAlCByZWdpc3RlcmluZyAvXG4gIC8vIGRlcmVnaXN0ZXJpbmcgdGhlIGV4dGVybmFsIENvZGVQaXBlbGluZSB0aGF0IGJhY2tzIGEgcGlwZWxpbmUgKGRlcGxveS1hZmZlY3RpbmcpLlxuICAncGlwZWxpbmUucmVnaXN0cnkucmVnaXN0ZXInLFxuICAncGlwZWxpbmUucmVnaXN0cnkuZGVyZWdpc3RlcicsXG4gIC8vIFF1b3RhIGFkbWluaXN0cmF0aW9uIChhcGkvcXVvdGEpIOKAlCBhIHN1cGVyYWRtaW4gcmVzZXR0aW5nIGFuIG9yZydzIHVzYWdlXG4gIC8vIGNvdW50ZXIgb3IgZWRpdGluZyBpdHMgdGllciBsaW1pdHMuIGBhZmZlY3RlZE9yZ0lkYCBpcyB0aGUgb3JnIGNoYW5nZWQ7XG4gIC8vIGBkZXRhaWxzYCBjYXJyaWVzIHRoZSBxdW90YVR5cGUgKyBvbGQvbmV3IHZhbHVlLlxuICAncXVvdGEucmVzZXQnLFxuICAncXVvdGEubGltaXQudXBkYXRlJyxcbiAgLy8gQSBzdXBlcmFkbWluIGRlbGV0aW5nIGFuIG9yZydzIGVudGlyZSBxdW90YSBkb2N1bWVudC5cbiAgJ3F1b3RhLmRlbGV0ZScsXG4gIC8vIEFuIGFjY291bnQncyBxdW90YSB0aHJlc2hvbGQtbm90aWNlIHNldHRpbmdzIChvcHQtb3V0ICsgdGhlXG4gIC8vIGBxdW90YS50aHJlc2hvbGRgIHdlYmhvb2sgVVJMKSDigJQgd2hlcmUgdXNhZ2Ugd2FybmluZ3MgZ28uXG4gICdxdW90YS5ub3RpY2Vfc2V0dGluZ3MudXBkYXRlJyxcbiAgLy8gQ29tcGxpYW5jZSBhZG1pbmlzdHJhdGlvbiAoYXBpL2NvbXBsaWFuY2UpIOKAlCB0aGUgZW5mb3JjZW1lbnQtcG9zdHVyZSBzdXJmYWNlLlxuICAvLyBBcHByb3ZpbmcvcmV2b2tpbmcgYW4gZXhlbXB0aW9uLCB0b2dnbGluZy9hdXRob3JpbmcvZGVsZXRpbmcgYSBydWxlLFxuICAvLyBhdXRob3JpbmcvZGVsZXRpbmcgYSBwb2xpY3ksIG1hbmFnaW5nIHNjYW4gc2NoZWR1bGVzLCBhcHBseWluZyBhIHRlbXBsYXRlLFxuICAvLyBvciBjYW5jZWxsaW5nIGEgcnVubmluZyBzY2FuLiBgdGFyZ2V0SWRgIGlzIHRoZSBydWxlL3BvbGljeS9leGVtcHRpb24vc2NhbiBpZC5cbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLmFwcHJvdmUnLFxuICAnY29tcGxpYW5jZS5leGVtcHRpb24ucmV2b2tlJyxcbiAgLy8gQSBtZW1iZXIgRklMSU5HIGFuIGV4ZW1wdGlvbiByZXF1ZXN0IChzaW5nbGUgb3IgYnVsazsgbWV0YWRhdGEgb25seSwgbmV2ZXJcbiAgLy8gdGhlIHJlYXNvbikgYW5kIGFuIGFkbWluIFJFSkVDVElORyBvbmUg4oCUIHRoZSBvdGhlciBoYWx2ZXMgb2YgdGhlXG4gIC8vIHR3by1wZXJzb24gZGVjaXNpb24gd2hvc2UgYXBwcm92YWwgaXMgcmVjb3JkZWQgYWJvdmUuXG4gICdjb21wbGlhbmNlLmV4ZW1wdGlvbi5yZXF1ZXN0JyxcbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLnJlamVjdCcsXG4gICdjb21wbGlhbmNlLnJ1bGUudG9nZ2xlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUuZGVsZXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIG9uLWRlbWFuZCBoYXJkLWRlbGV0ZSAoUFVSR0UpIG9mIGEgc29mdC1kZWxldGVkIHJ1bGUvcG9saWN5IHRvbWJzdG9uZSDigJRcbiAgLy8gdGhlIGNhbGxlci1pbml0aWF0ZWQgY291bnRlcnBhcnQgdG8gdGhlIHJldGVudGlvbiBzd2VlcCdzIGF1dG8tcHVyZ2UuIERlc3Ryb3lzXG4gIC8vIHRoZSB0b21ic3RvbmUgcGVybWFuZW50bHksIHNvIGl0IGNhcnJpZXMgdGhlIGR1cmFibGUsIHRhbXBlci1ldmlkZW50IHRyYWlsLlxuICAnY29tcGxpYW5jZS5ydWxlLnB1cmdlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kuZGVsZXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnJlc3RvcmUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kucHVyZ2UnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS50ZW1wbGF0ZS5hcHBseScsXG4gIC8vIExhdW5jaGluZyBhbiBvcmctd2lkZSByZS1ldmFsdWF0aW9uICh0aGUgY291bnRlcnBhcnQgdG8gYC5jYW5jZWxgKSDigJQgaXRcbiAgLy8gcGVyc2lzdHMgYSBzY2FuIGFuZCBjYW4gYmxvY2sgZW50aXRpZXMgdGhhdCBwYXNzZWQgYmVmb3JlLlxuICAnY29tcGxpYW5jZS5zY2FuLmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnNjYW4uY2FuY2VsJyxcbiAgLy8gQSBzY2FuJ3MgdGVybWluYWwgT1VUQ09NRSAoY29tcGxldGVkIOKGkiBzdWNjZXNzIHdpdGggdGhlIHBhc3Mvd2Fybi9ibG9ja1xuICAvLyBjb3VudHMsIGZhaWxlZCDihpIgZmFpbHVyZSkuIFNjaGVkdWxlZCBzY2FucyBhbHNvIHdyaXRlIGBjb21wbGlhbmNlLnNjYW4uY3JlYXRlYFxuICAvLyAoYGRldGFpbHMudHJpZ2dlcmVkQnk6ICdzY2hlZHVsZWQnYCksIGF0dHJpYnV0ZWQgdG8gdGhlIHNjaGVkdWxlJ3MgYXV0aG9yLlxuICAnY29tcGxpYW5jZS5zY2FuLmNvbXBsZXRlJyxcbiAgLy8gUGxhdGZvcm0gb25ib2FyZGluZyBzdWJzY3JpYmluZyBhIG5ldyBvcmcgdG8gZXZlcnkgcHVibGlzaGVkIHJ1bGVcbiAgLy8gKElOQUNUSVZFIHN1YnNjcmlwdGlvbnM7IGBkZXRhaWxzLnN1YnNjcmliZWRgIGlzIHRoZSBjb3VudCkuXG4gICdjb21wbGlhbmNlLnN1YnNjcmlwdGlvbi5hdXRvLXN1YnNjcmliZScsXG4gIC8vIFBlci1vcmcgY29tcGxpYW5jZSBub3RpZmljYXRpb24gc2V0dGluZ3M6IHJlY2lwaWVudHMgKyB0aGUgb3V0Ym91bmQgd2ViaG9va1xuICAvLyBVUkwvc2VjcmV0LiBCZWFyZXItZXF1aXZhbGVudCBjb25maWcgdGhhdCByZWRpcmVjdHMgdmlvbGF0aW9uIG5vdGljZXMsIHNvIGFcbiAgLy8gY2hhbmdlIGNhcnJpZXMgdGhlIGR1cmFibGUgdHJhaWwgKG5ldmVyIHRoZSBzZWNyZXQgaXRzZWxmKS5cbiAgJ2NvbXBsaWFuY2Uubm90aWZpY2F0aW9uLXByZWZlcmVuY2UudXBkYXRlJyxcbiAgLy8gSW1hZ2UtcmVnaXN0cnkgZGVzdHJ1Y3RpdmUgb3BzIChhcGkvaW1hZ2UtcmVnaXN0cnkpIOKAlCBnYXJiYWdlLWNvbGxlY3Rpb25cbiAgLy8gc3dlZXBzIGFuZCBleHBsaWNpdCBpbWFnZS90YWcgZGVsZXRlcy5cbiAgJ3JlZ2lzdHJ5LmdjJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLmRlbGV0ZScsXG4gIC8vIENyb3NzLXJlcG8gdGFnL2ltYWdlIGNvcHkgKGFwaS9pbWFnZS1yZWdpc3RyeSBQT1NUIC9hcGkvaW1hZ2VzL2NvcHkpLiBBXG4gIC8vIGNyb3NzLXRlbmFudCBjb3B5IG1vdmVzIGRhdGEgYWNyb3NzIGN1c3RvbWVyIGJvdW5kYXJpZXMsIHNvIGl0IG5lZWRzIHRoZVxuICAvLyBkdXJhYmxlLCB0YW1wZXItZXZpZGVudCB0cmFpbCDigJQgbm90IGp1c3QgdGhlIExva2kgb3BlcmF0b3IgbGluZS5cbiAgJ3JlZ2lzdHJ5LmltYWdlLmNvcHknLFxuICAvLyBBIHBsdWdpbiBpbWFnZSBzaWduZWQgKyBTQk9NLWF0dGVzdGVkIGJ5IHRoZSBwbGF0Zm9ybSdzIHBsdWdpbi1zaWduaW5nIGtleVxuICAvLyAoYXBpL2ltYWdlLXJlZ2lzdHJ5IFBPU1QgL2ludGVybmFsL3BsdWdpbi1zaWduYXR1cmVzLCBjYWxsZWQgYnkgdGhlIHBsdWdpblxuICAvLyBidWlsZCB3b3JrZXIpLiBUaGUga2V5IGlzIHdoYXQgc3ludGggdHJ1c3RzLCBzbyBldmVyeSB1c2UgaXMgb24gdGhlIHRyYWlsLlxuICAncmVnaXN0cnkuaW1hZ2Uuc2lnbicsXG4gIC8vIFRoZSBEb2NrZXIgdG9rZW4gZW5kcG9pbnQgbWludGluZyBhIHJlZ2lzdHJ5IHRva2VuIHRoYXQgR1JBTlRTIGFjY2Vzc1xuICAvLyAoYGRldGFpbHMuZ3JhbnRlZGA6IHJlcG8gKyBhY3Rpb25zOyB0aGUgc2NvcGUtbGVzcyBgZG9ja2VyIGxvZ2luYCBwcm9iZSBpc1xuICAvLyBub3QgcmVjb3JkZWQpIOKAlCBhbmQsIGFzIG91dGNvbWUgZmFpbHVyZSwgYSByZWZ1c2VkIGNyZWRlbnRpYWwgKGhhc2hlZFxuICAvLyB1c2VybmFtZSwgY3JlZGVudGlhbCBraW5kIG9ubHkpLlxuICAncmVnaXN0cnkudG9rZW4uaXNzdWUnLFxuICAvLyBBIHB1c2ggY3JlZGVudGlhbCBtaW50ZWQgZm9yIG9uZSBhbm9ueW1vdXMgc3VibWlzc2lvbidzXG4gIC8vIGBxdWFyYW50aW5lLzxzdWJtaXNzaW9uSWQ+YCByZXBvIChleHBpcnkgKyBUVEwsIG5ldmVyIHRoZSBzZWNyZXQpLlxuICAncmVnaXN0cnkucXVhcmFudGluZS5jcmVkZW50aWFsLm1pbnQnLFxuICAvLyBNZXNzYWdpbmcgKGFwaS9tZXNzYWdlKSDigJQgYWRtaW4gQlJPQURDQVNUIGFubm91bmNlbWVudHMgKyBkZXN0cnVjdGl2ZVxuICAvLyBkZWxldGVzLiAxOjEgdXNlciBtZXNzYWdlcyBhcmUgaW50ZW50aW9uYWxseSBOT1QgYXVkaXRlZCAobm9pc2UgKyB0aGV5IHdvdWxkXG4gIC8vIHB1bGwgcHJpdmF0ZSBjb250ZW50IGludG8gdGhlIHRyYWlsKS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHlcbiAgLy8gKHN1YmplY3QvdHlwZS9zY29wZSksIE5FVkVSIG1lc3NhZ2UgYm9keSBjb250ZW50LlxuICAnbWVzc2FnZS5hbm5vdW5jZW1lbnQuY3JlYXRlJyxcbiAgJ21lc3NhZ2UuZGVsZXRlJyxcbiAgLy8gQnVsayBcInJlbW92ZSBmcm9tIG15IGluYm94XCI6IGEgcGVyLXBhcnRpY2lwYW50IFZJRVcgY2hhbmdlLCBub3QgYSBkZWxldGUg4oCUXG4gIC8vIHRoZSByb3csIHRoZSBvdGhlciBwYXJ0aWNpcGFudHMgYW5kIHRoZSByZXRlbnRpb24gc3dlZXAgYXJlIHVudG91Y2hlZC4gT25lXG4gIC8vIHJvdyBwZXIgYnVsayBjYWxsIHdpdGggYGRldGFpbHMuY291bnRgIGFuZCB0aGUgZmlsdGVyIHNjb3BlLCBuZXZlciBwZXJcbiAgLy8gbWVzc2FnZSBhbmQgbmV2ZXIgdGhlIHNlYXJjaCB0ZXh0LlxuICAnbWVzc2FnZS5oaWRlJyxcbiAgLy8gVGhlIHVuZG8gb2YgYG1lc3NhZ2UuaGlkZWA6IHJvd3MgcHV0IGJhY2sgaW50byB0aGlzIG9yZydzIGluYm94LiBTYW1lXG4gIC8vIHNoYXBlIOKAlCBvbmUgcm93IHBlciBjYWxsIHdpdGggYGRldGFpbHMuY291bnRgLCBuZXZlciB0aGUgaWRzLlxuICAnbWVzc2FnZS51bmhpZGUnLFxuICAnbWVzc2FnZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIG9uLWRlbWFuZCBQVVJHRSAocGVybWFuZW50IGhhcmQtZGVsZXRlKSBvZiBhbiBhbHJlYWR5LXNvZnQtZGVsZXRlZFxuICAvLyBtZXNzYWdlIHRvbWJzdG9uZSDigJQgdGhlIGRlc3RydWN0aXZlIGZpbmFsaXplciB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkXG4gIC8vIG90aGVyd2lzZSBwZXJmb3JtIGF0IHRoZSBwdXJnZSBkZWFkbGluZS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHkuXG4gICdtZXNzYWdlLnB1cmdlJyxcbiAgLy8gQW4gYXV0aG9yJ3MgZWRpdCBvZiBhIHNlbnQgbWVzc2FnZSAoYW5kIHJlZnVzZWQgYXR0ZW1wdHMsIGFzIGZhaWx1cmVzKS5cbiAgLy8gYGRldGFpbHNgIGNhcnJ5IHRoZSBuZXcgYm9keSdzIExFTkdUSCBvbmx5IOKAlCBuZWl0aGVyIHNpZGUgb2YgdGhlIGVkaXQuXG4gICdtZXNzYWdlLnVwZGF0ZScsXG4gIC8vIEEgbWVzc2FnZSBhdHRhY2htZW50IHN0b3JlZCAoZ2VuZXJhbCBvciBzdXBwb3J0IG1vdW50LCBgZGV0YWlscy5zdXJmYWNlYCkuXG4gIC8vIFR5cGUgKyBzaXplIG9ubHkg4oCUIG5ldmVyIHRoZSBieXRlcywgYW5kIG5vdCB0aGUgdXNlci1jaG9zZW4gZmlsZW5hbWUuXG4gICdtZXNzYWdlLmF0dGFjaG1lbnQudXBsb2FkJyxcbiAgLy8gQSBTWVNURU0gbm90aWZpY2F0aW9uIGRyb3BwZWQgaW50byBhbiBvcmcncyBpbmJveCBieSBhbiBpbnRlcm5hbCBzZXJ2aWNlXG4gIC8vIChQT1NUIC9tZXNzYWdlcy9pbnRlcm5hbC9ub3RpZnkpOyBgZGV0YWlscy5jYWxsZXJgIG5hbWVzIHRoZSBzZXJ2aWNlLlxuICAnbWVzc2FnZS5ub3RpZnkuaW50ZXJuYWwnLFxuICAvLyBUaGUgcGxhdGZvcm0gb3JnLWRlbGV0ZSBjYXNjYWRlIHJlY2xhaW1pbmcgYW4gb3JnJ3MgYXR0YWNobWVudCBCTE9CUyDigJRcbiAgLy8gYGRldGFpbHMuYmxvYnNEZWxldGVkYCwgb3IgYSBmYWlsdXJlIHJvdyB3aGVuIHRoZSByZWNsYWltIGRpZCBub3QgY29tcGxldGUuXG4gICdtZXNzYWdlLm9yZy5wdXJnZScsXG4gIC8vIFN1cHBvcnQgY2FzZXMgKGFwaS9tZXNzYWdlKS4gRGlzdGluY3QgZnJvbSB0aGUgYG1lc3NhZ2UuKmAgZmFtaWx5IGFib3ZlXG4gIC8vIGJlY2F1c2UgYSBjYXNlIGlzIG5vdCBhbiBvcmRpbmFyeSBtZXNzYWdlOiBpdCBjYXJyaWVzIGEgcmVzcG9uc2UtdGltZVxuICAvLyBjb21taXRtZW50LCBzbyBXSE8gcmFpc2VkIGl0IGFuZCBXSEVOIHdlIGZpcnN0IGFuc3dlcmVkIGFyZSB0aGUgZmFjdHMgYVxuICAvLyBkaXNwdXRlIHR1cm5zIG9uLiBgZGV0YWlsc2AgY2FycnkgdGhlIGNhc2UgbnVtYmVyLCBsZXZlbCBhbmQgc2V2ZXJpdHkg4oCUXG4gIC8vIG1ldGFkYXRhIG9ubHksIG5ldmVyIHRoZSBib2R5IG9mIHdoYXQgYSBjdXN0b21lciB3cm90ZS5cbiAgLy9cbiAgLy8gVHdvIG9mIHRoZSBuaW5lIHBsYW5uZWQgc3VwcG9ydCBhY3Rpb25zIGFyZSBoZXJlLCBhbmQgb25seSB0d286IHRoZXNlIGFyZVxuICAvLyB0aGUgb25lcyB3aXRoIHJlYWwgZW1pdHRlcnMgdG9kYXkuIFRoZSByZXN0IChgc3RhdHVzYCwgYHNldmVyaXR5YCxcbiAgLy8gYGFzc2lnbmAsIGB0cmFuc2ZlcmAsIGBub3RlYCwgYHJlYWRgKSBsYW5kIFdJVEggdGhlIHJvdXRlcyB0aGF0IGVtaXQgdGhlbSDigJRcbiAgLy8gYSBkZWNsYXJlZCBhY3Rpb24gbm90aGluZyBlbWl0cyBpcyBkZWFkIHZvY2FidWxhcnksIGFuZCB0aGUgcGFyaXR5IHRlc3RcbiAgLy8gd291bGQgdGhlbiBmb3JjZSBhIGRvY3Mgcm93IGRlc2NyaWJpbmcgYW4gZXZlbnQgdGhhdCBuZXZlciBmaXJlcy5cbiAgLy9cbiAgLy8gYHN1cHBvcnQuY2FzZS5yZWFkYCB3aWxsIG1hdHRlciBtb3N0IG9mIGFsbCB3aGVuIGl0IGFycml2ZXM6IGl0IGlzIHRoZSBvbmx5XG4gIC8vIHJlY29yZCB0aGF0IHNvbWVvbmUgYXQgdGhlIHZlbmRvciBvcGVuZWQgYSBjdXN0b21lcidzIGNhc2UuXG4gICdzdXBwb3J0LmNhc2Uub3BlbicsXG4gICdzdXBwb3J0LmNhc2UucmVwbHknLFxuICAvLyBUaGUgd29ya2Zsb3cgbXV0YXRpb25zLiBFYWNoIGlzIGF1ZGl0ZWQgYmVjYXVzZSBlYWNoIG1vdmVzIGEgY2FzZSdzXG4gIC8vIHJlbGF0aW9uc2hpcCB0byBpdHMgcmVzcG9uc2UgY29tbWl0bWVudDogc3RhdHVzIHN0b3BzIG9yIHJlc3RhcnRzIHRoZVxuICAvLyBjbG9jaywgc2V2ZXJpdHkgY2hhbmdlcyB3aGljaCB0YXJnZXQgYXBwbGllcywgYW5kIHRoZSB0d28gb3duZXJzaGlwXG4gIC8vIGFjdGlvbnMgZGVjaWRlIFdITyBpcyBhY2NvdW50YWJsZSBmb3IgbWVldGluZyBpdC4gQSBzaWxlbnQgY2hhbmdlIG9mIG93bmVyXG4gIC8vIGlzIGhvdyBhY2NvdW50YWJpbGl0eSBmb3IgYSBtaXNzZWQgdGFyZ2V0IGRpc2FwcGVhcnMuXG4gICdzdXBwb3J0LmNhc2Uuc3RhdHVzJyxcbiAgJ3N1cHBvcnQuY2FzZS5zZXZlcml0eScsXG4gICdzdXBwb3J0LmNhc2UuYXNzaWduJyxcbiAgJ3N1cHBvcnQuY2FzZS50cmFuc2ZlcicsXG4gIC8vIE9OLUNBTEwuIFRoZSBwcm92aWRlciBvd25zIHRoZSByb3RhLCB0aGUgZXNjYWxhdGlvbiBhbmQgdGhlIGNvbnRhY3RcbiAgLy8gbWV0aG9kczsgd2hhdCBpdCBjYW5ub3Qgb3duIGlzIGFuIGF1ZGl0YWJsZSBhbnN3ZXIgdG8gXCJ3aG8gcGlja2VkIHRoaXMgdXBcbiAgLy8gYXQgMDM6MTRcIi4gQSBjbGljayBvbiBhIGxpbmsgaW4gdGhlaXIgVUkgaXMgbm90IGFuIGlkZW50aXR5IHRoaXMgc3lzdGVtIGNhblxuICAvLyBhdHRlc3QgdG8sIHNvIHRoZWlyIGluY2lkZW50IHN0YXRlIGNoYW5nZSBpcyByZWxheWVkIGhlcmUgYW5kIHJlY29yZGVkXG4gIC8vIGFnYWluc3QgdGhlIGFnZW50IHRoZXkgbmFtZS4gVGhlIGhhc2ggY2hhaW4gaXMgdGhlIHBvaW50OiBhIHBvc3QtaW5jaWRlbnRcbiAgLy8gcmV2aWV3IG5lZWRzIHRoZSBhY2sgdG8gYmUgZXZpZGVuY2UgcmF0aGVyIHRoYW4gYSBzY3JlZW5zaG90LlxuICAvL1xuICAvLyBgZXNjYWxhdGVkYCBpcyBhdWRpdGVkIHNlcGFyYXRlbHkgYmVjYXVzZSBpdCBpcyB0aGUgcmVjb3JkIHRoYXQgdGhlIEZJUlNUXG4gIC8vIHJlc3BvbmRlciBkaWQgbm90IGFuc3dlciDigJQgdGhlIGZhY3QgYSByb3RhIGlzIGFkanVzdGVkIG9uLCBhbmQgdGhlIG9uZSBtb3N0XG4gIC8vIGxpa2VseSB0byBiZSBkaXNwdXRlZCBsYXRlci5cbiAgJ3N1cHBvcnQub25jYWxsLmFja25vd2xlZGdlZCcsXG4gICdzdXBwb3J0Lm9uY2FsbC5lc2NhbGF0ZWQnLFxuICAvLyBUaGUgdGVzdCBwYWdlLiBBdWRpdGVkIGJlY2F1c2UgaXQgUklOR1MgQSBQSE9ORTogd2hvZXZlciBpdCB3YWtlcyBpc1xuICAvLyBlbnRpdGxlZCB0byBhIHJlY29yZCBvZiB3aG8gY2F1c2VkIHRoYXQsIGF0IHdoYXRldmVyIGhvdXIgaXQgd2FzLlxuICAnc3VwcG9ydC5vbmNhbGwudGVzdCcsXG4gIC8vIFRoZSBwZXItY2FzZSBzd2VlcCBwYWdpbmcgdGhlIHJvdGEgZm9yIGEgcHJlbWl1bSBjYXNlIG5lYXJpbmcgaXRzIHRhcmdldC5cbiAgLy8gUmVjb3JkZWQgb25jZSwgb24gdGhlIHRpY2sgdGhlIGNhc2UgRU5URVJFRCB0aGUgd2luZG93IOKAlCB0aGUgc3dlZXAgcmUtc2VuZHNcbiAgLy8gdGhlIHBhZ2UgZXZlcnkgdGljaywgYW5kIHR3ZW50eS1mb3VyIHJvd3MgZm9yIG9uZSBwYWdlIHdvdWxkIGJlIG5vaXNlLlxuICAnc3VwcG9ydC5vbmNhbGwucGFnZWQnLFxuICAvLyBUaGUgdHdvIENPTlRBQ1QgYWN0aW9ucyAocGxhdGZvcm0pLiBOb3QgY2FzZSBldmVudHMg4oCUIGVudGl0bGVtZW50IGV2ZW50czpcbiAgLy8gZWFjaCBvbmUgY2hhbmdlcyB3aG8gaW4gYW4gb3JnIGlzIGFibGUgdG8gY29tbWl0IHVzIHRvIGEgcmVzcG9uc2UgdGFyZ2V0IGF0XG4gIC8vIGFsbCwgYW5kIGRlc2lnbmF0aW5nIHNwZW5kcyBhIHNsb3Qgb2YgYSBQQUlELCBhY2NvdW50LXBvb2xlZCBhbGxvd2FuY2UuIFRoZVxuICAvLyByZXZva2UgY2FycmllcyB0aGUgY291bnQgb2Ygb3BlbiBjYXNlcyBpdCBsZWZ0IGJlaGluZCwgc28gYW4gb3JwaGFuZWQgY2FzZVxuICAvLyBpcyBhIHJlY29yZGVkIGZhY3QgcmF0aGVyIHRoYW4gc29tZXRoaW5nIGRpc2NvdmVyZWQgbGF0ZXIuXG4gICdzdXBwb3J0LmNvbnRhY3QuZGVzaWduYXRlJyxcbiAgJ3N1cHBvcnQuY29udGFjdC5yZXZva2UnLFxuICAvLyBUaGUgcHJlbWl1bSBVUEdSQURFLCBib3RoIGRpcmVjdGlvbnMuIFNlcGFyYXRlIGFjdGlvbnMgZnJvbSBkZXNpZ25hdGlvblxuICAvLyBiZWNhdXNlIHRoZXkgYW5zd2VyIHRvIGEgZGlmZmVyZW50IGNhcCBhbmQgY2FycnkgYSBkaWZmZXJlbnQgZmFjdDogd2hvIHdhc1xuICAvLyBlbnRpdGxlZCB0byAyNHg3IGNvdmVyYWdlLCBhbmQgd2hlbi4gQSByZXNwb25zZS10aW1lIGRpc3B1dGUgb3ZlciBhblxuICAvLyBvdXQtb2YtaG91cnMgY2FzZSB0dXJucyBvbiBleGFjdGx5IHRoYXQuXG4gICdzdXBwb3J0LmNvbnRhY3QudXBncmFkZScsXG4gICdzdXBwb3J0LmNvbnRhY3QuZG93bmdyYWRlJyxcbiAgLy8gU3RhZmYgbm90ZXMgb24gYSBjYXNlLiBBdWRpdGVkIGJlY2F1c2UgYSBub3RlIGlzIHRoZSB2ZW5kb3IncyBpbnRlcm5hbFxuICAvLyBhc3Nlc3NtZW50IG9mIGEgY3VzdG9tZXIgYW5kIHRoZSBvbmx5IHN1cmZhY2Ugb24gYSBjYXNlIHRoZSB0ZW5hbnQgbXVzdFxuICAvLyBuZXZlciBzZWU7IHRoZSB0cmFpbCBjYXJyaWVzIE1FVEFEQVRBIE9OTFkgKGNhc2UgbnVtYmVyLCBub3RlIGlkLCBsZW5ndGgpXG4gIC8vIGFuZCBuZXZlciB0aGUgYm9keSwgc2luY2UgdGhlIGNlbnRyYWwgdHJhaWwgaXMgcmVhZCBmYXIgbW9yZSB3aWRlbHkgdGhhblxuICAvLyB0aGUgc3VwcG9ydCBxdWV1ZSBpcy5cbiAgJ3N1cHBvcnQuY2FzZS5ub3RlJyxcbiAgLy8gVGhlIGNhbm5lZC1yZXBseSBsaWJyYXJ5LiBPTkUgYWN0aW9uIGZvciBjcmVhdGUvZWRpdC9yZXRpcmUgcmF0aGVyIHRoYW5cbiAgLy8gdGhyZWUsIGJlY2F1c2UgdGhlIHRyYWlsJ3MgcXVlc3Rpb24gaGVyZSBpcyBcIndobyBjaGFuZ2VkIHRoZSB3b3JkaW5nIHRoZVxuICAvLyBkZXNrIHNlbmRzIGN1c3RvbWVyc1wiLCBub3Qgd2hpY2ggdmVyYiB0aGV5IHVzZWQg4oCUIGBkZXRhaWxzYCBjYXJyaWVzIHRoYXQuXG4gIC8vIFN5c3RlbS13aWRlIHJhdGhlciB0aGFuIHBlci10ZW5hbnQsIHNvIHRoZXNlIHJvd3MgbmFtZSBubyBhZmZlY3RlZCBvcmcuXG4gICdzdXBwb3J0LmNhbm5lZC53cml0ZScsXG4gIC8vIEJpbGxpbmcgKGFwaS9iaWxsaW5nKSDigJQgc3Vic2NyaXB0aW9uICsgZW50aXRsZW1lbnQgbXV0YXRpb25zLCBtaXJyb3JlZCB0byB0aGVcbiAgLy8gY2VudHJhbCBhdWRpdCB0cmFpbCAodGhlc2UgYWxzbyB3cml0ZSB0byB0aGUgc2VydmljZS1sb2NhbCBiaWxsaW5nX2V2ZW50c1xuICAvLyBjb2xsZWN0aW9uKS4gYGRldGFpbHNgIGNhcnJ5IHBsYW4vdGllci9hZGRvbiBpZHMgb25seSDigJQgbmV2ZXIgY2FyZC9wYXltZW50XG4gIC8vIHNlY3JldHMgb3IgYW4gQVdTIGFjY291bnQgaWQuXG4gIC8vIFN1YnNjcmlwdGlvbiBsaWZlY3ljbGUgYSBDVVNUT01FUiBkcml2ZXMgKHRoZSBhZG1pbiBjb3VudGVycGFydCBpc1xuICAvLyBgYmlsbGluZy50aWVyLm92ZXJyaWRlYCk6IHNlbGYtc2VydmUgY3JlYXRlIChkaXJlY3Qgb3IgTWFya2V0cGxhY2UgY2xhaW0pLFxuICAvLyBwbGFuL2ludGVydmFsIGNoYW5nZSwgY2FuY2VsLWF0LXBlcmlvZC1lbmQsIHVuZG8tY2FuY2VsLCBjYXNjYWRlIGRlbGV0ZS5cbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24ucmVhY3RpdmF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5jYW5jZWwnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uZGVsZXRlJyxcbiAgJ2JpbGxpbmcudGllci5vdmVycmlkZScsXG4gIC8vIEEgTkVHT1RJQVRFRCBzdXBwb3J0IHNpemUgZmxvb3IgcmVwbGFjaW5nIHRoZSBjb21wdXRlZCByYW1wLiBTeXN0ZW0tb3JnXG4gIC8vIG9ubHksIGFuZCBhdWRpdGVkIHdpdGggdGhlIGFncmVlZCBQUklDRSBhbmQgdGhlIGFncmVlZCBTRUFUIENPVU5UIHRvZ2V0aGVyOlxuICAvLyBhIGRpc3B1dGUgYWJvdXQgd2hhdCB3YXMgc2lnbmVkIGZvciB0dXJucyBvbiB0aGF0IHBhaXIsIGFuZCB0aGUgcHJpY2UgYWxvbmVcbiAgLy8gY2Fubm90IGFuc3dlciBcImF0IHdoYXQgc2NhbGVcIi5cbiAgJ2JpbGxpbmcuc3VwcG9ydC1mbG9vci5vdmVycmlkZScsXG4gIC8vIEEgR1JBTlRFRCBvbmUtdGltZSBzdXBwb3J0IGluY2lkZW50IOKAlCBhIGNvbW1lcmNpYWwgY29uY2Vzc2lvbiwgbm90IGEgc2FsZS5cbiAgLy8gVGhlcmUgaXMgZGVsaWJlcmF0ZWx5IG5vIHB1cmNoYXNlIHBhdGg6IG1vbnRobHkgc3VwcG9ydCBjYW5jZWxzIGZyZWVseSwgc29cbiAgLy8gYW4gaW5jaWRlbnQgcHJpY2VkIGFib3ZlIGEgbW9udGggaXMgZG9taW5hdGVkIGFuZCBvbmUgYmVsb3cgaXQgbG9zZXMgbW9uZXkuXG4gIC8vIFRoZSByb3cgY2FycmllcyB0aGUgY291bnQgYW5kIHRoZSByZXN1bHRpbmcgYmFsYW5jZSwgd2hpY2ggaXMgd2hhdCBhIGxhdGVyXG4gIC8vIHJldmlldyBvZiBcIndobyBnYXZlIHdoYXQgYXdheVwiIG5lZWRzLlxuICAnYmlsbGluZy5zdXBwb3J0LWluY2lkZW50LmdyYW50JyxcbiAgLy8gT3BlcmF0b3Itb25seSByZXNlZWQgb2YgdGhlIGludm9pY2UgbGVkZ2VyIGZyb20gdGhlIHBheW1lbnQgcHJvdmlkZXInc1xuICAvLyBoaXN0b3J5IChQT1NUIC9iaWxsaW5nL2FkbWluL2JhY2tmaWxsKSDigJQgbXV0YXRlcyBmaW5hbmNlIGRhdGEgZmxlZXQtd2lkZS5cbiAgJ2JpbGxpbmcuYWRkb24uYWRkJyxcbiAgJ2JpbGxpbmcuYWRkb24ucmVtb3ZlJyxcbiAgLy8gU3lzdGVtLWluaXRpYXRlZCByZW1vdmFsIG9mIGEgdGllci1pbmNsdWRlZCBhZGQtb24gb24gYSBwbGFuIHVwZ3JhZGUgKHRoZVxuICAvLyBhY2NvdW50J3MgbmV3IHRpZXIgbm93IGJ1bmRsZXMgdGhlIGZlYXR1cmUpIOKAlCBkaXN0aW5jdCBmcm9tIGEgdXNlci1pbml0aWF0ZWRcbiAgLy8gYHJlbW92ZWAgc28gZmluYW5jZSBjYW4gdGVsbCBhbiBhdXRvLXBydW5lIGZyb20gYSBjdXN0b21lciBhY3Rpb24uXG4gICdiaWxsaW5nLmFkZG9uLnBydW5lJyxcbiAgLy8gRGlzY291bnRzIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kKSDigJQgbWludC9pc3N1ZS9hcHBseS9yZW1vdmUvcmV2b2tlIG9mIGFcbiAgLy8gcHJpY2UgY291cG9uIG9yIHVzYWdlIGNyZWRpdC4gYGRldGFpbHNgIGNhcnJ5IHRoZSBkaXNjb3VudCBpZCArIGtpbmQvdmFsdWVcbiAgLy8gb25seSwgbmV2ZXIgdGhlIG9wYXF1ZSB0b2tlbiBvciBzaWduaW5nIGtleS5cbiAgJ2JpbGxpbmcuZGlzY291bnQuZ2VuZXJhdGUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5pc3N1ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50LmFwcGx5JyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmVtb3ZlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmV2b2tlJyxcbiAgLy8gQ2FtcGFpZ25zIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kKSDigJQgdGhlIGlkZW50aXR5IGEgc2V0IG9mIGRpc2NvdW50IGNvZGVzXG4gIC8vIGJlbG9uZ3MgdG8sIGNhcnJ5aW5nIHRoZSBidWRnZXQsIHdpbmRvdyBhbmQgb25lLXBlci1hY2NvdW50IHJ1bGUuIEF1dGhvcmluZ1xuICAvLyBvbmUgZGVjaWRlcyBob3cgbXVjaCB0aGUgYnVzaW5lc3MgbWF5IGdpdmUgYXdheSwgc28gZWFjaCBjaGFuZ2UgaXMgYXVkaXRlZC5cbiAgJ2JpbGxpbmcuY2FtcGFpZ24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcuY2FtcGFpZ24udXBkYXRlJyxcbiAgJ2JpbGxpbmcuY2FtcGFpZ24uZW5kJyxcbiAgLy8gUHJvbW90aW9ucyAoZG9jcy9iaWxsaW5nLWRpc2NvdW50cy5tZCNwcm9tb3Rpb25zKSDigJQgcnVsZS1kcml2ZW4gYXV0by1ncmFudFxuICAvLyBjYW1wYWlnbnMuIGBkZXRhaWxzYCBjYXJyeSB0aGUgcHJvbW90aW9uIGlkICsgY2VudHMvZXZlbnQgb25seS5cbiAgJ2JpbGxpbmcucHJvbW90aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24ucmV2b2tlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmdyYW50JyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmFjdGl2YXRlJyxcbiAgLy8gRXhwYW5zaW9uIE9GRkVSUyAoZG9jcy9wbGFucy9zYWxlcy1hZ2VudC5tZCkuIEFuIGF1dG9tYXRlZCBncmFudGVyIG5lZWRzIGl0c1xuICAvLyBvd24gdHJhaWw6IGBkZWNsaW5lZGAgYW5kIGBkaXNtaXNzZWRgIGFyZSB0aGUgYWNjb3VudCdzIG93biBhbnN3ZXJzIChhbmQgdGhlXG4gIC8vIHBhaXIgRDYncyBsZW5ndGhlbmVkIHF1aWV0IHdpbmRvdyBkZXBlbmRzIG9uIOKAlCBcIm5ldmVyIHNhdyBpdFwiIGFuZCBcInNhaWQgbm9cIlxuICAvLyBtdXN0IG5vdCBiZSB0aGUgc2FtZSByb3cpOyBgZXhjbHVzaW9uLnNldGAvYGNsZWFyZWRgIGFyZSB0aGUgb3BlcmF0b3IgdmV0byxcbiAgLy8gd2hpY2ggaXMgdGhlIHByaWNlIG9mIHNoaXBwaW5nIHRoZSBmZWF0dXJlIGF0IGFsbCBhbmQgdGhlcmVmb3JlIGhhcyB0byBiZVxuICAvLyBhdHRyaWJ1dGFibGU7IGB0cmlnZ2VyYCBpcyBhIGh1bWFuIGFza2luZyBmb3IgYW4gb2ZmZXIgbm93LCByZWNvcmRlZCBzbyBhXG4gIC8vIG1hbnVhbCBvZmZlciBpcyBkaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBhZ2VudCBvbmUgaW4gdGhlIG91dGNvbWUgbG9nLlxuICAvLyBUaGUgYWdlbnQncyBPV04gd29yaywgdW5kZXIgaXRzIG93biBhY3RvciAoRDE0IOKAlCBgT0ZGRVJTX0FHRU5UX0FDVE9SX0lEYCkuXG4gIC8vIGBzZW50YCBpcyB3aGF0IG1ha2VzIFwid2h5IGRpZCB0aGlzIGFjY291bnQgZ2V0IHRoaXM/XCIgYW5zd2VyYWJsZSBmcm9tIHRoZVxuICAvLyBjZW50cmFsIHRyYWlsIHJhdGhlciB0aGFuIG9ubHkgZnJvbSB0aGUgc2VydmljZSdzIG93biBjb2xsZWN0aW9uLCBhbmRcbiAgLy8gYHdpdGhkcmF3bmAgaXMgdGhlIHJlY2FsbCBhbiBvcGVyYXRvciByZWFjaGVzIGZvciBvbiB0aGUgbW9ybmluZyBhIHJ1bGVcbiAgLy8gdHVybnMgb3V0IHRvIGJlIHdyb25nIOKAlCBib3RoIGNhcnJ5IHRoZSByYXRpb25hbGUgb3IgdGhlIHdpbmRvdywgbmV2ZXIgY29weS5cbiAgJ2JpbGxpbmcub2ZmZXIuc2VudCcsXG4gICdiaWxsaW5nLm9mZmVyLndpdGhkcmF3bicsXG4gICdiaWxsaW5nLm9mZmVyLmRlY2xpbmVkJyxcbiAgJ2JpbGxpbmcub2ZmZXIuZGlzbWlzc2VkJyxcbiAgJ2JpbGxpbmcub2ZmZXIuZXhjbHVzaW9uLnNldCcsXG4gICdiaWxsaW5nLm9mZmVyLmV4Y2x1c2lvbi5jbGVhcmVkJyxcbiAgJ2JpbGxpbmcub2ZmZXIudHJpZ2dlcicsXG4gIC8vIFVzYWdlLWNyZWRpdCByZWFsaXphdGlvbiDigJQgYSBjdXN0b21lci9jb21wbGlhbmNlLXZpc2libGUgcmVjb3JkIG9mIGNyZWRpdFxuICAvLyBtb3ZlbWVudDogYGNvbnN1bWVkYCAoTWFya2V0cGxhY2UgbWV0ZXJlZCBkcmF3ZG93biksIGBleGhhdXN0ZWRgIChiYWxhbmNlIGhpdFxuICAvLyB6ZXJvKSwgYW5kIGEgY29tYm8gZW5kaW5nLiBgZGV0YWlsc2AgY2FycnkgY2VudHMvaWRzIG9ubHksIG5vIHBheW1lbnQgc2VjcmV0cy5cbiAgJ2JpbGxpbmcuY3JlZGl0LmNvbnN1bWVkJyxcbiAgJ2JpbGxpbmcuY3JlZGl0LmV4aGF1c3RlZCcsXG4gICdiaWxsaW5nLmNvbWJvLmV4cGlyZWQnLFxuICAvLyBSZXBvcnRpbmcgKGFwaS9yZXBvcnRpbmcpIOKAlCB0aGUgdGhyZWUgcmVwb3J0aW5nIG11dGF0aW9ucyB3aG9zZSBlZmZlY3RcbiAgLy8gb3V0bGl2ZXMgYSByZXF1ZXN0IGxvZzogdGhlIHBlci1vcmcgY29ycmVsYXRpb24td2luZG93IGNvbmZpZyB3cml0ZSwgYVxuICAvLyBwb3N0LWRlcGxveSBvdXRjb21lIG1hcmtlciAoaXQgbW92ZXMgdGhlIG9yZydzIERPUkEgQ0ZSL01UVFIpLCBhbmQgdGhlXG4gIC8vIGluYm91bmQgYmlsbGluZ+KGknJlcG9ydGluZyByZXRlbnRpb24tZW50aXRsZW1lbnQgc3luYyAoYSByZXRlbnRpb24gY3V0IGlzIGFcbiAgLy8gZGF0YS1kZXN0cm95aW5nIGNoYW5nZSBhcHBsaWVkIGJ5IHRoZSBuZXh0IHN3ZWVwKS4gYGRldGFpbHNgIGNhcnJ5IHRoZVxuICAvLyBzZXR0aW5ncy9vdXRjb21lIHZhbHVlcyBvbmx5LlxuICAncmVwb3J0aW5nLnNldHRpbmdzLnVwZGF0ZScsXG4gICdyZXBvcnRpbmcuZGVwbG95bWVudC5vdXRjb21lJyxcbiAgJ3JlcG9ydGluZy5yZXRlbnRpb24uc3luYycsXG4gIC8vIFN0YWtlaG9sZGVyIHJlcG9ydHMg4oCUIHRoZSBhZGQtb24ncyBhdXRob3JpbmcgYW5kIFBVQkxJU0hJTkcgc3VyZmFjZS4gUHVibGlzaGluZ1xuICAvLyBpcyB0aGUgbW9tZW50IGludGVybmFsIGRlbGl2ZXJ5IG51bWJlcnMgbGVhdmUgdGhlIHBsYXRmb3JtLCBzbyB0aGUgd2hvbGVcbiAgLy8gb3V0d2FyZCBwYXRoIGlzIGF1ZGl0YWJsZTogd2hpY2ggcmVwb3J0LCB3aGljaCBwZXJpb2QncyBmcm96ZW4gc25hcHNob3QsXG4gIC8vIHdoaWNoIHZlcnNpb24sIGFuZCB3aG8gbGV0IGl0IG91dC4gYGxpbmsuY3JlYXRlZGAgLyBgbGluay5yZXZva2VkYCBjb3ZlciB0aGVcbiAgLy8gVVJMcyB0aGF0IGxldCBzb21lb25lIHdpdGhvdXQgYW4gYWNjb3VudCByZWFkIGl0OyBgcmVjaXBpZW50LmFkZGVkYCAvXG4gIC8vIGByZWNpcGllbnQucmVtb3ZlZGAgY292ZXIgd2hvIGlzIG9uIHRoZSBkaXN0cmlidXRpb24gbGlzdCwgd2hpY2ggaXMgdGhlIG90aGVyXG4gIC8vIHdheSBkYXRhIHJlYWNoZXMgYSBwZXJzb24uIGBvd25lcnNoaXAudHJhbnNmZXJgIGlzIGEgcHJpdmlsZWdlIG1vdmU6IGFcbiAgLy8gc2NoZWR1bGVkIHJ1biBpcyBhdXRob3JpemVkIGFzIGl0cyBPV05FUiwgc28gaGFuZGluZyBhIGRlZmluaXRpb24gb3ZlciBoYW5kc1xuICAvLyBvdmVyIHdob3NlIGFjY2VzcyB0aGUgbnVtYmVycyBhcmUgY29tcHV0ZWQgd2l0aC5cbiAgLy9cbiAgLy8gRGVsaWJlcmF0ZWx5IE5PVCBhdWRpdGVkOiByZWFkaW5nIGEgc2hhcmVkIHJlcG9ydC4gVGhlIGFjY2VzcyBpcyBsb2dnZWQgYW5kXG4gIC8vIGNvdW50ZWQgcGVyIGxpbmssIGJ1dCBpdCBpcyBhbiBVTkFVVEhFTlRJQ0FURUQsIGV4dGVybmFsbHktdHJpZ2dlcmVkIGV2ZW50IOKAlFxuICAvLyBhbnlvbmUgaG9sZGluZyBhIFVSTCBjb3VsZCBvdGhlcndpc2Ugd3JpdGUgdW5ib3VuZGVkIHJvd3MgaW50byB0aGUgb3JnJ3MgYXVkaXRcbiAgLy8gdHJhaWwsIHdoaWNoIHR1cm5zIGEgcmVhZCBpbnRvIGEgd2F5IHRvIGJ1cnkgdGhlIGVudHJpZXMgdGhhdCBtYXR0ZXIuXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24uY3JlYXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi51cGRhdGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLmRlbGV0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0Lm93bmVyc2hpcC50cmFuc2ZlcicsXG4gICdyZXBvcnRpbmcucmVwb3J0LnB1Ymxpc2hlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlcHVibGlzaGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5jcmVhdGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5yZXZva2VkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LmFkZGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnJlbW92ZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5wb2xpY3kudXBkYXRlJyxcbiAgLy8gQSBkZWZpbml0aW9uIFNUT1BQRUQgcHJvZHVjaW5nIHJlcG9ydHMgd2l0aG91dCBhbnlvbmUgYXNraW5nIGl0IHRvOiB0aGUgb3duZXJcbiAgLy8gd2FzIGRlYWN0aXZhdGVkIG9yIHJlbW92ZWQsIG9yIGxvc3QgdGhlIHBlcm1pc3Npb24gYSBydW4gaXMgYXV0aG9yaXplZCB3aXRoLlxuICAvLyBSZWNvcmRlZCBiZWNhdXNlIHRoZSBlZmZlY3QgaXMgc2lsZW50IOKAlCBhIG1hbmFnZXIgZmluZHMgb3V0IGJ5IG5vdCByZWNlaXZpbmdcbiAgLy8gdGhlIHJlcG9ydCDigJQgc28gdGhlIHRyYWlsIGhhcyB0byBzYXkgd2hpY2ggcmVwb3J0cyBzdG9wcGVkIGFuZCB3aHkuXG4gICdyZXBvcnRpbmcucmVwb3J0LnBhdXNlZCcsXG4gIC8vIOKApmFuZCBzdGFydGVkIGFnYWluLiBJdHMgb3duIGFjdGlvbiByYXRoZXIgdGhhbiBhIGRldGFpbCBvbiB0aGUgcGF1c2UsIGJlY2F1c2UgdGhlXG4gIC8vIHF1ZXN0aW9uIGEgcmV2aWV3ZXIgYXNrcyBpcyBcIndhcyB0aGlzIGFjY291bnQncyByZXBvcnRpbmcgb2ZmIGJldHdlZW4gdGhlc2UgdHdvXG4gIC8vIGRhdGVzXCIsIGFuZCBhbnN3ZXJpbmcgaXQgZnJvbSBhIHNpbmdsZSBhY3Rpb24ncyBkZXRhaWxzIG1lYW5zIHJlYWRpbmcgZXZlcnkgcm93LlxuICAncmVwb3J0aW5nLnJlcG9ydC5yZXN1bWVkJyxcbiAgLy8gVGhlIGRyYWZ0aW5nIGhhbGYgb2YgYSBydW46IGEgY29tcG9zZS9yZWdlbmVyYXRlIGZyZWV6ZXMgdGhlIG9yZydzIG51bWJlcnNcbiAgLy8gaW50byBhIHJ1biwgdGhlIGxlYWQncyBub3RlcyBhcmUgZWRpdGVkIG9udG8gaXQgKG1ldGFkYXRhIG9ubHkg4oCUIGxlbmd0aCxcbiAgLy8gbmV2ZXIgdGhlIHByb3NlKSwgYW5kIGFuIEFJIHN1bW1hcnkgaXMgZHJhZnRlZCBmcm9tIGl0ICh0aGUgbnVtYmVycyB3ZW50IHRvXG4gIC8vIGEgcHJvdmlkZXI7IGBvdXRjb21lYCBjYXJyaWVzIGEgcmVmdXNhbCkuIEEgcmVzZW5kIHJlLW1pbnRzIGEgcmVjaXBpZW50J3NcbiAgLy8gY29uZmlybWF0aW9uIGNyZWRlbnRpYWwuIGB2ZXJpZmllZGAgLyBgdW5zdWJzY3JpYmVkYCBhcmUgdGhlIFVOQVVUSEVOVElDQVRFRFxuICAvLyByZWNpcGllbnQncyBvd24gYWN0cyAoYWN0b3IgYGFub255bW91c2AsIGEgaGFzaGVkIGFkZHJlc3Mgb25seSk6IGJvdW5kZWQgYnlcbiAgLy8gY29uc3RydWN0aW9uIOKAlCB0aGUgdmVyaWZ5IHRva2VuIGlzIHNpbmdsZS11c2UsIGFuZCBvbmx5IHRoZSBjbGljayB0aGF0XG4gIC8vIGFjdHVhbGx5IHN0b3BzIGRlbGl2ZXJ5IHdyaXRlcyBhbiB1bnN1YnNjcmliZSByb3cuXG4gICdyZXBvcnRpbmcucmVwb3J0LnJ1bi5jb21wb3NlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucnVuLm5vdGVzJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucnVuLnN1bW1hcnknLFxuICAncmVwb3J0aW5nLnJlcG9ydC5yZWNpcGllbnQucmVzZW5kJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnZlcmlmaWVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnVuc3Vic2NyaWJlZCcsXG4gIC8vIE1BQ0hJTkUgaW5nZXN0IChgcmVwb3J0aW5nOmluZ2VzdGAgc2NvcGUpLiBPbmUgYGJhdGNoYCByb3cgcGVyIFBPU1QgdG8gdGhlXG4gIC8vIGV2ZW50IC8gaW5jaWRlbnQgLyBpbmdlc3QtaGVhbHRoIHJvdXRlcyDigJQgY291bnRzIHBsdXMgY2FwcGVkIHBpcGVsaW5lLFxuICAvLyBleGVjdXRpb24sIEV2ZW50QnJpZGdlLWV2ZW50IGFuZCBpbmNpZGVudCBpZCBsaXN0cywgYXR0cmlidXRlZCB0byB0aGVcbiAgLy8gY3JlZGVudGlhbCdzIHByaW5jaXBhbCDigJQgc28gYSBmb3JnZWQgb3IgbWlzcm91dGVkIHdyaXRlIG5hbWVzIHRoZSBrZXkgYmVoaW5kXG4gIC8vIGl0LiBgcmVqZWN0ZWRgIGlzIHRoZSB0ZW5hbmN5IHJlZnVzYWwgaW5zaWRlIGEgYmF0Y2ggKGV2ZW50cyBuYW1pbmcgYW5vdGhlclxuICAvLyBvcmcncyBwaXBlbGluZXMpOiBhIEZBSUxVUkUgcm93IHdpdGggdGhlIG9mZmVuZGluZyBwaXBlbGluZSBpZHMsIG5ldmVyIHRoZVxuICAvLyBvcmcgdGhleSBiZWxvbmcgdG8uIGBpbmNpZGVudC5yZWNvcmRgIGlzIG9uZSBpbmNpZGVudCB0aGF0IGlzIG5ldyBvciBhY3R1YWxseVxuICAvLyBjaGFuZ2VkIChiZWZvcmUvYWZ0ZXIpOyBsaWtlIGBkZXBsb3ltZW50Lm91dGNvbWVgIGl0IG1vdmVzIENGUi9NVFRSLiBBblxuICAvLyB1bmNoYW5nZWQgcmVwZWF0LWludGVydmFsIHJlLXBvc3Qgd3JpdGVzIG5vbmUuXG4gICdyZXBvcnRpbmcuaW5nZXN0LmJhdGNoJyxcbiAgJ3JlcG9ydGluZy5pbmdlc3QucmVqZWN0ZWQnLFxuICAncmVwb3J0aW5nLmluY2lkZW50LnJlY29yZCcsXG4gIC8vIERlbmllZCBhdXRob3JpemF0aW9uIGF0dGVtcHQg4oCUIGVtaXR0ZWQgYmVzdC1lZmZvcnQgYnkgdGhlIHNoYXJlZFxuICAvLyBgcmVxdWlyZVBlcm1pc3Npb25gIC8gYHJlcXVpcmVTeXN0ZW1BZG1pbmAgZ2F0ZSB3aGVuIGEgc3RhdGUtY2hhbmdpbmdcbiAgLy8gKG5vbi1HRVQpIHJlcXVlc3QgaXMgcmVqZWN0ZWQsIHNvIHByb2JpbmcvZXNjYWxhdGlvbiBhdHRlbXB0cyBhcmUgdmlzaWJsZVxuICAvLyByYXRoZXIgdGhhbiBpbnZpc2libGUuIGBkZXRhaWxzYCBjYXJyaWVzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9uICsgcGF0aDtcbiAgLy8gYG91dGNvbWVgIGlzICdmYWlsdXJlJy5cbiAgJ2F1dGh6LmRlbmllZCcsXG4gIC8vIFwiQXNrXCIgYXNzaXN0YW50IGFjdGl2aXR5IOKAlCB2aXNpYmlsaXR5IGludG8gd2hhdCB0aGUgYXNzaXN0YW50IGRpZCBvbiBhIHVzZXInc1xuICAvLyBiZWhhbGYuIGBhc2sucXVlcnlgIGlzIGEgcmVhZC1vbmx5IGhvdy10byB0dXJuOyBgYXNrLmFnZW50LnR1cm5gIGlzIGEgdG9vbC1jYWxsaW5nXG4gIC8vIHR1cm4uIGBkZXRhaWxzYCBjYXJyeSBTQUZFIE1FVEFEQVRBIE9OTFkgKHRvb2xzIHVzZWQsIHByb3Bvc2FsIGtpbmRzLCBxdWVyeVxuICAvLyBsZW5ndGgsIG91dGNvbWUpLCBuZXZlciB0aGUgcmF3IHF1ZXJ5IHRleHQuXG4gICdhc2sucXVlcnknLFxuICAnYXNrLmFnZW50LnR1cm4nLFxuICAvLyBBIHJlYWRlciByYXRpbmcgYW4gYW5zd2VyLCBvciBhIGhlbHAgc2VhcmNoIHRoYXQgZm91bmQgbm90aGluZy4gVGhlIE9OTFlcbiAgLy8gc2lnbmFsIGZvciB3aGljaCBkb2NzIHRoZSBhc3Npc3RhbnQgYW5zd2VycyBiYWRseSBmcm9tIOKAlCB0aGUgdHVybiBpdHNlbGZcbiAgLy8gY2Fubm90IHRlbGwgYSBnb29kIGFuc3dlciBmcm9tIGEgY29uZmlkZW50IHdyb25nIG9uZS4gYGRldGFpbHNgIGNhcnJ5IHRoZVxuICAvLyByYXRpbmcgYW5kIHRoZSBET0MgSURTIGNpdGVkIChgYXV0aGVudGljYXRpb24ubWRgKSwgbmV2ZXIgdGhlIHF1ZXN0aW9uOiB0aGVcbiAgLy8gZG9jIGlzIHdoYXQgZ2V0cyBmaXhlZCwgYW5kIGl0IGlzIG5vdCB1c2VyLWVudGVyZWQgdGV4dC5cbiAgJ2Fzay5mZWVkYmFjaycsXG4gIC8vIE9uZSBBSSBnZW5lcmF0aW9uIG9mIGEgcGlwZWxpbmUgLyBwbHVnaW4gZHJhZnQgKGAvcGlwZWxpbmVzL2dlbmVyYXRlKmAsXG4gIC8vIGAvcGx1Z2lucy9nZW5lcmF0ZSpgKSwgc3VjY2VzcyBvciBmYWlsdXJlIChpbmNsLiBjbGllbnQgYWJvcnQpLiBgZGV0YWlsc2AgY2FycnlcbiAgLy8gU0FGRSBNRVRBREFUQSBPTkxZOiB0aGUgcm91dGUsIHRoZSBwcm9tcHQgTEVOR1RILCB0aGUgc2hhcmVkIEFJIHVzYWdlIGJsb2NrXG4gIC8vIChgYWlgOiB0aGUgcHJvdmlkZXIgYW5kIG1vZGVsIHRoYXQgQU5TV0VSRUQgYWZ0ZXIgYW55IGZhaWxvdmVyLCBgZmFsbGJhY2tGcm9tYCxcbiAgLy8gd2hvc2Uga2V5IHBhaWQg4oCUIGBrZXlTb3VyY2VgIHJlcXVlc3Qvb3JnL3BsYXRmb3JtIOKAlCB0b2tlbnMgaW4vb3V0L2NhY2hlZCwgdGhlXG4gIC8vIHByb21wdCB2ZXJzaW9uLCBob3cgdGhlIGBhaUNhbGxzYCBzbG90IHNldHRsZWQpIGFuZCB0aGUgcmVzZXJ2YXRpb24nc1xuICAvLyBgcXVvdGFgIHZpZXcg4oCUIG5ldmVyIHRoZSBwcm9tcHQsIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LCBvciBhIGtleS5cbiAgJ3BpcGVsaW5lLmFpLmdlbmVyYXRlJyxcbiAgJ3BsdWdpbi5haS5nZW5lcmF0ZScsXG4gIC8vIFBsdWdpbiBlY29zeXN0ZW0gKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpLiBHb3Zlcm5hbmNlIGFjdGlvbnNcbiAgLy8gYXJlIHJlY29yZGVkIHdpdGggYG9yZ0lkYCA9IHRoZSBzeXN0ZW0gb3JnOyBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlXG4gIC8vIHB1Ymxpc2hlcidzIG9yZyAobGlzdGluZy92ZXJzaW9uL3Jldmlldy9hZHZpc29yeS9wdWJsaXNoZXIgbW9kZXJhdGlvbikgb3JcbiAgLy8gdGhlIGluc3RhbGxpbmcgb3JnIChpbnN0YWxscyArIHBvbGljeSkuIEFub255bW91cyBzdWJtaXNzaW9ucyB1c2UgdGhlXG4gIC8vIGBBTk9OWU1PVVNfQUNUT1JfSURgIGFjdG9yIHdpdGggYGRldGFpbHMuc3VibWlzc2lvbklkYC4gYGRldGFpbHNgIGNhcnJ5IGlkcyxcbiAgLy8gdmVyc2lvbnMsIGRpZ2VzdHMsIHRpZXIsIHN0YXRlIGFuZCByZWFzb24gY29kZXMgb25seSDigJQgbmV2ZXIgcmV2aWV3IGJvZGllcyxcbiAgLy8gUkVBRE1FIGNvbnRlbnQsIHNlY3JldHMgb3IgZW1haWxzLlxuICAvLyBQdWJsaXNoZXJzLlxuICAncHVibGlzaGVyLmNyZWF0ZScsXG4gICdwdWJsaXNoZXIudXBkYXRlJyxcbiAgJ3B1Ymxpc2hlci50ZXJtcy5hY2NlcHQnLFxuICAncHVibGlzaGVyLnZlcmlmeS5yZXF1ZXN0JyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIudmVyaWZ5LnJlamVjdCcsXG4gICdwdWJsaXNoZXIudGllci5jaGFuZ2UnLFxuICAncHVibGlzaGVyLnN1c3BlbmQnLFxuICAncHVibGlzaGVyLnVuc3VzcGVuZCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIucmVxdWVzdCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuYWNjZXB0JyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5kZWNsaW5lJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5yZWplY3QnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLnJlamVjdCcsXG4gIC8vIFB1Ymxpc2ggcmVxdWVzdHMgKHRlbmFudCDihpIgc3lzdGVtIG9yZykuIGBkZXRhaWxzLmtpbmRgIG5hbWVzIHRoZSByZXF1ZXN0LlxuICAncGx1Z2luLnJlcXVlc3Quc3VibWl0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LndpdGhkcmF3JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3Quc2Vjb25kLWFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3QucmVqZWN0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmF1dG8tYXBwcm92ZScsXG4gIC8vIExpc3RpbmdzIGFuZCB2ZXJzaW9ucyAoc3lzdGVtIG9yZywgZXhjZXB0IHRoZSB0ZW5hbnQgcGF1c2UpLlxuICAncGx1Z2luLmxpc3RpbmcucHVibGlzaCcsXG4gIC8vIE5PVEU6IHRoZXJlIGlzIG5vIGBwbHVnaW4ubGlzdGluZy51bmxpc3RgLiBXaXRoZHJhd2FsIGlzIGFscmVhZHkgZXhwcmVzc2VkIGJ5XG4gIC8vIGBwbHVnaW4ubGlzdGluZy5zdGF0ZS5jaGFuZ2VgIChgdW5tYWludGFpbmVkYCAvIGBzdXNwZW5kZWRgIC8gYGxpc3RlZGApLFxuICAvLyB3aGljaCBpcyB0aGUgYWN0aW9uIHRoZSBjb2RlIGFjdHVhbGx5IGVtaXRzLCBzbyBgdW5saXN0YCB3YXMgYSBzZWNvbmQgbmFtZVxuICAvLyBmb3IgYSB0aGluZyB0aGF0IGhhcyBvbmUg4oCUIGFuZCBhIG5ldmVyLWVtaXR0ZWQgb25lIGF0IHRoYXQuXG4gICdwbHVnaW4ubGlzdGluZy51cGRhdGUnLFxuICAncGx1Z2luLmxpc3Rpbmcuc3RhdGUuY2hhbmdlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnBhdXNlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnVucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ueWFuaycsXG4gICdwbHVnaW4udmVyc2lvbi51bnlhbmsnLFxuICAncGx1Z2luLnZlcnNpb24uZGVwcmVjYXRlJyxcbiAgLy8gUmV0aXJpbmcgYSB2ZXJzaW9uJ3MgcmVnaXN0cnkgaW1hZ2UgdG8gcmVjbGFpbSBgc3RvcmFnZUJ5dGVzYC4gRGlzdGluY3RcbiAgLy8gZnJvbSB0aGUgZm91ciBhYm92ZSwgd2hpY2ggY2hhbmdlIHdoZXRoZXIgYSB2ZXJzaW9uIFJFU09MVkVTIGFuZCBkZWxldGVcbiAgLy8gbm90aGluZywgYW5kIGZyb20gYHJlZ2lzdHJ5LmltYWdlLmRlbGV0ZWAvYHJlZ2lzdHJ5LnRhZy5kZWxldGVgLCB3aGljaCBhcmVcbiAgLy8gdGhlIHJlZ2lzdHJ5J3Mgb3duIG9wZXJhdG9yLXNpZGUgdHJhaWwuIFRoaXMgaXMgYSB0ZW5hbnQgZnJlZWluZyBzcGFjZSwgYW5kXG4gIC8vIHRoZSBvbmx5IGF1ZGl0ZWQgYWN0aW9uIHRoYXQgY2FuIHJlZHVjZSBhbiBvcmcncyBzdG9yYWdlIGZpZ3VyZSDigJQgc28gaXRzXG4gIC8vIHJvdyBjYXJyaWVzIHRoZSBieXRlcyBpdCBmcmVlZCwgd2hpY2ggY2Fubm90IGJlIHJlY292ZXJlZCBhZnRlcndhcmRzLlxuICAncGx1Z2luLnZlcnNpb24ucHJ1bmUnLFxuICAvLyBOT1RFOiBubyBgcGx1Z2luLmNvbGxlY3Rpb24udXBkYXRlYC4gYGVjb3N5c3RlbV9jb2xsZWN0aW9uc2Agd2FzIGRlbGV0ZWQgKHNlZVxuICAvLyB0aGUgdG9tYnN0b25lIGluIGBzY2hlbWEvZWNvc3lzdGVtLnRzYCkgYmVjYXVzZSBub3RoaW5nIGV2ZXIgd3JvdGUgb3IgcmVhZFxuICAvLyBvbmU7IHRoaXMgZGVjbGFyYXRpb24gb3V0bGl2ZWQgdGhlIHRhYmxlIGl0IGF1ZGl0ZWQuXG4gIC8vIEVjb3N5c3RlbSBjb25maWd1cmF0aW9uIChzeXN0ZW0gb3JnKS5cbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUuY3JlYXRlJyxcbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUudXBkYXRlJyxcbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUuZGVsZXRlJyxcbiAgJ2Vjb3N5c3RlbS5yZXNlcnZlZC1uYW1lLnVwZGF0ZScsXG4gIC8vIFRoZSBvbmUtdGltZSBCT09UU1RSQVAgZXhjZXB0aW9uIChhdXRvLWFwcHJvdmFsIG9mIHRoZSBpbml0aWFsIE9mZmljaWFsXG4gIC8vIGNhdGFsb2cpIG9wZW5pbmcgb24gdGhlIGZpcnN0IE9mZmljaWFsIHJlcXVlc3QsIGFuZCBjbG9zaW5nIGZvciBnb29kXG4gIC8vIChgZGV0YWlscy5yZWFzb25gOiB3aW5kb3dfZWxhcHNlZCAvIGxpc3RpbmdzX2V4aXN0IC8gYSBtYW5hZ2VyIGRlY2lzaW9uO1xuICAvLyBgZGV0YWlscy5hcHByb3ZlZGA6IGhvdyBtYW55IHJlcXVlc3RzIHJvZGUgaXQpLlxuICAnZWNvc3lzdGVtLmJvb3RzdHJhcC5vcGVuJyxcbiAgJ2Vjb3N5c3RlbS5ib290c3RyYXAuY2xvc2UnLFxuICAvLyBOT1RFOiBubyBgZWNvc3lzdGVtLnNsYS51cGRhdGVgLiBUaGUgbGFuZSBTTEFzIGFyZSBIQVJEQ09ERUQgKHN0YW5kYXJkIDQ4aCxcbiAgLy8gc2VjdXJpdHktZml4IDRoIGluIGBzZXJ2aWNlcy9lY29zeXN0ZW0vc2xhLnRzYCkgd2l0aCBubyBzZXR0aW5ncyBzdXJmYWNlLCBzb1xuICAvLyB0aGVyZSBpcyBubyBtdXRhdGlvbiB0byBhdWRpdC4gTWFraW5nIHRoZW0gb3BlcmF0b3ItdHVuYWJsZSBpcyB0aGUgY2hhbmdlXG4gIC8vIHRoYXQgc2hvdWxkIHJlLWFkZCB0aGlzLlxuICAvLyBQdWJsaWMgcmVnaXN0cnkgbmFtZXNwYWNlIChgcHVibGljLypgKTogY29weSArIHNpZ24gKyBhdHRlc3Qgb24gcHVibGlzaCxcbiAgLy8gdGhlIHRpZXItY2hhbmdlL3N1c3BlbnNpb24gcmUtc2lnbiBqb2IsIHRhZyByZW1vdmFsIG9uIHlhbmsvdGFrZWRvd24sIGFuZFxuICAvLyB0aGUgcmV0ZW50aW9uIHN3ZWVwLlxuICAncmVnaXN0cnkuaW1hZ2UucHVibGlzaCcsXG4gICdyZWdpc3RyeS5pbWFnZS5yZXNpZ24nLFxuICAncmVnaXN0cnkuaW1hZ2UueWFuaycsXG4gICdyZWdpc3RyeS5pbWFnZS5nYycsXG4gIC8vIEluc3RhbGxzIGFuZCB0aGUgaW5zdGFsbGluZyBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgKG9yZy1sb2NhbCkuXG4gICdwbHVnaW4uaW5zdGFsbC5yZXF1ZXN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmFwcHJvdmUnLFxuICAncGx1Z2luLmluc3RhbGwuZGVueScsXG4gICdwbHVnaW4uaW5zdGFsbC5jcmVhdGUnLFxuICAncGx1Z2luLmluc3RhbGwudXBncmFkZScsXG4gIC8vIEEgbWVtYmVyJ3MgcmVxdWVzdCB0byBjaGFuZ2UgYW4gaW5zdGFsbCBwYXN0IHdoYXQgdGhleSBtYXkgZG8gYWxvbmUsIGFuZCBpdHMgZGVjaXNpb24uXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVxdWVzdCcsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtYXBwcm92ZScsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVqZWN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLnJlbW92ZScsXG4gICdvcmcucGx1Z2luLWluc3RhbGwtcG9saWN5LnVwZGF0ZScsXG4gIC8vIEFuIHVwbG9hZCBSRUZVU0VEIGJlY2F1c2UgaXRzIG5hbWUgd291bGQgb3ZlcnJpZGUgc29tZXRoaW5nIHRoZSBvcmcgYWxyZWFkeVxuICAvLyByZXNvbHZlcyDigJQgYSBsaXN0aW5nLCBvciBhIHRlYW0ncyBwYXJlbnQtb3JnIHBsdWdpbiDigJQgYW5kIHRoZSBjb25zdW1wdGlvblxuICAvLyBwb2xpY3kgc2F5cyBgc2hhZG93aW5nOiBkZW55YC4gQXVkaXRlZCBiZWNhdXNlIGEgcmVmdXNhbCBvdGhlcndpc2UgcmV0dXJuc1xuICAvLyBhbiBlcnJvciB0byB0aGUgY2FsbGVyIGFuZCBsZWF2ZXMgbm90aGluZyBiZWhpbmQ6IGFuIGF0dGVtcHQgdG8gZGVmaW5lXG4gIC8vIGB0cml2eWAgb3ZlciB0aGUgT2ZmaWNpYWwgc2Nhbm5lciBpcyBleGFjdGx5IHRoZSB0aGluZyBzb21lb25lIHNob3VsZCBiZVxuICAvLyBhYmxlIHRvIGZpbmQgYWZ0ZXJ3YXJkcy4gYGRldGFpbHNgIGNhcnJ5IHRoZSBuYW1lIGFuZCB3aGF0IGl0IHdvdWxkIGhhdmVcbiAgLy8gb3ZlcnJpZGRlbi5cbiAgJ3BsdWdpbi5zaGFkb3dpbmcuZGVuaWVkJyxcbiAgLy8gUmV2aWV3cyBhbmQgcmVwbGllcy5cbiAgJ3BsdWdpbi5yZXZpZXcuY3JlYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcudXBkYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcuZGVsZXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwb3J0JyxcbiAgJ3BsdWdpbi5yZXZpZXcuaG9sZCcsXG4gICdwbHVnaW4ucmV2aWV3LnJlbGVhc2UnLFxuICAncGx1Z2luLnJldmlldy5yZW1vdmUnLFxuICAncGx1Z2luLnJldmlldy5hbm9ueW1pemUnLFxuICAncGx1Z2luLnJldmlldy5yZXBseS5jcmVhdGUnLFxuICAncGx1Z2luLnJldmlldy5yZXBseS51cGRhdGUnLFxuICAncGx1Z2luLnJldmlldy5yZXBseS5kZWxldGUnLFxuICAvLyBBbm9ueW1vdXMgc3VibWlzc2lvbnMuXG4gICdwbHVnaW4uc3VibWlzc2lvbi5jcmVhdGUnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24udmVyaWZ5JyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmdhdGUtZmFpbCcsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5hcHByb3ZlJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLnJlamVjdCcsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5jbGFpbScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5leHBpcmUnLFxuICAvLyBTZWN1cml0eSBhZHZpc29yaWVzIChwdWJsaXNoL3dpdGhkcmF3IGFyZSBzeXN0ZW0tb3JnIG9ubHk7IHVwZGF0ZSA9IGFcbiAgLy8gbW9kZXJhdG9yIGVkaXRpbmcgYSBkcmFmdCBiZWZvcmUgaXQgaXMgcHVibGlzaGVkKS5cbiAgJ3BsdWdpbi5hZHZpc29yeS5jcmVhdGUnLFxuICAncGx1Z2luLmFkdmlzb3J5LnVwZGF0ZScsXG4gICdwbHVnaW4uYWR2aXNvcnkucHVibGlzaCcsXG4gICdwbHVnaW4uYWR2aXNvcnkud2l0aGRyYXcnLFxuICAvLyBQZXItb3JnIHBsdWdpbiBzZWN1cml0eSBub3RpZmljYXRpb25zIChwbHVnaW4gc2NhbiBnYXRlcyk6IHRoZSBzZXR0aW5nc1xuICAvLyAocmVjaXBpZW50cywgZGlnZXN0LCB3ZWJob29rLCBleHRlcm5hbCBhZGRyZXNzIOKAlCBjaGFuZ2VkIGZpZWxkIG5hbWVzIGFuZFxuICAvLyB0aGUgd2ViaG9vayBob3N0IG9ubHksIG5ldmVyIHRoZSBzZWNyZXQgb3IgdGhlIGFkZHJlc3MpLCBhbiBleHRlcm5hbFxuICAvLyBhZGRyZXNzIGNvbmZpcm1lZCB0aHJvdWdoIGl0cyBlbWFpbGVkIHNpbmdsZS11c2UgbGluaywgYW5kIGEgdGVzdCBzZW5kLlxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMudXBkYXRlJyxcbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLmV4dGVybmFsX2VtYWlsLnZlcmlmeScsXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy50ZXN0JyxcbiAgLy8gQSBnYXRlLXJlZnVzZWQgaW1hZ2UgS0VQVCBmcm9tIHRoZSBzZXR1cCBjYXRhbG9nIGxvYWQsIHByb21vdGVkIHRvIGFcbiAgLy8gdmVyc2lvbiB3aXRob3V0IGEgcmVidWlsZCAoc3lzdGVtIG9yZywgYWZ0ZXIgYSBmaXggdXBzdHJlYW0gb3IgYW5cbiAgLy8gYWR2aXNvcnktaWQgd2FpdmVyKSDigJQgb3IgcmVmdXNlZCBhZ2FpbiBiZWNhdXNlIHRoZSBDVVJSRU5UIGdhdGVzIHN0aWxsXG4gIC8vIGZhaWwgaXQuIGBkZXRhaWxzYCBjYXJyeSBuYW1lL3ZlcnNpb24vZGlnZXN0IGFuZCB0aGUgZmluZGluZ3MuXG4gICdwbHVnaW4uc2V0dXBfaW1hZ2UucHJvbW90ZWQnLFxuICAncGx1Z2luLnNldHVwX2ltYWdlLnByb21vdGVfcmVmdXNlZCcsXG4gIC8vIEEgZ2F0ZS1yZWZ1c2VkIHNldHVwLWxvYWQgaW1hZ2UgS0VQVCAoc2lnbmVkLCBpbiB0aGUgcmVnaXN0cnkpIGZvciBsYXRlclxuICAvLyBwcm9tb3Rpb24gKGBkZXRhaWxzYDogZGlnZXN0LCByZWZ1c2FsIGNvZGUsIGV4cGlyZXNBdCkg4oCUIGFuZCBpdHMgcm93XG4gIC8vIGRyb3BwZWQgYnkgdGhlIHN3ZWVwIChgZGV0YWlscy5yZWFzb25gOiBleHBpcmVkIC8gc3VwZXJzZWRlZCkuXG4gICdwbHVnaW4uc2V0dXBfaW1hZ2Uua2VwdCcsXG4gICdwbHVnaW4uc2V0dXBfaW1hZ2UuZGlzY2FyZGVkJyxcbiAgLy8gQSBQSVBFTElORSdzIHRyaWFnZSBvZiBpdHMgZXhwb3N1cmUgdG8gYSB2dWxuZXJhYmxlIHBsdWdpbiB2ZXJzaW9uOiBhXG4gIC8vIHRpbWUtYm94ZWQgcmlzayBhY2NlcHRhbmNlIChyZWFzb24gKyBleHBpcnksIHRoZSBhY2NlcHRlZCBmaW5kaW5nIGtleXMgYW5kXG4gIC8vIHdoZXRoZXIgS0VWIGZpbmRpbmdzIHdlcmUgYWNjZXB0ZWQpLCBhIGZhbHNlLXBvc2l0aXZlIGRpc21pc3NhbCwgb3IgYVxuICAvLyByZW9wZW4uIEFuIGFjdGl2ZSBhY2NlcHRhbmNlIGV4ZW1wdHMgdGhhdCBwaXBlbGluZSdzIGxvb2t1cHMgYW5kIHJ1bnRpbWVcbiAgLy8gY2hlY2tzIGZyb20gdGhlIGZsYWcgLyBLRVYgLyBIaWdoLWZsb29yIHJlZnVzYWxzIGZvciB0aG9zZSBmaW5kaW5ncyBvbmx5LlxuICAncGlwZWxpbmUudnVsbi5hY2NlcHRlZCcsXG4gICdwaXBlbGluZS52dWxuLmZhbHNlX3Bvc2l0aXZlJyxcbiAgJ3BpcGVsaW5lLnZ1bG4ucmVvcGVuZWQnLFxuICAvLyBBIHBpcGVsaW5lJ3MgcnVudGltZSBjaGVjayBncmFkZWQgb25lIG9mIGl0cyBydW5uaW5nIGltYWdlcyBgZXJyb3JgIG9yXG4gIC8vIGxvdWRlciAoYGRldGFpbHNgOiBzdGVwS2V5LCBkaWdlc3QsIHJlYXNvbiBjb2RlcywgZXhlY3V0aW9uSWQgd2hlbiBzZW50KS5cbiAgJ3BpcGVsaW5lLnJ1bnRpbWVfY2hlY2suZmxhZ2dlZCcsXG4gIC8vIEEgcGlwZWxpbmUncyBwbHVnaW4gc3RlcHMgbW92ZWQgdG8gbmV3ZXIgdmVyc2lvbnMgdGhyb3VnaCB0aGUgdXBncmFkZVxuICAvLyBmbG93IChwcmV2aWV3IOKGkiBhcHBseTsgYGRldGFpbHNgIGNhcnJ5IHRoZSBzdGVwcywgZnJvbSDihpIgdG8gdmVyc2lvbnMpLCBhbmQgYVxuICAvLyBwaXBlbGluZS1ydW4gc2VjdXJpdHkgc2Nhbm5lciByZXBvcnQgdXBsb2FkZWQgZm9yIGEgcGlwZWxpbmUgKGBkZXRhaWxzYDpcbiAgLy8gdG9vbCwgZm9ybWF0LCBzdGFnZSwgdGhlIGZpbmRpbmcgY291bnRzIOKAlCBuZXZlciB0aGUgZmluZGluZ3MgdGhlbXNlbHZlcykuXG4gICdwaXBlbGluZS5wbHVnaW4udXBncmFkZWQnLFxuICAncGlwZWxpbmUuc2VjdXJpdHlfcmVwb3J0LnVwbG9hZCcsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZW1vdGVBdWRpdEFjdGlvbiA9IHR5cGVvZiBSRU1PVEVfQVVESVRfQUNUSU9OU1tudW1iZXJdO1xuXG4vKiogV2hldGhlciBgdmFsdWVgIGlzIGFuIGFjdGlvbiBhIHJlbW90ZSBzZXJ2aWNlIG1heSBlbWl0ICh0aGUgaW5nZXN0IGFsbG93LWxpc3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlQXVkaXRBY3Rpb24odmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFJlbW90ZUF1ZGl0QWN0aW9uIHtcbiAgcmV0dXJuIChSRU1PVEVfQVVESVRfQUNUSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuIl19
|
|
621
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9yZW1vdGUtYXVkaXQtYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7O0dBT0c7QUFHSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUc7SUFDbEMsd0JBQXdCO0lBQ3hCLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsOEVBQThFO0lBQzlFLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUscUJBQXFCO0lBQ3JCLHVFQUF1RTtJQUN2RSwyRUFBMkU7SUFDM0UsK0VBQStFO0lBQy9FLDhFQUE4RTtJQUM5RSxrRUFBa0U7SUFDbEUseUVBQXlFO0lBQ3pFLG9CQUFvQjtJQUNwQiwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLHNFQUFzRTtJQUN0RSw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLHVFQUF1RTtJQUN2RSxxQ0FBcUM7SUFDckMscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQiw2RUFBNkU7SUFDN0UsK0VBQStFO0lBQy9FLHFFQUFxRTtJQUNyRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YsZUFBZTtJQUNmLDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIseUVBQXlFO0lBQ3pFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsdUVBQXVFO0lBQ3ZFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsZ0VBQWdFO0lBQ2hFLHFFQUFxRTtJQUNyRSxvREFBb0Q7SUFDcEQsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG1FQUFtRTtJQUNuRSw0RUFB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QUF5QjtJQUN6QiwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDZCQUE2QjtJQUM3QiwyQkFBMkI7SUFDM0IsMEJBQTBCO0lBQzFCLHlCQUF5QjtJQUN6QiwwQkFBMEI7SUFDMUIsd0VBQXdFO0lBQ3hFLHFEQUFxRDtJQUNyRCx3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLHlCQUF5QjtJQUN6QiwwQkFBMEI7SUFDMUIsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSx1RUFBdUU7SUFDdkUsMEVBQTBFO0lBQzFFLHNDQUFzQztJQUN0QyxxREFBcUQ7SUFDckQsb0NBQW9DO0lBQ3BDLHVFQUF1RTtJQUN2RSxvRUFBb0U7SUFDcEUseUVBQXlFO0lBQ3pFLGlFQUFpRTtJQUNqRSw2QkFBNkI7SUFDN0Isb0NBQW9DO0lBQ3BDLDJFQUEyRTtJQUMzRSx1RUFBdUU7SUFDdkUsaUVBQWlFO0lBQ2pFLHlCQUF5QjtJQUN6Qiw4QkFBOEI7SUFDOUIsd0VBQXdFO0lBQ3hFLDZFQUE2RTtJQUM3RSx3RUFBd0U7SUFDeEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSx3QkFBd0I7SUFDeEIsOEJBQThCO0lBQzlCLHdCQUF3QjtJQUN4Qix5RUFBeUU7SUFDekUsNEVBQTRFO0lBQzVFLGdDQUFnQztJQUNoQyx3RUFBd0U7SUFDeEUsK0VBQStFO0lBQy9FLDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUsMEJBQTBCO0lBQzFCLGlDQUFpQztJQUNqQywyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLGlDQUFpQztDQUN6QixDQUFDO0FBSVgsc0ZBQXNGO0FBQ3RGLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFhO0lBQy9DLE9BQVEsb0JBQTBDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcmVtb3RlIChub24tcGxhdGZvcm0pIGF1ZGl0IEFDVElPTiBWT0NBQlVMQVJZLlxuICpcbiAqIEtlcHQgYXBhcnQgZnJvbSB0aGUgY2xpZW50IHRoYXQgc2hpcHMgdGhlIGV2ZW50cyAoYHNlcnZpY2VzL3JlbW90ZS1hdWRpdC1jbGllbnQudHNgKVxuICogYmVjYXVzZSBpdCBpcyBhbiBhbGxvdy1saXN0LCBub3QgbWFjaGluZXJ5OiBpdCBpcyB0aGUgdGhpbmcgYSByZXZpZXdlciByZWFkc1xuICogZW5kIHRvIGVuZCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgYSBzZXJ2aWNlIG1heSBlbWl0IGEgZ2l2ZW4gYWN0aW9uLCBhbmQgaXQgaXNcbiAqIHdoYXQgcGxhdGZvcm0ncyBpbmdlc3QgdmFsaWRhdGVzIGFnYWluc3QuXG4gKi9cblxuXG4vKipcbiAqIFRoZSBleGFjdCBzZXQgb2YgYXVkaXQgYWN0aW9ucyBhIE5PTi1QTEFURk9STSAocmVtb3RlKSBzZXJ2aWNlIGlzIHBlcm1pdHRlZCB0b1xuICogZW1pdCB0aHJvdWdoIGBQT1NUIC9hdWRpdC9ldmVudHNgLiBUaGlzIGlzIHRoZSBTSU5HTEUgU09VUkNFIOKAlCBgUmVtb3RlQXVkaXRBY3Rpb25gXG4gKiBpcyBkZXJpdmVkIGZyb20gaXQsIHNvIHRoZSB0eXBlIGFuZCB0aGUgcnVudGltZSBhbGxvdy1saXN0IGNhbiBuZXZlciBkcmlmdC5cbiAqXG4gKiBTRUNVUklUWTogcGxhdGZvcm0ncyBpbmdlc3QgdmFsaWRhdGVzIGBhY3Rpb25gIGFnYWluc3QgdGhpcyBzdWJzZXQgKHZpYVxuICoge0BsaW5rIGlzUmVtb3RlQXVkaXRBY3Rpb259KSwgTk9UIHRoZSBmdWxsIHBsYXRmb3JtIGBBdWRpdEFjdGlvbmAgdW5pb24g4oCUIGFcbiAqIGBzZXJ2aWNlOipgIHRva2VuIG11c3Qgbm90IGJlIGFibGUgdG8gZm9yZ2UgcGxhdGZvcm0tYXV0aG9yaXR5IGV2ZW50c1xuICogKGBhZG1pbi5zdXBlcmFkbWluLmdyYW50YCwgYG9yZy5vd25lcnNoaXAudHJhbnNmZXJgLCBgdXNlci5sb2dpbmAsIOKApikuIEtlZXBcbiAqIHRoaXMgbGlzdCBmcmVlIG9mIGFueSBwbGF0Zm9ybS1vbmx5IGFjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFTU9URV9BVURJVF9BQ1RJT05TID0gW1xuICAncGx1Z2luLmJ1aWxkLmNvbXBsZXRlZCcsXG4gICdwbHVnaW4uYnVpbGQuZmFpbGVkJyxcbiAgJ3BsdWdpbi5idWlsZC50aW1lb3V0JyxcbiAgLy8gQSB2ZXJzaW9uIHBlcnNpc3RlZCBVTlNDQU5ORUQgYmVjYXVzZSB0aGUgYnVpbGQtdGltZSBzY2FuIGNvdWxkIG5vdCBydW4gYW5kXG4gIC8vIHRoZSBvcGVyYXRvciBlc2NhcGUgaGF0Y2ggYFBMVUdJTl9BTExPV19VTlNDQU5ORURgIGlzIG9uICh3aXRob3V0IGl0IHRoZVxuICAvLyBidWlsZCBmYWlscyBgSU1BR0VfU0NBTl9VTkFWQUlMQUJMRWApLiBgZGV0YWlsc2AgY2FycnkgbmFtZS92ZXJzaW9uL2RpZ2VzdC5cbiAgJ3BsdWdpbi5zY2FuLnNraXBwZWQnLFxuICAvLyBGaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzIHdlcmUgRVhFTVBURUQgZnJvbSB0aGUgcGxhdGZvcm0gZmxvb3IgYnkgYVxuICAvLyBgUExVR0lOX1ZVTE5fV0FJVkVSU2AgZW50cnksIHNvIGEgYnVpbGQgdGhhdCB3b3VsZCBvdGhlcndpc2UgaGF2ZSBmYWlsZWRcbiAgLy8gUExVR0lOX1ZVTE5fR0FURSB3YXMgYWxsb3dlZCB0aHJvdWdoLiBUaGUgb3RoZXIgaGFsZiBvZiBwbHVnaW4uc2Nhbi5za2lwcGVkOlxuICAvLyBib3RoIGFyZSBvcGVyYXRvciBlc2NhcGUgaGF0Y2hlcyB0aGF0IGNoYW5nZSBhIGdhdGUncyB2ZXJkaWN0LCBhbmQgYSBtZXRyaWNcbiAgLy8gYW5kIGEgbG9nIGxpbmUgYXJlIG5vdCBhIGR1cmFibGUgcmVjb3JkIG9mIG9uZS4gYGRldGFpbHNgIGNhcnJ5XG4gIC8vIG5hbWUvdmVyc2lvbi9kaWdlc3QsIGhvdyBtYW55IGZpbmRpbmdzIHdlcmUgd2FpdmVkIGFuZCB3aGljaCBwYWNrYWdlcy5cbiAgJ3BsdWdpbi52dWxuLndhaXZlZCcsXG4gIC8vIFRoZSBuaWdodGx5IHJlc2NhbiBGTEFHR0VEIGEgc3RvcmVkIHZlcnNpb24gKGl0cyBnYXRlZCBDcml0aWNhbCBmaW5kaW5nc1xuICAvLyBub3cgZXhjZWVkIFBMVUdJTl9WVUxOX01BWF9GSU5ESU5HUyDigJQgbG9va3VwIGFuZCB0aGUgcGlwZWxpbmUncyBvd25lcnMgYXJlXG4gIC8vIHdhcm5lZCBhdCBgZXJyb3JgIHNldmVyaXR5KSwgb3IgQ0xFQVJFRCB0aGF0IGZsYWcuIEJvdGggY2hhbmdlIHdoYXRcbiAgLy8gcmVzb2x1dGlvbiBzYXlzIGFib3V0IGEgdmVyc2lvbiBub2JvZHkgcmVidWlsdCwgb24gbm9ib2R5J3MgcmVxdWVzdCwgc28gdGhlXG4gIC8vIHJlY29yZCBvZiBXSEVOIGFuZCBXSFkgbGl2ZXMgaW4gdGhlIGhhc2gtY2hhaW5lZCBsb2cgcmF0aGVyIHRoYW4gb25seSBpbiBhXG4gIC8vIGNvbHVtbiB0aGUgbmV4dCByZXNjYW4gb3ZlcndyaXRlcy4gYGRldGFpbHNgIGNhcnJ5IGNvdW50cywgdGhlIGdhdGVkXG4gIC8vIGFkdmlzb3J5IGlkcyBhbmQgdGhlIGltYWdlIGRpZ2VzdC5cbiAgJ3BsdWdpbi52dWxuLmZsYWdnZWQnLFxuICAncGx1Z2luLnZ1bG4uY2xlYXJlZCcsXG4gIC8vIFBsdWdpbiBsaWZlY3ljbGUgbXV0YXRpb25zIChhcGkvcGx1Z2luIHJvdXRlIGhhbmRsZXJzKSDigJQgdGhlIGRlc3RydWN0aXZlIC9cbiAgLy8gcHVibGlzaGluZyBzdXJmYWNlIHRoYXQgYnVpbGRzIGFscmVhZHkgYXVkaXQncyBjb3VudGVycGFydDogcmVnaXN0cnkgZGVsZXRlLFxuICAvLyBzb3VyY2UgdXBsb2FkLCBhbmQgZGVwbG95LXRvLWNsdXN0ZXIuIGB0YXJnZXRJZGAgaXMgdGhlIHBsdWdpbiBpZC5cbiAgJ3BsdWdpbi5kZWxldGUnLFxuICAncGx1Z2luLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgcHVyZ2U6IHBlcm1hbmVudCBoYXJkLWRlbGV0ZSBvZiBhIHNvZnQtZGVsZXRlZCBwbHVnaW4gdG9tYnN0b25lIG9uXG4gIC8vIGRlbWFuZCAoZmluYWxpemVzIHdoYXQgdGhlIHJldGVudGlvbiBzd2VlcCB3b3VsZCBvdGhlcndpc2UgZG8gbGF0ZXIpLlxuICAncGx1Z2luLnB1cmdlJyxcbiAgJ3BsdWdpbi51cGRhdGUnLFxuICAncGx1Z2luLnVwbG9hZCcsXG4gICdwbHVnaW4uZGVwbG95JyxcbiAgLy8gUGx1Z2luIGJ1bGsgbXV0YXRpb25zIChhcGkvcGx1Z2luIGJ1bGstcGx1Z2luIHJvdXRlKSArIERMUSBwdXJnZSAoZHJvcHMgYWxsXG4gIC8vIGRlYWQtbGV0dGVyZWQgYnVpbGQgam9icywgY3Jvc3Mtb3JnLCBzeXNhZG1pbikuIGBkZXRhaWxzYCBjYXJyaWVzIGNvdW50cy5cbiAgJ3BsdWdpbi5idWxrLnVwZGF0ZScsXG4gICdwbHVnaW4uYnVsay5kZWxldGUnLFxuICAncGx1Z2luLmRscS5wdXJnZScsXG4gIC8vIEJ1aWxkIHJlLXJ1bnMgZnJvbSB0aGUgcXVldWUtdHJpYWdlIHN1cmZhY2U6IHJlLWVucXVldWUgYSBGQUlMRUQgYnVpbGRcbiAgLy8gKGBwbHVnaW4uYnVpbGQucmV0cnlgKSBvciBhIGRlYWQtbGV0dGVyZWQgb25lIChgcGx1Z2luLmRscS5yZXBsYXlgKS4gQm90aFxuICAvLyByZS1ydW4gYW4gaW1hZ2UgYnVpbGQgKyBwbHVnaW4gcGVyc2lzdCBvbiB0aGUgY2FsbGVyJ3MgYXV0aG9yaXR5LCBzbyB0aGV5XG4gIC8vIGFyZSBhdWRpdGVkIG11dGF0aW9uczsgYGFmZmVjdGVkT3JnSWRgIGNhcnJpZXMgdGhlIGpvYidzIG93bmluZyBvcmcuXG4gICdwbHVnaW4uYnVpbGQucmV0cnknLFxuICAncGx1Z2luLmRscS5yZXBsYXknLFxuICAvLyBQaXBlbGluZSBtdXRhdGlvbnMg4oCUIGVtaXR0ZWQgYnkgYXBpL3BpcGVsaW5lJ3Mgcm91dGUgaGFuZGxlcnNcbiAgLy8gKGNyZWF0ZS91cGRhdGUvZGVsZXRlICsgQ29kZVBpcGVsaW5lIGV4ZWN1dGlvbiB0cmlnZ2VyL2NhbmNlbCkgYW5kXG4gIC8vIHBvc3RlZCB0byBwbGF0Zm9ybSdzIGBQT1NUIC9hdWRpdC9ldmVudHNgIGluZ2VzdC5cbiAgJ3BpcGVsaW5lLmNyZWF0ZScsXG4gICdwaXBlbGluZS51cGRhdGUnLFxuICAncGlwZWxpbmUuZGVsZXRlJyxcbiAgJ3BpcGVsaW5lLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgcHVyZ2U6IHBlcm1hbmVudCBoYXJkLWRlbGV0ZSBvZiBhIHNvZnQtZGVsZXRlZCBwaXBlbGluZSAvXG4gIC8vIHBpcGVsaW5lX3RlbXBsYXRlIHRvbWJzdG9uZSBvbiBkZW1hbmQgKGZpbmFsaXplcyB3aGF0IHRoZSByZXRlbnRpb24gc3dlZXBcbiAgLy8gd291bGQgb3RoZXJ3aXNlIGRvIGxhdGVyKS4gYHRhcmdldElkYCBpcyB0aGUgcHVyZ2VkIGlkLlxuICAncGlwZWxpbmUucHVyZ2UnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUuY3JlYXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnVwZGF0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5kZWxldGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUucmVzdG9yZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5wdXJnZScsXG4gICdwaXBlbGluZS5leGVjdXRpb24uc3RhcnQnLFxuICAncGlwZWxpbmUuZXhlY3V0aW9uLmNhbmNlbCcsXG4gIC8vIENvZGVQaXBlbGluZSBBUk4tcmVnaXN0cnkgY29uZmlnIChhcGkvcGlwZWxpbmUgcmVnaXN0cnkgcm91dGUpIOKAlCByZWdpc3RlcmluZyAvXG4gIC8vIGRlcmVnaXN0ZXJpbmcgdGhlIGV4dGVybmFsIENvZGVQaXBlbGluZSB0aGF0IGJhY2tzIGEgcGlwZWxpbmUgKGRlcGxveS1hZmZlY3RpbmcpLlxuICAncGlwZWxpbmUucmVnaXN0cnkucmVnaXN0ZXInLFxuICAncGlwZWxpbmUucmVnaXN0cnkuZGVyZWdpc3RlcicsXG4gIC8vIFF1b3RhIGFkbWluaXN0cmF0aW9uIChhcGkvcXVvdGEpIOKAlCBhIHN1cGVyYWRtaW4gcmVzZXR0aW5nIGFuIG9yZydzIHVzYWdlXG4gIC8vIGNvdW50ZXIgb3IgZWRpdGluZyBpdHMgdGllciBsaW1pdHMuIGBhZmZlY3RlZE9yZ0lkYCBpcyB0aGUgb3JnIGNoYW5nZWQ7XG4gIC8vIGBkZXRhaWxzYCBjYXJyaWVzIHRoZSBxdW90YVR5cGUgKyBvbGQvbmV3IHZhbHVlLlxuICAncXVvdGEucmVzZXQnLFxuICAncXVvdGEubGltaXQudXBkYXRlJyxcbiAgLy8gQSBzdXBlcmFkbWluIGRlbGV0aW5nIGFuIG9yZydzIGVudGlyZSBxdW90YSBkb2N1bWVudC5cbiAgJ3F1b3RhLmRlbGV0ZScsXG4gIC8vIEFuIGFjY291bnQncyBxdW90YSB0aHJlc2hvbGQtbm90aWNlIHNldHRpbmdzIChvcHQtb3V0ICsgdGhlXG4gIC8vIGBxdW90YS50aHJlc2hvbGRgIHdlYmhvb2sgVVJMKSDigJQgd2hlcmUgdXNhZ2Ugd2FybmluZ3MgZ28uXG4gICdxdW90YS5ub3RpY2Vfc2V0dGluZ3MudXBkYXRlJyxcbiAgLy8gQ29tcGxpYW5jZSBhZG1pbmlzdHJhdGlvbiAoYXBpL2NvbXBsaWFuY2UpIOKAlCB0aGUgZW5mb3JjZW1lbnQtcG9zdHVyZSBzdXJmYWNlLlxuICAvLyBBcHByb3ZpbmcvcmV2b2tpbmcgYW4gZXhlbXB0aW9uLCB0b2dnbGluZy9hdXRob3JpbmcvZGVsZXRpbmcgYSBydWxlLFxuICAvLyBhdXRob3JpbmcvZGVsZXRpbmcgYSBwb2xpY3ksIG1hbmFnaW5nIHNjYW4gc2NoZWR1bGVzLCBhcHBseWluZyBhIHRlbXBsYXRlLFxuICAvLyBvciBjYW5jZWxsaW5nIGEgcnVubmluZyBzY2FuLiBgdGFyZ2V0SWRgIGlzIHRoZSBydWxlL3BvbGljeS9leGVtcHRpb24vc2NhbiBpZC5cbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLmFwcHJvdmUnLFxuICAnY29tcGxpYW5jZS5leGVtcHRpb24ucmV2b2tlJyxcbiAgLy8gQSBtZW1iZXIgRklMSU5HIGFuIGV4ZW1wdGlvbiByZXF1ZXN0IChzaW5nbGUgb3IgYnVsazsgbWV0YWRhdGEgb25seSwgbmV2ZXJcbiAgLy8gdGhlIHJlYXNvbikgYW5kIGFuIGFkbWluIFJFSkVDVElORyBvbmUg4oCUIHRoZSBvdGhlciBoYWx2ZXMgb2YgdGhlXG4gIC8vIHR3by1wZXJzb24gZGVjaXNpb24gd2hvc2UgYXBwcm92YWwgaXMgcmVjb3JkZWQgYWJvdmUuXG4gICdjb21wbGlhbmNlLmV4ZW1wdGlvbi5yZXF1ZXN0JyxcbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLnJlamVjdCcsXG4gIC8vIFRoZSBkYWlseSBleHBpcnkgc3dlZXAgZmxpcHBpbmcgYXBwcm92ZWQgZXhlbXB0aW9ucyBwYXN0IGBleHBpcmVzQXRgIHRvXG4gIC8vIGBleHBpcmVkYCDigJQgb25jZSBwZXIgb3JnIHBlciB0aWNrIChzeXN0ZW0gYWN0b3IsIGBkZXRhaWxzLmlkc2AsIGBjb3VudGApLlxuICAnY29tcGxpYW5jZS5leGVtcHRpb24uZXhwaXJlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS50b2dnbGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgb24tZGVtYW5kIGhhcmQtZGVsZXRlIChQVVJHRSkgb2YgYSBzb2Z0LWRlbGV0ZWQgcnVsZS9wb2xpY3kgdG9tYnN0b25lIOKAlFxuICAvLyB0aGUgY2FsbGVyLWluaXRpYXRlZCBjb3VudGVycGFydCB0byB0aGUgcmV0ZW50aW9uIHN3ZWVwJ3MgYXV0by1wdXJnZS4gRGVzdHJveXNcbiAgLy8gdGhlIHRvbWJzdG9uZSBwZXJtYW5lbnRseSwgc28gaXQgY2FycmllcyB0aGUgZHVyYWJsZSwgdGFtcGVyLWV2aWRlbnQgdHJhaWwuXG4gICdjb21wbGlhbmNlLnJ1bGUucHVyZ2UnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kucmVzdG9yZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnRlbXBsYXRlLmFwcGx5JyxcbiAgLy8gTGF1bmNoaW5nIGFuIG9yZy13aWRlIHJlLWV2YWx1YXRpb24gKHRoZSBjb3VudGVycGFydCB0byBgLmNhbmNlbGApIOKAlCBpdFxuICAvLyBwZXJzaXN0cyBhIHNjYW4gYW5kIGNhbiBibG9jayBlbnRpdGllcyB0aGF0IHBhc3NlZCBiZWZvcmUuXG4gICdjb21wbGlhbmNlLnNjYW4uY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jYW5jZWwnLFxuICAvLyBBIHNjYW4ncyB0ZXJtaW5hbCBPVVRDT01FIChjb21wbGV0ZWQg4oaSIHN1Y2Nlc3Mgd2l0aCB0aGUgcGFzcy93YXJuL2Jsb2NrXG4gIC8vIGNvdW50cywgZmFpbGVkIOKGkiBmYWlsdXJlKS4gU2NoZWR1bGVkIHNjYW5zIGFsc28gd3JpdGUgYGNvbXBsaWFuY2Uuc2Nhbi5jcmVhdGVgXG4gIC8vIChgZGV0YWlscy50cmlnZ2VyZWRCeTogJ3NjaGVkdWxlZCdgKSwgYXR0cmlidXRlZCB0byB0aGUgc2NoZWR1bGUncyBhdXRob3IuXG4gICdjb21wbGlhbmNlLnNjYW4uY29tcGxldGUnLFxuICAvLyBQbGF0Zm9ybSBvbmJvYXJkaW5nIHN1YnNjcmliaW5nIGEgbmV3IG9yZyB0byBldmVyeSBwdWJsaXNoZWQgcnVsZVxuICAvLyAoSU5BQ1RJVkUgc3Vic2NyaXB0aW9uczsgYGRldGFpbHMuc3Vic2NyaWJlZGAgaXMgdGhlIGNvdW50KS5cbiAgJ2NvbXBsaWFuY2Uuc3Vic2NyaXB0aW9uLmF1dG8tc3Vic2NyaWJlJyxcbiAgLy8gUGVyLW9yZyBjb21wbGlhbmNlIG5vdGlmaWNhdGlvbiBzZXR0aW5nczogcmVjaXBpZW50cyArIHRoZSBvdXRib3VuZCB3ZWJob29rXG4gIC8vIFVSTC9zZWNyZXQuIEJlYXJlci1lcXVpdmFsZW50IGNvbmZpZyB0aGF0IHJlZGlyZWN0cyB2aW9sYXRpb24gbm90aWNlcywgc28gYVxuICAvLyBjaGFuZ2UgY2FycmllcyB0aGUgZHVyYWJsZSB0cmFpbCAobmV2ZXIgdGhlIHNlY3JldCBpdHNlbGYpLlxuICAnY29tcGxpYW5jZS5ub3RpZmljYXRpb24tcHJlZmVyZW5jZS51cGRhdGUnLFxuICAvLyBJbWFnZS1yZWdpc3RyeSBkZXN0cnVjdGl2ZSBvcHMgKGFwaS9pbWFnZS1yZWdpc3RyeSkg4oCUIGdhcmJhZ2UtY29sbGVjdGlvblxuICAvLyBzd2VlcHMgYW5kIGV4cGxpY2l0IGltYWdlL3RhZyBkZWxldGVzLlxuICAncmVnaXN0cnkuZ2MnLFxuICAncmVnaXN0cnkuaW1hZ2UuZGVsZXRlJyxcbiAgLy8gQ3Jvc3MtcmVwbyB0YWcvaW1hZ2UgY29weSAoYXBpL2ltYWdlLXJlZ2lzdHJ5IFBPU1QgL2FwaS9pbWFnZXMvY29weSkuIEFcbiAgLy8gY3Jvc3MtdGVuYW50IGNvcHkgbW92ZXMgZGF0YSBhY3Jvc3MgY3VzdG9tZXIgYm91bmRhcmllcywgc28gaXQgbmVlZHMgdGhlXG4gIC8vIGR1cmFibGUsIHRhbXBlci1ldmlkZW50IHRyYWlsIOKAlCBub3QganVzdCB0aGUgTG9raSBvcGVyYXRvciBsaW5lLlxuICAncmVnaXN0cnkuaW1hZ2UuY29weScsXG4gIC8vIEEgcGx1Z2luIGltYWdlIHNpZ25lZCArIFNCT00tYXR0ZXN0ZWQgYnkgdGhlIHBsYXRmb3JtJ3MgcGx1Z2luLXNpZ25pbmcga2V5XG4gIC8vIChhcGkvaW1hZ2UtcmVnaXN0cnkgUE9TVCAvaW50ZXJuYWwvcGx1Z2luLXNpZ25hdHVyZXMsIGNhbGxlZCBieSB0aGUgcGx1Z2luXG4gIC8vIGJ1aWxkIHdvcmtlcikuIFRoZSBrZXkgaXMgd2hhdCBzeW50aCB0cnVzdHMsIHNvIGV2ZXJ5IHVzZSBpcyBvbiB0aGUgdHJhaWwuXG4gICdyZWdpc3RyeS5pbWFnZS5zaWduJyxcbiAgLy8gVGhlIERvY2tlciB0b2tlbiBlbmRwb2ludCBtaW50aW5nIGEgcmVnaXN0cnkgdG9rZW4gdGhhdCBHUkFOVFMgYWNjZXNzXG4gIC8vIChgZGV0YWlscy5ncmFudGVkYDogcmVwbyArIGFjdGlvbnM7IHRoZSBzY29wZS1sZXNzIGBkb2NrZXIgbG9naW5gIHByb2JlIGlzXG4gIC8vIG5vdCByZWNvcmRlZCkg4oCUIGFuZCwgYXMgb3V0Y29tZSBmYWlsdXJlLCBhIHJlZnVzZWQgY3JlZGVudGlhbCAoaGFzaGVkXG4gIC8vIHVzZXJuYW1lLCBjcmVkZW50aWFsIGtpbmQgb25seSkuXG4gICdyZWdpc3RyeS50b2tlbi5pc3N1ZScsXG4gIC8vIEEgcHVzaCBjcmVkZW50aWFsIG1pbnRlZCBmb3Igb25lIGFub255bW91cyBzdWJtaXNzaW9uJ3NcbiAgLy8gYHF1YXJhbnRpbmUvPHN1Ym1pc3Npb25JZD5gIHJlcG8gKGV4cGlyeSArIFRUTCwgbmV2ZXIgdGhlIHNlY3JldCkuXG4gICdyZWdpc3RyeS5xdWFyYW50aW5lLmNyZWRlbnRpYWwubWludCcsXG4gIC8vIE1lc3NhZ2luZyAoYXBpL21lc3NhZ2UpIOKAlCBhZG1pbiBCUk9BRENBU1QgYW5ub3VuY2VtZW50cyArIGRlc3RydWN0aXZlXG4gIC8vIGRlbGV0ZXMuIDE6MSB1c2VyIG1lc3NhZ2VzIGFyZSBpbnRlbnRpb25hbGx5IE5PVCBhdWRpdGVkIChub2lzZSArIHRoZXkgd291bGRcbiAgLy8gcHVsbCBwcml2YXRlIGNvbnRlbnQgaW50byB0aGUgdHJhaWwpLiBgZGV0YWlsc2AgY2FycnkgbWV0YWRhdGEgb25seVxuICAvLyAoc3ViamVjdC90eXBlL3Njb3BlKSwgTkVWRVIgbWVzc2FnZSBib2R5IGNvbnRlbnQuXG4gICdtZXNzYWdlLmFubm91bmNlbWVudC5jcmVhdGUnLFxuICAnbWVzc2FnZS5kZWxldGUnLFxuICAvLyBCdWxrIFwicmVtb3ZlIGZyb20gbXkgaW5ib3hcIjogYSBwZXItcGFydGljaXBhbnQgVklFVyBjaGFuZ2UsIG5vdCBhIGRlbGV0ZSDigJRcbiAgLy8gdGhlIHJvdywgdGhlIG90aGVyIHBhcnRpY2lwYW50cyBhbmQgdGhlIHJldGVudGlvbiBzd2VlcCBhcmUgdW50b3VjaGVkLiBPbmVcbiAgLy8gcm93IHBlciBidWxrIGNhbGwgd2l0aCBgZGV0YWlscy5jb3VudGAgYW5kIHRoZSBmaWx0ZXIgc2NvcGUsIG5ldmVyIHBlclxuICAvLyBtZXNzYWdlIGFuZCBuZXZlciB0aGUgc2VhcmNoIHRleHQuXG4gICdtZXNzYWdlLmhpZGUnLFxuICAvLyBUaGUgdW5kbyBvZiBgbWVzc2FnZS5oaWRlYDogcm93cyBwdXQgYmFjayBpbnRvIHRoaXMgb3JnJ3MgaW5ib3guIFNhbWVcbiAgLy8gc2hhcGUg4oCUIG9uZSByb3cgcGVyIGNhbGwgd2l0aCBgZGV0YWlscy5jb3VudGAsIG5ldmVyIHRoZSBpZHMuXG4gICdtZXNzYWdlLnVuaGlkZScsXG4gICdtZXNzYWdlLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgb24tZGVtYW5kIFBVUkdFIChwZXJtYW5lbnQgaGFyZC1kZWxldGUpIG9mIGFuIGFscmVhZHktc29mdC1kZWxldGVkXG4gIC8vIG1lc3NhZ2UgdG9tYnN0b25lIOKAlCB0aGUgZGVzdHJ1Y3RpdmUgZmluYWxpemVyIHRoZSByZXRlbnRpb24gc3dlZXAgd291bGRcbiAgLy8gb3RoZXJ3aXNlIHBlcmZvcm0gYXQgdGhlIHB1cmdlIGRlYWRsaW5lLiBgZGV0YWlsc2AgY2FycnkgbWV0YWRhdGEgb25seS5cbiAgJ21lc3NhZ2UucHVyZ2UnLFxuICAvLyBBbiBhdXRob3IncyBlZGl0IG9mIGEgc2VudCBtZXNzYWdlIChhbmQgcmVmdXNlZCBhdHRlbXB0cywgYXMgZmFpbHVyZXMpLlxuICAvLyBgZGV0YWlsc2AgY2FycnkgdGhlIG5ldyBib2R5J3MgTEVOR1RIIG9ubHkg4oCUIG5laXRoZXIgc2lkZSBvZiB0aGUgZWRpdC5cbiAgJ21lc3NhZ2UudXBkYXRlJyxcbiAgLy8gQSBtZXNzYWdlIGF0dGFjaG1lbnQgc3RvcmVkIChnZW5lcmFsIG9yIHN1cHBvcnQgbW91bnQsIGBkZXRhaWxzLnN1cmZhY2VgKS5cbiAgLy8gVHlwZSArIHNpemUgb25seSDigJQgbmV2ZXIgdGhlIGJ5dGVzLCBhbmQgbm90IHRoZSB1c2VyLWNob3NlbiBmaWxlbmFtZS5cbiAgJ21lc3NhZ2UuYXR0YWNobWVudC51cGxvYWQnLFxuICAvLyBBIFNZU1RFTSBub3RpZmljYXRpb24gZHJvcHBlZCBpbnRvIGFuIG9yZydzIGluYm94IGJ5IGFuIGludGVybmFsIHNlcnZpY2VcbiAgLy8gKFBPU1QgL21lc3NhZ2VzL2ludGVybmFsL25vdGlmeSk7IGBkZXRhaWxzLmNhbGxlcmAgbmFtZXMgdGhlIHNlcnZpY2UuXG4gICdtZXNzYWdlLm5vdGlmeS5pbnRlcm5hbCcsXG4gIC8vIFRoZSBwbGF0Zm9ybSBvcmctZGVsZXRlIGNhc2NhZGUgcmVjbGFpbWluZyBhbiBvcmcncyBhdHRhY2htZW50IEJMT0JTIOKAlFxuICAvLyBgZGV0YWlscy5ibG9ic0RlbGV0ZWRgLCBvciBhIGZhaWx1cmUgcm93IHdoZW4gdGhlIHJlY2xhaW0gZGlkIG5vdCBjb21wbGV0ZS5cbiAgJ21lc3NhZ2Uub3JnLnB1cmdlJyxcbiAgLy8gU3VwcG9ydCBjYXNlcyAoYXBpL21lc3NhZ2UpLiBEaXN0aW5jdCBmcm9tIHRoZSBgbWVzc2FnZS4qYCBmYW1pbHkgYWJvdmVcbiAgLy8gYmVjYXVzZSBhIGNhc2UgaXMgbm90IGFuIG9yZGluYXJ5IG1lc3NhZ2U6IGl0IGNhcnJpZXMgYSByZXNwb25zZS10aW1lXG4gIC8vIGNvbW1pdG1lbnQsIHNvIFdITyByYWlzZWQgaXQgYW5kIFdIRU4gd2UgZmlyc3QgYW5zd2VyZWQgYXJlIHRoZSBmYWN0cyBhXG4gIC8vIGRpc3B1dGUgdHVybnMgb24uIGBkZXRhaWxzYCBjYXJyeSB0aGUgY2FzZSBudW1iZXIsIGxldmVsIGFuZCBzZXZlcml0eSDigJRcbiAgLy8gbWV0YWRhdGEgb25seSwgbmV2ZXIgdGhlIGJvZHkgb2Ygd2hhdCBhIGN1c3RvbWVyIHdyb3RlLlxuICAvL1xuICAvLyBUd28gb2YgdGhlIG5pbmUgcGxhbm5lZCBzdXBwb3J0IGFjdGlvbnMgYXJlIGhlcmUsIGFuZCBvbmx5IHR3bzogdGhlc2UgYXJlXG4gIC8vIHRoZSBvbmVzIHdpdGggcmVhbCBlbWl0dGVycyB0b2RheS4gVGhlIHJlc3QgKGBzdGF0dXNgLCBgc2V2ZXJpdHlgLFxuICAvLyBgYXNzaWduYCwgYHRyYW5zZmVyYCwgYG5vdGVgLCBgcmVhZGApIGxhbmQgV0lUSCB0aGUgcm91dGVzIHRoYXQgZW1pdCB0aGVtIOKAlFxuICAvLyBhIGRlY2xhcmVkIGFjdGlvbiBub3RoaW5nIGVtaXRzIGlzIGRlYWQgdm9jYWJ1bGFyeSwgYW5kIHRoZSBwYXJpdHkgdGVzdFxuICAvLyB3b3VsZCB0aGVuIGZvcmNlIGEgZG9jcyByb3cgZGVzY3JpYmluZyBhbiBldmVudCB0aGF0IG5ldmVyIGZpcmVzLlxuICAvL1xuICAvLyBgc3VwcG9ydC5jYXNlLnJlYWRgIHdpbGwgbWF0dGVyIG1vc3Qgb2YgYWxsIHdoZW4gaXQgYXJyaXZlczogaXQgaXMgdGhlIG9ubHlcbiAgLy8gcmVjb3JkIHRoYXQgc29tZW9uZSBhdCB0aGUgdmVuZG9yIG9wZW5lZCBhIGN1c3RvbWVyJ3MgY2FzZS5cbiAgJ3N1cHBvcnQuY2FzZS5vcGVuJyxcbiAgJ3N1cHBvcnQuY2FzZS5yZXBseScsXG4gIC8vIFRoZSB3b3JrZmxvdyBtdXRhdGlvbnMuIEVhY2ggaXMgYXVkaXRlZCBiZWNhdXNlIGVhY2ggbW92ZXMgYSBjYXNlJ3NcbiAgLy8gcmVsYXRpb25zaGlwIHRvIGl0cyByZXNwb25zZSBjb21taXRtZW50OiBzdGF0dXMgc3RvcHMgb3IgcmVzdGFydHMgdGhlXG4gIC8vIGNsb2NrLCBzZXZlcml0eSBjaGFuZ2VzIHdoaWNoIHRhcmdldCBhcHBsaWVzLCBhbmQgdGhlIHR3byBvd25lcnNoaXBcbiAgLy8gYWN0aW9ucyBkZWNpZGUgV0hPIGlzIGFjY291bnRhYmxlIGZvciBtZWV0aW5nIGl0LiBBIHNpbGVudCBjaGFuZ2Ugb2Ygb3duZXJcbiAgLy8gaXMgaG93IGFjY291bnRhYmlsaXR5IGZvciBhIG1pc3NlZCB0YXJnZXQgZGlzYXBwZWFycy5cbiAgJ3N1cHBvcnQuY2FzZS5zdGF0dXMnLFxuICAnc3VwcG9ydC5jYXNlLnNldmVyaXR5JyxcbiAgJ3N1cHBvcnQuY2FzZS5hc3NpZ24nLFxuICAnc3VwcG9ydC5jYXNlLnRyYW5zZmVyJyxcbiAgLy8gT04tQ0FMTC4gVGhlIHByb3ZpZGVyIG93bnMgdGhlIHJvdGEsIHRoZSBlc2NhbGF0aW9uIGFuZCB0aGUgY29udGFjdFxuICAvLyBtZXRob2RzOyB3aGF0IGl0IGNhbm5vdCBvd24gaXMgYW4gYXVkaXRhYmxlIGFuc3dlciB0byBcIndobyBwaWNrZWQgdGhpcyB1cFxuICAvLyBhdCAwMzoxNFwiLiBBIGNsaWNrIG9uIGEgbGluayBpbiB0aGVpciBVSSBpcyBub3QgYW4gaWRlbnRpdHkgdGhpcyBzeXN0ZW0gY2FuXG4gIC8vIGF0dGVzdCB0bywgc28gdGhlaXIgaW5jaWRlbnQgc3RhdGUgY2hhbmdlIGlzIHJlbGF5ZWQgaGVyZSBhbmQgcmVjb3JkZWRcbiAgLy8gYWdhaW5zdCB0aGUgYWdlbnQgdGhleSBuYW1lLiBUaGUgaGFzaCBjaGFpbiBpcyB0aGUgcG9pbnQ6IGEgcG9zdC1pbmNpZGVudFxuICAvLyByZXZpZXcgbmVlZHMgdGhlIGFjayB0byBiZSBldmlkZW5jZSByYXRoZXIgdGhhbiBhIHNjcmVlbnNob3QuXG4gIC8vXG4gIC8vIGBlc2NhbGF0ZWRgIGlzIGF1ZGl0ZWQgc2VwYXJhdGVseSBiZWNhdXNlIGl0IGlzIHRoZSByZWNvcmQgdGhhdCB0aGUgRklSU1RcbiAgLy8gcmVzcG9uZGVyIGRpZCBub3QgYW5zd2VyIOKAlCB0aGUgZmFjdCBhIHJvdGEgaXMgYWRqdXN0ZWQgb24sIGFuZCB0aGUgb25lIG1vc3RcbiAgLy8gbGlrZWx5IHRvIGJlIGRpc3B1dGVkIGxhdGVyLlxuICAnc3VwcG9ydC5vbmNhbGwuYWNrbm93bGVkZ2VkJyxcbiAgJ3N1cHBvcnQub25jYWxsLmVzY2FsYXRlZCcsXG4gIC8vIFRoZSB0ZXN0IHBhZ2UuIEF1ZGl0ZWQgYmVjYXVzZSBpdCBSSU5HUyBBIFBIT05FOiB3aG9ldmVyIGl0IHdha2VzIGlzXG4gIC8vIGVudGl0bGVkIHRvIGEgcmVjb3JkIG9mIHdobyBjYXVzZWQgdGhhdCwgYXQgd2hhdGV2ZXIgaG91ciBpdCB3YXMuXG4gICdzdXBwb3J0Lm9uY2FsbC50ZXN0JyxcbiAgLy8gVGhlIHBlci1jYXNlIHN3ZWVwIHBhZ2luZyB0aGUgcm90YSBmb3IgYSBwcmVtaXVtIGNhc2UgbmVhcmluZyBpdHMgdGFyZ2V0LlxuICAvLyBSZWNvcmRlZCBvbmNlLCBvbiB0aGUgdGljayB0aGUgY2FzZSBFTlRFUkVEIHRoZSB3aW5kb3cg4oCUIHRoZSBzd2VlcCByZS1zZW5kc1xuICAvLyB0aGUgcGFnZSBldmVyeSB0aWNrLCBhbmQgdHdlbnR5LWZvdXIgcm93cyBmb3Igb25lIHBhZ2Ugd291bGQgYmUgbm9pc2UuXG4gICdzdXBwb3J0Lm9uY2FsbC5wYWdlZCcsXG4gIC8vIFRoZSB0d28gQ09OVEFDVCBhY3Rpb25zIChwbGF0Zm9ybSkuIE5vdCBjYXNlIGV2ZW50cyDigJQgZW50aXRsZW1lbnQgZXZlbnRzOlxuICAvLyBlYWNoIG9uZSBjaGFuZ2VzIHdobyBpbiBhbiBvcmcgaXMgYWJsZSB0byBjb21taXQgdXMgdG8gYSByZXNwb25zZSB0YXJnZXQgYXRcbiAgLy8gYWxsLCBhbmQgZGVzaWduYXRpbmcgc3BlbmRzIGEgc2xvdCBvZiBhIFBBSUQsIGFjY291bnQtcG9vbGVkIGFsbG93YW5jZS4gVGhlXG4gIC8vIHJldm9rZSBjYXJyaWVzIHRoZSBjb3VudCBvZiBvcGVuIGNhc2VzIGl0IGxlZnQgYmVoaW5kLCBzbyBhbiBvcnBoYW5lZCBjYXNlXG4gIC8vIGlzIGEgcmVjb3JkZWQgZmFjdCByYXRoZXIgdGhhbiBzb21ldGhpbmcgZGlzY292ZXJlZCBsYXRlci5cbiAgJ3N1cHBvcnQuY29udGFjdC5kZXNpZ25hdGUnLFxuICAnc3VwcG9ydC5jb250YWN0LnJldm9rZScsXG4gIC8vIFRoZSBwcmVtaXVtIFVQR1JBREUsIGJvdGggZGlyZWN0aW9ucy4gU2VwYXJhdGUgYWN0aW9ucyBmcm9tIGRlc2lnbmF0aW9uXG4gIC8vIGJlY2F1c2UgdGhleSBhbnN3ZXIgdG8gYSBkaWZmZXJlbnQgY2FwIGFuZCBjYXJyeSBhIGRpZmZlcmVudCBmYWN0OiB3aG8gd2FzXG4gIC8vIGVudGl0bGVkIHRvIDI0eDcgY292ZXJhZ2UsIGFuZCB3aGVuLiBBIHJlc3BvbnNlLXRpbWUgZGlzcHV0ZSBvdmVyIGFuXG4gIC8vIG91dC1vZi1ob3VycyBjYXNlIHR1cm5zIG9uIGV4YWN0bHkgdGhhdC5cbiAgJ3N1cHBvcnQuY29udGFjdC51cGdyYWRlJyxcbiAgJ3N1cHBvcnQuY29udGFjdC5kb3duZ3JhZGUnLFxuICAvLyBTdGFmZiBub3RlcyBvbiBhIGNhc2UuIEF1ZGl0ZWQgYmVjYXVzZSBhIG5vdGUgaXMgdGhlIHZlbmRvcidzIGludGVybmFsXG4gIC8vIGFzc2Vzc21lbnQgb2YgYSBjdXN0b21lciBhbmQgdGhlIG9ubHkgc3VyZmFjZSBvbiBhIGNhc2UgdGhlIHRlbmFudCBtdXN0XG4gIC8vIG5ldmVyIHNlZTsgdGhlIHRyYWlsIGNhcnJpZXMgTUVUQURBVEEgT05MWSAoY2FzZSBudW1iZXIsIG5vdGUgaWQsIGxlbmd0aClcbiAgLy8gYW5kIG5ldmVyIHRoZSBib2R5LCBzaW5jZSB0aGUgY2VudHJhbCB0cmFpbCBpcyByZWFkIGZhciBtb3JlIHdpZGVseSB0aGFuXG4gIC8vIHRoZSBzdXBwb3J0IHF1ZXVlIGlzLlxuICAnc3VwcG9ydC5jYXNlLm5vdGUnLFxuICAvLyBUaGUgY2FubmVkLXJlcGx5IGxpYnJhcnkuIE9ORSBhY3Rpb24gZm9yIGNyZWF0ZS9lZGl0L3JldGlyZSByYXRoZXIgdGhhblxuICAvLyB0aHJlZSwgYmVjYXVzZSB0aGUgdHJhaWwncyBxdWVzdGlvbiBoZXJlIGlzIFwid2hvIGNoYW5nZWQgdGhlIHdvcmRpbmcgdGhlXG4gIC8vIGRlc2sgc2VuZHMgY3VzdG9tZXJzXCIsIG5vdCB3aGljaCB2ZXJiIHRoZXkgdXNlZCDigJQgYGRldGFpbHNgIGNhcnJpZXMgdGhhdC5cbiAgLy8gU3lzdGVtLXdpZGUgcmF0aGVyIHRoYW4gcGVyLXRlbmFudCwgc28gdGhlc2Ugcm93cyBuYW1lIG5vIGFmZmVjdGVkIG9yZy5cbiAgJ3N1cHBvcnQuY2FubmVkLndyaXRlJyxcbiAgLy8gQmlsbGluZyAoYXBpL2JpbGxpbmcpIOKAlCBzdWJzY3JpcHRpb24gKyBlbnRpdGxlbWVudCBtdXRhdGlvbnMsIG1pcnJvcmVkIHRvIHRoZVxuICAvLyBjZW50cmFsIGF1ZGl0IHRyYWlsICh0aGVzZSBhbHNvIHdyaXRlIHRvIHRoZSBzZXJ2aWNlLWxvY2FsIGJpbGxpbmdfZXZlbnRzXG4gIC8vIGNvbGxlY3Rpb24pLiBgZGV0YWlsc2AgY2FycnkgcGxhbi90aWVyL2FkZG9uIGlkcyBvbmx5IOKAlCBuZXZlciBjYXJkL3BheW1lbnRcbiAgLy8gc2VjcmV0cyBvciBhbiBBV1MgYWNjb3VudCBpZC5cbiAgLy8gU3Vic2NyaXB0aW9uIGxpZmVjeWNsZSBhIENVU1RPTUVSIGRyaXZlcyAodGhlIGFkbWluIGNvdW50ZXJwYXJ0IGlzXG4gIC8vIGBiaWxsaW5nLnRpZXIub3ZlcnJpZGVgKTogc2VsZi1zZXJ2ZSBjcmVhdGUgKGRpcmVjdCBvciBNYXJrZXRwbGFjZSBjbGFpbSksXG4gIC8vIHBsYW4vaW50ZXJ2YWwgY2hhbmdlLCBjYW5jZWwtYXQtcGVyaW9kLWVuZCwgdW5kby1jYW5jZWwsIGNhc2NhZGUgZGVsZXRlLlxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLnVwZGF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5yZWFjdGl2YXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNhbmNlbCcsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5kZWxldGUnLFxuICAnYmlsbGluZy50aWVyLm92ZXJyaWRlJyxcbiAgLy8gQSBORUdPVElBVEVEIHN1cHBvcnQgc2l6ZSBmbG9vciByZXBsYWNpbmcgdGhlIGNvbXB1dGVkIHJhbXAuIFN5c3RlbS1vcmdcbiAgLy8gb25seSwgYW5kIGF1ZGl0ZWQgd2l0aCB0aGUgYWdyZWVkIFBSSUNFIGFuZCB0aGUgYWdyZWVkIFNFQVQgQ09VTlQgdG9nZXRoZXI6XG4gIC8vIGEgZGlzcHV0ZSBhYm91dCB3aGF0IHdhcyBzaWduZWQgZm9yIHR1cm5zIG9uIHRoYXQgcGFpciwgYW5kIHRoZSBwcmljZSBhbG9uZVxuICAvLyBjYW5ub3QgYW5zd2VyIFwiYXQgd2hhdCBzY2FsZVwiLlxuICAnYmlsbGluZy5zdXBwb3J0LWZsb29yLm92ZXJyaWRlJyxcbiAgLy8gQSBHUkFOVEVEIG9uZS10aW1lIHN1cHBvcnQgaW5jaWRlbnQg4oCUIGEgY29tbWVyY2lhbCBjb25jZXNzaW9uLCBub3QgYSBzYWxlLlxuICAvLyBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gcHVyY2hhc2UgcGF0aDogbW9udGhseSBzdXBwb3J0IGNhbmNlbHMgZnJlZWx5LCBzb1xuICAvLyBhbiBpbmNpZGVudCBwcmljZWQgYWJvdmUgYSBtb250aCBpcyBkb21pbmF0ZWQgYW5kIG9uZSBiZWxvdyBpdCBsb3NlcyBtb25leS5cbiAgLy8gVGhlIHJvdyBjYXJyaWVzIHRoZSBjb3VudCBhbmQgdGhlIHJlc3VsdGluZyBiYWxhbmNlLCB3aGljaCBpcyB3aGF0IGEgbGF0ZXJcbiAgLy8gcmV2aWV3IG9mIFwid2hvIGdhdmUgd2hhdCBhd2F5XCIgbmVlZHMuXG4gICdiaWxsaW5nLnN1cHBvcnQtaW5jaWRlbnQuZ3JhbnQnLFxuICAvLyBPcGVyYXRvci1vbmx5IHJlc2VlZCBvZiB0aGUgaW52b2ljZSBsZWRnZXIgZnJvbSB0aGUgcGF5bWVudCBwcm92aWRlcidzXG4gIC8vIGhpc3RvcnkgKFBPU1QgL2JpbGxpbmcvYWRtaW4vYmFja2ZpbGwpIOKAlCBtdXRhdGVzIGZpbmFuY2UgZGF0YSBmbGVldC13aWRlLlxuICAnYmlsbGluZy5hZGRvbi5hZGQnLFxuICAnYmlsbGluZy5hZGRvbi5yZW1vdmUnLFxuICAvLyBTeXN0ZW0taW5pdGlhdGVkIHJlbW92YWwgb2YgYSB0aWVyLWluY2x1ZGVkIGFkZC1vbiBvbiBhIHBsYW4gdXBncmFkZSAodGhlXG4gIC8vIGFjY291bnQncyBuZXcgdGllciBub3cgYnVuZGxlcyB0aGUgZmVhdHVyZSkg4oCUIGRpc3RpbmN0IGZyb20gYSB1c2VyLWluaXRpYXRlZFxuICAvLyBgcmVtb3ZlYCBzbyBmaW5hbmNlIGNhbiB0ZWxsIGFuIGF1dG8tcHJ1bmUgZnJvbSBhIGN1c3RvbWVyIGFjdGlvbi5cbiAgJ2JpbGxpbmcuYWRkb24ucHJ1bmUnLFxuICAvLyBEaXNjb3VudHMgKGRvY3MvYmlsbGluZy1kaXNjb3VudHMubWQpIOKAlCBtaW50L2lzc3VlL2FwcGx5L3JlbW92ZS9yZXZva2Ugb2YgYVxuICAvLyBwcmljZSBjb3Vwb24gb3IgdXNhZ2UgY3JlZGl0LiBgZGV0YWlsc2AgY2FycnkgdGhlIGRpc2NvdW50IGlkICsga2luZC92YWx1ZVxuICAvLyBvbmx5LCBuZXZlciB0aGUgb3BhcXVlIHRva2VuIG9yIHNpZ25pbmcga2V5LlxuICAnYmlsbGluZy5kaXNjb3VudC5nZW5lcmF0ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50Lmlzc3VlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQuYXBwbHknLFxuICAnYmlsbGluZy5kaXNjb3VudC5yZW1vdmUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5yZXZva2UnLFxuICAvLyBDYW1wYWlnbnMgKGRvY3MvYmlsbGluZy1kaXNjb3VudHMubWQpIOKAlCB0aGUgaWRlbnRpdHkgYSBzZXQgb2YgZGlzY291bnQgY29kZXNcbiAgLy8gYmVsb25ncyB0bywgY2FycnlpbmcgdGhlIGJ1ZGdldCwgd2luZG93IGFuZCBvbmUtcGVyLWFjY291bnQgcnVsZS4gQXV0aG9yaW5nXG4gIC8vIG9uZSBkZWNpZGVzIGhvdyBtdWNoIHRoZSBidXNpbmVzcyBtYXkgZ2l2ZSBhd2F5LCBzbyBlYWNoIGNoYW5nZSBpcyBhdWRpdGVkLlxuICAnYmlsbGluZy5jYW1wYWlnbi5jcmVhdGUnLFxuICAnYmlsbGluZy5jYW1wYWlnbi51cGRhdGUnLFxuICAnYmlsbGluZy5jYW1wYWlnbi5lbmQnLFxuICAvLyBQcm9tb3Rpb25zIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kI3Byb21vdGlvbnMpIOKAlCBydWxlLWRyaXZlbiBhdXRvLWdyYW50XG4gIC8vIGNhbXBhaWducy4gYGRldGFpbHNgIGNhcnJ5IHRoZSBwcm9tb3Rpb24gaWQgKyBjZW50cy9ldmVudCBvbmx5LlxuICAnYmlsbGluZy5wcm9tb3Rpb24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLnVwZGF0ZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi5yZXZva2UnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24uZ3JhbnQnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24uYWN0aXZhdGUnLFxuICAvLyBFeHBhbnNpb24gT0ZGRVJTIChkb2NzL3BsYW5zL3NhbGVzLWFnZW50Lm1kKS4gQW4gYXV0b21hdGVkIGdyYW50ZXIgbmVlZHMgaXRzXG4gIC8vIG93biB0cmFpbDogYGRlY2xpbmVkYCBhbmQgYGRpc21pc3NlZGAgYXJlIHRoZSBhY2NvdW50J3Mgb3duIGFuc3dlcnMgKGFuZCB0aGVcbiAgLy8gcGFpciBENidzIGxlbmd0aGVuZWQgcXVpZXQgd2luZG93IGRlcGVuZHMgb24g4oCUIFwibmV2ZXIgc2F3IGl0XCIgYW5kIFwic2FpZCBub1wiXG4gIC8vIG11c3Qgbm90IGJlIHRoZSBzYW1lIHJvdyk7IGBleGNsdXNpb24uc2V0YC9gY2xlYXJlZGAgYXJlIHRoZSBvcGVyYXRvciB2ZXRvLFxuICAvLyB3aGljaCBpcyB0aGUgcHJpY2Ugb2Ygc2hpcHBpbmcgdGhlIGZlYXR1cmUgYXQgYWxsIGFuZCB0aGVyZWZvcmUgaGFzIHRvIGJlXG4gIC8vIGF0dHJpYnV0YWJsZTsgYHRyaWdnZXJgIGlzIGEgaHVtYW4gYXNraW5nIGZvciBhbiBvZmZlciBub3csIHJlY29yZGVkIHNvIGFcbiAgLy8gbWFudWFsIG9mZmVyIGlzIGRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFuIGFnZW50IG9uZSBpbiB0aGUgb3V0Y29tZSBsb2cuXG4gIC8vIFRoZSBhZ2VudCdzIE9XTiB3b3JrLCB1bmRlciBpdHMgb3duIGFjdG9yIChEMTQg4oCUIGBPRkZFUlNfQUdFTlRfQUNUT1JfSURgKS5cbiAgLy8gYHNlbnRgIGlzIHdoYXQgbWFrZXMgXCJ3aHkgZGlkIHRoaXMgYWNjb3VudCBnZXQgdGhpcz9cIiBhbnN3ZXJhYmxlIGZyb20gdGhlXG4gIC8vIGNlbnRyYWwgdHJhaWwgcmF0aGVyIHRoYW4gb25seSBmcm9tIHRoZSBzZXJ2aWNlJ3Mgb3duIGNvbGxlY3Rpb24sIGFuZFxuICAvLyBgd2l0aGRyYXduYCBpcyB0aGUgcmVjYWxsIGFuIG9wZXJhdG9yIHJlYWNoZXMgZm9yIG9uIHRoZSBtb3JuaW5nIGEgcnVsZVxuICAvLyB0dXJucyBvdXQgdG8gYmUgd3Jvbmcg4oCUIGJvdGggY2FycnkgdGhlIHJhdGlvbmFsZSBvciB0aGUgd2luZG93LCBuZXZlciBjb3B5LlxuICAnYmlsbGluZy5vZmZlci5zZW50JyxcbiAgJ2JpbGxpbmcub2ZmZXIud2l0aGRyYXduJyxcbiAgJ2JpbGxpbmcub2ZmZXIuZGVjbGluZWQnLFxuICAnYmlsbGluZy5vZmZlci5kaXNtaXNzZWQnLFxuICAnYmlsbGluZy5vZmZlci5leGNsdXNpb24uc2V0JyxcbiAgJ2JpbGxpbmcub2ZmZXIuZXhjbHVzaW9uLmNsZWFyZWQnLFxuICAnYmlsbGluZy5vZmZlci50cmlnZ2VyJyxcbiAgLy8gVXNhZ2UtY3JlZGl0IHJlYWxpemF0aW9uIOKAlCBhIGN1c3RvbWVyL2NvbXBsaWFuY2UtdmlzaWJsZSByZWNvcmQgb2YgY3JlZGl0XG4gIC8vIG1vdmVtZW50OiBgY29uc3VtZWRgIChNYXJrZXRwbGFjZSBtZXRlcmVkIGRyYXdkb3duKSwgYGV4aGF1c3RlZGAgKGJhbGFuY2UgaGl0XG4gIC8vIHplcm8pLCBhbmQgYSBjb21ibyBlbmRpbmcuIGBkZXRhaWxzYCBjYXJyeSBjZW50cy9pZHMgb25seSwgbm8gcGF5bWVudCBzZWNyZXRzLlxuICAnYmlsbGluZy5jcmVkaXQuY29uc3VtZWQnLFxuICAnYmlsbGluZy5jcmVkaXQuZXhoYXVzdGVkJyxcbiAgJ2JpbGxpbmcuY29tYm8uZXhwaXJlZCcsXG4gIC8vIFJlcG9ydGluZyAoYXBpL3JlcG9ydGluZykg4oCUIHRoZSB0aHJlZSByZXBvcnRpbmcgbXV0YXRpb25zIHdob3NlIGVmZmVjdFxuICAvLyBvdXRsaXZlcyBhIHJlcXVlc3QgbG9nOiB0aGUgcGVyLW9yZyBjb3JyZWxhdGlvbi13aW5kb3cgY29uZmlnIHdyaXRlLCBhXG4gIC8vIHBvc3QtZGVwbG95IG91dGNvbWUgbWFya2VyIChpdCBtb3ZlcyB0aGUgb3JnJ3MgRE9SQSBDRlIvTVRUUiksIGFuZCB0aGVcbiAgLy8gaW5ib3VuZCBiaWxsaW5n4oaScmVwb3J0aW5nIHJldGVudGlvbi1lbnRpdGxlbWVudCBzeW5jIChhIHJldGVudGlvbiBjdXQgaXMgYVxuICAvLyBkYXRhLWRlc3Ryb3lpbmcgY2hhbmdlIGFwcGxpZWQgYnkgdGhlIG5leHQgc3dlZXApLiBgZGV0YWlsc2AgY2FycnkgdGhlXG4gIC8vIHNldHRpbmdzL291dGNvbWUgdmFsdWVzIG9ubHkuXG4gICdyZXBvcnRpbmcuc2V0dGluZ3MudXBkYXRlJyxcbiAgJ3JlcG9ydGluZy5kZXBsb3ltZW50Lm91dGNvbWUnLFxuICAncmVwb3J0aW5nLnJldGVudGlvbi5zeW5jJyxcbiAgLy8gU3Rha2Vob2xkZXIgcmVwb3J0cyDigJQgdGhlIGFkZC1vbidzIGF1dGhvcmluZyBhbmQgUFVCTElTSElORyBzdXJmYWNlLiBQdWJsaXNoaW5nXG4gIC8vIGlzIHRoZSBtb21lbnQgaW50ZXJuYWwgZGVsaXZlcnkgbnVtYmVycyBsZWF2ZSB0aGUgcGxhdGZvcm0sIHNvIHRoZSB3aG9sZVxuICAvLyBvdXR3YXJkIHBhdGggaXMgYXVkaXRhYmxlOiB3aGljaCByZXBvcnQsIHdoaWNoIHBlcmlvZCdzIGZyb3plbiBzbmFwc2hvdCxcbiAgLy8gd2hpY2ggdmVyc2lvbiwgYW5kIHdobyBsZXQgaXQgb3V0LiBgbGluay5jcmVhdGVkYCAvIGBsaW5rLnJldm9rZWRgIGNvdmVyIHRoZVxuICAvLyBVUkxzIHRoYXQgbGV0IHNvbWVvbmUgd2l0aG91dCBhbiBhY2NvdW50IHJlYWQgaXQ7IGByZWNpcGllbnQuYWRkZWRgIC9cbiAgLy8gYHJlY2lwaWVudC5yZW1vdmVkYCBjb3ZlciB3aG8gaXMgb24gdGhlIGRpc3RyaWJ1dGlvbiBsaXN0LCB3aGljaCBpcyB0aGUgb3RoZXJcbiAgLy8gd2F5IGRhdGEgcmVhY2hlcyBhIHBlcnNvbi4gYG93bmVyc2hpcC50cmFuc2ZlcmAgaXMgYSBwcml2aWxlZ2UgbW92ZTogYVxuICAvLyBzY2hlZHVsZWQgcnVuIGlzIGF1dGhvcml6ZWQgYXMgaXRzIE9XTkVSLCBzbyBoYW5kaW5nIGEgZGVmaW5pdGlvbiBvdmVyIGhhbmRzXG4gIC8vIG92ZXIgd2hvc2UgYWNjZXNzIHRoZSBudW1iZXJzIGFyZSBjb21wdXRlZCB3aXRoLlxuICAvL1xuICAvLyBEZWxpYmVyYXRlbHkgTk9UIGF1ZGl0ZWQ6IHJlYWRpbmcgYSBzaGFyZWQgcmVwb3J0LiBUaGUgYWNjZXNzIGlzIGxvZ2dlZCBhbmRcbiAgLy8gY291bnRlZCBwZXIgbGluaywgYnV0IGl0IGlzIGFuIFVOQVVUSEVOVElDQVRFRCwgZXh0ZXJuYWxseS10cmlnZ2VyZWQgZXZlbnQg4oCUXG4gIC8vIGFueW9uZSBob2xkaW5nIGEgVVJMIGNvdWxkIG90aGVyd2lzZSB3cml0ZSB1bmJvdW5kZWQgcm93cyBpbnRvIHRoZSBvcmcncyBhdWRpdFxuICAvLyB0cmFpbCwgd2hpY2ggdHVybnMgYSByZWFkIGludG8gYSB3YXkgdG8gYnVyeSB0aGUgZW50cmllcyB0aGF0IG1hdHRlci5cbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi5jcmVhdGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLnVwZGF0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24uZGVsZXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQub3duZXJzaGlwLnRyYW5zZmVyJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucHVibGlzaGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVwdWJsaXNoZWQnLFxuICAvLyBBIHB1Ymxpc2hlZCBydW4gcmUtc2VudCB0byB0aGUgcmVjaXBpZW50cy9kZXN0aW5hdGlvbnMgaXRzIGZpcnN0IGRlbGl2ZXJ5XG4gIC8vIG1pc3NlZCAocmVsYXkgb3V0YWdlLCBkZWFkIHBvZCkg4oCUIE5PVCBhIGNvcnJlY3Rpb246IHRoZSBudW1iZXJzIGFyZSB1bmNoYW5nZWQuXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlZGVsaXZlcmVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5jcmVhdGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5yZXZva2VkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LmFkZGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnJlbW92ZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5wb2xpY3kudXBkYXRlJyxcbiAgLy8gQSBkZWZpbml0aW9uIFNUT1BQRUQgcHJvZHVjaW5nIHJlcG9ydHMgd2l0aG91dCBhbnlvbmUgYXNraW5nIGl0IHRvOiB0aGUgb3duZXJcbiAgLy8gd2FzIGRlYWN0aXZhdGVkIG9yIHJlbW92ZWQsIG9yIGxvc3QgdGhlIHBlcm1pc3Npb24gYSBydW4gaXMgYXV0aG9yaXplZCB3aXRoLlxuICAvLyBSZWNvcmRlZCBiZWNhdXNlIHRoZSBlZmZlY3QgaXMgc2lsZW50IOKAlCBhIG1hbmFnZXIgZmluZHMgb3V0IGJ5IG5vdCByZWNlaXZpbmdcbiAgLy8gdGhlIHJlcG9ydCDigJQgc28gdGhlIHRyYWlsIGhhcyB0byBzYXkgd2hpY2ggcmVwb3J0cyBzdG9wcGVkIGFuZCB3aHkuXG4gICdyZXBvcnRpbmcucmVwb3J0LnBhdXNlZCcsXG4gIC8vIOKApmFuZCBzdGFydGVkIGFnYWluLiBJdHMgb3duIGFjdGlvbiByYXRoZXIgdGhhbiBhIGRldGFpbCBvbiB0aGUgcGF1c2UsIGJlY2F1c2UgdGhlXG4gIC8vIHF1ZXN0aW9uIGEgcmV2aWV3ZXIgYXNrcyBpcyBcIndhcyB0aGlzIGFjY291bnQncyByZXBvcnRpbmcgb2ZmIGJldHdlZW4gdGhlc2UgdHdvXG4gIC8vIGRhdGVzXCIsIGFuZCBhbnN3ZXJpbmcgaXQgZnJvbSBhIHNpbmdsZSBhY3Rpb24ncyBkZXRhaWxzIG1lYW5zIHJlYWRpbmcgZXZlcnkgcm93LlxuICAncmVwb3J0aW5nLnJlcG9ydC5yZXN1bWVkJyxcbiAgLy8gVGhlIGRyYWZ0aW5nIGhhbGYgb2YgYSBydW46IGEgY29tcG9zZS9yZWdlbmVyYXRlIGZyZWV6ZXMgdGhlIG9yZydzIG51bWJlcnNcbiAgLy8gaW50byBhIHJ1biwgdGhlIGxlYWQncyBub3RlcyBhcmUgZWRpdGVkIG9udG8gaXQgKG1ldGFkYXRhIG9ubHkg4oCUIGxlbmd0aCxcbiAgLy8gbmV2ZXIgdGhlIHByb3NlKSwgYW5kIGFuIEFJIHN1bW1hcnkgaXMgZHJhZnRlZCBmcm9tIGl0ICh0aGUgbnVtYmVycyB3ZW50IHRvXG4gIC8vIGEgcHJvdmlkZXI7IGBvdXRjb21lYCBjYXJyaWVzIGEgcmVmdXNhbCkuIEEgcmVzZW5kIHJlLW1pbnRzIGEgcmVjaXBpZW50J3NcbiAgLy8gY29uZmlybWF0aW9uIGNyZWRlbnRpYWwuIGB2ZXJpZmllZGAgLyBgdW5zdWJzY3JpYmVkYCBhcmUgdGhlIFVOQVVUSEVOVElDQVRFRFxuICAvLyByZWNpcGllbnQncyBvd24gYWN0cyAoYWN0b3IgYGFub255bW91c2AsIGEgaGFzaGVkIGFkZHJlc3Mgb25seSk6IGJvdW5kZWQgYnlcbiAgLy8gY29uc3RydWN0aW9uIOKAlCB0aGUgdmVyaWZ5IHRva2VuIGlzIHNpbmdsZS11c2UsIGFuZCBvbmx5IHRoZSBjbGljayB0aGF0XG4gIC8vIGFjdHVhbGx5IHN0b3BzIGRlbGl2ZXJ5IHdyaXRlcyBhbiB1bnN1YnNjcmliZSByb3cuXG4gICdyZXBvcnRpbmcucmVwb3J0LnJ1bi5jb21wb3NlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucnVuLm5vdGVzJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucnVuLnN1bW1hcnknLFxuICAncmVwb3J0aW5nLnJlcG9ydC5yZWNpcGllbnQucmVzZW5kJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnZlcmlmaWVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnVuc3Vic2NyaWJlZCcsXG4gIC8vIE1BQ0hJTkUgaW5nZXN0IChgcmVwb3J0aW5nOmluZ2VzdGAgc2NvcGUpLiBPbmUgYGJhdGNoYCByb3cgcGVyIFBPU1QgdG8gdGhlXG4gIC8vIGV2ZW50IC8gaW5jaWRlbnQgLyBpbmdlc3QtaGVhbHRoIHJvdXRlcyDigJQgY291bnRzIHBsdXMgY2FwcGVkIHBpcGVsaW5lLFxuICAvLyBleGVjdXRpb24sIEV2ZW50QnJpZGdlLWV2ZW50IGFuZCBpbmNpZGVudCBpZCBsaXN0cywgYXR0cmlidXRlZCB0byB0aGVcbiAgLy8gY3JlZGVudGlhbCdzIHByaW5jaXBhbCDigJQgc28gYSBmb3JnZWQgb3IgbWlzcm91dGVkIHdyaXRlIG5hbWVzIHRoZSBrZXkgYmVoaW5kXG4gIC8vIGl0LiBgcmVqZWN0ZWRgIGlzIHRoZSB0ZW5hbmN5IHJlZnVzYWwgaW5zaWRlIGEgYmF0Y2ggKGV2ZW50cyBuYW1pbmcgYW5vdGhlclxuICAvLyBvcmcncyBwaXBlbGluZXMpOiBhIEZBSUxVUkUgcm93IHdpdGggdGhlIG9mZmVuZGluZyBwaXBlbGluZSBpZHMsIG5ldmVyIHRoZVxuICAvLyBvcmcgdGhleSBiZWxvbmcgdG8uIGBpbmNpZGVudC5yZWNvcmRgIGlzIG9uZSBpbmNpZGVudCB0aGF0IGlzIG5ldyBvciBhY3R1YWxseVxuICAvLyBjaGFuZ2VkIChiZWZvcmUvYWZ0ZXIpOyBsaWtlIGBkZXBsb3ltZW50Lm91dGNvbWVgIGl0IG1vdmVzIENGUi9NVFRSLiBBblxuICAvLyB1bmNoYW5nZWQgcmVwZWF0LWludGVydmFsIHJlLXBvc3Qgd3JpdGVzIG5vbmUuXG4gICdyZXBvcnRpbmcuaW5nZXN0LmJhdGNoJyxcbiAgJ3JlcG9ydGluZy5pbmdlc3QucmVqZWN0ZWQnLFxuICAncmVwb3J0aW5nLmluY2lkZW50LnJlY29yZCcsXG4gIC8vIERlbmllZCBhdXRob3JpemF0aW9uIGF0dGVtcHQg4oCUIGVtaXR0ZWQgYmVzdC1lZmZvcnQgYnkgdGhlIHNoYXJlZFxuICAvLyBgcmVxdWlyZVBlcm1pc3Npb25gIC8gYHJlcXVpcmVTeXN0ZW1BZG1pbmAgZ2F0ZSB3aGVuIGEgc3RhdGUtY2hhbmdpbmdcbiAgLy8gKG5vbi1HRVQpIHJlcXVlc3QgaXMgcmVqZWN0ZWQsIHNvIHByb2JpbmcvZXNjYWxhdGlvbiBhdHRlbXB0cyBhcmUgdmlzaWJsZVxuICAvLyByYXRoZXIgdGhhbiBpbnZpc2libGUuIGBkZXRhaWxzYCBjYXJyaWVzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9uICsgcGF0aDtcbiAgLy8gYG91dGNvbWVgIGlzICdmYWlsdXJlJy5cbiAgJ2F1dGh6LmRlbmllZCcsXG4gIC8vIFwiQXNrXCIgYXNzaXN0YW50IGFjdGl2aXR5IOKAlCB2aXNpYmlsaXR5IGludG8gd2hhdCB0aGUgYXNzaXN0YW50IGRpZCBvbiBhIHVzZXInc1xuICAvLyBiZWhhbGYuIGBhc2sucXVlcnlgIGlzIGEgcmVhZC1vbmx5IGhvdy10byB0dXJuOyBgYXNrLmFnZW50LnR1cm5gIGlzIGEgdG9vbC1jYWxsaW5nXG4gIC8vIHR1cm4uIGBkZXRhaWxzYCBjYXJyeSBTQUZFIE1FVEFEQVRBIE9OTFkgKHRvb2xzIHVzZWQsIHByb3Bvc2FsIGtpbmRzLCBxdWVyeVxuICAvLyBsZW5ndGgsIG91dGNvbWUpLCBuZXZlciB0aGUgcmF3IHF1ZXJ5IHRleHQuXG4gICdhc2sucXVlcnknLFxuICAnYXNrLmFnZW50LnR1cm4nLFxuICAvLyBBIHJlYWRlciByYXRpbmcgYW4gYW5zd2VyLCBvciBhIGhlbHAgc2VhcmNoIHRoYXQgZm91bmQgbm90aGluZy4gVGhlIE9OTFlcbiAgLy8gc2lnbmFsIGZvciB3aGljaCBkb2NzIHRoZSBhc3Npc3RhbnQgYW5zd2VycyBiYWRseSBmcm9tIOKAlCB0aGUgdHVybiBpdHNlbGZcbiAgLy8gY2Fubm90IHRlbGwgYSBnb29kIGFuc3dlciBmcm9tIGEgY29uZmlkZW50IHdyb25nIG9uZS4gYGRldGFpbHNgIGNhcnJ5IHRoZVxuICAvLyByYXRpbmcgYW5kIHRoZSBET0MgSURTIGNpdGVkIChgYXV0aGVudGljYXRpb24ubWRgKSwgbmV2ZXIgdGhlIHF1ZXN0aW9uOiB0aGVcbiAgLy8gZG9jIGlzIHdoYXQgZ2V0cyBmaXhlZCwgYW5kIGl0IGlzIG5vdCB1c2VyLWVudGVyZWQgdGV4dC5cbiAgJ2Fzay5mZWVkYmFjaycsXG4gIC8vIE9uZSBBSSBnZW5lcmF0aW9uIG9mIGEgcGlwZWxpbmUgLyBwbHVnaW4gZHJhZnQgKGAvcGlwZWxpbmVzL2dlbmVyYXRlKmAsXG4gIC8vIGAvcGx1Z2lucy9nZW5lcmF0ZSpgKSwgc3VjY2VzcyBvciBmYWlsdXJlIChpbmNsLiBjbGllbnQgYWJvcnQpLiBgZGV0YWlsc2AgY2FycnlcbiAgLy8gU0FGRSBNRVRBREFUQSBPTkxZOiB0aGUgcm91dGUsIHRoZSBwcm9tcHQgTEVOR1RILCB0aGUgc2hhcmVkIEFJIHVzYWdlIGJsb2NrXG4gIC8vIChgYWlgOiB0aGUgcHJvdmlkZXIgYW5kIG1vZGVsIHRoYXQgQU5TV0VSRUQgYWZ0ZXIgYW55IGZhaWxvdmVyLCBgZmFsbGJhY2tGcm9tYCxcbiAgLy8gd2hvc2Uga2V5IHBhaWQg4oCUIGBrZXlTb3VyY2VgIHJlcXVlc3Qvb3JnL3BsYXRmb3JtIOKAlCB0b2tlbnMgaW4vb3V0L2NhY2hlZCwgdGhlXG4gIC8vIHByb21wdCB2ZXJzaW9uLCBob3cgdGhlIGBhaUNhbGxzYCBzbG90IHNldHRsZWQpIGFuZCB0aGUgcmVzZXJ2YXRpb24nc1xuICAvLyBgcXVvdGFgIHZpZXcg4oCUIG5ldmVyIHRoZSBwcm9tcHQsIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LCBvciBhIGtleS5cbiAgJ3BpcGVsaW5lLmFpLmdlbmVyYXRlJyxcbiAgJ3BsdWdpbi5haS5nZW5lcmF0ZScsXG4gIC8vIFBsdWdpbiBlY29zeXN0ZW0gKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpLiBHb3Zlcm5hbmNlIGFjdGlvbnNcbiAgLy8gYXJlIHJlY29yZGVkIHdpdGggYG9yZ0lkYCA9IHRoZSBzeXN0ZW0gb3JnOyBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlXG4gIC8vIHB1Ymxpc2hlcidzIG9yZyAobGlzdGluZy92ZXJzaW9uL3Jldmlldy9hZHZpc29yeS9wdWJsaXNoZXIgbW9kZXJhdGlvbikgb3JcbiAgLy8gdGhlIGluc3RhbGxpbmcgb3JnIChpbnN0YWxscyArIHBvbGljeSkuIEFub255bW91cyBzdWJtaXNzaW9ucyB1c2UgdGhlXG4gIC8vIGBBTk9OWU1PVVNfQUNUT1JfSURgIGFjdG9yIHdpdGggYGRldGFpbHMuc3VibWlzc2lvbklkYC4gYGRldGFpbHNgIGNhcnJ5IGlkcyxcbiAgLy8gdmVyc2lvbnMsIGRpZ2VzdHMsIHRpZXIsIHN0YXRlIGFuZCByZWFzb24gY29kZXMgb25seSDigJQgbmV2ZXIgcmV2aWV3IGJvZGllcyxcbiAgLy8gUkVBRE1FIGNvbnRlbnQsIHNlY3JldHMgb3IgZW1haWxzLlxuICAvLyBQdWJsaXNoZXJzLlxuICAncHVibGlzaGVyLmNyZWF0ZScsXG4gICdwdWJsaXNoZXIudXBkYXRlJyxcbiAgJ3B1Ymxpc2hlci50ZXJtcy5hY2NlcHQnLFxuICAncHVibGlzaGVyLnZlcmlmeS5yZXF1ZXN0JyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIudmVyaWZ5LnJlamVjdCcsXG4gICdwdWJsaXNoZXIudGllci5jaGFuZ2UnLFxuICAncHVibGlzaGVyLnN1c3BlbmQnLFxuICAncHVibGlzaGVyLnVuc3VzcGVuZCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIucmVxdWVzdCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuYWNjZXB0JyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5kZWNsaW5lJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5yZWplY3QnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLnJlamVjdCcsXG4gIC8vIFB1Ymxpc2ggcmVxdWVzdHMgKHRlbmFudCDihpIgc3lzdGVtIG9yZykuIGBkZXRhaWxzLmtpbmRgIG5hbWVzIHRoZSByZXF1ZXN0LlxuICAncGx1Z2luLnJlcXVlc3Quc3VibWl0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LndpdGhkcmF3JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3Quc2Vjb25kLWFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3QucmVqZWN0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmF1dG8tYXBwcm92ZScsXG4gIC8vIExpc3RpbmdzIGFuZCB2ZXJzaW9ucyAoc3lzdGVtIG9yZywgZXhjZXB0IHRoZSB0ZW5hbnQgcGF1c2UpLlxuICAncGx1Z2luLmxpc3RpbmcucHVibGlzaCcsXG4gIC8vIE5PVEU6IHRoZXJlIGlzIG5vIGBwbHVnaW4ubGlzdGluZy51bmxpc3RgLiBXaXRoZHJhd2FsIGlzIGFscmVhZHkgZXhwcmVzc2VkIGJ5XG4gIC8vIGBwbHVnaW4ubGlzdGluZy5zdGF0ZS5jaGFuZ2VgIChgdW5tYWludGFpbmVkYCAvIGBzdXNwZW5kZWRgIC8gYGxpc3RlZGApLFxuICAvLyB3aGljaCBpcyB0aGUgYWN0aW9uIHRoZSBjb2RlIGFjdHVhbGx5IGVtaXRzLCBzbyBgdW5saXN0YCB3YXMgYSBzZWNvbmQgbmFtZVxuICAvLyBmb3IgYSB0aGluZyB0aGF0IGhhcyBvbmUg4oCUIGFuZCBhIG5ldmVyLWVtaXR0ZWQgb25lIGF0IHRoYXQuXG4gICdwbHVnaW4ubGlzdGluZy51cGRhdGUnLFxuICAncGx1Z2luLmxpc3Rpbmcuc3RhdGUuY2hhbmdlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnBhdXNlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnVucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ueWFuaycsXG4gICdwbHVnaW4udmVyc2lvbi51bnlhbmsnLFxuICAvLyBQaXBlbGluZSB0b29sY2hhaW4gcmVsZWFzZXMgKGRvY3MvcGxhbnMvYm9vdHN0cmFwLWltYWdlLXZlcnNpb25pbmcubWQgwqcxMykuXG4gICd0b29sY2hhaW4uZGVmYXVsdC5zZXQnLFxuICAndG9vbGNoYWluLmRlZmF1bHQuaW5pdGlhbCcsXG4gICd0b29sY2hhaW4uZGVmYXVsdC5yZXN0b3JlJyxcbiAgJ3Rvb2xjaGFpbi5yb2xsb3V0LnVwZGF0ZScsXG4gICd0b29sY2hhaW4ucmVsZWFzZS5ub3RlcycsXG4gICd0b29sY2hhaW4ucmVsZWFzZS5kZXByZWNhdGUnLFxuICAndG9vbGNoYWluLnJlbGVhc2UueWFuaycsXG4gICd0b29sY2hhaW4ucmVsZWFzZS5kZWxldGUnLFxuICAndG9vbGNoYWluLnJlY292ZXJ5Lm5vdGlmeScsXG4gICd0b29sY2hhaW4ub3JnX2RlZmF1bHQuc2V0JyxcbiAgJ3Rvb2xjaGFpbi5vcmdfZGVmYXVsdC5jbGVhcicsXG4gICdwbHVnaW4udmVyc2lvbi5kZXByZWNhdGUnLFxuICAvLyBSZXRpcmluZyBhIHZlcnNpb24ncyByZWdpc3RyeSBpbWFnZSB0byByZWNsYWltIGBzdG9yYWdlQnl0ZXNgLiBEaXN0aW5jdFxuICAvLyBmcm9tIHRoZSBmb3VyIGFib3ZlLCB3aGljaCBjaGFuZ2Ugd2hldGhlciBhIHZlcnNpb24gUkVTT0xWRVMgYW5kIGRlbGV0ZVxuICAvLyBub3RoaW5nLCBhbmQgZnJvbSBgcmVnaXN0cnkuaW1hZ2UuZGVsZXRlYC9gcmVnaXN0cnkudGFnLmRlbGV0ZWAsIHdoaWNoIGFyZVxuICAvLyB0aGUgcmVnaXN0cnkncyBvd24gb3BlcmF0b3Itc2lkZSB0cmFpbC4gVGhpcyBpcyBhIHRlbmFudCBmcmVlaW5nIHNwYWNlLCBhbmRcbiAgLy8gdGhlIG9ubHkgYXVkaXRlZCBhY3Rpb24gdGhhdCBjYW4gcmVkdWNlIGFuIG9yZydzIHN0b3JhZ2UgZmlndXJlIOKAlCBzbyBpdHNcbiAgLy8gcm93IGNhcnJpZXMgdGhlIGJ5dGVzIGl0IGZyZWVkLCB3aGljaCBjYW5ub3QgYmUgcmVjb3ZlcmVkIGFmdGVyd2FyZHMuXG4gICdwbHVnaW4udmVyc2lvbi5wcnVuZScsXG4gIC8vIE5PVEU6IG5vIGBwbHVnaW4uY29sbGVjdGlvbi51cGRhdGVgLiBgZWNvc3lzdGVtX2NvbGxlY3Rpb25zYCB3YXMgZGVsZXRlZCAoc2VlXG4gIC8vIHRoZSB0b21ic3RvbmUgaW4gYHNjaGVtYS9lY29zeXN0ZW0udHNgKSBiZWNhdXNlIG5vdGhpbmcgZXZlciB3cm90ZSBvciByZWFkXG4gIC8vIG9uZTsgdGhpcyBkZWNsYXJhdGlvbiBvdXRsaXZlZCB0aGUgdGFibGUgaXQgYXVkaXRlZC5cbiAgLy8gRWNvc3lzdGVtIGNvbmZpZ3VyYXRpb24gKHN5c3RlbSBvcmcpLlxuICAnZWNvc3lzdGVtLmF1dG8tYXBwcm92YWwtcnVsZS5jcmVhdGUnLFxuICAnZWNvc3lzdGVtLmF1dG8tYXBwcm92YWwtcnVsZS51cGRhdGUnLFxuICAnZWNvc3lzdGVtLmF1dG8tYXBwcm92YWwtcnVsZS5kZWxldGUnLFxuICAnZWNvc3lzdGVtLnJlc2VydmVkLW5hbWUudXBkYXRlJyxcbiAgLy8gVGhlIG9uZS10aW1lIEJPT1RTVFJBUCBleGNlcHRpb24gKGF1dG8tYXBwcm92YWwgb2YgdGhlIGluaXRpYWwgT2ZmaWNpYWxcbiAgLy8gY2F0YWxvZykgb3BlbmluZyBvbiB0aGUgZmlyc3QgT2ZmaWNpYWwgcmVxdWVzdCwgYW5kIGNsb3NpbmcgZm9yIGdvb2RcbiAgLy8gKGBkZXRhaWxzLnJlYXNvbmA6IHdpbmRvd19lbGFwc2VkIC8gbGlzdGluZ3NfZXhpc3QgLyBhIG1hbmFnZXIgZGVjaXNpb247XG4gIC8vIGBkZXRhaWxzLmFwcHJvdmVkYDogaG93IG1hbnkgcmVxdWVzdHMgcm9kZSBpdCkuXG4gICdlY29zeXN0ZW0uYm9vdHN0cmFwLm9wZW4nLFxuICAnZWNvc3lzdGVtLmJvb3RzdHJhcC5jbG9zZScsXG4gIC8vIE5PVEU6IG5vIGBlY29zeXN0ZW0uc2xhLnVwZGF0ZWAuIFRoZSBsYW5lIFNMQXMgYXJlIEhBUkRDT0RFRCAoc3RhbmRhcmQgNDhoLFxuICAvLyBzZWN1cml0eS1maXggNGggaW4gYHNlcnZpY2VzL2Vjb3N5c3RlbS9zbGEudHNgKSB3aXRoIG5vIHNldHRpbmdzIHN1cmZhY2UsIHNvXG4gIC8vIHRoZXJlIGlzIG5vIG11dGF0aW9uIHRvIGF1ZGl0LiBNYWtpbmcgdGhlbSBvcGVyYXRvci10dW5hYmxlIGlzIHRoZSBjaGFuZ2VcbiAgLy8gdGhhdCBzaG91bGQgcmUtYWRkIHRoaXMuXG4gIC8vIFB1YmxpYyByZWdpc3RyeSBuYW1lc3BhY2UgKGBwdWJsaWMvKmApOiBjb3B5ICsgc2lnbiArIGF0dGVzdCBvbiBwdWJsaXNoLFxuICAvLyB0aGUgdGllci1jaGFuZ2Uvc3VzcGVuc2lvbiByZS1zaWduIGpvYiwgdGFnIHJlbW92YWwgb24geWFuay90YWtlZG93biwgYW5kXG4gIC8vIHRoZSByZXRlbnRpb24gc3dlZXAuXG4gICdyZWdpc3RyeS5pbWFnZS5wdWJsaXNoJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLnJlc2lnbicsXG4gICdyZWdpc3RyeS5pbWFnZS55YW5rJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLmdjJyxcbiAgLy8gSW5zdGFsbHMgYW5kIHRoZSBpbnN0YWxsaW5nIG9yZydzIGNvbnN1bXB0aW9uIHBvbGljeSAob3JnLWxvY2FsKS5cbiAgJ3BsdWdpbi5pbnN0YWxsLnJlcXVlc3QnLFxuICAncGx1Z2luLmluc3RhbGwuYXBwcm92ZScsXG4gICdwbHVnaW4uaW5zdGFsbC5kZW55JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmNyZWF0ZScsXG4gICdwbHVnaW4uaW5zdGFsbC51cGdyYWRlJyxcbiAgLy8gQSBtZW1iZXIncyByZXF1ZXN0IHRvIGNoYW5nZSBhbiBpbnN0YWxsIHBhc3Qgd2hhdCB0aGV5IG1heSBkbyBhbG9uZSwgYW5kIGl0cyBkZWNpc2lvbi5cbiAgJ3BsdWdpbi5pbnN0YWxsLmNoYW5nZS1yZXF1ZXN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmNoYW5nZS1hcHByb3ZlJyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmNoYW5nZS1yZWplY3QnLFxuICAncGx1Z2luLmluc3RhbGwucmVtb3ZlJyxcbiAgJ29yZy5wbHVnaW4taW5zdGFsbC1wb2xpY3kudXBkYXRlJyxcbiAgLy8gQW4gdXBsb2FkIFJFRlVTRUQgYmVjYXVzZSBpdHMgbmFtZSB3b3VsZCBvdmVycmlkZSBzb21ldGhpbmcgdGhlIG9yZyBhbHJlYWR5XG4gIC8vIHJlc29sdmVzIOKAlCBhIGxpc3RpbmcsIG9yIGEgdGVhbSdzIHBhcmVudC1vcmcgcGx1Z2luIOKAlCBhbmQgdGhlIGNvbnN1bXB0aW9uXG4gIC8vIHBvbGljeSBzYXlzIGBzaGFkb3dpbmc6IGRlbnlgLiBBdWRpdGVkIGJlY2F1c2UgYSByZWZ1c2FsIG90aGVyd2lzZSByZXR1cm5zXG4gIC8vIGFuIGVycm9yIHRvIHRoZSBjYWxsZXIgYW5kIGxlYXZlcyBub3RoaW5nIGJlaGluZDogYW4gYXR0ZW1wdCB0byBkZWZpbmVcbiAgLy8gYHRyaXZ5YCBvdmVyIHRoZSBPZmZpY2lhbCBzY2FubmVyIGlzIGV4YWN0bHkgdGhlIHRoaW5nIHNvbWVvbmUgc2hvdWxkIGJlXG4gIC8vIGFibGUgdG8gZmluZCBhZnRlcndhcmRzLiBgZGV0YWlsc2AgY2FycnkgdGhlIG5hbWUgYW5kIHdoYXQgaXQgd291bGQgaGF2ZVxuICAvLyBvdmVycmlkZGVuLlxuICAncGx1Z2luLnNoYWRvd2luZy5kZW5pZWQnLFxuICAvLyBSZXZpZXdzIGFuZCByZXBsaWVzLlxuICAncGx1Z2luLnJldmlldy5jcmVhdGUnLFxuICAncGx1Z2luLnJldmlldy51cGRhdGUnLFxuICAncGx1Z2luLnJldmlldy5kZWxldGUnLFxuICAncGx1Z2luLnJldmlldy5yZXBvcnQnLFxuICAncGx1Z2luLnJldmlldy5ob2xkJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVsZWFzZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlbW92ZScsXG4gICdwbHVnaW4ucmV2aWV3LmFub255bWl6ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcGx5LmNyZWF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcGx5LnVwZGF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcGx5LmRlbGV0ZScsXG4gIC8vIEFub255bW91cyBzdWJtaXNzaW9ucy5cbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmNyZWF0ZScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi52ZXJpZnknLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uZ2F0ZS1mYWlsJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmFwcHJvdmUnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24ucmVqZWN0JyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmNsYWltJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmV4cGlyZScsXG4gIC8vIFNlY3VyaXR5IGFkdmlzb3JpZXMgKHB1Ymxpc2gvd2l0aGRyYXcgYXJlIHN5c3RlbS1vcmcgb25seTsgdXBkYXRlID0gYVxuICAvLyBtb2RlcmF0b3IgZWRpdGluZyBhIGRyYWZ0IGJlZm9yZSBpdCBpcyBwdWJsaXNoZWQpLlxuICAncGx1Z2luLmFkdmlzb3J5LmNyZWF0ZScsXG4gICdwbHVnaW4uYWR2aXNvcnkudXBkYXRlJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS5wdWJsaXNoJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS53aXRoZHJhdycsXG4gIC8vIFBlci1vcmcgcGx1Z2luIHNlY3VyaXR5IG5vdGlmaWNhdGlvbnMgKHBsdWdpbiBzY2FuIGdhdGVzKTogdGhlIHNldHRpbmdzXG4gIC8vIChyZWNpcGllbnRzLCBkaWdlc3QsIHdlYmhvb2ssIGV4dGVybmFsIGFkZHJlc3Mg4oCUIGNoYW5nZWQgZmllbGQgbmFtZXMgYW5kXG4gIC8vIHRoZSB3ZWJob29rIGhvc3Qgb25seSwgbmV2ZXIgdGhlIHNlY3JldCBvciB0aGUgYWRkcmVzcyksIGFuIGV4dGVybmFsXG4gIC8vIGFkZHJlc3MgY29uZmlybWVkIHRocm91Z2ggaXRzIGVtYWlsZWQgc2luZ2xlLXVzZSBsaW5rLCBhbmQgYSB0ZXN0IHNlbmQuXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy51cGRhdGUnLFxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMuZXh0ZXJuYWxfZW1haWwudmVyaWZ5JyxcbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLnRlc3QnLFxuICAvLyBBIGdhdGUtcmVmdXNlZCBpbWFnZSBLRVBUIGZyb20gdGhlIHNldHVwIGNhdGFsb2cgbG9hZCwgcHJvbW90ZWQgdG8gYVxuICAvLyB2ZXJzaW9uIHdpdGhvdXQgYSByZWJ1aWxkIChzeXN0ZW0gb3JnLCBhZnRlciBhIGZpeCB1cHN0cmVhbSBvciBhblxuICAvLyBhZHZpc29yeS1pZCB3YWl2ZXIpIOKAlCBvciByZWZ1c2VkIGFnYWluIGJlY2F1c2UgdGhlIENVUlJFTlQgZ2F0ZXMgc3RpbGxcbiAgLy8gZmFpbCBpdC4gYGRldGFpbHNgIGNhcnJ5IG5hbWUvdmVyc2lvbi9kaWdlc3QgYW5kIHRoZSBmaW5kaW5ncy5cbiAgJ3BsdWdpbi5zZXR1cF9pbWFnZS5wcm9tb3RlZCcsXG4gICdwbHVnaW4uc2V0dXBfaW1hZ2UucHJvbW90ZV9yZWZ1c2VkJyxcbiAgLy8gQSBnYXRlLXJlZnVzZWQgc2V0dXAtbG9hZCBpbWFnZSBLRVBUIChzaWduZWQsIGluIHRoZSByZWdpc3RyeSkgZm9yIGxhdGVyXG4gIC8vIHByb21vdGlvbiAoYGRldGFpbHNgOiBkaWdlc3QsIHJlZnVzYWwgY29kZSwgZXhwaXJlc0F0KSDigJQgYW5kIGl0cyByb3dcbiAgLy8gZHJvcHBlZCBieSB0aGUgc3dlZXAgKGBkZXRhaWxzLnJlYXNvbmA6IGV4cGlyZWQgLyBzdXBlcnNlZGVkKS5cbiAgJ3BsdWdpbi5zZXR1cF9pbWFnZS5rZXB0JyxcbiAgJ3BsdWdpbi5zZXR1cF9pbWFnZS5kaXNjYXJkZWQnLFxuICAvLyBBIFBJUEVMSU5FJ3MgdHJpYWdlIG9mIGl0cyBleHBvc3VyZSB0byBhIHZ1bG5lcmFibGUgcGx1Z2luIHZlcnNpb246IGFcbiAgLy8gdGltZS1ib3hlZCByaXNrIGFjY2VwdGFuY2UgKHJlYXNvbiArIGV4cGlyeSwgdGhlIGFjY2VwdGVkIGZpbmRpbmcga2V5cyBhbmRcbiAgLy8gd2hldGhlciBLRVYgZmluZGluZ3Mgd2VyZSBhY2NlcHRlZCksIGEgZmFsc2UtcG9zaXRpdmUgZGlzbWlzc2FsLCBvciBhXG4gIC8vIHJlb3Blbi4gQW4gYWN0aXZlIGFjY2VwdGFuY2UgZXhlbXB0cyB0aGF0IHBpcGVsaW5lJ3MgbG9va3VwcyBhbmQgcnVudGltZVxuICAvLyBjaGVja3MgZnJvbSB0aGUgZmxhZyAvIEtFViAvIEhpZ2gtZmxvb3IgcmVmdXNhbHMgZm9yIHRob3NlIGZpbmRpbmdzIG9ubHkuXG4gICdwaXBlbGluZS52dWxuLmFjY2VwdGVkJyxcbiAgJ3BpcGVsaW5lLnZ1bG4uZmFsc2VfcG9zaXRpdmUnLFxuICAncGlwZWxpbmUudnVsbi5yZW9wZW5lZCcsXG4gIC8vIEEgcGlwZWxpbmUncyBydW50aW1lIGNoZWNrIGdyYWRlZCBvbmUgb2YgaXRzIHJ1bm5pbmcgaW1hZ2VzIGBlcnJvcmAgb3JcbiAgLy8gbG91ZGVyIChgZGV0YWlsc2A6IHN0ZXBLZXksIGRpZ2VzdCwgcmVhc29uIGNvZGVzLCBleGVjdXRpb25JZCB3aGVuIHNlbnQpLlxuICAncGlwZWxpbmUucnVudGltZV9jaGVjay5mbGFnZ2VkJyxcbiAgLy8gQSBwaXBlbGluZSdzIHBsdWdpbiBzdGVwcyBtb3ZlZCB0byBuZXdlciB2ZXJzaW9ucyB0aHJvdWdoIHRoZSB1cGdyYWRlXG4gIC8vIGZsb3cgKHByZXZpZXcg4oaSIGFwcGx5OyBgZGV0YWlsc2AgY2FycnkgdGhlIHN0ZXBzLCBmcm9tIOKGkiB0byB2ZXJzaW9ucyksIGFuZCBhXG4gIC8vIHBpcGVsaW5lLXJ1biBzZWN1cml0eSBzY2FubmVyIHJlcG9ydCB1cGxvYWRlZCBmb3IgYSBwaXBlbGluZSAoYGRldGFpbHNgOlxuICAvLyB0b29sLCBmb3JtYXQsIHN0YWdlLCB0aGUgZmluZGluZyBjb3VudHMg4oCUIG5ldmVyIHRoZSBmaW5kaW5ncyB0aGVtc2VsdmVzKS5cbiAgJ3BpcGVsaW5lLnBsdWdpbi51cGdyYWRlZCcsXG4gICdwaXBlbGluZS5zZWN1cml0eV9yZXBvcnQudXBsb2FkJyxcbiAgLy8gQSBtZW1iZXIgcmVtb3ZlZCBvbmUgKHRvb2wsIHN0YWdlKSByZXBvcnQgc2xvdCBvZiBhIHBpcGVsaW5lIOKAlCBhIGRyb3BwZWRcbiAgLy8gc2Nhbm5lciBvciByZW5hbWVkIHN0YWdlIChgZGV0YWlsc2A6IHRvb2wsIHN0YWdlLCB0aGUgY291bnRzIGl0IGNhcnJpZWQpLlxuICAncGlwZWxpbmUuc2VjdXJpdHlfcmVwb3J0LmRlbGV0ZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZW1vdGVBdWRpdEFjdGlvbiA9IHR5cGVvZiBSRU1PVEVfQVVESVRfQUNUSU9OU1tudW1iZXJdO1xuXG4vKiogV2hldGhlciBgdmFsdWVgIGlzIGFuIGFjdGlvbiBhIHJlbW90ZSBzZXJ2aWNlIG1heSBlbWl0ICh0aGUgaW5nZXN0IGFsbG93LWxpc3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlQXVkaXRBY3Rpb24odmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFJlbW90ZUF1ZGl0QWN0aW9uIHtcbiAgcmV0dXJuIChSRU1PVEVfQVVESVRfQUNUSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuIl19
|
|
@@ -208,3 +208,22 @@ export declare function automationCallsFor(pipelines: number, periodDays?: numbe
|
|
|
208
208
|
* on Team/Enterprise while cost-driving quotas — incl. apiCalls — stay finite.)
|
|
209
209
|
*/
|
|
210
210
|
export declare const DEFAULT_TIER_LIMITS: Record<QuotaTier, QuotaTierLimits>;
|
|
211
|
+
/** Tiers that permit the org → team hierarchy (nesting teams under a root). The
|
|
212
|
+
* billing-off `unlimited` tier is team-capable (it's the most permissive); the
|
|
213
|
+
* entry-level `developer`/`pro` tiers are not. Single source for the parent-
|
|
214
|
+
* eligibility + downgrade-overcap checks so they can't drift. */
|
|
215
|
+
export declare const TEAM_CAPABLE_TIERS: readonly QuotaTier[];
|
|
216
|
+
export declare function tierAllowsTeams(tier: string | undefined | null): boolean;
|
|
217
|
+
/** Tiers that may buy extra seats — billing's per-seat `seat` add-on. Seats are
|
|
218
|
+
* the Team differentiator, so the single-seat `developer`/`pro` tiers cannot
|
|
219
|
+
* stack them and must upgrade instead; `unlimited` has no seat cap at all.
|
|
220
|
+
* Single source for the billing catalog and every "out of seats" message. */
|
|
221
|
+
export declare const SEAT_PACK_TIERS: readonly QuotaTier[];
|
|
222
|
+
/** How an account that has used every seat can get another. */
|
|
223
|
+
export type SeatRemedy = 'upgrade' | 'seat_pack';
|
|
224
|
+
/**
|
|
225
|
+
* The remedy to offer an account at its seat cap, from the ACCOUNT's (root) tier:
|
|
226
|
+
* `seat_pack` where seats can be bought, `upgrade` on the single-seat tiers.
|
|
227
|
+
* `null` when the tier is unknown or has no cap — say nothing rather than guess.
|
|
228
|
+
*/
|
|
229
|
+
export declare function seatRemedy(tier: string | undefined | null): SeatRemedy | null;
|
package/lib/types/tier-limits.js
CHANGED
|
@@ -251,4 +251,30 @@ export const DEFAULT_TIER_LIMITS = {
|
|
|
251
251
|
doraRetentionDays: -1,
|
|
252
252
|
},
|
|
253
253
|
};
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGllci1saW1pdHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy90aWVyLWxpbWl0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBNEJ0Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBWTtJQUNwQyxPQUFPLElBQUk7U0FDUixLQUFLLENBQUMsTUFBTSxDQUFDO1NBQ2IsTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUNmLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLENBQUM7QUFzR0Q7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFOUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyxXQUFXLEVBQUU7UUFDWCxhQUFhLEVBQUUsRUFBRTtRQUNqQixLQUFLLEVBQUUsQ0FBQztRQUNSLFlBQVksRUFBRSxDQUFDO1FBQ2Ysb0JBQW9CLEVBQUUsQ0FBQztRQUN2QixnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLGFBQWEsRUFBRSxFQUFFO0tBQ2xCO0lBQ0QsVUFBVSxFQUFFLEVBQUU7SUFDZCwwQkFBMEIsRUFBRSxDQUFDO0lBQzdCLGlFQUFpRTtJQUNqRSxnQkFBZ0IsRUFBRSxJQUFJO0lBQ3RCLHdDQUF3QztJQUN4QyxRQUFRLEVBQUUsSUFBSTtJQUNkLCtDQUErQztJQUMvQyxPQUFPLEVBQUUsTUFBTTtDQUNQLENBQUM7QUFFWCw4RkFBOEY7QUFDOUYsTUFBTSxVQUFV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Q2IsS0FBSyxFQUFFLEVBQUU7UUFDVCxlQUFlLEVBQUUsQ0FBQztRQUNsQixzQkFBc0IsRUFBRSxDQUFDO1FBQ3pCLGtCQUFrQixFQUFFLEVBQUU7UUFDdEIsaUJBQWlCLEVBQUUsR0FBRztLQUN2QjtJQUNELDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UsU0FBUyxFQUFFO1FBQ1QsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNYLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDYixRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ1osZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNuQixPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ1gsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNkLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDaEIsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNkLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDZCxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNkLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDWixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNuQixzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDMUIsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLGlCQUFpQixFQUFFLENBQUMsQ0FBQztLQUN0QjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXaGF0IGEgdGllciBHSVZFUyB5b3UsIGFzIERBVEEgT05MWSDigJQgdGhlIGxpbWl0cyBzaGFwZSwgdGhlIGNvZGUtZGVmYXVsdFxuICogbnVtYmVyIGZvciBldmVyeSB0aWVyIHggcXVvdGEgdHlwZSwgYW5kIHRoZSBhcml0aG1ldGljIHRob3NlIG51bWJlcnMgd2VyZVxuICogZGVyaXZlZCBmcm9tLlxuICpcbiAqIERlcGVuZGVuY3ktZnJlZSBhbmQgZW52LWZyZWUgc28gdGhlIGJyb3dzZXIgaW1wb3J0cyBpdCBkaXJlY3RseVxuICogKGBAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZS90aWVyLWxpbWl0c2ApLiBJdHMgb25seSBpbXBvcnQgaXMgYSB0eXBlLCB3aGljaFxuICogaXMgZXJhc2VkIGF0IGNvbXBpbGUgdGltZSwgc28gbm90aGluZyBvZiB0aGUgc2VydmVyIGdyYXBoIHJlYWNoZXMgdGhlIGJ1bmRsZS5cbiAqIFRoZSBlbnYgT1ZFUkxBWSAoYFFVT1RBX1RJRVJfPFRJRVI+XzxMSU1JVD5gKSBkZWxpYmVyYXRlbHkgc3RheXMgaW5cbiAqIGBxdW90YS10aWVycy50c2A6IGl0IHJlYWRzIGBwcm9jZXNzLmVudmAsIHdoaWNoIGlzIHdoYXQga2VwdCB0aGlzIHRhYmxlIG91dCBvZlxuICogdGhlIGJyb3dzZXIncyByZWFjaCBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gKlxuICogV0hZIElUIEVYSVNUUy4gVGhlIGZyb250ZW5kIGtlcHQgYSBoYW5kLXdyaXR0ZW4gY29weSBvZiB0aGlzIHRhYmxlXG4gKiAoYGZyb250ZW5kL3NyYy9jb21wb25lbnRzL3F1b3Rhcy9jb25zdGFudHMudHNgLCB1bmRlciBhIFwia2VlcCBpbiBzeW5jXCJcbiAqIGNvbW1lbnQpIGJlY2F1c2UgaW1wb3J0aW5nIHRoZSByZWFsIG9uZSBtZWFudCBpbXBvcnRpbmcgYSBtb2R1bGUgd2l0aCBzaXh0ZWVuXG4gKiBlbnYgcmVhZHMuIFRoZSBjb3B5IHByZWZpbGxzIHRoZSBxdW90YS1hZG1pbiBlZGl0b3IncyBwZXItdGllciBwcmVzZXRzLCBzbyBhXG4gKiBkcmlmdGVkIGNvcHkgZGlkIG5vdCBicmVhayB0aGUgcGFnZSDigJQgYW4gYWRtaW4gY2xpY2tlZCBhIHByZXNldCBhbmQgU0FWRURcbiAqIG51bWJlcnMgdGhhdCB3ZXJlIG5vIGxvbmdlciB0aGUgcHJvZHVjdCdzLCB3aXRoIG5vdGhpbmcgYW55d2hlcmUgcmVwb3J0aW5nIGl0LlxuICogQSB0ZXN0IHBhcnNlZCBCT1RIIGZpbGVzJyBzb3VyY2UgdGV4dCB0byBob2xkIHRoZW0gZXF1YWwsIHdoaWNoIGlzIHRoZSBzaGFwZVxuICogeW91IHJlYWNoIGZvciB3aGVuIHRoZSB2YWx1ZXMgY2Fubm90IGJlIHNoYXJlZC4gTm93IHRoZXkgY2FuIGJlOiB0aGUgZnJvbnRlbmRcbiAqIGltcG9ydHMgdGhpcyB0YWJsZSwgdGhlIGNvcHkgaXMgZ29uZSwgYW5kIHRoZSBkcmlmdCBpdCBndWFyZGVkIGlzIG5vdFxuICogZXhwcmVzc2libGUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBRdW90YVRpZXIgfSBmcm9tICcuL3F1b3RhLXRpZXJzLmpzJztcblxuLyoqXG4gKiBBIHRpZXIga2V5IGFzIHByb2R1Y3QgY29weTogYGRldmVsb3BlcmAg4oaSIFwiRGV2ZWxvcGVyXCIsIGBwcm9fcGx1c2Ag4oaSIFwiUHJvIFBsdXNcIi5cbiAqXG4gKiBMaXZlcyBoZXJlLCB3aXRoIHRoZSBvdGhlciB0aWVyIGZhY3RzLCBiZWNhdXNlIHRocmVlIGNhbGxlcnMgd2FudCBpdDogdGhlXG4gKiBkZWZhdWx0IGBRVU9UQV9USUVSU2AgbGFiZWwsIHRoZSBzaGFyZWQgdGVzdCBmaXh0dXJlJ3MgbGFiZWxzICh3aGljaCBrZXB0IGFcbiAqIHNlY29uZCBgdGl0bGVDYXNlYCBvZiBpdHMgb3duKSwgYW5kIHRoZSBicm93c2VyLlxuICpcbiAqIEl0IHdpbGwgTk9UIGd1ZXNzIGF0IGFuIGFjcm9ueW0gKGBzc29gIOKGkiBcIlNzb1wiKSBvciBhIHN0eWxpemVkIG5hbWUgKFwiUHJvK1wiKSxcbiAqIGFuZCBkZWxpYmVyYXRlbHkgdGFrZXMgbm8gZm9ybWF0dGluZyBvcHRpb25zOiB0aGUgY2FzZXMgaXQgY2Fubm90IGRlcml2ZSBuZWVkXG4gKiBhIGh1bWFuIHdyaXRpbmcgY29weSwgd2hpY2ggaXMgd2hhdCBgUVVPVEFfVElFUl88VElFUj5fTEFCRUxgIGlzIGZvci4gQSBtb2RlXG4gKiBmbGFnIHdvdWxkIGFkZCBzdXJmYWNlIHdpdGhvdXQgcmVhY2hpbmcgYW55IG9mIHRoZW0sIGFuZCBhIG1pZC1zZW50ZW5jZSBwaHJhc2VcbiAqIChcIuKApiDigJQgbmV3IHZlcnNpb25cIikgaXMgYSBkaWZmZXJlbnQgRkFDVCBmcm9tIGEgc3RhbmRhbG9uZSBsYWJlbCByYXRoZXIgdGhhblxuICogYW5vdGhlciBzdHlsZSBvZiBvbmUg4oCUIGBxdW90YS1jYXRhbG9nLnRzYCBjYXJyaWVzIGBsYWJlbGAgYW5kIGBsYWJlbFBsdXJhbGAgYXNcbiAqIHNlcGFyYXRlIG5hbWVkIGZpZWxkcyBmb3IgZXhhY3RseSB0aGF0IHJlYXNvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpZXJMYWJlbCh0aWVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGllclxuICAgIC5zcGxpdCgvW18tXS8pXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5tYXAoKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxuICAgIC5qb2luKCcgJyk7XG59XG5cbi8qKiBMaW1pdCB2YWx1ZXMgZm9yIGVhY2ggcXVvdGEgdHlwZSB3aXRoaW4gYSB0aWVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVRpZXJMaW1pdHMge1xuICBwbHVnaW5zOiBudW1iZXI7XG4gIHBpcGVsaW5lczogbnVtYmVyO1xuICBhcGlDYWxsczogbnVtYmVyO1xuICAvKipcbiAgICogTWV0ZXJlZCBBUEkgY2FsbHMgbWFkZSBieSBPUkcgU0VSVklDRSBBQ0NPVU5UUyAoYXV0b21hdGlvbiksIGNvdW50ZWRcbiAgICogaW5zdGVhZCBvZiBgYXBpQ2FsbHNgIHNvIHBpcGVsaW5lcyBjYW4ndCBzdGFydmUgdGhlIG9yZydzIHBlb3BsZS4gU2VlXG4gICAqIHtAbGluayBBVVRPTUFUSU9OX0NBTExTX1NJWklOR30gZm9yIGhvdyB0aGUgZGVmYXVsdHMgYXJlIGRlcml2ZWQuXG4gICAqL1xuICBhdXRvbWF0aW9uQ2FsbHM6IG51bWJlcjtcbiAgYWlDYWxsczogbnVtYmVyO1xuICAvKipcbiAgICogQWdncmVnYXRlIHJlZ2lzdHJ5IHN0b3JhZ2UgY2FwIGluIEJZVEVTLiBDb3VudGVkIGFjcm9zcyBldmVyeSByZXBvXG4gICAqIHVuZGVyIHRoZSBvcmcncyBgb3JnLXtvcmdJZH0vYCBuYW1lc3BhY2UuIC0xIG1lYW5zIHVubGltaXRlZC5cbiAgICogcHVzaC1nYXRlIHJlYWRzIHRoaXM7IHRoZSBpbWFnZS1yZWdpc3RyeSByZWplY3RzIHRva2VuIGlzc3VhbmNlIGZvclxuICAgKiBgcHVzaGAgc2NvcGUgd2hlbiB0aGUgb3JnJ3MgbWVhc3VyZWQgdXNhZ2UgZXhjZWVkcyB0aGUgbGltaXQuXG4gICAqL1xuICBzdG9yYWdlQnl0ZXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIHZDUFUtTUlOVVRFUyBvZiBwbHVnaW4tYnVpbGQgY29tcHV0ZSBwZXIgTU9OVEgg4oCUIHRoZSBvbmUgcXVvdGEgb24gYSBwZXJpb2RcbiAgICogb2YgaXRzIG93biAoZXZlcnkgb3RoZXIgZmxvdyBxdW90YSByb2xscyBvbiBgUVVPVEFfUkVTRVRfREFZU2AsIDMgZGF5cykuXG4gICAqXG4gICAqIERlcml2ZWQgZnJvbSB0aGUgYHBsdWdpbnNgIGNhcCByYXRoZXIgdGhhbiBndWVzc2VkOiBgcGx1Z2lucyB4IDEwYCBidWlsZHMgYVxuICAgKiBtb250aCwgYXQgYSBmbGF0IDMwIHdhbGwtbWludXRlcyBhIGJ1aWxkIGFuZCAxLjUgdkNQVSBvZiBidWlsZGtpdGQsIHNvXG4gICAqIGBjcmVkaXRzID0gYnVpbGRzIHggNDVgLiBUaGUgZmxhdCBwZXItYnVpbGQgZmlndXJlIGlzIGRlbGliZXJhdGUg4oCUIHNjYWxpbmdcbiAgICogQk9USCB0aGUgYnVpbGQgY291bnQgYW5kIHRoZSBwZXItYnVpbGQgY29zdCBieSB0aWVyIG1hZGUgY3JlZGl0c1xuICAgKiBzdXBlcmxpbmVhciBpbiB0aWVyIG9uIHRoZSBzdHJlbmd0aCBvZiBhbiB1bm1lYXN1cmVkIGNsYWltLCBhbmQgaXQgbWFkZSBhXG4gICAqIHBhY2sncyBjcmVkaXQgZ3JhbnQgdGllci1kZXBlbmRlbnQsIHdoaWNoIHRoZSBjYXRhbG9ndWUncyBncmFudCBzaGFwZSBjYW5ub3RcbiAgICogZXhwcmVzcy5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgZmlyc3QgZGltZW5zaW9uIHdpdGggZ2VudWluZSBwZXItdW5pdCBtYXJnaW5hbCBjb3N0OiBldmVyeSBvdGhlclxuICAgKiBxdW90YSBpcyBhIHJhdGUgbGltaXQgcHJvdGVjdGluZyBzaGFyZWQgaW5mcmFzdHJ1Y3R1cmUsIHRoaXMgb25lIGlzIGNvbXB1dGVcbiAgICogdGhlIHBsYXRmb3JtIHBheXMgZm9yLiBTZWUgYGRvY3MvcGxhbnMvY3B1LWNyZWRpdHMubWRgLlxuICAgKi9cbiAgY3B1Q3JlZGl0czogbnVtYmVyO1xuICAvKiogQ291bnQtcXVvdGFzIG9uIHRoZSB1c2VyLWVkaXRhYmxlIGZlYXR1cmUgdGFibGVzIGFkZGVkIHRvIGNsb3NlIHBlci1vcmdcbiAgICogIERvUyB2aWEgc3BhbS4gLTEgbWVhbnMgdW5saW1pdGVkLiAqL1xuICBkYXNoYm9hcmRzOiBudW1iZXI7XG4gIGFsZXJ0UnVsZXM6IG51bWJlcjtcbiAgYWxlcnREZXN0aW5hdGlvbnM6IG51bWJlcjtcbiAgaWRwQ29uZmlnczogbnVtYmVyO1xuICAvKipcbiAgICogQWN0aXZlLCBub24tc3VzcGVuZGVkIHBsdWdpbi1lY29zeXN0ZW0gbGlzdGluZ3MgdGhlIG9yZyBwdWJsaXNoZXNcbiAgICogKGRvY3MvcGx1Z2luLWluc3RhbGxpbmcubWQpLiBBIENPVU5UIHF1b3RhIOKAlCBpbnN0YWxscyBuZXZlclxuICAgKiBjb3VudC4gLTEgPSB1bmxpbWl0ZWQuIEV4dGVuZGFibGUgdmlhIHRoZSBgbGlzdGluZ19wYWNrYCBhZGQtb24gYnVuZGxlLlxuICAgKi9cbiAgbGlzdGluZ3M6IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heCBvcmcgbWVtYmVycyAoYWN0aXZlIHVzZXJzIC8gc2VhdHMpLiAtMSA9IHVubGltaXRlZC4gVGhpcyBpcyB0aGUgXCJUZWFtXCJcbiAgICogdGllciBkaWZmZXJlbnRpYXRvciDigJQgZW5mb3JjZWQgYXQgbWVtYmVyLWludml0ZSB0aW1lIChhbiBpbnZpdGUgaXMgYmxvY2tlZFxuICAgKiB3aGVuIGFjdGl2ZSBtZW1iZXJzICsgcGVuZGluZyBpbnZpdGVzIHdvdWxkIGV4Y2VlZCB0aGlzKS5cbiAgICovXG4gIHNlYXRzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXggZGVzaWduYXRlZCBTVVBQT1JUIENPTlRBQ1RTIOKAlCB0aGUgbWVtYmVycyBhdXRob3Jpc2VkIHRvIG9wZW4gc3VwcG9ydFxuICAgKiBjYXNlcy4gLTEgPSB1bmxpbWl0ZWQuIEJhc2UgaXMgKiowIG9uIGV2ZXJ5IHRpZXIqKjogc3VwcG9ydCBpcyBhbiBhZGQtb24gYXRcbiAgICogZXZlcnkgdGllciBhbmQgaW5jbHVkZWQgaW4gbm9uZSwgc28gYW4gb3JnIHdpdGggbm8gc3VwcG9ydCBidW5kbGUgaGFzIG5vXG4gICAqIGNvbnRhY3RzIGFuZCBjYW5ub3Qgb3BlbiBhIGNhc2UuIFRoYXQgbWFrZXMgdGhlIHN1cHBvcnQgcGF5d2FsbCBhIHF1b3RhXG4gICAqIGNoZWNrIHJhdGhlciB0aGFuIGEgZmVhdHVyZSBmbGFnLlxuICAgKlxuICAgKiBMaWtlIGBzZWF0c2AgdGhpcyBpcyBhIHRpZXIgTElNSVQsIG5vdCBhIHRyYWNrZWQgY291bnRlciDigJQgZW5mb3JjZWQgbGl2ZSBhdFxuICAgKiBkZXNpZ25hdGlvbiB0aW1lIGFnYWluc3QgY3VycmVudCBkZXNpZ25hdGlvbnMgYWNyb3NzIHRoZSBvcmcgc3VidHJlZS5cbiAgICogRXh0ZW5kZWQgcGVyIHVuaXQgYnkgdGhlIGBzdXBwb3J0X3N0YW5kYXJkYCAvIGBzdXBwb3J0X3ByaW9yaXR5YCBCQVNFTElORVxuICAgKiBidW5kbGVzLCB3aGljaCBhcmUgcHJpY2VkIHBlciBjb250YWN0LlxuICAgKi9cbiAgc3VwcG9ydENvbnRhY3RzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBIb3cgbWFueSBvZiB0aG9zZSBjb250YWN0cyBtYXkgYmUgVVBHUkFERUQgdG8gcHJlbWl1bSAoMjTDlzcsIDgtaG91clxuICAgKiByZXNwb25zZSwgYW5kIHRoZSBvbmx5IG9uZXMgd2hvIG1heSBkZWNsYXJlIGB1cmdlbnRgKS5cbiAgICpcbiAgICogQSBzZWNvbmQgZGltZW5zaW9uIHJhdGhlciB0aGFuIGEgdGhpcmQgYmFzZWxpbmUgbGV2ZWwsIGJlY2F1c2UgcHJlbWl1bSBpcyBhblxuICAgKiBVUEdSQURFIGFuZCBub3QgYW4gYWx0ZXJuYXRpdmUuIFRoZSBzaGFwZSBpdCBlbmNvZGVzOiBhbiBvcmcgYnV5cyBOIGJhc2VsaW5lXG4gICAqIGNvbnRhY3RzIGFuZCB1cGdyYWRlcyBNIG9mIHRoZW0sIE0g4omkIE4uIFRoYXQgaXMgd2hhdCBsZXRzIGEgMTAwLXNlYXRcbiAgICogY3VzdG9tZXIgZ2l2ZSBidXNpbmVzcy1ob3VycyBzdXBwb3J0IHRvIGl0cyB0aHJlZSBuYW1lZCBjb250YWN0cyBhbmQgMjTDlzdcbiAgICogdG8gdGhlIG9uZSB3aG8gY2FycmllcyB0aGUgcGFnZXIg4oCUIHRoZSBjYXNlIHRoZSBtdXR1YWxseS1leGNsdXNpdmUgbGFkZGVyXG4gICAqIGNvdWxkIG5vdCBleHByZXNzIGF0IGFsbCwgd2hlcmUgYnV5aW5nIFwiOTkgc3RhbmRhcmQgKyAxIHByZW1pdW1cIiBjaGFyZ2VkIGZvclxuICAgKiAxMDAgdW5pdHMgYW5kIGdyYW50ZWQgb25lIGNvbnRhY3QuXG4gICAqXG4gICAqIEFERElUSVZFLCBkZWxpYmVyYXRlbHkuIEEgcHJlbWl1bSBjb250YWN0IGNvc3RzIHRoZSBiYXNlbGluZSB1bml0IFBMVVMgdGhlXG4gICAqIHVwZ3JhZGUgKCQxOS45OSArICQ5OS45OSksIGJlY2F1c2UgaXQgaXMgc2VydmVkIGR1cmluZyBidXNpbmVzcyBob3Vyc1xuICAgKiB0aHJvdWdoIHRoZSBiYXNlbGluZSBhbmQgb3Zlcm5pZ2h0IHRocm91Z2ggdGhlIHVwZ3JhZGU7IHByaWNpbmcgdGhlIHVwZ3JhZGVcbiAgICogYXMgYSBkZWx0YSB3b3VsZCBwcmV0ZW5kIHRoZSBiYXNlbGluZSB3ZXJlIGZyZWUuIEJhc2UgMCBvbiBldmVyeSB0aWVyLCBsaWtlXG4gICAqIGBzdXBwb3J0Q29udGFjdHNgLCBzbyB0aGUgcGF5d2FsbCBzdGF5cyBhIHF1b3RhIGNoZWNrLlxuICAgKi9cbiAgc3VwcG9ydFByZW1pdW1Db250YWN0czogbnVtYmVyO1xuICAvKipcbiAgICogUmVwb3J0aW5nIHJldGVudGlvbiBpbiBEQVlTIOKAlCBOT1QgYSBmbG93IHF1b3RhIChuZXZlciBkZWNyZW1lbnRlZCwgYWJzZW50XG4gICAqIGZyb20gYFZBTElEX1FVT1RBX1RZUEVTYCk6IHRoZXNlIHJpZGUgdGhlIHRpZXItYmFzZWxpbmUgKyBidW5kbGUtZ3JhbnQgbWF0aFxuICAgKiBwdXJlbHkgYXMgYW4gZW50aXRsZW1lbnQgdGhlIGJpbGxpbmcgc2VydmljZSBzeW5jcyB0byByZXBvcnRpbmcnc1xuICAgKiBgZG9yYV9zZXR0aW5nc2AuIC0xID0gdW5saW1pdGVkICh0aGUgc3dlZXAgc2tpcHMgdGhlIG9yZyBlbnRpcmVseSkuXG4gICAqICAgYGV2ZW50UmV0ZW50aW9uRGF5c2Ag4oCUIG5vbi1kZXBsb3kgYHBpcGVsaW5lX2V2ZW50c2AgKFNUQUdFL0FDVElPTi9idWlsZCkuXG4gICAqICAgYGRvcmFSZXRlbnRpb25EYXlzYCAg4oCUIGRlcGxveSBldmVudHMgKyBgZGVwbG95bWVudF9vdXRjb21lc2AgKyBgaW5jaWRlbnRzYCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcGVyLW9yZyByZXBvcnQtcXVlcnkgd2luZG93IGZvciBET1JBIHJvdXRlcy5cbiAgICogRXh0ZW5kYWJsZSB2aWEgdGhlIGByZXRlbnRpb25fcGFja2AgLyBgZG9yYV9oaXN0b3J5X3BhY2tgIGFkZC1vbiBidW5kbGVzLlxuICAgKi9cbiAgZXZlbnRSZXRlbnRpb25EYXlzOiBudW1iZXI7XG4gIGRvcmFSZXRlbnRpb25EYXlzOiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJlc2V0IGxpbWl0cyBmb3IgZWFjaCB0aWVyLiAtMSBtZWFucyB1bmxpbWl0ZWQuXG4gKlxuICogQUkgY2FsbHMgYXJlIHNpemVkIG11Y2ggc21hbGxlciB0aGFuIGBhcGlDYWxsc2AgYmVjYXVzZSBlYWNoIGNhbGwgaGFzXG4gKiBleHRlcm5hbCBwcm92aWRlciBjb3N0ICh+JDAuMDEkMC4xMC9jYWxsKS4gRGV2ZWxvcGVyIHRpZXIgYWxsb3dzIGxpZ2h0XG4gKiBleHBsb3JhdGlvbiAoNTAvcGVyaW9kKTsgUHJvIGxpZnRzIHRvIDIsNTAwOyBFbnRlcnByaXNlIGlzIGNhcHBlZCBoaWdoXG4gKiAoMjUsMDAwKSDigJQgZmFpci11c2UsIG5vdCBsaXRlcmFsbHkgdW5saW1pdGVkLlxuICpcbiAqIGBzdG9yYWdlQnl0ZXNgIGlzIHRoZSBhZ2dyZWdhdGUgcmVnaXN0cnkgY2FwIHBlciBvcmcuIFNpemVkXG4gKiBhcm91bmQgcGx1Z2luLWltYWdlIHJlYWxpdGllczogYSB0eXBpY2FsIHBsdWdpbiBpbWFnZSBpcyAyMDA1MDAgTUI7XG4gKiBEZXZlbG9wZXIncyAyIEdCIGhvbGRzIH40IHZlcnNpb25zIMOXIH41MDAgTUIsIFBybydzIDI1IEdCIGNvdmVycyBhXG4gKiBtYXR1cmUgY2F0YWxvZy4gT3BlcmF0b3JzIGNhbiBvdmVycmlkZSBwZXItb3JnIHZpYSB0aGUgcXVvdGEgQ1JVRCBBUEkuXG4gKi9cbmNvbnN0IEdCID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xuXG4vKipcbiAqIEhvdyB0aGUgYGF1dG9tYXRpb25DYWxsc2AgZGVmYXVsdHMgYXJlIHNpemVkIOKAlCB3cml0dGVuIGRvd24gc28gdGhlIG5leHRcbiAqIHBlcnNvbiB0byB0b3VjaCB0aGVtIGFyZ3VlcyB3aXRoIHRoZSBhcml0aG1ldGljLCBub3Qgd2l0aCB0aGUgbnVtYmVycy5cbiAqXG4gKiBFdmVyeSBjYWxsIGFuIG9yZydzIGF1dG9tYXRpb24ga2V5cyBtYWtlIGluIG9uZSBwaXBlbGluZSBSVU4sIGl0ZW1pemVkICh0aGVcbiAqIGVhcmxpZXIgc2l6aW5nIGNvdW50ZWQgb25seSB0aGUgcGx1Z2luIGxvb2t1cHMgYW5kIGhhbmQtd2F2ZWQgdGhlIHJlc3QgYXNcbiAqIFwiw5cyXCIpOlxuICpcbiAqICAgcGx1Z2luIGxvb2t1cHMgICAgICAgICAgICAxMiAgIG9uZSBwZXIgcGx1Z2luIHN0ZXAgKHNlbGYtbXV0YXRpbmcgcGlwZWxpbmUpXG4gKiAgIHN5bnRoICAgICAgICAgICAgICAgICAgICAgIDEgICB0aGUgc3ludGggc3RlcCBmZXRjaGluZyB0aGUgcGlwZWxpbmUgY29uZmlnXG4gKiAgIHJ1bnRpbWUgY2hlY2sgICAgICAgICAgICAgIDEgICB0aGUgcHJlLWRlcGxveSBydW50aW1lLWNoZWNrIGNhbGxcbiAqICAgc2VjdXJpdHktcmVwb3J0IHVwbG9hZCAgICAgMSAgIHRoZSBzY2FuIHN0ZXAgcG9zdGluZyBpdHMgcmVwb3J0XG4gKiAgIHJlZ2lzdHJ5IHJlZ2lzdGVyICAgICAgICAgIDEgICBwaXBlbGluZS1yZWdpc3RlciBzdGFtcGluZyB0aGUgZGVwbG95ZWQgdmVyc2lvblxuICogICByZXBvcnRpbmcgaW5nZXN0IGJhdGNoZXMgIDEyICAgdGhlIGV2ZW50IGZvcndhcmRlciBwb3N0cyB+b25lIGJhdGNoIHBlciBhY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4ICAgY2FsbHMgcGVyIHJ1blxuICpcbiAqIFBlciBkZWZhdWx0IHBlcmlvZCAoYFFVT1RBX1JFU0VUX0RBWVNgLCAzIGRheXMpIG9uZSBhY3RpdmUgcGlwZWxpbmUgcnVubmluZ1xuICogaG91cmx5IG1ha2VzIDI4IMOXIDI0IMOXIDMgPSAyLDAxNiBjYWxscy4gQW4gb3JnIGtlZXBzIGZhciBtb3JlIHBpcGVsaW5lcyBhbGl2ZVxuICogdGhhbiBpdCBDUkVBVEVTIGluIGEgcGVyaW9kIChgcGlwZWxpbmVzYCBpcyBhIGNyZWF0aW9uIHJhdGUpLCBzbyBhY3RpdmVcbiAqIHBpcGVsaW5lcyBhcmUgdGFrZW4gYXMgNMOXIHRoZSB0aWVyJ3MgYHBpcGVsaW5lc2AuIE9uIHRvcCBzaXRzIGEgcGVyLU9SR1xuICogY29uc3RhbnQgdGhhdCBkb2VzIG5vdCBzY2FsZSB3aXRoIHBpcGVsaW5lczogdGhlIGluZ2VzdC1oZWFsdGggaGVhcnRiZWF0XG4gKiAo4omkIDEvbWludXRlIOKGkiAxLDQ0MC9kYXkg4oaSIDQsMzIwL3BlcmlvZCkuIFRoZSBzdW0gZ2V0cyAyNSUgaGVhZHJvb20gKHJldHJpZXMsXG4gKiByZWdpc3RyeSBwdXNoZXMsIGFkLWhvYyBDSSBzY3JpcHRzIG9uIGtleXMpIGFuZCByb3VuZHMgVVAgdG8gdGhlIG5leHQgMTAsMDAwOlxuICpcbiAqICAgZGV2ZWxvcGVyICAgMsOXNMOXMjAxNiArIDQzMjAgPSAgMjAsNDQ4IMOXIDEuMjUgPSAgMjUsNTYwIOKGkiAgMzAsMDAwXG4gKiAgIHBybyAgICAgICAgIDXDlzTDlzIwMTYgKyA0MzIwID0gIDQ0LDY0MCDDlyAxLjI1ID0gIDU1LDgwMCDihpIgIDYwLDAwMFxuICogICB0ZWFtICAgICAgIDEww5c0w5cyMDE2ICsgNDMyMCA9ICA4NCw5NjAgw5cgMS4yNSA9IDEwNiwyMDAg4oaSIDExMCwwMDBcbiAqICAgYnVzaW5lc3MgICAyMMOXNMOXMjAxNiArIDQzMjAgPSAxNjUsNjAwIMOXIDEuMjUgPSAyMDcsMDAwIOKGkiAyMTAsMDAwXG4gKiAgIGVudGVycHJpc2UgMzDDlzTDlzIwMTYgKyA0MzIwID0gMjQ2LDI0MCDDlyAxLjI1ID0gMzA3LDgwMCDihpIgMzEwLDAwMFxuICpcbiAqIHtAbGluayBhdXRvbWF0aW9uQ2FsbHNGb3J9IGNvbXB1dGVzIGV4YWN0bHkgdGhpcywgYW5kIHRoZSB0aWVyIHRlc3RzIGhvbGQgdGhlXG4gKiB0YWJsZSB0byBpdC4gT3ZlciB0aGUgY2FwIHRoZSA0MjkgaXMgU09GVCBmb3IgYSBiYW5kICh7QGxpbmsgcXVvdGFHcmFjZVBjdH0pOlxuICogYSBzZWxmLW11dGF0aW5nIHBpcGVsaW5lIHRoYXQgaGFyZC1zdG9wcGVkIGF0IDEwMCUgc3RheWVkIHN0b3BwZWQgdW50aWwgdGhlXG4gKiBwZXJpb2QgcmVzZXQsIHVwIHRvIDMgZGF5cy4gVGhlIGxpbWl0cyBhcmUgUEVSIFBFUklPRDogYW4gb3BlcmF0b3Igd2hvXG4gKiBsZW5ndGhlbnMgYFFVT1RBX1JFU0VUX0RBWVNgIHNob3VsZCBzY2FsZSBgUVVPVEFfVElFUl88VElFUj5fQVVUT01BVElPTl9DQUxMU2BcbiAqIGJ5IHRoZSBzYW1lIGZhY3Rvci5cbiAqL1xuZXhwb3J0IGNvbnN0IEFVVE9NQVRJT05fQ0FMTFNfU0laSU5HID0ge1xuICBjYWxsc1BlclJ1bjoge1xuICAgIHBsdWdpbkxvb2t1cHM6IDEyLFxuICAgIHN5bnRoOiAxLFxuICAgIHJ1bnRpbWVDaGVjazogMSxcbiAgICBzZWN1cml0eVJlcG9ydFVwbG9hZDogMSxcbiAgICByZWdpc3RyeVJlZ2lzdGVyOiAxLFxuICAgIGluZ2VzdEJhdGNoZXM6IDEyLFxuICB9LFxuICBydW5zUGVyRGF5OiAyNCxcbiAgYWN0aXZlUGlwZWxpbmVzUGVyQ3JlYXRpb246IDQsXG4gIC8qKiBJbmdlc3QtaGVhbHRoIGhlYXJ0YmVhdHMgcGVyIG9yZyBwZXIgZGF5ICjiiaQgb25lIGEgbWludXRlKS4gKi9cbiAgaGVhcnRiZWF0c1BlckRheTogMTQ0MCxcbiAgLyoqIE11bHRpcGxpZXIgb24gdGhlIGl0ZW1pemVkIHRvdGFsLiAqL1xuICBoZWFkcm9vbTogMS4yNSxcbiAgLyoqIERlZmF1bHRzIHJvdW5kIFVQIHRvIGEgbXVsdGlwbGUgb2YgdGhpcy4gKi9cbiAgcm91bmRUbzogMTBfMDAwLFxufSBhcyBjb25zdDtcblxuLyoqIFRoZSB7QGxpbmsgQVVUT01BVElPTl9DQUxMU19TSVpJTkd9IGZvcm11bGEgZm9yIGEgdGllciBjcmVhdGluZyBgcGlwZWxpbmVzYCBwZXIgcGVyaW9kLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1dG9tYXRpb25DYWxsc0ZvcihwaXBlbGluZXM6IG51bWJlciwgcGVyaW9kRGF5czogbnVtYmVyID0gMyk6IG51bWJlciB7XG4gIGNvbnN0IHMgPSBBVVRPTUFUSU9OX0NBTExTX1NJWklORztcbiAgY29uc3QgcGVyUnVuID0gT2JqZWN0LnZhbHVlcyhzLmNhbGxzUGVyUnVuKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgY29uc3QgcGVyUGlwZWxpbmUgPSBwZXJSdW4gKiBzLnJ1bnNQZXJEYXkgKiBwZXJpb2REYXlzO1xuICBjb25zdCB0b3RhbCA9IChwaXBlbGluZXMgKiBzLmFjdGl2ZVBpcGVsaW5lc1BlckNyZWF0aW9uICogcGVyUGlwZWxpbmUgKyBzLmhlYXJ0YmVhdHNQZXJEYXkgKiBwZXJpb2REYXlzKSAqIHMuaGVhZHJvb207XG4gIHJldHVybiBNYXRoLmNlaWwodG90YWwgLyBzLnJvdW5kVG8pICogcy5yb3VuZFRvO1xufVxuXG4vKipcbiAqIENvZGUtZGVmYXVsdCBsaW1pdHMgcGVyIHRpZXIg4oCUIHRoZSBmYWxsYmFjayB3aGVuIG5vIGVudiBvdmVycmlkZSBpcyBzZXQuXG4gKlxuICogU0VSVkVSIENPREUgV0FOVFMgYGdldFRpZXJMaW1pdHModGllcilgIC8gYFFVT1RBX1RJRVJTW3RpZXJdLmxpbWl0c2AsIG5vdCB0aGlzXG4gKiB0YWJsZTogdGhvc2UgY2FycnkgdGhlIGRlcGxveW1lbnQncyBgUVVPVEFfVElFUl8qYCBvdmVycmlkZXMsIGFuZCB0aGlzIGlzIHdoYXRcbiAqIHRoZXkgZmFsbCBiYWNrIHRvLiBJdCBpcyBleHBvcnRlZCBmb3IgdGhlIEJST1dTRVIsIHdoaWNoIGhhcyBubyBlbnYgdG8gb3ZlcmxheVxuICogYW5kIGdldHMgdGhlIGRlcGxveW1lbnQncyBlZmZlY3RpdmUgZmlndXJlcyBmcm9tIGAvY29uZmlnYCBpbnN0ZWFkLlxuICogLTEgbWVhbnMgdW5saW1pdGVkLiAoQ291bnRzIHNpemVkIHRvIFwiY29tZm9ydGFibHkgZW5vdWdoIGZvciBvbmUgdGVhbSwgbm90XG4gKiBzY3JpcHQgc3BhbVwiOiAyMCBkYXNoYm9hcmRzLCA1MCBhbGVydCBydWxlcywgMTAgZGVzdGluYXRpb25zLCAxIElkUCBjb25maWdcbiAqIGZvciBEZXZlbG9wZXI7IHNjYWxlZCB1cCBmb3IgUHJvOyAtMSAodW5jYXBwZWQpIGZvciB0aGUgY2hlYXAgY291bnQtcXVvdGFzXG4gKiBvbiBUZWFtL0VudGVycHJpc2Ugd2hpbGUgY29zdC1kcml2aW5nIHF1b3RhcyDigJQgaW5jbC4gYXBpQ2FsbHMg4oCUIHN0YXkgZmluaXRlLilcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVElFUl9MSU1JVFM6IFJlY29yZDxRdW90YVRpZXIsIFF1b3RhVGllckxpbWl0cz4gPSB7XG4gIC8vIEZyZWUgdGllcjogc2luZ2xlIHNlYXQsIDIgcGlwZWxpbmVzLCBhcGlDYWxscyBDQVBQRUQgKHdhcyB1bmxpbWl0ZWQg4oCUIGFcbiAgLy8gRG9TL2FidXNlIGhvbGUgb24gYSBzaGFyZWQgcmVzb3VyY2UpOyBhaUNhbGxzIHNtYWxsIChlYWNoIGhhcyB+JDAuMDEtMC4xMFxuICAvLyBleHRlcm5hbCBjb3N0KS4gTGVhbiBiYXNlIOKAlCBncm93dGggaGFwcGVucyBieSB1cGdyYWRpbmcsIG5vdCBzdGFja2luZyBoZXJlLlxuICBkZXZlbG9wZXI6IHtcbiAgICBwbHVnaW5zOiAxMCxcbiAgICBwaXBlbGluZXM6IDIsXG4gICAgYXBpQ2FsbHM6IDI1XzAwMCxcbiAgICBhdXRvbWF0aW9uQ2FsbHM6IDMwXzAwMCxcbiAgICBhaUNhbGxzOiAyMCxcbiAgICBjcHVDcmVkaXRzOiA0XzUwMCxcbiAgICBzdG9yYWdlQnl0ZXM6IDIgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAyMCxcbiAgICBhbGVydFJ1bGVzOiA1MCxcbiAgICBhbGVydERlc3RpbmF0aW9uczogMTAsXG4gICAgaWRwQ29uZmlnczogMSxcbiAgICBsaXN0aW5nczogMyxcbiAgICBzZWF0czogMSxcbiAgICBzdXBwb3J0Q29udGFjdHM6IDAsXG4gICAgc3VwcG9ydFByZW1pdW1Db250YWN0czogMCxcbiAgICBldmVudFJldGVudGlvbkRheXM6IDMwLFxuICAgIGRvcmFSZXRlbnRpb25EYXlzOiAxODAsXG4gIH0sXG4gIC8vIFBybyA9IGluZGl2aWR1YWwgcG93ZXIgdXNlciwgc2luZ2xlIHNlYXQsIGluZGl2aWR1YWwgcHJpY2luZy4gQSAybmQgc2VhdCAob3JcbiAgLy8gdGVhbSBjb2xsYWJvcmF0aW9uKSByZXF1aXJlcyB0aGUgVGVhbSB0aWVyIOKAlCB0aGUgYHNlYXRgIGFkZC1vbiBpcyBUZWFtKyBvbmx5LFxuICAvLyBrZWVwaW5nIFRlYW0gdGhlIGNvbGxhYm9yYXRpb24gdGllci4gUHJvJ3MgdmFsdWUgb3ZlciBEZXZlbG9wZXIgaXMgaXRzIHJpY2hlclxuICAvLyBjYWxsL3N0b3JhZ2UvcGx1Z2luIGNlaWxpbmdzICsgZmVhdHVyZSBhZGQtb25zIChTU08vYXVkaXQvRE9SQSksIG5vdCBzZWF0cy5cbiAgcHJvOiB7XG4gICAgcGx1Z2luczogMjUsXG4gICAgcGlwZWxpbmVzOiA1LFxuICAgIGFwaUNhbGxzOiAxMDBfMDAwLFxuICAgIGF1dG9tYXRpb25DYWxsczogNjBfMDAwLFxuICAgIGFpQ2FsbHM6IDIwMCxcbiAgICBjcHVDcmVkaXRzOiAxMV8yNTAsXG4gICAgc3RvcmFnZUJ5dGVzOiAyNSAqIEdCLFxuICAgIGRhc2hib2FyZHM6IDIwMCxcbiAgICBhbGVydFJ1bGVzOiA1MDAsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IDUwLFxuICAgIGlkcENvbmZpZ3M6IDUsXG4gICAgbGlzdGluZ3M6IDEwLFxuICAgIHNlYXRzOiAxLFxuICAgIHN1cHBvcnRDb250YWN0czogMCxcbiAgICBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzOiAwLFxuICAgIGV2ZW50UmV0ZW50aW9uRGF5czogMzAsXG4gICAgZG9yYVJldGVudGlvbkRheXM6IDE4MCxcbiAgfSxcbiAgLy8gVGVhbSA9IGNvbGxhYm9yYXRpb24gdGllcjsgdGhlIHNlYXQgbGltaXQgKDMpIGlzIHRoZSByZWFsIGRpZmZlcmVudGlhdG9yIG92ZXJcbiAgLy8gUHJvIChzaW5nbGUtc2VhdCkg4oCUIGl0J3MgdGhlIG11bHRpLXNlYXQgY29sbGFib3JhdGlvbiBmbG9vci4gTGVhbiBiYXNlICgkNzkpOlxuICAvLyBncm93dGggcmlkZXMgdGhlIHNlYXQvcGlwZWxpbmUvZXRjIGFkZC1vbnMgKGxhbmQtYW5kLWV4cGFuZCkuIExpbWl0cyBzaXRcbiAgLy8gYmV0d2VlbiBQcm8gYW5kIEVudGVycHJpc2UuXG4gIHRlYW06IHtcbiAgICBwbHVnaW5zOiA1MCxcbiAgICBwaXBlbGluZXM6IDEwLFxuICAgIGFwaUNhbGxzOiAzMDBfMDAwLFxuICAgIGF1dG9tYXRpb25DYWxsczogMTEwXzAwMCxcbiAgICBhaUNhbGxzOiA2MDAsXG4gICAgY3B1Q3JlZGl0czogMjJfNTAwLFxuICAgIHN0b3JhZ2VCeXRlczogNjAgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAtMSxcbiAgICBhbGVydFJ1bGVzOiAtMSxcbiAgICBhbGVydERlc3RpbmF0aW9uczogLTEsXG4gICAgaWRwQ29uZmlnczogNSxcbiAgICBsaXN0aW5nczogMjUsXG4gICAgc2VhdHM6IDMsXG4gICAgc3VwcG9ydENvbnRhY3RzOiAwLFxuICAgIHN1cHBvcnRQcmVtaXVtQ29udGFjdHM6IDAsXG4gICAgZXZlbnRSZXRlbnRpb25EYXlzOiAzMCxcbiAgICBkb3JhUmV0ZW50aW9uRGF5czogMTgwLFxuICB9LFxuICAvLyBCdXNpbmVzcyAoJDI0OSk6IHRoZSBzdGVwIHRoZSAkNzkgLT4gJDU5OSBjbGlmZiB3YXMgbWlzc2luZy4gOCBzZWF0cywgMjBcbiAgLy8gcGlwZWxpbmVzLCBhbmQgRE9SQSAoYWR2YW5jZWRfcmVwb3J0aW5nKSBpbmNsdWRlZCByYXRoZXIgdGhhbiBhbiBhZGQtb24uXG4gIC8vIEV2ZXJ5IGNvc3QgZHJpdmVyIGlzIDEwMCwwMDAgYXBpQ2FsbHMgYW5kIDIwMCBhaUNhbGxzIFBFUiBTRUFULCB0aGUgc2FtZVxuICAvLyBwZXItc2VhdCByYXRlIGFzIFByby9UZWFtL0VudGVycHJpc2UsIHNvIHRoZSBsYWRkZXIgcmVhZHMgY29uc2lzdGVudGx5IHRvIGFcbiAgLy8gYnV5ZXIgd2hvIGRpdmlkZXMgYnkgaGVhZGNvdW50LiBDb3VudC1xdW90YXMgdGhhdCBUZWFtIGFscmVhZHkgdW5jYXBzIHN0YXlcbiAgLy8gLTE7IGBpZHBDb25maWdzYCBzaXRzIGJldHdlZW4gVGVhbSdzIDUgYW5kIEVudGVycHJpc2UncyB1bmxpbWl0ZWQuXG4gIGJ1c2luZXNzOiB7XG4gICAgcGx1Z2luczogMTAwLFxuICAgIHBpcGVsaW5lczogMjAsXG4gICAgYXBpQ2FsbHM6IDgwMF8wMDAsXG4gICAgYXV0b21hdGlvbkNhbGxzOiAyMTBfMDAwLFxuICAgIGFpQ2FsbHM6IDFfNjAwLFxuICAgIGNwdUNyZWRpdHM6IDQ1XzAwMCxcbiAgICBzdG9yYWdlQnl0ZXM6IDEyMCAqIEdCLFxuICAgIGRhc2hib2FyZHM6IC0xLFxuICAgIGFsZXJ0UnVsZXM6IC0xLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAtMSxcbiAgICBpZHBDb25maWdzOiAxMCxcbiAgICBsaXN0aW5nczogNTAsXG4gICAgc2VhdHM6IDgsXG4gICAgc3VwcG9ydENvbnRhY3RzOiAwLFxuICAgIHN1cHBvcnRQcmVtaXVtQ29udGFjdHM6IDAsXG4gICAgZXZlbnRSZXRlbnRpb25EYXlzOiAzMCxcbiAgICBkb3JhUmV0ZW50aW9uRGF5czogMTgwLFxuICB9LFxuICAvLyBFbnRlcnByaXNlICgkNTk5LCBoZWxkKTogdGhlIGFsbC1pbmNsdXNpdmUgdGllciDigJQgMTUgc2VhdHMsIDMwIHBpcGVsaW5lcywgQUxMXG4gIC8vIHByZW1pdW0gZmVhdHVyZXMgaW5jbHVkZWQgKHNlZSBUSUVSX0ZFQVRVUkVTKS4gRkFJUi1VU0Ug4oCUIGNvc3QgZHJpdmVycyAoYXBpQ2FsbHMsXG4gIC8vIGFpQ2FsbHMsIHN0b3JhZ2VCeXRlcykgY2FwcGVkIHNvIG9uZSBhY2NvdW50IGNhbid0IHJ1biB1cCB1bmJvdW5kZWRcbiAgLy8gY29tcHV0ZS9wcm92aWRlci9zdG9yYWdlIGNvc3Qgb24gYSBmbGF0IHByaWNlOyBjaGVhcCBjb3VudC1xdW90YXMgc3RheSAtMS5cbiAgZW50ZXJwcmlzZToge1xuICAgIHBsdWdpbnM6IDE1MCxcbiAgICBwaXBlbGluZXM6IDMwLFxuICAgIGFwaUNhbGxzOiAxXzUwMF8wMDAsXG4gICAgYXV0b21hdGlvbkNhbGxzOiAzMTBfMDAwLFxuICAgIGFpQ2FsbHM6IDNfMDAwLFxuICAgIGNwdUNyZWRpdHM6IDY3XzUwMCxcbiAgICBzdG9yYWdlQnl0ZXM6IDI1MCAqIEdCLFxuICAgIGRhc2hib2FyZHM6IC0xLFxuICAgIGFsZXJ0UnVsZXM6IC0xLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAtMSxcbiAgICBpZHBDb25maWdzOiAtMSxcbiAgICBsaXN0aW5nczogMTAwLFxuICAgIHNlYXRzOiAxNSxcbiAgICBzdXBwb3J0Q29udGFjdHM6IDAsXG4gICAgc3VwcG9ydFByZW1pdW1Db250YWN0czogMCxcbiAgICBldmVudFJldGVudGlvbkRheXM6IDMwLFxuICAgIGRvcmFSZXRlbnRpb25EYXlzOiAxODAsXG4gIH0sXG4gIC8vIFVubGltaXRlZDogRVZFUlkgcXVvdGEgdW5jYXBwZWQgKC0xKS4gVGhlIGRlZmF1bHQgd2hlbiBiaWxsaW5nIGlzIGRpc2FibGVkXG4gIC8vIChubyBlbmZvcmNlbWVudCBzdXJmYWNlKSDigJQgbmV2ZXIgc2hvd24vc2VsZWN0YWJsZSB3aGVuIGJpbGxpbmcgaXMgZW5hYmxlZC5cbiAgdW5saW1pdGVkOiB7XG4gICAgcGx1Z2luczogLTEsXG4gICAgcGlwZWxpbmVzOiAtMSxcbiAgICBhcGlDYWxsczogLTEsXG4gICAgYXV0b21hdGlvbkNhbGxzOiAtMSxcbiAgICBhaUNhbGxzOiAtMSxcbiAgICBjcHVDcmVkaXRzOiAtMSxcbiAgICBzdG9yYWdlQnl0ZXM6IC0xLFxuICAgIGRhc2hib2FyZHM6IC0xLFxuICAgIGFsZXJ0UnVsZXM6IC0xLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAtMSxcbiAgICBpZHBDb25maWdzOiAtMSxcbiAgICBsaXN0aW5nczogLTEsXG4gICAgc2VhdHM6IC0xLFxuICAgIHN1cHBvcnRDb250YWN0czogLTEsXG4gICAgc3VwcG9ydFByZW1pdW1Db250YWN0czogLTEsXG4gICAgZXZlbnRSZXRlbnRpb25EYXlzOiAtMSxcbiAgICBkb3JhUmV0ZW50aW9uRGF5czogLTEsXG4gIH0sXG59O1xuIl19
|
|
254
|
+
// -----------------------------------------------------------------------------
|
|
255
|
+
// Tier-ladder facts the browser decides with too
|
|
256
|
+
// -----------------------------------------------------------------------------
|
|
257
|
+
/** Tiers that permit the org → team hierarchy (nesting teams under a root). The
|
|
258
|
+
* billing-off `unlimited` tier is team-capable (it's the most permissive); the
|
|
259
|
+
* entry-level `developer`/`pro` tiers are not. Single source for the parent-
|
|
260
|
+
* eligibility + downgrade-overcap checks so they can't drift. */
|
|
261
|
+
export const TEAM_CAPABLE_TIERS = ['team', 'business', 'enterprise', 'unlimited'];
|
|
262
|
+
export function tierAllowsTeams(tier) {
|
|
263
|
+
return !!tier && TEAM_CAPABLE_TIERS.includes(tier);
|
|
264
|
+
}
|
|
265
|
+
/** Tiers that may buy extra seats — billing's per-seat `seat` add-on. Seats are
|
|
266
|
+
* the Team differentiator, so the single-seat `developer`/`pro` tiers cannot
|
|
267
|
+
* stack them and must upgrade instead; `unlimited` has no seat cap at all.
|
|
268
|
+
* Single source for the billing catalog and every "out of seats" message. */
|
|
269
|
+
export const SEAT_PACK_TIERS = ['team', 'business', 'enterprise'];
|
|
270
|
+
/**
|
|
271
|
+
* The remedy to offer an account at its seat cap, from the ACCOUNT's (root) tier:
|
|
272
|
+
* `seat_pack` where seats can be bought, `upgrade` on the single-seat tiers.
|
|
273
|
+
* `null` when the tier is unknown or has no cap — say nothing rather than guess.
|
|
274
|
+
*/
|
|
275
|
+
export function seatRemedy(tier) {
|
|
276
|
+
if (!tier || !Object.hasOwn(DEFAULT_TIER_LIMITS, tier) || tier === 'unlimited')
|
|
277
|
+
return null;
|
|
278
|
+
return SEAT_PACK_TIERS.includes(tier) ? 'seat_pack' : 'upgrade';
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGllci1saW1pdHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy90aWVyLWxpbWl0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBNEJ0Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBWTtJQUNwQyxPQUFPLElBQUk7U0FDUixLQUFLLENBQUMsTUFBTSxDQUFDO1NBQ2IsTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUNmLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLENBQUM7QUFzR0Q7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFOUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyxXQUFXLEVBQUU7UUFDWCxhQUFhLEVBQUUsRUFBRTtRQUNqQixLQUFLLEVBQUUsQ0FBQztRQUNSLFlBQVksRUFBRSxDQUFDO1FBQ2Ysb0JBQW9CLEVBQUUsQ0FBQztRQUN2QixnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLGFBQWEsRUFBRSxFQUFFO0tBQ2xCO0lBQ0QsVUFBVSxFQUFFLEVBQUU7SUFDZCwwQkFBMEIsRUFBRSxDQUFDO0lBQzdCLGlFQUFpRTtJQUNqRSxnQkFBZ0IsRUFBRSxJQUFJO0lBQ3RCLHdDQUF3QztJQUN4QyxRQUFRLEVBQUUsSUFBSTtJQUNkLCtDQUErQztJQUMvQyxPQUFPLEVBQUUsTUFBTTtDQUNQLENBQUM7QUFFWCw4RkFBOEY7QUFDOUYsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFNBQWlCLEVBQUUsVUFBVSxHQUFXLENBQUM7SUFDMUUsTUFBTSxDQUFDLEdBQUcsdUJBQXVCLENBQUM7SUFDbEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RSxNQUFNLFdBQVcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLDBCQUEwQixHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUN0SCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUF1QztJQUNyRSwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUM5RSxTQUFTLEVBQUU7UUFDVCxPQUFPLEVBQUUsRUFBRTtRQUNYLFNBQVMsRUFBRSxDQUFDO1FBQ1osUUFBUSxFQUFFLE1BQU07UUFDaEIsZUFBZSxFQUFFLE1BQU07UUFDdkIsT0FBTyxFQUFFLEVBQUU7UUFDWCxVQUFVLEVBQUUsS0FBSztRQUNqQixZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUU7UUFDcEIsVUFBVSxFQUFFLEVBQUU7UUFDZCxVQUFVLEVBQUUsRUFBRTtRQUNkLGlCQUFpQixFQUFFLEVBQUU7UUFDckIsVUFBVSxFQUFFLENBQUM7UUFDYixRQUFRLEVBQUUsQ0FBQztRQUNYLEtBQUssRUFBRSxDQUFDO1FBQ1IsZUFBZSxFQUFFLENBQUM7UUFDbEIsc0JBQXNCLEVBQUUsQ0FBQztRQUN6QixrQkFBa0IsRUFBRSxFQUFFO1FBQ3RCLGlCQUFpQixFQUFFLEdBQUc7S0FDdkI7SUFDRCwrRUFBK0U7SUFDL0UsZ0ZBQWdGO0lBQ2hGLGdGQUFnRjtJQUNoRiw4RUFBOEU7SUFDOUUsR0FBRyxFQUFFO1FBQ0gsT0FBTyxFQUFFLEVBQUU7UUFDWCxTQUFTLEVBQUUsQ0FBQztRQUNaLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLGVBQWUsRUFBRSxNQUFNO1FBQ3ZCLE9BQU8sRUFBRSxHQUFHO1FBQ1osVUFBVSxFQUFFLE1BQU07UUFDbEIsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQ3JCLFVBQVUsRUFBRSxHQUFHO1FBQ2YsVUFBVSxFQUFFLEdBQUc7UUFDZixpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLFVBQVUsRUFBRSxDQUFDO1FBQ2IsUUFBUSxFQUFFLEVBQUU7UUFDWixLQUFLLEVBQUUsQ0FBQztRQUNSLGVBQWUsRUFBRSxDQUFDO1FBQ2xCLHNCQUFzQixFQUFFLENBQUM7UUFDekIsa0JBQWtCLEVBQUUsRUFBRTtRQUN0QixpQkFBaUIsRUFBRSxHQUFHO0tBQ3ZCO0lBQ0QsZ0ZBQWdGO0lBQ2hGLGdGQUFnRjtJQUNoRiwyRUFBMkU7SUFDM0UsOEJBQThCO0lBQzlCLElBQUksRUFBRTtRQUNKLE9BQU8sRUFBRSxFQUFFO1FBQ1gsU0FBUyxFQUFFLEVBQUU7UUFDYixRQUFRLEVBQUUsT0FBTztRQUNqQixlQUFlLEVBQUUsT0FBTztRQUN4QixPQUFPLEVBQUUsR0FBRztRQUNaLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRTtRQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2QsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNkLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUNyQixVQUFVLEVBQUUsQ0FBQztRQUNiLFFBQVEsRUFBRSxFQUFFO1FBQ1osS0FBSyxFQUFFLENBQUM7UUFDUixlQUFlLEVBQUUsQ0FBQztRQUNsQixzQkFBc0IsRUFBRSxDQUFDO1FBQ3pCLGtCQUFrQixFQUFFLEVBQUU7UUFDdEIsaUJBQWlCLEVBQUUsR0FBRztLQUN2QjtJQUNELDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UscUVBQXFFO0lBQ3JFLFFBQVEsRUFBRTtRQUNSLE9BQU8sRUFBRSxHQUFHO1FBQ1osU0FBUyxFQUFFLEVBQUU7UUFDYixRQUFRLEVBQUUsT0FBTztRQUNqQixlQUFlLEVBQUUsT0FBTztRQUN4QixPQUFPLEVBQUUsS0FBSztRQUNkLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFlBQVksRUFBRSxHQUFHLEdBQUcsRUFBRTtRQUN0QixVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2QsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNkLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUNyQixVQUFVLEVBQUUsRUFBRTtRQUNkLFFBQVEsRUFBRSxFQUFFO1FBQ1osS0FBSyxFQUFFLENBQUM7UUFDUixlQUFlLEVBQUUsQ0FBQztRQUNsQixzQkFBc0IsRUFBRSxDQUFDO1FBQ3pCLGtCQUFrQixFQUFFLEVBQUU7UUFDdEIsaUJBQWlCLEVBQUUsR0FBRztLQUN2QjtJQUNELGdGQUFnRjtJQUNoRixvRkFBb0Y7SUFDcEYsc0VBQXNFO0lBQ3RFLDZFQUE2RTtJQUM3RSxVQUFVLEVBQUU7UUFDVixPQUFPLEVBQUUsR0FBRztRQUNaLFNBQVMsRUFBRSxFQUFFO1FBQ2IsUUFBUSxFQUFFLFNBQVM7UUFDbkIsZUFBZSxFQUFFLE9BQU87UUFDeEIsT0FBTyxFQUFFLEtBQUs7UUFDZCxVQUFVLEVBQUUsTUFBTTtRQUNsQixZQUFZLEVBQUUsR0FBRyxHQUFHLEVBQUU7UUFDdEIsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNkLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDZCxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNkLFFBQVEsRUFBRSxHQUFHO1FBQ2IsS0FBSyxFQUFFLEVBQUU7UUFDVCxlQUFlLEVBQUUsQ0FBQztRQUNsQixzQkFBc0IsRUFBRSxDQUFDO1FBQ3pCLGtCQUFrQixFQUFFLEVBQUU7UUFDdEIsaUJBQWlCLEVBQUUsR0FBRztLQUN2QjtJQUNELDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UsU0FBUyxFQUFFO1FBQ1QsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNYLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDYixRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ1osZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNuQixPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ1gsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNkLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDaEIsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNkLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDZCxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNkLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDWixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNuQixzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDMUIsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLGlCQUFpQixFQUFFLENBQUMsQ0FBQztLQUN0QjtDQUNGLENBQUM7QUFFRixnRkFBZ0Y7QUFDaEYsaURBQWlEO0FBQ2pELGdGQUFnRjtBQUVoRjs7O2tFQUdrRTtBQUNsRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBeUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN4RyxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQStCO0lBQzdELE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSyxrQkFBd0MsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVEOzs7OEVBRzhFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBeUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBS3hGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQStCO0lBQ3hELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxXQUFXO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDNUYsT0FBUSxlQUFxQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDekYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFdoYXQgYSB0aWVyIEdJVkVTIHlvdSwgYXMgREFUQSBPTkxZIOKAlCB0aGUgbGltaXRzIHNoYXBlLCB0aGUgY29kZS1kZWZhdWx0XG4gKiBudW1iZXIgZm9yIGV2ZXJ5IHRpZXIgeCBxdW90YSB0eXBlLCBhbmQgdGhlIGFyaXRobWV0aWMgdGhvc2UgbnVtYmVycyB3ZXJlXG4gKiBkZXJpdmVkIGZyb20uXG4gKlxuICogRGVwZW5kZW5jeS1mcmVlIGFuZCBlbnYtZnJlZSBzbyB0aGUgYnJvd3NlciBpbXBvcnRzIGl0IGRpcmVjdGx5XG4gKiAoYEBwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlL3RpZXItbGltaXRzYCkuIEl0cyBvbmx5IGltcG9ydCBpcyBhIHR5cGUsIHdoaWNoXG4gKiBpcyBlcmFzZWQgYXQgY29tcGlsZSB0aW1lLCBzbyBub3RoaW5nIG9mIHRoZSBzZXJ2ZXIgZ3JhcGggcmVhY2hlcyB0aGUgYnVuZGxlLlxuICogVGhlIGVudiBPVkVSTEFZIChgUVVPVEFfVElFUl88VElFUj5fPExJTUlUPmApIGRlbGliZXJhdGVseSBzdGF5cyBpblxuICogYHF1b3RhLXRpZXJzLnRzYDogaXQgcmVhZHMgYHByb2Nlc3MuZW52YCwgd2hpY2ggaXMgd2hhdCBrZXB0IHRoaXMgdGFibGUgb3V0IG9mXG4gKiB0aGUgYnJvd3NlcidzIHJlYWNoIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAqXG4gKiBXSFkgSVQgRVhJU1RTLiBUaGUgZnJvbnRlbmQga2VwdCBhIGhhbmQtd3JpdHRlbiBjb3B5IG9mIHRoaXMgdGFibGVcbiAqIChgZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcXVvdGFzL2NvbnN0YW50cy50c2AsIHVuZGVyIGEgXCJrZWVwIGluIHN5bmNcIlxuICogY29tbWVudCkgYmVjYXVzZSBpbXBvcnRpbmcgdGhlIHJlYWwgb25lIG1lYW50IGltcG9ydGluZyBhIG1vZHVsZSB3aXRoIHNpeHRlZW5cbiAqIGVudiByZWFkcy4gVGhlIGNvcHkgcHJlZmlsbHMgdGhlIHF1b3RhLWFkbWluIGVkaXRvcidzIHBlci10aWVyIHByZXNldHMsIHNvIGFcbiAqIGRyaWZ0ZWQgY29weSBkaWQgbm90IGJyZWFrIHRoZSBwYWdlIOKAlCBhbiBhZG1pbiBjbGlja2VkIGEgcHJlc2V0IGFuZCBTQVZFRFxuICogbnVtYmVycyB0aGF0IHdlcmUgbm8gbG9uZ2VyIHRoZSBwcm9kdWN0J3MsIHdpdGggbm90aGluZyBhbnl3aGVyZSByZXBvcnRpbmcgaXQuXG4gKiBBIHRlc3QgcGFyc2VkIEJPVEggZmlsZXMnIHNvdXJjZSB0ZXh0IHRvIGhvbGQgdGhlbSBlcXVhbCwgd2hpY2ggaXMgdGhlIHNoYXBlXG4gKiB5b3UgcmVhY2ggZm9yIHdoZW4gdGhlIHZhbHVlcyBjYW5ub3QgYmUgc2hhcmVkLiBOb3cgdGhleSBjYW4gYmU6IHRoZSBmcm9udGVuZFxuICogaW1wb3J0cyB0aGlzIHRhYmxlLCB0aGUgY29weSBpcyBnb25lLCBhbmQgdGhlIGRyaWZ0IGl0IGd1YXJkZWQgaXMgbm90XG4gKiBleHByZXNzaWJsZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFF1b3RhVGllciB9IGZyb20gJy4vcXVvdGEtdGllcnMuanMnO1xuXG4vKipcbiAqIEEgdGllciBrZXkgYXMgcHJvZHVjdCBjb3B5OiBgZGV2ZWxvcGVyYCDihpIgXCJEZXZlbG9wZXJcIiwgYHByb19wbHVzYCDihpIgXCJQcm8gUGx1c1wiLlxuICpcbiAqIExpdmVzIGhlcmUsIHdpdGggdGhlIG90aGVyIHRpZXIgZmFjdHMsIGJlY2F1c2UgdGhyZWUgY2FsbGVycyB3YW50IGl0OiB0aGVcbiAqIGRlZmF1bHQgYFFVT1RBX1RJRVJTYCBsYWJlbCwgdGhlIHNoYXJlZCB0ZXN0IGZpeHR1cmUncyBsYWJlbHMgKHdoaWNoIGtlcHQgYVxuICogc2Vjb25kIGB0aXRsZUNhc2VgIG9mIGl0cyBvd24pLCBhbmQgdGhlIGJyb3dzZXIuXG4gKlxuICogSXQgd2lsbCBOT1QgZ3Vlc3MgYXQgYW4gYWNyb255bSAoYHNzb2Ag4oaSIFwiU3NvXCIpIG9yIGEgc3R5bGl6ZWQgbmFtZSAoXCJQcm8rXCIpLFxuICogYW5kIGRlbGliZXJhdGVseSB0YWtlcyBubyBmb3JtYXR0aW5nIG9wdGlvbnM6IHRoZSBjYXNlcyBpdCBjYW5ub3QgZGVyaXZlIG5lZWRcbiAqIGEgaHVtYW4gd3JpdGluZyBjb3B5LCB3aGljaCBpcyB3aGF0IGBRVU9UQV9USUVSXzxUSUVSPl9MQUJFTGAgaXMgZm9yLiBBIG1vZGVcbiAqIGZsYWcgd291bGQgYWRkIHN1cmZhY2Ugd2l0aG91dCByZWFjaGluZyBhbnkgb2YgdGhlbSwgYW5kIGEgbWlkLXNlbnRlbmNlIHBocmFzZVxuICogKFwi4oCmIOKAlCBuZXcgdmVyc2lvblwiKSBpcyBhIGRpZmZlcmVudCBGQUNUIGZyb20gYSBzdGFuZGFsb25lIGxhYmVsIHJhdGhlciB0aGFuXG4gKiBhbm90aGVyIHN0eWxlIG9mIG9uZSDigJQgYHF1b3RhLWNhdGFsb2cudHNgIGNhcnJpZXMgYGxhYmVsYCBhbmQgYGxhYmVsUGx1cmFsYCBhc1xuICogc2VwYXJhdGUgbmFtZWQgZmllbGRzIGZvciBleGFjdGx5IHRoYXQgcmVhc29uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGllckxhYmVsKHRpZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0aWVyXG4gICAgLnNwbGl0KC9bXy1dLylcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLm1hcCgod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpXG4gICAgLmpvaW4oJyAnKTtcbn1cblxuLyoqIExpbWl0IHZhbHVlcyBmb3IgZWFjaCBxdW90YSB0eXBlIHdpdGhpbiBhIHRpZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhVGllckxpbWl0cyB7XG4gIHBsdWdpbnM6IG51bWJlcjtcbiAgcGlwZWxpbmVzOiBudW1iZXI7XG4gIGFwaUNhbGxzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBNZXRlcmVkIEFQSSBjYWxscyBtYWRlIGJ5IE9SRyBTRVJWSUNFIEFDQ09VTlRTIChhdXRvbWF0aW9uKSwgY291bnRlZFxuICAgKiBpbnN0ZWFkIG9mIGBhcGlDYWxsc2Agc28gcGlwZWxpbmVzIGNhbid0IHN0YXJ2ZSB0aGUgb3JnJ3MgcGVvcGxlLiBTZWVcbiAgICoge0BsaW5rIEFVVE9NQVRJT05fQ0FMTFNfU0laSU5HfSBmb3IgaG93IHRoZSBkZWZhdWx0cyBhcmUgZGVyaXZlZC5cbiAgICovXG4gIGF1dG9tYXRpb25DYWxsczogbnVtYmVyO1xuICBhaUNhbGxzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBBZ2dyZWdhdGUgcmVnaXN0cnkgc3RvcmFnZSBjYXAgaW4gQllURVMuIENvdW50ZWQgYWNyb3NzIGV2ZXJ5IHJlcG9cbiAgICogdW5kZXIgdGhlIG9yZydzIGBvcmcte29yZ0lkfS9gIG5hbWVzcGFjZS4gLTEgbWVhbnMgdW5saW1pdGVkLlxuICAgKiBwdXNoLWdhdGUgcmVhZHMgdGhpczsgdGhlIGltYWdlLXJlZ2lzdHJ5IHJlamVjdHMgdG9rZW4gaXNzdWFuY2UgZm9yXG4gICAqIGBwdXNoYCBzY29wZSB3aGVuIHRoZSBvcmcncyBtZWFzdXJlZCB1c2FnZSBleGNlZWRzIHRoZSBsaW1pdC5cbiAgICovXG4gIHN0b3JhZ2VCeXRlczogbnVtYmVyO1xuICAvKipcbiAgICogdkNQVS1NSU5VVEVTIG9mIHBsdWdpbi1idWlsZCBjb21wdXRlIHBlciBNT05USCDigJQgdGhlIG9uZSBxdW90YSBvbiBhIHBlcmlvZFxuICAgKiBvZiBpdHMgb3duIChldmVyeSBvdGhlciBmbG93IHF1b3RhIHJvbGxzIG9uIGBRVU9UQV9SRVNFVF9EQVlTYCwgMyBkYXlzKS5cbiAgICpcbiAgICogRGVyaXZlZCBmcm9tIHRoZSBgcGx1Z2luc2AgY2FwIHJhdGhlciB0aGFuIGd1ZXNzZWQ6IGBwbHVnaW5zIHggMTBgIGJ1aWxkcyBhXG4gICAqIG1vbnRoLCBhdCBhIGZsYXQgMzAgd2FsbC1taW51dGVzIGEgYnVpbGQgYW5kIDEuNSB2Q1BVIG9mIGJ1aWxka2l0ZCwgc29cbiAgICogYGNyZWRpdHMgPSBidWlsZHMgeCA0NWAuIFRoZSBmbGF0IHBlci1idWlsZCBmaWd1cmUgaXMgZGVsaWJlcmF0ZSDigJQgc2NhbGluZ1xuICAgKiBCT1RIIHRoZSBidWlsZCBjb3VudCBhbmQgdGhlIHBlci1idWlsZCBjb3N0IGJ5IHRpZXIgbWFkZSBjcmVkaXRzXG4gICAqIHN1cGVybGluZWFyIGluIHRpZXIgb24gdGhlIHN0cmVuZ3RoIG9mIGFuIHVubWVhc3VyZWQgY2xhaW0sIGFuZCBpdCBtYWRlIGFcbiAgICogcGFjaydzIGNyZWRpdCBncmFudCB0aWVyLWRlcGVuZGVudCwgd2hpY2ggdGhlIGNhdGFsb2d1ZSdzIGdyYW50IHNoYXBlIGNhbm5vdFxuICAgKiBleHByZXNzLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBmaXJzdCBkaW1lbnNpb24gd2l0aCBnZW51aW5lIHBlci11bml0IG1hcmdpbmFsIGNvc3Q6IGV2ZXJ5IG90aGVyXG4gICAqIHF1b3RhIGlzIGEgcmF0ZSBsaW1pdCBwcm90ZWN0aW5nIHNoYXJlZCBpbmZyYXN0cnVjdHVyZSwgdGhpcyBvbmUgaXMgY29tcHV0ZVxuICAgKiB0aGUgcGxhdGZvcm0gcGF5cyBmb3IuIFNlZSBgZG9jcy9wbGFucy9jcHUtY3JlZGl0cy5tZGAuXG4gICAqL1xuICBjcHVDcmVkaXRzOiBudW1iZXI7XG4gIC8qKiBDb3VudC1xdW90YXMgb24gdGhlIHVzZXItZWRpdGFibGUgZmVhdHVyZSB0YWJsZXMgYWRkZWQgdG8gY2xvc2UgcGVyLW9yZ1xuICAgKiAgRG9TIHZpYSBzcGFtLiAtMSBtZWFucyB1bmxpbWl0ZWQuICovXG4gIGRhc2hib2FyZHM6IG51bWJlcjtcbiAgYWxlcnRSdWxlczogbnVtYmVyO1xuICBhbGVydERlc3RpbmF0aW9uczogbnVtYmVyO1xuICBpZHBDb25maWdzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBBY3RpdmUsIG5vbi1zdXNwZW5kZWQgcGx1Z2luLWVjb3N5c3RlbSBsaXN0aW5ncyB0aGUgb3JnIHB1Ymxpc2hlc1xuICAgKiAoZG9jcy9wbHVnaW4taW5zdGFsbGluZy5tZCkuIEEgQ09VTlQgcXVvdGEg4oCUIGluc3RhbGxzIG5ldmVyXG4gICAqIGNvdW50LiAtMSA9IHVubGltaXRlZC4gRXh0ZW5kYWJsZSB2aWEgdGhlIGBsaXN0aW5nX3BhY2tgIGFkZC1vbiBidW5kbGUuXG4gICAqL1xuICBsaXN0aW5nczogbnVtYmVyO1xuICAvKipcbiAgICogTWF4IG9yZyBtZW1iZXJzIChhY3RpdmUgdXNlcnMgLyBzZWF0cykuIC0xID0gdW5saW1pdGVkLiBUaGlzIGlzIHRoZSBcIlRlYW1cIlxuICAgKiB0aWVyIGRpZmZlcmVudGlhdG9yIOKAlCBlbmZvcmNlZCBhdCBtZW1iZXItaW52aXRlIHRpbWUgKGFuIGludml0ZSBpcyBibG9ja2VkXG4gICAqIHdoZW4gYWN0aXZlIG1lbWJlcnMgKyBwZW5kaW5nIGludml0ZXMgd291bGQgZXhjZWVkIHRoaXMpLlxuICAgKi9cbiAgc2VhdHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heCBkZXNpZ25hdGVkIFNVUFBPUlQgQ09OVEFDVFMg4oCUIHRoZSBtZW1iZXJzIGF1dGhvcmlzZWQgdG8gb3BlbiBzdXBwb3J0XG4gICAqIGNhc2VzLiAtMSA9IHVubGltaXRlZC4gQmFzZSBpcyAqKjAgb24gZXZlcnkgdGllcioqOiBzdXBwb3J0IGlzIGFuIGFkZC1vbiBhdFxuICAgKiBldmVyeSB0aWVyIGFuZCBpbmNsdWRlZCBpbiBub25lLCBzbyBhbiBvcmcgd2l0aCBubyBzdXBwb3J0IGJ1bmRsZSBoYXMgbm9cbiAgICogY29udGFjdHMgYW5kIGNhbm5vdCBvcGVuIGEgY2FzZS4gVGhhdCBtYWtlcyB0aGUgc3VwcG9ydCBwYXl3YWxsIGEgcXVvdGFcbiAgICogY2hlY2sgcmF0aGVyIHRoYW4gYSBmZWF0dXJlIGZsYWcuXG4gICAqXG4gICAqIExpa2UgYHNlYXRzYCB0aGlzIGlzIGEgdGllciBMSU1JVCwgbm90IGEgdHJhY2tlZCBjb3VudGVyIOKAlCBlbmZvcmNlZCBsaXZlIGF0XG4gICAqIGRlc2lnbmF0aW9uIHRpbWUgYWdhaW5zdCBjdXJyZW50IGRlc2lnbmF0aW9ucyBhY3Jvc3MgdGhlIG9yZyBzdWJ0cmVlLlxuICAgKiBFeHRlbmRlZCBwZXIgdW5pdCBieSB0aGUgYHN1cHBvcnRfc3RhbmRhcmRgIC8gYHN1cHBvcnRfcHJpb3JpdHlgIEJBU0VMSU5FXG4gICAqIGJ1bmRsZXMsIHdoaWNoIGFyZSBwcmljZWQgcGVyIGNvbnRhY3QuXG4gICAqL1xuICBzdXBwb3J0Q29udGFjdHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEhvdyBtYW55IG9mIHRob3NlIGNvbnRhY3RzIG1heSBiZSBVUEdSQURFRCB0byBwcmVtaXVtICgyNMOXNywgOC1ob3VyXG4gICAqIHJlc3BvbnNlLCBhbmQgdGhlIG9ubHkgb25lcyB3aG8gbWF5IGRlY2xhcmUgYHVyZ2VudGApLlxuICAgKlxuICAgKiBBIHNlY29uZCBkaW1lbnNpb24gcmF0aGVyIHRoYW4gYSB0aGlyZCBiYXNlbGluZSBsZXZlbCwgYmVjYXVzZSBwcmVtaXVtIGlzIGFuXG4gICAqIFVQR1JBREUgYW5kIG5vdCBhbiBhbHRlcm5hdGl2ZS4gVGhlIHNoYXBlIGl0IGVuY29kZXM6IGFuIG9yZyBidXlzIE4gYmFzZWxpbmVcbiAgICogY29udGFjdHMgYW5kIHVwZ3JhZGVzIE0gb2YgdGhlbSwgTSDiiaQgTi4gVGhhdCBpcyB3aGF0IGxldHMgYSAxMDAtc2VhdFxuICAgKiBjdXN0b21lciBnaXZlIGJ1c2luZXNzLWhvdXJzIHN1cHBvcnQgdG8gaXRzIHRocmVlIG5hbWVkIGNvbnRhY3RzIGFuZCAyNMOXN1xuICAgKiB0byB0aGUgb25lIHdobyBjYXJyaWVzIHRoZSBwYWdlciDigJQgdGhlIGNhc2UgdGhlIG11dHVhbGx5LWV4Y2x1c2l2ZSBsYWRkZXJcbiAgICogY291bGQgbm90IGV4cHJlc3MgYXQgYWxsLCB3aGVyZSBidXlpbmcgXCI5OSBzdGFuZGFyZCArIDEgcHJlbWl1bVwiIGNoYXJnZWQgZm9yXG4gICAqIDEwMCB1bml0cyBhbmQgZ3JhbnRlZCBvbmUgY29udGFjdC5cbiAgICpcbiAgICogQURESVRJVkUsIGRlbGliZXJhdGVseS4gQSBwcmVtaXVtIGNvbnRhY3QgY29zdHMgdGhlIGJhc2VsaW5lIHVuaXQgUExVUyB0aGVcbiAgICogdXBncmFkZSAoJDE5Ljk5ICsgJDk5Ljk5KSwgYmVjYXVzZSBpdCBpcyBzZXJ2ZWQgZHVyaW5nIGJ1c2luZXNzIGhvdXJzXG4gICAqIHRocm91Z2ggdGhlIGJhc2VsaW5lIGFuZCBvdmVybmlnaHQgdGhyb3VnaCB0aGUgdXBncmFkZTsgcHJpY2luZyB0aGUgdXBncmFkZVxuICAgKiBhcyBhIGRlbHRhIHdvdWxkIHByZXRlbmQgdGhlIGJhc2VsaW5lIHdlcmUgZnJlZS4gQmFzZSAwIG9uIGV2ZXJ5IHRpZXIsIGxpa2VcbiAgICogYHN1cHBvcnRDb250YWN0c2AsIHNvIHRoZSBwYXl3YWxsIHN0YXlzIGEgcXVvdGEgY2hlY2suXG4gICAqL1xuICBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBSZXBvcnRpbmcgcmV0ZW50aW9uIGluIERBWVMg4oCUIE5PVCBhIGZsb3cgcXVvdGEgKG5ldmVyIGRlY3JlbWVudGVkLCBhYnNlbnRcbiAgICogZnJvbSBgVkFMSURfUVVPVEFfVFlQRVNgKTogdGhlc2UgcmlkZSB0aGUgdGllci1iYXNlbGluZSArIGJ1bmRsZS1ncmFudCBtYXRoXG4gICAqIHB1cmVseSBhcyBhbiBlbnRpdGxlbWVudCB0aGUgYmlsbGluZyBzZXJ2aWNlIHN5bmNzIHRvIHJlcG9ydGluZydzXG4gICAqIGBkb3JhX3NldHRpbmdzYC4gLTEgPSB1bmxpbWl0ZWQgKHRoZSBzd2VlcCBza2lwcyB0aGUgb3JnIGVudGlyZWx5KS5cbiAgICogICBgZXZlbnRSZXRlbnRpb25EYXlzYCDigJQgbm9uLWRlcGxveSBgcGlwZWxpbmVfZXZlbnRzYCAoU1RBR0UvQUNUSU9OL2J1aWxkKS5cbiAgICogICBgZG9yYVJldGVudGlvbkRheXNgICDigJQgZGVwbG95IGV2ZW50cyArIGBkZXBsb3ltZW50X291dGNvbWVzYCArIGBpbmNpZGVudHNgLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBwZXItb3JnIHJlcG9ydC1xdWVyeSB3aW5kb3cgZm9yIERPUkEgcm91dGVzLlxuICAgKiBFeHRlbmRhYmxlIHZpYSB0aGUgYHJldGVudGlvbl9wYWNrYCAvIGBkb3JhX2hpc3RvcnlfcGFja2AgYWRkLW9uIGJ1bmRsZXMuXG4gICAqL1xuICBldmVudFJldGVudGlvbkRheXM6IG51bWJlcjtcbiAgZG9yYVJldGVudGlvbkRheXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcmVzZXQgbGltaXRzIGZvciBlYWNoIHRpZXIuIC0xIG1lYW5zIHVubGltaXRlZC5cbiAqXG4gKiBBSSBjYWxscyBhcmUgc2l6ZWQgbXVjaCBzbWFsbGVyIHRoYW4gYGFwaUNhbGxzYCBiZWNhdXNlIGVhY2ggY2FsbCBoYXNcbiAqIGV4dGVybmFsIHByb3ZpZGVyIGNvc3QgKH4kMC4wMSQwLjEwL2NhbGwpLiBEZXZlbG9wZXIgdGllciBhbGxvd3MgbGlnaHRcbiAqIGV4cGxvcmF0aW9uICg1MC9wZXJpb2QpOyBQcm8gbGlmdHMgdG8gMiw1MDA7IEVudGVycHJpc2UgaXMgY2FwcGVkIGhpZ2hcbiAqICgyNSwwMDApIOKAlCBmYWlyLXVzZSwgbm90IGxpdGVyYWxseSB1bmxpbWl0ZWQuXG4gKlxuICogYHN0b3JhZ2VCeXRlc2AgaXMgdGhlIGFnZ3JlZ2F0ZSByZWdpc3RyeSBjYXAgcGVyIG9yZy4gU2l6ZWRcbiAqIGFyb3VuZCBwbHVnaW4taW1hZ2UgcmVhbGl0aWVzOiBhIHR5cGljYWwgcGx1Z2luIGltYWdlIGlzIDIwMDUwMCBNQjtcbiAqIERldmVsb3BlcidzIDIgR0IgaG9sZHMgfjQgdmVyc2lvbnMgw5cgfjUwMCBNQiwgUHJvJ3MgMjUgR0IgY292ZXJzIGFcbiAqIG1hdHVyZSBjYXRhbG9nLiBPcGVyYXRvcnMgY2FuIG92ZXJyaWRlIHBlci1vcmcgdmlhIHRoZSBxdW90YSBDUlVEIEFQSS5cbiAqL1xuY29uc3QgR0IgPSAxMDI0ICogMTAyNCAqIDEwMjQ7XG5cbi8qKlxuICogSG93IHRoZSBgYXV0b21hdGlvbkNhbGxzYCBkZWZhdWx0cyBhcmUgc2l6ZWQg4oCUIHdyaXR0ZW4gZG93biBzbyB0aGUgbmV4dFxuICogcGVyc29uIHRvIHRvdWNoIHRoZW0gYXJndWVzIHdpdGggdGhlIGFyaXRobWV0aWMsIG5vdCB3aXRoIHRoZSBudW1iZXJzLlxuICpcbiAqIEV2ZXJ5IGNhbGwgYW4gb3JnJ3MgYXV0b21hdGlvbiBrZXlzIG1ha2UgaW4gb25lIHBpcGVsaW5lIFJVTiwgaXRlbWl6ZWQgKHRoZVxuICogZWFybGllciBzaXppbmcgY291bnRlZCBvbmx5IHRoZSBwbHVnaW4gbG9va3VwcyBhbmQgaGFuZC13YXZlZCB0aGUgcmVzdCBhc1xuICogXCLDlzJcIik6XG4gKlxuICogICBwbHVnaW4gbG9va3VwcyAgICAgICAgICAgIDEyICAgb25lIHBlciBwbHVnaW4gc3RlcCAoc2VsZi1tdXRhdGluZyBwaXBlbGluZSlcbiAqICAgc3ludGggICAgICAgICAgICAgICAgICAgICAgMSAgIHRoZSBzeW50aCBzdGVwIGZldGNoaW5nIHRoZSBwaXBlbGluZSBjb25maWdcbiAqICAgcnVudGltZSBjaGVjayAgICAgICAgICAgICAgMSAgIHRoZSBwcmUtZGVwbG95IHJ1bnRpbWUtY2hlY2sgY2FsbFxuICogICBzZWN1cml0eS1yZXBvcnQgdXBsb2FkICAgICAxICAgdGhlIHNjYW4gc3RlcCBwb3N0aW5nIGl0cyByZXBvcnRcbiAqICAgcmVnaXN0cnkgcmVnaXN0ZXIgICAgICAgICAgMSAgIHBpcGVsaW5lLXJlZ2lzdGVyIHN0YW1waW5nIHRoZSBkZXBsb3llZCB2ZXJzaW9uXG4gKiAgIHJlcG9ydGluZyBpbmdlc3QgYmF0Y2hlcyAgMTIgICB0aGUgZXZlbnQgZm9yd2FyZGVyIHBvc3RzIH5vbmUgYmF0Y2ggcGVyIGFjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggICBjYWxscyBwZXIgcnVuXG4gKlxuICogUGVyIGRlZmF1bHQgcGVyaW9kIChgUVVPVEFfUkVTRVRfREFZU2AsIDMgZGF5cykgb25lIGFjdGl2ZSBwaXBlbGluZSBydW5uaW5nXG4gKiBob3VybHkgbWFrZXMgMjggw5cgMjQgw5cgMyA9IDIsMDE2IGNhbGxzLiBBbiBvcmcga2VlcHMgZmFyIG1vcmUgcGlwZWxpbmVzIGFsaXZlXG4gKiB0aGFuIGl0IENSRUFURVMgaW4gYSBwZXJpb2QgKGBwaXBlbGluZXNgIGlzIGEgY3JlYXRpb24gcmF0ZSksIHNvIGFjdGl2ZVxuICogcGlwZWxpbmVzIGFyZSB0YWtlbiBhcyA0w5cgdGhlIHRpZXIncyBgcGlwZWxpbmVzYC4gT24gdG9wIHNpdHMgYSBwZXItT1JHXG4gKiBjb25zdGFudCB0aGF0IGRvZXMgbm90IHNjYWxlIHdpdGggcGlwZWxpbmVzOiB0aGUgaW5nZXN0LWhlYWx0aCBoZWFydGJlYXRcbiAqICjiiaQgMS9taW51dGUg4oaSIDEsNDQwL2RheSDihpIgNCwzMjAvcGVyaW9kKS4gVGhlIHN1bSBnZXRzIDI1JSBoZWFkcm9vbSAocmV0cmllcyxcbiAqIHJlZ2lzdHJ5IHB1c2hlcywgYWQtaG9jIENJIHNjcmlwdHMgb24ga2V5cykgYW5kIHJvdW5kcyBVUCB0byB0aGUgbmV4dCAxMCwwMDA6XG4gKlxuICogICBkZXZlbG9wZXIgICAyw5c0w5cyMDE2ICsgNDMyMCA9ICAyMCw0NDggw5cgMS4yNSA9ICAyNSw1NjAg4oaSICAzMCwwMDBcbiAqICAgcHJvICAgICAgICAgNcOXNMOXMjAxNiArIDQzMjAgPSAgNDQsNjQwIMOXIDEuMjUgPSAgNTUsODAwIOKGkiAgNjAsMDAwXG4gKiAgIHRlYW0gICAgICAgMTDDlzTDlzIwMTYgKyA0MzIwID0gIDg0LDk2MCDDlyAxLjI1ID0gMTA2LDIwMCDihpIgMTEwLDAwMFxuICogICBidXNpbmVzcyAgIDIww5c0w5cyMDE2ICsgNDMyMCA9IDE2NSw2MDAgw5cgMS4yNSA9IDIwNywwMDAg4oaSIDIxMCwwMDBcbiAqICAgZW50ZXJwcmlzZSAzMMOXNMOXMjAxNiArIDQzMjAgPSAyNDYsMjQwIMOXIDEuMjUgPSAzMDcsODAwIOKGkiAzMTAsMDAwXG4gKlxuICoge0BsaW5rIGF1dG9tYXRpb25DYWxsc0Zvcn0gY29tcHV0ZXMgZXhhY3RseSB0aGlzLCBhbmQgdGhlIHRpZXIgdGVzdHMgaG9sZCB0aGVcbiAqIHRhYmxlIHRvIGl0LiBPdmVyIHRoZSBjYXAgdGhlIDQyOSBpcyBTT0ZUIGZvciBhIGJhbmQgKHtAbGluayBxdW90YUdyYWNlUGN0fSk6XG4gKiBhIHNlbGYtbXV0YXRpbmcgcGlwZWxpbmUgdGhhdCBoYXJkLXN0b3BwZWQgYXQgMTAwJSBzdGF5ZWQgc3RvcHBlZCB1bnRpbCB0aGVcbiAqIHBlcmlvZCByZXNldCwgdXAgdG8gMyBkYXlzLiBUaGUgbGltaXRzIGFyZSBQRVIgUEVSSU9EOiBhbiBvcGVyYXRvciB3aG9cbiAqIGxlbmd0aGVucyBgUVVPVEFfUkVTRVRfREFZU2Agc2hvdWxkIHNjYWxlIGBRVU9UQV9USUVSXzxUSUVSPl9BVVRPTUFUSU9OX0NBTExTYFxuICogYnkgdGhlIHNhbWUgZmFjdG9yLlxuICovXG5leHBvcnQgY29uc3QgQVVUT01BVElPTl9DQUxMU19TSVpJTkcgPSB7XG4gIGNhbGxzUGVyUnVuOiB7XG4gICAgcGx1Z2luTG9va3VwczogMTIsXG4gICAgc3ludGg6IDEsXG4gICAgcnVudGltZUNoZWNrOiAxLFxuICAgIHNlY3VyaXR5UmVwb3J0VXBsb2FkOiAxLFxuICAgIHJlZ2lzdHJ5UmVnaXN0ZXI6IDEsXG4gICAgaW5nZXN0QmF0Y2hlczogMTIsXG4gIH0sXG4gIHJ1bnNQZXJEYXk6IDI0LFxuICBhY3RpdmVQaXBlbGluZXNQZXJDcmVhdGlvbjogNCxcbiAgLyoqIEluZ2VzdC1oZWFsdGggaGVhcnRiZWF0cyBwZXIgb3JnIHBlciBkYXkgKOKJpCBvbmUgYSBtaW51dGUpLiAqL1xuICBoZWFydGJlYXRzUGVyRGF5OiAxNDQwLFxuICAvKiogTXVsdGlwbGllciBvbiB0aGUgaXRlbWl6ZWQgdG90YWwuICovXG4gIGhlYWRyb29tOiAxLjI1LFxuICAvKiogRGVmYXVsdHMgcm91bmQgVVAgdG8gYSBtdWx0aXBsZSBvZiB0aGlzLiAqL1xuICByb3VuZFRvOiAxMF8wMDAsXG59IGFzIGNvbnN0O1xuXG4vKiogVGhlIHtAbGluayBBVVRPTUFUSU9OX0NBTExTX1NJWklOR30gZm9ybXVsYSBmb3IgYSB0aWVyIGNyZWF0aW5nIGBwaXBlbGluZXNgIHBlciBwZXJpb2QuICovXG5leHBvcnQgZnVuY3Rpb24gYXV0b21hdGlvbkNhbGxzRm9yKHBpcGVsaW5lczogbnVtYmVyLCBwZXJpb2REYXlzOiBudW1iZXIgPSAzKTogbnVtYmVyIHtcbiAgY29uc3QgcyA9IEFVVE9NQVRJT05fQ0FMTFNfU0laSU5HO1xuICBjb25zdCBwZXJSdW4gPSBPYmplY3QudmFsdWVzKHMuY2FsbHNQZXJSdW4pLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICBjb25zdCBwZXJQaXBlbGluZSA9IHBlclJ1biAqIHMucnVuc1BlckRheSAqIHBlcmlvZERheXM7XG4gIGNvbnN0IHRvdGFsID0gKHBpcGVsaW5lcyAqIHMuYWN0aXZlUGlwZWxpbmVzUGVyQ3JlYXRpb24gKiBwZXJQaXBlbGluZSArIHMuaGVhcnRiZWF0c1BlckRheSAqIHBlcmlvZERheXMpICogcy5oZWFkcm9vbTtcbiAgcmV0dXJuIE1hdGguY2VpbCh0b3RhbCAvIHMucm91bmRUbykgKiBzLnJvdW5kVG87XG59XG5cbi8qKlxuICogQ29kZS1kZWZhdWx0IGxpbWl0cyBwZXIgdGllciDigJQgdGhlIGZhbGxiYWNrIHdoZW4gbm8gZW52IG92ZXJyaWRlIGlzIHNldC5cbiAqXG4gKiBTRVJWRVIgQ09ERSBXQU5UUyBgZ2V0VGllckxpbWl0cyh0aWVyKWAgLyBgUVVPVEFfVElFUlNbdGllcl0ubGltaXRzYCwgbm90IHRoaXNcbiAqIHRhYmxlOiB0aG9zZSBjYXJyeSB0aGUgZGVwbG95bWVudCdzIGBRVU9UQV9USUVSXypgIG92ZXJyaWRlcywgYW5kIHRoaXMgaXMgd2hhdFxuICogdGhleSBmYWxsIGJhY2sgdG8uIEl0IGlzIGV4cG9ydGVkIGZvciB0aGUgQlJPV1NFUiwgd2hpY2ggaGFzIG5vIGVudiB0byBvdmVybGF5XG4gKiBhbmQgZ2V0cyB0aGUgZGVwbG95bWVudCdzIGVmZmVjdGl2ZSBmaWd1cmVzIGZyb20gYC9jb25maWdgIGluc3RlYWQuXG4gKiAtMSBtZWFucyB1bmxpbWl0ZWQuIChDb3VudHMgc2l6ZWQgdG8gXCJjb21mb3J0YWJseSBlbm91Z2ggZm9yIG9uZSB0ZWFtLCBub3RcbiAqIHNjcmlwdCBzcGFtXCI6IDIwIGRhc2hib2FyZHMsIDUwIGFsZXJ0IHJ1bGVzLCAxMCBkZXN0aW5hdGlvbnMsIDEgSWRQIGNvbmZpZ1xuICogZm9yIERldmVsb3Blcjsgc2NhbGVkIHVwIGZvciBQcm87IC0xICh1bmNhcHBlZCkgZm9yIHRoZSBjaGVhcCBjb3VudC1xdW90YXNcbiAqIG9uIFRlYW0vRW50ZXJwcmlzZSB3aGlsZSBjb3N0LWRyaXZpbmcgcXVvdGFzIOKAlCBpbmNsLiBhcGlDYWxscyDigJQgc3RheSBmaW5pdGUuKVxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USUVSX0xJTUlUUzogUmVjb3JkPFF1b3RhVGllciwgUXVvdGFUaWVyTGltaXRzPiA9IHtcbiAgLy8gRnJlZSB0aWVyOiBzaW5nbGUgc2VhdCwgMiBwaXBlbGluZXMsIGFwaUNhbGxzIENBUFBFRCAod2FzIHVubGltaXRlZCDigJQgYVxuICAvLyBEb1MvYWJ1c2UgaG9sZSBvbiBhIHNoYXJlZCByZXNvdXJjZSk7IGFpQ2FsbHMgc21hbGwgKGVhY2ggaGFzIH4kMC4wMS0wLjEwXG4gIC8vIGV4dGVybmFsIGNvc3QpLiBMZWFuIGJhc2Ug4oCUIGdyb3d0aCBoYXBwZW5zIGJ5IHVwZ3JhZGluZywgbm90IHN0YWNraW5nIGhlcmUuXG4gIGRldmVsb3Blcjoge1xuICAgIHBsdWdpbnM6IDEwLFxuICAgIHBpcGVsaW5lczogMixcbiAgICBhcGlDYWxsczogMjVfMDAwLFxuICAgIGF1dG9tYXRpb25DYWxsczogMzBfMDAwLFxuICAgIGFpQ2FsbHM6IDIwLFxuICAgIGNwdUNyZWRpdHM6IDRfNTAwLFxuICAgIHN0b3JhZ2VCeXRlczogMiAqIEdCLFxuICAgIGRhc2hib2FyZHM6IDIwLFxuICAgIGFsZXJ0UnVsZXM6IDUwLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAxMCxcbiAgICBpZHBDb25maWdzOiAxLFxuICAgIGxpc3RpbmdzOiAzLFxuICAgIHNlYXRzOiAxLFxuICAgIHN1cHBvcnRDb250YWN0czogMCxcbiAgICBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzOiAwLFxuICAgIGV2ZW50UmV0ZW50aW9uRGF5czogMzAsXG4gICAgZG9yYVJldGVudGlvbkRheXM6IDE4MCxcbiAgfSxcbiAgLy8gUHJvID0gaW5kaXZpZHVhbCBwb3dlciB1c2VyLCBzaW5nbGUgc2VhdCwgaW5kaXZpZHVhbCBwcmljaW5nLiBBIDJuZCBzZWF0IChvclxuICAvLyB0ZWFtIGNvbGxhYm9yYXRpb24pIHJlcXVpcmVzIHRoZSBUZWFtIHRpZXIg4oCUIHRoZSBgc2VhdGAgYWRkLW9uIGlzIFRlYW0rIG9ubHksXG4gIC8vIGtlZXBpbmcgVGVhbSB0aGUgY29sbGFib3JhdGlvbiB0aWVyLiBQcm8ncyB2YWx1ZSBvdmVyIERldmVsb3BlciBpcyBpdHMgcmljaGVyXG4gIC8vIGNhbGwvc3RvcmFnZS9wbHVnaW4gY2VpbGluZ3MgKyBmZWF0dXJlIGFkZC1vbnMgKFNTTy9hdWRpdC9ET1JBKSwgbm90IHNlYXRzLlxuICBwcm86IHtcbiAgICBwbHVnaW5zOiAyNSxcbiAgICBwaXBlbGluZXM6IDUsXG4gICAgYXBpQ2FsbHM6IDEwMF8wMDAsXG4gICAgYXV0b21hdGlvbkNhbGxzOiA2MF8wMDAsXG4gICAgYWlDYWxsczogMjAwLFxuICAgIGNwdUNyZWRpdHM6IDExXzI1MCxcbiAgICBzdG9yYWdlQnl0ZXM6IDI1ICogR0IsXG4gICAgZGFzaGJvYXJkczogMjAwLFxuICAgIGFsZXJ0UnVsZXM6IDUwMCxcbiAgICBhbGVydERlc3RpbmF0aW9uczogNTAsXG4gICAgaWRwQ29uZmlnczogNSxcbiAgICBsaXN0aW5nczogMTAsXG4gICAgc2VhdHM6IDEsXG4gICAgc3VwcG9ydENvbnRhY3RzOiAwLFxuICAgIHN1cHBvcnRQcmVtaXVtQ29udGFjdHM6IDAsXG4gICAgZXZlbnRSZXRlbnRpb25EYXlzOiAzMCxcbiAgICBkb3JhUmV0ZW50aW9uRGF5czogMTgwLFxuICB9LFxuICAvLyBUZWFtID0gY29sbGFib3JhdGlvbiB0aWVyOyB0aGUgc2VhdCBsaW1pdCAoMykgaXMgdGhlIHJlYWwgZGlmZmVyZW50aWF0b3Igb3ZlclxuICAvLyBQcm8gKHNpbmdsZS1zZWF0KSDigJQgaXQncyB0aGUgbXVsdGktc2VhdCBjb2xsYWJvcmF0aW9uIGZsb29yLiBMZWFuIGJhc2UgKCQ3OSk6XG4gIC8vIGdyb3d0aCByaWRlcyB0aGUgc2VhdC9waXBlbGluZS9ldGMgYWRkLW9ucyAobGFuZC1hbmQtZXhwYW5kKS4gTGltaXRzIHNpdFxuICAvLyBiZXR3ZWVuIFBybyBhbmQgRW50ZXJwcmlzZS5cbiAgdGVhbToge1xuICAgIHBsdWdpbnM6IDUwLFxuICAgIHBpcGVsaW5lczogMTAsXG4gICAgYXBpQ2FsbHM6IDMwMF8wMDAsXG4gICAgYXV0b21hdGlvbkNhbGxzOiAxMTBfMDAwLFxuICAgIGFpQ2FsbHM6IDYwMCxcbiAgICBjcHVDcmVkaXRzOiAyMl81MDAsXG4gICAgc3RvcmFnZUJ5dGVzOiA2MCAqIEdCLFxuICAgIGRhc2hib2FyZHM6IC0xLFxuICAgIGFsZXJ0UnVsZXM6IC0xLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAtMSxcbiAgICBpZHBDb25maWdzOiA1LFxuICAgIGxpc3RpbmdzOiAyNSxcbiAgICBzZWF0czogMyxcbiAgICBzdXBwb3J0Q29udGFjdHM6IDAsXG4gICAgc3VwcG9ydFByZW1pdW1Db250YWN0czogMCxcbiAgICBldmVudFJldGVudGlvbkRheXM6IDMwLFxuICAgIGRvcmFSZXRlbnRpb25EYXlzOiAxODAsXG4gIH0sXG4gIC8vIEJ1c2luZXNzICgkMjQ5KTogdGhlIHN0ZXAgdGhlICQ3OSAtPiAkNTk5IGNsaWZmIHdhcyBtaXNzaW5nLiA4IHNlYXRzLCAyMFxuICAvLyBwaXBlbGluZXMsIGFuZCBET1JBIChhZHZhbmNlZF9yZXBvcnRpbmcpIGluY2x1ZGVkIHJhdGhlciB0aGFuIGFuIGFkZC1vbi5cbiAgLy8gRXZlcnkgY29zdCBkcml2ZXIgaXMgMTAwLDAwMCBhcGlDYWxscyBhbmQgMjAwIGFpQ2FsbHMgUEVSIFNFQVQsIHRoZSBzYW1lXG4gIC8vIHBlci1zZWF0IHJhdGUgYXMgUHJvL1RlYW0vRW50ZXJwcmlzZSwgc28gdGhlIGxhZGRlciByZWFkcyBjb25zaXN0ZW50bHkgdG8gYVxuICAvLyBidXllciB3aG8gZGl2aWRlcyBieSBoZWFkY291bnQuIENvdW50LXF1b3RhcyB0aGF0IFRlYW0gYWxyZWFkeSB1bmNhcHMgc3RheVxuICAvLyAtMTsgYGlkcENvbmZpZ3NgIHNpdHMgYmV0d2VlbiBUZWFtJ3MgNSBhbmQgRW50ZXJwcmlzZSdzIHVubGltaXRlZC5cbiAgYnVzaW5lc3M6IHtcbiAgICBwbHVnaW5zOiAxMDAsXG4gICAgcGlwZWxpbmVzOiAyMCxcbiAgICBhcGlDYWxsczogODAwXzAwMCxcbiAgICBhdXRvbWF0aW9uQ2FsbHM6IDIxMF8wMDAsXG4gICAgYWlDYWxsczogMV82MDAsXG4gICAgY3B1Q3JlZGl0czogNDVfMDAwLFxuICAgIHN0b3JhZ2VCeXRlczogMTIwICogR0IsXG4gICAgZGFzaGJvYXJkczogLTEsXG4gICAgYWxlcnRSdWxlczogLTEsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IC0xLFxuICAgIGlkcENvbmZpZ3M6IDEwLFxuICAgIGxpc3RpbmdzOiA1MCxcbiAgICBzZWF0czogOCxcbiAgICBzdXBwb3J0Q29udGFjdHM6IDAsXG4gICAgc3VwcG9ydFByZW1pdW1Db250YWN0czogMCxcbiAgICBldmVudFJldGVudGlvbkRheXM6IDMwLFxuICAgIGRvcmFSZXRlbnRpb25EYXlzOiAxODAsXG4gIH0sXG4gIC8vIEVudGVycHJpc2UgKCQ1OTksIGhlbGQpOiB0aGUgYWxsLWluY2x1c2l2ZSB0aWVyIOKAlCAxNSBzZWF0cywgMzAgcGlwZWxpbmVzLCBBTExcbiAgLy8gcHJlbWl1bSBmZWF0dXJlcyBpbmNsdWRlZCAoc2VlIFRJRVJfRkVBVFVSRVMpLiBGQUlSLVVTRSDigJQgY29zdCBkcml2ZXJzIChhcGlDYWxscyxcbiAgLy8gYWlDYWxscywgc3RvcmFnZUJ5dGVzKSBjYXBwZWQgc28gb25lIGFjY291bnQgY2FuJ3QgcnVuIHVwIHVuYm91bmRlZFxuICAvLyBjb21wdXRlL3Byb3ZpZGVyL3N0b3JhZ2UgY29zdCBvbiBhIGZsYXQgcHJpY2U7IGNoZWFwIGNvdW50LXF1b3RhcyBzdGF5IC0xLlxuICBlbnRlcnByaXNlOiB7XG4gICAgcGx1Z2luczogMTUwLFxuICAgIHBpcGVsaW5lczogMzAsXG4gICAgYXBpQ2FsbHM6IDFfNTAwXzAwMCxcbiAgICBhdXRvbWF0aW9uQ2FsbHM6IDMxMF8wMDAsXG4gICAgYWlDYWxsczogM18wMDAsXG4gICAgY3B1Q3JlZGl0czogNjdfNTAwLFxuICAgIHN0b3JhZ2VCeXRlczogMjUwICogR0IsXG4gICAgZGFzaGJvYXJkczogLTEsXG4gICAgYWxlcnRSdWxlczogLTEsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IC0xLFxuICAgIGlkcENvbmZpZ3M6IC0xLFxuICAgIGxpc3RpbmdzOiAxMDAsXG4gICAgc2VhdHM6IDE1LFxuICAgIHN1cHBvcnRDb250YWN0czogMCxcbiAgICBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzOiAwLFxuICAgIGV2ZW50UmV0ZW50aW9uRGF5czogMzAsXG4gICAgZG9yYVJldGVudGlvbkRheXM6IDE4MCxcbiAgfSxcbiAgLy8gVW5saW1pdGVkOiBFVkVSWSBxdW90YSB1bmNhcHBlZCAoLTEpLiBUaGUgZGVmYXVsdCB3aGVuIGJpbGxpbmcgaXMgZGlzYWJsZWRcbiAgLy8gKG5vIGVuZm9yY2VtZW50IHN1cmZhY2UpIOKAlCBuZXZlciBzaG93bi9zZWxlY3RhYmxlIHdoZW4gYmlsbGluZyBpcyBlbmFibGVkLlxuICB1bmxpbWl0ZWQ6IHtcbiAgICBwbHVnaW5zOiAtMSxcbiAgICBwaXBlbGluZXM6IC0xLFxuICAgIGFwaUNhbGxzOiAtMSxcbiAgICBhdXRvbWF0aW9uQ2FsbHM6IC0xLFxuICAgIGFpQ2FsbHM6IC0xLFxuICAgIGNwdUNyZWRpdHM6IC0xLFxuICAgIHN0b3JhZ2VCeXRlczogLTEsXG4gICAgZGFzaGJvYXJkczogLTEsXG4gICAgYWxlcnRSdWxlczogLTEsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IC0xLFxuICAgIGlkcENvbmZpZ3M6IC0xLFxuICAgIGxpc3RpbmdzOiAtMSxcbiAgICBzZWF0czogLTEsXG4gICAgc3VwcG9ydENvbnRhY3RzOiAtMSxcbiAgICBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzOiAtMSxcbiAgICBldmVudFJldGVudGlvbkRheXM6IC0xLFxuICAgIGRvcmFSZXRlbnRpb25EYXlzOiAtMSxcbiAgfSxcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaWVyLWxhZGRlciBmYWN0cyB0aGUgYnJvd3NlciBkZWNpZGVzIHdpdGggdG9vXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogVGllcnMgdGhhdCBwZXJtaXQgdGhlIG9yZyDihpIgdGVhbSBoaWVyYXJjaHkgKG5lc3RpbmcgdGVhbXMgdW5kZXIgYSByb290KS4gVGhlXG4gKiAgYmlsbGluZy1vZmYgYHVubGltaXRlZGAgdGllciBpcyB0ZWFtLWNhcGFibGUgKGl0J3MgdGhlIG1vc3QgcGVybWlzc2l2ZSk7IHRoZVxuICogIGVudHJ5LWxldmVsIGBkZXZlbG9wZXJgL2Bwcm9gIHRpZXJzIGFyZSBub3QuIFNpbmdsZSBzb3VyY2UgZm9yIHRoZSBwYXJlbnQtXG4gKiAgZWxpZ2liaWxpdHkgKyBkb3duZ3JhZGUtb3ZlcmNhcCBjaGVja3Mgc28gdGhleSBjYW4ndCBkcmlmdC4gKi9cbmV4cG9ydCBjb25zdCBURUFNX0NBUEFCTEVfVElFUlM6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gWyd0ZWFtJywgJ2J1c2luZXNzJywgJ2VudGVycHJpc2UnLCAndW5saW1pdGVkJ107XG5leHBvcnQgZnVuY3Rpb24gdGllckFsbG93c1RlYW1zKHRpZXI6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhdGllciAmJiAoVEVBTV9DQVBBQkxFX1RJRVJTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh0aWVyKTtcbn1cblxuLyoqIFRpZXJzIHRoYXQgbWF5IGJ1eSBleHRyYSBzZWF0cyDigJQgYmlsbGluZydzIHBlci1zZWF0IGBzZWF0YCBhZGQtb24uIFNlYXRzIGFyZVxuICogIHRoZSBUZWFtIGRpZmZlcmVudGlhdG9yLCBzbyB0aGUgc2luZ2xlLXNlYXQgYGRldmVsb3BlcmAvYHByb2AgdGllcnMgY2Fubm90XG4gKiAgc3RhY2sgdGhlbSBhbmQgbXVzdCB1cGdyYWRlIGluc3RlYWQ7IGB1bmxpbWl0ZWRgIGhhcyBubyBzZWF0IGNhcCBhdCBhbGwuXG4gKiAgU2luZ2xlIHNvdXJjZSBmb3IgdGhlIGJpbGxpbmcgY2F0YWxvZyBhbmQgZXZlcnkgXCJvdXQgb2Ygc2VhdHNcIiBtZXNzYWdlLiAqL1xuZXhwb3J0IGNvbnN0IFNFQVRfUEFDS19USUVSUzogcmVhZG9ubHkgUXVvdGFUaWVyW10gPSBbJ3RlYW0nLCAnYnVzaW5lc3MnLCAnZW50ZXJwcmlzZSddO1xuXG4vKiogSG93IGFuIGFjY291bnQgdGhhdCBoYXMgdXNlZCBldmVyeSBzZWF0IGNhbiBnZXQgYW5vdGhlci4gKi9cbmV4cG9ydCB0eXBlIFNlYXRSZW1lZHkgPSAndXBncmFkZScgfCAnc2VhdF9wYWNrJztcblxuLyoqXG4gKiBUaGUgcmVtZWR5IHRvIG9mZmVyIGFuIGFjY291bnQgYXQgaXRzIHNlYXQgY2FwLCBmcm9tIHRoZSBBQ0NPVU5UJ3MgKHJvb3QpIHRpZXI6XG4gKiBgc2VhdF9wYWNrYCB3aGVyZSBzZWF0cyBjYW4gYmUgYm91Z2h0LCBgdXBncmFkZWAgb24gdGhlIHNpbmdsZS1zZWF0IHRpZXJzLlxuICogYG51bGxgIHdoZW4gdGhlIHRpZXIgaXMgdW5rbm93biBvciBoYXMgbm8gY2FwIOKAlCBzYXkgbm90aGluZyByYXRoZXIgdGhhbiBndWVzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlYXRSZW1lZHkodGllcjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IFNlYXRSZW1lZHkgfCBudWxsIHtcbiAgaWYgKCF0aWVyIHx8ICFPYmplY3QuaGFzT3duKERFRkFVTFRfVElFUl9MSU1JVFMsIHRpZXIpIHx8IHRpZXIgPT09ICd1bmxpbWl0ZWQnKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIChTRUFUX1BBQ0tfVElFUlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHRpZXIpID8gJ3NlYXRfcGFjaycgOiAndXBncmFkZSc7XG59XG4iXX0=
|
|
@@ -41,19 +41,3 @@ export declare function projectUsage(input: {
|
|
|
41
41
|
export declare const PROJECTION_NOTICE_RATIO = 0.7;
|
|
42
42
|
/** Whether a projection has crossed into the band worth surfacing. */
|
|
43
43
|
export declare function projectionWorthShowing(p: UsageProjection | null): boolean;
|
|
44
|
-
/**
|
|
45
|
-
* Days until the counter reaches its limit at the current pace, or `null` when
|
|
46
|
-
* it does not reach it inside the period.
|
|
47
|
-
*
|
|
48
|
-
* The TRAJECTORY signal's actual question (D4 Class 2) — "how long have they
|
|
49
|
-
* got" is what decides whether an offer is timely, where the projected total
|
|
50
|
-
* only says whether it is warranted. Fractional days are kept: rounding up to a
|
|
51
|
-
* whole day loses exactly the urgency the signal is for.
|
|
52
|
-
*/
|
|
53
|
-
export declare function daysToExhaustion(input: {
|
|
54
|
-
used: number;
|
|
55
|
-
limit: number;
|
|
56
|
-
resetAt: string | Date;
|
|
57
|
-
periodDays: number;
|
|
58
|
-
now?: number;
|
|
59
|
-
}): number | null;
|
|
@@ -76,23 +76,4 @@ export const PROJECTION_NOTICE_RATIO = 0.7;
|
|
|
76
76
|
export function projectionWorthShowing(p) {
|
|
77
77
|
return p !== null && p.ratio >= PROJECTION_NOTICE_RATIO;
|
|
78
78
|
}
|
|
79
|
-
|
|
80
|
-
* Days until the counter reaches its limit at the current pace, or `null` when
|
|
81
|
-
* it does not reach it inside the period.
|
|
82
|
-
*
|
|
83
|
-
* The TRAJECTORY signal's actual question (D4 Class 2) — "how long have they
|
|
84
|
-
* got" is what decides whether an offer is timely, where the projected total
|
|
85
|
-
* only says whether it is warranted. Fractional days are kept: rounding up to a
|
|
86
|
-
* whole day loses exactly the urgency the signal is for.
|
|
87
|
-
*/
|
|
88
|
-
export function daysToExhaustion(input) {
|
|
89
|
-
const p = projectUsage(input);
|
|
90
|
-
if (!p || !p.willBreach)
|
|
91
|
-
return null;
|
|
92
|
-
const { used, limit, periodDays } = input;
|
|
93
|
-
const perDay = used / (p.elapsedFraction * periodDays);
|
|
94
|
-
if (!(perDay > 0))
|
|
95
|
-
return null;
|
|
96
|
-
return Math.max(0, (limit - used) / perDay);
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2UtcHJvamVjdGlvbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3VzYWdlLXByb2plY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgscUZBQXFGO0FBQ3JGLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQWFuQzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FPNUI7SUFDQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDL0MsMkVBQTJFO0lBQzNFLHVEQUF1RDtJQUN2RCxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRWxFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDbEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQztJQUM1QyxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLDJFQUEyRTtJQUMzRSxpRUFBaUU7SUFDakUsSUFBSSxPQUFPLElBQUksQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRTlCLG9FQUFvRTtJQUNwRSxzRUFBc0U7SUFDdEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO0lBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQzNDLE9BQU87UUFDTCxTQUFTO1FBQ1QsS0FBSyxFQUFFLFNBQVMsR0FBRyxLQUFLO1FBQ3hCLFVBQVUsRUFBRSxTQUFTLEdBQUcsS0FBSztRQUM3QixlQUFlLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLEtBQUssQ0FBQztLQUM5QyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUUzQyxzRUFBc0U7QUFDdEUsTUFBTSxVQUFVLHNCQUFzQixDQUFDLENBQXlCO0lBQzlELE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLHVCQUF1QixDQUFDO0FBQzFELENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQU1oQztJQUNDLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNyQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDMUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUN2RCxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDL0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogV2hlcmUgYSBxdW90YSBjb3VudGVyIGlzIEhFQURFRCwgZnJvbSB3aGVyZSBpdCBpcyBub3cuXG4gKlxuICogRXh0cmFjdGVkIG91dCBvZiBgZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcXVvdGFzL1F1b3RhQ2FyZC50c3hgLCB3aGljaCBvd25lZFxuICogdGhpcyBwcml2YXRlbHkgKGRvY3MvcGxhbnMvc2FsZXMtYWdlbnQubWQsIFBoYXNlIDAgZ3JvdW5kd29yaykuIFRocmVlIGNhbGxlcnNcbiAqIG5lZWQgdGhlIHNhbWUgYW5zd2VyIGFuZCB3ZXJlIGdvaW5nIHRvIGNvbXB1dGUgaXQgdGhyZWUgd2F5czpcbiAqXG4gKiAgLSB0aGUgcXVvdGEgY2FyZCdzIGZvcmVjYXN0IHJvdywgd2hpY2ggaXMgd2hlcmUgaXQgc3RhcnRlZDtcbiAqICAtIHRoZSB0aHJlc2hvbGQgbm90aWNlLCB3aGljaCBkZWNpZGVzIHdoZXRoZXIgdG8gd2FybjtcbiAqICAtIHRoZSB1c2FnZSBwcm9maWxlJ3MgVFJBSkVDVE9SWSBzaWduYWwgKEQ0IENsYXNzIDIpLCB3aGljaCBpcyB0aGUgd2hvbGVcbiAqICAgIGJhc2lzIGZvciBcIndoZW4gd2lsbCB0aGV5IHJ1biBvdXRcIiByYXRoZXIgdGhhbiBcImFyZSB0aGV5IG91dFwiLlxuICpcbiAqIEEgcHJvamVjdGlvbiB0aGF0IGRpc2FncmVlZCBiZXR3ZWVuIHRoZSBwYWdlIGFuZCB0aGUgb2ZmZXIgd291bGQgYmUgdGhlIHdvcnN0XG4gKiBwb3NzaWJsZSBzcGxpdDogdGhlIGFjY291bnQgcmVhZHMgb25lIG51bWJlciBvbiB0aGUgY2FyZCBhbmQgZ2V0cyBhbiBvZmZlclxuICogYXJndWVkIGZyb20gYW5vdGhlci5cbiAqXG4gKiBERVBFTkRFTkNZLUZSRUUsIHNvIHRoZSBicm93c2VyIGltcG9ydHMgaXQgdGhyb3VnaCB0aGUgYC4vdXNhZ2UtcHJvamVjdGlvbmBcbiAqIHN1YnBhdGggcmF0aGVyIHRoYW4ga2VlcGluZyB0aGUgY29weSBpdCBoYXMgbm93LlxuICovXG5cbi8qKiBNaWxsaXNlY29uZHMgaW4gYSBkYXksIG5hbWVkIGJlY2F1c2UgdGhlIGFyaXRobWV0aWMgYmVsb3cgcmVhZHMgYmV0dGVyIGZvciBpdC4gKi9cbmNvbnN0IERBWV9NUyA9IDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2VQcm9qZWN0aW9uIHtcbiAgLyoqIFVuaXRzIHRoZSBjb3VudGVyIGlzIHBhY2luZyB0byByZWFjaCBieSBgcmVzZXRBdGAuICovXG4gIHByb2plY3RlZDogbnVtYmVyO1xuICAvKiogYHByb2plY3RlZCAvIGxpbWl0YC4gQWJvdmUgMSBtZWFucyB0aGUgY2FwIGlzIHJlYWNoZWQgYmVmb3JlIHRoZSByZXNldC4gKi9cbiAgcmF0aW86IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdGhlIHBhY2UgZXhoYXVzdHMgdGhlIGxpbWl0IGJlZm9yZSB0aGUgcGVyaW9kIGVuZHMuICovXG4gIHdpbGxCcmVhY2g6IGJvb2xlYW47XG4gIC8qKiBGcmFjdGlvbiBvZiB0aGUgcGVyaW9kIGFscmVhZHkgZWxhcHNlZCwgMOKAkzEuICovXG4gIGVsYXBzZWRGcmFjdGlvbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIFByb2plY3QgYSBmbG93IGNvdW50ZXIgdG8gaXRzIHBlcmlvZCBlbmQsIG9yIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG9cbiAqIHByb2plY3QgZnJvbS5cbiAqXG4gKiBSZXR1cm5zIG51bGwgcmF0aGVyIHRoYW4gemVybyBmb3IgZXZlcnkgdW5wcm9qZWN0YWJsZSBjYXNlIOKAlCBubyB1c2FnZSB5ZXQsIGFuXG4gKiB1bmxpbWl0ZWQgb3IgYWJzZW50IGxpbWl0LCBhIHBlcmlvZCB0aGF0IGhhcyBub3Qgc3RhcnRlZCwgYW4gdW5wYXJzZWFibGVcbiAqIHJlc2V0IOKAlCBiZWNhdXNlIHplcm8gaXMgYSBGT1JFQ0FTVCBhbmQgXCJjYW5ub3Qgc2F5XCIgaXMgbm90IG9uZS4gQSBjYWxsZXIgdGhhdFxuICogdHJlYXRlZCB0aGUgdHdvIGFsaWtlIHdvdWxkIHdhcm4gYW4gYWNjb3VudCBhdCAwJSBhbmQgb2ZmZXIgYWdhaW5zdCBhXG4gKiB0cmFqZWN0b3J5IG5vYm9keSBtZWFzdXJlZC5cbiAqXG4gKiBUaGUgYnVybiByYXRlIGlzIExJTkVBUiwgYW5kIHRoYXQgaXMgYSBkZWxpYmVyYXRlIGZsb29yIHJhdGhlciB0aGFuIGEgbW9kZWw6XG4gKiByZWFsIHdvcmtsb2FkcyBzcGlrZSwgYnV0IGEgc3RyYWlnaHQgbGluZSBzdGlsbCBjYXRjaGVzIFwicGFjaW5nIHRocmVlIHRpbWVzXG4gKiBhaGVhZCBvZiBwbGFuXCIsIHdoaWNoIGlzIHRoZSBjYXNlIHdvcnRoIGFjdGluZyBvbi4gQW55dGhpbmcgY2xldmVyZXIgd2FudHMgdGhlXG4gKiBoaXN0b3J5IHRoZSBwcm9maWxlIHN0b3JlIGtlZXBzIChEMTYpLCBub3QgYSBiZXR0ZXIgZm9ybXVsYSBoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvamVjdFVzYWdlKGlucHV0OiB7XG4gIHVzZWQ6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgcmVzZXRBdDogc3RyaW5nIHwgRGF0ZTtcbiAgcGVyaW9kRGF5czogbnVtYmVyO1xuICAvKiogRGVmYXVsdHMgdG8gbm93OyBpbmplY3RhYmxlIHNvIGEgY2FsbGVyIGNhbiBwcm9qZWN0IGFzIG9mIGEgcGVyaW9kJ3MgZW5kLiAqL1xuICBub3c/OiBudW1iZXI7XG59KTogVXNhZ2VQcm9qZWN0aW9uIHwgbnVsbCB7XG4gIGNvbnN0IHsgdXNlZCwgbGltaXQsIHBlcmlvZERheXMgfSA9IGlucHV0O1xuICBjb25zdCByZXNldCA9IGlucHV0LnJlc2V0QXQgaW5zdGFuY2VvZiBEYXRlID8gaW5wdXQucmVzZXRBdCA6IG5ldyBEYXRlKGlucHV0LnJlc2V0QXQpO1xuICBpZiAoTnVtYmVyLmlzTmFOKHJlc2V0LmdldFRpbWUoKSkpIHJldHVybiBudWxsO1xuICAvLyBgbGltaXQgPD0gMGAgY292ZXJzIGJvdGggYW4gdW5zZXQgY2FwIGFuZCB0aGUgYC0xYCB0aGF0IG1lYW5zIHVubGltaXRlZDpcbiAgLy8gbmVpdGhlciBoYXMgYSByYXRpbywgYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8gYnJlYWNoLlxuICBpZiAoIShsaW1pdCA+IDApIHx8ICEodXNlZCA+IDApIHx8ICEocGVyaW9kRGF5cyA+IDApKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBub3cgPSBpbnB1dC5ub3cgPz8gRGF0ZS5ub3coKTtcbiAgY29uc3QgdG90YWwgPSBwZXJpb2REYXlzICogREFZX01TO1xuICBjb25zdCBwZXJpb2RTdGFydCA9IHJlc2V0LmdldFRpbWUoKSAtIHRvdGFsO1xuICBjb25zdCBlbGFwc2VkID0gbm93IC0gcGVyaW9kU3RhcnQ7XG4gIC8vIEJlZm9yZSB0aGUgcGVyaW9kIG9wZW5lZCwgb3IgZXhhY3RseSBhdCBpdHMgYm91bmRhcnk6IG5vIGVsYXBzZWQgdGltZSB0b1xuICAvLyBkaXZpZGUgYnksIGFuZCBleHRyYXBvbGF0aW5nIGZyb20gemVybyBlbGFwc2VkIGdpdmVzIGluZmluaXR5LlxuICBpZiAoZWxhcHNlZCA8PSAwKSByZXR1cm4gbnVsbDtcblxuICAvLyBQYXN0IHRoZSByZXNldCB0aGUgcGVyaW9kIGlzIG92ZXI7IHRoZSBwYWNlIElTIHRoZSB1c2FnZSwgd2l0aCBub1xuICAvLyBleHRyYXBvbGF0aW9uLCByYXRoZXIgdGhhbiBhIGZpZ3VyZSBzY2FsZWQgYnkgYSBmcmFjdGlvbiBhYm92ZSBvbmUuXG4gIGNvbnN0IHNjYWxlID0gZWxhcHNlZCA+PSB0b3RhbCA/IDEgOiB0b3RhbCAvIGVsYXBzZWQ7XG4gIGNvbnN0IHByb2plY3RlZCA9IE1hdGgucm91bmQodXNlZCAqIHNjYWxlKTtcbiAgcmV0dXJuIHtcbiAgICBwcm9qZWN0ZWQsXG4gICAgcmF0aW86IHByb2plY3RlZCAvIGxpbWl0LFxuICAgIHdpbGxCcmVhY2g6IHByb2plY3RlZCA+IGxpbWl0LFxuICAgIGVsYXBzZWRGcmFjdGlvbjogTWF0aC5taW4oMSwgZWxhcHNlZCAvIHRvdGFsKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgYmFuZCBhdCB3aGljaCBhIHByb2plY3Rpb24gaXMgd29ydGggc2hvd2luZyBhIHBlcnNvbi5cbiAqXG4gKiBTaGFyZWQgc28gdGhlIGNhcmQncyBmb3JlY2FzdCByb3cgYW5kIHRoZSBwcm9maWxlJ3MgcHJlc3N1cmUgc2lnbmFsIGFncmVlIG9uXG4gKiB3aGF0IFwiYXBwcm9hY2hpbmdcIiBtZWFucy4gQmVsb3cgaXQgdGhlcmUgaXMgYSBwcm9qZWN0aW9uIGJ1dCBubyByZWFzb24gdG8gc2F5XG4gKiBhbnl0aGluZywgd2hpY2ggaXMgYSBkaWZmZXJlbnQgc3RhdGUgZnJvbSBoYXZpbmcgbm8gcHJvamVjdGlvbiBhdCBhbGwuXG4gKi9cbmV4cG9ydCBjb25zdCBQUk9KRUNUSU9OX05PVElDRV9SQVRJTyA9IDAuNztcblxuLyoqIFdoZXRoZXIgYSBwcm9qZWN0aW9uIGhhcyBjcm9zc2VkIGludG8gdGhlIGJhbmQgd29ydGggc3VyZmFjaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2plY3Rpb25Xb3J0aFNob3dpbmcocDogVXNhZ2VQcm9qZWN0aW9uIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcCAhPT0gbnVsbCAmJiBwLnJhdGlvID49IFBST0pFQ1RJT05fTk9USUNFX1JBVElPO1xufVxuXG4vKipcbiAqIERheXMgdW50aWwgdGhlIGNvdW50ZXIgcmVhY2hlcyBpdHMgbGltaXQgYXQgdGhlIGN1cnJlbnQgcGFjZSwgb3IgYG51bGxgIHdoZW5cbiAqIGl0IGRvZXMgbm90IHJlYWNoIGl0IGluc2lkZSB0aGUgcGVyaW9kLlxuICpcbiAqIFRoZSBUUkFKRUNUT1JZIHNpZ25hbCdzIGFjdHVhbCBxdWVzdGlvbiAoRDQgQ2xhc3MgMikg4oCUIFwiaG93IGxvbmcgaGF2ZSB0aGV5XG4gKiBnb3RcIiBpcyB3aGF0IGRlY2lkZXMgd2hldGhlciBhbiBvZmZlciBpcyB0aW1lbHksIHdoZXJlIHRoZSBwcm9qZWN0ZWQgdG90YWxcbiAqIG9ubHkgc2F5cyB3aGV0aGVyIGl0IGlzIHdhcnJhbnRlZC4gRnJhY3Rpb25hbCBkYXlzIGFyZSBrZXB0OiByb3VuZGluZyB1cCB0byBhXG4gKiB3aG9sZSBkYXkgbG9zZXMgZXhhY3RseSB0aGUgdXJnZW5jeSB0aGUgc2lnbmFsIGlzIGZvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRheXNUb0V4aGF1c3Rpb24oaW5wdXQ6IHtcbiAgdXNlZDogbnVtYmVyO1xuICBsaW1pdDogbnVtYmVyO1xuICByZXNldEF0OiBzdHJpbmcgfCBEYXRlO1xuICBwZXJpb2REYXlzOiBudW1iZXI7XG4gIG5vdz86IG51bWJlcjtcbn0pOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgcCA9IHByb2plY3RVc2FnZShpbnB1dCk7XG4gIGlmICghcCB8fCAhcC53aWxsQnJlYWNoKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgeyB1c2VkLCBsaW1pdCwgcGVyaW9kRGF5cyB9ID0gaW5wdXQ7XG4gIGNvbnN0IHBlckRheSA9IHVzZWQgLyAocC5lbGFwc2VkRnJhY3Rpb24gKiBwZXJpb2REYXlzKTtcbiAgaWYgKCEocGVyRGF5ID4gMCkpIHJldHVybiBudWxsO1xuICByZXR1cm4gTWF0aC5tYXgoMCwgKGxpbWl0IC0gdXNlZCkgLyBwZXJEYXkpO1xufVxuIl19
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2UtcHJvamVjdGlvbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3VzYWdlLXByb2plY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgscUZBQXFGO0FBQ3JGLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQWFuQzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FPNUI7SUFDQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDL0MsMkVBQTJFO0lBQzNFLHVEQUF1RDtJQUN2RCxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRWxFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDbEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQztJQUM1QyxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLDJFQUEyRTtJQUMzRSxpRUFBaUU7SUFDakUsSUFBSSxPQUFPLElBQUksQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRTlCLG9FQUFvRTtJQUNwRSxzRUFBc0U7SUFDdEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO0lBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQzNDLE9BQU87UUFDTCxTQUFTO1FBQ1QsS0FBSyxFQUFFLFNBQVMsR0FBRyxLQUFLO1FBQ3hCLFVBQVUsRUFBRSxTQUFTLEdBQUcsS0FBSztRQUM3QixlQUFlLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLEtBQUssQ0FBQztLQUM5QyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUUzQyxzRUFBc0U7QUFDdEUsTUFBTSxVQUFVLHNCQUFzQixDQUFDLENBQXlCO0lBQzlELE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLHVCQUF1QixDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXaGVyZSBhIHF1b3RhIGNvdW50ZXIgaXMgSEVBREVELCBmcm9tIHdoZXJlIGl0IGlzIG5vdy5cbiAqXG4gKiBFeHRyYWN0ZWQgb3V0IG9mIGBmcm9udGVuZC9zcmMvY29tcG9uZW50cy9xdW90YXMvUXVvdGFDYXJkLnRzeGAsIHdoaWNoIG93bmVkXG4gKiB0aGlzIHByaXZhdGVseSAoZG9jcy9wbGFucy9zYWxlcy1hZ2VudC5tZCwgUGhhc2UgMCBncm91bmR3b3JrKS4gVGhyZWUgY2FsbGVyc1xuICogbmVlZCB0aGUgc2FtZSBhbnN3ZXIgYW5kIHdlcmUgZ29pbmcgdG8gY29tcHV0ZSBpdCB0aHJlZSB3YXlzOlxuICpcbiAqICAtIHRoZSBxdW90YSBjYXJkJ3MgZm9yZWNhc3Qgcm93LCB3aGljaCBpcyB3aGVyZSBpdCBzdGFydGVkO1xuICogIC0gdGhlIHRocmVzaG9sZCBub3RpY2UsIHdoaWNoIGRlY2lkZXMgd2hldGhlciB0byB3YXJuO1xuICogIC0gdGhlIHVzYWdlIHByb2ZpbGUncyBUUkFKRUNUT1JZIHNpZ25hbCAoRDQgQ2xhc3MgMiksIHdoaWNoIGlzIHRoZSB3aG9sZVxuICogICAgYmFzaXMgZm9yIFwid2hlbiB3aWxsIHRoZXkgcnVuIG91dFwiIHJhdGhlciB0aGFuIFwiYXJlIHRoZXkgb3V0XCIuXG4gKlxuICogQSBwcm9qZWN0aW9uIHRoYXQgZGlzYWdyZWVkIGJldHdlZW4gdGhlIHBhZ2UgYW5kIHRoZSBvZmZlciB3b3VsZCBiZSB0aGUgd29yc3RcbiAqIHBvc3NpYmxlIHNwbGl0OiB0aGUgYWNjb3VudCByZWFkcyBvbmUgbnVtYmVyIG9uIHRoZSBjYXJkIGFuZCBnZXRzIGFuIG9mZmVyXG4gKiBhcmd1ZWQgZnJvbSBhbm90aGVyLlxuICpcbiAqIERFUEVOREVOQ1ktRlJFRSwgc28gdGhlIGJyb3dzZXIgaW1wb3J0cyBpdCB0aHJvdWdoIHRoZSBgLi91c2FnZS1wcm9qZWN0aW9uYFxuICogc3VicGF0aCByYXRoZXIgdGhhbiBrZWVwaW5nIHRoZSBjb3B5IGl0IGhhcyBub3cuXG4gKi9cblxuLyoqIE1pbGxpc2Vjb25kcyBpbiBhIGRheSwgbmFtZWQgYmVjYXVzZSB0aGUgYXJpdGhtZXRpYyBiZWxvdyByZWFkcyBiZXR0ZXIgZm9yIGl0LiAqL1xuY29uc3QgREFZX01TID0gMjQgKiA2MCAqIDYwICogMTAwMDtcblxuZXhwb3J0IGludGVyZmFjZSBVc2FnZVByb2plY3Rpb24ge1xuICAvKiogVW5pdHMgdGhlIGNvdW50ZXIgaXMgcGFjaW5nIHRvIHJlYWNoIGJ5IGByZXNldEF0YC4gKi9cbiAgcHJvamVjdGVkOiBudW1iZXI7XG4gIC8qKiBgcHJvamVjdGVkIC8gbGltaXRgLiBBYm92ZSAxIG1lYW5zIHRoZSBjYXAgaXMgcmVhY2hlZCBiZWZvcmUgdGhlIHJlc2V0LiAqL1xuICByYXRpbzogbnVtYmVyO1xuICAvKiogV2hldGhlciB0aGUgcGFjZSBleGhhdXN0cyB0aGUgbGltaXQgYmVmb3JlIHRoZSBwZXJpb2QgZW5kcy4gKi9cbiAgd2lsbEJyZWFjaDogYm9vbGVhbjtcbiAgLyoqIEZyYWN0aW9uIG9mIHRoZSBwZXJpb2QgYWxyZWFkeSBlbGFwc2VkLCAw4oCTMS4gKi9cbiAgZWxhcHNlZEZyYWN0aW9uOiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvamVjdCBhIGZsb3cgY291bnRlciB0byBpdHMgcGVyaW9kIGVuZCwgb3IgYG51bGxgIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0b1xuICogcHJvamVjdCBmcm9tLlxuICpcbiAqIFJldHVybnMgbnVsbCByYXRoZXIgdGhhbiB6ZXJvIGZvciBldmVyeSB1bnByb2plY3RhYmxlIGNhc2Ug4oCUIG5vIHVzYWdlIHlldCwgYW5cbiAqIHVubGltaXRlZCBvciBhYnNlbnQgbGltaXQsIGEgcGVyaW9kIHRoYXQgaGFzIG5vdCBzdGFydGVkLCBhbiB1bnBhcnNlYWJsZVxuICogcmVzZXQg4oCUIGJlY2F1c2UgemVybyBpcyBhIEZPUkVDQVNUIGFuZCBcImNhbm5vdCBzYXlcIiBpcyBub3Qgb25lLiBBIGNhbGxlciB0aGF0XG4gKiB0cmVhdGVkIHRoZSB0d28gYWxpa2Ugd291bGQgd2FybiBhbiBhY2NvdW50IGF0IDAlIGFuZCBvZmZlciBhZ2FpbnN0IGFcbiAqIHRyYWplY3Rvcnkgbm9ib2R5IG1lYXN1cmVkLlxuICpcbiAqIFRoZSBidXJuIHJhdGUgaXMgTElORUFSLCBhbmQgdGhhdCBpcyBhIGRlbGliZXJhdGUgZmxvb3IgcmF0aGVyIHRoYW4gYSBtb2RlbDpcbiAqIHJlYWwgd29ya2xvYWRzIHNwaWtlLCBidXQgYSBzdHJhaWdodCBsaW5lIHN0aWxsIGNhdGNoZXMgXCJwYWNpbmcgdGhyZWUgdGltZXNcbiAqIGFoZWFkIG9mIHBsYW5cIiwgd2hpY2ggaXMgdGhlIGNhc2Ugd29ydGggYWN0aW5nIG9uLiBBbnl0aGluZyBjbGV2ZXJlciB3YW50cyB0aGVcbiAqIGhpc3RvcnkgdGhlIHByb2ZpbGUgc3RvcmUga2VlcHMgKEQxNiksIG5vdCBhIGJldHRlciBmb3JtdWxhIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0VXNhZ2UoaW5wdXQ6IHtcbiAgdXNlZDogbnVtYmVyO1xuICBsaW1pdDogbnVtYmVyO1xuICByZXNldEF0OiBzdHJpbmcgfCBEYXRlO1xuICBwZXJpb2REYXlzOiBudW1iZXI7XG4gIC8qKiBEZWZhdWx0cyB0byBub3c7IGluamVjdGFibGUgc28gYSBjYWxsZXIgY2FuIHByb2plY3QgYXMgb2YgYSBwZXJpb2QncyBlbmQuICovXG4gIG5vdz86IG51bWJlcjtcbn0pOiBVc2FnZVByb2plY3Rpb24gfCBudWxsIHtcbiAgY29uc3QgeyB1c2VkLCBsaW1pdCwgcGVyaW9kRGF5cyB9ID0gaW5wdXQ7XG4gIGNvbnN0IHJlc2V0ID0gaW5wdXQucmVzZXRBdCBpbnN0YW5jZW9mIERhdGUgPyBpbnB1dC5yZXNldEF0IDogbmV3IERhdGUoaW5wdXQucmVzZXRBdCk7XG4gIGlmIChOdW1iZXIuaXNOYU4ocmVzZXQuZ2V0VGltZSgpKSkgcmV0dXJuIG51bGw7XG4gIC8vIGBsaW1pdCA8PSAwYCBjb3ZlcnMgYm90aCBhbiB1bnNldCBjYXAgYW5kIHRoZSBgLTFgIHRoYXQgbWVhbnMgdW5saW1pdGVkOlxuICAvLyBuZWl0aGVyIGhhcyBhIHJhdGlvLCBhbmQgdGhlcmUgaXMgbm90aGluZyB0byBicmVhY2guXG4gIGlmICghKGxpbWl0ID4gMCkgfHwgISh1c2VkID4gMCkgfHwgIShwZXJpb2REYXlzID4gMCkpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IG5vdyA9IGlucHV0Lm5vdyA/PyBEYXRlLm5vdygpO1xuICBjb25zdCB0b3RhbCA9IHBlcmlvZERheXMgKiBEQVlfTVM7XG4gIGNvbnN0IHBlcmlvZFN0YXJ0ID0gcmVzZXQuZ2V0VGltZSgpIC0gdG90YWw7XG4gIGNvbnN0IGVsYXBzZWQgPSBub3cgLSBwZXJpb2RTdGFydDtcbiAgLy8gQmVmb3JlIHRoZSBwZXJpb2Qgb3BlbmVkLCBvciBleGFjdGx5IGF0IGl0cyBib3VuZGFyeTogbm8gZWxhcHNlZCB0aW1lIHRvXG4gIC8vIGRpdmlkZSBieSwgYW5kIGV4dHJhcG9sYXRpbmcgZnJvbSB6ZXJvIGVsYXBzZWQgZ2l2ZXMgaW5maW5pdHkuXG4gIGlmIChlbGFwc2VkIDw9IDApIHJldHVybiBudWxsO1xuXG4gIC8vIFBhc3QgdGhlIHJlc2V0IHRoZSBwZXJpb2QgaXMgb3ZlcjsgdGhlIHBhY2UgSVMgdGhlIHVzYWdlLCB3aXRoIG5vXG4gIC8vIGV4dHJhcG9sYXRpb24sIHJhdGhlciB0aGFuIGEgZmlndXJlIHNjYWxlZCBieSBhIGZyYWN0aW9uIGFib3ZlIG9uZS5cbiAgY29uc3Qgc2NhbGUgPSBlbGFwc2VkID49IHRvdGFsID8gMSA6IHRvdGFsIC8gZWxhcHNlZDtcbiAgY29uc3QgcHJvamVjdGVkID0gTWF0aC5yb3VuZCh1c2VkICogc2NhbGUpO1xuICByZXR1cm4ge1xuICAgIHByb2plY3RlZCxcbiAgICByYXRpbzogcHJvamVjdGVkIC8gbGltaXQsXG4gICAgd2lsbEJyZWFjaDogcHJvamVjdGVkID4gbGltaXQsXG4gICAgZWxhcHNlZEZyYWN0aW9uOiBNYXRoLm1pbigxLCBlbGFwc2VkIC8gdG90YWwpLFxuICB9O1xufVxuXG4vKipcbiAqIFRoZSBiYW5kIGF0IHdoaWNoIGEgcHJvamVjdGlvbiBpcyB3b3J0aCBzaG93aW5nIGEgcGVyc29uLlxuICpcbiAqIFNoYXJlZCBzbyB0aGUgY2FyZCdzIGZvcmVjYXN0IHJvdyBhbmQgdGhlIHByb2ZpbGUncyBwcmVzc3VyZSBzaWduYWwgYWdyZWUgb25cbiAqIHdoYXQgXCJhcHByb2FjaGluZ1wiIG1lYW5zLiBCZWxvdyBpdCB0aGVyZSBpcyBhIHByb2plY3Rpb24gYnV0IG5vIHJlYXNvbiB0byBzYXlcbiAqIGFueXRoaW5nLCB3aGljaCBpcyBhIGRpZmZlcmVudCBzdGF0ZSBmcm9tIGhhdmluZyBubyBwcm9qZWN0aW9uIGF0IGFsbC5cbiAqL1xuZXhwb3J0IGNvbnN0IFBST0pFQ1RJT05fTk9USUNFX1JBVElPID0gMC43O1xuXG4vKiogV2hldGhlciBhIHByb2plY3Rpb24gaGFzIGNyb3NzZWQgaW50byB0aGUgYmFuZCB3b3J0aCBzdXJmYWNpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvamVjdGlvbldvcnRoU2hvd2luZyhwOiBVc2FnZVByb2plY3Rpb24gfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBwICE9PSBudWxsICYmIHAucmF0aW8gPj0gUFJPSkVDVElPTl9OT1RJQ0VfUkFUSU87XG59XG4iXX0=
|