@pipeline-builder/api-core 5.2.11 → 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 +215 -24
- package/lib/types/ecosystem-notifications.js +18 -9
- package/lib/types/ecosystem.d.ts +1 -0
- package/lib/types/ecosystem.js +33 -23
- 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 +257 -128
- package/lib/types/plugin-catalog.d.ts +25 -1
- package/lib/types/plugin-catalog.js +21 -2
- 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 +10 -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/plugin-spec-schema.d.ts +0 -9
- package/lib/validation/plugin-spec-schema.js +2 -11
- package/package.json +8 -1
package/lib/services/quota.js
CHANGED
|
@@ -556,4 +556,4 @@ export function decrementQuota(quotaService, orgId, quotaType, authHeader, logWa
|
|
|
556
556
|
: quotaService.decrement(orgId, quotaType, authHeader, amount, resetAtSnapshot);
|
|
557
557
|
sent.catch((err) => logWarn('Quota rollback failed', { error: errorMessage(err) }));
|
|
558
558
|
}
|
|
559
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9xdW90YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBSXRDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUE4QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0scUJBQXFCLEdBQStEO0lBQ3hGLG1CQUFtQixFQUFFLENBQUM7SUFDdEIsVUFBVSxFQUFFLENBQUM7Q0FDZCxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNC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QVMsQ0FBQyxhQUFhLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUMxRixTQUFTLENBQ1AsR0FBRyxFQUNILEdBQUcsRUFDSCxxQkFBcUIsU0FBUyw2Q0FBNkMsRUFDM0UsU0FBUyxDQUFDLG1CQUFtQixDQUM5QixDQUFDO1FBQ0YsT0FBTztJQUNULENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUUsWUFBMEIsRUFDeEQsS0FBYSxFQUNiLFNBQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLE9BQWtELEVBQ2xELE1BQU0sR0FBVyxDQUFDLEVBQ2xCLGVBQXdCLEVBQ3hCLFdBQW1DO0lBRW5DLE1BQU0sSUFBSSxHQUFHLFdBQVc7UUFDdEIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUM7UUFDNUYsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2xGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFZLEVBQUUsRUFBRSxDQUMxQixPQUFPLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDL0QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuXG5pbXBvcnQgeyBjdXJyZW50QXVkaXRDb250ZXh0LCBzYW5pdGl6ZUNvcnJlbGF0aW9uSWQgfSBmcm9tICcuL2F1ZGl0LWNvbnRleHQuanMnO1xuaW1wb3J0IHsgY3JlYXRlU2FmZUNsaWVudCwgdHlwZSBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaHR0cC1jbGllbnQuanMnO1xuaW1wb3J0IHsgYmF0Y2hlckZvciwgdHlwZSBNZXRlcmVkSW5jcmVtZW50R3JvdXAgfSBmcm9tICcuL3F1b3RhLWluY3JlbWVudC1iYXRjaGVyLmpzJztcbmltcG9ydCB7IG9uQmVoYWxmQ2FsbGVyIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9vbi1iZWhhbGYuanMnO1xuaW1wb3J0IHsgZ2V0U2VydmljZUF1dGhIZWFkZXIsIGlzU2VydmljZVByaW5jaXBhbCB9IGZyb20gJy4uL21pZGRsZXdhcmUvc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHsgU1lTVEVNX09SR19JRCB9IGZyb20gJy4uL21pZGRsZXdhcmUvc3lzdGVtLW9yZy5qcyc7XG5pbXBvcnQgdHlwZSB7IEp3dFBheWxvYWQsIFByaW5jaXBhbFR5cGUsIFF1b3RhVHlwZSwgUXVvdGFDaGVja1Jlc3VsdCwgU2VydmljZUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX1RJRVIsIGlzVmFsaWRUaWVyLCB0eXBlIFF1b3RhVGllciB9IGZyb20gJy4uL3R5cGVzL3F1b3RhLXRpZXJzLmpzJztcbmltcG9ydCB7IGVudkJvb2wsIGVudkludCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UsIHNlbmRFcnJvciwgc2VuZFF1b3RhRXhjZWVkZWQgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBzZXJ2aWNlRW5kcG9pbnQgfSBmcm9tICcuLi91dGlscy9zZXJ2aWNlLXJlZ2lzdHJ5LmpzJztcblxuLyoqXG4gKiBSZXRyeSBvcHRpb25zIGZvciBxdW90YSBjYWxscyDigJQgZmFpbCBmYXN0IChhIHNsb3cgcXVvdGEgc2VydmljZSBtdXN0IG5vdCBzdGFsbCB0aGUgcmVxdWVzdCkuXG4gKlxuICogTkVWRVIgcmV0cnkgYSA0MjkuIFRoZSBxdW90YSBzZXJ2aWNlIGFuc3dlcnMgYW4gb3Zlci1saW1pdCBvcmcgd2l0aCA0MjlcbiAqIFFVT1RBX0VYQ0VFREVEIGFuZCBgUmV0cnktQWZ0ZXJgID0gc2Vjb25kcyB1bnRpbCB0aGUgcGVyaW9kIHJlc2V0czsgdGhlIEhUVFBcbiAqIGNsaWVudCBob25vcnMgdGhhdCAoY2FwcGVkIGF0IDYwcyksIHNvIGEgc2luZ2xlIHJhdGUtbGltaXQgcmV0cnkgc3RhbGxlZCB0aGVcbiAqIHJlcXVlc3Qgd2VsbCBwYXN0IHRoZSBoYW5kbGVyIHRpbWVvdXQsIHdoaWNoIHRoZW4gYW5zd2VyZWQgNTAzIGFuZCB0aGUgcmVhbFxuICogNDI5IHdhcyBsb3N0LiBBIDQyOSBpcyBhIGZpbmFsIGFuc3dlciBoZXJlLlxuICovXG5jb25zdCBRVU9UQV9SRVFVRVNUX09QVElPTlM6IFBpY2s8UmVxdWVzdE9wdGlvbnMsICdtYXhSYXRlTGltaXRSZXRyaWVzJyB8ICdtYXhSZXRyaWVzJz4gPSB7XG4gIG1heFJhdGVMaW1pdFJldHJpZXM6IDAsXG4gIG1heFJldHJpZXM6IDEsXG59O1xuXG4vKipcbiAqIEJ1ZGdldCBmb3Igb25lIGBjaGVja2Agb2YgYSBDT1VOVEVSIHF1b3RhIChgUVVPVEFfQ0hFQ0tfVElNRU9VVF9NU2AsIGRlZmF1bHRcbiAqIDMwMCksIHdpdGggbm8gcmV0cnkuXG4gKlxuICogVGhlIGNoZWNrIGlzIGEgcmVhZCBnYXRlIHRoYXQgRkFJTFMgT1BFTiwgcnVuIGFoZWFkIG9mIHRoZSByZXF1ZXN0IGl0IGdhdGVzOlxuICogdGhlIG9sZCA1IHMgdGltZW91dCDDlyAyIGF0dGVtcHRzIG1lYW50IGEgc2xvdyBxdW90YSBzZXJ2aWNlIGFkZGVkIHVwIHRvIDEwIHNcbiAqIHRvIGV2ZXJ5IG1ldGVyZWQgcmVxdWVzdCBhbmQgdGhlbiBsZXQgaXQgdGhyb3VnaCBhbnl3YXkuIEEgc2hvcnQgYnVkZ2V0IHR1cm5zXG4gKiB0aGUgc2FtZSBpbmNpZGVudCBpbnRvIGEg4omkIDMwMCBtcyBmYWlsLW9wZW4gKGNvdW50ZWQgb25cbiAqIGBxdW90YV9mYWlsX29wZW5fdG90YWxgLCB3aGljaCBhbGVydHMpIOKAlCBhbmQgd2l0aCB0aGUgcGVyLXBvZCBjaGVjayBjYWNoZSBpblxuICogZnJvbnQgKGFwaS1zZXJ2ZXIgYGNoZWNrUXVvdGFgKSBhIGhlYWx0aHkgc2VydmljZSBpcyBhc2tlZCBhdCBtb3N0IG9uY2UgcGVyXG4gKiBvcmcvdHlwZSBwZXIgY2FjaGUgVFRMLlxuICpcbiAqIGBzdG9yYWdlQnl0ZXNgIGtlZXBzIHRoZSBjbGllbnQgdGltZW91dCBhbmQgb25lIHJldHJ5OiBpdCBpcyBhIE1FQVNVUkVEIHJlYWRcbiAqICh0aGUgcXVvdGEgc2VydmljZSB3YWxrcyB0aGUgb3JnJ3MgcmVnaXN0cnkgbmFtZXNwYWNlIG9uIGEgY29sZCBjYWNoZSkgYmVoaW5kXG4gKiB0aGUgcmVnaXN0cnkncyBmYWlsLUNMT1NFRCBwdXNoIGdhdGUsIHdoZXJlIGEgcHJlbWF0dXJlIHRpbWVvdXQgcmVmdXNlcyBhIHB1c2guXG4gKi9cbmV4cG9ydCBjb25zdCBRVU9UQV9DSEVDS19USU1FT1VUX01TID0gZW52SW50KCdRVU9UQV9DSEVDS19USU1FT1VUX01TJywgMzAwLCB7IG1pbjogMSB9KTtcblxuZnVuY3Rpb24gY2hlY2tSZXF1ZXN0T3B0aW9ucyhxdW90YVR5cGU6IFF1b3RhVHlwZSk6IFBpY2s8UmVxdWVzdE9wdGlvbnMsICdtYXhSYXRlTGltaXRSZXRyaWVzJyB8ICdtYXhSZXRyaWVzJyB8ICd0aW1lb3V0Jz4ge1xuICBpZiAocXVvdGFUeXBlID09PSAnc3RvcmFnZUJ5dGVzJykgcmV0dXJuIFFVT1RBX1JFUVVFU1RfT1BUSU9OUztcbiAgcmV0dXJuIHsgbWF4UmF0ZUxpbWl0UmV0cmllczogMCwgbWF4UmV0cmllczogMCwgdGltZW91dDogUVVPVEFfQ0hFQ0tfVElNRU9VVF9NUyB9O1xufVxuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3F1b3RhJyk7XG5cbi8vIFJFU0VSVkUgRkFJTCBNT0RFIOKAlCBleHBsaWNpdCwgc2luZ2xlIHBvbGljeS5cbi8vXG4vLyBgcmVzZXJ2ZWAgZ2F0ZXMgRVhQRU5TSVZFLCBiaWxsYWJsZSByZXNvdXJjZXMgKHBpcGVsaW5lcywgcGx1Z2luIGJ1aWxkcywgQUlcbi8vIGNhbGxzLCBwbGF0Zm9ybSBmZWF0dXJlIHNsb3RzKS4gRXZlcnkgcXVvdGEgdHlwZSBpcyBhIHBlci1wZXJpb2QgRkxPVyBjb3VudGVyXG4vLyB3aXRoIG5vIGFmdGVyLXRoZS1mYWN0IHJlY29uY2lsaWF0aW9uOiBhIHVuaXQgY29uc3VtZWQgd2hpbGUgdGhlIHJlc2VydmF0aW9uXG4vLyBjb3VsZCBub3QgYmUgY29uZmlybWVkIGlzIG5ldmVyIGNvdW50ZWQsIHNvIGZhaWwtb3BlbiBsZXRzIGFuIG9yZyBjb25zdW1lXG4vLyB1bmJvdW5kZWQgdW5tZXRlcmVkIHVuaXRzIGZvciB0aGUgd2hvbGUgbGVuZ3RoIG9mIGFuIGluY2lkZW50IOKAlCBhbmQgYW5cbi8vIHVuY29uZmlybWVkIHJlc2VydmUgKHRpbWVvdXQsIG9wZW4gY2lyY3VpdCkgbWF5IGV2ZW4gaGF2ZSBsYW5kZWQgc2VydmVyLXNpZGUuXG4vLyBTbyBgcmVzZXJ2ZWAgZmFpbHMgQ0xPU0VEIHdoZW5ldmVyIHRoZSBxdW90YSBzZXJ2aWNlIGRpZCBub3QgQ09ORklSTSB0aGUgc2xvdDpcbi8vICAgLSB1bnJlYWNoYWJsZSAvIHRpbWVkIG91dCAvIGNpcmN1aXQgYnJlYWtlciBvcGVuIChubyByZXNwb25zZSksXG4vLyAgIC0gYSByZWFjaGFibGUtYnV0LWVycm9yZWQgcmVzcG9uc2UgKDV4eCwgNHh4LCBtYWxmb3JtZWQgYm9keSksXG4vLyAgIC0gYSA0MjkgdGhhdCBpcyBOT1QgYSBnZW51aW5lIFFVT1RBX0VYQ0VFREVEIChnYXRld2F5IC8gcmF0ZSBsaW1pdGVyKS5cbi8vIE9wZXJhdG9ycyB3aG8gcHJlZmVyIGF2YWlsYWJpbGl0eSBvdmVyIGVuZm9yY2VtZW50IG9wdCB0aGUgV0hPTEUgc2V0IGludG9cbi8vIGZhaWwtb3BlbiB3aXRoIFFVT1RBX1JFU0VSVkVfRkFJTF9PUEVOPXRydWUuIEJvdGggb3V0Y29tZXMgZW1pdCBhIGNvdW50ZXJcbi8vIChgcXVvdGFfZmFpbF9jbG9zZWRfdG90YWxgIC8gYHF1b3RhX2ZhaWxfb3Blbl90b3RhbGApIHRhZ2dlZCB3aXRoIHRoZSByZWFzb24uXG4vLyBgY2hlY2tgIChhIGNoZWFwIHJlYWQgZ2F0ZSkgc3RheXMgZmFpbC1vcGVuOyBgaW5jcmVtZW50YCBpcyBmaXJlLWFuZC1mb3JnZXQuXG5jb25zdCBRVU9UQV9SRVNFUlZFX0ZBSUxfT1BFTiA9IGVudkJvb2woJ1FVT1RBX1JFU0VSVkVfRkFJTF9PUEVOJywgZmFsc2UpO1xuXG4vLyBVU0FHRSBBVFRSSUJVVElPTiDigJQgd2hvIHNwZW50IGEgdW5pdC5cbi8vXG4vLyBUaGUgcXVvdGEgc2VydmljZSBrZWVwcyBvbmUgYWdncmVnYXRlIGNvdW50ZXIgcGVyIChvcmcsIHR5cGUpOyBvbiBpdHMgb3duIHRoYXRcbi8vIGNhbiBzYXkgYW4gb3JnIGlzIGF0IDEwMCUgYnV0IG5ldmVyIFdISUNIIGtleSwgcm91dGUgb3IgcGlwZWxpbmUgZ290IGl0IHRoZXJlLlxuLy8gRXZlcnkgaW5jcmVtZW50IC8gcmVzZXJ2ZSAvIHJlZnVuZCB0aGVyZWZvcmUgY2FycmllcyBhbiBhdHRyaWJ1dGlvbiBibG9jayB0aGVcbi8vIHF1b3RhIHNlcnZpY2Ugd3JpdGVzIGludG8gaXRzIHVzYWdlIGxlZGdlciAoYEdFVCAvcXVvdGFzLzpvcmdJZC91c2FnZWApLiBJdCBpc1xuLy8gbWV0YWRhdGEgb25seSDigJQgZW5mb3JjZW1lbnQgbmV2ZXIgcmVhZHMgaXQg4oCUIGFuZCBldmVyeSBmaWVsZCBpcyBvcHRpb25hbCwgc28gYVxuLy8gY2FsbGVyIHRoYXQga25vd3Mgbm90aGluZyBzdGlsbCBtZXRlcnMgY29ycmVjdGx5LlxuXG4vKiogV2hvIC8gd2hhdCBzcGVudCAob3IgZ290IGJhY2spIGEgcXVvdGEgdW5pdC4gQWxsIGZpZWxkcyBvcHRpb25hbC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFVc2FnZUF0dHJpYnV0aW9uIHtcbiAgcHJpbmNpcGFsVHlwZT86IFByaW5jaXBhbFR5cGU7XG4gIC8qKiBUaGUgdXNlciBpZCBvciBzZXJ2aWNlLWFjY291bnQgaWQgYmVoaW5kIHRoZSBjYWxsICh0aGUgdG9rZW4ncyBgc3ViYCkuICovXG4gIHByaW5jaXBhbElkPzogc3RyaW5nO1xuICAvKiogVGhlIHJldm9jYWJsZSBjcmVkZW50aWFsOiB0aGUgYWNjZXNzIGtleSB0aGUgdG9rZW4gZGVyaXZlcyBmcm9tLCBlbHNlIGl0cyBganRpYC4gKi9cbiAga2V5SWQ/OiBzdHJpbmc7XG4gIC8qKiBgTUVUSE9EIC9yb3V0ZS86cGF0dGVybmAg4oCUIHRoZSBtYXRjaGVkIHJvdXRlIFBBVFRFUk4sIG5ldmVyIHRoZSByYXcgVVJMIChubyBpZHMsIG5vIHF1ZXJ5KS4gKi9cbiAgcm91dGU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgcGlwZWxpbmUgdGhlIGNhbGwgd2FzIG1hZGUgZm9yIChgOnBpcGVsaW5lSWRgIHBhcmFtIG9yIGBYLVBpcGVsaW5lLUlkYCBoZWFkZXIpLiAqL1xuICBwaXBlbGluZUlkPzogc3RyaW5nO1xuICByZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBSSBjYWxscyBvbmx5OiB3aGljaCBwcm9kdWN0IHN1cmZhY2Ugc3BlbnQgdGhlIHVuaXQg4oCUIGBhc2tgLCBgYWdlbnRgLFxuICAgKiBgYWdlbnQtdG9vbDo8bmFtZT5gLCBgcGlwZWxpbmUtZ2VuZXJhdGVgLCBgcGx1Z2luLWdlbmVyYXRlYCxcbiAgICogYHJlcG9ydC1zdW1tYXJ5YC4gU2V0IGJ5IGFwaS1zZXJ2ZXIncyBgd2l0aEFpQ2FsbFJlc2VydmF0aW9uYC5cbiAgICovXG4gIGZlYXR1cmU/OiBzdHJpbmc7XG4gIC8qKiBBSSBjYWxscyBvbmx5OiB0aGUgbW9kZWwgaWQgdGhlIHJlc2VydmF0aW9uIHdhcyByZXNvbHZlZCB0byAobmV2ZXIgYSBrZXkpLiAqL1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqIEFJIGNhbGxzIG9ubHk6IHdob3NlIGtleSBzZXJ2ZWQgdGhlIGNhbGwg4oCUIGBwbGF0Zm9ybWAsIGBvcmdgIG9yIGByZXF1ZXN0YCAoQllPSykuICovXG4gIGtleVNvdXJjZT86IEFpS2V5U291cmNlO1xufVxuXG4vKiogV2hvc2Uga2V5IHNlcnZlcyBhbiBBSSBjYWxsIChtaXJyb3JzIGFpLWNvcmUgYEtleVNvdXJjZWApLiBPbmx5IGBwbGF0Zm9ybWAgc3BlbmRzIGBhaUNhbGxzYC4gKi9cbmV4cG9ydCB0eXBlIEFpS2V5U291cmNlID0gJ3BsYXRmb3JtJyB8ICdvcmcnIHwgJ3JlcXVlc3QnO1xuXG4vKiogVG9rZW4gY291bnRzIGFuIEFJIGNhbGwgcmVwb3J0cyBhZnRlciBpdCBzZXR0bGVzIChzZWUge0BsaW5rIFF1b3RhU2VydmljZS5yZXBvcnRVc2FnZX0pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVRva2VuVXNhZ2Uge1xuICB0b2tlbnNJbjogbnVtYmVyO1xuICB0b2tlbnNPdXQ6IG51bWJlcjtcbn1cblxuLyoqIExvbmdlc3QgYXR0cmlidXRpb24gc3RyaW5nIHRoZSBjbGllbnQgc2VuZHMgKHRoZSBxdW90YSBzZXJ2aWNlIGVuZm9yY2VzIHRoZSBzYW1lIGJvdW5kKS4gKi9cbmNvbnN0IE1BWF9BVFRSSUJVVElPTl9MRU4gPSAyMDA7XG5cbmZ1bmN0aW9uIGJvdW5kZWQodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUuc2xpY2UoMCwgTUFYX0FUVFJJQlVUSU9OX0xFTikgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBUaGUgcHJpbmNpcGFsIGhhbGYgb2YgYW4gYXR0cmlidXRpb24gYmxvY2ssIGZyb20gYSBWRVJJRklFRCB0b2tlbi4gKi9cbmZ1bmN0aW9uIHByaW5jaXBhbEF0dHJpYnV0aW9uKHVzZXI6IEp3dFBheWxvYWQgfCB1bmRlZmluZWQpOiBRdW90YVVzYWdlQXR0cmlidXRpb24ge1xuICBpZiAoIXVzZXIpIHJldHVybiB7fTtcbiAgcmV0dXJuIHtcbiAgICBwcmluY2lwYWxUeXBlOiB1c2VyLnByaW5jaXBhbFR5cGUsXG4gICAgcHJpbmNpcGFsSWQ6IGJvdW5kZWQodXNlci5zdWIpLFxuICAgIGtleUlkOiBib3VuZGVkKHVzZXIucGFyZW50S2V5SWQgPz8gdXNlci5qdGkpLFxuICB9O1xufVxuXG4vKipcbiAqIEF0dHJpYnV0aW9uIGZvciB0aGUgcmVxdWVzdCBiZWluZyBzZXJ2ZWQ6IHRoZSB2ZXJpZmllZCBwcmluY2lwYWwsIHRoZSBtYXRjaGVkXG4gKiByb3V0ZSBwYXR0ZXJuLCB0aGUgcGlwZWxpbmUgKGA6cGlwZWxpbmVJZGAgcGFyYW0gb3IgYSBzYW5pdGl6ZWRcbiAqIGBYLVBpcGVsaW5lLUlkYCBoZWFkZXIpIGFuZCB0aGUgcmVxdWVzdCBpZC4gUmVhZCBvZmYgYHJlcWAgZGlyZWN0bHkgcmF0aGVyIHRoYW5cbiAqIHRoZSBhbWJpZW50IGF1ZGl0IGNvbnRleHQgYmVjYXVzZSB0aGUgbWV0ZXJpbmcgbWlkZGxld2FyZSBydW5zIGluIGEgYGZpbmlzaGBcbiAqIGxpc3RlbmVyLCB3aGVyZSB0aGUgcmVxdWVzdCdzIGFzeW5jIHNjb3BlIGlzIG5vIGxvbmdlciBndWFyYW50ZWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVvdGFBdHRyaWJ1dGlvbkZyb21SZXF1ZXN0KHJlcTogUmVxdWVzdCk6IFF1b3RhVXNhZ2VBdHRyaWJ1dGlvbiB7XG4gIGNvbnN0IHJvdXRlUGF0aCA9IHJlcS5yb3V0ZT8ucGF0aDtcbiAgY29uc3Qgcm91dGUgPSB0eXBlb2Ygcm91dGVQYXRoID09PSAnc3RyaW5nJyA/IGAke3JlcS5tZXRob2R9ICR7KHJlcS5iYXNlVXJsID8/ICcnKSArIHJvdXRlUGF0aH1gIDogdW5kZWZpbmVkO1xuICBjb25zdCBoZWFkZXIgPSByZXEuaGVhZGVyc1sneC1waXBlbGluZS1pZCddO1xuICBjb25zdCBwaXBlbGluZUlkID0gc2FuaXRpemVDb3JyZWxhdGlvbklkKHJlcS5wYXJhbXM/LnBpcGVsaW5lSWQpID8/IHNhbml0aXplQ29ycmVsYXRpb25JZChBcnJheS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXJbMF0gOiBoZWFkZXIpO1xuICBjb25zdCByZXF1ZXN0SWRIZWFkZXIgPSByZXEuaGVhZGVyc1sneC1yZXF1ZXN0LWlkJ107XG4gIGNvbnN0IHJlcXVlc3RJZCA9IChyZXEgYXMgUmVxdWVzdCAmIHsgcmVxdWVzdElkPzogc3RyaW5nIH0pLnJlcXVlc3RJZFxuICAgID8/IHNhbml0aXplQ29ycmVsYXRpb25JZChBcnJheS5pc0FycmF5KHJlcXVlc3RJZEhlYWRlcikgPyByZXF1ZXN0SWRIZWFkZXJbMF0gOiByZXF1ZXN0SWRIZWFkZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLnByaW5jaXBhbEF0dHJpYnV0aW9uKHJlcS51c2VyKSxcbiAgICAuLi4ocm91dGUgPyB7IHJvdXRlOiByb3V0ZS5zbGljZSgwLCBNQVhfQVRUUklCVVRJT05fTEVOKSB9IDoge30pLFxuICAgIC4uLihwaXBlbGluZUlkID8geyBwaXBlbGluZUlkIH0gOiB7fSksXG4gICAgLi4uKHJlcXVlc3RJZCA/IHsgcmVxdWVzdElkOiBib3VuZGVkKHJlcXVlc3RJZCkgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGlvbiBmcm9tIHRoZSBhbWJpZW50IGF1ZGl0IGNvbnRleHQsIGZvciBjYWxscyBtYWRlIGluc2lkZSBhIHJlcXVlc3RcbiAqIHNjb3BlIHRoYXQgZGlkIG5vdCBwYXNzIG9uZSBleHBsaWNpdGx5ICh0aGUgcmVzZXJ2ZSAvIHJlZnVuZCBoZWxwZXJzIGV2ZXJ5XG4gKiBzZXJ2aWNlIHVzZXMpLiBFbXB0eSBvdXRzaWRlIGFueSBzY29wZS5cbiAqL1xuZnVuY3Rpb24gYXR0cmlidXRpb25Gcm9tQ29udGV4dCgpOiBRdW90YVVzYWdlQXR0cmlidXRpb24ge1xuICBjb25zdCBjdHggPSBjdXJyZW50QXVkaXRDb250ZXh0KCk7XG4gIGlmICghY3R4KSByZXR1cm4ge307XG4gIHJldHVybiB7XG4gICAgLi4ucHJpbmNpcGFsQXR0cmlidXRpb24oY3R4LnByaW5jaXBhbD8uKCkpLFxuICAgIC4uLihjdHgucmVxdWVzdElkID8geyByZXF1ZXN0SWQ6IGJvdW5kZWQoY3R4LnJlcXVlc3RJZCkgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqIFRoZSBhdHRyaWJ1dGlvbiBhIHF1b3RhIHdyaXRlIHNlbmRzOiB0aGUgZXhwbGljaXQgYmxvY2ssIGVsc2UgdGhlIGFtYmllbnQgb25lLiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUF0dHJpYnV0aW9uKGV4cGxpY2l0PzogUXVvdGFVc2FnZUF0dHJpYnV0aW9uKTogUXVvdGFVc2FnZUF0dHJpYnV0aW9uIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBleHBsaWNpdCA/PyBhdHRyaWJ1dGlvbkZyb21Db250ZXh0KCk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhyZXNvbHZlZCkubGVuZ3RoID4gMCA/IHJlc29sdmVkIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBxdW90YSB0eXBlIGEgbWV0ZXJlZCByZXF1ZXN0IGFjdHVhbGx5IHNwZW5kcy5cbiAqXG4gKiBgYXBpQ2FsbHNgIGlzIHRoZSBQRU9QTEUncyBidWRnZXQg4oCUIGFuIGludGVyYWN0aXZlIHNlc3Npb24uIEEgcmVxdWVzdCBtYWRlIGJ5XG4gKiBhIE5PTi1JTlRFUkFDVElWRSBjcmVkZW50aWFsIHNwZW5kcyBgYXV0b21hdGlvbkNhbGxzYCBpbnN0ZWFkLCBuZXZlciBib3RoLCBzb1xuICogYSBmbGVldCBvZiBzZWxmLW11dGF0aW5nIHBpcGVsaW5lcyBjYW4ndCBleGhhdXN0IHRoZSBjb25zb2xlIGZvciB0aGUgaHVtYW5zXG4gKiBpbiB0aGUgc2FtZSBvcmc6XG4gKiAgLSBhbiBvcmcgU0VSVklDRSBBQ0NPVU5UIChgcHJpbmNpcGFsVHlwZTogJ3NlcnZpY2VfYWNjb3VudCdgIOKAlFxuICogICAgcGxhdGZvcm0tYXV0b21hdGlvbiwgcGlwZWxpbmUtcmVnaXN0ZXIsIHJlcG9ydGluZy1pbmdlc3QsIHJlZ2lzdHJ5LXB1c2gpO1xuICogIC0gYSBQRVJTT05BTCBBQ0NFU1MgS0VZOiB0aGUgZXhjaGFuZ2VkIGtleSB0b2tlbiAoYHRva2VuX3VzZTogJ2FwaV9rZXknYClcbiAqICAgIGFuZCBhbnl0aGluZyBtaW50ZWQgd2hpbGUgaG9sZGluZyBvbmUgKGBwYXJlbnRLZXlJZGApLiBBIFBBVCBpbiBhIENJIGpvYlxuICogICAgaXMgYXV0b21hdGlvbiB3aG9ldmVyIG93bnMgaXQg4oCUIGJpbGxpbmcgaXQgYXMgYSBwZXJzb24gbGV0IG9uZSBzY3JpcHRcbiAqICAgIGxvY2sgaXRzIG93bmVyJ3MgdGVhbW1hdGVzIG91dCBvZiB0aGUgY29uc29sZS4gQ0kgc2hvdWxkIHN0aWxsIHVzZSBhXG4gKiAgICBzZXJ2aWNlLWFjY291bnQga2V5IChpdCBzdXJ2aXZlcyB0aGUgcGVyc29uIGxlYXZpbmcpOyBlaXRoZXIgd2F5IHRoZVxuICogICAgdHJhZmZpYyBub3cgbGFuZHMgb24gYGF1dG9tYXRpb25DYWxsc2AuXG4gKiBFdmVyeSBvdGhlciB0eXBlIGlzIHJldHVybmVkIHVuY2hhbmdlZDogYW4gQUkgY2FsbCBvciBhIHBpcGVsaW5lIGNyZWF0aW9uXG4gKiBjb3N0cyB0aGUgc2FtZSB3aG9ldmVyIG1ha2VzIGl0LlxuICpcbiAqIGBtZXRlclF1b3RhT25TdWNjZXNzYCBhbmQgYGNoZWNrUXVvdGFgIGNhbGwgdGhpcyB0aGVtc2VsdmVzLCBzbyBhIHNlcnZpY2VcbiAqIG1vdW50cyBib3RoIHdpdGggYCdhcGlDYWxscydgIGFuZCB0aGUgc3BsaXQgaGFwcGVucyBwZXIgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldGVyZWRRdW90YVR5cGVGb3IocmVxOiBQaWNrPFJlcXVlc3QsICd1c2VyJz4sIHF1b3RhVHlwZTogUXVvdGFUeXBlKTogUXVvdGFUeXBlIHtcbiAgaWYgKHF1b3RhVHlwZSAhPT0gJ2FwaUNhbGxzJyB8fCAhcmVxLnVzZXIpIHJldHVybiBxdW90YVR5cGU7XG4gIGNvbnN0IHUgPSByZXEudXNlcjtcbiAgaWYgKHUucHJpbmNpcGFsVHlwZSA9PT0gJ3NlcnZpY2VfYWNjb3VudCcgfHwgdS50b2tlbl91c2UgPT09ICdhcGlfa2V5JyB8fCB1LnBhcmVudEtleUlkKSByZXR1cm4gJ2F1dG9tYXRpb25DYWxscyc7XG4gIHJldHVybiBxdW90YVR5cGU7XG59XG5cbi8qKiBXaHkgYSByZXF1ZXN0IGlzIG5vdCBtZXRlcmVkL2NoZWNrZWQgYWdhaW5zdCBhcGlDYWxscyAoc2VlIHtAbGluayBjYWxsUXVvdGFFeGVtcHRpb259KS4gKi9cbmV4cG9ydCB0eXBlIENhbGxRdW90YUV4ZW1wdGlvbiA9ICdzZXJ2aWNlJyB8ICdpbXBlcnNvbmF0aW9uJyB8ICdvbl9iZWhhbGYnO1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIGFwaUNhbGxzL2F1dG9tYXRpb25DYWxscyBtZXRlciBBTkQgY2hlY2sgc2tpcCB0aGlzICh2ZXJpZmllZClcbiAqIHJlcXVlc3QsIGFuZCB3aHkuIE9uZSBmdW5jdGlvbiBmb3IgYm90aCBoYWx2ZXMsIHNvIHRoZSBnYXRlIG5ldmVyIHJlZnVzZXMgYVxuICogY2FsbCB0aGUgbWV0ZXIgd291bGQgbm90IGJpbGw6XG4gKiAgLSBgc2VydmljZWAg4oCUIGFuIGludGVybmFsIHNlcnZpY2UgcHJpbmNpcGFsOiBwZWVyIHRyYWZmaWMgaXMgY2F1c2VkIGJ5IGFcbiAqICAgIHVzZXIgYWN0aW9uIHRoZSBvcmlnaW5hdGluZyBzZXJ2aWNlIGFscmVhZHkgbWV0ZXJlZDtcbiAqICAtIGBpbXBlcnNvbmF0aW9uYCDigJQgYSBzeXNhZG1pbiBpbXBlcnNvbmF0aW9uIHNlc3Npb24gKGBpbXBlcnNvbmF0b3JJZGApLlxuICogICAgVmVuZG9yIHN0YWZmIGxvb2tpbmcgYXQgYSB0ZW5hbnQncyBjb25zb2xlIG11c3QgbmVpdGhlciBzcGVuZCB0aGUgdGVuYW50J3NcbiAqICAgIGJ1ZGdldCBub3IgYmUgbG9ja2VkIG91dCBieSBpdCB3aGlsZSBkaWFnbm9zaW5nIGFuIGV4aGF1c3RlZCBvcmc7IHRoZVxuICogICAgc2Vzc2lvbiBpcyBhdWRpdGVkIG9uIGl0cyBvd24gdHJhaWw7XG4gKiAgLSBgb25fYmVoYWxmYCDigJQgYSB1c2VyIHRva2VuIEZPUldBUkRFRCBieSBhbiBpbnRlcm5hbCBzZXJ2aWNlIGFzIHBhcnQgb2YgYVxuICogICAgcmVxdWVzdCBhbHJlYWR5IG1ldGVyZWQgd2hlcmUgaXQgYXJyaXZlZCAodGhlIGFzayBhZ2VudCdzIHRvb2xzLFxuICogICAgcGlwZWxpbmUncyBwbGFjZWhvbGRlci1wbHVnaW4gY29uZmlybSksIHByb3ZlbiBieSBhIHNpZ25lZCBtYXJrZXIgdGhlXG4gKiAgICB1c2VyIGNhbm5vdCBmb3JnZSAobWlkZGxld2FyZS9vbi1iZWhhbGYudHMpLlxuICogQXBwbGllcyB0byB0aGUgQ0FMTCBidWRnZXRzIG9ubHk6IHJlc2VydmF0aW9uLWdhdGVkIHF1b3RhcyAocGlwZWxpbmVzLFxuICogcGx1Z2lucyDigKYpIGFyZSBjaGFyZ2VkIHdob2V2ZXIgYXNrcy4gYGFpQ2FsbHNgIG1pcnJvcnMgdGhlIGltcGVyc29uYXRpb24gaGFsZlxuICogb24gaXRzIG93biAoYXBpLXNlcnZlciBgd2l0aEFpQ2FsbFJlc2VydmF0aW9uYCBza2lwcyB0aGUgc2xvdCB3aGVuIHRoZVxuICogc2Vzc2lvbiBpcyBhbiBpbXBlcnNvbmF0aW9uOyB0aGUgY2FsbCBpcyBzdGlsbCBhdWRpdGVkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGxRdW90YUV4ZW1wdGlvbihyZXE6IFJlcXVlc3QpOiBDYWxsUXVvdGFFeGVtcHRpb24gfCB1bmRlZmluZWQge1xuICBpZiAoIXJlcS51c2VyKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoaXNTZXJ2aWNlUHJpbmNpcGFsKHJlcSkpIHJldHVybiAnc2VydmljZSc7XG4gIGlmIChyZXEudXNlci5pbXBlcnNvbmF0b3JJZCkgcmV0dXJuICdpbXBlcnNvbmF0aW9uJztcbiAgaWYgKG9uQmVoYWxmQ2FsbGVyKHJlcSkpIHJldHVybiAnb25fYmVoYWxmJztcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlLXByaW5jaXBhbCBgQXV0aG9yaXphdGlvbmAgaGVhZGVyIGZvciBhIHF1b3RhIGNhbGwgbWFkZSBvbiBiZWhhbGYgb2ZcbiAqIGBvcmdJZGAgYnkgdGhlIENVUlJFTlQgc2VydmljZSAoYFNFUlZJQ0VfTkFNRWAsIHRoZSBzYW1lIGlkZW50aXR5IHRoZSBoZWFsdGhcbiAqIHJvdXRlciByZXBvcnRzKS5cbiAqXG4gKiBUaGUgcXVvdGEgc2VydmljZSdzIG11dGF0aW9uIGVuZHBvaW50cyAoYC86b3JnSWQvaW5jcmVtZW50YCwgYC9kZWNyZW1lbnRgKVxuICogcmVqZWN0IGFueXRoaW5nIGJ1dCBhIHNpZ25lZCBzZXJ2aWNlIHByaW5jaXBhbCBvciBhIHN5c3RlbSBhZG1pbiwgc29cbiAqIGZvcndhcmRpbmcgdGhlIGVuZCB1c2VyJ3MgYmVhcmVyIHRva2VuIHRoZXJlIGlzIGFsd2F5cyBhIDQwMy4gU2VydmljZSB0b2tlbnNcbiAqIGFyZSBhbHNvIGV4ZW1wdCBmcm9tIHRoZSBxdW90YSBzZXJ2aWNlJ3MgcGVyLUlQIHJhdGUgbGltaXRlciwgc28gaG90LXBhdGhcbiAqIHF1b3RhIHRyYWZmaWMgZnJvbSBhIGJ1c3kgcG9kIGNhbid0IGV4aGF1c3QgdGhhdCBwb2QgSVAncyBidWNrZXQgYW5kIHNpbGVudGx5XG4gKiB0dXJuIGVuZm9yY2VtZW50IG9mZi4gU2NvcGVkIHRvIHRoZSB0YXJnZXQgb3JnIHdpdGggdGhlIGxvd2VzdCByb2xlIChtZW1iZXIpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVvdGFTZXJ2aWNlQXV0aEhlYWRlcihvcmdJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldFNlcnZpY2VBdXRoSGVhZGVyKHsgc2VydmljZU5hbWU6IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJywgb3JnSWQsIHJvbGU6ICdtZW1iZXInIH0pO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhIHN5bmNocm9ub3VzIHF1b3RhIHJlc2VydmF0aW9uICB0aGUgYXRvbWljIGNoZWNrK2luY3JlbWVudFxuICogdmFyaWFudC4gYGV4Y2VlZGVkOiB0cnVlYCBtZWFucyB0aGUgb3BlcmF0aW9uIHdhcyByZWplY3RlZCBhdCB0aGUgREJcbiAqIGxldmVsOyB0aGUgY2FsbGVyIHNob3VsZCByZXR1cm4gNDI5IHdpdGhvdXQgcnVubmluZyB0aGUgZ2F0ZWQgYWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhUmVzZXJ2ZVJlc3VsdCB7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIHNsb3Qgd2FzIE5PVCByZXNlcnZlZCDigJQgdGhlIGdhdGVkIGFjdGlvbiBtdXN0IG5vdCBydW4uICovXG4gIGV4Y2VlZGVkOiBib29sZWFuO1xuICAvKipcbiAgICogU2V0ICh0cnVlKSBieSB0aGUgcXVvdGEgQ0xJRU5UIHdoZW4gdGhlIHJlc2VydmF0aW9uIHdhcyBkZW5pZWQgYmVjYXVzZSB0aGVcbiAgICogcXVvdGEgc2VydmljZSBjb3VsZCBub3QgQ09ORklSTSBpdCAodW5yZWFjaGFibGUgLyB0aW1lb3V0IC8gY2lyY3VpdCBvcGVuIC9cbiAgICogZXJyb3JlZCkg4oCUIG5vdCBiZWNhdXNlIHRoZSBvcmcgaXMgb3ZlciBpdHMgbGltaXQuIEFsd2F5cyBwYWlyZWQgd2l0aFxuICAgKiBgZXhjZWVkZWQ6IHRydWVgLiBBbnN3ZXIgd2l0aCB7QGxpbmsgc2VuZFF1b3RhUmVzZXJ2ZURlbmllZH0sIHdoaWNoIG1hcHMgaXQgdG9cbiAgICogNTAzIGluc3RlYWQgb2YgYSBtaXNsZWFkaW5nIDQyOSBcInF1b3RhIGV4Y2VlZGVkXCIuXG4gICAqL1xuICB1bmF2YWlsYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTZXQgd2hlbiBhbiBgYWlDYWxsc2AgcmVzZXJ2YXRpb24gd2FzIHJlZnVzZWQgYnkgb25lIG9mIHRoZSBvcmcncyBPUFRJT05BTFxuICAgKiBBSSBjb250cm9scyByYXRoZXIgdGhhbiB0aGUgcGVyaW9kIGNhcDoge0BsaW5rIEVycm9yQ29kZS5BSV9NRU1CRVJfU0hBUkVfRVhDRUVERUR9XG4gICAqICh0aGUgY2FsbGVyJ3MgcGVyLW1lbWJlciBzaGFyZSBpcyBzcGVudCkgb3JcbiAgICoge0BsaW5rIEVycm9yQ29kZS5BSV9UT0tFTl9CVURHRVRfRVhDRUVERUR9ICh0aGUgb3JnJ3MgcGVyLXBlcmlvZCB0b2tlblxuICAgKiBidWRnZXQgaXMgc3BlbnQpLiBQYWlyZWQgd2l0aCBgZXhjZWVkZWQ6IHRydWVgIGFuZCB0aGUgcXVvdGEgc2VydmljZSdzXG4gICAqIGBtZXNzYWdlYDsge0BsaW5rIHNlbmRRdW90YVJlc2VydmVEZW5pZWR9IHJlbGF5cyBib3RoLlxuICAgKi9cbiAgY29kZT86IEFpTGltaXRDb2RlO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBxdW90YToge1xuICAgIHR5cGU6IFF1b3RhVHlwZTtcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIHVzZWQ6IG51bWJlcjtcbiAgICByZW1haW5pbmc6IG51bWJlcjtcbiAgICByZXNldEF0Pzogc3RyaW5nO1xuICB9O1xufVxuXG4vKiogVGhlIDQyOSBjb2RlcyBhbiBgYWlDYWxsc2AgcmVzZXJ2YXRpb24gYW5zd2VycyB3aGVuIGFuIG9wdGlvbmFsIG9yZyBBSSBjb250cm9sIHJlZnVzZXMgaXQuICovXG5leHBvcnQgdHlwZSBBaUxpbWl0Q29kZSA9IEVycm9yQ29kZS5BSV9NRU1CRVJfU0hBUkVfRVhDRUVERUQgfCBFcnJvckNvZGUuQUlfVE9LRU5fQlVER0VUX0VYQ0VFREVEO1xuXG5jb25zdCBBSV9MSU1JVF9DT0RFUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW0Vycm9yQ29kZS5BSV9NRU1CRVJfU0hBUkVfRVhDRUVERUQsIEVycm9yQ29kZS5BSV9UT0tFTl9CVURHRVRfRVhDRUVERURdKTtcblxuLyoqXG4gKiBRdW90YSBzZXJ2aWNlIGNsaWVudCBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFTZXJ2aWNlIHtcbiAgLyoqIENoZWNrIGlmIHF1b3RhIGlzIGF2YWlsYWJsZSAoZmFpbC1vcGVuIG9uIGVycm9yKS4gKi9cbiAgY2hlY2sob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YUNoZWNrUmVzdWx0PjtcbiAgLyoqXG4gICAqIEluY3JlbWVudCBxdW90YSB1c2FnZS4gUmV0dXJucyBhIHByb21pc2Ugc28gY2FsbGVycyBjYW4gb3B0aW9uYWxseSBoYW5kbGVcbiAgICogZXJyb3JzLiBgYXR0cmlidXRpb25gIGRlZmF1bHRzIHRvIHRoZSBhbWJpZW50IHJlcXVlc3QgY29udGV4dC5cbiAgICovXG4gIGluY3JlbWVudChvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgYXV0aEhlYWRlcjogc3RyaW5nLCBhbW91bnQ/OiBudW1iZXIsIGF0dHJpYnV0aW9uPzogUXVvdGFVc2FnZUF0dHJpYnV0aW9uKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIE1FVEVSRUQgaW5jcmVtZW50IG9mIGEgcHJlLWFnZ3JlZ2F0ZWQgYmF0Y2ggKHRoZSBwZXItcG9kIGJhdGNoZXIncyBmbHVzaCxcbiAgICogc2VlIGBxdW90YS1pbmNyZW1lbnQtYmF0Y2hlci50c2ApOiB0aGUgc3VtIG9mIGBncm91cHNgIGlzIGFwcGxpZWQgd2l0aFxuICAgKiBQQVJUSUFMIGFkbWlzc2lvbiDigJQgdGhlIGNvdW50ZXIgbW92ZXMgYnkgYXMgbXVjaCBhcyBmaXRzIHVuZGVyIHRoZSBjYXAgYW5kXG4gICAqIHRoZSByZW1haW5kZXIgaXMgcmVjb3JkZWQgYXMgYG92ZXJzaG9vdGAg4oCUIGFuZCBlYWNoIGdyb3VwJ3MgYXR0cmlidXRpb24gaXNcbiAgICogd3JpdHRlbiB0byB0aGUgdXNhZ2UgbGVkZ2VyLiBOZXZlciBhIDQyOS4gUmVzb2x2ZXMgd2l0aCB3aGF0IHdhcyBjb3VudGVkLFxuICAgKiBvciBgbnVsbGAgd2hlbiB0aGUgcXVvdGEgc2VydmljZSBkaWQgbm90IGFuc3dlciBvayAoY291bnRlZCBvblxuICAgKiBgcXVvdGFfaW5jcmVtZW50X2ZhaWx1cmVzX3RvdGFsYCkuXG4gICAqL1xuICBpbmNyZW1lbnRNZXRlcmVkKG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIGdyb3VwczogTWV0ZXJlZEluY3JlbWVudEdyb3VwW10pOiBQcm9taXNlPHsgY291bnRlZDogbnVtYmVyOyBvdmVyc2hvb3Q6IG51bWJlciB9IHwgbnVsbD47XG4gIC8qKlxuICAgKiBBdG9taWMgcmVzZXJ2ZSAgdGhlIHNhbWUgYXRvbWljIGNoZWNrK2luY3JlbWVudCBhcyBgaW5jcmVtZW50YCwgYnV0XG4gICAqIHBhcnNlcyB0aGUgcmVzcG9uc2Ugc28gY2FsbGVycyBjYW4gc2VlIHdoZXRoZXIgdGhlIHNsb3Qgd2FzIGFjdHVhbGx5XG4gICAqIHJlc2VydmVkLiBVc2UgdGhpcyBmb3IgZXhwZW5zaXZlIHJlc291cmNlcyB3aGVyZSB0aGUgcG9zdC1ob2MgZmlyZS1cbiAgICogYW5kLWZvcmdldCBwYXR0ZXJuIGFsbG93cyBjb25jdXJyZW50IG92ZXItc3BlbmQuXG4gICAqXG4gICAqIEZhaWxzIENMT1NFRCAoYGV4Y2VlZGVkOiB0cnVlYCkgd2hlbmV2ZXIgdGhlIHNsb3QgaXMgbm90IGNvbmZpcm1lZCDigJRcbiAgICogdW5yZWFjaGFibGUsIHRpbWVvdXQsIG9wZW4gY2lyY3VpdCwgbm9uLW9rLCBvciBhIG5vbi1xdW90YSA0Mjkg4oCUIHVubGVzc1xuICAgKiBgUVVPVEFfUkVTRVJWRV9GQUlMX09QRU49dHJ1ZWAgKHNlZSB0aGUgcG9saWN5IG5vdGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUpLlxuICAgKi9cbiAgcmVzZXJ2ZShvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgYXV0aEhlYWRlcjogc3RyaW5nLCBhbW91bnQ/OiBudW1iZXIsIGF0dHJpYnV0aW9uPzogUXVvdGFVc2FnZUF0dHJpYnV0aW9uKTogUHJvbWlzZTxRdW90YVJlc2VydmVSZXN1bHQ+O1xuICAvKipcbiAgICogUm9sbCBiYWNrIGEgcHJldmlvdXNseSByZXNlcnZlZCBzbG90LiBGaXJlLWFuZC1mb3JnZXQg4oCUIG5ldmVyIHRocm93cy5cbiAgICogUGFzcyBgcmVzZXRBdFNuYXBzaG90YCAodGhlIGBxdW90YS5yZXNldEF0YCBvYnNlcnZlZCB3aGVuIHRoZSBzbG90IHdhc1xuICAgKiByZXNlcnZlZCkgdG8gbWFrZSB0aGUgcm9sbGJhY2sgY29uZGl0aW9uYWw6IGlmIHRoZSBwZXJpb2Qgcm9sbGVkIG92ZXJcbiAgICogYmV0d2VlbiByZXNlcnZlIGFuZCByb2xsYmFjaywgdGhlIHNlcnZlciBza2lwcyB0aGUgZGVjcmVtZW50IHNvIGl0IGRvZXNuJ3RcbiAgICogc3RlYWwgY2FwYWNpdHkgZnJvbSB0aGUgbmV3IHBlcmlvZC5cbiAgICovXG4gIGRlY3JlbWVudChvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgYXV0aEhlYWRlcjogc3RyaW5nLCBhbW91bnQ/OiBudW1iZXIsIHJlc2V0QXRTbmFwc2hvdD86IHN0cmluZywgYXR0cmlidXRpb24/OiBRdW90YVVzYWdlQXR0cmlidXRpb24pOiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogUmVjb3JkIHdoYXQgYW4gQUkgY2FsbCBDT1NUIGFmdGVyIGl0IHNldHRsZWQg4oCUIGl0cyB0b2tlbiBjb3VudHMg4oCUIGluIHRoZVxuICAgKiB1c2FnZSBsZWRnZXIsIHdpdGhvdXQgbW92aW5nIGFueSBjb3VudGVyIChhIHplcm8tdW5pdCBsZWRnZXIgcm93IGNhcnJ5aW5nXG4gICAqIGB0b2tlbnNJbmAgLyBgdG9rZW5zT3V0YCB1bmRlciB0aGUgY2FsbCdzIGF0dHJpYnV0aW9uKS4gQWxzbyBob3cgYSBjYWxsIHRoYXRcbiAgICogc3BlbnQgTk8gYGFpQ2FsbHNgIHVuaXQgKGEgQllPSyBrZXksIGFuIGltcGVyc29uYXRpb24gc2Vzc2lvbiwgYSB3ZWlnaHQtMFxuICAgKiBtb2RlbCkgc3RpbGwgc2hvd3MgdXAgaW4gdGhlIHVzYWdlIGJyZWFrZG93bi4gRmlyZS1hbmQtZm9yZ2V0IOKAlCBuZXZlciB0aHJvd3MuXG4gICAqIE9wdGlvbmFsIHNvIHRlc3QgZG91YmxlcyBuZWVkIG5vdCBpbXBsZW1lbnQgaXQuXG4gICAqL1xuICByZXBvcnRVc2FnZT8ob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgdG9rZW5zOiBRdW90YVRva2VuVXNhZ2UsIGF0dHJpYnV0aW9uPzogUXVvdGFVc2FnZUF0dHJpYnV0aW9uKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEdldCB0aGUgb3JnJ3MgcXVvdGEgYFF1b3RhVGllcmAuIFVzZWQgYnkgdGhlIHBsdWdpbi1idWlsZCBxdWV1ZSBwYXJ0aXRpb25pbmdcbiAgICogdG8gcm91dGUgYSBidWlsZCB0byB0aGUgcmlnaHQgcGVyLXRpZXIgcXVldWUuIEZhaWwtb3BlbiByZXR1cm5zIGBERUZBVUxUX1RJRVJgXG4gICAqIChgZGV2ZWxvcGVyYCB3aGVuIGJpbGxpbmcgaXMgZW5hYmxlZCwgYHVubGltaXRlZGAgd2hlbiBpdCdzIGRpc2FibGVkKTsgYVxuICAgKiBtaXNjbGFzc2lmaWVkIG9yZyBzdGlsbCBidWlsZHMgb24gdGhlIGRlZmF1bHQgcXVldWUsIGp1c3Qgd2l0aG91dCB0aGVcbiAgICogdGllci1zY29wZWQgc2NoZWR1bGluZyBib29zdC5cbiAgICovXG4gIGdldFRpZXIob3JnSWQ6IHN0cmluZywgYXV0aEhlYWRlcjogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPFF1b3RhVGllcj47XG4gIC8qKlxuICAgKiBGQUlMLUNMT1NFRCB0d2luIG9mIHtAbGluayBnZXRUaWVyfTogdGhlIG9yZydzIHRpZXIgYXMgdGhlIHF1b3RhIHNlcnZpY2VcbiAgICogQ09ORklSTUVEIGl0LCBvciBgbnVsbGAgd2hlbiBpdCBjb3VsZCBub3QgYmUgY29uZmlybWVkICh1bnJlYWNoYWJsZSwgbm9uLW9rLFxuICAgKiBtaXNzaW5nIG9yIHVucmVjb2duaXplZCB0aWVyKS4gRm9yIGRlY2lzaW9ucyB0aGF0IG11c3QgbmV2ZXIgYmUgdGFrZW4gb24gYVxuICAgKiBndWVzcyDigJQgYW55dGhpbmcgdGhhdCByZXZva2VzLCBkb3duZ3JhZGVzIG9yIGRlbGV0ZXMgb24gdGhlIHN0cmVuZ3RoIG9mIGFcbiAgICogdGllciAoZS5nLiBhIHZlcmlmaWVkLXB1Ymxpc2hlciBncmFjZSBzd2VlcCkgbXVzdCBza2lwIHRoZSBvcmcgb24gYG51bGxgLFxuICAgKiBuZXZlciBhY3Qgb24gYERFRkFVTFRfVElFUmAuXG4gICAqL1xuICBnZXRUaWVyU3RyaWN0KG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YVRpZXIgfCBudWxsPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBxdW90YSBzZXJ2aWNlIGNsaWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVNlcnZpY2VDb25maWcge1xuICAvKiogUXVvdGEgc2VydmljZSBob3N0IChkZWZhdWx0OiBlbnYgUVVPVEFfU0VSVklDRV9IT1NUIG9yICdxdW90YScpICovXG4gIGhvc3Q/OiBzdHJpbmc7XG4gIC8qKiBRdW90YSBzZXJ2aWNlIHBvcnQgKGRlZmF1bHQ6IGVudiBRVU9UQV9TRVJWSUNFX1BPUlQgb3IgMzAwMCkgKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqIFJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IDUwMDApICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQXBwbHkgdGhlIGV4cGxpY2l0IHJlc2VydmUgZmFpbC1tb2RlIHBvbGljeSB0byBhIHJlc2VydmF0aW9uIHRoZSBxdW90YSBzZXJ2aWNlXG4gKiBkaWQgTk9UIGNvbmZpcm0gKHNlZSBRVU9UQV9SRVNFUlZFX0ZBSUxfT1BFTiBhYm92ZSkuIERlZmF1bHQ6IGRlbnkuXG4gKi9cbmZ1bmN0aW9uIHVuY29uZmlybWVkUmVzZXJ2ZShcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcXVvdGFUeXBlOiBRdW90YVR5cGUsXG4gIHJlYXNvbjogJ3VucmVhY2hhYmxlJyB8ICd0cmFuc2llbnQtNDI5JyB8ICdub24tb2snLFxuICBzdGF0dXNDb2RlPzogbnVtYmVyLFxuKTogUXVvdGFSZXNlcnZlUmVzdWx0IHtcbiAgaWYgKFFVT1RBX1JFU0VSVkVfRkFJTF9PUEVOKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1FVT1RBX0ZBSUxfT1BFTjogcXVvdGEgcmVzZXJ2ZSBub3QgY29uZmlybWVkLCBhbGxvd2luZyByZXF1ZXN0JywgeyBvcmdJZCwgcXVvdGFUeXBlLCByZWFzb24sIHN0YXR1c0NvZGUgfSk7XG4gICAgZW1pdENvdW50ZXIoJ3F1b3RhX2ZhaWxfb3Blbl90b3RhbCcsIHsgb3BlcmF0aW9uOiAncmVzZXJ2ZScsIHJlYXNvbiwgcXVvdGFUeXBlIH0pO1xuICAgIHJldHVybiB7IGV4Y2VlZGVkOiBmYWxzZSwgcXVvdGE6IHsgdHlwZTogcXVvdGFUeXBlLCBsaW1pdDogLTEsIHVzZWQ6IDAsIHJlbWFpbmluZzogLTEgfSB9O1xuICB9XG4gIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX0NMT1NFRDogcXVvdGEgcmVzZXJ2ZSBub3QgY29uZmlybWVkLCBkZW55aW5nIHJlcXVlc3QnLCB7IG9yZ0lkLCBxdW90YVR5cGUsIHJlYXNvbiwgc3RhdHVzQ29kZSB9KTtcbiAgZW1pdENvdW50ZXIoJ3F1b3RhX2ZhaWxfY2xvc2VkX3RvdGFsJywgeyBvcGVyYXRpb246ICdyZXNlcnZlJywgcmVhc29uLCBxdW90YVR5cGUgfSk7XG4gIHJldHVybiB7IGV4Y2VlZGVkOiB0cnVlLCB1bmF2YWlsYWJsZTogdHJ1ZSwgcXVvdGE6IHsgdHlwZTogcXVvdGFUeXBlLCBsaW1pdDogMCwgdXNlZDogMCwgcmVtYWluaW5nOiAwIH0gfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmYWlsLW9wZW4gcXVvdGEgcmVzdWx0IChhbGxvd3MgdGhlIHJlcXVlc3QpLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGYWlsT3BlblJlc3VsdCgpOiBRdW90YUNoZWNrUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBhbGxvd2VkOiB0cnVlLFxuICAgIGxpbWl0OiAtMSxcbiAgICB1c2VkOiAwLFxuICAgIHJlbWFpbmluZzogLTEsXG4gICAgcmVzZXRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVubGltaXRlZDogdHJ1ZSxcbiAgICAvLyBUYWcgdGhlIHNlbnRpbmVsIHNvIGZhaWwtY2xvc2VkIGNhbGxlcnMgY2FuIHRlbGwgYW4gb3V0YWdlIGFwYXJ0IGZyb20gYVxuICAgIC8vIHJlYWwgdW5saW1pdGVkICgtMSkgcmVhZGluZy4gUmVhbCBxdW90YSByZXN1bHRzIG5ldmVyIHNldCB0aGlzLlxuICAgIGZhaWxPcGVuOiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGNvbW1vbiByZXF1ZXN0IGhlYWRlcnMgd2l0aCBvcHRpb25hbCByZXF1ZXN0IElEIGZvciBkaXN0cmlidXRlZCB0cmFjaW5nLlxuICovXG5mdW5jdGlvbiBidWlsZEhlYWRlcnMob3JnSWQ6IHN0cmluZywgYXV0aEhlYWRlcj86IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7ICd4LW9yZy1pZCc6IG9yZ0lkIH07XG4gIGlmIChhdXRoSGVhZGVyKSBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBhdXRoSGVhZGVyO1xuICBpZiAocmVxdWVzdElkKSBoZWFkZXJzWydYLVJlcXVlc3QtSWQnXSA9IHJlcXVlc3RJZDtcbiAgcmV0dXJuIGhlYWRlcnM7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcXVvdGEgc2VydmljZSBjbGllbnQuXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIHNlcnZpY2UgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgUXVvdGEgc2VydmljZSBjbGllbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcXVvdGFTZXJ2aWNlID0gY3JlYXRlUXVvdGFTZXJ2aWNlKCk7XG4gKlxuICogLy8gQ2hlY2sgcXVvdGEgYmVmb3JlIHByb2Nlc3NpbmdcbiAqIGNvbnN0IHF1b3RhID0gYXdhaXQgcXVvdGFTZXJ2aWNlLmNoZWNrKG9yZ0lkLCAnYXBpQ2FsbHMnLCBhdXRoSGVhZGVyKTtcbiAqIGlmICghcXVvdGEuYWxsb3dlZCkge1xuICogcmV0dXJuIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdRdW90YSBleGNlZWRlZCcgfSk7XG4gKiB9XG4gKlxuICogLy8gSW5jcmVtZW50IHF1b3RhIGFmdGVyIHN1Y2Nlc3NcbiAqIHF1b3RhU2VydmljZS5pbmNyZW1lbnQob3JnSWQsICdhcGlDYWxscycsIGF1dGhIZWFkZXIpLmNhdGNoKGVyciA9PiBsb2dnZXIud2FybignUXVvdGEgaW5jcmVtZW50IGZhaWxlZCcsIHsgZXJyb3I6IGVyciB9KSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVF1b3RhU2VydmljZShjb25maWc6IFF1b3RhU2VydmljZUNvbmZpZyA9IHt9KTogUXVvdGFTZXJ2aWNlIHtcbiAgY29uc3Qgc2VydmljZUNvbmZpZzogU2VydmljZUNvbmZpZyA9IHtcbiAgICBob3N0OiBjb25maWcuaG9zdCA/PyBzZXJ2aWNlRW5kcG9pbnQoJ3F1b3RhJykuaG9zdCxcbiAgICBwb3J0OiBjb25maWcucG9ydCA/PyBzZXJ2aWNlRW5kcG9pbnQoJ3F1b3RhJykucG9ydCxcbiAgICB0aW1lb3V0OiBjb25maWcudGltZW91dCA/PyA1MDAwLFxuICB9O1xuXG4gIGNvbnN0IGNsaWVudCA9IGNyZWF0ZVNhZmVDbGllbnQoc2VydmljZUNvbmZpZyk7XG5cbiAgLyoqIE9uZSB0aWVyIHJlYWQ6IHRoZSBjb25maXJtZWQgdGllciwgb3Igd2h5IHRoZXJlIGlzbid0IG9uZS4gKi9cbiAgYXN5bmMgZnVuY3Rpb24gcmVhZFRpZXIoXG4gICAgb3JnSWQ6IHN0cmluZywgYXV0aEhlYWRlcjogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8eyB0aWVyOiBRdW90YVRpZXI7IHJlYXNvbj86IHVuZGVmaW5lZDsgc3RhdHVzQ29kZT86IG51bWJlciB9IHwgeyB0aWVyOiBudWxsOyByZWFzb246ICd1bnJlYWNoYWJsZScgfCAnbm9uLW9rJyB8ICdpbnZhbGlkLXRpZXInOyBzdGF0dXNDb2RlPzogbnVtYmVyIH0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8e1xuICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgIGRhdGE/OiB7IHF1b3RhPzogeyB0aWVyPzogc3RyaW5nIH0gfTtcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgfT4oYC9xdW90YXMvJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfWAsIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyLCByZXF1ZXN0SWQpLCAuLi5RVU9UQV9SRVFVRVNUX09QVElPTlMgfSk7XG4gICAgaWYgKCFyZXNwb25zZSkgcmV0dXJuIHsgdGllcjogbnVsbCwgcmVhc29uOiAndW5yZWFjaGFibGUnIH07XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCB8fCAhcmVzcG9uc2UuYm9keT8uc3VjY2VzcykgcmV0dXJuIHsgdGllcjogbnVsbCwgcmVhc29uOiAnbm9uLW9rJywgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSB9O1xuICAgIGNvbnN0IHRpZXIgPSByZXNwb25zZS5ib2R5LmRhdGE/LnF1b3RhPy50aWVyO1xuICAgIGlmICghdGllciB8fCAhaXNWYWxpZFRpZXIodGllcikpIHJldHVybiB7IHRpZXI6IG51bGwsIHJlYXNvbjogJ2ludmFsaWQtdGllcicsIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1c0NvZGUgfTtcbiAgICByZXR1cm4geyB0aWVyLCBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGNoZWNrKG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFDaGVja1Jlc3VsdD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vJHtlbmNvZGVVUklDb21wb25lbnQocXVvdGFUeXBlKX1gO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8e1xuICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICBkYXRhPzogeyBxdW90YVR5cGU6IHN0cmluZzsgc3RhdHVzOiBRdW90YUNoZWNrUmVzdWx0IH07XG4gICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB9PihwYXRoLCB7IGhlYWRlcnM6IGJ1aWxkSGVhZGVycyhvcmdJZCwgYXV0aEhlYWRlciwgcmVxdWVzdElkKSwgLi4uY2hlY2tSZXF1ZXN0T3B0aW9ucyhxdW90YVR5cGUpIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IFF1b3RhIHNlcnZpY2UgdW5yZWFjaGFibGUsIGFsbG93aW5nIHJlcXVlc3QnLCB7IG9yZ0lkLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX29wZW5fdG90YWwnLCB7IG9wZXJhdGlvbjogJ2NoZWNrJywgcmVhc29uOiAndW5yZWFjaGFibGUnLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVGYWlsT3BlblJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwIHx8ICFyZXNwb25zZS5ib2R5LnN1Y2Nlc3MgfHwgIXJlc3BvbnNlLmJvZHkuZGF0YT8uc3RhdHVzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IFF1b3RhIGNoZWNrIHJldHVybmVkIG5vbi1vaywgYWxsb3dpbmcgcmVxdWVzdCcsIHtcbiAgICAgICAgICBvcmdJZCwgcXVvdGFUeXBlLCBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlLCBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9vcGVuX3RvdGFsJywgeyBvcGVyYXRpb246ICdjaGVjaycsIHJlYXNvbjogJ25vbi1vaycsIHF1b3RhVHlwZSB9KTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZhaWxPcGVuUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZS5ib2R5LmRhdGEuc3RhdHVzO1xuICAgIH0sXG5cbiAgICBhc3luYyBpbmNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCBhdHRyaWJ1dGlvbj86IFF1b3RhVXNhZ2VBdHRyaWJ1dGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vaW5jcmVtZW50YDtcbiAgICAgIGNvbnN0IGF0dHIgPSByZXNvbHZlQXR0cmlidXRpb24oYXR0cmlidXRpb24pO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudFxuICAgICAgICAucG9zdChwYXRoLCB7IHF1b3RhVHlwZSwgYW1vdW50LCAuLi4oYXR0ciAmJiB7IGF0dHJpYnV0aW9uOiBhdHRyIH0pIH0sIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyLCBhdHRyPy5yZXF1ZXN0SWQpLCAuLi5RVU9UQV9SRVFVRVNUX09QVElPTlMgfSk7XG5cbiAgICAgIGlmIChyZXNwb25zZT8uc3RhdHVzQ29kZSA9PT0gNDI5KSB7XG4gICAgICAgIC8vIE92ZXIgdGhlIGxpbWl0OiB0aGUgcXVvdGEgc2VydmljZSByZWZ1c2VkIEFORCByZWNvcmRlZCB0aGUgZGVuaWFsIGluXG4gICAgICAgIC8vIGl0cyBsZWRnZXIuIE5vdCBhIGZhaWx1cmUgb2YgbWV0ZXJpbmcg4oCUIHRoZSBjb3VudGVyIGlzIGV4YWN0bHkgd2hlcmVcbiAgICAgICAgLy8gaXQgc2hvdWxkIGJlLlxuICAgICAgICBsb2dnZXIuZGVidWcoJ1F1b3RhIGluY3JlbWVudCByZWZ1c2VkIChvdmVyIGxpbWl0KScsIHsgb3JnSWQsIHF1b3RhVHlwZSwgYW1vdW50IH0pO1xuICAgICAgfSBlbHNlIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gaW5jcmVtZW50IHF1b3RhJywge1xuICAgICAgICAgIG9yZ0lkLCBxdW90YVR5cGUsIGFtb3VudCwgc3RhdHVzQ29kZTogcmVzcG9uc2U/LnN0YXR1c0NvZGUsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBIGxvc3QgbWV0ZXJpbmcgaW5jcmVtZW50IGlzIGEgdW5pdCB0aGUgb3JnIGNvbnN1bWVkIGFuZCBuZXZlciBwYWlkXG4gICAgICAgIC8vIGZvci4gQ291bnRlZCAobGFiZWxsZWQgYnkgdGhlIGVtaXR0aW5nIGBzZXJ2aWNlYCkgc28gYSBzdXN0YWluZWQgcmF0ZVxuICAgICAgICAvLyBwYWdlcyBpbnN0ZWFkIG9mIHNpbGVudGx5IHVuZGVyLWJpbGxpbmcg4oCUIHNlZSBRdW90YUluY3JlbWVudEZhaWx1cmVzLlxuICAgICAgICBlbWl0Q291bnRlcigncXVvdGFfaW5jcmVtZW50X2ZhaWx1cmVzX3RvdGFsJywgeyByZWFzb246IHJlc3BvbnNlID8gJ25vbi1vaycgOiAndW5yZWFjaGFibGUnLCBxdW90YVR5cGUgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1F1b3RhIGluY3JlbWVudGVkJywgeyBvcmdJZCwgcXVvdGFUeXBlLCBhbW91bnQgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGluY3JlbWVudE1ldGVyZWQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgZ3JvdXBzOiBNZXRlcmVkSW5jcmVtZW50R3JvdXBbXSk6IFByb21pc2U8eyBjb3VudGVkOiBudW1iZXI7IG92ZXJzaG9vdDogbnVtYmVyIH0gfCBudWxsPiB7XG4gICAgICBjb25zdCBwYXRoID0gYC9xdW90YXMvJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfS9pbmNyZW1lbnRgO1xuICAgICAgY29uc3QgYW1vdW50ID0gZ3JvdXBzLnJlZHVjZSgoc3VtLCBnKSA9PiBzdW0gKyBnLmFtb3VudCwgMCk7XG4gICAgICBpZiAoYW1vdW50IDw9IDApIHJldHVybiB7IGNvdW50ZWQ6IDAsIG92ZXJzaG9vdDogMCB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDx7IHN1Y2Nlc3M6IGJvb2xlYW47IGRhdGE/OiB7IGNvdW50ZWQ/OiBudW1iZXI7IG92ZXJzaG9vdD86IG51bWJlciB9IH0+KFxuICAgICAgICBwYXRoLFxuICAgICAgICB7IHF1b3RhVHlwZSwgYW1vdW50LCBtZXRlcjogdHJ1ZSwgZ3JvdXBzIH0sXG4gICAgICAgIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyKSwgLi4uUVVPVEFfUkVRVUVTVF9PUFRJT05TIH0sXG4gICAgICApO1xuICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDAgfHwgIXJlc3BvbnNlLmJvZHk/LnN1Y2Nlc3MpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBhcHBseSBtZXRlcmVkIHF1b3RhIGluY3JlbWVudCcsIHsgb3JnSWQsIHF1b3RhVHlwZSwgYW1vdW50LCBzdGF0dXNDb2RlOiByZXNwb25zZT8uc3RhdHVzQ29kZSB9KTtcbiAgICAgICAgLy8gRXZlcnkgdW5pdCBpbiB0aGUgYmF0Y2ggd2VudCB1bmNvdW50ZWQg4oCUIHNlZSBRdW90YUluY3JlbWVudEZhaWx1cmVzLlxuICAgICAgICBlbWl0Q291bnRlcigncXVvdGFfaW5jcmVtZW50X2ZhaWx1cmVzX3RvdGFsJywgeyByZWFzb246IHJlc3BvbnNlID8gJ25vbi1vaycgOiAndW5yZWFjaGFibGUnLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgY291bnRlZCA9IHJlc3BvbnNlLmJvZHkuZGF0YT8uY291bnRlZCA/PyBhbW91bnQ7XG4gICAgICBjb25zdCBvdmVyc2hvb3QgPSByZXNwb25zZS5ib2R5LmRhdGE/Lm92ZXJzaG9vdCA/PyAwO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdNZXRlcmVkIHF1b3RhIGluY3JlbWVudCBhcHBsaWVkJywgeyBvcmdJZCwgcXVvdGFUeXBlLCBhbW91bnQsIGNvdW50ZWQsIG92ZXJzaG9vdCB9KTtcbiAgICAgIHJldHVybiB7IGNvdW50ZWQsIG92ZXJzaG9vdCB9O1xuICAgIH0sXG5cbiAgICBhc3luYyByZXNlcnZlKG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyID0gMSwgYXR0cmlidXRpb24/OiBRdW90YVVzYWdlQXR0cmlidXRpb24pOiBQcm9taXNlPFF1b3RhUmVzZXJ2ZVJlc3VsdD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vaW5jcmVtZW50YDtcbiAgICAgIGNvbnN0IGF0dHIgPSByZXNvbHZlQXR0cmlidXRpb24oYXR0cmlidXRpb24pO1xuXG4gICAgICAvLyAyMDAgY2FycmllcyBgZGF0YS5xdW90YWA7IDQyOSAoUVVPVEFfRVhDRUVERUQpIGNhcnJpZXMgYGRldGFpbHMucXVvdGFgLlxuICAgICAgLy8gQm90aCBzaGFwZXMgYXJlIG5vcm1hbGl6ZWQgaW50byBRdW90YVJlc2VydmVSZXN1bHQuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PHtcbiAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgZGF0YT86IHsgcXVvdGE/OiBRdW90YVJlc2VydmVSZXN1bHRbJ3F1b3RhJ10gfTtcbiAgICAgICAgZGV0YWlscz86IHsgcXVvdGE/OiBRdW90YVJlc2VydmVSZXN1bHRbJ3F1b3RhJ10gfTtcbiAgICAgICAgLyoqIGBzZW5kRXJyb3JgJ3MgZXJyb3ItY29kZSBmaWVsZC4gKi9cbiAgICAgICAgY29kZT86IHN0cmluZztcbiAgICAgICAgbWVzc2FnZT86IHN0cmluZztcbiAgICAgIH0+KHBhdGgsIHsgcXVvdGFUeXBlLCBhbW91bnQsIC4uLihhdHRyICYmIHsgYXR0cmlidXRpb246IGF0dHIgfSkgfSwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIGF0dHI/LnJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSkgcmV0dXJuIHVuY29uZmlybWVkUmVzZXJ2ZShvcmdJZCwgcXVvdGFUeXBlLCAndW5yZWFjaGFibGUnKTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDQyOSkge1xuICAgICAgICBjb25zdCBxID0gcmVzcG9uc2UuYm9keS5kZXRhaWxzPy5xdW90YTtcbiAgICAgICAgLy8gQW4gb3B0aW9uYWwgb3JnIEFJIGNvbnRyb2wgKHBlci1tZW1iZXIgc2hhcmUsIHRva2VuIGJ1ZGdldCkgcmVmdXNlZCB0aGVcbiAgICAgICAgLy8gc2xvdDogYSBnZW51aW5lLCBmaW5hbCBkZW5pYWwg4oCUIHJlbGF5ZWQgd2l0aCBpdHMgb3duIGNvZGUgYW5kIG1lc3NhZ2UuXG4gICAgICAgIGlmIChyZXNwb25zZS5ib2R5LmNvZGUgJiYgQUlfTElNSVRfQ09ERVMuaGFzKHJlc3BvbnNlLmJvZHkuY29kZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXhjZWVkZWQ6IHRydWUsXG4gICAgICAgICAgICBjb2RlOiByZXNwb25zZS5ib2R5LmNvZGUgYXMgQWlMaW1pdENvZGUsXG4gICAgICAgICAgICAuLi4ocmVzcG9uc2UuYm9keS5tZXNzYWdlID8geyBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgICAgIHF1b3RhOiBxID8/IHsgdHlwZTogcXVvdGFUeXBlLCBsaW1pdDogMCwgdXNlZDogMCwgcmVtYWluaW5nOiAwIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPbmx5IGEgR0VOVUlORSBxdW90YS1leGNlZWRlZCA0MjkgbWVhbnMgXCJvdmVyIHF1b3RhXCIuIEEgZ2VuZXJpYyA0Mjkg4oCUXG4gICAgICAgIC8vIGFuIGludGVydmVuaW5nIGdhdGV3YXkgb3IgcmF0ZSBsaW1pdGVyIOKAlCBkaWQgbm90IGNvbmZpcm0gYW55dGhpbmcsIHNvXG4gICAgICAgIC8vIGl0IGdvZXMgdGhyb3VnaCB0aGUgc2FtZSB1bmNvbmZpcm1lZC1yZXNlcnZhdGlvbiBwb2xpY3kgYXMgYW4gb3V0YWdlLlxuICAgICAgICBpZiAocmVzcG9uc2UuYm9keS5jb2RlID09PSBFcnJvckNvZGUuUVVPVEFfRVhDRUVERUQgfHwgcSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleGNlZWRlZDogdHJ1ZSxcbiAgICAgICAgICAgIHF1b3RhOiBxID8/IHsgdHlwZTogcXVvdGFUeXBlLCBsaW1pdDogMCwgdXNlZDogMCwgcmVtYWluaW5nOiAwIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5jb25maXJtZWRSZXNlcnZlKG9yZ0lkLCBxdW90YVR5cGUsICd0cmFuc2llbnQtNDI5JywgcmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDAgfHwgIXJlc3BvbnNlLmJvZHkuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gdW5jb25maXJtZWRSZXNlcnZlKG9yZ0lkLCBxdW90YVR5cGUsICdub24tb2snLCByZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcSA9IHJlc3BvbnNlLmJvZHkuZGF0YT8ucXVvdGE7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleGNlZWRlZDogZmFsc2UsXG4gICAgICAgIHF1b3RhOiBxID8/IHsgdHlwZTogcXVvdGFUeXBlLCBsaW1pdDogLTEsIHVzZWQ6IDAsIHJlbWFpbmluZzogLTEgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGRlY3JlbWVudChvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgYXV0aEhlYWRlcjogc3RyaW5nLCBhbW91bnQ6IG51bWJlciA9IDEsIHJlc2V0QXRTbmFwc2hvdD86IHN0cmluZywgYXR0cmlidXRpb24/OiBRdW90YVVzYWdlQXR0cmlidXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9L2RlY3JlbWVudGA7XG4gICAgICBjb25zdCBhdHRyID0gcmVzb2x2ZUF0dHJpYnV0aW9uKGF0dHJpYnV0aW9uKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50XG4gICAgICAgIC5wb3N0KHBhdGgsIHsgcXVvdGFUeXBlLCBhbW91bnQsIC4uLihyZXNldEF0U25hcHNob3QgJiYgeyByZXNldEF0U25hcHNob3QgfSksIC4uLihhdHRyICYmIHsgYXR0cmlidXRpb246IGF0dHIgfSkgfSwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIGF0dHI/LnJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgLy8gUm9sbGJhY2sgZmFpbHVyZSBpcyBsb2dnZWQgYnV0IG5ldmVyIHByb3BhZ2F0ZWQgIHRoZSBhY3Rpb24ncyBvd25cbiAgICAgICAgLy8gZmFpbHVyZSBoYXMgYWxyZWFkeSBiZWVuIHN1cmZhY2VkIHRvIHRoZSBjYWxsZXI7IGEgc3R1Y2sgY291bnRlclxuICAgICAgICAvLyByZXNvbHZlcyBvbiB0aGUgbmV4dCBwZXJpb2QgcmVzZXQuXG4gICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gZGVjcmVtZW50IHF1b3RhIChzbG90IHdpbGwgcmVzZXQgb24gbmV4dCBwZXJpb2QpJywge1xuICAgICAgICAgIG9yZ0lkLCBxdW90YVR5cGUsIGFtb3VudCwgc3RhdHVzQ29kZTogcmVzcG9uc2U/LnN0YXR1c0NvZGUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdRdW90YSBkZWNyZW1lbnRlZCcsIHsgb3JnSWQsIHF1b3RhVHlwZSwgYW1vdW50IH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXBvcnRVc2FnZShvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgYXV0aEhlYWRlcjogc3RyaW5nLCB0b2tlbnM6IFF1b3RhVG9rZW5Vc2FnZSwgYXR0cmlidXRpb24/OiBRdW90YVVzYWdlQXR0cmlidXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHRva2Vuc0luID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih0b2tlbnMudG9rZW5zSW4gfHwgMCkpO1xuICAgICAgY29uc3QgdG9rZW5zT3V0ID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih0b2tlbnMudG9rZW5zT3V0IHx8IDApKTtcbiAgICAgIGNvbnN0IGF0dHIgPSByZXNvbHZlQXR0cmlidXRpb24oYXR0cmlidXRpb24pO1xuICAgICAgLy8gTm90aGluZyB0byBzYXk6IG5vIHRva2VucyBhbmQgbm8gYXR0cmlidXRpb24gdG8gbWFrZSBhIHplcm8gcm93IHVzZWZ1bC5cbiAgICAgIGlmICh0b2tlbnNJbiA9PT0gMCAmJiB0b2tlbnNPdXQgPT09IDAgJiYgIWF0dHIpIHJldHVybjtcbiAgICAgIGNvbnN0IHBhdGggPSBgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9L2luY3JlbWVudGA7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgeyBxdW90YVR5cGUsIHJlcG9ydDogdHJ1ZSwgdG9rZW5zSW4sIHRva2Vuc091dCwgLi4uKGF0dHIgJiYgeyBhdHRyaWJ1dGlvbjogYXR0ciB9KSB9LFxuICAgICAgICAgIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyLCBhdHRyPy5yZXF1ZXN0SWQpLCAuLi5RVU9UQV9SRVFVRVNUX09QVElPTlMgfSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIHJlcG9ydCBBSSB1c2FnZScsIHsgb3JnSWQsIHF1b3RhVHlwZSwgc3RhdHVzQ29kZTogcmVzcG9uc2U/LnN0YXR1c0NvZGUgfSk7XG4gICAgICAgICAgZW1pdENvdW50ZXIoJ3F1b3RhX3VzYWdlX3JlcG9ydF9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiByZXNwb25zZSA/ICdub24tb2snIDogJ3VucmVhY2hhYmxlJywgcXVvdGFUeXBlIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byByZXBvcnQgQUkgdXNhZ2UnLCB7IG9yZ0lkLCBxdW90YVR5cGUsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICAgICAgZW1pdENvdW50ZXIoJ3F1b3RhX3VzYWdlX3JlcG9ydF9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiAnZXhjZXB0aW9uJywgcXVvdGFUeXBlIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaWVyKG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YVRpZXI+IHtcbiAgICAgIGNvbnN0IGtub3duID0gY29uc3RhbnRUaWVyRm9yKG9yZ0lkKTtcbiAgICAgIGlmIChrbm93bikgcmV0dXJuIGtub3duO1xuICAgICAgY29uc3QgcmVhZCA9IGF3YWl0IHJlYWRUaWVyKG9yZ0lkLCBhdXRoSGVhZGVyLCByZXF1ZXN0SWQpO1xuICAgICAgaWYgKHJlYWQudGllcikgcmV0dXJuIHJlYWQudGllcjtcbiAgICAgIGxvZ2dlci53YXJuKGBRVU9UQV9GQUlMX09QRU46IHRpZXIgbG9va3VwIGZhaWxlZCwgZGVmYXVsdGluZyB0byAke0RFRkFVTFRfVElFUn0gdGllcmAsIHtcbiAgICAgICAgb3JnSWQsIHN0YXR1c0NvZGU6IHJlYWQuc3RhdHVzQ29kZSwgcmVhc29uOiByZWFkLnJlYXNvbiwgZGVmYXVsdFRpZXI6IERFRkFVTFRfVElFUixcbiAgICAgIH0pO1xuICAgICAgZW1pdENvdW50ZXIoJ3F1b3RhX2ZhaWxfb3Blbl90b3RhbCcsIHsgb3BlcmF0aW9uOiAndGllcicsIHJlYXNvbjogcmVhZC5yZWFzb24sIHF1b3RhVHlwZTogJ3RpZXInIH0pO1xuICAgICAgcmV0dXJuIERFRkFVTFRfVElFUjtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGllclN0cmljdChvcmdJZDogc3RyaW5nLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFUaWVyIHwgbnVsbD4ge1xuICAgICAgY29uc3Qga25vd24gPSBjb25zdGFudFRpZXJGb3Iob3JnSWQpO1xuICAgICAgaWYgKGtub3duKSByZXR1cm4ga25vd247XG4gICAgICBjb25zdCByZWFkID0gYXdhaXQgcmVhZFRpZXIob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCk7XG4gICAgICBpZiAocmVhZC50aWVyKSByZXR1cm4gcmVhZC50aWVyO1xuICAgICAgbG9nZ2VyLndhcm4oJ1FVT1RBX0ZBSUxfQ0xPU0VEOiB0aWVyIGNvdWxkIG5vdCBiZSBjb25maXJtZWQnLCB7IG9yZ0lkLCBzdGF0dXNDb2RlOiByZWFkLnN0YXR1c0NvZGUsIHJlYXNvbjogcmVhZC5yZWFzb24gfSk7XG4gICAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9jbG9zZWRfdG90YWwnLCB7IG9wZXJhdGlvbjogJ3RpZXInLCByZWFzb246IHJlYWQucmVhc29uLCBxdW90YVR5cGU6ICd0aWVyJyB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogVGhlIHN5c3RlbSBvcmcncyB0aWVyIGlzIGEgQ09OU1RBTlQsIG5vdCBhIGJpbGxpbmcgZmFjdCwgc28gaXQgaXMgYW5zd2VyZWRcbiAqIHdpdGhvdXQgYSBsb29rdXAuXG4gKlxuICogVGhlIHBsYXRmb3JtJ3Mgb3duIG9yZyBpcyBhbHdheXMgYHVubGltaXRlZGAgKHBsYXRmb3JtL3NyYy9zZXJ2aWNlcy9cbiAqIGF1dGgtc2VydmljZS50cyBzZWVkcyBpdCB0aGF0IHdheSk6IG5vdGhpbmcgbWV0ZXJzIGl0IGFuZCBpdCBpcyBuZXZlciBzb2xkLlxuICogQXNraW5nIHRoZSBxdW90YSBzZXJ2aWNlIHdhcyB0aGVyZWZvcmUgYSBuZXR3b3JrIGhvcCB3aG9zZSBvbmx5IHBvc3NpYmxlXG4gKiBvdXRjb21lcyB3ZXJlIHRoZSBhbnN3ZXIgd2UgYWxyZWFkeSBrbmV3LCBvciBhIGZhaWx1cmUuXG4gKlxuICogVGhlIGZhaWx1cmUgaXMgd2hhdCBtYWRlIHRoaXMgd29ydGggZml4aW5nLiBgZ2V0VGllcmAgZmFpbHMgT1BFTiB0b1xuICogREVGQVVMVF9USUVSLCB3aGljaCB3aXRoIGJpbGxpbmcgZW5hYmxlZCBpcyBgZGV2ZWxvcGVyYCDigJQgdGhlIG1vc3RcbiAqIGNvbnN0cmFpbmVkIHRpZXIg4oCUIGFuZCBpdHMgZG9jdW1lbnRlZCBqb2IgaXMgYnVpbGQtcXVldWUgcGFydGl0aW9uaW5nLiBBXG4gKiBibGlwIGluIHRoZSBxdW90YSBzZXJ2aWNlIHRoZXJlZm9yZSByb3V0ZWQgdGhlIFNZU1RFTSBvcmcncyBidWlsZHMgb250byB0aGVcbiAqIGRldmVsb3BlciBxdWV1ZTsgdGhlIE9mZmljaWFsIGNhdGFsb2cgbG9hZCBpcyAxMTkgb2YgdGhlbS4gYGdldFRpZXJTdHJpY3RgXG4gKiBmYWlscyBDTE9TRUQgdG8gbnVsbCwgc28gYSBzd2VlcCB0aGF0IG11c3Qgbm90IGd1ZXNzIHdvdWxkIHNraXAgdGhlXG4gKiBwbGF0Zm9ybSdzIG93biBvcmcgaW5zdGVhZC5cbiAqL1xuZnVuY3Rpb24gY29uc3RhbnRUaWVyRm9yKG9yZ0lkOiBzdHJpbmcpOiBRdW90YVRpZXIgfCBudWxsIHtcbiAgcmV0dXJuIG9yZ0lkLnRvTG93ZXJDYXNlKCkgPT09IFNZU1RFTV9PUkdfSUQgPyAndW5saW1pdGVkJyA6IG51bGw7XG59XG5cbi8qKlxuICogRmlyZS1hbmQtZm9yZ2V0IHF1b3RhIE1FVEVSSU5HIGluY3JlbWVudC5cbiAqXG4gKiBCdWZmZXJlZDogdGhlIHVuaXQgam9pbnMgdGhlIHBvZCdzIHBlci0ob3JnLCB0eXBlKSBhZ2dyZWdhdGUgYW5kIGlzIHNlbnQgd2l0aFxuICogdGhlIG5leHQgZmx1c2ggKGBRVU9UQV9JTkNSRU1FTlRfRkxVU0hfTVNgLCBzZWUgcXVvdGEtaW5jcmVtZW50LWJhdGNoZXIudHMpXG4gKiBhcyBvbmUgbWV0ZXJlZCBpbmNyZW1lbnQg4oCUIHBhcnRpYWwgYWRtaXNzaW9uIGFnYWluc3QgdGhlIGNhcCwgdGhlIGV4Y2Vzc1xuICogcmVjb3JkZWQgYXMgYG92ZXJzaG9vdGAuIFRoZSBjb3VudGVyIHRoZXJlZm9yZSBsYWdzIGJ5IGF0IG1vc3Qgb25lIGZsdXNoXG4gKiBpbnRlcnZhbC4gT25seSB0aGUgcmVxdWVzdCBtZXRlciB1c2VzIHRoaXM7IHJlc2VydmF0aW9ucyBzdGF5IHN5bmNocm9ub3VzLlxuICpcbiAqIEF1dGhlbnRpY2F0ZXMgYXMgdGhlIGNhbGxpbmcgU0VSVklDRSAoe0BsaW5rIGdldFF1b3RhU2VydmljZUF1dGhIZWFkZXJ9KSwgbmV2ZXJcbiAqIHdpdGggdGhlIGVuZCB1c2VyJ3MgdG9rZW46IGAvcXVvdGFzLzpvcmdJZC9pbmNyZW1lbnRgIGlzIHNlcnZpY2UtcHJpbmNpcGFsXG4gKiBvbmx5LCBzbyBhIGZvcndhcmRlZCB1c2VyIEpXVCB3YXMgYWx3YXlzIHJlamVjdGVkICg0MDMpIGFuZCB0aGUgbWV0ZXJlZCBxdW90YVxuICogKGUuZy4gYGFwaUNhbGxzYCwgYW5kIHRoZSBgYXBpX3BhY2tgIGJ1bmRsZSByYWlzaW5nIGl0KSBuZXZlciBtb3ZlZC5cbiAqXG4gKiBAcGFyYW0gcXVvdGFTZXJ2aWNlIC0gUXVvdGEgc2VydmljZSBjbGllbnRcbiAqIEBwYXJhbSBvcmdJZCAtIE9yZ2FuaXphdGlvbiBJRCB3aG9zZSBjb3VudGVyIGlzIGluY3JlbWVudGVkXG4gKiBAcGFyYW0gcXVvdGFUeXBlIC0gUXVvdGEgdHlwZSB0byBpbmNyZW1lbnRcbiAqIEBwYXJhbSBsb2dXYXJuIC0gTG9nZ2luZyBmdW5jdGlvbiBmb3Igd2FybmluZ3NcbiAqIEBwYXJhbSBhdHRyaWJ1dGlvbiAtIFdobyBzcGVudCB0aGUgdW5pdCAoZGVmYXVsdHMgdG8gdGhlIGFtYmllbnQgcmVxdWVzdCBjb250ZXh0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5jcmVtZW50UXVvdGEoIHF1b3RhU2VydmljZTogUXVvdGFTZXJ2aWNlLFxuICBvcmdJZDogc3RyaW5nLFxuICBxdW90YVR5cGU6IFF1b3RhVHlwZSxcbiAgbG9nV2FybjogKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IHZvaWQsXG4gIGF0dHJpYnV0aW9uPzogUXVvdGFVc2FnZUF0dHJpYnV0aW9uLFxuKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgYmF0Y2hlciA9IGJhdGNoZXJGb3IocXVvdGFTZXJ2aWNlLCBhc3luYyAob3JnLCB0eXBlLCBncm91cHMpID0+IHtcbiAgICAgIGF3YWl0IHF1b3RhU2VydmljZS5pbmNyZW1lbnRNZXRlcmVkKG9yZywgdHlwZSwgZ2V0UXVvdGFTZXJ2aWNlQXV0aEhlYWRlcihvcmcpLCBncm91cHMpO1xuICAgIH0pO1xuICAgIGJhdGNoZXIuYWRkKG9yZ0lkLCBxdW90YVR5cGUsIHJlc29sdmVBdHRyaWJ1dGlvbihhdHRyaWJ1dGlvbikpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dXYXJuKCdRdW90YSBpbmNyZW1lbnQgZmFpbGVkJywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgZW1pdENvdW50ZXIoJ3F1b3RhX2luY3JlbWVudF9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiAnZXhjZXB0aW9uJywgcXVvdGFUeXBlIH0pO1xuICB9XG59XG5cbi8qKlxuICogQXRvbWljIHJlc2VydmUgaGVscGVyIGZvciB0aGUgXCJyZXNlcnZlICsgY29tbWl0IC8gcm9sbGJhY2tcIiBwYXR0ZXJuLlxuICogVXNlIGZvciBleHBlbnNpdmUgcmVzb3VyY2VzIChwaXBlbGluZXMsIHBsdWdpbnMsIEFJIGNhbGxzKSB3aGVyZSB0aGVcbiAqIGZpcmUtYW5kLWZvcmdldCBwb3N0LWhvYyBgaW5jcmVtZW50UXVvdGFgIGFsbG93cyBjb25jdXJyZW50IG92ZXItc3BlbmQuXG4gKlxuICogUmV0dXJucyB0aGUgc3RydWN0dXJlZCByZXN1bHQgc28gdGhlIGNhbGxlciBjYW4gZGVjaWRlIHdoZXRoZXIgdG8gcnVuXG4gKiB0aGUgZ2F0ZWQgYWN0aW9uIG9yIDQyOSB0aGUgY2xpZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXNlcnZhdGlvbiA9IGF3YWl0IHJlc2VydmVRdW90YShxdW90YVNlcnZpY2UsIG9yZ0lkLCAncGlwZWxpbmVzJywgYXV0aEhlYWRlcik7XG4gKiBpZiAocmVzZXJ2YXRpb24uZXhjZWVkZWQpIHJldHVybiBzZW5kUXVvdGFSZXNlcnZlRGVuaWVkKHJlcywgJ3BpcGVsaW5lcycsIHJlc2VydmF0aW9uKTtcbiAqIHRyeSB7XG4gKiBhd2FpdCBkb0V4cGVuc2l2ZVRoaW5nKCk7XG4gKiB9IGNhdGNoIChlcnIpIHtcbiAqIC8vIFBhc3MgdGhlIHJlc2VydmVkIHJlc2V0QXQgc28gYSBwZXJpb2Qgcm9sbG92ZXIgZG9lc24ndCBnZXQgZG91YmxlLWNoYXJnZWQuXG4gKiBkZWNyZW1lbnRRdW90YShxdW90YVNlcnZpY2UsIG9yZ0lkLCAncGlwZWxpbmVzJywgYXV0aEhlYWRlciwgbG9nV2FybiwgMSwgcmVzZXJ2YXRpb24ucXVvdGEucmVzZXRBdCk7XG4gKiB0aHJvdyBlcnI7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2VydmVRdW90YSggcXVvdGFTZXJ2aWNlOiBRdW90YVNlcnZpY2UsXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHF1b3RhVHlwZTogUXVvdGFUeXBlLFxuICBhdXRoSGVhZGVyOiBzdHJpbmcsXG4gIGFtb3VudDogbnVtYmVyID0gMSxcbiAgYXR0cmlidXRpb24/OiBRdW90YVVzYWdlQXR0cmlidXRpb24sXG4pOiBQcm9taXNlPFF1b3RhUmVzZXJ2ZVJlc3VsdD4ge1xuICByZXR1cm4gcXVvdGFTZXJ2aWNlLnJlc2VydmUob3JnSWQsIHF1b3RhVHlwZSwgYXV0aEhlYWRlciwgYW1vdW50LCBhdHRyaWJ1dGlvbik7XG59XG5cbi8qKiBTZWNvbmRzIGEgY2xpZW50IHNob3VsZCB3YWl0IGJlZm9yZSByZXRyeWluZyB3aGVuIHF1b3RhIGNvdWxkbid0IGJlIGNvbmZpcm1lZC4gKi9cbmNvbnN0IFFVT1RBX1VOQVZBSUxBQkxFX1JFVFJZX0FGVEVSX1NFQ09ORFMgPSA1O1xuXG4vKipcbiAqIEFuc3dlciBhIERFTklFRCByZXNlcnZhdGlvbiAoYHJlc2VydmF0aW9uLmV4Y2VlZGVkID09PSB0cnVlYCkuXG4gKlxuICogLSBgdW5hdmFpbGFibGVgICh0aGUgcXVvdGEgc2VydmljZSBjb3VsZG4ndCBjb25maXJtIHRoZSBzbG90KSDihpIgKio1MDMqKlxuICogICBgU0VSVklDRV9VTkFWQUlMQUJMRWAgd2l0aCBhIHNob3J0IGBSZXRyeS1BZnRlcmA6IHRoZSBvcmcgaXMgbm90IG92ZXIgaXRzXG4gKiAgIGxpbWl0LCBzbyBhIDQyOSBcInF1b3RhIGV4Y2VlZGVkXCIgd291bGQgc2VuZCB1c2VycyB0byB1cGdyYWRlIGZvciBhbiBvdXRhZ2UuXG4gKiAtIG90aGVyd2lzZSDihpIgdGhlIHN0YW5kYXJkIDQyOSBgUVVPVEFfRVhDRUVERURgIHdpdGggdGhlIFgtUXVvdGEtKiBoZWFkZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZFF1b3RhUmVzZXJ2ZURlbmllZChyZXM6IFJlc3BvbnNlLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgcmVzZXJ2YXRpb246IFF1b3RhUmVzZXJ2ZVJlc3VsdCk6IHZvaWQge1xuICBpZiAocmVzZXJ2YXRpb24uY29kZSkge1xuICAgIC8vIEFuIG9wdGlvbmFsIG9yZyBBSSBjb250cm9sIChwZXItbWVtYmVyIHNoYXJlIC8gdG9rZW4gYnVkZ2V0KTogaXRzIG93blxuICAgIC8vIGNvZGUsIHNvIHRoZSBjbGllbnQgY2FuIHNheSBcInlvdXIgc2hhcmVcIiByYXRoZXIgdGhhbiBcInRoZSBvcmcgaXMgb3V0XCIuXG4gICAgY29uc3QgcmVzZXRBdCA9IHJlc2VydmF0aW9uLnF1b3RhLnJlc2V0QXQ7XG4gICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQgJiYgcmVzZXRBdCkge1xuICAgICAgcmVzLnNldEhlYWRlcignUmV0cnktQWZ0ZXInLCBNYXRoLm1heCgwLCBNYXRoLmNlaWwoKG5ldyBEYXRlKHJlc2V0QXQpLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMCkpKTtcbiAgICB9XG4gICAgZW1pdENvdW50ZXIoJ3F1b3RhX2RlbmllZF90b3RhbCcsIHsgdHlwZTogcXVvdGFUeXBlIH0pO1xuICAgIHNlbmRFcnJvcihcbiAgICAgIHJlcyxcbiAgICAgIDQyOSxcbiAgICAgIHJlc2VydmF0aW9uLm1lc3NhZ2UgPz8gYFlvdXIgb3JnYW5pemF0aW9uJ3MgJHtxdW90YVR5cGV9IGxpbWl0IGZvciB0aGlzIHBlcmlvZCBoYXMgYmVlbiByZWFjaGVkLmAsXG4gICAgICByZXNlcnZhdGlvbi5jb2RlLFxuICAgICAgeyBxdW90YTogcmVzZXJ2YXRpb24ucXVvdGEsIHF1b3RhVHlwZSwgLi4uKHJlc2V0QXQgPyB7IHJlc2V0QXQgfSA6IHt9KSB9LFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChyZXNlcnZhdGlvbi51bmF2YWlsYWJsZSkge1xuICAgIGlmICghcmVzLmhlYWRlcnNTZW50KSByZXMuc2V0SGVhZGVyKCdSZXRyeS1BZnRlcicsIFFVT1RBX1VOQVZBSUxBQkxFX1JFVFJZX0FGVEVSX1NFQ09ORFMpO1xuICAgIHNlbmRFcnJvcihcbiAgICAgIHJlcyxcbiAgICAgIDUwMyxcbiAgICAgIGBVbmFibGUgdG8gY29uZmlybSAke3F1b3RhVHlwZX0gcXVvdGEgcmlnaHQgbm93LiBQbGVhc2UgdHJ5IGFnYWluIHNob3J0bHkuYCxcbiAgICAgIEVycm9yQ29kZS5TRVJWSUNFX1VOQVZBSUxBQkxFLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNlbmRRdW90YUV4Y2VlZGVkKHJlcywgcXVvdGFUeXBlLCByZXNlcnZhdGlvbi5xdW90YSwgcmVzZXJ2YXRpb24ucXVvdGEucmVzZXRBdCk7XG59XG5cbi8qKlxuICogRmlyZS1hbmQtZm9yZ2V0IHJvbGxiYWNrIGZvciBhIHByZXZpb3VzbHkgcmVzZXJ2ZWQgcXVvdGEgc2xvdC5cbiAqIExvZ3Mgb24gZmFpbHVyZSBidXQgbmV2ZXIgdGhyb3dzICB0aGUgYWN0aW9uIHRoYXQgbmVlZGVkIHRoZSByb2xsYmFja1xuICogaGFzIGFscmVhZHkgZmFpbGVkLCBubyBwb2ludCBjb21wb3VuZGluZyB0aGUgZXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNyZW1lbnRRdW90YSggcXVvdGFTZXJ2aWNlOiBRdW90YVNlcnZpY2UsXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHF1b3RhVHlwZTogUXVvdGFUeXBlLFxuICBhdXRoSGVhZGVyOiBzdHJpbmcsXG4gIGxvZ1dhcm46IChtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiB2b2lkLFxuICBhbW91bnQ6IG51bWJlciA9IDEsXG4gIHJlc2V0QXRTbmFwc2hvdD86IHN0cmluZyxcbiAgYXR0cmlidXRpb24/OiBRdW90YVVzYWdlQXR0cmlidXRpb24sXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2VudCA9IGF0dHJpYnV0aW9uXG4gICAgPyBxdW90YVNlcnZpY2UuZGVjcmVtZW50KG9yZ0lkLCBxdW90YVR5cGUsIGF1dGhIZWFkZXIsIGFtb3VudCwgcmVzZXRBdFNuYXBzaG90LCBhdHRyaWJ1dGlvbilcbiAgICA6IHF1b3RhU2VydmljZS5kZWNyZW1lbnQob3JnSWQsIHF1b3RhVHlwZSwgYXV0aEhlYWRlciwgYW1vdW50LCByZXNldEF0U25hcHNob3QpO1xuICBzZW50LmNhdGNoKChlcnI6IHVua25vd24pID0+XG4gICAgbG9nV2FybignUXVvdGEgcm9sbGJhY2sgZmFpbGVkJywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSksXG4gICk7XG59XG4iXX0=
|
|
559
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9xdW90YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBSXRDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUE4QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBRXBGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0scUJBQXFCLEdBQStEO0lBQ3hGLG1CQUFtQixFQUFFLENBQUM7SUFDdEIsVUFBVSxFQUFFLENBQUM7Q0FDZCxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNC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QVMsQ0FBQyxhQUFhLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUMxRixTQUFTLENBQ1AsR0FBRyxFQUNILEdBQUcsRUFDSCxxQkFBcUIsU0FBUyw2Q0FBNkMsRUFDM0UsU0FBUyxDQUFDLG1CQUFtQixDQUM5QixDQUFDO1FBQ0YsT0FBTztJQUNULENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUUsWUFBMEIsRUFDeEQsS0FBYSxFQUNiLFNBQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLE9BQWtELEVBQ2xELE1BQU0sR0FBVyxDQUFDLEVBQ2xCLGVBQXdCLEVBQ3hCLFdBQW1DO0lBRW5DLE1BQU0sSUFBSSxHQUFHLFdBQVc7UUFDdEIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUM7UUFDNUYsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2xGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFZLEVBQUUsRUFBRSxDQUMxQixPQUFPLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDL0QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuXG5pbXBvcnQgeyBjdXJyZW50QXVkaXRDb250ZXh0LCBzYW5pdGl6ZUNvcnJlbGF0aW9uSWQgfSBmcm9tICcuL2F1ZGl0LWNvbnRleHQuanMnO1xuaW1wb3J0IHsgY3JlYXRlU2FmZUNsaWVudCwgdHlwZSBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaHR0cC1jbGllbnQuanMnO1xuaW1wb3J0IHsgYmF0Y2hlckZvciwgdHlwZSBNZXRlcmVkSW5jcmVtZW50R3JvdXAgfSBmcm9tICcuL3F1b3RhLWluY3JlbWVudC1iYXRjaGVyLmpzJztcbmltcG9ydCB7IG9uQmVoYWxmQ2FsbGVyIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9vbi1iZWhhbGYuanMnO1xuaW1wb3J0IHsgZ2V0U2VydmljZUF1dGhIZWFkZXIsIGlzU2VydmljZVByaW5jaXBhbCB9IGZyb20gJy4uL21pZGRsZXdhcmUvc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHsgU1lTVEVNX09SR19JRCB9IGZyb20gJy4uL21pZGRsZXdhcmUvc3lzdGVtLW9yZy5qcyc7XG5pbXBvcnQgdHlwZSB7IEp3dFBheWxvYWQsIFByaW5jaXBhbFR5cGUsIFF1b3RhVHlwZSwgUXVvdGFDaGVja1Jlc3VsdCwgU2VydmljZUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX1RJRVIsIGlzVmFsaWRUaWVyLCB0eXBlIFF1b3RhVGllciB9IGZyb20gJy4uL3R5cGVzL3F1b3RhLXRpZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgQWlLZXlTb3VyY2UgfSBmcm9tICcuLi90eXBlcy93aXJlLXZvY2FidWxhcnkuanMnO1xuaW1wb3J0IHsgZW52Qm9vbCwgZW52SW50IH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSwgc2VuZEVycm9yLCBzZW5kUXVvdGFFeGNlZWRlZCB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcbmltcG9ydCB7IHNlcnZpY2VFbmRwb2ludCB9IGZyb20gJy4uL3V0aWxzL3NlcnZpY2UtcmVnaXN0cnkuanMnO1xuXG4vKipcbiAqIFJldHJ5IG9wdGlvbnMgZm9yIHF1b3RhIGNhbGxzIOKAlCBmYWlsIGZhc3QgKGEgc2xvdyBxdW90YSBzZXJ2aWNlIG11c3Qgbm90IHN0YWxsIHRoZSByZXF1ZXN0KS5cbiAqXG4gKiBORVZFUiByZXRyeSBhIDQyOS4gVGhlIHF1b3RhIHNlcnZpY2UgYW5zd2VycyBhbiBvdmVyLWxpbWl0IG9yZyB3aXRoIDQyOVxuICogUVVPVEFfRVhDRUVERUQgYW5kIGBSZXRyeS1BZnRlcmAgPSBzZWNvbmRzIHVudGlsIHRoZSBwZXJpb2QgcmVzZXRzOyB0aGUgSFRUUFxuICogY2xpZW50IGhvbm9ycyB0aGF0IChjYXBwZWQgYXQgNjBzKSwgc28gYSBzaW5nbGUgcmF0ZS1saW1pdCByZXRyeSBzdGFsbGVkIHRoZVxuICogcmVxdWVzdCB3ZWxsIHBhc3QgdGhlIGhhbmRsZXIgdGltZW91dCwgd2hpY2ggdGhlbiBhbnN3ZXJlZCA1MDMgYW5kIHRoZSByZWFsXG4gKiA0Mjkgd2FzIGxvc3QuIEEgNDI5IGlzIGEgZmluYWwgYW5zd2VyIGhlcmUuXG4gKi9cbmNvbnN0IFFVT1RBX1JFUVVFU1RfT1BUSU9OUzogUGljazxSZXF1ZXN0T3B0aW9ucywgJ21heFJhdGVMaW1pdFJldHJpZXMnIHwgJ21heFJldHJpZXMnPiA9IHtcbiAgbWF4UmF0ZUxpbWl0UmV0cmllczogMCxcbiAgbWF4UmV0cmllczogMSxcbn07XG5cbi8qKlxuICogQnVkZ2V0IGZvciBvbmUgYGNoZWNrYCBvZiBhIENPVU5URVIgcXVvdGEgKGBRVU9UQV9DSEVDS19USU1FT1VUX01TYCwgZGVmYXVsdFxuICogMzAwKSwgd2l0aCBubyByZXRyeS5cbiAqXG4gKiBUaGUgY2hlY2sgaXMgYSByZWFkIGdhdGUgdGhhdCBGQUlMUyBPUEVOLCBydW4gYWhlYWQgb2YgdGhlIHJlcXVlc3QgaXQgZ2F0ZXM6XG4gKiB0aGUgb2xkIDUgcyB0aW1lb3V0IMOXIDIgYXR0ZW1wdHMgbWVhbnQgYSBzbG93IHF1b3RhIHNlcnZpY2UgYWRkZWQgdXAgdG8gMTAgc1xuICogdG8gZXZlcnkgbWV0ZXJlZCByZXF1ZXN0IGFuZCB0aGVuIGxldCBpdCB0aHJvdWdoIGFueXdheS4gQSBzaG9ydCBidWRnZXQgdHVybnNcbiAqIHRoZSBzYW1lIGluY2lkZW50IGludG8gYSDiiaQgMzAwIG1zIGZhaWwtb3BlbiAoY291bnRlZCBvblxuICogYHF1b3RhX2ZhaWxfb3Blbl90b3RhbGAsIHdoaWNoIGFsZXJ0cykg4oCUIGFuZCB3aXRoIHRoZSBwZXItcG9kIGNoZWNrIGNhY2hlIGluXG4gKiBmcm9udCAoYXBpLXNlcnZlciBgY2hlY2tRdW90YWApIGEgaGVhbHRoeSBzZXJ2aWNlIGlzIGFza2VkIGF0IG1vc3Qgb25jZSBwZXJcbiAqIG9yZy90eXBlIHBlciBjYWNoZSBUVEwuXG4gKlxuICogYHN0b3JhZ2VCeXRlc2Aga2VlcHMgdGhlIGNsaWVudCB0aW1lb3V0IGFuZCBvbmUgcmV0cnk6IGl0IGlzIGEgTUVBU1VSRUQgcmVhZFxuICogKHRoZSBxdW90YSBzZXJ2aWNlIHdhbGtzIHRoZSBvcmcncyByZWdpc3RyeSBuYW1lc3BhY2Ugb24gYSBjb2xkIGNhY2hlKSBiZWhpbmRcbiAqIHRoZSByZWdpc3RyeSdzIGZhaWwtQ0xPU0VEIHB1c2ggZ2F0ZSwgd2hlcmUgYSBwcmVtYXR1cmUgdGltZW91dCByZWZ1c2VzIGEgcHVzaC5cbiAqL1xuZXhwb3J0IGNvbnN0IFFVT1RBX0NIRUNLX1RJTUVPVVRfTVMgPSBlbnZJbnQoJ1FVT1RBX0NIRUNLX1RJTUVPVVRfTVMnLCAzMDAsIHsgbWluOiAxIH0pO1xuXG5mdW5jdGlvbiBjaGVja1JlcXVlc3RPcHRpb25zKHF1b3RhVHlwZTogUXVvdGFUeXBlKTogUGljazxSZXF1ZXN0T3B0aW9ucywgJ21heFJhdGVMaW1pdFJldHJpZXMnIHwgJ21heFJldHJpZXMnIHwgJ3RpbWVvdXQnPiB7XG4gIGlmIChxdW90YVR5cGUgPT09ICdzdG9yYWdlQnl0ZXMnKSByZXR1cm4gUVVPVEFfUkVRVUVTVF9PUFRJT05TO1xuICByZXR1cm4geyBtYXhSYXRlTGltaXRSZXRyaWVzOiAwLCBtYXhSZXRyaWVzOiAwLCB0aW1lb3V0OiBRVU9UQV9DSEVDS19USU1FT1VUX01TIH07XG59XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncXVvdGEnKTtcblxuLy8gUkVTRVJWRSBGQUlMIE1PREUg4oCUIGV4cGxpY2l0LCBzaW5nbGUgcG9saWN5LlxuLy9cbi8vIGByZXNlcnZlYCBnYXRlcyBFWFBFTlNJVkUsIGJpbGxhYmxlIHJlc291cmNlcyAocGlwZWxpbmVzLCBwbHVnaW4gYnVpbGRzLCBBSVxuLy8gY2FsbHMsIHBsYXRmb3JtIGZlYXR1cmUgc2xvdHMpLiBFdmVyeSBxdW90YSB0eXBlIGlzIGEgcGVyLXBlcmlvZCBGTE9XIGNvdW50ZXJcbi8vIHdpdGggbm8gYWZ0ZXItdGhlLWZhY3QgcmVjb25jaWxpYXRpb246IGEgdW5pdCBjb25zdW1lZCB3aGlsZSB0aGUgcmVzZXJ2YXRpb25cbi8vIGNvdWxkIG5vdCBiZSBjb25maXJtZWQgaXMgbmV2ZXIgY291bnRlZCwgc28gZmFpbC1vcGVuIGxldHMgYW4gb3JnIGNvbnN1bWVcbi8vIHVuYm91bmRlZCB1bm1ldGVyZWQgdW5pdHMgZm9yIHRoZSB3aG9sZSBsZW5ndGggb2YgYW4gaW5jaWRlbnQg4oCUIGFuZCBhblxuLy8gdW5jb25maXJtZWQgcmVzZXJ2ZSAodGltZW91dCwgb3BlbiBjaXJjdWl0KSBtYXkgZXZlbiBoYXZlIGxhbmRlZCBzZXJ2ZXItc2lkZS5cbi8vIFNvIGByZXNlcnZlYCBmYWlscyBDTE9TRUQgd2hlbmV2ZXIgdGhlIHF1b3RhIHNlcnZpY2UgZGlkIG5vdCBDT05GSVJNIHRoZSBzbG90OlxuLy8gICAtIHVucmVhY2hhYmxlIC8gdGltZWQgb3V0IC8gY2lyY3VpdCBicmVha2VyIG9wZW4gKG5vIHJlc3BvbnNlKSxcbi8vICAgLSBhIHJlYWNoYWJsZS1idXQtZXJyb3JlZCByZXNwb25zZSAoNXh4LCA0eHgsIG1hbGZvcm1lZCBib2R5KSxcbi8vICAgLSBhIDQyOSB0aGF0IGlzIE5PVCBhIGdlbnVpbmUgUVVPVEFfRVhDRUVERUQgKGdhdGV3YXkgLyByYXRlIGxpbWl0ZXIpLlxuLy8gT3BlcmF0b3JzIHdobyBwcmVmZXIgYXZhaWxhYmlsaXR5IG92ZXIgZW5mb3JjZW1lbnQgb3B0IHRoZSBXSE9MRSBzZXQgaW50b1xuLy8gZmFpbC1vcGVuIHdpdGggUVVPVEFfUkVTRVJWRV9GQUlMX09QRU49dHJ1ZS4gQm90aCBvdXRjb21lcyBlbWl0IGEgY291bnRlclxuLy8gKGBxdW90YV9mYWlsX2Nsb3NlZF90b3RhbGAgLyBgcXVvdGFfZmFpbF9vcGVuX3RvdGFsYCkgdGFnZ2VkIHdpdGggdGhlIHJlYXNvbi5cbi8vIGBjaGVja2AgKGEgY2hlYXAgcmVhZCBnYXRlKSBzdGF5cyBmYWlsLW9wZW47IGBpbmNyZW1lbnRgIGlzIGZpcmUtYW5kLWZvcmdldC5cbmNvbnN0IFFVT1RBX1JFU0VSVkVfRkFJTF9PUEVOID0gZW52Qm9vbCgnUVVPVEFfUkVTRVJWRV9GQUlMX09QRU4nLCBmYWxzZSk7XG5cbi8vIFVTQUdFIEFUVFJJQlVUSU9OIOKAlCB3aG8gc3BlbnQgYSB1bml0LlxuLy9cbi8vIFRoZSBxdW90YSBzZXJ2aWNlIGtlZXBzIG9uZSBhZ2dyZWdhdGUgY291bnRlciBwZXIgKG9yZywgdHlwZSk7IG9uIGl0cyBvd24gdGhhdFxuLy8gY2FuIHNheSBhbiBvcmcgaXMgYXQgMTAwJSBidXQgbmV2ZXIgV0hJQ0gga2V5LCByb3V0ZSBvciBwaXBlbGluZSBnb3QgaXQgdGhlcmUuXG4vLyBFdmVyeSBpbmNyZW1lbnQgLyByZXNlcnZlIC8gcmVmdW5kIHRoZXJlZm9yZSBjYXJyaWVzIGFuIGF0dHJpYnV0aW9uIGJsb2NrIHRoZVxuLy8gcXVvdGEgc2VydmljZSB3cml0ZXMgaW50byBpdHMgdXNhZ2UgbGVkZ2VyIChgR0VUIC9xdW90YXMvOm9yZ0lkL3VzYWdlYCkuIEl0IGlzXG4vLyBtZXRhZGF0YSBvbmx5IOKAlCBlbmZvcmNlbWVudCBuZXZlciByZWFkcyBpdCDigJQgYW5kIGV2ZXJ5IGZpZWxkIGlzIG9wdGlvbmFsLCBzbyBhXG4vLyBjYWxsZXIgdGhhdCBrbm93cyBub3RoaW5nIHN0aWxsIG1ldGVycyBjb3JyZWN0bHkuXG5cbi8qKiBXaG8gLyB3aGF0IHNwZW50IChvciBnb3QgYmFjaykgYSBxdW90YSB1bml0LiBBbGwgZmllbGRzIG9wdGlvbmFsLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVVzYWdlQXR0cmlidXRpb24ge1xuICBwcmluY2lwYWxUeXBlPzogUHJpbmNpcGFsVHlwZTtcbiAgLyoqIFRoZSB1c2VyIGlkIG9yIHNlcnZpY2UtYWNjb3VudCBpZCBiZWhpbmQgdGhlIGNhbGwgKHRoZSB0b2tlbidzIGBzdWJgKS4gKi9cbiAgcHJpbmNpcGFsSWQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgcmV2b2NhYmxlIGNyZWRlbnRpYWw6IHRoZSBhY2Nlc3Mga2V5IHRoZSB0b2tlbiBkZXJpdmVzIGZyb20sIGVsc2UgaXRzIGBqdGlgLiAqL1xuICBrZXlJZD86IHN0cmluZztcbiAgLyoqIGBNRVRIT0QgL3JvdXRlLzpwYXR0ZXJuYCDigJQgdGhlIG1hdGNoZWQgcm91dGUgUEFUVEVSTiwgbmV2ZXIgdGhlIHJhdyBVUkwgKG5vIGlkcywgbm8gcXVlcnkpLiAqL1xuICByb3V0ZT86IHN0cmluZztcbiAgLyoqIFRoZSBwaXBlbGluZSB0aGUgY2FsbCB3YXMgbWFkZSBmb3IgKGA6cGlwZWxpbmVJZGAgcGFyYW0gb3IgYFgtUGlwZWxpbmUtSWRgIGhlYWRlcikuICovXG4gIHBpcGVsaW5lSWQ/OiBzdHJpbmc7XG4gIHJlcXVlc3RJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEFJIGNhbGxzIG9ubHk6IHdoaWNoIHByb2R1Y3Qgc3VyZmFjZSBzcGVudCB0aGUgdW5pdCDigJQgYGFza2AsIGBhZ2VudGAsXG4gICAqIGBhZ2VudC10b29sOjxuYW1lPmAsIGBwaXBlbGluZS1nZW5lcmF0ZWAsIGBwbHVnaW4tZ2VuZXJhdGVgLFxuICAgKiBgcmVwb3J0LXN1bW1hcnlgLiBTZXQgYnkgYXBpLXNlcnZlcidzIGB3aXRoQWlDYWxsUmVzZXJ2YXRpb25gLlxuICAgKi9cbiAgZmVhdHVyZT86IHN0cmluZztcbiAgLyoqIEFJIGNhbGxzIG9ubHk6IHRoZSBtb2RlbCBpZCB0aGUgcmVzZXJ2YXRpb24gd2FzIHJlc29sdmVkIHRvIChuZXZlciBhIGtleSkuICovXG4gIG1vZGVsPzogc3RyaW5nO1xuICAvKiogQUkgY2FsbHMgb25seTogd2hvc2Uga2V5IHNlcnZlZCB0aGUgY2FsbCDigJQgYHBsYXRmb3JtYCwgYG9yZ2Agb3IgYHJlcXVlc3RgIChCWU9LKS4gKi9cbiAga2V5U291cmNlPzogQWlLZXlTb3VyY2U7XG59XG5cblxuLyoqIFRva2VuIGNvdW50cyBhbiBBSSBjYWxsIHJlcG9ydHMgYWZ0ZXIgaXQgc2V0dGxlcyAoc2VlIHtAbGluayBRdW90YVNlcnZpY2UucmVwb3J0VXNhZ2V9KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFUb2tlblVzYWdlIHtcbiAgdG9rZW5zSW46IG51bWJlcjtcbiAgdG9rZW5zT3V0OiBudW1iZXI7XG59XG5cbi8qKiBMb25nZXN0IGF0dHJpYnV0aW9uIHN0cmluZyB0aGUgY2xpZW50IHNlbmRzICh0aGUgcXVvdGEgc2VydmljZSBlbmZvcmNlcyB0aGUgc2FtZSBib3VuZCkuICovXG5jb25zdCBNQVhfQVRUUklCVVRJT05fTEVOID0gMjAwO1xuXG5mdW5jdGlvbiBib3VuZGVkKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlLnNsaWNlKDAsIE1BWF9BVFRSSUJVVElPTl9MRU4pIDogdW5kZWZpbmVkO1xufVxuXG4vKiogVGhlIHByaW5jaXBhbCBoYWxmIG9mIGFuIGF0dHJpYnV0aW9uIGJsb2NrLCBmcm9tIGEgVkVSSUZJRUQgdG9rZW4uICovXG5mdW5jdGlvbiBwcmluY2lwYWxBdHRyaWJ1dGlvbih1c2VyOiBKd3RQYXlsb2FkIHwgdW5kZWZpbmVkKTogUXVvdGFVc2FnZUF0dHJpYnV0aW9uIHtcbiAgaWYgKCF1c2VyKSByZXR1cm4ge307XG4gIHJldHVybiB7XG4gICAgcHJpbmNpcGFsVHlwZTogdXNlci5wcmluY2lwYWxUeXBlLFxuICAgIHByaW5jaXBhbElkOiBib3VuZGVkKHVzZXIuc3ViKSxcbiAgICBrZXlJZDogYm91bmRlZCh1c2VyLnBhcmVudEtleUlkID8/IHVzZXIuanRpKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGlvbiBmb3IgdGhlIHJlcXVlc3QgYmVpbmcgc2VydmVkOiB0aGUgdmVyaWZpZWQgcHJpbmNpcGFsLCB0aGUgbWF0Y2hlZFxuICogcm91dGUgcGF0dGVybiwgdGhlIHBpcGVsaW5lIChgOnBpcGVsaW5lSWRgIHBhcmFtIG9yIGEgc2FuaXRpemVkXG4gKiBgWC1QaXBlbGluZS1JZGAgaGVhZGVyKSBhbmQgdGhlIHJlcXVlc3QgaWQuIFJlYWQgb2ZmIGByZXFgIGRpcmVjdGx5IHJhdGhlciB0aGFuXG4gKiB0aGUgYW1iaWVudCBhdWRpdCBjb250ZXh0IGJlY2F1c2UgdGhlIG1ldGVyaW5nIG1pZGRsZXdhcmUgcnVucyBpbiBhIGBmaW5pc2hgXG4gKiBsaXN0ZW5lciwgd2hlcmUgdGhlIHJlcXVlc3QncyBhc3luYyBzY29wZSBpcyBubyBsb25nZXIgZ3VhcmFudGVlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RhQXR0cmlidXRpb25Gcm9tUmVxdWVzdChyZXE6IFJlcXVlc3QpOiBRdW90YVVzYWdlQXR0cmlidXRpb24ge1xuICBjb25zdCByb3V0ZVBhdGggPSByZXEucm91dGU/LnBhdGg7XG4gIGNvbnN0IHJvdXRlID0gdHlwZW9mIHJvdXRlUGF0aCA9PT0gJ3N0cmluZycgPyBgJHtyZXEubWV0aG9kfSAkeyhyZXEuYmFzZVVybCA/PyAnJykgKyByb3V0ZVBhdGh9YCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaGVhZGVyID0gcmVxLmhlYWRlcnNbJ3gtcGlwZWxpbmUtaWQnXTtcbiAgY29uc3QgcGlwZWxpbmVJZCA9IHNhbml0aXplQ29ycmVsYXRpb25JZChyZXEucGFyYW1zPy5waXBlbGluZUlkKSA/PyBzYW5pdGl6ZUNvcnJlbGF0aW9uSWQoQXJyYXkuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyWzBdIDogaGVhZGVyKTtcbiAgY29uc3QgcmVxdWVzdElkSGVhZGVyID0gcmVxLmhlYWRlcnNbJ3gtcmVxdWVzdC1pZCddO1xuICBjb25zdCByZXF1ZXN0SWQgPSAocmVxIGFzIFJlcXVlc3QgJiB7IHJlcXVlc3RJZD86IHN0cmluZyB9KS5yZXF1ZXN0SWRcbiAgICA/PyBzYW5pdGl6ZUNvcnJlbGF0aW9uSWQoQXJyYXkuaXNBcnJheShyZXF1ZXN0SWRIZWFkZXIpID8gcmVxdWVzdElkSGVhZGVyWzBdIDogcmVxdWVzdElkSGVhZGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5wcmluY2lwYWxBdHRyaWJ1dGlvbihyZXEudXNlciksXG4gICAgLi4uKHJvdXRlID8geyByb3V0ZTogcm91dGUuc2xpY2UoMCwgTUFYX0FUVFJJQlVUSU9OX0xFTikgfSA6IHt9KSxcbiAgICAuLi4ocGlwZWxpbmVJZCA/IHsgcGlwZWxpbmVJZCB9IDoge30pLFxuICAgIC4uLihyZXF1ZXN0SWQgPyB7IHJlcXVlc3RJZDogYm91bmRlZChyZXF1ZXN0SWQpIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKlxuICogQXR0cmlidXRpb24gZnJvbSB0aGUgYW1iaWVudCBhdWRpdCBjb250ZXh0LCBmb3IgY2FsbHMgbWFkZSBpbnNpZGUgYSByZXF1ZXN0XG4gKiBzY29wZSB0aGF0IGRpZCBub3QgcGFzcyBvbmUgZXhwbGljaXRseSAodGhlIHJlc2VydmUgLyByZWZ1bmQgaGVscGVycyBldmVyeVxuICogc2VydmljZSB1c2VzKS4gRW1wdHkgb3V0c2lkZSBhbnkgc2NvcGUuXG4gKi9cbmZ1bmN0aW9uIGF0dHJpYnV0aW9uRnJvbUNvbnRleHQoKTogUXVvdGFVc2FnZUF0dHJpYnV0aW9uIHtcbiAgY29uc3QgY3R4ID0gY3VycmVudEF1ZGl0Q29udGV4dCgpO1xuICBpZiAoIWN0eCkgcmV0dXJuIHt9O1xuICByZXR1cm4ge1xuICAgIC4uLnByaW5jaXBhbEF0dHJpYnV0aW9uKGN0eC5wcmluY2lwYWw/LigpKSxcbiAgICAuLi4oY3R4LnJlcXVlc3RJZCA/IHsgcmVxdWVzdElkOiBib3VuZGVkKGN0eC5yZXF1ZXN0SWQpIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBUaGUgYXR0cmlidXRpb24gYSBxdW90YSB3cml0ZSBzZW5kczogdGhlIGV4cGxpY2l0IGJsb2NrLCBlbHNlIHRoZSBhbWJpZW50IG9uZS4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBdHRyaWJ1dGlvbihleHBsaWNpdD86IFF1b3RhVXNhZ2VBdHRyaWJ1dGlvbik6IFF1b3RhVXNhZ2VBdHRyaWJ1dGlvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJlc29sdmVkID0gZXhwbGljaXQgPz8gYXR0cmlidXRpb25Gcm9tQ29udGV4dCgpO1xuICByZXR1cm4gT2JqZWN0LmtleXMocmVzb2x2ZWQpLmxlbmd0aCA+IDAgPyByZXNvbHZlZCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgcXVvdGEgdHlwZSBhIG1ldGVyZWQgcmVxdWVzdCBhY3R1YWxseSBzcGVuZHMuXG4gKlxuICogYGFwaUNhbGxzYCBpcyB0aGUgUEVPUExFJ3MgYnVkZ2V0IOKAlCBhbiBpbnRlcmFjdGl2ZSBzZXNzaW9uLiBBIHJlcXVlc3QgbWFkZSBieVxuICogYSBOT04tSU5URVJBQ1RJVkUgY3JlZGVudGlhbCBzcGVuZHMgYGF1dG9tYXRpb25DYWxsc2AgaW5zdGVhZCwgbmV2ZXIgYm90aCwgc29cbiAqIGEgZmxlZXQgb2Ygc2VsZi1tdXRhdGluZyBwaXBlbGluZXMgY2FuJ3QgZXhoYXVzdCB0aGUgY29uc29sZSBmb3IgdGhlIGh1bWFuc1xuICogaW4gdGhlIHNhbWUgb3JnOlxuICogIC0gYW4gb3JnIFNFUlZJQ0UgQUNDT1VOVCAoYHByaW5jaXBhbFR5cGU6ICdzZXJ2aWNlX2FjY291bnQnYCDigJRcbiAqICAgIHBsYXRmb3JtLWF1dG9tYXRpb24sIHBpcGVsaW5lLXJlZ2lzdGVyLCByZXBvcnRpbmctaW5nZXN0LCByZWdpc3RyeS1wdXNoKTtcbiAqICAtIGEgUEVSU09OQUwgQUNDRVNTIEtFWTogdGhlIGV4Y2hhbmdlZCBrZXkgdG9rZW4gKGB0b2tlbl91c2U6ICdhcGlfa2V5J2ApXG4gKiAgICBhbmQgYW55dGhpbmcgbWludGVkIHdoaWxlIGhvbGRpbmcgb25lIChgcGFyZW50S2V5SWRgKS4gQSBQQVQgaW4gYSBDSSBqb2JcbiAqICAgIGlzIGF1dG9tYXRpb24gd2hvZXZlciBvd25zIGl0IOKAlCBiaWxsaW5nIGl0IGFzIGEgcGVyc29uIGxldCBvbmUgc2NyaXB0XG4gKiAgICBsb2NrIGl0cyBvd25lcidzIHRlYW1tYXRlcyBvdXQgb2YgdGhlIGNvbnNvbGUuIENJIHNob3VsZCBzdGlsbCB1c2UgYVxuICogICAgc2VydmljZS1hY2NvdW50IGtleSAoaXQgc3Vydml2ZXMgdGhlIHBlcnNvbiBsZWF2aW5nKTsgZWl0aGVyIHdheSB0aGVcbiAqICAgIHRyYWZmaWMgbm93IGxhbmRzIG9uIGBhdXRvbWF0aW9uQ2FsbHNgLlxuICogRXZlcnkgb3RoZXIgdHlwZSBpcyByZXR1cm5lZCB1bmNoYW5nZWQ6IGFuIEFJIGNhbGwgb3IgYSBwaXBlbGluZSBjcmVhdGlvblxuICogY29zdHMgdGhlIHNhbWUgd2hvZXZlciBtYWtlcyBpdC5cbiAqXG4gKiBgbWV0ZXJRdW90YU9uU3VjY2Vzc2AgYW5kIGBjaGVja1F1b3RhYCBjYWxsIHRoaXMgdGhlbXNlbHZlcywgc28gYSBzZXJ2aWNlXG4gKiBtb3VudHMgYm90aCB3aXRoIGAnYXBpQ2FsbHMnYCBhbmQgdGhlIHNwbGl0IGhhcHBlbnMgcGVyIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXRlcmVkUXVvdGFUeXBlRm9yKHJlcTogUGljazxSZXF1ZXN0LCAndXNlcic+LCBxdW90YVR5cGU6IFF1b3RhVHlwZSk6IFF1b3RhVHlwZSB7XG4gIGlmIChxdW90YVR5cGUgIT09ICdhcGlDYWxscycgfHwgIXJlcS51c2VyKSByZXR1cm4gcXVvdGFUeXBlO1xuICBjb25zdCB1ID0gcmVxLnVzZXI7XG4gIGlmICh1LnByaW5jaXBhbFR5cGUgPT09ICdzZXJ2aWNlX2FjY291bnQnIHx8IHUudG9rZW5fdXNlID09PSAnYXBpX2tleScgfHwgdS5wYXJlbnRLZXlJZCkgcmV0dXJuICdhdXRvbWF0aW9uQ2FsbHMnO1xuICByZXR1cm4gcXVvdGFUeXBlO1xufVxuXG4vKiogV2h5IGEgcmVxdWVzdCBpcyBub3QgbWV0ZXJlZC9jaGVja2VkIGFnYWluc3QgYXBpQ2FsbHMgKHNlZSB7QGxpbmsgY2FsbFF1b3RhRXhlbXB0aW9ufSkuICovXG5leHBvcnQgdHlwZSBDYWxsUXVvdGFFeGVtcHRpb24gPSAnc2VydmljZScgfCAnaW1wZXJzb25hdGlvbicgfCAnb25fYmVoYWxmJztcblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBhcGlDYWxscy9hdXRvbWF0aW9uQ2FsbHMgbWV0ZXIgQU5EIGNoZWNrIHNraXAgdGhpcyAodmVyaWZpZWQpXG4gKiByZXF1ZXN0LCBhbmQgd2h5LiBPbmUgZnVuY3Rpb24gZm9yIGJvdGggaGFsdmVzLCBzbyB0aGUgZ2F0ZSBuZXZlciByZWZ1c2VzIGFcbiAqIGNhbGwgdGhlIG1ldGVyIHdvdWxkIG5vdCBiaWxsOlxuICogIC0gYHNlcnZpY2VgIOKAlCBhbiBpbnRlcm5hbCBzZXJ2aWNlIHByaW5jaXBhbDogcGVlciB0cmFmZmljIGlzIGNhdXNlZCBieSBhXG4gKiAgICB1c2VyIGFjdGlvbiB0aGUgb3JpZ2luYXRpbmcgc2VydmljZSBhbHJlYWR5IG1ldGVyZWQ7XG4gKiAgLSBgaW1wZXJzb25hdGlvbmAg4oCUIGEgc3lzYWRtaW4gaW1wZXJzb25hdGlvbiBzZXNzaW9uIChgaW1wZXJzb25hdG9ySWRgKS5cbiAqICAgIFZlbmRvciBzdGFmZiBsb29raW5nIGF0IGEgdGVuYW50J3MgY29uc29sZSBtdXN0IG5laXRoZXIgc3BlbmQgdGhlIHRlbmFudCdzXG4gKiAgICBidWRnZXQgbm9yIGJlIGxvY2tlZCBvdXQgYnkgaXQgd2hpbGUgZGlhZ25vc2luZyBhbiBleGhhdXN0ZWQgb3JnOyB0aGVcbiAqICAgIHNlc3Npb24gaXMgYXVkaXRlZCBvbiBpdHMgb3duIHRyYWlsO1xuICogIC0gYG9uX2JlaGFsZmAg4oCUIGEgdXNlciB0b2tlbiBGT1JXQVJERUQgYnkgYW4gaW50ZXJuYWwgc2VydmljZSBhcyBwYXJ0IG9mIGFcbiAqICAgIHJlcXVlc3QgYWxyZWFkeSBtZXRlcmVkIHdoZXJlIGl0IGFycml2ZWQgKHRoZSBhc2sgYWdlbnQncyB0b29scyxcbiAqICAgIHBpcGVsaW5lJ3MgcGxhY2Vob2xkZXItcGx1Z2luIGNvbmZpcm0pLCBwcm92ZW4gYnkgYSBzaWduZWQgbWFya2VyIHRoZVxuICogICAgdXNlciBjYW5ub3QgZm9yZ2UgKG1pZGRsZXdhcmUvb24tYmVoYWxmLnRzKS5cbiAqIEFwcGxpZXMgdG8gdGhlIENBTEwgYnVkZ2V0cyBvbmx5OiByZXNlcnZhdGlvbi1nYXRlZCBxdW90YXMgKHBpcGVsaW5lcyxcbiAqIHBsdWdpbnMg4oCmKSBhcmUgY2hhcmdlZCB3aG9ldmVyIGFza3MuIGBhaUNhbGxzYCBtaXJyb3JzIHRoZSBpbXBlcnNvbmF0aW9uIGhhbGZcbiAqIG9uIGl0cyBvd24gKGFwaS1zZXJ2ZXIgYHdpdGhBaUNhbGxSZXNlcnZhdGlvbmAgc2tpcHMgdGhlIHNsb3Qgd2hlbiB0aGVcbiAqIHNlc3Npb24gaXMgYW4gaW1wZXJzb25hdGlvbjsgdGhlIGNhbGwgaXMgc3RpbGwgYXVkaXRlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxsUXVvdGFFeGVtcHRpb24ocmVxOiBSZXF1ZXN0KTogQ2FsbFF1b3RhRXhlbXB0aW9uIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFyZXEudXNlcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGlzU2VydmljZVByaW5jaXBhbChyZXEpKSByZXR1cm4gJ3NlcnZpY2UnO1xuICBpZiAocmVxLnVzZXIuaW1wZXJzb25hdG9ySWQpIHJldHVybiAnaW1wZXJzb25hdGlvbic7XG4gIGlmIChvbkJlaGFsZkNhbGxlcihyZXEpKSByZXR1cm4gJ29uX2JlaGFsZic7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU2VydmljZS1wcmluY2lwYWwgYEF1dGhvcml6YXRpb25gIGhlYWRlciBmb3IgYSBxdW90YSBjYWxsIG1hZGUgb24gYmVoYWxmIG9mXG4gKiBgb3JnSWRgIGJ5IHRoZSBDVVJSRU5UIHNlcnZpY2UgKGBTRVJWSUNFX05BTUVgLCB0aGUgc2FtZSBpZGVudGl0eSB0aGUgaGVhbHRoXG4gKiByb3V0ZXIgcmVwb3J0cykuXG4gKlxuICogVGhlIHF1b3RhIHNlcnZpY2UncyBtdXRhdGlvbiBlbmRwb2ludHMgKGAvOm9yZ0lkL2luY3JlbWVudGAsIGAvZGVjcmVtZW50YClcbiAqIHJlamVjdCBhbnl0aGluZyBidXQgYSBzaWduZWQgc2VydmljZSBwcmluY2lwYWwgb3IgYSBzeXN0ZW0gYWRtaW4sIHNvXG4gKiBmb3J3YXJkaW5nIHRoZSBlbmQgdXNlcidzIGJlYXJlciB0b2tlbiB0aGVyZSBpcyBhbHdheXMgYSA0MDMuIFNlcnZpY2UgdG9rZW5zXG4gKiBhcmUgYWxzbyBleGVtcHQgZnJvbSB0aGUgcXVvdGEgc2VydmljZSdzIHBlci1JUCByYXRlIGxpbWl0ZXIsIHNvIGhvdC1wYXRoXG4gKiBxdW90YSB0cmFmZmljIGZyb20gYSBidXN5IHBvZCBjYW4ndCBleGhhdXN0IHRoYXQgcG9kIElQJ3MgYnVja2V0IGFuZCBzaWxlbnRseVxuICogdHVybiBlbmZvcmNlbWVudCBvZmYuIFNjb3BlZCB0byB0aGUgdGFyZ2V0IG9yZyB3aXRoIHRoZSBsb3dlc3Qgcm9sZSAobWVtYmVyKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFF1b3RhU2VydmljZUF1dGhIZWFkZXIob3JnSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRTZXJ2aWNlQXV0aEhlYWRlcih7IHNlcnZpY2VOYW1lOiBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ2FwaScsIG9yZ0lkLCByb2xlOiAnbWVtYmVyJyB9KTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBzeW5jaHJvbm91cyBxdW90YSByZXNlcnZhdGlvbiAgdGhlIGF0b21pYyBjaGVjaytpbmNyZW1lbnRcbiAqIHZhcmlhbnQuIGBleGNlZWRlZDogdHJ1ZWAgbWVhbnMgdGhlIG9wZXJhdGlvbiB3YXMgcmVqZWN0ZWQgYXQgdGhlIERCXG4gKiBsZXZlbDsgdGhlIGNhbGxlciBzaG91bGQgcmV0dXJuIDQyOSB3aXRob3V0IHJ1bm5pbmcgdGhlIGdhdGVkIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVJlc2VydmVSZXN1bHQge1xuICAvKiogVHJ1ZSB3aGVuIHRoZSBzbG90IHdhcyBOT1QgcmVzZXJ2ZWQg4oCUIHRoZSBnYXRlZCBhY3Rpb24gbXVzdCBub3QgcnVuLiAqL1xuICBleGNlZWRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNldCAodHJ1ZSkgYnkgdGhlIHF1b3RhIENMSUVOVCB3aGVuIHRoZSByZXNlcnZhdGlvbiB3YXMgZGVuaWVkIGJlY2F1c2UgdGhlXG4gICAqIHF1b3RhIHNlcnZpY2UgY291bGQgbm90IENPTkZJUk0gaXQgKHVucmVhY2hhYmxlIC8gdGltZW91dCAvIGNpcmN1aXQgb3BlbiAvXG4gICAqIGVycm9yZWQpIOKAlCBub3QgYmVjYXVzZSB0aGUgb3JnIGlzIG92ZXIgaXRzIGxpbWl0LiBBbHdheXMgcGFpcmVkIHdpdGhcbiAgICogYGV4Y2VlZGVkOiB0cnVlYC4gQW5zd2VyIHdpdGgge0BsaW5rIHNlbmRRdW90YVJlc2VydmVEZW5pZWR9LCB3aGljaCBtYXBzIGl0IHRvXG4gICAqIDUwMyBpbnN0ZWFkIG9mIGEgbWlzbGVhZGluZyA0MjkgXCJxdW90YSBleGNlZWRlZFwiLlxuICAgKi9cbiAgdW5hdmFpbGFibGU/OiBib29sZWFuO1xuICAvKipcbiAgICogU2V0IHdoZW4gYW4gYGFpQ2FsbHNgIHJlc2VydmF0aW9uIHdhcyByZWZ1c2VkIGJ5IG9uZSBvZiB0aGUgb3JnJ3MgT1BUSU9OQUxcbiAgICogQUkgY29udHJvbHMgcmF0aGVyIHRoYW4gdGhlIHBlcmlvZCBjYXA6IHtAbGluayBFcnJvckNvZGUuQUlfTUVNQkVSX1NIQVJFX0VYQ0VFREVEfVxuICAgKiAodGhlIGNhbGxlcidzIHBlci1tZW1iZXIgc2hhcmUgaXMgc3BlbnQpIG9yXG4gICAqIHtAbGluayBFcnJvckNvZGUuQUlfVE9LRU5fQlVER0VUX0VYQ0VFREVEfSAodGhlIG9yZydzIHBlci1wZXJpb2QgdG9rZW5cbiAgICogYnVkZ2V0IGlzIHNwZW50KS4gUGFpcmVkIHdpdGggYGV4Y2VlZGVkOiB0cnVlYCBhbmQgdGhlIHF1b3RhIHNlcnZpY2Unc1xuICAgKiBgbWVzc2FnZWA7IHtAbGluayBzZW5kUXVvdGFSZXNlcnZlRGVuaWVkfSByZWxheXMgYm90aC5cbiAgICovXG4gIGNvZGU/OiBBaUxpbWl0Q29kZTtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgcXVvdGE6IHtcbiAgICB0eXBlOiBRdW90YVR5cGU7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICB1c2VkOiBudW1iZXI7XG4gICAgcmVtYWluaW5nOiBudW1iZXI7XG4gICAgcmVzZXRBdD86IHN0cmluZztcbiAgfTtcbn1cblxuLyoqIFRoZSA0MjkgY29kZXMgYW4gYGFpQ2FsbHNgIHJlc2VydmF0aW9uIGFuc3dlcnMgd2hlbiBhbiBvcHRpb25hbCBvcmcgQUkgY29udHJvbCByZWZ1c2VzIGl0LiAqL1xuZXhwb3J0IHR5cGUgQWlMaW1pdENvZGUgPSBFcnJvckNvZGUuQUlfTUVNQkVSX1NIQVJFX0VYQ0VFREVEIHwgRXJyb3JDb2RlLkFJX1RPS0VOX0JVREdFVF9FWENFRURFRDtcblxuY29uc3QgQUlfTElNSVRfQ09ERVM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFtFcnJvckNvZGUuQUlfTUVNQkVSX1NIQVJFX0VYQ0VFREVELCBFcnJvckNvZGUuQUlfVE9LRU5fQlVER0VUX0VYQ0VFREVEXSk7XG5cbi8qKlxuICogUXVvdGEgc2VydmljZSBjbGllbnQgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhU2VydmljZSB7XG4gIC8qKiBDaGVjayBpZiBxdW90YSBpcyBhdmFpbGFibGUgKGZhaWwtb3BlbiBvbiBlcnJvcikuICovXG4gIGNoZWNrKG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFDaGVja1Jlc3VsdD47XG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgcXVvdGEgdXNhZ2UuIFJldHVybnMgYSBwcm9taXNlIHNvIGNhbGxlcnMgY2FuIG9wdGlvbmFsbHkgaGFuZGxlXG4gICAqIGVycm9ycy4gYGF0dHJpYnV0aW9uYCBkZWZhdWx0cyB0byB0aGUgYW1iaWVudCByZXF1ZXN0IGNvbnRleHQuXG4gICAqL1xuICBpbmNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50PzogbnVtYmVyLCBhdHRyaWJ1dGlvbj86IFF1b3RhVXNhZ2VBdHRyaWJ1dGlvbik6IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBNRVRFUkVEIGluY3JlbWVudCBvZiBhIHByZS1hZ2dyZWdhdGVkIGJhdGNoICh0aGUgcGVyLXBvZCBiYXRjaGVyJ3MgZmx1c2gsXG4gICAqIHNlZSBgcXVvdGEtaW5jcmVtZW50LWJhdGNoZXIudHNgKTogdGhlIHN1bSBvZiBgZ3JvdXBzYCBpcyBhcHBsaWVkIHdpdGhcbiAgICogUEFSVElBTCBhZG1pc3Npb24g4oCUIHRoZSBjb3VudGVyIG1vdmVzIGJ5IGFzIG11Y2ggYXMgZml0cyB1bmRlciB0aGUgY2FwIGFuZFxuICAgKiB0aGUgcmVtYWluZGVyIGlzIHJlY29yZGVkIGFzIGBvdmVyc2hvb3RgIOKAlCBhbmQgZWFjaCBncm91cCdzIGF0dHJpYnV0aW9uIGlzXG4gICAqIHdyaXR0ZW4gdG8gdGhlIHVzYWdlIGxlZGdlci4gTmV2ZXIgYSA0MjkuIFJlc29sdmVzIHdpdGggd2hhdCB3YXMgY291bnRlZCxcbiAgICogb3IgYG51bGxgIHdoZW4gdGhlIHF1b3RhIHNlcnZpY2UgZGlkIG5vdCBhbnN3ZXIgb2sgKGNvdW50ZWQgb25cbiAgICogYHF1b3RhX2luY3JlbWVudF9mYWlsdXJlc190b3RhbGApLlxuICAgKi9cbiAgaW5jcmVtZW50TWV0ZXJlZChvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgYXV0aEhlYWRlcjogc3RyaW5nLCBncm91cHM6IE1ldGVyZWRJbmNyZW1lbnRHcm91cFtdKTogUHJvbWlzZTx7IGNvdW50ZWQ6IG51bWJlcjsgb3ZlcnNob290OiBudW1iZXIgfSB8IG51bGw+O1xuICAvKipcbiAgICogQXRvbWljIHJlc2VydmUgIHRoZSBzYW1lIGF0b21pYyBjaGVjaytpbmNyZW1lbnQgYXMgYGluY3JlbWVudGAsIGJ1dFxuICAgKiBwYXJzZXMgdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIHNlZSB3aGV0aGVyIHRoZSBzbG90IHdhcyBhY3R1YWxseVxuICAgKiByZXNlcnZlZC4gVXNlIHRoaXMgZm9yIGV4cGVuc2l2ZSByZXNvdXJjZXMgd2hlcmUgdGhlIHBvc3QtaG9jIGZpcmUtXG4gICAqIGFuZC1mb3JnZXQgcGF0dGVybiBhbGxvd3MgY29uY3VycmVudCBvdmVyLXNwZW5kLlxuICAgKlxuICAgKiBGYWlscyBDTE9TRUQgKGBleGNlZWRlZDogdHJ1ZWApIHdoZW5ldmVyIHRoZSBzbG90IGlzIG5vdCBjb25maXJtZWQg4oCUXG4gICAqIHVucmVhY2hhYmxlLCB0aW1lb3V0LCBvcGVuIGNpcmN1aXQsIG5vbi1vaywgb3IgYSBub24tcXVvdGEgNDI5IOKAlCB1bmxlc3NcbiAgICogYFFVT1RBX1JFU0VSVkVfRkFJTF9PUEVOPXRydWVgIChzZWUgdGhlIHBvbGljeSBub3RlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlKS5cbiAgICovXG4gIHJlc2VydmUob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50PzogbnVtYmVyLCBhdHRyaWJ1dGlvbj86IFF1b3RhVXNhZ2VBdHRyaWJ1dGlvbik6IFByb21pc2U8UXVvdGFSZXNlcnZlUmVzdWx0PjtcbiAgLyoqXG4gICAqIFJvbGwgYmFjayBhIHByZXZpb3VzbHkgcmVzZXJ2ZWQgc2xvdC4gRmlyZS1hbmQtZm9yZ2V0IOKAlCBuZXZlciB0aHJvd3MuXG4gICAqIFBhc3MgYHJlc2V0QXRTbmFwc2hvdGAgKHRoZSBgcXVvdGEucmVzZXRBdGAgb2JzZXJ2ZWQgd2hlbiB0aGUgc2xvdCB3YXNcbiAgICogcmVzZXJ2ZWQpIHRvIG1ha2UgdGhlIHJvbGxiYWNrIGNvbmRpdGlvbmFsOiBpZiB0aGUgcGVyaW9kIHJvbGxlZCBvdmVyXG4gICAqIGJldHdlZW4gcmVzZXJ2ZSBhbmQgcm9sbGJhY2ssIHRoZSBzZXJ2ZXIgc2tpcHMgdGhlIGRlY3JlbWVudCBzbyBpdCBkb2Vzbid0XG4gICAqIHN0ZWFsIGNhcGFjaXR5IGZyb20gdGhlIG5ldyBwZXJpb2QuXG4gICAqL1xuICBkZWNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50PzogbnVtYmVyLCByZXNldEF0U25hcHNob3Q/OiBzdHJpbmcsIGF0dHJpYnV0aW9uPzogUXVvdGFVc2FnZUF0dHJpYnV0aW9uKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFJlY29yZCB3aGF0IGFuIEFJIGNhbGwgQ09TVCBhZnRlciBpdCBzZXR0bGVkIOKAlCBpdHMgdG9rZW4gY291bnRzIOKAlCBpbiB0aGVcbiAgICogdXNhZ2UgbGVkZ2VyLCB3aXRob3V0IG1vdmluZyBhbnkgY291bnRlciAoYSB6ZXJvLXVuaXQgbGVkZ2VyIHJvdyBjYXJyeWluZ1xuICAgKiBgdG9rZW5zSW5gIC8gYHRva2Vuc091dGAgdW5kZXIgdGhlIGNhbGwncyBhdHRyaWJ1dGlvbikuIEFsc28gaG93IGEgY2FsbCB0aGF0XG4gICAqIHNwZW50IE5PIGBhaUNhbGxzYCB1bml0IChhIEJZT0sga2V5LCBhbiBpbXBlcnNvbmF0aW9uIHNlc3Npb24sIGEgd2VpZ2h0LTBcbiAgICogbW9kZWwpIHN0aWxsIHNob3dzIHVwIGluIHRoZSB1c2FnZSBicmVha2Rvd24uIEZpcmUtYW5kLWZvcmdldCDigJQgbmV2ZXIgdGhyb3dzLlxuICAgKiBPcHRpb25hbCBzbyB0ZXN0IGRvdWJsZXMgbmVlZCBub3QgaW1wbGVtZW50IGl0LlxuICAgKi9cbiAgcmVwb3J0VXNhZ2U/KG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHRva2VuczogUXVvdGFUb2tlblVzYWdlLCBhdHRyaWJ1dGlvbj86IFF1b3RhVXNhZ2VBdHRyaWJ1dGlvbik6IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBHZXQgdGhlIG9yZydzIHF1b3RhIGBRdW90YVRpZXJgLiBVc2VkIGJ5IHRoZSBwbHVnaW4tYnVpbGQgcXVldWUgcGFydGl0aW9uaW5nXG4gICAqIHRvIHJvdXRlIGEgYnVpbGQgdG8gdGhlIHJpZ2h0IHBlci10aWVyIHF1ZXVlLiBGYWlsLW9wZW4gcmV0dXJucyBgREVGQVVMVF9USUVSYFxuICAgKiAoYGRldmVsb3BlcmAgd2hlbiBiaWxsaW5nIGlzIGVuYWJsZWQsIGB1bmxpbWl0ZWRgIHdoZW4gaXQncyBkaXNhYmxlZCk7IGFcbiAgICogbWlzY2xhc3NpZmllZCBvcmcgc3RpbGwgYnVpbGRzIG9uIHRoZSBkZWZhdWx0IHF1ZXVlLCBqdXN0IHdpdGhvdXQgdGhlXG4gICAqIHRpZXItc2NvcGVkIHNjaGVkdWxpbmcgYm9vc3QuXG4gICAqL1xuICBnZXRUaWVyKG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YVRpZXI+O1xuICAvKipcbiAgICogRkFJTC1DTE9TRUQgdHdpbiBvZiB7QGxpbmsgZ2V0VGllcn06IHRoZSBvcmcncyB0aWVyIGFzIHRoZSBxdW90YSBzZXJ2aWNlXG4gICAqIENPTkZJUk1FRCBpdCwgb3IgYG51bGxgIHdoZW4gaXQgY291bGQgbm90IGJlIGNvbmZpcm1lZCAodW5yZWFjaGFibGUsIG5vbi1vayxcbiAgICogbWlzc2luZyBvciB1bnJlY29nbml6ZWQgdGllcikuIEZvciBkZWNpc2lvbnMgdGhhdCBtdXN0IG5ldmVyIGJlIHRha2VuIG9uIGFcbiAgICogZ3Vlc3Mg4oCUIGFueXRoaW5nIHRoYXQgcmV2b2tlcywgZG93bmdyYWRlcyBvciBkZWxldGVzIG9uIHRoZSBzdHJlbmd0aCBvZiBhXG4gICAqIHRpZXIgKGUuZy4gYSB2ZXJpZmllZC1wdWJsaXNoZXIgZ3JhY2Ugc3dlZXApIG11c3Qgc2tpcCB0aGUgb3JnIG9uIGBudWxsYCxcbiAgICogbmV2ZXIgYWN0IG9uIGBERUZBVUxUX1RJRVJgLlxuICAgKi9cbiAgZ2V0VGllclN0cmljdChvcmdJZDogc3RyaW5nLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFUaWVyIHwgbnVsbD47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgcXVvdGEgc2VydmljZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFTZXJ2aWNlQ29uZmlnIHtcbiAgLyoqIFF1b3RhIHNlcnZpY2UgaG9zdCAoZGVmYXVsdDogZW52IFFVT1RBX1NFUlZJQ0VfSE9TVCBvciAncXVvdGEnKSAqL1xuICBob3N0Pzogc3RyaW5nO1xuICAvKiogUXVvdGEgc2VydmljZSBwb3J0IChkZWZhdWx0OiBlbnYgUVVPVEFfU0VSVklDRV9QT1JUIG9yIDMwMDApICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBSZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIChkZWZhdWx0OiA1MDAwKSAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFwcGx5IHRoZSBleHBsaWNpdCByZXNlcnZlIGZhaWwtbW9kZSBwb2xpY3kgdG8gYSByZXNlcnZhdGlvbiB0aGUgcXVvdGEgc2VydmljZVxuICogZGlkIE5PVCBjb25maXJtIChzZWUgUVVPVEFfUkVTRVJWRV9GQUlMX09QRU4gYWJvdmUpLiBEZWZhdWx0OiBkZW55LlxuICovXG5mdW5jdGlvbiB1bmNvbmZpcm1lZFJlc2VydmUoXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHF1b3RhVHlwZTogUXVvdGFUeXBlLFxuICByZWFzb246ICd1bnJlYWNoYWJsZScgfCAndHJhbnNpZW50LTQyOScgfCAnbm9uLW9rJyxcbiAgc3RhdHVzQ29kZT86IG51bWJlcixcbik6IFF1b3RhUmVzZXJ2ZVJlc3VsdCB7XG4gIGlmIChRVU9UQV9SRVNFUlZFX0ZBSUxfT1BFTikge1xuICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IHF1b3RhIHJlc2VydmUgbm90IGNvbmZpcm1lZCwgYWxsb3dpbmcgcmVxdWVzdCcsIHsgb3JnSWQsIHF1b3RhVHlwZSwgcmVhc29uLCBzdGF0dXNDb2RlIH0pO1xuICAgIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX29wZW5fdG90YWwnLCB7IG9wZXJhdGlvbjogJ3Jlc2VydmUnLCByZWFzb24sIHF1b3RhVHlwZSB9KTtcbiAgICByZXR1cm4geyBleGNlZWRlZDogZmFsc2UsIHF1b3RhOiB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IC0xLCB1c2VkOiAwLCByZW1haW5pbmc6IC0xIH0gfTtcbiAgfVxuICBsb2dnZXIud2FybignUVVPVEFfRkFJTF9DTE9TRUQ6IHF1b3RhIHJlc2VydmUgbm90IGNvbmZpcm1lZCwgZGVueWluZyByZXF1ZXN0JywgeyBvcmdJZCwgcXVvdGFUeXBlLCByZWFzb24sIHN0YXR1c0NvZGUgfSk7XG4gIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX2Nsb3NlZF90b3RhbCcsIHsgb3BlcmF0aW9uOiAncmVzZXJ2ZScsIHJlYXNvbiwgcXVvdGFUeXBlIH0pO1xuICByZXR1cm4geyBleGNlZWRlZDogdHJ1ZSwgdW5hdmFpbGFibGU6IHRydWUsIHF1b3RhOiB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IDAsIHVzZWQ6IDAsIHJlbWFpbmluZzogMCB9IH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZmFpbC1vcGVuIHF1b3RhIHJlc3VsdCAoYWxsb3dzIHRoZSByZXF1ZXN0KS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmFpbE9wZW5SZXN1bHQoKTogUXVvdGFDaGVja1Jlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgYWxsb3dlZDogdHJ1ZSxcbiAgICBsaW1pdDogLTEsXG4gICAgdXNlZDogMCxcbiAgICByZW1haW5pbmc6IC0xLFxuICAgIHJlc2V0QXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB1bmxpbWl0ZWQ6IHRydWUsXG4gICAgLy8gVGFnIHRoZSBzZW50aW5lbCBzbyBmYWlsLWNsb3NlZCBjYWxsZXJzIGNhbiB0ZWxsIGFuIG91dGFnZSBhcGFydCBmcm9tIGFcbiAgICAvLyByZWFsIHVubGltaXRlZCAoLTEpIHJlYWRpbmcuIFJlYWwgcXVvdGEgcmVzdWx0cyBuZXZlciBzZXQgdGhpcy5cbiAgICBmYWlsT3BlbjogdHJ1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBjb21tb24gcmVxdWVzdCBoZWFkZXJzIHdpdGggb3B0aW9uYWwgcmVxdWVzdCBJRCBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzKG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI/OiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyAneC1vcmctaWQnOiBvcmdJZCB9O1xuICBpZiAoYXV0aEhlYWRlcikgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYXV0aEhlYWRlcjtcbiAgaWYgKHJlcXVlc3RJZCkgaGVhZGVyc1snWC1SZXF1ZXN0LUlkJ10gPSByZXF1ZXN0SWQ7XG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHF1b3RhIHNlcnZpY2UgY2xpZW50LlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBzZXJ2aWNlIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFF1b3RhIHNlcnZpY2UgY2xpZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHF1b3RhU2VydmljZSA9IGNyZWF0ZVF1b3RhU2VydmljZSgpO1xuICpcbiAqIC8vIENoZWNrIHF1b3RhIGJlZm9yZSBwcm9jZXNzaW5nXG4gKiBjb25zdCBxdW90YSA9IGF3YWl0IHF1b3RhU2VydmljZS5jaGVjayhvcmdJZCwgJ2FwaUNhbGxzJywgYXV0aEhlYWRlcik7XG4gKiBpZiAoIXF1b3RhLmFsbG93ZWQpIHtcbiAqIHJldHVybiByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnUXVvdGEgZXhjZWVkZWQnIH0pO1xuICogfVxuICpcbiAqIC8vIEluY3JlbWVudCBxdW90YSBhZnRlciBzdWNjZXNzXG4gKiBxdW90YVNlcnZpY2UuaW5jcmVtZW50KG9yZ0lkLCAnYXBpQ2FsbHMnLCBhdXRoSGVhZGVyKS5jYXRjaChlcnIgPT4gbG9nZ2VyLndhcm4oJ1F1b3RhIGluY3JlbWVudCBmYWlsZWQnLCB7IGVycm9yOiBlcnIgfSkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVRdW90YVNlcnZpY2UoY29uZmlnOiBRdW90YVNlcnZpY2VDb25maWcgPSB7fSk6IFF1b3RhU2VydmljZSB7XG4gIGNvbnN0IHNlcnZpY2VDb25maWc6IFNlcnZpY2VDb25maWcgPSB7XG4gICAgaG9zdDogY29uZmlnLmhvc3QgPz8gc2VydmljZUVuZHBvaW50KCdxdW90YScpLmhvc3QsXG4gICAgcG9ydDogY29uZmlnLnBvcnQgPz8gc2VydmljZUVuZHBvaW50KCdxdW90YScpLnBvcnQsXG4gICAgdGltZW91dDogY29uZmlnLnRpbWVvdXQgPz8gNTAwMCxcbiAgfTtcblxuICBjb25zdCBjbGllbnQgPSBjcmVhdGVTYWZlQ2xpZW50KHNlcnZpY2VDb25maWcpO1xuXG4gIC8qKiBPbmUgdGllciByZWFkOiB0aGUgY29uZmlybWVkIHRpZXIsIG9yIHdoeSB0aGVyZSBpc24ndCBvbmUuICovXG4gIGFzeW5jIGZ1bmN0aW9uIHJlYWRUaWVyKFxuICAgIG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgdGllcjogUXVvdGFUaWVyOyByZWFzb24/OiB1bmRlZmluZWQ7IHN0YXR1c0NvZGU/OiBudW1iZXIgfSB8IHsgdGllcjogbnVsbDsgcmVhc29uOiAndW5yZWFjaGFibGUnIHwgJ25vbi1vaycgfCAnaW52YWxpZC10aWVyJzsgc3RhdHVzQ29kZT86IG51bWJlciB9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PHtcbiAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICBkYXRhPzogeyBxdW90YT86IHsgdGllcj86IHN0cmluZyB9IH07XG4gICAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIH0+KGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX1gLCB7IGhlYWRlcnM6IGJ1aWxkSGVhZGVycyhvcmdJZCwgYXV0aEhlYWRlciwgcmVxdWVzdElkKSwgLi4uUVVPVEFfUkVRVUVTVF9PUFRJT05TIH0pO1xuICAgIGlmICghcmVzcG9uc2UpIHJldHVybiB7IHRpZXI6IG51bGwsIHJlYXNvbjogJ3VucmVhY2hhYmxlJyB9O1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDAgfHwgIXJlc3BvbnNlLmJvZHk/LnN1Y2Nlc3MpIHJldHVybiB7IHRpZXI6IG51bGwsIHJlYXNvbjogJ25vbi1vaycsIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1c0NvZGUgfTtcbiAgICBjb25zdCB0aWVyID0gcmVzcG9uc2UuYm9keS5kYXRhPy5xdW90YT8udGllcjtcbiAgICBpZiAoIXRpZXIgfHwgIWlzVmFsaWRUaWVyKHRpZXIpKSByZXR1cm4geyB0aWVyOiBudWxsLCByZWFzb246ICdpbnZhbGlkLXRpZXInLCBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlIH07XG4gICAgcmV0dXJuIHsgdGllciwgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBjaGVjayhvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgYXV0aEhlYWRlcjogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPFF1b3RhQ2hlY2tSZXN1bHQ+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHF1b3RhVHlwZSl9YDtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PHtcbiAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgZGF0YT86IHsgcXVvdGFUeXBlOiBzdHJpbmc7IHN0YXR1czogUXVvdGFDaGVja1Jlc3VsdCB9O1xuICAgICAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgICAgfT4ocGF0aCwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLmNoZWNrUmVxdWVzdE9wdGlvbnMocXVvdGFUeXBlKSB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICBsb2dnZXIud2FybignUVVPVEFfRkFJTF9PUEVOOiBRdW90YSBzZXJ2aWNlIHVucmVhY2hhYmxlLCBhbGxvd2luZyByZXF1ZXN0JywgeyBvcmdJZCwgcXVvdGFUeXBlIH0pO1xuICAgICAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9vcGVuX3RvdGFsJywgeyBvcGVyYXRpb246ICdjaGVjaycsIHJlYXNvbjogJ3VucmVhY2hhYmxlJywgcXVvdGFUeXBlIH0pO1xuICAgICAgICByZXR1cm4gY3JlYXRlRmFpbE9wZW5SZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCB8fCAhcmVzcG9uc2UuYm9keS5zdWNjZXNzIHx8ICFyZXNwb25zZS5ib2R5LmRhdGE/LnN0YXR1cykge1xuICAgICAgICBsb2dnZXIud2FybignUVVPVEFfRkFJTF9PUEVOOiBRdW90YSBjaGVjayByZXR1cm5lZCBub24tb2ssIGFsbG93aW5nIHJlcXVlc3QnLCB7XG4gICAgICAgICAgb3JnSWQsIHF1b3RhVHlwZSwgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSwgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgICAgZW1pdENvdW50ZXIoJ3F1b3RhX2ZhaWxfb3Blbl90b3RhbCcsIHsgb3BlcmF0aW9uOiAnY2hlY2snLCByZWFzb246ICdub24tb2snLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVGYWlsT3BlblJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2UuYm9keS5kYXRhLnN0YXR1cztcbiAgICB9LFxuXG4gICAgYXN5bmMgaW5jcmVtZW50KG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyID0gMSwgYXR0cmlidXRpb24/OiBRdW90YVVzYWdlQXR0cmlidXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9L2luY3JlbWVudGA7XG4gICAgICBjb25zdCBhdHRyID0gcmVzb2x2ZUF0dHJpYnV0aW9uKGF0dHJpYnV0aW9uKTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnRcbiAgICAgICAgLnBvc3QocGF0aCwgeyBxdW90YVR5cGUsIGFtb3VudCwgLi4uKGF0dHIgJiYgeyBhdHRyaWJ1dGlvbjogYXR0ciB9KSB9LCB7IGhlYWRlcnM6IGJ1aWxkSGVhZGVycyhvcmdJZCwgYXV0aEhlYWRlciwgYXR0cj8ucmVxdWVzdElkKSwgLi4uUVVPVEFfUkVRVUVTVF9PUFRJT05TIH0pO1xuXG4gICAgICBpZiAocmVzcG9uc2U/LnN0YXR1c0NvZGUgPT09IDQyOSkge1xuICAgICAgICAvLyBPdmVyIHRoZSBsaW1pdDogdGhlIHF1b3RhIHNlcnZpY2UgcmVmdXNlZCBBTkQgcmVjb3JkZWQgdGhlIGRlbmlhbCBpblxuICAgICAgICAvLyBpdHMgbGVkZ2VyLiBOb3QgYSBmYWlsdXJlIG9mIG1ldGVyaW5nIOKAlCB0aGUgY291bnRlciBpcyBleGFjdGx5IHdoZXJlXG4gICAgICAgIC8vIGl0IHNob3VsZCBiZS5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdRdW90YSBpbmNyZW1lbnQgcmVmdXNlZCAob3ZlciBsaW1pdCknLCB7IG9yZ0lkLCBxdW90YVR5cGUsIGFtb3VudCB9KTtcbiAgICAgIH0gZWxzZSBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGluY3JlbWVudCBxdW90YScsIHtcbiAgICAgICAgICBvcmdJZCwgcXVvdGFUeXBlLCBhbW91bnQsIHN0YXR1c0NvZGU6IHJlc3BvbnNlPy5zdGF0dXNDb2RlLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQSBsb3N0IG1ldGVyaW5nIGluY3JlbWVudCBpcyBhIHVuaXQgdGhlIG9yZyBjb25zdW1lZCBhbmQgbmV2ZXIgcGFpZFxuICAgICAgICAvLyBmb3IuIENvdW50ZWQgKGxhYmVsbGVkIGJ5IHRoZSBlbWl0dGluZyBgc2VydmljZWApIHNvIGEgc3VzdGFpbmVkIHJhdGVcbiAgICAgICAgLy8gcGFnZXMgaW5zdGVhZCBvZiBzaWxlbnRseSB1bmRlci1iaWxsaW5nIOKAlCBzZWUgUXVvdGFJbmNyZW1lbnRGYWlsdXJlcy5cbiAgICAgICAgZW1pdENvdW50ZXIoJ3F1b3RhX2luY3JlbWVudF9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiByZXNwb25zZSA/ICdub24tb2snIDogJ3VucmVhY2hhYmxlJywgcXVvdGFUeXBlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdRdW90YSBpbmNyZW1lbnRlZCcsIHsgb3JnSWQsIHF1b3RhVHlwZSwgYW1vdW50IH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbmNyZW1lbnRNZXRlcmVkKG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIGdyb3VwczogTWV0ZXJlZEluY3JlbWVudEdyb3VwW10pOiBQcm9taXNlPHsgY291bnRlZDogbnVtYmVyOyBvdmVyc2hvb3Q6IG51bWJlciB9IHwgbnVsbD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vaW5jcmVtZW50YDtcbiAgICAgIGNvbnN0IGFtb3VudCA9IGdyb3Vwcy5yZWR1Y2UoKHN1bSwgZykgPT4gc3VtICsgZy5hbW91bnQsIDApO1xuICAgICAgaWYgKGFtb3VudCA8PSAwKSByZXR1cm4geyBjb3VudGVkOiAwLCBvdmVyc2hvb3Q6IDAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8eyBzdWNjZXNzOiBib29sZWFuOyBkYXRhPzogeyBjb3VudGVkPzogbnVtYmVyOyBvdmVyc2hvb3Q/OiBudW1iZXIgfSB9PihcbiAgICAgICAgcGF0aCxcbiAgICAgICAgeyBxdW90YVR5cGUsIGFtb3VudCwgbWV0ZXI6IHRydWUsIGdyb3VwcyB9LFxuICAgICAgICB7IGhlYWRlcnM6IGJ1aWxkSGVhZGVycyhvcmdJZCwgYXV0aEhlYWRlciksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9LFxuICAgICAgKTtcbiAgICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwIHx8ICFyZXNwb25zZS5ib2R5Py5zdWNjZXNzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gYXBwbHkgbWV0ZXJlZCBxdW90YSBpbmNyZW1lbnQnLCB7IG9yZ0lkLCBxdW90YVR5cGUsIGFtb3VudCwgc3RhdHVzQ29kZTogcmVzcG9uc2U/LnN0YXR1c0NvZGUgfSk7XG4gICAgICAgIC8vIEV2ZXJ5IHVuaXQgaW4gdGhlIGJhdGNoIHdlbnQgdW5jb3VudGVkIOKAlCBzZWUgUXVvdGFJbmNyZW1lbnRGYWlsdXJlcy5cbiAgICAgICAgZW1pdENvdW50ZXIoJ3F1b3RhX2luY3JlbWVudF9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiByZXNwb25zZSA/ICdub24tb2snIDogJ3VucmVhY2hhYmxlJywgcXVvdGFUeXBlIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvdW50ZWQgPSByZXNwb25zZS5ib2R5LmRhdGE/LmNvdW50ZWQgPz8gYW1vdW50O1xuICAgICAgY29uc3Qgb3ZlcnNob290ID0gcmVzcG9uc2UuYm9keS5kYXRhPy5vdmVyc2hvb3QgPz8gMDtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTWV0ZXJlZCBxdW90YSBpbmNyZW1lbnQgYXBwbGllZCcsIHsgb3JnSWQsIHF1b3RhVHlwZSwgYW1vdW50LCBjb3VudGVkLCBvdmVyc2hvb3QgfSk7XG4gICAgICByZXR1cm4geyBjb3VudGVkLCBvdmVyc2hvb3QgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzZXJ2ZShvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgYXV0aEhlYWRlcjogc3RyaW5nLCBhbW91bnQ6IG51bWJlciA9IDEsIGF0dHJpYnV0aW9uPzogUXVvdGFVc2FnZUF0dHJpYnV0aW9uKTogUHJvbWlzZTxRdW90YVJlc2VydmVSZXN1bHQ+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9L2luY3JlbWVudGA7XG4gICAgICBjb25zdCBhdHRyID0gcmVzb2x2ZUF0dHJpYnV0aW9uKGF0dHJpYnV0aW9uKTtcblxuICAgICAgLy8gMjAwIGNhcnJpZXMgYGRhdGEucXVvdGFgOyA0MjkgKFFVT1RBX0VYQ0VFREVEKSBjYXJyaWVzIGBkZXRhaWxzLnF1b3RhYC5cbiAgICAgIC8vIEJvdGggc2hhcGVzIGFyZSBub3JtYWxpemVkIGludG8gUXVvdGFSZXNlcnZlUmVzdWx0LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDx7XG4gICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICAgIGRhdGE/OiB7IHF1b3RhPzogUXVvdGFSZXNlcnZlUmVzdWx0WydxdW90YSddIH07XG4gICAgICAgIGRldGFpbHM/OiB7IHF1b3RhPzogUXVvdGFSZXNlcnZlUmVzdWx0WydxdW90YSddIH07XG4gICAgICAgIC8qKiBgc2VuZEVycm9yYCdzIGVycm9yLWNvZGUgZmllbGQuICovXG4gICAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB9PihwYXRoLCB7IHF1b3RhVHlwZSwgYW1vdW50LCAuLi4oYXR0ciAmJiB7IGF0dHJpYnV0aW9uOiBhdHRyIH0pIH0sIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyLCBhdHRyPy5yZXF1ZXN0SWQpLCAuLi5RVU9UQV9SRVFVRVNUX09QVElPTlMgfSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2UpIHJldHVybiB1bmNvbmZpcm1lZFJlc2VydmUob3JnSWQsIHF1b3RhVHlwZSwgJ3VucmVhY2hhYmxlJyk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MjkpIHtcbiAgICAgICAgY29uc3QgcSA9IHJlc3BvbnNlLmJvZHkuZGV0YWlscz8ucXVvdGE7XG4gICAgICAgIC8vIEFuIG9wdGlvbmFsIG9yZyBBSSBjb250cm9sIChwZXItbWVtYmVyIHNoYXJlLCB0b2tlbiBidWRnZXQpIHJlZnVzZWQgdGhlXG4gICAgICAgIC8vIHNsb3Q6IGEgZ2VudWluZSwgZmluYWwgZGVuaWFsIOKAlCByZWxheWVkIHdpdGggaXRzIG93biBjb2RlIGFuZCBtZXNzYWdlLlxuICAgICAgICBpZiAocmVzcG9uc2UuYm9keS5jb2RlICYmIEFJX0xJTUlUX0NPREVTLmhhcyhyZXNwb25zZS5ib2R5LmNvZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV4Y2VlZGVkOiB0cnVlLFxuICAgICAgICAgICAgY29kZTogcmVzcG9uc2UuYm9keS5jb2RlIGFzIEFpTGltaXRDb2RlLFxuICAgICAgICAgICAgLi4uKHJlc3BvbnNlLmJvZHkubWVzc2FnZSA/IHsgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlIH0gOiB7fSksXG4gICAgICAgICAgICBxdW90YTogcSA/PyB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IDAsIHVzZWQ6IDAsIHJlbWFpbmluZzogMCB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gT25seSBhIEdFTlVJTkUgcXVvdGEtZXhjZWVkZWQgNDI5IG1lYW5zIFwib3ZlciBxdW90YVwiLiBBIGdlbmVyaWMgNDI5IOKAlFxuICAgICAgICAvLyBhbiBpbnRlcnZlbmluZyBnYXRld2F5IG9yIHJhdGUgbGltaXRlciDigJQgZGlkIG5vdCBjb25maXJtIGFueXRoaW5nLCBzb1xuICAgICAgICAvLyBpdCBnb2VzIHRocm91Z2ggdGhlIHNhbWUgdW5jb25maXJtZWQtcmVzZXJ2YXRpb24gcG9saWN5IGFzIGFuIG91dGFnZS5cbiAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHkuY29kZSA9PT0gRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVEIHx8IHEpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXhjZWVkZWQ6IHRydWUsXG4gICAgICAgICAgICBxdW90YTogcSA/PyB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IDAsIHVzZWQ6IDAsIHJlbWFpbmluZzogMCB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuY29uZmlybWVkUmVzZXJ2ZShvcmdJZCwgcXVvdGFUeXBlLCAndHJhbnNpZW50LTQyOScsIHJlc3BvbnNlLnN0YXR1c0NvZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwIHx8ICFyZXNwb25zZS5ib2R5LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHVuY29uZmlybWVkUmVzZXJ2ZShvcmdJZCwgcXVvdGFUeXBlLCAnbm9uLW9rJywgcmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHEgPSByZXNwb25zZS5ib2R5LmRhdGE/LnF1b3RhO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhjZWVkZWQ6IGZhbHNlLFxuICAgICAgICBxdW90YTogcSA/PyB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IC0xLCB1c2VkOiAwLCByZW1haW5pbmc6IC0xIH0sXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCByZXNldEF0U25hcHNob3Q/OiBzdHJpbmcsIGF0dHJpYnV0aW9uPzogUXVvdGFVc2FnZUF0dHJpYnV0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBwYXRoID0gYC9xdW90YXMvJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfS9kZWNyZW1lbnRgO1xuICAgICAgY29uc3QgYXR0ciA9IHJlc29sdmVBdHRyaWJ1dGlvbihhdHRyaWJ1dGlvbik7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudFxuICAgICAgICAucG9zdChwYXRoLCB7IHF1b3RhVHlwZSwgYW1vdW50LCAuLi4ocmVzZXRBdFNuYXBzaG90ICYmIHsgcmVzZXRBdFNuYXBzaG90IH0pLCAuLi4oYXR0ciAmJiB7IGF0dHJpYnV0aW9uOiBhdHRyIH0pIH0sIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyLCBhdHRyPy5yZXF1ZXN0SWQpLCAuLi5RVU9UQV9SRVFVRVNUX09QVElPTlMgfSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIC8vIFJvbGxiYWNrIGZhaWx1cmUgaXMgbG9nZ2VkIGJ1dCBuZXZlciBwcm9wYWdhdGVkICB0aGUgYWN0aW9uJ3Mgb3duXG4gICAgICAgIC8vIGZhaWx1cmUgaGFzIGFscmVhZHkgYmVlbiBzdXJmYWNlZCB0byB0aGUgY2FsbGVyOyBhIHN0dWNrIGNvdW50ZXJcbiAgICAgICAgLy8gcmVzb2x2ZXMgb24gdGhlIG5leHQgcGVyaW9kIHJlc2V0LlxuICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGRlY3JlbWVudCBxdW90YSAoc2xvdCB3aWxsIHJlc2V0IG9uIG5leHQgcGVyaW9kKScsIHtcbiAgICAgICAgICBvcmdJZCwgcXVvdGFUeXBlLCBhbW91bnQsIHN0YXR1c0NvZGU6IHJlc3BvbnNlPy5zdGF0dXNDb2RlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnUXVvdGEgZGVjcmVtZW50ZWQnLCB7IG9yZ0lkLCBxdW90YVR5cGUsIGFtb3VudCB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcmVwb3J0VXNhZ2Uob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgdG9rZW5zOiBRdW90YVRva2VuVXNhZ2UsIGF0dHJpYnV0aW9uPzogUXVvdGFVc2FnZUF0dHJpYnV0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCB0b2tlbnNJbiA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IodG9rZW5zLnRva2Vuc0luIHx8IDApKTtcbiAgICAgIGNvbnN0IHRva2Vuc091dCA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IodG9rZW5zLnRva2Vuc091dCB8fCAwKSk7XG4gICAgICBjb25zdCBhdHRyID0gcmVzb2x2ZUF0dHJpYnV0aW9uKGF0dHJpYnV0aW9uKTtcbiAgICAgIC8vIE5vdGhpbmcgdG8gc2F5OiBubyB0b2tlbnMgYW5kIG5vIGF0dHJpYnV0aW9uIHRvIG1ha2UgYSB6ZXJvIHJvdyB1c2VmdWwuXG4gICAgICBpZiAodG9rZW5zSW4gPT09IDAgJiYgdG9rZW5zT3V0ID09PSAwICYmICFhdHRyKSByZXR1cm47XG4gICAgICBjb25zdCBwYXRoID0gYC9xdW90YXMvJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfS9pbmNyZW1lbnRgO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHsgcXVvdGFUeXBlLCByZXBvcnQ6IHRydWUsIHRva2Vuc0luLCB0b2tlbnNPdXQsIC4uLihhdHRyICYmIHsgYXR0cmlidXRpb246IGF0dHIgfSkgfSxcbiAgICAgICAgICB7IGhlYWRlcnM6IGJ1aWxkSGVhZGVycyhvcmdJZCwgYXV0aEhlYWRlciwgYXR0cj8ucmVxdWVzdElkKSwgLi4uUVVPVEFfUkVRVUVTVF9PUFRJT05TIH0sXG4gICAgICAgICk7XG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byByZXBvcnQgQUkgdXNhZ2UnLCB7IG9yZ0lkLCBxdW90YVR5cGUsIHN0YXR1c0NvZGU6IHJlc3BvbnNlPy5zdGF0dXNDb2RlIH0pO1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdxdW90YV91c2FnZV9yZXBvcnRfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogcmVzcG9uc2UgPyAnbm9uLW9rJyA6ICd1bnJlYWNoYWJsZScsIHF1b3RhVHlwZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gcmVwb3J0IEFJIHVzYWdlJywgeyBvcmdJZCwgcXVvdGFUeXBlLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICAgIGVtaXRDb3VudGVyKCdxdW90YV91c2FnZV9yZXBvcnRfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogJ2V4Y2VwdGlvbicsIHF1b3RhVHlwZSB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGllcihvcmdJZDogc3RyaW5nLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFUaWVyPiB7XG4gICAgICBjb25zdCBrbm93biA9IGNvbnN0YW50VGllckZvcihvcmdJZCk7XG4gICAgICBpZiAoa25vd24pIHJldHVybiBrbm93bjtcbiAgICAgIGNvbnN0IHJlYWQgPSBhd2FpdCByZWFkVGllcihvcmdJZCwgYXV0aEhlYWRlciwgcmVxdWVzdElkKTtcbiAgICAgIGlmIChyZWFkLnRpZXIpIHJldHVybiByZWFkLnRpZXI7XG4gICAgICBsb2dnZXIud2FybihgUVVPVEFfRkFJTF9PUEVOOiB0aWVyIGxvb2t1cCBmYWlsZWQsIGRlZmF1bHRpbmcgdG8gJHtERUZBVUxUX1RJRVJ9IHRpZXJgLCB7XG4gICAgICAgIG9yZ0lkLCBzdGF0dXNDb2RlOiByZWFkLnN0YXR1c0NvZGUsIHJlYXNvbjogcmVhZC5yZWFzb24sIGRlZmF1bHRUaWVyOiBERUZBVUxUX1RJRVIsXG4gICAgICB9KTtcbiAgICAgIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX29wZW5fdG90YWwnLCB7IG9wZXJhdGlvbjogJ3RpZXInLCByZWFzb246IHJlYWQucmVhc29uLCBxdW90YVR5cGU6ICd0aWVyJyB9KTtcbiAgICAgIHJldHVybiBERUZBVUxUX1RJRVI7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRpZXJTdHJpY3Qob3JnSWQ6IHN0cmluZywgYXV0aEhlYWRlcjogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPFF1b3RhVGllciB8IG51bGw+IHtcbiAgICAgIGNvbnN0IGtub3duID0gY29uc3RhbnRUaWVyRm9yKG9yZ0lkKTtcbiAgICAgIGlmIChrbm93bikgcmV0dXJuIGtub3duO1xuICAgICAgY29uc3QgcmVhZCA9IGF3YWl0IHJlYWRUaWVyKG9yZ0lkLCBhdXRoSGVhZGVyLCByZXF1ZXN0SWQpO1xuICAgICAgaWYgKHJlYWQudGllcikgcmV0dXJuIHJlYWQudGllcjtcbiAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX0NMT1NFRDogdGllciBjb3VsZCBub3QgYmUgY29uZmlybWVkJywgeyBvcmdJZCwgc3RhdHVzQ29kZTogcmVhZC5zdGF0dXNDb2RlLCByZWFzb246IHJlYWQucmVhc29uIH0pO1xuICAgICAgZW1pdENvdW50ZXIoJ3F1b3RhX2ZhaWxfY2xvc2VkX3RvdGFsJywgeyBvcGVyYXRpb246ICd0aWVyJywgcmVhc29uOiByZWFkLnJlYXNvbiwgcXVvdGFUeXBlOiAndGllcicgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFRoZSBzeXN0ZW0gb3JnJ3MgdGllciBpcyBhIENPTlNUQU5ULCBub3QgYSBiaWxsaW5nIGZhY3QsIHNvIGl0IGlzIGFuc3dlcmVkXG4gKiB3aXRob3V0IGEgbG9va3VwLlxuICpcbiAqIFRoZSBwbGF0Zm9ybSdzIG93biBvcmcgaXMgYWx3YXlzIGB1bmxpbWl0ZWRgIChwbGF0Zm9ybS9zcmMvc2VydmljZXMvXG4gKiBhdXRoLXNlcnZpY2UudHMgc2VlZHMgaXQgdGhhdCB3YXkpOiBub3RoaW5nIG1ldGVycyBpdCBhbmQgaXQgaXMgbmV2ZXIgc29sZC5cbiAqIEFza2luZyB0aGUgcXVvdGEgc2VydmljZSB3YXMgdGhlcmVmb3JlIGEgbmV0d29yayBob3Agd2hvc2Ugb25seSBwb3NzaWJsZVxuICogb3V0Y29tZXMgd2VyZSB0aGUgYW5zd2VyIHdlIGFscmVhZHkga25ldywgb3IgYSBmYWlsdXJlLlxuICpcbiAqIFRoZSBmYWlsdXJlIGlzIHdoYXQgbWFkZSB0aGlzIHdvcnRoIGZpeGluZy4gYGdldFRpZXJgIGZhaWxzIE9QRU4gdG9cbiAqIERFRkFVTFRfVElFUiwgd2hpY2ggd2l0aCBiaWxsaW5nIGVuYWJsZWQgaXMgYGRldmVsb3BlcmAg4oCUIHRoZSBtb3N0XG4gKiBjb25zdHJhaW5lZCB0aWVyIOKAlCBhbmQgaXRzIGRvY3VtZW50ZWQgam9iIGlzIGJ1aWxkLXF1ZXVlIHBhcnRpdGlvbmluZy4gQVxuICogYmxpcCBpbiB0aGUgcXVvdGEgc2VydmljZSB0aGVyZWZvcmUgcm91dGVkIHRoZSBTWVNURU0gb3JnJ3MgYnVpbGRzIG9udG8gdGhlXG4gKiBkZXZlbG9wZXIgcXVldWU7IHRoZSBPZmZpY2lhbCBjYXRhbG9nIGxvYWQgaXMgMTE5IG9mIHRoZW0uIGBnZXRUaWVyU3RyaWN0YFxuICogZmFpbHMgQ0xPU0VEIHRvIG51bGwsIHNvIGEgc3dlZXAgdGhhdCBtdXN0IG5vdCBndWVzcyB3b3VsZCBza2lwIHRoZVxuICogcGxhdGZvcm0ncyBvd24gb3JnIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50VGllckZvcihvcmdJZDogc3RyaW5nKTogUXVvdGFUaWVyIHwgbnVsbCB7XG4gIHJldHVybiBvcmdJZC50b0xvd2VyQ2FzZSgpID09PSBTWVNURU1fT1JHX0lEID8gJ3VubGltaXRlZCcgOiBudWxsO1xufVxuXG4vKipcbiAqIEZpcmUtYW5kLWZvcmdldCBxdW90YSBNRVRFUklORyBpbmNyZW1lbnQuXG4gKlxuICogQnVmZmVyZWQ6IHRoZSB1bml0IGpvaW5zIHRoZSBwb2QncyBwZXItKG9yZywgdHlwZSkgYWdncmVnYXRlIGFuZCBpcyBzZW50IHdpdGhcbiAqIHRoZSBuZXh0IGZsdXNoIChgUVVPVEFfSU5DUkVNRU5UX0ZMVVNIX01TYCwgc2VlIHF1b3RhLWluY3JlbWVudC1iYXRjaGVyLnRzKVxuICogYXMgb25lIG1ldGVyZWQgaW5jcmVtZW50IOKAlCBwYXJ0aWFsIGFkbWlzc2lvbiBhZ2FpbnN0IHRoZSBjYXAsIHRoZSBleGNlc3NcbiAqIHJlY29yZGVkIGFzIGBvdmVyc2hvb3RgLiBUaGUgY291bnRlciB0aGVyZWZvcmUgbGFncyBieSBhdCBtb3N0IG9uZSBmbHVzaFxuICogaW50ZXJ2YWwuIE9ubHkgdGhlIHJlcXVlc3QgbWV0ZXIgdXNlcyB0aGlzOyByZXNlcnZhdGlvbnMgc3RheSBzeW5jaHJvbm91cy5cbiAqXG4gKiBBdXRoZW50aWNhdGVzIGFzIHRoZSBjYWxsaW5nIFNFUlZJQ0UgKHtAbGluayBnZXRRdW90YVNlcnZpY2VBdXRoSGVhZGVyfSksIG5ldmVyXG4gKiB3aXRoIHRoZSBlbmQgdXNlcidzIHRva2VuOiBgL3F1b3Rhcy86b3JnSWQvaW5jcmVtZW50YCBpcyBzZXJ2aWNlLXByaW5jaXBhbFxuICogb25seSwgc28gYSBmb3J3YXJkZWQgdXNlciBKV1Qgd2FzIGFsd2F5cyByZWplY3RlZCAoNDAzKSBhbmQgdGhlIG1ldGVyZWQgcXVvdGFcbiAqIChlLmcuIGBhcGlDYWxsc2AsIGFuZCB0aGUgYGFwaV9wYWNrYCBidW5kbGUgcmFpc2luZyBpdCkgbmV2ZXIgbW92ZWQuXG4gKlxuICogQHBhcmFtIHF1b3RhU2VydmljZSAtIFF1b3RhIHNlcnZpY2UgY2xpZW50XG4gKiBAcGFyYW0gb3JnSWQgLSBPcmdhbml6YXRpb24gSUQgd2hvc2UgY291bnRlciBpcyBpbmNyZW1lbnRlZFxuICogQHBhcmFtIHF1b3RhVHlwZSAtIFF1b3RhIHR5cGUgdG8gaW5jcmVtZW50XG4gKiBAcGFyYW0gbG9nV2FybiAtIExvZ2dpbmcgZnVuY3Rpb24gZm9yIHdhcm5pbmdzXG4gKiBAcGFyYW0gYXR0cmlidXRpb24gLSBXaG8gc3BlbnQgdGhlIHVuaXQgKGRlZmF1bHRzIHRvIHRoZSBhbWJpZW50IHJlcXVlc3QgY29udGV4dClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluY3JlbWVudFF1b3RhKCBxdW90YVNlcnZpY2U6IFF1b3RhU2VydmljZSxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcXVvdGFUeXBlOiBRdW90YVR5cGUsXG4gIGxvZ1dhcm46IChtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiB2b2lkLFxuICBhdHRyaWJ1dGlvbj86IFF1b3RhVXNhZ2VBdHRyaWJ1dGlvbixcbik6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGJhdGNoZXIgPSBiYXRjaGVyRm9yKHF1b3RhU2VydmljZSwgYXN5bmMgKG9yZywgdHlwZSwgZ3JvdXBzKSA9PiB7XG4gICAgICBhd2FpdCBxdW90YVNlcnZpY2UuaW5jcmVtZW50TWV0ZXJlZChvcmcsIHR5cGUsIGdldFF1b3RhU2VydmljZUF1dGhIZWFkZXIob3JnKSwgZ3JvdXBzKTtcbiAgICB9KTtcbiAgICBiYXRjaGVyLmFkZChvcmdJZCwgcXVvdGFUeXBlLCByZXNvbHZlQXR0cmlidXRpb24oYXR0cmlidXRpb24pKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nV2FybignUXVvdGEgaW5jcmVtZW50IGZhaWxlZCcsIHsgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgIGVtaXRDb3VudGVyKCdxdW90YV9pbmNyZW1lbnRfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogJ2V4Y2VwdGlvbicsIHF1b3RhVHlwZSB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEF0b21pYyByZXNlcnZlIGhlbHBlciBmb3IgdGhlIFwicmVzZXJ2ZSArIGNvbW1pdCAvIHJvbGxiYWNrXCIgcGF0dGVybi5cbiAqIFVzZSBmb3IgZXhwZW5zaXZlIHJlc291cmNlcyAocGlwZWxpbmVzLCBwbHVnaW5zLCBBSSBjYWxscykgd2hlcmUgdGhlXG4gKiBmaXJlLWFuZC1mb3JnZXQgcG9zdC1ob2MgYGluY3JlbWVudFF1b3RhYCBhbGxvd3MgY29uY3VycmVudCBvdmVyLXNwZW5kLlxuICpcbiAqIFJldHVybnMgdGhlIHN0cnVjdHVyZWQgcmVzdWx0IHNvIHRoZSBjYWxsZXIgY2FuIGRlY2lkZSB3aGV0aGVyIHRvIHJ1blxuICogdGhlIGdhdGVkIGFjdGlvbiBvciA0MjkgdGhlIGNsaWVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVzZXJ2YXRpb24gPSBhd2FpdCByZXNlcnZlUXVvdGEocXVvdGFTZXJ2aWNlLCBvcmdJZCwgJ3BpcGVsaW5lcycsIGF1dGhIZWFkZXIpO1xuICogaWYgKHJlc2VydmF0aW9uLmV4Y2VlZGVkKSByZXR1cm4gc2VuZFF1b3RhUmVzZXJ2ZURlbmllZChyZXMsICdwaXBlbGluZXMnLCByZXNlcnZhdGlvbik7XG4gKiB0cnkge1xuICogYXdhaXQgZG9FeHBlbnNpdmVUaGluZygpO1xuICogfSBjYXRjaCAoZXJyKSB7XG4gKiAvLyBQYXNzIHRoZSByZXNlcnZlZCByZXNldEF0IHNvIGEgcGVyaW9kIHJvbGxvdmVyIGRvZXNuJ3QgZ2V0IGRvdWJsZS1jaGFyZ2VkLlxuICogZGVjcmVtZW50UXVvdGEocXVvdGFTZXJ2aWNlLCBvcmdJZCwgJ3BpcGVsaW5lcycsIGF1dGhIZWFkZXIsIGxvZ1dhcm4sIDEsIHJlc2VydmF0aW9uLnF1b3RhLnJlc2V0QXQpO1xuICogdGhyb3cgZXJyO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNlcnZlUXVvdGEoIHF1b3RhU2VydmljZTogUXVvdGFTZXJ2aWNlLFxuICBvcmdJZDogc3RyaW5nLFxuICBxdW90YVR5cGU6IFF1b3RhVHlwZSxcbiAgYXV0aEhlYWRlcjogc3RyaW5nLFxuICBhbW91bnQ6IG51bWJlciA9IDEsXG4gIGF0dHJpYnV0aW9uPzogUXVvdGFVc2FnZUF0dHJpYnV0aW9uLFxuKTogUHJvbWlzZTxRdW90YVJlc2VydmVSZXN1bHQ+IHtcbiAgcmV0dXJuIHF1b3RhU2VydmljZS5yZXNlcnZlKG9yZ0lkLCBxdW90YVR5cGUsIGF1dGhIZWFkZXIsIGFtb3VudCwgYXR0cmlidXRpb24pO1xufVxuXG4vKiogU2Vjb25kcyBhIGNsaWVudCBzaG91bGQgd2FpdCBiZWZvcmUgcmV0cnlpbmcgd2hlbiBxdW90YSBjb3VsZG4ndCBiZSBjb25maXJtZWQuICovXG5jb25zdCBRVU9UQV9VTkFWQUlMQUJMRV9SRVRSWV9BRlRFUl9TRUNPTkRTID0gNTtcblxuLyoqXG4gKiBBbnN3ZXIgYSBERU5JRUQgcmVzZXJ2YXRpb24gKGByZXNlcnZhdGlvbi5leGNlZWRlZCA9PT0gdHJ1ZWApLlxuICpcbiAqIC0gYHVuYXZhaWxhYmxlYCAodGhlIHF1b3RhIHNlcnZpY2UgY291bGRuJ3QgY29uZmlybSB0aGUgc2xvdCkg4oaSICoqNTAzKipcbiAqICAgYFNFUlZJQ0VfVU5BVkFJTEFCTEVgIHdpdGggYSBzaG9ydCBgUmV0cnktQWZ0ZXJgOiB0aGUgb3JnIGlzIG5vdCBvdmVyIGl0c1xuICogICBsaW1pdCwgc28gYSA0MjkgXCJxdW90YSBleGNlZWRlZFwiIHdvdWxkIHNlbmQgdXNlcnMgdG8gdXBncmFkZSBmb3IgYW4gb3V0YWdlLlxuICogLSBvdGhlcndpc2Ug4oaSIHRoZSBzdGFuZGFyZCA0MjkgYFFVT1RBX0VYQ0VFREVEYCB3aXRoIHRoZSBYLVF1b3RhLSogaGVhZGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRRdW90YVJlc2VydmVEZW5pZWQocmVzOiBSZXNwb25zZSwgcXVvdGFUeXBlOiBRdW90YVR5cGUsIHJlc2VydmF0aW9uOiBRdW90YVJlc2VydmVSZXN1bHQpOiB2b2lkIHtcbiAgaWYgKHJlc2VydmF0aW9uLmNvZGUpIHtcbiAgICAvLyBBbiBvcHRpb25hbCBvcmcgQUkgY29udHJvbCAocGVyLW1lbWJlciBzaGFyZSAvIHRva2VuIGJ1ZGdldCk6IGl0cyBvd25cbiAgICAvLyBjb2RlLCBzbyB0aGUgY2xpZW50IGNhbiBzYXkgXCJ5b3VyIHNoYXJlXCIgcmF0aGVyIHRoYW4gXCJ0aGUgb3JnIGlzIG91dFwiLlxuICAgIGNvbnN0IHJlc2V0QXQgPSByZXNlcnZhdGlvbi5xdW90YS5yZXNldEF0O1xuICAgIGlmICghcmVzLmhlYWRlcnNTZW50ICYmIHJlc2V0QXQpIHtcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ1JldHJ5LUFmdGVyJywgTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChuZXcgRGF0ZShyZXNldEF0KS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpKSAvIDEwMDApKSk7XG4gICAgfVxuICAgIGVtaXRDb3VudGVyKCdxdW90YV9kZW5pZWRfdG90YWwnLCB7IHR5cGU6IHF1b3RhVHlwZSB9KTtcbiAgICBzZW5kRXJyb3IoXG4gICAgICByZXMsXG4gICAgICA0MjksXG4gICAgICByZXNlcnZhdGlvbi5tZXNzYWdlID8/IGBZb3VyIG9yZ2FuaXphdGlvbidzICR7cXVvdGFUeXBlfSBsaW1pdCBmb3IgdGhpcyBwZXJpb2QgaGFzIGJlZW4gcmVhY2hlZC5gLFxuICAgICAgcmVzZXJ2YXRpb24uY29kZSxcbiAgICAgIHsgcXVvdGE6IHJlc2VydmF0aW9uLnF1b3RhLCBxdW90YVR5cGUsIC4uLihyZXNldEF0ID8geyByZXNldEF0IH0gOiB7fSkgfSxcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocmVzZXJ2YXRpb24udW5hdmFpbGFibGUpIHtcbiAgICBpZiAoIXJlcy5oZWFkZXJzU2VudCkgcmVzLnNldEhlYWRlcignUmV0cnktQWZ0ZXInLCBRVU9UQV9VTkFWQUlMQUJMRV9SRVRSWV9BRlRFUl9TRUNPTkRTKTtcbiAgICBzZW5kRXJyb3IoXG4gICAgICByZXMsXG4gICAgICA1MDMsXG4gICAgICBgVW5hYmxlIHRvIGNvbmZpcm0gJHtxdW90YVR5cGV9IHF1b3RhIHJpZ2h0IG5vdy4gUGxlYXNlIHRyeSBhZ2FpbiBzaG9ydGx5LmAsXG4gICAgICBFcnJvckNvZGUuU0VSVklDRV9VTkFWQUlMQUJMRSxcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuICBzZW5kUXVvdGFFeGNlZWRlZChyZXMsIHF1b3RhVHlwZSwgcmVzZXJ2YXRpb24ucXVvdGEsIHJlc2VydmF0aW9uLnF1b3RhLnJlc2V0QXQpO1xufVxuXG4vKipcbiAqIEZpcmUtYW5kLWZvcmdldCByb2xsYmFjayBmb3IgYSBwcmV2aW91c2x5IHJlc2VydmVkIHF1b3RhIHNsb3QuXG4gKiBMb2dzIG9uIGZhaWx1cmUgYnV0IG5ldmVyIHRocm93cyAgdGhlIGFjdGlvbiB0aGF0IG5lZWRlZCB0aGUgcm9sbGJhY2tcbiAqIGhhcyBhbHJlYWR5IGZhaWxlZCwgbm8gcG9pbnQgY29tcG91bmRpbmcgdGhlIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjcmVtZW50UXVvdGEoIHF1b3RhU2VydmljZTogUXVvdGFTZXJ2aWNlLFxuICBvcmdJZDogc3RyaW5nLFxuICBxdW90YVR5cGU6IFF1b3RhVHlwZSxcbiAgYXV0aEhlYWRlcjogc3RyaW5nLFxuICBsb2dXYXJuOiAobWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gdm9pZCxcbiAgYW1vdW50OiBudW1iZXIgPSAxLFxuICByZXNldEF0U25hcHNob3Q/OiBzdHJpbmcsXG4gIGF0dHJpYnV0aW9uPzogUXVvdGFVc2FnZUF0dHJpYnV0aW9uLFxuKTogdm9pZCB7XG4gIGNvbnN0IHNlbnQgPSBhdHRyaWJ1dGlvblxuICAgID8gcXVvdGFTZXJ2aWNlLmRlY3JlbWVudChvcmdJZCwgcXVvdGFUeXBlLCBhdXRoSGVhZGVyLCBhbW91bnQsIHJlc2V0QXRTbmFwc2hvdCwgYXR0cmlidXRpb24pXG4gICAgOiBxdW90YVNlcnZpY2UuZGVjcmVtZW50KG9yZ0lkLCBxdW90YVR5cGUsIGF1dGhIZWFkZXIsIGFtb3VudCwgcmVzZXRBdFNuYXBzaG90KTtcbiAgc2VudC5jYXRjaCgoZXJyOiB1bmtub3duKSA9PlxuICAgIGxvZ1dhcm4oJ1F1b3RhIHJvbGxiYWNrIGZhaWxlZCcsIHsgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pLFxuICApO1xufVxuIl19
|
|
@@ -26,10 +26,8 @@
|
|
|
26
26
|
*/
|
|
27
27
|
import { createComplianceClient } from './compliance-client.js';
|
|
28
28
|
import { type PluginScanFinding, type PluginScanFlag } from '../types/plugin-scan.js';
|
|
29
|
+
import { type VulnSeverity } from '../types/wire-vocabulary.js';
|
|
29
30
|
import { type PluginImageRow } from '../utils/plugin-compliance.js';
|
|
30
|
-
/** How loud a warning is, quietest first. */
|
|
31
|
-
export declare const VULN_SEVERITIES: readonly ['info', 'warning', 'error', 'critical'];
|
|
32
|
-
export type VulnSeverity = typeof VULN_SEVERITIES[number];
|
|
33
31
|
/** The louder of two severities. */
|
|
34
32
|
export declare function maxSeverity(a: VulnSeverity, b: VulnSeverity): VulnSeverity;
|
|
35
33
|
/** Whether `s` is at least `floor`. */
|
|
@@ -30,11 +30,10 @@ import { createComplianceClient } from './compliance-client.js';
|
|
|
30
30
|
import { getServiceAuthHeader } from '../middleware/service-tokens.js';
|
|
31
31
|
import { isSystemOrgId } from '../middleware/system-org.js';
|
|
32
32
|
import { applyVulnWaivers, asScanFlag, describeFindings, failOnLabel, isGatedFinding, pluginVulnGateKev, scanFindingKey, summaryContradicts, } from '../types/plugin-scan.js';
|
|
33
|
+
import { VULN_SEVERITIES } from '../types/wire-vocabulary.js';
|
|
33
34
|
import { envInt } from '../utils/env.js';
|
|
34
35
|
import { derivePluginImageCompliance, pluginRunsOwnImage } from '../utils/plugin-compliance.js';
|
|
35
36
|
import { errorMessage } from '../utils/response.js';
|
|
36
|
-
/** How loud a warning is, quietest first. */
|
|
37
|
-
export const VULN_SEVERITIES = ['info', 'warning', 'error', 'critical'];
|
|
38
37
|
/** The louder of two severities. */
|
|
39
38
|
export function maxSeverity(a, b) {
|
|
40
39
|
return VULN_SEVERITIES.indexOf(a) >= VULN_SEVERITIES.indexOf(b) ? a : b;
|
|
@@ -265,4 +264,4 @@ async function complianceVulnWarnings(orgId, record) {
|
|
|
265
264
|
return [{ code: 'COMPLIANCE_UNAVAILABLE', severity: 'info', message: `Your organization's plugin vulnerability rules could not be checked for ${record.name}@${record.version} (${errorMessage(err)}).` }];
|
|
266
265
|
}
|
|
267
266
|
}
|
|
268
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi12dWxuLXBvbGljeS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3ZlcnNpb24tdnVsbi1wb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUVILE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUNMLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxrQkFBa0IsR0FFbkksTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLGtCQUFrQixFQUF3RCxNQUFNLCtCQUErQixDQUFDO0FBQ3RKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCw2Q0FBNkM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFHakYsb0NBQW9DO0FBQ3BDLE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBZSxFQUFFLENBQWU7SUFDMUQsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCx1Q0FBdUM7QUFDdkMsTUFBTSxVQUFVLGVBQWUsQ0FB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Q0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZILENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLDJFQUEyRSxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdNLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVEhFIHZ1bG5lcmFiaWxpdHkgYXNzZXNzbWVudCBvZiBvbmUgcmVzb2x2ZWQgcGx1Z2luIHZlcnNpb24sIGZvciBvbmUgb3JnIChhbmQsXG4gKiBvcHRpb25hbGx5LCBvbmUgcGlwZWxpbmUncyByaXNrIGFjY2VwdGFuY2UpLiBPbmUgZnVuY3Rpb24sIHRocmVlIGNhbGxlcnM6XG4gKiBgL3BsdWdpbnMvbG9va3VwYCAod2hhdCBzeW50aCBwaW5zKSwgYC9wbHVnaW5zL3J1bnRpbWUtY2hlY2tgICh3aGF0IGEgcnVubmluZ1xuICogcGlwZWxpbmUgaXMgYWJvdXQgdG8gZXhlY3V0ZSkgYW5kIHRoZSBwaXBlbGluZSBzZXJ2aWNlJ3Mgc2F2ZS10aW1lIGNvbnRyYWN0XG4gKiBjaGVjay4gVGhyZWUgY29waWVzIG9mIHRoZXNlIHJ1bGVzIGRyaWZ0ZWQgb25jZSBhbHJlYWR5LlxuICpcbiAqIFZ1bG5lcmFiaWxpdHkgc3RhdGUgTkVWRVIgcmVmdXNlcyBhIHBpcGVsaW5lIOKAlCBub3QgaXRzIHNhdmUsIGl0cyBzeW50aCwgaXRzXG4gKiBkZXBsb3kgb3IgaXRzIHJ1bi4gV2hhdCBpdCBwcm9kdWNlcyBpcyBTRVZFUklUWS1HUkFERUQgd2FybmluZ3MgKGFuZCwgZnJvbSB0aGVcbiAqIGNhbGxlcnMsIG5vdGlmaWNhdGlvbnMgdG8gdGhlIHBpcGVsaW5lJ3Mgb3duZXJzKS4gVGhlIGdyYWRlczpcbiAqXG4gKiAgIGNyaXRpY2FsIOKAlCBhIGZpbmRpbmcgb24gdGhlIENJU0EgS25vd24gRXhwbG9pdGVkIFZ1bG5lcmFiaWxpdGllcyBsaXN0XG4gKiAgIGVycm9yICAgIOKAlCB0aGUgdmVyc2lvbiBpcyBGTEFHR0VEIChnYXRlZCBDcml0aWNhbHMgb3ZlciB0aGUgcGxhdGZvcm0gZmxvb3IpLFxuICogICAgICAgICAgICAgIGl0IGhhcyBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzLCBvciBhbiBvcmcgY29tcGxpYW5jZSBydWxlIG9uIHRoZVxuICogICAgICAgICAgICAgIHZ1bG5lcmFiaWxpdHkgYXR0cmlidXRlcyBpcyBpbiBCTE9DSyBtb2RlIGFuZCBmYWlsc1xuICogICB3YXJuaW5nICDigJQgZml4YWJsZSBIaWdoIGZpbmRpbmdzIG92ZXIgdGhlIG9yZydzIGB3YXJuRml4YWJsZUhpZ2hgLCBhIHZlcnNpb25cbiAqICAgICAgICAgICAgICBuZXZlciBzY2FubmVkLCBhIHNjYW4gb2xkZXIgdGhhbiBgUExVR0lOX1NDQU5fU1RBTEVfSE9VUlNgLCBvciBhXG4gKiAgICAgICAgICAgICAgY29tcGxpYW5jZSBydWxlIGluIFdBUk4gbW9kZVxuICogICBpbmZvICAgICDigJQgd2hhdCBhIHJlYWRlciBtYXkgd2FudCB0byBrbm93IGJ1dCBuZWVkIG5vdCBhY3Qgb25cbiAqXG4gKiBBIFBJUEVMSU5FJ3MgYWN0aXZlIHJpc2sgYWNjZXB0YW5jZSAoYHBsdWdpbl92dWxuX2V4cG9zdXJlYCwgdHJpYWdlZCBgYWNjZXB0ZWRgXG4gKiB3aXRoIGEgcmVhc29uIGFuZCBhbiBleHBpcnkpIGRvd25ncmFkZXMgdGhlIHdhcm5pbmdzIGFib3V0IHRoZSBmaW5kaW5ncyBpdFxuICogQUNDRVBURUQgdG8gYGluZm9gIChcImFjY2VwdGVkIHVudGlsIOKAplwiKSDigJQgbmV2ZXIgb25lIGFib3V0IGEgZmluZGluZyB0aGF0XG4gKiBhcHBlYXJlZCBzaW5jZSwgbmV2ZXIgYSBLRVYgb25lIHVubGVzcyB0aGUgYWNjZXB0YW5jZSBzYWlkIGBrZXY6IHRydWVgLCBhbmRcbiAqIG5ldmVyIHRoZSBzY2FuLWZyZXNobmVzcyBvciBjb21wbGlhbmNlIHdhcm5pbmdzIChuZWl0aGVyIGlzIGFib3V0IGEgZmluZGluZykuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ29tcGxpYW5jZUNsaWVudCwgdHlwZSBDb21wbGlhbmNlVmlvbGF0aW9uIH0gZnJvbSAnLi9jb21wbGlhbmNlLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBnZXRTZXJ2aWNlQXV0aEhlYWRlciB9IGZyb20gJy4uL21pZGRsZXdhcmUvc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHsgaXNTeXN0ZW1PcmdJZCB9IGZyb20gJy4uL21pZGRsZXdhcmUvc3lzdGVtLW9yZy5qcyc7XG5pbXBvcnQge1xuICBhcHBseVZ1bG5XYWl2ZXJzLCBhc1NjYW5GbGFnLCBkZXNjcmliZUZpbmRpbmdzLCBmYWlsT25MYWJlbCwgaXNHYXRlZEZpbmRpbmcsIHBsdWdpblZ1bG5HYXRlS2V2LCBzY2FuRmluZGluZ0tleSwgc3VtbWFyeUNvbnRyYWRpY3RzLFxuICB0eXBlIFBsdWdpblNjYW5GaW5kaW5nLCB0eXBlIFBsdWdpblNjYW5GbGFnLFxufSBmcm9tICcuLi90eXBlcy9wbHVnaW4tc2Nhbi5qcyc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgZGVyaXZlUGx1Z2luSW1hZ2VDb21wbGlhbmNlLCBwbHVnaW5SdW5zT3duSW1hZ2UsIHR5cGUgUGx1Z2luQ29tcGxpYW5jZUF0dHJpYnV0ZXMsIHR5cGUgUGx1Z2luSW1hZ2VSb3cgfSBmcm9tICcuLi91dGlscy9wbHVnaW4tY29tcGxpYW5jZS5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbi8qKiBIb3cgbG91ZCBhIHdhcm5pbmcgaXMsIHF1aWV0ZXN0IGZpcnN0LiAqL1xuZXhwb3J0IGNvbnN0IFZVTE5fU0VWRVJJVElFUyA9IFsnaW5mbycsICd3YXJuaW5nJywgJ2Vycm9yJywgJ2NyaXRpY2FsJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBWdWxuU2V2ZXJpdHkgPSB0eXBlb2YgVlVMTl9TRVZFUklUSUVTW251bWJlcl07XG5cbi8qKiBUaGUgbG91ZGVyIG9mIHR3byBzZXZlcml0aWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1heFNldmVyaXR5KGE6IFZ1bG5TZXZlcml0eSwgYjogVnVsblNldmVyaXR5KTogVnVsblNldmVyaXR5IHtcbiAgcmV0dXJuIFZVTE5fU0VWRVJJVElFUy5pbmRleE9mKGEpID49IFZVTE5fU0VWRVJJVElFUy5pbmRleE9mKGIpID8gYSA6IGI7XG59XG5cbi8qKiBXaGV0aGVyIGBzYCBpcyBhdCBsZWFzdCBgZmxvb3JgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldmVyaXR5QXRMZWFzdChzOiBWdWxuU2V2ZXJpdHksIGZsb29yOiBWdWxuU2V2ZXJpdHkpOiBib29sZWFuIHtcbiAgcmV0dXJuIFZVTE5fU0VWRVJJVElFUy5pbmRleE9mKHMpID49IFZVTE5fU0VWRVJJVElFUy5pbmRleE9mKGZsb29yKTtcbn1cblxuLyoqIGBQTFVHSU5fU0NBTl9TVEFMRV9IT1VSU2AgKGRlZmF1bHQgNzIpOiBhIHNjYW4gb2xkZXIgdGhhbiB0aGlzIGlzIHN0YWxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjYW5TdGFsZUhvdXJzKCk6IG51bWJlciB7XG4gIHJldHVybiBlbnZJbnQoJ1BMVUdJTl9TQ0FOX1NUQUxFX0hPVVJTJywgNzIsIHsgbWluOiAxIH0pO1xufVxuXG4vKiogVGhlIHNjYW4tcmVsYXRlZCBmaWVsZHMgb2YgYSByZXNvbHZlZCByZWNvcmQgKGFuIG9yZyByb3cgb3IgYSBsaXN0ZWQgcmVjb3JkKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lZFJlY29yZCBleHRlbmRzIFBsdWdpbkltYWdlUm93IHtcbiAgbmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgb3JnIHRoYXQgT1dOUyB0aGlzIHBsdWdpbi9saXN0aW5nIOKAlCBOT1QgdGhlIGNvbnN1bWluZyBvcmcgb25cbiAgICoge0BsaW5rIFZlcnNpb25WdWxuSW5wdXR9LCB3aGljaCBpcyB3aG9ldmVyIGlzIGFza2luZy4gVnVsbmVyYWJpbGl0eSB3YWl2ZXJzXG4gICAqIGFyZSB0aGUgb3BlcmF0b3IncyBhbmQgYXJlIHN5c3RlbS1vcmctb25seSwgc28gd2l0aG91dCB0aGlzIHRoZSBtb2R1bGVcbiAgICogY291bGQgbm90IGFwcGx5IHRoZW0gYXQgYWxsOiBhIENyaXRpY2FsIHRoZSBvcGVyYXRvciBoYWQgd2FpdmVkIHN0aWxsXG4gICAqIHJlcG9ydGVkIGFzIGFuIGBlcnJvcmAgdG8gZXZlcnkgdGVuYW50IHJlc29sdmluZyB0aGUgdmVyc2lvbiwgbG9uZyBhZnRlciBpdFxuICAgKiBzdG9wcGVkIGJsb2NraW5nIHRoZSBidWlsZCBhbmQgdGhlIGxpc3RpbmcuIE9wdGlvbmFsIGJlY2F1c2UgbW9zdCBjYWxsZXJzXG4gICAqIGhhdmUgbm8gb3duZXIgdG8gaGFuZCAoYSB0ZW5hbnQncyBvd24gcm93IGlzIGl0cyBvd24gb3duZXIpIGFuZCBhYnNlbnQgbWVhbnNcbiAgICogXCJubyB3YWl2ZXIgYXBwbGllc1wiLCB3aGljaCBpcyB0aGUgc2FmZSBkaXJlY3Rpb24uXG4gICAqL1xuICBvd25lck9yZ0lkPzogc3RyaW5nIHwgbnVsbDtcbiAgc2Nhbm5lZEF0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIHNjYW5TdW1tYXJ5PzogdW5rbm93bjtcbiAgc2NhbkZsYWdnZWRBdD86IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICBzY2FuRmxhZz86IHVua25vd247XG4gIHZ1bG5IaWdoRml4YWJsZT86IHVua25vd247XG59XG5cbmNvbnN0IHRvRGF0ZSA9ICh2OiB1bmtub3duKTogRGF0ZSB8IG51bGwgPT4ge1xuICBpZiAoIXYpIHJldHVybiBudWxsO1xuICBjb25zdCBkID0gdiBpbnN0YW5jZW9mIERhdGUgPyB2IDogbmV3IERhdGUoU3RyaW5nKHYpKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihkLmdldFRpbWUoKSkgPyBudWxsIDogZDtcbn07XG5cbmNvbnN0IHN1bW1hcnlPZiA9IChyZWNvcmQ6IFBpY2s8U2Nhbm5lZFJlY29yZCwgJ3NjYW5TdW1tYXJ5Jz4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPT5cbiAgKHJlY29yZC5zY2FuU3VtbWFyeSAmJiB0eXBlb2YgcmVjb3JkLnNjYW5TdW1tYXJ5ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZWNvcmQuc2NhblN1bW1hcnkpXG4gICAgPyByZWNvcmQuc2NhblN1bW1hcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gOiBudWxsKTtcblxuLyoqXG4gKiBXaGVuIHRoZSB2ZXJzaW9uIHdhcyBsYXN0IHNjYW5uZWQ6IHRoZSBsYXRlciBvZiB0aGUgYnVpbGQtdGltZSBgc2Nhbm5lZEF0YCBhbmRcbiAqIHRoZSBuaWdodGx5IHJlc2NhbidzIGBzY2FuX3N1bW1hcnkuc2Nhbm5lZEF0YC4gTnVsbCA9IG5ldmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGFzdFNjYW5uZWRBdChyZWNvcmQ6IFBpY2s8U2Nhbm5lZFJlY29yZCwgJ3NjYW5uZWRBdCcgfCAnc2NhblN1bW1hcnknPik6IERhdGUgfCBudWxsIHtcbiAgY29uc3QgYnVpbGQgPSB0b0RhdGUocmVjb3JkLnNjYW5uZWRBdCk7XG4gIGNvbnN0IHN1bW1hcnkgPSB0b0RhdGUoc3VtbWFyeU9mKHJlY29yZCk/LnNjYW5uZWRBdCk7XG4gIGlmICghYnVpbGQpIHJldHVybiBzdW1tYXJ5O1xuICBpZiAoIXN1bW1hcnkpIHJldHVybiBidWlsZDtcbiAgcmV0dXJuIHN1bW1hcnkgPiBidWlsZCA/IHN1bW1hcnkgOiBidWlsZDtcbn1cblxuLyoqIFdoZXRoZXIgdGhlIHJlY29yZCBydW5zIGEgQlVJTFQgaW1hZ2Ugb2YgaXRzIG93biDigJQgdGhlIG9ubHkgdGhpbmcgYSBzY2FuIGFwcGxpZXMgdG8uICovXG5mdW5jdGlvbiBoYXNJbWFnZShyZWNvcmQ6IFNjYW5uZWRSZWNvcmQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBsdWdpblJ1bnNPd25JbWFnZShyZWNvcmQpICYmIHR5cGVvZiByZWNvcmQuaW1hZ2VEaWdlc3QgPT09ICdzdHJpbmcnICYmIHJlY29yZC5pbWFnZURpZ2VzdC5sZW5ndGggPiAwO1xufVxuXG4vKiogRnJlc2huZXNzIG9mIGEgdmVyc2lvbidzIHNjYW46IGBub25lYCAobm8gaW1hZ2UgdG8gc2NhbiksIGB1bnNjYW5uZWRgLCBgc3RhbGVgIG9yIGBmcmVzaGAuICovXG5leHBvcnQgZnVuY3Rpb24gc2NhbkZyZXNobmVzcyhyZWNvcmQ6IFNjYW5uZWRSZWNvcmQsIG5vdyA9IG5ldyBEYXRlKCkpOiB7IHN0YXRlOiAnbm9uZScgfCAndW5zY2FubmVkJyB8ICdzdGFsZScgfCAnZnJlc2gnOyBzY2FubmVkQXQ6IERhdGUgfCBudWxsIH0ge1xuICBpZiAoIWhhc0ltYWdlKHJlY29yZCkpIHJldHVybiB7IHN0YXRlOiAnbm9uZScsIHNjYW5uZWRBdDogbnVsbCB9O1xuICBjb25zdCBhdCA9IGxhc3RTY2FubmVkQXQocmVjb3JkKTtcbiAgaWYgKCFhdCkgcmV0dXJuIHsgc3RhdGU6ICd1bnNjYW5uZWQnLCBzY2FubmVkQXQ6IG51bGwgfTtcbiAgcmV0dXJuIHsgc3RhdGU6IG5vdy5nZXRUaW1lKCkgLSBhdC5nZXRUaW1lKCkgPiBzY2FuU3RhbGVIb3VycygpICogM182MDBfMDAwID8gJ3N0YWxlJyA6ICdmcmVzaCcsIHNjYW5uZWRBdDogYXQgfTtcbn1cblxuLyoqIE9uZSBzZXZlcml0eS1ncmFkZWQgdnVsbmVyYWJpbGl0eSB3YXJuaW5nLiAqL1xuZXhwb3J0IHR5cGUgVnVsbldhcm5pbmcgPVxuICB8IHtcbiAgICBjb2RlOiAnVlVMTl9LRVYnIHwgJ1ZVTE5fRkxBR0dFRCcgfCAnVlVMTl9DUklUSUNBTF9GSVhBQkxFJyB8ICdWVUxOX0hJR0hfRklYQUJMRSc7XG4gICAgc2V2ZXJpdHk6IFZ1bG5TZXZlcml0eTtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgZmluZGluZ3M6IFBsdWdpblNjYW5GaW5kaW5nW107XG4gICAgc3VnZ2VzdGVkVmVyc2lvbj86IHN0cmluZztcbiAgICAvKiogYFZVTE5fRkxBR0dFRGAgY2FycmllcyB0aGUgZmxhZydzIGNvdW50cyAodGhlIHNoYXBlIHRoZSByZXNjYW4tZmxhZyB3YXJuaW5nIGFsd2F5cyBoYWQpLiAqL1xuICAgIHBsdWdpbj86IHN0cmluZztcbiAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICAgIC8qKiBUaGUgZmxhZydzIGdhdGVkIGNvdW50IChmaW5kaW5ncyBhdCBvciBhYm92ZSBpdHMgYGZhaWxPbmApLiAqL1xuICAgIGdhdGVkPzogbnVtYmVyO1xuICAgIGhpZ2g/OiBudW1iZXI7XG4gIH1cbiAgfCB7IGNvZGU6ICdWVUxOX0FDQ0VQVEVEJzsgc2V2ZXJpdHk6ICdpbmZvJzsgbWVzc2FnZTogc3RyaW5nOyBmaW5kaW5nczogc3RyaW5nW107IGFjY2VwdGVkVW50aWw6IHN0cmluZyB8IG51bGw7IGtldjogYm9vbGVhbjsgY292ZXJzOiBzdHJpbmcgfVxuICB8IHsgY29kZTogJ1VOU0NBTk5FRCc7IHNldmVyaXR5OiBWdWxuU2V2ZXJpdHk7IG1lc3NhZ2U6IHN0cmluZyB9XG4gIHwgeyBjb2RlOiAnU0NBTl9TVEFMRSc7IHNldmVyaXR5OiBWdWxuU2V2ZXJpdHk7IG1lc3NhZ2U6IHN0cmluZzsgc2Nhbm5lZEF0OiBzdHJpbmc7IHN0YWxlQWZ0ZXJIb3VyczogbnVtYmVyIH1cbiAgfCB7IGNvZGU6ICdDT01QTElBTkNFX1ZVTE5fUlVMRSc7IHNldmVyaXR5OiBWdWxuU2V2ZXJpdHk7IG1lc3NhZ2U6IHN0cmluZzsgcnVsZUlkOiBzdHJpbmc7IHJ1bGVOYW1lOiBzdHJpbmc7IGZpZWxkOiBzdHJpbmc7IG1vZGU6ICdibG9jaycgfCAnd2FybicgfVxuICB8IHsgY29kZTogJ0NPTVBMSUFOQ0VfVU5BVkFJTEFCTEUnOyBzZXZlcml0eTogVnVsblNldmVyaXR5OyBtZXNzYWdlOiBzdHJpbmcgfTtcblxuLyoqIGBVTlNDQU5ORURgIC8gYFNDQU5fU1RBTEVgIGZvciBhIHJlc29sdmVkIHZlcnNpb24gKGVtcHR5IGZvciBhIGZyZXNoIHNjYW4gb3IgYW4gaW1hZ2UtbGVzcyBwbHVnaW4pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjYW5XYXJuaW5ncyhyZWNvcmQ6IFNjYW5uZWRSZWNvcmQsIG5vdyA9IG5ldyBEYXRlKCkpOiBWdWxuV2FybmluZ1tdIHtcbiAgY29uc3QgcmVmID0gYCR7cmVjb3JkLm5hbWV9QCR7cmVjb3JkLnZlcnNpb259YDtcbiAgY29uc3QgZiA9IHNjYW5GcmVzaG5lc3MocmVjb3JkLCBub3cpO1xuICBpZiAoZi5zdGF0ZSA9PT0gJ3Vuc2Nhbm5lZCcpIHtcbiAgICByZXR1cm4gW3sgY29kZTogJ1VOU0NBTk5FRCcsIHNldmVyaXR5OiAnd2FybmluZycsIG1lc3NhZ2U6IGBQbHVnaW4gJHtyZWZ9IGhhcyBuZXZlciBiZWVuIHNjYW5uZWQgZm9yIHZ1bG5lcmFiaWxpdGllczsgbm90aGluZyBpcyBrbm93biBhYm91dCB3aGF0IGl0cyBpbWFnZSBjb250YWlucy5gIH1dO1xuICB9XG4gIGlmIChmLnN0YXRlID09PSAnc3RhbGUnKSB7XG4gICAgY29uc3QgaG91cnMgPSBzY2FuU3RhbGVIb3VycygpO1xuICAgIHJldHVybiBbe1xuICAgICAgY29kZTogJ1NDQU5fU1RBTEUnLFxuICAgICAgc2V2ZXJpdHk6ICd3YXJuaW5nJyxcbiAgICAgIG1lc3NhZ2U6IGBQbHVnaW4gJHtyZWZ9IHdhcyBsYXN0IHNjYW5uZWQgJHtmLnNjYW5uZWRBdCEudG9JU09TdHJpbmcoKX0sIG1vcmUgdGhhbiAke2hvdXJzfWggYWdvOyBmaW5kaW5ncyBwdWJsaXNoZWQgc2luY2UgYXJlIG5vdCByZWZsZWN0ZWQuYCxcbiAgICAgIHNjYW5uZWRBdDogZi5zY2FubmVkQXQhLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGFsZUFmdGVySG91cnM6IGhvdXJzLFxuICAgIH1dO1xuICB9XG4gIHJldHVybiBbXTtcbn1cblxuLyoqIFRoZSB2dWxuZXJhYmlsaXR5IGZpZWxkcyBvZiBhbiBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgKHBpcGVsaW5lLWRhdGEncyBgQ29uc3VtcHRpb25Qb2xpY3lgIHNhdGlzZmllcyBpdCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFZ1bG5Db25zdW1wdGlvblBvbGljeSB7XG4gIC8qKiBGaXhhYmxlIEhpZ2ggZmluZGluZ3MgYWJvdmUgdGhpcyBtYW55IHJhaXNlIGEgYHdhcm5pbmdgOyBudWxsID0gbmV2ZXIgKHRoZXkgc3RheSBgaW5mb2ApLiAqL1xuICB3YXJuRml4YWJsZUhpZ2g6IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICogQSBwaXBlbGluZSdzIEFDVElWRSByaXNrIGFjY2VwdGFuY2Ugb2Ygb25lIHZlcnNpb24gLyBpbWFnZTogdGhlIGZpbmRpbmcga2V5c1xuICogKHtAbGluayBzY2FuRmluZGluZ0tleX0pIGl0IGFjY2VwdGVkLCB3aGV0aGVyIGl0IGFjY2VwdGVkIEtFViBmaW5kaW5ncywgYW5kXG4gKiB1bnRpbCB3aGVuLiBCdWlsdCBieSBwaXBlbGluZS1kYXRhIGZyb20gYHBsdWdpbl92dWxuX2V4cG9zdXJlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuQWNjZXB0YW5jZSB7XG4gIGZpbmRpbmdLZXlzOiByZWFkb25seSBzdHJpbmdbXTtcbiAga2V2OiBib29sZWFuO1xuICBhY2NlcHRlZFVudGlsOiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIFdoYXQgYSB2ZXJzaW9uJ3Mgc3RvcmVkIHNjYW4gc2F5cywgbm9ybWFsaXplZCBmcm9tIGBzY2FuX3N1bW1hcnlgIChmb3IgaXRzIGltYWdlKSBhbmQgYHNjYW5fZmxhZ2AuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25TY2FuRmFjdHMge1xuICBmbGFnZ2VkOiBib29sZWFuO1xuICBmbGFnOiBQbHVnaW5TY2FuRmxhZyB8IG51bGw7XG4gIC8qKiBGaXhhYmxlIENyaXRpY2FsIC8gSGlnaCBmaW5kaW5ncyAobnVsbCA9IG5vdCBrbm93bikuICovXG4gIGNyaXRpY2FsRml4YWJsZTogbnVtYmVyIHwgbnVsbDtcbiAgaGlnaEZpeGFibGU6IG51bWJlciB8IG51bGw7XG4gIC8qKiBUb3RhbHMgaW5jbHVkaW5nIHVuZml4YWJsZSBmaW5kaW5ncyAobnVsbCA9IG5vdCBrbm93bikuICovXG4gIGNyaXRpY2FsOiBudW1iZXIgfCBudWxsO1xuICBoaWdoOiBudW1iZXIgfCBudWxsO1xuICAvKiogS0VWLWxpc3RlZCBDcml0aWNhbCArIEhpZ2ggZmluZGluZ3MuICovXG4gIGtldjogbnVtYmVyO1xuICAvKiogRXZlcnkgQ3JpdGljYWwvSGlnaCBmaW5kaW5nIHRoZSBzY2FuIGl0ZW1pemVkICh0aGUgc3VtbWFyeSdzIGxpc3QsIGVsc2UgdGhlIGZsYWcncykuICovXG4gIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xuICAvKiogVGhlIHN1bW1hcnkgY3V0IGl0cyBmaW5kaW5ncyBsaXN0IOKAlCBhIHN1YnNldCBjaGVjayBvdmVyIGl0IGNhbm5vdCBiZSB0cnVzdGVkLiAqL1xuICB0cnVuY2F0ZWQ6IGJvb2xlYW47XG4gIHNjYW5uZWRBdDogRGF0ZSB8IG51bGw7XG59XG5cbi8qKiBUaGUgbm9ybWFsaXplZCBzY2FuIGZhY3RzIG9mIGEgcmVzb2x2ZWQgcmVjb3JkLiBBIHN1bW1hcnkgZGVzY3JpYmluZyBhbm90aGVyIGltYWdlIGlzIGlnbm9yZWQuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyc2lvblNjYW5GYWN0cyhyZWNvcmQ6IFNjYW5uZWRSZWNvcmQpOiBWZXJzaW9uU2NhbkZhY3RzIHtcbiAgY29uc3QgZmxhZyA9IHJlY29yZC5zY2FuRmxhZ2dlZEF0ID8gYXNTY2FuRmxhZyhyZWNvcmQuc2NhbkZsYWcpIDogbnVsbDtcbiAgY29uc3QgcmF3ID0gc3VtbWFyeU9mKHJlY29yZCk7XG4gIC8vIENPTlRSQURJQ1RTLCBub3QgZGVzY3JpYmVzIOKAlCB0aGUgcGVybWlzc2l2ZSBoYWxmIG9mIHRoZSBwYWlyLCBkZWxpYmVyYXRlbHkuXG4gIC8vIEEgZGlnZXN0LWxlc3Mgc3VtbWFyeSBpcyB0aGUgb25seSBmaW5kaW5ncyB0aGlzIHJlYWRlciBoYXM7IGRpc2NhcmRpbmcgaXRcbiAgLy8gbWFrZXMgdGhlIHdhcm5pbmcgcXVpZXRlciBhbmQgdGhlIGRlbGV0ZS1zYWZldHkgcmVmdXNhbCBsZXNzIGluZm9ybWF0aXZlLFxuICAvLyB3aGljaCBpcyB0aGUgd3JvbmcgZmFpbHVyZSBmb3IgYSBjb25zdW1lci1mYWNpbmcgZ3JhZGUuIFRoZSBwdWJsaXNoIGdhdGVcbiAgLy8gYXNrcyB0aGUgc3RyaWN0IHF1ZXN0aW9uIGJlY2F1c2UgSVRTIHdyb25nIGZhaWx1cmUgaXMgbGlzdGluZyBzb21ldGhpbmdcbiAgLy8gdW52ZXR0ZWQuIFNlZSB0aGUgbm90ZSBvbiBgc3VtbWFyeURlc2NyaWJlc2AuXG4gIGNvbnN0IHN1bW1hcnkgPSByYXcgJiYgIXN1bW1hcnlDb250cmFkaWN0cyhyYXcsIHR5cGVvZiByZWNvcmQuaW1hZ2VEaWdlc3QgPT09ICdzdHJpbmcnID8gcmVjb3JkLmltYWdlRGlnZXN0IDogbnVsbCkgPyByYXcgOiBudWxsO1xuICBjb25zdCBmaW5kaW5ncyA9IHN1bW1hcnkgJiYgQXJyYXkuaXNBcnJheShzdW1tYXJ5LmZpbmRpbmdzKVxuICAgID8gKHN1bW1hcnkuZmluZGluZ3MgYXMgUGx1Z2luU2NhbkZpbmRpbmdbXSkuZmlsdGVyKChmKSA9PiBmICYmIHR5cGVvZiBmLmlkID09PSAnc3RyaW5nJykubWFwKChmKSA9PiAoeyAuLi5mLCBmaXhlZEluOiBBcnJheS5pc0FycmF5KGYuZml4ZWRJbikgPyBmLmZpeGVkSW4gOiBbXSB9KSlcbiAgICA6IChmbGFnPy5maW5kaW5ncyA/PyBbXSk7XG4gIGNvbnN0IG51bSA9ICh2OiB1bmtub3duKTogbnVtYmVyIHwgbnVsbCA9PiAodHlwZW9mIHYgPT09ICdudW1iZXInID8gdiA6IG51bGwpO1xuICBjb25zdCBrZXZDb3VudCA9IE1hdGgubWF4KG51bShzdW1tYXJ5Py5rZXYpID8/IDAsIGZsYWc/LmtldiA/PyAwLCBmaW5kaW5ncy5maWx0ZXIoKGYpID0+IGYua2V2ID09PSB0cnVlKS5sZW5ndGgpO1xuICByZXR1cm4ge1xuICAgIGZsYWdnZWQ6IGZsYWcgIT09IG51bGwsXG4gICAgZmxhZyxcbiAgICAvLyBOT1QgZmFsbGluZyBiYWNrIHRvIGByZWNvcmQudnVsbkNyaXRpY2FsRml4YWJsZWAsIHRob3VnaCBgaGlnaEZpeGFibGVgXG4gICAgLy8gZG9lcyBmYWxsIGJhY2sgdG8gaXRzIGNvbHVtbiBvbmUgbGluZSBkb3duLiBUaGUgYXN5bW1ldHJ5IGlzIHJlYWwgYW5kXG4gICAgLy8gcHJlZGF0ZXMgdGhpcyBtb2R1bGUncyBjdXJyZW50IHNoYXBlOyBjbG9zaW5nIGl0IGhlcmUgd291bGQgcmFpc2VcbiAgICAvLyBWVUxOX0NSSVRJQ0FMX0ZJWEFCTEUgZm9yIGV2ZXJ5IHJlY29yZCB0aGF0IGhhcyB0aGUgY29sdW1uIHNldCBhbmQgbm9cbiAgICAvLyBzdW1tYXJ5IGF0IGFsbCDigJQgYSBicm9hZCBjaGFuZ2UgdG8gd2FybmluZyBWT0xVTUUsIHdoaWNoIGlzIGEgcHJvZHVjdFxuICAgIC8vIGRlY2lzaW9uIHJhdGhlciB0aGFuIGEgY29uc2VxdWVuY2Ugb2YgdGlnaHRlbmluZyB0aGUgZGlnZXN0IGNoZWNrIGFib3ZlLlxuICAgIC8vIFRoZSBkaWdlc3QgY2hhbmdlIG9ubHkgYWZmZWN0cyByZWNvcmRzIHdob3NlIHN1bW1hcnkgbmFtZXMgYW5vdGhlciBpbWFnZSxcbiAgICAvLyBhbmQgdGhvc2UgZmFsbCBiYWNrIHRvIHRoZSBmbGFnJ3MgZmluZGluZ3MgZXhhY3RseSBhcyBhIHN1bW1hcnktbGVzc1xuICAgIC8vIHJlY29yZCBhbHdheXMgaGFzLlxuICAgIGNyaXRpY2FsRml4YWJsZTogbnVtKHN1bW1hcnk/LmNyaXRpY2FsRml4YWJsZSksXG4gICAgaGlnaEZpeGFibGU6IG51bShzdW1tYXJ5Py5oaWdoRml4YWJsZSkgPz8gbnVtKHJlY29yZC52dWxuSGlnaEZpeGFibGUpLFxuICAgIGNyaXRpY2FsOiBudW0oc3VtbWFyeT8uY3JpdGljYWwpLFxuICAgIGhpZ2g6IG51bShzdW1tYXJ5Py5oaWdoKSxcbiAgICBrZXY6IGtldkNvdW50LFxuICAgIGZpbmRpbmdzLFxuICAgIHRydW5jYXRlZDogc3VtbWFyeT8udHJ1bmNhdGVkID09PSB0cnVlLFxuICAgIHNjYW5uZWRBdDogbGFzdFNjYW5uZWRBdChyZWNvcmQpLFxuICB9O1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYGFjY2VwdGFuY2VgIGNvdmVycyBFVkVSWSBvbmUgb2YgYGZpbmRpbmdzYCAoYnkgZmluZGluZyBrZXkpLCBhbmQgaXRzXG4gKiBLRVYgb25lcyBvbmx5IHdoZW4gaXQgYWNjZXB0ZWQgS0VWLiBBbiBlbXB0eSBzZXQgaXMgbmV2ZXIgXCJjb3ZlcmVkXCI6IHdpdGhcbiAqIG5vdGhpbmcgaXRlbWl6ZWQgdGhlcmUgaXMgbm90aGluZyBhbiBhY2NlcHRhbmNlIGNhbiBiZSBzaG93biB0byBkZXNjcmliZS5cbiAqL1xuZnVuY3Rpb24gY292ZXJzKGFjY2VwdGFuY2U6IFZ1bG5BY2NlcHRhbmNlIHwgbnVsbCB8IHVuZGVmaW5lZCwgZmluZGluZ3M6IHJlYWRvbmx5IFBsdWdpblNjYW5GaW5kaW5nW10sIHRydW5jYXRlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBpZiAoIWFjY2VwdGFuY2UgfHwgdHJ1bmNhdGVkIHx8IGZpbmRpbmdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBrZXlzID0gbmV3IFNldChhY2NlcHRhbmNlLmZpbmRpbmdLZXlzKTtcbiAgcmV0dXJuIGZpbmRpbmdzLmV2ZXJ5KChmKSA9PiBrZXlzLmhhcyhzY2FuRmluZGluZ0tleShmKSkgJiYgKGYua2V2ICE9PSB0cnVlIHx8IGFjY2VwdGFuY2Uua2V2KSk7XG59XG5cbi8qKiBJbnB1dCB0byB7QGxpbmsgYXNzZXNzVmVyc2lvblZ1bG5zfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblZ1bG5JbnB1dCB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHJlY29yZDogU2Nhbm5lZFJlY29yZDtcbiAgcG9saWN5OiBWdWxuQ29uc3VtcHRpb25Qb2xpY3k7XG4gIC8qKiBUaGUgcGlwZWxpbmUncyBhY3RpdmUgYWNjZXB0YW5jZSBvZiB0aGlzIHZlcnNpb24gLyBpbWFnZSwgd2hlbiB0aGUgY2FsbGVyIGhhcyBhIHBpcGVsaW5lLiAqL1xuICBhY2NlcHRhbmNlPzogVnVsbkFjY2VwdGFuY2UgfCBudWxsO1xuICAvKiogVGhlIG5ld2VzdCB1bmZsYWdnZWQgdmVyc2lvbiB0aGUgb3duZXIgY2FuIG1vdmUgdG8sIG5hbWVkIG9uIHRoZSBmaW5kaW5nIHdhcm5pbmdzLiAqL1xuICBzdWdnZXN0ZWRWZXJzaW9uPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFJ1biB0aGUgb3JnJ3MgY29tcGxpYW5jZSBydWxlcyAoYSBuZXR3b3JrIGNhbGwpLiBEZWZhdWx0IHRydWUuICovXG4gIGNvbXBsaWFuY2U/OiBib29sZWFuO1xuICBub3c/OiBEYXRlO1xufVxuXG4vKiogVGhlIGFzc2Vzc21lbnQ6IGV2ZXJ5IHdhcm5pbmcsIHRoZSBsb3VkZXN0IHNldmVyaXR5LCBhbmQgd2hpY2ggYWNjZXB0ZWQgZmluZGluZ3MgaXQgZG93bmdyYWRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblZ1bG5Bc3Nlc3NtZW50IHtcbiAgLyoqIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2F5LiAqL1xuICBzZXZlcml0eTogVnVsblNldmVyaXR5IHwgbnVsbDtcbiAgd2FybmluZ3M6IFZ1bG5XYXJuaW5nW107XG4gIC8qKiBGaW5kaW5nIGtleXMgYW4gYWNjZXB0YW5jZSBkb3duZ3JhZGVkIChlbXB0eSA9IG5vIGFjY2VwdGFuY2UgYXBwbGllZCkuICovXG4gIGFjY2VwdGVkRmluZGluZ3M6IHN0cmluZ1tdO1xuICBmYWN0czogVmVyc2lvblNjYW5GYWN0cztcbn1cblxuLyoqIFRoZSBsb3VkZXN0IHNldmVyaXR5IG9mIGB3YXJuaW5nc2AsIG9yIG51bGwgZm9yIG5vbmUuICovXG5leHBvcnQgZnVuY3Rpb24gc2V2ZXJpdHlPZih3YXJuaW5nczogUmVhZG9ubHlBcnJheTx7IHNldmVyaXR5PzogVnVsblNldmVyaXR5IH0+KTogVnVsblNldmVyaXR5IHwgbnVsbCB7XG4gIHJldHVybiB3YXJuaW5ncy5yZWR1Y2U8VnVsblNldmVyaXR5IHwgbnVsbD4oKGFjYywgdykgPT4gKHcuc2V2ZXJpdHkgPyAoYWNjID8gbWF4U2V2ZXJpdHkoYWNjLCB3LnNldmVyaXR5KSA6IHcuc2V2ZXJpdHkpIDogYWNjKSwgbnVsbCk7XG59XG5cbi8qKlxuICogVGhlIGFzc2Vzc21lbnQgb2Ygb25lIHJlc29sdmVkIHZlcnNpb24gKHNlZSB0aGUgbW9kdWxlIGRvYykuIE5ldmVyIHRocm93cyBhbmRcbiAqIG5ldmVyIHJlZnVzZXM6IGEgY29tcGxpYW5jZSBvdXRhZ2UgYWRkcyBhbiBgaW5mb2AgYENPTVBMSUFOQ0VfVU5BVkFJTEFCTEVgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXNzVmVyc2lvblZ1bG5zKGlucHV0OiBWZXJzaW9uVnVsbklucHV0KTogUHJvbWlzZTxWZXJzaW9uVnVsbkFzc2Vzc21lbnQ+IHtcbiAgY29uc3QgeyBvcmdJZCwgcmVjb3JkLCBwb2xpY3ksIGFjY2VwdGFuY2UgfSA9IGlucHV0O1xuICBjb25zdCBub3cgPSBpbnB1dC5ub3cgPz8gbmV3IERhdGUoKTtcbiAgY29uc3QgcmVmID0gYCR7cmVjb3JkLm5hbWV9QCR7cmVjb3JkLnZlcnNpb259YDtcbiAgY29uc3QgZmFjdHMgPSB2ZXJzaW9uU2NhbkZhY3RzKHJlY29yZCk7XG4gIGNvbnN0IHdhcm5pbmdzOiBWdWxuV2FybmluZ1tdID0gWy4uLnNjYW5XYXJuaW5ncyhyZWNvcmQsIG5vdyldO1xuICBjb25zdCBhY2NlcHRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB3YXkgPSBpbnB1dC5zdWdnZXN0ZWRWZXJzaW9uID8gYCBNb3ZlIHRvICR7cmVjb3JkLm5hbWV9QCR7aW5wdXQuc3VnZ2VzdGVkVmVyc2lvbn0uYCA6ICcnO1xuICBjb25zdCBzdWdnZXN0ZWQgPSBpbnB1dC5zdWdnZXN0ZWRWZXJzaW9uID8geyBzdWdnZXN0ZWRWZXJzaW9uOiBpbnB1dC5zdWdnZXN0ZWRWZXJzaW9uIH0gOiB7fTtcbiAgY29uc3QgdW50aWwgPSB0b0RhdGUoYWNjZXB0YW5jZT8uYWNjZXB0ZWRVbnRpbCk/LnRvSVNPU3RyaW5nKCkgPz8gbnVsbDtcblxuICAvKiogUHVzaCBhIGZpbmRpbmcgd2FybmluZyDigJQgb3IsIHdoZW4gdGhlIHBpcGVsaW5lIGFjY2VwdGVkIGV4YWN0bHkgdGhvc2UgZmluZGluZ3MsIGl0cyBgaW5mb2AgZG93bmdyYWRlLiAqL1xuICBjb25zdCBmaW5kaW5nID0gKGNvZGU6ICdWVUxOX0tFVicgfCAnVlVMTl9GTEFHR0VEJyB8ICdWVUxOX0NSSVRJQ0FMX0ZJWEFCTEUnIHwgJ1ZVTE5fSElHSF9GSVhBQkxFJywgc2V2ZXJpdHk6IFZ1bG5TZXZlcml0eSwgbWVzc2FnZTogc3RyaW5nLCBmaW5kaW5nczogUGx1Z2luU2NhbkZpbmRpbmdbXSxcbiAgICBleHRyYTogeyBwbHVnaW4/OiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmc7IGdhdGVkPzogbnVtYmVyOyBoaWdoPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgIGlmIChjb3ZlcnMoYWNjZXB0YW5jZSwgZmluZGluZ3MsIGZhY3RzLnRydW5jYXRlZCkpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBmaW5kaW5ncykgYWNjZXB0ZWQuYWRkKHNjYW5GaW5kaW5nS2V5KGYpKTtcbiAgICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgICBjb2RlOiAnVlVMTl9BQ0NFUFRFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnaW5mbycsXG4gICAgICAgIG1lc3NhZ2U6IGAke21lc3NhZ2V9IEFjY2VwdGVkIGZvciB0aGlzIHBpcGVsaW5lJHt1bnRpbCA/IGAgdW50aWwgJHt1bnRpbH1gIDogJyd9LmAsXG4gICAgICAgIGZpbmRpbmdzOiBmaW5kaW5ncy5tYXAoc2NhbkZpbmRpbmdLZXkpLFxuICAgICAgICBhY2NlcHRlZFVudGlsOiB1bnRpbCxcbiAgICAgICAga2V2OiBhY2NlcHRhbmNlPy5rZXYgPz8gZmFsc2UsXG4gICAgICAgIGNvdmVyczogY29kZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3YXJuaW5ncy5wdXNoKHsgY29kZSwgc2V2ZXJpdHksIG1lc3NhZ2U6IGAke21lc3NhZ2V9JHt3YXl9YCwgZmluZGluZ3M6IGZpbmRpbmdzLnNsaWNlKDAsIDEwKSwgLi4uc3VnZ2VzdGVkLCAuLi5leHRyYSB9KTtcbiAgfTtcblxuICBjb25zdCBrZXZGaW5kaW5ncyA9IGZhY3RzLmZpbmRpbmdzLmZpbHRlcigoZikgPT4gZi5rZXYgPT09IHRydWUpO1xuICBpZiAoZmFjdHMua2V2ID4gMCkge1xuICAgIGZpbmRpbmcoJ1ZVTE5fS0VWJywgJ2NyaXRpY2FsJywgYCR7cmVmfSBoYXMgJHtmYWN0cy5rZXZ9IGZpbmRpbmcke2ZhY3RzLmtldiA9PT0gMSA/ICcnIDogJ3MnfSBvbiB0aGUgQ0lTQSBLbm93biBFeHBsb2l0ZWQgVnVsbmVyYWJpbGl0aWVzIGxpc3Qke2tldkZpbmRpbmdzLmxlbmd0aCA/IGA6ICR7ZGVzY3JpYmVGaW5kaW5ncyhrZXZGaW5kaW5ncyl9YCA6ICcnfS5gLCBrZXZGaW5kaW5ncyk7XG4gIH1cbiAgY29uc3QgZmxhZyA9IGZhY3RzLmZsYWc7XG4gIGlmIChmbGFnKSB7XG4gICAgY29uc3QgZ2F0ZWQgPSBmYWN0cy5maW5kaW5ncy5maWx0ZXIoKGYpID0+IGlzR2F0ZWRGaW5kaW5nKGYsIHBsdWdpblZ1bG5HYXRlS2V2KCksIGZsYWcuZmFpbE9uID8/ICdjcml0aWNhbCcpKTtcbiAgICBmaW5kaW5nKCdWVUxOX0ZMQUdHRUQnLCAnZXJyb3InLCBgJHtyZWZ9IGlzIGZsYWdnZWQ6IGEgcmVzY2FuIGZvdW5kICR7ZmxhZy5nYXRlZH0gZ2F0ZWQgJHtmYWlsT25MYWJlbChmbGFnLmZhaWxPbiA/PyAnY3JpdGljYWwnKX0gZmluZGluZyR7ZmxhZy5nYXRlZCA9PT0gMSA/ICcnIDogJ3MnfSBvdmVyIHRoZSBwbGF0Zm9ybSBsaW1pdCR7ZmxhZy5maW5kaW5ncy5sZW5ndGggPyBgIChmaXg6ICR7ZGVzY3JpYmVGaW5kaW5ncyhmbGFnLmZpbmRpbmdzKX0pYCA6ICcnfS5gLFxuICAgICAgZ2F0ZWQubGVuZ3RoID4gMCA/IGdhdGVkIDogZmxhZy5maW5kaW5ncywgeyBwbHVnaW46IHJlY29yZC5uYW1lLCB2ZXJzaW9uOiByZWNvcmQudmVyc2lvbiwgZ2F0ZWQ6IGZsYWcuZ2F0ZWQsIGhpZ2g6IGZsYWcuaGlnaCB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXQUlWRVItQVdBUkUsIHdoaWNoIHRoaXMgYnJhbmNoIGNvdWxkIG5vdCBiZSB1bnRpbCB0aGUgcmVjb3JkIGNhcnJpZWQgaXRzXG4gICAgLy8gb3duZXIuIERlcml2ZWQgZnJvbSB0aGUgZmluZGluZ3Mgd2hlbiB0aGV5IGNhbiBjYXJyeSB0aGUgYW5zd2VyIOKAlCB0aGVcbiAgICAvLyBzYW1lIHJ1bGUgYGdhdGVkRmluZGluZ0NvdW50YCBhcHBsaWVzIOKAlCBhbmQgZnJvbSB0aGUgcmF3IGNvbHVtbiB3aGVuIHRoZXlcbiAgICAvLyBjYW5ub3QgKHRydW5jYXRlZCwgb3Igbm9uZSBpdGVtaXplZCksIHdoaWNoIGtlZXBzIHRoZSB3YXJuaW5nIHJhdGhlciB0aGFuXG4gICAgLy8gbG9zaW5nIGl0LiBBIHdhaXZlciBzaWxlbmNlcyB0aGUgd2FybmluZyBvbmx5IHdoZXJlIGl0IGFscmVhZHkgc2lsZW5jZXNcbiAgICAvLyB0aGUgYnVpbGQgZmxvb3IgYW5kIHRoZSBwdWJsaXNoIGdhdGUuXG4gICAgY29uc3Qgd2FpdmVkS2V5cyA9IG5ldyBTZXQoXG4gICAgICBhcHBseVZ1bG5XYWl2ZXJzKHJlY29yZC5uYW1lLCBmYWN0cy5maW5kaW5ncywgdW5kZWZpbmVkLCBub3csIHJlY29yZC5vd25lck9yZ0lkID8/IHVuZGVmaW5lZCwgcmVjb3JkLnZlcnNpb24pXG4gICAgICAgIC53YWl2ZWQubWFwKHNjYW5GaW5kaW5nS2V5KSxcbiAgICApO1xuICAgIGNvbnN0IGNyaXRzID0gZmFjdHMuZmluZGluZ3MuZmlsdGVyKChmKSA9PiBmLnNldmVyaXR5ID09PSAnY3JpdGljYWwnICYmIGYuZml4ZWRJbi5sZW5ndGggPiAwICYmICF3YWl2ZWRLZXlzLmhhcyhzY2FuRmluZGluZ0tleShmKSkpO1xuICAgIGNvbnN0IGRlcml2YWJsZSA9ICFmYWN0cy50cnVuY2F0ZWQgJiYgZmFjdHMuZmluZGluZ3MubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjcml0aWNhbEZpeGFibGUgPSBkZXJpdmFibGUgPyBjcml0cy5sZW5ndGggOiAoZmFjdHMuY3JpdGljYWxGaXhhYmxlID8/IDApO1xuICAgIGlmIChjcml0aWNhbEZpeGFibGUgPiAwKSB7XG4gICAgICBmaW5kaW5nKCdWVUxOX0NSSVRJQ0FMX0ZJWEFCTEUnLCAnZXJyb3InLCBgJHtyZWZ9IGhhcyAke2NyaXRpY2FsRml4YWJsZX0gZml4YWJsZSBDcml0aWNhbCBmaW5kaW5nJHtjcml0aWNhbEZpeGFibGUgPT09IDEgPyAnJyA6ICdzJ30ke2NyaXRzLmxlbmd0aCA/IGA6ICR7ZGVzY3JpYmVGaW5kaW5ncyhjcml0cyl9YCA6ICcnfS5gLCBjcml0cyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGhpZ2hGaXhhYmxlID0gZmFjdHMuaGlnaEZpeGFibGUgPz8gMDtcbiAgaWYgKGhpZ2hGaXhhYmxlID4gMCkge1xuICAgIGNvbnN0IGhpZ2hzID0gZmFjdHMuZmluZGluZ3MuZmlsdGVyKChmKSA9PiBmLnNldmVyaXR5ID09PSAnaGlnaCcgJiYgZi5maXhlZEluLmxlbmd0aCA+IDApO1xuICAgIGNvbnN0IG92ZXIgPSBwb2xpY3kud2FybkZpeGFibGVIaWdoICE9PSBudWxsICYmIGhpZ2hGaXhhYmxlID4gcG9saWN5Lndhcm5GaXhhYmxlSGlnaDtcbiAgICBmaW5kaW5nKCdWVUxOX0hJR0hfRklYQUJMRScsIG92ZXIgPyAnd2FybmluZycgOiAnaW5mbycsXG4gICAgICBgJHtyZWZ9IGhhcyAke2hpZ2hGaXhhYmxlfSBmaXhhYmxlIEhpZ2ggZmluZGluZyR7aGlnaEZpeGFibGUgPT09IDEgPyAnJyA6ICdzJ30ke292ZXIgPyBgLCBvdmVyIHlvdXIgb3JnYW5pemF0aW9uJ3MgdGhyZXNob2xkIG9mICR7cG9saWN5Lndhcm5GaXhhYmxlSGlnaH1gIDogJyd9LmAsIGhpZ2hzKTtcbiAgfVxuXG4gIGlmIChpbnB1dC5jb21wbGlhbmNlICE9PSBmYWxzZSkgd2FybmluZ3MucHVzaCguLi5hd2FpdCBjb21wbGlhbmNlVnVsbldhcm5pbmdzKG9yZ0lkLCByZWNvcmQpKTtcbiAgcmV0dXJuIHsgc2V2ZXJpdHk6IHNldmVyaXR5T2Yod2FybmluZ3MpLCB3YXJuaW5ncywgYWNjZXB0ZWRGaW5kaW5nczogWy4uLmFjY2VwdGVkXSwgZmFjdHMgfTtcbn1cblxuLyoqIFRoZSBjb21wbGlhbmNlIGF0dHJpYnV0ZXMgYSBwbHVnaW4ncyB2dWxuZXJhYmlsaXR5IHJ1bGVzIHJlYWQuICovXG5jb25zdCBWVUxOX1JVTEVfRklFTERTID0gbmV3IFNldChbJ3NjYW5uZWQnLCAndnVsbkNyaXRpY2FsJywgJ3Z1bG5IaWdoJywgJ3Z1bG5NZWRpdW0nLCAndnVsbkxvdycsICd2dWxuQ3JpdGljYWxGaXhhYmxlJywgJ3Z1bG5IaWdoRml4YWJsZSddKTtcblxuY29uc3QgZmllbGRSb290ID0gKGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcgPT4gZmllbGQuc3BsaXQoL1suW10vKVswXSA/PyBmaWVsZDtcblxudHlwZSBDb21wbGlhbmNlQ2xpZW50ID0gUGljazxSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVDb21wbGlhbmNlQ2xpZW50PiwgJ2RyeVJ1blBsdWdpbic+O1xuXG5sZXQgY29tcGxpYW5jZUNsaWVudDogQ29tcGxpYW5jZUNsaWVudCB8IG51bGwgPSBudWxsO1xuXG4vKiogVGVzdCBob29rOiByZXBsYWNlIHRoZSBjb21wbGlhbmNlIGNsaWVudCB0aGUgYXNzZXNzbWVudCdzIGNvbXBsaWFuY2UgbGF5ZXIgY2FsbHMuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0VnVsblBvbGljeUNvbXBsaWFuY2VDbGllbnRGb3JUZXN0cyhjbGllbnQ6IENvbXBsaWFuY2VDbGllbnQgfCBudWxsKTogdm9pZCB7XG4gIGNvbXBsaWFuY2VDbGllbnQgPSBjbGllbnQ7XG59XG5cbi8qKlxuICogVGhlIG9yZydzIHBsdWdpbiBjb21wbGlhbmNlIHJ1bGVzIG9uIHRoZSB2dWxuZXJhYmlsaXR5IGF0dHJpYnV0ZXMsIGV2YWx1YXRlZFxuICogYWdhaW5zdCB0aGUgUkVTT0xWRUQgdmVyc2lvbiDigJQgdGhlIG9yZydzIG93biByb3csIGl0cyBwYXJlbnQncywgYSBzeXN0ZW1cbiAqIHBsdWdpbiBvciBhbiBpbnN0YWxsZWQgbWFya2V0cGxhY2UgdmVyc2lvbiBhbGlrZS4gQSBCTE9DSy1tb2RlIHJ1bGUgdGhhdCBmYWlsc1xuICogaXMgYW4gYGVycm9yYCwgYSBXQVJOLW1vZGUgb25lIGEgYHdhcm5pbmdgOyBuZWl0aGVyIHJlZnVzZXMgYW55dGhpbmcgaGVyZVxuICogKHZ1bG5lcmFiaWxpdHkgc3RhdGUgbmV2ZXIgc3RvcHMgYSBwaXBlbGluZSkuXG4gKlxuICogT25seSB0aGUgdnVsbiAvIHNjYW5uZWQgcnVsZXMgY291bnQgaGVyZTogdGhlIHBsdWdpbidzIG90aGVyIHJ1bGVzICh0YWdzLFxuICogc2VjcmV0cywgY29tbWFuZHMg4oCmKSBkZXNjcmliZSBob3cgYSBwbHVnaW4gaXMgQVVUSE9SRUQsIHdoaWNoIGlzIGl0cyBvd25lcidzXG4gKiBjb25jZXJuIGF0IHVwbG9hZCwgbm90IHRoZSBjb25zdW1lcidzIGF0IHJlc29sdXRpb24g4oCUIGFuZCBhIHN5c3RlbSBwbHVnaW4gd291bGRcbiAqIG90aGVyd2lzZSBmYWlsIGV2ZXJ5IHRlbmFudCdzIGF1dGhvcmluZyBydWxlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29tcGxpYW5jZVZ1bG5XYXJuaW5ncyhvcmdJZDogc3RyaW5nLCByZWNvcmQ6IFNjYW5uZWRSZWNvcmQpOiBQcm9taXNlPFZ1bG5XYXJuaW5nW10+IHtcbiAgaWYgKGlzU3lzdGVtT3JnSWQob3JnSWQpIHx8ICFoYXNJbWFnZShyZWNvcmQpKSByZXR1cm4gW107XG4gIGNvbnN0IGZhY3RzID0gZGVyaXZlUGx1Z2luSW1hZ2VDb21wbGlhbmNlKHJlY29yZCwgbnVsbCkuYXR0cmlidXRlcztcbiAgY29uc3QgYXR0cmlidXRlczogUGx1Z2luQ29tcGxpYW5jZUF0dHJpYnV0ZXMgPSB7IG5hbWU6IHJlY29yZC5uYW1lLCB2ZXJzaW9uOiByZWNvcmQudmVyc2lvbiwgLi4uZmFjdHMgfTtcbiAgdHJ5IHtcbiAgICBjb21wbGlhbmNlQ2xpZW50ID8/PSBjcmVhdGVDb21wbGlhbmNlQ2xpZW50KCk7XG4gICAgY29uc3QgYXV0aCA9IGdldFNlcnZpY2VBdXRoSGVhZGVyKHsgc2VydmljZU5hbWU6ICdwbHVnaW4nLCBvcmdJZCwgcm9sZTogJ21lbWJlcicgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29tcGxpYW5jZUNsaWVudC5kcnlSdW5QbHVnaW4ob3JnSWQsIGF0dHJpYnV0ZXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGF1dGgpO1xuICAgIGNvbnN0IHJlbGV2YW50ID0gKHY6IENvbXBsaWFuY2VWaW9sYXRpb24pID0+IFZVTE5fUlVMRV9GSUVMRFMuaGFzKGZpZWxkUm9vdCh2LmZpZWxkKSk7XG4gICAgY29uc3QgYXMgPSAobW9kZTogJ2Jsb2NrJyB8ICd3YXJuJykgPT4gKHY6IENvbXBsaWFuY2VWaW9sYXRpb24pOiBWdWxuV2FybmluZyA9PiAoe1xuICAgICAgY29kZTogJ0NPTVBMSUFOQ0VfVlVMTl9SVUxFJyxcbiAgICAgIHNldmVyaXR5OiBtb2RlID09PSAnYmxvY2snID8gJ2Vycm9yJyA6ICd3YXJuaW5nJyxcbiAgICAgIG1lc3NhZ2U6IGAke3JlY29yZC5uYW1lfUAke3JlY29yZC52ZXJzaW9ufTogJHt2Lm1lc3NhZ2V9YCxcbiAgICAgIHJ1bGVJZDogdi5ydWxlSWQsXG4gICAgICBydWxlTmFtZTogdi5ydWxlTmFtZSxcbiAgICAgIGZpZWxkOiB2LmZpZWxkLFxuICAgICAgbW9kZSxcbiAgICB9KTtcbiAgICByZXR1cm4gWy4uLnJlc3VsdC52aW9sYXRpb25zLmZpbHRlcihyZWxldmFudCkubWFwKGFzKCdibG9jaycpKSwgLi4ucmVzdWx0Lndhcm5pbmdzLmZpbHRlcihyZWxldmFudCkubWFwKGFzKCd3YXJuJykpXTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIFt7IGNvZGU6ICdDT01QTElBTkNFX1VOQVZBSUxBQkxFJywgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogYFlvdXIgb3JnYW5pemF0aW9uJ3MgcGx1Z2luIHZ1bG5lcmFiaWxpdHkgcnVsZXMgY291bGQgbm90IGJlIGNoZWNrZWQgZm9yICR7cmVjb3JkLm5hbWV9QCR7cmVjb3JkLnZlcnNpb259ICgke2Vycm9yTWVzc2FnZShlcnIpfSkuYCB9XTtcbiAgfVxufVxuIl19
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi12dWxuLXBvbGljeS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3ZlcnNpb24tdnVsbi1wb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUVILE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUNMLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxrQkFBa0IsR0FFbkksTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZUFBZSxFQUFxQixNQUFNLDZCQUE2QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsa0JBQWtCLEVBQXdELE1BQU0sK0JBQStCLENBQUM7QUFDdEosT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3BELG9DQUFvQztBQUNwQyxNQUFNLFVBQVUsV0FBVyxDQUFDLENBQWUsRUFBRSxDQUFlO0lBQzFELE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQsdUNBQXVDO0FBQ3ZDLE1BQU0sVUFBVSxlQUFlLENBQUMsQ0FBZSxFQUFFLEtBQW1CO0lBQ2xFLE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FBQyxD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RUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2SCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSwyRUFBMkUsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3TSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRIRSB2dWxuZXJhYmlsaXR5IGFzc2Vzc21lbnQgb2Ygb25lIHJlc29sdmVkIHBsdWdpbiB2ZXJzaW9uLCBmb3Igb25lIG9yZyAoYW5kLFxuICogb3B0aW9uYWxseSwgb25lIHBpcGVsaW5lJ3MgcmlzayBhY2NlcHRhbmNlKS4gT25lIGZ1bmN0aW9uLCB0aHJlZSBjYWxsZXJzOlxuICogYC9wbHVnaW5zL2xvb2t1cGAgKHdoYXQgc3ludGggcGlucyksIGAvcGx1Z2lucy9ydW50aW1lLWNoZWNrYCAod2hhdCBhIHJ1bm5pbmdcbiAqIHBpcGVsaW5lIGlzIGFib3V0IHRvIGV4ZWN1dGUpIGFuZCB0aGUgcGlwZWxpbmUgc2VydmljZSdzIHNhdmUtdGltZSBjb250cmFjdFxuICogY2hlY2suIFRocmVlIGNvcGllcyBvZiB0aGVzZSBydWxlcyBkcmlmdGVkIG9uY2UgYWxyZWFkeS5cbiAqXG4gKiBWdWxuZXJhYmlsaXR5IHN0YXRlIE5FVkVSIHJlZnVzZXMgYSBwaXBlbGluZSDigJQgbm90IGl0cyBzYXZlLCBpdHMgc3ludGgsIGl0c1xuICogZGVwbG95IG9yIGl0cyBydW4uIFdoYXQgaXQgcHJvZHVjZXMgaXMgU0VWRVJJVFktR1JBREVEIHdhcm5pbmdzIChhbmQsIGZyb20gdGhlXG4gKiBjYWxsZXJzLCBub3RpZmljYXRpb25zIHRvIHRoZSBwaXBlbGluZSdzIG93bmVycykuIFRoZSBncmFkZXM6XG4gKlxuICogICBjcml0aWNhbCDigJQgYSBmaW5kaW5nIG9uIHRoZSBDSVNBIEtub3duIEV4cGxvaXRlZCBWdWxuZXJhYmlsaXRpZXMgbGlzdFxuICogICBlcnJvciAgICDigJQgdGhlIHZlcnNpb24gaXMgRkxBR0dFRCAoZ2F0ZWQgQ3JpdGljYWxzIG92ZXIgdGhlIHBsYXRmb3JtIGZsb29yKSxcbiAqICAgICAgICAgICAgICBpdCBoYXMgZml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncywgb3IgYW4gb3JnIGNvbXBsaWFuY2UgcnVsZSBvbiB0aGVcbiAqICAgICAgICAgICAgICB2dWxuZXJhYmlsaXR5IGF0dHJpYnV0ZXMgaXMgaW4gQkxPQ0sgbW9kZSBhbmQgZmFpbHNcbiAqICAgd2FybmluZyAg4oCUIGZpeGFibGUgSGlnaCBmaW5kaW5ncyBvdmVyIHRoZSBvcmcncyBgd2FybkZpeGFibGVIaWdoYCwgYSB2ZXJzaW9uXG4gKiAgICAgICAgICAgICAgbmV2ZXIgc2Nhbm5lZCwgYSBzY2FuIG9sZGVyIHRoYW4gYFBMVUdJTl9TQ0FOX1NUQUxFX0hPVVJTYCwgb3IgYVxuICogICAgICAgICAgICAgIGNvbXBsaWFuY2UgcnVsZSBpbiBXQVJOIG1vZGVcbiAqICAgaW5mbyAgICAg4oCUIHdoYXQgYSByZWFkZXIgbWF5IHdhbnQgdG8ga25vdyBidXQgbmVlZCBub3QgYWN0IG9uXG4gKlxuICogQSBQSVBFTElORSdzIGFjdGl2ZSByaXNrIGFjY2VwdGFuY2UgKGBwbHVnaW5fdnVsbl9leHBvc3VyZWAsIHRyaWFnZWQgYGFjY2VwdGVkYFxuICogd2l0aCBhIHJlYXNvbiBhbmQgYW4gZXhwaXJ5KSBkb3duZ3JhZGVzIHRoZSB3YXJuaW5ncyBhYm91dCB0aGUgZmluZGluZ3MgaXRcbiAqIEFDQ0VQVEVEIHRvIGBpbmZvYCAoXCJhY2NlcHRlZCB1bnRpbCDigKZcIikg4oCUIG5ldmVyIG9uZSBhYm91dCBhIGZpbmRpbmcgdGhhdFxuICogYXBwZWFyZWQgc2luY2UsIG5ldmVyIGEgS0VWIG9uZSB1bmxlc3MgdGhlIGFjY2VwdGFuY2Ugc2FpZCBga2V2OiB0cnVlYCwgYW5kXG4gKiBuZXZlciB0aGUgc2Nhbi1mcmVzaG5lc3Mgb3IgY29tcGxpYW5jZSB3YXJuaW5ncyAobmVpdGhlciBpcyBhYm91dCBhIGZpbmRpbmcpLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUNvbXBsaWFuY2VDbGllbnQsIHR5cGUgQ29tcGxpYW5jZVZpb2xhdGlvbiB9IGZyb20gJy4vY29tcGxpYW5jZS1jbGllbnQuanMnO1xuaW1wb3J0IHsgZ2V0U2VydmljZUF1dGhIZWFkZXIgfSBmcm9tICcuLi9taWRkbGV3YXJlL3NlcnZpY2UtdG9rZW5zLmpzJztcbmltcG9ydCB7IGlzU3lzdGVtT3JnSWQgfSBmcm9tICcuLi9taWRkbGV3YXJlL3N5c3RlbS1vcmcuanMnO1xuaW1wb3J0IHtcbiAgYXBwbHlWdWxuV2FpdmVycywgYXNTY2FuRmxhZywgZGVzY3JpYmVGaW5kaW5ncywgZmFpbE9uTGFiZWwsIGlzR2F0ZWRGaW5kaW5nLCBwbHVnaW5WdWxuR2F0ZUtldiwgc2NhbkZpbmRpbmdLZXksIHN1bW1hcnlDb250cmFkaWN0cyxcbiAgdHlwZSBQbHVnaW5TY2FuRmluZGluZywgdHlwZSBQbHVnaW5TY2FuRmxhZyxcbn0gZnJvbSAnLi4vdHlwZXMvcGx1Z2luLXNjYW4uanMnO1xuaW1wb3J0IHsgVlVMTl9TRVZFUklUSUVTLCB0eXBlIFZ1bG5TZXZlcml0eSB9IGZyb20gJy4uL3R5cGVzL3dpcmUtdm9jYWJ1bGFyeS5qcyc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgZGVyaXZlUGx1Z2luSW1hZ2VDb21wbGlhbmNlLCBwbHVnaW5SdW5zT3duSW1hZ2UsIHR5cGUgUGx1Z2luQ29tcGxpYW5jZUF0dHJpYnV0ZXMsIHR5cGUgUGx1Z2luSW1hZ2VSb3cgfSBmcm9tICcuLi91dGlscy9wbHVnaW4tY29tcGxpYW5jZS5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cblxuLyoqIFRoZSBsb3VkZXIgb2YgdHdvIHNldmVyaXRpZXMuICovXG5leHBvcnQgZnVuY3Rpb24gbWF4U2V2ZXJpdHkoYTogVnVsblNldmVyaXR5LCBiOiBWdWxuU2V2ZXJpdHkpOiBWdWxuU2V2ZXJpdHkge1xuICByZXR1cm4gVlVMTl9TRVZFUklUSUVTLmluZGV4T2YoYSkgPj0gVlVMTl9TRVZFUklUSUVTLmluZGV4T2YoYikgPyBhIDogYjtcbn1cblxuLyoqIFdoZXRoZXIgYHNgIGlzIGF0IGxlYXN0IGBmbG9vcmAuICovXG5leHBvcnQgZnVuY3Rpb24gc2V2ZXJpdHlBdExlYXN0KHM6IFZ1bG5TZXZlcml0eSwgZmxvb3I6IFZ1bG5TZXZlcml0eSk6IGJvb2xlYW4ge1xuICByZXR1cm4gVlVMTl9TRVZFUklUSUVTLmluZGV4T2YocykgPj0gVlVMTl9TRVZFUklUSUVTLmluZGV4T2YoZmxvb3IpO1xufVxuXG4vKiogYFBMVUdJTl9TQ0FOX1NUQUxFX0hPVVJTYCAoZGVmYXVsdCA3Mik6IGEgc2NhbiBvbGRlciB0aGFuIHRoaXMgaXMgc3RhbGUuICovXG5leHBvcnQgZnVuY3Rpb24gc2NhblN0YWxlSG91cnMoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVudkludCgnUExVR0lOX1NDQU5fU1RBTEVfSE9VUlMnLCA3MiwgeyBtaW46IDEgfSk7XG59XG5cbi8qKiBUaGUgc2Nhbi1yZWxhdGVkIGZpZWxkcyBvZiBhIHJlc29sdmVkIHJlY29yZCAoYW4gb3JnIHJvdyBvciBhIGxpc3RlZCByZWNvcmQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2FubmVkUmVjb3JkIGV4dGVuZHMgUGx1Z2luSW1hZ2VSb3cge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBvcmcgdGhhdCBPV05TIHRoaXMgcGx1Z2luL2xpc3Rpbmcg4oCUIE5PVCB0aGUgY29uc3VtaW5nIG9yZyBvblxuICAgKiB7QGxpbmsgVmVyc2lvblZ1bG5JbnB1dH0sIHdoaWNoIGlzIHdob2V2ZXIgaXMgYXNraW5nLiBWdWxuZXJhYmlsaXR5IHdhaXZlcnNcbiAgICogYXJlIHRoZSBvcGVyYXRvcidzIGFuZCBhcmUgc3lzdGVtLW9yZy1vbmx5LCBzbyB3aXRob3V0IHRoaXMgdGhlIG1vZHVsZVxuICAgKiBjb3VsZCBub3QgYXBwbHkgdGhlbSBhdCBhbGw6IGEgQ3JpdGljYWwgdGhlIG9wZXJhdG9yIGhhZCB3YWl2ZWQgc3RpbGxcbiAgICogcmVwb3J0ZWQgYXMgYW4gYGVycm9yYCB0byBldmVyeSB0ZW5hbnQgcmVzb2x2aW5nIHRoZSB2ZXJzaW9uLCBsb25nIGFmdGVyIGl0XG4gICAqIHN0b3BwZWQgYmxvY2tpbmcgdGhlIGJ1aWxkIGFuZCB0aGUgbGlzdGluZy4gT3B0aW9uYWwgYmVjYXVzZSBtb3N0IGNhbGxlcnNcbiAgICogaGF2ZSBubyBvd25lciB0byBoYW5kIChhIHRlbmFudCdzIG93biByb3cgaXMgaXRzIG93biBvd25lcikgYW5kIGFic2VudCBtZWFuc1xuICAgKiBcIm5vIHdhaXZlciBhcHBsaWVzXCIsIHdoaWNoIGlzIHRoZSBzYWZlIGRpcmVjdGlvbi5cbiAgICovXG4gIG93bmVyT3JnSWQ/OiBzdHJpbmcgfCBudWxsO1xuICBzY2FubmVkQXQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgc2NhblN1bW1hcnk/OiB1bmtub3duO1xuICBzY2FuRmxhZ2dlZEF0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIHNjYW5GbGFnPzogdW5rbm93bjtcbiAgdnVsbkhpZ2hGaXhhYmxlPzogdW5rbm93bjtcbn1cblxuY29uc3QgdG9EYXRlID0gKHY6IHVua25vd24pOiBEYXRlIHwgbnVsbCA9PiB7XG4gIGlmICghdikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGQgPSB2IGluc3RhbmNlb2YgRGF0ZSA/IHYgOiBuZXcgRGF0ZShTdHJpbmcodikpO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKGQuZ2V0VGltZSgpKSA/IG51bGwgOiBkO1xufTtcblxuY29uc3Qgc3VtbWFyeU9mID0gKHJlY29yZDogUGljazxTY2FubmVkUmVjb3JkLCAnc2NhblN1bW1hcnknPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCA9PlxuICAocmVjb3JkLnNjYW5TdW1tYXJ5ICYmIHR5cGVvZiByZWNvcmQuc2NhblN1bW1hcnkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJlY29yZC5zY2FuU3VtbWFyeSlcbiAgICA/IHJlY29yZC5zY2FuU3VtbWFyeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA6IG51bGwpO1xuXG4vKipcbiAqIFdoZW4gdGhlIHZlcnNpb24gd2FzIGxhc3Qgc2Nhbm5lZDogdGhlIGxhdGVyIG9mIHRoZSBidWlsZC10aW1lIGBzY2FubmVkQXRgIGFuZFxuICogdGhlIG5pZ2h0bHkgcmVzY2FuJ3MgYHNjYW5fc3VtbWFyeS5zY2FubmVkQXRgLiBOdWxsID0gbmV2ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXN0U2Nhbm5lZEF0KHJlY29yZDogUGljazxTY2FubmVkUmVjb3JkLCAnc2Nhbm5lZEF0JyB8ICdzY2FuU3VtbWFyeSc+KTogRGF0ZSB8IG51bGwge1xuICBjb25zdCBidWlsZCA9IHRvRGF0ZShyZWNvcmQuc2Nhbm5lZEF0KTtcbiAgY29uc3Qgc3VtbWFyeSA9IHRvRGF0ZShzdW1tYXJ5T2YocmVjb3JkKT8uc2Nhbm5lZEF0KTtcbiAgaWYgKCFidWlsZCkgcmV0dXJuIHN1bW1hcnk7XG4gIGlmICghc3VtbWFyeSkgcmV0dXJuIGJ1aWxkO1xuICByZXR1cm4gc3VtbWFyeSA+IGJ1aWxkID8gc3VtbWFyeSA6IGJ1aWxkO1xufVxuXG4vKiogV2hldGhlciB0aGUgcmVjb3JkIHJ1bnMgYSBCVUlMVCBpbWFnZSBvZiBpdHMgb3duIOKAlCB0aGUgb25seSB0aGluZyBhIHNjYW4gYXBwbGllcyB0by4gKi9cbmZ1bmN0aW9uIGhhc0ltYWdlKHJlY29yZDogU2Nhbm5lZFJlY29yZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcGx1Z2luUnVuc093bkltYWdlKHJlY29yZCkgJiYgdHlwZW9mIHJlY29yZC5pbWFnZURpZ2VzdCA9PT0gJ3N0cmluZycgJiYgcmVjb3JkLmltYWdlRGlnZXN0Lmxlbmd0aCA+IDA7XG59XG5cbi8qKiBGcmVzaG5lc3Mgb2YgYSB2ZXJzaW9uJ3Mgc2NhbjogYG5vbmVgIChubyBpbWFnZSB0byBzY2FuKSwgYHVuc2Nhbm5lZGAsIGBzdGFsZWAgb3IgYGZyZXNoYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2FuRnJlc2huZXNzKHJlY29yZDogU2Nhbm5lZFJlY29yZCwgbm93ID0gbmV3IERhdGUoKSk6IHsgc3RhdGU6ICdub25lJyB8ICd1bnNjYW5uZWQnIHwgJ3N0YWxlJyB8ICdmcmVzaCc7IHNjYW5uZWRBdDogRGF0ZSB8IG51bGwgfSB7XG4gIGlmICghaGFzSW1hZ2UocmVjb3JkKSkgcmV0dXJuIHsgc3RhdGU6ICdub25lJywgc2Nhbm5lZEF0OiBudWxsIH07XG4gIGNvbnN0IGF0ID0gbGFzdFNjYW5uZWRBdChyZWNvcmQpO1xuICBpZiAoIWF0KSByZXR1cm4geyBzdGF0ZTogJ3Vuc2Nhbm5lZCcsIHNjYW5uZWRBdDogbnVsbCB9O1xuICByZXR1cm4geyBzdGF0ZTogbm93LmdldFRpbWUoKSAtIGF0LmdldFRpbWUoKSA+IHNjYW5TdGFsZUhvdXJzKCkgKiAzXzYwMF8wMDAgPyAnc3RhbGUnIDogJ2ZyZXNoJywgc2Nhbm5lZEF0OiBhdCB9O1xufVxuXG4vKiogT25lIHNldmVyaXR5LWdyYWRlZCB2dWxuZXJhYmlsaXR5IHdhcm5pbmcuICovXG5leHBvcnQgdHlwZSBWdWxuV2FybmluZyA9XG4gIHwge1xuICAgIGNvZGU6ICdWVUxOX0tFVicgfCAnVlVMTl9GTEFHR0VEJyB8ICdWVUxOX0NSSVRJQ0FMX0ZJWEFCTEUnIHwgJ1ZVTE5fSElHSF9GSVhBQkxFJztcbiAgICBzZXZlcml0eTogVnVsblNldmVyaXR5O1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBmaW5kaW5nczogUGx1Z2luU2NhbkZpbmRpbmdbXTtcbiAgICBzdWdnZXN0ZWRWZXJzaW9uPzogc3RyaW5nO1xuICAgIC8qKiBgVlVMTl9GTEFHR0VEYCBjYXJyaWVzIHRoZSBmbGFnJ3MgY291bnRzICh0aGUgc2hhcGUgdGhlIHJlc2Nhbi1mbGFnIHdhcm5pbmcgYWx3YXlzIGhhZCkuICovXG4gICAgcGx1Z2luPzogc3RyaW5nO1xuICAgIHZlcnNpb24/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBmbGFnJ3MgZ2F0ZWQgY291bnQgKGZpbmRpbmdzIGF0IG9yIGFib3ZlIGl0cyBgZmFpbE9uYCkuICovXG4gICAgZ2F0ZWQ/OiBudW1iZXI7XG4gICAgaGlnaD86IG51bWJlcjtcbiAgfVxuICB8IHsgY29kZTogJ1ZVTE5fQUNDRVBURUQnOyBzZXZlcml0eTogJ2luZm8nOyBtZXNzYWdlOiBzdHJpbmc7IGZpbmRpbmdzOiBzdHJpbmdbXTsgYWNjZXB0ZWRVbnRpbDogc3RyaW5nIHwgbnVsbDsga2V2OiBib29sZWFuOyBjb3ZlcnM6IHN0cmluZyB9XG4gIHwgeyBjb2RlOiAnVU5TQ0FOTkVEJzsgc2V2ZXJpdHk6IFZ1bG5TZXZlcml0eTsgbWVzc2FnZTogc3RyaW5nIH1cbiAgfCB7IGNvZGU6ICdTQ0FOX1NUQUxFJzsgc2V2ZXJpdHk6IFZ1bG5TZXZlcml0eTsgbWVzc2FnZTogc3RyaW5nOyBzY2FubmVkQXQ6IHN0cmluZzsgc3RhbGVBZnRlckhvdXJzOiBudW1iZXIgfVxuICB8IHsgY29kZTogJ0NPTVBMSUFOQ0VfVlVMTl9SVUxFJzsgc2V2ZXJpdHk6IFZ1bG5TZXZlcml0eTsgbWVzc2FnZTogc3RyaW5nOyBydWxlSWQ6IHN0cmluZzsgcnVsZU5hbWU6IHN0cmluZzsgZmllbGQ6IHN0cmluZzsgbW9kZTogJ2Jsb2NrJyB8ICd3YXJuJyB9XG4gIHwgeyBjb2RlOiAnQ09NUExJQU5DRV9VTkFWQUlMQUJMRSc7IHNldmVyaXR5OiBWdWxuU2V2ZXJpdHk7IG1lc3NhZ2U6IHN0cmluZyB9O1xuXG4vKiogYFVOU0NBTk5FRGAgLyBgU0NBTl9TVEFMRWAgZm9yIGEgcmVzb2x2ZWQgdmVyc2lvbiAoZW1wdHkgZm9yIGEgZnJlc2ggc2NhbiBvciBhbiBpbWFnZS1sZXNzIHBsdWdpbikuICovXG5leHBvcnQgZnVuY3Rpb24gc2Nhbldhcm5pbmdzKHJlY29yZDogU2Nhbm5lZFJlY29yZCwgbm93ID0gbmV3IERhdGUoKSk6IFZ1bG5XYXJuaW5nW10ge1xuICBjb25zdCByZWYgPSBgJHtyZWNvcmQubmFtZX1AJHtyZWNvcmQudmVyc2lvbn1gO1xuICBjb25zdCBmID0gc2NhbkZyZXNobmVzcyhyZWNvcmQsIG5vdyk7XG4gIGlmIChmLnN0YXRlID09PSAndW5zY2FubmVkJykge1xuICAgIHJldHVybiBbeyBjb2RlOiAnVU5TQ0FOTkVEJywgc2V2ZXJpdHk6ICd3YXJuaW5nJywgbWVzc2FnZTogYFBsdWdpbiAke3JlZn0gaGFzIG5ldmVyIGJlZW4gc2Nhbm5lZCBmb3IgdnVsbmVyYWJpbGl0aWVzOyBub3RoaW5nIGlzIGtub3duIGFib3V0IHdoYXQgaXRzIGltYWdlIGNvbnRhaW5zLmAgfV07XG4gIH1cbiAgaWYgKGYuc3RhdGUgPT09ICdzdGFsZScpIHtcbiAgICBjb25zdCBob3VycyA9IHNjYW5TdGFsZUhvdXJzKCk7XG4gICAgcmV0dXJuIFt7XG4gICAgICBjb2RlOiAnU0NBTl9TVEFMRScsXG4gICAgICBzZXZlcml0eTogJ3dhcm5pbmcnLFxuICAgICAgbWVzc2FnZTogYFBsdWdpbiAke3JlZn0gd2FzIGxhc3Qgc2Nhbm5lZCAke2Yuc2Nhbm5lZEF0IS50b0lTT1N0cmluZygpfSwgbW9yZSB0aGFuICR7aG91cnN9aCBhZ287IGZpbmRpbmdzIHB1Ymxpc2hlZCBzaW5jZSBhcmUgbm90IHJlZmxlY3RlZC5gLFxuICAgICAgc2Nhbm5lZEF0OiBmLnNjYW5uZWRBdCEudG9JU09TdHJpbmcoKSxcbiAgICAgIHN0YWxlQWZ0ZXJIb3VyczogaG91cnMsXG4gICAgfV07XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG4vKiogVGhlIHZ1bG5lcmFiaWxpdHkgZmllbGRzIG9mIGFuIG9yZydzIGNvbnN1bXB0aW9uIHBvbGljeSAocGlwZWxpbmUtZGF0YSdzIGBDb25zdW1wdGlvblBvbGljeWAgc2F0aXNmaWVzIGl0KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnVsbkNvbnN1bXB0aW9uUG9saWN5IHtcbiAgLyoqIEZpeGFibGUgSGlnaCBmaW5kaW5ncyBhYm92ZSB0aGlzIG1hbnkgcmFpc2UgYSBgd2FybmluZ2A7IG51bGwgPSBuZXZlciAodGhleSBzdGF5IGBpbmZvYCkuICovXG4gIHdhcm5GaXhhYmxlSGlnaDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBBIHBpcGVsaW5lJ3MgQUNUSVZFIHJpc2sgYWNjZXB0YW5jZSBvZiBvbmUgdmVyc2lvbiAvIGltYWdlOiB0aGUgZmluZGluZyBrZXlzXG4gKiAoe0BsaW5rIHNjYW5GaW5kaW5nS2V5fSkgaXQgYWNjZXB0ZWQsIHdoZXRoZXIgaXQgYWNjZXB0ZWQgS0VWIGZpbmRpbmdzLCBhbmRcbiAqIHVudGlsIHdoZW4uIEJ1aWx0IGJ5IHBpcGVsaW5lLWRhdGEgZnJvbSBgcGx1Z2luX3Z1bG5fZXhwb3N1cmVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZ1bG5BY2NlcHRhbmNlIHtcbiAgZmluZGluZ0tleXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICBrZXY6IGJvb2xlYW47XG4gIGFjY2VwdGVkVW50aWw6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xufVxuXG4vKiogV2hhdCBhIHZlcnNpb24ncyBzdG9yZWQgc2NhbiBzYXlzLCBub3JtYWxpemVkIGZyb20gYHNjYW5fc3VtbWFyeWAgKGZvciBpdHMgaW1hZ2UpIGFuZCBgc2Nhbl9mbGFnYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblNjYW5GYWN0cyB7XG4gIGZsYWdnZWQ6IGJvb2xlYW47XG4gIGZsYWc6IFBsdWdpblNjYW5GbGFnIHwgbnVsbDtcbiAgLyoqIEZpeGFibGUgQ3JpdGljYWwgLyBIaWdoIGZpbmRpbmdzIChudWxsID0gbm90IGtub3duKS4gKi9cbiAgY3JpdGljYWxGaXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICBoaWdoRml4YWJsZTogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIFRvdGFscyBpbmNsdWRpbmcgdW5maXhhYmxlIGZpbmRpbmdzIChudWxsID0gbm90IGtub3duKS4gKi9cbiAgY3JpdGljYWw6IG51bWJlciB8IG51bGw7XG4gIGhpZ2g6IG51bWJlciB8IG51bGw7XG4gIC8qKiBLRVYtbGlzdGVkIENyaXRpY2FsICsgSGlnaCBmaW5kaW5ncy4gKi9cbiAga2V2OiBudW1iZXI7XG4gIC8qKiBFdmVyeSBDcml0aWNhbC9IaWdoIGZpbmRpbmcgdGhlIHNjYW4gaXRlbWl6ZWQgKHRoZSBzdW1tYXJ5J3MgbGlzdCwgZWxzZSB0aGUgZmxhZydzKS4gKi9cbiAgZmluZGluZ3M6IFBsdWdpblNjYW5GaW5kaW5nW107XG4gIC8qKiBUaGUgc3VtbWFyeSBjdXQgaXRzIGZpbmRpbmdzIGxpc3Qg4oCUIGEgc3Vic2V0IGNoZWNrIG92ZXIgaXQgY2Fubm90IGJlIHRydXN0ZWQuICovXG4gIHRydW5jYXRlZDogYm9vbGVhbjtcbiAgc2Nhbm5lZEF0OiBEYXRlIHwgbnVsbDtcbn1cblxuLyoqIFRoZSBub3JtYWxpemVkIHNjYW4gZmFjdHMgb2YgYSByZXNvbHZlZCByZWNvcmQuIEEgc3VtbWFyeSBkZXNjcmliaW5nIGFub3RoZXIgaW1hZ2UgaXMgaWdub3JlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJzaW9uU2NhbkZhY3RzKHJlY29yZDogU2Nhbm5lZFJlY29yZCk6IFZlcnNpb25TY2FuRmFjdHMge1xuICBjb25zdCBmbGFnID0gcmVjb3JkLnNjYW5GbGFnZ2VkQXQgPyBhc1NjYW5GbGFnKHJlY29yZC5zY2FuRmxhZykgOiBudWxsO1xuICBjb25zdCByYXcgPSBzdW1tYXJ5T2YocmVjb3JkKTtcbiAgLy8gQ09OVFJBRElDVFMsIG5vdCBkZXNjcmliZXMg4oCUIHRoZSBwZXJtaXNzaXZlIGhhbGYgb2YgdGhlIHBhaXIsIGRlbGliZXJhdGVseS5cbiAgLy8gQSBkaWdlc3QtbGVzcyBzdW1tYXJ5IGlzIHRoZSBvbmx5IGZpbmRpbmdzIHRoaXMgcmVhZGVyIGhhczsgZGlzY2FyZGluZyBpdFxuICAvLyBtYWtlcyB0aGUgd2FybmluZyBxdWlldGVyIGFuZCB0aGUgZGVsZXRlLXNhZmV0eSByZWZ1c2FsIGxlc3MgaW5mb3JtYXRpdmUsXG4gIC8vIHdoaWNoIGlzIHRoZSB3cm9uZyBmYWlsdXJlIGZvciBhIGNvbnN1bWVyLWZhY2luZyBncmFkZS4gVGhlIHB1Ymxpc2ggZ2F0ZVxuICAvLyBhc2tzIHRoZSBzdHJpY3QgcXVlc3Rpb24gYmVjYXVzZSBJVFMgd3JvbmcgZmFpbHVyZSBpcyBsaXN0aW5nIHNvbWV0aGluZ1xuICAvLyB1bnZldHRlZC4gU2VlIHRoZSBub3RlIG9uIGBzdW1tYXJ5RGVzY3JpYmVzYC5cbiAgY29uc3Qgc3VtbWFyeSA9IHJhdyAmJiAhc3VtbWFyeUNvbnRyYWRpY3RzKHJhdywgdHlwZW9mIHJlY29yZC5pbWFnZURpZ2VzdCA9PT0gJ3N0cmluZycgPyByZWNvcmQuaW1hZ2VEaWdlc3QgOiBudWxsKSA/IHJhdyA6IG51bGw7XG4gIGNvbnN0IGZpbmRpbmdzID0gc3VtbWFyeSAmJiBBcnJheS5pc0FycmF5KHN1bW1hcnkuZmluZGluZ3MpXG4gICAgPyAoc3VtbWFyeS5maW5kaW5ncyBhcyBQbHVnaW5TY2FuRmluZGluZ1tdKS5maWx0ZXIoKGYpID0+IGYgJiYgdHlwZW9mIGYuaWQgPT09ICdzdHJpbmcnKS5tYXAoKGYpID0+ICh7IC4uLmYsIGZpeGVkSW46IEFycmF5LmlzQXJyYXkoZi5maXhlZEluKSA/IGYuZml4ZWRJbiA6IFtdIH0pKVxuICAgIDogKGZsYWc/LmZpbmRpbmdzID8/IFtdKTtcbiAgY29uc3QgbnVtID0gKHY6IHVua25vd24pOiBudW1iZXIgfCBudWxsID0+ICh0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogbnVsbCk7XG4gIGNvbnN0IGtldkNvdW50ID0gTWF0aC5tYXgobnVtKHN1bW1hcnk/LmtldikgPz8gMCwgZmxhZz8ua2V2ID8/IDAsIGZpbmRpbmdzLmZpbHRlcigoZikgPT4gZi5rZXYgPT09IHRydWUpLmxlbmd0aCk7XG4gIHJldHVybiB7XG4gICAgZmxhZ2dlZDogZmxhZyAhPT0gbnVsbCxcbiAgICBmbGFnLFxuICAgIC8vIE5PVCBmYWxsaW5nIGJhY2sgdG8gYHJlY29yZC52dWxuQ3JpdGljYWxGaXhhYmxlYCwgdGhvdWdoIGBoaWdoRml4YWJsZWBcbiAgICAvLyBkb2VzIGZhbGwgYmFjayB0byBpdHMgY29sdW1uIG9uZSBsaW5lIGRvd24uIFRoZSBhc3ltbWV0cnkgaXMgcmVhbCBhbmRcbiAgICAvLyBwcmVkYXRlcyB0aGlzIG1vZHVsZSdzIGN1cnJlbnQgc2hhcGU7IGNsb3NpbmcgaXQgaGVyZSB3b3VsZCByYWlzZVxuICAgIC8vIFZVTE5fQ1JJVElDQUxfRklYQUJMRSBmb3IgZXZlcnkgcmVjb3JkIHRoYXQgaGFzIHRoZSBjb2x1bW4gc2V0IGFuZCBub1xuICAgIC8vIHN1bW1hcnkgYXQgYWxsIOKAlCBhIGJyb2FkIGNoYW5nZSB0byB3YXJuaW5nIFZPTFVNRSwgd2hpY2ggaXMgYSBwcm9kdWN0XG4gICAgLy8gZGVjaXNpb24gcmF0aGVyIHRoYW4gYSBjb25zZXF1ZW5jZSBvZiB0aWdodGVuaW5nIHRoZSBkaWdlc3QgY2hlY2sgYWJvdmUuXG4gICAgLy8gVGhlIGRpZ2VzdCBjaGFuZ2Ugb25seSBhZmZlY3RzIHJlY29yZHMgd2hvc2Ugc3VtbWFyeSBuYW1lcyBhbm90aGVyIGltYWdlLFxuICAgIC8vIGFuZCB0aG9zZSBmYWxsIGJhY2sgdG8gdGhlIGZsYWcncyBmaW5kaW5ncyBleGFjdGx5IGFzIGEgc3VtbWFyeS1sZXNzXG4gICAgLy8gcmVjb3JkIGFsd2F5cyBoYXMuXG4gICAgY3JpdGljYWxGaXhhYmxlOiBudW0oc3VtbWFyeT8uY3JpdGljYWxGaXhhYmxlKSxcbiAgICBoaWdoRml4YWJsZTogbnVtKHN1bW1hcnk/LmhpZ2hGaXhhYmxlKSA/PyBudW0ocmVjb3JkLnZ1bG5IaWdoRml4YWJsZSksXG4gICAgY3JpdGljYWw6IG51bShzdW1tYXJ5Py5jcml0aWNhbCksXG4gICAgaGlnaDogbnVtKHN1bW1hcnk/LmhpZ2gpLFxuICAgIGtldjoga2V2Q291bnQsXG4gICAgZmluZGluZ3MsXG4gICAgdHJ1bmNhdGVkOiBzdW1tYXJ5Py50cnVuY2F0ZWQgPT09IHRydWUsXG4gICAgc2Nhbm5lZEF0OiBsYXN0U2Nhbm5lZEF0KHJlY29yZCksXG4gIH07XG59XG5cbi8qKlxuICogV2hldGhlciBgYWNjZXB0YW5jZWAgY292ZXJzIEVWRVJZIG9uZSBvZiBgZmluZGluZ3NgIChieSBmaW5kaW5nIGtleSksIGFuZCBpdHNcbiAqIEtFViBvbmVzIG9ubHkgd2hlbiBpdCBhY2NlcHRlZCBLRVYuIEFuIGVtcHR5IHNldCBpcyBuZXZlciBcImNvdmVyZWRcIjogd2l0aFxuICogbm90aGluZyBpdGVtaXplZCB0aGVyZSBpcyBub3RoaW5nIGFuIGFjY2VwdGFuY2UgY2FuIGJlIHNob3duIHRvIGRlc2NyaWJlLlxuICovXG5mdW5jdGlvbiBjb3ZlcnMoYWNjZXB0YW5jZTogVnVsbkFjY2VwdGFuY2UgfCBudWxsIHwgdW5kZWZpbmVkLCBmaW5kaW5nczogcmVhZG9ubHkgUGx1Z2luU2NhbkZpbmRpbmdbXSwgdHJ1bmNhdGVkOiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGlmICghYWNjZXB0YW5jZSB8fCB0cnVuY2F0ZWQgfHwgZmluZGluZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0KGFjY2VwdGFuY2UuZmluZGluZ0tleXMpO1xuICByZXR1cm4gZmluZGluZ3MuZXZlcnkoKGYpID0+IGtleXMuaGFzKHNjYW5GaW5kaW5nS2V5KGYpKSAmJiAoZi5rZXYgIT09IHRydWUgfHwgYWNjZXB0YW5jZS5rZXYpKTtcbn1cblxuLyoqIElucHV0IHRvIHtAbGluayBhc3Nlc3NWZXJzaW9uVnVsbnN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uVnVsbklucHV0IHtcbiAgb3JnSWQ6IHN0cmluZztcbiAgcmVjb3JkOiBTY2FubmVkUmVjb3JkO1xuICBwb2xpY3k6IFZ1bG5Db25zdW1wdGlvblBvbGljeTtcbiAgLyoqIFRoZSBwaXBlbGluZSdzIGFjdGl2ZSBhY2NlcHRhbmNlIG9mIHRoaXMgdmVyc2lvbiAvIGltYWdlLCB3aGVuIHRoZSBjYWxsZXIgaGFzIGEgcGlwZWxpbmUuICovXG4gIGFjY2VwdGFuY2U/OiBWdWxuQWNjZXB0YW5jZSB8IG51bGw7XG4gIC8qKiBUaGUgbmV3ZXN0IHVuZmxhZ2dlZCB2ZXJzaW9uIHRoZSBvd25lciBjYW4gbW92ZSB0bywgbmFtZWQgb24gdGhlIGZpbmRpbmcgd2FybmluZ3MuICovXG4gIHN1Z2dlc3RlZFZlcnNpb24/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogUnVuIHRoZSBvcmcncyBjb21wbGlhbmNlIHJ1bGVzIChhIG5ldHdvcmsgY2FsbCkuIERlZmF1bHQgdHJ1ZS4gKi9cbiAgY29tcGxpYW5jZT86IGJvb2xlYW47XG4gIG5vdz86IERhdGU7XG59XG5cbi8qKiBUaGUgYXNzZXNzbWVudDogZXZlcnkgd2FybmluZywgdGhlIGxvdWRlc3Qgc2V2ZXJpdHksIGFuZCB3aGljaCBhY2NlcHRlZCBmaW5kaW5ncyBpdCBkb3duZ3JhZGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uVnVsbkFzc2Vzc21lbnQge1xuICAvKiogYG51bGxgIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBzYXkuICovXG4gIHNldmVyaXR5OiBWdWxuU2V2ZXJpdHkgfCBudWxsO1xuICB3YXJuaW5nczogVnVsbldhcm5pbmdbXTtcbiAgLyoqIEZpbmRpbmcga2V5cyBhbiBhY2NlcHRhbmNlIGRvd25ncmFkZWQgKGVtcHR5ID0gbm8gYWNjZXB0YW5jZSBhcHBsaWVkKS4gKi9cbiAgYWNjZXB0ZWRGaW5kaW5nczogc3RyaW5nW107XG4gIGZhY3RzOiBWZXJzaW9uU2NhbkZhY3RzO1xufVxuXG4vKiogVGhlIGxvdWRlc3Qgc2V2ZXJpdHkgb2YgYHdhcm5pbmdzYCwgb3IgbnVsbCBmb3Igbm9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXZlcml0eU9mKHdhcm5pbmdzOiBSZWFkb25seUFycmF5PHsgc2V2ZXJpdHk/OiBWdWxuU2V2ZXJpdHkgfT4pOiBWdWxuU2V2ZXJpdHkgfCBudWxsIHtcbiAgcmV0dXJuIHdhcm5pbmdzLnJlZHVjZTxWdWxuU2V2ZXJpdHkgfCBudWxsPigoYWNjLCB3KSA9PiAody5zZXZlcml0eSA/IChhY2MgPyBtYXhTZXZlcml0eShhY2MsIHcuc2V2ZXJpdHkpIDogdy5zZXZlcml0eSkgOiBhY2MpLCBudWxsKTtcbn1cblxuLyoqXG4gKiBUaGUgYXNzZXNzbWVudCBvZiBvbmUgcmVzb2x2ZWQgdmVyc2lvbiAoc2VlIHRoZSBtb2R1bGUgZG9jKS4gTmV2ZXIgdGhyb3dzIGFuZFxuICogbmV2ZXIgcmVmdXNlczogYSBjb21wbGlhbmNlIG91dGFnZSBhZGRzIGFuIGBpbmZvYCBgQ09NUExJQU5DRV9VTkFWQUlMQUJMRWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3Nlc3NWZXJzaW9uVnVsbnMoaW5wdXQ6IFZlcnNpb25WdWxuSW5wdXQpOiBQcm9taXNlPFZlcnNpb25WdWxuQXNzZXNzbWVudD4ge1xuICBjb25zdCB7IG9yZ0lkLCByZWNvcmQsIHBvbGljeSwgYWNjZXB0YW5jZSB9ID0gaW5wdXQ7XG4gIGNvbnN0IG5vdyA9IGlucHV0Lm5vdyA/PyBuZXcgRGF0ZSgpO1xuICBjb25zdCByZWYgPSBgJHtyZWNvcmQubmFtZX1AJHtyZWNvcmQudmVyc2lvbn1gO1xuICBjb25zdCBmYWN0cyA9IHZlcnNpb25TY2FuRmFjdHMocmVjb3JkKTtcbiAgY29uc3Qgd2FybmluZ3M6IFZ1bG5XYXJuaW5nW10gPSBbLi4uc2Nhbldhcm5pbmdzKHJlY29yZCwgbm93KV07XG4gIGNvbnN0IGFjY2VwdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHdheSA9IGlucHV0LnN1Z2dlc3RlZFZlcnNpb24gPyBgIE1vdmUgdG8gJHtyZWNvcmQubmFtZX1AJHtpbnB1dC5zdWdnZXN0ZWRWZXJzaW9ufS5gIDogJyc7XG4gIGNvbnN0IHN1Z2dlc3RlZCA9IGlucHV0LnN1Z2dlc3RlZFZlcnNpb24gPyB7IHN1Z2dlc3RlZFZlcnNpb246IGlucHV0LnN1Z2dlc3RlZFZlcnNpb24gfSA6IHt9O1xuICBjb25zdCB1bnRpbCA9IHRvRGF0ZShhY2NlcHRhbmNlPy5hY2NlcHRlZFVudGlsKT8udG9JU09TdHJpbmcoKSA/PyBudWxsO1xuXG4gIC8qKiBQdXNoIGEgZmluZGluZyB3YXJuaW5nIOKAlCBvciwgd2hlbiB0aGUgcGlwZWxpbmUgYWNjZXB0ZWQgZXhhY3RseSB0aG9zZSBmaW5kaW5ncywgaXRzIGBpbmZvYCBkb3duZ3JhZGUuICovXG4gIGNvbnN0IGZpbmRpbmcgPSAoY29kZTogJ1ZVTE5fS0VWJyB8ICdWVUxOX0ZMQUdHRUQnIHwgJ1ZVTE5fQ1JJVElDQUxfRklYQUJMRScgfCAnVlVMTl9ISUdIX0ZJWEFCTEUnLCBzZXZlcml0eTogVnVsblNldmVyaXR5LCBtZXNzYWdlOiBzdHJpbmcsIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdLFxuICAgIGV4dHJhOiB7IHBsdWdpbj86IHN0cmluZzsgdmVyc2lvbj86IHN0cmluZzsgZ2F0ZWQ/OiBudW1iZXI7IGhpZ2g/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgaWYgKGNvdmVycyhhY2NlcHRhbmNlLCBmaW5kaW5ncywgZmFjdHMudHJ1bmNhdGVkKSkge1xuICAgICAgZm9yIChjb25zdCBmIG9mIGZpbmRpbmdzKSBhY2NlcHRlZC5hZGQoc2NhbkZpbmRpbmdLZXkoZikpO1xuICAgICAgd2FybmluZ3MucHVzaCh7XG4gICAgICAgIGNvZGU6ICdWVUxOX0FDQ0VQVEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdpbmZvJyxcbiAgICAgICAgbWVzc2FnZTogYCR7bWVzc2FnZX0gQWNjZXB0ZWQgZm9yIHRoaXMgcGlwZWxpbmUke3VudGlsID8gYCB1bnRpbCAke3VudGlsfWAgOiAnJ30uYCxcbiAgICAgICAgZmluZGluZ3M6IGZpbmRpbmdzLm1hcChzY2FuRmluZGluZ0tleSksXG4gICAgICAgIGFjY2VwdGVkVW50aWw6IHVudGlsLFxuICAgICAgICBrZXY6IGFjY2VwdGFuY2U/LmtldiA/PyBmYWxzZSxcbiAgICAgICAgY292ZXJzOiBjb2RlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdhcm5pbmdzLnB1c2goeyBjb2RlLCBzZXZlcml0eSwgbWVzc2FnZTogYCR7bWVzc2FnZX0ke3dheX1gLCBmaW5kaW5nczogZmluZGluZ3Muc2xpY2UoMCwgMTApLCAuLi5zdWdnZXN0ZWQsIC4uLmV4dHJhIH0pO1xuICB9O1xuXG4gIGNvbnN0IGtldkZpbmRpbmdzID0gZmFjdHMuZmluZGluZ3MuZmlsdGVyKChmKSA9PiBmLmtldiA9PT0gdHJ1ZSk7XG4gIGlmIChmYWN0cy5rZXYgPiAwKSB7XG4gICAgZmluZGluZygnVlVMTl9LRVYnLCAnY3JpdGljYWwnLCBgJHtyZWZ9IGhhcyAke2ZhY3RzLmtldn0gZmluZGluZyR7ZmFjdHMua2V2ID09PSAxID8gJycgOiAncyd9IG9uIHRoZSBDSVNBIEtub3duIEV4cGxvaXRlZCBWdWxuZXJhYmlsaXRpZXMgbGlzdCR7a2V2RmluZGluZ3MubGVuZ3RoID8gYDogJHtkZXNjcmliZUZpbmRpbmdzKGtldkZpbmRpbmdzKX1gIDogJyd9LmAsIGtldkZpbmRpbmdzKTtcbiAgfVxuICBjb25zdCBmbGFnID0gZmFjdHMuZmxhZztcbiAgaWYgKGZsYWcpIHtcbiAgICBjb25zdCBnYXRlZCA9IGZhY3RzLmZpbmRpbmdzLmZpbHRlcigoZikgPT4gaXNHYXRlZEZpbmRpbmcoZiwgcGx1Z2luVnVsbkdhdGVLZXYoKSwgZmxhZy5mYWlsT24gPz8gJ2NyaXRpY2FsJykpO1xuICAgIGZpbmRpbmcoJ1ZVTE5fRkxBR0dFRCcsICdlcnJvcicsIGAke3JlZn0gaXMgZmxhZ2dlZDogYSByZXNjYW4gZm91bmQgJHtmbGFnLmdhdGVkfSBnYXRlZCAke2ZhaWxPbkxhYmVsKGZsYWcuZmFpbE9uID8/ICdjcml0aWNhbCcpfSBmaW5kaW5nJHtmbGFnLmdhdGVkID09PSAxID8gJycgOiAncyd9IG92ZXIgdGhlIHBsYXRmb3JtIGxpbWl0JHtmbGFnLmZpbmRpbmdzLmxlbmd0aCA/IGAgKGZpeDogJHtkZXNjcmliZUZpbmRpbmdzKGZsYWcuZmluZGluZ3MpfSlgIDogJyd9LmAsXG4gICAgICBnYXRlZC5sZW5ndGggPiAwID8gZ2F0ZWQgOiBmbGFnLmZpbmRpbmdzLCB7IHBsdWdpbjogcmVjb3JkLm5hbWUsIHZlcnNpb246IHJlY29yZC52ZXJzaW9uLCBnYXRlZDogZmxhZy5nYXRlZCwgaGlnaDogZmxhZy5oaWdoIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIFdBSVZFUi1BV0FSRSwgd2hpY2ggdGhpcyBicmFuY2ggY291bGQgbm90IGJlIHVudGlsIHRoZSByZWNvcmQgY2FycmllZCBpdHNcbiAgICAvLyBvd25lci4gRGVyaXZlZCBmcm9tIHRoZSBmaW5kaW5ncyB3aGVuIHRoZXkgY2FuIGNhcnJ5IHRoZSBhbnN3ZXIg4oCUIHRoZVxuICAgIC8vIHNhbWUgcnVsZSBgZ2F0ZWRGaW5kaW5nQ291bnRgIGFwcGxpZXMg4oCUIGFuZCBmcm9tIHRoZSByYXcgY29sdW1uIHdoZW4gdGhleVxuICAgIC8vIGNhbm5vdCAodHJ1bmNhdGVkLCBvciBub25lIGl0ZW1pemVkKSwgd2hpY2gga2VlcHMgdGhlIHdhcm5pbmcgcmF0aGVyIHRoYW5cbiAgICAvLyBsb3NpbmcgaXQuIEEgd2FpdmVyIHNpbGVuY2VzIHRoZSB3YXJuaW5nIG9ubHkgd2hlcmUgaXQgYWxyZWFkeSBzaWxlbmNlc1xuICAgIC8vIHRoZSBidWlsZCBmbG9vciBhbmQgdGhlIHB1Ymxpc2ggZ2F0ZS5cbiAgICBjb25zdCB3YWl2ZWRLZXlzID0gbmV3IFNldChcbiAgICAgIGFwcGx5VnVsbldhaXZlcnMocmVjb3JkLm5hbWUsIGZhY3RzLmZpbmRpbmdzLCB1bmRlZmluZWQsIG5vdywgcmVjb3JkLm93bmVyT3JnSWQgPz8gdW5kZWZpbmVkLCByZWNvcmQudmVyc2lvbilcbiAgICAgICAgLndhaXZlZC5tYXAoc2NhbkZpbmRpbmdLZXkpLFxuICAgICk7XG4gICAgY29uc3QgY3JpdHMgPSBmYWN0cy5maW5kaW5ncy5maWx0ZXIoKGYpID0+IGYuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcgJiYgZi5maXhlZEluLmxlbmd0aCA+IDAgJiYgIXdhaXZlZEtleXMuaGFzKHNjYW5GaW5kaW5nS2V5KGYpKSk7XG4gICAgY29uc3QgZGVyaXZhYmxlID0gIWZhY3RzLnRydW5jYXRlZCAmJiBmYWN0cy5maW5kaW5ncy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGNyaXRpY2FsRml4YWJsZSA9IGRlcml2YWJsZSA/IGNyaXRzLmxlbmd0aCA6IChmYWN0cy5jcml0aWNhbEZpeGFibGUgPz8gMCk7XG4gICAgaWYgKGNyaXRpY2FsRml4YWJsZSA+IDApIHtcbiAgICAgIGZpbmRpbmcoJ1ZVTE5fQ1JJVElDQUxfRklYQUJMRScsICdlcnJvcicsIGAke3JlZn0gaGFzICR7Y3JpdGljYWxGaXhhYmxlfSBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmcke2NyaXRpY2FsRml4YWJsZSA9PT0gMSA/ICcnIDogJ3MnfSR7Y3JpdHMubGVuZ3RoID8gYDogJHtkZXNjcmliZUZpbmRpbmdzKGNyaXRzKX1gIDogJyd9LmAsIGNyaXRzKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaGlnaEZpeGFibGUgPSBmYWN0cy5oaWdoRml4YWJsZSA/PyAwO1xuICBpZiAoaGlnaEZpeGFibGUgPiAwKSB7XG4gICAgY29uc3QgaGlnaHMgPSBmYWN0cy5maW5kaW5ncy5maWx0ZXIoKGYpID0+IGYuc2V2ZXJpdHkgPT09ICdoaWdoJyAmJiBmLmZpeGVkSW4ubGVuZ3RoID4gMCk7XG4gICAgY29uc3Qgb3ZlciA9IHBvbGljeS53YXJuRml4YWJsZUhpZ2ggIT09IG51bGwgJiYgaGlnaEZpeGFibGUgPiBwb2xpY3kud2FybkZpeGFibGVIaWdoO1xuICAgIGZpbmRpbmcoJ1ZVTE5fSElHSF9GSVhBQkxFJywgb3ZlciA/ICd3YXJuaW5nJyA6ICdpbmZvJyxcbiAgICAgIGAke3JlZn0gaGFzICR7aGlnaEZpeGFibGV9IGZpeGFibGUgSGlnaCBmaW5kaW5nJHtoaWdoRml4YWJsZSA9PT0gMSA/ICcnIDogJ3MnfSR7b3ZlciA/IGAsIG92ZXIgeW91ciBvcmdhbml6YXRpb24ncyB0aHJlc2hvbGQgb2YgJHtwb2xpY3kud2FybkZpeGFibGVIaWdofWAgOiAnJ30uYCwgaGlnaHMpO1xuICB9XG5cbiAgaWYgKGlucHV0LmNvbXBsaWFuY2UgIT09IGZhbHNlKSB3YXJuaW5ncy5wdXNoKC4uLmF3YWl0IGNvbXBsaWFuY2VWdWxuV2FybmluZ3Mob3JnSWQsIHJlY29yZCkpO1xuICByZXR1cm4geyBzZXZlcml0eTogc2V2ZXJpdHlPZih3YXJuaW5ncyksIHdhcm5pbmdzLCBhY2NlcHRlZEZpbmRpbmdzOiBbLi4uYWNjZXB0ZWRdLCBmYWN0cyB9O1xufVxuXG4vKiogVGhlIGNvbXBsaWFuY2UgYXR0cmlidXRlcyBhIHBsdWdpbidzIHZ1bG5lcmFiaWxpdHkgcnVsZXMgcmVhZC4gKi9cbmNvbnN0IFZVTE5fUlVMRV9GSUVMRFMgPSBuZXcgU2V0KFsnc2Nhbm5lZCcsICd2dWxuQ3JpdGljYWwnLCAndnVsbkhpZ2gnLCAndnVsbk1lZGl1bScsICd2dWxuTG93JywgJ3Z1bG5Dcml0aWNhbEZpeGFibGUnLCAndnVsbkhpZ2hGaXhhYmxlJ10pO1xuXG5jb25zdCBmaWVsZFJvb3QgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyA9PiBmaWVsZC5zcGxpdCgvWy5bXS8pWzBdID8/IGZpZWxkO1xuXG50eXBlIENvbXBsaWFuY2VDbGllbnQgPSBQaWNrPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUNvbXBsaWFuY2VDbGllbnQ+LCAnZHJ5UnVuUGx1Z2luJz47XG5cbmxldCBjb21wbGlhbmNlQ2xpZW50OiBDb21wbGlhbmNlQ2xpZW50IHwgbnVsbCA9IG51bGw7XG5cbi8qKiBUZXN0IGhvb2s6IHJlcGxhY2UgdGhlIGNvbXBsaWFuY2UgY2xpZW50IHRoZSBhc3Nlc3NtZW50J3MgY29tcGxpYW5jZSBsYXllciBjYWxscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRWdWxuUG9saWN5Q29tcGxpYW5jZUNsaWVudEZvclRlc3RzKGNsaWVudDogQ29tcGxpYW5jZUNsaWVudCB8IG51bGwpOiB2b2lkIHtcbiAgY29tcGxpYW5jZUNsaWVudCA9IGNsaWVudDtcbn1cblxuLyoqXG4gKiBUaGUgb3JnJ3MgcGx1Z2luIGNvbXBsaWFuY2UgcnVsZXMgb24gdGhlIHZ1bG5lcmFiaWxpdHkgYXR0cmlidXRlcywgZXZhbHVhdGVkXG4gKiBhZ2FpbnN0IHRoZSBSRVNPTFZFRCB2ZXJzaW9uIOKAlCB0aGUgb3JnJ3Mgb3duIHJvdywgaXRzIHBhcmVudCdzLCBhIHN5c3RlbVxuICogcGx1Z2luIG9yIGFuIGluc3RhbGxlZCBtYXJrZXRwbGFjZSB2ZXJzaW9uIGFsaWtlLiBBIEJMT0NLLW1vZGUgcnVsZSB0aGF0IGZhaWxzXG4gKiBpcyBhbiBgZXJyb3JgLCBhIFdBUk4tbW9kZSBvbmUgYSBgd2FybmluZ2A7IG5laXRoZXIgcmVmdXNlcyBhbnl0aGluZyBoZXJlXG4gKiAodnVsbmVyYWJpbGl0eSBzdGF0ZSBuZXZlciBzdG9wcyBhIHBpcGVsaW5lKS5cbiAqXG4gKiBPbmx5IHRoZSB2dWxuIC8gc2Nhbm5lZCBydWxlcyBjb3VudCBoZXJlOiB0aGUgcGx1Z2luJ3Mgb3RoZXIgcnVsZXMgKHRhZ3MsXG4gKiBzZWNyZXRzLCBjb21tYW5kcyDigKYpIGRlc2NyaWJlIGhvdyBhIHBsdWdpbiBpcyBBVVRIT1JFRCwgd2hpY2ggaXMgaXRzIG93bmVyJ3NcbiAqIGNvbmNlcm4gYXQgdXBsb2FkLCBub3QgdGhlIGNvbnN1bWVyJ3MgYXQgcmVzb2x1dGlvbiDigJQgYW5kIGEgc3lzdGVtIHBsdWdpbiB3b3VsZFxuICogb3RoZXJ3aXNlIGZhaWwgZXZlcnkgdGVuYW50J3MgYXV0aG9yaW5nIHJ1bGVzLlxuICovXG5hc3luYyBmdW5jdGlvbiBjb21wbGlhbmNlVnVsbldhcm5pbmdzKG9yZ0lkOiBzdHJpbmcsIHJlY29yZDogU2Nhbm5lZFJlY29yZCk6IFByb21pc2U8VnVsbldhcm5pbmdbXT4ge1xuICBpZiAoaXNTeXN0ZW1PcmdJZChvcmdJZCkgfHwgIWhhc0ltYWdlKHJlY29yZCkpIHJldHVybiBbXTtcbiAgY29uc3QgZmFjdHMgPSBkZXJpdmVQbHVnaW5JbWFnZUNvbXBsaWFuY2UocmVjb3JkLCBudWxsKS5hdHRyaWJ1dGVzO1xuICBjb25zdCBhdHRyaWJ1dGVzOiBQbHVnaW5Db21wbGlhbmNlQXR0cmlidXRlcyA9IHsgbmFtZTogcmVjb3JkLm5hbWUsIHZlcnNpb246IHJlY29yZC52ZXJzaW9uLCAuLi5mYWN0cyB9O1xuICB0cnkge1xuICAgIGNvbXBsaWFuY2VDbGllbnQgPz89IGNyZWF0ZUNvbXBsaWFuY2VDbGllbnQoKTtcbiAgICBjb25zdCBhdXRoID0gZ2V0U2VydmljZUF1dGhIZWFkZXIoeyBzZXJ2aWNlTmFtZTogJ3BsdWdpbicsIG9yZ0lkLCByb2xlOiAnbWVtYmVyJyB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb21wbGlhbmNlQ2xpZW50LmRyeVJ1blBsdWdpbihvcmdJZCwgYXR0cmlidXRlcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYXV0aCk7XG4gICAgY29uc3QgcmVsZXZhbnQgPSAodjogQ29tcGxpYW5jZVZpb2xhdGlvbikgPT4gVlVMTl9SVUxFX0ZJRUxEUy5oYXMoZmllbGRSb290KHYuZmllbGQpKTtcbiAgICBjb25zdCBhcyA9IChtb2RlOiAnYmxvY2snIHwgJ3dhcm4nKSA9PiAodjogQ29tcGxpYW5jZVZpb2xhdGlvbik6IFZ1bG5XYXJuaW5nID0+ICh7XG4gICAgICBjb2RlOiAnQ09NUExJQU5DRV9WVUxOX1JVTEUnLFxuICAgICAgc2V2ZXJpdHk6IG1vZGUgPT09ICdibG9jaycgPyAnZXJyb3InIDogJ3dhcm5pbmcnLFxuICAgICAgbWVzc2FnZTogYCR7cmVjb3JkLm5hbWV9QCR7cmVjb3JkLnZlcnNpb259OiAke3YubWVzc2FnZX1gLFxuICAgICAgcnVsZUlkOiB2LnJ1bGVJZCxcbiAgICAgIHJ1bGVOYW1lOiB2LnJ1bGVOYW1lLFxuICAgICAgZmllbGQ6IHYuZmllbGQsXG4gICAgICBtb2RlLFxuICAgIH0pO1xuICAgIHJldHVybiBbLi4ucmVzdWx0LnZpb2xhdGlvbnMuZmlsdGVyKHJlbGV2YW50KS5tYXAoYXMoJ2Jsb2NrJykpLCAuLi5yZXN1bHQud2FybmluZ3MuZmlsdGVyKHJlbGV2YW50KS5tYXAoYXMoJ3dhcm4nKSldO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gW3sgY29kZTogJ0NPTVBMSUFOQ0VfVU5BVkFJTEFCTEUnLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiBgWW91ciBvcmdhbml6YXRpb24ncyBwbHVnaW4gdnVsbmVyYWJpbGl0eSBydWxlcyBjb3VsZCBub3QgYmUgY2hlY2tlZCBmb3IgJHtyZWNvcmQubmFtZX1AJHtyZWNvcmQudmVyc2lvbn0gKCR7ZXJyb3JNZXNzYWdlKGVycil9KS5gIH1dO1xuICB9XG59XG4iXX0=
|