@aws-cdk/aws-glue-alpha 2.267.0-alpha.0 → 2.269.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 (50) hide show
  1. package/.jsii +1691 -1261
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +1 -79
  4. package/README.md +106 -33
  5. package/adr/job-arguments.md +212 -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 +44 -29
  10. package/lib/connection.js +66 -32
  11. package/lib/constants.d.ts +17 -0
  12. package/lib/constants.js +20 -2
  13. package/lib/data-format.js +5 -5
  14. package/lib/data-quality-ruleset.d.ts +20 -9
  15. package/lib/data-quality-ruleset.js +33 -6
  16. package/lib/database.d.ts +3 -1
  17. package/lib/database.js +8 -2
  18. package/lib/external-table.js +1 -1
  19. package/lib/jobs/job.d.ts +91 -10
  20. package/lib/jobs/job.js +115 -38
  21. package/lib/jobs/pyspark-etl-job.d.ts +2 -4
  22. package/lib/jobs/pyspark-etl-job.js +10 -15
  23. package/lib/jobs/pyspark-flex-etl-job.d.ts +2 -4
  24. package/lib/jobs/pyspark-flex-etl-job.js +10 -15
  25. package/lib/jobs/pyspark-streaming-job.d.ts +2 -4
  26. package/lib/jobs/pyspark-streaming-job.js +10 -15
  27. package/lib/jobs/python-shell-job.d.ts +20 -7
  28. package/lib/jobs/python-shell-job.js +30 -33
  29. package/lib/jobs/ray-job.js +8 -13
  30. package/lib/jobs/scala-spark-etl-job.d.ts +4 -5
  31. package/lib/jobs/scala-spark-etl-job.js +13 -16
  32. package/lib/jobs/scala-spark-flex-etl-job.d.ts +12 -23
  33. package/lib/jobs/scala-spark-flex-etl-job.js +20 -23
  34. package/lib/jobs/scala-spark-streaming-job.d.ts +4 -5
  35. package/lib/jobs/scala-spark-streaming-job.js +13 -16
  36. package/lib/jobs/spark-job.d.ts +9 -7
  37. package/lib/jobs/spark-job.js +23 -32
  38. package/lib/partition-projection.d.ts +36 -47
  39. package/lib/partition-projection.js +22 -40
  40. package/lib/s3-table.d.ts +7 -4
  41. package/lib/s3-table.js +12 -9
  42. package/lib/schema.js +2 -2
  43. package/lib/security-configuration.js +4 -4
  44. package/lib/storage-parameter.js +1 -1
  45. package/lib/table-base.js +1 -1
  46. package/lib/triggers/trigger-options.d.ts +103 -43
  47. package/lib/triggers/trigger-options.js +202 -3
  48. package/lib/triggers/workflow.d.ts +31 -47
  49. package/lib/triggers/workflow.js +27 -142
  50. package/package.json +7 -7
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.267.0-alpha.0" };
77
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.DataCatalogEncryptionAtRest", version: "2.269.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.267.0-alpha.0" };
133
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.CatalogBase", version: "2.269.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.267.0-alpha.0" };
227
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Catalog", version: "2.269.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.267.0-alpha.0" };
46
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Code", version: "2.269.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.267.0-alpha.0" };
71
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3Code", version: "2.269.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.267.0-alpha.0" };
94
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.AssetCode", version: "2.269.0-alpha.0" };
95
95
  asset;
96
96
  /**
97
97
  * @param path The path to the Code file.
@@ -198,6 +198,44 @@ export interface IConnection extends cdk.IResource {
198
198
  */
199
199
  readonly connectionArn: string;
200
200
  }
201
+ /**
202
+ * VPC network placement for a Glue `Connection`.
203
+ *
204
+ * A Glue connection targets a single subnet. Choose the placement with one of
205
+ * the mutually-exclusive factories — an explicit subnet, or a VPC to select one
206
+ * from — so a subnet paired with a VPC, or a subnet selection without a VPC,
207
+ * cannot be expressed.
208
+ */
209
+ export declare class ConnectionNetwork {
210
+ /**
211
+ * Pin the connection to a specific subnet.
212
+ *
213
+ * @param subnet the subnet the connection targets.
214
+ */
215
+ static subnet(subnet: ec2.ISubnet): ConnectionNetwork;
216
+ /**
217
+ * Select the connection's subnet from a VPC. Since a Glue connection targets
218
+ * a single subnet, the first subnet of the selection is used.
219
+ *
220
+ * @param vpc the VPC to select a subnet from.
221
+ * @param vpcSubnets which subnets to select from.
222
+ * @default vpcSubnets - private subnets
223
+ */
224
+ static vpc(vpc: ec2.IVpc, vpcSubnets?: ec2.SubnetSelection): ConnectionNetwork;
225
+ /** @internal */
226
+ readonly _subnet?: ec2.ISubnet;
227
+ /** @internal */
228
+ readonly _vpc?: ec2.IVpc;
229
+ /** @internal */
230
+ readonly _vpcSubnets?: ec2.SubnetSelection;
231
+ private constructor();
232
+ /**
233
+ * Resolve the single subnet this network targets.
234
+ *
235
+ * @internal
236
+ */
237
+ _resolveSubnet(scope: constructs.Construct): ec2.ISubnet | undefined;
238
+ }
201
239
  /**
202
240
  * Base Connection Options
203
241
  */
@@ -243,33 +281,15 @@ export interface ConnectionOptions {
243
281
  */
244
282
  readonly securityGroups?: ec2.ISecurityGroup[];
245
283
  /**
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.
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
253
- */
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.
284
+ * The VPC network placement for this connection, so it can reach resources
285
+ * inside a VPC. See more at https://docs.aws.amazon.com/glue/latest/dg/start-connecting.html.
259
286
  *
260
- * Mutually exclusive with `subnet`.
287
+ * Build it with `ConnectionNetwork.subnet(subnet)` to pin a specific subnet,
288
+ * or `ConnectionNetwork.vpc(vpc, vpcSubnets?)` to let the CDK select one.
261
289
  *
262
- * @default - no VPC, the subnet is taken from `subnet` if provided
290
+ * @default - no VPC network placement
263
291
  */
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;
292
+ readonly network?: ConnectionNetwork;
273
293
  }
274
294
  /**
275
295
  * Construction properties for `Connection`
@@ -306,11 +326,6 @@ export declare class Connection extends cdk.Resource implements IConnection {
306
326
  private readonly properties;
307
327
  private readonly resource;
308
328
  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;
314
329
  /**
315
330
  * The name of the connection
316
331
  */
package/lib/connection.js CHANGED
@@ -67,7 +67,7 @@ var __importStar = (this && this.__importStar) || (function () {
67
67
  };
68
68
  })();
69
69
  Object.defineProperty(exports, "__esModule", { value: true });
70
- exports.Connection = exports.ConnectionType = void 0;
70
+ exports.Connection = exports.ConnectionNetwork = exports.ConnectionType = void 0;
71
71
  const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
72
72
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
73
73
  const aws_glue_1 = require("aws-cdk-lib/aws-glue");
@@ -85,7 +85,7 @@ const secret_detection_1 = require("./private/secret-detection");
85
85
  * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-connection-connectioninput.html#cfn-glue-connection-connectioninput-connectiontype
86
86
  */
87
87
  class ConnectionType {
88
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.ConnectionType", version: "2.267.0-alpha.0" };
88
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.ConnectionType", version: "2.269.0-alpha.0" };
89
89
  /**
90
90
  * Designates a connection to a database through Java Database Connectivity (JDBC).
91
91
  */
@@ -263,6 +263,67 @@ class ConnectionType {
263
263
  }
264
264
  }
265
265
  exports.ConnectionType = ConnectionType;
