cdk-opennext 0.4.3 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -8432,7 +8432,7 @@
8432
8432
  },
8433
8433
  "name": "cdk-opennext",
8434
8434
  "readme": {
8435
- "markdown": "# About\n\nCDK construct to deploy a NextJs 15 or higher application using the\n[OpenNext AWS adapter](https://github.com/opennextjs/opennextjs-aws).\n\nIt works best if [deployed in an Nx\nmonorepo](https://opennext.js.org/aws/config/nx).\n\nThis OpenNext CDK construct is based on [the reference\nconstruct](https://opennext.js.org/aws/reference-implementation)\nprovided by OpenNext. The example has been modernised, and the deploy\nto ECS option has been removed.\n\n# Usage\n\n1. Install:\n\n```sh\nnpm install --save-dev esbuild @opennextjs/aws cdk-opennext\n```\n\n2. Build your app: `npx next build`\n\n3. Build with open-next: `npx open-next build`\n\n4. Add the `NextjsSite` construct:\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n openNextPath: \".open-next\",\n})\n```\n\n`openNextPath` is optional and defaults to \".open-next\".\n\nYou can customize the Lambda function configuration using `defaultFunctionProps`:\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\nimport { Duration } from \"aws-cdk-lib/core\"\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n defaultFunctionProps: {\n memorySize: 2048,\n timeout: Duration.seconds(30),\n environment: {\n MY_ENV_VAR: \"value\",\n },\n },\n})\n```\n\n## Lambda Warming\n\nBy default, Lambda warming is enabled to prevent cold starts. The construct keeps 1 server instance warm with 5-minute intervals.\n\n### Default Behavior\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n // Warming is enabled by default with warm: 1\n})\n```\n\n### Customize Warming\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\nimport { Duration } from \"aws-cdk-lib/core\"\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n warm: 5, // Keep 5 concurrent instances warm\n warmerInterval: Duration.minutes(10), // Warm every 10 minutes\n prewarmOnDeploy: false, // Disable pre-warming on deployment\n})\n```\n\n### Disable Warming\n\n```typescript\nconst site = new NextjsSite(this, \"NextjsSite\", {\n warm: false, // Disable warming\n})\n```\n\n### How It Works\n\n- A dedicated warmer Lambda function (provided by OpenNext) periodically invokes your server functions\n- Creates concurrent invocations to keep multiple instances warm\n- EventBridge rule triggers the warmer at the specified interval\n- Optional pre-warming invokes the warmer immediately after deployment\n- Environment variable `WARMER_ENABLED=true` is set when warming is configured\n\n**Note**: Warming requires OpenNext 3.x+ with warmer support. If OpenNext doesn't provide a warmer bundle, warming will be skipped with a warning.\n\n## Custom Domain\n\nYou can configure a custom domain in three ways:\n\n### Option 1: Route 53 Hosted Zone (automatic certificate and DNS)\n\nProvide a hosted zone and the construct will automatically create a DNS-validated\ncertificate and set up A/AAAA records:\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\nimport { HostedZone } from \"aws-cdk-lib/aws-route53\"\n\nconst hostedZone = HostedZone.fromLookup(this, \"HostedZone\", {\n domainName: \"example.com\",\n})\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n customDomain: {\n domainName: \"app.example.com\",\n hostedZone: hostedZone,\n },\n})\n```\n\n### Option 2: Bring Your Own Certificate (external DNS)\n\nProvide your own ACM certificate when DNS is managed externally. The certificate\nmust be in us-east-1 for CloudFront:\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\nimport { Certificate } from \"aws-cdk-lib/aws-certificatemanager\"\n\nconst certificate = Certificate.fromCertificateArn(\n this,\n \"Certificate\",\n \"arn:aws:acm:us-east-1:123456789012:certificate/...\"\n)\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n customDomain: {\n domainName: \"app.example.com\",\n certificate: certificate,\n },\n})\n// Configure your DNS provider to point app.example.com to site.distribution.distributionDomainName\n```\n\n### Option 3: Bring Your Own Certificate with Route 53 DNS\n\nProvide both a certificate and hosted zone to use your own certificate while\nstill having the construct manage DNS records:\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\nimport { Certificate } from \"aws-cdk-lib/aws-certificatemanager\"\nimport { HostedZone } from \"aws-cdk-lib/aws-route53\"\n\nconst hostedZone = HostedZone.fromLookup(this, \"HostedZone\", {\n domainName: \"example.com\",\n})\n\nconst certificate = Certificate.fromCertificateArn(\n this,\n \"Certificate\",\n \"arn:aws:acm:us-east-1:123456789012:certificate/...\"\n)\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n customDomain: {\n domainName: \"app.example.com\",\n hostedZone: hostedZone,\n certificate: certificate,\n },\n})\n```\n\n# How it works\n\nThis package assumes that the Next and OpenNext build are done outside\nof this construct. Therefore this package does not pull in the\n`@opennextjs/aws` package, but it should be a dependency of your package.\n\nObviously you don't wantt to build this manually all the time, that's\nwhere Nx comes in.\n\n## Use with Nx\n\nConfiguring Nx is also covered in [the OpenNext documentation](https://opennext.js.org/aws/config/nx).\n\nIn your Nx `project.json` add a \"build\" target to build next:\n\n```json\n\"build\": {\n \"options\": {\n \"command\": \"next build\"\n },\n \"inputs\": [\n \"default\",\n \"^production\",\n \"!{projectRoot}/.next\",\n \"!{projectRoot}/.open-next\",\n \"!{projectRoot}/open-next.config.ts\",\n \"!{projectRoot}/cdk.json\",\n \"!{projectRoot}/cdk.context.json\"\n ],\n \"outputs\": [\"{projectRoot}/.next\"]\n},\n```\n\nIf you enable caching, it will only build when your NextJs app has actually changed.\n\nThen add a target to build OpenNext:\n\n```json\n\"build-open-next\": {\n \"executor\": \"nx:run-commands\",\n \"dependsOn\": [\"build\"],\n \"cache\": true,\n \"inputs\": [\"{projectRoot}/open-next.config.ts\", \"{projectRoot}/.next\"],\n \"outputs\": [\"{projectRoot}/.open-next\"],\n \"options\": {\n \"cwd\": \"{projectRoot}\",\n \"command\": \"open-next build\"\n }\n},\n```\n\nAnd finally for your cdk deploy target, depend on the open next build:\n\n```json\n\"deploy\": {\n \"dependsOn\": [\"build-open-next\"]\n}\n```\n\nSet the output to standalone in `next.config.ts`, this is key:\n\n```ts\nconst nextConfig: NextConfig = {\n output: \"standalone\",\n ...\n}\n```\n\nYour `open-next.config.ts` can look like this:\n\n```ts\nimport type { OpenNextConfig } from \"@opennextjs/aws/types/open-next\"\n\nconst config = {\n default: {\n install: {\n packages: [\"@swc/helpers@0.5.15\", \"styled-jsx@5.1.6\", \"@next/env@16.0.1\", \"pg\"],\n arch: \"arm64\",\n },\n },\n buildCommand: \"exit 0\", // Nx builds Next for us\n packageJsonPath: \"../../\", // Root directory of monorepo\n} satisfies OpenNextConfig\n\nexport default config\n```\n\nThe packages to install depend on your particular config. If you don't\nuse postgres for example, remove \"pg\".\n\n# SST v2 compatibility\n\nSwitching to this construct from SST v2 is a fairly major update. All Lambda functions will be replaced.\n\n## Compatible Features\n\n- [x] Custom domains with Route 53 or external DNS\n- [x] Automatic certificate creation and DNS records\n- [x] S3 asset storage with Origin Access Control\n- [x] CloudFront distribution with custom behaviors\n- [x] Lambda server functions with streaming support\n- [x] Image optimization function\n- [x] Incremental Static Regeneration (ISR)\n- [x] Revalidation queue and DynamoDB table\n- [x] Multiple origins support\n- [x] Custom Lambda function configuration via `defaultFunctionProps`\n- [x] ARM64 architecture support\n- [x] Lambda warming to prevent cold starts (enabled by default)\n\n## Not Yet Implemented\n\n**Core Functions:**\n- [ ] Lambda@Edge deployment - Cannot deploy server to edge for lower latency\n- [ ] Middleware as edge functions - Middleware may not execute optimally\n\n**CloudFront:**\n- [ ] Advanced cache key generation - Current implementation uses basic x-forwarded-host only\n- [ ] Geo-location header injection - No CloudFront geo-headers passed to Lambda\n- [ ] Custom server cache policy configuration - Cache policy is hard-coded\n\n**Lambda Configuration:**\n- [ ] Image optimization configuration - No memorySize or staticImageOptimization options\n- [ ] VPC support for revalidation function\n- [ ] Custom runtime configuration - Defaults to Node.js 24.x\n- [ ] Dynamic memory allocation for initialization function - Fixed at 128 MB\n\n**Debugging:**\n- [ ] Sourcemap handling - Less detailed error reporting compared to SST v2\n\n# Comparison to other implementations\n\n- [SST v2](https://github.com/sst/v2): this is what I used in the\n past, but it's now community supported, PRs are being merged slowly,\n and it's getting very hard to integrate in modern monorepos.\n- [cdk-nextjs-standalone](https://github.com/jetbridge/cdk-nextjs/):\n seems actively maintained, but README.md feels very dated. It's now\n also based on OpenNext but unclear how it tracks against OpenNext.\n- [cdklabs/cdk-nextjs](https://github.com/cdklabs/cdk-nextjs): not\n based on the OpenNext adapter. Needs NAT gateway and EFS, so very\n expensive to run.\n- [open-next-cdk](https://github.com/datasprayio/open-next-cdk): no\n longer maintained it seems\n"
8435
+ "markdown": "# About\n\nCDK construct to deploy a NextJs 15 or higher application using the\n[OpenNext AWS adapter](https://github.com/opennextjs/opennextjs-aws).\n\nIt works best if [deployed in an Nx\nmonorepo](https://opennext.js.org/aws/config/nx).\n\nThis OpenNext CDK construct is based on [the reference\nconstruct](https://opennext.js.org/aws/reference-implementation)\nprovided by OpenNext. The example has been modernised, and the deploy\nto ECS option has been removed.\n\n# Usage\n\n1. Install:\n\n```sh\nnpm install --save-dev esbuild @opennextjs/aws cdk-opennext\n```\n\n2. Build your app: `npx next build`\n\n3. Build with open-next: `npx open-next build`\n\n4. Add the `NextjsSite` construct:\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n openNextPath: \".open-next\",\n})\n```\n\n`openNextPath` is optional and defaults to \".open-next\".\n\nYou can customize the Lambda function configuration using `defaultFunctionProps`:\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\nimport { Duration } from \"aws-cdk-lib/core\"\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n defaultFunctionProps: {\n memorySize: 2048,\n timeout: Duration.seconds(30),\n environment: {\n MY_ENV_VAR: \"value\",\n },\n },\n})\n```\n\n## Lambda Warming\n\nBy default, Lambda warming is enabled to prevent cold starts. The construct keeps 1 server instance warm with 5-minute intervals.\n\n### Default Behavior\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n // Warming is enabled by default with warm: 1\n})\n```\n\n### Customize Warming\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\nimport { Duration } from \"aws-cdk-lib/core\"\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n warm: 5, // Keep 5 concurrent instances warm\n warmerInterval: Duration.minutes(10), // Warm every 10 minutes\n prewarmOnDeploy: false, // Disable pre-warming on deployment\n})\n```\n\n### Disable Warming\n\n```typescript\nconst site = new NextjsSite(this, \"NextjsSite\", {\n warm: false, // Disable warming\n})\n```\n\n### How It Works\n\n- A dedicated warmer Lambda function (provided by OpenNext) periodically invokes your server functions\n- Creates concurrent invocations to keep multiple instances warm\n- EventBridge rule triggers the warmer at the specified interval\n- Optional pre-warming invokes the warmer immediately after deployment\n- Environment variable `WARMER_ENABLED=true` is set when warming is configured\n\n**Note**: Warming requires OpenNext 3.x+ with warmer support. If OpenNext doesn't provide a warmer bundle, warming will be skipped with a warning.\n\n## Custom Domain\n\nYou can configure a custom domain in three ways:\n\n### Option 1: Route 53 Hosted Zone (automatic certificate and DNS)\n\nProvide a hosted zone and the construct will automatically create a DNS-validated\ncertificate and set up A/AAAA records:\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\nimport { HostedZone } from \"aws-cdk-lib/aws-route53\"\n\nconst hostedZone = HostedZone.fromLookup(this, \"HostedZone\", {\n domainName: \"example.com\",\n})\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n customDomain: {\n domainName: \"app.example.com\",\n hostedZone: hostedZone,\n },\n})\n```\n\n### Option 2: Bring Your Own Certificate (external DNS)\n\nProvide your own ACM certificate when DNS is managed externally. The certificate\nmust be in us-east-1 for CloudFront:\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\nimport { Certificate } from \"aws-cdk-lib/aws-certificatemanager\"\n\nconst certificate = Certificate.fromCertificateArn(\n this,\n \"Certificate\",\n \"arn:aws:acm:us-east-1:123456789012:certificate/...\"\n)\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n customDomain: {\n domainName: \"app.example.com\",\n certificate: certificate,\n },\n})\n// Configure your DNS provider to point app.example.com to site.distribution.distributionDomainName\n```\n\n### Option 3: Bring Your Own Certificate with Route 53 DNS\n\nProvide both a certificate and hosted zone to use your own certificate while\nstill having the construct manage DNS records:\n\n```typescript\nimport { NextjsSite } from \"cdk-opennext\"\nimport { Certificate } from \"aws-cdk-lib/aws-certificatemanager\"\nimport { HostedZone } from \"aws-cdk-lib/aws-route53\"\n\nconst hostedZone = HostedZone.fromLookup(this, \"HostedZone\", {\n domainName: \"example.com\",\n})\n\nconst certificate = Certificate.fromCertificateArn(\n this,\n \"Certificate\",\n \"arn:aws:acm:us-east-1:123456789012:certificate/...\"\n)\n\nconst site = new NextjsSite(this, \"NextjsSite\", {\n customDomain: {\n domainName: \"app.example.com\",\n hostedZone: hostedZone,\n certificate: certificate,\n },\n})\n```\n\n# How it works\n\nThis package assumes that the Next and OpenNext build are done outside\nof this construct. Therefore this package does not pull in the\n`@opennextjs/aws` package, but it should be a dependency of your package.\n\nObviously you don't wantt to build this manually all the time, that's\nwhere Nx comes in.\n\n## Use with Nx\n\nConfiguring Nx is also covered in [the OpenNext documentation](https://opennext.js.org/aws/config/nx).\n\nIn your Nx `project.json` add a \"build\" target to build next:\n\n```json\n\"build\": {\n \"options\": {\n \"command\": \"next build\"\n },\n \"inputs\": [\n \"default\",\n \"^production\",\n \"!{projectRoot}/.next\",\n \"!{projectRoot}/.open-next\",\n \"!{projectRoot}/open-next.config.ts\",\n \"!{projectRoot}/cdk.json\",\n \"!{projectRoot}/cdk.context.json\"\n ],\n \"outputs\": [\"{projectRoot}/.next\"]\n},\n```\n\nIf you enable caching, it will only build when your NextJs app has actually changed.\n\nThen add a target to build OpenNext:\n\n```json\n\"build-open-next\": {\n \"executor\": \"nx:run-commands\",\n \"dependsOn\": [\"build\"],\n \"cache\": true,\n \"inputs\": [\"{projectRoot}/open-next.config.ts\", \"{projectRoot}/.next\"],\n \"outputs\": [\"{projectRoot}/.open-next\"],\n \"options\": {\n \"cwd\": \"{projectRoot}\",\n \"command\": \"open-next build\"\n }\n},\n```\n\nAnd finally for your cdk deploy target, depend on the open next build:\n\n```json\n\"deploy\": {\n \"dependsOn\": [\"build-open-next\"]\n}\n```\n\nSet the output to standalone in `next.config.ts`, this is key:\n\n```ts\nconst nextConfig: NextConfig = {\n output: \"standalone\",\n ...\n}\n```\n\nYour `open-next.config.ts` can look like this:\n\n```ts\nimport type { OpenNextConfig } from \"@opennextjs/aws/types/open-next\"\n\nconst config = {\n default: {\n install: {\n packages: [\n \"@swc/helpers@0.5.17\",\n \"styled-jsx@5.1.6\",\n \"@next/env@16.0.7\",\n \"semver\",\n \"pg\",\n ],\n arch: \"arm64\",\n },\n },\n buildCommand: \"exit 0\", // Nx builds Next for us\n packageJsonPath: \"../../\", // Root directory of monorepo\n} satisfies OpenNextConfig\n\nexport default config\n```\n\nThe packages to install depend on your particular config. If you don't\nuse postgres for example, remove \"pg\".\n\n# SST v2 compatibility\n\nSwitching to this construct from SST v2 is a fairly major update. All Lambda functions will be replaced.\n\n## Compatible Features\n\n- [x] Custom domains with Route 53 or external DNS\n- [x] Automatic certificate creation and DNS records\n- [x] S3 asset storage with Origin Access Control\n- [x] CloudFront distribution with custom behaviors\n- [x] Lambda server functions with streaming support\n- [x] Image optimization function\n- [x] Incremental Static Regeneration (ISR)\n- [x] Revalidation queue and DynamoDB table\n- [x] Multiple origins support\n- [x] Custom Lambda function configuration via `defaultFunctionProps`\n- [x] ARM64 architecture support\n- [x] Lambda warming to prevent cold starts (enabled by default)\n\n## Not Yet Implemented\n\n**Core Functions:**\n\n- [ ] Lambda@Edge deployment - Cannot deploy server to edge for lower latency\n- [ ] Middleware as edge functions - Middleware may not execute optimally\n\n**CloudFront:**\n\n- [ ] Advanced cache key generation - Current implementation uses basic x-forwarded-host only\n- [x] Geo-location header injection - CloudFront geo-headers passed to Lambda\n- [ ] Custom server cache policy configuration - Cache policy is hard-coded\n\n**Lambda Configuration:**\n\n- [ ] Image optimization configuration - No memorySize or staticImageOptimization options\n- [ ] VPC support for revalidation function\n- [ ] Custom runtime configuration - Defaults to Node.js 24.x\n- [ ] Dynamic memory allocation for initialization function - Fixed at 128 MB\n\n**Debugging:**\n\n- [ ] Sourcemap handling - Less detailed error reporting compared to SST v2\n\n# Comparison to other implementations\n\n- [SST v2](https://github.com/sst/v2): this is what I used in the\n past, but it's now community supported, PRs are being merged slowly,\n and it's getting very hard to integrate in modern monorepos.\n- [cdk-nextjs-standalone](https://github.com/jetbridge/cdk-nextjs/):\n seems actively maintained, but README.md feels very dated. It's now\n also based on OpenNext but unclear how it tracks against OpenNext.\n- [cdklabs/cdk-nextjs](https://github.com/cdklabs/cdk-nextjs): not\n based on the OpenNext adapter. Needs NAT gateway and EFS, so very\n expensive to run.\n- [open-next-cdk](https://github.com/datasprayio/open-next-cdk): no\n longer maintained it seems\n"
8436
8436
  },
