@restatedev/restate-cdk 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ name: "CLA Assistant"
2
+ on:
3
+ issue_comment:
4
+ types: [created]
5
+ pull_request_target:
6
+ types: [opened, closed, synchronize]
7
+
8
+ jobs:
9
+ CLAAssistant:
10
+ uses: restatedev/restate/.github/workflows/cla.yml@main
11
+ secrets: inherit
@@ -1,5 +1,9 @@
1
1
  name: PR Checks (npm)
2
2
 
3
+ permissions:
4
+ contents: read
5
+ pull-requests: read
6
+
3
7
  on:
4
8
  pull_request:
5
9
  types: [opened, synchronize, reopened, ready_for_review]
package/RELEASING.md ADDED
@@ -0,0 +1,3 @@
1
+ # Releasing the package
2
+
3
+ Create and publish a new release in [GitHub](https://github.com/restatedev/cdk/releases).
@@ -38,7 +38,7 @@ export interface SingleNodeRestateProps {
38
38
  tracing?: TracingMode;
39
39
  /** Prefix for resources created by this construct that require unique names. */
40
40
  prefix?: string;
41
- /** Restate Docker image name. Defaults to `latest`. */
41
+ /** Restate Docker image name. Defaults to `docker.restate.dev/restatedev/restate`. */
42
42
  restateImage?: string;
43
43
  /** Restate Docker image tag. Defaults to `latest`. */
44
44
  restateTag?: string;
@@ -121,21 +121,21 @@ class SingleNodeRestateDeployment extends constructs_1.Construct {
121
121
  const adotTag = props.adotTag ?? ADOT_DOCKER_DEFAULT_TAG;
122
122
  this.tlsEnabled = props.tlsTermination === TlsTermination.ON_HOST_SELF_SIGNED_CERTIFICATE;
123
123
  const envDefaults = {
124
- RESTATE_OBSERVABILITY__LOG__FORMAT: "Json",
124
+ RESTATE_LOG_FORMAT: "json",
125
125
  RUST_LOG: "info",
126
- RESTATE_OBSERVABILITY__TRACING__ENDPOINT: "http://localhost:4317",
126
+ RESTATE_TRACING_ENDPOINT: "http://localhost:4317",
127
127
  };
128
128
  const envArgs = Object.entries({ ...envDefaults, ...(props.environment ?? {}) })
129
129
  .map(([key, value]) => `-e ${key}="${value}"`)
130
130
  .join(" ");
131
131
  const initScript = ec2.UserData.forLinux();
132
- initScript.addCommands("set -euf -o pipefail", `yum install -y npm && npm install -gq @restatedev/restate@${restateTag}`, "yum install -y docker", this.mountDataVolumeScript(), "mkdir -p /etc/restate", ["cat << EOF > /etc/restate/config.toml", this.restateConfig(id, props), "EOF"].join("\n"), "systemctl start docker.service",
132
+ initScript.addCommands("set -euf -o pipefail", `yum install -y npm && npm install -gq @restatedev/restate@${restateTag} @restatedev/restatectl@${restateTag}`, "yum install -y docker", this.mountDataVolumeScript(), "mkdir -p /etc/restate", ["cat << EOF > /etc/restate/config.toml", this.restateConfig(id, props), "EOF"].join("\n"), "systemctl start docker.service",
133
133
  // Start the ADOT collector - needed for X-ray trace forwarding
134
- `if [ "$(docker ps -qa -f name=adot)" ]; then docker stop adot || true; docker rm adot; fi`, "docker run --name adot --restart on-failure --detach" +
134
+ `if [ "$(docker ps -qa -f name=adot)" ]; then docker stop adot || true; docker rm adot; fi`, "docker run --name adot --restart on-failure --detach --pull always" +
135
135
  " -p 4317:4317 -p 55680:55680 -p 8889:8888" +
136
136
  ` public.ecr.aws/aws-observability/aws-otel-collector:${adotTag}`,
137
137
  // Start the Restate server container
138
- `if [ "$(docker ps -qa -f name=restate)" ]; then docker stop restate || true; docker rm restate; fi`, "docker run --name restate --restart on-failure --detach" +
138
+ `if [ "$(docker ps -qa -f name=restate)" ]; then docker stop restate || true; docker rm restate; fi`, "docker run --name restate --restart on-failure --detach --pull always" +
139
139
  " --volume /etc/restate:/etc/restate" +
140
140
  " --volume /var/restate:/restate-data" +
141
141
  " --network=host" +
@@ -216,44 +216,22 @@ class SingleNodeRestateDeployment extends constructs_1.Construct {
216
216
  `roles = [`,
217
217
  ` "worker",`,
218
218
  ` "admin",`,
219
- ` "metadata-store",`,
219
+ ` "metadata-server",`,
220
+ ` "log-server",`,
220
221
  `]`,
221
222
  `node-name = "restate-0"`,
222
223
  `cluster-name = "${props.restateConfig?.clusterName ?? id}"`,
223
- `allow-bootstrap = true`,
224
- `bootstrap-num-partitions = ${props.restateConfig?.bootstrapNumPartitions ?? 4}`,
225
- `default-thread-pool-size = 3`,
226
- `storage-high-priority-bg-threads = 3`,
227
- `storage-low-priority-bg-threads = 3`,
224
+ `default-num-partitions = ${props.restateConfig?.bootstrapNumPartitions ?? 4}`,
228
225
  `rocksdb-total-memory-size = "${props.restateConfig?.rocksdb?.totalMemorySize?.toMebibytes() ?? 512.0 + " MB"}"`,
229
- `rocksdb-total-memtables-ratio = 0.60`,
230
- `rocksdb-bg-threads = 3`,
231
- `rocksdb-high-priority-bg-threads = 3`,
232
- ``,
233
- `[worker]`,
234
- `internal-queue-length = 1000`,
235
- ``,
236
- `[worker.storage]`,
237
- `rocksdb-max-background-jobs = 3`,
238
- `rocksdb-statistics-level = "except-detailed-timers"`,
239
- `num-partitions-to-share-memory-budget = 4`,
240
226
  ``,
241
227
  `[admin]`,
242
228
  `bind-address = "${this.tlsEnabled ? "127.0.0.1" : "0.0.0.0"}:${RESTATE_ADMIN_PORT}"`,
243
229
  ``,
244
230
  `[admin.query-engine]`,
245
- `memory-size = "50.0 MB"`,
246
- `query-parallelism = 4`,
231
+ `memory-size = "256.0 MiB"`,
247
232
  ``,
248
233
  `[ingress]`,
249
234
  `bind-address = "${this.tlsEnabled ? "127.0.0.1" : "0.0.0.0"}:${RESTATE_INGRESS_PORT}"`,
250
- `rocksdb-max-background-jobs = 3`,
251
- `rocksdb-statistics-level = "except-detailed-timers"`,
252
- `writer-batch-commit-count = 1000`,
253
- ``,
254
- `[metadata-store.rocksdb]`,
255
- `rocksdb-max-background-jobs = 1`,
256
- `rocksdb-statistics-level = "except-detailed-timers"`,
257
235
  ].join("\n"));
258
236
  }
259
237
  mountDataVolumeScript() {
@@ -329,4 +307,4 @@ fi
329
307
  }
330
308
  }
331
309
  exports.SingleNodeRestateDeployment = SingleNodeRestateDeployment;
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLW5vZGUtcmVzdGF0ZS1kZXBsb3ltZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL3Jlc3RhdGUtY29uc3RydWN0cy9zaW5nbGUtbm9kZS1yZXN0YXRlLWRlcGxveW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsMkNBQXVDO0FBQ3ZDLDJEQUE2QztBQUM3Qyx5REFBMkM7QUFDM0MseURBQTJDO0FBRTNDLDZEQUFtRDtBQUVuRCw2Q0FBNEM7QUE2RzVDLElBQVksY0FXWDtBQVhELFdBQVksY0FBYztJQUN4Qjs7T0FFRztJQUNILDJEQUFRLENBQUE7SUFFUjs7O09BR0c7SUFDSCx5R0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBWFcsY0FBYyw4QkFBZCxjQUFjLFFBV3pCO0FBRUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDbEMsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLENBQUM7QUFDckMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUFDcEMsTUFBTSxxQkFBcUIsR0FBRyw4QkFBOEIsQ0FBQztBQUM3RCxNQUFNLDBCQUEwQixHQUFHLFFBQVEsQ0FBQztBQUM1QyxNQUFNLHVCQUF1QixHQUFHLFFBQVEsQ0FBQztBQUN6QyxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztBQUVwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFhLDJCQUE0QixTQUFRLHNCQUFTO0lBYXhELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENB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Z0JBQ2xCLCtCQUErQjtnQkFDL0IsRUFBRTtnQkFDRiw4REFBOEQ7Z0JBQzlELGtFQUFrRTtnQkFDbEUsb0NBQW9DO2dCQUNwQyw0QkFBNEI7Z0JBQzVCLCtCQUErQjtnQkFDL0IsaUNBQWlDO2dCQUNqQyxFQUFFO2dCQUNGLGdCQUFnQjtnQkFDaEIsbUNBQW1DLG9CQUFvQixHQUFHO2dCQUMxRCwwQkFBMEIsS0FBSyxDQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksR0FBRztnQkFDL0UsS0FBSztnQkFDTCxHQUFHO2dCQUNILEVBQUU7Z0JBQ0YsVUFBVTtnQkFDVixZQUFZLHNCQUFzQixhQUFhO2dCQUMvQyxpQkFBaUIsc0JBQXNCLGFBQWE7Z0JBQ3BELGtCQUFrQjtnQkFDbEIsK0JBQStCO2dCQUMvQixFQUFFO2dCQUNGLDhEQUE4RDtnQkFDOUQsa0VBQWtFO2dCQUNsRSxvQ0FBb0M7Z0JBQ3BDLDRCQUE0QjtnQkFDNUIsK0JBQStCO2dCQUMvQixpQ0FBaUM7Z0JBQ2pDLEVBQUU7Z0JBQ0YsZ0JBQWdCO2dCQUNoQixtQ0FBbUMsa0JBQWtCLEdBQUc7Z0JBQ3hELEtBQUs7Z0JBQ0wsR0FBRzthQUNKLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuVEQsa0VBbVRDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMy0yMDI1IC0gUmVzdGF0ZSBTb2Z0d2FyZSwgSW5jLiwgUmVzdGF0ZSBHbWJIXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFJlc3RhdGUgQ0RLIENvbnN0cnVjdCBMaWJyYXJ5LFxuICogd2hpY2ggaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICpcbiAqIFlvdSBjYW4gZmluZCBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaW4gZmlsZSBMSUNFTlNFIGluIHRoZSByb290XG4gKiBkaXJlY3Rvcnkgb2YgdGhpcyByZXBvc2l0b3J5IG9yIHBhY2thZ2UsIG9yIGF0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVzdGF0ZWRldi9zZGstdHlwZXNjcmlwdC9ibG9iL21haW4vTElDRU5TRVxuICovXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IElSZXN0YXRlRW52aXJvbm1lbnQgfSBmcm9tIFwiLi9yZXN0YXRlLWVudmlyb25tZW50XCI7XG5pbXBvcnQgeyBUcmFjaW5nTW9kZSB9IGZyb20gXCIuL2RlcGxveW1lbnRzLWNvbW1vblwiO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZU5vZGVSZXN0YXRlUHJvcHMge1xuICAvKiogRUMyIGluc3RhbmNlIHR5cGUgdG8gdXNlLiAqL1xuICBpbnN0YW5jZVR5cGU/OiBlYzIuSW5zdGFuY2VUeXBlO1xuXG4gIC8qKiBNYWNoaW5lIGltYWdlLiBOb3RlOiBzdGFydHVwIHNjcmlwdCBleHBlY3RzIHl1bS1iYXNlZCBwYWNrYWdlIG1hbmFnZW1lbnQuICovXG4gIG1hY2hpbmVJbWFnZT86IGVjMi5JTWFjaGluZUltYWdlO1xuXG4gIC8qKiBUaGUgVlBDIGluIHdoaWNoIHRvIGxhdW5jaCB0aGUgUmVzdGF0ZSBob3N0LiAqL1xuICB2cGM/OiBlYzIuSVZwYztcblxuICBuZXR3b3JrQ29uZmlndXJhdGlvbj86IHtcbiAgICAvKipcbiAgICAgKiBTdWJuZXQgdHlwZSBmb3IgdGhlIFJlc3RhdGUgaG9zdC5cbiAgICAgKlxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgICAqICAtIFtEZWZhdWx0XSB7QGxpbmsgZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU30gd2lsbCBjcmVhdGUgdGhlIFJlc3RhdGUgaW5zdGFuY2Ugd2l0aCBvdXRib3VuZCBpbnRlcm5ldFxuICAgICAqICAgIGFjY2VzcyBvbmx5LCBzbyB0aGF0IGl0IGNhbiBpbnZva2UgSFRUUCBlbmRwb2ludHMuIFRoZSBzZWN1cml0eSBncm91cHMge0BsaW5rIGluZ3Jlc3NTZWN1cml0eUdyb3VwfSBhbmRcbiAgICAgKiAgICB7QGxpbmsgYWRtaW5TZWN1cml0eUdyb3VwfSBjb250cm9sIGluYm91bmQgdHJhZmZpYyB0byB0aGUgc2VydmljZSBpbmdyZXNzIGFuZCBhZG1pbiBwb3J0cyByZXNwZWN0aXZlbHkuXG4gICAgICogICAgQ29uZmlndXJlIHtAbGluayBTZXJ2aWNlRGVwbG95ZXJ9IHRvIHVzZSB0aGUgbGF0dGVyLCBhbmQgc2V0IHVwIGluZ3Jlc3MgdHJhZmZpYyByb3V0aW5nIG91dHNpZGUgb2YgdGhpc1xuICAgICAqICAgIGNvbnN0cnVjdCB1c2luZyB0aGUgZm9ybWVyLlxuICAgICAqICAtIEluc2VjdXJlLCBpbnRlcm5ldC1mYWNpbmcge0BsaW5rIGVjMi5TdWJuZXRUeXBlLlBVQkxJQ30gd2lsbCBhbHNvIHByb3Zpc2lvbiBhbiBuZ2lueCByZXZlcnNlIHByb3h5XG4gICAgICogICAgYW5kIGFuIEhUVFAgbGlzdGVuZXIgd2l0aCBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlLlxuICAgICAqL1xuICAgIHN1Ym5ldFR5cGU/OiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIHwgZWMyLlN1Ym5ldFR5cGUuUFVCTElDO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBbGxvdyBpbmNvbWluZyBpbmdyZXNzIHRyYWZmaWMgZnJvbSBhbnl3aGVyZS4gRGVmYXVsdDogYGZhbHNlYC4gQWx0ZXJuYXRpdmVseSwgYWRkIHJ1bGVzIHRvIHRoZVxuICAgKiBgaW5ncmVzc1NlY3VyaXR5R3JvdXBgIGRpcmVjdGx5LlxuICAgKi9cbiAgcHVibGljSW5ncmVzcz86IGJvb2xlYW47XG5cbiAgLyoqIExvZyBncm91cCBmb3IgUmVzdGF0ZSBzZXJ2aWNlIGxvZ3MuICovXG4gIGxvZ0dyb3VwPzogbG9ncy5Mb2dHcm91cDtcblxuICAvKiogVHJhY2luZyBtb2RlIGZvciBSZXN0YXRlIHNlcnZpY2VzLiBEZWZhdWx0cyB0byB7QGxpbmsgVHJhY2luZ01vZGUuRElTQUJMRUR9LiAqL1xuICB0cmFjaW5nPzogVHJhY2luZ01vZGU7XG5cbiAgLyoqIFByZWZpeCBmb3IgcmVzb3VyY2VzIGNyZWF0ZWQgYnkgdGhpcyBjb25zdHJ1Y3QgdGhhdCByZXF1aXJlIHVuaXF1ZSBuYW1lcy4gKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKiBSZXN0YXRlIERvY2tlciBpbWFnZSBuYW1lLiBEZWZhdWx0cyB0byBgbGF0ZXN0YC4gKi9cbiAgcmVzdGF0ZUltYWdlPzogc3RyaW5nO1xuXG4gIC8qKiBSZXN0YXRlIERvY2tlciBpbWFnZSB0YWcuIERlZmF1bHRzIHRvIGBsYXRlc3RgLiAqL1xuICByZXN0YXRlVGFnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFQlMgZGF0YSB2b2x1bWUgc2V0dGluZ3MgZm9yIFJlc3RhdGUgZGF0YSBzdG9yYWdlLiBJZiBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgOEdCIHZvbHVtZSB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBkYXRhVm9sdW1lT3B0aW9ucz86IGVjMi5FYnNEZXZpY2VQcm9wcyB8IHVuZGVmaW5lZDtcblxuICAvKiogUmVzdGF0ZSBoaWdoLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQge0BsaW5rIHJlc3RhdGVDb25maWdPdmVycmlkZX0uICovXG4gIHJlc3RhdGVDb25maWc/OiB7XG4gICAgLyoqIERlZmF1bHRzIHRvIHRoZSBjb25zdHJ1Y3QgaWQgaWYgbGVmdCB1bnNwZWNpZmllZC4gKi9cbiAgICBjbHVzdGVyTmFtZT86IHN0cmluZztcbiAgICAvKiogRGVmYXVsdHMgdG8gNC4gT25seSB0YWtlcyBlZmZlY3Qgb24gaW5pdGlhbCBwcm92aXNpb25pbmcuICovXG4gICAgYm9vdHN0cmFwTnVtUGFydGl0aW9ucz86IG51bWJlcjtcbiAgICAvKiogUm9ja3NEQiBzZXR0aW5ncy4gKi9cbiAgICByb2Nrc2RiPzoge1xuICAgICAgLyoqIERlZmF1bHRzIHRvIDUxMiBNQi4gKi9cbiAgICAgIHRvdGFsTWVtb3J5U2l6ZT86IGNkay5TaXplO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHByb3BlcnRpZXMgdG8gc2V0IGZvciBSZXN0YXRlLiBUaGlzIGlzIGEgc2ltcGxlIHdheSB0byBwYXNzIGN1c3RvbSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXG4gICAqL1xuICBlbnZpcm9ubWVudD86IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlbHkgb3ZlcnJpZGUgdGhlIFJlc3RhdGUgc2VydmVyIGNvbmZpZ3VyYXRpb24uIE5vdGUgdGhhdCBvdGhlciBSZXN0YXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiB3aWxsIGVmZmVjdGl2ZWx5IGJlIGlnbm9yZWQgaWYgdGhpcyBpcyBzZXQuIFNlZSBodHRwczovL2RvY3MucmVzdGF0ZS5kZXYvb3BlcmF0ZS9jb25maWd1cmF0aW9uL3NlcnZlci9cbiAgICogZm9yIGRldGFpbHMuXG4gICAqL1xuICByZXN0YXRlQ29uZmlnT3ZlcnJpZGU/OiBzdHJpbmc7XG5cbiAgLyoqIEFtYXpvbiBEaXN0cm8gZm9yIE9wZW4gVGVsZW1ldHJ5IERvY2tlciBpbWFnZSB0YWcuIERlZmF1bHRzIHRvIGBsYXRlc3RgLiAqL1xuICBhZG90VGFnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgbG9uZy1saXZlZCByZXNvdXJjZXMgKHN0b3JhZ2UsIGxvZ3MpLiBEZWZhdWx0OiBgY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWWAuXG4gICAqL1xuICByZW1vdmFsUG9saWN5PzogY2RrLlJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgb24taG9zdCBUTFMgdGVybWluYXRpb24gZm9yIGluZ3Jlc3MgYW5kIGFkbWluIHBvcnRzLiBEZWZhdWx0cyB0byBgVGxzVGVybWluYXRpb24uTk9ORWAuIEN1cnJlbnRseSwgZW5hYmxpbmdcbiAgICogVExTIGltcGxpY2l0bHkgZW5hYmxlcyBhbiBgbmdpbnhgIHNlcnZpY2UgdG8gYmUgY29uZmlndXJlZCBvbiB0aGUgaG9zdC4gRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiwgdGhlXG4gICAqIGluZ3Jlc3Mgc2VjdXJpdHkgZ3JvdXAgd2lsbCBiZSBjb25maWd1cmVkIHRvIGFsbG93IGluYm91bmQgdHJhZmZpYyB0byB0aGUgYXBwcm9wcmlhdGUgcG9ydCAtIDgwODAgZm9yIG5vIFRMUywgb3JcbiAgICogNDQzIHdpdGggVExTIGVuYWJsZWQuXG4gICAqL1xuICB0bHNUZXJtaW5hdGlvbj86IFRsc1Rlcm1pbmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVhZCB0aW1lb3V0IGZvciBwcm94aWVkIGluZ3Jlc3MgcmVxdWVzdHMuIERlZmF1bHQ6IDM2MDAgc2Vjb25kcy5cbiAgICovXG4gIGluZ3Jlc3NQcm94eVJlYWRUaW1lb3V0PzogY2RrLkR1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb21wbGV0ZWx5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGBuZ2lueGAgY29uZmlndXJhdGlvbiBmb3IgdGhlIGluZ3Jlc3MgcHJveHkuIE5vdGUgdGhhdCBvdGhlclxuICAgKiBpbmdyZXNzIHByb3h5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGVmZmVjdGl2ZWx5IGJlIGlnbm9yZWQgaWYgdGhpcyBpcyBzZXQuXG4gICAqL1xuICBpbmdyZXNzTmdpbnhDb25maWdPdmVycmlkZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gVGxzVGVybWluYXRpb24ge1xuICAvKipcbiAgICogRGlzYWJsZWQgKGRlZmF1bHQpOyBleHBvc2UgdGhlIGByZXN0YXRlLXNlcnZlcmAgSFRUUCBwb3J0cyBkaXJlY3RseS5cbiAgICovXG4gIERJU0FCTEVELFxuXG4gIC8qKlxuICAgKiBVc2Ugc2VsZi1zaWduZWQgY2VydGlmaWNhdGVzIGZvciBUTFMgdGVybWluYXRpb24gb24gdGhlIGluZ3Jlc3MgYW5kIGFkbWluIHBvcnRzLiBDb252ZW5pZW50IGZvciBxdWljayB0ZXN0aW5nLFxuICAgKiBtYWtlIHN1cmUgeW91IHNldCBgaW5zZWN1cmVgID0gYHRydWVgIHdoZW4gdXNpbmcgYFNlcnZpY2VEZXBsb3llcmAgdG8gYWNjZXB0IHRoaXMgY2VydGlmaWNhdGUuXG4gICAqL1xuICBPTl9IT1NUX1NFTEZfU0lHTkVEX0NFUlRJRklDQVRFLFxufVxuXG5jb25zdCBSRVNUQVRFX0lOR1JFU1NfUE9SVCA9IDgwODA7XG5jb25zdCBSRVNUQVRFX1RMU19JTkdSRVNTX1BPUlQgPSA0NDM7XG5jb25zdCBSRVNUQVRFX0FETUlOX1BPUlQgPSA5MDcwO1xuY29uc3QgUkVTVEFURV9UTFNfQURNSU5fUE9SVCA9IDkwNzM7XG5jb25zdCBSRVNUQVRFX0lNQUdFX0RFRkFVTFQgPSBcImRvY2tlci5pby9yZXN0YXRlZGV2L3Jlc3RhdGVcIjtcbmNvbnN0IFJFU1RBVEVfRE9DS0VSX0RFRkFVTFRfVEFHID0gXCJsYXRlc3RcIjtcbmNvbnN0IEFET1RfRE9DS0VSX0RFRkFVTFRfVEFHID0gXCJsYXRlc3RcIjtcbmNvbnN0IERBVEFfREVWSUNFX05BTUUgPSBcIi9kZXYvc2RkXCI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIFJlc3RhdGUgc2VydmljZSBkZXBsb3ltZW50IGJhY2tlZCBieSBhIHNpbmdsZSBFQzIgaW5zdGFuY2UsIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyBwdXJwb3Nlcy5cbiAqXG4gKiAqKkR1cmFiaWxpdHkqKlxuICpcbiAqIFJlc3RhdGUgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBhIHNlcGFyYXRlIEVCUyB2b2x1bWUgd2hpY2ggeW91IGNhbiBjb25maWd1cmUgZXhwbGljaXRseSB2aWEgdGhlIGBkYXRhVm9sdW1lT3B0aW9uc2BcbiAqIHByb3BlcnR5LiBVcGRhdGluZyBjb25maWd1cmF0aW9uIHNldHRpbmdzIG1heSB0cmlnZ2VyIGluc3RhbmNlIHJlYm9vdCBvciByZXBsYWNlbWVudCAtIGNvbnNpZGVyIHNuYXBzaG90dGluZyB0aGUgZGF0YVxuICogdm9sdW1lIHByaW9yIHRvIGRlcGxveW1lbnRzLCBhbmQgZW5hYmxpbmcgaW5zdGFuY2UgdGVybWluYXRpb24gcHJvdGVjdGlvbi5cbiAqXG4gKiAqKlNlY3VyaXR5KipcbiAqXG4gKiBUaGUgRUMyIGluc3RhbmNlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgZGVmYXVsdCBWUEMgdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQuIFR3byBzZWN1cml0eSBncm91cHMgYXJlIGNyZWF0ZWQsXG4gKiBgaW5ncmVzc1NlY3VyaXR5R3JvdXBgIGFuZCBgYWRtaW5TZWN1cml0eUdyb3VwYCwgd2hpY2ggY29udHJvbCBhY2Nlc3MgdG8gdGhlIFJlc3RhdGUgc2VydmljZSBpbmdyZXNzIGFuZCBhZG1pbiBwb3J0c1xuICogcmVzcGVjdGl2ZWx5LiBZb3UgbXVzdCBhZGQgYXBwcm9wcmlhdGUgcnVsZXMgb3IgYWRkIG90aGVyIHJlc291cmNlcyB0byB0aGVzZSBzZWN1cml0eSBncm91cHMgdG8gYWxsb3cgYWNjZXNzLlxuICpcbiAqIFNlZSB7QGxpbmsgU2luZ2xlTm9kZVJlc3RhdGVQcm9wc30gZm9yIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB7QGxpbmsgU2VydmljZURlcGxveWVyfSBmb3IgZGVwbG95aW5nXG4gKiBMYW1iZGEgaGFuZGxlcnMgdG8gZW52aXJvbm1lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgU2luZ2xlTm9kZVJlc3RhdGVEZXBsb3ltZW50IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVJlc3RhdGVFbnZpcm9ubWVudCB7XG4gIHJlYWRvbmx5IGluc3RhbmNlOiBlYzIuSW5zdGFuY2U7XG4gIHJlYWRvbmx5IGluc3RhbmNlUm9sZTogaWFtLklSb2xlO1xuICByZWFkb25seSBpbnZva2VyUm9sZTogaWFtLklSb2xlO1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICByZWFkb25seSBpbmdyZXNzU2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuICByZWFkb25seSBpbmdyZXNzUG9ydDogbnVtYmVyO1xuICByZWFkb25seSBpbmdyZXNzVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFkbWluU2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuICByZWFkb25seSBhZG1pblBvcnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgYWRtaW5Vcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgdGxzRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2luZ2xlTm9kZVJlc3RhdGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnZwYyA9IHByb3BzLnZwYyA/PyBlYzIuVnBjLmZyb21Mb29rdXAodGhpcywgXCJWcGNcIiwgeyBpc0RlZmF1bHQ6IHRydWUgfSk7XG5cbiAgICBjb25zdCBzdWJuZXRUeXBlID0gcHJvcHMubmV0d29ya0NvbmZpZ3VyYXRpb24/LnN1Ym5ldFR5cGUgPz8gZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUztcblxuICAgIHRoaXMuaW5zdGFuY2VSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiSW5zdGFuY2VSb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiZWMyLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXCJBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlXCIpXSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW52b2tlclJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJJbnZva2VyUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IHRoaXMuaW5zdGFuY2VSb2xlLFxuICAgIH0pO1xuXG4gICAgbmV3IGlhbS5Qb2xpY3kodGhpcywgXCJBc3N1bWVJbnZva2VyUm9sZVBvbGljeVwiLCB7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBzaWQ6IFwiQWxsb3dBc3N1bWVJbnZva2VyUm9sZVwiLFxuICAgICAgICAgIGFjdGlvbnM6IFtcInN0czpBc3N1bWVSb2xlXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW3RoaXMuaW52b2tlclJvbGUucm9sZUFybl0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KS5hdHRhY2hUb1JvbGUodGhpcy5pbnN0YW5jZVJvbGUpO1xuXG4gICAgY29uc3QgbG9nR3JvdXAgPVxuICAgICAgcHJvcHMubG9nR3JvdXAgPz9cbiAgICAgIG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsIFwiTG9nc1wiLCB7XG4gICAgICAgIGxvZ0dyb3VwTmFtZTogYC9yZXN0YXRlLyR7aWR9YCxcbiAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRILFxuICAgICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pO1xuICAgIGxvZ0dyb3VwLmdyYW50V3JpdGUodGhpcy5pbnN0YW5jZVJvbGUpO1xuXG4gICAgY29uc3QgcmVzdGF0ZUltYWdlID0gcHJvcHMucmVzdGF0ZUltYWdlID8/IFJFU1RBVEVfSU1BR0VfREVGQVVMVDtcbiAgICBjb25zdCByZXN0YXRlVGFnID0gcHJvcHMucmVzdGF0ZVRhZyA/PyBSRVNUQVRFX0RPQ0tFUl9ERUZBVUxUX1RBRztcbiAgICBjb25zdCBhZG90VGFnID0gcHJvcHMuYWRvdFRhZyA/PyBBRE9UX0RPQ0tFUl9ERUZBVUxUX1RBRztcblxuICAgIHRoaXMudGxzRW5hYmxlZCA9IHByb3BzLnRsc1Rlcm1pbmF0aW9uID09PSBUbHNUZXJtaW5hdGlvbi5PTl9IT1NUX1NFTEZfU0lHTkVEX0NFUlRJRklDQVRFO1xuXG4gICAgY29uc3QgZW52RGVmYXVsdHMgPSB7XG4gICAgICBSRVNUQVRFX09CU0VSVkFCSUxJVFlfX0xPR19fRk9STUFUOiBcIkpzb25cIixcbiAgICAgIFJVU1RfTE9HOiBcImluZm9cIixcbiAgICAgIFJFU1RBVEVfT0JTRVJWQUJJTElUWV9fVFJBQ0lOR19fRU5EUE9JTlQ6IFwiaHR0cDovL2xvY2FsaG9zdDo0MzE3XCIsXG4gICAgfTtcbiAgICBjb25zdCBlbnZBcmdzID0gT2JqZWN0LmVudHJpZXMoeyAuLi5lbnZEZWZhdWx0cywgLi4uKHByb3BzLmVudmlyb25tZW50ID8/IHt9KSB9KVxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgLWUgJHtrZXl9PVwiJHt2YWx1ZX1cImApXG4gICAgICAuam9pbihcIiBcIik7XG5cbiAgICBjb25zdCBpbml0U2NyaXB0ID0gZWMyLlVzZXJEYXRhLmZvckxpbnV4KCk7XG4gICAgaW5pdFNjcmlwdC5hZGRDb21tYW5kcyhcbiAgICAgIFwic2V0IC1ldWYgLW8gcGlwZWZhaWxcIixcbiAgICAgIGB5dW0gaW5zdGFsbCAteSBucG0gJiYgbnBtIGluc3RhbGwgLWdxIEByZXN0YXRlZGV2L3Jlc3RhdGVAJHtyZXN0YXRlVGFnfWAsXG4gICAgICBcInl1bSBpbnN0YWxsIC15IGRvY2tlclwiLFxuICAgICAgdGhpcy5tb3VudERhdGFWb2x1bWVTY3JpcHQoKSxcblxuICAgICAgXCJta2RpciAtcCAvZXRjL3Jlc3RhdGVcIixcbiAgICAgIFtcImNhdCA8PCBFT0YgPiAvZXRjL3Jlc3RhdGUvY29uZmlnLnRvbWxcIiwgdGhpcy5yZXN0YXRlQ29uZmlnKGlkLCBwcm9wcyksIFwiRU9GXCJdLmpvaW4oXCJcXG5cIiksXG5cbiAgICAgIFwic3lzdGVtY3RsIHN0YXJ0IGRvY2tlci5zZXJ2aWNlXCIsXG5cbiAgICAgIC8vIFN0YXJ0IHRoZSBBRE9UIGNvbGxlY3RvciAtIG5lZWRlZCBmb3IgWC1yYXkgdHJhY2UgZm9yd2FyZGluZ1xuICAgICAgYGlmIFsgXCIkKGRvY2tlciBwcyAtcWEgLWYgbmFtZT1hZG90KVwiIF07IHRoZW4gZG9ja2VyIHN0b3AgYWRvdCB8fCB0cnVlOyBkb2NrZXIgcm0gYWRvdDsgZmlgLFxuICAgICAgXCJkb2NrZXIgcnVuIC0tbmFtZSBhZG90IC0tcmVzdGFydCBvbi1mYWlsdXJlIC0tZGV0YWNoXCIgK1xuICAgICAgICBcIiAtcCA0MzE3OjQzMTcgLXAgNTU2ODA6NTU2ODAgLXAgODg4OTo4ODg4XCIgK1xuICAgICAgICBgIHB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1vdGVsLWNvbGxlY3Rvcjoke2Fkb3RUYWd9YCxcblxuICAgICAgLy8gU3RhcnQgdGhlIFJlc3RhdGUgc2VydmVyIGNvbnRhaW5lclxuICAgICAgYGlmIFsgXCIkKGRvY2tlciBwcyAtcWEgLWYgbmFtZT1yZXN0YXRlKVwiIF07IHRoZW4gZG9ja2VyIHN0b3AgcmVzdGF0ZSB8fCB0cnVlOyBkb2NrZXIgcm0gcmVzdGF0ZTsgZmlgLFxuICAgICAgXCJkb2NrZXIgcnVuIC0tbmFtZSByZXN0YXRlIC0tcmVzdGFydCBvbi1mYWlsdXJlIC0tZGV0YWNoXCIgK1xuICAgICAgICBcIiAtLXZvbHVtZSAvZXRjL3Jlc3RhdGU6L2V0Yy9yZXN0YXRlXCIgK1xuICAgICAgICBcIiAtLXZvbHVtZSAvdmFyL3Jlc3RhdGU6L3Jlc3RhdGUtZGF0YVwiICtcbiAgICAgICAgXCIgLS1uZXR3b3JrPWhvc3RcIiArXG4gICAgICAgIGAgJHtlbnZBcmdzfWAgK1xuICAgICAgICBgIC0tbG9nLWRyaXZlcj1hd3Nsb2dzIC0tbG9nLW9wdCBhd3Nsb2dzLWdyb3VwPSR7bG9nR3JvdXAubG9nR3JvdXBOYW1lfWAgK1xuICAgICAgICBgICR7cmVzdGF0ZUltYWdlfToke3Jlc3RhdGVUYWd9YCArXG4gICAgICAgIFwiIC0tY29uZmlnLWZpbGUgL2V0Yy9yZXN0YXRlL2NvbmZpZy50b21sXCIsXG4gICAgKTtcblxuICAgIC8vIE9wdGlvbmFsbHksIGNvbmZpZ3VyZSBhbmQgc3RhcnQgdGhlIG5naW54IHNlcnZpY2VcbiAgICBpZiAodGhpcy50bHNFbmFibGVkKSB7XG4gICAgICBpZiAoc3VibmV0VHlwZSA9PSBlYzIuU3VibmV0VHlwZS5QVUJMSUMpIHtcbiAgICAgICAgaW5pdFNjcmlwdC5hZGRDb21tYW5kcyhcbiAgICAgICAgICBcInl1bSBpbnN0YWxsIC15IG5naW54XCIsXG4gICAgICAgICAgXCJta2RpciAtcCAvZXRjL3BraS9wcml2YXRlXCIsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgXCJvcGVuc3NsIHJlcSAtbmV3IC14NTA5IC1ub2RlcyAtc2hhMjU2IC1kYXlzIDM2NSAtZXh0ZW5zaW9ucyB2M19jYVwiLFxuICAgICAgICAgICAgXCIgLXN1YmogJy9DPURFL1NUPUJlcmxpbi9MPUJlcmxpbi9PPXJlc3RhdGUuZGV2L09VPWRlbW8vQ049cmVzdGF0ZS5leGFtcGxlLmNvbSdcIixcbiAgICAgICAgICAgIFwiIC1uZXdrZXkgcnNhOjIwNDggLWtleW91dCAvZXRjL3BraS9wcml2YXRlL3Jlc3RhdGUtc2VsZnNpZ25lZC5rZXkgLW91dCAvZXRjL3BraS9wcml2YXRlL3Jlc3RhdGUtc2VsZnNpZ25lZC5jcnRcIixcbiAgICAgICAgICBdLmpvaW4oXCJcIiksXG5cbiAgICAgICAgICBbXCJjYXQgPDwgRU9GID4gL2V0Yy9uZ2lueC9jb25mLmQvcmVzdGF0ZS1pbmdyZXNzLmNvbmZcIiwgdGhpcy5pbmdyZXNzTmdpbnhDb25maWcocHJvcHMpLCBcIkVPRlwiXS5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgIFwic3lzdGVtY3RsIHN0YXJ0IG5naW54XCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xvdWRDb25maWcgPSBlYzIuVXNlckRhdGEuY3VzdG9tKFtgY2xvdWRfZmluYWxfbW9kdWxlczpgLCBgLSBbc2NyaXB0cy11c2VyLCBhbHdheXNdYF0uam9pbihcIlxcblwiKSk7XG5cbiAgICBjb25zdCB1c2VyRGF0YSA9IG5ldyBlYzIuTXVsdGlwYXJ0VXNlckRhdGEoKTtcbiAgICB1c2VyRGF0YS5hZGRVc2VyRGF0YVBhcnQoY2xvdWRDb25maWcsIFwidGV4dC9jbG91ZC1jb25maWdcIik7XG4gICAgdXNlckRhdGEuYWRkVXNlckRhdGFQYXJ0KGluaXRTY3JpcHQsIFwidGV4dC94LXNoZWxsc2NyaXB0XCIpO1xuXG4gICAgY29uc3QgcmVzdGF0ZUluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCBcIkhvc3RcIiwge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZSB9LFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5pbnN0YW5jZVR5cGUgPz8gbmV3IGVjMi5JbnN0YW5jZVR5cGUoXCJ0NGcubWljcm9cIiksXG4gICAgICBtYWNoaW5lSW1hZ2U6XG4gICAgICAgIHByb3BzLm1hY2hpbmVJbWFnZSA/P1xuICAgICAgICBlYzIuTWFjaGluZUltYWdlLmxhdGVzdEFtYXpvbkxpbnV4MjAyMyh7XG4gICAgICAgICAgY3B1VHlwZTogZWMyLkFtYXpvbkxpbnV4Q3B1VHlwZS5BUk1fNjQsXG4gICAgICAgIH0pLFxuICAgICAgcm9sZTogdGhpcy5pbnN0YW5jZVJvbGUsXG4gICAgICBibG9ja0RldmljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRldmljZU5hbWU6IERBVEFfREVWSUNFX05BTUUsXG4gICAgICAgICAgdm9sdW1lOiB7XG4gICAgICAgICAgICBlYnNEZXZpY2U6IHtcbiAgICAgICAgICAgICAgdm9sdW1lU2l6ZTogOCxcbiAgICAgICAgICAgICAgZGVsZXRlT25UZXJtaW5hdGlvbjogcHJvcHMucmVtb3ZhbFBvbGljeSA9PT0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICAgICAgICAuLi4ocHJvcHMuZGF0YVZvbHVtZU9wdGlvbnMgPz8ge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZpcnR1YWxOYW1lOiBcInJlc3RhdGUtZGF0YVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdXNlckRhdGEsXG4gICAgfSk7XG5cbiAgICB0aGlzLmluc3RhbmNlID0gcmVzdGF0ZUluc3RhbmNlO1xuXG4gICAgLy8gV2Ugc3RhcnQgdGhlIEFET1QgY29sbGVjdG9yIHJlZ2FyZGxlc3MsIGFuZCBjb250cm9sIHdoZXRoZXIgdHJhY2VzIHdpbGwgYmUgZXhwb3J0ZWQgdG8gWC1SYXkgdXNpbmcgaW5zdGFuY2Ugcm9sZVxuICAgIC8vIHBlcm1pc3Npb25zLiBUaGlzIHdheSBoaXN0b3JpYyB0cmFjZXMgd2lsbCBiZSBidWZmZXJlZCBvbiB0aGUgaG9zdCwgZXZlbiBpZiB0cmFjaW5nIGlzIGRpc2FibGVkIGluaXRpYWxseS5cbiAgICBpZiAocHJvcHMudHJhY2luZyA9PT0gVHJhY2luZ01vZGUuQVdTX1hSQVkpIHtcbiAgICAgIHJlc3RhdGVJbnN0YW5jZS5yb2xlLmFkZE1hbmFnZWRQb2xpY3koaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFwiQVdTWHJheVdyaXRlT25seUFjY2Vzc1wiKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5ncmVzc1NlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgXCJJbmdyZXNzU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgZGVzY3JpcHRpb246IFwiUmVzdGF0ZSBJbmdyZXNzIEFDTHNcIixcbiAgICB9KTtcbiAgICByZXN0YXRlSW5zdGFuY2UuYWRkU2VjdXJpdHlHcm91cChpbmdyZXNzU2VjdXJpdHlHcm91cCk7XG4gICAgY29uc3QgYWRtaW5TZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIFwiQWRtaW5TZWN1cml0eUdyb3VwXCIsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogXCJSZXN0YXRlIEFkbWluIEFDTHNcIixcbiAgICB9KTtcbiAgICByZXN0YXRlSW5zdGFuY2UuYWRkU2VjdXJpdHlHcm91cChhZG1pblNlY3VyaXR5R3JvdXApO1xuXG4gICAgdGhpcy5pbmdyZXNzUG9ydCA9IHRoaXMudGxzRW5hYmxlZCA/IFJFU1RBVEVfVExTX0lOR1JFU1NfUE9SVCA6IFJFU1RBVEVfSU5HUkVTU19QT1JUO1xuICAgIHRoaXMuYWRtaW5Qb3J0ID0gdGhpcy50bHNFbmFibGVkID8gUkVTVEFURV9UTFNfQURNSU5fUE9SVCA6IFJFU1RBVEVfQURNSU5fUE9SVDtcblxuICAgIGluZ3Jlc3NTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgKHByb3BzLnB1YmxpY0luZ3Jlc3MgPz8gZmFsc2UpID8gZWMyLlBlZXIuYW55SXB2NCgpIDogaW5ncmVzc1NlY3VyaXR5R3JvdXAsXG4gICAgICBlYzIuUG9ydC50Y3AodGhpcy5pbmdyZXNzUG9ydCksXG4gICAgICBcIlJlc3RhdGUgaW5ncmVzc1wiLFxuICAgICk7XG4gICAgYWRtaW5TZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKGFkbWluU2VjdXJpdHlHcm91cCwgZWMyLlBvcnQudGNwKHRoaXMuYWRtaW5Qb3J0KSwgXCJSZXN0YXRlIGFkbWluXCIpO1xuXG4gICAgY29uc3QgcHJvdG9jb2wgPSB0aGlzLnRsc0VuYWJsZWQgPyBcImh0dHBzXCIgOiBcImh0dHBcIjtcbiAgICBjb25zdCBob3N0bmFtZSA9XG4gICAgICBwcm9wcy5uZXR3b3JrQ29uZmlndXJhdGlvbj8uc3VibmV0VHlwZSAhPT0gZWMyLlN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICAgID8gYCR7cmVzdGF0ZUluc3RhbmNlLmluc3RhbmNlUHJpdmF0ZURuc05hbWV9YFxuICAgICAgICA6IGAke3Jlc3RhdGVJbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0Ruc05hbWV9YDtcbiAgICB0aGlzLmluZ3Jlc3NVcmwgPSBgJHtwcm90b2NvbH06Ly8ke2hvc3RuYW1lfWAgKyAodGhpcy5pbmdyZXNzUG9ydCA9PT0gNDQzID8gXCJcIiA6IGA6JHt0aGlzLmluZ3Jlc3NQb3J0fWApO1xuICAgIHRoaXMuYWRtaW5VcmwgPSBgJHtwcm90b2NvbH06Ly8ke2hvc3RuYW1lfToke3RoaXMuYWRtaW5Qb3J0fWA7XG5cbiAgICB0aGlzLmluZ3Jlc3NTZWN1cml0eUdyb3VwID0gaW5ncmVzc1NlY3VyaXR5R3JvdXA7XG4gICAgdGhpcy5hZG1pblNlY3VyaXR5R3JvdXAgPSBhZG1pblNlY3VyaXR5R3JvdXA7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzdGF0ZUNvbmZpZyhpZDogc3RyaW5nLCBwcm9wczogU2luZ2xlTm9kZVJlc3RhdGVQcm9wcykge1xuICAgIHJldHVybiAoXG4gICAgICBwcm9wcy5yZXN0YXRlQ29uZmlnT3ZlcnJpZGUgPz9cbiAgICAgIFtcbiAgICAgICAgYHJvbGVzID0gW2AsXG4gICAgICAgIGAgICAgXCJ3b3JrZXJcIixgLFxuICAgICAgICBgICAgIFwiYWRtaW5cIixgLFxuICAgICAgICBgICAgIFwibWV0YWRhdGEtc3RvcmVcIixgLFxuICAgICAgICBgXWAsXG4gICAgICAgIGBub2RlLW5hbWUgPSBcInJlc3RhdGUtMFwiYCxcbiAgICAgICAgYGNsdXN0ZXItbmFtZSA9IFwiJHtwcm9wcy5yZXN0YXRlQ29uZmlnPy5jbHVzdGVyTmFtZSA/PyBpZH1cImAsXG4gICAgICAgIGBhbGxvdy1ib290c3RyYXAgPSB0cnVlYCxcbiAgICAgICAgYGJvb3RzdHJhcC1udW0tcGFydGl0aW9ucyA9ICR7cHJvcHMucmVzdGF0ZUNvbmZpZz8uYm9vdHN0cmFwTnVtUGFydGl0aW9ucyA/PyA0fWAsXG4gICAgICAgIGBkZWZhdWx0LXRocmVhZC1wb29sLXNpemUgPSAzYCxcbiAgICAgICAgYHN0b3JhZ2UtaGlnaC1wcmlvcml0eS1iZy10aHJlYWRzID0gM2AsXG4gICAgICAgIGBzdG9yYWdlLWxvdy1wcmlvcml0eS1iZy10aHJlYWRzID0gM2AsXG4gICAgICAgIGByb2Nrc2RiLXRvdGFsLW1lbW9yeS1zaXplID0gXCIke3Byb3BzLnJlc3RhdGVDb25maWc/LnJvY2tzZGI/LnRvdGFsTWVtb3J5U2l6ZT8udG9NZWJpYnl0ZXMoKSA/PyA1MTIuMCArIFwiIE1CXCJ9XCJgLFxuICAgICAgICBgcm9ja3NkYi10b3RhbC1tZW10YWJsZXMtcmF0aW8gPSAwLjYwYCxcbiAgICAgICAgYHJvY2tzZGItYmctdGhyZWFkcyA9IDNgLFxuICAgICAgICBgcm9ja3NkYi1oaWdoLXByaW9yaXR5LWJnLXRocmVhZHMgPSAzYCxcbiAgICAgICAgYGAsXG4gICAgICAgIGBbd29ya2VyXWAsXG4gICAgICAgIGBpbnRlcm5hbC1xdWV1ZS1sZW5ndGggPSAxMDAwYCxcbiAgICAgICAgYGAsXG4gICAgICAgIGBbd29ya2VyLnN0b3JhZ2VdYCxcbiAgICAgICAgYHJvY2tzZGItbWF4LWJhY2tncm91bmQtam9icyA9IDNgLFxuICAgICAgICBgcm9ja3NkYi1zdGF0aXN0aWNzLWxldmVsID0gXCJleGNlcHQtZGV0YWlsZWQtdGltZXJzXCJgLFxuICAgICAgICBgbnVtLXBhcnRpdGlvbnMtdG8tc2hhcmUtbWVtb3J5LWJ1ZGdldCA9IDRgLFxuICAgICAgICBgYCxcbiAgICAgICAgYFthZG1pbl1gLFxuICAgICAgICBgYmluZC1hZGRyZXNzID0gXCIke3RoaXMudGxzRW5hYmxlZCA/IFwiMTI3LjAuMC4xXCIgOiBcIjAuMC4wLjBcIn06JHtSRVNUQVRFX0FETUlOX1BPUlR9XCJgLFxuICAgICAgICBgYCxcbiAgICAgICAgYFthZG1pbi5xdWVyeS1lbmdpbmVdYCxcbiAgICAgICAgYG1lbW9yeS1zaXplID0gXCI1MC4wIE1CXCJgLFxuICAgICAgICBgcXVlcnktcGFyYWxsZWxpc20gPSA0YCxcbiAgICAgICAgYGAsXG4gICAgICAgIGBbaW5ncmVzc11gLFxuICAgICAgICBgYmluZC1hZGRyZXNzID0gXCIke3RoaXMudGxzRW5hYmxlZCA/IFwiMTI3LjAuMC4xXCIgOiBcIjAuMC4wLjBcIn06JHtSRVNUQVRFX0lOR1JFU1NfUE9SVH1cImAsXG4gICAgICAgIGByb2Nrc2RiLW1heC1iYWNrZ3JvdW5kLWpvYnMgPSAzYCxcbiAgICAgICAgYHJvY2tzZGItc3RhdGlzdGljcy1sZXZlbCA9IFwiZXhjZXB0LWRldGFpbGVkLXRpbWVyc1wiYCxcbiAgICAgICAgYHdyaXRlci1iYXRjaC1jb21taXQtY291bnQgPSAxMDAwYCxcbiAgICAgICAgYGAsXG4gICAgICAgIGBbbWV0YWRhdGEtc3RvcmUucm9ja3NkYl1gLFxuICAgICAgICBgcm9ja3NkYi1tYXgtYmFja2dyb3VuZC1qb2JzID0gMWAsXG4gICAgICAgIGByb2Nrc2RiLXN0YXRpc3RpY3MtbGV2ZWwgPSBcImV4Y2VwdC1kZXRhaWxlZC10aW1lcnNcImAsXG4gICAgICBdLmpvaW4oXCJcXG5cIilcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1vdW50RGF0YVZvbHVtZVNjcmlwdCgpIHtcbiAgICByZXR1cm4gYFxuaWYgbW91bnQgfCBncmVwIC1xcyAnL3Zhci9yZXN0YXRlJzsgdGhlblxuICBlY2hvIFwiL3Zhci9yZXN0YXRlIGlzIG1vdW50ZWRcIlxuZWxzZVxuICBpZiBbIC1kIC92YXIvcmVzdGF0ZSBdOyB0aGVuXG4gICAgaWYgWyBcIiQobHMgLUEgL3Zhci9yZXN0YXRlKVwiIF07IHRoZW5cbiAgICAgIGVjaG8gXCJEYXRhIGV4aXN0cyBpbiAvdmFyL3Jlc3RhdGUgdGhhdCBpcyBub3Qgb24gZGF0YSB2b2x1bWU7IHJlZnVzaW5nIHRvIG92ZXJ3cml0ZSFcIlxuICAgICAgZXhpdCAxXG4gICAgZmlcbiAgZWxzZVxuICAgIG1rZGlyIC92YXIvcmVzdGF0ZVxuICBmaVxuICBpZiBmaWxlIC1zTCAke0RBVEFfREVWSUNFX05BTUV9IHwgZ3JlcCAtcSAnOiBkYXRhJCc7IHRoZW5cbiAgICBta2ZzIC10IHhmcyAke0RBVEFfREVWSUNFX05BTUV9XG4gIGZpXG4gIG1vdW50ICR7REFUQV9ERVZJQ0VfTkFNRX0gL3Zhci9yZXN0YXRlXG4gIGlmICEgZ3JlcCAtcXMgJy92YXIvcmVzdGF0ZScgL2V0Yy9mc3RhYjsgdGhlblxuICAgIGVjaG8gXCIke0RBVEFfREVWSUNFX05BTUV9IC92YXIvcmVzdGF0ZSB4ZnMgZGVmYXVsdHMgMCAwXCIgPj4gL2V0Yy9mc3RhYlxuICAgIGVjaG8gXCJBZGRlZCBlbnRyeSBmb3IgJHtEQVRBX0RFVklDRV9OQU1FfSB0byAvZXRjL2ZzdGFiXCJcbiAgZWxzZVxuICAgIGVjaG8gXCJFbnRyeSBmb3IgJHtEQVRBX0RFVklDRV9OQU1FfSBhbHJlYWR5IGV4aXN0cyBpbiAvZXRjL2ZzdGFiXCJcbiAgZmlcbmZpXG5gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwcm9wcyBjb25zdHJ1Y3QgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBuZ2lueCBjb25maWd1cmF0aW9uIHRvIHVzZSBmb3IgaW5ncmVzcyByZXZlcnNlIHByb3h5LCBmb3JtYXR0ZWQgYXMgYSBtdWx0aS1saW5lIHN0cmluZ1xuICAgKi9cbiAgcHJvdGVjdGVkIGluZ3Jlc3NOZ2lueENvbmZpZyhwcm9wczogU2luZ2xlTm9kZVJlc3RhdGVQcm9wcykge1xuICAgIHJldHVybiAoXG4gICAgICBwcm9wcy5pbmdyZXNzTmdpbnhDb25maWdPdmVycmlkZSA/P1xuICAgICAgW1xuICAgICAgICBcInNlcnZlciB7XCIsXG4gICAgICAgIGAgIGxpc3RlbiAke1JFU1RBVEVfVExTX0lOR1JFU1NfUE9SVH0gc3NsIGh0dHAyO2AsXG4gICAgICAgIGAgIGxpc3RlbiBbOjpdOiR7UkVTVEFURV9UTFNfSU5HUkVTU19QT1JUfSBzc2wgaHR0cDI7YCxcbiAgICAgICAgXCIgIHNlcnZlcl9uYW1lIF87XCIsXG4gICAgICAgIFwiICByb290IC91c3Ivc2hhcmUvbmdpbngvaHRtbDtcIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgJyAgc3NsX2NlcnRpZmljYXRlIFwiL2V0Yy9wa2kvcHJpdmF0ZS9yZXN0YXRlLXNlbGZzaWduZWQuY3J0XCI7JyxcbiAgICAgICAgJyAgc3NsX2NlcnRpZmljYXRlX2tleSBcIi9ldGMvcGtpL3ByaXZhdGUvcmVzdGF0ZS1zZWxmc2lnbmVkLmtleVwiOycsXG4gICAgICAgIFwiICBzc2xfc2Vzc2lvbl9jYWNoZSBzaGFyZWQ6U1NMOjFtO1wiLFxuICAgICAgICBcIiAgc3NsX3Nlc3Npb25fdGltZW91dCAxMG07XCIsXG4gICAgICAgIFwiICBzc2xfY2lwaGVycyBQUk9GSUxFPVNZU1RFTTtcIixcbiAgICAgICAgXCIgIHNzbF9wcmVmZXJfc2VydmVyX2NpcGhlcnMgb247XCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiICBsb2NhdGlvbiAvIHtcIixcbiAgICAgICAgYCAgICBwcm94eV9wYXNzIGh0dHA6Ly9sb2NhbGhvc3Q6JHtSRVNUQVRFX0lOR1JFU1NfUE9SVH07YCxcbiAgICAgICAgYCAgICBwcm94eV9yZWFkX3RpbWVvdXQgJHtwcm9wcy5pbmdyZXNzUHJveHlSZWFkVGltZW91dD8udG9TZWNvbmRzKCkgPz8gMzYwMH07YCxcbiAgICAgICAgXCIgIH1cIixcbiAgICAgICAgXCJ9XCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwic2VydmVyIHtcIixcbiAgICAgICAgYCAgbGlzdGVuICR7UkVTVEFURV9UTFNfQURNSU5fUE9SVH0gc3NsIGh0dHAyO2AsXG4gICAgICAgIGAgIGxpc3RlbiBbOjpdOiR7UkVTVEFURV9UTFNfQURNSU5fUE9SVH0gc3NsIGh0dHAyO2AsXG4gICAgICAgIFwiICBzZXJ2ZXJfbmFtZSBfO1wiLFxuICAgICAgICBcIiAgcm9vdCAvdXNyL3NoYXJlL25naW54L2h0bWw7XCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgICcgIHNzbF9jZXJ0aWZpY2F0ZSBcIi9ldGMvcGtpL3ByaXZhdGUvcmVzdGF0ZS1zZWxmc2lnbmVkLmNydFwiOycsXG4gICAgICAgICcgIHNzbF9jZXJ0aWZpY2F0ZV9rZXkgXCIvZXRjL3BraS9wcml2YXRlL3Jlc3RhdGUtc2VsZnNpZ25lZC5rZXlcIjsnLFxuICAgICAgICBcIiAgc3NsX3Nlc3Npb25fY2FjaGUgc2hhcmVkOlNTTDoxbTtcIixcbiAgICAgICAgXCIgIHNzbF9zZXNzaW9uX3RpbWVvdXQgMTBtO1wiLFxuICAgICAgICBcIiAgc3NsX2NpcGhlcnMgUFJPRklMRT1TWVNURU07XCIsXG4gICAgICAgIFwiICBzc2xfcHJlZmVyX3NlcnZlcl9jaXBoZXJzIG9uO1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBcIiAgbG9jYXRpb24gLyB7XCIsXG4gICAgICAgIGAgICAgcHJveHlfcGFzcyBodHRwOi8vbG9jYWxob3N0OiR7UkVTVEFURV9BRE1JTl9QT1JUfTtgLFxuICAgICAgICBcIiAgfVwiLFxuICAgICAgICBcIn1cIixcbiAgICAgIF0uam9pbihcIlxcblwiKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLW5vZGUtcmVzdGF0ZS1kZXBsb3ltZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL3Jlc3RhdGUtY29uc3RydWN0cy9zaW5nbGUtbm9kZS1yZXN0YXRlLWRlcGxveW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsMkNBQXVDO0FBQ3ZDLDJEQUE2QztBQUM3Qyx5REFBMkM7QUFDM0MseURBQTJDO0FBRTNDLDZEQUFtRDtBQUVuRCw2Q0FBNEM7QUE2RzVDLElBQVksY0FXWDtBQVhELFdBQVksY0FBYztJQUN4Qjs7T0FFRztJQUNILDJEQUFRLENBQUE7SUFFUjs7O09BR0c7SUFDSCx5R0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBWFcsY0FBYyw4QkFBZCxjQUFjLFFBV3pCO0FBRUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDbEMsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLENBQUM7QUFDckMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUFDcEMsTUFBTSxxQkFBcUIsR0FBRyw4QkFBOEIsQ0FBQztBQUM3RCxNQUFNLDBCQUEwQixHQUFHLFFBQVEsQ0FBQztBQUM1QyxNQUFNLHVCQUF1QixHQUFHLFFBQVEsQ0FBQztBQUN6QyxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztBQUVwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFhLDJCQUE0QixTQUFRLHNCQUFTO0lBYXhELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENB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YUFBYTtnQkFDL0MsaUJBQWlCLHNCQUFzQixhQUFhO2dCQUNwRCxrQkFBa0I7Z0JBQ2xCLCtCQUErQjtnQkFDL0IsRUFBRTtnQkFDRiw4REFBOEQ7Z0JBQzlELGtFQUFrRTtnQkFDbEUsb0NBQW9DO2dCQUNwQyw0QkFBNEI7Z0JBQzVCLCtCQUErQjtnQkFDL0IsaUNBQWlDO2dCQUNqQyxFQUFFO2dCQUNGLGdCQUFnQjtnQkFDaEIsbUNBQW1DLGtCQUFrQixHQUFHO2dCQUN4RCxLQUFLO2dCQUNMLEdBQUc7YUFDSixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBN1JELGtFQTZSQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMtMjAyNSAtIFJlc3RhdGUgU29mdHdhcmUsIEluYy4sIFJlc3RhdGUgR21iSFxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBSZXN0YXRlIENESyBDb25zdHJ1Y3QgTGlicmFyeSxcbiAqIHdoaWNoIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqXG4gKiBZb3UgY2FuIGZpbmQgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGluIGZpbGUgTElDRU5TRSBpbiB0aGUgcm9vdFxuICogZGlyZWN0b3J5IG9mIHRoaXMgcmVwb3NpdG9yeSBvciBwYWNrYWdlLCBvciBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Jlc3RhdGVkZXYvc2RrLXR5cGVzY3JpcHQvYmxvYi9tYWluL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBJUmVzdGF0ZUVudmlyb25tZW50IH0gZnJvbSBcIi4vcmVzdGF0ZS1lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHsgVHJhY2luZ01vZGUgfSBmcm9tIFwiLi9kZXBsb3ltZW50cy1jb21tb25cIjtcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGVOb2RlUmVzdGF0ZVByb3BzIHtcbiAgLyoqIEVDMiBpbnN0YW5jZSB0eXBlIHRvIHVzZS4gKi9cbiAgaW5zdGFuY2VUeXBlPzogZWMyLkluc3RhbmNlVHlwZTtcblxuICAvKiogTWFjaGluZSBpbWFnZS4gTm90ZTogc3RhcnR1cCBzY3JpcHQgZXhwZWN0cyB5dW0tYmFzZWQgcGFja2FnZSBtYW5hZ2VtZW50LiAqL1xuICBtYWNoaW5lSW1hZ2U/OiBlYzIuSU1hY2hpbmVJbWFnZTtcblxuICAvKiogVGhlIFZQQyBpbiB3aGljaCB0byBsYXVuY2ggdGhlIFJlc3RhdGUgaG9zdC4gKi9cbiAgdnBjPzogZWMyLklWcGM7XG5cbiAgbmV0d29ya0NvbmZpZ3VyYXRpb24/OiB7XG4gICAgLyoqXG4gICAgICogU3VibmV0IHR5cGUgZm9yIHRoZSBSZXN0YXRlIGhvc3QuXG4gICAgICpcbiAgICAgKiBBdmFpbGFibGUgb3B0aW9uczpcbiAgICAgKiAgLSBbRGVmYXVsdF0ge0BsaW5rIGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1N9IHdpbGwgY3JlYXRlIHRoZSBSZXN0YXRlIGluc3RhbmNlIHdpdGggb3V0Ym91bmQgaW50ZXJuZXRcbiAgICAgKiAgICBhY2Nlc3Mgb25seSwgc28gdGhhdCBpdCBjYW4gaW52b2tlIEhUVFAgZW5kcG9pbnRzLiBUaGUgc2VjdXJpdHkgZ3JvdXBzIHtAbGluayBpbmdyZXNzU2VjdXJpdHlHcm91cH0gYW5kXG4gICAgICogICAge0BsaW5rIGFkbWluU2VjdXJpdHlHcm91cH0gY29udHJvbCBpbmJvdW5kIHRyYWZmaWMgdG8gdGhlIHNlcnZpY2UgaW5ncmVzcyBhbmQgYWRtaW4gcG9ydHMgcmVzcGVjdGl2ZWx5LlxuICAgICAqICAgIENvbmZpZ3VyZSB7QGxpbmsgU2VydmljZURlcGxveWVyfSB0byB1c2UgdGhlIGxhdHRlciwgYW5kIHNldCB1cCBpbmdyZXNzIHRyYWZmaWMgcm91dGluZyBvdXRzaWRlIG9mIHRoaXNcbiAgICAgKiAgICBjb25zdHJ1Y3QgdXNpbmcgdGhlIGZvcm1lci5cbiAgICAgKiAgLSBJbnNlY3VyZSwgaW50ZXJuZXQtZmFjaW5nIHtAbGluayBlYzIuU3VibmV0VHlwZS5QVUJMSUN9IHdpbGwgYWxzbyBwcm92aXNpb24gYW4gbmdpbnggcmV2ZXJzZSBwcm94eVxuICAgICAqICAgIGFuZCBhbiBIVFRQIGxpc3RlbmVyIHdpdGggYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS5cbiAgICAgKi9cbiAgICBzdWJuZXRUeXBlPzogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB8IGVjMi5TdWJuZXRUeXBlLlBVQkxJQztcbiAgfTtcblxuICAvKipcbiAgICogQWxsb3cgaW5jb21pbmcgaW5ncmVzcyB0cmFmZmljIGZyb20gYW55d2hlcmUuIERlZmF1bHQ6IGBmYWxzZWAuIEFsdGVybmF0aXZlbHksIGFkZCBydWxlcyB0byB0aGVcbiAgICogYGluZ3Jlc3NTZWN1cml0eUdyb3VwYCBkaXJlY3RseS5cbiAgICovXG4gIHB1YmxpY0luZ3Jlc3M/OiBib29sZWFuO1xuXG4gIC8qKiBMb2cgZ3JvdXAgZm9yIFJlc3RhdGUgc2VydmljZSBsb2dzLiAqL1xuICBsb2dHcm91cD86IGxvZ3MuTG9nR3JvdXA7XG5cbiAgLyoqIFRyYWNpbmcgbW9kZSBmb3IgUmVzdGF0ZSBzZXJ2aWNlcy4gRGVmYXVsdHMgdG8ge0BsaW5rIFRyYWNpbmdNb2RlLkRJU0FCTEVEfS4gKi9cbiAgdHJhY2luZz86IFRyYWNpbmdNb2RlO1xuXG4gIC8qKiBQcmVmaXggZm9yIHJlc291cmNlcyBjcmVhdGVkIGJ5IHRoaXMgY29uc3RydWN0IHRoYXQgcmVxdWlyZSB1bmlxdWUgbmFtZXMuICovXG4gIHByZWZpeD86IHN0cmluZztcblxuICAvKiogUmVzdGF0ZSBEb2NrZXIgaW1hZ2UgbmFtZS4gRGVmYXVsdHMgdG8gYGRvY2tlci5yZXN0YXRlLmRldi9yZXN0YXRlZGV2L3Jlc3RhdGVgLiAqL1xuICByZXN0YXRlSW1hZ2U/OiBzdHJpbmc7XG5cbiAgLyoqIFJlc3RhdGUgRG9ja2VyIGltYWdlIHRhZy4gRGVmYXVsdHMgdG8gYGxhdGVzdGAuICovXG4gIHJlc3RhdGVUYWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVCUyBkYXRhIHZvbHVtZSBzZXR0aW5ncyBmb3IgUmVzdGF0ZSBkYXRhIHN0b3JhZ2UuIElmIG5vdCBzcGVjaWZpZWQsIGEgZGVmYXVsdCA4R0Igdm9sdW1lIHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIGRhdGFWb2x1bWVPcHRpb25zPzogZWMyLkVic0RldmljZVByb3BzIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBSZXN0YXRlIGhpZ2gtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNldCB7QGxpbmsgcmVzdGF0ZUNvbmZpZ092ZXJyaWRlfS4gKi9cbiAgcmVzdGF0ZUNvbmZpZz86IHtcbiAgICAvKiogRGVmYXVsdHMgdG8gdGhlIGNvbnN0cnVjdCBpZCBpZiBsZWZ0IHVuc3BlY2lmaWVkLiAqL1xuICAgIGNsdXN0ZXJOYW1lPzogc3RyaW5nO1xuICAgIC8qKiBEZWZhdWx0cyB0byA0LiBPbmx5IHRha2VzIGVmZmVjdCBvbiBpbml0aWFsIHByb3Zpc2lvbmluZy4gKi9cbiAgICBib290c3RyYXBOdW1QYXJ0aXRpb25zPzogbnVtYmVyO1xuICAgIC8qKiBSb2Nrc0RCIHNldHRpbmdzLiAqL1xuICAgIHJvY2tzZGI/OiB7XG4gICAgICAvKiogRGVmYXVsdHMgdG8gNTEyIE1CLiAqL1xuICAgICAgdG90YWxNZW1vcnlTaXplPzogY2RrLlNpemU7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgcHJvcGVydGllcyB0byBzZXQgZm9yIFJlc3RhdGUuIFRoaXMgaXMgYSBzaW1wbGUgd2F5IHRvIHBhc3MgY3VzdG9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy5cbiAgICovXG4gIGVudmlyb25tZW50Pzoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfTtcblxuICAvKipcbiAgICogQ29tcGxldGVseSBvdmVycmlkZSB0aGUgUmVzdGF0ZSBzZXJ2ZXIgY29uZmlndXJhdGlvbi4gTm90ZSB0aGF0IG90aGVyIFJlc3RhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIHdpbGwgZWZmZWN0aXZlbHkgYmUgaWdub3JlZCBpZiB0aGlzIGlzIHNldC4gU2VlIGh0dHBzOi8vZG9jcy5yZXN0YXRlLmRldi9vcGVyYXRlL2NvbmZpZ3VyYXRpb24vc2VydmVyL1xuICAgKiBmb3IgZGV0YWlscy5cbiAgICovXG4gIHJlc3RhdGVDb25maWdPdmVycmlkZT86IHN0cmluZztcblxuICAvKiogQW1hem9uIERpc3RybyBmb3IgT3BlbiBUZWxlbWV0cnkgRG9ja2VyIGltYWdlIHRhZy4gRGVmYXVsdHMgdG8gYGxhdGVzdGAuICovXG4gIGFkb3RUYWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlbW92YWwgcG9saWN5IGZvciBsb25nLWxpdmVkIHJlc291cmNlcyAoc3RvcmFnZSwgbG9ncykuIERlZmF1bHQ6IGBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZYC5cbiAgICovXG4gIHJlbW92YWxQb2xpY3k/OiBjZGsuUmVtb3ZhbFBvbGljeTtcblxuICAvKipcbiAgICogQ29udHJvbCBvbi1ob3N0IFRMUyB0ZXJtaW5hdGlvbiBmb3IgaW5ncmVzcyBhbmQgYWRtaW4gcG9ydHMuIERlZmF1bHRzIHRvIGBUbHNUZXJtaW5hdGlvbi5OT05FYC4gQ3VycmVudGx5LCBlbmFibGluZ1xuICAgKiBUTFMgaW1wbGljaXRseSBlbmFibGVzIGFuIGBuZ2lueGAgc2VydmljZSB0byBiZSBjb25maWd1cmVkIG9uIHRoZSBob3N0LiBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uLCB0aGVcbiAgICogaW5ncmVzcyBzZWN1cml0eSBncm91cCB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgaW5ib3VuZCB0cmFmZmljIHRvIHRoZSBhcHByb3ByaWF0ZSBwb3J0IC0gODA4MCBmb3Igbm8gVExTLCBvclxuICAgKiA0NDMgd2l0aCBUTFMgZW5hYmxlZC5cbiAgICovXG4gIHRsc1Rlcm1pbmF0aW9uPzogVGxzVGVybWluYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSByZWFkIHRpbWVvdXQgZm9yIHByb3hpZWQgaW5ncmVzcyByZXF1ZXN0cy4gRGVmYXVsdDogMzYwMCBzZWNvbmRzLlxuICAgKi9cbiAgaW5ncmVzc1Byb3h5UmVhZFRpbWVvdXQ/OiBjZGsuRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlbHkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYG5naW54YCBjb25maWd1cmF0aW9uIGZvciB0aGUgaW5ncmVzcyBwcm94eS4gTm90ZSB0aGF0IG90aGVyXG4gICAqIGluZ3Jlc3MgcHJveHkgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgZWZmZWN0aXZlbHkgYmUgaWdub3JlZCBpZiB0aGlzIGlzIHNldC5cbiAgICovXG4gIGluZ3Jlc3NOZ2lueENvbmZpZ092ZXJyaWRlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBUbHNUZXJtaW5hdGlvbiB7XG4gIC8qKlxuICAgKiBEaXNhYmxlZCAoZGVmYXVsdCk7IGV4cG9zZSB0aGUgYHJlc3RhdGUtc2VydmVyYCBIVFRQIHBvcnRzIGRpcmVjdGx5LlxuICAgKi9cbiAgRElTQUJMRUQsXG5cbiAgLyoqXG4gICAqIFVzZSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXMgZm9yIFRMUyB0ZXJtaW5hdGlvbiBvbiB0aGUgaW5ncmVzcyBhbmQgYWRtaW4gcG9ydHMuIENvbnZlbmllbnQgZm9yIHF1aWNrIHRlc3RpbmcsXG4gICAqIG1ha2Ugc3VyZSB5b3Ugc2V0IGBpbnNlY3VyZWAgPSBgdHJ1ZWAgd2hlbiB1c2luZyBgU2VydmljZURlcGxveWVyYCB0byBhY2NlcHQgdGhpcyBjZXJ0aWZpY2F0ZS5cbiAgICovXG4gIE9OX0hPU1RfU0VMRl9TSUdORURfQ0VSVElGSUNBVEUsXG59XG5cbmNvbnN0IFJFU1RBVEVfSU5HUkVTU19QT1JUID0gODA4MDtcbmNvbnN0IFJFU1RBVEVfVExTX0lOR1JFU1NfUE9SVCA9IDQ0MztcbmNvbnN0IFJFU1RBVEVfQURNSU5fUE9SVCA9IDkwNzA7XG5jb25zdCBSRVNUQVRFX1RMU19BRE1JTl9QT1JUID0gOTA3MztcbmNvbnN0IFJFU1RBVEVfSU1BR0VfREVGQVVMVCA9IFwiZG9ja2VyLmlvL3Jlc3RhdGVkZXYvcmVzdGF0ZVwiO1xuY29uc3QgUkVTVEFURV9ET0NLRVJfREVGQVVMVF9UQUcgPSBcImxhdGVzdFwiO1xuY29uc3QgQURPVF9ET0NLRVJfREVGQVVMVF9UQUcgPSBcImxhdGVzdFwiO1xuY29uc3QgREFUQV9ERVZJQ0VfTkFNRSA9IFwiL2Rldi9zZGRcIjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgUmVzdGF0ZSBzZXJ2aWNlIGRlcGxveW1lbnQgYmFja2VkIGJ5IGEgc2luZ2xlIEVDMiBpbnN0YW5jZSwgc3VpdGFibGUgZm9yIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHB1cnBvc2VzLlxuICpcbiAqICoqRHVyYWJpbGl0eSoqXG4gKlxuICogUmVzdGF0ZSBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIGEgc2VwYXJhdGUgRUJTIHZvbHVtZSB3aGljaCB5b3UgY2FuIGNvbmZpZ3VyZSBleHBsaWNpdGx5IHZpYSB0aGUgYGRhdGFWb2x1bWVPcHRpb25zYFxuICogcHJvcGVydHkuIFVwZGF0aW5nIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgbWF5IHRyaWdnZXIgaW5zdGFuY2UgcmVib290IG9yIHJlcGxhY2VtZW50IC0gY29uc2lkZXIgc25hcHNob3R0aW5nIHRoZSBkYXRhXG4gKiB2b2x1bWUgcHJpb3IgdG8gZGVwbG95bWVudHMsIGFuZCBlbmFibGluZyBpbnN0YW5jZSB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uLlxuICpcbiAqICoqU2VjdXJpdHkqKlxuICpcbiAqIFRoZSBFQzIgaW5zdGFuY2Ugd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBkZWZhdWx0IFZQQyB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4gVHdvIHNlY3VyaXR5IGdyb3VwcyBhcmUgY3JlYXRlZCxcbiAqIGBpbmdyZXNzU2VjdXJpdHlHcm91cGAgYW5kIGBhZG1pblNlY3VyaXR5R3JvdXBgLCB3aGljaCBjb250cm9sIGFjY2VzcyB0byB0aGUgUmVzdGF0ZSBzZXJ2aWNlIGluZ3Jlc3MgYW5kIGFkbWluIHBvcnRzXG4gKiByZXNwZWN0aXZlbHkuIFlvdSBtdXN0IGFkZCBhcHByb3ByaWF0ZSBydWxlcyBvciBhZGQgb3RoZXIgcmVzb3VyY2VzIHRvIHRoZXNlIHNlY3VyaXR5IGdyb3VwcyB0byBhbGxvdyBhY2Nlc3MuXG4gKlxuICogU2VlIHtAbGluayBTaW5nbGVOb2RlUmVzdGF0ZVByb3BzfSBmb3IgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHtAbGluayBTZXJ2aWNlRGVwbG95ZXJ9IGZvciBkZXBsb3lpbmdcbiAqIExhbWJkYSBoYW5kbGVycyB0byBlbnZpcm9ubWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaW5nbGVOb2RlUmVzdGF0ZURlcGxveW1lbnQgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJUmVzdGF0ZUVudmlyb25tZW50IHtcbiAgcmVhZG9ubHkgaW5zdGFuY2U6IGVjMi5JbnN0YW5jZTtcbiAgcmVhZG9ubHkgaW5zdGFuY2VSb2xlOiBpYW0uSVJvbGU7XG4gIHJlYWRvbmx5IGludm9rZXJSb2xlOiBpYW0uSVJvbGU7XG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG4gIHJlYWRvbmx5IGluZ3Jlc3NTZWN1cml0eUdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXA7XG4gIHJlYWRvbmx5IGluZ3Jlc3NQb3J0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGluZ3Jlc3NVcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgYWRtaW5TZWN1cml0eUdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXA7XG4gIHJlYWRvbmx5IGFkbWluUG9ydDogbnVtYmVyO1xuICByZWFkb25seSBhZG1pblVybDogc3RyaW5nO1xuICByZWFkb25seSB0bHNFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTaW5nbGVOb2RlUmVzdGF0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMudnBjID0gcHJvcHMudnBjID8/IGVjMi5WcGMuZnJvbUxvb2t1cCh0aGlzLCBcIlZwY1wiLCB7IGlzRGVmYXVsdDogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHN1Ym5ldFR5cGUgPSBwcm9wcy5uZXR3b3JrQ29uZmlndXJhdGlvbj8uc3VibmV0VHlwZSA/PyBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTO1xuXG4gICAgdGhpcy5pbnN0YW5jZVJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJJbnN0YW5jZVJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmVcIildLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pbnZva2VyUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkludm9rZXJSb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogdGhpcy5pbnN0YW5jZVJvbGUsXG4gICAgfSk7XG5cbiAgICBuZXcgaWFtLlBvbGljeSh0aGlzLCBcIkFzc3VtZUludm9rZXJSb2xlUG9saWN5XCIsIHtcbiAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIHNpZDogXCJBbGxvd0Fzc3VtZUludm9rZXJSb2xlXCIsXG4gICAgICAgICAgYWN0aW9uczogW1wic3RzOkFzc3VtZVJvbGVcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy5pbnZva2VyUm9sZS5yb2xlQXJuXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pLmF0dGFjaFRvUm9sZSh0aGlzLmluc3RhbmNlUm9sZSk7XG5cbiAgICBjb25zdCBsb2dHcm91cCA9XG4gICAgICBwcm9wcy5sb2dHcm91cCA/P1xuICAgICAgbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgXCJMb2dzXCIsIHtcbiAgICAgICAgbG9nR3JvdXBOYW1lOiBgL3Jlc3RhdGUvJHtpZH1gLFxuICAgICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEgsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgPz8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSk7XG4gICAgbG9nR3JvdXAuZ3JhbnRXcml0ZSh0aGlzLmluc3RhbmNlUm9sZSk7XG5cbiAgICBjb25zdCByZXN0YXRlSW1hZ2UgPSBwcm9wcy5yZXN0YXRlSW1hZ2UgPz8gUkVTVEFURV9JTUFHRV9ERUZBVUxUO1xuICAgIGNvbnN0IHJlc3RhdGVUYWcgPSBwcm9wcy5yZXN0YXRlVGFnID8/IFJFU1RBVEVfRE9DS0VSX0RFRkFVTFRfVEFHO1xuICAgIGNvbnN0IGFkb3RUYWcgPSBwcm9wcy5hZG90VGFnID8/IEFET1RfRE9DS0VSX0RFRkFVTFRfVEFHO1xuXG4gICAgdGhpcy50bHNFbmFibGVkID0gcHJvcHMudGxzVGVybWluYXRpb24gPT09IFRsc1Rlcm1pbmF0aW9uLk9OX0hPU1RfU0VMRl9TSUdORURfQ0VSVElGSUNBVEU7XG5cbiAgICBjb25zdCBlbnZEZWZhdWx0cyA9IHtcbiAgICAgIFJFU1RBVEVfTE9HX0ZPUk1BVDogXCJqc29uXCIsXG4gICAgICBSVVNUX0xPRzogXCJpbmZvXCIsXG4gICAgICBSRVNUQVRFX1RSQUNJTkdfRU5EUE9JTlQ6IFwiaHR0cDovL2xvY2FsaG9zdDo0MzE3XCIsXG4gICAgfTtcbiAgICBjb25zdCBlbnZBcmdzID0gT2JqZWN0LmVudHJpZXMoeyAuLi5lbnZEZWZhdWx0cywgLi4uKHByb3BzLmVudmlyb25tZW50ID8/IHt9KSB9KVxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgLWUgJHtrZXl9PVwiJHt2YWx1ZX1cImApXG4gICAgICAuam9pbihcIiBcIik7XG5cbiAgICBjb25zdCBpbml0U2NyaXB0ID0gZWMyLlVzZXJEYXRhLmZvckxpbnV4KCk7XG4gICAgaW5pdFNjcmlwdC5hZGRDb21tYW5kcyhcbiAgICAgIFwic2V0IC1ldWYgLW8gcGlwZWZhaWxcIixcbiAgICAgIGB5dW0gaW5zdGFsbCAteSBucG0gJiYgbnBtIGluc3RhbGwgLWdxIEByZXN0YXRlZGV2L3Jlc3RhdGVAJHtyZXN0YXRlVGFnfSBAcmVzdGF0ZWRldi9yZXN0YXRlY3RsQCR7cmVzdGF0ZVRhZ31gLFxuICAgICAgXCJ5dW0gaW5zdGFsbCAteSBkb2NrZXJcIixcbiAgICAgIHRoaXMubW91bnREYXRhVm9sdW1lU2NyaXB0KCksXG5cbiAgICAgIFwibWtkaXIgLXAgL2V0Yy9yZXN0YXRlXCIsXG4gICAgICBbXCJjYXQgPDwgRU9GID4gL2V0Yy9yZXN0YXRlL2NvbmZpZy50b21sXCIsIHRoaXMucmVzdGF0ZUNvbmZpZyhpZCwgcHJvcHMpLCBcIkVPRlwiXS5qb2luKFwiXFxuXCIpLFxuXG4gICAgICBcInN5c3RlbWN0bCBzdGFydCBkb2NrZXIuc2VydmljZVwiLFxuXG4gICAgICAvLyBTdGFydCB0aGUgQURPVCBjb2xsZWN0b3IgLSBuZWVkZWQgZm9yIFgtcmF5IHRyYWNlIGZvcndhcmRpbmdcbiAgICAgIGBpZiBbIFwiJChkb2NrZXIgcHMgLXFhIC1mIG5hbWU9YWRvdClcIiBdOyB0aGVuIGRvY2tlciBzdG9wIGFkb3QgfHwgdHJ1ZTsgZG9ja2VyIHJtIGFkb3Q7IGZpYCxcbiAgICAgIFwiZG9ja2VyIHJ1biAtLW5hbWUgYWRvdCAtLXJlc3RhcnQgb24tZmFpbHVyZSAtLWRldGFjaCAtLXB1bGwgYWx3YXlzXCIgK1xuICAgICAgICBcIiAtcCA0MzE3OjQzMTcgLXAgNTU2ODA6NTU2ODAgLXAgODg4OTo4ODg4XCIgK1xuICAgICAgICBgIHB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1vdGVsLWNvbGxlY3Rvcjoke2Fkb3RUYWd9YCxcblxuICAgICAgLy8gU3RhcnQgdGhlIFJlc3RhdGUgc2VydmVyIGNvbnRhaW5lclxuICAgICAgYGlmIFsgXCIkKGRvY2tlciBwcyAtcWEgLWYgbmFtZT1yZXN0YXRlKVwiIF07IHRoZW4gZG9ja2VyIHN0b3AgcmVzdGF0ZSB8fCB0cnVlOyBkb2NrZXIgcm0gcmVzdGF0ZTsgZmlgLFxuICAgICAgXCJkb2NrZXIgcnVuIC0tbmFtZSByZXN0YXRlIC0tcmVzdGFydCBvbi1mYWlsdXJlIC0tZGV0YWNoIC0tcHVsbCBhbHdheXNcIiArXG4gICAgICAgIFwiIC0tdm9sdW1lIC9ldGMvcmVzdGF0ZTovZXRjL3Jlc3RhdGVcIiArXG4gICAgICAgIFwiIC0tdm9sdW1lIC92YXIvcmVzdGF0ZTovcmVzdGF0ZS1kYXRhXCIgK1xuICAgICAgICBcIiAtLW5ldHdvcms9aG9zdFwiICtcbiAgICAgICAgYCAke2VudkFyZ3N9YCArXG4gICAgICAgIGAgLS1sb2ctZHJpdmVyPWF3c2xvZ3MgLS1sb2ctb3B0IGF3c2xvZ3MtZ3JvdXA9JHtsb2dHcm91cC5sb2dHcm91cE5hbWV9YCArXG4gICAgICAgIGAgJHtyZXN0YXRlSW1hZ2V9OiR7cmVzdGF0ZVRhZ31gICtcbiAgICAgICAgXCIgLS1jb25maWctZmlsZSAvZXRjL3Jlc3RhdGUvY29uZmlnLnRvbWxcIixcbiAgICApO1xuXG4gICAgLy8gT3B0aW9uYWxseSwgY29uZmlndXJlIGFuZCBzdGFydCB0aGUgbmdpbnggc2VydmljZVxuICAgIGlmICh0aGlzLnRsc0VuYWJsZWQpIHtcbiAgICAgIGlmIChzdWJuZXRUeXBlID09IGVjMi5TdWJuZXRUeXBlLlBVQkxJQykge1xuICAgICAgICBpbml0U2NyaXB0LmFkZENvbW1hbmRzKFxuICAgICAgICAgIFwieXVtIGluc3RhbGwgLXkgbmdpbnhcIixcbiAgICAgICAgICBcIm1rZGlyIC1wIC9ldGMvcGtpL3ByaXZhdGVcIixcbiAgICAgICAgICBbXG4gICAgICAgICAgICBcIm9wZW5zc2wgcmVxIC1uZXcgLXg1MDkgLW5vZGVzIC1zaGEyNTYgLWRheXMgMzY1IC1leHRlbnNpb25zIHYzX2NhXCIsXG4gICAgICAgICAgICBcIiAtc3ViaiAnL0M9REUvU1Q9QmVybGluL0w9QmVybGluL089cmVzdGF0ZS5kZXYvT1U9ZGVtby9DTj1yZXN0YXRlLmV4YW1wbGUuY29tJ1wiLFxuICAgICAgICAgICAgXCIgLW5ld2tleSByc2E6MjA0OCAta2V5b3V0IC9ldGMvcGtpL3ByaXZhdGUvcmVzdGF0ZS1zZWxmc2lnbmVkLmtleSAtb3V0IC9ldGMvcGtpL3ByaXZhdGUvcmVzdGF0ZS1zZWxmc2lnbmVkLmNydFwiLFxuICAgICAgICAgIF0uam9pbihcIlwiKSxcblxuICAgICAgICAgIFtcImNhdCA8PCBFT0YgPiAvZXRjL25naW54L2NvbmYuZC9yZXN0YXRlLWluZ3Jlc3MuY29uZlwiLCB0aGlzLmluZ3Jlc3NOZ2lueENvbmZpZyhwcm9wcyksIFwiRU9GXCJdLmpvaW4oXCJcXG5cIiksXG4gICAgICAgICAgXCJzeXN0ZW1jdGwgc3RhcnQgbmdpbnhcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbG91ZENvbmZpZyA9IGVjMi5Vc2VyRGF0YS5jdXN0b20oW2BjbG91ZF9maW5hbF9tb2R1bGVzOmAsIGAtIFtzY3JpcHRzLXVzZXIsIGFsd2F5c11gXS5qb2luKFwiXFxuXCIpKTtcblxuICAgIGNvbnN0IHVzZXJEYXRhID0gbmV3IGVjMi5NdWx0aXBhcnRVc2VyRGF0YSgpO1xuICAgIHVzZXJEYXRhLmFkZFVzZXJEYXRhUGFydChjbG91ZENvbmZpZywgXCJ0ZXh0L2Nsb3VkLWNvbmZpZ1wiKTtcbiAgICB1c2VyRGF0YS5hZGRVc2VyRGF0YVBhcnQoaW5pdFNjcmlwdCwgXCJ0ZXh0L3gtc2hlbGxzY3JpcHRcIik7XG5cbiAgICBjb25zdCByZXN0YXRlSW5zdGFuY2UgPSBuZXcgZWMyLkluc3RhbmNlKHRoaXMsIFwiSG9zdFwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgdnBjU3VibmV0czogeyBzdWJuZXRUeXBlIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZSA/PyBuZXcgZWMyLkluc3RhbmNlVHlwZShcInQ0Zy5taWNyb1wiKSxcbiAgICAgIG1hY2hpbmVJbWFnZTpcbiAgICAgICAgcHJvcHMubWFjaGluZUltYWdlID8/XG4gICAgICAgIGVjMi5NYWNoaW5lSW1hZ2UubGF0ZXN0QW1hem9uTGludXgyMDIzKHtcbiAgICAgICAgICBjcHVUeXBlOiBlYzIuQW1hem9uTGludXhDcHVUeXBlLkFSTV82NCxcbiAgICAgICAgfSksXG4gICAgICByb2xlOiB0aGlzLmluc3RhbmNlUm9sZSxcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogREFUQV9ERVZJQ0VfTkFNRSxcbiAgICAgICAgICB2b2x1bWU6IHtcbiAgICAgICAgICAgIGVic0RldmljZToge1xuICAgICAgICAgICAgICB2b2x1bWVTaXplOiA4LFxuICAgICAgICAgICAgICBkZWxldGVPblRlcm1pbmF0aW9uOiBwcm9wcy5yZW1vdmFsUG9saWN5ID09PSBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgICAgICAgIC4uLihwcm9wcy5kYXRhVm9sdW1lT3B0aW9ucyA/PyB7fSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmlydHVhbE5hbWU6IFwicmVzdGF0ZS1kYXRhXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB1c2VyRGF0YSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5zdGFuY2UgPSByZXN0YXRlSW5zdGFuY2U7XG5cbiAgICAvLyBXZSBzdGFydCB0aGUgQURPVCBjb2xsZWN0b3IgcmVnYXJkbGVzcywgYW5kIGNvbnRyb2wgd2hldGhlciB0cmFjZXMgd2lsbCBiZSBleHBvcnRlZCB0byBYLVJheSB1c2luZyBpbnN0YW5jZSByb2xlXG4gICAgLy8gcGVybWlzc2lvbnMuIFRoaXMgd2F5IGhpc3RvcmljIHRyYWNlcyB3aWxsIGJlIGJ1ZmZlcmVkIG9uIHRoZSBob3N0LCBldmVuIGlmIHRyYWNpbmcgaXMgZGlzYWJsZWQgaW5pdGlhbGx5LlxuICAgIGlmIChwcm9wcy50cmFjaW5nID09PSBUcmFjaW5nTW9kZS5BV1NfWFJBWSkge1xuICAgICAgcmVzdGF0ZUluc3RhbmNlLnJvbGUuYWRkTWFuYWdlZFBvbGljeShpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXCJBV1NYcmF5V3JpdGVPbmx5QWNjZXNzXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmdyZXNzU2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBcIkluZ3Jlc3NTZWN1cml0eUdyb3VwXCIsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogXCJSZXN0YXRlIEluZ3Jlc3MgQUNMc1wiLFxuICAgIH0pO1xuICAgIHJlc3RhdGVJbnN0YW5jZS5hZGRTZWN1cml0eUdyb3VwKGluZ3Jlc3NTZWN1cml0eUdyb3VwKTtcbiAgICBjb25zdCBhZG1pblNlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgXCJBZG1pblNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJlc3RhdGUgQWRtaW4gQUNMc1wiLFxuICAgIH0pO1xuICAgIHJlc3RhdGVJbnN0YW5jZS5hZGRTZWN1cml0eUdyb3VwKGFkbWluU2VjdXJpdHlHcm91cCk7XG5cbiAgICB0aGlzLmluZ3Jlc3NQb3J0ID0gdGhpcy50bHNFbmFibGVkID8gUkVTVEFURV9UTFNfSU5HUkVTU19QT1JUIDogUkVTVEFURV9JTkdSRVNTX1BPUlQ7XG4gICAgdGhpcy5hZG1pblBvcnQgPSB0aGlzLnRsc0VuYWJsZWQgPyBSRVNUQVRFX1RMU19BRE1JTl9QT1JUIDogUkVTVEFURV9BRE1JTl9QT1JUO1xuXG4gICAgaW5ncmVzc1NlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICAocHJvcHMucHVibGljSW5ncmVzcyA/PyBmYWxzZSkgPyBlYzIuUGVlci5hbnlJcHY0KCkgOiBpbmdyZXNzU2VjdXJpdHlHcm91cCxcbiAgICAgIGVjMi5Qb3J0LnRjcCh0aGlzLmluZ3Jlc3NQb3J0KSxcbiAgICAgIFwiUmVzdGF0ZSBpbmdyZXNzXCIsXG4gICAgKTtcbiAgICBhZG1pblNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoYWRtaW5TZWN1cml0eUdyb3VwLCBlYzIuUG9ydC50Y3AodGhpcy5hZG1pblBvcnQpLCBcIlJlc3RhdGUgYWRtaW5cIik7XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHRoaXMudGxzRW5hYmxlZCA/IFwiaHR0cHNcIiA6IFwiaHR0cFwiO1xuICAgIGNvbnN0IGhvc3RuYW1lID1cbiAgICAgIHByb3BzLm5ldHdvcmtDb25maWd1cmF0aW9uPy5zdWJuZXRUeXBlICE9PSBlYzIuU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgPyBgJHtyZXN0YXRlSW5zdGFuY2UuaW5zdGFuY2VQcml2YXRlRG5zTmFtZX1gXG4gICAgICAgIDogYCR7cmVzdGF0ZUluc3RhbmNlLmluc3RhbmNlUHVibGljRG5zTmFtZX1gO1xuICAgIHRoaXMuaW5ncmVzc1VybCA9IGAke3Byb3RvY29sfTovLyR7aG9zdG5hbWV9YCArICh0aGlzLmluZ3Jlc3NQb3J0ID09PSA0NDMgPyBcIlwiIDogYDoke3RoaXMuaW5ncmVzc1BvcnR9YCk7XG4gICAgdGhpcy5hZG1pblVybCA9IGAke3Byb3RvY29sfTovLyR7aG9zdG5hbWV9OiR7dGhpcy5hZG1pblBvcnR9YDtcblxuICAgIHRoaXMuaW5ncmVzc1NlY3VyaXR5R3JvdXAgPSBpbmdyZXNzU2VjdXJpdHlHcm91cDtcbiAgICB0aGlzLmFkbWluU2VjdXJpdHlHcm91cCA9IGFkbWluU2VjdXJpdHlHcm91cDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXN0YXRlQ29uZmlnKGlkOiBzdHJpbmcsIHByb3BzOiBTaW5nbGVOb2RlUmVzdGF0ZVByb3BzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHByb3BzLnJlc3RhdGVDb25maWdPdmVycmlkZSA/P1xuICAgICAgW1xuICAgICAgICBgcm9sZXMgPSBbYCxcbiAgICAgICAgYCAgICBcIndvcmtlclwiLGAsXG4gICAgICAgIGAgICAgXCJhZG1pblwiLGAsXG4gICAgICAgIGAgICAgXCJtZXRhZGF0YS1zZXJ2ZXJcIixgLFxuICAgICAgICBgICAgIFwibG9nLXNlcnZlclwiLGAsXG4gICAgICAgIGBdYCxcbiAgICAgICAgYG5vZGUtbmFtZSA9IFwicmVzdGF0ZS0wXCJgLFxuICAgICAgICBgY2x1c3Rlci1uYW1lID0gXCIke3Byb3BzLnJlc3RhdGVDb25maWc/LmNsdXN0ZXJOYW1lID8/IGlkfVwiYCxcbiAgICAgICAgYGRlZmF1bHQtbnVtLXBhcnRpdGlvbnMgPSAke3Byb3BzLnJlc3RhdGVDb25maWc/LmJvb3RzdHJhcE51bVBhcnRpdGlvbnMgPz8gNH1gLFxuICAgICAgICBgcm9ja3NkYi10b3RhbC1tZW1vcnktc2l6ZSA9IFwiJHtwcm9wcy5yZXN0YXRlQ29uZmlnPy5yb2Nrc2RiPy50b3RhbE1lbW9yeVNpemU/LnRvTWViaWJ5dGVzKCkgPz8gNTEyLjAgKyBcIiBNQlwifVwiYCxcbiAgICAgICAgYGAsXG4gICAgICAgIGBbYWRtaW5dYCxcbiAgICAgICAgYGJpbmQtYWRkcmVzcyA9IFwiJHt0aGlzLnRsc0VuYWJsZWQgPyBcIjEyNy4wLjAuMVwiIDogXCIwLjAuMC4wXCJ9OiR7UkVTVEFURV9BRE1JTl9QT1JUfVwiYCxcbiAgICAgICAgYGAsXG4gICAgICAgIGBbYWRtaW4ucXVlcnktZW5naW5lXWAsXG4gICAgICAgIGBtZW1vcnktc2l6ZSA9IFwiMjU2LjAgTWlCXCJgLFxuICAgICAgICBgYCxcbiAgICAgICAgYFtpbmdyZXNzXWAsXG4gICAgICAgIGBiaW5kLWFkZHJlc3MgPSBcIiR7dGhpcy50bHNFbmFibGVkID8gXCIxMjcuMC4wLjFcIiA6IFwiMC4wLjAuMFwifToke1JFU1RBVEVfSU5HUkVTU19QT1JUfVwiYCxcbiAgICAgIF0uam9pbihcIlxcblwiKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbW91bnREYXRhVm9sdW1lU2NyaXB0KCkge1xuICAgIHJldHVybiBgXG5pZiBtb3VudCB8IGdyZXAgLXFzICcvdmFyL3Jlc3RhdGUnOyB0aGVuXG4gIGVjaG8gXCIvdmFyL3Jlc3RhdGUgaXMgbW91bnRlZFwiXG5lbHNlXG4gIGlmIFsgLWQgL3Zhci9yZXN0YXRlIF07IHRoZW5cbiAgICBpZiBbIFwiJChscyAtQSAvdmFyL3Jlc3RhdGUpXCIgXTsgdGhlblxuICAgICAgZWNobyBcIkRhdGEgZXhpc3RzIGluIC92YXIvcmVzdGF0ZSB0aGF0IGlzIG5vdCBvbiBkYXRhIHZvbHVtZTsgcmVmdXNpbmcgdG8gb3ZlcndyaXRlIVwiXG4gICAgICBleGl0IDFcbiAgICBmaVxuICBlbHNlXG4gICAgbWtkaXIgL3Zhci9yZXN0YXRlXG4gIGZpXG4gIGlmIGZpbGUgLXNMICR7REFUQV9ERVZJQ0VfTkFNRX0gfCBncmVwIC1xICc6IGRhdGEkJzsgdGhlblxuICAgIG1rZnMgLXQgeGZzICR7REFUQV9ERVZJQ0VfTkFNRX1cbiAgZmlcbiAgbW91bnQgJHtEQVRBX0RFVklDRV9OQU1FfSAvdmFyL3Jlc3RhdGVcbiAgaWYgISBncmVwIC1xcyAnL3Zhci9yZXN0YXRlJyAvZXRjL2ZzdGFiOyB0aGVuXG4gICAgZWNobyBcIiR7REFUQV9ERVZJQ0VfTkFNRX0gL3Zhci9yZXN0YXRlIHhmcyBkZWZhdWx0cyAwIDBcIiA+PiAvZXRjL2ZzdGFiXG4gICAgZWNobyBcIkFkZGVkIGVudHJ5IGZvciAke0RBVEFfREVWSUNFX05BTUV9IHRvIC9ldGMvZnN0YWJcIlxuICBlbHNlXG4gICAgZWNobyBcIkVudHJ5IGZvciAke0RBVEFfREVWSUNFX05BTUV9IGFscmVhZHkgZXhpc3RzIGluIC9ldGMvZnN0YWJcIlxuICBmaVxuZmlcbmA7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHByb3BzIGNvbnN0cnVjdCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIG5naW54IGNvbmZpZ3VyYXRpb24gdG8gdXNlIGZvciBpbmdyZXNzIHJldmVyc2UgcHJveHksIGZvcm1hdHRlZCBhcyBhIG11bHRpLWxpbmUgc3RyaW5nXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5ncmVzc05naW54Q29uZmlnKHByb3BzOiBTaW5nbGVOb2RlUmVzdGF0ZVByb3BzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHByb3BzLmluZ3Jlc3NOZ2lueENvbmZpZ092ZXJyaWRlID8/XG4gICAgICBbXG4gICAgICAgIFwic2VydmVyIHtcIixcbiAgICAgICAgYCAgbGlzdGVuICR7UkVTVEFURV9UTFNfSU5HUkVTU19QT1JUfSBzc2wgaHR0cDI7YCxcbiAgICAgICAgYCAgbGlzdGVuIFs6Ol06JHtSRVNUQVRFX1RMU19JTkdSRVNTX1BPUlR9IHNzbCBodHRwMjtgLFxuICAgICAgICBcIiAgc2VydmVyX25hbWUgXztcIixcbiAgICAgICAgXCIgIHJvb3QgL3Vzci9zaGFyZS9uZ2lueC9odG1sO1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICAnICBzc2xfY2VydGlmaWNhdGUgXCIvZXRjL3BraS9wcml2YXRlL3Jlc3RhdGUtc2VsZnNpZ25lZC5jcnRcIjsnLFxuICAgICAgICAnICBzc2xfY2VydGlmaWNhdGVfa2V5IFwiL2V0Yy9wa2kvcHJpdmF0ZS9yZXN0YXRlLXNlbGZzaWduZWQua2V5XCI7JyxcbiAgICAgICAgXCIgIHNzbF9zZXNzaW9uX2NhY2hlIHNoYXJlZDpTU0w6MW07XCIsXG4gICAgICAgIFwiICBzc2xfc2Vzc2lvbl90aW1lb3V0IDEwbTtcIixcbiAgICAgICAgXCIgIHNzbF9jaXBoZXJzIFBST0ZJTEU9U1lTVEVNO1wiLFxuICAgICAgICBcIiAgc3NsX3ByZWZlcl9zZXJ2ZXJfY2lwaGVycyBvbjtcIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgXCIgIGxvY2F0aW9uIC8ge1wiLFxuICAgICAgICBgICAgIHByb3h5X3Bhc3MgaHR0cDovL2xvY2FsaG9zdDoke1JFU1RBVEVfSU5HUkVTU19QT1JUfTtgLFxuICAgICAgICBgICAgIHByb3h5X3JlYWRfdGltZW91dCAke3Byb3BzLmluZ3Jlc3NQcm94eVJlYWRUaW1lb3V0Py50b1NlY29uZHMoKSA/PyAzNjAwfTtgLFxuICAgICAgICBcIiAgfVwiLFxuICAgICAgICBcIn1cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgXCJzZXJ2ZXIge1wiLFxuICAgICAgICBgICBsaXN0ZW4gJHtSRVNUQVRFX1RMU19BRE1JTl9QT1JUfSBzc2wgaHR0cDI7YCxcbiAgICAgICAgYCAgbGlzdGVuIFs6Ol06JHtSRVNUQVRFX1RMU19BRE1JTl9QT1JUfSBzc2wgaHR0cDI7YCxcbiAgICAgICAgXCIgIHNlcnZlcl9uYW1lIF87XCIsXG4gICAgICAgIFwiICByb290IC91c3Ivc2hhcmUvbmdpbngvaHRtbDtcIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgJyAgc3NsX2NlcnRpZmljYXRlIFwiL2V0Yy9wa2kvcHJpdmF0ZS9yZXN0YXRlLXNlbGZzaWduZWQuY3J0XCI7JyxcbiAgICAgICAgJyAgc3NsX2NlcnRpZmljYXRlX2tleSBcIi9ldGMvcGtpL3ByaXZhdGUvcmVzdGF0ZS1zZWxmc2lnbmVkLmtleVwiOycsXG4gICAgICAgIFwiICBzc2xfc2Vzc2lvbl9jYWNoZSBzaGFyZWQ6U1NMOjFtO1wiLFxuICAgICAgICBcIiAgc3NsX3Nlc3Npb25fdGltZW91dCAxMG07XCIsXG4gICAgICAgIFwiICBzc2xfY2lwaGVycyBQUk9GSUxFPVNZU1RFTTtcIixcbiAgICAgICAgXCIgIHNzbF9wcmVmZXJfc2VydmVyX2NpcGhlcnMgb247XCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiICBsb2NhdGlvbiAvIHtcIixcbiAgICAgICAgYCAgICBwcm94eV9wYXNzIGh0dHA6Ly9sb2NhbGhvc3Q6JHtSRVNUQVRFX0FETUlOX1BPUlR9O2AsXG4gICAgICAgIFwiICB9XCIsXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpXG4gICAgKTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@restatedev/restate-cdk",
3
3
  "description": "Restate.dev CDK constructs",
4
- "version": "1.1.1",
4
+ "version": "1.2.0",
5
5
  "author": "Restate Developers",
6
6
  "license": "MIT",
7
7
  "email": "code@restate.dev",
@@ -657,7 +657,7 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on
657
657
  set -euf -o pipefail
658
658
 
659
659
  yum install -y npm && npm install -gq
660
- @restatedev/restate@latest
660
+ @restatedev/restate@latest @restatedev/restatectl@latest
661
661
 
662
662
  yum install -y docker
663
663
 
@@ -693,45 +693,18 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on
693
693
  roles = [
694
694
  "worker",
695
695
  "admin",
696
- "metadata-store",
696
+ "metadata-server",
697
+ "log-server",
697
698
  ]
698
699
 
699
700
  node-name = "restate-0"
700
701
 
701
702
  cluster-name = "Restate"
702
703
 
703
- allow-bootstrap = true
704
-
705
- bootstrap-num-partitions = 4
706
-
707
- default-thread-pool-size = 3
708
-
709
- storage-high-priority-bg-threads = 3
710
-
711
- storage-low-priority-bg-threads = 3
704
+ default-num-partitions = 4
712
705
 
713
706
  rocksdb-total-memory-size = "512 MB"
714
707
 
715
- rocksdb-total-memtables-ratio = 0.60
716
-
717
- rocksdb-bg-threads = 3
718
-
719
- rocksdb-high-priority-bg-threads = 3
720
-
721
-
722
- [worker]
723
-
724
- internal-queue-length = 1000
725
-
726
-
727
- [worker.storage]
728
-
729
- rocksdb-max-background-jobs = 3
730
-
731
- rocksdb-statistics-level = "except-detailed-timers"
732
-
733
- num-partitions-to-share-memory-budget = 4
734
-
735
708
 
736
709
  [admin]
737
710
 
@@ -740,28 +713,13 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on
740
713
 
741
714
  [admin.query-engine]
742
715
 
743
- memory-size = "50.0 MB"
744
-
745
- query-parallelism = 4
716
+ memory-size = "256.0 MiB"
746
717
 
747
718
 
748
719
  [ingress]
749
720
 
750
721
  bind-address = "127.0.0.1:8080"
751
722
 
752
- rocksdb-max-background-jobs = 3
753
-
754
- rocksdb-statistics-level = "except-detailed-timers"
755
-
756
- writer-batch-commit-count = 1000
757
-
758
-
759
- [metadata-store.rocksdb]
760
-
761
- rocksdb-max-background-jobs = 1
762
-
763
- rocksdb-statistics-level = "except-detailed-timers"
764
-
765
723
  EOF
766
724
 
767
725
  systemctl start docker.service
@@ -769,19 +727,18 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on
769
727
  if [ "$(docker ps -qa -f name=adot)" ]; then docker stop
770
728
  adot || true; docker rm adot; fi
771
729
 
772
- docker run --name adot --restart on-failure --detach -p
773
- 4317:4317 -p 55680:55680 -p 8889:8888
730
+ docker run --name adot --restart on-failure --detach
731
+ --pull always -p 4317:4317 -p 55680:55680 -p 8889:8888
774
732
  public.ecr.aws/aws-observability/aws-otel-collector:latest
775
733
 
776
734
  if [ "$(docker ps -qa -f name=restate)" ]; then docker
777
735
  stop restate || true; docker rm restate; fi
778
736
 
779
737
  docker run --name restate --restart on-failure --detach
780
- --volume /etc/restate:/etc/restate --volume
781
- /var/restate:/restate-data --network=host -e
782
- RESTATE_OBSERVABILITY__LOG__FORMAT="Json" -e
783
- RUST_LOG="info" -e
784
- RESTATE_OBSERVABILITY__TRACING__ENDPOINT="http://localhost:4317"
738
+ --pull always --volume /etc/restate:/etc/restate
739
+ --volume /var/restate:/restate-data --network=host -e
740
+ RESTATE_LOG_FORMAT="json" -e RUST_LOG="info" -e
741
+ RESTATE_TRACING_ENDPOINT="http://localhost:4317"
785
742
  --log-driver=awslogs --log-opt awslogs-group=
786
743
  - Ref: RestateLogsFD86ECAE
787
744
  - ' docker.io/restatedev/restate:latest --config-file /etc/restate/config.toml'
@@ -997,6 +954,7 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on
997
954
 
998
955
  yum install -y npm && npm install -gq
999
956
  @restatedev/restate@custom-version
957
+ @restatedev/restatectl@custom-version
1000
958
 
1001
959
  yum install -y docker
1002
960
 
@@ -1032,45 +990,18 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on
1032
990
  roles = [
1033
991
  "worker",
1034
992
  "admin",
1035
- "metadata-store",
993
+ "metadata-server",
994
+ "log-server",
1036
995
  ]
1037
996
 
1038
997
  node-name = "restate-0"
1039
998
 
1040
999
  cluster-name = "Restate"
1041
1000
 
1042
- allow-bootstrap = true
1043
-
1044
- bootstrap-num-partitions = 4
1045
-
1046
- default-thread-pool-size = 3
1047
-
1048
- storage-high-priority-bg-threads = 3
1049
-
1050
- storage-low-priority-bg-threads = 3
1001
+ default-num-partitions = 4
1051
1002
 
1052
1003
  rocksdb-total-memory-size = "512 MB"
1053
1004
 
1054
- rocksdb-total-memtables-ratio = 0.60
1055
-
1056
- rocksdb-bg-threads = 3
1057
-
1058
- rocksdb-high-priority-bg-threads = 3
1059
-
1060
-
1061
- [worker]
1062
-
1063
- internal-queue-length = 1000
1064
-
1065
-
1066
- [worker.storage]
1067
-
1068
- rocksdb-max-background-jobs = 3
1069
-
1070
- rocksdb-statistics-level = "except-detailed-timers"
1071
-
1072
- num-partitions-to-share-memory-budget = 4
1073
-
1074
1005
 
1075
1006
  [admin]
1076
1007
 
@@ -1079,28 +1010,13 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on
1079
1010
 
1080
1011
  [admin.query-engine]
1081
1012
 
1082
- memory-size = "50.0 MB"
1083
-
1084
- query-parallelism = 4
1013
+ memory-size = "256.0 MiB"
1085
1014
 
1086
1015
 
1087
1016
  [ingress]
1088
1017
 
1089
1018
  bind-address = "0.0.0.0:8080"
1090
1019
 
1091
- rocksdb-max-background-jobs = 3
1092
-
1093
- rocksdb-statistics-level = "except-detailed-timers"
1094
-
1095
- writer-batch-commit-count = 1000
1096
-
1097
-
1098
- [metadata-store.rocksdb]
1099
-
1100
- rocksdb-max-background-jobs = 1
1101
-
1102
- rocksdb-statistics-level = "except-detailed-timers"
1103
-
1104
1020
  EOF
1105
1021
 
1106
1022
  systemctl start docker.service
@@ -1108,20 +1024,18 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on
1108
1024
  if [ "$(docker ps -qa -f name=adot)" ]; then docker stop
1109
1025
  adot || true; docker rm adot; fi
1110
1026
 
1111
- docker run --name adot --restart on-failure --detach -p
1112
- 4317:4317 -p 55680:55680 -p 8889:8888
1027
+ docker run --name adot --restart on-failure --detach
1028
+ --pull always -p 4317:4317 -p 55680:55680 -p 8889:8888
1113
1029
  public.ecr.aws/aws-observability/aws-otel-collector:latest
1114
1030
 
1115
1031
  if [ "$(docker ps -qa -f name=restate)" ]; then docker
1116
1032
  stop restate || true; docker rm restate; fi
1117
1033
 
1118
1034
  docker run --name restate --restart on-failure --detach
1119
- --volume /etc/restate:/etc/restate --volume
1120
- /var/restate:/restate-data --network=host -e
1121
- RESTATE_OBSERVABILITY__LOG__FORMAT="Json" -e
1122
- RUST_LOG="info" -e
1123
- RESTATE_OBSERVABILITY__TRACING__ENDPOINT="http://localhost:4317"
1124
- -e
1035
+ --pull always --volume /etc/restate:/etc/restate
1036
+ --volume /var/restate:/restate-data --network=host -e
1037
+ RESTATE_LOG_FORMAT="json" -e RUST_LOG="info" -e
1038
+ RESTATE_TRACING_ENDPOINT="http://localhost:4317" -e
1125
1039
  RESTATE_INGRESS__ADVERTISED_INGRESS_ENDPOINT="http://restate-ingress"
1126
1040
  --log-driver=awslogs --log-opt awslogs-group=
1127
1041
  - Ref: RestateLogsFD86ECAE
File without changes