@bluedynamics/cdk8s-plone 0.1.40 → 0.1.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/.jsii +294 -28
  2. package/API.md +225 -10
  3. package/CLAUDE.md +1 -1
  4. package/README.md +4 -4
  5. package/docs/superpowers/plans/2026-06-12-configurable-service-spec.md +608 -0
  6. package/docs/superpowers/specs/2026-06-12-configurable-service-spec-design.md +192 -0
  7. package/documentation/sources/explanation/architecture.md +7 -6
  8. package/documentation/sources/explanation/features.md +9 -7
  9. package/documentation/sources/how-to/{deploy-classic-ui.md → deploy-blicca.md} +43 -39
  10. package/documentation/sources/how-to/deploy-production-volto.md +1 -1
  11. package/documentation/sources/how-to/index.md +1 -1
  12. package/documentation/sources/reference/api/index.md +1 -1
  13. package/documentation/sources/reference/configuration-options.md +55 -11
  14. package/documentation/sources/tutorials/01-quick-start.md +1 -1
  15. package/examples/{classic-ui → blicca}/README.md +24 -25
  16. package/examples/{classic-ui → blicca}/__snapshots__/main.test.ts.snap +3 -3
  17. package/examples/{classic-ui → blicca}/config/varnish.tpl.vcl +1 -1
  18. package/examples/{classic-ui → blicca}/main.test.ts +3 -3
  19. package/examples/{classic-ui → blicca}/main.ts +6 -6
  20. package/examples/{classic-ui → blicca}/package.json +2 -2
  21. package/lib/httpcache.js +1 -1
  22. package/lib/index.d.ts +1 -0
  23. package/lib/index.js +1 -1
  24. package/lib/plone.d.ts +23 -5
  25. package/lib/plone.js +22 -8
  26. package/lib/service.d.ts +81 -0
  27. package/lib/service.js +24 -6
  28. package/lib/vinylcache.js +1 -1
  29. package/package.json +1 -1
  30. /package/examples/{classic-ui → blicca}/.env.example +0 -0
  31. /package/examples/{classic-ui → blicca}/cdk8s.yaml +0 -0
  32. /package/examples/{classic-ui → blicca}/ingress.ts +0 -0
  33. /package/examples/{classic-ui → blicca}/jest.config.js +0 -0
  34. /package/examples/{classic-ui → blicca}/postgres.bitnami.ts +0 -0
  35. /package/examples/{classic-ui → blicca}/postgres.cloudnativepg.ts +0 -0
@@ -1,29 +1,29 @@
1
- # Classic UI Example
1
+ # Blicca Example
2
2
 
3
- This example demonstrates a **production-ready Plone Classic UI deployment** using the [@bluedynamics/cdk8s-plone](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone) TypeScript package.
3
+ This example demonstrates a **production-ready Plone Blicca deployment** using the [@bluedynamics/cdk8s-plone](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone) TypeScript package.
4
4
 
5
- ## What is Plone Classic UI?
5
+ > **Note:** Blicca is the new name for what was formerly called Plone "Classic UI".
6
6
 
7
- Plone Classic UI is the traditional server-side rendered interface for Plone CMS. Unlike Volto (which uses a separate React frontend), Classic UI is served directly from the Plone backend, providing:
7
+ ## What is Plone Blicca?
8
8
 
9
- - **Traditional server-side rendering** - All pages rendered by Plone/Zope
9
+ Blicca is the server-side rendered UI of Plone CMS: the Plone backend renders the HTML and serves it directly. Unlike Volto (a separate React single-page frontend talking to the REST API), Blicca needs no separate frontend service:
10
+
11
+ - **Server-side rendering** - All pages rendered by Plone/Zope
10
12
  - **Simpler architecture** - Single backend service (no separate frontend)
11
- - **Familiar interface** - Classic Plone user interface many users know
12
13
  - **Full Plone features** - Complete access to all Plone functionality
13
14
 
14
- **When to use Classic UI:**
15
- - Migration from older Plone versions (maintaining familiar UX)
16
- - Internal tools and intranets where modern UI isn't required
17
- - Projects requiring specific Classic UI add-ons
18
- - Environments where simpler deployment is preferred
15
+ **When to use Blicca:**
16
+ - You want a single backend service without a separate frontend deployment
17
+ - Migration from older Plone versions (keeping the familiar server-rendered UX)
18
+ - Projects requiring Blicca-specific add-ons
19
19
 
20
- **When to use Volto instead:** See the [production-volto](../production-volto/) example for modern React-based UI with better performance and UX.
20
+ **When to use Volto instead:** See the [production-volto](../production-volto/) example for the React single-page frontend approach.
21
21
 
22
22
  ## Features
23
23
 
24
24
  This example includes:
25
25
 
26
- - **Plone 6.1 with Classic UI** (traditional server-side rendering)
26
+ - **Plone 6.1 with Blicca** (server-side rendering)
27
27
  - **PostgreSQL with RelStorage** - Choose between:
28
28
  - [CloudNativePG](https://cloudnative-pg.io/) (CNCF project, production-ready with HA)
29
29
  - [Bitnami PostgreSQL](https://github.com/bitnami/charts/tree/main/bitnami/postgresql) Helm chart (simple, for dev/testing)
@@ -115,30 +115,29 @@ DATABASE=cloudnativepg
115
115
  npm run synth
116
116
  ```
117
117
 
118
- This generates `dist/plone-classic.k8s.yaml` with all Kubernetes resources.
118
+ This generates `dist/plone-blicca.k8s.yaml` with all Kubernetes resources.
119
119
 
120
120
  ### 4. Deploy to Kubernetes
121
121
 
122
122
  ```bash
123
- kubectl apply -f dist/plone-classic.k8s.yaml
123
+ kubectl apply -f dist/plone-blicca.k8s.yaml
124
124
  ```
125
125
 
126
126
  Or deploy to a specific namespace:
127
127
  ```bash
128
- kubectl apply -f dist/plone-classic.k8s.yaml -n plone
128
+ kubectl apply -f dist/plone-blicca.k8s.yaml -n plone
129
129
  ```
130
130
 
131
- ## Classic UI vs Volto
131
+ ## Blicca vs Volto
132
132
 
133
- | Feature | Classic UI | Volto |
133
+ | Feature | Blicca | Volto |
134
134
  |---------|-----------|-------|
135
135
  | **Architecture** | Single backend service | Separate frontend + backend |
136
136
  | **Rendering** | Server-side (Zope) | Client-side (React) |
137
137
  | **Performance** | Good with caching | Excellent (SPA) |
138
- | **UX** | Traditional | Modern |
139
138
  | **Deployment** | Simpler | More complex |
140
- | **Add-ons** | Full classic support | Volto-specific needed |
141
- | **Best for** | Migrations, intranets | New projects, public sites |
139
+ | **Add-ons** | Full Blicca support | Volto-specific needed |
140
+ | **Best for** | Single-service setups, migrations | API-first projects, SPA frontends |
142
141
 
143
142
  ## Architecture
144
143
 
@@ -157,7 +156,7 @@ kubectl apply -f dist/plone-classic.k8s.yaml -n plone
157
156
  │ │
158
157
  ┌─────────▼─────────┐ ┌─────────▼─────────┐
159
158
  │ HTTP Cache │ │ Plone Backend │
160
- │ (Varnish) │ │ (Classic UI)
159
+ │ (Varnish) │ │ (Blicca)
161
160
  └─────────┬─────────┘ │ │
162
161
  │ └─────────┬─────────┘
163
162
  │ │
@@ -255,7 +254,7 @@ Edit [ingress.ts](ingress.ts) to:
255
254
 
256
255
  ## Accessing Your Plone Site
257
256
 
258
- After deployment, you can access your Plone Classic UI site at:
257
+ After deployment, you can access your Plone Blicca site at:
259
258
 
260
259
  - **Cached (public)**: https://plone.example.com (via Varnish)
261
260
  - **Uncached (testing)**: https://plone-test.example.com (direct to backend)
@@ -319,7 +318,7 @@ kubectl get secret -l app.kubernetes.io/part-of=plone
319
318
  kubectl get all -l app.kubernetes.io/part-of=plone
320
319
  ```
321
320
 
322
- ## Migrating from Classic UI to Volto
321
+ ## Migrating from Blicca to Volto
323
322
 
324
323
  If you later want to migrate to Volto:
325
324
 
@@ -333,7 +332,7 @@ If you later want to migrate to Volto:
333
332
 
334
333
  - [cdk8s-plone Documentation](https://bluedynamics.github.io/cdk8s-plone/)
335
334
  - [Plone 6 Documentation](https://6.docs.plone.org/)
336
- - [Plone Classic UI Guide](https://6.docs.plone.org/classic-ui/)
335
+ - [Plone Classic UI Guide](https://6.docs.plone.org/classic-ui/) (upstream docs; Blicca is the new name for Classic UI)
337
336
  - [CloudNativePG Documentation](https://cloudnative-pg.io/documentation/)
338
337
  - [CDK8S Documentation](https://cdk8s.io/)
339
338
  - [Varnish Documentation](https://varnish-cache.org/docs/)
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Classic UI Example Synthesizes correctly 1`] = `
3
+ exports[`Blicca Example Synthesizes correctly 1`] = `
4
4
  [
5
5
  {
6
6
  "apiVersion": "networking.k8s.io/v1",
@@ -486,7 +486,7 @@ exports[`Classic UI Example Synthesizes correctly 1`] = `
486
486
  "app.kubernetes.io/managed-by": "cdk8s-plone",
487
487
  "app.kubernetes.io/name": "plone-backend",
488
488
  "app.kubernetes.io/part-of": "plone",
489
- "app.kubernetes.io/version": "classic.version",
489
+ "app.kubernetes.io/version": "blicca.version",
490
490
  },
491
491
  },
492
492
  "spec": {
@@ -729,7 +729,7 @@ sub vcl_recv {
729
729
  # Annotate request with x-auth indicating if request is authenticated or not
730
730
  call detect_auth;
731
731
 
732
- # Routing: All traffic goes to Plone backend for Classic UI
732
+ # Routing: All traffic goes to Plone backend for Blicca
733
733
  set req.backend_hint = lbPloneBackend.backend();
734
734
 
735
735
  # short cut authenticated requests to pass
@@ -58,7 +58,7 @@ sub vcl_recv {
58
58
  # Annotate request with x-auth indicating if request is authenticated or not
59
59
  call detect_auth;
60
60
 
61
- # Routing: All traffic goes to Plone backend for Classic UI
61
+ # Routing: All traffic goes to Plone backend for Blicca
62
62
  set req.backend_hint = lbPloneBackend.backend();
63
63
 
64
64
  # short cut authenticated requests to pass
@@ -1,10 +1,10 @@
1
- import { ClassicUIChart } from './main';
1
+ import { BliccaChart } from './main';
2
2
  import { Testing } from 'cdk8s';
3
3
 
4
- describe('Classic UI Example', () => {
4
+ describe('Blicca Example', () => {
5
5
  test('Synthesizes correctly', () => {
6
6
  const app = Testing.app();
7
- const chart = new ClassicUIChart(app, 'test-chart');
7
+ const chart = new BliccaChart(app, 'test-chart');
8
8
  const results = Testing.synth(chart);
9
9
  expect(results).toMatchSnapshot();
10
10
  });
@@ -9,7 +9,7 @@ import { PGBitnamiChart } from './postgres.bitnami';
9
9
  import { PGCloudNativePGChart } from './postgres.cloudnativepg';
10
10
 
11
11
 
12
- export class ClassicUIChart extends Chart {
12
+ export class BliccaChart extends Chart {
13
13
  constructor(scope: Construct, id: string, props: ChartProps = {}) {
14
14
  super(scope, id, props);
15
15
 
@@ -36,7 +36,7 @@ export class ClassicUIChart extends Chart {
36
36
  }
37
37
 
38
38
  // ================================================================================================================
39
- // Plone Classic UI
39
+ // Plone Blicca
40
40
 
41
41
  // prepare the environment variables for the plone deployment
42
42
  const dbMDName = db.dbServiceName
@@ -55,10 +55,10 @@ export class ClassicUIChart extends Chart {
55
55
  },
56
56
  );
57
57
 
58
- // create the plone deployment with Classic UI variant
58
+ // create the plone deployment with Blicca variant
59
59
  const plone = new Plone(this, 'plone', {
60
- version: 'classic.version',
61
- variant: PloneVariant.CLASSICUI,
60
+ version: 'blicca.version',
61
+ variant: PloneVariant.BLICCA,
62
62
  backend: {
63
63
  image: process.env.PLONE_BACKEND_IMAGE ?? 'plone/plone-backend:6.1.3',
64
64
  environment: env,
@@ -96,5 +96,5 @@ export class ClassicUIChart extends Chart {
96
96
 
97
97
 
98
98
  const app = new App();
99
- new ClassicUIChart(app, 'plone-classic');
99
+ new BliccaChart(app, 'plone-blicca');
100
100
  app.synth();
@@ -1,7 +1,7 @@
1
1
  {
2
- "name": "cdk8s-plone-example-classic-ui",
2
+ "name": "cdk8s-plone-example-blicca",
3
3
  "version": "1.0.0",
4
- "description": "Classic UI Plone deployment example using cdk8s-plone",
4
+ "description": "Blicca Plone deployment example using cdk8s-plone",
5
5
  "main": "main.js",
6
6
  "types": "main.ts",
7
7
  "license": "Apache-2.0",
package/lib/httpcache.js CHANGED
@@ -118,5 +118,5 @@ class PloneHttpcache extends constructs_1.Construct {
118
118
  }
119
119
  exports.PloneHttpcache = PloneHttpcache;
120
120
  _a = JSII_RTTI_SYMBOL_1;
121
- PloneHttpcache[_a] = { fqn: "@bluedynamics/cdk8s-plone.PloneHttpcache", version: "0.1.40" };
121
+ PloneHttpcache[_a] = { fqn: "@bluedynamics/cdk8s-plone.PloneHttpcache", version: "0.1.42" };
122
122
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cGNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2h0dHBjYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsaUNBQTZCO0FBQzdCLDJDQUF1QztBQXdKdkM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFPM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxPQUE4QjtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksVUFBa0IsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLElBQUksT0FBZSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUM5RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDbkMsQ0FBQztZQUNELFVBQVUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUM1Qyx1REFBdUQ7WUFDdkQsSUFBSSxFQUFFLDBCQUEwQjtZQUNoQyxLQUFLLEVBQUUsZ0JBQWdCO1lBQ3ZCLE9BQU8sRUFBRSxPQUFPLENBQUMsWUFBWTtZQUM3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QUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUNwRCxDQUFDOztBQS9GSCx3Q0FnR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgSGVsbSB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGxvbmUgfSBmcm9tICcuL3Bsb25lJztcblxuLyoqXG4gKiBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwYXNzIHRvIHRoZSBrdWJlLWh0dHBjYWNoZSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cGNhY2hlRW52VmFyIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBLdWJlcm5ldGVzIHRvbGVyYXRpb24gZm9yIHRoZSBWYXJuaXNoIHBvZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cGNhY2hlVG9sZXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgdGFpbnQga2V5IHRvIHRvbGVyYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRvciAoRXF1YWwgb3IgRXhpc3RzKS5cbiAgICogQGRlZmF1bHQgJ0VxdWFsJ1xuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0b3I/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWludCB2YWx1ZSB0byBtYXRjaCAod2hlbiBvcGVyYXRvciBpcyBFcXVhbCkuXG4gICAqIEBkZWZhdWx0IC0gbm8gdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFpbnQgZWZmZWN0IHRvIHRvbGVyYXRlIChOb1NjaGVkdWxlLCBQcmVmZXJOb1NjaGVkdWxlLCBOb0V4ZWN1dGUpLlxuICAgKiBAZGVmYXVsdCAtIHRvbGVyYXRlIGFsbCBlZmZlY3RzXG4gICAqL1xuICByZWFkb25seSBlZmZlY3Q/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBQbG9uZUh0dHBjYWNoZSAoVmFybmlzaCBjYWNoaW5nIGxheWVyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG9uZUh0dHBjYWNoZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFBsb25lIGNvbnN0cnVjdCB0byBhdHRhY2ggdGhlIEhUVFAgY2FjaGUgdG8uXG4gICAqIFRoZSBjYWNoZSB3aWxsIGF1dG9tYXRpY2FsbHkgY29ubmVjdCB0byB0aGUgYmFja2VuZCBhbmQgZnJvbnRlbmQgc2VydmljZXMuXG4gICAqL1xuICByZWFkb25seSBwbG9uZTogUGxvbmU7XG5cbiAgLyoqXG4gICAqIFZhcm5pc2ggVkNMIGNvbmZpZ3VyYXRpb24gYXMgYSBzdHJpbmcuXG4gICAqIElmIHByb3ZpZGVkLCB0aGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB2YXJuaXNoVmNsRmlsZS5cbiAgICogQGRlZmF1bHQgLSBsb2FkZWQgZnJvbSB2YXJuaXNoVmNsRmlsZSBvciBkZWZhdWx0IGNvbmZpZyBmaWxlXG4gICAqL1xuICByZWFkb25seSB2YXJuaXNoVmNsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGEgVmFybmlzaCBWQ0wgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIGRlZmF1bHQgVkNMIGZpbGUgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkuXG4gICAqIEBkZWZhdWx0IC0gdXNlcyBkZWZhdWx0IGNvbmZpZy92YXJuaXNoLnRwbC52Y2xcbiAgICovXG4gIHJlYWRvbmx5IHZhcm5pc2hWY2xGaWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIGFuIGV4aXN0aW5nIEt1YmVybmV0ZXMgc2VjcmV0IGNvbnRhaW5pbmcgVmFybmlzaCBhZG1pbiBjcmVkZW50aWFscy5cbiAgICogVGhlIHNlY3JldCBzaG91bGQgYmUgY3JlYXRlZCBzZXBhcmF0ZWx5IGluIHRoZSBzYW1lIG5hbWVzcGFjZS5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgKG5vIGV4aXN0aW5nIHNlY3JldClcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgbGltaXQgZm9yIFZhcm5pc2ggcG9kcy5cbiAgICogQGRlZmF1bHQgJzUwMG0nXG4gICAqL1xuICByZWFkb25seSBsaW1pdENwdT86IHN0cmluZztcblxuICAvKipcbiAgICogTWVtb3J5IGxpbWl0IGZvciBWYXJuaXNoIHBvZHMuXG4gICAqIEBkZWZhdWx0ICc1MDBNaSdcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0TWVtb3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgcmVxdWVzdCBmb3IgVmFybmlzaCBwb2RzLlxuICAgKiBAZGVmYXVsdCAnMTAwbSdcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RDcHU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lbW9yeSByZXF1ZXN0IGZvciBWYXJuaXNoIHBvZHMuXG4gICAqIEBkZWZhdWx0ICcxMDBNaSdcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RNZW1vcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBQcm9tZXRoZXVzIFNlcnZpY2VNb25pdG9yIGZvciBtZXRyaWNzIGNvbGxlY3Rpb24uXG4gICAqIFJlcXVpcmVzIFByb21ldGhldXMgT3BlcmF0b3IgdG8gYmUgaW5zdGFsbGVkIGluIHRoZSBjbHVzdGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZW1vbml0b3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIFByb21ldGhldXMgZXhwb3J0ZXIgZm9yIFZhcm5pc2ggbWV0cmljcy5cbiAgICogV2hlbiBlbmFibGVkLCB0aGUgZXhwb3J0ZXIgc2lkZWNhciBjb250YWluZXIgd2lsbCBiZSBkZXBsb3llZCBhbG9uZ3NpZGUgVmFybmlzaC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhwb3J0ZXJFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0aGUga3ViZS1odHRwY2FjaGUgSGVsbSBjaGFydCB0byB1c2UuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIHRoZSByZXBvc2l0b3J5IHdpbGwgYmUgdXNlZC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIChsYXRlc3QpXG4gICAqL1xuICByZWFkb25seSBjaGFydFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIGt1YmUtaHR0cGNhY2hlIENvbnRhaW5lciBJbWFnZSB0byB1c2UuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIHRoZSByZXBvc2l0b3J5IHdpbGwgYmUgdXNlZC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIChjaGFydFZlcnNpb24gPSB3aXRoIGVhY2ggY2hhcnQgcmVsZWFzZSB0aGVyZSBpcyBhbiBpbWFnZSByZWxlYXNlIHRvbyApXG4gICAqL1xuICByZWFkb25seSBhcHBWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgVmFybmlzaCBwb2QgcmVwbGljYXMgdG8gcnVuLlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUga3ViZS1odHRwY2FjaGUgY29udGFpbmVyLlxuICAgKiBUaGVzZSBhcmUgYXBwZW5kZWQgdG8gdGhlIGJ1aWx0LWluIGVudiB2YXJzIChCQUNLRU5EX1NFUlZJQ0VfTkFNRSwgZXRjLilcbiAgICogYW5kIGNhbiBiZSByZWZlcmVuY2VkIGluIFZDTCB0ZW1wbGF0ZXMgdXNpbmcgR28gdGVtcGxhdGUgc3ludGF4OiB7eyAuRW52LlZBUl9OQU1FIH19XG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBlbnYgdmFyc1xuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFFbnZWYXJzPzogSHR0cGNhY2hlRW52VmFyW107XG5cbiAgLyoqXG4gICAqIFRvbGVyYXRpb25zIGZvciB0aGUgVmFybmlzaCBwb2RzLlxuICAgKiBVc2UgdGhpcyB0byBhbGxvdyBzY2hlZHVsaW5nIG9uIG5vZGVzIHdpdGggc3BlY2lmaWMgdGFpbnRzLFxuICAgKiBlLmcuIG5vZGVzIHRhaW50ZWQgd2l0aCBrdWJlcm5ldGVzLmlvL2FyY2g9YW1kNjQ6Tm9TY2hlZHVsZS5cbiAgICogQGRlZmF1bHQgLSBubyB0b2xlcmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgdG9sZXJhdGlvbnM/OiBIdHRwY2FjaGVUb2xlcmF0aW9uW107XG59XG5cbi8qKlxuICogUGxvbmVIdHRwY2FjaGUgY29uc3RydWN0IGZvciBkZXBsb3lpbmcgVmFybmlzaCBIVFRQIGNhY2hpbmcgbGF5ZXIuXG4gKlxuICogVXNlcyB0aGUgbWl0dHdhbGQva3ViZS1odHRwY2FjaGUgSGVsbSBjaGFydCB0byBkZXBsb3kgVmFybmlzaCBhcyBhXG4gKiBjYWNoaW5nIHByb3h5IGluIGZyb250IG9mIFBsb25lIGJhY2tlbmQgYW5kL29yIGZyb250ZW5kIHNlcnZpY2VzLlxuICpcbiAqIFRoZSBjYWNoZSBhdXRvbWF0aWNhbGx5IGNvbm5lY3RzIHRvIHRoZSBQbG9uZSBzZXJ2aWNlcyBhbmQgcHJvdmlkZXNcbiAqIEhUVFAgY2FjaGUgaW52YWxpZGF0aW9uIGNhcGFiaWxpdGllcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcGxvbmUgPSBuZXcgUGxvbmUoY2hhcnQsICdwbG9uZScpO1xuICogY29uc3QgY2FjaGUgPSBuZXcgUGxvbmVIdHRwY2FjaGUoY2hhcnQsICdjYWNoZScsIHtcbiAqICAgcGxvbmU6IHBsb25lLFxuICogICBleGlzdGluZ1NlY3JldDogJ3Zhcm5pc2gtc2VjcmV0JyxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgUGxvbmVIdHRwY2FjaGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgVmFybmlzaCBzZXJ2aWNlIGNyZWF0ZWQgYnkgdGhlIEhlbG0gY2hhcnQuXG4gICAqIFVzZSB0aGlzIHRvIHJlZmVyZW5jZSB0aGUgY2FjaGUgc2VydmljZSBmcm9tIGluZ3Jlc3Mgb3Igb3RoZXIgY29uc3RydWN0cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBodHRwY2FjaGVTZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IFBsb25lSHR0cGNhY2hlT3B0aW9ucykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgbGV0IHZhcm5pc2hWY2w6IHN0cmluZztcbiAgICBpZiAoIW9wdGlvbnMudmFybmlzaFZjbCkge1xuICAgICAgbGV0IHZjbFBhdGg6IHN0cmluZztcbiAgICAgIGlmICghb3B0aW9ucy52YXJuaXNoVmNsRmlsZSkge1xuICAgICAgICB2Y2xQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2NvbmZpZycsICd2YXJuaXNoLnRwbC52Y2wnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZjbFBhdGggPSBvcHRpb25zLnZhcm5pc2hWY2xGaWxlO1xuICAgICAgfVxuICAgICAgdmFybmlzaFZjbCA9IGZzLnJlYWRGaWxlU3luYyh2Y2xQYXRoLCAndXRmOCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXJuaXNoVmNsID0gb3B0aW9ucy52YXJuaXNoVmNsO1xuICAgIH1cbiAgICBjb25zdCBpbWFnZVRhZyA9IG9wdGlvbnMuYXBwVmVyc2lvbiA/PyBvcHRpb25zLmNoYXJ0VmVyc2lvbjtcbiAgICBjb25zdCBodHRwY2FjaGUgPSBuZXcgSGVsbSh0aGlzLCAnaHR0cGNhY2hlJywge1xuICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9taXR0d2FsZC9rdWJlLWh0dHBjYWNoZS9jaGFydFxuICAgICAgcmVwbzogJ2h0dHBzOi8vaGVsbS5taXR0d2FsZC5kZScsXG4gICAgICBjaGFydDogJ2t1YmUtaHR0cGNhY2hlJyxcbiAgICAgIHZlcnNpb246IG9wdGlvbnMuY2hhcnRWZXJzaW9uLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgIHJlcGxpY2FDb3VudDogb3B0aW9ucy5yZXBsaWNhcyA/PyAyLFxuICAgICAgICAuLi4oaW1hZ2VUYWcgJiYgeyBpbWFnZTogeyB0YWc6IGltYWdlVGFnIH0gfSksXG4gICAgICAgIGNhY2hlOiB7XG4gICAgICAgICAgYmFja2VuZFNlcnZpY2U6IG9wdGlvbnMucGxvbmUuYmFja2VuZFNlcnZpY2VOYW1lLFxuICAgICAgICAgIGZyb250ZW5kV2F0Y2g6IGZhbHNlLFxuICAgICAgICAgIGJhY2tlbmRXYXRjaDogdHJ1ZSxcbiAgICAgICAgICBleGlzdGluZ1NlY3JldDogb3B0aW9ucy5leGlzdGluZ1NlY3JldCA/PyB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFdvcmthcm91bmQ6IHVwc3RyZWFtIGNoYXJ0IGFjY2VwdHMgYmFja2VuZFBvcnROYW1lIGJ1dCBuZXZlclxuICAgICAgICAvLyByZW5kZXJzIGl0IGFzIENMSSBhcmcuIFBhc3MgdmlhIGNhY2hlRXh0cmFBcmdzIGluc3RlYWQuXG4gICAgICAgIGNhY2hlRXh0cmFBcmdzOiAnLSAtYmFja2VuZC1wb3J0bmFtZT1iYWNrZW5kLWh0dHAnLFxuICAgICAgICB2Y2xUZW1wbGF0ZTogdmFybmlzaFZjbCxcbiAgICAgICAgZXh0cmFFbnZWYXJzOiBbXG4gICAgICAgICAgeyBuYW1lOiAnQkFDS0VORF9TRVJWSUNFX05BTUUnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5iYWNrZW5kU2VydmljZU5hbWUgfSxcbiAgICAgICAgICB7IG5hbWU6ICdCQUNLRU5EX1NFUlZJQ0VfUE9SVCcsIHZhbHVlOiAnODA4MCcgfSxcbiAgICAgICAgICB7IG5hbWU6ICdCQUNLRU5EX1NJVEVfSUQnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5zaXRlSWQgfSxcbiAgICAgICAgICB7IG5hbWU6ICdGUk9OVEVORF9TRVJWSUNFX05BTUUnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5mcm9udGVuZFNlcnZpY2VOYW1lIH0sXG4gICAgICAgICAgeyBuYW1lOiAnRlJPTlRFTkRfU0VSVklDRV9QT1JUJywgdmFsdWU6ICczMDAwJyB9LFxuICAgICAgICAgIC4uLihvcHRpb25zLmV4dHJhRW52VmFycyA/PyBbXSksXG4gICAgICAgIF0sXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWl0dHdhbGQva3ViZS1odHRwY2FjaGUvaXNzdWVzLzI1M1xuICAgICAgICBub2RlU2VsZWN0b3I6IHtcbiAgICAgICAgICAna3ViZXJuZXRlcy5pby9hcmNoJzogJ2FtZDY0JyxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKG9wdGlvbnMudG9sZXJhdGlvbnMgJiYgeyB0b2xlcmF0aW9uczogb3B0aW9ucy50b2xlcmF0aW9ucyB9KSxcbiAgICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICBjcHU6IG9wdGlvbnMubGltaXRDcHUgfHwgJzUwMG0nLFxuICAgICAgICAgICAgbWVtb3J5OiBvcHRpb25zLmxpbWl0TWVtb3J5IHx8ICc1MDBNaScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1ZXN0czoge1xuICAgICAgICAgICAgY3B1OiBvcHRpb25zLnJlcXVlc3RDcHUgfHwgJzEwMG0nLFxuICAgICAgICAgICAgbWVtb3J5OiBvcHRpb25zLnJlcXVlc3RNZW1vcnkgfHwgJzEwME1pJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByYmFjOiB7XG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZXhwb3J0ZXI6IHtcbiAgICAgICAgICBlbmFibGVkOiBvcHRpb25zLmV4cG9ydGVyRW5hYmxlZCA/PyB0cnVlLFxuICAgICAgICAgIHJlc291cmNlczoge1xuICAgICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICAgIGNwdTogJzEwMG0nLFxuICAgICAgICAgICAgICBtZW1vcnk6ICcxMDBNaScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdHM6IHtcbiAgICAgICAgICAgICAgY3B1OiAnMTBtJyxcbiAgICAgICAgICAgICAgbWVtb3J5OiAnNTBNaScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZpY2VNb25pdG9yOiB7XG4gICAgICAgICAgZW5hYmxlZDogb3B0aW9ucy5zZXJ2aWNlbW9uaXRvciB8fCBmYWxzZSxcbiAgICAgICAgICBzY3JhcGVTaWduYWxsZXI6IG9wdGlvbnMuc2VydmljZW1vbml0b3IgfHwgZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGh0dHBjYWNoZVNlcnZpY2UgPSBodHRwY2FjaGUuYXBpT2JqZWN0cy5maW5kKChjb25zdHJ1Y3QpID0+IHtcbiAgICAgIGlmICgoY29uc3RydWN0LmtpbmQgPT09ICdTZXJ2aWNlJykgJiYgKGNvbnN0cnVjdC5tZXRhZGF0YS5uYW1lPy5lbmRzV2l0aCgna3ViZS1odHRwY2FjaGUnKSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdC5uYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpZiAoaHR0cGNhY2hlU2VydmljZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGh0dHBjYWNoZSBzZXJ2aWNlJyk7XG4gICAgfVxuICAgIHRoaXMuaHR0cGNhY2hlU2VydmljZU5hbWUgPSBodHRwY2FjaGVTZXJ2aWNlLm5hbWU7XG4gIH1cbn0iXX0=
package/lib/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { Plone, PloneOptions, PloneBaseOptions, PloneVariant, PloneSecurityContext, PloneCapabilities } from './plone';
2
+ export { PloneServiceSpec } from './service';
2
3
  export { PloneHttpcache, PloneHttpcacheOptions, HttpcacheEnvVar, HttpcacheToleration } from './httpcache';
3
4
  export { PloneVinylCache, PloneVinylCacheOptions, VinylCacheToleration, VinylCacheBackend, VinylCacheBackendProbe, VinylCacheStorage } from './vinylcache';
package/lib/index.js CHANGED
@@ -8,4 +8,4 @@ var httpcache_1 = require("./httpcache");
8
8
  Object.defineProperty(exports, "PloneHttpcache", { enumerable: true, get: function () { return httpcache_1.PloneHttpcache; } });
9
9
  var vinylcache_1 = require("./vinylcache");
10
10
  Object.defineProperty(exports, "PloneVinylCache", { enumerable: true, get: function () { return vinylcache_1.PloneVinylCache; } });
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXVIO0FBQTlHLDhGQUFBLEtBQUssT0FBQTtBQUFrQyxxR0FBQSxZQUFZLE9BQUE7QUFDNUQseUNBQTBHO0FBQWpHLDJHQUFBLGNBQWMsT0FBQTtBQUN2QiwyQ0FBMko7QUFBbEosNkdBQUEsZUFBZSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgUGxvbmUsIFBsb25lT3B0aW9ucywgUGxvbmVCYXNlT3B0aW9ucywgUGxvbmVWYXJpYW50LCBQbG9uZVNlY3VyaXR5Q29udGV4dCwgUGxvbmVDYXBhYmlsaXRpZXMgfSBmcm9tICcuL3Bsb25lJztcbmV4cG9ydCB7IFBsb25lSHR0cGNhY2hlLCBQbG9uZUh0dHBjYWNoZU9wdGlvbnMsIEh0dHBjYWNoZUVudlZhciwgSHR0cGNhY2hlVG9sZXJhdGlvbiB9IGZyb20gJy4vaHR0cGNhY2hlJztcbmV4cG9ydCB7IFBsb25lVmlueWxDYWNoZSwgUGxvbmVWaW55bENhY2hlT3B0aW9ucywgVmlueWxDYWNoZVRvbGVyYXRpb24sIFZpbnlsQ2FjaGVCYWNrZW5kLCBWaW55bENhY2hlQmFja2VuZFByb2JlLCBWaW55bENhY2hlU3RvcmFnZSB9IGZyb20gJy4vdmlueWxjYWNoZSc7XG4iXX0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXVIO0FBQTlHLDhGQUFBLEtBQUssT0FBQTtBQUFrQyxxR0FBQSxZQUFZLE9BQUE7QUFFNUQseUNBQTBHO0FBQWpHLDJHQUFBLGNBQWMsT0FBQTtBQUN2QiwyQ0FBMko7QUFBbEosNkdBQUEsZUFBZSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgUGxvbmUsIFBsb25lT3B0aW9ucywgUGxvbmVCYXNlT3B0aW9ucywgUGxvbmVWYXJpYW50LCBQbG9uZVNlY3VyaXR5Q29udGV4dCwgUGxvbmVDYXBhYmlsaXRpZXMgfSBmcm9tICcuL3Bsb25lJztcbmV4cG9ydCB7IFBsb25lU2VydmljZVNwZWMgfSBmcm9tICcuL3NlcnZpY2UnO1xuZXhwb3J0IHsgUGxvbmVIdHRwY2FjaGUsIFBsb25lSHR0cGNhY2hlT3B0aW9ucywgSHR0cGNhY2hlRW52VmFyLCBIdHRwY2FjaGVUb2xlcmF0aW9uIH0gZnJvbSAnLi9odHRwY2FjaGUnO1xuZXhwb3J0IHsgUGxvbmVWaW55bENhY2hlLCBQbG9uZVZpbnlsQ2FjaGVPcHRpb25zLCBWaW55bENhY2hlVG9sZXJhdGlvbiwgVmlueWxDYWNoZUJhY2tlbmQsIFZpbnlsQ2FjaGVCYWNrZW5kUHJvYmUsIFZpbnlsQ2FjaGVTdG9yYWdlIH0gZnJvbSAnLi92aW55bGNhY2hlJztcbiJdfQ==
package/lib/plone.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as kplus from 'cdk8s-plus-30';
2
2
  import { Construct } from 'constructs';
3
+ import { PloneServiceSpec } from './service';
3
4
  /**
4
5
  * Linux capabilities to add or drop on a container.
5
6
  */
@@ -207,11 +208,20 @@ export interface PloneBaseOptions {
207
208
  * Annotations to add to the Service metadata.
208
209
  * Common for external-dns, load balancers, service mesh, etc.
209
210
  * @example { 'external-dns.alpha.kubernetes.io/hostname': 'plone.example.com' }
211
+ * @deprecated use `service.annotations` instead
210
212
  * @default - no additional annotations
211
213
  */
212
214
  readonly serviceAnnotations?: {
213
215
  [name: string]: string;
214
216
  };
217
+ /**
218
+ * Service configuration: type, trafficDistribution, sessionAffinity,
219
+ * annotations/labels, and a raw `overrides` escape hatch for any other
220
+ * ServiceSpec field. Applies to this component's Service.
221
+ * @example { type: 'LoadBalancer', trafficDistribution: 'PreferClose' }
222
+ * @default - construct-managed defaults only
223
+ */
224
+ readonly service?: PloneServiceSpec;
215
225
  /**
216
226
  * Enable Prometheus ServiceMonitor for metrics collection.
217
227
  * Requires Prometheus Operator to be installed in the cluster.
@@ -253,14 +263,22 @@ export interface PloneBaseOptions {
253
263
  */
254
264
  export declare enum PloneVariant {
255
265
  /**
256
- * Volto variant: ReactJS frontend (Volto) with REST API backend.
266
+ * Volto variant: ReactJS single-page frontend (Volto) talking to the Plone REST API.
257
267
  * Deploys both frontend and backend services.
258
268
  */
259
269
  VOLTO = "volto",
260
270
  /**
261
- * Classic UI variant: Traditional Plone with server-side rendering.
271
+ * Blicca variant: the Plone backend renders the UI server-side and serves the HTML directly.
262
272
  * Deploys only the backend service.
263
273
  */
274
+ BLICCA = "blicca",
275
+ /**
276
+ * Deprecated alias for the Blicca variant (formerly "Classic UI").
277
+ *
278
+ * @deprecated Renamed to {@link BLICCA}. Kept for backward compatibility and selects the
279
+ * same backend-only deployment. Existing configuration using `CLASSICUI` (or the literal
280
+ * value `'classicui'`) keeps working unchanged. Will be removed in a future major release.
281
+ */
264
282
  CLASSICUI = "classicui"
265
283
  }
266
284
  /**
@@ -312,8 +330,8 @@ export interface PloneOptions {
312
330
  * - Optional PodDisruptionBudget for high availability
313
331
  *
314
332
  * Supports two deployment variants:
315
- * - VOLTO: Modern React frontend with REST API backend (default)
316
- * - CLASSICUI: Traditional server-side rendered Plone
333
+ * - VOLTO: React single-page frontend talking to the REST API backend (default)
334
+ * - BLICCA: the Plone backend renders the UI server-side and serves HTML directly
317
335
  *
318
336
  * @example
319
337
  * new Plone(chart, 'my-plone', {
@@ -339,7 +357,7 @@ export declare class Plone extends Construct {
339
357
  */
340
358
  readonly frontendServiceName: string | undefined;
341
359
  /**
342
- * The deployment variant being used (VOLTO or CLASSICUI).
360
+ * The deployment variant being used (VOLTO or BLICCA).
343
361
  */
344
362
  readonly variant: PloneVariant;
345
363
  /**
package/lib/plone.js CHANGED
@@ -16,14 +16,22 @@ const service_1 = require("./service");
16
16
  var PloneVariant;
17
17
  (function (PloneVariant) {
18
18
  /**
19
- * Volto variant: ReactJS frontend (Volto) with REST API backend.
19
+ * Volto variant: ReactJS single-page frontend (Volto) talking to the Plone REST API.
20
20
  * Deploys both frontend and backend services.
21
21
  */
22
22
  PloneVariant["VOLTO"] = "volto";
23
23
  /**
24
- * Classic UI variant: Traditional Plone with server-side rendering.
24
+ * Blicca variant: the Plone backend renders the UI server-side and serves the HTML directly.
25
25
  * Deploys only the backend service.
26
26
  */
27
+ PloneVariant["BLICCA"] = "blicca";
28
+ /**
29
+ * Deprecated alias for the Blicca variant (formerly "Classic UI").
30
+ *
31
+ * @deprecated Renamed to {@link BLICCA}. Kept for backward compatibility and selects the
32
+ * same backend-only deployment. Existing configuration using `CLASSICUI` (or the literal
33
+ * value `'classicui'`) keeps working unchanged. Will be removed in a future major release.
34
+ */
27
35
  PloneVariant["CLASSICUI"] = "classicui";
28
36
  })(PloneVariant || (exports.PloneVariant = PloneVariant = {}));
29
37
  /**
@@ -35,8 +43,8 @@ var PloneVariant;
35
43
  * - Optional PodDisruptionBudget for high availability
36
44
  *
37
45
  * Supports two deployment variants:
38
- * - VOLTO: Modern React frontend with REST API backend (default)
39
- * - CLASSICUI: Traditional server-side rendered Plone
46
+ * - VOLTO: React single-page frontend talking to the REST API backend (default)
47
+ * - BLICCA: the Plone backend renders the UI server-side and serves HTML directly
40
48
  *
41
49
  * @example
42
50
  * new Plone(chart, 'my-plone', {
@@ -125,7 +133,10 @@ class Plone extends constructs_1.Construct {
125
133
  targetPort: backendPort,
126
134
  selectorLabel: { app: cdk8s_1.Names.toLabelValue(backendDeployment) },
127
135
  portName: 'backend-http',
128
- annotations: backend.serviceAnnotations,
136
+ spec: {
137
+ ...backend.service,
138
+ annotations: { ...backend.serviceAnnotations, ...backend.service?.annotations },
139
+ },
129
140
  });
130
141
  this.backendServiceName = backendService.name;
131
142
  // ServiceMonitor for backend
@@ -211,7 +222,10 @@ class Plone extends constructs_1.Construct {
211
222
  targetPort: frontendPort,
212
223
  selectorLabel: { app: cdk8s_1.Names.toLabelValue(frontendDeployment) },
213
224
  portName: 'frontend-http',
214
- annotations: frontend.serviceAnnotations,
225
+ spec: {
226
+ ...frontend.service,
227
+ annotations: { ...frontend.serviceAnnotations, ...frontend.service?.annotations },
228
+ },
215
229
  });
216
230
  this.frontendServiceName = frontendService.name;
217
231
  // ServiceMonitor for frontend
@@ -262,5 +276,5 @@ class Plone extends constructs_1.Construct {
262
276
  }
263
277
  exports.Plone = Plone;
264
278
  _a = JSII_RTTI_SYMBOL_1;
265
- Plone[_a] = { fqn: "@bluedynamics/cdk8s-plone.Plone", version: "0.1.40" };
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGxvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBOEI7QUFDOUIsdUNBQXVDO0FBQ3ZDLDJDQUF1QztBQUN2Qyw2Q0FBdUU7QUFDdkUsdUNBQTRDO0FBRTVDLDJFQUF3RztBQUN4Ryx1Q0FBeUM7QUF3UnpDOztHQUVHO0FBQ0gsSUFBWSxZQVlYO0FBWkQsV0FBWSxZQUFZO0lBQ3RCOzs7T0FHRztJQUNILCtCQUFlLENBQUE7SUFFZjs7O09BR0c7SUFDSCx1Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBWlcsWUFBWSw0QkFBWixZQUFZLFFBWXZCO0FBZ0REOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsS0FBTSxTQUFRLHNCQUFTO0lBdUJsQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFVBQXdCLEVBQUU7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFFckQsMkVBQTJFO1FBQzNFLFVBQVU7UUFDVixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxNQUFNLGFBQWEsR0FBRztZQUNwQix3QkFBd0IsRUFBRSxlQUFlO1lBQ3pDLDZCQUE2QixFQUFFLFNBQVM7WUFDeEMsMkJBQTJCLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxXQUFXO1NBQzVELENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFekIsVUFBVTtRQUNWLElBQUksY0FBYyxHQUEyQjtZQUMz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b0JBQ1IsV0FBVyxFQUFFO3dCQUNYLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUM7cUJBQ25FO2lCQUNGO2dCQUNELFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO3dCQUNuQyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO3dCQUM3QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7d0JBQ2pCLFFBQVEsRUFBRSxLQUFLO3FCQUNoQjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF6UEgsc0JBMFBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmFtZXMgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgKiBhcyBrcGx1cyBmcm9tICdjZGs4cy1wbHVzLTMwJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGxvbmVEZXBsb3ltZW50LCBQbG9uZURlcGxveW1lbnRPcHRpb25zIH0gZnJvbSAnLi9kZXBsb3ltZW50JztcbmltcG9ydCB7IEludE9yU3RyaW5nIH0gZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgKiBhcyBrOHMgZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgeyBTZXJ2aWNlTW9uaXRvciwgU2VydmljZU1vbml0b3JTcGVjRW5kcG9pbnRzVGFyZ2V0UG9ydCB9IGZyb20gJy4vaW1wb3J0cy9tb25pdG9yaW5nLmNvcmVvcy5jb20nO1xuaW1wb3J0IHsgUGxvbmVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlJztcblxuLyoqXG4gKiBMaW51eCBjYXBhYmlsaXRpZXMgdG8gYWRkIG9yIGRyb3Agb24gYSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvbmVDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHRvIGFkZCAoZS5nLiAnU1lTX1BUUkFDRScsICdORVRfQURNSU4nKS5cbiAgICogQGRlZmF1bHQgLSBubyBjYXBhYmlsaXRpZXMgYWRkZWRcbiAgICovXG4gIHJlYWRvbmx5IGFkZD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgdG8gZHJvcCAoZS5nLiAnQUxMJywgJ05FVF9SQVcnKS5cbiAgICogQGRlZmF1bHQgLSBubyBjYXBhYmlsaXRpZXMgZHJvcHBlZFxuICAgKi9cbiAgcmVhZG9ubHkgZHJvcD86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNlY3VyaXR5IGNvbnRleHQgZm9yIGEgUGxvbmUgY29udGFpbmVyLlxuICogQ29udHJvbHMgcHJpdmlsZWdlIGFuZCBhY2Nlc3Mgc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvbmVTZWN1cml0eUNvbnRleHQge1xuICAvKipcbiAgICogTGludXggY2FwYWJpbGl0aWVzIHRvIGFkZCBvciBkcm9wLlxuICAgKiBAZXhhbXBsZSB7IGFkZDogWydTWVNfUFRSQUNFJ10gfVxuICAgKiBAZGVmYXVsdCAtIG5vIGNhcGFiaWxpdHkgY2hhbmdlc1xuICAgKi9cbiAgcmVhZG9ubHkgY2FwYWJpbGl0aWVzPzogUGxvbmVDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgY29udGFpbmVyIGFzIGEgc3BlY2lmaWMgdXNlciBJRC5cbiAgICogQGRlZmF1bHQgLSBjb250YWluZXIgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuQXNVc2VyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGNvbnRhaW5lciBhcyBhIHNwZWNpZmljIGdyb3VwIElELlxuICAgKiBAZGVmYXVsdCAtIGNvbnRhaW5lciBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBydW5Bc0dyb3VwPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlIHRoZSBjb250YWluZXIgdG8gcnVuIGFzIG5vbi1yb290LlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuQXNOb25Sb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTW91bnQgdGhlIHJvb3QgZmlsZXN5c3RlbSBhcyByZWFkLW9ubHkuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSByZWFkT25seVJvb3RGaWxlc3lzdGVtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgcHJpdmlsZWdlIGVzY2FsYXRpb24gZm9yIHRoZSBjb250YWluZXIgcHJvY2Vzcy5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgY29udGFpbmVyIGluIHByaXZpbGVnZWQgbW9kZS5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHByaXZpbGVnZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJhc2Ugb3B0aW9ucyBmb3IgUGxvbmUgYmFja2VuZCBvciBmcm9udGVuZCBjb25maWd1cmF0aW9uLlxuICogVGhlc2Ugb3B0aW9ucyBjb250cm9sIGNvbnRhaW5lciBpbWFnZSwgcmVwbGljYSBjb3VudCwgcmVzb3VyY2UgbGltaXRzLFxuICogZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQgaGVhbHRoIHByb2Jlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG9uZUJhc2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZSB0byB1c2UgZm9yIHRoZSBkZXBsb3ltZW50LlxuICAgKiBAZXhhbXBsZSAncGxvbmUvcGxvbmUtYmFja2VuZDo2LjAuMTAnIG9yICdwbG9uZS9wbG9uZS1mcm9udGVuZDoxNi4wLjAnXG4gICAqIEBkZWZhdWx0IC0gJ3Bsb25lL3Bsb25lLWJhY2tlbmQ6bGF0ZXN0JyBmb3IgYmFja2VuZCwgJ3Bsb25lL3Bsb25lLWZyb250ZW5kOmxhdGVzdCcgZm9yIGZyb250ZW5kXG4gICAqL1xuICByZWFkb25seSBpbWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW1hZ2UgcHVsbCBwb2xpY3kgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0ICdJZk5vdFByZXNlbnQnXG4gICAqL1xuICByZWFkb25seSBpbWFnZVB1bGxQb2xpY3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBwb2QgcmVwbGljYXMgdG8gcnVuLlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgcG9kcyB0aGF0IGNhbiBiZSB1bmF2YWlsYWJsZSBkdXJpbmcgdXBkYXRlcy5cbiAgICogQ2FuIGJlIGFuIGFic29sdXRlIG51bWJlciAoZS5nLiwgMSkgb3IgYSBwZXJjZW50YWdlIChlLmcuLCAnNTAlJykuXG4gICAqIFVzZWQgaW4gUG9kRGlzcnVwdGlvbkJ1ZGdldCBpZiBzcGVjaWZpZWQuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIChub3Qgc2V0KVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4VW5hdmFpbGFibGU/OiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHBvZHMgdGhhdCBtdXN0IGJlIGF2YWlsYWJsZSBkdXJpbmcgdXBkYXRlcy5cbiAgICogQ2FuIGJlIGFuIGFic29sdXRlIG51bWJlciAoZS5nLiwgMSkgb3IgYSBwZXJjZW50YWdlIChlLmcuLCAnNTAlJykuXG4gICAqIFVzZWQgaW4gUG9kRGlzcnVwdGlvbkJ1ZGdldCBpZiBzcGVjaWZpZWQuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIChub3Qgc2V0KVxuICAgKi9cbiAgcmVhZG9ubHkgbWluQXZhaWxhYmxlPzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgbGltaXQgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICc1MDBtJyBvciAnMScgb3IgJzIwMDBtJ1xuICAgKiBAZGVmYXVsdCAnNTAwbScgZm9yIGJvdGggYmFja2VuZCBhbmQgZnJvbnRlbmRcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0Q3B1Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZW1vcnkgbGltaXQgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICc1MTJNaScgb3IgJzFHaSdcbiAgICogQGRlZmF1bHQgJzUxMk1pJyBmb3IgYmFja2VuZCwgJzFHaScgZm9yIGZyb250ZW5kXG4gICAqL1xuICByZWFkb25seSBsaW1pdE1lbW9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQ1BVIHJlcXVlc3QgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICcyMDBtJyBvciAnMC41J1xuICAgKiBAZGVmYXVsdCAnMjAwbSdcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RDcHU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lbW9yeSByZXF1ZXN0IGZvciB0aGUgY29udGFpbmVyLlxuICAgKiBAZXhhbXBsZSAnMjU2TWknIG9yICc1MTJNaSdcbiAgICogQGRlZmF1bHQgJzI1Nk1pJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdE1lbW9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgY29udGFpbmVyLlxuICAgKiBVc2UgY2RrOHMtcGx1cy0zMCBFbnYgY2xhc3MgdG8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgc291cmNlcy5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgKG5vIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBrcGx1cy5FbnY7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSByZWFkaW5lc3MgcHJvYmUgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIFJlYWRpbmVzcyBwcm9iZXMgZGV0ZXJtaW5lIHdoZW4gYSBjb250YWluZXIgaXMgcmVhZHkgdG8gYWNjZXB0IHRyYWZmaWMuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciBjb250YWluZXIgc3RhcnQgYmVmb3JlIHJlYWRpbmVzcyBwcm9iZSBpcyBpbml0aWF0ZWQuXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICByZWFkb25seSByZWFkaW5lc3NJbml0aWFsRGVsYXlTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgcmVhZGluZXNzIHByb2JlIHRpbWVzIG91dC5cbiAgICogQGRlZmF1bHQgMTVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc1RpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgb2Z0ZW4gKGluIHNlY29uZHMpIHRvIHBlcmZvcm0gdGhlIHJlYWRpbmVzcyBwcm9iZS5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc1BlcmlvZFNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gY29uc2VjdXRpdmUgc3VjY2Vzc2VzIGZvciB0aGUgcmVhZGluZXNzIHByb2JlIHRvIGJlIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bC5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzU3VjY2Vzc1RocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBmYWlsdXJlcyBmb3IgdGhlIHJlYWRpbmVzcyBwcm9iZSB0byBiZSBjb25zaWRlcmVkIGZhaWxlZC5cbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzRmFpbHVyZVRocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIGxpdmVuZXNzIHByb2JlIGZvciB0aGUgY29udGFpbmVyLlxuICAgKiBMaXZlbmVzcyBwcm9iZXMgZGV0ZXJtaW5lIHdoZW4gdG8gcmVzdGFydCBhIGNvbnRhaW5lci5cbiAgICogUmVjb21tZW5kZWQ6IHRydWUgZm9yIGZyb250ZW5kLCBmYWxzZSBmb3IgYmFja2VuZCAoWm9wZSBoYXMgaXRzIG93biByZWNvdmVyeSkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsaXZlbmVzc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciBjb250YWluZXIgc3RhcnQgYmVmb3JlIGxpdmVuZXNzIHByb2JlIGlzIGluaXRpYXRlZC5cbiAgICogQGRlZmF1bHQgMzBcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzSW5pdGlhbERlbGF5U2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIGxpdmVuZXNzIHByb2JlIHRpbWVzIG91dC5cbiAgICogQGRlZmF1bHQgNVxuICAgKi9cbiAgcmVhZG9ubHkgbGl2ZW5lc3NUaW1lb3V0U2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogSG93IG9mdGVuIChpbiBzZWNvbmRzKSB0byBwZXJmb3JtIHRoZSBsaXZlbmVzcyBwcm9iZS5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzUGVyaW9kU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBzdWNjZXNzZXMgZm9yIHRoZSBsaXZlbmVzcyBwcm9iZSB0byBiZSBjb25zaWRlcmVkIHN1Y2Nlc3NmdWwuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzU3VjY2Vzc1RocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBmYWlsdXJlcyBmb3IgdGhlIGxpdmVuZXNzIHByb2JlIHRvIGJlIGNvbnNpZGVyZWQgZmFpbGVkLlxuICAgKiBAZGVmYXVsdCAzXG4gICAqL1xuICByZWFkb25seSBsaXZlbmVzc0ZhaWx1cmVUaHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFubm90YXRpb25zIHRvIGFkZCB0byB0aGUgRGVwbG95bWVudCBtZXRhZGF0YS5cbiAgICogQGV4YW1wbGUgeyAnZGVwbG95bWVudC5rdWJlcm5ldGVzLmlvL3JldmlzaW9uJzogJzEnIH1cbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGFubm90YXRpb25zXG4gICAqL1xuICByZWFkb25seSBhbm5vdGF0aW9ucz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBbm5vdGF0aW9ucyB0byBhZGQgdG8gdGhlIFBvZCB0ZW1wbGF0ZSBtZXRhZGF0YS5cbiAgICogQ29tbW9uIGZvciBQcm9tZXRoZXVzLCBJc3RpbywgYmFja3VwIHBvbGljaWVzLCBldGMuXG4gICAqIEBleGFtcGxlIHsgJ3Byb21ldGhldXMuaW8vc2NyYXBlJzogJ3RydWUnLCAncHJvbWV0aGV1cy5pby9wb3J0JzogJzgwODAnIH1cbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGFubm90YXRpb25zXG4gICAqL1xuICByZWFkb25seSBwb2RBbm5vdGF0aW9ucz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBbm5vdGF0aW9ucyB0byBhZGQgdG8gdGhlIFNlcnZpY2UgbWV0YWRhdGEuXG4gICAqIENvbW1vbiBmb3IgZXh0ZXJuYWwtZG5zLCBsb2FkIGJhbGFuY2Vycywgc2VydmljZSBtZXNoLCBldGMuXG4gICAqIEBleGFtcGxlIHsgJ2V4dGVybmFsLWRucy5hbHBoYS5rdWJlcm5ldGVzLmlvL2hvc3RuYW1lJzogJ3Bsb25lLmV4YW1wbGUuY29tJyB9XG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBhbm5vdGF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZUFubm90YXRpb25zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBQcm9tZXRoZXVzIFNlcnZpY2VNb25pdG9yIGZvciBtZXRyaWNzIGNvbGxlY3Rpb24uXG4gICAqIFJlcXVpcmVzIFByb21ldGhldXMgT3BlcmF0b3IgdG8gYmUgaW5zdGFsbGVkIGluIHRoZSBjbHVzdGVyLlxuICAgKiBXaGVuIGVuYWJsZWQsIGEgU2VydmljZU1vbml0b3IgcmVzb3VyY2Ugd2lsbCBiZSBjcmVhdGVkIHRvIHNjcmFwZSBtZXRyaWNzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZW1vbml0b3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQb3J0IG5hbWUgb3IgbnVtYmVyIHRvIHNjcmFwZSBtZXRyaWNzIGZyb20uXG4gICAqIE9ubHkgdXNlZCB3aGVuIHNlcnZpY2Vtb25pdG9yIGlzIGVuYWJsZWQuXG4gICAqIEBkZWZhdWx0IC0gdXNlcyB0aGUgbWFpbiBzZXJ2aWNlIHBvcnRcbiAgICovXG4gIHJlYWRvbmx5IG1ldHJpY3NQb3J0Pzogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHNjcmFwZSBtZXRyaWNzIGZyb20uXG4gICAqIE9ubHkgdXNlZCB3aGVuIHNlcnZpY2Vtb25pdG9yIGlzIGVuYWJsZWQuXG4gICAqIEBkZWZhdWx0ICcvbWV0cmljcydcbiAgICovXG4gIHJlYWRvbmx5IG1ldHJpY3NQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOb2RlIHNlbGVjdG9yIGxhYmVscyBmb3IgcG9kIHNjaGVkdWxpbmcuXG4gICAqIFVzZSB0byBjb25zdHJhaW4gcG9kcyB0byBub2RlcyB3aXRoIG1hdGNoaW5nIGxhYmVscywgZS5nLiBmb3IgcmVnaW9uIGFmZmluaXR5LlxuICAgKiBAZXhhbXBsZSB7ICd0b3BvbG9neS5rdWJlcm5ldGVzLmlvL3JlZ2lvbic6ICdmc24xJyB9XG4gICAqIEBkZWZhdWx0IC0gbm8gbm9kZSBzZWxlY3RvclxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZVNlbGVjdG9yPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU2VjdXJpdHkgY29udGV4dCBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICogVXNlIHRvIHNldCBjYXBhYmlsaXRpZXMsIHJ1biBhcyBub24tcm9vdCwgcmVhZC1vbmx5IGZpbGVzeXN0ZW0sIGV0Yy5cbiAgICogQGV4YW1wbGUgeyBjYXBhYmlsaXRpZXM6IHsgYWRkOiBbJ1NZU19QVFJBQ0UnXSB9IH1cbiAgICogQGRlZmF1bHQgLSBubyBzZWN1cml0eSBjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUNvbnRleHQ/OiBQbG9uZVNlY3VyaXR5Q29udGV4dDtcbn1cbi8qKlxuICogUGxvbmUgZGVwbG95bWVudCB2YXJpYW50cy5cbiAqL1xuZXhwb3J0IGVudW0gUGxvbmVWYXJpYW50IHtcbiAgLyoqXG4gICAqIFZvbHRvIHZhcmlhbnQ6IFJlYWN0SlMgZnJvbnRlbmQgKFZvbHRvKSB3aXRoIFJFU1QgQVBJIGJhY2tlbmQuXG4gICAqIERlcGxveXMgYm90aCBmcm9udGVuZCBhbmQgYmFja2VuZCBzZXJ2aWNlcy5cbiAgICovXG4gIFZPTFRPID0gJ3ZvbHRvJyxcblxuICAvKipcbiAgICogQ2xhc3NpYyBVSSB2YXJpYW50OiBUcmFkaXRpb25hbCBQbG9uZSB3aXRoIHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICogRGVwbG95cyBvbmx5IHRoZSBiYWNrZW5kIHNlcnZpY2UuXG4gICAqL1xuICBDTEFTU0lDVUkgPSAnY2xhc3NpY3VpJyxcbn1cblxuLyoqXG4gKiBNYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUGxvbmUgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG9uZU9wdGlvbnMge1xuICAvKipcbiAgICogVmVyc2lvbiBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBkZXBsb3ltZW50LlxuICAgKiBUaGlzIGlzIHVzZWQgaW4gS3ViZXJuZXRlcyBsYWJlbHMgYW5kIGRvZXNuJ3QgYWZmZWN0IHRoZSBhY3R1YWwgaW1hZ2UgdmVyc2lvbnMuXG4gICAqIEBkZWZhdWx0ICd1bmRlZmluZWQnXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbG9uZSBzaXRlIElEIGluIHRoZSBaT0RCLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBpbnRlcm5hbCBBUEkgcGF0aCBmb3IgVm9sdG8gZnJvbnRlbmQuXG4gICAqIEBkZWZhdWx0ICdQbG9uZSdcbiAgICovXG4gIHJlYWRvbmx5IHNpdGVJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUGxvbmUgZGVwbG95bWVudCB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgUGxvbmVWYXJpYW50LlZPTFRPXG4gICAqL1xuICByZWFkb25seSB2YXJpYW50PzogUGxvbmVWYXJpYW50O1xuXG4gIC8qKlxuICAgKiBCYWNrZW5kIChQbG9uZSBBUEkpIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IHt9ICh1c2VzIGRlZmF1bHQgdmFsdWVzIGZyb20gUGxvbmVCYXNlT3B0aW9ucylcbiAgICovXG4gIHJlYWRvbmx5IGJhY2tlbmQ/OiBQbG9uZUJhc2VPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBGcm9udGVuZCAoVm9sdG8pIGNvbmZpZ3VyYXRpb24uXG4gICAqIE9ubHkgdXNlZCB3aGVuIHZhcmlhbnQgaXMgUGxvbmVWYXJpYW50LlZPTFRPLlxuICAgKiBAZGVmYXVsdCB7fSAodXNlcyBkZWZhdWx0IHZhbHVlcyBmcm9tIFBsb25lQmFzZU9wdGlvbnMpXG4gICAqL1xuICByZWFkb25seSBmcm9udGVuZD86IFBsb25lQmFzZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIE5hbWVzIG9mIEt1YmVybmV0ZXMgc2VjcmV0cyB0byB1c2UgZm9yIHB1bGxpbmcgcHJpdmF0ZSBjb250YWluZXIgaW1hZ2VzLlxuICAgKiBUaGVzZSBzZWNyZXRzIG11c3QgZXhpc3QgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHRoZSBkZXBsb3ltZW50LlxuICAgKiBAZXhhbXBsZSBbJ215LXJlZ2lzdHJ5LXNlY3JldCddXG4gICAqIEBkZWZhdWx0IFtdIChubyBpbWFnZSBwdWxsIHNlY3JldHMpXG4gICAqL1xuICByZWFkb25seSBpbWFnZVB1bGxTZWNyZXRzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUGxvbmUgY29uc3RydWN0IGZvciBkZXBsb3lpbmcgUGxvbmUgQ01TIHRvIEt1YmVybmV0ZXMuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3QgY3JlYXRlcyBhbGwgbmVjZXNzYXJ5IEt1YmVybmV0ZXMgcmVzb3VyY2VzIGZvciBydW5uaW5nIFBsb25lOlxuICogLSBEZXBsb3ltZW50KHMpIGZvciBiYWNrZW5kIChhbmQgb3B0aW9uYWxseSBmcm9udGVuZClcbiAqIC0gU2VydmljZShzKSBmb3IgbmV0d29yayBhY2Nlc3NcbiAqIC0gT3B0aW9uYWwgUG9kRGlzcnVwdGlvbkJ1ZGdldCBmb3IgaGlnaCBhdmFpbGFiaWxpdHlcbiAqXG4gKiBTdXBwb3J0cyB0d28gZGVwbG95bWVudCB2YXJpYW50czpcbiAqIC0gVk9MVE86IE1vZGVybiBSZWFjdCBmcm9udGVuZCB3aXRoIFJFU1QgQVBJIGJhY2tlbmQgKGRlZmF1bHQpXG4gKiAtIENMQVNTSUNVSTogVHJhZGl0aW9uYWwgc2VydmVyLXNpZGUgcmVuZGVyZWQgUGxvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogbmV3IFBsb25lKGNoYXJ0LCAnbXktcGxvbmUnLCB7XG4gKiAgIHZhcmlhbnQ6IFBsb25lVmFyaWFudC5WT0xUTyxcbiAqICAgYmFja2VuZDoge1xuICogICAgIGltYWdlOiAncGxvbmUvcGxvbmUtYmFja2VuZDo2LjAuMTAnLFxuICogICAgIHJlcGxpY2FzOiAzLFxuICogICB9LFxuICogICBmcm9udGVuZDoge1xuICogICAgIGltYWdlOiAncGxvbmUvcGxvbmUtZnJvbnRlbmQ6MTYuMC4wJyxcbiAqICAgfSxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgUGxvbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgYmFja2VuZCBLdWJlcm5ldGVzIHNlcnZpY2UuXG4gICAqIFVzZSB0aGlzIHRvIHJlZmVyZW5jZSB0aGUgYmFja2VuZCBzZXJ2aWNlIGZyb20gb3RoZXIgY29uc3RydWN0cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBiYWNrZW5kU2VydmljZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgZnJvbnRlbmQgS3ViZXJuZXRlcyBzZXJ2aWNlLlxuICAgKiBPbmx5IHNldCB3aGVuIHZhcmlhbnQgaXMgVk9MVE8sIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZnJvbnRlbmRTZXJ2aWNlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVwbG95bWVudCB2YXJpYW50IGJlaW5nIHVzZWQgKFZPTFRPIG9yIENMQVNTSUNVSSkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFyaWFudDogUGxvbmVWYXJpYW50O1xuXG4gIC8qKlxuICAgKiBUaGUgUGxvbmUgc2l0ZSBJRCBpbiBaT0RCLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNpdGVJZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IFBsb25lT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmZyb250ZW5kU2VydmljZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zaXRlSWQgPSBvcHRpb25zLnNpdGVJZCA/PyAnUGxvbmUnO1xuICAgIHRoaXMudmFyaWFudCA9IG9wdGlvbnMudmFyaWFudCA/PyBQbG9uZVZhcmlhbnQuVk9MVE87XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBCYWNrZW5kXG4gICAgY29uc3QgYmFja2VuZCA9IG9wdGlvbnMuYmFja2VuZCA/PyB7fTtcbiAgICBjb25zdCBiYWNrZW5kTGFiZWxzID0ge1xuICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAncGxvbmUtYmFja2VuZCcsXG4gICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ2JhY2tlbmQnLFxuICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL3ZlcnNpb24nOiBvcHRpb25zLnZlcnNpb24gPz8gJ3VuZGVmaW5lZCcsXG4gICAgfTtcbiAgICBjb25zdCBiYWNrZW5kUG9ydCA9IDgwODA7XG5cbiAgICAvLyBPcHRpb25zXG4gICAgdmFyIGJhY2tlbmRPcHRpb25zOiBQbG9uZURlcGxveW1lbnRPcHRpb25zID0ge1xuICAgICAgbGFiZWxzOiBiYWNrZW5kTGFiZWxzLFxuICAgICAgaW1hZ2U6IHtcbiAgICAgICAgaW1hZ2U6IGJhY2tlbmQuaW1hZ2UgPz8gJ3Bsb25lL3Bsb25lLWJhY2tlbmQ6bGF0ZXN0JyxcbiAgICAgICAgaW1hZ2VQdWxsU2VjcmV0czogb3B0aW9ucy5pbWFnZVB1bGxTZWNyZXRzID8/IFtdLFxuICAgICAgICBpbWFnZVB1bGxQb2xpY3k6IGJhY2tlbmQuaW1hZ2VQdWxsUG9saWN5ID8/ICdJZk5vdFByZXNlbnQnLFxuICAgICAgfSxcbiAgICAgIHJlcGxpY2FzOiBiYWNrZW5kLnJlcGxpY2FzLFxuICAgICAgbGltaXRDcHU6IGJhY2tlbmQubGltaXRDcHUgPz8gJzUwMG0nLFxuICAgICAgbGltaXRNZW1vcnk6IGJhY2tlbmQubGltaXRNZW1vcnkgPz8gJzUxMk1pJyxcbiAgICAgIHJlcXVlc3RDcHU6IGJhY2tlbmQucmVxdWVzdENwdSA/PyAnMjAwbScsXG4gICAgICByZXF1ZXN0TWVtb3J5OiBiYWNrZW5kLnJlcXVlc3RNZW1vcnkgPz8gJzI1Nk1pJyxcbiAgICAgIHBkYjoge1xuICAgICAgICBtYXhVbmF2YWlsYWJsZTogYmFja2VuZC5tYXhVbmF2YWlsYWJsZSA/PyB1bmRlZmluZWQsXG4gICAgICAgIG1pbkF2YWlsYWJsZTogYmFja2VuZC5taW5BdmFpbGFibGUgPz8gdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHBvcnQ6IGJhY2tlbmRQb3J0LFxuICAgICAgZW52aXJvbm1lbnQ6IGJhY2tlbmQuZW52aXJvbm1lbnQsXG4gICAgICBhbm5vdGF0aW9uczogYmFja2VuZC5hbm5vdGF0aW9ucyxcbiAgICAgIHBvZEFubm90YXRpb25zOiBiYWNrZW5kLnBvZEFubm90YXRpb25zLFxuICAgICAgbm9kZVNlbGVjdG9yOiBiYWNrZW5kLm5vZGVTZWxlY3RvcixcbiAgICAgIHNlY3VyaXR5Q29udGV4dDogYmFja2VuZC5zZWN1cml0eUNvbnRleHQgYXMgazhzLlNlY3VyaXR5Q29udGV4dCxcbiAgICB9O1xuXG4gICAgLy8gUHJvYmluZ1xuICAgIGNvbnN0IGJhY2tlbmRBY3Rpb25IdHRwR2V0OiBrOHMuSHR0cEdldEFjdGlvbiA9IHtcbiAgICAgIHBhdGg6ICcvJyxcbiAgICAgIHBvcnQ6IEludE9yU3RyaW5nLmZyb21OdW1iZXIoYmFja2VuZFBvcnQpLFxuICAgIH07XG4gICAgaWYgKGJhY2tlbmQubGl2ZW5lc3NFbmFibGVkID8/IGZhbHNlKSB7XG4gICAgICBiYWNrZW5kT3B0aW9ucy5saXZlbmVzc1Byb2JlID0ge1xuICAgICAgICBodHRwR2V0OiBiYWNrZW5kQWN0aW9uSHR0cEdldCxcbiAgICAgICAgaW5pdGlhbERlbGF5U2Vjb25kczogYmFja2VuZC5saXZlbmVzc0luaXRpYWxEZWxheVNlY29uZHMgPz8gMzAsXG4gICAgICAgIHRpbWVvdXRTZWNvbmRzOiBiYWNrZW5kLmxpdmVuZXNzVGltZW91dFNlY29uZHMgPz8gNSxcbiAgICAgICAgcGVyaW9kU2Vjb25kczogYmFja2VuZC5saXZlbmVzc1BlcmlvZFNlY29uZHMgPz8gMTAsXG4gICAgICAgIHN1Y2Nlc3NUaHJlc2hvbGQ6IGJhY2tlbmQubGl2ZW5lc3NTdWNjZXNzVGhyZXNob2xkID8/IDEsXG4gICAgICAgIGZhaWx1cmVUaHJlc2hvbGQ6IGJhY2tlbmQubGl2ZW5lc3NGYWlsdXJlVGhyZXNob2xkID8/IDMsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoYmFja2VuZC5yZWFkaW5lc3NFbmFibGVkID8/IHRydWUpIHtcbiAgICAgIGJhY2tlbmRPcHRpb25zLnJlYWRpbmVzc1Byb2JlID0ge1xuICAgICAgICBodHRwR2V0OiBiYWNrZW5kQWN0aW9uSHR0cEdldCxcbiAgICAgICAgaW5pdGlhbERlbGF5U2Vjb25kczogYmFja2VuZC5yZWFkaW5lc3NJbml0aWFsRGVsYXlTZWNvbmRzID8/IDEwLFxuICAgICAgICB0aW1lb3V0U2Vjb25kczogYmFja2VuZC5yZWFkaW5lc3NUaW1lb3V0U2Vjb25kcyA/PyAxNSxcbiAgICAgICAgcGVyaW9kU2Vjb25kczogYmFja2VuZC5yZWFkaW5lc3NQZXJpb2RTZWNvbmRzID8/IDEwLFxuICAgICAgICBzdWNjZXNzVGhyZXNob2xkOiBiYWNrZW5kLnJlYWRpbmVzc1N1Y2Nlc3NUaHJlc2hvbGQgPz8gMSxcbiAgICAgICAgZmFpbHVyZVRocmVzaG9sZDogYmFja2VuZC5yZWFkaW5lc3NGYWlsdXJlVGhyZXNob2xkID8/IDMsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBEZXBsb3ltZW50XG4gICAgdmFyIGJhY2tlbmREZXBsb3ltZW50ID0gbmV3IFBsb25lRGVwbG95bWVudCh0aGlzLCAnYmFja2VuZCcsIGJhY2tlbmRPcHRpb25zKTtcblxuICAgIC8vIFNlcnZpY2VcbiAgICBjb25zdCBiYWNrZW5kU2VydmljZSA9IG5ldyBQbG9uZVNlcnZpY2UoYmFja2VuZERlcGxveW1lbnQsICdzZXJ2aWNlJywge1xuICAgICAgbGFiZWxzOiB7XG4gICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogJ3Bsb25lLWJhY2tlbmQtc2VydmljZScsXG4gICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnc2VydmljZScsXG4gICAgICB9LFxuICAgICAgdGFyZ2V0UG9ydDogYmFja2VuZFBvcnQsXG4gICAgICBzZWxlY3RvckxhYmVsOiB7IGFwcDogTmFtZXMudG9MYWJlbFZhbHVlKGJhY2tlbmREZXBsb3ltZW50KSB9LFxuICAgICAgcG9ydE5hbWU6ICdiYWNrZW5kLWh0dHAnLFxuICAgICAgYW5ub3RhdGlvbnM6IGJhY2tlbmQuc2VydmljZUFubm90YXRpb25zLFxuICAgIH0pO1xuICAgIHRoaXMuYmFja2VuZFNlcnZpY2VOYW1lID0gYmFja2VuZFNlcnZpY2UubmFtZTtcblxuICAgIC8vIFNlcnZpY2VNb25pdG9yIGZvciBiYWNrZW5kXG4gICAgaWYgKGJhY2tlbmQuc2VydmljZW1vbml0b3IpIHtcbiAgICAgIHRoaXMuY3JlYXRlU2VydmljZU1vbml0b3IoYmFja2VuZFNlcnZpY2UsICdiYWNrZW5kJywge1xuICAgICAgICBwb3J0OiBiYWNrZW5kLm1ldHJpY3NQb3J0ID8/ICdiYWNrZW5kLWh0dHAnLFxuICAgICAgICBwYXRoOiBiYWNrZW5kLm1ldHJpY3NQYXRoID8/ICcvbWV0cmljcycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBGcm9udGVuZFxuICAgIGlmICh0aGlzLnZhcmlhbnQgPT0gUGxvbmVWYXJpYW50LlZPTFRPKSB7XG4gICAgICBjb25zdCBmcm9udGVuZCA9IG9wdGlvbnMuZnJvbnRlbmQgPz8ge307XG4gICAgICBjb25zdCBmcm9udGVuZFBvcnQgPSAzMDAwO1xuICAgICAgY29uc3QgZnJvbnRlbmRMYWJlbHMgPSB7XG4gICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogJ3Bsb25lLWZyb250ZW5kJyxcbiAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCc6ICdmcm9udGVuZCcsXG4gICAgICAgICdhcHAua3ViZXJuZXRlcy5pby92ZXJzaW9uJzogb3B0aW9ucy52ZXJzaW9uID8/ICd1bmRlZmluZWQnLFxuICAgICAgfTtcblxuICAgICAgLy8gRW52aXJvbm1lbnQgZm9yIFJBWlpMRVxuICAgICAgdmFyIGZyb250ZW5kRW52aXJvbm1lbnQgPSBmcm9udGVuZC5lbnZpcm9ubWVudCA/PyBuZXcga3BsdXMuRW52KFtdLCB7fSk7XG4gICAgICBpZiAoZnJvbnRlbmRFbnZpcm9ubWVudC52YXJpYWJsZXMuUkFaWkxFX0lOVEVSTkFMX0FQSV9QQVRIID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gY29ubmVjdCB3aXRoIGJhY2tlbmQgc2VydmljZVxuICAgICAgICBmcm9udGVuZEVudmlyb25tZW50Py5hZGRWYXJpYWJsZSgnUkFaWkxFX0lOVEVSTkFMX0FQSV9QQVRIJywga3BsdXMuRW52VmFsdWUuZnJvbVZhbHVlKGBodHRwOi8vJHtiYWNrZW5kU2VydmljZS5uYW1lfToke2JhY2tlbmRQb3J0fS8ke3RoaXMuc2l0ZUlkfWApKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3B0aW9uc1xuICAgICAgdmFyIGZyb250ZW5kT3B0aW9uczogUGxvbmVEZXBsb3ltZW50T3B0aW9ucyA9IHtcbiAgICAgICAgbGFiZWxzOiBmcm9udGVuZExhYmVscyxcbiAgICAgICAgaW1hZ2U6IHtcbiAgICAgICAgICBpbWFnZTogZnJvbnRlbmQuaW1hZ2UgPz8gJ3Bsb25lL3Bsb25lLWZyb250ZW5kOmxhdGVzdCcsXG4gICAgICAgICAgaW1hZ2VQdWxsU2VjcmV0czogb3B0aW9ucy5pbWFnZVB1bGxTZWNyZXRzID8/IFtdLFxuICAgICAgICAgIGltYWdlUHVsbFBvbGljeTogZnJvbnRlbmQuaW1hZ2VQdWxsUG9saWN5ID8/ICdJZk5vdFByZXNlbnQnLFxuICAgICAgICB9LFxuICAgICAgICByZXBsaWNhczogZnJvbnRlbmQucmVwbGljYXMsXG4gICAgICAgIGxpbWl0Q3B1OiBmcm9udGVuZC5saW1pdENwdSA/PyAnNTAwbScsXG4gICAgICAgIGxpbWl0TWVtb3J5OiBmcm9udGVuZC5saW1pdE1lbW9yeSA/PyAnMUdpJyxcbiAgICAgICAgcmVxdWVzdENwdTogZnJvbnRlbmQucmVxdWVzdENwdSA/PyAnMjAwbScsXG4gICAgICAgIHJlcXVlc3RNZW1vcnk6IGZyb250ZW5kLnJlcXVlc3RNZW1vcnkgPz8gJzI1Nk1pJyxcblxuICAgICAgICBwZGI6IHtcbiAgICAgICAgICBtYXhVbmF2YWlsYWJsZTogZnJvbnRlbmQubWF4VW5hdmFpbGFibGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG1pbkF2YWlsYWJsZTogZnJvbnRlbmQubWluQXZhaWxhYmxlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcG9ydDogZnJvbnRlbmRQb3J0LFxuICAgICAgICBlbnZpcm9ubWVudDogZnJvbnRlbmRFbnZpcm9ubWVudCxcbiAgICAgICAgYW5ub3RhdGlvbnM6IGZyb250ZW5kLmFubm90YXRpb25zLFxuICAgICAgICBwb2RBbm5vdGF0aW9uczogZnJvbnRlbmQucG9kQW5ub3RhdGlvbnMsXG4gICAgICAgIG5vZGVTZWxlY3RvcjogZnJvbnRlbmQubm9kZVNlbGVjdG9yLFxuICAgICAgICBzZWN1cml0eUNvbnRleHQ6IGZyb250ZW5kLnNlY3VyaXR5Q29udGV4dCBhcyBrOHMuU2VjdXJpdHlDb250ZXh0LFxuICAgICAgfTtcblxuICAgICAgLy8gUHJvYmluZ1xuICAgICAgY29uc3QgZnJvbnRlbmRBY3Rpb25IdHRwR2V0OiBrOHMuSHR0cEdldEFjdGlvbiA9IHtcbiAgICAgICAgcGF0aDogJy8nLFxuICAgICAgICBwb3J0OiBJbnRPclN0cmluZy5mcm9tTnVtYmVyKGZyb250ZW5kUG9ydCksXG4gICAgICB9O1xuICAgICAgaWYgKGZyb250ZW5kLmxpdmVuZXNzRW5hYmxlZCA/PyBmYWxzZSkge1xuICAgICAgICBmcm9udGVuZE9wdGlvbnMubGl2ZW5lc3NQcm9iZSA9IHtcbiAgICAgICAgICBodHRwR2V0OiBmcm9udGVuZEFjdGlvbkh0dHBHZXQsXG4gICAgICAgICAgaW5pdGlhbERlbGF5U2Vjb25kczogZnJvbnRlbmQubGl2ZW5lc3NJbml0aWFsRGVsYXlTZWNvbmRzID8/IDMwLFxuICAgICAgICAgIHRpbWVvdXRTZWNvbmRzOiBmcm9udGVuZC5saXZlbmVzc1RpbWVvdXRTZWNvbmRzID8/IDUsXG4gICAgICAgICAgcGVyaW9kU2Vjb25kczogZnJvbnRlbmQubGl2ZW5lc3NQZXJpb2RTZWNvbmRzID8/IDEwLFxuICAgICAgICAgIHN1Y2Nlc3NUaHJlc2hvbGQ6IGZyb250ZW5kLmxpdmVuZXNzU3VjY2Vzc1RocmVzaG9sZCA/PyAxLFxuICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQ6IGZyb250ZW5kLmxpdmVuZXNzRmFpbHVyZVRocmVzaG9sZCA/PyAzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGZyb250ZW5kLnJlYWRpbmVzc0VuYWJsZWQgPz8gdHJ1ZSkge1xuICAgICAgICBmcm9udGVuZE9wdGlvbnMucmVhZGluZXNzUHJvYmUgPSB7XG4gICAgICAgICAgaHR0cEdldDogZnJvbnRlbmRBY3Rpb25IdHRwR2V0LFxuICAgICAgICAgIGluaXRpYWxEZWxheVNlY29uZHM6IGZyb250ZW5kLnJlYWRpbmVzc0luaXRpYWxEZWxheVNlY29uZHMgPz8gMTAsXG4gICAgICAgICAgdGltZW91dFNlY29uZHM6IGZyb250ZW5kLnJlYWRpbmVzc1RpbWVvdXRTZWNvbmRzID8/IDE1LFxuICAgICAgICAgIHBlcmlvZFNlY29uZHM6IGZyb250ZW5kLnJlYWRpbmVzc1BlcmlvZFNlY29uZHMgPz8gMTAsXG4gICAgICAgICAgc3VjY2Vzc1RocmVzaG9sZDogZnJvbnRlbmQucmVhZGluZXNzU3VjY2Vzc1RocmVzaG9sZCA/PyAxLFxuICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQ6IGZyb250ZW5kLnJlYWRpbmVzc0ZhaWx1cmVUaHJlc2hvbGQgPz8gMyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gRGVwbG95bWVudFxuICAgICAgY29uc3QgZnJvbnRlbmREZXBsb3ltZW50ID0gbmV3IFBsb25lRGVwbG95bWVudCh0aGlzLCAnZnJvbnRlbmQnLCBmcm9udGVuZE9wdGlvbnMpO1xuXG4gICAgICAvLyBTZXJ2aWNlXG4gICAgICBjb25zdCBmcm9udGVuZFNlcnZpY2UgPSBuZXcgUGxvbmVTZXJ2aWNlKGZyb250ZW5kRGVwbG95bWVudCwgJ3NlcnZpY2UnLCB7XG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogJ3Bsb25lLWZyb250ZW5kLXNlcnZpY2UnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnc2VydmljZScsXG4gICAgICAgIH0sXG4gICAgICAgIHRhcmdldFBvcnQ6IGZyb250ZW5kUG9ydCxcbiAgICAgICAgc2VsZWN0b3JMYWJlbDogeyBhcHA6IE5hbWVzLnRvTGFiZWxWYWx1ZShmcm9udGVuZERlcGxveW1lbnQpIH0sXG4gICAgICAgIHBvcnROYW1lOiAnZnJvbnRlbmQtaHR0cCcsXG4gICAgICAgIGFubm90YXRpb25zOiBmcm9udGVuZC5zZXJ2aWNlQW5ub3RhdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZnJvbnRlbmRTZXJ2aWNlTmFtZSA9IGZyb250ZW5kU2VydmljZS5uYW1lO1xuXG4gICAgICAvLyBTZXJ2aWNlTW9uaXRvciBmb3IgZnJvbnRlbmRcbiAgICAgIGlmIChmcm9udGVuZC5zZXJ2aWNlbW9uaXRvcikge1xuICAgICAgICB0aGlzLmNyZWF0ZVNlcnZpY2VNb25pdG9yKGZyb250ZW5kU2VydmljZSwgJ2Zyb250ZW5kJywge1xuICAgICAgICAgIHBvcnQ6IGZyb250ZW5kLm1ldHJpY3NQb3J0ID8/ICdmcm9udGVuZC1odHRwJyxcbiAgICAgICAgICBwYXRoOiBmcm9udGVuZC5tZXRyaWNzUGF0aCA/PyAnL21ldHJpY3MnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFByb21ldGhldXMgU2VydmljZU1vbml0b3IgcmVzb3VyY2UgZm9yIHRoZSBnaXZlbiBzZXJ2aWNlLlxuICAgKiBAcGFyYW0gc2VydmljZSBUaGUgUGxvbmVTZXJ2aWNlIHRvIG1vbml0b3JcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgU2VydmljZU1vbml0b3JcbiAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIGZvciB0aGUgU2VydmljZU1vbml0b3JcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlU2VydmljZU1vbml0b3IoXG4gICAgc2VydmljZTogUGxvbmVTZXJ2aWNlLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29uZmlnOiB7IHBvcnQ6IHN0cmluZyB8IG51bWJlcjsgcGF0aDogc3RyaW5nIH0sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBvcnROYW1lID0gdHlwZW9mIGNvbmZpZy5wb3J0ID09PSAnc3RyaW5nJyA/IGNvbmZpZy5wb3J0IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBvcnROdW1iZXIgPSB0eXBlb2YgY29uZmlnLnBvcnQgPT09ICdudW1iZXInXG4gICAgICA/IFNlcnZpY2VNb25pdG9yU3BlY0VuZHBvaW50c1RhcmdldFBvcnQuZnJvbU51bWJlcihjb25maWcucG9ydClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgbmV3IFNlcnZpY2VNb25pdG9yKHRoaXMsIGBzZXJ2aWNlbW9uaXRvci0ke2lkfWAsIHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG5hbWU6IGAke3NlcnZpY2UubmFtZX0tbW9uaXRvcmAsXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogc2VydmljZS5uYW1lLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnc2VydmljZW1vbml0b3InLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICBtYXRjaExhYmVsczoge1xuICAgICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiBzZXJ2aWNlLmxhYmVsc1snYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVuZHBvaW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLihwb3J0TmFtZSAmJiB7IHBvcnQ6IHBvcnROYW1lIH0pLFxuICAgICAgICAgICAgLi4uKHBvcnROdW1iZXIgJiYgeyB0YXJnZXRQb3J0OiBwb3J0TnVtYmVyIH0pLFxuICAgICAgICAgICAgcGF0aDogY29uZmlnLnBhdGgsXG4gICAgICAgICAgICBpbnRlcnZhbDogJzMwcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn0iXX0=
279
+ Plone[_a] = { fqn: "@bluedynamics/cdk8s-plone.Plone", version: "0.1.42" };
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGxvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBOEI7QUFDOUIsdUNBQXVDO0FBQ3ZDLDJDQUF1QztBQUN2Qyw2Q0FBdUU7QUFDdkUsdUNBQTRDO0FBRTVDLDJFQUF3RztBQUN4Ryx1Q0FBMkQ7QUFrUzNEOztHQUVHO0FBQ0gsSUFBWSxZQXFCWDtBQXJCRCxXQUFZLFlBQVk7SUFDdEI7OztPQUdHO0lBQ0gsK0JBQWUsQ0FBQTtJQUVmOzs7T0FHRztJQUNILGlDQUFpQixDQUFBO0lBRWpCOzs7Ozs7T0FNRztJQUNILHVDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFyQlcsWUFBWSw0QkFBWixZQUFZLFFBcUJ2QjtBQWdERDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFhLEtBQU0sU0FBUSxzQkFBUztJQXVCbEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxVQUF3QixFQUFFO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDO1FBRXJELDJFQUEyRTtRQUMzRSxVQUFVO1FBQ1YsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDdEMsTUFBTSxhQUFhLEdBQUc7WUFDcEIsd0JBQXdCLEVBQUUsZUFBZTtZQUN6Qyw2QkFBNkIsRUFBRSxTQUFTO1lBQ3hDLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksV0FBVztTQUM1RCxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFD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Q0FBQztRQUVkLElBQUksc0NBQWMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFO1lBQy9DLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxVQUFVO2dCQUMvQixNQUFNLEVBQUU7b0JBQ04sd0JBQXdCLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ3RDLDZCQUE2QixFQUFFLGdCQUFnQjtpQkFDaEQ7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUU7b0JBQ1IsV0FBVyxFQUFFO3dCQUNYLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUM7cUJBQ25FO2lCQUNGO2dCQUNELFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO3dCQUNuQyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO3dCQUM3QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7d0JBQ2pCLFFBQVEsRUFBRSxLQUFLO3FCQUNoQjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUEvUEgsc0JBZ1FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmFtZXMgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgKiBhcyBrcGx1cyBmcm9tICdjZGs4cy1wbHVzLTMwJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGxvbmVEZXBsb3ltZW50LCBQbG9uZURlcGxveW1lbnRPcHRpb25zIH0gZnJvbSAnLi9kZXBsb3ltZW50JztcbmltcG9ydCB7IEludE9yU3RyaW5nIH0gZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgKiBhcyBrOHMgZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgeyBTZXJ2aWNlTW9uaXRvciwgU2VydmljZU1vbml0b3JTcGVjRW5kcG9pbnRzVGFyZ2V0UG9ydCB9IGZyb20gJy4vaW1wb3J0cy9tb25pdG9yaW5nLmNvcmVvcy5jb20nO1xuaW1wb3J0IHsgUGxvbmVTZXJ2aWNlLCBQbG9uZVNlcnZpY2VTcGVjIH0gZnJvbSAnLi9zZXJ2aWNlJztcblxuLyoqXG4gKiBMaW51eCBjYXBhYmlsaXRpZXMgdG8gYWRkIG9yIGRyb3Agb24gYSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvbmVDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHRvIGFkZCAoZS5nLiAnU1lTX1BUUkFDRScsICdORVRfQURNSU4nKS5cbiAgICogQGRlZmF1bHQgLSBubyBjYXBhYmlsaXRpZXMgYWRkZWRcbiAgICovXG4gIHJlYWRvbmx5IGFkZD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgdG8gZHJvcCAoZS5nLiAnQUxMJywgJ05FVF9SQVcnKS5cbiAgICogQGRlZmF1bHQgLSBubyBjYXBhYmlsaXRpZXMgZHJvcHBlZFxuICAgKi9cbiAgcmVhZG9ubHkgZHJvcD86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNlY3VyaXR5IGNvbnRleHQgZm9yIGEgUGxvbmUgY29udGFpbmVyLlxuICogQ29udHJvbHMgcHJpdmlsZWdlIGFuZCBhY2Nlc3Mgc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvbmVTZWN1cml0eUNvbnRleHQge1xuICAvKipcbiAgICogTGludXggY2FwYWJpbGl0aWVzIHRvIGFkZCBvciBkcm9wLlxuICAgKiBAZXhhbXBsZSB7IGFkZDogWydTWVNfUFRSQUNFJ10gfVxuICAgKiBAZGVmYXVsdCAtIG5vIGNhcGFiaWxpdHkgY2hhbmdlc1xuICAgKi9cbiAgcmVhZG9ubHkgY2FwYWJpbGl0aWVzPzogUGxvbmVDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgY29udGFpbmVyIGFzIGEgc3BlY2lmaWMgdXNlciBJRC5cbiAgICogQGRlZmF1bHQgLSBjb250YWluZXIgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuQXNVc2VyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGNvbnRhaW5lciBhcyBhIHNwZWNpZmljIGdyb3VwIElELlxuICAgKiBAZGVmYXVsdCAtIGNvbnRhaW5lciBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBydW5Bc0dyb3VwPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlIHRoZSBjb250YWluZXIgdG8gcnVuIGFzIG5vbi1yb290LlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuQXNOb25Sb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTW91bnQgdGhlIHJvb3QgZmlsZXN5c3RlbSBhcyByZWFkLW9ubHkuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSByZWFkT25seVJvb3RGaWxlc3lzdGVtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgcHJpdmlsZWdlIGVzY2FsYXRpb24gZm9yIHRoZSBjb250YWluZXIgcHJvY2Vzcy5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgY29udGFpbmVyIGluIHByaXZpbGVnZWQgbW9kZS5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHByaXZpbGVnZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJhc2Ugb3B0aW9ucyBmb3IgUGxvbmUgYmFja2VuZCBvciBmcm9udGVuZCBjb25maWd1cmF0aW9uLlxuICogVGhlc2Ugb3B0aW9ucyBjb250cm9sIGNvbnRhaW5lciBpbWFnZSwgcmVwbGljYSBjb3VudCwgcmVzb3VyY2UgbGltaXRzLFxuICogZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQgaGVhbHRoIHByb2Jlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG9uZUJhc2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZSB0byB1c2UgZm9yIHRoZSBkZXBsb3ltZW50LlxuICAgKiBAZXhhbXBsZSAncGxvbmUvcGxvbmUtYmFja2VuZDo2LjAuMTAnIG9yICdwbG9uZS9wbG9uZS1mcm9udGVuZDoxNi4wLjAnXG4gICAqIEBkZWZhdWx0IC0gJ3Bsb25lL3Bsb25lLWJhY2tlbmQ6bGF0ZXN0JyBmb3IgYmFja2VuZCwgJ3Bsb25lL3Bsb25lLWZyb250ZW5kOmxhdGVzdCcgZm9yIGZyb250ZW5kXG4gICAqL1xuICByZWFkb25seSBpbWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW1hZ2UgcHVsbCBwb2xpY3kgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0ICdJZk5vdFByZXNlbnQnXG4gICAqL1xuICByZWFkb25seSBpbWFnZVB1bGxQb2xpY3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBwb2QgcmVwbGljYXMgdG8gcnVuLlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgcG9kcyB0aGF0IGNhbiBiZSB1bmF2YWlsYWJsZSBkdXJpbmcgdXBkYXRlcy5cbiAgICogQ2FuIGJlIGFuIGFic29sdXRlIG51bWJlciAoZS5nLiwgMSkgb3IgYSBwZXJjZW50YWdlIChlLmcuLCAnNTAlJykuXG4gICAqIFVzZWQgaW4gUG9kRGlzcnVwdGlvbkJ1ZGdldCBpZiBzcGVjaWZpZWQuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIChub3Qgc2V0KVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4VW5hdmFpbGFibGU/OiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHBvZHMgdGhhdCBtdXN0IGJlIGF2YWlsYWJsZSBkdXJpbmcgdXBkYXRlcy5cbiAgICogQ2FuIGJlIGFuIGFic29sdXRlIG51bWJlciAoZS5nLiwgMSkgb3IgYSBwZXJjZW50YWdlIChlLmcuLCAnNTAlJykuXG4gICAqIFVzZWQgaW4gUG9kRGlzcnVwdGlvbkJ1ZGdldCBpZiBzcGVjaWZpZWQuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIChub3Qgc2V0KVxuICAgKi9cbiAgcmVhZG9ubHkgbWluQXZhaWxhYmxlPzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgbGltaXQgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICc1MDBtJyBvciAnMScgb3IgJzIwMDBtJ1xuICAgKiBAZGVmYXVsdCAnNTAwbScgZm9yIGJvdGggYmFja2VuZCBhbmQgZnJvbnRlbmRcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0Q3B1Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZW1vcnkgbGltaXQgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICc1MTJNaScgb3IgJzFHaSdcbiAgICogQGRlZmF1bHQgJzUxMk1pJyBmb3IgYmFja2VuZCwgJzFHaScgZm9yIGZyb250ZW5kXG4gICAqL1xuICByZWFkb25seSBsaW1pdE1lbW9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQ1BVIHJlcXVlc3QgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIEBleGFtcGxlICcyMDBtJyBvciAnMC41J1xuICAgKiBAZGVmYXVsdCAnMjAwbSdcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RDcHU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lbW9yeSByZXF1ZXN0IGZvciB0aGUgY29udGFpbmVyLlxuICAgKiBAZXhhbXBsZSAnMjU2TWknIG9yICc1MTJNaSdcbiAgICogQGRlZmF1bHQgJzI1Nk1pJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdE1lbW9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgY29udGFpbmVyLlxuICAgKiBVc2UgY2RrOHMtcGx1cy0zMCBFbnYgY2xhc3MgdG8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgc291cmNlcy5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgKG5vIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBrcGx1cy5FbnY7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSByZWFkaW5lc3MgcHJvYmUgZm9yIHRoZSBjb250YWluZXIuXG4gICAqIFJlYWRpbmVzcyBwcm9iZXMgZGV0ZXJtaW5lIHdoZW4gYSBjb250YWluZXIgaXMgcmVhZHkgdG8gYWNjZXB0IHRyYWZmaWMuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciBjb250YWluZXIgc3RhcnQgYmVmb3JlIHJlYWRpbmVzcyBwcm9iZSBpcyBpbml0aWF0ZWQuXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICByZWFkb25seSByZWFkaW5lc3NJbml0aWFsRGVsYXlTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgcmVhZGluZXNzIHByb2JlIHRpbWVzIG91dC5cbiAgICogQGRlZmF1bHQgMTVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc1RpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgb2Z0ZW4gKGluIHNlY29uZHMpIHRvIHBlcmZvcm0gdGhlIHJlYWRpbmVzcyBwcm9iZS5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRpbmVzc1BlcmlvZFNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gY29uc2VjdXRpdmUgc3VjY2Vzc2VzIGZvciB0aGUgcmVhZGluZXNzIHByb2JlIHRvIGJlIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bC5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzU3VjY2Vzc1RocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBmYWlsdXJlcyBmb3IgdGhlIHJlYWRpbmVzcyBwcm9iZSB0byBiZSBjb25zaWRlcmVkIGZhaWxlZC5cbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgcmVhZG9ubHkgcmVhZGluZXNzRmFpbHVyZVRocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIGxpdmVuZXNzIHByb2JlIGZvciB0aGUgY29udGFpbmVyLlxuICAgKiBMaXZlbmVzcyBwcm9iZXMgZGV0ZXJtaW5lIHdoZW4gdG8gcmVzdGFydCBhIGNvbnRhaW5lci5cbiAgICogUmVjb21tZW5kZWQ6IHRydWUgZm9yIGZyb250ZW5kLCBmYWxzZSBmb3IgYmFja2VuZCAoWm9wZSBoYXMgaXRzIG93biByZWNvdmVyeSkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsaXZlbmVzc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyBhZnRlciBjb250YWluZXIgc3RhcnQgYmVmb3JlIGxpdmVuZXNzIHByb2JlIGlzIGluaXRpYXRlZC5cbiAgICogQGRlZmF1bHQgMzBcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzSW5pdGlhbERlbGF5U2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIGxpdmVuZXNzIHByb2JlIHRpbWVzIG91dC5cbiAgICogQGRlZmF1bHQgNVxuICAgKi9cbiAgcmVhZG9ubHkgbGl2ZW5lc3NUaW1lb3V0U2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogSG93IG9mdGVuIChpbiBzZWNvbmRzKSB0byBwZXJmb3JtIHRoZSBsaXZlbmVzcyBwcm9iZS5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzUGVyaW9kU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBzdWNjZXNzZXMgZm9yIHRoZSBsaXZlbmVzcyBwcm9iZSB0byBiZSBjb25zaWRlcmVkIHN1Y2Nlc3NmdWwuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IGxpdmVuZXNzU3VjY2Vzc1RocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSBjb25zZWN1dGl2ZSBmYWlsdXJlcyBmb3IgdGhlIGxpdmVuZXNzIHByb2JlIHRvIGJlIGNvbnNpZGVyZWQgZmFpbGVkLlxuICAgKiBAZGVmYXVsdCAzXG4gICAqL1xuICByZWFkb25seSBsaXZlbmVzc0ZhaWx1cmVUaHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFubm90YXRpb25zIHRvIGFkZCB0byB0aGUgRGVwbG95bWVudCBtZXRhZGF0YS5cbiAgICogQGV4YW1wbGUgeyAnZGVwbG95bWVudC5rdWJlcm5ldGVzLmlvL3JldmlzaW9uJzogJzEnIH1cbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGFubm90YXRpb25zXG4gICAqL1xuICByZWFkb25seSBhbm5vdGF0aW9ucz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBbm5vdGF0aW9ucyB0byBhZGQgdG8gdGhlIFBvZCB0ZW1wbGF0ZSBtZXRhZGF0YS5cbiAgICogQ29tbW9uIGZvciBQcm9tZXRoZXVzLCBJc3RpbywgYmFja3VwIHBvbGljaWVzLCBldGMuXG4gICAqIEBleGFtcGxlIHsgJ3Byb21ldGhldXMuaW8vc2NyYXBlJzogJ3RydWUnLCAncHJvbWV0aGV1cy5pby9wb3J0JzogJzgwODAnIH1cbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGFubm90YXRpb25zXG4gICAqL1xuICByZWFkb25seSBwb2RBbm5vdGF0aW9ucz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBbm5vdGF0aW9ucyB0byBhZGQgdG8gdGhlIFNlcnZpY2UgbWV0YWRhdGEuXG4gICAqIENvbW1vbiBmb3IgZXh0ZXJuYWwtZG5zLCBsb2FkIGJhbGFuY2Vycywgc2VydmljZSBtZXNoLCBldGMuXG4gICAqIEBleGFtcGxlIHsgJ2V4dGVybmFsLWRucy5hbHBoYS5rdWJlcm5ldGVzLmlvL2hvc3RuYW1lJzogJ3Bsb25lLmV4YW1wbGUuY29tJyB9XG4gICAqIEBkZXByZWNhdGVkIHVzZSBgc2VydmljZS5hbm5vdGF0aW9uc2AgaW5zdGVhZFxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgYW5ub3RhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VBbm5vdGF0aW9ucz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBTZXJ2aWNlIGNvbmZpZ3VyYXRpb246IHR5cGUsIHRyYWZmaWNEaXN0cmlidXRpb24sIHNlc3Npb25BZmZpbml0eSxcbiAgICogYW5ub3RhdGlvbnMvbGFiZWxzLCBhbmQgYSByYXcgYG92ZXJyaWRlc2AgZXNjYXBlIGhhdGNoIGZvciBhbnkgb3RoZXJcbiAgICogU2VydmljZVNwZWMgZmllbGQuIEFwcGxpZXMgdG8gdGhpcyBjb21wb25lbnQncyBTZXJ2aWNlLlxuICAgKiBAZXhhbXBsZSB7IHR5cGU6ICdMb2FkQmFsYW5jZXInLCB0cmFmZmljRGlzdHJpYnV0aW9uOiAnUHJlZmVyQ2xvc2UnIH1cbiAgICogQGRlZmF1bHQgLSBjb25zdHJ1Y3QtbWFuYWdlZCBkZWZhdWx0cyBvbmx5XG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlPzogUGxvbmVTZXJ2aWNlU3BlYztcblxuICAvKipcbiAgICogRW5hYmxlIFByb21ldGhldXMgU2VydmljZU1vbml0b3IgZm9yIG1ldHJpY3MgY29sbGVjdGlvbi5cbiAgICogUmVxdWlyZXMgUHJvbWV0aGV1cyBPcGVyYXRvciB0byBiZSBpbnN0YWxsZWQgaW4gdGhlIGNsdXN0ZXIuXG4gICAqIFdoZW4gZW5hYmxlZCwgYSBTZXJ2aWNlTW9uaXRvciByZXNvdXJjZSB3aWxsIGJlIGNyZWF0ZWQgdG8gc2NyYXBlIG1ldHJpY3MuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlbW9uaXRvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBvcnQgbmFtZSBvciBudW1iZXIgdG8gc2NyYXBlIG1ldHJpY3MgZnJvbS5cbiAgICogT25seSB1c2VkIHdoZW4gc2VydmljZW1vbml0b3IgaXMgZW5hYmxlZC5cbiAgICogQGRlZmF1bHQgLSB1c2VzIHRoZSBtYWluIHNlcnZpY2UgcG9ydFxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljc1BvcnQ/OiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gc2NyYXBlIG1ldHJpY3MgZnJvbS5cbiAgICogT25seSB1c2VkIHdoZW4gc2VydmljZW1vbml0b3IgaXMgZW5hYmxlZC5cbiAgICogQGRlZmF1bHQgJy9tZXRyaWNzJ1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljc1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5vZGUgc2VsZWN0b3IgbGFiZWxzIGZvciBwb2Qgc2NoZWR1bGluZy5cbiAgICogVXNlIHRvIGNvbnN0cmFpbiBwb2RzIHRvIG5vZGVzIHdpdGggbWF0Y2hpbmcgbGFiZWxzLCBlLmcuIGZvciByZWdpb24gYWZmaW5pdHkuXG4gICAqIEBleGFtcGxlIHsgJ3RvcG9sb2d5Lmt1YmVybmV0ZXMuaW8vcmVnaW9uJzogJ2ZzbjEnIH1cbiAgICogQGRlZmF1bHQgLSBubyBub2RlIHNlbGVjdG9yXG4gICAqL1xuICByZWFkb25seSBub2RlU2VsZWN0b3I/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBjb250ZXh0IGZvciB0aGUgY29udGFpbmVyLlxuICAgKiBVc2UgdG8gc2V0IGNhcGFiaWxpdGllcywgcnVuIGFzIG5vbi1yb290LCByZWFkLW9ubHkgZmlsZXN5c3RlbSwgZXRjLlxuICAgKiBAZXhhbXBsZSB7IGNhcGFiaWxpdGllczogeyBhZGQ6IFsnU1lTX1BUUkFDRSddIH0gfVxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY3VyaXR5IGNvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5Q29udGV4dD86IFBsb25lU2VjdXJpdHlDb250ZXh0O1xufVxuLyoqXG4gKiBQbG9uZSBkZXBsb3ltZW50IHZhcmlhbnRzLlxuICovXG5leHBvcnQgZW51bSBQbG9uZVZhcmlhbnQge1xuICAvKipcbiAgICogVm9sdG8gdmFyaWFudDogUmVhY3RKUyBzaW5nbGUtcGFnZSBmcm9udGVuZCAoVm9sdG8pIHRhbGtpbmcgdG8gdGhlIFBsb25lIFJFU1QgQVBJLlxuICAgKiBEZXBsb3lzIGJvdGggZnJvbnRlbmQgYW5kIGJhY2tlbmQgc2VydmljZXMuXG4gICAqL1xuICBWT0xUTyA9ICd2b2x0bycsXG5cbiAgLyoqXG4gICAqIEJsaWNjYSB2YXJpYW50OiB0aGUgUGxvbmUgYmFja2VuZCByZW5kZXJzIHRoZSBVSSBzZXJ2ZXItc2lkZSBhbmQgc2VydmVzIHRoZSBIVE1MIGRpcmVjdGx5LlxuICAgKiBEZXBsb3lzIG9ubHkgdGhlIGJhY2tlbmQgc2VydmljZS5cbiAgICovXG4gIEJMSUNDQSA9ICdibGljY2EnLFxuXG4gIC8qKlxuICAgKiBEZXByZWNhdGVkIGFsaWFzIGZvciB0aGUgQmxpY2NhIHZhcmlhbnQgKGZvcm1lcmx5IFwiQ2xhc3NpYyBVSVwiKS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUmVuYW1lZCB0byB7QGxpbmsgQkxJQ0NBfS4gS2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgc2VsZWN0cyB0aGVcbiAgICogc2FtZSBiYWNrZW5kLW9ubHkgZGVwbG95bWVudC4gRXhpc3RpbmcgY29uZmlndXJhdGlvbiB1c2luZyBgQ0xBU1NJQ1VJYCAob3IgdGhlIGxpdGVyYWxcbiAgICogdmFsdWUgYCdjbGFzc2ljdWknYCkga2VlcHMgd29ya2luZyB1bmNoYW5nZWQuIFdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLlxuICAgKi9cbiAgQ0xBU1NJQ1VJID0gJ2NsYXNzaWN1aScsXG59XG5cbi8qKlxuICogTWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFBsb25lIGRlcGxveW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvbmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgZGVwbG95bWVudC5cbiAgICogVGhpcyBpcyB1c2VkIGluIEt1YmVybmV0ZXMgbGFiZWxzIGFuZCBkb2Vzbid0IGFmZmVjdCB0aGUgYWN0dWFsIGltYWdlIHZlcnNpb25zLlxuICAgKiBAZGVmYXVsdCAndW5kZWZpbmVkJ1xuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUGxvbmUgc2l0ZSBJRCBpbiB0aGUgWk9EQi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgaW50ZXJuYWwgQVBJIHBhdGggZm9yIFZvbHRvIGZyb250ZW5kLlxuICAgKiBAZGVmYXVsdCAnUGxvbmUnXG4gICAqL1xuICByZWFkb25seSBzaXRlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBsb25lIGRlcGxveW1lbnQgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0IFBsb25lVmFyaWFudC5WT0xUT1xuICAgKi9cbiAgcmVhZG9ubHkgdmFyaWFudD86IFBsb25lVmFyaWFudDtcblxuICAvKipcbiAgICogQmFja2VuZCAoUGxvbmUgQVBJKSBjb25maWd1cmF0aW9uLlxuICAgKiBAZGVmYXVsdCB7fSAodXNlcyBkZWZhdWx0IHZhbHVlcyBmcm9tIFBsb25lQmFzZU9wdGlvbnMpXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kPzogUGxvbmVCYXNlT3B0aW9ucztcblxuICAvKipcbiAgICogRnJvbnRlbmQgKFZvbHRvKSBjb25maWd1cmF0aW9uLlxuICAgKiBPbmx5IHVzZWQgd2hlbiB2YXJpYW50IGlzIFBsb25lVmFyaWFudC5WT0xUTy5cbiAgICogQGRlZmF1bHQge30gKHVzZXMgZGVmYXVsdCB2YWx1ZXMgZnJvbSBQbG9uZUJhc2VPcHRpb25zKVxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRlbmQ/OiBQbG9uZUJhc2VPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBOYW1lcyBvZiBLdWJlcm5ldGVzIHNlY3JldHMgdG8gdXNlIGZvciBwdWxsaW5nIHByaXZhdGUgY29udGFpbmVyIGltYWdlcy5cbiAgICogVGhlc2Ugc2VjcmV0cyBtdXN0IGV4aXN0IGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgZGVwbG95bWVudC5cbiAgICogQGV4YW1wbGUgWydteS1yZWdpc3RyeS1zZWNyZXQnXVxuICAgKiBAZGVmYXVsdCBbXSAobm8gaW1hZ2UgcHVsbCBzZWNyZXRzKVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VQdWxsU2VjcmV0cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBsb25lIGNvbnN0cnVjdCBmb3IgZGVwbG95aW5nIFBsb25lIENNUyB0byBLdWJlcm5ldGVzLlxuICpcbiAqIFRoaXMgY29uc3RydWN0IGNyZWF0ZXMgYWxsIG5lY2Vzc2FyeSBLdWJlcm5ldGVzIHJlc291cmNlcyBmb3IgcnVubmluZyBQbG9uZTpcbiAqIC0gRGVwbG95bWVudChzKSBmb3IgYmFja2VuZCAoYW5kIG9wdGlvbmFsbHkgZnJvbnRlbmQpXG4gKiAtIFNlcnZpY2UocykgZm9yIG5ldHdvcmsgYWNjZXNzXG4gKiAtIE9wdGlvbmFsIFBvZERpc3J1cHRpb25CdWRnZXQgZm9yIGhpZ2ggYXZhaWxhYmlsaXR5XG4gKlxuICogU3VwcG9ydHMgdHdvIGRlcGxveW1lbnQgdmFyaWFudHM6XG4gKiAtIFZPTFRPOiBSZWFjdCBzaW5nbGUtcGFnZSBmcm9udGVuZCB0YWxraW5nIHRvIHRoZSBSRVNUIEFQSSBiYWNrZW5kIChkZWZhdWx0KVxuICogLSBCTElDQ0E6IHRoZSBQbG9uZSBiYWNrZW5kIHJlbmRlcnMgdGhlIFVJIHNlcnZlci1zaWRlIGFuZCBzZXJ2ZXMgSFRNTCBkaXJlY3RseVxuICpcbiAqIEBleGFtcGxlXG4gKiBuZXcgUGxvbmUoY2hhcnQsICdteS1wbG9uZScsIHtcbiAqICAgdmFyaWFudDogUGxvbmVWYXJpYW50LlZPTFRPLFxuICogICBiYWNrZW5kOiB7XG4gKiAgICAgaW1hZ2U6ICdwbG9uZS9wbG9uZS1iYWNrZW5kOjYuMC4xMCcsXG4gKiAgICAgcmVwbGljYXM6IDMsXG4gKiAgIH0sXG4gKiAgIGZyb250ZW5kOiB7XG4gKiAgICAgaW1hZ2U6ICdwbG9uZS9wbG9uZS1mcm9udGVuZDoxNi4wLjAnLFxuICogICB9LFxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBQbG9uZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBiYWNrZW5kIEt1YmVybmV0ZXMgc2VydmljZS5cbiAgICogVXNlIHRoaXMgdG8gcmVmZXJlbmNlIHRoZSBiYWNrZW5kIHNlcnZpY2UgZnJvbSBvdGhlciBjb25zdHJ1Y3RzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJhY2tlbmRTZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBmcm9udGVuZCBLdWJlcm5ldGVzIHNlcnZpY2UuXG4gICAqIE9ubHkgc2V0IHdoZW4gdmFyaWFudCBpcyBWT0xUTywgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmcm9udGVuZFNlcnZpY2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXBsb3ltZW50IHZhcmlhbnQgYmVpbmcgdXNlZCAoVk9MVE8gb3IgQkxJQ0NBKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2YXJpYW50OiBQbG9uZVZhcmlhbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBQbG9uZSBzaXRlIElEIGluIFpPREIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZUlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgb3B0aW9uczogUGxvbmVPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuZnJvbnRlbmRTZXJ2aWNlTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNpdGVJZCA9IG9wdGlvbnMuc2l0ZUlkID8/ICdQbG9uZSc7XG4gICAgdGhpcy52YXJpYW50ID0gb3B0aW9ucy52YXJpYW50ID8/IFBsb25lVmFyaWFudC5WT0xUTztcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEJhY2tlbmRcbiAgICBjb25zdCBiYWNrZW5kID0gb3B0aW9ucy5iYWNrZW5kID8/IHt9O1xuICAgIGNvbnN0IGJhY2tlbmRMYWJlbHMgPSB7XG4gICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICdwbG9uZS1iYWNrZW5kJyxcbiAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnYmFja2VuZCcsXG4gICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vdmVyc2lvbic6IG9wdGlvbnMudmVyc2lvbiA/PyAndW5kZWZpbmVkJyxcbiAgICB9O1xuICAgIGNvbnN0IGJhY2tlbmRQb3J0ID0gODA4MDtcblxuICAgIC8vIE9wdGlvbnNcbiAgICB2YXIgYmFja2VuZE9wdGlvbnM6IFBsb25lRGVwbG95bWVudE9wdGlvbnMgPSB7XG4gICAgICBsYWJlbHM6IGJhY2tlbmRMYWJlbHMsXG4gICAgICBpbWFnZToge1xuICAgICAgICBpbWFnZTogYmFja2VuZC5pbWFnZSA/PyAncGxvbmUvcGxvbmUtYmFja2VuZDpsYXRlc3QnLFxuICAgICAgICBpbWFnZVB1bGxTZWNyZXRzOiBvcHRpb25zLmltYWdlUHVsbFNlY3JldHMgPz8gW10sXG4gICAgICAgIGltYWdlUHVsbFBvbGljeTogYmFja2VuZC5pbWFnZVB1bGxQb2xpY3kgPz8gJ0lmTm90UHJlc2VudCcsXG4gICAgICB9LFxuICAgICAgcmVwbGljYXM6IGJhY2tlbmQucmVwbGljYXMsXG4gICAgICBsaW1pdENwdTogYmFja2VuZC5saW1pdENwdSA/PyAnNTAwbScsXG4gICAgICBsaW1pdE1lbW9yeTogYmFja2VuZC5saW1pdE1lbW9yeSA/PyAnNTEyTWknLFxuICAgICAgcmVxdWVzdENwdTogYmFja2VuZC5yZXF1ZXN0Q3B1ID8/ICcyMDBtJyxcbiAgICAgIHJlcXVlc3RNZW1vcnk6IGJhY2tlbmQucmVxdWVzdE1lbW9yeSA/PyAnMjU2TWknLFxuICAgICAgcGRiOiB7XG4gICAgICAgIG1heFVuYXZhaWxhYmxlOiBiYWNrZW5kLm1heFVuYXZhaWxhYmxlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgbWluQXZhaWxhYmxlOiBiYWNrZW5kLm1pbkF2YWlsYWJsZSA/PyB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgcG9ydDogYmFja2VuZFBvcnQsXG4gICAgICBlbnZpcm9ubWVudDogYmFja2VuZC5lbnZpcm9ubWVudCxcbiAgICAgIGFubm90YXRpb25zOiBiYWNrZW5kLmFubm90YXRpb25zLFxuICAgICAgcG9kQW5ub3RhdGlvbnM6IGJhY2tlbmQucG9kQW5ub3RhdGlvbnMsXG4gICAgICBub2RlU2VsZWN0b3I6IGJhY2tlbmQubm9kZVNlbGVjdG9yLFxuICAgICAgc2VjdXJpdHlDb250ZXh0OiBiYWNrZW5kLnNlY3VyaXR5Q29udGV4dCBhcyBrOHMuU2VjdXJpdHlDb250ZXh0LFxuICAgIH07XG5cbiAgICAvLyBQcm9iaW5nXG4gICAgY29uc3QgYmFja2VuZEFjdGlvbkh0dHBHZXQ6IGs4cy5IdHRwR2V0QWN0aW9uID0ge1xuICAgICAgcGF0aDogJy8nLFxuICAgICAgcG9ydDogSW50T3JTdHJpbmcuZnJvbU51bWJlcihiYWNrZW5kUG9ydCksXG4gICAgfTtcbiAgICBpZiAoYmFja2VuZC5saXZlbmVzc0VuYWJsZWQgPz8gZmFsc2UpIHtcbiAgICAgIGJhY2tlbmRPcHRpb25zLmxpdmVuZXNzUHJvYmUgPSB7XG4gICAgICAgIGh0dHBHZXQ6IGJhY2tlbmRBY3Rpb25IdHRwR2V0LFxuICAgICAgICBpbml0aWFsRGVsYXlTZWNvbmRzOiBiYWNrZW5kLmxpdmVuZXNzSW5pdGlhbERlbGF5U2Vjb25kcyA/PyAzMCxcbiAgICAgICAgdGltZW91dFNlY29uZHM6IGJhY2tlbmQubGl2ZW5lc3NUaW1lb3V0U2Vjb25kcyA/PyA1LFxuICAgICAgICBwZXJpb2RTZWNvbmRzOiBiYWNrZW5kLmxpdmVuZXNzUGVyaW9kU2Vjb25kcyA/PyAxMCxcbiAgICAgICAgc3VjY2Vzc1RocmVzaG9sZDogYmFja2VuZC5saXZlbmVzc1N1Y2Nlc3NUaHJlc2hvbGQgPz8gMSxcbiAgICAgICAgZmFpbHVyZVRocmVzaG9sZDogYmFja2VuZC5saXZlbmVzc0ZhaWx1cmVUaHJlc2hvbGQgPz8gMyxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChiYWNrZW5kLnJlYWRpbmVzc0VuYWJsZWQgPz8gdHJ1ZSkge1xuICAgICAgYmFja2VuZE9wdGlvbnMucmVhZGluZXNzUHJvYmUgPSB7XG4gICAgICAgIGh0dHBHZXQ6IGJhY2tlbmRBY3Rpb25IdHRwR2V0LFxuICAgICAgICBpbml0aWFsRGVsYXlTZWNvbmRzOiBiYWNrZW5kLnJlYWRpbmVzc0luaXRpYWxEZWxheVNlY29uZHMgPz8gMTAsXG4gICAgICAgIHRpbWVvdXRTZWNvbmRzOiBiYWNrZW5kLnJlYWRpbmVzc1RpbWVvdXRTZWNvbmRzID8/IDE1LFxuICAgICAgICBwZXJpb2RTZWNvbmRzOiBiYWNrZW5kLnJlYWRpbmVzc1BlcmlvZFNlY29uZHMgPz8gMTAsXG4gICAgICAgIHN1Y2Nlc3NUaHJlc2hvbGQ6IGJhY2tlbmQucmVhZGluZXNzU3VjY2Vzc1RocmVzaG9sZCA/PyAxLFxuICAgICAgICBmYWlsdXJlVGhyZXNob2xkOiBiYWNrZW5kLnJlYWRpbmVzc0ZhaWx1cmVUaHJlc2hvbGQgPz8gMyxcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIERlcGxveW1lbnRcbiAgICB2YXIgYmFja2VuZERlcGxveW1lbnQgPSBuZXcgUGxvbmVEZXBsb3ltZW50KHRoaXMsICdiYWNrZW5kJywgYmFja2VuZE9wdGlvbnMpO1xuXG4gICAgLy8gU2VydmljZVxuICAgIGNvbnN0IGJhY2tlbmRTZXJ2aWNlID0gbmV3IFBsb25lU2VydmljZShiYWNrZW5kRGVwbG95bWVudCwgJ3NlcnZpY2UnLCB7XG4gICAgICBsYWJlbHM6IHtcbiAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAncGxvbmUtYmFja2VuZC1zZXJ2aWNlJyxcbiAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCc6ICdzZXJ2aWNlJyxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRQb3J0OiBiYWNrZW5kUG9ydCxcbiAgICAgIHNlbGVjdG9yTGFiZWw6IHsgYXBwOiBOYW1lcy50b0xhYmVsVmFsdWUoYmFja2VuZERlcGxveW1lbnQpIH0sXG4gICAgICBwb3J0TmFtZTogJ2JhY2tlbmQtaHR0cCcsXG4gICAgICBzcGVjOiB7XG4gICAgICAgIC4uLmJhY2tlbmQuc2VydmljZSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHsgLi4uYmFja2VuZC5zZXJ2aWNlQW5ub3RhdGlvbnMsIC4uLmJhY2tlbmQuc2VydmljZT8uYW5ub3RhdGlvbnMgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5iYWNrZW5kU2VydmljZU5hbWUgPSBiYWNrZW5kU2VydmljZS5uYW1lO1xuXG4gICAgLy8gU2VydmljZU1vbml0b3IgZm9yIGJhY2tlbmRcbiAgICBpZiAoYmFja2VuZC5zZXJ2aWNlbW9uaXRvcikge1xuICAgICAgdGhpcy5jcmVhdGVTZXJ2aWNlTW9uaXRvcihiYWNrZW5kU2VydmljZSwgJ2JhY2tlbmQnLCB7XG4gICAgICAgIHBvcnQ6IGJhY2tlbmQubWV0cmljc1BvcnQgPz8gJ2JhY2tlbmQtaHR0cCcsXG4gICAgICAgIHBhdGg6IGJhY2tlbmQubWV0cmljc1BhdGggPz8gJy9tZXRyaWNzJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZyb250ZW5kXG4gICAgaWYgKHRoaXMudmFyaWFudCA9PSBQbG9uZVZhcmlhbnQuVk9MVE8pIHtcbiAgICAgIGNvbnN0IGZyb250ZW5kID0gb3B0aW9ucy5mcm9udGVuZCA/PyB7fTtcbiAgICAgIGNvbnN0IGZyb250ZW5kUG9ydCA9IDMwMDA7XG4gICAgICBjb25zdCBmcm9udGVuZExhYmVscyA9IHtcbiAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAncGxvbmUtZnJvbnRlbmQnLFxuICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ2Zyb250ZW5kJyxcbiAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL3ZlcnNpb24nOiBvcHRpb25zLnZlcnNpb24gPz8gJ3VuZGVmaW5lZCcsXG4gICAgICB9O1xuXG4gICAgICAvLyBFbnZpcm9ubWVudCBmb3IgUkFaWkxFXG4gICAgICB2YXIgZnJvbnRlbmRFbnZpcm9ubWVudCA9IGZyb250ZW5kLmVudmlyb25tZW50ID8/IG5ldyBrcGx1cy5FbnYoW10sIHt9KTtcbiAgICAgIGlmIChmcm9udGVuZEVudmlyb25tZW50LnZhcmlhYmxlcy5SQVpaTEVfSU5URVJOQUxfQVBJX1BBVEggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBjb25uZWN0IHdpdGggYmFja2VuZCBzZXJ2aWNlXG4gICAgICAgIGZyb250ZW5kRW52aXJvbm1lbnQ/LmFkZFZhcmlhYmxlKCdSQVpaTEVfSU5URVJOQUxfQVBJX1BBVEgnLCBrcGx1cy5FbnZWYWx1ZS5mcm9tVmFsdWUoYGh0dHA6Ly8ke2JhY2tlbmRTZXJ2aWNlLm5hbWV9OiR7YmFja2VuZFBvcnR9LyR7dGhpcy5zaXRlSWR9YCkpO1xuICAgICAgfVxuXG4gICAgICAvLyBPcHRpb25zXG4gICAgICB2YXIgZnJvbnRlbmRPcHRpb25zOiBQbG9uZURlcGxveW1lbnRPcHRpb25zID0ge1xuICAgICAgICBsYWJlbHM6IGZyb250ZW5kTGFiZWxzLFxuICAgICAgICBpbWFnZToge1xuICAgICAgICAgIGltYWdlOiBmcm9udGVuZC5pbWFnZSA/PyAncGxvbmUvcGxvbmUtZnJvbnRlbmQ6bGF0ZXN0JyxcbiAgICAgICAgICBpbWFnZVB1bGxTZWNyZXRzOiBvcHRpb25zLmltYWdlUHVsbFNlY3JldHMgPz8gW10sXG4gICAgICAgICAgaW1hZ2VQdWxsUG9saWN5OiBmcm9udGVuZC5pbWFnZVB1bGxQb2xpY3kgPz8gJ0lmTm90UHJlc2VudCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlcGxpY2FzOiBmcm9udGVuZC5yZXBsaWNhcyxcbiAgICAgICAgbGltaXRDcHU6IGZyb250ZW5kLmxpbWl0Q3B1ID8/ICc1MDBtJyxcbiAgICAgICAgbGltaXRNZW1vcnk6IGZyb250ZW5kLmxpbWl0TWVtb3J5ID8/ICcxR2knLFxuICAgICAgICByZXF1ZXN0Q3B1OiBmcm9udGVuZC5yZXF1ZXN0Q3B1ID8/ICcyMDBtJyxcbiAgICAgICAgcmVxdWVzdE1lbW9yeTogZnJvbnRlbmQucmVxdWVzdE1lbW9yeSA/PyAnMjU2TWknLFxuXG4gICAgICAgIHBkYjoge1xuICAgICAgICAgIG1heFVuYXZhaWxhYmxlOiBmcm9udGVuZC5tYXhVbmF2YWlsYWJsZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgbWluQXZhaWxhYmxlOiBmcm9udGVuZC5taW5BdmFpbGFibGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICBwb3J0OiBmcm9udGVuZFBvcnQsXG4gICAgICAgIGVudmlyb25tZW50OiBmcm9udGVuZEVudmlyb25tZW50LFxuICAgICAgICBhbm5vdGF0aW9uczogZnJvbnRlbmQuYW5ub3RhdGlvbnMsXG4gICAgICAgIHBvZEFubm90YXRpb25zOiBmcm9udGVuZC5wb2RBbm5vdGF0aW9ucyxcbiAgICAgICAgbm9kZVNlbGVjdG9yOiBmcm9udGVuZC5ub2RlU2VsZWN0b3IsXG4gICAgICAgIHNlY3VyaXR5Q29udGV4dDogZnJvbnRlbmQuc2VjdXJpdHlDb250ZXh0IGFzIGs4cy5TZWN1cml0eUNvbnRleHQsXG4gICAgICB9O1xuXG4gICAgICAvLyBQcm9iaW5nXG4gICAgICBjb25zdCBmcm9udGVuZEFjdGlvbkh0dHBHZXQ6IGs4cy5IdHRwR2V0QWN0aW9uID0ge1xuICAgICAgICBwYXRoOiAnLycsXG4gICAgICAgIHBvcnQ6IEludE9yU3RyaW5nLmZyb21OdW1iZXIoZnJvbnRlbmRQb3J0KSxcbiAgICAgIH07XG4gICAgICBpZiAoZnJvbnRlbmQubGl2ZW5lc3NFbmFibGVkID8/IGZhbHNlKSB7XG4gICAgICAgIGZyb250ZW5kT3B0aW9ucy5saXZlbmVzc1Byb2JlID0ge1xuICAgICAgICAgIGh0dHBHZXQ6IGZyb250ZW5kQWN0aW9uSHR0cEdldCxcbiAgICAgICAgICBpbml0aWFsRGVsYXlTZWNvbmRzOiBmcm9udGVuZC5saXZlbmVzc0luaXRpYWxEZWxheVNlY29uZHMgPz8gMzAsXG4gICAgICAgICAgdGltZW91dFNlY29uZHM6IGZyb250ZW5kLmxpdmVuZXNzVGltZW91dFNlY29uZHMgPz8gNSxcbiAgICAgICAgICBwZXJpb2RTZWNvbmRzOiBmcm9udGVuZC5saXZlbmVzc1BlcmlvZFNlY29uZHMgPz8gMTAsXG4gICAgICAgICAgc3VjY2Vzc1RocmVzaG9sZDogZnJvbnRlbmQubGl2ZW5lc3NTdWNjZXNzVGhyZXNob2xkID8/IDEsXG4gICAgICAgICAgZmFpbHVyZVRocmVzaG9sZDogZnJvbnRlbmQubGl2ZW5lc3NGYWlsdXJlVGhyZXNob2xkID8/IDMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoZnJvbnRlbmQucmVhZGluZXNzRW5hYmxlZCA/PyB0cnVlKSB7XG4gICAgICAgIGZyb250ZW5kT3B0aW9ucy5yZWFkaW5lc3NQcm9iZSA9IHtcbiAgICAgICAgICBodHRwR2V0OiBmcm9udGVuZEFjdGlvbkh0dHBHZXQsXG4gICAgICAgICAgaW5pdGlhbERlbGF5U2Vjb25kczogZnJvbnRlbmQucmVhZGluZXNzSW5pdGlhbERlbGF5U2Vjb25kcyA/PyAxMCxcbiAgICAgICAgICB0aW1lb3V0U2Vjb25kczogZnJvbnRlbmQucmVhZGluZXNzVGltZW91dFNlY29uZHMgPz8gMTUsXG4gICAgICAgICAgcGVyaW9kU2Vjb25kczogZnJvbnRlbmQucmVhZGluZXNzUGVyaW9kU2Vjb25kcyA/PyAxMCxcbiAgICAgICAgICBzdWNjZXNzVGhyZXNob2xkOiBmcm9udGVuZC5yZWFkaW5lc3NTdWNjZXNzVGhyZXNob2xkID8/IDEsXG4gICAgICAgICAgZmFpbHVyZVRocmVzaG9sZDogZnJvbnRlbmQucmVhZGluZXNzRmFpbHVyZVRocmVzaG9sZCA/PyAzLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBEZXBsb3ltZW50XG4gICAgICBjb25zdCBmcm9udGVuZERlcGxveW1lbnQgPSBuZXcgUGxvbmVEZXBsb3ltZW50KHRoaXMsICdmcm9udGVuZCcsIGZyb250ZW5kT3B0aW9ucyk7XG5cbiAgICAgIC8vIFNlcnZpY2VcbiAgICAgIGNvbnN0IGZyb250ZW5kU2VydmljZSA9IG5ldyBQbG9uZVNlcnZpY2UoZnJvbnRlbmREZXBsb3ltZW50LCAnc2VydmljZScsIHtcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAncGxvbmUtZnJvbnRlbmQtc2VydmljZScsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCc6ICdzZXJ2aWNlJyxcbiAgICAgICAgfSxcbiAgICAgICAgdGFyZ2V0UG9ydDogZnJvbnRlbmRQb3J0LFxuICAgICAgICBzZWxlY3RvckxhYmVsOiB7IGFwcDogTmFtZXMudG9MYWJlbFZhbHVlKGZyb250ZW5kRGVwbG95bWVudCkgfSxcbiAgICAgICAgcG9ydE5hbWU6ICdmcm9udGVuZC1odHRwJyxcbiAgICAgICAgc3BlYzoge1xuICAgICAgICAgIC4uLmZyb250ZW5kLnNlcnZpY2UsXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IHsgLi4uZnJvbnRlbmQuc2VydmljZUFubm90YXRpb25zLCAuLi5mcm9udGVuZC5zZXJ2aWNlPy5hbm5vdGF0aW9ucyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmZyb250ZW5kU2VydmljZU5hbWUgPSBmcm9udGVuZFNlcnZpY2UubmFtZTtcblxuICAgICAgLy8gU2VydmljZU1vbml0b3IgZm9yIGZyb250ZW5kXG4gICAgICBpZiAoZnJvbnRlbmQuc2VydmljZW1vbml0b3IpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVTZXJ2aWNlTW9uaXRvcihmcm9udGVuZFNlcnZpY2UsICdmcm9udGVuZCcsIHtcbiAgICAgICAgICBwb3J0OiBmcm9udGVuZC5tZXRyaWNzUG9ydCA/PyAnZnJvbnRlbmQtaHR0cCcsXG4gICAgICAgICAgcGF0aDogZnJvbnRlbmQubWV0cmljc1BhdGggPz8gJy9tZXRyaWNzJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBQcm9tZXRoZXVzIFNlcnZpY2VNb25pdG9yIHJlc291cmNlIGZvciB0aGUgZ2l2ZW4gc2VydmljZS5cbiAgICogQHBhcmFtIHNlcnZpY2UgVGhlIFBsb25lU2VydmljZSB0byBtb25pdG9yXG4gICAqIEBwYXJhbSBpZCBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIFNlcnZpY2VNb25pdG9yXG4gICAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgdGhlIFNlcnZpY2VNb25pdG9yXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVNlcnZpY2VNb25pdG9yKFxuICAgIHNlcnZpY2U6IFBsb25lU2VydmljZSxcbiAgICBpZDogc3RyaW5nLFxuICAgIGNvbmZpZzogeyBwb3J0OiBzdHJpbmcgfCBudW1iZXI7IHBhdGg6IHN0cmluZyB9LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwb3J0TmFtZSA9IHR5cGVvZiBjb25maWcucG9ydCA9PT0gJ3N0cmluZycgPyBjb25maWcucG9ydCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwb3J0TnVtYmVyID0gdHlwZW9mIGNvbmZpZy5wb3J0ID09PSAnbnVtYmVyJ1xuICAgICAgPyBTZXJ2aWNlTW9uaXRvclNwZWNFbmRwb2ludHNUYXJnZXRQb3J0LmZyb21OdW1iZXIoY29uZmlnLnBvcnQpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIG5ldyBTZXJ2aWNlTW9uaXRvcih0aGlzLCBgc2VydmljZW1vbml0b3ItJHtpZH1gLCB7XG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBuYW1lOiBgJHtzZXJ2aWNlLm5hbWV9LW1vbml0b3JgLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6IHNlcnZpY2UubmFtZSxcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ3NlcnZpY2Vtb25pdG9yJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzcGVjOiB7XG4gICAgICAgIHNlbGVjdG9yOiB7XG4gICAgICAgICAgbWF0Y2hMYWJlbHM6IHtcbiAgICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9uYW1lJzogc2VydmljZS5sYWJlbHNbJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlbmRwb2ludHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi4ocG9ydE5hbWUgJiYgeyBwb3J0OiBwb3J0TmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihwb3J0TnVtYmVyICYmIHsgdGFyZ2V0UG9ydDogcG9ydE51bWJlciB9KSxcbiAgICAgICAgICAgIHBhdGg6IGNvbmZpZy5wYXRoLFxuICAgICAgICAgICAgaW50ZXJ2YWw6ICczMHMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59Il19