8437
8437
  "repository": {
8438
8438
  "type": "git",
@@ -8796,6 +8796,6 @@
8796
8796
  "symbolId": "src/open-next:NextjsSiteProps"
8797
8797
  }
8798
8798
  },
8799
- "version": "0.4.3",
8800
- "fingerprint": "D+paCsk1XjWZ1JT3qtdFu88CmQiPgnaOuRmAtPqrO5g="
8799
+ "version": "0.4.5",
8800
+ "fingerprint": "9YQdSxTxYC5Uwk/c38qPOjcwYSL1rE6RfZsh4abr1BE="
8801
8801
  }
package/README.md CHANGED
@@ -251,7 +251,13 @@ import type { OpenNextConfig } from "@opennextjs/aws/types/open-next"
251
251
  const config = {
252
252
  default: {
253
253
  install: {
254
- packages: ["@swc/helpers@0.5.15", "styled-jsx@5.1.6", "@next/env@16.0.1", "pg"],
254
+ packages: [
255
+ "@swc/helpers@0.5.17",
256
+ "styled-jsx@5.1.6",
257
+ "@next/env@16.0.7",
258
+ "semver",
259
+ "pg",
260
+ ],
255
261
  arch: "arm64",
256
262
  },
257
263
  },
@@ -287,21 +293,25 @@ Switching to this construct from SST v2 is a fairly major update. All Lambda fun
287
293
  ## Not Yet Implemented
288
294
 
289
295
  **Core Functions:**
296
+
290
297
  - [ ] Lambda@Edge deployment - Cannot deploy server to edge for lower latency
291
298
  - [ ] Middleware as edge functions - Middleware may not execute optimally
292
299
 
293
300
  **CloudFront:**
301
+
294
302
  - [ ] Advanced cache key generation - Current implementation uses basic x-forwarded-host only
295
- - [ ] Geo-location header injection - No CloudFront geo-headers passed to Lambda
303
+ - [x] Geo-location header injection - CloudFront geo-headers passed to Lambda
296
304
  - [ ] Custom server cache policy configuration - Cache policy is hard-coded
297
305
 
298
306
  **Lambda Configuration:**
307
+
299
308
  - [ ] Image optimization configuration - No memorySize or staticImageOptimization options
300
309
  - [ ] VPC support for revalidation function
301
310
  - [ ] Custom runtime configuration - Defaults to Node.js 24.x
302
311
  - [ ] Dynamic memory allocation for initialization function - Fixed at 128 MB
303
312
 
304
313
  **Debugging:**
314
+
305
315
  - [ ] Sourcemap handling - Less detailed error reporting compared to SST v2
306
316
 
307
317
  # Comparison to other implementations
@@ -114,6 +114,7 @@ export declare class NextjsSite extends Construct {
114
114
  private getEnvironment;
115
115
  private grantPermissions;
116
116
  private createFunctionOrigin;
117
+ private getGeoHeadersInjection;
117
118
  private createDistribution;
118
119
  private createServerCachePolicy;
119
120
  private createStaticCachePolicy;
package/lib/open-next.js CHANGED
@@ -339,12 +339,32 @@ class NextjsSite extends constructs_1.Construct {
339
339
  ...(originId ? { originId } : {}),
340
340
  });
341
341
  }
