@fjall/components-infrastructure 0.78.5 → 0.79.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.
@@ -5,7 +5,7 @@ import { Code, Runtime, type FunctionUrlAuthType, type FunctionUrlCorsOptions }
5
5
  import { type PolicyStatement, type PolicyDocument, type IManagedPolicy } from "aws-cdk-lib/aws-iam";
6
6
  import { Construct } from "constructs";
7
7
  import type App from "../../app";
8
- import { ScalingType } from "../../resources/aws/compute/ecs";
8
+ import { ScalingType, type DomainConfig } from "../../resources/aws/compute/ecs";
9
9
  import { type SecretImport } from "../../resources/aws/secrets";
10
10
  export type ComputeType = "ecs" | "ec2" | "lambda";
11
11
  export type EcsCapacityProvider = "FARGATE" | "FARGATE_SPOT" | "EC2";
@@ -153,6 +153,12 @@ export interface EcsClusterConfig {
153
153
  * Access via EC2 public IP at container port.
154
154
  */
155
155
  directAccess?: boolean;
156
+ /**
157
+ * Advanced domain configuration for routing policies (latency, weighted, geo).
158
+ * Only used when domain is specified.
159
+ * Allows for multi-region deployments with advanced DNS routing.
160
+ */
161
+ domainConfig?: DomainConfig;
156
162
  }