266
+ /**
267
+ * VPC network placement for a Glue `Connection`.
268
+ *
269
+ * A Glue connection targets a single subnet. Choose the placement with one of
270
+ * the mutually-exclusive factories — an explicit subnet, or a VPC to select one
271
+ * from — so a subnet paired with a VPC, or a subnet selection without a VPC,
272
+ * cannot be expressed.
273
+ */
274
+ class ConnectionNetwork {
275
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.ConnectionNetwork", version: "2.269.0-alpha.0" };
276
+ /**
277
+ * Pin the connection to a specific subnet.
278
+ *
279
+ * @param subnet the subnet the connection targets.
280
+ */
281
+ static subnet(subnet) {
282
+ return new ConnectionNetwork(subnet, undefined, undefined);
283
+ }
284
+ /**
285
+ * Select the connection's subnet from a VPC. Since a Glue connection targets
286
+ * a single subnet, the first subnet of the selection is used.
287
+ *
288
+ * @param vpc the VPC to select a subnet from.
289
+ * @param vpcSubnets which subnets to select from.
290
+ * @default vpcSubnets - private subnets
291
+ */
292
+ static vpc(vpc, vpcSubnets) {
293
+ return new ConnectionNetwork(undefined, vpc, vpcSubnets);
294
+ }
295
+ /** @internal */
296
+ _subnet;
297
+ /** @internal */
298
+ _vpc;
299
+ /** @internal */
300
+ _vpcSubnets;
301
+ constructor(subnet, vpc, vpcSubnets) {
302
+ this._subnet = subnet;
303
+ this._vpc = vpc;
304
+ this._vpcSubnets = vpcSubnets;
305
+ }
306
+ /**
307
+ * Resolve the single subnet this network targets.
308
+ *
309
+ * @internal
310
+ */
311
+ _resolveSubnet(scope) {
312
+ if (this._subnet) {
313
+ return this._subnet;
314
+ }
315
+ // A Glue connection targets a single subnet, so use the first subnet of the selection.
316
+ const selected = this._vpc.selectSubnets(this._vpcSubnets);
317
+ // `isPendingLookup` is true for imported VPCs whose subnets are not yet
318
+ // resolved (e.g. `fromLookup`), where an empty selection is expected and
319
+ // will materialize on a later synth. Only fail on a genuinely empty selection.
320
+ if (!selected.isPendingLookup && selected.subnets.length === 0) {
321
+ throw new cdk.ValidationError((0, helpers_internal_1.lit) `ConnectionNoSubnetsSelected`, '`vpcSubnets` selected no subnets from the provided `vpc`; adjust the selection or use `ConnectionNetwork.subnet(...)` to target a specific subnet', scope);
322
+ }
323
+ return selected.subnets[0];
324
+ }
325
+ }
326
+ exports.ConnectionNetwork = ConnectionNetwork;
266
327
  /**
267
328
  * An AWS Glue connection to a data source.
268
329
  */
