@aws-cdk/aws-bedrock-agentcore-alpha 2.252.0-alpha.0 → 2.253.0-alpha.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.
Files changed (61) hide show
  1. package/.jsii +11191 -7249
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +30 -0
  4. package/README.md +422 -0
  5. package/lib/evaluation/custom-evaluator.d.ts +153 -0
  6. package/lib/evaluation/custom-evaluator.js +256 -0
  7. package/lib/evaluation/data-source.d.ts +106 -0
  8. package/lib/evaluation/data-source.js +156 -0
  9. package/lib/evaluation/evaluator-base.d.ts +82 -0
  10. package/lib/evaluation/evaluator-base.js +55 -0
  11. package/lib/evaluation/evaluator-config.d.ts +195 -0
  12. package/lib/evaluation/evaluator-config.js +184 -0
  13. package/lib/evaluation/evaluator.d.ts +68 -0
  14. package/lib/evaluation/evaluator.js +90 -0
  15. package/lib/evaluation/online-evaluation-base.d.ts +96 -0
  16. package/lib/evaluation/online-evaluation-base.js +55 -0
  17. package/lib/evaluation/online-evaluation.d.ts +134 -0
  18. package/lib/evaluation/online-evaluation.js +388 -0
  19. package/lib/evaluation/perms.d.ts +34 -0
  20. package/lib/evaluation/perms.js +53 -0
  21. package/lib/evaluation/types.d.ts +461 -0
  22. package/lib/evaluation/types.js +229 -0
  23. package/lib/evaluation/validation-helpers.d.ts +133 -0
  24. package/lib/evaluation/validation-helpers.js +349 -0
  25. package/lib/gateway/gateway-base.js +1 -1
  26. package/lib/gateway/gateway.js +2 -2
  27. package/lib/gateway/inbound-auth/authorizer.js +4 -4
  28. package/lib/gateway/inbound-auth/custom-claim.js +1 -1
  29. package/lib/gateway/interceptor.js +1 -1
  30. package/lib/gateway/outbound-auth/api-key.js +1 -1
  31. package/lib/gateway/outbound-auth/credential-provider.js +1 -1
  32. package/lib/gateway/protocol.js +2 -2
  33. package/lib/gateway/targets/schema/api-schema.js +4 -4
  34. package/lib/gateway/targets/schema/tool-schema.js +4 -4
  35. package/lib/gateway/targets/target-base.js +1 -1
  36. package/lib/gateway/targets/target-configuration.js +6 -6
  37. package/lib/gateway/targets/target.js +1 -1
  38. package/lib/index.d.ts +9 -0
  39. package/lib/index.js +13 -1
  40. package/lib/memory/memory-strategy.js +1 -1
  41. package/lib/memory/memory.js +2 -2
  42. package/lib/memory/strategies/managed-strategy.js +1 -1
  43. package/lib/memory/strategies/self-managed-strategy.js +8 -5
  44. package/lib/network/network-configuration.js +4 -4
  45. package/lib/policy/policy-base.js +1 -1
  46. package/lib/policy/policy-engine-base.js +1 -1
  47. package/lib/policy/policy-engine.js +1 -1
  48. package/lib/policy/policy-statement.js +5 -5
  49. package/lib/policy/policy-types.js +1 -1
  50. package/lib/policy/policy.js +1 -1
  51. package/lib/runtime/inbound-auth/custom-claim.js +1 -1
  52. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
  53. package/lib/runtime/observability.js +2 -2
  54. package/lib/runtime/runtime-artifact.js +1 -1
  55. package/lib/runtime/runtime-base.js +1 -1
  56. package/lib/runtime/runtime-endpoint-base.js +1 -1
  57. package/lib/runtime/runtime-endpoint.js +1 -1
  58. package/lib/runtime/runtime.js +1 -1
  59. package/lib/tools/browser.js +2 -2
  60. package/lib/tools/code-interpreter.js +2 -2
  61. package/package.json +10 -9