342
+ getGeoHeadersInjection() {
343
+ return `
344
+ if(request.headers["cloudfront-viewer-city"]) {
345
+ request.headers["x-open-next-city"] = request.headers["cloudfront-viewer-city"];
346
+ }
347
+ if(request.headers["cloudfront-viewer-country"]) {
348
+ request.headers["x-open-next-country"] = request.headers["cloudfront-viewer-country"];
349
+ }
350
+ if(request.headers["cloudfront-viewer-region"]) {
351
+ request.headers["x-open-next-region"] = request.headers["cloudfront-viewer-region"];
352
+ }
353
+ if(request.headers["cloudfront-viewer-latitude"]) {
354
+ request.headers["x-open-next-latitude"] = request.headers["cloudfront-viewer-latitude"];
355
+ }
356
+ if(request.headers["cloudfront-viewer-longitude"]) {
357
+ request.headers["x-open-next-longitude"] = request.headers["cloudfront-viewer-longitude"];
358
+ }
359
+ `.trim();
360
+ }
342
361
  createDistribution(origins, props, certificate) {
343
362
  const cloudfrontFunction = new aws_cloudfront_1.Function(this, "CloudFrontFunction", {
344
363
  code: aws_cloudfront_1.FunctionCode.fromInline(`
345
364
  function handler(event) {
346
365
  var request = event.request;
347
366
  request.headers["x-forwarded-host"] = request.headers.host;
367
+ ${this.getGeoHeadersInjection()}
348
368
  return request;
349
369
  }
350
370
  `),
@@ -407,5 +427,5 @@ class NextjsSite extends constructs_1.Construct {
407
427
  }
408
428
  exports.NextjsSite = NextjsSite;
409
429
  _a = JSII_RTTI_SYMBOL_1;
410
- NextjsSite[_a] = { fqn: "cdk-opennext.NextjsSite", version: "0.4.3" };
411
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1uZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL29wZW4tbmV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFtQztBQUNuQywyQkFBaUM7QUFDakMsNkJBQTRCO0FBQzVCLCtFQUEwRjtBQUMxRiwrREFnQm1DO0FBQ25DLCtFQUErRTtBQUMvRSwyREFBbUY7QUFDbkYsdURBQXVEO0FBQ3ZELHVFQUErRDtBQUUvRCx1REFTK0I7QUFDL0IsbUZBQXFFO0FBQ3JFLG1EQUE4RDtBQUM5RCx5REFBd0Y7QUFDeEYseUVBQWtFO0FBQ2xFLCtDQUE4RDtBQUM5RCxxRUFBd0U7QUFDeEUsaURBQTJDO0FBQzNDLDJDQU95QjtBQUN6QixtRUFBdUQ7QUFDdkQsMkNBQXNDO0FBZ0p0QyxNQUFhLFVBQVcsU0FBUSxzQkFBUztJQWlCdkMsSUFBVyxxQkFBcUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUE7SUFDcEMsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLE9BQU8sV0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixFQUFFLENBQUE7SUFDOUQsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxpQkFBaUI7WUFDM0IsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3JDLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUE7UUFDdEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUM5QixJQUFBLGlCQUFZLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQzNELENBQUE7UUFFbkIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFBO1FBRXZELGlGQUFpRjtRQUNqRixJQUNFLEtBQUssQ0FBQyxZQUFZO1lBQ2xCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXO1lBQy9CLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQzlCLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLDhEQUE4RDtnQkFDNUQsNEVBQTRFO2dCQUM1RSxrQ0FBa0MsQ0FDckMsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDekMsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixpQkFBaUIsRUFBRSwwQkFBaUIsQ0FBQyxTQUFTO1lBQzlDLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsYUFBYSxFQUFFLG9CQUFhLENBQUMsT0FBTztZQUNwQyxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7UUFFM0Msb0VBQW9FO1FBQ3BFLE1BQU0sV0FBVyxHQUNmLEtBQUssQ0FBQyxZQUFZLEVBQUUsV0FBVztZQUMvQixDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsVUFBVTtnQkFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQzdCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUM5QjtnQkFDSCxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtRQUM5RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7UUFDdkQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDeEUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ25CLElBQUksS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hELElBQUkscUJBQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO2dCQUMvQixJQUFJLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVO2dCQUNuQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVO2dCQUN6QyxNQUFNLEVBQUUsMEJBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxzQ0FBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDeEUsQ0FBQyxDQUFBO1lBRUYsSUFBSSx3QkFBVSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtnQkFDdEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVTtnQkFDbkMsVUFBVSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVTtnQkFDekMsTUFBTSxFQUFFLDBCQUFZLENBQUMsU0FBUyxDQUFDLElBQUksc0NBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3hFLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8saUJBQWlCLENBQUMsVUFBa0IsRUFBRSxVQUF1QjtRQUNuRSxzREFBc0Q7UUFDdEQsa0ZBQWtGO1FBQ2xGLE9BQU8sSUFBSSxnREFBdUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ3RELFVBQVU7WUFDVixVQUFVO1lBQ1YsTUFBTSxFQUFFLFdBQVc7U0FDcEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLHNCQUFLLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ2pELFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLDRCQUFhLENBQUMsTUFBTSxFQUFFO1lBQ3pELE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLDRCQUFhLENBQUMsTUFBTSxFQUFFO1lBQ3JELGdDQUFnQyxFQUFFO2dCQUNoQywwQkFBMEIsRUFBRSxJQUFJO2FBQ2pDO1lBQ0QsT0FBTyxFQUFFLHNCQUFPLENBQUMsUUFBUSxFQUFFO1lBQzNCLHNCQUFzQixFQUFFO2dCQUN0QjtvQkFDRSxTQUFTLEVBQUUsWUFBWTtvQkFDdkIsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsNEJBQWEsQ0FBQyxNQUFNLEVBQUU7b0JBQzFELE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLDRCQUFhLENBQUMsTUFBTSxFQUFFO2lCQUMvRDthQUNGO1lBQ0QsYUFBYSxFQUFFLG9CQUFhLENBQUMsT0FBTztTQUNyQyxDQUFDLENBQUE7UUFFRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQTtRQUUxRSxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFXLENBQUMsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQ25FLFdBQVcsRUFBRSxrQ0FBa0M7WUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksZUFBZTtZQUMzQyw4Q0FBOEM7WUFDOUMsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsWUFBWSxFQUFFLHlCQUFZLENBQUMsTUFBTTtZQUNqQyxPQUFPLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsVUFBVSxFQUFFLEdBQUc7WUFDZixhQUFhLEVBQUUsMEJBQWEsQ0FBQyxJQUFJO1lBQ2pDLFdBQVcsRUFBRTtnQkFDWCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsU0FBUzthQUNwQztTQUNGLENBQUMsQ0FBQTtRQUVGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSw4QkFBOEIsRUFBRTtZQUMxRSxTQUFTLEVBQUUsd0JBQWEsQ0FBQyxPQUFPO1lBQ2hDLGFBQWEsRUFBRSxvQkFBYSxDQUFDLE9BQU87U0FDckMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUMxRCxjQUFjLEVBQUUsUUFBUTtZQUN4QixRQUFRLEVBQUUsZ0JBQWdCO1NBQzNCLENBQUMsQ0FBQTtRQUVGLElBQUkscUJBQWMsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7WUFDL0MsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1lBQ25DLFVBQVUsRUFBRTtnQkFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTthQUMvQjtTQUNGLENBQUMsQ0FBQTtRQUVGLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVPLGFBQWEsQ0FBQyxvQkFBMkM7UUFDL0QsTUFBTSxFQUNKLEVBQUUsRUFBRSxRQUFRLEVBQ1osT0FBTyxFQUFFLGFBQWEsRUFDdEIsY0FBYyxFQUFFLFdBQVcsRUFDM0IsR0FBRyxXQUFXLEVBQ2YsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQTtRQUMvQixLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxJQUFJLG9DQUFnQixDQUFDLElBQUksRUFBRSwyQkFBMkIsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNqRSxPQUFPLEVBQUUsQ0FBQywwQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN0RSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDOUIsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQzdCLEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHO1lBQ2QsRUFBRSxFQUFFLHVDQUFjLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEQsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTthQUNoQyxDQUFDO1lBQ0YsT0FBTyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FDaEMsU0FBUyxFQUNULGFBQWEsRUFDYixjQUFjLEVBQ2Qsb0JBQW9CLENBQ3JCO1lBQ0QsY0FBYyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkMsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxnQkFBZ0IsQ0FDakI7WUFDRCxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO2dCQUNwQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQzNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDOUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dCQUM1RCxDQUFDO2dCQUNELE9BQU8sR0FBRyxDQUFBO1lBQ1osQ0FBQyxFQUNELEVBQWdDLENBQ2pDO1NBQ0YsQ0FBQTtRQUNELE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFLLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ2pELElBQUksRUFBRSxJQUFJO1lBQ1Ysc0JBQXNCLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDN0MsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQkFBVyxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUM3RCxXQUFXLEVBQUUscUJBQXFCO1lBQ2xDLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsTUFBTTtnQkFDL0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxFQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sQ0FDbEU7Z0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FDUDtZQUNELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsWUFBWSxFQUFFLHlCQUFZLENBQUMsTUFBTTtZQUNqQyxPQUFPLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsYUFBYSxFQUFFLDBCQUFhLENBQUMsSUFBSTtTQUNsQyxDQUFDLENBQUE7UUFDRixRQUFRLENBQUMsY0FBYyxDQUFDLElBQUkseUNBQWMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3BFLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVPLFlBQVk7UUFDbEIsdURBQXVEO1FBQ3ZELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXRGLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsZUFBZSxJQUFJLGVBQWUsSUFBSSxDQUFDO1lBQUUsT0FBTTtRQUVwRCxrQ0FBa0M7UUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFBO1FBQzFELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLGtCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FDN0IsbUVBQW1FO2dCQUNqRSxtRkFBbUYsQ0FDdEYsQ0FBQTtZQUNELE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDdEUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQTtRQUVwQyx3QkFBd0I7UUFDeEIsTUFBTSxVQUFVLEdBQUc7WUFDakI7Z0JBQ0UsV0FBVyxFQUFFLGVBQWU7Z0JBQzVCLFFBQVEsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWTthQUNuRDtTQUNGLENBQUE7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHFCQUFXLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQzVELFdBQVcsRUFBRSxnQkFBZ0I7WUFDN0IsT0FBTyxFQUFFLGFBQWE7WUFDdEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztZQUNsQyxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLFlBQVksRUFBRSx5QkFBWSxDQUFDLE1BQU07WUFDakMsT0FBTyxFQUFFLGVBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVCLFVBQVUsRUFBRSxHQUFHO1lBQ2YsYUFBYSxFQUFFLDBCQUFhLENBQUMsSUFBSTtZQUNqQyxXQUFXLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO2FBQ3hDO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQzVELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFcEUsMEJBQTBCO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLGVBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakUsSUFBSSxpQkFBSSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDM0IsV0FBVyxFQUFFLHVCQUF1QixRQUFRLENBQUMsU0FBUyxFQUFFLFVBQVU7WUFDbEUsUUFBUSxFQUFFLHFCQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLG1DQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3pFLENBQUMsQ0FBQTtRQUVGLCtDQUErQztRQUMvQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3pDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtnQkFDaEUsU0FBUyxFQUFFLHdCQUFhLENBQUMsT0FBTztnQkFDaEMsYUFBYSxFQUFFLG9CQUFhLENBQUMsT0FBTzthQUNyQyxDQUFDLENBQUE7WUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLHFCQUFXLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO2dCQUM3RCxXQUFXLEVBQUUsb0JBQW9CO2dCQUNqQyxPQUFPLEVBQUUsZUFBZTtnQkFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBc0JyQixDQUFDO2dCQUNGLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7Z0JBQzVCLFlBQVksRUFBRSx5QkFBWSxDQUFDLE1BQU07Z0JBQ2pDLE9BQU8sRUFBRSxlQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsYUFBYSxFQUFFLDBCQUFhLENBQUMsSUFBSTtnQkFDakMsUUFBUSxFQUFFLGlCQUFpQjthQUM1QixDQUFDLENBQUE7WUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUU1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLDJCQUFRLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO2dCQUN2RCxjQUFjLEVBQUUsV0FBVztnQkFDM0IsUUFBUSxFQUFFLGlCQUFpQjthQUM1QixDQUFDLENBQUE7WUFFRixvRUFBb0U7WUFDcEUsc0VBQXNFO1lBQ3RFLE1BQU0sVUFBVSxHQUFHLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUM7aUJBQ3BDLE1BQU0sQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNiLFdBQVcsRUFBRSxlQUFlO2dCQUM1QixRQUFRLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRTtnQkFDOUIsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTthQUMzQyxDQUFDLENBQ0g7aUJBQ0EsTUFBTSxDQUFDLEtBQUssQ0FBQztpQkFDYixTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBLENBQUMsMkJBQTJCO1lBRS9DLElBQUkscUJBQWMsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7Z0JBQzVDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtnQkFDbkMsVUFBVSxFQUFFO29CQUNWLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVk7b0JBQzlDLE9BQU8sRUFBRSxVQUFVO2lCQUNwQjthQUNGLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYztRQUNwQixPQUFPO1lBQ0wsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQ3pDLHVCQUF1QixFQUFFLFFBQVE7WUFDakMsbUJBQW1CLEVBQUUsWUFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO1lBQzFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMzQyx5QkFBeUIsRUFBRSxZQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07WUFDaEQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO1lBQ3hDLDRDQUE0QztZQUM1QyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQ25DLGlCQUFpQixFQUFFLFNBQVM7U0FDN0IsQ0FBQTtJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxTQUFxQjtRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVPLG9CQUFvQixDQUMxQixHQUFXLEVBQ1gsTUFBOEIsRUFDOUIsUUFBaUIsRUFDakIsT0FBOEI7UUFFOUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3pDLE1BQU0sRUFBRSxHQUFHLElBQUkscUJBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFBRTtZQUNqRCxHQUFHLE9BQU87WUFDVixPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxvQkFBTyxDQUFDLFdBQVc7WUFDaEQsWUFBWSxFQUFFLE9BQU8sRUFBRSxZQUFZLElBQUkseUJBQVksQ0FBQyxNQUFNO1lBQzFELFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxJQUFJLElBQUk7WUFDdkMsYUFBYSxFQUFFLE9BQU8sRUFBRSxhQUFhLElBQUksMEJBQWEsQ0FBQyxJQUFJO1lBQzNELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkUsV0FBVyxFQUFFO2dCQUNYLEdBQUcsT0FBTyxFQUFFLFdBQVc7Z0JBQ3ZCLEdBQUcsV0FBVzthQUNmO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztZQUM5QixRQUFRLEVBQUUsZ0NBQW1CLENBQUMsSUFBSTtZQUNsQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsdUJBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLHVCQUFVLENBQUMsUUFBUTtTQUNoRixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFekIsNkNBQTZDO1FBQzdDLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUE7UUFDbEMsQ0FBQztRQUVELE9BQU8sSUFBSSxtQ0FBVSxDQUFDLFNBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ25ELEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNsQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRU8sa0JBQWtCLENBQ3hCLE9BQWdDLEVBQ2hDLEtBQXNCLEVBQ3RCLFdBQTBCO1FBRTFCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSx5QkFBa0IsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDNUUsSUFBSSxFQUFFLDZCQUFZLENBQUMsVUFBVSxDQUFDOzs7Ozs7SUFNaEMsQ0FBQztTQUNBLENBQUMsQ0FBQTtRQUNGLE1BQU0sY0FBYyxHQUFHO1lBQ3JCO2dCQUNFLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLFNBQVMsRUFBRSxrQ0FBaUIsQ0FBQyxjQUFjO2FBQzVDO1NBQ0YsQ0FBQTtRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksNkJBQVksQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQzFELFdBQVcsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDN0UsV0FBVztZQUNYLGVBQWUsRUFBRTtnQkFDZixNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQVEsRUFBRSwrREFBK0Q7Z0JBQ3pGLG9CQUFvQixFQUFFLHFDQUFvQixDQUFDLGlCQUFpQjtnQkFDNUQsY0FBYyxFQUFFLCtCQUFjLENBQUMsU0FBUztnQkFDeEMsYUFBYSxFQUFFLDhCQUFhLENBQUMsc0JBQXNCO2dCQUNuRCxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtnQkFDbkMsbUJBQW1CLEVBQUUsb0NBQW1CLENBQUMsNkJBQTZCO2dCQUN0RSxvQkFBb0IsRUFBRSxjQUFjO2FBQ3JDO1lBQ0QsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTO2lCQUMvQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDO2lCQUNoQyxNQUFNLENBQ0wsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sZUFBZSxHQUFvQjtvQkFDdkMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBRSxFQUFFLCtEQUErRDtvQkFDeEksb0JBQW9CLEVBQUUscUNBQW9CLENBQUMsaUJBQWlCO29CQUM1RCxjQUFjLEVBQUUsK0JBQWMsQ0FBQyxzQkFBc0I7b0JBQ3JELGFBQWEsRUFBRSw4QkFBYSxDQUFDLHNCQUFzQjtvQkFDbkQsV0FBVyxFQUNULFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSTt3QkFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUI7d0JBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCO29CQUM1QixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJO3dCQUMxQixDQUFDLENBQUMsRUFBRTt3QkFDSixDQUFDLENBQUM7NEJBQ0UsbUJBQW1CLEVBQ2pCLG9DQUFtQixDQUFDLDZCQUE2Qjt5QkFDcEQsQ0FBQztvQkFDTixvQkFBb0IsRUFBRSxjQUFjO2lCQUNyQyxDQUFBO2dCQUNELEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsZUFBZSxDQUFBO2dCQUN2QyxPQUFPLEdBQUcsQ0FBQTtZQUNaLENBQUMsRUFDRCxFQUFxQyxDQUN0QztTQUNKLENBQUMsQ0FBQTtRQUNGLE9BQU8sWUFBWSxDQUFBO0lBQ3JCLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsT0FBTyxJQUFJLDRCQUFXLENBQUMsSUFBSSxFQUFFLDJCQUEyQixFQUFFO1lBQ3hELG1CQUFtQixFQUFFLHlDQUF3QixDQUFDLEdBQUcsRUFBRTtZQUNuRCxjQUFjLEVBQUUsb0NBQW1CLENBQUMsU0FBUyxDQUMzQyxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxzQkFBc0IsRUFDdEIsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVix3QkFBd0IsQ0FDekI7WUFDRCxjQUFjLEVBQUUsb0NBQW1CLENBQUMsSUFBSSxFQUFFO1lBQzFDLFVBQVUsRUFBRSxlQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1QixNQUFNLEVBQUUsZUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDMUIsTUFBTSxFQUFFLGVBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3pCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsT0FBTyw0QkFBVyxDQUFDLGlCQUFpQixDQUFBO0lBQ3RDLENBQUM7O0FBaGZILGdDQWlmQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJmc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCB7IERuc1ZhbGlkYXRlZENlcnRpZmljYXRlLCBJQ2VydGlmaWNhdGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiXG5pbXBvcnQge1xuICBBbGxvd2VkTWV0aG9kcyxcbiAgdHlwZSBCZWhhdmlvck9wdGlvbnMsXG4gIENhY2hlQ29va2llQmVoYXZpb3IsXG4gIENhY2hlSGVhZGVyQmVoYXZpb3IsXG4gIENhY2hlUG9saWN5LFxuICBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IsXG4gIENhY2hlZE1ldGhvZHMsXG4gIERpc3RyaWJ1dGlvbixcbiAgdHlwZSBJQ2FjaGVQb2xpY3ksXG4gIHR5cGUgSU9yaWdpbixcbiAgVmlld2VyUHJvdG9jb2xQb2xpY3ksXG4gIEZ1bmN0aW9uRXZlbnRUeXBlLFxuICBPcmlnaW5SZXF1ZXN0UG9saWN5LFxuICBGdW5jdGlvbiBhcyBDbG91ZGZyb250RnVuY3Rpb24sXG4gIEZ1bmN0aW9uQ29kZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCJcbmltcG9ydCB7IEh0dHBPcmlnaW4sIFMzQnVja2V0T3JpZ2luIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnNcIlxuaW1wb3J0IHsgVGFibGVWMiBhcyBUYWJsZSwgQXR0cmlidXRlVHlwZSwgQmlsbGluZyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIlxuaW1wb3J0IHsgUnVsZSwgU2NoZWR1bGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiXG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHNcIlxuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIlxuaW1wb3J0IHtcbiAgQ29kZSxcbiAgRnVuY3Rpb24gYXMgQ2RrRnVuY3Rpb24sXG4gIHR5cGUgRnVuY3Rpb25PcHRpb25zLFxuICBGdW5jdGlvblVybEF1dGhUeXBlLFxuICBJbnZva2VNb2RlLFxuICBMb2dnaW5nRm9ybWF0LFxuICBSdW50aW1lLFxuICBBcmNoaXRlY3R1cmUsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCJcbmltcG9ydCB7IFNxc0V2ZW50U291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlc1wiXG5pbXBvcnQgeyBMb2dHcm91cCwgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiXG5pbXBvcnQgeyBBYWFhUmVjb3JkLCBBUmVjb3JkLCBJSG9zdGVkWm9uZSwgUmVjb3JkVGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCJcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiXG5pbXBvcnQgeyBCbG9ja1B1YmxpY0FjY2VzcywgQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiXG5pbXBvcnQgeyBCdWNrZXREZXBsb3ltZW50LCBTb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnRcIlxuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiXG5pbXBvcnQge1xuICBBbm5vdGF0aW9ucyxcbiAgQ3VzdG9tUmVzb3VyY2UsXG4gIER1cmF0aW9uLFxuICBGbixcbiAgUmVtb3ZhbFBvbGljeSxcbiAgU3RhY2ssXG59IGZyb20gXCJhd3MtY2RrLWxpYi9jb3JlXCJcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuXG50eXBlIEJhc2VGdW5jdGlvbiA9IHtcbiAgaGFuZGxlcjogc3RyaW5nXG4gIGJ1bmRsZTogc3RyaW5nXG59XG5cbnR5cGUgT3Blbk5leHRGdW5jdGlvbk9yaWdpbiA9IHtcbiAgdHlwZTogXCJmdW5jdGlvblwiXG4gIHN0cmVhbWluZz86IGJvb2xlYW5cbn0gJiBCYXNlRnVuY3Rpb25cblxudHlwZSBPcGVuTmV4dFMzT3JpZ2luID0ge1xuICB0eXBlOiBcInMzXCJcbiAgb3JpZ2luUGF0aDogc3RyaW5nXG4gIGNvcHk6IHtcbiAgICBmcm9tOiBzdHJpbmdcbiAgICB0bzogc3RyaW5nXG4gICAgY2FjaGVkOiBib29sZWFuXG4gICAgdmVyc2lvbmVkU3ViRGlyPzogc3RyaW5nXG4gIH1bXVxufVxuXG50eXBlIE9wZW5OZXh0T3JpZ2lucyA9IE9wZW5OZXh0RnVuY3Rpb25PcmlnaW4gfCBPcGVuTmV4dFMzT3JpZ2luXG5cbmludGVyZmFjZSBPcGVuTmV4dE91dHB1dCB7XG4gIGVkZ2VGdW5jdGlvbnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBCYXNlRnVuY3Rpb25cbiAgfVxuICBvcmlnaW5zOiB7XG4gICAgczM6IE9wZW5OZXh0UzNPcmlnaW5cbiAgICBkZWZhdWx0OiBPcGVuTmV4dEZ1bmN0aW9uT3JpZ2luXG4gICAgaW1hZ2VPcHRpbWl6ZXI6IE9wZW5OZXh0RnVuY3Rpb25PcmlnaW5cbiAgICBba2V5OiBzdHJpbmddOiBPcGVuTmV4dE9yaWdpbnNcbiAgfVxuICBiZWhhdmlvcnM6IHtcbiAgICBwYXR0ZXJuOiBzdHJpbmdcbiAgICBvcmlnaW4/OiBzdHJpbmdcbiAgICBlZGdlRnVuY3Rpb24/OiBzdHJpbmdcbiAgfVtdXG4gIGFkZGl0aW9uYWxQcm9wcz86IHtcbiAgICBkaXNhYmxlSW5jcmVtZW50YWxDYWNoZT86IGJvb2xlYW5cbiAgICBkaXNhYmxlVGFnQ2FjaGU/OiBib29sZWFuXG4gICAgaW5pdGlhbGl6YXRpb25GdW5jdGlvbj86IEJhc2VGdW5jdGlvblxuICAgIHdhcm1lcj86IEJhc2VGdW5jdGlvblxuICAgIHJldmFsaWRhdGlvbkZ1bmN0aW9uPzogQmFzZUZ1bmN0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgTGFtYmRhIGZ1bmN0aW9ucywgZXhjbHVkaW5nIGhhbmRsZXIgYW5kIGNvZGUgd2hpY2ggYXJlIHNldCBieSB0aGUgY29uc3RydWN0LlxuICogRXh0ZW5kcyBGdW5jdGlvbk9wdGlvbnMgYW5kIGFkZHMgcnVudGltZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0RnVuY3Rpb25Qcm9wcyBleHRlbmRzIEZ1bmN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcnVudGltZSBlbnZpcm9ubWVudCBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgUnVudGltZS5OT0RFSlNfMjRfWFxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZT86IFJ1bnRpbWVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRpb25Eb21haW5Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSB3ZWJzaXRlIFVSTCAoaWUuIGRvbWFpbi5jb20pLlxuICAgKlxuICAgKiBTdXBwb3J0cyBkb21haW5zIHRoYXQgYXJlIGhvc3RlZCBlaXRoZXIgb24gW1JvdXRlIDUzXShodHRwczovL2F3cy5hbWF6b24uY29tL3JvdXRlNTMvKSBvciBleHRlcm5hbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEltcG9ydCB0aGUgdW5kZXJseWluZyBSb3V0ZSA1MyBob3N0ZWQgem9uZS5cbiAgICpcbiAgICogUmVxdWlyZWQgaWYgYGNlcnRpZmljYXRlYCBpcyBub3QgcHJvdmlkZWQuIFdoZW4gcHJvdmlkZWQsIGEgRE5TLXZhbGlkYXRlZFxuICAgKiBjZXJ0aWZpY2F0ZSB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBhbmQgRE5TIGFsaWFzZXMgd2lsbCBiZSBzZXQgdXAuXG4gICAqL1xuICByZWFkb25seSBob3N0ZWRab25lPzogSUhvc3RlZFpvbmVcblxuICAvKipcbiAgICogVGhlIEFDTSBjZXJ0aWZpY2F0ZSB0byB1c2UgZm9yIHRoZSBjdXN0b20gZG9tYWluLlxuICAgKlxuICAgKiBSZXF1aXJlZCBpZiBgaG9zdGVkWm9uZWAgaXMgbm90IHByb3ZpZGVkLiBUaGUgY2VydGlmaWNhdGUgbXVzdCBiZSBpblxuICAgKiB1cy1lYXN0LTEgZm9yIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogV2hlbiBwcm92aWRlZCB3aXRob3V0IGBob3N0ZWRab25lYCwgbm8gRE5TIGFsaWFzZXMgd2lsbCBiZSBjcmVhdGVkXG4gICAqIGFuZCB5b3UgbXVzdCBjb25maWd1cmUgRE5TIHJlY29yZHMgZXh0ZXJuYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlPzogSUNlcnRpZmljYXRlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzU2l0ZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjdXN0b21Eb21haW4gZm9yIHRoaXMgd2Vic2l0ZS4gVGhpcyBkb21haW4gbXVzdCBiZSBob3N0ZWQgaW5cbiAgICogcm91dGU1MywgYW5kIHdlIG11c3QgYmUgYWJsZSB0byBjcmVhdGUgYW4gQUNNIGNlcnRpZmljYXRlIGZvciB0aGlzXG4gICAqIGRvbWFpbi5cbiAgICpcbiAgICogTm90ZSB0aGF0IHlvdSBjYW4gYWxzbyBtaWdyYXRlIGV4dGVybmFsbHkgaG9zdGVkIGRvbWFpbnMgdG8gUm91dGUgNTMgYnlcbiAgICogW2ZvbGxvd2luZyB0aGlzIGd1aWRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvTWlncmF0aW5nRE5TLmh0bWwpLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tRG9tYWluPzogRGlzdHJpYnV0aW9uRG9tYWluUHJvcHNcblxuICAvKipcbiAgICogU2hvdWxkIHBvaW50IHRvIHRoZSAub3Blbi1uZXh0IGRpcmVjdG9yeS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCIub3Blbi1uZXh0XCJcbiAgICovXG4gIHJlYWRvbmx5IG9wZW5OZXh0UGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHByb3BzIHRvIGFwcGx5IHRvIGFsbCBMYW1iZGEgZnVuY3Rpb25zIGNyZWF0ZWQgYnkgdGhpcyBjb25zdHJ1Y3QuXG4gICAqIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNwZWNpZmljIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEZ1bmN0aW9uUHJvcHM/OiBEZWZhdWx0RnVuY3Rpb25Qcm9wc1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHNlcnZlciBpbnN0YW5jZXMgdG8ga2VlcCB3YXJtLiBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSB3YXJtaW5nLlxuICAgKiBNdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoPj0gMSkgaWYgc3BlY2lmaWVkLiBWYWx1ZXMgPD0gMCB3aWxsIGRpc2FibGUgd2FybWluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKiBAZXhhbXBsZVxuICAgKiB3YXJtOiA1IC8vIEtlZXAgNSBjb25jdXJyZW50IGluc3RhbmNlcyB3YXJtXG4gICAqIHdhcm06IGZhbHNlIC8vIERpc2FibGUgd2FybWluZ1xuICAgKi9cbiAgcmVhZG9ubHkgd2FybT86IG51bWJlciB8IGZhbHNlXG5cbiAgLyoqXG4gICAqIEhvdyBvZnRlbiB0byBpbnZva2UgdGhlIHdhcm1lciBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcyg1KVxuICAgKiBAZXhhbXBsZVxuICAgKiB3YXJtZXJJbnRlcnZhbDogRHVyYXRpb24ubWludXRlcygxMClcbiAgICovXG4gIHJlYWRvbmx5IHdhcm1lckludGVydmFsPzogRHVyYXRpb25cblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnZva2UgdGhlIHdhcm1lciBmdW5jdGlvbiBpbW1lZGlhdGVseSBhZnRlciBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBleGFtcGxlXG4gICAqIHByZXdhcm1PbkRlcGxveTogZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByZXdhcm1PbkRlcGxveT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNsYXNzIE5leHRqc1NpdGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIG9wZW5OZXh0T3V0cHV0OiBPcGVuTmV4dE91dHB1dFxuICBwcml2YXRlIGJ1Y2tldDogQnVja2V0XG4gIHByaXZhdGUgdGFibGU6IFRhYmxlXG4gIHByaXZhdGUgcXVldWU6IFF1ZXVlXG5cbiAgcHJpdmF0ZSBzdGF0aWNDYWNoZVBvbGljeTogSUNhY2hlUG9saWN5XG4gIHByaXZhdGUgc2VydmVyQ2FjaGVQb2xpY3k6IENhY2hlUG9saWN5XG5cbiAgcHJpdmF0ZSBvcGVuTmV4dFBhdGg6IHN0cmluZ1xuXG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb246IERpc3RyaWJ1dGlvblxuICBwcml2YXRlIF9kZWZhdWx0U2VydmVyRnVuY3Rpb24hOiBDZGtGdW5jdGlvblxuICBwcml2YXRlIF9jdXN0b21Eb21haW5OYW1lPzogc3RyaW5nXG4gIHByaXZhdGUgd2FybWVyRnVuY3Rpb24/OiBDZGtGdW5jdGlvblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNTaXRlUHJvcHNcblxuICBwdWJsaWMgZ2V0IGRlZmF1bHRTZXJ2ZXJGdW5jdGlvbigpOiBDZGtGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRTZXJ2ZXJGdW5jdGlvblxuICB9XG5cbiAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGh0dHBzOi8vJHt0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lfWBcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VzdG9tRG9tYWluVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbURvbWFpbk5hbWVcbiAgICAgID8gYGh0dHBzOi8vJHt0aGlzLl9jdXN0b21Eb21haW5OYW1lfWBcbiAgICAgIDogYGh0dHBzOi8vJHt0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lfWBcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXh0anNTaXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gICAgdGhpcy5vcGVuTmV4dFBhdGggPSBwcm9wcy5vcGVuTmV4dFBhdGggPz8gXCIub3Blbi1uZXh0XCJcbiAgICB0aGlzLm9wZW5OZXh0T3V0cHV0ID0gSlNPTi5wYXJzZShcbiAgICAgIHJlYWRGaWxlU3luYyhwYXRoLmpvaW4odGhpcy5vcGVuTmV4dFBhdGgsIFwib3Blbi1uZXh0Lm91dHB1dC5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKSBhcyBPcGVuTmV4dE91dHB1dFxuXG4gICAgdGhpcy5fY3VzdG9tRG9tYWluTmFtZSA9IHByb3BzLmN1c3RvbURvbWFpbj8uZG9tYWluTmFtZVxuXG4gICAgLy8gVmFsaWRhdGUgY3VzdG9tRG9tYWluIHByb3BzOiBlaXRoZXIgY2VydGlmaWNhdGUgb3IgaG9zdGVkWm9uZSBtdXN0IGJlIHByb3ZpZGVkXG4gICAgaWYgKFxuICAgICAgcHJvcHMuY3VzdG9tRG9tYWluICYmXG4gICAgICAhcHJvcHMuY3VzdG9tRG9tYWluLmNlcnRpZmljYXRlICYmXG4gICAgICAhcHJvcHMuY3VzdG9tRG9tYWluLmhvc3RlZFpvbmVcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJjdXN0b21Eb21haW4gcmVxdWlyZXMgZWl0aGVyIGEgY2VydGlmaWNhdGUgb3IgYSBob3N0ZWRab25lLiBcIiArXG4gICAgICAgICAgXCJQcm92aWRlIGEgaG9zdGVkWm9uZSB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIEROUy12YWxpZGF0ZWQgY2VydGlmaWNhdGUsIFwiICtcbiAgICAgICAgICBcIm9yIHByb3ZpZGUgeW91ciBvd24gY2VydGlmaWNhdGUuXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBCdWNrZXQodGhpcywgXCJTM0J1Y2tldFwiLCB7XG4gICAgICBwdWJsaWNSZWFkQWNjZXNzOiBmYWxzZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgfSlcbiAgICB0aGlzLnRhYmxlID0gdGhpcy5jcmVhdGVSZXZhbGlkYXRpb25UYWJsZSgpXG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMuY3JlYXRlUmV2YWxpZGF0aW9uUXVldWUoKVxuXG4gICAgLy8gVXNlIHByb3ZpZGVkIGNlcnRpZmljYXRlIG9yIGNyZWF0ZSBvbmUgaWYgaG9zdGVkWm9uZSBpcyBhdmFpbGFibGVcbiAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9XG4gICAgICBwcm9wcy5jdXN0b21Eb21haW4/LmNlcnRpZmljYXRlID8/XG4gICAgICAocHJvcHMuY3VzdG9tRG9tYWluPy5ob3N0ZWRab25lXG4gICAgICAgID8gdGhpcy5jcmVhdGVDZXJ0aWZpY2F0ZShcbiAgICAgICAgICAgIHByb3BzLmN1c3RvbURvbWFpbi5kb21haW5OYW1lLFxuICAgICAgICAgICAgcHJvcHMuY3VzdG9tRG9tYWluLmhvc3RlZFpvbmVcbiAgICAgICAgICApXG4gICAgICAgIDogdW5kZWZpbmVkKVxuXG4gICAgY29uc3Qgb3JpZ2lucyA9IHRoaXMuY3JlYXRlT3JpZ2lucyhwcm9wcy5kZWZhdWx0RnVuY3Rpb25Qcm9wcylcbiAgICB0aGlzLnNlcnZlckNhY2hlUG9saWN5ID0gdGhpcy5jcmVhdGVTZXJ2ZXJDYWNoZVBvbGljeSgpXG4gICAgdGhpcy5zdGF0aWNDYWNoZVBvbGljeSA9IHRoaXMuY3JlYXRlU3RhdGljQ2FjaGVQb2xpY3koKVxuICAgIHRoaXMuZGlzdHJpYnV0aW9uID0gdGhpcy5jcmVhdGVEaXN0cmlidXRpb24ob3JpZ2lucywgcHJvcHMsIGNlcnRpZmljYXRlKVxuICAgIHRoaXMuY3JlYXRlV2FybWVyKClcbiAgICBpZiAocHJvcHMuY3VzdG9tRG9tYWluICYmIHByb3BzLmN1c3RvbURvbWFpbi5ob3N0ZWRab25lKSB7XG4gICAgICBuZXcgQVJlY29yZCh0aGlzLCBcIkFsaWFzUmVjb3JkXCIsIHtcbiAgICAgICAgem9uZTogcHJvcHMuY3VzdG9tRG9tYWluLmhvc3RlZFpvbmUsXG4gICAgICAgIHJlY29yZE5hbWU6IHByb3BzLmN1c3RvbURvbWFpbi5kb21haW5OYW1lLFxuICAgICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IENsb3VkRnJvbnRUYXJnZXQodGhpcy5kaXN0cmlidXRpb24pKSxcbiAgICAgIH0pXG5cbiAgICAgIG5ldyBBYWFhUmVjb3JkKHRoaXMsIFwiQWxpYXNSZWNvcmRBQUFBXCIsIHtcbiAgICAgICAgem9uZTogcHJvcHMuY3VzdG9tRG9tYWluLmhvc3RlZFpvbmUsXG4gICAgICAgIHJlY29yZE5hbWU6IHByb3BzLmN1c3RvbURvbWFpbi5kb21haW5OYW1lLFxuICAgICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IENsb3VkRnJvbnRUYXJnZXQodGhpcy5kaXN0cmlidXRpb24pKSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDZXJ0aWZpY2F0ZShkb21haW5OYW1lOiBzdHJpbmcsIGhvc3RlZFpvbmU6IElIb3N0ZWRab25lKSB7XG4gICAgLy8gQ2xvdWRGcm9udCByZXF1aXJlcyBjZXJ0aWZpY2F0ZXMgdG8gYmUgaW4gdXMtZWFzdC0xXG4gICAgLy8gRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUgaGFuZGxlcyBjcm9zcy1yZWdpb24gY2VydGlmaWNhdGUgY3JlYXRpb24gYXV0b21hdGljYWxseVxuICAgIHJldHVybiBuZXcgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUodGhpcywgXCJDZXJ0aWZpY2F0ZVwiLCB7XG4gICAgICBkb21haW5OYW1lLFxuICAgICAgaG9zdGVkWm9uZSxcbiAgICAgIHJlZ2lvbjogXCJ1cy1lYXN0LTFcIixcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25UYWJsZSgpIHtcbiAgICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZSh0aGlzLCBcIlJldmFsaWRhdGlvblRhYmxlXCIsIHtcbiAgICAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcInRhZ1wiLCB0eXBlOiBBdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgc29ydEtleTogeyBuYW1lOiBcInBhdGhcIiwgdHlwZTogQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgIHBvaW50SW5UaW1lUmVjb3ZlcnlTcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgIHBvaW50SW5UaW1lUmVjb3ZlcnlFbmFibGVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGJpbGxpbmc6IEJpbGxpbmcub25EZW1hbmQoKSxcbiAgICAgIGdsb2JhbFNlY29uZGFyeUluZGV4ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGluZGV4TmFtZTogXCJyZXZhbGlkYXRlXCIsXG4gICAgICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwicGF0aFwiLCB0eXBlOiBBdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgICAgIHNvcnRLZXk6IHsgbmFtZTogXCJyZXZhbGlkYXRlZEF0XCIsIHR5cGU6IEF0dHJpYnV0ZVR5cGUuTlVNQkVSIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pXG5cbiAgICBjb25zdCBpbml0Rm4gPSB0aGlzLm9wZW5OZXh0T3V0cHV0LmFkZGl0aW9uYWxQcm9wcz8uaW5pdGlhbGl6YXRpb25GdW5jdGlvblxuXG4gICAgY29uc3QgaW5zZXJ0Rm4gPSBuZXcgQ2RrRnVuY3Rpb24odGhpcywgXCJSZXZhbGlkYXRpb25JbnNlcnRGdW5jdGlvblwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJOZXh0LmpzIHJldmFsaWRhdGlvbiBkYXRhIGluc2VydFwiLFxuICAgICAgaGFuZGxlcjogaW5pdEZuPy5oYW5kbGVyID8/IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgLy8gY29kZTogQ29kZS5mcm9tQXNzZXQoaW5pdEZuPy5idW5kbGUgPz8gXCJcIiksXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4odGhpcy5vcGVuTmV4dFBhdGgsIFwiZHluYW1vZGItcHJvdmlkZXJcIikpLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjRfWCxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQ0FDSEVfRFlOQU1PX1RBQkxFOiB0YWJsZS50YWJsZU5hbWUsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBjb25zdCBwcm92aWRlckxvZ0dyb3VwID0gbmV3IExvZ0dyb3VwKHRoaXMsIFwiUmV2YWxpZGF0aW9uUHJvdmlkZXJMb2dHcm91cFwiLCB7XG4gICAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX0RBWSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KVxuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgXCJSZXZhbGlkYXRpb25Qcm92aWRlclwiLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogaW5zZXJ0Rm4sXG4gICAgICBsb2dHcm91cDogcHJvdmlkZXJMb2dHcm91cCxcbiAgICB9KVxuXG4gICAgbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiUmV2YWxpZGF0aW9uUmVzb3VyY2VcIiwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZlcnNpb246IERhdGUubm93KCkudG9TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHJldHVybiB0YWJsZVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPcmlnaW5zKGRlZmF1bHRGdW5jdGlvblByb3BzPzogRGVmYXVsdEZ1bmN0aW9uUHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzMzogczNPcmlnaW4sXG4gICAgICBkZWZhdWx0OiBkZWZhdWx0T3JpZ2luLFxuICAgICAgaW1hZ2VPcHRpbWl6ZXI6IGltYWdlT3JpZ2luLFxuICAgICAgLi4ucmVzdE9yaWdpbnNcbiAgICB9ID0gdGhpcy5vcGVuTmV4dE91dHB1dC5vcmlnaW5zXG4gICAgZm9yIChjb25zdCBjb3B5IG9mIHMzT3JpZ2luLmNvcHkpIHtcbiAgICAgIG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMsIGBPcGVuTmV4dEJ1Y2tldERlcGxveW1lbnQke2NvcHkuZnJvbX1gLCB7XG4gICAgICAgIHNvdXJjZXM6IFtTb3VyY2UuYXNzZXQocGF0aC5qb2luKHRoaXMub3Blbk5leHRQYXRoLCBcIi4uXCIsIGNvcHkuZnJvbSkpXSxcbiAgICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IHRoaXMuYnVja2V0LFxuICAgICAgICBkZXN0aW5hdGlvbktleVByZWZpeDogY29weS50byxcbiAgICAgICAgcHJ1bmU6IGZhbHNlLFxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2lucyA9IHtcbiAgICAgIHMzOiBTM0J1Y2tldE9yaWdpbi53aXRoT3JpZ2luQWNjZXNzQ29udHJvbCh0aGlzLmJ1Y2tldCwge1xuICAgICAgICBvcmlnaW5JZDogXCJTM0J1Y2tldFwiLFxuICAgICAgICBvcmlnaW5QYXRoOiBzM09yaWdpbi5vcmlnaW5QYXRoLFxuICAgICAgfSksXG4gICAgICBkZWZhdWx0OiB0aGlzLmNyZWF0ZUZ1bmN0aW9uT3JpZ2luKFxuICAgICAgICBcImRlZmF1bHRcIixcbiAgICAgICAgZGVmYXVsdE9yaWdpbixcbiAgICAgICAgXCJOZXh0SnNTZXJ2ZXJcIixcbiAgICAgICAgZGVmYXVsdEZ1bmN0aW9uUHJvcHNcbiAgICAgICksXG4gICAgICBpbWFnZU9wdGltaXplcjogdGhpcy5jcmVhdGVGdW5jdGlvbk9yaWdpbihcbiAgICAgICAgXCJpbWFnZU9wdGltaXplclwiLFxuICAgICAgICBpbWFnZU9yaWdpbixcbiAgICAgICAgXCJJbWFnZU9wdGltaXplclwiXG4gICAgICApLFxuICAgICAgLi4uT2JqZWN0LmVudHJpZXMocmVzdE9yaWdpbnMpLnJlZHVjZShcbiAgICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luSWQgPSBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSlcbiAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHRoaXMuY3JlYXRlRnVuY3Rpb25PcmlnaW4oa2V5LCB2YWx1ZSwgb3JpZ2luSWQpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgfSxcbiAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgSHR0cE9yaWdpbj5cbiAgICAgICksXG4gICAgfVxuICAgIHJldHVybiBvcmlnaW5zXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJldmFsaWRhdGlvblF1ZXVlKCkge1xuICAgIGNvbnN0IHF1ZXVlID0gbmV3IFF1ZXVlKHRoaXMsIFwiUmV2YWxpZGF0aW9uUXVldWVcIiwge1xuICAgICAgZmlmbzogdHJ1ZSxcbiAgICAgIHJlY2VpdmVNZXNzYWdlV2FpdFRpbWU6IER1cmF0aW9uLnNlY29uZHMoMjApLFxuICAgIH0pXG4gICAgY29uc3QgY29uc3VtZXIgPSBuZXcgQ2RrRnVuY3Rpb24odGhpcywgXCJSZXZhbGlkYXRpb25GdW5jdGlvblwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJOZXh0LmpzIHJldmFsaWRhdG9yXCIsXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICB0aGlzLm9wZW5OZXh0T3V0cHV0LmFkZGl0aW9uYWxQcm9wcz8ucmV2YWxpZGF0aW9uRnVuY3Rpb24/LmJ1bmRsZVxuICAgICAgICAgID8gcGF0aC5qb2luKFxuICAgICAgICAgICAgICB0aGlzLm9wZW5OZXh0UGF0aCxcbiAgICAgICAgICAgICAgXCIuLlwiLFxuICAgICAgICAgICAgICB0aGlzLm9wZW5OZXh0T3V0cHV0LmFkZGl0aW9uYWxQcm9wcz8ucmV2YWxpZGF0aW9uRnVuY3Rpb24/LmJ1bmRsZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogXCJcIlxuICAgICAgKSxcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzI0X1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgIGxvZ2dpbmdGb3JtYXQ6IExvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICB9KVxuICAgIGNvbnN1bWVyLmFkZEV2ZW50U291cmNlKG5ldyBTcXNFdmVudFNvdXJjZShxdWV1ZSwgeyBiYXRjaFNpemU6IDUgfSkpXG4gICAgcmV0dXJuIHF1ZXVlXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdhcm1lcigpIHtcbiAgICAvLyBEZWZhdWx0OiB3YXJtOiAxLCB1c2VycyBjYW4gZGlzYWJsZSB3aXRoIHdhcm06IGZhbHNlXG4gICAgY29uc3Qgd2FybUNvbmN1cnJlbmN5ID0gdGhpcy5wcm9wcy53YXJtID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6ICh0aGlzLnByb3BzLndhcm0gPz8gMSlcblxuICAgIC8vIFNraXAgaWYgd2FybWluZyBpcyBkaXNhYmxlZCBvciBpbnZhbGlkXG4gICAgaWYgKCF3YXJtQ29uY3VycmVuY3kgfHwgd2FybUNvbmN1cnJlbmN5IDw9IDApIHJldHVyblxuXG4gICAgLy8gR2V0IHdhcm1lciBidW5kbGUgZnJvbSBPcGVuTmV4dFxuICAgIGNvbnN0IHdhcm1lciA9IHRoaXMub3Blbk5leHRPdXRwdXQuYWRkaXRpb25hbFByb3BzPy53YXJtZXJcbiAgICBpZiAoIXdhcm1lcikge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgXCJXYXJtaW5nIGlzIGVuYWJsZWQgYnV0IE9wZW5OZXh0IGRpZCBub3QgcHJvdmlkZSBhIHdhcm1lciBidW5kbGUuIFwiICtcbiAgICAgICAgICBcIlNraXBwaW5nIHdhcm1lciBjcmVhdGlvbi4gRW5zdXJlIHlvdSdyZSB1c2luZyBPcGVuTmV4dCAzLngrIHdpdGggd2FybWluZyBzdXBwb3J0LlwiXG4gICAgICApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB3YXJtZXJCdW5kbGUgPSBwYXRoLmpvaW4odGhpcy5vcGVuTmV4dFBhdGgsIFwiLi5cIiwgd2FybWVyLmJ1bmRsZSlcbiAgICBjb25zdCB3YXJtZXJIYW5kbGVyID0gd2FybWVyLmhhbmRsZXJcblxuICAgIC8vIENvbmZpZ3VyZSBXQVJNX1BBUkFNU1xuICAgIGNvbnN0IHdhcm1QYXJhbXMgPSBbXG4gICAgICB7XG4gICAgICAgIGNvbmN1cnJlbmN5OiB3YXJtQ29uY3VycmVuY3ksXG4gICAgICAgIGZ1bmN0aW9uOiB0aGlzLl9kZWZhdWx0U2VydmVyRnVuY3Rpb24uZnVuY3Rpb25OYW1lLFxuICAgICAgfSxcbiAgICBdXG5cbiAgICAvLyBDcmVhdGUgd2FybWVyIExhbWJkYVxuICAgIHRoaXMud2FybWVyRnVuY3Rpb24gPSBuZXcgQ2RrRnVuY3Rpb24odGhpcywgXCJXYXJtZXJGdW5jdGlvblwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJOZXh0LmpzIHdhcm1lclwiLFxuICAgICAgaGFuZGxlcjogd2FybWVySGFuZGxlcixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHdhcm1lckJ1bmRsZSksXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yNF9YLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgIGxvZ2dpbmdGb3JtYXQ6IExvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFdBUk1fUEFSQU1TOiBKU09OLnN0cmluZ2lmeSh3YXJtUGFyYW1zKSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIC8vIEdyYW50IGludm9rZSBwZXJtaXNzaW9uc1xuICAgIHRoaXMuX2RlZmF1bHRTZXJ2ZXJGdW5jdGlvbi5ncmFudEludm9rZSh0aGlzLndhcm1lckZ1bmN0aW9uKVxuICAgIHRoaXMuX2RlZmF1bHRTZXJ2ZXJGdW5jdGlvbi5hZGRFbnZpcm9ubWVudChcIldBUk1FUl9FTkFCTEVEXCIsIFwidHJ1ZVwiKVxuXG4gICAgLy8gQ3JlYXRlIEV2ZW50QnJpZGdlIHJ1bGVcbiAgICBjb25zdCBpbnRlcnZhbCA9IHRoaXMucHJvcHMud2FybWVySW50ZXJ2YWwgPz8gRHVyYXRpb24ubWludXRlcyg1KVxuICAgIG5ldyBSdWxlKHRoaXMsIFwiV2FybWVyUnVsZVwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogYEludm9rZSB3YXJtZXIgZXZlcnkgJHtpbnRlcnZhbC50b01pbnV0ZXMoKX0gbWludXRlc2AsXG4gICAgICBzY2hlZHVsZTogU2NoZWR1bGUucmF0ZShpbnRlcnZhbCksXG4gICAgICB0YXJnZXRzOiBbbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMud2FybWVyRnVuY3Rpb24sIHsgcmV0cnlBdHRlbXB0czogMCB9KV0sXG4gICAgfSlcblxuICAgIC8vIENyZWF0ZSBwcmUtd2FybWVyIGlmIGVuYWJsZWQgKGRlZmF1bHQ6IHRydWUpXG4gICAgaWYgKHRoaXMucHJvcHMucHJld2FybU9uRGVwbG95ICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgcHJld2FybWVyTG9nR3JvdXAgPSBuZXcgTG9nR3JvdXAodGhpcywgXCJQcmV3YXJtZXJMb2dHcm91cFwiLCB7XG4gICAgICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5PTkVfREFZLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBwcmV3YXJtZXJGbiA9IG5ldyBDZGtGdW5jdGlvbih0aGlzLCBcIlByZXdhcm1lckZ1bmN0aW9uXCIsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IFwiTmV4dC5qcyBwcmUtd2FybWVyXCIsXG4gICAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgICBjb2RlOiBDb2RlLmZyb21JbmxpbmUoYFxuICAgICAgICAgIGNvbnN0IHsgTGFtYmRhQ2xpZW50LCBJbnZva2VDb21tYW5kIH0gPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LWxhbWJkYVwiKVxuICAgICAgICAgIGNvbnN0IGxhbWJkYSA9IG5ldyBMYW1iZGFDbGllbnQoe30pXG5cbiAgICAgICAgICBleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gXCJEZWxldGVcIikge1xuICAgICAgICAgICAgICByZXR1cm4geyBQaHlzaWNhbFJlc291cmNlSWQ6IFwicHJld2FybWVyXCIgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBsYW1iZGEuc2VuZChcbiAgICAgICAgICAgICAgICBuZXcgSW52b2tlQ29tbWFuZCh7XG4gICAgICAgICAgICAgICAgICBGdW5jdGlvbk5hbWU6IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5GdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICBJbnZvY2F0aW9uVHlwZTogXCJSZXF1ZXN0UmVzcG9uc2VcIixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUHJlLXdhcm1pbmcgZmFpbGVkOlwiLCBlcnJvcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHsgUGh5c2ljYWxSZXNvdXJjZUlkOiBcInByZXdhcm1lclwiIH1cbiAgICAgICAgICB9XG4gICAgICAgIGApLFxuICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yNF9YLFxuICAgICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMiksXG4gICAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgICAgbG9nZ2luZ0Zvcm1hdDogTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgICAgICBsb2dHcm91cDogcHJld2FybWVyTG9nR3JvdXAsXG4gICAgICB9KVxuXG4gICAgICB0aGlzLndhcm1lckZ1bmN0aW9uLmdyYW50SW52b2tlKHByZXdhcm1lckZuKVxuXG4gICAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCBcIlByZXdhcm1lclByb3ZpZGVyXCIsIHtcbiAgICAgICAgb25FdmVudEhhbmRsZXI6IHByZXdhcm1lckZuLFxuICAgICAgICBsb2dHcm91cDogcHJld2FybWVyTG9nR3JvdXAsXG4gICAgICB9KVxuXG4gICAgICAvLyBDcmVhdGUgYSBkZXRlcm1pbmlzdGljIHZlcnNpb24gaGFzaCBiYXNlZCBvbiB3YXJtZXIgY29uZmlndXJhdGlvblxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHByZS13YXJtaW5nIG9ubHkgdHJpZ2dlcnMgd2hlbiBjb25maWcgYWN0dWFsbHkgY2hhbmdlc1xuICAgICAgY29uc3QgY29uZmlnSGFzaCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAgICAgLnVwZGF0ZShcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBjb25jdXJyZW5jeTogd2FybUNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgaW50ZXJ2YWw6IGludGVydmFsLnRvTWludXRlcygpLFxuICAgICAgICAgICAgcHJld2FybUVuYWJsZWQ6IHRoaXMucHJvcHMucHJld2FybU9uRGVwbG95LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmRpZ2VzdChcImhleFwiKVxuICAgICAgICAuc3Vic3RyaW5nKDAsIDE2KSAvLyBUcnVuY2F0ZSBmb3IgcmVhZGFiaWxpdHlcblxuICAgICAgbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiUHJld2FybWVyUmVzb3VyY2VcIiwge1xuICAgICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIEZ1bmN0aW9uTmFtZTogdGhpcy53YXJtZXJGdW5jdGlvbi5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgVmVyc2lvbjogY29uZmlnSGFzaCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbnZpcm9ubWVudCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgQ0FDSEVfQlVDS0VUX05BTUU6IHRoaXMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICBDQUNIRV9CVUNLRVRfS0VZX1BSRUZJWDogXCJfY2FjaGVcIixcbiAgICAgIENBQ0hFX0JVQ0tFVF9SRUdJT046IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbixcbiAgICAgIFJFVkFMSURBVElPTl9RVUVVRV9VUkw6IHRoaXMucXVldWUucXVldWVVcmwsXG4gICAgICBSRVZBTElEQVRJT05fUVVFVUVfUkVHSU9OOiBTdGFjay5vZih0aGlzKS5yZWdpb24sXG4gICAgICBDQUNIRV9EWU5BTU9fVEFCTEU6IHRoaXMudGFibGUudGFibGVOYW1lLFxuICAgICAgLy8gVGhvc2UgMiBhcmUgdXNlZCBvbmx5IGZvciBpbWFnZSBvcHRpbWl6ZXJcbiAgICAgIEJVQ0tFVF9OQU1FOiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgQlVDS0VUX0tFWV9QUkVGSVg6IFwiX2Fzc2V0c1wiLFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRQZXJtaXNzaW9ucyhncmFudGFibGU6IElHcmFudGFibGUpIHtcbiAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShncmFudGFibGUpXG4gICAgdGhpcy50YWJsZS5ncmFudFJlYWRXcml0ZURhdGEoZ3JhbnRhYmxlKVxuICAgIHRoaXMucXVldWUuZ3JhbnRTZW5kTWVzc2FnZXMoZ3JhbnRhYmxlKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGdW5jdGlvbk9yaWdpbihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBvcmlnaW46IE9wZW5OZXh0RnVuY3Rpb25PcmlnaW4sXG4gICAgb3JpZ2luSWQ/OiBzdHJpbmcsXG4gICAgZm5Qcm9wcz86IERlZmF1bHRGdW5jdGlvblByb3BzXG4gICkge1xuICAgIGNvbnN0IGVudmlyb25tZW50ID0gdGhpcy5nZXRFbnZpcm9ubWVudCgpXG4gICAgY29uc3QgZm4gPSBuZXcgQ2RrRnVuY3Rpb24odGhpcywgYCR7a2V5fUZ1bmN0aW9uYCwge1xuICAgICAgLi4uZm5Qcm9wcyxcbiAgICAgIHJ1bnRpbWU6IGZuUHJvcHM/LnJ1bnRpbWUgPz8gUnVudGltZS5OT0RFSlNfMjRfWCxcbiAgICAgIGFyY2hpdGVjdHVyZTogZm5Qcm9wcz8uYXJjaGl0ZWN0dXJlID8/IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplOiBmblByb3BzPy5tZW1vcnlTaXplID8/IDEwMjQsXG4gICAgICBsb2dnaW5nRm9ybWF0OiBmblByb3BzPy5sb2dnaW5nRm9ybWF0ID8/IExvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIGhhbmRsZXI6IG9yaWdpbi5oYW5kbGVyLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKHRoaXMub3Blbk5leHRQYXRoLCBcIi4uXCIsIG9yaWdpbi5idW5kbGUpKSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIC4uLmZuUHJvcHM/LmVudmlyb25tZW50LFxuICAgICAgICAuLi5lbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBjb25zdCBmblVybCA9IGZuLmFkZEZ1bmN0aW9uVXJsKHtcbiAgICAgIGF1dGhUeXBlOiBGdW5jdGlvblVybEF1dGhUeXBlLk5PTkUsXG4gICAgICBpbnZva2VNb2RlOiBvcmlnaW4uc3RyZWFtaW5nID8gSW52b2tlTW9kZS5SRVNQT05TRV9TVFJFQU0gOiBJbnZva2VNb2RlLkJVRkZFUkVELFxuICAgIH0pXG4gICAgdGhpcy5ncmFudFBlcm1pc3Npb25zKGZuKVxuXG4gICAgLy8gU3RvcmUgcmVmZXJlbmNlIHRvIGRlZmF1bHQgc2VydmVyIGZ1bmN0aW9uXG4gICAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRTZXJ2ZXJGdW5jdGlvbiA9IGZuXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBIdHRwT3JpZ2luKEZuLnBhcnNlRG9tYWluTmFtZShmblVybC51cmwpLCB7XG4gICAgICAuLi4ob3JpZ2luSWQgPyB7IG9yaWdpbklkIH0gOiB7fSksXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGlzdHJpYnV0aW9uKFxuICAgIG9yaWdpbnM6IFJlY29yZDxzdHJpbmcsIElPcmlnaW4+LFxuICAgIHByb3BzOiBOZXh0anNTaXRlUHJvcHMsXG4gICAgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGVcbiAgKSB7XG4gICAgY29uc3QgY2xvdWRmcm9udEZ1bmN0aW9uID0gbmV3IENsb3VkZnJvbnRGdW5jdGlvbih0aGlzLCBcIkNsb3VkRnJvbnRGdW5jdGlvblwiLCB7XG4gICAgICBjb2RlOiBGdW5jdGlvbkNvZGUuZnJvbUlubGluZShgXG5cdFx0XHRmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG5cdFx0XHRcdHZhciByZXF1ZXN0ID0gZXZlbnQucmVxdWVzdDtcblx0XHRcdFx0cmVxdWVzdC5oZWFkZXJzW1wieC1mb3J3YXJkZWQtaG9zdFwiXSA9IHJlcXVlc3QuaGVhZGVycy5ob3N0O1xuXHRcdFx0XHRyZXR1cm4gcmVxdWVzdDtcblx0XHRcdH1cblx0XHRcdGApLFxuICAgIH0pXG4gICAgY29uc3QgZm5Bc3NvY2lhdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGZ1bmN0aW9uOiBjbG91ZGZyb250RnVuY3Rpb24sXG4gICAgICAgIGV2ZW50VHlwZTogRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICB9LFxuICAgIF1cblxuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbiA9IG5ldyBEaXN0cmlidXRpb24odGhpcywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgZG9tYWluTmFtZXM6IHByb3BzLmN1c3RvbURvbWFpbiA/IFtwcm9wcy5jdXN0b21Eb21haW4uZG9tYWluTmFtZV0gOiB1bmRlZmluZWQsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICBvcmlnaW46IG9yaWdpbnMuZGVmYXVsdCEsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19BTEwsXG4gICAgICAgIGNhY2hlZE1ldGhvZHM6IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgY2FjaGVQb2xpY3k6IHRoaXMuc2VydmVyQ2FjaGVQb2xpY3ksXG4gICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IE9yaWdpblJlcXVlc3RQb2xpY3kuQUxMX1ZJRVdFUl9FWENFUFRfSE9TVF9IRUFERVIsXG4gICAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiBmbkFzc29jaWF0aW9ucyxcbiAgICAgIH0sXG4gICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzOiB0aGlzLm9wZW5OZXh0T3V0cHV0LmJlaGF2aW9yc1xuICAgICAgICAuZmlsdGVyKChiKSA9PiBiLnBhdHRlcm4gIT09IFwiKlwiKVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChhY2MsIGJlaGF2aW9yKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiZWhhdmlvck9wdGlvbnM6IEJlaGF2aW9yT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgb3JpZ2luOiAoYmVoYXZpb3Iub3JpZ2luID8gb3JpZ2luc1tiZWhhdmlvci5vcmlnaW5dIDogb3JpZ2lucy5kZWZhdWx0KSEsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgICAgICAgICBjYWNoZWRNZXRob2RzOiBDYWNoZWRNZXRob2RzLkNBQ0hFX0dFVF9IRUFEX09QVElPTlMsXG4gICAgICAgICAgICAgIGNhY2hlUG9saWN5OlxuICAgICAgICAgICAgICAgIGJlaGF2aW9yLm9yaWdpbiA9PT0gXCJzM1wiXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc3RhdGljQ2FjaGVQb2xpY3lcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXJ2ZXJDYWNoZVBvbGljeSxcbiAgICAgICAgICAgICAgLi4uKGJlaGF2aW9yLm9yaWdpbiA9PT0gXCJzM1wiXG4gICAgICAgICAgICAgICAgPyB7fVxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OlxuICAgICAgICAgICAgICAgICAgICAgIE9yaWdpblJlcXVlc3RQb2xpY3kuQUxMX1ZJRVdFUl9FWENFUFRfSE9TVF9IRUFERVIsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IGZuQXNzb2NpYXRpb25zLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWNjW2JlaGF2aW9yLnBhdHRlcm5dID0gYmVoYXZpb3JPcHRpb25zXG4gICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBCZWhhdmlvck9wdGlvbnM+XG4gICAgICAgICksXG4gICAgfSlcbiAgICByZXR1cm4gZGlzdHJpYnV0aW9uXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlcnZlckNhY2hlUG9saWN5KCkge1xuICAgIHJldHVybiBuZXcgQ2FjaGVQb2xpY3kodGhpcywgXCJPcGVuTmV4dFNlcnZlckNhY2hlUG9saWN5XCIsIHtcbiAgICAgIHF1ZXJ5U3RyaW5nQmVoYXZpb3I6IENhY2hlUXVlcnlTdHJpbmdCZWhhdmlvci5hbGwoKSxcbiAgICAgIGhlYWRlckJlaGF2aW9yOiBDYWNoZUhlYWRlckJlaGF2aW9yLmFsbG93TGlzdChcbiAgICAgICAgXCJhY2NlcHRcIixcbiAgICAgICAgXCJhY2NlcHQtZW5jb2RpbmdcIixcbiAgICAgICAgXCJyc2NcIixcbiAgICAgICAgXCJuZXh0LXJvdXRlci1wcmVmZXRjaFwiLFxuICAgICAgICBcIm5leHQtcm91dGVyLXN0YXRlLXRyZWVcIixcbiAgICAgICAgXCJuZXh0LXVybFwiLFxuICAgICAgICBcIngtcHJlcmVuZGVyLXJldmFsaWRhdGVcIlxuICAgICAgKSxcbiAgICAgIGNvb2tpZUJlaGF2aW9yOiBDYWNoZUNvb2tpZUJlaGF2aW9yLm5vbmUoKSxcbiAgICAgIGRlZmF1bHRUdGw6IER1cmF0aW9uLmRheXMoMCksXG4gICAgICBtYXhUdGw6IER1cmF0aW9uLmRheXMoMzY1KSxcbiAgICAgIG1pblR0bDogRHVyYXRpb24uZGF5cygwKSxcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdGF0aWNDYWNoZVBvbGljeSgpIHtcbiAgICByZXR1cm4gQ2FjaGVQb2xpY3kuQ0FDSElOR19PUFRJTUlaRURcbiAgfVxufVxuIl19
430
+ NextjsSite[_a] = { fqn: "cdk-opennext.NextjsSite", version: "0.4.5" };
431
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1uZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL29wZW4tbmV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFtQztBQUNuQywyQkFBaUM7QUFDakMsNkJBQTRCO0FBQzVCLCtFQUEwRjtBQUMxRiwrREFnQm1DO0FBQ25DLCtFQUErRTtBQUMvRSwyREFBbUY7QUFDbkYsdURBQXVEO0FBQ3ZELHVFQUErRDtBQUUvRCx1REFTK0I7QUFDL0IsbUZBQXFFO0FBQ3JFLG1EQUE4RDtBQUM5RCx5REFBd0Y7QUFDeEYseUVBQWtFO0FBQ2xFLCtDQUE4RDtBQUM5RCxxRUFBd0U7QUFDeEUsaURBQTJDO0FBQzNDLDJDQU95QjtBQUN6QixtRUFBdUQ7QUFDdkQsMkNBQXNDO0FBZ0p0QyxNQUFhLFVBQVcsU0FBUSxzQkFBUztJQWlCdkMsSUFBVyxxQkFBcUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUE7SUFDcEMsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLE9BQU8sV0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixFQUFFLENBQUE7SUFDOUQsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxpQkFBaUI7WUFDM0IsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3JDLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUE7UUFDdEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENB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O1lBQ3hELG1CQUFtQixFQUFFLHlDQUF3QixDQUFDLEdBQUcsRUFBRTtZQUNuRCxjQUFjLEVBQUUsb0NBQW1CLENBQUMsU0FBUyxDQUMzQyxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxzQkFBc0IsRUFDdEIsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVix3QkFBd0IsQ0FDekI7WUFDRCxjQUFjLEVBQUUsb0NBQW1CLENBQUMsSUFBSSxFQUFFO1lBQzFDLFVBQVUsRUFBRSxlQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1QixNQUFNLEVBQUUsZUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDMUIsTUFBTSxFQUFFLGVBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3pCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsT0FBTyw0QkFBVyxDQUFDLGlCQUFpQixDQUFBO0lBQ3RDLENBQUM7O0FBcmdCSCxnQ0FzZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIlxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcImZzXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIlxuaW1wb3J0IHsgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUsIElDZXJ0aWZpY2F0ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCJcbmltcG9ydCB7XG4gIEFsbG93ZWRNZXRob2RzLFxuICB0eXBlIEJlaGF2aW9yT3B0aW9ucyxcbiAgQ2FjaGVDb29raWVCZWhhdmlvcixcbiAgQ2FjaGVIZWFkZXJCZWhhdmlvcixcbiAgQ2FjaGVQb2xpY3ksXG4gIENhY2hlUXVlcnlTdHJpbmdCZWhhdmlvcixcbiAgQ2FjaGVkTWV0aG9kcyxcbiAgRGlzdHJpYnV0aW9uLFxuICB0eXBlIElDYWNoZVBvbGljeSxcbiAgdHlwZSBJT3JpZ2luLFxuICBWaWV3ZXJQcm90b2NvbFBvbGljeSxcbiAgRnVuY3Rpb25FdmVudFR5cGUsXG4gIE9yaWdpblJlcXVlc3RQb2xpY3ksXG4gIEZ1bmN0aW9uIGFzIENsb3VkZnJvbnRGdW5jdGlvbixcbiAgRnVuY3Rpb25Db2RlLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIlxuaW1wb3J0IHsgSHR0cE9yaWdpbiwgUzNCdWNrZXRPcmlnaW4gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2luc1wiXG5pbXBvcnQgeyBUYWJsZVYyIGFzIFRhYmxlLCBBdHRyaWJ1dGVUeXBlLCBCaWxsaW5nIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiXG5pbXBvcnQgeyBSdWxlLCBTY2hlZHVsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzXCJcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiXG5pbXBvcnQgeyB0eXBlIElHcmFudGFibGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQge1xuICBDb2RlLFxuICBGdW5jdGlvbiBhcyBDZGtGdW5jdGlvbixcbiAgdHlwZSBGdW5jdGlvbk9wdGlvbnMsXG4gIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIEludm9rZU1vZGUsXG4gIExvZ2dpbmdGb3JtYXQsXG4gIFJ1bnRpbWUsXG4gIEFyY2hpdGVjdHVyZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0IHsgU3FzRXZlbnRTb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ldmVudC1zb3VyY2VzXCJcbmltcG9ydCB7IExvZ0dyb3VwLCBSZXRlbnRpb25EYXlzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCJcbmltcG9ydCB7IEFhYWFSZWNvcmQsIEFSZWNvcmQsIElIb3N0ZWRab25lLCBSZWNvcmRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIlxuaW1wb3J0IHsgQ2xvdWRGcm9udFRhcmdldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzXCJcbmltcG9ydCB7IEJsb2NrUHVibGljQWNjZXNzLCBCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCJcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIFNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3FzXCJcbmltcG9ydCB7XG4gIEFubm90YXRpb25zLFxuICBDdXN0b21SZXNvdXJjZSxcbiAgRHVyYXRpb24sXG4gIEZuLFxuICBSZW1vdmFsUG9saWN5LFxuICBTdGFjayxcbn0gZnJvbSBcImF3cy1jZGstbGliL2NvcmVcIlxuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5cbnR5cGUgQmFzZUZ1bmN0aW9uID0ge1xuICBoYW5kbGVyOiBzdHJpbmdcbiAgYnVuZGxlOiBzdHJpbmdcbn1cblxudHlwZSBPcGVuTmV4dEZ1bmN0aW9uT3JpZ2luID0ge1xuICB0eXBlOiBcImZ1bmN0aW9uXCJcbiAgc3RyZWFtaW5nPzogYm9vbGVhblxufSAmIEJhc2VGdW5jdGlvblxuXG50eXBlIE9wZW5OZXh0UzNPcmlnaW4gPSB7XG4gIHR5cGU6IFwiczNcIlxuICBvcmlnaW5QYXRoOiBzdHJpbmdcbiAgY29weToge1xuICAgIGZyb206IHN0cmluZ1xuICAgIHRvOiBzdHJpbmdcbiAgICBjYWNoZWQ6IGJvb2xlYW5cbiAgICB2ZXJzaW9uZWRTdWJEaXI/OiBzdHJpbmdcbiAgfVtdXG59XG5cbnR5cGUgT3Blbk5leHRPcmlnaW5zID0gT3Blbk5leHRGdW5jdGlvbk9yaWdpbiB8IE9wZW5OZXh0UzNPcmlnaW5cblxuaW50ZXJmYWNlIE9wZW5OZXh0T3V0cHV0IHtcbiAgZWRnZUZ1bmN0aW9uczoge1xuICAgIFtrZXk6IHN0cmluZ106IEJhc2VGdW5jdGlvblxuICB9XG4gIG9yaWdpbnM6IHtcbiAgICBzMzogT3Blbk5leHRTM09yaWdpblxuICAgIGRlZmF1bHQ6IE9wZW5OZXh0RnVuY3Rpb25PcmlnaW5cbiAgICBpbWFnZU9wdGltaXplcjogT3Blbk5leHRGdW5jdGlvbk9yaWdpblxuICAgIFtrZXk6IHN0cmluZ106IE9wZW5OZXh0T3JpZ2luc1xuICB9XG4gIGJlaGF2aW9yczoge1xuICAgIHBhdHRlcm46IHN0cmluZ1xuICAgIG9yaWdpbj86IHN0cmluZ1xuICAgIGVkZ2VGdW5jdGlvbj86IHN0cmluZ1xuICB9W11cbiAgYWRkaXRpb25hbFByb3BzPzoge1xuICAgIGRpc2FibGVJbmNyZW1lbnRhbENhY2hlPzogYm9vbGVhblxuICAgIGRpc2FibGVUYWdDYWNoZT86IGJvb2xlYW5cbiAgICBpbml0aWFsaXphdGlvbkZ1bmN0aW9uPzogQmFzZUZ1bmN0aW9uXG4gICAgd2FybWVyPzogQmFzZUZ1bmN0aW9uXG4gICAgcmV2YWxpZGF0aW9uRnVuY3Rpb24/OiBCYXNlRnVuY3Rpb25cbiAgfVxufVxuXG4vKipcbiAqIFByb3BzIGZvciBMYW1iZGEgZnVuY3Rpb25zLCBleGNsdWRpbmcgaGFuZGxlciBhbmQgY29kZSB3aGljaCBhcmUgc2V0IGJ5IHRoZSBjb25zdHJ1Y3QuXG4gKiBFeHRlbmRzIEZ1bmN0aW9uT3B0aW9ucyBhbmQgYWRkcyBydW50aW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRGdW5jdGlvblByb3BzIGV4dGVuZHMgRnVuY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSdW50aW1lLk5PREVKU18yNF9YXG4gICAqL1xuICByZWFkb25seSBydW50aW1lPzogUnVudGltZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbkRvbWFpblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgdG8gdGhlIHdlYnNpdGUgVVJMIChpZS4gZG9tYWluLmNvbSkuXG4gICAqXG4gICAqIFN1cHBvcnRzIGRvbWFpbnMgdGhhdCBhcmUgaG9zdGVkIGVpdGhlciBvbiBbUm91dGUgNTNdKGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vcm91dGU1My8pIG9yIGV4dGVybmFsbHkuXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogSW1wb3J0IHRoZSB1bmRlcmx5aW5nIFJvdXRlIDUzIGhvc3RlZCB6b25lLlxuICAgKlxuICAgKiBSZXF1aXJlZCBpZiBgY2VydGlmaWNhdGVgIGlzIG5vdCBwcm92aWRlZC4gV2hlbiBwcm92aWRlZCwgYSBETlMtdmFsaWRhdGVkXG4gICAqIGNlcnRpZmljYXRlIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGFuZCBETlMgYWxpYXNlcyB3aWxsIGJlIHNldCB1cC5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmU/OiBJSG9zdGVkWm9uZVxuXG4gIC8qKlxuICAgKiBUaGUgQUNNIGNlcnRpZmljYXRlIHRvIHVzZSBmb3IgdGhlIGN1c3RvbSBkb21haW4uXG4gICAqXG4gICAqIFJlcXVpcmVkIGlmIGBob3N0ZWRab25lYCBpcyBub3QgcHJvdmlkZWQuIFRoZSBjZXJ0aWZpY2F0ZSBtdXN0IGJlIGluXG4gICAqIHVzLWVhc3QtMSBmb3IgQ2xvdWRGcm9udCBkaXN0cmlidXRpb25zLlxuICAgKlxuICAgKiBXaGVuIHByb3ZpZGVkIHdpdGhvdXQgYGhvc3RlZFpvbmVgLCBubyBETlMgYWxpYXNlcyB3aWxsIGJlIGNyZWF0ZWRcbiAgICogYW5kIHlvdSBtdXN0IGNvbmZpZ3VyZSBETlMgcmVjb3JkcyBleHRlcm5hbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNTaXRlUHJvcHMge1xuICAvKipcbiAgICogVGhlIGN1c3RvbURvbWFpbiBmb3IgdGhpcyB3ZWJzaXRlLiBUaGlzIGRvbWFpbiBtdXN0IGJlIGhvc3RlZCBpblxuICAgKiByb3V0ZTUzLCBhbmQgd2UgbXVzdCBiZSBhYmxlIHRvIGNyZWF0ZSBhbiBBQ00gY2VydGlmaWNhdGUgZm9yIHRoaXNcbiAgICogZG9tYWluLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgeW91IGNhbiBhbHNvIG1pZ3JhdGUgZXh0ZXJuYWxseSBob3N0ZWQgZG9tYWlucyB0byBSb3V0ZSA1MyBieVxuICAgKiBbZm9sbG93aW5nIHRoaXMgZ3VpZGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9NaWdyYXRpbmdETlMuaHRtbCkuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Eb21haW4/OiBEaXN0cmlidXRpb25Eb21haW5Qcm9wc1xuXG4gIC8qKlxuICAgKiBTaG91bGQgcG9pbnQgdG8gdGhlIC5vcGVuLW5leHQgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIi5vcGVuLW5leHRcIlxuICAgKi9cbiAgcmVhZG9ubHkgb3Blbk5leHRQYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIERlZmF1bHQgcHJvcHMgdG8gYXBwbHkgdG8gYWxsIExhbWJkYSBmdW5jdGlvbnMgY3JlYXRlZCBieSB0aGlzIGNvbnN0cnVjdC5cbiAgICogVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3BlY2lmaWMgZnVuY3Rpb24gY29uZmlndXJhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0RnVuY3Rpb25Qcm9wcz86IERlZmF1bHRGdW5jdGlvblByb3BzXG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2VydmVyIGluc3RhbmNlcyB0byBrZWVwIHdhcm0uIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHdhcm1pbmcuXG4gICAqIE11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyICg+PSAxKSBpZiBzcGVjaWZpZWQuIFZhbHVlcyA8PSAwIHdpbGwgZGlzYWJsZSB3YXJtaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqIEBleGFtcGxlXG4gICAqIHdhcm06IDUgLy8gS2VlcCA1IGNvbmN1cnJlbnQgaW5zdGFuY2VzIHdhcm1cbiAgICogd2FybTogZmFsc2UgLy8gRGlzYWJsZSB3YXJtaW5nXG4gICAqL1xuICByZWFkb25seSB3YXJtPzogbnVtYmVyIHwgZmFsc2VcblxuICAvKipcbiAgICogSG93IG9mdGVuIHRvIGludm9rZSB0aGUgd2FybWVyIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDUpXG4gICAqIEBleGFtcGxlXG4gICAqIHdhcm1lckludGVydmFsOiBEdXJhdGlvbi5taW51dGVzKDEwKVxuICAgKi9cbiAgcmVhZG9ubHkgd2FybWVySW50ZXJ2YWw/OiBEdXJhdGlvblxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGludm9rZSB0aGUgd2FybWVyIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIGRlcGxveW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQGV4YW1wbGVcbiAgICogcHJld2FybU9uRGVwbG95OiBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJld2FybU9uRGVwbG95PzogYm9vbGVhblxufVxuXG5leHBvcnQgY2xhc3MgTmV4dGpzU2l0ZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgb3Blbk5leHRPdXRwdXQ6IE9wZW5OZXh0T3V0cHV0XG4gIHByaXZhdGUgYnVja2V0OiBCdWNrZXRcbiAgcHJpdmF0ZSB0YWJsZTogVGFibGVcbiAgcHJpdmF0ZSBxdWV1ZTogUXVldWVcblxuICBwcml2YXRlIHN0YXRpY0NhY2hlUG9saWN5OiBJQ2FjaGVQb2xpY3lcbiAgcHJpdmF0ZSBzZXJ2ZXJDYWNoZVBvbGljeTogQ2FjaGVQb2xpY3lcblxuICBwcml2YXRlIG9wZW5OZXh0UGF0aDogc3RyaW5nXG5cbiAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbjogRGlzdHJpYnV0aW9uXG4gIHByaXZhdGUgX2RlZmF1bHRTZXJ2ZXJGdW5jdGlvbiE6IENka0Z1bmN0aW9uXG4gIHByaXZhdGUgX2N1c3RvbURvbWFpbk5hbWU/OiBzdHJpbmdcbiAgcHJpdmF0ZSB3YXJtZXJGdW5jdGlvbj86IENka0Z1bmN0aW9uXG4gIHByaXZhdGUgcHJvcHM6IE5leHRqc1NpdGVQcm9wc1xuXG4gIHB1YmxpYyBnZXQgZGVmYXVsdFNlcnZlckZ1bmN0aW9uKCk6IENka0Z1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFNlcnZlckZ1bmN0aW9uXG4gIH1cblxuICBwdWJsaWMgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgaHR0cHM6Ly8ke3RoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbkRvbWFpbk5hbWV9YFxuICB9XG5cbiAgcHVibGljIGdldCBjdXN0b21Eb21haW5VcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tRG9tYWluTmFtZVxuICAgICAgPyBgaHR0cHM6Ly8ke3RoaXMuX2N1c3RvbURvbWFpbk5hbWV9YFxuICAgICAgOiBgaHR0cHM6Ly8ke3RoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbkRvbWFpbk5hbWV9YFxuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc1NpdGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgICB0aGlzLm9wZW5OZXh0UGF0aCA9IHByb3BzLm9wZW5OZXh0UGF0aCA/PyBcIi5vcGVuLW5leHRcIlxuICAgIHRoaXMub3Blbk5leHRPdXRwdXQgPSBKU09OLnBhcnNlKFxuICAgICAgcmVhZEZpbGVTeW5jKHBhdGguam9pbih0aGlzLm9wZW5OZXh0UGF0aCwgXCJvcGVuLW5leHQub3V0cHV0Lmpzb25cIiksIFwidXRmLThcIilcbiAgICApIGFzIE9wZW5OZXh0T3V0cHV0XG5cbiAgICB0aGlzLl9jdXN0b21Eb21haW5OYW1lID0gcHJvcHMuY3VzdG9tRG9tYWluPy5kb21haW5OYW1lXG5cbiAgICAvLyBWYWxpZGF0ZSBjdXN0b21Eb21haW4gcHJvcHM6IGVpdGhlciBjZXJ0aWZpY2F0ZSBvciBob3N0ZWRab25lIG11c3QgYmUgcHJvdmlkZWRcbiAgICBpZiAoXG4gICAgICBwcm9wcy5jdXN0b21Eb21haW4gJiZcbiAgICAgICFwcm9wcy5jdXN0b21Eb21haW4uY2VydGlmaWNhdGUgJiZcbiAgICAgICFwcm9wcy5jdXN0b21Eb21haW4uaG9zdGVkWm9uZVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImN1c3RvbURvbWFpbiByZXF1aXJlcyBlaXRoZXIgYSBjZXJ0aWZpY2F0ZSBvciBhIGhvc3RlZFpvbmUuIFwiICtcbiAgICAgICAgICBcIlByb3ZpZGUgYSBob3N0ZWRab25lIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgRE5TLXZhbGlkYXRlZCBjZXJ0aWZpY2F0ZSwgXCIgK1xuICAgICAgICAgIFwib3IgcHJvdmlkZSB5b3VyIG93biBjZXJ0aWZpY2F0ZS5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMuYnVja2V0ID0gbmV3IEJ1Y2tldCh0aGlzLCBcIlMzQnVja2V0XCIsIHtcbiAgICAgIHB1YmxpY1JlYWRBY2Nlc3M6IGZhbHNlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICB9KVxuICAgIHRoaXMudGFibGUgPSB0aGlzLmNyZWF0ZVJldmFsaWRhdGlvblRhYmxlKClcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5jcmVhdGVSZXZhbGlkYXRpb25RdWV1ZSgpXG5cbiAgICAvLyBVc2UgcHJvdmlkZWQgY2VydGlmaWNhdGUgb3IgY3JlYXRlIG9uZSBpZiBob3N0ZWRab25lIGlzIGF2YWlsYWJsZVxuICAgIGNvbnN0IGNlcnRpZmljYXRlID1cbiAgICAgIHByb3BzLmN1c3RvbURvbWFpbj8uY2VydGlmaWNhdGUgPz9cbiAgICAgIChwcm9wcy5jdXN0b21Eb21haW4/Lmhvc3RlZFpvbmVcbiAgICAgICAgPyB0aGlzLmNyZWF0ZUNlcnRpZmljYXRlKFxuICAgICAgICAgICAgcHJvcHMuY3VzdG9tRG9tYWluLmRvbWFpbk5hbWUsXG4gICAgICAgICAgICBwcm9wcy5jdXN0b21Eb21haW4uaG9zdGVkWm9uZVxuICAgICAgICAgIClcbiAgICAgICAgOiB1bmRlZmluZWQpXG5cbiAgICBjb25zdCBvcmlnaW5zID0gdGhpcy5jcmVhdGVPcmlnaW5zKHByb3BzLmRlZmF1bHRGdW5jdGlvblByb3BzKVxuICAgIHRoaXMuc2VydmVyQ2FjaGVQb2xpY3kgPSB0aGlzLmNyZWF0ZVNlcnZlckNhY2hlUG9saWN5KClcbiAgICB0aGlzLnN0YXRpY0NhY2hlUG9saWN5ID0gdGhpcy5jcmVhdGVTdGF0aWNDYWNoZVBvbGljeSgpXG4gICAgdGhpcy5kaXN0cmlidXRpb24gPSB0aGlzLmNyZWF0ZURpc3RyaWJ1dGlvbihvcmlnaW5zLCBwcm9wcywgY2VydGlmaWNhdGUpXG4gICAgdGhpcy5jcmVhdGVXYXJtZXIoKVxuICAgIGlmIChwcm9wcy5jdXN0b21Eb21haW4gJiYgcHJvcHMuY3VzdG9tRG9tYWluLmhvc3RlZFpvbmUpIHtcbiAgICAgIG5ldyBBUmVjb3JkKHRoaXMsIFwiQWxpYXNSZWNvcmRcIiwge1xuICAgICAgICB6b25lOiBwcm9wcy5jdXN0b21Eb21haW4uaG9zdGVkWm9uZSxcbiAgICAgICAgcmVjb3JkTmFtZTogcHJvcHMuY3VzdG9tRG9tYWluLmRvbWFpbk5hbWUsXG4gICAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhuZXcgQ2xvdWRGcm9udFRhcmdldCh0aGlzLmRpc3RyaWJ1dGlvbikpLFxuICAgICAgfSlcblxuICAgICAgbmV3IEFhYWFSZWNvcmQodGhpcywgXCJBbGlhc1JlY29yZEFBQUFcIiwge1xuICAgICAgICB6b25lOiBwcm9wcy5jdXN0b21Eb21haW4uaG9zdGVkWm9uZSxcbiAgICAgICAgcmVjb3JkTmFtZTogcHJvcHMuY3VzdG9tRG9tYWluLmRvbWFpbk5hbWUsXG4gICAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhuZXcgQ2xvdWRGcm9udFRhcmdldCh0aGlzLmRpc3RyaWJ1dGlvbikpLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNlcnRpZmljYXRlKGRvbWFpbk5hbWU6IHN0cmluZywgaG9zdGVkWm9uZTogSUhvc3RlZFpvbmUpIHtcbiAgICAvLyBDbG91ZEZyb250IHJlcXVpcmVzIGNlcnRpZmljYXRlcyB0byBiZSBpbiB1cy1lYXN0LTFcbiAgICAvLyBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSBoYW5kbGVzIGNyb3NzLXJlZ2lvbiBjZXJ0aWZpY2F0ZSBjcmVhdGlvbiBhdXRvbWF0aWNhbGx5XG4gICAgcmV0dXJuIG5ldyBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSh0aGlzLCBcIkNlcnRpZmljYXRlXCIsIHtcbiAgICAgIGRvbWFpbk5hbWUsXG4gICAgICBob3N0ZWRab25lLFxuICAgICAgcmVnaW9uOiBcInVzLWVhc3QtMVwiLFxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJldmFsaWRhdGlvblRhYmxlKCkge1xuICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlKHRoaXMsIFwiUmV2YWxpZGF0aW9uVGFibGVcIiwge1xuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwidGFnXCIsIHR5cGU6IEF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwicGF0aFwiLCB0eXBlOiBBdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeVNwZWNpZmljYXRpb246IHtcbiAgICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeUVuYWJsZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgYmlsbGluZzogQmlsbGluZy5vbkRlbWFuZCgpLFxuICAgICAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5kZXhOYW1lOiBcInJldmFsaWRhdGVcIixcbiAgICAgICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJwYXRoXCIsIHR5cGU6IEF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICAgICAgc29ydEtleTogeyBuYW1lOiBcInJldmFsaWRhdGVkQXRcIiwgdHlwZTogQXR0cmlidXRlVHlwZS5OVU1CRVIgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSlcblxuICAgIGNvbnN0IGluaXRGbiA9IHRoaXMub3Blbk5leHRPdXRwdXQuYWRkaXRpb25hbFByb3BzPy5pbml0aWFsaXphdGlvbkZ1bmN0aW9uXG5cbiAgICBjb25zdCBpbnNlcnRGbiA9IG5ldyBDZGtGdW5jdGlvbih0aGlzLCBcIlJldmFsaWRhdGlvbkluc2VydEZ1bmN0aW9uXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5leHQuanMgcmV2YWxpZGF0aW9uIGRhdGEgaW5zZXJ0XCIsXG4gICAgICBoYW5kbGVyOiBpbml0Rm4/LmhhbmRsZXIgPz8gXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICAvLyBjb2RlOiBDb2RlLmZyb21Bc3NldChpbml0Rm4/LmJ1bmRsZSA/PyBcIlwiKSxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGguam9pbih0aGlzLm9wZW5OZXh0UGF0aCwgXCJkeW5hbW9kYi1wcm92aWRlclwiKSksXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yNF9YLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICBsb2dnaW5nRm9ybWF0OiBMb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBDQUNIRV9EWU5BTU9fVEFCTEU6IHRhYmxlLnRhYmxlTmFtZSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGNvbnN0IHByb3ZpZGVyTG9nR3JvdXAgPSBuZXcgTG9nR3JvdXAodGhpcywgXCJSZXZhbGlkYXRpb25Qcm92aWRlckxvZ0dyb3VwXCIsIHtcbiAgICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5PTkVfREFZLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pXG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCBcIlJldmFsaWRhdGlvblByb3ZpZGVyXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBpbnNlcnRGbixcbiAgICAgIGxvZ0dyb3VwOiBwcm92aWRlckxvZ0dyb3VwLFxuICAgIH0pXG5cbiAgICBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJSZXZhbGlkYXRpb25SZXNvdXJjZVwiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdmVyc2lvbjogRGF0ZS5ub3coKS50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRhYmxlXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9yaWdpbnMoZGVmYXVsdEZ1bmN0aW9uUHJvcHM/OiBEZWZhdWx0RnVuY3Rpb25Qcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgIHMzOiBzM09yaWdpbixcbiAgICAgIGRlZmF1bHQ6IGRlZmF1bHRPcmlnaW4sXG4gICAgICBpbWFnZU9wdGltaXplcjogaW1hZ2VPcmlnaW4sXG4gICAgICAuLi5yZXN0T3JpZ2luc1xuICAgIH0gPSB0aGlzLm9wZW5OZXh0T3V0cHV0Lm9yaWdpbnNcbiAgICBmb3IgKGNvbnN0IGNvcHkgb2YgczNPcmlnaW4uY29weSkge1xuICAgICAgbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcywgYE9wZW5OZXh0QnVja2V0RGVwbG95bWVudCR7Y29weS5mcm9tfWAsIHtcbiAgICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldChwYXRoLmpvaW4odGhpcy5vcGVuTmV4dFBhdGgsIFwiLi5cIiwgY29weS5mcm9tKSldLFxuICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogdGhpcy5idWNrZXQsXG4gICAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBjb3B5LnRvLFxuICAgICAgICBwcnVuZTogZmFsc2UsXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBvcmlnaW5zID0ge1xuICAgICAgczM6IFMzQnVja2V0T3JpZ2luLndpdGhPcmlnaW5BY2Nlc3NDb250cm9sKHRoaXMuYnVja2V0LCB7XG4gICAgICAgIG9yaWdpbklkOiBcIlMzQnVja2V0XCIsXG4gICAgICAgIG9yaWdpblBhdGg6IHMzT3JpZ2luLm9yaWdpblBhdGgsXG4gICAgICB9KSxcbiAgICAgIGRlZmF1bHQ6IHRoaXMuY3JlYXRlRnVuY3Rpb25PcmlnaW4oXG4gICAgICAgIFwiZGVmYXVsdFwiLFxuICAgICAgICBkZWZhdWx0T3JpZ2luLFxuICAgICAgICBcIk5leHRKc1NlcnZlclwiLFxuICAgICAgICBkZWZhdWx0RnVuY3Rpb25Qcm9wc1xuICAgICAgKSxcbiAgICAgIGltYWdlT3B0aW1pemVyOiB0aGlzLmNyZWF0ZUZ1bmN0aW9uT3JpZ2luKFxuICAgICAgICBcImltYWdlT3B0aW1pemVyXCIsXG4gICAgICAgIGltYWdlT3JpZ2luLFxuICAgICAgICBcIkltYWdlT3B0aW1pemVyXCJcbiAgICAgICksXG4gICAgICAuLi5PYmplY3QuZW50cmllcyhyZXN0T3JpZ2lucykucmVkdWNlKFxuICAgICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5JZCA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKVxuICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gdGhpcy5jcmVhdGVGdW5jdGlvbk9yaWdpbihrZXksIHZhbHVlLCBvcmlnaW5JZClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBIdHRwT3JpZ2luPlxuICAgICAgKSxcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdpbnNcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmV2YWxpZGF0aW9uUXVldWUoKSB7XG4gICAgY29uc3QgcXVldWUgPSBuZXcgUXVldWUodGhpcywgXCJSZXZhbGlkYXRpb25RdWV1ZVwiLCB7XG4gICAgICBmaWZvOiB0cnVlLFxuICAgICAgcmVjZWl2ZU1lc3NhZ2VXYWl0VGltZTogRHVyYXRpb24uc2Vjb25kcygyMCksXG4gICAgfSlcbiAgICBjb25zdCBjb25zdW1lciA9IG5ldyBDZGtGdW5jdGlvbih0aGlzLCBcIlJldmFsaWRhdGlvbkZ1bmN0aW9uXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5leHQuanMgcmV2YWxpZGF0b3JcIixcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIHRoaXMub3Blbk5leHRPdXRwdXQuYWRkaXRpb25hbFByb3BzPy5yZXZhbGlkYXRpb25GdW5jdGlvbj8uYnVuZGxlXG4gICAgICAgICAgPyBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgIHRoaXMub3Blbk5leHRQYXRoLFxuICAgICAgICAgICAgICBcIi4uXCIsXG4gICAgICAgICAgICAgIHRoaXMub3Blbk5leHRPdXRwdXQuYWRkaXRpb25hbFByb3BzPy5yZXZhbGlkYXRpb25GdW5jdGlvbj8uYnVuZGxlXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBcIlwiXG4gICAgICApLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjRfWCxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgIH0pXG4gICAgY29uc3VtZXIuYWRkRXZlbnRTb3VyY2UobmV3IFNxc0V2ZW50U291cmNlKHF1ZXVlLCB7IGJhdGNoU2l6ZTogNSB9KSlcbiAgICByZXR1cm4gcXVldWVcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV2FybWVyKCkge1xuICAgIC8vIERlZmF1bHQ6IHdhcm06IDEsIHVzZXJzIGNhbiBkaXNhYmxlIHdpdGggd2FybTogZmFsc2VcbiAgICBjb25zdCB3YXJtQ29uY3VycmVuY3kgPSB0aGlzLnByb3BzLndhcm0gPT09IGZhbHNlID8gdW5kZWZpbmVkIDogKHRoaXMucHJvcHMud2FybSA/PyAxKVxuXG4gICAgLy8gU2tpcCBpZiB3YXJtaW5nIGlzIGRpc2FibGVkIG9yIGludmFsaWRcbiAgICBpZiAoIXdhcm1Db25jdXJyZW5jeSB8fCB3YXJtQ29uY3VycmVuY3kgPD0gMCkgcmV0dXJuXG5cbiAgICAvLyBHZXQgd2FybWVyIGJ1bmRsZSBmcm9tIE9wZW5OZXh0XG4gICAgY29uc3Qgd2FybWVyID0gdGhpcy5vcGVuTmV4dE91dHB1dC5hZGRpdGlvbmFsUHJvcHM/Lndhcm1lclxuICAgIGlmICghd2FybWVyKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICBcIldhcm1pbmcgaXMgZW5hYmxlZCBidXQgT3Blbk5leHQgZGlkIG5vdCBwcm92aWRlIGEgd2FybWVyIGJ1bmRsZS4gXCIgK1xuICAgICAgICAgIFwiU2tpcHBpbmcgd2FybWVyIGNyZWF0aW9uLiBFbnN1cmUgeW91J3JlIHVzaW5nIE9wZW5OZXh0IDMueCsgd2l0aCB3YXJtaW5nIHN1cHBvcnQuXCJcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHdhcm1lckJ1bmRsZSA9IHBhdGguam9pbih0aGlzLm9wZW5OZXh0UGF0aCwgXCIuLlwiLCB3YXJtZXIuYnVuZGxlKVxuICAgIGNvbnN0IHdhcm1lckhhbmRsZXIgPSB3YXJtZXIuaGFuZGxlclxuXG4gICAgLy8gQ29uZmlndXJlIFdBUk1fUEFSQU1TXG4gICAgY29uc3Qgd2FybVBhcmFtcyA9IFtcbiAgICAgIHtcbiAgICAgICAgY29uY3VycmVuY3k6IHdhcm1Db25jdXJyZW5jeSxcbiAgICAgICAgZnVuY3Rpb246IHRoaXMuX2RlZmF1bHRTZXJ2ZXJGdW5jdGlvbi5mdW5jdGlvbk5hbWUsXG4gICAgICB9LFxuICAgIF1cblxuICAgIC8vIENyZWF0ZSB3YXJtZXIgTGFtYmRhXG4gICAgdGhpcy53YXJtZXJGdW5jdGlvbiA9IG5ldyBDZGtGdW5jdGlvbih0aGlzLCBcIldhcm1lckZ1bmN0aW9uXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5leHQuanMgd2FybWVyXCIsXG4gICAgICBoYW5kbGVyOiB3YXJtZXJIYW5kbGVyLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQod2FybWVyQnVuZGxlKSxcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzI0X1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgV0FSTV9QQVJBTVM6IEpTT04uc3RyaW5naWZ5KHdhcm1QYXJhbXMpLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgLy8gR3JhbnQgaW52b2tlIHBlcm1pc3Npb25zXG4gICAgdGhpcy5fZGVmYXVsdFNlcnZlckZ1bmN0aW9uLmdyYW50SW52b2tlKHRoaXMud2FybWVyRnVuY3Rpb24pXG4gICAgdGhpcy5fZGVmYXVsdFNlcnZlckZ1bmN0aW9uLmFkZEVudmlyb25tZW50KFwiV0FSTUVSX0VOQUJMRURcIiwgXCJ0cnVlXCIpXG5cbiAgICAvLyBDcmVhdGUgRXZlbnRCcmlkZ2UgcnVsZVxuICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5wcm9wcy53YXJtZXJJbnRlcnZhbCA/PyBEdXJhdGlvbi5taW51dGVzKDUpXG4gICAgbmV3IFJ1bGUodGhpcywgXCJXYXJtZXJSdWxlXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBgSW52b2tlIHdhcm1lciBldmVyeSAke2ludGVydmFsLnRvTWludXRlcygpfSBtaW51dGVzYCxcbiAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5yYXRlKGludGVydmFsKSxcbiAgICAgIHRhcmdldHM6IFtuZXcgTGFtYmRhRnVuY3Rpb24odGhpcy53YXJtZXJGdW5jdGlvbiwgeyByZXRyeUF0dGVtcHRzOiAwIH0pXSxcbiAgICB9KVxuXG4gICAgLy8gQ3JlYXRlIHByZS13YXJtZXIgaWYgZW5hYmxlZCAoZGVmYXVsdDogdHJ1ZSlcbiAgICBpZiAodGhpcy5wcm9wcy5wcmV3YXJtT25EZXBsb3kgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBwcmV3YXJtZXJMb2dHcm91cCA9IG5ldyBMb2dHcm91cCh0aGlzLCBcIlByZXdhcm1lckxvZ0dyb3VwXCIsIHtcbiAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLk9ORV9EQVksXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHByZXdhcm1lckZuID0gbmV3IENka0Z1bmN0aW9uKHRoaXMsIFwiUHJld2FybWVyRnVuY3Rpb25cIiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogXCJOZXh0LmpzIHByZS13YXJtZXJcIixcbiAgICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZShgXG4gICAgICAgICAgY29uc3QgeyBMYW1iZGFDbGllbnQsIEludm9rZUNvbW1hbmQgfSA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtbGFtYmRhXCIpXG4gICAgICAgICAgY29uc3QgbGFtYmRhID0gbmV3IExhbWJkYUNsaWVudCh7fSlcblxuICAgICAgICAgIGV4cG9ydHMuaGFuZGxlciA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSBcIkRlbGV0ZVwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IFBoeXNpY2FsUmVzb3VyY2VJZDogXCJwcmV3YXJtZXJcIiB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IGxhbWJkYS5zZW5kKFxuICAgICAgICAgICAgICAgIG5ldyBJbnZva2VDb21tYW5kKHtcbiAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgIEludm9jYXRpb25UeXBlOiBcIlJlcXVlc3RSZXNwb25zZVwiLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJQcmUtd2FybWluZyBmYWlsZWQ6XCIsIGVycm9yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyBQaHlzaWNhbFJlc291cmNlSWQ6IFwicHJld2FybWVyXCIgfVxuICAgICAgICAgIH1cbiAgICAgICAgYCksXG4gICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzI0X1gsXG4gICAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygyKSxcbiAgICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgICBsb2dnaW5nRm9ybWF0OiBMb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgICAgIGxvZ0dyb3VwOiBwcmV3YXJtZXJMb2dHcm91cCxcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMud2FybWVyRnVuY3Rpb24uZ3JhbnRJbnZva2UocHJld2FybWVyRm4pXG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIFwiUHJld2FybWVyUHJvdmlkZXJcIiwge1xuICAgICAgICBvbkV2ZW50SGFuZGxlcjogcHJld2FybWVyRm4sXG4gICAgICAgIGxvZ0dyb3VwOiBwcmV3YXJtZXJMb2dHcm91cCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIENyZWF0ZSBhIGRldGVybWluaXN0aWMgdmVyc2lvbiBoYXNoIGJhc2VkIG9uIHdhcm1lciBjb25maWd1cmF0aW9uXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgcHJlLXdhcm1pbmcgb25seSB0cmlnZ2VycyB3aGVuIGNvbmZpZyBhY3R1YWxseSBjaGFuZ2VzXG4gICAgICBjb25zdCBjb25maWdIYXNoID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKVxuICAgICAgICAudXBkYXRlKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiB3YXJtQ29uY3VycmVuY3ksXG4gICAgICAgICAgICBpbnRlcnZhbDogaW50ZXJ2YWwudG9NaW51dGVzKCksXG4gICAgICAgICAgICBwcmV3YXJtRW5hYmxlZDogdGhpcy5wcm9wcy5wcmV3YXJtT25EZXBsb3ksXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuZGlnZXN0KFwiaGV4XCIpXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTYpIC8vIFRydW5jYXRlIGZvciByZWFkYWJpbGl0eVxuXG4gICAgICBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJQcmV3YXJtZXJSZXNvdXJjZVwiLCB7XG4gICAgICAgIHNlcnZpY2VUb2tlbjogcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB0aGlzLndhcm1lckZ1bmN0aW9uLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICBWZXJzaW9uOiBjb25maWdIYXNoLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEVudmlyb25tZW50KCkge1xuICAgIHJldHVybiB7XG4gICAgICBDQUNIRV9CVUNLRVRfTkFNRTogdGhpcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgIENBQ0hFX0JVQ0tFVF9LRVlfUFJFRklYOiBcIl9jYWNoZVwiLFxuICAgICAgQ0FDSEVfQlVDS0VUX1JFR0lPTjogU3RhY2sub2YodGhpcykucmVnaW9uLFxuICAgICAgUkVWQUxJREFUSU9OX1FVRVVFX1VSTDogdGhpcy5xdWV1ZS5xdWV1ZVVybCxcbiAgICAgIFJFVkFMSURBVElPTl9RVUVVRV9SRUdJT046IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbixcbiAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy50YWJsZS50YWJsZU5hbWUsXG4gICAgICAvLyBUaG9zZSAyIGFyZSB1c2VkIG9ubHkgZm9yIGltYWdlIG9wdGltaXplclxuICAgICAgQlVDS0VUX05BTUU6IHRoaXMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICBCVUNLRVRfS0VZX1BSRUZJWDogXCJfYXNzZXRzXCIsXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBncmFudFBlcm1pc3Npb25zKGdyYW50YWJsZTogSUdyYW50YWJsZSkge1xuICAgIHRoaXMuYnVja2V0LmdyYW50UmVhZFdyaXRlKGdyYW50YWJsZSlcbiAgICB0aGlzLnRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShncmFudGFibGUpXG4gICAgdGhpcy5xdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyhncmFudGFibGUpXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZ1bmN0aW9uT3JpZ2luKFxuICAgIGtleTogc3RyaW5nLFxuICAgIG9yaWdpbjogT3Blbk5leHRGdW5jdGlvbk9yaWdpbixcbiAgICBvcmlnaW5JZD86IHN0cmluZyxcbiAgICBmblByb3BzPzogRGVmYXVsdEZ1bmN0aW9uUHJvcHNcbiAgKSB7XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSB0aGlzLmdldEVudmlyb25tZW50KClcbiAgICBjb25zdCBmbiA9IG5ldyBDZGtGdW5jdGlvbih0aGlzLCBgJHtrZXl9RnVuY3Rpb25gLCB7XG4gICAgICAuLi5mblByb3BzLFxuICAgICAgcnVudGltZTogZm5Qcm9wcz8ucnVudGltZSA/PyBSdW50aW1lLk5PREVKU18yNF9YLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBmblByb3BzPy5hcmNoaXRlY3R1cmUgPz8gQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIG1lbW9yeVNpemU6IGZuUHJvcHM/Lm1lbW9yeVNpemUgPz8gMTAyNCxcbiAgICAgIGxvZ2dpbmdGb3JtYXQ6IGZuUHJvcHM/LmxvZ2dpbmdGb3JtYXQgPz8gTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgICAgaGFuZGxlcjogb3JpZ2luLmhhbmRsZXIsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4odGhpcy5vcGVuTmV4dFBhdGgsIFwiLi5cIiwgb3JpZ2luLmJ1bmRsZSkpLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgLi4uZm5Qcm9wcz8uZW52aXJvbm1lbnQsXG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICB9KVxuICAgIGNvbnN0IGZuVXJsID0gZm4uYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSxcbiAgICAgIGludm9rZU1vZGU6IG9yaWdpbi5zdHJlYW1pbmcgPyBJbnZva2VNb2RlLlJFU1BPTlNFX1NUUkVBTSA6IEludm9rZU1vZGUuQlVGRkVSRUQsXG4gICAgfSlcbiAgICB0aGlzLmdyYW50UGVybWlzc2lvbnMoZm4pXG5cbiAgICAvLyBTdG9yZSByZWZlcmVuY2UgdG8gZGVmYXVsdCBzZXJ2ZXIgZnVuY3Rpb25cbiAgICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIikge1xuICAgICAgdGhpcy5fZGVmYXVsdFNlcnZlckZ1bmN0aW9uID0gZm5cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEh0dHBPcmlnaW4oRm4ucGFyc2VEb21haW5OYW1lKGZuVXJsLnVybCksIHtcbiAgICAgIC4uLihvcmlnaW5JZCA/IHsgb3JpZ2luSWQgfSA6IHt9KSxcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRHZW9IZWFkZXJzSW5qZWN0aW9uKCkge1xuICAgIHJldHVybiBgXG5pZihyZXF1ZXN0LmhlYWRlcnNbXCJjbG91ZGZyb250LXZpZXdlci1jaXR5XCJdKSB7XG4gIHJlcXVlc3QuaGVhZGVyc1tcIngtb3Blbi1uZXh0LWNpdHlcIl0gPSByZXF1ZXN0LmhlYWRlcnNbXCJjbG91ZGZyb250LXZpZXdlci1jaXR5XCJdO1xufVxuaWYocmVxdWVzdC5oZWFkZXJzW1wiY2xvdWRmcm9udC12aWV3ZXItY291bnRyeVwiXSkge1xuICByZXF1ZXN0LmhlYWRlcnNbXCJ4LW9wZW4tbmV4dC1jb3VudHJ5XCJdID0gcmVxdWVzdC5oZWFkZXJzW1wiY2xvdWRmcm9udC12aWV3ZXItY291bnRyeVwiXTtcbn1cbmlmKHJlcXVlc3QuaGVhZGVyc1tcImNsb3VkZnJvbnQtdmlld2VyLXJlZ2lvblwiXSkge1xuICByZXF1ZXN0LmhlYWRlcnNbXCJ4LW9wZW4tbmV4dC1yZWdpb25cIl0gPSByZXF1ZXN0LmhlYWRlcnNbXCJjbG91ZGZyb250LXZpZXdlci1yZWdpb25cIl07XG59XG5pZihyZXF1ZXN0LmhlYWRlcnNbXCJjbG91ZGZyb250LXZpZXdlci1sYXRpdHVkZVwiXSkge1xuICByZXF1ZXN0LmhlYWRlcnNbXCJ4LW9wZW4tbmV4dC1sYXRpdHVkZVwiXSA9IHJlcXVlc3QuaGVhZGVyc1tcImNsb3VkZnJvbnQtdmlld2VyLWxhdGl0dWRlXCJdO1xufVxuaWYocmVxdWVzdC5oZWFkZXJzW1wiY2xvdWRmcm9udC12aWV3ZXItbG9uZ2l0dWRlXCJdKSB7XG4gIHJlcXVlc3QuaGVhZGVyc1tcIngtb3Blbi1uZXh0LWxvbmdpdHVkZVwiXSA9IHJlcXVlc3QuaGVhZGVyc1tcImNsb3VkZnJvbnQtdmlld2VyLWxvbmdpdHVkZVwiXTtcbn1cbiAgICBgLnRyaW0oKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEaXN0cmlidXRpb24oXG4gICAgb3JpZ2luczogUmVjb3JkPHN0cmluZywgSU9yaWdpbj4sXG4gICAgcHJvcHM6IE5leHRqc1NpdGVQcm9wcyxcbiAgICBjZXJ0aWZpY2F0ZT86IElDZXJ0aWZpY2F0ZVxuICApIHtcbiAgICBjb25zdCBjbG91ZGZyb250RnVuY3Rpb24gPSBuZXcgQ2xvdWRmcm9udEZ1bmN0aW9uKHRoaXMsIFwiQ2xvdWRGcm9udEZ1bmN0aW9uXCIsIHtcbiAgICAgIGNvZGU6IEZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKGBcblx0XHRcdGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcblx0XHRcdFx0dmFyIHJlcXVlc3QgPSBldmVudC5yZXF1ZXN0O1xuXHRcdFx0XHRyZXF1ZXN0LmhlYWRlcnNbXCJ4LWZvcndhcmRlZC1ob3N0XCJdID0gcmVxdWVzdC5oZWFkZXJzLmhvc3Q7XG5cdFx0XHRcdCR7dGhpcy5nZXRHZW9IZWFkZXJzSW5qZWN0aW9uKCl9XG5cdFx0XHRcdHJldHVybiByZXF1ZXN0O1xuXHRcdFx0fVxuXHRcdFx0YCksXG4gICAgfSlcbiAgICBjb25zdCBmbkFzc29jaWF0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgZnVuY3Rpb246IGNsb3VkZnJvbnRGdW5jdGlvbixcbiAgICAgICAgZXZlbnRUeXBlOiBGdW5jdGlvbkV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCxcbiAgICAgIH0sXG4gICAgXVxuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uID0gbmV3IERpc3RyaWJ1dGlvbih0aGlzLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICBkb21haW5OYW1lczogcHJvcHMuY3VzdG9tRG9tYWluID8gW3Byb3BzLmN1c3RvbURvbWFpbi5kb21haW5OYW1lXSA6IHVuZGVmaW5lZCxcbiAgICAgIGNlcnRpZmljYXRlLFxuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogb3JpZ2lucy5kZWZhdWx0ISwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IEFsbG93ZWRNZXRob2RzLkFMTE9XX0FMTCxcbiAgICAgICAgY2FjaGVkTWV0aG9kczogQ2FjaGVkTWV0aG9kcy5DQUNIRV9HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgICBjYWNoZVBvbGljeTogdGhpcy5zZXJ2ZXJDYWNoZVBvbGljeSxcbiAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeTogT3JpZ2luUmVxdWVzdFBvbGljeS5BTExfVklFV0VSX0VYQ0VQVF9IT1NUX0hFQURFUixcbiAgICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IGZuQXNzb2NpYXRpb25zLFxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnM6IHRoaXMub3Blbk5leHRPdXRwdXQuYmVoYXZpb3JzXG4gICAgICAgIC5maWx0ZXIoKGIpID0+IGIucGF0dGVybiAhPT0gXCIqXCIpXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgYmVoYXZpb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJlaGF2aW9yT3B0aW9uczogQmVoYXZpb3JPcHRpb25zID0ge1xuICAgICAgICAgICAgICBvcmlnaW46IChiZWhhdmlvci5vcmlnaW4gPyBvcmlnaW5zW2JlaGF2aW9yLm9yaWdpbl0gOiBvcmlnaW5zLmRlZmF1bHQpISwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IEFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEX09QVElPTlMsXG4gICAgICAgICAgICAgIGNhY2hlZE1ldGhvZHM6IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgICAgICAgY2FjaGVQb2xpY3k6XG4gICAgICAgICAgICAgICAgYmVoYXZpb3Iub3JpZ2luID09PSBcInMzXCJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zdGF0aWNDYWNoZVBvbGljeVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNlcnZlckNhY2hlUG9saWN5LFxuICAgICAgICAgICAgICAuLi4oYmVoYXZpb3Iub3JpZ2luID09PSBcInMzXCJcbiAgICAgICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6XG4gICAgICAgICAgICAgICAgICAgICAgT3JpZ2luUmVxdWVzdFBvbGljeS5BTExfVklFV0VSX0VYQ0VQVF9IT1NUX0hFQURFUixcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogZm5Bc3NvY2lhdGlvbnMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2NbYmVoYXZpb3IucGF0dGVybl0gPSBiZWhhdmlvck9wdGlvbnNcbiAgICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz5cbiAgICAgICAgKSxcbiAgICB9KVxuICAgIHJldHVybiBkaXN0cmlidXRpb25cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VydmVyQ2FjaGVQb2xpY3koKSB7XG4gICAgcmV0dXJuIG5ldyBDYWNoZVBvbGljeSh0aGlzLCBcIk9wZW5OZXh0U2VydmVyQ2FjaGVQb2xpY3lcIiwge1xuICAgICAgcXVlcnlTdHJpbmdCZWhhdmlvcjogQ2FjaGVRdWVyeVN0cmluZ0JlaGF2aW9yLmFsbCgpLFxuICAgICAgaGVhZGVyQmVoYXZpb3I6IENhY2hlSGVhZGVyQmVoYXZpb3IuYWxsb3dMaXN0KFxuICAgICAgICBcImFjY2VwdFwiLFxuICAgICAgICBcImFjY2VwdC1lbmNvZGluZ1wiLFxuICAgICAgICBcInJzY1wiLFxuICAgICAgICBcIm5leHQtcm91dGVyLXByZWZldGNoXCIsXG4gICAgICAgIFwibmV4dC1yb3V0ZXItc3RhdGUtdHJlZVwiLFxuICAgICAgICBcIm5leHQtdXJsXCIsXG4gICAgICAgIFwieC1wcmVyZW5kZXItcmV2YWxpZGF0ZVwiXG4gICAgICApLFxuICAgICAgY29va2llQmVoYXZpb3I6IENhY2hlQ29va2llQmVoYXZpb3Iubm9uZSgpLFxuICAgICAgZGVmYXVsdFR0bDogRHVyYXRpb24uZGF5cygwKSxcbiAgICAgIG1heFR0bDogRHVyYXRpb24uZGF5cygzNjUpLFxuICAgICAgbWluVHRsOiBEdXJhdGlvbi5kYXlzKDApLFxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVN0YXRpY0NhY2hlUG9saWN5KCkge1xuICAgIHJldHVybiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRFxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -82,7 +82,7 @@
82
82
  "publishConfig": {
83
83
  "access": "public"
84
84
  },
85
- "version": "0.4.3",
85
+ "version": "0.4.5",
86
86
  "jest": {
87
87
  "coverageProvider": "v8",
88
88
  "testMatch": [