@aws-cdk/aws-glue-alpha 2.266.0-alpha.0 → 2.268.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/.jsii +1002 -642
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +0 -58
  4. package/README.md +52 -33
  5. package/awslint.json +4 -0
  6. package/lib/catalog.d.ts +2 -2
  7. package/lib/catalog.js +4 -4
  8. package/lib/code.js +3 -3
  9. package/lib/connection.d.ts +41 -1
  10. package/lib/connection.js +48 -9
  11. package/lib/data-format.js +5 -5
  12. package/lib/data-quality-ruleset.d.ts +20 -9
  13. package/lib/data-quality-ruleset.js +33 -6
  14. package/lib/database.d.ts +3 -1
  15. package/lib/database.js +8 -2
  16. package/lib/external-table.js +1 -1
  17. package/lib/index.d.ts +0 -1
  18. package/lib/index.js +1 -2
  19. package/lib/jobs/job.d.ts +1 -1
  20. package/lib/jobs/job.js +3 -3
  21. package/lib/jobs/pyspark-etl-job.d.ts +1 -1
  22. package/lib/jobs/pyspark-etl-job.js +3 -3
  23. package/lib/jobs/pyspark-flex-etl-job.d.ts +1 -1
  24. package/lib/jobs/pyspark-flex-etl-job.js +3 -3
  25. package/lib/jobs/pyspark-streaming-job.d.ts +1 -1
  26. package/lib/jobs/pyspark-streaming-job.js +3 -3
  27. package/lib/jobs/python-shell-job.js +1 -1
  28. package/lib/jobs/ray-job.js +1 -1
  29. package/lib/jobs/scala-spark-etl-job.d.ts +3 -2
  30. package/lib/jobs/scala-spark-etl-job.js +5 -4
  31. package/lib/jobs/scala-spark-flex-etl-job.d.ts +11 -20
  32. package/lib/jobs/scala-spark-flex-etl-job.js +12 -11
  33. package/lib/jobs/scala-spark-streaming-job.d.ts +3 -2
  34. package/lib/jobs/scala-spark-streaming-job.js +5 -4
  35. package/lib/jobs/spark-job.js +1 -1
  36. package/lib/partition-projection.d.ts +8 -8
  37. package/lib/partition-projection.js +49 -2
  38. package/lib/s3-table.d.ts +86 -40
  39. package/lib/s3-table.js +136 -85
  40. package/lib/schema.d.ts +26 -6
  41. package/lib/schema.js +74 -77
  42. package/lib/security-configuration.js +4 -4
  43. package/lib/storage-parameter.d.ts +14 -3
  44. package/lib/storage-parameter.js +16 -6
  45. package/lib/table-base.d.ts +1 -1
  46. package/lib/table-base.js +2 -2
  47. package/lib/triggers/trigger-options.d.ts +1 -1
  48. package/lib/triggers/trigger-options.js +2 -2
  49. package/lib/triggers/workflow.js +2 -2
  50. package/package.json +7 -7
  51. package/lib/table-deprecated.d.ts +0 -13
  52. package/lib/table-deprecated.js +0 -70