@@ -290,7 +351,7 @@ let Connection = (() => {
290
351
  Connection = _classThis = _classDescriptor.value;
291
352
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
292
353
  }
293
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Connection", version: "2.267.0-alpha.0" };
354
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Connection", version: "2.269.0-alpha.0" };
294
355
  /** Uniquely identifies this class. */
295
356
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.Connection';
296
357
  /**
@@ -346,7 +407,7 @@ let Connection = (() => {
346
407
  // Enhanced CDK Analytics Telemetry
347
408
  (0, metadata_resource_1.addConstructMetadata)(this, props);
348
409
  this.properties = props.properties || {};
349
- const subnet = this.resolveSubnet(props);
410
+ const subnet = props.network?._resolveSubnet(this);
350
411
  const physicalConnectionRequirements = subnet || props.securityGroups ? {
351
412
  availabilityZone: subnet ? subnet.availabilityZone : undefined,
352
413
  subnetId: subnet ? subnet.subnetId : undefined,
@@ -382,33 +443,6 @@ let Connection = (() => {
382
443
  },
383
444
  });
384
445
  }
385
- /**
386
- * Determines the single subnet the connection should target, either from an
387
- * explicit `subnet` or by selecting one from `vpc`.
388
- */
389
- resolveSubnet(props) {
390
- if (props.subnet && props.vpc) {
391
- throw new cdk.ValidationError((0, helpers_internal_1.lit) `ConnectionSubnetConflict`, 'cannot specify both `subnet` and `vpc`; provide `subnet` for a specific subnet, or `vpc` (optionally with `vpcSubnets`) to let the CDK select one', this);
392
- }
393
- if (props.vpcSubnets && !props.vpc) {
394
- throw new cdk.ValidationError((0, helpers_internal_1.lit) `ConnectionVpcSubnetsWithoutVpc`, '`vpcSubnets` can only be specified together with `vpc`', this);
395
- }
396
- if (props.subnet) {
397
- return props.subnet;
398
- }
399
- if (props.vpc) {
400
- // A Glue connection targets a single subnet, so use the first subnet of the selection.
401
- const selected = props.vpc.selectSubnets(props.vpcSubnets);
402
- // `isPendingLookup` is true for imported VPCs whose subnets are not yet
403
- // resolved (e.g. `fromLookup`), where an empty selection is expected and
404
- // will materialize on a later synth. Only fail on a genuinely empty selection.
405
- if (!selected.isPendingLookup && selected.subnets.length === 0) {
406
- throw new cdk.ValidationError((0, helpers_internal_1.lit) `ConnectionNoSubnetsSelected`, '`vpcSubnets` selected no subnets from the provided `vpc`; adjust the selection or use `subnet` to target a specific subnet', this);
407
- }
408
- return selected.subnets[0];
409
- }
410
- return undefined;
411
- }
412
446
  /**
413
447
  * The name of the connection
414
448
  */
@@ -436,4 +470,4 @@ let Connection = (() => {
436
470
  return Connection = _classThis;
437
471
  })();
438
472
  exports.Connection = Connection;
439
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbm5lY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsbURBQXFEO0FBRXJELHNEQUF3QztBQUN4Qyw0RUFBNEU7QUFDNUUsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUUxRSxpRUFBb0U7QUFFcEU7Ozs7Ozs7R0FPRztBQUNILE1BQWEsY0FBYzs7SUFDekI7O09BRUc7SUFDSSxNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXpEOztPQUVHO0lBQ0ksTUFBTSxDQUFVLEtBQUssR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUzRDs7T0FFRztJQUNJLE1BQU0sQ0FBVSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFL0Q7O09BRUc7SUFDSSxNQUFNLENBQVUsd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUVqRzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBRTdGOztPQUVHO0lBQ0ksTUFBTSxDQUFVLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUvRDs7O09BR0c7SUFDSSxNQUFNLENBQVUsV0FBVyxHQUFHLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXZFOzs7T0FHRztJQUNJLE1BQU0sQ0FBVSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFN0Q7O09BRUc7SUFDSSxNQUFNLENBQVUsV0FBVyxHQUFHLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lB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bSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDZm5Db25uZWN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0IHR5cGUgeyBJU2VjcmV0UmVmIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IGxpdCwgbWVtb2l6ZWRHZXR0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyB3YXJuT25QbGFpbnRleHRTZWNyZXRzIH0gZnJvbSAnLi9wcml2YXRlL3NlY3JldC1kZXRlY3Rpb24nO1xuXG4vKipcbiAqIFRoZSB0eXBlIG9mIHRoZSBnbHVlIGNvbm5lY3Rpb25cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byB1c2UgYSBjb25uZWN0aW9uIHR5cGUgdGhhdCBkb2Vzbid0IGV4aXN0IGFzIGEgc3RhdGljIG1lbWJlciwgeW91XG4gKiBjYW4gaW5zdGFudGlhdGUgYSBgQ29ubmVjdGlvblR5cGVgIG9iamVjdCwgZS5nOiBgbmV3IENvbm5lY3Rpb25UeXBlKCdORVdfVFlQRScpYC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWdsdWUtY29ubmVjdGlvbi1jb25uZWN0aW9uaW5wdXQuaHRtbCNjZm4tZ2x1ZS1jb25uZWN0aW9uLWNvbm5lY3Rpb25pbnB1dC1jb25uZWN0aW9udHlwZVxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvblR5cGUge1xuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSB0aHJvdWdoIEphdmEgRGF0YWJhc2UgQ29ubmVjdGl2aXR5IChKREJDKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSkRCQyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnSkRCQycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBhbiBBcGFjaGUgS2Fma2Egc3RyZWFtaW5nIHBsYXRmb3JtLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBLQUZLQSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnS0FGS0EnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gYSBNb25nb0RCIGRvY3VtZW50IGRhdGFiYXNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT05HT0RCID0gbmV3IENvbm5lY3Rpb25UeXBlKCdNT05HT0RCJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHVzZWQgZm9yIHZpZXcgdmFsaWRhdGlvbiBieSBBbWF6b24gUmVkc2hpZnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZJRVdfVkFMSURBVElPTl9SRURTSElGVCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnVklFV19WQUxJREFUSU9OX1JFRFNISUZUJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHVzZWQgZm9yIHZpZXcgdmFsaWRhdGlvbiBieSBBbWF6b24gQXRoZW5hLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWSUVXX1ZBTElEQVRJT05fQVRIRU5BID0gbmV3IENvbm5lY3Rpb25UeXBlKCdWSUVXX1ZBTElEQVRJT05fQVRIRU5BJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBuZXR3b3JrIGNvbm5lY3Rpb24gdG8gYSBkYXRhIHNvdXJjZSB3aXRoaW4gYW4gQW1hem9uIFZpcnR1YWwgUHJpdmF0ZSBDbG91ZCBlbnZpcm9ubWVudCAoQW1hem9uIFZQQykuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5FVFdPUksgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ05FVFdPUksnKTtcblxuICAvKipcbiAgICogVXNlcyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGNvbnRhaW5lZCBpbiBhIGNvbm5lY3RvciBwdXJjaGFzZWQgZnJvbSBBV1MgTWFya2V0cGxhY2VcbiAgICogdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byBkYXRhIHN0b3JlcyB0aGF0IGFyZSBub3QgbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IEFXUyBHbHVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQVJLRVRQTEFDRSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnTUFSS0VUUExBQ0UnKTtcblxuICAvKipcbiAgICogVXNlcyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGNvbnRhaW5lZCBpbiBhIGN1c3RvbSBjb25uZWN0b3IgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byBkYXRhIHN0b3Jlc1xuICAgKiB0aGF0IGFyZSBub3QgbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IEFXUyBHbHVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDVVNUT00gPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0NVU1RPTScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBGYWNlYm9vayBBZHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZBQ0VCT09LQURTID0gbmV3IENvbm5lY3Rpb25UeXBlKCdGQUNFQk9PS0FEUycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBHb29nbGUgQWRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHT09HTEVBRFMgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0dPT0dMRUFEUycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBHb29nbGUgU2hlZXRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHT09HTEVTSEVFVFMgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0dPT0dMRVNIRUVUUycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBHb29nbGUgQW5hbHl0aWNzIDQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdPT0dMRUFOQUxZVElDUzQgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0dPT0dMRUFOQUxZVElDUzQnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gSHViU3BvdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSFVCU1BPVCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnSFVCU1BPVCcpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBJbnN0YWdyYW0gQWRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTlNUQUdSQU1BRFMgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0lOU1RBR1JBTUFEUycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBJbnRlcmNvbS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5URVJDT00gPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0lOVEVSQ09NJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEppcmEgQ2xvdWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpJUkFDTE9VRCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnSklSQUNMT1VEJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEFkb2JlIE1hcmtldG8gRW5nYWdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQVJLRVRPID0gbmV3IENvbm5lY3Rpb25UeXBlKCdNQVJLRVRPJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIE9yYWNsZSBOZXRTdWl0ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkVUU1VJVEVFUlAgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ05FVFNVSVRFRVJQJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFNhbGVzZm9yY2UgdXNpbmcgT0F1dGggYXV0aGVudGljYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBTEVTRk9SQ0UgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NBTEVTRk9SQ0UnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gU2FsZXNmb3JjZSBNYXJrZXRpbmcgQ2xvdWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBTEVTRk9SQ0VNQVJLRVRJTkdDTE9VRCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU0FMRVNGT1JDRU1BUktFVElOR0NMT1VEJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFNhbGVzZm9yY2UgTWFya2V0aW5nIENsb3VkIEFjY291bnQgRW5nYWdlbWVudCAoTUNBRSkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBTEVTRk9SQ0VQQVJET1QgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NBTEVTRk9SQ0VQQVJET1QnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gU0FQIE9EYXRhLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTQVBPREFUQSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU0FQT0RBVEEnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gU2VydmljZU5vdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VSVklDRU5PVyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU0VSVklDRU5PVycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBTbGFjay5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0xBQ0sgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NMQUNLJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFNuYXBjaGF0IEFkcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU05BUENIQVRBRFMgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NOQVBDSEFUQURTJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFN0cmlwZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSSVBFID0gbmV3IENvbm5lY3Rpb25UeXBlKCdTVFJJUEUnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gWmVuZGVzay5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgWkVOREVTSyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnWkVOREVTSycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBab2hvIENSTS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgWk9IT0NSTSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnWk9IT0NSTScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBHb29nbGUgQmlnUXVlcnkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJJR1FVRVJZID0gbmV3IENvbm5lY3Rpb25UeXBlKCdCSUdRVUVSWScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBBenVyZSBTUUwgRGF0YWJhc2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFaVVJFU1FMID0gbmV3IENvbm5lY3Rpb25UeXBlKCdBWlVSRVNRTCcpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBBenVyZSBDb3Ntb3MgREIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFaVVJFQ09TTU9TID0gbmV3IENvbm5lY3Rpb25UeXBlKCdBWlVSRUNPU01PUycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPUEVOU0VBUkNIID0gbmV3IENvbm5lY3Rpb25UeXBlKCdPUEVOU0VBUkNIJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIE15U1FMLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNWVNRTCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnTVlTUUwnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gUG9zdGdyZVNRTC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUE9TVEdSRVNRTCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnUE9TVEdSRVNRTCcpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBPcmFjbGUgRGF0YWJhc2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9SQUNMRSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnT1JBQ0xFJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIE1pY3Jvc29mdCBTUUwgU2VydmVyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTUUxTRVJWRVIgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NRTFNFUlZFUicpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBTQVAgSEFOQS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0FQSEFOQSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU0FQSEFOQScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBUZXJhZGF0YS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVEVSQURBVEEgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1RFUkFEQVRBJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFZlcnRpY2EuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZFUlRJQ0EgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1ZFUlRJQ0EnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gQW1hem9uIER5bmFtb0RCLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEWU5BTU9EQiA9IG5ldyBDb25uZWN0aW9uVHlwZSgnRFlOQU1PREInKTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBDb25uZWN0aW9uVHlwZSwgYXMgZXhwZWN0ZWQgYnkgQ29ubmVjdGlvbiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29ubmVjdGlvbiB0eXBlIG5hbWUgYXMgZXhwZWN0ZWQgYnkgQ29ubmVjdGlvbiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVwcmVzZW50aW5nIGEgY3JlYXRlZCBvciBhbiBpbXBvcnRlZCBgQ29ubmVjdGlvbmBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29ubmVjdGlvbiBleHRlbmRzIGNkay5JUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbm5lY3Rpb25cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29ubmVjdGlvblxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uQXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQmFzZSBDb25uZWN0aW9uIE9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29ubmVjdGlvblxuICAgKiBAZGVmYXVsdCBjbG91ZGZvcm1hdGlvbiBnZW5lcmF0ZWQgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29ubmVjdGlvbi5cbiAgICogQGRlZmF1bHQgbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAgS2V5LVZhbHVlIHBhaXJzIHRoYXQgZGVmaW5lIHBhcmFtZXRlcnMgZm9yIHRoZSBjb25uZWN0aW9uLlxuICAgKiAgQGRlZmF1bHQgZW1wdHkgcHJvcGVydGllc1xuICAgKiAgQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvYXdzLWdsdWUtcHJvZ3JhbW1pbmctZXRsLWNvbm5lY3QuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydGllcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIGEgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBob2xkaW5nIHRoZSBjcmVkZW50aWFscyBmb3IgdGhpcyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBUaGUgc2VjcmV0IGlzIHJlZmVyZW5jZWQgdGhyb3VnaCB0aGUgY29ubmVjdGlvbidzIGBTRUNSRVRfSURgIHByb3BlcnR5LCBzb1xuICAgKiBHbHVlIHJlYWRzIHRoZSBjcmVkZW50aWFscyBhdCBydW50aW1lIGFuZCB0aGUgc2VjcmV0IHZhbHVlIG5ldmVyIGFwcGVhcnMgaW5cbiAgICogdGhlIHN5bnRoZXNpemVkIHRlbXBsYXRlLiBQcmVmZXIgdGhpcyBvdmVyIHBsYWNpbmcgY3JlZGVudGlhbHMgZGlyZWN0bHkgaW5cbiAgICogYHByb3BlcnRpZXNgLiBBY2NlcHRzIGFueSBgc2VjcmV0c21hbmFnZXIuSVNlY3JldGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2VjcmV0OyBhbnkgY3JlZGVudGlhbHMgbXVzdCBiZSBzdXBwbGllZCB2aWEgYHByb3BlcnRpZXNgXG4gICAqL1xuICByZWFkb25seSBzZWNyZXQ/OiBJU2VjcmV0UmVmO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY3JpdGVyaWEgdGhhdCBjYW4gYmUgdXNlZCBpbiBzZWxlY3RpbmcgdGhpcyBjb25uZWN0aW9uLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZmlsdGVyaW5nIHRoZSByZXN1bHRzIG9mIGh0dHBzOi8vYXdzY2xpLmFtYXpvbmF3cy5jb20vdjIvZG9jdW1lbnRhdGlvbi9hcGkvbGF0ZXN0L3JlZmVyZW5jZS9nbHVlL2dldC1jb25uZWN0aW9ucy5odG1sXG4gICAqIEBkZWZhdWx0IG5vIG1hdGNoIGNyaXRlcmlhXG4gICAqL1xuICByZWFkb25seSBtYXRjaENyaXRlcmlhPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHNlY3VyaXR5IGdyb3VwcyBuZWVkZWQgdG8gc3VjY2Vzc2Z1bGx5IG1ha2UgdGhpcyBjb25uZWN0aW9uIGUuZy4gdG8gc3VjY2Vzc2Z1bGx5IGNvbm5lY3QgdG8gVlBDLlxuICAgKiBAZGVmYXVsdCBubyBzZWN1cml0eSBncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM/OiBlYzIuSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogVGhlIFZQQyBzdWJuZXQgdG8gY29ubmVjdCB0byByZXNvdXJjZXMgd2l0aGluIGEgVlBDLiBTZWUgbW9yZSBhdCBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvc3RhcnQtY29ubmVjdGluZy5odG1sLlxuICAgKlxuICAgKiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgdnBjYDogcHJvdmlkZSBgc3VibmV0YCB0byBwaW4gdGhlIGNvbm5lY3Rpb24gdG8gYVxuICAgKiBzcGVjaWZpYyBzdWJuZXQsIG9yIHByb3ZpZGUgYHZwY2AgKG9wdGlvbmFsbHkgd2l0aCBgdnBjU3VibmV0c2ApIHRvIGxldCB0aGVcbiAgICogQ0RLIHNlbGVjdCBvbmUgZm9yIHlvdS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzdWJuZXQsIHVubGVzcyBgdnBjYCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0PzogZWMyLklTdWJuZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgdG8gY29ubmVjdCB0byByZXNvdXJjZXMgd2l0aGluLiBXaGVuIHByb3ZpZGVkLCB0aGUgQ0RLIHNlbGVjdHMgYVxuICAgKiBzdWJuZXQgZnJvbSB0aGlzIFZQQyB1c2luZyBgdnBjU3VibmV0c2AuIEEgR2x1ZSBjb25uZWN0aW9uIHRhcmdldHMgYSBzaW5nbGVcbiAgICogc3VibmV0LCBzbyB0aGUgZmlyc3Qgc3VibmV0IG9mIHRoZSBzZWxlY3Rpb24gaXMgdXNlZC5cbiAgICpcbiAgICogTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYHN1Ym5ldGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gVlBDLCB0aGUgc3VibmV0IGlzIHRha2VuIGZyb20gYHN1Ym5ldGAgaWYgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBXaGljaCBzdWJuZXRzIG9mIGB2cGNgIHRvIHNlbGVjdCB0aGUgY29ubmVjdGlvbiBzdWJuZXQgZnJvbS4gT25seSB1c2VkIHdoZW5cbiAgICogYHZwY2AgaXMgcHJvdmlkZWQuIFNpbmNlIGEgR2x1ZSBjb25uZWN0aW9uIHRhcmdldHMgYSBzaW5nbGUgc3VibmV0LCB0aGVcbiAgICogZmlyc3Qgc3VibmV0IG9mIHRoZSBzZWxlY3Rpb24gaXMgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcml2YXRlIHN1Ym5ldHNcbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBgQ29ubmVjdGlvbmBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uUHJvcHMgZXh0ZW5kcyBDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogQ29ubmVjdGlvblR5cGU7XG59XG5cbi8qKlxuICogQW4gQVdTIEdsdWUgY29ubmVjdGlvbiB0byBhIGRhdGEgc291cmNlLlxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbiBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElDb25uZWN0aW9uIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5Db25uZWN0aW9uJztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gY29uc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhbiBleHRlcm5hbCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApLlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCdzIGlkLlxuICAgKiBAcGFyYW0gY29ubmVjdGlvbkFybiBhcm4gb2YgZXh0ZXJuYWwgY29ubmVjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbm5lY3Rpb25Bcm4oc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25uZWN0aW9uQXJuOiBzdHJpbmcpOiBJQ29ubmVjdGlvbiB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUNvbm5lY3Rpb24ge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25OYW1lID0gY2RrLkFybi5leHRyYWN0UmVzb3VyY2VOYW1lKGNvbm5lY3Rpb25Bcm4sICdjb25uZWN0aW9uJyk7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbkFybiA9IGNvbm5lY3Rpb25Bcm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBjb25zdHJ1Y3QgdGhhdCByZXByZXNlbnRzIGFuIGV4dGVybmFsIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgaWQuXG4gICAqIEBwYXJhbSBjb25uZWN0aW9uTmFtZSBuYW1lIG9mIGV4dGVybmFsIGNvbm5lY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db25uZWN0aW9uTmFtZShzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbm5lY3Rpb25OYW1lOiBzdHJpbmcpOiBJQ29ubmVjdGlvbiB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUNvbm5lY3Rpb24ge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25OYW1lID0gY29ubmVjdGlvbk5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbkFybiA9IENvbm5lY3Rpb24uYnVpbGRDb25uZWN0aW9uQXJuKHNjb3BlLCBjb25uZWN0aW9uTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkQ29ubmVjdGlvbkFybihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGNvbm5lY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnZ2x1ZScsXG4gICAgICByZXNvdXJjZTogJ2Nvbm5lY3Rpb24nLFxuICAgICAgcmVzb3VyY2VOYW1lOiBjb25uZWN0aW9uTmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogQ2ZuQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb25uZWN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuY29ubmVjdGlvbk5hbWUsXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wcy5wcm9wZXJ0aWVzIHx8IHt9O1xuXG4gICAgY29uc3Qgc3VibmV0ID0gdGhpcy5yZXNvbHZlU3VibmV0KHByb3BzKTtcblxuICAgIGNvbnN0IHBoeXNpY2FsQ29ubmVjdGlvblJlcXVpcmVtZW50cyA9IHN1Ym5ldCB8fCBwcm9wcy5zZWN1cml0eUdyb3VwcyA/IHtcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHN1Ym5ldCA/IHN1Ym5ldC5hdmFpbGFiaWxpdHlab25lIDogdW5kZWZpbmVkLFxuICAgICAgc3VibmV0SWQ6IHN1Ym5ldCA/IHN1Ym5ldC5zdWJuZXRJZCA6IHVuZGVmaW5lZCxcbiAgICAgIHNlY3VyaXR5R3JvdXBJZExpc3Q6IHByb3BzLnNlY3VyaXR5R3JvdXBzID8gcHJvcHMuc2VjdXJpdHlHcm91cHMubWFwKHNnID0+IHNnLnNlY3VyaXR5R3JvdXBJZCkgOiB1bmRlZmluZWQsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHNlY3JldElkID0gcHJvcHMuc2VjcmV0Py5zZWNyZXRSZWYuc2VjcmV0SWQ7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkNvbm5lY3Rpb24odGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgY2F0YWxvZ0lkOiBjZGsuU3RhY2sub2YodGhpcykuYWNjb3VudCxcbiAgICAgIGNvbm5lY3Rpb25JbnB1dDoge1xuICAgICAgICBjb25uZWN0aW9uUHJvcGVydGllczogY2RrLkxhenkuYW55KHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBJbnNwZWN0IHRoZSBmaW5hbCBwcm9wZXJ0eSBzZXQgYXQgc3ludGhlc2lzIHRpbWUgc28gcHJvcGVydGllc1xuICAgICAgICAgICAgLy8gYWRkZWQgdmlhIGBhZGRQcm9wZXJ0eWAgYXJlIGNvdmVyZWQgYXMgd2VsbCDigJQgYSBgU0VDUkVUX0lEYCBhZGRlZFxuICAgICAgICAgICAgLy8gYWZ0ZXIgY29uc3RydWN0aW9uIHdvdWxkIG90aGVyd2lzZSBiZSBzaWxlbnRseSBvdmVyd3JpdHRlbiBieSB0aGVcbiAgICAgICAgICAgIC8vIG9uZSBpbmplY3RlZCBmcm9tIGBzZWNyZXRgLlxuICAgICAgICAgICAgaWYgKHNlY3JldElkICE9PSB1bmRlZmluZWQgJiYgdGhpcy5wcm9wZXJ0aWVzLlNFQ1JFVF9JRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGxpdGBDb25uZWN0aW9uU2VjcmV0Q29uZmxpY3RgLCAnY2Fubm90IHNldCBib3RoIGBzZWNyZXRgIGFuZCBhIGBTRUNSRVRfSURgIGNvbm5lY3Rpb24gcHJvcGVydHknLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZSBgU0VDUkVUX0lEYCBpbmplY3RlZCBmcm9tIGBzZWNyZXRgIGlzIGEgcmVmZXJlbmNlLCBub3QgYVxuICAgICAgICAgICAgLy8gY3JlZGVudGlhbCwgc28gaXQgaXMgbWVyZ2VkIGluIGFmdGVyIHRoaXMgc2Nhbi5cbiAgICAgICAgICAgIHdhcm5PblBsYWludGV4dFNlY3JldHMoXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1nbHVlLWFscGhhOnBsYWludGV4dENvbm5lY3Rpb25TZWNyZXQnLFxuICAgICAgICAgICAgICAnUGFzcyBhIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgdmlhIHRoZSBjb25uZWN0aW9uXFwncyBgc2VjcmV0YCBwcm9wZXJ0eSBpbnN0ZWFkLicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHNlY3JldElkICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyB7IC4uLnRoaXMucHJvcGVydGllcywgU0VDUkVUX0lEOiBzZWNyZXRJZCB9XG4gICAgICAgICAgICAgIDogdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmxlbmd0aCA+IDAgPyBwcm9wZXJ0aWVzIDogdW5kZWZpbmVkO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBjb25uZWN0aW9uVHlwZTogcHJvcHMudHlwZS5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgIG1hdGNoQ3JpdGVyaWE6IHByb3BzLm1hdGNoQ3JpdGVyaWEsXG4gICAgICAgIG5hbWU6IHByb3BzLmNvbm5lY3Rpb25OYW1lLFxuICAgICAgICBwaHlzaWNhbENvbm5lY3Rpb25SZXF1aXJlbWVudHMsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIHNpbmdsZSBzdWJuZXQgdGhlIGNvbm5lY3Rpb24gc2hvdWxkIHRhcmdldCwgZWl0aGVyIGZyb20gYW5cbiAgICogZXhwbGljaXQgYHN1Ym5ldGAgb3IgYnkgc2VsZWN0aW5nIG9uZSBmcm9tIGB2cGNgLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlU3VibmV0KHByb3BzOiBDb25uZWN0aW9uUHJvcHMpOiBlYzIuSVN1Ym5ldCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByb3BzLnN1Ym5ldCAmJiBwcm9wcy52cGMpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGxpdGBDb25uZWN0aW9uU3VibmV0Q29uZmxpY3RgLCAnY2Fubm90IHNwZWNpZnkgYm90aCBgc3VibmV0YCBhbmQgYHZwY2A7IHByb3ZpZGUgYHN1Ym5ldGAgZm9yIGEgc3BlY2lmaWMgc3VibmV0LCBvciBgdnBjYCAob3B0aW9uYWxseSB3aXRoIGB2cGNTdWJuZXRzYCkgdG8gbGV0IHRoZSBDREsgc2VsZWN0IG9uZScsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy52cGNTdWJuZXRzICYmICFwcm9wcy52cGMpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGxpdGBDb25uZWN0aW9uVnBjU3VibmV0c1dpdGhvdXRWcGNgLCAnYHZwY1N1Ym5ldHNgIGNhbiBvbmx5IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIGB2cGNgJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnN1Ym5ldCkge1xuICAgICAgcmV0dXJuIHByb3BzLnN1Ym5ldDtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudnBjKSB7XG4gICAgICAvLyBBIEdsdWUgY29ubmVjdGlvbiB0YXJnZXRzIGEgc2luZ2xlIHN1Ym5ldCwgc28gdXNlIHRoZSBmaXJzdCBzdWJuZXQgb2YgdGhlIHNlbGVjdGlvbi5cbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocHJvcHMudnBjU3VibmV0cyk7XG4gICAgICAvLyBgaXNQZW5kaW5nTG9va3VwYCBpcyB0cnVlIGZvciBpbXBvcnRlZCBWUENzIHdob3NlIHN1Ym5ldHMgYXJlIG5vdCB5ZXRcbiAgICAgIC8vIHJlc29sdmVkIChlLmcuIGBmcm9tTG9va3VwYCksIHdoZXJlIGFuIGVtcHR5IHNlbGVjdGlvbiBpcyBleHBlY3RlZCBhbmRcbiAgICAgIC8vIHdpbGwgbWF0ZXJpYWxpemUgb24gYSBsYXRlciBzeW50aC4gT25seSBmYWlsIG9uIGEgZ2VudWluZWx5IGVtcHR5IHNlbGVjdGlvbi5cbiAgICAgIGlmICghc2VsZWN0ZWQuaXNQZW5kaW5nTG9va3VwICYmIHNlbGVjdGVkLnN1Ym5ldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGxpdGBDb25uZWN0aW9uTm9TdWJuZXRzU2VsZWN0ZWRgLCAnYHZwY1N1Ym5ldHNgIHNlbGVjdGVkIG5vIHN1Ym5ldHMgZnJvbSB0aGUgcHJvdmlkZWQgYHZwY2A7IGFkanVzdCB0aGUgc2VsZWN0aW9uIG9yIHVzZSBgc3VibmV0YCB0byB0YXJnZXQgYSBzcGVjaWZpYyBzdWJuZXQnLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxlY3RlZC5zdWJuZXRzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbm5lY3Rpb25cbiAgICovXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb25OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UucmVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb25uZWN0aW9uXG4gICAqL1xuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBjb25uZWN0aW9uQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIENvbm5lY3Rpb24uYnVpbGRDb25uZWN0aW9uQXJuKHRoaXMsIHRoaXMuY29ubmVjdGlvbk5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhZGRpdGlvbmFsIGNvbm5lY3Rpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ga2V5IHBhcmFtZXRlciBrZXlcbiAgICogQHBhcmFtIHZhbHVlIHBhcmFtZXRlciB2YWx1ZVxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZFByb3BlcnR5KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuIl19
473
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbm5lY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsbURBQXFEO0FBRXJELHNEQUF3QztBQUN4Qyw0RUFBNEU7QUFDNUUsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUUxRSxpRUFBb0U7QUFFcEU7Ozs7Ozs7R0FPRztBQUNILE1BQWEsY0FBYzs7SUFDekI7O09BRUc7SUFDSSxNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXpEOztPQUVHO0lBQ0ksTUFBTSxDQUFVLEtBQUssR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUzRDs7T0FFRztJQUNJLE1BQU0sQ0FBVSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFL0Q7O09BRUc7SUFDSSxNQUFNLENBQVUsd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUVqRzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBRTdGOztPQUVHO0lBQ0ksTUFBTSxDQUFVLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUvRDs7O09BR0c7SUFDSSxNQUFNLENBQVUsV0FBVyxHQUFHLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXZFOzs7T0FHRztJQUNJLE1BQU0sQ0FBVSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFN0Q7O09BRUc7SUFDSSxNQUFNLENBQVUsV0FBVyxHQUFHLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lB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LEVBQUUsS0FBYTtZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUM5Qjs7WUE3SFUsdURBQVU7Ozs7O0FBQVYsZ0NBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IENmbkNvbm5lY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgdHlwZSB7IElTZWNyZXRSZWYgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbGl0LCBtZW1vaXplZEdldHRlciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEsIE1ldGhvZE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlICogYXMgY29uc3RydWN0cyBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IHdhcm5PblBsYWludGV4dFNlY3JldHMgfSBmcm9tICcuL3ByaXZhdGUvc2VjcmV0LWRldGVjdGlvbic7XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgdGhlIGdsdWUgY29ubmVjdGlvblxuICpcbiAqIElmIHlvdSBuZWVkIHRvIHVzZSBhIGNvbm5lY3Rpb24gdHlwZSB0aGF0IGRvZXNuJ3QgZXhpc3QgYXMgYSBzdGF0aWMgbWVtYmVyLCB5b3VcbiAqIGNhbiBpbnN0YW50aWF0ZSBhIGBDb25uZWN0aW9uVHlwZWAgb2JqZWN0LCBlLmc6IGBuZXcgQ29ubmVjdGlvblR5cGUoJ05FV19UWVBFJylgLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZ2x1ZS1jb25uZWN0aW9uLWNvbm5lY3Rpb25pbnB1dC5odG1sI2Nmbi1nbHVlLWNvbm5lY3Rpb24tY29ubmVjdGlvbmlucHV0LWNvbm5lY3Rpb250eXBlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uVHlwZSB7XG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIHRocm91Z2ggSmF2YSBEYXRhYmFzZSBDb25uZWN0aXZpdHkgKEpEQkMpLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKREJDID0gbmV3IENvbm5lY3Rpb25UeXBlKCdKREJDJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIGFuIEFwYWNoZSBLYWZrYSBzdHJlYW1pbmcgcGxhdGZvcm0uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEtBRktBID0gbmV3IENvbm5lY3Rpb25UeXBlKCdLQUZLQScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBhIE1vbmdvREIgZG9jdW1lbnQgZGF0YWJhc2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PTkdPREIgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ01PTkdPREInKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdXNlZCBmb3IgdmlldyB2YWxpZGF0aW9uIGJ5IEFtYXpvbiBSZWRzaGlmdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVklFV19WQUxJREFUSU9OX1JFRFNISUZUID0gbmV3IENvbm5lY3Rpb25UeXBlKCdWSUVXX1ZBTElEQVRJT05fUkVEU0hJRlQnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdXNlZCBmb3IgdmlldyB2YWxpZGF0aW9uIGJ5IEFtYXpvbiBBdGhlbmEuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZJRVdfVkFMSURBVElPTl9BVEhFTkEgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1ZJRVdfVkFMSURBVElPTl9BVEhFTkEnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIG5ldHdvcmsgY29ubmVjdGlvbiB0byBhIGRhdGEgc291cmNlIHdpdGhpbiBhbiBBbWF6b24gVmlydHVhbCBQcml2YXRlIENsb3VkIGVudmlyb25tZW50IChBbWF6b24gVlBDKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkVUV09SSyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnTkVUV09SSycpO1xuXG4gIC8qKlxuICAgKiBVc2VzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgY29udGFpbmVkIGluIGEgY29ubmVjdG9yIHB1cmNoYXNlZCBmcm9tIEFXUyBNYXJrZXRwbGFjZVxuICAgKiB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIGRhdGEgc3RvcmVzIHRoYXQgYXJlIG5vdCBuYXRpdmVseSBzdXBwb3J0ZWQgYnkgQVdTIEdsdWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BUktFVFBMQUNFID0gbmV3IENvbm5lY3Rpb25UeXBlKCdNQVJLRVRQTEFDRScpO1xuXG4gIC8qKlxuICAgKiBVc2VzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgY29udGFpbmVkIGluIGEgY3VzdG9tIGNvbm5lY3RvciB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIGRhdGEgc3RvcmVzXG4gICAqIHRoYXQgYXJlIG5vdCBuYXRpdmVseSBzdXBwb3J0ZWQgYnkgQVdTIEdsdWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENVU1RPTSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnQ1VTVE9NJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEZhY2Vib29rIEFkcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRkFDRUJPT0tBRFMgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0ZBQ0VCT09LQURTJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEdvb2dsZSBBZHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdPT0dMRUFEUyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnR09PR0xFQURTJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEdvb2dsZSBTaGVldHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdPT0dMRVNIRUVUUyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnR09PR0xFU0hFRVRTJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEdvb2dsZSBBbmFseXRpY3MgNC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR09PR0xFQU5BTFlUSUNTNCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnR09PR0xFQU5BTFlUSUNTNCcpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBIdWJTcG90LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBIVUJTUE9UID0gbmV3IENvbm5lY3Rpb25UeXBlKCdIVUJTUE9UJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEluc3RhZ3JhbSBBZHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOU1RBR1JBTUFEUyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnSU5TVEFHUkFNQURTJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEludGVyY29tLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTlRFUkNPTSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnSU5URVJDT00nKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gSmlyYSBDbG91ZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSklSQUNMT1VEID0gbmV3IENvbm5lY3Rpb25UeXBlKCdKSVJBQ0xPVUQnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gQWRvYmUgTWFya2V0byBFbmdhZ2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BUktFVE8gPSBuZXcgQ29ubmVjdGlvblR5cGUoJ01BUktFVE8nKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gT3JhY2xlIE5ldFN1aXRlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBORVRTVUlURUVSUCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnTkVUU1VJVEVFUlAnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gU2FsZXNmb3JjZSB1c2luZyBPQXV0aCBhdXRoZW50aWNhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0FMRVNGT1JDRSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU0FMRVNGT1JDRScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBTYWxlc2ZvcmNlIE1hcmtldGluZyBDbG91ZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0FMRVNGT1JDRU1BUktFVElOR0NMT1VEID0gbmV3IENvbm5lY3Rpb25UeXBlKCdTQUxFU0ZPUkNFTUFSS0VUSU5HQ0xPVUQnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gU2FsZXNmb3JjZSBNYXJrZXRpbmcgQ2xvdWQgQWNjb3VudCBFbmdhZ2VtZW50IChNQ0FFKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0FMRVNGT1JDRVBBUkRPVCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU0FMRVNGT1JDRVBBUkRPVCcpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBTQVAgT0RhdGEuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBUE9EQVRBID0gbmV3IENvbm5lY3Rpb25UeXBlKCdTQVBPREFUQScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBTZXJ2aWNlTm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVJWSUNFTk9XID0gbmV3IENvbm5lY3Rpb25UeXBlKCdTRVJWSUNFTk9XJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFNsYWNrLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTTEFDSyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU0xBQ0snKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gU25hcGNoYXQgQWRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTTkFQQ0hBVEFEUyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU05BUENIQVRBRFMnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gU3RyaXBlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVFJJUEUgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NUUklQRScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBaZW5kZXNrLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBaRU5ERVNLID0gbmV3IENvbm5lY3Rpb25UeXBlKCdaRU5ERVNLJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFpvaG8gQ1JNLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBaT0hPQ1JNID0gbmV3IENvbm5lY3Rpb25UeXBlKCdaT0hPQ1JNJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEdvb2dsZSBCaWdRdWVyeS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQklHUVVFUlkgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0JJR1FVRVJZJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEF6dXJlIFNRTCBEYXRhYmFzZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVpVUkVTUUwgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0FaVVJFU1FMJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEF6dXJlIENvc21vcyBEQi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVpVUkVDT1NNT1MgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0FaVVJFQ09TTU9TJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9QRU5TRUFSQ0ggPSBuZXcgQ29ubmVjdGlvblR5cGUoJ09QRU5TRUFSQ0gnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gTXlTUUwuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1ZU1FMID0gbmV3IENvbm5lY3Rpb25UeXBlKCdNWVNRTCcpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBQb3N0Z3JlU1FMLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQT1NUR1JFU1FMID0gbmV3IENvbm5lY3Rpb25UeXBlKCdQT1NUR1JFU1FMJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIE9yYWNsZSBEYXRhYmFzZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT1JBQ0xFID0gbmV3IENvbm5lY3Rpb25UeXBlKCdPUkFDTEUnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gTWljcm9zb2Z0IFNRTCBTZXJ2ZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNRTFNFUlZFUiA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU1FMU0VSVkVSJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFNBUCBIQU5BLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTQVBIQU5BID0gbmV3IENvbm5lY3Rpb25UeXBlKCdTQVBIQU5BJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFRlcmFkYXRhLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBURVJBREFUQSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnVEVSQURBVEEnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gVmVydGljYS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSVElDQSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnVkVSVElDQScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBBbWF6b24gRHluYW1vREIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERZTkFNT0RCID0gbmV3IENvbm5lY3Rpb25UeXBlKCdEWU5BTU9EQicpO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGlzIENvbm5lY3Rpb25UeXBlLCBhcyBleHBlY3RlZCBieSBDb25uZWN0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb25uZWN0aW9uIHR5cGUgbmFtZSBhcyBleHBlY3RlZCBieSBDb25uZWN0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgYSBjcmVhdGVkIG9yIGFuIGltcG9ydGVkIGBDb25uZWN0aW9uYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb25uZWN0aW9uIGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29ubmVjdGlvblxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb25uZWN0aW9uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25Bcm46IHN0cmluZztcbn1cblxuLyoqXG4gKiBWUEMgbmV0d29yayBwbGFjZW1lbnQgZm9yIGEgR2x1ZSBgQ29ubmVjdGlvbmAuXG4gKlxuICogQSBHbHVlIGNvbm5lY3Rpb24gdGFyZ2V0cyBhIHNpbmdsZSBzdWJuZXQuIENob29zZSB0aGUgcGxhY2VtZW50IHdpdGggb25lIG9mXG4gKiB0aGUgbXV0dWFsbHktZXhjbHVzaXZlIGZhY3RvcmllcyDigJQgYW4gZXhwbGljaXQgc3VibmV0LCBvciBhIFZQQyB0byBzZWxlY3Qgb25lXG4gKiBmcm9tIOKAlCBzbyBhIHN1Ym5ldCBwYWlyZWQgd2l0aCBhIFZQQywgb3IgYSBzdWJuZXQgc2VsZWN0aW9uIHdpdGhvdXQgYSBWUEMsXG4gKiBjYW5ub3QgYmUgZXhwcmVzc2VkLlxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbk5ldHdvcmsge1xuICAvKipcbiAgICogUGluIHRoZSBjb25uZWN0aW9uIHRvIGEgc3BlY2lmaWMgc3VibmV0LlxuICAgKlxuICAgKiBAcGFyYW0gc3VibmV0IHRoZSBzdWJuZXQgdGhlIGNvbm5lY3Rpb24gdGFyZ2V0cy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3VibmV0KHN1Ym5ldDogZWMyLklTdWJuZXQpOiBDb25uZWN0aW9uTmV0d29yayB7XG4gICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uTmV0d29yayhzdWJuZXQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhlIGNvbm5lY3Rpb24ncyBzdWJuZXQgZnJvbSBhIFZQQy4gU2luY2UgYSBHbHVlIGNvbm5lY3Rpb24gdGFyZ2V0c1xuICAgKiBhIHNpbmdsZSBzdWJuZXQsIHRoZSBmaXJzdCBzdWJuZXQgb2YgdGhlIHNlbGVjdGlvbiBpcyB1c2VkLlxuICAgKlxuICAgKiBAcGFyYW0gdnBjIHRoZSBWUEMgdG8gc2VsZWN0IGEgc3VibmV0IGZyb20uXG4gICAqIEBwYXJhbSB2cGNTdWJuZXRzIHdoaWNoIHN1Ym5ldHMgdG8gc2VsZWN0IGZyb20uXG4gICAqIEBkZWZhdWx0IHZwY1N1Ym5ldHMgLSBwcml2YXRlIHN1Ym5ldHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdnBjKHZwYzogZWMyLklWcGMsIHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uKTogQ29ubmVjdGlvbk5ldHdvcmsge1xuICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbk5ldHdvcmsodW5kZWZpbmVkLCB2cGMsIHZwY1N1Ym5ldHMpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX3N1Ym5ldD86IGVjMi5JU3VibmV0O1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfdnBjPzogZWMyLklWcGM7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF92cGNTdWJuZXRzPzogZWMyLlN1Ym5ldFNlbGVjdGlvbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHN1Ym5ldD86IGVjMi5JU3VibmV0LCB2cGM/OiBlYzIuSVZwYywgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb24pIHtcbiAgICB0aGlzLl9zdWJuZXQgPSBzdWJuZXQ7XG4gICAgdGhpcy5fdnBjID0gdnBjO1xuICAgIHRoaXMuX3ZwY1N1Ym5ldHMgPSB2cGNTdWJuZXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIHNpbmdsZSBzdWJuZXQgdGhpcyBuZXR3b3JrIHRhcmdldHMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9yZXNvbHZlU3VibmV0KHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCk6IGVjMi5JU3VibmV0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5fc3VibmV0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3VibmV0O1xuICAgIH1cbiAgICAvLyBBIEdsdWUgY29ubmVjdGlvbiB0YXJnZXRzIGEgc2luZ2xlIHN1Ym5ldCwgc28gdXNlIHRoZSBmaXJzdCBzdWJuZXQgb2YgdGhlIHNlbGVjdGlvbi5cbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuX3ZwYyEuc2VsZWN0U3VibmV0cyh0aGlzLl92cGNTdWJuZXRzKTtcbiAgICAvLyBgaXNQZW5kaW5nTG9va3VwYCBpcyB0cnVlIGZvciBpbXBvcnRlZCBWUENzIHdob3NlIHN1Ym5ldHMgYXJlIG5vdCB5ZXRcbiAgICAvLyByZXNvbHZlZCAoZS5nLiBgZnJvbUxvb2t1cGApLCB3aGVyZSBhbiBlbXB0eSBzZWxlY3Rpb24gaXMgZXhwZWN0ZWQgYW5kXG4gICAgLy8gd2lsbCBtYXRlcmlhbGl6ZSBvbiBhIGxhdGVyIHN5bnRoLiBPbmx5IGZhaWwgb24gYSBnZW51aW5lbHkgZW1wdHkgc2VsZWN0aW9uLlxuICAgIGlmICghc2VsZWN0ZWQuaXNQZW5kaW5nTG9va3VwICYmIHNlbGVjdGVkLnN1Ym5ldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgQ29ubmVjdGlvbk5vU3VibmV0c1NlbGVjdGVkYCwgJ2B2cGNTdWJuZXRzYCBzZWxlY3RlZCBubyBzdWJuZXRzIGZyb20gdGhlIHByb3ZpZGVkIGB2cGNgOyBhZGp1c3QgdGhlIHNlbGVjdGlvbiBvciB1c2UgYENvbm5lY3Rpb25OZXR3b3JrLnN1Ym5ldCguLi4pYCB0byB0YXJnZXQgYSBzcGVjaWZpYyBzdWJuZXQnLCBzY29wZSk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZC5zdWJuZXRzWzBdO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBDb25uZWN0aW9uIE9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29ubmVjdGlvblxuICAgKiBAZGVmYXVsdCBjbG91ZGZvcm1hdGlvbiBnZW5lcmF0ZWQgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29ubmVjdGlvbi5cbiAgICogQGRlZmF1bHQgbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAgS2V5LVZhbHVlIHBhaXJzIHRoYXQgZGVmaW5lIHBhcmFtZXRlcnMgZm9yIHRoZSBjb25uZWN0aW9uLlxuICAgKiAgQGRlZmF1bHQgZW1wdHkgcHJvcGVydGllc1xuICAgKiAgQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvYXdzLWdsdWUtcHJvZ3JhbW1pbmctZXRsLWNvbm5lY3QuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydGllcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIGEgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBob2xkaW5nIHRoZSBjcmVkZW50aWFscyBmb3IgdGhpcyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBUaGUgc2VjcmV0IGlzIHJlZmVyZW5jZWQgdGhyb3VnaCB0aGUgY29ubmVjdGlvbidzIGBTRUNSRVRfSURgIHByb3BlcnR5LCBzb1xuICAgKiBHbHVlIHJlYWRzIHRoZSBjcmVkZW50aWFscyBhdCBydW50aW1lIGFuZCB0aGUgc2VjcmV0IHZhbHVlIG5ldmVyIGFwcGVhcnMgaW5cbiAgICogdGhlIHN5bnRoZXNpemVkIHRlbXBsYXRlLiBQcmVmZXIgdGhpcyBvdmVyIHBsYWNpbmcgY3JlZGVudGlhbHMgZGlyZWN0bHkgaW5cbiAgICogYHByb3BlcnRpZXNgLiBBY2NlcHRzIGFueSBgc2VjcmV0c21hbmFnZXIuSVNlY3JldGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2VjcmV0OyBhbnkgY3JlZGVudGlhbHMgbXVzdCBiZSBzdXBwbGllZCB2aWEgYHByb3BlcnRpZXNgXG4gICAqL1xuICByZWFkb25seSBzZWNyZXQ/OiBJU2VjcmV0UmVmO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY3JpdGVyaWEgdGhhdCBjYW4gYmUgdXNlZCBpbiBzZWxlY3RpbmcgdGhpcyBjb25uZWN0aW9uLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZmlsdGVyaW5nIHRoZSByZXN1bHRzIG9mIGh0dHBzOi8vYXdzY2xpLmFtYXpvbmF3cy5jb20vdjIvZG9jdW1lbnRhdGlvbi9hcGkvbGF0ZXN0L3JlZmVyZW5jZS9nbHVlL2dldC1jb25uZWN0aW9ucy5odG1sXG4gICAqIEBkZWZhdWx0IG5vIG1hdGNoIGNyaXRlcmlhXG4gICAqL1xuICByZWFkb25seSBtYXRjaENyaXRlcmlhPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHNlY3VyaXR5IGdyb3VwcyBuZWVkZWQgdG8gc3VjY2Vzc2Z1bGx5IG1ha2UgdGhpcyBjb25uZWN0aW9uIGUuZy4gdG8gc3VjY2Vzc2Z1bGx5IGNvbm5lY3QgdG8gVlBDLlxuICAgKiBAZGVmYXVsdCBubyBzZWN1cml0eSBncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM/OiBlYzIuSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogVGhlIFZQQyBuZXR3b3JrIHBsYWNlbWVudCBmb3IgdGhpcyBjb25uZWN0aW9uLCBzbyBpdCBjYW4gcmVhY2ggcmVzb3VyY2VzXG4gICAqIGluc2lkZSBhIFZQQy4gU2VlIG1vcmUgYXQgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL3N0YXJ0LWNvbm5lY3RpbmcuaHRtbC5cbiAgICpcbiAgICogQnVpbGQgaXQgd2l0aCBgQ29ubmVjdGlvbk5ldHdvcmsuc3VibmV0KHN1Ym5ldClgIHRvIHBpbiBhIHNwZWNpZmljIHN1Ym5ldCxcbiAgICogb3IgYENvbm5lY3Rpb25OZXR3b3JrLnZwYyh2cGMsIHZwY1N1Ym5ldHM/KWAgdG8gbGV0IHRoZSBDREsgc2VsZWN0IG9uZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBWUEMgbmV0d29yayBwbGFjZW1lbnRcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBDb25uZWN0aW9uTmV0d29yaztcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYENvbm5lY3Rpb25gXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblByb3BzIGV4dGVuZHMgQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IENvbm5lY3Rpb25UeXBlO1xufVxuXG4vKipcbiAqIEFuIEFXUyBHbHVlIGNvbm5lY3Rpb24gdG8gYSBkYXRhIHNvdXJjZS5cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb24gZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJQ29ubmVjdGlvbiB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuQ29ubmVjdGlvbic7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIGNvbnN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBpZC5cbiAgICogQHBhcmFtIGNvbm5lY3Rpb25Bcm4gYXJuIG9mIGV4dGVybmFsIGNvbm5lY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db25uZWN0aW9uQXJuKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29ubmVjdGlvbkFybjogc3RyaW5nKTogSUNvbm5lY3Rpb24ge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElDb25uZWN0aW9uIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uTmFtZSA9IGNkay5Bcm4uZXh0cmFjdFJlc291cmNlTmFtZShjb25uZWN0aW9uQXJuLCAnY29ubmVjdGlvbicpO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25Bcm4gPSBjb25uZWN0aW9uQXJuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gY29uc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhbiBleHRlcm5hbCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApLlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCdzIGlkLlxuICAgKiBAcGFyYW0gY29ubmVjdGlvbk5hbWUgbmFtZSBvZiBleHRlcm5hbCBjb25uZWN0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29ubmVjdGlvbk5hbWUoc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25uZWN0aW9uTmFtZTogc3RyaW5nKTogSUNvbm5lY3Rpb24ge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElDb25uZWN0aW9uIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uTmFtZSA9IGNvbm5lY3Rpb25OYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25Bcm4gPSBDb25uZWN0aW9uLmJ1aWxkQ29ubmVjdGlvbkFybihzY29wZSwgY29ubmVjdGlvbk5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBidWlsZENvbm5lY3Rpb25Bcm4oc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBjb25uZWN0aW9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2RrLlN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ2dsdWUnLFxuICAgICAgcmVzb3VyY2U6ICdjb25uZWN0aW9uJyxcbiAgICAgIHJlc291cmNlTmFtZTogY29ubmVjdGlvbk5hbWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29ubmVjdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLmNvbm5lY3Rpb25OYW1lLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHMucHJvcGVydGllcyB8fCB7fTtcblxuICAgIGNvbnN0IHN1Ym5ldCA9IHByb3BzLm5ldHdvcms/Ll9yZXNvbHZlU3VibmV0KHRoaXMpO1xuXG4gICAgY29uc3QgcGh5c2ljYWxDb25uZWN0aW9uUmVxdWlyZW1lbnRzID0gc3VibmV0IHx8IHByb3BzLnNlY3VyaXR5R3JvdXBzID8ge1xuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogc3VibmV0ID8gc3VibmV0LmF2YWlsYWJpbGl0eVpvbmUgOiB1bmRlZmluZWQsXG4gICAgICBzdWJuZXRJZDogc3VibmV0ID8gc3VibmV0LnN1Ym5ldElkIDogdW5kZWZpbmVkLFxuICAgICAgc2VjdXJpdHlHcm91cElkTGlzdDogcHJvcHMuc2VjdXJpdHlHcm91cHMgPyBwcm9wcy5zZWN1cml0eUdyb3Vwcy5tYXAoc2cgPT4gc2cuc2VjdXJpdHlHcm91cElkKSA6IHVuZGVmaW5lZCxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgc2VjcmV0SWQgPSBwcm9wcy5zZWNyZXQ/LnNlY3JldFJlZi5zZWNyZXRJZDtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuQ29ubmVjdGlvbih0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjYXRhbG9nSWQ6IGNkay5TdGFjay5vZih0aGlzKS5hY2NvdW50LFxuICAgICAgY29ubmVjdGlvbklucHV0OiB7XG4gICAgICAgIGNvbm5lY3Rpb25Qcm9wZXJ0aWVzOiBjZGsuTGF6eS5hbnkoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIEluc3BlY3QgdGhlIGZpbmFsIHByb3BlcnR5IHNldCBhdCBzeW50aGVzaXMgdGltZSBzbyBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAvLyBhZGRlZCB2aWEgYGFkZFByb3BlcnR5YCBhcmUgY292ZXJlZCBhcyB3ZWxsIOKAlCBhIGBTRUNSRVRfSURgIGFkZGVkXG4gICAgICAgICAgICAvLyBhZnRlciBjb25zdHJ1Y3Rpb24gd291bGQgb3RoZXJ3aXNlIGJlIHNpbGVudGx5IG92ZXJ3cml0dGVuIGJ5IHRoZVxuICAgICAgICAgICAgLy8gb25lIGluamVjdGVkIGZyb20gYHNlY3JldGAuXG4gICAgICAgICAgICBpZiAoc2VjcmV0SWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnByb3BlcnRpZXMuU0VDUkVUX0lEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YENvbm5lY3Rpb25TZWNyZXRDb25mbGljdGAsICdjYW5ub3Qgc2V0IGJvdGggYHNlY3JldGAgYW5kIGEgYFNFQ1JFVF9JRGAgY29ubmVjdGlvbiBwcm9wZXJ0eScsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGhlIGBTRUNSRVRfSURgIGluamVjdGVkIGZyb20gYHNlY3JldGAgaXMgYSByZWZlcmVuY2UsIG5vdCBhXG4gICAgICAgICAgICAvLyBjcmVkZW50aWFsLCBzbyBpdCBpcyBtZXJnZWQgaW4gYWZ0ZXIgdGhpcyBzY2FuLlxuICAgICAgICAgICAgd2Fybk9uUGxhaW50ZXh0U2VjcmV0cyhcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAnQGF3cy1jZGsvYXdzLWdsdWUtYWxwaGE6cGxhaW50ZXh0Q29ubmVjdGlvblNlY3JldCcsXG4gICAgICAgICAgICAgICdQYXNzIGEgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCB2aWEgdGhlIGNvbm5lY3Rpb25cXCdzIGBzZWNyZXRgIHByb3BlcnR5IGluc3RlYWQuJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gc2VjcmV0SWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IHsgLi4udGhpcy5wcm9wZXJ0aWVzLCBTRUNSRVRfSUQ6IHNlY3JldElkIH1cbiAgICAgICAgICAgICAgOiB0aGlzLnByb3BlcnRpZXM7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcGVydGllcykubGVuZ3RoID4gMCA/IHByb3BlcnRpZXMgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIGNvbm5lY3Rpb25UeXBlOiBwcm9wcy50eXBlLm5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgICAgbWF0Y2hDcml0ZXJpYTogcHJvcHMubWF0Y2hDcml0ZXJpYSxcbiAgICAgICAgbmFtZTogcHJvcHMuY29ubmVjdGlvbk5hbWUsXG4gICAgICAgIHBoeXNpY2FsQ29ubmVjdGlvblJlcXVpcmVtZW50cyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbm5lY3Rpb25cbiAgICovXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb25OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UucmVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb25uZWN0aW9uXG4gICAqL1xuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBjb25uZWN0aW9uQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIENvbm5lY3Rpb24uYnVpbGRDb25uZWN0aW9uQXJuKHRoaXMsIHRoaXMuY29ubmVjdGlvbk5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhZGRpdGlvbmFsIGNvbm5lY3Rpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ga2V5IHBhcmFtZXRlciBrZXlcbiAgICogQHBhcmFtIHZhbHVlIHBhcmFtZXRlciB2YWx1ZVxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZFByb3BlcnR5KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuIl19
@@ -223,6 +223,23 @@ export declare enum PythonVersion {
223
223
  */
224
224
  THREE_NINE = "3.9"
225
225
  }
226
+ /**
227
+ * The set of pre-installed Python libraries available to a Python shell job running Python 3.9.
228
+ *
229
+ * @see https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html#python-shell-supported-library
230
+ */
231
+ export declare enum LibrarySet {
232
+ /**
233
+ * Include the common analytics libraries for Python 3.9 (e.g. pandas, numpy, scikit-learn,
234
+ * awswrangler).
235
+ */
236
+ ANALYTICS = "analytics",
237
+ /**
238
+ * Do not install the common library set. Use this when your libraries are custom or conflict
239
+ * with the pre-installed ones.
240
+ */
241
+ NONE = "none"
242
+ }
226
243
  /**
227
244
  * AWS Glue runtime determines the runtime engine of the job.
228
245
  *