@cdklabs/cdk-appmod-catalog-blueprints 1.16.1 → 1.17.0
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/.jsii +960 -143
- package/lib/document-processing/adapter/queued-s3-adapter.js +1 -1
- package/lib/document-processing/agentic-document-processing.js +1 -1
- package/lib/document-processing/base-document-processing.js +1 -1
- package/lib/document-processing/bedrock-document-processing.d.ts +1 -0
- package/lib/document-processing/bedrock-document-processing.js +10 -6
- package/lib/document-processing/default-document-processing-config.js +1 -1
- package/lib/document-processing/index.d.ts +2 -0
- package/lib/document-processing/index.js +3 -1
- package/lib/document-processing/localstack-agentic-document-processing.d.ts +20 -0
- package/lib/document-processing/localstack-agentic-document-processing.js +66 -0
- package/lib/document-processing/localstack-bedrock-document-processing.d.ts +16 -0
- package/lib/document-processing/localstack-bedrock-document-processing.js +38 -0
- package/lib/document-processing/resources/cleanup/handler.py +16 -1
- package/lib/document-processing/resources/default-localstack-invoke/index.py +184 -0
- package/lib/document-processing/resources/default-localstack-invoke/provider_runtime.py +251 -0
- package/lib/document-processing/resources/default-localstack-invoke/requirements.txt +5 -0
- package/lib/document-processing/resources/default-sqs-consumer/index.py +17 -2
- package/lib/document-processing/resources/pdf-chunking/handler.py +16 -1
- package/lib/document-processing/tests/localstack-agentic-document-processing.test.d.ts +1 -0
- package/lib/document-processing/tests/localstack-agentic-document-processing.test.js +78 -0
- package/lib/document-processing/tests/localstack-document-processing.test.d.ts +1 -0
- package/lib/document-processing/tests/localstack-document-processing.test.js +116 -0
- package/lib/framework/agents/base-agent.js +1 -1
- package/lib/framework/agents/batch-agent.d.ts +1 -0
- package/lib/framework/agents/batch-agent.js +7 -4
- package/lib/framework/agents/default-agent-config.js +1 -1
- package/lib/framework/agents/index.d.ts +1 -0
- package/lib/framework/agents/index.js +2 -1
- package/lib/framework/agents/interactive-agent.js +10 -10
- package/lib/framework/agents/knowledge-base/base-knowledge-base.js +1 -1
- package/lib/framework/agents/knowledge-base/bedrock-knowledge-base.js +1 -1
- package/lib/framework/agents/localstack-batch-agent.d.ts +15 -0
- package/lib/framework/agents/localstack-batch-agent.js +33 -0
- package/lib/framework/agents/resources/default-ollama-agent/batch.py +396 -0
- package/lib/framework/agents/resources/default-ollama-agent/models.py +7 -0
- package/lib/framework/agents/resources/default-ollama-agent/requirements.txt +9 -0
- package/lib/framework/agents/resources/default-ollama-agent/runtime_support.py +237 -0
- package/lib/framework/agents/resources/default-ollama-agent/utils.py +77 -0
- package/lib/framework/bedrock/bedrock.d.ts +9 -0
- package/lib/framework/bedrock/bedrock.js +20 -10
- package/lib/framework/custom-resource/default-runtimes.js +1 -1
- package/lib/framework/foundation/access-log.js +1 -1
- package/lib/framework/foundation/eventbridge-broker.js +1 -1
- package/lib/framework/foundation/network.js +1 -1
- package/lib/framework/index.d.ts +1 -0
- package/lib/framework/index.js +2 -1
- package/lib/framework/localstack/index.d.ts +1 -0
- package/lib/framework/localstack/index.js +18 -0
- package/lib/framework/localstack/localstack-config.d.ts +79 -0
- package/lib/framework/localstack/localstack-config.js +49 -0
- package/lib/framework/tests/localstack-batch-agent.test.d.ts +1 -0
- package/lib/framework/tests/localstack-batch-agent.test.js +67 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utilities/data-loader.js +1 -1
- package/lib/utilities/lambda-iam-utils.js +1 -1
- package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
- package/lib/utilities/observability/cloudwatch-transaction-search.js +1 -1
- package/lib/utilities/observability/default-observability-config.js +1 -1
- package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
- package/lib/utilities/observability/log-group-data-protection-utils.js +1 -1
- package/lib/utilities/observability/powertools-config.js +1 -1
- package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
- package/lib/webapp/frontend-construct.js +1 -1
- package/package.json +1 -1
|
@@ -189,7 +189,7 @@ class StreamingHttpAdapter {
|
|
|
189
189
|
}
|
|
190
190
|
exports.StreamingHttpAdapter = StreamingHttpAdapter;
|
|
191
191
|
_a = JSII_RTTI_SYMBOL_1;
|
|
192
|
-
StreamingHttpAdapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.StreamingHttpAdapter", version: "1.
|
|
192
|
+
StreamingHttpAdapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.StreamingHttpAdapter", version: "1.17.0" };
|
|
193
193
|
/**
|
|
194
194
|
* S3-based session manager for persisting conversation state.
|
|
195
195
|
*
|
|
@@ -266,7 +266,7 @@ class S3SessionManager {
|
|
|
266
266
|
}
|
|
267
267
|
exports.S3SessionManager = S3SessionManager;
|
|
268
268
|
_b = JSII_RTTI_SYMBOL_1;
|
|
269
|
-
S3SessionManager[_b] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.S3SessionManager", version: "1.
|
|
269
|
+
S3SessionManager[_b] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.S3SessionManager", version: "1.17.0" };
|
|
270
270
|
/**
|
|
271
271
|
* Sliding window conversation manager for maintaining recent conversation history.
|
|
272
272
|
*
|
|
@@ -314,7 +314,7 @@ class SlidingWindowConversationManager {
|
|
|
314
314
|
}
|
|
315
315
|
exports.SlidingWindowConversationManager = SlidingWindowConversationManager;
|
|
316
316
|
_c = JSII_RTTI_SYMBOL_1;
|
|
317
|
-
SlidingWindowConversationManager[_c] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.SlidingWindowConversationManager", version: "1.
|
|
317
|
+
SlidingWindowConversationManager[_c] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.SlidingWindowConversationManager", version: "1.17.0" };
|
|
318
318
|
/**
|
|
319
319
|
* Null conversation manager for stateless interactions.
|
|
320
320
|
*
|
|
@@ -337,7 +337,7 @@ class NullConversationManager {
|
|
|
337
337
|
}
|
|
338
338
|
exports.NullConversationManager = NullConversationManager;
|
|
339
339
|
_d = JSII_RTTI_SYMBOL_1;
|
|
340
|
-
NullConversationManager[_d] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NullConversationManager", version: "1.
|
|
340
|
+
NullConversationManager[_d] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NullConversationManager", version: "1.17.0" };
|
|
341
341
|
/**
|
|
342
342
|
* Cognito-based authenticator for securing REST API endpoints.
|
|
343
343
|
*
|
|
@@ -460,7 +460,7 @@ class CognitoAuthenticator {
|
|
|
460
460
|
}
|
|
461
461
|
exports.CognitoAuthenticator = CognitoAuthenticator;
|
|
462
462
|
_e = JSII_RTTI_SYMBOL_1;
|
|
463
|
-
CognitoAuthenticator[_e] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.CognitoAuthenticator", version: "1.
|
|
463
|
+
CognitoAuthenticator[_e] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.CognitoAuthenticator", version: "1.17.0" };
|
|
464
464
|
/**
|
|
465
465
|
* DynamoDB-based session index for fast user to session lookups.
|
|
466
466
|
*
|
|
@@ -547,7 +547,7 @@ class DynamoDBSessionIndex {
|
|
|
547
547
|
}
|
|
548
548
|
exports.DynamoDBSessionIndex = DynamoDBSessionIndex;
|
|
549
549
|
_f = JSII_RTTI_SYMBOL_1;
|
|
550
|
-
DynamoDBSessionIndex[_f] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DynamoDBSessionIndex", version: "1.
|
|
550
|
+
DynamoDBSessionIndex[_f] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DynamoDBSessionIndex", version: "1.17.0" };
|
|
551
551
|
/**
|
|
552
552
|
* No-authentication authenticator for development and testing.
|
|
553
553
|
*
|
|
@@ -577,7 +577,7 @@ class NoAuthenticator {
|
|
|
577
577
|
}
|
|
578
578
|
exports.NoAuthenticator = NoAuthenticator;
|
|
579
579
|
_g = JSII_RTTI_SYMBOL_1;
|
|
580
|
-
NoAuthenticator[_g] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NoAuthenticator", version: "1.
|
|
580
|
+
NoAuthenticator[_g] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.NoAuthenticator", version: "1.17.0" };
|
|
581
581
|
/**
|
|
582
582
|
* Lambda hosting adapter for InteractiveAgent.
|
|
583
583
|
*
|
|
@@ -723,7 +723,7 @@ class LambdaHostingAdapter {
|
|
|
723
723
|
}
|
|
724
724
|
exports.LambdaHostingAdapter = LambdaHostingAdapter;
|
|
725
725
|
_h = JSII_RTTI_SYMBOL_1;
|
|
726
|
-
LambdaHostingAdapter[_h] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LambdaHostingAdapter", version: "1.
|
|
726
|
+
LambdaHostingAdapter[_h] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LambdaHostingAdapter", version: "1.17.0" };
|
|
727
727
|
/**
|
|
728
728
|
* Configuration properties for AgentCoreRuntimeHostingAdapter.
|
|
729
729
|
*/
|
|
@@ -1067,7 +1067,7 @@ class AgentCoreRuntimeHostingAdapter {
|
|
|
1067
1067
|
}
|
|
1068
1068
|
exports.AgentCoreRuntimeHostingAdapter = AgentCoreRuntimeHostingAdapter;
|
|
1069
1069
|
_j = JSII_RTTI_SYMBOL_1;
|
|
1070
|
-
AgentCoreRuntimeHostingAdapter[_j] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgentCoreRuntimeHostingAdapter", version: "1.
|
|
1070
|
+
AgentCoreRuntimeHostingAdapter[_j] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgentCoreRuntimeHostingAdapter", version: "1.17.0" };
|
|
1071
1071
|
/**
|
|
1072
1072
|
* Interactive Agent for real-time conversational AI with SSE streaming.
|
|
1073
1073
|
*
|
|
@@ -1275,5 +1275,5 @@ class InteractiveAgent extends base_agent_1.BaseAgent {
|
|
|
1275
1275
|
}
|
|
1276
1276
|
exports.InteractiveAgent = InteractiveAgent;
|
|
1277
1277
|
_k = JSII_RTTI_SYMBOL_1;
|
|
1278
|
-
InteractiveAgent[_k] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.InteractiveAgent", version: "1.
|
|
1278
|
+
InteractiveAgent[_k] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.InteractiveAgent", version: "1.17.0" };
|
|
1279
1279
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9pbnRlcmFjdGl2ZS1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7QUFFdEMsNkJBQTZCO0FBQzdCLDZDQUF3RjtBQUN4RiwrREFTb0M7QUFDcEMsMkVBQWtGO0FBQ2xGLHlEQUF5SDtBQUN6SCwyREFBc0g7QUFDdEgsaURBQXFGO0FBQ3JGLCtEQUE4RDtBQUM5RCxpREFBa0c7QUFFbEcsdURBQXVIO0FBQ3ZILCtDQUEwRjtBQUUxRiw2Q0FBeUQ7QUFDekQsK0NBQTBFO0FBQzFFLGlFQUE0RDtBQUM1RCwrQ0FBbUU7QUFDbkUsaUVBQTJFO0FBQzNFLHdDQUErQztBQUMvQyx3REFBcUQ7QUFzRXJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsTUFBYSxvQkFBb0I7SUFtQi9CLFlBQVksUUFBbUMsRUFBRTtRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsY0FBeUI7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHVGQUF1RixDQUFDLENBQUM7UUFDM0csQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztRQUNqRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDNUUsTUFBTSxzQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUQsNEJB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LENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0YsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxJQUFJLGNBQWMsR0FBRyxDQUFDLElBQUksY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDckUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ25ILE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0gsQ0FBQzs7QUFsTUgsNENBbU1DIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIER1cmF0aW9uLCBGbiwgTmFtZXMsIFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgQXV0aG9yaXphdGlvblR5cGUsXG4gIENvZ25pdG9Vc2VyUG9vbHNBdXRob3JpemVyLFxuICBDb3JzLFxuICBFbmRwb2ludFR5cGUsXG4gIEdhdGV3YXlSZXNwb25zZSxcbiAgTGFtYmRhSW50ZWdyYXRpb24sXG4gIFJlc3BvbnNlVHlwZSxcbiAgUmVzdEFwaSxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknO1xuaW1wb3J0IHsgQ2ZuUnVudGltZSwgQ2ZuUnVudGltZUVuZHBvaW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHsgVXNlclBvb2wsIFVzZXJQb29sQ2xpZW50LCBNZmEsIEFjY291bnRSZWNvdmVyeSwgVXNlclBvb2xDbGllbnRJZGVudGl0eVByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZ25pdG8nO1xuaW1wb3J0IHsgQXR0cmlidXRlVHlwZSwgQmlsbGluZ01vZGUsIElUYWJsZSwgU3RyZWFtVmlld1R5cGUsIFRhYmxlLCBUYWJsZUVuY3J5cHRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGInO1xuaW1wb3J0IHsgSVNlY3VyaXR5R3JvdXAsIFNlY3VyaXR5R3JvdXAsIFN1Ym5ldFNlbGVjdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgRG9ja2VySW1hZ2VBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3ItYXNzZXRzJztcbmltcG9ydCB7IElHcmFudGFibGUsIFJvbGUsIFNlcnZpY2VQcmluY2lwYWwsIFBvbGljeVN0YXRlbWVudCwgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJS2V5LCBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IElGdW5jdGlvbiwgQXJjaGl0ZWN0dXJlLCBJTGF5ZXJWZXJzaW9uLCBMYXllclZlcnNpb24sIEZ1bmN0aW9uLCBDb2RlLCBSdW50aW1lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBJQnVja2V0LCBCdWNrZXQsIEJ1Y2tldEVuY3J5cHRpb24sIEJsb2NrUHVibGljQWNjZXNzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQmFzZUFnZW50LCBCYXNlQWdlbnRQcm9wcyB9IGZyb20gJy4vYmFzZS1hZ2VudCc7XG5pbXBvcnQgeyBnZW5lcmF0ZUtub3dsZWRnZUJhc2VTeXN0ZW1Qcm9tcHRBZGRpdGlvbiB9IGZyb20gJy4vYmF0Y2gtYWdlbnQnO1xuaW1wb3J0IHsgRGVmYXVsdEFnZW50Q29uZmlnIH0gZnJvbSAnLi9kZWZhdWx0LWFnZW50LWNvbmZpZyc7XG5pbXBvcnQgeyBMYW1iZGFJYW1VdGlscywgUG93ZXJ0b29sc0NvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBEZWZhdWx0T2JzZXJ2YWJpbGl0eUNvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9vYnNlcnZhYmlsaXR5JztcbmltcG9ydCB7IEJlZHJvY2tNb2RlbFV0aWxzIH0gZnJvbSAnLi4vYmVkcm9jayc7XG5pbXBvcnQgeyBEZWZhdWx0UnVudGltZXMgfSBmcm9tICcuLi9jdXN0b20tcmVzb3VyY2UnO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uL2ZvdW5kYXRpb24nO1xuXG4vKipcbiAqIFN0cmF0ZWd5IGludGVyZmFjZSBmb3IgcGx1Z2dhYmxlIGNvbW11bmljYXRpb24gbWVjaGFuaXNtcy5cbiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgU3RyZWFtaW5nSHR0cEFkYXB0ZXIgKEFQSSBHYXRld2F5IFJFU1QgQVBJIHdpdGggcmVzcG9uc2Ugc3RyZWFtaW5nKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29tbXVuaWNhdGlvbkFkYXB0ZXIge1xuICAvKipcbiAgICogQXR0YWNoIHRoZSBhZGFwdGVyIHRvIGEgTGFtYmRhIGZ1bmN0aW9uIGFuZCBjcmVhdGUgY29tbXVuaWNhdGlvbiBpbmZyYXN0cnVjdHVyZS5cbiAgICogUmV0dXJucyB0aGUgcHVibGljIGVuZHBvaW50IFVSTCBmb3IgY2xpZW50IGNvbm5lY3Rpb25zLlxuICAgKi9cbiAgYXR0YWNoVG9GdW5jdGlvbihsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCB0aGUgTGFtYmRhIGZ1bmN0aW9uIHBlcm1pc3Npb24gdG8gc2VuZCByZXNwb25zZXMgYmFjayB0byBjbGllbnRzLlxuICAgKi9cbiAgZ3JhbnRJbnZva2UobGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbik6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhyb3R0bGUgc2V0dGluZ3MgZm9yIFJFU1QgQVBJLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRocm90dGxlU2V0dGluZ3Mge1xuICAvKipcbiAgICogUmF0ZSBsaW1pdCAocmVxdWVzdHMgcGVyIHNlY29uZCkuXG4gICAqL1xuICByZWFkb25seSByYXRlTGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEJ1cnN0IGxpbWl0IChtYXhpbXVtIGNvbmN1cnJlbnQgcmVxdWVzdHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVyc3RMaW1pdD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIFN0cmVhbWluZ0h0dHBBZGFwdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbWluZ0h0dHBBZGFwdGVyUHJvcHMge1xuICAvKipcbiAgICogUkVTVCBBUEkgc3RhZ2UgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ3Byb2QnXG4gICAqL1xuICByZWFkb25seSBzdGFnZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRocm90dGxlIHNldHRpbmdzIGZvciBSRVNUIEFQSS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gdGhyb3R0bGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgdGhyb3R0bGU/OiBUaHJvdHRsZVNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdG9yIGZvciBzZWN1cmluZyBBUEkgZW5kcG9pbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBVc2VzIGF1dGhlbnRpY2F0b3IgZnJvbSBJbnRlcmFjdGl2ZUFnZW50XG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdG9yPzogSUF1dGhlbnRpY2F0b3I7XG5cbiAgLyoqXG4gICAqIEhUVFAgbWV0aG9kcyB0byBhbGxvdyBpbiBDT1JTIHByZWZsaWdodCByZXNwb25zZXMuXG4gICAqIFVzZSB0aGlzIHRvIGVuYWJsZSBhZGRpdGlvbmFsIG1ldGhvZHMgKEdFVCwgREVMRVRFLCBQVVQpIGZvciBjdXN0b20gcm91dGVzXG4gICAqIGFkZGVkIHRvIHRoZSBSRVNUIEFQSS5cbiAgICpcbiAgICogQGRlZmF1bHQgWydQT1NUJywgJ09QVElPTlMnXVxuICAgKi9cbiAgcmVhZG9ubHkgY29yc0FsbG93TWV0aG9kcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFN0cmVhbWluZyBIVFRQIGFkYXB0ZXIgZm9yIHJlYWwtdGltZSBhZ2VudCBjb21tdW5pY2F0aW9uIHZpYSBTU0UuXG4gKlxuICogVGhpcyBhZGFwdGVyIGNyZWF0ZXMgYW4gQVBJIEdhdGV3YXkgUkVTVCBBUEkgd2l0aCByZXNwb25zZSBzdHJlYW1pbmcgZW5hYmxlZCxcbiAqIGFsbG93aW5nIHRoZSBMYW1iZGEgZnVuY3Rpb24gdG8gc3RyZWFtIFNTRSAoU2VydmVyLVNlbnQgRXZlbnRzKSByZXNwb25zZXNcbiAqIGJhY2sgdG8gY2xpZW50cyBhcyB0aGUgU3RyYW5kcyBBZ2VudCBnZW5lcmF0ZXMgdG9rZW5zLlxuICpcbiAqICMjIEFyY2hpdGVjdHVyZVxuICpcbiAqIGBgYFxuICogQ2xpZW50IOKGkiBQT1NUIC9jaGF0IOKGkiBBUEkgR2F0ZXdheSBSRVNUIEFQSSAoU1RSRUFNIG1vZGUpIOKGkiBMYW1iZGEgKEZhc3RBUEkgKyBMV0EpIOKGkiBCZWRyb2NrXG4gKiBDbGllbnQg4oaQIFNTRSBzdHJlYW0g4oaQIEFQSSBHYXRld2F5IOKGkCBMYW1iZGEgcmVzcG9uc2Ugc3RyZWFtaW5nIOKGkCBBZ2VudCB0b2tlbnNcbiAqIGBgYFxuICpcbiAqICMjIEZlYXR1cmVzXG4gKlxuICogLSAqKlJlc3BvbnNlIFN0cmVhbWluZyoqOiBQcm9ncmVzc2l2ZSBTU0UgZGVsaXZlcnkgdmlhIEFQSSBHYXRld2F5IHJlc3BvbnNlIHN0cmVhbWluZ1xuICogLSAqKjE1LU1pbnV0ZSBUaW1lb3V0Kio6IEV4dGVuZGVkIHRpbWVvdXQgZm9yIGxvbmctcnVubmluZyBhZ2VudCBjb252ZXJzYXRpb25zXG4gKiAtICoqQ29nbml0byBBdXRoKio6IE5hdGl2ZSBDT0dOSVRPX1VTRVJfUE9PTFMgYXV0aG9yaXplciBvbiBSRVNUIEFQSVxuICogLSAqKkNPUlMqKjogQnVpbHQtaW4gQ09SUyBzdXBwb3J0IGZvciBicm93c2VyIGNsaWVudHNcbiAqIC0gKipUaHJvdHRsaW5nKio6IENvbmZpZ3VyYWJsZSByYXRlIGFuZCBidXJzdCBsaW1pdHNcbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbiAqIGltcG9ydCB7IEludGVyYWN0aXZlQWdlbnQsIFN0cmVhbWluZ0h0dHBBZGFwdGVyIH0gZnJvbSAnQGNka2xhYnMvY2RrLWFwcG1vZC1jYXRhbG9nLWJsdWVwcmludHMnO1xuICpcbiAqIGNvbnN0IG15UHJvbXB0ID0gbmV3IEFzc2V0KHRoaXMsICdQcm9tcHQnLCB7IHBhdGg6ICcuL3Byb21wdC50eHQnIH0pO1xuICogY29uc3QgYWRhcHRlciA9IG5ldyBTdHJlYW1pbmdIdHRwQWRhcHRlcih7XG4gKiAgIHN0YWdlTmFtZTogJ3Byb2QnLFxuICogICB0aHJvdHRsZTogeyByYXRlTGltaXQ6IDEwMCwgYnVyc3RMaW1pdDogMjAwIH1cbiAqIH0pO1xuICpcbiAqIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQodGhpcywgJ0FnZW50Jywge1xuICogICBhZ2VudE5hbWU6ICdDaGF0QWdlbnQnLFxuICogICBhZ2VudERlZmluaXRpb246IHsgYmVkcm9ja01vZGVsOiB7fSwgc3lzdGVtUHJvbXB0OiBteVByb21wdCB9LFxuICogICBjb21tdW5pY2F0aW9uQWRhcHRlcjogYWRhcHRlclxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFN0cmVhbWluZ0h0dHBBZGFwdGVyIGltcGxlbWVudHMgSUNvbW11bmljYXRpb25BZGFwdGVyIHtcbiAgLyoqXG4gICAqIFRoZSBSRVNUIEFQSSBHYXRld2F5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc3RBcGk/OiBSZXN0QXBpO1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBVc2VyIFBvb2xzIGF1dGhvcml6ZXIgKGlmIENvZ25pdG8gYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29nbml0b0F1dGhvcml6ZXI/OiBDb2duaXRvVXNlclBvb2xzQXV0aG9yaXplcjtcblxuICAvKipcbiAgICogVGhlIEFQSSBlbmRwb2ludCBVUkwuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpRW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogU3RyZWFtaW5nSHR0cEFkYXB0ZXJQcm9wcztcbiAgcHJpdmF0ZSBzY29wZT86IENvbnN0cnVjdDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU3RyZWFtaW5nSHR0cEFkYXB0ZXJQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCB0aGUgYWRhcHRlciB0byBhIExhbWJkYSBmdW5jdGlvbiBhbmQgY3JlYXRlIFJFU1QgQVBJIGluZnJhc3RydWN0dXJlLlxuICAgKiBDcmVhdGVzIEFQSSBHYXRld2F5IFJFU1QgQVBJIHdpdGggUE9TVCAvY2hhdCBlbmRwb2ludCBhbmQgcmVzcG9uc2Ugc3RyZWFtaW5nLlxuICAgKi9cbiAgYXR0YWNoVG9GdW5jdGlvbihsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuc2NvcGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtaW5nSHR0cEFkYXB0ZXIgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgc2NvcGUgYmVmb3JlIGNhbGxpbmcgYXR0YWNoVG9GdW5jdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWdlTmFtZSA9IHRoaXMucHJvcHMuc3RhZ2VOYW1lIHx8ICdwcm9kJztcbiAgICBjb25zdCBjb3JzQWxsb3dNZXRob2RzID0gdGhpcy5wcm9wcy5jb3JzQWxsb3dNZXRob2RzIHx8IFsnUE9TVCcsICdPUFRJT05TJ107XG4gICAgY29uc3QgY29yc0FsbG93TWV0aG9kc1N0cmluZyA9IGNvcnNBbGxvd01ldGhvZHMuam9pbignLCcpO1xuXG4gICAgLy8gQ3JlYXRlIFJFU1QgQVBJIHdpdGggQ09SU1xuICAgIC8vIFVzZSBSRUdJT05BTCBlbmRwb2ludCBmb3IgNS1taW51dGUgaWRsZSB0aW1lb3V0ICh2cyAzMHMgZm9yIEVER0UpLlxuICAgIC8vIFRoaXMgYWxsb3dzIHJlc3BvbnNlIHN0cmVhbWluZyB0byBleGNlZWQgQVBJIEdhdGV3YXkncyAyOXMgbGltaXQuXG4gICAgY29uc3QgcmVzdEFwaSA9IG5ldyBSZXN0QXBpKHRoaXMuc2NvcGUsICdDaGF0QXBpJywge1xuICAgICAgcmVzdEFwaU5hbWU6IGAke1N0YWNrLm9mKHRoaXMuc2NvcGUpLnN0YWNrTmFtZX0tQ2hhdEFwaWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyYWN0aXZlIEFnZW50IENoYXQgQVBJIHdpdGggcmVzcG9uc2Ugc3RyZWFtaW5nJyxcbiAgICAgIGVuZHBvaW50VHlwZXM6IFtFbmRwb2ludFR5cGUuUkVHSU9OQUxdLFxuICAgICAgZGVwbG95T3B0aW9uczoge1xuICAgICAgICBzdGFnZU5hbWUsXG4gICAgICAgIHRocm90dGxpbmdSYXRlTGltaXQ6IHRoaXMucHJvcHMudGhyb3R0bGU/LnJhdGVMaW1pdCxcbiAgICAgICAgdGhyb3R0bGluZ0J1cnN0TGltaXQ6IHRoaXMucHJvcHMudGhyb3R0bGU/LmJ1cnN0TGltaXQsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdENvcnNQcmVmbGlnaHRPcHRpb25zOiB7XG4gICAgICAgIGFsbG93T3JpZ2luczogQ29ycy5BTExfT1JJR0lOUyxcbiAgICAgICAgYWxsb3dNZXRob2RzOiBjb3JzQWxsb3dNZXRob2RzLFxuICAgICAgICBhbGxvd0hlYWRlcnM6IFsnQ29udGVudC1UeXBlJywgJ0F1dGhvcml6YXRpb24nXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgKHRoaXMgYXMgYW55KS5yZXN0QXBpID0gcmVzdEFwaTtcblxuICAgIC8vIEFkZCBDT1JTIGhlYWRlcnMgdG8gQVBJIEdhdGV3YXkgZXJyb3IgcmVzcG9uc2VzICg0WFgvNVhYKS5cbiAgICAvLyBXaXRob3V0IHRoZXNlLCB0aGUgQ29nbml0byBhdXRob3JpemVyJ3MgNDAxIHJlc3BvbnNlIHdvbid0IGluY2x1ZGVcbiAgICAvLyBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4gYW5kIHRoZSBicm93c2VyIHdpbGwgYmxvY2sgaXQgYXMgYSBDT1JTIGVycm9yLlxuICAgIG5ldyBHYXRld2F5UmVzcG9uc2UodGhpcy5zY29wZSwgJ0dhdGV3YXlEZWZhdWx0NFhYJywge1xuICAgICAgcmVzdEFwaSxcbiAgICAgIHR5cGU6IFJlc3BvbnNlVHlwZS5ERUZBVUxUXzRYWCxcbiAgICAgIHJlc3BvbnNlSGVhZGVyczoge1xuICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogXCInKidcIixcbiAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnOiBcIidDb250ZW50LVR5cGUsQXV0aG9yaXphdGlvbidcIixcbiAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnOiBgJyR7Y29yc0FsbG93TWV0aG9kc1N0cmluZ30nYCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgbmV3IEdhdGV3YXlSZXNwb25zZSh0aGlzLnNjb3BlLCAnR2F0ZXdheURlZmF1bHQ1WFgnLCB7XG4gICAgICByZXN0QXBpLFxuICAgICAgdHlwZTogUmVzcG9uc2VUeXBlLkRFRkFVTFRfNVhYLFxuICAgICAgcmVzcG9uc2VIZWFkZXJzOiB7XG4gICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiBcIicqJ1wiLFxuICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyc6IFwiJ0NvbnRlbnQtVHlwZSxBdXRob3JpemF0aW9uJ1wiLFxuICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcyc6IGAnJHtjb3JzQWxsb3dNZXRob2RzU3RyaW5nfSdgLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBMYW1iZGEgaW50ZWdyYXRpb25cbiAgICBjb25zdCBsYW1iZGFJbnRlZ3JhdGlvbiA9IG5ldyBMYW1iZGFJbnRlZ3JhdGlvbihsYW1iZGFGdW5jdGlvbiwge1xuICAgICAgcHJveHk6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgL2NoYXQgcmVzb3VyY2Ugd2l0aCBQT1NUIG1ldGhvZFxuICAgIGNvbnN0IGNoYXRSZXNvdXJjZSA9IHJlc3RBcGkucm9vdC5hZGRSZXNvdXJjZSgnY2hhdCcpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGF1dGhvcml6YXRpb24gdHlwZVxuICAgIGxldCBhdXRob3JpemF0aW9uVHlwZSA9IEF1dGhvcml6YXRpb25UeXBlLk5PTkU7XG4gICAgbGV0IGF1dGhvcml6ZXI6IENvZ25pdG9Vc2VyUG9vbHNBdXRob3JpemVyIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuYXV0aGVudGljYXRvciBpbnN0YW5jZW9mIENvZ25pdG9BdXRoZW50aWNhdG9yICYmIHRoaXMucHJvcHMuYXV0aGVudGljYXRvci51c2VyUG9vbCkge1xuICAgICAgYXV0aG9yaXplciA9IG5ldyBDb2duaXRvVXNlclBvb2xzQXV0aG9yaXplcih0aGlzLnNjb3BlLCAnQ29nbml0b0F1dGhvcml6ZXInLCB7XG4gICAgICAgIGNvZ25pdG9Vc2VyUG9vbHM6IFt0aGlzLnByb3BzLmF1dGhlbnRpY2F0b3IudXNlclBvb2xdLFxuICAgICAgICBhdXRob3JpemVyTmFtZTogJ0NvZ25pdG9BdXRob3JpemVyJyxcbiAgICAgIH0pO1xuICAgICAgKHRoaXMgYXMgYW55KS5jb2duaXRvQXV0aG9yaXplciA9IGF1dGhvcml6ZXI7XG4gICAgICBhdXRob3JpemF0aW9uVHlwZSA9IEF1dGhvcml6YXRpb25UeXBlLkNPR05JVE87XG4gICAgfVxuXG4gICAgY29uc3QgcG9zdE1ldGhvZCA9IGNoYXRSZXNvdXJjZS5hZGRNZXRob2QoJ1BPU1QnLCBsYW1iZGFJbnRlZ3JhdGlvbiwge1xuICAgICAgYXV0aG9yaXphdGlvblR5cGUsXG4gICAgICBhdXRob3JpemVyLFxuICAgIH0pO1xuXG4gICAgLy8gQ29uZmlndXJlIHJlc3BvbnNlIHN0cmVhbWluZyB2aWEgQ2ZuTWV0aG9kIGVzY2FwZSBoYXRjaFxuICAgIC8vIEFQSSBHYXRld2F5IFJFU1QgQVBJIHJlc3BvbnNlIHN0cmVhbWluZyByZXF1aXJlczpcbiAgICAvLyAxLiByZXNwb25zZVRyYW5zZmVyTW9kZTogU1RSRUFNIG9uIHRoZSBpbnRlZ3JhdGlvblxuICAgIC8vIDIuIEludGVncmF0aW9uIFVSSSBwb2ludGluZyB0byAvcmVzcG9uc2Utc3RyZWFtaW5nLWludm9jYXRpb25zXG4gICAgY29uc3QgY2ZuTWV0aG9kID0gcG9zdE1ldGhvZC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBhbnk7XG4gICAgaWYgKGNmbk1ldGhvZCkge1xuICAgICAgY2ZuTWV0aG9kLmFkZFByb3BlcnR5T3ZlcnJpZGUoJ0ludGVncmF0aW9uLlJlc3BvbnNlVHJhbnNmZXJNb2RlJywgJ1NUUkVBTScpO1xuICAgICAgLy8gT3ZlcnJpZGUgdGhlIGludGVncmF0aW9uIFVSSSB0byB1c2UgcmVzcG9uc2Utc3RyZWFtaW5nLWludm9jYXRpb25zIHBhdGhcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IFN0YWNrLm9mKHRoaXMuc2NvcGUpLnJlZ2lvbjtcbiAgICAgIGNmbk1ldGhvZC5hZGRQcm9wZXJ0eU92ZXJyaWRlKFxuICAgICAgICAnSW50ZWdyYXRpb24uVXJpJyxcbiAgICAgICAgYGFybjphd3M6YXBpZ2F0ZXdheToke3JlZ2lvbn06bGFtYmRhOnBhdGgvMjAyMS0xMS0xNS9mdW5jdGlvbnMvJHtsYW1iZGFGdW5jdGlvbi5mdW5jdGlvbkFybn0vcmVzcG9uc2Utc3RyZWFtaW5nLWludm9jYXRpb25zYCxcbiAgICAgICk7XG4gICAgICAvLyBTZXQgaW50ZWdyYXRpb24gdGltZW91dCB0byAxNSBtaW51dGVzICg5MDAwMDAgbXMpXG4gICAgICBjZm5NZXRob2QuYWRkUHJvcGVydHlPdmVycmlkZSgnSW50ZWdyYXRpb24uVGltZW91dEluTWlsbGlzJywgOTAwMDAwKTtcbiAgICB9XG5cbiAgICAvLyBHcmFudCBBUEkgR2F0ZXdheSBwZXJtaXNzaW9uIHRvIGludm9rZSBMYW1iZGEgd2l0aCByZXNwb25zZSBzdHJlYW1pbmdcbiAgICBsYW1iZGFGdW5jdGlvbi5hZGRQZXJtaXNzaW9uKCdBcGlHYXRld2F5SW52b2tlJywge1xuICAgICAgcHJpbmNpcGFsOiBuZXcgU2VydmljZVByaW5jaXBhbCgnYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tJyksXG4gICAgICBzb3VyY2VBcm46IHJlc3RBcGkuYXJuRm9yRXhlY3V0ZUFwaSgpLFxuICAgIH0pO1xuXG4gICAgLy8gQWxzbyBncmFudCBJbnZva2VXaXRoUmVzcG9uc2VTdHJlYW0gcGVybWlzc2lvblxuICAgIGxhbWJkYUZ1bmN0aW9uLmFkZFBlcm1pc3Npb24oJ0FwaUdhdGV3YXlTdHJlYW1JbnZva2UnLCB7XG4gICAgICBwcmluY2lwYWw6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKCdhcGlnYXRld2F5LmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIHNvdXJjZUFybjogcmVzdEFwaS5hcm5Gb3JFeGVjdXRlQXBpKCdQT1NUJywgJy9jaGF0JyksXG4gICAgICBhY3Rpb246ICdsYW1iZGE6SW52b2tlRnVuY3Rpb25VcmwnLFxuICAgIH0pO1xuXG4gICAgLy8gQ29uc3RydWN0IGVuZHBvaW50IFVSTFxuICAgIGNvbnN0IHVybCA9IHJlc3RBcGkudXJsRm9yUGF0aCgnL2NoYXQnKTtcbiAgICAodGhpcyBhcyBhbnkpLmFwaUVuZHBvaW50ID0gdXJsO1xuXG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCB0aGUgTGFtYmRhIGZ1bmN0aW9uIHBlcm1pc3Npb25zIGZvciBBUEkgR2F0ZXdheSBpbnRlZ3JhdGlvbi5cbiAgICogRm9yIFJFU1QgQVBJIHN0cmVhbWluZywgbm8gYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcmUgbmVlZGVkIGJleW9uZCB0aGUgaW52b2tlIHBlcm1pc3Npb24uXG4gICAqL1xuICBncmFudEludm9rZShfbGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbik6IHZvaWQge1xuICAgIC8vIFJFU1QgQVBJIHN0cmVhbWluZyBkb2Vzbid0IG5lZWQgcG9zdF90b19jb25uZWN0aW9uIGxpa2UgV2ViU29ja2V0LlxuICAgIC8vIFRoZSBMYW1iZGEgaW52b2tlIHBlcm1pc3Npb24gaXMgYWxyZWFkeSBncmFudGVkIGluIGF0dGFjaFRvRnVuY3Rpb24uXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYWRhcHRlciB3aXRoIGEgQ0RLIHNjb3BlLlxuICAgKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYXR0YWNoVG9GdW5jdGlvbiBvciBncmFudEludm9rZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3NldFNjb3BlKHNjb3BlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJhdGVneSBpbnRlcmZhY2UgZm9yIHNlc3Npb24gcGVyc2lzdGVuY2UuXG4gKlxuICogU2Vzc2lvbiBzdG9yZXMgbWFuYWdlIGNvbnZlcnNhdGlvbiBzdGF0ZSBwZXJzaXN0ZW5jZSBhY3Jvc3MgSFRUUCByZXF1ZXN0cy5cbiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIChTM1Nlc3Npb25NYW5hZ2VyKSB1c2VzIFMzIGZvciBkdXJhYmxlIHN0b3JhZ2UuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFN0cmFuZHMtbmF0aXZlIGBTM1Nlc3Npb25NYW5hZ2VyYCBmcm9tIGBzdHJhbmRzLnNlc3Npb24uczNfc2Vzc2lvbl9tYW5hZ2VyYCBpbnN0ZWFkLlxuICogVGhlIFB5dGhvbiBoYW5kbGVyIG5vdyB1c2VzIFN0cmFuZHMtbmF0aXZlIHNlc3Npb24gbWFuYWdlbWVudCBhdXRvbWF0aWNhbGx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTZXNzaW9uU3RvcmUge1xuICAvKipcbiAgICogVGhlIFMzIGJ1Y2tldCB1c2VkIGZvciBzZXNzaW9uIHN0b3JhZ2UgKGlmIFMzLWJhc2VkKS5cbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25CdWNrZXQ/OiBJQnVja2V0O1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHRvIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gbGFtYmRhRnVuY3Rpb24gLSBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgbmVlZHMgYWNjZXNzIHRvIHRoZSBzZXNzaW9uIHN0b3JlXG4gICAqL1xuICBncmFudFJlYWRXcml0ZShsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uKTogdm9pZDtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIFMzU2Vzc2lvbk1hbmFnZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFN0cmFuZHMtbmF0aXZlIGBTM1Nlc3Npb25NYW5hZ2VyYCBmcm9tIGBzdHJhbmRzLnNlc3Npb24uczNfc2Vzc2lvbl9tYW5hZ2VyYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFMzU2Vzc2lvbk1hbmFnZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBTMyBidWNrZXQgZm9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0by1jcmVhdGVkIGJ1Y2tldCB3aXRoIEtNUyBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ/OiBJQnVja2V0O1xuXG4gIC8qKlxuICAgKiBUaW1lLXRvLWxpdmUgZm9yIHNlc3Npb25zLlxuICAgKiBTZXNzaW9ucyBvbGRlciB0aGFuIHRoaXMgZHVyYXRpb24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLmhvdXJzKDI0KVxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvblRUTD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBLTVMgZW5jcnlwdGlvbiBrZXkgZm9yIHRoZSBzZXNzaW9uIGJ1Y2tldC5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0by1jcmVhdGVkIEtNUyBrZXkgd2l0aCByb3RhdGlvbiBlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5PzogSUtleTtcblxuICAvKipcbiAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIHRoZSBzZXNzaW9uIGJ1Y2tldC5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuLyoqXG4gKiBTMy1iYXNlZCBzZXNzaW9uIG1hbmFnZXIgZm9yIHBlcnNpc3RpbmcgY29udmVyc2F0aW9uIHN0YXRlLlxuICpcbiAqIFVzZXMgUzMgZm9yIGR1cmFibGUgc3RvcmFnZSBvZiBzZXNzaW9uIGRhdGEgd2l0aCBhdXRvbWF0aWMgZXhwaXJhdGlvblxuICogdmlhIGxpZmVjeWNsZSBwb2xpY2llcy4gRWFjaCBIVFRQIHJlcXVlc3QgbG9hZHMvc2F2ZXMgc2Vzc2lvbiBzdGF0ZSxcbiAqIGVuYWJsaW5nIG11bHRpLXR1cm4gY29udmVyc2F0aW9ucyBvdmVyIHN0YXRlbGVzcyBIVFRQLlxuICpcbiAqICMjIEZlYXR1cmVzXG4gKlxuICogLSAqKkR1cmFibGUgU3RvcmFnZSoqOiBTZXNzaW9ucyBwZXJzaXN0ZWQgdG8gUzMgc3Vydml2ZSBMYW1iZGEgcmVzdGFydHNcbiAqIC0gKipBdXRvbWF0aWMgRXhwaXJhdGlvbioqOiBMaWZlY3ljbGUgcG9saWN5IHJlbW92ZXMgb2xkIHNlc3Npb25zXG4gKiAtICoqRW5jcnlwdGlvbioqOiBLTVMgZW5jcnlwdGlvbiBhdCByZXN0XG4gKiAtICoqQ29zdCBPcHRpbWl6YXRpb24qKjogUzMgU3RhbmRhcmQgc3RvcmFnZSB3aXRoIGxpZmVjeWNsZSBtYW5hZ2VtZW50XG4gKlxuICogIyMgVXNhZ2VcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuICogaW1wb3J0IHsgSW50ZXJhY3RpdmVBZ2VudCwgUzNTZXNzaW9uTWFuYWdlciB9IGZyb20gJ0BjZGtsYWJzL2Nkay1hcHBtb2QtY2F0YWxvZy1ibHVlcHJpbnRzJztcbiAqIGltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuICpcbiAqIGNvbnN0IG15UHJvbXB0ID0gbmV3IEFzc2V0KHRoaXMsICdQcm9tcHQnLCB7IHBhdGg6ICcuL3Byb21wdC50eHQnIH0pO1xuICogY29uc3Qgc2Vzc2lvbk1hbmFnZXIgPSBuZXcgUzNTZXNzaW9uTWFuYWdlcih0aGlzLCAnU2Vzc2lvbk1hbmFnZXInLCB7XG4gKiAgIHNlc3Npb25UVEw6IER1cmF0aW9uLmhvdXJzKDQ4KVxuICogfSk7XG4gKlxuICogY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudCh0aGlzLCAnQWdlbnQnLCB7XG4gKiAgIGFnZW50TmFtZTogJ0NoYXRBZ2VudCcsXG4gKiAgIGFnZW50RGVmaW5pdGlvbjogeyBiZWRyb2NrTW9kZWw6IHt9LCBzeXN0ZW1Qcm9tcHQ6IG15UHJvbXB0IH0sXG4gKiAgIHNlc3Npb25TdG9yZTogc2Vzc2lvbk1hbmFnZXJcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFN0cmFuZHMtbmF0aXZlIGBTM1Nlc3Npb25NYW5hZ2VyYCBmcm9tIGBzdHJhbmRzLnNlc3Npb24uczNfc2Vzc2lvbl9tYW5hZ2VyYCBpbnN0ZWFkLlxuICogVGhlIFB5dGhvbiBoYW5kbGVyIG5vdyB1c2VzIFN0cmFuZHMtbmF0aXZlIHNlc3Npb24gbWFuYWdlbWVudCBhdXRvbWF0aWNhbGx5LlxuICogQW4gUzMgYnVja2V0IGlzIHN0aWxsIGNyZWF0ZWQgZm9yIHRoZSBTdHJhbmRzIHNlc3Npb24gbWFuYWdlcjsgdGhpcyBDREsgY2xhc3NcbiAqIGlzIG5vIGxvbmdlciBuZWVkZWQgdG8gY29uZmlndXJlIHNlc3Npb24gcGVyc2lzdGVuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTM1Nlc3Npb25NYW5hZ2VyIGltcGxlbWVudHMgSVNlc3Npb25TdG9yZSB7XG4gIC8qKlxuICAgKiBUaGUgUzMgYnVja2V0IHVzZWQgZm9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXNzaW9uIFRUTCBkdXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZXNzaW9uVFRMOiBEdXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUzNTZXNzaW9uTWFuYWdlclByb3BzID0ge30pIHtcbiAgICBjb25zdCByZW1vdmFsUG9saWN5ID0gcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1k7XG4gICAgY29uc3Qgc2Vzc2lvblRUTCA9IHByb3BzLnNlc3Npb25UVEwgfHwgRHVyYXRpb24uaG91cnMoMjQpO1xuXG4gICAgLy8gVXNlIHByb3ZpZGVkIGJ1Y2tldCBvciBjcmVhdGUgbmV3IG9uZVxuICAgIHRoaXMuYnVja2V0ID0gcHJvcHMuYnVja2V0IHx8IG5ldyBCdWNrZXQoc2NvcGUsIGAke2lkfUJ1Y2tldGAsIHtcbiAgICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uS01TLFxuICAgICAgZW5jcnlwdGlvbktleTogcHJvcHMuZW5jcnlwdGlvbktleSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHJlbW92YWxQb2xpY3ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogcmVtb3ZhbFBvbGljeSA9PT0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnRGVsZXRlT2xkU2Vzc2lvbnMnLFxuICAgICAgICAgIGV4cGlyYXRpb246IHNlc3Npb25UVEwsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgdmVyc2lvbmVkOiBmYWxzZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNlc3Npb25UVEwgPSBzZXNzaW9uVFRMO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBTMyBidWNrZXQgdXNlZCBmb3Igc2Vzc2lvbiBzdG9yYWdlIChJU2Vzc2lvblN0b3JlIGludGVyZmFjZSkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlc3Npb25CdWNrZXQoKTogSUJ1Y2tldCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQvd3JpdGUgcGVybWlzc2lvbnMgdG8gYSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqL1xuICBncmFudFJlYWRXcml0ZShsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUobGFtYmRhRnVuY3Rpb24pO1xuICB9XG59XG5cbi8qKlxuICogU3RyYXRlZ3kgaW50ZXJmYWNlIGZvciBjb252ZXJzYXRpb24gaGlzdG9yeSBtYW5hZ2VtZW50LlxuICpcbiAqIENvbnRleHQgc3RyYXRlZ2llcyBjb250cm9sIGhvdyBjb252ZXJzYXRpb24gaGlzdG9yeSBpcyBtYWludGFpbmVkIGFuZCBwcm92aWRlZFxuICogdG8gdGhlIGFnZW50LiBEaWZmZXJlbnQgc3RyYXRlZ2llcyBlbmFibGUgZGlmZmVyZW50IGNvbnZlcnNhdGlvbiBwYXR0ZXJucy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgU3RyYW5kcy1uYXRpdmUgYFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyYCBmcm9tXG4gKiBgc3RyYW5kcy5hZ2VudC5jb252ZXJzYXRpb25fbWFuYWdlcmAgaW5zdGVhZC4gVGhlIFB5dGhvbiBoYW5kbGVyIG5vdyB1c2VzXG4gKiBTdHJhbmRzLW5hdGl2ZSBjb252ZXJzYXRpb24gbWFuYWdlbWVudCBhdXRvbWF0aWNhbGx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb250ZXh0U3RyYXRlZ3kge1xuICAvKipcbiAgICogR2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgTGFtYmRhIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBjb25maWd1cmUgdGhlIGNvbnRleHQgbWFuYWdlclxuICAgKi9cbiAgZW52aXJvbm1lbnRWYXJpYWJsZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBTdHJhbmRzLW5hdGl2ZSBgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXJgIGZyb21cbiAqIGBzdHJhbmRzLmFnZW50LmNvbnZlcnNhdGlvbl9tYW5hZ2VyYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyUHJvcHMge1xuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZXMgdG8ga2VlcCBpbiBjb252ZXJzYXRpb24gaGlzdG9yeS5cbiAgICpcbiAgICogQGRlZmF1bHQgMjAgbWVzc2FnZXNcbiAgICovXG4gIHJlYWRvbmx5IHdpbmRvd1NpemU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogU2xpZGluZyB3aW5kb3cgY29udmVyc2F0aW9uIG1hbmFnZXIgZm9yIG1haW50YWluaW5nIHJlY2VudCBjb252ZXJzYXRpb24gaGlzdG9yeS5cbiAqXG4gKiBLZWVwcyBhIGZpeGVkLXNpemUgd2luZG93IG9mIHJlY2VudCBtZXNzYWdlcywgYXV0b21hdGljYWxseSBkaXNjYXJkaW5nIG9sZGVyXG4gKiBtZXNzYWdlcyBhcyBuZXcgb25lcyBhcnJpdmUuIFByb3ZpZGVzIGNvbnNpc3RlbnQgY29udGV4dCBzaXplIGZvciB0aGUgYWdlbnQuXG4gKlxuICogIyMgVXNhZ2VcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuICogaW1wb3J0IHsgSW50ZXJhY3RpdmVBZ2VudCwgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIgfSBmcm9tICdAY2RrbGFicy9jZGstYXBwbW9kLWNhdGFsb2ctYmx1ZXByaW50cyc7XG4gKlxuICogY29uc3QgbXlQcm9tcHQgPSBuZXcgQXNzZXQodGhpcywgJ1Byb21wdCcsIHsgcGF0aDogJy4vcHJvbXB0LnR4dCcgfSk7XG4gKiBjb25zdCBjb250ZXh0TWFuYWdlciA9IG5ldyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcih7IHdpbmRvd1NpemU6IDMwIH0pO1xuICpcbiAqIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQodGhpcywgJ0FnZW50Jywge1xuICogICBhZ2VudE5hbWU6ICdDaGF0QWdlbnQnLFxuICogICBhZ2VudERlZmluaXRpb246IHsgYmVkcm9ja01vZGVsOiB7fSwgc3lzdGVtUHJvbXB0OiBteVByb21wdCB9LFxuICogICBjb250ZXh0U3RyYXRlZ3k6IGNvbnRleHRNYW5hZ2VyXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBTdHJhbmRzLW5hdGl2ZSBgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXJgIGZyb21cbiAqIGBzdHJhbmRzLmFnZW50LmNvbnZlcnNhdGlvbl9tYW5hZ2VyYCBpbnN0ZWFkLiBUaGUgUHl0aG9uIGhhbmRsZXIgbm93IGhhbmRsZXNcbiAqIGNvbnZlcnNhdGlvbiB3aW5kb3dpbmcgbmF0aXZlbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlciBpbXBsZW1lbnRzIElDb250ZXh0U3RyYXRlZ3kge1xuICAvKipcbiAgICogVGhlIHdpbmRvdyBzaXplIChudW1iZXIgb2YgbWVzc2FnZXMgdG8ga2VlcCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd2luZG93U2l6ZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlclByb3BzID0ge30pIHtcbiAgICBjb25zdCB3aW5kb3dTaXplID0gcHJvcHMud2luZG93U2l6ZSAhPT0gdW5kZWZpbmVkID8gcHJvcHMud2luZG93U2l6ZSA6IDIwO1xuXG4gICAgaWYgKHdpbmRvd1NpemUgPCAxIHx8IHdpbmRvd1NpemUgPiAxMDAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dpbmRvd1NpemUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMDAnKTtcbiAgICB9XG5cbiAgICB0aGlzLndpbmRvd1NpemUgPSB3aW5kb3dTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIExhbWJkYSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZW52aXJvbm1lbnRWYXJpYWJsZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENPTlRFWFRfRU5BQkxFRDogJ3RydWUnLFxuICAgICAgQ09OVEVYVF9TVFJBVEVHWTogJ1NsaWRpbmdXaW5kb3cnLFxuICAgICAgQ09OVEVYVF9XSU5ET1dfU0laRTogdGhpcy53aW5kb3dTaXplLnRvU3RyaW5nKCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIE51bGwgY29udmVyc2F0aW9uIG1hbmFnZXIgZm9yIHN0YXRlbGVzcyBpbnRlcmFjdGlvbnMuXG4gKlxuICogRGlzYWJsZXMgY29udmVyc2F0aW9uIGhpc3RvcnksIHRyZWF0aW5nIGVhY2ggbWVzc2FnZSBhcyBpbmRlcGVuZGVudC5cbiAqIFVzZWZ1bCBmb3Igc3RhdGVsZXNzIHVzZSBjYXNlcyB3aGVyZSBjb250ZXh0IGlzIG5vdCBuZWVkZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVGhlIFB5dGhvbiBoYW5kbGVyIG5vdyB1c2VzIFN0cmFuZHMtbmF0aXZlIGNvbnZlcnNhdGlvbiBtYW5hZ2VtZW50LlxuICogVG8gZGlzYWJsZSBjb252ZXJzYXRpb24gaGlzdG9yeSwgb21pdCB0aGUgc2Vzc2lvbiBidWNrZXQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIE51bGxDb252ZXJzYXRpb25NYW5hZ2VyIGltcGxlbWVudHMgSUNvbnRleHRTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBHZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBMYW1iZGEgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGVudmlyb25tZW50VmFyaWFibGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB7XG4gICAgICBDT05URVhUX0VOQUJMRUQ6ICdmYWxzZScsXG4gICAgICBDT05URVhUX1NUUkFURUdZOiAnTnVsbCcsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFN0cmF0ZWd5IGludGVyZmFjZSBmb3IgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcy5cbiAqXG4gKiBBdXRoZW50aWNhdG9ycyBjb250cm9sIGhvdyBBUEkgZW5kcG9pbnRzIGFyZSBzZWN1cmVkLlxuICogRGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBzdXBwb3J0IHZhcmlvdXMgYXV0aGVudGljYXRpb24gbWV0aG9kcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRvciB7XG4gIC8qKlxuICAgKiBHcmFudCBhdXRoZW50aWNhdGlvbiBwZXJtaXNzaW9ucyB0byBhIExhbWJkYSBmdW5jdGlvbi5cbiAgICovXG4gIGdyYW50QXV0aGVudGljYXRlKGxhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb24pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBMYW1iZGEgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGVudmlyb25tZW50VmFyaWFibGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBDb2duaXRvQXV0aGVudGljYXRvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2duaXRvQXV0aGVudGljYXRvclByb3BzIHtcbiAgLyoqXG4gICAqIENvZ25pdG8gVXNlciBQb29sIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0by1jcmVhdGVkIFVzZXIgUG9vbCB3aXRoIHNlY3VyZSBkZWZhdWx0c1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlclBvb2w/OiBVc2VyUG9vbDtcblxuICAvKipcbiAgICogQ29nbml0byBVc2VyIFBvb2wgQ2xpZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBBdXRvLWNyZWF0ZWQgY2xpZW50IHdpdGggYXBwcm9wcmlhdGUgYXV0aCBmbG93c1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlclBvb2xDbGllbnQ/OiBVc2VyUG9vbENsaWVudDtcblxuICAvKipcbiAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIENvZ25pdG8gcmVzb3VyY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSZW1vdmFsUG9saWN5LkRFU1RST1lcbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIENvZ25pdG8tYmFzZWQgYXV0aGVudGljYXRvciBmb3Igc2VjdXJpbmcgUkVTVCBBUEkgZW5kcG9pbnRzLlxuICpcbiAqIENyZWF0ZXMgYSBDb2duaXRvIFVzZXIgUG9vbCBhbmQgaW50ZWdyYXRlcyB3aXRoIEFQSSBHYXRld2F5IFJFU1QgQVBJXG4gKiB1c2luZyB0aGUgbmF0aXZlIENPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVyIHR5cGUuIENsaWVudHMgc2VuZFxuICogSldUIHRva2VucyBpbiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gKlxuICogIyMgRmVhdHVyZXNcbiAqXG4gKiAtICoqTmF0aXZlIEpXVCBWYWxpZGF0aW9uKio6IEFQSSBHYXRld2F5IHZhbGlkYXRlcyB0b2tlbnMgd2l0aG91dCBjdXN0b20gTGFtYmRhXG4gKiAtICoqVXNlciBNYW5hZ2VtZW50Kio6IEJ1aWx0LWluIHVzZXIgcmVnaXN0cmF0aW9uIGFuZCBtYW5hZ2VtZW50XG4gKiAtICoqUGFzc3dvcmQgUG9saWNpZXMqKjogRW5mb3JjZXMgc3Ryb25nIHBhc3N3b3JkIHJlcXVpcmVtZW50c1xuICogLSAqKkFjY291bnQgUmVjb3ZlcnkqKjogRW1haWwtYmFzZWQgYWNjb3VudCByZWNvdmVyeVxuICpcbiAqICMjIFVzYWdlXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbiAqIGltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG4gKiBpbXBvcnQgeyBJbnRlcmFjdGl2ZUFnZW50LCBDb2duaXRvQXV0aGVudGljYXRvciB9IGZyb20gJ0BjZGtsYWJzL2Nkay1hcHBtb2QtY2F0YWxvZy1ibHVlcHJpbnRzJztcbiAqXG4gKiBjb25zdCBteVByb21wdCA9IG5ldyBBc3NldCh0aGlzLCAnUHJvbXB0JywgeyBwYXRoOiAnLi9wcm9tcHQudHh0JyB9KTtcbiAqIGNvbnN0IGF1dGhlbnRpY2F0b3IgPSBuZXcgQ29nbml0b0F1dGhlbnRpY2F0b3Ioe1xuICogICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTlxuICogfSk7XG4gKlxuICogY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudCh0aGlzLCAnQWdlbnQnLCB7XG4gKiAgIGFnZW50TmFtZTogJ0NoYXRBZ2VudCcsXG4gKiAgIGFnZW50RGVmaW5pdGlvbjogeyBiZWRyb2NrTW9kZWw6IHt9LCBzeXN0ZW1Qcm9tcHQ6IG15UHJvbXB0IH0sXG4gKiAgIGF1dGhlbnRpY2F0b3JcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2duaXRvQXV0aGVudGljYXRvciBpbXBsZW1lbnRzIElBdXRoZW50aWNhdG9yIHtcbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIFVzZXIgUG9vbC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbD86IFVzZXJQb29sO1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBVc2VyIFBvb2wgQ2xpZW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sQ2xpZW50PzogVXNlclBvb2xDbGllbnQ7XG5cbiAgcHJpdmF0ZSBzY29wZT86IENvbnN0cnVjdDtcbiAgcHJpdmF0ZSByZWFkb25seSByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDb2duaXRvQXV0aGVudGljYXRvclByb3BzID0ge30pIHtcbiAgICB0aGlzLnVzZXJQb29sID0gcHJvcHMudXNlclBvb2w7XG4gICAgdGhpcy51c2VyUG9vbENsaWVudCA9IHByb3BzLnVzZXJQb29sQ2xpZW50O1xuICAgIHRoaXMucmVtb3ZhbFBvbGljeSA9IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IGF1dGhlbnRpY2F0aW9uIHBlcm1pc3Npb25zIHRvIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gdmVyaWZ5IENvZ25pdG8gdG9rZW5zLlxuICAgKi9cbiAgZ3JhbnRBdXRoZW50aWNhdGUobGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zY29wZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2duaXRvQXV0aGVudGljYXRvciBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggYSBzY29wZSBiZWZvcmUgY2FsbGluZyBncmFudEF1dGhlbnRpY2F0ZScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy51c2VyUG9vbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIFBvb2wgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSBncmFudGluZyBwZXJtaXNzaW9ucy4gQ2FsbCBfc2V0U2NvcGUgZmlyc3QuJyk7XG4gICAgfVxuXG4gICAgbGFtYmRhRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2NvZ25pdG8taWRwOkdldFVzZXInLFxuICAgICAgICAgICdjb2duaXRvLWlkcDpBZG1pbkdldFVzZXInLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFt0aGlzLnVzZXJQb29sLnVzZXJQb29sQXJuXSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgTGFtYmRhIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBlbnZpcm9ubWVudFZhcmlhYmxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4ge1xuICAgICAgQVVUSF9UWVBFOiAnQ29nbml0bycsXG4gICAgICBVU0VSX1BPT0xfSUQ6IHRoaXMudXNlclBvb2w/LnVzZXJQb29sSWQgfHwgJycsXG4gICAgICBVU0VSX1BPT0xfQ0xJRU5UX0lEOiB0aGlzLnVzZXJQb29sQ2xpZW50Py51c2VyUG9vbENsaWVudElkIHx8ICcnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYXV0aGVudGljYXRvciB3aXRoIGEgQ0RLIHNjb3BlLlxuICAgKiBDcmVhdGVzIFVzZXIgUG9vbCBhbmQgQ2xpZW50IGlmIG5vdCBwcm92aWRlZC5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3NldFNjb3BlKHNjb3BlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG5cbiAgICBpZiAoIXRoaXMudXNlclBvb2wpIHtcbiAgICAgICh0aGlzIGFzIGFueSkudXNlclBvb2wgPSBuZXcgVXNlclBvb2woc2NvcGUsICdVc2VyUG9vbCcsIHtcbiAgICAgICAgdXNlclBvb2xOYW1lOiBgJHtTdGFjay5vZihzY29wZSkuc3RhY2tOYW1lfS1Vc2VyUG9vbGAsXG4gICAgICAgIHNlbGZTaWduVXBFbmFibGVkOiB0cnVlLFxuICAgICAgICBzaWduSW5BbGlhc2VzOiB7XG4gICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgdXNlcm5hbWU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9WZXJpZnk6IHtcbiAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFzc3dvcmRQb2xpY3k6IHtcbiAgICAgICAgICBtaW5MZW5ndGg6IDgsXG4gICAgICAgICAgcmVxdWlyZUxvd2VyY2FzZTogdHJ1ZSxcbiAgICAgICAgICByZXF1aXJlVXBwZXJjYXNlOiB0cnVlLFxuICAgICAgICAgIHJlcXVpcmVEaWdpdHM6IHRydWUsXG4gICAgICAgICAgcmVxdWlyZVN5bWJvbHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIG1mYTogTWZhLk9QVElPTkFMLFxuICAgICAgICBtZmFTZWNvbmRGYWN0b3I6IHtcbiAgICAgICAgICBzbXM6IHRydWUsXG4gICAgICAgICAgb3RwOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBhY2NvdW50UmVjb3Zlcnk6IEFjY291bnRSZWNvdmVyeS5FTUFJTF9PTkxZLFxuICAgICAgICByZW1vdmFsUG9saWN5OiB0aGlzLnJlbW92YWxQb2xpY3ksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudXNlclBvb2xDbGllbnQgJiYgdGhpcy51c2VyUG9vbCkge1xuICAgICAgKHRoaXMgYXMgYW55KS51c2VyUG9vbENsaWVudCA9IG5ldyBVc2VyUG9vbENsaWVudChzY29wZSwgJ1VzZXJQb29sQ2xpZW50Jywge1xuICAgICAgICB1c2VyUG9vbDogdGhpcy51c2VyUG9vbCxcbiAgICAgICAgdXNlclBvb2xDbGllbnROYW1lOiBgJHtTdGFjay5vZihzY29wZSkuc3RhY2tOYW1lfS1Vc2VyUG9vbENsaWVudGAsXG4gICAgICAgIGF1dGhGbG93czoge1xuICAgICAgICAgIHVzZXJQYXNzd29yZDogdHJ1ZSxcbiAgICAgICAgICB1c2VyU3JwOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZVNlY3JldDogZmFsc2UsXG4gICAgICAgIHN1cHBvcnRlZElkZW50aXR5UHJvdmlkZXJzOiBbXG4gICAgICAgICAgVXNlclBvb2xDbGllbnRJZGVudGl0eVByb3ZpZGVyLkNPR05JVE8sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJhdGVneSBpbnRlcmZhY2UgZm9yIHNlc3Npb24gaW5kZXggc3RvcmFnZS5cbiAqXG4gKiBTZXNzaW9uIGluZGV4ZXMgcHJvdmlkZSBmYXN0IHVzZXIgdG8gc2Vzc2lvbiBsb29rdXBzIGZvciBsaXN0aW5nIGFuZCBtYW5hZ2luZyBzZXNzaW9ucy5cbiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIChEeW5hbW9EQlNlc3Npb25JbmRleCkgdXNlcyBEeW5hbW9EQiBmb3IgZWZmaWNpZW50IHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNlc3Npb25JbmRleCB7XG4gIC8qKlxuICAgKiBHcmFudCByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHRvIGEgZ3JhbnRlZS5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgcHJpbmNpcGFsIHRoYXQgbmVlZHMgYWNjZXNzIHRvIHRoZSBzZXNzaW9uIGluZGV4XG4gICAqL1xuICBncmFudFJlYWRXcml0ZShncmFudGVlOiBJR3JhbnRhYmxlKTogdm9pZDtcblxuICAvKipcbiAgICogR2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgTGFtYmRhIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBjb25maWd1cmUgdGhlIHNlc3Npb24gaW5kZXhcbiAgICovXG4gIGVudmlyb25tZW50VmFyaWFibGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBEeW5hbW9EQlNlc3Npb25JbmRleC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEeW5hbW9EQlNlc3Npb25JbmRleFByb3BzIHtcbiAgLyoqXG4gICAqIEV4aXN0aW5nIER5bmFtb0RCIHRhYmxlIHRvIHVzZS5cbiAgICogVGFibGUgbXVzdCBoYXZlIHBhcnRpdGlvbiBrZXkgJ3VzZXJfaWQnIChTdHJpbmcpIGFuZCBzb3J0IGtleSAnc2Vzc2lvbl9pZCcgKFN0cmluZykuXG4gICAqXG4gICAqIEBkZWZhdWx0IEF1dG8tY3JlYXRlZCB0YWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGU/OiBJVGFibGU7XG5cbiAgLyoqXG4gICAqIFRpbWUtdG8tbGl2ZSBmb3Igc2Vzc2lvbiBpbmRleCByZWNvcmRzLlxuICAgKiBXaGVuIHNldCwgZXhwaXJlZCByZWNvcmRzIGFyZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYnkgRHluYW1vREIgVFRMLlxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBUVEwgKHNlc3Npb25zIHBlcnNpc3QgdW50aWwgZXhwbGljaXRseSBkZWxldGVkKVxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvblRUTD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBLTVMga2V5IGZvciB0YWJsZSBlbmNyeXB0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBV1MgbWFuYWdlZCBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5PzogSUtleTtcblxuICAvKipcbiAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIHRoZSBEeW5hbW9EQiB0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuLyoqXG4gKiBEeW5hbW9EQi1iYXNlZCBzZXNzaW9uIGluZGV4IGZvciBmYXN0IHVzZXIgdG8gc2Vzc2lvbiBsb29rdXBzLlxuICpcbiAqIENyZWF0ZXMgYSBEeW5hbW9EQiB0YWJsZSBpbmRleGVkIGJ5IHVzZXJfaWQgKHBhcnRpdGlvbiBrZXkpIGFuZCBzZXNzaW9uX2lkIChzb3J0IGtleSlcbiAqIGZvciBlZmZpY2llbnQgcXVlcnlpbmcgb2YgYSB1c2VyJ3Mgc2Vzc2lvbnMuIFRoZSB0YWJsZSBzdG9yZXMgc2Vzc2lvbiBtZXRhZGF0YVxuICogaW5jbHVkaW5nIGNyZWF0aW9uIHRpbWUsIGxhc3QgdXBkYXRlIHRpbWUsIGFuZCBvcHRpb25hbCBUVEwgZm9yIGF1dG9tYXRpYyBjbGVhbnVwLlxuICpcbiAqICMjIFRhYmxlIFNjaGVtYVxuICpcbiAqIC0gKipQYXJ0aXRpb24gS2V5Kio6IHVzZXJfaWQgKFN0cmluZykgLSBVc2VyIGlkZW50aWZpZXIgZnJvbSBhdXRoZW50aWNhdGlvblxuICogLSAqKlNvcnQgS2V5Kio6IHNlc3Npb25faWQgKFN0cmluZykgLSBVbmlxdWUgc2Vzc2lvbiBpZGVudGlmaWVyXG4gKiAtICoqQXR0cmlidXRlcyoqOiBjcmVhdGVkX2F0LCB1cGRhdGVkX2F0LCBsYXN0X21lc3NhZ2UsIGV4cGlyZXNfYXQgKG9wdGlvbmFsKVxuICpcbiAqICMjIEZlYXR1cmVzXG4gKlxuICogLSAqKkZhc3QgTG9va3VwcyoqOiBRdWVyeSBhbGwgc2Vzc2lvbnMgZm9yIGEgdXNlciBpbiBPKDEpIHVzaW5nIHBhcnRpdGlvbiBrZXlcbiAqIC0gKipBdXRvbWF0aWMgRXhwaXJhdGlvbioqOiBPcHRpb25hbCBUVEwgcmVtb3ZlcyBzdGFsZSBzZXNzaW9ucyBhdXRvbWF0aWNhbGx5XG4gKiAtICoqT24tRGVtYW5kIENhcGFjaXR5Kio6IFBheS1wZXItcmVxdWVzdCBiaWxsaW5nLCBubyBjYXBhY2l0eSBwbGFubmluZyBuZWVkZWRcbiAqIC0gKipFbmNyeXB0aW9uKio6IEFXUyBtYW5hZ2VkIG9yIGN1c3RvbWVyLW1hbmFnZWQgS01TIGVuY3J5cHRpb25cbiAqXG4gKiAjIyBVc2FnZVxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG4gKiBpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbiAqIGltcG9ydCB7IEludGVyYWN0aXZlQWdlbnQsIER5bmFtb0RCU2Vzc2lvbkluZGV4IH0gZnJvbSAnQGNka2xhYnMvY2RrLWFwcG1vZC1jYXRhbG9nLWJsdWVwcmludHMnO1xuICpcbiAqIGNvbnN0IG15UHJvbXB0ID0gbmV3IEFzc2V0KHRoaXMsICdQcm9tcHQnLCB7IHBhdGg6ICcuL3Byb21wdC50eHQnIH0pO1xuICogY29uc3Qgc2Vzc2lvbkluZGV4ID0gbmV3IER5bmFtb0RCU2Vzc2lvbkluZGV4KHRoaXMsICdTZXNzaW9uSW5kZXgnLCB7XG4gKiAgIHNlc3Npb25UVEw6IER1cmF0aW9uLmRheXMoNylcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQodGhpcywgJ0FnZW50Jywge1xuICogICBhZ2VudE5hbWU6ICdDaGF0QWdlbnQnLFxuICogICBhZ2VudERlZmluaXRpb246IHsgYmVkcm9ja01vZGVsOiB7fSwgc3lzdGVtUHJvbXB0OiBteVByb21wdCB9LFxuICogICBzZXNzaW9uSW5kZXhcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBEeW5hbW9EQlNlc3Npb25JbmRleCBpbXBsZW1lbnRzIElTZXNzaW9uSW5kZXgge1xuICAvKipcbiAgICogVGhlIER5bmFtb0RCIHRhYmxlIHVzZWQgZm9yIHNlc3Npb24gaW5kZXggc3RvcmFnZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWJsZTogSVRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vzc2lvbiBUVEwgZHVyYXRpb24gKGlmIGNvbmZpZ3VyZWQpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlc3Npb25UVEw/OiBEdXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRHluYW1vREJTZXNzaW9uSW5kZXhQcm9wcyA9IHt9KSB7XG4gICAgY29uc3QgcmVtb3ZhbFBvbGljeSA9IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZO1xuXG4gICAgLy8gVXNlIHByb3ZpZGVkIHRhYmxlIG9yIGNyZWF0ZSBuZXcgb25lXG4gICAgaWYgKHByb3BzLnRhYmxlKSB7XG4gICAgICB0aGlzLnRhYmxlID0gcHJvcHMudGFibGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRhYmxlUHJvcHM6IGFueSA9IHtcbiAgICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6ICd1c2VyX2lkJywgdHlwZTogQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgICAgc29ydEtleTogeyBuYW1lOiAnc2Vzc2lvbl9pZCcsIHR5cGU6IEF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICAgIGJpbGxpbmdNb2RlOiBCaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QsXG4gICAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb25LZXkgPyBUYWJsZUVuY3J5cHRpb24uQ1VTVE9NRVJfTUFOQUdFRCA6IFRhYmxlRW5jcnlwdGlvbi5BV1NfTUFOQUdFRCxcbiAgICAgICAgZW5jcnlwdGlvbktleTogcHJvcHMuZW5jcnlwdGlvbktleSxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogcmVtb3ZhbFBvbGljeSxcbiAgICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeTogdHJ1ZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1WaWV3VHlwZS5ORVdfQU5EX09MRF9JTUFHRVMsXG4gICAgICB9O1xuXG4gICAgICAvLyBFbmFibGUgVFRMIGlmIHNlc3Npb25UVEwgaXMgc3BlY2lmaWVkXG4gICAgICBpZiAocHJvcHMuc2Vzc2lvblRUTCkge1xuICAgICAgICB0YWJsZVByb3BzLnRpbWVUb0xpdmVBdHRyaWJ1dGUgPSAnZXhwaXJlc19hdCc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGFibGUgPSBuZXcgVGFibGUoc2NvcGUsIGAke2lkfVRhYmxlYCwgdGFibGVQcm9wcyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXNzaW9uVFRMID0gcHJvcHMuc2Vzc2lvblRUTDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHRvIGEgZ3JhbnRlZS5cbiAgICovXG4gIGdyYW50UmVhZFdyaXRlKGdyYW50ZWU6IElHcmFudGFibGUpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShncmFudGVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBMYW1iZGEgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGVudmlyb25tZW50VmFyaWFibGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFNFU1NJT05fSU5ERVhfVEFCTEU6IHRoaXMudGFibGUudGFibGVOYW1lLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zZXNzaW9uVFRMKSB7XG4gICAgICBlbnYuU0VTU0lPTl9JTkRFWF9UVExfU0VDT05EUyA9IHRoaXMuc2Vzc2lvblRUTC50b1NlY29uZHMoKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnY7XG4gIH1cbn1cblxuLyoqXG4gKiBOby1hdXRoZW50aWNhdGlvbiBhdXRoZW50aWNhdG9yIGZvciBkZXZlbG9wbWVudCBhbmQgdGVzdGluZy5cbiAqXG4gKiBEaXNhYmxlcyBhdXRoZW50aWNhdGlvbiBlbnRpcmVseSwgYWxsb3dpbmcgYW55IGNsaWVudCB0byBjb25uZWN0XG4gKiB3aXRob3V0IGNyZWRlbnRpYWxzLiBUaGlzIHNob3VsZCBPTkxZIGJlIHVzZWQgZm9yIGRldmVsb3BtZW50XG4gKiBhbmQgdGVzdGluZyBlbnZpcm9ubWVudHMuXG4gKlxuICogIyMgU2VjdXJpdHkgV2FybmluZ1xuICpcbiAqIFRoaXMgYXV0aGVudGljYXRvciBwcm92aWRlcyBOTyBzZWN1cml0eS4gTmV2ZXIgdXNlIGluIHByb2R1Y3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBOb0F1dGhlbnRpY2F0b3IgaW1wbGVtZW50cyBJQXV0aGVudGljYXRvciB7XG4gIC8qKlxuICAgKiBOby1vcCBmb3IgTm9BdXRoZW50aWNhdG9yIHNpbmNlIG5vIGF1dGhlbnRpY2F0aW9uIGlzIHBlcmZvcm1lZC5cbiAgICovXG4gIGdyYW50QXV0aGVudGljYXRlKF9sYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uKTogdm9pZCB7XG4gICAgLy8gTm8gcGVybWlzc2lvbnMgbmVlZGVkXG4gIH1cblxuICAvKipcbiAgICogR2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgTGFtYmRhIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBlbnZpcm9ubWVudFZhcmlhYmxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4ge1xuICAgICAgQVVUSF9UWVBFOiAnTm9uZScsXG4gICAgfTtcbiAgfVxufVxuXG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwYXNzZWQgdG8gYSBob3N0aW5nIGFkYXB0ZXIncyBkZXBsb3kgbWV0aG9kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50SG9zdGluZ0NvbmZpZyB7XG4gIC8qKiBDREsgc2NvcGUgZm9yIGNyZWF0aW5nIHJlc291cmNlcy4gKi9cbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcbiAgLyoqIEFnZW50IG5hbWUgaWRlbnRpZmllci4gKi9cbiAgcmVhZG9ubHkgYWdlbnROYW1lOiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBmb3IgdGhlIGFnZW50IHJ1bnRpbWUuICovXG4gIHJlYWRvbmx5IGFnZW50Um9sZTogUm9sZTtcbiAgLyoqIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgb24gdGhlIHJ1bnRpbWUuICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogS01TIGVuY3J5cHRpb24ga2V5LiAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5OiBLZXk7XG4gIC8qKiBPcHRpb25hbCBWUEMgbmV0d29yayBjb25maWd1cmF0aW9uLiAqL1xuICByZWFkb25seSBuZXR3b3JrPzogTmV0d29yaztcbiAgLyoqIExhbWJkYSBhcmNoaXRlY3R1cmUgKExhbWJkYSBob3N0aW5nIG9ubHkpLiAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XG4gIC8qKiBMYW1iZGEgbWVtb3J5IHNpemUgaW4gTUIgKExhbWJkYSBob3N0aW5nIG9ubHkpLiAqL1xuICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyO1xuICAvKiogTGFtYmRhIHRpbWVvdXQgKExhbWJkYSBob3N0aW5nIG9ubHkpLiAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG4gIC8qKiBSZXNlcnZlZCBjb25jdXJyZW50IGV4ZWN1dGlvbnMgKExhbWJkYSBob3N0aW5nIG9ubHkpLiAqL1xuICByZWFkb25seSByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zPzogbnVtYmVyO1xuICAvKiogTGFtYmRhIGxheWVycyBmcm9tIGFnZW50IGRlZmluaXRpb24gKExhbWJkYSBob3N0aW5nIG9ubHkpLiAqL1xuICByZWFkb25seSBsYW1iZGFMYXllcnM/OiBJTGF5ZXJWZXJzaW9uW107XG4gIC8qKiBMYW1iZGEgbGF5ZXJzIGZyb20ga25vd2xlZGdlIGJhc2VzIChMYW1iZGEgaG9zdGluZyBvbmx5KS4gKi9cbiAgcmVhZG9ubHkga25vd2xlZGdlQmFzZUxheWVycz86IElMYXllclZlcnNpb25bXTtcbiAgLyoqIFdoZXRoZXIgb2JzZXJ2YWJpbGl0eSBpcyBlbmFibGVkLiAqL1xuICByZWFkb25seSBlbmFibGVPYnNlcnZhYmlsaXR5PzogYm9vbGVhbjtcbiAgLyoqIEFnZW50IHRvb2xzIGxvY2F0aW9uIGRlZmluaXRpb25zIChKU09OIHNlcmlhbGl6ZWQpLiAqL1xuICByZWFkb25seSB0b29sc0NvbmZpZzogc3RyaW5nO1xuICAvKiogU3lzdGVtIHByb21wdCBTMyBidWNrZXQgbmFtZS4gKi9cbiAgcmVhZG9ubHkgc3lzdGVtUHJvbXB0QnVja2V0OiBzdHJpbmc7XG4gIC8qKiBTeXN0ZW0gcHJvbXB0IFMzIGtleS4gKi9cbiAgcmVhZG9ubHkgc3lzdGVtUHJvbXB0S2V5OiBzdHJpbmc7XG4gIC8qKiBLbm93bGVkZ2UgYmFzZSBjb25maWdzIChKU09OIHNlcmlhbGl6ZWQpLiAqL1xuICByZWFkb25seSBrbm93bGVkZ2VCYXNlQ29uZmlncz86IHN0cmluZztcbiAgLyoqIEtub3dsZWRnZSBiYXNlIHN5c3RlbSBwcm9tcHQgYWRkaXRpb24uICovXG4gIHJlYWRvbmx5IGtub3dsZWRnZUJhc2VTeXN0ZW1Qcm9tcHRBZGRpdGlvbj86IHN0cmluZztcbiAgLyoqIFJlbW92YWwgcG9saWN5IGZvciByZXNvdXJjZXMuICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIFJlc3VsdCByZXR1cm5lZCBieSBhIGhvc3RpbmcgYWRhcHRlcidzIGRlcGxveSBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRIb3N0aW5nUmVzdWx0IHtcbiAgLyoqIFRoZSBhZ2VudCBlbmRwb2ludCBVUkwgb3IgQVJOLiAqL1xuICByZWFkb25seSBlbmRwb2ludDogc3RyaW5nO1xuICAvKiogVGhlIExhbWJkYSBmdW5jdGlvbiAoaWYgTGFtYmRhLWhvc3RlZCkuICovXG4gIHJlYWRvbmx5IGFnZW50RnVuY3Rpb24/OiBJRnVuY3Rpb247XG4gIC8qKiBUaGUgQWdlbnRDb3JlIENmblJ1bnRpbWUgKGlmIEFnZW50Q29yZS1ob3N0ZWQpLiAqL1xuICByZWFkb25seSBjZm5SdW50aW1lPzogQ2ZuUnVudGltZTtcbn1cblxuLyoqXG4gKiBTdHJhdGVneSBpbnRlcmZhY2UgZm9yIHBsdWdnYWJsZSBob3N0aW5nIGJhY2tlbmRzLlxuICpcbiAqIEhvc3RpbmcgYWRhcHRlcnMgZW5jYXBzdWxhdGUgdGhlIGluZnJhc3RydWN0dXJlIG5lZWRlZCB0byBydW4gYW4gYWdlbnQuXG4gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBgTGFtYmRhSG9zdGluZ0FkYXB0ZXJgIChMYW1iZGEgKyBMV0EgKyBBUEkgR2F0ZXdheSkuXG4gKiBgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyYCBwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSB1c2luZyBBZ2VudENvcmUgUnVudGltZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSG9zdGluZ0FkYXB0ZXIge1xuICAvKipcbiAgICogVGhlIElBTSBzZXJ2aWNlIHByaW5jaXBhbCB0aGF0IHRoaXMgaG9zdGluZyBiYWNrZW5kIHJlcXVpcmVzLlxuICAgKlxuICAgKiBCYXNlQWdlbnQgdXNlcyB0aGlzIHRvIGNyZWF0ZSB0aGUgYWdlbnQgcm9sZSB3aXRoIHRoZSBjb3JyZWN0IHRydXN0IHBvbGljeS5cbiAgICogRm9yIGV4YW1wbGUsIExhbWJkYSBob3N0aW5nIHJlcXVpcmVzIGBsYW1iZGEuYW1hem9uYXdzLmNvbWAgd2hpbGUgQWdlbnRDb3JlXG4gICAqIGhvc3RpbmcgcmVxdWlyZXMgYGJlZHJvY2stYWdlbnRjb3JlLmFtYXpvbmF3cy5jb21gLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZVByaW5jaXBhbDogU2VydmljZVByaW5jaXBhbDtcblxuICAvKipcbiAgICogRGVwbG95IHRoZSBhZ2VudCBob3N0aW5nIGluZnJhc3RydWN0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IGhvc3RpbmdcbiAgICogQHJldHVybnMgVGhlIGhvc3RpbmcgcmVzdWx0IGluY2x1ZGluZyBlbmRwb2ludCBhbmQgb3B0aW9uYWwgcmVzb3VyY2VzXG4gICAqL1xuICBkZXBsb3koY29uZmlnOiBBZ2VudEhvc3RpbmdDb25maWcpOiBBZ2VudEhvc3RpbmdSZXN1bHQ7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBMYW1iZGFIb3N0aW5nQWRhcHRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFIb3N0aW5nQWRhcHRlclByb3BzIHtcbiAgLyoqXG4gICAqIENvbW11bmljYXRpb24gYWRhcHRlciBmb3IgY2xpZW50LWFnZW50IGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTdHJlYW1pbmdIdHRwQWRhcHRlclxuICAgKi9cbiAgcmVhZG9ubHkgY29tbXVuaWNhdGlvbkFkYXB0ZXI/OiBJQ29tbXVuaWNhdGlvbkFkYXB0ZXI7XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0b3IgZm9yIHNlY3VyaW5nIEFQSSBlbmRwb2ludHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IENvZ25pdG9BdXRoZW50aWNhdG9yXG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdG9yPzogSUF1dGhlbnRpY2F0b3I7XG5cbiAgLyoqXG4gICAqIEhUVFAgbWV0aG9kcyB0byBhbGxvdyBpbiBDT1JTIHByZWZsaWdodCByZXNwb25zZXMuXG4gICAqIFVzZSB0aGlzIHRvIGVuYWJsZSBhZGRpdGlvbmFsIG1ldGhvZHMgKEdFVCwgREVMRVRFLCBQVVQpIGZvciBjdXN0b20gcm91dGVzXG4gICAqIGFkZGVkIHRvIHRoZSBSRVNUIEFQSS5cbiAgICpcbiAgICogQGRlZmF1bHQgWydQT1NUJywgJ09QVElPTlMnXVxuICAgKi9cbiAgcmVhZG9ubHkgY29yc0FsbG93TWV0aG9kcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZnVuY3Rpb24gbWVtb3J5IHNpemUgaW4gTUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwMjRcbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExhbWJkYSBmdW5jdGlvbiB0aW1lb3V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDE1KVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZnVuY3Rpb24gYXJjaGl0ZWN0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBcmNoaXRlY3R1cmUuWDg2XzY0XG4gICAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XG5cbiAgLyoqXG4gICAqIFJlc2VydmVkIGNvbmN1cnJlbnQgZXhlY3V0aW9ucyBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gcmVzZXJ2ZWQgY29uY3VycmVuY3lcbiAgICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTGFtYmRhIGhvc3RpbmcgYWRhcHRlciBmb3IgSW50ZXJhY3RpdmVBZ2VudC5cbiAqXG4gKiBEZXBsb3lzIHRoZSBhZ2VudCBhcyBhIExhbWJkYSBmdW5jdGlvbiBiZWhpbmQgTGFtYmRhIFdlYiBBZGFwdGVyIGFuZCBBUEkgR2F0ZXdheVxuICogUkVTVCBBUEkgd2l0aCByZXNwb25zZSBzdHJlYW1pbmcuIFRoaXMgaXMgdGhlIGRlZmF1bHQgaG9zdGluZyBiYWNrZW5kLlxuICpcbiAqICMjIEFyY2hpdGVjdHVyZVxuICpcbiAqIGBgYFxuICogQ2xpZW50IOKGkiBQT1NUIC9jaGF0IOKGkiBBUEkgR2F0ZXdheSBSRVNUIEFQSSAoU1RSRUFNKSDihpIgTGFtYmRhIChGYXN0QVBJICsgTFdBKSDihpIgQmVkcm9ja1xuICogQ2xpZW50IOKGkCBTU0Ugc3RyZWFtIOKGkCBBUEkgR2F0ZXdheSDihpAgTGFtYmRhIHJlc3BvbnNlIHN0cmVhbWluZyDihpAgQWdlbnQgdG9rZW5zXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYUhvc3RpbmdBZGFwdGVyIGltcGxlbWVudHMgSUhvc3RpbmdBZGFwdGVyIHtcbiAgLyoqIFRoZSBjb21tdW5pY2F0aW9uIGFkYXB0ZXIuICovXG4gIHB1YmxpYyByZWFkb25seSBjb21tdW5pY2F0aW9uQWRhcHRlcj86IElDb21tdW5pY2F0aW9uQWRhcHRlcjtcbiAgLyoqIFRoZSBhdXRoZW50aWNhdG9yLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0aGVudGljYXRvcj86IElBdXRoZW50aWNhdG9yO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IExhbWJkYUhvc3RpbmdBZGFwdGVyUHJvcHM7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IExhbWJkYUhvc3RpbmdBZGFwdGVyUHJvcHMgPSB7fSkge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgfVxuXG4gIGdldCBzZXJ2aWNlUHJpbmNpcGFsKCkgeyByZXR1cm4gbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyk7IH1cblxuICAvKipcbiAgICogRGVwbG95IExhbWJkYSArIExXQSArIEFQSSBHYXRld2F5IGhvc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gICAqL1xuICBkZXBsb3koY29uZmlnOiBBZ2VudEhvc3RpbmdDb25maWcpOiBBZ2VudEhvc3RpbmdSZXN1bHQge1xuICAgIGNvbnN0IHNjb3BlID0gY29uZmlnLnNjb3BlO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhdXRoZW50aWNhdG9yXG4gICAgY29uc3QgYXV0aGVudGljYXRvciA9IHRoaXMucHJvcHMuYXV0aGVudGljYXRvciAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHRoaXMucHJvcHMuYXV0aGVudGljYXRvclxuICAgICAgOiBuZXcgQ29nbml0b0F1dGhlbnRpY2F0b3IoKTtcbiAgICAodGhpcyBhcyBhbnkpLmF1dGhlbnRpY2F0b3IgPSBhdXRoZW50aWNhdG9yO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0b3IgaW5zdGFuY2VvZiBDb2duaXRvQXV0aGVudGljYXRvcikge1xuICAgICAgYXV0aGVudGljYXRvci5fc2V0U2NvcGUoc2NvcGUpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgY29tbXVuaWNhdGlvbiBhZGFwdGVyXG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMucHJvcHMuY29tbXVuaWNhdGlvbkFkYXB0ZXIgfHwgbmV3IFN0cmVhbWluZ0h0dHBBZGFwdGVyKHtcbiAgICAgIGF1dGhlbnRpY2F0b3IsXG4gICAgICBjb3JzQWxsb3dNZXRob2RzOiB0aGlzLnByb3BzLmNvcnNBbGxvd01ldGhvZHMsXG4gICAgfSk7XG4gICAgKHRoaXMgYXMgYW55KS5jb21tdW5pY2F0aW9uQWRhcHRlciA9IGFkYXB0ZXI7XG5cbiAgICBpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFN0cmVhbWluZ0h0dHBBZGFwdGVyKSB7XG4gICAgICBhZGFwdGVyLl9zZXRTY29wZShzY29wZSk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLi4uY29uZmlnLmVudmlyb25tZW50LFxuICAgICAgLy8gTGFtYmRhIFdlYiBBZGFwdGVyIGNvbmZpZ3VyYXRpb25cbiAgICAgIEFXU19MQU1CREFfRVhFQ19XUkFQUEVSOiAnL29wdC9ib290c3RyYXAnLFxuICAgICAgQVdTX0xXQV9JTlZPS0VfTU9ERTogJ3Jlc3BvbnNlX3N0cmVhbScsXG4gICAgICBBV1NfTFdBX1JFQURJTkVTU19DSEVDS19QQVRIOiAnL2hlYWx0aCcsXG4gICAgICBBV1NfTFdBX1BPUlQ6ICc4MDgwJyxcbiAgICAgIFBPUlQ6ICc4MDgwJyxcbiAgICAgIC4uLmF1dGhlbnRpY2F0b3IuZW52aXJvbm1lbnRWYXJpYWJsZXMoKSxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIExhbWJkYSBmdW5jdGlvbiB3aXRoIExhbWJkYSBXZWIgQWRhcHRlciBsYXllclxuICAgIGNvbnN0IHsgYWNjb3VudCwgcmVnaW9uIH0gPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdCA9IExhbWJkYUlhbVV0aWxzLmNyZWF0ZUxvZ3NQZXJtaXNzaW9ucyh7XG4gICAgICBhY2NvdW50LFxuICAgICAgcmVnaW9uLFxuICAgICAgc2NvcGUsXG4gICAgICBmdW5jdGlvbk5hbWU6IGNvbmZpZy5hZ2VudE5hbWUsXG4gICAgICBlbmFibGVPYnNlcnZhYmlsaXR5OiBjb25maWcuZW5hYmxlT2JzZXJ2YWJpbGl0eSxcbiAgICB9KTtcblxuICAgIC8vIExhbWJkYSBXZWIgQWRhcHRlciBsYXllclxuICAgIGNvbnN0IHdlYkFkYXB0ZXJMYXllciA9IExheWVyVmVyc2lvbi5mcm9tTGF5ZXJWZXJzaW9uQXJuKFxuICAgICAgc2NvcGUsXG4gICAgICAnTGFtYmRhV2ViQWRhcHRlckxheWVyJyxcbiAgICAgIGBhcm46YXdzOmxhbWJkYToke3JlZ2lvbn06NzUzMjQwNTk4MDc1OmxheWVyOkxhbWJkYUFkYXB0ZXJMYXllclg4NjoyNWAsXG4gICAgKTtcblxuICAgIGNvbnN0IGFsbExheWVyczogSUxheWVyVmVyc2lvbltdID0gW3dlYkFkYXB0ZXJMYXllcl07XG4gICAgaWYgKGNvbmZpZy5sYW1iZGFMYXllcnMpIHtcbiAgICAgIGFsbExheWVycy5wdXNoKC4uLmNvbmZpZy5sYW1iZGFMYXllcnMpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmtub3dsZWRnZUJhc2VMYXllcnMgJiYgY29uZmlnLmtub3dsZWRnZUJhc2VMYXllcnMubGVuZ3RoID4gMCkge1xuICAgICAgYWxsTGF5ZXJzLnB1c2goLi4uY29uZmlnLmtub3dsZWRnZUJhc2VMYXllcnMpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3Jlc291cmNlcy9pbnRlcmFjdGl2ZS1hZ2VudC1oYW5kbGVyJyk7XG5cbiAgICAvLyBBbGwgUHl0aG9uIHZlcnNpb24gcmVmZXJlbmNlcyBkZXJpdmVkIGZyb20gRGVmYXVsdFJ1bnRpbWVzLlBZVEhPTlxuICAgIGNvbnN0IHB5dGhvblJ1bnRpbWUgPSBEZWZhdWx0UnVudGltZXMuUFlUSE9OO1xuICAgIGNvbnN0IHB5VmVyc2lvbiA9IHB5dGhvblJ1bnRpbWUubmFtZS5yZXBsYWNlKCdweXRob24nLCAnJyk7IC8vIGUuZy4gXCIzLjEzXCJcblxuICAgIGNvbnN0IGFyY2hpdGVjdHVyZSA9IHRoaXMucHJvcHMuYXJjaGl0ZWN0dXJlIHx8IGNvbmZpZy5hcmNoaXRlY3R1cmUgfHwgQXJjaGl0ZWN0dXJlLlg4Nl82NDtcbiAgICBjb25zdCBtZW1vcnlTaXplID0gdGhpcy5wcm9wcy5tZW1vcnlTaXplIHx8IGNvbmZpZy5tZW1vcnlTaXplIHx8IDEwMjQ7XG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMucHJvcHMudGltZW91dCB8fCBjb25maWcudGltZW91dCB8fCBEdXJhdGlvbi5taW51dGVzKDE1KTtcbiAgICBjb25zdCByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zID0gdGhpcy5wcm9wcy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zID8/IGNvbmZpZy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zO1xuXG4gICAgY29uc3QgYWdlbnRGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihzY29wZSwgJ0ludGVyYWN0aXZlQWdlbnRGdW5jdGlvbicsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdC51bmlxdWVGdW5jdGlvbk5hbWUsXG4gICAgICBhcmNoaXRlY3R1cmUsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChoYW5kbGVyUGF0aCwge1xuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIGltYWdlOiBweXRob25SdW50aW1lLmJ1bmRsaW5nSW1hZ2UsXG4gICAgICAgICAgY29tbWFuZDogW1xuICAgICAgICAgICAgJ2Jhc2gnLCAnLWMnLFxuICAgICAgICAgICAgJ3BpcCBpbnN0YWxsIC1yIHJlcXVpcmVtZW50cy50eHQgLXQgL2Fzc2V0LW91dHB1dCAmJiBjcCAtYSAuIC9hc3NldC1vdXRwdXQnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgbG9jYWw6IHtcbiAgICAgICAgICAgIHRyeUJ1bmRsZShvdXRwdXREaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICAgICAgICAgICAgIGNvbnN0IHB5dGhvbkNhbmRpZGF0ZXMgPSBbYHB5dGhvbiR7cHlWZXJzaW9ufWAsICdweXRob24zJywgJ3B5dGhvbiddO1xuICAgICAgICAgICAgICAgIGxldCBweXRob25CaW4gPSAncHl0aG9uMyc7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgcHl0aG9uQ2FuZGlkYXRlcykge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVyID0gcHJvYy5leGVjU3luYyhgJHtjYW5kaWRhdGV9IC0tdmVyc2lvbiAyPiYxYCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdmVyLm1hdGNoKC9QeXRob24gKFxcZCspXFwuKFxcZCspLyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiAocGFyc2VJbnQobWF0Y2hbMV0pID4gMyB8fCAocGFyc2VJbnQobWF0Y2hbMV0pID09PSAzICYmIHBhcnNlSW50KG1hdGNoWzJdKSA+PSAxMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcHl0aG9uQmluID0gY2FuZGlkYXRlO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2MuZXhlY1N5bmMoXG4gICAgICAgICAgICAgICAgICBgJHtweXRob25CaW59IC1tIHBpcCBpbnN0YWxsIC1yIHJlcXVpcmVtZW50cy50eHQgLXQgXCIke291dHB1dERpcn1cIiAtLXBsYXRmb3JtIG1hbnlsaW51eDIwMTRfeDg2XzY0IC0tb25seS1iaW5hcnk9OmFsbDogLS1weXRob24tdmVyc2lvbiAke3B5VmVyc2lvbn1gLFxuICAgICAgICAgICAgICAgICAgeyBjd2Q6IGhhbmRsZXJQYXRoLCBzdGRpbzogJ2luaGVyaXQnIH0sXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwcm9jLmV4ZWNTeW5jKFxuICAgICAgICAgICAgICAgICAgYGNwIC1yIC4gXCIke291dHB1dERpcn1cImAsXG4gICAgICAgICAgICAgICAgICB7IGN3ZDogaGFuZGxlclBhdGgsIHN0ZGlvOiAnaW5oZXJpdCcgfSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgcm9sZTogY29uZmlnLmFnZW50Um9sZSxcbiAgICAgIGhhbmRsZXI6ICdydW4uc2gnLFxuICAgICAgcnVudGltZTogcHl0aG9uUnVudGltZSxcbiAgICAgIGxheWVyczogYWxsTGF5ZXJzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZW52aXJvbm1lbnRFbmNyeXB0aW9uOiBjb25maWcuZW5jcnlwdGlvbktleSxcbiAgICAgIHZwYzogY29uZmlnLm5ldHdvcmsgPyBjb25maWcubmV0d29yay52cGMgOiB1bmRlZmluZWQsXG4gICAgICB2cGNTdWJuZXRzOiBjb25maWcubmV0d29yayA/IGNvbmZpZy5uZXR3b3JrLmFwcGxpY2F0aW9uU3VibmV0U2VsZWN0aW9uKCkgOiB1bmRlZmluZWQsXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgbG9nIHBlcm1pc3Npb25zXG4gICAgZm9yIChjb25zdCBzIG9mIGFnZW50TGFtYmRhTG9nUGVybWlzc2lvbnNSZXN1bHQucG9saWN5U3RhdGVtZW50cykge1xuICAgICAgY29uZmlnLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzKTtcbiAgICB9XG5cbiAgICAvLyBHcmFudCBhdXRoZW50aWNhdG9yIHBlcm1pc3Npb25zXG4gICAgaWYgKGF1dGhlbnRpY2F0b3IpIHtcbiAgICAgIGF1dGhlbnRpY2F0b3IuZ3JhbnRBdXRoZW50aWNhdGUoYWdlbnRGdW5jdGlvbik7XG4gICAgfVxuXG4gICAgLy8gQXR0YWNoIGNvbW11bmljYXRpb24gYWRhcHRlciBhbmQgZ2V0IGVuZHBvaW50XG4gICAgY29uc3QgZW5kcG9pbnQgPSBhZGFwdGVyLmF0dGFjaFRvRnVuY3Rpb24oYWdlbnRGdW5jdGlvbik7XG4gICAgYWRhcHRlci5ncmFudEludm9rZShhZ2VudEZ1bmN0aW9uKTtcblxuICAgIHJldHVybiB7IGVuZHBvaW50LCBhZ2VudEZ1bmN0aW9uIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDdXN0b20gSldUIGF1dGhvcml6ZXIgY29uZmlndXJhdGlvbiBmb3IgQWdlbnRDb3JlIFJ1bnRpbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRDb3JlSnd0QXV0aG9yaXplckNvbmZpZyB7XG4gIC8qKiBPSURDIGRpc2NvdmVyeSBVUkwuICovXG4gIHJlYWRvbmx5IGRpc2NvdmVyeVVybDogc3RyaW5nO1xuICAvKiogQWxsb3dlZCBhdWRpZW5jZXMuICovXG4gIHJlYWRvbmx5IGFsbG93ZWRBdWRpZW5jZT86IHN0cmluZ1tdO1xuICAvKiogQWxsb3dlZCBjbGllbnQgSURzLiAqL1xuICByZWFkb25seSBhbGxvd2VkQ2xpZW50cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyLlxuICovXG4vKipcbiAqIE5ldHdvcmsgbW9kZSBmb3IgQWdlbnRDb3JlIFJ1bnRpbWUgaG9zdGluZy5cbiAqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIEFnZW50Q29yZSBSdW50aW1lIHJ1bnMgb24gdGhlIHB1YmxpYyBpbnRlcm5ldFxuICogb3IgaW5zaWRlIGEgVlBDIHdpdGggcHJpdmF0ZSBuZXR3b3JraW5nLlxuICovXG5leHBvcnQgZW51bSBOZXR3b3JrTW9kZSB7XG4gIC8qKlxuICAgKiBSdW50aW1lIGlzIHB1YmxpY2x5IGFjY2Vzc2libGUgKGRlZmF1bHQpLlxuICAgKiBObyBWUEMgY29uZmlndXJhdGlvbiByZXF1aXJlZC5cbiAgICovXG4gIFBVQkxJQyA9ICdQVUJMSUMnLFxuXG4gIC8qKlxuICAgKiBSdW50aW1lIHJ1bnMgaW5zaWRlIGEgVlBDLlxuICAgKlxuICAgKiBBZ2VudENvcmUgY3JlYXRlcyBFTklzIGluIHRoZSBzcGVjaWZpZWQgc3VibmV0cy4gWW91IG11c3QgcHJvdmlkZVxuICAgKiBlaXRoZXIgZXhwbGljaXQgYHZwY1N1Ym5ldHNgIGFuZCBgc2VjdXJpdHlHcm91cHNgLCBvciBwYXNzIGFcbiAgICogYE5ldHdvcmtgIGNvbnN0cnVjdCB2aWEgYEludGVyYWN0aXZlQWdlbnQubmV0d29ya2AuXG4gICAqXG4gICAqIFVzZSBwcml2YXRlIHN1Ym5ldHMgd2l0aCBhIE5BVCBHYXRld2F5IGZvciBpbnRlcm5ldCBhY2Nlc3MuXG4gICAqIFB1YmxpYyBzdWJuZXRzIGRvIE5PVCBwcm92aWRlIGludGVybmV0IGFjY2VzcyB0byBBZ2VudENvcmUgRU5Jcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2FnZW50Y29yZS12cGMuaHRtbFxuICAgKi9cbiAgVlBDID0gJ1ZQQycsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyUHJvcHMge1xuICAvKipcbiAgICogRUNSIGNvbnRhaW5lciBpbWFnZSBVUkkuIElmIG5vdCBwcm92aWRlZCwgYnVpbGRzIGZyb20gdGhlIGJ1bmRsZWQgaGFuZGxlciBzb3VyY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IEJ1aWxkcyBmcm9tIGFnZW50Y29yZS1hZ2VudC1oYW5kbGVyIGRpcmVjdG9yeVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVySW1hZ2VVcmk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5ldHdvcmsgbW9kZSBmb3IgdGhlIEFnZW50Q29yZSBSdW50aW1lLlxuICAgKlxuICAgKiBXaGVuIHNldCB0byBgTmV0d29ya01vZGUuVlBDYCwgdGhlIHJ1bnRpbWUgcnVucyBpbnNpZGUgYSBWUEMgYW5kIEFnZW50Q29yZSBjcmVhdGVzXG4gICAqIEVOSXMgaW4gdGhlIHNwZWNpZmllZCBzdWJuZXRzLiBZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBleHBsaWNpdCBgdnBjU3VibmV0c2BcbiAgICogYW5kIGBzZWN1cml0eUdyb3Vwc2AsIG9yIHBhc3MgYSBgTmV0d29ya2AgY29uc3RydWN0IHZpYSBgQWdlbnRIb3N0aW5nQ29uZmlnLm5ldHdvcmtgXG4gICAqICh3aGljaCBpcyBzZXQgYXV0b21hdGljYWxseSBieSBgSW50ZXJhY3RpdmVBZ2VudGAgd2hlbiBgbmV0d29ya2AgaXMgcHJvdmlkZWQpLlxuICAgKlxuICAgKiBGb3IgVlBDIG1vZGUsIHVzZSBwcml2YXRlIHN1Ym5ldHMgd2l0aCBhIE5BVCBHYXRld2F5IGZvciBpbnRlcm5ldCBhY2Nlc3MuXG4gICAqIFB1YmxpYyBzdWJuZXRzIGRvIE5PVCBwcm92aWRlIGludGVybmV0IGFjY2VzcyB0byBBZ2VudENvcmUgRU5Jcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2FnZW50Y29yZS12cGMuaHRtbFxuICAgKiBAZGVmYXVsdCBOZXR3b3JrTW9kZS5QVUJMSUNcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtNb2RlPzogTmV0d29ya01vZGU7XG5cbiAgLyoqXG4gICAqIFN1Ym5ldCBzZWxlY3Rpb24gZm9yIFZQQyBuZXR3b3JrIG1vZGUuXG4gICAqXG4gICAqIFNlbGVjdHMgd2hpY2ggc3VibmV0cyB0aGUgQWdlbnRDb3JlIFJ1bnRpbWUgRU5JcyBhcmUgcGxhY2VkIGluLlxuICAgKiBSZXF1aXJlcyBhIFZQQyB0byBiZSBwcm92aWRlZCB2aWEgYEFnZW50SG9zdGluZ0NvbmZpZy5uZXR3b3JrYFxuICAgKiAoc2V0IGF1dG9tYXRpY2FsbHkgYnkgYEludGVyYWN0aXZlQWdlbnRgIHdoZW4gYG5ldHdvcmtgIGlzIHByb3ZpZGVkKVxuICAgKiBzbyB0aGF0IHN1Ym5ldHMgY2FuIGJlIHJlc29sdmVkLlxuICAgKlxuICAgKiBCZXN0IHByYWN0aWNlIGlzIHRvIHNlbGVjdCBwcml2YXRlIHN1Ym5ldHMgd2l0aCBhIE5BVCBHYXRld2F5XG4gICAqIGluIGF0IGxlYXN0IDIgQXZhaWxhYmlsaXR5IFpvbmVzLiBNYXhpbXVtIDE2IHN1Ym5ldHMuXG4gICAqXG4gICAqIFdoZW4gYm90aCBgdnBjU3VibmV0c2AgYW5kIGBBZ2VudEhvc3RpbmdDb25maWcubmV0d29ya2AgYXJlIHByb3ZpZGVkLFxuICAgKiBgdnBjU3VibmV0c2AgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBuZXR3b3JrJ3MgZGVmYXVsdCBhcHBsaWNhdGlvbiBzdWJuZXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlcml2ZWQgZnJvbSBBZ2VudEhvc3RpbmdDb25maWcubmV0d29yay5hcHBsaWNhdGlvblN1Ym5ldFNlbGVjdGlvbigpIGlmIGF2YWlsYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXBzIGZvciBWUEMgbmV0d29yayBtb2RlLlxuICAgKlxuICAgKiBBdHRhY2hlZCB0byB0aGUgQWdlbnRDb3JlIFJ1bnRpbWUgRU5Jcy4gTWF4aW11bSAxNiBzZWN1cml0eSBncm91cHMuXG4gICAqXG4gICAqIFdoZW4gYm90aCBgc2VjdXJpdHlHcm91cHNgIGFuZCBgQWdlbnRIb3N0aW5nQ29uZmlnLm5ldHdvcmtgIGFyZSBwcm92aWRlZCxcbiAgICogYHNlY3VyaXR5R3JvdXBzYCB0YWtlcyBwcmVjZWRlbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHNlY3VyaXR5IGdyb3VwIGFsbG93aW5nIGFsbCBvdXRib3VuZCB0cmFmZmljIGlzIGNyZWF0ZWRcbiAgICogZnJvbSBBZ2VudEhvc3RpbmdDb25maWcubmV0d29yayBpZiBhdmFpbGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogQ3VzdG9tIEpXVCBhdXRob3JpemVyIGNvbmZpZ3VyYXRpb24uXG4gICAqIE9taXQgZm9yIElBTS1vbmx5IGF1dGguXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Kd3RBdXRob3JpemVyPzogQWdlbnRDb3JlSnd0QXV0aG9yaXplckNvbmZpZztcblxuICAvKipcbiAgICogUHJvdG9jb2wgY29uZmlndXJhdGlvbjogJ0hUVFAnIHwgJ01DUCcgfCAnQTJBJy5cbiAgICpcbiAgICogQGRlZmF1bHQgJ0hUVFAnXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgZW5kcG9pbnQgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0by1nZW5lcmF0ZWQgZnJvbSBhZ2VudCBuYW1lXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludE5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQWdlbnRDb3JlIFJ1bnRpbWUgaG9zdGluZyBhZGFwdGVyIGZvciBJbnRlcmFjdGl2ZUFnZW50LlxuICpcbiAqIERlcGxveXMgdGhlIGFnZW50IGFzIGEgY29udGFpbmVyIHJ1bm5pbmcgb24gQWdlbnRDb3JlIFJ1bnRpbWUgKG1pY3JvVk0pLlxuICogVXNlcyBMMSBjb25zdHJ1Y3RzIGBDZm5SdW50aW1lYCBhbmQgYENmblJ1bnRpbWVFbmRwb2ludGAgZnJvbVxuICogYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYC5cbiAqXG4gKiAjIyBBcmNoaXRlY3R1cmVcbiAqXG4gKiBgYGBcbiAqIENsaWVudCDihpIgQWdlbnRDb3JlIFJ1bnRpbWUgRW5kcG9pbnQg4oaSIENvbnRhaW5lciAoRmFzdEFQSSBvbiBwb3J0IDgwODApIOKGkiBCZWRyb2NrXG4gKiBgYGBcbiAqXG4gKiAjIyBGZWF0dXJlc1xuICpcbiAqIC0gKipTZXNzaW9uIElzb2xhdGlvbioqOiBtaWNyb1ZNIHByb3ZpZGVzIHBlci1zZXNzaW9uIGlzb2xhdGlvbiAobm8gUzMgc2Vzc2lvbiBidWNrZXQgbmVlZGVkKVxuICogLSAqKk1hbmFnZWQgSW5mcmFzdHJ1Y3R1cmUqKjogTm8gTGFtYmRhIGNvbGQgc3RhcnRzIG9yIHRpbWVvdXQgbGltaXRzXG4gKiAtICoqTXVsdGlwbGUgUHJvdG9jb2xzKio6IEhUVFAsIE1DUCwgb3IgQTJBIHByb3RvY29sIHN1cHBvcnRcbiAqIC0gKipDb250YWluZXItQmFzZWQqKjogU3RhbmRhcmQgRG9ja2VyIGltYWdlIGRlcGxveW1lbnRcbiAqIC0gKipWUEMgU3VwcG9ydCoqOiBSdW4gaW5zaWRlIGEgVlBDIHdpdGggcHJpdmF0ZSBzdWJuZXRzIGZvciBuZXR3b3JrIGlzb2xhdGlvblxuICpcbiAqICMjIFVzYWdlXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbiAqIGltcG9ydCB7IEludGVyYWN0aXZlQWdlbnQsIEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlciwgTmV0d29ya01vZGUgfSBmcm9tICdAY2RrbGFicy9jZGstYXBwbW9kLWNhdGFsb2ctYmx1ZXByaW50cyc7XG4gKlxuICogZGVjbGFyZSBjb25zdCBteVByb21wdDogQXNzZXQ7XG4gKlxuICogbmV3IEludGVyYWN0aXZlQWdlbnQodGhpcywgJ0FnZW50Jywge1xuICogICBhZ2VudE5hbWU6ICdNeUNoYXRib3QnLFxuICogICBhZ2VudERlZmluaXRpb246IHsgYmVkcm9ja01vZGVsOiB7fSwgc3lzdGVtUHJvbXB0OiBteVByb21wdCB9LFxuICogICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gKiAgICAgbmV0d29ya01vZGU6IE5ldHdvcmtNb2RlLlBVQkxJQyxcbiAqICAgfSksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyIGltcGxlbWVudHMgSUhvc3RpbmdBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyUHJvcHM7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlclByb3BzID0ge30pIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICBnZXQgc2VydmljZVByaW5jaXBhbCgpIHsgcmV0dXJuIG5ldyBTZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyk7IH1cblxuICAvKipcbiAgICogRGVwbG95IEFnZW50Q29yZSBSdW50aW1lIGhvc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gICAqL1xuICBkZXBsb3koY29uZmlnOiBBZ2VudEhvc3RpbmdDb25maWcpOiBBZ2VudEhvc3RpbmdSZXN1bHQge1xuICAgIGNvbnN0IHNjb3BlID0gY29uZmlnLnNjb3BlO1xuICAgIGNvbnN0IG5ldHdvcmtNb2RlID0gdGhpcy5wcm9wcy5uZXR3b3JrTW9kZSB8fCBOZXR3b3JrTW9kZS5QVUJMSUM7XG5cbiAgICAvLyBSZXNvbHZlIFZQQyBjb25maWd1cmF0aW9uIGZvciBWUEMgbmV0d29yayBtb2RlXG4gICAgbGV0IHJlc29sdmVkU3VibmV0SWRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcmVzb2x2ZWRTZWN1cml0eUdyb3VwSWRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXR3b3JrTW9kZSA9PT0gTmV0d29ya01vZGUuVlBDKSB7XG4gICAgICAvLyBFeHBsaWNpdCBwcm9wcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBOZXR3b3JrIGNvbnN0cnVjdFxuICAgICAgaWYgKHRoaXMucHJvcHMudnBjU3VibmV0cyAmJiBjb25maWcubmV0d29yaykge1xuICAgICAgICByZXNvbHZlZFN1Ym5ldElkcyA9IGNvbmZpZy5uZXR3b3JrLnZwYy5zZWxlY3RTdWJuZXRzKHRoaXMucHJvcHMudnBjU3VibmV0cykuc3VibmV0SWRzO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcubmV0d29yaykge1xuICAgICAgICBjb25zdCBzdWJuZXRzID0gY29uZmlnLm5ldHdvcmsudnBjLnNlbGVjdFN1Ym5ldHMoXG4gICAgICAgICAgY29uZmlnLm5ldHdvcmsuYXBwbGljYXRpb25TdWJuZXRTZWxlY3Rpb24oKSxcbiAgICAgICAgKS5zdWJuZXRJZHM7XG4gICAgICAgIHJlc29sdmVkU3VibmV0SWRzID0gc3VibmV0cztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuc2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgcmVzb2x2ZWRTZWN1cml0eUdyb3VwSWRzID0gdGhpcy5wcm9wcy5zZWN1cml0eUdyb3Vwcy5tYXAoc2cgPT4gc2cuc2VjdXJpdHlHcm91cElkKTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLm5ldHdvcmspIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2VjdXJpdHkgZ3JvdXAgZm9yIHRoZSBBZ2VudENvcmUgcnVudGltZSBFTklzXG4gICAgICAgIGNvbnN0IHNnID0gbmV3IFNlY3VyaXR5R3JvdXAoc2NvcGUsICdBZ2VudENvcmVSdW50aW1lU0cnLCB7XG4gICAgICAgICAgdnBjOiBjb25maWcubmV0d29yay52cGMsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdTZWN1cml0eSBncm91cCBmb3IgQWdlbnRDb3JlIFJ1bnRpbWUgRU5JcycsXG4gICAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc29sdmVkU2VjdXJpdHlHcm91cElkcyA9IFtzZy5zZWN1cml0eUdyb3VwSWRdO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc29sdmVkU3VibmV0SWRzIHx8IHJlc29sdmVkU3VibmV0SWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1ZQQyBuZXR3b3JrIG1vZGUgcmVxdWlyZXMgc3VibmV0cyB0byBiZSBwcm92aWRlZCBlaXRoZXIgdmlhICcgK1xuICAgICAgICAgICdBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXJQcm9wcy52cGNTdWJuZXRzICh3aXRoIGEgTmV0d29yayBjb25zdHJ1Y3QpICcgK1xuICAgICAgICAgICdvciB2aWEgYSBOZXR3b3JrIGNvbnN0cnVjdCBpbiBBZ2VudEhvc3RpbmdDb25maWcubmV0d29yay4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCFyZXNvbHZlZFNlY3VyaXR5R3JvdXBJZHMgfHwgcmVzb2x2ZWRTZWN1cml0eUdyb3VwSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1ZQQyBuZXR3b3JrIG1vZGUgcmVxdWlyZXMgc2VjdXJpdHkgZ3JvdXBzIHRvIGJlIHByb3ZpZGVkIGVpdGhlciB2aWEgJyArXG4gICAgICAgICAgJ0FnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlclByb3BzLnNlY3VyaXR5R3JvdXBzIG9yIHZpYSBhIE5ldHdvcmsgY29uc3RydWN0ICcgK1xuICAgICAgICAgICdpbiBBZ2VudEhvc3RpbmdDb25maWcubmV0d29yay4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ1aWxkIG9yIHJlZmVyZW5jZSBjb250YWluZXIgaW1hZ2VcbiAgICBsZXQgY29udGFpbmVyVXJpOiBzdHJpbmc7XG4gICAgaWYgKHRoaXMucHJvcHMuY29udGFpbmVySW1hZ2VVcmkpIHtcbiAgICAgIGNvbnRhaW5lclVyaSA9IHRoaXMucHJvcHMuY29udGFpbmVySW1hZ2VVcmk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3Jlc291cmNlcy9hZ2VudGNvcmUtYWdlbnQtaGFuZGxlcicpO1xuICAgICAgY29uc3QgaW1hZ2VBc3NldCA9IG5ldyBEb2NrZXJJbWFnZUFzc2V0KHNjb3BlLCAnQWdlbnRDb3JlSGFuZGxlckltYWdlJywge1xuICAgICAgICBkaXJlY3Rvcnk6IGhhbmRsZXJQYXRoLFxuICAgICAgfSk7XG4gICAgICBjb250YWluZXJVcmkgPSBpbWFnZUFzc2V0LmltYWdlVXJpO1xuICAgIH1cblxuICAgIC8vIFJldXNlIHRoZSBzaW5nbGUgYWdlbnRSb2xlIChhbHJlYWR5IGhhcyBiZWRyb2NrLWFnZW50Y29yZSB0cnVzdCBmcm9tIEJhc2VBZ2VudCkuXG4gICAgLy8gT25seSBhZGQgRUNSIHB1bGwgcGVybWlzc2lvbnMg4oCUIGFsbCBvdGhlciBwZXJtaXNzaW9ucyAoQmVkcm9jayBJbnZva2VNb2RlbCxcbiAgICAvLyBTMyB0b29sIGFzc2V0cywgS0IgYWNjZXNzLCBzZXNzaW9uIGJ1Y2tldCwgb2JzZXJ2YWJpbGl0eSkgYXJlIGFscmVhZHkgZ3JhbnRlZFxuICAgIC8vIGJ5IEJhc2VBZ2VudCBvbiBjb25maWcuYWdlbnRSb2xlLlxuICAgIGNvbnN0IGVjclBvbGljeVJlc3VsdCA9IGNvbmZpZy5hZ2VudFJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ2VjcjpHZXREb3dubG9hZFVybEZvckxheWVyJyxcbiAgICAgICAgJ2VjcjpCYXRjaEdldEltYWdlJyxcbiAgICAgICAgJ2VjcjpHZXRBdXRob3JpemF0aW9uVG9rZW4nLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgLy8gQWRkIEFET1Qgb2JzZXJ2YWJpbGl0eSBwZXJtaXNzaW9ucyB3aGVuIGVuYWJsZWQuXG4gICAgLy8gVGhlIGNvbnRhaW5lciBEb2NrZXJmaWxlIHVzZXMgYG9wZW50ZWxlbWV0cnktaW5zdHJ1bWVudGAgYXMgaXRzIENNRCB3cmFwcGVyO1xuICAgIC8vIEFET1QgbmVlZHMgdGhlc2UgcGVybWlzc2lvbnMgdG8gZXhwb3J0IHRyYWNlcywgbG9ncywgYW5kIG1ldHJpY3MgZnJvbSB0aGUgY29udGFpbmVyLlxuICAgIC8vIE5vdGU6IFdlIHVzZSBleHBsaWNpdCBzdGF0ZW1lbnRzIGluc3RlYWQgb2YgQ2xvdWRXYXRjaExhbWJkYUFwcGxpY2F0aW9uU2lnbmFsc0V4ZWN1dGlvblJvbGVQb2xpY3lcbiAgICAvLyBiZWNhdXNlIHRoYXQgbWFuYWdlZCBwb2xpY3kgb25seSBjb3ZlcnMgL2F3cy9hcHBsaWNhdGlvbi1zaWduYWxzL2RhdGEgbG9nIGdyb3VwXG4gICAgLy8gYW5kIG1pc3NlcyBwZXJtaXNzaW9ucyBBRE9UIG5lZWRzIChEZXNjcmliZUxvZ0dyb3VwcywgRGVzY3JpYmVMb2dTdHJlYW1zLCBQdXRNZXRyaWNEYXRhKS5cbiAgICBpZiAoY29uZmlnLmVuYWJsZU9ic2VydmFiaWxpdHkpIHtcbiAgICAgIGNvbmZpZy5hZ2VudFJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2xvZ3M6RGVzY3JpYmVMb2dHcm91cHMnLFxuICAgICAgICAgICdsb2dzOkRlc2NyaWJlTG9nU3RyZWFtcycsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSk7XG4gICAgICBjb25maWcuYWdlbnRSb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdjbG91ZHdhdGNoOlB1dE1ldHJpY0RhdGEnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGNvbnRhaW5lclxuICAgIGNvbnN0IHsgcmVnaW9uLCBhY2NvdW50IH0gPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgZW52VmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIC8vIFVubGlrZSBMYW1iZGEsIEFnZW50Q29yZSBjb250YWluZXJzIGRvbid0IGdldCBBV1NfUkVHSU9OIGF1dG9tYXRpY2FsbHkuXG4gICAgICAvLyBib3RvMyBhbmQgb3RoZXIgQVdTIFNES3MgbmVlZCBpdCB0byBtYWtlIEFQSSBjYWxscy5cbiAgICAgIEFXU19SRUdJT046IHJlZ2lvbixcbiAgICAgIEFXU19ERUZBVUxUX1JFR0lPTjogcmVnaW9uLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmVudmlyb25tZW50KSkge1xuICAgICAgZW52VmFyc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTm90ZTogQUdFTlRfT0JTRVJWQUJJTElUWV9FTkFCTEVEIGFuZCBPVEVMXyogZW52IHZhcnMgYXJlIE5PVCBzZXQgaGVyZS5cbiAgICAvLyBGb3IgQWdlbnRDb3JlLWhvc3RlZCBhZ2VudHMsIHRoZSBBRE9UIGF1dG8taW5zdHJ1bWVudGF0aW9uIHZpYVxuICAgIC8vIGBvcGVudGVsZW1ldHJ5LWluc3RydW1lbnRgIGluIHRoZSBEb2NrZXJmaWxlIENNRCBoYW5kbGVzIHRyYWNlL3NwYW5cbiAgICAvLyBleHBvcnQgYXV0b21hdGljYWxseS4gVGhlc2UgZW52IHZhcnMgYXJlIG9ubHkgbmVlZGVkIGZvciBhZ2VudHNcbiAgICAvLyBob3N0ZWQgb3V0c2lkZSBvZiBBZ2VudENvcmUuXG5cbiAgICAvLyBCdWlsZCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBuZXR3b3JrQ29uZmlndXJhdGlvbjogYW55ID0ge1xuICAgICAgbmV0d29ya01vZGUsXG4gICAgfTtcblxuICAgIC8vIEJ1aWxkIGF1dGhvcml6YXRpb24gY29uZmlndXJhdGlvbiBpZiBKV1QgYXV0aG9yaXplciBpcyBzcGVjaWZpZWRcbiAgICBjb25zdCBhdXRoQ29uZmlnID0gdGhpcy5wcm9wcy5jdXN0b21Kd3RBdXRob3JpemVyID8ge1xuICAgICAgY3VzdG9tSnd0QXV0aG9yaXplcjoge1xuICAgICAgICBkaXNjb3ZlcnlVcmw6IHRoaXMucHJvcHMuY3VzdG9tSnd0QXV0aG9yaXplci5kaXNjb3ZlcnlVcmwsXG4gICAgICAgIGFsbG93ZWRBdWRpZW5jZTogdGhpcy5wcm9wcy5jdXN0b21Kd3RBdXRob3JpemVyLmFsbG93ZWRBdWRpZW5jZSxcbiAgICAgICAgYWxsb3dlZENsaWVudHM6IHRoaXMucHJvcHMuY3VzdG9tSnd0QXV0aG9yaXplci5hbGxvd2VkQ2xpZW50cyxcbiAgICAgIH0sXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIENyZWF0ZSBDZm5SdW50aW1lXG4gICAgY29uc3QgcnVudGltZSA9IG5ldyBDZm5SdW50aW1lKHNjb3BlLCAnQWdlbnRDb3JlUnVudGltZScsIHtcbiAgICAgIGFnZW50UnVudGltZU5hbWU6IGAke2NvbmZpZy5hZ2VudE5hbWUucmVwbGFjZSgvLS9nLCAnXycpfV9ydW50aW1lYCxcbiAgICAgIGFnZW50UnVudGltZUFydGlmYWN0OiB7XG4gICAgICAgIGNvbnRhaW5lckNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb250YWluZXJVcmksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcm9sZUFybjogY29uZmlnLmFnZW50Um9sZS5yb2xlQXJuLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb24sXG4gICAgICBhdXRob3JpemVyQ29uZmlndXJhdGlvbjogYXV0aENvbmZpZyxcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiBlbnZWYXJzLFxuICAgIH0pO1xuXG4gICAgcnVudGltZS5hcHBseVJlbW92YWxQb2xpY3koY29uZmlnLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcblxuICAgIC8vIFdoZW4gSldUIGF1dGggaXMgY29uZmlndXJlZCwgYWxsb3dsaXN0IHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBzbyB0aGVcbiAgICAvLyBjb250YWluZXIgY2FuIGV4dHJhY3QgdXNlciBpZGVudGl0eSBjbGFpbXMgZnJvbSB0aGUgZm9yd2FyZGVkIEpXVCB0b2tlbi5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvcnVudGltZS1vYXV0aC5odG1sI29hdXRoLXByb3BhZ2F0ZS1qd3QtdG9rZW5cbiAgICBpZiAodGhpcy5wcm9wcy5jdXN0b21Kd3RBdXRob3JpemVyKSB7XG4gICAgICBydW50aW1lLmFkZFByb3BlcnR5T3ZlcnJpZGUoJ1JlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uJywge1xuICAgICAgICBSZXF1ZXN0SGVhZGVyQWxsb3dsaXN0OiBbJ0F1dGhvcml6YXRpb24nXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFdoZW4gVlBDIG1vZGUgaXMgY29uZmlndXJlZCwgc2V0IHRoZSBOZXR3b3JrTW9kZUNvbmZpZyB3aXRoIHN1Ym5ldHMgYW5kXG4gICAgLy8gc2VjdXJpdHkgZ3JvdXBzIHZpYSBwcm9wZXJ0eSBvdmVycmlkZS4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBDREsgMi4yMTguMFxuICAgIC8vIGRvZXMgbm90IHlldCBoYXZlIHR5cGVkIHN1cHBvcnQgZm9yIE5ldHdvcmtNb2RlQ29uZmlnIChhZGRlZCBpbiAyLjI0MC4wKS5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvYWdlbnRjb3JlLXZwYy5odG1sXG4gICAgaWYgKG5ldHdvcmtNb2RlID09PSBOZXR3b3JrTW9kZS5WUEMgJiYgcmVzb2x2ZWRTdWJuZXRJZHMgJiYgcmVzb2x2ZWRTZWN1cml0eUdyb3VwSWRzKSB7XG4gICAgICBydW50aW1lLmFkZFByb3BlcnR5T3ZlcnJpZGUoJ05ldHdvcmtDb25maWd1cmF0aW9uLk5ldHdvcmtNb2RlQ29uZmlnJywge1xuICAgICAgICBTdWJuZXRzOiByZXNvbHZlZFN1Ym5ldElkcyxcbiAgICAgICAgU2VjdXJpdHlHcm91cHM6IHJlc29sdmVkU2VjdXJpdHlHcm91cElkcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBDZm5SdW50aW1lIHdhaXRzIGZvciB0aGUgcm9sZSBhbmQgaXRzIHBvbGljaWVzIHRvIGJlIGZ1bGx5IGNyZWF0ZWQvdXBkYXRlZC5cbiAgICAvLyBXaXRob3V0IHRoaXMsIENsb3VkRm9ybWF0aW9uIG1heSB2YWxpZGF0ZSB0aGUgcm9sZSBiZWZvcmU6XG4gICAgLy8gLSBUaGUgdHJ1c3QgcG9saWN5IGlzIHVwZGF0ZWQgdG8gYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbSAoZHVyaW5nIHN0YWNrIHVwZGF0ZXMpXG4gICAgLy8gLSBUaGUgRUNSIHBlcm1pc3Npb25zIHBvbGljeSBpcyBhdHRhY2hlZFxuICAgIHJ1bnRpbWUubm9kZS5hZGREZXBlbmRlbmN5KGNvbmZpZy5hZ2VudFJvbGUpO1xuICAgIGlmIChlY3JQb2xpY3lSZXN1bHQucG9saWN5RGVwZW5kYWJsZSkge1xuICAgICAgcnVudGltZS5ub2RlLmFkZERlcGVuZGVuY3koZWNyUG9saWN5UmVzdWx0LnBvbGljeURlcGVuZGFibGUpO1xuICAgIH1cblxuICAgIC8vIEluIFZQQyBtb2RlLCB0aGUgQWdlbnRDb3JlIHJ1bnRpbWUgdGFrZXMgbG9uZ2VyIHRvIHByb3Zpc2lvbiAoRU5JIGNyZWF0aW9uLFxuICAgIC8vIHN1Ym5ldCBhdHRhY2htZW50KSBidXQgQ2xvdWRGb3JtYXRpb24gbWFya3MgQ2ZuUnVudGltZSBhcyBDUkVBVEVfQ09NUExFVEVcbiAgICAvLyBiZWZvcmUgdGhlIHJ1bnRpbWUgcmVhY2hlcyBSRUFEWSBzdGF0dXMuIEluc2VydCBhIGN1c3RvbSByZXNvdXJjZSB3YWl0ZXJcbiAgICAvLyB0aGF0IHBvbGxzIEdldEFnZW50UnVudGltZSB1bnRpbCBzdGF0dXMgaXMgUkVBRFkgYmVmb3JlIGNyZWF0aW5nIHRoZSBlbmRwb2ludC5cbiAgICBsZXQgcnVudGltZVdhaXRlcjogQ3VzdG9tUmVzb3VyY2UgfCB1bmRlZmluZWQ7XG4gICAgaWYgKG5ldHdvcmtNb2RlID09PSBOZXR3b3JrTW9kZS5WUEMpIHtcbiAgICAgIGNvbnN0IHVuaXF1ZVN1ZmZpeCA9IE5hbWVzLnVuaXF1ZUlkKHJ1bnRpbWUpLnNsaWNlKC04KS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBjb25zdCB3YWl0ZXJGbiA9IG5ldyBGdW5jdGlvbihzY29wZSwgJ1J1bnRpbWVSZWFkeVdhaXRlckZuJywge1xuICAgICAgICBmdW5jdGlvbk5hbWU6IGAke2NvbmZpZy5hZ2VudE5hbWV9LXJ0LXdhaXRlci0ke3VuaXF1ZVN1ZmZpeH1gLFxuICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZShbXG4gICAgICAgICAgJ2NvbnN0IGh0dHBzID0gcmVxdWlyZShcImh0dHBzXCIpOycsXG4gICAgICAgICAgJ2NvbnN0IHVybCA9IHJlcXVpcmUoXCJ1cmxcIik7JyxcbiAgICAgICAgICAnY29uc3QgeyBCZWRyb2NrQWdlbnRDb3JlQ29udHJvbENsaWVudCwgR2V0QWdlbnRSdW50aW1lQ29tbWFuZCB9ID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sXCIpOycsXG4gICAgICAgICAgJ2Z1bmN0aW9uIHNlbmRSZXNwb25zZShldmVudCwgY29udGV4dCwgc3RhdHVzLCBkYXRhLCByZWFzb24pIHsnLFxuICAgICAgICAgICcgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeSh7JyxcbiAgICAgICAgICAnICAgIFN0YXR1czogc3RhdHVzLCcsXG4gICAgICAgICAgJyAgICBSZWFzb246IHJlYXNvbiB8fCBcIlNlZSBDbG91ZFdhdGNoIExvZyBTdHJlYW06IFwiICsgY29udGV4dC5sb2dTdHJlYW1OYW1lLCcsXG4gICAgICAgICAgJyAgICBQaHlzaWNhbFJlc291cmNlSWQ6IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5BZ2VudFJ1bnRpbWVJZCB8fCBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCwnLFxuICAgICAgICAgICcgICAgU3RhY2tJZDogZXZlbnQuU3RhY2tJZCwnLFxuICAgICAgICAgICcgICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsJyxcbiAgICAgICAgICAnICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCwnLFxuICAgICAgICAgICcgICAgRGF0YTogZGF0YSB8fCB7fSwnLFxuICAgICAgICAgICcgIH0pOycsXG4gICAgICAgICAgJyAgY29uc3QgcGFyc2VkID0gdXJsLnBhcnNlKGV2ZW50LlJlc3BvbnNlVVJMKTsnLFxuICAgICAgICAgICcgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7JyxcbiAgICAgICAgICAnICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3QoeyBob3N0bmFtZTogcGFyc2VkLmhvc3RuYW1lLCBwYXRoOiBwYXJzZWQucGF0aCwgbWV0aG9kOiBcIlBVVFwiLCcsXG4gICAgICAgICAgJyAgICAgIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJcIiwgXCJjb250ZW50LWxlbmd0aFwiOiBib2R5Lmxlbmd0aCB9IH0sIHJlc29sdmUpOycsXG4gICAgICAgICAgJyAgICByZXEub24oXCJlcnJvclwiLCByZWplY3QpOycsXG4gICAgICAgICAgJyAgICByZXEud3JpdGUoYm9keSk7JyxcbiAgICAgICAgICAnICAgIHJlcS5lbmQoKTsnLFxuICAgICAgICAgICcgIH0pOycsXG4gICAgICAgICAgJ30nLFxuICAgICAgICAgICdleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoZXZlbnQsIGNvbnRleHQpID0+IHsnLFxuICAgICAgICAgICcgIHRyeSB7JyxcbiAgICAgICAgICAnICAgIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gXCJEZWxldGVcIikgeyBhd2FpdCBzZW5kUmVzcG9uc2UoZXZlbnQsIGNvbnRleHQsIFwiU1VDQ0VTU1wiLCB7fSk7IHJldHVybjsgfScsXG4gICAgICAgICAgJyAgICBjb25zdCBjbGllbnQgPSBuZXcgQmVkcm9ja0FnZW50Q29yZUNvbnRyb2xDbGllbnQoKTsnLFxuICAgICAgICAgICcgICAgY29uc3QgcnVudGltZUlkID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkFnZW50UnVudGltZUlkOycsXG4gICAgICAgICAgJyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwOyBpKyspIHsnLFxuICAgICAgICAgICcgICAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldEFnZW50UnVudGltZUNvbW1hbmQoeyBhZ2VudFJ1bnRpbWVJZDogcnVudGltZUlkIH0pKTsnLFxuICAgICAgICAgICcgICAgICBjb25zdCBzdGF0dXMgPSByZXNwLnN0YXR1cyB8fCByZXNwLmFnZW50UnVudGltZVN0YXR1czsnLFxuICAgICAgICAgICcgICAgICBjb25zb2xlLmxvZyhgQXR0ZW1wdCAke2kgKyAxfTogcnVudGltZSBzdGF0dXMgPSAke3N0YXR1c31gKTsnLFxuICAgICAgICAgICcgICAgICBpZiAoc3RhdHVzID09PSBcIlJFQURZXCIpIHsgYXdhaXQgc2VuZFJlc3BvbnNlKGV2ZW50LCBjb250ZXh0LCBcIlNVQ0NFU1NcIiwgeyBTdGF0dXM6IHN0YXR1cyB9KTsgcmV0dXJuOyB9JyxcbiAgICAgICAgICAnICAgICAgaWYgKHN0YXR1cyA9PT0gXCJGQUlMRURcIikgeyBhd2FpdCBzZW5kUmVzcG9uc2UoZXZlbnQsIGNvbnRleHQsIFwiRkFJTEVEXCIsIHt9LCBcIlJ1bnRpbWUgZW50ZXJlZCBGQUlMRUQgc3RhdHVzXCIpOyByZXR1cm47IH0nLFxuICAgICAgICAgICcgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTUwMDApKTsnLFxuICAgICAgICAgICcgICAgfScsXG4gICAgICAgICAgJyAgICBhd2FpdCBzZW5kUmVzcG9uc2UoZXZlbnQsIGNvbnRleHQsIFwiRkFJTEVEXCIsIHt9LCBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBydW50aW1lIFJFQURZIHN0YXR1c1wiKTsnLFxuICAgICAgICAgICcgIH0gY2F0Y2ggKGUpIHsnLFxuICAgICAgICAgICcgICAgY29uc29sZS5lcnJvcihlKTsnLFxuICAgICAgICAgICcgICAgYXdhaXQgc2VuZFJlc3BvbnNlKGV2ZW50LCBjb250ZXh0LCBcIkZBSUxFRFwiLCB7fSwgZS5tZXNzYWdlKTsnLFxuICAgICAgICAgICcgIH0nLFxuICAgICAgICAgICd9OycsXG4gICAgICAgIF0uam9pbignXFxuJykpLFxuICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEyKSxcbiAgICAgIH0pO1xuXG4gICAgICB3YWl0ZXJGbi5hZGRUb1JvbGVQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkdldEFnZW50UnVudGltZSddLFxuICAgICAgICByZXNvdXJjZXM6IFtTdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgICBzZXJ2aWNlOiAnYmVkcm9jay1hZ2VudGNvcmUnLFxuICAgICAgICAgIHJlc291cmNlOiAncnVudGltZScsXG4gICAgICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICAgIH0pXSxcbiAgICAgIH0pKTtcblxuICAgICAgcnVudGltZVdhaXRlciA9IG5ldyBDdXN0b21SZXNvdXJjZShzY29wZSwgJ1J1bnRpbWVSZWFkeVdhaXRlcicsIHtcbiAgICAgICAgc2VydmljZVRva2VuOiB3YWl0ZXJGbi5mdW5jdGlvbkFybixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIEFnZW50UnVudGltZUlkOiBydW50aW1lLnJlZixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgcnVudGltZVdhaXRlci5ub2RlLmFkZERlcGVuZGVuY3kocnVudGltZSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIENmblJ1bnRpbWVFbmRwb2ludFxuICAgIGNvbnN0IGVuZHBvaW50TmFtZSA9IHRoaXMucHJvcHMuZW5kcG9pbnROYW1lIHx8IGAke2NvbmZpZy5hZ2VudE5hbWUucmVwbGFjZSgvLS9nLCAnXycpfV9lbmRwb2ludGA7XG4gICAgY29uc3QgcnVudGltZUVuZHBvaW50ID0gbmV3IENmblJ1bnRpbWVFbmRwb2ludChzY29wZSwgJ0FnZW50Q29yZVJ1bnRpbWVFbmRwb2ludCcsIHtcbiAgICAgIGFnZW50UnVudGltZUlkOiBydW50aW1lLnJlZixcbiAgICAgIGFnZW50UnVudGltZVZlcnNpb246IHJ1bnRpbWUuYXR0ckFnZW50UnVudGltZVZlcnNpb24sXG4gICAgICBuYW1lOiBlbmRwb2ludE5hbWUsXG4gICAgICAuLi4odGhpcy5wcm9wcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gJiYge1xuICAgICAgICBwcm90b2NvbENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBzZXJ2ZXJQcm90b2NvbDogdGhpcy5wcm9wcy5wcm90b2NvbENvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICBydW50aW1lRW5kcG9pbnQuYXBwbHlSZW1vdmFsUG9saWN5KGNvbmZpZy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG5cbiAgICAvLyBFbnN1cmUgdGhlIGVuZHBvaW50IHdhaXRzIGZvciB0aGUgcnVudGltZSB0byBiZSBSRUFEWSBpbiBWUEMgbW9kZVxuICAgIGlmIChydW50aW1lV2FpdGVyKSB7XG4gICAgICBydW50aW1lRW5kcG9pbnQubm9kZS5hZGREZXBlbmRlbmN5KHJ1bnRpbWVXYWl0ZXIpO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCB0aGUgZnVsbCBpbnZvY2F0aW9uIFVSTCBmb3IgZGlyZWN0IEhUVFBTIGFjY2VzcyAocmVxdWlyZWQgZm9yIEpXVCBhdXRoKS5cbiAgICAvLyBGb3JtYXQ6IGh0dHBzOi8vYmVkcm9jay1hZ2VudGNvcmUue3JlZ2lvbn0uYW1hem9uYXdzLmNvbS9ydW50aW1lcy97VVJMLWVuY29kZWQtQVJOfS9pbnZvY2F0aW9ucz9xdWFsaWZpZXI9e2VuZHBvaW50TmFtZX1cbiAgICBjb25zdCBlbmNvZGVkQXJuID0gRm4uam9pbignJywgW1xuICAgICAgJ2FybiUzQWF3cyUzQWJlZHJvY2stYWdlbnRjb3JlJTNBJyxcbiAgICAgIHJlZ2lvbixcbiAgICAgICclM0EnLFxuICAgICAgYWNjb3VudCxcbiAgICAgICclM0FydW50aW1lJTJGJyxcbiAgICAgIHJ1bnRpbWUuYXR0ckFnZW50UnVudGltZUlkLFxuICAgIF0pO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gRm4uam9pbignJywgW1xuICAgICAgJ2h0dHBzOi8vYmVkcm9jay1hZ2VudGNvcmUuJyxcbiAgICAgIHJlZ2lvbixcbiAgICAgICcuYW1hem9uYXdzLmNvbS9ydW50aW1lcy8nLFxuICAgICAgZW5jb2RlZEFybixcbiAgICAgICcvaW52b2NhdGlvbnM/cXVhbGlmaWVyPScsXG4gICAgICBlbmRwb2ludE5hbWUsXG4gICAgXSk7XG5cbiAgICByZXR1cm4geyBlbmRwb2ludCwgY2ZuUnVudGltZTogcnVudGltZSB9O1xuICB9XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBJbnRlcmFjdGl2ZUFnZW50LlxuICpcbiAqIEV4dGVuZHMgQmFzZUFnZW50UHJvcHMgd2l0aCBjb21tdW5pY2F0aW9uLCBzZXNzaW9uLCBjb250ZXh0LCBhbmQgYXV0aGVudGljYXRpb25cbiAqIHN0cmF0ZWd5IGludGVyZmFjZXMgZm9yIGJ1aWxkaW5nIHJlYWwtdGltZSBjb252ZXJzYXRpb25hbCBBSSBhZ2VudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJhY3RpdmVBZ2VudFByb3BzIGV4dGVuZHMgQmFzZUFnZW50UHJvcHMge1xuICAvKipcbiAgICogSG9zdGluZyBhZGFwdGVyIGZvciBkZXBsb3lpbmcgdGhlIGFnZW50IHJ1bnRpbWUuXG4gICAqXG4gICAqIFVzZSBgTGFtYmRhSG9zdGluZ0FkYXB0ZXJgIGZvciBMYW1iZGEgKyBBUEkgR2F0ZXdheSAoZGVmYXVsdCkgb3JcbiAgICogYEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcmAgZm9yIEFnZW50Q29yZSBSdW50aW1lIGhvc3RpbmcuXG4gICAqXG4gICAqIFdoZW4gcHJvdmlkZWQsIGBjb21tdW5pY2F0aW9uQWRhcHRlcmAsIGBhdXRoZW50aWNhdG9yYCwgYG1lbW9yeVNpemVgLFxuICAgKiBgdGltZW91dGAsIGBhcmNoaXRlY3R1cmVgLCBhbmQgYHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnNgIHByb3BzXG4gICAqIGFyZSBpZ25vcmVkIChjb25maWd1cmUgdGhlbSBvbiB0aGUgYWRhcHRlciBkaXJlY3RseSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IExhbWJkYUhvc3RpbmdBZGFwdGVyXG4gICAqL1xuICByZWFkb25seSBob3N0aW5nQWRhcHRlcj86IElIb3N0aW5nQWRhcHRlcjtcbiAgLyoqXG4gICAqIENvbW11bmljYXRpb24gYWRhcHRlciBmb3IgY2xpZW50LWFnZW50IGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTdHJlYW1pbmdIdHRwQWRhcHRlciB3aXRoIENvZ25pdG9BdXRoZW50aWNhdG9yXG4gICAqL1xuICByZWFkb25seSBjb21tdW5pY2F0aW9uQWRhcHRlcj86IElDb21tdW5pY2F0aW9uQWRhcHRlcjtcblxuICAvKipcbiAgICogU2Vzc2lvbiBzdG9yZSBmb3IgcGVyc2lzdGluZyBjb252ZXJzYXRpb24gc3RhdGUuXG4gICAqIFNldCB0byB1bmRlZmluZWQgdG8gZGlzYWJsZSBzZXNzaW9uIHBlcnNpc3RlbmNlIChzdGF0ZWxlc3MgbW9kZSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IFMzU2Vzc2lvbk1hbmFnZXIgd2l0aCAyNC1ob3VyIFRUTFxuICAgKiBAZGVwcmVjYXRlZCBTZXNzaW9uIG1hbmFnZW1lbnQgaXMgbm93IGhhbmRsZWQgYnkgU3RyYW5kcy1uYXRpdmUgYFMzU2Vzc2lvbk1hbmFnZXJgLlxuICAgKiBBbiBTMyBidWNrZXQgaXMgYWx3YXlzIGNyZWF0ZWQgYW5kIHBhc3NlZCBhcyBgU0VTU0lPTl9CVUNLRVRgIGVudiB2YXIuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uU3RvcmU/OiBJU2Vzc2lvblN0b3JlO1xuXG4gIC8qKlxuICAgKiBTMyBidWNrZXQgZm9yIHNlc3Npb24gc3RvcmFnZSAoc2hvcnRoYW5kIGZvciBTM1Nlc3Npb25NYW5hZ2VyKS5cbiAgICogSWdub3JlZCBpZiBzZXNzaW9uU3RvcmUgaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IEF1dG8tY3JlYXRlZCBidWNrZXRcbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25CdWNrZXQ/OiBJQnVja2V0O1xuXG4gIC8qKlxuICAgKiBUaW1lLXRvLWxpdmUgZm9yIHNlc3Npb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5ob3VycygyNClcbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25UVEw/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogU2Vzc2lvbiBpbmRleCBmb3IgZmFzdCB1c2VyIHRvIHNlc3Npb24gbG9va3Vwcy5cbiAgICogUHJvdmlkZXMgZWZmaWNpZW50IHF1ZXJ5aW5nIG9mIGEgdXNlcidzIHNlc3Npb25zIGZvciBsaXN0aW5nIGFuZCBtYW5hZ2VtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEeW5hbW9EQlNlc3Npb25JbmRleCAoYXV0by1jcmVhdGVkKVxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbkluZGV4PzogSVNlc3Npb25JbmRleDtcblxuICAvKipcbiAgICogQ29udGV4dCBzdHJhdGVneSBmb3IgY29udmVyc2F0aW9uIGhpc3RvcnkgbWFuYWdlbWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIgd2l0aCAyMCBtZXNzYWdlc1xuICAgKiBAZGVwcmVjYXRlZCBDb252ZXJzYXRpb24gbWFuYWdlbWVudCBpcyBub3cgaGFuZGxlZCBieSBTdHJhbmRzLW5hdGl2ZVxuICAgKiBgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXJgIGluIHRoZSBQeXRob24gaGFuZGxlci5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHRTdHJhdGVneT86IElDb250ZXh0U3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIHRvIGtlZXAgaW4gY29udmVyc2F0aW9uIGhpc3RvcnkuXG4gICAqIFNob3J0aGFuZCBmb3IgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIgd2luZG93U2l6ZS5cbiAgICogSWdub3JlZCBpZiBjb250ZXh0U3RyYXRlZ3kgaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIwXG4gICAqIEBkZXByZWNhdGVkIENvbnZlcnNhdGlvbiB3aW5kb3dpbmcgaXMgbm93IGhhbmRsZWQgYnkgU3RyYW5kcy1uYXRpdmVcbiAgICogYFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyYCBpbiB0aGUgUHl0aG9uIGhhbmRsZXIgKGRlZmF1bHQ6IDIwKS5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2VIaXN0b3J5TGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0b3IgZm9yIHNlY3VyaW5nIEFQSSBlbmRwb2ludHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IENvZ25pdG9BdXRoZW50aWNhdG9yXG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdG9yPzogSUF1dGhlbnRpY2F0b3I7XG5cbiAgLyoqXG4gICAqIEhUVFAgbWV0aG9kcyB0byBhbGxvdyBpbiBDT1JTIHByZWZsaWdodCByZXNwb25zZXMuXG4gICAqIFVzZSB0aGlzIHRvIGVuYWJsZSBhZGRpdGlvbmFsIG1ldGhvZHMgKEdFVCwgREVMRVRFLCBQVVQpIGZvciBjdXN0b20gcm91dGVzXG4gICAqIGFkZGVkIHRvIHRoZSBSRVNUIEFQSS5cbiAgICpcbiAgICogQGRlZmF1bHQgWydQT1NUJywgJ09QVElPTlMnXVxuICAgKi9cbiAgcmVhZG9ubHkgY29yc0FsbG93TWV0aG9kcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZnVuY3Rpb24gbWVtb3J5IHNpemUgaW4gTUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwMjRcbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExhbWJkYSBmdW5jdGlvbiB0aW1lb3V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDE1KVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZnVuY3Rpb24gYXJjaGl0ZWN0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBcmNoaXRlY3R1cmUuWDg2XzY0XG4gICAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XG5cbiAgLyoqXG4gICAqIFJlc2VydmVkIGNvbmN1cnJlbnQgZXhlY3V0aW9ucyBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gcmVzZXJ2ZWQgY29uY3VycmVuY3lcbiAgICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogSW50ZXJhY3RpdmUgQWdlbnQgZm9yIHJlYWwtdGltZSBjb252ZXJzYXRpb25hbCBBSSB3aXRoIFNTRSBzdHJlYW1pbmcuXG4gKlxuICogQ3JlYXRlcyBhIGNvbXBsZXRlIHNlcnZlcmxlc3MgaW5mcmFzdHJ1Y3R1cmUgZm9yIGludGVyYWN0aXZlIEFJIGNvbnZlcnNhdGlvbnNcbiAqIHVzaW5nIEFQSSBHYXRld2F5IFJFU1QgQVBJIHdpdGggcmVzcG9uc2Ugc3RyZWFtaW5nLCBMYW1iZGEgV2ViIEFkYXB0ZXIsXG4gKiBGYXN0QVBJLCBhbmQgc3RhbmRhcmQgU3RyYW5kcyBBZ2VudC5cbiAqXG4gKiAjIyBBcmNoaXRlY3R1cmVcbiAqXG4gKiBgYGBcbiAqIENsaWVudCAoZmV0Y2ggKyBSZWFkYWJsZVN0cmVhbSlcbiAqICAgICDihpMgUE9TVCAvY2hhdCAoQXV0aG9yaXphdGlvbjogQmVhcmVyIEpXVClcbiAqIEFQSSBHYXRld2F5IFJFU1QgQVBJIChyZXNwb25zZVRyYW5zZmVyTW9kZTogU1RSRUFNKVxuICogICAgIOKGkyBJbnZva2VXaXRoUmVzcG9uc2VTdHJlYW1cbiAqIExhbWJkYSAoUHl0aG9uICsgTGFtYmRhIFdlYiBBZGFwdGVyICsgRmFzdEFQSSlcbiAqICAgICDihpMgc3RyYW5kcy5BZ2VudCBzdHJlYW1pbmdcbiAqIEFtYXpvbiBCZWRyb2NrIChDbGF1ZGUpXG4gKiBgYGBcbiAqXG4gKiAjIyBGZWF0dXJlc1xuICpcbiAqIC0gKipTU0UgU3RyZWFtaW5nKio6IFJlYWwtdGltZSB0b2tlbi1ieS10b2tlbiByZXNwb25zZSBzdHJlYW1pbmdcbiAqIC0gKioxNS1NaW51dGUgVGltZW91dCoqOiBFeHRlbmRlZCB0aW1lb3V0IGZvciBsb25nIGNvbnZlcnNhdGlvbnNcbiAqIC0gKipTZXNzaW9uIE1hbmFnZW1lbnQqKjogUzMtYmFzZWQgY29udmVyc2F0aW9uIHBlcnNpc3RlbmNlXG4gKiAtICoqQ29udGV4dCBXaW5kb3dpbmcqKjogU2xpZGluZyB3aW5kb3cgY29udmVyc2F0aW9uIGhpc3RvcnlcbiAqIC0gKipDb2duaXRvIEF1dGgqKjogTmF0aXZlIEpXVCB2YWxpZGF0aW9uIG9uIFJFU1QgQVBJXG4gKiAtICoqU3RyYXRlZ3kgSW50ZXJmYWNlcyoqOiBQbHVnZ2FibGUgYWRhcHRlcnMgZm9yIGFsbCBjb21wb25lbnRzXG4gKiAtICoqT2JzZXJ2YWJpbGl0eSoqOiBMYW1iZGEgUG93ZXJ0b29scyBpbnRlZ3JhdGlvblxuICpcbiAqICMjIFVzYWdlXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbiAqIGltcG9ydCB7IEludGVyYWN0aXZlQWdlbnQgfSBmcm9tICdAY2RrbGFicy9jZGstYXBwbW9kLWNhdGFsb2ctYmx1ZXByaW50cyc7XG4gKlxuICogY29uc3Qgc3lzdGVtUHJvbXB0ID0gbmV3IEFzc2V0KHRoaXMsICdQcm9tcHQnLCB7IHBhdGg6ICcuL3Byb21wdC50eHQnIH0pO1xuICpcbiAqIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQodGhpcywgJ0NoYXRBZ2VudCcsIHtcbiAqICAgYWdlbnROYW1lOiAnTXlDaGF0Ym90JyxcbiAqICAgYWdlbnREZWZpbml0aW9uOiB7XG4gKiAgICAgYmVkcm9ja01vZGVsOiB7IHVzZUNyb3NzUmVnaW9uSW5mZXJlbmNlOiB0cnVlIH0sXG4gKiAgICAgc3lzdGVtUHJvbXB0OiBzeXN0ZW1Qcm9tcHQsXG4gKiAgIH0sXG4gKiB9KTtcbiAqXG4gKiAvLyBBY2Nlc3Mgb3V0cHV0c1xuICogYWdlbnQuYXBpRW5kcG9pbnQ7ICAgICAgIC8vIFJFU1QgQVBJIGVuZHBvaW50IFVSTFxuICogYWdlbnQuc2Vzc2lvbkJ1Y2tldDsgICAgIC8vIFMzIHNlc3Npb24gYnVja2V0XG4gKiBhZ2VudC5hdXRoZW50aWNhdG9yOyAgICAgLy8gQ29nbml0byBhdXRoZW50aWNhdG9yIChmb3IgVXNlciBQb29sIGluZm8pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVyYWN0aXZlQWdlbnQgZXh0ZW5kcyBCYXNlQWdlbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRGdW5jdGlvbj86IElGdW5jdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IGFkYXB0ZXI/OiBJQ29tbXVuaWNhdGlvbkFkYXB0ZXI7XG4gIHB1YmxpYyByZWFkb25seSBzZXNzaW9uU3RvcmU/OiBJU2Vzc2lvblN0b3JlO1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGV4dFN0cmF0ZWd5PzogSUNvbnRleHRTdHJhdGVneTtcbiAgcHVibGljIHJlYWRvbmx5IGF1dGhlbnRpY2F0b3I/OiBJQXV0aGVudGljYXRvcjtcbiAgcHVibGljIHJlYWRvbmx5IGFwaUVuZHBvaW50OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzZXNzaW9uQnVja2V0PzogSUJ1Y2tldDtcbiAgcHVibGljIHJlYWRvbmx5IGNmblJ1bnRpbWU/OiBDZm5SdW50aW1lO1xuICAvKipcbiAgICogVGhlIHNlc3Npb24gaW5kZXggZm9yIGZhc3QgdXNlciB0byBzZXNzaW9uIGxvb2t1cHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvbkluZGV4PzogSVNlc3Npb25JbmRleDtcbiAgLyoqXG4gICAqIFRoZSBSRVNUIEFQSSBHYXRld2F5IChvbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIExhbWJkYUhvc3RpbmdBZGFwdGVyIHdpdGggU3RyZWFtaW5nSHR0cEFkYXB0ZXIpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc3RBcGk/OiBSZXN0QXBpO1xuICAvKipcbiAgICogVGhlIENvZ25pdG8gVXNlciBQb29scyBhdXRob3JpemVyIChvbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIExhbWJkYUhvc3RpbmdBZGFwdGVyIHdpdGggQ29nbml0b0F1dGhlbnRpY2F0b3IpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvZ25pdG9BdXRob3JpemVyPzogQ29nbml0b1VzZXJQb29sc0F1dGhvcml6ZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEludGVyYWN0aXZlQWdlbnRQcm9wcykge1xuICAgIC8vIERldGVybWluZSBob3N0aW5nIGFkYXB0ZXIgQkVGT1JFIHN1cGVyKCkgc28gd2UgY2FuIHBhc3MgaXRzIHRydXN0IHByaW5jaXBhbFxuICAgIGNvbnN0IGhvc3RpbmdBZGFwdGVyID0gcHJvcHMuaG9zdGluZ0FkYXB0ZXIgfHwgbmV3IExhbWJkYUhvc3RpbmdBZGFwdGVyKHtcbiAgICAgIGNvbW11bmljYXRpb25BZGFwdGVyOiBwcm9wcy5jb21tdW5pY2F0aW9uQWRhcHRlcixcbiAgICAgIGF1dGhlbnRpY2F0b3I6IHByb3BzLmF1dGhlbnRpY2F0b3IsXG4gICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplLFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dCxcbiAgICAgIGFyY2hpdGVjdHVyZTogcHJvcHMuYXJjaGl0ZWN0dXJlLFxuICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogcHJvcHMucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICB9KTtcblxuICAgIHN1cGVyKHNjb3BlLCBpZCwgeyAuLi5wcm9wcywgc2VydmljZVByaW5jaXBhbDogaG9zdGluZ0FkYXB0ZXIuc2VydmljZVByaW5jaXBhbCB9KTtcblxuICAgIC8vIFZhbGlkYXRlIHByb3BzXG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKHByb3BzKTtcblxuICAgIGNvbnN0IG1vZGVsSWQgPSBCZWRyb2NrTW9kZWxVdGlscy5kZXJpdmVBY3R1YWxNb2RlbElkKHRoaXMuYmVkcm9ja01vZGVsKTtcbiAgICBjb25zdCBtZXRyaWNOYW1lc3BhY2UgPSBwcm9wcy5tZXRyaWNOYW1lc3BhY2UgfHwgRGVmYXVsdE9ic2VydmFiaWxpdHlDb25maWcuREVGQVVMVF9NRVRSSUNfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG1ldHJpY1NlcnZpY2VOYW1lID0gcHJvcHMubWV0cmljU2VydmljZU5hbWUgfHwgRGVmYXVsdEFnZW50Q29uZmlnLkRFRkFVTFRfT0JTRVJWQUJJTElUWV9NRVRSSUNfU1ZDX05BTUU7XG5cbiAgICAvLyBJbml0aWFsaXplIHNlc3Npb24gc3RvcmUgKFMzIGJ1Y2tldCBmb3IgU3RyYW5kcy1uYXRpdmUgUzNTZXNzaW9uTWFuYWdlcilcbiAgICBpZiAocHJvcHMuc2Vzc2lvblN0b3JlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JlID0gcHJvcHMuc2Vzc2lvblN0b3JlO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuc2Vzc2lvblN0b3JlID09PSB1bmRlZmluZWQgJiYgcHJvcHMuc2Vzc2lvbkJ1Y2tldCkge1xuICAgICAgdGhpcy5zZXNzaW9uU3RvcmUgPSBuZXcgUzNTZXNzaW9uTWFuYWdlcih0aGlzLCAnU2Vzc2lvbk1hbmFnZXInLCB7XG4gICAgICAgIGJ1Y2tldDogcHJvcHMuc2Vzc2lvbkJ1Y2tldCxcbiAgICAgICAgc2Vzc2lvblRUTDogcHJvcHMuc2Vzc2lvblRUTCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0OiBjcmVhdGUgUzNTZXNzaW9uTWFuYWdlciAoYnVja2V0IHVzZWQgYnkgU3RyYW5kcy1uYXRpdmUgc2Vzc2lvbiBtYW5hZ2VyKVxuICAgICAgdGhpcy5zZXNzaW9uU3RvcmUgPSBuZXcgUzNTZXNzaW9uTWFuYWdlcih0aGlzLCAnU2Vzc2lvbk1hbmFnZXInLCB7XG4gICAgICAgIHNlc3Npb25UVEw6IHByb3BzLnNlc3Npb25UVEwsXG4gICAgICAgIGVuY3J5cHRpb25LZXk6IHByb3BzLmVuY3J5cHRpb25LZXksXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3ksXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZXNzaW9uQnVja2V0ID0gdGhpcy5zZXNzaW9uU3RvcmU/LnNlc3Npb25CdWNrZXQ7XG5cbiAgICAvLyBJbml0aWFsaXplIHNlc3Npb24gaW5kZXggKER5bmFtb0RCIHRhYmxlIGZvciB1c2Vy4oaSc2Vzc2lvbiBsb29rdXBzKVxuICAgIGlmIChwcm9wcy5zZXNzaW9uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXNzaW9uSW5kZXggPSBwcm9wcy5zZXNzaW9uSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQ6IGNyZWF0ZSBEeW5hbW9EQlNlc3Npb25JbmRleFxuICAgICAgdGhpcy5zZXNzaW9uSW5kZXggPSBuZXcgRHluYW1vREJTZXNzaW9uSW5kZXgodGhpcywgJ1Nlc3Npb25JbmRleCcsIHtcbiAgICAgICAgc2Vzc2lvblRUTDogcHJvcHMuc2Vzc2lvblRUTCxcbiAgICAgICAgZW5jcnlwdGlvbktleTogcHJvcHMuZW5jcnlwdGlvbktleSxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENvbnRleHQgc3RyYXRlZ3kgaXMgZGVwcmVjYXRlZCDigJQgU3RyYW5kcy1uYXRpdmUgY29udmVyc2F0aW9uIG1hbmFnZXIgaGFuZGxlcyB0aGlzLlxuICAgIC8vIEtlZXAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYnV0IGRvIG5vdCB1c2UgZW52IHZhcnMuXG4gICAgaWYgKHByb3BzLmNvbnRleHRTdHJhdGVneSkge1xuICAgICAgdGhpcy5jb250ZXh0U3RyYXRlZ3kgPSBwcm9wcy5jb250ZXh0U3RyYXRlZ3k7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGV4dFN0cmF0ZWd5ID0gbmV3IFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyKHtcbiAgICAgICAgd2luZG93U2l6ZTogcHJvcHMubWVzc2FnZUhpc3RvcnlMaW1pdCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGJhc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgTU9ERUxfSUQ6IG1vZGVsSWQsXG4gICAgICBTWVNURU1fUFJPTVBUX1MzX0JVQ0tFVF9OQU1FOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzQnVja2V0TmFtZSxcbiAgICAgIFNZU1RFTV9QUk9NUFRfUzNfS0VZOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzT2JqZWN0S2V5LFxuICAgICAgVE9PTFNfQ09ORklHOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zKSxcbiAgICAgIC4uLlBvd2VydG9vbHNDb25maWcuZ2VuZXJhdGVEZWZhdWx0TGFtYmRhQ29uZmlnKFxuICAgICAgICBwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5LFxuICAgICAgICBtZXRyaWNOYW1lc3BhY2UsXG4gICAgICAgIG1ldHJpY1NlcnZpY2VOYW1lLFxuICAgICAgICAnREVCVUcnLFxuICAgICAgKSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIHNlc3Npb24gYnVja2V0IGVudiB2YXIgaWYgc2Vzc2lvbiBzdG9yZSBleGlzdHNcbiAgICBpZiAodGhpcy5zZXNzaW9uQnVja2V0KSB7XG4gICAgICBlbnYuU0VTU0lPTl9CVUNLRVQgPSB0aGlzLnNlc3Npb25CdWNrZXQuYnVja2V0TmFtZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgc2Vzc2lvbiBpbmRleCBlbnYgdmFycyBpZiBzZXNzaW9uIGluZGV4IGV4aXN0c1xuICAgIGlmICh0aGlzLnNlc3Npb25JbmRleCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihlbnYsIHRoaXMuc2Vzc2lvbkluZGV4LmVudmlyb25tZW50VmFyaWFibGVzKCkpO1xuICAgIH1cblxuICAgIC8vIEFkZCBrbm93bGVkZ2UgYmFzZSBjb25maWd1cmF0aW9uIGlmIEtCcyBhcmUgY29uZmlndXJlZFxuICAgIGlmICh0aGlzLmtub3dsZWRnZUJhc2VDb25maWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVudi5LTk9XTEVER0VfQkFTRVNfQ09ORklHID0gSlNPTi5zdHJpbmdpZnkodGhpcy5rbm93bGVkZ2VCYXNlQ29uZmlncyk7XG4gICAgICBlbnYuS05PV0xFREdFX0JBU0VfU1lTVEVNX1BST01QVF9BRERJVElPTiA9IGdlbmVyYXRlS25vd2xlZGdlQmFzZVN5c3RlbVByb21wdEFkZGl0aW9uKHRoaXMua25vd2xlZGdlQmFzZUNvbmZpZ3MpO1xuICAgIH1cblxuICAgIC8vIERlcGxveSB2aWEgaG9zdGluZyBhZGFwdGVyXG4gICAgY29uc3QgaG9zdGluZ1Jlc3VsdCA9IGhvc3RpbmdBZGFwdGVyLmRlcGxveSh7XG4gICAgICBzY29wZTogdGhpcyxcbiAgICAgIGFnZW50TmFtZTogcHJvcHMuYWdlbnROYW1lLFxuICAgICAgYWdlbnRSb2xlOiB0aGlzLmFnZW50Um9sZSxcbiAgICAgIGVudmlyb25tZW50OiBlbnYsXG4gICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmVuY3J5cHRpb25LZXksXG4gICAgICBuZXR3b3JrOiBwcm9wcy5uZXR3b3JrLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBwcm9wcy5hcmNoaXRlY3R1cmUsXG4gICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplLFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dCxcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IHByb3BzLnJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMsXG4gICAgICBsYW1iZGFMYXllcnM6IHByb3BzLmFnZW50RGVmaW5pdGlvbi5sYW1iZGFMYXllcnMsXG4gICAgICBrbm93bGVkZ2VCYXNlTGF5ZXJzOiB0aGlzLmtub3dsZWRnZUJhc2VMYXllcnMsXG4gICAgICBlbmFibGVPYnNlcnZhYmlsaXR5OiBwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5LFxuICAgICAgdG9vbHNDb25maWc6IEpTT04uc3RyaW5naWZ5KHRoaXMuYWdlbnRUb29sc0xvY2F0aW9uRGVmaW5pdGlvbnMpLFxuICAgICAgc3lzdGVtUHJvbXB0QnVja2V0OiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzQnVja2V0TmFtZSxcbiAgICAgIHN5c3RlbVByb21wdEtleTogcHJvcHMuYWdlbnREZWZpbml0aW9uLnN5c3RlbVByb21wdC5zM09iamVjdEtleSxcbiAgICAgIGtub3dsZWRnZUJhc2VDb25maWdzOiB0aGlzLmtub3dsZWRnZUJhc2VDb25maWdzLmxlbmd0aCA+IDAgPyBKU09OLnN0cmluZ2lmeSh0aGlzLmtub3dsZWRnZUJhc2VDb25maWdzKSA6IHVuZGVmaW5lZCxcbiAgICAgIGtub3dsZWRnZUJhc2VTeXN0ZW1Qcm9tcHRBZGRpdGlvbjogdGhpcy5rbm93bGVkZ2VCYXNlQ29uZmlncy5sZW5ndGggPiAwXG4gICAgICAgID8gZ2VuZXJhdGVLbm93bGVkZ2VCYXNlU3lzdGVtUHJvbXB0QWRkaXRpb24odGhpcy5rbm93bGVkZ2VCYXNlQ29uZmlncylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5LFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcGlFbmRwb2ludCA9IGhvc3RpbmdSZXN1bHQuZW5kcG9pbnQ7XG4gICAgdGhpcy5hZ2VudEZ1bmN0aW9uID0gaG9zdGluZ1Jlc3VsdC5hZ2VudEZ1bmN0aW9uO1xuICAgIHRoaXMuY2ZuUnVudGltZSA9IGhvc3RpbmdSZXN1bHQuY2ZuUnVudGltZTtcblxuICAgIC8vIFNldCBhZGFwdGVyIGFuZCBhdXRoZW50aWNhdG9yIHJlZmVyZW5jZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBpZiAoaG9zdGluZ0FkYXB0ZXIgaW5zdGFuY2VvZiBMYW1iZGFIb3N0aW5nQWRhcHRlcikge1xuICAgICAgdGhpcy5hZGFwdGVyID0gaG9zdGluZ0FkYXB0ZXIuY29tbXVuaWNhdGlvbkFkYXB0ZXI7XG4gICAgICB0aGlzLmF1dGhlbnRpY2F0b3IgPSBob3N0aW5nQWRhcHRlci5hdXRoZW50aWNhdG9yO1xuXG4gICAgICAvLyBFeHBvc2UgUkVTVCBBUEkgYW5kIENvZ25pdG8gYXV0aG9yaXplciBmcm9tIHRoZSBjb21tdW5pY2F0aW9uIGFkYXB0ZXJcbiAgICAgIGlmICh0aGlzLmFkYXB0ZXIgaW5zdGFuY2VvZiBTdHJlYW1pbmdIdHRwQWRhcHRlcikge1xuICAgICAgICB0aGlzLnJlc3RBcGkgPSB0aGlzLmFkYXB0ZXIucmVzdEFwaTtcbiAgICAgICAgdGhpcy5jb2duaXRvQXV0aG9yaXplciA9IHRoaXMuYWRhcHRlci5jb2duaXRvQXV0aG9yaXplcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHcmFudCBzeXN0ZW0gcHJvbXB0IHJlYWQgYWNjZXNzXG4gICAgcHJvcHMuYWdlbnREZWZpbml0aW9uLnN5c3RlbVByb21wdC5ncmFudFJlYWQodGhpcy5hZ2VudFJvbGUpO1xuXG4gICAgLy8gR3JhbnQgc2Vzc2lvbiBzdG9yZSBhY2Nlc3NcbiAgICBpZiAodGhpcy5zZXNzaW9uU3RvcmUpIHtcbiAgICAgIGlmICh0aGlzLmFnZW50RnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmUuZ3JhbnRSZWFkV3JpdGUodGhpcy5hZ2VudEZ1bmN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXNzaW9uQnVja2V0KSB7XG4gICAgICAgIC8vIEZvciBBZ2VudENvcmUgaG9zdGluZywgZ3JhbnQgdGhlIGFnZW50IHJvbGUgZGlyZWN0IFMzIGFjY2Vzc1xuICAgICAgICB0aGlzLnNlc3Npb25CdWNrZXQuZ3JhbnRSZWFkV3JpdGUodGhpcy5hZ2VudFJvbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdyYW50IHNlc3Npb24gaW5kZXggYWNjZXNzXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkluZGV4KSB7XG4gICAgICB0aGlzLnNlc3Npb25JbmRleC5ncmFudFJlYWRXcml0ZSh0aGlzLmFnZW50Um9sZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBJbnRlcmFjdGl2ZUFnZW50IHByb3BzLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVByb3BzKHByb3BzOiBJbnRlcmFjdGl2ZUFnZW50UHJvcHMpOiB2b2lkIHtcbiAgICBpZiAoIXByb3BzLmFnZW50TmFtZSB8fCBwcm9wcy5hZ2VudE5hbWUudHJpbSgpID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhZ2VudE5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLm1lbW9yeVNpemUgIT09IHVuZGVmaW5lZCAmJiAocHJvcHMubWVtb3J5U2l6ZSA8IDEyOCB8fCBwcm9wcy5tZW1vcnlTaXplID4gMTAyNDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21lbW9yeVNpemUgbXVzdCBiZSBiZXR3ZWVuIDEyOCBhbmQgMTAyNDAgTUInKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0aW1lb3V0U2Vjb25kcyA9IHByb3BzLnRpbWVvdXQudG9TZWNvbmRzKCk7XG4gICAgICBpZiAodGltZW91dFNlY29uZHMgPCAxIHx8IHRpbWVvdXRTZWNvbmRzID4gOTAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGltZW91dCBtdXN0IGJlIGJldHdlZW4gMSBzZWNvbmQgYW5kIDE1IG1pbnV0ZXMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcHMubWVzc2FnZUhpc3RvcnlMaW1pdCAhPT0gdW5kZWZpbmVkICYmIChwcm9wcy5tZXNzYWdlSGlzdG9yeUxpbWl0IDwgMSB8fCBwcm9wcy5tZXNzYWdlSGlzdG9yeUxpbWl0ID4gMTAwMCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWVzc2FnZUhpc3RvcnlMaW1pdCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwMCcpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -103,5 +103,5 @@ class BaseKnowledgeBase extends constructs_1.Construct {
|
|
|
103
103
|
}
|
|
104
104
|
exports.BaseKnowledgeBase = BaseKnowledgeBase;
|
|
105
105
|
_a = JSII_RTTI_SYMBOL_1;
|
|
106
|
-
BaseKnowledgeBase[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseKnowledgeBase", version: "1.
|
|
106
|
+
BaseKnowledgeBase[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseKnowledgeBase", version: "1.17.0" };
|
|
107
107
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1rbm93bGVkZ2UtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYWdlbnRzL2tub3dsZWRnZS1iYXNlL2Jhc2Uta25vd2xlZGdlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFNQSwyQ0FBdUM7QUFTdkM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFzQixpQkFBa0IsU0FBUSxzQkFBUztJQWlDdkQ7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDTyxhQUFhLENBQUMsS0FBNkI7UUFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBWUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQy9CLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUztTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksa0JBQWtCO1FBQ3ZCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLG1CQUFtQjtRQUN4QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOztBQTlISCw4Q0ErSEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgTGF5ZXJWZXJzaW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJS25vd2xlZGdlQmFzZSB9IGZyb20gJy4vaS1rbm93bGVkZ2UtYmFzZSc7XG5pbXBvcnQge1xuICBBY2xDb25maWd1cmF0aW9uLFxuICBCYXNlS25vd2xlZGdlQmFzZVByb3BzLFxuICBLbm93bGVkZ2VCYXNlUnVudGltZUNvbmZpZyxcbiAgUmV0cmlldmFsQ29uZmlndXJhdGlvbixcbn0gZnJvbSAnLi9rbm93bGVkZ2UtYmFzZS1wcm9wcyc7XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Iga25vd2xlZGdlIGJhc2UgaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCBrbm93bGVkZ2UgYmFzZSBpbXBsZW1lbnRhdGlvbnMsXG4gKiBpbmNsdWRpbmcgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50LCB2YWxpZGF0aW9uLCBhbmQgZGVmYXVsdCBiZWhhdmlvcnMuIENvbmNyZXRlXG4gKiBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgQmVkcm9ja0tub3dsZWRnZUJhc2UpIGV4dGVuZCB0aGlzIGNsYXNzIGFuZCBpbXBsZW1lbnRcbiAqIHRoZSBhYnN0cmFjdCBtZXRob2RzLlxuICpcbiAqIFRoZSBiYXNlIGNsYXNzIGhhbmRsZXM6XG4gKiAtIFByb3BzIHZhbGlkYXRpb24gKG5hbWUgYW5kIGRlc2NyaXB0aW9uIGFyZSByZXF1aXJlZClcbiAqIC0gRGVmYXVsdCByZXRyaWV2YWwgY29uZmlndXJhdGlvbiAobnVtYmVyT2ZSZXN1bHRzIGRlZmF1bHRzIHRvIDUpXG4gKiAtIEFDTCBjb25maWd1cmF0aW9uIHN0b3JhZ2VcbiAqIC0gQmFzZSBydW50aW1lIGNvbmZpZ3VyYXRpb24gZXhwb3J0XG4gKlxuICogU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudDpcbiAqIC0gYGdlbmVyYXRlSWFtUGVybWlzc2lvbnMoKWA6IFJldHVybiBJQU0gcGVybWlzc2lvbnMgc3BlY2lmaWMgdG8gdGhlIEtCIHR5cGVcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VLbm93bGVkZ2VCYXNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUtub3dsZWRnZUJhc2Uge1xuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBrbm93bGVkZ2UgYmFzZS5cbiAgICpcbiAgICogVGhpcyBuYW1lIGlzIHVzZWQgZm9yIGxvZ2dpbmcsIGRpc3BsYXkgcHVycG9zZXMsIGFuZCB0byBoZWxwIHRoZSBhZ2VudFxuICAgKiBpZGVudGlmeSB3aGljaCBrbm93bGVkZ2UgYmFzZSB0byBxdWVyeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBrbm93bGVkZ2UgYmFzZSBjb250YWlucy5cbiAgICpcbiAgICogVGhpcyBkZXNjcmlwdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgYWdlbnQncyBzeXN0ZW0gcHJvbXB0IHRvIGhlbHBcbiAgICogdGhlIGFnZW50IGRlY2lkZSB3aGVuIHRvIHF1ZXJ5IHRoaXMga25vd2xlZGdlIGJhc2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogUmV0cmlldmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMga25vd2xlZGdlIGJhc2UuXG4gICAqXG4gICAqIENvbnRhaW5zIHNldHRpbmdzIGxpa2UgbnVtYmVyT2ZSZXN1bHRzIGFuZCBvcHRpb25hbCBtZXRhZGF0YSBmaWx0ZXJzLlxuICAgKiBEZWZhdWx0cyB0byB7IG51bWJlck9mUmVzdWx0czogNSB9IGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSByZXRyaWV2YWxDb25maWc6IFJldHJpZXZhbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEFDTCBjb25maWd1cmF0aW9uIGZvciBpZGVudGl0eS1hd2FyZSByZXRyaWV2YWwuXG4gICAqXG4gICAqIFdoZW4gZW5hYmxlZCwgcmV0cmlldmFsIHF1ZXJpZXMgd2lsbCBiZSBmaWx0ZXJlZCBiYXNlZCBvbiB1c2VyXG4gICAqIGlkZW50aXR5IGNvbnRleHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWNsQ29uZmlnPzogQWNsQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBCYXNlS25vd2xlZGdlQmFzZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRFxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBrbm93bGVkZ2UgYmFzZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG5hbWUgaXMgZW1wdHkgb3Igbm90IHByb3ZpZGVkXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgZGVzY3JpcHRpb24gaXMgZW1wdHkgb3Igbm90IHByb3ZpZGVkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzZUtub3dsZWRnZUJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlUHJvcHMocHJvcHMpO1xuXG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgdGhpcy5yZXRyaWV2YWxDb25maWcgPSBwcm9wcy5yZXRyaWV2YWwgPz8geyBudW1iZXJPZlJlc3VsdHM6IDUgfTtcbiAgICB0aGlzLmFjbENvbmZpZyA9IHByb3BzLmFjbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIHByb3BzIGF0IGNvbnN0cnVjdGlvbiB0aW1lLlxuICAgKlxuICAgKiBFbnN1cmVzIHRoYXQgcmVxdWlyZWQgZmllbGRzIChuYW1lIGFuZCBkZXNjcmlwdGlvbikgYXJlIHByb3ZpZGVkXG4gICAqIGFuZCBub3QgZW1wdHkuIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCBhZGRpdGlvbmFsXG4gICAqIHZhbGlkYXRpb24sIGJ1dCBzaG91bGQgY2FsbCBzdXBlci52YWxpZGF0ZVByb3BzKCkgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBwcm9wcyB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG5hbWUgaXMgZW1wdHkgb3Igbm90IHByb3ZpZGVkXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgZGVzY3JpcHRpb24gaXMgZW1wdHkgb3Igbm90IHByb3ZpZGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVQcm9wcyhwcm9wczogQmFzZUtub3dsZWRnZUJhc2VQcm9wcyk6IHZvaWQge1xuICAgIGlmICghcHJvcHMubmFtZSB8fCBwcm9wcy5uYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbmFtZSBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmICghcHJvcHMuZGVzY3JpcHRpb24gfHwgcHJvcHMuZGVzY3JpcHRpb24udHJpbSgpID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXNjcmlwdGlvbiBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIElBTSBwb2xpY3kgc3RhdGVtZW50cyByZXF1aXJlZCBmb3IgYWNjZXNzaW5nIHRoaXMga25vd2xlZGdlIGJhc2UuXG4gICAqXG4gICAqIFRoaXMgYWJzdHJhY3QgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byByZXR1cm4gdGhlXG4gICAqIHNwZWNpZmljIElBTSBwZXJtaXNzaW9ucyBuZWVkZWQgZm9yIHRoZWlyIGtub3dsZWRnZSBiYXNlIHR5cGUuXG4gICAqXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIElBTSBQb2xpY3lTdGF0ZW1lbnQgb2JqZWN0cyBncmFudGluZyBuZWNlc3NhcnkgcGVybWlzc2lvbnNcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZW5lcmF0ZUlhbVBlcm1pc3Npb25zKCk6IFBvbGljeVN0YXRlbWVudFtdO1xuXG4gIC8qKlxuICAgKiBFeHBvcnQgY29uZmlndXJhdGlvbiBmb3IgcnVudGltZSB1c2UgYnkgdGhlIHJldHJpZXZhbCB0b29sLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgY29uZmlndXJhdGlvbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzZSBrbm93bGVkZ2UgYmFzZVxuICAgKiBzZXR0aW5ncy4gU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gYWRkIGltcGxlbWVudGF0aW9uLVxuICAgKiBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBjYWxsaW5nIHN1cGVyLmV4cG9ydENvbmZpZ3VyYXRpb24oKSB0byBpbmNsdWRlXG4gICAqIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIFJ1bnRpbWUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSByZXRyaWV2YWwgdG9vbFxuICAgKi9cbiAgcHVibGljIGV4cG9ydENvbmZpZ3VyYXRpb24oKTogS25vd2xlZGdlQmFzZVJ1bnRpbWVDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIHJldHJpZXZhbDogdGhpcy5yZXRyaWV2YWxDb25maWcsXG4gICAgICBhY2w6IHRoaXMuYWNsQ29uZmlnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZSB0aGUgcmV0cmlldmFsIHRvb2wgYXNzZXQgZm9yIHRoaXMga25vd2xlZGdlIGJhc2UgdHlwZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgcmV0dXJucyB1bmRlZmluZWQgdG8gdXNlIHRoZSBmcmFtZXdvcmsncyBkZWZhdWx0IHJldHJpZXZhbFxuICAgKiB0b29sLiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIGEgY3VzdG9tIHJldHJpZXZhbFxuICAgKiB0b29sIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB1bmRlZmluZWQgdG8gdXNlIHRoZSBkZWZhdWx0IHJldHJpZXZhbCB0b29sXG4gICAqL1xuICBwdWJsaWMgcmV0cmlldmFsVG9vbEFzc2V0KCk6IEFzc2V0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgTGFtYmRhIGxheWVycyByZXF1aXJlZCBieSB0aGUgcmV0cmlldmFsIHRvb2wuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHJldHVybnMgdW5kZWZpbmVkIGluZGljYXRpbmcgbm8gYWRkaXRpb25hbCBsYXllcnMgYXJlIG5lZWRlZC5cbiAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlkZSBMYW1iZGEgbGF5ZXJzIGNvbnRhaW5pbmdcbiAgICogZGVwZW5kZW5jaWVzIHJlcXVpcmVkIGJ5IHRoZWlyIHJldHJpZXZhbCB0b29sLlxuICAgKlxuICAgKiBAcmV0dXJucyB1bmRlZmluZWQgaW5kaWNhdGluZyBubyBhZGRpdGlvbmFsIGxheWVycyBuZWVkZWRcbiAgICovXG4gIHB1YmxpYyByZXRyaWV2YWxUb29sTGF5ZXJzKCk6IExheWVyVmVyc2lvbltdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|
|
@@ -188,5 +188,5 @@ class BedrockKnowledgeBase extends base_knowledge_base_1.BaseKnowledgeBase {
|
|
|
188
188
|
}
|
|
189
189
|
exports.BedrockKnowledgeBase = BedrockKnowledgeBase;
|
|
190
190
|
_a = JSII_RTTI_SYMBOL_1;
|
|
191
|
-
BedrockKnowledgeBase[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockKnowledgeBase", version: "1.
|
|
191
|
+
BedrockKnowledgeBase[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockKnowledgeBase", version: "1.17.0" };
|
|
192
192
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay1rbm93bGVkZ2UtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYWdlbnRzL2tub3dsZWRnZS1iYXNlL2JlZHJvY2sta25vd2xlZGdlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLDZCQUE2QjtBQUM3Qiw2Q0FBb0M7QUFDcEMsaURBQThEO0FBQzlELDZEQUFrRDtBQUVsRCwrREFBMEQ7QUFTMUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSx1Q0FBaUI7SUFxRHpEOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdDO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQyxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBRTdCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCO1lBQ25CLEtBQUssQ0FBQyxnQkFBZ0I7Z0JBQ3RCLG1CQUFtQixJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLG1CQUFtQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3ZDLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFdBQVcs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QUksZ0JBQWdCLEdBQUc7aUJBQzlFO2FBQ0YsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLG1CQUFtQjtRQUN4QixPQUFPO1lBQ0wsR0FBRyxLQUFLLENBQUMsbUJBQW1CLEVBQUU7WUFDOUIsSUFBSSxFQUFFLFNBQVM7WUFDZixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUNuQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWU7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLHFCQUFLLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQzdDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxrQ0FBa0MsQ0FBQztZQUM5RCxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBeE9ILG9EQXlPQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJhc2VLbm93bGVkZ2VCYXNlIH0gZnJvbSAnLi9iYXNlLWtub3dsZWRnZS1iYXNlJztcbmltcG9ydCB7XG4gIEJlZHJvY2tLbm93bGVkZ2VCYXNlUHJvcHMsXG4gIENyZWF0ZUtub3dsZWRnZUJhc2VDb25maWd1cmF0aW9uLFxuICBHdWFyZHJhaWxDb25maWd1cmF0aW9uLFxuICBLbm93bGVkZ2VCYXNlUnVudGltZUNvbmZpZyxcbiAgVmVjdG9yU3RvcmVDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL2tub3dsZWRnZS1iYXNlLXByb3BzJztcblxuLyoqXG4gKiBBbWF6b24gQmVkcm9jayBLbm93bGVkZ2UgQmFzZSBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGludGVncmF0aW9uIHdpdGggQW1hem9uIEJlZHJvY2sgS25vd2xlZGdlIEJhc2VzLFxuICogd2hpY2ggdXNlIHZlY3RvciBzdG9yZXMgKFMzIFZlY3RvcnMgYnkgZGVmYXVsdCkgZm9yIHNlbWFudGljIHNlYXJjaC5cbiAqIEl0IGlzIHRoZSBkZWZhdWx0IGtub3dsZWRnZSBiYXNlIGltcGxlbWVudGF0aW9uIHdoZW4gbm9uZSBpcyBzcGVjaWZpZWQuXG4gKlxuICogVGhlIGltcGxlbWVudGF0aW9uIGhhbmRsZXM6XG4gKiAtIEFSTiBjb25zdHJ1Y3Rpb24gZnJvbSBrbm93bGVkZ2UgYmFzZSBJRCAoaWYgQVJOIG5vdCBwcm92aWRlZClcbiAqIC0gSUFNIHBlcm1pc3Npb24gZ2VuZXJhdGlvbiBmb3IgQmVkcm9jayBSZXRyaWV2ZSBhbmQgUmV0cmlldmVBbmRHZW5lcmF0ZSBBUElzXG4gKiAtIE9wdGlvbmFsIGd1YXJkcmFpbCBjb25maWd1cmF0aW9uIGZvciBjb250ZW50IGZpbHRlcmluZ1xuICogLSBSdW50aW1lIGNvbmZpZ3VyYXRpb24gZXhwb3J0IGZvciB0aGUgcmV0cmlldmFsIHRvb2xcbiAqL1xuZXhwb3J0IGNsYXNzIEJlZHJvY2tLbm93bGVkZ2VCYXNlIGV4dGVuZHMgQmFzZUtub3dsZWRnZUJhc2Uge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgQmVkcm9jayBLbm93bGVkZ2UgQmFzZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgSUQgYXNzaWduZWQgYnkgQmVkcm9jayB3aGVuIHRoZSBrbm93bGVkZ2UgYmFzZSB3YXMgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBrbm93bGVkZ2VCYXNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgQmVkcm9jayBLbm93bGVkZ2UgQmFzZS5cbiAgICpcbiAgICogSWYgbm90IHByb3ZpZGVkIGluIHByb3BzLCB0aGlzIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIGtub3dsZWRnZUJhc2VJZFxuICAgKiB1c2luZyB0aGUgY3VycmVudCByZWdpb24gYW5kIGFjY291bnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkga25vd2xlZGdlQmFzZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHdWFyZHJhaWwgY29uZmlndXJhdGlvbiBmb3IgY29udGVudCBmaWx0ZXJpbmcuXG4gICAqXG4gICAqIFdoZW4gY29uZmlndXJlZCwgdGhlIGd1YXJkcmFpbCB3aWxsIGJlIGFwcGxpZWQgZHVyaW5nIHJldHJpZXZhbFxuICAgKiBvcGVyYXRpb25zIHRvIGZpbHRlciBpbmFwcHJvcHJpYXRlIG9yIHNlbnNpdGl2ZSBjb250ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBndWFyZHJhaWxDb25maWc/OiBHdWFyZHJhaWxDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBWZWN0b3Igc3RvcmUgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogRGVmaW5lcyB0aGUgdHlwZSBvZiB2ZWN0b3Igc3RvcmUgdXNlZCBieSB0aGlzIGtub3dsZWRnZSBiYXNlLlxuICAgKiBEZWZhdWx0cyB0byBTMyBWZWN0b3JzIGlmIG5vdCBzcGVjaWZpZWQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHZlY3RvclN0b3JlQ29uZmlnOiBWZWN0b3JTdG9yZUNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGNyZWF0aW5nIGEgbmV3IGtub3dsZWRnZSBiYXNlLlxuICAgKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbnN0cnVjdCBzaG91bGQgY3JlYXRlIGEgbmV3XG4gICAqIEJlZHJvY2sgS25vd2xlZGdlIEJhc2UgcmF0aGVyIHRoYW4gcmVmZXJlbmNlIGFuIGV4aXN0aW5nIG9uZS5cbiAgICpcbiAgICogTm90ZTogS0IgY3JlYXRpb24gaXMgYW4gYWR2YW5jZWQgZmVhdHVyZS4gQ3VycmVudGx5LCB0aGlzIHByb3BlcnR5XG4gICAqIHN0b3JlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVDb25maWc/OiBDcmVhdGVLbm93bGVkZ2VCYXNlQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gd2hlcmUgdGhlIGtub3dsZWRnZSBiYXNlIGlzIGRlcGxveWVkLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEIHdoZXJlIHRoZSBrbm93bGVkZ2UgYmFzZSBpcyBkZXBsb3llZC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElEXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIEJlZHJvY2sgS25vd2xlZGdlIEJhc2VcbiAgICogQHRocm93cyBFcnJvciBpZiBrbm93bGVkZ2VCYXNlSWQgaXMgZW1wdHkgb3Igbm90IHByb3ZpZGVkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmVkcm9ja0tub3dsZWRnZUJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy52YWxpZGF0ZUJlZHJvY2tQcm9wcyhwcm9wcyk7XG5cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIHRoaXMucmVnaW9uID0gc3RhY2sucmVnaW9uO1xuICAgIHRoaXMuYWNjb3VudCA9IHN0YWNrLmFjY291bnQ7XG5cbiAgICB0aGlzLmtub3dsZWRnZUJhc2VJZCA9IHByb3BzLmtub3dsZWRnZUJhc2VJZDtcbiAgICB0aGlzLmtub3dsZWRnZUJhc2VBcm4gPVxuICAgICAgcHJvcHMua25vd2xlZGdlQmFzZUFybiA/P1xuICAgICAgYGFybjphd3M6YmVkcm9jazoke3RoaXMucmVnaW9ufToke3RoaXMuYWNjb3VudH06a25vd2xlZGdlLWJhc2UvJHtwcm9wcy5rbm93bGVkZ2VCYXNlSWR9YDtcbiAgICB0aGlzLmd1YXJkcmFpbENvbmZpZyA9IHByb3BzLmd1YXJkcmFpbDtcbiAgICAvLyBEZWZhdWx0IHRvIFMzIFZlY3RvcnMgaWYgbm90IHNwZWNpZmllZFxuICAgIHRoaXMudmVjdG9yU3RvcmVDb25maWcgPSBwcm9wcy52ZWN0b3JTdG9yZSA/PyB7IHR5cGU6ICdzMy12ZWN0b3JzJyB9O1xuICAgIHRoaXMuY3JlYXRlQ29uZmlnID0gcHJvcHMuY3JlYXRlO1xuXG4gICAgLy8gTm90ZTogS0IgY3JlYXRpb24gaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IHdoZW4gY3JlYXRlIGNvbmZpZyBpcyBwcm92aWRlZFxuICAgIC8vIFRoaXMgaXMgYW4gYWR2YW5jZWQgZmVhdHVyZSB0aGF0IHdpbGwgY3JlYXRlIGFjdHVhbCBBV1MgcmVzb3VyY2VzXG4gICAgaWYgKHRoaXMuY3JlYXRlQ29uZmlnKSB7XG4gICAgICB0aGlzLnNldHVwS25vd2xlZGdlQmFzZUNyZWF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAga25vd2xlZGdlIGJhc2UgY3JlYXRpb24gd2hlbiBjcmVhdGUgY29uZmlndXJhdGlvbiBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gd2hlbiB0aGUgYGNyZWF0ZWAgcHJvcGVydHlcbiAgICogaXMgc3BlY2lmaWVkLiBJdCBwcmVwYXJlcyB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcyBmb3IgY3JlYXRpbmcgYSBuZXdcbiAgICogQmVkcm9jayBLbm93bGVkZ2UgQmFzZS5cbiAgICpcbiAgICogTm90ZTogRnVsbCBLQiBjcmVhdGlvbiBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyBDbG91ZEZvcm1hdGlvbiBjdXN0b21cbiAgICogcmVzb3VyY2VzIG9yIEwxIGNvbnN0cnVjdHMuIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cEtub3dsZWRnZUJhc2VDcmVhdGlvbigpOiB2b2lkIHtcbiAgICAvLyBLQiBjcmVhdGlvbiBpcyBhbiBhZHZhbmNlZCBmZWF0dXJlXG4gICAgLy8gVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBpbnZvbHZlOlxuICAgIC8vIDEuIENyZWF0aW5nIGFuIElBTSByb2xlIGZvciBCZWRyb2NrIEtCXG4gICAgLy8gMi4gQ3JlYXRpbmcgdGhlIEJlZHJvY2sgS0IgdmlhIENmbktub3dsZWRnZUJhc2VcbiAgICAvLyAzLiBDcmVhdGluZyBhIGRhdGEgc291cmNlIHBvaW50aW5nIHRvIHRoZSBTMyBidWNrZXRcbiAgICAvLyA0LiBDb25maWd1cmluZyB0aGUgZW1iZWRkaW5nIG1vZGVsXG4gICAgLy8gNS4gU2V0dGluZyB1cCB0aGUgdmVjdG9yIHN0b3JlIChTMyBWZWN0b3JzIGJ5IGRlZmF1bHQpXG4gICAgLy9cbiAgICAvLyBGb3Igbm93LCB0aGlzIHN0b3JlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgcmVmZXJlbmNlLlxuICAgIC8vIFVzZXJzIHNob3VsZCBjcmVhdGUgS0JzIHZpYSB0aGUgQmVkcm9jayBjb25zb2xlIG9yIENMSVxuICAgIC8vIGFuZCByZWZlcmVuY2UgdGhlbSBieSBJRC5cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgQmVkcm9jay1zcGVjaWZpYyBwcm9wcyBhdCBjb25zdHJ1Y3Rpb24gdGltZS5cbiAgICpcbiAgICogRW5zdXJlcyB0aGF0IHRoZSBrbm93bGVkZ2VCYXNlSWQgaXMgcHJvdmlkZWQgYW5kIG5vdCBlbXB0eS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHByb3BzIHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYga25vd2xlZGdlQmFzZUlkIGlzIGVtcHR5IG9yIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUJlZHJvY2tQcm9wcyhwcm9wczogQmVkcm9ja0tub3dsZWRnZUJhc2VQcm9wcyk6IHZvaWQge1xuICAgIGlmICghcHJvcHMua25vd2xlZGdlQmFzZUlkIHx8IHByb3BzLmtub3dsZWRnZUJhc2VJZC50cmltKCkgPT09ICcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tub3dsZWRnZUJhc2VJZCBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIElBTSBwb2xpY3kgc3RhdGVtZW50cyByZXF1aXJlZCBmb3IgYWNjZXNzaW5nIHRoaXMgQmVkcm9jayBLbm93bGVkZ2UgQmFzZS5cbiAgICpcbiAgICogUmV0dXJucyBwZXJtaXNzaW9ucyBmb3I6XG4gICAqIC0gYmVkcm9jazpSZXRyaWV2ZSAtIFF1ZXJ5IHRoZSBrbm93bGVkZ2UgYmFzZVxuICAgKiAtIGJlZHJvY2s6UmV0cmlldmVBbmRHZW5lcmF0ZSAtIFF1ZXJ5IGFuZCBnZW5lcmF0ZSByZXNwb25zZXNcbiAgICogLSBiZWRyb2NrOkFwcGx5R3VhcmRyYWlsIC0gQXBwbHkgZ3VhcmRyYWlsIChpZiBjb25maWd1cmVkKVxuICAgKiAtIHMzOkdldE9iamVjdCAtIEFjY2VzcyBTMyB2ZWN0b3JzIChpZiB1c2luZyBTMyBWZWN0b3JzIHdpdGggY3VzdG9tIGJ1Y2tldClcbiAgICogLSBzMzpHZXRPYmplY3QgLSBBY2Nlc3MgZGF0YSBzb3VyY2UgYnVja2V0IChpZiBjcmVhdGUgY29uZmlnIHByb3ZpZGVkKVxuICAgKlxuICAgKiBBbGwgcGVybWlzc2lvbnMgYXJlIHNjb3BlZCB0byB0aGUgc3BlY2lmaWMga25vd2xlZGdlIGJhc2UgQVJOXG4gICAqIGZvbGxvd2luZyB0aGUgcHJpbmNpcGxlIG9mIGxlYXN0IHByaXZpbGVnZS5cbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2YgSUFNIFBvbGljeVN0YXRlbWVudCBvYmplY3RzIGdyYW50aW5nIG5lY2Vzc2FyeSBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlSWFtUGVybWlzc2lvbnMoKTogUG9saWN5U3RhdGVtZW50W10ge1xuICAgIGNvbnN0IHN0YXRlbWVudHM6IFBvbGljeVN0YXRlbWVudFtdID0gW1xuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ2JlZHJvY2s6UmV0cmlldmUnLCAnYmVkcm9jazpSZXRyaWV2ZUFuZEdlbmVyYXRlJ10sXG4gICAgICAgIHJlc291cmNlczogW3RoaXMua25vd2xlZGdlQmFzZUFybl0sXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLy8gQWRkIGd1YXJkcmFpbCBwZXJtaXNzaW9ucyBpZiBjb25maWd1cmVkXG4gICAgaWYgKHRoaXMuZ3VhcmRyYWlsQ29uZmlnKSB7XG4gICAgICBzdGF0ZW1lbnRzLnB1c2goXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnYmVkcm9jazpBcHBseUd1YXJkcmFpbCddLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYGFybjphd3M6YmVkcm9jazoke3RoaXMucmVnaW9ufToke3RoaXMuYWNjb3VudH06Z3VhcmRyYWlsLyR7dGhpcy5ndWFyZHJhaWxDb25maWcuZ3VhcmRyYWlsSWR9YCxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQWRkIFMzIHBlcm1pc3Npb25zIGlmIHVzaW5nIFMzIFZlY3RvcnMgd2l0aCBhIGN1c3RvbSBidWNrZXRcbiAgICBpZiAodGhpcy52ZWN0b3JTdG9yZUNvbmZpZy50eXBlID09PSAnczMtdmVjdG9ycycgJiYgdGhpcy52ZWN0b3JTdG9yZUNvbmZpZy5idWNrZXROYW1lKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB0aGlzLnZlY3RvclN0b3JlQ29uZmlnLnByZWZpeCA/PyAndmVjdG9ycy8nO1xuICAgICAgc3RhdGVtZW50cy5wdXNoKFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ3MzOkdldE9iamVjdCddLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYGFybjphd3M6czM6Ojoke3RoaXMudmVjdG9yU3RvcmVDb25maWcuYnVja2V0TmFtZX0vJHtwcmVmaXh9KmAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFkZCBkYXRhIHNvdXJjZSBidWNrZXQgcGVybWlzc2lvbnMgaWYgY3JlYXRlIGNvbmZpZyBpcyBwcm92aWRlZFxuICAgIGlmICh0aGlzLmNyZWF0ZUNvbmZpZykge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZVByZWZpeCA9IHRoaXMuY3JlYXRlQ29uZmlnLmRhdGFTb3VyY2VQcmVmaXggPz8gJyc7XG4gICAgICBzdGF0ZW1lbnRzLnB1c2goXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnczM6R2V0T2JqZWN0JywgJ3MzOkxpc3RCdWNrZXQnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOnMzOjo6JHt0aGlzLmNyZWF0ZUNvbmZpZy5kYXRhU291cmNlQnVja2V0TmFtZX1gLFxuICAgICAgICAgICAgYGFybjphd3M6czM6Ojoke3RoaXMuY3JlYXRlQ29uZmlnLmRhdGFTb3VyY2VCdWNrZXROYW1lfS8ke2RhdGFTb3VyY2VQcmVmaXh9KmAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBjb25maWd1cmF0aW9uIGZvciBydW50aW1lIHVzZSBieSB0aGUgcmV0cmlldmFsIHRvb2wuXG4gICAqXG4gICAqIFJldHVybnMgYSBjb25maWd1cmF0aW9uIG9iamVjdCBjb250YWluaW5nIGFsbCBCZWRyb2NrLXNwZWNpZmljXG4gICAqIHNldHRpbmdzIG5lZWRlZCB0byBxdWVyeSB0aGUga25vd2xlZGdlIGJhc2UgYXQgcnVudGltZSwgaW5jbHVkaW5nOlxuICAgKiAtIEJhc2UgY29uZmlndXJhdGlvbiAobmFtZSwgZGVzY3JpcHRpb24sIHJldHJpZXZhbCwgYWNsKVxuICAgKiAtIEtub3dsZWRnZSBiYXNlIHR5cGUgKCdiZWRyb2NrJylcbiAgICogLSBLbm93bGVkZ2UgYmFzZSBJRCBhbmQgQVJOXG4gICAqIC0gVmVjdG9yIHN0b3JlIGNvbmZpZ3VyYXRpb25cbiAgICogLSBHdWFyZHJhaWwgY29uZmlndXJhdGlvbiAoaWYgcHJlc2VudClcbiAgICpcbiAgICogQHJldHVybnMgUnVudGltZSBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIHJldHJpZXZhbCB0b29sXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0Q29uZmlndXJhdGlvbigpOiBLbm93bGVkZ2VCYXNlUnVudGltZUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmV4cG9ydENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIHR5cGU6ICdiZWRyb2NrJyxcbiAgICAgIGtub3dsZWRnZUJhc2VJZDogdGhpcy5rbm93bGVkZ2VCYXNlSWQsXG4gICAgICBrbm93bGVkZ2VCYXNlQXJuOiB0aGlzLmtub3dsZWRnZUJhc2VBcm4sXG4gICAgICB2ZWN0b3JTdG9yZTogdGhpcy52ZWN0b3JTdG9yZUNvbmZpZyxcbiAgICAgIGd1YXJkcmFpbDogdGhpcy5ndWFyZHJhaWxDb25maWcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlIHRoZSBCZWRyb2NrLXNwZWNpZmljIHJldHJpZXZhbCB0b29sIGFzc2V0LlxuICAgKlxuICAgKiBSZXR1cm5zIGFuIEFzc2V0IGNvbnRhaW5pbmcgdGhlIFB5dGhvbiByZXRyaWV2YWwgdG9vbCB0aGF0IHVzZXNcbiAgICogdGhlIEFtYXpvbiBCZWRyb2NrIEFnZW50IFJ1bnRpbWUgQVBJIHRvIHF1ZXJ5IGtub3dsZWRnZSBiYXNlcy5cbiAgICogVGhpcyB0b29sIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gYWdlbnRzIHRoYXQgdXNlIEJlZHJvY2tcbiAgICoga25vd2xlZGdlIGJhc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBc3NldCBjb250YWluaW5nIHRoZSBCZWRyb2NrIHJldHJpZXZhbCB0b29sXG4gICAqL1xuICBwdWJsaWMgcmV0cmlldmFsVG9vbEFzc2V0KCk6IEFzc2V0IHtcbiAgICByZXR1cm4gbmV3IEFzc2V0KHRoaXMsICdCZWRyb2NrUmV0cmlldmFsVG9vbCcsIHtcbiAgICAgIHBhdGg6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9yZXNvdXJjZXMva25vd2xlZGdlLWJhc2UtdG9vbCcpLFxuICAgICAgZXhjbHVkZTogWyd0ZXN0XyonLCAnKl90ZXN0LnB5J10sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { BatchAgent, BatchAgentProps } from './batch-agent';
|
|
3
|
+
import { LocalStackEndpointOverrides } from '../localstack';
|
|
4
|
+
export interface LocalStackBatchAgentProps extends BatchAgentProps {
|
|
5
|
+
/**
|
|
6
|
+
* LocalStack endpoint routing configuration for Lambda runtime SDK calls.
|
|
7
|
+
*
|
|
8
|
+
* @default { enabled: true }
|
|
9
|
+
*/
|
|
10
|
+
readonly localStack?: LocalStackEndpointOverrides;
|
|
11
|
+
}
|
|
12
|
+
export declare class LocalStackBatchAgent extends BatchAgent {
|
|
13
|
+
constructor(scope: Construct, id: string, props: LocalStackBatchAgentProps);
|
|
14
|
+
protected resolveAgentRuntimeEntry(): string;
|
|
15
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.LocalStackBatchAgent = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
8
|
+
const batch_agent_1 = require("./batch-agent");
|
|
9
|
+
const localstack_1 = require("../localstack");
|
|
10
|
+
class LocalStackBatchAgent extends batch_agent_1.BatchAgent {
|
|
11
|
+
constructor(scope, id, props) {
|
|
12
|
+
super(scope, id, props);
|
|
13
|
+
const localStackEnv = localstack_1.LocalStackIntegrationUtils.toLambdaEnvironment({
|
|
14
|
+
enabled: true,
|
|
15
|
+
...props.localStack,
|
|
16
|
+
});
|
|
17
|
+
for (const child of this.node.findAll()) {
|
|
18
|
+
if (!(child instanceof aws_lambda_1.Function)) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
for (const [key, value] of Object.entries(localStackEnv)) {
|
|
22
|
+
child.addEnvironment(key, value);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
resolveAgentRuntimeEntry() {
|
|
27
|
+
return path.join(__dirname, 'resources/default-ollama-agent');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.LocalStackBatchAgent = LocalStackBatchAgent;
|
|
31
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
32
|
+
LocalStackBatchAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LocalStackBatchAgent", version: "1.17.0" };
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxzdGFjay1iYXRjaC1hZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYWdlbnRzL2xvY2Fsc3RhY2stYmF0Y2gtYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsdURBQW9FO0FBRXBFLCtDQUE0RDtBQUM1RCw4Q0FBd0Y7QUFXeEYsTUFBYSxvQkFBcUIsU0FBUSx3QkFBVTtJQUNsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdDO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLE1BQU0sYUFBYSxHQUFHLHVDQUEwQixDQUFDLG1CQUFtQixDQUFDO1lBQ25FLE9BQU8sRUFBRSxJQUFJO1lBQ2IsR0FBRyxLQUFLLENBQUMsVUFBVTtTQUNwQixDQUFDLENBQUM7UUFFSCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVkscUJBQWMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLFNBQVM7WUFDWCxDQUFDO1lBQ0QsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDekQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRVMsd0JBQXdCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztJQUNoRSxDQUFDOztBQXJCSCxvREFzQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQmF0Y2hBZ2VudCwgQmF0Y2hBZ2VudFByb3BzIH0gZnJvbSAnLi9iYXRjaC1hZ2VudCc7XG5pbXBvcnQgeyBMb2NhbFN0YWNrRW5kcG9pbnRPdmVycmlkZXMsIExvY2FsU3RhY2tJbnRlZ3JhdGlvblV0aWxzIH0gZnJvbSAnLi4vbG9jYWxzdGFjayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxTdGFja0JhdGNoQWdlbnRQcm9wcyBleHRlbmRzIEJhdGNoQWdlbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBMb2NhbFN0YWNrIGVuZHBvaW50IHJvdXRpbmcgY29uZmlndXJhdGlvbiBmb3IgTGFtYmRhIHJ1bnRpbWUgU0RLIGNhbGxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7IGVuYWJsZWQ6IHRydWUgfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWxTdGFjaz86IExvY2FsU3RhY2tFbmRwb2ludE92ZXJyaWRlcztcbn1cblxuZXhwb3J0IGNsYXNzIExvY2FsU3RhY2tCYXRjaEFnZW50IGV4dGVuZHMgQmF0Y2hBZ2VudCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBMb2NhbFN0YWNrQmF0Y2hBZ2VudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBjb25zdCBsb2NhbFN0YWNrRW52ID0gTG9jYWxTdGFja0ludGVncmF0aW9uVXRpbHMudG9MYW1iZGFFbnZpcm9ubWVudCh7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgLi4ucHJvcHMubG9jYWxTdGFjayxcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5ub2RlLmZpbmRBbGwoKSkge1xuICAgICAgaWYgKCEoY2hpbGQgaW5zdGFuY2VvZiBMYW1iZGFGdW5jdGlvbikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhsb2NhbFN0YWNrRW52KSkge1xuICAgICAgICBjaGlsZC5hZGRFbnZpcm9ubWVudChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZUFnZW50UnVudGltZUVudHJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguam9pbihfX2Rpcm5hbWUsICdyZXNvdXJjZXMvZGVmYXVsdC1vbGxhbWEtYWdlbnQnKTtcbiAgfVxufVxuIl19
|