@workflow/core 5.0.0-beta.30 → 5.0.0-beta.32
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/dist/attribute-changes.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/runtime/start.d.ts +1 -1
- package/dist/runtime/start.js +1 -1
- package/dist/runtime/step-executor.js +2 -2
- package/dist/runtime/step-latency.d.ts +1 -1
- package/dist/runtime/step-latency.js +2 -2
- package/dist/runtime/suspension-handler.js +2 -2
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +65 -9
- package/dist/set-attributes.d.ts +12 -7
- package/dist/set-attributes.d.ts.map +1 -1
- package/dist/set-attributes.js +12 -7
- package/dist/step/context-storage.d.ts +1 -1
- package/dist/step/context-storage.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/workflow/index.d.ts +1 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -2
- package/dist/workflow/set-attributes.d.ts +20 -16
- package/dist/workflow/set-attributes.d.ts.map +1 -1
- package/dist/workflow/set-attributes.js +19 -19
- package/docs/api-reference/index.mdx +2 -2
- package/docs/api-reference/{experimental-set-attributes.mdx → set-attributes.mdx} +14 -14
- package/package.json +4 -4
|
@@ -457,7 +457,7 @@ export async function executeStep(params) {
|
|
|
457
457
|
encryptionKey,
|
|
458
458
|
// Turbo optimistic start runs this body before `run_started` is
|
|
459
459
|
// durable. Expose the barrier so a direct step-body world write
|
|
460
|
-
// (e.g. `
|
|
460
|
+
// (e.g. `setAttributes`) can order itself after the
|
|
461
461
|
// run exists. Undefined on the await path (run already durable).
|
|
462
462
|
runReadyBarrier: optimisticStart
|
|
463
463
|
? params.runReadyBarrier
|
|
@@ -815,4 +815,4 @@ export async function executeStep(params) {
|
|
|
815
815
|
return { type: 'completed', hasPendingOps: !opsSettled, inlineDelta };
|
|
816
816
|
});
|
|
817
817
|
}
|
|
818
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3N0ZXAtZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2Isb0JBQW9CLEdBQ3JCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixTQUFTLEVBQ1QsZUFBZSxHQUNoQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsaUNBQWlDLEdBQ2xDLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLGdCQUFnQixHQUNqQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssU0FBUyxNQUFNLHNDQUFzQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsd0JBQXdCLEdBQ3pCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIseUNBQXlDLEdBQzFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsMkJBQTJCLEdBRzVCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0FBRW5DOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGtCQUFrQixDQUN6QixNQUF1RSxFQUN2RSxTQUFrQjtJQUVsQixJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3BFLE9BQU87UUFDTCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxJQUFJLEtBQUs7S0FDakMsQ0FBQztBQUNKLENBQUM7QUFzSEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLE1BQTBCO0lBRTFCLE1BQU0sRUFDSixLQUFLLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFFBQVEsR0FDVCxHQUFHLE1BQU0sQ0FBQztJQUNYLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQztJQUN0RCxzRUFBc0U7SUFDdEUsd0VBQXdFO0lBQ3hFLE1BQU0sV0FBVyxHQUNmLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsSUFBSSxpQ0FBaUMsQ0FBQztJQUVwRSxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDN0QsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDeEMsSUFBSSxFQUFFLGFBQWEsQ0FBQztZQUNsQixHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQy9CLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDdkMsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztZQUN6QyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQzVCLENBQUMsQ0FBQztRQUVILHFFQUFxRTtRQUNyRSxtRUFBbUU7UUFDbkUsc0VBQXNFO1FBQ3RFLHdFQUF3RTtRQUN4RSxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVwRSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM1QywwRUFBMEU7WUFDMUUsd0VBQXdFO1lBQ3hFLG9FQUFvRTtZQUNwRSxNQUFNLFlBQVksR0FBRyxTQUFTLFFBQVEsNEpBQTRKLENBQUM7WUFDbk0sYUFBYSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsRUFBRTtnQkFDaEUsYUFBYTtnQkFDYixRQUFRO2dCQUNSLE1BQU07YUFDUCxDQUFDLENBQUM7WUFDSCxzRUFBc0U7WUFDdEUsc0VBQXNFO1lBQ3RFLHVFQUF1RTtZQUN2RSxxRUFBcUU7WUFDckUsc0VBQXNFO1lBQ3RFLHVFQUF1RTtZQUN2RSx1RUFBdUU7WUFDdkUsK0RBQStEO1lBQy9ELHdFQUF3RTtZQUN4RSxxRUFBcUU7WUFDckUsc0RBQXNEO1lBQ3RELElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDO29CQUNILG9FQUFvRTtvQkFDcEUscUVBQXFFO29CQUNyRSxrRUFBa0U7b0JBQ2xFLHVEQUF1RDtvQkFDdkQsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQzNCLE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQy9DLENBQUM7b0JBQ0QsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUU7d0JBQ3ZDLFNBQVMsRUFBRSxjQUFjO3dCQUN6QixXQUFXLEVBQUUsb0JBQW9CO3dCQUNqQyxhQUFhLEVBQUUsTUFBTTt3QkFDckIsU0FBUyxFQUFFOzRCQUNULFFBQVE7NEJBQ1IsWUFBWTs0QkFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLGFBQWE7NEJBQzNCLCtEQUErRDs0QkFDL0QsMkRBQTJEOzRCQUMzRCxjQUFjOzRCQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxLQUFLLFNBQVM7Z0NBQ3JDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFO2dDQUMzQyxDQUFDLENBQUMsRUFBRSxDQUFDO3lCQUNSO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUFDLE9BQU8sUUFBUSxFQUFFLENBQUM7b0JBQ2xCLElBQUksbUJBQW1CLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQ3JDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7b0JBQzdCLENBQUM7b0JBQ0QsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7b0JBQzFCLENBQUM7b0JBQ0QsTUFBTSxRQUFRLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO29CQUN2QyxTQUFTLEVBQUUsYUFBYTtvQkFDeEIsV0FBVyxFQUFFLG9CQUFvQjtvQkFDakMsYUFBYSxFQUFFLE1BQU07b0JBQ3JCLFNBQVMsRUFBRTt3QkFDVCxRQUFRO3dCQUNSLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUM3QixJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFDNUIsYUFBYSxFQUNiLE1BQU0sZ0JBQWdCLEVBQUUsRUFDeEIsRUFBRSxFQUNGLFVBQVUsRUFDVixXQUFXLENBQ1o7cUJBQ0Y7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksbUJBQW1CLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQ3hDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzdCLENBQUM7Z0JBQ0QsTUFBTSxXQUFXLENBQUM7WUFDcEIsQ0FBQztZQUNELElBQUksRUFBRSxhQUFhLENBQUM7Z0JBQ2xCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2pDLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7YUFDbEMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSx3QkFBd0IsQ0FBQztRQUVqRSxJQUFJLEVBQUUsYUFBYSxDQUFDO1lBQ2xCLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7U0FDeEMsQ0FBQyxDQUFDO1FBRUgscUVBQXFFO1FBQ3JFLDRFQUE0RTtRQUM1RSw4RUFBOEU7UUFDOUUsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixHQUFZLEVBQ3FCLEVBQUU7WUFDbkMsSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3pCLENBQUMsRUFDRCxPQUFPLEdBQUcsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3hELENBQUM7Z0JBQ0YsYUFBYSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsRUFBRTtvQkFDekQsaUJBQWlCLEVBQUUsVUFBVTtpQkFDOUIsQ0FBQyxDQUFDO2dCQUNILE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLGFBQWEsQ0FBQyxJQUFJLENBQ2hCLGlCQUFpQixhQUFhLDJDQUEyQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUNuRyxDQUFDO2dCQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDMUIsQ0FBQztZQUNELElBQUksbUJBQW1CLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLGFBQWEsQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUU7b0JBQ3RELFFBQVE7b0JBQ1IsTUFBTTtvQkFDTixhQUFhO29CQUNiLEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUN4RCxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxFQUFFLGFBQWEsQ0FBQztvQkFDbEIsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztvQkFDOUIsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQztpQkFDekMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDN0IsQ0FBQztZQUNELElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxhQUFhLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxFQUFFO29CQUMvRCxRQUFRO29CQUNSLE1BQU07b0JBQ04sY0FBYztpQkFDZixDQUFDLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDM0MsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQztRQUVGLDRFQUE0RTtRQUM1RSxxRUFBcUU7UUFDckUsMkVBQTJFO1FBQzNFLHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUsd0VBQXdFO1FBQ3hFLHNFQUFzRTtRQUN0RSxFQUFFO1FBQ0YsNEVBQTRFO1FBQzVFLHlFQUF5RTtRQUN6RSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLDZFQUE2RTtRQUM3RSx3REFBd0Q7UUFDeEQsTUFBTSxlQUFlLEdBQ25CLE1BQU0sQ0FBQyxhQUFhLEtBQUssU0FBUztZQUNsQyxDQUFDLDhCQUE4QixFQUFFO2dCQUMvQixDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsS0FBSyxJQUFJO29CQUNuQyxDQUFDLHlDQUF5QyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXJELElBQUksSUFBVSxDQUFDO1FBQ2YsMkVBQTJFO1FBQzNFLHNFQUFzRTtRQUN0RSx5REFBeUQ7UUFDekQsSUFBSSxzQkFFUyxDQUFDO1FBQ2QsMEVBQTBFO1FBQzFFLHFFQUFxRTtRQUNyRSw0RUFBNEU7UUFDNUUsa0VBQWtFO1FBQ2xFLHVFQUF1RTtRQUN2RSwyRUFBMkU7UUFDM0UsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLElBRXBDLEVBQUU7WUFDRixJQUFJLENBQUMsc0JBQXNCO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1lBQzlDLE1BQU0sT0FBTyxHQUFHLE1BQU0sc0JBQXNCLENBQUM7WUFDN0MsSUFBSSxPQUFPLENBQUMsRUFBRTtnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLE1BQU07Z0JBQUUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQy9CLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsdUVBQXVFO1lBQ3ZFLHNFQUFzRTtZQUN0RSxtRUFBbUU7WUFDbkUsMEVBQTBFO1lBQzFFLG1EQUFtRDtZQUNuRCxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN2RSxHQUFHLEVBQUUsQ0FDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUU7Z0JBQ2pDLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixXQUFXLEVBQUUsb0JBQW9CO2dCQUNqQyxhQUFhLEVBQUUsTUFBTTtnQkFDckIsU0FBUyxFQUFFO29CQUNULFFBQVE7b0JBQ1IsWUFBWTtvQkFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLGFBQWE7b0JBQzNCLGtFQUFrRTtvQkFDbEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEtBQUssU0FBUzt3QkFDckMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUU7d0JBQzNDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQ1I7YUFDRixDQUFDLENBQ0wsQ0FBQztZQUNGLHNCQUFzQixHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQzFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBYSxFQUFFLENBQUMsRUFDN0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQ3ZDLENBQUM7WUFDRixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksR0FBRztnQkFDTCxLQUFLLEVBQUUsYUFBYTtnQkFDcEIsTUFBTTtnQkFDTixRQUFRO2dCQUNSLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixLQUFLLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQzNCLE9BQU8sRUFBRSxDQUFDO2dCQUNWLFNBQVMsRUFBRSxHQUFHO2dCQUNkLFNBQVMsRUFBRSxHQUFHO2dCQUNkLFNBQVMsRUFBRSxHQUFHO2FBQ2YsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sd0VBQXdFO1lBQ3hFLHNFQUFzRTtZQUN0RSxxRUFBcUU7WUFDckUsdUVBQXVFO1lBQ3ZFLHlFQUF5RTtZQUN6RSxtRUFBbUU7WUFDbkUsbURBQW1EO1lBQ25ELElBQUksQ0FBQztnQkFDSCwrREFBK0Q7Z0JBQy9ELGdFQUFnRTtnQkFDaEUsbUVBQW1FO2dCQUNuRSw2REFBNkQ7Z0JBQzdELGlFQUFpRTtnQkFDakUsa0VBQWtFO2dCQUNsRSxNQUFNLGNBQWMsR0FDbEIsTUFBTSxDQUFDLGNBQWMsS0FBSyxTQUFTO29CQUNqQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRTtvQkFDM0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxNQUFNLFdBQVcsR0FBRyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtvQkFDM0QsU0FBUyxFQUFFLGNBQWM7b0JBQ3pCLFdBQVcsRUFBRSxvQkFBb0I7b0JBQ2pDLGFBQWEsRUFBRSxNQUFNO29CQUNyQixTQUFTLEVBQ1AsTUFBTSxDQUFDLGFBQWEsS0FBSyxTQUFTO3dCQUNoQyxDQUFDLENBQUM7NEJBQ0UsUUFBUTs0QkFDUixZQUFZOzRCQUNaLEtBQUssRUFBRSxNQUFNLENBQUMsYUFBYTs0QkFDM0IsR0FBRyxjQUFjO3lCQUNsQjt3QkFDSCxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxjQUFjLEVBQUU7aUJBQ3RDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN0QixNQUFNLElBQUksb0JBQW9CLENBQzVCLDJCQUEyQixNQUFNLDhCQUE4QixDQUNoRSxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDMUIsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksTUFBTTtvQkFBRSxPQUFPLE1BQU0sQ0FBQztnQkFDMUIsTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQztRQUVELGFBQWEsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUU7WUFDNUMsUUFBUTtZQUNSLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUMsQ0FBQztRQUVILElBQUksRUFBRSxhQUFhLENBQUM7WUFDbEIsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDckMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFlLENBQUM7UUFFcEIsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSxvRUFBb0U7UUFDcEUsc0VBQXNFO1FBQ3RFLDJFQUEyRTtRQUMzRSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDcEMsTUFBTSxZQUFZLEdBQUcsU0FBUyxRQUFRLDJCQUEyQixVQUFVLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUM1SCxVQUFVLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFO2dCQUM1QyxhQUFhO2dCQUNiLFFBQVE7Z0JBQ1IsVUFBVTthQUNYLENBQUMsQ0FBQztZQUNILG9FQUFvRTtZQUNwRSxrRUFBa0U7WUFDbEUsaUVBQWlFO1lBQ2pFLHFFQUFxRTtZQUNyRSxtREFBbUQ7WUFDbkQsTUFBTSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUM7b0JBQ0YsWUFBc0IsQ0FBQyxLQUFLLEdBQUcsTUFBTSxnQkFBZ0IsQ0FDcEQsSUFBSSxDQUFDLEtBQUssRUFDVixhQUFhLEVBQ2IsTUFBTSxnQkFBZ0IsRUFBRSxDQUN6QixDQUFDO2dCQUNKLENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLHlDQUF5QztnQkFDM0MsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUU7b0JBQ3ZDLFNBQVMsRUFBRSxhQUFhO29CQUN4QixXQUFXLEVBQUUsb0JBQW9CO29CQUNqQyxhQUFhLEVBQUUsTUFBTTtvQkFDckIsU0FBUyxFQUFFO3dCQUNULFFBQVE7d0JBQ1IsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQzdCLFlBQVksRUFDWixhQUFhLEVBQ2IsTUFBTSxnQkFBZ0IsRUFBRSxFQUN4QixFQUFFLEVBQ0YsVUFBVSxFQUNWLFdBQVcsQ0FDWjtxQkFDRjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNoQyxhQUFhLENBQUMsSUFBSSxDQUNoQixvREFBb0QsRUFDcEQ7d0JBQ0UsYUFBYTt3QkFDYixNQUFNO3dCQUNOLFFBQVE7d0JBQ1IsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO3FCQUNyQixDQUNGLENBQUM7b0JBQ0YsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDN0IsQ0FBQztnQkFDRCxNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUM7WUFDRCxJQUFJLEVBQUUsYUFBYSxDQUFDO2dCQUNsQixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNqQyxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7YUFDdEMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsb0VBQW9FO1FBQ3BFLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsTUFBTSxnQkFBZ0IsR0FBb0IsRUFBRSxDQUFDO1FBQzdDLE1BQU0sR0FBRyxHQUFvQixFQUFFLENBQUM7UUFDaEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXRCLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsaURBQWlEO1FBQ2pELElBQUksZ0JBQWtELENBQUM7UUFFdkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUU3QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNwQixNQUFNLElBQUksb0JBQW9CLENBQzVCLFNBQVMsTUFBTSxnQ0FBZ0MsQ0FDaEQsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3JDLG9FQUFvRTtZQUNwRSxtRUFBbUU7WUFDbkUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsSUFBSSxDQUFDLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sYUFBYSxHQUFHLE1BQU0sS0FBSyxDQUMvQixjQUFjLEVBQ2QsRUFBRSxFQUNGLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTtnQkFDcEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixNQUFNLFFBQVEsR0FBRyxNQUFNLG9CQUFvQixDQUN6QyxJQUFJLENBQUMsS0FBSyxFQUNWLGFBQWEsRUFDYixhQUFhLEVBQ2IsR0FBRyxFQUNILFVBQVUsRUFDVixFQUFFLEVBQ0YsTUFBTSxDQUFDLG9CQUFvQixDQUM1QixDQUFDO2dCQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7Z0JBQzFDLFdBQVcsRUFBRSxhQUFhLENBQUM7b0JBQ3pCLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUNyRCxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUM7aUJBQ2hELENBQUMsQ0FBQztnQkFDSCxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDLENBQ0YsQ0FBQztZQUVGLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDaEMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7WUFDOUMsTUFBTSxlQUFlLEdBQUcscUJBQXFCLENBQzNDLFFBQVE7Z0JBQ04sQ0FBQyxDQUFDLFdBQVcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3JDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLFdBQVcsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQ3hELENBQUM7WUFFRiw4QkFBOEI7WUFDOUIscUVBQXFFO1lBQ3JFLG1FQUFtRTtZQUNuRSxxRUFBcUU7WUFDckUscUVBQXFFO1lBQ3JFLG9FQUFvRTtZQUNwRSx3REFBd0Q7WUFDeEQsSUFBSSxhQUFzQixDQUFDO1lBQzNCLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztZQUUzQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN0QyxnQkFBZ0IsR0FBRywyQkFBMkIsQ0FBQztnQkFDN0MsUUFBUSxFQUFFLE1BQU0sQ0FBQyxlQUFlO2dCQUNoQyxtQkFBbUIsRUFBRSxrQkFBa0I7Z0JBQ3ZDLE9BQU87Z0JBQ1AsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhLEtBQUssU0FBUztnQkFDakQsZUFBZTthQUNoQixDQUFDLENBQUM7WUFDSCxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLGlFQUFpRTtnQkFDakUsaUVBQWlFO2dCQUNqRSxJQUFJLEVBQUUsYUFBYSxDQUFDO29CQUNsQixHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLFNBQVM7d0JBQ3JDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQzt3QkFDN0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDUCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLFNBQVM7d0JBQ3JDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQzt3QkFDN0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDUCxHQUFHLFNBQVMsQ0FBQyx3QkFBd0IsQ0FDbkMsZ0JBQWdCLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FDckM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRTtvQkFDbEQsT0FBTyxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQzdCO3dCQUNFLFlBQVksRUFBRTs0QkFDWixRQUFROzRCQUNSLE1BQU07NEJBQ04sYUFBYSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDOzRCQUN2QyxPQUFPO3lCQUNSO3dCQUNELGdCQUFnQixFQUFFOzRCQUNoQixZQUFZOzRCQUNaLGFBQWE7NEJBQ2IsaUJBQWlCLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQzs0QkFDL0MsR0FBRyxFQUFFLGVBQWU7NEJBQ3BCLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsYUFBYSxFQUFFO3lCQUMxQzt3QkFDRCxvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO3dCQUNqRCxHQUFHO3dCQUNILGdCQUFnQjt3QkFDaEIsV0FBVyxFQUFFLGFBQWEsQ0FBQyxXQUFXO3dCQUN0QyxhQUFhO3dCQUNiLGdFQUFnRTt3QkFDaEUsZ0VBQWdFO3dCQUNoRSxpRUFBaUU7d0JBQ2pFLGlFQUFpRTt3QkFDakUsZUFBZSxFQUFFLGVBQWU7NEJBQzlCLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZTs0QkFDeEIsQ0FBQyxDQUFDLFNBQVM7cUJBQ2QsRUFDRCxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FDbEMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLGFBQWEsR0FBRyxHQUFHLENBQUM7Z0JBQ3BCLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDeEIsQ0FBQztZQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztZQUV4RCx1RUFBdUU7WUFDdkUseUVBQXlFO1lBQ3pFLHlFQUF5RTtZQUN6RSx3RUFBd0U7WUFDeEUsb0VBQW9FO1lBQ3BFLHFFQUFxRTtZQUNyRSx3RUFBd0U7WUFDeEUsdUVBQXVFO1lBQ3ZFLG1CQUFtQjtZQUNuQixrQkFBa0IsQ0FBQyxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRWhFLG1FQUFtRTtZQUNuRSw4Q0FBOEM7WUFDOUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxhQUFhLENBQUM7WUFDdEIsQ0FBQztZQUVELElBQUksRUFBRSxhQUFhLENBQUM7Z0JBQ2xCLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQzthQUNuRCxDQUFDLENBQUM7WUFFSCxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRTtnQkFDakUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixNQUFNLFVBQVUsR0FBRyxNQUFNLHdCQUF3QixDQUMvQyxNQUFNLEVBQ04sYUFBYSxFQUNiLGFBQWEsRUFDYixHQUFHLEVBQ0gsVUFBVSxFQUNWLEtBQUssRUFDTCxLQUFLLEVBQ0wsV0FBVztnQkFDWCxtRUFBbUU7Z0JBQ25FLGtFQUFrRTtnQkFDbEUsK0RBQStEO2dCQUMvRCxlQUFlLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDckQsQ0FBQztnQkFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO2dCQUMxQyxhQUFhLEVBQUUsYUFBYSxDQUFDO29CQUMzQixHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUM7b0JBQzdDLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxPQUFPLFVBQVUsQ0FBQztpQkFDL0MsQ0FBQyxDQUFDO2dCQUNILE9BQU8sVUFBVSxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxDQUFDO1lBRUgsb0VBQW9FO1lBQ3BFLGlFQUFpRTtZQUNqRSxrRUFBa0U7WUFDbEUsb0VBQW9FO1lBQ3BFLGtFQUFrRTtZQUNsRSwrREFBK0Q7WUFDL0QsNkNBQTZDO1lBQzdDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEMsbUVBQW1FO2dCQUNuRSxvRUFBb0U7Z0JBQ3BFLCtEQUErRDtnQkFDL0Qsa0VBQWtFO2dCQUNsRSw2Q0FBNkM7Z0JBQzdDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDaEMsYUFBYSxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRTt3QkFDL0QsYUFBYTt3QkFDYixNQUFNO3dCQUNOLEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO3FCQUN4RCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDOUIsVUFBVSxDQUFDLElBQUksQ0FDYixHQUFHLEVBQUUsQ0FBQyxJQUFhLEVBQ25CLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ04sMERBQTBEO3dCQUMxRCw0QkFBNEI7d0JBQzVCLE1BQU0sWUFBWSxHQUNoQixHQUFHLEVBQUUsSUFBSSxLQUFLLFlBQVksSUFBSSxHQUFHLEVBQUUsSUFBSSxLQUFLLGlCQUFpQixDQUFDO3dCQUNoRSxJQUFJLFlBQVk7NEJBQUUsT0FBTyxJQUFhLENBQUM7d0JBQ3ZDLE1BQU0sR0FBRyxDQUFDO29CQUNaLENBQUMsQ0FDRjtvQkFDRCxJQUFJLE9BQU8sQ0FBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDM0QsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELHNFQUFzRTtZQUN0RSxnRUFBZ0U7WUFDaEUsc0VBQXNFO1lBQ3RFLHVFQUF1RTtZQUN2RSwrREFBK0Q7WUFDL0Qsc0VBQXNFO1lBQ3RFLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sU0FBUyxHQUFHLE1BQU0sd0JBQXdCLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxTQUFTO29CQUFFLE9BQU8sU0FBUyxDQUFDO1lBQ2xDLENBQUM7WUFFRCw0REFBNEQ7WUFDNUQsc0VBQXNFO1lBQ3RFLHNFQUFzRTtZQUN0RSxrRUFBa0U7WUFDbEUsc0VBQXNFO1lBQ3RFLGlDQUFpQztZQUNqQyxFQUFFO1lBQ0Ysd0VBQXdFO1lBQ3hFLHVFQUF1RTtZQUN2RSxtRUFBbUU7WUFDbkUsb0VBQW9FO1lBQ3BFLHlFQUF5RTtZQUN6RSwwRUFBMEU7WUFDMUUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sR0FBWSxFQUFFLENBQUM7WUFDdEIsd0VBQXdFO1lBQ3hFLCtEQUErRDtZQUMvRCx1RUFBdUU7WUFDdkUsbUVBQW1FO1lBQ25FLHNFQUFzRTtZQUN0RSxtRUFBbUU7WUFDbkUsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxTQUFTLEdBQUcsTUFBTSx3QkFBd0IsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLFNBQVM7b0JBQUUsT0FBTyxTQUFTLENBQUM7WUFDbEMsQ0FBQztZQUVELCtEQUErRDtZQUMvRCx5RUFBeUU7WUFDekUsb0VBQW9FO1lBQ3BFLHlFQUF5RTtZQUN6RSwrREFBK0Q7WUFDL0QsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBRUQsTUFBTSxZQUFZLEdBQUcsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbkQsTUFBTSxlQUFlLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsRSxNQUFNLGVBQWUsR0FDbkIsZUFBZSxDQUFDLEtBQUssSUFBSSxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRTdELElBQUksWUFBWSxZQUFZLEtBQUssRUFBRSxDQUFDO2dCQUNsQyxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFNUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztnQkFDbEIsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDdEQsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQztnQkFDdEQsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDbEQsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUN4QixPQUFPO29CQUNMLENBQUMsQ0FBQyxPQUFPO29CQUNULENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQzt3QkFDL0IsQ0FBQyxDQUFDLFdBQVc7d0JBQ2IsQ0FBQyxDQUFDLFdBQVcsQ0FDbEI7Z0JBQ0QsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDO2FBQ3RDLENBQUMsQ0FBQztZQUVILElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QixVQUFVLENBQUMsSUFBSSxDQUFDLCtDQUErQyxFQUFFO29CQUMvRCxhQUFhO29CQUNiLE1BQU07b0JBQ04sT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO2lCQUNyQixDQUFDLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixVQUFVLENBQUMsS0FBSyxDQUNkLDZFQUE2RSxFQUM3RSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxDQUN6RCxDQUFDO2dCQUNGLG1FQUFtRTtnQkFDbkUsa0VBQWtFO2dCQUNsRSxrRUFBa0U7Z0JBQ2xFLHFDQUFxQztnQkFDckMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUN4RCxZQUFzQixDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7Z0JBQ2xELENBQUM7Z0JBQ0QsSUFBSSxDQUFDO29CQUNILE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO3dCQUN2QyxTQUFTLEVBQUUsYUFBYTt3QkFDeEIsV0FBVyxFQUFFLG9CQUFvQjt3QkFDakMsYUFBYSxFQUFFLE1BQU07d0JBQ3JCLFNBQVMsRUFBRTs0QkFDVCxRQUFROzRCQUNSLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUM3QixZQUFZLEVBQ1osYUFBYSxFQUNiLE1BQU0sZ0JBQWdCLEVBQUUsRUFDeEIsRUFBRSxFQUNGLFVBQVUsRUFDVixXQUFXLENBQ1o7NEJBQ0QsR0FBRyxnQkFBZ0I7eUJBQ3BCO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUFDLE9BQU8sV0FBVyxFQUFFLENBQUM7b0JBQ3JCLElBQUksbUJBQW1CLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7d0JBQ3hDLGFBQWEsQ0FBQyxJQUFJLENBQ2hCLG9EQUFvRCxFQUNwRDs0QkFDRSxhQUFhOzRCQUNiLE1BQU07NEJBQ04sUUFBUTs0QkFDUixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87eUJBQzdCLENBQ0YsQ0FBQzt3QkFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO29CQUM3QixDQUFDO29CQUNELE1BQU0sV0FBVyxDQUFDO2dCQUNwQixDQUFDO2dCQUNELElBQUksRUFBRSxhQUFhLENBQUM7b0JBQ2xCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7b0JBQ2pDLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7aUJBQ2xDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQzVCLENBQUM7WUFFRCw4Q0FBOEM7WUFDOUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUVwQyxJQUFJLEVBQUUsYUFBYSxDQUFDO2dCQUNsQixHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO2dCQUN4QyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO2FBQ3hDLENBQUMsQ0FBQztZQUVILElBQUksY0FBYyxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsc0JBQXNCO2dCQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDcEMsVUFBVSxDQUFDLEtBQUssQ0FDZCx3REFBd0QsRUFDeEQ7b0JBQ0UsYUFBYTtvQkFDYixRQUFRO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDckIsVUFBVTtvQkFDVixVQUFVLEVBQUUsZUFBZTtpQkFDNUIsQ0FDRixDQUFDO2dCQUNGLE1BQU0sWUFBWSxHQUFHLFNBQVMsUUFBUSxrQkFBa0IsVUFBVSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDOUksa0VBQWtFO2dCQUNsRSxtRUFBbUU7Z0JBQ25FLDREQUE0RDtnQkFDNUQsK0JBQStCO2dCQUMvQixNQUFNLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDakQsWUFBc0IsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO2dCQUNwQyxJQUFJLGVBQWU7b0JBQUUsWUFBWSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7Z0JBQzFELElBQUksQ0FBQztvQkFDSCxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTt3QkFDdkMsU0FBUyxFQUFFLGFBQWE7d0JBQ3hCLFdBQVcsRUFBRSxvQkFBb0I7d0JBQ2pDLGFBQWEsRUFBRSxNQUFNO3dCQUNyQixTQUFTLEVBQUU7NEJBQ1QsUUFBUTs0QkFDUixLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FDN0IsWUFBWSxFQUNaLGFBQWEsRUFDYixNQUFNLGdCQUFnQixFQUFFLEVBQ3hCLEVBQUUsRUFDRixVQUFVLEVBQ1YsV0FBVyxDQUNaOzRCQUNELEdBQUcsZ0JBQWdCO3lCQUNwQjtxQkFDRixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFBQyxPQUFPLFdBQVcsRUFBRSxDQUFDO29CQUNyQixJQUFJLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO3dCQUN4QyxhQUFhLENBQUMsSUFBSSxDQUNoQixvREFBb0QsRUFDcEQ7NEJBQ0UsYUFBYTs0QkFDYixNQUFNOzRCQUNOLFFBQVE7NEJBQ1IsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPO3lCQUM3QixDQUNGLENBQUM7d0JBQ0YsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztvQkFDN0IsQ0FBQztvQkFDRCxNQUFNLFdBQVcsQ0FBQztnQkFDcEIsQ0FBQztnQkFDRCxJQUFJLEVBQUUsYUFBYSxDQUFDO29CQUNsQixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO29CQUNqQyxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7aUJBQ3RDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQzVCLENBQUM7WUFFRCxvQkFBb0I7WUFDcEIsSUFBSSxjQUFjLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0RBQWtELEVBQUU7b0JBQ2xFLGFBQWE7b0JBQ2IsUUFBUTtvQkFDUixPQUFPLEVBQUUsY0FBYztvQkFDdkIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO2lCQUNyQixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsRUFBRTtvQkFDekQsYUFBYTtvQkFDYixRQUFRO29CQUNSLE9BQU8sRUFBRSxjQUFjO29CQUN2QixVQUFVLEVBQUUsZUFBZTtpQkFDNUIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELGdFQUFnRTtZQUNoRSw4REFBOEQ7WUFDOUQsMkRBQTJEO1lBQzNELElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDL0MsR0FBYSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7WUFDekMsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtvQkFDdkMsU0FBUyxFQUFFLGVBQWU7b0JBQzFCLFdBQVcsRUFBRSxvQkFBb0I7b0JBQ2pDLGFBQWEsRUFBRSxNQUFNO29CQUNyQixTQUFTLEVBQUU7d0JBQ1QsUUFBUTt3QkFDUixLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FDN0IsR0FBRyxFQUNILGFBQWEsRUFDYixNQUFNLGdCQUFnQixFQUFFLEVBQ3hCLEVBQUUsRUFDRixVQUFVLEVBQ1YsV0FBVyxDQUNaO3dCQUNELEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztxQkFDOUQ7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksbUJBQW1CLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQ3pDLGFBQWEsQ0FBQyxJQUFJLENBQ2hCLHFEQUFxRCxFQUNyRDt3QkFDRSxhQUFhO3dCQUNiLE1BQU07d0JBQ04sUUFBUTt3QkFDUixPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU87cUJBQzlCLENBQ0YsQ0FBQztvQkFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixDQUFDO2dCQUNELE1BQU0sWUFBWSxDQUFDO1lBQ3JCLENBQUM7WUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUM3QixDQUFDLEVBQ0QsY0FBYyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDNUQsQ0FBQyxDQUFDLENBQUMsQ0FDTixDQUFDO1lBRUYsSUFBSSxFQUFFLGFBQWEsQ0FBQztnQkFDbEIsR0FBRyxTQUFTLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDO2dCQUNwRCxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7YUFDdEMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDM0MsQ0FBQztRQUVELHVFQUF1RTtRQUN2RSwwRUFBMEU7UUFDMUUsbUVBQW1FO1FBQ25FLElBQUksZUFBZ0UsQ0FBQztRQUNyRSxJQUFJLENBQUM7WUFDSCxlQUFlLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDekMsYUFBYSxFQUNiO2dCQUNFLFNBQVMsRUFBRSxnQkFBZ0I7Z0JBQzNCLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLGFBQWEsRUFBRSxNQUFNO2dCQUNyQixTQUFTLEVBQUU7b0JBQ1QsUUFBUTtvQkFDUixZQUFZO29CQUNaLE1BQU0sRUFBRSxNQUFvQjtvQkFDNUIsR0FBRyxnQkFBZ0I7aUJBQ3BCO2FBQ0YsRUFDRCxNQUFNLENBQUMsc0JBQXNCLEtBQUssU0FBUztnQkFDekMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRTtnQkFDaEQsQ0FBQyxDQUFDLFNBQVMsQ0FDZCxDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxhQUFhLENBQUMsSUFBSSxDQUNoQix1REFBdUQsRUFDdkQ7b0JBQ0UsYUFBYTtvQkFDYixNQUFNO29CQUNOLFFBQVE7b0JBQ1IsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO2lCQUNyQixDQUNGLENBQUM7Z0JBQ0YsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLFVBQVUsQ0FBQyxJQUFJLENBQUMsK0NBQStDLEVBQUU7b0JBQy9ELGFBQWE7b0JBQ2IsTUFBTTtvQkFDTixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87aUJBQ3JCLENBQUMsQ0FBQztnQkFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FDcEMsZUFBZSxFQUNmLE1BQU0sQ0FBQyxzQkFBc0IsS0FBSyxTQUFTLENBQzVDLENBQUM7UUFFRixJQUFJLEVBQUUsYUFBYSxDQUFDO1lBQ2xCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7WUFDcEMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLE9BQU8sTUFBTSxDQUFDO1NBQzNDLENBQUMsQ0FBQztRQUVILElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQixVQUFVLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFO2dCQUN2QyxhQUFhO2dCQUNiLFFBQVE7Z0JBQ1IsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNO2FBQ3JCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCx5REFBeUQ7UUFDekQsd0RBQXdEO1FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN4RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlcyB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQge1xuICBFbnRpdHlDb25mbGljdEVycm9yLFxuICBGYXRhbEVycm9yLFxuICBSZXRyeWFibGVFcnJvcixcbiAgUnVuRXhwaXJlZEVycm9yLFxuICBUaHJvdHRsZUVycm9yLFxuICBUb29FYXJseUVycm9yLFxuICBXb3JrZmxvd1J1bnRpbWVFcnJvcixcbn0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQge1xuICBjcmVhdGVXb3JrZmxvd0Jhc2VVcmwsXG4gIHBsdXJhbGl6ZSxcbiAgc3RlcERpc3BsYXlOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudCwgU2VyaWFsaXplZERhdGEsIFN0ZXAsIFdvcmxkIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7XG4gIFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQ09NUFJFU1NJT04sXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IENyeXB0b0tleSB9IGZyb20gJy4uL2VuY3J5cHRpb24uanMnO1xuaW1wb3J0IHsgcnVudGltZUxvZ2dlciwgc3RlcExvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBnZXRTdGVwRnVuY3Rpb24gfSBmcm9tICcuLi9wcml2YXRlLmpzJztcbmltcG9ydCB7XG4gIGNhbmNlbEFib3J0UmVhZGVycyxcbiAgZGVoeWRyYXRlU3RlcEVycm9yLFxuICBkZWh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUsXG4gIGh5ZHJhdGVTdGVwQXJndW1lbnRzLFxuICBoeWRyYXRlU3RlcEVycm9yLFxufSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGNvbnRleHRTdG9yYWdlIH0gZnJvbSAnLi4vc3RlcC9jb250ZXh0LXN0b3JhZ2UuanMnO1xuaW1wb3J0ICogYXMgQXR0cmlidXRlIGZyb20gJy4uL3RlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy5qcyc7XG5pbXBvcnQgeyB0cmFjZSB9IGZyb20gJy4uL3RlbGVtZXRyeS5qcyc7XG5pbXBvcnQge1xuICBnZXRFcnJvck5hbWUsXG4gIGdldEVycm9yU3RhY2ssXG4gIG5vcm1hbGl6ZVVua25vd25FcnJvcixcbiAgcHJvbW90ZUFib3J0RXJyb3JUb0ZhdGFsLFxufSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmltcG9ydCB7XG4gIGlzT3B0aW1pc3RpY0lubGluZVN0YXJ0RW5hYmxlZCxcbiAgaXNPcHRpbWlzdGljSW5saW5lU3RhcnRFeHBsaWNpdGx5RGlzYWJsZWQsXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGdldFBvcnRMYXp5IH0gZnJvbSAnLi9nZXQtcG9ydC1sYXp5LmpzJztcbmltcG9ydCB7IG1lbW9pemVFbmNyeXB0aW9uS2V5IH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7XG4gIGNvbXB1dGVTdGVwTGF0ZW5jeUV2ZW50RGF0YSxcbiAgdHlwZSBTdGVwTGF0ZW5jeUV2ZW50RGF0YSxcbiAgdHlwZSBTdGVwTGF0ZW5jeVRyYWNraW5nLFxufSBmcm9tICcuL3N0ZXAtbGF0ZW5jeS5qcyc7XG5pbXBvcnQgeyBzYWZlV2FpdFVudGlsIH0gZnJvbSAnLi93YWl0LXVudGlsLmpzJztcblxuY29uc3QgREVGQVVMVF9TVEVQX01BWF9SRVRSSUVTID0gMztcblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBpbmxpbmUgZGVsdGEgZnJvbSBhIHN0ZXAtdGVybWluYWwgYGV2ZW50cy5jcmVhdGVgIHJlc3VsdCxcbiAqIGlmIHRoZSBXb3JsZCBwb3B1bGF0ZWQgb25lLiBBIGRlbHRhIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGVuIHRoZSBjYWxsZXJcbiAqIHJlcXVlc3RlZCBpdCAoYHNpbmNlQ3Vyc29yYCB3YXMgcGFzc2VkKSBhbmQgdGhlIFdvcmxkIHJldHVybmVkIGJvdGhcbiAqIGBldmVudHNgIGFuZCBhIGBjdXJzb3JgOyBvdGhlcndpc2Ugd2UgcmV0dXJuIHVuZGVmaW5lZCBhbmQgdGhlIGNhbGxlclxuICogZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsIGluY3JlbWVudGFsIGBldmVudHMubGlzdGAuIGBoYXNNb3JlYCBkZWZhdWx0c1xuICogdG8gZmFsc2UgKHNpbmdsZSBwYWdlKSB3aGVuIHRoZSBXb3JsZCBvbWl0cyBpdC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdElubGluZURlbHRhKFxuICByZXN1bHQ6IHsgZXZlbnRzPzogRXZlbnRbXTsgY3Vyc29yPzogc3RyaW5nIHwgbnVsbDsgaGFzTW9yZT86IGJvb2xlYW4gfSxcbiAgcmVxdWVzdGVkOiBib29sZWFuXG4pOiBJbmxpbmVFdmVudERlbHRhIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFyZXF1ZXN0ZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICghcmVzdWx0LmV2ZW50cyB8fCByZXN1bHQuY3Vyc29yID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgZXZlbnRzOiByZXN1bHQuZXZlbnRzLFxuICAgIGN1cnNvcjogcmVzdWx0LmN1cnNvcixcbiAgICBoYXNNb3JlOiByZXN1bHQuaGFzTW9yZSA/PyBmYWxzZSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwRXhlY3V0b3JQYXJhbXMge1xuICB3b3JsZDogV29ybGQ7XG4gIHdvcmtmbG93UnVuSWQ6IHN0cmluZztcbiAgLyoqIERlcGxveW1lbnQgdGhhdCBvd25zIHRoZSB3b3JrZmxvdyBydW4sIGZvciBmb3J3YXJkZWQgd3JpdGFibGUgc3RyZWFtcy4gKi9cbiAgd29ya2Zsb3dEZXBsb3ltZW50SWQ/OiBzdHJpbmc7XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nO1xuICB3b3JrZmxvd1N0YXJ0ZWRBdDogbnVtYmVyO1xuICBzdGVwSWQ6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgZW5jcnlwdGlvbktleT86IENyeXB0b0tleTtcbiAgLyoqXG4gICAqIFRoZSB3b3JrZmxvdyBydW4ncyBzcGVjVmVyc2lvbiwgdXNlZCB0byBnYXRlIHBheWxvYWQgY29tcHJlc3Npb24uXG4gICAqIFN0ZXAgb3V0cHV0cy9lcnJvcnMgYXJlIG9ubHkgZ3ppcC1jb21wcmVzc2VkIHdoZW4gdGhlIHJ1biBpcyBtYXJrZWRcbiAgICogYXMgcG9zc2libHkgY29udGFpbmluZyBjb21wcmVzc2VkIHBheWxvYWRzIChzcGVjVmVyc2lvbiA+PSA1KS5cbiAgICovXG4gIHJ1blNwZWNWZXJzaW9uPzogbnVtYmVyO1xuICAvKipcbiAgICogTGF6eSBzdGVwIHN0YXJ0OiB0aGUgYWxyZWFkeS1kZWh5ZHJhdGVkIHN0ZXAgaW5wdXQuIFdoZW4gcHJvdmlkZWQsIHRoZVxuICAgKiBgc3RlcF9zdGFydGVkYCBldmVudCBjYXJyaWVzIHRoaXMgaW5wdXQgc28gdGhlIHdvcmxkIGNyZWF0ZXMgdGhlIHN0ZXAgb25cbiAgICogdGhlIGZseSAobm8gc2VwYXJhdGUgYHN0ZXBfY3JlYXRlZGAgcm91bmQtdHJpcCkuIFNldCBieSB0aGUgb3duZWQtaW5saW5lXG4gICAqIHBhdGggZm9yIHRoZSBzdGVwIHdob3NlIGBzdGVwX2NyZWF0ZWRgIHRoZSBzdXNwZW5zaW9uIGhhbmRsZXIgZGVmZXJyZWQuXG4gICAqIFRoZSB3b3JsZCdzIGF0b21pYyBjcmVhdGUtY2xhaW0gaXMgdGhlIGV4YWN0bHktb25lLW93bmVyIGdhdGU6IGxvc2luZyBpdFxuICAgKiBzdXJmYWNlcyBhcyBgRW50aXR5Q29uZmxpY3RFcnJvcmAg4oaSIGB7IHR5cGU6ICdza2lwcGVkJyB9YCwgc28gYSBoYW5kbGVyXG4gICAqIHRoYXQgZGlkIG5vdCB3aW4gdGhlIGNyZWF0ZSBuZXZlciBydW5zIHRoZSBib2R5LiBPbWl0dGVkIG9uIGV2ZXJ5IG90aGVyXG4gICAqIHBhdGgsIHdoZXJlIHRoZSBzdGVwIGFscmVhZHkgaGFzIGEgYHN0ZXBfY3JlYXRlZGAgYW5kIGBzdGVwX3N0YXJ0ZWRgXG4gICAqIGNhcnJpZXMgbm8gcGF5bG9hZCAodGhlIGxlZ2FjeSBjb250cmFjdCkuXG4gICAqL1xuICBsYXp5U3RlcElucHV0PzogU2VyaWFsaXplZERhdGE7XG4gIC8qKlxuICAgKiBJbmxpbmUgc3RlcCBvd25lcnNoaXA6IHRoZSBxdWV1ZSBtZXNzYWdlIElEIG9mIHRoZSBpbnZvY2F0aW9uIHRoaXNcbiAgICogZXhlY3V0ZVN0ZXAgY2FsbCBydW5zIGluIChmcm9tIHRoZSBxdWV1ZSBoYW5kbGVyJ3MgbWV0YSkuIFdoZW4gc2V0LCB0aGVcbiAgICogYHN0ZXBfc3RhcnRlZGAgdGhpcyBjYWxsIHNlbmRzIGlzIHN0YW1wZWQgd2l0aCBpdCDigJQgb24gdGhlIGxhenkgcGF0aHNcbiAgICogKHdoZXJlIGBsYXp5U3RlcElucHV0YCBpcyBwcmVzZW50KSBhbmQgb24gdGhlIG93bmVkLXJlY292ZXJ5IGJhcmUgc3RhcnRcbiAgICogKHdoZXJlIGl0IGlzIG5vdDsgdGhlIHJlLXN0YW1wIGtlZXBzIGEgcmVjb3ZlcmVkIHN0ZXAgcmVhZGFibGUgYXMgb3duZWRcbiAgICogYnkgdGhpcyBtZXNzYWdlLCBzaW5jZSBvd25lcnNoaXAgZGVyaXZlcyBmcm9tIHRoZSBMQVRFU1Qgc3RhcnQpLiBXYWtlXG4gICAqIHJlcGxheXMgdGhhdCBvYnNlcnZlIGFuIGFjdGl2ZWx5LW93bmVkIHN0ZXAgc3VwcHJlc3MgdGhlIGltbWVkaWF0ZVxuICAgKiByZXF1ZXVlIGFuZCBlbnF1ZXVlIGEgZGVsYXllZCBiYWNrc3RvcCBpbnN0ZWFkLiBPbWl0dGVkIG9uIHRoZVxuICAgKiBiYWNrZ3JvdW5kLXN0ZXAgcGF0aCwgd2hvc2UgYmFyZSBzdGFydCBpbnRlbnRpb25hbGx5IGNsZWFycyBvd25lcnNoaXBcbiAgICogKHRoZSBzdGVwIGlzIHF1ZXVlLW93bmVkIGZyb20gdGhhdCBwb2ludCkuXG4gICAqL1xuICBvd25lck1lc3NhZ2VJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIElubGluZS1kZWx0YSBvcHRpbWl6YXRpb24gKG9wdC1pbikuIFdoZW4gcHJvdmlkZWQsIHRoZSBjdXJzb3Igb2YgdGhlXG4gICAqIGV2ZW50IGxvZyBhcyBvYnNlcnZlZCBieSB0aGUgY2FsbGVyICpiZWZvcmUqIHRoaXMgc3RlcCdzIGV2ZW50cyB3ZXJlXG4gICAqIHdyaXR0ZW4uIEl0IGlzIHRocmVhZGVkIGludG8gdGhlIHN0ZXAtdGVybWluYWwgYGV2ZW50cy5jcmVhdGVgIHNvIGFcbiAgICogc3VwcG9ydGluZyBXb3JsZCBjYW4gcmV0dXJuIHRoZSBkZWx0YSBvZiBldmVudHMgd3JpdHRlbiBzaW5jZSAoc2VlXG4gICAqIHtAbGluayBpbXBvcnQoJ0B3b3JrZmxvdy93b3JsZCcpLkNyZWF0ZUV2ZW50UGFyYW1zLnNpbmNlQ3Vyc29yfSkuXG4gICAqIE9ubHkgc2V0IHRoaXMgd2hlbiBgY29ycmVsYXRpb25JZGAtYmFzZWQgb3duZXJzaGlwIGd1YXJhbnRlZXMgdGhpc1xuICAgKiBoYW5kbGVyIGlzIHRoZSBzb2xlIGlubGluZSB3cml0ZXIgZm9yIHRoZSBydW4gb24gdGhpcyBpdGVyYXRpb24uXG4gICAqL1xuICBpbmxpbmVEZWx0YVNpbmNlQ3Vyc29yPzogc3RyaW5nO1xuICAvKipcbiAgICogRm9yY2Ugb3B0aW1pc3RpYyBpbmxpbmUgc3RhcnQgcmVnYXJkbGVzcyBvZlxuICAgKiBgV09SS0ZMT1dfT1BUSU1JU1RJQ19JTkxJTkVfU1RBUlRgLiBTZXQgYnkgdHVyYm8gbW9kZSBvbiB0aGUgZmlyc3QgZGVsaXZlcnlcbiAgICogb2YgdGhlIGZpcnN0IGludm9jYXRpb24sIHdoZXJlIGZvcmNpbmcgaXQgaXMgc2FmZTogdGhlcmUgaXMgbm8gY29uY3VycmVudFxuICAgKiBwZWVyIGhhbmRsZXIgdG8gcmFjZSB0aGUgY3JlYXRlLWNsYWltLCBzbyB0aGUgYm9keSBydW5zIGV4YWN0bHkgb25jZS4gT25seVxuICAgKiBtZWFuaW5nZnVsIHRvZ2V0aGVyIHdpdGggYGxhenlTdGVwSW5wdXRgIChhIGJyYW5kLW5ldyBsYXp5IHN0ZXApLlxuICAgKi9cbiAgZm9yY2VPcHRpbWlzdGljU3RhcnQ/OiBib29sZWFuO1xuICAvKipcbiAgICogVHVyYm8gbW9kZSBvbmx5OiBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBiYWNrZ3JvdW5kZWRcbiAgICogYHJ1bl9zdGFydGVkYCBoYXMgbGFuZGVkLiBXaGVuIHNldCwgdGhlIGxhenkvb3B0aW1pc3RpYyBgc3RlcF9zdGFydGVkYCBpc1xuICAgKiBjaGFpbmVkIG9uIGl0IHNvIHRoZSBzdGVwIGlzIG5ldmVyIGNyZWF0ZWQgYmVmb3JlIGl0cyBydW4gZXhpc3RzLiBUaGUgYm9keVxuICAgKiBzdGlsbCBydW5zIGltbWVkaWF0ZWx5IGFnYWluc3QgbG9jYWxseS1zeW50aGVzaXplZCBzdGF0ZSDigJQgb25seSB0aGUgbmV0d29ya1xuICAgKiB3cml0ZSB3YWl0cyDigJQgc28gdGhlIGBydW5fc3RhcnRlZGAgcm91bmQtdHJpcCBvdmVybGFwcyB0aGUgYm9keS4gYHVuZGVmaW5lZGBcbiAgICogb3V0c2lkZSB0dXJibywgd2hlcmUgYHJ1bl9zdGFydGVkYCB3YXMgYWxyZWFkeSBhd2FpdGVkIHVwIGZyb250LlxuICAgKi9cbiAgcnVuUmVhZHlCYXJyaWVyPzogUHJvbWlzZTx1bmtub3duPjtcbiAgLyoqXG4gICAqIExhdGVuY3kgdGVsZW1ldHJ5IChUVEZTIC8gU1RTTyk6IGVsaWdpYmlsaXR5IGFuZCBhbmNob3IgdGltZXN0YW1wcyBkZWNpZGVkXG4gICAqIGJ5IHRoZSBvcmNoZXN0cmF0b3IuIFdoZW4gc2V0LCB0aGlzIGV4ZWN1dG9yIGNvbXB1dGVzIHRoZSBmaW5hbCB2YWx1ZXNcbiAgICogYWdhaW5zdCB0aGUgd2FsbCBjbG9jayB0YWtlbiBpbW1lZGlhdGVseSBiZWZvcmUgdXNlciBjb2RlIHJ1bnMgYW5kXG4gICAqIGF0dGFjaGVzIHRoZW0gdG8gdGhlIHN0ZXAncyB0ZXJtaW5hbCBldmVudC4gU2V0IG9ubHkgZm9yIHRoZSBmaXJzdCBzdGVwIG9mXG4gICAqIGFuIGlubGluZSBiYXRjaCwgYW5kIG9ubHkgb24gZmlyc3QtYXR0ZW1wdCBleGVjdXRpb25zIHRoYXQgcXVhbGlmeSDigJQgc2VlXG4gICAqIHJ1bnRpbWUvc3RlcC1sYXRlbmN5LnRzLlxuICAgKi9cbiAgbGF0ZW5jeVRyYWNraW5nPzogU3RlcExhdGVuY3lUcmFja2luZztcbn1cblxuLyoqXG4gKiBJbmxpbmUtZGVsdGEgcmV0dXJuZWQgYnkgYSBzdGVwLXRlcm1pbmFsIHdyaXRlIHdoZW4gdGhlIGNhbGxlciBwYXNzZWRcbiAqIHtAbGluayBTdGVwRXhlY3V0b3JQYXJhbXMuaW5saW5lRGVsdGFTaW5jZUN1cnNvcn0gYW5kIHRoZSBXb3JsZCBzdXBwb3J0c1xuICogdGhlIG9wdGltaXphdGlvbi4gYGV2ZW50c2AgYXJlIHRoZSBldmVudHMgd3JpdHRlbiBzdHJpY3RseSBhZnRlciB0aGF0XG4gKiBjdXJzb3IgKHRoaXMgc3RlcCdzIGV2ZW50cyBwbHVzIGFueXRoaW5nIGludGVybGVhdmVkIGluLWJhbmQpLCBgY3Vyc29yYFxuICogaXMgdGhlIHBvc2l0aW9uIHBhc3QgdGhlIGxhc3Qgb25lLCBhbmQgYGhhc01vcmVgIHNpZ25hbHMgYSBmdXJ0aGVyIHBhZ2VcbiAqICh0aGUgY2FsbGVyIHRoZW4gZmFsbHMgYmFjayB0byBhIGZ1bGwgaW5jcmVtZW50YWwgZmV0Y2gpLiBBYnNlbnQgd2hlblxuICogdGhlIFdvcmxkIGRpZCBub3QgcmV0dXJuIGEgZGVsdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lRXZlbnREZWx0YSB7XG4gIGV2ZW50czogRXZlbnRbXTtcbiAgY3Vyc29yOiBzdHJpbmcgfCBudWxsO1xuICBoYXNNb3JlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhIHN0ZXAgZXhlY3V0aW9uIGF0dGVtcHQuIFRoZSBjYWxsZXIgZGVjaWRlcyB3aGF0IHRvIGRvXG4gKiBiYXNlZCBvbiB0aGUgcmVzdWx0IHR5cGUgKGUuZy4sIHF1ZXVlIHdvcmtmbG93IGNvbnRpbnVhdGlvbiwgcmVwbGF5IGlubGluZSwgZXRjLikuXG4gKlxuICogYGlubGluZURlbHRhYCBpcyBhdHRhY2hlZCB0byBhIGBjb21wbGV0ZWRgIHJlc3VsdCB3aGVuIHRoZSBjYWxsZXJcbiAqIHJlcXVlc3RlZCBpdCB2aWEge0BsaW5rIFN0ZXBFeGVjdXRvclBhcmFtcy5pbmxpbmVEZWx0YVNpbmNlQ3Vyc29yfSBhbmRcbiAqIHRoZSBXb3JsZCByZXR1cm5lZCBvbmUuIFN0ZXAgZmFpbHVyZXMgYXJlIHJhcmUgYW5kIG5vdCB0aGUgaW5saW5lXG4gKiBvcHRpbWl6YXRpb24ncyB0YXJnZXQsIHNvIHRoZSBgZmFpbGVkYCBwYXRoIGxlYXZlcyBpdCB0byB0aGUgbm9ybWFsXG4gKiBpbmNyZW1lbnRhbCBmZXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgU3RlcEV4ZWN1dGlvblJlc3VsdCA9XG4gIHwge1xuICAgICAgdHlwZTogJ2NvbXBsZXRlZCc7XG4gICAgICBoYXNQZW5kaW5nT3BzPzogYm9vbGVhbjtcbiAgICAgIGlubGluZURlbHRhPzogSW5saW5lRXZlbnREZWx0YTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnZmFpbGVkJyB9XG4gIHwgeyB0eXBlOiAncmV0cnknOyB0aW1lb3V0U2Vjb25kczogbnVtYmVyIH1cbiAgfCB7IHR5cGU6ICdza2lwcGVkJyB9XG4gIHwgeyB0eXBlOiAnZ29uZScgfVxuICB8IHsgdHlwZTogJ3Rocm90dGxlZCc7IHRpbWVvdXRTZWNvbmRzOiBudW1iZXIgfTtcblxuLyoqXG4gKiBFeGVjdXRlcyBhIHNpbmdsZSBzdGVwOiBjcmVhdGVzIHN0ZXBfc3RhcnRlZCBldmVudCwgaHlkcmF0ZXMgaW5wdXQsXG4gKiBydW5zIHRoZSBzdGVwIGZ1bmN0aW9uLCBjcmVhdGVzIHN0ZXBfY29tcGxldGVkL3N0ZXBfZmFpbGVkL3N0ZXBfcmV0cnlpbmcgZXZlbnRzLlxuICpcbiAqIERvZXMgTk9UIHF1ZXVlIHdvcmtmbG93IGNvbnRpbnVhdGlvbiBtZXNzYWdlcyDigJQgdGhlIGNhbGxlciBkZWNpZGVzIHdoYXQgdG8gZG8gbmV4dC5cbiAqIFVzZWQgYnkgYm90aCB0aGUgVjEgc3RlcCBoYW5kbGVyIGFuZCB0aGUgVjIgY29tYmluZWQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVTdGVwKFxuICBwYXJhbXM6IFN0ZXBFeGVjdXRvclBhcmFtc1xuKTogUHJvbWlzZTxTdGVwRXhlY3V0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IHtcbiAgICB3b3JsZCxcbiAgICB3b3JrZmxvd1J1bklkLFxuICAgIHdvcmtmbG93TmFtZSxcbiAgICB3b3JrZmxvd1N0YXJ0ZWRBdCxcbiAgICBzdGVwSWQsXG4gICAgc3RlcE5hbWUsXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGlzVmVyY2VsID0gcHJvY2Vzcy5lbnYuVkVSQ0VMX1VSTCAhPT0gdW5kZWZpbmVkO1xuICAvLyBHYXRlIHBheWxvYWQgY29tcHJlc3Npb24gb24gdGhlIHJ1bidzIHNwZWNWZXJzaW9uOiBvbmx5IHJ1bnMgbWFya2VkXG4gIC8vIGFzIHBvc3NpYmx5IGNvbnRhaW5pbmcgY29tcHJlc3NlZCBwYXlsb2FkcyAoc3BlYyA+PSA1KSBnZXQgZ3ppcCBkYXRhLlxuICBjb25zdCBjb21wcmVzc2lvbiA9XG4gICAgKHBhcmFtcy5ydW5TcGVjVmVyc2lvbiA/PyAwKSA+PSBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQ09NUFJFU1NJT047XG5cbiAgY29uc3Qgc3Bhbk5hbWUgPSBgc3RlcC5leGVjdXRlICR7c3RlcERpc3BsYXlOYW1lKHN0ZXBOYW1lKX1gO1xuICByZXR1cm4gdHJhY2Uoc3Bhbk5hbWUsIHt9LCBhc3luYyAoc3BhbikgPT4ge1xuICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgLi4uQXR0cmlidXRlLlN0ZXBOYW1lKHN0ZXBOYW1lKSxcbiAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lKSxcbiAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd1J1bklkKHdvcmtmbG93UnVuSWQpLFxuICAgICAgLi4uQXR0cmlidXRlLlN0ZXBJZChzdGVwSWQpLFxuICAgIH0pO1xuXG4gICAgLy8gTWVtb2l6ZWQgYWNjZXNzb3IgZm9yIHRoZSBwZXItcnVuIGVuY3J5cHRpb24ga2V5LiBUaGUgZmlyc3QgY2FsbGVyXG4gICAgLy8gKGlucHV0IGh5ZHJhdGlvbiBvbiB0aGUgc3VjY2VzcyBwYXRoLCBvciBvbmUgb2YgdGhlIGVhcmx5LXJldHVyblxuICAgIC8vIGRlaHlkcmF0ZVN0ZXBFcnJvciBwYXRocyBpZiBzdGVwX3N0YXJ0ZWQgZmFpbHMpIHRyaWdnZXJzIHRoZSBhY3R1YWxcbiAgICAvLyBmZXRjaCAvIEhLREYgZGVyaXZhdGlvbjsgc3Vic2VxdWVudCBjYWxsZXJzIGF3YWl0IHRoZSBjYWNoZWQgcHJvbWlzZS5cbiAgICBjb25zdCBnZXRFbmNyeXB0aW9uS2V5ID0gbWVtb2l6ZUVuY3J5cHRpb25LZXkod29ybGQsIHdvcmtmbG93UnVuSWQpO1xuXG4gICAgY29uc3Qgc3RlcEZuID0gZ2V0U3RlcEZ1bmN0aW9uKHN0ZXBOYW1lKTtcbiAgICBpZiAoIXN0ZXBGbiB8fCB0eXBlb2Ygc3RlcEZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBTdGVwIGZ1bmN0aW9uIG5vdCByZWdpc3RlcmVkIOKAlCBmYWlsIHRoZSBzdGVwIGltbWVkaWF0ZWx5IChub3QgdGhlIHJ1bikuXG4gICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIFYxIHN0ZXAgaGFuZGxlciBwYXR0ZXJuOiBjcmVhdGUgc3RlcF9mYWlsZWQgZXZlbnQgc29cbiAgICAgIC8vIHRoZSB3b3JrZmxvdyBjYW4gaGFuZGxlIGl0IGdyYWNlZnVsbHkgdmlhIHRyeS9jYXRjaCBpbiB1c2VyIGNvZGUuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgU3RlcCBcIiR7c3RlcE5hbWV9XCIgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIGN1cnJlbnQgZGVwbG95bWVudC4gVGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIGJ1aWxkIG9yIGJ1bmRsaW5nIGlzc3VlIHRoYXQgY2F1c2VkIHRoZSBzdGVwIHRvIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgZGVwbG95bWVudC5gO1xuICAgICAgcnVudGltZUxvZ2dlci5lcnJvcignU3RlcCBmdW5jdGlvbiBub3QgcmVnaXN0ZXJlZCwgZmFpbGluZyBzdGVwJywge1xuICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgc3RlcElkLFxuICAgICAgfSk7XG4gICAgICAvLyBPbiB0aGUgbGF6eSBpbmxpbmUgcGF0aCB0aGUgc3VzcGVuc2lvbiBoYW5kbGVyIGRlZmVycmVkIHRoaXMgc3RlcCdzXG4gICAgICAvLyBgc3RlcF9jcmVhdGVkYCwgZXhwZWN0aW5nIGV4ZWN1dGVTdGVwIHRvIG1hdGVyaWFsaXplIHRoZSBzdGVwIHZpYSBhXG4gICAgICAvLyBsYXp5IGBzdGVwX3N0YXJ0ZWRgIGNhcnJ5aW5nIGl0cyBpbnB1dC4gV2UgbmV2ZXIgZ2V0IHRoYXQgZmFyIGZvciBhblxuICAgICAgLy8gdW5yZWdpc3RlcmVkIHN0ZXAsIHNvIHRoZSBzdGVwIGVudGl0eSBkb2VzIG5vdCBleGlzdCB5ZXQg4oCUIHdyaXRpbmdcbiAgICAgIC8vIGBzdGVwX2ZhaWxlZGAgc3RyYWlnaHQgYXdheSB3b3VsZCBoaXQgdGhlIHdvcmxkJ3MgXCJzdGVwIG11c3QgZXhpc3RcIlxuICAgICAgLy8gb3JkZXJpbmcgZ3VhcmQgYW5kIHdlZGdlIHRoZSBydW4uIFNlbmQgdGhlIGxhenkgYHN0ZXBfc3RhcnRlZGAgZmlyc3RcbiAgICAgIC8vIChpdCBjcmVhdGVzIHRoZSBzdGVwICsgc3ludGhldGljIGBzdGVwX2NyZWF0ZWRgIGF0b21pY2FsbHkgYW5kIGtlZXBzXG4gICAgICAvLyByZXBsYXkgY29ycmVjdCksIHRoZW4gZmFpbCBpdCBiZWxvdy4gVGhpcyBhbHNvIHByZXNlcnZlcyB0aGVcbiAgICAgIC8vIGV4YWN0bHktb25lLW93bmVyIGd1YXJhbnRlZTogYSBjb25jdXJyZW50IGhhbmRsZXIgdGhhdCB3b24gdGhlIGNyZWF0ZVxuICAgICAgLy8gbWFrZXMgb3VyIGxhenkgYHN0ZXBfc3RhcnRlZGAgcmVqZWN0IHdpdGggRW50aXR5Q29uZmxpY3RFcnJvciDihpIgd2VcbiAgICAgIC8vIHJldHVybiBgc2tpcHBlZGAgYW5kIG5ldmVyIHdyaXRlIHRoZSBmYWlsdXJlIHR3aWNlLlxuICAgICAgaWYgKHBhcmFtcy5sYXp5U3RlcElucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUdXJibzogdGhpcyBsYXp5IGBzdGVwX3N0YXJ0ZWRgIG11c3Qgbm90IHByZWNlZGUgdGhlIGJhY2tncm91bmRlZFxuICAgICAgICAgIC8vIGBydW5fc3RhcnRlZGAuIE9yZGVyIGl0IGFmdGVyIHRoZSBydW4tcmVhZHkgYmFycmllciAoYmVzdC1lZmZvcnQg4oCUXG4gICAgICAgICAgLy8gYSBiYXJyaWVyIHJlamVjdGlvbiBtZWFucyB0aGUgcnVuIGRvZXNuJ3QgZXhpc3QsIGFuZCB0aGUgY3JlYXRlXG4gICAgICAgICAgLy8gYmVsb3cgc3VyZmFjZXMgdGhlIHJlYWwgZXJyb3IpLiBOby1vcCBvdXRzaWRlIHR1cmJvLlxuICAgICAgICAgIGlmIChwYXJhbXMucnVuUmVhZHlCYXJyaWVyKSB7XG4gICAgICAgICAgICBhd2FpdCBwYXJhbXMucnVuUmVhZHlCYXJyaWVyLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZSh3b3JrZmxvd1J1bklkLCB7XG4gICAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX3N0YXJ0ZWQnLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICB3b3JrZmxvd05hbWUsXG4gICAgICAgICAgICAgIGlucHV0OiBwYXJhbXMubGF6eVN0ZXBJbnB1dCxcbiAgICAgICAgICAgICAgLy8gU3RhbXBlZCBmb3IgY29uc2lzdGVuY3kgZXZlbiB0aG91Z2ggdGhpcyBzdGVwIHRlcm1pbmFsLWZhaWxzXG4gICAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGJlbG93IOKAlCB0aGUgbG9nIHNob3VsZCBuZXZlciBzaG93IGFuIHVub3duZWRcbiAgICAgICAgICAgICAgLy8gbGF6eSBzdGFydC5cbiAgICAgICAgICAgICAgLi4uKHBhcmFtcy5vd25lck1lc3NhZ2VJZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7IG93bmVyTWVzc2FnZUlkOiBwYXJhbXMub3duZXJNZXNzYWdlSWQgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoc3RhcnRFcnIpIHtcbiAgICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhzdGFydEVycikpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoUnVuRXhwaXJlZEVycm9yLmlzKHN0YXJ0RXJyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2dvbmUnIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IHN0YXJ0RXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX2ZhaWxlZCcsXG4gICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICBldmVudERhdGE6IHtcbiAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgZXJyb3I6IGF3YWl0IGRlaHlkcmF0ZVN0ZXBFcnJvcihcbiAgICAgICAgICAgICAgbmV3IEZhdGFsRXJyb3IoZXJyb3JNZXNzYWdlKSxcbiAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgYXdhaXQgZ2V0RW5jcnlwdGlvbktleSgpLFxuICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgICAgY29tcHJlc3Npb25cbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChzdGVwRmFpbEVycikge1xuICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhzdGVwRmFpbEVycikpIHtcbiAgICAgICAgICByZXR1cm4geyB0eXBlOiAnc2tpcHBlZCcgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBzdGVwRmFpbEVycjtcbiAgICAgIH1cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnZmFpbGVkJyksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwRmF0YWxFcnJvcih0cnVlKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2ZhaWxlZCcgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhSZXRyaWVzID0gc3RlcEZuLm1heFJldHJpZXMgPz8gREVGQVVMVF9TVEVQX01BWF9SRVRSSUVTO1xuXG4gICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAuLi5BdHRyaWJ1dGUuU3RlcE1heFJldHJpZXMobWF4UmV0cmllcyksXG4gICAgfSk7XG5cbiAgICAvLyBNYXBzIGEgYHN0ZXBfc3RhcnRlZGAgcmVqZWN0aW9uIHRvIGEgdGVybWluYWwgU3RlcEV4ZWN1dGlvblJlc3VsdCxcbiAgICAvLyBzaGFyZWQgYnkgdGhlIGF3YWl0IHBhdGggKGJlbG93KSBhbmQgdGhlIG9wdGltaXN0aWMtc3RhcnQgcmVjb25jaWxpYXRpb24uXG4gICAgLy8gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgZXJyb3IgaXMgbm90IG9uZSB3ZSB0cmFuc2xhdGUgKGNhbGxlciByZXRocm93cykuXG4gICAgY29uc3Qgc3RhcnRFcnJvclRvUmVzdWx0ID0gKFxuICAgICAgZXJyOiB1bmtub3duXG4gICAgKTogU3RlcEV4ZWN1dGlvblJlc3VsdCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICBpZiAoVGhyb3R0bGVFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBNYXRoLm1heChcbiAgICAgICAgICAxLFxuICAgICAgICAgIHR5cGVvZiBlcnIucmV0cnlBZnRlciA9PT0gJ251bWJlcicgPyBlcnIucmV0cnlBZnRlciA6IDFcbiAgICAgICAgKTtcbiAgICAgICAgcnVudGltZUxvZ2dlci5pbmZvKCdUaHJvdHRsZWQgb24gc3RlcF9zdGFydGVkLCBkZWZlcnJpbmcnLCB7XG4gICAgICAgICAgcmV0cnlBZnRlclNlY29uZHM6IHJldHJ5QWZ0ZXIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAndGhyb3R0bGVkJywgdGltZW91dFNlY29uZHM6IHJldHJ5QWZ0ZXIgfTtcbiAgICAgIH1cbiAgICAgIGlmIChSdW5FeHBpcmVkRXJyb3IuaXMoZXJyKSkge1xuICAgICAgICBydW50aW1lTG9nZ2VyLmluZm8oXG4gICAgICAgICAgYFdvcmtmbG93IHJ1biBcIiR7d29ya2Zsb3dSdW5JZH1cIiBoYXMgYWxyZWFkeSBjb21wbGV0ZWQsIHNraXBwaW5nIHN0ZXAgXCIke3N0ZXBJZH1cIjogJHtlcnIubWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdnb25lJyB9O1xuICAgICAgfVxuICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoZXJyKSkge1xuICAgICAgICBydW50aW1lTG9nZ2VyLmRlYnVnKCdTdGVwIGluIHRlcm1pbmFsIHN0YXRlLCBza2lwcGluZycsIHtcbiAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgICB9KTtcbiAgICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBTa2lwcGVkKHRydWUpLFxuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwU2tpcFJlYXNvbignY29tcGxldGVkJyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnc2tpcHBlZCcgfTtcbiAgICAgIH1cbiAgICAgIGlmIChUb29FYXJseUVycm9yLmlzKGVycikpIHtcbiAgICAgICAgY29uc3QgdGltZW91dFNlY29uZHMgPSBNYXRoLm1heCgxLCBlcnIucmV0cnlBZnRlciA/PyAxKTtcbiAgICAgICAgcnVudGltZUxvZ2dlci5kZWJ1ZygnU3RlcCByZXRyeUFmdGVyIHRpbWVzdGFtcCBub3QgeWV0IHJlYWNoZWQnLCB7XG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgc3RlcElkLFxuICAgICAgICAgIHRpbWVvdXRTZWNvbmRzLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3JldHJ5JywgdGltZW91dFNlY29uZHMgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIC8vIE9wdGltaXN0aWMgaW5saW5lIHN0YXJ0OiB3aGVuIHdlIGhvbGQgdGhlIHN0ZXAgaW5wdXQgbG9jYWxseSAobGF6eSBpbmxpbmVcbiAgICAvLyBwYXRoKSBhbmQgdGhlIG9wdGltaXphdGlvbiBpcyBlbmFibGVkLCBmaXJlIGBzdGVwX3N0YXJ0ZWRgIFdJVEhPVVRcbiAgICAvLyBhd2FpdGluZyBhbmQgcnVuIHRoZSBib2R5IGFnYWluc3QgbG9jYWxseS1zeW50aGVzaXplZCBzdGF0ZS4gQSBsYXp5IHN0ZXBcbiAgICAvLyBpcyBhbHdheXMgYnJhbmQtbmV3IOKHkiBhdHRlbXB0IDEsIG5vIHByaW9yIGVycm9yLCBzdGFydGVkIG5vdyDigJQgc28gd2VcbiAgICAvLyBkb24ndCBuZWVkIHRoZSBzZXJ2ZXIgcm91bmQtdHJpcCB0byBiZWdpbi4gV2UgcmVjb25jaWxlIHRoZSBpbi1mbGlnaHRcbiAgICAvLyBgc3RlcF9zdGFydGVkYCBiZWZvcmUgYW55IHRlcm1pbmFsIHdyaXRlIChgcmVjb25jaWxlT3B0aW1pc3RpY1N0YXJ0YCk6IGlmXG4gICAgLy8gaXQgbG9zdCB0aGUgYXRvbWljIGNyZWF0ZS1jbGFpbSAoNDA5KSBvciB0aGUgcnVuIGlzIGdvbmUvdGhyb3R0bGVkLCB3ZVxuICAgIC8vIGRpc2NhcmQgdGhlIGJvZHkgcmVzdWx0LiBSdW5uaW5nIHRoZSBib2R5IGJlZm9yZSBjb25maXJtaW5nIG93bmVyc2hpcCBjYW5cbiAgICAvLyBleGVjdXRlIGEgc3RlcCBtb3JlIHRoYW4gb25jZSB3aGVuIGhhbmRsZXJzIHJhY2Ug4oCUIGlubGluZSBzdGVwIGJvZGllc1xuICAgIC8vIG11c3QgYmUgaWRlbXBvdGVudDsgZGlzYWJsZSB2aWEgV09SS0ZMT1dfT1BUSU1JU1RJQ19JTkxJTkVfU1RBUlQ9MC5cbiAgICAvL1xuICAgIC8vIFR1cmJvIG1vZGUgcGFzc2VzIGBmb3JjZU9wdGltaXN0aWNTdGFydGAgdG8gZW5hYmxlIHRoaXMgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAvLyBlbnYgZmxhZyAoaXRzIHNpbmdsZS1oYW5kbGVyIGd1YXJhbnRlZSByZW1vdmVzIHRoZSByYWNlKS4gQnV0IGl0IHN0aWxsXG4gICAgLy8gZGVmZXJzIHRvIGFuICpleHBsaWNpdCogYFdPUktGTE9XX09QVElNSVNUSUNfSU5MSU5FX1NUQVJUPTBgOiBmb3JjZWRcbiAgICAvLyBvcHRpbWlzdGljIHN0YXJ0IHJ1bnMgdGhlIGJvZHkgYmVmb3JlIGBzdGVwX3N0YXJ0ZWRgL2BydW5fc3RhcnRlZGAgaXNcbiAgICAvLyBjb25maXJtZWQsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIHByb3BlcnR5IGFuIG9wZXJhdG9yIG9wdHMgb3V0IG9mIHdpdGggdGhhdFxuICAgIC8vIGZsYWcsIHNvIGFuIGV4cGxpY2l0IG9wdC1vdXQgd2lucyBvdmVyIHR1cmJvJ3MgZm9yY2UuXG4gICAgY29uc3Qgb3B0aW1pc3RpY1N0YXJ0ID1cbiAgICAgIHBhcmFtcy5sYXp5U3RlcElucHV0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChpc09wdGltaXN0aWNJbmxpbmVTdGFydEVuYWJsZWQoKSB8fFxuICAgICAgICAocGFyYW1zLmZvcmNlT3B0aW1pc3RpY1N0YXJ0ID09PSB0cnVlICYmXG4gICAgICAgICAgIWlzT3B0aW1pc3RpY0lubGluZVN0YXJ0RXhwbGljaXRseURpc2FibGVkKCkpKTtcblxuICAgIGxldCBzdGVwOiBTdGVwO1xuICAgIC8vIFNldHRsZWQgb3V0Y29tZSBvZiB0aGUgaW4tZmxpZ2h0IG9wdGltaXN0aWMgYHN0ZXBfc3RhcnRlZGAuIEhhbmRsZXJzIGFyZVxuICAgIC8vIGF0dGFjaGVkIHN5bmNocm9ub3VzbHkgKGAudGhlbihvaywgZXJyKWApIHNvIGEgZmFzdCByZWplY3Rpb24gbmV2ZXJcbiAgICAvLyBzdXJmYWNlcyBhcyBhbiB1bmhhbmRsZWRSZWplY3Rpb24gd2hpbGUgdGhlIGJvZHkgcnVucy5cbiAgICBsZXQgb3B0aW1pc3RpY1N0YXJ0U2V0dGxlZDpcbiAgICAgIHwgUHJvbWlzZTx7IG9rOiB0cnVlIH0gfCB7IG9rOiBmYWxzZTsgZXJyOiB1bmtub3duIH0+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICAvLyBBd2FpdCB0aGUgb3B0aW1pc3RpYyBgc3RlcF9zdGFydGVkYCBvdXRjb21lIGFuZCB0cmFuc2xhdGUgYSBsb3N0IHJhY2UgL1xuICAgIC8vIHRlcm1pbmFsIHJ1biAvIHRocm90dGxlIGludG8gYSByZXN1bHQgdGhhdCBzaG9ydC1jaXJjdWl0cyB0aGUgYm9keVxuICAgIC8vIG91dHB1dC4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB3ZSBvd24gdGhlIHN0ZXAgYW5kIG1heSB3cml0ZSBpdHMgdGVybWluYWxcbiAgICAvLyBldmVudC4gQSBub24tdHJhbnNsYXRhYmxlIHJlamVjdGlvbiBpcyByZXRocm93biAoc28gYSB0cmFuc2llbnRcbiAgICAvLyBzdGVwX3N0YXJ0ZWQgZmFpbHVyZSBwcm9wYWdhdGVzIHRvIHRoZSBxdWV1ZSBoYW5kbGVyIGZvciByZWRlbGl2ZXJ5LFxuICAgIC8vIGV4YWN0bHkgYXMgb24gdGhlIGF3YWl0IHBhdGgpLiBJZGVtcG90ZW50IOKAlCBzYWZlIHRvIGNhbGwgbW9yZSB0aGFuIG9uY2UuXG4gICAgY29uc3QgcmVjb25jaWxlT3B0aW1pc3RpY1N0YXJ0ID0gYXN5bmMgKCk6IFByb21pc2U8XG4gICAgICBTdGVwRXhlY3V0aW9uUmVzdWx0IHwgdW5kZWZpbmVkXG4gICAgPiA9PiB7XG4gICAgICBpZiAoIW9wdGltaXN0aWNTdGFydFNldHRsZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBzZXR0bGVkID0gYXdhaXQgb3B0aW1pc3RpY1N0YXJ0U2V0dGxlZDtcbiAgICAgIGlmIChzZXR0bGVkLm9rKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgbWFwcGVkID0gc3RhcnRFcnJvclRvUmVzdWx0KHNldHRsZWQuZXJyKTtcbiAgICAgIGlmICghbWFwcGVkKSB0aHJvdyBzZXR0bGVkLmVycjtcbiAgICAgIHJldHVybiBtYXBwZWQ7XG4gICAgfTtcblxuICAgIGlmIChvcHRpbWlzdGljU3RhcnQpIHtcbiAgICAgIC8vIENoYWluIHRoZSBsYXp5IGBzdGVwX3N0YXJ0ZWRgIG9uIHRoZSBydW4tcmVhZHkgYmFycmllciAodHVyYm8gbW9kZSk6XG4gICAgICAvLyB0aGUgc3RlcCBjYW4ndCBiZSBjcmVhdGVkIGJlZm9yZSBpdHMgcnVuIGV4aXN0cywgYnV0IHRoZSBib2R5IGJlbG93XG4gICAgICAvLyBydW5zIGltbWVkaWF0ZWx5IGFnYWluc3Qgc3ludGhlc2l6ZWQgc3RhdGUsIHNvIHRoZSBgcnVuX3N0YXJ0ZWRgXG4gICAgICAvLyByb3VuZC10cmlwIG92ZXJsYXBzIHRoZSBib2R5IHJhdGhlciB0aGFuIGJsb2NraW5nIGl0LiBPdXRzaWRlIHR1cmJvIHRoZVxuICAgICAgLy8gYmFycmllciBpcyB1bmRlZmluZWQgYW5kIHRoaXMgaXMgYSBwbGFpbiBjcmVhdGUuXG4gICAgICBjb25zdCBzdGFydGVkUHJvbWlzZSA9IChwYXJhbXMucnVuUmVhZHlCYXJyaWVyID8/IFByb21pc2UucmVzb2x2ZSgpKS50aGVuKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIHdvcmxkLmV2ZW50cy5jcmVhdGUod29ya2Zsb3dSdW5JZCwge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiAnc3RlcF9zdGFydGVkJyxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgd29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgICBpbnB1dDogcGFyYW1zLmxhenlTdGVwSW5wdXQsXG4gICAgICAgICAgICAgIC8vIElubGluZS1vd25lcnNoaXAgc3RhbXAg4oCUIHNlZSBTdGVwRXhlY3V0b3JQYXJhbXMub3duZXJNZXNzYWdlSWQuXG4gICAgICAgICAgICAgIC4uLihwYXJhbXMub3duZXJNZXNzYWdlSWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8geyBvd25lck1lc3NhZ2VJZDogcGFyYW1zLm93bmVyTWVzc2FnZUlkIH1cbiAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBvcHRpbWlzdGljU3RhcnRTZXR0bGVkID0gc3RhcnRlZFByb21pc2UudGhlbihcbiAgICAgICAgKCkgPT4gKHsgb2s6IHRydWUgYXMgY29uc3QgfSksXG4gICAgICAgIChlcnIpID0+ICh7IG9rOiBmYWxzZSBhcyBjb25zdCwgZXJyIH0pXG4gICAgICApO1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIHN0ZXAgPSB7XG4gICAgICAgIHJ1bklkOiB3b3JrZmxvd1J1bklkLFxuICAgICAgICBzdGVwSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICAgICAgaW5wdXQ6IHBhcmFtcy5sYXp5U3RlcElucHV0LFxuICAgICAgICBhdHRlbXB0OiAxLFxuICAgICAgICBzdGFydGVkQXQ6IG5vdyxcbiAgICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc3RlcF9zdGFydGVkIHZhbGlkYXRlcyBzdGF0ZSBhbmQgcmV0dXJucyB0aGUgc3RlcCBlbnRpdHkuIE9uIHRoZSBsYXp5XG4gICAgICAvLyBpbmxpbmUgcGF0aCB3ZSBhbHNvIGNhcnJ5IHRoZSBzdGVwIGBpbnB1dGAgc28gdGhlIHdvcmxkIGNyZWF0ZXMgdGhlXG4gICAgICAvLyBzdGVwIG9uIHRoZSBmbHkgKG5vIHNlcGFyYXRlIHN0ZXBfY3JlYXRlZCByb3VuZC10cmlwKS4gVGhlIHdvcmxkJ3NcbiAgICAgIC8vIGF0b21pYyBjcmVhdGUtY2xhaW0gbWFrZXMgdGhpcyBleGFjdGx5LW9uZS1vd25lcjogYSBjb25jdXJyZW50IGxvc2VyXG4gICAgICAvLyBnZXRzIEVudGl0eUNvbmZsaWN0RXJyb3IsIG1hcHBlZCB0byBgeyB0eXBlOiAnc2tpcHBlZCcgfWAsIHNvIGl0IG5ldmVyXG4gICAgICAvLyBydW5zIHRoZSBib2R5LiBXaGVuIGBsYXp5U3RlcElucHV0YCBpcyBhYnNlbnQgdGhpcyBpcyB0aGUgbGVnYWN5XG4gICAgICAvLyBzdGVwX3N0YXJ0ZWQgKHN0ZXAgYWxyZWFkeSBjcmVhdGVkLCBubyBwYXlsb2FkKS5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIElubGluZS1vd25lcnNoaXAgc3RhbXA6IHByZXNlbnQgb24gdGhlIGxhenkgcGF0aHMgQU5EIG9uIHRoZVxuICAgICAgICAvLyBvd25lZC1yZWNvdmVyeSBiYXJlIHN0YXJ0IChhIHJlZGVsaXZlcnkgb2YgdGhlIG93bmluZyBtZXNzYWdlXG4gICAgICAgIC8vIHJlLWV4ZWN1dGluZyBpdHMgc3RlcCBtdXN0IHJlLXN0YW1wIOKAlCBvd25lcnNoaXAgZGVyaXZlcyBmcm9tIHRoZVxuICAgICAgICAvLyBsYXRlc3Qgc3RhcnQsIHNvIGFuIHVuc3RhbXBlZCByZWNvdmVyeSBzdGFydCB3b3VsZCByZWFkIGFzXG4gICAgICAgIC8vIFwidW5vd25lZFwiIHRvIGEgbGF0ZXIgd2FrZSkuIFRoZSBiYWNrZ3JvdW5kLXN0ZXAgcGF0aCBwYXNzZXMgbm9cbiAgICAgICAgLy8gb3duZXJNZXNzYWdlSWQsIHNvIGl0cyBiYXJlIHN0YXJ0IGNsZWFycyBvd25lcnNoaXAgYXMgaW50ZW5kZWQuXG4gICAgICAgIGNvbnN0IG93bmVyc2hpcFN0YW1wID1cbiAgICAgICAgICBwYXJhbXMub3duZXJNZXNzYWdlSWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7IG93bmVyTWVzc2FnZUlkOiBwYXJhbXMub3duZXJNZXNzYWdlSWQgfVxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgY29uc3Qgc3RhcnRSZXN1bHQgPSBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX3N0YXJ0ZWQnLFxuICAgICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgICAgICBjb3JyZWxhdGlvbklkOiBzdGVwSWQsXG4gICAgICAgICAgZXZlbnREYXRhOlxuICAgICAgICAgICAgcGFyYW1zLmxhenlTdGVwSW5wdXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICAgICAgd29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgICAgICAgaW5wdXQ6IHBhcmFtcy5sYXp5U3RlcElucHV0LFxuICAgICAgICAgICAgICAgICAgLi4ub3duZXJzaGlwU3RhbXAsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHsgc3RlcE5hbWUsIC4uLm93bmVyc2hpcFN0YW1wIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghc3RhcnRSZXN1bHQuc3RlcCkge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICAgIGBzdGVwX3N0YXJ0ZWQgZXZlbnQgZm9yIFwiJHtzdGVwSWR9XCIgZGlkIG5vdCByZXR1cm4gc3RlcCBlbnRpdHlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBzdGVwID0gc3RhcnRSZXN1bHQuc3RlcDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBtYXBwZWQgPSBzdGFydEVycm9yVG9SZXN1bHQoZXJyKTtcbiAgICAgICAgaWYgKG1hcHBlZCkgcmV0dXJuIG1hcHBlZDtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJ1bnRpbWVMb2dnZXIuZGVidWcoJ1N0ZXAgZXhlY3V0aW9uIGRldGFpbHMnLCB7XG4gICAgICBzdGVwTmFtZSxcbiAgICAgIHN0ZXBJZDogc3RlcC5zdGVwSWQsXG4gICAgICBzdGF0dXM6IHN0ZXAuc3RhdHVzLFxuICAgICAgYXR0ZW1wdDogc3RlcC5hdHRlbXB0LFxuICAgIH0pO1xuXG4gICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cyhzdGVwLnN0YXR1cyksXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0OiB1bmtub3duO1xuXG4gICAgLy8gQ2hlY2sgbWF4IHJldHJpZXMgQUZURVIgc3RlcF9zdGFydGVkIChhdHRlbXB0IHdhcyBqdXN0IGluY3JlbWVudGVkKS5cbiAgICAvLyBPbmx5IGVuZm9yY2Ugd2hlbiB0aGUgc3RlcCBoYXMgYSBwcmV2aW91cyBlcnJvciDigJQgdGhpcyBkaXN0aW5ndWlzaGVzXG4gICAgLy8gYWN0dWFsIHJldHJpZXMgKGZhaWxlZCDihpIgcmV0cnkpIGZyb20gY29uY3VycmVudCBzdGFydHMgKFYyIGlubGluZVxuICAgIC8vIGV4ZWN1dGlvbiBsb29wIGNhbiBjYXVzZSBtdWx0aXBsZSBoYW5kbGVycyB0byBzdGVwX3N0YXJ0ZWQgdGhlIHNhbWVcbiAgICAvLyBzdGVwIHNpbXVsdGFuZW91c2x5LCBpbmZsYXRpbmcgdGhlIGF0dGVtcHQgY291bnRlciB3aXRob3V0IGFueSBmYWlsdXJlKS5cbiAgICBpZiAoc3RlcC5hdHRlbXB0ID4gbWF4UmV0cmllcyArIDEgJiYgc3RlcC5lcnJvcikge1xuICAgICAgY29uc3QgcmV0cnlDb3VudCA9IHN0ZXAuYXR0ZW1wdCAtIDE7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgU3RlcCBcIiR7c3RlcE5hbWV9XCIgZXhjZWVkZWQgbWF4IHJldHJpZXMgKCR7cmV0cnlDb3VudH0gJHtwbHVyYWxpemUoJ3JldHJ5JywgJ3JldHJpZXMnLCByZXRyeUNvdW50KX0pYDtcbiAgICAgIHN0ZXBMb2dnZXIuZXJyb3IoJ1N0ZXAgZXhjZWVkZWQgbWF4IHJldHJpZXMnLCB7XG4gICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICByZXRyeUNvdW50LFxuICAgICAgfSk7XG4gICAgICAvLyBQcmVzZXJ2ZSB0aGUgcHJpb3IgYXR0ZW1wdCdzIHNlcmlhbGl6ZWQgZXJyb3IgYXMgdGhlIGNhdXNlIHNvIHRoZVxuICAgICAgLy8gdW5kZXJseWluZyBmYWlsdXJlIGlzIHJlY292ZXJhYmxlIGZyb20gYHN0ZXAuZXJyb3IuY2F1c2VgIGFmdGVyXG4gICAgICAvLyBoeWRyYXRpb24sIHdpdGhvdXQgZm9yY2luZyBjb25zdW1lcnMgdG8gd2FsayB0aGUgc3RlcF9yZXRyeWluZ1xuICAgICAgLy8gZXZlbnQgaGlzdG9yeS4gQmVzdC1lZmZvcnQ6IGlmIGh5ZHJhdGlvbiBvZiB0aGUgcHJpb3IgYHN0ZXAuZXJyb3JgXG4gICAgICAvLyB0aHJvd3MsIGZhbGwgYmFjayB0byBhIEZhdGFsRXJyb3Igd2l0aG91dCBjYXVzZS5cbiAgICAgIGNvbnN0IHdyYXBwZWRFcnJvciA9IG5ldyBGYXRhbEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICBpZiAoc3RlcC5lcnJvciAhPSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgKHdyYXBwZWRFcnJvciBhcyBFcnJvcikuY2F1c2UgPSBhd2FpdCBoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgc3RlcC5lcnJvcixcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICBhd2FpdCBnZXRFbmNyeXB0aW9uS2V5KClcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJZ25vcmUg4oCUIGJlc3QtZWZmb3J0IGNhdXNlIGF0dGFjaG1lbnQuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUod29ya2Zsb3dSdW5JZCwge1xuICAgICAgICAgIGV2ZW50VHlwZTogJ3N0ZXBfZmFpbGVkJyxcbiAgICAgICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICBlcnJvcjogYXdhaXQgZGVoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgICB3cmFwcGVkRXJyb3IsXG4gICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgIGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKSxcbiAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgIGdsb2JhbFRoaXMsXG4gICAgICAgICAgICAgIGNvbXByZXNzaW9uXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKGVycikpIHtcbiAgICAgICAgICBydW50aW1lTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAnVHJpZWQgZmFpbGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZC4nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnZmFpbGVkJyksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwUmV0cnlFeGhhdXN0ZWQodHJ1ZSksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdmYWlsZWQnIH07XG4gICAgfVxuXG4gICAgLy8gT3BzIHRoYXQgbXVzdCBiZSBkdXJhYmx5IGNvbW1pdHRlZCBiZWZvcmUgc3RlcCBjb21wbGV0aW9uIChlLmcuIGFcbiAgICAvLyBzdGVwLWluaXRpYXRlZCBhYm9ydCdzIGhvb2tfcmVjZWl2ZWQgZXZlbnQpLiBTZWUgU3RlcENvbnRleHQuIERlY2xhcmVkXG4gICAgLy8gb3V0c2lkZSB0aGUgdHJ5IHNvIHRoZSBmYWlsdXJlIHBhdGggYmVsb3cgY2FuIGFsc28gZHJhaW4gdGhlbS5cbiAgICBjb25zdCBwcmVDb21wbGV0aW9uT3BzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcbiAgICBjb25zdCBvcHM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgIGxldCBvcHNTZXR0bGVkID0gdHJ1ZTtcblxuICAgIC8vIExhdGVuY3kgdGVsZW1ldHJ5IHRvIGF0dGFjaCB0byB0aGlzIHN0ZXAncyB0ZXJtaW5hbCBldmVudC4gQ29tcHV0ZWRcbiAgICAvLyByaWdodCBiZWZvcmUgdXNlciBjb2RlIHJ1bnM7IGRlY2xhcmVkIGhlcmUgc28gdGhlIGZhaWx1cmUgcGF0aCAodGhlXG4gICAgLy8gY2F0Y2ggYmVsb3cpIGNhbiBhdHRhY2ggaXQgdG8gc3RlcF9mYWlsZWQgdG9vLlxuICAgIGxldCBsYXRlbmN5RXZlbnREYXRhOiBTdGVwTGF0ZW5jeUV2ZW50RGF0YSB8IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdHRlbXB0ID0gc3RlcC5hdHRlbXB0O1xuXG4gICAgICBpZiAoIXN0ZXAuc3RhcnRlZEF0KSB7XG4gICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICBgU3RlcCBcIiR7c3RlcElkfVwiIGhhcyBubyBcInN0YXJ0ZWRBdFwiIHRpbWVzdGFtcGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0ZXBTdGFydGVkQXQgPSBzdGVwLnN0YXJ0ZWRBdDtcbiAgICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgZW5jcnlwdGlvbiBrZXkgd2hlbiBhdmFpbGFibGUsIG90aGVyd2lzZSByZXNvbHZlXG4gICAgICAvLyB0aHJvdWdoIHRoZSBtZW1vaXplZCBhY2Nlc3NvciBkZWNsYXJlZCBhdCB0aGUgdG9wIG9mIHRoaXMgdHJhY2UuXG4gICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gcGFyYW1zLmVuY3J5cHRpb25LZXkgPz8gKGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKSk7XG4gICAgICBjb25zdCBoeWRyYXRlZElucHV0ID0gYXdhaXQgdHJhY2UoXG4gICAgICAgICdzdGVwLmh5ZHJhdGUnLFxuICAgICAgICB7fSxcbiAgICAgICAgYXN5bmMgKGh5ZHJhdGVTcGFuKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBoeWRyYXRlZCA9IGF3YWl0IGh5ZHJhdGVTdGVwQXJndW1lbnRzKFxuICAgICAgICAgICAgc3RlcC5pbnB1dCxcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgb3BzLFxuICAgICAgICAgICAgZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgcGFyYW1zLndvcmtmbG93RGVwbG95bWVudElkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBkdXJhdGlvbk1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgICBoeWRyYXRlU3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcEFyZ3VtZW50c0NvdW50KGh5ZHJhdGVkLmFyZ3MubGVuZ3RoKSxcbiAgICAgICAgICAgIC4uLkF0dHJpYnV0ZS5RdWV1ZURlc2VyaWFsaXplVGltZU1zKGR1cmF0aW9uTXMpLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBoeWRyYXRlZDtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgYXJncyA9IGh5ZHJhdGVkSW5wdXQuYXJncztcbiAgICAgIGNvbnN0IHRoaXNWYWwgPSBoeWRyYXRlZElucHV0LnRoaXNWYWwgPz8gbnVsbDtcbiAgICAgIGNvbnN0IHdvcmtmbG93QmFzZVVybCA9IGNyZWF0ZVdvcmtmbG93QmFzZVVybChcbiAgICAgICAgaXNWZXJjZWxcbiAgICAgICAgICA/IGBodHRwczovLyR7cHJvY2Vzcy5lbnYuVkVSQ0VMX1VSTH1gXG4gICAgICAgICAgOiBgaHR0cDovL2xvY2FsaG9zdDokeyhhd2FpdCBnZXRQb3J0TGF6eSgpKSA/PyAzMDAwfWBcbiAgICAgICk7XG5cbiAgICAgIC8vIC0tLSBVc2VyIGNvZGUgZXhlY3V0aW9uIC0tLVxuICAgICAgLy8gV3JhcCBvbmx5IHN0ZXBGbi5hcHBseSgpICh1c2VyIHN0ZXAgY29kZSkgc28gY2xlYW51cCBiZWxvdyBydW5zIG9uXG4gICAgICAvLyBCT1RIIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuIEEgdXNlci1jb2RlIHRocm93IGlzIGNhcHR1cmVkIGhlcmUgYW5kXG4gICAgICAvLyByZS1yYWlzZWQgYWZ0ZXIgY2FuY2VsQWJvcnRSZWFkZXJzLCBzbyBpdCBzdGlsbCBmbG93cyB0byB0aGUgb3V0ZXJcbiAgICAgIC8vIGNhdGNoIChzdGVwX2ZhaWxlZC9zdGVwX3JldHJ5aW5nKSDigJQgYnV0IHRoZSBhYm9ydC1zdHJlYW0gcmVhZGVyIGlzXG4gICAgICAvLyB0b3JuIGRvd24gZmlyc3QuIFdpdGhvdXQgdGhpcywgYSB0aHJvd2luZy9yZXRyeWluZyBzaWduYWwtYmVhcmluZ1xuICAgICAgLy8gc3RlcCB3b3VsZCBsZWFrIGEgcmVhbC10aW1lIGFib3J0IHJlYWRlciBwZXIgYXR0ZW1wdC5cbiAgICAgIGxldCB1c2VyQ29kZUVycm9yOiB1bmtub3duO1xuICAgICAgbGV0IHVzZXJDb2RlRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGV4ZWN1dGlvblN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICBsYXRlbmN5RXZlbnREYXRhID0gY29tcHV0ZVN0ZXBMYXRlbmN5RXZlbnREYXRhKHtcbiAgICAgICAgdHJhY2tpbmc6IHBhcmFtcy5sYXRlbmN5VHJhY2tpbmcsXG4gICAgICAgIHN0ZXBDb2RlU3RhcnRlZEF0TXM6IGV4ZWN1dGlvblN0YXJ0VGltZSxcbiAgICAgICAgYXR0ZW1wdCxcbiAgICAgICAgbGF6eVN0ZXBTdGFydDogcGFyYW1zLmxhenlTdGVwSW5wdXQgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgb3B0aW1pc3RpY1N0YXJ0LFxuICAgICAgfSk7XG4gICAgICBpZiAobGF0ZW5jeUV2ZW50RGF0YSkge1xuICAgICAgICAvLyBNaXJyb3IgdGhlIGxhdGVuY3kgdGVsZW1ldHJ5IG9udG8gdGhlIHN0ZXAgc3BhbiBzbyB0cmFjZXMgc2hvd1xuICAgICAgICAvLyBUVEZTL1NUU08gYWxvbmdzaWRlIHRoZSBmbGFtZSBncmFwaCwgbm90IGp1c3QgRGF0YWRvZyBtZXRyaWNzLlxuICAgICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAuLi4obGF0ZW5jeUV2ZW50RGF0YS50dGZzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gQXR0cmlidXRlLlN0ZXBUdGZzTXMobGF0ZW5jeUV2ZW50RGF0YS50dGZzKVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgLi4uKGxhdGVuY3lFdmVudERhdGEuc3RzbyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IEF0dHJpYnV0ZS5TdGVwU3Rzb01zKGxhdGVuY3lFdmVudERhdGEuc3RzbylcbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwTGF0ZW5jeU9wdGltaXphdGlvbnMoXG4gICAgICAgICAgICBsYXRlbmN5RXZlbnREYXRhLm9wdGltaXphdGlvbnMgPz8gW11cbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRyYWNlKCdzdGVwLmV4ZWN1dGUnLCB7fSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBjb250ZXh0U3RvcmFnZS5ydW4oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0ZXBNZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICAgIHN0ZXBJZCxcbiAgICAgICAgICAgICAgICBzdGVwU3RhcnRlZEF0OiBuZXcgRGF0ZSgrc3RlcFN0YXJ0ZWRBdCksXG4gICAgICAgICAgICAgICAgYXR0ZW1wdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd29ya2Zsb3dNZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHdvcmtmbG93TmFtZSxcbiAgICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICAgIHdvcmtmbG93U3RhcnRlZEF0OiBuZXcgRGF0ZSgrd29ya2Zsb3dTdGFydGVkQXQpLFxuICAgICAgICAgICAgICAgIHVybDogd29ya2Zsb3dCYXNlVXJsLFxuICAgICAgICAgICAgICAgIGZlYXR1cmVzOiB7IGVuY3J5cHRpb246ICEhZW5jcnlwdGlvbktleSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB3b3JrZmxvd0RlcGxveW1lbnRJZDogcGFyYW1zLndvcmtmbG93RGVwbG95bWVudElkLFxuICAgICAgICAgICAgICBvcHMsXG4gICAgICAgICAgICAgIHByZUNvbXBsZXRpb25PcHMsXG4gICAgICAgICAgICAgIGNsb3N1cmVWYXJzOiBoeWRyYXRlZElucHV0LmNsb3N1cmVWYXJzLFxuICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgICAvLyBUdXJibyBvcHRpbWlzdGljIHN0YXJ0IHJ1bnMgdGhpcyBib2R5IGJlZm9yZSBgcnVuX3N0YXJ0ZWRgIGlzXG4gICAgICAgICAgICAgIC8vIGR1cmFibGUuIEV4cG9zZSB0aGUgYmFycmllciBzbyBhIGRpcmVjdCBzdGVwLWJvZHkgd29ybGQgd3JpdGVcbiAgICAgICAgICAgICAgLy8gKGUuZy4gYGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzYCkgY2FuIG9yZGVyIGl0c2VsZiBhZnRlciB0aGVcbiAgICAgICAgICAgICAgLy8gcnVuIGV4aXN0cy4gVW5kZWZpbmVkIG9uIHRoZSBhd2FpdCBwYXRoIChydW4gYWxyZWFkeSBkdXJhYmxlKS5cbiAgICAgICAgICAgICAgcnVuUmVhZHlCYXJyaWVyOiBvcHRpbWlzdGljU3RhcnRcbiAgICAgICAgICAgICAgICA/IHBhcmFtcy5ydW5SZWFkeUJhcnJpZXJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiBzdGVwRm4uYXBwbHkodGhpc1ZhbCwgYXJncylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB1c2VyQ29kZUVycm9yID0gZXJyO1xuICAgICAgICB1c2VyQ29kZUZhaWxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBleGVjdXRpb25UaW1lTXMgPSBEYXRlLm5vdygpIC0gZXhlY3V0aW9uU3RhcnRUaW1lO1xuXG4gICAgICAvLyBUZWFyIGRvd24gYW55IGFib3J0LXN0cmVhbSByZWFkZXJzIG9wZW5lZCB3aGlsZSBoeWRyYXRpbmcgdGhlIHN0ZXAnc1xuICAgICAgLy8gYXJndW1lbnRzIChhIHNlcmlhbGl6ZWQgQWJvcnRTaWduYWwgb3BlbnMgYSByZWFsLXRpbWUgYWJvcnQgcmVhZGVyIGZvclxuICAgICAgLy8gdGhlIHN0ZXAncyBkdXJhdGlvbikuIFdpdGhvdXQgdGhpcyB0aGUgcmVhZGVyJ3MgYHJlYWQoKWAgcHJvbWlzZSBuZXZlclxuICAgICAgLy8gc2V0dGxlcywgc28gdGhlIGBvcHNgIGZsdXNoIGJlbG93IGFsd2F5cyBsb3NlcyB0aGUgNTAwbXMgcmFjZSBhbmQgdGhlXG4gICAgICAvLyBzdGVwIHJlcG9ydHMgYGhhc1BlbmRpbmdPcHNgIOKAlCBmb3JjaW5nIHRoZSBpbmxpbmUgbG9vcCB0byBxdWV1ZSBhXG4gICAgICAvLyBjb250aW51YXRpb24gYW5kIHBheWluZyBhIGZ1bGwgcm91bmQtdHJpcCBwZXIgc2lnbmFsLWJlYXJpbmcgc3RlcC5cbiAgICAgIC8vIFRoZSBub24taW5saW5lIGBzdGVwLWhhbmRsZXJgIHBhdGggYWxyZWFkeSBkb2VzIHRoaXMgYWZ0ZXIgdXNlciBjb2RlLlxuICAgICAgLy8gUnVucyB1bmNvbmRpdGlvbmFsbHkgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSkgc28gYSB0aHJvd2luZyBzdGVwIGRvZXNuJ3RcbiAgICAgIC8vIGxlYWsgdGhlIHJlYWRlci5cbiAgICAgIGNhbmNlbEFib3J0UmVhZGVycyguLi5hcmdzLCB0aGlzVmFsLCBoeWRyYXRlZElucHV0LmNsb3N1cmVWYXJzKTtcblxuICAgICAgLy8gUmUtcmFpc2UgYSB1c2VyLWNvZGUgZmFpbHVyZSBub3cgdGhhdCBjbGVhbnVwIGhhcyBydW47IHRoZSBvdXRlclxuICAgICAgLy8gY2F0Y2ggbWFwcyBpdCB0byBzdGVwX2ZhaWxlZC9zdGVwX3JldHJ5aW5nLlxuICAgICAgaWYgKHVzZXJDb2RlRmFpbGVkKSB7XG4gICAgICAgIHRocm93IHVzZXJDb2RlRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuUXVldWVFeGVjdXRpb25UaW1lTXMoZXhlY3V0aW9uVGltZU1zKSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQgPSBhd2FpdCB0cmFjZSgnc3RlcC5kZWh5ZHJhdGUnLCB7fSwgYXN5bmMgKGRlaHlkcmF0ZVNwYW4pID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgZGVoeWRyYXRlZCA9IGF3YWl0IGRlaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZShcbiAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICAgIG9wcyxcbiAgICAgICAgICBnbG9iYWxUaGlzLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGNvbXByZXNzaW9uLFxuICAgICAgICAgIC8vIFR1cmJvIG9wdGltaXN0aWMgc3RhcnQ6IGEgcmV0dXJuZWQgc3RyZWFtIGlzIHBpcGVkIHRvIHRoZSBzZXJ2ZXJcbiAgICAgICAgICAvLyBhZnRlciB0aGUgYm9keSBidXQgd2l0aGluIHRoaXMgc2FtZSBvcCBmbHVzaCwgc28gZ2F0ZSBpdHMgZmlyc3RcbiAgICAgICAgICAvLyB3cml0ZSBvbiB0aGUgcnVuLXJlYWR5IGJhcnJpZXIuIFVuZGVmaW5lZCBvbiB0aGUgYXdhaXQgcGF0aC5cbiAgICAgICAgICBvcHRpbWlzdGljU3RhcnQgPyBwYXJhbXMucnVuUmVhZHlCYXJyaWVyIDogdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBkZWh5ZHJhdGVTcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAuLi5BdHRyaWJ1dGUuUXVldWVTZXJpYWxpemVUaW1lTXMoZHVyYXRpb25NcyksXG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBSZXN1bHRUeXBlKHR5cGVvZiBkZWh5ZHJhdGVkKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkZWh5ZHJhdGVkO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEZsdXNoIHBlbmRpbmcgb3BzIChzdHJlYW0gd3JpdGVzLCBldGMuKSB3aXRoIGEgc2hvcnQgaW5saW5lIHdhaXQuXG4gICAgICAvLyBOb3cgdGhhdCBXb3JrZmxvd1NlcnZlcldyaXRhYmxlU3RyZWFtIGZsdXNoZXMgc3luY2hyb25vdXNseSBvblxuICAgICAgLy8gZWFjaCB3cml0ZSAobm90IHZpYSBzZXRUaW1lb3V0KSwgdGhlIGZsdXNoYWJsZVBpcGUncyBwZW5kaW5nT3BzXG4gICAgICAvLyBhY2N1cmF0ZWx5IHJlZmxlY3RzIHdoZXRoZXIgZGF0YSBoYXMgcmVhY2hlZCB0aGUgc2VydmVyLiBNb3N0IG9wc1xuICAgICAgLy8gc2V0dGxlIHdpdGhpbiB+MjAwbXMgKDEwMG1zIGxvY2stcmVsZWFzZSBwb2xsaW5nICsgSFRUUCBmbHVzaCkuXG4gICAgICAvLyBJZiBvcHMgZG9uJ3Qgc2V0dGxlIGluIDUwMG1zIChlLmcuLCBXcml0YWJsZVN0cmVhbSBrZXB0IG9wZW5cbiAgICAgIC8vIGFjcm9zcyBzdGVwcyksIHdhaXRVbnRpbCBoYW5kbGVzIHRoZSByZXN0LlxuICAgICAgaWYgKG9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG9wc1Byb21pc2UgPSBQcm9taXNlLmFsbChvcHMpO1xuICAgICAgICAvLyBUaGUgcmFjZSBiZWxvdyBzdXJmYWNlcyBmYWlsdXJlcyBpbmxpbmUgd2hlbiBvcHMgc2V0dGxlIHF1aWNrbHk7XG4gICAgICAgIC8vIGlmIHRoZSA1MDBtcyB0aW1lb3V0IHdpbnMsIHRoZSBmYWlsdXJlIGlzIG9ubHkgb2JzZXJ2ZWQgaGVyZS4gVGhlXG4gICAgICAgIC8vIHByb21pc2UgaGFuZGVkIHRvIHdhaXRVbnRpbCBtdXN0IG5ldmVyIHJlamVjdCAoYW4gdW5jb25zdW1lZFxuICAgICAgICAvLyB3YWl0VW50aWwgcmVqZWN0aW9uIGNyYXNoZXMgdGhlIHByb2Nlc3MgYXMgdW5oYW5kbGVkUmVqZWN0aW9uKSxcbiAgICAgICAgLy8gc28gdW5leHBlY3RlZCBmYWlsdXJlcyBhcmUgbG9nZ2VkIGluc3RlYWQuXG4gICAgICAgIHNhZmVXYWl0VW50aWwob3BzUHJvbWlzZSwgKGVycikgPT4ge1xuICAgICAgICAgIHJ1bnRpbWVMb2dnZXIud2FybignQmFja2dyb3VuZCBmbHVzaCBvZiBzdGVwIHN0cmVhbSBvcHMgZmFpbGVkJywge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgIHN0ZXBJZCxcbiAgICAgICAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcHNTZXR0bGVkID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgICBvcHNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgICAoKSA9PiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgZXhwZWN0ZWQgY2xpZW50IGRpc2Nvbm5lY3QgZXJyb3JzIChlLmcuLCBicm93c2VyXG4gICAgICAgICAgICAgIC8vIHJlZnJlc2ggZHVyaW5nIHN0cmVhbWluZylcbiAgICAgICAgICAgICAgY29uc3QgaXNBYm9ydEVycm9yID1cbiAgICAgICAgICAgICAgICBlcnI/Lm5hbWUgPT09ICdBYm9ydEVycm9yJyB8fCBlcnI/Lm5hbWUgPT09ICdSZXNwb25zZUFib3J0ZWQnO1xuICAgICAgICAgICAgICBpZiAoaXNBYm9ydEVycm9yKSByZXR1cm4gdHJ1ZSBhcyBjb25zdDtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgbmV3IFByb21pc2U8ZmFsc2U+KChyKSA9PiBzZXRUaW1lb3V0KCgpID0+IHIoZmFsc2UpLCA1MDApKSxcbiAgICAgICAgXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE9wdGltaXN0aWMgc3RhcnQ6IHRoZSBib2R5IHJhbiBiZWZvcmUgYHN0ZXBfc3RhcnRlZGAgd2FzIGNvbmZpcm1lZC5cbiAgICAgIC8vIFJlY29uY2lsZSBpdCBub3cg4oCUIGlmIHdlIGxvc3QgdGhlIGNyZWF0ZS1jbGFpbSAob3IgdGhlIHJ1biBpc1xuICAgICAgLy8gZ29uZS90aHJvdHRsZWQpIGRpc2NhcmQgdGhpcyByZXN1bHQgYW5kIGRvbid0IHdyaXRlIHN0ZXBfY29tcGxldGVkLlxuICAgICAgLy8gUmVjb25jaWxlIGJlZm9yZSBkcmFpbmluZyBwcmVDb21wbGV0aW9uT3BzOiBhIGRpc2NhcmRlZCByZXN1bHQgbWVhbnNcbiAgICAgIC8vIHRoZSB3aW5uaW5nIGhhbmRsZXIgb3ducyB0aGUgb3V0Y29tZSAoYW5kIHJlLWZpcmVzIGFueSBhYm9ydFxuICAgICAgLy8gaWRlbXBvdGVudGx5KSwgc28gdGhlcmUncyBubyBwb2ludCBwYXlpbmcgdGhlIGFib3J0LWNvbW1pdCBsYXRlbmN5LlxuICAgICAgaWYgKG9wdGltaXN0aWNTdGFydCkge1xuICAgICAgICBjb25zdCByZWNvbmNpbGUgPSBhd2FpdCByZWNvbmNpbGVPcHRpbWlzdGljU3RhcnQoKTtcbiAgICAgICAgaWYgKHJlY29uY2lsZSkgcmV0dXJuIHJlY29uY2lsZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tbWl0IG11c3QtYmUtZHVyYWJsZSBvcHMgKGUuZy4gYSBzdGVwLWluaXRpYXRlZCBhYm9ydCdzXG4gICAgICAvLyBob29rX3JlY2VpdmVkIGV2ZW50KSBiZWZvcmUgd3JpdGluZyBzdGVwX2NvbXBsZXRlZCwgc28gYW55IHdvcmtmbG93XG4gICAgICAvLyBjb250aW51YXRpb24gdHJpZ2dlcmVkIGJ5IHRoYXQgZXZlbnQgb2JzZXJ2ZXMgdGhlIGFib3J0IHJhdGhlciB0aGFuXG4gICAgICAvLyByYWNpbmcgaXQuIFRoZXNlIG9wcyBzd2FsbG93IHRoZWlyIG93biBlcnJvcnMsIHNvIGF3YWl0aW5nIG9ubHlcbiAgICAgIC8vIGVuZm9yY2VzIG9yZGVyaW5nICh0aGUgYC5jYXRjaCgpYCBkZWZlbmRzIHRoZSBuby1yZWplY3QgY29udHJhY3Qgb25cbiAgICAgIC8vIFN0ZXBDb250ZXh0LnByZUNvbXBsZXRpb25PcHMpLlxuICAgICAgLy9cbiAgICAgIC8vIFRyYWRlb2ZmOiBjb3JyZWN0bmVzcyByZXF1aXJlcyB0aGUgaG9vayBiZSBkdXJhYmxlIGJlZm9yZSBjb21wbGV0aW9uLFxuICAgICAgLy8gc28g4oCUIHVubGlrZSB0aGUgYmFja2dyb3VuZCBgb3BzYCBmbHVzaCBhYm92ZSDigJQgdGhpcyBjYW5ub3QgYmUgY2FwcGVkXG4gICAgICAvLyB3aXRoIGEgcmVzb2x2ZS1vbi10aW1lb3V0IHJhY2UuIEEgc2xvdyByZXN1bWUgdGhlcmVmb3JlIGFkZHMgaXRzXG4gICAgICAvLyBsYXRlbmN5IHRvIGEgc3RlcCB0aGF0IGFib3J0cyBhIGNvbnRyb2xsZXIsIGFuZCBhIHRydWUgaGFuZyBob2xkc1xuICAgICAgLy8gY29tcGxldGlvbiB1bnRpbCB0aGUgcGxhdGZvcm0vcXVldWUgZXhlY3V0aW9uIHRpbWVvdXQgZmlyZXM7IHRoZSBxdWV1ZVxuICAgICAgLy8gdGhlbiByZWRlbGl2ZXJzIGFuZCB0aGUgc3RlcCByZXRyaWVzLCByZS1maXJpbmcgdGhlIGFib3J0IGlkZW1wb3RlbnRseS5cbiAgICAgIGlmIChwcmVDb21wbGV0aW9uT3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJlQ29tcGxldGlvbk9wcykuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgLy8gT3B0aW1pc3RpYyBzdGFydDogdGhlIGJvZHkgdGhyZXcgYmVmb3JlIGBzdGVwX3N0YXJ0ZWRgIHdhcyBjb25maXJtZWQuXG4gICAgICAvLyBSZWNvbmNpbGUgZmlyc3Qg4oCUIGlmIHdlIGxvc3QgdGhlIGNyZWF0ZS1jbGFpbSAob3IgdGhlIHJ1biBpc1xuICAgICAgLy8gZ29uZS90aHJvdHRsZWQpIHRoZSBib2R5IGVycm9yIGlzIG1vb3Q7IGRpc2NhcmQgaXQgYW5kIGRvbid0IHdyaXRlIGFcbiAgICAgIC8vIHRlcm1pbmFsIGV2ZW50ICh0aGUgd2lubmluZyBoYW5kbGVyIG93bnMgdGhlIG91dGNvbWUpLiBSZWNvbmNpbGVcbiAgICAgIC8vIGJlZm9yZSBkcmFpbmluZyBwcmVDb21wbGV0aW9uT3BzIGZvciB0aGUgc2FtZSByZWFzb24gYXMgdGhlIHN1Y2Nlc3NcbiAgICAgIC8vIHBhdGg6IGEgZGlzY2FyZGVkIG91dGNvbWUgZG9lc24ndCBuZWVkIHRoZSBhYm9ydCBjb21taXR0ZWQgaGVyZS5cbiAgICAgIGlmIChvcHRpbWlzdGljU3RhcnQpIHtcbiAgICAgICAgY29uc3QgcmVjb25jaWxlID0gYXdhaXQgcmVjb25jaWxlT3B0aW1pc3RpY1N0YXJ0KCk7XG4gICAgICAgIGlmIChyZWNvbmNpbGUpIHJldHVybiByZWNvbmNpbGU7XG4gICAgICB9XG5cbiAgICAgIC8vIE9yZGVyIGFueSBtdXN0LWJlLWR1cmFibGUgb3BzIChlLmcuIGEgc3RlcC1pbml0aWF0ZWQgYWJvcnQnc1xuICAgICAgLy8gaG9va19yZWNlaXZlZCBldmVudCkgYWhlYWQgb2Ygc3RlcF9mYWlsZWQgdG9vIOKAlCBhIHN0ZXAgdGhhdCBhYm9ydHMgYW5kXG4gICAgICAvLyB0aGVuIHRocm93cyBtdXN0IHN0aWxsIGhhdmUgdGhlIGFib3J0IHJlY29yZGVkIGJlZm9yZSB0aGUgZmFpbHVyZVxuICAgICAgLy8gY29udGludWF0aW9uIG9ic2VydmVzIGl0LiBTYW1lIGxhdGVuY3kgdHJhZGVvZmYgYW5kIG5vLXJlamVjdCBjb250cmFjdFxuICAgICAgLy8gYXMgdGhlIHN1Y2Nlc3MgcGF0aCBhYm92ZS4gU2VlIFN0ZXBDb250ZXh0LnByZUNvbXBsZXRpb25PcHMuXG4gICAgICBpZiAocHJlQ29tcGxldGlvbk9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByZUNvbXBsZXRpb25PcHMpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWZmZWN0aXZlRXJyID0gcHJvbW90ZUFib3J0RXJyb3JUb0ZhdGFsKGVycik7XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFcnJvciA9IGF3YWl0IG5vcm1hbGl6ZVVua25vd25FcnJvcihlZmZlY3RpdmVFcnIpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFN0YWNrID1cbiAgICAgICAgbm9ybWFsaXplZEVycm9yLnN0YWNrIHx8IGdldEVycm9yU3RhY2soZWZmZWN0aXZlRXJyKSB8fCAnJztcblxuICAgICAgaWYgKGVmZmVjdGl2ZUVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHNwYW4/LnJlY29yZEV4Y2VwdGlvbj8uKGVmZmVjdGl2ZUVycik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRmF0YWwgPSBGYXRhbEVycm9yLmlzKGVmZmVjdGl2ZUVycik7XG5cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcEVycm9yTmFtZShnZXRFcnJvck5hbWUoZWZmZWN0aXZlRXJyKSksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwRXJyb3JNZXNzYWdlKG5vcm1hbGl6ZWRFcnJvci5tZXNzYWdlKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLkVycm9yVHlwZShnZXRFcnJvck5hbWUoZWZmZWN0aXZlRXJyKSksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5FcnJvckNhdGVnb3J5KFxuICAgICAgICAgIGlzRmF0YWxcbiAgICAgICAgICAgID8gJ2ZhdGFsJ1xuICAgICAgICAgICAgOiBSZXRyeWFibGVFcnJvci5pcyhlZmZlY3RpdmVFcnIpXG4gICAgICAgICAgICAgID8gJ3JldHJ5YWJsZSdcbiAgICAgICAgICAgICAgOiAndHJhbnNpZW50J1xuICAgICAgICApLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuRXJyb3JSZXRyeWFibGUoIWlzRmF0YWwpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChSdW5FeHBpcmVkRXJyb3IuaXMoZXJyKSkge1xuICAgICAgICBzdGVwTG9nZ2VyLmluZm8oJ1dvcmtmbG93IHJ1biBhbHJlYWR5IGNvbXBsZXRlZCwgc2tpcHBpbmcgc3RlcCcsIHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgIHN0ZXBJZCxcbiAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdnb25lJyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNGYXRhbCkge1xuICAgICAgICBzdGVwTG9nZ2VyLmVycm9yKFxuICAgICAgICAgICdFbmNvdW50ZXJlZCBGYXRhbEVycm9yIHdoaWxlIGV4ZWN1dGluZyBzdGVwLCBidWJibGluZyB1cCB0byBwYXJlbnQgd29ya2Zsb3cnLFxuICAgICAgICAgIHsgd29ya2Zsb3dSdW5JZCwgc3RlcE5hbWUsIGVycm9yU3RhY2s6IG5vcm1hbGl6ZWRTdGFjayB9XG4gICAgICAgICk7XG4gICAgICAgIC8vIEFwcGx5IHRoZSBub3JtYWxpemVkIHN0YWNrIHRvIHRoZSB0aHJvd24gdmFsdWUgc28gdGhlIHNlcmlhbGl6ZWRcbiAgICAgICAgLy8gZXJyb3IgcHJlc2VydmVzIGl0IGZvciBjb25zdW1lcnMuIGB0eXBlcy5pc05hdGl2ZUVycm9yKClgIHdvcmtzXG4gICAgICAgIC8vIGFjcm9zcyBWTSByZWFsbXMgKGEgd29ya2Zsb3ctdGhyb3duIGVycm9yIGlzIGFuIGluc3RhbmNlIG9mIHRoZVxuICAgICAgICAvLyBWTSdzIEVycm9yIGNsYXNzLCBub3QgdGhlIGhvc3QncykuXG4gICAgICAgIGlmICh0eXBlcy5pc05hdGl2ZUVycm9yKGVmZmVjdGl2ZUVycikgJiYgbm9ybWFsaXplZFN0YWNrKSB7XG4gICAgICAgICAgKGVmZmVjdGl2ZUVyciBhcyBFcnJvcikuc3RhY2sgPSBub3JtYWxpemVkU3RhY2s7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ3N0ZXBfZmFpbGVkJyxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGF3YWl0IGRlaHlkcmF0ZVN0ZXBFcnJvcihcbiAgICAgICAgICAgICAgICBlZmZlY3RpdmVFcnIsXG4gICAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgICBhd2FpdCBnZXRFbmNyeXB0aW9uS2V5KCksXG4gICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgICAgICBjb21wcmVzc2lvblxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAuLi5sYXRlbmN5RXZlbnREYXRhLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoc3RlcEZhaWxFcnIpIHtcbiAgICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhzdGVwRmFpbEVycikpIHtcbiAgICAgICAgICAgIHJ1bnRpbWVMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgJ1RyaWVkIGZhaWxpbmcgc3RlcCwgYnV0IHN0ZXAgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHN0ZXBGYWlsRXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiAnc2tpcHBlZCcgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgc3RlcEZhaWxFcnI7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBTdGF0dXMoJ2ZhaWxlZCcpLFxuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwRmF0YWxFcnJvcih0cnVlKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdmYWlsZWQnIH07XG4gICAgICB9XG5cbiAgICAgIC8vIE5vbi1mYXRhbCBlcnJvcjogY2hlY2sgaWYgcmV0cmllcyByZW1haW5pbmdcbiAgICAgIGNvbnN0IGN1cnJlbnRBdHRlbXB0ID0gc3RlcC5hdHRlbXB0O1xuXG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBBdHRlbXB0KGN1cnJlbnRBdHRlbXB0KSxcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBNYXhSZXRyaWVzKG1heFJldHJpZXMpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChjdXJyZW50QXR0ZW1wdCA+PSBtYXhSZXRyaWVzICsgMSkge1xuICAgICAgICAvLyBNYXggcmV0cmllcyByZWFjaGVkXG4gICAgICAgIGNvbnN0IHJldHJ5Q291bnQgPSBzdGVwLmF0dGVtcHQgLSAxO1xuICAgICAgICBzdGVwTG9nZ2VyLmVycm9yKFxuICAgICAgICAgICdNYXggcmV0cmllcyByZWFjaGVkLCBidWJibGluZyBlcnJvciB0byBwYXJlbnQgd29ya2Zsb3cnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgIGF0dGVtcHQ6IHN0ZXAuYXR0ZW1wdCxcbiAgICAgICAgICAgIHJldHJ5Q291bnQsXG4gICAgICAgICAgICBlcnJvclN0YWNrOiBub3JtYWxpemVkU3RhY2ssXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgU3RlcCBcIiR7c3RlcE5hbWV9XCIgZmFpbGVkIGFmdGVyICR7bWF4UmV0cmllc30gJHtwbHVyYWxpemUoJ3JldHJ5JywgJ3JldHJpZXMnLCBtYXhSZXRyaWVzKX06ICR7bm9ybWFsaXplZEVycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgLy8gV3JhcCB0aGUgb3JpZ2luYWwgdGhyb3duIHZhbHVlIGFzIGBjYXVzZWAgb24gYSBmcmVzaCBGYXRhbEVycm9yXG4gICAgICAgIC8vIHNvIHRoZSB3cmFwcGluZyBtZXNzYWdlICsgcmV0cnktY291bnQgZnJhbWluZyBpcyB0aGUgdXNlci1mYWNpbmdcbiAgICAgICAgLy8gZXJyb3Igd2hpbGUgdGhlIG9yaWdpbmFsIGZhaWx1cmUgcmVtYWlucyByZWNvdmVyYWJsZSBmcm9tXG4gICAgICAgIC8vIGBlcnIuY2F1c2VgIGFmdGVyIGh5ZHJhdGlvbi5cbiAgICAgICAgY29uc3Qgd3JhcHBlZEVycm9yID0gbmV3IEZhdGFsRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgKHdyYXBwZWRFcnJvciBhcyBFcnJvcikuY2F1c2UgPSBlcnI7XG4gICAgICAgIGlmIChub3JtYWxpemVkU3RhY2spIHdyYXBwZWRFcnJvci5zdGFjayA9IG5vcm1hbGl6ZWRTdGFjaztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ3N0ZXBfZmFpbGVkJyxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGF3YWl0IGRlaHlkcmF0ZVN0ZXBFcnJvcihcbiAgICAgICAgICAgICAgICB3cmFwcGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgICBhd2FpdCBnZXRFbmNyeXB0aW9uS2V5KCksXG4gICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgICAgICBjb21wcmVzc2lvblxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAuLi5sYXRlbmN5RXZlbnREYXRhLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoc3RlcEZhaWxFcnIpIHtcbiAgICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhzdGVwRmFpbEVycikpIHtcbiAgICAgICAgICAgIHJ1bnRpbWVMb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgJ1RyaWVkIGZhaWxpbmcgc3RlcCwgYnV0IHN0ZXAgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHN0ZXBGYWlsRXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiAnc2tpcHBlZCcgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgc3RlcEZhaWxFcnI7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBTdGF0dXMoJ2ZhaWxlZCcpLFxuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwUmV0cnlFeGhhdXN0ZWQodHJ1ZSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnZmFpbGVkJyB9O1xuICAgICAgfVxuXG4gICAgICAvLyBSZXRyaWVzIHJlbWFpbmluZ1xuICAgICAgaWYgKFJldHJ5YWJsZUVycm9yLmlzKGVycikpIHtcbiAgICAgICAgc3RlcExvZ2dlci5pbmZvKCdFbmNvdW50ZXJlZCBSZXRyeWFibGVFcnJvciwgc3RlcCB3aWxsIGJlIHJldHJpZWQnLCB7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICBhdHRlbXB0OiBjdXJyZW50QXR0ZW1wdCxcbiAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGVwTG9nZ2VyLmluZm8oJ0VuY291bnRlcmVkIEVycm9yLCBzdGVwIHdpbGwgYmUgcmV0cmllZCcsIHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgIGF0dGVtcHQ6IGN1cnJlbnRBdHRlbXB0LFxuICAgICAgICAgIGVycm9yU3RhY2s6IG5vcm1hbGl6ZWRTdGFjayxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IHRoZSBub3JtYWxpemVkIHN0YWNrIHRvIHRoZSB0aHJvd24gdmFsdWUgc28gaXQgc3Vydml2ZXNcbiAgICAgIC8vIHNlcmlhbGl6YXRpb24uIFNlZSB0aGUgRmF0YWxFcnJvciBzaXRlIGFib3ZlIGZvciB3aHkgd2UgdXNlXG4gICAgICAvLyBgdHlwZXMuaXNOYXRpdmVFcnJvcmAgaW5zdGVhZCBvZiBgZXJyIGluc3RhbmNlb2YgRXJyb3JgLlxuICAgICAgaWYgKHR5cGVzLmlzTmF0aXZlRXJyb3IoZXJyKSAmJiBub3JtYWxpemVkU3RhY2spIHtcbiAgICAgICAgKGVyciBhcyBFcnJvcikuc3RhY2sgPSBub3JtYWxpemVkU3RhY2s7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX3JldHJ5aW5nJyxcbiAgICAgICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICBlcnJvcjogYXdhaXQgZGVoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgIGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKSxcbiAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgIGdsb2JhbFRoaXMsXG4gICAgICAgICAgICAgIGNvbXByZXNzaW9uXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgLi4uKFJldHJ5YWJsZUVycm9yLmlzKGVycikgJiYgeyByZXRyeUFmdGVyOiBlcnIucmV0cnlBZnRlciB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKHN0ZXBSZXRyeUVycikge1xuICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhzdGVwUmV0cnlFcnIpKSB7XG4gICAgICAgICAgcnVudGltZUxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgJ1RyaWVkIHJldHJ5aW5nIHN0ZXAsIGJ1dCBzdGVwIGhhcyBhbHJlYWR5IGZpbmlzaGVkLicsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgIHN0ZXBJZCxcbiAgICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHN0ZXBSZXRyeUVyci5tZXNzYWdlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3NraXBwZWQnIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgc3RlcFJldHJ5RXJyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0aW1lb3V0U2Vjb25kcyA9IE1hdGgubWF4KFxuICAgICAgICAxLFxuICAgICAgICBSZXRyeWFibGVFcnJvci5pcyhlcnIpXG4gICAgICAgICAgPyBNYXRoLmNlaWwoKCtlcnIucmV0cnlBZnRlci5nZXRUaW1lKCkgLSBEYXRlLm5vdygpKSAvIDEwMDApXG4gICAgICAgICAgOiAxXG4gICAgICApO1xuXG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBSZXRyeVRpbWVvdXRTZWNvbmRzKHRpbWVvdXRTZWNvbmRzKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBSZXRyeVdpbGxSZXRyeSh0cnVlKSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4geyB0eXBlOiAncmV0cnknLCB0aW1lb3V0U2Vjb25kcyB9O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBzdGVwX2NvbXBsZXRlZCBldmVudCBvdXRzaWRlIHRoZSBzdGVwIGV4ZWN1dGlvbiBmYWlsdXJlIHBhdGg6XG4gICAgLy8gcGVyc2lzdGVuY2UgZmFpbHVyZXMgYXJlIGluZnJhc3RydWN0dXJlIGVycm9ycyBhbmQgc2hvdWxkIHJlZGVsaXZlciB0aGVcbiAgICAvLyBxdWV1ZSBtZXNzYWdlLCBub3QgYmVjb21lIHVzZXIgc3RlcF9yZXRyeWluZy9zdGVwX2ZhaWxlZCBldmVudHMuXG4gICAgbGV0IGNvbXBsZXRlZFJlc3VsdDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiB3b3JsZC5ldmVudHMuY3JlYXRlPj47XG4gICAgdHJ5IHtcbiAgICAgIGNvbXBsZXRlZFJlc3VsdCA9IGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUoXG4gICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgIHtcbiAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX2NvbXBsZXRlZCcsXG4gICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICBldmVudERhdGE6IHtcbiAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgd29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQgYXMgVWludDhBcnJheSxcbiAgICAgICAgICAgIC4uLmxhdGVuY3lFdmVudERhdGEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyYW1zLmlubGluZURlbHRhU2luY2VDdXJzb3IgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyBzaW5jZUN1cnNvcjogcGFyYW1zLmlubGluZURlbHRhU2luY2VDdXJzb3IgfVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoZXJyKSkge1xuICAgICAgICBydW50aW1lTG9nZ2VyLmluZm8oXG4gICAgICAgICAgJ1RyaWVkIGNvbXBsZXRpbmcgc3RlcCwgYnV0IHN0ZXAgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgfVxuICAgICAgaWYgKFJ1bkV4cGlyZWRFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgIHN0ZXBMb2dnZXIuaW5mbygnV29ya2Zsb3cgcnVuIGFscmVhZHkgY29tcGxldGVkLCBza2lwcGluZyBzdGVwJywge1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgc3RlcElkLFxuICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2dvbmUnIH07XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgY29uc3QgaW5saW5lRGVsdGEgPSBleHRyYWN0SW5saW5lRGVsdGEoXG4gICAgICBjb21wbGV0ZWRSZXN1bHQsXG4gICAgICBwYXJhbXMuaW5saW5lRGVsdGFTaW5jZUN1cnNvciAhPT0gdW5kZWZpbmVkXG4gICAgKTtcblxuICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgLi4uQXR0cmlidXRlLlN0ZXBTdGF0dXMoJ2NvbXBsZXRlZCcpLFxuICAgICAgLi4uQXR0cmlidXRlLlN0ZXBSZXN1bHRUeXBlKHR5cGVvZiByZXN1bHQpLFxuICAgIH0pO1xuXG4gICAgaWYgKG9wcy5sZW5ndGggPiAwKSB7XG4gICAgICBzdGVwTG9nZ2VyLmRlYnVnKCdTdGVwIGhhcyBwZW5kaW5nIG9wcycsIHtcbiAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgIG9wc0NvdW50OiBvcHMubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGhhc1BlbmRpbmdPcHMgc2lnbmFscyB0aGUgVjIgaGFuZGxlciB0byBicmVhayB0aGUgbG9vcFxuICAgIC8vIGFuZCBxdWV1ZSBhIGNvbnRpbnVhdGlvbiBzbyB3YWl0VW50aWwgY2FuIGZsdXNoIHRoZW0uXG4gICAgcmV0dXJuIHsgdHlwZTogJ2NvbXBsZXRlZCcsIGhhc1BlbmRpbmdPcHM6ICFvcHNTZXR0bGVkLCBpbmxpbmVEZWx0YSB9O1xuICB9KTtcbn1cbiJdfQ==
|
|
818
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3N0ZXAtZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2Isb0JBQW9CLEdBQ3JCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixTQUFTLEVBQ1QsZUFBZSxHQUNoQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsaUNBQWlDLEdBQ2xDLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLGdCQUFnQixHQUNqQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssU0FBUyxNQUFNLHNDQUFzQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsd0JBQXdCLEdBQ3pCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIseUNBQXlDLEdBQzFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pE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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlcyB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQge1xuICBFbnRpdHlDb25mbGljdEVycm9yLFxuICBGYXRhbEVycm9yLFxuICBSZXRyeWFibGVFcnJvcixcbiAgUnVuRXhwaXJlZEVycm9yLFxuICBUaHJvdHRsZUVycm9yLFxuICBUb29FYXJseUVycm9yLFxuICBXb3JrZmxvd1J1bnRpbWVFcnJvcixcbn0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQge1xuICBjcmVhdGVXb3JrZmxvd0Jhc2VVcmwsXG4gIHBsdXJhbGl6ZSxcbiAgc3RlcERpc3BsYXlOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudCwgU2VyaWFsaXplZERhdGEsIFN0ZXAsIFdvcmxkIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7XG4gIFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQ09NUFJFU1NJT04sXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IENyeXB0b0tleSB9IGZyb20gJy4uL2VuY3J5cHRpb24uanMnO1xuaW1wb3J0IHsgcnVudGltZUxvZ2dlciwgc3RlcExvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBnZXRTdGVwRnVuY3Rpb24gfSBmcm9tICcuLi9wcml2YXRlLmpzJztcbmltcG9ydCB7XG4gIGNhbmNlbEFib3J0UmVhZGVycyxcbiAgZGVoeWRyYXRlU3RlcEVycm9yLFxuICBkZWh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUsXG4gIGh5ZHJhdGVTdGVwQXJndW1lbnRzLFxuICBoeWRyYXRlU3RlcEVycm9yLFxufSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGNvbnRleHRTdG9yYWdlIH0gZnJvbSAnLi4vc3RlcC9jb250ZXh0LXN0b3JhZ2UuanMnO1xuaW1wb3J0ICogYXMgQXR0cmlidXRlIGZyb20gJy4uL3RlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy5qcyc7XG5pbXBvcnQgeyB0cmFjZSB9IGZyb20gJy4uL3RlbGVtZXRyeS5qcyc7XG5pbXBvcnQge1xuICBnZXRFcnJvck5hbWUsXG4gIGdldEVycm9yU3RhY2ssXG4gIG5vcm1hbGl6ZVVua25vd25FcnJvcixcbiAgcHJvbW90ZUFib3J0RXJyb3JUb0ZhdGFsLFxufSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmltcG9ydCB7XG4gIGlzT3B0aW1pc3RpY0lubGluZVN0YXJ0RW5hYmxlZCxcbiAgaXNPcHRpbWlzdGljSW5saW5lU3RhcnRFeHBsaWNpdGx5RGlzYWJsZWQsXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGdldFBvcnRMYXp5IH0gZnJvbSAnLi9nZXQtcG9ydC1sYXp5LmpzJztcbmltcG9ydCB7IG1lbW9pemVFbmNyeXB0aW9uS2V5IH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7XG4gIGNvbXB1dGVTdGVwTGF0ZW5jeUV2ZW50RGF0YSxcbiAgdHlwZSBTdGVwTGF0ZW5jeUV2ZW50RGF0YSxcbiAgdHlwZSBTdGVwTGF0ZW5jeVRyYWNraW5nLFxufSBmcm9tICcuL3N0ZXAtbGF0ZW5jeS5qcyc7XG5pbXBvcnQgeyBzYWZlV2FpdFVudGlsIH0gZnJvbSAnLi93YWl0LXVudGlsLmpzJztcblxuY29uc3QgREVGQVVMVF9TVEVQX01BWF9SRVRSSUVTID0gMztcblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBpbmxpbmUgZGVsdGEgZnJvbSBhIHN0ZXAtdGVybWluYWwgYGV2ZW50cy5jcmVhdGVgIHJlc3VsdCxcbiAqIGlmIHRoZSBXb3JsZCBwb3B1bGF0ZWQgb25lLiBBIGRlbHRhIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGVuIHRoZSBjYWxsZXJcbiAqIHJlcXVlc3RlZCBpdCAoYHNpbmNlQ3Vyc29yYCB3YXMgcGFzc2VkKSBhbmQgdGhlIFdvcmxkIHJldHVybmVkIGJvdGhcbiAqIGBldmVudHNgIGFuZCBhIGBjdXJzb3JgOyBvdGhlcndpc2Ugd2UgcmV0dXJuIHVuZGVmaW5lZCBhbmQgdGhlIGNhbGxlclxuICogZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsIGluY3JlbWVudGFsIGBldmVudHMubGlzdGAuIGBoYXNNb3JlYCBkZWZhdWx0c1xuICogdG8gZmFsc2UgKHNpbmdsZSBwYWdlKSB3aGVuIHRoZSBXb3JsZCBvbWl0cyBpdC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdElubGluZURlbHRhKFxuICByZXN1bHQ6IHsgZXZlbnRzPzogRXZlbnRbXTsgY3Vyc29yPzogc3RyaW5nIHwgbnVsbDsgaGFzTW9yZT86IGJvb2xlYW4gfSxcbiAgcmVxdWVzdGVkOiBib29sZWFuXG4pOiBJbmxpbmVFdmVudERlbHRhIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFyZXF1ZXN0ZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICghcmVzdWx0LmV2ZW50cyB8fCByZXN1bHQuY3Vyc29yID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgZXZlbnRzOiByZXN1bHQuZXZlbnRzLFxuICAgIGN1cnNvcjogcmVzdWx0LmN1cnNvcixcbiAgICBoYXNNb3JlOiByZXN1bHQuaGFzTW9yZSA/PyBmYWxzZSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwRXhlY3V0b3JQYXJhbXMge1xuICB3b3JsZDogV29ybGQ7XG4gIHdvcmtmbG93UnVuSWQ6IHN0cmluZztcbiAgLyoqIERlcGxveW1lbnQgdGhhdCBvd25zIHRoZSB3b3JrZmxvdyBydW4sIGZvciBmb3J3YXJkZWQgd3JpdGFibGUgc3RyZWFtcy4gKi9cbiAgd29ya2Zsb3dEZXBsb3ltZW50SWQ/OiBzdHJpbmc7XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nO1xuICB3b3JrZmxvd1N0YXJ0ZWRBdDogbnVtYmVyO1xuICBzdGVwSWQ6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgZW5jcnlwdGlvbktleT86IENyeXB0b0tleTtcbiAgLyoqXG4gICAqIFRoZSB3b3JrZmxvdyBydW4ncyBzcGVjVmVyc2lvbiwgdXNlZCB0byBnYXRlIHBheWxvYWQgY29tcHJlc3Npb24uXG4gICAqIFN0ZXAgb3V0cHV0cy9lcnJvcnMgYXJlIG9ubHkgZ3ppcC1jb21wcmVzc2VkIHdoZW4gdGhlIHJ1biBpcyBtYXJrZWRcbiAgICogYXMgcG9zc2libHkgY29udGFpbmluZyBjb21wcmVzc2VkIHBheWxvYWRzIChzcGVjVmVyc2lvbiA+PSA1KS5cbiAgICovXG4gIHJ1blNwZWNWZXJzaW9uPzogbnVtYmVyO1xuICAvKipcbiAgICogTGF6eSBzdGVwIHN0YXJ0OiB0aGUgYWxyZWFkeS1kZWh5ZHJhdGVkIHN0ZXAgaW5wdXQuIFdoZW4gcHJvdmlkZWQsIHRoZVxuICAgKiBgc3RlcF9zdGFydGVkYCBldmVudCBjYXJyaWVzIHRoaXMgaW5wdXQgc28gdGhlIHdvcmxkIGNyZWF0ZXMgdGhlIHN0ZXAgb25cbiAgICogdGhlIGZseSAobm8gc2VwYXJhdGUgYHN0ZXBfY3JlYXRlZGAgcm91bmQtdHJpcCkuIFNldCBieSB0aGUgb3duZWQtaW5saW5lXG4gICAqIHBhdGggZm9yIHRoZSBzdGVwIHdob3NlIGBzdGVwX2NyZWF0ZWRgIHRoZSBzdXNwZW5zaW9uIGhhbmRsZXIgZGVmZXJyZWQuXG4gICAqIFRoZSB3b3JsZCdzIGF0b21pYyBjcmVhdGUtY2xhaW0gaXMgdGhlIGV4YWN0bHktb25lLW93bmVyIGdhdGU6IGxvc2luZyBpdFxuICAgKiBzdXJmYWNlcyBhcyBgRW50aXR5Q29uZmxpY3RFcnJvcmAg4oaSIGB7IHR5cGU6ICdza2lwcGVkJyB9YCwgc28gYSBoYW5kbGVyXG4gICAqIHRoYXQgZGlkIG5vdCB3aW4gdGhlIGNyZWF0ZSBuZXZlciBydW5zIHRoZSBib2R5LiBPbWl0dGVkIG9uIGV2ZXJ5IG90aGVyXG4gICAqIHBhdGgsIHdoZXJlIHRoZSBzdGVwIGFscmVhZHkgaGFzIGEgYHN0ZXBfY3JlYXRlZGAgYW5kIGBzdGVwX3N0YXJ0ZWRgXG4gICAqIGNhcnJpZXMgbm8gcGF5bG9hZCAodGhlIGxlZ2FjeSBjb250cmFjdCkuXG4gICAqL1xuICBsYXp5U3RlcElucHV0PzogU2VyaWFsaXplZERhdGE7XG4gIC8qKlxuICAgKiBJbmxpbmUgc3RlcCBvd25lcnNoaXA6IHRoZSBxdWV1ZSBtZXNzYWdlIElEIG9mIHRoZSBpbnZvY2F0aW9uIHRoaXNcbiAgICogZXhlY3V0ZVN0ZXAgY2FsbCBydW5zIGluIChmcm9tIHRoZSBxdWV1ZSBoYW5kbGVyJ3MgbWV0YSkuIFdoZW4gc2V0LCB0aGVcbiAgICogYHN0ZXBfc3RhcnRlZGAgdGhpcyBjYWxsIHNlbmRzIGlzIHN0YW1wZWQgd2l0aCBpdCDigJQgb24gdGhlIGxhenkgcGF0aHNcbiAgICogKHdoZXJlIGBsYXp5U3RlcElucHV0YCBpcyBwcmVzZW50KSBhbmQgb24gdGhlIG93bmVkLXJlY292ZXJ5IGJhcmUgc3RhcnRcbiAgICogKHdoZXJlIGl0IGlzIG5vdDsgdGhlIHJlLXN0YW1wIGtlZXBzIGEgcmVjb3ZlcmVkIHN0ZXAgcmVhZGFibGUgYXMgb3duZWRcbiAgICogYnkgdGhpcyBtZXNzYWdlLCBzaW5jZSBvd25lcnNoaXAgZGVyaXZlcyBmcm9tIHRoZSBMQVRFU1Qgc3RhcnQpLiBXYWtlXG4gICAqIHJlcGxheXMgdGhhdCBvYnNlcnZlIGFuIGFjdGl2ZWx5LW93bmVkIHN0ZXAgc3VwcHJlc3MgdGhlIGltbWVkaWF0ZVxuICAgKiByZXF1ZXVlIGFuZCBlbnF1ZXVlIGEgZGVsYXllZCBiYWNrc3RvcCBpbnN0ZWFkLiBPbWl0dGVkIG9uIHRoZVxuICAgKiBiYWNrZ3JvdW5kLXN0ZXAgcGF0aCwgd2hvc2UgYmFyZSBzdGFydCBpbnRlbnRpb25hbGx5IGNsZWFycyBvd25lcnNoaXBcbiAgICogKHRoZSBzdGVwIGlzIHF1ZXVlLW93bmVkIGZyb20gdGhhdCBwb2ludCkuXG4gICAqL1xuICBvd25lck1lc3NhZ2VJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIElubGluZS1kZWx0YSBvcHRpbWl6YXRpb24gKG9wdC1pbikuIFdoZW4gcHJvdmlkZWQsIHRoZSBjdXJzb3Igb2YgdGhlXG4gICAqIGV2ZW50IGxvZyBhcyBvYnNlcnZlZCBieSB0aGUgY2FsbGVyICpiZWZvcmUqIHRoaXMgc3RlcCdzIGV2ZW50cyB3ZXJlXG4gICAqIHdyaXR0ZW4uIEl0IGlzIHRocmVhZGVkIGludG8gdGhlIHN0ZXAtdGVybWluYWwgYGV2ZW50cy5jcmVhdGVgIHNvIGFcbiAgICogc3VwcG9ydGluZyBXb3JsZCBjYW4gcmV0dXJuIHRoZSBkZWx0YSBvZiBldmVudHMgd3JpdHRlbiBzaW5jZSAoc2VlXG4gICAqIHtAbGluayBpbXBvcnQoJ0B3b3JrZmxvdy93b3JsZCcpLkNyZWF0ZUV2ZW50UGFyYW1zLnNpbmNlQ3Vyc29yfSkuXG4gICAqIE9ubHkgc2V0IHRoaXMgd2hlbiBgY29ycmVsYXRpb25JZGAtYmFzZWQgb3duZXJzaGlwIGd1YXJhbnRlZXMgdGhpc1xuICAgKiBoYW5kbGVyIGlzIHRoZSBzb2xlIGlubGluZSB3cml0ZXIgZm9yIHRoZSBydW4gb24gdGhpcyBpdGVyYXRpb24uXG4gICAqL1xuICBpbmxpbmVEZWx0YVNpbmNlQ3Vyc29yPzogc3RyaW5nO1xuICAvKipcbiAgICogRm9yY2Ugb3B0aW1pc3RpYyBpbmxpbmUgc3RhcnQgcmVnYXJkbGVzcyBvZlxuICAgKiBgV09SS0ZMT1dfT1BUSU1JU1RJQ19JTkxJTkVfU1RBUlRgLiBTZXQgYnkgdHVyYm8gbW9kZSBvbiB0aGUgZmlyc3QgZGVsaXZlcnlcbiAgICogb2YgdGhlIGZpcnN0IGludm9jYXRpb24sIHdoZXJlIGZvcmNpbmcgaXQgaXMgc2FmZTogdGhlcmUgaXMgbm8gY29uY3VycmVudFxuICAgKiBwZWVyIGhhbmRsZXIgdG8gcmFjZSB0aGUgY3JlYXRlLWNsYWltLCBzbyB0aGUgYm9keSBydW5zIGV4YWN0bHkgb25jZS4gT25seVxuICAgKiBtZWFuaW5nZnVsIHRvZ2V0aGVyIHdpdGggYGxhenlTdGVwSW5wdXRgIChhIGJyYW5kLW5ldyBsYXp5IHN0ZXApLlxuICAgKi9cbiAgZm9yY2VPcHRpbWlzdGljU3RhcnQ/OiBib29sZWFuO1xuICAvKipcbiAgICogVHVyYm8gbW9kZSBvbmx5OiBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBiYWNrZ3JvdW5kZWRcbiAgICogYHJ1bl9zdGFydGVkYCBoYXMgbGFuZGVkLiBXaGVuIHNldCwgdGhlIGxhenkvb3B0aW1pc3RpYyBgc3RlcF9zdGFydGVkYCBpc1xuICAgKiBjaGFpbmVkIG9uIGl0IHNvIHRoZSBzdGVwIGlzIG5ldmVyIGNyZWF0ZWQgYmVmb3JlIGl0cyBydW4gZXhpc3RzLiBUaGUgYm9keVxuICAgKiBzdGlsbCBydW5zIGltbWVkaWF0ZWx5IGFnYWluc3QgbG9jYWxseS1zeW50aGVzaXplZCBzdGF0ZSDigJQgb25seSB0aGUgbmV0d29ya1xuICAgKiB3cml0ZSB3YWl0cyDigJQgc28gdGhlIGBydW5fc3RhcnRlZGAgcm91bmQtdHJpcCBvdmVybGFwcyB0aGUgYm9keS4gYHVuZGVmaW5lZGBcbiAgICogb3V0c2lkZSB0dXJibywgd2hlcmUgYHJ1bl9zdGFydGVkYCB3YXMgYWxyZWFkeSBhd2FpdGVkIHVwIGZyb250LlxuICAgKi9cbiAgcnVuUmVhZHlCYXJyaWVyPzogUHJvbWlzZTx1bmtub3duPjtcbiAgLyoqXG4gICAqIExhdGVuY3kgdGVsZW1ldHJ5IChUVEZTIC8gU1RTTyk6IGVsaWdpYmlsaXR5IGFuZCBhbmNob3IgdGltZXN0YW1wcyBkZWNpZGVkXG4gICAqIGJ5IHRoZSBvcmNoZXN0cmF0b3IuIFdoZW4gc2V0LCB0aGlzIGV4ZWN1dG9yIGNvbXB1dGVzIHRoZSBmaW5hbCB2YWx1ZXNcbiAgICogYWdhaW5zdCB0aGUgd2FsbCBjbG9jayB0YWtlbiBpbW1lZGlhdGVseSBiZWZvcmUgdXNlciBjb2RlIHJ1bnMgYW5kXG4gICAqIGF0dGFjaGVzIHRoZW0gdG8gdGhlIHN0ZXAncyB0ZXJtaW5hbCBldmVudC4gU2V0IG9ubHkgZm9yIHRoZSBmaXJzdCBzdGVwIG9mXG4gICAqIGFuIGlubGluZSBiYXRjaCwgYW5kIG9ubHkgb24gZmlyc3QtYXR0ZW1wdCBleGVjdXRpb25zIHRoYXQgcXVhbGlmeSDigJQgc2VlXG4gICAqIHJ1bnRpbWUvc3RlcC1sYXRlbmN5LnRzLlxuICAgKi9cbiAgbGF0ZW5jeVRyYWNraW5nPzogU3RlcExhdGVuY3lUcmFja2luZztcbn1cblxuLyoqXG4gKiBJbmxpbmUtZGVsdGEgcmV0dXJuZWQgYnkgYSBzdGVwLXRlcm1pbmFsIHdyaXRlIHdoZW4gdGhlIGNhbGxlciBwYXNzZWRcbiAqIHtAbGluayBTdGVwRXhlY3V0b3JQYXJhbXMuaW5saW5lRGVsdGFTaW5jZUN1cnNvcn0gYW5kIHRoZSBXb3JsZCBzdXBwb3J0c1xuICogdGhlIG9wdGltaXphdGlvbi4gYGV2ZW50c2AgYXJlIHRoZSBldmVudHMgd3JpdHRlbiBzdHJpY3RseSBhZnRlciB0aGF0XG4gKiBjdXJzb3IgKHRoaXMgc3RlcCdzIGV2ZW50cyBwbHVzIGFueXRoaW5nIGludGVybGVhdmVkIGluLWJhbmQpLCBgY3Vyc29yYFxuICogaXMgdGhlIHBvc2l0aW9uIHBhc3QgdGhlIGxhc3Qgb25lLCBhbmQgYGhhc01vcmVgIHNpZ25hbHMgYSBmdXJ0aGVyIHBhZ2VcbiAqICh0aGUgY2FsbGVyIHRoZW4gZmFsbHMgYmFjayB0byBhIGZ1bGwgaW5jcmVtZW50YWwgZmV0Y2gpLiBBYnNlbnQgd2hlblxuICogdGhlIFdvcmxkIGRpZCBub3QgcmV0dXJuIGEgZGVsdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lRXZlbnREZWx0YSB7XG4gIGV2ZW50czogRXZlbnRbXTtcbiAgY3Vyc29yOiBzdHJpbmcgfCBudWxsO1xuICBoYXNNb3JlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhIHN0ZXAgZXhlY3V0aW9uIGF0dGVtcHQuIFRoZSBjYWxsZXIgZGVjaWRlcyB3aGF0IHRvIGRvXG4gKiBiYXNlZCBvbiB0aGUgcmVzdWx0IHR5cGUgKGUuZy4sIHF1ZXVlIHdvcmtmbG93IGNvbnRpbnVhdGlvbiwgcmVwbGF5IGlubGluZSwgZXRjLikuXG4gKlxuICogYGlubGluZURlbHRhYCBpcyBhdHRhY2hlZCB0byBhIGBjb21wbGV0ZWRgIHJlc3VsdCB3aGVuIHRoZSBjYWxsZXJcbiAqIHJlcXVlc3RlZCBpdCB2aWEge0BsaW5rIFN0ZXBFeGVjdXRvclBhcmFtcy5pbmxpbmVEZWx0YVNpbmNlQ3Vyc29yfSBhbmRcbiAqIHRoZSBXb3JsZCByZXR1cm5lZCBvbmUuIFN0ZXAgZmFpbHVyZXMgYXJlIHJhcmUgYW5kIG5vdCB0aGUgaW5saW5lXG4gKiBvcHRpbWl6YXRpb24ncyB0YXJnZXQsIHNvIHRoZSBgZmFpbGVkYCBwYXRoIGxlYXZlcyBpdCB0byB0aGUgbm9ybWFsXG4gKiBpbmNyZW1lbnRhbCBmZXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgU3RlcEV4ZWN1dGlvblJlc3VsdCA9XG4gIHwge1xuICAgICAgdHlwZTogJ2NvbXBsZXRlZCc7XG4gICAgICBoYXNQZW5kaW5nT3BzPzogYm9vbGVhbjtcbiAgICAgIGlubGluZURlbHRhPzogSW5saW5lRXZlbnREZWx0YTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnZmFpbGVkJyB9XG4gIHwgeyB0eXBlOiAncmV0cnknOyB0aW1lb3V0U2Vjb25kczogbnVtYmVyIH1cbiAgfCB7IHR5cGU6ICdza2lwcGVkJyB9XG4gIHwgeyB0eXBlOiAnZ29uZScgfVxuICB8IHsgdHlwZTogJ3Rocm90dGxlZCc7IHRpbWVvdXRTZWNvbmRzOiBudW1iZXIgfTtcblxuLyoqXG4gKiBFeGVjdXRlcyBhIHNpbmdsZSBzdGVwOiBjcmVhdGVzIHN0ZXBfc3RhcnRlZCBldmVudCwgaHlkcmF0ZXMgaW5wdXQsXG4gKiBydW5zIHRoZSBzdGVwIGZ1bmN0aW9uLCBjcmVhdGVzIHN0ZXBfY29tcGxldGVkL3N0ZXBfZmFpbGVkL3N0ZXBfcmV0cnlpbmcgZXZlbnRzLlxuICpcbiAqIERvZXMgTk9UIHF1ZXVlIHdvcmtmbG93IGNvbnRpbnVhdGlvbiBtZXNzYWdlcyDigJQgdGhlIGNhbGxlciBkZWNpZGVzIHdoYXQgdG8gZG8gbmV4dC5cbiAqIFVzZWQgYnkgYm90aCB0aGUgVjEgc3RlcCBoYW5kbGVyIGFuZCB0aGUgVjIgY29tYmluZWQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVTdGVwKFxuICBwYXJhbXM6IFN0ZXBFeGVjdXRvclBhcmFtc1xuKTogUHJvbWlzZTxTdGVwRXhlY3V0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IHtcbiAgICB3b3JsZCxcbiAgICB3b3JrZmxvd1J1bklkLFxuICAgIHdvcmtmbG93TmFtZSxcbiAgICB3b3JrZmxvd1N0YXJ0ZWRBdCxcbiAgICBzdGVwSWQsXG4gICAgc3RlcE5hbWUsXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGlzVmVyY2VsID0gcHJvY2Vzcy5lbnYuVkVSQ0VMX1VSTCAhPT0gdW5kZWZpbmVkO1xuICAvLyBHYXRlIHBheWxvYWQgY29tcHJlc3Npb24gb24gdGhlIHJ1bidzIHNwZWNWZXJzaW9uOiBvbmx5IHJ1bnMgbWFya2VkXG4gIC8vIGFzIHBvc3NpYmx5IGNvbnRhaW5pbmcgY29tcHJlc3NlZCBwYXlsb2FkcyAoc3BlYyA+PSA1KSBnZXQgZ3ppcCBkYXRhLlxuICBjb25zdCBjb21wcmVzc2lvbiA9XG4gICAgKHBhcmFtcy5ydW5TcGVjVmVyc2lvbiA/PyAwKSA+PSBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQ09NUFJFU1NJT047XG5cbiAgY29uc3Qgc3Bhbk5hbWUgPSBgc3RlcC5leGVjdXRlICR7c3RlcERpc3BsYXlOYW1lKHN0ZXBOYW1lKX1gO1xuICByZXR1cm4gdHJhY2Uoc3Bhbk5hbWUsIHt9LCBhc3luYyAoc3BhbikgPT4ge1xuICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgLi4uQXR0cmlidXRlLlN0ZXBOYW1lKHN0ZXBOYW1lKSxcbiAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lKSxcbiAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd1J1bklkKHdvcmtmbG93UnVuSWQpLFxuICAgICAgLi4uQXR0cmlidXRlLlN0ZXBJZChzdGVwSWQpLFxuICAgIH0pO1xuXG4gICAgLy8gTWVtb2l6ZWQgYWNjZXNzb3IgZm9yIHRoZSBwZXItcnVuIGVuY3J5cHRpb24ga2V5LiBUaGUgZmlyc3QgY2FsbGVyXG4gICAgLy8gKGlucHV0IGh5ZHJhdGlvbiBvbiB0aGUgc3VjY2VzcyBwYXRoLCBvciBvbmUgb2YgdGhlIGVhcmx5LXJldHVyblxuICAgIC8vIGRlaHlkcmF0ZVN0ZXBFcnJvciBwYXRocyBpZiBzdGVwX3N0YXJ0ZWQgZmFpbHMpIHRyaWdnZXJzIHRoZSBhY3R1YWxcbiAgICAvLyBmZXRjaCAvIEhLREYgZGVyaXZhdGlvbjsgc3Vic2VxdWVudCBjYWxsZXJzIGF3YWl0IHRoZSBjYWNoZWQgcHJvbWlzZS5cbiAgICBjb25zdCBnZXRFbmNyeXB0aW9uS2V5ID0gbWVtb2l6ZUVuY3J5cHRpb25LZXkod29ybGQsIHdvcmtmbG93UnVuSWQpO1xuXG4gICAgY29uc3Qgc3RlcEZuID0gZ2V0U3RlcEZ1bmN0aW9uKHN0ZXBOYW1lKTtcbiAgICBpZiAoIXN0ZXBGbiB8fCB0eXBlb2Ygc3RlcEZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBTdGVwIGZ1bmN0aW9uIG5vdCByZWdpc3RlcmVkIOKAlCBmYWlsIHRoZSBzdGVwIGltbWVkaWF0ZWx5IChub3QgdGhlIHJ1bikuXG4gICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIFYxIHN0ZXAgaGFuZGxlciBwYXR0ZXJuOiBjcmVhdGUgc3RlcF9mYWlsZWQgZXZlbnQgc29cbiAgICAgIC8vIHRoZSB3b3JrZmxvdyBjYW4gaGFuZGxlIGl0IGdyYWNlZnVsbHkgdmlhIHRyeS9jYXRjaCBpbiB1c2VyIGNvZGUuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgU3RlcCBcIiR7c3RlcE5hbWV9XCIgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIGN1cnJlbnQgZGVwbG95bWVudC4gVGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIGJ1aWxkIG9yIGJ1bmRsaW5nIGlzc3VlIHRoYXQgY2F1c2VkIHRoZSBzdGVwIHRvIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgZGVwbG95bWVudC5gO1xuICAgICAgcnVudGltZUxvZ2dlci5lcnJvcignU3RlcCBmdW5jdGlvbiBub3QgcmVnaXN0ZXJlZCwgZmFpbGluZyBzdGVwJywge1xuICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgc3RlcElkLFxuICAgICAgfSk7XG4gICAgICAvLyBPbiB0aGUgbGF6eSBpbmxpbmUgcGF0aCB0aGUgc3VzcGVuc2lvbiBoYW5kbGVyIGRlZmVycmVkIHRoaXMgc3RlcCdzXG4gICAgICAvLyBgc3RlcF9jcmVhdGVkYCwgZXhwZWN0aW5nIGV4ZWN1dGVTdGVwIHRvIG1hdGVyaWFsaXplIHRoZSBzdGVwIHZpYSBhXG4gICAgICAvLyBsYXp5IGBzdGVwX3N0YXJ0ZWRgIGNhcnJ5aW5nIGl0cyBpbnB1dC4gV2UgbmV2ZXIgZ2V0IHRoYXQgZmFyIGZvciBhblxuICAgICAgLy8gdW5yZWdpc3RlcmVkIHN0ZXAsIHNvIHRoZSBzdGVwIGVudGl0eSBkb2VzIG5vdCBleGlzdCB5ZXQg4oCUIHdyaXRpbmdcbiAgICAgIC8vIGBzdGVwX2ZhaWxlZGAgc3RyYWlnaHQgYXdheSB3b3VsZCBoaXQgdGhlIHdvcmxkJ3MgXCJzdGVwIG11c3QgZXhpc3RcIlxuICAgICAgLy8gb3JkZXJpbmcgZ3VhcmQgYW5kIHdlZGdlIHRoZSBydW4uIFNlbmQgdGhlIGxhenkgYHN0ZXBfc3RhcnRlZGAgZmlyc3RcbiAgICAgIC8vIChpdCBjcmVhdGVzIHRoZSBzdGVwICsgc3ludGhldGljIGBzdGVwX2NyZWF0ZWRgIGF0b21pY2FsbHkgYW5kIGtlZXBzXG4gICAgICAvLyByZXBsYXkgY29ycmVjdCksIHRoZW4gZmFpbCBpdCBiZWxvdy4gVGhpcyBhbHNvIHByZXNlcnZlcyB0aGVcbiAgICAgIC8vIGV4YWN0bHktb25lLW93bmVyIGd1YXJhbnRlZTogYSBjb25jdXJyZW50IGhhbmRsZXIgdGhhdCB3b24gdGhlIGNyZWF0ZVxuICAgICAgLy8gbWFrZXMgb3VyIGxhenkgYHN0ZXBfc3RhcnRlZGAgcmVqZWN0IHdpdGggRW50aXR5Q29uZmxpY3RFcnJvciDihpIgd2VcbiAgICAgIC8vIHJldHVybiBgc2tpcHBlZGAgYW5kIG5ldmVyIHdyaXRlIHRoZSBmYWlsdXJlIHR3aWNlLlxuICAgICAgaWYgKHBhcmFtcy5sYXp5U3RlcElucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUdXJibzogdGhpcyBsYXp5IGBzdGVwX3N0YXJ0ZWRgIG11c3Qgbm90IHByZWNlZGUgdGhlIGJhY2tncm91bmRlZFxuICAgICAgICAgIC8vIGBydW5fc3RhcnRlZGAuIE9yZGVyIGl0IGFmdGVyIHRoZSBydW4tcmVhZHkgYmFycmllciAoYmVzdC1lZmZvcnQg4oCUXG4gICAgICAgICAgLy8gYSBiYXJyaWVyIHJlamVjdGlvbiBtZWFucyB0aGUgcnVuIGRvZXNuJ3QgZXhpc3QsIGFuZCB0aGUgY3JlYXRlXG4gICAgICAgICAgLy8gYmVsb3cgc3VyZmFjZXMgdGhlIHJlYWwgZXJyb3IpLiBOby1vcCBvdXRzaWRlIHR1cmJvLlxuICAgICAgICAgIGlmIChwYXJhbXMucnVuUmVhZHlCYXJyaWVyKSB7XG4gICAgICAgICAgICBhd2FpdCBwYXJhbXMucnVuUmVhZHlCYXJyaWVyLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZSh3b3JrZmxvd1J1bklkLCB7XG4gICAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX3N0YXJ0ZWQnLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICB3b3JrZmxvd05hbWUsXG4gICAgICAgICAgICAgIGlucHV0OiBwYXJhbXMubGF6eVN0ZXBJbnB1dCxcbiAgICAgICAgICAgICAgLy8gU3RhbXBlZCBmb3IgY29uc2lzdGVuY3kgZXZlbiB0aG91Z2ggdGhpcyBzdGVwIHRlcm1pbmFsLWZhaWxzXG4gICAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGJlbG93IOKAlCB0aGUgbG9nIHNob3VsZCBuZXZlciBzaG93IGFuIHVub3duZWRcbiAgICAgICAgICAgICAgLy8gbGF6eSBzdGFydC5cbiAgICAgICAgICAgICAgLi4uKHBhcmFtcy5vd25lck1lc3NhZ2VJZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7IG93bmVyTWVzc2FnZUlkOiBwYXJhbXMub3duZXJNZXNzYWdlSWQgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoc3RhcnRFcnIpIHtcbiAgICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhzdGFydEVycikpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoUnVuRXhwaXJlZEVycm9yLmlzKHN0YXJ0RXJyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2dvbmUnIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IHN0YXJ0RXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX2ZhaWxlZCcsXG4gICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICBldmVudERhdGE6IHtcbiAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgZXJyb3I6IGF3YWl0IGRlaHlkcmF0ZVN0ZXBFcnJvcihcbiAgICAgICAgICAgICAgbmV3IEZhdGFsRXJyb3IoZXJyb3JNZXNzYWdlKSxcbiAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgYXdhaXQgZ2V0RW5jcnlwdGlvbktleSgpLFxuICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgICAgY29tcHJlc3Npb25cbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChzdGVwRmFpbEVycikge1xuICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhzdGVwRmFpbEVycikpIHtcbiAgICAgICAgICByZXR1cm4geyB0eXBlOiAnc2tpcHBlZCcgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBzdGVwRmFpbEVycjtcbiAgICAgIH1cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnZmFpbGVkJyksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwRmF0YWxFcnJvcih0cnVlKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2ZhaWxlZCcgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhSZXRyaWVzID0gc3RlcEZuLm1heFJldHJpZXMgPz8gREVGQVVMVF9TVEVQX01BWF9SRVRSSUVTO1xuXG4gICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAuLi5BdHRyaWJ1dGUuU3RlcE1heFJldHJpZXMobWF4UmV0cmllcyksXG4gICAgfSk7XG5cbiAgICAvLyBNYXBzIGEgYHN0ZXBfc3RhcnRlZGAgcmVqZWN0aW9uIHRvIGEgdGVybWluYWwgU3RlcEV4ZWN1dGlvblJlc3VsdCxcbiAgICAvLyBzaGFyZWQgYnkgdGhlIGF3YWl0IHBhdGggKGJlbG93KSBhbmQgdGhlIG9wdGltaXN0aWMtc3RhcnQgcmVjb25jaWxpYXRpb24uXG4gICAgLy8gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgZXJyb3IgaXMgbm90IG9uZSB3ZSB0cmFuc2xhdGUgKGNhbGxlciByZXRocm93cykuXG4gICAgY29uc3Qgc3RhcnRFcnJvclRvUmVzdWx0ID0gKFxuICAgICAgZXJyOiB1bmtub3duXG4gICAgKTogU3RlcEV4ZWN1dGlvblJlc3VsdCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICBpZiAoVGhyb3R0bGVFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBNYXRoLm1heChcbiAgICAgICAgICAxLFxuICAgICAgICAgIHR5cGVvZiBlcnIucmV0cnlBZnRlciA9PT0gJ251bWJlcicgPyBlcnIucmV0cnlBZnRlciA6IDFcbiAgICAgICAgKTtcbiAgICAgICAgcnVudGltZUxvZ2dlci5pbmZvKCdUaHJvdHRsZWQgb24gc3RlcF9zdGFydGVkLCBkZWZlcnJpbmcnLCB7XG4gICAgICAgICAgcmV0cnlBZnRlclNlY29uZHM6IHJldHJ5QWZ0ZXIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAndGhyb3R0bGVkJywgdGltZW91dFNlY29uZHM6IHJldHJ5QWZ0ZXIgfTtcbiAgICAgIH1cbiAgICAgIGlmIChSdW5FeHBpcmVkRXJyb3IuaXMoZXJyKSkge1xuICAgICAgICBydW50aW1lTG9nZ2VyLmluZm8oXG4gICAgICAgICAgYFdvcmtmbG93IHJ1biBcIiR7d29ya2Zsb3dSdW5JZH1cIiBoYXMgYWxyZWFkeSBjb21wbGV0ZWQsIHNraXBwaW5nIHN0ZXAgXCIke3N0ZXBJZH1cIjogJHtlcnIubWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdnb25lJyB9O1xuICAgICAgfVxuICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoZXJyKSkge1xuICAgICAgICBydW50aW1lTG9nZ2VyLmRlYnVnKCdTdGVwIGluIHRlcm1pbmFsIHN0YXRlLCBza2lwcGluZycsIHtcbiAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgICB9KTtcbiAgICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBTa2lwcGVkKHRydWUpLFxuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwU2tpcFJlYXNvbignY29tcGxldGVkJyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnc2tpcHBlZCcgfTtcbiAgICAgIH1cbiAgICAgIGlmIChUb29FYXJseUVycm9yLmlzKGVycikpIHtcbiAgICAgICAgY29uc3QgdGltZW91dFNlY29uZHMgPSBNYXRoLm1heCgxLCBlcnIucmV0cnlBZnRlciA/PyAxKTtcbiAgICAgICAgcnVudGltZUxvZ2dlci5kZWJ1ZygnU3RlcCByZXRyeUFmdGVyIHRpbWVzdGFtcCBub3QgeWV0IHJlYWNoZWQnLCB7XG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgc3RlcElkLFxuICAgICAgICAgIHRpbWVvdXRTZWNvbmRzLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3JldHJ5JywgdGltZW91dFNlY29uZHMgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIC8vIE9wdGltaXN0aWMgaW5saW5lIHN0YXJ0OiB3aGVuIHdlIGhvbGQgdGhlIHN0ZXAgaW5wdXQgbG9jYWxseSAobGF6eSBpbmxpbmVcbiAgICAvLyBwYXRoKSBhbmQgdGhlIG9wdGltaXphdGlvbiBpcyBlbmFibGVkLCBmaXJlIGBzdGVwX3N0YXJ0ZWRgIFdJVEhPVVRcbiAgICAvLyBhd2FpdGluZyBhbmQgcnVuIHRoZSBib2R5IGFnYWluc3QgbG9jYWxseS1zeW50aGVzaXplZCBzdGF0ZS4gQSBsYXp5IHN0ZXBcbiAgICAvLyBpcyBhbHdheXMgYnJhbmQtbmV3IOKHkiBhdHRlbXB0IDEsIG5vIHByaW9yIGVycm9yLCBzdGFydGVkIG5vdyDigJQgc28gd2VcbiAgICAvLyBkb24ndCBuZWVkIHRoZSBzZXJ2ZXIgcm91bmQtdHJpcCB0byBiZWdpbi4gV2UgcmVjb25jaWxlIHRoZSBpbi1mbGlnaHRcbiAgICAvLyBgc3RlcF9zdGFydGVkYCBiZWZvcmUgYW55IHRlcm1pbmFsIHdyaXRlIChgcmVjb25jaWxlT3B0aW1pc3RpY1N0YXJ0YCk6IGlmXG4gICAgLy8gaXQgbG9zdCB0aGUgYXRvbWljIGNyZWF0ZS1jbGFpbSAoNDA5KSBvciB0aGUgcnVuIGlzIGdvbmUvdGhyb3R0bGVkLCB3ZVxuICAgIC8vIGRpc2NhcmQgdGhlIGJvZHkgcmVzdWx0LiBSdW5uaW5nIHRoZSBib2R5IGJlZm9yZSBjb25maXJtaW5nIG93bmVyc2hpcCBjYW5cbiAgICAvLyBleGVjdXRlIGEgc3RlcCBtb3JlIHRoYW4gb25jZSB3aGVuIGhhbmRsZXJzIHJhY2Ug4oCUIGlubGluZSBzdGVwIGJvZGllc1xuICAgIC8vIG11c3QgYmUgaWRlbXBvdGVudDsgZGlzYWJsZSB2aWEgV09SS0ZMT1dfT1BUSU1JU1RJQ19JTkxJTkVfU1RBUlQ9MC5cbiAgICAvL1xuICAgIC8vIFR1cmJvIG1vZGUgcGFzc2VzIGBmb3JjZU9wdGltaXN0aWNTdGFydGAgdG8gZW5hYmxlIHRoaXMgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAvLyBlbnYgZmxhZyAoaXRzIHNpbmdsZS1oYW5kbGVyIGd1YXJhbnRlZSByZW1vdmVzIHRoZSByYWNlKS4gQnV0IGl0IHN0aWxsXG4gICAgLy8gZGVmZXJzIHRvIGFuICpleHBsaWNpdCogYFdPUktGTE9XX09QVElNSVNUSUNfSU5MSU5FX1NUQVJUPTBgOiBmb3JjZWRcbiAgICAvLyBvcHRpbWlzdGljIHN0YXJ0IHJ1bnMgdGhlIGJvZHkgYmVmb3JlIGBzdGVwX3N0YXJ0ZWRgL2BydW5fc3RhcnRlZGAgaXNcbiAgICAvLyBjb25maXJtZWQsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIHByb3BlcnR5IGFuIG9wZXJhdG9yIG9wdHMgb3V0IG9mIHdpdGggdGhhdFxuICAgIC8vIGZsYWcsIHNvIGFuIGV4cGxpY2l0IG9wdC1vdXQgd2lucyBvdmVyIHR1cmJvJ3MgZm9yY2UuXG4gICAgY29uc3Qgb3B0aW1pc3RpY1N0YXJ0ID1cbiAgICAgIHBhcmFtcy5sYXp5U3RlcElucHV0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChpc09wdGltaXN0aWNJbmxpbmVTdGFydEVuYWJsZWQoKSB8fFxuICAgICAgICAocGFyYW1zLmZvcmNlT3B0aW1pc3RpY1N0YXJ0ID09PSB0cnVlICYmXG4gICAgICAgICAgIWlzT3B0aW1pc3RpY0lubGluZVN0YXJ0RXhwbGljaXRseURpc2FibGVkKCkpKTtcblxuICAgIGxldCBzdGVwOiBTdGVwO1xuICAgIC8vIFNldHRsZWQgb3V0Y29tZSBvZiB0aGUgaW4tZmxpZ2h0IG9wdGltaXN0aWMgYHN0ZXBfc3RhcnRlZGAuIEhhbmRsZXJzIGFyZVxuICAgIC8vIGF0dGFjaGVkIHN5bmNocm9ub3VzbHkgKGAudGhlbihvaywgZXJyKWApIHNvIGEgZmFzdCByZWplY3Rpb24gbmV2ZXJcbiAgICAvLyBzdXJmYWNlcyBhcyBhbiB1bmhhbmRsZWRSZWplY3Rpb24gd2hpbGUgdGhlIGJvZHkgcnVucy5cbiAgICBsZXQgb3B0aW1pc3RpY1N0YXJ0U2V0dGxlZDpcbiAgICAgIHwgUHJvbWlzZTx7IG9rOiB0cnVlIH0gfCB7IG9rOiBmYWxzZTsgZXJyOiB1bmtub3duIH0+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICAvLyBBd2FpdCB0aGUgb3B0aW1pc3RpYyBgc3RlcF9zdGFydGVkYCBvdXRjb21lIGFuZCB0cmFuc2xhdGUgYSBsb3N0IHJhY2UgL1xuICAgIC8vIHRlcm1pbmFsIHJ1biAvIHRocm90dGxlIGludG8gYSByZXN1bHQgdGhhdCBzaG9ydC1jaXJjdWl0cyB0aGUgYm9keVxuICAgIC8vIG91dHB1dC4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB3ZSBvd24gdGhlIHN0ZXAgYW5kIG1heSB3cml0ZSBpdHMgdGVybWluYWxcbiAgICAvLyBldmVudC4gQSBub24tdHJhbnNsYXRhYmxlIHJlamVjdGlvbiBpcyByZXRocm93biAoc28gYSB0cmFuc2llbnRcbiAgICAvLyBzdGVwX3N0YXJ0ZWQgZmFpbHVyZSBwcm9wYWdhdGVzIHRvIHRoZSBxdWV1ZSBoYW5kbGVyIGZvciByZWRlbGl2ZXJ5LFxuICAgIC8vIGV4YWN0bHkgYXMgb24gdGhlIGF3YWl0IHBhdGgpLiBJZGVtcG90ZW50IOKAlCBzYWZlIHRvIGNhbGwgbW9yZSB0aGFuIG9uY2UuXG4gICAgY29uc3QgcmVjb25jaWxlT3B0aW1pc3RpY1N0YXJ0ID0gYXN5bmMgKCk6IFByb21pc2U8XG4gICAgICBTdGVwRXhlY3V0aW9uUmVzdWx0IHwgdW5kZWZpbmVkXG4gICAgPiA9PiB7XG4gICAgICBpZiAoIW9wdGltaXN0aWNTdGFydFNldHRsZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBzZXR0bGVkID0gYXdhaXQgb3B0aW1pc3RpY1N0YXJ0U2V0dGxlZDtcbiAgICAgIGlmIChzZXR0bGVkLm9rKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgbWFwcGVkID0gc3RhcnRFcnJvclRvUmVzdWx0KHNldHRsZWQuZXJyKTtcbiAgICAgIGlmICghbWFwcGVkKSB0aHJvdyBzZXR0bGVkLmVycjtcbiAgICAgIHJldHVybiBtYXBwZWQ7XG4gICAgfTtcblxuICAgIGlmIChvcHRpbWlzdGljU3RhcnQpIHtcbiAgICAgIC8vIENoYWluIHRoZSBsYXp5IGBzdGVwX3N0YXJ0ZWRgIG9uIHRoZSBydW4tcmVhZHkgYmFycmllciAodHVyYm8gbW9kZSk6XG4gICAgICAvLyB0aGUgc3RlcCBjYW4ndCBiZSBjcmVhdGVkIGJlZm9yZSBpdHMgcnVuIGV4aXN0cywgYnV0IHRoZSBib2R5IGJlbG93XG4gICAgICAvLyBydW5zIGltbWVkaWF0ZWx5IGFnYWluc3Qgc3ludGhlc2l6ZWQgc3RhdGUsIHNvIHRoZSBgcnVuX3N0YXJ0ZWRgXG4gICAgICAvLyByb3VuZC10cmlwIG92ZXJsYXBzIHRoZSBib2R5IHJhdGhlciB0aGFuIGJsb2NraW5nIGl0LiBPdXRzaWRlIHR1cmJvIHRoZVxuICAgICAgLy8gYmFycmllciBpcyB1bmRlZmluZWQgYW5kIHRoaXMgaXMgYSBwbGFpbiBjcmVhdGUuXG4gICAgICBjb25zdCBzdGFydGVkUHJvbWlzZSA9IChwYXJhbXMucnVuUmVhZHlCYXJyaWVyID8/IFByb21pc2UucmVzb2x2ZSgpKS50aGVuKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIHdvcmxkLmV2ZW50cy5jcmVhdGUod29ya2Zsb3dSdW5JZCwge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiAnc3RlcF9zdGFydGVkJyxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHN0ZXBJZCxcbiAgICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgd29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgICBpbnB1dDogcGFyYW1zLmxhenlTdGVwSW5wdXQsXG4gICAgICAgICAgICAgIC8vIElubGluZS1vd25lcnNoaXAgc3RhbXAg4oCUIHNlZSBTdGVwRXhlY3V0b3JQYXJhbXMub3duZXJNZXNzYWdlSWQuXG4gICAgICAgICAgICAgIC4uLihwYXJhbXMub3duZXJNZXNzYWdlSWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8geyBvd25lck1lc3NhZ2VJZDogcGFyYW1zLm93bmVyTWVzc2FnZUlkIH1cbiAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBvcHRpbWlzdGljU3RhcnRTZXR0bGVkID0gc3RhcnRlZFByb21pc2UudGhlbihcbiAgICAgICAgKCkgPT4gKHsgb2s6IHRydWUgYXMgY29uc3QgfSksXG4gICAgICAgIChlcnIpID0+ICh7IG9rOiBmYWxzZSBhcyBjb25zdCwgZXJyIH0pXG4gICAgICApO1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIHN0ZXAgPSB7XG4gICAgICAgIHJ1bklkOiB3b3JrZmxvd1J1bklkLFxuICAgICAgICBzdGVwSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICAgICAgaW5wdXQ6IHBhcmFtcy5sYXp5U3RlcElucHV0LFxuICAgICAgICBhdHRlbXB0OiAxLFxuICAgICAgICBzdGFydGVkQXQ6IG5vdyxcbiAgICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc3RlcF9zdGFydGVkIHZhbGlkYXRlcyBzdGF0ZSBhbmQgcmV0dXJucyB0aGUgc3RlcCBlbnRpdHkuIE9uIHRoZSBsYXp5XG4gICAgICAvLyBpbmxpbmUgcGF0aCB3ZSBhbHNvIGNhcnJ5IHRoZSBzdGVwIGBpbnB1dGAgc28gdGhlIHdvcmxkIGNyZWF0ZXMgdGhlXG4gICAgICAvLyBzdGVwIG9uIHRoZSBmbHkgKG5vIHNlcGFyYXRlIHN0ZXBfY3JlYXRlZCByb3VuZC10cmlwKS4gVGhlIHdvcmxkJ3NcbiAgICAgIC8vIGF0b21pYyBjcmVhdGUtY2xhaW0gbWFrZXMgdGhpcyBleGFjdGx5LW9uZS1vd25lcjogYSBjb25jdXJyZW50IGxvc2VyXG4gICAgICAvLyBnZXRzIEVudGl0eUNvbmZsaWN0RXJyb3IsIG1hcHBlZCB0byBgeyB0eXBlOiAnc2tpcHBlZCcgfWAsIHNvIGl0IG5ldmVyXG4gICAgICAvLyBydW5zIHRoZSBib2R5LiBXaGVuIGBsYXp5U3RlcElucHV0YCBpcyBhYnNlbnQgdGhpcyBpcyB0aGUgbGVnYWN5XG4gICAgICAvLyBzdGVwX3N0YXJ0ZWQgKHN0ZXAgYWxyZWFkeSBjcmVhdGVkLCBubyBwYXlsb2FkKS5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIElubGluZS1vd25lcnNoaXAgc3RhbXA6IHByZXNlbnQgb24gdGhlIGxhenkgcGF0aHMgQU5EIG9uIHRoZVxuICAgICAgICAvLyBvd25lZC1yZWNvdmVyeSBiYXJlIHN0YXJ0IChhIHJlZGVsaXZlcnkgb2YgdGhlIG93bmluZyBtZXNzYWdlXG4gICAgICAgIC8vIHJlLWV4ZWN1dGluZyBpdHMgc3RlcCBtdXN0IHJlLXN0YW1wIOKAlCBvd25lcnNoaXAgZGVyaXZlcyBmcm9tIHRoZVxuICAgICAgICAvLyBsYXRlc3Qgc3RhcnQsIHNvIGFuIHVuc3RhbXBlZCByZWNvdmVyeSBzdGFydCB3b3VsZCByZWFkIGFzXG4gICAgICAgIC8vIFwidW5vd25lZFwiIHRvIGEgbGF0ZXIgd2FrZSkuIFRoZSBiYWNrZ3JvdW5kLXN0ZXAgcGF0aCBwYXNzZXMgbm9cbiAgICAgICAgLy8gb3duZXJNZXNzYWdlSWQsIHNvIGl0cyBiYXJlIHN0YXJ0IGNsZWFycyBvd25lcnNoaXAgYXMgaW50ZW5kZWQuXG4gICAgICAgIGNvbnN0IG93bmVyc2hpcFN0YW1wID1cbiAgICAgICAgICBwYXJhbXMub3duZXJNZXNzYWdlSWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7IG93bmVyTWVzc2FnZUlkOiBwYXJhbXMub3duZXJNZXNzYWdlSWQgfVxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgY29uc3Qgc3RhcnRSZXN1bHQgPSBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHdvcmtmbG93UnVuSWQsIHtcbiAgICAgICAgICBldmVudFR5cGU6ICdzdGVwX3N0YXJ0ZWQnLFxuICAgICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgICAgICBjb3JyZWxhdGlvbklkOiBzdGVwSWQsXG4gICAgICAgICAgZXZlbnREYXRhOlxuICAgICAgICAgICAgcGFyYW1zLmxhenlTdGVwSW5wdXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICAgICAgd29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgICAgICAgaW5wdXQ6IHBhcmFtcy5sYXp5U3RlcElucHV0LFxuICAgICAgICAgICAgICAgICAgLi4ub3duZXJzaGlwU3RhbXAsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHsgc3RlcE5hbWUsIC4uLm93bmVyc2hpcFN0YW1wIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghc3RhcnRSZXN1bHQuc3RlcCkge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICAgIGBzdGVwX3N0YXJ0ZWQgZXZlbnQgZm9yIFwiJHtzdGVwSWR9XCIgZGlkIG5vdCByZXR1cm4gc3RlcCBlbnRpdHlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBzdGVwID0gc3RhcnRSZXN1bHQuc3RlcDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBtYXBwZWQgPSBzdGFydEVycm9yVG9SZXN1bHQoZXJyKTtcbiAgICAgICAgaWYgKG1hcHBlZCkgcmV0dXJuIG1hcHBlZDtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJ1bnRpbWVMb2dnZXIuZGVidWcoJ1N0ZXAgZXhlY3V0aW9uIGRldGFpbHMnLCB7XG4gICAgICBzdGVwTmFtZSxcbiAgICAgIHN0ZXBJZDogc3RlcC5zdGVwSWQsXG4gICAgICBzdGF0dXM6IHN0ZXAuc3RhdHVzLFxuICAgICAgYXR0ZW1wdDogc3RlcC5hdHRlbXB0LFxuICAgIH0pO1xuXG4gICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cyhzdGVwLnN0YXR1cyksXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0OiB1bmtub3duO1xuXG4gICAgLy8gQ2hlY2sgbWF4IHJldHJpZXMgQUZURVIgc3RlcF9zdGFydGVkIChhdHRlbXB0IHdhcyBqdXN0IGluY3JlbWVudGVkKS5cbiAgICAvLyBPbmx5IGVuZm9yY2Ugd2hlbiB0aGUgc3RlcCBoYXMgYSBwcmV2aW91cyBlcnJvciDigJQgdGhpcyBkaXN0aW5ndWlzaGVzXG4gICAgLy8gYWN0dWFsIHJldHJpZXMgKGZhaWxlZCDihpIgcmV0cnkpIGZyb20gY29uY3VycmVudCBzdGFydHMgKFYyIGlubGluZVxuICAgIC8vIGV4ZWN1dGlvbiBsb29wIGNhbiBjYXVzZSBtdWx0aXBsZSBoYW5kbGVycyB0byBzdGVwX3N0YXJ0ZWQgdGhlIHNhbWVcbiAgICAvLyBzdGVwIHNpbXVsdGFuZW91c2x5LCBpbmZsYXRpbmcgdGhlIGF0dGVtcHQgY291bnRlciB3aXRob3V0IGFueSBmYWlsdXJlKS5cbiAgICBpZiAoc3RlcC5hdHRlbXB0ID4gbWF4UmV0cmllcyArIDEgJiYgc3RlcC5lcnJvcikge1xuICAgICAgY29uc3QgcmV0cnlDb3VudCA9IHN0ZXAuYXR0ZW1wdCAtIDE7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgU3RlcCBcIiR7c3RlcE5hbWV9XCIgZXhjZWVkZWQgbWF4IHJldHJpZXMgKCR7cmV0cnlDb3VudH0gJHtwbHVyYWxpemUoJ3JldHJ5JywgJ3JldHJpZXMnLCByZXRyeUNvdW50KX0pYDtcbiAgICAgIHN0ZXBMb2dnZXIuZXJyb3IoJ1N0ZXAgZXhjZWVkZWQgbWF4IHJldHJpZXMnLCB7XG4gICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICByZXRyeUNvdW50LFxuICAgICAgfSk7XG4gICAgICAvLyBQcmVzZXJ2ZSB0aGUgcHJpb3IgYXR0ZW1wdCdzIHNlcmlhbGl6ZWQgZXJyb3IgYXMgdGhlIGNhdXNlIHNvIHRoZVxuICAgICAgLy8gdW5kZXJseWluZyBmYWlsdXJlIGlzIHJlY292ZXJhYmxlIGZyb20gYHN0ZXAuZXJyb3IuY2F1c2VgIGFmdGVyXG4gICAgICAvLyBoeWRyYXRpb24sIHdpdGhvdXQgZm9yY2luZyBjb25zdW1lcnMgdG8gd2FsayB0aGUgc3RlcF9yZXRyeWluZ1xuICAgICAgLy8gZXZlbnQgaGlzdG9yeS4gQmVzdC1lZmZvcnQ6IGlmIGh5ZHJhdGlvbiBvZiB0aGUgcHJpb3IgYHN0ZXAuZXJyb3JgXG4gICAgICAvLyB0aHJvd3MsIGZhbGwgYmFjayB0byBhIEZhdGFsRXJyb3Igd2l0aG91dCBjYXVzZS5cbiAgICAgIGNvbnN0IHdyYXBwZWRFcnJvciA9IG5ldyBGYXRhbEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICBpZiAoc3RlcC5lcnJvciAhPSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgKHdyYXBwZWRFcnJvciBhcyBFcnJvcikuY2F1c2UgPSBhd2FpdCBoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgc3RlcC5lcnJvcixcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICBhd2FpdCBnZXRFbmNyeXB0aW9uS2V5KClcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJZ25vcmUg4oCUIGJlc3QtZWZmb3J0IGNhdXNlIGF0dGFjaG1lbnQuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUod29ya2Zsb3dSdW5JZCwge1xuICAgICAgICAgIGV2ZW50VHlwZTogJ3N0ZXBfZmFpbGVkJyxcbiAgICAgICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICBlcnJvcjogYXdhaXQgZGVoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgICB3cmFwcGVkRXJyb3IsXG4gICAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICAgIGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKSxcbiAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgIGdsb2JhbFRoaXMsXG4gICAgICAgICAgICAgIGNvbXByZXNzaW9uXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKGVycikpIHtcbiAgICAgICAgICBydW50aW1lTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAnVHJpZWQgZmFpbGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZC4nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnZmFpbGVkJyksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwUmV0cnlFeGhhdXN0ZWQodHJ1ZSksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdmYWlsZWQnIH07XG4gICAgfVxuXG4gICAgLy8gT3BzIHRoYXQgbXVzdCBiZSBkdXJhYmx5IGNvbW1pdHRlZCBiZWZvcmUgc3RlcCBjb21wbGV0aW9uIChlLmcuIGFcbiAgICAvLyBzdGVwLWluaXRpYXRlZCBhYm9ydCdzIGhvb2tfcmVjZWl2ZWQgZXZlbnQpLiBTZWUgU3RlcENvbnRleHQuIERlY2xhcmVkXG4gICAgLy8gb3V0c2lkZSB0aGUgdHJ5IHNvIHRoZSBmYWlsdXJlIHBhdGggYmVsb3cgY2FuIGFsc28gZHJhaW4gdGhlbS5cbiAgICBjb25zdCBwcmVDb21wbGV0aW9uT3BzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcbiAgICBjb25zdCBvcHM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgIGxldCBvcHNTZXR0bGVkID0gdHJ1ZTtcblxuICAgIC8vIExhdGVuY3kgdGVsZW1ldHJ5IHRvIGF0dGFjaCB0byB0aGlzIHN0ZXAncyB0ZXJtaW5hbCBldmVudC4gQ29tcHV0ZWRcbiAgICAvLyByaWdodCBiZWZvcmUgdXNlciBjb2RlIHJ1bnM7IGRlY2xhcmVkIGhlcmUgc28gdGhlIGZhaWx1cmUgcGF0aCAodGhlXG4gICAgLy8gY2F0Y2ggYmVsb3cpIGNhbiBhdHRhY2ggaXQgdG8gc3RlcF9mYWlsZWQgdG9vLlxuICAgIGxldCBsYXRlbmN5RXZlbnREYXRhOiBTdGVwTGF0ZW5jeUV2ZW50RGF0YSB8IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdHRlbXB0ID0gc3RlcC5hdHRlbXB0O1xuXG4gICAgICBpZiAoIXN0ZXAuc3RhcnRlZEF0KSB7XG4gICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICBgU3RlcCBcIiR7c3RlcElkfVwiIGhhcyBubyBcInN0YXJ0ZWRBdFwiIHRpbWVzdGFtcGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0ZXBTdGFydGVkQXQgPSBzdGVwLnN0YXJ0ZWRBdDtcbiAgICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgZW5jcnlwdGlvbiBrZXkgd2hlbiBhdmFpbGFibGUsIG90aGVyd2lzZSByZXNvbHZlXG4gICAgICAvLyB0aHJvdWdoIHRoZSBtZW1vaXplZCBhY2Nlc3NvciBkZWNsYXJlZCBhdCB0aGUgdG9wIG9mIHRoaXMgdHJhY2UuXG4gICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gcGFyYW1zLmVuY3J5cHRpb25LZXkgPz8gKGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKSk7XG4gICAgICBjb25zdCBoeWRyYXRlZElucHV0ID0gYXdhaXQgdHJhY2UoXG4gICAgICAgICdzdGVwLmh5ZHJhdGUnLFxuICAgICAgICB7fSxcbiAgICAgICAgYXN5bmMgKGh5ZHJhdGVTcGFuKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBoeWRyYXRlZCA9IGF3YWl0IGh5ZHJhdGVTdGVwQXJndW1lbnRzKFxuICAgICAgICAgICAgc3RlcC5pbnB1dCxcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgb3BzLFxuICAgICAgICAgICAgZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgcGFyYW1zLndvcmtmbG93RGVwbG95bWVudElkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBkdXJhdGlvbk1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgICBoeWRyYXRlU3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcEFyZ3VtZW50c0NvdW50KGh5ZHJhdGVkLmFyZ3MubGVuZ3RoKSxcbiAgICAgICAgICAgIC4uLkF0dHJpYnV0ZS5RdWV1ZURlc2VyaWFsaXplVGltZU1zKGR1cmF0aW9uTXMpLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBoeWRyYXRlZDtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgYXJncyA9IGh5ZHJhdGVkSW5wdXQuYXJncztcbiAgICAgIGNvbnN0IHRoaXNWYWwgPSBoeWRyYXRlZElucHV0LnRoaXNWYWwgPz8gbnVsbDtcbiAgICAgIGNvbnN0IHdvcmtmbG93QmFzZVVybCA9IGNyZWF0ZVdvcmtmbG93QmFzZVVybChcbiAgICAgICAgaXNWZXJjZWxcbiAgICAgICAgICA/IGBodHRwczovLyR7cHJvY2Vzcy5lbnYuVkVSQ0VMX1VSTH1gXG4gICAgICAgICAgOiBgaHR0cDovL2xvY2FsaG9zdDokeyhhd2FpdCBnZXRQb3J0TGF6eSgpKSA/PyAzMDAwfWBcbiAgICAgICk7XG5cbiAgICAgIC8vIC0tLSBVc2VyIGNvZGUgZXhlY3V0aW9uIC0tLVxuICAgICAgLy8gV3JhcCBvbmx5IHN0ZXBGbi5hcHBseSgpICh1c2VyIHN0ZXAgY29kZSkgc28gY2xlYW51cCBiZWxvdyBydW5zIG9uXG4gICAgICAvLyBCT1RIIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuIEEgdXNlci1jb2RlIHRocm93IGlzIGNhcHR1cmVkIGhlcmUgYW5kXG4gICAgICAvLyByZS1yYWlzZWQgYWZ0ZXIgY2FuY2VsQWJvcnRSZWFkZXJzLCBzbyBpdCBzdGlsbCBmbG93cyB0byB0aGUgb3V0ZXJcbiAgICAgIC8vIGNhdGNoIChzdGVwX2ZhaWxlZC9zdGVwX3JldHJ5aW5nKSDigJQgYnV0IHRoZSBhYm9ydC1zdHJlYW0gcmVhZGVyIGlzXG4gICAgICAvLyB0b3JuIGRvd24gZmlyc3QuIFdpdGhvdXQgdGhpcywgYSB0aHJvd2luZy9yZXRyeWluZyBzaWduYWwtYmVhcmluZ1xuICAgICAgLy8gc3RlcCB3b3VsZCBsZWFrIGEgcmVhbC10aW1lIGFib3J0IHJlYWRlciBwZXIgYXR0ZW1wdC5cbiAgICAgIGxldCB1c2VyQ29kZUVycm9yOiB1bmtub3duO1xuICAgICAgbGV0IHVzZXJDb2RlRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGV4ZWN1dGlvblN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICBsYXRlbmN5RXZlbnREYXRhID0gY29tcHV0ZVN0ZXBMYXRlbmN5RXZlbnREYXRhKHtcbiAgICAgICAgdHJhY2tpbmc6IHBhcmFtcy5sYXRlbmN5VHJhY2tpbmcsXG4gICAgICAgIHN0ZXBDb2RlU3RhcnRlZEF0TXM6IGV4ZWN1dGlvblN0YXJ0VGltZSxcbiAgICAgICAgYXR0ZW1wdCxcbiAgICAgICAgbGF6eVN0ZXBTdGFydDogcGFyYW1zLmxhenlTdGVwSW5wdXQgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgb3B0aW1pc3RpY1N0YXJ0LFxuICAgICAgfSk7XG4gICAgICBpZiAobGF0ZW5jeUV2ZW50RGF0YSkge1xuICAgICAgICAvLyBNaXJyb3IgdGhlIGxhdGVuY3kgdGVsZW1ldHJ5IG9udG8gdGhlIHN0ZXAgc3BhbiBzbyB0cmFjZXMgc2hvd1xuICAgICAgICAvLyBUVEZTL1NUU08gYWxvbmdzaWRlIHRoZSBmbGFtZSBncmFwaCwgbm90IGp1c3QgRGF0YWRvZyBtZXRyaWNzLlxuICAgICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAuLi4obGF0ZW5jeUV2ZW50RGF0YS50dGZzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gQXR0cmlidXRlLlN0ZXBUdGZzTXMobGF0ZW5jeUV2ZW50RGF0YS50dGZzKVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgLi4uKGxhdGVuY3lFdmVudERhdGEuc3RzbyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IEF0dHJpYnV0ZS5TdGVwU3Rzb01zKGxhdGVuY3lFdmVudERhdGEuc3RzbylcbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwTGF0ZW5jeU9wdGltaXphdGlvbnMoXG4gICAgICAgICAgICBsYXRlbmN5RXZlbnREYXRhLm9wdGltaXphdGlvbnMgPz8gW11cbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRyYWNlKCdzdGVwLmV4ZWN1dGUnLCB7fSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBjb250ZXh0U3RvcmFnZS5ydW4oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0ZXBNZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICAgIHN0ZXBJZCxcbiAgICAgICAgICAgICAgICBzdGVwU3RhcnRlZEF0OiBuZXcgRGF0ZSgrc3RlcFN0YXJ0ZWRBdCksXG4gICAgICAgICAgICAgICAgYXR0ZW1wdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd29ya2Zsb3dNZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHdvcmtmbG93TmFtZSxcbiAgICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICAgIHdvcmtmbG93U3RhcnRlZEF0OiBuZXcgRGF0ZSgrd29ya2Zsb3dTdGFydGVkQXQpLFxuICAgICAgICAgICAgICAgIHVybDogd29ya2Zsb3dCYXNlVXJsLFxuICAgICAgICAgICAgICAgIGZlYXR1cmVzOiB7IGVuY3J5cHRpb246ICEhZW5jcnlwdGlvbktleSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB3b3JrZmxvd0RlcGxveW1lbnRJZDogcGFyYW1zLndvcmtmbG93RGVwbG95bWVudElkLFxuICAgICAgICAgICAgICBvcHMsXG4gICAgICAgICAgICAgIHByZUNvbXBsZXRpb25PcHMsXG4gICAgICAgICAgICAgIGNsb3N1cmVWYXJzOiBoeWRyYXRlZElucHV0LmNsb3N1cmVWYXJzLFxuICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgICAvLyBUdXJibyBvcHRpbWlzdGljIHN0YXJ0IHJ1bnMgdGhpcyBib2R5IGJlZm9yZSBgcnVuX3N0YXJ0ZWRgIGlzXG4gICAgICAgICAgICAgIC8vIGR1cmFibGUuIEV4cG9zZSB0aGUgYmFycmllciBzbyBhIGRpcmVjdCBzdGVwLWJvZHkgd29ybGQgd3JpdGVcbiAgICAgICAgICAgICAgLy8gKGUuZy4gYHNldEF0dHJpYnV0ZXNgKSBjYW4gb3JkZXIgaXRzZWxmIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAvLyBydW4gZXhpc3RzLiBVbmRlZmluZWQgb24gdGhlIGF3YWl0IHBhdGggKHJ1biBhbHJlYWR5IGR1cmFibGUpLlxuICAgICAgICAgICAgICBydW5SZWFkeUJhcnJpZXI6IG9wdGltaXN0aWNTdGFydFxuICAgICAgICAgICAgICAgID8gcGFyYW1zLnJ1blJlYWR5QmFycmllclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHN0ZXBGbi5hcHBseSh0aGlzVmFsLCBhcmdzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHVzZXJDb2RlRXJyb3IgPSBlcnI7XG4gICAgICAgIHVzZXJDb2RlRmFpbGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4ZWN1dGlvblRpbWVNcyA9IERhdGUubm93KCkgLSBleGVjdXRpb25TdGFydFRpbWU7XG5cbiAgICAgIC8vIFRlYXIgZG93biBhbnkgYWJvcnQtc3RyZWFtIHJlYWRlcnMgb3BlbmVkIHdoaWxlIGh5ZHJhdGluZyB0aGUgc3RlcCdzXG4gICAgICAvLyBhcmd1bWVudHMgKGEgc2VyaWFsaXplZCBBYm9ydFNpZ25hbCBvcGVucyBhIHJlYWwtdGltZSBhYm9ydCByZWFkZXIgZm9yXG4gICAgICAvLyB0aGUgc3RlcCdzIGR1cmF0aW9uKS4gV2l0aG91dCB0aGlzIHRoZSByZWFkZXIncyBgcmVhZCgpYCBwcm9taXNlIG5ldmVyXG4gICAgICAvLyBzZXR0bGVzLCBzbyB0aGUgYG9wc2AgZmx1c2ggYmVsb3cgYWx3YXlzIGxvc2VzIHRoZSA1MDBtcyByYWNlIGFuZCB0aGVcbiAgICAgIC8vIHN0ZXAgcmVwb3J0cyBgaGFzUGVuZGluZ09wc2Ag4oCUIGZvcmNpbmcgdGhlIGlubGluZSBsb29wIHRvIHF1ZXVlIGFcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBhbmQgcGF5aW5nIGEgZnVsbCByb3VuZC10cmlwIHBlciBzaWduYWwtYmVhcmluZyBzdGVwLlxuICAgICAgLy8gVGhlIG5vbi1pbmxpbmUgYHN0ZXAtaGFuZGxlcmAgcGF0aCBhbHJlYWR5IGRvZXMgdGhpcyBhZnRlciB1c2VyIGNvZGUuXG4gICAgICAvLyBSdW5zIHVuY29uZGl0aW9uYWxseSAoc3VjY2VzcyBvciBmYWlsdXJlKSBzbyBhIHRocm93aW5nIHN0ZXAgZG9lc24ndFxuICAgICAgLy8gbGVhayB0aGUgcmVhZGVyLlxuICAgICAgY2FuY2VsQWJvcnRSZWFkZXJzKC4uLmFyZ3MsIHRoaXNWYWwsIGh5ZHJhdGVkSW5wdXQuY2xvc3VyZVZhcnMpO1xuXG4gICAgICAvLyBSZS1yYWlzZSBhIHVzZXItY29kZSBmYWlsdXJlIG5vdyB0aGF0IGNsZWFudXAgaGFzIHJ1bjsgdGhlIG91dGVyXG4gICAgICAvLyBjYXRjaCBtYXBzIGl0IHRvIHN0ZXBfZmFpbGVkL3N0ZXBfcmV0cnlpbmcuXG4gICAgICBpZiAodXNlckNvZGVGYWlsZWQpIHtcbiAgICAgICAgdGhyb3cgdXNlckNvZGVFcnJvcjtcbiAgICAgIH1cblxuICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5RdWV1ZUV4ZWN1dGlvblRpbWVNcyhleGVjdXRpb25UaW1lTXMpLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRyYWNlKCdzdGVwLmRlaHlkcmF0ZScsIHt9LCBhc3luYyAoZGVoeWRyYXRlU3BhbikgPT4ge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBkZWh5ZHJhdGVkID0gYXdhaXQgZGVoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgICAgb3BzLFxuICAgICAgICAgIGdsb2JhbFRoaXMsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgY29tcHJlc3Npb24sXG4gICAgICAgICAgLy8gVHVyYm8gb3B0aW1pc3RpYyBzdGFydDogYSByZXR1cm5lZCBzdHJlYW0gaXMgcGlwZWQgdG8gdGhlIHNlcnZlclxuICAgICAgICAgIC8vIGFmdGVyIHRoZSBib2R5IGJ1dCB3aXRoaW4gdGhpcyBzYW1lIG9wIGZsdXNoLCBzbyBnYXRlIGl0cyBmaXJzdFxuICAgICAgICAgIC8vIHdyaXRlIG9uIHRoZSBydW4tcmVhZHkgYmFycmllci4gVW5kZWZpbmVkIG9uIHRoZSBhd2FpdCBwYXRoLlxuICAgICAgICAgIG9wdGltaXN0aWNTdGFydCA/IHBhcmFtcy5ydW5SZWFkeUJhcnJpZXIgOiB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZHVyYXRpb25NcyA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGRlaHlkcmF0ZVNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgIC4uLkF0dHJpYnV0ZS5RdWV1ZVNlcmlhbGl6ZVRpbWVNcyhkdXJhdGlvbk1zKSxcbiAgICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFJlc3VsdFR5cGUodHlwZW9mIGRlaHlkcmF0ZWQpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRlaHlkcmF0ZWQ7XG4gICAgICB9KTtcblxuICAgICAgLy8gRmx1c2ggcGVuZGluZyBvcHMgKHN0cmVhbSB3cml0ZXMsIGV0Yy4pIHdpdGggYSBzaG9ydCBpbmxpbmUgd2FpdC5cbiAgICAgIC8vIE5vdyB0aGF0IFdvcmtmbG93U2VydmVyV3JpdGFibGVTdHJlYW0gZmx1c2hlcyBzeW5jaHJvbm91c2x5IG9uXG4gICAgICAvLyBlYWNoIHdyaXRlIChub3QgdmlhIHNldFRpbWVvdXQpLCB0aGUgZmx1c2hhYmxlUGlwZSdzIHBlbmRpbmdPcHNcbiAgICAgIC8vIGFjY3VyYXRlbHkgcmVmbGVjdHMgd2hldGhlciBkYXRhIGhhcyByZWFjaGVkIHRoZSBzZXJ2ZXIuIE1vc3Qgb3BzXG4gICAgICAvLyBzZXR0bGUgd2l0aGluIH4yMDBtcyAoMTAwbXMgbG9jay1yZWxlYXNlIHBvbGxpbmcgKyBIVFRQIGZsdXNoKS5cbiAgICAgIC8vIElmIG9wcyBkb24ndCBzZXR0bGUgaW4gNTAwbXMgKGUuZy4sIFdyaXRhYmxlU3RyZWFtIGtlcHQgb3BlblxuICAgICAgLy8gYWNyb3NzIHN0ZXBzKSwgd2FpdFVudGlsIGhhbmRsZXMgdGhlIHJlc3QuXG4gICAgICBpZiAob3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgb3BzUHJvbWlzZSA9IFByb21pc2UuYWxsKG9wcyk7XG4gICAgICAgIC8vIFRoZSByYWNlIGJlbG93IHN1cmZhY2VzIGZhaWx1cmVzIGlubGluZSB3aGVuIG9wcyBzZXR0bGUgcXVpY2tseTtcbiAgICAgICAgLy8gaWYgdGhlIDUwMG1zIHRpbWVvdXQgd2lucywgdGhlIGZhaWx1cmUgaXMgb25seSBvYnNlcnZlZCBoZXJlLiBUaGVcbiAgICAgICAgLy8gcHJvbWlzZSBoYW5kZWQgdG8gd2FpdFVudGlsIG11c3QgbmV2ZXIgcmVqZWN0IChhbiB1bmNvbnN1bWVkXG4gICAgICAgIC8vIHdhaXRVbnRpbCByZWplY3Rpb24gY3Jhc2hlcyB0aGUgcHJvY2VzcyBhcyB1bmhhbmRsZWRSZWplY3Rpb24pLFxuICAgICAgICAvLyBzbyB1bmV4cGVjdGVkIGZhaWx1cmVzIGFyZSBsb2dnZWQgaW5zdGVhZC5cbiAgICAgICAgc2FmZVdhaXRVbnRpbChvcHNQcm9taXNlLCAoZXJyKSA9PiB7XG4gICAgICAgICAgcnVudGltZUxvZ2dlci53YXJuKCdCYWNrZ3JvdW5kIGZsdXNoIG9mIHN0ZXAgc3RyZWFtIG9wcyBmYWlsZWQnLCB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9wc1NldHRsZWQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICAgIG9wc1Byb21pc2UudGhlbihcbiAgICAgICAgICAgICgpID0+IHRydWUgYXMgY29uc3QsXG4gICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZSBleHBlY3RlZCBjbGllbnQgZGlzY29ubmVjdCBlcnJvcnMgKGUuZy4sIGJyb3dzZXJcbiAgICAgICAgICAgICAgLy8gcmVmcmVzaCBkdXJpbmcgc3RyZWFtaW5nKVxuICAgICAgICAgICAgICBjb25zdCBpc0Fib3J0RXJyb3IgPVxuICAgICAgICAgICAgICAgIGVycj8ubmFtZSA9PT0gJ0Fib3J0RXJyb3InIHx8IGVycj8ubmFtZSA9PT0gJ1Jlc3BvbnNlQWJvcnRlZCc7XG4gICAgICAgICAgICAgIGlmIChpc0Fib3J0RXJyb3IpIHJldHVybiB0cnVlIGFzIGNvbnN0O1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSxcbiAgICAgICAgICBuZXcgUHJvbWlzZTxmYWxzZT4oKHIpID0+IHNldFRpbWVvdXQoKCkgPT4gcihmYWxzZSksIDUwMCkpLFxuICAgICAgICBdKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3B0aW1pc3RpYyBzdGFydDogdGhlIGJvZHkgcmFuIGJlZm9yZSBgc3RlcF9zdGFydGVkYCB3YXMgY29uZmlybWVkLlxuICAgICAgLy8gUmVjb25jaWxlIGl0IG5vdyDigJQgaWYgd2UgbG9zdCB0aGUgY3JlYXRlLWNsYWltIChvciB0aGUgcnVuIGlzXG4gICAgICAvLyBnb25lL3Rocm90dGxlZCkgZGlzY2FyZCB0aGlzIHJlc3VsdCBhbmQgZG9uJ3Qgd3JpdGUgc3RlcF9jb21wbGV0ZWQuXG4gICAgICAvLyBSZWNvbmNpbGUgYmVmb3JlIGRyYWluaW5nIHByZUNvbXBsZXRpb25PcHM6IGEgZGlzY2FyZGVkIHJlc3VsdCBtZWFuc1xuICAgICAgLy8gdGhlIHdpbm5pbmcgaGFuZGxlciBvd25zIHRoZSBvdXRjb21lIChhbmQgcmUtZmlyZXMgYW55IGFib3J0XG4gICAgICAvLyBpZGVtcG90ZW50bHkpLCBzbyB0aGVyZSdzIG5vIHBvaW50IHBheWluZyB0aGUgYWJvcnQtY29tbWl0IGxhdGVuY3kuXG4gICAgICBpZiAob3B0aW1pc3RpY1N0YXJ0KSB7XG4gICAgICAgIGNvbnN0IHJlY29uY2lsZSA9IGF3YWl0IHJlY29uY2lsZU9wdGltaXN0aWNTdGFydCgpO1xuICAgICAgICBpZiAocmVjb25jaWxlKSByZXR1cm4gcmVjb25jaWxlO1xuICAgICAgfVxuXG4gICAgICAvLyBDb21taXQgbXVzdC1iZS1kdXJhYmxlIG9wcyAoZS5nLiBhIHN0ZXAtaW5pdGlhdGVkIGFib3J0J3NcbiAgICAgIC8vIGhvb2tfcmVjZWl2ZWQgZXZlbnQpIGJlZm9yZSB3cml0aW5nIHN0ZXBfY29tcGxldGVkLCBzbyBhbnkgd29ya2Zsb3dcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiB0cmlnZ2VyZWQgYnkgdGhhdCBldmVudCBvYnNlcnZlcyB0aGUgYWJvcnQgcmF0aGVyIHRoYW5cbiAgICAgIC8vIHJhY2luZyBpdC4gVGhlc2Ugb3BzIHN3YWxsb3cgdGhlaXIgb3duIGVycm9ycywgc28gYXdhaXRpbmcgb25seVxuICAgICAgLy8gZW5mb3JjZXMgb3JkZXJpbmcgKHRoZSBgLmNhdGNoKClgIGRlZmVuZHMgdGhlIG5vLXJlamVjdCBjb250cmFjdCBvblxuICAgICAgLy8gU3RlcENvbnRleHQucHJlQ29tcGxldGlvbk9wcykuXG4gICAgICAvL1xuICAgICAgLy8gVHJhZGVvZmY6IGNvcnJlY3RuZXNzIHJlcXVpcmVzIHRoZSBob29rIGJlIGR1cmFibGUgYmVmb3JlIGNvbXBsZXRpb24sXG4gICAgICAvLyBzbyDigJQgdW5saWtlIHRoZSBiYWNrZ3JvdW5kIGBvcHNgIGZsdXNoIGFib3ZlIOKAlCB0aGlzIGNhbm5vdCBiZSBjYXBwZWRcbiAgICAgIC8vIHdpdGggYSByZXNvbHZlLW9uLXRpbWVvdXQgcmFjZS4gQSBzbG93IHJlc3VtZSB0aGVyZWZvcmUgYWRkcyBpdHNcbiAgICAgIC8vIGxhdGVuY3kgdG8gYSBzdGVwIHRoYXQgYWJvcnRzIGEgY29udHJvbGxlciwgYW5kIGEgdHJ1ZSBoYW5nIGhvbGRzXG4gICAgICAvLyBjb21wbGV0aW9uIHVudGlsIHRoZSBwbGF0Zm9ybS9xdWV1ZSBleGVjdXRpb24gdGltZW91dCBmaXJlczsgdGhlIHF1ZXVlXG4gICAgICAvLyB0aGVuIHJlZGVsaXZlcnMgYW5kIHRoZSBzdGVwIHJldHJpZXMsIHJlLWZpcmluZyB0aGUgYWJvcnQgaWRlbXBvdGVudGx5LlxuICAgICAgaWYgKHByZUNvbXBsZXRpb25PcHMubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcmVDb21wbGV0aW9uT3BzKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICAvLyBPcHRpbWlzdGljIHN0YXJ0OiB0aGUgYm9keSB0aHJldyBiZWZvcmUgYHN0ZXBfc3RhcnRlZGAgd2FzIGNvbmZpcm1lZC5cbiAgICAgIC8vIFJlY29uY2lsZSBmaXJzdCDigJQgaWYgd2UgbG9zdCB0aGUgY3JlYXRlLWNsYWltIChvciB0aGUgcnVuIGlzXG4gICAgICAvLyBnb25lL3Rocm90dGxlZCkgdGhlIGJvZHkgZXJyb3IgaXMgbW9vdDsgZGlzY2FyZCBpdCBhbmQgZG9uJ3Qgd3JpdGUgYVxuICAgICAgLy8gdGVybWluYWwgZXZlbnQgKHRoZSB3aW5uaW5nIGhhbmRsZXIgb3ducyB0aGUgb3V0Y29tZSkuIFJlY29uY2lsZVxuICAgICAgLy8gYmVmb3JlIGRyYWluaW5nIHByZUNvbXBsZXRpb25PcHMgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyB0aGUgc3VjY2Vzc1xuICAgICAgLy8gcGF0aDogYSBkaXNjYXJkZWQgb3V0Y29tZSBkb2Vzbid0IG5lZWQgdGhlIGFib3J0IGNvbW1pdHRlZCBoZXJlLlxuICAgICAgaWYgKG9wdGltaXN0aWNTdGFydCkge1xuICAgICAgICBjb25zdCByZWNvbmNpbGUgPSBhd2FpdCByZWNvbmNpbGVPcHRpbWlzdGljU3RhcnQoKTtcbiAgICAgICAgaWYgKHJlY29uY2lsZSkgcmV0dXJuIHJlY29uY2lsZTtcbiAgICAgIH1cblxuICAgICAgLy8gT3JkZXIgYW55IG11c3QtYmUtZHVyYWJsZSBvcHMgKGUuZy4gYSBzdGVwLWluaXRpYXRlZCBhYm9ydCdzXG4gICAgICAvLyBob29rX3JlY2VpdmVkIGV2ZW50KSBhaGVhZCBvZiBzdGVwX2ZhaWxlZCB0b28g4oCUIGEgc3RlcCB0aGF0IGFib3J0cyBhbmRcbiAgICAgIC8vIHRoZW4gdGhyb3dzIG11c3Qgc3RpbGwgaGF2ZSB0aGUgYWJvcnQgcmVjb3JkZWQgYmVmb3JlIHRoZSBmYWlsdXJlXG4gICAgICAvLyBjb250aW51YXRpb24gb2JzZXJ2ZXMgaXQuIFNhbWUgbGF0ZW5jeSB0cmFkZW9mZiBhbmQgbm8tcmVqZWN0IGNvbnRyYWN0XG4gICAgICAvLyBhcyB0aGUgc3VjY2VzcyBwYXRoIGFib3ZlLiBTZWUgU3RlcENvbnRleHQucHJlQ29tcGxldGlvbk9wcy5cbiAgICAgIGlmIChwcmVDb21wbGV0aW9uT3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJlQ29tcGxldGlvbk9wcykuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZmZlY3RpdmVFcnIgPSBwcm9tb3RlQWJvcnRFcnJvclRvRmF0YWwoZXJyKTtcblxuICAgICAgY29uc3Qgbm9ybWFsaXplZEVycm9yID0gYXdhaXQgbm9ybWFsaXplVW5rbm93bkVycm9yKGVmZmVjdGl2ZUVycik7XG4gICAgICBjb25zdCBub3JtYWxpemVkU3RhY2sgPVxuICAgICAgICBub3JtYWxpemVkRXJyb3Iuc3RhY2sgfHwgZ2V0RXJyb3JTdGFjayhlZmZlY3RpdmVFcnIpIHx8ICcnO1xuXG4gICAgICBpZiAoZWZmZWN0aXZlRXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgc3Bhbj8ucmVjb3JkRXhjZXB0aW9uPy4oZWZmZWN0aXZlRXJyKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNGYXRhbCA9IEZhdGFsRXJyb3IuaXMoZWZmZWN0aXZlRXJyKTtcblxuICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5TdGVwRXJyb3JOYW1lKGdldEVycm9yTmFtZShlZmZlY3RpdmVFcnIpKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBFcnJvck1lc3NhZ2Uobm9ybWFsaXplZEVycm9yLm1lc3NhZ2UpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuRXJyb3JUeXBlKGdldEVycm9yTmFtZShlZmZlY3RpdmVFcnIpKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLkVycm9yQ2F0ZWdvcnkoXG4gICAgICAgICAgaXNGYXRhbFxuICAgICAgICAgICAgPyAnZmF0YWwnXG4gICAgICAgICAgICA6IFJldHJ5YWJsZUVycm9yLmlzKGVmZmVjdGl2ZUVycilcbiAgICAgICAgICAgICAgPyAncmV0cnlhYmxlJ1xuICAgICAgICAgICAgICA6ICd0cmFuc2llbnQnXG4gICAgICAgICksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5FcnJvclJldHJ5YWJsZSghaXNGYXRhbCksXG4gICAgICB9KTtcblxuICAgICAgaWYgKFJ1bkV4cGlyZWRFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgIHN0ZXBMb2dnZXIuaW5mbygnV29ya2Zsb3cgcnVuIGFscmVhZHkgY29tcGxldGVkLCBza2lwcGluZyBzdGVwJywge1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgc3RlcElkLFxuICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2dvbmUnIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0ZhdGFsKSB7XG4gICAgICAgIHN0ZXBMb2dnZXIuZXJyb3IoXG4gICAgICAgICAgJ0VuY291bnRlcmVkIEZhdGFsRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHN0ZXAsIGJ1YmJsaW5nIHVwIHRvIHBhcmVudCB3b3JrZmxvdycsXG4gICAgICAgICAgeyB3b3JrZmxvd1J1bklkLCBzdGVwTmFtZSwgZXJyb3JTdGFjazogbm9ybWFsaXplZFN0YWNrIH1cbiAgICAgICAgKTtcbiAgICAgICAgLy8gQXBwbHkgdGhlIG5vcm1hbGl6ZWQgc3RhY2sgdG8gdGhlIHRocm93biB2YWx1ZSBzbyB0aGUgc2VyaWFsaXplZFxuICAgICAgICAvLyBlcnJvciBwcmVzZXJ2ZXMgaXQgZm9yIGNvbnN1bWVycy4gYHR5cGVzLmlzTmF0aXZlRXJyb3IoKWAgd29ya3NcbiAgICAgICAgLy8gYWNyb3NzIFZNIHJlYWxtcyAoYSB3b3JrZmxvdy10aHJvd24gZXJyb3IgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlXG4gICAgICAgIC8vIFZNJ3MgRXJyb3IgY2xhc3MsIG5vdCB0aGUgaG9zdCdzKS5cbiAgICAgICAgaWYgKHR5cGVzLmlzTmF0aXZlRXJyb3IoZWZmZWN0aXZlRXJyKSAmJiBub3JtYWxpemVkU3RhY2spIHtcbiAgICAgICAgICAoZWZmZWN0aXZlRXJyIGFzIEVycm9yKS5zdGFjayA9IG5vcm1hbGl6ZWRTdGFjaztcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUod29ya2Zsb3dSdW5JZCwge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiAnc3RlcF9mYWlsZWQnLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICBlcnJvcjogYXdhaXQgZGVoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUVycixcbiAgICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICAgIGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKSxcbiAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzLFxuICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC4uLmxhdGVuY3lFdmVudERhdGEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChzdGVwRmFpbEVycikge1xuICAgICAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKHN0ZXBGYWlsRXJyKSkge1xuICAgICAgICAgICAgcnVudGltZUxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAnVHJpZWQgZmFpbGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZC4nLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogc3RlcEZhaWxFcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBzdGVwRmFpbEVycjtcbiAgICAgICAgfVxuICAgICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnZmFpbGVkJyksXG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBGYXRhbEVycm9yKHRydWUpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2ZhaWxlZCcgfTtcbiAgICAgIH1cblxuICAgICAgLy8gTm9uLWZhdGFsIGVycm9yOiBjaGVjayBpZiByZXRyaWVzIHJlbWFpbmluZ1xuICAgICAgY29uc3QgY3VycmVudEF0dGVtcHQgPSBzdGVwLmF0dGVtcHQ7XG5cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcEF0dGVtcHQoY3VycmVudEF0dGVtcHQpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcE1heFJldHJpZXMobWF4UmV0cmllcyksXG4gICAgICB9KTtcblxuICAgICAgaWYgKGN1cnJlbnRBdHRlbXB0ID49IG1heFJldHJpZXMgKyAxKSB7XG4gICAgICAgIC8vIE1heCByZXRyaWVzIHJlYWNoZWRcbiAgICAgICAgY29uc3QgcmV0cnlDb3VudCA9IHN0ZXAuYXR0ZW1wdCAtIDE7XG4gICAgICAgIHN0ZXBMb2dnZXIuZXJyb3IoXG4gICAgICAgICAgJ01heCByZXRyaWVzIHJlYWNoZWQsIGJ1YmJsaW5nIGVycm9yIHRvIHBhcmVudCB3b3JrZmxvdycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgYXR0ZW1wdDogc3RlcC5hdHRlbXB0LFxuICAgICAgICAgICAgcmV0cnlDb3VudCxcbiAgICAgICAgICAgIGVycm9yU3RhY2s6IG5vcm1hbGl6ZWRTdGFjayxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBTdGVwIFwiJHtzdGVwTmFtZX1cIiBmYWlsZWQgYWZ0ZXIgJHttYXhSZXRyaWVzfSAke3BsdXJhbGl6ZSgncmV0cnknLCAncmV0cmllcycsIG1heFJldHJpZXMpfTogJHtub3JtYWxpemVkRXJyb3IubWVzc2FnZX1gO1xuICAgICAgICAvLyBXcmFwIHRoZSBvcmlnaW5hbCB0aHJvd24gdmFsdWUgYXMgYGNhdXNlYCBvbiBhIGZyZXNoIEZhdGFsRXJyb3JcbiAgICAgICAgLy8gc28gdGhlIHdyYXBwaW5nIG1lc3NhZ2UgKyByZXRyeS1jb3VudCBmcmFtaW5nIGlzIHRoZSB1c2VyLWZhY2luZ1xuICAgICAgICAvLyBlcnJvciB3aGlsZSB0aGUgb3JpZ2luYWwgZmFpbHVyZSByZW1haW5zIHJlY292ZXJhYmxlIGZyb21cbiAgICAgICAgLy8gYGVyci5jYXVzZWAgYWZ0ZXIgaHlkcmF0aW9uLlxuICAgICAgICBjb25zdCB3cmFwcGVkRXJyb3IgPSBuZXcgRmF0YWxFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICAod3JhcHBlZEVycm9yIGFzIEVycm9yKS5jYXVzZSA9IGVycjtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRTdGFjaykgd3JhcHBlZEVycm9yLnN0YWNrID0gbm9ybWFsaXplZFN0YWNrO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUod29ya2Zsb3dSdW5JZCwge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiAnc3RlcF9mYWlsZWQnLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgICAgICBlcnJvcjogYXdhaXQgZGVoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgICAgIHdyYXBwZWRFcnJvcixcbiAgICAgICAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgICAgICAgIGF3YWl0IGdldEVuY3J5cHRpb25LZXkoKSxcbiAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzLFxuICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC4uLmxhdGVuY3lFdmVudERhdGEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChzdGVwRmFpbEVycikge1xuICAgICAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKHN0ZXBGYWlsRXJyKSkge1xuICAgICAgICAgICAgcnVudGltZUxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAnVHJpZWQgZmFpbGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZC4nLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogc3RlcEZhaWxFcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdza2lwcGVkJyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBzdGVwRmFpbEVycjtcbiAgICAgICAgfVxuICAgICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnZmFpbGVkJyksXG4gICAgICAgICAgLi4uQXR0cmlidXRlLlN0ZXBSZXRyeUV4aGF1c3RlZCh0cnVlKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6ICdmYWlsZWQnIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFJldHJpZXMgcmVtYWluaW5nXG4gICAgICBpZiAoUmV0cnlhYmxlRXJyb3IuaXMoZXJyKSkge1xuICAgICAgICBzdGVwTG9nZ2VyLmluZm8oJ0VuY291bnRlcmVkIFJldHJ5YWJsZUVycm9yLCBzdGVwIHdpbGwgYmUgcmV0cmllZCcsIHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgIGF0dGVtcHQ6IGN1cnJlbnRBdHRlbXB0LFxuICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXBMb2dnZXIuaW5mbygnRW5jb3VudGVyZWQgRXJyb3IsIHN0ZXAgd2lsbCBiZSByZXRyaWVkJywge1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgYXR0ZW1wdDogY3VycmVudEF0dGVtcHQsXG4gICAgICAgICAgZXJyb3JTdGFjazogbm9ybWFsaXplZFN0YWNrLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgdGhlIG5vcm1hbGl6ZWQgc3RhY2sgdG8gdGhlIHRocm93biB2YWx1ZSBzbyBpdCBzdXJ2aXZlc1xuICAgICAgLy8gc2VyaWFsaXphdGlvbi4gU2VlIHRoZSBGYXRhbEVycm9yIHNpdGUgYWJvdmUgZm9yIHdoeSB3ZSB1c2VcbiAgICAgIC8vIGB0eXBlcy5pc05hdGl2ZUVycm9yYCBpbnN0ZWFkIG9mIGBlcnIgaW5zdGFuY2VvZiBFcnJvcmAuXG4gICAgICBpZiAodHlwZXMuaXNOYXRpdmVFcnJvcihlcnIpICYmIG5vcm1hbGl6ZWRTdGFjaykge1xuICAgICAgICAoZXJyIGFzIEVycm9yKS5zdGFjayA9IG5vcm1hbGl6ZWRTdGFjaztcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUod29ya2Zsb3dSdW5JZCwge1xuICAgICAgICAgIGV2ZW50VHlwZTogJ3N0ZXBfcmV0cnlpbmcnLFxuICAgICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgICAgICBjb3JyZWxhdGlvbklkOiBzdGVwSWQsXG4gICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgIGVycm9yOiBhd2FpdCBkZWh5ZHJhdGVTdGVwRXJyb3IoXG4gICAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgYXdhaXQgZ2V0RW5jcnlwdGlvbktleSgpLFxuICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgICAgY29tcHJlc3Npb25cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAuLi4oUmV0cnlhYmxlRXJyb3IuaXMoZXJyKSAmJiB7IHJldHJ5QWZ0ZXI6IGVyci5yZXRyeUFmdGVyIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoc3RlcFJldHJ5RXJyKSB7XG4gICAgICAgIGlmIChFbnRpdHlDb25mbGljdEVycm9yLmlzKHN0ZXBSZXRyeUVycikpIHtcbiAgICAgICAgICBydW50aW1lTG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAnVHJpZWQgcmV0cnlpbmcgc3RlcCwgYnV0IHN0ZXAgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogc3RlcFJldHJ5RXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4geyB0eXBlOiAnc2tpcHBlZCcgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBzdGVwUmV0cnlFcnI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gTWF0aC5tYXgoXG4gICAgICAgIDEsXG4gICAgICAgIFJldHJ5YWJsZUVycm9yLmlzKGVycilcbiAgICAgICAgICA/IE1hdGguY2VpbCgoK2Vyci5yZXRyeUFmdGVyLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMClcbiAgICAgICAgICA6IDFcbiAgICAgICk7XG5cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFJldHJ5VGltZW91dFNlY29uZHModGltZW91dFNlY29uZHMpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuU3RlcFJldHJ5V2lsbFJldHJ5KHRydWUpLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7IHR5cGU6ICdyZXRyeScsIHRpbWVvdXRTZWNvbmRzIH07XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHN0ZXBfY29tcGxldGVkIGV2ZW50IG91dHNpZGUgdGhlIHN0ZXAgZXhlY3V0aW9uIGZhaWx1cmUgcGF0aDpcbiAgICAvLyBwZXJzaXN0ZW5jZSBmYWlsdXJlcyBhcmUgaW5mcmFzdHJ1Y3R1cmUgZXJyb3JzIGFuZCBzaG91bGQgcmVkZWxpdmVyIHRoZVxuICAgIC8vIHF1ZXVlIG1lc3NhZ2UsIG5vdCBiZWNvbWUgdXNlciBzdGVwX3JldHJ5aW5nL3N0ZXBfZmFpbGVkIGV2ZW50cy5cbiAgICBsZXQgY29tcGxldGVkUmVzdWx0OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHdvcmxkLmV2ZW50cy5jcmVhdGU+PjtcbiAgICB0cnkge1xuICAgICAgY29tcGxldGVkUmVzdWx0ID0gYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZShcbiAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAge1xuICAgICAgICAgIGV2ZW50VHlwZTogJ3N0ZXBfY29tcGxldGVkJyxcbiAgICAgICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICAgICAgY29ycmVsYXRpb25JZDogc3RlcElkLFxuICAgICAgICAgIGV2ZW50RGF0YToge1xuICAgICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgICB3b3JrZmxvd05hbWUsXG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCBhcyBVaW50OEFycmF5LFxuICAgICAgICAgICAgLi4ubGF0ZW5jeUV2ZW50RGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwYXJhbXMuaW5saW5lRGVsdGFTaW5jZUN1cnNvciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IHNpbmNlQ3Vyc29yOiBwYXJhbXMuaW5saW5lRGVsdGFTaW5jZUN1cnNvciB9XG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgIHJ1bnRpbWVMb2dnZXIuaW5mbyhcbiAgICAgICAgICAnVHJpZWQgY29tcGxldGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZC4nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdvcmtmbG93UnVuSWQsXG4gICAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3NraXBwZWQnIH07XG4gICAgICB9XG4gICAgICBpZiAoUnVuRXhwaXJlZEVycm9yLmlzKGVycikpIHtcbiAgICAgICAgc3RlcExvZ2dlci5pbmZvKCdXb3JrZmxvdyBydW4gYWxyZWFkeSBjb21wbGV0ZWQsIHNraXBwaW5nIHN0ZXAnLCB7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICBzdGVwSWQsXG4gICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnZ29uZScgfTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmxpbmVEZWx0YSA9IGV4dHJhY3RJbmxpbmVEZWx0YShcbiAgICAgIGNvbXBsZXRlZFJlc3VsdCxcbiAgICAgIHBhcmFtcy5pbmxpbmVEZWx0YVNpbmNlQ3Vyc29yICE9PSB1bmRlZmluZWRcbiAgICApO1xuXG4gICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnY29tcGxldGVkJyksXG4gICAgICAuLi5BdHRyaWJ1dGUuU3RlcFJlc3VsdFR5cGUodHlwZW9mIHJlc3VsdCksXG4gICAgfSk7XG5cbiAgICBpZiAob3BzLmxlbmd0aCA+IDApIHtcbiAgICAgIHN0ZXBMb2dnZXIuZGVidWcoJ1N0ZXAgaGFzIHBlbmRpbmcgb3BzJywge1xuICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgb3BzQ291bnQ6IG9wcy5sZW5ndGgsXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gaGFzUGVuZGluZ09wcyBzaWduYWxzIHRoZSBWMiBoYW5kbGVyIHRvIGJyZWFrIHRoZSBsb29wXG4gICAgLy8gYW5kIHF1ZXVlIGEgY29udGludWF0aW9uIHNvIHdhaXRVbnRpbCBjYW4gZmx1c2ggdGhlbS5cbiAgICByZXR1cm4geyB0eXBlOiAnY29tcGxldGVkJywgaGFzUGVuZGluZ09wczogIW9wc1NldHRsZWQsIGlubGluZURlbHRhIH07XG4gIH0pO1xufVxuIl19
|
|
@@ -31,7 +31,7 @@ export interface StepLatencyTracking {
|
|
|
31
31
|
* Epoch ms the first pre-step `attr_set` write began (its client-stamped
|
|
32
32
|
* `occurredAt`, falling back to `createdAt`). When present, the TTFS
|
|
33
33
|
* measurement ENDS here instead of at the step's code start: a
|
|
34
|
-
* workflow-body `
|
|
34
|
+
* workflow-body `setAttributes` before the first step
|
|
35
35
|
* resolves through an extra replay (see the `hasAttributeEvents` branch in
|
|
36
36
|
* runtime.ts), so everything from this write until the step body runs is
|
|
37
37
|
* the duration of the setAttributes call — which is subtracted by ending
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - `hook_created`: a fire-and-forget `createHook()` before the first step
|
|
13
13
|
* commits in the same invocation, whose measured duration is subtracted via
|
|
14
14
|
* {@link StepLatencyTracking.preStepBlockingMs}.
|
|
15
|
-
* - `attr_set` (workflow-body `
|
|
15
|
+
* - `attr_set` (workflow-body `setAttributes`): resolves through
|
|
16
16
|
* an extra replay before steps run. Subtracted by ending the measurement at
|
|
17
17
|
* the first attr write's timestamp instead — see
|
|
18
18
|
* {@link StepLatencyTracking.preStepAttrStartMs}.
|
|
@@ -152,4 +152,4 @@ export function computeStepLatencyEventData(params) {
|
|
|
152
152
|
optimizations,
|
|
153
153
|
};
|
|
154
154
|
}
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1sYXRlbmN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvc3RlcC1sYXRlbmN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSw4QkFBOEIsR0FBb0MsSUFBSSxHQUFHLENBQzdFO0lBQ0UsY0FBYztJQUNkLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLGVBQWU7SUFDZixlQUFlO0lBQ2YsY0FBYztJQUNkLGdCQUFnQjtDQUNqQixDQUNGLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsTUEyQzFDO0lBQ0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUUxQixJQUFJLFlBQVksR0FDZCxNQUFNLENBQUMsc0JBQXNCO1FBQzdCLE1BQU0sQ0FBQyxjQUFjLEtBQUssU0FBUztRQUNuQyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUM3QixJQUFJLGtCQUFzQyxDQUFDO0lBQzNDLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFJLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDckIsTUFBTTtZQUNSLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDM0Qsa0JBQWtCO29CQUNoQixrQkFBa0IsS0FBSyxTQUFTO3dCQUM5QixDQUFDLENBQUMsV0FBVzt3QkFDYixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcs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O1lBQ3hELENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsVUFBVSxLQUFLLFNBQVM7WUFDekQsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDckMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLGFBQWE7S0FDZCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuXG4vKipcbiAqIENsaWVudC1zaWRlIGxhdGVuY3kgbWVhc3VyZW1lbnQgKFRURlMgLyBTVFNPKSB0aHJlYWRlZCBmcm9tIHRoZVxuICogb3JjaGVzdHJhdG9yJ3MgaW5saW5lIGV4ZWN1dGlvbiBwYXRoIGludG8gYGV4ZWN1dGVTdGVwYC5cbiAqXG4gKiBUVEZTICh0aW1lLXRvLWZpcnN0LXN0ZXApIG1lYXN1cmVzIHJ1biBjcmVhdGlvbiDihpIgdGhlIGZpcnN0IHN0ZXAncyBib2R5XG4gKiBiZWdpbm5pbmcgdG8gZXhlY3V0ZS4gU1RTTyAoc3RlcC10by1zdGVwIG92ZXJoZWFkKSBtZWFzdXJlcyB0aGUgcHJldmlvdXNcbiAqIHN0ZXAncyB0ZXJtaW5hbCBldmVudCDihpIgdGhlIG5leHQgc3RlcCdzIGJvZHkgYmVnaW5uaW5nIHRvIGV4ZWN1dGUuIEJvdGggYXJlXG4gKiBhdHRhY2hlZCB0byB0aGUgc3RlcCdzIHRlcm1pbmFsIGV2ZW50IHNvIGEgYmFja2VuZCBjYW4gZW1pdCBsYXRlbmN5IG1ldHJpY3NcbiAqIGZyb20gdGhlIGV2ZW50IHdyaXRlIGFsb25lLCB3aXRob3V0IGV4dHJhIGV2ZW50LWxvZyBxdWVyaWVzLlxuICpcbiAqIEVsaWdpYmlsaXR5IGlzIGRlY2lkZWQgYnkgdGhlIG9yY2hlc3RyYXRvciAod2hpY2ggb3ducyB0aGUgZXZlbnQgbG9nKSB2aWFcbiAqIHtAbGluayBjb21wdXRlU3RlcExhdGVuY3lUcmFja2luZ307IHRoZSBmaW5hbCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGJ5XG4gKiBgZXhlY3V0ZVN0ZXBgIHJpZ2h0IGJlZm9yZSB1c2VyIGNvZGUgcnVucyB2aWFcbiAqIHtAbGluayBjb21wdXRlU3RlcExhdGVuY3lFdmVudERhdGF9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBMYXRlbmN5VHJhY2tpbmcge1xuICAvKipcbiAgICogRXBvY2ggbXMgb2YgcnVuIGNyZWF0aW9uIChmcm9tIHRoZSBydW4taWQgVUxJRCwgZmFsbGluZyBiYWNrIHRvIHRoZSBydW5cbiAgICogc25hcHNob3QncyBgY3JlYXRlZEF0YCkuIFByZXNlbnQgb25seSB3aGVuIHRoZSBzdGVwIHF1YWxpZmllcyBmb3IgVFRGUy5cbiAgICovXG4gIHR0ZnNBbmNob3JNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdhbGwtY2xvY2sgbXMgdGhpcyBpbnZvY2F0aW9uIHNwZW50IGNvbW1pdHRpbmcgYGhvb2tfY3JlYXRlZGAgZXZlbnRzXG4gICAqIGJlZm9yZSB0aGUgZmlyc3Qgc3RlcCAoZmlyZS1hbmQtZm9yZ2V0IGBjcmVhdGVIb29rKClgIGFoZWFkIG9mIHRoZSBmaXJzdFxuICAgKiBzdGVwIGNvbW1pdHMgaW4gdGhlIHNhbWUgc3VzcGVuc2lvbiBiYXRjaCkuIFN1YnRyYWN0ZWQgZnJvbSBUVEZTIHNvIHRoZVxuICAgKiBtZXRyaWMgcmVmbGVjdHMgcnVudGltZSBvdmVyaGVhZCByYXRoZXIgdGhhbiB0aGUgdXNlcidzIGhvb2sgd3JpdGVzLlxuICAgKi9cbiAgcHJlU3RlcEJsb2NraW5nTXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBFcG9jaCBtcyB0aGUgZmlyc3QgcHJlLXN0ZXAgYGF0dHJfc2V0YCB3cml0ZSBiZWdhbiAoaXRzIGNsaWVudC1zdGFtcGVkXG4gICAqIGBvY2N1cnJlZEF0YCwgZmFsbGluZyBiYWNrIHRvIGBjcmVhdGVkQXRgKS4gV2hlbiBwcmVzZW50LCB0aGUgVFRGU1xuICAgKiBtZWFzdXJlbWVudCBFTkRTIGhlcmUgaW5zdGVhZCBvZiBhdCB0aGUgc3RlcCdzIGNvZGUgc3RhcnQ6IGFcbiAgICogd29ya2Zsb3ctYm9keSBgZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXNgIGJlZm9yZSB0aGUgZmlyc3Qgc3RlcFxuICAgKiByZXNvbHZlcyB0aHJvdWdoIGFuIGV4dHJhIHJlcGxheSAoc2VlIHRoZSBgaGFzQXR0cmlidXRlRXZlbnRzYCBicmFuY2ggaW5cbiAgICogcnVudGltZS50cyksIHNvIGV2ZXJ5dGhpbmcgZnJvbSB0aGlzIHdyaXRlIHVudGlsIHRoZSBzdGVwIGJvZHkgcnVucyBpc1xuICAgKiB0aGUgZHVyYXRpb24gb2YgdGhlIHNldEF0dHJpYnV0ZXMgY2FsbCDigJQgd2hpY2ggaXMgc3VidHJhY3RlZCBieSBlbmRpbmdcbiAgICogdGhlIG1lYXN1cmVtZW50IGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgc3RlcCB3b3VsZCBvdGhlcndpc2UgaGF2ZSBiZWVuXG4gICAqIHNjaGVkdWxlZC5cbiAgICovXG4gIHByZVN0ZXBBdHRyU3RhcnRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEVwb2NoIG1zIHRoZSBwcmV2aW91cyBzdGVwJ3MgdGVybWluYWwgZXZlbnQgd2FzIHJlY29yZGVkIChpdHNcbiAgICogY2xpZW50LXN0YW1wZWQgYG9jY3VycmVkQXRgLCBmYWxsaW5nIGJhY2sgdG8gYGNyZWF0ZWRBdGApLiBQcmVzZW50IG9ubHlcbiAgICogd2hlbiB0aGUgc3RlcCBxdWFsaWZpZXMgZm9yIFNUU08uXG4gICAqL1xuICBwcmV2U3RlcEVuZE1zPzogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIHVuaXF1ZSB0ZXJtaW5hbCBzdGVwcyBhbHJlYWR5IGluIHRoZSBldmVudCBsb2cuICovXG4gIHN0ZXBDb3VudD86IG51bWJlcjtcbiAgLyoqIE51bWJlciBvZiBldmVudHMgYWxyZWFkeSBpbiB0aGUgZXZlbnQgbG9nLiAqL1xuICBldmVudENvdW50PzogbnVtYmVyO1xuICAvKiogV2hldGhlciB0dXJibyBtb2RlIGlzIGFjdGl2ZSBmb3IgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICB0dXJibzogYm9vbGVhbjtcbn1cblxuLyoqIExhdGVuY3kgdGVsZW1ldHJ5IGF0dGFjaGVkIHRvIGEgc3RlcCdzIHRlcm1pbmFsIGV2ZW50J3MgYGV2ZW50RGF0YWAuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBMYXRlbmN5RXZlbnREYXRhIHtcbiAgdHRmcz86IG51bWJlcjtcbiAgc3Rzbz86IG51bWJlcjtcbiAgc3RlcENvdW50PzogbnVtYmVyO1xuICBldmVudENvdW50PzogbnVtYmVyO1xuICBvcHRpbWl6YXRpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgdGhhdCBkaXNxdWFsaWZ5IFRURlMgd2hlbiBwcmVzZW50IGluIHRoZSBldmVudCBsb2cgYXQgdGhlIHRpbWVcbiAqIHRoZSBydW4ncyBmaXJzdCBzdGVwIGJhdGNoIGlzIHNjaGVkdWxlZDpcbiAqXG4gKiAtIEFueSBzdGVwIGV2ZW50IG1lYW5zIHRoaXMgaXMgbm90IHRoZSBydW4ncyBmaXJzdCBzdGVwIGV4ZWN1dGlvbi5cbiAqIC0gYGhvb2tfcmVjZWl2ZWRgIC8gYHdhaXRfY3JlYXRlZGAgLyBgd2FpdF9jb21wbGV0ZWRgIG1lYW4gdGhlIHJ1bidzIHBhdGggdG9cbiAqICAgdGhlIGZpcnN0IHN0ZXAgZGVwZW5kZWQgb24gdXNlci1kcml2ZW4gdGltaW5nIChhIHdlYmhvb2sgYXJyaXZpbmcsIGFcbiAqICAgc2xlZXAgZWxhcHNpbmcpLCBzbyB0aGUgbWVhc3VyZW1lbnQgd291bGQgbm90IHJlZmxlY3QgcnVudGltZSBvdmVyaGVhZC5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgYWJzZW50LCB3aXRoIHRoZWlyIGNvc3Qgc3VidHJhY3RlZCBpbnN0ZWFkOlxuICpcbiAqIC0gYGhvb2tfY3JlYXRlZGA6IGEgZmlyZS1hbmQtZm9yZ2V0IGBjcmVhdGVIb29rKClgIGJlZm9yZSB0aGUgZmlyc3Qgc3RlcFxuICogICBjb21taXRzIGluIHRoZSBzYW1lIGludm9jYXRpb24sIHdob3NlIG1lYXN1cmVkIGR1cmF0aW9uIGlzIHN1YnRyYWN0ZWQgdmlhXG4gKiAgIHtAbGluayBTdGVwTGF0ZW5jeVRyYWNraW5nLnByZVN0ZXBCbG9ja2luZ01zfS5cbiAqIC0gYGF0dHJfc2V0YCAod29ya2Zsb3ctYm9keSBgZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXNgKTogcmVzb2x2ZXMgdGhyb3VnaFxuICogICBhbiBleHRyYSByZXBsYXkgYmVmb3JlIHN0ZXBzIHJ1bi4gU3VidHJhY3RlZCBieSBlbmRpbmcgdGhlIG1lYXN1cmVtZW50IGF0XG4gKiAgIHRoZSBmaXJzdCBhdHRyIHdyaXRlJ3MgdGltZXN0YW1wIGluc3RlYWQg4oCUIHNlZVxuICogICB7QGxpbmsgU3RlcExhdGVuY3lUcmFja2luZy5wcmVTdGVwQXR0clN0YXJ0TXN9LlxuICovXG5jb25zdCBUVEZTX0RJU1FVQUxJRllJTkdfRVZFTlRfVFlQRVM6IFJlYWRvbmx5U2V0PEV2ZW50WydldmVudFR5cGUnXT4gPSBuZXcgU2V0KFxuICBbXG4gICAgJ3N0ZXBfY3JlYXRlZCcsXG4gICAgJ3N0ZXBfc3RhcnRlZCcsXG4gICAgJ3N0ZXBfY29tcGxldGVkJyxcbiAgICAnc3RlcF9mYWlsZWQnLFxuICAgICdzdGVwX3JldHJ5aW5nJyxcbiAgICAnaG9va19yZWNlaXZlZCcsXG4gICAgJ3dhaXRfY3JlYXRlZCcsXG4gICAgJ3dhaXRfY29tcGxldGVkJyxcbiAgXVxuKTtcblxuLyoqXG4gKiBEZWNpZGUsIGZyb20gdGhlIG9yY2hlc3RyYXRvcidzIHZpZXcgb2YgdGhlIGV2ZW50IGxvZywgd2hldGhlciB0aGUgaW5saW5lXG4gKiBzdGVwIGJhdGNoIGFib3V0IHRvIGV4ZWN1dGUgcXVhbGlmaWVzIGZvciBUVEZTIGFuZC9vciBTVFNPIG1lYXN1cmVtZW50LlxuICogUmV0dXJucyB1bmRlZmluZWQgd2hlbiBuZWl0aGVyIGFwcGxpZXMuIENhbGxlZCBvbmNlIHBlciBiYXRjaDsgdGhlIHJlc3VsdFxuICogaXMgcGFzc2VkIHRvIHRoZSBiYXRjaCdzIGZpcnN0IHN0ZXAgb25seSwgc28gYSBwYXJhbGxlbCBmaXJzdCBiYXRjaCBlbWl0cyBhXG4gKiBzaW5nbGUgc2FtcGxlIHJhdGhlciB0aGFuIG9uZSBwZXIgc2libGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTdGVwTGF0ZW5jeVRyYWNraW5nKHBhcmFtczoge1xuICAvKiogVGhlIG9yY2hlc3RyYXRvcidzIGN1cnJlbnQgaW4tbWVtb3J5IGV2ZW50IGxvZyAoYXNjZW5kaW5nIG9yZGVyKS4gKi9cbiAgZXZlbnRzOiBFdmVudFtdO1xuICAvKipcbiAgICogV2hldGhlciB0aGlzIGludm9jYXRpb24ncyBpbml0aWFsIGV2ZW50IGxvYWQgY29udGFpbmVkIG5vdGhpbmcgYmV5b25kXG4gICAqIHJ1bl9jcmVhdGVkL3J1bl9zdGFydGVkL2F0dHJfc2V0LiBQcmUtZXhpc3RpbmcgaG9vayBldmVudHMgd2VyZSB3cml0dGVuXG4gICAqIGJ5IGFuIGVhcmxpZXIgaW52b2NhdGlvbiwgc28gdGhlIHRpbWUgdGhleSBhZGRlZCAoaW5jbHVkaW5nIHRoZSBxdWV1ZVxuICAgKiBob3AgYmFjayB0byB0aGlzIGludm9jYXRpb24pIGlzIHVubWVhc3VyYWJsZSBhbmQgZGlzcXVhbGlmaWVzIFRURlMuXG4gICAqIGF0dHJfc2V0IGlzIHBlcm1pdHRlZDogYSByZWRlbGl2ZXJ5IGNhbiBsYW5kIGFmdGVyIGEgY29tbWl0dGVkIHByZS1zdGVwXG4gICAqIGF0dHJfc2V0LCBhbmQgdGhlIGRldG91ciBpdCBtYXJrcyBpcyBzdWJ0cmFjdGVkIHZpYSBgcHJlU3RlcEF0dHJTdGFydE1zYFxuICAgKiByZWdhcmRsZXNzIG9mIHdoaWNoIGludm9jYXRpb24gd3JvdGUgaXQuXG4gICAqL1xuICBpbnZvY2F0aW9uU3RhcnRlZENsZWFuOiBib29sZWFuO1xuICAvKiogRXBvY2ggbXMgb2YgcnVuIGNyZWF0aW9uLCBpZiByZWNvdmVyYWJsZS4gQWJzZW50IGRpc3F1YWxpZmllcyBUVEZTLiAqL1xuICBydW5DcmVhdGVkQXRNczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAvKiogU2VlIHtAbGluayBTdGVwTGF0ZW5jeVRyYWNraW5nLnByZVN0ZXBCbG9ja2luZ01zfS4gKi9cbiAgcHJlU3RlcEJsb2NraW5nTXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBhY2N1bXVsYXRvcidzIHZhbHVlIGFzIG9mIHRoZSBzdXNwZW5zaW9uIHRoYXQgd3JvdGUgdGhlIHJ1bidzIGZpcnN0XG4gICAqIGF0dHJfc2V0IChpdHMgaG9vayBwaGFzZSBydW5zIGJlZm9yZSBpdHMgYXR0ciB3cml0ZXMpLiBXaGVuIHRoZVxuICAgKiBtZWFzdXJlbWVudCBlbmRzIGF0IHRoZSBhdHRyIHdyaXRlLCBvbmx5IGhvb2sgdGltZSBmcm9tIGJlZm9yZSB0aGF0XG4gICAqIHBvaW50IG1heSBiZSBzdWJ0cmFjdGVkIOKAlCBsYXRlciBob29rIHdyaXRlcyBmYWxsIG91dHNpZGUgdGhlIG1lYXN1cmVkXG4gICAqIHdpbmRvdy4gVW5kZWZpbmVkIHdoZW4gbm8gYXR0ciBzdXNwZW5zaW9uIGhhcHBlbmVkIGluIHRoaXMgaW52b2NhdGlvblxuICAgKiAoZS5nLiB0aGUgYXR0cl9zZXQgd2FzIGxvYWRlZCBmcm9tIGEgcmVkZWxpdmVyeSdzIHNuYXBzaG90LCB3aGVyZSBub1xuICAgKiBzYW1lLWludm9jYXRpb24gaG9vayB0aW1lIHByZWNlZGVzIGl0KS5cbiAgICovXG4gIHByZVN0ZXBCbG9ja2luZ0JlZm9yZUF0dHJNczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgc3VzcGVuc2lvbiB0aGF0IHNjaGVkdWxlZCB0aGlzIGJhdGNoIGFsc28gY3JlYXRlZCB3YWl0cy5cbiAgICogVGhvc2UgYHdhaXRfY3JlYXRlZGAgd3JpdGVzIGFyZSBub3QgaW4gYGV2ZW50c2AgeWV0ICh0aGV5IHdlcmUgY29tbWl0dGVkXG4gICAqIGJ5IHRoaXMgdmVyeSBzdXNwZW5zaW9uIHBhc3MpLCBzbyB0aGV5IG11c3QgYmUgcmVwb3J0ZWQgc2VwYXJhdGVseS4gQVxuICAgKiB3YWl0IGRpc3F1YWxpZmllcyBib3RoIG1lYXN1cmVtZW50cy5cbiAgICovXG4gIHN1c3BlbnNpb25IYXNXYWl0czogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHN1c3BlbnNpb24gdGhhdCBzY2hlZHVsZWQgdGhpcyBiYXRjaCBhbHNvIGNyZWF0ZWQgaG9va3NcbiAgICogKGFsc28gbm90IGluIGBldmVudHNgIHlldCkuIEhvb2tzIGtlZXAgVFRGUyBlbGlnaWJsZSDigJQgdGhlaXIgbWVhc3VyZWRcbiAgICogd3JpdGUgdGltZSBpcyBzdWJ0cmFjdGVkIHZpYSBgcHJlU3RlcEJsb2NraW5nTXNgIOKAlCBidXQgZGlzcXVhbGlmeSBTVFNPLFxuICAgKiB3aGljaCBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIGEgcHVyZSBiYWNrLXRvLWJhY2sgc3RlcCBnYXAuXG4gICAqL1xuICBzdXNwZW5zaW9uQ3JlYXRlZEhvb2tzOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0dXJibyBtb2RlIGlzIGFjdGl2ZSBmb3IgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICB0dXJibzogYm9vbGVhbjtcbn0pOiBTdGVwTGF0ZW5jeVRyYWNraW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyBldmVudHMgfSA9IHBhcmFtcztcblxuICBsZXQgdHRmc0VsaWdpYmxlID1cbiAgICBwYXJhbXMuaW52b2NhdGlvblN0YXJ0ZWRDbGVhbiAmJlxuICAgIHBhcmFtcy5ydW5DcmVhdGVkQXRNcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgIXBhcmFtcy5zdXNwZW5zaW9uSGFzV2FpdHM7XG4gIGxldCBwcmVTdGVwQXR0clN0YXJ0TXM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgaWYgKHR0ZnNFbGlnaWJsZSkge1xuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICBpZiAoVFRGU19ESVNRVUFMSUZZSU5HX0VWRU5UX1RZUEVTLmhhcyhldmVudC5ldmVudFR5cGUpKSB7XG4gICAgICAgIHR0ZnNFbGlnaWJsZSA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdhdHRyX3NldCcpIHtcbiAgICAgICAgY29uc3QgYXR0clN0YXJ0TXMgPSArKGV2ZW50Lm9jY3VycmVkQXQgPz8gZXZlbnQuY3JlYXRlZEF0KTtcbiAgICAgICAgcHJlU3RlcEF0dHJTdGFydE1zID1cbiAgICAgICAgICBwcmVTdGVwQXR0clN0YXJ0TXMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBhdHRyU3RhcnRNc1xuICAgICAgICAgICAgOiBNYXRoLm1pbihwcmVTdGVwQXR0clN0YXJ0TXMsIGF0dHJTdGFydE1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTVFNPOiB0aGUgdHdvIHN0ZXBzIHJhbiBiYWNrLXRvLWJhY2sg4oCUIHRoZSBuZXdlc3Qga25vd24gZXZlbnQgaXMgdGhlXG4gIC8vIHByZXZpb3VzIHN0ZXAncyB0ZXJtaW5hbCBldmVudCwgd2l0aCBub3RoaW5nIChob29rX3JlY2VpdmVkLCB3YWl0cyxcbiAgLy8gYXR0cl9zZXQsIC4uLikgaW4gYmV0d2VlbiBhbmQgdGhpcyBzdXNwZW5zaW9uIHNjaGVkdWxpbmcgbm90aGluZyBidXRcbiAgLy8gc3RlcHMuXG4gIGxldCBwcmV2U3RlcEVuZE1zOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBzdGVwQ291bnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IGV2ZW50Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgY29uc3QgbGFzdEV2ZW50ID0gZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXTtcbiAgaWYgKFxuICAgICFwYXJhbXMuc3VzcGVuc2lvbkhhc1dhaXRzICYmXG4gICAgIXBhcmFtcy5zdXNwZW5zaW9uQ3JlYXRlZEhvb2tzICYmXG4gICAgbGFzdEV2ZW50ICYmXG4gICAgKGxhc3RFdmVudC5ldmVudFR5cGUgPT09ICdzdGVwX2NvbXBsZXRlZCcgfHxcbiAgICAgIGxhc3RFdmVudC5ldmVudFR5cGUgPT09ICdzdGVwX2ZhaWxlZCcpXG4gICkge1xuICAgIHByZXZTdGVwRW5kTXMgPSArKGxhc3RFdmVudC5vY2N1cnJlZEF0ID8/IGxhc3RFdmVudC5jcmVhdGVkQXQpO1xuICAgIGNvbnN0IHRlcm1pbmFsU3RlcElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX2NvbXBsZXRlZCcgfHxcbiAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX2ZhaWxlZCcpICYmXG4gICAgICAgIGV2ZW50LmNvcnJlbGF0aW9uSWQgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHRlcm1pbmFsU3RlcElkcy5hZGQoZXZlbnQuY29ycmVsYXRpb25JZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0ZXBDb3VudCA9IHRlcm1pbmFsU3RlcElkcy5zaXplO1xuICAgIGV2ZW50Q291bnQgPSBldmVudHMubGVuZ3RoO1xuICB9XG5cbiAgaWYgKCF0dGZzRWxpZ2libGUgJiYgcHJldlN0ZXBFbmRNcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uKHR0ZnNFbGlnaWJsZVxuICAgICAgPyB7XG4gICAgICAgICAgdHRmc0FuY2hvck1zOiBwYXJhbXMucnVuQ3JlYXRlZEF0TXMsXG4gICAgICAgICAgLy8gV2hlbiB0aGUgbWVhc3VyZW1lbnQgZW5kcyBhdCB0aGUgZmlyc3QgYXR0ciB3cml0ZSwgb25seSBob29rXG4gICAgICAgICAgLy8gdGltZSBmcm9tIGJlZm9yZSB0aGF0IHBvaW50IGlzIGluc2lkZSB0aGUgbWVhc3VyZWQgd2luZG93LlxuICAgICAgICAgIHByZVN0ZXBCbG9ja2luZ01zOlxuICAgICAgICAgICAgcHJlU3RlcEF0dHJTdGFydE1zICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyAocGFyYW1zLnByZVN0ZXBCbG9ja2luZ0JlZm9yZUF0dHJNcyA/PyAwKVxuICAgICAgICAgICAgICA6IHBhcmFtcy5wcmVTdGVwQmxvY2tpbmdNcyxcbiAgICAgICAgICAuLi4ocHJlU3RlcEF0dHJTdGFydE1zICE9PSB1bmRlZmluZWQgPyB7IHByZVN0ZXBBdHRyU3RhcnRNcyB9IDoge30pLFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4ocHJldlN0ZXBFbmRNcyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgcHJldlN0ZXBFbmRNcywgc3RlcENvdW50LCBldmVudENvdW50IH1cbiAgICAgIDoge30pLFxuICAgIHR1cmJvOiBwYXJhbXMudHVyYm8sXG4gIH07XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbGF0ZW5jeSB0ZWxlbWV0cnkgdG8gYXR0YWNoIHRvIHRoZSBzdGVwJ3MgdGVybWluYWwgZXZlbnQuXG4gKiBDYWxsZWQgYnkgYGV4ZWN1dGVTdGVwYCB3aXRoIHRoZSB3YWxsLWNsb2NrIHRpbWVzdGFtcCB0YWtlbiBpbW1lZGlhdGVseVxuICogYmVmb3JlIHVzZXIgc3RlcCBjb2RlIHJ1bnMuIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0b1xuICogcmVwb3J0IChubyB0cmFja2luZywgb3IgYSByZXRyeSBhdHRlbXB0IOKAlCByZXRyaWVzIG1lYXN1cmUgbmVpdGhlciBUVEZTIG5vclxuICogU1RTTykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3RlcExhdGVuY3lFdmVudERhdGEocGFyYW1zOiB7XG4gIHRyYWNraW5nOiBTdGVwTGF0ZW5jeVRyYWNraW5nIHwgdW5kZWZpbmVkO1xuICAvKiogYERhdGUubm93KClgIHRha2VuIGltbWVkaWF0ZWx5IGJlZm9yZSB1c2VyIHN0ZXAgY29kZSBiZWdhbiBleGVjdXRpbmcuICovXG4gIHN0ZXBDb2RlU3RhcnRlZEF0TXM6IG51bWJlcjtcbiAgYXR0ZW1wdDogbnVtYmVyO1xuICAvKiogV2hldGhlciB0aGlzIHN0ZXAgd2FzIHN0YXJ0ZWQgbGF6aWx5IChubyBzZXBhcmF0ZSBzdGVwX2NyZWF0ZWQgd3JpdGUpLiAqL1xuICBsYXp5U3RlcFN0YXJ0OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgYm9keSByYW4gb3B0aW1pc3RpY2FsbHksIHdpdGhvdXQgYXdhaXRpbmcgc3RlcF9zdGFydGVkLiAqL1xuICBvcHRpbWlzdGljU3RhcnQ6IGJvb2xlYW47XG59KTogU3RlcExhdGVuY3lFdmVudERhdGEgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHRyYWNraW5nIH0gPSBwYXJhbXM7XG4gIGlmICghdHJhY2tpbmcgfHwgcGFyYW1zLmF0dGVtcHQgIT09IDEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQ2xhbXAgYXQgMDogY3Jvc3MtaW52b2NhdGlvbiB0aW1lc3RhbXBzIGNhbiBjb21lIGZyb20gYW5vdGhlciBtYWNoaW5lJ3NcbiAgLy8gY2xvY2ssIHNvIHNtYWxsIHNrZXdzIG11c3Qgbm90IHByb2R1Y2UgbmVnYXRpdmUgZHVyYXRpb25zLlxuICAvL1xuICAvLyBBIHByZS1zdGVwIHNldEF0dHJpYnV0ZXMgZGV0b3VyIGVuZHMgdGhlIG1lYXN1cmVtZW50IGF0IHRoZSBmaXJzdCBhdHRyXG4gIC8vIHdyaXRlIGluc3RlYWQgb2YgdGhlIHN0ZXAncyBjb2RlIHN0YXJ0IOKAlCB0aGUgcmVtYWluZGVyIGlzIHRoZSBkdXJhdGlvblxuICAvLyBvZiB0aGUgc2V0QXR0cmlidXRlcyBjYWxsIChyZXNvbHZlZCB2aWEgYW4gZXh0cmEgcmVwbGF5KSwgd2hpY2ggaXNcbiAgLy8gc3VidHJhY3RlZCByYXRoZXIgdGhhbiBkaXNxdWFsaWZ5aW5nIHRoZSBzYW1wbGUuIEluIHRoYXQgY2FzZVxuICAvLyBgdHJhY2tpbmcucHJlU3RlcEJsb2NraW5nTXNgIGFscmVhZHkgaG9sZHMgb25seSB0aGUgaG9vayB0aW1lIGZyb21cbiAgLy8gQkVGT1JFIHRoZSBhdHRyIHdyaXRlIOKAlCBob29rIHdyaXRlcyBhZnRlciB0aGUgd2luZG93IGNsb3NlZCBhcmUgZXhjbHVkZWRcbiAgLy8gYnkgY29tcHV0ZVN0ZXBMYXRlbmN5VHJhY2tpbmcgKHNlZSBwcmVTdGVwQmxvY2tpbmdCZWZvcmVBdHRyTXMpLlxuICBjb25zdCB0dGZzRW5kTXMgPSB0cmFja2luZy5wcmVTdGVwQXR0clN0YXJ0TXMgPz8gcGFyYW1zLnN0ZXBDb2RlU3RhcnRlZEF0TXM7XG4gIGNvbnN0IHR0ZnMgPVxuICAgIHRyYWNraW5nLnR0ZnNBbmNob3JNcyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgdHRmc0VuZE1zIC0gdHJhY2tpbmcudHRmc0FuY2hvck1zIC0gKHRyYWNraW5nLnByZVN0ZXBCbG9ja2luZ01zID8/IDApXG4gICAgICAgIClcbiAgICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBzdHNvID1cbiAgICB0cmFja2luZy5wcmV2U3RlcEVuZE1zICE9PSB1bmRlZmluZWRcbiAgICAgID8gTWF0aC5tYXgoMCwgcGFyYW1zLnN0ZXBDb2RlU3RhcnRlZEF0TXMgLSB0cmFja2luZy5wcmV2U3RlcEVuZE1zKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHR0ZnMgPT09IHVuZGVmaW5lZCAmJiBzdHNvID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgb3B0aW1pemF0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKHRyYWNraW5nLnR1cmJvKSBvcHRpbWl6YXRpb25zLnB1c2goJ3R1cmJvJyk7XG4gIGlmIChwYXJhbXMubGF6eVN0ZXBTdGFydCkgb3B0aW1pemF0aW9ucy5wdXNoKCdsYXp5U3RlcFN0YXJ0Jyk7XG4gIGlmIChwYXJhbXMub3B0aW1pc3RpY1N0YXJ0KSBvcHRpbWl6YXRpb25zLnB1c2goJ29wdGltaXN0aWNTdGFydCcpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uKHR0ZnMgIT09IHVuZGVmaW5lZCA/IHsgdHRmcyB9IDoge30pLFxuICAgIC4uLihzdHNvICE9PSB1bmRlZmluZWQgPyB7IHN0c28gfSA6IHt9KSxcbiAgICAuLi4oc3RzbyAhPT0gdW5kZWZpbmVkICYmIHRyYWNraW5nLnN0ZXBDb3VudCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgc3RlcENvdW50OiB0cmFja2luZy5zdGVwQ291bnQgfVxuICAgICAgOiB7fSksXG4gICAgLi4uKHN0c28gIT09IHVuZGVmaW5lZCAmJiB0cmFja2luZy5ldmVudENvdW50ICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBldmVudENvdW50OiB0cmFja2luZy5ldmVudENvdW50IH1cbiAgICAgIDoge30pLFxuICAgIG9wdGltaXphdGlvbnMsXG4gIH07XG59XG4iXX0=
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1sYXRlbmN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvc3RlcC1sYXRlbmN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSw4QkFBOEIsR0FBb0MsSUFBSSxHQUFHLENBQzdFO0lBQ0UsY0FBYztJQUNkLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLGVBQWU7SUFDZixlQUFlO0lBQ2YsY0FBYztJQUNkLGdCQUFnQjtDQUNqQixDQUNGLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsTUEyQzFDO0lBQ0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUUxQixJQUFJLFlBQVksR0FDZCxNQUFNLENBQUMsc0JBQXNCO1FBQzdCLE1BQU0sQ0FBQyxjQUFjLEtBQUssU0FBUztRQUNuQyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUM3QixJQUFJLGtCQUFzQyxDQUFDO0lBQzNDLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFJLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDckIsTUFBTTtZQUNSLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDM0Qsa0JBQWtCO29CQUNoQixrQkFBa0IsS0FBSyxTQUFTO3dCQUM5QixDQUFDLENBQUMsV0FBVzt3QkFDYixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcs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O1lBQ3hELENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsVUFBVSxLQUFLLFNBQVM7WUFDekQsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDckMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLGFBQWE7S0FDZCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuXG4vKipcbiAqIENsaWVudC1zaWRlIGxhdGVuY3kgbWVhc3VyZW1lbnQgKFRURlMgLyBTVFNPKSB0aHJlYWRlZCBmcm9tIHRoZVxuICogb3JjaGVzdHJhdG9yJ3MgaW5saW5lIGV4ZWN1dGlvbiBwYXRoIGludG8gYGV4ZWN1dGVTdGVwYC5cbiAqXG4gKiBUVEZTICh0aW1lLXRvLWZpcnN0LXN0ZXApIG1lYXN1cmVzIHJ1biBjcmVhdGlvbiDihpIgdGhlIGZpcnN0IHN0ZXAncyBib2R5XG4gKiBiZWdpbm5pbmcgdG8gZXhlY3V0ZS4gU1RTTyAoc3RlcC10by1zdGVwIG92ZXJoZWFkKSBtZWFzdXJlcyB0aGUgcHJldmlvdXNcbiAqIHN0ZXAncyB0ZXJtaW5hbCBldmVudCDihpIgdGhlIG5leHQgc3RlcCdzIGJvZHkgYmVnaW5uaW5nIHRvIGV4ZWN1dGUuIEJvdGggYXJlXG4gKiBhdHRhY2hlZCB0byB0aGUgc3RlcCdzIHRlcm1pbmFsIGV2ZW50IHNvIGEgYmFja2VuZCBjYW4gZW1pdCBsYXRlbmN5IG1ldHJpY3NcbiAqIGZyb20gdGhlIGV2ZW50IHdyaXRlIGFsb25lLCB3aXRob3V0IGV4dHJhIGV2ZW50LWxvZyBxdWVyaWVzLlxuICpcbiAqIEVsaWdpYmlsaXR5IGlzIGRlY2lkZWQgYnkgdGhlIG9yY2hlc3RyYXRvciAod2hpY2ggb3ducyB0aGUgZXZlbnQgbG9nKSB2aWFcbiAqIHtAbGluayBjb21wdXRlU3RlcExhdGVuY3lUcmFja2luZ307IHRoZSBmaW5hbCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGJ5XG4gKiBgZXhlY3V0ZVN0ZXBgIHJpZ2h0IGJlZm9yZSB1c2VyIGNvZGUgcnVucyB2aWFcbiAqIHtAbGluayBjb21wdXRlU3RlcExhdGVuY3lFdmVudERhdGF9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBMYXRlbmN5VHJhY2tpbmcge1xuICAvKipcbiAgICogRXBvY2ggbXMgb2YgcnVuIGNyZWF0aW9uIChmcm9tIHRoZSBydW4taWQgVUxJRCwgZmFsbGluZyBiYWNrIHRvIHRoZSBydW5cbiAgICogc25hcHNob3QncyBgY3JlYXRlZEF0YCkuIFByZXNlbnQgb25seSB3aGVuIHRoZSBzdGVwIHF1YWxpZmllcyBmb3IgVFRGUy5cbiAgICovXG4gIHR0ZnNBbmNob3JNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdhbGwtY2xvY2sgbXMgdGhpcyBpbnZvY2F0aW9uIHNwZW50IGNvbW1pdHRpbmcgYGhvb2tfY3JlYXRlZGAgZXZlbnRzXG4gICAqIGJlZm9yZSB0aGUgZmlyc3Qgc3RlcCAoZmlyZS1hbmQtZm9yZ2V0IGBjcmVhdGVIb29rKClgIGFoZWFkIG9mIHRoZSBmaXJzdFxuICAgKiBzdGVwIGNvbW1pdHMgaW4gdGhlIHNhbWUgc3VzcGVuc2lvbiBiYXRjaCkuIFN1YnRyYWN0ZWQgZnJvbSBUVEZTIHNvIHRoZVxuICAgKiBtZXRyaWMgcmVmbGVjdHMgcnVudGltZSBvdmVyaGVhZCByYXRoZXIgdGhhbiB0aGUgdXNlcidzIGhvb2sgd3JpdGVzLlxuICAgKi9cbiAgcHJlU3RlcEJsb2NraW5nTXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBFcG9jaCBtcyB0aGUgZmlyc3QgcHJlLXN0ZXAgYGF0dHJfc2V0YCB3cml0ZSBiZWdhbiAoaXRzIGNsaWVudC1zdGFtcGVkXG4gICAqIGBvY2N1cnJlZEF0YCwgZmFsbGluZyBiYWNrIHRvIGBjcmVhdGVkQXRgKS4gV2hlbiBwcmVzZW50LCB0aGUgVFRGU1xuICAgKiBtZWFzdXJlbWVudCBFTkRTIGhlcmUgaW5zdGVhZCBvZiBhdCB0aGUgc3RlcCdzIGNvZGUgc3RhcnQ6IGFcbiAgICogd29ya2Zsb3ctYm9keSBgc2V0QXR0cmlidXRlc2AgYmVmb3JlIHRoZSBmaXJzdCBzdGVwXG4gICAqIHJlc29sdmVzIHRocm91Z2ggYW4gZXh0cmEgcmVwbGF5IChzZWUgdGhlIGBoYXNBdHRyaWJ1dGVFdmVudHNgIGJyYW5jaCBpblxuICAgKiBydW50aW1lLnRzKSwgc28gZXZlcnl0aGluZyBmcm9tIHRoaXMgd3JpdGUgdW50aWwgdGhlIHN0ZXAgYm9keSBydW5zIGlzXG4gICAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgc2V0QXR0cmlidXRlcyBjYWxsIOKAlCB3aGljaCBpcyBzdWJ0cmFjdGVkIGJ5IGVuZGluZ1xuICAgKiB0aGUgbWVhc3VyZW1lbnQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBzdGVwIHdvdWxkIG90aGVyd2lzZSBoYXZlIGJlZW5cbiAgICogc2NoZWR1bGVkLlxuICAgKi9cbiAgcHJlU3RlcEF0dHJTdGFydE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogRXBvY2ggbXMgdGhlIHByZXZpb3VzIHN0ZXAncyB0ZXJtaW5hbCBldmVudCB3YXMgcmVjb3JkZWQgKGl0c1xuICAgKiBjbGllbnQtc3RhbXBlZCBgb2NjdXJyZWRBdGAsIGZhbGxpbmcgYmFjayB0byBgY3JlYXRlZEF0YCkuIFByZXNlbnQgb25seVxuICAgKiB3aGVuIHRoZSBzdGVwIHF1YWxpZmllcyBmb3IgU1RTTy5cbiAgICovXG4gIHByZXZTdGVwRW5kTXM/OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgdW5pcXVlIHRlcm1pbmFsIHN0ZXBzIGFscmVhZHkgaW4gdGhlIGV2ZW50IGxvZy4gKi9cbiAgc3RlcENvdW50PzogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIGV2ZW50cyBhbHJlYWR5IGluIHRoZSBldmVudCBsb2cuICovXG4gIGV2ZW50Q291bnQ/OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHR1cmJvIG1vZGUgaXMgYWN0aXZlIGZvciB0aGlzIGludm9jYXRpb24uICovXG4gIHR1cmJvOiBib29sZWFuO1xufVxuXG4vKiogTGF0ZW5jeSB0ZWxlbWV0cnkgYXR0YWNoZWQgdG8gYSBzdGVwJ3MgdGVybWluYWwgZXZlbnQncyBgZXZlbnREYXRhYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcExhdGVuY3lFdmVudERhdGEge1xuICB0dGZzPzogbnVtYmVyO1xuICBzdHNvPzogbnVtYmVyO1xuICBzdGVwQ291bnQ/OiBudW1iZXI7XG4gIGV2ZW50Q291bnQ/OiBudW1iZXI7XG4gIG9wdGltaXphdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBFdmVudCB0eXBlcyB0aGF0IGRpc3F1YWxpZnkgVFRGUyB3aGVuIHByZXNlbnQgaW4gdGhlIGV2ZW50IGxvZyBhdCB0aGUgdGltZVxuICogdGhlIHJ1bidzIGZpcnN0IHN0ZXAgYmF0Y2ggaXMgc2NoZWR1bGVkOlxuICpcbiAqIC0gQW55IHN0ZXAgZXZlbnQgbWVhbnMgdGhpcyBpcyBub3QgdGhlIHJ1bidzIGZpcnN0IHN0ZXAgZXhlY3V0aW9uLlxuICogLSBgaG9va19yZWNlaXZlZGAgLyBgd2FpdF9jcmVhdGVkYCAvIGB3YWl0X2NvbXBsZXRlZGAgbWVhbiB0aGUgcnVuJ3MgcGF0aCB0b1xuICogICB0aGUgZmlyc3Qgc3RlcCBkZXBlbmRlZCBvbiB1c2VyLWRyaXZlbiB0aW1pbmcgKGEgd2ViaG9vayBhcnJpdmluZywgYVxuICogICBzbGVlcCBlbGFwc2luZyksIHNvIHRoZSBtZWFzdXJlbWVudCB3b3VsZCBub3QgcmVmbGVjdCBydW50aW1lIG92ZXJoZWFkLlxuICpcbiAqIERlbGliZXJhdGVseSBhYnNlbnQsIHdpdGggdGhlaXIgY29zdCBzdWJ0cmFjdGVkIGluc3RlYWQ6XG4gKlxuICogLSBgaG9va19jcmVhdGVkYDogYSBmaXJlLWFuZC1mb3JnZXQgYGNyZWF0ZUhvb2soKWAgYmVmb3JlIHRoZSBmaXJzdCBzdGVwXG4gKiAgIGNvbW1pdHMgaW4gdGhlIHNhbWUgaW52b2NhdGlvbiwgd2hvc2UgbWVhc3VyZWQgZHVyYXRpb24gaXMgc3VidHJhY3RlZCB2aWFcbiAqICAge0BsaW5rIFN0ZXBMYXRlbmN5VHJhY2tpbmcucHJlU3RlcEJsb2NraW5nTXN9LlxuICogLSBgYXR0cl9zZXRgICh3b3JrZmxvdy1ib2R5IGBzZXRBdHRyaWJ1dGVzYCk6IHJlc29sdmVzIHRocm91Z2hcbiAqICAgYW4gZXh0cmEgcmVwbGF5IGJlZm9yZSBzdGVwcyBydW4uIFN1YnRyYWN0ZWQgYnkgZW5kaW5nIHRoZSBtZWFzdXJlbWVudCBhdFxuICogICB0aGUgZmlyc3QgYXR0ciB3cml0ZSdzIHRpbWVzdGFtcCBpbnN0ZWFkIOKAlCBzZWVcbiAqICAge0BsaW5rIFN0ZXBMYXRlbmN5VHJhY2tpbmcucHJlU3RlcEF0dHJTdGFydE1zfS5cbiAqL1xuY29uc3QgVFRGU19ESVNRVUFMSUZZSU5HX0VWRU5UX1RZUEVTOiBSZWFkb25seVNldDxFdmVudFsnZXZlbnRUeXBlJ10+ID0gbmV3IFNldChcbiAgW1xuICAgICdzdGVwX2NyZWF0ZWQnLFxuICAgICdzdGVwX3N0YXJ0ZWQnLFxuICAgICdzdGVwX2NvbXBsZXRlZCcsXG4gICAgJ3N0ZXBfZmFpbGVkJyxcbiAgICAnc3RlcF9yZXRyeWluZycsXG4gICAgJ2hvb2tfcmVjZWl2ZWQnLFxuICAgICd3YWl0X2NyZWF0ZWQnLFxuICAgICd3YWl0X2NvbXBsZXRlZCcsXG4gIF1cbik7XG5cbi8qKlxuICogRGVjaWRlLCBmcm9tIHRoZSBvcmNoZXN0cmF0b3IncyB2aWV3IG9mIHRoZSBldmVudCBsb2csIHdoZXRoZXIgdGhlIGlubGluZVxuICogc3RlcCBiYXRjaCBhYm91dCB0byBleGVjdXRlIHF1YWxpZmllcyBmb3IgVFRGUyBhbmQvb3IgU1RTTyBtZWFzdXJlbWVudC5cbiAqIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gbmVpdGhlciBhcHBsaWVzLiBDYWxsZWQgb25jZSBwZXIgYmF0Y2g7IHRoZSByZXN1bHRcbiAqIGlzIHBhc3NlZCB0byB0aGUgYmF0Y2gncyBmaXJzdCBzdGVwIG9ubHksIHNvIGEgcGFyYWxsZWwgZmlyc3QgYmF0Y2ggZW1pdHMgYVxuICogc2luZ2xlIHNhbXBsZSByYXRoZXIgdGhhbiBvbmUgcGVyIHNpYmxpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3RlcExhdGVuY3lUcmFja2luZyhwYXJhbXM6IHtcbiAgLyoqIFRoZSBvcmNoZXN0cmF0b3IncyBjdXJyZW50IGluLW1lbW9yeSBldmVudCBsb2cgKGFzY2VuZGluZyBvcmRlcikuICovXG4gIGV2ZW50czogRXZlbnRbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBpbnZvY2F0aW9uJ3MgaW5pdGlhbCBldmVudCBsb2FkIGNvbnRhaW5lZCBub3RoaW5nIGJleW9uZFxuICAgKiBydW5fY3JlYXRlZC9ydW5fc3RhcnRlZC9hdHRyX3NldC4gUHJlLWV4aXN0aW5nIGhvb2sgZXZlbnRzIHdlcmUgd3JpdHRlblxuICAgKiBieSBhbiBlYXJsaWVyIGludm9jYXRpb24sIHNvIHRoZSB0aW1lIHRoZXkgYWRkZWQgKGluY2x1ZGluZyB0aGUgcXVldWVcbiAgICogaG9wIGJhY2sgdG8gdGhpcyBpbnZvY2F0aW9uKSBpcyB1bm1lYXN1cmFibGUgYW5kIGRpc3F1YWxpZmllcyBUVEZTLlxuICAgKiBhdHRyX3NldCBpcyBwZXJtaXR0ZWQ6IGEgcmVkZWxpdmVyeSBjYW4gbGFuZCBhZnRlciBhIGNvbW1pdHRlZCBwcmUtc3RlcFxuICAgKiBhdHRyX3NldCwgYW5kIHRoZSBkZXRvdXIgaXQgbWFya3MgaXMgc3VidHJhY3RlZCB2aWEgYHByZVN0ZXBBdHRyU3RhcnRNc2BcbiAgICogcmVnYXJkbGVzcyBvZiB3aGljaCBpbnZvY2F0aW9uIHdyb3RlIGl0LlxuICAgKi9cbiAgaW52b2NhdGlvblN0YXJ0ZWRDbGVhbjogYm9vbGVhbjtcbiAgLyoqIEVwb2NoIG1zIG9mIHJ1biBjcmVhdGlvbiwgaWYgcmVjb3ZlcmFibGUuIEFic2VudCBkaXNxdWFsaWZpZXMgVFRGUy4gKi9cbiAgcnVuQ3JlYXRlZEF0TXM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqIFNlZSB7QGxpbmsgU3RlcExhdGVuY3lUcmFja2luZy5wcmVTdGVwQmxvY2tpbmdNc30uICovXG4gIHByZVN0ZXBCbG9ja2luZ01zOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgYWNjdW11bGF0b3IncyB2YWx1ZSBhcyBvZiB0aGUgc3VzcGVuc2lvbiB0aGF0IHdyb3RlIHRoZSBydW4ncyBmaXJzdFxuICAgKiBhdHRyX3NldCAoaXRzIGhvb2sgcGhhc2UgcnVucyBiZWZvcmUgaXRzIGF0dHIgd3JpdGVzKS4gV2hlbiB0aGVcbiAgICogbWVhc3VyZW1lbnQgZW5kcyBhdCB0aGUgYXR0ciB3cml0ZSwgb25seSBob29rIHRpbWUgZnJvbSBiZWZvcmUgdGhhdFxuICAgKiBwb2ludCBtYXkgYmUgc3VidHJhY3RlZCDigJQgbGF0ZXIgaG9vayB3cml0ZXMgZmFsbCBvdXRzaWRlIHRoZSBtZWFzdXJlZFxuICAgKiB3aW5kb3cuIFVuZGVmaW5lZCB3aGVuIG5vIGF0dHIgc3VzcGVuc2lvbiBoYXBwZW5lZCBpbiB0aGlzIGludm9jYXRpb25cbiAgICogKGUuZy4gdGhlIGF0dHJfc2V0IHdhcyBsb2FkZWQgZnJvbSBhIHJlZGVsaXZlcnkncyBzbmFwc2hvdCwgd2hlcmUgbm9cbiAgICogc2FtZS1pbnZvY2F0aW9uIGhvb2sgdGltZSBwcmVjZWRlcyBpdCkuXG4gICAqL1xuICBwcmVTdGVwQmxvY2tpbmdCZWZvcmVBdHRyTXM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHN1c3BlbnNpb24gdGhhdCBzY2hlZHVsZWQgdGhpcyBiYXRjaCBhbHNvIGNyZWF0ZWQgd2FpdHMuXG4gICAqIFRob3NlIGB3YWl0X2NyZWF0ZWRgIHdyaXRlcyBhcmUgbm90IGluIGBldmVudHNgIHlldCAodGhleSB3ZXJlIGNvbW1pdHRlZFxuICAgKiBieSB0aGlzIHZlcnkgc3VzcGVuc2lvbiBwYXNzKSwgc28gdGhleSBtdXN0IGJlIHJlcG9ydGVkIHNlcGFyYXRlbHkuIEFcbiAgICogd2FpdCBkaXNxdWFsaWZpZXMgYm90aCBtZWFzdXJlbWVudHMuXG4gICAqL1xuICBzdXNwZW5zaW9uSGFzV2FpdHM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzdXNwZW5zaW9uIHRoYXQgc2NoZWR1bGVkIHRoaXMgYmF0Y2ggYWxzbyBjcmVhdGVkIGhvb2tzXG4gICAqIChhbHNvIG5vdCBpbiBgZXZlbnRzYCB5ZXQpLiBIb29rcyBrZWVwIFRURlMgZWxpZ2libGUg4oCUIHRoZWlyIG1lYXN1cmVkXG4gICAqIHdyaXRlIHRpbWUgaXMgc3VidHJhY3RlZCB2aWEgYHByZVN0ZXBCbG9ja2luZ01zYCDigJQgYnV0IGRpc3F1YWxpZnkgU1RTTyxcbiAgICogd2hpY2ggaXMgb25seSBtZWFuaW5nZnVsIGZvciBhIHB1cmUgYmFjay10by1iYWNrIHN0ZXAgZ2FwLlxuICAgKi9cbiAgc3VzcGVuc2lvbkNyZWF0ZWRIb29rczogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdHVyYm8gbW9kZSBpcyBhY3RpdmUgZm9yIHRoaXMgaW52b2NhdGlvbi4gKi9cbiAgdHVyYm86IGJvb2xlYW47XG59KTogU3RlcExhdGVuY3lUcmFja2luZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgZXZlbnRzIH0gPSBwYXJhbXM7XG5cbiAgbGV0IHR0ZnNFbGlnaWJsZSA9XG4gICAgcGFyYW1zLmludm9jYXRpb25TdGFydGVkQ2xlYW4gJiZcbiAgICBwYXJhbXMucnVuQ3JlYXRlZEF0TXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICFwYXJhbXMuc3VzcGVuc2lvbkhhc1dhaXRzO1xuICBsZXQgcHJlU3RlcEF0dHJTdGFydE1zOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGlmICh0dGZzRWxpZ2libGUpIHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgaWYgKFRURlNfRElTUVVBTElGWUlOR19FVkVOVF9UWVBFUy5oYXMoZXZlbnQuZXZlbnRUeXBlKSkge1xuICAgICAgICB0dGZzRWxpZ2libGUgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnYXR0cl9zZXQnKSB7XG4gICAgICAgIGNvbnN0IGF0dHJTdGFydE1zID0gKyhldmVudC5vY2N1cnJlZEF0ID8/IGV2ZW50LmNyZWF0ZWRBdCk7XG4gICAgICAgIHByZVN0ZXBBdHRyU3RhcnRNcyA9XG4gICAgICAgICAgcHJlU3RlcEF0dHJTdGFydE1zID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYXR0clN0YXJ0TXNcbiAgICAgICAgICAgIDogTWF0aC5taW4ocHJlU3RlcEF0dHJTdGFydE1zLCBhdHRyU3RhcnRNcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU1RTTzogdGhlIHR3byBzdGVwcyByYW4gYmFjay10by1iYWNrIOKAlCB0aGUgbmV3ZXN0IGtub3duIGV2ZW50IGlzIHRoZVxuICAvLyBwcmV2aW91cyBzdGVwJ3MgdGVybWluYWwgZXZlbnQsIHdpdGggbm90aGluZyAoaG9va19yZWNlaXZlZCwgd2FpdHMsXG4gIC8vIGF0dHJfc2V0LCAuLi4pIGluIGJldHdlZW4gYW5kIHRoaXMgc3VzcGVuc2lvbiBzY2hlZHVsaW5nIG5vdGhpbmcgYnV0XG4gIC8vIHN0ZXBzLlxuICBsZXQgcHJldlN0ZXBFbmRNczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc3RlcENvdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBldmVudENvdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGxhc3RFdmVudCA9IGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV07XG4gIGlmIChcbiAgICAhcGFyYW1zLnN1c3BlbnNpb25IYXNXYWl0cyAmJlxuICAgICFwYXJhbXMuc3VzcGVuc2lvbkNyZWF0ZWRIb29rcyAmJlxuICAgIGxhc3RFdmVudCAmJlxuICAgIChsYXN0RXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9jb21wbGV0ZWQnIHx8XG4gICAgICBsYXN0RXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9mYWlsZWQnKVxuICApIHtcbiAgICBwcmV2U3RlcEVuZE1zID0gKyhsYXN0RXZlbnQub2NjdXJyZWRBdCA/PyBsYXN0RXZlbnQuY3JlYXRlZEF0KTtcbiAgICBjb25zdCB0ZXJtaW5hbFN0ZXBJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgaWYgKFxuICAgICAgICAoZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9jb21wbGV0ZWQnIHx8XG4gICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9mYWlsZWQnKSAmJlxuICAgICAgICBldmVudC5jb3JyZWxhdGlvbklkICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICB0ZXJtaW5hbFN0ZXBJZHMuYWRkKGV2ZW50LmNvcnJlbGF0aW9uSWQpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdGVwQ291bnQgPSB0ZXJtaW5hbFN0ZXBJZHMuc2l6ZTtcbiAgICBldmVudENvdW50ID0gZXZlbnRzLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdHRmc0VsaWdpYmxlICYmIHByZXZTdGVwRW5kTXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLih0dGZzRWxpZ2libGVcbiAgICAgID8ge1xuICAgICAgICAgIHR0ZnNBbmNob3JNczogcGFyYW1zLnJ1bkNyZWF0ZWRBdE1zLFxuICAgICAgICAgIC8vIFdoZW4gdGhlIG1lYXN1cmVtZW50IGVuZHMgYXQgdGhlIGZpcnN0IGF0dHIgd3JpdGUsIG9ubHkgaG9va1xuICAgICAgICAgIC8vIHRpbWUgZnJvbSBiZWZvcmUgdGhhdCBwb2ludCBpcyBpbnNpZGUgdGhlIG1lYXN1cmVkIHdpbmRvdy5cbiAgICAgICAgICBwcmVTdGVwQmxvY2tpbmdNczpcbiAgICAgICAgICAgIHByZVN0ZXBBdHRyU3RhcnRNcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gKHBhcmFtcy5wcmVTdGVwQmxvY2tpbmdCZWZvcmVBdHRyTXMgPz8gMClcbiAgICAgICAgICAgICAgOiBwYXJhbXMucHJlU3RlcEJsb2NraW5nTXMsXG4gICAgICAgICAgLi4uKHByZVN0ZXBBdHRyU3RhcnRNcyAhPT0gdW5kZWZpbmVkID8geyBwcmVTdGVwQXR0clN0YXJ0TXMgfSA6IHt9KSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gICAgLi4uKHByZXZTdGVwRW5kTXMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IHByZXZTdGVwRW5kTXMsIHN0ZXBDb3VudCwgZXZlbnRDb3VudCB9XG4gICAgICA6IHt9KSxcbiAgICB0dXJibzogcGFyYW1zLnR1cmJvLFxuICB9O1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIGxhdGVuY3kgdGVsZW1ldHJ5IHRvIGF0dGFjaCB0byB0aGUgc3RlcCdzIHRlcm1pbmFsIGV2ZW50LlxuICogQ2FsbGVkIGJ5IGBleGVjdXRlU3RlcGAgd2l0aCB0aGUgd2FsbC1jbG9jayB0aW1lc3RhbXAgdGFrZW4gaW1tZWRpYXRlbHlcbiAqIGJlZm9yZSB1c2VyIHN0ZXAgY29kZSBydW5zLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG9cbiAqIHJlcG9ydCAobm8gdHJhY2tpbmcsIG9yIGEgcmV0cnkgYXR0ZW1wdCDigJQgcmV0cmllcyBtZWFzdXJlIG5laXRoZXIgVFRGUyBub3JcbiAqIFNUU08pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVN0ZXBMYXRlbmN5RXZlbnREYXRhKHBhcmFtczoge1xuICB0cmFja2luZzogU3RlcExhdGVuY3lUcmFja2luZyB8IHVuZGVmaW5lZDtcbiAgLyoqIGBEYXRlLm5vdygpYCB0YWtlbiBpbW1lZGlhdGVseSBiZWZvcmUgdXNlciBzdGVwIGNvZGUgYmVnYW4gZXhlY3V0aW5nLiAqL1xuICBzdGVwQ29kZVN0YXJ0ZWRBdE1zOiBudW1iZXI7XG4gIGF0dGVtcHQ6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBzdGVwIHdhcyBzdGFydGVkIGxhemlseSAobm8gc2VwYXJhdGUgc3RlcF9jcmVhdGVkIHdyaXRlKS4gKi9cbiAgbGF6eVN0ZXBTdGFydDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIGJvZHkgcmFuIG9wdGltaXN0aWNhbGx5LCB3aXRob3V0IGF3YWl0aW5nIHN0ZXBfc3RhcnRlZC4gKi9cbiAgb3B0aW1pc3RpY1N0YXJ0OiBib29sZWFuO1xufSk6IFN0ZXBMYXRlbmN5RXZlbnREYXRhIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB0cmFja2luZyB9ID0gcGFyYW1zO1xuICBpZiAoIXRyYWNraW5nIHx8IHBhcmFtcy5hdHRlbXB0ICE9PSAxKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIENsYW1wIGF0IDA6IGNyb3NzLWludm9jYXRpb24gdGltZXN0YW1wcyBjYW4gY29tZSBmcm9tIGFub3RoZXIgbWFjaGluZSdzXG4gIC8vIGNsb2NrLCBzbyBzbWFsbCBza2V3cyBtdXN0IG5vdCBwcm9kdWNlIG5lZ2F0aXZlIGR1cmF0aW9ucy5cbiAgLy9cbiAgLy8gQSBwcmUtc3RlcCBzZXRBdHRyaWJ1dGVzIGRldG91ciBlbmRzIHRoZSBtZWFzdXJlbWVudCBhdCB0aGUgZmlyc3QgYXR0clxuICAvLyB3cml0ZSBpbnN0ZWFkIG9mIHRoZSBzdGVwJ3MgY29kZSBzdGFydCDigJQgdGhlIHJlbWFpbmRlciBpcyB0aGUgZHVyYXRpb25cbiAgLy8gb2YgdGhlIHNldEF0dHJpYnV0ZXMgY2FsbCAocmVzb2x2ZWQgdmlhIGFuIGV4dHJhIHJlcGxheSksIHdoaWNoIGlzXG4gIC8vIHN1YnRyYWN0ZWQgcmF0aGVyIHRoYW4gZGlzcXVhbGlmeWluZyB0aGUgc2FtcGxlLiBJbiB0aGF0IGNhc2VcbiAgLy8gYHRyYWNraW5nLnByZVN0ZXBCbG9ja2luZ01zYCBhbHJlYWR5IGhvbGRzIG9ubHkgdGhlIGhvb2sgdGltZSBmcm9tXG4gIC8vIEJFRk9SRSB0aGUgYXR0ciB3cml0ZSDigJQgaG9vayB3cml0ZXMgYWZ0ZXIgdGhlIHdpbmRvdyBjbG9zZWQgYXJlIGV4Y2x1ZGVkXG4gIC8vIGJ5IGNvbXB1dGVTdGVwTGF0ZW5jeVRyYWNraW5nIChzZWUgcHJlU3RlcEJsb2NraW5nQmVmb3JlQXR0ck1zKS5cbiAgY29uc3QgdHRmc0VuZE1zID0gdHJhY2tpbmcucHJlU3RlcEF0dHJTdGFydE1zID8/IHBhcmFtcy5zdGVwQ29kZVN0YXJ0ZWRBdE1zO1xuICBjb25zdCB0dGZzID1cbiAgICB0cmFja2luZy50dGZzQW5jaG9yTXMgIT09IHVuZGVmaW5lZFxuICAgICAgPyBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIHR0ZnNFbmRNcyAtIHRyYWNraW5nLnR0ZnNBbmNob3JNcyAtICh0cmFja2luZy5wcmVTdGVwQmxvY2tpbmdNcyA/PyAwKVxuICAgICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgc3RzbyA9XG4gICAgdHJhY2tpbmcucHJldlN0ZXBFbmRNcyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IE1hdGgubWF4KDAsIHBhcmFtcy5zdGVwQ29kZVN0YXJ0ZWRBdE1zIC0gdHJhY2tpbmcucHJldlN0ZXBFbmRNcylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gIGlmICh0dGZzID09PSB1bmRlZmluZWQgJiYgc3RzbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG9wdGltaXphdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIGlmICh0cmFja2luZy50dXJibykgb3B0aW1pemF0aW9ucy5wdXNoKCd0dXJibycpO1xuICBpZiAocGFyYW1zLmxhenlTdGVwU3RhcnQpIG9wdGltaXphdGlvbnMucHVzaCgnbGF6eVN0ZXBTdGFydCcpO1xuICBpZiAocGFyYW1zLm9wdGltaXN0aWNTdGFydCkgb3B0aW1pemF0aW9ucy5wdXNoKCdvcHRpbWlzdGljU3RhcnQnKTtcblxuICByZXR1cm4ge1xuICAgIC4uLih0dGZzICE9PSB1bmRlZmluZWQgPyB7IHR0ZnMgfSA6IHt9KSxcbiAgICAuLi4oc3RzbyAhPT0gdW5kZWZpbmVkID8geyBzdHNvIH0gOiB7fSksXG4gICAgLi4uKHN0c28gIT09IHVuZGVmaW5lZCAmJiB0cmFja2luZy5zdGVwQ291bnQgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IHN0ZXBDb3VudDogdHJhY2tpbmcuc3RlcENvdW50IH1cbiAgICAgIDoge30pLFxuICAgIC4uLihzdHNvICE9PSB1bmRlZmluZWQgJiYgdHJhY2tpbmcuZXZlbnRDb3VudCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgZXZlbnRDb3VudDogdHJhY2tpbmcuZXZlbnRDb3VudCB9XG4gICAgICA6IHt9KSxcbiAgICBvcHRpbWl6YXRpb25zLFxuICB9O1xufVxuIl19
|