@rio-cloud/cdk-v2-constructs 8.2.1 → 8.4.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 (30) hide show
  1. package/.jsii +802 -145
  2. package/README.md +1 -0
  3. package/docs/AGENTS_DOCUMENTATION.md +64 -0
  4. package/docs/AGENTS_RIO_INFRASTRUCTURE_GUIDE.md +56 -0
  5. package/lib/backup/backup-policy.d.ts +7 -0
  6. package/lib/backup/backup-policy.js +8 -1
  7. package/lib/contributions/team-shipper-inbound-blue/pipeline/code-build-project.d.ts +64 -0
  8. package/lib/contributions/team-shipper-inbound-blue/pipeline/code-build-project.js +88 -0
  9. package/lib/contributions/team-shipper-inbound-blue/pipeline/index.d.ts +2 -0
  10. package/lib/contributions/team-shipper-inbound-blue/pipeline/index.js +19 -0
  11. package/lib/contributions/team-shipper-inbound-blue/pipeline/pipeline-build-stage-actions.d.ts +81 -0
  12. package/lib/contributions/team-shipper-inbound-blue/pipeline/pipeline-build-stage-actions.js +57 -0
  13. package/lib/datadogv2/datadog-slo.d.ts +7 -0
  14. package/lib/datadogv2/datadog-slo.js +8 -1
  15. package/lib/fargate/rio-fargate-service.d.ts +45 -0
  16. package/lib/fargate/rio-fargate-service.js +46 -1
  17. package/lib/index.d.ts +2 -3
  18. package/lib/index.js +3 -4
  19. package/lib/kafka/kafka-topic.d.ts +22 -1
  20. package/lib/kafka/kafka-topic.js +23 -2
  21. package/lib/pipeline/delivery-performance-monitoring-override.d.ts +36 -0
  22. package/lib/pipeline/delivery-performance-monitoring-override.js +49 -0
  23. package/lib/pipeline/index.d.ts +4 -0
  24. package/lib/pipeline/index.js +21 -0
  25. package/lib/pipeline/rio-pipeline-type.d.ts +5 -0
  26. package/lib/pipeline/rio-pipeline-type.js +6 -1
  27. package/lib/rio-landing-zone.d.ts +12 -1
  28. package/lib/rio-landing-zone.js +13 -2
  29. package/package.json +6 -3
  30. package/version.json +1 -1
@@ -319,6 +319,51 @@ export declare enum DataDogLoggingMode {
319
319
  */
320
320
  NONE = 3
321
321
  }
322
+ /**
323
+ * Creates an opinionated ECS Fargate service for RIO applications.
324
+ *
325
+ * This construct bundles the pieces that most RIO backend services need:
326
+ * an ECS task definition, the application container, a Datadog sidecar,
327
+ * optional FireLens log routing, optional ALB target group wiring, and the
328
+ * ECS Fargate service itself.
329
+ *
330
+ * It also derives Datadog tags and environment variables from `stage`,
331
+ * `serviceName`, `version`, the AWS account, and the standard RIO landing-zone
332
+ * SSM parameters. Do not set `DD_ENV`, `DD_SERVICE`, `DD_VERSION`, `DD_TAGS`,
333
+ * or `DD_LOGS_INJECTION` manually in the application container environment.
334
+ *
335
+ * Use this construct when you want the RIO paved road for a web-facing or
336
+ * service-style Fargate workload and you want the defaults for observability,
337
+ * Datadog service catalog registration, and common AWS wiring to be handled
338
+ * for you.
339
+ * If you need a fully custom ECS setup, or a different deployment strategy
340
+ * such as blue/green, use a lower-level construct or the blue/green variant
341
+ * instead.
342
+ *
343
+ * To use it, provide:
344
+ * - `stage`, `serviceName`, and `version` for service identity
345
+ * - `vpc` and optionally an existing `cluster`
346
+ * - `containerDefinitionOption.image` for the application image
347
+ * - `fargateOptions.cpu` and `fargateOptions.memoryLimitMiB` for task sizing
348
+ * - optional `datadogOptions`, `frameworks`, and `loadBalancerOptions`
349
+ *
350
+ * Example:
351
+ * ```ts
352
+ * const service = new RioFargateService(this, 'Service', {
353
+ * stage: 'prod',
354
+ * serviceName: 'billing-view',
355
+ * version: process.env.GIT_VERSION ?? 'local',
356
+ * vpc: RioLandingZone.getDefaultVpc(this),
357
+ * containerDefinitionOption: {
358
+ * image: ecs.ContainerImage.fromRegistry('example/billing-view:latest'),
359
+ * },
360
+ * fargateOptions: {
361
+ * cpu: 512,
362
+ * memoryLimitMiB: 1024,
363
+ * },
364
+ * });
365
+ * ```
366
+ */
322
367
  export declare class RioFargateService extends constructs.Construct implements ec2.IConnectable {
323
368
  private static readonly DD_ENV_DENY_LIST;
324
369
  private static readonly DD_TAG_DENY_LIST;
@@ -44,6 +44,51 @@ var DataDogLoggingMode;
44
44
  */
45
45
  DataDogLoggingMode[DataDogLoggingMode["NONE"] = 3] = "NONE";
46
46
  })(DataDogLoggingMode || (exports.DataDogLoggingMode = DataDogLoggingMode = {}));
