@aws-cdk/aws-bedrock-agentcore-alpha
Version:
The CDK Construct Library for Amazon Bedrock
174 lines • 23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MemoryStrategy = exports.MemoryStrategyType = exports.MEMORY_NAME_MAX_LENGTH = exports.MEMORY_NAME_MIN_LENGTH = void 0;
const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
// Internal libs
const managed_strategy_1 = require("./strategies/managed-strategy");
const self_managed_strategy_1 = require("./strategies/self-managed-strategy");
/******************************************************************************
* CONSTANTS
*****************************************************************************/
/**
* Minimum length for memory strategy name
* @internal
*/
exports.MEMORY_NAME_MIN_LENGTH = 1;
/**
* Maximum length for memory strategy name
* @internal
*/
exports.MEMORY_NAME_MAX_LENGTH = 48;
/**
* Long-term memory extraction strategy types.
*/
var MemoryStrategyType;
(function (MemoryStrategyType) {
/**
* Summarization strategy - extracts concise summaries to preserve critical context and key insights
*/
MemoryStrategyType["SUMMARIZATION"] = "SUMMARIZATION";
/**
* Semantic memory strategy - extracts general factual knowledge, concepts and meanings from raw conversations
* using vector embeddings for similarity search.
*/
MemoryStrategyType["SEMANTIC"] = "SEMANTIC";
/**
* User preferences strategy - extracts user behavior patterns from raw conversations.
*/
MemoryStrategyType["USER_PREFERENCE"] = "USER_PREFERENCE";
/**
* Customize memory processing through custom foundation model and prompt templates.
*/
MemoryStrategyType["CUSTOM"] = "CUSTOM";
})(MemoryStrategyType || (exports.MemoryStrategyType = MemoryStrategyType = {}));
/******************************************************************************
* Factory
*****************************************************************************/
/**
* Factory class for creating memory strategies
* If you need long-term memory for context recall across sessions, you can setup memory extraction strategies to extract the relevant memory from the raw events.
* Use built-in strategies for quick setup, use built-in strategies with override to specify models and prompt templates.
*
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/memory-strategies.html
*/
class MemoryStrategy {
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryStrategy", version: "2.227.0-alpha.0" };
/**
* Default strategies for organizing and extracting memory data, each optimized for specific use cases.
* This strategy compresses conversations into concise overviews, preserving essential context and key insights for quick recall.
* Extracted memory example: Users confused by cloud setup during onboarding.
* @returns A ManagedMemoryStrategy.
*/
static usingBuiltInSummarization() {
return new managed_strategy_1.ManagedMemoryStrategy(MemoryStrategyType.SUMMARIZATION, {
name: 'summary_builtin_cdkGen0001',
description: 'Summarize interactions to preserve critical context and key insights',
namespaces: ['/strategies/{memoryStrategyId}/actors/{actorId}/sessions/{sessionId}'],
});
}
/**
* Default strategies for organizing and extracting memory data, each optimized for specific use cases.
* Distills general facts, concepts, and underlying meanings from raw conversational data, presenting the information in a context-independent format.
* Extracted memory example: In-context learning = task-solving via examples, no training needed.
* @returns A ManagedMemoryStrategy.
*/
static usingBuiltInSemantic() {
return new managed_strategy_1.ManagedMemoryStrategy(MemoryStrategyType.SEMANTIC, {
name: 'semantic_builtin_cdkGen0001',
description: 'Extract general factual knowledge, concepts and meanings from raw conversations in a context-independent format.',
namespaces: ['/strategies/{memoryStrategyId}/actors/{actorId}'],
});
}
/**
* Default strategies for organizing and extracting memory data, each optimized for specific use cases.
* Captures individual preferences, interaction patterns, and personalized settings to enhance future experiences.
* Extracted memory example: User needs clear guidance on cloud storage account connection during onboarding.
* @returns A ManagedMemoryStrategy.
*/
static usingBuiltInUserPreference() {
return new managed_strategy_1.ManagedMemoryStrategy(MemoryStrategyType.USER_PREFERENCE, {
name: 'preference_builtin_cdkGen0001',
description: 'Capture individual preferences, interaction patterns, and personalized settings to enhance future experiences.',
namespaces: ['/strategies/{memoryStrategyId}/actors/{actorId}'],
});
}
/**
* Creates a semantic memory strategy with custom configuration.
* Distills general facts, concepts, and underlying meanings from raw conversational data, presenting the information in a context-independent format.
* Extracted memory example: In-context learning = task-solving via examples, no training needed.
* @param config - The configuration for the semantic memory strategy.
* @returns A ManagedMemoryStrategy.
*/
static usingSemantic(config) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ManagedStrategyProps(config);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.usingSemantic);
}
throw error;
}
return new managed_strategy_1.ManagedMemoryStrategy(MemoryStrategyType.SEMANTIC, config);
}
/**
* Creates a user preference memory strategy with custom configuration.
* Captures individual preferences, interaction patterns, and personalized settings to enhance future experiences.
* Extracted memory example: User needs clear guidance on cloud storage account connection during onboarding.
* @param config - The configuration for the user preference memory strategy.
* @returns A ManagedMemoryStrategy.
*/
static usingUserPreference(config) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ManagedStrategyProps(config);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.usingUserPreference);
}
throw error;
}
return new managed_strategy_1.ManagedMemoryStrategy(MemoryStrategyType.USER_PREFERENCE, config);
}
/**
* Creates a summarization memory strategy with custom configuration.
* This strategy compresses conversations into concise overviews, preserving essential context and key insights for quick recall.
* Extracted memory example: Users confused by cloud setup during onboarding.
* @param config - The configuration for the summarization memory strategy.
* @returns A ManagedMemoryStrategy.
*/
static usingSummarization(config) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ManagedStrategyProps(config);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.usingSummarization);
}
throw error;
}
return new managed_strategy_1.ManagedMemoryStrategy(MemoryStrategyType.SUMMARIZATION, config);
}
/**
* Creates a self-managed memory strategy.
* A self-managed strategy gives you complete control over your memory extraction and consolidation pipelines.
* @param config - The configuration for the self-managed memory strategy.
* @returns A SelfManagedMemoryStrategy.
*/
static usingSelfManaged(config) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_SelfManagedStrategyProps(config);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.usingSelfManaged);
}
throw error;
}
// Scope is passed for future use in permission granting
return new self_managed_strategy_1.SelfManagedMemoryStrategy(MemoryStrategyType.CUSTOM, config);
}
}
exports.MemoryStrategy = MemoryStrategy;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWVtb3J5LXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZUEsZ0JBQWdCO0FBQ2hCLG9FQUE0RjtBQUM1Riw4RUFBeUc7QUFFekc7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDVSxRQUFBLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUN4Qzs7O0dBR0c7QUFDVSxRQUFBLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUV6Qzs7R0FFRztBQUNILElBQVksa0JBa0JYO0FBbEJELFdBQVksa0JBQWtCO0lBQzVCOztPQUVHO0lBQ0gscURBQStCLENBQUE7SUFDL0I7OztPQUdHO0lBQ0gsMkNBQXFCLENBQUE7SUFDckI7O09BRUc7SUFDSCx5REFBbUMsQ0FBQTtJQUNuQzs7T0FFRztJQUNILHVDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFsQlcsa0JBQWtCLGtDQUFsQixrQkFBa0IsUUFrQjdCO0FBbUREOzsrRUFFK0U7QUFDL0U7Ozs7OztHQU1HO0FBQ0gsTUFBYSxjQUFjOztJQUN6Qjs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyx5QkFBeUI7UUFDckMsT0FBTyxJQUFJLHdDQUFxQixDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRTtZQUNqRSxJQUFJLEVBQUUsNEJBQTRCO1lBQ2xDLFdBQVcsRUFBRSxzRUFBc0U7WUFDbkYsVUFBVSxFQUFFLENBQUMsc0VBQXNFLENBQUM7U0FDckYsQ0FBQyxDQUFDO0tBQ0o7SUFDRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxvQkFBb0I7UUFDaEMsT0FBTyxJQUFJLHdDQUFxQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtZQUM1RCxJQUFJLEVBQUUsNkJBQTZCO1lBQ25DLFdBQVcsRUFDWCxrSEFBa0g7WUFDbEgsVUFBVSxFQUFFLENBQUMsaURBQWlELENBQUM7U0FDaEUsQ0FBQyxDQUFDO0tBQ0o7SUFDRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQywwQkFBMEI7UUFDdEMsT0FBTyxJQUFJLHdDQUFxQixDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRTtZQUNuRSxJQUFJLEVBQUUsK0JBQStCO1lBQ3JDLFdBQVcsRUFBRSxnSEFBZ0g7WUFDN0gsVUFBVSxFQUFFLENBQUMsaURBQWlELENBQUM7U0FDaEUsQ0FBQyxDQUFDO0tBQ0o7SUFDRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQTRCOzs7Ozs7Ozs7O1FBQ3RELE9BQU8sSUFBSSx3Q0FBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDdkU7SUFDRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBNEI7Ozs7Ozs7Ozs7UUFDNUQsT0FBTyxJQUFJLHdDQUFxQixDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM5RTtJQUNEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUE0Qjs7Ozs7Ozs7OztRQUMzRCxPQUFPLElBQUksd0NBQXFCLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzVFO0lBQ0Q7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBZ0M7Ozs7Ozs7Ozs7UUFDN0Qsd0RBQXdEO1FBQ3hELE9BQU8sSUFBSSxpREFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDekU7O0FBaEZILHdDQWlGQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuLy8gSW50ZXJuYWwgbGlic1xuaW1wb3J0IHsgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LCBNYW5hZ2VkU3RyYXRlZ3lQcm9wcyB9IGZyb20gJy4vc3RyYXRlZ2llcy9tYW5hZ2VkLXN0cmF0ZWd5JztcbmltcG9ydCB7IFNlbGZNYW5hZ2VkTWVtb3J5U3RyYXRlZ3ksIFNlbGZNYW5hZ2VkU3RyYXRlZ3lQcm9wcyB9IGZyb20gJy4vc3RyYXRlZ2llcy9zZWxmLW1hbmFnZWQtc3RyYXRlZ3knO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUQU5UU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBNaW5pbXVtIGxlbmd0aCBmb3IgbWVtb3J5IHN0cmF0ZWd5IG5hbWVcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTUVNT1JZX05BTUVfTUlOX0xFTkdUSCA9IDE7XG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIGZvciBtZW1vcnkgc3RyYXRlZ3kgbmFtZVxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBNRU1PUllfTkFNRV9NQVhfTEVOR1RIID0gNDg7XG5cbi8qKlxuICogTG9uZy10ZXJtIG1lbW9yeSBleHRyYWN0aW9uIHN0cmF0ZWd5IHR5cGVzLlxuICovXG5leHBvcnQgZW51bSBNZW1vcnlTdHJhdGVneVR5cGUge1xuICAvKipcbiAgICogU3VtbWFyaXphdGlvbiBzdHJhdGVneSAtIGV4dHJhY3RzIGNvbmNpc2Ugc3VtbWFyaWVzIHRvIHByZXNlcnZlIGNyaXRpY2FsIGNvbnRleHQgYW5kIGtleSBpbnNpZ2h0c1xuICAgKi9cbiAgU1VNTUFSSVpBVElPTiA9ICdTVU1NQVJJWkFUSU9OJyxcbiAgLyoqXG4gICAqIFNlbWFudGljIG1lbW9yeSBzdHJhdGVneSAtIGV4dHJhY3RzIGdlbmVyYWwgZmFjdHVhbCBrbm93bGVkZ2UsIGNvbmNlcHRzIGFuZCBtZWFuaW5ncyBmcm9tIHJhdyBjb252ZXJzYXRpb25zXG4gICAqIHVzaW5nIHZlY3RvciBlbWJlZGRpbmdzIGZvciBzaW1pbGFyaXR5IHNlYXJjaC5cbiAgICovXG4gIFNFTUFOVElDID0gJ1NFTUFOVElDJyxcbiAgLyoqXG4gICAqIFVzZXIgcHJlZmVyZW5jZXMgc3RyYXRlZ3kgLSBleHRyYWN0cyB1c2VyIGJlaGF2aW9yIHBhdHRlcm5zIGZyb20gcmF3IGNvbnZlcnNhdGlvbnMuXG4gICAqL1xuICBVU0VSX1BSRUZFUkVOQ0UgPSAnVVNFUl9QUkVGRVJFTkNFJyxcbiAgLyoqXG4gICAqIEN1c3RvbWl6ZSBtZW1vcnkgcHJvY2Vzc2luZyB0aHJvdWdoIGN1c3RvbSBmb3VuZGF0aW9uIG1vZGVsIGFuZCBwcm9tcHQgdGVtcGxhdGVzLlxuICAgKi9cbiAgQ1VTVE9NID0gJ0NVU1RPTScsXG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbW9uXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBjb21tb24gZm9yIGFueSBtZW1vcnkgc3RyYXRlZ3lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlTdHJhdGVneUNvbW1vblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIGZvciB0aGUgc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RyYXRlZ3lcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEludGVyZmFjZSBmb3IgTWVtb3J5IHN0cmF0ZWdpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWVtb3J5U3RyYXRlZ3kge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1lbW9yeSBzdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBtZW1vcnkgc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbWVtb3J5IHN0cmF0ZWd5XG4gICAqL1xuICByZWFkb25seSBzdHJhdGVneVR5cGU6IE1lbW9yeVN0cmF0ZWd5VHlwZTtcbiAgLyoqXG4gICAqIFJlbmRlcnMgaW50ZXJuYWwgYXR0cmlidXRlcyB0byBDbG91ZEZvcm1hdGlvblxuICAgKi9cbiAgcmVuZGVyKCk6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuTWVtb3J5Lk1lbW9yeVN0cmF0ZWd5UHJvcGVydHk7XG4gIC8qKlxuICAgKiBHcmFudHMgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyB0byB0aGUgcm9sZVxuICAgKiBAcGFyYW0gZ3JhbnRlZSAtIFRoZSBncmFudGVlIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqIEByZXR1cm5zIFRoZSBHcmFudCBvYmplY3QgZm9yIGNoYWluaW5nXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWN0b3J5XG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEZhY3RvcnkgY2xhc3MgZm9yIGNyZWF0aW5nIG1lbW9yeSBzdHJhdGVnaWVzXG4gKiBJZiB5b3UgbmVlZCBsb25nLXRlcm0gbWVtb3J5IGZvciBjb250ZXh0IHJlY2FsbCBhY3Jvc3Mgc2Vzc2lvbnMsIHlvdSBjYW4gc2V0dXAgbWVtb3J5IGV4dHJhY3Rpb24gc3RyYXRlZ2llcyB0byBleHRyYWN0IHRoZSByZWxldmFudCBtZW1vcnkgZnJvbSB0aGUgcmF3IGV2ZW50cy5cbiAqIFVzZSBidWlsdC1pbiBzdHJhdGVnaWVzIGZvciBxdWljayBzZXR1cCwgdXNlIGJ1aWx0LWluIHN0cmF0ZWdpZXMgd2l0aCBvdmVycmlkZSB0byBzcGVjaWZ5IG1vZGVscyBhbmQgcHJvbXB0IHRlbXBsYXRlcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvbWVtb3J5LXN0cmF0ZWdpZXMuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgTWVtb3J5U3RyYXRlZ3kge1xuICAvKipcbiAgICogRGVmYXVsdCBzdHJhdGVnaWVzIGZvciBvcmdhbml6aW5nIGFuZCBleHRyYWN0aW5nIG1lbW9yeSBkYXRhLCBlYWNoIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLlxuICAgKiBUaGlzIHN0cmF0ZWd5IGNvbXByZXNzZXMgY29udmVyc2F0aW9ucyBpbnRvIGNvbmNpc2Ugb3ZlcnZpZXdzLCBwcmVzZXJ2aW5nIGVzc2VudGlhbCBjb250ZXh0IGFuZCBrZXkgaW5zaWdodHMgZm9yIHF1aWNrIHJlY2FsbC5cbiAgICogRXh0cmFjdGVkIG1lbW9yeSBleGFtcGxlOiBVc2VycyBjb25mdXNlZCBieSBjbG91ZCBzZXR1cCBkdXJpbmcgb25ib2FyZGluZy5cbiAgICogQHJldHVybnMgQSBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nQnVpbHRJblN1bW1hcml6YXRpb24oKTogTWFuYWdlZE1lbW9yeVN0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IE1hbmFnZWRNZW1vcnlTdHJhdGVneShNZW1vcnlTdHJhdGVneVR5cGUuU1VNTUFSSVpBVElPTiwge1xuICAgICAgbmFtZTogJ3N1bW1hcnlfYnVpbHRpbl9jZGtHZW4wMDAxJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnU3VtbWFyaXplIGludGVyYWN0aW9ucyB0byBwcmVzZXJ2ZSBjcml0aWNhbCBjb250ZXh0IGFuZCBrZXkgaW5zaWdodHMnLFxuICAgICAgbmFtZXNwYWNlczogWycvc3RyYXRlZ2llcy97bWVtb3J5U3RyYXRlZ3lJZH0vYWN0b3JzL3thY3RvcklkfS9zZXNzaW9ucy97c2Vzc2lvbklkfSddLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBEZWZhdWx0IHN0cmF0ZWdpZXMgZm9yIG9yZ2FuaXppbmcgYW5kIGV4dHJhY3RpbmcgbWVtb3J5IGRhdGEsIGVhY2ggb3B0aW1pemVkIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuXG4gICAqIERpc3RpbGxzIGdlbmVyYWwgZmFjdHMsIGNvbmNlcHRzLCBhbmQgdW5kZXJseWluZyBtZWFuaW5ncyBmcm9tIHJhdyBjb252ZXJzYXRpb25hbCBkYXRhLCBwcmVzZW50aW5nIHRoZSBpbmZvcm1hdGlvbiBpbiBhIGNvbnRleHQtaW5kZXBlbmRlbnQgZm9ybWF0LlxuICAgKiBFeHRyYWN0ZWQgbWVtb3J5IGV4YW1wbGU6IEluLWNvbnRleHQgbGVhcm5pbmcgPSB0YXNrLXNvbHZpbmcgdmlhIGV4YW1wbGVzLCBubyB0cmFpbmluZyBuZWVkZWQuXG4gICAqIEByZXR1cm5zIEEgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0J1aWx0SW5TZW1hbnRpYygpOiBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5KE1lbW9yeVN0cmF0ZWd5VHlwZS5TRU1BTlRJQywge1xuICAgICAgbmFtZTogJ3NlbWFudGljX2J1aWx0aW5fY2RrR2VuMDAwMScsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdFeHRyYWN0IGdlbmVyYWwgZmFjdHVhbCBrbm93bGVkZ2UsIGNvbmNlcHRzIGFuZCBtZWFuaW5ncyBmcm9tIHJhdyBjb252ZXJzYXRpb25zIGluIGEgY29udGV4dC1pbmRlcGVuZGVudCBmb3JtYXQuJyxcbiAgICAgIG5hbWVzcGFjZXM6IFsnL3N0cmF0ZWdpZXMve21lbW9yeVN0cmF0ZWd5SWR9L2FjdG9ycy97YWN0b3JJZH0nXSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRGVmYXVsdCBzdHJhdGVnaWVzIGZvciBvcmdhbml6aW5nIGFuZCBleHRyYWN0aW5nIG1lbW9yeSBkYXRhLCBlYWNoIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLlxuICAgKiBDYXB0dXJlcyBpbmRpdmlkdWFsIHByZWZlcmVuY2VzLCBpbnRlcmFjdGlvbiBwYXR0ZXJucywgYW5kIHBlcnNvbmFsaXplZCBzZXR0aW5ncyB0byBlbmhhbmNlIGZ1dHVyZSBleHBlcmllbmNlcy5cbiAgICogRXh0cmFjdGVkIG1lbW9yeSBleGFtcGxlOiBVc2VyIG5lZWRzIGNsZWFyIGd1aWRhbmNlIG9uIGNsb3VkIHN0b3JhZ2UgYWNjb3VudCBjb25uZWN0aW9uIGR1cmluZyBvbmJvYXJkaW5nLlxuICAgKiBAcmV0dXJucyBBIE1hbmFnZWRNZW1vcnlTdHJhdGVneS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdCdWlsdEluVXNlclByZWZlcmVuY2UoKTogTWFuYWdlZE1lbW9yeVN0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IE1hbmFnZWRNZW1vcnlTdHJhdGVneShNZW1vcnlTdHJhdGVneVR5cGUuVVNFUl9QUkVGRVJFTkNFLCB7XG4gICAgICBuYW1lOiAncHJlZmVyZW5jZV9idWlsdGluX2Nka0dlbjAwMDEnLFxuICAgICAgZGVzY3JpcHRpb246ICdDYXB0dXJlIGluZGl2aWR1YWwgcHJlZmVyZW5jZXMsIGludGVyYWN0aW9uIHBhdHRlcm5zLCBhbmQgcGVyc29uYWxpemVkIHNldHRpbmdzIHRvIGVuaGFuY2UgZnV0dXJlIGV4cGVyaWVuY2VzLicsXG4gICAgICBuYW1lc3BhY2VzOiBbJy9zdHJhdGVnaWVzL3ttZW1vcnlTdHJhdGVneUlkfS9hY3RvcnMve2FjdG9ySWR9J10sXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzZW1hbnRpYyBtZW1vcnkgc3RyYXRlZ3kgd2l0aCBjdXN0b20gY29uZmlndXJhdGlvbi5cbiAgICogRGlzdGlsbHMgZ2VuZXJhbCBmYWN0cywgY29uY2VwdHMsIGFuZCB1bmRlcmx5aW5nIG1lYW5pbmdzIGZyb20gcmF3IGNvbnZlcnNhdGlvbmFsIGRhdGEsIHByZXNlbnRpbmcgdGhlIGluZm9ybWF0aW9uIGluIGEgY29udGV4dC1pbmRlcGVuZGVudCBmb3JtYXQuXG4gICAqIEV4dHJhY3RlZCBtZW1vcnkgZXhhbXBsZTogSW4tY29udGV4dCBsZWFybmluZyA9IHRhc2stc29sdmluZyB2aWEgZXhhbXBsZXMsIG5vIHRyYWluaW5nIG5lZWRlZC5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VtYW50aWMgbWVtb3J5IHN0cmF0ZWd5LlxuICAgKiBAcmV0dXJucyBBIE1hbmFnZWRNZW1vcnlTdHJhdGVneS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdTZW1hbnRpYyhjb25maWc6IE1hbmFnZWRTdHJhdGVneVByb3BzKTogTWFuYWdlZE1lbW9yeVN0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IE1hbmFnZWRNZW1vcnlTdHJhdGVneShNZW1vcnlTdHJhdGVneVR5cGUuU0VNQU5USUMsIGNvbmZpZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyIHByZWZlcmVuY2UgbWVtb3J5IHN0cmF0ZWd5IHdpdGggY3VzdG9tIGNvbmZpZ3VyYXRpb24uXG4gICAqIENhcHR1cmVzIGluZGl2aWR1YWwgcHJlZmVyZW5jZXMsIGludGVyYWN0aW9uIHBhdHRlcm5zLCBhbmQgcGVyc29uYWxpemVkIHNldHRpbmdzIHRvIGVuaGFuY2UgZnV0dXJlIGV4cGVyaWVuY2VzLlxuICAgKiBFeHRyYWN0ZWQgbWVtb3J5IGV4YW1wbGU6IFVzZXIgbmVlZHMgY2xlYXIgZ3VpZGFuY2Ugb24gY2xvdWQgc3RvcmFnZSBhY2NvdW50IGNvbm5lY3Rpb24gZHVyaW5nIG9uYm9hcmRpbmcuXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHVzZXIgcHJlZmVyZW5jZSBtZW1vcnkgc3RyYXRlZ3kuXG4gICAqIEByZXR1cm5zIEEgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1VzZXJQcmVmZXJlbmNlKGNvbmZpZzogTWFuYWdlZFN0cmF0ZWd5UHJvcHMpOiBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5KE1lbW9yeVN0cmF0ZWd5VHlwZS5VU0VSX1BSRUZFUkVOQ0UsIGNvbmZpZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdW1tYXJpemF0aW9uIG1lbW9yeSBzdHJhdGVneSB3aXRoIGN1c3RvbSBjb25maWd1cmF0aW9uLlxuICAgKiBUaGlzIHN0cmF0ZWd5IGNvbXByZXNzZXMgY29udmVyc2F0aW9ucyBpbnRvIGNvbmNpc2Ugb3ZlcnZpZXdzLCBwcmVzZXJ2aW5nIGVzc2VudGlhbCBjb250ZXh0IGFuZCBrZXkgaW5zaWdodHMgZm9yIHF1aWNrIHJlY2FsbC5cbiAgICogRXh0cmFjdGVkIG1lbW9yeSBleGFtcGxlOiBVc2VycyBjb25mdXNlZCBieSBjbG91ZCBzZXR1cCBkdXJpbmcgb25ib2FyZGluZy5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc3VtbWFyaXphdGlvbiBtZW1vcnkgc3RyYXRlZ3kuXG4gICAqIEByZXR1cm5zIEEgTWFuYWdlZE1lbW9yeVN0cmF0ZWd5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1N1bW1hcml6YXRpb24oY29uZmlnOiBNYW5hZ2VkU3RyYXRlZ3lQcm9wcyk6IE1hbmFnZWRNZW1vcnlTdHJhdGVneSB7XG4gICAgcmV0dXJuIG5ldyBNYW5hZ2VkTWVtb3J5U3RyYXRlZ3koTWVtb3J5U3RyYXRlZ3lUeXBlLlNVTU1BUklaQVRJT04sIGNvbmZpZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzZWxmLW1hbmFnZWQgbWVtb3J5IHN0cmF0ZWd5LlxuICAgKiBBIHNlbGYtbWFuYWdlZCBzdHJhdGVneSBnaXZlcyB5b3UgY29tcGxldGUgY29udHJvbCBvdmVyIHlvdXIgbWVtb3J5IGV4dHJhY3Rpb24gYW5kIGNvbnNvbGlkYXRpb24gcGlwZWxpbmVzLlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxmLW1hbmFnZWQgbWVtb3J5IHN0cmF0ZWd5LlxuICAgKiBAcmV0dXJucyBBIFNlbGZNYW5hZ2VkTWVtb3J5U3RyYXRlZ3kuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nU2VsZk1hbmFnZWQoY29uZmlnOiBTZWxmTWFuYWdlZFN0cmF0ZWd5UHJvcHMpOiBTZWxmTWFuYWdlZE1lbW9yeVN0cmF0ZWd5IHtcbiAgICAvLyBTY29wZSBpcyBwYXNzZWQgZm9yIGZ1dHVyZSB1c2UgaW4gcGVybWlzc2lvbiBncmFudGluZ1xuICAgIHJldHVybiBuZXcgU2VsZk1hbmFnZWRNZW1vcnlTdHJhdGVneShNZW1vcnlTdHJhdGVneVR5cGUuQ1VTVE9NLCBjb25maWcpO1xuICB9XG59XG4iXX0=