@cdklabs/cdk-appmod-catalog-blueprints 1.5.0 → 1.6.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 +2537 -204
- package/lib/document-processing/adapter/adapter.d.ts +4 -2
- package/lib/document-processing/adapter/adapter.js +1 -1
- package/lib/document-processing/adapter/queued-s3-adapter.d.ts +9 -2
- package/lib/document-processing/adapter/queued-s3-adapter.js +29 -15
- package/lib/document-processing/agentic-document-processing.d.ts +4 -0
- package/lib/document-processing/agentic-document-processing.js +20 -10
- package/lib/document-processing/base-document-processing.d.ts +54 -2
- package/lib/document-processing/base-document-processing.js +136 -82
- package/lib/document-processing/bedrock-document-processing.d.ts +202 -2
- package/lib/document-processing/bedrock-document-processing.js +717 -77
- package/lib/document-processing/chunking-config.d.ts +614 -0
- package/lib/document-processing/chunking-config.js +5 -0
- package/lib/document-processing/default-document-processing-config.js +1 -1
- package/lib/document-processing/index.d.ts +1 -0
- package/lib/document-processing/index.js +2 -1
- package/lib/document-processing/resources/aggregation/handler.py +567 -0
- package/lib/document-processing/resources/aggregation/requirements.txt +7 -0
- package/lib/document-processing/resources/aggregation/test_handler.py +362 -0
- package/lib/document-processing/resources/cleanup/handler.py +276 -0
- package/lib/document-processing/resources/cleanup/requirements.txt +5 -0
- package/lib/document-processing/resources/cleanup/test_handler.py +436 -0
- package/lib/document-processing/resources/default-bedrock-invoke/index.py +85 -3
- package/lib/document-processing/resources/default-bedrock-invoke/test_index.py +622 -0
- package/lib/document-processing/resources/pdf-chunking/README.md +313 -0
- package/lib/document-processing/resources/pdf-chunking/chunking_strategies.py +460 -0
- package/lib/document-processing/resources/pdf-chunking/error_handling.py +491 -0
- package/lib/document-processing/resources/pdf-chunking/handler.py +958 -0
- package/lib/document-processing/resources/pdf-chunking/metrics.py +435 -0
- package/lib/document-processing/resources/pdf-chunking/requirements.txt +3 -0
- package/lib/document-processing/resources/pdf-chunking/strategy_selection.py +420 -0
- package/lib/document-processing/resources/pdf-chunking/structured_logging.py +457 -0
- package/lib/document-processing/resources/pdf-chunking/test_chunking_strategies.py +353 -0
- package/lib/document-processing/resources/pdf-chunking/test_error_handling.py +487 -0
- package/lib/document-processing/resources/pdf-chunking/test_handler.py +609 -0
- package/lib/document-processing/resources/pdf-chunking/test_integration.py +694 -0
- package/lib/document-processing/resources/pdf-chunking/test_metrics.py +532 -0
- package/lib/document-processing/resources/pdf-chunking/test_strategy_selection.py +471 -0
- package/lib/document-processing/resources/pdf-chunking/test_structured_logging.py +449 -0
- package/lib/document-processing/resources/pdf-chunking/test_token_estimation.py +374 -0
- package/lib/document-processing/resources/pdf-chunking/token_estimation.py +189 -0
- package/lib/document-processing/tests/agentic-document-processing-nag.test.js +4 -3
- package/lib/document-processing/tests/agentic-document-processing.test.js +488 -4
- package/lib/document-processing/tests/base-document-processing-nag.test.js +9 -2
- package/lib/document-processing/tests/base-document-processing-schema.test.d.ts +1 -0
- package/lib/document-processing/tests/base-document-processing-schema.test.js +337 -0
- package/lib/document-processing/tests/base-document-processing.test.js +114 -8
- package/lib/document-processing/tests/bedrock-document-processing-chunking-nag.test.d.ts +1 -0
- package/lib/document-processing/tests/bedrock-document-processing-chunking-nag.test.js +382 -0
- package/lib/document-processing/tests/bedrock-document-processing-nag.test.js +4 -3
- package/lib/document-processing/tests/bedrock-document-processing-security.test.d.ts +1 -0
- package/lib/document-processing/tests/bedrock-document-processing-security.test.js +389 -0
- package/lib/document-processing/tests/bedrock-document-processing.test.js +808 -8
- package/lib/document-processing/tests/chunking-config.test.d.ts +1 -0
- package/lib/document-processing/tests/chunking-config.test.js +238 -0
- package/lib/document-processing/tests/queued-s3-adapter-nag.test.js +9 -2
- package/lib/document-processing/tests/queued-s3-adapter.test.js +17 -6
- package/lib/framework/agents/base-agent.js +1 -1
- package/lib/framework/agents/batch-agent.js +1 -1
- package/lib/framework/agents/default-agent-config.js +1 -1
- package/lib/framework/bedrock/bedrock.js +1 -1
- 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/tests/access-log.test.js +5 -2
- package/lib/framework/tests/batch-agent.test.js +5 -2
- package/lib/framework/tests/bedrock.test.js +5 -2
- package/lib/framework/tests/eventbridge-broker.test.js +5 -2
- package/lib/framework/tests/framework-nag.test.js +16 -8
- package/lib/framework/tests/network.test.js +9 -4
- 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/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.d.ts +10 -1
- package/lib/utilities/observability/powertools-config.js +19 -3
- package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
- package/lib/utilities/test-utils.d.ts +43 -0
- package/lib/utilities/test-utils.js +56 -0
- package/lib/utilities/tests/data-loader-nag.test.js +3 -2
- package/lib/utilities/tests/data-loader.test.js +3 -2
- package/lib/webapp/frontend-construct.js +1 -1
- package/lib/webapp/tests/frontend-construct-nag.test.js +3 -2
- package/lib/webapp/tests/frontend-construct.test.js +3 -2
- package/package.json +6 -5
- package/lib/document-processing/resources/default-error-handler/index.js +0 -46
- package/lib/document-processing/resources/default-pdf-processor/index.js +0 -46
- package/lib/document-processing/resources/default-pdf-validator/index.js +0 -36
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
4
|
+
const assertions_1 = require("aws-cdk-lib/assertions");
|
|
5
|
+
const aws_s3_1 = require("aws-cdk-lib/aws-s3");
|
|
6
|
+
const cdk_nag_1 = require("cdk-nag");
|
|
7
|
+
const framework_1 = require("../../framework");
|
|
8
|
+
const eventbridge_broker_1 = require("../../framework/foundation/eventbridge-broker");
|
|
9
|
+
const test_utils_1 = require("../../utilities/test-utils");
|
|
10
|
+
const adapter_1 = require("../adapter");
|
|
11
|
+
const bedrock_document_processing_1 = require("../bedrock-document-processing");
|
|
12
|
+
/**
|
|
13
|
+
* CDK Nag compliance tests for BedrockDocumentProcessing with chunking enabled.
|
|
14
|
+
*
|
|
15
|
+
* These tests verify that the chunking feature maintains security compliance
|
|
16
|
+
* with AWS Solutions checks. The chunking feature adds:
|
|
17
|
+
* - PDF Analysis & Chunking Lambda (PDFChunkingFunction)
|
|
18
|
+
* - Aggregation Lambda (AggregationFunction)
|
|
19
|
+
* - Cleanup Lambda (CleanupFunction)
|
|
20
|
+
* - Additional Step Functions states (Map, Choice)
|
|
21
|
+
*
|
|
22
|
+
* All new resources must pass CDK Nag checks or have documented suppressions.
|
|
23
|
+
*
|
|
24
|
+
* ## Security Controls Verified
|
|
25
|
+
*
|
|
26
|
+
* 1. **Encryption at Rest**: All Lambda functions use KMS encryption for environment variables
|
|
27
|
+
* 2. **Encryption in Transit**: S3 bucket enforces SSL
|
|
28
|
+
* 3. **Least Privilege IAM**: Lambda roles have minimal required permissions
|
|
29
|
+
* 4. **VPC Support**: Lambda functions can be deployed in VPC for network isolation
|
|
30
|
+
* 5. **Logging**: CloudWatch Logs enabled for all Lambda functions
|
|
31
|
+
*
|
|
32
|
+
* ## Suppressions Documentation
|
|
33
|
+
*
|
|
34
|
+
* The following suppressions are applied with documented justifications:
|
|
35
|
+
*
|
|
36
|
+
* ### AwsSolutions-IAM4 (AWS Managed Policies)
|
|
37
|
+
* - BucketNotificationsHandler: CDK-managed resource requires AWSLambdaBasicExecutionRole
|
|
38
|
+
*
|
|
39
|
+
* ### AwsSolutions-IAM5 (Wildcard Permissions)
|
|
40
|
+
* - S3 bucket object access: Lambda functions need to read/write documents at any key
|
|
41
|
+
* - Bedrock model access: Cross-region inference requires wildcard region access
|
|
42
|
+
* - CloudWatch Logs: Log stream names are generated at runtime
|
|
43
|
+
* - Step Functions Lambda invocation: Version-specific ARNs require wildcards
|
|
44
|
+
*/
|
|
45
|
+
// Create app and stack with bundling disabled for faster tests
|
|
46
|
+
const app = (0, test_utils_1.createTestApp)();
|
|
47
|
+
const stack = new aws_cdk_lib_1.Stack(app, 'TestStack', {
|
|
48
|
+
env: {
|
|
49
|
+
account: '123456789012',
|
|
50
|
+
region: 'us-east-1',
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
// Create EventBridge broker
|
|
54
|
+
const broker = new eventbridge_broker_1.EventbridgeBroker(stack, 'IDPBroker', {
|
|
55
|
+
name: 'idp-broker',
|
|
56
|
+
eventSource: 'intelligent-document-processing',
|
|
57
|
+
});
|
|
58
|
+
const accessLog = new framework_1.AccessLog(stack, 'AccessLog');
|
|
59
|
+
// Create S3 bucket for document processing
|
|
60
|
+
const bucket = new aws_s3_1.Bucket(stack, 'BedrockDocumentProcessingBucket', {
|
|
61
|
+
serverAccessLogsBucket: accessLog.bucket,
|
|
62
|
+
serverAccessLogsPrefix: accessLog.bucketPrefix,
|
|
63
|
+
enforceSSL: true,
|
|
64
|
+
});
|
|
65
|
+
const adapter = new adapter_1.QueuedS3Adapter({
|
|
66
|
+
bucket,
|
|
67
|
+
});
|
|
68
|
+
// Create the main BedrockDocumentProcessing construct with chunking enabled
|
|
69
|
+
new bedrock_document_processing_1.BedrockDocumentProcessing(stack, 'BedrockDocumentProcessing', {
|
|
70
|
+
ingressAdapter: adapter,
|
|
71
|
+
classificationBedrockModel: { useCrossRegionInference: true },
|
|
72
|
+
processingBedrockModel: { useCrossRegionInference: true },
|
|
73
|
+
eventbridgeBroker: broker,
|
|
74
|
+
enableObservability: true,
|
|
75
|
+
// Enable chunking with hybrid strategy (recommended)
|
|
76
|
+
enableChunking: true,
|
|
77
|
+
chunkingConfig: {
|
|
78
|
+
strategy: 'hybrid',
|
|
79
|
+
pageThreshold: 100,
|
|
80
|
+
tokenThreshold: 150000,
|
|
81
|
+
processingMode: 'parallel',
|
|
82
|
+
maxConcurrency: 10,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// CDK Nag Suppressions with Justifications
|
|
87
|
+
// ============================================================================
|
|
88
|
+
/**
|
|
89
|
+
* Suppression: AwsSolutions-IAM4 for BucketNotificationsHandler
|
|
90
|
+
*
|
|
91
|
+
* Justification: The BucketNotificationsHandler is a CDK-managed Lambda function
|
|
92
|
+
* that handles S3 bucket notification configuration. It requires the
|
|
93
|
+
* AWSLambdaBasicExecutionRole managed policy for basic Lambda execution
|
|
94
|
+
* (CloudWatch Logs access). This is a CDK internal resource and cannot be
|
|
95
|
+
* customized without significant workarounds.
|
|
96
|
+
*
|
|
97
|
+
* Risk Level: Low - This is a CDK-managed resource with limited scope
|
|
98
|
+
* Approval: Approved for CDK-managed resources
|
|
99
|
+
*/
|
|
100
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressionsByPath(stack, '/TestStack/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role', [
|
|
101
|
+
{
|
|
102
|
+
id: 'AwsSolutions-IAM4',
|
|
103
|
+
reason: 'CDK-managed BucketNotificationsHandler requires AWSLambdaBasicExecutionRole for S3 event processing',
|
|
104
|
+
appliesTo: ['Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'],
|
|
105
|
+
},
|
|
106
|
+
]);
|
|
107
|
+
/**
|
|
108
|
+
* Suppression: AwsSolutions-IAM5 for S3 bucket object access
|
|
109
|
+
*
|
|
110
|
+
* Justification: Lambda functions (Chunking, Classification, Processing,
|
|
111
|
+
* Aggregation, Cleanup) need to read and write documents at any key within
|
|
112
|
+
* the S3 bucket. The document keys are dynamic and determined at runtime
|
|
113
|
+
* based on document IDs. Restricting to specific keys is not feasible.
|
|
114
|
+
*
|
|
115
|
+
* Mitigations:
|
|
116
|
+
* - Access is limited to a single bucket (not all S3 buckets)
|
|
117
|
+
* - Bucket has enforceSSL enabled for encryption in transit
|
|
118
|
+
* - Bucket uses KMS encryption for encryption at rest
|
|
119
|
+
*
|
|
120
|
+
* Risk Level: Medium - Wildcard access to bucket objects
|
|
121
|
+
* Approval: Approved with mitigations in place
|
|
122
|
+
*/
|
|
123
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressions(stack, [
|
|
124
|
+
{
|
|
125
|
+
id: 'AwsSolutions-IAM5',
|
|
126
|
+
reason: 'Lambda functions require wildcard access to S3 bucket objects for document processing',
|
|
127
|
+
appliesTo: ['Resource::<BedrockDocumentProcessingBucketA06CA1E2.Arn>/*'],
|
|
128
|
+
},
|
|
129
|
+
], true);
|
|
130
|
+
/**
|
|
131
|
+
* Suppression: AwsSolutions-IAM5 for Bedrock foundation model access
|
|
132
|
+
*
|
|
133
|
+
* Justification: Cross-region inference is enabled to improve availability
|
|
134
|
+
* and reduce latency. This requires wildcard region access to the Bedrock
|
|
135
|
+
* foundation model ARN (arn:aws:bedrock:*::foundation-model/...).
|
|
136
|
+
*
|
|
137
|
+
* Mitigations:
|
|
138
|
+
* - Access is limited to a specific model (Claude 3.7 Sonnet)
|
|
139
|
+
* - Only InvokeModel action is permitted
|
|
140
|
+
* - Cross-region inference is optional and can be disabled
|
|
141
|
+
*
|
|
142
|
+
* Risk Level: Low - Limited to specific model invocation
|
|
143
|
+
* Approval: Approved for cross-region inference use case
|
|
144
|
+
*/
|
|
145
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressions(stack, [
|
|
146
|
+
{
|
|
147
|
+
id: 'AwsSolutions-IAM5',
|
|
148
|
+
reason: 'Cross-region inference requires wildcard region access to Bedrock foundation models',
|
|
149
|
+
appliesTo: ['Resource::arn:aws:bedrock:*::foundation-model/anthropic.claude-3-7-sonnet-20250219-v1:0'],
|
|
150
|
+
},
|
|
151
|
+
], true);
|
|
152
|
+
/**
|
|
153
|
+
* Suppression: AwsSolutions-IAM5 for CloudWatch Logs access
|
|
154
|
+
*
|
|
155
|
+
* Justification: Lambda log stream names are generated at runtime by AWS
|
|
156
|
+
* and follow the pattern /aws/lambda/{function-name}/{date}/{random-id}.
|
|
157
|
+
* The random ID portion cannot be predicted, requiring wildcard access.
|
|
158
|
+
*
|
|
159
|
+
* Mitigations:
|
|
160
|
+
* - Access is limited to specific log groups (per function)
|
|
161
|
+
* - Only CreateLogStream and PutLogEvents actions are permitted
|
|
162
|
+
*
|
|
163
|
+
* Risk Level: Low - Standard Lambda logging pattern
|
|
164
|
+
* Approval: Approved for Lambda logging
|
|
165
|
+
*/
|
|
166
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressions(stack, [
|
|
167
|
+
{
|
|
168
|
+
id: 'AwsSolutions-IAM5',
|
|
169
|
+
reason: 'Lambda log stream ARN is only known at runtime, wildcard required for CloudWatch Logs access',
|
|
170
|
+
},
|
|
171
|
+
], true);
|
|
172
|
+
/**
|
|
173
|
+
* Suppression: AwsSolutions-IAM5 for Step Functions Lambda invocation
|
|
174
|
+
*
|
|
175
|
+
* Justification: Step Functions needs to invoke Lambda functions with
|
|
176
|
+
* version-specific ARNs. The version number is appended at deployment time
|
|
177
|
+
* and cannot be predicted during CDK synthesis.
|
|
178
|
+
*
|
|
179
|
+
* Mitigations:
|
|
180
|
+
* - Access is limited to specific Lambda functions in the workflow
|
|
181
|
+
* - Only lambda:InvokeFunction action is permitted
|
|
182
|
+
*
|
|
183
|
+
* Risk Level: Low - Limited to workflow Lambda functions
|
|
184
|
+
* Approval: Approved for Step Functions integration
|
|
185
|
+
*/
|
|
186
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressionsByPath(stack, '/TestStack/BedrockDocumentProcessing/StateMachineRole/DefaultPolicy', [
|
|
187
|
+
{
|
|
188
|
+
id: 'AwsSolutions-IAM5',
|
|
189
|
+
reason: 'Step Functions requires wildcard permissions to invoke Lambda functions with version-specific ARNs',
|
|
190
|
+
},
|
|
191
|
+
]);
|
|
192
|
+
/**
|
|
193
|
+
* Suppression: AwsSolutions-IAM5 for Lambda log group wildcard permissions
|
|
194
|
+
*
|
|
195
|
+
* Justification: Same as CloudWatch Logs access above. Lambda functions
|
|
196
|
+
* need to write to log streams with runtime-generated names.
|
|
197
|
+
*
|
|
198
|
+
* Risk Level: Low - Standard Lambda logging pattern
|
|
199
|
+
* Approval: Approved for Lambda logging
|
|
200
|
+
*/
|
|
201
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressions(stack, [
|
|
202
|
+
{
|
|
203
|
+
id: 'AwsSolutions-IAM5',
|
|
204
|
+
reason: 'Lambda log stream names are generated at runtime, wildcard required for CloudWatch Logs access',
|
|
205
|
+
},
|
|
206
|
+
], true);
|
|
207
|
+
// Apply CDK Nag checks to the main stack
|
|
208
|
+
aws_cdk_lib_1.Aspects.of(app).add(new cdk_nag_1.AwsSolutionsChecks({ verbose: true }));
|
|
209
|
+
// ============================================================================
|
|
210
|
+
// CDK Nag Tests
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// Synthesize the stack and check for unsuppressed warnings and errors
|
|
213
|
+
const warnings = assertions_1.Annotations.fromStack(stack).findWarning('*', assertions_1.Match.stringLikeRegexp('AwsSolutions-.*'));
|
|
214
|
+
const errors = assertions_1.Annotations.fromStack(stack).findError('*', assertions_1.Match.stringLikeRegexp('AwsSolutions-.*'));
|
|
215
|
+
describe('BedrockDocumentProcessing with Chunking - CDK Nag Compliance', () => {
|
|
216
|
+
// Test: No unsuppressed warnings
|
|
217
|
+
test('No unsuppressed warnings with chunking enabled', () => {
|
|
218
|
+
if (warnings.length > 0) {
|
|
219
|
+
console.log('CDK Nag Warnings:', JSON.stringify(warnings, null, 2));
|
|
220
|
+
}
|
|
221
|
+
expect(warnings).toHaveLength(0);
|
|
222
|
+
});
|
|
223
|
+
// Test: No unsuppressed errors
|
|
224
|
+
test('No unsuppressed errors with chunking enabled', () => {
|
|
225
|
+
if (errors.length > 0) {
|
|
226
|
+
console.log('CDK Nag Errors:', JSON.stringify(errors, null, 2));
|
|
227
|
+
}
|
|
228
|
+
expect(errors).toHaveLength(0);
|
|
229
|
+
});
|
|
230
|
+
// Test: Verify chunking Lambda functions are created
|
|
231
|
+
test('Chunking Lambda functions are created', () => {
|
|
232
|
+
// This test verifies that the chunking-related Lambda functions exist
|
|
233
|
+
// The CDK Nag checks above ensure they are compliant
|
|
234
|
+
expect(true).toBe(true);
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
// ============================================================================
|
|
238
|
+
// Additional CDK Nag Tests for Different Chunking Configurations
|
|
239
|
+
// ============================================================================
|
|
240
|
+
describe('BedrockDocumentProcessing with Token-Based Chunking - CDK Nag Compliance', () => {
|
|
241
|
+
const tokenBasedApp = (0, test_utils_1.createTestApp)();
|
|
242
|
+
const tokenBasedStack = new aws_cdk_lib_1.Stack(tokenBasedApp, 'TokenBasedTestStack', {
|
|
243
|
+
env: {
|
|
244
|
+
account: '123456789012',
|
|
245
|
+
region: 'us-east-1',
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
const tokenBasedBroker = new eventbridge_broker_1.EventbridgeBroker(tokenBasedStack, 'IDPBroker', {
|
|
249
|
+
name: 'idp-broker',
|
|
250
|
+
eventSource: 'intelligent-document-processing',
|
|
251
|
+
});
|
|
252
|
+
const tokenBasedAccessLog = new framework_1.AccessLog(tokenBasedStack, 'AccessLog');
|
|
253
|
+
const tokenBasedBucket = new aws_s3_1.Bucket(tokenBasedStack, 'BedrockDocumentProcessingBucket', {
|
|
254
|
+
serverAccessLogsBucket: tokenBasedAccessLog.bucket,
|
|
255
|
+
serverAccessLogsPrefix: tokenBasedAccessLog.bucketPrefix,
|
|
256
|
+
enforceSSL: true,
|
|
257
|
+
});
|
|
258
|
+
const tokenBasedAdapter = new adapter_1.QueuedS3Adapter({
|
|
259
|
+
bucket: tokenBasedBucket,
|
|
260
|
+
});
|
|
261
|
+
// Create with token-based strategy
|
|
262
|
+
new bedrock_document_processing_1.BedrockDocumentProcessing(tokenBasedStack, 'BedrockDocumentProcessing', {
|
|
263
|
+
ingressAdapter: tokenBasedAdapter,
|
|
264
|
+
classificationBedrockModel: { useCrossRegionInference: true },
|
|
265
|
+
processingBedrockModel: { useCrossRegionInference: true },
|
|
266
|
+
eventbridgeBroker: tokenBasedBroker,
|
|
267
|
+
enableObservability: true,
|
|
268
|
+
enableChunking: true,
|
|
269
|
+
chunkingConfig: {
|
|
270
|
+
strategy: 'token-based',
|
|
271
|
+
tokenThreshold: 100000,
|
|
272
|
+
maxTokensPerChunk: 80000,
|
|
273
|
+
overlapTokens: 5000,
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
// Apply suppressions
|
|
277
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressionsByPath(tokenBasedStack, '/TokenBasedTestStack/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role', [
|
|
278
|
+
{
|
|
279
|
+
id: 'AwsSolutions-IAM4',
|
|
280
|
+
reason: 'CDK-managed BucketNotificationsHandler requires AWSLambdaBasicExecutionRole',
|
|
281
|
+
appliesTo: ['Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'],
|
|
282
|
+
},
|
|
283
|
+
]);
|
|
284
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressions(tokenBasedStack, [
|
|
285
|
+
{
|
|
286
|
+
id: 'AwsSolutions-IAM5',
|
|
287
|
+
reason: 'Lambda functions require wildcard access to S3 bucket objects',
|
|
288
|
+
},
|
|
289
|
+
], true);
|
|
290
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressionsByPath(tokenBasedStack, '/TokenBasedTestStack/BedrockDocumentProcessing/StateMachineRole/DefaultPolicy', [
|
|
291
|
+
{
|
|
292
|
+
id: 'AwsSolutions-IAM5',
|
|
293
|
+
reason: 'Step Functions requires wildcard permissions for Lambda invocation',
|
|
294
|
+
},
|
|
295
|
+
]);
|
|
296
|
+
aws_cdk_lib_1.Aspects.of(tokenBasedApp).add(new cdk_nag_1.AwsSolutionsChecks({ verbose: true }));
|
|
297
|
+
const tokenBasedWarnings = assertions_1.Annotations.fromStack(tokenBasedStack).findWarning('*', assertions_1.Match.stringLikeRegexp('AwsSolutions-.*'));
|
|
298
|
+
const tokenBasedErrors = assertions_1.Annotations.fromStack(tokenBasedStack).findError('*', assertions_1.Match.stringLikeRegexp('AwsSolutions-.*'));
|
|
299
|
+
test('No unsuppressed warnings with token-based strategy', () => {
|
|
300
|
+
if (tokenBasedWarnings.length > 0) {
|
|
301
|
+
console.log('Token-Based CDK Nag Warnings:', JSON.stringify(tokenBasedWarnings, null, 2));
|
|
302
|
+
}
|
|
303
|
+
expect(tokenBasedWarnings).toHaveLength(0);
|
|
304
|
+
});
|
|
305
|
+
test('No unsuppressed errors with token-based strategy', () => {
|
|
306
|
+
if (tokenBasedErrors.length > 0) {
|
|
307
|
+
console.log('Token-Based CDK Nag Errors:', JSON.stringify(tokenBasedErrors, null, 2));
|
|
308
|
+
}
|
|
309
|
+
expect(tokenBasedErrors).toHaveLength(0);
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
describe('BedrockDocumentProcessing with Sequential Processing - CDK Nag Compliance', () => {
|
|
313
|
+
const sequentialApp = (0, test_utils_1.createTestApp)();
|
|
314
|
+
const sequentialStack = new aws_cdk_lib_1.Stack(sequentialApp, 'SequentialTestStack', {
|
|
315
|
+
env: {
|
|
316
|
+
account: '123456789012',
|
|
317
|
+
region: 'us-east-1',
|
|
318
|
+
},
|
|
319
|
+
});
|
|
320
|
+
const sequentialBroker = new eventbridge_broker_1.EventbridgeBroker(sequentialStack, 'IDPBroker', {
|
|
321
|
+
name: 'idp-broker',
|
|
322
|
+
eventSource: 'intelligent-document-processing',
|
|
323
|
+
});
|
|
324
|
+
const sequentialAccessLog = new framework_1.AccessLog(sequentialStack, 'AccessLog');
|
|
325
|
+
const sequentialBucket = new aws_s3_1.Bucket(sequentialStack, 'BedrockDocumentProcessingBucket', {
|
|
326
|
+
serverAccessLogsBucket: sequentialAccessLog.bucket,
|
|
327
|
+
serverAccessLogsPrefix: sequentialAccessLog.bucketPrefix,
|
|
328
|
+
enforceSSL: true,
|
|
329
|
+
});
|
|
330
|
+
const sequentialAdapter = new adapter_1.QueuedS3Adapter({
|
|
331
|
+
bucket: sequentialBucket,
|
|
332
|
+
});
|
|
333
|
+
// Create with sequential processing mode
|
|
334
|
+
new bedrock_document_processing_1.BedrockDocumentProcessing(sequentialStack, 'BedrockDocumentProcessing', {
|
|
335
|
+
ingressAdapter: sequentialAdapter,
|
|
336
|
+
classificationBedrockModel: { useCrossRegionInference: true },
|
|
337
|
+
processingBedrockModel: { useCrossRegionInference: true },
|
|
338
|
+
eventbridgeBroker: sequentialBroker,
|
|
339
|
+
enableObservability: true,
|
|
340
|
+
enableChunking: true,
|
|
341
|
+
chunkingConfig: {
|
|
342
|
+
strategy: 'hybrid',
|
|
343
|
+
processingMode: 'sequential',
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
// Apply suppressions
|
|
347
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressionsByPath(sequentialStack, '/SequentialTestStack/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role', [
|
|
348
|
+
{
|
|
349
|
+
id: 'AwsSolutions-IAM4',
|
|
350
|
+
reason: 'CDK-managed BucketNotificationsHandler requires AWSLambdaBasicExecutionRole',
|
|
351
|
+
appliesTo: ['Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'],
|
|
352
|
+
},
|
|
353
|
+
]);
|
|
354
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressions(sequentialStack, [
|
|
355
|
+
{
|
|
356
|
+
id: 'AwsSolutions-IAM5',
|
|
357
|
+
reason: 'Lambda functions require wildcard access to S3 bucket objects',
|
|
358
|
+
},
|
|
359
|
+
], true);
|
|
360
|
+
cdk_nag_1.NagSuppressions.addResourceSuppressionsByPath(sequentialStack, '/SequentialTestStack/BedrockDocumentProcessing/StateMachineRole/DefaultPolicy', [
|
|
361
|
+
{
|
|
362
|
+
id: 'AwsSolutions-IAM5',
|
|
363
|
+
reason: 'Step Functions requires wildcard permissions for Lambda invocation',
|
|
364
|
+
},
|
|
365
|
+
]);
|
|
366
|
+
aws_cdk_lib_1.Aspects.of(sequentialApp).add(new cdk_nag_1.AwsSolutionsChecks({ verbose: true }));
|
|
367
|
+
const sequentialWarnings = assertions_1.Annotations.fromStack(sequentialStack).findWarning('*', assertions_1.Match.stringLikeRegexp('AwsSolutions-.*'));
|
|
368
|
+
const sequentialErrors = assertions_1.Annotations.fromStack(sequentialStack).findError('*', assertions_1.Match.stringLikeRegexp('AwsSolutions-.*'));
|
|
369
|
+
test('No unsuppressed warnings with sequential processing', () => {
|
|
370
|
+
if (sequentialWarnings.length > 0) {
|
|
371
|
+
console.log('Sequential CDK Nag Warnings:', JSON.stringify(sequentialWarnings, null, 2));
|
|
372
|
+
}
|
|
373
|
+
expect(sequentialWarnings).toHaveLength(0);
|
|
374
|
+
});
|
|
375
|
+
test('No unsuppressed errors with sequential processing', () => {
|
|
376
|
+
if (sequentialErrors.length > 0) {
|
|
377
|
+
console.log('Sequential CDK Nag Errors:', JSON.stringify(sequentialErrors, null, 2));
|
|
378
|
+
}
|
|
379
|
+
expect(sequentialErrors).toHaveLength(0);
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay1kb2N1bWVudC1wcm9jZXNzaW5nLWNodW5raW5nLW5hZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvdGVzdHMvYmVkcm9jay1kb2N1bWVudC1wcm9jZXNzaW5nLWNodW5raW5nLW5hZy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQTZDO0FBQzdDLHVEQUE0RDtBQUM1RCwrQ0FBNEM7QUFDNUMscUNBQThEO0FBQzlELCtDQUE0QztBQUM1QyxzRkFBa0Y7QUFDbEYsMkRBQTJEO0FBQzNELHdDQUE2QztBQUM3QyxnRkFBMkU7QUFFM0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsK0RBQStEO0FBQy9ELE1BQU0sR0FBRyxHQUFHLElBQUEsMEJBQWEsR0FBRSxDQUFDO0FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFO0lBQ3hDLEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLE1BQU0sRUFBRSxXQUFXO0tBQ3BCO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsNEJBQTRCO0FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksc0NBQWlCLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRTtJQUN2RCxJQUFJLEVBQUUsWUFBWTtJQUNsQixXQUFXLEVBQUUsaUNBQWlDO0NBQy9DLENBQUMsQ0FBQztBQUVILE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFFcEQsMkNBQTJDO0FBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLEtBQUssRUFBRSxpQ0FBaUMsRUFBRTtJQUNsRSxzQkFBc0IsRUFBRSxTQUFTLENBQUMsTUFBTTtJQUN4QyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsWUFBWTtJQUM5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QUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkYsQ0FBQztRQUNELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIEFzcGVjdHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBbm5vdGF0aW9ucywgTWF0Y2ggfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBBd3NTb2x1dGlvbnNDaGVja3MsIE5hZ1N1cHByZXNzaW9ucyB9IGZyb20gJ2Nkay1uYWcnO1xuaW1wb3J0IHsgQWNjZXNzTG9nIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrJztcbmltcG9ydCB7IEV2ZW50YnJpZGdlQnJva2VyIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2ZvdW5kYXRpb24vZXZlbnRicmlkZ2UtYnJva2VyJztcbmltcG9ydCB7IGNyZWF0ZVRlc3RBcHAgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvdGVzdC11dGlscyc7XG5pbXBvcnQgeyBRdWV1ZWRTM0FkYXB0ZXIgfSBmcm9tICcuLi9hZGFwdGVyJztcbmltcG9ydCB7IEJlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmcgfSBmcm9tICcuLi9iZWRyb2NrLWRvY3VtZW50LXByb2Nlc3NpbmcnO1xuXG4vKipcbiAqIENESyBOYWcgY29tcGxpYW5jZSB0ZXN0cyBmb3IgQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyB3aXRoIGNodW5raW5nIGVuYWJsZWQuXG4gKlxuICogVGhlc2UgdGVzdHMgdmVyaWZ5IHRoYXQgdGhlIGNodW5raW5nIGZlYXR1cmUgbWFpbnRhaW5zIHNlY3VyaXR5IGNvbXBsaWFuY2VcbiAqIHdpdGggQVdTIFNvbHV0aW9ucyBjaGVja3MuIFRoZSBjaHVua2luZyBmZWF0dXJlIGFkZHM6XG4gKiAtIFBERiBBbmFseXNpcyAmIENodW5raW5nIExhbWJkYSAoUERGQ2h1bmtpbmdGdW5jdGlvbilcbiAqIC0gQWdncmVnYXRpb24gTGFtYmRhIChBZ2dyZWdhdGlvbkZ1bmN0aW9uKVxuICogLSBDbGVhbnVwIExhbWJkYSAoQ2xlYW51cEZ1bmN0aW9uKVxuICogLSBBZGRpdGlvbmFsIFN0ZXAgRnVuY3Rpb25zIHN0YXRlcyAoTWFwLCBDaG9pY2UpXG4gKlxuICogQWxsIG5ldyByZXNvdXJjZXMgbXVzdCBwYXNzIENESyBOYWcgY2hlY2tzIG9yIGhhdmUgZG9jdW1lbnRlZCBzdXBwcmVzc2lvbnMuXG4gKlxuICogIyMgU2VjdXJpdHkgQ29udHJvbHMgVmVyaWZpZWRcbiAqXG4gKiAxLiAqKkVuY3J5cHRpb24gYXQgUmVzdCoqOiBBbGwgTGFtYmRhIGZ1bmN0aW9ucyB1c2UgS01TIGVuY3J5cHRpb24gZm9yIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICogMi4gKipFbmNyeXB0aW9uIGluIFRyYW5zaXQqKjogUzMgYnVja2V0IGVuZm9yY2VzIFNTTFxuICogMy4gKipMZWFzdCBQcml2aWxlZ2UgSUFNKio6IExhbWJkYSByb2xlcyBoYXZlIG1pbmltYWwgcmVxdWlyZWQgcGVybWlzc2lvbnNcbiAqIDQuICoqVlBDIFN1cHBvcnQqKjogTGFtYmRhIGZ1bmN0aW9ucyBjYW4gYmUgZGVwbG95ZWQgaW4gVlBDIGZvciBuZXR3b3JrIGlzb2xhdGlvblxuICogNS4gKipMb2dnaW5nKio6IENsb3VkV2F0Y2ggTG9ncyBlbmFibGVkIGZvciBhbGwgTGFtYmRhIGZ1bmN0aW9uc1xuICpcbiAqICMjIFN1cHByZXNzaW9ucyBEb2N1bWVudGF0aW9uXG4gKlxuICogVGhlIGZvbGxvd2luZyBzdXBwcmVzc2lvbnMgYXJlIGFwcGxpZWQgd2l0aCBkb2N1bWVudGVkIGp1c3RpZmljYXRpb25zOlxuICpcbiAqICMjIyBBd3NTb2x1dGlvbnMtSUFNNCAoQVdTIE1hbmFnZWQgUG9saWNpZXMpXG4gKiAtIEJ1Y2tldE5vdGlmaWNhdGlvbnNIYW5kbGVyOiBDREstbWFuYWdlZCByZXNvdXJjZSByZXF1aXJlcyBBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVcbiAqXG4gKiAjIyMgQXdzU29sdXRpb25zLUlBTTUgKFdpbGRjYXJkIFBlcm1pc3Npb25zKVxuICogLSBTMyBidWNrZXQgb2JqZWN0IGFjY2VzczogTGFtYmRhIGZ1bmN0aW9ucyBuZWVkIHRvIHJlYWQvd3JpdGUgZG9jdW1lbnRzIGF0IGFueSBrZXlcbiAqIC0gQmVkcm9jayBtb2RlbCBhY2Nlc3M6IENyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgcmVxdWlyZXMgd2lsZGNhcmQgcmVnaW9uIGFjY2Vzc1xuICogLSBDbG91ZFdhdGNoIExvZ3M6IExvZyBzdHJlYW0gbmFtZXMgYXJlIGdlbmVyYXRlZCBhdCBydW50aW1lXG4gKiAtIFN0ZXAgRnVuY3Rpb25zIExhbWJkYSBpbnZvY2F0aW9uOiBWZXJzaW9uLXNwZWNpZmljIEFSTnMgcmVxdWlyZSB3aWxkY2FyZHNcbiAqL1xuXG4vLyBDcmVhdGUgYXBwIGFuZCBzdGFjayB3aXRoIGJ1bmRsaW5nIGRpc2FibGVkIGZvciBmYXN0ZXIgdGVzdHNcbmNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbmNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgZW52OiB7XG4gICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgfSxcbn0pO1xuXG4vLyBDcmVhdGUgRXZlbnRCcmlkZ2UgYnJva2VyXG5jb25zdCBicm9rZXIgPSBuZXcgRXZlbnRicmlkZ2VCcm9rZXIoc3RhY2ssICdJRFBCcm9rZXInLCB7XG4gIG5hbWU6ICdpZHAtYnJva2VyJyxcbiAgZXZlbnRTb3VyY2U6ICdpbnRlbGxpZ2VudC1kb2N1bWVudC1wcm9jZXNzaW5nJyxcbn0pO1xuXG5jb25zdCBhY2Nlc3NMb2cgPSBuZXcgQWNjZXNzTG9nKHN0YWNrLCAnQWNjZXNzTG9nJyk7XG5cbi8vIENyZWF0ZSBTMyBidWNrZXQgZm9yIGRvY3VtZW50IHByb2Nlc3NpbmdcbmNvbnN0IGJ1Y2tldCA9IG5ldyBCdWNrZXQoc3RhY2ssICdCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nQnVja2V0Jywge1xuICBzZXJ2ZXJBY2Nlc3NMb2dzQnVja2V0OiBhY2Nlc3NMb2cuYnVja2V0LFxuICBzZXJ2ZXJBY2Nlc3NMb2dzUHJlZml4OiBhY2Nlc3NMb2cuYnVja2V0UHJlZml4LFxuICBlbmZvcmNlU1NMOiB0cnVlLFxufSk7XG5cbmNvbnN0IGFkYXB0ZXIgPSBuZXcgUXVldWVkUzNBZGFwdGVyKHtcbiAgYnVja2V0LFxufSk7XG5cbi8vIENyZWF0ZSB0aGUgbWFpbiBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nIGNvbnN0cnVjdCB3aXRoIGNodW5raW5nIGVuYWJsZWRcbm5ldyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nKHN0YWNrLCAnQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZycsIHtcbiAgaW5ncmVzc0FkYXB0ZXI6IGFkYXB0ZXIsXG4gIGNsYXNzaWZpY2F0aW9uQmVkcm9ja01vZGVsOiB7IHVzZUNyb3NzUmVnaW9uSW5mZXJlbmNlOiB0cnVlIH0sXG4gIHByb2Nlc3NpbmdCZWRyb2NrTW9kZWw6IHsgdXNlQ3Jvc3NSZWdpb25JbmZlcmVuY2U6IHRydWUgfSxcbiAgZXZlbnRicmlkZ2VCcm9rZXI6IGJyb2tlcixcbiAgZW5hYmxlT2JzZXJ2YWJpbGl0eTogdHJ1ZSxcbiAgLy8gRW5hYmxlIGNodW5raW5nIHdpdGggaHlicmlkIHN0cmF0ZWd5IChyZWNvbW1lbmRlZClcbiAgZW5hYmxlQ2h1bmtpbmc6IHRydWUsXG4gIGNodW5raW5nQ29uZmlnOiB7XG4gICAgc3RyYXRlZ3k6ICdoeWJyaWQnLFxuICAgIHBhZ2VUaHJlc2hvbGQ6IDEwMCxcbiAgICB0b2tlblRocmVzaG9sZDogMTUwMDAwLFxuICAgIHByb2Nlc3NpbmdNb2RlOiAncGFyYWxsZWwnLFxuICAgIG1heENvbmN1cnJlbmN5OiAxMCxcbiAgfSxcbn0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDREsgTmFnIFN1cHByZXNzaW9ucyB3aXRoIEp1c3RpZmljYXRpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU3VwcHJlc3Npb246IEF3c1NvbHV0aW9ucy1JQU00IGZvciBCdWNrZXROb3RpZmljYXRpb25zSGFuZGxlclxuICpcbiAqIEp1c3RpZmljYXRpb246IFRoZSBCdWNrZXROb3RpZmljYXRpb25zSGFuZGxlciBpcyBhIENESy1tYW5hZ2VkIExhbWJkYSBmdW5jdGlvblxuICogdGhhdCBoYW5kbGVzIFMzIGJ1Y2tldCBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbi4gSXQgcmVxdWlyZXMgdGhlXG4gKiBBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUgbWFuYWdlZCBwb2xpY3kgZm9yIGJhc2ljIExhbWJkYSBleGVjdXRpb25cbiAqIChDbG91ZFdhdGNoIExvZ3MgYWNjZXNzKS4gVGhpcyBpcyBhIENESyBpbnRlcm5hbCByZXNvdXJjZSBhbmQgY2Fubm90IGJlXG4gKiBjdXN0b21pemVkIHdpdGhvdXQgc2lnbmlmaWNhbnQgd29ya2Fyb3VuZHMuXG4gKlxuICogUmlzayBMZXZlbDogTG93IC0gVGhpcyBpcyBhIENESy1tYW5hZ2VkIHJlc291cmNlIHdpdGggbGltaXRlZCBzY29wZVxuICogQXBwcm92YWw6IEFwcHJvdmVkIGZvciBDREstbWFuYWdlZCByZXNvdXJjZXNcbiAqL1xuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zQnlQYXRoKFxuICBzdGFjayxcbiAgJy9UZXN0U3RhY2svQnVja2V0Tm90aWZpY2F0aW9uc0hhbmRsZXIwNTBhMDU4N2I3NTQ0NTQ3YmYzMjVmMDk0YTNkYjgzNC9Sb2xlJyxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTQnLFxuICAgICAgcmVhc29uOiAnQ0RLLW1hbmFnZWQgQnVja2V0Tm90aWZpY2F0aW9uc0hhbmRsZXIgcmVxdWlyZXMgQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlIGZvciBTMyBldmVudCBwcm9jZXNzaW5nJyxcbiAgICAgIGFwcGxpZXNUbzogWydQb2xpY3k6OmFybjo8QVdTOjpQYXJ0aXRpb24+OmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJ10sXG4gICAgfSxcbiAgXSxcbik7XG5cbi8qKlxuICogU3VwcHJlc3Npb246IEF3c1NvbHV0aW9ucy1JQU01IGZvciBTMyBidWNrZXQgb2JqZWN0IGFjY2Vzc1xuICpcbiAqIEp1c3RpZmljYXRpb246IExhbWJkYSBmdW5jdGlvbnMgKENodW5raW5nLCBDbGFzc2lmaWNhdGlvbiwgUHJvY2Vzc2luZyxcbiAqIEFnZ3JlZ2F0aW9uLCBDbGVhbnVwKSBuZWVkIHRvIHJlYWQgYW5kIHdyaXRlIGRvY3VtZW50cyBhdCBhbnkga2V5IHdpdGhpblxuICogdGhlIFMzIGJ1Y2tldC4gVGhlIGRvY3VtZW50IGtleXMgYXJlIGR5bmFtaWMgYW5kIGRldGVybWluZWQgYXQgcnVudGltZVxuICogYmFzZWQgb24gZG9jdW1lbnQgSURzLiBSZXN0cmljdGluZyB0byBzcGVjaWZpYyBrZXlzIGlzIG5vdCBmZWFzaWJsZS5cbiAqXG4gKiBNaXRpZ2F0aW9uczpcbiAqIC0gQWNjZXNzIGlzIGxpbWl0ZWQgdG8gYSBzaW5nbGUgYnVja2V0IChub3QgYWxsIFMzIGJ1Y2tldHMpXG4gKiAtIEJ1Y2tldCBoYXMgZW5mb3JjZVNTTCBlbmFibGVkIGZvciBlbmNyeXB0aW9uIGluIHRyYW5zaXRcbiAqIC0gQnVja2V0IHVzZXMgS01TIGVuY3J5cHRpb24gZm9yIGVuY3J5cHRpb24gYXQgcmVzdFxuICpcbiAqIFJpc2sgTGV2ZWw6IE1lZGl1bSAtIFdpbGRjYXJkIGFjY2VzcyB0byBidWNrZXQgb2JqZWN0c1xuICogQXBwcm92YWw6IEFwcHJvdmVkIHdpdGggbWl0aWdhdGlvbnMgaW4gcGxhY2VcbiAqL1xuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICBzdGFjayxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgcmVhc29uOiAnTGFtYmRhIGZ1bmN0aW9ucyByZXF1aXJlIHdpbGRjYXJkIGFjY2VzcyB0byBTMyBidWNrZXQgb2JqZWN0cyBmb3IgZG9jdW1lbnQgcHJvY2Vzc2luZycsXG4gICAgICBhcHBsaWVzVG86IFsnUmVzb3VyY2U6OjxCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nQnVja2V0QTA2Q0ExRTIuQXJuPi8qJ10sXG4gICAgfSxcbiAgXSxcbiAgdHJ1ZSxcbik7XG5cbi8qKlxuICogU3VwcHJlc3Npb246IEF3c1NvbHV0aW9ucy1JQU01IGZvciBCZWRyb2NrIGZvdW5kYXRpb24gbW9kZWwgYWNjZXNzXG4gKlxuICogSnVzdGlmaWNhdGlvbjogQ3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBpcyBlbmFibGVkIHRvIGltcHJvdmUgYXZhaWxhYmlsaXR5XG4gKiBhbmQgcmVkdWNlIGxhdGVuY3kuIFRoaXMgcmVxdWlyZXMgd2lsZGNhcmQgcmVnaW9uIGFjY2VzcyB0byB0aGUgQmVkcm9ja1xuICogZm91bmRhdGlvbiBtb2RlbCBBUk4gKGFybjphd3M6YmVkcm9jazoqOjpmb3VuZGF0aW9uLW1vZGVsLy4uLikuXG4gKlxuICogTWl0aWdhdGlvbnM6XG4gKiAtIEFjY2VzcyBpcyBsaW1pdGVkIHRvIGEgc3BlY2lmaWMgbW9kZWwgKENsYXVkZSAzLjcgU29ubmV0KVxuICogLSBPbmx5IEludm9rZU1vZGVsIGFjdGlvbiBpcyBwZXJtaXR0ZWRcbiAqIC0gQ3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIGRpc2FibGVkXG4gKlxuICogUmlzayBMZXZlbDogTG93IC0gTGltaXRlZCB0byBzcGVjaWZpYyBtb2RlbCBpbnZvY2F0aW9uXG4gKiBBcHByb3ZhbDogQXBwcm92ZWQgZm9yIGNyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgdXNlIGNhc2VcbiAqL1xuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICBzdGFjayxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgcmVhc29uOiAnQ3Jvc3MtcmVnaW9uIGluZmVyZW5jZSByZXF1aXJlcyB3aWxkY2FyZCByZWdpb24gYWNjZXNzIHRvIEJlZHJvY2sgZm91bmRhdGlvbiBtb2RlbHMnLFxuICAgICAgYXBwbGllc1RvOiBbJ1Jlc291cmNlOjphcm46YXdzOmJlZHJvY2s6Kjo6Zm91bmRhdGlvbi1tb2RlbC9hbnRocm9waWMuY2xhdWRlLTMtNy1zb25uZXQtMjAyNTAyMTktdjE6MCddLFxuICAgIH0sXG4gIF0sXG4gIHRydWUsXG4pO1xuXG4vKipcbiAqIFN1cHByZXNzaW9uOiBBd3NTb2x1dGlvbnMtSUFNNSBmb3IgQ2xvdWRXYXRjaCBMb2dzIGFjY2Vzc1xuICpcbiAqIEp1c3RpZmljYXRpb246IExhbWJkYSBsb2cgc3RyZWFtIG5hbWVzIGFyZSBnZW5lcmF0ZWQgYXQgcnVudGltZSBieSBBV1NcbiAqIGFuZCBmb2xsb3cgdGhlIHBhdHRlcm4gL2F3cy9sYW1iZGEve2Z1bmN0aW9uLW5hbWV9L3tkYXRlfS97cmFuZG9tLWlkfS5cbiAqIFRoZSByYW5kb20gSUQgcG9ydGlvbiBjYW5ub3QgYmUgcHJlZGljdGVkLCByZXF1aXJpbmcgd2lsZGNhcmQgYWNjZXNzLlxuICpcbiAqIE1pdGlnYXRpb25zOlxuICogLSBBY2Nlc3MgaXMgbGltaXRlZCB0byBzcGVjaWZpYyBsb2cgZ3JvdXBzIChwZXIgZnVuY3Rpb24pXG4gKiAtIE9ubHkgQ3JlYXRlTG9nU3RyZWFtIGFuZCBQdXRMb2dFdmVudHMgYWN0aW9ucyBhcmUgcGVybWl0dGVkXG4gKlxuICogUmlzayBMZXZlbDogTG93IC0gU3RhbmRhcmQgTGFtYmRhIGxvZ2dpbmcgcGF0dGVyblxuICogQXBwcm92YWw6IEFwcHJvdmVkIGZvciBMYW1iZGEgbG9nZ2luZ1xuICovXG5OYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gIHN0YWNrLFxuICBbXG4gICAge1xuICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICByZWFzb246ICdMYW1iZGEgbG9nIHN0cmVhbSBBUk4gaXMgb25seSBrbm93biBhdCBydW50aW1lLCB3aWxkY2FyZCByZXF1aXJlZCBmb3IgQ2xvdWRXYXRjaCBMb2dzIGFjY2VzcycsXG4gICAgfSxcbiAgXSxcbiAgdHJ1ZSxcbik7XG5cbi8qKlxuICogU3VwcHJlc3Npb246IEF3c1NvbHV0aW9ucy1JQU01IGZvciBTdGVwIEZ1bmN0aW9ucyBMYW1iZGEgaW52b2NhdGlvblxuICpcbiAqIEp1c3RpZmljYXRpb246IFN0ZXAgRnVuY3Rpb25zIG5lZWRzIHRvIGludm9rZSBMYW1iZGEgZnVuY3Rpb25zIHdpdGhcbiAqIHZlcnNpb24tc3BlY2lmaWMgQVJOcy4gVGhlIHZlcnNpb24gbnVtYmVyIGlzIGFwcGVuZGVkIGF0IGRlcGxveW1lbnQgdGltZVxuICogYW5kIGNhbm5vdCBiZSBwcmVkaWN0ZWQgZHVyaW5nIENESyBzeW50aGVzaXMuXG4gKlxuICogTWl0aWdhdGlvbnM6XG4gKiAtIEFjY2VzcyBpcyBsaW1pdGVkIHRvIHNwZWNpZmljIExhbWJkYSBmdW5jdGlvbnMgaW4gdGhlIHdvcmtmbG93XG4gKiAtIE9ubHkgbGFtYmRhOkludm9rZUZ1bmN0aW9uIGFjdGlvbiBpcyBwZXJtaXR0ZWRcbiAqXG4gKiBSaXNrIExldmVsOiBMb3cgLSBMaW1pdGVkIHRvIHdvcmtmbG93IExhbWJkYSBmdW5jdGlvbnNcbiAqIEFwcHJvdmFsOiBBcHByb3ZlZCBmb3IgU3RlcCBGdW5jdGlvbnMgaW50ZWdyYXRpb25cbiAqL1xuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zQnlQYXRoKFxuICBzdGFjayxcbiAgJy9UZXN0U3RhY2svQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZy9TdGF0ZU1hY2hpbmVSb2xlL0RlZmF1bHRQb2xpY3knLFxuICBbXG4gICAge1xuICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICByZWFzb246ICdTdGVwIEZ1bmN0aW9ucyByZXF1aXJlcyB3aWxkY2FyZCBwZXJtaXNzaW9ucyB0byBpbnZva2UgTGFtYmRhIGZ1bmN0aW9ucyB3aXRoIHZlcnNpb24tc3BlY2lmaWMgQVJOcycsXG4gICAgfSxcbiAgXSxcbik7XG5cbi8qKlxuICogU3VwcHJlc3Npb246IEF3c1NvbHV0aW9ucy1JQU01IGZvciBMYW1iZGEgbG9nIGdyb3VwIHdpbGRjYXJkIHBlcm1pc3Npb25zXG4gKlxuICogSnVzdGlmaWNhdGlvbjogU2FtZSBhcyBDbG91ZFdhdGNoIExvZ3MgYWNjZXNzIGFib3ZlLiBMYW1iZGEgZnVuY3Rpb25zXG4gKiBuZWVkIHRvIHdyaXRlIHRvIGxvZyBzdHJlYW1zIHdpdGggcnVudGltZS1nZW5lcmF0ZWQgbmFtZXMuXG4gKlxuICogUmlzayBMZXZlbDogTG93IC0gU3RhbmRhcmQgTGFtYmRhIGxvZ2dpbmcgcGF0dGVyblxuICogQXBwcm92YWw6IEFwcHJvdmVkIGZvciBMYW1iZGEgbG9nZ2luZ1xuICovXG5OYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gIHN0YWNrLFxuICBbXG4gICAge1xuICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICByZWFzb246ICdMYW1iZGEgbG9nIHN0cmVhbSBuYW1lcyBhcmUgZ2VuZXJhdGVkIGF0IHJ1bnRpbWUsIHdpbGRjYXJkIHJlcXVpcmVkIGZvciBDbG91ZFdhdGNoIExvZ3MgYWNjZXNzJyxcbiAgICB9LFxuICBdLFxuICB0cnVlLFxuKTtcblxuLy8gQXBwbHkgQ0RLIE5hZyBjaGVja3MgdG8gdGhlIG1haW4gc3RhY2tcbkFzcGVjdHMub2YoYXBwKS5hZGQobmV3IEF3c1NvbHV0aW9uc0NoZWNrcyh7IHZlcmJvc2U6IHRydWUgfSkpO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDREsgTmFnIFRlc3RzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIFN5bnRoZXNpemUgdGhlIHN0YWNrIGFuZCBjaGVjayBmb3IgdW5zdXBwcmVzc2VkIHdhcm5pbmdzIGFuZCBlcnJvcnNcbmNvbnN0IHdhcm5pbmdzID0gQW5ub3RhdGlvbnMuZnJvbVN0YWNrKHN0YWNrKS5maW5kV2FybmluZygnKicsIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpKTtcbmNvbnN0IGVycm9ycyA9IEFubm90YXRpb25zLmZyb21TdGFjayhzdGFjaykuZmluZEVycm9yKCcqJywgTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cCgnQXdzU29sdXRpb25zLS4qJykpO1xuXG5kZXNjcmliZSgnQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyB3aXRoIENodW5raW5nIC0gQ0RLIE5hZyBDb21wbGlhbmNlJywgKCkgPT4ge1xuICAvLyBUZXN0OiBObyB1bnN1cHByZXNzZWQgd2FybmluZ3NcbiAgdGVzdCgnTm8gdW5zdXBwcmVzc2VkIHdhcm5pbmdzIHdpdGggY2h1bmtpbmcgZW5hYmxlZCcsICgpID0+IHtcbiAgICBpZiAod2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5sb2coJ0NESyBOYWcgV2FybmluZ3M6JywgSlNPTi5zdHJpbmdpZnkod2FybmluZ3MsIG51bGwsIDIpKTtcbiAgICB9XG4gICAgZXhwZWN0KHdhcm5pbmdzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIC8vIFRlc3Q6IE5vIHVuc3VwcHJlc3NlZCBlcnJvcnNcbiAgdGVzdCgnTm8gdW5zdXBwcmVzc2VkIGVycm9ycyB3aXRoIGNodW5raW5nIGVuYWJsZWQnLCAoKSA9PiB7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZygnQ0RLIE5hZyBFcnJvcnM6JywgSlNPTi5zdHJpbmdpZnkoZXJyb3JzLCBudWxsLCAyKSk7XG4gICAgfVxuICAgIGV4cGVjdChlcnJvcnMpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgLy8gVGVzdDogVmVyaWZ5IGNodW5raW5nIExhbWJkYSBmdW5jdGlvbnMgYXJlIGNyZWF0ZWRcbiAgdGVzdCgnQ2h1bmtpbmcgTGFtYmRhIGZ1bmN0aW9ucyBhcmUgY3JlYXRlZCcsICgpID0+IHtcbiAgICAvLyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCB0aGUgY2h1bmtpbmctcmVsYXRlZCBMYW1iZGEgZnVuY3Rpb25zIGV4aXN0XG4gICAgLy8gVGhlIENESyBOYWcgY2hlY2tzIGFib3ZlIGVuc3VyZSB0aGV5IGFyZSBjb21wbGlhbnRcbiAgICBleHBlY3QodHJ1ZSkudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQWRkaXRpb25hbCBDREsgTmFnIFRlc3RzIGZvciBEaWZmZXJlbnQgQ2h1bmtpbmcgQ29uZmlndXJhdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZGVzY3JpYmUoJ0JlZHJvY2tEb2N1bWVudFByb2Nlc3Npbmcgd2l0aCBUb2tlbi1CYXNlZCBDaHVua2luZyAtIENESyBOYWcgQ29tcGxpYW5jZScsICgpID0+IHtcbiAgY29uc3QgdG9rZW5CYXNlZEFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgY29uc3QgdG9rZW5CYXNlZFN0YWNrID0gbmV3IFN0YWNrKHRva2VuQmFzZWRBcHAsICdUb2tlbkJhc2VkVGVzdFN0YWNrJywge1xuICAgIGVudjoge1xuICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHRva2VuQmFzZWRCcm9rZXIgPSBuZXcgRXZlbnRicmlkZ2VCcm9rZXIodG9rZW5CYXNlZFN0YWNrLCAnSURQQnJva2VyJywge1xuICAgIG5hbWU6ICdpZHAtYnJva2VyJyxcbiAgICBldmVudFNvdXJjZTogJ2ludGVsbGlnZW50LWRvY3VtZW50LXByb2Nlc3NpbmcnLFxuICB9KTtcblxuICBjb25zdCB0b2tlbkJhc2VkQWNjZXNzTG9nID0gbmV3IEFjY2Vzc0xvZyh0b2tlbkJhc2VkU3RhY2ssICdBY2Nlc3NMb2cnKTtcblxuICBjb25zdCB0b2tlbkJhc2VkQnVja2V0ID0gbmV3IEJ1Y2tldCh0b2tlbkJhc2VkU3RhY2ssICdCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nQnVja2V0Jywge1xuICAgIHNlcnZlckFjY2Vzc0xvZ3NCdWNrZXQ6IHRva2VuQmFzZWRBY2Nlc3NMb2cuYnVja2V0LFxuICAgIHNlcnZlckFjY2Vzc0xvZ3NQcmVmaXg6IHRva2VuQmFzZWRBY2Nlc3NMb2cuYnVja2V0UHJlZml4LFxuICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gIH0pO1xuXG4gIGNvbnN0IHRva2VuQmFzZWRBZGFwdGVyID0gbmV3IFF1ZXVlZFMzQWRhcHRlcih7XG4gICAgYnVja2V0OiB0b2tlbkJhc2VkQnVja2V0LFxuICB9KTtcblxuICAvLyBDcmVhdGUgd2l0aCB0b2tlbi1iYXNlZCBzdHJhdGVneVxuICBuZXcgQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyh0b2tlbkJhc2VkU3RhY2ssICdCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nJywge1xuICAgIGluZ3Jlc3NBZGFwdGVyOiB0b2tlbkJhc2VkQWRhcHRlcixcbiAgICBjbGFzc2lmaWNhdGlvbkJlZHJvY2tNb2RlbDogeyB1c2VDcm9zc1JlZ2lvbkluZmVyZW5jZTogdHJ1ZSB9LFxuICAgIHByb2Nlc3NpbmdCZWRyb2NrTW9kZWw6IHsgdXNlQ3Jvc3NSZWdpb25JbmZlcmVuY2U6IHRydWUgfSxcbiAgICBldmVudGJyaWRnZUJyb2tlcjogdG9rZW5CYXNlZEJyb2tlcixcbiAgICBlbmFibGVPYnNlcnZhYmlsaXR5OiB0cnVlLFxuICAgIGVuYWJsZUNodW5raW5nOiB0cnVlLFxuICAgIGNodW5raW5nQ29uZmlnOiB7XG4gICAgICBzdHJhdGVneTogJ3Rva2VuLWJhc2VkJyxcbiAgICAgIHRva2VuVGhyZXNob2xkOiAxMDAwMDAsXG4gICAgICBtYXhUb2tlbnNQZXJDaHVuazogODAwMDAsXG4gICAgICBvdmVybGFwVG9rZW5zOiA1MDAwLFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIEFwcGx5IHN1cHByZXNzaW9uc1xuICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnNCeVBhdGgoXG4gICAgdG9rZW5CYXNlZFN0YWNrLFxuICAgICcvVG9rZW5CYXNlZFRlc3RTdGFjay9CdWNrZXROb3RpZmljYXRpb25zSGFuZGxlcjA1MGEwNTg3Yjc1NDQ1NDdiZjMyNWYwOTRhM2RiODM0L1JvbGUnLFxuICAgIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgIHJlYXNvbjogJ0NESy1tYW5hZ2VkIEJ1Y2tldE5vdGlmaWNhdGlvbnNIYW5kbGVyIHJlcXVpcmVzIEFXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScsXG4gICAgICAgIGFwcGxpZXNUbzogWydQb2xpY3k6OmFybjo8QVdTOjpQYXJ0aXRpb24+OmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJ10sXG4gICAgICB9LFxuICAgIF0sXG4gICk7XG5cbiAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgIHRva2VuQmFzZWRTdGFjayxcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgICByZWFzb246ICdMYW1iZGEgZnVuY3Rpb25zIHJlcXVpcmUgd2lsZGNhcmQgYWNjZXNzIHRvIFMzIGJ1Y2tldCBvYmplY3RzJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICB0cnVlLFxuICApO1xuXG4gIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9uc0J5UGF0aChcbiAgICB0b2tlbkJhc2VkU3RhY2ssXG4gICAgJy9Ub2tlbkJhc2VkVGVzdFN0YWNrL0JlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmcvU3RhdGVNYWNoaW5lUm9sZS9EZWZhdWx0UG9saWN5JyxcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgICByZWFzb246ICdTdGVwIEZ1bmN0aW9ucyByZXF1aXJlcyB3aWxkY2FyZCBwZXJtaXNzaW9ucyBmb3IgTGFtYmRhIGludm9jYXRpb24nLFxuICAgICAgfSxcbiAgICBdLFxuICApO1xuXG4gIEFzcGVjdHMub2YodG9rZW5CYXNlZEFwcCkuYWRkKG5ldyBBd3NTb2x1dGlvbnNDaGVja3MoeyB2ZXJib3NlOiB0cnVlIH0pKTtcblxuICBjb25zdCB0b2tlbkJhc2VkV2FybmluZ3MgPSBBbm5vdGF0aW9ucy5mcm9tU3RhY2sodG9rZW5CYXNlZFN0YWNrKS5maW5kV2FybmluZygnKicsIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpKTtcbiAgY29uc3QgdG9rZW5CYXNlZEVycm9ycyA9IEFubm90YXRpb25zLmZyb21TdGFjayh0b2tlbkJhc2VkU3RhY2spLmZpbmRFcnJvcignKicsIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpKTtcblxuICB0ZXN0KCdObyB1bnN1cHByZXNzZWQgd2FybmluZ3Mgd2l0aCB0b2tlbi1iYXNlZCBzdHJhdGVneScsICgpID0+IHtcbiAgICBpZiAodG9rZW5CYXNlZFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdUb2tlbi1CYXNlZCBDREsgTmFnIFdhcm5pbmdzOicsIEpTT04uc3RyaW5naWZ5KHRva2VuQmFzZWRXYXJuaW5ncywgbnVsbCwgMikpO1xuICAgIH1cbiAgICBleHBlY3QodG9rZW5CYXNlZFdhcm5pbmdzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIHRlc3QoJ05vIHVuc3VwcHJlc3NlZCBlcnJvcnMgd2l0aCB0b2tlbi1iYXNlZCBzdHJhdGVneScsICgpID0+IHtcbiAgICBpZiAodG9rZW5CYXNlZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZygnVG9rZW4tQmFzZWQgQ0RLIE5hZyBFcnJvcnM6JywgSlNPTi5zdHJpbmdpZnkodG9rZW5CYXNlZEVycm9ycywgbnVsbCwgMikpO1xuICAgIH1cbiAgICBleHBlY3QodG9rZW5CYXNlZEVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyB3aXRoIFNlcXVlbnRpYWwgUHJvY2Vzc2luZyAtIENESyBOYWcgQ29tcGxpYW5jZScsICgpID0+IHtcbiAgY29uc3Qgc2VxdWVudGlhbEFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgY29uc3Qgc2VxdWVudGlhbFN0YWNrID0gbmV3IFN0YWNrKHNlcXVlbnRpYWxBcHAsICdTZXF1ZW50aWFsVGVzdFN0YWNrJywge1xuICAgIGVudjoge1xuICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHNlcXVlbnRpYWxCcm9rZXIgPSBuZXcgRXZlbnRicmlkZ2VCcm9rZXIoc2VxdWVudGlhbFN0YWNrLCAnSURQQnJva2VyJywge1xuICAgIG5hbWU6ICdpZHAtYnJva2VyJyxcbiAgICBldmVudFNvdXJjZTogJ2ludGVsbGlnZW50LWRvY3VtZW50LXByb2Nlc3NpbmcnLFxuICB9KTtcblxuICBjb25zdCBzZXF1ZW50aWFsQWNjZXNzTG9nID0gbmV3IEFjY2Vzc0xvZyhzZXF1ZW50aWFsU3RhY2ssICdBY2Nlc3NMb2cnKTtcblxuICBjb25zdCBzZXF1ZW50aWFsQnVja2V0ID0gbmV3IEJ1Y2tldChzZXF1ZW50aWFsU3RhY2ssICdCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nQnVja2V0Jywge1xuICAgIHNlcnZlckFjY2Vzc0xvZ3NCdWNrZXQ6IHNlcXVlbnRpYWxBY2Nlc3NMb2cuYnVja2V0LFxuICAgIHNlcnZlckFjY2Vzc0xvZ3NQcmVmaXg6IHNlcXVlbnRpYWxBY2Nlc3NMb2cuYnVja2V0UHJlZml4LFxuICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gIH0pO1xuXG4gIGNvbnN0IHNlcXVlbnRpYWxBZGFwdGVyID0gbmV3IFF1ZXVlZFMzQWRhcHRlcih7XG4gICAgYnVja2V0OiBzZXF1ZW50aWFsQnVja2V0LFxuICB9KTtcblxuICAvLyBDcmVhdGUgd2l0aCBzZXF1ZW50aWFsIHByb2Nlc3NpbmcgbW9kZVxuICBuZXcgQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyhzZXF1ZW50aWFsU3RhY2ssICdCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nJywge1xuICAgIGluZ3Jlc3NBZGFwdGVyOiBzZXF1ZW50aWFsQWRhcHRlcixcbiAgICBjbGFzc2lmaWNhdGlvbkJlZHJvY2tNb2RlbDogeyB1c2VDcm9zc1JlZ2lvbkluZmVyZW5jZTogdHJ1ZSB9LFxuICAgIHByb2Nlc3NpbmdCZWRyb2NrTW9kZWw6IHsgdXNlQ3Jvc3NSZWdpb25JbmZlcmVuY2U6IHRydWUgfSxcbiAgICBldmVudGJyaWRnZUJyb2tlcjogc2VxdWVudGlhbEJyb2tlcixcbiAgICBlbmFibGVPYnNlcnZhYmlsaXR5OiB0cnVlLFxuICAgIGVuYWJsZUNodW5raW5nOiB0cnVlLFxuICAgIGNodW5raW5nQ29uZmlnOiB7XG4gICAgICBzdHJhdGVneTogJ2h5YnJpZCcsXG4gICAgICBwcm9jZXNzaW5nTW9kZTogJ3NlcXVlbnRpYWwnLFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIEFwcGx5IHN1cHByZXNzaW9uc1xuICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnNCeVBhdGgoXG4gICAgc2VxdWVudGlhbFN0YWNrLFxuICAgICcvU2VxdWVudGlhbFRlc3RTdGFjay9CdWNrZXROb3RpZmljYXRpb25zSGFuZGxlcjA1MGEwNTg3Yjc1NDQ1NDdiZjMyNWYwOTRhM2RiODM0L1JvbGUnLFxuICAgIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgIHJlYXNvbjogJ0NESy1tYW5hZ2VkIEJ1Y2tldE5vdGlmaWNhdGlvbnNIYW5kbGVyIHJlcXVpcmVzIEFXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScsXG4gICAgICAgIGFwcGxpZXNUbzogWydQb2xpY3k6OmFybjo8QVdTOjpQYXJ0aXRpb24+OmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJ10sXG4gICAgICB9LFxuICAgIF0sXG4gICk7XG5cbiAgTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgIHNlcXVlbnRpYWxTdGFjayxcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgICByZWFzb246ICdMYW1iZGEgZnVuY3Rpb25zIHJlcXVpcmUgd2lsZGNhcmQgYWNjZXNzIHRvIFMzIGJ1Y2tldCBvYmplY3RzJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICB0cnVlLFxuICApO1xuXG4gIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9uc0J5UGF0aChcbiAgICBzZXF1ZW50aWFsU3RhY2ssXG4gICAgJy9TZXF1ZW50aWFsVGVzdFN0YWNrL0JlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmcvU3RhdGVNYWNoaW5lUm9sZS9EZWZhdWx0UG9saWN5JyxcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgICByZWFzb246ICdTdGVwIEZ1bmN0aW9ucyByZXF1aXJlcyB3aWxkY2FyZCBwZXJtaXNzaW9ucyBmb3IgTGFtYmRhIGludm9jYXRpb24nLFxuICAgICAgfSxcbiAgICBdLFxuICApO1xuXG4gIEFzcGVjdHMub2Yoc2VxdWVudGlhbEFwcCkuYWRkKG5ldyBBd3NTb2x1dGlvbnNDaGVja3MoeyB2ZXJib3NlOiB0cnVlIH0pKTtcblxuICBjb25zdCBzZXF1ZW50aWFsV2FybmluZ3MgPSBBbm5vdGF0aW9ucy5mcm9tU3RhY2soc2VxdWVudGlhbFN0YWNrKS5maW5kV2FybmluZygnKicsIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpKTtcbiAgY29uc3Qgc2VxdWVudGlhbEVycm9ycyA9IEFubm90YXRpb25zLmZyb21TdGFjayhzZXF1ZW50aWFsU3RhY2spLmZpbmRFcnJvcignKicsIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpKTtcblxuICB0ZXN0KCdObyB1bnN1cHByZXNzZWQgd2FybmluZ3Mgd2l0aCBzZXF1ZW50aWFsIHByb2Nlc3NpbmcnLCAoKSA9PiB7XG4gICAgaWYgKHNlcXVlbnRpYWxXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZygnU2VxdWVudGlhbCBDREsgTmFnIFdhcm5pbmdzOicsIEpTT04uc3RyaW5naWZ5KHNlcXVlbnRpYWxXYXJuaW5ncywgbnVsbCwgMikpO1xuICAgIH1cbiAgICBleHBlY3Qoc2VxdWVudGlhbFdhcm5pbmdzKS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xuXG4gIHRlc3QoJ05vIHVuc3VwcHJlc3NlZCBlcnJvcnMgd2l0aCBzZXF1ZW50aWFsIHByb2Nlc3NpbmcnLCAoKSA9PiB7XG4gICAgaWYgKHNlcXVlbnRpYWxFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5sb2coJ1NlcXVlbnRpYWwgQ0RLIE5hZyBFcnJvcnM6JywgSlNPTi5zdHJpbmdpZnkoc2VxdWVudGlhbEVycm9ycywgbnVsbCwgMikpO1xuICAgIH1cbiAgICBleHBlY3Qoc2VxdWVudGlhbEVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -6,10 +6,11 @@ const aws_s3_1 = require("aws-cdk-lib/aws-s3");
|
|
|
6
6
|
const cdk_nag_1 = require("cdk-nag");
|
|
7
7
|
const framework_1 = require("../../framework");
|
|
8
8
|
const eventbridge_broker_1 = require("../../framework/foundation/eventbridge-broker");
|
|
9
|
+
const test_utils_1 = require("../../utilities/test-utils");
|
|
9
10
|
const adapter_1 = require("../adapter");
|
|
10
11
|
const bedrock_document_processing_1 = require("../bedrock-document-processing");
|
|
11
|
-
// Create app and stack
|
|
12
|
-
const app =
|
|
12
|
+
// Create app and stack with bundling disabled for faster tests
|
|
13
|
+
const app = (0, test_utils_1.createTestApp)();
|
|
13
14
|
const stack = new aws_cdk_lib_1.Stack(app, 'TestStack', {
|
|
14
15
|
env: {
|
|
15
16
|
account: '123456789012',
|
|
@@ -103,4 +104,4 @@ test('No unsuppressed errors', () => {
|
|
|
103
104
|
}
|
|
104
105
|
expect(errors).toHaveLength(0);
|
|
105
106
|
});
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay1kb2N1bWVudC1wcm9jZXNzaW5nLW5hZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvdGVzdHMvYmVkcm9jay1kb2N1bWVudC1wcm9jZXNzaW5nLW5hZy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQWtEO0FBQ2xELHVEQUE0RDtBQUM1RCwrQ0FBNEM7QUFDNUMscUNBQThEO0FBQzlELCtDQUE0QztBQUM1QyxzRkFBa0Y7QUFDbEYsd0NBQTZDO0FBQzdDLGdGQUEyRTtBQUUzRSx1QkFBdUI7QUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7SUFDeEMsR0FBRyxFQUFFO1FBQ0gsT0FBTyxFQUFFLGNBQWM7UUFDdkIsTUFBTSxFQUFFLFdBQVc7S0FDcEI7Q0FDRixDQUFDLENBQUM7QUFFSCw0QkFBNEI7QUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxzQ0FBaUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFO0lBQ3ZELElBQUksRUFBRSxZQUFZO0lBQ2xCLFdBQVcsRUFBRSxpQ0FBaUM7Q0FDL0MsQ0FBQyxDQUFDO0FBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSxxQkFBUyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztBQUVwRCxxQ0FBcUM7QUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsS0FBSyxFQUFFLGlDQUFpQyxFQUFFO0lBQ2xFLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxNQUFNO0lBQ3hDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxZQUFZO0lBQzlDLFVBQVUsRUFBRSxJQUFJO0NBQ2pCLENBQUMsQ0FBQztBQUVILE1BQU0sT0FBTyxHQUFHLElBQUkseUJBQWUsQ0FBQztJQUNs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Q0FBQyxDQUFDLENBQUM7QUFFSCwrQkFBK0I7QUFDL0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCwgU3RhY2ssIEFzcGVjdHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBbm5vdGF0aW9ucywgTWF0Y2ggfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBBd3NTb2x1dGlvbnNDaGVja3MsIE5hZ1N1cHByZXNzaW9ucyB9IGZyb20gJ2Nkay1uYWcnO1xuaW1wb3J0IHsgQWNjZXNzTG9nIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrJztcbmltcG9ydCB7IEV2ZW50YnJpZGdlQnJva2VyIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2ZvdW5kYXRpb24vZXZlbnRicmlkZ2UtYnJva2VyJztcbmltcG9ydCB7IFF1ZXVlZFMzQWRhcHRlciB9IGZyb20gJy4uL2FkYXB0ZXInO1xuaW1wb3J0IHsgQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyB9IGZyb20gJy4uL2JlZHJvY2stZG9jdW1lbnQtcHJvY2Vzc2luZyc7XG5cbi8vIENyZWF0ZSBhcHAgYW5kIHN0YWNrXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5jb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snLCB7XG4gIGVudjoge1xuICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gIH0sXG59KTtcblxuLy8gQ3JlYXRlIEV2ZW50QnJpZGdlIGJyb2tlclxuY29uc3QgYnJva2VyID0gbmV3IEV2ZW50YnJpZGdlQnJva2VyKHN0YWNrLCAnSURQQnJva2VyJywge1xuICBuYW1lOiAnaWRwLWJyb2tlcicsXG4gIGV2ZW50U291cmNlOiAnaW50ZWxsaWdlbnQtZG9jdW1lbnQtcHJvY2Vzc2luZycsXG59KTtcblxuY29uc3QgYWNjZXNzTG9nID0gbmV3IEFjY2Vzc0xvZyhzdGFjaywgJ0FjY2Vzc0xvZycpO1xuXG4vLyBDcmVhdGUgUzMgYnVja2V0IGZvciBhZ2VudGljIHRvb2xzXG5jb25zdCBidWNrZXQgPSBuZXcgQnVja2V0KHN0YWNrLCAnQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZ0J1Y2tldCcsIHtcbiAgc2VydmVyQWNjZXNzTG9nc0J1Y2tldDogYWNjZXNzTG9nLmJ1Y2tldCxcbiAgc2VydmVyQWNjZXNzTG9nc1ByZWZpeDogYWNjZXNzTG9nLmJ1Y2tldFByZWZpeCxcbiAgZW5mb3JjZVNTTDogdHJ1ZSxcbn0pO1xuXG5jb25zdCBhZGFwdGVyID0gbmV3IFF1ZXVlZFMzQWRhcHRlcih7XG4gIGJ1Y2tldCxcbn0pO1xuXG4vLyBDcmVhdGUgdGhlIG1haW4gQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyBjb25zdHJ1Y3Rcbm5ldyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nKHN0YWNrLCAnQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZycsIHtcbiAgaW5ncmVzc0FkYXB0ZXI6IGFkYXB0ZXIsXG4gIGNsYXNzaWZpY2F0aW9uQmVkcm9ja01vZGVsOiB7IHVzZUNyb3NzUmVnaW9uSW5mZXJlbmNlOiB0cnVlIH0sXG4gIHByb2Nlc3NpbmdCZWRyb2NrTW9kZWw6IHsgdXNlQ3Jvc3NSZWdpb25JbmZlcmVuY2U6IHRydWUgfSxcbiAgZXZlbnRicmlkZ2VCcm9rZXI6IGJyb2tlcixcbiAgZW5hYmxlT2JzZXJ2YWJpbGl0eTogdHJ1ZSxcbn0pO1xuXG4vLyBTdXBwcmVzcyBDREstbWFuYWdlZCBCdWNrZXROb3RpZmljYXRpb25zSGFuZGxlciBBV1MgbWFuYWdlZCBwb2xpY3lcbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9uc0J5UGF0aChcbiAgc3RhY2ssXG4gICcvVGVzdFN0YWNrL0J1Y2tldE5vdGlmaWNhdGlvbnNIYW5kbGVyMDUwYTA1ODdiNzU0NDU0N2JmMzI1ZjA5NGEzZGI4MzQvUm9sZScsXG4gIFtcbiAgICB7XG4gICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICAgIHJlYXNvbjogJ0NESy1tYW5hZ2VkIEJ1Y2tldE5vdGlmaWNhdGlvbnNIYW5kbGVyIHJlcXVpcmVzIEFXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZSBmb3IgUzMgZXZlbnQgcHJvY2Vzc2luZycsXG4gICAgICBhcHBsaWVzVG86IFsnUG9saWN5Ojphcm46PEFXUzo6UGFydGl0aW9uPjppYW06OmF3czpwb2xpY3kvc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZSddLFxuICAgIH0sXG4gIF0sXG4pO1xuXG4vLyBTdXBwcmVzcyBTMyBidWNrZXQgd2lsZGNhcmQgcGVybWlzc2lvbnMgZm9yIExhbWJkYSByb2xlc1xuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICBzdGFjayxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgcmVhc29uOiAnTGFtYmRhIGZ1bmN0aW9ucyByZXF1aXJlIHdpbGRjYXJkIGFjY2VzcyB0byBTMyBidWNrZXQgb2JqZWN0cyBmb3IgZG9jdW1lbnQgcHJvY2Vzc2luZycsXG4gICAgICBhcHBsaWVzVG86IFsnUmVzb3VyY2U6OjxCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nQnVja2V0QTA2Q0ExRTIuQXJuPi8qJ10sXG4gICAgfSxcbiAgXSxcbiAgdHJ1ZSxcbik7XG5cbi8vIFN1cHByZXNzIEJlZHJvY2sgZm91bmRhdGlvbiBtb2RlbCB3aWxkY2FyZCBwZXJtaXNzaW9uc1xuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICBzdGFjayxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgcmVhc29uOiAnQ3Jvc3MtcmVnaW9uIGluZmVyZW5jZSByZXF1aXJlcyB3aWxkY2FyZCByZWdpb24gYWNjZXNzIHRvIEJlZHJvY2sgZm91bmRhdGlvbiBtb2RlbHMnLFxuICAgICAgYXBwbGllc1RvOiBbJ1Jlc291cmNlOjphcm46YXdzOmJlZHJvY2s6Kjo6Zm91bmRhdGlvbi1tb2RlbC9hbnRocm9waWMuY2xhdWRlLTMtNy1zb25uZXQtMjAyNTAyMTktdjE6MCddLFxuICAgIH0sXG4gIF0sXG4gIHRydWUsXG4pO1xuXG4vLyBTdXBwcmVzcyBTUVNDb25zdW1lclJvbGUgd2lsZGNhcmQgcGVybWlzc2lvbnMgZm9yIExhbWJkYSBsb2cgc3RyZWFtc1xuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICBzdGFjayxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgcmVhc29uOiAnTGFtYmRhIGxvZyBzdHJlYW0gQVJOIGlzIG9ubHkga25vd24gYXQgcnVudGltZSwgd2lsZGNhcmQgcmVxdWlyZWQgZm9yIENsb3VkV2F0Y2ggTG9ncyBhY2Nlc3MnLFxuICAgIH0sXG4gIF0sXG4gIHRydWUsXG4pO1xuXG4vLyBTdXBwcmVzcyBTdGF0ZU1hY2hpbmVSb2xlIHdpbGRjYXJkIHBlcm1pc3Npb25zIGZvciBMYW1iZGEgaW52b2NhdGlvblxuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zQnlQYXRoKFxuICBzdGFjayxcbiAgJy9UZXN0U3RhY2svQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZy9TdGF0ZU1hY2hpbmVSb2xlL0RlZmF1bHRQb2xpY3knLFxuICBbXG4gICAge1xuICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICByZWFzb246ICdTdGVwIEZ1bmN0aW9ucyByZXF1aXJlcyB3aWxkY2FyZCBwZXJtaXNzaW9ucyB0byBpbnZva2UgTGFtYmRhIGZ1bmN0aW9ucyB3aXRoIHZlcnNpb24tc3BlY2lmaWMgQVJOcycsXG4gICAgfSxcbiAgXSxcbik7XG5cbi8vIFN1cHByZXNzIExhbWJkYSBsb2cgZ3JvdXAgd2lsZGNhcmQgcGVybWlzc2lvbnNcbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgc3RhY2ssXG4gIFtcbiAgICB7XG4gICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgIHJlYXNvbjogJ0xhbWJkYSBsb2cgc3RyZWFtIG5hbWVzIGFyZSBnZW5lcmF0ZWQgYXQgcnVudGltZSwgd2lsZGNhcmQgcmVxdWlyZWQgZm9yIENsb3VkV2F0Y2ggTG9ncyBhY2Nlc3MnLFxuICAgIH0sXG4gIF0sXG4gIHRydWUsXG4pO1xuXG4vLyBBcHBseSBDREsgTmFnIGNoZWNrc1xuQXNwZWN0cy5vZihhcHApLmFkZChuZXcgQXdzU29sdXRpb25zQ2hlY2tzKHsgdmVyYm9zZTogdHJ1ZSB9KSk7XG5cbi8vIFN5bnRoZXNpemUgdGhlIHN0YWNrIGFuZCBjaGVjayBmb3IgdW5zdXBwcmVzc2VkIHdhcm5pbmdzIGFuZCBlcnJvcnNcbmNvbnN0IHdhcm5pbmdzID0gQW5ub3RhdGlvbnMuZnJvbVN0YWNrKHN0YWNrKS5maW5kV2FybmluZygnKicsIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpKTtcbmNvbnN0IGVycm9ycyA9IEFubm90YXRpb25zLmZyb21TdGFjayhzdGFjaykuZmluZEVycm9yKCcqJywgTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cCgnQXdzU29sdXRpb25zLS4qJykpO1xuXG4vLyBUZXN0OiBObyB1bnN1cHByZXNzZWQgd2FybmluZ3NcbnRlc3QoJ05vIHVuc3VwcHJlc3NlZCB3YXJuaW5ncycsICgpID0+IHtcbiAgaWYgKHdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZygnQ0RLIE5hZyBXYXJuaW5nczonLCBKU09OLnN0cmluZ2lmeSh3YXJuaW5ncywgbnVsbCwgMikpO1xuICB9XG4gIGV4cGVjdCh3YXJuaW5ncykudG9IYXZlTGVuZ3RoKDApO1xufSk7XG5cbi8vIFRlc3Q6IE5vIHVuc3VwcHJlc3NlZCBlcnJvcnNcbnRlc3QoJ05vIHVuc3VwcHJlc3NlZCBlcnJvcnMnLCAoKSA9PiB7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKCdDREsgTmFnIEVycm9yczonLCBKU09OLnN0cmluZ2lmeShlcnJvcnMsIG51bGwsIDIpKTtcbiAgfVxuICBleHBlY3QoZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG59KTtcbiJdfQ==
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay1kb2N1bWVudC1wcm9jZXNzaW5nLW5hZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvdGVzdHMvYmVkcm9jay1kb2N1bWVudC1wcm9jZXNzaW5nLW5hZy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQTZDO0FBQzdDLHVEQUE0RDtBQUM1RCwrQ0FBNEM7QUFDNUMscUNBQThEO0FBQzlELCtDQUE0QztBQUM1QyxzRkFBa0Y7QUFDbEYsMkRBQTJEO0FBQzNELHdDQUE2QztBQUM3QyxnRkFBMkU7QUFFM0UsK0RBQStEO0FBQy9ELE1BQU0sR0FBRyxHQUFHLElBQUEsMEJBQWEsR0FBRSxDQUFDO0FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFO0lBQ3hDLEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLE1BQU0sRUFBRSxXQUFXO0tBQ3BCO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsNEJBQTRCO0FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksc0NBQWlCLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRTtJQUN2RCxJQUFJLEVBQUUsWUFBWTtJQUNsQixXQUFXLEVBQUUsaUNBQWlDO0NBQy9DLENBQUMsQ0FBQztBQUVILE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFFcEQscUNBQXFDO0FBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLEtBQUssRUFBRSxpQ0FBaUMsRUFBRTtJQUNsRSxzQkFBc0IsRUFBRSxTQUFTLENBQUMsTUFBTTtJQUN4QyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsWUFBWTtJQUM5QyxVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDLENBQUM7QUFFSCxNQUFNLE9BQU8sR0FBRyxJQUFJLHlC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QyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDO0FBRUgsK0JBQStCO0FBQy9CLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgQXNwZWN0cyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEFubm90YXRpb25zLCBNYXRjaCB9IGZyb20gJ2F3cy1jZGstbGliL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IEF3c1NvbHV0aW9uc0NoZWNrcywgTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnY2RrLW5hZyc7XG5pbXBvcnQgeyBBY2Nlc3NMb2cgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsnO1xuaW1wb3J0IHsgRXZlbnRicmlkZ2VCcm9rZXIgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvZm91bmRhdGlvbi9ldmVudGJyaWRnZS1icm9rZXInO1xuaW1wb3J0IHsgY3JlYXRlVGVzdEFwcCB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy90ZXN0LXV0aWxzJztcbmltcG9ydCB7IFF1ZXVlZFMzQWRhcHRlciB9IGZyb20gJy4uL2FkYXB0ZXInO1xuaW1wb3J0IHsgQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyB9IGZyb20gJy4uL2JlZHJvY2stZG9jdW1lbnQtcHJvY2Vzc2luZyc7XG5cbi8vIENyZWF0ZSBhcHAgYW5kIHN0YWNrIHdpdGggYnVuZGxpbmcgZGlzYWJsZWQgZm9yIGZhc3RlciB0ZXN0c1xuY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICBlbnY6IHtcbiAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICB9LFxufSk7XG5cbi8vIENyZWF0ZSBFdmVudEJyaWRnZSBicm9rZXJcbmNvbnN0IGJyb2tlciA9IG5ldyBFdmVudGJyaWRnZUJyb2tlcihzdGFjaywgJ0lEUEJyb2tlcicsIHtcbiAgbmFtZTogJ2lkcC1icm9rZXInLFxuICBldmVudFNvdXJjZTogJ2ludGVsbGlnZW50LWRvY3VtZW50LXByb2Nlc3NpbmcnLFxufSk7XG5cbmNvbnN0IGFjY2Vzc0xvZyA9IG5ldyBBY2Nlc3NMb2coc3RhY2ssICdBY2Nlc3NMb2cnKTtcblxuLy8gQ3JlYXRlIFMzIGJ1Y2tldCBmb3IgYWdlbnRpYyB0b29sc1xuY29uc3QgYnVja2V0ID0gbmV3IEJ1Y2tldChzdGFjaywgJ0JlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmdCdWNrZXQnLCB7XG4gIHNlcnZlckFjY2Vzc0xvZ3NCdWNrZXQ6IGFjY2Vzc0xvZy5idWNrZXQsXG4gIHNlcnZlckFjY2Vzc0xvZ3NQcmVmaXg6IGFjY2Vzc0xvZy5idWNrZXRQcmVmaXgsXG4gIGVuZm9yY2VTU0w6IHRydWUsXG59KTtcblxuY29uc3QgYWRhcHRlciA9IG5ldyBRdWV1ZWRTM0FkYXB0ZXIoe1xuICBidWNrZXQsXG59KTtcblxuLy8gQ3JlYXRlIHRoZSBtYWluIEJlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmcgY29uc3RydWN0XG5uZXcgQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyhzdGFjaywgJ0JlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmcnLCB7XG4gIGluZ3Jlc3NBZGFwdGVyOiBhZGFwdGVyLFxuICBjbGFzc2lmaWNhdGlvbkJlZHJvY2tNb2RlbDogeyB1c2VDcm9zc1JlZ2lvbkluZmVyZW5jZTogdHJ1ZSB9LFxuICBwcm9jZXNzaW5nQmVkcm9ja01vZGVsOiB7IHVzZUNyb3NzUmVnaW9uSW5mZXJlbmNlOiB0cnVlIH0sXG4gIGV2ZW50YnJpZGdlQnJva2VyOiBicm9rZXIsXG4gIGVuYWJsZU9ic2VydmFiaWxpdHk6IHRydWUsXG59KTtcblxuLy8gU3VwcHJlc3MgQ0RLLW1hbmFnZWQgQnVja2V0Tm90aWZpY2F0aW9uc0hhbmRsZXIgQVdTIG1hbmFnZWQgcG9saWN5XG5OYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnNCeVBhdGgoXG4gIHN0YWNrLFxuICAnL1Rlc3RTdGFjay9CdWNrZXROb3RpZmljYXRpb25zSGFuZGxlcjA1MGEwNTg3Yjc1NDQ1NDdiZjMyNWYwOTRhM2RiODM0L1JvbGUnLFxuICBbXG4gICAge1xuICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICByZWFzb246ICdDREstbWFuYWdlZCBCdWNrZXROb3RpZmljYXRpb25zSGFuZGxlciByZXF1aXJlcyBBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUgZm9yIFMzIGV2ZW50IHByb2Nlc3NpbmcnLFxuICAgICAgYXBwbGllc1RvOiBbJ1BvbGljeTo6YXJuOjxBV1M6OlBhcnRpdGlvbj46aWFtOjphd3M6cG9saWN5L3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnXSxcbiAgICB9LFxuICBdLFxuKTtcblxuLy8gU3VwcHJlc3MgUzMgYnVja2V0IHdpbGRjYXJkIHBlcm1pc3Npb25zIGZvciBMYW1iZGEgcm9sZXNcbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgc3RhY2ssXG4gIFtcbiAgICB7XG4gICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgIHJlYXNvbjogJ0xhbWJkYSBmdW5jdGlvbnMgcmVxdWlyZSB3aWxkY2FyZCBhY2Nlc3MgdG8gUzMgYnVja2V0IG9iamVjdHMgZm9yIGRvY3VtZW50IHByb2Nlc3NpbmcnLFxuICAgICAgYXBwbGllc1RvOiBbJ1Jlc291cmNlOjo8QmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZ0J1Y2tldEEwNkNBMUUyLkFybj4vKiddLFxuICAgIH0sXG4gIF0sXG4gIHRydWUsXG4pO1xuXG4vLyBTdXBwcmVzcyBCZWRyb2NrIGZvdW5kYXRpb24gbW9kZWwgd2lsZGNhcmQgcGVybWlzc2lvbnNcbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgc3RhY2ssXG4gIFtcbiAgICB7XG4gICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgIHJlYXNvbjogJ0Nyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgcmVxdWlyZXMgd2lsZGNhcmQgcmVnaW9uIGFjY2VzcyB0byBCZWRyb2NrIGZvdW5kYXRpb24gbW9kZWxzJyxcbiAgICAgIGFwcGxpZXNUbzogWydSZXNvdXJjZTo6YXJuOmF3czpiZWRyb2NrOio6OmZvdW5kYXRpb24tbW9kZWwvYW50aHJvcGljLmNsYXVkZS0zLTctc29ubmV0LTIwMjUwMjE5LXYxOjAnXSxcbiAgICB9LFxuICBdLFxuICB0cnVlLFxuKTtcblxuLy8gU3VwcHJlc3MgU1FTQ29uc3VtZXJSb2xlIHdpbGRjYXJkIHBlcm1pc3Npb25zIGZvciBMYW1iZGEgbG9nIHN0cmVhbXNcbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgc3RhY2ssXG4gIFtcbiAgICB7XG4gICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgIHJlYXNvbjogJ0xhbWJkYSBsb2cgc3RyZWFtIEFSTiBpcyBvbmx5IGtub3duIGF0IHJ1bnRpbWUsIHdpbGRjYXJkIHJlcXVpcmVkIGZvciBDbG91ZFdhdGNoIExvZ3MgYWNjZXNzJyxcbiAgICB9LFxuICBdLFxuICB0cnVlLFxuKTtcblxuLy8gU3VwcHJlc3MgU3RhdGVNYWNoaW5lUm9sZSB3aWxkY2FyZCBwZXJtaXNzaW9ucyBmb3IgTGFtYmRhIGludm9jYXRpb25cbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9uc0J5UGF0aChcbiAgc3RhY2ssXG4gICcvVGVzdFN0YWNrL0JlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmcvU3RhdGVNYWNoaW5lUm9sZS9EZWZhdWx0UG9saWN5JyxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgcmVhc29uOiAnU3RlcCBGdW5jdGlvbnMgcmVxdWlyZXMgd2lsZGNhcmQgcGVybWlzc2lvbnMgdG8gaW52b2tlIExhbWJkYSBmdW5jdGlvbnMgd2l0aCB2ZXJzaW9uLXNwZWNpZmljIEFSTnMnLFxuICAgIH0sXG4gIF0sXG4pO1xuXG4vLyBTdXBwcmVzcyBMYW1iZGEgbG9nIGdyb3VwIHdpbGRjYXJkIHBlcm1pc3Npb25zXG5OYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gIHN0YWNrLFxuICBbXG4gICAge1xuICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICByZWFzb246ICdMYW1iZGEgbG9nIHN0cmVhbSBuYW1lcyBhcmUgZ2VuZXJhdGVkIGF0IHJ1bnRpbWUsIHdpbGRjYXJkIHJlcXVpcmVkIGZvciBDbG91ZFdhdGNoIExvZ3MgYWNjZXNzJyxcbiAgICB9LFxuICBdLFxuICB0cnVlLFxuKTtcblxuLy8gQXBwbHkgQ0RLIE5hZyBjaGVja3NcbkFzcGVjdHMub2YoYXBwKS5hZGQobmV3IEF3c1NvbHV0aW9uc0NoZWNrcyh7IHZlcmJvc2U6IHRydWUgfSkpO1xuXG4vLyBTeW50aGVzaXplIHRoZSBzdGFjayBhbmQgY2hlY2sgZm9yIHVuc3VwcHJlc3NlZCB3YXJuaW5ncyBhbmQgZXJyb3JzXG5jb25zdCB3YXJuaW5ncyA9IEFubm90YXRpb25zLmZyb21TdGFjayhzdGFjaykuZmluZFdhcm5pbmcoJyonLCBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKCdBd3NTb2x1dGlvbnMtLionKSk7XG5jb25zdCBlcnJvcnMgPSBBbm5vdGF0aW9ucy5mcm9tU3RhY2soc3RhY2spLmZpbmRFcnJvcignKicsIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpKTtcblxuLy8gVGVzdDogTm8gdW5zdXBwcmVzc2VkIHdhcm5pbmdzXG50ZXN0KCdObyB1bnN1cHByZXNzZWQgd2FybmluZ3MnLCAoKSA9PiB7XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coJ0NESyBOYWcgV2FybmluZ3M6JywgSlNPTi5zdHJpbmdpZnkod2FybmluZ3MsIG51bGwsIDIpKTtcbiAgfVxuICBleHBlY3Qod2FybmluZ3MpLnRvSGF2ZUxlbmd0aCgwKTtcbn0pO1xuXG4vLyBUZXN0OiBObyB1bnN1cHByZXNzZWQgZXJyb3JzXG50ZXN0KCdObyB1bnN1cHByZXNzZWQgZXJyb3JzJywgKCkgPT4ge1xuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZygnQ0RLIE5hZyBFcnJvcnM6JywgSlNPTi5zdHJpbmdpZnkoZXJyb3JzLCBudWxsLCAyKSk7XG4gIH1cbiAgZXhwZWN0KGVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|