Binary file
package/.warnings.jsii.js CHANGED
@@ -46,35 +46,6 @@ const VALIDATORS = { _aws_cdk_aws_glue_alpha_CatalogEncryptionOptions: function
46
46
  finally {
47
47
  visitedObjects.delete(p);
48
48
  }
49
- }, _aws_cdk_aws_glue_alpha_S3TableProps: function _aws_cdk_aws_glue_alpha_S3TableProps(p) {
50
- if (p == null)
51
- return;
52
- visitedObjects.add(p);
53
- try {
54
- if (p.columns != null)
55
- for (const o of p.columns)
56
- if (!visitedObjects.has(o))
57
- module.exports._aws_cdk_aws_glue_alpha_Column(o);
58
- if (p.partitionIndexes != null)
59
- for (const o of p.partitionIndexes)
60
- if (!visitedObjects.has(o))
61
- module.exports._aws_cdk_aws_glue_alpha_PartitionIndex(o);
62
- if (p.partitionKeys != null)
63
- for (const o of p.partitionKeys)
64
- if (!visitedObjects.has(o))
65
- module.exports._aws_cdk_aws_glue_alpha_Column(o);
66
- if (p.partitionProjection != null)
67
- for (const o of Object.values(p.partitionProjection))
68
- if (!visitedObjects.has(o))
69
- module.exports._aws_cdk_aws_glue_alpha_PartitionProjectionConfiguration(o);
70
- if (p.storageParameters != null)
71
- for (const o of p.storageParameters)
72
- if (!visitedObjects.has(o))
73
- module.exports._aws_cdk_aws_glue_alpha_StorageParameter(o);
74
- }
75
- finally {
76
- visitedObjects.delete(p);
77
- }
78
49
  }, _aws_cdk_aws_glue_alpha_WorkerType: function _aws_cdk_aws_glue_alpha_WorkerType(p) {
79
50
  if (p == null)
80
51
  return;
@@ -374,35 +345,6 @@ const VALIDATORS = { _aws_cdk_aws_glue_alpha_CatalogEncryptionOptions: function
374
345
  finally {
375
346
  visitedObjects.delete(p);
376
347
  }
377
- }, _aws_cdk_aws_glue_alpha_TableProps: function _aws_cdk_aws_glue_alpha_TableProps(p) {
378
- if (p == null)
379
- return;
380
- visitedObjects.add(p);
381
- try {
382
- if (p.columns != null)
383
- for (const o of p.columns)
384
- if (!visitedObjects.has(o))
385
- module.exports._aws_cdk_aws_glue_alpha_Column(o);
386
- if (p.partitionIndexes != null)
387
- for (const o of p.partitionIndexes)
388
- if (!visitedObjects.has(o))
389
- module.exports._aws_cdk_aws_glue_alpha_PartitionIndex(o);
390
- if (p.partitionKeys != null)
391
- for (const o of p.partitionKeys)
392
- if (!visitedObjects.has(o))
393
- module.exports._aws_cdk_aws_glue_alpha_Column(o);
394
- if (p.partitionProjection != null)
395
- for (const o of Object.values(p.partitionProjection))
396
- if (!visitedObjects.has(o))
397
- module.exports._aws_cdk_aws_glue_alpha_PartitionProjectionConfiguration(o);
398
- if (p.storageParameters != null)
399
- for (const o of p.storageParameters)
400
- if (!visitedObjects.has(o))
401
- module.exports._aws_cdk_aws_glue_alpha_StorageParameter(o);
402
- }
403
- finally {
404
- visitedObjects.delete(p);
405
- }
406
348
  }, _aws_cdk_aws_glue_alpha_TriggerOptions: function _aws_cdk_aws_glue_alpha_TriggerOptions(p) {
407
349
  if (p == null)
408
350
  return;
package/README.md CHANGED
@@ -71,7 +71,7 @@ for more granular details.
71
71
  #### ETL Jobs
72
72
 
73
73
  ETL jobs support pySpark and Scala languages, for which there are separate but
74
- similar constructors. ETL jobs default to the G2 worker type, but you can
74
+ similar constructors. ETL jobs default to the G1 worker type, but you can
75
75
  override this default with other supported worker type values (G1, G2, G4
76
76
  and G8). ETL jobs defaults to Glue version 4.0, which you can override to 3.0.
77
77
  The following ETL features are enabled by default:
@@ -140,7 +140,7 @@ Streaming jobs are similar to ETL jobs, except that they perform ETL on data
140
140
  streams using the Apache Spark Structured Streaming framework. Some Spark
141
141
  job features are not available to Streaming ETL jobs. They support Scala
142
142
  and pySpark languages. PySpark streaming jobs run on Python 3. It
143
- defaults to the G2 worker type and Glue 4.0, both of which you can override.
143
+ defaults to the G1 worker type and Glue 4.0, both of which you can override.
144
144
  The following best practice features are enabled by default:
145
145
  `—enable-metrics, —enable-continuous-cloudwatch-log`.
146
146
  The Spark UI (`—enable-spark-ui`) is off by default; enable it by setting the
@@ -197,7 +197,7 @@ new glue.PySparkStreamingJob(stack, 'PySparkStreamingJob', {
197
197
 
198
198
  The flexible execution class is appropriate for non-urgent jobs such as
199
199
  pre-production jobs, testing, and one-time data loads. Flexible jobs default
200
- to Glue version 5.0 and worker type `G_2X`. The following best practice
200
+ to Glue version 5.0 and worker type `G_1X`. The following best practice
201
201
  features are enabled by default:
202
202
  `—enable-metrics, —enable-continuous-cloudwatch-log`
203
203
  The Spark UI (`—enable-spark-ui`) is off by default; enable it by setting the
@@ -445,18 +445,21 @@ A `Connection` allows Glue jobs, crawlers and development endpoints to access
445
445
  certain types of data stores.
446
446
 
447
447
  * **Secrets Management**
448
- You must specify JDBC connection credentials in Secrets Manager and
449
- provide the Secrets Manager Key name as a property to the job connection.
448
+ Manage JDBC connection credentials in Secrets Manager and pass the secret
449
+ to the connection via the `secret` property (see the example below), rather
450
+ than embedding credentials in `properties`.
450
451
 
451
452
  * **Networking - the CDK determines the best fit subnet for Glue connection
452
453
  configuration**
453
- The prior version of the glue-alpha-module requires the developer to
454
- specify the subnet of the Connection when it’s defined. Now, you can still
455
- specify the specific subnet you want to use, but are no longer required
456
- to. You are only required to provide a VPC and either a public or private
457
- subnet selection. Without a specific subnet provided, the L2 leverages the
458
- existing [EC2 Subnet Selection](https://docs.aws.amazon.com/cdk/api/v2/python/aws_cdk.aws_ec2/SubnetSelection.html)
459
- library to make the best choice selection for the subnet.
454
+ You can specify the exact subnet of the Connection when it's defined, but
455
+ you are not required to. Instead, you can provide a `vpc` and, optionally, a
456
+ `vpcSubnets` selection, and the L2 leverages the existing
457
+ [EC2 Subnet Selection](https://docs.aws.amazon.com/cdk/api/v2/python/aws_cdk.aws_ec2/SubnetSelection.html)
458
+ library to make the best choice selection for the subnet. A Glue connection
459
+ targets a single subnet, so the first subnet of the selection is used.
460
+ `subnet` and `vpc` are mutually exclusive.
461
+
462
+ Pin the connection to a specific subnet:
460
463
 
461
464
  ```ts
462
465
  declare const securityGroup: ec2.SecurityGroup;
@@ -470,7 +473,21 @@ new glue.Connection(this, 'MyConnection', {
470
473
  });
471
474
  ```
472
475
 
473
- For RDS `Connection` by JDBC, it is recommended to manage credentials using AWS Secrets Manager. To use Secret, specify `SECRET_ID` in `properties` like the following code. Note that in this case, the subnet must have a route to the AWS Secrets Manager VPC endpoint or to the AWS Secrets Manager endpoint through a NAT gateway.
476
+ Or let the CDK select a subnet from a VPC:
477
+
478
+ ```ts
479
+ declare const securityGroup: ec2.SecurityGroup;
480
+ declare const vpc: ec2.Vpc;
481
+ new glue.Connection(this, 'MyConnection', {
482
+ type: glue.ConnectionType.NETWORK,
483
+ securityGroups: [securityGroup],
484
+ vpc,
485
+ // Optional - defaults to private subnets
486
+ vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },
487
+ });
488
+ ```
489
+
490
+ For RDS `Connection` by JDBC, it is recommended to manage credentials using AWS Secrets Manager. Pass the secret via the `secret` property: Glue reads the credentials at runtime through the connection's `SECRET_ID`, so the secret value never enters the template. Note that in this case, the subnet must have a route to the AWS Secrets Manager VPC endpoint or to the AWS Secrets Manager endpoint through a NAT gateway.
474
491
 
475
492
  ```ts
476
493
  declare const securityGroup: ec2.SecurityGroup;
@@ -480,18 +497,18 @@ new glue.Connection(this, "RdsConnection", {
480
497
  type: glue.ConnectionType.JDBC,
481
498
  securityGroups: [securityGroup],
482
499
  subnet,
500
+ secret: db.secret,
483
501
  properties: {
484
502
  JDBC_CONNECTION_URL: `jdbc:mysql://${db.clusterEndpoint.socketAddress}/databasename`,
485
503
  JDBC_ENFORCE_SSL: "false",
486
- SECRET_ID: db.secret!.secretName,
487
504
  },
488
505
  });
489
506
  ```
490
507
 
491
- Connection `properties` are emitted verbatim into the CloudFormation template, so
492
- any credential placed there in plaintext is stored in plaintext in the template,
493
- `cdk.out`, and source control. Reference a Secrets Manager secret through
494
- `SECRET_ID` (as above) instead. If a property key looks like a credential (for
508
+ Prefer the `secret` property over placing credentials in `properties`. Connection
509
+ `properties` are emitted verbatim into the CloudFormation template, so any
510
+ credential placed there in plaintext is stored in plaintext in the template,
511
+ `cdk.out`, and source control. If a property key looks like a credential (for
495
512
  example `PASSWORD`, `SECRET`, or `TOKEN`) and holds a plaintext literal, the
496
513
  construct emits a synthesis-time warning.
497
514
 
@@ -724,13 +741,13 @@ new glue.S3Table(this, 'MyTable', {
724
741
  });
725
742
  ```
726
743
 
727
- By default, a S3 bucket will be created to store the table's data but you can manually pass the `bucket` and `s3Prefix`:
744
+ By default, a S3 bucket will be created to store the table's data but you can bring your own with `S3TableStorage.fromBucket` and set an `s3Prefix`:
728
745
 
729
746
  ```ts
730
747
  declare const myBucket: s3.Bucket;
731
748
  declare const myDatabase: glue.Database;
732
749
  new glue.S3Table(this, 'MyTable', {
733
- bucket: myBucket,
750
+ storage: glue.S3TableStorage.fromBucket(myBucket),
734
751
  s3Prefix: 'my-table/',
735
752
  // ...
736
753
  database: myDatabase,
@@ -1081,10 +1098,11 @@ Data Quality Definition Language (DQDL) — that are evaluated against a table i
1081
1098
  the Data Catalog.
1082
1099
 
1083
1100
  ```ts
1101
+ declare const database: glue.IDatabase;
1084
1102
  new glue.DataQualityRuleset(this, 'MyRuleset', {
1085
1103
  rulesetName: 'my_ruleset',
1086
1104
  dqdl: glue.Dqdl.fromString('Rules = [ RowCount > 100, IsComplete "order_id" ]'),
1087
- targetTable: new glue.DataQualityTargetTable('my_database', 'my_table'),
1105
+ targetTable: glue.DataQualityTargetTable.fromTableName(database, 'my_table'),
1088
1106
  });
1089
1107
  ```
1090
1108
 
@@ -1095,16 +1113,17 @@ full rule syntax.
1095
1113
 
1096
1114
  ## [Encryption](https://docs.aws.amazon.com/athena/latest/ug/encryption.html)
1097
1115
 
1098
- When the table creates its own S3 bucket (i.e. you do not pass an explicit `bucket`), that bucket enforces SSL: a bucket policy denies any request made over plain HTTP. If you provide your own bucket, enabling `enforceSSL` on it is your responsibility.
1116
+ When the table creates its own S3 bucket (`S3TableStorage.managedBucket`, the default), that bucket enforces SSL: a bucket policy denies any request made over plain HTTP. If you bring your own bucket with `S3TableStorage.fromBucket`, enabling `enforceSSL` on it is your responsibility.
1099
1117
 
1100
- You can enable encryption on a Table's data:
1118
+ Server-side encryption applies only to a bucket the table manages. Choose it with
1119
+ `storage: glue.S3TableStorage.managedBucket(...)`:
1101
1120
 
1102
1121
  * [S3Managed](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html) - (default) Server side encryption (`SSE-S3`) with an Amazon S3-managed key.
1103
1122
 
1104
1123
  ```ts
1105
1124
  declare const myDatabase: glue.Database;
1106
1125
  new glue.S3Table(this, 'MyTable', {
1107
- encryption: glue.TableEncryption.S3_MANAGED,
1126
+ storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.s3Managed()),
1108
1127
  // ...
1109
1128
  database: myDatabase,
1110
1129
  columns: [{
@@ -1121,7 +1140,7 @@ new glue.S3Table(this, 'MyTable', {
1121
1140
  declare const myDatabase: glue.Database;
1122
1141
  // KMS key is created automatically
1123
1142
  new glue.S3Table(this, 'MyTable', {
1124
- encryption: glue.TableEncryption.KMS,
1143
+ storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.kms()),
1125
1144
  // ...
1126
1145
  database: myDatabase,
1127
1146
  columns: [{
@@ -1133,8 +1152,7 @@ new glue.S3Table(this, 'MyTable', {
1133
1152
 
1134
1153
  // with an explicit KMS key
1135
1154
  new glue.S3Table(this, 'MyTable', {
1136
- encryption: glue.TableEncryption.KMS,
1137
- encryptionKey: new kms.Key(this, 'MyKey'),
1155
+ storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.kms(new kms.Key(this, 'MyKey'))),
1138
1156
  // ...
1139
1157
  database: myDatabase,
1140
1158
  columns: [{
@@ -1150,7 +1168,7 @@ new glue.S3Table(this, 'MyTable', {
1150
1168
  ```ts
1151
1169
  declare const myDatabase: glue.Database;
1152
1170
  new glue.S3Table(this, 'MyTable', {
1153
- encryption: glue.TableEncryption.KMS_MANAGED,
1171
+ storage: glue.S3TableStorage.managedBucket(glue.S3TableEncryption.kmsManaged()),
1154
1172
  // ...
1155
1173
  database: myDatabase,
1156
1174
  columns: [{
@@ -1161,13 +1179,13 @@ new glue.S3Table(this, 'MyTable', {
1161
1179
  });
1162
1180
  ```
1163
1181
 
1164
- * [ClientSideKms](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html#client-side-encryption-kms-managed-master-key-intro) - Client-side encryption (`CSE-KMS`) with an AWS KMS Key managed by the account owner.
1182
+ Client-side encryption ([CSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html#client-side-encryption-kms-managed-master-key-intro)) is independent of the bucket's server-side encryption and works with either a managed or an existing bucket. Configure it with `clientSideEncryption`:
1165
1183
 
1166
1184
  ```ts
1167
1185
  declare const myDatabase: glue.Database;
1168
1186
  // KMS key is created automatically
1169
1187
  new glue.S3Table(this, 'MyTable', {
1170
- encryption: glue.TableEncryption.CLIENT_SIDE_KMS,
1188
+ clientSideEncryption: glue.TableClientSideEncryption.kms(),
1171
1189
  // ...
1172
1190
  database: myDatabase,
1173
1191
  columns: [{
@@ -1179,8 +1197,7 @@ new glue.S3Table(this, 'MyTable', {
1179
1197
 
1180
1198
  // with an explicit KMS key
1181
1199
  new glue.S3Table(this, 'MyTable', {
1182
- encryption: glue.TableEncryption.CLIENT_SIDE_KMS,
1183
- encryptionKey: new kms.Key(this, 'MyKey'),
1200
+ clientSideEncryption: glue.TableClientSideEncryption.kms(new kms.Key(this, 'MyKey')),
1184
1201
  // ...
1185
1202
  database: myDatabase,
1186
1203
  columns: [{
@@ -1191,7 +1208,7 @@ new glue.S3Table(this, 'MyTable', {
1191
1208
  });
1192
1209
  ```
1193
1210
 
1194
- *Note: you cannot provide a `Bucket` when creating the `S3Table` if you wish to use server-side encryption (`KMS`, `KMS_MANAGED` or `S3_MANAGED`)*.
1211
+ To store the table's data in an existing bucket, use `glue.S3TableStorage.fromBucket(bucket)`. CDK does not manage that bucket's server-side encryption, so an encryption choice can never be paired with a provided bucket — but client-side encryption still applies.
1195
1212
 
1196
1213
  ### Marking table data as encrypted
1197
1214
 
@@ -1250,6 +1267,8 @@ new glue.S3Table(this, 'MyTable', {
1250
1267
  });
1251
1268
  ```
1252
1269
 
1270
+ For a type the `Schema` factories don't model, use `glue.Schema.custom('...')`, which takes the raw Glue input string.
1271
+
1253
1272
  ## Public FAQ
1254
1273
 
1255
1274
  ### What are we launching today?
package/awslint.json CHANGED
@@ -110,6 +110,10 @@
110
110
  "interface-extends-ref:@aws-cdk/aws-glue-alpha.ITable",
111
111
  "interface-extends-ref:@aws-cdk/aws-glue-alpha.IWorkflow",
112
112
  "prefer-ref-interface:@aws-cdk/aws-glue-alpha.DatabaseProps.catalog",
113
+ "prefer-ref-interface:@aws-cdk/aws-glue-alpha.ConnectionProps.vpc",
114
+ "prefer-ref-interface:aws-cdk-lib.aws_ec2.ClientVpnEndpointOptions.securityGroups",
115
+ "prefer-ref-interface:aws-cdk-lib.aws_ec2.SubnetSelection.subnets",
116
+ "prefer-ref-interface:aws-cdk-lib.aws_ec2.InterfaceVpcEndpointOptions.securityGroups",
113
117
  "no-unused-type:@aws-cdk/aws-glue-alpha.S3EncryptionMode"
114
118
  ]
115
119
  }
package/lib/catalog.d.ts CHANGED
@@ -44,7 +44,7 @@ export declare class DataCatalogEncryptionAtRest {
44
44
  * @param key the KMS key to use. If omitted, an AWS-managed key is used and
45
45
  * the key is not exposed as a grantable resource.
46
46
  */
47
- static kms(key?: kms.IKey): DataCatalogEncryptionAtRest;
47
+ static kms(key?: kms.IKeyRef): DataCatalogEncryptionAtRest;
48
48
  /**
49
49
  * Encrypt the Data Catalog at rest with an AWS KMS key, accessed through a
50
50
  * service role that AWS Glue assumes on your behalf.
@@ -56,7 +56,7 @@ export declare class DataCatalogEncryptionAtRest {
56
56
  * @param key the KMS key to use. If omitted, an AWS-managed key is used and
57
57
  * the key is not exposed as a grantable resource.
58
58
  */
59
- static kmsWithServiceRole(role: iam.IRole, key?: kms.IKey): DataCatalogEncryptionAtRest;
59
+ static kmsWithServiceRole(role: iam.IRole, key?: kms.IKeyRef): DataCatalogEncryptionAtRest;
60
60
  /**
61
61
  * The encryption mode.
62
62
  */
package/lib/catalog.js CHANGED
@@ -74,7 +74,7 @@ var CatalogEncryptionMode;
74
74
  * @see https://docs.aws.amazon.com/glue/latest/webapi/API_EncryptionAtRest.html
75
75
  */
76
76
  class DataCatalogEncryptionAtRest {
77
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.DataCatalogEncryptionAtRest", version: "2.266.0-alpha.0" };
77
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.DataCatalogEncryptionAtRest", version: "2.268.0-alpha.0" };
78
78
  /**
79
79
  * Disable encryption at rest for the Data Catalog.
80
80
  */
@@ -130,7 +130,7 @@ exports.DataCatalogEncryptionAtRest = DataCatalogEncryptionAtRest;
130
130
  * construction, so a catalog either carries settings or it does not.
131
131
  */
132
132
  class CatalogBase extends core_1.Resource {
133
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.CatalogBase", version: "2.266.0-alpha.0" };
133
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.CatalogBase", version: "2.268.0-alpha.0" };
134
134
  _encryptionKey;
135
135
  _connectionPasswordKey;
136
136
  get encryptionKey() {
@@ -224,7 +224,7 @@ let Catalog = (() => {
224
224
  Catalog = _classThis = _classDescriptor.value;
225
225
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
226
226
  }
227
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Catalog", version: "2.266.0-alpha.0" };
227
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Catalog", version: "2.268.0-alpha.0" };
228
228
  /** Uniquely identifies this class. */
229
229
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.Catalog';
230
230
  /**
@@ -421,4 +421,4 @@ let ImportedCatalog = (() => {
421
421
  };
422
422
  return ImportedCatalog = _classThis;
423
423
  })();
424
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsbURBQW9GO0FBR3BGLGlEQUFnRDtBQUVoRCwyQ0FBc0Y7QUFDdEYsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFHMUU7Ozs7R0FJRztBQUNILElBQVkscUJBZ0JYO0FBaEJELFdBQVkscUJBQXFCO0lBQy9COztPQUVHO0lBQ0gsOENBQXFCLENBQUE7SUFFckI7O09BRUc7SUFDSCw0Q0FBbUIsQ0FBQTtJQUVuQjs7O09BR0c7SUFDSCxnRkFBdUQsQ0FBQTtBQUN6RCxDQUFDLEVBaEJXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBZ0JoQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSwyQkFBMkI7O0lBQ3RDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVE7UUFDcEIsT0FBTyxJQUFJLDJCQUEyQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3hFO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQWM7UUFDOUIsT0FBTyxJQUFJLDJCQUEyQixDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztLQUM1RTtJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBZSxFQUFFLEdBQWM7UUFDOUQsT0FBTyxJQUFJLDJCQUEyQixDQUFDLHFCQUFxQixDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNwRztJQUVEOztPQUVHO0lBQ2EsSUFBSSxDQUF3QjtJQUU1Qzs7T0FFRztJQUNhLE1BQU0sQ0FBZTtJQUVyQzs7T0FFRztJQUNhLFdBQVcsQ0FBYTtJQUV4QyxZQUFvQixJQUEyQixFQUFFLE1BQW9CLEVBQUUsV0FB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QVcseUNBQXlDLENBQUM7UUFDakYsU0FBUyxDQUFTO1FBQ2xCLFVBQVUsQ0FBUztRQUVuQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFNBQWlCLEVBQUUsVUFBa0I7WUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqQixtQ0FBbUM7WUFDbkMsSUFBQSx3Q0FBb0IsRUFBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7U0FDOUI7O1lBWkcsdURBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhdGFsb2dSZWZlcmVuY2UsIElDYXRhbG9nUmVmIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0IHsgQ2ZuQ2F0YWxvZywgQ2ZuRGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3MgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgdHlwZSAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB0eXBlICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgS2V5R3JhbnRzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgdHlwZSB7IElSZXNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgQXJuRm9ybWF0LCBSZXNvdXJjZSwgU3RhY2ssIFRva2VuLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBUaGUgZW5jcnlwdGlvbi1hdC1yZXN0IG1vZGUgZm9yIGEgR2x1ZSBEYXRhIENhdGFsb2cuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3Qvd2ViYXBpL0FQSV9FbmNyeXB0aW9uQXRSZXN0Lmh0bWwjR2x1ZS1UeXBlLUVuY3J5cHRpb25BdFJlc3QtQ2F0YWxvZ0VuY3J5cHRpb25Nb2RlXG4gKi9cbmV4cG9ydCBlbnVtIENhdGFsb2dFbmNyeXB0aW9uTW9kZSB7XG4gIC8qKlxuICAgKiBFbmNyeXB0aW9uIGF0IHJlc3QgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBESVNBQkxFRCA9ICdESVNBQkxFRCcsXG5cbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gKFNTRSkgd2l0aCBhbiBBV1MgS01TIGtleS5cbiAgICovXG4gIFNTRV9LTVMgPSAnU1NFLUtNUycsXG5cbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gKFNTRSkgd2l0aCBhbiBBV1MgS01TIGtleSwgdXNpbmcgYSBzZXJ2aWNlIHJvbGUgdGhhdFxuICAgKiBBV1MgR2x1ZSBhc3N1bWVzIHRvIGFjY2VzcyB0aGUga2V5IG9uIHlvdXIgYmVoYWxmLlxuICAgKi9cbiAgU1NFX0tNU19XSVRIX1NFUlZJQ0VfUk9MRSA9ICdTU0UtS01TLVdJVEgtU0VSVklDRS1ST0xFJyxcbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uLWF0LXJlc3QgY29uZmlndXJhdGlvbiBmb3IgYSBHbHVlIERhdGEgQ2F0YWxvZy5cbiAqXG4gKiBUaGUgRGF0YSBDYXRhbG9nIGVuY3J5cHRpb24gYXQgcmVzdCBhbmQgdGhlIGNvbm5lY3Rpb24gcGFzc3dvcmQgZW5jcnlwdGlvblxuICogYXJlIGluZGVwZW5kZW50OiBlbmFibGluZyBvbmUgZG9lcyBub3QgcmVxdWlyZSB0aGUgb3RoZXIsIGFuZCBlYWNoIG1heSB1c2UgYVxuICogZGlmZmVyZW50IEtNUyBrZXkuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3Qvd2ViYXBpL0FQSV9FbmNyeXB0aW9uQXRSZXN0Lmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFDYXRhbG9nRW5jcnlwdGlvbkF0UmVzdCB7XG4gIC8qKlxuICAgKiBEaXNhYmxlIGVuY3J5cHRpb24gYXQgcmVzdCBmb3IgdGhlIERhdGEgQ2F0YWxvZy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZGlzYWJsZWQoKTogRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0IHtcbiAgICByZXR1cm4gbmV3IERhdGFDYXRhbG9nRW5jcnlwdGlvbkF0UmVzdChDYXRhbG9nRW5jcnlwdGlvbk1vZGUuRElTQUJMRUQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY3J5cHQgdGhlIERhdGEgQ2F0YWxvZyBhdCByZXN0IHdpdGggYW4gQVdTIEtNUyBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgdGhlIEtNUyBrZXkgdG8gdXNlLiBJZiBvbWl0dGVkLCBhbiBBV1MtbWFuYWdlZCBrZXkgaXMgdXNlZCBhbmRcbiAgICogdGhlIGtleSBpcyBub3QgZXhwb3NlZCBhcyBhIGdyYW50YWJsZSByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMga21zKGtleT86IGttcy5JS2V5KTogRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0IHtcbiAgICByZXR1cm4gbmV3IERhdGFDYXRhbG9nRW5jcnlwdGlvbkF0UmVzdChDYXRhbG9nRW5jcnlwdGlvbk1vZGUuU1NFX0tNUywga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNyeXB0IHRoZSBEYXRhIENhdGFsb2cgYXQgcmVzdCB3aXRoIGFuIEFXUyBLTVMga2V5LCBhY2Nlc3NlZCB0aHJvdWdoIGFcbiAgICogc2VydmljZSByb2xlIHRoYXQgQVdTIEdsdWUgYXNzdW1lcyBvbiB5b3VyIGJlaGFsZi5cbiAgICpcbiAgICogV2hlbiBhIGN1c3RvbWVyLW1hbmFnZWQgYGtleWAgaXMgcHJvdmlkZWQsIHRoZSBgcm9sZWAgaXMgYXV0b21hdGljYWxseVxuICAgKiBncmFudGVkIGBrbXM6RW5jcnlwdGAvYGttczpEZWNyeXB0YC9ga21zOkdlbmVyYXRlRGF0YUtleSpgIG9uIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gcm9sZSB0aGUgc2VydmljZSByb2xlIHRoYXQgQVdTIEdsdWUgYXNzdW1lcyB0byBhY2Nlc3MgdGhlIGtleS5cbiAgICogQHBhcmFtIGtleSB0aGUgS01TIGtleSB0byB1c2UuIElmIG9taXR0ZWQsIGFuIEFXUy1tYW5hZ2VkIGtleSBpcyB1c2VkIGFuZFxuICAgKiB0aGUga2V5IGlzIG5vdCBleHBvc2VkIGFzIGEgZ3JhbnRhYmxlIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBrbXNXaXRoU2VydmljZVJvbGUocm9sZTogaWFtLklSb2xlLCBrZXk/OiBrbXMuSUtleSk6IERhdGFDYXRhbG9nRW5jcnlwdGlvbkF0UmVzdCB7XG4gICAgcmV0dXJuIG5ldyBEYXRhQ2F0YWxvZ0VuY3J5cHRpb25BdFJlc3QoQ2F0YWxvZ0VuY3J5cHRpb25Nb2RlLlNTRV9LTVNfV0lUSF9TRVJWSUNFX1JPTEUsIGtleSwgcm9sZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGVuY3J5cHRpb24gbW9kZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb2RlOiBDYXRhbG9nRW5jcnlwdGlvbk1vZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvbiBhdCByZXN0LCBpZiBhbnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXlSZWY7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2aWNlIHJvbGUgdGhhdCBBV1MgR2x1ZSBhc3N1bWVzIHRvIGFjY2VzcyB0aGUgS01TIGtleSwgaWYgYW55LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VSb2xlPzogaWFtLklSb2xlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IobW9kZTogQ2F0YWxvZ0VuY3J5cHRpb25Nb2RlLCBrbXNLZXk/OiBrbXMuSUtleVJlZiwgc2VydmljZVJvbGU/OiBpYW0uSVJvbGUpIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMua21zS2V5ID0ga21zS2V5O1xuICAgIHRoaXMuc2VydmljZVJvbGUgPSBzZXJ2aWNlUm9sZTtcbiAgfVxufVxuXG4vKipcbiAqIENvbm5lY3Rpb24tcGFzc3dvcmQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBhIEdsdWUgRGF0YSBDYXRhbG9nLlxuICpcbiAqIFdoZW4gZW5hYmxlZCwgdGhlIERhdGEgQ2F0YWxvZyBlbmNyeXB0cyB0aGUgcGFzc3dvcmQgYXMgcGFydCBvZlxuICogYENyZWF0ZUNvbm5lY3Rpb25gIG9yIGBVcGRhdGVDb25uZWN0aW9uYCBhbmQgc3RvcmVzIGl0IGluIHRoZVxuICogYEVOQ1JZUFRFRF9QQVNTV09SRGAgZmllbGQgb2YgdGhlIGNvbm5lY3Rpb24gcHJvcGVydGllcy4gVGhpcyBpcyBpbmRlcGVuZGVudFxuICogZnJvbSBjYXRhbG9nIGVuY3J5cHRpb24gYXQgcmVzdCwgYW5kIG1heSB1c2UgYSBkaWZmZXJlbnQgS01TIGtleS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC93ZWJhcGkvQVBJX0Nvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRpb24uaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRpb24ge1xuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IGNvbm5lY3Rpb24gcGFzc3dvcmRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFuIEFXUy1tYW5hZ2VkIGtleSBpcyB1c2VkIGFuZCB0aGUga2V5IGlzIG5vdCBleHBvc2VkIGFzIGEgZ3JhbnRhYmxlIHJlc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXlSZWY7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcGFzc3dvcmRzIHJlbWFpbiBlbmNyeXB0ZWQgaW4gdGhlIHJlc3BvbnNlcyBvZiBgR2V0Q29ubmVjdGlvbmAgYW5kXG4gICAqIGBHZXRDb25uZWN0aW9uc2AuIFRoaXMgdGFrZXMgZWZmZWN0IGluZGVwZW5kZW50bHkgZnJvbSBjYXRhbG9nIGVuY3J5cHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJldHVybkNvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBhIEdsdWUgRGF0YSBDYXRhbG9nLlxuICpcbiAqIEVuY3J5cHRpb24gaXMgZml4ZWQgYXQgY29uc3RydWN0aW9uOiBhIGNhdGFsb2cgZWl0aGVyIGNhcnJpZXMgZW5jcnlwdGlvblxuICogc2V0dGluZ3Mgb3IgaXQgZG9lcyBub3QsIHdoaWNoIGtlZXBzIGl0cyBjb25maWd1cmF0aW9uIGVhc3kgdG8gcmVhc29uIGFib3V0XG4gKiBhbmQgYXZvaWRzIG9yZGVyLWRlcGVuZGVudCBtdXRhdGlvbiBhZnRlciB0aGUgY2F0YWxvZyBpcyBjcmVhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhdGFsb2dFbmNyeXB0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBFbmNyeXB0aW9uLWF0LXJlc3QgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNhdGFsb2cuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZW5jcnlwdGlvbiBhdCByZXN0IGlzIG5vdCBtYW5hZ2VkIGJ5IENESyAodGhlIGNhdGFsb2cgZGVmYXVsdCBhcHBsaWVzKVxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbkF0UmVzdD86IERhdGFDYXRhbG9nRW5jcnlwdGlvbkF0UmVzdDtcblxuICAvKipcbiAgICogQ29ubmVjdGlvbi1wYXNzd29yZCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjYXRhbG9nLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNvbm5lY3Rpb24tcGFzc3dvcmQgZW5jcnlwdGlvbiBpcyBub3QgbWFuYWdlZCBieSBDREtcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRpb24/OiBDb25uZWN0aW9uUGFzc3dvcmRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIEEgR2x1ZSBEYXRhIENhdGFsb2csIGVpdGhlciB0aGUgaW1wbGljaXQgYWNjb3VudC13aWRlIGNhdGFsb2cgb3Igb25lIGNyZWF0ZWRcbiAqIGFzIGFuIGBBV1M6OkdsdWU6OkNhdGFsb2dgIHJlc291cmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDYXRhbG9nIGV4dGVuZHMgSVJlc291cmNlLCBJQ2F0YWxvZ1JlZiB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGNhdGFsb2cgKGZvciB0aGUgYWNjb3VudC13aWRlIGNhdGFsb2csIHRoZSBBV1MgYWNjb3VudCBpZCkuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNhdGFsb2dJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjYXRhbG9nLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjYXRhbG9nQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXkgdXNlZCBmb3IgdGhlIGNhdGFsb2cncyBlbmNyeXB0aW9uIGF0IHJlc3QsIGlmXG4gICAqIG9uZSB3YXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogVW5kZWZpbmVkIHdoZW4gZW5jcnlwdGlvbiBpcyBkaXNhYmxlZCBvciBhbiBBV1MtbWFuYWdlZCBrZXkgaXMgdXNlZC4gR3JhbnRcbiAgICogYWNjZXNzIHRvIGl0IHZpYSBgS2V5R3JhbnRzYCwgZS5nLlxuICAgKiBgaWYgKGNhdGFsb2cuZW5jcnlwdGlvbktleSkgeyBLZXlHcmFudHMuZnJvbUtleShjYXRhbG9nLmVuY3J5cHRpb25LZXkpLmVuY3J5cHQoZ3JhbnRlZSk7IH1gLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5JS2V5UmVmO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCBjb25uZWN0aW9uIHBhc3N3b3JkcywgaWYgb25lXG4gICAqIHdhcyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBVbmRlZmluZWQgd2hlbiBwYXNzd29yZCBlbmNyeXB0aW9uIHVzZXMgYW4gQVdTLW1hbmFnZWQga2V5IG9yIGlzIG5vdFxuICAgKiBjb25maWd1cmVkLiBHcmFudCBhY2Nlc3MgdG8gaXQgdmlhIGBLZXlHcmFudHNgLCBlLmcuXG4gICAqIGBpZiAoY2F0YWxvZy5jb25uZWN0aW9uUGFzc3dvcmRLZXkpIHsgS2V5R3JhbnRzLmZyb21LZXkoY2F0YWxvZy5jb25uZWN0aW9uUGFzc3dvcmRLZXkpLmVuY3J5cHQoZ3JhbnRlZSk7IH1gLlxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvblBhc3N3b3JkS2V5Pzoga21zLklLZXlSZWY7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIGBJQ2F0YWxvZ2AgaW1wbGVtZW50YXRpb25zLiBNYXRlcmlhbGl6ZXMgdGhlIHNpbmdsZVxuICogYENmbkRhdGFDYXRhbG9nRW5jcnlwdGlvblNldHRpbmdzYCByZXNvdXJjZSAodGFyZ2V0aW5nIGl0cyBvd24gYGNhdGFsb2dJZGApXG4gKiBmcm9tIHRoZSBlbmNyeXB0aW9uIG9wdGlvbnMgc3VwcGxpZWQgYXQgY29uc3RydWN0aW9uLiBFbmNyeXB0aW9uIGlzIGZpeGVkIGF0XG4gKiBjb25zdHJ1Y3Rpb24sIHNvIGEgY2F0YWxvZyBlaXRoZXIgY2FycmllcyBzZXR0aW5ncyBvciBpdCBkb2VzIG5vdC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhdGFsb2dCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJQ2F0YWxvZyB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjYXRhbG9nSWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNhdGFsb2dBcm46IHN0cmluZztcblxuICBwcml2YXRlIF9lbmNyeXB0aW9uS2V5Pzoga21zLklLZXlSZWY7XG4gIHByaXZhdGUgX2Nvbm5lY3Rpb25QYXNzd29yZEtleT86IGttcy5JS2V5UmVmO1xuXG4gIHB1YmxpYyBnZXQgZW5jcnlwdGlvbktleSgpOiBrbXMuSUtleVJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VuY3J5cHRpb25LZXk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb25QYXNzd29yZEtleSgpOiBrbXMuSUtleVJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25QYXNzd29yZEtleTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2F0YWxvZ1JlZigpOiBDYXRhbG9nUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb3VyY2VBcm46IHRoaXMuY2F0YWxvZ0FybixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgdGhlIGNhdGFsb2cncyBlbmNyeXB0aW9uIHNldHRpbmdzIGZyb20gdGhlIG9wdGlvbnMgZml4ZWQgYXRcbiAgICogY29uc3RydWN0aW9uLiBTdWJjbGFzc2VzIGNhbGwgdGhpcyBvbmNlLCBhZnRlciBgY2F0YWxvZ0lkYC9gY2F0YWxvZ0FybmAgYXJlXG4gICAqIGFzc2lnbmVkLiBXaGVuIG5laXRoZXIgYmxvY2sgaXMgY29uZmlndXJlZCwgbm8gcmVzb3VyY2UgaXMgZW1pdHRlZCwgYXZvaWRpbmdcbiAgICogYW4gZW1wdHkgc2V0dGluZ3MgcmVzb3VyY2UgdGhhdCB3b3VsZCByZXNldCB0aGUgY2F0YWxvZyBvbiBkZXBsb3kuXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uZmlndXJlRW5jcnlwdGlvbihvcHRpb25zOiBDYXRhbG9nRW5jcnlwdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBhdFJlc3QgPSBvcHRpb25zLmVuY3J5cHRpb25BdFJlc3Q7XG4gICAgY29uc3QgcGFzc3dvcmQgPSBvcHRpb25zLmNvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRpb247XG5cbiAgICBpZiAoIWF0UmVzdCAmJiAhcGFzc3dvcmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9lbmNyeXB0aW9uS2V5ID0gYXRSZXN0Py5rbXNLZXk7XG4gICAgdGhpcy5fY29ubmVjdGlvblBhc3N3b3JkS2V5ID0gcGFzc3dvcmQ/Lmttc0tleTtcblxuICAgIC8vIEF1dG8tZ3JhbnQgdGhlIHNlcnZpY2Ugcm9sZSBhY2Nlc3MgdG8gdGhlIGN1c3RvbWVyLW1hbmFnZWQga2V5IGl0IG5lZWRzXG4gICAgLy8gdG8gZW5jcnlwdCBhbmQgZGVjcnlwdCBjYXRhbG9nIGRhdGEuIE5vdGhpbmcgdG8gZ3JhbnQgZm9yIGFuIEFXUy1tYW5hZ2VkXG4gICAgLy8ga2V5ICh3ZSBkb24ndCBvd24gaXRzIGtleSBwb2xpY3kpLlxuICAgIGlmIChhdFJlc3Q/LnNlcnZpY2VSb2xlICYmIGF0UmVzdC5rbXNLZXkpIHtcbiAgICAgIEtleUdyYW50cy5mcm9tS2V5KGF0UmVzdC5rbXNLZXkpLmVuY3J5cHREZWNyeXB0KGF0UmVzdC5zZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLy8gVHdvIGNhdGFsb2cgaW5zdGFuY2VzIHRoYXQgdGFyZ2V0IHRoZSBzYW1lIGNhdGFsb2cgaWQgd291bGQgZWFjaCBlbWl0IGFcbiAgICAvLyBzZXR0aW5ncyByZXNvdXJjZSBhbmQgcmFjZSB0byBvdmVyd3JpdGUgb25lIGFub3RoZXIgdmlhXG4gICAgLy8gYFB1dERhdGFDYXRhbG9nRW5jcnlwdGlvblNldHRpbmdzYC4gV2l0aGluIG9uZSBzdGFjayB0aGlzIGlzIHN1cmZhY2VkIGJ5XG4gICAgLy8gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgdmFsaWRhdGlvbiAoRTMwMTk6IGR1cGxpY2F0ZSBwcmltYXJ5IGlkZW50aWZpZXJzKSxcbiAgICAvLyBzbyB3ZSBkbyBub3QgZHVwbGljYXRlIHRoYXQgY2hlY2sgaGVyZS5cbiAgICBuZXcgQ2ZuRGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3ModGhpcywgJ0VuY3J5cHRpb25TZXR0aW5ncycsIHtcbiAgICAgIGNhdGFsb2dJZDogdGhpcy5jYXRhbG9nSWQsXG4gICAgICBkYXRhQ2F0YWxvZ0VuY3J5cHRpb25TZXR0aW5nczoge1xuICAgICAgICBlbmNyeXB0aW9uQXRSZXN0OiBhdFJlc3RcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGNhdGFsb2dFbmNyeXB0aW9uTW9kZTogYXRSZXN0Lm1vZGUsXG4gICAgICAgICAgICBzc2VBd3NLbXNLZXlJZDogYXRSZXN0Lmttc0tleT8ua2V5UmVmLmtleUFybixcbiAgICAgICAgICAgIGNhdGFsb2dFbmNyeXB0aW9uU2VydmljZVJvbGU6IGF0UmVzdC5zZXJ2aWNlUm9sZT8ucm9sZUFybixcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRpb246IHBhc3N3b3JkXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBrbXNLZXlJZDogcGFzc3dvcmQua21zS2V5Py5rZXlSZWYua2V5QXJuLFxuICAgICAgICAgICAgcmV0dXJuQ29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGVkOiBwYXNzd29yZC5yZXR1cm5Db25uZWN0aW9uUGFzc3dvcmRFbmNyeXB0ZWQgPz8gdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGEgYENhdGFsb2dgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhdGFsb2dQcm9wcyBleHRlbmRzIENhdGFsb2dFbmNyeXB0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY2F0YWxvZy5cbiAgICovXG4gIHJlYWRvbmx5IGNhdGFsb2dOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGNhdGFsb2cuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzdGFjay1zY29wZWQgc2luZ2xldG9uIGlkIGZvciB0aGUgaW1wbGljaXQgYWNjb3VudC13aWRlIGNhdGFsb2cuXG4gKi9cbmNvbnN0IEFDQ09VTlRfQ0FUQUxPR19VSUQgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuQWNjb3VudENhdGFsb2cnO1xuXG4vKipcbiAqIEEgR2x1ZSBEYXRhIENhdGFsb2cuXG4gKlxuICogVXNlIGBDYXRhbG9nLmZvckFjY291bnQoc2NvcGUpYCB0byBvYnRhaW4gdGhlIGltcGxpY2l0IGFjY291bnQtd2lkZSBjYXRhbG9nLFxuICogYENhdGFsb2cuZW5jcnlwdEFjY291bnQoc2NvcGUsIG9wdGlvbnMpYCB0byBjb25maWd1cmUgaXRzIERhdGEgQ2F0YWxvZ1xuICogZW5jcnlwdGlvbiwgb3IgYG5ldyBDYXRhbG9nKC4uLilgIHRvIGNyZWF0ZSBhbiBgQVdTOjpHbHVlOjpDYXRhbG9nYCByZXNvdXJjZS5cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIENhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuQ2F0YWxvZyc7XG5cbiAgLyoqXG4gICAqIE9idGFpbiB0aGUgaW1wbGljaXQsIGFjY291bnQtd2lkZSBEYXRhIENhdGFsb2cuXG4gICAqXG4gICAqIFRoZSBhY2NvdW50IGNhdGFsb2cgaXMgbm90IGEgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2U7IGl0IGFsd2F5cyBleGlzdHMuIFRoaXNcbiAgICogcmV0dXJucyBhIHN0YWNrLXNjb3BlZCBzaW5nbGV0b24sIHNvIHJlcGVhdGVkIGNhbGxzIHdpdGhpbiB0aGUgc2FtZSBzdGFja1xuICAgKiByZXR1cm4gdGhlIHNhbWUgaW5zdGFuY2UuXG4gICAqXG4gICAqIFRoaXMgcmV0dXJucyB0aGUgYWNjb3VudCBjYXRhbG9nIHdpdGhvdXQgbWFuYWdpbmcgaXRzIGVuY3J5cHRpb24uIFRvXG4gICAqIGNvbmZpZ3VyZSBEYXRhIENhdGFsb2cgZW5jcnlwdGlvbiBmb3IgdGhlIGFjY291bnQsIHVzZVxuICAgKiBgQ2F0YWxvZy5lbmNyeXB0QWNjb3VudChzY29wZSwgb3B0aW9ucylgIGluc3RlYWQgLSBpdCBtdXN0IGJlIGNhbGxlZCBiZWZvcmVcbiAgICogdGhlIGFjY291bnQgY2F0YWxvZyBpcyBmaXJzdCB1c2VkIGluIHRoZSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZm9yQWNjb3VudChzY29wZTogQ29uc3RydWN0KTogSUNhdGFsb2cge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc3RhY2subm9kZS50cnlGaW5kQ2hpbGQoQUNDT1VOVF9DQVRBTE9HX1VJRCk7XG4gICAgcmV0dXJuIChleGlzdGluZyBhcyBBY2NvdW50Q2F0YWxvZykgPz8gbmV3IEFjY291bnRDYXRhbG9nKHN0YWNrLCBBQ0NPVU5UX0NBVEFMT0dfVUlELCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIERhdGEgQ2F0YWxvZyBlbmNyeXB0aW9uIGZvciB0aGUgaW1wbGljaXQsIGFjY291bnQtd2lkZSBjYXRhbG9nIGFuZFxuICAgKiByZXR1cm4gaXQuXG4gICAqXG4gICAqIFRoZSBhY2NvdW50IGNhdGFsb2cncyBlbmNyeXB0aW9uIGlzIGFuIGFjY291bnQvcmVnaW9uLXdpZGUgc2V0dGluZywgbWFuYWdlZFxuICAgKiB0aHJvdWdoIHRoZSBzaW5nbGV0b24gYFB1dERhdGFDYXRhbG9nRW5jcnlwdGlvblNldHRpbmdzYCBBUEkuIEJlY2F1c2VcbiAgICogZW5jcnlwdGlvbiBpcyBmaXhlZCBhdCBjb25zdHJ1Y3Rpb24sIGl0IG11c3QgYmUgY29uZmlndXJlZCBiZWZvcmUgdGhlXG4gICAqIGFjY291bnQgY2F0YWxvZyBpcyBmaXJzdCB1c2VkIGluIHRoZSBzdGFjazogY2FsbGluZyB0aGlzIGFmdGVyIHRoZSBhY2NvdW50XG4gICAqIGNhdGFsb2cgaGFzIGFscmVhZHkgYmVlbiBtYXRlcmlhbGl6ZWQgKGZvciBleGFtcGxlIGJ5IGBDYXRhbG9nLmZvckFjY291bnRgLFxuICAgKiBvciBieSBhIGBEYXRhYmFzZWAgdGhhdCB1c2VzIHRoZSBhY2NvdW50IGNhdGFsb2cpIHRocm93cy5cbiAgICpcbiAgICogQ29uZmlndXJlIGl0IGluIGV4YWN0bHkgb25lIHN0YWNrLiBDb25maWd1cmluZyBpdCBmcm9tIG11bHRpcGxlIHN0YWNrcyBpbiB0aGVcbiAgICogc2FtZSBhY2NvdW50IGFuZCByZWdpb24gbWFrZXMgdGhvc2Ugc3RhY2tzIG92ZXJ3cml0ZSBvbmUgYW5vdGhlciBhdCBkZXBsb3lcbiAgICogdGltZSwgYW5kIHRoZSByZXN1bHQgaXMgb3JkZXItZGVwZW5kZW50LiBVbmxpa2UgZHVwbGljYXRlIHNldHRpbmdzIHdpdGhpbiBhXG4gICAqIHNpbmdsZSBzdGFjayAod2hpY2ggQ2xvdWRGb3JtYXRpb24gcmVqZWN0cyksIHRoaXMgY3Jvc3Mtc3RhY2sgY29uZmxpY3QgaXMgbm90XG4gICAqIGNhdWdodCBhdCBzeW50aGVzaXMgdGltZSwgYmVjYXVzZSBlYWNoIHN0YWNrIHN5bnRoZXNpemVzIHRvIGl0cyBvd24gdGVtcGxhdGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGVuY3J5cHRBY2NvdW50KHNjb3BlOiBDb25zdHJ1Y3QsIG9wdGlvbnM6IENhdGFsb2dFbmNyeXB0aW9uT3B0aW9ucyk6IElDYXRhbG9nIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgICBpZiAoc3RhY2subm9kZS50cnlGaW5kQ2hpbGQoQUNDT1VOVF9DQVRBTE9HX1VJRCkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBBY2NvdW50Q2F0YWxvZ0FscmVhZHlJblVzZWAsXG4gICAgICAgICd0aGUgYWNjb3VudCBjYXRhbG9nIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiB0aGlzIHN0YWNrOyBjYWxsIENhdGFsb2cuZW5jcnlwdEFjY291bnQoKSBiZWZvcmUgQ2F0YWxvZy5mb3JBY2NvdW50KCkgb3IgYW55IERhdGFiYXNlIHRoYXQgdXNlcyB0aGUgYWNjb3VudCBjYXRhbG9nJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEFjY291bnRDYXRhbG9nKHN0YWNrLCBBQ0NPVU5UX0NBVEFMT0dfVUlELCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgY2F0YWxvZyBieSBpdHMgQVJOLlxuICAgKlxuICAgKiBUaGUgQVJOIG11c3QgYmUgYSBHbHVlIGNhdGFsb2cgQVJOLCBlaXRoZXIgdGhlIGFjY291bnQtd2lkZSBjYXRhbG9nXG4gICAqIChgYXJuOmF3czpnbHVlOjxyZWdpb24+OjxhY2NvdW50PjpjYXRhbG9nYCwgd2hvc2UgaWQgaXMgdGhlIGFjY291bnQpIG9yIGFcbiAgICogbmFtZWQgY2F0YWxvZyAoYGFybjphd3M6Z2x1ZTo8cmVnaW9uPjo8YWNjb3VudD46Y2F0YWxvZy88bmFtZT5gLCB3aG9zZSBpZCBpc1xuICAgKiB0aGUgbmFtZSkuXG4gICAqXG4gICAqIFRoZSBpbXBvcnRlZCBjYXRhbG9nIGlzIGEgcHVyZSBpZGVudGl0eSBoYW5kbGUgYW5kIGRvZXMgbm90IG1hbmFnZSB0aGVcbiAgICogY2F0YWxvZydzIGVuY3J5cHRpb24uIFRvIG1hbmFnZSBhbiBleGlzdGluZyBjYXRhbG9nJ3MgRGF0YSBDYXRhbG9nXG4gICAqIGVuY3J5cHRpb24sIGFkZCBhIGBDZm5EYXRhQ2F0YWxvZ0VuY3J5cHRpb25TZXR0aW5nc2AgcmVzb3VyY2UgdGFyZ2V0aW5nIGl0c1xuICAgKiBpZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNhdGFsb2dBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY2F0YWxvZ0Fybjogc3RyaW5nKTogSUNhdGFsb2cge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIGNvbnN0IGFybiA9IHN0YWNrLnNwbGl0QXJuKGNhdGFsb2dBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKTtcblxuICAgIC8vIE9ubHkgdmFsaWRhdGUgdGhlIHNoYXBlIG9mIGNvbmNyZXRlIEFSTnM7IGEgdG9rZW5pemVkIEFSTiBjYW4ndCBiZVxuICAgIC8vIGluc3BlY3RlZCBhdCBzeW50aCB0aW1lLCBzbyB3ZSB0cnVzdCBpdC5cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChjYXRhbG9nQXJuKSAmJiAoYXJuLnNlcnZpY2UgIT09ICdnbHVlJyB8fCBhcm4ucmVzb3VyY2UgIT09ICdjYXRhbG9nJykpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBJbnZhbGlkQ2F0YWxvZ0FybmAsXG4gICAgICAgIGBleHBlY3RlZCBhIEdsdWUgY2F0YWxvZyBBUk4gKGFybjo8cGFydGl0aW9uPjpnbHVlOjxyZWdpb24+OjxhY2NvdW50PjpjYXRhbG9nWy88bmFtZT5dKSwgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2F0YWxvZ0Fybil9YCxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFRoZSBhY2NvdW50LXdpZGUgY2F0YWxvZydzIEFSTiBoYXMgbm8gcmVzb3VyY2UgbmFtZTsgaXRzIGlkIGlzIHRoZVxuICAgIC8vIGFjY291bnQgZnJvbSB0aGUgQVJOIGl0c2VsZiAoZmFsbGluZyBiYWNrIHRvIHRoZSBzdGFjayBhY2NvdW50IGZvciBhXG4gICAgLy8gdG9rZW5pemVkIEFSTiB3aXRoIG5vIHBhcnNlYWJsZSBhY2NvdW50KS5cbiAgICBjb25zdCBjYXRhbG9nSWQgPSBhcm4ucmVzb3VyY2VOYW1lID8/IGFybi5hY2NvdW50ID8/IHN0YWNrLmFjY291bnQ7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZENhdGFsb2coc2NvcGUsIGlkLCBjYXRhbG9nSWQsIGNhdGFsb2dBcm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjYXRhbG9nIGJ5IGl0cyBpZC5cbiAgICpcbiAgICogVGhlIGltcG9ydGVkIGNhdGFsb2cgaXMgYSBwdXJlIGlkZW50aXR5IGhhbmRsZSBhbmQgZG9lcyBub3QgbWFuYWdlIHRoZVxuICAgKiBjYXRhbG9nJ3MgZW5jcnlwdGlvbi4gVG8gbWFuYWdlIGFuIGV4aXN0aW5nIGNhdGFsb2cncyBEYXRhIENhdGFsb2dcbiAgICogZW5jcnlwdGlvbiwgYWRkIGEgYENmbkRhdGFDYXRhbG9nRW5jcnlwdGlvblNldHRpbmdzYCByZXNvdXJjZSB0YXJnZXRpbmcgaXRzXG4gICAqIGlkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ2F0YWxvZ0lkKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNhdGFsb2dJZDogc3RyaW5nKTogSUNhdGFsb2cge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIGNvbnN0IGNhdGFsb2dBcm4gPSBzdGFjay5mb3JtYXRBcm4oeyBzZXJ2aWNlOiAnZ2x1ZScsIHJlc291cmNlOiAnY2F0YWxvZycsIHJlc291cmNlTmFtZTogY2F0YWxvZ0lkIH0pO1xuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRDYXRhbG9nKHNjb3BlLCBpZCwgY2F0YWxvZ0lkLCBjYXRhbG9nQXJuKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBjYXRhbG9nSWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNhdGFsb2dBcm46IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBDZm5DYXRhbG9nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDYXRhbG9nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5DYXRhbG9nKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHByb3BzLmNhdGFsb2dOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jYXRhbG9nSWQgPSB0aGlzLnJlc291cmNlLmF0dHJDYXRhbG9nSWQ7XG4gICAgdGhpcy5jYXRhbG9nQXJuID0gdGhpcy5yZXNvdXJjZS5hdHRyUmVzb3VyY2VBcm47XG5cbiAgICB0aGlzLmNvbmZpZ3VyZUVuY3J5cHRpb24ocHJvcHMpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGltcGxpY2l0LCBhY2NvdW50LXdpZGUgRGF0YSBDYXRhbG9nLiBOb3QgYSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZTsgb25seVxuICogdGhlIGVuY3J5cHRpb24gc2V0dGluZ3MgaXQgY2FycmllcyBhcmUgc3ludGhlc2l6ZWQuXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmNsYXNzIEFjY291bnRDYXRhbG9nIGV4dGVuZHMgQ2F0YWxvZ0Jhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1nbHVlLWFscGhhLkFjY291bnRDYXRhbG9nJztcbiAgcHVibGljIHJlYWRvbmx5IGNhdGFsb2dJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0Fybjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGVuY3J5cHRpb246IENhdGFsb2dFbmNyeXB0aW9uT3B0aW9ucykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBlbmNyeXB0aW9uKTtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIHRoaXMuY2F0YWxvZ0lkID0gc3RhY2suYWNjb3VudDtcbiAgICAvLyBUaGUgYWNjb3VudCBjYXRhbG9nJ3MgaWQgaXMgaW1wbGljaXRseSB0aGUgYWNjb3VudCBpZCwgc28gdGhlIEFSTiBoYXMgbm8gcmVzb3VyY2UgbmFtZS5cbiAgICB0aGlzLmNhdGFsb2dBcm4gPSBzdGFjay5mb3JtYXRBcm4oeyBzZXJ2aWNlOiAnZ2x1ZScsIHJlc291cmNlOiAnY2F0YWxvZycgfSk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZUVuY3J5cHRpb24oZW5jcnlwdGlvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBpbXBvcnRlZCBjYXRhbG9nLiBBIHB1cmUgaWRlbnRpdHkgaGFuZGxlOiBpdCBlbWl0cyBubyByZXNvdXJjZXMgYW5kIGRvZXNcbiAqIG5vdCBtYW5hZ2UgdGhlIGltcG9ydGVkIGNhdGFsb2cncyBlbmNyeXB0aW9uLlxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5jbGFzcyBJbXBvcnRlZENhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuSW1wb3J0ZWRDYXRhbG9nJztcbiAgcHVibGljIHJlYWRvbmx5IGNhdGFsb2dJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0Fybjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNhdGFsb2dJZDogc3RyaW5nLCBjYXRhbG9nQXJuOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgY2F0YWxvZ0lkKTtcbiAgICB0aGlzLmNhdGFsb2dJZCA9IGNhdGFsb2dJZDtcbiAgICB0aGlzLmNhdGFsb2dBcm4gPSBjYXRhbG9nQXJuO1xuICB9XG59XG4iXX0=
424
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsbURBQW9GO0FBR3BGLGlEQUFnRDtBQUVoRCwyQ0FBc0Y7QUFDdEYsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFHMUU7Ozs7R0FJRztBQUNILElBQVkscUJBZ0JYO0FBaEJELFdBQVkscUJBQXFCO0lBQy9COztPQUVHO0lBQ0gsOENBQXFCLENBQUE7SUFFckI7O09BRUc7SUFDSCw0Q0FBbUIsQ0FBQTtJQUVuQjs7O09BR0c7SUFDSCxnRkFBdUQsQ0FBQTtBQUN6RCxDQUFDLEVBaEJXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBZ0JoQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSwyQkFBMkI7O0lBQ3RDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVE7UUFDcEIsT0FBTyxJQUFJLDJCQUEyQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3hFO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQWlCO1FBQ2pDLE9BQU8sSUFBSSwyQkFBMkIsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDNUU7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQWUsRUFBRSxHQUFpQjtRQUNqRSxPQUFPLElBQUksMkJBQTJCLENBQUMscUJBQXFCLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3BHO0lBRUQ7O09BRUc7SUFDYSxJQUFJLENBQXdCO0lBRTVDOztPQUVHO0lBQ2EsTUFBTSxDQUFlO0lBRXJDOztPQUVHO0lBQ2EsV0FBVyxDQUFhO0lBRXhDLFlBQW9CLElBQTJCLEVBQUUsTUFBb0IsRUFBRSxX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R0FBVyx5Q0FBeUMsQ0FBQztRQUNqRixTQUFTLENBQVM7UUFDbEIsVUFBVSxDQUFTO1FBRW5DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsU0FBaUIsRUFBRSxVQUFrQjtZQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pCLG1DQUFtQztZQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztTQUM5Qjs7WUFaRyx1REFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2F0YWxvZ1JlZmVyZW5jZSwgSUNhdGFsb2dSZWYgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgeyBDZm5DYXRhbG9nLCBDZm5EYXRhQ2F0YWxvZ0VuY3J5cHRpb25TZXR0aW5ncyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1nbHVlJztcbmltcG9ydCB0eXBlICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBLZXlHcmFudHMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB0eXBlIHsgSVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBBcm5Gb3JtYXQsIFJlc291cmNlLCBTdGFjaywgVG9rZW4sIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFRoZSBlbmNyeXB0aW9uLWF0LXJlc3QgbW9kZSBmb3IgYSBHbHVlIERhdGEgQ2F0YWxvZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC93ZWJhcGkvQVBJX0VuY3J5cHRpb25BdFJlc3QuaHRtbCNHbHVlLVR5cGUtRW5jcnlwdGlvbkF0UmVzdC1DYXRhbG9nRW5jcnlwdGlvbk1vZGVcbiAqL1xuZXhwb3J0IGVudW0gQ2F0YWxvZ0VuY3J5cHRpb25Nb2RlIHtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gYXQgcmVzdCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIERJU0FCTEVEID0gJ0RJU0FCTEVEJyxcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiAoU1NFKSB3aXRoIGFuIEFXUyBLTVMga2V5LlxuICAgKi9cbiAgU1NFX0tNUyA9ICdTU0UtS01TJyxcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiAoU1NFKSB3aXRoIGFuIEFXUyBLTVMga2V5LCB1c2luZyBhIHNlcnZpY2Ugcm9sZSB0aGF0XG4gICAqIEFXUyBHbHVlIGFzc3VtZXMgdG8gYWNjZXNzIHRoZSBrZXkgb24geW91ciBiZWhhbGYuXG4gICAqL1xuICBTU0VfS01TX1dJVEhfU0VSVklDRV9ST0xFID0gJ1NTRS1LTVMtV0lUSC1TRVJWSUNFLVJPTEUnLFxufVxuXG4vKipcbiAqIEVuY3J5cHRpb24tYXQtcmVzdCBjb25maWd1cmF0aW9uIGZvciBhIEdsdWUgRGF0YSBDYXRhbG9nLlxuICpcbiAqIFRoZSBEYXRhIENhdGFsb2cgZW5jcnlwdGlvbiBhdCByZXN0IGFuZCB0aGUgY29ubmVjdGlvbiBwYXNzd29yZCBlbmNyeXB0aW9uXG4gKiBhcmUgaW5kZXBlbmRlbnQ6IGVuYWJsaW5nIG9uZSBkb2VzIG5vdCByZXF1aXJlIHRoZSBvdGhlciwgYW5kIGVhY2ggbWF5IHVzZSBhXG4gKiBkaWZmZXJlbnQgS01TIGtleS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC93ZWJhcGkvQVBJX0VuY3J5cHRpb25BdFJlc3QuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0IHtcbiAgLyoqXG4gICAqIERpc2FibGUgZW5jcnlwdGlvbiBhdCByZXN0IGZvciB0aGUgRGF0YSBDYXRhbG9nLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkaXNhYmxlZCgpOiBEYXRhQ2F0YWxvZ0VuY3J5cHRpb25BdFJlc3Qge1xuICAgIHJldHVybiBuZXcgRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0KENhdGFsb2dFbmNyeXB0aW9uTW9kZS5ESVNBQkxFRCk7XG4gIH1cblxuICAvKipcbiAgICogRW5jcnlwdCB0aGUgRGF0YSBDYXRhbG9nIGF0IHJlc3Qgd2l0aCBhbiBBV1MgS01TIGtleS5cbiAgICpcbiAgICogQHBhcmFtIGtleSB0aGUgS01TIGtleSB0byB1c2UuIElmIG9taXR0ZWQsIGFuIEFXUy1tYW5hZ2VkIGtleSBpcyB1c2VkIGFuZFxuICAgKiB0aGUga2V5IGlzIG5vdCBleHBvc2VkIGFzIGEgZ3JhbnRhYmxlIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBrbXMoa2V5Pzoga21zLklLZXlSZWYpOiBEYXRhQ2F0YWxvZ0VuY3J5cHRpb25BdFJlc3Qge1xuICAgIHJldHVybiBuZXcgRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0KENhdGFsb2dFbmNyeXB0aW9uTW9kZS5TU0VfS01TLCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY3J5cHQgdGhlIERhdGEgQ2F0YWxvZyBhdCByZXN0IHdpdGggYW4gQVdTIEtNUyBrZXksIGFjY2Vzc2VkIHRocm91Z2ggYVxuICAgKiBzZXJ2aWNlIHJvbGUgdGhhdCBBV1MgR2x1ZSBhc3N1bWVzIG9uIHlvdXIgYmVoYWxmLlxuICAgKlxuICAgKiBXaGVuIGEgY3VzdG9tZXItbWFuYWdlZCBga2V5YCBpcyBwcm92aWRlZCwgdGhlIGByb2xlYCBpcyBhdXRvbWF0aWNhbGx5XG4gICAqIGdyYW50ZWQgYGttczpFbmNyeXB0YC9ga21zOkRlY3J5cHRgL2BrbXM6R2VuZXJhdGVEYXRhS2V5KmAgb24gaXQuXG4gICAqXG4gICAqIEBwYXJhbSByb2xlIHRoZSBzZXJ2aWNlIHJvbGUgdGhhdCBBV1MgR2x1ZSBhc3N1bWVzIHRvIGFjY2VzcyB0aGUga2V5LlxuICAgKiBAcGFyYW0ga2V5IHRoZSBLTVMga2V5IHRvIHVzZS4gSWYgb21pdHRlZCwgYW4gQVdTLW1hbmFnZWQga2V5IGlzIHVzZWQgYW5kXG4gICAqIHRoZSBrZXkgaXMgbm90IGV4cG9zZWQgYXMgYSBncmFudGFibGUgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGttc1dpdGhTZXJ2aWNlUm9sZShyb2xlOiBpYW0uSVJvbGUsIGtleT86IGttcy5JS2V5UmVmKTogRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0IHtcbiAgICByZXR1cm4gbmV3IERhdGFDYXRhbG9nRW5jcnlwdGlvbkF0UmVzdChDYXRhbG9nRW5jcnlwdGlvbk1vZGUuU1NFX0tNU19XSVRIX1NFUlZJQ0VfUk9MRSwga2V5LCByb2xlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZW5jcnlwdGlvbiBtb2RlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1vZGU6IENhdGFsb2dFbmNyeXB0aW9uTW9kZTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uIGF0IHJlc3QsIGlmIGFueS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleVJlZjtcblxuICAvKipcbiAgICogVGhlIHNlcnZpY2Ugcm9sZSB0aGF0IEFXUyBHbHVlIGFzc3VtZXMgdG8gYWNjZXNzIHRoZSBLTVMga2V5LCBpZiBhbnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZVJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihtb2RlOiBDYXRhbG9nRW5jcnlwdGlvbk1vZGUsIGttc0tleT86IGttcy5JS2V5UmVmLCBzZXJ2aWNlUm9sZT86IGlhbS5JUm9sZSkge1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgdGhpcy5rbXNLZXkgPSBrbXNLZXk7XG4gICAgdGhpcy5zZXJ2aWNlUm9sZSA9IHNlcnZpY2VSb2xlO1xuICB9XG59XG5cbi8qKlxuICogQ29ubmVjdGlvbi1wYXNzd29yZCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGEgR2x1ZSBEYXRhIENhdGFsb2cuXG4gKlxuICogV2hlbiBlbmFibGVkLCB0aGUgRGF0YSBDYXRhbG9nIGVuY3J5cHRzIHRoZSBwYXNzd29yZCBhcyBwYXJ0IG9mXG4gKiBgQ3JlYXRlQ29ubmVjdGlvbmAgb3IgYFVwZGF0ZUNvbm5lY3Rpb25gIGFuZCBzdG9yZXMgaXQgaW4gdGhlXG4gKiBgRU5DUllQVEVEX1BBU1NXT1JEYCBmaWVsZCBvZiB0aGUgY29ubmVjdGlvbiBwcm9wZXJ0aWVzLiBUaGlzIGlzIGluZGVwZW5kZW50XG4gKiBmcm9tIGNhdGFsb2cgZW5jcnlwdGlvbiBhdCByZXN0LCBhbmQgbWF5IHVzZSBhIGRpZmZlcmVudCBLTVMga2V5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L3dlYmFwaS9BUElfQ29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbi5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgY29ubmVjdGlvbiBwYXNzd29yZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYW4gQVdTLW1hbmFnZWQga2V5IGlzIHVzZWQgYW5kIHRoZSBrZXkgaXMgbm90IGV4cG9zZWQgYXMgYSBncmFudGFibGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleVJlZjtcblxuICAvKipcbiAgICogV2hldGhlciBwYXNzd29yZHMgcmVtYWluIGVuY3J5cHRlZCBpbiB0aGUgcmVzcG9uc2VzIG9mIGBHZXRDb25uZWN0aW9uYCBhbmRcbiAgICogYEdldENvbm5lY3Rpb25zYC4gVGhpcyB0YWtlcyBlZmZlY3QgaW5kZXBlbmRlbnRseSBmcm9tIGNhdGFsb2cgZW5jcnlwdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV0dXJuQ29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGEgR2x1ZSBEYXRhIENhdGFsb2cuXG4gKlxuICogRW5jcnlwdGlvbiBpcyBmaXhlZCBhdCBjb25zdHJ1Y3Rpb246IGEgY2F0YWxvZyBlaXRoZXIgY2FycmllcyBlbmNyeXB0aW9uXG4gKiBzZXR0aW5ncyBvciBpdCBkb2VzIG5vdCwgd2hpY2gga2VlcHMgaXRzIGNvbmZpZ3VyYXRpb24gZWFzeSB0byByZWFzb24gYWJvdXRcbiAqIGFuZCBhdm9pZHMgb3JkZXItZGVwZW5kZW50IG11dGF0aW9uIGFmdGVyIHRoZSBjYXRhbG9nIGlzIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24tYXQtcmVzdCBjb25maWd1cmF0aW9uIGZvciB0aGUgY2F0YWxvZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbmNyeXB0aW9uIGF0IHJlc3QgaXMgbm90IG1hbmFnZWQgYnkgQ0RLICh0aGUgY2F0YWxvZyBkZWZhdWx0IGFwcGxpZXMpXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQXRSZXN0PzogRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0O1xuXG4gIC8qKlxuICAgKiBDb25uZWN0aW9uLXBhc3N3b3JkIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIGNhdGFsb2cuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY29ubmVjdGlvbi1wYXNzd29yZCBlbmNyeXB0aW9uIGlzIG5vdCBtYW5hZ2VkIGJ5IENES1xuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbj86IENvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogQSBHbHVlIERhdGEgQ2F0YWxvZywgZWl0aGVyIHRoZSBpbXBsaWNpdCBhY2NvdW50LXdpZGUgY2F0YWxvZyBvciBvbmUgY3JlYXRlZFxuICogYXMgYW4gYEFXUzo6R2x1ZTo6Q2F0YWxvZ2AgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNhdGFsb2cgZXh0ZW5kcyBJUmVzb3VyY2UsIElDYXRhbG9nUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY2F0YWxvZyAoZm9yIHRoZSBhY2NvdW50LXdpZGUgY2F0YWxvZywgdGhlIEFXUyBhY2NvdW50IGlkKS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2F0YWxvZ0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNhdGFsb2cuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNhdGFsb2dBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleSB1c2VkIGZvciB0aGUgY2F0YWxvZydzIGVuY3J5cHRpb24gYXQgcmVzdCwgaWZcbiAgICogb25lIHdhcyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBVbmRlZmluZWQgd2hlbiBlbmNyeXB0aW9uIGlzIGRpc2FibGVkIG9yIGFuIEFXUy1tYW5hZ2VkIGtleSBpcyB1c2VkLiBHcmFudFxuICAgKiBhY2Nlc3MgdG8gaXQgdmlhIGBLZXlHcmFudHNgLCBlLmcuXG4gICAqIGBpZiAoY2F0YWxvZy5lbmNyeXB0aW9uS2V5KSB7IEtleUdyYW50cy5mcm9tS2V5KGNhdGFsb2cuZW5jcnlwdGlvbktleSkuZW5jcnlwdChncmFudGVlKTsgfWAuXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLklLZXlSZWY7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IGNvbm5lY3Rpb24gcGFzc3dvcmRzLCBpZiBvbmVcbiAgICogd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIFVuZGVmaW5lZCB3aGVuIHBhc3N3b3JkIGVuY3J5cHRpb24gdXNlcyBhbiBBV1MtbWFuYWdlZCBrZXkgb3IgaXMgbm90XG4gICAqIGNvbmZpZ3VyZWQuIEdyYW50IGFjY2VzcyB0byBpdCB2aWEgYEtleUdyYW50c2AsIGUuZy5cbiAgICogYGlmIChjYXRhbG9nLmNvbm5lY3Rpb25QYXNzd29yZEtleSkgeyBLZXlHcmFudHMuZnJvbUtleShjYXRhbG9nLmNvbm5lY3Rpb25QYXNzd29yZEtleSkuZW5jcnlwdChncmFudGVlKTsgfWAuXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uUGFzc3dvcmRLZXk/OiBrbXMuSUtleVJlZjtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgYElDYXRhbG9nYCBpbXBsZW1lbnRhdGlvbnMuIE1hdGVyaWFsaXplcyB0aGUgc2luZ2xlXG4gKiBgQ2ZuRGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgIHJlc291cmNlICh0YXJnZXRpbmcgaXRzIG93biBgY2F0YWxvZ0lkYClcbiAqIGZyb20gdGhlIGVuY3J5cHRpb24gb3B0aW9ucyBzdXBwbGllZCBhdCBjb25zdHJ1Y3Rpb24uIEVuY3J5cHRpb24gaXMgZml4ZWQgYXRcbiAqIGNvbnN0cnVjdGlvbiwgc28gYSBjYXRhbG9nIGVpdGhlciBjYXJyaWVzIHNldHRpbmdzIG9yIGl0IGRvZXMgbm90LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2F0YWxvZ0Jhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElDYXRhbG9nIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNhdGFsb2dJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY2F0YWxvZ0Fybjogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2VuY3J5cHRpb25LZXk/OiBrbXMuSUtleVJlZjtcbiAgcHJpdmF0ZSBfY29ubmVjdGlvblBhc3N3b3JkS2V5Pzoga21zLklLZXlSZWY7XG5cbiAgcHVibGljIGdldCBlbmNyeXB0aW9uS2V5KCk6IGttcy5JS2V5UmVmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW5jcnlwdGlvbktleTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvblBhc3N3b3JkS2V5KCk6IGttcy5JS2V5UmVmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblBhc3N3b3JkS2V5O1xuICB9XG5cbiAgcHVibGljIGdldCBjYXRhbG9nUmVmKCk6IENhdGFsb2dSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvdXJjZUFybjogdGhpcy5jYXRhbG9nQXJuLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW1pdCB0aGUgY2F0YWxvZydzIGVuY3J5cHRpb24gc2V0dGluZ3MgZnJvbSB0aGUgb3B0aW9ucyBmaXhlZCBhdFxuICAgKiBjb25zdHJ1Y3Rpb24uIFN1YmNsYXNzZXMgY2FsbCB0aGlzIG9uY2UsIGFmdGVyIGBjYXRhbG9nSWRgL2BjYXRhbG9nQXJuYCBhcmVcbiAgICogYXNzaWduZWQuIFdoZW4gbmVpdGhlciBibG9jayBpcyBjb25maWd1cmVkLCBubyByZXNvdXJjZSBpcyBlbWl0dGVkLCBhdm9pZGluZ1xuICAgKiBhbiBlbXB0eSBzZXR0aW5ncyByZXNvdXJjZSB0aGF0IHdvdWxkIHJlc2V0IHRoZSBjYXRhbG9nIG9uIGRlcGxveS5cbiAgICovXG4gIHByb3RlY3RlZCBjb25maWd1cmVFbmNyeXB0aW9uKG9wdGlvbnM6IENhdGFsb2dFbmNyeXB0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IGF0UmVzdCA9IG9wdGlvbnMuZW5jcnlwdGlvbkF0UmVzdDtcbiAgICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMuY29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbjtcblxuICAgIGlmICghYXRSZXN0ICYmICFwYXNzd29yZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2VuY3J5cHRpb25LZXkgPSBhdFJlc3Q/Lmttc0tleTtcbiAgICB0aGlzLl9jb25uZWN0aW9uUGFzc3dvcmRLZXkgPSBwYXNzd29yZD8ua21zS2V5O1xuXG4gICAgLy8gQXV0by1ncmFudCB0aGUgc2VydmljZSByb2xlIGFjY2VzcyB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBrZXkgaXQgbmVlZHNcbiAgICAvLyB0byBlbmNyeXB0IGFuZCBkZWNyeXB0IGNhdGFsb2cgZGF0YS4gTm90aGluZyB0byBncmFudCBmb3IgYW4gQVdTLW1hbmFnZWRcbiAgICAvLyBrZXkgKHdlIGRvbid0IG93biBpdHMga2V5IHBvbGljeSkuXG4gICAgaWYgKGF0UmVzdD8uc2VydmljZVJvbGUgJiYgYXRSZXN0Lmttc0tleSkge1xuICAgICAgS2V5R3JhbnRzLmZyb21LZXkoYXRSZXN0Lmttc0tleSkuZW5jcnlwdERlY3J5cHQoYXRSZXN0LnNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvLyBUd28gY2F0YWxvZyBpbnN0YW5jZXMgdGhhdCB0YXJnZXQgdGhlIHNhbWUgY2F0YWxvZyBpZCB3b3VsZCBlYWNoIGVtaXQgYVxuICAgIC8vIHNldHRpbmdzIHJlc291cmNlIGFuZCByYWNlIHRvIG92ZXJ3cml0ZSBvbmUgYW5vdGhlciB2aWFcbiAgICAvLyBgUHV0RGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgLiBXaXRoaW4gb25lIHN0YWNrIHRoaXMgaXMgc3VyZmFjZWQgYnlcbiAgICAvLyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSB2YWxpZGF0aW9uIChFMzAxOTogZHVwbGljYXRlIHByaW1hcnkgaWRlbnRpZmllcnMpLFxuICAgIC8vIHNvIHdlIGRvIG5vdCBkdXBsaWNhdGUgdGhhdCBjaGVjayBoZXJlLlxuICAgIG5ldyBDZm5EYXRhQ2F0YWxvZ0VuY3J5cHRpb25TZXR0aW5ncyh0aGlzLCAnRW5jcnlwdGlvblNldHRpbmdzJywge1xuICAgICAgY2F0YWxvZ0lkOiB0aGlzLmNhdGFsb2dJZCxcbiAgICAgIGRhdGFDYXRhbG9nRW5jcnlwdGlvblNldHRpbmdzOiB7XG4gICAgICAgIGVuY3J5cHRpb25BdFJlc3Q6IGF0UmVzdFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgY2F0YWxvZ0VuY3J5cHRpb25Nb2RlOiBhdFJlc3QubW9kZSxcbiAgICAgICAgICAgIHNzZUF3c0ttc0tleUlkOiBhdFJlc3Qua21zS2V5Py5rZXlSZWYua2V5QXJuLFxuICAgICAgICAgICAgY2F0YWxvZ0VuY3J5cHRpb25TZXJ2aWNlUm9sZTogYXRSZXN0LnNlcnZpY2VSb2xlPy5yb2xlQXJuLFxuICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgY29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbjogcGFzc3dvcmRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGttc0tleUlkOiBwYXNzd29yZC5rbXNLZXk/LmtleVJlZi5rZXlBcm4sXG4gICAgICAgICAgICByZXR1cm5Db25uZWN0aW9uUGFzc3dvcmRFbmNyeXB0ZWQ6IHBhc3N3b3JkLnJldHVybkNvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRlZCA/PyB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYSBgQ2F0YWxvZ2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0YWxvZ1Byb3BzIGV4dGVuZHMgQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjYXRhbG9nLlxuICAgKi9cbiAgcmVhZG9ubHkgY2F0YWxvZ05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY2F0YWxvZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHN0YWNrLXNjb3BlZCBzaW5nbGV0b24gaWQgZm9yIHRoZSBpbXBsaWNpdCBhY2NvdW50LXdpZGUgY2F0YWxvZy5cbiAqL1xuY29uc3QgQUNDT1VOVF9DQVRBTE9HX1VJRCA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5BY2NvdW50Q2F0YWxvZyc7XG5cbi8qKlxuICogQSBHbHVlIERhdGEgQ2F0YWxvZy5cbiAqXG4gKiBVc2UgYENhdGFsb2cuZm9yQWNjb3VudChzY29wZSlgIHRvIG9idGFpbiB0aGUgaW1wbGljaXQgYWNjb3VudC13aWRlIGNhdGFsb2csXG4gKiBgQ2F0YWxvZy5lbmNyeXB0QWNjb3VudChzY29wZSwgb3B0aW9ucylgIHRvIGNvbmZpZ3VyZSBpdHMgRGF0YSBDYXRhbG9nXG4gKiBlbmNyeXB0aW9uLCBvciBgbmV3IENhdGFsb2coLi4uKWAgdG8gY3JlYXRlIGFuIGBBV1M6OkdsdWU6OkNhdGFsb2dgIHJlc291cmNlLlxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgQ2F0YWxvZyBleHRlbmRzIENhdGFsb2dCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5DYXRhbG9nJztcblxuICAvKipcbiAgICogT2J0YWluIHRoZSBpbXBsaWNpdCwgYWNjb3VudC13aWRlIERhdGEgQ2F0YWxvZy5cbiAgICpcbiAgICogVGhlIGFjY291bnQgY2F0YWxvZyBpcyBub3QgYSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZTsgaXQgYWx3YXlzIGV4aXN0cy4gVGhpc1xuICAgKiByZXR1cm5zIGEgc3RhY2stc2NvcGVkIHNpbmdsZXRvbiwgc28gcmVwZWF0ZWQgY2FsbHMgd2l0aGluIHRoZSBzYW1lIHN0YWNrXG4gICAqIHJldHVybiB0aGUgc2FtZSBpbnN0YW5jZS5cbiAgICpcbiAgICogVGhpcyByZXR1cm5zIHRoZSBhY2NvdW50IGNhdGFsb2cgd2l0aG91dCBtYW5hZ2luZyBpdHMgZW5jcnlwdGlvbi4gVG9cbiAgICogY29uZmlndXJlIERhdGEgQ2F0YWxvZyBlbmNyeXB0aW9uIGZvciB0aGUgYWNjb3VudCwgdXNlXG4gICAqIGBDYXRhbG9nLmVuY3J5cHRBY2NvdW50KHNjb3BlLCBvcHRpb25zKWAgaW5zdGVhZCAtIGl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZVxuICAgKiB0aGUgYWNjb3VudCBjYXRhbG9nIGlzIGZpcnN0IHVzZWQgaW4gdGhlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmb3JBY2NvdW50KHNjb3BlOiBDb25zdHJ1Y3QpOiBJQ2F0YWxvZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChBQ0NPVU5UX0NBVEFMT0dfVUlEKTtcbiAgICByZXR1cm4gKGV4aXN0aW5nIGFzIEFjY291bnRDYXRhbG9nKSA/PyBuZXcgQWNjb3VudENhdGFsb2coc3RhY2ssIEFDQ09VTlRfQ0FUQUxPR19VSUQsIHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgRGF0YSBDYXRhbG9nIGVuY3J5cHRpb24gZm9yIHRoZSBpbXBsaWNpdCwgYWNjb3VudC13aWRlIGNhdGFsb2cgYW5kXG4gICAqIHJldHVybiBpdC5cbiAgICpcbiAgICogVGhlIGFjY291bnQgY2F0YWxvZydzIGVuY3J5cHRpb24gaXMgYW4gYWNjb3VudC9yZWdpb24td2lkZSBzZXR0aW5nLCBtYW5hZ2VkXG4gICAqIHRocm91Z2ggdGhlIHNpbmdsZXRvbiBgUHV0RGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgIEFQSS4gQmVjYXVzZVxuICAgKiBlbmNyeXB0aW9uIGlzIGZpeGVkIGF0IGNvbnN0cnVjdGlvbiwgaXQgbXVzdCBiZSBjb25maWd1cmVkIGJlZm9yZSB0aGVcbiAgICogYWNjb3VudCBjYXRhbG9nIGlzIGZpcnN0IHVzZWQgaW4gdGhlIHN0YWNrOiBjYWxsaW5nIHRoaXMgYWZ0ZXIgdGhlIGFjY291bnRcbiAgICogY2F0YWxvZyBoYXMgYWxyZWFkeSBiZWVuIG1hdGVyaWFsaXplZCAoZm9yIGV4YW1wbGUgYnkgYENhdGFsb2cuZm9yQWNjb3VudGAsXG4gICAqIG9yIGJ5IGEgYERhdGFiYXNlYCB0aGF0IHVzZXMgdGhlIGFjY291bnQgY2F0YWxvZykgdGhyb3dzLlxuICAgKlxuICAgKiBDb25maWd1cmUgaXQgaW4gZXhhY3RseSBvbmUgc3RhY2suIENvbmZpZ3VyaW5nIGl0IGZyb20gbXVsdGlwbGUgc3RhY2tzIGluIHRoZVxuICAgKiBzYW1lIGFjY291bnQgYW5kIHJlZ2lvbiBtYWtlcyB0aG9zZSBzdGFja3Mgb3ZlcndyaXRlIG9uZSBhbm90aGVyIGF0IGRlcGxveVxuICAgKiB0aW1lLCBhbmQgdGhlIHJlc3VsdCBpcyBvcmRlci1kZXBlbmRlbnQuIFVubGlrZSBkdXBsaWNhdGUgc2V0dGluZ3Mgd2l0aGluIGFcbiAgICogc2luZ2xlIHN0YWNrICh3aGljaCBDbG91ZEZvcm1hdGlvbiByZWplY3RzKSwgdGhpcyBjcm9zcy1zdGFjayBjb25mbGljdCBpcyBub3RcbiAgICogY2F1Z2h0IGF0IHN5bnRoZXNpcyB0aW1lLCBiZWNhdXNlIGVhY2ggc3RhY2sgc3ludGhlc2l6ZXMgdG8gaXRzIG93biB0ZW1wbGF0ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZW5jcnlwdEFjY291bnQoc2NvcGU6IENvbnN0cnVjdCwgb3B0aW9uczogQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zKTogSUNhdGFsb2cge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIGlmIChzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChBQ0NPVU5UX0NBVEFMT0dfVUlEKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YEFjY291bnRDYXRhbG9nQWxyZWFkeUluVXNlYCxcbiAgICAgICAgJ3RoZSBhY2NvdW50IGNhdGFsb2cgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGluIHRoaXMgc3RhY2s7IGNhbGwgQ2F0YWxvZy5lbmNyeXB0QWNjb3VudCgpIGJlZm9yZSBDYXRhbG9nLmZvckFjY291bnQoKSBvciBhbnkgRGF0YWJhc2UgdGhhdCB1c2VzIHRoZSBhY2NvdW50IGNhdGFsb2cnLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQWNjb3VudENhdGFsb2coc3RhY2ssIEFDQ09VTlRfQ0FUQUxPR19VSUQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjYXRhbG9nIGJ5IGl0cyBBUk4uXG4gICAqXG4gICAqIFRoZSBBUk4gbXVzdCBiZSBhIEdsdWUgY2F0YWxvZyBBUk4sIGVpdGhlciB0aGUgYWNjb3VudC13aWRlIGNhdGFsb2dcbiAgICogKGBhcm46YXdzOmdsdWU6PHJlZ2lvbj46PGFjY291bnQ+OmNhdGFsb2dgLCB3aG9zZSBpZCBpcyB0aGUgYWNjb3VudCkgb3IgYVxuICAgKiBuYW1lZCBjYXRhbG9nIChgYXJuOmF3czpnbHVlOjxyZWdpb24+OjxhY2NvdW50PjpjYXRhbG9nLzxuYW1lPmAsIHdob3NlIGlkIGlzXG4gICAqIHRoZSBuYW1lKS5cbiAgICpcbiAgICogVGhlIGltcG9ydGVkIGNhdGFsb2cgaXMgYSBwdXJlIGlkZW50aXR5IGhhbmRsZSBhbmQgZG9lcyBub3QgbWFuYWdlIHRoZVxuICAgKiBjYXRhbG9nJ3MgZW5jcnlwdGlvbi4gVG8gbWFuYWdlIGFuIGV4aXN0aW5nIGNhdGFsb2cncyBEYXRhIENhdGFsb2dcbiAgICogZW5jcnlwdGlvbiwgYWRkIGEgYENmbkRhdGFDYXRhbG9nRW5jcnlwdGlvblNldHRpbmdzYCByZXNvdXJjZSB0YXJnZXRpbmcgaXRzXG4gICAqIGlkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ2F0YWxvZ0FybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjYXRhbG9nQXJuOiBzdHJpbmcpOiBJQ2F0YWxvZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgYXJuID0gc3RhY2suc3BsaXRBcm4oY2F0YWxvZ0FybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpO1xuXG4gICAgLy8gT25seSB2YWxpZGF0ZSB0aGUgc2hhcGUgb2YgY29uY3JldGUgQVJOczsgYSB0b2tlbml6ZWQgQVJOIGNhbid0IGJlXG4gICAgLy8gaW5zcGVjdGVkIGF0IHN5bnRoIHRpbWUsIHNvIHdlIHRydXN0IGl0LlxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKGNhdGFsb2dBcm4pICYmIChhcm4uc2VydmljZSAhPT0gJ2dsdWUnIHx8IGFybi5yZXNvdXJjZSAhPT0gJ2NhdGFsb2cnKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YEludmFsaWRDYXRhbG9nQXJuYCxcbiAgICAgICAgYGV4cGVjdGVkIGEgR2x1ZSBjYXRhbG9nIEFSTiAoYXJuOjxwYXJ0aXRpb24+OmdsdWU6PHJlZ2lvbj46PGFjY291bnQ+OmNhdGFsb2dbLzxuYW1lPl0pLCBnb3QgJHtKU09OLnN0cmluZ2lmeShjYXRhbG9nQXJuKX1gLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGFjY291bnQtd2lkZSBjYXRhbG9nJ3MgQVJOIGhhcyBubyByZXNvdXJjZSBuYW1lOyBpdHMgaWQgaXMgdGhlXG4gICAgLy8gYWNjb3VudCBmcm9tIHRoZSBBUk4gaXRzZWxmIChmYWxsaW5nIGJhY2sgdG8gdGhlIHN0YWNrIGFjY291bnQgZm9yIGFcbiAgICAvLyB0b2tlbml6ZWQgQVJOIHdpdGggbm8gcGFyc2VhYmxlIGFjY291bnQpLlxuICAgIGNvbnN0IGNhdGFsb2dJZCA9IGFybi5yZXNvdXJjZU5hbWUgPz8gYXJuLmFjY291bnQgPz8gc3RhY2suYWNjb3VudDtcbiAgICByZXR1cm4gbmV3IEltcG9ydGVkQ2F0YWxvZyhzY29wZSwgaWQsIGNhdGFsb2dJZCwgY2F0YWxvZ0Fybik7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNhdGFsb2cgYnkgaXRzIGlkLlxuICAgKlxuICAgKiBUaGUgaW1wb3J0ZWQgY2F0YWxvZyBpcyBhIHB1cmUgaWRlbnRpdHkgaGFuZGxlIGFuZCBkb2VzIG5vdCBtYW5hZ2UgdGhlXG4gICAqIGNhdGFsb2cncyBlbmNyeXB0aW9uLiBUbyBtYW5hZ2UgYW4gZXhpc3RpbmcgY2F0YWxvZydzIERhdGEgQ2F0YWxvZ1xuICAgKiBlbmNyeXB0aW9uLCBhZGQgYSBgQ2ZuRGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgIHJlc291cmNlIHRhcmdldGluZyBpdHNcbiAgICogaWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21DYXRhbG9nSWQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY2F0YWxvZ0lkOiBzdHJpbmcpOiBJQ2F0YWxvZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgY2F0YWxvZ0FybiA9IHN0YWNrLmZvcm1hdEFybih7IHNlcnZpY2U6ICdnbHVlJywgcmVzb3VyY2U6ICdjYXRhbG9nJywgcmVzb3VyY2VOYW1lOiBjYXRhbG9nSWQgfSk7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZENhdGFsb2coc2NvcGUsIGlkLCBjYXRhbG9nSWQsIGNhdGFsb2dBcm4pO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhdGFsb2dJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0Fybjogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkNhdGFsb2c7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENhdGFsb2dQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkNhdGFsb2codGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogcHJvcHMuY2F0YWxvZ05hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgfSk7XG5cbiAgICB0aGlzLmNhdGFsb2dJZCA9IHRoaXMucmVzb3VyY2UuYXR0ckNhdGFsb2dJZDtcbiAgICB0aGlzLmNhdGFsb2dBcm4gPSB0aGlzLnJlc291cmNlLmF0dHJSZXNvdXJjZUFybjtcblxuICAgIHRoaXMuY29uZmlndXJlRW5jcnlwdGlvbihwcm9wcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW1wbGljaXQsIGFjY291bnQtd2lkZSBEYXRhIENhdGFsb2cuIE5vdCBhIENsb3VkRm9ybWF0aW9uIHJlc291cmNlOyBvbmx5XG4gKiB0aGUgZW5jcnlwdGlvbiBzZXR0aW5ncyBpdCBjYXJyaWVzIGFyZSBzeW50aGVzaXplZC5cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuY2xhc3MgQWNjb3VudENhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuQWNjb3VudENhdGFsb2cnO1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0lkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjYXRhbG9nQXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgZW5jcnlwdGlvbjogQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIGVuY3J5cHRpb24pO1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgdGhpcy5jYXRhbG9nSWQgPSBzdGFjay5hY2NvdW50O1xuICAgIC8vIFRoZSBhY2NvdW50IGNhdGFsb2cncyBpZCBpcyBpbXBsaWNpdGx5IHRoZSBhY2NvdW50IGlkLCBzbyB0aGUgQVJOIGhhcyBubyByZXNvdXJjZSBuYW1lLlxuICAgIHRoaXMuY2F0YWxvZ0FybiA9IHN0YWNrLmZvcm1hdEFybih7IHNlcnZpY2U6ICdnbHVlJywgcmVzb3VyY2U6ICdjYXRhbG9nJyB9KTtcblxuICAgIHRoaXMuY29uZmlndXJlRW5jcnlwdGlvbihlbmNyeXB0aW9uKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGltcG9ydGVkIGNhdGFsb2cuIEEgcHVyZSBpZGVudGl0eSBoYW5kbGU6IGl0IGVtaXRzIG5vIHJlc291cmNlcyBhbmQgZG9lc1xuICogbm90IG1hbmFnZSB0aGUgaW1wb3J0ZWQgY2F0YWxvZydzIGVuY3J5cHRpb24uXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmNsYXNzIEltcG9ydGVkQ2F0YWxvZyBleHRlbmRzIENhdGFsb2dCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5JbXBvcnRlZENhdGFsb2cnO1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0lkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjYXRhbG9nQXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY2F0YWxvZ0lkOiBzdHJpbmcsIGNhdGFsb2dBcm46IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBjYXRhbG9nSWQpO1xuICAgIHRoaXMuY2F0YWxvZ0lkID0gY2F0YWxvZ0lkO1xuICAgIHRoaXMuY2F0YWxvZ0FybiA9IGNhdGFsb2dBcm47XG4gIH1cbn1cbiJdfQ==
package/lib/code.js CHANGED
@@ -43,7 +43,7 @@ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
43
43
  * Represents a Glue Job's Code assets (an asset can be a scripts, a jar, a python file or any other file).
44
44
  */
45
45
  class Code {
46
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Code", version: "2.266.0-alpha.0" };
46
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Code", version: "2.268.0-alpha.0" };
47
47
  /**
48
48
  * Job code as an S3 object.
49
49
  * @param bucket The S3 bucket
@@ -68,7 +68,7 @@ exports.Code = Code;
68
68
  class S3Code extends Code {
69
69
  bucket;
70
70
  key;
71
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3Code", version: "2.266.0-alpha.0" };
71
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3Code", version: "2.268.0-alpha.0" };
72
72
  constructor(bucket, key) {
73
73
  super();
74
74
  this.bucket = bucket;
@@ -91,7 +91,7 @@ exports.S3Code = S3Code;
91
91
  class AssetCode extends Code {
92
92
  path;
93
93
  options;
94
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.AssetCode", version: "2.266.0-alpha.0" };
94
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.AssetCode", version: "2.268.0-alpha.0" };
95
95
  asset;
96
96
  /**
97
97
  * @param path The path to the Code file.
@@ -1,4 +1,5 @@
1
1
  import type * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ import type { ISecretRef } from 'aws-cdk-lib/aws-secretsmanager';
2
3
  import * as cdk from 'aws-cdk-lib/core';
3
4
  import type * as constructs from 'constructs';
4
5
  /**
@@ -219,6 +220,17 @@ export interface ConnectionOptions {
219
220
  readonly properties?: {
220
221
  [key: string]: string;
221
222
  };
223
+ /**
224
+ * A reference to a Secrets Manager secret holding the credentials for this connection.
225
+ *
226
+ * The secret is referenced through the connection's `SECRET_ID` property, so
227
+ * Glue reads the credentials at runtime and the secret value never appears in
228
+ * the synthesized template. Prefer this over placing credentials directly in
229
+ * `properties`. Accepts any `secretsmanager.ISecret`.
230
+ *
231
+ * @default - no secret; any credentials must be supplied via `properties`
232
+ */
233
+ readonly secret?: ISecretRef;
222
234
  /**
223
235
  * A list of criteria that can be used in selecting this connection.
224
236
  * This is useful for filtering the results of https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-connections.html
@@ -232,9 +244,32 @@ export interface ConnectionOptions {
232
244
  readonly securityGroups?: ec2.ISecurityGroup[];
233
245
  /**
234
246
  * The VPC subnet to connect to resources within a VPC. See more at https://docs.aws.amazon.com/glue/latest/dg/start-connecting.html.
235
- * @default no subnet
247
+ *
248
+ * Mutually exclusive with `vpc`: provide `subnet` to pin the connection to a
249
+ * specific subnet, or provide `vpc` (optionally with `vpcSubnets`) to let the
250
+ * CDK select one for you.
251
+ *
252
+ * @default - no subnet, unless `vpc` is provided
236
253
  */
237
254
  readonly subnet?: ec2.ISubnet;
255
+ /**
256
+ * The VPC to connect to resources within. When provided, the CDK selects a
257
+ * subnet from this VPC using `vpcSubnets`. A Glue connection targets a single
258
+ * subnet, so the first subnet of the selection is used.
259
+ *
260
+ * Mutually exclusive with `subnet`.
261
+ *
262
+ * @default - no VPC, the subnet is taken from `subnet` if provided
263
+ */
264
+ readonly vpc?: ec2.IVpc;
265
+ /**
266
+ * Which subnets of `vpc` to select the connection subnet from. Only used when
267
+ * `vpc` is provided. Since a Glue connection targets a single subnet, the
268
+ * first subnet of the selection is used.
269
+ *
270
+ * @default - private subnets
271
+ */
272
+ readonly vpcSubnets?: ec2.SubnetSelection;
238
273
  }
239
274
  /**
240
275
  * Construction properties for `Connection`
@@ -271,6 +306,11 @@ export declare class Connection extends cdk.Resource implements IConnection {
271
306
  private readonly properties;
272
307
  private readonly resource;
273
308
  constructor(scope: constructs.Construct, id: string, props: ConnectionProps);
309
+ /**
310
+ * Determines the single subnet the connection should target, either from an
311
+ * explicit `subnet` or by selecting one from `vpc`.
312
+ */
313
+ private resolveSubnet;
274
314
  /**
275
315
  * The name of the connection
276
316
  */