@trautonen/cdk-dns-validated-certificate 0.0.52 → 0.1.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 +90 -73
- package/API.md +129 -65
- package/README.md +31 -4
- package/assets/certificate-requestor.lambda/index.js +116 -37
- package/assets/certificate-requestor.lambda/index.js.map +2 -2
- package/lib/certificate-requestor.lambda.d.ts +8 -4
- package/lib/certificate-requestor.lambda.js +75 -33
- package/lib/dns-validated-certificate.d.ts +73 -40
- package/lib/dns-validated-certificate.js +73 -37
- package/lib/utils.d.ts +4 -0
- package/lib/utils.js +33 -2
- package/package.json +2 -2
|
@@ -21,32 +21,58 @@ const CERTTIFICATE_RESOURCE_TYPE = 'AWS::CertificateManager::Certificate';
|
|
|
21
21
|
* Please note that this construct does not support alternative names yet as it would require domain to role mapping.
|
|
22
22
|
*
|
|
23
23
|
* @example
|
|
24
|
-
* //
|
|
24
|
+
* // ### Cross-region certificate validation
|
|
25
25
|
* // hosted zone managed by the CDK application
|
|
26
26
|
* const hostedZone: route53.IHostedZone = ...
|
|
27
27
|
* // no separate validation role is needed
|
|
28
28
|
* const certificate = new DnsValidatedCertificate(this, 'CrossRegionCertificate', {
|
|
29
|
-
* hostedZone: hostedZone,
|
|
30
29
|
* domainName: 'example.com', // must be compatible with the hosted zone
|
|
30
|
+
* validationHostedZones: [{ // hosted zone used with the execution role's permissions
|
|
31
|
+
* hostedZone: hostedZone
|
|
32
|
+
* }],
|
|
31
33
|
* certificateRegion: 'us-east-1' // used by for example CloudFront
|
|
32
34
|
* })
|
|
33
|
-
* //
|
|
35
|
+
* // ### Cross-account certificate validation
|
|
34
36
|
* // external hosted zone
|
|
35
37
|
* const hostedZone: route53.IHostedZone =
|
|
36
38
|
* route53.HostedZone.fromHostedZoneAttributes(this, 'HostedZone', {
|
|
37
39
|
* hostedZoneId: 'Z532DGDEDFS123456789',
|
|
38
40
|
* zoneName: 'example.com'
|
|
39
41
|
* })
|
|
40
|
-
* // validation role
|
|
42
|
+
* // validation role in the same account as the hosted zone
|
|
41
43
|
* const roleArn = 'arn:aws:iam::123456789:role/ChangeDnsRecordsRole'
|
|
42
44
|
* const externalId = 'domain-assume'
|
|
43
45
|
* const validationRole: iam.IRole =
|
|
44
46
|
* iam.Role.fromRoleArn(this, 'ValidationRole', roleArn)
|
|
45
47
|
* const certificate = new DnsValidatedCertificate(this, 'CrossAccountCertificate', {
|
|
46
|
-
* hostedZone: hostedZone,
|
|
47
48
|
* domainName: 'example.com',
|
|
48
|
-
*
|
|
49
|
-
|
|
49
|
+
* validationHostedZones: [{
|
|
50
|
+
* hostedZone: hostedZone,
|
|
51
|
+
* validationRole: validationRole,
|
|
52
|
+
* validationExternalId: externalId
|
|
53
|
+
* }]
|
|
54
|
+
* })
|
|
55
|
+
* // ### Cross-account alternative name validation
|
|
56
|
+
* // example.com is validated on same account against managed hosted zone
|
|
57
|
+
* // and secondary.com is validated against external hosted zone on other account
|
|
58
|
+
* const hostedZoneForMain: route53.IHostedZone = ...
|
|
59
|
+
* const hostedZoneForAlternative: route53.IHostedZone =
|
|
60
|
+
* route53.HostedZone.fromHostedZoneAttributes(this, 'SecondaryHostedZone', {
|
|
61
|
+
* hostedZoneId: 'Z532DGDEDFS123456789',
|
|
62
|
+
* zoneName: 'secondary.com'
|
|
63
|
+
* })
|
|
64
|
+
* const certificate = new DnsValidatedCertificate(this, 'CrossAccountCertificate', {
|
|
65
|
+
* domainName: 'example.com',
|
|
66
|
+
* alternativeDomainNames: ['secondary.com'],
|
|
67
|
+
* validationHostedZones: [{
|
|
68
|
+
* hostedZone: hostedZoneForMain
|
|
69
|
+
* },{
|
|
70
|
+
* hostedZone: hostedZoneForAlternative,
|
|
71
|
+
* validationRole: iam.Role.fromRoleArn(
|
|
72
|
+
* this, 'SecondaryValidationRole', 'arn:aws:iam::123456789:role/ChangeDnsRecordsRole'
|
|
73
|
+
* ),
|
|
74
|
+
* validationExternalId: 'domain-assume'
|
|
75
|
+
* }]
|
|
50
76
|
* })
|
|
51
77
|
*
|
|
52
78
|
* @resource Custom::DnsValidatedCertificate
|
|
@@ -62,9 +88,9 @@ class DnsValidatedCertificate extends cdk.Resource {
|
|
|
62
88
|
*/
|
|
63
89
|
constructor(scope, id, props) {
|
|
64
90
|
super(scope, id);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
91
|
+
const domainName = this.normalizeDomainName(props.domainName);
|
|
92
|
+
const alternativeDomainNames = props.alternativeDomainNames?.map((alternativeDomainName) => this.normalizeDomainName(alternativeDomainName));
|
|
93
|
+
const allDomains = [domainName, ...(alternativeDomainNames ?? [])];
|
|
68
94
|
this.certificateRegion = props.certificateRegion ?? this.stack.region;
|
|
69
95
|
this.tags = new cdk.TagManager(cdk.TagType.MAP, CERTTIFICATE_RESOURCE_TYPE);
|
|
70
96
|
this.removalPolicy = props.removalPolicy ?? cdk.RemovalPolicy.DESTROY;
|
|
@@ -83,21 +109,23 @@ class DnsValidatedCertificate extends cdk.Resource {
|
|
|
83
109
|
],
|
|
84
110
|
resources: ['*'],
|
|
85
111
|
}));
|
|
86
|
-
|
|
112
|
+
const hostedZonesWithRole = props.validationHostedZones.filter((zone) => zone.validationRole !== undefined);
|
|
113
|
+
const hostedZonesWithoutRole = props.validationHostedZones.filter((zone) => zone.validationRole === undefined);
|
|
114
|
+
hostedZonesWithRole.forEach((zone) => {
|
|
87
115
|
requestorFunction.addToRolePolicy(new iam.PolicyStatement({
|
|
88
116
|
effect: iam.Effect.ALLOW,
|
|
89
117
|
actions: ['sts:AssumeRole'],
|
|
90
|
-
resources: [
|
|
118
|
+
resources: [zone.validationRole.roleArn],
|
|
91
119
|
}));
|
|
92
|
-
}
|
|
93
|
-
|
|
120
|
+
});
|
|
121
|
+
hostedZonesWithoutRole.forEach((zone) => {
|
|
94
122
|
requestorFunction.addToRolePolicy(new iam.PolicyStatement({
|
|
95
123
|
actions: ['route53:GetChange'],
|
|
96
124
|
resources: ['*'],
|
|
97
125
|
}));
|
|
98
126
|
requestorFunction.addToRolePolicy(new iam.PolicyStatement({
|
|
99
127
|
actions: ['route53:ChangeResourceRecordSets'],
|
|
100
|
-
resources: [`arn:aws:route53:::hostedzone/${this.hostedZoneId}`],
|
|
128
|
+
resources: [`arn:aws:route53:::hostedzone/${this.normalizeHostedZoneId(zone.hostedZone.hostedZoneId)}`],
|
|
101
129
|
conditions: {
|
|
102
130
|
'ForAllValues:StringEquals': {
|
|
103
131
|
'route53:ChangeResourceRecordSetsRecordTypes': ['CNAME'],
|
|
@@ -105,22 +133,29 @@ class DnsValidatedCertificate extends cdk.Resource {
|
|
|
105
133
|
},
|
|
106
134
|
'ForAllValues:StringLike': {
|
|
107
135
|
'route53:ChangeResourceRecordSetsNormalizedRecordNames': [
|
|
108
|
-
this.wildcardDomainName('MainDomainWildcard', this.
|
|
136
|
+
this.wildcardDomainName('MainDomainWildcard', this.normalizeDomainName(zone.hostedZone.zoneName)),
|
|
109
137
|
],
|
|
110
138
|
},
|
|
111
139
|
},
|
|
112
140
|
}));
|
|
113
|
-
}
|
|
141
|
+
});
|
|
114
142
|
const requestorProvider = new custom_resources.Provider(this, 'RequestorProvider', {
|
|
115
143
|
onEventHandler: requestorFunction,
|
|
116
144
|
});
|
|
145
|
+
const validationHostedZones = props.validationHostedZones.map((zone) => {
|
|
146
|
+
const properties = {
|
|
147
|
+
DomainName: this.normalizeDomainName(zone.hostedZone.zoneName),
|
|
148
|
+
HostedZoneId: this.normalizeHostedZoneId(zone.hostedZone.hostedZoneId),
|
|
149
|
+
ValidationRoleArn: zone.validationRole?.roleArn,
|
|
150
|
+
ValidationExternalId: zone.validationExternalId,
|
|
151
|
+
};
|
|
152
|
+
return [properties.DomainName, properties];
|
|
153
|
+
});
|
|
117
154
|
const properties = {
|
|
118
|
-
|
|
119
|
-
|
|
155
|
+
DomainName: domainName,
|
|
156
|
+
AlternativeDomainNames: alternativeDomainNames,
|
|
157
|
+
ValidationHostedZones: Object.fromEntries(validationHostedZones),
|
|
120
158
|
CertificateRegion: this.certificateRegion,
|
|
121
|
-
SubjectAlternativeNames: undefined,
|
|
122
|
-
ValidationRoleArn: props.validationRole?.roleArn,
|
|
123
|
-
ValidationExternalId: props.validationExternalId,
|
|
124
159
|
CleanupValidationRecords: (0, utils_1.booleanToString)(props.cleanupValidationRecords ?? true),
|
|
125
160
|
TransparencyLoggingEnabled: (0, utils_1.booleanToString)(props.transparencyLoggingEnabled ?? true),
|
|
126
161
|
Tags: cdk.Lazy.any({ produce: () => this.tags.renderTags() }),
|
|
@@ -132,7 +167,9 @@ class DnsValidatedCertificate extends cdk.Resource {
|
|
|
132
167
|
properties,
|
|
133
168
|
});
|
|
134
169
|
this.certificateArn = certificate.getAttString('Arn');
|
|
135
|
-
this.node.addValidation({
|
|
170
|
+
this.node.addValidation({
|
|
171
|
+
validate: () => this.validateDomainsToHostedZones(allDomains, validationHostedZones.map(([zoneName, _]) => zoneName)),
|
|
172
|
+
});
|
|
136
173
|
}
|
|
137
174
|
metricDaysToExpiry(props) {
|
|
138
175
|
return new cloudwatch.Metric({
|
|
@@ -152,16 +189,13 @@ class DnsValidatedCertificate extends cdk.Resource {
|
|
|
152
189
|
if (cdk.Token.isUnresolved(domainName)) {
|
|
153
190
|
return domainName;
|
|
154
191
|
}
|
|
155
|
-
|
|
156
|
-
return domainName.slice(0, -1);
|
|
157
|
-
}
|
|
158
|
-
return domainName;
|
|
192
|
+
return (0, utils_1.cleanDomainName)(domainName);
|
|
159
193
|
}
|
|
160
194
|
normalizeHostedZoneId(hostedZoneId) {
|
|
161
195
|
if (cdk.Token.isUnresolved(hostedZoneId)) {
|
|
162
196
|
return hostedZoneId;
|
|
163
197
|
}
|
|
164
|
-
return
|
|
198
|
+
return (0, utils_1.cleanHostedZoneId)(hostedZoneId);
|
|
165
199
|
}
|
|
166
200
|
wildcardDomainName(id, domainName) {
|
|
167
201
|
const parts = cdk.Fn.split('.', domainName);
|
|
@@ -171,17 +205,19 @@ class DnsValidatedCertificate extends cdk.Resource {
|
|
|
171
205
|
});
|
|
172
206
|
return cdk.Fn.conditionIf(isWildcard.logicalId, domainName, `*.${domainName}`).toString();
|
|
173
207
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
208
|
+
validateDomainsToHostedZones(domainNames, zoneNames) {
|
|
209
|
+
const errors = [];
|
|
210
|
+
for (const domainName of domainNames) {
|
|
211
|
+
const resolvableDomainName = !cdk.Token.isUnresolved(domainName);
|
|
212
|
+
const resolvableZoneNames = !zoneNames.some((zoneName) => cdk.Token.isUnresolved(zoneName));
|
|
213
|
+
if (resolvableDomainName && resolvableZoneNames && !zoneNames.some((zoneName) => domainName.endsWith(zoneName))) {
|
|
214
|
+
errors.push(`Domain ${domainName} is not provided with authoritative hosted zone`);
|
|
215
|
+
}
|
|
180
216
|
}
|
|
181
|
-
return
|
|
217
|
+
return errors;
|
|
182
218
|
}
|
|
183
219
|
}
|
|
184
220
|
_a = JSII_RTTI_SYMBOL_1;
|
|
185
|
-
DnsValidatedCertificate[_a] = { fqn: "@trautonen/cdk-dns-validated-certificate.DnsValidatedCertificate", version: "0.0
|
|
221
|
+
DnsValidatedCertificate[_a] = { fqn: "@trautonen/cdk-dns-validated-certificate.DnsValidatedCertificate", version: "0.1.0" };
|
|
186
222
|
exports.DnsValidatedCertificate = DnsValidatedCertificate;
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXZhbGlkYXRlZC1jZXJ0aWZpY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kbnMtdmFsaWRhdGVkLWNlcnRpZmljYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQWtDO0FBRWxDLHlEQUF3RDtBQUN4RCwyQ0FBMEM7QUFDMUMsaURBQWdEO0FBRWhELGlFQUFnRTtBQUVoRSxxRkFBK0U7QUFFL0UsbUNBQXlDO0FBa0d6QyxNQUFNLDhCQUE4QixHQUFHLGlDQUFpQyxDQUFBO0FBQ3hFLE1BQU0sMEJBQTBCLEdBQUcsc0NBQXNDLENBQUE7QUFFekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDRztBQUNILE1BQWEsdUJBQXdCLFNBQVEsR0FBRyxDQUFDLFFBQVE7SUFzQnZEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBbUM7UUFDM0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDNUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUM3RSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3pFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUE7UUFDckUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUMs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Q0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMzRixDQUFDO0lBRU8sMEJBQTBCLENBQUMsVUFBa0IsRUFBRSxjQUFzQjtRQUMzRSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ2hGLE9BQU8sRUFBRSxDQUFBO1NBQ1Y7UUFDRCxJQUFJLFVBQVUsS0FBSyxjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsRUFBRTtZQUMvRSxPQUFPLENBQUMsZUFBZSxjQUFjLHFEQUFxRCxVQUFVLEVBQUUsQ0FBQyxDQUFBO1NBQ3hHO1FBQ0QsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDOzs7O0FBM0tVLDBEQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYidcbmltcG9ydCAqIGFzIGNlcnRpZmljYXRlbWFuYWdlciBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJ1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCdcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJ1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnXG5pbXBvcnQgKiBhcyByb3V0ZTUzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJ1xuaW1wb3J0ICogYXMgY3VzdG9tX3Jlc291cmNlcyBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJ1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cydcbmltcG9ydCB7IENlcnRpZmljYXRlUmVxdWVzdG9yRnVuY3Rpb24gfSBmcm9tICcuL2NlcnRpZmljYXRlLXJlcXVlc3Rvci1mdW5jdGlvbidcbmltcG9ydCB7IFByb3BlcnRpZXMgfSBmcm9tICcuL2NlcnRpZmljYXRlLXJlcXVlc3Rvci5sYW1iZGEnXG5pbXBvcnQgeyBib29sZWFuVG9TdHJpbmcgfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIERuc1ZhbGlkYXRlZENlcnRpZmljYXRlUHJvcHMge1xuICAvKipcbiAgICogRnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIHRvIHJlcXVlc3QgYSBjZXJ0aWZpY2F0ZSBmb3IuXG4gICAqXG4gICAqIE1heSBjb250YWluIHdpbGRjYXJkcywgc3VjaCBhcyBgYCouZG9tYWluLmNvbWBgLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEhvc3RlZCB6b25lIHRvIHVzZSBmb3IgRE5TIHZhbGlkYXRpb24uXG4gICAqXG4gICAqIElmIHRoZSBob3N0ZWQgem9uZSBpcyBub3QgbWFuYWdlZCBieSB0aGUgQ0RLIGFwcGxpY2F0aW9uLCBpdCBuZWVkcyB0byBiZSBwcm92aWRlZCB2aWFcbiAgICogYGBIb3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcygpYGAuXG4gICAqL1xuICByZWFkb25seSBob3N0ZWRab25lOiByb3V0ZTUzLklIb3N0ZWRab25lXG5cbiAgLyoqXG4gICAqIEFXUyByZWdpb24gd2hlcmUgdGhlIGNlcnRpZmljYXRlIGlzIGRlcGxveWVkLlxuICAgKlxuICAgKiBZb3Ugc2hvdWxkIHVzZSB0aGUgZGVmYXVsdCBgYENlcnRpZmljYXRlYGAgY29uc3RydWN0IGluc3RlYWQgaWYgdGhlIHJlZ2lvbiBpcyBzYW1lIGFzIHRoZSBzdGFjaydzIGFuZCB0aGUgaG9zdGVkXG4gICAqIHpvbmUgaXMgaW4gdGhlIHNhbWUgYWNjb3VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBTYW1lIHJlZ2lvbiBhcyB0aGUgc3RhY2suXG4gICAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZVJlZ2lvbj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSB0aGF0IGlzIHVzZWQgZm9yIHRoZSBjdXN0b20gcmVzb3VyY2UgTGFtYmRhIGV4ZWN1dGlvbi5cbiAgICpcbiAgICogVGhlIHJvbGUgaXMgZ2l2ZW4gcGVybWlzc2lvbnMgdG8gcmVxdWVzdCBjZXJ0aWZpY2F0ZXMgZnJvbSBBQ00uIElmIHRoZSBgYHZhbGlkYXRpb25Sb2xlYGAgaXMgcHJvdmlkZWQsIHRoaXMgcm9sZVxuICAgKiBpcyBhbHNvIGdpdmVuIHBlcm1pc3Npb24gdG8gYXNzdW1lIHRoZSBgYHZhbGlkYXRpb25Sb2xlYGAuIE90aGVyd2lzZSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGhvc3RlZCB6b25lIGlzIGluIHNhbWVcbiAgICogYWNjb3VudCBhbmQgdGhlIGV4ZWN1dGlvbiByb2xlIGlzIGdpdmVuIHBlcm1pc3Npb25zIHRvIGNoYW5nZSBETlMgcmVjb3JkcyBmb3IgdGhlIGdpdmVuIGBgZG9tYWluTmFtZWBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIExhbWJkYSBjcmVhdGVzIGEgZGVmYXVsdCBleGVjdXRpb24gcm9sZS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVJlc291cmNlUm9sZT86IGlhbS5JUm9sZVxuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSB0aGF0IGlzIGFzc3VtZWQgZm9yIEROUyByZWNvcmQgY2hhbmdlcyBmb3IgY2VydGlmaWNhdGUgdmFsaWRhdGlvbi5cbiAgICpcbiAgICogVGhpcyByb2xlIHNob3VsZCBleGlzdCBpbiB0aGUgc2FtZSBhY2NvdW50IGFzIHRoZSBob3N0ZWQgem9uZSBhbmQgaW5jbHVkZSBwZXJtaXNzaW9ucyB0byBjaGFuZ2UgdGhlIEROUyByZWNvcmRzXG4gICAqIGZvciB0aGUgZ2l2ZW4gYGBob3N0ZWRab25lYGAuIFRoZSBgYGN1c3RvbVJlc291cmNlUm9sZWBgIG9yIHRoZSBkZWZhdWx0IGV4ZWN1dGlvbiByb2xlIGlzIGdpdmVuIHBlcm1pc3Npb24gdG9cbiAgICogYXNzdW1lIHRoaXMgcm9sZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBzZXBhcmF0ZSByb2xlIGZvciBETlMgcmVjb3JkIGNoYW5nZXMuIFRoZSBnaXZlbiBjdXN0b21SZXNvdXJjZVJvbGUgb3IgdGhlIGRlZmF1bHQgcm9sZSBpcyB1c2VkXG4gICAqIGZvciBETlMgcmVjb3JkIGNoYW5nZXMuXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0aW9uUm9sZT86IGlhbS5JUm9sZVxuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBpZCBmb3IgYGB2YWxpZGF0aW9uUm9sZWBgIHJvbGUgYXNzdW1lIHZlcmlmaWNhdGlvbi5cbiAgICpcbiAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gYGB2YWxpZGF0aW9uUm9sZWBgIGlzIGdpdmVuIGFuZCB0aGUgcm9sZSBleHBlY3RzIGFuIGV4dGVybmFsIGlkIHByb3ZpZGVkIG9uIGFzc3VtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBleHRlcm5hbCBpZCBwcm92aWRlZCBkdXJpbmcgYXNzdW1lXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0aW9uRXh0ZXJuYWxJZD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBjbGVhbmluZyBvZiB2YWxpZGF0aW9uIEROUyByZWNvcmRzIGZyb20gdGhlIGhvc3RlZCB6b25lLlxuICAgKlxuICAgKiBJZiB0aGVyZSdzIG11bHRpcGxlIGNlcnRpZmljYXRlcyBjcmVhdGVkIGZvciBzYW1lIGRvbWFpbiwgaXQgaXMgcG9zc2libGUgdG8gZW5jb3V0ZXIgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBzb21lXG4gICAqIGNlcnRpZmljYXRlIGlzIHJlbW92ZWQgYW5kIGFub3RoZXIgY2VydGlmaWNhdGUgd291bGQgbmVlZCB0aGUgc2FtZSB2YWxpZGF0aW9uIHJlY29yZC4gUHJlZmVyIHNpbmdsZSBjZXJ0aWZpY2F0ZVxuICAgKiBmb3IgYSBkb21haW4gb3Igc2V0IHRoaXMgdG8gZmFsc2UgYW5kIGNsZWFudXAgcmVjb3JkcyBtYW51YWxseSB3aGVuIG5vdCBuZWVkZWQgYW55bW9yZS4gSWYgeW91IGNoYW5nZSB0aGlzXG4gICAqIHByb3BlcnR5IGFmdGVyIGNyZWF0aW9uLCBhIG5ldyBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHJlcXVlc3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2xlYW51cFZhbGlkYXRpb25SZWNvcmRzPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0cmFuc3BhcmVuY3kgbG9nZ2luZyBmb3IgdGhpcyBjZXJ0aWZpY2F0ZS5cbiAgICpcbiAgICogT25jZSBhIGNlcnRpZmljYXRlIGhhcyBiZWVuIGxvZ2dlZCwgaXQgY2Fubm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgbG9nLiBPcHRpbmcgb3V0IGF0IHRoYXQgcG9pbnQgd2lsbCBoYXZlIG5vXG4gICAqIGVmZmVjdC4gSWYgeW91IGNoYW5nZSB0aGlzIHByb3BlcnR5IGFmdGVyIGNyZWF0aW9uLCBhIG5ldyBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHJlcXVlc3RlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYWNtL2xhdGVzdC91c2VyZ3VpZGUvYWNtLWJlc3RwcmFjdGljZXMuaHRtbCNiZXN0LXByYWN0aWNlcy10cmFuc3BhcmVuY3lcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNwYXJlbmN5TG9nZ2luZ0VuYWJsZWQ/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSBnaXZlbiByZW1vdmFsIHBvbGljeSB0byB0aGlzIHJlc291cmNlLlxuICAgKlxuICAgKiBUaGUgcmVtb3ZhbCBwb2xpY3kgY29udHJvbHMgd2hhdCBoYXBwZW5zIHRvIHRoaXMgcmVzb3VyY2Ugd2hlbiBpdCBzdG9wcyBiZWluZyBtYW5hZ2VkIGJ5IENsb3VkRm9ybWF0aW9uLCBlaXRoZXJcbiAgICogYmVjYXVzZSB5b3UndmUgcmVtb3ZlZCBpdCBmcm9tIHRoZSBDREsgYXBwbGljYXRpb24gb3IgYmVjYXVzZSB5b3UndmUgbWFkZSBhIGNoYW5nZSB0aGF0IHJlcXVpcmVzIHRoZSByZXNvdXJjZSB0b1xuICAgKiBiZSByZXBsYWNlZC4gVGhlIHJlc291cmNlIGNhbiBiZSBkZWxldGVkIChgYFJlbW92YWxQb2xpY3kuREVTVFJPWWBgKSwgb3IgbGVmdCBpbiB5b3VyIEFXUyBhY2NvdW50IGZvciBkYXRhXG4gICAqIHJlY292ZXJ5IGFuZCBjbGVhbnVwIGxhdGVyIChgYFJlbW92YWxQb2xpY3kuUkVUQUlOYGApLiBJZiB5b3UgY2hhbmdlIHRoaXMgcHJvcGVydHkgYWZ0ZXIgY3JlYXRpb24sIGEgbmV3XG4gICAqIGNlcnRpZmljYXRlIHdpbGwgYmUgcmVxdWVzdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSZW1vdmFsUG9saWN5LkRFU1RST1lcbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBjZGsuUmVtb3ZhbFBvbGljeVxufVxuXG5jb25zdCBETlNfVkFMSURBVEVEX0NFUlRJRklDQVRFX1RZUEUgPSAnQ3VzdG9tOjpEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSdcbmNvbnN0IENFUlRUSUZJQ0FURV9SRVNPVVJDRV9UWVBFID0gJ0FXUzo6Q2VydGlmaWNhdGVNYW5hZ2VyOjpDZXJ0aWZpY2F0ZSdcblxuLyoqXG4gKiBBIGNlcnRpZmljYXRlIG1hbmFnZWQgYnkgQVdTIENlcnRpZmljYXRlIE1hbmFnZXIuIFdpbGwgYmUgYXV0b21hdGljYWxseSB2YWxpZGF0ZWQgdXNpbmcgRE5TIHZhbGlkYXRpb24gYWdhaW5zdCB0aGVcbiAqIHNwZWNpZmllZCBSb3V0ZSA1MyBob3N0ZWQgem9uZS4gVGhpcyBjb25zdHJ1Y3Qgc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgY3Jvc3MtcmVnaW9uIG9yIGNyb3NzLWFjY291bnQgY2VydGlmaWNhdGVcbiAqIHZhbGlkYXRpb25zLiBUaGUgZGVmYXVsdCBgYENlcnRpZmljYXRlYGAgY29uc3RydWN0IGlzIGJldHRlciBpbiBjYXNlcyB3aGVyZSBldmVyeXRoaW5nIGlzIG1hbmFnZWQgYnkgdGhlIENES1xuICogYXBwbGljYXRpb24uXG4gKlxuICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGNvbnN0cnVjdCBkb2VzIG5vdCBzdXBwb3J0IGFsdGVybmF0aXZlIG5hbWVzIHlldCBhcyBpdCB3b3VsZCByZXF1aXJlIGRvbWFpbiB0byByb2xlIG1hcHBpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vICMgQ3Jvc3MtcmVnaW9uIGNlcnRpZmljYXRlIHZhbGlkYXRpb25cbiAqIC8vIGhvc3RlZCB6b25lIG1hbmFnZWQgYnkgdGhlIENESyBhcHBsaWNhdGlvblxuICogY29uc3QgaG9zdGVkWm9uZTogcm91dGU1My5JSG9zdGVkWm9uZSA9IC4uLlxuICogLy8gbm8gc2VwYXJhdGUgdmFsaWRhdGlvbiByb2xlIGlzIG5lZWRlZFxuICogY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUodGhpcywgJ0Nyb3NzUmVnaW9uQ2VydGlmaWNhdGUnLCB7XG4gKiAgIGhvc3RlZFpvbmU6IGhvc3RlZFpvbmUsXG4gKiAgIGRvbWFpbk5hbWU6ICdleGFtcGxlLmNvbScsICAgICAvLyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgaG9zdGVkIHpvbmVcbiAqICAgY2VydGlmaWNhdGVSZWdpb246ICd1cy1lYXN0LTEnIC8vIHVzZWQgYnkgZm9yIGV4YW1wbGUgQ2xvdWRGcm9udFxuICogfSlcbiAqIC8vICMgQ3Jvc3MtYWNjb3VudCBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uXG4gKiAvLyBleHRlcm5hbCBob3N0ZWQgem9uZVxuICogY29uc3QgaG9zdGVkWm9uZTogcm91dGU1My5JSG9zdGVkWm9uZSA9XG4gKiAgIHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXModGhpcywgJ0hvc3RlZFpvbmUnLCB7XG4gKiAgICAgaG9zdGVkWm9uZUlkOiAnWjUzMkRHREVERlMxMjM0NTY3ODknLFxuICogICAgIHpvbmVOYW1lOiAnZXhhbXBsZS5jb20nXG4gKiAgIH0pXG4gKiAvLyB2YWxpZGF0aW9uIHJvbGUgb24gdGhlIHNhbWUgYWNjb3VudCBhcyB0aGUgaG9zdGVkIHpvbmVcbiAqIGNvbnN0IHJvbGVBcm4gPSAnYXJuOmF3czppYW06OjEyMzQ1Njc4OTpyb2xlL0NoYW5nZURuc1JlY29yZHNSb2xlJ1xuICogY29uc3QgZXh0ZXJuYWxJZCA9ICdkb21haW4tYXNzdW1lJ1xuICogY29uc3QgdmFsaWRhdGlvblJvbGU6IGlhbS5JUm9sZSA9XG4gKiAgIGlhbS5Sb2xlLmZyb21Sb2xlQXJuKHRoaXMsICdWYWxpZGF0aW9uUm9sZScsIHJvbGVBcm4pXG4gKiBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSh0aGlzLCAnQ3Jvc3NBY2NvdW50Q2VydGlmaWNhdGUnLCB7XG4gKiAgIGhvc3RlZFpvbmU6IGhvc3RlZFpvbmUsXG4gKiAgIGRvbWFpbk5hbWU6ICdleGFtcGxlLmNvbScsXG4gKiAgIHZhbGlkYXRpb25Sb2xlOiB2YWxpZGF0aW9uUm9sZSxcbiAgICAgdmFsaWRhdGlvbkV4dGVybmFsSWQ6IGV4dGVybmFsSWRcbiAqIH0pXG4gKlxuICogQHJlc291cmNlIEN1c3RvbTo6RG5zVmFsaWRhdGVkQ2VydGlmaWNhdGVcbiAqIEByZXNvdXJjZSBBV1M6OkNlcnRpZmljYXRlTWFuYWdlcjo6Q2VydGlmaWNhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIERuc1ZhbGlkYXRlZENlcnRpZmljYXRlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgY2VydGlmaWNhdGVtYW5hZ2VyLklDZXJ0aWZpY2F0ZSwgY2RrLklUYWdnYWJsZSB7XG4gIC8qKiBUaGUgY2VydGlmaWNhdGUncyBBUk4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNlcnRpZmljYXRlQXJuOiBzdHJpbmdcblxuICAvKiogVGhlIHJlZ2lvbiB3aGVyZSB0aGUgY2VydGlmaWNhdGUgaXMgZGVwbG95ZWQgdG8gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNlcnRpZmljYXRlUmVnaW9uOiBzdHJpbmdcblxuICAvKiogVGhlIGhvc3RlZCB6b25lIGlkZW50aWZpZXIgYXV0aG9yaXRhdGl2ZSBmb3IgdGhlIGNlcnRpZmljYXRlICovXG4gIHB1YmxpYyByZWFkb25seSBob3N0ZWRab25lSWQ6IHN0cmluZ1xuXG4gIC8qKiBUaGUgaG9zdGVkIHpvbmUgbmFtZSBhdXRob3JpdGF0aXZlIGZvciB0aGUgY2VydGlmaWNhdGUgKi9cbiAgcHVibGljIHJlYWRvbmx5IGhvc3RlZFpvbmVOYW1lOiBzdHJpbmdcblxuICAvKiogVGhlIGRvbWFpbiBuYW1lIGluY2x1ZGVkIGluIHRoZSBjZXJ0aWZpY2F0ZSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nXG5cbiAgLyoqIFRoZSB0YWcgbWFuYWdlciB0byBzZXQsIHJlbW92ZSBhbmQgZm9ybWF0IHRhZ3MgZm9yIHRoZSBjZXJ0aWZpY2F0ZSAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhZ3M6IGNkay5UYWdNYW5hZ2VyXG5cbiAgLyoqIFRoZSByZW1vdmFsIHBvbGljeSBmb3IgdGhlIGNlcnRpZmljYXRlICovXG4gIHByaXZhdGUgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3lcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBjb25zdHJ1Y3QgaG9zdGluZyB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgY29uc3RydWN0J3MgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gcHJvcHMgcHJvcGVydGllcyBmb3IgdGhlIGNvbnN0cnVjdFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERuc1ZhbGlkYXRlZENlcnRpZmljYXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmRvbWFpbk5hbWUgPSB0aGlzLm5vcm1hbGl6ZURvbWFpbk5hbWUocHJvcHMuZG9tYWluTmFtZSlcbiAgICB0aGlzLmhvc3RlZFpvbmVJZCA9IHRoaXMubm9ybWFsaXplSG9zdGVkWm9uZUlkKHByb3BzLmhvc3RlZFpvbmUuaG9zdGVkWm9uZUlkKVxuICAgIHRoaXMuaG9zdGVkWm9uZU5hbWUgPSB0aGlzLm5vcm1hbGl6ZURvbWFpbk5hbWUocHJvcHMuaG9zdGVkWm9uZS56b25lTmFtZSlcbiAgICB0aGlzLmNlcnRpZmljYXRlUmVnaW9uID0gcHJvcHMuY2VydGlmaWNhdGVSZWdpb24gPz8gdGhpcy5zdGFjay5yZWdpb25cbiAgICB0aGlzLnRhZ3MgPSBuZXcgY2RrLlRhZ01hbmFnZXIoY2RrLlRhZ1R5cGUuTUFQLCBDRVJUVElGSUNBVEVfUkVTT1VSQ0VfVFlQRSlcbiAgICB0aGlzLnJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1lcblxuICAgIGNvbnN0IHJlcXVlc3RvckZ1bmN0aW9uID0gbmV3IENlcnRpZmljYXRlUmVxdWVzdG9yRnVuY3Rpb24odGhpcywgJ1JlcXVlc3RvckZ1bmN0aW9uJywge1xuICAgICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDE0KSxcbiAgICAgIHJvbGU6IHByb3BzLmN1c3RvbVJlc291cmNlUm9sZSxcbiAgICB9KVxuXG4gICAgcmVxdWVzdG9yRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnYWNtOlJlcXVlc3RDZXJ0aWZpY2F0ZScsXG4gICAgICAgICAgJ2FjbTpEZXNjcmliZUNlcnRpZmljYXRlJyxcbiAgICAgICAgICAnYWNtOkRlbGV0ZUNlcnRpZmljYXRlJyxcbiAgICAgICAgICAnYWNtOkFkZFRhZ3NUb0NlcnRpZmljYXRlJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgaWYgKHByb3BzLnZhbGlkYXRpb25Sb2xlKSB7XG4gICAgICByZXF1ZXN0b3JGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydzdHM6QXNzdW1lUm9sZSddLFxuICAgICAgICAgIHJlc291cmNlczogW3Byb3BzLnZhbGlkYXRpb25Sb2xlLnJvbGVBcm5dLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0b3JGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ3JvdXRlNTM6R2V0Q2hhbmdlJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgcmVxdWVzdG9yRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0cyddLFxuICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOnJvdXRlNTM6Ojpob3N0ZWR6b25lLyR7dGhpcy5ob3N0ZWRab25lSWR9YF0sXG4gICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgJ0ZvckFsbFZhbHVlczpTdHJpbmdFcXVhbHMnOiB7XG4gICAgICAgICAgICAgICdyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c1JlY29yZFR5cGVzJzogWydDTkFNRSddLFxuICAgICAgICAgICAgICAncm91dGU1MzpDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHNBY3Rpb25zJzogWydVUFNFUlQnLCAnREVMRVRFJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0ZvckFsbFZhbHVlczpTdHJpbmdMaWtlJzoge1xuICAgICAgICAgICAgICAncm91dGU1MzpDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHNOb3JtYWxpemVkUmVjb3JkTmFtZXMnOiBbXG4gICAgICAgICAgICAgICAgdGhpcy53aWxkY2FyZERvbWFpbk5hbWUoJ01haW5Eb21haW5XaWxkY2FyZCcsIHRoaXMuZG9tYWluTmFtZSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdG9yUHJvdmlkZXIgPSBuZXcgY3VzdG9tX3Jlc291cmNlcy5Qcm92aWRlcih0aGlzLCAnUmVxdWVzdG9yUHJvdmlkZXInLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogcmVxdWVzdG9yRnVuY3Rpb24sXG4gICAgfSlcblxuICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnRpZXMgPSB7XG4gICAgICBIb3N0ZWRab25lSWQ6IHRoaXMuaG9zdGVkWm9uZUlkLFxuICAgICAgRG9tYWluTmFtZTogdGhpcy5kb21haW5OYW1lLFxuICAgICAgQ2VydGlmaWNhdGVSZWdpb246IHRoaXMuY2VydGlmaWNhdGVSZWdpb24sXG4gICAgICBTdWJqZWN0QWx0ZXJuYXRpdmVOYW1lczogdW5kZWZpbmVkLCAvLyBub3Qgc3VwcG9ydGVkIHlldCBhcyBpdCByZXF1aXJlcyByb2xlIHRvIGRvbWFpbiBtYXBwaW5nXG4gICAgICBWYWxpZGF0aW9uUm9sZUFybjogcHJvcHMudmFsaWRhdGlvblJvbGU/LnJvbGVBcm4sXG4gICAgICBWYWxpZGF0aW9uRXh0ZXJuYWxJZDogcHJvcHMudmFsaWRhdGlvbkV4dGVybmFsSWQsXG4gICAgICBDbGVhbnVwVmFsaWRhdGlvblJlY29yZHM6IGJvb2xlYW5Ub1N0cmluZyhwcm9wcy5jbGVhbnVwVmFsaWRhdGlvblJlY29yZHMgPz8gdHJ1ZSksXG4gICAgICBUcmFuc3BhcmVuY3lMb2dnaW5nRW5hYmxlZDogYm9vbGVhblRvU3RyaW5nKHByb3BzLnRyYW5zcGFyZW5jeUxvZ2dpbmdFbmFibGVkID8/IHRydWUpLFxuICAgICAgVGFnczogY2RrLkxhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy50YWdzLnJlbmRlclRhZ3MoKSB9KSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICBSZW1vdmFsUG9saWN5OiBjZGsuTGF6eS5zdHJpbmcoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbW92YWxQb2xpY3kgfSksXG4gICAgfVxuXG4gICAgY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgY2RrLkN1c3RvbVJlc291cmNlKHRoaXMsICdSZXF1ZXN0b3JSZXNvdXJjZScsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcmVxdWVzdG9yUHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiBETlNfVkFMSURBVEVEX0NFUlRJRklDQVRFX1RZUEUsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgIH0pXG5cbiAgICB0aGlzLmNlcnRpZmljYXRlQXJuID0gY2VydGlmaWNhdGUuZ2V0QXR0U3RyaW5nKCdBcm4nKVxuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oeyB2YWxpZGF0ZTogKCkgPT4gdGhpcy52YWxpZGF0ZURvbWFpblRvSG9zdGVkWm9uZSh0aGlzLmRvbWFpbk5hbWUsIHRoaXMuaG9zdGVkWm9uZU5hbWUpIH0pXG4gIH1cblxuICBtZXRyaWNEYXlzVG9FeHBpcnkocHJvcHM/OiBjZGsuYXdzX2Nsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyB8IHVuZGVmaW5lZCk6IGNkay5hd3NfY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24uZGF5cygxKSxcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGltZW5zaW9uc01hcDogeyBDZXJ0aWZpY2F0ZUFybjogdGhpcy5jZXJ0aWZpY2F0ZUFybiB9LFxuICAgICAgbWV0cmljTmFtZTogJ0RheXNUb0V4cGlyeScsXG4gICAgICBuYW1lc3BhY2U6ICdBV1MvQ2VydGlmaWNhdGVNYW5hZ2VyJyxcbiAgICAgIHJlZ2lvbjogdGhpcy5jZXJ0aWZpY2F0ZVJlZ2lvbixcbiAgICAgIHN0YXRpc3RpYzogY2xvdWR3YXRjaC5TdGF0cy5NSU5JTVVNLFxuICAgIH0pXG4gIH1cblxuICBhcHBseVJlbW92YWxQb2xpY3kocG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeSk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZhbFBvbGljeSA9IHBvbGljeVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEb21haW5OYW1lKGRvbWFpbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoZG9tYWluTmFtZSkpIHtcbiAgICAgIHJldHVybiBkb21haW5OYW1lXG4gICAgfVxuICAgIGlmIChkb21haW5OYW1lLmVuZHNXaXRoKCcuJykpIHtcbiAgICAgIHJldHVybiBkb21haW5OYW1lLnNsaWNlKDAsIC0xKVxuICAgIH1cbiAgICByZXR1cm4gZG9tYWluTmFtZVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVIb3N0ZWRab25lSWQoaG9zdGVkWm9uZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGhvc3RlZFpvbmVJZCkpIHtcbiAgICAgIHJldHVybiBob3N0ZWRab25lSWRcbiAgICB9XG4gICAgcmV0dXJuIGhvc3RlZFpvbmVJZC5yZXBsYWNlKC9eXFwvaG9zdGVkem9uZVxcLy8sICcnKVxuICB9XG5cbiAgcHJpdmF0ZSB3aWxkY2FyZERvbWFpbk5hbWUoaWQ6IHN0cmluZywgZG9tYWluTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IGNkay5Gbi5zcGxpdCgnLicsIGRvbWFpbk5hbWUpXG4gICAgY29uc3QgZmlyc3QgPSBjZGsuRm4uc2VsZWN0KDAsIHBhcnRzKVxuICAgIGNvbnN0IGlzV2lsZGNhcmQgPSBuZXcgY2RrLkNmbkNvbmRpdGlvbih0aGlzLCBgSXMke2lkfWAsIHtcbiAgICAgIGV4cHJlc3Npb246IGNkay5Gbi5jb25kaXRpb25FcXVhbHMoZmlyc3QsICcqJyksXG4gICAgfSlcbiAgICByZXR1cm4gY2RrLkZuLmNvbmRpdGlvbklmKGlzV2lsZGNhcmQubG9naWNhbElkLCBkb21haW5OYW1lLCBgKi4ke2RvbWFpbk5hbWV9YCkudG9TdHJpbmcoKVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZURvbWFpblRvSG9zdGVkWm9uZShkb21haW5OYW1lOiBzdHJpbmcsIGhvc3RlZFpvbmVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoZG9tYWluTmFtZSkgfHwgY2RrLlRva2VuLmlzVW5yZXNvbHZlZChob3N0ZWRab25lTmFtZSkpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgICBpZiAoZG9tYWluTmFtZSAhPT0gaG9zdGVkWm9uZU5hbWUgJiYgIWRvbWFpbk5hbWUuZW5kc1dpdGgoYC4ke2hvc3RlZFpvbmVOYW1lfWApKSB7XG4gICAgICByZXR1cm4gW2BIb3N0ZWQgem9uZSAke2hvc3RlZFpvbmVOYW1lfSBpcyBub3QgYXV0aG9yaXRhdGl2ZSBmb3IgY2VydGlmaWNhdGUgZG9tYWluIG5hbWUgJHtkb21haW5OYW1lfWBdXG4gICAgfVxuICAgIHJldHVybiBbXVxuICB9XG59XG4iXX0=
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXZhbGlkYXRlZC1jZXJ0aWZpY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kbnMtdmFsaWRhdGVkLWNlcnRpZmljYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQWtDO0FBRWxDLHlEQUF3RDtBQUN4RCwyQ0FBMEM7QUFDMUMsaURBQWdEO0FBRWhELGlFQUFnRTtBQUVoRSxxRkFBK0U7QUFFL0UsbUNBQTZFO0FBaUg3RSxNQUFNLDhCQUE4QixHQUFHLGlDQUFpQyxDQUFBO0FBQ3hFLE1BQU0sMEJBQTBCLEdBQUcsc0NBQXNDLENBQUE7QUFFekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUVHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxHQUFHLENBQUMsUUFBUTtJQWF2RDs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW1DO1FBQzNFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM3RCxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLENBQ3pGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUNoRCxDQUFBO1FBQ0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFFbEUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQTtRQUNyRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FB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LEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDaEUsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7WUFDM0YsSUFBSSxvQkFBb0IsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtnQkFDL0csTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLFVBQVUsaURBQWlELENBQUMsQ0FBQTthQUNuRjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDOzs7O0FBdExVLDBEQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYidcbmltcG9ydCAqIGFzIGNlcnRpZmljYXRlbWFuYWdlciBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJ1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCdcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJ1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnXG5pbXBvcnQgKiBhcyByb3V0ZTUzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJ1xuaW1wb3J0ICogYXMgY3VzdG9tX3Jlc291cmNlcyBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJ1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cydcbmltcG9ydCB7IENlcnRpZmljYXRlUmVxdWVzdG9yRnVuY3Rpb24gfSBmcm9tICcuL2NlcnRpZmljYXRlLXJlcXVlc3Rvci1mdW5jdGlvbidcbmltcG9ydCB7IFByb3BlcnRpZXMsIFZhbGlkYXRpb25Ib3N0ZWRab25lUHJvcGVydGllcyB9IGZyb20gJy4vY2VydGlmaWNhdGUtcmVxdWVzdG9yLmxhbWJkYSdcbmltcG9ydCB7IGJvb2xlYW5Ub1N0cmluZywgY2xlYW5Eb21haW5OYW1lLCBjbGVhbkhvc3RlZFpvbmVJZCB9IGZyb20gJy4vdXRpbHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkhvc3RlZFpvbmUge1xuICAvKipcbiAgICogSG9zdGVkIHpvbmUgdG8gdXNlIGZvciBETlMgdmFsaWRhdGlvbi4gVGhlIHpvbmUgbmFtZSBpcyBtYXRjaGVkIHRvIGRvbWFpbiBuYW1lIHRvIHVzZSB0aGUgcmlnaHRcbiAgICogaG9zdGVkIHpvbmUgZm9yIHZhbGlkYXRpb24uXG4gICAqXG4gICAqIElmIHRoZSBob3N0ZWQgem9uZSBpcyBub3QgbWFuYWdlZCBieSB0aGUgQ0RLIGFwcGxpY2F0aW9uLCBpdCBuZWVkcyB0byBiZSBwcm92aWRlZCB2aWFcbiAgICogYGBIb3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcygpYGAuXG4gICAqL1xuICByZWFkb25seSBob3N0ZWRab25lOiByb3V0ZTUzLklIb3N0ZWRab25lXG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIHRoYXQgaXMgYXNzdW1lZCBmb3IgRE5TIHJlY29yZCBjaGFuZ2VzIGZvciBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uLlxuICAgKlxuICAgKiBUaGlzIHJvbGUgc2hvdWxkIGV4aXN0IGluIHRoZSBzYW1lIGFjY291bnQgYXMgdGhlIGhvc3RlZCB6b25lIGFuZCBpbmNsdWRlIHBlcm1pc3Npb25zIHRvIGNoYW5nZSB0aGUgRE5TIHJlY29yZHNcbiAgICogZm9yIHRoZSBnaXZlbiBgYGhvc3RlZFpvbmVgYC4gVGhlIGBgY3VzdG9tUmVzb3VyY2VSb2xlYGAgb3IgdGhlIGRlZmF1bHQgZXhlY3V0aW9uIHJvbGUgaXMgZ2l2ZW4gcGVybWlzc2lvbiB0b1xuICAgKiBhc3N1bWUgdGhpcyByb2xlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlcGFyYXRlIHJvbGUgZm9yIEROUyByZWNvcmQgY2hhbmdlcy4gVGhlIGdpdmVuIGN1c3RvbVJlc291cmNlUm9sZSBvciB0aGUgZGVmYXVsdCByb2xlIGlzIHVzZWRcbiAgICogZm9yIEROUyByZWNvcmQgY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRpb25Sb2xlPzogaWFtLklSb2xlXG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIGlkIGZvciBgYHZhbGlkYXRpb25Sb2xlYGAgcm9sZSBhc3N1bWUgdmVyaWZpY2F0aW9uLlxuICAgKlxuICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiBgYHZhbGlkYXRpb25Sb2xlYGAgaXMgZ2l2ZW4gYW5kIHRoZSByb2xlIGV4cGVjdHMgYW4gZXh0ZXJuYWwgaWQgcHJvdmlkZWQgb24gYXNzdW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGV4dGVybmFsIGlkIHByb3ZpZGVkIGR1cmluZyBhc3N1bWUuXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0aW9uRXh0ZXJuYWxJZD86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERuc1ZhbGlkYXRlZENlcnRpZmljYXRlUHJvcHMge1xuICAvKipcbiAgICogRnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIHRvIHJlcXVlc3QgYSBjZXJ0aWZpY2F0ZSBmb3IuXG4gICAqXG4gICAqIE1heSBjb250YWluIHdpbGRjYXJkcywgc3VjaCBhcyBgYCouZG9tYWluLmNvbWBgLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEZ1bGx5LXF1YWxpZmllZCBhbHRlcm5hdGl2ZSBkb21haW4gbmFtZXMgdG8gcmVxdWVzdCBhIGNlcnRpZmljYXRlIGZvci5cbiAgICpcbiAgICogTWF5IGNvbnRhaW4gd2lsZGNhcmRzLCBzdWNoIGFzIGBgKi5vdGhlcmRvbWFpbi5jb21gYC5cbiAgICovXG4gIHJlYWRvbmx5IGFsdGVybmF0aXZlRG9tYWluTmFtZXM/OiBzdHJpbmdbXVxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGhvc3RlZCB6b25lcyB0byB1c2UgZm9yIHZhbGlkYXRpb24uIEhvc3RlZCB6b25lcyBhcmUgbWFwcGVkIHRvIGRvbWFpbiBuYW1lcyBieSB0aGUgem9uZSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGlvbkhvc3RlZFpvbmVzOiBWYWxpZGF0aW9uSG9zdGVkWm9uZVtdXG5cbiAgLyoqXG4gICAqIEFXUyByZWdpb24gd2hlcmUgdGhlIGNlcnRpZmljYXRlIGlzIGRlcGxveWVkLlxuICAgKlxuICAgKiBZb3Ugc2hvdWxkIHVzZSB0aGUgZGVmYXVsdCBgYENlcnRpZmljYXRlYGAgY29uc3RydWN0IGluc3RlYWQgaWYgdGhlIHJlZ2lvbiBpcyBzYW1lIGFzIHRoZSBzdGFjaydzIGFuZCB0aGUgaG9zdGVkXG4gICAqIHpvbmUgaXMgaW4gdGhlIHNhbWUgYWNjb3VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBTYW1lIHJlZ2lvbiBhcyB0aGUgc3RhY2suXG4gICAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZVJlZ2lvbj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSB0aGF0IGlzIHVzZWQgZm9yIHRoZSBjdXN0b20gcmVzb3VyY2UgTGFtYmRhIGV4ZWN1dGlvbi5cbiAgICpcbiAgICogVGhlIHJvbGUgaXMgZ2l2ZW4gcGVybWlzc2lvbnMgdG8gcmVxdWVzdCBjZXJ0aWZpY2F0ZXMgZnJvbSBBQ00uIElmIHRoZXJlIGFyZSBhbnkgYGB2YWxpZGF0aW9uUm9sZWBgcyBwcm92aWRlZCxcbiAgICogdGhpcyByb2xlIGlzIGFsc28gZ2l2ZW4gcGVybWlzc2lvbiB0byBhc3N1bWUgdGhlIGBgdmFsaWRhdGlvblJvbGVgYC4gT3RoZXJ3aXNlIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgaG9zdGVkIHpvbmVcbiAgICogaXMgaW4gc2FtZSBhY2NvdW50IGFuZCB0aGUgZXhlY3V0aW9uIHJvbGUgaXMgZ2l2ZW4gcGVybWlzc2lvbnMgdG8gY2hhbmdlIEROUyByZWNvcmRzIGZvciB0aGUgZ2l2ZW4gYGBkb21haW5OYW1lYGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTGFtYmRhIGNyZWF0ZXMgYSBkZWZhdWx0IGV4ZWN1dGlvbiByb2xlLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tUmVzb3VyY2VSb2xlPzogaWFtLklSb2xlXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGNsZWFuaW5nIG9mIHZhbGlkYXRpb24gRE5TIHJlY29yZHMgZnJvbSB0aGUgaG9zdGVkIHpvbmUuXG4gICAqXG4gICAqIElmIHRoZXJlJ3MgbXVsdGlwbGUgY2VydGlmaWNhdGVzIGNyZWF0ZWQgZm9yIHNhbWUgZG9tYWluLCBpdCBpcyBwb3NzaWJsZSB0byBlbmNvdXRlciBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHNvbWVcbiAgICogY2VydGlmaWNhdGUgaXMgcmVtb3ZlZCBhbmQgYW5vdGhlciBjZXJ0aWZpY2F0ZSB3b3VsZCBuZWVkIHRoZSBzYW1lIHZhbGlkYXRpb24gcmVjb3JkLiBQcmVmZXIgc2luZ2xlIGNlcnRpZmljYXRlXG4gICAqIGZvciBhIGRvbWFpbiBvciBzZXQgdGhpcyB0byBmYWxzZSBhbmQgY2xlYW51cCByZWNvcmRzIG1hbnVhbGx5IHdoZW4gbm90IG5lZWRlZCBhbnltb3JlLiBJZiB5b3UgY2hhbmdlIHRoaXNcbiAgICogcHJvcGVydHkgYWZ0ZXIgY3JlYXRpb24sIGEgbmV3IGNlcnRpZmljYXRlIHdpbGwgYmUgcmVxdWVzdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjbGVhbnVwVmFsaWRhdGlvblJlY29yZHM/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIHRyYW5zcGFyZW5jeSBsb2dnaW5nIGZvciB0aGlzIGNlcnRpZmljYXRlLlxuICAgKlxuICAgKiBPbmNlIGEgY2VydGlmaWNhdGUgaGFzIGJlZW4gbG9nZ2VkLCBpdCBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsb2cuIE9wdGluZyBvdXQgYXQgdGhhdCBwb2ludCB3aWxsIGhhdmUgbm9cbiAgICogZWZmZWN0LiBJZiB5b3UgY2hhbmdlIHRoaXMgcHJvcGVydHkgYWZ0ZXIgY3JlYXRpb24sIGEgbmV3IGNlcnRpZmljYXRlIHdpbGwgYmUgcmVxdWVzdGVkLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hY20vbGF0ZXN0L3VzZXJndWlkZS9hY20tYmVzdHByYWN0aWNlcy5odG1sI2Jlc3QtcHJhY3RpY2VzLXRyYW5zcGFyZW5jeVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BhcmVuY3lMb2dnaW5nRW5hYmxlZD86IGJvb2xlYW5cblxuICAvKipcbiAgICogQXBwbHkgdGhlIGdpdmVuIHJlbW92YWwgcG9saWN5IHRvIHRoaXMgcmVzb3VyY2UuXG4gICAqXG4gICAqIFRoZSByZW1vdmFsIHBvbGljeSBjb250cm9scyB3aGF0IGhhcHBlbnMgdG8gdGhpcyByZXNvdXJjZSB3aGVuIGl0IHN0b3BzIGJlaW5nIG1hbmFnZWQgYnkgQ2xvdWRGb3JtYXRpb24sIGVpdGhlclxuICAgKiBiZWNhdXNlIHlvdSd2ZSByZW1vdmVkIGl0IGZyb20gdGhlIENESyBhcHBsaWNhdGlvbiBvciBiZWNhdXNlIHlvdSd2ZSBtYWRlIGEgY2hhbmdlIHRoYXQgcmVxdWlyZXMgdGhlIHJlc291cmNlIHRvXG4gICAqIGJlIHJlcGxhY2VkLiBUaGUgcmVzb3VyY2UgY2FuIGJlIGRlbGV0ZWQgKGBgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZYGApLCBvciBsZWZ0IGluIHlvdXIgQVdTIGFjY291bnQgZm9yIGRhdGFcbiAgICogcmVjb3ZlcnkgYW5kIGNsZWFudXAgbGF0ZXIgKGBgUmVtb3ZhbFBvbGljeS5SRVRBSU5gYCkuIElmIHlvdSBjaGFuZ2UgdGhpcyBwcm9wZXJ0eSBhZnRlciBjcmVhdGlvbiwgYSBuZXdcbiAgICogY2VydGlmaWNhdGUgd2lsbCBiZSByZXF1ZXN0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IGNkay5SZW1vdmFsUG9saWN5XG59XG5cbmNvbnN0IEROU19WQUxJREFURURfQ0VSVElGSUNBVEVfVFlQRSA9ICdDdXN0b206OkRuc1ZhbGlkYXRlZENlcnRpZmljYXRlJ1xuY29uc3QgQ0VSVFRJRklDQVRFX1JFU09VUkNFX1RZUEUgPSAnQVdTOjpDZXJ0aWZpY2F0ZU1hbmFnZXI6OkNlcnRpZmljYXRlJ1xuXG4vKipcbiAqIEEgY2VydGlmaWNhdGUgbWFuYWdlZCBieSBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlci4gV2lsbCBiZSBhdXRvbWF0aWNhbGx5IHZhbGlkYXRlZCB1c2luZyBETlMgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZVxuICogc3BlY2lmaWVkIFJvdXRlIDUzIGhvc3RlZCB6b25lLiBUaGlzIGNvbnN0cnVjdCBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBjcm9zcy1yZWdpb24gb3IgY3Jvc3MtYWNjb3VudCBjZXJ0aWZpY2F0ZVxuICogdmFsaWRhdGlvbnMuIFRoZSBkZWZhdWx0IGBgQ2VydGlmaWNhdGVgYCBjb25zdHJ1Y3QgaXMgYmV0dGVyIGluIGNhc2VzIHdoZXJlIGV2ZXJ5dGhpbmcgaXMgbWFuYWdlZCBieSB0aGUgQ0RLXG4gKiBhcHBsaWNhdGlvbi5cbiAqXG4gKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgY29uc3RydWN0IGRvZXMgbm90IHN1cHBvcnQgYWx0ZXJuYXRpdmUgbmFtZXMgeWV0IGFzIGl0IHdvdWxkIHJlcXVpcmUgZG9tYWluIHRvIHJvbGUgbWFwcGluZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gIyMjIENyb3NzLXJlZ2lvbiBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uXG4gKiAvLyBob3N0ZWQgem9uZSBtYW5hZ2VkIGJ5IHRoZSBDREsgYXBwbGljYXRpb25cbiAqIGNvbnN0IGhvc3RlZFpvbmU6IHJvdXRlNTMuSUhvc3RlZFpvbmUgPSAuLi5cbiAqIC8vIG5vIHNlcGFyYXRlIHZhbGlkYXRpb24gcm9sZSBpcyBuZWVkZWRcbiAqIGNvbnN0IGNlcnRpZmljYXRlID0gbmV3IERuc1ZhbGlkYXRlZENlcnRpZmljYXRlKHRoaXMsICdDcm9zc1JlZ2lvbkNlcnRpZmljYXRlJywge1xuICogICBkb21haW5OYW1lOiAnZXhhbXBsZS5jb20nLCAgICAgLy8gbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGhvc3RlZCB6b25lXG4gKiAgIHZhbGlkYXRpb25Ib3N0ZWRab25lczogW3sgICAgICAvLyBob3N0ZWQgem9uZSB1c2VkIHdpdGggdGhlIGV4ZWN1dGlvbiByb2xlJ3MgcGVybWlzc2lvbnNcbiAqICAgICBob3N0ZWRab25lOiBob3N0ZWRab25lXG4gKiAgIH1dLFxuICogICBjZXJ0aWZpY2F0ZVJlZ2lvbjogJ3VzLWVhc3QtMScgLy8gdXNlZCBieSBmb3IgZXhhbXBsZSBDbG91ZEZyb250XG4gKiB9KVxuICogLy8gIyMjIENyb3NzLWFjY291bnQgY2VydGlmaWNhdGUgdmFsaWRhdGlvblxuICogLy8gZXh0ZXJuYWwgaG9zdGVkIHpvbmVcbiAqIGNvbnN0IGhvc3RlZFpvbmU6IHJvdXRlNTMuSUhvc3RlZFpvbmUgPVxuICogICByb3V0ZTUzLkhvc3RlZFpvbmUuZnJvbUhvc3RlZFpvbmVBdHRyaWJ1dGVzKHRoaXMsICdIb3N0ZWRab25lJywge1xuICogICAgIGhvc3RlZFpvbmVJZDogJ1o1MzJER0RFREZTMTIzNDU2Nzg5JyxcbiAqICAgICB6b25lTmFtZTogJ2V4YW1wbGUuY29tJ1xuICogICB9KVxuICogLy8gdmFsaWRhdGlvbiByb2xlIGluIHRoZSBzYW1lIGFjY291bnQgYXMgdGhlIGhvc3RlZCB6b25lXG4gKiBjb25zdCByb2xlQXJuID0gJ2Fybjphd3M6aWFtOjoxMjM0NTY3ODk6cm9sZS9DaGFuZ2VEbnNSZWNvcmRzUm9sZSdcbiAqIGNvbnN0IGV4dGVybmFsSWQgPSAnZG9tYWluLWFzc3VtZSdcbiAqIGNvbnN0IHZhbGlkYXRpb25Sb2xlOiBpYW0uSVJvbGUgPVxuICogICBpYW0uUm9sZS5mcm9tUm9sZUFybih0aGlzLCAnVmFsaWRhdGlvblJvbGUnLCByb2xlQXJuKVxuICogY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUodGhpcywgJ0Nyb3NzQWNjb3VudENlcnRpZmljYXRlJywge1xuICogICBkb21haW5OYW1lOiAnZXhhbXBsZS5jb20nLFxuICogICB2YWxpZGF0aW9uSG9zdGVkWm9uZXM6IFt7XG4gKiAgICAgaG9zdGVkWm9uZTogaG9zdGVkWm9uZSxcbiAqICAgICB2YWxpZGF0aW9uUm9sZTogdmFsaWRhdGlvblJvbGUsXG4gKiAgICAgdmFsaWRhdGlvbkV4dGVybmFsSWQ6IGV4dGVybmFsSWRcbiAqICAgfV1cbiAqIH0pXG4gKiAvLyAjIyMgQ3Jvc3MtYWNjb3VudCBhbHRlcm5hdGl2ZSBuYW1lIHZhbGlkYXRpb25cbiAqIC8vIGV4YW1wbGUuY29tIGlzIHZhbGlkYXRlZCBvbiBzYW1lIGFjY291bnQgYWdhaW5zdCBtYW5hZ2VkIGhvc3RlZCB6b25lXG4gKiAvLyBhbmQgc2Vjb25kYXJ5LmNvbSBpcyB2YWxpZGF0ZWQgYWdhaW5zdCBleHRlcm5hbCBob3N0ZWQgem9uZSBvbiBvdGhlciBhY2NvdW50XG4gKiBjb25zdCBob3N0ZWRab25lRm9yTWFpbjogcm91dGU1My5JSG9zdGVkWm9uZSA9IC4uLlxuICogY29uc3QgaG9zdGVkWm9uZUZvckFsdGVybmF0aXZlOiByb3V0ZTUzLklIb3N0ZWRab25lID1cbiAqICAgcm91dGU1My5Ib3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyh0aGlzLCAnU2Vjb25kYXJ5SG9zdGVkWm9uZScsIHtcbiAqICAgICBob3N0ZWRab25lSWQ6ICdaNTMyREdERURGUzEyMzQ1Njc4OScsXG4gKiAgICAgem9uZU5hbWU6ICdzZWNvbmRhcnkuY29tJ1xuICogICB9KVxuICogY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUodGhpcywgJ0Nyb3NzQWNjb3VudENlcnRpZmljYXRlJywge1xuICogICBkb21haW5OYW1lOiAnZXhhbXBsZS5jb20nLFxuICogICBhbHRlcm5hdGl2ZURvbWFpbk5hbWVzOiBbJ3NlY29uZGFyeS5jb20nXSxcbiAqICAgdmFsaWRhdGlvbkhvc3RlZFpvbmVzOiBbe1xuICogICAgIGhvc3RlZFpvbmU6IGhvc3RlZFpvbmVGb3JNYWluXG4gKiAgIH0se1xuICogICAgIGhvc3RlZFpvbmU6IGhvc3RlZFpvbmVGb3JBbHRlcm5hdGl2ZSxcbiAqICAgICB2YWxpZGF0aW9uUm9sZTogaWFtLlJvbGUuZnJvbVJvbGVBcm4oXG4gKiAgICAgICB0aGlzLCAnU2Vjb25kYXJ5VmFsaWRhdGlvblJvbGUnLCAnYXJuOmF3czppYW06OjEyMzQ1Njc4OTpyb2xlL0NoYW5nZURuc1JlY29yZHNSb2xlJ1xuICogICAgICksXG4gKiAgICAgdmFsaWRhdGlvbkV4dGVybmFsSWQ6ICdkb21haW4tYXNzdW1lJ1xuICogICB9XVxuICogfSlcbiAqXG4gKiBAcmVzb3VyY2UgQ3VzdG9tOjpEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZVxuICogQHJlc291cmNlIEFXUzo6Q2VydGlmaWNhdGVNYW5hZ2VyOjpDZXJ0aWZpY2F0ZVxuICovXG5leHBvcnQgY2xhc3MgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBjZXJ0aWZpY2F0ZW1hbmFnZXIuSUNlcnRpZmljYXRlLCBjZGsuSVRhZ2dhYmxlIHtcbiAgLyoqIFRoZSBjZXJ0aWZpY2F0ZSdzIEFSTiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2VydGlmaWNhdGVBcm46IHN0cmluZ1xuXG4gIC8qKiBUaGUgcmVnaW9uIHdoZXJlIHRoZSBjZXJ0aWZpY2F0ZSBpcyBkZXBsb3llZCB0byAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2VydGlmaWNhdGVSZWdpb246IHN0cmluZ1xuXG4gIC8qKiBUaGUgdGFnIG1hbmFnZXIgdG8gc2V0LCByZW1vdmUgYW5kIGZvcm1hdCB0YWdzIGZvciB0aGUgY2VydGlmaWNhdGUgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWdzOiBjZGsuVGFnTWFuYWdlclxuXG4gIC8qKiBUaGUgcmVtb3ZhbCBwb2xpY3kgZm9yIHRoZSBjZXJ0aWZpY2F0ZSAqL1xuICBwcml2YXRlIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUgY29uc3RydWN0LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgY29uc3RydWN0IGhvc3RpbmcgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIGNvbnN0cnVjdCdzIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgZm9yIHRoZSBjb25zdHJ1Y3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgZG9tYWluTmFtZSA9IHRoaXMubm9ybWFsaXplRG9tYWluTmFtZShwcm9wcy5kb21haW5OYW1lKVxuICAgIGNvbnN0IGFsdGVybmF0aXZlRG9tYWluTmFtZXMgPSBwcm9wcy5hbHRlcm5hdGl2ZURvbWFpbk5hbWVzPy5tYXAoKGFsdGVybmF0aXZlRG9tYWluTmFtZSkgPT5cbiAgICAgIHRoaXMubm9ybWFsaXplRG9tYWluTmFtZShhbHRlcm5hdGl2ZURvbWFpbk5hbWUpXG4gICAgKVxuICAgIGNvbnN0IGFsbERvbWFpbnMgPSBbZG9tYWluTmFtZSwgLi4uKGFsdGVybmF0aXZlRG9tYWluTmFtZXMgPz8gW10pXVxuXG4gICAgdGhpcy5jZXJ0aWZpY2F0ZVJlZ2lvbiA9IHByb3BzLmNlcnRpZmljYXRlUmVnaW9uID8/IHRoaXMuc3RhY2sucmVnaW9uXG4gICAgdGhpcy50YWdzID0gbmV3IGNkay5UYWdNYW5hZ2VyKGNkay5UYWdUeXBlLk1BUCwgQ0VSVFRJRklDQVRFX1JFU09VUkNFX1RZUEUpXG4gICAgdGhpcy5yZW1vdmFsUG9saWN5ID0gcHJvcHMucmVtb3ZhbFBvbGljeSA/PyBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG5cbiAgICBjb25zdCByZXF1ZXN0b3JGdW5jdGlvbiA9IG5ldyBDZXJ0aWZpY2F0ZVJlcXVlc3RvckZ1bmN0aW9uKHRoaXMsICdSZXF1ZXN0b3JGdW5jdGlvbicsIHtcbiAgICAgIGFyY2hpdGVjdHVyZTogbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcygxNCksXG4gICAgICByb2xlOiBwcm9wcy5jdXN0b21SZXNvdXJjZVJvbGUsXG4gICAgfSlcblxuICAgIHJlcXVlc3RvckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2FjbTpSZXF1ZXN0Q2VydGlmaWNhdGUnLFxuICAgICAgICAgICdhY206RGVzY3JpYmVDZXJ0aWZpY2F0ZScsXG4gICAgICAgICAgJ2FjbTpEZWxldGVDZXJ0aWZpY2F0ZScsXG4gICAgICAgICAgJ2FjbTpBZGRUYWdzVG9DZXJ0aWZpY2F0ZScsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KVxuICAgIClcblxuICAgIGNvbnN0IGhvc3RlZFpvbmVzV2l0aFJvbGUgPSBwcm9wcy52YWxpZGF0aW9uSG9zdGVkWm9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLnZhbGlkYXRpb25Sb2xlICE9PSB1bmRlZmluZWQpXG4gICAgY29uc3QgaG9zdGVkWm9uZXNXaXRob3V0Um9sZSA9IHByb3BzLnZhbGlkYXRpb25Ib3N0ZWRab25lcy5maWx0ZXIoKHpvbmUpID0+IHpvbmUudmFsaWRhdGlvblJvbGUgPT09IHVuZGVmaW5lZClcblxuICAgIGhvc3RlZFpvbmVzV2l0aFJvbGUuZm9yRWFjaCgoem9uZSkgPT4ge1xuICAgICAgcmVxdWVzdG9yRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnc3RzOkFzc3VtZVJvbGUnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFt6b25lLnZhbGlkYXRpb25Sb2xlIS5yb2xlQXJuXSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9KVxuXG4gICAgaG9zdGVkWm9uZXNXaXRob3V0Um9sZS5mb3JFYWNoKCh6b25lKSA9PiB7XG4gICAgICByZXF1ZXN0b3JGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ3JvdXRlNTM6R2V0Q2hhbmdlJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIHJlcXVlc3RvckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsncm91dGU1MzpDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czpyb3V0ZTUzOjo6aG9zdGVkem9uZS8ke3RoaXMubm9ybWFsaXplSG9zdGVkWm9uZUlkKHpvbmUuaG9zdGVkWm9uZS5ob3N0ZWRab25lSWQpfWBdLFxuICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICdGb3JBbGxWYWx1ZXM6U3RyaW5nRXF1YWxzJzoge1xuICAgICAgICAgICAgICAncm91dGU1MzpDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHNSZWNvcmRUeXBlcyc6IFsnQ05BTUUnXSxcbiAgICAgICAgICAgICAgJ3JvdXRlNTM6Q2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzQWN0aW9ucyc6IFsnVVBTRVJUJywgJ0RFTEVURSddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdGb3JBbGxWYWx1ZXM6U3RyaW5nTGlrZSc6IHtcbiAgICAgICAgICAgICAgJ3JvdXRlNTM6Q2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzTm9ybWFsaXplZFJlY29yZE5hbWVzJzogW1xuICAgICAgICAgICAgICAgIHRoaXMud2lsZGNhcmREb21haW5OYW1lKCdNYWluRG9tYWluV2lsZGNhcmQnLCB0aGlzLm5vcm1hbGl6ZURvbWFpbk5hbWUoem9uZS5ob3N0ZWRab25lLnpvbmVOYW1lKSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSlcblxuICAgIGNvbnN0IHJlcXVlc3RvclByb3ZpZGVyID0gbmV3IGN1c3RvbV9yZXNvdXJjZXMuUHJvdmlkZXIodGhpcywgJ1JlcXVlc3RvclByb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IHJlcXVlc3RvckZ1bmN0aW9uLFxuICAgIH0pXG5cbiAgICBjb25zdCB2YWxpZGF0aW9uSG9zdGVkWm9uZXMgPSBwcm9wcy52YWxpZGF0aW9uSG9zdGVkWm9uZXMubWFwPFtzdHJpbmcsIFZhbGlkYXRpb25Ib3N0ZWRab25lUHJvcGVydGllc10+KCh6b25lKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzOiBWYWxpZGF0aW9uSG9zdGVkWm9uZVByb3BlcnRpZXMgPSB7XG4gICAgICAgIERvbWFpbk5hbWU6IHRoaXMubm9ybWFsaXplRG9tYWluTmFtZSh6b25lLmhvc3RlZFpvbmUuem9uZU5hbWUpLFxuICAgICAgICBIb3N0ZWRab25lSWQ6IHRoaXMubm9ybWFsaXplSG9zdGVkWm9uZUlkKHpvbmUuaG9zdGVkWm9uZS5ob3N0ZWRab25lSWQpLFxuICAgICAgICBWYWxpZGF0aW9uUm9sZUFybjogem9uZS52YWxpZGF0aW9uUm9sZT8ucm9sZUFybixcbiAgICAgICAgVmFsaWRhdGlvbkV4dGVybmFsSWQ6IHpvbmUudmFsaWRhdGlvbkV4dGVybmFsSWQsXG4gICAgICB9XG4gICAgICByZXR1cm4gW3Byb3BlcnRpZXMuRG9tYWluTmFtZSwgcHJvcGVydGllc11cbiAgICB9KVxuXG4gICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydGllcyA9IHtcbiAgICAgIERvbWFpbk5hbWU6IGRvbWFpbk5hbWUsXG4gICAgICBBbHRlcm5hdGl2ZURvbWFpbk5hbWVzOiBhbHRlcm5hdGl2ZURvbWFpbk5hbWVzLFxuICAgICAgVmFsaWRhdGlvbkhvc3RlZFpvbmVzOiBPYmplY3QuZnJvbUVudHJpZXModmFsaWRhdGlvbkhvc3RlZFpvbmVzKSxcbiAgICAgIENlcnRpZmljYXRlUmVnaW9uOiB0aGlzLmNlcnRpZmljYXRlUmVnaW9uLFxuICAgICAgQ2xlYW51cFZhbGlkYXRpb25SZWNvcmRzOiBib29sZWFuVG9TdHJpbmcocHJvcHMuY2xlYW51cFZhbGlkYXRpb25SZWNvcmRzID8/IHRydWUpLFxuICAgICAgVHJhbnNwYXJlbmN5TG9nZ2luZ0VuYWJsZWQ6IGJvb2xlYW5Ub1N0cmluZyhwcm9wcy50cmFuc3BhcmVuY3lMb2dnaW5nRW5hYmxlZCA/PyB0cnVlKSxcbiAgICAgIFRhZ3M6IGNkay5MYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMudGFncy5yZW5kZXJUYWdzKCkgfSkgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgUmVtb3ZhbFBvbGljeTogY2RrLkxhenkuc3RyaW5nKHsgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW1vdmFsUG9saWN5IH0pLFxuICAgIH1cblxuICAgIGNvbnN0IGNlcnRpZmljYXRlID0gbmV3IGNkay5DdXN0b21SZXNvdXJjZSh0aGlzLCAnUmVxdWVzdG9yUmVzb3VyY2UnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHJlcXVlc3RvclByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHJlc291cmNlVHlwZTogRE5TX1ZBTElEQVRFRF9DRVJUSUZJQ0FURV9UWVBFLFxuICAgICAgcHJvcGVydGllcyxcbiAgICB9KVxuXG4gICAgdGhpcy5jZXJ0aWZpY2F0ZUFybiA9IGNlcnRpZmljYXRlLmdldEF0dFN0cmluZygnQXJuJylcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKHtcbiAgICAgIHZhbGlkYXRlOiAoKSA9PlxuICAgICAgICB0aGlzLnZhbGlkYXRlRG9tYWluc1RvSG9zdGVkWm9uZXMoXG4gICAgICAgICAgYWxsRG9tYWlucyxcbiAgICAgICAgICB2YWxpZGF0aW9uSG9zdGVkWm9uZXMubWFwKChbem9uZU5hbWUsIF9dKSA9PiB6b25lTmFtZSlcbiAgICAgICAgKSxcbiAgICB9KVxuICB9XG5cbiAgbWV0cmljRGF5c1RvRXhwaXJ5KHByb3BzPzogY2RrLmF3c19jbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMgfCB1bmRlZmluZWQpOiBjZGsuYXdzX2Nsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLmRheXMoMSksXG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHsgQ2VydGlmaWNhdGVBcm46IHRoaXMuY2VydGlmaWNhdGVBcm4gfSxcbiAgICAgIG1ldHJpY05hbWU6ICdEYXlzVG9FeHBpcnknLFxuICAgICAgbmFtZXNwYWNlOiAnQVdTL0NlcnRpZmljYXRlTWFuYWdlcicsXG4gICAgICByZWdpb246IHRoaXMuY2VydGlmaWNhdGVSZWdpb24sXG4gICAgICBzdGF0aXN0aWM6IGNsb3Vkd2F0Y2guU3RhdHMuTUlOSU1VTSxcbiAgICB9KVxuICB9XG5cbiAgYXBwbHlSZW1vdmFsUG9saWN5KHBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92YWxQb2xpY3kgPSBwb2xpY3lcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplRG9tYWluTmFtZShkb21haW5OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGRvbWFpbk5hbWUpKSB7XG4gICAgICByZXR1cm4gZG9tYWluTmFtZVxuICAgIH1cbiAgICByZXR1cm4gY2xlYW5Eb21haW5OYW1lKGRvbWFpbk5hbWUpXG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUhvc3RlZFpvbmVJZChob3N0ZWRab25lSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoaG9zdGVkWm9uZUlkKSkge1xuICAgICAgcmV0dXJuIGhvc3RlZFpvbmVJZFxuICAgIH1cbiAgICByZXR1cm4gY2xlYW5Ib3N0ZWRab25lSWQoaG9zdGVkWm9uZUlkKVxuICB9XG5cbiAgcHJpdmF0ZSB3aWxkY2FyZERvbWFpbk5hbWUoaWQ6IHN0cmluZywgZG9tYWluTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IGNkay5Gbi5zcGxpdCgnLicsIGRvbWFpbk5hbWUpXG4gICAgY29uc3QgZmlyc3QgPSBjZGsuRm4uc2VsZWN0KDAsIHBhcnRzKVxuICAgIGNvbnN0IGlzV2lsZGNhcmQgPSBuZXcgY2RrLkNmbkNvbmRpdGlvbih0aGlzLCBgSXMke2lkfWAsIHtcbiAgICAgIGV4cHJlc3Npb246IGNkay5Gbi5jb25kaXRpb25FcXVhbHMoZmlyc3QsICcqJyksXG4gICAgfSlcbiAgICByZXR1cm4gY2RrLkZuLmNvbmRpdGlvbklmKGlzV2lsZGNhcmQubG9naWNhbElkLCBkb21haW5OYW1lLCBgKi4ke2RvbWFpbk5hbWV9YCkudG9TdHJpbmcoKVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZURvbWFpbnNUb0hvc3RlZFpvbmVzKGRvbWFpbk5hbWVzOiBzdHJpbmdbXSwgem9uZU5hbWVzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW11cbiAgICBmb3IgKGNvbnN0IGRvbWFpbk5hbWUgb2YgZG9tYWluTmFtZXMpIHtcbiAgICAgIGNvbnN0IHJlc29sdmFibGVEb21haW5OYW1lID0gIWNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoZG9tYWluTmFtZSlcbiAgICAgIGNvbnN0IHJlc29sdmFibGVab25lTmFtZXMgPSAhem9uZU5hbWVzLnNvbWUoKHpvbmVOYW1lKSA9PiBjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHpvbmVOYW1lKSlcbiAgICAgIGlmIChyZXNvbHZhYmxlRG9tYWluTmFtZSAmJiByZXNvbHZhYmxlWm9uZU5hbWVzICYmICF6b25lTmFtZXMuc29tZSgoem9uZU5hbWUpID0+IGRvbWFpbk5hbWUuZW5kc1dpdGgoem9uZU5hbWUpKSkge1xuICAgICAgICBlcnJvcnMucHVzaChgRG9tYWluICR7ZG9tYWluTmFtZX0gaXMgbm90IHByb3ZpZGVkIHdpdGggYXV0aG9yaXRhdGl2ZSBob3N0ZWQgem9uZWApXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnNcbiAgfVxufVxuIl19
|
package/lib/utils.d.ts
CHANGED
|
@@ -3,4 +3,8 @@ export declare const booleanToString: (value: boolean) => string;
|
|
|
3
3
|
export declare const stringToBoolean: (value: string) => boolean;
|
|
4
4
|
export declare const objectToString: (value: object) => string;
|
|
5
5
|
export declare const containsSame: <T>(array1: T[], array2: T[]) => boolean;
|
|
6
|
+
export declare const orderBySignificance: (domains: string[]) => string[];
|
|
7
|
+
export declare const cleanDomainName: (domainName: string) => string;
|
|
8
|
+
export declare const cleanHostedZoneId: (hostedZoneId: string) => string;
|
|
9
|
+
export declare const cleanChangeId: (changeId: string) => string;
|
|
6
10
|
export declare const tryFor: <T>(maxSeconds: number, timeoutError: string, fn: () => Promise<T | null>) => Promise<T>;
|
package/lib/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.tryFor = exports.containsSame = exports.objectToString = exports.stringToBoolean = exports.booleanToString = exports.sleep = void 0;
|
|
3
|
+
exports.tryFor = exports.cleanChangeId = exports.cleanHostedZoneId = exports.cleanDomainName = exports.orderBySignificance = exports.containsSame = exports.objectToString = exports.stringToBoolean = exports.booleanToString = exports.sleep = void 0;
|
|
4
4
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
5
5
|
exports.sleep = sleep;
|
|
6
6
|
const booleanToString = (value) => {
|
|
@@ -21,6 +21,37 @@ const containsSame = (array1, array2) => {
|
|
|
21
21
|
return array1.every((v1) => array2.includes(v1));
|
|
22
22
|
};
|
|
23
23
|
exports.containsSame = containsSame;
|
|
24
|
+
const orderBySignificance = (domains) => {
|
|
25
|
+
const copy = [...domains];
|
|
26
|
+
copy.sort((a, b) => {
|
|
27
|
+
const ac = a.split('.').length;
|
|
28
|
+
const bc = b.split('.').length;
|
|
29
|
+
if (ac > bc) {
|
|
30
|
+
return -1;
|
|
31
|
+
}
|
|
32
|
+
if (ac < bc) {
|
|
33
|
+
return 1;
|
|
34
|
+
}
|
|
35
|
+
return 0;
|
|
36
|
+
});
|
|
37
|
+
return copy;
|
|
38
|
+
};
|
|
39
|
+
exports.orderBySignificance = orderBySignificance;
|
|
40
|
+
const cleanDomainName = (domainName) => {
|
|
41
|
+
if (domainName.endsWith('.')) {
|
|
42
|
+
return domainName.slice(0, -1);
|
|
43
|
+
}
|
|
44
|
+
return domainName;
|
|
45
|
+
};
|
|
46
|
+
exports.cleanDomainName = cleanDomainName;
|
|
47
|
+
const cleanHostedZoneId = (hostedZoneId) => {
|
|
48
|
+
return hostedZoneId.replace(/^\/hostedzone\//, '');
|
|
49
|
+
};
|
|
50
|
+
exports.cleanHostedZoneId = cleanHostedZoneId;
|
|
51
|
+
const cleanChangeId = (changeId) => {
|
|
52
|
+
return changeId.replace('/change/', '');
|
|
53
|
+
};
|
|
54
|
+
exports.cleanChangeId = cleanChangeId;
|
|
24
55
|
const tryFor = async (maxSeconds, timeoutError, fn) => {
|
|
25
56
|
const startTime = Date.now();
|
|
26
57
|
// eslint-disable-next-line no-constant-condition
|
|
@@ -37,4 +68,4 @@ const tryFor = async (maxSeconds, timeoutError, fn) => {
|
|
|
37
68
|
}
|
|
38
69
|
};
|
|
39
70
|
exports.tryFor = tryFor;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQU8sTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFBekUsUUFBQSxLQUFLLFNBQW9FO0FBRS9FLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBYyxFQUFVLEVBQUU7SUFDeEQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFBO0FBQ2pDLENBQUMsQ0FBQTtBQUZZLFFBQUEsZUFBZSxtQkFFM0I7QUFFTSxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQWEsRUFBVyxFQUFFO0lBQ3hELE9BQU8sS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFDeEMsQ0FBQyxDQUFBO0FBRlksUUFBQSxlQUFlLG1CQUUzQjtBQUVNLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYSxFQUFVLEVBQUU7SUFDdEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDNUMsQ0FBQyxDQUFBO0FBRlksUUFBQSxjQUFjLGtCQUUxQjtBQUVNLE1BQU0sWUFBWSxHQUFHLENBQUksTUFBVyxFQUFFLE1BQVcsRUFBVyxFQUFFO0lBQ25FLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQ2pELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ2xELENBQUMsQ0FBQTtBQUhZLFFBQUEsWUFBWSxnQkFHeEI7QUFFTSxNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBaUIsRUFBWSxFQUFFO0lBQ2pFLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQTtJQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQzlCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQzlCLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNYLE9BQU8sQ0FBQyxDQUFDLENBQUE7U0FDVjtRQUNELElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNYLE9BQU8sQ0FBQyxDQUFBO1NBQ1Q7UUFDRCxPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUMsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDLENBQUE7QUFkWSxRQUFBLG1CQUFtQix1QkFjL0I7QUFFTSxNQUFNLGVBQWUsR0FBRyxDQUFDLFVBQWtCLEVBQVUsRUFBRTtJQUM1RCxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDNUIsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQy9CO0lBQ0QsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQyxDQUFBO0FBTFksUUFBQSxlQUFlLG1CQUszQjtBQUVNLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxZQUFvQixFQUFVLEVBQUU7SUFDaEUsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ3BELENBQUMsQ0FBQTtBQUZZLFFBQUEsaUJBQWlCLHFCQUU3QjtBQUVNLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBZ0IsRUFBVSxFQUFFO0lBQ3hELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDekMsQ0FBQyxDQUFBO0FBRlksUUFBQSxhQUFhLGlCQUV6QjtBQUVNLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFBSyxVQUFrQixFQUFFLFlBQW9CLEVBQUUsRUFBMkIsRUFBYyxFQUFFO0lBQ25ILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUM1QixpREFBaUQ7SUFDakQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3pCLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsR0FBRyxVQUFVLEdBQUcsSUFBSSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7U0FDOUI7UUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFBO1FBQ3pCLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtZQUNuQixPQUFPLE1BQU0sQ0FBQTtTQUNkO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDM0IsTUFBTSxJQUFBLGFBQUssRUFBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUE7S0FDcEQ7QUFDSCxDQUFDLENBQUE7QUFkWSxRQUFBLE1BQU0sVUFjbEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3Qgc2xlZXAgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKVxuXG5leHBvcnQgY29uc3QgYm9vbGVhblRvU3RyaW5nID0gKHZhbHVlOiBib29sZWFuKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIHZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJ1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaW5nVG9Cb29sZWFuID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IG9iamVjdFRvU3RyaW5nID0gKHZhbHVlOiBvYmplY3QpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIHVuZGVmaW5lZCwgMilcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnRhaW5zU2FtZSA9IDxUPihhcnJheTE6IFRbXSwgYXJyYXkyOiBUW10pOiBib29sZWFuID0+IHtcbiAgaWYgKGFycmF5MS5sZW5ndGggIT09IGFycmF5Mi5sZW5ndGgpIHJldHVybiBmYWxzZVxuICByZXR1cm4gYXJyYXkxLmV2ZXJ5KCh2MSkgPT4gYXJyYXkyLmluY2x1ZGVzKHYxKSlcbn1cblxuZXhwb3J0IGNvbnN0IG9yZGVyQnlTaWduaWZpY2FuY2UgPSAoZG9tYWluczogc3RyaW5nW10pOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IGNvcHkgPSBbLi4uZG9tYWluc11cbiAgY29weS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYWMgPSBhLnNwbGl0KCcuJykubGVuZ3RoXG4gICAgY29uc3QgYmMgPSBiLnNwbGl0KCcuJykubGVuZ3RoXG4gICAgaWYgKGFjID4gYmMpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICBpZiAoYWMgPCBiYykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfSlcbiAgcmV0dXJuIGNvcHlcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFuRG9tYWluTmFtZSA9IChkb21haW5OYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoZG9tYWluTmFtZS5lbmRzV2l0aCgnLicpKSB7XG4gICAgcmV0dXJuIGRvbWFpbk5hbWUuc2xpY2UoMCwgLTEpXG4gIH1cbiAgcmV0dXJuIGRvbWFpbk5hbWVcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFuSG9zdGVkWm9uZUlkID0gKGhvc3RlZFpvbmVJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGhvc3RlZFpvbmVJZC5yZXBsYWNlKC9eXFwvaG9zdGVkem9uZVxcLy8sICcnKVxufVxuXG5leHBvcnQgY29uc3QgY2xlYW5DaGFuZ2VJZCA9IChjaGFuZ2VJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGNoYW5nZUlkLnJlcGxhY2UoJy9jaGFuZ2UvJywgJycpXG59XG5cbmV4cG9ydCBjb25zdCB0cnlGb3IgPSBhc3luYyA8VD4obWF4U2Vjb25kczogbnVtYmVyLCB0aW1lb3V0RXJyb3I6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8VCB8IG51bGw+KTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICBmb3IgKGxldCBpID0gMDsgdHJ1ZTsgaSsrKSB7XG4gICAgaWYgKERhdGUubm93KCkgPiBzdGFydFRpbWUgKyBtYXhTZWNvbmRzICogMTAwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbWVvdXRFcnJvcilcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oKVxuICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gICAgY29uc3QgYmFzZSA9IE1hdGgucG93KDIsIGkpXG4gICAgYXdhaXQgc2xlZXAoTWF0aC5yYW5kb20oKSAqIGJhc2UgKiA1MCArIGJhc2UgKiAxNTApXG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"jsii-pacmak": "^1.97.0",
|
|
65
65
|
"jsii-rosetta": "~5.0.0",
|
|
66
66
|
"prettier": "^2.8.8",
|
|
67
|
-
"projen": "^0.81.
|
|
67
|
+
"projen": "^0.81.1",
|
|
68
68
|
"standard-version": "^9",
|
|
69
69
|
"ts-jest": "^29.1.2",
|
|
70
70
|
"ts-node": "^10.9.2",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"publishConfig": {
|
|
88
88
|
"access": "public"
|
|
89
89
|
},
|
|
90
|
-
"version": "0.0
|
|
90
|
+
"version": "0.1.0",
|
|
91
91
|
"jest": {
|
|
92
92
|
"testMatch": [
|
|
93
93
|
"<rootDir>/src/**/__tests__/**/*.ts?(x)",
|