@@ -0,0 +1,388 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.OnlineEvaluationConfig = void 0;
38
+ const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
39
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
40
+ /**
41
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
42
+ *
43
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
44
+ * with the License. A copy of the License is located at
45
+ *
46
+ * http://www.apache.org/licenses/LICENSE-2.0
47
+ *
48
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
49
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
50
+ * and limitations under the License.
51
+ */
52
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
53
+ const bedrockagentcore = require("aws-cdk-lib/aws-bedrockagentcore");
54
+ const iam = require("aws-cdk-lib/aws-iam");
55
+ const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
56
+ const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
57
+ const online_evaluation_base_1 = require("./online-evaluation-base");
58
+ const perms_1 = require("./perms");
59
+ const validation_helpers_1 = require("./validation-helpers");
60
+ /**
61
+ * Online evaluation configuration for Amazon Bedrock AgentCore.
62
+ *
63
+ * Enables continuous evaluation of agent performance using built-in or custom evaluators.
64
+ * Supports CloudWatch Logs and Agent Endpoint data sources.
65
+ *
66
+ * @resource AWS::BedrockAgentCore::OnlineEvaluationConfig
67
+ *
68
+ * @example
69
+ * // Basic usage with built-in evaluators
70
+ * const evaluation = new agentcore.OnlineEvaluationConfig(this, 'MyEvaluation', {
71
+ * onlineEvaluationConfigName: 'my_evaluation',
72
+ * evaluators: [
73
+ * agentcore.EvaluatorReference.builtin(agentcore.BuiltinEvaluator.HELPFULNESS),
74
+ * agentcore.EvaluatorReference.builtin(agentcore.BuiltinEvaluator.CORRECTNESS),
75
+ * ],
76
+ * dataSource: agentcore.DataSourceConfig.fromCloudWatchLogs({
77
+ * logGroupNames: ['/aws/bedrock-agentcore/my-agent'],
78
+ * serviceNames: ['my-agent.default'],
79
+ * }),
80
+ * });
81
+ */
82
+ let OnlineEvaluationConfig = (() => {
83
+ let _classDecorators = [prop_injectable_1.propertyInjectable];
84
+ let _classDescriptor;
85
+ let _classExtraInitializers = [];
86
+ let _classThis;
87
+ let _classSuper = online_evaluation_base_1.OnlineEvaluationBase;
88
+ var OnlineEvaluationConfig = class extends _classSuper {
89
+ static { _classThis = this; }
90
+ static {
91
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
92
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
93
+ OnlineEvaluationConfig = _classThis = _classDescriptor.value;
94
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
95
+ }
96
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OnlineEvaluationConfig", version: "2.253.0-alpha.0" };
97
+ /** Uniquely identifies this class. */
98
+ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.OnlineEvaluationConfig';
99
+ /**
100
+ * Import an existing OnlineEvaluationConfig by its ID.
101
+ *
102
+ * @param scope - The construct scope
103
+ * @param id - Construct identifier
104
+ * @param onlineEvaluationConfigId - The configuration ID to import
105
+ * @returns An IOnlineEvaluationConfig reference
106
+ */
107
+ static fromOnlineEvaluationConfigId(scope, id, onlineEvaluationConfigId) {
108
+ const stack = aws_cdk_lib_1.Stack.of(scope);
109
+ const configArn = aws_cdk_lib_1.Arn.format({
110
+ service: 'bedrock-agentcore',
111
+ resource: 'online-evaluation-config',
112
+ resourceName: onlineEvaluationConfigId,
113
+ }, stack);
114
+ return OnlineEvaluationConfig.fromOnlineEvaluationConfigAttributes(scope, id, {
115
+ onlineEvaluationConfigArn: configArn,
116
+ onlineEvaluationConfigId: onlineEvaluationConfigId,
117
+ onlineEvaluationConfigName: onlineEvaluationConfigId,
118
+ });
119
+ }
120
+ /**
121
+ * Import an existing OnlineEvaluationConfig by its ARN.
122
+ *
123
+ * @param scope - The construct scope
124
+ * @param id - Construct identifier
125
+ * @param onlineEvaluationConfigArn - The configuration ARN to import
126
+ * @returns An IOnlineEvaluationConfig reference
127
+ */
128
+ static fromOnlineEvaluationConfigArn(scope, id, onlineEvaluationConfigArn) {
129
+ const arnParts = aws_cdk_lib_1.Arn.split(onlineEvaluationConfigArn, aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME);
130
+ const configId = arnParts.resourceName;
131
+ return OnlineEvaluationConfig.fromOnlineEvaluationConfigAttributes(scope, id, {
132
+ onlineEvaluationConfigArn: onlineEvaluationConfigArn,
133
+ onlineEvaluationConfigId: configId,
134
+ onlineEvaluationConfigName: configId,
135
+ });
136
+ }
137
+ /**
138
+ * Import an existing OnlineEvaluationConfig from its attributes.
139
+ *
140
+ * @param scope - The construct scope
141
+ * @param id - Construct identifier
142
+ * @param attrs - The configuration attributes
143
+ * @returns An IOnlineEvaluationConfig reference
144
+ */
145
+ static fromOnlineEvaluationConfigAttributes(scope, id, attrs) {
146
+ try {
147
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_OnlineEvaluationConfigAttributes(attrs);
148
+ }
149
+ catch (error) {
150
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
151
+ Error.captureStackTrace(error, this.fromOnlineEvaluationConfigAttributes);
152
+ }
153
+ throw error;
154
+ }
155
+ class Import extends online_evaluation_base_1.OnlineEvaluationBase {
156
+ onlineEvaluationConfigArn = attrs.onlineEvaluationConfigArn;
157
+ onlineEvaluationConfigId = attrs.onlineEvaluationConfigId;
158
+ onlineEvaluationConfigName = attrs.onlineEvaluationConfigName;
159
+ executionRole = attrs.executionRoleArn
160
+ ? iam.Role.fromRoleArn(scope, `${id}Role`, attrs.executionRoleArn)
161
+ : undefined;
162
+ status = undefined;
163
+ executionStatus = undefined;
164
+ createdAt = undefined;
165
+ updatedAt = undefined;
166
+ grantPrincipal;
167
+ constructor(s, i) {
168
+ super(s, i);
169
+ this.grantPrincipal = this.executionRole ?? new iam.UnknownPrincipal({ resource: this });
170
+ }
171
+ }
172
+ return new Import(scope, id);
173
+ }
174
+ /**
175
+ * The ARN of the online evaluation configuration.
176
+ * @attribute
177
+ */
178
+ onlineEvaluationConfigArn;
179
+ /**
180
+ * The unique identifier of the online evaluation configuration.
181
+ * @attribute
182
+ */
183
+ onlineEvaluationConfigId;
184
+ /**
185
+ * The name of the online evaluation configuration.
186
+ * @attribute
187
+ */
188
+ onlineEvaluationConfigName;
189
+ /**
190
+ * The IAM execution role for the evaluation.
191
+ */
192
+ executionRole;
193
+ /**
194
+ * The lifecycle status of the configuration.
195
+ * @attribute
196
+ */
197
+ status;
198
+ /**
199
+ * The execution status of the evaluation (ENABLED or DISABLED).
200
+ */
201
+ executionStatus;
202
+ /**
203
+ * The timestamp when the configuration was created.
204
+ * @attribute
205
+ */
206
+ createdAt;
207
+ /**
208
+ * The timestamp when the configuration was last updated.
209
+ * @attribute
210
+ */
211
+ updatedAt;
212
+ /**
213
+ * The principal to grant permissions to.
214
+ */
215
+ grantPrincipal;
216
+ constructor(scope, id, props) {
217
+ super(scope, id, {
218
+ physicalName: props.onlineEvaluationConfigName,
219
+ });
220
+ try {
221
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_OnlineEvaluationConfigProps(props);
222
+ }
223
+ catch (error) {
224
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
225
+ Error.captureStackTrace(error, OnlineEvaluationConfig);
226
+ }
227
+ throw error;
228
+ }
229
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
230
+ (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateConfigName, props.onlineEvaluationConfigName, this);
231
+ (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateDescription, props.description, this);
232
+ (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateEvaluators, props.evaluators, this);
233
+ (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateSamplingPercentage, props.samplingPercentage, this);
234
+ (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateFilters, props.filters, this);
235
+ (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateSessionTimeout, props.sessionTimeout?.toMinutes(), this);
236
+ this.onlineEvaluationConfigName = this.physicalName;
237
+ this.executionRole = props.executionRole ?? this.createExecutionRole(props.dataSource);
238
+ this.grantPrincipal = this.executionRole;
239
+ const resource = new bedrockagentcore.CfnOnlineEvaluationConfig(this, 'Resource', {
240
+ onlineEvaluationConfigName: this.physicalName,
241
+ evaluators: props.evaluators.map((e) => e.bind()),
242
+ dataSourceConfig: props.dataSource.bind(),
243
+ evaluationExecutionRoleArn: this.executionRole.roleArn,
244
+ rule: this.buildRuleConfig(props),
245
+ description: props.description,
246
+ executionStatus: props.executionStatus?.value,
247
+ });
248
+ // Ensure the execution role's policies are created before the L1 resource,
249
+ // because BedrockAgentCore validates role permissions at create time.
250
+ if (this.executionRole instanceof iam.Role && this.executionRole.node.defaultChild) {
251
+ resource.node.addDependency(this.executionRole);
252
+ }
253
+ this.onlineEvaluationConfigArn = resource.attrOnlineEvaluationConfigArn;
254
+ this.onlineEvaluationConfigId = resource.attrOnlineEvaluationConfigId;
255
+ this.status = resource.attrStatus;
256
+ this.executionStatus = resource.executionStatus;
257
+ this.createdAt = resource.attrCreatedAt;
258
+ this.updatedAt = resource.attrUpdatedAt;
259
+ }
260
+ createExecutionRole(dataSource) {
261
+ const stack = aws_cdk_lib_1.Stack.of(this);
262
+ const role = new iam.Role(this, 'ExecutionRole', {
263
+ assumedBy: new iam.ServicePrincipal('bedrock-agentcore.amazonaws.com', {
264
+ conditions: {
265
+ StringEquals: {
266
+ 'aws:SourceAccount': stack.account,
267
+ 'aws:ResourceAccount': stack.account,
268
+ },
269
+ ArnLike: {
270
+ 'aws:SourceArn': [
271
+ aws_cdk_lib_1.Arn.format({
272
+ service: 'bedrock-agentcore',
273
+ resource: 'evaluator',
274
+ resourceName: '*',
275
+ }, stack),
276
+ aws_cdk_lib_1.Arn.format({
277
+ service: 'bedrock-agentcore',
278
+ resource: 'online-evaluation-config',
279
+ resourceName: '*',
280
+ }, stack),
281
+ ],
282
+ },
283
+ },
284
+ }),
285
+ description: 'Execution role for Bedrock AgentCore Online Evaluation',
286
+ });
287
+ // The service requires query access to user-specified log groups AND the
288
+ // implicit aws/spans log group it uses internally for trace data.
289
+ const logGroupArns = [
290
+ ...dataSource.cloudWatchLogsConfig.logGroupNames,
291
+ 'aws/spans',
292
+ ].flatMap((name) => [
293
+ aws_cdk_lib_1.Arn.format({
294
+ service: 'logs',
295
+ resource: 'log-group',
296
+ resourceName: name,
297
+ arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
298
+ }, stack),
299
+ aws_cdk_lib_1.Arn.format({
300
+ service: 'logs',
301
+ resource: 'log-group',
302
+ resourceName: `${name}:*`,
303
+ arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
304
+ }, stack),
305
+ ]);
306
+ // logs:DescribeLogGroups does not support resource-level permissions.
307
+ // The resource must be '*' per the IAM service authorization reference.
308
+ // See: https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchlogs.html
309
+ role.addToPolicy(new iam.PolicyStatement({
310
+ sid: 'CloudWatchLogDescribeStatement',
311
+ actions: perms_1.EVALUATION_CLOUDWATCH_LOGS_DESCRIBE_PERMS,
312
+ resources: ['*'],
313
+ }));
314
+ role.addToPolicy(new iam.PolicyStatement({
315
+ sid: 'CloudWatchLogQueryStatement',
316
+ actions: perms_1.EVALUATION_CLOUDWATCH_LOGS_QUERY_PERMS,
317
+ resources: logGroupArns,
318
+ }));
319
+ role.addToPolicy(new iam.PolicyStatement({
320
+ sid: 'CloudWatchLogWriteStatement',
321
+ actions: perms_1.EVALUATION_CLOUDWATCH_LOGS_WRITE_PERMS,
322
+ resources: [
323
+ aws_cdk_lib_1.Arn.format({
324
+ service: 'logs',
325
+ resource: 'log-group',
326
+ resourceName: '/aws/bedrock-agentcore/evaluations/*',
327
+ arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
328
+ }, stack),
329
+ ],
330
+ }));
331
+ role.addToPolicy(new iam.PolicyStatement({
332
+ sid: 'CloudWatchIndexPolicyStatement',
333
+ actions: perms_1.EVALUATION_CLOUDWATCH_INDEX_POLICY_PERMS,
334
+ resources: [
335
+ aws_cdk_lib_1.Arn.format({
336
+ service: 'logs',
337
+ resource: 'log-group',
338
+ resourceName: 'aws/spans',
339
+ arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
340
+ }, stack),
341
+ aws_cdk_lib_1.Arn.format({
342
+ service: 'logs',
343
+ resource: 'log-group',
344
+ resourceName: 'aws/spans:*',
345
+ arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
346
+ }, stack),
347
+ ],
348
+ }));
349
+ role.addToPolicy(new iam.PolicyStatement({
350
+ sid: 'BedrockInvokeStatement',
351
+ actions: perms_1.EVALUATION_BEDROCK_MODEL_PERMS,
352
+ resources: [
353
+ `arn:${aws_cdk_lib_1.Aws.PARTITION}:bedrock:*::foundation-model/*`,
354
+ aws_cdk_lib_1.Arn.format({
355
+ service: 'bedrock',
356
+ resource: 'inference-profile',
357
+ resourceName: '*',
358
+ region: '*',
359
+ }, stack),
360
+ ],
361
+ }));
362
+ return role;
363
+ }
364
+ buildRuleConfig(props) {
365
+ return {
366
+ samplingConfig: {
367
+ samplingPercentage: props.samplingPercentage ?? 10,
368
+ },
369
+ sessionConfig: {
370
+ sessionTimeoutMinutes: props.sessionTimeout?.toMinutes() ?? 15,
371
+ },
372
+ ...(props.filters && props.filters.length > 0 ? {
373
+ filters: props.filters.map((f) => ({
374
+ key: f.key,
375
+ operator: f.operator.value,
376
+ value: f.value._bind(),
377
+ })),
378
+ } : {}),
379
+ };
380
+ }
381
+ static {
382
+ __runInitializers(_classThis, _classExtraInitializers);
383
+ }
384
+ };
385
+ return OnlineEvaluationConfig = _classThis;
386
+ })();
387
+ exports.OnlineEvaluationConfig = OnlineEvaluationConfig;
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25saW5lLWV2YWx1YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvbmxpbmUtZXZhbHVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILDZDQUF5RDtBQUN6RCxxRUFBcUU7QUFDckUsMkNBQTJDO0FBQzNDLDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFJMUUscUVBQThGO0FBQzlGLG1DQU1pQjtBQUtqQiw2REFROEI7QUFzQjlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7SUFFVSxzQkFBc0I7NEJBRGxDLG9DQUFrQjs7OztzQkFDeUIsNkNBQW9CO3NDQUE1QixTQUFRLFdBQW9COzs7O1lBQWhFLDZLQWdXQzs7Ozs7UUEvVkMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FDMUMsNkRBQTZELENBQUM7UUFFaEU7Ozs7Ozs7V0FPRztRQUNJLE1BQU0sQ0FBQyw0QkFBNEIsQ0FDeEMsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLHdCQUFnQztZQUVoQyxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixNQUFNLFNBQVMsR0FBRyxpQkFBRyxDQUFDLE1BQU0sQ0FDMUI7Z0JBQ0UsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsWUFBWSxFQUFFLHdCQUF3QjthQUN2QyxFQUNELEtBQUssQ0FDTixDQUFDO1lBRUYsT0FBTyxzQkFBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUM1RSx5QkFBeUIsRUFBRSxTQUFTO2dCQUNwQyx3QkFBd0IsRUFBRSx3QkFBd0I7Z0JBQ2xELDBCQUEwQixFQUFFLHdCQUF3QjthQUNyRCxDQUFDLENBQUM7U0FDSjtRQUVEOzs7Ozs7O1dBT0c7UUFDSSxNQUFNLENBQUMs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LENBQ1I7d0JBQ0UsT0FBTyxFQUFFLFNBQVM7d0JBQ2xCLFFBQVEsRUFBRSxtQkFBbUI7d0JBQzdCLFlBQVksRUFBRSxHQUFHO3dCQUNqQixNQUFNLEVBQUUsR0FBRztxQkFDWixFQUNELEtBQUssQ0FDTjtpQkFDRjthQUNGLENBQUMsQ0FDSCxDQUFDO1lBRUYsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVPLGVBQWUsQ0FBQyxLQUFrQztZQUN4RCxPQUFPO2dCQUNMLGNBQWMsRUFBRTtvQkFDZCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLElBQUksRUFBRTtpQkFDbkQ7Z0JBQ0QsYUFBYSxFQUFFO29CQUNiLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtpQkFDL0Q7Z0JBQ0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNqQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUc7d0JBQ1YsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSzt3QkFDMUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO3FCQUN2QixDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztTQUNIOztZQS9WVSx1REFBc0I7Ozs7O0FBQXRCLHdEQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBBd3MsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhU291cmNlQ29uZmlnIH0gZnJvbSAnLi9kYXRhLXNvdXJjZSc7XG5pbXBvcnQgdHlwZSB7IEV2YWx1YXRvclJlZmVyZW5jZSB9IGZyb20gJy4vZXZhbHVhdG9yJztcbmltcG9ydCB7IHR5cGUgSU9ubGluZUV2YWx1YXRpb25Db25maWcsIE9ubGluZUV2YWx1YXRpb25CYXNlIH0gZnJvbSAnLi9vbmxpbmUtZXZhbHVhdGlvbi1iYXNlJztcbmltcG9ydCB7XG4gIEVWQUxVQVRJT05fQkVEUk9DS19NT0RFTF9QRVJNUyxcbiAgRVZBTFVBVElPTl9DTE9VRFdBVENIX0lOREVYX1BPTElDWV9QRVJNUyxcbiAgRVZBTFVBVElPTl9DTE9VRFdBVENIX0xPR1NfREVTQ1JJQkVfUEVSTVMsXG4gIEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1FVRVJZX1BFUk1TLFxuICBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfTE9HU19XUklURV9QRVJNUyxcbn0gZnJvbSAnLi9wZXJtcyc7XG5pbXBvcnQge1xuICB0eXBlIE9ubGluZUV2YWx1YXRpb25CYXNlUHJvcHMsXG4gIHR5cGUgT25saW5lRXZhbHVhdGlvbkNvbmZpZ0F0dHJpYnV0ZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgdmFsaWRhdGVDb25maWdOYW1lLFxuICB2YWxpZGF0ZURlc2NyaXB0aW9uLFxuICB2YWxpZGF0ZUV2YWx1YXRvcnMsXG4gIHZhbGlkYXRlU2FtcGxpbmdQZXJjZW50YWdlLFxuICB2YWxpZGF0ZUZpbHRlcnMsXG4gIHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQsXG4gIHRocm93SWZJbnZhbGlkLFxufSBmcm9tICcuL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gT25saW5lRXZhbHVhdGlvbkNvbmZpZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnUHJvcHMgZXh0ZW5kcyBPbmxpbmVFdmFsdWF0aW9uQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGV2YWx1YXRvcnMgdG8gYXBwbHkgZHVyaW5nIG9ubGluZSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBDYW4gaW5jbHVkZSBib3RoIGJ1aWx0LWluIGV2YWx1YXRvcnMgYW5kIGN1c3RvbSBldmFsdWF0b3JzLlxuICAgKlxuICAgKiBAbWluaW11bSAxXG4gICAqIEBtYXhpbXVtIDEwXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0b3JzOiBFdmFsdWF0b3JSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogVGhlIGRhdGEgc291cmNlIGNvbmZpZ3VyYXRpb24gdGhhdCBzcGVjaWZpZXMgd2hlcmUgdG8gcmVhZCBhZ2VudCB0cmFjZXMgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2U6IERhdGFTb3VyY2VDb25maWc7XG59XG5cbi8qKlxuICogT25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbiBmb3IgQW1hem9uIEJlZHJvY2sgQWdlbnRDb3JlLlxuICpcbiAqIEVuYWJsZXMgY29udGludW91cyBldmFsdWF0aW9uIG9mIGFnZW50IHBlcmZvcm1hbmNlIHVzaW5nIGJ1aWx0LWluIG9yIGN1c3RvbSBldmFsdWF0b3JzLlxuICogU3VwcG9ydHMgQ2xvdWRXYXRjaCBMb2dzIGFuZCBBZ2VudCBFbmRwb2ludCBkYXRhIHNvdXJjZXMuXG4gKlxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6T25saW5lRXZhbHVhdGlvbkNvbmZpZ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZSB3aXRoIGJ1aWx0LWluIGV2YWx1YXRvcnNcbiAqIGNvbnN0IGV2YWx1YXRpb24gPSBuZXcgYWdlbnRjb3JlLk9ubGluZUV2YWx1YXRpb25Db25maWcodGhpcywgJ015RXZhbHVhdGlvbicsIHtcbiAqICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6ICdteV9ldmFsdWF0aW9uJyxcbiAqICAgZXZhbHVhdG9yczogW1xuICogICAgIGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuYnVpbHRpbihhZ2VudGNvcmUuQnVpbHRpbkV2YWx1YXRvci5IRUxQRlVMTkVTUyksXG4gKiAgICAgYWdlbnRjb3JlLkV2YWx1YXRvclJlZmVyZW5jZS5idWlsdGluKGFnZW50Y29yZS5CdWlsdGluRXZhbHVhdG9yLkNPUlJFQ1RORVNTKSxcbiAqICAgXSxcbiAqICAgZGF0YVNvdXJjZTogYWdlbnRjb3JlLkRhdGFTb3VyY2VDb25maWcuZnJvbUNsb3VkV2F0Y2hMb2dzKHtcbiAqICAgICBsb2dHcm91cE5hbWVzOiBbJy9hd3MvYmVkcm9jay1hZ2VudGNvcmUvbXktYWdlbnQnXSxcbiAqICAgICBzZXJ2aWNlTmFtZXM6IFsnbXktYWdlbnQuZGVmYXVsdCddLFxuICogICB9KSxcbiAqIH0pO1xuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgT25saW5lRXZhbHVhdGlvbkNvbmZpZyBleHRlbmRzIE9ubGluZUV2YWx1YXRpb25CYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9XG4gICAgJ0Bhd3MtY2RrLmF3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYS5PbmxpbmVFdmFsdWF0aW9uQ29uZmlnJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIE9ubGluZUV2YWx1YXRpb25Db25maWcgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQgLSBUaGUgY29uZmlndXJhdGlvbiBJRCB0byBpbXBvcnRcbiAgICogQHJldHVybnMgQW4gSU9ubGluZUV2YWx1YXRpb25Db25maWcgcmVmZXJlbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdJZDogc3RyaW5nLFxuICApOiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgY29uZmlnQXJuID0gQXJuLmZvcm1hdChcbiAgICAgIHtcbiAgICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdvbmxpbmUtZXZhbHVhdGlvbi1jb25maWcnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IG9ubGluZUV2YWx1YXRpb25Db25maWdJZCxcbiAgICAgIH0sXG4gICAgICBzdGFjayxcbiAgICApO1xuXG4gICAgcmV0dXJuIE9ubGluZUV2YWx1YXRpb25Db25maWcuZnJvbU9ubGluZUV2YWx1YXRpb25Db25maWdBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybjogY29uZmlnQXJuLFxuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkOiBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQsXG4gICAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnTmFtZTogb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIGJ5IGl0cyBBUk4uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIG9ubGluZUV2YWx1YXRpb25Db25maWdBcm4gLSBUaGUgY29uZmlndXJhdGlvbiBBUk4gdG8gaW1wb3J0XG4gICAqIEByZXR1cm5zIEFuIElPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIHJlZmVyZW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tT25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0Fybjogc3RyaW5nLFxuICApOiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyB7XG4gICAgY29uc3QgYXJuUGFydHMgPSBBcm4uc3BsaXQob25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpO1xuICAgIGNvbnN0IGNvbmZpZ0lkID0gYXJuUGFydHMucmVzb3VyY2VOYW1lITtcblxuICAgIHJldHVybiBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnLmZyb21PbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdBcm46IG9ubGluZUV2YWx1YXRpb25Db25maWdBcm4sXG4gICAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQ6IGNvbmZpZ0lkLFxuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6IGNvbmZpZ0lkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIGZyb20gaXRzIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGF0dHJzIC0gVGhlIGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlc1xuICAgKiBAcmV0dXJucyBBbiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9ubGluZUV2YWx1YXRpb25Db25maWdBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogT25saW5lRXZhbHVhdGlvbkNvbmZpZ0F0dHJpYnV0ZXMsXG4gICk6IElPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBPbmxpbmVFdmFsdWF0aW9uQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybiA9IGF0dHJzLm9ubGluZUV2YWx1YXRpb25Db25maWdBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkID0gYXR0cnMub25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lID0gYXR0cnMub25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZSA9IGF0dHJzLmV4ZWN1dGlvblJvbGVBcm5cbiAgICAgICAgPyBpYW0uUm9sZS5mcm9tUm9sZUFybihzY29wZSwgYCR7aWR9Um9sZWAsIGF0dHJzLmV4ZWN1dGlvblJvbGVBcm4pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25TdGF0dXMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGkpO1xuICAgICAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlID8/IG5ldyBpYW0uVW5rbm93blByaW5jaXBhbCh7IHJlc291cmNlOiB0aGlzIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBvbmxpbmUgZXZhbHVhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvbmxpbmUgZXZhbHVhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSBleGVjdXRpb24gcm9sZSBmb3IgdGhlIGV2YWx1YXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBzdGF0dXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRpb24gc3RhdHVzIG9mIHRoZSBldmFsdWF0aW9uIChFTkFCTEVEIG9yIERJU0FCTEVEKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25TdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgY29uZmlndXJhdGlvbiB3YXMgY3JlYXRlZC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIHdhcyBsYXN0IHVwZGF0ZWQuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG8uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMub25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWUsXG4gICAgfSk7XG5cbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZUNvbmZpZ05hbWUsIHByb3BzLm9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZURlc2NyaXB0aW9uLCBwcm9wcy5kZXNjcmlwdGlvbiwgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVFdmFsdWF0b3JzLCBwcm9wcy5ldmFsdWF0b3JzLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZVNhbXBsaW5nUGVyY2VudGFnZSwgcHJvcHMuc2FtcGxpbmdQZXJjZW50YWdlLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZUZpbHRlcnMsIHByb3BzLmZpbHRlcnMsIHRoaXMpO1xuICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQsIHByb3BzLnNlc3Npb25UaW1lb3V0Py50b01pbnV0ZXMoKSwgdGhpcyk7XG5cbiAgICB0aGlzLm9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy5leGVjdXRpb25Sb2xlID0gcHJvcHMuZXhlY3V0aW9uUm9sZSA/PyB0aGlzLmNyZWF0ZUV4ZWN1dGlvblJvbGUocHJvcHMuZGF0YVNvdXJjZSk7XG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMuZXhlY3V0aW9uUm9sZTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IGJlZHJvY2thZ2VudGNvcmUuQ2ZuT25saW5lRXZhbHVhdGlvbkNvbmZpZyh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnTmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBldmFsdWF0b3JzOiBwcm9wcy5ldmFsdWF0b3JzLm1hcCgoZSkgPT4gZS5iaW5kKCkpLFxuICAgICAgZGF0YVNvdXJjZUNvbmZpZzogcHJvcHMuZGF0YVNvdXJjZS5iaW5kKCksXG4gICAgICBldmFsdWF0aW9uRXhlY3V0aW9uUm9sZUFybjogdGhpcy5leGVjdXRpb25Sb2xlIS5yb2xlQXJuLFxuICAgICAgcnVsZTogdGhpcy5idWlsZFJ1bGVDb25maWcocHJvcHMpLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZXhlY3V0aW9uU3RhdHVzOiBwcm9wcy5leGVjdXRpb25TdGF0dXM/LnZhbHVlLFxuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBleGVjdXRpb24gcm9sZSdzIHBvbGljaWVzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgTDEgcmVzb3VyY2UsXG4gICAgLy8gYmVjYXVzZSBCZWRyb2NrQWdlbnRDb3JlIHZhbGlkYXRlcyByb2xlIHBlcm1pc3Npb25zIGF0IGNyZWF0ZSB0aW1lLlxuICAgIGlmICh0aGlzLmV4ZWN1dGlvblJvbGUgaW5zdGFuY2VvZiBpYW0uUm9sZSAmJiB0aGlzLmV4ZWN1dGlvblJvbGUubm9kZS5kZWZhdWx0Q2hpbGQpIHtcbiAgICAgIHJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmV4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIHRoaXMub25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybiA9IHJlc291cmNlLmF0dHJPbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuO1xuICAgIHRoaXMub25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkID0gcmVzb3VyY2UuYXR0ck9ubGluZUV2YWx1YXRpb25Db25maWdJZDtcbiAgICB0aGlzLnN0YXR1cyA9IHJlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy5leGVjdXRpb25TdGF0dXMgPSByZXNvdXJjZS5leGVjdXRpb25TdGF0dXM7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSByZXNvdXJjZS5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMudXBkYXRlZEF0ID0gcmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRXhlY3V0aW9uUm9sZShkYXRhU291cmNlOiBEYXRhU291cmNlQ29uZmlnKTogaWFtLklSb2xlIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnRXhlY3V0aW9uUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJywge1xuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAnYXdzOlNvdXJjZUFjY291bnQnOiBzdGFjay5hY2NvdW50LFxuICAgICAgICAgICAgJ2F3czpSZXNvdXJjZUFjY291bnQnOiBzdGFjay5hY2NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgQXJuTGlrZToge1xuICAgICAgICAgICAgJ2F3czpTb3VyY2VBcm4nOiBbXG4gICAgICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnZXZhbHVhdG9yJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnb25saW5lLWV2YWx1YXRpb24tY29uZmlnJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0aW9uIHJvbGUgZm9yIEJlZHJvY2sgQWdlbnRDb3JlIE9ubGluZSBFdmFsdWF0aW9uJyxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBzZXJ2aWNlIHJlcXVpcmVzIHF1ZXJ5IGFjY2VzcyB0byB1c2VyLXNwZWNpZmllZCBsb2cgZ3JvdXBzIEFORCB0aGVcbiAgICAvLyBpbXBsaWNpdCBhd3Mvc3BhbnMgbG9nIGdyb3VwIGl0IHVzZXMgaW50ZXJuYWxseSBmb3IgdHJhY2UgZGF0YS5cbiAgICBjb25zdCBsb2dHcm91cEFybnMgPSBbXG4gICAgICAuLi5kYXRhU291cmNlLmNsb3VkV2F0Y2hMb2dzQ29uZmlnLmxvZ0dyb3VwTmFtZXMsXG4gICAgICAnYXdzL3NwYW5zJyxcbiAgICBdLmZsYXRNYXAoXG4gICAgICAobmFtZSkgPT4gW1xuICAgICAgICBBcm4uZm9ybWF0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgIHJlc291cmNlOiAnbG9nLWdyb3VwJyxcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogbmFtZSxcbiAgICAgICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGFjayxcbiAgICAgICAgKSxcbiAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZXJ2aWNlOiAnbG9ncycsXG4gICAgICAgICAgICByZXNvdXJjZTogJ2xvZy1ncm91cCcsXG4gICAgICAgICAgICByZXNvdXJjZU5hbWU6IGAke25hbWV9OipgLFxuICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YWNrLFxuICAgICAgICApLFxuICAgICAgXSxcbiAgICApO1xuXG4gICAgLy8gbG9nczpEZXNjcmliZUxvZ0dyb3VwcyBkb2VzIG5vdCBzdXBwb3J0IHJlc291cmNlLWxldmVsIHBlcm1pc3Npb25zLlxuICAgIC8vIFRoZSByZXNvdXJjZSBtdXN0IGJlICcqJyBwZXIgdGhlIElBTSBzZXJ2aWNlIGF1dGhvcml6YXRpb24gcmVmZXJlbmNlLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uY2xvdWR3YXRjaGxvZ3MuaHRtbFxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hMb2dEZXNjcmliZVN0YXRlbWVudCcsXG4gICAgICAgIGFjdGlvbnM6IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX0RFU0NSSUJFX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hMb2dRdWVyeVN0YXRlbWVudCcsXG4gICAgICAgIGFjdGlvbnM6IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1FVRVJZX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IGxvZ0dyb3VwQXJucyxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6ICdDbG91ZFdhdGNoTG9nV3JpdGVTdGF0ZW1lbnQnLFxuICAgICAgICBhY3Rpb25zOiBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfTE9HU19XUklURV9QRVJNUyxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogJ2xvZ3MnLFxuICAgICAgICAgICAgICByZXNvdXJjZTogJ2xvZy1ncm91cCcsXG4gICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJy9hd3MvYmVkcm9jay1hZ2VudGNvcmUvZXZhbHVhdGlvbnMvKicsXG4gICAgICAgICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6ICdDbG91ZFdhdGNoSW5kZXhQb2xpY3lTdGF0ZW1lbnQnLFxuICAgICAgICBhY3Rpb25zOiBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfSU5ERVhfUE9MSUNZX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBBcm4uZm9ybWF0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZXJ2aWNlOiAnbG9ncycsXG4gICAgICAgICAgICAgIHJlc291cmNlOiAnbG9nLWdyb3VwJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnYXdzL3NwYW5zJyxcbiAgICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICApLFxuICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2U6ICdsb2ctZ3JvdXAnLFxuICAgICAgICAgICAgICByZXNvdXJjZU5hbWU6ICdhd3Mvc3BhbnM6KicsXG4gICAgICAgICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6ICdCZWRyb2NrSW52b2tlU3RhdGVtZW50JyxcbiAgICAgICAgYWN0aW9uczogRVZBTFVBVElPTl9CRURST0NLX01PREVMX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOiR7QXdzLlBBUlRJVElPTn06YmVkcm9jazoqOjpmb3VuZGF0aW9uLW1vZGVsLypgLFxuICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlcnZpY2U6ICdiZWRyb2NrJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2U6ICdpbmZlcmVuY2UtcHJvZmlsZScsXG4gICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICAgICAgICByZWdpb246ICcqJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiByb2xlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJ1bGVDb25maWcocHJvcHM6IE9ubGluZUV2YWx1YXRpb25Db25maWdQcm9wcyk6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuT25saW5lRXZhbHVhdGlvbkNvbmZpZy5SdWxlUHJvcGVydHkge1xuICAgIHJldHVybiB7XG4gICAgICBzYW1wbGluZ0NvbmZpZzoge1xuICAgICAgICBzYW1wbGluZ1BlcmNlbnRhZ2U6IHByb3BzLnNhbXBsaW5nUGVyY2VudGFnZSA/PyAxMCxcbiAgICAgIH0sXG4gICAgICBzZXNzaW9uQ29uZmlnOiB7XG4gICAgICAgIHNlc3Npb25UaW1lb3V0TWludXRlczogcHJvcHMuc2Vzc2lvblRpbWVvdXQ/LnRvTWludXRlcygpID8/IDE1LFxuICAgICAgfSxcbiAgICAgIC4uLihwcm9wcy5maWx0ZXJzICYmIHByb3BzLmZpbHRlcnMubGVuZ3RoID4gMCA/IHtcbiAgICAgICAgZmlsdGVyczogcHJvcHMuZmlsdGVycy5tYXAoKGYpID0+ICh7XG4gICAgICAgICAga2V5OiBmLmtleSxcbiAgICAgICAgICBvcGVyYXRvcjogZi5vcGVyYXRvci52YWx1ZSxcbiAgICAgICAgICB2YWx1ZTogZi52YWx1ZS5fYmluZCgpLFxuICAgICAgICB9KSksXG4gICAgICB9IDoge30pLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
+ * with the License. A copy of the License is located at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
+ * and limitations under the License.
12
+ */
13
+ /**
14
+ * Permissions to describe CloudWatch Log Groups.
15
+ * This is a list operation that does not support resource-level permissions.
16
+ */
17
+ export declare const EVALUATION_CLOUDWATCH_LOGS_DESCRIBE_PERMS: string[];
18
+ /**
19
+ * Permissions for the execution role to query CloudWatch Logs.
20
+ * These actions support resource-level permissions scoped to specific log groups.
21
+ */
22
+ export declare const EVALUATION_CLOUDWATCH_LOGS_QUERY_PERMS: string[];
23
+ /**
24
+ * Permissions for the execution role to invoke Bedrock models.
25
+ */
26
+ export declare const EVALUATION_BEDROCK_MODEL_PERMS: string[];
27
+ /**
28
+ * Permissions for the execution role to write evaluation results.
29
+ */
30
+ export declare const EVALUATION_CLOUDWATCH_LOGS_WRITE_PERMS: string[];
31
+ /**
32
+ * Permissions for CloudWatch index policies.
33
+ */
34
+ export declare const EVALUATION_CLOUDWATCH_INDEX_POLICY_PERMS: string[];
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.EVALUATION_CLOUDWATCH_INDEX_POLICY_PERMS = exports.EVALUATION_CLOUDWATCH_LOGS_WRITE_PERMS = exports.EVALUATION_BEDROCK_MODEL_PERMS = exports.EVALUATION_CLOUDWATCH_LOGS_QUERY_PERMS = exports.EVALUATION_CLOUDWATCH_LOGS_DESCRIBE_PERMS = void 0;
16
+ /**
17
+ * Permissions to describe CloudWatch Log Groups.
18
+ * This is a list operation that does not support resource-level permissions.
19
+ */
20
+ exports.EVALUATION_CLOUDWATCH_LOGS_DESCRIBE_PERMS = [
21
+ 'logs:DescribeLogGroups',
22
+ ];
23
+ /**
24
+ * Permissions for the execution role to query CloudWatch Logs.
25
+ * These actions support resource-level permissions scoped to specific log groups.
26
+ */
27
+ exports.EVALUATION_CLOUDWATCH_LOGS_QUERY_PERMS = [
28
+ 'logs:GetQueryResults',
29
+ 'logs:StartQuery',
30
+ ];
31
+ /**
32
+ * Permissions for the execution role to invoke Bedrock models.
33
+ */
34
+ exports.EVALUATION_BEDROCK_MODEL_PERMS = [
35
+ 'bedrock:InvokeModel',
36
+ 'bedrock:InvokeModelWithResponseStream',
37
+ ];
38
+ /**
39
+ * Permissions for the execution role to write evaluation results.
40
+ */
41
+ exports.EVALUATION_CLOUDWATCH_LOGS_WRITE_PERMS = [
42
+ 'logs:CreateLogGroup',
43
+ 'logs:CreateLogStream',
44
+ 'logs:PutLogEvents',
45
+ ];
46
+ /**
47
+ * Permissions for CloudWatch index policies.
48
+ */
49
+ exports.EVALUATION_CLOUDWATCH_INDEX_POLICY_PERMS = [
50
+ 'logs:DescribeIndexPolicies',
51
+ 'logs:PutIndexPolicy',
52
+ ];
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwZXJtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQUVIOzs7R0FHRztBQUNVLFFBQUEseUNBQXlDLEdBQUc7SUFDdkQsd0JBQXdCO0NBQ3pCLENBQUM7QUFFRjs7O0dBR0c7QUFDVSxRQUFBLHNDQUFzQyxHQUFHO0lBQ3BELHNCQUFzQjtJQUN0QixpQkFBaUI7Q0FDbEIsQ0FBQztBQUVGOztHQUVHO0FBQ1UsUUFBQSw4QkFBOEIsR0FBRztJQUM1QyxxQkFBcUI7SUFDckIsdUNBQXVDO0NBQ3hDLENBQUM7QUFFRjs7R0FFRztBQUNVLFFBQUEsc0NBQXNDLEdBQUc7SUFDcEQscUJBQXFCO0lBQ3JCLHNCQUFzQjtJQUN0QixtQkFBbUI7Q0FDcEIsQ0FBQztBQUVGOztHQUVHO0FBQ1UsUUFBQSx3Q0FBd0MsR0FBRztJQUN0RCw0QkFBNEI7SUFDNUIscUJBQXFCO0NBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIFBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIENsb3VkV2F0Y2ggTG9nIEdyb3Vwcy5cbiAqIFRoaXMgaXMgYSBsaXN0IG9wZXJhdGlvbiB0aGF0IGRvZXMgbm90IHN1cHBvcnQgcmVzb3VyY2UtbGV2ZWwgcGVybWlzc2lvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfTE9HU19ERVNDUklCRV9QRVJNUyA9IFtcbiAgJ2xvZ3M6RGVzY3JpYmVMb2dHcm91cHMnLFxuXTtcblxuLyoqXG4gKiBQZXJtaXNzaW9ucyBmb3IgdGhlIGV4ZWN1dGlvbiByb2xlIHRvIHF1ZXJ5IENsb3VkV2F0Y2ggTG9ncy5cbiAqIFRoZXNlIGFjdGlvbnMgc3VwcG9ydCByZXNvdXJjZS1sZXZlbCBwZXJtaXNzaW9ucyBzY29wZWQgdG8gc3BlY2lmaWMgbG9nIGdyb3Vwcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1FVRVJZX1BFUk1TID0gW1xuICAnbG9nczpHZXRRdWVyeVJlc3VsdHMnLFxuICAnbG9nczpTdGFydFF1ZXJ5Jyxcbl07XG5cbi8qKlxuICogUGVybWlzc2lvbnMgZm9yIHRoZSBleGVjdXRpb24gcm9sZSB0byBpbnZva2UgQmVkcm9jayBtb2RlbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBFVkFMVUFUSU9OX0JFRFJPQ0tfTU9ERUxfUEVSTVMgPSBbXG4gICdiZWRyb2NrOkludm9rZU1vZGVsJyxcbiAgJ2JlZHJvY2s6SW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW0nLFxuXTtcblxuLyoqXG4gKiBQZXJtaXNzaW9ucyBmb3IgdGhlIGV4ZWN1dGlvbiByb2xlIHRvIHdyaXRlIGV2YWx1YXRpb24gcmVzdWx0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1dSSVRFX1BFUk1TID0gW1xuICAnbG9nczpDcmVhdGVMb2dHcm91cCcsXG4gICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICdsb2dzOlB1dExvZ0V2ZW50cycsXG5dO1xuXG4vKipcbiAqIFBlcm1pc3Npb25zIGZvciBDbG91ZFdhdGNoIGluZGV4IHBvbGljaWVzLlxuICovXG5leHBvcnQgY29uc3QgRVZBTFVBVElPTl9DTE9VRFdBVENIX0lOREVYX1BPTElDWV9QRVJNUyA9IFtcbiAgJ2xvZ3M6RGVzY3JpYmVJbmRleFBvbGljaWVzJyxcbiAgJ2xvZ3M6UHV0SW5kZXhQb2xpY3knLFxuXTtcbiJdfQ==