@fjall/components-infrastructure 0.88.3 → 0.88.4
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/dist/lib/app.d.ts +33 -10
- package/dist/lib/app.js +79 -36
- package/dist/lib/aspects/index.d.ts +1 -0
- package/dist/lib/aspects/index.js +6 -0
- package/dist/lib/config/aws/accountAuditRole.d.ts +20 -0
- package/dist/lib/config/aws/accountAuditRole.js +38 -0
- package/dist/lib/config/aws/accountMonitoringRole.d.ts +22 -0
- package/dist/lib/config/aws/accountMonitoringRole.js +133 -0
- package/dist/lib/config/aws/cloudTrail.d.ts +0 -3
- package/dist/lib/config/aws/cloudTrail.js +2 -2
- package/dist/lib/config/aws/disasterRecovery.js +26 -14
- package/dist/lib/config/aws/ecrDefaultImage.js +4 -3
- package/dist/lib/config/aws/index.d.ts +4 -0
- package/dist/lib/config/aws/index.js +5 -1
- package/dist/lib/config/aws/oidcConnector.d.ts +8 -0
- package/dist/lib/config/aws/oidcConnector.js +46 -0
- package/dist/lib/config/aws/platform.d.ts +2 -0
- package/dist/lib/config/aws/platform.js +6 -0
- package/dist/lib/config/index.d.ts +2 -0
- package/dist/lib/config/index.js +21 -0
- package/dist/lib/patterns/aws/account.js +22 -10
- package/dist/lib/patterns/aws/cdn.d.ts +19 -40
- package/dist/lib/patterns/aws/cdn.js +21 -17
- package/dist/lib/patterns/aws/compute.d.ts +6 -7
- package/dist/lib/patterns/aws/compute.js +7 -9
- package/dist/lib/patterns/aws/database.d.ts +7 -87
- package/dist/lib/patterns/aws/database.js +15 -38
- package/dist/lib/patterns/aws/index.d.ts +1 -1
- package/dist/lib/patterns/aws/index.js +2 -2
- package/dist/lib/patterns/aws/interfaces/cdn.d.ts +26 -0
- package/dist/lib/patterns/aws/interfaces/cdn.js +14 -0
- package/dist/lib/patterns/aws/interfaces/connector.d.ts +4 -181
- package/dist/lib/patterns/aws/interfaces/connector.js +16 -113
- package/dist/lib/patterns/aws/interfaces/index.d.ts +1 -0
- package/dist/lib/patterns/aws/interfaces/index.js +5 -2
- package/dist/lib/patterns/aws/interfaces/pattern.d.ts +6 -6
- package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
- package/dist/lib/patterns/aws/network.js +6 -9
- package/dist/lib/patterns/aws/organisation.d.ts +4 -2
- package/dist/lib/patterns/aws/organisation.js +21 -8
- package/dist/lib/patterns/aws/payload.js +11 -12
- package/dist/lib/patterns/aws/storage.d.ts +3 -2
- package/dist/lib/patterns/aws/storage.js +1 -1
- package/dist/lib/resources/aws/audit/auditRole.js +4 -4
- package/dist/lib/resources/aws/audit/index.d.ts +1 -0
- package/dist/lib/resources/aws/audit/index.js +6 -0
- package/dist/lib/resources/aws/backup/backupPlan.js +3 -2
- package/dist/lib/resources/aws/backup/backupVault.js +5 -3
- package/dist/lib/resources/aws/base/awsStack.d.ts +4 -2
- package/dist/lib/resources/aws/base/awsStack.js +8 -2
- package/dist/lib/resources/aws/cdn/cloudFront.d.ts +14 -0
- package/dist/lib/resources/aws/cdn/cloudFront.js +52 -18
- package/dist/lib/resources/aws/compute/ec2.js +18 -22
- package/dist/lib/resources/aws/compute/ecs.d.ts +9 -8
- package/dist/lib/resources/aws/compute/ecs.js +53 -41
- package/dist/lib/resources/aws/compute/index.d.ts +1 -0
- package/dist/lib/resources/aws/compute/index.js +2 -1
- package/dist/lib/resources/aws/compute/lambda.d.ts +0 -2
- package/dist/lib/resources/aws/compute/lambda.js +12 -27
- package/dist/lib/resources/aws/database/dynamodb.js +3 -13
- package/dist/lib/resources/aws/database/index.d.ts +8 -2
- package/dist/lib/resources/aws/database/index.js +19 -3
- package/dist/lib/resources/aws/database/rdsAurora.d.ts +2 -3
- package/dist/lib/resources/aws/database/rdsAurora.js +32 -68
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +6 -6
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +25 -29
- package/dist/lib/resources/aws/database/rdsDefaults.d.ts +11 -0
- package/dist/lib/resources/aws/database/rdsDefaults.js +15 -0
- package/dist/lib/resources/aws/database/rdsHelpers.d.ts +39 -0
- package/dist/lib/resources/aws/database/rdsHelpers.js +75 -0
- package/dist/lib/resources/aws/database/rdsInstance.d.ts +7 -8
- package/dist/lib/resources/aws/database/rdsInstance.js +40 -84
- package/dist/lib/resources/aws/database/rdsProxyOutput.d.ts +7 -0
- package/dist/lib/resources/aws/database/rdsProxyOutput.js +18 -0
- package/dist/lib/resources/aws/iam/index.d.ts +0 -1
- package/dist/lib/resources/aws/iam/index.js +1 -2
- package/dist/lib/resources/aws/index.d.ts +0 -1
- package/dist/lib/resources/aws/index.js +1 -2
- package/dist/lib/resources/aws/logging/cloudTrail.js +13 -3
- package/dist/lib/resources/aws/logging/index.d.ts +2 -0
- package/dist/lib/resources/aws/logging/index.js +19 -0
- package/dist/lib/resources/aws/messaging/index.d.ts +3 -2
- package/dist/lib/resources/aws/messaging/index.js +4 -3
- package/dist/lib/resources/aws/messaging/sqs.js +14 -11
- package/dist/lib/resources/aws/messaging/utils.d.ts +1 -2
- package/dist/lib/resources/aws/messaging/utils.js +3 -4
- package/dist/lib/resources/aws/monitoring/index.d.ts +0 -1
- package/dist/lib/resources/aws/monitoring/index.js +4 -17
- package/dist/lib/resources/aws/networking/hostedZone.d.ts +28 -0
- package/dist/lib/resources/aws/networking/hostedZone.js +153 -0
- package/dist/lib/resources/aws/networking/index.d.ts +2 -0
- package/dist/lib/resources/aws/networking/index.js +3 -1
- package/dist/lib/resources/aws/networking/ipamPool.js +57 -31
- package/dist/lib/resources/aws/networking/securityGroup.d.ts +5 -0
- package/dist/lib/resources/aws/networking/securityGroup.js +14 -0
- package/dist/lib/resources/aws/networking/vpc.js +9 -4
- package/dist/lib/resources/aws/organisation/costAllocationTagActivator.d.ts +17 -0
- package/dist/lib/resources/aws/organisation/costAllocationTagActivator.js +66 -0
- package/dist/lib/resources/aws/organisation/index.d.ts +1 -0
- package/dist/lib/resources/aws/organisation/index.js +4 -2
- package/dist/lib/resources/aws/secrets/index.d.ts +0 -1
- package/dist/lib/resources/aws/secrets/index.js +1 -2
- package/dist/lib/resources/aws/storage/ecr.d.ts +0 -1
- package/dist/lib/resources/aws/storage/ecr.js +5 -5
- package/dist/lib/resources/aws/storage/s3.d.ts +3 -3
- package/dist/lib/resources/aws/storage/s3.js +1 -1
- package/dist/lib/resources/aws/utilities/index.d.ts +5 -0
- package/dist/lib/resources/aws/utilities/index.js +22 -0
- package/dist/lib/utils/backupTierMapping.d.ts +11 -0
- package/dist/lib/utils/backupTierMapping.js +17 -0
- package/dist/lib/utils/capitaliseString.d.ts +6 -0
- package/dist/lib/utils/capitaliseString.js +10 -1
- package/dist/lib/utils/connections.d.ts +46 -0
- package/dist/lib/utils/connections.js +159 -0
- package/dist/lib/utils/connector.d.ts +183 -0
- package/dist/lib/utils/connector.js +117 -0
- package/dist/lib/utils/databaseTypes.d.ts +85 -0
- package/dist/lib/utils/databaseTypes.js +34 -0
- package/dist/lib/utils/env.d.ts +42 -0
- package/dist/lib/utils/env.js +128 -0
- package/dist/lib/utils/getConfig.d.ts +0 -5
- package/dist/lib/utils/getConfig.js +1 -4
- package/dist/lib/utils/index.d.ts +6 -0
- package/dist/lib/utils/index.js +7 -1
- package/dist/lib/utils/removalPolicy.d.ts +2 -0
- package/dist/lib/utils/removalPolicy.js +16 -0
- package/dist/lib/utils/standardTagsAspect.d.ts +4 -0
- package/dist/lib/utils/standardTagsAspect.js +8 -8
- package/dist/lib/utils/vpcUtils.d.ts +14 -0
- package/dist/lib/utils/vpcUtils.js +28 -0
- package/package.json +6 -6
|
@@ -64,7 +64,8 @@ const PAYLOAD_DEFAULTS = {
|
|
|
64
64
|
REVALIDATION_TIMEOUT: 300
|
|
65
65
|
},
|
|
66
66
|
CACHE: {
|
|
67
|
-
|
|
67
|
+
/** 1 year — static assets are content-hashed so long caching is safe; maximises CDN hit rate */
|
|
68
|
+
MAX_AGE_SECONDS: 31536000
|
|
68
69
|
},
|
|
69
70
|
OPENNEXT: {
|
|
70
71
|
ASSETS: ".open-next/assets",
|
|
@@ -80,14 +81,6 @@ const PAYLOAD_DEFAULTS = {
|
|
|
80
81
|
ADMIN: "/admin/*"
|
|
81
82
|
}
|
|
82
83
|
};
|
|
83
|
-
/**
|
|
84
|
-
* Convert a name to a valid RDS database name (snake_case).
|
|
85
|
-
* RDS API allows letters, numbers, and underscores for PostgreSQL/MySQL DatabaseName.
|
|
86
|
-
* Hyphens are rejected, so convert them to underscores.
|
|
87
|
-
*/
|
|
88
|
-
function toValidDatabaseName(name) {
|
|
89
|
-
return (0, capitaliseString_js_1.toKebab)(name).replace(/-/g, "_");
|
|
90
|
-
}
|
|
91
84
|
/**
|
|
92
85
|
* Extract root domain from a full domain name.
|
|
93
86
|
* e.g., "cms.example.com" -> "example.com"
|
|
@@ -174,14 +167,14 @@ class Payload extends constructs_1.Construct {
|
|
|
174
167
|
}
|
|
175
168
|
buildBaseDatabaseProps(dbConfig) {
|
|
176
169
|
return {
|
|
177
|
-
databaseName: dbConfig.databaseName ?? toValidDatabaseName(this.props.name),
|
|
170
|
+
databaseName: dbConfig.databaseName ?? (0, capitaliseString_js_1.toValidDatabaseName)(this.props.name),
|
|
178
171
|
databaseEngine: dbConfig.databaseEngine ?? "postgresql",
|
|
179
172
|
backupRetention: dbConfig.backupRetention ?? PAYLOAD_DEFAULTS.DATABASE.BACKUP_RETENTION,
|
|
180
173
|
deletionProtection: dbConfig.deletionProtection ??
|
|
181
174
|
PAYLOAD_DEFAULTS.DATABASE.DELETION_PROTECTION,
|
|
182
175
|
publiclyAccessible: dbConfig.publiclyAccessible,
|
|
183
176
|
port: dbConfig.port,
|
|
184
|
-
|
|
177
|
+
databaseInsights: dbConfig.databaseInsights,
|
|
185
178
|
proxy: dbConfig.proxy,
|
|
186
179
|
credentials: dbConfig.credentials,
|
|
187
180
|
snapshotIdentifier: dbConfig.snapshotIdentifier,
|
|
@@ -480,6 +473,9 @@ class Payload extends constructs_1.Construct {
|
|
|
480
473
|
}
|
|
481
474
|
resolveSimpleDomain() {
|
|
482
475
|
const domain = this.props.domain;
|
|
476
|
+
if (!domain) {
|
|
477
|
+
throw new Error("Domain is required for simple domain resolution");
|
|
478
|
+
}
|
|
483
479
|
const rootDomain = extractRootDomain(domain);
|
|
484
480
|
const hostedZone = aws_route53_1.HostedZone.fromLookup(this, `${this.pascalName}HostedZone`, { domainName: rootDomain });
|
|
485
481
|
const certificate = new aws_certificatemanager_1.Certificate(this, `${this.pascalName}Certificate`, {
|
|
@@ -490,6 +486,9 @@ class Payload extends constructs_1.Construct {
|
|
|
490
486
|
}
|
|
491
487
|
resolveAdvancedDomain() {
|
|
492
488
|
const cdnConfig = this.props.cdn;
|
|
489
|
+
if (!cdnConfig?.domainNames?.length) {
|
|
490
|
+
throw new Error("CDN domain names are required for advanced domain resolution");
|
|
491
|
+
}
|
|
493
492
|
const certificate = cdnConfig.certificate ??
|
|
494
493
|
(cdnConfig.certificateArn
|
|
495
494
|
? aws_certificatemanager_1.Certificate.fromCertificateArn(this, `${this.pascalName}Certificate`, cdnConfig.certificateArn)
|
|
@@ -582,4 +581,4 @@ class Payload extends constructs_1.Construct {
|
|
|
582
581
|
}
|
|
583
582
|
}
|
|
584
583
|
exports.Payload = Payload;
|
|
585
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7OztBQUVILDJDQUF1QztBQUN2Qyw2Q0FBK0M7QUFDL0MseURBQXFEO0FBQ3JELHVEQU1nQztBQUNoQywrRUFJNEM7QUFDNUMseURBQTRFO0FBQzVFLHlFQUFtRTtBQUtuRSwrQ0FPdUI7QUFDdkIsNkNBS3NCO0FBQ3RCLDZDQUEwRTtBQUMxRSxpREFJd0I7QUFDeEIscUNBQW9FO0FBQ3BFLHlFQUE4RDtBQUM5RCx5RUFBd0U7QUFFeEUsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixxRkFBcUY7SUFDckYsTUFBTSxFQUFFLE9BQU87SUFDZixtRkFBbUY7SUFDbkYsZUFBZSxFQUFFLFdBQVc7SUFDNUIsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQW1CO1FBQ3pCLDhFQUE4RTtRQUM5RSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLG1CQUFtQixFQUFFLElBQUk7S0FDMUI7SUFDRCxPQUFPLEVBQUU7UUFDUCw2RkFBNkY7UUFDN0YsYUFBYSxFQUFFLElBQUk7UUFDbkIsK0RBQStEO1FBQy9ELGNBQWMsRUFBRSxFQUFFO1FBQ2xCLDJFQUEyRTtRQUMzRSxZQUFZLEVBQUUsSUFBSTtRQUNsQix3RUFBd0U7UUFDeEUsYUFBYSxFQUFFLEVBQUU7UUFDakIsNEZBQTRGO1FBQzVGLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsK0VBQStFO1FBQy9FLG9CQUFvQixFQUFFLEdBQUc7S0FDMUI7SUFDRCxLQUFLLEVBQUU7UUFDTCxlQUFlLEVBQUUsUUFBUSxDQUFDLFNBQVM7S0FDcEM7SUFDRCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsbUJBQW1CO1FBQzNCLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsTUFBTSxFQUFFLHFDQUFxQztRQUM3QyxLQUFLLEVBQUUsd0NBQXdDO1FBQy9DLFlBQVksRUFBRSxrQ0FBa0M7S0FDakQ7SUFDRCxLQUFLLEVBQUU7UUFDTCxNQUFNLEVBQUUsaUJBQWlCO1FBQ3pCLEtBQUssRUFBRSxlQUFlO1FBQ3RCLEdBQUcsRUFBRSxRQUFRO1FBQ2IsS0FBSyxFQUFFLFVBQVU7S0FDbEI7Q0FDTyxDQUFDO0FBRVg7Ozs7R0FJRztBQUNILFNBQVMsbUJBQW1CLENBQUMsSUFBWTtJQUN2QyxPQUFPLElBQUEsNkJBQU8sRUFBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLE1BQWM7SUFDdkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDL0QsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLE9BQXNCLEVBQUUsSUFBWTtJQUMzRCxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1IsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLElBQUkscUNBQXFDO1lBQzFDLGdFQUFnRSxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQThCRDs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQzFCLE1BRWEsRUFDYixRQUE2QztJQUU3QyxPQUFPO1FBQ0wsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLElBQUksUUFBUSxDQUFDLE1BQU07UUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksUUFBUSxDQUFDLE9BQU87UUFDNUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLG9CQUFvQjtLQUNuRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLE9BQVEsU0FBUSxzQkFBUztJQTBCcEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxHQUFRLEVBQUUsS0FBb0I7UUFDdEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQTFCSCxnQkFBVyxHQUFHLFNBQWtCLENBQUM7UUE0Qi9DLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFBLGtDQUFZLEVBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxnQkFBTSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGVBQWUsRUFBRTtZQUN4RSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxpQkFBaUI7WUFDMUMsV0FBVyxFQUFFLDBCQUEwQixLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ25ELG9CQUFvQixFQUFFO2dCQUNwQixrQkFBa0IsRUFBRSxJQUFJO2dCQUN4QixjQUFjLEVBQUUsRUFBRTthQUNuQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLGVBQWUsR0FBb0I7WUFDdkMsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ3JCLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO1NBQ2hDLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxhQUFhO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUMzQyxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hDLGlDQUFXLENBQUMsSUFBSSxDQUNkLHFCQUFxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksNkNBQTZDO2dCQUMvRSxrRUFBa0UsQ0FDckUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDM0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBRXJFLElBQUksQ0FBQyxTQUFTO1lBQ1osWUFBWSxLQUFLLFFBQVE7Z0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDO2dCQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsUUFBZ0Q7UUFFaEQsT0FBTztZQUNMLFlBQVksRUFDVixRQUFRLENBQUMsWUFBWSxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQy9ELGNBQWMsRUFBRSxRQUFRLENBQUMsY0FBYyxJQUFJLFlBQVk7WUFDdkQsZUFBZSxFQUNiLFFBQVEsQ0FBQyxlQUFlLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtZQUN4RSxrQkFBa0IsRUFDaEIsUUFBUSxDQUFDLGtCQUFrQjtnQkFDM0IsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLG1CQUFtQjtZQUMvQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsa0JBQWtCO1lBQy9DLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtZQUNuQixtQkFBbUIsRUFBRSxRQUFRLENBQUMsbUJBQW1CO1lBQ2pELEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztZQUNyQixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7WUFDakMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLGtCQUFrQjtZQUMvQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO1NBQzVDLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CLENBQzFCLFFBQWdEO1FBRWhELE1BQU0sV0FBVyxHQUF3QjtZQUN2QyxJQUFJLEVBQUUsUUFBUTtZQUNkLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztZQUN4QyxhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWE7WUFDckMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUErQztZQUNwRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ3pCLGNBQWMsRUFBRSxRQUFRLENBQUMsY0FBYztZQUN2QyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsa0JBQWtCO1lBQy9DLDBCQUEwQixFQUFFLFFBQVEsQ0FBQywwQkFBMEI7U0FDaEUsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQ3pCLDZCQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUVPLHNCQUFzQixDQUM1QixRQUFnRDtRQUVoRCxNQUFNLGFBQWEsR0FBMEI7WUFDM0MsSUFBSSxFQUFFLFVBQVU7WUFDaEIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1lBQ3hDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsSUFBSSxLQUFLO1lBQ3hELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO1lBQzNDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztZQUN6QixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7WUFDakMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFpRDtTQUN2RSxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FDekIsNkJBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQ3RELENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBWTtZQUMzQixTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVMsSUFBSSxLQUFLO1lBQzFDLFVBQVUsRUFBRTtnQkFDVixNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDeEUsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsZUFBZTtvQkFDOUMsU0FBUyxFQUFFLElBQUk7aUJBQ2hCO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FDeEIsMkJBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUMvRCxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3BELE1BQU0sVUFBVSxHQUFZO1lBQzFCLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxJQUFJLEtBQUs7WUFDekMsVUFBVSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO2dCQUN2RSxLQUFLLEVBQUUsS0FBSyxDQUFDLDRCQUE0QjthQUMxQztTQUNGLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUN4QiwyQkFBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQzdELENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEQsTUFBTSxVQUFVLEdBQVk7WUFDMUIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTLElBQUksS0FBSztTQUMxQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FDeEIsMkJBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUM3RCxDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxhQUFhLEdBQTBCO1lBQzNDLElBQUksRUFBRSxVQUFVO1lBQ2hCLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUN4QyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDcEMsc0JBQXNCLEVBQUU7Z0JBQ3RCO29CQUNFLFNBQVMsRUFBRSxZQUFZO29CQUN2QixZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7b0JBQ3pDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtpQkFDOUM7YUFDRjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUNuQyw2QkFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQ3JFLENBQUM7SUFDSixDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztRQUNsRSxNQUFNLG1CQUFtQixHQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTztZQUN6QyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7UUFFaEQsbUNBQW1DO1FBQ25DLElBQUksU0FBeUMsQ0FBQztRQUM5QyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDMUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN4QixDQUFDO2FBQU0sSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkMsU0FBUyxHQUFHO2dCQUNWLE9BQU8sRUFBRSxXQUFXLENBQUMsZUFBZSxDQUFDLE9BQU8sSUFBSSxJQUFJO2dCQUNwRCxlQUFlLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxlQUFlLElBQUksQ0FBQzthQUNsRSxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNwRCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQWdCO1lBQzlCLElBQUksRUFBRSxPQUFPO1lBQ2IsU0FBUyxFQUFFLE1BQU07WUFDakIsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLGlCQUFpQixJQUFJLG1CQUFtQjtZQUN2RSxzQkFBc0IsRUFBRSxXQUFXLENBQUMsc0JBQXNCO1lBQzFELGNBQWMsRUFBRSxXQUFXLENBQUMsY0FBYztZQUMxQyx5QkFBeUIsRUFBRSxJQUFJO1lBQy9CLGVBQWUsRUFBRSxTQUFTO1NBQzNCLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQzdDLCtCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQ3RFLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLG1CQUFtQixDQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQzFCO1lBQ0UsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhO1lBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsY0FBYztTQUNqRCxDQUNGLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBb0I7WUFDbkMsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsTUFBTTtZQUNsQixJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQ2xCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FDakU7WUFDRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLFlBQVksRUFBRSx5QkFBWSxDQUFDLE1BQU07WUFDakMsVUFBVTtZQUNWLE9BQU87WUFDUCxvQkFBb0I7WUFDcEIsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxnQ0FBbUIsQ0FBQyxJQUFJO2dCQUNsQyxVQUFVLEVBQUUsdUJBQVUsQ0FBQyxlQUFlO2FBQ3ZDO1lBQ0QsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM3QixhQUFhLEVBQUU7Z0JBQ2IsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVM7cUJBQzlCLGNBQWMsRUFBRTtxQkFDaEIsU0FBUyxDQUFDLFVBQVUsQ0FBQztnQkFDeEIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVM7cUJBQzlCLGNBQWMsRUFBRTtxQkFDaEIsU0FBUyxDQUFDLFVBQVUsQ0FBQztnQkFDeEIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFO2FBQ2hEO1lBQ0QsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtTQUMzQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2hDLDJCQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FDL0QsQ0FBQztRQUVGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE1BQU0sT0FBTyxHQUEyQjtZQUN0QyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUU7WUFDL0MsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQzNDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRTtZQUMvQyxZQUFZLEVBQUUsTUFBTTtZQUNwQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRTtZQUNwRCxtQkFBbUIsRUFBRSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO1lBQzFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFO1lBQ2pELHNCQUFzQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUU7WUFDN0QseUJBQXlCLEVBQUUsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtZQUNoRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRTtTQUNyRCxDQUFDO1FBRUYsZ0RBQWdEO1FBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNFLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLHNCQUFzQixHQUFHLFdBQVcsWUFBWSxFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUVELE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQXFCO1FBQ2xELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLG1CQUFtQixDQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFDckM7WUFDRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFlBQVk7WUFDN0MsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhO1NBQ2hELENBQ0YsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFvQjtZQUNsQyxJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FDbEIsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUNoRTtZQUNELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsWUFBWSxFQUFFLHlCQUFZLENBQUMsTUFBTTtZQUNqQyxVQUFVO1lBQ1YsT0FBTztZQUNQLG9CQUFvQjtZQUNwQixXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsZ0NBQW1CLENBQUMsSUFBSSxFQUFFO1lBQ25ELFdBQVcsRUFBRTtnQkFDWCxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUU7Z0JBQy9DLGlCQUFpQixFQUFFLFNBQVM7YUFDN0I7U0FDRixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQy9CLDJCQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FDN0QsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU1QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxtQkFBbUIsQ0FDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUNoQztZQUNFLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsbUJBQW1CO1lBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsb0JBQW9CO1NBQ3ZELENBQ0YsQ0FBQztRQUVGLE1BQU0saUJBQWlCLEdBQW9CO1lBQ3pDLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLE1BQU07WUFDbEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUNsQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQ3ZFO1lBQ0QsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixZQUFZLEVBQUUseUJBQVksQ0FBQyxNQUFNO1lBQ2pDLFVBQVU7WUFDVixPQUFPO1lBQ1Asb0JBQW9CO1lBQ3BCLFdBQVcsRUFBRTtnQkFDWCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRTtnQkFDakQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUU7YUFDckQ7U0FDRixDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ3RDLDJCQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxDQUMzRSxDQUFDO1FBRUYsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1RCxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDdkUsU0FBUyxFQUFFLENBQUM7U0FDYixDQUFDLENBQUM7UUFFSCxNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFbkUsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVPLFNBQVM7UUFDZixNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRWhFLE1BQU0sUUFBUSxHQUFrQjtZQUM5QixVQUFVLEVBQUUsTUFBTTtZQUNsQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsV0FBVyxFQUFFLGtCQUFrQjtZQUMvQixxQkFBcUIsRUFBRSxLQUFLO1lBQzVCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixXQUFXO1lBQ1gsV0FBVztZQUNYLFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU07b0JBQzFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYTtvQkFDMUIsV0FBVyxFQUFFLG1CQUFtQjtpQkFDakM7Z0JBQ0Q7b0JBQ0UsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLO29CQUN6QyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtvQkFDL0IsV0FBVyxFQUFFLG1CQUFtQjtpQkFDakM7Z0JBQ0Q7b0JBQ0UsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHO29CQUN2QyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3BCLFdBQVcsRUFBRSxrQkFBa0I7b0JBQy9CLGNBQWMsRUFBRSxLQUFLO2lCQUN0QjtnQkFDRDtvQkFDRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUs7b0JBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDcEIsV0FBVyxFQUFFLGtCQUFrQjtvQkFDL0IsY0FBYyxFQUFFLEtBQUs7aUJBQ3RCO2dCQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDO2FBQ3RDO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsbUJBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sbUJBQW1CO1FBS3pCLElBQUksSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFdEQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDcEQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdEQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZUFBZSxHQUFHO2dCQUNyQixXQUFXLEVBQUUsU0FBUztnQkFDdEIsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLFVBQVUsRUFBRSxTQUFTO2FBQ3RCLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFTyxtQkFBbUI7UUFLekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFPLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0MsTUFBTSxVQUFVLEdBQUcsd0JBQVUsQ0FBQyxVQUFVLENBQ3RDLElBQUksRUFDSixHQUFHLElBQUksQ0FBQyxVQUFVLFlBQVksRUFDOUIsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQzNCLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLG9DQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsYUFBYSxFQUFFO1lBQ3pFLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFVBQVUsRUFBRSw4Q0FBcUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1NBQ3RELENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVPLHFCQUFxQjtRQUszQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUksQ0FBQztRQUNsQyxNQUFNLFdBQVcsR0FDZixTQUFTLENBQUMsV0FBVztZQUNyQixDQUFDLFNBQVMsQ0FBQyxjQUFjO2dCQUN2QixDQUFDLENBQUMsb0NBQVcsQ0FBQyxrQkFBa0IsQ0FDNUIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLFVBQVUsYUFBYSxFQUMvQixTQUFTLENBQUMsY0FBYyxDQUN6QjtnQkFDSCxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakIsT0FBTztZQUNMLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBWTtZQUNuQyxXQUFXO1lBQ1gsVUFBVSxFQUFFLFNBQVM7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRS9CLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFeEIsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSxtRUFBbUU7UUFDbkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFELElBQUkscUJBQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxhQUFhLEVBQUU7WUFDckQsSUFBSSxFQUFFLFVBQVU7WUFDaEIsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUM3QixNQUFNLEVBQUUsMEJBQVksQ0FBQyxTQUFTLENBQzVCLElBQUksc0NBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUNsRDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWEsRUFBRTtZQUNuRCxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxhQUFhO1lBQ3BDLEtBQUssRUFBRSxTQUFTO1lBQ2hCLFdBQVcsRUFBRSxvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDbkQsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWEsRUFBRTtZQUNuRCxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxhQUFhO1lBQ3BDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDdEIsV0FBVyxFQUFFLG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtTQUNuRCxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsZ0JBQWdCLEVBQUU7WUFDdEQsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsZ0JBQWdCO1lBQ3ZDLEtBQUssRUFBRTtnQkFDTCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTO2dCQUMzQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRO2dCQUMxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlO2FBQ2xDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNYLFdBQVcsRUFBRSx5Q0FBeUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDeEUsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGtCQUFrQixFQUFFO1lBQ3hELEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGtCQUFrQjtZQUN6QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDcEIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxDQUFDO2dCQUM1RCxPQUFPLEVBQUU7b0JBQ1AsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUztvQkFDM0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUTtvQkFDMUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUTtpQkFDM0I7Z0JBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTthQUNyQixDQUFDO1lBQ0YsV0FBVyxFQUFFLHNDQUFzQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtTQUNyRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBbm1CRCwwQkFtbUJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXlsb2FkIENNUyBQYXR0ZXJuLlxuICpcbiAqIEEgaGlnaC1sZXZlbCBwYXR0ZXJuIHRoYXQgY3JlYXRlcyBhbGwgaW5mcmFzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGFcbiAqIFBheWxvYWQgQ01TIGRlcGxveW1lbnQgdXNpbmcgT3Blbk5leHQuXG4gKlxuICogUmVzb3VyY2VzIGNyZWF0ZWQ6XG4gKiAtIFJEUyBQb3N0Z3JlU1FMIGRhdGFiYXNlIChBdXJvcmEgb3IgSW5zdGFuY2UpXG4gKiAtIDMgUzMgYnVja2V0cyAoYXNzZXRzLCBjYWNoZSwgbWVkaWEpXG4gKiAtIER5bmFtb0RCIHRhYmxlICh0YWcgY2FjaGUgd2l0aCBHU0kpXG4gKiAtIFNRUyBGSUZPIHF1ZXVlIChyZXZhbGlkYXRpb24pXG4gKiAtIDMgTGFtYmRhIGZ1bmN0aW9ucyAoc2VydmVyLCBpbWFnZSBvcHRpbWlzYXRpb24sIHJldmFsaWRhdGlvbilcbiAqIC0gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcGF5bG9hZCA9IGFwcC5hZGRQYXR0ZXJuKFBhdHRlcm5GYWN0b3J5LmJ1aWxkKFwiUGF5bG9hZEFwcFwiLCB7XG4gKiAgIHR5cGU6IFwicGF5bG9hZFwiLFxuICogICBuYW1lOiBcIm15LWNtc1wiXG4gKiB9KSk7XG4gKlxuICogLy8gRXNjYXBlIGhhdGNoZXNcbiAqIHBheWxvYWQuZ2V0RGF0YWJhc2UoKS5ncmFudENvbm5lY3Qob3RoZXJMYW1iZGEpO1xuICovXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBSdW50aW1lLFxuICBBcmNoaXRlY3R1cmUsXG4gIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIHR5cGUgSUZ1bmN0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQge1xuICBDZXJ0aWZpY2F0ZSxcbiAgQ2VydGlmaWNhdGVWYWxpZGF0aW9uLFxuICB0eXBlIElDZXJ0aWZpY2F0ZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHsgSG9zdGVkWm9uZSwgQVJlY29yZCwgUmVjb3JkVGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBDbG91ZEZyb250VGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHNcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHAuanNcIjtcbmltcG9ydCB7IHR5cGUgSVBheWxvYWRQcm9wcywgdHlwZSBJUGF5bG9hZCB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgdHlwZSBNYW5pZmVzdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWFuaWZlc3RXcml0ZXIuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgUmVsYXRpb25hbERhdGFiYXNlLFxuICB0eXBlIER5bmFtb0RCRGF0YWJhc2UsXG4gIERhdGFiYXNlRmFjdG9yeSxcbiAgdHlwZSBBdXJvcmFEYXRhYmFzZVByb3BzLFxuICB0eXBlIEluc3RhbmNlRGF0YWJhc2VQcm9wcyxcbiAgdHlwZSBEeW5hbW9EQkRhdGFiYXNlUHJvcHNcbn0gZnJvbSBcIi4vZGF0YWJhc2UuanNcIjtcbmltcG9ydCB7XG4gIENvbXB1dGVGYWN0b3J5LFxuICB0eXBlIExhbWJkYUNvbXB1dGUsXG4gIEludm9rZU1vZGUsXG4gIHR5cGUgQ29kZUxhbWJkYVByb3BzXG59IGZyb20gXCIuL2NvbXB1dGUuanNcIjtcbmltcG9ydCB7IFN0b3JhZ2VGYWN0b3J5LCB0eXBlIFN0b3JhZ2UsIHR5cGUgUzNQcm9wcyB9IGZyb20gXCIuL3N0b3JhZ2UuanNcIjtcbmltcG9ydCB7XG4gIE1lc3NhZ2luZ0ZhY3RvcnksXG4gIHR5cGUgUXVldWVNZXNzYWdpbmcsXG4gIHR5cGUgSVF1ZXVlUHJvcHNcbn0gZnJvbSBcIi4vbWVzc2FnaW5nLmpzXCI7XG5pbXBvcnQgeyBDZG5GYWN0b3J5LCB0eXBlIENkbiwgdHlwZSBTbWFydENkblByb3BzIH0gZnJvbSBcIi4vY2RuLmpzXCI7XG5pbXBvcnQgeyBGamFsbExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy92YWxpZGF0aW9uTG9nZ2VyLmpzXCI7XG5pbXBvcnQgeyB0b1Bhc2NhbENhc2UsIHRvS2ViYWIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZy5qc1wiO1xuXG5jb25zdCBQQVlMT0FEX0RFRkFVTFRTID0ge1xuICAvKiogUGF0aCB0byBPcGVuTmV4dCBvdXRwdXQgcmVsYXRpdmUgdG8gYXBwIGZvbGRlciAoQ0RLIHJ1bnMgZnJvbSBmamFsbC88YXBwbmFtZT4pICovXG4gIFNPVVJDRTogXCIuLi8uLlwiLFxuICAvKiogQ2xvdWRGcm9udCByZXF1aXJlcyB1cy1lYXN0LTEgZm9yIGNlcnRhaW4gcmVzb3VyY2VzOyB1c2VkIGFzIHJlZ2lvbiBmYWxsYmFjayAqL1xuICBGQUxMQkFDS19SRUdJT046IFwidXMtZWFzdC0xXCIsXG4gIERBVEFCQVNFOiB7XG4gICAgVFlQRTogXCJJbnN0YW5jZVwiIGFzIGNvbnN0LFxuICAgIC8qKiBBV1MgZGVmYXVsdDsgNyBkYXlzIGNvdmVycyBtb3N0IGFjY2lkZW50YWwgZGF0YSBsb3NzIHJlY292ZXJ5IHNjZW5hcmlvcyAqL1xuICAgIEJBQ0tVUF9SRVRFTlRJT046IDcsXG4gICAgREVMRVRJT05fUFJPVEVDVElPTjogdHJ1ZVxuICB9LFxuICBDT01QVVRFOiB7XG4gICAgLyoqIDEuNSBHQiBiYWxhbmNlcyBOZXh0LmpzIFNTUiBwZXJmb3JtYW5jZSB2cyBjb3N0OyBiZWxvdyB0aGlzIHJpc2tzIE9PTSBvbiBjb21wbGV4IHBhZ2VzICovXG4gICAgU0VSVkVSX01FTU9SWTogMTUzNixcbiAgICAvKiogQVBJIEdhdGV3YXkgZGVmYXVsdCBtYXg7IHN1ZmZpY2llbnQgZm9yIG1vc3QgU1NSIHJlbmRlcnMgKi9cbiAgICBTRVJWRVJfVElNRU9VVDogMzAsXG4gICAgLyoqIFNoYXJwIGltYWdlIHByb2Nlc3NpbmcgbmVlZHMgbWVtb3J5IHByb3BvcnRpb25hbCB0byBpbWFnZSBkaW1lbnNpb25zICovXG4gICAgSU1BR0VfTUVNT1JZOiAxNTM2LFxuICAgIC8qKiBJbWFnZSBwcm9jZXNzaW5nIHR5cGljYWxseSBjb21wbGV0ZXMgaW4gPDEwczsgMzBzIHByb3ZpZGVzIG1hcmdpbiAqL1xuICAgIElNQUdFX1RJTUVPVVQ6IDMwLFxuICAgIC8qKiBSZXZhbGlkYXRpb24gaXMgbGlnaHR3ZWlnaHQgKEhUVFAgY2FsbCArIGNhY2hlIHdyaXRlKTsgaGFsZiBvZiBzZXJ2ZXIgbWVtb3J5IHN1ZmZpY2VzICovXG4gICAgUkVWQUxJREFUSU9OX01FTU9SWTogNzY4LFxuICAgIC8qKiA1IG1pbnV0ZXMgYWxsb3dzIGJhdGNoIHJldmFsaWRhdGlvbiBvZiBtYW55IHBhZ2VzIGluIGEgc2luZ2xlIGludm9jYXRpb24gKi9cbiAgICBSRVZBTElEQVRJT05fVElNRU9VVDogMzAwXG4gIH0sXG4gIENBQ0hFOiB7XG4gICAgTUFYX0FHRV9TRUNPTkRTOiAzMTUzNjAwMCAvLyAxIHllYXJcbiAgfSxcbiAgT1BFTk5FWFQ6IHtcbiAgICBBU1NFVFM6IFwiLm9wZW4tbmV4dC9hc3NldHNcIixcbiAgICBDQUNIRTogXCIub3Blbi1uZXh0L2NhY2hlXCIsXG4gICAgU0VSVkVSOiBcIi5vcGVuLW5leHQvc2VydmVyLWZ1bmN0aW9ucy9kZWZhdWx0XCIsXG4gICAgSU1BR0U6IFwiLm9wZW4tbmV4dC9pbWFnZS1vcHRpbWl6YXRpb24tZnVuY3Rpb25cIixcbiAgICBSRVZBTElEQVRJT046IFwiLm9wZW4tbmV4dC9yZXZhbGlkYXRpb24tZnVuY3Rpb25cIlxuICB9LFxuICBQQVRIUzoge1xuICAgIFNUQVRJQzogXCIvX25leHQvc3RhdGljLypcIixcbiAgICBJTUFHRTogXCIvX25leHQvaW1hZ2UqXCIsXG4gICAgQVBJOiBcIi9hcGkvKlwiLFxuICAgIEFETUlOOiBcIi9hZG1pbi8qXCJcbiAgfVxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBDb252ZXJ0IGEgbmFtZSB0byBhIHZhbGlkIFJEUyBkYXRhYmFzZSBuYW1lIChzbmFrZV9jYXNlKS5cbiAqIFJEUyBBUEkgYWxsb3dzIGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3JlcyBmb3IgUG9zdGdyZVNRTC9NeVNRTCBEYXRhYmFzZU5hbWUuXG4gKiBIeXBoZW5zIGFyZSByZWplY3RlZCwgc28gY29udmVydCB0aGVtIHRvIHVuZGVyc2NvcmVzLlxuICovXG5mdW5jdGlvbiB0b1ZhbGlkRGF0YWJhc2VOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b0tlYmFiKG5hbWUpLnJlcGxhY2UoLy0vZywgXCJfXCIpO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgcm9vdCBkb21haW4gZnJvbSBhIGZ1bGwgZG9tYWluIG5hbWUuXG4gKiBlLmcuLCBcImNtcy5leGFtcGxlLmNvbVwiIC0+IFwiZXhhbXBsZS5jb21cIlxuICovXG5mdW5jdGlvbiBleHRyYWN0Um9vdERvbWFpbihkb21haW46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gZG9tYWluLnNwbGl0KFwiLlwiKTtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDIgPyBwYXJ0cy5zbGljZSgtMikuam9pbihcIi5cIikgOiBkb21haW47XG59XG5cbi8qKlxuICogU2FmZWx5IGdldCB0aGUgdW5kZXJseWluZyBMYW1iZGEgZnVuY3Rpb24gZnJvbSBhIGNvbXB1dGUgcmVzb3VyY2UuXG4gKiBUaHJvd3MgYSBjbGVhciBlcnJvciBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZUZ1bmN0aW9uKGNvbXB1dGU6IExhbWJkYUNvbXB1dGUsIG5hbWU6IHN0cmluZyk6IElGdW5jdGlvbiB7XG4gIGNvbnN0IGZuID0gY29tcHV0ZS5nZXRGdW5jdGlvbigpO1xuICBpZiAoIWZuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7bmFtZX0gTGFtYmRhIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuIGAgK1xuICAgICAgICBcIlRoaXMgaW5kaWNhdGVzIGFuIGludGVybmFsIGVycm9yIGluIGNvbXB1dGUgcmVzb3VyY2UgY3JlYXRpb24uXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBCYXNlIGRhdGFiYXNlIHByb3BlcnRpZXMgc2hhcmVkIGJldHdlZW4gQXVyb3JhIGFuZCBJbnN0YW5jZS5cbiAqIFVzZXMgUGljayB0byBleHRyYWN0IGNvbW1vbiBwcm9wZXJ0aWVzIGZyb20gdGhlIGRhdGFiYXNlIGNvbmZpZy5cbiAqL1xudHlwZSBCYXNlRGF0YWJhc2VQcm9wcyA9IFBpY2s8XG4gIEluc3RhbmNlRGF0YWJhc2VQcm9wcyxcbiAgfCBcImRhdGFiYXNlTmFtZVwiXG4gIHwgXCJkYXRhYmFzZUVuZ2luZVwiXG4gIHwgXCJiYWNrdXBSZXRlbnRpb25cIlxuICB8IFwiZGVsZXRpb25Qcm90ZWN0aW9uXCJcbiAgfCBcInB1YmxpY2x5QWNjZXNzaWJsZVwiXG4gIHwgXCJwb3J0XCJcbiAgfCBcInBlcmZvcm1hbmNlSW5zaWdodHNcIlxuICB8IFwicHJveHlcIlxuICB8IFwiY3JlZGVudGlhbHNcIlxuICB8IFwic25hcHNob3RJZGVudGlmaWVyXCJcbiAgfCBcInNuYXBzaG90VXNlcm5hbWVcIlxuPjtcblxuLyoqXG4gKiBMYW1iZGEgY29uZmlndXJhdGlvbiB3aXRoIHJlc29sdmVkIGRlZmF1bHRzLlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZWRMYW1iZGFDb25maWcge1xuICBtZW1vcnlTaXplOiBudW1iZXI7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgZXBoZW1lcmFsU3RvcmFnZVNpemU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRXh0cmFjdCBMYW1iZGEgY29uZmlnIGZyb20gcHJvcHMgd2l0aCBkZWZhdWx0cy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgY29uZmlnOlxuICAgIHwgeyBtZW1vcnlTaXplPzogbnVtYmVyOyB0aW1lb3V0PzogbnVtYmVyOyBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlciB9XG4gICAgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRzOiB7IG1lbW9yeTogbnVtYmVyOyB0aW1lb3V0OiBudW1iZXIgfVxuKTogUmVzb2x2ZWRMYW1iZGFDb25maWcge1xuICByZXR1cm4ge1xuICAgIG1lbW9yeVNpemU6IGNvbmZpZz8ubWVtb3J5U2l6ZSA/PyBkZWZhdWx0cy5tZW1vcnksXG4gICAgdGltZW91dDogY29uZmlnPy50aW1lb3V0ID8/IGRlZmF1bHRzLnRpbWVvdXQsXG4gICAgZXBoZW1lcmFsU3RvcmFnZVNpemU6IGNvbmZpZz8uZXBoZW1lcmFsU3RvcmFnZVNpemVcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIENNUyBwYXR0ZXJuIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIENvbXBvc2VzIGFsbCByZXF1aXJlZCBBV1MgcmVzb3VyY2VzIGZvciBhIFBheWxvYWQgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBheWxvYWQgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJUGF5bG9hZCB7XG4gIHB1YmxpYyByZWFkb25seSBwYXR0ZXJuVHlwZSA9IFwicGF5bG9hZFwiIGFzIGNvbnN0O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IElQYXlsb2FkUHJvcHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFzY2FsTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9wYXlsb2FkU2VjcmV0OiBTZWNyZXQ7XG5cbiAgcHJpdmF0ZSBfZGF0YWJhc2UhOiBSZWxhdGlvbmFsRGF0YWJhc2U7XG4gIHByaXZhdGUgX3NlcnZlciE6IExhbWJkYUNvbXB1dGU7XG4gIHByaXZhdGUgX2ltYWdlT3B0aW1pc2F0aW9uITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfcmV2YWxpZGF0aW9uITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfYXNzZXRzQnVja2V0ITogU3RvcmFnZTtcbiAgcHJpdmF0ZSBfY2FjaGVCdWNrZXQhOiBTdG9yYWdlO1xuICBwcml2YXRlIF9tZWRpYUJ1Y2tldCE6IFN0b3JhZ2U7XG4gIHByaXZhdGUgX3RhZ0NhY2hlITogRHluYW1vREJEYXRhYmFzZTtcbiAgcHJpdmF0ZSBfcmV2YWxpZGF0aW9uUXVldWUhOiBRdWV1ZU1lc3NhZ2luZztcbiAgcHJpdmF0ZSBfY2RuITogQ2RuO1xuICBwcml2YXRlIF9yZXNvbHZlZERvbWFpbjpcbiAgICB8IHtcbiAgICAgICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkO1xuICAgICAgICBob3N0ZWRab25lOiBSZXR1cm5UeXBlPHR5cGVvZiBIb3N0ZWRab25lLmZyb21Mb29rdXA+IHwgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGFwcDogQXBwLCBwcm9wczogSVBheWxvYWRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5wYXNjYWxOYW1lID0gdG9QYXNjYWxDYXNlKHByb3BzLm5hbWUpO1xuICAgIHRoaXMuX3BheWxvYWRTZWNyZXQgPSBuZXcgU2VjcmV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXlsb2FkU2VjcmV0YCwge1xuICAgICAgc2VjcmV0TmFtZTogYCR7cHJvcHMubmFtZX0vcGF5bG9hZC1zZWNyZXRgLFxuICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIENNUyBzZWNyZXQgZm9yICR7cHJvcHMubmFtZX1gLFxuICAgICAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IHtcbiAgICAgICAgZXhjbHVkZVB1bmN0dWF0aW9uOiB0cnVlLFxuICAgICAgICBwYXNzd29yZExlbmd0aDogNjRcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVnaXN0ZXJNYW5pZmVzdCgpO1xuICAgIHRoaXMudmFsaWRhdGVQcm9wcygpO1xuXG4gICAgdGhpcy5jcmVhdGVEYXRhYmFzZSgpO1xuICAgIHRoaXMuY3JlYXRlU3RvcmFnZUJ1Y2tldHMoKTtcbiAgICB0aGlzLmNyZWF0ZVRhZ0NhY2hlKCk7XG4gICAgdGhpcy5jcmVhdGVSZXZhbGlkYXRpb25RdWV1ZSgpO1xuICAgIHRoaXMuY3JlYXRlTGFtYmRhRnVuY3Rpb25zKCk7XG4gICAgdGhpcy5jcmVhdGVDZG4oKTtcbiAgICB0aGlzLmNyZWF0ZURuc1JlY29yZCgpO1xuICAgIHRoaXMuZXhwb3J0UGF0dGVybk91dHB1dHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJNYW5pZmVzdCgpOiB2b2lkIHtcbiAgICBjb25zdCBtYW5pZmVzdFBhdHRlcm46IE1hbmlmZXN0UGF0dGVybiA9IHtcbiAgICAgIHR5cGU6IFwicGF5bG9hZFwiLFxuICAgICAgbmFtZTogdGhpcy5wcm9wcy5uYW1lLFxuICAgICAgc291cmNlOiBQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRVxuICAgIH07XG4gICAgdGhpcy5hcHAuZ2V0TWFuaWZlc3RDb2xsZWN0b3IoKS5zZXRQYXR0ZXJuKG1hbmlmZXN0UGF0dGVybik7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUHJvcHMoKTogdm9pZCB7XG4gICAgY29uc3QgZGJDb25maWcgPSB0aGlzLnByb3BzLmRhdGFiYXNlID8/IHt9O1xuICAgIGlmIChkYkNvbmZpZy5wdWJsaWNseUFjY2Vzc2libGUpIHtcbiAgICAgIEZqYWxsTG9nZ2VyLndhcm4oXG4gICAgICAgIGBQYXlsb2FkIGRhdGFiYXNlICcke3RoaXMucHJvcHMubmFtZX0nIGlzIGNvbmZpZ3VyZWQgd2l0aCBwdWJsaWMgYWNjZXNzaWJpbGl0eS4gYCArXG4gICAgICAgICAgXCJUaGlzIGlzIGEgc2VjdXJpdHkgcmlzayBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnQuXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEYXRhYmFzZSgpOiB2b2lkIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IHRoaXMucHJvcHMuZGF0YWJhc2UgPz8ge307XG4gICAgY29uc3QgZGF0YWJhc2VUeXBlID0gZGJDb25maWcudHlwZSA/PyBQQVlMT0FEX0RFRkFVTFRTLkRBVEFCQVNFLlRZUEU7XG5cbiAgICB0aGlzLl9kYXRhYmFzZSA9XG4gICAgICBkYXRhYmFzZVR5cGUgPT09IFwiQXVyb3JhXCJcbiAgICAgICAgPyB0aGlzLmNyZWF0ZUF1cm9yYURhdGFiYXNlKGRiQ29uZmlnKVxuICAgICAgICA6IHRoaXMuY3JlYXRlSW5zdGFuY2VEYXRhYmFzZShkYkNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQmFzZURhdGFiYXNlUHJvcHMoXG4gICAgZGJDb25maWc6IE5vbk51bGxhYmxlPElQYXlsb2FkUHJvcHNbXCJkYXRhYmFzZVwiXT5cbiAgKTogQmFzZURhdGFiYXNlUHJvcHMge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhYmFzZU5hbWU6XG4gICAgICAgIGRiQ29uZmlnLmRhdGFiYXNlTmFtZSA/PyB0b1ZhbGlkRGF0YWJhc2VOYW1lKHRoaXMucHJvcHMubmFtZSksXG4gICAgICBkYXRhYmFzZUVuZ2luZTogZGJDb25maWcuZGF0YWJhc2VFbmdpbmUgPz8gXCJwb3N0Z3Jlc3FsXCIsXG4gICAgICBiYWNrdXBSZXRlbnRpb246XG4gICAgICAgIGRiQ29uZmlnLmJhY2t1cFJldGVudGlvbiA/PyBQQVlMT0FEX0RFRkFVTFRTLkRBVEFCQVNFLkJBQ0tVUF9SRVRFTlRJT04sXG4gICAgICBkZWxldGlvblByb3RlY3Rpb246XG4gICAgICAgIGRiQ29uZmlnLmRlbGV0aW9uUHJvdGVjdGlvbiA/P1xuICAgICAgICBQQVlMT0FEX0RFRkFVTFRTLkRBVEFCQVNFLkRFTEVUSU9OX1BST1RFQ1RJT04sXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IGRiQ29uZmlnLnB1YmxpY2x5QWNjZXNzaWJsZSxcbiAgICAgIHBvcnQ6IGRiQ29uZmlnLnBvcnQsXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRzOiBkYkNvbmZpZy5wZXJmb3JtYW5jZUluc2lnaHRzLFxuICAgICAgcHJveHk6IGRiQ29uZmlnLnByb3h5LFxuICAgICAgY3JlZGVudGlhbHM6IGRiQ29uZmlnLmNyZWRlbnRpYWxzLFxuICAgICAgc25hcHNob3RJZGVudGlmaWVyOiBkYkNvbmZpZy5zbmFwc2hvdElkZW50aWZpZXIsXG4gICAgICBzbmFwc2hvdFVzZXJuYW1lOiBkYkNvbmZpZy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXVyb3JhRGF0YWJhc2UoXG4gICAgZGJDb25maWc6IE5vbk51bGxhYmxlPElQYXlsb2FkUHJvcHNbXCJkYXRhYmFzZVwiXT5cbiAgKTogUmVsYXRpb25hbERhdGFiYXNlIHtcbiAgICBjb25zdCBhdXJvcmFQcm9wczogQXVyb3JhRGF0YWJhc2VQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwiQXVyb3JhXCIsXG4gICAgICAuLi50aGlzLmJ1aWxkQmFzZURhdGFiYXNlUHJvcHMoZGJDb25maWcpLFxuICAgICAgYWxsb3dlZElwQ2lkcjogZGJDb25maWcuYWxsb3dlZElwQ2lkcixcbiAgICAgIGVuY3J5cHRpb246IGRiQ29uZmlnLmVuY3J5cHRpb24gYXMgQXVyb3JhRGF0YWJhc2VQcm9wc1tcImVuY3J5cHRpb25cIl0sXG4gICAgICB3cml0ZXI6IGRiQ29uZmlnLndyaXRlcixcbiAgICAgIHJlYWRlcnM6IGRiQ29uZmlnLnJlYWRlcnMsXG4gICAgICBhbGxvd1ZwY0FjY2VzczogZGJDb25maWcuYWxsb3dWcGNBY2Nlc3MsXG4gICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IGRiQ29uZmlnLm1vbml0b3JpbmdJbnRlcnZhbCxcbiAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBkYkNvbmZpZy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvd1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKHRoaXMucHJvcHMubmFtZSwgYXVyb3JhUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW5zdGFuY2VEYXRhYmFzZShcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIGNvbnN0IGluc3RhbmNlUHJvcHM6IEluc3RhbmNlRGF0YWJhc2VQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwiSW5zdGFuY2VcIixcbiAgICAgIC4uLnRoaXMuYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhkYkNvbmZpZyksXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IGRiQ29uZmlnLnB1YmxpY2x5QWNjZXNzaWJsZSA/PyBmYWxzZSxcbiAgICAgIGluc3RhbmNlVHlwZTogZGJDb25maWcuaW5zdGFuY2VUeXBlLFxuICAgICAgYWxsb2NhdGVkU3RvcmFnZTogZGJDb25maWcuYWxsb2NhdGVkU3RvcmFnZSxcbiAgICAgIG11bHRpQXo6IGRiQ29uZmlnLm11bHRpQXosXG4gICAgICByZWFkUmVwbGljYTogZGJDb25maWcucmVhZFJlcGxpY2EsXG4gICAgICBlbmNyeXB0aW9uOiBkYkNvbmZpZy5lbmNyeXB0aW9uIGFzIEluc3RhbmNlRGF0YWJhc2VQcm9wc1tcImVuY3J5cHRpb25cIl1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGREYXRhYmFzZShcbiAgICAgIERhdGFiYXNlRmFjdG9yeS5idWlsZCh0aGlzLnByb3BzLm5hbWUsIGluc3RhbmNlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RvcmFnZUJ1Y2tldHMoKTogdm9pZCB7XG4gICAgdGhpcy5fYXNzZXRzQnVja2V0ID0gdGhpcy5jcmVhdGVBc3NldHNCdWNrZXQoKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldCA9IHRoaXMuY3JlYXRlQ2FjaGVCdWNrZXQoKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldCA9IHRoaXMuY3JlYXRlTWVkaWFCdWNrZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXNzZXRzQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIGNvbnN0IGFzc2V0c0NvbmZpZyA9IHRoaXMucHJvcHMuc3RvcmFnZT8uYXNzZXRzID8/IHt9O1xuICAgIGNvbnN0IGFzc2V0c1Byb3BzOiBTM1Byb3BzID0ge1xuICAgICAgdmVyc2lvbmVkOiBhc3NldHNDb25maWcudmVyc2lvbmVkID8/IGZhbHNlLFxuICAgICAgZGVwbG95bWVudDoge1xuICAgICAgICBzb3VyY2U6IGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuQVNTRVRTfWAsXG4gICAgICAgIHBydW5lOiB0cnVlLFxuICAgICAgICBjYWNoZUNvbnRyb2w6IHtcbiAgICAgICAgICBtYXhBZ2U6IFBBWUxPQURfREVGQVVMVFMuQ0FDSEUuTUFYX0FHRV9TRUNPTkRTLFxuICAgICAgICAgIGltbXV0YWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkU3RvcmFnZShcbiAgICAgIFN0b3JhZ2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tYXNzZXRzYCwgYXNzZXRzUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2FjaGVCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgY29uc3QgY2FjaGVDb25maWcgPSB0aGlzLnByb3BzLnN0b3JhZ2U/LmNhY2hlID8/IHt9O1xuICAgIGNvbnN0IGNhY2hlUHJvcHM6IFMzUHJvcHMgPSB7XG4gICAgICB2ZXJzaW9uZWQ6IGNhY2hlQ29uZmlnLnZlcnNpb25lZCA/PyBmYWxzZSxcbiAgICAgIGRlcGxveW1lbnQ6IHtcbiAgICAgICAgc291cmNlOiBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULkNBQ0hFfWAsXG4gICAgICAgIHBydW5lOiBmYWxzZSAvLyBJU1IgYWRkcyBmaWxlcyBhdCBydW50aW1lXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkU3RvcmFnZShcbiAgICAgIFN0b3JhZ2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tY2FjaGVgLCBjYWNoZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1lZGlhQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIGNvbnN0IG1lZGlhQ29uZmlnID0gdGhpcy5wcm9wcy5zdG9yYWdlPy5tZWRpYSA/PyB7fTtcbiAgICBjb25zdCBtZWRpYVByb3BzOiBTM1Byb3BzID0ge1xuICAgICAgdmVyc2lvbmVkOiBtZWRpYUNvbmZpZy52ZXJzaW9uZWQgPz8gZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1tZWRpYWAsIG1lZGlhUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGFnQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3QgdGFnQ2FjaGVQcm9wczogRHluYW1vREJEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJEeW5hbW9EQlwiLFxuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwidGFnXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwicGF0aFwiLCB0eXBlOiBcIlNcIiB9LFxuICAgICAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5kZXhOYW1lOiBcInJldmFsaWRhdGVcIixcbiAgICAgICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJwYXRoXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICAgICAgc29ydEtleTogeyBuYW1lOiBcInJldmFsaWRhdGVkQXRcIiwgdHlwZTogXCJOXCIgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgICB0aGlzLl90YWdDYWNoZSA9IHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tdGFnLWNhY2hlYCwgdGFnQ2FjaGVQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25RdWV1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBxdWV1ZUNvbmZpZyA9IHRoaXMucHJvcHMubWVzc2FnaW5nPy5yZXZhbGlkYXRpb25RdWV1ZSA/PyB7fTtcbiAgICBjb25zdCByZXZhbGlkYXRpb25UaW1lb3V0ID1cbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8ucmV2YWxpZGF0aW9uPy50aW1lb3V0ID8/XG4gICAgICBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX1RJTUVPVVQ7XG5cbiAgICAvLyBSZXNvbHZlIGRlYWQgbGV0dGVyIHF1ZXVlIGNvbmZpZ1xuICAgIGxldCBkbHFDb25maWc6IElRdWV1ZVByb3BzW1wiZGVhZExldHRlclF1ZXVlXCJdO1xuICAgIGlmIChxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICBkbHFDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUpIHtcbiAgICAgIGRscUNvbmZpZyA9IHtcbiAgICAgICAgZW5hYmxlZDogcXVldWVDb25maWcuZGVhZExldHRlclF1ZXVlLmVuYWJsZWQgPz8gdHJ1ZSxcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiBxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUubWF4UmVjZWl2ZUNvdW50ID8/IDNcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRscUNvbmZpZyA9IHsgZW5hYmxlZDogdHJ1ZSwgbWF4UmVjZWl2ZUNvdW50OiAzIH07XG4gICAgfVxuXG4gICAgY29uc3QgcXVldWVQcm9wczogSVF1ZXVlUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcInF1ZXVlXCIsXG4gICAgICBxdWV1ZVR5cGU6IFwiZmlmb1wiLFxuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IHF1ZXVlQ29uZmlnLnZpc2liaWxpdHlUaW1lb3V0ID8/IHJldmFsaWRhdGlvblRpbWVvdXQsXG4gICAgICBtZXNzYWdlUmV0ZW50aW9uUGVyaW9kOiBxdWV1ZUNvbmZpZy5tZXNzYWdlUmV0ZW50aW9uUGVyaW9kLFxuICAgICAgbWF4TWVzc2FnZVNpemU6IHF1ZXVlQ29uZmlnLm1heE1lc3NhZ2VTaXplLFxuICAgICAgY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbjogdHJ1ZSxcbiAgICAgIGRlYWRMZXR0ZXJRdWV1ZTogZGxxQ29uZmlnXG4gICAgfTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZSA9IHRoaXMuYXBwLmFkZE1lc3NhZ2luZyhcbiAgICAgIE1lc3NhZ2luZ0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1yZXZhbGlkYXRpb25gLCBxdWV1ZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxhbWJkYUZ1bmN0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXJ2ZXIgPSB0aGlzLmNyZWF0ZVNlcnZlckxhbWJkYSgpO1xuICAgIHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uID0gdGhpcy5jcmVhdGVJbWFnZUxhbWJkYSgpO1xuICAgIHRoaXMuX3JldmFsaWRhdGlvbiA9IHRoaXMuY3JlYXRlUmV2YWxpZGF0aW9uTGFtYmRhKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlcnZlckxhbWJkYSgpOiBMYW1iZGFDb21wdXRlIHtcbiAgICBjb25zdCB7IG1lbW9yeVNpemUsIHRpbWVvdXQsIGVwaGVtZXJhbFN0b3JhZ2VTaXplIH0gPSByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5zZXJ2ZXIsXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlNFUlZFUl9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5TRVJWRVJfVElNRU9VVFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuU0VSVkVSfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZnVuY3Rpb25Vcmw6IHtcbiAgICAgICAgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSxcbiAgICAgICAgaW52b2tlTW9kZTogSW52b2tlTW9kZS5SRVNQT05TRV9TVFJFQU1cbiAgICAgIH0sXG4gICAgICBjb25uZWN0aW9uczogW3RoaXMuX2RhdGFiYXNlXSxcbiAgICAgIHNlY3JldHNJbXBvcnQ6IHtcbiAgICAgICAgREFUQUJBU0VfVVNFUk5BTUU6IHRoaXMuX2RhdGFiYXNlXG4gICAgICAgICAgLmdldENyZWRlbnRpYWxzKClcbiAgICAgICAgICAuZ2V0SW1wb3J0KFwidXNlcm5hbWVcIiksXG4gICAgICAgIERBVEFCQVNFX1BBU1NXT1JEOiB0aGlzLl9kYXRhYmFzZVxuICAgICAgICAgIC5nZXRDcmVkZW50aWFscygpXG4gICAgICAgICAgLmdldEltcG9ydChcInBhc3N3b3JkXCIpLFxuICAgICAgICBQQVlMT0FEX1NFQ1JFVDogdGhpcy5fcGF5bG9hZFNlY3JldC5nZXRJbXBvcnQoKVxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmJ1aWxkU2VydmVyRW52aXJvbm1lbnQoKVxuICAgIH07XG5cbiAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLmFwcC5hZGRDb21wdXRlKFxuICAgICAgQ29tcHV0ZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1zZXJ2ZXJgLCBzZXJ2ZXJQcm9wcylcbiAgICApO1xuXG4gICAgdGhpcy5ncmFudFNlcnZlclBlcm1pc3Npb25zKHNlcnZlcik7XG4gICAgcmV0dXJuIHNlcnZlcjtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJFbnZpcm9ubWVudCgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBiYXNlRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgREFUQUJBU0VfSE9TVDogdGhpcy5fZGF0YWJhc2UuZ2V0SG9zdEVuZHBvaW50KCksXG4gICAgICBEQVRBQkFTRV9QT1JUOiB0aGlzLl9kYXRhYmFzZS5nZXRIb3N0UG9ydCgpLFxuICAgICAgREFUQUJBU0VfTkFNRTogdGhpcy5fZGF0YWJhc2UuZ2V0RGF0YWJhc2VOYW1lKCksXG4gICAgICBEQVRBQkFTRV9TU0w6IFwidHJ1ZVwiLFxuICAgICAgQ0FDSEVfQlVDS0VUX05BTUU6IHRoaXMuX2NhY2hlQnVja2V0LmdldEJ1Y2tldE5hbWUoKSxcbiAgICAgIENBQ0hFX0JVQ0tFVF9SRUdJT046IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbixcbiAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICBSRVZBTElEQVRJT05fUVVFVUVfVVJMOiB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZVVybCgpLFxuICAgICAgUkVWQUxJREFUSU9OX1FVRVVFX1JFR0lPTjogU3RhY2sub2YodGhpcykucmVnaW9uLFxuICAgICAgTUVESUFfQlVDS0VUX05BTUU6IHRoaXMuX21lZGlhQnVja2V0LmdldEJ1Y2tldE5hbWUoKVxuICAgIH07XG5cbiAgICAvLyBMb2NrIGRvd24gQ09SUyB0byBjdXN0b20gZG9tYWluIHdoZW4gcHJvdmlkZWRcbiAgICBjb25zdCBjdXN0b21Eb21haW4gPSB0aGlzLnByb3BzLmRvbWFpbiA/PyB0aGlzLnByb3BzLmNkbj8uZG9tYWluTmFtZXM/LlswXTtcbiAgICBpZiAoY3VzdG9tRG9tYWluKSB7XG4gICAgICBiYXNlRW52Lk5FWFRfUFVCTElDX1NFUlZFUl9VUkwgPSBgaHR0cHM6Ly8ke2N1c3RvbURvbWFpbn1gO1xuICAgIH1cblxuICAgIHJldHVybiB7IC4uLmJhc2VFbnYsIC4uLnRoaXMucHJvcHMuZW52aXJvbm1lbnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRTZXJ2ZXJQZXJtaXNzaW9ucyhzZXJ2ZXI6IExhbWJkYUNvbXB1dGUpOiB2b2lkIHtcbiAgICBjb25zdCBzZXJ2ZXJGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihzZXJ2ZXIsIFwiU2VydmVyXCIpO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0LmdyYW50UmVhZFdyaXRlKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldC5ncmFudFJlYWRXcml0ZShzZXJ2ZXJGdW5jdGlvbik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyhzZXJ2ZXJGdW5jdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUltYWdlTGFtYmRhKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIGNvbnN0IHsgbWVtb3J5U2l6ZSwgdGltZW91dCwgZXBoZW1lcmFsU3RvcmFnZVNpemUgfSA9IHJlc29sdmVMYW1iZGFDb25maWcoXG4gICAgICB0aGlzLnByb3BzLmNvbXB1dGU/LmltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9USU1FT1VUXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGltYWdlUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULklNQUdFfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZnVuY3Rpb25Vcmw6IHsgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQlVDS0VUX05BTUU6IHRoaXMuX2Fzc2V0c0J1Y2tldC5nZXRCdWNrZXROYW1lKCksXG4gICAgICAgIEJVQ0tFVF9LRVlfUFJFRklYOiBcIl9hc3NldHNcIlxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpbWFnZSA9IHRoaXMuYXBwLmFkZENvbXB1dGUoXG4gICAgICBDb21wdXRlRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LWltYWdlYCwgaW1hZ2VQcm9wcylcbiAgICApO1xuXG4gICAgY29uc3QgaW1hZ2VGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihpbWFnZSwgXCJJbWFnZU9wdGltaXNhdGlvblwiKTtcbiAgICB0aGlzLl9hc3NldHNCdWNrZXQuZ3JhbnRSZWFkKGltYWdlRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIGltYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25MYW1iZGEoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgY29uc3QgeyBtZW1vcnlTaXplLCB0aW1lb3V0LCBlcGhlbWVyYWxTdG9yYWdlU2l6ZSB9ID0gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8ucmV2YWxpZGF0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fTUVNT1JZLFxuICAgICAgICB0aW1lb3V0OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX1RJTUVPVVRcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULlJFVkFMSURBVElPTn1gXG4gICAgICApLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgbWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICAgIENBQ0hFX0JVQ0tFVF9OQU1FOiB0aGlzLl9jYWNoZUJ1Y2tldC5nZXRCdWNrZXROYW1lKClcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uID0gdGhpcy5hcHAuYWRkQ29tcHV0ZShcbiAgICAgIENvbXB1dGVGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tcmV2YWxpZGF0aW9uYCwgcmV2YWxpZGF0aW9uUHJvcHMpXG4gICAgKTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkxhbWJkYSA9IHJldmFsaWRhdGlvbi5nZXRMYW1iZGFGdW5jdGlvbigpO1xuICAgIHJldmFsaWRhdGlvbkxhbWJkYS5hZGRTcXNFdmVudFNvdXJjZSh0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZSgpLCB7XG4gICAgICBiYXRjaFNpemU6IDVcbiAgICB9KTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKHJldmFsaWRhdGlvbiwgXCJSZXZhbGlkYXRpb25cIik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHJldmFsaWRhdGlvbkZ1bmN0aW9uKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldC5ncmFudFJlYWRXcml0ZShyZXZhbGlkYXRpb25GdW5jdGlvbik7XG4gICAgdGhpcy5fcmV2YWxpZGF0aW9uUXVldWUuZ3JhbnRDb25zdW1lTWVzc2FnZXMocmV2YWxpZGF0aW9uRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIHJldmFsaWRhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2RuKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZG9tYWluTmFtZXMsIGNlcnRpZmljYXRlIH0gPSB0aGlzLnJlc29sdmVEb21haW5Db25maWcoKTtcblxuICAgIGNvbnN0IGNkblByb3BzOiBTbWFydENkblByb3BzID0ge1xuICAgICAgb3JpZ2luVHlwZTogXCJhdXRvXCIsXG4gICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgIGRlZmF1bHRBbGxvd2VkTWV0aG9kczogXCJBTExcIixcbiAgICAgIGZvcndhcmRIb3N0SGVhZGVyOiB0cnVlLFxuICAgICAgcHJpY2VDbGFzczogXCJQcmljZUNsYXNzXzEwMFwiLFxuICAgICAgZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGJlaGF2aW91cnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLlNUQVRJQyxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2Fzc2V0c0J1Y2tldCxcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX09QVElNSVpFRFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXRoUGF0dGVybjogUEFZTE9BRF9ERUZBVUxUUy5QQVRIUy5JTUFHRSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfT1BUSU1JWkVEXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFQSSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX0RJU0FCTEVEXCIsXG4gICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFwiQUxMXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFETUlOLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogXCJBTExcIlxuICAgICAgICB9LFxuICAgICAgICAuLi4odGhpcy5wcm9wcy5jZG4/LmJlaGF2aW91cnMgPz8gW10pXG4gICAgICBdXG4gICAgfTtcblxuICAgIHRoaXMuX2NkbiA9IHRoaXMuYXBwLmFkZENkbihDZG5GYWN0b3J5LmJ1aWxkKHRoaXMucHJvcHMubmFtZSwgY2RuUHJvcHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURvbWFpbkNvbmZpZygpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPiB8IHVuZGVmaW5lZDtcbiAgfSB7XG4gICAgaWYgKHRoaXMuX3Jlc29sdmVkRG9tYWluKSByZXR1cm4gdGhpcy5fcmVzb2x2ZWREb21haW47XG5cbiAgICBpZiAodGhpcy5wcm9wcy5kb21haW4pIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkRG9tYWluID0gdGhpcy5yZXNvbHZlU2ltcGxlRG9tYWluKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNkbj8uZG9tYWluTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZWREb21haW4gPSB0aGlzLnJlc29sdmVBZHZhbmNlZERvbWFpbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXNvbHZlZERvbWFpbiA9IHtcbiAgICAgICAgZG9tYWluTmFtZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgY2VydGlmaWNhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgaG9zdGVkWm9uZTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZERvbWFpbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNpbXBsZURvbWFpbigpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGU7XG4gICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPjtcbiAgfSB7XG4gICAgY29uc3QgZG9tYWluID0gdGhpcy5wcm9wcy5kb21haW4hO1xuICAgIGNvbnN0IHJvb3REb21haW4gPSBleHRyYWN0Um9vdERvbWFpbihkb21haW4pO1xuXG4gICAgY29uc3QgaG9zdGVkWm9uZSA9IEhvc3RlZFpvbmUuZnJvbUxvb2t1cChcbiAgICAgIHRoaXMsXG4gICAgICBgJHt0aGlzLnBhc2NhbE5hbWV9SG9zdGVkWm9uZWAsXG4gICAgICB7IGRvbWFpbk5hbWU6IHJvb3REb21haW4gfVxuICAgICk7XG5cbiAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZSh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9Q2VydGlmaWNhdGVgLCB7XG4gICAgICBkb21haW5OYW1lOiBkb21haW4sXG4gICAgICB2YWxpZGF0aW9uOiBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyhob3N0ZWRab25lKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgZG9tYWluTmFtZXM6IFtkb21haW5dLCBjZXJ0aWZpY2F0ZSwgaG9zdGVkWm9uZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQWR2YW5jZWREb21haW4oKToge1xuICAgIGRvbWFpbk5hbWVzOiBzdHJpbmdbXTtcbiAgICBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkO1xuICAgIGhvc3RlZFpvbmU6IHVuZGVmaW5lZDtcbiAgfSB7XG4gICAgY29uc3QgY2RuQ29uZmlnID0gdGhpcy5wcm9wcy5jZG4hO1xuICAgIGNvbnN0IGNlcnRpZmljYXRlID1cbiAgICAgIGNkbkNvbmZpZy5jZXJ0aWZpY2F0ZSA/P1xuICAgICAgKGNkbkNvbmZpZy5jZXJ0aWZpY2F0ZUFyblxuICAgICAgICA/IENlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybihcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBgJHt0aGlzLnBhc2NhbE5hbWV9Q2VydGlmaWNhdGVgLFxuICAgICAgICAgICAgY2RuQ29uZmlnLmNlcnRpZmljYXRlQXJuXG4gICAgICAgICAgKVxuICAgICAgICA6IHVuZGVmaW5lZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZG9tYWluTmFtZXM6IGNkbkNvbmZpZy5kb21haW5OYW1lcyEsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGhvc3RlZFpvbmU6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURuc1JlY29yZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuZG9tYWluKSByZXR1cm47XG5cbiAgICBjb25zdCB7IGhvc3RlZFpvbmUgfSA9IHRoaXMucmVzb2x2ZURvbWFpbkNvbmZpZygpO1xuICAgIGlmICghaG9zdGVkWm9uZSkgcmV0dXJuO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBETlMgcmVjb3JkIGluIHRoZSBDRE4gc3RhY2sgKG5vdCB0aGUgQ29tcHV0ZSBzdGFjayB3aGVyZSB0aGlzXG4gICAgLy8gUGF5bG9hZCBjb25zdHJ1Y3QgbGl2ZXMpIHRvIGF2b2lkIGEgY3ljbGljIGRlcGVuZGVuY3k6IENETiByZWZlcmVuY2VzIHRoZVxuICAgIC8vIHNlcnZlciBMYW1iZGEgRnVuY3Rpb25VcmwsIHNvIENvbXB1dGUgY2Fubm90IGFsc28gZGVwZW5kIG9uIENETi5cbiAgICBjb25zdCBjZG5TdGFjayA9IHRoaXMuYXBwLmdldERlZmF1bHRDZG5TdGFjaygpLmdldFN0YWNrKCk7XG4gICAgbmV3IEFSZWNvcmQoY2RuU3RhY2ssIGAke3RoaXMucGFzY2FsTmFtZX1BbGlhc1JlY29yZGAsIHtcbiAgICAgIHpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICByZWNvcmROYW1lOiB0aGlzLnByb3BzLmRvbWFpbixcbiAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgbmV3IENsb3VkRnJvbnRUYXJnZXQodGhpcy5fY2RuLmdldERpc3RyaWJ1dGlvbigpKVxuICAgICAgKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBvcnRQYXR0ZXJuT3V0cHV0cygpOiB2b2lkIHtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuVHlwZWAsIHtcbiAgICAgIGtleTogYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5UeXBlYCxcbiAgICAgIHZhbHVlOiBcInBheWxvYWRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgUGF0dGVybiB0eXBlIGZvciAke3RoaXMucHJvcHMubmFtZX1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuTmFtZWAsIHtcbiAgICAgIGtleTogYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5OYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYFBhdHRlcm4gbmFtZSBmb3IgJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVybkxhbWJkYXNgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuTGFtYmRhc2AsXG4gICAgICB2YWx1ZTogW1xuICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LXNlcnZlcmAsXG4gICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0taW1hZ2VgLFxuICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LXJldmFsaWRhdGlvbmBcbiAgICAgIF0uam9pbihcIixcIiksXG4gICAgICBkZXNjcmlwdGlvbjogYExhbWJkYSBjb25zdHJ1Y3QgcHJlZml4ZXMgZm9yIHBhdHRlcm4gJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVyblJlc291cmNlc2AsIHtcbiAgICAgIGtleTogYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5SZXNvdXJjZXNgLFxuICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZGF0YWJhc2VzOiBbdGhpcy5wcm9wcy5uYW1lLCBgJHt0aGlzLnByb3BzLm5hbWV9LXRhZy1jYWNoZWBdLFxuICAgICAgICBzdG9yYWdlOiBbXG4gICAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1hc3NldHNgLFxuICAgICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tY2FjaGVgLFxuICAgICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tbWVkaWFgXG4gICAgICAgIF0sXG4gICAgICAgIGNkbjogdGhpcy5wcm9wcy5uYW1lXG4gICAgICB9KSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUmVsYXRlZCByZXNvdXJjZSBuYW1lcyBmb3IgcGF0dGVybiAke3RoaXMucHJvcHMubmFtZX1gXG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhYmFzZSgpOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIHJldHVybiB0aGlzLl9kYXRhYmFzZTtcbiAgfVxuXG4gIGdldFNlcnZlcigpOiBMYW1iZGFDb21wdXRlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICB9XG5cbiAgZ2V0SW1hZ2VPcHRpbWlzYXRpb24oKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uO1xuICB9XG5cbiAgZ2V0UmV2YWxpZGF0aW9uKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIHJldHVybiB0aGlzLl9yZXZhbGlkYXRpb247XG4gIH1cblxuICBnZXRBc3NldHNCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2V0c0J1Y2tldDtcbiAgfVxuXG4gIGdldENhY2hlQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZUJ1Y2tldDtcbiAgfVxuXG4gIGdldE1lZGlhQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYUJ1Y2tldDtcbiAgfVxuXG4gIGdldFRhZ0NhY2hlKCk6IER5bmFtb0RCRGF0YWJhc2Uge1xuICAgIHJldHVybiB0aGlzLl90YWdDYWNoZTtcbiAgfVxuXG4gIGdldFJldmFsaWRhdGlvblF1ZXVlKCk6IFF1ZXVlTWVzc2FnaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcmV2YWxpZGF0aW9uUXVldWU7XG4gIH1cblxuICBnZXRDZG4oKTogQ2RuIHtcbiAgICByZXR1cm4gdGhpcy5fY2RuO1xuICB9XG59XG4iXX0=
|
|
584
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7OztBQUVILDJDQUF1QztBQUN2Qyw2Q0FBK0M7QUFDL0MseURBQXFEO0FBQ3JELHVEQU1nQztBQUNoQywrRUFJNEM7QUFDNUMseURBQTRFO0FBQzVFLHlFQUFtRTtBQUtuRSwrQ0FPdUI7QUFDdkIsNkNBS3NCO0FBQ3RCLDZDQUEwRTtBQUMxRSxpREFJd0I7QUFDeEIscUNBQW9FO0FBQ3BFLHlFQUE4RDtBQUM5RCx5RUFHeUM7QUFFekMsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixxRkFBcUY7SUFDckYsTUFBTSxFQUFFLE9BQU87SUFDZixtRkFBbUY7SUFDbkYsZUFBZSxFQUFFLFdBQVc7SUFDNUIsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQW1CO1FBQ3pCLDhFQUE4RTtRQUM5RSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLG1CQUFtQixFQUFFLElBQUk7S0FDMUI7SUFDRCxPQUFPLEVBQUU7UUFDUCw2RkFBNkY7UUFDN0YsYUFBYSxFQUFFLElBQUk7UUFDbkIsK0RBQStEO1FBQy9ELGNBQWMsRUFBRSxFQUFFO1FBQ2xCLDJFQUEyRTtRQUMzRSxZQUFZLEVBQUUsSUFBSTtRQUNsQix3RUFBd0U7UUFDeEUsYUFBYSxFQUFFLEVBQUU7UUFDakIsNEZBQTRGO1FBQzVGLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsK0VBQStFO1FBQy9FLG9CQUFvQixFQUFFLEdBQUc7S0FDMUI7SUFDRCxLQUFLLEVBQUU7UUFDTCxnR0FBZ0c7UUFDaEcsZUFBZSxFQUFFLFFBQVE7S0FDMUI7SUFDRCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsbUJBQW1CO1FBQzNCLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsTUFBTSxFQUFFLHFDQUFxQztRQUM3QyxLQUFLLEVBQUUsd0NBQXdDO1FBQy9DLFlBQVksRUFBRSxrQ0FBa0M7S0FDakQ7SUFDRCxLQUFLLEVBQUU7UUFDTCxNQUFNLEVBQUUsaUJBQWlCO1FBQ3pCLEtBQUssRUFBRSxlQUFlO1FBQ3RCLEdBQUcsRUFBRSxRQUFRO1FBQ2IsS0FBSyxFQUFFLFVBQVU7S0FDbEI7Q0FDTyxDQUFDO0FBRVg7OztHQUdHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxNQUFjO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQy9ELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxPQUFzQixFQUFFLElBQVk7SUFDM0QsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNSLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxJQUFJLHFDQUFxQztZQUMxQyxnRUFBZ0UsQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUE4QkQ7O0dBRUc7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixNQUVhLEVBQ2IsUUFBNkM7SUFFN0MsT0FBTztRQUNMLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxJQUFJLFFBQVEsQ0FBQyxNQUFNO1FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxJQUFJLFFBQVEsQ0FBQyxPQUFPO1FBQzVDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxvQkFBb0I7S0FDbkQsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxPQUFRLFNBQVEsc0JBQVM7SUEwQnBDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsR0FBUSxFQUFFLEtBQW9CO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUExQkgsZ0JBQVcsR0FBRyxTQUFrQixDQUFDO1FBNEIvQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBQSxrQ0FBWSxFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksZ0JBQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxlQUFlLEVBQUU7WUFDeEUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksaUJBQWlCO1lBQzFDLFdBQVcsRUFBRSwwQkFBMEIsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNuRCxvQkFBb0IsRUFBRTtnQkFDcEIsa0JBQWtCLEVBQUUsSUFBSTtnQkFDeEIsY0FBYyxFQUFFLEVBQUU7YUFDbkI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFckIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsTUFBTSxlQUFlLEdBQW9CO1lBQ3ZDLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUNyQixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtTQUNoQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sYUFBYTtRQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDM0MsSUFBSSxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNoQyxpQ0FBVyxDQUFDLElBQUksQ0FDZCxxQkFBcUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLDZDQUE2QztnQkFDL0Usa0VBQWtFLENBQ3JFLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQzNDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUVyRSxJQUFJLENBQUMsU0FBUztZQUNaLFlBQVksS0FBSyxRQUFRO2dCQUN2QixDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztnQkFDckMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sc0JBQXNCLENBQzVCLFFBQWdEO1FBRWhELE9BQU87WUFDTCxZQUFZLEVBQ1YsUUFBUSxDQUFDLFlBQVksSUFBSSxJQUFBLHlDQUFtQixFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQy9ELGNBQWMsRUFBRSxRQUFRLENBQUMsY0FBYyxJQUFJLFlBQVk7WUFDdkQsZUFBZSxFQUNiLFFBQVEsQ0FBQyxlQUFlLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtZQUN4RSxrQkFBa0IsRUFDaEIsUUFBUSxDQUFDLGtCQUFrQjtnQkFDM0IsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLG1CQUFtQjtZQUMvQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsa0JBQWtCO1lBQy9DLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtZQUNuQixnQkFBZ0IsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO1lBQzNDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztZQUNyQixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7WUFDakMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLGtCQUFrQjtZQUMvQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO1NBQzVDLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CLENBQzFCLFFBQWdEO1FBRWhELE1BQU0sV0FBVyxHQUF3QjtZQUN2QyxJQUFJLEVBQUUsUUFBUTtZQUNkLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztZQUN4QyxhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWE7WUFDckMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQy9CLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtZQUN2QixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87WUFDekIsY0FBYyxFQUFFLFFBQVEsQ0FBQyxjQUFjO1lBQ3ZDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7WUFDL0MsMEJBQTBCLEVBQUUsUUFBUSxDQUFDLDBCQUEwQjtTQUNoRSxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FDekIsNkJBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQ3BELENBQUM7SUFDSixDQUFDO0lBRU8sc0JBQXNCLENBQzVCLFFBQWdEO1FBRWhELE1BQU0sYUFBYSxHQUEwQjtZQUMzQyxJQUFJLEVBQUUsVUFBVTtZQUNoQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7WUFDeEMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixJQUFJLEtBQUs7WUFDeEQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1lBQ25DLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxnQkFBZ0I7WUFDM0MsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ3pCLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztZQUNqQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7U0FDaEMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQ3pCLDZCQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUN0RCxDQUFDO0lBQ0osQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDdEQsTUFBTSxXQUFXLEdBQVk7WUFDM0IsU0FBUyxFQUFFLFlBQVksQ0FBQyxTQUFTLElBQUksS0FBSztZQUMxQyxVQUFVLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3hFLEtBQUssRUFBRSxJQUFJO2dCQUNYLFlBQVksRUFBRTtvQkFDWixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGVBQWU7b0JBQzlDLFNBQVMsRUFBRSxJQUFJO2lCQUNoQjthQUNGO1NBQ0YsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ3hCLDJCQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FDL0QsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFVBQVUsR0FBWTtZQUMxQixTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVMsSUFBSSxLQUFLO1lBQ3pDLFVBQVUsRUFBRTtnQkFDVixNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtnQkFDdkUsS0FBSyxFQUFFLEtBQUssQ0FBQyw0QkFBNEI7YUFDMUM7U0FDRixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FDeEIsMkJBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUM3RCxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3BELE1BQU0sVUFBVSxHQUFZO1lBQzFCLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxJQUFJLEtBQUs7U0FDMUMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ3hCLDJCQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FDN0QsQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sYUFBYSxHQUEwQjtZQUMzQyxJQUFJLEVBQUUsVUFBVTtZQUNoQixZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDeEMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLHNCQUFzQixFQUFFO2dCQUN0QjtvQkFDRSxTQUFTLEVBQUUsWUFBWTtvQkFDdkIsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO29CQUN6QyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7aUJBQzlDO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FDbkMsNkJBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUNyRSxDQUFDO0lBQ0osQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsSUFBSSxFQUFFLENBQUM7UUFDbEUsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU87WUFDekMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1FBRWhELG1DQUFtQztRQUNuQyxJQUFJLFNBQXlDLENBQUM7UUFDOUMsSUFBSSxXQUFXLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDeEIsQ0FBQzthQUFNLElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZDLFNBQVMsR0FBRztnQkFDVixPQUFPLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLElBQUksSUFBSTtnQkFDcEQsZUFBZSxFQUFFLFdBQVcsQ0FBQyxlQUFlLENBQUMsZUFBZSxJQUFJLENBQUM7YUFDbEUsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDcEQsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFnQjtZQUM5QixJQUFJLEVBQUUsT0FBTztZQUNiLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxtQkFBbUI7WUFDdkUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLHNCQUFzQjtZQUMxRCxjQUFjLEVBQUUsV0FBVyxDQUFDLGNBQWM7WUFDMUMseUJBQXlCLEVBQUUsSUFBSTtZQUMvQixlQUFlLEVBQUUsU0FBUztTQUMzQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUM3QywrQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUN0RSxDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxtQkFBbUIsQ0FDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUMxQjtZQUNFLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYTtZQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGNBQWM7U0FDakQsQ0FDRixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQW9CO1lBQ25DLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLE1BQU07WUFDbEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUNsQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQ2pFO1lBQ0QsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixZQUFZLEVBQUUseUJBQVksQ0FBQyxNQUFNO1lBQ2pDLFVBQVU7WUFDVixPQUFPO1lBQ1Asb0JBQW9CO1lBQ3BCLFdBQVcsRUFBRTtnQkFDWCxRQUFRLEVBQUUsZ0NBQW1CLENBQUMsSUFBSTtnQkFDbEMsVUFBVSxFQUFFLHVCQUFVLENBQUMsZUFBZTthQUN2QztZQUNELFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDN0IsYUFBYSxFQUFFO2dCQUNiLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTO3FCQUM5QixjQUFjLEVBQUU7cUJBQ2hCLFNBQVMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3hCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTO3FCQUM5QixjQUFjLEVBQUU7cUJBQ2hCLFNBQVMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3hCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRTthQUNoRDtZQUNELFdBQVcsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7U0FDM0MsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUNoQywyQkFBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQy9ELENBQUM7UUFFRixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixNQUFNLE9BQU8sR0FBMkI7WUFDdEMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFO1lBQy9DLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRTtZQUMzQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUU7WUFDL0MsWUFBWSxFQUFFLE1BQU07WUFDcEIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUU7WUFDcEQsbUJBQW1CLEVBQUUsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtZQUMxQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRTtZQUNqRCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFO1lBQzdELHlCQUF5QixFQUFFLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07WUFDaEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUU7U0FDckQsQ0FBQztRQUVGLGdEQUFnRDtRQUNoRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxXQUFXLFlBQVksRUFBRSxDQUFDO1FBQzdELENBQUM7UUFFRCxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxNQUFxQjtRQUNsRCxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxtQkFBbUIsQ0FDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQ3JDO1lBQ0UsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxZQUFZO1lBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYTtTQUNoRCxDQUNGLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBb0I7WUFDbEMsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsTUFBTTtZQUNsQixJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQ2xCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FDaEU7WUFDRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLFlBQVksRUFBRSx5QkFBWSxDQUFDLE1BQU07WUFDakMsVUFBVTtZQUNWLE9BQU87WUFDUCxvQkFBb0I7WUFDcEIsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLGdDQUFtQixDQUFDLElBQUksRUFBRTtZQUNuRCxXQUFXLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFO2dCQUMvQyxpQkFBaUIsRUFBRSxTQUFTO2FBQzdCO1NBQ0YsQ0FBQztRQUVGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUMvQiwyQkFBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQzdELENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFNUMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsbUJBQW1CLENBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksRUFDaEM7WUFDRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG1CQUFtQjtZQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG9CQUFvQjtTQUN2RCxDQUNGLENBQUM7UUFFRixNQUFNLGlCQUFpQixHQUFvQjtZQUN6QyxJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FDbEIsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUN2RTtZQUNELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsWUFBWSxFQUFFLHlCQUFZLENBQUMsTUFBTTtZQUNqQyxVQUFVO1lBQ1YsT0FBTztZQUNQLG9CQUFvQjtZQUNwQixXQUFXLEVBQUU7Z0JBQ1gsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pELGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFO2FBQ3JEO1NBQ0YsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUN0QywyQkFBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlLEVBQUUsaUJBQWlCLENBQUMsQ0FDM0UsQ0FBQztRQUVGLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDNUQsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3ZFLFNBQVMsRUFBRSxDQUFDO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRW5FLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxTQUFTO1FBQ2YsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUVoRSxNQUFNLFFBQVEsR0FBa0I7WUFDOUIsVUFBVSxFQUFFLE1BQU07WUFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3BCLFdBQVcsRUFBRSxrQkFBa0I7WUFDL0IscUJBQXFCLEVBQUUsS0FBSztZQUM1QixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLFVBQVUsRUFBRSxnQkFBZ0I7WUFDNUIsV0FBVztZQUNYLFdBQVc7WUFDWCxVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNO29CQUMxQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWE7b0JBQzFCLFdBQVcsRUFBRSxtQkFBbUI7aUJBQ2pDO2dCQUNEO29CQUNFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSztvQkFDekMsTUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7b0JBQy9CLFdBQVcsRUFBRSxtQkFBbUI7aUJBQ2pDO2dCQUNEO29CQUNFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRztvQkFDdkMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO29CQUNwQixXQUFXLEVBQUUsa0JBQWtCO29CQUMvQixjQUFjLEVBQUUsS0FBSztpQkFDdEI7Z0JBQ0Q7b0JBQ0UsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLO29CQUN6QyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3BCLFdBQVcsRUFBRSxrQkFBa0I7b0JBQy9CLGNBQWMsRUFBRSxLQUFLO2lCQUN0QjtnQkFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQzthQUN0QztTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLG1CQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVPLG1CQUFtQjtRQUt6QixJQUFJLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRXRELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3BELENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3RELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRztnQkFDckIsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixVQUFVLEVBQUUsU0FBUzthQUN0QixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRU8sbUJBQW1CO1FBS3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0MsTUFBTSxVQUFVLEdBQUcsd0JBQVUsQ0FBQyxVQUFVLENBQ3RDLElBQUksRUFDSixHQUFHLElBQUksQ0FBQyxVQUFVLFlBQVksRUFDOUIsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQzNCLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLG9DQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsYUFBYSxFQUFFO1lBQ3pFLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFVBQVUsRUFBRSw4Q0FBcUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1NBQ3RELENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVPLHFCQUFxQjtRQUszQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUNiLDhEQUE4RCxDQUMvRCxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sV0FBVyxHQUNmLFNBQVMsQ0FBQyxXQUFXO1lBQ3JCLENBQUMsU0FBUyxDQUFDLGNBQWM7Z0JBQ3ZCLENBQUMsQ0FBQyxvQ0FBVyxDQUFDLGtCQUFrQixDQUM1QixJQUFJLEVBQ0osR0FBRyxJQUFJLENBQUMsVUFBVSxhQUFhLEVBQy9CLFNBQVMsQ0FBQyxjQUFjLENBQ3pCO2dCQUNILENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqQixPQUFPO1lBQ0wsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXO1lBQ2xDLFdBQVc7WUFDWCxVQUFVLEVBQUUsU0FBUztTQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFL0IsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUV4QiwyRUFBMkU7UUFDM0UsNEVBQTRFO1FBQzVFLG1FQUFtRTtRQUNuRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUQsSUFBSSxxQkFBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWEsRUFBRTtZQUNyRCxJQUFJLEVBQUUsVUFBVTtZQUNoQixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzdCLE1BQU0sRUFBRSwwQkFBWSxDQUFDLFNBQVMsQ0FDNUIsSUFBSSxzQ0FBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQ2xEO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsYUFBYSxFQUFFO1lBQ25ELEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWE7WUFDcEMsS0FBSyxFQUFFLFNBQVM7WUFDaEIsV0FBVyxFQUFFLG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtTQUNuRCxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsYUFBYSxFQUFFO1lBQ25ELEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWE7WUFDcEMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUN0QixXQUFXLEVBQUUsb0JBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1NBQ25ELENBQUMsQ0FBQztRQUVILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxnQkFBZ0IsRUFBRTtZQUN0RCxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxnQkFBZ0I7WUFDdkMsS0FBSyxFQUFFO2dCQUNMLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVM7Z0JBQzNCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVE7Z0JBQzFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWU7YUFDbEMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ1gsV0FBVyxFQUFFLHlDQUF5QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtTQUN4RSxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsa0JBQWtCLEVBQUU7WUFDeEQsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsa0JBQWtCO1lBQ3pDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNwQixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUM7Z0JBQzVELE9BQU8sRUFBRTtvQkFDUCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTO29CQUMzQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRO29CQUMxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRO2lCQUMzQjtnQkFDRCxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO2FBQ3JCLENBQUM7WUFDRixXQUFXLEVBQUUsc0NBQXNDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUE1bUJELDBCQTRtQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBheWxvYWQgQ01TIFBhdHRlcm4uXG4gKlxuICogQSBoaWdoLWxldmVsIHBhdHRlcm4gdGhhdCBjcmVhdGVzIGFsbCBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCBmb3IgYVxuICogUGF5bG9hZCBDTVMgZGVwbG95bWVudCB1c2luZyBPcGVuTmV4dC5cbiAqXG4gKiBSZXNvdXJjZXMgY3JlYXRlZDpcbiAqIC0gUkRTIFBvc3RncmVTUUwgZGF0YWJhc2UgKEF1cm9yYSBvciBJbnN0YW5jZSlcbiAqIC0gMyBTMyBidWNrZXRzIChhc3NldHMsIGNhY2hlLCBtZWRpYSlcbiAqIC0gRHluYW1vREIgdGFibGUgKHRhZyBjYWNoZSB3aXRoIEdTSSlcbiAqIC0gU1FTIEZJRk8gcXVldWUgKHJldmFsaWRhdGlvbilcbiAqIC0gMyBMYW1iZGEgZnVuY3Rpb25zIChzZXJ2ZXIsIGltYWdlIG9wdGltaXNhdGlvbiwgcmV2YWxpZGF0aW9uKVxuICogLSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwYXlsb2FkID0gYXBwLmFkZFBhdHRlcm4oUGF0dGVybkZhY3RvcnkuYnVpbGQoXCJQYXlsb2FkQXBwXCIsIHtcbiAqICAgdHlwZTogXCJwYXlsb2FkXCIsXG4gKiAgIG5hbWU6IFwibXktY21zXCJcbiAqIH0pKTtcbiAqXG4gKiAvLyBFc2NhcGUgaGF0Y2hlc1xuICogcGF5bG9hZC5nZXREYXRhYmFzZSgpLmdyYW50Q29ubmVjdChvdGhlckxhbWJkYSk7XG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcbmltcG9ydCB7XG4gIENvZGUsXG4gIFJ1bnRpbWUsXG4gIEFyY2hpdGVjdHVyZSxcbiAgRnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgdHlwZSBJRnVuY3Rpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7XG4gIENlcnRpZmljYXRlLFxuICBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24sXG4gIHR5cGUgSUNlcnRpZmljYXRlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCI7XG5pbXBvcnQgeyBIb3N0ZWRab25lLCBBUmVjb3JkLCBSZWNvcmRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBJUGF5bG9hZFByb3BzLCB0eXBlIElQYXlsb2FkIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyB0eXBlIE1hbmlmZXN0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9tYW5pZmVzdFdyaXRlci5qc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBSZWxhdGlvbmFsRGF0YWJhc2UsXG4gIHR5cGUgRHluYW1vREJEYXRhYmFzZSxcbiAgRGF0YWJhc2VGYWN0b3J5LFxuICB0eXBlIEF1cm9yYURhdGFiYXNlUHJvcHMsXG4gIHR5cGUgSW5zdGFuY2VEYXRhYmFzZVByb3BzLFxuICB0eXBlIER5bmFtb0RCRGF0YWJhc2VQcm9wc1xufSBmcm9tIFwiLi9kYXRhYmFzZS5qc1wiO1xuaW1wb3J0IHtcbiAgQ29tcHV0ZUZhY3RvcnksXG4gIHR5cGUgTGFtYmRhQ29tcHV0ZSxcbiAgSW52b2tlTW9kZSxcbiAgdHlwZSBDb2RlTGFtYmRhUHJvcHNcbn0gZnJvbSBcIi4vY29tcHV0ZS5qc1wiO1xuaW1wb3J0IHsgU3RvcmFnZUZhY3RvcnksIHR5cGUgU3RvcmFnZSwgdHlwZSBTM1Byb3BzIH0gZnJvbSBcIi4vc3RvcmFnZS5qc1wiO1xuaW1wb3J0IHtcbiAgTWVzc2FnaW5nRmFjdG9yeSxcbiAgdHlwZSBRdWV1ZU1lc3NhZ2luZyxcbiAgdHlwZSBJUXVldWVQcm9wc1xufSBmcm9tIFwiLi9tZXNzYWdpbmcuanNcIjtcbmltcG9ydCB7IENkbkZhY3RvcnksIHR5cGUgQ2RuLCB0eXBlIFNtYXJ0Q2RuUHJvcHMgfSBmcm9tIFwiLi9jZG4uanNcIjtcbmltcG9ydCB7IEZqYWxsTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcbmltcG9ydCB7XG4gIHRvUGFzY2FsQ2FzZSxcbiAgdG9WYWxpZERhdGFiYXNlTmFtZVxufSBmcm9tIFwiLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZy5qc1wiO1xuXG5jb25zdCBQQVlMT0FEX0RFRkFVTFRTID0ge1xuICAvKiogUGF0aCB0byBPcGVuTmV4dCBvdXRwdXQgcmVsYXRpdmUgdG8gYXBwIGZvbGRlciAoQ0RLIHJ1bnMgZnJvbSBmamFsbC88YXBwbmFtZT4pICovXG4gIFNPVVJDRTogXCIuLi8uLlwiLFxuICAvKiogQ2xvdWRGcm9udCByZXF1aXJlcyB1cy1lYXN0LTEgZm9yIGNlcnRhaW4gcmVzb3VyY2VzOyB1c2VkIGFzIHJlZ2lvbiBmYWxsYmFjayAqL1xuICBGQUxMQkFDS19SRUdJT046IFwidXMtZWFzdC0xXCIsXG4gIERBVEFCQVNFOiB7XG4gICAgVFlQRTogXCJJbnN0YW5jZVwiIGFzIGNvbnN0LFxuICAgIC8qKiBBV1MgZGVmYXVsdDsgNyBkYXlzIGNvdmVycyBtb3N0IGFjY2lkZW50YWwgZGF0YSBsb3NzIHJlY292ZXJ5IHNjZW5hcmlvcyAqL1xuICAgIEJBQ0tVUF9SRVRFTlRJT046IDcsXG4gICAgREVMRVRJT05fUFJPVEVDVElPTjogdHJ1ZVxuICB9LFxuICBDT01QVVRFOiB7XG4gICAgLyoqIDEuNSBHQiBiYWxhbmNlcyBOZXh0LmpzIFNTUiBwZXJmb3JtYW5jZSB2cyBjb3N0OyBiZWxvdyB0aGlzIHJpc2tzIE9PTSBvbiBjb21wbGV4IHBhZ2VzICovXG4gICAgU0VSVkVSX01FTU9SWTogMTUzNixcbiAgICAvKiogQVBJIEdhdGV3YXkgZGVmYXVsdCBtYXg7IHN1ZmZpY2llbnQgZm9yIG1vc3QgU1NSIHJlbmRlcnMgKi9cbiAgICBTRVJWRVJfVElNRU9VVDogMzAsXG4gICAgLyoqIFNoYXJwIGltYWdlIHByb2Nlc3NpbmcgbmVlZHMgbWVtb3J5IHByb3BvcnRpb25hbCB0byBpbWFnZSBkaW1lbnNpb25zICovXG4gICAgSU1BR0VfTUVNT1JZOiAxNTM2LFxuICAgIC8qKiBJbWFnZSBwcm9jZXNzaW5nIHR5cGljYWxseSBjb21wbGV0ZXMgaW4gPDEwczsgMzBzIHByb3ZpZGVzIG1hcmdpbiAqL1xuICAgIElNQUdFX1RJTUVPVVQ6IDMwLFxuICAgIC8qKiBSZXZhbGlkYXRpb24gaXMgbGlnaHR3ZWlnaHQgKEhUVFAgY2FsbCArIGNhY2hlIHdyaXRlKTsgaGFsZiBvZiBzZXJ2ZXIgbWVtb3J5IHN1ZmZpY2VzICovXG4gICAgUkVWQUxJREFUSU9OX01FTU9SWTogNzY4LFxuICAgIC8qKiA1IG1pbnV0ZXMgYWxsb3dzIGJhdGNoIHJldmFsaWRhdGlvbiBvZiBtYW55IHBhZ2VzIGluIGEgc2luZ2xlIGludm9jYXRpb24gKi9cbiAgICBSRVZBTElEQVRJT05fVElNRU9VVDogMzAwXG4gIH0sXG4gIENBQ0hFOiB7XG4gICAgLyoqIDEgeWVhciDigJQgc3RhdGljIGFzc2V0cyBhcmUgY29udGVudC1oYXNoZWQgc28gbG9uZyBjYWNoaW5nIGlzIHNhZmU7IG1heGltaXNlcyBDRE4gaGl0IHJhdGUgKi9cbiAgICBNQVhfQUdFX1NFQ09ORFM6IDMxNTM2MDAwXG4gIH0sXG4gIE9QRU5ORVhUOiB7XG4gICAgQVNTRVRTOiBcIi5vcGVuLW5leHQvYXNzZXRzXCIsXG4gICAgQ0FDSEU6IFwiLm9wZW4tbmV4dC9jYWNoZVwiLFxuICAgIFNFUlZFUjogXCIub3Blbi1uZXh0L3NlcnZlci1mdW5jdGlvbnMvZGVmYXVsdFwiLFxuICAgIElNQUdFOiBcIi5vcGVuLW5leHQvaW1hZ2Utb3B0aW1pemF0aW9uLWZ1bmN0aW9uXCIsXG4gICAgUkVWQUxJREFUSU9OOiBcIi5vcGVuLW5leHQvcmV2YWxpZGF0aW9uLWZ1bmN0aW9uXCJcbiAgfSxcbiAgUEFUSFM6IHtcbiAgICBTVEFUSUM6IFwiL19uZXh0L3N0YXRpYy8qXCIsXG4gICAgSU1BR0U6IFwiL19uZXh0L2ltYWdlKlwiLFxuICAgIEFQSTogXCIvYXBpLypcIixcbiAgICBBRE1JTjogXCIvYWRtaW4vKlwiXG4gIH1cbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogRXh0cmFjdCByb290IGRvbWFpbiBmcm9tIGEgZnVsbCBkb21haW4gbmFtZS5cbiAqIGUuZy4sIFwiY21zLmV4YW1wbGUuY29tXCIgLT4gXCJleGFtcGxlLmNvbVwiXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RSb290RG9tYWluKGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBkb21haW4uc3BsaXQoXCIuXCIpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMiA/IHBhcnRzLnNsaWNlKC0yKS5qb2luKFwiLlwiKSA6IGRvbWFpbjtcbn1cblxuLyoqXG4gKiBTYWZlbHkgZ2V0IHRoZSB1bmRlcmx5aW5nIExhbWJkYSBmdW5jdGlvbiBmcm9tIGEgY29tcHV0ZSByZXNvdXJjZS5cbiAqIFRocm93cyBhIGNsZWFyIGVycm9yIGlmIHRoZSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiByZXF1aXJlRnVuY3Rpb24oY29tcHV0ZTogTGFtYmRhQ29tcHV0ZSwgbmFtZTogc3RyaW5nKTogSUZ1bmN0aW9uIHtcbiAgY29uc3QgZm4gPSBjb21wdXRlLmdldEZ1bmN0aW9uKCk7XG4gIGlmICghZm4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtuYW1lfSBMYW1iZGEgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gYCArXG4gICAgICAgIFwiVGhpcyBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgZXJyb3IgaW4gY29tcHV0ZSByZXNvdXJjZSBjcmVhdGlvbi5cIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIEJhc2UgZGF0YWJhc2UgcHJvcGVydGllcyBzaGFyZWQgYmV0d2VlbiBBdXJvcmEgYW5kIEluc3RhbmNlLlxuICogVXNlcyBQaWNrIHRvIGV4dHJhY3QgY29tbW9uIHByb3BlcnRpZXMgZnJvbSB0aGUgZGF0YWJhc2UgY29uZmlnLlxuICovXG50eXBlIEJhc2VEYXRhYmFzZVByb3BzID0gUGljazxcbiAgSW5zdGFuY2VEYXRhYmFzZVByb3BzLFxuICB8IFwiZGF0YWJhc2VOYW1lXCJcbiAgfCBcImRhdGFiYXNlRW5naW5lXCJcbiAgfCBcImJhY2t1cFJldGVudGlvblwiXG4gIHwgXCJkZWxldGlvblByb3RlY3Rpb25cIlxuICB8IFwicHVibGljbHlBY2Nlc3NpYmxlXCJcbiAgfCBcInBvcnRcIlxuICB8IFwiZGF0YWJhc2VJbnNpZ2h0c1wiXG4gIHwgXCJwcm94eVwiXG4gIHwgXCJjcmVkZW50aWFsc1wiXG4gIHwgXCJzbmFwc2hvdElkZW50aWZpZXJcIlxuICB8IFwic25hcHNob3RVc2VybmFtZVwiXG4+O1xuXG4vKipcbiAqIExhbWJkYSBjb25maWd1cmF0aW9uIHdpdGggcmVzb2x2ZWQgZGVmYXVsdHMuXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlZExhbWJkYUNvbmZpZyB7XG4gIG1lbW9yeVNpemU6IG51bWJlcjtcbiAgdGltZW91dDogbnVtYmVyO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IExhbWJkYSBjb25maWcgZnJvbSBwcm9wcyB3aXRoIGRlZmF1bHRzLlxuICovXG5mdW5jdGlvbiByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICBjb25maWc6XG4gICAgfCB7IG1lbW9yeVNpemU/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXI7IGVwaGVtZXJhbFN0b3JhZ2VTaXplPzogbnVtYmVyIH1cbiAgICB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdHM6IHsgbWVtb3J5OiBudW1iZXI7IHRpbWVvdXQ6IG51bWJlciB9XG4pOiBSZXNvbHZlZExhbWJkYUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgbWVtb3J5U2l6ZTogY29uZmlnPy5tZW1vcnlTaXplID8/IGRlZmF1bHRzLm1lbW9yeSxcbiAgICB0aW1lb3V0OiBjb25maWc/LnRpbWVvdXQgPz8gZGVmYXVsdHMudGltZW91dCxcbiAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZTogY29uZmlnPy5lcGhlbWVyYWxTdG9yYWdlU2l6ZVxuICB9O1xufVxuXG4vKipcbiAqIFBheWxvYWQgQ01TIHBhdHRlcm4gaW1wbGVtZW50YXRpb24uXG4gKlxuICogQ29tcG9zZXMgYWxsIHJlcXVpcmVkIEFXUyByZXNvdXJjZXMgZm9yIGEgUGF5bG9hZCBkZXBsb3ltZW50LlxuICovXG5leHBvcnQgY2xhc3MgUGF5bG9hZCBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElQYXlsb2FkIHtcbiAgcHVibGljIHJlYWRvbmx5IHBhdHRlcm5UeXBlID0gXCJwYXlsb2FkXCIgYXMgY29uc3Q7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSVBheWxvYWRQcm9wcztcbiAgcHJpdmF0ZSByZWFkb25seSBwYXNjYWxOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BheWxvYWRTZWNyZXQ6IFNlY3JldDtcblxuICBwcml2YXRlIF9kYXRhYmFzZSE6IFJlbGF0aW9uYWxEYXRhYmFzZTtcbiAgcHJpdmF0ZSBfc2VydmVyITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfaW1hZ2VPcHRpbWlzYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9hc3NldHNCdWNrZXQhOiBTdG9yYWdlO1xuICBwcml2YXRlIF9jYWNoZUJ1Y2tldCE6IFN0b3JhZ2U7XG4gIHByaXZhdGUgX21lZGlhQnVja2V0ITogU3RvcmFnZTtcbiAgcHJpdmF0ZSBfdGFnQ2FjaGUhOiBEeW5hbW9EQkRhdGFiYXNlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb25RdWV1ZSE6IFF1ZXVlTWVzc2FnaW5nO1xuICBwcml2YXRlIF9jZG4hOiBDZG47XG4gIHByaXZhdGUgX3Jlc29sdmVkRG9tYWluOlxuICAgIHwge1xuICAgICAgICBkb21haW5OYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgICAgIGhvc3RlZFpvbmU6IFJldHVyblR5cGU8dHlwZW9mIEhvc3RlZFpvbmUuZnJvbUxvb2t1cD4gfCB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXBwOiBBcHAsIHByb3BzOiBJUGF5bG9hZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLnBhc2NhbE5hbWUgPSB0b1Bhc2NhbENhc2UocHJvcHMubmFtZSk7XG4gICAgdGhpcy5fcGF5bG9hZFNlY3JldCA9IG5ldyBTZWNyZXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBheWxvYWRTZWNyZXRgLCB7XG4gICAgICBzZWNyZXROYW1lOiBgJHtwcm9wcy5uYW1lfS9wYXlsb2FkLXNlY3JldGAsXG4gICAgICBkZXNjcmlwdGlvbjogYFBheWxvYWQgQ01TIHNlY3JldCBmb3IgJHtwcm9wcy5uYW1lfWAsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgIHBhc3N3b3JkTGVuZ3RoOiA2NFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3Rlck1hbmlmZXN0KCk7XG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKCk7XG5cbiAgICB0aGlzLmNyZWF0ZURhdGFiYXNlKCk7XG4gICAgdGhpcy5jcmVhdGVTdG9yYWdlQnVja2V0cygpO1xuICAgIHRoaXMuY3JlYXRlVGFnQ2FjaGUoKTtcbiAgICB0aGlzLmNyZWF0ZVJldmFsaWRhdGlvblF1ZXVlKCk7XG4gICAgdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbnMoKTtcbiAgICB0aGlzLmNyZWF0ZUNkbigpO1xuICAgIHRoaXMuY3JlYXRlRG5zUmVjb3JkKCk7XG4gICAgdGhpcy5leHBvcnRQYXR0ZXJuT3V0cHV0cygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlck1hbmlmZXN0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1hbmlmZXN0UGF0dGVybjogTWFuaWZlc3RQYXR0ZXJuID0ge1xuICAgICAgdHlwZTogXCJwYXlsb2FkXCIsXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICBzb3VyY2U6IFBBWUxPQURfREVGQVVMVFMuU09VUkNFXG4gICAgfTtcbiAgICB0aGlzLmFwcC5nZXRNYW5pZmVzdENvbGxlY3RvcigpLnNldFBhdHRlcm4obWFuaWZlc3RQYXR0ZXJuKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcygpOiB2b2lkIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IHRoaXMucHJvcHMuZGF0YWJhc2UgPz8ge307XG4gICAgaWYgKGRiQ29uZmlnLnB1YmxpY2x5QWNjZXNzaWJsZSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgYFBheWxvYWQgZGF0YWJhc2UgJyR7dGhpcy5wcm9wcy5uYW1lfScgaXMgY29uZmlndXJlZCB3aXRoIHB1YmxpYyBhY2Nlc3NpYmlsaXR5LiBgICtcbiAgICAgICAgICBcIlRoaXMgaXMgYSBzZWN1cml0eSByaXNrIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudC5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhdGFiYXNlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRiQ29uZmlnID0gdGhpcy5wcm9wcy5kYXRhYmFzZSA/PyB7fTtcbiAgICBjb25zdCBkYXRhYmFzZVR5cGUgPSBkYkNvbmZpZy50eXBlID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuVFlQRTtcblxuICAgIHRoaXMuX2RhdGFiYXNlID1cbiAgICAgIGRhdGFiYXNlVHlwZSA9PT0gXCJBdXJvcmFcIlxuICAgICAgICA/IHRoaXMuY3JlYXRlQXVyb3JhRGF0YWJhc2UoZGJDb25maWcpXG4gICAgICAgIDogdGhpcy5jcmVhdGVJbnN0YW5jZURhdGFiYXNlKGRiQ29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFiYXNlTmFtZTpcbiAgICAgICAgZGJDb25maWcuZGF0YWJhc2VOYW1lID8/IHRvVmFsaWREYXRhYmFzZU5hbWUodGhpcy5wcm9wcy5uYW1lKSxcbiAgICAgIGRhdGFiYXNlRW5naW5lOiBkYkNvbmZpZy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIixcbiAgICAgIGJhY2t1cFJldGVudGlvbjpcbiAgICAgICAgZGJDb25maWcuYmFja3VwUmV0ZW50aW9uID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuQkFDS1VQX1JFVEVOVElPTixcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjpcbiAgICAgICAgZGJDb25maWcuZGVsZXRpb25Qcm90ZWN0aW9uID8/XG4gICAgICAgIFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuREVMRVRJT05fUFJPVEVDVElPTixcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgcG9ydDogZGJDb25maWcucG9ydCxcbiAgICAgIGRhdGFiYXNlSW5zaWdodHM6IGRiQ29uZmlnLmRhdGFiYXNlSW5zaWdodHMsXG4gICAgICBwcm94eTogZGJDb25maWcucHJveHksXG4gICAgICBjcmVkZW50aWFsczogZGJDb25maWcuY3JlZGVudGlhbHMsXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IGRiQ29uZmlnLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgIHNuYXBzaG90VXNlcm5hbWU6IGRiQ29uZmlnLnNuYXBzaG90VXNlcm5hbWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBdXJvcmFEYXRhYmFzZShcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIGNvbnN0IGF1cm9yYVByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJBdXJvcmFcIixcbiAgICAgIC4uLnRoaXMuYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhkYkNvbmZpZyksXG4gICAgICBhbGxvd2VkSXBDaWRyOiBkYkNvbmZpZy5hbGxvd2VkSXBDaWRyLFxuICAgICAgZW5jcnlwdGlvbjogZGJDb25maWcuZW5jcnlwdGlvbixcbiAgICAgIHdyaXRlcjogZGJDb25maWcud3JpdGVyLFxuICAgICAgcmVhZGVyczogZGJDb25maWcucmVhZGVycyxcbiAgICAgIGFsbG93VnBjQWNjZXNzOiBkYkNvbmZpZy5hbGxvd1ZwY0FjY2VzcyxcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogZGJDb25maWcubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IGRiQ29uZmlnLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkRGF0YWJhc2UoXG4gICAgICBEYXRhYmFzZUZhY3RvcnkuYnVpbGQodGhpcy5wcm9wcy5uYW1lLCBhdXJvcmFQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbnN0YW5jZURhdGFiYXNlKFxuICAgIGRiQ29uZmlnOiBOb25OdWxsYWJsZTxJUGF5bG9hZFByb3BzW1wiZGF0YWJhc2VcIl0+XG4gICk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgY29uc3QgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJJbnN0YW5jZVwiLFxuICAgICAgLi4udGhpcy5idWlsZEJhc2VEYXRhYmFzZVByb3BzKGRiQ29uZmlnKSxcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlID8/IGZhbHNlLFxuICAgICAgaW5zdGFuY2VUeXBlOiBkYkNvbmZpZy5pbnN0YW5jZVR5cGUsXG4gICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBkYkNvbmZpZy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgbXVsdGlBejogZGJDb25maWcubXVsdGlBeixcbiAgICAgIHJlYWRSZXBsaWNhOiBkYkNvbmZpZy5yZWFkUmVwbGljYSxcbiAgICAgIGVuY3J5cHRpb246IGRiQ29uZmlnLmVuY3J5cHRpb25cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGREYXRhYmFzZShcbiAgICAgIERhdGFiYXNlRmFjdG9yeS5idWlsZCh0aGlzLnByb3BzLm5hbWUsIGluc3RhbmNlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RvcmFnZUJ1Y2tldHMoKTogdm9pZCB7XG4gICAgdGhpcy5fYXNzZXRzQnVja2V0ID0gdGhpcy5jcmVhdGVBc3NldHNCdWNrZXQoKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldCA9IHRoaXMuY3JlYXRlQ2FjaGVCdWNrZXQoKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldCA9IHRoaXMuY3JlYXRlTWVkaWFCdWNrZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXNzZXRzQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIGNvbnN0IGFzc2V0c0NvbmZpZyA9IHRoaXMucHJvcHMuc3RvcmFnZT8uYXNzZXRzID8/IHt9O1xuICAgIGNvbnN0IGFzc2V0c1Byb3BzOiBTM1Byb3BzID0ge1xuICAgICAgdmVyc2lvbmVkOiBhc3NldHNDb25maWcudmVyc2lvbmVkID8/IGZhbHNlLFxuICAgICAgZGVwbG95bWVudDoge1xuICAgICAgICBzb3VyY2U6IGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuQVNTRVRTfWAsXG4gICAgICAgIHBydW5lOiB0cnVlLFxuICAgICAgICBjYWNoZUNvbnRyb2w6IHtcbiAgICAgICAgICBtYXhBZ2U6IFBBWUxPQURfREVGQVVMVFMuQ0FDSEUuTUFYX0FHRV9TRUNPTkRTLFxuICAgICAgICAgIGltbXV0YWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkU3RvcmFnZShcbiAgICAgIFN0b3JhZ2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tYXNzZXRzYCwgYXNzZXRzUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2FjaGVCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgY29uc3QgY2FjaGVDb25maWcgPSB0aGlzLnByb3BzLnN0b3JhZ2U/LmNhY2hlID8/IHt9O1xuICAgIGNvbnN0IGNhY2hlUHJvcHM6IFMzUHJvcHMgPSB7XG4gICAgICB2ZXJzaW9uZWQ6IGNhY2hlQ29uZmlnLnZlcnNpb25lZCA/PyBmYWxzZSxcbiAgICAgIGRlcGxveW1lbnQ6IHtcbiAgICAgICAgc291cmNlOiBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULkNBQ0hFfWAsXG4gICAgICAgIHBydW5lOiBmYWxzZSAvLyBJU1IgYWRkcyBmaWxlcyBhdCBydW50aW1lXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkU3RvcmFnZShcbiAgICAgIFN0b3JhZ2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tY2FjaGVgLCBjYWNoZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1lZGlhQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIGNvbnN0IG1lZGlhQ29uZmlnID0gdGhpcy5wcm9wcy5zdG9yYWdlPy5tZWRpYSA/PyB7fTtcbiAgICBjb25zdCBtZWRpYVByb3BzOiBTM1Byb3BzID0ge1xuICAgICAgdmVyc2lvbmVkOiBtZWRpYUNvbmZpZy52ZXJzaW9uZWQgPz8gZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1tZWRpYWAsIG1lZGlhUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGFnQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3QgdGFnQ2FjaGVQcm9wczogRHluYW1vREJEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJEeW5hbW9EQlwiLFxuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwidGFnXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwicGF0aFwiLCB0eXBlOiBcIlNcIiB9LFxuICAgICAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5kZXhOYW1lOiBcInJldmFsaWRhdGVcIixcbiAgICAgICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJwYXRoXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICAgICAgc29ydEtleTogeyBuYW1lOiBcInJldmFsaWRhdGVkQXRcIiwgdHlwZTogXCJOXCIgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgICB0aGlzLl90YWdDYWNoZSA9IHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tdGFnLWNhY2hlYCwgdGFnQ2FjaGVQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25RdWV1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBxdWV1ZUNvbmZpZyA9IHRoaXMucHJvcHMubWVzc2FnaW5nPy5yZXZhbGlkYXRpb25RdWV1ZSA/PyB7fTtcbiAgICBjb25zdCByZXZhbGlkYXRpb25UaW1lb3V0ID1cbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8ucmV2YWxpZGF0aW9uPy50aW1lb3V0ID8/XG4gICAgICBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX1RJTUVPVVQ7XG5cbiAgICAvLyBSZXNvbHZlIGRlYWQgbGV0dGVyIHF1ZXVlIGNvbmZpZ1xuICAgIGxldCBkbHFDb25maWc6IElRdWV1ZVByb3BzW1wiZGVhZExldHRlclF1ZXVlXCJdO1xuICAgIGlmIChxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICBkbHFDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUpIHtcbiAgICAgIGRscUNvbmZpZyA9IHtcbiAgICAgICAgZW5hYmxlZDogcXVldWVDb25maWcuZGVhZExldHRlclF1ZXVlLmVuYWJsZWQgPz8gdHJ1ZSxcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiBxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUubWF4UmVjZWl2ZUNvdW50ID8/IDNcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRscUNvbmZpZyA9IHsgZW5hYmxlZDogdHJ1ZSwgbWF4UmVjZWl2ZUNvdW50OiAzIH07XG4gICAgfVxuXG4gICAgY29uc3QgcXVldWVQcm9wczogSVF1ZXVlUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcInF1ZXVlXCIsXG4gICAgICBxdWV1ZVR5cGU6IFwiZmlmb1wiLFxuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IHF1ZXVlQ29uZmlnLnZpc2liaWxpdHlUaW1lb3V0ID8/IHJldmFsaWRhdGlvblRpbWVvdXQsXG4gICAgICBtZXNzYWdlUmV0ZW50aW9uUGVyaW9kOiBxdWV1ZUNvbmZpZy5tZXNzYWdlUmV0ZW50aW9uUGVyaW9kLFxuICAgICAgbWF4TWVzc2FnZVNpemU6IHF1ZXVlQ29uZmlnLm1heE1lc3NhZ2VTaXplLFxuICAgICAgY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbjogdHJ1ZSxcbiAgICAgIGRlYWRMZXR0ZXJRdWV1ZTogZGxxQ29uZmlnXG4gICAgfTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZSA9IHRoaXMuYXBwLmFkZE1lc3NhZ2luZyhcbiAgICAgIE1lc3NhZ2luZ0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1yZXZhbGlkYXRpb25gLCBxdWV1ZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxhbWJkYUZ1bmN0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXJ2ZXIgPSB0aGlzLmNyZWF0ZVNlcnZlckxhbWJkYSgpO1xuICAgIHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uID0gdGhpcy5jcmVhdGVJbWFnZUxhbWJkYSgpO1xuICAgIHRoaXMuX3JldmFsaWRhdGlvbiA9IHRoaXMuY3JlYXRlUmV2YWxpZGF0aW9uTGFtYmRhKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlcnZlckxhbWJkYSgpOiBMYW1iZGFDb21wdXRlIHtcbiAgICBjb25zdCB7IG1lbW9yeVNpemUsIHRpbWVvdXQsIGVwaGVtZXJhbFN0b3JhZ2VTaXplIH0gPSByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5zZXJ2ZXIsXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlNFUlZFUl9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5TRVJWRVJfVElNRU9VVFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuU0VSVkVSfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZnVuY3Rpb25Vcmw6IHtcbiAgICAgICAgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSxcbiAgICAgICAgaW52b2tlTW9kZTogSW52b2tlTW9kZS5SRVNQT05TRV9TVFJFQU1cbiAgICAgIH0sXG4gICAgICBjb25uZWN0aW9uczogW3RoaXMuX2RhdGFiYXNlXSxcbiAgICAgIHNlY3JldHNJbXBvcnQ6IHtcbiAgICAgICAgREFUQUJBU0VfVVNFUk5BTUU6IHRoaXMuX2RhdGFiYXNlXG4gICAgICAgICAgLmdldENyZWRlbnRpYWxzKClcbiAgICAgICAgICAuZ2V0SW1wb3J0KFwidXNlcm5hbWVcIiksXG4gICAgICAgIERBVEFCQVNFX1BBU1NXT1JEOiB0aGlzLl9kYXRhYmFzZVxuICAgICAgICAgIC5nZXRDcmVkZW50aWFscygpXG4gICAgICAgICAgLmdldEltcG9ydChcInBhc3N3b3JkXCIpLFxuICAgICAgICBQQVlMT0FEX1NFQ1JFVDogdGhpcy5fcGF5bG9hZFNlY3JldC5nZXRJbXBvcnQoKVxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmJ1aWxkU2VydmVyRW52aXJvbm1lbnQoKVxuICAgIH07XG5cbiAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLmFwcC5hZGRDb21wdXRlKFxuICAgICAgQ29tcHV0ZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1zZXJ2ZXJgLCBzZXJ2ZXJQcm9wcylcbiAgICApO1xuXG4gICAgdGhpcy5ncmFudFNlcnZlclBlcm1pc3Npb25zKHNlcnZlcik7XG4gICAgcmV0dXJuIHNlcnZlcjtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJFbnZpcm9ubWVudCgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBiYXNlRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgREFUQUJBU0VfSE9TVDogdGhpcy5fZGF0YWJhc2UuZ2V0SG9zdEVuZHBvaW50KCksXG4gICAgICBEQVRBQkFTRV9QT1JUOiB0aGlzLl9kYXRhYmFzZS5nZXRIb3N0UG9ydCgpLFxuICAgICAgREFUQUJBU0VfTkFNRTogdGhpcy5fZGF0YWJhc2UuZ2V0RGF0YWJhc2VOYW1lKCksXG4gICAgICBEQVRBQkFTRV9TU0w6IFwidHJ1ZVwiLFxuICAgICAgQ0FDSEVfQlVDS0VUX05BTUU6IHRoaXMuX2NhY2hlQnVja2V0LmdldEJ1Y2tldE5hbWUoKSxcbiAgICAgIENBQ0hFX0JVQ0tFVF9SRUdJT046IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbixcbiAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICBSRVZBTElEQVRJT05fUVVFVUVfVVJMOiB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZVVybCgpLFxuICAgICAgUkVWQUxJREFUSU9OX1FVRVVFX1JFR0lPTjogU3RhY2sub2YodGhpcykucmVnaW9uLFxuICAgICAgTUVESUFfQlVDS0VUX05BTUU6IHRoaXMuX21lZGlhQnVja2V0LmdldEJ1Y2tldE5hbWUoKVxuICAgIH07XG5cbiAgICAvLyBMb2NrIGRvd24gQ09SUyB0byBjdXN0b20gZG9tYWluIHdoZW4gcHJvdmlkZWRcbiAgICBjb25zdCBjdXN0b21Eb21haW4gPSB0aGlzLnByb3BzLmRvbWFpbiA/PyB0aGlzLnByb3BzLmNkbj8uZG9tYWluTmFtZXM/LlswXTtcbiAgICBpZiAoY3VzdG9tRG9tYWluKSB7XG4gICAgICBiYXNlRW52Lk5FWFRfUFVCTElDX1NFUlZFUl9VUkwgPSBgaHR0cHM6Ly8ke2N1c3RvbURvbWFpbn1gO1xuICAgIH1cblxuICAgIHJldHVybiB7IC4uLmJhc2VFbnYsIC4uLnRoaXMucHJvcHMuZW52aXJvbm1lbnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRTZXJ2ZXJQZXJtaXNzaW9ucyhzZXJ2ZXI6IExhbWJkYUNvbXB1dGUpOiB2b2lkIHtcbiAgICBjb25zdCBzZXJ2ZXJGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihzZXJ2ZXIsIFwiU2VydmVyXCIpO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0LmdyYW50UmVhZFdyaXRlKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldC5ncmFudFJlYWRXcml0ZShzZXJ2ZXJGdW5jdGlvbik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyhzZXJ2ZXJGdW5jdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUltYWdlTGFtYmRhKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIGNvbnN0IHsgbWVtb3J5U2l6ZSwgdGltZW91dCwgZXBoZW1lcmFsU3RvcmFnZVNpemUgfSA9IHJlc29sdmVMYW1iZGFDb25maWcoXG4gICAgICB0aGlzLnByb3BzLmNvbXB1dGU/LmltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9USU1FT1VUXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGltYWdlUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULklNQUdFfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZnVuY3Rpb25Vcmw6IHsgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQlVDS0VUX05BTUU6IHRoaXMuX2Fzc2V0c0J1Y2tldC5nZXRCdWNrZXROYW1lKCksXG4gICAgICAgIEJVQ0tFVF9LRVlfUFJFRklYOiBcIl9hc3NldHNcIlxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpbWFnZSA9IHRoaXMuYXBwLmFkZENvbXB1dGUoXG4gICAgICBDb21wdXRlRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LWltYWdlYCwgaW1hZ2VQcm9wcylcbiAgICApO1xuXG4gICAgY29uc3QgaW1hZ2VGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihpbWFnZSwgXCJJbWFnZU9wdGltaXNhdGlvblwiKTtcbiAgICB0aGlzLl9hc3NldHNCdWNrZXQuZ3JhbnRSZWFkKGltYWdlRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIGltYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25MYW1iZGEoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgY29uc3QgeyBtZW1vcnlTaXplLCB0aW1lb3V0LCBlcGhlbWVyYWxTdG9yYWdlU2l6ZSB9ID0gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8ucmV2YWxpZGF0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fTUVNT1JZLFxuICAgICAgICB0aW1lb3V0OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX1RJTUVPVVRcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULlJFVkFMSURBVElPTn1gXG4gICAgICApLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgbWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICAgIENBQ0hFX0JVQ0tFVF9OQU1FOiB0aGlzLl9jYWNoZUJ1Y2tldC5nZXRCdWNrZXROYW1lKClcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uID0gdGhpcy5hcHAuYWRkQ29tcHV0ZShcbiAgICAgIENvbXB1dGVGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tcmV2YWxpZGF0aW9uYCwgcmV2YWxpZGF0aW9uUHJvcHMpXG4gICAgKTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkxhbWJkYSA9IHJldmFsaWRhdGlvbi5nZXRMYW1iZGFGdW5jdGlvbigpO1xuICAgIHJldmFsaWRhdGlvbkxhbWJkYS5hZGRTcXNFdmVudFNvdXJjZSh0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZSgpLCB7XG4gICAgICBiYXRjaFNpemU6IDVcbiAgICB9KTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKHJldmFsaWRhdGlvbiwgXCJSZXZhbGlkYXRpb25cIik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHJldmFsaWRhdGlvbkZ1bmN0aW9uKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldC5ncmFudFJlYWRXcml0ZShyZXZhbGlkYXRpb25GdW5jdGlvbik7XG4gICAgdGhpcy5fcmV2YWxpZGF0aW9uUXVldWUuZ3JhbnRDb25zdW1lTWVzc2FnZXMocmV2YWxpZGF0aW9uRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIHJldmFsaWRhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2RuKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZG9tYWluTmFtZXMsIGNlcnRpZmljYXRlIH0gPSB0aGlzLnJlc29sdmVEb21haW5Db25maWcoKTtcblxuICAgIGNvbnN0IGNkblByb3BzOiBTbWFydENkblByb3BzID0ge1xuICAgICAgb3JpZ2luVHlwZTogXCJhdXRvXCIsXG4gICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgIGRlZmF1bHRBbGxvd2VkTWV0aG9kczogXCJBTExcIixcbiAgICAgIGZvcndhcmRIb3N0SGVhZGVyOiB0cnVlLFxuICAgICAgcHJpY2VDbGFzczogXCJQcmljZUNsYXNzXzEwMFwiLFxuICAgICAgZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGJlaGF2aW91cnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLlNUQVRJQyxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2Fzc2V0c0J1Y2tldCxcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX09QVElNSVpFRFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXRoUGF0dGVybjogUEFZTE9BRF9ERUZBVUxUUy5QQVRIUy5JTUFHRSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfT1BUSU1JWkVEXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFQSSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX0RJU0FCTEVEXCIsXG4gICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFwiQUxMXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFETUlOLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogXCJBTExcIlxuICAgICAgICB9LFxuICAgICAgICAuLi4odGhpcy5wcm9wcy5jZG4/LmJlaGF2aW91cnMgPz8gW10pXG4gICAgICBdXG4gICAgfTtcblxuICAgIHRoaXMuX2NkbiA9IHRoaXMuYXBwLmFkZENkbihDZG5GYWN0b3J5LmJ1aWxkKHRoaXMucHJvcHMubmFtZSwgY2RuUHJvcHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURvbWFpbkNvbmZpZygpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPiB8IHVuZGVmaW5lZDtcbiAgfSB7XG4gICAgaWYgKHRoaXMuX3Jlc29sdmVkRG9tYWluKSByZXR1cm4gdGhpcy5fcmVzb2x2ZWREb21haW47XG5cbiAgICBpZiAodGhpcy5wcm9wcy5kb21haW4pIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkRG9tYWluID0gdGhpcy5yZXNvbHZlU2ltcGxlRG9tYWluKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNkbj8uZG9tYWluTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZWREb21haW4gPSB0aGlzLnJlc29sdmVBZHZhbmNlZERvbWFpbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXNvbHZlZERvbWFpbiA9IHtcbiAgICAgICAgZG9tYWluTmFtZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgY2VydGlmaWNhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgaG9zdGVkWm9uZTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZERvbWFpbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNpbXBsZURvbWFpbigpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGU7XG4gICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPjtcbiAgfSB7XG4gICAgY29uc3QgZG9tYWluID0gdGhpcy5wcm9wcy5kb21haW47XG4gICAgaWYgKCFkb21haW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvbWFpbiBpcyByZXF1aXJlZCBmb3Igc2ltcGxlIGRvbWFpbiByZXNvbHV0aW9uXCIpO1xuICAgIH1cbiAgICBjb25zdCByb290RG9tYWluID0gZXh0cmFjdFJvb3REb21haW4oZG9tYWluKTtcblxuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBIb3N0ZWRab25lLmZyb21Mb29rdXAoXG4gICAgICB0aGlzLFxuICAgICAgYCR7dGhpcy5wYXNjYWxOYW1lfUhvc3RlZFpvbmVgLFxuICAgICAgeyBkb21haW5OYW1lOiByb290RG9tYWluIH1cbiAgICApO1xuXG4gICAgY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgQ2VydGlmaWNhdGUodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfUNlcnRpZmljYXRlYCwge1xuICAgICAgZG9tYWluTmFtZTogZG9tYWluLFxuICAgICAgdmFsaWRhdGlvbjogQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnMoaG9zdGVkWm9uZSlcbiAgICB9KTtcblxuICAgIHJldHVybiB7IGRvbWFpbk5hbWVzOiBbZG9tYWluXSwgY2VydGlmaWNhdGUsIGhvc3RlZFpvbmUgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUFkdmFuY2VkRG9tYWluKCk6IHtcbiAgICBkb21haW5OYW1lczogc3RyaW5nW107XG4gICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZDtcbiAgICBob3N0ZWRab25lOiB1bmRlZmluZWQ7XG4gIH0ge1xuICAgIGNvbnN0IGNkbkNvbmZpZyA9IHRoaXMucHJvcHMuY2RuO1xuICAgIGlmICghY2RuQ29uZmlnPy5kb21haW5OYW1lcz8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ0ROIGRvbWFpbiBuYW1lcyBhcmUgcmVxdWlyZWQgZm9yIGFkdmFuY2VkIGRvbWFpbiByZXNvbHV0aW9uXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY2VydGlmaWNhdGUgPVxuICAgICAgY2RuQ29uZmlnLmNlcnRpZmljYXRlID8/XG4gICAgICAoY2RuQ29uZmlnLmNlcnRpZmljYXRlQXJuXG4gICAgICAgID8gQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGAke3RoaXMucGFzY2FsTmFtZX1DZXJ0aWZpY2F0ZWAsXG4gICAgICAgICAgICBjZG5Db25maWcuY2VydGlmaWNhdGVBcm5cbiAgICAgICAgICApXG4gICAgICAgIDogdW5kZWZpbmVkKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkb21haW5OYW1lczogY2RuQ29uZmlnLmRvbWFpbk5hbWVzLFxuICAgICAgY2VydGlmaWNhdGUsXG4gICAgICBob3N0ZWRab25lOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEbnNSZWNvcmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmRvbWFpbikgcmV0dXJuO1xuXG4gICAgY29uc3QgeyBob3N0ZWRab25lIH0gPSB0aGlzLnJlc29sdmVEb21haW5Db25maWcoKTtcbiAgICBpZiAoIWhvc3RlZFpvbmUpIHJldHVybjtcblxuICAgIC8vIENyZWF0ZSB0aGUgRE5TIHJlY29yZCBpbiB0aGUgQ0ROIHN0YWNrIChub3QgdGhlIENvbXB1dGUgc3RhY2sgd2hlcmUgdGhpc1xuICAgIC8vIFBheWxvYWQgY29uc3RydWN0IGxpdmVzKSB0byBhdm9pZCBhIGN5Y2xpYyBkZXBlbmRlbmN5OiBDRE4gcmVmZXJlbmNlcyB0aGVcbiAgICAvLyBzZXJ2ZXIgTGFtYmRhIEZ1bmN0aW9uVXJsLCBzbyBDb21wdXRlIGNhbm5vdCBhbHNvIGRlcGVuZCBvbiBDRE4uXG4gICAgY29uc3QgY2RuU3RhY2sgPSB0aGlzLmFwcC5nZXREZWZhdWx0Q2RuU3RhY2soKS5nZXRTdGFjaygpO1xuICAgIG5ldyBBUmVjb3JkKGNkblN0YWNrLCBgJHt0aGlzLnBhc2NhbE5hbWV9QWxpYXNSZWNvcmRgLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lLFxuICAgICAgcmVjb3JkTmFtZTogdGhpcy5wcm9wcy5kb21haW4sXG4gICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgIG5ldyBDbG91ZEZyb250VGFyZ2V0KHRoaXMuX2Nkbi5nZXREaXN0cmlidXRpb24oKSlcbiAgICAgIClcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwb3J0UGF0dGVybk91dHB1dHMoKTogdm9pZCB7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVyblR5cGVgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuVHlwZWAsXG4gICAgICB2YWx1ZTogXCJwYXlsb2FkXCIsXG4gICAgICBkZXNjcmlwdGlvbjogYFBhdHRlcm4gdHlwZSBmb3IgJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVybk5hbWVgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuTmFtZWAsXG4gICAgICB2YWx1ZTogdGhpcy5wcm9wcy5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBQYXR0ZXJuIG5hbWUgZm9yICR7dGhpcy5wcm9wcy5uYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5MYW1iZGFzYCwge1xuICAgICAga2V5OiBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVybkxhbWJkYXNgLFxuICAgICAgdmFsdWU6IFtcbiAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1zZXJ2ZXJgLFxuICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LWltYWdlYCxcbiAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1yZXZhbGlkYXRpb25gXG4gICAgICBdLmpvaW4oXCIsXCIpLFxuICAgICAgZGVzY3JpcHRpb246IGBMYW1iZGEgY29uc3RydWN0IHByZWZpeGVzIGZvciBwYXR0ZXJuICR7dGhpcy5wcm9wcy5uYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5SZXNvdXJjZXNgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuUmVzb3VyY2VzYCxcbiAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGRhdGFiYXNlczogW3RoaXMucHJvcHMubmFtZSwgYCR7dGhpcy5wcm9wcy5uYW1lfS10YWctY2FjaGVgXSxcbiAgICAgICAgc3RvcmFnZTogW1xuICAgICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tYXNzZXRzYCxcbiAgICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LWNhY2hlYCxcbiAgICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LW1lZGlhYFxuICAgICAgICBdLFxuICAgICAgICBjZG46IHRoaXMucHJvcHMubmFtZVxuICAgICAgfSksXG4gICAgICBkZXNjcmlwdGlvbjogYFJlbGF0ZWQgcmVzb3VyY2UgbmFtZXMgZm9yIHBhdHRlcm4gJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGF0YWJhc2UoKTogUmVsYXRpb25hbERhdGFiYXNlIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2U7XG4gIH1cblxuICBnZXRTZXJ2ZXIoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgfVxuXG4gIGdldEltYWdlT3B0aW1pc2F0aW9uKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIHJldHVybiB0aGlzLl9pbWFnZU9wdGltaXNhdGlvbjtcbiAgfVxuXG4gIGdldFJldmFsaWRhdGlvbigpOiBMYW1iZGFDb21wdXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcmV2YWxpZGF0aW9uO1xuICB9XG5cbiAgZ2V0QXNzZXRzQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIHJldHVybiB0aGlzLl9hc3NldHNCdWNrZXQ7XG4gIH1cblxuICBnZXRDYWNoZUJ1Y2tldCgpOiBTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVCdWNrZXQ7XG4gIH1cblxuICBnZXRNZWRpYUJ1Y2tldCgpOiBTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWFCdWNrZXQ7XG4gIH1cblxuICBnZXRUYWdDYWNoZSgpOiBEeW5hbW9EQkRhdGFiYXNlIHtcbiAgICByZXR1cm4gdGhpcy5fdGFnQ2FjaGU7XG4gIH1cblxuICBnZXRSZXZhbGlkYXRpb25RdWV1ZSgpOiBRdWV1ZU1lc3NhZ2luZyB7XG4gICAgcmV0dXJuIHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlO1xuICB9XG5cbiAgZ2V0Q2RuKCk6IENkbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NkbjtcbiAgfVxufVxuIl19
|
|
@@ -3,7 +3,8 @@ import { type IBucket, type EventType, type IBucketNotificationDestination, type
|
|
|
3
3
|
import { BucketDeployment } from "aws-cdk-lib/aws-s3-deployment";
|
|
4
4
|
import { type IGrantable, type Grant } from "aws-cdk-lib/aws-iam";
|
|
5
5
|
import type App from "../../app";
|
|
6
|
-
import { type
|
|
6
|
+
import { type WebsiteHostingConfig } from "../../resources/aws/storage";
|
|
7
|
+
import { type BackupTier } from "../../utils/backupTierMapping";
|
|
7
8
|
import { type IStorage } from "./interfaces/storage.js";
|
|
8
9
|
import { type IStorageConnector } from "./interfaces/connector.js";
|
|
9
10
|
export { type IStorage, isStorage } from "./interfaces/storage.js";
|
|
@@ -35,7 +36,7 @@ export interface S3Props {
|
|
|
35
36
|
readonly versioned?: boolean;
|
|
36
37
|
readonly encryption?: "AES256" | "KMS";
|
|
37
38
|
readonly kmsKeyArn?: string;
|
|
38
|
-
readonly backupVaultTier?:
|
|
39
|
+
readonly backupVaultTier?: BackupTier;
|
|
39
40
|
readonly cors?: CorsRule[];
|
|
40
41
|
readonly deployment?: S3DeploymentConfig;
|
|
41
42
|
}
|
|
@@ -167,4 +167,4 @@ class StorageFactory {
|
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
exports.StorageFactory = StorageFactory;
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3Mvc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5R0Esb0RBY0M7QUF2SEQsMkNBQXVDO0FBQ3ZDLCtDQVE0QjtBQUM1QixxRUFJdUM7QUFFdkMsaURBQTBDO0FBQzFDLDZDQUF5RDtBQUd6RCx5REFJcUM7QUFDckMseUVBQThEO0FBSTlELHNEQUFtRTtBQUEzQyx1R0FBQSxTQUFTLE9BQUE7QUE2Q2pDLFNBQVMsa0JBQWtCLENBQ3pCLFVBQTZCO0lBRTdCLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDbEMsT0FBTyxVQUFVLEtBQUssUUFBUTtRQUM1QixDQUFDLENBQUMseUJBQWdCLENBQUMsVUFBVTtRQUM3QixDQUFDLENBQUMseUJBQWdCLENBQUMsR0FBRyxDQUFDO0FBQzNCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxNQUFjO0lBQ2xDLE1BQU0sU0FBUyxHQUFnQztRQUM3QyxHQUFHLEVBQUUsb0JBQVcsQ0FBQyxHQUFHO1FBQ3BCLEdBQUcsRUFBRSxvQkFBVyxDQUFDLEdBQUc7UUFDcEIsSUFBSSxFQUFFLG9CQUFXLENBQUMsSUFBSTtRQUN0QixNQUFNLEVBQUUsb0JBQVcsQ0FBQyxNQUFNO1FBQzFCLElBQUksRUFBRSxvQkFBVyxDQUFDLElBQUk7S0FDdkIsQ0FBQztJQUNGLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLG9CQUFXLENBQUMsR0FBRyxDQUFDO0FBQzlDLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFpQjtJQUNwQyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7UUFDbkMsY0FB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IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICB0eXBlIElCdWNrZXQsXG4gIHR5cGUgRXZlbnRUeXBlLFxuICB0eXBlIElCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvbixcbiAgdHlwZSBOb3RpZmljYXRpb25LZXlGaWx0ZXIsXG4gIEJ1Y2tldEVuY3J5cHRpb24sXG4gIEh0dHBNZXRob2RzLFxuICB0eXBlIENvcnNSdWxlIGFzIENka0NvcnNSdWxlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7XG4gIEJ1Y2tldERlcGxveW1lbnQsXG4gIFNvdXJjZSxcbiAgQ2FjaGVDb250cm9sXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlLCB0eXBlIEdyYW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IEtleSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuaW1wb3J0IHtcbiAgUzNCdWNrZXQsXG4gIHR5cGUgQmFja3VwVmF1bHRUaWVyLFxuICB0eXBlIFdlYnNpdGVIb3N0aW5nQ29uZmlnXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3N0b3JhZ2VcIjtcbmltcG9ydCB7IEZqYWxsTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcbmltcG9ydCB7IHR5cGUgSVN0b3JhZ2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3N0b3JhZ2UuanNcIjtcbmltcG9ydCB7IHR5cGUgSVN0b3JhZ2VDb25uZWN0b3IgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2Nvbm5lY3Rvci5qc1wiO1xuXG5leHBvcnQgeyB0eXBlIElTdG9yYWdlLCBpc1N0b3JhZ2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3N0b3JhZ2UuanNcIjtcbmV4cG9ydCB7IHR5cGUgV2Vic2l0ZUhvc3RpbmdDb25maWcgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29yc1J1bGUge1xuICByZWFkb25seSBhbGxvd2VkT3JpZ2luczogc3RyaW5nW107XG4gIHJlYWRvbmx5IGFsbG93ZWRNZXRob2RzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgYWxsb3dlZEhlYWRlcnM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgZXhwb3NlZEhlYWRlcnM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgbWF4QWdlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFMzRGVwbG95bWVudENvbmZpZyB7XG4gIC8qKiBQYXRoIHRvIHRoZSBhc3NldCBkaXJlY3RvcnkgKHJlbGF0aXZlIHRvIENESyBhcHAgcm9vdCkgKi9cbiAgc291cmNlOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRvIHJlbW92ZSBmaWxlcyBmcm9tIGJ1Y2tldCB0aGF0IGFyZSBub3QgaW4gdGhlIHNvdXJjZS4gRGVmYXVsdDogdHJ1ZSAqL1xuICBwcnVuZT86IGJvb2xlYW47XG4gIC8qKiBDYWNoZSBjb250cm9sIHNldHRpbmdzIGZvciB1cGxvYWRlZCBmaWxlcyAqL1xuICBjYWNoZUNvbnRyb2w/OiB7XG4gICAgLyoqIE1heCBhZ2UgaW4gc2Vjb25kcyAoZS5nLiwgMzE1MzYwMDAgZm9yIDEgeWVhcikgKi9cbiAgICBtYXhBZ2U/OiBudW1iZXI7XG4gICAgLyoqIE1hcmsgYXMgaW1tdXRhYmxlIChicm93c2VyIHdpbGwgbm90IHJldmFsaWRhdGUpICovXG4gICAgaW1tdXRhYmxlPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTM1Byb3BzIHtcbiAgcmVhZG9ubHkgYnVja2V0TmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcHVibGljUmVhZEFjY2Vzcz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHdlYnNpdGVIb3N0aW5nPzogV2Vic2l0ZUhvc3RpbmdDb25maWc7XG4gIHJlYWRvbmx5IHZlcnNpb25lZD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBcIkFFUzI1NlwiIHwgXCJLTVNcIjtcbiAgcmVhZG9ubHkga21zS2V5QXJuPzogc3RyaW5nO1xuICByZWFkb25seSBiYWNrdXBWYXVsdFRpZXI/OiBCYWNrdXBWYXVsdFRpZXI7XG4gIHJlYWRvbmx5IGNvcnM/OiBDb3JzUnVsZVtdO1xuICByZWFkb25seSBkZXBsb3ltZW50PzogUzNEZXBsb3ltZW50Q29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VCdWlsZFByb3BzIGV4dGVuZHMgUzNQcm9wcyB7XG4gIHJlYWRvbmx5IHN0YWNrUGxhY2VtZW50PzogXCJzdG9yYWdlXCIgfCBcImNkblwiIHwgXCJjb21wdXRlXCI7XG59XG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VGYWN0b3J5Rm4gPSAoKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBTdG9yYWdlKSAmIHtcbiAgc3RhY2tQbGFjZW1lbnQ/OiBcInN0b3JhZ2VcIiB8IFwiY2RuXCIgfCBcImNvbXB1dGVcIjtcbn07XG5cbmZ1bmN0aW9uIHRvQnVja2V0RW5jcnlwdGlvbihcbiAgZW5jcnlwdGlvbj86IFwiQUVTMjU2XCIgfCBcIktNU1wiXG4pOiBCdWNrZXRFbmNyeXB0aW9uIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFlbmNyeXB0aW9uKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gZW5jcnlwdGlvbiA9PT0gXCJBRVMyNTZcIlxuICAgID8gQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VEXG4gICAgOiBCdWNrZXRFbmNyeXB0aW9uLktNUztcbn1cblxuZnVuY3Rpb24gdG9IdHRwTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogSHR0cE1ldGhvZHMge1xuICBjb25zdCBtZXRob2RNYXA6IFJlY29yZDxzdHJpbmcsIEh0dHBNZXRob2RzPiA9IHtcbiAgICBHRVQ6IEh0dHBNZXRob2RzLkdFVCxcbiAgICBQVVQ6IEh0dHBNZXRob2RzLlBVVCxcbiAgICBQT1NUOiBIdHRwTWV0aG9kcy5QT1NULFxuICAgIERFTEVURTogSHR0cE1ldGhvZHMuREVMRVRFLFxuICAgIEhFQUQ6IEh0dHBNZXRob2RzLkhFQURcbiAgfTtcbiAgcmV0dXJuIG1ldGhvZE1hcFttZXRob2RdID8/IEh0dHBNZXRob2RzLkdFVDtcbn1cblxuZnVuY3Rpb24gdG9Db3JzUnVsZXMoY29ycz86IENvcnNSdWxlW10pOiBDZGtDb3JzUnVsZVtdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjb3JzKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gY29ycy5tYXAoKHJ1bGUpID0+ICh7XG4gICAgYWxsb3dlZE9yaWdpbnM6IHJ1bGUuYWxsb3dlZE9yaWdpbnMsXG4gICAgYWxsb3dlZE1ldGhvZHM6IHJ1bGUuYWxsb3dlZE1ldGhvZHMubWFwKHRvSHR0cE1ldGhvZCksXG4gICAgLi4uKHJ1bGUuYWxsb3dlZEhlYWRlcnMgJiYgeyBhbGxvd2VkSGVhZGVyczogcnVsZS5hbGxvd2VkSGVhZGVycyB9KSxcbiAgICAuLi4ocnVsZS5leHBvc2VkSGVhZGVycyAmJiB7IGV4cG9zZWRIZWFkZXJzOiBydWxlLmV4cG9zZWRIZWFkZXJzIH0pLFxuICAgIC4uLihydWxlLm1heEFnZSAhPT0gdW5kZWZpbmVkICYmIHsgbWF4QWdlOiBydWxlLm1heEFnZSB9KVxuICB9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVN0b3JhZ2VQcm9wcyhwcm9wczogUzNQcm9wcyk6IHZvaWQge1xuICBpZiAocHJvcHMuZW5jcnlwdGlvbiA9PT0gXCJLTVNcIiAmJiAhcHJvcHMua21zS2V5QXJuKSB7XG4gICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgIFwiJ2VuY3J5cHRpb24nIGlzIHNldCB0byAnS01TJyBidXQgJ2ttc0tleUFybicgaXMgbm90IHByb3ZpZGVkLiBcIiArXG4gICAgICAgIFwiVGhlIGJ1Y2tldCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBBV1MgbWFuYWdlZCBrZXkuXCJcbiAgICApO1xuICB9XG5cbiAgaWYgKHByb3BzLmttc0tleUFybiAmJiBwcm9wcy5lbmNyeXB0aW9uICE9PSBcIktNU1wiKSB7XG4gICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgIFwiJ2ttc0tleUFybicgaXMgcHJvdmlkZWQgYnV0ICdlbmNyeXB0aW9uJyBpcyBub3Qgc2V0IHRvICdLTVMnLiBcIiArXG4gICAgICAgIFwiVGhlIEtNUyBrZXkgd2lsbCBiZSBpZ25vcmVkLiBTZXQgZW5jcnlwdGlvbjogJ0tNUycgdG8gdXNlIHRoZSBrZXkuXCJcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVN0b3JhZ2UsIElTdG9yYWdlQ29ubmVjdG9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3RvclR5cGUgPSBcInN0b3JhZ2VcIiBhcyBjb25zdDtcbiAgcHJpdmF0ZSByZWFkb25seSBidWNrZXQ6IFMzQnVja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1Y2tldERlcGxveW1lbnQ/OiBCdWNrZXREZXBsb3ltZW50O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTM1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBwcm9wcy5rbXNLZXlBcm5cbiAgICAgID8gS2V5LmZyb21LZXlBcm4odGhpcywgYCR7aWR9S21zS2V5YCwgcHJvcHMua21zS2V5QXJuKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBTM0J1Y2tldCh0aGlzLCBgJHtpZH1CdWNrZXRgLCB7XG4gICAgICBidWNrZXROYW1lOiBwcm9wcy5idWNrZXROYW1lLFxuICAgICAgdmVyc2lvbmVkOiBwcm9wcy52ZXJzaW9uZWQsXG4gICAgICBlbmNyeXB0aW9uOiB0b0J1Y2tldEVuY3J5cHRpb24ocHJvcHMuZW5jcnlwdGlvbiksXG4gICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgYmFja3VwVmF1bHRUaWVyOiBwcm9wcy5iYWNrdXBWYXVsdFRpZXIsXG4gICAgICBwdWJsaWNSZWFkQWNjZXNzOiBwcm9wcy5wdWJsaWNSZWFkQWNjZXNzLFxuICAgICAgd2Vic2l0ZUhvc3Rpbmc6IHByb3BzLndlYnNpdGVIb3N0aW5nLFxuICAgICAgLi4uKHByb3BzLmNvcnMgJiYgeyBjb3JzOiB0b0NvcnNSdWxlcyhwcm9wcy5jb3JzKSB9KVxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmRlcGxveW1lbnQpIHtcbiAgICAgIHRoaXMuYnVja2V0RGVwbG95bWVudCA9IHRoaXMuY3JlYXRlRGVwbG95bWVudChpZCwgcHJvcHMuZGVwbG95bWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRPdXRwdXRzKGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGVwbG95bWVudChcbiAgICBpZDogc3RyaW5nLFxuICAgIGNvbmZpZzogUzNEZXBsb3ltZW50Q29uZmlnXG4gICk6IEJ1Y2tldERlcGxveW1lbnQge1xuICAgIGNvbnN0IGNhY2hlQ29udHJvbEhlYWRlcnM6IENhY2hlQ29udHJvbFtdID0gW107XG5cbiAgICBpZiAoY29uZmlnLmNhY2hlQ29udHJvbD8ubWF4QWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNhY2hlQ29udHJvbEhlYWRlcnMucHVzaChcbiAgICAgICAgQ2FjaGVDb250cm9sLm1heEFnZShEdXJhdGlvbi5zZWNvbmRzKGNvbmZpZy5jYWNoZUNvbnRyb2wubWF4QWdlKSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb25maWcuY2FjaGVDb250cm9sPy5pbW11dGFibGUpIHtcbiAgICAgIGNhY2hlQ29udHJvbEhlYWRlcnMucHVzaChDYWNoZUNvbnRyb2wuaW1tdXRhYmxlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBgJHtpZH1EZXBsb3ltZW50YCwge1xuICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldChjb25maWcuc291cmNlKV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogdGhpcy5idWNrZXQsXG4gICAgICBwcnVuZTogY29uZmlnLnBydW5lID8/IHRydWUsXG4gICAgICAuLi4oY2FjaGVDb250cm9sSGVhZGVycy5sZW5ndGggPiAwICYmIHtcbiAgICAgICAgY2FjaGVDb250cm9sOiBjYWNoZUNvbnRyb2xIZWFkZXJzXG4gICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRPdXRwdXRzKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFja05hbWUgPSBTdGFjay5vZih0aGlzKS5zdGFja05hbWU7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfUJ1Y2tldEFybmAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7aWR9QnVja2V0QXJuYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke2lkfUJ1Y2tldEFybmAsXG4gICAgICB2YWx1ZTogdGhpcy5idWNrZXQuYnVja2V0QXJuLFxuICAgICAgZGVzY3JpcHRpb246IGBTMyBCdWNrZXQgQVJOIGZvciAke2lkfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9QnVja2V0TmFtZWAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7aWR9QnVja2V0TmFtZWAsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9JHtpZH1CdWNrZXROYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBTMyBCdWNrZXQgTmFtZSBmb3IgJHtpZH1gXG4gICAgfSk7XG4gIH1cblxuICBnZXRCdWNrZXQoKTogSUJ1Y2tldCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0O1xuICB9XG5cbiAgZ2V0QnVja2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lO1xuICB9XG5cbiAgZ2V0QnVja2V0QXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmJ1Y2tldEFybjtcbiAgfVxuXG4gIGdldEJ1Y2tldERvbWFpbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuYnVja2V0RG9tYWluTmFtZTtcbiAgfVxuXG4gIGdldEJ1Y2tldFJlZ2lvbmFsRG9tYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5idWNrZXRSZWdpb25hbERvbWFpbk5hbWU7XG4gIH1cblxuICBnZXRXZWJzaXRlVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmJ1Y2tldFdlYnNpdGVVcmw7XG4gIH1cblxuICBnZXREZXBsb3ltZW50KCk6IEJ1Y2tldERlcGxveW1lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldERlcGxveW1lbnQ7XG4gIH1cblxuICBncmFudFJlYWQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRXcml0ZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFdyaXRlKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRSZWFkV3JpdGUoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudERlbGV0ZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudERlbGV0ZShncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50UHV0KGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50UHV0KGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRQdWJsaWNBY2Nlc3MoLi4ua2V5UHJlZml4OiBzdHJpbmdbXSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRQdWJsaWNBY2Nlc3MoLi4ua2V5UHJlZml4KTtcbiAgfVxuXG4gIGFkZEV2ZW50Tm90aWZpY2F0aW9uKFxuICAgIGV2ZW50OiBFdmVudFR5cGUsXG4gICAgZGVzdDogSUJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uLFxuICAgIC4uLmZpbHRlcnM6IE5vdGlmaWNhdGlvbktleUZpbHRlcltdXG4gICk6IHZvaWQge1xuICAgIHRoaXMuYnVja2V0LmFkZEV2ZW50Tm90aWZpY2F0aW9uKGV2ZW50LCBkZXN0LCAuLi5maWx0ZXJzKTtcbiAgfVxuXG4gIGFkZE9iamVjdENyZWF0ZWROb3RpZmljYXRpb24oXG4gICAgZGVzdDogSUJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uLFxuICAgIC4uLmZpbHRlcnM6IE5vdGlmaWNhdGlvbktleUZpbHRlcltdXG4gICk6IHZvaWQge1xuICAgIHRoaXMuYnVja2V0LmFkZE9iamVjdENyZWF0ZWROb3RpZmljYXRpb24oZGVzdCwgLi4uZmlsdGVycyk7XG4gIH1cblxuICBhZGRPYmplY3RSZW1vdmVkTm90aWZpY2F0aW9uKFxuICAgIGRlc3Q6IElCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvbixcbiAgICAuLi5maWx0ZXJzOiBOb3RpZmljYXRpb25LZXlGaWx0ZXJbXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLmJ1Y2tldC5hZGRPYmplY3RSZW1vdmVkTm90aWZpY2F0aW9uKGRlc3QsIC4uLmZpbHRlcnMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wczogU3RvcmFnZUJ1aWxkUHJvcHMgPSB7fSk6IFN0b3JhZ2VGYWN0b3J5Rm4ge1xuICAgIGNvbnN0IHsgc3RhY2tQbGFjZW1lbnQsIC4uLnMzUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGZuOiBTdG9yYWdlRmFjdG9yeUZuID0gKF9hcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4ge1xuICAgICAgdmFsaWRhdGVTdG9yYWdlUHJvcHMoczNQcm9wcyk7XG4gICAgICByZXR1cm4gbmV3IFN0b3JhZ2Uoc2NvcGUsIGlkLCBzM1Byb3BzKTtcbiAgICB9O1xuICAgIGlmIChzdGFja1BsYWNlbWVudCkge1xuICAgICAgZm4uc3RhY2tQbGFjZW1lbnQgPSBzdGFja1BsYWNlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIGZuO1xuICB9XG59XG4iXX0=
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3Mvc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5R0Esb0RBY0M7QUF2SEQsMkNBQXVDO0FBQ3ZDLCtDQVE0QjtBQUM1QixxRUFJdUM7QUFFdkMsaURBQTBDO0FBQzFDLDZDQUF5RDtBQUd6RCx5REFHcUM7QUFFckMseUVBQThEO0FBSTlELHNEQUFtRTtBQUEzQyx1R0FBQSxTQUFTLE9BQUE7QUE2Q2pDLFNBQVMsa0JBQWtCLENBQ3pCLFVBQTZCO0lBRTdCLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDbEMsT0FBTyxVQUFVLEtBQUssUUFBUTtRQUM1QixDQUFDLENBQUMseUJBQWdCLENBQUMsVUFBVTtRQUM3QixDQUFDLENBQUMseUJBQWdCLENBQUMsR0FBRyxDQUFDO0FBQzNCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxNQUFjO0lBQ2xDLE1BQU0sU0FBUyxHQUFnQztRQUM3QyxHQUFHLEVBQUUsb0JBQVcsQ0FBQyxHQUFHO1FBQ3BCLEdBQUcsRUFBRSxvQkFBVyxDQUFDLEdBQUc7UUFDcEIsSUFBSSxFQUFFLG9CQUFXLENBQUMsSUFBSTtRQUN0QixNQUFNLEVBQUUsb0JBQVcsQ0FBQyxNQUFNO1FBQzFCLElBQUksRUFBRSxvQkFBVyxDQUFDLElBQUk7S0FDdkIsQ0FBQztJQUNGLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLG9CQUFXLENBQUMsR0FBRyxDQUFDO0FBQzlDLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFpQjtJQUNwQyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7UUFDbkMsY0FB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IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICB0eXBlIElCdWNrZXQsXG4gIHR5cGUgRXZlbnRUeXBlLFxuICB0eXBlIElCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvbixcbiAgdHlwZSBOb3RpZmljYXRpb25LZXlGaWx0ZXIsXG4gIEJ1Y2tldEVuY3J5cHRpb24sXG4gIEh0dHBNZXRob2RzLFxuICB0eXBlIENvcnNSdWxlIGFzIENka0NvcnNSdWxlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7XG4gIEJ1Y2tldERlcGxveW1lbnQsXG4gIFNvdXJjZSxcbiAgQ2FjaGVDb250cm9sXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlLCB0eXBlIEdyYW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IEtleSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuaW1wb3J0IHtcbiAgUzNCdWNrZXQsXG4gIHR5cGUgV2Vic2l0ZUhvc3RpbmdDb25maWdcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc3RvcmFnZVwiO1xuaW1wb3J0IHsgdHlwZSBCYWNrdXBUaWVyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2JhY2t1cFRpZXJNYXBwaW5nXCI7XG5pbXBvcnQgeyBGamFsbExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy92YWxpZGF0aW9uTG9nZ2VyLmpzXCI7XG5pbXBvcnQgeyB0eXBlIElTdG9yYWdlIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9zdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyB0eXBlIElTdG9yYWdlQ29ubmVjdG9yIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9jb25uZWN0b3IuanNcIjtcblxuZXhwb3J0IHsgdHlwZSBJU3RvcmFnZSwgaXNTdG9yYWdlIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9zdG9yYWdlLmpzXCI7XG5leHBvcnQgeyB0eXBlIFdlYnNpdGVIb3N0aW5nQ29uZmlnIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc3RvcmFnZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvcnNSdWxlIHtcbiAgcmVhZG9ubHkgYWxsb3dlZE9yaWdpbnM6IHN0cmluZ1tdO1xuICByZWFkb25seSBhbGxvd2VkTWV0aG9kczogc3RyaW5nW107XG4gIHJlYWRvbmx5IGFsbG93ZWRIZWFkZXJzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGV4cG9zZWRIZWFkZXJzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IG1heEFnZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTM0RlcGxveW1lbnRDb25maWcge1xuICAvKiogUGF0aCB0byB0aGUgYXNzZXQgZGlyZWN0b3J5IChyZWxhdGl2ZSB0byBDREsgYXBwIHJvb3QpICovXG4gIHNvdXJjZTogc3RyaW5nO1xuICAvKiogV2hldGhlciB0byByZW1vdmUgZmlsZXMgZnJvbSBidWNrZXQgdGhhdCBhcmUgbm90IGluIHRoZSBzb3VyY2UuIERlZmF1bHQ6IHRydWUgKi9cbiAgcHJ1bmU/OiBib29sZWFuO1xuICAvKiogQ2FjaGUgY29udHJvbCBzZXR0aW5ncyBmb3IgdXBsb2FkZWQgZmlsZXMgKi9cbiAgY2FjaGVDb250cm9sPzoge1xuICAgIC8qKiBNYXggYWdlIGluIHNlY29uZHMgKGUuZy4sIDMxNTM2MDAwIGZvciAxIHllYXIpICovXG4gICAgbWF4QWdlPzogbnVtYmVyO1xuICAgIC8qKiBNYXJrIGFzIGltbXV0YWJsZSAoYnJvd3NlciB3aWxsIG5vdCByZXZhbGlkYXRlKSAqL1xuICAgIGltbXV0YWJsZT86IGJvb2xlYW47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUzNQcm9wcyB7XG4gIHJlYWRvbmx5IGJ1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHB1YmxpY1JlYWRBY2Nlc3M/OiBib29sZWFuO1xuICByZWFkb25seSB3ZWJzaXRlSG9zdGluZz86IFdlYnNpdGVIb3N0aW5nQ29uZmlnO1xuICByZWFkb25seSB2ZXJzaW9uZWQ/OiBib29sZWFuO1xuICByZWFkb25seSBlbmNyeXB0aW9uPzogXCJBRVMyNTZcIiB8IFwiS01TXCI7XG4gIHJlYWRvbmx5IGttc0tleUFybj86IHN0cmluZztcbiAgcmVhZG9ubHkgYmFja3VwVmF1bHRUaWVyPzogQmFja3VwVGllcjtcbiAgcmVhZG9ubHkgY29ycz86IENvcnNSdWxlW107XG4gIHJlYWRvbmx5IGRlcGxveW1lbnQ/OiBTM0RlcGxveW1lbnRDb25maWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUJ1aWxkUHJvcHMgZXh0ZW5kcyBTM1Byb3BzIHtcbiAgcmVhZG9ubHkgc3RhY2tQbGFjZW1lbnQ/OiBcInN0b3JhZ2VcIiB8IFwiY2RuXCIgfCBcImNvbXB1dGVcIjtcbn1cblxuZXhwb3J0IHR5cGUgU3RvcmFnZUZhY3RvcnlGbiA9ICgoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFN0b3JhZ2UpICYge1xuICBzdGFja1BsYWNlbWVudD86IFwic3RvcmFnZVwiIHwgXCJjZG5cIiB8IFwiY29tcHV0ZVwiO1xufTtcblxuZnVuY3Rpb24gdG9CdWNrZXRFbmNyeXB0aW9uKFxuICBlbmNyeXB0aW9uPzogXCJBRVMyNTZcIiB8IFwiS01TXCJcbik6IEJ1Y2tldEVuY3J5cHRpb24gfCB1bmRlZmluZWQge1xuICBpZiAoIWVuY3J5cHRpb24pIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBlbmNyeXB0aW9uID09PSBcIkFFUzI1NlwiXG4gICAgPyBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRURcbiAgICA6IEJ1Y2tldEVuY3J5cHRpb24uS01TO1xufVxuXG5mdW5jdGlvbiB0b0h0dHBNZXRob2QobWV0aG9kOiBzdHJpbmcpOiBIdHRwTWV0aG9kcyB7XG4gIGNvbnN0IG1ldGhvZE1hcDogUmVjb3JkPHN0cmluZywgSHR0cE1ldGhvZHM+ID0ge1xuICAgIEdFVDogSHR0cE1ldGhvZHMuR0VULFxuICAgIFBVVDogSHR0cE1ldGhvZHMuUFVULFxuICAgIFBPU1Q6IEh0dHBNZXRob2RzLlBPU1QsXG4gICAgREVMRVRFOiBIdHRwTWV0aG9kcy5ERUxFVEUsXG4gICAgSEVBRDogSHR0cE1ldGhvZHMuSEVBRFxuICB9O1xuICByZXR1cm4gbWV0aG9kTWFwW21ldGhvZF0gPz8gSHR0cE1ldGhvZHMuR0VUO1xufVxuXG5mdW5jdGlvbiB0b0NvcnNSdWxlcyhjb3JzPzogQ29yc1J1bGVbXSk6IENka0NvcnNSdWxlW10gfCB1bmRlZmluZWQge1xuICBpZiAoIWNvcnMpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBjb3JzLm1hcCgocnVsZSkgPT4gKHtcbiAgICBhbGxvd2VkT3JpZ2luczogcnVsZS5hbGxvd2VkT3JpZ2lucyxcbiAgICBhbGxvd2VkTWV0aG9kczogcnVsZS5hbGxvd2VkTWV0aG9kcy5tYXAodG9IdHRwTWV0aG9kKSxcbiAgICAuLi4ocnVsZS5hbGxvd2VkSGVhZGVycyAmJiB7IGFsbG93ZWRIZWFkZXJzOiBydWxlLmFsbG93ZWRIZWFkZXJzIH0pLFxuICAgIC4uLihydWxlLmV4cG9zZWRIZWFkZXJzICYmIHsgZXhwb3NlZEhlYWRlcnM6IHJ1bGUuZXhwb3NlZEhlYWRlcnMgfSksXG4gICAgLi4uKHJ1bGUubWF4QWdlICE9PSB1bmRlZmluZWQgJiYgeyBtYXhBZ2U6IHJ1bGUubWF4QWdlIH0pXG4gIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU3RvcmFnZVByb3BzKHByb3BzOiBTM1Byb3BzKTogdm9pZCB7XG4gIGlmIChwcm9wcy5lbmNyeXB0aW9uID09PSBcIktNU1wiICYmICFwcm9wcy5rbXNLZXlBcm4pIHtcbiAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgXCInZW5jcnlwdGlvbicgaXMgc2V0IHRvICdLTVMnIGJ1dCAna21zS2V5QXJuJyBpcyBub3QgcHJvdmlkZWQuIFwiICtcbiAgICAgICAgXCJUaGUgYnVja2V0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IEFXUyBtYW5hZ2VkIGtleS5cIlxuICAgICk7XG4gIH1cblxuICBpZiAocHJvcHMua21zS2V5QXJuICYmIHByb3BzLmVuY3J5cHRpb24gIT09IFwiS01TXCIpIHtcbiAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgXCIna21zS2V5QXJuJyBpcyBwcm92aWRlZCBidXQgJ2VuY3J5cHRpb24nIGlzIG5vdCBzZXQgdG8gJ0tNUycuIFwiICtcbiAgICAgICAgXCJUaGUgS01TIGtleSB3aWxsIGJlIGlnbm9yZWQuIFNldCBlbmNyeXB0aW9uOiAnS01TJyB0byB1c2UgdGhlIGtleS5cIlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJU3RvcmFnZSwgSVN0b3JhZ2VDb25uZWN0b3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdG9yVHlwZSA9IFwic3RvcmFnZVwiIGFzIGNvbnN0O1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1Y2tldDogUzNCdWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVja2V0RGVwbG95bWVudD86IEJ1Y2tldERlcGxveW1lbnQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFMzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IHByb3BzLmttc0tleUFyblxuICAgICAgPyBLZXkuZnJvbUtleUFybih0aGlzLCBgJHtpZH1LbXNLZXlgLCBwcm9wcy5rbXNLZXlBcm4pXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuYnVja2V0ID0gbmV3IFMzQnVja2V0KHRoaXMsIGAke2lkfUJ1Y2tldGAsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IHByb3BzLmJ1Y2tldE5hbWUsXG4gICAgICB2ZXJzaW9uZWQ6IHByb3BzLnZlcnNpb25lZCxcbiAgICAgIGVuY3J5cHRpb246IHRvQnVja2V0RW5jcnlwdGlvbihwcm9wcy5lbmNyeXB0aW9uKSxcbiAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICBiYWNrdXBWYXVsdFRpZXI6IHByb3BzLmJhY2t1cFZhdWx0VGllcixcbiAgICAgIHB1YmxpY1JlYWRBY2Nlc3M6IHByb3BzLnB1YmxpY1JlYWRBY2Nlc3MsXG4gICAgICB3ZWJzaXRlSG9zdGluZzogcHJvcHMud2Vic2l0ZUhvc3RpbmcsXG4gICAgICAuLi4ocHJvcHMuY29ycyAmJiB7IGNvcnM6IHRvQ29yc1J1bGVzKHByb3BzLmNvcnMpIH0pXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuZGVwbG95bWVudCkge1xuICAgICAgdGhpcy5idWNrZXREZXBsb3ltZW50ID0gdGhpcy5jcmVhdGVEZXBsb3ltZW50KGlkLCBwcm9wcy5kZXBsb3ltZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZE91dHB1dHMoaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEZXBsb3ltZW50KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29uZmlnOiBTM0RlcGxveW1lbnRDb25maWdcbiAgKTogQnVja2V0RGVwbG95bWVudCB7XG4gICAgY29uc3QgY2FjaGVDb250cm9sSGVhZGVyczogQ2FjaGVDb250cm9sW10gPSBbXTtcblxuICAgIGlmIChjb25maWcuY2FjaGVDb250cm9sPy5tYXhBZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVDb250cm9sSGVhZGVycy5wdXNoKFxuICAgICAgICBDYWNoZUNvbnRyb2wubWF4QWdlKER1cmF0aW9uLnNlY29uZHMoY29uZmlnLmNhY2hlQ29udHJvbC5tYXhBZ2UpKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jYWNoZUNvbnRyb2w/LmltbXV0YWJsZSkge1xuICAgICAgY2FjaGVDb250cm9sSGVhZGVycy5wdXNoKENhY2hlQ29udHJvbC5pbW11dGFibGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMsIGAke2lkfURlcGxveW1lbnRgLCB7XG4gICAgICBzb3VyY2VzOiBbU291cmNlLmFzc2V0KGNvbmZpZy5zb3VyY2UpXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB0aGlzLmJ1Y2tldCxcbiAgICAgIHBydW5lOiBjb25maWcucHJ1bmUgPz8gdHJ1ZSxcbiAgICAgIC4uLihjYWNoZUNvbnRyb2xIZWFkZXJzLmxlbmd0aCA+IDAgJiYge1xuICAgICAgICBjYWNoZUNvbnRyb2w6IGNhY2hlQ29udHJvbEhlYWRlcnNcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZE91dHB1dHMoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9QnVja2V0QXJuYCwge1xuICAgICAga2V5OiBgJHtzdGFja05hbWV9JHtpZH1CdWNrZXRBcm5gLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfSR7aWR9QnVja2V0QXJuYCxcbiAgICAgIHZhbHVlOiB0aGlzLmJ1Y2tldC5idWNrZXRBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogYFMzIEJ1Y2tldCBBUk4gZm9yICR7aWR9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1CdWNrZXROYW1lYCwge1xuICAgICAga2V5OiBgJHtzdGFja05hbWV9JHtpZH1CdWNrZXROYW1lYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke2lkfUJ1Y2tldE5hbWVgLFxuICAgICAgdmFsdWU6IHRoaXMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYFMzIEJ1Y2tldCBOYW1lIGZvciAke2lkfWBcbiAgICB9KTtcbiAgfVxuXG4gIGdldEJ1Y2tldCgpOiBJQnVja2V0IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQ7XG4gIH1cblxuICBnZXRCdWNrZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmJ1Y2tldE5hbWU7XG4gIH1cblxuICBnZXRCdWNrZXRBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuYnVja2V0QXJuO1xuICB9XG5cbiAgZ2V0QnVja2V0RG9tYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5idWNrZXREb21haW5OYW1lO1xuICB9XG5cbiAgZ2V0QnVja2V0UmVnaW9uYWxEb21haW5OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmJ1Y2tldFJlZ2lvbmFsRG9tYWluTmFtZTtcbiAgfVxuXG4gIGdldFdlYnNpdGVVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuYnVja2V0V2Vic2l0ZVVybDtcbiAgfVxuXG4gIGdldERlcGxveW1lbnQoKTogQnVja2V0RGVwbG95bWVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0RGVwbG95bWVudDtcbiAgfVxuXG4gIGdyYW50UmVhZChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFJlYWQoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFdyaXRlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50V3JpdGUoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFJlYWRXcml0ZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50RGVsZXRlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50RGVsZXRlKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRQdXQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRQdXQoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFB1YmxpY0FjY2VzcyguLi5rZXlQcmVmaXg6IHN0cmluZ1tdKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFB1YmxpY0FjY2VzcyguLi5rZXlQcmVmaXgpO1xuICB9XG5cbiAgYWRkRXZlbnROb3RpZmljYXRpb24oXG4gICAgZXZlbnQ6IEV2ZW50VHlwZSxcbiAgICBkZXN0OiBJQnVja2V0Tm90aWZpY2F0aW9uRGVzdGluYXRpb24sXG4gICAgLi4uZmlsdGVyczogTm90aWZpY2F0aW9uS2V5RmlsdGVyW11cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5idWNrZXQuYWRkRXZlbnROb3RpZmljYXRpb24oZXZlbnQsIGRlc3QsIC4uLmZpbHRlcnMpO1xuICB9XG5cbiAgYWRkT2JqZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbihcbiAgICBkZXN0OiBJQnVja2V0Tm90aWZpY2F0aW9uRGVzdGluYXRpb24sXG4gICAgLi4uZmlsdGVyczogTm90aWZpY2F0aW9uS2V5RmlsdGVyW11cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5idWNrZXQuYWRkT2JqZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbihkZXN0LCAuLi5maWx0ZXJzKTtcbiAgfVxuXG4gIGFkZE9iamVjdFJlbW92ZWROb3RpZmljYXRpb24oXG4gICAgZGVzdDogSUJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uLFxuICAgIC4uLmZpbHRlcnM6IE5vdGlmaWNhdGlvbktleUZpbHRlcltdXG4gICk6IHZvaWQge1xuICAgIHRoaXMuYnVja2V0LmFkZE9iamVjdFJlbW92ZWROb3RpZmljYXRpb24oZGVzdCwgLi4uZmlsdGVycyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VGYWN0b3J5IHtcbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBTdG9yYWdlQnVpbGRQcm9wcyA9IHt9KTogU3RvcmFnZUZhY3RvcnlGbiB7XG4gICAgY29uc3QgeyBzdGFja1BsYWNlbWVudCwgLi4uczNQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgZm46IFN0b3JhZ2VGYWN0b3J5Rm4gPSAoX2FwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiB7XG4gICAgICB2YWxpZGF0ZVN0b3JhZ2VQcm9wcyhzM1Byb3BzKTtcbiAgICAgIHJldHVybiBuZXcgU3RvcmFnZShzY29wZSwgaWQsIHMzUHJvcHMpO1xuICAgIH07XG4gICAgaWYgKHN0YWNrUGxhY2VtZW50KSB7XG4gICAgICBmbi5zdGFja1BsYWNlbWVudCA9IHN0YWNrUGxhY2VtZW50O1xuICAgIH1cbiAgICByZXR1cm4gZm47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -11,7 +11,7 @@ class AuditRoleFactory {
|
|
|
11
11
|
static build(id, config) {
|
|
12
12
|
return (_app, scope) => {
|
|
13
13
|
const role = new aws_iam_1.Role(scope, id, {
|
|
14
|
-
roleName: `${config.roleNamePrefix || "FjallAudit"}
|
|
14
|
+
roleName: `${config.roleNamePrefix || "FjallAudit"}${config.appName}`,
|
|
15
15
|
path: config.rolePath || "/",
|
|
16
16
|
assumedBy: new aws_iam_1.AccountPrincipal(config.webappAccountId),
|
|
17
17
|
description: `Cross-account audit role for CloudQuery access to application: ${config.appName}`,
|
|
@@ -23,14 +23,14 @@ class AuditRoleFactory {
|
|
|
23
23
|
aws_iam_1.ManagedPolicy.fromAwsManagedPolicyName("SecurityAudit")
|
|
24
24
|
]
|
|
25
25
|
});
|
|
26
|
-
// Export the role ARN so it can be retrieved after deployment
|
|
27
26
|
new aws_cdk_lib_1.CfnOutput(scope, `${id}Arn`, {
|
|
27
|
+
key: `${id}Arn`,
|
|
28
28
|
value: role.roleArn,
|
|
29
29
|
description: `ARN of the audit role for ${config.appName}`,
|
|
30
30
|
exportName: `${config.appName}-AuditRoleArn`
|
|
31
31
|
});
|
|
32
|
-
// Export the external ID so it can be retrieved after deployment
|
|
33
32
|
new aws_cdk_lib_1.CfnOutput(scope, `${id}ExternalId`, {
|
|
33
|
+
key: `${id}ExternalId`,
|
|
34
34
|
value: config.externalId,
|
|
35
35
|
description: `External ID for the audit role for ${config.appName}`,
|
|
36
36
|
exportName: `${config.appName}-AuditRoleExternalId`
|
|
@@ -41,4 +41,4 @@ class AuditRoleFactory {
|
|
|
41
41
|
}
|
|
42
42
|
exports.AuditRoleFactory = AuditRoleFactory;
|
|
43
43
|
exports.default = AuditRoleFactory;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXRSb2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvYXVkaXQvYXVkaXRSb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF3QztBQUN4QyxpREFBNEU7QUE4QjVFOzs7R0FHRztBQUNILE1BQWEsZ0JBQWdCO0lBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQ2pCLEVBQVUsRUFDVixNQUF1QjtRQUV2QixPQUFPLENBQUMsSUFBZSxFQUFFLEtBQWdCLEVBQUUsRUFBRTtZQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLGNBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUMvQixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNyRSxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxHQUFHO2dCQUM1QixTQUFTLEVBQUUsSUFBSSwwQkFBZ0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO2dCQUN2RCxXQUFXLEVBQUUsa0VBQWtFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQy9GLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ2hDLGVBQWUsRUFBRTtvQkFDZix3REFBd0Q7b0JBQ3hELHVCQUFhLENBQUMsd0JBQXdCLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3hELDJDQUEyQztvQkFDM0MsdUJBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUM7aUJBQ3hEO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsSUFBSSx1QkFBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO2dCQUMvQixHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUs7Z0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNuQixXQUFXLEVBQUUsNkJBQTZCLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQzFELFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLGVBQWU7YUFDN0MsQ0FBQyxDQUFDO1lBRUgsSUFBSSx1QkFBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFO2dCQUN0QyxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVk7Z0JBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVTtnQkFDeEIsV0FBVyxFQUFFLHNDQUFzQyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNuRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxzQkFBc0I7YUFDcEQsQ0FBQyxDQUFDO1lBRUgsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFyQ0QsNENBcUNDO0FBRUQsa0JBQWUsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFJvbGUsIEFjY291bnRQcmluY2lwYWwsIE1hbmFnZWRQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Um9sZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIGFjY291bnQgSUQgb2YgdGhlIEZqYWxsIHdlYmFwcCB0aGF0IHdpbGwgYXNzdW1lIHRoaXMgcm9sZVxuICAgKi9cbiAgd2ViYXBwQWNjb3VudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBuYW1lIHRvIHNjb3BlIHRoZSByb2xlJ3MgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGFwcE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRXh0ZXJuYWwgSUQgZm9yIGFkZGl0aW9uYWwgc2VjdXJpdHkgd2hlbiBhc3N1bWluZyB0aGUgcm9sZVxuICAgKi9cbiAgZXh0ZXJuYWxJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCByb2xlIG5hbWUgcHJlZml4LiBEZWZhdWx0cyB0byBcIkZqYWxsQXVkaXRcIlxuICAgKi9cbiAgcm9sZU5hbWVQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIElBTSBwYXRoIGZvciB0aGUgcm9sZS4gRGVmYXVsdHMgdG8gXCIvXCJcbiAgICovXG4gIHJvbGVQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgdG8gYnVpbGQgYSBjcm9zcy1hY2NvdW50IGF1ZGl0IElBTSByb2xlIHRoYXQgYWxsb3dzIHRoZSBGamFsbCB3ZWJhcHBcbiAqIHRvIHVzZSBDbG91ZFF1ZXJ5IGZvciBjb21wcmVoZW5zaXZlIHJlYWQtb25seSBhdWRpdGluZyBvZiBBV1MgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgY2xhc3MgQXVkaXRSb2xlRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBjb25maWc6IEF1ZGl0Um9sZUNvbmZpZ1xuICApOiAoYXBwOiBDb25zdHJ1Y3QsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFJvbGUge1xuICAgIHJldHVybiAoX2FwcDogQ29uc3RydWN0LCBzY29wZTogQ29uc3RydWN0KSA9PiB7XG4gICAgICBjb25zdCByb2xlID0gbmV3IFJvbGUoc2NvcGUsIGlkLCB7XG4gICAgICAgIHJvbGVOYW1lOiBgJHtjb25maWcucm9sZU5hbWVQcmVmaXggfHwgXCJGamFsbEF1ZGl0XCJ9JHtjb25maWcuYXBwTmFtZX1gLFxuICAgICAgICBwYXRoOiBjb25maWcucm9sZVBhdGggfHwgXCIvXCIsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IEFjY291bnRQcmluY2lwYWwoY29uZmlnLndlYmFwcEFjY291bnRJZCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQ3Jvc3MtYWNjb3VudCBhdWRpdCByb2xlIGZvciBDbG91ZFF1ZXJ5IGFjY2VzcyB0byBhcHBsaWNhdGlvbjogJHtjb25maWcuYXBwTmFtZX1gLFxuICAgICAgICBleHRlcm5hbElkczogW2NvbmZpZy5leHRlcm5hbElkXSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgLy8gQVdTIG1hbmFnZWQgcG9saWN5IGZvciBjb21wcmVoZW5zaXZlIHJlYWQtb25seSBhY2Nlc3NcbiAgICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIlJlYWRPbmx5QWNjZXNzXCIpLFxuICAgICAgICAgIC8vIEFXUyBtYW5hZ2VkIHBvbGljeSBmb3Igc2VjdXJpdHkgYXVkaXRpbmdcbiAgICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIlNlY3VyaXR5QXVkaXRcIilcbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQoc2NvcGUsIGAke2lkfUFybmAsIHtcbiAgICAgICAga2V5OiBgJHtpZH1Bcm5gLFxuICAgICAgICB2YWx1ZTogcm9sZS5yb2xlQXJuLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEFSTiBvZiB0aGUgYXVkaXQgcm9sZSBmb3IgJHtjb25maWcuYXBwTmFtZX1gLFxuICAgICAgICBleHBvcnROYW1lOiBgJHtjb25maWcuYXBwTmFtZX0tQXVkaXRSb2xlQXJuYFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQoc2NvcGUsIGAke2lkfUV4dGVybmFsSWRgLCB7XG4gICAgICAgIGtleTogYCR7aWR9RXh0ZXJuYWxJZGAsXG4gICAgICAgIHZhbHVlOiBjb25maWcuZXh0ZXJuYWxJZCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBFeHRlcm5hbCBJRCBmb3IgdGhlIGF1ZGl0IHJvbGUgZm9yICR7Y29uZmlnLmFwcE5hbWV9YCxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7Y29uZmlnLmFwcE5hbWV9LUF1ZGl0Um9sZUV4dGVybmFsSWRgXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJvbGU7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdWRpdFJvbGVGYWN0b3J5O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { AuditRoleFactory, type AuditRoleConfig } from "./auditRole";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuditRoleFactory = void 0;
|
|
4
|
+
var auditRole_1 = require("./auditRole");
|
|
5
|
+
Object.defineProperty(exports, "AuditRoleFactory", { enumerable: true, get: function () { return auditRole_1.AuditRoleFactory; } });
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9hdWRpdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBcUU7QUFBNUQsNkdBQUEsZ0JBQWdCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBdWRpdFJvbGVGYWN0b3J5LCB0eXBlIEF1ZGl0Um9sZUNvbmZpZyB9IGZyb20gXCIuL2F1ZGl0Um9sZVwiO1xuIl19
|
|
@@ -5,10 +5,11 @@ const constructs_1 = require("constructs");
|
|
|
5
5
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
6
|
const aws_backup_1 = require("aws-cdk-lib/aws-backup");
|
|
7
7
|
const iam = require("aws-cdk-lib/aws-iam");
|
|
8
|
+
const backupTierMapping_1 = require("../../../utils/backupTierMapping");
|
|
8
9
|
class BackupPlan extends constructs_1.Construct {
|
|
9
10
|
constructor(scope, id, props) {
|
|
10
11
|
super(scope, id);
|
|
11
|
-
const tagKey = props.tagKey ||
|
|
12
|
+
const tagKey = props.tagKey || backupTierMapping_1.BACKUP_TIER_TAG_KEY;
|
|
12
13
|
this.plan = new aws_backup_1.BackupPlan(this, `${props.planName}Plan`, {
|
|
13
14
|
backupPlanName: props.planName,
|
|
14
15
|
backupVault: props.backupVault.vault,
|
|
@@ -57,4 +58,4 @@ class BackupPlan extends constructs_1.Construct {
|
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
60
|
exports.BackupPlan = BackupPlan;
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwUGxhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2JhY2t1cC9iYWNrdXBQbGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyw2Q0FBd0M7QUFDeEMsdURBS2dDO0FBQ2hDLDJDQUEyQztBQUUzQyx3RUFBdUU7QUFVdkUsTUFBYSxVQUFXLFNBQVEsc0JBQVM7SUFLdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksdUNBQW1CLENBQUM7UUFFbkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLHVCQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsTUFBTSxFQUFFO1lBQ2xELGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUM5QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLO1lBQ3BDLGVBQWUsRUFBRSxLQUFLLENBQUMsS0FBSztTQUM3QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksNEJBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxXQUFXLEVBQUU7WUFDdkUsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ3JCLFNBQVMsRUFBRSxDQUFDLDJCQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0QsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsU0FBUyxFQUFFO1lBQzdELEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLFNBQVM7WUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUM5QixVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxlQUFlO1NBQzdDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFzQjtRQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsWUFBWSxFQUFFO1lBQzdELFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztZQUMzRCxXQUFXLEVBQUUsbUJBQW1CLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDaEQsZUFBZSxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQ3hDLGtEQUFrRCxDQUNuRDtnQkFDRCxHQUFHLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUN4QyxvREFBb0QsQ0FDckQ7Z0JBQ0QsR0FBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FDeEMsdUNBQXVDLENBQ3hDO2dCQUNELEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQ3hDLHdDQUF3QyxDQUN6QzthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsQ0FDZCxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPLEVBQUU7Z0JBQ1Asc0JBQXNCO2dCQUN0Qix3Q0FBd0M7Z0JBQ3hDLG9DQUFvQztnQkFDcEMseUJBQXlCO2dCQUN6Qix3QkFBd0I7Z0JBQ3hCLG1DQUFtQzthQUNwQztZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBVSxFQUFFLEtBQXNCO1FBQzdDLE9BQU8sQ0FBQyxLQUFnQixFQUFFLEVBQUU7WUFDMUIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXZFRCxnQ0F1RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCYWNrdXBQbGFuIGFzIFBsYW4sXG4gIEJhY2t1cFNlbGVjdGlvbixcbiAgQmFja3VwUmVzb3VyY2UsXG4gIHR5cGUgQmFja3VwUGxhblJ1bGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1iYWNrdXBcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgdHlwZSBCYWNrdXBWYXVsdCB9IGZyb20gXCIuL2JhY2t1cFZhdWx0XCI7XG5pbXBvcnQgeyBCQUNLVVBfVElFUl9UQUdfS0VZIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2JhY2t1cFRpZXJNYXBwaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja3VwUGxhblByb3BzIHtcbiAgcGxhbk5hbWU6IHN0cmluZztcbiAgcnVsZXM6IEJhY2t1cFBsYW5SdWxlW107XG4gIGJhY2t1cFZhdWx0OiBCYWNrdXBWYXVsdDtcbiAgdGFnVmFsdWU6IHN0cmluZztcbiAgdGFnS2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQmFja3VwUGxhbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBwbGFuOiBQbGFuO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uOiBCYWNrdXBTZWxlY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSBwbGFuQXJuOiBDZm5PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhY2t1cFBsYW5Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB0YWdLZXkgPSBwcm9wcy50YWdLZXkgfHwgQkFDS1VQX1RJRVJfVEFHX0tFWTtcblxuICAgIHRoaXMucGxhbiA9IG5ldyBQbGFuKHRoaXMsIGAke3Byb3BzLnBsYW5OYW1lfVBsYW5gLCB7XG4gICAgICBiYWNrdXBQbGFuTmFtZTogcHJvcHMucGxhbk5hbWUsXG4gICAgICBiYWNrdXBWYXVsdDogcHJvcHMuYmFja3VwVmF1bHQudmF1bHQsXG4gICAgICBiYWNrdXBQbGFuUnVsZXM6IHByb3BzLnJ1bGVzXG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBCYWNrdXBTZWxlY3Rpb24odGhpcywgYCR7cHJvcHMucGxhbk5hbWV9U2VsZWN0aW9uYCwge1xuICAgICAgYmFja3VwUGxhbjogdGhpcy5wbGFuLFxuICAgICAgcmVzb3VyY2VzOiBbQmFja3VwUmVzb3VyY2UuZnJvbVRhZyh0YWdLZXksIHByb3BzLnRhZ1ZhbHVlKV0sXG4gICAgICByb2xlOiB0aGlzLmNyZWF0ZUJhY2t1cFJvbGUocHJvcHMpXG4gICAgfSk7XG5cbiAgICB0aGlzLnBsYW5Bcm4gPSBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3Byb3BzLnBsYW5OYW1lfVBsYW5Bcm5gLCB7XG4gICAgICBrZXk6IGAke3Byb3BzLnBsYW5OYW1lfVBsYW5Bcm5gLFxuICAgICAgdmFsdWU6IHRoaXMucGxhbi5iYWNrdXBQbGFuQXJuLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMucGxhbk5hbWV9QmFja3VwUGxhbkFybmBcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmFja3VwUm9sZShwcm9wczogQmFja3VwUGxhblByb3BzKTogaWFtLlJvbGUge1xuICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgYCR7cHJvcHMucGxhbk5hbWV9QmFja3VwUm9sZWAsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiYmFja3VwLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBkZXNjcmlwdGlvbjogYEJhY2t1cCByb2xlIGZvciAke3Byb3BzLnBsYW5OYW1lfWAsXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwXCJcbiAgICAgICAgKSxcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUmVzdG9yZXNcIlxuICAgICAgICApLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclMzQmFja3VwXCJcbiAgICAgICAgKSxcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwiQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JTM1Jlc3RvcmVcIlxuICAgICAgICApXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcInJkczpNb2RpZnlEQkluc3RhbmNlXCIsXG4gICAgICAgICAgXCJyZHM6RGVzY3JpYmVEQkluc3RhbmNlQXV0b21hdGVkQmFja3Vwc1wiLFxuICAgICAgICAgIFwicmRzOlJlc3RvcmVEQkluc3RhbmNlVG9Qb2ludEluVGltZVwiLFxuICAgICAgICAgIFwicmRzOkRlc2NyaWJlREJJbnN0YW5jZXNcIixcbiAgICAgICAgICBcInJkczpEZXNjcmliZURCQ2x1c3RlcnNcIixcbiAgICAgICAgICBcInJkczpSZXN0b3JlREJDbHVzdGVyVG9Qb2ludEluVGltZVwiXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiByb2xlO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBCYWNrdXBQbGFuUHJvcHMpIHtcbiAgICByZXR1cm4gKHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIHJldHVybiBuZXcgQmFja3VwUGxhbihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -11,14 +11,16 @@ class BackupVault extends constructs_1.Construct {
|
|
|
11
11
|
const encryptionKey = props.encryptionKey ||
|
|
12
12
|
new kms_1.CustomerManagedKey(this, `${props.vaultName}Key`, {
|
|
13
13
|
description: `Encryption key for backup vault ${props.vaultName}`,
|
|
14
|
-
aliasName: `cmk/backupVault/${props.vaultName}
|
|
14
|
+
aliasName: `cmk/backupVault/${props.vaultName}`,
|
|
15
|
+
removalPolicy: props.removalPolicy
|
|
15
16
|
});
|
|
16
17
|
this.vault = new aws_backup_1.BackupVault(this, `${props.vaultName}Vault`, {
|
|
17
18
|
backupVaultName: props.vaultName,
|
|
18
19
|
encryptionKey: encryptionKey.key,
|
|
19
20
|
accessPolicy: props.accessPolicy,
|
|
20
21
|
lockConfiguration: props.lockConfiguration,
|
|
21
|
-
|
|
22
|
+
// TODO: Revert to RemovalPolicy.RETAIN for production
|
|
23
|
+
removalPolicy: props.removalPolicy || aws_cdk_lib_1.RemovalPolicy.DESTROY
|
|
22
24
|
});
|
|
23
25
|
this.vaultArn = new aws_cdk_lib_1.CfnOutput(this, `${props.vaultName}VaultArn`, {
|
|
24
26
|
key: `${props.vaultName}VaultArn`,
|
|
@@ -38,4 +40,4 @@ class BackupVault extends constructs_1.Construct {
|
|
|
38
40
|
}
|
|
39
41
|
}
|
|
40
42
|
exports.BackupVault = BackupVault;
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwVmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9iYWNrdXAvYmFja3VwVmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUF1RDtBQUN2RCx1REFHZ0M7QUFFaEMsd0NBQW9EO0FBVXBELE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBS3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLGFBQWEsR0FDakIsS0FBSyxDQUFDLGFBQWE7WUFDbkIsSUFBSSx3QkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxLQUFLLEVBQUU7Z0JBQ3BELFdBQVcsRUFBRSxtQ0FBbUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtnQkFDakUsU0FBUyxFQUFFLG1CQUFtQixLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUMvQyxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7YUFDbkMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLHdCQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsT0FBTyxFQUFFO1lBQ3RELGVBQWUsRUFBRSxLQUFLLENBQUMsU0FBUztZQUNoQyxhQUFhLEVBQUUsYUFBYSxDQUFDLEdBQUc7WUFDaEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsc0RBQXNEO1lBQ3RELGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLDJCQUFhLENBQUMsT0FBTztTQUM1RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxVQUFVLEVBQUU7WUFDaEUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsVUFBVTtZQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjO1lBQ2hDLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLEtBQUs7U0FDcEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsV0FBVyxFQUFFO1lBQ2xFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLFdBQVc7WUFDbEMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtZQUNqQyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxNQUFNO1NBQ3JDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQVUsRUFBRSxLQUF1QjtRQUM5QyxPQUFPLENBQUMsS0FBZ0IsRUFBRSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEzQ0Qsa0NBMkNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQmFja3VwVmF1bHQgYXMgVmF1bHQsXG4gIHR5cGUgTG9ja0NvbmZpZ3VyYXRpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1iYWNrdXBcIjtcbmltcG9ydCB7IHR5cGUgUG9saWN5RG9jdW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ3VzdG9tZXJNYW5hZ2VkS2V5IH0gZnJvbSBcIi4uL3NlY3JldHMva21zXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja3VwVmF1bHRQcm9wcyB7XG4gIHZhdWx0TmFtZTogc3RyaW5nO1xuICBlbmNyeXB0aW9uS2V5PzogQ3VzdG9tZXJNYW5hZ2VkS2V5O1xuICBhY2Nlc3NQb2xpY3k/OiBQb2xpY3lEb2N1bWVudDtcbiAgbG9ja0NvbmZpZ3VyYXRpb24/OiBMb2NrQ29uZmlndXJhdGlvbjtcbiAgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG5cbmV4cG9ydCBjbGFzcyBCYWNrdXBWYXVsdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSB2YXVsdDogVmF1bHQ7XG4gIHB1YmxpYyByZWFkb25seSB2YXVsdEFybjogQ2ZuT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgdmF1bHROYW1lOiBDZm5PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhY2t1cFZhdWx0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9XG4gICAgICBwcm9wcy5lbmNyeXB0aW9uS2V5IHx8XG4gICAgICBuZXcgQ3VzdG9tZXJNYW5hZ2VkS2V5KHRoaXMsIGAke3Byb3BzLnZhdWx0TmFtZX1LZXlgLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRW5jcnlwdGlvbiBrZXkgZm9yIGJhY2t1cCB2YXVsdCAke3Byb3BzLnZhdWx0TmFtZX1gLFxuICAgICAgICBhbGlhc05hbWU6IGBjbWsvYmFja3VwVmF1bHQvJHtwcm9wcy52YXVsdE5hbWV9YCxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnZhdWx0ID0gbmV3IFZhdWx0KHRoaXMsIGAke3Byb3BzLnZhdWx0TmFtZX1WYXVsdGAsIHtcbiAgICAgIGJhY2t1cFZhdWx0TmFtZTogcHJvcHMudmF1bHROYW1lLFxuICAgICAgZW5jcnlwdGlvbktleTogZW5jcnlwdGlvbktleS5rZXksXG4gICAgICBhY2Nlc3NQb2xpY3k6IHByb3BzLmFjY2Vzc1BvbGljeSxcbiAgICAgIGxvY2tDb25maWd1cmF0aW9uOiBwcm9wcy5sb2NrQ29uZmlndXJhdGlvbixcbiAgICAgIC8vIFRPRE86IFJldmVydCB0byBSZW1vdmFsUG9saWN5LlJFVEFJTiBmb3IgcHJvZHVjdGlvblxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1lcbiAgICB9KTtcblxuICAgIHRoaXMudmF1bHRBcm4gPSBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3Byb3BzLnZhdWx0TmFtZX1WYXVsdEFybmAsIHtcbiAgICAgIGtleTogYCR7cHJvcHMudmF1bHROYW1lfVZhdWx0QXJuYCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhdWx0LmJhY2t1cFZhdWx0QXJuLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMudmF1bHROYW1lfUFybmBcbiAgICB9KTtcblxuICAgIHRoaXMudmF1bHROYW1lID0gbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy52YXVsdE5hbWV9VmF1bHROYW1lYCwge1xuICAgICAga2V5OiBgJHtwcm9wcy52YXVsdE5hbWV9VmF1bHROYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhdWx0LmJhY2t1cFZhdWx0TmFtZSxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3Byb3BzLnZhdWx0TmFtZX1OYW1lYFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBCYWNrdXBWYXVsdFByb3BzKSB7XG4gICAgcmV0dXJuIChzY29wZTogQ29uc3RydWN0KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEJhY2t1cFZhdWx0KHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
|