@aws-mdaa/dataops-job-l3-construct 1.4.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 +117 -121
- package/README.md +5 -0
- package/lib/dataops-job-l3-construct.d.ts +37 -240
- package/lib/dataops-job-l3-construct.js +61 -34
- package/node_modules/@aws-mdaa/config/.npmignore +34 -0
- package/node_modules/@aws-mdaa/config/README.md +3 -0
- package/node_modules/@aws-mdaa/config/jest.config.js +5 -0
- package/node_modules/@aws-mdaa/config/lib/blueprint-value-transformer.d.ts +20 -0
- package/node_modules/@aws-mdaa/config/lib/blueprint-value-transformer.js +70 -0
- package/node_modules/@aws-mdaa/config/lib/blueprint-value-transformer.ts +88 -0
- package/node_modules/@aws-mdaa/config/lib/config.d.ts +87 -0
- package/node_modules/@aws-mdaa/config/lib/config.js +7 -0
- package/node_modules/@aws-mdaa/config/lib/config.ts +92 -0
- package/node_modules/@aws-mdaa/config/lib/index.d.ts +11 -0
- package/node_modules/@aws-mdaa/config/lib/index.js +28 -0
- package/node_modules/@aws-mdaa/config/lib/index.ts +12 -0
- package/node_modules/@aws-mdaa/config/lib/param-transformer.d.ts +49 -0
- package/node_modules/@aws-mdaa/config/lib/param-transformer.js +160 -0
- package/node_modules/@aws-mdaa/config/lib/param-transformer.ts +159 -0
- package/node_modules/@aws-mdaa/config/lib/path-value-transformer.d.ts +10 -0
- package/node_modules/@aws-mdaa/config/lib/path-value-transformer.js +30 -0
- package/node_modules/@aws-mdaa/config/lib/path-value-transformer.ts +27 -0
- package/node_modules/@aws-mdaa/config/lib/ref-value-transformer.d.ts +44 -0
- package/node_modules/@aws-mdaa/config/lib/ref-value-transformer.js +243 -0
- package/node_modules/@aws-mdaa/config/lib/ref-value-transformer.ts +302 -0
- package/node_modules/@aws-mdaa/config/lib/ssm-ref-transformer.d.ts +8 -0
- package/node_modules/@aws-mdaa/config/lib/ssm-ref-transformer.js +22 -0
- package/node_modules/@aws-mdaa/config/lib/ssm-ref-transformer.ts +21 -0
- package/node_modules/@aws-mdaa/config/lib/transformer.d.ts +35 -0
- package/node_modules/@aws-mdaa/config/lib/transformer.js +66 -0
- package/node_modules/@aws-mdaa/config/lib/transformer.ts +74 -0
- package/node_modules/@aws-mdaa/{s3-bucketpolicy-helper → config}/package.json +17 -17
- package/node_modules/@aws-mdaa/config/test/blueprint-value-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/blueprint-value-transformer.test.js +224 -0
- package/node_modules/@aws-mdaa/config/test/blueprint-value-transformer.test.ts +259 -0
- package/node_modules/@aws-mdaa/config/test/config-nt.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/config-nt.test.js +129 -0
- package/node_modules/@aws-mdaa/config/test/config-nt.test.ts +163 -0
- package/node_modules/@aws-mdaa/config/test/config.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/config.test.js +409 -0
- package/node_modules/@aws-mdaa/config/test/config.test.ts +517 -0
- package/node_modules/@aws-mdaa/config/test/param-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/param-transformer.test.js +216 -0
- package/node_modules/@aws-mdaa/config/test/param-transformer.test.ts +234 -0
- package/node_modules/@aws-mdaa/config/test/path-value-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/path-value-transformer.test.js +59 -0
- package/node_modules/@aws-mdaa/config/test/path-value-transformer.test.ts +68 -0
- package/node_modules/@aws-mdaa/config/test/ref-value-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/ref-value-transformer.test.js +254 -0
- package/node_modules/@aws-mdaa/config/test/ref-value-transformer.test.ts +304 -0
- package/node_modules/@aws-mdaa/config/test/ssm-ref-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/ssm-ref-transformer.test.js +66 -0
- package/node_modules/@aws-mdaa/config/test/ssm-ref-transformer.test.ts +79 -0
- package/node_modules/@aws-mdaa/config/tsconfig.json +40 -0
- package/node_modules/@aws-mdaa/config/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@aws-mdaa/config/typedoc.json +7 -0
- package/node_modules/lodash/README.md +2 -2
- package/node_modules/lodash/_baseOrderBy.js +1 -1
- package/node_modules/lodash/_baseUnset.js +7 -20
- package/node_modules/lodash/_setCacheHas.js +1 -1
- package/node_modules/lodash/compact.js +1 -1
- package/node_modules/lodash/core.js +3 -3
- package/node_modules/lodash/core.min.js +26 -25
- package/node_modules/lodash/fromPairs.js +3 -1
- package/node_modules/lodash/lodash.js +38 -27
- package/node_modules/lodash/lodash.min.js +125 -129
- package/node_modules/lodash/package.json +4 -2
- package/node_modules/lodash/random.js +9 -0
- package/node_modules/lodash/template.js +16 -4
- package/node_modules/lodash/templateSettings.js +4 -0
- package/package.json +27 -30
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/README.md +0 -185
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.d.ts +0 -57
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.js +0 -198
- package/node_modules/@aws-mdaa/s3-inventory-helper/README.md +0 -3
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.d.ts +0 -66
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.js +0 -222
- package/node_modules/@aws-mdaa/s3-inventory-helper/package.json +0 -42
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*!
|
|
3
|
-
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.RestrictBucketToRoles = exports.RestrictObjectPrefixToRoles = void 0;
|
|
8
|
-
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
9
|
-
/** Helper class for generating S3 bucket policy statements which grant access to specific object prefixes */
|
|
10
|
-
class RestrictObjectPrefixToRoles {
|
|
11
|
-
constructor(props) {
|
|
12
|
-
this._readStatements = [];
|
|
13
|
-
this._readWriteStatements = [];
|
|
14
|
-
this._readWriteSuperStatements = [];
|
|
15
|
-
this._formattedPrefix = '/' + this.formatS3Prefix(props.s3Prefix) + '/*';
|
|
16
|
-
// Covers our case where two / get resolved because our prefix is actually /
|
|
17
|
-
this._formattedPrefix = this._formattedPrefix.replace(/\/\//, '/');
|
|
18
|
-
// FEDERATED / READ
|
|
19
|
-
if (props.readRoleIds != undefined && props.readRoleIds.length > 0) {
|
|
20
|
-
// Construct our User:Id roles for read
|
|
21
|
-
const statement = this._readStatementScaffold(props);
|
|
22
|
-
statement.addCondition('StringLike', { 'aws:userId': props.readRoleIds.map(x => `${x}:*`) });
|
|
23
|
-
statement.addAnyPrincipal();
|
|
24
|
-
this._readStatements.push(statement);
|
|
25
|
-
}
|
|
26
|
-
// FEDERATED / READWRITE
|
|
27
|
-
if (props.readWriteRoleIds != undefined && props.readWriteRoleIds.length > 0) {
|
|
28
|
-
const statement = this._readWriteStatementScaffold(props);
|
|
29
|
-
statement.addCondition('StringLike', { 'aws:userId': props.readWriteRoleIds.map(x => `${x}:*`) });
|
|
30
|
-
statement.addAnyPrincipal();
|
|
31
|
-
this._readWriteStatements.push(statement);
|
|
32
|
-
}
|
|
33
|
-
// FEDERATED / READWRITESUPER
|
|
34
|
-
if (props.readWriteSuperRoleIds != undefined && props.readWriteSuperRoleIds.length > 0) {
|
|
35
|
-
const statement = this._readWriteSuperStatementScaffold(props);
|
|
36
|
-
statement.addCondition('StringLike', { 'aws:userId': props.readWriteSuperRoleIds.map(x => `${x}:*`) });
|
|
37
|
-
statement.addAnyPrincipal();
|
|
38
|
-
this._readWriteSuperStatements.push(statement);
|
|
39
|
-
}
|
|
40
|
-
// NONFEDERATED / READ
|
|
41
|
-
if (props.readPrincipals != undefined && props.readPrincipals.length > 0) {
|
|
42
|
-
const statement = this._readStatementScaffold(props);
|
|
43
|
-
props.readPrincipals.forEach(principal => {
|
|
44
|
-
statement.addPrincipals(principal);
|
|
45
|
-
});
|
|
46
|
-
this._readStatements.push(statement);
|
|
47
|
-
}
|
|
48
|
-
// NONFEDERATED / READWRITE
|
|
49
|
-
if (props.readWritePrincipals != undefined && props.readWritePrincipals.length > 0) {
|
|
50
|
-
const statement = this._readWriteStatementScaffold(props);
|
|
51
|
-
props.readWritePrincipals.forEach(principal => {
|
|
52
|
-
statement.addPrincipals(principal);
|
|
53
|
-
});
|
|
54
|
-
this._readWriteStatements.push(statement);
|
|
55
|
-
}
|
|
56
|
-
// NONFEDERATED / READWRITESUPER
|
|
57
|
-
if (props.readWriteSuperPrincipals != undefined && props.readWriteSuperPrincipals.length > 0) {
|
|
58
|
-
const statement = this._readWriteSuperStatementScaffold(props);
|
|
59
|
-
props.readWriteSuperPrincipals.forEach(principal => {
|
|
60
|
-
statement.addPrincipals(principal);
|
|
61
|
-
});
|
|
62
|
-
this._readWriteSuperStatements.push(statement);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
_readStatementScaffold(props) {
|
|
66
|
-
return new aws_iam_1.PolicyStatement({
|
|
67
|
-
sid: `${props.s3Prefix.replace(/\\W/g, '')}_Read`,
|
|
68
|
-
effect: aws_iam_1.Effect.ALLOW,
|
|
69
|
-
resources: [props.s3Bucket.bucketArn + this._formattedPrefix],
|
|
70
|
-
actions: RestrictObjectPrefixToRoles.READ_ACTIONS,
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
_readWriteStatementScaffold(props) {
|
|
74
|
-
return new aws_iam_1.PolicyStatement({
|
|
75
|
-
sid: `${props.s3Prefix.replace(/\\W/g, '')}_ReadWrite`,
|
|
76
|
-
effect: aws_iam_1.Effect.ALLOW,
|
|
77
|
-
resources: [props.s3Bucket.bucketArn + this._formattedPrefix],
|
|
78
|
-
actions: RestrictObjectPrefixToRoles.READ_WRITE_ACTIONS,
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
_readWriteSuperStatementScaffold(props) {
|
|
82
|
-
return new aws_iam_1.PolicyStatement({
|
|
83
|
-
sid: `${props.s3Prefix.replace(/\\W/g, '')}_ReadWriteSuper`,
|
|
84
|
-
effect: aws_iam_1.Effect.ALLOW,
|
|
85
|
-
resources: [props.s3Bucket.bucketArn + this._formattedPrefix],
|
|
86
|
-
actions: RestrictObjectPrefixToRoles.READ_WRITE_SUPER_ACTIONS,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
readStatements() {
|
|
90
|
-
return this._readStatements;
|
|
91
|
-
}
|
|
92
|
-
readWriteStatements() {
|
|
93
|
-
return this._readWriteStatements;
|
|
94
|
-
}
|
|
95
|
-
readWriteSuperStatements() {
|
|
96
|
-
return this._readWriteSuperStatements;
|
|
97
|
-
}
|
|
98
|
-
statements() {
|
|
99
|
-
return [...this._readStatements, ...this._readWriteStatements, ...this._readWriteSuperStatements];
|
|
100
|
-
}
|
|
101
|
-
formatS3Prefix(prefix) {
|
|
102
|
-
let rawPrefix = prefix;
|
|
103
|
-
// Removes trailing slashes
|
|
104
|
-
rawPrefix = rawPrefix.endsWith('/') ? rawPrefix.slice(0, -1) : rawPrefix;
|
|
105
|
-
// Removes leading slashes
|
|
106
|
-
rawPrefix = rawPrefix.startsWith('/') ? rawPrefix.substring(1) : rawPrefix;
|
|
107
|
-
return rawPrefix;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
exports.RestrictObjectPrefixToRoles = RestrictObjectPrefixToRoles;
|
|
111
|
-
RestrictObjectPrefixToRoles.READ_ACTIONS = ['s3:GetObject*'];
|
|
112
|
-
RestrictObjectPrefixToRoles.READ_WRITE_ACTIONS = [
|
|
113
|
-
...RestrictObjectPrefixToRoles.READ_ACTIONS,
|
|
114
|
-
's3:PutObject',
|
|
115
|
-
's3:PutObjectTagging',
|
|
116
|
-
's3:DeleteObject',
|
|
117
|
-
];
|
|
118
|
-
RestrictObjectPrefixToRoles.READ_WRITE_SUPER_ACTIONS = [
|
|
119
|
-
...RestrictObjectPrefixToRoles.READ_WRITE_ACTIONS,
|
|
120
|
-
's3:DeleteObjectVersion',
|
|
121
|
-
];
|
|
122
|
-
RestrictObjectPrefixToRoles.BUCKET_ALLOW_ACTIONS = ['s3:List*', 's3:GetBucket*'];
|
|
123
|
-
RestrictObjectPrefixToRoles.BUCKET_DENY_ACTIONS = ['s3:PutObject*', 's3:GetObject*', 's3:DeleteObject*'];
|
|
124
|
-
/** Helper class for generating bucket policy statements
|
|
125
|
-
* which allow or deny access to an entire bucket. Used to
|
|
126
|
-
* create bucket-level default deny statements to block accesses
|
|
127
|
-
* not granted in the bucket policy. */
|
|
128
|
-
class RestrictBucketToRoles {
|
|
129
|
-
constructor(props) {
|
|
130
|
-
this.resource = [];
|
|
131
|
-
this.notResource = [];
|
|
132
|
-
this.denyConditionalNotEquals = {};
|
|
133
|
-
// Statement allowing access to the bucket for the AROAs
|
|
134
|
-
this.allowStatement = new aws_iam_1.PolicyStatement({
|
|
135
|
-
sid: `BucketAllow`,
|
|
136
|
-
effect: aws_iam_1.Effect.ALLOW,
|
|
137
|
-
resources: [props.s3Bucket.bucketArn + '/*', props.s3Bucket.bucketArn],
|
|
138
|
-
actions: RestrictObjectPrefixToRoles.BUCKET_ALLOW_ACTIONS,
|
|
139
|
-
});
|
|
140
|
-
this.allowStatement.addAnyPrincipal();
|
|
141
|
-
this.allowStatement.addCondition('StringLike', { 'aws:userId': props.roleExcludeIds.map(x => `${x}:*`) });
|
|
142
|
-
// Constuct our deny statement.
|
|
143
|
-
// prefixIncludes denotes we want to include a prefix in our deny meaning Resource
|
|
144
|
-
if (props.prefixIncludes) {
|
|
145
|
-
this.resource = props.prefixIncludes.map(prefix => {
|
|
146
|
-
return `${props.s3Bucket.bucketArn}/${this.formatS3Prefix(prefix)}`;
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
this.resource = [props.s3Bucket.bucketArn + '/*'];
|
|
151
|
-
}
|
|
152
|
-
// prefixExcludes denote we want to exclude a prefix in our deny meaning notResource
|
|
153
|
-
if (props.prefixExcludes) {
|
|
154
|
-
this.notResource = props.prefixExcludes.map(prefix => {
|
|
155
|
-
return `${props.s3Bucket.bucketArn}/${this.formatS3Prefix(prefix)}`;
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
if (this.notResource.length > 0) {
|
|
159
|
-
this.denyStatement = new aws_iam_1.PolicyStatement({
|
|
160
|
-
sid: `BucketDeny`,
|
|
161
|
-
effect: aws_iam_1.Effect.DENY,
|
|
162
|
-
notResources: this.notResource,
|
|
163
|
-
actions: RestrictObjectPrefixToRoles.BUCKET_DENY_ACTIONS,
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
this.denyStatement = new aws_iam_1.PolicyStatement({
|
|
168
|
-
sid: `BucketDeny`,
|
|
169
|
-
effect: aws_iam_1.Effect.DENY,
|
|
170
|
-
resources: this.resource,
|
|
171
|
-
actions: RestrictObjectPrefixToRoles.BUCKET_DENY_ACTIONS,
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
this.denyStatement.addAnyPrincipal();
|
|
175
|
-
// Build our conditionals.
|
|
176
|
-
this.denyConditionalNotEquals['aws:userId'] = props.roleExcludeIds.map(x => `${x}:*`);
|
|
177
|
-
if (props.principalExcludes && props.principalExcludes.length > 0) {
|
|
178
|
-
this.denyConditionalNotEquals['aws:PrincipalArn'] = [...new Set(props.principalExcludes)].sort((a, b) => a.localeCompare(b));
|
|
179
|
-
}
|
|
180
|
-
// Construct our conditional for our deny
|
|
181
|
-
if (Object.keys(this.denyConditionalNotEquals).length == 1) {
|
|
182
|
-
this.denyStatement.addCondition('StringNotLike', this.denyConditionalNotEquals);
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
this.denyStatement.addCondition('ForAnyValue:StringNotLike', this.denyConditionalNotEquals);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
formatS3Prefix(prefix) {
|
|
189
|
-
let rawPrefix = prefix;
|
|
190
|
-
// Removes trailing slashes
|
|
191
|
-
rawPrefix = rawPrefix.endsWith('/') ? rawPrefix.slice(0, -1) : rawPrefix;
|
|
192
|
-
// Removes leading slashes
|
|
193
|
-
rawPrefix = rawPrefix.startsWith('/') ? rawPrefix.substring(1) : rawPrefix;
|
|
194
|
-
return `${rawPrefix}/*`;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
exports.RestrictBucketToRoles = RestrictBucketToRoles;
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCxpREFBMEU7QUFzQjFFLDZHQUE2RztBQUM3RyxNQUFhLDJCQUEyQjtJQW9CdEMsWUFBWSxLQUFtQztRQUx2QyxvQkFBZSxHQUFzQixFQUFFLENBQUM7UUFDeEMseUJBQW9CLEdBQXNCLEVBQUUsQ0FBQztRQUM3Qyw4QkFBeUIsR0FBc0IsRUFBRSxDQUFDO1FBSXhELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3pFLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbkUsbUJBQW1CO1FBQ25CLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkUsdUNBQXVDO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRCxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0YsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCx3QkFBd0I7UUFDeEIsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksU0FBUyxJQUFJ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UyxJQUFJLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBL0VELHNEQStFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IElQcmluY2lwYWwsIFBvbGljeVN0YXRlbWVudCwgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcblxuZXhwb3J0IGludGVyZmFjZSBJUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzIHtcbiAgcmVhZG9ubHkgczNCdWNrZXQ6IElCdWNrZXQ7XG4gIHJlYWRvbmx5IHMzUHJlZml4OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlYWRSb2xlSWRzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHJlYWRXcml0ZVJvbGVJZHM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcmVhZFdyaXRlU3VwZXJSb2xlSWRzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHJlYWRQcmluY2lwYWxzPzogSVByaW5jaXBhbFtdO1xuICByZWFkb25seSByZWFkV3JpdGVQcmluY2lwYWxzPzogSVByaW5jaXBhbFtdO1xuICByZWFkb25seSByZWFkV3JpdGVTdXBlclByaW5jaXBhbHM/OiBJUHJpbmNpcGFsW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlc3RyaWN0QnVja2V0VG9Sb2xlcyB7XG4gIHJlYWRvbmx5IHMzQnVja2V0OiBJQnVja2V0O1xuICByZWFkb25seSByb2xlRXhjbHVkZUlkczogc3RyaW5nW107XG4gIHJlYWRvbmx5IHByaW5jaXBhbEV4Y2x1ZGVzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHByZWZpeEV4Y2x1ZGVzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHByZWZpeEluY2x1ZGVzPzogc3RyaW5nW107XG59XG5cbi8qKiBIZWxwZXIgY2xhc3MgZm9yIGdlbmVyYXRpbmcgUzMgYnVja2V0IHBvbGljeSBzdGF0ZW1lbnRzIHdoaWNoIGdyYW50IGFjY2VzcyB0byBzcGVjaWZpYyBvYmplY3QgcHJlZml4ZXMgKi9cbmV4cG9ydCBjbGFzcyBSZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMge1xuICBzdGF0aWMgcmVhZG9ubHkgUkVBRF9BQ1RJT05TID0gWydzMzpHZXRPYmplY3QqJ107XG4gIHN0YXRpYyByZWFkb25seSBSRUFEX1dSSVRFX0FDVElPTlMgPSBbXG4gICAgLi4uUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLlJFQURfQUNUSU9OUyxcbiAgICAnczM6UHV0T2JqZWN0JyxcbiAgICAnczM6UHV0T2JqZWN0VGFnZ2luZycsXG4gICAgJ3MzOkRlbGV0ZU9iamVjdCcsXG4gIF07XG4gIHN0YXRpYyByZWFkb25seSBSRUFEX1dSSVRFX1NVUEVSX0FDVElPTlMgPSBbXG4gICAgLi4uUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLlJFQURfV1JJVEVfQUNUSU9OUyxcbiAgICAnczM6RGVsZXRlT2JqZWN0VmVyc2lvbicsXG4gIF07XG4gIHN0YXRpYyByZWFkb25seSBCVUNLRVRfQUxMT1dfQUNUSU9OUyA9IFsnczM6TGlzdConLCAnczM6R2V0QnVja2V0KiddO1xuICBzdGF0aWMgcmVhZG9ubHkgQlVDS0VUX0RFTllfQUNUSU9OUyA9IFsnczM6UHV0T2JqZWN0KicsICdzMzpHZXRPYmplY3QqJywgJ3MzOkRlbGV0ZU9iamVjdConXTtcblxuICBwcml2YXRlIF9yZWFkU3RhdGVtZW50czogUG9saWN5U3RhdGVtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBfcmVhZFdyaXRlU3RhdGVtZW50czogUG9saWN5U3RhdGVtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBfcmVhZFdyaXRlU3VwZXJTdGF0ZW1lbnRzOiBQb2xpY3lTdGF0ZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIF9mb3JtYXR0ZWRQcmVmaXg6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVJlc3RyaWN0T2JqZWN0UHJlZml4VG9Sb2xlcykge1xuICAgIHRoaXMuX2Zvcm1hdHRlZFByZWZpeCA9ICcvJyArIHRoaXMuZm9ybWF0UzNQcmVmaXgocHJvcHMuczNQcmVmaXgpICsgJy8qJztcbiAgICAvLyBDb3ZlcnMgb3VyIGNhc2Ugd2hlcmUgdHdvIC8gZ2V0IHJlc29sdmVkIGJlY2F1c2Ugb3VyIHByZWZpeCBpcyBhY3R1YWxseSAvXG4gICAgdGhpcy5fZm9ybWF0dGVkUHJlZml4ID0gdGhpcy5fZm9ybWF0dGVkUHJlZml4LnJlcGxhY2UoL1xcL1xcLy8sICcvJyk7XG5cbiAgICAvLyBGRURFUkFURUQgLyBSRUFEXG4gICAgaWYgKHByb3BzLnJlYWRSb2xlSWRzICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5yZWFkUm9sZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBDb25zdHJ1Y3Qgb3VyIFVzZXI6SWQgcm9sZXMgZm9yIHJlYWRcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuX3JlYWRTdGF0ZW1lbnRTY2FmZm9sZChwcm9wcyk7XG4gICAgICBzdGF0ZW1lbnQuYWRkQ29uZGl0aW9uKCdTdHJpbmdMaWtlJywgeyAnYXdzOnVzZXJJZCc6IHByb3BzLnJlYWRSb2xlSWRzLm1hcCh4ID0+IGAke3h9OipgKSB9KTtcbiAgICAgIHN0YXRlbWVudC5hZGRBbnlQcmluY2lwYWwoKTtcbiAgICAgIHRoaXMuX3JlYWRTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gICAgLy8gRkVERVJBVEVEIC8gUkVBRFdSSVRFXG4gICAgaWYgKHByb3BzLnJlYWRXcml0ZVJvbGVJZHMgIT0gdW5kZWZpbmVkICYmIHByb3BzLnJlYWRXcml0ZVJvbGVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5fcmVhZFdyaXRlU3RhdGVtZW50U2NhZmZvbGQocHJvcHMpO1xuICAgICAgc3RhdGVtZW50LmFkZENvbmRpdGlvbignU3RyaW5nTGlrZScsIHsgJ2F3czp1c2VySWQnOiBwcm9wcy5yZWFkV3JpdGVSb2xlSWRzLm1hcCh4ID0+IGAke3h9OipgKSB9KTtcbiAgICAgIHN0YXRlbWVudC5hZGRBbnlQcmluY2lwYWwoKTtcbiAgICAgIHRoaXMuX3JlYWRXcml0ZVN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIEZFREVSQVRFRCAvIFJFQURXUklURVNVUEVSXG4gICAgaWYgKHByb3BzLnJlYWRXcml0ZVN1cGVyUm9sZUlkcyAhPSB1bmRlZmluZWQgJiYgcHJvcHMucmVhZFdyaXRlU3VwZXJSb2xlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuX3JlYWRXcml0ZVN1cGVyU3RhdGVtZW50U2NhZmZvbGQocHJvcHMpO1xuICAgICAgc3RhdGVtZW50LmFkZENvbmRpdGlvbignU3RyaW5nTGlrZScsIHsgJ2F3czp1c2VySWQnOiBwcm9wcy5yZWFkV3JpdGVTdXBlclJvbGVJZHMubWFwKHggPT4gYCR7eH06KmApIH0pO1xuICAgICAgc3RhdGVtZW50LmFkZEFueVByaW5jaXBhbCgpO1xuICAgICAgdGhpcy5fcmVhZFdyaXRlU3VwZXJTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBOT05GRURFUkFURUQgLyBSRUFEXG4gICAgaWYgKHByb3BzLnJlYWRQcmluY2lwYWxzICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5yZWFkUHJpbmNpcGFscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLl9yZWFkU3RhdGVtZW50U2NhZmZvbGQocHJvcHMpO1xuICAgICAgcHJvcHMucmVhZFByaW5jaXBhbHMuZm9yRWFjaChwcmluY2lwYWwgPT4ge1xuICAgICAgICBzdGF0ZW1lbnQuYWRkUHJpbmNpcGFscyhwcmluY2lwYWwpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9yZWFkU3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuICAgIC8vIE5PTkZFREVSQVRFRCAvIFJFQURXUklURVxuICAgIGlmIChwcm9wcy5yZWFkV3JpdGVQcmluY2lwYWxzICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5yZWFkV3JpdGVQcmluY2lwYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuX3JlYWRXcml0ZVN0YXRlbWVudFNjYWZmb2xkKHByb3BzKTtcbiAgICAgIHByb3BzLnJlYWRXcml0ZVByaW5jaXBhbHMuZm9yRWFjaChwcmluY2lwYWwgPT4ge1xuICAgICAgICBzdGF0ZW1lbnQuYWRkUHJpbmNpcGFscyhwcmluY2lwYWwpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9yZWFkV3JpdGVTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gICAgLy8gTk9ORkVERVJBVEVEIC8gUkVBRFdSSVRFU1VQRVJcbiAgICBpZiAocHJvcHMucmVhZFdyaXRlU3VwZXJQcmluY2lwYWxzICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5yZWFkV3JpdGVTdXBlclByaW5jaXBhbHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5fcmVhZFdyaXRlU3VwZXJTdGF0ZW1lbnRTY2FmZm9sZChwcm9wcyk7XG4gICAgICBwcm9wcy5yZWFkV3JpdGVTdXBlclByaW5jaXBhbHMuZm9yRWFjaChwcmluY2lwYWwgPT4ge1xuICAgICAgICBzdGF0ZW1lbnQuYWRkUHJpbmNpcGFscyhwcmluY2lwYWwpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9yZWFkV3JpdGVTdXBlclN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlYWRTdGF0ZW1lbnRTY2FmZm9sZChwcm9wczogSVJlc3RyaWN0T2JqZWN0UHJlZml4VG9Sb2xlcyk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgcmV0dXJuIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiBgJHtwcm9wcy5zM1ByZWZpeC5yZXBsYWNlKC9cXFxcVy9nLCAnJyl9X1JlYWRgLFxuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICByZXNvdXJjZXM6IFtwcm9wcy5zM0J1Y2tldC5idWNrZXRBcm4gKyB0aGlzLl9mb3JtYXR0ZWRQcmVmaXhdLFxuICAgICAgYWN0aW9uczogUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLlJFQURfQUNUSU9OUyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlYWRXcml0ZVN0YXRlbWVudFNjYWZmb2xkKHByb3BzOiBJUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6IGAke3Byb3BzLnMzUHJlZml4LnJlcGxhY2UoL1xcXFxXL2csICcnKX1fUmVhZFdyaXRlYCxcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgcmVzb3VyY2VzOiBbcHJvcHMuczNCdWNrZXQuYnVja2V0QXJuICsgdGhpcy5fZm9ybWF0dGVkUHJlZml4XSxcbiAgICAgIGFjdGlvbnM6IFJlc3RyaWN0T2JqZWN0UHJlZml4VG9Sb2xlcy5SRUFEX1dSSVRFX0FDVElPTlMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZWFkV3JpdGVTdXBlclN0YXRlbWVudFNjYWZmb2xkKHByb3BzOiBJUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6IGAke3Byb3BzLnMzUHJlZml4LnJlcGxhY2UoL1xcXFxXL2csICcnKX1fUmVhZFdyaXRlU3VwZXJgLFxuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICByZXNvdXJjZXM6IFtwcm9wcy5zM0J1Y2tldC5idWNrZXRBcm4gKyB0aGlzLl9mb3JtYXR0ZWRQcmVmaXhdLFxuICAgICAgYWN0aW9uczogUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLlJFQURfV1JJVEVfU1VQRVJfQUNUSU9OUyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkU3RhdGVtZW50cygpOiBQb2xpY3lTdGF0ZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRTdGF0ZW1lbnRzO1xuICB9XG5cbiAgcHVibGljIHJlYWRXcml0ZVN0YXRlbWVudHMoKTogUG9saWN5U3RhdGVtZW50W10ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkV3JpdGVTdGF0ZW1lbnRzO1xuICB9XG5cbiAgcHVibGljIHJlYWRXcml0ZVN1cGVyU3RhdGVtZW50cygpOiBQb2xpY3lTdGF0ZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRXcml0ZVN1cGVyU3RhdGVtZW50cztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0ZW1lbnRzKCk6IFBvbGljeVN0YXRlbWVudFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3JlYWRTdGF0ZW1lbnRzLCAuLi50aGlzLl9yZWFkV3JpdGVTdGF0ZW1lbnRzLCAuLi50aGlzLl9yZWFkV3JpdGVTdXBlclN0YXRlbWVudHNdO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdFMzUHJlZml4KHByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmF3UHJlZml4ID0gcHJlZml4O1xuXG4gICAgLy8gUmVtb3ZlcyB0cmFpbGluZyBzbGFzaGVzXG4gICAgcmF3UHJlZml4ID0gcmF3UHJlZml4LmVuZHNXaXRoKCcvJykgPyByYXdQcmVmaXguc2xpY2UoMCwgLTEpIDogcmF3UHJlZml4O1xuICAgIC8vIFJlbW92ZXMgbGVhZGluZyBzbGFzaGVzXG4gICAgcmF3UHJlZml4ID0gcmF3UHJlZml4LnN0YXJ0c1dpdGgoJy8nKSA/IHJhd1ByZWZpeC5zdWJzdHJpbmcoMSkgOiByYXdQcmVmaXg7XG4gICAgcmV0dXJuIHJhd1ByZWZpeDtcbiAgfVxufVxuXG4vKiogSGVscGVyIGNsYXNzIGZvciBnZW5lcmF0aW5nIGJ1Y2tldCBwb2xpY3kgc3RhdGVtZW50c1xuICogd2hpY2ggYWxsb3cgb3IgZGVueSBhY2Nlc3MgdG8gYW4gZW50aXJlIGJ1Y2tldC4gVXNlZCB0b1xuICogY3JlYXRlIGJ1Y2tldC1sZXZlbCBkZWZhdWx0IGRlbnkgc3RhdGVtZW50cyB0byBibG9jayBhY2Nlc3Nlc1xuICogbm90IGdyYW50ZWQgaW4gdGhlIGJ1Y2tldCBwb2xpY3kuICovXG5leHBvcnQgY2xhc3MgUmVzdHJpY3RCdWNrZXRUb1JvbGVzIHtcbiAgcHVibGljIHJlYWRvbmx5IGRlbnlTdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudDtcbiAgcHVibGljIHJlYWRvbmx5IGFsbG93U3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQ7XG4gIHByaXZhdGUgcmVzb3VyY2U6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbm90UmVzb3VyY2U6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgZGVueUNvbmRpdGlvbmFsTm90RXF1YWxzOiB7XG4gICAgJ2F3czp1c2VySWQnPzogc3RyaW5nW107XG4gICAgJ2F3czpQcmluY2lwYWxBcm4nPzogc3RyaW5nW107XG4gIH0gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVJlc3RyaWN0QnVja2V0VG9Sb2xlcykge1xuICAgIC8vIFN0YXRlbWVudCBhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIGJ1Y2tldCBmb3IgdGhlIEFST0FzXG4gICAgdGhpcy5hbGxvd1N0YXRlbWVudCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiBgQnVja2V0QWxsb3dgLFxuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICByZXNvdXJjZXM6IFtwcm9wcy5zM0J1Y2tldC5idWNrZXRBcm4gKyAnLyonLCBwcm9wcy5zM0J1Y2tldC5idWNrZXRBcm5dLFxuICAgICAgYWN0aW9uczogUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLkJVQ0tFVF9BTExPV19BQ1RJT05TLFxuICAgIH0pO1xuICAgIHRoaXMuYWxsb3dTdGF0ZW1lbnQuYWRkQW55UHJpbmNpcGFsKCk7XG4gICAgdGhpcy5hbGxvd1N0YXRlbWVudC5hZGRDb25kaXRpb24oJ1N0cmluZ0xpa2UnLCB7ICdhd3M6dXNlcklkJzogcHJvcHMucm9sZUV4Y2x1ZGVJZHMubWFwKHggPT4gYCR7eH06KmApIH0pO1xuXG4gICAgLy8gQ29uc3R1Y3Qgb3VyIGRlbnkgc3RhdGVtZW50LlxuICAgIC8vIHByZWZpeEluY2x1ZGVzIGRlbm90ZXMgd2Ugd2FudCB0byBpbmNsdWRlIGEgcHJlZml4IGluIG91ciBkZW55IG1lYW5pbmcgUmVzb3VyY2VcbiAgICBpZiAocHJvcHMucHJlZml4SW5jbHVkZXMpIHtcbiAgICAgIHRoaXMucmVzb3VyY2UgPSBwcm9wcy5wcmVmaXhJbmNsdWRlcy5tYXAocHJlZml4ID0+IHtcbiAgICAgICAgcmV0dXJuIGAke3Byb3BzLnMzQnVja2V0LmJ1Y2tldEFybn0vJHt0aGlzLmZvcm1hdFMzUHJlZml4KHByZWZpeCl9YDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc291cmNlID0gW3Byb3BzLnMzQnVja2V0LmJ1Y2tldEFybiArICcvKiddO1xuICAgIH1cbiAgICAvLyBwcmVmaXhFeGNsdWRlcyBkZW5vdGUgd2Ugd2FudCB0byBleGNsdWRlIGEgcHJlZml4IGluIG91ciBkZW55IG1lYW5pbmcgbm90UmVzb3VyY2VcbiAgICBpZiAocHJvcHMucHJlZml4RXhjbHVkZXMpIHtcbiAgICAgIHRoaXMubm90UmVzb3VyY2UgPSBwcm9wcy5wcmVmaXhFeGNsdWRlcy5tYXAocHJlZml4ID0+IHtcbiAgICAgICAgcmV0dXJuIGAke3Byb3BzLnMzQnVja2V0LmJ1Y2tldEFybn0vJHt0aGlzLmZvcm1hdFMzUHJlZml4KHByZWZpeCl9YDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5vdFJlc291cmNlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGVueVN0YXRlbWVudCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6IGBCdWNrZXREZW55YCxcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuREVOWSxcbiAgICAgICAgbm90UmVzb3VyY2VzOiB0aGlzLm5vdFJlc291cmNlLFxuICAgICAgICBhY3Rpb25zOiBSZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMuQlVDS0VUX0RFTllfQUNUSU9OUyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlbnlTdGF0ZW1lbnQgPSBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgc2lkOiBgQnVja2V0RGVueWAsXG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkRFTlksXG4gICAgICAgIHJlc291cmNlczogdGhpcy5yZXNvdXJjZSxcbiAgICAgICAgYWN0aW9uczogUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLkJVQ0tFVF9ERU5ZX0FDVElPTlMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5kZW55U3RhdGVtZW50LmFkZEFueVByaW5jaXBhbCgpO1xuXG4gICAgLy8gQnVpbGQgb3VyIGNvbmRpdGlvbmFscy5cbiAgICB0aGlzLmRlbnlDb25kaXRpb25hbE5vdEVxdWFsc1snYXdzOnVzZXJJZCddID0gcHJvcHMucm9sZUV4Y2x1ZGVJZHMubWFwKHggPT4gYCR7eH06KmApO1xuICAgIGlmIChwcm9wcy5wcmluY2lwYWxFeGNsdWRlcyAmJiBwcm9wcy5wcmluY2lwYWxFeGNsdWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRlbnlDb25kaXRpb25hbE5vdEVxdWFsc1snYXdzOlByaW5jaXBhbEFybiddID0gWy4uLm5ldyBTZXQocHJvcHMucHJpbmNpcGFsRXhjbHVkZXMpXS5zb3J0KChhLCBiKSA9PlxuICAgICAgICBhLmxvY2FsZUNvbXBhcmUoYiksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBvdXIgY29uZGl0aW9uYWwgZm9yIG91ciBkZW55XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZGVueUNvbmRpdGlvbmFsTm90RXF1YWxzKS5sZW5ndGggPT0gMSkge1xuICAgICAgdGhpcy5kZW55U3RhdGVtZW50LmFkZENvbmRpdGlvbignU3RyaW5nTm90TGlrZScsIHRoaXMuZGVueUNvbmRpdGlvbmFsTm90RXF1YWxzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZW55U3RhdGVtZW50LmFkZENvbmRpdGlvbignRm9yQW55VmFsdWU6U3RyaW5nTm90TGlrZScsIHRoaXMuZGVueUNvbmRpdGlvbmFsTm90RXF1YWxzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFMzUHJlZml4KHByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmF3UHJlZml4ID0gcHJlZml4O1xuXG4gICAgLy8gUmVtb3ZlcyB0cmFpbGluZyBzbGFzaGVzXG4gICAgcmF3UHJlZml4ID0gcmF3UHJlZml4LmVuZHNXaXRoKCcvJykgPyByYXdQcmVmaXguc2xpY2UoMCwgLTEpIDogcmF3UHJlZml4O1xuICAgIC8vIFJlbW92ZXMgbGVhZGluZyBzbGFzaGVzXG4gICAgcmF3UHJlZml4ID0gcmF3UHJlZml4LnN0YXJ0c1dpdGgoJy8nKSA/IHJhd1ByZWZpeC5zdWJzdHJpbmcoMSkgOiByYXdQcmVmaXg7XG4gICAgcmV0dXJuIGAke3Jhd1ByZWZpeH0vKmA7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/
|
|
5
|
-
import { Database } from '@aws-cdk/aws-glue-alpha';
|
|
6
|
-
import { CfnTable } from 'aws-cdk-lib/aws-glue';
|
|
7
|
-
import { PolicyStatement } from 'aws-cdk-lib/aws-iam';
|
|
8
|
-
import { IBucket, Inventory } from 'aws-cdk-lib/aws-s3';
|
|
9
|
-
import { Construct } from 'constructs';
|
|
10
|
-
export interface BucketInventory {
|
|
11
|
-
/**
|
|
12
|
-
* Q-ENHANCED-PROPERTY
|
|
13
|
-
* Name of the S3 bucket for which inventory data has been generated. Identifies the source bucket in inventory data organization and enables bucket-specific inventory querying through Glue table partitions.
|
|
14
|
-
*
|
|
15
|
-
* Use cases: Source bucket identification; Inventory data organization; Multi-bucket inventory management
|
|
16
|
-
*
|
|
17
|
-
* AWS: AWS S3 bucket name for inventory source identification in Glue table partitions
|
|
18
|
-
*
|
|
19
|
-
* Validation: Must be valid S3 bucket name (3-63 characters, lowercase, no underscores)
|
|
20
|
-
**/
|
|
21
|
-
readonly bucketName: string;
|
|
22
|
-
/**
|
|
23
|
-
* Q-ENHANCED-PROPERTY
|
|
24
|
-
* Name of the S3 inventory configuration that generated the inventory data for the specified bucket. Enables multiple inventory configurations per bucket and organized inventory data management.
|
|
25
|
-
*
|
|
26
|
-
* Use cases: Inventory configuration identification; Multiple inventories per bucket; Inventory data organization
|
|
27
|
-
*
|
|
28
|
-
* AWS: AWS S3 inventory configuration name for inventory data identification in Glue table partitions
|
|
29
|
-
*
|
|
30
|
-
* Validation: Must be valid S3 inventory configuration name matching the inventory ID used in S3 inventory setup
|
|
31
|
-
**/
|
|
32
|
-
readonly inventoryName: string;
|
|
33
|
-
}
|
|
34
|
-
/** Helper class for creating S3 Inventories and associated Glue/Athena resources for querying these inventories. */
|
|
35
|
-
export declare class InventoryHelper {
|
|
36
|
-
/**
|
|
37
|
-
* Helper method for creating an S3 inventory.
|
|
38
|
-
* @param destinationBucket The bucket where S3 inventory data will be written
|
|
39
|
-
* @param inventoryId The S3 inventory ID
|
|
40
|
-
* @param objectsPrefix The object prefix from which inventory will be produced (on the bucket to which the inventory config is applied)
|
|
41
|
-
* @param destinationPrefix The object prefix under which inventory will be written on the destination bucket.
|
|
42
|
-
* @returns An S3 Inventory Config which can be applied to a bucket in order to produce periodic inventory data.
|
|
43
|
-
*/
|
|
44
|
-
static createInvConfig(destinationBucket: IBucket, inventoryId: string, objectsPrefix?: string, destinationPrefix?: string, destinationAccount?: string): Inventory;
|
|
45
|
-
/**
|
|
46
|
-
* Helper method for creating a Glue table which can be used to query inventory data generated by an S3 Inventory config
|
|
47
|
-
* @param scope Stack in which the table will be created
|
|
48
|
-
* @param tableNamePrefix Will be used to prefix the table name.
|
|
49
|
-
* @param locationBucketName The bucket where the inventory data is stored.
|
|
50
|
-
* @param inventoryBucket The bucket for which inventory data has been generated
|
|
51
|
-
* @param database The Glue database in which the table will be created
|
|
52
|
-
* @param inventoryName The name of the S3 Inventory config
|
|
53
|
-
* @param locationPrefix The S3 Prefix on the location bucket where the inventory is stored.
|
|
54
|
-
* @returns A Glue table which can be used to query S3 inventory data in an S3 bucket.
|
|
55
|
-
*/
|
|
56
|
-
static createGlueInvTable(scope: Construct, catalogId: string, tableNamePrefix: string, database: Database, locationBucketName: string, bucketInventories: BucketInventory[], locationPrefix?: string): CfnTable;
|
|
57
|
-
/**
|
|
58
|
-
* Helper method to generate an S3 Bucket Policy Statement allowing S3 service to write inventories to a bucket.
|
|
59
|
-
* @param sourceBucketArn The bucket arn for which inventory data is being produced
|
|
60
|
-
* @param bucketArn The bucket arn where inventory will be stored
|
|
61
|
-
* @param srcAccount The account which owns the source bucket from which inventory is being produced.
|
|
62
|
-
* @param inventoryPrefix The prefix on the destination bucket where inventory data will be stored.
|
|
63
|
-
* @returns A policy statement which permits the S3 service principal to write inventory for the source bucket/account to the destination bucket.
|
|
64
|
-
*/
|
|
65
|
-
static createInventoryBucketPolicyStatement(bucketArn: string, srcAccount: string, sourceBucketArn?: string, inventoryPrefix?: string): PolicyStatement;
|
|
66
|
-
}
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*!
|
|
3
|
-
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.InventoryHelper = void 0;
|
|
8
|
-
const s3_constructs_1 = require("@aws-mdaa/s3-constructs");
|
|
9
|
-
const aws_glue_1 = require("aws-cdk-lib/aws-glue");
|
|
10
|
-
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
11
|
-
const aws_s3_1 = require("aws-cdk-lib/aws-s3");
|
|
12
|
-
/** Helper class for creating S3 Inventories and associated Glue/Athena resources for querying these inventories. */
|
|
13
|
-
class InventoryHelper {
|
|
14
|
-
/**
|
|
15
|
-
* Helper method for creating an S3 inventory.
|
|
16
|
-
* @param destinationBucket The bucket where S3 inventory data will be written
|
|
17
|
-
* @param inventoryId The S3 inventory ID
|
|
18
|
-
* @param objectsPrefix The object prefix from which inventory will be produced (on the bucket to which the inventory config is applied)
|
|
19
|
-
* @param destinationPrefix The object prefix under which inventory will be written on the destination bucket.
|
|
20
|
-
* @returns An S3 Inventory Config which can be applied to a bucket in order to produce periodic inventory data.
|
|
21
|
-
*/
|
|
22
|
-
static createInvConfig(destinationBucket, inventoryId, objectsPrefix, destinationPrefix, destinationAccount) {
|
|
23
|
-
const bucketOwner = destinationAccount ? `${destinationAccount}` : destinationAccount;
|
|
24
|
-
return {
|
|
25
|
-
destination: {
|
|
26
|
-
bucket: destinationBucket,
|
|
27
|
-
/**
|
|
28
|
-
* Q-ENHANCED-PROPERTY
|
|
29
|
-
* Required S3 prefix for inventory report destination organization enabling systematic inventory file organization and management. Provides the S3 key prefix for inventory report storage enabling organized inventory data management and efficient retrieval of inventory reports.
|
|
30
|
-
*
|
|
31
|
-
* Use cases: Inventory organization; Report storage; Data management; Systematic file organization
|
|
32
|
-
*
|
|
33
|
-
* AWS: S3 inventory configuration destination prefix for inventory report organization and storage
|
|
34
|
-
*
|
|
35
|
-
* Validation: Must be valid S3 prefix string; required for inventory report destination organization
|
|
36
|
-
*/
|
|
37
|
-
prefix: s3_constructs_1.MdaaBucket.formatS3Prefix(destinationPrefix),
|
|
38
|
-
bucketOwner: bucketOwner,
|
|
39
|
-
},
|
|
40
|
-
format: aws_s3_1.InventoryFormat.PARQUET,
|
|
41
|
-
frequency: aws_s3_1.InventoryFrequency.DAILY,
|
|
42
|
-
includeObjectVersions: aws_s3_1.InventoryObjectVersion.ALL,
|
|
43
|
-
inventoryId: inventoryId,
|
|
44
|
-
objectsPrefix: s3_constructs_1.MdaaBucket.formatS3Prefix(objectsPrefix, false, true),
|
|
45
|
-
optionalFields: [
|
|
46
|
-
'Size',
|
|
47
|
-
'LastModifiedDate',
|
|
48
|
-
'StorageClass',
|
|
49
|
-
'ETag',
|
|
50
|
-
'IsMultipartUploaded',
|
|
51
|
-
'ReplicationStatus',
|
|
52
|
-
'EncryptionStatus',
|
|
53
|
-
'ObjectLockRetainUntilDate',
|
|
54
|
-
'ObjectLockMode',
|
|
55
|
-
'ObjectLockLegalHoldStatus',
|
|
56
|
-
'IntelligentTieringAccessTier',
|
|
57
|
-
],
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Helper method for creating a Glue table which can be used to query inventory data generated by an S3 Inventory config
|
|
62
|
-
* @param scope Stack in which the table will be created
|
|
63
|
-
* @param tableNamePrefix Will be used to prefix the table name.
|
|
64
|
-
* @param locationBucketName The bucket where the inventory data is stored.
|
|
65
|
-
* @param inventoryBucket The bucket for which inventory data has been generated
|
|
66
|
-
* @param database The Glue database in which the table will be created
|
|
67
|
-
* @param inventoryName The name of the S3 Inventory config
|
|
68
|
-
* @param locationPrefix The S3 Prefix on the location bucket where the inventory is stored.
|
|
69
|
-
* @returns A Glue table which can be used to query S3 inventory data in an S3 bucket.
|
|
70
|
-
*/
|
|
71
|
-
static createGlueInvTable(scope, catalogId, tableNamePrefix, database, locationBucketName, bucketInventories, locationPrefix) {
|
|
72
|
-
const location = locationPrefix
|
|
73
|
-
? `s3://${locationBucketName}/${s3_constructs_1.MdaaBucket.formatS3Prefix(locationPrefix)}/`
|
|
74
|
-
: `s3://${locationBucketName}/`;
|
|
75
|
-
const tableInput = {
|
|
76
|
-
name: `${tableNamePrefix}_inv`.replace(/-/gi, '_'),
|
|
77
|
-
parameters: {
|
|
78
|
-
EXTERNAL: 'TRUE',
|
|
79
|
-
'projection.enabled': 'true',
|
|
80
|
-
'projection.dt.type': 'date',
|
|
81
|
-
'projection.dt.range': '2022-01-01-00-00,NOW',
|
|
82
|
-
'projection.dt.format': 'yyyy-MM-dd-HH-mm',
|
|
83
|
-
'projection.dt.interval': '1',
|
|
84
|
-
'projection.dt.interval.unit': 'HOURS',
|
|
85
|
-
'projection.bucket_inventory.type': 'enum',
|
|
86
|
-
'projection.bucket_inventory.values': bucketInventories
|
|
87
|
-
.map(x => `${x.bucketName}/${x.inventoryName}`)
|
|
88
|
-
.join(','),
|
|
89
|
-
'storage.location.template': location + '${bucket_inventory}/hive/dt=${dt}',
|
|
90
|
-
},
|
|
91
|
-
tableType: 'EXTERNAL_TABLE',
|
|
92
|
-
partitionKeys: [
|
|
93
|
-
{
|
|
94
|
-
name: 'bucket_inventory',
|
|
95
|
-
type: 'string',
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
name: 'dt',
|
|
99
|
-
type: 'string',
|
|
100
|
-
},
|
|
101
|
-
],
|
|
102
|
-
storageDescriptor: {
|
|
103
|
-
columns: [
|
|
104
|
-
{
|
|
105
|
-
name: 'bucket',
|
|
106
|
-
type: 'string',
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
name: 'key',
|
|
110
|
-
type: 'string',
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
name: 'version_id',
|
|
114
|
-
type: 'string',
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
name: 'is_latest',
|
|
118
|
-
type: 'boolean',
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
name: 'is_delete_marker',
|
|
122
|
-
type: 'boolean',
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
name: 'size',
|
|
126
|
-
type: 'bigint',
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
name: 'last_modified_date',
|
|
130
|
-
type: 'timestamp',
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
name: 'e_tag',
|
|
134
|
-
type: 'string',
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
name: 'storage_class',
|
|
138
|
-
type: 'string',
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
name: 'is_multipart_uploaded',
|
|
142
|
-
type: 'boolean',
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
name: 'replication_status',
|
|
146
|
-
type: 'string',
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
name: 'encryption_status',
|
|
150
|
-
type: 'string',
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
name: 'intelligent_tiering_tier',
|
|
154
|
-
type: 'string',
|
|
155
|
-
},
|
|
156
|
-
// ,
|
|
157
|
-
// {
|
|
158
|
-
// name: "object_lock_retain_until_date",
|
|
159
|
-
// type: "timestamp"
|
|
160
|
-
// },
|
|
161
|
-
// {
|
|
162
|
-
// name: "object_lock_mode",
|
|
163
|
-
// type: "string"
|
|
164
|
-
// },
|
|
165
|
-
// {
|
|
166
|
-
// name: "object_lock_legal_hold_status",
|
|
167
|
-
// type: "string"
|
|
168
|
-
// }
|
|
169
|
-
],
|
|
170
|
-
location: location,
|
|
171
|
-
inputFormat: 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat',
|
|
172
|
-
outputFormat: 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat',
|
|
173
|
-
compressed: false,
|
|
174
|
-
numberOfBuckets: -1,
|
|
175
|
-
serdeInfo: {
|
|
176
|
-
serializationLibrary: 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe',
|
|
177
|
-
parameters: {
|
|
178
|
-
'serialization.format': '1',
|
|
179
|
-
},
|
|
180
|
-
},
|
|
181
|
-
},
|
|
182
|
-
};
|
|
183
|
-
const tableProps = {
|
|
184
|
-
catalogId: catalogId,
|
|
185
|
-
databaseName: database.databaseName,
|
|
186
|
-
tableInput: tableInput,
|
|
187
|
-
};
|
|
188
|
-
return new aws_glue_1.CfnTable(scope, `inv-table-${tableNamePrefix}`, tableProps);
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Helper method to generate an S3 Bucket Policy Statement allowing S3 service to write inventories to a bucket.
|
|
192
|
-
* @param sourceBucketArn The bucket arn for which inventory data is being produced
|
|
193
|
-
* @param bucketArn The bucket arn where inventory will be stored
|
|
194
|
-
* @param srcAccount The account which owns the source bucket from which inventory is being produced.
|
|
195
|
-
* @param inventoryPrefix The prefix on the destination bucket where inventory data will be stored.
|
|
196
|
-
* @returns A policy statement which permits the S3 service principal to write inventory for the source bucket/account to the destination bucket.
|
|
197
|
-
*/
|
|
198
|
-
static createInventoryBucketPolicyStatement(bucketArn, srcAccount, sourceBucketArn, inventoryPrefix) {
|
|
199
|
-
const resource = inventoryPrefix
|
|
200
|
-
? `${bucketArn}/${s3_constructs_1.MdaaBucket.formatS3Prefix(inventoryPrefix)}/*`
|
|
201
|
-
: `${bucketArn}/*`;
|
|
202
|
-
const allowS3Inventory = new aws_iam_1.PolicyStatement({
|
|
203
|
-
sid: 'AllowS3Inventory',
|
|
204
|
-
effect: aws_iam_1.Effect.ALLOW,
|
|
205
|
-
resources: [resource],
|
|
206
|
-
actions: ['s3:PutObject'],
|
|
207
|
-
});
|
|
208
|
-
allowS3Inventory.addCondition('StringEquals', {
|
|
209
|
-
'aws:SourceAccount': srcAccount,
|
|
210
|
-
's3:x-amz-acl': 'bucket-owner-full-control',
|
|
211
|
-
});
|
|
212
|
-
if (sourceBucketArn) {
|
|
213
|
-
allowS3Inventory.addCondition('ArnLike', {
|
|
214
|
-
'aws:SourceArn': sourceBucketArn,
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
allowS3Inventory.addServicePrincipal('s3.amazonaws.com');
|
|
218
|
-
return allowS3Inventory;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
exports.InventoryHelper = InventoryHelper;
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCwyREFBcUQ7QUFFckQsbURBQStEO0FBQy9ELGlEQUE4RDtBQUM5RCwrQ0FBcUg7QUE0QnJILG9IQUFvSDtBQUNwSCxNQUFhLGVBQWU7SUFDMUI7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQzNCLGlCQUEwQixFQUMxQixXQUFtQixFQUNuQixhQUFzQixFQUN0QixpQkFBMEIsRUFDMUIsa0JBQTJCO1FBRTNCLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQ3RGLE9BQU87WUFDTCxXQUFXLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLGlCQUFpQjtnQkFDekI7Ozs7Ozs7OzttQkFTRztnQkFDSCxNQUFNLEVBQUUsMEJBQVUsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3BELFdBQVcsRUFBRSxXQUFXO2FBQ3pCO1lBQ0QsTUFBTSxFQUFFLHdCQUFlLENBQUMsT0FBTztZQUMvQixTQUFTLEVBQUUsMkJBQWtCLENBQUMsS0FBSztZQUNuQyxxQkFBcUIsRUFBRSwrQkFBc0IsQ0FBQyxHQUFHO1lBQ2pELFdBQVcsRUFBRSxXQUFXO1lBQ3hCLGFBQWEsRUFBRSwwQkFBVSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztZQUNwRSxjQUFjLEVBQUU7Z0JBQ2QsTUFBTTtnQkFDTixrQkFBa0I7Z0JBQ2xCLGNBQWM7Z0JBQ2QsTUFBTTtnQkFDTixxQkFBcUI7Z0JBQ3JCLG1CQUFtQjtnQkFDbkIsa0JBQWtCO2dCQUNsQiwyQkFBMkI7Z0JBQzNCLGdCQUFnQjtnQkFDaEIsMkJBQTJCO2dCQUMzQiw4QkFBOEI7YUFDL0I7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVE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U0FDNUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFO2dCQUN2QyxlQUFlLEVBQUUsZUFBZTthQUNqQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN6RCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQXJPRCwwQ0FxT0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBNZGFhQnVja2V0IH0gZnJvbSAnQGF3cy1tZGFhL3MzLWNvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRGF0YWJhc2UgfSBmcm9tICdAYXdzLWNkay9hd3MtZ2x1ZS1hbHBoYSc7XG5pbXBvcnQgeyBDZm5UYWJsZSwgQ2ZuVGFibGVQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1nbHVlJztcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJQnVja2V0LCBJbnZlbnRvcnksIEludmVudG9yeUZvcm1hdCwgSW52ZW50b3J5RnJlcXVlbmN5LCBJbnZlbnRvcnlPYmplY3RWZXJzaW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldEludmVudG9yeSB7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE5hbWUgb2YgdGhlIFMzIGJ1Y2tldCBmb3Igd2hpY2ggaW52ZW50b3J5IGRhdGEgaGFzIGJlZW4gZ2VuZXJhdGVkLiBJZGVudGlmaWVzIHRoZSBzb3VyY2UgYnVja2V0IGluIGludmVudG9yeSBkYXRhIG9yZ2FuaXphdGlvbiBhbmQgZW5hYmxlcyBidWNrZXQtc3BlY2lmaWMgaW52ZW50b3J5IHF1ZXJ5aW5nIHRocm91Z2ggR2x1ZSB0YWJsZSBwYXJ0aXRpb25zLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFNvdXJjZSBidWNrZXQgaWRlbnRpZmljYXRpb247IEludmVudG9yeSBkYXRhIG9yZ2FuaXphdGlvbjsgTXVsdGktYnVja2V0IGludmVudG9yeSBtYW5hZ2VtZW50XG4gICAqXG4gICAqIEFXUzogQVdTIFMzIGJ1Y2tldCBuYW1lIGZvciBpbnZlbnRvcnkgc291cmNlIGlkZW50aWZpY2F0aW9uIGluIEdsdWUgdGFibGUgcGFydGl0aW9uc1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIFMzIGJ1Y2tldCBuYW1lICgzLTYzIGNoYXJhY3RlcnMsIGxvd2VyY2FzZSwgbm8gdW5kZXJzY29yZXMpXG4gICAqKi9cbiAgcmVhZG9ubHkgYnVja2V0TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBOYW1lIG9mIHRoZSBTMyBpbnZlbnRvcnkgY29uZmlndXJhdGlvbiB0aGF0IGdlbmVyYXRlZCB0aGUgaW52ZW50b3J5IGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgYnVja2V0LiBFbmFibGVzIG11bHRpcGxlIGludmVudG9yeSBjb25maWd1cmF0aW9ucyBwZXIgYnVja2V0IGFuZCBvcmdhbml6ZWQgaW52ZW50b3J5IGRhdGEgbWFuYWdlbWVudC5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBJbnZlbnRvcnkgY29uZmlndXJhdGlvbiBpZGVudGlmaWNhdGlvbjsgTXVsdGlwbGUgaW52ZW50b3JpZXMgcGVyIGJ1Y2tldDsgSW52ZW50b3J5IGRhdGEgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFXUzogQVdTIFMzIGludmVudG9yeSBjb25maWd1cmF0aW9uIG5hbWUgZm9yIGludmVudG9yeSBkYXRhIGlkZW50aWZpY2F0aW9uIGluIEdsdWUgdGFibGUgcGFydGl0aW9uc1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIFMzIGludmVudG9yeSBjb25maWd1cmF0aW9uIG5hbWUgbWF0Y2hpbmcgdGhlIGludmVudG9yeSBJRCB1c2VkIGluIFMzIGludmVudG9yeSBzZXR1cFxuICAgKiovXG4gIHJlYWRvbmx5IGludmVudG9yeU5hbWU6IHN0cmluZztcbn1cblxuLyoqIEhlbHBlciBjbGFzcyBmb3IgY3JlYXRpbmcgUzMgSW52ZW50b3JpZXMgYW5kIGFzc29jaWF0ZWQgR2x1ZS9BdGhlbmEgcmVzb3VyY2VzIGZvciBxdWVyeWluZyB0aGVzZSBpbnZlbnRvcmllcy4gKi9cbmV4cG9ydCBjbGFzcyBJbnZlbnRvcnlIZWxwZXIge1xuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCBmb3IgY3JlYXRpbmcgYW4gUzMgaW52ZW50b3J5LlxuICAgKiBAcGFyYW0gZGVzdGluYXRpb25CdWNrZXQgVGhlIGJ1Y2tldCB3aGVyZSBTMyBpbnZlbnRvcnkgZGF0YSB3aWxsIGJlIHdyaXR0ZW5cbiAgICogQHBhcmFtIGludmVudG9yeUlkIFRoZSBTMyBpbnZlbnRvcnkgSURcbiAgICogQHBhcmFtIG9iamVjdHNQcmVmaXggVGhlIG9iamVjdCBwcmVmaXggZnJvbSB3aGljaCBpbnZlbnRvcnkgd2lsbCBiZSBwcm9kdWNlZCAob24gdGhlIGJ1Y2tldCB0byB3aGljaCB0aGUgaW52ZW50b3J5IGNvbmZpZyBpcyBhcHBsaWVkKVxuICAgKiBAcGFyYW0gZGVzdGluYXRpb25QcmVmaXggVGhlIG9iamVjdCBwcmVmaXggdW5kZXIgd2hpY2ggaW52ZW50b3J5IHdpbGwgYmUgd3JpdHRlbiBvbiB0aGUgZGVzdGluYXRpb24gYnVja2V0LlxuICAgKiBAcmV0dXJucyBBbiBTMyBJbnZlbnRvcnkgQ29uZmlnIHdoaWNoIGNhbiBiZSBhcHBsaWVkIHRvIGEgYnVja2V0IGluIG9yZGVyIHRvIHByb2R1Y2UgcGVyaW9kaWMgaW52ZW50b3J5IGRhdGEuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUludkNvbmZpZyhcbiAgICBkZXN0aW5hdGlvbkJ1Y2tldDogSUJ1Y2tldCxcbiAgICBpbnZlbnRvcnlJZDogc3RyaW5nLFxuICAgIG9iamVjdHNQcmVmaXg/OiBzdHJpbmcsXG4gICAgZGVzdGluYXRpb25QcmVmaXg/OiBzdHJpbmcsXG4gICAgZGVzdGluYXRpb25BY2NvdW50Pzogc3RyaW5nLFxuICApOiBJbnZlbnRvcnkge1xuICAgIGNvbnN0IGJ1Y2tldE93bmVyID0gZGVzdGluYXRpb25BY2NvdW50ID8gYCR7ZGVzdGluYXRpb25BY2NvdW50fWAgOiBkZXN0aW5hdGlvbkFjY291bnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc3RpbmF0aW9uOiB7XG4gICAgICAgIGJ1Y2tldDogZGVzdGluYXRpb25CdWNrZXQsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAgICAgICAqIFJlcXVpcmVkIFMzIHByZWZpeCBmb3IgaW52ZW50b3J5IHJlcG9ydCBkZXN0aW5hdGlvbiBvcmdhbml6YXRpb24gZW5hYmxpbmcgc3lzdGVtYXRpYyBpbnZlbnRvcnkgZmlsZSBvcmdhbml6YXRpb24gYW5kIG1hbmFnZW1lbnQuIFByb3ZpZGVzIHRoZSBTMyBrZXkgcHJlZml4IGZvciBpbnZlbnRvcnkgcmVwb3J0IHN0b3JhZ2UgZW5hYmxpbmcgb3JnYW5pemVkIGludmVudG9yeSBkYXRhIG1hbmFnZW1lbnQgYW5kIGVmZmljaWVudCByZXRyaWV2YWwgb2YgaW52ZW50b3J5IHJlcG9ydHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFVzZSBjYXNlczogSW52ZW50b3J5IG9yZ2FuaXphdGlvbjsgUmVwb3J0IHN0b3JhZ2U7IERhdGEgbWFuYWdlbWVudDsgU3lzdGVtYXRpYyBmaWxlIG9yZ2FuaXphdGlvblxuICAgICAgICAgKlxuICAgICAgICAgKiBBV1M6IFMzIGludmVudG9yeSBjb25maWd1cmF0aW9uIGRlc3RpbmF0aW9uIHByZWZpeCBmb3IgaW52ZW50b3J5IHJlcG9ydCBvcmdhbml6YXRpb24gYW5kIHN0b3JhZ2VcbiAgICAgICAgICpcbiAgICAgICAgICogVmFsaWRhdGlvbjogTXVzdCBiZSB2YWxpZCBTMyBwcmVmaXggc3RyaW5nOyByZXF1aXJlZCBmb3IgaW52ZW50b3J5IHJlcG9ydCBkZXN0aW5hdGlvbiBvcmdhbml6YXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHByZWZpeDogTWRhYUJ1Y2tldC5mb3JtYXRTM1ByZWZpeChkZXN0aW5hdGlvblByZWZpeCksXG4gICAgICAgIGJ1Y2tldE93bmVyOiBidWNrZXRPd25lcixcbiAgICAgIH0sXG4gICAgICBmb3JtYXQ6IEludmVudG9yeUZvcm1hdC5QQVJRVUVULFxuICAgICAgZnJlcXVlbmN5OiBJbnZlbnRvcnlGcmVxdWVuY3kuREFJTFksXG4gICAgICBpbmNsdWRlT2JqZWN0VmVyc2lvbnM6IEludmVudG9yeU9iamVjdFZlcnNpb24uQUxMLFxuICAgICAgaW52ZW50b3J5SWQ6IGludmVudG9yeUlkLFxuICAgICAgb2JqZWN0c1ByZWZpeDogTWRhYUJ1Y2tldC5mb3JtYXRTM1ByZWZpeChvYmplY3RzUHJlZml4LCBmYWxzZSwgdHJ1ZSksXG4gICAgICBvcHRpb25hbEZpZWxkczogW1xuICAgICAgICAnU2l6ZScsXG4gICAgICAgICdMYXN0TW9kaWZpZWREYXRlJyxcbiAgICAgICAgJ1N0b3JhZ2VDbGFzcycsXG4gICAgICAgICdFVGFnJyxcbiAgICAgICAgJ0lzTXVsdGlwYXJ0VXBsb2FkZWQnLFxuICAgICAgICAnUmVwbGljYXRpb25TdGF0dXMnLFxuICAgICAgICAnRW5jcnlwdGlvblN0YXR1cycsXG4gICAgICAgICdPYmplY3RMb2NrUmV0YWluVW50aWxEYXRlJyxcbiAgICAgICAgJ09iamVjdExvY2tNb2RlJyxcbiAgICAgICAgJ09iamVjdExvY2tMZWdhbEhvbGRTdGF0dXMnLFxuICAgICAgICAnSW50ZWxsaWdlbnRUaWVyaW5nQWNjZXNzVGllcicsXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBHbHVlIHRhYmxlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IGludmVudG9yeSBkYXRhIGdlbmVyYXRlZCBieSBhbiBTMyBJbnZlbnRvcnkgY29uZmlnXG4gICAqIEBwYXJhbSBzY29wZSBTdGFjayBpbiB3aGljaCB0aGUgdGFibGUgd2lsbCBiZSBjcmVhdGVkXG4gICAqIEBwYXJhbSB0YWJsZU5hbWVQcmVmaXggV2lsbCBiZSB1c2VkIHRvIHByZWZpeCB0aGUgdGFibGUgbmFtZS5cbiAgICogQHBhcmFtIGxvY2F0aW9uQnVja2V0TmFtZSBUaGUgYnVja2V0IHdoZXJlIHRoZSBpbnZlbnRvcnkgZGF0YSBpcyBzdG9yZWQuXG4gICAqIEBwYXJhbSBpbnZlbnRvcnlCdWNrZXQgVGhlIGJ1Y2tldCBmb3Igd2hpY2ggaW52ZW50b3J5IGRhdGEgaGFzIGJlZW4gZ2VuZXJhdGVkXG4gICAqIEBwYXJhbSBkYXRhYmFzZSBUaGUgR2x1ZSBkYXRhYmFzZSBpbiB3aGljaCB0aGUgdGFibGUgd2lsbCBiZSBjcmVhdGVkXG4gICAqIEBwYXJhbSBpbnZlbnRvcnlOYW1lIFRoZSBuYW1lIG9mIHRoZSBTMyBJbnZlbnRvcnkgY29uZmlnXG4gICAqIEBwYXJhbSBsb2NhdGlvblByZWZpeCBUaGUgUzMgUHJlZml4IG9uIHRoZSBsb2NhdGlvbiBidWNrZXQgd2hlcmUgdGhlIGludmVudG9yeSBpcyBzdG9yZWQuXG4gICAqIEByZXR1cm5zIEEgR2x1ZSB0YWJsZSB3aGljaCBjYW4gYmUgdXNlZCB0byBxdWVyeSBTMyBpbnZlbnRvcnkgZGF0YSBpbiBhbiBTMyBidWNrZXQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUdsdWVJbnZUYWJsZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGNhdGFsb2dJZDogc3RyaW5nLFxuICAgIHRhYmxlTmFtZVByZWZpeDogc3RyaW5nLFxuICAgIGRhdGFiYXNlOiBEYXRhYmFzZSxcbiAgICBsb2NhdGlvbkJ1Y2tldE5hbWU6IHN0cmluZyxcbiAgICBidWNrZXRJbnZlbnRvcmllczogQnVja2V0SW52ZW50b3J5W10sXG4gICAgbG9jYXRpb25QcmVmaXg/OiBzdHJpbmcsXG4gICk6IENmblRhYmxlIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IGxvY2F0aW9uUHJlZml4XG4gICAgICA/IGBzMzovLyR7bG9jYXRpb25CdWNrZXROYW1lfS8ke01kYWFCdWNrZXQuZm9ybWF0UzNQcmVmaXgobG9jYXRpb25QcmVmaXgpfS9gXG4gICAgICA6IGBzMzovLyR7bG9jYXRpb25CdWNrZXROYW1lfS9gO1xuICAgIGNvbnN0IHRhYmxlSW5wdXQgPSB7XG4gICAgICBuYW1lOiBgJHt0YWJsZU5hbWVQcmVmaXh9X2ludmAucmVwbGFjZSgvLS9naSwgJ18nKSxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgRVhURVJOQUw6ICdUUlVFJyxcbiAgICAgICAgJ3Byb2plY3Rpb24uZW5hYmxlZCc6ICd0cnVlJyxcbiAgICAgICAgJ3Byb2plY3Rpb24uZHQudHlwZSc6ICdkYXRlJyxcbiAgICAgICAgJ3Byb2plY3Rpb24uZHQucmFuZ2UnOiAnMjAyMi0wMS0wMS0wMC0wMCxOT1cnLFxuICAgICAgICAncHJvamVjdGlvbi5kdC5mb3JtYXQnOiAneXl5eS1NTS1kZC1ISC1tbScsXG4gICAgICAgICdwcm9qZWN0aW9uLmR0LmludGVydmFsJzogJzEnLFxuICAgICAgICAncHJvamVjdGlvbi5kdC5pbnRlcnZhbC51bml0JzogJ0hPVVJTJyxcbiAgICAgICAgJ3Byb2plY3Rpb24uYnVja2V0X2ludmVudG9yeS50eXBlJzogJ2VudW0nLFxuICAgICAgICAncHJvamVjdGlvbi5idWNrZXRfaW52ZW50b3J5LnZhbHVlcyc6IGJ1Y2tldEludmVudG9yaWVzXG4gICAgICAgICAgLm1hcCh4ID0+IGAke3guYnVja2V0TmFtZX0vJHt4LmludmVudG9yeU5hbWV9YClcbiAgICAgICAgICAuam9pbignLCcpLFxuICAgICAgICAnc3RvcmFnZS5sb2NhdGlvbi50ZW1wbGF0ZSc6IGxvY2F0aW9uICsgJyR7YnVja2V0X2ludmVudG9yeX0vaGl2ZS9kdD0ke2R0fScsXG4gICAgICB9LFxuICAgICAgdGFibGVUeXBlOiAnRVhURVJOQUxfVEFCTEUnLFxuICAgICAgcGFydGl0aW9uS2V5czogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2J1Y2tldF9pbnZlbnRvcnknLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2R0JyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBzdG9yYWdlRGVzY3JpcHRvcjoge1xuICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2J1Y2tldCcsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndmVyc2lvbl9pZCcsXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdpc19sYXRlc3QnLFxuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2lzX2RlbGV0ZV9tYXJrZXInLFxuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3NpemUnLFxuICAgICAgICAgICAgdHlwZTogJ2JpZ2ludCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnbGFzdF9tb2RpZmllZF9kYXRlJyxcbiAgICAgICAgICAgIHR5cGU6ICd0aW1lc3RhbXAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2VfdGFnJyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3N0b3JhZ2VfY2xhc3MnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnaXNfbXVsdGlwYXJ0X3VwbG9hZGVkJyxcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdyZXBsaWNhdGlvbl9zdGF0dXMnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnZW5jcnlwdGlvbl9zdGF0dXMnLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnaW50ZWxsaWdlbnRfdGllcmluZ190aWVyJyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gLFxuICAgICAgICAgIC8vIHtcbiAgICAgICAgICAvLyAgICAgbmFtZTogXCJvYmplY3RfbG9ja19yZXRhaW5fdW50aWxfZGF0ZVwiLFxuICAgICAgICAgIC8vICAgICB0eXBlOiBcInRpbWVzdGFtcFwiXG4gICAgICAgICAgLy8gfSxcbiAgICAgICAgICAvLyB7XG4gICAgICAgICAgLy8gICAgIG5hbWU6IFwib2JqZWN0X2xvY2tfbW9kZVwiLFxuICAgICAgICAgIC8vICAgICB0eXBlOiBcInN0cmluZ1wiXG4gICAgICAgICAgLy8gfSxcbiAgICAgICAgICAvLyB7XG4gICAgICAgICAgLy8gICAgIG5hbWU6IFwib2JqZWN0X2xvY2tfbGVnYWxfaG9sZF9zdGF0dXNcIixcbiAgICAgICAgICAvLyAgICAgdHlwZTogXCJzdHJpbmdcIlxuICAgICAgICAgIC8vIH1cbiAgICAgICAgXSxcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICBpbnB1dEZvcm1hdDogJ29yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwuaW8uU3ltbGlua1RleHRJbnB1dEZvcm1hdCcsXG4gICAgICAgIG91dHB1dEZvcm1hdDogJ29yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwuaW8uSGl2ZUlnbm9yZUtleVRleHRPdXRwdXRGb3JtYXQnLFxuICAgICAgICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgICAgICAgbnVtYmVyT2ZCdWNrZXRzOiAtMSxcbiAgICAgICAgc2VyZGVJbmZvOiB7XG4gICAgICAgICAgc2VyaWFsaXphdGlvbkxpYnJhcnk6ICdvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmlvLnBhcnF1ZXQuc2VyZGUuUGFycXVldEhpdmVTZXJEZScsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgJ3NlcmlhbGl6YXRpb24uZm9ybWF0JzogJzEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB0YWJsZVByb3BzOiBDZm5UYWJsZVByb3BzID0ge1xuICAgICAgY2F0YWxvZ0lkOiBjYXRhbG9nSWQsXG4gICAgICBkYXRhYmFzZU5hbWU6IGRhdGFiYXNlLmRhdGFiYXNlTmFtZSxcbiAgICAgIHRhYmxlSW5wdXQ6IHRhYmxlSW5wdXQsXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IENmblRhYmxlKHNjb3BlLCBgaW52LXRhYmxlLSR7dGFibGVOYW1lUHJlZml4fWAsIHRhYmxlUHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gZ2VuZXJhdGUgYW4gUzMgQnVja2V0IFBvbGljeSBTdGF0ZW1lbnQgYWxsb3dpbmcgUzMgc2VydmljZSB0byB3cml0ZSBpbnZlbnRvcmllcyB0byBhIGJ1Y2tldC5cbiAgICogQHBhcmFtIHNvdXJjZUJ1Y2tldEFybiBUaGUgYnVja2V0IGFybiBmb3Igd2hpY2ggaW52ZW50b3J5IGRhdGEgaXMgYmVpbmcgcHJvZHVjZWRcbiAgICogQHBhcmFtIGJ1Y2tldEFybiAgVGhlIGJ1Y2tldCBhcm4gd2hlcmUgaW52ZW50b3J5IHdpbGwgYmUgc3RvcmVkXG4gICAqIEBwYXJhbSBzcmNBY2NvdW50IFRoZSBhY2NvdW50IHdoaWNoIG93bnMgdGhlIHNvdXJjZSBidWNrZXQgZnJvbSB3aGljaCBpbnZlbnRvcnkgaXMgYmVpbmcgcHJvZHVjZWQuXG4gICAqIEBwYXJhbSBpbnZlbnRvcnlQcmVmaXggVGhlIHByZWZpeCBvbiB0aGUgZGVzdGluYXRpb24gYnVja2V0IHdoZXJlIGludmVudG9yeSBkYXRhIHdpbGwgYmUgc3RvcmVkLlxuICAgKiBAcmV0dXJucyBBIHBvbGljeSBzdGF0ZW1lbnQgd2hpY2ggcGVybWl0cyB0aGUgUzMgc2VydmljZSBwcmluY2lwYWwgdG8gd3JpdGUgaW52ZW50b3J5IGZvciB0aGUgc291cmNlIGJ1Y2tldC9hY2NvdW50IHRvIHRoZSBkZXN0aW5hdGlvbiBidWNrZXQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUludmVudG9yeUJ1Y2tldFBvbGljeVN0YXRlbWVudChcbiAgICBidWNrZXRBcm46IHN0cmluZyxcbiAgICBzcmNBY2NvdW50OiBzdHJpbmcsXG4gICAgc291cmNlQnVja2V0QXJuPzogc3RyaW5nLFxuICAgIGludmVudG9yeVByZWZpeD86IHN0cmluZyxcbiAgKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IGludmVudG9yeVByZWZpeFxuICAgICAgPyBgJHtidWNrZXRBcm59LyR7TWRhYUJ1Y2tldC5mb3JtYXRTM1ByZWZpeChpbnZlbnRvcnlQcmVmaXgpfS8qYFxuICAgICAgOiBgJHtidWNrZXRBcm59LypgO1xuICAgIGNvbnN0IGFsbG93UzNJbnZlbnRvcnkgPSBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0FsbG93UzNJbnZlbnRvcnknLFxuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICByZXNvdXJjZXM6IFtyZXNvdXJjZV0sXG4gICAgICBhY3Rpb25zOiBbJ3MzOlB1dE9iamVjdCddLFxuICAgIH0pO1xuICAgIGFsbG93UzNJbnZlbnRvcnkuYWRkQ29uZGl0aW9uKCdTdHJpbmdFcXVhbHMnLCB7XG4gICAgICAnYXdzOlNvdXJjZUFjY291bnQnOiBzcmNBY2NvdW50LFxuICAgICAgJ3MzOngtYW16LWFjbCc6ICdidWNrZXQtb3duZXItZnVsbC1jb250cm9sJyxcbiAgICB9KTtcbiAgICBpZiAoc291cmNlQnVja2V0QXJuKSB7XG4gICAgICBhbGxvd1MzSW52ZW50b3J5LmFkZENvbmRpdGlvbignQXJuTGlrZScsIHtcbiAgICAgICAgJ2F3czpTb3VyY2VBcm4nOiBzb3VyY2VCdWNrZXRBcm4sXG4gICAgICB9KTtcbiAgICB9XG4gICAgYWxsb3dTM0ludmVudG9yeS5hZGRTZXJ2aWNlUHJpbmNpcGFsKCdzMy5hbWF6b25hd3MuY29tJyk7XG4gICAgcmV0dXJuIGFsbG93UzNJbnZlbnRvcnk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@aws-mdaa/s3-inventory-helper",
|
|
3
|
-
"description": "MDAA s3-inventory-helper utility",
|
|
4
|
-
"author": {
|
|
5
|
-
"name": "Amazon Web Services",
|
|
6
|
-
"url": "https://aws.amazon.com/solutions"
|
|
7
|
-
},
|
|
8
|
-
"version": "1.4.0",
|
|
9
|
-
"main": "lib/index.js",
|
|
10
|
-
"types": "lib/index.d.ts",
|
|
11
|
-
"license": "Apache-2.0",
|
|
12
|
-
"scripts": {
|
|
13
|
-
"build": "tsc",
|
|
14
|
-
"watch": "tsc -w",
|
|
15
|
-
"test": "jest --passWithNoTests --coverage",
|
|
16
|
-
"lint": "eslint --max-warnings 0 -c ../../../.eslintrc.json '**/*.{ts,tsx}' --ignore-pattern 'dist/*' --ignore-pattern 'node_modules/*' --ignore-pattern \"*.d.ts\" ",
|
|
17
|
-
"test-coverage": "jest --passWithNoTests --coverage"
|
|
18
|
-
},
|
|
19
|
-
"devDependencies": {
|
|
20
|
-
"@types/jest": "29.5.14",
|
|
21
|
-
"@types/node": "22.9.0",
|
|
22
|
-
"@types/prettier": "2.6.0",
|
|
23
|
-
"jest": "29.7.0",
|
|
24
|
-
"ts-jest": "29.4.6",
|
|
25
|
-
"ts-node": "10.9.2",
|
|
26
|
-
"typescript": "5.9.3",
|
|
27
|
-
"typescript-json-schema": "0.67.1"
|
|
28
|
-
},
|
|
29
|
-
"dependencies": {
|
|
30
|
-
"@aws-cdk/aws-glue-alpha": "2.220.0-alpha.0",
|
|
31
|
-
"@aws-mdaa/naming": "1.4.0",
|
|
32
|
-
"@aws-mdaa/s3-constructs": "1.4.0",
|
|
33
|
-
"aws-cdk-lib": "2.220.0",
|
|
34
|
-
"cdk-nag": "2.37.55",
|
|
35
|
-
"constructs": "10.0.96"
|
|
36
|
-
},
|
|
37
|
-
"gitHead": "8b49a2b371014baec046605ffdbfe38951099c31",
|
|
38
|
-
"repository": {
|
|
39
|
-
"type": "git",
|
|
40
|
-
"url": "https://github.com/aws/modern-data-architecture-accelerator"
|
|
41
|
-
}
|
|
42
|
-
}
|