157
163
  /**
158
164
  * Routing configuration for path/host-based routing on the ALB.
@@ -315,7 +315,8 @@ class Compute extends constructs_1.Construct {
315
315
  ? {
316
316
  domain: props.cluster.domain,
317
317
  loadBalancer: props.cluster.loadBalancer,
318
- directAccess: props.cluster.directAccess
318
+ directAccess: props.cluster.directAccess,
319
+ domainConfig: props.cluster.domainConfig
319
320
  }
320
321
  : undefined;
321
322
  const ecsProps = {
@@ -384,4 +385,4 @@ class Compute extends constructs_1.Construct {
384
385
  }
385
386
  }
386
387
  exports.Compute = Compute;
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF3R0Esb0RBRUM7QUFFRCxvRUFJQztBQS9HRCxpREFBaUQ7QUFDakQsaURBTTZCO0FBQzdCLHVEQU1nQztBQU9oQywyQ0FBdUM7QUFJdkMseURBSXlDO0FBQ3pDLHlEQUE4RDtBQUM5RCwrREFBb0U7QUF1QnZELFFBQUEsbUJBQW1CLEdBQTJDO0lBQ3pFLEdBQUcsRUFBRTtRQUNILFdBQVcsRUFBRSxFQUFFO1FBQ2YsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFO1FBQ2xELG1CQUFtQixFQUFFLElBQUk7UUFDekIsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRCxHQUFHLEVBQUU7UUFDSCxXQUFXLEVBQUUsRUFBRTtRQUNmLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtRQUNsRCxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLFdBQVcsRUFBRSxJQUFJO0tBQ2xCO0lBQ0QsTUFBTSxFQUFFO1FBQ04sV0FBVyxFQUFFLENBQUM7UUFDZCxjQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUU7UUFDcEQsbUJBQW1CLEVBQUUsS0FBSztRQUMxQixXQUFXLEVBQUUsS0FBSztLQUNuQjtDQUNGLENBQUM7QUFZVyxRQUFBLDRCQUE0QixHQUdyQztJQUNGLE9BQU8sRUFBRTtRQUNQLFFBQVEsRUFBRSxLQUFLO1FBQ2YsZ0JBQWdCLEVBQUUsS0FBSztLQUN4QjtJQUNELFlBQVksRUFBRTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsZ0JBQWdCLEVBQUUsS0FBSztLQUN4QjtJQUNELEdBQUcsRUFBRTtRQUNILFFBQVEsRUFBRSxLQUFLO1FB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SUFBSSxDQUFDLEVBQUUsUUFBUSxFQUNsQixXQUFXLENBQ1osQ0FBQztRQUVGLGdFQUFnRTtRQUNoRSw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHFCQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUEvTUQsMEJBK01DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBSZXBvc2l0b3J5SW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNyXCI7XG5pbXBvcnQge1xuICBDb25uZWN0aW9ucyxcbiAgdHlwZSBJQ29ubmVjdGFibGUsXG4gIHR5cGUgSVZwYyxcbiAgdHlwZSBVc2VyRGF0YSxcbiAgdHlwZSBJTWFjaGluZUltYWdlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBSdW50aW1lLFxuICBIYW5kbGVyLFxuICB0eXBlIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb3JzT3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBQb2xpY3lTdGF0ZW1lbnQsXG4gIHR5cGUgUG9saWN5RG9jdW1lbnQsXG4gIHR5cGUgSU1hbmFnZWRQb2xpY3lcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcblxuaW1wb3J0IEVjc0NsdXN0ZXIsIHtcbiAgdHlwZSBFY3NDbHVzdGVyUHJvcHMsXG4gIFNjYWxpbmdUeXBlLFxuICB0eXBlIEVjc0NhcGFjaXR5UHJvdmlkZXIgYXMgRWNzQ2FwYWNpdHlQcm92aWRlclR5cGVcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3NcIjtcbmltcG9ydCB7IEVjMkluc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lYzJcIjtcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9sYW1iZGFcIjtcbmltcG9ydCB7IHR5cGUgU2VjcmV0SW1wb3J0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuXG5leHBvcnQgdHlwZSBDb21wdXRlVHlwZSA9IFwiZWNzXCIgfCBcImVjMlwiIHwgXCJsYW1iZGFcIjtcbmV4cG9ydCB0eXBlIEVjc0NhcGFjaXR5UHJvdmlkZXIgPSBcIkZBUkdBVEVcIiB8IFwiRkFSR0FURV9TUE9UXCIgfCBcIkVDMlwiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZGVmYXVsdHMgZm9yIGVhY2ggY29tcHV0ZSB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVUeXBlQ29uZmlnIHtcbiAgLyoqIERlZmF1bHQgcG9ydCBmb3IgdGhlIGNvbXB1dGUgdHlwZS4gRUNTOiA4MCwgRUMyOiAyMiwgTGFtYmRhOiAwIChubyBwb3J0KSAqL1xuICBkZWZhdWx0UG9ydDogbnVtYmVyO1xuICAvKiogRGVmYXVsdCBzY2FsaW5nIGxpbWl0cyAqL1xuICBkZWZhdWx0U2NhbGluZzoge1xuICAgIG1pbkNhcGFjaXR5OiBudW1iZXI7XG4gICAgbWF4Q2FwYWNpdHk6IG51bWJlcjtcbiAgfTtcbiAgLyoqIFdoZXRoZXIgdGhpcyBjb21wdXRlIHR5cGUgc3VwcG9ydHMgc2VjdXJpdHkgZ3JvdXAgY29ubmVjdGlvbnMgKi9cbiAgc3VwcG9ydHNDb25uZWN0aW9uczogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBjb21wdXRlIHR5cGUgcmVxdWlyZXMgYSBWUEMgKi9cbiAgcmVxdWlyZXNWcGM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBDT01QVVRFX1RZUEVfQ09ORklHOiBSZWNvcmQ8Q29tcHV0ZVR5cGUsIENvbXB1dGVUeXBlQ29uZmlnPiA9IHtcbiAgZWNzOiB7XG4gICAgZGVmYXVsdFBvcnQ6IDgwLFxuICAgIGRlZmF1bHRTY2FsaW5nOiB7IG1pbkNhcGFjaXR5OiAyLCBtYXhDYXBhY2l0eTogNSB9LFxuICAgIHN1cHBvcnRzQ29ubmVjdGlvbnM6IHRydWUsXG4gICAgcmVxdWlyZXNWcGM6IHRydWVcbiAgfSxcbiAgZWMyOiB7XG4gICAgZGVmYXVsdFBvcnQ6IDIyLFxuICAgIGRlZmF1bHRTY2FsaW5nOiB7IG1pbkNhcGFjaXR5OiAyLCBtYXhDYXBhY2l0eTogMyB9LFxuICAgIHN1cHBvcnRzQ29ubmVjdGlvbnM6IHRydWUsXG4gICAgcmVxdWlyZXNWcGM6IHRydWVcbiAgfSxcbiAgbGFtYmRhOiB7XG4gICAgZGVmYXVsdFBvcnQ6IDAsXG4gICAgZGVmYXVsdFNjYWxpbmc6IHsgbWluQ2FwYWNpdHk6IDAsIG1heENhcGFjaXR5OiAxMDAgfSxcbiAgICBzdXBwb3J0c0Nvbm5lY3Rpb25zOiBmYWxzZSxcbiAgICByZXF1aXJlc1ZwYzogZmFsc2VcbiAgfVxufTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBFQ1MgY2FwYWNpdHkgcHJvdmlkZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc0NhcGFjaXR5UHJvdmlkZXJDb25maWcge1xuICAvKiogV2hldGhlciB0aGlzIHVzZXMgU3BvdCBwcmljaW5nICovXG4gIHVzZXNTcG90OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGlzIHJ1bnMgb24gRUMyIGluc3RhbmNlcyAodnMgc2VydmVybGVzcyBGYXJnYXRlKSAqL1xuICB1c2VzRWMySW5zdGFuY2VzOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgRUNTX0NBUEFDSVRZX1BST1ZJREVSX0NPTkZJRzogUmVjb3JkPFxuICBFY3NDYXBhY2l0eVByb3ZpZGVyLFxuICBFY3NDYXBhY2l0eVByb3ZpZGVyQ29uZmlnXG4+ID0ge1xuICBGQVJHQVRFOiB7XG4gICAgdXNlc1Nwb3Q6IGZhbHNlLFxuICAgIHVzZXNFYzJJbnN0YW5jZXM6IGZhbHNlXG4gIH0sXG4gIEZBUkdBVEVfU1BPVDoge1xuICAgIHVzZXNTcG90OiB0cnVlLFxuICAgIHVzZXNFYzJJbnN0YW5jZXM6IGZhbHNlXG4gIH0sXG4gIEVDMjoge1xuICAgIHVzZXNTcG90OiBmYWxzZSxcbiAgICB1c2VzRWMySW5zdGFuY2VzOiB0cnVlXG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlVHlwZUNvbmZpZyh0eXBlOiBDb21wdXRlVHlwZSk6IENvbXB1dGVUeXBlQ29uZmlnIHtcbiAgcmV0dXJuIENPTVBVVEVfVFlQRV9DT05GSUdbdHlwZV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFY3NDYXBhY2l0eVByb3ZpZGVyQ29uZmlnKFxuICBwcm92aWRlcjogRWNzQ2FwYWNpdHlQcm92aWRlclxuKTogRWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyB7XG4gIHJldHVybiBFQ1NfQ0FQQUNJVFlfUFJPVklERVJfQ09ORklHW3Byb3ZpZGVyXTtcbn1cblxuLy8gUmUtZXhwb3J0IExhbWJkYSB0eXBlcyBmcm9tIENESyBmb3IgdXNlciBjb252ZW5pZW5jZVxuZXhwb3J0IHtcbiAgSHR0cE1ldGhvZCxcbiAgdHlwZSBGdW5jdGlvblVybENvcnNPcHRpb25zXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYSBjb250YWluZXIgaW4gYW4gRUNTIHRhc2suXG4gKlxuICogRm9yIHNpbmdsZS1jb250YWluZXIgc2VydmljZXMsIGBuYW1lYCBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gYCR7c2VydmljZU5hbWV9Q29udGFpbmVyYC5cbiAqIEZvciBtdWx0aS1jb250YWluZXIgdGFza3MsIHRoZSBmaXJzdCBjb250YWluZXIgd2l0aCBhIGBwb3J0YCBpcyB0aGUgKipwcmltYXJ5IGNvbnRhaW5lcioqXG4gKiB0aGF0IHJlY2VpdmVzIGxvYWQgYmFsYW5jZXIgdHJhZmZpYy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2luZ2xlIGNvbnRhaW5lciAobmFtZSBhdXRvLWdlbmVyYXRlZClcbiAqIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTXVsdGktY29udGFpbmVyIHdpdGggc2lkZWNhcnNcbiAqIGNvbnRhaW5lcnM6IFtcbiAqICAgeyBuYW1lOiBcImFwcFwiLCBwb3J0OiAzMDAwIH0sICAgICAgICAgICAgICAgICAgICAvLyBQcmltYXJ5IC0gcmVjZWl2ZXMgQUxCIHRyYWZmaWNcbiAqICAgeyBuYW1lOiBcImRhdGFkb2dcIiwgaW1hZ2U6IFwiZGF0YWRvZy9hZ2VudFwiIH0gICAgIC8vIFNpZGVjYXIgLSBtb25pdG9yaW5nXG4gKiBdXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ29udGFpbmVyQ29uZmlnIHtcbiAgLyoqIENvbnRhaW5lciBuYW1lLiBPcHRpb25hbCBmb3Igc2luZ2xlLWNvbnRhaW5lciBzZXJ2aWNlcy4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZS4gT3B0aW9uczpcbiAgICogLSBPbWl0OiBVc2VzIGFwcCdzIGRlZmF1bHQgRUNSIHJlcG9zaXRvcnkgKHByaW1hcnkgY29udGFpbmVyIG9ubHkpXG4gICAqIC0gc3RyaW5nOiBFQ1IgcmVwb3NpdG9yeSBuYW1lIG9yIHB1YmxpYyBpbWFnZSBVUkxcbiAgICogLSBSZXBvc2l0b3J5OiBDREsgRUNSIFJlcG9zaXRvcnkgY29uc3RydWN0XG4gICAqL1xuICBpbWFnZT86IHN0cmluZyB8IFJlcG9zaXRvcnk7XG4gIC8qKlxuICAgKiBQb3J0IHRoZSBjb250YWluZXIgbGlzdGVucyBvbi5cbiAgICogVGhlIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgcG9ydCBiZWNvbWVzIHRoZSAqKnByaW1hcnkgY29udGFpbmVyKipcbiAgICogYW5kIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci5cbiAgICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgKi9cbiAgZW52aXJvbm1lbnQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogU2VjcmV0cyBpbXBvcnRlZCBmcm9tIG90aGVyIHJlc291cmNlcyAqL1xuICBzZWNyZXRzSW1wb3J0PzogUmVjb3JkPHN0cmluZywgU2VjcmV0SW1wb3J0PjtcbiAgLyoqIENvbW1hbmQgdG8gcnVuIGluIHRoZSBjb250YWluZXIgKi9cbiAgY29tbWFuZD86IHN0cmluZ1tdO1xuICAvKiogRW50cnkgcG9pbnQgZm9yIHRoZSBjb250YWluZXIgKi9cbiAgZW50cnlQb2ludD86IHN0cmluZ1tdO1xuICAvKipcbiAgICogV2hldGhlciB0aGlzIGNvbnRhaW5lciBpcyBlc3NlbnRpYWwuXG4gICAqIElmIGFuIGVzc2VudGlhbCBjb250YWluZXIgc3RvcHMsIGFsbCBjb250YWluZXJzIGluIHRoZSB0YXNrIHN0b3AuXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIGVzc2VudGlhbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBIZWFsdGggY2hlY2sgY29uZmlndXJhdGlvbi5cbiAgICogRGVmYXVsdDogRm9yIHByaW1hcnkgY29udGFpbmVyIHdpdGggcG9ydCwgdXNlcyBjdXJsIGhlYWx0aCBjaGVjay5cbiAgICovXG4gIGhlYWx0aENoZWNrPzoge1xuICAgIGNvbW1hbmQ6IHN0cmluZ1tdO1xuICAgIGludGVydmFsPzogbnVtYmVyO1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgcmV0cmllcz86IG51bWJlcjtcbiAgICBzdGFydFBlcmlvZD86IG51bWJlcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBFQ1Mgc2NhbGluZyBjb25maWd1cmF0aW9uLlxuICogLSBPbWl0OiBlbmFibGVkIHdpdGggZGVmYXVsdHNcbiAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIGRlZmF1bHRzXG4gKiAtIGB7IG1pbkNhcGFjaXR5OiAyLCBtYXhDYXBhY2l0eTogMTAgfWA6IGN1c3RvbSBzY2FsaW5nXG4gKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NTY2FsaW5nQ29uZmlnIHtcbiAgbWluQ2FwYWNpdHk/OiBudW1iZXI7XG4gIG1heENhcGFjaXR5PzogbnVtYmVyO1xuICBzY2FsaW5nVHlwZT86IFNjYWxpbmdUeXBlO1xufVxuXG4vKipcbiAqIEVDMiBjYXBhY2l0eSBjb25maWd1cmF0aW9uIGZvciBFQ1MgRUMyLWJhY2tlZCBjbHVzdGVycy5cbiAqIE9ubHkgdXNlZCB3aGVuIGNhcGFjaXR5UHJvdmlkZXIgaXMgXCJFQzJcIi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFYzJDYXBhY2l0eUNvbmZpZyB7XG4gIC8qKiBFQzIgaW5zdGFuY2UgdHlwZS4gRGVmYXVsdDogXCJ0My5taWNyb1wiICovXG4gIGluc3RhbmNlVHlwZT86IHN0cmluZztcbiAgLyoqIEFNSSBoYXJkd2FyZSB0eXBlLiBEZWZhdWx0OiBcIkFSTVwiIChHcmF2aXRvbiAtIGJldHRlciBjb3N0L3BlcmZvcm1hbmNlKSAqL1xuICBhbWlIYXJkd2FyZVR5cGU/OiBcIkFSTVwiIHwgXCJTVEFOREFSRFwiO1xuICAvKiogTWluaW11bSBudW1iZXIgb2YgaW5zdGFuY2VzLiBEZWZhdWx0OiAxICovXG4gIG1pbkNhcGFjaXR5PzogbnVtYmVyO1xuICAvKiogTWF4aW11bSBudW1iZXIgb2YgaW5zdGFuY2VzLiBEZWZhdWx0OiAzICovXG4gIG1heENhcGFjaXR5PzogbnVtYmVyO1xuICAvKiogRGVzaXJlZCBudW1iZXIgb2YgRUMyIGluc3RhbmNlcy4gRGVmYXVsdDogMiAoZm9yIGF2YWlsYWJpbGl0eSkgKi9cbiAgZGVzaXJlZENvdW50PzogbnVtYmVyO1xuICAvKiogTWVtb3J5IGxpbWl0IGluIE1pQiBmb3IgdGhlIGNvbnRhaW5lci4gRGVmYXVsdDogMTAyNCAqL1xuICBtZW1vcnlMaW1pdE1pQj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDbHVzdGVyLWxldmVsIGNvbmZpZ3VyYXRpb24uXG4gKiBDb250cm9scyB0aGUgc2hhcmVkIEFMQiBmb3IgYWxsIHNlcnZpY2VzIGluIHRoaXMgY2x1c3Rlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NDbHVzdGVyQ29uZmlnIHtcbiAgLyoqXG4gICAqIERvbWFpbiBmb3IgSFRUUFMgYWNjZXNzLlxuICAgKiAtIE9taXQ6IEFMQiBjcmVhdGVkIHdpdGggZGVmYXVsdCBETlMgKCouZWxiLmFtYXpvbmF3cy5jb20pXG4gICAqIC0gU3BlY2lmaWVkOiBDcmVhdGVzIEFDTSBjZXJ0aWZpY2F0ZSArIFJvdXRlNTMgRE5TIEEgcmVjb3JkXG4gICAqL1xuICBkb21haW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvYWQgYmFsYW5jZXIgY29uZmlndXJhdGlvbi5cbiAgICogLSBPbWl0IG9yIFwicHVibGljXCI6IEludGVybmV0LWZhY2luZyBBTEIgKGRlZmF1bHQpXG4gICAqIC0gXCJpbnRlcm5hbFwiOiBWUEMtb25seSBBTEJcbiAgICogLSBmYWxzZTogTm8gQUxCIChmb3Igd29ya2Vycy9iYWNrZ3JvdW5kIHByb2Nlc3NvcnMpXG4gICAqL1xuICBsb2FkQmFsYW5jZXI/OiBmYWxzZSB8IFwicHVibGljXCIgfCBcImludGVybmFsXCI7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBkaXJlY3QgRUMyIGFjY2VzcyB3aXRob3V0IEFMQi5cbiAgICogVXNlcyBob3N0IG5ldHdvcmsgbW9kZSBmb3IgcHJlZGljdGFibGUgcG9ydHMuXG4gICAqIEFjY2VzcyB2aWEgRUMyIHB1YmxpYyBJUCBhdCBjb250YWluZXIgcG9ydC5cbiAgICovXG4gIGRpcmVjdEFjY2Vzcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUm91dGluZyBjb25maWd1cmF0aW9uIGZvciBwYXRoL2hvc3QtYmFzZWQgcm91dGluZyBvbiB0aGUgQUxCLlxuICogUmVxdWlyZWQgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIHBvcnRzLlxuICogT3B0aW9uYWwgZm9yIHNpbmdsZSBzZXJ2aWNlIChnZXRzIGFsbCB0cmFmZmljIGF1dG9tYXRpY2FsbHkpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc1JvdXRpbmdDb25maWcge1xuICAvKipcbiAgICogUGF0aCBwYXR0ZXJuIGZvciByb3V0aW5nIChlLmcuLCBcIi9hcGkvKlwiLCBcIi91c2Vycy8qXCIpLlxuICAgKiBVc2VzIEFMQiBwYXRoLWJhc2VkIHJvdXRpbmcuXG4gICAqL1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3N0IGhlYWRlciBmb3Igcm91dGluZyAoZS5nLiwgXCJhcGkuZXhhbXBsZS5jb21cIikuXG4gICAqIFVzZXMgQUxCIGhvc3QtYmFzZWQgcm91dGluZy5cbiAgICovXG4gIGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaW9yaXR5IGZvciB0aGlzIHJvdXRpbmcgcnVsZSAoMS01MDAwMCkuXG4gICAqIExvd2VyIG51bWJlciA9IGhpZ2hlciBwcmlvcml0eS5cbiAgICogQXV0by1hc3NpZ25lZCBpZiBvbWl0dGVkLlxuICAgKi9cbiAgcHJpb3JpdHk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlYWx0aCBjaGVjayBwYXRoIGZvciB0aGlzIHNlcnZpY2UncyB0YXJnZXQgZ3JvdXAuXG4gICAqIERlZmF1bHQ6IFwiL1wiXG4gICAqL1xuICBoZWFsdGhDaGVja1BhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYSBzZXJ2aWNlIGluIGFuIEVDUyBjbHVzdGVyLlxuICogRWFjaCBzZXJ2aWNlIGdldHMgaXRzIG93biB0YXNrIGRlZmluaXRpb24sIHNjYWxpbmcgY29uZmlnLCBhbmQgdGFyZ2V0IGdyb3VwLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTaW1wbGUgc2VydmljZVxuICogeyBuYW1lOiBcImFwaVwiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2VydmljZSB3aXRoIHJvdXRpbmcgKGZvciBtdWx0aS1zZXJ2aWNlIGNsdXN0ZXJzKVxuICogeyBuYW1lOiBcInVzZXJzXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvdXNlcnMvKlwiLCBwcmlvcml0eTogMTAwIH0gfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXJ2aWNlIHdpdGggc2lkZWNhcnNcbiAqIHtcbiAqICAgbmFtZTogXCJhcGlcIixcbiAqICAgY29udGFpbmVyczogW1xuICogICAgIHsgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9LFxuICogICAgIHsgbmFtZTogXCJkYXRhZG9nXCIsIGltYWdlOiBcImRhdGFkb2cvYWdlbnRcIiB9XG4gKiAgIF1cbiAqIH1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NTZXJ2aWNlQ29uZmlnIHtcbiAgLyoqIFNlcnZpY2UgbmFtZSAodW5pcXVlIHdpdGhpbiBjbHVzdGVyKSAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZSBmb3IgdGhpcyBzZXJ2aWNlIChhcHBsaWVzIHRvIGZpcnN0IGNvbnRhaW5lciB3aXRob3V0IGV4cGxpY2l0IGltYWdlKS5cbiAgICogLSBPbWl0OiBVc2VzIGFwcCdzIGRlZmF1bHQgRUNSIHJlcG9zaXRvcnlcbiAgICogLSBzdHJpbmc6IEVDUiByZXBvc2l0b3J5IG5hbWUgb3IgcHVibGljIGltYWdlIFVSTFxuICAgKiAtIFJlcG9zaXRvcnk6IENESyBFQ1IgUmVwb3NpdG9yeSBjb25zdHJ1Y3RcbiAgICovXG4gIGltYWdlPzogc3RyaW5nIHwgUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGNvbmZpZ3VyYXRpb24ocykgZm9yIHRoaXMgc2VydmljZS5cbiAgICogRm9yIHNpbmdsZS1jb250YWluZXIgc2VydmljZXMsIGNvbnRhaW5lciBuYW1lIGlzIG9wdGlvbmFsIGFuZCBhdXRvLWdlbmVyYXRlZC5cbiAgICogRm9yIG11bHRpLWNvbnRhaW5lciBzZXJ2aWNlcywgdGhlIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgcG9ydCBpcyB0aGUgcHJpbWFyeSBjb250YWluZXIuXG4gICAqL1xuICBjb250YWluZXJzPzogRWNzQ29udGFpbmVyQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIFJvdXRpbmcgcnVsZXMgZm9yIHRoaXMgc2VydmljZSBvbiB0aGUgY2x1c3RlcidzIEFMQi5cbiAgICogUmVxdWlyZWQgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIHBvcnRzLlxuICAgKiBPcHRpb25hbCBmb3Igc2luZ2xlIHNlcnZpY2UgKGdldHMgLyogYXV0b21hdGljYWxseSkuXG4gICAqL1xuICByb3V0aW5nPzogRWNzUm91dGluZ0NvbmZpZztcblxuICAvKiogQ1BVIHVuaXRzIGZvciB0aGlzIHNlcnZpY2UncyB0YXNrcyAoMjU2LTQwOTYpICovXG4gIGNwdT86IG51bWJlcjtcblxuICAvKiogTWVtb3J5IGluIE1pQiBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFza3MgKDUxMi0zMDcyMCkgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG5cbiAgLyoqIERlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLiBEZWZhdWx0OiAyICovXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogU2NhbGluZyBjb25maWd1cmF0aW9uLlxuICAgKiAtIE9taXQ6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICAgKiAtIGZhbHNlOiBkaXNhYmxlZFxuICAgKi9cbiAgc2NhbGluZz86IEVjc1NjYWxpbmdDb25maWcgfCBmYWxzZTtcblxuICAvKipcbiAgICogUGF0aCB0byBEb2NrZXJmaWxlIGZvciBidWlsZGluZyB0aGlzIHNlcnZpY2UncyBpbWFnZS5cbiAgICogTWV0YWRhdGEgZm9yIENMSSBidWlsZCBwcm9jZXNzLCBub3QgdXNlZCBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAgICovXG4gIGRvY2tlcmZpbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGlubGluZSBwb2xpY2llcyBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFzayByb2xlLlxuICAgKiBBZGRlZCBvbiB0b3Agb2YgdGhlIGRlZmF1bHQgRUNTIEV4ZWMgcGVybWlzc2lvbnMuXG4gICAqIFVzZSBmb3Igc2VydmljZS1zcGVjaWZpYyBBV1MgcGVybWlzc2lvbnMgKFMzLCBEeW5hbW9EQiwgU1FTLCBldGMuKS5cbiAgICovXG4gIHRhc2tSb2xlSW5saW5lUG9saWNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBQb2xpY3lEb2N1bWVudD47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWFuYWdlZCBwb2xpY2llcyBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFzayByb2xlLlxuICAgKiBBZGRlZCBvbiB0b3Agb2YgdGhlIGRlZmF1bHQgRUNTIEV4ZWMgcGVybWlzc2lvbnMuXG4gICAqL1xuICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llcz86IElNYW5hZ2VkUG9saWN5W107XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGlzIHNlcnZpY2UgbmVlZHMgdG8gY29ubmVjdCB0byAoZS5nLiwgZGF0YWJhc2VzKS5cbiAgICogQ3JlYXRlcyBzZWN1cml0eSBncm91cCBydWxlcyB0byBhbGxvdyB0cmFmZmljIGZyb20gdGhpcyBzZXJ2aWNlLlxuICAgKiBGb2xsb3dzIGxlYXN0LXByaXZpbGVnZSAtIG9ubHkgdGhpcyBzZXJ2aWNlIGdldHMgYWNjZXNzLCBub3QgYWxsIHNlcnZpY2VzIGluIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBPbmx5IGJhY2tlbmQgc2VydmljZSBjb25uZWN0cyB0byBkYXRhYmFzZVxuICAgKiBzZXJ2aWNlczogW1xuICAgKiAgIHsgbmFtZTogXCJmcm9udGVuZFwiIH0sXG4gICAqICAgeyBuYW1lOiBcImJhY2tlbmRcIiwgY29ubmVjdGlvbnM6IFthcHBEYXRhYmFzZV0gfVxuICAgKiBdXG4gICAqL1xuICBjb25uZWN0aW9ucz86IElDb25uZWN0YWJsZVtdO1xufVxuXG4vKipcbiAqIFNTSCBhY2Nlc3MgY29uZmlndXJhdGlvbiBmb3IgRUMyIGluc3RhbmNlcy5cbiAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBhdXRvLWdlbmVyYXRlZCBrZXlcbiAqIC0gYHsga2V5TmFtZTogXCJteS1rZXlcIiB9YDogZW5hYmxlZCB3aXRoIGV4aXN0aW5nIGtleVxuICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3NoQ29uZmlnIHtcbiAgLyoqIFNTSCBrZXkgcGFpciBuYW1lICovXG4gIGtleU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBBbGxvd2VkIENJRFIgYmxvY2tzIGZvciBTU0ggYWNjZXNzICovXG4gIGFsbG93ZWRDaWRycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIExhbWJkYSBmdW5jdGlvbiBVUkwgY29uZmlndXJhdGlvbi5cbiAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBJQU0gYXV0aFxuICogLSBgeyBhdXRoVHlwZTogXCJOT05FXCIsIGNvcnM6IHsuLi59IH1gOiBwdWJsaWMgd2l0aCBDT1JTXG4gKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvblVybENvbmZpZyB7XG4gIC8qKiBBdXRoZW50aWNhdGlvbiB0eXBlLiBEZWZhdWx0OiBBV1NfSUFNICovXG4gIGF1dGhUeXBlPzogRnVuY3Rpb25VcmxBdXRoVHlwZTtcbiAgLyoqIENPUlMgY29uZmlndXJhdGlvbiAqL1xuICBjb3JzPzogRnVuY3Rpb25VcmxDb3JzT3B0aW9ucztcbn1cblxuaW50ZXJmYWNlIEJhc2VDb21wdXRlUHJvcHMge1xuICB2cGM/OiBJVnBjO1xufVxuXG4vKipcbiAqIEVDUyBjb21wdXRlIGNvbmZpZ3VyYXRpb24uXG4gKiBDcmVhdGVzIGFuIEVDUyBjbHVzdGVyIHdpdGggb25lIG9yIG1vcmUgc2VydmljZXMgc2hhcmluZyBhIGxvYWQgYmFsYW5jZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbmdsZSBzZXJ2aWNlXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldlYkFwcFwiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgZG9tYWluOiBcImFwcC5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIHNlcnZpY2VzOiBbeyBuYW1lOiBcIndlYlwiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dIH1dXG4gKiB9KSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE11bHRpLXNlcnZpY2UgY2x1c3RlciB3aXRoIHJvdXRpbmdcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiQXBpQ2x1c3RlclwiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgZG9tYWluOiBcImFwaS5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIHNlcnZpY2VzOiBbXG4gKiAgICAgeyBuYW1lOiBcInVzZXJzXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvdXNlcnMvKlwiIH0gfSxcbiAqICAgICB7IG5hbWU6IFwib3JkZXJzXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDEgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvb3JkZXJzLypcIiB9IH1cbiAqICAgXVxuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbnRlcm5hbCB3b3JrZXJzIChubyBBTEIpXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldvcmtlcnNcIiwge1xuICogICB0eXBlOiBcImVjc1wiLFxuICogICBjbHVzdGVyOiB7IGxvYWRCYWxhbmNlcjogZmFsc2UgfSxcbiAqICAgc2VydmljZXM6IFt7IG5hbWU6IFwicHJvY2Vzc29yXCIgfSwgeyBuYW1lOiBcImVtYWlsZXJcIiB9XVxuICogfSkpO1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc0NvbXB1dGVQcm9wcyBleHRlbmRzIEJhc2VDb21wdXRlUHJvcHMge1xuICB0eXBlOiBcImVjc1wiO1xuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqIENvbnRyb2xzIHRoZSBzaGFyZWQgQUxCIGZvciBhbGwgc2VydmljZXMgaW4gdGhpcyBjbHVzdGVyLlxuICAgKiAtIE9taXQ6IEFMQiBjcmVhdGVkIHdpdGggZGVmYXVsdCBzZXR0aW5nc1xuICAgKiAtIGB7IGRvbWFpbjogXCIuLi5cIiB9YDogQUxCIHdpdGggSFRUUFMgKyBETlNcbiAgICogLSBgeyBsb2FkQmFsYW5jZXI6IGZhbHNlIH1gOiBObyBBTEIgKGludGVybmFsIHdvcmtlcnMpXG4gICAqL1xuICBjbHVzdGVyPzogRWNzQ2x1c3RlckNvbmZpZztcblxuICAvKipcbiAgICogU2VydmljZXMgaW4gdGhpcyBjbHVzdGVyLlxuICAgKiBFYWNoIHNlcnZpY2UgZ2V0cyBpdHMgb3duIHRhc2sgZGVmaW5pdGlvbiwgc2NhbGluZywgYW5kIHRhcmdldCBncm91cC5cbiAgICogQWxsIHNlcnZpY2VzIHNoYXJlIHRoZSBjbHVzdGVyJ3MgQUxCICh1bmxlc3MgZGlzYWJsZWQpLlxuICAgKi9cbiAgc2VydmljZXM6IEVjc1NlcnZpY2VDb25maWdbXTtcblxuICAvKipcbiAgICogQ2FwYWNpdHkgcHJvdmlkZXIgZGV0ZXJtaW5lcyBpbmZyYXN0cnVjdHVyZSB0eXBlLlxuICAgKiAtIFwiRkFSR0FURVwiOiBTZXJ2ZXJsZXNzIGNvbnRhaW5lcnMgKGRlZmF1bHQpXG4gICAqIC0gXCJGQVJHQVRFX1NQT1RcIjogU2VydmVybGVzcyB3aXRoIFNwb3QgcHJpY2luZ1xuICAgKiAtIFwiRUMyXCI6IEVDMi1iYWNrZWQgY29udGFpbmVyc1xuICAgKi9cbiAgY2FwYWNpdHlQcm92aWRlcj86IEVjc0NhcGFjaXR5UHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEVDMiBjYXBhY2l0eSBjb25maWd1cmF0aW9uLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBjYXBhY2l0eVByb3ZpZGVyIGlzIFwiRUMyXCIuXG4gICAqL1xuICBlYzJDb25maWc/OiBFYzJDYXBhY2l0eUNvbmZpZztcblxuICAvKipcbiAgICogRUNSIHJlcG9zaXRvcnkgZm9yIGFsbCBzZXJ2aWNlcyAoZGVmYXVsdCBpbWFnZSkuXG4gICAqIEluZGl2aWR1YWwgc2VydmljZXMgY2FuIG92ZXJyaWRlIHdpdGggdGhlaXIgb3duIGBpbWFnZWAgcHJvcGVydHkuXG4gICAqL1xuICBlY3JSZXBvc2l0b3J5PzogUmVwb3NpdG9yeSB8IFJlcG9zaXRvcnlJbWFnZTtcblxuICAvKipcbiAgICogUGF0aCB0byBEb2NrZXJmaWxlIGZvciBidWlsZGluZyBjdXN0b20gaW1hZ2UuXG4gICAqIE5vdGU6IFRoaXMgaXMgbWV0YWRhdGEgZm9yIHRoZSBDTEkgYnVpbGQgcHJvY2VzcyxcbiAgICogbm90IHVzZWQgZHVyaW5nIENESyBzeW50aGVzaXMuXG4gICAqL1xuICBkb2NrZXJmaWxlUGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFYzJDb21wdXRlUHJvcHMgZXh0ZW5kcyBCYXNlQ29tcHV0ZVByb3BzIHtcbiAgdHlwZTogXCJlYzJcIjtcblxuICAvKiogRUMyIGluc3RhbmNlIHR5cGUuIERlZmF1bHQ6IFwidDMubWljcm9cIiAqL1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNTSCBhY2Nlc3MgY29uZmlndXJhdGlvbi5cbiAgICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAgICogLSBge31gOiBlbmFibGVkIHdpdGggZGVmYXVsdHNcbiAgICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAqL1xuICBzc2g/OiBTc2hDb25maWcgfCBmYWxzZTtcbiAgLyoqIFVzZXIgZGF0YSBzY3JpcHQgKi9cbiAgdXNlckRhdGE/OiBVc2VyRGF0YTtcbiAgLyoqIE1hY2hpbmUgaW1hZ2UgKEFNSSkgKi9cbiAgbWFjaGluZUltYWdlPzogSU1hY2hpbmVJbWFnZTtcbiAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtaW5DYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCYXNlIExhbWJkYSBjb25maWd1cmF0aW9uIHNoYXJlZCBieSBib3RoIGNvbnRhaW5lciBhbmQgY29kZSBkZXBsb3ltZW50cy5cbiAqL1xuaW50ZXJmYWNlIEJhc2VMYW1iZGFQcm9wcyBleHRlbmRzIEJhc2VDb21wdXRlUHJvcHMge1xuICB0eXBlOiBcImxhbWJkYVwiO1xuICAvKiogVGltZW91dCBpbiBzZWNvbmRzLiBEZWZhdWx0OiAzICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBNZW1vcnkgc2l6ZSBpbiBNQi4gRGVmYXVsdDogMTI4ICovXG4gIG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIC8qKiBMYW1iZGEgZnVuY3Rpb24gZGVzY3JpcHRpb24gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBkZXNjcmlwdGlvbiAqL1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBJbmxpbmUgSUFNIHBvbGljeSBzdGF0ZW1lbnRzICovXG4gIGlubGluZVBvbGljeT86IFBvbGljeVN0YXRlbWVudFtdO1xuICAvKipcbiAgICogRnVuY3Rpb24gVVJMIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gICAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIElBTSBhdXRoXG4gICAqIC0gYHsgYXV0aFR5cGU6IFwiTk9ORVwiIH1gOiBwdWJsaWMgYWNjZXNzXG4gICAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICAgKi9cbiAgZnVuY3Rpb25Vcmw/OiBGdW5jdGlvblVybENvbmZpZyB8IGZhbHNlO1xuICAvKiogRW52aXJvbm1lbnQgdmFyaWFibGVzICovXG4gIGVudmlyb25tZW50PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBDb250YWluZXItYmFzZWQgTGFtYmRhIHVzaW5nIEVDUiBpbWFnZS5cbiAqXG4gKiBVc2VzIERvY2tlciBpbWFnZSBmcm9tIEVDUiByZXBvc2l0b3J5LiBIYW5kbGVyIGFuZCBydW50aW1lIGFyZVxuICogYXV0b21hdGljYWxseSBzZXQgdG8gRlJPTV9JTUFHRS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJJbWFnZUxhbWJkYVwiLCB7XG4gKiAgIHR5cGU6IFwibGFtYmRhXCIsXG4gKiAgIGRlcGxveW1lbnQ6IFwiY29udGFpbmVyXCIsXG4gKiAgIGVjclJlcG9zaXRvcnk6IGFwcC5nZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKVxuICogfSkpO1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckxhbWJkYVByb3BzIGV4dGVuZHMgQmFzZUxhbWJkYVByb3BzIHtcbiAgLyoqIENvbnRhaW5lci1iYXNlZCBkZXBsb3ltZW50IHVzaW5nIEVDUiBpbWFnZSAqL1xuICBkZXBsb3ltZW50OiBcImNvbnRhaW5lclwiO1xuICAvKiogRUNSIHJlcG9zaXRvcnkgY29udGFpbmluZyB0aGUgTGFtYmRhIGNvbnRhaW5lciBpbWFnZSAqL1xuICBlY3JSZXBvc2l0b3J5OiBSZXBvc2l0b3J5IHwgUmVwb3NpdG9yeUltYWdlO1xufVxuXG4vKipcbiAqIENvZGUtYmFzZWQgTGFtYmRhIHVzaW5nIGlubGluZSBjb2RlIG9yIFMzLlxuICpcbiAqIFVzZXMgdHJhZGl0aW9uYWwgTGFtYmRhIGRlcGxveW1lbnQgd2l0aCBjb2RlLCBoYW5kbGVyLCBhbmQgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJDb2RlTGFtYmRhXCIsIHtcbiAqICAgdHlwZTogXCJsYW1iZGFcIixcbiAqICAgZGVwbG95bWVudDogXCJjb2RlXCIsXG4gKiAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFwiLi9sYW1iZGFcIiksXG4gKiAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICogICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUxhbWJkYVByb3BzIGV4dGVuZHMgQmFzZUxhbWJkYVByb3BzIHtcbiAgLyoqIENvZGUtYmFzZWQgZGVwbG95bWVudCAqL1xuICBkZXBsb3ltZW50OiBcImNvZGVcIjtcbiAgLyoqIExhbWJkYSBjb2RlIChmcm9tIGFzc2V0LCBTMywgb3IgaW5saW5lKSAqL1xuICBjb2RlOiBDb2RlO1xuICAvKiogSGFuZGxlciBmdW5jdGlvbi4gRGVmYXVsdDogXCJpbmRleC5oYW5kbGVyXCIgKi9cbiAgaGFuZGxlcj86IHN0cmluZztcbiAgLyoqIExhbWJkYSBydW50aW1lLiBEZWZhdWx0OiBOT0RFSlNfMThfWCAqL1xuICBydW50aW1lPzogUnVudGltZTtcbn1cblxuLyoqXG4gKiBMYW1iZGEgY29tcHV0ZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24gZW5zdXJpbmcgdHlwZS1zYWZlIExhbWJkYSBjb25maWd1cmF0aW9uOlxuICogLSBgZGVwbG95bWVudDogXCJjb250YWluZXJcImAgcmVxdWlyZXMgYGVjclJlcG9zaXRvcnlgXG4gKiAtIGBkZXBsb3ltZW50OiBcImNvZGVcImAgcmVxdWlyZXMgYGNvZGVgIGFuZCBhbGxvd3MgYGhhbmRsZXJgL2BydW50aW1lYFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb250YWluZXItYmFzZWQgTGFtYmRhXG4gKiB7IHR5cGU6IFwibGFtYmRhXCIsIGRlcGxveW1lbnQ6IFwiY29udGFpbmVyXCIsIGVjclJlcG9zaXRvcnk6IGVjciB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvZGUtYmFzZWQgTGFtYmRhXG4gKiB7IHR5cGU6IFwibGFtYmRhXCIsIGRlcGxveW1lbnQ6IFwiY29kZVwiLCBjb2RlOiBDb2RlLmZyb21Bc3NldChcIi4vbGFtYmRhXCIpIH1cbiAqL1xuZXhwb3J0IHR5cGUgTGFtYmRhQ29tcHV0ZVByb3BzID0gQ29udGFpbmVyTGFtYmRhUHJvcHMgfCBDb2RlTGFtYmRhUHJvcHM7XG5cbmV4cG9ydCB0eXBlIElDb21wdXRlUHJvcHMgPVxuICB8IEVjc0NvbXB1dGVQcm9wc1xuICB8IEVjMkNvbXB1dGVQcm9wc1xuICB8IExhbWJkYUNvbXB1dGVQcm9wcztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgY29tcHV0ZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBUaGVzZSBjaGVja3MgaGVscCBjYXRjaCBpc3N1ZXMgd2hlbiBwcm9wcyBjb21lIGZyb20gZHluYW1pYyBzb3VyY2VzIHdoZXJlXG4gKiBUeXBlU2NyaXB0J3MgY29tcGlsZS10aW1lIGNoZWNrcyBtYXkgbm90IGFwcGx5LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbXB1dGVQcm9wcyhwcm9wczogSUNvbXB1dGVQcm9wcyk6IHZvaWQge1xuICBjb25zdCBwcm9wc0FueSA9IHByb3BzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gRUNTLXNwZWNpZmljIG9wdGlvbnMgb24gbm9uLUVDUyBjb21wdXRlXG4gIGlmIChwcm9wcy50eXBlICE9PSBcImVjc1wiKSB7XG4gICAgaWYgKFxuICAgICAgXCJjYXBhY2l0eVByb3ZpZGVyXCIgaW4gcHJvcHNBbnkgJiZcbiAgICAgIHByb3BzQW55LmNhcGFjaXR5UHJvdmlkZXIgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnY2FwYWNpdHlQcm92aWRlcicgaXMgaWdub3JlZCBmb3IgJHtwcm9wcy50eXBlfSBjb21wdXRlLiBgICtcbiAgICAgICAgICBcIkNhcGFjaXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJlYzJDb25maWdcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5lYzJDb25maWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnZWMyQ29uZmlnJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiRUMyIGNhcGFjaXR5IGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJzZXJ2aWNlc1wiIGluIHByb3BzQW55ICYmIHByb3BzQW55LnNlcnZpY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ3NlcnZpY2VzJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiU2VydmljZXMgY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gRUNTIGNvbXB1dGUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcImNsdXN0ZXJcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5jbHVzdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ2NsdXN0ZXInIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJDbHVzdGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIExhbWJkYS1zcGVjaWZpYyBvcHRpb25zIG9uIG5vbi1MYW1iZGEgY29tcHV0ZVxuICBpZiAocHJvcHMudHlwZSAhPT0gXCJsYW1iZGFcIikge1xuICAgIGlmIChcImZ1bmN0aW9uVXJsXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkuZnVuY3Rpb25VcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnZnVuY3Rpb25VcmwnIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJGdW5jdGlvbiBVUkwgY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gTGFtYmRhIGNvbXB1dGUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcImhhbmRsZXJcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5oYW5kbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ2hhbmRsZXInIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJIYW5kbGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIExhbWJkYSBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJydW50aW1lXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkucnVudGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbRmphbGxdIFdhcm5pbmc6ICdydW50aW1lJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiUnVudGltZSBjb25maWd1cmF0aW9uIG9ubHkgYXBwbGllcyB0byBMYW1iZGEgY29tcHV0ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBFQzItc3BlY2lmaWMgb3B0aW9ucyBvbiBub24tRUMyIGNvbXB1dGVcbiAgaWYgKHByb3BzLnR5cGUgIT09IFwiZWMyXCIpIHtcbiAgICBpZiAoXCJzc2hcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5zc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnc3NoJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiU1NIIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDMiBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJ1c2VyRGF0YVwiIGluIHByb3BzQW55ICYmIHByb3BzQW55LnVzZXJEYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ3VzZXJEYXRhJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiVXNlciBkYXRhIG9ubHkgYXBwbGllcyB0byBFQzIgY29tcHV0ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFwibWFjaGluZUltYWdlXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkubWFjaGluZUltYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ21hY2hpbmVJbWFnZScgaXMgaWdub3JlZCBmb3IgJHtwcm9wcy50eXBlfSBjb21wdXRlLiBgICtcbiAgICAgICAgICBcIk1hY2hpbmUgaW1hZ2Ugb25seSBhcHBsaWVzIHRvIEVDMiBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVDUy1zcGVjaWZpYyB2YWxpZGF0aW9uXG4gIGlmIChwcm9wcy50eXBlID09PSBcImVjc1wiKSB7XG4gICAgdmFsaWRhdGVFY3NQcm9wcyhwcm9wcyBhcyBFY3NDb21wdXRlUHJvcHMpO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIEVDUy1zcGVjaWZpYyBwcm9wcy5cbiAqIEV4dHJhY3RlZCBmb3IgY2xhcml0eSBhbmQgZGV0YWlsIHBhcml0eSB3aXRoIGRhdGFiYXNlL25ldHdvcmsgcGF0dGVybnMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRWNzUHJvcHMocHJvcHM6IEVjc0NvbXB1dGVQcm9wcyk6IHZvaWQge1xuICAvLyBFQzIgY29uZmlnIHZhbGlkYXRpb25cbiAgaWYgKHByb3BzLmVjMkNvbmZpZyAmJiBwcm9wcy5jYXBhY2l0eVByb3ZpZGVyICE9PSBcIkVDMlwiKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJbRmphbGxdIFdhcm5pbmc6ICdlYzJDb25maWcnIGlzIGlnbm9yZWQgd2hlbiBjYXBhY2l0eVByb3ZpZGVyIGlzIG5vdCAnRUMyJy4gXCIgK1xuICAgICAgICBcIlNldCBjYXBhY2l0eVByb3ZpZGVyIHRvICdFQzInIHRvIHVzZSBFQzIgY2FwYWNpdHkgY29uZmlndXJhdGlvbi5cIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBzZXJ2aWNlcyBhcnJheSBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eVxuICBpZiAoIXByb3BzLnNlcnZpY2VzIHx8IHByb3BzLnNlcnZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQXQgbGVhc3Qgb25lIHNlcnZpY2UgbXVzdCBiZSBzcGVjaWZpZWQgaW4gJ3NlcnZpY2VzJyBhcnJheS5cIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB1bmlxdWUgc2VydmljZSBuYW1lc1xuICBjb25zdCBzZXJ2aWNlTmFtZXMgPSBwcm9wcy5zZXJ2aWNlcy5tYXAoKHMpID0+IHMubmFtZSk7XG4gIGNvbnN0IGR1cGxpY2F0ZU5hbWVzID0gc2VydmljZU5hbWVzLmZpbHRlcihcbiAgICAobmFtZSwgaW5kZXgpID0+IHNlcnZpY2VOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICApO1xuICBpZiAoZHVwbGljYXRlTmFtZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEdXBsaWNhdGUgc2VydmljZSBuYW1lczogJHtbLi4ubmV3IFNldChkdXBsaWNhdGVOYW1lcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHNlcnZpY2UgbmFtZSBmb3JtYXRcbiAgY29uc3QgaW52YWxpZE5hbWVzID0gcHJvcHMuc2VydmljZXMuZmlsdGVyKFxuICAgIChzKSA9PiAhL15bYS16QS1aXVthLXpBLVowLTktXSokLy50ZXN0KHMubmFtZSlcbiAgKTtcbiAgaWYgKGludmFsaWROYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgc2VydmljZSBuYW1lczogJHtpbnZhbGlkTmFtZXMubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICBcIlNlcnZpY2UgbmFtZXMgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgYW5kIGh5cGhlbnMuXCJcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgcm91dGluZyB3aGVuIG11bHRpcGxlIHNlcnZpY2VzIGhhdmUgcG9ydHNcbiAgY29uc3Qgc2VydmljZXNXaXRoUG9ydHMgPSBwcm9wcy5zZXJ2aWNlcy5maWx0ZXIoKHMpID0+XG4gICAgcy5jb250YWluZXJzPy5zb21lKChjKSA9PiBjLnBvcnQpXG4gICk7XG5cbiAgaWYgKHNlcnZpY2VzV2l0aFBvcnRzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBtaXNzaW5nUm91dGluZyA9IHNlcnZpY2VzV2l0aFBvcnRzLmZpbHRlcihcbiAgICAgIChzKSA9PiAhcy5yb3V0aW5nPy5wYXRoICYmICFzLnJvdXRpbmc/Lmhvc3RcbiAgICApO1xuICAgIGlmIChtaXNzaW5nUm91dGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTZXJ2aWNlcyB3aXRoIHBvcnRzIHJlcXVpcmUgcm91dGluZyBjb25maWcgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlczogYCArXG4gICAgICAgICAgYCR7bWlzc2luZ1JvdXRpbmcubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICAgIFwiQWRkIHJvdXRpbmc6IHsgcGF0aDogJy8uLi4nIH0gb3Igcm91dGluZzogeyBob3N0OiAnLi4uJyB9IHRvIGVhY2ggc2VydmljZS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBlYWNoIHNlcnZpY2UncyBjb250YWluZXJzXG4gIGZvciAoY29uc3Qgc2VydmljZSBvZiBwcm9wcy5zZXJ2aWNlcykge1xuICAgIGlmIChzZXJ2aWNlLmNvbnRhaW5lcnMgJiYgc2VydmljZS5jb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgY29udGFpbmVyIG5hbWVzIHdpdGhpbiBzZXJ2aWNlIChvbmx5IG5hbWVkIGNvbnRhaW5lcnMpXG4gICAgICBjb25zdCBjb250YWluZXJOYW1lcyA9IHNlcnZpY2UuY29udGFpbmVyc1xuICAgICAgICAuZmlsdGVyKChjKSA9PiBjLm5hbWUpXG4gICAgICAgIC5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICBjb25zdCBkdXBsaWNhdGVDb250YWluZXJOYW1lcyA9IGNvbnRhaW5lck5hbWVzLmZpbHRlcihcbiAgICAgICAgKG5hbWUsIGluZGV4KSA9PiBjb250YWluZXJOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICAgICAgKTtcbiAgICAgIGlmIChkdXBsaWNhdGVDb250YWluZXJOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2VydmljZSAnJHtzZXJ2aWNlLm5hbWV9JzogRHVwbGljYXRlIGNvbnRhaW5lciBuYW1lczogYCArXG4gICAgICAgICAgICBgJHtbLi4ubmV3IFNldChkdXBsaWNhdGVDb250YWluZXJOYW1lcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgY29tcHV0ZSByZXNvdXJjZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbmdsZSBzZXJ2aWNlIGNsdXN0ZXJcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiV2ViQXBwXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBwLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFt7IG5hbWU6IFwid2ViXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0gfV1cbiAqIH0pKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTXVsdGktc2VydmljZSBjbHVzdGVyIHdpdGggcm91dGluZ1xuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJBcGlDbHVzdGVyXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBpLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFtcbiAqICAgICB7IG5hbWU6IFwidXNlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMCB9XSwgcm91dGluZzogeyBwYXRoOiBcIi91c2Vycy8qXCIgfSB9LFxuICogICAgIHsgbmFtZTogXCJvcmRlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMSB9XSwgcm91dGluZzogeyBwYXRoOiBcIi9vcmRlcnMvKlwiIH0gfVxuICogICBdXG4gKiB9KSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdvcmtlciBjbHVzdGVyIChubyBBTEIpXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldvcmtlcnNcIiwge1xuICogICB0eXBlOiBcImVjc1wiLFxuICogICBjbHVzdGVyOiB7IGxvYWRCYWxhbmNlcjogZmFsc2UgfSxcbiAqICAgc2VydmljZXM6IFtcbiAqICAgICB7IG5hbWU6IFwicHJvY2Vzc29yXCIsIGNvbnRhaW5lcnM6IFt7IGNvbW1hbmQ6IFtcIm5vZGVcIiwgXCJ3b3JrZXIuanNcIl0gfV0gfVxuICogICBdXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wdXRlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wczogSUNvbXB1dGVQcm9wcykge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpOiBDb21wdXRlID0+IHtcbiAgICAgIHZhbGlkYXRlQ29tcHV0ZVByb3BzKHByb3BzKTtcblxuICAgICAgY29uc3QgY29tcHV0ZVByb3BzOiBJQ29tcHV0ZVByb3BzID0ge1xuICAgICAgICAuLi57XG4gICAgICAgICAgdnBjOiBhcHAuZ2V0VnBjKCksXG4gICAgICAgICAgZWNyUmVwb3NpdG9yeTogYXBwLmdldERlZmF1bHRDb250YWluZXJSZWdpc3RyeSgpXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnByb3BzXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gbmV3IENvbXB1dGUoc2NvcGUsIGlkLCBjb21wdXRlUHJvcHMpO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXB1dGUgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgcHVibGljIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHB1YmxpYyB2cGM6IElWcGM7XG5cbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIGNvbXB1dGU6IEVjc0NsdXN0ZXIgfCBFYzJJbnN0YW5jZSB8IExhbWJkYUZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJQ29tcHV0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuXG4gICAgdGhpcy5hZGRDb21wdXRlKHByb3BzKTtcbiAgfVxuXG4gIGFkZENvbXB1dGUocHJvcHM6IElDb21wdXRlUHJvcHMpIHtcbiAgICBzd2l0Y2ggKHByb3BzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJlY3NcIjpcbiAgICAgICAgdGhpcy5hZGRFY3NDb21wdXRlKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZWMyXCI6XG4gICAgICAgIHRoaXMuYWRkRWMyQ29tcHV0ZShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxhbWJkYVwiOlxuICAgICAgICB0aGlzLmFkZExhbWJkYUNvbXB1dGUocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEV4aGF1c3RpdmVuZXNzIGNoZWNrIC0gVHlwZVNjcmlwdCB3aWxsIGVycm9yIGlmIGEgY2FzZSBpcyBtaXNzaW5nXG4gICAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IHByb3BzO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIGNvbXB1dGUgdHlwZTogJHsoX2V4aGF1c3RpdmUgYXMgSUNvbXB1dGVQcm9wcykudHlwZX1gXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRFYzJDb21wdXRlKHByb3BzOiBFYzJDb21wdXRlUHJvcHMpIHtcbiAgICBjb25zdCBlbmFibGVTU0ggPSBwcm9wcy5zc2ggIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5zc2ggIT09IGZhbHNlO1xuXG4gICAgY29uc3QgZWMyUHJvcHMgPSB7XG4gICAgICBzZXJ2aWNlTmFtZTogYCR7dGhpcy5pZH1TZXJ2aWNlYCxcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuaW5zdGFuY2VUeXBlIHx8IFwidDMubWljcm9cIixcbiAgICAgIGVuYWJsZVNTSCxcbiAgICAgIHVzZXJEYXRhOiBwcm9wcy51c2VyRGF0YSxcbiAgICAgIG1hY2hpbmVJbWFnZTogcHJvcHMubWFjaGluZUltYWdlLFxuICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLm1pbkNhcGFjaXR5IHx8IDEsXG4gICAgICBtYXhDYXBhY2l0eTogcHJvcHMubWF4Q2FwYWNpdHkgfHwgMSxcbiAgICAgIHZwYzogcHJvcHMudnBjXG4gICAgfTtcblxuICAgIHRoaXMuY29tcHV0ZSA9IG5ldyBFYzJJbnN0YW5jZSh0aGlzLnNjb3BlLCBgJHt0aGlzLmlkfUVjMmAsIGVjMlByb3BzKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5jb21wdXRlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFY3NDb21wdXRlKHByb3BzOiBFY3NDb21wdXRlUHJvcHMpIHtcbiAgICBjb25zdCBjYXBhY2l0eVByb3ZpZGVyOiBFY3NDYXBhY2l0eVByb3ZpZGVyVHlwZSA9XG4gICAgICBwcm9wcy5jYXBhY2l0eVByb3ZpZGVyIHx8IFwiRkFSR0FURVwiO1xuXG4gICAgLy8gVHJhbnNmb3JtIEVjc1NlcnZpY2VDb25maWdbXSB0byBFY3NTZXJ2aWNlUHJvcHNbXSBmb3IgRWNzQ2x1c3RlclxuICAgIGNvbnN0IHNlcnZpY2VzOiBFY3NDbHVzdGVyUHJvcHNbXCJzZXJ2aWNlc1wiXSA9IHByb3BzLnNlcnZpY2VzLm1hcChcbiAgICAgIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIC8vIEJ1aWxkIGNvbnRhaW5lciBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBzZXJ2aWNlXG4gICAgICAgIGxldCBjb250YWluZXJzOiBFY3NDbHVzdGVyUHJvcHNbXCJzZXJ2aWNlc1wiXVtudW1iZXJdW1wiY29udGFpbmVyc1wiXTtcblxuICAgICAgICBpZiAoc2VydmljZS5jb250YWluZXJzICYmIHNlcnZpY2UuY29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gTWFwIGNvbnRhaW5lcnMsIGF1dG8tZ2VuZXJhdGluZyBuYW1lcyBpZiBub3QgcHJvdmlkZWRcbiAgICAgICAgICBjb250YWluZXJzID0gc2VydmljZS5jb250YWluZXJzLm1hcCgoYywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBjLm5hbWUgfHwgYCR7c2VydmljZS5uYW1lfUNvbnRhaW5lciR7aW5kZXggPiAwID8gaW5kZXggOiBcIlwifWAsXG4gICAgICAgICAgICBpbWFnZTogYy5pbWFnZSxcbiAgICAgICAgICAgIHBvcnQ6IGMucG9ydCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBjLmVudmlyb25tZW50LFxuICAgICAgICAgICAgc2VjcmV0c0ltcG9ydDogYy5zZWNyZXRzSW1wb3J0LFxuICAgICAgICAgICAgY29tbWFuZDogYy5jb21tYW5kLFxuICAgICAgICAgICAgZW50cnlQb2ludDogYy5lbnRyeVBvaW50LFxuICAgICAgICAgICAgZXNzZW50aWFsOiBjLmVzc2VudGlhbCxcbiAgICAgICAgICAgIGhlYWx0aENoZWNrOiBjLmhlYWx0aENoZWNrXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERlZmF1bHQgY29udGFpbmVyIChubyBwb3J0ID0gd29ya2VyKVxuICAgICAgICAgIGNvbnRhaW5lcnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IGAke3NlcnZpY2UubmFtZX1Db250YWluZXJgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSBzY2FsaW5nIGNvbmZpZ1xuICAgICAgICBsZXQgc2NhbGluZ1R5cGU6IFNjYWxpbmdUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgbWluQ2FwYWNpdHk6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IG1heENhcGFjaXR5OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHNlcnZpY2Uuc2NhbGluZyAhPT0gZmFsc2UgJiYgc2VydmljZS5zY2FsaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsaW5nVHlwZSA9IHNlcnZpY2Uuc2NhbGluZy5zY2FsaW5nVHlwZSA/PyBTY2FsaW5nVHlwZS5DUFU7XG4gICAgICAgICAgbWluQ2FwYWNpdHkgPSBzZXJ2aWNlLnNjYWxpbmcubWluQ2FwYWNpdHk7XG4gICAgICAgICAgbWF4Q2FwYWNpdHkgPSBzZXJ2aWNlLnNjYWxpbmcubWF4Q2FwYWNpdHk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VydmljZS5zY2FsaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBEZWZhdWx0OiBlbmFibGUgc2NhbGluZyB3aXRoIENQVVxuICAgICAgICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5cGUuQ1BVO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBzZXJ2aWNlLm5hbWUsXG4gICAgICAgICAgaW1hZ2U6IHNlcnZpY2UuaW1hZ2UsXG4gICAgICAgICAgY29udGFpbmVycyxcbiAgICAgICAgICBjcHU6IHNlcnZpY2UuY3B1LFxuICAgICAgICAgIG1lbW9yeUxpbWl0TWlCOiBzZXJ2aWNlLm1lbW9yeUxpbWl0TWlCLFxuICAgICAgICAgIGRlc2lyZWRDb3VudDogc2VydmljZS5kZXNpcmVkQ291bnQsXG4gICAgICAgICAgc2NhbGluZ1R5cGUsXG4gICAgICAgICAgbWluQ2FwYWNpdHksXG4gICAgICAgICAgbWF4Q2FwYWNpdHksXG4gICAgICAgICAgcm91dGluZzogc2VydmljZS5yb3V0aW5nLFxuICAgICAgICAgIHRhc2tSb2xlSW5saW5lUG9saWNpZXM6IHNlcnZpY2UudGFza1JvbGVJbmxpbmVQb2xpY2llcyxcbiAgICAgICAgICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llczogc2VydmljZS50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbiAgICAgICAgICBjb25uZWN0aW9uczogc2VydmljZS5jb25uZWN0aW9uc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBCdWlsZCBjbHVzdGVyIGNvbmZpZ1xuICAgIGNvbnN0IGNsdXN0ZXI6IEVjc0NsdXN0ZXJQcm9wc1tcImNsdXN0ZXJcIl0gPSBwcm9wcy5jbHVzdGVyXG4gICAgICA/IHtcbiAgICAgICAgICBkb21haW46IHByb3BzLmNsdXN0ZXIuZG9tYWluLFxuICAgICAgICAgIGxvYWRCYWxhbmNlcjogcHJvcHMuY2x1c3Rlci5sb2FkQmFsYW5jZXIsXG4gICAgICAgICAgZGlyZWN0QWNjZXNzOiBwcm9wcy5jbHVzdGVyLmRpcmVjdEFjY2Vzc1xuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGVjc1Byb3BzOiBFY3NDbHVzdGVyUHJvcHMgPSB7XG4gICAgICBjbHVzdGVyTmFtZTogYCR7dGhpcy5pZH1DbHVzdGVyYCxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZWNyUmVwb3NpdG9yeTogcHJvcHMuZWNyUmVwb3NpdG9yeSB8fCBcImFtYXpvbi9hbWF6b24tZWNzLXNhbXBsZVwiLFxuICAgICAgY2FwYWNpdHlQcm92aWRlcixcbiAgICAgIGVjMkNvbmZpZzogY2FwYWNpdHlQcm92aWRlciA9PT0gXCJFQzJcIiA/IHByb3BzLmVjMkNvbmZpZyA6IHVuZGVmaW5lZCxcbiAgICAgIGNsdXN0ZXIsXG4gICAgICBzZXJ2aWNlc1xuICAgIH07XG5cbiAgICB0aGlzLmNvbXB1dGUgPSBuZXcgRWNzQ2x1c3Rlcih0aGlzLnNjb3BlLCBgJHt0aGlzLmlkfUVjc2AsIGVjc1Byb3BzKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5jb21wdXRlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRMYW1iZGFDb21wdXRlKHByb3BzOiBMYW1iZGFDb21wdXRlUHJvcHMpIHtcbiAgICBsZXQgY29kZTogQ29kZTtcbiAgICBsZXQgaGFuZGxlcjogc3RyaW5nO1xuICAgIGxldCBydW50aW1lOiBSdW50aW1lO1xuXG4gICAgaWYgKHByb3BzLmRlcGxveW1lbnQgPT09IFwiY29udGFpbmVyXCIpIHtcbiAgICAgIC8vIENvbnRhaW5lci1iYXNlZCBMYW1iZGEgdXNpbmcgRUNSXG4gICAgICBpZiAocHJvcHMuZWNyUmVwb3NpdG9yeSBpbnN0YW5jZW9mIFJlcG9zaXRvcnkpIHtcbiAgICAgICAgY29kZSA9IENvZGUuZnJvbUVjckltYWdlKHByb3BzLmVjclJlcG9zaXRvcnksIHtcbiAgICAgICAgICB0YWdPckRpZ2VzdDogXCJsYXRlc3RcIlxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcImVjclJlcG9zaXRvcnkgbXVzdCBiZSBhIFJlcG9zaXRvcnkgaW5zdGFuY2UgZm9yIExhbWJkYSBjb21wdXRlIHR5cGVcIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBDb250YWluZXIgTGFtYmRhIHJlcXVpcmVzIHRoZXNlIHNwZWNpYWwgdmFsdWVzXG4gICAgICBoYW5kbGVyID0gSGFuZGxlci5GUk9NX0lNQUdFO1xuICAgICAgcnVudGltZSA9IFJ1bnRpbWUuRlJPTV9JTUFHRTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29kZS1iYXNlZCBMYW1iZGEgLSBwcm9wcy5kZXBsb3ltZW50ID09PSBcImNvZGVcIlxuICAgICAgY29kZSA9IHByb3BzLmNvZGU7XG4gICAgICBoYW5kbGVyID0gcHJvcHMuaGFuZGxlciB8fCBcImluZGV4LmhhbmRsZXJcIjtcbiAgICAgIHJ1bnRpbWUgPSBwcm9wcy5ydW50aW1lIHx8IFJ1bnRpbWUuTk9ERUpTXzE4X1g7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBwcmVzZW5jZS1iYXNlZCBmdW5jdGlvblVybCBjb25maWcgdG8gbGVnYWN5IGJvb2xlYW4gZm9ybWF0XG4gICAgY29uc3QgZnVuY3Rpb25VcmxDb25maWcgPSBwcm9wcy5mdW5jdGlvblVybDtcbiAgICBjb25zdCBlbmFibGVGdW5jdGlvblVybCA9XG4gICAgICBmdW5jdGlvblVybENvbmZpZyAhPT0gdW5kZWZpbmVkICYmIGZ1bmN0aW9uVXJsQ29uZmlnICE9PSBmYWxzZTtcbiAgICBjb25zdCBmdW5jdGlvblVybEF1dGhUeXBlID1cbiAgICAgIGVuYWJsZUZ1bmN0aW9uVXJsICYmIHR5cGVvZiBmdW5jdGlvblVybENvbmZpZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IGZ1bmN0aW9uVXJsQ29uZmlnLmF1dGhUeXBlXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGZ1bmN0aW9uVXJsQ29ycyA9XG4gICAgICBlbmFibGVGdW5jdGlvblVybCAmJiB0eXBlb2YgZnVuY3Rpb25VcmxDb25maWcgPT09IFwib2JqZWN0XCJcbiAgICAgICAgPyBmdW5jdGlvblVybENvbmZpZy5jb3JzXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgbGFtYmRhUHJvcHMgPSB7XG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgaGFuZGxlcixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSxcbiAgICAgIGxhbWJkYURlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHJvbGVEZXNjcmlwdGlvbjogcHJvcHMucm9sZURlc2NyaXB0aW9uLFxuICAgICAgaW5saW5lUG9saWN5OiBwcm9wcy5pbmxpbmVQb2xpY3kgfHwgW10sXG4gICAgICBlbmFibGVGdW5jdGlvblVybCxcbiAgICAgIGZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gICAgICBmdW5jdGlvblVybENvcnMsXG4gICAgICBlbnZpcm9ubWVudDogcHJvcHMuZW52aXJvbm1lbnRcbiAgICB9O1xuXG4gICAgdGhpcy5jb21wdXRlID0gbmV3IExhbWJkYUZ1bmN0aW9uKFxuICAgICAgdGhpcy5zY29wZSxcbiAgICAgIGAke3RoaXMuaWR9TGFtYmRhYCxcbiAgICAgIGxhbWJkYVByb3BzXG4gICAgKTtcblxuICAgIC8vIExhbWJkYSBmdW5jdGlvbnMgZG9uJ3QgdXNlIHNlY3VyaXR5IGdyb3VwcyB1bmxlc3MgVlBDLWVuYWJsZWRcbiAgICAvLyBDcmVhdGUgZW1wdHkgY29ubmVjdGlvbnMgb2JqZWN0IGZvciBpbnRlcmZhY2UgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoKTtcbiAgfVxufVxuIl19
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5R0Esb0RBRUM7QUFFRCxvRUFJQztBQWhIRCxpREFBaUQ7QUFDakQsaURBTTZCO0FBQzdCLHVEQU1nQztBQU9oQywyQ0FBdUM7QUFJdkMseURBS3lDO0FBQ3pDLHlEQUE4RDtBQUM5RCwrREFBb0U7QUF1QnZELFFBQUEsbUJBQW1CLEdBQTJDO0lBQ3pFLEdBQUcsRUFBRTtRQUNILFdBQVcsRUFBRSxFQUFFO1FBQ2YsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFO1FBQ2xELG1CQUFtQixFQUFFLElBQUk7UUFDekIsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRCxHQUFHLEVBQUU7UUFDSCxXQUFXLEVBQUUsRUFBRTtRQUNmLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtRQUNsRCxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLFdBQVcsRUFBRSxJQUFJO0tBQ2xCO0lBQ0QsTUFBTSxFQUFFO1FBQ04sV0FBVyxFQUFFLENBQUM7UUFDZCxjQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUU7UUFDcEQsbUJBQW1CLEVBQUUsS0FBSztRQUMxQixXQUFXLEVBQUUsS0FBSztLQUNuQjtDQUNGLENBQUM7QUFZVyxRQUFBLDRCQUE0QixHQUdyQztJQUNGLE9BQU8sRUFBRTtRQUNQLFFBQVEsRUFBRSxLQUFLO1FBQ2YsZ0JBQWdCLEVBQUUsS0FBSztLQUN4QjtJQUNELFlBQVksRUFBRTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsZ0JBQWdCLEVBQUUsS0FBSztLQUN4QjtJQUNELEdBQUcsRUFBRTtRQUNILFFBQVEsRUFBRSxLQUFLO1FBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtLQUN2QjtDQUNGLENBQUM7QUFFRixTQUFnQixvQkFBb0IsQ0FBQyxJQUFpQjtJQUNwRCxPQUFPLDJCQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFnQiw0QkFBNEIsQ0FDMUMsUUFBNkI7SUFFN0IsT0FBTyxvQ0FBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsdURBQXVEO0FBQ3ZELHFEQUdnQztBQUY5Qix3R0FBQSxVQUFVLE9BQUE7QUF5ZVo7Ozs7R0FJRztBQUNILFNBQVMsb0JBQW9CLENBQUMsS0FBb0I7SUFDaEQsTUFBTSxRQUFRLEdBQUcsS0FBMkMsQ0FBQztJQUU3RCwwQ0FBMEM7SUFDMUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQ0Usa0JBQWtCLElBQUksUUFBUTtZQUM5QixRQUFRLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUN2QyxDQUFDO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FDVixzREFBc0QsS0FBSyxDQUFDLElBQUksWUFBWTtnQkFDMUUsOERBQThELENBQ2pFLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxXQUFXLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEUsT0FBTyxDQUFDLElBQUksQ0FDViwrQ0FBK0MsS0FBSyxDQUFDLElBQUksWUFBWTtnQkFDbkUseURBQXlELENBQzVELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxVQUFVLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUQsT0FBTyxDQUFDLElBQUksQ0FDViw4Q0FBOEMsS0FBSyxDQUFDLElBQUksWUFBWTtnQkFDbEUscURBQXFELENBQ3hELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUQsT0FBTyxDQUFDLElBQUksQ0FDViw2Q0FBNkMsS0FBSyxDQUFDLElBQUksWUFBWTtnQkFDakUsb0RBQW9ELENBQ3ZELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxhQUFhLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEUsT0FBTyxDQUFDLElBQUksQ0FDVixpREFBaUQsS0FBSyxDQUFDLElBQUksWUFBWTtnQkFDckUsNERBQTRELENBQy9ELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUQsT0FBTyxDQUFDLElBQUksQ0FDViw2Q0FBNkMsS0FBSyxDQUFDLElBQUksWUFBWTtnQkFDakUsdURBQXVELENBQzFELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUQsT0FBTyxDQUFDLElBQUksQ0FDViw2Q0FBNkMsS0FBSyxDQUFDLElBQUksWUFBWTtnQkFDakUsdURBQXVELENBQzFELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxLQUFLLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEQsT0FBTyxDQUFDLElBQUksQ0FDVix5Q0FBeUMsS0FBSyxDQUFDLElBQUksWUFBWTtnQkFDN0QsZ0RBQWdELENBQ25ELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxVQUFVLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUQsT0FBTyxDQUFDLElBQUksQ0FDViw4Q0FBOEMsS0FBSyxDQUFDLElBQUksWUFBWTtnQkFDbEUsd0NBQXdDLENBQzNDLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxjQUFjLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEUsT0FBTyxDQUFDLElBQUksQ0FDVixrREFBa0QsS0FBSyxDQUFDLElBQUksWUFBWTtnQkFDdEUsNENBQTRDLENBQy9DLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDekIsZ0JBQWdCLENBQUMsS0FBd0IsQ0FBQyxDQUFDO0lBQzdDLENBQUM7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFzQjtJQUM5Qyx3QkFBd0I7SUFDeEIsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUN4RCxPQUFPLENBQUMsSUFBSSxDQUNWLDhFQUE4RTtZQUM1RSxrRUFBa0UsQ0FDckUsQ0FBQztJQUNKLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FDYiw2REFBNkQsQ0FDOUQsQ0FBQztJQUNKLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUN4QyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUN0RCxDQUFDO0lBQ0YsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEJBQTRCLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN0RSxDQUFDO0lBQ0osQ0FBQztJQUVELCtCQUErQjtJQUMvQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDL0MsQ0FBQztJQUNGLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksS0FBSyxDQUNiLDBCQUEwQixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQ3RFLHdGQUF3RixDQUMzRixDQUFDO0lBQ0osQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDcEQsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDbEMsQ0FBQztJQUVGLElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FDN0MsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FDNUMsQ0FBQztRQUNGLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUNiLGlGQUFpRjtnQkFDL0UsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUNuRCw0RUFBNEUsQ0FDL0UsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4RCw2RUFBNkU7WUFDN0UsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFVBQVU7aUJBQ3RDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsTUFBTSx1QkFBdUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUNuRCxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUN4RCxDQUFDO1lBQ0YsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQ2IsWUFBWSxPQUFPLENBQUMsSUFBSSxnQ0FBZ0M7b0JBQ3RELEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDeEQsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUNILE1BQWEsY0FBYztJQUN6QixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQVUsRUFBRSxLQUFvQjtRQUMzQyxPQUFPLENBQUMsR0FBUSxFQUFFLEtBQWdCLEVBQVcsRUFBRTtZQUM3QyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1QixNQUFNLFlBQVksR0FBa0I7Z0JBQ2xDLEdBQUc7b0JBQ0QsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUU7b0JBQ2pCLGFBQWEsRUFBRSxHQUFHLENBQUMsMkJBQTJCLEVBQUU7aUJBQ2pEO2dCQUNELEdBQUcsS0FBSzthQUNULENBQUM7WUFFRixPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBaEJELHdDQWdCQztBQUVELE1BQWEsT0FBUSxTQUFRLHNCQUFTO0lBU3BDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFvQjtRQUM3QixRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsTUFBTTtZQUNSLEtBQUssS0FBSztnQkFDUixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxQixNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsTUFBTTtZQUNSO2dCQUNFLG9FQUFvRTtnQkFDcEUsTUFBTSxXQUFXLEdBQVUsS0FBSyxDQUFDO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUNiLDZCQUE4QixXQUE2QixDQUFDLElBQUksRUFBRSxDQUNuRSxDQUFDO1FBQ04sQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsS0FBc0I7UUFDMUMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUM7UUFFakUsTUFBTSxRQUFRLEdBQUc7WUFDZixXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxTQUFTO1lBQ2hDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLFVBQVU7WUFDOUMsU0FBUztZQUNULFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQztZQUNuQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDO1lBQ25DLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztTQUNmLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksaUJBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDOUMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFzQjtRQUMxQyxNQUFNLGdCQUFnQixHQUNwQixLQUFLLENBQUMsZ0JBQWdCLElBQUksU0FBUyxDQUFDO1FBRXRDLG1FQUFtRTtRQUNuRSxNQUFNLFFBQVEsR0FBZ0MsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQzlELENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDVixrREFBa0Q7WUFDbEQsSUFBSSxVQUE2RCxDQUFDO1lBRWxFLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsd0RBQXdEO2dCQUN4RCxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNqRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ25FLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztvQkFDZCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7b0JBQ1osV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO29CQUMxQixhQUFhLEVBQUUsQ0FBQyxDQUFDLGFBQWE7b0JBQzlCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztvQkFDbEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO29CQUN4QixTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7b0JBQ3RCLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVztpQkFDM0IsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sdUNBQXVDO2dCQUN2QyxVQUFVLEdBQUc7b0JBQ1g7d0JBQ0UsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksV0FBVztxQkFDakM7aUJBQ0YsQ0FBQztZQUNKLENBQUM7WUFFRCwyQkFBMkI7WUFDM0IsSUFBSSxXQUFvQyxDQUFDO1lBQ3pDLElBQUksV0FBK0IsQ0FBQztZQUNwQyxJQUFJLFdBQStCLENBQUM7WUFFcEMsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvRCxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksaUJBQVcsQ0FBQyxHQUFHLENBQUM7Z0JBQzdELFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDMUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQzVDLENBQUM7aUJBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN6QyxtQ0FBbUM7Z0JBQ25DLFdBQVcsR0FBRyxpQkFBVyxDQUFDLEdBQUcsQ0FBQztZQUNoQyxDQUFDO1lBRUQsT0FBTztnQkFDTCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7Z0JBQ2xCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDcEIsVUFBVTtnQkFDVixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ2hCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztnQkFDdEMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2dCQUNsQyxXQUFXO2dCQUNYLFdBQVc7Z0JBQ1gsV0FBVztnQkFDWCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3hCLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxzQkFBc0I7Z0JBQ3RELHVCQUF1QixFQUFFLE9BQU8sQ0FBQyx1QkFBdUI7Z0JBQ3hELFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVzthQUNqQyxDQUFDO1FBQ0osQ0FBQyxDQUNGLENBQUM7UUFFRix1QkFBdUI7UUFDdkIsTUFBTSxPQUFPLEdBQStCLEtBQUssQ0FBQyxPQUFPO1lBQ3ZELENBQUMsQ0FBQztnQkFDRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUM1QixZQUFZLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZO2dCQUN4QyxZQUFZLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZO2dCQUN4QyxZQUFZLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZO2FBQ3pDO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLE1BQU0sUUFBUSxHQUFvQjtZQUNoQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxTQUFTO1lBQ2hDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLDBCQUEwQjtZQUNoRSxnQkFBZ0I7WUFDaEIsU0FBUyxFQUFFLGdCQUFnQixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNuRSxPQUFPO1lBQ1AsUUFBUTtTQUNULENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksYUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM5QyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBeUI7UUFDaEQsSUFBSSxJQUFVLENBQUM7UUFDZixJQUFJLE9BQWUsQ0FBQztRQUNwQixJQUFJLE9BQWdCLENBQUM7UUFFckIsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLG1DQUFtQztZQUNuQyxJQUFJLEtBQUssQ0FBQyxhQUFhLFlBQVksb0JBQVUsRUFBRSxDQUFDO2dCQUM5QyxJQUFJLEdBQUcsaUJBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtvQkFDNUMsV0FBVyxFQUFFLFFBQVE7aUJBQ3RCLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksS0FBSyxDQUNiLHFFQUFxRSxDQUN0RSxDQUFDO1lBQ0osQ0FBQztZQUVELGlEQUFpRDtZQUNqRCxPQUFPLEdBQUcsb0JBQU8sQ0FBQyxVQUFVLENBQUM7WUFDN0IsT0FBTyxHQUFHLG9CQUFPLENBQUMsVUFBVSxDQUFDO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ04sa0RBQWtEO1lBQ2xELElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ2xCLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQztZQUMzQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxvQkFBTyxDQUFDLFdBQVcsQ0FBQztRQUNqRCxDQUFDO1FBRUQscUVBQXFFO1FBQ3JFLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUM1QyxNQUFNLGlCQUFpQixHQUNyQixpQkFBaUIsS0FBSyxTQUFTLElBQUksaUJBQWlCLEtBQUssS0FBSyxDQUFDO1FBQ2pFLE1BQU0sbUJBQW1CLEdBQ3ZCLGlCQUFpQixJQUFJLE9BQU8saUJBQWlCLEtBQUssUUFBUTtZQUN4RCxDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUTtZQUM1QixDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hCLE1BQU0sZUFBZSxHQUNuQixpQkFBaUIsSUFBSSxPQUFPLGlCQUFpQixLQUFLLFFBQVE7WUFDeEQsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUk7WUFDeEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVoQixNQUFNLFdBQVcsR0FBRztZQUNsQixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU87WUFDUCxPQUFPO1lBQ1AsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixpQkFBaUIsRUFBRSxLQUFLLENBQUMsV0FBVztZQUNwQyxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7WUFDdEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRTtZQUN0QyxpQkFBaUI7WUFDakIsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7U0FDL0IsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSx1QkFBYyxDQUMvQixJQUFJLENBQUMsS0FBSyxFQUNWLEdBQUcsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUNsQixXQUFXLENBQ1osQ0FBQztRQUVGLGdFQUFnRTtRQUNoRSw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHFCQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUFoTkQsMEJBZ05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBSZXBvc2l0b3J5SW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNyXCI7XG5pbXBvcnQge1xuICBDb25uZWN0aW9ucyxcbiAgdHlwZSBJQ29ubmVjdGFibGUsXG4gIHR5cGUgSVZwYyxcbiAgdHlwZSBVc2VyRGF0YSxcbiAgdHlwZSBJTWFjaGluZUltYWdlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBSdW50aW1lLFxuICBIYW5kbGVyLFxuICB0eXBlIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb3JzT3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBQb2xpY3lTdGF0ZW1lbnQsXG4gIHR5cGUgUG9saWN5RG9jdW1lbnQsXG4gIHR5cGUgSU1hbmFnZWRQb2xpY3lcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcblxuaW1wb3J0IEVjc0NsdXN0ZXIsIHtcbiAgdHlwZSBFY3NDbHVzdGVyUHJvcHMsXG4gIFNjYWxpbmdUeXBlLFxuICB0eXBlIEVjc0NhcGFjaXR5UHJvdmlkZXIgYXMgRWNzQ2FwYWNpdHlQcm92aWRlclR5cGUsXG4gIHR5cGUgRG9tYWluQ29uZmlnXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWNzXCI7XG5pbXBvcnQgeyBFYzJJbnN0YW5jZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWMyXCI7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvbGFtYmRhXCI7XG5pbXBvcnQgeyB0eXBlIFNlY3JldEltcG9ydCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcblxuZXhwb3J0IHR5cGUgQ29tcHV0ZVR5cGUgPSBcImVjc1wiIHwgXCJlYzJcIiB8IFwibGFtYmRhXCI7XG5leHBvcnQgdHlwZSBFY3NDYXBhY2l0eVByb3ZpZGVyID0gXCJGQVJHQVRFXCIgfCBcIkZBUkdBVEVfU1BPVFwiIHwgXCJFQzJcIjtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGRlZmF1bHRzIGZvciBlYWNoIGNvbXB1dGUgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlVHlwZUNvbmZpZyB7XG4gIC8qKiBEZWZhdWx0IHBvcnQgZm9yIHRoZSBjb21wdXRlIHR5cGUuIEVDUzogODAsIEVDMjogMjIsIExhbWJkYTogMCAobm8gcG9ydCkgKi9cbiAgZGVmYXVsdFBvcnQ6IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgc2NhbGluZyBsaW1pdHMgKi9cbiAgZGVmYXVsdFNjYWxpbmc6IHtcbiAgICBtaW5DYXBhY2l0eTogbnVtYmVyO1xuICAgIG1heENhcGFjaXR5OiBudW1iZXI7XG4gIH07XG4gIC8qKiBXaGV0aGVyIHRoaXMgY29tcHV0ZSB0eXBlIHN1cHBvcnRzIHNlY3VyaXR5IGdyb3VwIGNvbm5lY3Rpb25zICovXG4gIHN1cHBvcnRzQ29ubmVjdGlvbnM6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoaXMgY29tcHV0ZSB0eXBlIHJlcXVpcmVzIGEgVlBDICovXG4gIHJlcXVpcmVzVnBjOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQ09NUFVURV9UWVBFX0NPTkZJRzogUmVjb3JkPENvbXB1dGVUeXBlLCBDb21wdXRlVHlwZUNvbmZpZz4gPSB7XG4gIGVjczoge1xuICAgIGRlZmF1bHRQb3J0OiA4MCxcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDUgfSxcbiAgICBzdXBwb3J0c0Nvbm5lY3Rpb25zOiB0cnVlLFxuICAgIHJlcXVpcmVzVnBjOiB0cnVlXG4gIH0sXG4gIGVjMjoge1xuICAgIGRlZmF1bHRQb3J0OiAyMixcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDMgfSxcbiAgICBzdXBwb3J0c0Nvbm5lY3Rpb25zOiB0cnVlLFxuICAgIHJlcXVpcmVzVnBjOiB0cnVlXG4gIH0sXG4gIGxhbWJkYToge1xuICAgIGRlZmF1bHRQb3J0OiAwLFxuICAgIGRlZmF1bHRTY2FsaW5nOiB7IG1pbkNhcGFjaXR5OiAwLCBtYXhDYXBhY2l0eTogMTAwIH0sXG4gICAgc3VwcG9ydHNDb25uZWN0aW9uczogZmFsc2UsXG4gICAgcmVxdWlyZXNWcGM6IGZhbHNlXG4gIH1cbn07XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgRUNTIGNhcGFjaXR5IHByb3ZpZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NDYXBhY2l0eVByb3ZpZGVyQ29uZmlnIHtcbiAgLyoqIFdoZXRoZXIgdGhpcyB1c2VzIFNwb3QgcHJpY2luZyAqL1xuICB1c2VzU3BvdDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBydW5zIG9uIEVDMiBpbnN0YW5jZXMgKHZzIHNlcnZlcmxlc3MgRmFyZ2F0ZSkgKi9cbiAgdXNlc0VjMkluc3RhbmNlczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEVDU19DQVBBQ0lUWV9QUk9WSURFUl9DT05GSUc6IFJlY29yZDxcbiAgRWNzQ2FwYWNpdHlQcm92aWRlcixcbiAgRWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZ1xuPiA9IHtcbiAgRkFSR0FURToge1xuICAgIHVzZXNTcG90OiBmYWxzZSxcbiAgICB1c2VzRWMySW5zdGFuY2VzOiBmYWxzZVxuICB9LFxuICBGQVJHQVRFX1NQT1Q6IHtcbiAgICB1c2VzU3BvdDogdHJ1ZSxcbiAgICB1c2VzRWMySW5zdGFuY2VzOiBmYWxzZVxuICB9LFxuICBFQzI6IHtcbiAgICB1c2VzU3BvdDogZmFsc2UsXG4gICAgdXNlc0VjMkluc3RhbmNlczogdHJ1ZVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcHV0ZVR5cGVDb25maWcodHlwZTogQ29tcHV0ZVR5cGUpOiBDb21wdXRlVHlwZUNvbmZpZyB7XG4gIHJldHVybiBDT01QVVRFX1RZUEVfQ09ORklHW3R5cGVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyhcbiAgcHJvdmlkZXI6IEVjc0NhcGFjaXR5UHJvdmlkZXJcbik6IEVjc0NhcGFjaXR5UHJvdmlkZXJDb25maWcge1xuICByZXR1cm4gRUNTX0NBUEFDSVRZX1BST1ZJREVSX0NPTkZJR1twcm92aWRlcl07XG59XG5cbi8vIFJlLWV4cG9ydCBMYW1iZGEgdHlwZXMgZnJvbSBDREsgZm9yIHVzZXIgY29udmVuaWVuY2VcbmV4cG9ydCB7XG4gIEh0dHBNZXRob2QsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb3JzT3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgY29udGFpbmVyIGluIGFuIEVDUyB0YXNrLlxuICpcbiAqIEZvciBzaW5nbGUtY29udGFpbmVyIHNlcnZpY2VzLCBgbmFtZWAgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIGAke3NlcnZpY2VOYW1lfUNvbnRhaW5lcmAuXG4gKiBGb3IgbXVsdGktY29udGFpbmVyIHRhc2tzLCB0aGUgZmlyc3QgY29udGFpbmVyIHdpdGggYSBgcG9ydGAgaXMgdGhlICoqcHJpbWFyeSBjb250YWluZXIqKlxuICogdGhhdCByZWNlaXZlcyBsb2FkIGJhbGFuY2VyIHRyYWZmaWMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbmdsZSBjb250YWluZXIgKG5hbWUgYXV0by1nZW5lcmF0ZWQpXG4gKiBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE11bHRpLWNvbnRhaW5lciB3aXRoIHNpZGVjYXJzXG4gKiBjb250YWluZXJzOiBbXG4gKiAgIHsgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9LCAgICAgICAgICAgICAgICAgICAgLy8gUHJpbWFyeSAtIHJlY2VpdmVzIEFMQiB0cmFmZmljXG4gKiAgIHsgbmFtZTogXCJkYXRhZG9nXCIsIGltYWdlOiBcImRhdGFkb2cvYWdlbnRcIiB9ICAgICAvLyBTaWRlY2FyIC0gbW9uaXRvcmluZ1xuICogXVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc0NvbnRhaW5lckNvbmZpZyB7XG4gIC8qKiBDb250YWluZXIgbmFtZS4gT3B0aW9uYWwgZm9yIHNpbmdsZS1jb250YWluZXIgc2VydmljZXMuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb250YWluZXIgaW1hZ2UuIE9wdGlvbnM6XG4gICAqIC0gT21pdDogVXNlcyBhcHAncyBkZWZhdWx0IEVDUiByZXBvc2l0b3J5IChwcmltYXJ5IGNvbnRhaW5lciBvbmx5KVxuICAgKiAtIHN0cmluZzogRUNSIHJlcG9zaXRvcnkgbmFtZSBvciBwdWJsaWMgaW1hZ2UgVVJMXG4gICAqIC0gUmVwb3NpdG9yeTogQ0RLIEVDUiBSZXBvc2l0b3J5IGNvbnN0cnVjdFxuICAgKi9cbiAgaW1hZ2U/OiBzdHJpbmcgfCBSZXBvc2l0b3J5O1xuICAvKipcbiAgICogUG9ydCB0aGUgY29udGFpbmVyIGxpc3RlbnMgb24uXG4gICAqIFRoZSBmaXJzdCBjb250YWluZXIgd2l0aCBhIHBvcnQgYmVjb21lcyB0aGUgKipwcmltYXJ5IGNvbnRhaW5lcioqXG4gICAqIGFuZCBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuXG4gICAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogRW52aXJvbm1lbnQgdmFyaWFibGVzICovXG4gIGVudmlyb25tZW50PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFNlY3JldHMgaW1wb3J0ZWQgZnJvbSBvdGhlciByZXNvdXJjZXMgKi9cbiAgc2VjcmV0c0ltcG9ydD86IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD47XG4gIC8qKiBDb21tYW5kIHRvIHJ1biBpbiB0aGUgY29udGFpbmVyICovXG4gIGNvbW1hbmQ/OiBzdHJpbmdbXTtcbiAgLyoqIEVudHJ5IHBvaW50IGZvciB0aGUgY29udGFpbmVyICovXG4gIGVudHJ5UG9pbnQ/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBjb250YWluZXIgaXMgZXNzZW50aWFsLlxuICAgKiBJZiBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHN0b3BzLCBhbGwgY29udGFpbmVycyBpbiB0aGUgdGFzayBzdG9wLlxuICAgKiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICBlc3NlbnRpYWw/OiBib29sZWFuO1xuICAvKipcbiAgICogSGVhbHRoIGNoZWNrIGNvbmZpZ3VyYXRpb24uXG4gICAqIERlZmF1bHQ6IEZvciBwcmltYXJ5IGNvbnRhaW5lciB3aXRoIHBvcnQsIHVzZXMgY3VybCBoZWFsdGggY2hlY2suXG4gICAqL1xuICBoZWFsdGhDaGVjaz86IHtcbiAgICBjb21tYW5kOiBzdHJpbmdbXTtcbiAgICBpbnRlcnZhbD86IG51bWJlcjtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIHJldHJpZXM/OiBudW1iZXI7XG4gICAgc3RhcnRQZXJpb2Q/OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKlxuICogRUNTIHNjYWxpbmcgY29uZmlndXJhdGlvbi5cbiAqIC0gT21pdDogZW5hYmxlZCB3aXRoIGRlZmF1bHRzXG4gKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICogLSBgeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDEwIH1gOiBjdXN0b20gc2NhbGluZ1xuICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzU2NhbGluZ0NvbmZpZyB7XG4gIG1pbkNhcGFjaXR5PzogbnVtYmVyO1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgc2NhbGluZ1R5cGU/OiBTY2FsaW5nVHlwZTtcbn1cblxuLyoqXG4gKiBFQzIgY2FwYWNpdHkgY29uZmlndXJhdGlvbiBmb3IgRUNTIEVDMi1iYWNrZWQgY2x1c3RlcnMuXG4gKiBPbmx5IHVzZWQgd2hlbiBjYXBhY2l0eVByb3ZpZGVyIGlzIFwiRUMyXCIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWMyQ2FwYWNpdHlDb25maWcge1xuICAvKiogRUMyIGluc3RhbmNlIHR5cGUuIERlZmF1bHQ6IFwidDMubWljcm9cIiAqL1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG4gIC8qKiBBTUkgaGFyZHdhcmUgdHlwZS4gRGVmYXVsdDogXCJBUk1cIiAoR3Jhdml0b24gLSBiZXR0ZXIgY29zdC9wZXJmb3JtYW5jZSkgKi9cbiAgYW1pSGFyZHdhcmVUeXBlPzogXCJBUk1cIiB8IFwiU1RBTkRBUkRcIjtcbiAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtaW5DYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMyAqL1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIERlc2lyZWQgbnVtYmVyIG9mIEVDMiBpbnN0YW5jZXMuIERlZmF1bHQ6IDIgKGZvciBhdmFpbGFiaWxpdHkpICovXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcbiAgLyoqIE1lbW9yeSBsaW1pdCBpbiBNaUIgZm9yIHRoZSBjb250YWluZXIuIERlZmF1bHQ6IDEwMjQgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ2x1c3Rlci1sZXZlbCBjb25maWd1cmF0aW9uLlxuICogQ29udHJvbHMgdGhlIHNoYXJlZCBBTEIgZm9yIGFsbCBzZXJ2aWNlcyBpbiB0aGlzIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ2x1c3RlckNvbmZpZyB7XG4gIC8qKlxuICAgKiBEb21haW4gZm9yIEhUVFBTIGFjY2Vzcy5cbiAgICogLSBPbWl0OiBBTEIgY3JlYXRlZCB3aXRoIGRlZmF1bHQgRE5TICgqLmVsYi5hbWF6b25hd3MuY29tKVxuICAgKiAtIFNwZWNpZmllZDogQ3JlYXRlcyBBQ00gY2VydGlmaWNhdGUgKyBSb3V0ZTUzIEROUyBBIHJlY29yZFxuICAgKi9cbiAgZG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2FkIGJhbGFuY2VyIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT21pdCBvciBcInB1YmxpY1wiOiBJbnRlcm5ldC1mYWNpbmcgQUxCIChkZWZhdWx0KVxuICAgKiAtIFwiaW50ZXJuYWxcIjogVlBDLW9ubHkgQUxCXG4gICAqIC0gZmFsc2U6IE5vIEFMQiAoZm9yIHdvcmtlcnMvYmFja2dyb3VuZCBwcm9jZXNzb3JzKVxuICAgKi9cbiAgbG9hZEJhbGFuY2VyPzogZmFsc2UgfCBcInB1YmxpY1wiIHwgXCJpbnRlcm5hbFwiO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgZGlyZWN0IEVDMiBhY2Nlc3Mgd2l0aG91dCBBTEIuXG4gICAqIFVzZXMgaG9zdCBuZXR3b3JrIG1vZGUgZm9yIHByZWRpY3RhYmxlIHBvcnRzLlxuICAgKiBBY2Nlc3MgdmlhIEVDMiBwdWJsaWMgSVAgYXQgY29udGFpbmVyIHBvcnQuXG4gICAqL1xuICBkaXJlY3RBY2Nlc3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZHZhbmNlZCBkb21haW4gY29uZmlndXJhdGlvbiBmb3Igcm91dGluZyBwb2xpY2llcyAobGF0ZW5jeSwgd2VpZ2h0ZWQsIGdlbykuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGRvbWFpbiBpcyBzcGVjaWZpZWQuXG4gICAqIEFsbG93cyBmb3IgbXVsdGktcmVnaW9uIGRlcGxveW1lbnRzIHdpdGggYWR2YW5jZWQgRE5TIHJvdXRpbmcuXG4gICAqL1xuICBkb21haW5Db25maWc/OiBEb21haW5Db25maWc7XG59XG5cbi8qKlxuICogUm91dGluZyBjb25maWd1cmF0aW9uIGZvciBwYXRoL2hvc3QtYmFzZWQgcm91dGluZyBvbiB0aGUgQUxCLlxuICogUmVxdWlyZWQgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIHBvcnRzLlxuICogT3B0aW9uYWwgZm9yIHNpbmdsZSBzZXJ2aWNlIChnZXRzIGFsbCB0cmFmZmljIGF1dG9tYXRpY2FsbHkpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc1JvdXRpbmdDb25maWcge1xuICAvKipcbiAgICogUGF0aCBwYXR0ZXJuIGZvciByb3V0aW5nIChlLmcuLCBcIi9hcGkvKlwiLCBcIi91c2Vycy8qXCIpLlxuICAgKiBVc2VzIEFMQiBwYXRoLWJhc2VkIHJvdXRpbmcuXG4gICAqL1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3N0IGhlYWRlciBmb3Igcm91dGluZyAoZS5nLiwgXCJhcGkuZXhhbXBsZS5jb21cIikuXG4gICAqIFVzZXMgQUxCIGhvc3QtYmFzZWQgcm91dGluZy5cbiAgICovXG4gIGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaW9yaXR5IGZvciB0aGlzIHJvdXRpbmcgcnVsZSAoMS01MDAwMCkuXG4gICAqIExvd2VyIG51bWJlciA9IGhpZ2hlciBwcmlvcml0eS5cbiAgICogQXV0by1hc3NpZ25lZCBpZiBvbWl0dGVkLlxuICAgKi9cbiAgcHJpb3JpdHk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlYWx0aCBjaGVjayBwYXRoIGZvciB0aGlzIHNlcnZpY2UncyB0YXJnZXQgZ3JvdXAuXG4gICAqIERlZmF1bHQ6IFwiL1wiXG4gICAqL1xuICBoZWFsdGhDaGVja1BhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYSBzZXJ2aWNlIGluIGFuIEVDUyBjbHVzdGVyLlxuICogRWFjaCBzZXJ2aWNlIGdldHMgaXRzIG93biB0YXNrIGRlZmluaXRpb24sIHNjYWxpbmcgY29uZmlnLCBhbmQgdGFyZ2V0IGdyb3VwLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTaW1wbGUgc2VydmljZVxuICogeyBuYW1lOiBcImFwaVwiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2VydmljZSB3aXRoIHJvdXRpbmcgKGZvciBtdWx0aS1zZXJ2aWNlIGNsdXN0ZXJzKVxuICogeyBuYW1lOiBcInVzZXJzXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvdXNlcnMvKlwiLCBwcmlvcml0eTogMTAwIH0gfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXJ2aWNlIHdpdGggc2lkZWNhcnNcbiAqIHtcbiAqICAgbmFtZTogXCJhcGlcIixcbiAqICAgY29udGFpbmVyczogW1xuICogICAgIHsgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9LFxuICogICAgIHsgbmFtZTogXCJkYXRhZG9nXCIsIGltYWdlOiBcImRhdGFkb2cvYWdlbnRcIiB9XG4gKiAgIF1cbiAqIH1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NTZXJ2aWNlQ29uZmlnIHtcbiAgLyoqIFNlcnZpY2UgbmFtZSAodW5pcXVlIHdpdGhpbiBjbHVzdGVyKSAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZSBmb3IgdGhpcyBzZXJ2aWNlIChhcHBsaWVzIHRvIGZpcnN0IGNvbnRhaW5lciB3aXRob3V0IGV4cGxpY2l0IGltYWdlKS5cbiAgICogLSBPbWl0OiBVc2VzIGFwcCdzIGRlZmF1bHQgRUNSIHJlcG9zaXRvcnlcbiAgICogLSBzdHJpbmc6IEVDUiByZXBvc2l0b3J5IG5hbWUgb3IgcHVibGljIGltYWdlIFVSTFxuICAgKiAtIFJlcG9zaXRvcnk6IENESyBFQ1IgUmVwb3NpdG9yeSBjb25zdHJ1Y3RcbiAgICovXG4gIGltYWdlPzogc3RyaW5nIHwgUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGNvbmZpZ3VyYXRpb24ocykgZm9yIHRoaXMgc2VydmljZS5cbiAgICogRm9yIHNpbmdsZS1jb250YWluZXIgc2VydmljZXMsIGNvbnRhaW5lciBuYW1lIGlzIG9wdGlvbmFsIGFuZCBhdXRvLWdlbmVyYXRlZC5cbiAgICogRm9yIG11bHRpLWNvbnRhaW5lciBzZXJ2aWNlcywgdGhlIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgcG9ydCBpcyB0aGUgcHJpbWFyeSBjb250YWluZXIuXG4gICAqL1xuICBjb250YWluZXJzPzogRWNzQ29udGFpbmVyQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIFJvdXRpbmcgcnVsZXMgZm9yIHRoaXMgc2VydmljZSBvbiB0aGUgY2x1c3RlcidzIEFMQi5cbiAgICogUmVxdWlyZWQgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIHBvcnRzLlxuICAgKiBPcHRpb25hbCBmb3Igc2luZ2xlIHNlcnZpY2UgKGdldHMgLyogYXV0b21hdGljYWxseSkuXG4gICAqL1xuICByb3V0aW5nPzogRWNzUm91dGluZ0NvbmZpZztcblxuICAvKiogQ1BVIHVuaXRzIGZvciB0aGlzIHNlcnZpY2UncyB0YXNrcyAoMjU2LTQwOTYpICovXG4gIGNwdT86IG51bWJlcjtcblxuICAvKiogTWVtb3J5IGluIE1pQiBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFza3MgKDUxMi0zMDcyMCkgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG5cbiAgLyoqIERlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLiBEZWZhdWx0OiAyICovXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogU2NhbGluZyBjb25maWd1cmF0aW9uLlxuICAgKiAtIE9taXQ6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICAgKiAtIGZhbHNlOiBkaXNhYmxlZFxuICAgKi9cbiAgc2NhbGluZz86IEVjc1NjYWxpbmdDb25maWcgfCBmYWxzZTtcblxuICAvKipcbiAgICogUGF0aCB0byBEb2NrZXJmaWxlIGZvciBidWlsZGluZyB0aGlzIHNlcnZpY2UncyBpbWFnZS5cbiAgICogTWV0YWRhdGEgZm9yIENMSSBidWlsZCBwcm9jZXNzLCBub3QgdXNlZCBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAgICovXG4gIGRvY2tlcmZpbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGlubGluZSBwb2xpY2llcyBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFzayByb2xlLlxuICAgKiBBZGRlZCBvbiB0b3Agb2YgdGhlIGRlZmF1bHQgRUNTIEV4ZWMgcGVybWlzc2lvbnMuXG4gICAqIFVzZSBmb3Igc2VydmljZS1zcGVjaWZpYyBBV1MgcGVybWlzc2lvbnMgKFMzLCBEeW5hbW9EQiwgU1FTLCBldGMuKS5cbiAgICovXG4gIHRhc2tSb2xlSW5saW5lUG9saWNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBQb2xpY3lEb2N1bWVudD47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWFuYWdlZCBwb2xpY2llcyBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFzayByb2xlLlxuICAgKiBBZGRlZCBvbiB0b3Agb2YgdGhlIGRlZmF1bHQgRUNTIEV4ZWMgcGVybWlzc2lvbnMuXG4gICAqL1xuICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llcz86IElNYW5hZ2VkUG9saWN5W107XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGlzIHNlcnZpY2UgbmVlZHMgdG8gY29ubmVjdCB0byAoZS5nLiwgZGF0YWJhc2VzKS5cbiAgICogQ3JlYXRlcyBzZWN1cml0eSBncm91cCBydWxlcyB0byBhbGxvdyB0cmFmZmljIGZyb20gdGhpcyBzZXJ2aWNlLlxuICAgKiBGb2xsb3dzIGxlYXN0LXByaXZpbGVnZSAtIG9ubHkgdGhpcyBzZXJ2aWNlIGdldHMgYWNjZXNzLCBub3QgYWxsIHNlcnZpY2VzIGluIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBPbmx5IGJhY2tlbmQgc2VydmljZSBjb25uZWN0cyB0byBkYXRhYmFzZVxuICAgKiBzZXJ2aWNlczogW1xuICAgKiAgIHsgbmFtZTogXCJmcm9udGVuZFwiIH0sXG4gICAqICAgeyBuYW1lOiBcImJhY2tlbmRcIiwgY29ubmVjdGlvbnM6IFthcHBEYXRhYmFzZV0gfVxuICAgKiBdXG4gICAqL1xuICBjb25uZWN0aW9ucz86IElDb25uZWN0YWJsZVtdO1xufVxuXG4vKipcbiAqIFNTSCBhY2Nlc3MgY29uZmlndXJhdGlvbiBmb3IgRUMyIGluc3RhbmNlcy5cbiAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBhdXRvLWdlbmVyYXRlZCBrZXlcbiAqIC0gYHsga2V5TmFtZTogXCJteS1rZXlcIiB9YDogZW5hYmxlZCB3aXRoIGV4aXN0aW5nIGtleVxuICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3NoQ29uZmlnIHtcbiAgLyoqIFNTSCBrZXkgcGFpciBuYW1lICovXG4gIGtleU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBBbGxvd2VkIENJRFIgYmxvY2tzIGZvciBTU0ggYWNjZXNzICovXG4gIGFsbG93ZWRDaWRycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIExhbWJkYSBmdW5jdGlvbiBVUkwgY29uZmlndXJhdGlvbi5cbiAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBJQU0gYXV0aFxuICogLSBgeyBhdXRoVHlwZTogXCJOT05FXCIsIGNvcnM6IHsuLi59IH1gOiBwdWJsaWMgd2l0aCBDT1JTXG4gKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvblVybENvbmZpZyB7XG4gIC8qKiBBdXRoZW50aWNhdGlvbiB0eXBlLiBEZWZhdWx0OiBBV1NfSUFNICovXG4gIGF1dGhUeXBlPzogRnVuY3Rpb25VcmxBdXRoVHlwZTtcbiAgLyoqIENPUlMgY29uZmlndXJhdGlvbiAqL1xuICBjb3JzPzogRnVuY3Rpb25VcmxDb3JzT3B0aW9ucztcbn1cblxuaW50ZXJmYWNlIEJhc2VDb21wdXRlUHJvcHMge1xuICB2cGM/OiBJVnBjO1xufVxuXG4vKipcbiAqIEVDUyBjb21wdXRlIGNvbmZpZ3VyYXRpb24uXG4gKiBDcmVhdGVzIGFuIEVDUyBjbHVzdGVyIHdpdGggb25lIG9yIG1vcmUgc2VydmljZXMgc2hhcmluZyBhIGxvYWQgYmFsYW5jZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbmdsZSBzZXJ2aWNlXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldlYkFwcFwiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgZG9tYWluOiBcImFwcC5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIHNlcnZpY2VzOiBbeyBuYW1lOiBcIndlYlwiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dIH1dXG4gKiB9KSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE11bHRpLXNlcnZpY2UgY2x1c3RlciB3aXRoIHJvdXRpbmdcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiQXBpQ2x1c3RlclwiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgZG9tYWluOiBcImFwaS5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIHNlcnZpY2VzOiBbXG4gKiAgICAgeyBuYW1lOiBcInVzZXJzXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvdXNlcnMvKlwiIH0gfSxcbiAqICAgICB7IG5hbWU6IFwib3JkZXJzXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDEgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvb3JkZXJzLypcIiB9IH1cbiAqICAgXVxuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbnRlcm5hbCB3b3JrZXJzIChubyBBTEIpXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldvcmtlcnNcIiwge1xuICogICB0eXBlOiBcImVjc1wiLFxuICogICBjbHVzdGVyOiB7IGxvYWRCYWxhbmNlcjogZmFsc2UgfSxcbiAqICAgc2VydmljZXM6IFt7IG5hbWU6IFwicHJvY2Vzc29yXCIgfSwgeyBuYW1lOiBcImVtYWlsZXJcIiB9XVxuICogfSkpO1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc0NvbXB1dGVQcm9wcyBleHRlbmRzIEJhc2VDb21wdXRlUHJvcHMge1xuICB0eXBlOiBcImVjc1wiO1xuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqIENvbnRyb2xzIHRoZSBzaGFyZWQgQUxCIGZvciBhbGwgc2VydmljZXMgaW4gdGhpcyBjbHVzdGVyLlxuICAgKiAtIE9taXQ6IEFMQiBjcmVhdGVkIHdpdGggZGVmYXVsdCBzZXR0aW5nc1xuICAgKiAtIGB7IGRvbWFpbjogXCIuLi5cIiB9YDogQUxCIHdpdGggSFRUUFMgKyBETlNcbiAgICogLSBgeyBsb2FkQmFsYW5jZXI6IGZhbHNlIH1gOiBObyBBTEIgKGludGVybmFsIHdvcmtlcnMpXG4gICAqL1xuICBjbHVzdGVyPzogRWNzQ2x1c3RlckNvbmZpZztcblxuICAvKipcbiAgICogU2VydmljZXMgaW4gdGhpcyBjbHVzdGVyLlxuICAgKiBFYWNoIHNlcnZpY2UgZ2V0cyBpdHMgb3duIHRhc2sgZGVmaW5pdGlvbiwgc2NhbGluZywgYW5kIHRhcmdldCBncm91cC5cbiAgICogQWxsIHNlcnZpY2VzIHNoYXJlIHRoZSBjbHVzdGVyJ3MgQUxCICh1bmxlc3MgZGlzYWJsZWQpLlxuICAgKi9cbiAgc2VydmljZXM6IEVjc1NlcnZpY2VDb25maWdbXTtcblxuICAvKipcbiAgICogQ2FwYWNpdHkgcHJvdmlkZXIgZGV0ZXJtaW5lcyBpbmZyYXN0cnVjdHVyZSB0eXBlLlxuICAgKiAtIFwiRkFSR0FURVwiOiBTZXJ2ZXJsZXNzIGNvbnRhaW5lcnMgKGRlZmF1bHQpXG4gICAqIC0gXCJGQVJHQVRFX1NQT1RcIjogU2VydmVybGVzcyB3aXRoIFNwb3QgcHJpY2luZ1xuICAgKiAtIFwiRUMyXCI6IEVDMi1iYWNrZWQgY29udGFpbmVyc1xuICAgKi9cbiAgY2FwYWNpdHlQcm92aWRlcj86IEVjc0NhcGFjaXR5UHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEVDMiBjYXBhY2l0eSBjb25maWd1cmF0aW9uLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBjYXBhY2l0eVByb3ZpZGVyIGlzIFwiRUMyXCIuXG4gICAqL1xuICBlYzJDb25maWc/OiBFYzJDYXBhY2l0eUNvbmZpZztcblxuICAvKipcbiAgICogRUNSIHJlcG9zaXRvcnkgZm9yIGFsbCBzZXJ2aWNlcyAoZGVmYXVsdCBpbWFnZSkuXG4gICAqIEluZGl2aWR1YWwgc2VydmljZXMgY2FuIG92ZXJyaWRlIHdpdGggdGhlaXIgb3duIGBpbWFnZWAgcHJvcGVydHkuXG4gICAqL1xuICBlY3JSZXBvc2l0b3J5PzogUmVwb3NpdG9yeSB8IFJlcG9zaXRvcnlJbWFnZTtcblxuICAvKipcbiAgICogUGF0aCB0byBEb2NrZXJmaWxlIGZvciBidWlsZGluZyBjdXN0b20gaW1hZ2UuXG4gICAqIE5vdGU6IFRoaXMgaXMgbWV0YWRhdGEgZm9yIHRoZSBDTEkgYnVpbGQgcHJvY2VzcyxcbiAgICogbm90IHVzZWQgZHVyaW5nIENESyBzeW50aGVzaXMuXG4gICAqL1xuICBkb2NrZXJmaWxlUGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFYzJDb21wdXRlUHJvcHMgZXh0ZW5kcyBCYXNlQ29tcHV0ZVByb3BzIHtcbiAgdHlwZTogXCJlYzJcIjtcblxuICAvKiogRUMyIGluc3RhbmNlIHR5cGUuIERlZmF1bHQ6IFwidDMubWljcm9cIiAqL1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNTSCBhY2Nlc3MgY29uZmlndXJhdGlvbi5cbiAgICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAgICogLSBge31gOiBlbmFibGVkIHdpdGggZGVmYXVsdHNcbiAgICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAqL1xuICBzc2g/OiBTc2hDb25maWcgfCBmYWxzZTtcbiAgLyoqIFVzZXIgZGF0YSBzY3JpcHQgKi9cbiAgdXNlckRhdGE/OiBVc2VyRGF0YTtcbiAgLyoqIE1hY2hpbmUgaW1hZ2UgKEFNSSkgKi9cbiAgbWFjaGluZUltYWdlPzogSU1hY2hpbmVJbWFnZTtcbiAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtaW5DYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcy4gRGVmYXVsdDogMSAqL1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCYXNlIExhbWJkYSBjb25maWd1cmF0aW9uIHNoYXJlZCBieSBib3RoIGNvbnRhaW5lciBhbmQgY29kZSBkZXBsb3ltZW50cy5cbiAqL1xuaW50ZXJmYWNlIEJhc2VMYW1iZGFQcm9wcyBleHRlbmRzIEJhc2VDb21wdXRlUHJvcHMge1xuICB0eXBlOiBcImxhbWJkYVwiO1xuICAvKiogVGltZW91dCBpbiBzZWNvbmRzLiBEZWZhdWx0OiAzICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBNZW1vcnkgc2l6ZSBpbiBNQi4gRGVmYXVsdDogMTI4ICovXG4gIG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIC8qKiBMYW1iZGEgZnVuY3Rpb24gZGVzY3JpcHRpb24gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBkZXNjcmlwdGlvbiAqL1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBJbmxpbmUgSUFNIHBvbGljeSBzdGF0ZW1lbnRzICovXG4gIGlubGluZVBvbGljeT86IFBvbGljeVN0YXRlbWVudFtdO1xuICAvKipcbiAgICogRnVuY3Rpb24gVVJMIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gICAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIElBTSBhdXRoXG4gICAqIC0gYHsgYXV0aFR5cGU6IFwiTk9ORVwiIH1gOiBwdWJsaWMgYWNjZXNzXG4gICAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICAgKi9cbiAgZnVuY3Rpb25Vcmw/OiBGdW5jdGlvblVybENvbmZpZyB8IGZhbHNlO1xuICAvKiogRW52aXJvbm1lbnQgdmFyaWFibGVzICovXG4gIGVudmlyb25tZW50PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBDb250YWluZXItYmFzZWQgTGFtYmRhIHVzaW5nIEVDUiBpbWFnZS5cbiAqXG4gKiBVc2VzIERvY2tlciBpbWFnZSBmcm9tIEVDUiByZXBvc2l0b3J5LiBIYW5kbGVyIGFuZCBydW50aW1lIGFyZVxuICogYXV0b21hdGljYWxseSBzZXQgdG8gRlJPTV9JTUFHRS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJJbWFnZUxhbWJkYVwiLCB7XG4gKiAgIHR5cGU6IFwibGFtYmRhXCIsXG4gKiAgIGRlcGxveW1lbnQ6IFwiY29udGFpbmVyXCIsXG4gKiAgIGVjclJlcG9zaXRvcnk6IGFwcC5nZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKVxuICogfSkpO1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckxhbWJkYVByb3BzIGV4dGVuZHMgQmFzZUxhbWJkYVByb3BzIHtcbiAgLyoqIENvbnRhaW5lci1iYXNlZCBkZXBsb3ltZW50IHVzaW5nIEVDUiBpbWFnZSAqL1xuICBkZXBsb3ltZW50OiBcImNvbnRhaW5lclwiO1xuICAvKiogRUNSIHJlcG9zaXRvcnkgY29udGFpbmluZyB0aGUgTGFtYmRhIGNvbnRhaW5lciBpbWFnZSAqL1xuICBlY3JSZXBvc2l0b3J5OiBSZXBvc2l0b3J5IHwgUmVwb3NpdG9yeUltYWdlO1xufVxuXG4vKipcbiAqIENvZGUtYmFzZWQgTGFtYmRhIHVzaW5nIGlubGluZSBjb2RlIG9yIFMzLlxuICpcbiAqIFVzZXMgdHJhZGl0aW9uYWwgTGFtYmRhIGRlcGxveW1lbnQgd2l0aCBjb2RlLCBoYW5kbGVyLCBhbmQgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJDb2RlTGFtYmRhXCIsIHtcbiAqICAgdHlwZTogXCJsYW1iZGFcIixcbiAqICAgZGVwbG95bWVudDogXCJjb2RlXCIsXG4gKiAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFwiLi9sYW1iZGFcIiksXG4gKiAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICogICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUxhbWJkYVByb3BzIGV4dGVuZHMgQmFzZUxhbWJkYVByb3BzIHtcbiAgLyoqIENvZGUtYmFzZWQgZGVwbG95bWVudCAqL1xuICBkZXBsb3ltZW50OiBcImNvZGVcIjtcbiAgLyoqIExhbWJkYSBjb2RlIChmcm9tIGFzc2V0LCBTMywgb3IgaW5saW5lKSAqL1xuICBjb2RlOiBDb2RlO1xuICAvKiogSGFuZGxlciBmdW5jdGlvbi4gRGVmYXVsdDogXCJpbmRleC5oYW5kbGVyXCIgKi9cbiAgaGFuZGxlcj86IHN0cmluZztcbiAgLyoqIExhbWJkYSBydW50aW1lLiBEZWZhdWx0OiBOT0RFSlNfMThfWCAqL1xuICBydW50aW1lPzogUnVudGltZTtcbn1cblxuLyoqXG4gKiBMYW1iZGEgY29tcHV0ZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24gZW5zdXJpbmcgdHlwZS1zYWZlIExhbWJkYSBjb25maWd1cmF0aW9uOlxuICogLSBgZGVwbG95bWVudDogXCJjb250YWluZXJcImAgcmVxdWlyZXMgYGVjclJlcG9zaXRvcnlgXG4gKiAtIGBkZXBsb3ltZW50OiBcImNvZGVcImAgcmVxdWlyZXMgYGNvZGVgIGFuZCBhbGxvd3MgYGhhbmRsZXJgL2BydW50aW1lYFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb250YWluZXItYmFzZWQgTGFtYmRhXG4gKiB7IHR5cGU6IFwibGFtYmRhXCIsIGRlcGxveW1lbnQ6IFwiY29udGFpbmVyXCIsIGVjclJlcG9zaXRvcnk6IGVjciB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvZGUtYmFzZWQgTGFtYmRhXG4gKiB7IHR5cGU6IFwibGFtYmRhXCIsIGRlcGxveW1lbnQ6IFwiY29kZVwiLCBjb2RlOiBDb2RlLmZyb21Bc3NldChcIi4vbGFtYmRhXCIpIH1cbiAqL1xuZXhwb3J0IHR5cGUgTGFtYmRhQ29tcHV0ZVByb3BzID0gQ29udGFpbmVyTGFtYmRhUHJvcHMgfCBDb2RlTGFtYmRhUHJvcHM7XG5cbmV4cG9ydCB0eXBlIElDb21wdXRlUHJvcHMgPVxuICB8IEVjc0NvbXB1dGVQcm9wc1xuICB8IEVjMkNvbXB1dGVQcm9wc1xuICB8IExhbWJkYUNvbXB1dGVQcm9wcztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgY29tcHV0ZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBUaGVzZSBjaGVja3MgaGVscCBjYXRjaCBpc3N1ZXMgd2hlbiBwcm9wcyBjb21lIGZyb20gZHluYW1pYyBzb3VyY2VzIHdoZXJlXG4gKiBUeXBlU2NyaXB0J3MgY29tcGlsZS10aW1lIGNoZWNrcyBtYXkgbm90IGFwcGx5LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbXB1dGVQcm9wcyhwcm9wczogSUNvbXB1dGVQcm9wcyk6IHZvaWQge1xuICBjb25zdCBwcm9wc0FueSA9IHByb3BzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gRUNTLXNwZWNpZmljIG9wdGlvbnMgb24gbm9uLUVDUyBjb21wdXRlXG4gIGlmIChwcm9wcy50eXBlICE9PSBcImVjc1wiKSB7XG4gICAgaWYgKFxuICAgICAgXCJjYXBhY2l0eVByb3ZpZGVyXCIgaW4gcHJvcHNBbnkgJiZcbiAgICAgIHByb3BzQW55LmNhcGFjaXR5UHJvdmlkZXIgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnY2FwYWNpdHlQcm92aWRlcicgaXMgaWdub3JlZCBmb3IgJHtwcm9wcy50eXBlfSBjb21wdXRlLiBgICtcbiAgICAgICAgICBcIkNhcGFjaXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJlYzJDb25maWdcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5lYzJDb25maWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnZWMyQ29uZmlnJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiRUMyIGNhcGFjaXR5IGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJzZXJ2aWNlc1wiIGluIHByb3BzQW55ICYmIHByb3BzQW55LnNlcnZpY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ3NlcnZpY2VzJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiU2VydmljZXMgY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gRUNTIGNvbXB1dGUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcImNsdXN0ZXJcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5jbHVzdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ2NsdXN0ZXInIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJDbHVzdGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDUyBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIExhbWJkYS1zcGVjaWZpYyBvcHRpb25zIG9uIG5vbi1MYW1iZGEgY29tcHV0ZVxuICBpZiAocHJvcHMudHlwZSAhPT0gXCJsYW1iZGFcIikge1xuICAgIGlmIChcImZ1bmN0aW9uVXJsXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkuZnVuY3Rpb25VcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnZnVuY3Rpb25VcmwnIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJGdW5jdGlvbiBVUkwgY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gTGFtYmRhIGNvbXB1dGUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcImhhbmRsZXJcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5oYW5kbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ2hhbmRsZXInIGlzIGlnbm9yZWQgZm9yICR7cHJvcHMudHlwZX0gY29tcHV0ZS4gYCArXG4gICAgICAgICAgXCJIYW5kbGVyIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIExhbWJkYSBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJydW50aW1lXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkucnVudGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbRmphbGxdIFdhcm5pbmc6ICdydW50aW1lJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiUnVudGltZSBjb25maWd1cmF0aW9uIG9ubHkgYXBwbGllcyB0byBMYW1iZGEgY29tcHV0ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBFQzItc3BlY2lmaWMgb3B0aW9ucyBvbiBub24tRUMyIGNvbXB1dGVcbiAgaWYgKHByb3BzLnR5cGUgIT09IFwiZWMyXCIpIHtcbiAgICBpZiAoXCJzc2hcIiBpbiBwcm9wc0FueSAmJiBwcm9wc0FueS5zc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0ZqYWxsXSBXYXJuaW5nOiAnc3NoJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiU1NIIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIEVDMiBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJ1c2VyRGF0YVwiIGluIHByb3BzQW55ICYmIHByb3BzQW55LnVzZXJEYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ3VzZXJEYXRhJyBpcyBpZ25vcmVkIGZvciAke3Byb3BzLnR5cGV9IGNvbXB1dGUuIGAgK1xuICAgICAgICAgIFwiVXNlciBkYXRhIG9ubHkgYXBwbGllcyB0byBFQzIgY29tcHV0ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFwibWFjaGluZUltYWdlXCIgaW4gcHJvcHNBbnkgJiYgcHJvcHNBbnkubWFjaGluZUltYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtGamFsbF0gV2FybmluZzogJ21hY2hpbmVJbWFnZScgaXMgaWdub3JlZCBmb3IgJHtwcm9wcy50eXBlfSBjb21wdXRlLiBgICtcbiAgICAgICAgICBcIk1hY2hpbmUgaW1hZ2Ugb25seSBhcHBsaWVzIHRvIEVDMiBjb21wdXRlLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVDUy1zcGVjaWZpYyB2YWxpZGF0aW9uXG4gIGlmIChwcm9wcy50eXBlID09PSBcImVjc1wiKSB7XG4gICAgdmFsaWRhdGVFY3NQcm9wcyhwcm9wcyBhcyBFY3NDb21wdXRlUHJvcHMpO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIEVDUy1zcGVjaWZpYyBwcm9wcy5cbiAqIEV4dHJhY3RlZCBmb3IgY2xhcml0eSBhbmQgZGV0YWlsIHBhcml0eSB3aXRoIGRhdGFiYXNlL25ldHdvcmsgcGF0dGVybnMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRWNzUHJvcHMocHJvcHM6IEVjc0NvbXB1dGVQcm9wcyk6IHZvaWQge1xuICAvLyBFQzIgY29uZmlnIHZhbGlkYXRpb25cbiAgaWYgKHByb3BzLmVjMkNvbmZpZyAmJiBwcm9wcy5jYXBhY2l0eVByb3ZpZGVyICE9PSBcIkVDMlwiKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJbRmphbGxdIFdhcm5pbmc6ICdlYzJDb25maWcnIGlzIGlnbm9yZWQgd2hlbiBjYXBhY2l0eVByb3ZpZGVyIGlzIG5vdCAnRUMyJy4gXCIgK1xuICAgICAgICBcIlNldCBjYXBhY2l0eVByb3ZpZGVyIHRvICdFQzInIHRvIHVzZSBFQzIgY2FwYWNpdHkgY29uZmlndXJhdGlvbi5cIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBzZXJ2aWNlcyBhcnJheSBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eVxuICBpZiAoIXByb3BzLnNlcnZpY2VzIHx8IHByb3BzLnNlcnZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQXQgbGVhc3Qgb25lIHNlcnZpY2UgbXVzdCBiZSBzcGVjaWZpZWQgaW4gJ3NlcnZpY2VzJyBhcnJheS5cIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB1bmlxdWUgc2VydmljZSBuYW1lc1xuICBjb25zdCBzZXJ2aWNlTmFtZXMgPSBwcm9wcy5zZXJ2aWNlcy5tYXAoKHMpID0+IHMubmFtZSk7XG4gIGNvbnN0IGR1cGxpY2F0ZU5hbWVzID0gc2VydmljZU5hbWVzLmZpbHRlcihcbiAgICAobmFtZSwgaW5kZXgpID0+IHNlcnZpY2VOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICApO1xuICBpZiAoZHVwbGljYXRlTmFtZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEdXBsaWNhdGUgc2VydmljZSBuYW1lczogJHtbLi4ubmV3IFNldChkdXBsaWNhdGVOYW1lcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHNlcnZpY2UgbmFtZSBmb3JtYXRcbiAgY29uc3QgaW52YWxpZE5hbWVzID0gcHJvcHMuc2VydmljZXMuZmlsdGVyKFxuICAgIChzKSA9PiAhL15bYS16QS1aXVthLXpBLVowLTktXSokLy50ZXN0KHMubmFtZSlcbiAgKTtcbiAgaWYgKGludmFsaWROYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgc2VydmljZSBuYW1lczogJHtpbnZhbGlkTmFtZXMubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICBcIlNlcnZpY2UgbmFtZXMgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgYW5kIGh5cGhlbnMuXCJcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgcm91dGluZyB3aGVuIG11bHRpcGxlIHNlcnZpY2VzIGhhdmUgcG9ydHNcbiAgY29uc3Qgc2VydmljZXNXaXRoUG9ydHMgPSBwcm9wcy5zZXJ2aWNlcy5maWx0ZXIoKHMpID0+XG4gICAgcy5jb250YWluZXJzPy5zb21lKChjKSA9PiBjLnBvcnQpXG4gICk7XG5cbiAgaWYgKHNlcnZpY2VzV2l0aFBvcnRzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBtaXNzaW5nUm91dGluZyA9IHNlcnZpY2VzV2l0aFBvcnRzLmZpbHRlcihcbiAgICAgIChzKSA9PiAhcy5yb3V0aW5nPy5wYXRoICYmICFzLnJvdXRpbmc/Lmhvc3RcbiAgICApO1xuICAgIGlmIChtaXNzaW5nUm91dGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTZXJ2aWNlcyB3aXRoIHBvcnRzIHJlcXVpcmUgcm91dGluZyBjb25maWcgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlczogYCArXG4gICAgICAgICAgYCR7bWlzc2luZ1JvdXRpbmcubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICAgIFwiQWRkIHJvdXRpbmc6IHsgcGF0aDogJy8uLi4nIH0gb3Igcm91dGluZzogeyBob3N0OiAnLi4uJyB9IHRvIGVhY2ggc2VydmljZS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBlYWNoIHNlcnZpY2UncyBjb250YWluZXJzXG4gIGZvciAoY29uc3Qgc2VydmljZSBvZiBwcm9wcy5zZXJ2aWNlcykge1xuICAgIGlmIChzZXJ2aWNlLmNvbnRhaW5lcnMgJiYgc2VydmljZS5jb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgY29udGFpbmVyIG5hbWVzIHdpdGhpbiBzZXJ2aWNlIChvbmx5IG5hbWVkIGNvbnRhaW5lcnMpXG4gICAgICBjb25zdCBjb250YWluZXJOYW1lcyA9IHNlcnZpY2UuY29udGFpbmVyc1xuICAgICAgICAuZmlsdGVyKChjKSA9PiBjLm5hbWUpXG4gICAgICAgIC5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICBjb25zdCBkdXBsaWNhdGVDb250YWluZXJOYW1lcyA9IGNvbnRhaW5lck5hbWVzLmZpbHRlcihcbiAgICAgICAgKG5hbWUsIGluZGV4KSA9PiBjb250YWluZXJOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICAgICAgKTtcbiAgICAgIGlmIChkdXBsaWNhdGVDb250YWluZXJOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2VydmljZSAnJHtzZXJ2aWNlLm5hbWV9JzogRHVwbGljYXRlIGNvbnRhaW5lciBuYW1lczogYCArXG4gICAgICAgICAgICBgJHtbLi4ubmV3IFNldChkdXBsaWNhdGVDb250YWluZXJOYW1lcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgY29tcHV0ZSByZXNvdXJjZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbmdsZSBzZXJ2aWNlIGNsdXN0ZXJcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiV2ViQXBwXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBwLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFt7IG5hbWU6IFwid2ViXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0gfV1cbiAqIH0pKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTXVsdGktc2VydmljZSBjbHVzdGVyIHdpdGggcm91dGluZ1xuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJBcGlDbHVzdGVyXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBpLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFtcbiAqICAgICB7IG5hbWU6IFwidXNlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMCB9XSwgcm91dGluZzogeyBwYXRoOiBcIi91c2Vycy8qXCIgfSB9LFxuICogICAgIHsgbmFtZTogXCJvcmRlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMSB9XSwgcm91dGluZzogeyBwYXRoOiBcIi9vcmRlcnMvKlwiIH0gfVxuICogICBdXG4gKiB9KSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdvcmtlciBjbHVzdGVyIChubyBBTEIpXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldvcmtlcnNcIiwge1xuICogICB0eXBlOiBcImVjc1wiLFxuICogICBjbHVzdGVyOiB7IGxvYWRCYWxhbmNlcjogZmFsc2UgfSxcbiAqICAgc2VydmljZXM6IFtcbiAqICAgICB7IG5hbWU6IFwicHJvY2Vzc29yXCIsIGNvbnRhaW5lcnM6IFt7IGNvbW1hbmQ6IFtcIm5vZGVcIiwgXCJ3b3JrZXIuanNcIl0gfV0gfVxuICogICBdXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wdXRlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wczogSUNvbXB1dGVQcm9wcykge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpOiBDb21wdXRlID0+IHtcbiAgICAgIHZhbGlkYXRlQ29tcHV0ZVByb3BzKHByb3BzKTtcblxuICAgICAgY29uc3QgY29tcHV0ZVByb3BzOiBJQ29tcHV0ZVByb3BzID0ge1xuICAgICAgICAuLi57XG4gICAgICAgICAgdnBjOiBhcHAuZ2V0VnBjKCksXG4gICAgICAgICAgZWNyUmVwb3NpdG9yeTogYXBwLmdldERlZmF1bHRDb250YWluZXJSZWdpc3RyeSgpXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnByb3BzXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gbmV3IENvbXB1dGUoc2NvcGUsIGlkLCBjb21wdXRlUHJvcHMpO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXB1dGUgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgcHVibGljIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHB1YmxpYyB2cGM6IElWcGM7XG5cbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIGNvbXB1dGU6IEVjc0NsdXN0ZXIgfCBFYzJJbnN0YW5jZSB8IExhbWJkYUZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJQ29tcHV0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuXG4gICAgdGhpcy5hZGRDb21wdXRlKHByb3BzKTtcbiAgfVxuXG4gIGFkZENvbXB1dGUocHJvcHM6IElDb21wdXRlUHJvcHMpIHtcbiAgICBzd2l0Y2ggKHByb3BzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJlY3NcIjpcbiAgICAgICAgdGhpcy5hZGRFY3NDb21wdXRlKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZWMyXCI6XG4gICAgICAgIHRoaXMuYWRkRWMyQ29tcHV0ZShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxhbWJkYVwiOlxuICAgICAgICB0aGlzLmFkZExhbWJkYUNvbXB1dGUocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEV4aGF1c3RpdmVuZXNzIGNoZWNrIC0gVHlwZVNjcmlwdCB3aWxsIGVycm9yIGlmIGEgY2FzZSBpcyBtaXNzaW5nXG4gICAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IHByb3BzO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIGNvbXB1dGUgdHlwZTogJHsoX2V4aGF1c3RpdmUgYXMgSUNvbXB1dGVQcm9wcykudHlwZX1gXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRFYzJDb21wdXRlKHByb3BzOiBFYzJDb21wdXRlUHJvcHMpIHtcbiAgICBjb25zdCBlbmFibGVTU0ggPSBwcm9wcy5zc2ggIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5zc2ggIT09IGZhbHNlO1xuXG4gICAgY29uc3QgZWMyUHJvcHMgPSB7XG4gICAgICBzZXJ2aWNlTmFtZTogYCR7dGhpcy5pZH1TZXJ2aWNlYCxcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuaW5zdGFuY2VUeXBlIHx8IFwidDMubWljcm9cIixcbiAgICAgIGVuYWJsZVNTSCxcbiAgICAgIHVzZXJEYXRhOiBwcm9wcy51c2VyRGF0YSxcbiAgICAgIG1hY2hpbmVJbWFnZTogcHJvcHMubWFjaGluZUltYWdlLFxuICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLm1pbkNhcGFjaXR5IHx8IDEsXG4gICAgICBtYXhDYXBhY2l0eTogcHJvcHMubWF4Q2FwYWNpdHkgfHwgMSxcbiAgICAgIHZwYzogcHJvcHMudnBjXG4gICAgfTtcblxuICAgIHRoaXMuY29tcHV0ZSA9IG5ldyBFYzJJbnN0YW5jZSh0aGlzLnNjb3BlLCBgJHt0aGlzLmlkfUVjMmAsIGVjMlByb3BzKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5jb21wdXRlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFY3NDb21wdXRlKHByb3BzOiBFY3NDb21wdXRlUHJvcHMpIHtcbiAgICBjb25zdCBjYXBhY2l0eVByb3ZpZGVyOiBFY3NDYXBhY2l0eVByb3ZpZGVyVHlwZSA9XG4gICAgICBwcm9wcy5jYXBhY2l0eVByb3ZpZGVyIHx8IFwiRkFSR0FURVwiO1xuXG4gICAgLy8gVHJhbnNmb3JtIEVjc1NlcnZpY2VDb25maWdbXSB0byBFY3NTZXJ2aWNlUHJvcHNbXSBmb3IgRWNzQ2x1c3RlclxuICAgIGNvbnN0IHNlcnZpY2VzOiBFY3NDbHVzdGVyUHJvcHNbXCJzZXJ2aWNlc1wiXSA9IHByb3BzLnNlcnZpY2VzLm1hcChcbiAgICAgIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIC8vIEJ1aWxkIGNvbnRhaW5lciBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBzZXJ2aWNlXG4gICAgICAgIGxldCBjb250YWluZXJzOiBFY3NDbHVzdGVyUHJvcHNbXCJzZXJ2aWNlc1wiXVtudW1iZXJdW1wiY29udGFpbmVyc1wiXTtcblxuICAgICAgICBpZiAoc2VydmljZS5jb250YWluZXJzICYmIHNlcnZpY2UuY29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gTWFwIGNvbnRhaW5lcnMsIGF1dG8tZ2VuZXJhdGluZyBuYW1lcyBpZiBub3QgcHJvdmlkZWRcbiAgICAgICAgICBjb250YWluZXJzID0gc2VydmljZS5jb250YWluZXJzLm1hcCgoYywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBjLm5hbWUgfHwgYCR7c2VydmljZS5uYW1lfUNvbnRhaW5lciR7aW5kZXggPiAwID8gaW5kZXggOiBcIlwifWAsXG4gICAgICAgICAgICBpbWFnZTogYy5pbWFnZSxcbiAgICAgICAgICAgIHBvcnQ6IGMucG9ydCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBjLmVudmlyb25tZW50LFxuICAgICAgICAgICAgc2VjcmV0c0ltcG9ydDogYy5zZWNyZXRzSW1wb3J0LFxuICAgICAgICAgICAgY29tbWFuZDogYy5jb21tYW5kLFxuICAgICAgICAgICAgZW50cnlQb2ludDogYy5lbnRyeVBvaW50LFxuICAgICAgICAgICAgZXNzZW50aWFsOiBjLmVzc2VudGlhbCxcbiAgICAgICAgICAgIGhlYWx0aENoZWNrOiBjLmhlYWx0aENoZWNrXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERlZmF1bHQgY29udGFpbmVyIChubyBwb3J0ID0gd29ya2VyKVxuICAgICAgICAgIGNvbnRhaW5lcnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IGAke3NlcnZpY2UubmFtZX1Db250YWluZXJgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSBzY2FsaW5nIGNvbmZpZ1xuICAgICAgICBsZXQgc2NhbGluZ1R5cGU6IFNjYWxpbmdUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgbWluQ2FwYWNpdHk6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IG1heENhcGFjaXR5OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHNlcnZpY2Uuc2NhbGluZyAhPT0gZmFsc2UgJiYgc2VydmljZS5zY2FsaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsaW5nVHlwZSA9IHNlcnZpY2Uuc2NhbGluZy5zY2FsaW5nVHlwZSA/PyBTY2FsaW5nVHlwZS5DUFU7XG4gICAgICAgICAgbWluQ2FwYWNpdHkgPSBzZXJ2aWNlLnNjYWxpbmcubWluQ2FwYWNpdHk7XG4gICAgICAgICAgbWF4Q2FwYWNpdHkgPSBzZXJ2aWNlLnNjYWxpbmcubWF4Q2FwYWNpdHk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VydmljZS5zY2FsaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBEZWZhdWx0OiBlbmFibGUgc2NhbGluZyB3aXRoIENQVVxuICAgICAgICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5cGUuQ1BVO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBzZXJ2aWNlLm5hbWUsXG4gICAgICAgICAgaW1hZ2U6IHNlcnZpY2UuaW1hZ2UsXG4gICAgICAgICAgY29udGFpbmVycyxcbiAgICAgICAgICBjcHU6IHNlcnZpY2UuY3B1LFxuICAgICAgICAgIG1lbW9yeUxpbWl0TWlCOiBzZXJ2aWNlLm1lbW9yeUxpbWl0TWlCLFxuICAgICAgICAgIGRlc2lyZWRDb3VudDogc2VydmljZS5kZXNpcmVkQ291bnQsXG4gICAgICAgICAgc2NhbGluZ1R5cGUsXG4gICAgICAgICAgbWluQ2FwYWNpdHksXG4gICAgICAgICAgbWF4Q2FwYWNpdHksXG4gICAgICAgICAgcm91dGluZzogc2VydmljZS5yb3V0aW5nLFxuICAgICAgICAgIHRhc2tSb2xlSW5saW5lUG9saWNpZXM6IHNlcnZpY2UudGFza1JvbGVJbmxpbmVQb2xpY2llcyxcbiAgICAgICAgICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llczogc2VydmljZS50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbiAgICAgICAgICBjb25uZWN0aW9uczogc2VydmljZS5jb25uZWN0aW9uc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBCdWlsZCBjbHVzdGVyIGNvbmZpZ1xuICAgIGNvbnN0IGNsdXN0ZXI6IEVjc0NsdXN0ZXJQcm9wc1tcImNsdXN0ZXJcIl0gPSBwcm9wcy5jbHVzdGVyXG4gICAgICA/IHtcbiAgICAgICAgICBkb21haW46IHByb3BzLmNsdXN0ZXIuZG9tYWluLFxuICAgICAgICAgIGxvYWRCYWxhbmNlcjogcHJvcHMuY2x1c3Rlci5sb2FkQmFsYW5jZXIsXG4gICAgICAgICAgZGlyZWN0QWNjZXNzOiBwcm9wcy5jbHVzdGVyLmRpcmVjdEFjY2VzcyxcbiAgICAgICAgICBkb21haW5Db25maWc6IHByb3BzLmNsdXN0ZXIuZG9tYWluQ29uZmlnXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZWNzUHJvcHM6IEVjc0NsdXN0ZXJQcm9wcyA9IHtcbiAgICAgIGNsdXN0ZXJOYW1lOiBgJHt0aGlzLmlkfUNsdXN0ZXJgLFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBlY3JSZXBvc2l0b3J5OiBwcm9wcy5lY3JSZXBvc2l0b3J5IHx8IFwiYW1hem9uL2FtYXpvbi1lY3Mtc2FtcGxlXCIsXG4gICAgICBjYXBhY2l0eVByb3ZpZGVyLFxuICAgICAgZWMyQ29uZmlnOiBjYXBhY2l0eVByb3ZpZGVyID09PSBcIkVDMlwiID8gcHJvcHMuZWMyQ29uZmlnIDogdW5kZWZpbmVkLFxuICAgICAgY2x1c3RlcixcbiAgICAgIHNlcnZpY2VzXG4gICAgfTtcblxuICAgIHRoaXMuY29tcHV0ZSA9IG5ldyBFY3NDbHVzdGVyKHRoaXMuc2NvcGUsIGAke3RoaXMuaWR9RWNzYCwgZWNzUHJvcHMpO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmNvbXB1dGUuY29ubmVjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFkZExhbWJkYUNvbXB1dGUocHJvcHM6IExhbWJkYUNvbXB1dGVQcm9wcykge1xuICAgIGxldCBjb2RlOiBDb2RlO1xuICAgIGxldCBoYW5kbGVyOiBzdHJpbmc7XG4gICAgbGV0IHJ1bnRpbWU6IFJ1bnRpbWU7XG5cbiAgICBpZiAocHJvcHMuZGVwbG95bWVudCA9PT0gXCJjb250YWluZXJcIikge1xuICAgICAgLy8gQ29udGFpbmVyLWJhc2VkIExhbWJkYSB1c2luZyBFQ1JcbiAgICAgIGlmIChwcm9wcy5lY3JSZXBvc2l0b3J5IGluc3RhbmNlb2YgUmVwb3NpdG9yeSkge1xuICAgICAgICBjb2RlID0gQ29kZS5mcm9tRWNySW1hZ2UocHJvcHMuZWNyUmVwb3NpdG9yeSwge1xuICAgICAgICAgIHRhZ09yRGlnZXN0OiBcImxhdGVzdFwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiZWNyUmVwb3NpdG9yeSBtdXN0IGJlIGEgUmVwb3NpdG9yeSBpbnN0YW5jZSBmb3IgTGFtYmRhIGNvbXB1dGUgdHlwZVwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRhaW5lciBMYW1iZGEgcmVxdWlyZXMgdGhlc2Ugc3BlY2lhbCB2YWx1ZXNcbiAgICAgIGhhbmRsZXIgPSBIYW5kbGVyLkZST01fSU1BR0U7XG4gICAgICBydW50aW1lID0gUnVudGltZS5GUk9NX0lNQUdFO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb2RlLWJhc2VkIExhbWJkYSAtIHByb3BzLmRlcGxveW1lbnQgPT09IFwiY29kZVwiXG4gICAgICBjb2RlID0gcHJvcHMuY29kZTtcbiAgICAgIGhhbmRsZXIgPSBwcm9wcy5oYW5kbGVyIHx8IFwiaW5kZXguaGFuZGxlclwiO1xuICAgICAgcnVudGltZSA9IHByb3BzLnJ1bnRpbWUgfHwgUnVudGltZS5OT0RFSlNfMThfWDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHByZXNlbmNlLWJhc2VkIGZ1bmN0aW9uVXJsIGNvbmZpZyB0byBsZWdhY3kgYm9vbGVhbiBmb3JtYXRcbiAgICBjb25zdCBmdW5jdGlvblVybENvbmZpZyA9IHByb3BzLmZ1bmN0aW9uVXJsO1xuICAgIGNvbnN0IGVuYWJsZUZ1bmN0aW9uVXJsID1cbiAgICAgIGZ1bmN0aW9uVXJsQ29uZmlnICE9PSB1bmRlZmluZWQgJiYgZnVuY3Rpb25VcmxDb25maWcgIT09IGZhbHNlO1xuICAgIGNvbnN0IGZ1bmN0aW9uVXJsQXV0aFR5cGUgPVxuICAgICAgZW5hYmxlRnVuY3Rpb25VcmwgJiYgdHlwZW9mIGZ1bmN0aW9uVXJsQ29uZmlnID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gZnVuY3Rpb25VcmxDb25maWcuYXV0aFR5cGVcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZnVuY3Rpb25VcmxDb3JzID1cbiAgICAgIGVuYWJsZUZ1bmN0aW9uVXJsICYmIHR5cGVvZiBmdW5jdGlvblVybENvbmZpZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IGZ1bmN0aW9uVXJsQ29uZmlnLmNvcnNcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBsYW1iZGFQcm9wcyA9IHtcbiAgICAgIGNvZGU6IGNvZGUsXG4gICAgICBoYW5kbGVyLFxuICAgICAgcnVudGltZSxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQsXG4gICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplLFxuICAgICAgbGFtYmRhRGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcm9sZURlc2NyaXB0aW9uOiBwcm9wcy5yb2xlRGVzY3JpcHRpb24sXG4gICAgICBpbmxpbmVQb2xpY3k6IHByb3BzLmlubGluZVBvbGljeSB8fCBbXSxcbiAgICAgIGVuYWJsZUZ1bmN0aW9uVXJsLFxuICAgICAgZnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgICAgIGZ1bmN0aW9uVXJsQ29ycyxcbiAgICAgIGVudmlyb25tZW50OiBwcm9wcy5lbnZpcm9ubWVudFxuICAgIH07XG5cbiAgICB0aGlzLmNvbXB1dGUgPSBuZXcgTGFtYmRhRnVuY3Rpb24oXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgYCR7dGhpcy5pZH1MYW1iZGFgLFxuICAgICAgbGFtYmRhUHJvcHNcbiAgICApO1xuXG4gICAgLy8gTGFtYmRhIGZ1bmN0aW9ucyBkb24ndCB1c2Ugc2VjdXJpdHkgZ3JvdXBzIHVubGVzcyBWUEMtZW5hYmxlZFxuICAgIC8vIENyZWF0ZSBlbXB0eSBjb25uZWN0aW9ucyBvYmplY3QgZm9yIGludGVyZmFjZSBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IG5ldyBDb25uZWN0aW9ucygpO1xuICB9XG59XG4iXX0=