47
+ /**
48
+ * Creates an opinionated ECS Fargate service for RIO applications.
49
+ *
50
+ * This construct bundles the pieces that most RIO backend services need:
51
+ * an ECS task definition, the application container, a Datadog sidecar,
52
+ * optional FireLens log routing, optional ALB target group wiring, and the
53
+ * ECS Fargate service itself.
54
+ *
55
+ * It also derives Datadog tags and environment variables from `stage`,
56
+ * `serviceName`, `version`, the AWS account, and the standard RIO landing-zone
57
+ * SSM parameters. Do not set `DD_ENV`, `DD_SERVICE`, `DD_VERSION`, `DD_TAGS`,
58
+ * or `DD_LOGS_INJECTION` manually in the application container environment.
59
+ *
60
+ * Use this construct when you want the RIO paved road for a web-facing or
61
+ * service-style Fargate workload and you want the defaults for observability,
62
+ * Datadog service catalog registration, and common AWS wiring to be handled
63
+ * for you.
64
+ * If you need a fully custom ECS setup, or a different deployment strategy
65
+ * such as blue/green, use a lower-level construct or the blue/green variant
66
+ * instead.
67
+ *
68
+ * To use it, provide:
69
+ * - `stage`, `serviceName`, and `version` for service identity
70
+ * - `vpc` and optionally an existing `cluster`
71
+ * - `containerDefinitionOption.image` for the application image
72
+ * - `fargateOptions.cpu` and `fargateOptions.memoryLimitMiB` for task sizing
73
+ * - optional `datadogOptions`, `frameworks`, and `loadBalancerOptions`
74
+ *
75
+ * Example:
76
+ * ```ts
77
+ * const service = new RioFargateService(this, 'Service', {
78
+ * stage: 'prod',
79
+ * serviceName: 'billing-view',
80
+ * version: process.env.GIT_VERSION ?? 'local',
81
+ * vpc: RioLandingZone.getDefaultVpc(this),
82
+ * containerDefinitionOption: {
83
+ * image: ecs.ContainerImage.fromRegistry('example/billing-view:latest'),
84
+ * },
85
+ * fargateOptions: {
86
+ * cpu: 512,
87
+ * memoryLimitMiB: 1024,
88
+ * },
89
+ * });
90
+ * ```
91
+ */
47
92
  class RioFargateService extends constructs.Construct {
48
93
  constructor(scope, id, props) {
49
94
  super(scope, id);
@@ -322,4 +367,4 @@ class FirelensSideCarValidator {
322
367
  return result;
323
368
  }
324
369
  }
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlvLWZhcmdhdGUtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYXJnYXRlL3Jpby1mYXJnYXRlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBbUM7QUFFbkMsMkNBQTJDO0FBQzNDLGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLHlDQUF5QztBQUN6Qyw0Q0FBK0U7QUFDL0UscUNBQXFDO0FBQ3JDLHFDQUFrQztBQThEbEMsSUFBWSxTQUtYO0FBTEQsV0FBWSxTQUFTO0lBQ25COztPQUVHO0lBQ0gsNkNBQU0sQ0FBQTtBQUNSLENBQUMsRUFMVyxTQUFTLHlCQUFULFNBQVMsUUFLcEI7QUFvUUQsSUFBWSxrQkEwQlg7QUExQkQsV0FBWSxrQkFBa0I7SUFDNUI7OztPQUdHO0lBQ0gsNkVBQWEsQ0FBQTtJQUViOzs7Ozs7T0FNRztJQUNILG1GQUFnQixDQUFBO0lBRWhCOzs7T0FHRztJQUNILG1HQUF3QixDQUFBO0lBRXhCOztPQUVHO0lBQ0gsMkRBQUksQ0FBQTtBQUNOLENBQUMsRUExQlcsa0JBQWtCLGtDQUFsQixrQkFBa0IsUUEwQjdCO0FBRUQsTUFBYSxpQkFBa0IsU0FBUSxVQUFVLENBQUMsU0FBUztJQXlDekQsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNoRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBNUJGLHdDQUFtQyxHQUFhLEVBQUUsQ0FBQztRQUNuRCxnQ0FBMkIsR0FBRyxFQUFFLENBQUM7UUFDakMsNkNBQXdDLEdBQUcsR0FBRyxDQUFDO1FBQy9DLHNDQUFpQyxHQUFHLElBQUksQ0FBQztRQUN6QywwQ0FBcUMsR0FBRyxJQUFJLENBQUM7UUFDN0MsK0NBQTBDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRCxxQ0FBZ0MsR0FBRyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RSw2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Q0Y7QUFFRCxNQUFNLHVCQUF1QjtJQUMzQixZQUE2QixjQUF3QztRQUF4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBMEI7SUFBRyxDQUFDO0lBQ3pFLFFBQVE7UUFDTixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFDRSxJQUFJLENBQUMsY0FBYztZQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixLQUFLLEtBQUs7WUFDakQsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsRUFDM0MsQ0FBQztZQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsNkVBQTZFLENBQUMsQ0FBQztRQUM3RixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBRUQsTUFBTSx3QkFBd0I7SUFDNUIsWUFBNkIsY0FBd0M7UUFBeEMsbUJBQWMsR0FBZCxjQUFjLENBQTBCO0lBQUcsQ0FBQztJQUV6RSxRQUFRO1FBQ04sTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sY0FBYyxHQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixJQUFJLGtCQUFrQixDQUFDLGFBQWE7Z0JBQzdFLElBQUksQ0FBQyxjQUFjLENBQUMsMEJBQTBCLElBQUksa0JBQWtCLENBQUMsYUFBYSxDQUFDO1lBQ3JGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQztZQUVqSCxJQUFJLENBQUMsY0FBYyxJQUFJLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQ1Qsd0hBQXdILENBQ3pILENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQgKiBhcyBlbGJ2MiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRGF0YWRvZ1NlcnZpY2VDYXRhbG9nRW50cnksIERhdGFkb2dTaGFyZWRTZWNyZXQgfSBmcm9tICcuLi9kYXRhZG9ndjInO1xuaW1wb3J0ICogYXMgZGF0YWRvZyBmcm9tICcuL2RhdGFkb2cnO1xuaW1wb3J0IHsgU3ByaW5nIH0gZnJvbSAnLi9zcHJpbmcnO1xuXG4vKipcbiAqIEZhcmdhdGUgVGFzayBEZWZpbml0aW9uIFByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmlvRmFyZ2F0ZVNlcnZpY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhZ2Ugb2YgdGhlIHNlcnZpY2UsIGUuZy4gJ3Byb2QnLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE5hbWUgb2YgdGhlIHNlcnZpY2UuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgc2VydmljZSwgZS5nLiB0aGUgZ2l0IGhhc2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWl0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnJhbWV3b3JrcyBpbiB1c2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gTm8gZnJhbWV3b3Jrcy5cbiAgICovXG4gIHJlYWRvbmx5IGZyYW1ld29ya3M/OiBGcmFtZXdvcmtbXTtcblxuICAvKipcbiAgICogVGhlIFZQQyBvZiB0aGUgc2VydmljZSdzIGVjcy5DbHVzdGVyIGlmIG5vIGNsdXN0ZXIgaXMgZXhwbGljaXRseSBwYXNzZWQgYXMgcHJvcC5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFRoZSBGYXJnYXRlIGNsdXN0ZXIgdG8gcnVuIHRoZSBzZXJ2aWNlIGluLlxuICAgKiBJZiBub3QgbnVsbCwgdGhlIGNsdXN0ZXIudnBjIE1VU1QgbWF0Y2ggdGhlIHZwYyBwcm92aWRlZCBhcyBkaXJlY3QgYXJndW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBDcmVhdGUgYSBuZXcgRmFyZ2F0ZSBjbHVzdGVyIHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyPzogZWNzLklDbHVzdGVyO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgZGVmaW5pdGlvbiBvcHRpb25zIGxpa2UgaW1hZ2UsIGNwdSwgbWVtb3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbjogQ29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEZhcmdhdGUgVGFzayBEZWZpbml0aW9uIFByb3BlcnRpZXMuXG4gICAqL1xuICByZWFkb25seSBmYXJnYXRlT3B0aW9uczogRmFyZ2F0ZVRhc2tEZWZpbml0aW9uUHJvcHM7XG5cbiAgLyoqXG4gICAqIExvYWRiYWxhbmNlciBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEJhbGFuY2VyT3B0aW9ucz86IExvYWRCYWxhbmNlck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERhdGFkb2cgaW50ZWdyYXRpb24gcHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWRvZ09wdGlvbnM/OiBEYXRhZG9nSW50ZWdyYXRpb25Qcm9wcztcbn1cblxuZXhwb3J0IGVudW0gRnJhbWV3b3JrIHtcbiAgLyoqXG4gICAqIFNwcmluZyBGcmFtZXdvcmssIFNwcmluZyBCb290LCBhbmQgU3ByaW5nIENsb3VkIEFXUy5cbiAgICovXG4gIFNQUklORyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJEZWZpbml0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgdXNlZCB0byBzdGFydCBhIGNvbnRhaW5lci5cbiAgICpcbiAgICogVGhpcyBzdHJpbmcgaXMgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBEb2NrZXIgZGFlbW9uLlxuICAgKiBJbWFnZXMgaW4gdGhlIERvY2tlciBIdWIgcmVnaXN0cnkgYXJlIGF2YWlsYWJsZSBieSBkZWZhdWx0LlxuICAgKiBPdGhlciByZXBvc2l0b3JpZXMgYXJlIHNwZWNpZmllZCB3aXRoIGVpdGhlciByZXBvc2l0b3J5LXVybC9pbWFnZTp0YWcgb3IgcmVwb3NpdG9yeS11cmwvaW1hZ2VcXEBkaWdlc3QuXG4gICAqL1xuICByZWFkb25seSBpbWFnZTogZWNzLkNvbnRhaW5lckltYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgdG8gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogU29tZSBEYXRhZG9nIHNwZWNpZmljIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgc2V0LFxuICAgKiBiZWNhdXNlIHRoZXkgYXJlIHNldCBhdXRvbWF0aWNhbGx5IG9yIGNvbXB1dGVkIGZyb20gb3RoZXIgYXR0cmlidXRlcy5cbiAgICogVGhlc2UgYXJlOlxuICAgKiAqIEREX0VOVjogU2V0IHNhbWUgYXMgcHJvcCBzdGFnZVxuICAgKiAqIEREX1NFUlZJQ0U6IFNldCBzYW1lIGFzIHByb3Agc2VydmljZU5hbWVcbiAgICogKiBERF9WRVJTSU9OOiBTZXQgc2FtZSBhcyBwcm9wIHZlcnNpb25cbiAgICogKiBERF9UQUdTOiBTZXQgc2FtZSBhcyBEYXRhZG9nSW50ZWdyYXRpb25Qcm9wcyNhZGRpdGlvbmFsVGFnc1xuICAgKiAqIEREX0xPR1NfSU5KRUNUSU9OOiB0cnVlXG4gICAqIE90aGVyIEREXy1wcmVmaXhlZCB2YWlhYmxlIG1heSBiZSBhZGRlZCB0byB0aGlzIGxpc3QuXG4gICAqXG4gICAqIE90aGVyIEVudmlyb25tZW50IHZhcmlhYmxlcyBzZXQgYnkgZGVmYXVsdCBhcmUgb3ZlcndyaXR0ZW4gaWYgcGFzc2VkLlxuICAgKiBUaGVzZSBhcmU6XG4gICAqICogRERfU0VSVklDRV9NQVBQSU5HOiBkYXRhYmFzZTpmYXJnYXRlLXdlYi1hcHAtYXVyb3JhLGphdmEtYXdzLXNkazpmYXJnYXRlLXdlYi1hcHAtYXdzLXNkayxrYWZrYTpmYXJnYXRlLXdlYi1hcHAta2Fma2EsbXlzcWw6ZmFyZ2F0ZS13ZWItYXBwLWF1cm9yYVxuICAgKiAqIEREX1RSQUNFX1NBTVBMRV9SQVRFOiAxLjBcbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIE5vIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIHNlY3JldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gTm8gc2VjcmV0IGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHM/OiB7IFtrZXk6IHN0cmluZ106IGVjcy5TZWNyZXQgfTtcblxuICAvKipcbiAgICogVGhlIGhlYWx0aCBjaGVjayBjb21tYW5kIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIEhlYWx0aCBjaGVjayBjb25maWd1cmF0aW9uIGZyb20gY29udGFpbmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoQ2hlY2s/OiBlY3MuSGVhbHRoQ2hlY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFyZ2F0ZVRhc2tEZWZpbml0aW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjcHUgdW5pdHMgdXNlZCBieSB0aGUgdGFzay4gRm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLFxuICAgKiB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCB5b3UgbXVzdCB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzLFxuICAgKiB3aGljaCBkZXRlcm1pbmVzIHlvdXIgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgbWVtb3J5IHBhcmFtZXRlcjpcbiAgICpcbiAgICogMjU2ICguMjUgdkNQVSkgLSBBdmFpbGFibGUgbWVtb3J5IHZhbHVlczogNTEyICgwLjUgR0IpLCAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQilcbiAgICpcbiAgICogNTEyICguNSB2Q1BVKSAtIEF2YWlsYWJsZSBtZW1vcnkgdmFsdWVzOiAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQiksIDMwNzIgKDMgR0IpLCA0MDk2ICg0IEdCKVxuICAgKlxuICAgKiAxMDI0ICgxIHZDUFUpIC0gQXZhaWxhYmxlIG1lbW9yeSB2YWx1ZXM6IDIwNDggKDIgR0IpLCAzMDcyICgzIEdCKSwgNDA5NiAoNCBHQiksIDUxMjAgKDUgR0IpLCA2MTQ0ICg2IEdCKSwgNzE2OCAoNyBHQiksIDgxOTIgKDggR0IpXG4gICAqXG4gICAqIDIwNDggKDIgdkNQVSkgLSBBdmFpbGFibGUgbWVtb3J5IHZhbHVlczogQmV0d2VlbiA0MDk2ICg0IEdCKSBhbmQgMTYzODQgKDE2IEdCKSBpbiBpbmNyZW1lbnRzIG9mIDEwMjQgKDEgR0IpXG4gICAqXG4gICAqIDQwOTYgKDQgdkNQVSkgLSBBdmFpbGFibGUgbWVtb3J5IHZhbHVlczogQmV0d2VlbiA4MTkyICg4IEdCKSBhbmQgMzA3MjAgKDMwIEdCKSBpbiBpbmNyZW1lbnRzIG9mIDEwMjQgKDEgR0IpXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgNTEyXG4gICAqL1xuICByZWFkb25seSBjcHU6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGFtb3VudCAoaW4gTWlCKSBvZiBtZW1vcnkgdXNlZCBieSB0aGUgdGFzay4gRm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLFxuICAgKiB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCB5b3UgbXVzdCB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzLCB3aGljaCBkZXRlcm1pbmVzIHlvdXIgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgY3B1IHBhcmFtZXRlcjpcbiAgICpcbiAgICogNTEyICgwLjUgR0IpLCAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQikgLSBBdmFpbGFibGUgY3B1IHZhbHVlczogMjU2ICguMjUgdkNQVSlcbiAgICpcbiAgICogMTAyNCAoMSBHQiksIDIwNDggKDIgR0IpLCAzMDcyICgzIEdCKSwgNDA5NiAoNCBHQikgLSBBdmFpbGFibGUgY3B1IHZhbHVlczogNTEyICguNSB2Q1BVKVxuICAgKlxuICAgKiAyMDQ4ICgyIEdCKSwgMzA3MiAoMyBHQiksIDQwOTYgKDQgR0IpLCA1MTIwICg1IEdCKSwgNjE0NCAoNiBHQiksIDcxNjggKDcgR0IpLCA4MTkyICg4IEdCKSAtIEF2YWlsYWJsZSBjcHUgdmFsdWVzOiAxMDI0ICgxIHZDUFUpXG4gICAqXG4gICAqIEJldHdlZW4gNDA5NiAoNCBHQikgYW5kIDE2Mzg0ICgxNiBHQikgaW4gaW5jcmVtZW50cyBvZiAxMDI0ICgxIEdCKSAtIEF2YWlsYWJsZSBjcHUgdmFsdWVzOiAyMDQ4ICgyIHZDUFUpXG4gICAqXG4gICAqIEJldHdlZW4gODE5MiAoOCBHQikgYW5kIDMwNzIwICgzMCBHQikgaW4gaW5jcmVtZW50cyBvZiAxMDI0ICgxIEdCKSAtIEF2YWlsYWJsZSBjcHUgdmFsdWVzOiA0MDk2ICg0IHZDUFUpXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgMTAyNFxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5TGltaXRNaUI6IG51bWJlcjtcblxuICAvKipcbiAgICogRGVzaXJlZCBjb3VudCBvZiBydW5uaW5nIHRhc2tzXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBXaGVuIGNyZWF0aW5nIHRoZSBzZXJ2aWNlLCBkZWZhdWx0IGlzIDE7IHdoZW4gdXBkYXRpbmcgdGhlIHNlcnZpY2UsIGRlZmF1bHQgdXNlc1xuICAgKiB0aGUgY3VycmVudCB0YXNrIG51bWJlci5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2lyZWRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhhdCB5b3VyIHRhc2sgZGVmaW5pdGlvbnMgYXJlIHJ1bm5pbmcgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBVc2luZyBlY3MuT3BlcmF0aW5nU3lzdGVtRmFtaWx5LkxJTlVYIGFuZCBlY3MuQ3B1QXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZVBsYXRmb3JtPzogZWNzLlJ1bnRpbWVQbGF0Zm9ybTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0ZW5lclJ1bGUge1xuICByZWFkb25seSBwcmlvcml0eTogbnVtYmVyO1xuXG4gIHJlYWRvbmx5IGNvbmRpdGlvbnM6IGVsYnYyLkxpc3RlbmVyQ29uZGl0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBMaXN0ZW5lciBmb3IgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlclxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXI6IGVsYnYyLklBcHBsaWNhdGlvbkxpc3RlbmVyO1xuXG4gIC8qKlxuICAgKiBPbmUgb3IgbW9yZSBwYXRoIHBhdHRlcm5zIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgcmVxdWVzdCBVUkwuXG4gICAqIFRoZSBtYXhpbXVtIHNpemUgb2YgZWFjaCBzdHJpbmcgaXMgMTI4IGNoYXJhY3RlcnMuXG4gICAqIFRoZSBjb21wYXJpc29uIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuICAgKiBUaGUgZm9sbG93aW5nIHdpbGRjYXJkIGNoYXJhY3RlcnMgYXJlIHN1cHBvcnRlZDogKiAobWF0Y2hlcyAwIG9yIG1vcmUgY2hhcmFjdGVycykgYW5kID8gKG1hdGNoZXMgZXhhY3RseSAxIGNoYXJhY3RlcikuXG4gICAqXG4gICAqIFVwZGF0ZSByZXF1aXJlczogTm8gaW50ZXJydXB0aW9uXG4gICAqL1xuICByZWFkb25seSBsaXN0ZW5lclJ1bGVzOiBMaXN0ZW5lclJ1bGVbXTtcblxuICAvKipcbiAgICogIEhlYWx0aCBjaGVjayBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoQ2hlY2s6IGVsYnYyLkhlYWx0aENoZWNrO1xuXG4gIC8qKlxuICAgKiAgSGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZC5cbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrR3JhY2VQZXJpb2Q6IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHRpbWUgcGVyaW9kIGR1cmluZyB3aGljaCB0aGUgbG9hZCBiYWxhbmNlciBzZW5kcyBhIG5ld2x5IHJlZ2lzdGVyZWQgdGFyZ2V0IGEgbGluZWFybHkgaW5jcmVhc2luZyBzaGFyZSBvZiB0aGUgdHJhZmZpYyB0byB0aGUgdGFyZ2V0IGdyb3VwLlxuXG4gICAqVGhlIHJhbmdlIGlzIDMwLTkwMCBzZWNvbmRzICgxNSBtaW51dGVzKS5cblxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAqL1xuICByZWFkb25seSBzbG93U3RhcnQ/OiBjZGsuRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdGltZSBmb3IgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0byB3YWl0IGJlZm9yZSBkZXJlZ2lzdGVyaW5nIGEgdGFyZ2V0LlxuXG4gICAqIFRoZSByYW5nZSBpcyAwLTM2MDAgc2Vjb25kcy5cblxuICAgKiBAZGVmYXVsdFZhbHVlIDVcbiAgKi9cbiAgcmVhZG9ubHkgZGVyZWdpc3RyYXRpb25EZWxheT86IGNkay5EdXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhZG9nSW50ZWdyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgQ1BVIHVuaXRzIHRvIHJlc2VydmUgZm9yIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSA2NFxuICAgKi9cbiAgcmVhZG9ubHkgY3B1PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IChpbiBNaUIpIG9mIG1lbW9yeSB0byBwcmVzZW50IHRvIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIElmIHlvdXIgY29udGFpbmVyIGF0dGVtcHRzIHRvIGV4Y2VlZCB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvbnRhaW5lclxuICAgKiBpcyB0ZXJtaW5hdGVkLlxuICAgKlxuICAgKiBBdCBsZWFzdCBvbmUgb2YgbWVtb3J5TGltaXRNaUIgYW5kIG1lbW9yeVJlc2VydmF0aW9uTWlCIGlzIHJlcXVpcmVkIGZvciBub24tRmFyZ2F0ZSBzZXJ2aWNlcy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIDEyOFxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdmlydHVhbCBDUFUgdW5pdHMgdG8gYmUgcmVzZXJ2ZWQgZm9yIHRoZSBmaXJlbGVucyBsb2ctcm91dGVyIGNvbnRhaW5lciAoaS5lLiBhd3MtZm9yLWZsdWVudC1iaXQpLlxuICAgKlxuICAgKiBUaGlzIG9ubHkgYXBwbGllcyBmb3IgdGhlIEFXU19GSVJFX0xFTlMgbG9nZ2luZyBtb2RlLlxuICAgKiBTZXR0aW5nIGl0IGZvciBhbnkgb3RoZXIgbG9nZ2luZyBtb2RlIHdpbGwgY2F1c2UgYW4gZXhjZXB0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gNjRcbiAgICovXG4gIHJlYWRvbmx5IGF3c0ZpcmVMZW5zQ3B1PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIG1lbW9yeSAoaW4gTWlCKSByZXNlcnZlZCBmb3IgdGhlIGZpcmVsZW5zIGxvZy1yb3V0ZXIgY29udGFpbmVyIChpLmUuIGF3cy1mb3ItZmx1ZW50LWJpdCkuXG4gICAqXG4gICAqIFRoaXMgb25seSBhcHBsaWVzIGZvciB0aGUgQVdTX0ZJUkVfTEVOUyBsb2dnaW5nIG1vZGUuXG4gICAqIFNldHRpbmcgaXQgZm9yIGFueSBvdGhlciBsb2dnaW5nIG1vZGUgd2lsbCBjYXVzZSBhbiBleGNlcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSA2NFxuICAgKi9cbiAgcmVhZG9ubHkgYXdzRmlyZUxlbnNNZW1vcnlMaW1pdE1pQj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGxvZ2dpbmcgbW9kZSBmb3IgdGhlIHNlcnZpY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBVc2luZyB0aGUgRGF0YWRvZyBsb2cgZm9yd2FyZGVyIGxhbWJkYSBwcm92aWRlZCBieSB0aGUgZGF0YWRvZy1pbnRlZ3JhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ2dpbmdNb2RlRm9yU2VydmljZT86IERhdGFEb2dMb2dnaW5nTW9kZTtcblxuICAvKipcbiAgICogVGhlIGxvZ2dpbmcgbW9kZSBmb3IgdGhlIERhdGFkb2cgYWdlbnQgc2lkZWNhci5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIE5vIGxvZ3MgaW4gRGF0YWRvZywgQ2xvdWR3YXRjaCBvbmx5LlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQ/OiBEYXRhRG9nTG9nZ2luZ01vZGU7XG5cbiAgLyoqXG4gICAqIEdFVCBlbmRwb2ludHMgdG8gaWdub3JlIGluIERhdGFkb2cncyBBUE0gb3ZlcnZpZXcuIFRoaXMgaXMgdXNlZnVsIHRvIGZpbHRlciBvdXQgYWxsIGhlYWx0aCBjaGVjayBjYWxscy5cblxuICAgICogQGRlZmF1bHRWYWx1ZSAtIE5vIGVuZHBvaW50cyBhcmUgaWdub3JlZC5cbiAgICAqL1xuICByZWFkb25seSBhcG1HZXRFbmRwb2ludHNUb0lnbm9yZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgaWYgdGhlIERhdGFkb2cgYWdlbnQgc2lkZWNhciBpcyBtYXJrZWQgYXMgZXNzZW50aWFsLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFkb2dTaWRlY2FyRXNzZW50aWFsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJlcyB0aGUgZG9ja2VyIGltYWdlIHRhZyBmb3IgZGF0YWRvZyBzaWRlY2FyXG4gICAqIEBkZWZhdWx0VmFsdWUgLSAnbGF0ZXN0J1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWRvZ1NpZGVjYXJUYWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4geW91IHNldCB1cCBhIHJlc3RhcnQgcG9saWN5IGZvciBhIGNvbnRhaW5lciwgQW1hem9uIEVDUyBjYW4gcmVzdGFydCB0aGUgY29udGFpbmVyIHdpdGhvdXQgbmVlZGluZyB0byByZXBsYWNlIHRoZSB0YXNrXG4gICAqIEBkZWZhdWx0VmFsdWUgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVSZXN0YXJ0UG9saWN5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGV4aXQgY29kZXMgdG8gYmUgaWdub3JlZCBieSB0aGUgcmVzdGFydCBwb2xpY3lcbiAgICogQGRlZmF1bHRWYWx1ZSAtIFswXVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzdGFydElnbm9yZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogQ29uZmlndXJlIGFkZGl0aW9uYWwgdGFncywgd2hpY2ggYXJlIGFwcGVuZGVkIHRvIHRoZSBkZWZhdWx0cyxcbiAgICogV2hlbiB5b3UgZGVmaW5lIGN1c3RvbSB0YWdzIHdlIHdvdWxkIGJlIGdsYWQgaWYgeW91IGNvbnRhY3QgdXMuXG4gICAqIFdlIHdvdWxkIGxpa2UgdG8gbGVhcm4gYWJvdXQgeW91ciB1c2UgY2FzZXMuXG4gICAqXG4gICAqIERlZmF1bHQgdGFncyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgb3ZlcnJpZGRlbiFcbiAgICpcbiAgICogRGVmYXVsdHMgYXJlOlxuICAgKiAqIGVudjogU2V0IHRvIFJpb0ZhcmdhdGVTZXJ2aWNlUHJvcHMjc3RhZ2UgcHJvcFxuICAgKiAqIHNlcnZpY2U6IFNldCB0byBSaW9GYXJnYXRlU2VydmljZVByb3BzI3NlcnZpY2VOYW1lIHByb3BcbiAgICogKiB2ZXJzaW9uOiBTZXQgdG8gUmlvRmFyZ2F0ZVNlcnZpY2VQcm9wcyN2ZXJzaW9uIHByb3BcbiAgICogKiBhY2NvdW50X2lkOiRcXHthY2NvdW50SURcXH1cbiAgICogKiBhY2NvdW50X25hbWU6JFxce2FjY291bnROYW1lXFx9XG4gICAqICogcmVnaW9uOiRcXHtBV1NSZWdpb25cXH1cbiAgICogKiB0ZWFtOiRcXHt0ZWFtTmFtZSBmcm9tIHNzbSBwYXJhbSAvY29uZmlnL3RlYW0vbmFtZVxcfVxuICAgKiAqIHRlYW1faWRlbnRpZmllcjokXFx7dGVhbUlkZW50aWZpZXIgZnJvbSBzc20gcGFyYW0gL2NvbmZpZy90ZWFtL2lkZW50aWZpZXJcXH1cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGVudW0gRGF0YURvZ0xvZ2dpbmdNb2RlIHtcbiAgLyoqXG4gICAqIEZvcndhcmQgbG9ncyBkaXJlY3RseSB0byBEYXRhZG9nIHVzaW5nIEFXUyBGaXJlTGVucyBhcyBsb2cgcm91dGVyLFxuICAgKiBzZWUgaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vaW50ZWdyYXRpb25zL2Vjc19mYXJnYXRlLz90YWI9Zmx1ZW50Yml0YW5kZmlyZWxlbnMjbG9nLWNvbGxlY3Rpb24uXG4gICAqL1xuICBBV1NfRklSRV9MRU5TLFxuXG4gIC8qKlxuICAgKiBTdG9yZSBsb2dzIGluIEFXUyBDbG91ZHdhdGNoIGFuZCB1c2UgdGhlIFJJTyBjdXN0b21pemVkIERhdGFkb2cgbG9nIGZvcndhcmRlciBsYW1iZGEgZnJvbSB0aGUgbGVnYWN5XG4gICAqIGRhdGFkb2ctaW50ZWdyYXRpb24sIHRvIGZvcndhcmQgdGhlIGxvZ3MgdG8gRGF0YWRvZyxcbiAgICpcbiAgICogQHNlZSBodHRwczovL2JpdGJ1Y2tldC5jb2xsYWJvcmF0aW9uLW1hbi5jb20vcHJvamVjdHMvUklPREVWL3JlcG9zL2RhdGFkb2ctaW50ZWdyYXRpb24vYnJvd3NlXG4gICAqIEBkZXByZWNhdGVkIHVzZSBEQVRBRE9HX0ZPUldBUkRFUl9MQU1CREFcbiAgICovXG4gIEZPUldBUkRFUl9MQU1CREEsXG5cbiAgLyoqXG4gICAqIFN0b3JlIGxvZ3MgaW4gQVdTIENsb3Vkd2F0Y2ggYW5kIHVzZSB0aGUgRGF0YWRvZyBsb2cgZm9yd2FyZGVyIGxhbWJkYSB0byBmb3J3YXJkIHRoZSBsb2dzIHRvIERhdGFkb2csXG4gICAqIHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9pbnRlZ3JhdGlvbnMvZWNzX2ZhcmdhdGUvP3RhYj1sb2dkcml2ZXIjbG9nLWNvbGxlY3Rpb24uXG4gICAqL1xuICBEQVRBRE9HX0ZPUldBUkRFUl9MQU1CREEsXG5cbiAgLyoqXG4gICAqIE9ubHkgbG9nIHRvIEFXUyBDbG91ZHdhdGNoIHdpdGhvdXQgZm9yd2FyZGluZyB0aGUgbG9ncyB0byBEYXRhZG9nLlxuICAgKi9cbiAgTk9ORSxcbn1cblxuZXhwb3J0IGNsYXNzIFJpb0ZhcmdhdGVTZXJ2aWNlIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3QgaW1wbGVtZW50cyBlYzIuSUNvbm5lY3RhYmxlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRERfRU5WX0RFTllfTElTVCA9IFsnRERfRU5WJywgJ0REX1RBR1MnLCAnRERfU0VSVklDRScsICdERF9WRVJTSU9OJywgJ0REX0xPR1NfSU5KRUNUSU9OJ107XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRERfVEFHX0RFTllfTElTVCA9IFtcbiAgICAnZW52JyxcbiAgICAnc2VydmljZScsXG4gICAgJ3ZlcnNpb24nLFxuICAgICdhY2NvdW50X2lkJyxcbiAgICAnYWNjb3VudF9uYW1lJyxcbiAgICAncmVnaW9uJyxcbiAgICAndGVhbScsXG4gICAgJ3RlYW1faWRlbnRpZmllcicsXG4gIF07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0FQTV9HRVRfRU5EUE9JTlRTX1RPX0lHTk9SRTogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFET0dfU0lERUNBUl9DUFUgPSA2NDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFET0dfU0lERUNBUl9NRU1PUllfTElNSVRfTUlCID0gMTI4O1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19TSURFQ0FSX0VTU0VOVElBTCA9IHRydWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9EQVRBRE9HX0VOQUJMRV9SRVNUQVJUX1BPTElDWSA9IHRydWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9EQVRBRE9HX1JFU1RBUlRfSUdOT1JFRF9FWElUX0NPREVTID0gWzBdO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTE9HR0lOR19NT0RFX0ZPUl9TRVJWSUNFID0gRGF0YURvZ0xvZ2dpbmdNb2RlLkZPUldBUkRFUl9MQU1CREE7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9MT0dHSU5HX01PREVfRk9SX0RBVEFET0dfU0lERUNBUiA9IERhdGFEb2dMb2dnaW5nTW9kZS5OT05FO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREVSRUdJU1RSQVRJT05fREVMQVkgPSBjZGsuRHVyYXRpb24uc2Vjb25kcyg1KTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1NMT1dfU1RBUlQgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfVEFHID0gJ2xhdGVzdCc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0xPR19ST1VURVJfQ1BVID0gNjQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9MT0dfUk9VVEVSX01FTU9SWV9MSU1JVF9NSUIgPSA2NDtcblxuICBwcml2YXRlIHJlYWRvbmx5IEZJUkVMRU5TX0NPTkZJR19CVUNLRVRfQVJOID0gJ2Fybjphd3M6czM6Ojo1NzcxNDY4OTc3ODUtZXUtd2VzdC0xLWZpcmVsZW5zLWNvbmZpZ3VyYXRpb24tYnVja2V0JztcbiAgcHJpdmF0ZSByZWFkb25seSBGSVJFTEVOU19DT05GSUdfRklMRV9QQVRIID0gJy9wYXJzZS1qc29uLmNvbmYnO1xuXG4gIHJlYWRvbmx5IHNlcnZpY2VDb250YWluZXJEZWZpbml0aW9uOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgZGF0YWRvZ1NpZGVDYXJDb250YWluZXJEZWZpbml0aW9uOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgbG9nUm91dGVyQ29udGFpbmVyRGVmaW5pdGlvbj86IGVjcy5Db250YWluZXJEZWZpbml0aW9uO1xuICByZWFkb25seSB0YXNrRGVmaW5pdGlvbjogZWNzLkZhcmdhdGVUYXNrRGVmaW5pdGlvbjtcblxuICByZWFkb25seSBjb25uZWN0aW9uczogZWMyLkNvbm5lY3Rpb25zO1xuICByZWFkb25seSBzZXJ2aWNlOiBlY3MuRmFyZ2F0ZVNlcnZpY2U7XG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwOiBlbGJ2Mi5BcHBsaWNhdGlvblRhcmdldEdyb3VwIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJpb0ZhcmdhdGVTZXJ2aWNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qge1xuICAgICAgbG9hZEJhbGFuY2VyT3B0aW9ucyxcbiAgICAgIHZwYyxcbiAgICAgIGNsdXN0ZXIsXG4gICAgICBmYXJnYXRlT3B0aW9ucyxcbiAgICAgIGRhdGFkb2dPcHRpb25zLFxuICAgICAgc2VydmljZU5hbWUsXG4gICAgICBjb250YWluZXJEZWZpbml0aW9uT3B0aW9uLFxuICAgICAgc3RhZ2UsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgZnJhbWV3b3JrcyxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihcbiAgICAgIG5ldyBEZW55TGlzdGVkS2V5VmFsaWRhdG9yKFxuICAgICAgICBSaW9GYXJnYXRlU2VydmljZS5ERF9FTlZfREVOWV9MSVNULFxuICAgICAgICBwcm9wcy5jb250YWluZXJEZWZpbml0aW9uT3B0aW9uLmVudmlyb25tZW50LFxuICAgICAgICBpdCA9PlxuICAgICAgICAgIGBFbnZpcm9ubWVudCAke2l0fSBpcyBub3QgYWxsb3dlZCB0byBiZSBzZXQuIFRoaXMgdmFsdWUgd2lsbCBiZSBpbmZlcnJlZCBmcm9tIHRoZSBhY2NvdW50IG9yIG90aGVyIHByb3BlcnRpZXMuYFxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oXG4gICAgICBuZXcgRGVueUxpc3RlZEtleVZhbGlkYXRvcihcbiAgICAgICAgUmlvRmFyZ2F0ZVNlcnZpY2UuRERfVEFHX0RFTllfTElTVCxcbiAgICAgICAgcHJvcHMuZGF0YWRvZ09wdGlvbnM/LmFkZGl0aW9uYWxUYWdzLFxuICAgICAgICBpdCA9PiBgVGFnICR7aXR9IGlzIG5vdCBhbGxvd2VkIHRvIGJlIHNldC4gVGhpcyB2YWx1ZSB3aWxsIGJlIGluZmVycmVkIGZyb20gdGhlIGFjY291bnQgb3Igb3RoZXIgcHJvcGVydGllcy5gXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKG5ldyBDbHVzdGVyVnBjVmFsaWRhdG9yKHByb3BzLnZwYywgcHJvcHMuY2x1c3RlcikpO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24obmV3IERhdGFkb2dTaWRlQ2FyVmFsaWRhdG9yKHByb3BzLmRhdGFkb2dPcHRpb25zKSk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihuZXcgRmlyZWxlbnNTaWRlQ2FyVmFsaWRhdG9yKHByb3BzLmRhdGFkb2dPcHRpb25zKSk7XG5cbiAgICBjb25zdCBmYXJnYXRlQ2x1c3RlciA9XG4gICAgICBjbHVzdGVyID8/XG4gICAgICBuZXcgZWNzLkNsdXN0ZXIodGhpcywgJ0NsdXN0ZXInLCB7XG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgfSk7XG4gICAgdGhpcy50YXNrRGVmaW5pdGlvbiA9IG5ldyBlY3MuRmFyZ2F0ZVRhc2tEZWZpbml0aW9uKHRoaXMsICdUYXNrRGVmaW5pdGlvbicsIHtcbiAgICAgIGNwdTogZmFyZ2F0ZU9wdGlvbnMuY3B1LFxuICAgICAgbWVtb3J5TGltaXRNaUI6IGZhcmdhdGVPcHRpb25zLm1lbW9yeUxpbWl0TWlCLFxuICAgICAgcnVudGltZVBsYXRmb3JtOiB7XG4gICAgICAgIGNwdUFyY2hpdGVjdHVyZTogZmFyZ2F0ZU9wdGlvbnMucnVudGltZVBsYXRmb3JtPy5jcHVBcmNoaXRlY3R1cmUgPz8gZWNzLkNwdUFyY2hpdGVjdHVyZS5YODZfNjQsXG4gICAgICAgIG9wZXJhdGluZ1N5c3RlbUZhbWlseTogZmFyZ2F0ZU9wdGlvbnMucnVudGltZVBsYXRmb3JtPy5vcGVyYXRpbmdTeXN0ZW1GYW1pbHkgPz8gZWNzLk9wZXJhdGluZ1N5c3RlbUZhbWlseS5MSU5VWCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgYWNjb3VudE5hbWUgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdBY2NvdW50TmFtZScsXG4gICAgICAnL2NvbmZpZy9hY2NvdW50L25hbWUnXG4gICAgKS5zdHJpbmdWYWx1ZTtcbiAgICBjb25zdCB0ZWFtTmFtZSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUodGhpcywgJ1RlYW1OYW1lJywgJy9jb25maWcvdGVhbS9uYW1lJykuc3RyaW5nVmFsdWU7XG4gICAgY29uc3QgdGVhbUlkZW50aWZpZXIgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdUZWFtSWRlbnRpZmllcicsXG4gICAgICAnL2NvbmZpZy90ZWFtL2lkZW50aWZpZXInXG4gICAgKS5zdHJpbmdWYWx1ZTtcblxuICAgIGNvbnN0IGRhdGFkb2dTZWNyZXQgPSBEYXRhZG9nU2hhcmVkU2VjcmV0LmNyZWRlbnRpYWxzU2VjcmV0KHRoaXMpO1xuICAgIGNvbnN0IGRhdGFkb2dTaXRlID0gZGF0YWRvZ1NlY3JldC5nZXRTZWNyZXRWYWx1ZSgnU2l0ZScpLnVuc2FmZVVud3JhcCgpO1xuICAgIGNvbnN0IGRhdGFkb2dBcGlLZXkgPSBkYXRhZG9nU2VjcmV0LmdldFNlY3JldCgnQXBpS2V5Jyk7XG5cbiAgICBjb25zdCBkYXRhZG9nU2lkZWNhckNwdSA9IGRhdGFkb2dPcHRpb25zPy5jcHUgPz8gdGhpcy5ERUZBVUxUX0RBVEFET0dfU0lERUNBUl9DUFU7XG4gICAgY29uc3QgZGF0YWRvZ1NpZGVjYXJNZW1vcnlNaUIgPSBkYXRhZG9nT3B0aW9ucz8ubWVtb3J5TGltaXRNaUIgPz8gdGhpcy5ERUZBVUxUX0RBVEFET0dfU0lERUNBUl9NRU1PUllfTElNSVRfTUlCO1xuXG4gICAgY29uc3QgbG9nZ2luZ01vZGVGb3JTZXJ2aWNlID0gZGF0YWRvZ09wdGlvbnM/LmxvZ2dpbmdNb2RlRm9yU2VydmljZSA/PyB0aGlzLkRFRkFVTFRfTE9HR0lOR19NT0RFX0ZPUl9TRVJWSUNFO1xuICAgIGNvbnN0IGxvZ2dpbmdNb2RlRm9yRGF0YWRvZ0FnZW50ID1cbiAgICAgIGRhdGFkb2dPcHRpb25zPy5sb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudCA/PyB0aGlzLkRFRkFVTFRfTE9HR0lOR19NT0RFX0ZPUl9EQVRBRE9HX1NJREVDQVI7XG4gICAgY29uc3QgZmlyZUxlbnNMb2dSb3V0ZXJSZXF1aXJlZCA9XG4gICAgICBsb2dnaW5nTW9kZUZvclNlcnZpY2UgPT09IERhdGFEb2dMb2dnaW5nTW9kZS5BV1NfRklSRV9MRU5TIHx8XG4gICAgICBsb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudCA9PT0gRGF0YURvZ0xvZ2dpbmdNb2RlLkFXU19GSVJFX0xFTlM7XG5cbiAgICBjb25zdCBmaXJlTGVuc1NpZGVjYXJDcHUgPSBkYXRhZG9nT3B0aW9ucz8uYXdzRmlyZUxlbnNDcHUgPz8gdGhpcy5ERUZBVUxUX0xPR19ST1VURVJfQ1BVO1xuICAgIGNvbnN0IGZpcmVMZW5zU2lkZWNhck1lbW9yeU1pQiA9XG4gICAgICBkYXRhZG9nT3B0aW9ucz8uYXdzRmlyZUxlbnNNZW1vcnlMaW1pdE1pQiA/PyB0aGlzLkRFRkFVTFRfTE9HX1JPVVRFUl9NRU1PUllfTElNSVRfTUlCO1xuICAgIGNvbnN0IGRhdGFkb2dTaWRlY2FyRXNzZW50aWFsID0gZGF0YWRvZ09wdGlvbnM/LmRhdGFkb2dTaWRlY2FyRXNzZW50aWFsID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfRVNTRU5USUFMO1xuICAgIGNvbnN0IGRhdGFEb2dFbmFibGVSZXN0YXJ0UG9saWN5ID1cbiAgICAgIGRhdGFkb2dPcHRpb25zPy5lbmFibGVSZXN0YXJ0UG9saWN5ID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX0VOQUJMRV9SRVNUQVJUX1BPTElDWTtcblxuICAgIGZ1bmN0aW9uIGdldFJlc3RhcnRJZ25vcmVkRXhpdENvZGVzKFxuICAgICAgZW5hYmxlUmVzdGFydFBvbGljeTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgICAgIHJlc3RhcnRJZ25vcmVkRXhpdENvZGVzOiBudW1iZXJbXSB8IHVuZGVmaW5lZCxcbiAgICAgIGRlZmF1bHRJZ25vcmVkRXhpdENvZGVzOiBudW1iZXJbXVxuICAgICk6IG51bWJlcltdIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChlbmFibGVSZXN0YXJ0UG9saWN5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChlbmFibGVSZXN0YXJ0UG9saWN5ID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiByZXN0YXJ0SWdub3JlZEV4aXRDb2RlcyA/PyBbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdElnbm9yZWRFeGl0Q29kZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YURvZ3Jlc3RhcnRJZ25vcmVkRXhpdENvZGVzID0gZ2V0UmVzdGFydElnbm9yZWRFeGl0Q29kZXMoXG4gICAgICBkYXRhRG9nRW5hYmxlUmVzdGFydFBvbGljeSxcbiAgICAgIGRhdGFkb2dPcHRpb25zPy5yZXN0YXJ0SWdub3JlZEV4aXRDb2RlcyxcbiAgICAgIHRoaXMuREVGQVVMVF9EQVRBRE9HX1JFU1RBUlRfSUdOT1JFRF9FWElUX0NPREVTXG4gICAgKTtcblxuICAgIGxldCBzZXJ2aWNlQ29udGFpbmVyQ3B1VW5pdHM7XG4gICAgbGV0IHNlcnZpY2VDb250YWluZXJNZW1vcnlMaW1pdE1pQjtcblxuICAgIGlmIChmaXJlTGVuc0xvZ1JvdXRlclJlcXVpcmVkKSB7XG4gICAgICBzZXJ2aWNlQ29udGFpbmVyQ3B1VW5pdHMgPSBmYXJnYXRlT3B0aW9ucy5jcHUgLSBkYXRhZG9nU2lkZWNhckNwdSAtIGZpcmVMZW5zU2lkZWNhckNwdTtcbiAgICAgIHNlcnZpY2VDb250YWluZXJNZW1vcnlMaW1pdE1pQiA9XG4gICAgICAgIGZhcmdhdGVPcHRpb25zLm1lbW9yeUxpbWl0TWlCIC0gZGF0YWRvZ1NpZGVjYXJNZW1vcnlNaUIgLSBmaXJlTGVuc1NpZGVjYXJNZW1vcnlNaUI7XG4gICAgICBkYXRhZG9nLmFkZEZpcmVsZW5zQ29uZmlnVXBsb2FkRnJvbVMzUGVybWlzc2lvbnMoe1xuICAgICAgICB0YXNrRGVmaW5pdGlvbjogdGhpcy50YXNrRGVmaW5pdGlvbixcbiAgICAgICAgZmlyZWxlbnNDb25maWdCdWNrZXRBcm46IHRoaXMuRklSRUxFTlNfQ09ORklHX0JVQ0tFVF9BUk4sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VydmljZUNvbnRhaW5lckNwdVVuaXRzID0gZmFyZ2F0ZU9wdGlvbnMuY3B1IC0gZGF0YWRvZ1NpZGVjYXJDcHU7XG4gICAgICBzZXJ2aWNlQ29udGFpbmVyTWVtb3J5TGltaXRNaUIgPSBmYXJnYXRlT3B0aW9ucy5tZW1vcnlMaW1pdE1pQiAtIGRhdGFkb2dTaWRlY2FyTWVtb3J5TWlCO1xuICAgIH1cbiAgICB0aGlzLnNlcnZpY2VDb250YWluZXJEZWZpbml0aW9uID0gdGhpcy50YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoc2VydmljZU5hbWUsIHtcbiAgICAgIGltYWdlOiBjb250YWluZXJEZWZpbml0aW9uT3B0aW9uLmltYWdlLFxuICAgICAgY3B1OiBzZXJ2aWNlQ29udGFpbmVyQ3B1VW5pdHMsXG4gICAgICBtZW1vcnlMaW1pdE1pQjogc2VydmljZUNvbnRhaW5lck1lbW9yeUxpbWl0TWlCLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgLi4uZGF0YWRvZy5nZXRGYXJnYXRlQ29udGFpbmVyRW52aXJvbm1lbnRWYXJpYWJsZXMoe1xuICAgICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICAgIHN0YWdlLFxuICAgICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgICAgdGVhbU5hbWUsXG4gICAgICAgICAgdGVhbUlkZW50aWZpZXIsXG4gICAgICAgICAgYWRkaXRpb25hbFRhZ3M6IGRhdGFkb2dPcHRpb25zPy5hZGRpdGlvbmFsVGFncyxcbiAgICAgICAgfSksXG4gICAgICAgIC4uLmNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgICAgZG9ja2VyTGFiZWxzOiB7XG4gICAgICAgIC4uLmRhdGFkb2cuZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyh7IHN0YWdlLCBzZXJ2aWNlTmFtZSwgdmVyc2lvbiB9KSxcbiAgICAgIH0sXG4gICAgICBoZWFsdGhDaGVjazogY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5oZWFsdGhDaGVjayxcbiAgICAgIGxvZ2dpbmc6IGRhdGFkb2cuc2V0dXBMb2dnaW5nKHtcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGFjY291bnROYW1lLFxuICAgICAgICB0ZWFtTmFtZSxcbiAgICAgICAgdGVhbUlkZW50aWZpZXIsXG4gICAgICAgIHN0YWdlLFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgZGF0YWRvZ0FwaUtleSxcbiAgICAgICAgZGF0YWRvZ0xvZ2dpbmdNb2RlOiBsb2dnaW5nTW9kZUZvclNlcnZpY2UsXG4gICAgICAgIGRhdGFkb2dTaXRlLFxuICAgICAgICBjb250YWluZXJUeXBlOiAnc2VydmljZScsXG4gICAgICAgIGFkZGl0aW9uYWxUYWdzOiBkYXRhZG9nT3B0aW9ucz8uYWRkaXRpb25hbFRhZ3MsXG4gICAgICB9KSxcbiAgICAgIHNlY3JldHM6IGNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uc2VjcmV0cyxcbiAgICB9KTtcblxuICAgIGlmIChmcmFtZXdvcmtzPy5pbmNsdWRlcyhGcmFtZXdvcmsuU1BSSU5HKSkge1xuICAgICAgU3ByaW5nLmFsbG93UGFyYW1ldGVyU3RvcmVBY2Nlc3NGb3JTcHJpbmdDbG91ZEF3cyh0aGlzLCBzZXJ2aWNlTmFtZSwgdGhpcy50YXNrRGVmaW5pdGlvbi50YXNrUm9sZSk7XG4gICAgICBTcHJpbmcuYWxsb3dTZWNyZXRzTWFuYWdlckFjY2Vzc0ZvclNwcmluZ0Nsb3VkQXdzKHRoaXMsIHNlcnZpY2VOYW1lLCB0aGlzLnRhc2tEZWZpbml0aW9uLnRhc2tSb2xlKTtcbiAgICB9XG5cbiAgICBpZiAoZmlyZUxlbnNMb2dSb3V0ZXJSZXF1aXJlZCkge1xuICAgICAgdGhpcy5sb2dSb3V0ZXJDb250YWluZXJEZWZpbml0aW9uID0gZGF0YWRvZy5hZGRGaXJlTGVuc0xvZ1JvdXRlcih7XG4gICAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgICBjcHU6IGZpcmVMZW5zU2lkZWNhckNwdSxcbiAgICAgICAgbWVtb3J5TGltaXRNaUI6IGZpcmVMZW5zU2lkZWNhck1lbW9yeU1pQixcbiAgICAgICAgZmlyZWxlbnNDb25maWdCdWNrZXRBcm46IHRoaXMuRklSRUxFTlNfQ09ORklHX0JVQ0tFVF9BUk4sXG4gICAgICAgIGZpcmVsZW5zQ29uZmlnRmlsZVBhdGg6IHRoaXMuRklSRUxFTlNfQ09ORklHX0ZJTEVfUEFUSCxcbiAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudGFza0RlZmluaXRpb24uZXhlY3V0aW9uUm9sZT8uYWRkTWFuYWdlZFBvbGljeShcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQW1hem9uRUNTVGFza0V4ZWN1dGlvblJvbGVQb2xpY3knKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFza0RlZmluaXRpb24uZXhlY3V0aW9uUm9sZSkge1xuICAgICAgZGF0YWRvZ1NlY3JldC5ncmFudFJlYWQodGhpcy50YXNrRGVmaW5pdGlvbi5leGVjdXRpb25Sb2xlKTtcbiAgICB9XG4gICAgdGhpcy5kYXRhZG9nU2lkZUNhckNvbnRhaW5lckRlZmluaXRpb24gPSBkYXRhZG9nLmFkZERhdGFkb2dTaWRlY2FyKHtcbiAgICAgIHNjb3BlLFxuICAgICAgdGFza0RlZmluaXRpb246IHRoaXMudGFza0RlZmluaXRpb24sXG4gICAgICBhY2NvdW50TmFtZSxcbiAgICAgIHRlYW1OYW1lLFxuICAgICAgdGVhbUlkZW50aWZpZXIsXG4gICAgICBzdGFnZSxcbiAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGRhdGFkb2dBcGlLZXksXG4gICAgICBkYXRhZG9nU2l0ZSxcbiAgICAgIGRhdGFkb2dMb2dnaW5nTW9kZTogbG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQsXG4gICAgICBhcG1HZXRSZXNvdXJjZXNUb0lnbm9yZTogZGF0YWRvZ09wdGlvbnM/LmFwbUdldEVuZHBvaW50c1RvSWdub3JlID8/IHRoaXMuREVGQVVMVF9BUE1fR0VUX0VORFBPSU5UU19UT19JR05PUkUsXG4gICAgICBjcHU6IGRhdGFkb2dTaWRlY2FyQ3B1LFxuICAgICAgbWVtb3J5TGltaXRNaUI6IGRhdGFkb2dTaWRlY2FyTWVtb3J5TWlCLFxuICAgICAgZXNzZW50aWFsOiBkYXRhZG9nU2lkZWNhckVzc2VudGlhbCxcbiAgICAgIGVuYWJsZVJlc3RhcnRQb2xpY3k6IGRhdGFEb2dFbmFibGVSZXN0YXJ0UG9saWN5LFxuICAgICAgcmVzdGFydElnbm9yZWRFeGl0Q29kZXM6IGRhdGFEb2dyZXN0YXJ0SWdub3JlZEV4aXRDb2RlcyxcbiAgICAgIGNvbnRhaW5lclRhZzogcHJvcHMuZGF0YWRvZ09wdGlvbnM/LmRhdGFkb2dTaWRlY2FyVGFnID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfVEFHLCAvLyBUaGVzZSBhcmUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLFxuICAgICAgYWRkaXRpb25hbFRhZ3M6IGRhdGFkb2dPcHRpb25zPy5hZGRpdGlvbmFsVGFncyxcbiAgICB9KTtcblxuICAgIGRhdGFkb2cuZW5zdXJlTG9nZ2luZ0FuZE1vbml0b3JpbmdBcmVSZWFkeUJlZm9yZVNlcnZpY2VTdGFydHModGhpcyk7XG5cbiAgICBjb25zdCBsb2FkQmFsYW5jZXJPcHRpb25zRm9yRmFyZ2F0ZVNlcnZpY2UgPSBsb2FkQmFsYW5jZXJPcHRpb25zXG4gICAgICA/IHsgaGVhbHRoQ2hlY2tHcmFjZVBlcmlvZDogbG9hZEJhbGFuY2VyT3B0aW9ucy5oZWFsdGhDaGVja0dyYWNlUGVyaW9kIH1cbiAgICAgIDoge307XG5cbiAgICB0aGlzLnNlcnZpY2UgPSBuZXcgZWNzLkZhcmdhdGVTZXJ2aWNlKHRoaXMsICdTZXJ2aWNlJywge1xuICAgICAgY2x1c3RlcjogZmFyZ2F0ZUNsdXN0ZXIsXG4gICAgICB0YXNrRGVmaW5pdGlvbjogdGhpcy50YXNrRGVmaW5pdGlvbixcbiAgICAgIGNpcmN1aXRCcmVha2VyOiB7IHJvbGxiYWNrOiB0cnVlIH0sXG4gICAgICBtYXhIZWFsdGh5UGVyY2VudDogMjAwLFxuICAgICAgbWluSGVhbHRoeVBlcmNlbnQ6IDEwMCxcbiAgICAgIGRlc2lyZWRDb3VudDogZmFyZ2F0ZU9wdGlvbnM/LmRlc2lyZWRDb3VudCxcbiAgICAgIC4uLmxvYWRCYWxhbmNlck9wdGlvbnNGb3JGYXJnYXRlU2VydmljZSxcbiAgICAgIHByb3BhZ2F0ZVRhZ3M6IGVjcy5Qcm9wYWdhdGVkVGFnU291cmNlLlNFUlZJQ0UsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5zZXJ2aWNlLmNvbm5lY3Rpb25zO1xuXG4gICAgaWYgKGxvYWRCYWxhbmNlck9wdGlvbnMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGFpbmVyUG9ydCA9IDQ0MztcbiAgICAgIHRoaXMuc2VydmljZUNvbnRhaW5lckRlZmluaXRpb24uYWRkUG9ydE1hcHBpbmdzKHtcbiAgICAgICAgY29udGFpbmVyUG9ydDogY29udGFpbmVyUG9ydCxcbiAgICAgICAgcHJvdG9jb2w6IGVjcy5Qcm90b2NvbC5UQ1AsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGFyZ2V0R3JvdXAgPSBuZXcgZWxidjIuQXBwbGljYXRpb25UYXJnZXRHcm91cCh0aGlzLCAnVGFyZ2V0R3JvdXAnLCB7XG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgICBwb3J0OiBjb250YWluZXJQb3J0LFxuICAgICAgICBwcm90b2NvbDogZWxidjIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQUyxcbiAgICAgICAgdGFyZ2V0VHlwZTogZWxidjIuVGFyZ2V0VHlwZS5JUCxcbiAgICAgICAgdGFyZ2V0czogW3RoaXMuc2VydmljZV0sXG4gICAgICAgIGhlYWx0aENoZWNrOiBsb2FkQmFsYW5jZXJPcHRpb25zLmhlYWx0aENoZWNrLFxuICAgICAgICBzbG93U3RhcnQ6IHByb3BzLmxvYWRCYWxhbmNlck9wdGlvbnM/LnNsb3dTdGFydCA/PyB0aGlzLkRFRkFVTFRfU0xPV19TVEFSVCxcbiAgICAgICAgZGVyZWdpc3RyYXRpb25EZWxheTogcHJvcHMubG9hZEJhbGFuY2VyT3B0aW9ucz8uZGVyZWdpc3RyYXRpb25EZWxheSA/PyB0aGlzLkRFRkFVTFRfREVSRUdJU1RSQVRJT05fREVMQVksXG4gICAgICB9KTtcblxuICAgICAgbG9hZEJhbGFuY2VyT3B0aW9ucy5saXN0ZW5lclJ1bGVzLmZvckVhY2goKHsgcHJpb3JpdHksIGNvbmRpdGlvbnMgfSkgPT4ge1xuICAgICAgICBsb2FkQmFsYW5jZXJPcHRpb25zLmxpc3RlbmVyLmFkZFRhcmdldEdyb3VwcyhgUHJpb3JpdHkke3ByaW9yaXR5fUxpc3RlbmVyUnVsZWAsIHtcbiAgICAgICAgICB0YXJnZXRHcm91cHM6IFt0aGlzLnRhcmdldEdyb3VwIGFzIGVsYnYyLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBdLFxuICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICBjb25kaXRpb25zOiBjb25kaXRpb25zLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ldyBEYXRhZG9nU2VydmljZUNhdGFsb2dFbnRyeSh0aGlzLCAnRGF0YWRvZ1NlcnZpY2VDYXRhbG9nRW50cnknLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogc2VydmljZU5hbWUsXG4gICAgICBsYW5ndWFnZXM6IFsnamF2YSddLFxuICAgICAgc2VydmljZVR5cGU6ICd3ZWInLFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIERlbnlMaXN0ZWRLZXlWYWxpZGF0b3IgaW1wbGVtZW50cyBjb25zdHJ1Y3RzLklWYWxpZGF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZW55TGlzdDogc3RyaW5nW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUdlbmVyYXRvcjogKGtleU5hbWU6IHN0cmluZykgPT4gc3RyaW5nXG4gICkge31cblxuICB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmRpY3QpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5kZW55TGlzdC5mb3JFYWNoKGtleU5hbWUgPT4ge1xuICAgICAgaWYgKHRoaXMuZGljdCAmJiBrZXlOYW1lIGluIHRoaXMuZGljdCkge1xuICAgICAgICByZXN1bHQucHVzaCh0aGlzLm1lc3NhZ2VHZW5lcmF0b3Ioa2V5TmFtZSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jbGFzcyBDbHVzdGVyVnBjVmFsaWRhdG9yIGltcGxlbWVudHMgY29uc3RydWN0cy5JVmFsaWRhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsdXN0ZXI/OiBlY3MuSUNsdXN0ZXJcbiAgKSB7fVxuXG4gIHZhbGlkYXRlKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAodGhpcy5jbHVzdGVyICYmIHRoaXMuY2x1c3Rlci52cGMudnBjSWQgIT09IHRoaXMudnBjLnZwY0lkKSB7XG4gICAgICByZXN1bHQucHVzaChcbiAgICAgICAgYFRoZSBWUEMgcHJvdmlkZWQgaW4gdGhlIGNsdXN0ZXIgKCR7dGhpcy5jbHVzdGVyLnZwYy5ub2RlLmlkfSkgTVVTVCBtYXRjaCB0aGUgVlBDIHByb3ZpZGVkIGFzIGFyZ3VtZW50ICgke3RoaXMudnBjLm5vZGUuaWR9KS5gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmNsYXNzIERhdGFkb2dTaWRlQ2FyVmFsaWRhdG9yIGltcGxlbWVudHMgY29uc3RydWN0cy5JVmFsaWRhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGF0YWRvZ09wdGlvbnM/OiBEYXRhZG9nSW50ZWdyYXRpb25Qcm9wcykge31cbiAgdmFsaWRhdGUoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZGF0YWRvZ09wdGlvbnMgJiZcbiAgICAgIHRoaXMuZGF0YWRvZ09wdGlvbnMuZW5hYmxlUmVzdGFydFBvbGljeSA9PT0gZmFsc2UgJiZcbiAgICAgIHRoaXMuZGF0YWRvZ09wdGlvbnMucmVzdGFydElnbm9yZWRFeGl0Q29kZXNcbiAgICApIHtcbiAgICAgIHJlc3VsdC5wdXNoKCdSZXN0YXJ0SWdub3JlZEV4aXRDb2RlcyBjYW5ub3QgYmUgc3BlY2lmaWVkIGlmIGVuYWJsZVJlc3RhcnRQb2xpY3kgaXMgZmFsc2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jbGFzcyBGaXJlbGVuc1NpZGVDYXJWYWxpZGF0b3IgaW1wbGVtZW50cyBjb25zdHJ1Y3RzLklWYWxpZGF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkYXRhZG9nT3B0aW9ucz86IERhdGFkb2dJbnRlZ3JhdGlvblByb3BzKSB7fVxuXG4gIHZhbGlkYXRlKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAodGhpcy5kYXRhZG9nT3B0aW9ucykge1xuICAgICAgY29uc3QgaXNGaXJlbGVuc1VzZWQgPVxuICAgICAgICB0aGlzLmRhdGFkb2dPcHRpb25zLmxvZ2dpbmdNb2RlRm9yU2VydmljZSA9PSBEYXRhRG9nTG9nZ2luZ01vZGUuQVdTX0ZJUkVfTEVOUyB8fFxuICAgICAgICB0aGlzLmRhdGFkb2dPcHRpb25zLmxvZ2dpbmdNb2RlRm9yRGF0YWRvZ0FnZW50ID09IERhdGFEb2dMb2dnaW5nTW9kZS5BV1NfRklSRV9MRU5TO1xuICAgICAgY29uc3QgaXNGaXJlbGVuc0NvbmZpZ3VyZWQgPSB0aGlzLmRhdGFkb2dPcHRpb25zLmF3c0ZpcmVMZW5zQ3B1IHx8IHRoaXMuZGF0YWRvZ09wdGlvbnMuYXdzRmlyZUxlbnNNZW1vcnlMaW1pdE1pQjtcblxuICAgICAgaWYgKCFpc0ZpcmVsZW5zVXNlZCAmJiBpc0ZpcmVsZW5zQ29uZmlndXJlZCkge1xuICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAnWW91IGNhbm5vdCBvdmVycmlkZSB0aGUgY29udGFpbmVyIHJlc291cmNlIGFsbG9jYXRpb24gZm9yIGZpcmVsZW5zIGlmIGl0IGlzIG5vdCB1c2VkIGFzIGxvZ2dpbmcgbW9kZSBmb3IgYW55IGNvbnRhaW5lcidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlvLWZhcmdhdGUtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYXJnYXRlL3Jpby1mYXJnYXRlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBbUM7QUFFbkMsMkNBQTJDO0FBQzNDLGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLHlDQUF5QztBQUN6Qyw0Q0FBK0U7QUFDL0UscUNBQXFDO0FBQ3JDLHFDQUFrQztBQThEbEMsSUFBWSxTQUtYO0FBTEQsV0FBWSxTQUFTO0lBQ25COztPQUVHO0lBQ0gsNkNBQU0sQ0FBQTtBQUNSLENBQUMsRUFMVyxTQUFTLHlCQUFULFNBQVMsUUFLcEI7QUFvUUQsSUFBWSxrQkEwQlg7QUExQkQsV0FBWSxrQkFBa0I7SUFDNUI7OztPQUdHO0lBQ0gsNkVBQWEsQ0FBQTtJQUViOzs7Ozs7T0FNRztJQUNILG1GQUFnQixDQUFBO0lBRWhCOzs7T0FHRztJQUNILG1HQUF3QixDQUFBO0lBRXhCOztPQUVHO0lBQ0gsMkRBQUksQ0FBQTtBQUNOLENBQUMsRUExQlcsa0JBQWtCLGtDQUFsQixrQkFBa0IsUUEwQjdCO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxVQUFVLENBQUMsU0FBUztJQXlDekQsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNoRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBNUJGLHdDQUFtQyxHQUFhLEVBQUUsQ0FBQztRQUNuRCxnQ0FBMkIsR0FBRyxFQUFFLENBQUM7UUFDakMsNkNBQXdDLEdBQUcsR0FBRyxDQUFDO1FBQy9DLHNDQUFpQyxHQUFHLElBQUksQ0FBQztRQUN6QywwQ0FBcUMsR0FBRyxJQUFJLENBQUM7UUFDN0MsK0NBQTBDLEdBQUcsQ0FBQyxDQUFDLENBQUMs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IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQgKiBhcyBlbGJ2MiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRGF0YWRvZ1NlcnZpY2VDYXRhbG9nRW50cnksIERhdGFkb2dTaGFyZWRTZWNyZXQgfSBmcm9tICcuLi9kYXRhZG9ndjInO1xuaW1wb3J0ICogYXMgZGF0YWRvZyBmcm9tICcuL2RhdGFkb2cnO1xuaW1wb3J0IHsgU3ByaW5nIH0gZnJvbSAnLi9zcHJpbmcnO1xuXG4vKipcbiAqIEZhcmdhdGUgVGFzayBEZWZpbml0aW9uIFByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmlvRmFyZ2F0ZVNlcnZpY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhZ2Ugb2YgdGhlIHNlcnZpY2UsIGUuZy4gJ3Byb2QnLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE5hbWUgb2YgdGhlIHNlcnZpY2UuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgc2VydmljZSwgZS5nLiB0aGUgZ2l0IGhhc2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWl0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnJhbWV3b3JrcyBpbiB1c2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gTm8gZnJhbWV3b3Jrcy5cbiAgICovXG4gIHJlYWRvbmx5IGZyYW1ld29ya3M/OiBGcmFtZXdvcmtbXTtcblxuICAvKipcbiAgICogVGhlIFZQQyBvZiB0aGUgc2VydmljZSdzIGVjcy5DbHVzdGVyIGlmIG5vIGNsdXN0ZXIgaXMgZXhwbGljaXRseSBwYXNzZWQgYXMgcHJvcC5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFRoZSBGYXJnYXRlIGNsdXN0ZXIgdG8gcnVuIHRoZSBzZXJ2aWNlIGluLlxuICAgKiBJZiBub3QgbnVsbCwgdGhlIGNsdXN0ZXIudnBjIE1VU1QgbWF0Y2ggdGhlIHZwYyBwcm92aWRlZCBhcyBkaXJlY3QgYXJndW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBDcmVhdGUgYSBuZXcgRmFyZ2F0ZSBjbHVzdGVyIHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyPzogZWNzLklDbHVzdGVyO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgZGVmaW5pdGlvbiBvcHRpb25zIGxpa2UgaW1hZ2UsIGNwdSwgbWVtb3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbjogQ29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEZhcmdhdGUgVGFzayBEZWZpbml0aW9uIFByb3BlcnRpZXMuXG4gICAqL1xuICByZWFkb25seSBmYXJnYXRlT3B0aW9uczogRmFyZ2F0ZVRhc2tEZWZpbml0aW9uUHJvcHM7XG5cbiAgLyoqXG4gICAqIExvYWRiYWxhbmNlciBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEJhbGFuY2VyT3B0aW9ucz86IExvYWRCYWxhbmNlck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERhdGFkb2cgaW50ZWdyYXRpb24gcHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWRvZ09wdGlvbnM/OiBEYXRhZG9nSW50ZWdyYXRpb25Qcm9wcztcbn1cblxuZXhwb3J0IGVudW0gRnJhbWV3b3JrIHtcbiAgLyoqXG4gICAqIFNwcmluZyBGcmFtZXdvcmssIFNwcmluZyBCb290LCBhbmQgU3ByaW5nIENsb3VkIEFXUy5cbiAgICovXG4gIFNQUklORyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJEZWZpbml0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgdXNlZCB0byBzdGFydCBhIGNvbnRhaW5lci5cbiAgICpcbiAgICogVGhpcyBzdHJpbmcgaXMgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBEb2NrZXIgZGFlbW9uLlxuICAgKiBJbWFnZXMgaW4gdGhlIERvY2tlciBIdWIgcmVnaXN0cnkgYXJlIGF2YWlsYWJsZSBieSBkZWZhdWx0LlxuICAgKiBPdGhlciByZXBvc2l0b3JpZXMgYXJlIHNwZWNpZmllZCB3aXRoIGVpdGhlciByZXBvc2l0b3J5LXVybC9pbWFnZTp0YWcgb3IgcmVwb3NpdG9yeS11cmwvaW1hZ2VcXEBkaWdlc3QuXG4gICAqL1xuICByZWFkb25seSBpbWFnZTogZWNzLkNvbnRhaW5lckltYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgdG8gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogU29tZSBEYXRhZG9nIHNwZWNpZmljIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgc2V0LFxuICAgKiBiZWNhdXNlIHRoZXkgYXJlIHNldCBhdXRvbWF0aWNhbGx5IG9yIGNvbXB1dGVkIGZyb20gb3RoZXIgYXR0cmlidXRlcy5cbiAgICogVGhlc2UgYXJlOlxuICAgKiAqIEREX0VOVjogU2V0IHNhbWUgYXMgcHJvcCBzdGFnZVxuICAgKiAqIEREX1NFUlZJQ0U6IFNldCBzYW1lIGFzIHByb3Agc2VydmljZU5hbWVcbiAgICogKiBERF9WRVJTSU9OOiBTZXQgc2FtZSBhcyBwcm9wIHZlcnNpb25cbiAgICogKiBERF9UQUdTOiBTZXQgc2FtZSBhcyBEYXRhZG9nSW50ZWdyYXRpb25Qcm9wcyNhZGRpdGlvbmFsVGFnc1xuICAgKiAqIEREX0xPR1NfSU5KRUNUSU9OOiB0cnVlXG4gICAqIE90aGVyIEREXy1wcmVmaXhlZCB2YWlhYmxlIG1heSBiZSBhZGRlZCB0byB0aGlzIGxpc3QuXG4gICAqXG4gICAqIE90aGVyIEVudmlyb25tZW50IHZhcmlhYmxlcyBzZXQgYnkgZGVmYXVsdCBhcmUgb3ZlcndyaXR0ZW4gaWYgcGFzc2VkLlxuICAgKiBUaGVzZSBhcmU6XG4gICAqICogRERfU0VSVklDRV9NQVBQSU5HOiBkYXRhYmFzZTpmYXJnYXRlLXdlYi1hcHAtYXVyb3JhLGphdmEtYXdzLXNkazpmYXJnYXRlLXdlYi1hcHAtYXdzLXNkayxrYWZrYTpmYXJnYXRlLXdlYi1hcHAta2Fma2EsbXlzcWw6ZmFyZ2F0ZS13ZWItYXBwLWF1cm9yYVxuICAgKiAqIEREX1RSQUNFX1NBTVBMRV9SQVRFOiAxLjBcbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIE5vIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIHNlY3JldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gTm8gc2VjcmV0IGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHM/OiB7IFtrZXk6IHN0cmluZ106IGVjcy5TZWNyZXQgfTtcblxuICAvKipcbiAgICogVGhlIGhlYWx0aCBjaGVjayBjb21tYW5kIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIEhlYWx0aCBjaGVjayBjb25maWd1cmF0aW9uIGZyb20gY29udGFpbmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoQ2hlY2s/OiBlY3MuSGVhbHRoQ2hlY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFyZ2F0ZVRhc2tEZWZpbml0aW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjcHUgdW5pdHMgdXNlZCBieSB0aGUgdGFzay4gRm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLFxuICAgKiB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCB5b3UgbXVzdCB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzLFxuICAgKiB3aGljaCBkZXRlcm1pbmVzIHlvdXIgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgbWVtb3J5IHBhcmFtZXRlcjpcbiAgICpcbiAgICogMjU2ICguMjUgdkNQVSkgLSBBdmFpbGFibGUgbWVtb3J5IHZhbHVlczogNTEyICgwLjUgR0IpLCAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQilcbiAgICpcbiAgICogNTEyICguNSB2Q1BVKSAtIEF2YWlsYWJsZSBtZW1vcnkgdmFsdWVzOiAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQiksIDMwNzIgKDMgR0IpLCA0MDk2ICg0IEdCKVxuICAgKlxuICAgKiAxMDI0ICgxIHZDUFUpIC0gQXZhaWxhYmxlIG1lbW9yeSB2YWx1ZXM6IDIwNDggKDIgR0IpLCAzMDcyICgzIEdCKSwgNDA5NiAoNCBHQiksIDUxMjAgKDUgR0IpLCA2MTQ0ICg2IEdCKSwgNzE2OCAoNyBHQiksIDgxOTIgKDggR0IpXG4gICAqXG4gICAqIDIwNDggKDIgdkNQVSkgLSBBdmFpbGFibGUgbWVtb3J5IHZhbHVlczogQmV0d2VlbiA0MDk2ICg0IEdCKSBhbmQgMTYzODQgKDE2IEdCKSBpbiBpbmNyZW1lbnRzIG9mIDEwMjQgKDEgR0IpXG4gICAqXG4gICAqIDQwOTYgKDQgdkNQVSkgLSBBdmFpbGFibGUgbWVtb3J5IHZhbHVlczogQmV0d2VlbiA4MTkyICg4IEdCKSBhbmQgMzA3MjAgKDMwIEdCKSBpbiBpbmNyZW1lbnRzIG9mIDEwMjQgKDEgR0IpXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgNTEyXG4gICAqL1xuICByZWFkb25seSBjcHU6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGFtb3VudCAoaW4gTWlCKSBvZiBtZW1vcnkgdXNlZCBieSB0aGUgdGFzay4gRm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLFxuICAgKiB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCB5b3UgbXVzdCB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzLCB3aGljaCBkZXRlcm1pbmVzIHlvdXIgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgY3B1IHBhcmFtZXRlcjpcbiAgICpcbiAgICogNTEyICgwLjUgR0IpLCAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQikgLSBBdmFpbGFibGUgY3B1IHZhbHVlczogMjU2ICguMjUgdkNQVSlcbiAgICpcbiAgICogMTAyNCAoMSBHQiksIDIwNDggKDIgR0IpLCAzMDcyICgzIEdCKSwgNDA5NiAoNCBHQikgLSBBdmFpbGFibGUgY3B1IHZhbHVlczogNTEyICguNSB2Q1BVKVxuICAgKlxuICAgKiAyMDQ4ICgyIEdCKSwgMzA3MiAoMyBHQiksIDQwOTYgKDQgR0IpLCA1MTIwICg1IEdCKSwgNjE0NCAoNiBHQiksIDcxNjggKDcgR0IpLCA4MTkyICg4IEdCKSAtIEF2YWlsYWJsZSBjcHUgdmFsdWVzOiAxMDI0ICgxIHZDUFUpXG4gICAqXG4gICAqIEJldHdlZW4gNDA5NiAoNCBHQikgYW5kIDE2Mzg0ICgxNiBHQikgaW4gaW5jcmVtZW50cyBvZiAxMDI0ICgxIEdCKSAtIEF2YWlsYWJsZSBjcHUgdmFsdWVzOiAyMDQ4ICgyIHZDUFUpXG4gICAqXG4gICAqIEJldHdlZW4gODE5MiAoOCBHQikgYW5kIDMwNzIwICgzMCBHQikgaW4gaW5jcmVtZW50cyBvZiAxMDI0ICgxIEdCKSAtIEF2YWlsYWJsZSBjcHUgdmFsdWVzOiA0MDk2ICg0IHZDUFUpXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgMTAyNFxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5TGltaXRNaUI6IG51bWJlcjtcblxuICAvKipcbiAgICogRGVzaXJlZCBjb3VudCBvZiBydW5uaW5nIHRhc2tzXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBXaGVuIGNyZWF0aW5nIHRoZSBzZXJ2aWNlLCBkZWZhdWx0IGlzIDE7IHdoZW4gdXBkYXRpbmcgdGhlIHNlcnZpY2UsIGRlZmF1bHQgdXNlc1xuICAgKiB0aGUgY3VycmVudCB0YXNrIG51bWJlci5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2lyZWRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhhdCB5b3VyIHRhc2sgZGVmaW5pdGlvbnMgYXJlIHJ1bm5pbmcgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBVc2luZyBlY3MuT3BlcmF0aW5nU3lzdGVtRmFtaWx5LkxJTlVYIGFuZCBlY3MuQ3B1QXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZVBsYXRmb3JtPzogZWNzLlJ1bnRpbWVQbGF0Zm9ybTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0ZW5lclJ1bGUge1xuICByZWFkb25seSBwcmlvcml0eTogbnVtYmVyO1xuXG4gIHJlYWRvbmx5IGNvbmRpdGlvbnM6IGVsYnYyLkxpc3RlbmVyQ29uZGl0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBMaXN0ZW5lciBmb3IgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlclxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXI6IGVsYnYyLklBcHBsaWNhdGlvbkxpc3RlbmVyO1xuXG4gIC8qKlxuICAgKiBPbmUgb3IgbW9yZSBwYXRoIHBhdHRlcm5zIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgcmVxdWVzdCBVUkwuXG4gICAqIFRoZSBtYXhpbXVtIHNpemUgb2YgZWFjaCBzdHJpbmcgaXMgMTI4IGNoYXJhY3RlcnMuXG4gICAqIFRoZSBjb21wYXJpc29uIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuICAgKiBUaGUgZm9sbG93aW5nIHdpbGRjYXJkIGNoYXJhY3RlcnMgYXJlIHN1cHBvcnRlZDogKiAobWF0Y2hlcyAwIG9yIG1vcmUgY2hhcmFjdGVycykgYW5kID8gKG1hdGNoZXMgZXhhY3RseSAxIGNoYXJhY3RlcikuXG4gICAqXG4gICAqIFVwZGF0ZSByZXF1aXJlczogTm8gaW50ZXJydXB0aW9uXG4gICAqL1xuICByZWFkb25seSBsaXN0ZW5lclJ1bGVzOiBMaXN0ZW5lclJ1bGVbXTtcblxuICAvKipcbiAgICogIEhlYWx0aCBjaGVjayBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoQ2hlY2s6IGVsYnYyLkhlYWx0aENoZWNrO1xuXG4gIC8qKlxuICAgKiAgSGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZC5cbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrR3JhY2VQZXJpb2Q6IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHRpbWUgcGVyaW9kIGR1cmluZyB3aGljaCB0aGUgbG9hZCBiYWxhbmNlciBzZW5kcyBhIG5ld2x5IHJlZ2lzdGVyZWQgdGFyZ2V0IGEgbGluZWFybHkgaW5jcmVhc2luZyBzaGFyZSBvZiB0aGUgdHJhZmZpYyB0byB0aGUgdGFyZ2V0IGdyb3VwLlxuXG4gICAqVGhlIHJhbmdlIGlzIDMwLTkwMCBzZWNvbmRzICgxNSBtaW51dGVzKS5cblxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAqL1xuICByZWFkb25seSBzbG93U3RhcnQ/OiBjZGsuRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdGltZSBmb3IgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0byB3YWl0IGJlZm9yZSBkZXJlZ2lzdGVyaW5nIGEgdGFyZ2V0LlxuXG4gICAqIFRoZSByYW5nZSBpcyAwLTM2MDAgc2Vjb25kcy5cblxuICAgKiBAZGVmYXVsdFZhbHVlIDVcbiAgKi9cbiAgcmVhZG9ubHkgZGVyZWdpc3RyYXRpb25EZWxheT86IGNkay5EdXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhZG9nSW50ZWdyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgQ1BVIHVuaXRzIHRvIHJlc2VydmUgZm9yIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSA2NFxuICAgKi9cbiAgcmVhZG9ubHkgY3B1PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IChpbiBNaUIpIG9mIG1lbW9yeSB0byBwcmVzZW50IHRvIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIElmIHlvdXIgY29udGFpbmVyIGF0dGVtcHRzIHRvIGV4Y2VlZCB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgdGhlIGNvbnRhaW5lclxuICAgKiBpcyB0ZXJtaW5hdGVkLlxuICAgKlxuICAgKiBBdCBsZWFzdCBvbmUgb2YgbWVtb3J5TGltaXRNaUIgYW5kIG1lbW9yeVJlc2VydmF0aW9uTWlCIGlzIHJlcXVpcmVkIGZvciBub24tRmFyZ2F0ZSBzZXJ2aWNlcy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIDEyOFxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdmlydHVhbCBDUFUgdW5pdHMgdG8gYmUgcmVzZXJ2ZWQgZm9yIHRoZSBmaXJlbGVucyBsb2ctcm91dGVyIGNvbnRhaW5lciAoaS5lLiBhd3MtZm9yLWZsdWVudC1iaXQpLlxuICAgKlxuICAgKiBUaGlzIG9ubHkgYXBwbGllcyBmb3IgdGhlIEFXU19GSVJFX0xFTlMgbG9nZ2luZyBtb2RlLlxuICAgKiBTZXR0aW5nIGl0IGZvciBhbnkgb3RoZXIgbG9nZ2luZyBtb2RlIHdpbGwgY2F1c2UgYW4gZXhjZXB0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gNjRcbiAgICovXG4gIHJlYWRvbmx5IGF3c0ZpcmVMZW5zQ3B1PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIG1lbW9yeSAoaW4gTWlCKSByZXNlcnZlZCBmb3IgdGhlIGZpcmVsZW5zIGxvZy1yb3V0ZXIgY29udGFpbmVyIChpLmUuIGF3cy1mb3ItZmx1ZW50LWJpdCkuXG4gICAqXG4gICAqIFRoaXMgb25seSBhcHBsaWVzIGZvciB0aGUgQVdTX0ZJUkVfTEVOUyBsb2dnaW5nIG1vZGUuXG4gICAqIFNldHRpbmcgaXQgZm9yIGFueSBvdGhlciBsb2dnaW5nIG1vZGUgd2lsbCBjYXVzZSBhbiBleGNlcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSA2NFxuICAgKi9cbiAgcmVhZG9ubHkgYXdzRmlyZUxlbnNNZW1vcnlMaW1pdE1pQj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGxvZ2dpbmcgbW9kZSBmb3IgdGhlIHNlcnZpY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBVc2luZyB0aGUgRGF0YWRvZyBsb2cgZm9yd2FyZGVyIGxhbWJkYSBwcm92aWRlZCBieSB0aGUgZGF0YWRvZy1pbnRlZ3JhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ2dpbmdNb2RlRm9yU2VydmljZT86IERhdGFEb2dMb2dnaW5nTW9kZTtcblxuICAvKipcbiAgICogVGhlIGxvZ2dpbmcgbW9kZSBmb3IgdGhlIERhdGFkb2cgYWdlbnQgc2lkZWNhci5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIE5vIGxvZ3MgaW4gRGF0YWRvZywgQ2xvdWR3YXRjaCBvbmx5LlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQ/OiBEYXRhRG9nTG9nZ2luZ01vZGU7XG5cbiAgLyoqXG4gICAqIEdFVCBlbmRwb2ludHMgdG8gaWdub3JlIGluIERhdGFkb2cncyBBUE0gb3ZlcnZpZXcuIFRoaXMgaXMgdXNlZnVsIHRvIGZpbHRlciBvdXQgYWxsIGhlYWx0aCBjaGVjayBjYWxscy5cblxuICAgICogQGRlZmF1bHRWYWx1ZSAtIE5vIGVuZHBvaW50cyBhcmUgaWdub3JlZC5cbiAgICAqL1xuICByZWFkb25seSBhcG1HZXRFbmRwb2ludHNUb0lnbm9yZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgaWYgdGhlIERhdGFkb2cgYWdlbnQgc2lkZWNhciBpcyBtYXJrZWQgYXMgZXNzZW50aWFsLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFkb2dTaWRlY2FyRXNzZW50aWFsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJlcyB0aGUgZG9ja2VyIGltYWdlIHRhZyBmb3IgZGF0YWRvZyBzaWRlY2FyXG4gICAqIEBkZWZhdWx0VmFsdWUgLSAnbGF0ZXN0J1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWRvZ1NpZGVjYXJUYWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4geW91IHNldCB1cCBhIHJlc3RhcnQgcG9saWN5IGZvciBhIGNvbnRhaW5lciwgQW1hem9uIEVDUyBjYW4gcmVzdGFydCB0aGUgY29udGFpbmVyIHdpdGhvdXQgbmVlZGluZyB0byByZXBsYWNlIHRoZSB0YXNrXG4gICAqIEBkZWZhdWx0VmFsdWUgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVSZXN0YXJ0UG9saWN5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGV4aXQgY29kZXMgdG8gYmUgaWdub3JlZCBieSB0aGUgcmVzdGFydCBwb2xpY3lcbiAgICogQGRlZmF1bHRWYWx1ZSAtIFswXVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzdGFydElnbm9yZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogQ29uZmlndXJlIGFkZGl0aW9uYWwgdGFncywgd2hpY2ggYXJlIGFwcGVuZGVkIHRvIHRoZSBkZWZhdWx0cyxcbiAgICogV2hlbiB5b3UgZGVmaW5lIGN1c3RvbSB0YWdzIHdlIHdvdWxkIGJlIGdsYWQgaWYgeW91IGNvbnRhY3QgdXMuXG4gICAqIFdlIHdvdWxkIGxpa2UgdG8gbGVhcm4gYWJvdXQgeW91ciB1c2UgY2FzZXMuXG4gICAqXG4gICAqIERlZmF1bHQgdGFncyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgb3ZlcnJpZGRlbiFcbiAgICpcbiAgICogRGVmYXVsdHMgYXJlOlxuICAgKiAqIGVudjogU2V0IHRvIFJpb0ZhcmdhdGVTZXJ2aWNlUHJvcHMjc3RhZ2UgcHJvcFxuICAgKiAqIHNlcnZpY2U6IFNldCB0byBSaW9GYXJnYXRlU2VydmljZVByb3BzI3NlcnZpY2VOYW1lIHByb3BcbiAgICogKiB2ZXJzaW9uOiBTZXQgdG8gUmlvRmFyZ2F0ZVNlcnZpY2VQcm9wcyN2ZXJzaW9uIHByb3BcbiAgICogKiBhY2NvdW50X2lkOiRcXHthY2NvdW50SURcXH1cbiAgICogKiBhY2NvdW50X25hbWU6JFxce2FjY291bnROYW1lXFx9XG4gICAqICogcmVnaW9uOiRcXHtBV1NSZWdpb25cXH1cbiAgICogKiB0ZWFtOiRcXHt0ZWFtTmFtZSBmcm9tIHNzbSBwYXJhbSAvY29uZmlnL3RlYW0vbmFtZVxcfVxuICAgKiAqIHRlYW1faWRlbnRpZmllcjokXFx7dGVhbUlkZW50aWZpZXIgZnJvbSBzc20gcGFyYW0gL2NvbmZpZy90ZWFtL2lkZW50aWZpZXJcXH1cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGVudW0gRGF0YURvZ0xvZ2dpbmdNb2RlIHtcbiAgLyoqXG4gICAqIEZvcndhcmQgbG9ncyBkaXJlY3RseSB0byBEYXRhZG9nIHVzaW5nIEFXUyBGaXJlTGVucyBhcyBsb2cgcm91dGVyLFxuICAgKiBzZWUgaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vaW50ZWdyYXRpb25zL2Vjc19mYXJnYXRlLz90YWI9Zmx1ZW50Yml0YW5kZmlyZWxlbnMjbG9nLWNvbGxlY3Rpb24uXG4gICAqL1xuICBBV1NfRklSRV9MRU5TLFxuXG4gIC8qKlxuICAgKiBTdG9yZSBsb2dzIGluIEFXUyBDbG91ZHdhdGNoIGFuZCB1c2UgdGhlIFJJTyBjdXN0b21pemVkIERhdGFkb2cgbG9nIGZvcndhcmRlciBsYW1iZGEgZnJvbSB0aGUgbGVnYWN5XG4gICAqIGRhdGFkb2ctaW50ZWdyYXRpb24sIHRvIGZvcndhcmQgdGhlIGxvZ3MgdG8gRGF0YWRvZyxcbiAgICpcbiAgICogQHNlZSBodHRwczovL2JpdGJ1Y2tldC5jb2xsYWJvcmF0aW9uLW1hbi5jb20vcHJvamVjdHMvUklPREVWL3JlcG9zL2RhdGFkb2ctaW50ZWdyYXRpb24vYnJvd3NlXG4gICAqIEBkZXByZWNhdGVkIHVzZSBEQVRBRE9HX0ZPUldBUkRFUl9MQU1CREFcbiAgICovXG4gIEZPUldBUkRFUl9MQU1CREEsXG5cbiAgLyoqXG4gICAqIFN0b3JlIGxvZ3MgaW4gQVdTIENsb3Vkd2F0Y2ggYW5kIHVzZSB0aGUgRGF0YWRvZyBsb2cgZm9yd2FyZGVyIGxhbWJkYSB0byBmb3J3YXJkIHRoZSBsb2dzIHRvIERhdGFkb2csXG4gICAqIHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9pbnRlZ3JhdGlvbnMvZWNzX2ZhcmdhdGUvP3RhYj1sb2dkcml2ZXIjbG9nLWNvbGxlY3Rpb24uXG4gICAqL1xuICBEQVRBRE9HX0ZPUldBUkRFUl9MQU1CREEsXG5cbiAgLyoqXG4gICAqIE9ubHkgbG9nIHRvIEFXUyBDbG91ZHdhdGNoIHdpdGhvdXQgZm9yd2FyZGluZyB0aGUgbG9ncyB0byBEYXRhZG9nLlxuICAgKi9cbiAgTk9ORSxcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9waW5pb25hdGVkIEVDUyBGYXJnYXRlIHNlcnZpY2UgZm9yIFJJTyBhcHBsaWNhdGlvbnMuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3QgYnVuZGxlcyB0aGUgcGllY2VzIHRoYXQgbW9zdCBSSU8gYmFja2VuZCBzZXJ2aWNlcyBuZWVkOlxuICogYW4gRUNTIHRhc2sgZGVmaW5pdGlvbiwgdGhlIGFwcGxpY2F0aW9uIGNvbnRhaW5lciwgYSBEYXRhZG9nIHNpZGVjYXIsXG4gKiBvcHRpb25hbCBGaXJlTGVucyBsb2cgcm91dGluZywgb3B0aW9uYWwgQUxCIHRhcmdldCBncm91cCB3aXJpbmcsIGFuZCB0aGVcbiAqIEVDUyBGYXJnYXRlIHNlcnZpY2UgaXRzZWxmLlxuICpcbiAqIEl0IGFsc28gZGVyaXZlcyBEYXRhZG9nIHRhZ3MgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIGBzdGFnZWAsXG4gKiBgc2VydmljZU5hbWVgLCBgdmVyc2lvbmAsIHRoZSBBV1MgYWNjb3VudCwgYW5kIHRoZSBzdGFuZGFyZCBSSU8gbGFuZGluZy16b25lXG4gKiBTU00gcGFyYW1ldGVycy4gRG8gbm90IHNldCBgRERfRU5WYCwgYEREX1NFUlZJQ0VgLCBgRERfVkVSU0lPTmAsIGBERF9UQUdTYCxcbiAqIG9yIGBERF9MT0dTX0lOSkVDVElPTmAgbWFudWFsbHkgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbnRhaW5lciBlbnZpcm9ubWVudC5cbiAqXG4gKiBVc2UgdGhpcyBjb25zdHJ1Y3Qgd2hlbiB5b3Ugd2FudCB0aGUgUklPIHBhdmVkIHJvYWQgZm9yIGEgd2ViLWZhY2luZyBvclxuICogc2VydmljZS1zdHlsZSBGYXJnYXRlIHdvcmtsb2FkIGFuZCB5b3Ugd2FudCB0aGUgZGVmYXVsdHMgZm9yIG9ic2VydmFiaWxpdHksXG4gKiBEYXRhZG9nIHNlcnZpY2UgY2F0YWxvZyByZWdpc3RyYXRpb24sIGFuZCBjb21tb24gQVdTIHdpcmluZyB0byBiZSBoYW5kbGVkXG4gKiBmb3IgeW91LlxuICogSWYgeW91IG5lZWQgYSBmdWxseSBjdXN0b20gRUNTIHNldHVwLCBvciBhIGRpZmZlcmVudCBkZXBsb3ltZW50IHN0cmF0ZWd5XG4gKiBzdWNoIGFzIGJsdWUvZ3JlZW4sIHVzZSBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCBvciB0aGUgYmx1ZS9ncmVlbiB2YXJpYW50XG4gKiBpbnN0ZWFkLlxuICpcbiAqIFRvIHVzZSBpdCwgcHJvdmlkZTpcbiAqIC0gYHN0YWdlYCwgYHNlcnZpY2VOYW1lYCwgYW5kIGB2ZXJzaW9uYCBmb3Igc2VydmljZSBpZGVudGl0eVxuICogLSBgdnBjYCBhbmQgb3B0aW9uYWxseSBhbiBleGlzdGluZyBgY2x1c3RlcmBcbiAqIC0gYGNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uaW1hZ2VgIGZvciB0aGUgYXBwbGljYXRpb24gaW1hZ2VcbiAqIC0gYGZhcmdhdGVPcHRpb25zLmNwdWAgYW5kIGBmYXJnYXRlT3B0aW9ucy5tZW1vcnlMaW1pdE1pQmAgZm9yIHRhc2sgc2l6aW5nXG4gKiAtIG9wdGlvbmFsIGBkYXRhZG9nT3B0aW9uc2AsIGBmcmFtZXdvcmtzYCwgYW5kIGBsb2FkQmFsYW5jZXJPcHRpb25zYFxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGB0c1xuICogY29uc3Qgc2VydmljZSA9IG5ldyBSaW9GYXJnYXRlU2VydmljZSh0aGlzLCAnU2VydmljZScsIHtcbiAqICAgc3RhZ2U6ICdwcm9kJyxcbiAqICAgc2VydmljZU5hbWU6ICdiaWxsaW5nLXZpZXcnLFxuICogICB2ZXJzaW9uOiBwcm9jZXNzLmVudi5HSVRfVkVSU0lPTiA/PyAnbG9jYWwnLFxuICogICB2cGM6IFJpb0xhbmRpbmdab25lLmdldERlZmF1bHRWcGModGhpcyksXG4gKiAgIGNvbnRhaW5lckRlZmluaXRpb25PcHRpb246IHtcbiAqICAgICBpbWFnZTogZWNzLkNvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeSgnZXhhbXBsZS9iaWxsaW5nLXZpZXc6bGF0ZXN0JyksXG4gKiAgIH0sXG4gKiAgIGZhcmdhdGVPcHRpb25zOiB7XG4gKiAgICAgY3B1OiA1MTIsXG4gKiAgICAgbWVtb3J5TGltaXRNaUI6IDEwMjQsXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUmlvRmFyZ2F0ZVNlcnZpY2UgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCBpbXBsZW1lbnRzIGVjMi5JQ29ubmVjdGFibGUge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERF9FTlZfREVOWV9MSVNUID0gWydERF9FTlYnLCAnRERfVEFHUycsICdERF9TRVJWSUNFJywgJ0REX1ZFUlNJT04nLCAnRERfTE9HU19JTkpFQ1RJT04nXTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERF9UQUdfREVOWV9MSVNUID0gW1xuICAgICdlbnYnLFxuICAgICdzZXJ2aWNlJyxcbiAgICAndmVyc2lvbicsXG4gICAgJ2FjY291bnRfaWQnLFxuICAgICdhY2NvdW50X25hbWUnLFxuICAgICdyZWdpb24nLFxuICAgICd0ZWFtJyxcbiAgICAndGVhbV9pZGVudGlmaWVyJyxcbiAgXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfQVBNX0dFVF9FTkRQT0lOVFNfVE9fSUdOT1JFOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19TSURFQ0FSX0NQVSA9IDY0O1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19TSURFQ0FSX01FTU9SWV9MSU1JVF9NSUIgPSAxMjg7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfRVNTRU5USUFMID0gdHJ1ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFET0dfRU5BQkxFX1JFU1RBUlRfUE9MSUNZID0gdHJ1ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFET0dfUkVTVEFSVF9JR05PUkVEX0VYSVRfQ09ERVMgPSBbMF07XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9MT0dHSU5HX01PREVfRk9SX1NFUlZJQ0UgPSBEYXRhRG9nTG9nZ2luZ01vZGUuRk9SV0FSREVSX0xBTUJEQTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0xPR0dJTkdfTU9ERV9GT1JfREFUQURPR19TSURFQ0FSID0gRGF0YURvZ0xvZ2dpbmdNb2RlLk5PTkU7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9ERVJFR0lTVFJBVElPTl9ERUxBWSA9IGNkay5EdXJhdGlvbi5zZWNvbmRzKDUpO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfU0xPV19TVEFSVCA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFET0dfU0lERUNBUl9UQUcgPSAnbGF0ZXN0JztcblxuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTE9HX1JPVVRFUl9DUFUgPSA2NDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0xPR19ST1VURVJfTUVNT1JZX0xJTUlUX01JQiA9IDY0O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgRklSRUxFTlNfQ09ORklHX0JVQ0tFVF9BUk4gPSAnYXJuOmF3czpzMzo6OjU3NzE0Njg5Nzc4NS1ldS13ZXN0LTEtZmlyZWxlbnMtY29uZmlndXJhdGlvbi1idWNrZXQnO1xuICBwcml2YXRlIHJlYWRvbmx5IEZJUkVMRU5TX0NPTkZJR19GSUxFX1BBVEggPSAnL3BhcnNlLWpzb24uY29uZic7XG5cbiAgcmVhZG9ubHkgc2VydmljZUNvbnRhaW5lckRlZmluaXRpb246IGVjcy5Db250YWluZXJEZWZpbml0aW9uO1xuICByZWFkb25seSBkYXRhZG9nU2lkZUNhckNvbnRhaW5lckRlZmluaXRpb246IGVjcy5Db250YWluZXJEZWZpbml0aW9uO1xuICByZWFkb25seSBsb2dSb3V0ZXJDb250YWluZXJEZWZpbml0aW9uPzogZWNzLkNvbnRhaW5lckRlZmluaXRpb247XG4gIHJlYWRvbmx5IHRhc2tEZWZpbml0aW9uOiBlY3MuRmFyZ2F0ZVRhc2tEZWZpbml0aW9uO1xuXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25zOiBlYzIuQ29ubmVjdGlvbnM7XG4gIHJlYWRvbmx5IHNlcnZpY2U6IGVjcy5GYXJnYXRlU2VydmljZTtcbiAgcmVhZG9ubHkgdGFyZ2V0R3JvdXA6IGVsYnYyLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmlvRmFyZ2F0ZVNlcnZpY2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB7XG4gICAgICBsb2FkQmFsYW5jZXJPcHRpb25zLFxuICAgICAgdnBjLFxuICAgICAgY2x1c3RlcixcbiAgICAgIGZhcmdhdGVPcHRpb25zLFxuICAgICAgZGF0YWRvZ09wdGlvbnMsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIGNvbnRhaW5lckRlZmluaXRpb25PcHRpb24sXG4gICAgICBzdGFnZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBmcmFtZXdvcmtzLFxuICAgIH0gPSBwcm9wcztcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKFxuICAgICAgbmV3IERlbnlMaXN0ZWRLZXlWYWxpZGF0b3IoXG4gICAgICAgIFJpb0ZhcmdhdGVTZXJ2aWNlLkREX0VOVl9ERU5ZX0xJU1QsXG4gICAgICAgIHByb3BzLmNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uZW52aXJvbm1lbnQsXG4gICAgICAgIGl0ID0+XG4gICAgICAgICAgYEVudmlyb25tZW50ICR7aXR9IGlzIG5vdCBhbGxvd2VkIHRvIGJlIHNldC4gVGhpcyB2YWx1ZSB3aWxsIGJlIGluZmVycmVkIGZyb20gdGhlIGFjY291bnQgb3Igb3RoZXIgcHJvcGVydGllcy5gXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihcbiAgICAgIG5ldyBEZW55TGlzdGVkS2V5VmFsaWRhdG9yKFxuICAgICAgICBSaW9GYXJnYXRlU2VydmljZS5ERF9UQUdfREVOWV9MSVNULFxuICAgICAgICBwcm9wcy5kYXRhZG9nT3B0aW9ucz8uYWRkaXRpb25hbFRhZ3MsXG4gICAgICAgIGl0ID0+IGBUYWcgJHtpdH0gaXMgbm90IGFsbG93ZWQgdG8gYmUgc2V0LiBUaGlzIHZhbHVlIHdpbGwgYmUgaW5mZXJyZWQgZnJvbSB0aGUgYWNjb3VudCBvciBvdGhlciBwcm9wZXJ0aWVzLmBcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24obmV3IENsdXN0ZXJWcGNWYWxpZGF0b3IocHJvcHMudnBjLCBwcm9wcy5jbHVzdGVyKSk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihuZXcgRGF0YWRvZ1NpZGVDYXJWYWxpZGF0b3IocHJvcHMuZGF0YWRvZ09wdGlvbnMpKTtcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKG5ldyBGaXJlbGVuc1NpZGVDYXJWYWxpZGF0b3IocHJvcHMuZGF0YWRvZ09wdGlvbnMpKTtcblxuICAgIGNvbnN0IGZhcmdhdGVDbHVzdGVyID1cbiAgICAgIGNsdXN0ZXIgPz9cbiAgICAgIG5ldyBlY3MuQ2x1c3Rlcih0aGlzLCAnQ2x1c3RlcicsIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICB9KTtcbiAgICB0aGlzLnRhc2tEZWZpbml0aW9uID0gbmV3IGVjcy5GYXJnYXRlVGFza0RlZmluaXRpb24odGhpcywgJ1Rhc2tEZWZpbml0aW9uJywge1xuICAgICAgY3B1OiBmYXJnYXRlT3B0aW9ucy5jcHUsXG4gICAgICBtZW1vcnlMaW1pdE1pQjogZmFyZ2F0ZU9wdGlvbnMubWVtb3J5TGltaXRNaUIsXG4gICAgICBydW50aW1lUGxhdGZvcm06IHtcbiAgICAgICAgY3B1QXJjaGl0ZWN0dXJlOiBmYXJnYXRlT3B0aW9ucy5ydW50aW1lUGxhdGZvcm0/LmNwdUFyY2hpdGVjdHVyZSA/PyBlY3MuQ3B1QXJjaGl0ZWN0dXJlLlg4Nl82NCxcbiAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiBmYXJnYXRlT3B0aW9ucy5ydW50aW1lUGxhdGZvcm0/Lm9wZXJhdGluZ1N5c3RlbUZhbWlseSA/PyBlY3MuT3BlcmF0aW5nU3lzdGVtRmFtaWx5LkxJTlVYLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBhY2NvdW50TmFtZSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ0FjY291bnROYW1lJyxcbiAgICAgICcvY29uZmlnL2FjY291bnQvbmFtZSdcbiAgICApLnN0cmluZ1ZhbHVlO1xuICAgIGNvbnN0IHRlYW1OYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZSh0aGlzLCAnVGVhbU5hbWUnLCAnL2NvbmZpZy90ZWFtL25hbWUnKS5zdHJpbmdWYWx1ZTtcbiAgICBjb25zdCB0ZWFtSWRlbnRpZmllciA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ1RlYW1JZGVudGlmaWVyJyxcbiAgICAgICcvY29uZmlnL3RlYW0vaWRlbnRpZmllcidcbiAgICApLnN0cmluZ1ZhbHVlO1xuXG4gICAgY29uc3QgZGF0YWRvZ1NlY3JldCA9IERhdGFkb2dTaGFyZWRTZWNyZXQuY3JlZGVudGlhbHNTZWNyZXQodGhpcyk7XG4gICAgY29uc3QgZGF0YWRvZ1NpdGUgPSBkYXRhZG9nU2VjcmV0LmdldFNlY3JldFZhbHVlKCdTaXRlJykudW5zYWZlVW53cmFwKCk7XG4gICAgY29uc3QgZGF0YWRvZ0FwaUtleSA9IGRhdGFkb2dTZWNyZXQuZ2V0U2VjcmV0KCdBcGlLZXknKTtcblxuICAgIGNvbnN0IGRhdGFkb2dTaWRlY2FyQ3B1ID0gZGF0YWRvZ09wdGlvbnM/LmNwdSA/PyB0aGlzLkRFRkFVTFRfREFUQURPR19TSURFQ0FSX0NQVTtcbiAgICBjb25zdCBkYXRhZG9nU2lkZWNhck1lbW9yeU1pQiA9IGRhdGFkb2dPcHRpb25zPy5tZW1vcnlMaW1pdE1pQiA/PyB0aGlzLkRFRkFVTFRfREFUQURPR19TSURFQ0FSX01FTU9SWV9MSU1JVF9NSUI7XG5cbiAgICBjb25zdCBsb2dnaW5nTW9kZUZvclNlcnZpY2UgPSBkYXRhZG9nT3B0aW9ucz8ubG9nZ2luZ01vZGVGb3JTZXJ2aWNlID8/IHRoaXMuREVGQVVMVF9MT0dHSU5HX01PREVfRk9SX1NFUlZJQ0U7XG4gICAgY29uc3QgbG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQgPVxuICAgICAgZGF0YWRvZ09wdGlvbnM/LmxvZ2dpbmdNb2RlRm9yRGF0YWRvZ0FnZW50ID8/IHRoaXMuREVGQVVMVF9MT0dHSU5HX01PREVfRk9SX0RBVEFET0dfU0lERUNBUjtcbiAgICBjb25zdCBmaXJlTGVuc0xvZ1JvdXRlclJlcXVpcmVkID1cbiAgICAgIGxvZ2dpbmdNb2RlRm9yU2VydmljZSA9PT0gRGF0YURvZ0xvZ2dpbmdNb2RlLkFXU19GSVJFX0xFTlMgfHxcbiAgICAgIGxvZ2dpbmdNb2RlRm9yRGF0YWRvZ0FnZW50ID09PSBEYXRhRG9nTG9nZ2luZ01vZGUuQVdTX0ZJUkVfTEVOUztcblxuICAgIGNvbnN0IGZpcmVMZW5zU2lkZWNhckNwdSA9IGRhdGFkb2dPcHRpb25zPy5hd3NGaXJlTGVuc0NwdSA/PyB0aGlzLkRFRkFVTFRfTE9HX1JPVVRFUl9DUFU7XG4gICAgY29uc3QgZmlyZUxlbnNTaWRlY2FyTWVtb3J5TWlCID1cbiAgICAgIGRhdGFkb2dPcHRpb25zPy5hd3NGaXJlTGVuc01lbW9yeUxpbWl0TWlCID8/IHRoaXMuREVGQVVMVF9MT0dfUk9VVEVSX01FTU9SWV9MSU1JVF9NSUI7XG4gICAgY29uc3QgZGF0YWRvZ1NpZGVjYXJFc3NlbnRpYWwgPSBkYXRhZG9nT3B0aW9ucz8uZGF0YWRvZ1NpZGVjYXJFc3NlbnRpYWwgPz8gdGhpcy5ERUZBVUxUX0RBVEFET0dfU0lERUNBUl9FU1NFTlRJQUw7XG4gICAgY29uc3QgZGF0YURvZ0VuYWJsZVJlc3RhcnRQb2xpY3kgPVxuICAgICAgZGF0YWRvZ09wdGlvbnM/LmVuYWJsZVJlc3RhcnRQb2xpY3kgPz8gdGhpcy5ERUZBVUxUX0RBVEFET0dfRU5BQkxFX1JFU1RBUlRfUE9MSUNZO1xuXG4gICAgZnVuY3Rpb24gZ2V0UmVzdGFydElnbm9yZWRFeGl0Q29kZXMoXG4gICAgICBlbmFibGVSZXN0YXJ0UG9saWN5OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICAgICAgcmVzdGFydElnbm9yZWRFeGl0Q29kZXM6IG51bWJlcltdIHwgdW5kZWZpbmVkLFxuICAgICAgZGVmYXVsdElnbm9yZWRFeGl0Q29kZXM6IG51bWJlcltdXG4gICAgKTogbnVtYmVyW10gfCB1bmRlZmluZWQge1xuICAgICAgaWYgKGVuYWJsZVJlc3RhcnRQb2xpY3kgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGVuYWJsZVJlc3RhcnRQb2xpY3kgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RhcnRJZ25vcmVkRXhpdENvZGVzID8/IFswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0SWdub3JlZEV4aXRDb2RlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkYXRhRG9ncmVzdGFydElnbm9yZWRFeGl0Q29kZXMgPSBnZXRSZXN0YXJ0SWdub3JlZEV4aXRDb2RlcyhcbiAgICAgIGRhdGFEb2dFbmFibGVSZXN0YXJ0UG9saWN5LFxuICAgICAgZGF0YWRvZ09wdGlvbnM/LnJlc3RhcnRJZ25vcmVkRXhpdENvZGVzLFxuICAgICAgdGhpcy5ERUZBVUxUX0RBVEFET0dfUkVTVEFSVF9JR05PUkVEX0VYSVRfQ09ERVNcbiAgICApO1xuXG4gICAgbGV0IHNlcnZpY2VDb250YWluZXJDcHVVbml0cztcbiAgICBsZXQgc2VydmljZUNvbnRhaW5lck1lbW9yeUxpbWl0TWlCO1xuXG4gICAgaWYgKGZpcmVMZW5zTG9nUm91dGVyUmVxdWlyZWQpIHtcbiAgICAgIHNlcnZpY2VDb250YWluZXJDcHVVbml0cyA9IGZhcmdhdGVPcHRpb25zLmNwdSAtIGRhdGFkb2dTaWRlY2FyQ3B1IC0gZmlyZUxlbnNTaWRlY2FyQ3B1O1xuICAgICAgc2VydmljZUNvbnRhaW5lck1lbW9yeUxpbWl0TWlCID1cbiAgICAgICAgZmFyZ2F0ZU9wdGlvbnMubWVtb3J5TGltaXRNaUIgLSBkYXRhZG9nU2lkZWNhck1lbW9yeU1pQiAtIGZpcmVMZW5zU2lkZWNhck1lbW9yeU1pQjtcbiAgICAgIGRhdGFkb2cuYWRkRmlyZWxlbnNDb25maWdVcGxvYWRGcm9tUzNQZXJtaXNzaW9ucyh7XG4gICAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgICBmaXJlbGVuc0NvbmZpZ0J1Y2tldEFybjogdGhpcy5GSVJFTEVOU19DT05GSUdfQlVDS0VUX0FSTixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXJ2aWNlQ29udGFpbmVyQ3B1VW5pdHMgPSBmYXJnYXRlT3B0aW9ucy5jcHUgLSBkYXRhZG9nU2lkZWNhckNwdTtcbiAgICAgIHNlcnZpY2VDb250YWluZXJNZW1vcnlMaW1pdE1pQiA9IGZhcmdhdGVPcHRpb25zLm1lbW9yeUxpbWl0TWlCIC0gZGF0YWRvZ1NpZGVjYXJNZW1vcnlNaUI7XG4gICAgfVxuICAgIHRoaXMuc2VydmljZUNvbnRhaW5lckRlZmluaXRpb24gPSB0aGlzLnRhc2tEZWZpbml0aW9uLmFkZENvbnRhaW5lcihzZXJ2aWNlTmFtZSwge1xuICAgICAgaW1hZ2U6IGNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uaW1hZ2UsXG4gICAgICBjcHU6IHNlcnZpY2VDb250YWluZXJDcHVVbml0cyxcbiAgICAgIG1lbW9yeUxpbWl0TWlCOiBzZXJ2aWNlQ29udGFpbmVyTWVtb3J5TGltaXRNaUIsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAuLi5kYXRhZG9nLmdldEZhcmdhdGVDb250YWluZXJFbnZpcm9ubWVudFZhcmlhYmxlcyh7XG4gICAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgICAgc3RhZ2UsXG4gICAgICAgICAgc2VydmljZU5hbWUsXG4gICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICBhY2NvdW50TmFtZSxcbiAgICAgICAgICB0ZWFtTmFtZSxcbiAgICAgICAgICB0ZWFtSWRlbnRpZmllcixcbiAgICAgICAgICBhZGRpdGlvbmFsVGFnczogZGF0YWRvZ09wdGlvbnM/LmFkZGl0aW9uYWxUYWdzLFxuICAgICAgICB9KSxcbiAgICAgICAgLi4uY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgICBkb2NrZXJMYWJlbHM6IHtcbiAgICAgICAgLi4uZGF0YWRvZy5nZXRGYXJnYXRlRG9ja2VyTGFiZWxzKHsgc3RhZ2UsIHNlcnZpY2VOYW1lLCB2ZXJzaW9uIH0pLFxuICAgICAgfSxcbiAgICAgIGhlYWx0aENoZWNrOiBjb250YWluZXJEZWZpbml0aW9uT3B0aW9uLmhlYWx0aENoZWNrLFxuICAgICAgbG9nZ2luZzogZGF0YWRvZy5zZXR1cExvZ2dpbmcoe1xuICAgICAgICBzY29wZSxcbiAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgIHRlYW1OYW1lLFxuICAgICAgICB0ZWFtSWRlbnRpZmllcixcbiAgICAgICAgc3RhZ2UsXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBkYXRhZG9nQXBpS2V5LFxuICAgICAgICBkYXRhZG9nTG9nZ2luZ01vZGU6IGxvZ2dpbmdNb2RlRm9yU2VydmljZSxcbiAgICAgICAgZGF0YWRvZ1NpdGUsXG4gICAgICAgIGNvbnRhaW5lclR5cGU6ICdzZXJ2aWNlJyxcbiAgICAgICAgYWRkaXRpb25hbFRhZ3M6IGRhdGFkb2dPcHRpb25zPy5hZGRpdGlvbmFsVGFncyxcbiAgICAgIH0pLFxuICAgICAgc2VjcmV0czogY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5zZWNyZXRzLFxuICAgIH0pO1xuXG4gICAgaWYgKGZyYW1ld29ya3M/LmluY2x1ZGVzKEZyYW1ld29yay5TUFJJTkcpKSB7XG4gICAgICBTcHJpbmcuYWxsb3dQYXJhbWV0ZXJTdG9yZUFjY2Vzc0ZvclNwcmluZ0Nsb3VkQXdzKHRoaXMsIHNlcnZpY2VOYW1lLCB0aGlzLnRhc2tEZWZpbml0aW9uLnRhc2tSb2xlKTtcbiAgICAgIFNwcmluZy5hbGxvd1NlY3JldHNNYW5hZ2VyQWNjZXNzRm9yU3ByaW5nQ2xvdWRBd3ModGhpcywgc2VydmljZU5hbWUsIHRoaXMudGFza0RlZmluaXRpb24udGFza1JvbGUpO1xuICAgIH1cblxuICAgIGlmIChmaXJlTGVuc0xvZ1JvdXRlclJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24gPSBkYXRhZG9nLmFkZEZpcmVMZW5zTG9nUm91dGVyKHtcbiAgICAgICAgdGFza0RlZmluaXRpb246IHRoaXMudGFza0RlZmluaXRpb24sXG4gICAgICAgIGNwdTogZmlyZUxlbnNTaWRlY2FyQ3B1LFxuICAgICAgICBtZW1vcnlMaW1pdE1pQjogZmlyZUxlbnNTaWRlY2FyTWVtb3J5TWlCLFxuICAgICAgICBmaXJlbGVuc0NvbmZpZ0J1Y2tldEFybjogdGhpcy5GSVJFTEVOU19DT05GSUdfQlVDS0VUX0FSTixcbiAgICAgICAgZmlyZWxlbnNDb25maWdGaWxlUGF0aDogdGhpcy5GSVJFTEVOU19DT05GSUdfRklMRV9QQVRILFxuICAgICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy50YXNrRGVmaW5pdGlvbi5leGVjdXRpb25Sb2xlPy5hZGRNYW5hZ2VkUG9saWN5KFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeScpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy50YXNrRGVmaW5pdGlvbi5leGVjdXRpb25Sb2xlKSB7XG4gICAgICBkYXRhZG9nU2VjcmV0LmdyYW50UmVhZCh0aGlzLnRhc2tEZWZpbml0aW9uLmV4ZWN1dGlvblJvbGUpO1xuICAgIH1cbiAgICB0aGlzLmRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbiA9IGRhdGFkb2cuYWRkRGF0YWRvZ1NpZGVjYXIoe1xuICAgICAgc2NvcGUsXG4gICAgICB0YXNrRGVmaW5pdGlvbjogdGhpcy50YXNrRGVmaW5pdGlvbixcbiAgICAgIGFjY291bnROYW1lLFxuICAgICAgdGVhbU5hbWUsXG4gICAgICB0ZWFtSWRlbnRpZmllcixcbiAgICAgIHN0YWdlLFxuICAgICAgc2VydmljZU5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgZGF0YWRvZ0FwaUtleSxcbiAgICAgIGRhdGFkb2dTaXRlLFxuICAgICAgZGF0YWRvZ0xvZ2dpbmdNb2RlOiBsb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudCxcbiAgICAgIGFwbUdldFJlc291cmNlc1RvSWdub3JlOiBkYXRhZG9nT3B0aW9ucz8uYXBtR2V0RW5kcG9pbnRzVG9JZ25vcmUgPz8gdGhpcy5ERUZBVUxUX0FQTV9HRVRfRU5EUE9JTlRTX1RPX0lHTk9SRSxcbiAgICAgIGNwdTogZGF0YWRvZ1NpZGVjYXJDcHUsXG4gICAgICBtZW1vcnlMaW1pdE1pQjogZGF0YWRvZ1NpZGVjYXJNZW1vcnlNaUIsXG4gICAgICBlc3NlbnRpYWw6IGRhdGFkb2dTaWRlY2FyRXNzZW50aWFsLFxuICAgICAgZW5hYmxlUmVzdGFydFBvbGljeTogZGF0YURvZ0VuYWJsZVJlc3RhcnRQb2xpY3ksXG4gICAgICByZXN0YXJ0SWdub3JlZEV4aXRDb2RlczogZGF0YURvZ3Jlc3RhcnRJZ25vcmVkRXhpdENvZGVzLFxuICAgICAgY29udGFpbmVyVGFnOiBwcm9wcy5kYXRhZG9nT3B0aW9ucz8uZGF0YWRvZ1NpZGVjYXJUYWcgPz8gdGhpcy5ERUZBVUxUX0RBVEFET0dfU0lERUNBUl9UQUcsIC8vIFRoZXNlIGFyZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsXG4gICAgICBhZGRpdGlvbmFsVGFnczogZGF0YWRvZ09wdGlvbnM/LmFkZGl0aW9uYWxUYWdzLFxuICAgIH0pO1xuXG4gICAgZGF0YWRvZy5lbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyh0aGlzKTtcblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlck9wdGlvbnNGb3JGYXJnYXRlU2VydmljZSA9IGxvYWRCYWxhbmNlck9wdGlvbnNcbiAgICAgID8geyBoZWFsdGhDaGVja0dyYWNlUGVyaW9kOiBsb2FkQmFsYW5jZXJPcHRpb25zLmhlYWx0aENoZWNrR3JhY2VQZXJpb2QgfVxuICAgICAgOiB7fTtcblxuICAgIHRoaXMuc2VydmljZSA9IG5ldyBlY3MuRmFyZ2F0ZVNlcnZpY2UodGhpcywgJ1NlcnZpY2UnLCB7XG4gICAgICBjbHVzdGVyOiBmYXJnYXRlQ2x1c3RlcixcbiAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgY2lyY3VpdEJyZWFrZXI6IHsgcm9sbGJhY2s6IHRydWUgfSxcbiAgICAgIG1heEhlYWx0aHlQZXJjZW50OiAyMDAsXG4gICAgICBtaW5IZWFsdGh5UGVyY2VudDogMTAwLFxuICAgICAgZGVzaXJlZENvdW50OiBmYXJnYXRlT3B0aW9ucz8uZGVzaXJlZENvdW50LFxuICAgICAgLi4ubG9hZEJhbGFuY2VyT3B0aW9uc0ZvckZhcmdhdGVTZXJ2aWNlLFxuICAgICAgcHJvcGFnYXRlVGFnczogZWNzLlByb3BhZ2F0ZWRUYWdTb3VyY2UuU0VSVklDRSxcbiAgICB9KTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLnNlcnZpY2UuY29ubmVjdGlvbnM7XG5cbiAgICBpZiAobG9hZEJhbGFuY2VyT3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb250YWluZXJQb3J0ID0gNDQzO1xuICAgICAgdGhpcy5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRQb3J0TWFwcGluZ3Moe1xuICAgICAgICBjb250YWluZXJQb3J0OiBjb250YWluZXJQb3J0LFxuICAgICAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlRDUCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy50YXJnZXRHcm91cCA9IG5ldyBlbGJ2Mi5BcHBsaWNhdGlvblRhcmdldEdyb3VwKHRoaXMsICdUYXJnZXRHcm91cCcsIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIHBvcnQ6IGNvbnRhaW5lclBvcnQsXG4gICAgICAgIHByb3RvY29sOiBlbGJ2Mi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFBTLFxuICAgICAgICB0YXJnZXRUeXBlOiBlbGJ2Mi5UYXJnZXRUeXBlLklQLFxuICAgICAgICB0YXJnZXRzOiBbdGhpcy5zZXJ2aWNlXSxcbiAgICAgICAgaGVhbHRoQ2hlY2s6IGxvYWRCYWxhbmNlck9wdGlvbnMuaGVhbHRoQ2hlY2ssXG4gICAgICAgIHNsb3dTdGFydDogcHJvcHMubG9hZEJhbGFuY2VyT3B0aW9ucz8uc2xvd1N0YXJ0ID8/IHRoaXMuREVGQVVMVF9TTE9XX1NUQVJULFxuICAgICAgICBkZXJlZ2lzdHJhdGlvbkRlbGF5OiBwcm9wcy5sb2FkQmFsYW5jZXJPcHRpb25zPy5kZXJlZ2lzdHJhdGlvbkRlbGF5ID8/IHRoaXMuREVGQVVMVF9ERVJFR0lTVFJBVElPTl9ERUxBWSxcbiAgICAgIH0pO1xuXG4gICAgICBsb2FkQmFsYW5jZXJPcHRpb25zLmxpc3RlbmVyUnVsZXMuZm9yRWFjaCgoeyBwcmlvcml0eSwgY29uZGl0aW9ucyB9KSA9PiB7XG4gICAgICAgIGxvYWRCYWxhbmNlck9wdGlvbnMubGlzdGVuZXIuYWRkVGFyZ2V0R3JvdXBzKGBQcmlvcml0eSR7cHJpb3JpdHl9TGlzdGVuZXJSdWxlYCwge1xuICAgICAgICAgIHRhcmdldEdyb3VwczogW3RoaXMudGFyZ2V0R3JvdXAgYXMgZWxidjIuQXBwbGljYXRpb25UYXJnZXRHcm91cF0sXG4gICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgIGNvbmRpdGlvbnM6IGNvbmRpdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3IERhdGFkb2dTZXJ2aWNlQ2F0YWxvZ0VudHJ5KHRoaXMsICdEYXRhZG9nU2VydmljZUNhdGFsb2dFbnRyeScsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBzZXJ2aWNlTmFtZSxcbiAgICAgIGxhbmd1YWdlczogWydqYXZhJ10sXG4gICAgICBzZXJ2aWNlVHlwZTogJ3dlYicsXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRGVueUxpc3RlZEtleVZhbGlkYXRvciBpbXBsZW1lbnRzIGNvbnN0cnVjdHMuSVZhbGlkYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbnlMaXN0OiBzdHJpbmdbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlR2VuZXJhdG9yOiAoa2V5TmFtZTogc3RyaW5nKSA9PiBzdHJpbmdcbiAgKSB7fVxuXG4gIHZhbGlkYXRlKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuZGljdCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICB0aGlzLmRlbnlMaXN0LmZvckVhY2goa2V5TmFtZSA9PiB7XG4gICAgICBpZiAodGhpcy5kaWN0ICYmIGtleU5hbWUgaW4gdGhpcy5kaWN0KSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXMubWVzc2FnZUdlbmVyYXRvcihrZXlOYW1lKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmNsYXNzIENsdXN0ZXJWcGNWYWxpZGF0b3IgaW1wbGVtZW50cyBjb25zdHJ1Y3RzLklWYWxpZGF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB2cGM6IGVjMi5JVnBjLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2x1c3Rlcj86IGVjcy5JQ2x1c3RlclxuICApIHt9XG5cbiAgdmFsaWRhdGUoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGlmICh0aGlzLmNsdXN0ZXIgJiYgdGhpcy5jbHVzdGVyLnZwYy52cGNJZCAhPT0gdGhpcy52cGMudnBjSWQpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBgVGhlIFZQQyBwcm92aWRlZCBpbiB0aGUgY2x1c3RlciAoJHt0aGlzLmNsdXN0ZXIudnBjLm5vZGUuaWR9KSBNVVNUIG1hdGNoIHRoZSBWUEMgcHJvdmlkZWQgYXMgYXJndW1lbnQgKCR7dGhpcy52cGMubm9kZS5pZH0pLmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY2xhc3MgRGF0YWRvZ1NpZGVDYXJWYWxpZGF0b3IgaW1wbGVtZW50cyBjb25zdHJ1Y3RzLklWYWxpZGF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkYXRhZG9nT3B0aW9ucz86IERhdGFkb2dJbnRlZ3JhdGlvblByb3BzKSB7fVxuICB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgaWYgKFxuICAgICAgdGhpcy5kYXRhZG9nT3B0aW9ucyAmJlxuICAgICAgdGhpcy5kYXRhZG9nT3B0aW9ucy5lbmFibGVSZXN0YXJ0UG9saWN5ID09PSBmYWxzZSAmJlxuICAgICAgdGhpcy5kYXRhZG9nT3B0aW9ucy5yZXN0YXJ0SWdub3JlZEV4aXRDb2Rlc1xuICAgICkge1xuICAgICAgcmVzdWx0LnB1c2goJ1Jlc3RhcnRJZ25vcmVkRXhpdENvZGVzIGNhbm5vdCBiZSBzcGVjaWZpZWQgaWYgZW5hYmxlUmVzdGFydFBvbGljeSBpcyBmYWxzZScpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmNsYXNzIEZpcmVsZW5zU2lkZUNhclZhbGlkYXRvciBpbXBsZW1lbnRzIGNvbnN0cnVjdHMuSVZhbGlkYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRhdGFkb2dPcHRpb25zPzogRGF0YWRvZ0ludGVncmF0aW9uUHJvcHMpIHt9XG5cbiAgdmFsaWRhdGUoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGFkb2dPcHRpb25zKSB7XG4gICAgICBjb25zdCBpc0ZpcmVsZW5zVXNlZCA9XG4gICAgICAgIHRoaXMuZGF0YWRvZ09wdGlvbnMubG9nZ2luZ01vZGVGb3JTZXJ2aWNlID09IERhdGFEb2dMb2dnaW5nTW9kZS5BV1NfRklSRV9MRU5TIHx8XG4gICAgICAgIHRoaXMuZGF0YWRvZ09wdGlvbnMubG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQgPT0gRGF0YURvZ0xvZ2dpbmdNb2RlLkFXU19GSVJFX0xFTlM7XG4gICAgICBjb25zdCBpc0ZpcmVsZW5zQ29uZmlndXJlZCA9IHRoaXMuZGF0YWRvZ09wdGlvbnMuYXdzRmlyZUxlbnNDcHUgfHwgdGhpcy5kYXRhZG9nT3B0aW9ucy5hd3NGaXJlTGVuc01lbW9yeUxpbWl0TWlCO1xuXG4gICAgICBpZiAoIWlzRmlyZWxlbnNVc2VkICYmIGlzRmlyZWxlbnNDb25maWd1cmVkKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICdZb3UgY2Fubm90IG92ZXJyaWRlIHRoZSBjb250YWluZXIgcmVzb3VyY2UgYWxsb2NhdGlvbiBmb3IgZmlyZWxlbnMgaWYgaXQgaXMgbm90IHVzZWQgYXMgbG9nZ2luZyBtb2RlIGZvciBhbnkgY29udGFpbmVyJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=
package/lib/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export * from './contributions/cop-frontend/cloudfront';
4
4
  export * from './contributions/smart-route/gitlab-runner';
5
5
  export * from './contributions/team-claid';
6
6
  export * from './contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor';
7
+ export * from './contributions/team-shipper-inbound-blue/pipeline';
7
8
  export * from './contributions/team-transport-two/datadog';
8
9
  export * from './contributions/team-transport-two/datadog-synthetics';
9
10
  export * from './contributions/team-transport-two/pipeline';
@@ -17,9 +18,7 @@ export * from './fargate/rio-fargate-service-blue-green-alpha';
17
18
  export * from './iam';
18
19
  export * from './kafka';
19
20
  export * as kafka from './kafka';
20
- export * from './pipeline/rio-backup-secrets-restore-stage';
21
- export * from './pipeline/rio-bitbucket-source-action';
22
- export * from './pipeline/rio-pipeline-type';
21
+ export * from './pipeline';
23
22
  export * from './rio-claidometer';
24
23
  export * from './rio-landing-zone';
25
24
  export * from './rio-load-balancer';
package/lib/index.js CHANGED
@@ -21,6 +21,7 @@ __exportStar(require("./contributions/cop-frontend/cloudfront"), exports);
21
21
  __exportStar(require("./contributions/smart-route/gitlab-runner"), exports);
22
22
  __exportStar(require("./contributions/team-claid"), exports);
23
23
  __exportStar(require("./contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor"), exports);
24
+ __exportStar(require("./contributions/team-shipper-inbound-blue/pipeline"), exports);
24
25
  __exportStar(require("./contributions/team-transport-two/datadog"), exports);
25
26
  __exportStar(require("./contributions/team-transport-two/datadog-synthetics"), exports);
26
27
  __exportStar(require("./contributions/team-transport-two/pipeline"), exports);
@@ -34,9 +35,7 @@ __exportStar(require("./fargate/rio-fargate-service-blue-green-alpha"), exports)
34
35
  __exportStar(require("./iam"), exports);
35
36
  __exportStar(require("./kafka"), exports);
36
37
  exports.kafka = require("./kafka");
37
- __exportStar(require("./pipeline/rio-backup-secrets-restore-stage"), exports);
38
- __exportStar(require("./pipeline/rio-bitbucket-source-action"), exports);
39
- __exportStar(require("./pipeline/rio-pipeline-type"), exports);
38
+ __exportStar(require("./pipeline"), exports);
40
39
  __exportStar(require("./rio-claidometer"), exports);
41
40
  __exportStar(require("./rio-landing-zone"), exports);
42
41
  __exportStar(require("./rio-load-balancer"), exports);
@@ -45,4 +44,4 @@ exports.ses = require("./ses");
45
44
  __exportStar(require("./test"), exports);
46
45
  __exportStar(require("./watchful"), exports);
47
46
  exports.watchfulv2 = require("./watchfulv2");
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIscUNBQW1DO0FBQ25DLDBFQUF3RDtBQUN4RCw0RUFBMEQ7QUFDMUQsNkRBQTJDO0FBQzNDLDRHQUEwRjtBQUMxRiw2RUFBMkQ7QUFDM0Qsd0ZBQXNFO0FBQ3RFLDhFQUE0RDtBQUM1RCw0Q0FBMEI7QUFDMUIsdUNBQXFDO0FBQ3JDLDJDQUF5QztBQUN6QywrQkFBNkI7QUFDN0IsdUNBQXFDO0FBQ3JDLGdFQUE4QztBQUM5QyxpRkFBK0Q7QUFDL0Qsd0NBQXNCO0FBQ3RCLDBDQUF3QjtBQUN4QixtQ0FBaUM7QUFDakMsOEVBQTREO0FBQzVELHlFQUF1RDtBQUN2RCwrREFBNkM7QUFDN0Msb0RBQWtDO0FBQ2xDLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsd0NBQXNCO0FBQ3RCLCtCQUE2QjtBQUM3Qix5Q0FBdUI7QUFDdkIsNkNBQTJCO0FBQzNCLDZDQUEyQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmFja3VwJztcbmV4cG9ydCAqIGFzIGJhY2t1cCBmcm9tICcuL2JhY2t1cCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvY29wLWZyb250ZW5kL2Nsb3VkZnJvbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3NtYXJ0LXJvdXRlL2dpdGxhYi1ydW5uZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tY2xhaWQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tb3V0Ym91bmQtb3JkZXItYm9vay9hd3MtZWNzLWFicnVwdGx5LXN0b3BwZWQtbW9uaXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvdGVhbS10cmFuc3BvcnQtdHdvL2RhdGFkb2cnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9kYXRhZG9nLXN5bnRoZXRpY3MnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGFkb2cnO1xuZXhwb3J0ICogYXMgZGF0YWRvZyBmcm9tICcuL2RhdGFkb2cnO1xuZXhwb3J0ICogYXMgZGF0YWRvZ3YyIGZyb20gJy4vZGF0YWRvZ3YyJztcbmV4cG9ydCAqIGFzIGVjciBmcm9tICcuL2Vjcic7XG5leHBvcnQgKiBhcyBmYXJnYXRlIGZyb20gJy4vZmFyZ2F0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZhcmdhdGUvcmlvLWZhcmdhdGUtc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZhcmdhdGUvcmlvLWZhcmdhdGUtc2VydmljZS1ibHVlLWdyZWVuLWFscGhhJztcbmV4cG9ydCAqIGZyb20gJy4vaWFtJztcbmV4cG9ydCAqIGZyb20gJy4va2Fma2EnO1xuZXhwb3J0ICogYXMga2Fma2EgZnJvbSAnLi9rYWZrYSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3Jpby1iYWNrdXAtc2VjcmV0cy1yZXN0b3JlLXN0YWdlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvcmlvLWJpdGJ1Y2tldC1zb3VyY2UtYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvcmlvLXBpcGVsaW5lLXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9yaW8tY2xhaWRvbWV0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9yaW8tbGFuZGluZy16b25lJztcbmV4cG9ydCAqIGZyb20gJy4vcmlvLWxvYWQtYmFsYW5jZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zZXMnO1xuZXhwb3J0ICogYXMgc2VzIGZyb20gJy4vc2VzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdCc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsJztcbmV4cG9ydCAqIGFzIHdhdGNoZnVsdjIgZnJvbSAnLi93YXRjaGZ1bHYyJztcbiJdfQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIscUNBQW1DO0FBQ25DLDBFQUF3RDtBQUN4RCw0RUFBMEQ7QUFDMUQsNkRBQTJDO0FBQzNDLDRHQUEwRjtBQUMxRixxRkFBbUU7QUFDbkUsNkVBQTJEO0FBQzNELHdGQUFzRTtBQUN0RSw4RUFBNEQ7QUFDNUQsNENBQTBCO0FBQzFCLHVDQUFxQztBQUNyQywyQ0FBeUM7QUFDekMsK0JBQTZCO0FBQzdCLHVDQUFxQztBQUNyQyxnRUFBOEM7QUFDOUMsaUZBQStEO0FBQy9ELHdDQUFzQjtBQUN0QiwwQ0FBd0I7QUFDeEIsbUNBQWlDO0FBQ2pDLDZDQUEyQjtBQUMzQixvREFBa0M7QUFDbEMscURBQW1DO0FBQ25DLHNEQUFvQztBQUNwQyx3Q0FBc0I7QUFDdEIsK0JBQTZCO0FBQzdCLHlDQUF1QjtBQUN2Qiw2Q0FBMkI7QUFDM0IsNkNBQTJDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYWNrdXAnO1xuZXhwb3J0ICogYXMgYmFja3VwIGZyb20gJy4vYmFja3VwJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJpYnV0aW9ucy9jb3AtZnJvbnRlbmQvY2xvdWRmcm9udCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lcic7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvdGVhbS1jbGFpZCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvdGVhbS1vdXRib3VuZC1vcmRlci1ib29rL2F3cy1lY3MtYWJydXB0bHktc3RvcHBlZC1tb25pdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJpYnV0aW9ucy90ZWFtLXNoaXBwZXItaW5ib3VuZC1ibHVlL3BpcGVsaW5lJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vZGF0YWRvZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvdGVhbS10cmFuc3BvcnQtdHdvL2RhdGFkb2ctc3ludGhldGljcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvdGVhbS10cmFuc3BvcnQtdHdvL3BpcGVsaW5lJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YWRvZyc7XG5leHBvcnQgKiBhcyBkYXRhZG9nIGZyb20gJy4vZGF0YWRvZyc7XG5leHBvcnQgKiBhcyBkYXRhZG9ndjIgZnJvbSAnLi9kYXRhZG9ndjInO1xuZXhwb3J0ICogYXMgZWNyIGZyb20gJy4vZWNyJztcbmV4cG9ydCAqIGFzIGZhcmdhdGUgZnJvbSAnLi9mYXJnYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vZmFyZ2F0ZS9yaW8tZmFyZ2F0ZS1zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZmFyZ2F0ZS9yaW8tZmFyZ2F0ZS1zZXJ2aWNlLWJsdWUtZ3JlZW4tYWxwaGEnO1xuZXhwb3J0ICogZnJvbSAnLi9pYW0nO1xuZXhwb3J0ICogZnJvbSAnLi9rYWZrYSc7XG5leHBvcnQgKiBhcyBrYWZrYSBmcm9tICcuL2thZmthJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9yaW8tY2xhaWRvbWV0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9yaW8tbGFuZGluZy16b25lJztcbmV4cG9ydCAqIGZyb20gJy4vcmlvLWxvYWQtYmFsYW5jZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zZXMnO1xuZXhwb3J0ICogYXMgc2VzIGZyb20gJy4vc2VzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdCc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsJztcbmV4cG9ydCAqIGFzIHdhdGNoZnVsdjIgZnJvbSAnLi93YXRjaGZ1bHYyJztcbiJdfQ==
@@ -224,7 +224,28 @@ export declare class KafkaTopic extends Construct {
224
224
  constructor(scope: Construct, id: string, props: KafkaTopicProps);
225
225
  }
226
226
  /**
227
- * Construct to create a kafka topic.
227
+ * Construct to create a version 4 RIO Kafka topic.
228
+ *
229
+ * Prefer this construct for new topics. Keep the default retention and partition count unless there is a concrete
230
+ * operational requirement to change them. Partition increases are permanent and may require coordination with CLAID
231
+ * when service limits are exceeded.
232
+ *
233
+ * Example:
234
+ * ```ts
235
+ * new KafkaTopicV4(this, 'EventsTopic', {
236
+ * name: 'billing-view.events',
237
+ * metadata: {
238
+ * description: 'Domain events emitted by Billing View.',
239
+ * audience: 'company-internal',
240
+ * recoveryPolicy: 'recoverable',
241
+ * },
242
+ * acl: {
243
+ * write: ['billing-view'],
244
+ * read: ['billing-consumer'],
245
+ * },
246
+ * isLogCompacted: false,
247
+ * });
248
+ * ```
228
249
  */
229
250
  export declare class KafkaTopicV4 extends Construct {
230
251
  constructor(scope: Construct, id: string, props: KafkaTopicV4Props);
@@ -30,7 +30,28 @@ exports.KafkaTopic = KafkaTopic;
30
30
  _a = JSII_RTTI_SYMBOL_1;
31
31
  KafkaTopic[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.KafkaTopic", version: "0.0.0" };
32
32
  /**
33
- * Construct to create a kafka topic.
33
+ * Construct to create a version 4 RIO Kafka topic.
34
+ *
35
+ * Prefer this construct for new topics. Keep the default retention and partition count unless there is a concrete
36
+ * operational requirement to change them. Partition increases are permanent and may require coordination with CLAID
37
+ * when service limits are exceeded.
38
+ *
39
+ * Example:
40
+ * ```ts
41
+ * new KafkaTopicV4(this, 'EventsTopic', {
42
+ * name: 'billing-view.events',
43
+ * metadata: {
44
+ * description: 'Domain events emitted by Billing View.',
45
+ * audience: 'company-internal',
46
+ * recoveryPolicy: 'recoverable',
47
+ * },
48
+ * acl: {
49
+ * write: ['billing-view'],
50
+ * read: ['billing-consumer'],
51
+ * },
52
+ * isLogCompacted: false,
53
+ * });
54
+ * ```
34
55
  */
35
56
  class KafkaTopicV4 extends constructs_1.Construct {
36
57
  constructor(scope, id, props) {
@@ -122,4 +143,4 @@ const mapProperties = (scope, props) => {
122
143
  },
123
144
  };
124
145
  };
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2Fma2EtdG9waWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2Fma2Eva2Fma2EtdG9waWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBbUM7QUFDbkMsNkNBQWlFO0FBQ2pFLDJDQUFtRDtBQUNuRCwwREFBcUQ7QUEwUHJEOzs7O0dBSUc7QUFDSCxNQUFhLFVBQVcsU0FBUSxzQkFBUztJQUN2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIseUJBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBRXpFLElBQUkseUJBQVcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ2xDLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsVUFBVSxFQUFFO2dCQUNWLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxHQUFHO2FBQ2I7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDOztBQWZILGdDQWdCQzs7O0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUN6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSx5QkFBVyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDbEMsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixVQUFVLEVBQUU7Z0JBQ1YsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztnQkFDN0IsT0FBTyxFQUFFLEdBQUc7Z0JBQ1osUUFB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O1FBQ25FLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQzlGLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxzQkFBc0IsSUFBSSxLQUFLO1FBQzdELGFBQWEsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVE7UUFDMUQsU0FBUyxFQUFFLFNBQVM7UUFDcEIsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtRQUM1QyxHQUFHLEVBQUU7WUFDSCxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQ3BCLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7WUFDdEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTTtTQUN6QjtLQUNGLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMsIENmblJlc291cmNlLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUmlvTGFuZGluZ1pvbmUgfSBmcm9tICcuLi9yaW8tbGFuZGluZy16b25lJztcbmltcG9ydCB7IEthZmthRXZlbnRTcGVjU291cmNlIH0gZnJvbSAnLi9rYWZrYS1ldmVudC1zcGVjJztcblxuLyoqXG4gKiBXcmFwcGVyIGZvciBhbGwgbWV0YWRhdGEgb2YgYSB0b3BpYy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYVRvcGljTWV0YURhdGEge1xuICAvKipcbiAgICogVGhlIGV2ZW50IHNwZWNzIG9mIHRoZSBldmVudHMgb24gdGhhdCB0b3BpY1xuICAgKiBAZGVwcmVjYXRlZCBFdmVudHMgYXJlIG5vIGxvbmdlciBwcm92aWRlZCB0aHJvdWdoIHRoaXMgY29uc3RydWN0LiBTcGVjaWZ5IHRoZSBldmVudCBpbiB0aGUgY2F0YWxvZy1pbmZvLnlhbWwuIFNlZSB0aGUgQmFja3N0YWdlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqL1xuICByZWFkb25seSBldmVudHM/OiBLYWZrYUV2ZW50U3BlY1NvdXJjZVtdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIGludGVudCBvZiB0aGUgdG9waWMuIFRoaXMgbWlnaHQgYmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV2ZW50cyBvbiB0aGF0IHRvcGljXG4gICAqIG9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2R1Y2VyIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgZXZlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZvciBhbGwgbWV0YSBkYXRhIG9mIGEgdjQgdG9waWMgc3BlYy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYVRvcGljTWV0YURhdGFWNCB7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgc3BlY3Mgb2YgdGhlIGV2ZW50cyBvbiB0aGF0IHRvcGljXG4gICAqIEBkZXByZWNhdGVkIEV2ZW50cyBhcmUgbm8gbG9uZ2VyIHByb3ZpZGVkIHRocm91Z2ggdGhpcyBjb25zdHJ1Y3QuIFNwZWNpZnkgdGhlIGV2ZW50IGluIHRoZSBjYXRhbG9nLWluZm8ueWFtbC4gU2VlIHRoZSBCYWNrc3RhZ2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50cz86IEthZmthRXZlbnRTcGVjU291cmNlW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgaW50ZW50IG9mIHRoZSB0b3BpYy4gVGhpcyBtaWdodCBiZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXZlbnRzIG9uIHRoYXQgdG9waWNcbiAgICogb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvZHVjZXIgYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBldmVudHMuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgYSB0b3BpYyBpcyBtZWFudCBmb3IgY29tcG9uZW50IGludGVybmFsIHVzYWdlIG9ubHkgb3IgaWYgb3RoZXIgc2VydmljZXMgY291bGRcbiAgICogdXNlIGl0IHRvby5cbiAgICovXG4gIHJlYWRvbmx5IGF1ZGllbmNlOiBUb3BpY0F1ZGllbmNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHByb2R1Y2VyIHdpbGwgcmVzdG9yZSB0aGUgZGF0YSBpbiBjYXNlIG9mIGEgZGlzYXN0ZXIgb3Igbm90LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3ZlcnlQb2xpY3k6IFRvcGljUmVjb3ZlcnlQb2xpY3k7XG59XG5cbi8qKlxuICogUmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoZSB0b3BpYy5cbiAqXG4gKiBzdHJpbmdzIGFyZSBtYXRjaGVkIGFnYWluc3QgdGhlIENOQU1FIG9mIHRoZSBjZXJ0aWZpY2F0ZSBvZiB0aGUgS2Fma2EgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYUFjbFN0YXRlbWVudCB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIGNsaWVudHMgdGhhdCBzaG91bGQgZ2V0IHdyaXRlIHBlcm1pc3Npb25zXG4gICAqL1xuICByZWFkb25seSB3cml0ZTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgY2xpZW50cyB0aGF0IHNob3VsZCBnZXQgcmVhZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVhZDogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgY2xpZW50cyB0aGF0IHNob3VsZCBnZXQgZGVsZXRlIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBBdHRlbnRpb246IE9ubHkgdXNlIERlbGV0aW9uIHBvbGljeSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmchXG4gICAqIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgZm9yIEtTdHJlYW0gYW5kIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gZGVsZXRlIG1lc3NhZ2VzIGFuZCB0aGUgdG9waWMuPGJyPlxuICAgKiBJZiB5b3UganVzdCB3YW50IHRvIFwiZGVsZXRlXCIgYSBtZXNzYWdlIG9uIGEgbG9nIGNvbXBhY3RlZCB0b3BpYywgeW91IHNob3VsZCBub3Qgc2V0IHRoaXMgcGVybWlzc2lvbiBhbmQgc2VuZCBhIHRvbWJzdG9uZSBtZXNzYWdlIGluc3RlYWQuXG4gICAqXG4gICAqIEBqc2lpIGlnbm9yZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogV3JhcHBlciBmb3IgYWxsIGxvZyBjb21wYWN0aW9uIHJlbGF0ZWQgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dDb21wYWN0aW9uUHJvcGVydGllcyB7XG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIHRpbWUgdG8gcmV0YWluIGRlbGV0ZSB0b21ic3RvbmUgbWFya2VycyBmb3IgbG9nIGNvbXBhY3RlZCB0b3BpY3M7XG4gICAqIFRoZSBzb2Z0IGxpbWl0IGlzIDEwIGRheXMgYnV0IGNhbiBiZSBpbmNyZWFzZWQgdXBvbiByZXF1ZXN0cy5cbiAgICogQGRlZmF1bHRWYWx1ZSAxIGRheVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlUmV0ZW50aW9uPzogRHVyYXRpb247XG59XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgc2VydmljZSBsaW1pdHMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIHRvcGljIG1hbmFnZXIuXG4gKiBJZiB5b3UgbmVlZCB0byBpbmNyZWFzZSB0aGUgbGltaXRzIGZvciB5b3VyIHNlcnZpY2UsIHBsZWFzZSBjb250YWN0IENMQUlELlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthVG9waWNQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIG5hbWUgb2YgdGhlIHRvcGljOyBoYXMgdG8gbWF0Y2ggcGF0dGVybiBbQS1aYS16MC05Li1dK1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGRlZ3JlZSBvZiBwYXJhbGxlbGlzbSBvZiB0aGUgdG9waWM7IHNob3VsZCBiZSBpbmNyZWFzZWQgZm9yXG4gICAqIGxhcmdlIGV4cGVjdGVkIGxvYWRzIChlLmcuLCAyNSBmb3IgcmlvLmFzc2V0LWlvdC1ldmVudHMpLlxuICAgKiBUaGUgc29mdCBsaW1pdCBpcyAxMCBwYXJ0aXRpb25zIGJ1dCBjYW4gYmUgaW5jcmVhc2VkIHVwb24gcmVxdWVzdHMuXG4gICAqIFBhcnRpdGlvbnMgYXJlIGEgbGltaXRlZCByZXNvdXJjZSBhbmQgY2Fubm90IGJlIGRlY3JlYXNlZC5cbiAgICogQGRlZmF1bHRWYWx1ZSAzXG4gICAqL1xuICByZWFkb25seSBudW1iZXJPZlBhcnRpdGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgZGVncmVlIG9mIHJlcGxpY2F0aW9uIG9mIG1lc3NhZ2VzOyBoYXMgdG8gYmUgYmV0d2VlbiAxIGFuZCB0aGUgbnVtYmVyIG9mIGJyb2tlcnMgKGN1cnJlbnRseSAzKS5cbiAgICogQGRlZmF1bHRWYWx1ZSAzXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhdGlvbkZhY3Rvcj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGltZSBob3cgbG9uZyBtZXNzYWdlcyBhcmUgcmV0YWluZWQgb24gS2Fma2EgY2x1c3RlcjtcbiAgICpcbiAgICogRm9yIG1vc3QgY2FzZXMsIDcgZGF5cyAoNjA0ODAwMDAwIG1zKSBpcyByZWNvbW1lbmRlZDsgdXAgdG8gMzAgZGF5cyBtYXkgYmUgY29uc2lkZXJlZFxuICAgKiBvbmx5IGZvciBleGNlcHRpb25hbCBzY2VuYXJpb3Mgd2l0aCBzcGVjaWZpYyByZXF1aXJlbWVudHMgYW5kIGNhbiBsZWFkIHRvIGluY3JlYXNlZCBLYWZrYSBzdG9yYWdlIGNvc3RzLlxuICAgKiBUaGUgc29mdCBsaW1pdCBpcyAzIHRvIDMwIGRheXMuXG4gICAqIEBkZWZhdWx0VmFsdWUgNyBkYXlzXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb24/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogSWYgc2V0IHRvICdmYWxzZSwgdGhlIHRvcGljJ3MgZGF0YSB3aWxsIGJlIGRlbGV0ZWQgb24gS2Fma2EgMTAgZGF5cyBhZnRlciBzdGFjayBkZWxldGlvbi5cbiAgICogSWYgc2V0IHRvICd0cnVlJywgaXQgd2lsbCBiZSBkZWxldGVkIGltbWVkaWF0ZWx5IGFmdGVyIHN0YWNrIGRlbGV0aW9uLlxuICAgKiBAZGVmYXVsdFZhbHVlIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW50RGVsZXRpb25FbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1ldGFkYXRhIG9mIHRoZSB0b3BpYy5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhOiBLYWZrYVRvcGljTWV0YURhdGE7XG5cbiAgLyoqXG4gICAqIFRoZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgdG8gdGhlIHRvcGljJ3MgZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IGFjbDogS2Fma2FBY2xTdGF0ZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0aGUgdG9waWMgaXMgbG9nIGNvbXBhY3RlZCBvciBub3QuXG4gICAqL1xuICByZWFkb25seSBpc0xvZ0NvbXBhY3RlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogTXVzdCBvbmx5IGJlIHByb3ZpZGVkIGlmICdpc0xvZ0NvbXBhY3RlZCcgaXMgJ3RydWUnLlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nQ29tcGFjdGlvblByb3BlcnRpZXM/OiBMb2dDb21wYWN0aW9uUHJvcGVydGllcztcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gY29tcGFjdGlvbiBsYWcgaW4gbWlsbGlzZWNvbmRzLlxuICAgKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIGEgbWVzc2FnZSBjYW4gYmUgZGVsYXllZCBiZWZvcmUgaXQgaXMgY29tcGFjdGVkLlxuICAgKiBAZGVmYXVsdFZhbHVlIDkyMjMzNzIwMzY4NTQ3NzU4MDdcbiAgICovXG4gIHJlYWRvbmx5IG1heENvbXBhY3Rpb25MYWdNcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgY3VycmVudCBzZXJ2aWNlIGxpbWl0cyBhcmUgY29uZmlndXJlZCBpbiB0aGUgdG9waWMgbWFuYWdlci5cbiAqIElmIHlvdSBuZWVkIHRvIGluY3JlYXNlIHRoZSBsaW1pdHMgZm9yIHlvdXIgc2VydmljZSwgcGxlYXNlIGNvbnRhY3QgQ0xBSUQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FUb3BpY1Y0UHJvcHMge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBuYW1lIG9mIHRoZSB0b3BpYzsgaGFzIHRvIG1hdGNoIHBhdHRlcm4gW0EtWmEtejAtOS4tXStcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyBkZWdyZWUgb2YgcGFyYWxsZWxpc20gb2YgdGhlIHRvcGljOyBzaG91bGQgYmUgaW5jcmVhc2VkIGZvclxuICAgKiBsYXJnZSBleHBlY3RlZCBsb2FkcyAoZS5nLiwgMjUgZm9yIHJpby5hc3NldC1pb3QtZXZlbnRzKS5cbiAgICogVGhlIHNvZnQgbGltaXQgaXMgMTAgcGFydGl0aW9ucyBidXQgY2FuIGJlIGluY3JlYXNlZCB1cG9uIHJlcXVlc3RzLlxuICAgKiBQYXJ0aXRpb25zIGFyZSBhIGxpbWl0ZWQgcmVzb3VyY2UgYW5kIGNhbm5vdCBiZSBkZWNyZWFzZWQuXG4gICAqIEBkZWZhdWx0VmFsdWUgM1xuICAgKi9cbiAgcmVhZG9ubHkgbnVtYmVyT2ZQYXJ0aXRpb25zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGRlZ3JlZSBvZiByZXBsaWNhdGlvbiBvZiBtZXNzYWdlczsgaGFzIHRvIGJlIGJldHdlZW4gMSBhbmQgdGhlIG51bWJlciBvZiBicm9rZXJzIChjdXJyZW50bHkgMykuXG4gICAqIEBkZWZhdWx0VmFsdWUgM1xuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25GYWN0b3I/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWUgaG93IGxvbmcgbWVzc2FnZXMgYXJlIHJldGFpbmVkIG9uIEthZmthIGNsdXN0ZXI7XG4gICAqXG4gICAqIEZvciBtb3N0IGNhc2VzLCA3IGRheXMgKDYwNDgwMDAwMCBtcykgaXMgcmVjb21tZW5kZWQ7IHVwIHRvIDMwIGRheXMgbWF5IGJlIGNvbnNpZGVyZWRcbiAgICogb25seSBmb3IgZXhjZXB0aW9uYWwgc2NlbmFyaW9zIHdpdGggc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGFuZCBjYW4gbGVhZCB0byBpbmNyZWFzZWQgS2Fma2Egc3RvcmFnZSBjb3N0cy5cbiAgICogVGhlIHNvZnQgbGltaXQgaXMgMyB0byAzMCBkYXlzIGJ1dCBjYW4gYmUgaW5jcmVhc2VkIHVwb24gcmVxdWVzdHMuXG4gICAqIEBkZWZhdWx0VmFsdWUgNyBkYXlzXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb24/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogSWYgc2V0IHRvICdmYWxzZSwgdGhlIHRvcGljJ3MgZGF0YSB3aWxsIGJlIGRlbGV0ZWQgb24gS2Fma2EgMTAgZGF5cyBhZnRlciBzdGFjayBkZWxldGlvbi5cbiAgICogSWYgc2V0IHRvICd0cnVlJywgaXQgd2lsbCBiZSBkZWxldGVkIGltbWVkaWF0ZWx5IGFmdGVyIHN0YWNrIGRlbGV0aW9uLlxuICAgKiBAZGVmYXVsdFZhbHVlIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW50RGVsZXRpb25FbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1ldGFkYXRhIG9mIHRoZSB0b3BpYy5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhOiBLYWZrYVRvcGljTWV0YURhdGFWNDtcblxuICAvKipcbiAgICogVGhlIHBlcm1pc3Npb25zIHRvIGFjY2VzcyB0byB0aGUgdG9waWMncyBkYXRhLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNsOiBLYWZrYUFjbFN0YXRlbWVudDtcblxuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSB0b3BpYyBpcyBsb2cgY29tcGFjdGVkIG9yIG5vdC5cbiAgICovXG4gIHJlYWRvbmx5IGlzTG9nQ29tcGFjdGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNdXN0IG9ubHkgYmUgcHJvdmlkZWQgaWYgJ2lzTG9nQ29tcGFjdGVkJyBpcyAndHJ1ZScuXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBsb2dDb21wYWN0aW9uUHJvcGVydGllcz86IExvZ0NvbXBhY3Rpb25Qcm9wZXJ0aWVzO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIHRvcGljIHNob3VsZCBiZSBiYWNrZWQgdXAgYXV0b21hdGljYWxseSBvciBub3QuXG4gICAqIEl0IGNvdWxkIGp1c3QgYmUgZW5hYmxlZCwgaWYgdGhlIHRvcGljIGlzIGNvbXBhY3RlZCBhbmQgdGhlIFJlY292ZXJ5UG9saWN5IGlzICdyZWNvdmVyYWJsZScuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBtYW5hZ2VkQmFja3VwRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGNvbXBhY3Rpb24gbGFnIGluIG1pbGxpc2Vjb25kcy5cbiAgICpcbiAgICogVGhlIG1heGltdW0gdGltZSBhIG1lc3NhZ2UgY2FuIGJlIGRlbGF5ZWQgYmVmb3JlIGl0IGlzIGNvbXBhY3RlZC5cbiAgICogQGRlZmF1bHRWYWx1ZSA5MjIzMzcyMDM2ODU0Nzc1ODA3XG4gICAqL1xuICByZWFkb25seSBtYXhDb21wYWN0aW9uTGFnTXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIFRvcGljcyB0YXJnZXQgYXVkaWVuY2VcbiAqL1xuZXhwb3J0IHR5cGUgVG9waWNBdWRpZW5jZSA9ICdjb21wb25lbnQtaW50ZXJuYWwnIHwgJ2NvbXBhbnktaW50ZXJuYWwnO1xuXG4vKipcbiAqIFRoZSBUb3BpY3MgcmVjb3ZlcnkgcG9saWN5IGd1YXJhbnRlZWQgYnkgdGhlIHByb2R1Y2VyXG4gKi9cbmV4cG9ydCB0eXBlIFRvcGljUmVjb3ZlcnlQb2xpY3kgPSAnbm9uZScgfCAncmVjb3ZlcmFibGUnO1xuXG4vKipcbiAqIENvbnN0cnVjdCB0byBjcmVhdGUgYSBrYWZrYSB0b3BpYy5cbiAqXG4gKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rIEthZmthVG9waWNWNH0gaW5zdGVhZFxuICovXG5leHBvcnQgY2xhc3MgS2Fma2FUb3BpYyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLYWZrYVRvcGljUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRGVwcmVjYXRpb24oJ0thZmthVG9waWMnLCBcIlVzZSAnS2Fma2FUb3BpY1Y0JyFcIik7XG5cbiAgICBuZXcgQ2ZuUmVzb3VyY2UodGhpcywgJ0thZmthVG9waWMnLCB7XG4gICAgICB0eXBlOiAnQ3VzdG9tOjpLYWZrYVRvcGljJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4ubWFwUHJvcGVydGllcyh0aGlzLCBwcm9wcyksXG4gICAgICAgIFZlcnNpb246ICczJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih2YWxpZGF0b3IocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdCB0byBjcmVhdGUgYSBrYWZrYSB0b3BpYy5cbiAqL1xuZXhwb3J0IGNsYXNzIEthZmthVG9waWNWNCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLYWZrYVRvcGljVjRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBuZXcgQ2ZuUmVzb3VyY2UodGhpcywgJ0thZmthVG9waWMnLCB7XG4gICAgICB0eXBlOiAnQ3VzdG9tOjpLYWZrYVRvcGljJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4ubWFwUHJvcGVydGllcyh0aGlzLCBwcm9wcyksXG4gICAgICAgIFZlcnNpb246ICc0JyxcbiAgICAgICAgQXVkaWVuY2U6IHByb3BzLm1ldGFkYXRhLmF1ZGllbmNlLFxuICAgICAgICBSZWNvdmVyeVBvbGljeTogcHJvcHMubWV0YWRhdGEucmVjb3ZlcnlQb2xpY3ksXG4gICAgICAgIE1hbmFnZWRCYWNrdXBFbmFibGVkOiBwcm9wcy5tYW5hZ2VkQmFja3VwRW5hYmxlZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih2YWxpZGF0b3IocHJvcHMpKTtcbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihiYWNrdXBQcm9wZXJ0aWVzVmFsaWRhdG9yKHByb3BzKSk7XG4gIH1cbn1cblxuY29uc3QgdmFsaWRhdG9yID0gKHByb3BzOiBLYWZrYVRvcGljUHJvcHMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICB2YWxpZGF0ZTogKCk6IHN0cmluZ1tdID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICBpZiAoIXByb3BzLm5hbWUubWF0Y2goL15bQS1aYS16MC05Li1dKyQvKSkge1xuICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbbmFtZV06IGV4cGVjdGluZyB0b3BpYyBuYW1lIHRvIG1hdGNoIHRoZSByZWcgZXhwIGBbQS1aYS16MC05Li1dK2AuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgcHJvcHMubnVtYmVyT2ZQYXJ0aXRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKCFOdW1iZXIuaXNJbnRlZ2VyKHByb3BzLm51bWJlck9mUGFydGl0aW9ucykgfHwgcHJvcHMubnVtYmVyT2ZQYXJ0aXRpb25zIDwgMSlcbiAgICAgICkge1xuICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICBgSW52YWxpZCBbbnVtYmVyT2ZQYXJ0aXRpb25zXTogZXhwZWN0aW5nIG51bWJlciBvZiBwYXJ0aXRpb25zIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlciBidXQgZ290ICR7cHJvcHMubnVtYmVyT2ZQYXJ0aXRpb25zfS5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgcHJvcHMucmVwbGljYXRpb25GYWN0b3IgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAoIU51bWJlci5pc0ludGVnZXIocHJvcHMucmVwbGljYXRpb25GYWN0b3IpIHx8IHByb3BzLnJlcGxpY2F0aW9uRmFjdG9yIDwgMSB8fCBwcm9wcy5yZXBsaWNhdGlvbkZhY3RvciA+IDMpXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW3JlcGxpY2F0aW9uRmFjdG9yXTogZXhwZWN0aW5nIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAzLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXByb3BzLmlzTG9nQ29tcGFjdGVkICYmIHByb3BzLmxvZ0NvbXBhY3Rpb25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFtsb2dDb21wYWN0aW9uUHJvcGVydGllc106IGxvZyBjb21wYWN0aW9uIGlzIGRpc2FibGVkIHNvIHByb3BlcnRpZXMgbXVzdCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcHJvcHMuaXNMb2dDb21wYWN0ZWQgJiYgcHJvcHMubWF4Q29tcGFjdGlvbkxhZ01zKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFttYXhDb21wYWN0aW9uTGFnTXNdOiBtYXggY29tcGFjdGlvbiBsYWcgaXMgb25seSBhbGxvd2VkIGZvciBsb2cgY29tcGFjdGVkIHRvcGljcy4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICB9O1xufTtcblxuY29uc3QgYmFja3VwUHJvcGVydGllc1ZhbGlkYXRvciA9IChwcm9wczogS2Fma2FUb3BpY1Y0UHJvcHMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICB2YWxpZGF0ZTogKCk6IHN0cmluZ1tdID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICBpZiAocHJvcHMubWFuYWdlZEJhY2t1cEVuYWJsZWQgJiYgIXByb3BzLmlzTG9nQ29tcGFjdGVkKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFttYW5hZ2VkQmFja3VwRW5hYmxlZF06IG1hbmFnZWQgYmFja3VwIGNhbiBvbmx5IGJlIGVuYWJsZWQgZm9yIGxvZyBjb21wYWN0ZWQgdG9waWNzLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMubWFuYWdlZEJhY2t1cEVuYWJsZWQgJiYgcHJvcHMubWV0YWRhdGEucmVjb3ZlcnlQb2xpY3kgIT09ICdyZWNvdmVyYWJsZScpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgJ0ludmFsaWQgW21hbmFnZWRCYWNrdXBFbmFibGVkXTogdG9waWNzIHdpdGggbWFuYWdlZEJhY2t1cEVuYWJsZWQgaGF2ZSB0byBoYXZlIHJlY292ZXJ5IHBvbGljeSBcInJlY292ZXJhYmxlXCIuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gIH07XG59O1xuXG5jb25zdCBtYXBQcm9wZXJ0aWVzID0gKHNjb3BlOiBJQ29uc3RydWN0LCBwcm9wczogS2Fma2FUb3BpY1Byb3BzIHwgS2Fma2FUb3BpY1Y0UHJvcHMpID0+IHtcbiAgY29uc3QgdGVhbUVtYWlsID0gUmlvTGFuZGluZ1pvbmUuZ2V0VGVhbUVtYWlsUGFyYW1ldGVyKHNjb3BlKS5zdHJpbmdWYWx1ZTtcblxuICBpZiAocHJvcHMubWV0YWRhdGEuZXZlbnRzPy5sZW5ndGggJiYgcHJvcHMubWV0YWRhdGEuZXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBjZGsuQW5ub3RhdGlvbnMub2Yoc2NvcGUpLmFkZERlcHJlY2F0aW9uKFxuICAgICAgJ0thZmthVG9waWNNZXRhRGF0YS5ldmVudHMnLFxuICAgICAgJ0V2ZW50cyBhcmUgbm8gbG9uZ2VyIHByb3ZpZGVkIHRocm91Z2ggdGhpcyBjb25zdHJ1Y3QuIFNwZWNpZnkgdGhlIGV2ZW50IGluIHRoZSBjYXRhbG9nLWluZm8ueWFtbC4gU2VlIHRoZSBCYWNrc3RhZ2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nXG4gICAgKTtcbiAgfVxuICBjb25zdCBkZWxldGVSZXRlbnRpb25EdXJhdGlvbiA9IHByb3BzLmxvZ0NvbXBhY3Rpb25Qcm9wZXJ0aWVzPy5kZWxldGVSZXRlbnRpb24gPz8gRHVyYXRpb24uZGF5cyg3KTtcbiAgaWYgKHByb3BzLmFjbC5kZWxldGUgIT0gdW5kZWZpbmVkICYmIHByb3BzLmFjbC5kZWxldGUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGFubm90YXRpb25zID0gY2RrLkFubm90YXRpb25zLm9mKGNkay5TdGFjay5vZihzY29wZSkpO1xuICAgIGFubm90YXRpb25zLmFkZFdhcm5pbmdWMihcbiAgICAgIGBAcmlvLWNsb3VkL2Nkay12Mi1jb25zdHJ1Y3RzL2thZmthL2thZmthLXRvcGljLyR7cHJvcHMubmFtZX0vRGVsZXRpb25Qb2xpY3lgLFxuICAgICAgYFxuIOKdjCBZb3UgaGF2ZSBzZXQgXCJkZWxldGVcIiBwZXJtaXNzaW9uIGZvciBrYWZrYS10b3BpYyAke3Byb3BzLm5hbWV9LiBZb3UgcHJvYmFibHkgZG8gbm90IG5lZWQgdGhpcy4gUGxlYXNlIHVzZSB0aGlzIG9ubHkgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuYFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBTZXJ2aWNlVG9rZW46ICdhcm46YXdzOnNuczpldS13ZXN0LTE6MTg2OTkzNzU3NzM0OmRwLXRvcGljLW1hbmFnZXItc25zLXRvcGljJyxcbiAgICBUb3BpY05hbWU6IHByb3BzLm5hbWUsXG4gICAgRGVzY3JpcHRpb246IHByb3BzLm1ldGFkYXRhLmRlc2NyaXB0aW9uLFxuICAgIE51bWJlck9mUGFydGl0aW9uczogcHJvcHMubnVtYmVyT2ZQYXJ0aXRpb25zID8/IDMsXG4gICAgUmVwbGljYXRpb25GYWN0b3I6IHByb3BzLnJlcGxpY2F0aW9uRmFjdG9yID8/IDMsXG4gICAgUmV0ZW50aW9uTXM6IChwcm9wcy5yZXRlbnRpb24gPz8gRHVyYXRpb24uZGF5cyg3KSkudG9NaWxsaXNlY29uZHMoKSxcbiAgICBEZWxldGVSZXRlbnRpb25NczogcHJvcHMuaXNMb2dDb21wYWN0ZWQgPyBkZWxldGVSZXRlbnRpb25EdXJhdGlvbi50b01pbGxpc2Vjb25kcygpIDogdW5kZWZpbmVkLFxuICAgIEluc3RhbnREZWxldGlvbkVuYWJsZWQ6IHByb3BzLmluc3RhbnREZWxldGlvbkVuYWJsZWQgPz8gZmFsc2UsXG4gICAgQ2xlYW51cFBvbGljeTogcHJvcHMuaXNMb2dDb21wYWN0ZWQgPyAnY29tcGFjdCcgOiAnZGVsZXRlJyxcbiAgICBUZWFtRW1haWw6IHRlYW1FbWFpbCxcbiAgICBNYXhDb21wYWN0aW9uTGFnTXM6IHByb3BzLm1heENvbXBhY3Rpb25MYWdNcyxcbiAgICBBQ0w6IHtcbiAgICAgIFJlYWQ6IHByb3BzLmFjbC5yZWFkLFxuICAgICAgV3JpdGU6IHByb3BzLmFjbC53cml0ZSxcbiAgICAgIERlbGV0ZTogcHJvcHMuYWNsLmRlbGV0ZSxcbiAgICB9LFxuICB9O1xufTtcbiJdfQ==
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2Fma2EtdG9waWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2Fma2Eva2Fma2EtdG9waWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBbUM7QUFDbkMsNkNBQWlFO0FBQ2pFLDJDQUFtRDtBQUNuRCwwREFBcUQ7QUEwUHJEOzs7O0dBSUc7QUFDSCxNQUFhLFVBQVcsU0FBUSxzQkFBUztJQUN2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIseUJBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBRXpFLElBQUkseUJBQVcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ2xDLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsVUFBVSxFQUFFO2dCQUNWLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxHQUFHO2FBQ2I7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDOztBQWZILGdDQWdCQzs7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsc0JBQVM7SUFDekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUkseUJBQVcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ2xDLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsVUFBVSxFQUFFO2dCQUNWLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0JBQzdCLE9B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QUMsQ0FBQyxDQUFDLGNBQWMsRUFBRTtRQUNuRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM5RixzQkFBc0IsRUFBRSxLQUFLLENBQUMsc0JBQXNCLElBQUksS0FBSztRQUM3RCxhQUFhLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQzFELFNBQVMsRUFBRSxTQUFTO1FBQ3BCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7UUFDNUMsR0FBRyxFQUFFO1lBQ0gsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSTtZQUNwQixLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLO1lBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07U0FDekI7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEFubm90YXRpb25zLCBDZm5SZXNvdXJjZSwgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vcmlvLWxhbmRpbmctem9uZSc7XG5pbXBvcnQgeyBLYWZrYUV2ZW50U3BlY1NvdXJjZSB9IGZyb20gJy4va2Fma2EtZXZlbnQtc3BlYyc7XG5cbi8qKlxuICogV3JhcHBlciBmb3IgYWxsIG1ldGFkYXRhIG9mIGEgdG9waWMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FUb3BpY01ldGFEYXRhIHtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBzcGVjcyBvZiB0aGUgZXZlbnRzIG9uIHRoYXQgdG9waWNcbiAgICogQGRlcHJlY2F0ZWQgRXZlbnRzIGFyZSBubyBsb25nZXIgcHJvdmlkZWQgdGhyb3VnaCB0aGlzIGNvbnN0cnVjdC4gU3BlY2lmeSB0aGUgZXZlbnQgaW4gdGhlIGNhdGFsb2ctaW5mby55YW1sLiBTZWUgdGhlIEJhY2tzdGFnZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnRzPzogS2Fma2FFdmVudFNwZWNTb3VyY2VbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGVzY3JpYmVzIHRoZSBpbnRlbnQgb2YgdGhlIHRvcGljLiBUaGlzIG1pZ2h0IGJlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBldmVudHMgb24gdGhhdCB0b3BpY1xuICAgKiBvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9kdWNlciBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGV2ZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV3JhcHBlciBmb3IgYWxsIG1ldGEgZGF0YSBvZiBhIHY0IHRvcGljIHNwZWMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FUb3BpY01ldGFEYXRhVjQge1xuICAvKipcbiAgICogVGhlIGV2ZW50IHNwZWNzIG9mIHRoZSBldmVudHMgb24gdGhhdCB0b3BpY1xuICAgKiBAZGVwcmVjYXRlZCBFdmVudHMgYXJlIG5vIGxvbmdlciBwcm92aWRlZCB0aHJvdWdoIHRoaXMgY29uc3RydWN0LiBTcGVjaWZ5IHRoZSBldmVudCBpbiB0aGUgY2F0YWxvZy1pbmZvLnlhbWwuIFNlZSB0aGUgQmFja3N0YWdlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqL1xuICByZWFkb25seSBldmVudHM/OiBLYWZrYUV2ZW50U3BlY1NvdXJjZVtdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIGludGVudCBvZiB0aGUgdG9waWMuIFRoaXMgbWlnaHQgYmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV2ZW50cyBvbiB0aGF0IHRvcGljXG4gICAqIG9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2R1Y2VyIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgZXZlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGEgdG9waWMgaXMgbWVhbnQgZm9yIGNvbXBvbmVudCBpbnRlcm5hbCB1c2FnZSBvbmx5IG9yIGlmIG90aGVyIHNlcnZpY2VzIGNvdWxkXG4gICAqIHVzZSBpdCB0b28uXG4gICAqL1xuICByZWFkb25seSBhdWRpZW5jZTogVG9waWNBdWRpZW5jZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBwcm9kdWNlciB3aWxsIHJlc3RvcmUgdGhlIGRhdGEgaW4gY2FzZSBvZiBhIGRpc2FzdGVyIG9yIG5vdC5cbiAgICovXG4gIHJlYWRvbmx5IHJlY292ZXJ5UG9saWN5OiBUb3BpY1JlY292ZXJ5UG9saWN5O1xufVxuXG4vKipcbiAqIFJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIGZvciB0aGUgdG9waWMuXG4gKlxuICogc3RyaW5ncyBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBDTkFNRSBvZiB0aGUgY2VydGlmaWNhdGUgb2YgdGhlIEthZmthIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FBY2xTdGF0ZW1lbnQge1xuICAvKipcbiAgICogTGlzdCBvZiBjbGllbnRzIHRoYXQgc2hvdWxkIGdldCB3cml0ZSBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGU6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGNsaWVudHMgdGhhdCBzaG91bGQgZ2V0IHJlYWQgcGVybWlzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHJlYWQ6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGNsaWVudHMgdGhhdCBzaG91bGQgZ2V0IGRlbGV0ZSBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogQXR0ZW50aW9uOiBPbmx5IHVzZSBEZWxldGlvbiBwb2xpY3kgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIVxuICAgKiBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBLU3RyZWFtIGFuZCBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIGRlbGV0ZSBtZXNzYWdlcyBhbmQgdGhlIHRvcGljLjxicj5cbiAgICogSWYgeW91IGp1c3Qgd2FudCB0byBcImRlbGV0ZVwiIGEgbWVzc2FnZSBvbiBhIGxvZyBjb21wYWN0ZWQgdG9waWMsIHlvdSBzaG91bGQgbm90IHNldCB0aGlzIHBlcm1pc3Npb24gYW5kIHNlbmQgYSB0b21ic3RvbmUgbWVzc2FnZSBpbnN0ZWFkLlxuICAgKlxuICAgKiBAanNpaSBpZ25vcmVcbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0ZT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFdyYXBwZXIgZm9yIGFsbCBsb2cgY29tcGFjdGlvbiByZWxhdGVkIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nQ29tcGFjdGlvblByb3BlcnRpZXMge1xuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB0aW1lIHRvIHJldGFpbiBkZWxldGUgdG9tYnN0b25lIG1hcmtlcnMgZm9yIGxvZyBjb21wYWN0ZWQgdG9waWNzO1xuICAgKiBUaGUgc29mdCBsaW1pdCBpcyAxMCBkYXlzIGJ1dCBjYW4gYmUgaW5jcmVhc2VkIHVwb24gcmVxdWVzdHMuXG4gICAqIEBkZWZhdWx0VmFsdWUgMSBkYXlcbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0ZVJldGVudGlvbj86IER1cmF0aW9uO1xufVxuXG4vKipcbiAqIFRoZSBjdXJyZW50IHNlcnZpY2UgbGltaXRzIGFyZSBjb25maWd1cmVkIGluIHRoZSB0b3BpYyBtYW5hZ2VyLlxuICogSWYgeW91IG5lZWQgdG8gaW5jcmVhc2UgdGhlIGxpbWl0cyBmb3IgeW91ciBzZXJ2aWNlLCBwbGVhc2UgY29udGFjdCBDTEFJRC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYVRvcGljUHJvcHMge1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBuYW1lIG9mIHRoZSB0b3BpYzsgaGFzIHRvIG1hdGNoIHBhdHRlcm4gW0EtWmEtejAtOS4tXStcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyBkZWdyZWUgb2YgcGFyYWxsZWxpc20gb2YgdGhlIHRvcGljOyBzaG91bGQgYmUgaW5jcmVhc2VkIGZvclxuICAgKiBsYXJnZSBleHBlY3RlZCBsb2FkcyAoZS5nLiwgMjUgZm9yIHJpby5hc3NldC1pb3QtZXZlbnRzKS5cbiAgICogVGhlIHNvZnQgbGltaXQgaXMgMTAgcGFydGl0aW9ucyBidXQgY2FuIGJlIGluY3JlYXNlZCB1cG9uIHJlcXVlc3RzLlxuICAgKiBQYXJ0aXRpb25zIGFyZSBhIGxpbWl0ZWQgcmVzb3VyY2UgYW5kIGNhbm5vdCBiZSBkZWNyZWFzZWQuXG4gICAqIEBkZWZhdWx0VmFsdWUgM1xuICAgKi9cbiAgcmVhZG9ubHkgbnVtYmVyT2ZQYXJ0aXRpb25zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGRlZ3JlZSBvZiByZXBsaWNhdGlvbiBvZiBtZXNzYWdlczsgaGFzIHRvIGJlIGJldHdlZW4gMSBhbmQgdGhlIG51bWJlciBvZiBicm9rZXJzIChjdXJyZW50bHkgMykuXG4gICAqIEBkZWZhdWx0VmFsdWUgM1xuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25GYWN0b3I/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWUgaG93IGxvbmcgbWVzc2FnZXMgYXJlIHJldGFpbmVkIG9uIEthZmthIGNsdXN0ZXI7XG4gICAqXG4gICAqIEZvciBtb3N0IGNhc2VzLCA3IGRheXMgKDYwNDgwMDAwMCBtcykgaXMgcmVjb21tZW5kZWQ7IHVwIHRvIDMwIGRheXMgbWF5IGJlIGNvbnNpZGVyZWRcbiAgICogb25seSBmb3IgZXhjZXB0aW9uYWwgc2NlbmFyaW9zIHdpdGggc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGFuZCBjYW4gbGVhZCB0byBpbmNyZWFzZWQgS2Fma2Egc3RvcmFnZSBjb3N0cy5cbiAgICogVGhlIHNvZnQgbGltaXQgaXMgMyB0byAzMCBkYXlzLlxuICAgKiBAZGVmYXVsdFZhbHVlIDcgZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgcmV0ZW50aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byAnZmFsc2UsIHRoZSB0b3BpYydzIGRhdGEgd2lsbCBiZSBkZWxldGVkIG9uIEthZmthIDEwIGRheXMgYWZ0ZXIgc3RhY2sgZGVsZXRpb24uXG4gICAqIElmIHNldCB0byAndHJ1ZScsIGl0IHdpbGwgYmUgZGVsZXRlZCBpbW1lZGlhdGVseSBhZnRlciBzdGFjayBkZWxldGlvbi5cbiAgICogQGRlZmF1bHRWYWx1ZSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFudERlbGV0aW9uRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRhZGF0YSBvZiB0aGUgdG9waWMuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogS2Fma2FUb3BpY01ldGFEYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHRvIHRoZSB0b3BpYydzIGRhdGEuXG4gICAqL1xuICByZWFkb25seSBhY2w6IEthZmthQWNsU3RhdGVtZW50O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIHRvcGljIGlzIGxvZyBjb21wYWN0ZWQgb3Igbm90LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNMb2dDb21wYWN0ZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE11c3Qgb25seSBiZSBwcm92aWRlZCBpZiAnaXNMb2dDb21wYWN0ZWQnIGlzICd0cnVlJy5cbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0NvbXBhY3Rpb25Qcm9wZXJ0aWVzPzogTG9nQ29tcGFjdGlvblByb3BlcnRpZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGNvbXBhY3Rpb24gbGFnIGluIG1pbGxpc2Vjb25kcy5cbiAgICpcbiAgICogVGhlIG1heGltdW0gdGltZSBhIG1lc3NhZ2UgY2FuIGJlIGRlbGF5ZWQgYmVmb3JlIGl0IGlzIGNvbXBhY3RlZC5cbiAgICogQGRlZmF1bHRWYWx1ZSA5MjIzMzcyMDM2ODU0Nzc1ODA3XG4gICAqL1xuICByZWFkb25seSBtYXhDb21wYWN0aW9uTGFnTXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgc2VydmljZSBsaW1pdHMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIHRvcGljIG1hbmFnZXIuXG4gKiBJZiB5b3UgbmVlZCB0byBpbmNyZWFzZSB0aGUgbGltaXRzIGZvciB5b3VyIHNlcnZpY2UsIHBsZWFzZSBjb250YWN0IENMQUlELlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthVG9waWNWNFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgbmFtZSBvZiB0aGUgdG9waWM7IGhhcyB0byBtYXRjaCBwYXR0ZXJuIFtBLVphLXowLTkuLV0rXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgZGVncmVlIG9mIHBhcmFsbGVsaXNtIG9mIHRoZSB0b3BpYzsgc2hvdWxkIGJlIGluY3JlYXNlZCBmb3JcbiAgICogbGFyZ2UgZXhwZWN0ZWQgbG9hZHMgKGUuZy4sIDI1IGZvciByaW8uYXNzZXQtaW90LWV2ZW50cykuXG4gICAqIFRoZSBzb2Z0IGxpbWl0IGlzIDEwIHBhcnRpdGlvbnMgYnV0IGNhbiBiZSBpbmNyZWFzZWQgdXBvbiByZXF1ZXN0cy5cbiAgICogUGFydGl0aW9ucyBhcmUgYSBsaW1pdGVkIHJlc291cmNlIGFuZCBjYW5ub3QgYmUgZGVjcmVhc2VkLlxuICAgKiBAZGVmYXVsdFZhbHVlIDNcbiAgICovXG4gIHJlYWRvbmx5IG51bWJlck9mUGFydGl0aW9ucz86IG51bWJlcjtcblxuICAvKipcbiAgICogRGVmaW5lcyBkZWdyZWUgb2YgcmVwbGljYXRpb24gb2YgbWVzc2FnZXM7IGhhcyB0byBiZSBiZXR3ZWVuIDEgYW5kIHRoZSBudW1iZXIgb2YgYnJva2VycyAoY3VycmVudGx5IDMpLlxuICAgKiBAZGVmYXVsdFZhbHVlIDNcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uRmFjdG9yPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaW1lIGhvdyBsb25nIG1lc3NhZ2VzIGFyZSByZXRhaW5lZCBvbiBLYWZrYSBjbHVzdGVyO1xuICAgKlxuICAgKiBGb3IgbW9zdCBjYXNlcywgNyBkYXlzICg2MDQ4MDAwMDAgbXMpIGlzIHJlY29tbWVuZGVkOyB1cCB0byAzMCBkYXlzIG1heSBiZSBjb25zaWRlcmVkXG4gICAqIG9ubHkgZm9yIGV4Y2VwdGlvbmFsIHNjZW5hcmlvcyB3aXRoIHNwZWNpZmljIHJlcXVpcmVtZW50cyBhbmQgY2FuIGxlYWQgdG8gaW5jcmVhc2VkIEthZmthIHN0b3JhZ2UgY29zdHMuXG4gICAqIFRoZSBzb2Z0IGxpbWl0IGlzIDMgdG8gMzAgZGF5cyBidXQgY2FuIGJlIGluY3JlYXNlZCB1cG9uIHJlcXVlc3RzLlxuICAgKiBAZGVmYXVsdFZhbHVlIDcgZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgcmV0ZW50aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byAnZmFsc2UsIHRoZSB0b3BpYydzIGRhdGEgd2lsbCBiZSBkZWxldGVkIG9uIEthZmthIDEwIGRheXMgYWZ0ZXIgc3RhY2sgZGVsZXRpb24uXG4gICAqIElmIHNldCB0byAndHJ1ZScsIGl0IHdpbGwgYmUgZGVsZXRlZCBpbW1lZGlhdGVseSBhZnRlciBzdGFjayBkZWxldGlvbi5cbiAgICogQGRlZmF1bHRWYWx1ZSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFudERlbGV0aW9uRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRhZGF0YSBvZiB0aGUgdG9waWMuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogS2Fma2FUb3BpY01ldGFEYXRhVjQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgdG8gdGhlIHRvcGljJ3MgZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IGFjbDogS2Fma2FBY2xTdGF0ZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0aGUgdG9waWMgaXMgbG9nIGNvbXBhY3RlZCBvciBub3QuXG4gICAqL1xuICByZWFkb25seSBpc0xvZ0NvbXBhY3RlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogTXVzdCBvbmx5IGJlIHByb3ZpZGVkIGlmICdpc0xvZ0NvbXBhY3RlZCcgaXMgJ3RydWUnLlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nQ29tcGFjdGlvblByb3BlcnRpZXM/OiBMb2dDb21wYWN0aW9uUHJvcGVydGllcztcblxuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSB0b3BpYyBzaG91bGQgYmUgYmFja2VkIHVwIGF1dG9tYXRpY2FsbHkgb3Igbm90LlxuICAgKiBJdCBjb3VsZCBqdXN0IGJlIGVuYWJsZWQsIGlmIHRoZSB0b3BpYyBpcyBjb21wYWN0ZWQgYW5kIHRoZSBSZWNvdmVyeVBvbGljeSBpcyAncmVjb3ZlcmFibGUnLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgbWFuYWdlZEJhY2t1cEVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBjb21wYWN0aW9uIGxhZyBpbiBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgYSBtZXNzYWdlIGNhbiBiZSBkZWxheWVkIGJlZm9yZSBpdCBpcyBjb21wYWN0ZWQuXG4gICAqIEBkZWZhdWx0VmFsdWUgOTIyMzM3MjAzNjg1NDc3NTgwN1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q29tcGFjdGlvbkxhZ01zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBUb3BpY3MgdGFyZ2V0IGF1ZGllbmNlXG4gKi9cbmV4cG9ydCB0eXBlIFRvcGljQXVkaWVuY2UgPSAnY29tcG9uZW50LWludGVybmFsJyB8ICdjb21wYW55LWludGVybmFsJztcblxuLyoqXG4gKiBUaGUgVG9waWNzIHJlY292ZXJ5IHBvbGljeSBndWFyYW50ZWVkIGJ5IHRoZSBwcm9kdWNlclxuICovXG5leHBvcnQgdHlwZSBUb3BpY1JlY292ZXJ5UG9saWN5ID0gJ25vbmUnIHwgJ3JlY292ZXJhYmxlJztcblxuLyoqXG4gKiBDb25zdHJ1Y3QgdG8gY3JlYXRlIGEga2Fma2EgdG9waWMuXG4gKlxuICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBLYWZrYVRvcGljVjR9IGluc3RlYWRcbiAqL1xuZXhwb3J0IGNsYXNzIEthZmthVG9waWMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS2Fma2FUb3BpY1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZERlcHJlY2F0aW9uKCdLYWZrYVRvcGljJywgXCJVc2UgJ0thZmthVG9waWNWNCchXCIpO1xuXG4gICAgbmV3IENmblJlc291cmNlKHRoaXMsICdLYWZrYVRvcGljJywge1xuICAgICAgdHlwZTogJ0N1c3RvbTo6S2Fma2FUb3BpYycsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLm1hcFByb3BlcnRpZXModGhpcywgcHJvcHMpLFxuICAgICAgICBWZXJzaW9uOiAnMycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24odmFsaWRhdG9yKHByb3BzKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdG8gY3JlYXRlIGEgdmVyc2lvbiA0IFJJTyBLYWZrYSB0b3BpYy5cbiAqXG4gKiBQcmVmZXIgdGhpcyBjb25zdHJ1Y3QgZm9yIG5ldyB0b3BpY3MuIEtlZXAgdGhlIGRlZmF1bHQgcmV0ZW50aW9uIGFuZCBwYXJ0aXRpb24gY291bnQgdW5sZXNzIHRoZXJlIGlzIGEgY29uY3JldGVcbiAqIG9wZXJhdGlvbmFsIHJlcXVpcmVtZW50IHRvIGNoYW5nZSB0aGVtLiBQYXJ0aXRpb24gaW5jcmVhc2VzIGFyZSBwZXJtYW5lbnQgYW5kIG1heSByZXF1aXJlIGNvb3JkaW5hdGlvbiB3aXRoIENMQUlEXG4gKiB3aGVuIHNlcnZpY2UgbGltaXRzIGFyZSBleGNlZWRlZC5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIG5ldyBLYWZrYVRvcGljVjQodGhpcywgJ0V2ZW50c1RvcGljJywge1xuICogICBuYW1lOiAnYmlsbGluZy12aWV3LmV2ZW50cycsXG4gKiAgIG1ldGFkYXRhOiB7XG4gKiAgICAgZGVzY3JpcHRpb246ICdEb21haW4gZXZlbnRzIGVtaXR0ZWQgYnkgQmlsbGluZyBWaWV3LicsXG4gKiAgICAgYXVkaWVuY2U6ICdjb21wYW55LWludGVybmFsJyxcbiAqICAgICByZWNvdmVyeVBvbGljeTogJ3JlY292ZXJhYmxlJyxcbiAqICAgfSxcbiAqICAgYWNsOiB7XG4gKiAgICAgd3JpdGU6IFsnYmlsbGluZy12aWV3J10sXG4gKiAgICAgcmVhZDogWydiaWxsaW5nLWNvbnN1bWVyJ10sXG4gKiAgIH0sXG4gKiAgIGlzTG9nQ29tcGFjdGVkOiBmYWxzZSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBLYWZrYVRvcGljVjQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS2Fma2FUb3BpY1Y0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IENmblJlc291cmNlKHRoaXMsICdLYWZrYVRvcGljJywge1xuICAgICAgdHlwZTogJ0N1c3RvbTo6S2Fma2FUb3BpYycsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLm1hcFByb3BlcnRpZXModGhpcywgcHJvcHMpLFxuICAgICAgICBWZXJzaW9uOiAnNCcsXG4gICAgICAgIEF1ZGllbmNlOiBwcm9wcy5tZXRhZGF0YS5hdWRpZW5jZSxcbiAgICAgICAgUmVjb3ZlcnlQb2xpY3k6IHByb3BzLm1ldGFkYXRhLnJlY292ZXJ5UG9saWN5LFxuICAgICAgICBNYW5hZ2VkQmFja3VwRW5hYmxlZDogcHJvcHMubWFuYWdlZEJhY2t1cEVuYWJsZWQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24odmFsaWRhdG9yKHByb3BzKSk7XG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oYmFja3VwUHJvcGVydGllc1ZhbGlkYXRvcihwcm9wcykpO1xuICB9XG59XG5cbmNvbnN0IHZhbGlkYXRvciA9IChwcm9wczogS2Fma2FUb3BpY1Byb3BzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgdmFsaWRhdGU6ICgpOiBzdHJpbmdbXSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgaWYgKCFwcm9wcy5uYW1lLm1hdGNoKC9eW0EtWmEtejAtOS4tXSskLykpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW25hbWVdOiBleHBlY3RpbmcgdG9waWMgbmFtZSB0byBtYXRjaCB0aGUgcmVnIGV4cCBgW0EtWmEtejAtOS4tXStgLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLm51bWJlck9mUGFydGl0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICghTnVtYmVyLmlzSW50ZWdlcihwcm9wcy5udW1iZXJPZlBhcnRpdGlvbnMpIHx8IHByb3BzLm51bWJlck9mUGFydGl0aW9ucyA8IDEpXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgYEludmFsaWQgW251bWJlck9mUGFydGl0aW9uc106IGV4cGVjdGluZyBudW1iZXIgb2YgcGFydGl0aW9ucyB0byBiZSBhIHBvc2l0aXZlIGludGVnZXIgYnV0IGdvdCAke3Byb3BzLm51bWJlck9mUGFydGl0aW9uc30uYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLnJlcGxpY2F0aW9uRmFjdG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKCFOdW1iZXIuaXNJbnRlZ2VyKHByb3BzLnJlcGxpY2F0aW9uRmFjdG9yKSB8fCBwcm9wcy5yZXBsaWNhdGlvbkZhY3RvciA8IDEgfHwgcHJvcHMucmVwbGljYXRpb25GYWN0b3IgPiAzKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFtyZXBsaWNhdGlvbkZhY3Rvcl06IGV4cGVjdGluZyBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwcm9wcy5pc0xvZ0NvbXBhY3RlZCAmJiBwcm9wcy5sb2dDb21wYWN0aW9uUHJvcGVydGllcykge1xuICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbbG9nQ29tcGFjdGlvblByb3BlcnRpZXNdOiBsb2cgY29tcGFjdGlvbiBpcyBkaXNhYmxlZCBzbyBwcm9wZXJ0aWVzIG11c3QgYmUgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXByb3BzLmlzTG9nQ29tcGFjdGVkICYmIHByb3BzLm1heENvbXBhY3Rpb25MYWdNcykge1xuICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbbWF4Q29tcGFjdGlvbkxhZ01zXTogbWF4IGNvbXBhY3Rpb24gbGFnIGlzIG9ubHkgYWxsb3dlZCBmb3IgbG9nIGNvbXBhY3RlZCB0b3BpY3MuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgfTtcbn07XG5cbmNvbnN0IGJhY2t1cFByb3BlcnRpZXNWYWxpZGF0b3IgPSAocHJvcHM6IEthZmthVG9waWNWNFByb3BzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgdmFsaWRhdGU6ICgpOiBzdHJpbmdbXSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgaWYgKHByb3BzLm1hbmFnZWRCYWNrdXBFbmFibGVkICYmICFwcm9wcy5pc0xvZ0NvbXBhY3RlZCkge1xuICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbbWFuYWdlZEJhY2t1cEVuYWJsZWRdOiBtYW5hZ2VkIGJhY2t1cCBjYW4gb25seSBiZSBlbmFibGVkIGZvciBsb2cgY29tcGFjdGVkIHRvcGljcy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLm1hbmFnZWRCYWNrdXBFbmFibGVkICYmIHByb3BzLm1ldGFkYXRhLnJlY292ZXJ5UG9saWN5ICE9PSAncmVjb3ZlcmFibGUnKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICdJbnZhbGlkIFttYW5hZ2VkQmFja3VwRW5hYmxlZF06IHRvcGljcyB3aXRoIG1hbmFnZWRCYWNrdXBFbmFibGVkIGhhdmUgdG8gaGF2ZSByZWNvdmVyeSBwb2xpY3kgXCJyZWNvdmVyYWJsZVwiLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICB9O1xufTtcblxuY29uc3QgbWFwUHJvcGVydGllcyA9IChzY29wZTogSUNvbnN0cnVjdCwgcHJvcHM6IEthZmthVG9waWNQcm9wcyB8IEthZmthVG9waWNWNFByb3BzKSA9PiB7XG4gIGNvbnN0IHRlYW1FbWFpbCA9IFJpb0xhbmRpbmdab25lLmdldFRlYW1FbWFpbFBhcmFtZXRlcihzY29wZSkuc3RyaW5nVmFsdWU7XG5cbiAgaWYgKHByb3BzLm1ldGFkYXRhLmV2ZW50cz8ubGVuZ3RoICYmIHByb3BzLm1ldGFkYXRhLmV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgY2RrLkFubm90YXRpb25zLm9mKHNjb3BlKS5hZGREZXByZWNhdGlvbihcbiAgICAgICdLYWZrYVRvcGljTWV0YURhdGEuZXZlbnRzJyxcbiAgICAgICdFdmVudHMgYXJlIG5vIGxvbmdlciBwcm92aWRlZCB0aHJvdWdoIHRoaXMgY29uc3RydWN0LiBTcGVjaWZ5IHRoZSBldmVudCBpbiB0aGUgY2F0YWxvZy1pbmZvLnlhbWwuIFNlZSB0aGUgQmFja3N0YWdlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uJ1xuICAgICk7XG4gIH1cbiAgY29uc3QgZGVsZXRlUmV0ZW50aW9uRHVyYXRpb24gPSBwcm9wcy5sb2dDb21wYWN0aW9uUHJvcGVydGllcz8uZGVsZXRlUmV0ZW50aW9uID8/IER1cmF0aW9uLmRheXMoNyk7XG4gIGlmIChwcm9wcy5hY2wuZGVsZXRlICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5hY2wuZGVsZXRlLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IGNkay5Bbm5vdGF0aW9ucy5vZihjZGsuU3RhY2sub2Yoc2NvcGUpKTtcbiAgICBhbm5vdGF0aW9ucy5hZGRXYXJuaW5nVjIoXG4gICAgICBgQHJpby1jbG91ZC9jZGstdjItY29uc3RydWN0cy9rYWZrYS9rYWZrYS10b3BpYy8ke3Byb3BzLm5hbWV9L0RlbGV0aW9uUG9saWN5YCxcbiAgICAgIGBcbiDinYwgWW91IGhhdmUgc2V0IFwiZGVsZXRlXCIgcGVybWlzc2lvbiBmb3Iga2Fma2EtdG9waWMgJHtwcm9wcy5uYW1lfS4gWW91IHByb2JhYmx5IGRvIG5vdCBuZWVkIHRoaXMuIFBsZWFzZSB1c2UgdGhpcyBvbmx5IGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbmBcbiAgICApO1xuICB9XG4gIHJldHVybiB7XG4gICAgU2VydmljZVRva2VuOiAnYXJuOmF3czpzbnM6ZXUtd2VzdC0xOjE4Njk5Mzc1NzczNDpkcC10b3BpYy1tYW5hZ2VyLXNucy10b3BpYycsXG4gICAgVG9waWNOYW1lOiBwcm9wcy5uYW1lLFxuICAgIERlc2NyaXB0aW9uOiBwcm9wcy5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICBOdW1iZXJPZlBhcnRpdGlvbnM6IHByb3BzLm51bWJlck9mUGFydGl0aW9ucyA/PyAzLFxuICAgIFJlcGxpY2F0aW9uRmFjdG9yOiBwcm9wcy5yZXBsaWNhdGlvbkZhY3RvciA/PyAzLFxuICAgIFJldGVudGlvbk1zOiAocHJvcHMucmV0ZW50aW9uID8/IER1cmF0aW9uLmRheXMoNykpLnRvTWlsbGlzZWNvbmRzKCksXG4gICAgRGVsZXRlUmV0ZW50aW9uTXM6IHByb3BzLmlzTG9nQ29tcGFjdGVkID8gZGVsZXRlUmV0ZW50aW9uRHVyYXRpb24udG9NaWxsaXNlY29uZHMoKSA6IHVuZGVmaW5lZCxcbiAgICBJbnN0YW50RGVsZXRpb25FbmFibGVkOiBwcm9wcy5pbnN0YW50RGVsZXRpb25FbmFibGVkID8/IGZhbHNlLFxuICAgIENsZWFudXBQb2xpY3k6IHByb3BzLmlzTG9nQ29tcGFjdGVkID8gJ2NvbXBhY3QnIDogJ2RlbGV0ZScsXG4gICAgVGVhbUVtYWlsOiB0ZWFtRW1haWwsXG4gICAgTWF4Q29tcGFjdGlvbkxhZ01zOiBwcm9wcy5tYXhDb21wYWN0aW9uTGFnTXMsXG4gICAgQUNMOiB7XG4gICAgICBSZWFkOiBwcm9wcy5hY2wucmVhZCxcbiAgICAgIFdyaXRlOiBwcm9wcy5hY2wud3JpdGUsXG4gICAgICBEZWxldGU6IHByb3BzLmFjbC5kZWxldGUsXG4gICAgfSxcbiAgfTtcbn07XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { IPipeline } from 'aws-cdk-lib/aws-codepipeline';
2
+ import { PipelineBase } from 'aws-cdk-lib/pipelines';
3
+ type PipelineType = IPipeline | PipelineBase;
4
+ /**
5
+ * CodePipeline tag used by delivery-performance-monitoring to override
6
+ * whether a pipeline execution should be reported to Datadog DORA.
7
+ *
8
+ * @see https://bitbucket.collaboration-man.com/projects/RIODEV/repos/delivery-performance-monitoring/browse
9
+ */
10
+ export declare const DELIVERY_PERFORMANCE_MONITORING_TAG = "delivery_performance_monitoring";
11
+ /**
12
+ * Convenience helpers to enforce including or excluding CodePipeline pipelines
13
+ * from delivery-performance-monitoring regardless of the default detection mechanism.
14
+ *
15
+ * Example:
16
+ * ```typescript
17
+ * import { DeliveryPerformanceMonitoringOverride } from '@rio-cloud/cdk-v2-constructs'
18
+ * import { pipeline } from './pipeline'
19
+ *
20
+ * DeliveryPerformanceMonitoringOverride.include(pipeline)
21
+ * DeliveryPerformanceMonitoringOverride.exclude(pipeline)
22
+ * ```
23
+ *
24
+ * @see https://bitbucket.collaboration-man.com/projects/RIODEV/repos/delivery-performance-monitoring/browse
25
+ */
26
+ export declare class DeliveryPerformanceMonitoringOverride {
27
+ /**
28
+ * Marks the pipeline as always tracked by delivery-performance-monitoring account-module.
29
+ */
30
+ static include(target: PipelineType): void;
31
+ /**
32
+ * Marks the pipeline as never tracked by delivery-performance-monitoring.
33
+ */
34
+ static exclude(target: PipelineType): void;
35
+ }
36
+ export {};