projen 0.101.5 → 0.101.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +5135 -463
- package/lib/ai-instructions.js +2 -2
- package/lib/awscdk/auto-discover.js +6 -6
- package/lib/awscdk/awscdk-app-java.js +1 -1
- package/lib/awscdk/awscdk-app-py.js +1 -1
- package/lib/awscdk/awscdk-app-ts.js +1 -1
- package/lib/awscdk/awscdk-construct.js +1 -1
- package/lib/awscdk/awscdk-deps-java.js +1 -1
- package/lib/awscdk/awscdk-deps-js.js +1 -1
- package/lib/awscdk/awscdk-deps-py.js +1 -1
- package/lib/awscdk/awscdk-deps.js +1 -1
- package/lib/awscdk/cdk-config.js +3 -3
- package/lib/awscdk/cdk-tasks.js +1 -1
- package/lib/awscdk/integration-test.js +1 -1
- package/lib/awscdk/lambda-extension.js +1 -1
- package/lib/awscdk/lambda-function.js +2 -2
- package/lib/build/build-workflow.js +1 -1
- package/lib/cdk/auto-discover-base.js +2 -2
- package/lib/cdk/construct-lib.js +1 -1
- package/lib/cdk/integration-test-base.js +1 -1
- package/lib/cdk/jsii-build.js +1 -1
- package/lib/cdk/jsii-docgen.js +1 -1
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/auto-discover.js +2 -2
- package/lib/cdk8s/cdk8s-app-py.js +1 -1
- package/lib/cdk8s/cdk8s-app-ts.js +1 -1
- package/lib/cdk8s/cdk8s-construct.js +1 -1
- package/lib/cdk8s/cdk8s-deps-py.js +1 -1
- package/lib/cdk8s/cdk8s-deps.js +1 -1
- package/lib/cdk8s/integration-test.js +1 -1
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/circleci/circleci.js +1 -1
- package/lib/cli/util.js +2 -2
- package/lib/component.js +2 -2
- package/lib/dependencies.js +1 -1
- package/lib/dev-env.js +1 -1
- package/lib/docker-compose/docker-compose-service.js +1 -1
- package/lib/docker-compose/docker-compose.js +1 -1
- package/lib/file.js +1 -1
- package/lib/gitattributes.js +1 -1
- package/lib/github/actions-provider.js +1 -1
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +1 -1
- package/lib/github/auto-queue.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/dependency-review.js +1 -1
- package/lib/github/github-credentials.js +1 -1
- package/lib/github/github-project.js +1 -1
- package/lib/github/github.js +1 -1
- package/lib/github/merge-queue.js +1 -1
- package/lib/github/mergify.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-backport.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow-job.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflow-actions.js +1 -1
- package/lib/github/workflow-jobs.js +1 -1
- package/lib/github/workflow-steps.js +1 -1
- package/lib/github/workflows-model.d.ts +59 -0
- package/lib/github/workflows-model.js +1 -1
- package/lib/github/workflows.js +7 -2
- package/lib/gitlab/configuration.js +1 -1
- package/lib/gitlab/gitlab-configuration.js +1 -1
- package/lib/gitlab/nested-configuration.js +1 -1
- package/lib/gitpod.js +1 -1
- package/lib/ignore-file.js +1 -1
- package/lib/ini.js +1 -1
- package/lib/java/java-project.js +1 -1
- package/lib/java/junit.js +1 -1
- package/lib/java/maven-compile.js +1 -1
- package/lib/java/maven-packaging.js +1 -1
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.js +2 -2
- package/lib/java/projenrc.js +1 -1
- package/lib/javascript/biome/biome.js +1 -1
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.js +1 -1
- package/lib/javascript/index.d.ts +2 -0
- package/lib/javascript/index.js +3 -1
- package/lib/javascript/jest.js +4 -4
- package/lib/javascript/license-checker.js +1 -1
- package/lib/javascript/node-package.d.ts +113 -0
- package/lib/javascript/node-package.js +159 -3
- package/lib/javascript/node-project.js +1 -1
- package/lib/javascript/npm-config.js +1 -1
- package/lib/javascript/pnpm-workspace-config.d.ts +1256 -0
- package/lib/javascript/pnpm-workspace-config.js +492 -0
- package/lib/javascript/pnpm-workspace.d.ts +23 -0
- package/lib/javascript/pnpm-workspace.js +34 -0
- package/lib/javascript/prettier.js +1 -1
- package/lib/javascript/projenrc.js +1 -1
- package/lib/javascript/typescript-config.js +2 -2
- package/lib/javascript/upgrade-dependencies.js +2 -2
- package/lib/javascript/yarnrc.js +1 -1
- package/lib/json-patch.js +1 -1
- package/lib/json.js +1 -1
- package/lib/license.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/makefile.js +1 -1
- package/lib/object-file.js +1 -1
- package/lib/project-build.js +1 -1
- package/lib/project-tree.js +1 -1
- package/lib/project.js +1 -1
- package/lib/projects.js +1 -1
- package/lib/projenrc-json.js +1 -1
- package/lib/projenrc.js +1 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.js +2 -2
- package/lib/python/projenrc.js +1 -1
- package/lib/python/pyproject-toml-file.js +1 -1
- package/lib/python/pytest-sample.js +1 -1
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-project.js +1 -1
- package/lib/python/python-sample.js +1 -1
- package/lib/python/requirements-file.js +1 -1
- package/lib/python/setuppy.js +1 -1
- package/lib/python/setuptools.js +1 -1
- package/lib/python/uv.js +1 -1
- package/lib/python/venv.js +1 -1
- package/lib/readme.js +1 -1
- package/lib/release/publisher.js +1 -1
- package/lib/release/release-trigger.js +1 -1
- package/lib/release/release.js +1 -1
- package/lib/renovatebot.js +1 -1
- package/lib/run-task.cjs +9 -1
- package/lib/sample-file.js +2 -2
- package/lib/script-runner.js +1 -1
- package/lib/source-code.js +1 -1
- package/lib/task-shell.js +1 -1
- package/lib/task.js +1 -1
- package/lib/tasks.js +1 -1
- package/lib/testing.js +1 -1
- package/lib/textfile.js +1 -1
- package/lib/toml.js +1 -1
- package/lib/typescript/projenrc-ts.js +1 -1
- package/lib/typescript/projenrc.js +1 -1
- package/lib/typescript/typescript-runner.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +5 -5
- package/lib/version.js +2 -2
- package/lib/vscode/devcontainer.js +1 -1
- package/lib/vscode/extensions.js +1 -1
- package/lib/vscode/launch-config.js +1 -1
- package/lib/vscode/settings.js +1 -1
- package/lib/vscode/vscode.js +1 -1
- package/lib/web/next.js +3 -3
- package/lib/web/postcss.js +1 -1
- package/lib/web/react.js +3 -3
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +9 -1
|
@@ -21,7 +21,7 @@ const vscode_1 = require("../vscode");
|
|
|
21
21
|
* "engines" can be used to implement our CI/CD solutions.
|
|
22
22
|
*/
|
|
23
23
|
class GitHubProject extends project_1.Project {
|
|
24
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHubProject", version: "0.101.
|
|
24
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHubProject", version: "0.101.7" };
|
|
25
25
|
/**
|
|
26
26
|
* Access all github components.
|
|
27
27
|
*
|
package/lib/github/github.js
CHANGED
|
@@ -15,7 +15,7 @@ const workflow_steps_1 = require("./workflow-steps");
|
|
|
15
15
|
const workflows_1 = require("./workflows");
|
|
16
16
|
const component_1 = require("../component");
|
|
17
17
|
class GitHub extends component_1.Component {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHub", version: "0.101.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHub", version: "0.101.7" };
|
|
19
19
|
/**
|
|
20
20
|
* Returns the `GitHub` component of a project or `undefined` if the project
|
|
21
21
|
* does not have a GitHub component.
|
|
@@ -10,7 +10,7 @@ const github_1 = require("./github");
|
|
|
10
10
|
*/
|
|
11
11
|
class MergeQueue extends component_1.Component {
|
|
12
12
|
options;
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.MergeQueue", version: "0.101.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.MergeQueue", version: "0.101.7" };
|
|
14
14
|
constructor(scope, options = {}) {
|
|
15
15
|
super(scope);
|
|
16
16
|
this.options = options;
|
package/lib/github/mergify.js
CHANGED
|
@@ -6,7 +6,7 @@ const component_1 = require("../component");
|
|
|
6
6
|
const util_1 = require("../util");
|
|
7
7
|
const yaml_1 = require("../yaml");
|
|
8
8
|
class Mergify extends component_1.Component {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Mergify", version: "0.101.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Mergify", version: "0.101.7" };
|
|
10
10
|
rules = new Array();
|
|
11
11
|
queues = new Array();
|
|
12
12
|
// The actual YAML file will only be created if at least 1 rule is added.
|
|
@@ -7,7 +7,7 @@ const textfile_1 = require("../textfile");
|
|
|
7
7
|
* Template for GitHub pull requests.
|
|
8
8
|
*/
|
|
9
9
|
class PullRequestTemplate extends textfile_1.TextFile {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestTemplate", version: "0.101.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestTemplate", version: "0.101.7" };
|
|
11
11
|
/**
|
|
12
12
|
* Returns the `PullRequestTemplate` instance associated with a project or `undefined` if
|
|
13
13
|
* there is no PullRequestTemplate.
|
|
@@ -9,7 +9,7 @@ const component_1 = require("../component");
|
|
|
9
9
|
const json_1 = require("../json");
|
|
10
10
|
const release_1 = require("../release");
|
|
11
11
|
class PullRequestBackport extends component_1.Component {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestBackport", version: "0.101.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestBackport", version: "0.101.7" };
|
|
13
13
|
file;
|
|
14
14
|
workflow;
|
|
15
15
|
constructor(scope, options = {}) {
|
|
@@ -13,7 +13,7 @@ const runner_options_1 = require("../runner-options");
|
|
|
13
13
|
class PullRequestLint extends component_1.Component {
|
|
14
14
|
github;
|
|
15
15
|
options;
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestLint", version: "0.101.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestLint", version: "0.101.7" };
|
|
17
17
|
constructor(github, options = {}) {
|
|
18
18
|
super(github.project);
|
|
19
19
|
this.github = github;
|
package/lib/github/stale.js
CHANGED
|
@@ -18,7 +18,7 @@ const runner_options_1 = require("../runner-options");
|
|
|
18
18
|
* @see https://github.com/actions/stale
|
|
19
19
|
*/
|
|
20
20
|
class Stale extends component_1.Component {
|
|
21
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Stale", version: "0.101.
|
|
21
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Stale", version: "0.101.7" };
|
|
22
22
|
constructor(github, options = {}) {
|
|
23
23
|
super(github.project);
|
|
24
24
|
const stale = github.addWorkflow("stale");
|
|
@@ -13,7 +13,7 @@ const util_1 = require("./private/util");
|
|
|
13
13
|
* @implements {Job}
|
|
14
14
|
*/
|
|
15
15
|
class TaskWorkflowJob extends component_1.Component {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflowJob", version: "0.101.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflowJob", version: "0.101.7" };
|
|
17
17
|
runsOn;
|
|
18
18
|
runsOnGroup;
|
|
19
19
|
steps;
|
|
@@ -9,7 +9,7 @@ const DEFAULT_JOB_ID = "build";
|
|
|
9
9
|
* A GitHub workflow for common build tasks within a project.
|
|
10
10
|
*/
|
|
11
11
|
class TaskWorkflow extends workflows_1.GithubWorkflow {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflow", version: "0.101.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflow", version: "0.101.7" };
|
|
13
13
|
jobId;
|
|
14
14
|
artifactsDirectory;
|
|
15
15
|
constructor(github, options) {
|
|
@@ -15,7 +15,7 @@ const RUNNER_TEMP = "${{ runner.temp }}";
|
|
|
15
15
|
* A set of utility functions for creating GitHub actions in workflows.
|
|
16
16
|
*/
|
|
17
17
|
class WorkflowActions {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowActions", version: "0.101.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowActions", version: "0.101.7" };
|
|
19
19
|
/**
|
|
20
20
|
* Creates a .patch file from the current git diff and uploads it as an
|
|
21
21
|
* artifact. Use `checkoutWithPatch` to download and apply in another job.
|
|
@@ -10,7 +10,7 @@ const runner_options_1 = require("../runner-options");
|
|
|
10
10
|
* A set of utility functions for creating jobs in GitHub Workflows.
|
|
11
11
|
*/
|
|
12
12
|
class WorkflowJobs {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowJobs", version: "0.101.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowJobs", version: "0.101.7" };
|
|
14
14
|
/**
|
|
15
15
|
* Creates a pull request with the changes of a patch file.
|
|
16
16
|
*
|
|
@@ -25,7 +25,7 @@ var CheckoutSubmodules;
|
|
|
25
25
|
* A collection of very commonly used, individual, GitHub Workflow Job steps.
|
|
26
26
|
*/
|
|
27
27
|
class WorkflowSteps {
|
|
28
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowSteps", version: "0.101.
|
|
28
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowSteps", version: "0.101.7" };
|
|
29
29
|
/**
|
|
30
30
|
* Checks out a repository.
|
|
31
31
|
*
|
|
@@ -449,6 +449,65 @@ export interface JobStepConfiguration extends StepConfiguration {
|
|
|
449
449
|
* The maximum number of minutes to run the step before killing the process.
|
|
450
450
|
*/
|
|
451
451
|
readonly timeoutMinutes?: number;
|
|
452
|
+
/**
|
|
453
|
+
* Runs a step asynchronously so the job continues to the next step without
|
|
454
|
+
* waiting for it to finish. Use for long-running processes, such as
|
|
455
|
+
* databases, servers, or monitoring tasks, that need to run alongside other
|
|
456
|
+
* steps.
|
|
457
|
+
*
|
|
458
|
+
* Synchronize with background steps later using `wait` or `waitAll`, or
|
|
459
|
+
* stop them with `cancel`. Give the step an `id` so it can be referenced.
|
|
460
|
+
*
|
|
461
|
+
* A maximum of 10 background steps can run concurrently in a single job;
|
|
462
|
+
* additional background steps are queued until a slot is free.
|
|
463
|
+
*
|
|
464
|
+
* @see https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsbackground
|
|
465
|
+
*/
|
|
466
|
+
readonly background?: boolean;
|
|
467
|
+
/**
|
|
468
|
+
* Pauses the job until one or more background steps complete. Provide the
|
|
469
|
+
* `id`s of the background steps to wait for.
|
|
470
|
+
*
|
|
471
|
+
* This step performs no work itself; it only blocks until the referenced
|
|
472
|
+
* background steps finish. If a referenced background step failed, the
|
|
473
|
+
* `wait` step fails too.
|
|
474
|
+
*
|
|
475
|
+
* @see https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepswait
|
|
476
|
+
*/
|
|
477
|
+
readonly wait?: string[];
|
|
478
|
+
/**
|
|
479
|
+
* Pauses the job until all active background steps complete. Fails if any
|
|
480
|
+
* of the background steps it waits on failed, unless `continueOnError` is
|
|
481
|
+
* set on this step.
|
|
482
|
+
*
|
|
483
|
+
* @see https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepswait-all
|
|
484
|
+
*/
|
|
485
|
+
readonly waitAll?: boolean;
|
|
486
|
+
/**
|
|
487
|
+
* Gracefully terminates a running background step, referenced by its `id`.
|
|
488
|
+
* The runner sends the step's process a termination signal (SIGTERM) so it
|
|
489
|
+
* can clean up, and forcibly stops it (SIGKILL) if it does not exit within
|
|
490
|
+
* a short grace period.
|
|
491
|
+
*
|
|
492
|
+
* @see https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepscancel
|
|
493
|
+
*/
|
|
494
|
+
readonly cancel?: string;
|
|
495
|
+
/**
|
|
496
|
+
* Runs a group of steps concurrently, then waits for all of them to finish
|
|
497
|
+
* before continuing. This is shorthand for declaring each step with
|
|
498
|
+
* `background: true` followed by a `wait` step.
|
|
499
|
+
*
|
|
500
|
+
* Use this when you have a self-contained group of independent steps that
|
|
501
|
+
* can all run at the same time and don't need to be referenced
|
|
502
|
+
* individually. Use `background` instead when you need finer control, such
|
|
503
|
+
* as starting a long-running process that stays up while later steps run.
|
|
504
|
+
*
|
|
505
|
+
* Each step in the group is subject to the same 10-step concurrency limit
|
|
506
|
+
* as other background steps. Cannot be used inside a composite action.
|
|
507
|
+
*
|
|
508
|
+
* @see https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsparallel
|
|
509
|
+
*/
|
|
510
|
+
readonly parallel?: JobStep[];
|
|
452
511
|
}
|
|
453
512
|
/**
|
|
454
513
|
* JobSteps run as part of a GitHub Workflow Job.
|
|
@@ -31,4 +31,4 @@ var AppPermission;
|
|
|
31
31
|
AppPermission["ADMIN"] = "admin";
|
|
32
32
|
})(AppPermission || (exports.AppPermission = AppPermission = {}));
|
|
33
33
|
//#endregion
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVGQUF1Rjs7O0FBb1Z2Rjs7R0FFRztBQUNILElBQVksYUFTWDtBQVRELFdBQVksYUFBYTtJQUN2Qix1QkFBdUI7SUFDdkIsOEJBQWEsQ0FBQTtJQUViLHdCQUF3QjtJQUN4QixnQ0FBZSxDQUFBO0lBRWYsdUJBQXVCO0lBQ3ZCLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBVFcsYUFBYSw2QkFBYixhQUFhLFFBU3hCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGFBV1g7QUFYRCxXQUFZLGFBQWE7SUFDdkIsd0JBQXdCO0lBQ3hCLDhCQUFhLENBQUE7SUFDYix3QkFBd0I7SUFDeEIsZ0NBQWUsQ0FBQTtJQUNmOzs7O09BSUc7SUFDSCxnQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFYVyxhQUFhLDZCQUFiLGFBQWEsUUFXeEI7QUF3K0JELFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnNcblxuaW1wb3J0IHR5cGUgeyBHcm91cFJ1bm5lck9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25Kb2JEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBqb2IgZGlzcGxheWVkIG9uIEdpdEh1Yi5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgYW55IGpvYnMgdGhhdCBtdXN0IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSBiZWZvcmUgdGhpcyBqb2Igd2lsbFxuICAgKiBydW4uIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLiBJZiBhIGpvYiBmYWlscywgYWxsIGpvYnNcbiAgICogdGhhdCBuZWVkIGl0IGFyZSBza2lwcGVkIHVubGVzcyB0aGUgam9icyB1c2UgYSBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAqIHRoYXQgY2F1c2VzIHRoZSBqb2IgdG8gY29udGludWUuXG4gICAqL1xuICByZWFkb25seSBuZWVkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIG1vZGlmeSB0aGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBncmFudGVkIHRvIHRoZSBHSVRIVUJfVE9LRU4sIGFkZGluZ1xuICAgKiBvciByZW1vdmluZyBhY2Nlc3MgYXMgcmVxdWlyZWQsIHNvIHRoYXQgeW91IG9ubHkgYWxsb3cgdGhlIG1pbmltdW0gcmVxdWlyZWRcbiAgICogYWNjZXNzLlxuICAgKlxuICAgKiBVc2UgYHsgY29udGVudHM6IFJFQUQgfWAgaWYgeW91ciBqb2Igb25seSBuZWVkcyB0byBjbG9uZSBjb2RlLlxuICAgKlxuICAgKiBUaGlzIGlzIGludGVudGlvbmFsbHkgYSByZXF1aXJlZCBmaWVsZCBzaW5jZSBpdCBpcyByZXF1aXJlZCBpbiBvcmRlciB0b1xuICAgKiBhbGxvdyB3b3JrZmxvd3MgdG8gcnVuIGluIEdpdEh1YiByZXBvc2l0b3JpZXMgd2l0aCByZXN0cmljdGVkIGRlZmF1bHRcbiAgICogYWNjZXNzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL2F1dGhlbnRpY2F0aW9uLWluLWEtd29ya2Zsb3cjcGVybWlzc2lvbnMtZm9yLXRoZS1naXRodWJfdG9rZW5cbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zOiBKb2JQZXJtaXNzaW9ucztcblxuICAvKipcbiAgICogQ29uY3VycmVuY3kgZW5zdXJlcyB0aGF0IG9ubHkgYSBzaW5nbGUgam9iIG9yIHdvcmtmbG93IHVzaW5nIHRoZSBzYW1lXG4gICAqIGNvbmN1cnJlbmN5IGdyb3VwIHdpbGwgcnVuIGF0IGEgdGltZS4gQSBjb25jdXJyZW5jeSBncm91cCBjYW4gYmUgYW55XG4gICAqIHN0cmluZyBvciBleHByZXNzaW9uLiBUaGUgZXhwcmVzc2lvbiBjYW4gdXNlIGFueSBjb250ZXh0IGV4Y2VwdCBmb3IgdGhlXG4gICAqIHNlY3JldHMgY29udGV4dC5cbiAgICpcbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVuY3k/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgaWYgY29uZGl0aW9uYWwgdG8gcHJldmVudCBhIGpvYiBmcm9tIHJ1bm5pbmcgdW5sZXNzIGFcbiAgICogY29uZGl0aW9uIGlzIG1ldC4gWW91IGNhbiB1c2UgYW55IHN1cHBvcnRlZCBjb250ZXh0IGFuZCBleHByZXNzaW9uIHRvXG4gICAqIGNyZWF0ZSBhIGNvbmRpdGlvbmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgaWY/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RyYXRlZ3kgY3JlYXRlcyBhIGJ1aWxkIG1hdHJpeCBmb3IgeW91ciBqb2JzLiBZb3UgY2FuIGRlZmluZSBkaWZmZXJlbnRcbiAgICogdmFyaWF0aW9ucyB0byBydW4gZWFjaCBqb2IgaW4uXG4gICAqL1xuICByZWFkb25seSBzdHJhdGVneT86IEpvYlN0cmF0ZWd5O1xufVxuXG4vKipcbiAqIEEgR2l0SHViIFdvcmtmbG93IEpvYiBjYWxsaW5nIGEgcmV1c2FibGUgd29ya2Zsb3dcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3cgZXh0ZW5kcyBDb21tb25Kb2JEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBhbmQgdmVyc2lvbiBvZiBhIHJldXNhYmxlIHdvcmtmbG93IGZpbGUgdG8gcnVuIGFzIGEgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGEgam9iIGlzIHVzZWQgdG8gY2FsbCBhIHJldXNhYmxlIHdvcmtmbG93LCB5b3UgY2FuIHVzZSB3aXRoIHRvXG4gICAqIHByb3ZpZGUgYSBtYXAgb2YgaW5wdXRzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgY2FsbGVkIHdvcmtmbG93LlxuICAgKlxuICAgKiBBbGxvd2VkIGV4cHJlc3Npb24gY29udGV4dHM6IGBnaXRodWJgLCBhbmQgYG5lZWRzYC5cbiAgICovXG4gIHJlYWRvbmx5IHdpdGg/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuPjtcblxuICAvKipcbiAgICogV2hlbiBhIGpvYiBpcyB1c2VkIHRvIGNhbGwgYSByZXVzYWJsZSB3b3JrZmxvdywgeW91IGNhbiB1c2Ugc2VjcmV0cyB0b1xuICAgKiBwcm92aWRlIGEgbWFwIG9mIHNlY3JldHMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBjYWxsZWQgd29ya2Zsb3cuXG4gICAqXG4gICAqIFVzZSB0aGUgJ2luaGVyaXQnIGtleXdvcmQgdG8gcGFzcyBhbGwgdGhlIGNhbGxpbmcgd29ya2Zsb3cncyBzZWNyZXRzIHRvIHRoZSBjYWxsZWQgd29ya2Zsb3dcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHM/OiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEEgR2l0SHViIFdvcmtmbG93IGpvYiBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYiBleHRlbmRzIENvbW1vbkpvYkRlZmluaXRpb24ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbWFjaGluZSB0byBydW4gdGhlIGpvYiBvbi4gVGhlIG1hY2hpbmUgY2FuIGJlIGVpdGhlciBhXG4gICAqIEdpdEh1Yi1ob3N0ZWQgcnVubmVyIG9yIGEgc2VsZi1ob3N0ZWQgcnVubmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZSBbXCJ1YnVudHUtbGF0ZXN0XCJdXG4gICAqL1xuICByZWFkb25seSBydW5zT24/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogR2l0aHViIFJ1bm5lciBHcm91cCBzZWxlY3Rpb24gb3B0aW9uc1xuICAgKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIHRhcmdldCBSdW5uZXIgR3JvdXAgYnkgbmFtZSBhbmQvb3IgbGFiZWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBib3RoIGBydW5zT25gIGFuZCBgcnVuc09uR3JvdXBgIGFyZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnNPbkdyb3VwPzogR3JvdXBSdW5uZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBIGpvYiBjb250YWlucyBhIHNlcXVlbmNlIG9mIHRhc2tzIGNhbGxlZCBzdGVwcy4gU3RlcHMgY2FuIHJ1biBjb21tYW5kcyxcbiAgICogcnVuIHNldHVwIHRhc2tzLCBvciBydW4gYW4gYWN0aW9uIGluIHlvdXIgcmVwb3NpdG9yeSwgYSBwdWJsaWMgcmVwb3NpdG9yeSxcbiAgICogb3IgYW4gYWN0aW9uIHB1Ymxpc2hlZCBpbiBhIERvY2tlciByZWdpc3RyeS4gTm90IGFsbCBzdGVwcyBydW4gYWN0aW9ucyxcbiAgICogYnV0IGFsbCBhY3Rpb25zIHJ1biBhcyBhIHN0ZXAuIEVhY2ggc3RlcCBydW5zIGluIGl0cyBvd24gcHJvY2VzcyBpbiB0aGVcbiAgICogcnVubmVyIGVudmlyb25tZW50IGFuZCBoYXMgYWNjZXNzIHRvIHRoZSB3b3Jrc3BhY2UgYW5kIGZpbGVzeXN0ZW0uXG4gICAqIEJlY2F1c2Ugc3RlcHMgcnVuIGluIHRoZWlyIG93biBwcm9jZXNzLCBjaGFuZ2VzIHRvIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiBhcmUgbm90IHByZXNlcnZlZCBiZXR3ZWVuIHN0ZXBzLiBHaXRIdWIgcHJvdmlkZXMgYnVpbHQtaW4gc3RlcHMgdG8gc2V0IHVwXG4gICAqIGFuZCBjb21wbGV0ZSBhIGpvYi5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBzOiBKb2JTdGVwW107XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB0aGF0IHRoZSBqb2IgcmVmZXJlbmNlcy4gQWxsIGVudmlyb25tZW50IHByb3RlY3Rpb24gcnVsZXNcbiAgICogbXVzdCBwYXNzIGJlZm9yZSBhIGpvYiByZWZlcmVuY2luZyB0aGUgZW52aXJvbm1lbnQgaXMgc2VudCB0byBhIHJ1bm5lci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS9lbnZpcm9ubWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogdW5rbm93bjtcblxuICAvKipcbiAgICogQSBtYXAgb2Ygb3V0cHV0cyBmb3IgYSBqb2IuIEpvYiBvdXRwdXRzIGFyZSBhdmFpbGFibGUgdG8gYWxsIGRvd25zdHJlYW1cbiAgICogam9icyB0aGF0IGRlcGVuZCBvbiB0aGlzIGpvYi5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM/OiBSZWNvcmQ8c3RyaW5nLCBKb2JTdGVwT3V0cHV0PjtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYXJlIGF2YWlsYWJsZSB0byBhbGwgc3RlcHMgaW4gdGhlXG4gICAqIGpvYi4gWW91IGNhbiBhbHNvIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBlbnRpcmUgd29ya2Zsb3cgb3IgYW5cbiAgICogaW5kaXZpZHVhbCBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IHdpbGwgYXBwbHkgdG8gYWxsIHN0ZXBzIGluIHRoZSBqb2IuIFlvdVxuICAgKiBjYW4gYWxzbyBzZXQgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGVudGlyZSB3b3JrZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRzPzogSm9iRGVmYXVsdHM7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaW51dGVzIHRvIGxldCBhIGpvYiBydW4gYmVmb3JlIEdpdEh1YlxuICAgKiBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDM2MFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dE1pbnV0ZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFByZXZlbnRzIGEgd29ya2Zsb3cgcnVuIGZyb20gZmFpbGluZyB3aGVuIGEgam9iIGZhaWxzLiBTZXQgdG8gdHJ1ZSB0b1xuICAgKiBhbGxvdyBhIHdvcmtmbG93IHJ1biB0byBwYXNzIHdoZW4gdGhpcyBqb2IgZmFpbHMuXG4gICAqL1xuICByZWFkb25seSBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciB0byBydW4gYW55IHN0ZXBzIGluIGEgam9iIHRoYXQgZG9uJ3QgYWxyZWFkeSBzcGVjaWZ5IGFcbiAgICogY29udGFpbmVyLiBJZiB5b3UgaGF2ZSBzdGVwcyB0aGF0IHVzZSBib3RoIHNjcmlwdCBhbmQgY29udGFpbmVyIGFjdGlvbnMsXG4gICAqIHRoZSBjb250YWluZXIgYWN0aW9ucyB3aWxsIHJ1biBhcyBzaWJsaW5nIGNvbnRhaW5lcnMgb24gdGhlIHNhbWUgbmV0d29ya1xuICAgKiB3aXRoIHRoZSBzYW1lIHZvbHVtZSBtb3VudHMuXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXI/OiBDb250YWluZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGhvc3Qgc2VydmljZSBjb250YWluZXJzIGZvciBhIGpvYiBpbiBhIHdvcmtmbG93LiBTZXJ2aWNlXG4gICAqIGNvbnRhaW5lcnMgYXJlIHVzZWZ1bCBmb3IgY3JlYXRpbmcgZGF0YWJhc2VzIG9yIGNhY2hlIHNlcnZpY2VzIGxpa2UgUmVkaXMuXG4gICAqIFRoZSBydW5uZXIgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgRG9ja2VyIG5ldHdvcmsgYW5kIG1hbmFnZXMgdGhlIGxpZmVcbiAgICogY3ljbGUgb2YgdGhlIHNlcnZpY2UgY29udGFpbmVycy5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VzPzogUmVjb3JkPHN0cmluZywgQ29udGFpbmVyT3B0aW9ucz47XG5cbiAgLyoqXG4gICAqIFRvb2xzIHJlcXVpcmVkIGZvciB0aGlzIGpvYi4gVHJhbnNsYXRlcyBpbnRvIGBhY3Rpb25zL3NldHVwLXh4eGAgc3RlcHMgYXRcbiAgICogdGhlIGJlZ2lubmluZyBvZiB0aGUgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgdG9vbHM/OiBUb29scztcbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgdG9vbHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbHMge1xuICAvKipcbiAgICogU2V0dXAgamF2YS5cbiAgICogQGRlZmF1bHQgLSBub3QgaW5zdGFsbGVkXG4gICAqL1xuICByZWFkb25seSBqYXZhPzogSmF2YVRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgcHl0aG9uLlxuICAgKiBAZGVmYXVsdCAtIG5vdCBpbnN0YWxsZWRcbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbj86IFB5dGhvblRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgZ29sYW5nLlxuICAgKiBAZGVmYXVsdCAtIG5vdCBpbnN0YWxsZWRcbiAgICovXG4gIHJlYWRvbmx5IGdvPzogVG9vbFJlcXVpcmVtZW50O1xuXG4gIC8qKlxuICAgKiBTZXR1cCBub2RlLmpzXG4gICAqIEBkZWZhdWx0IC0gbm90IGluc3RhbGxlZFxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZT86IFRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgLk5FVCBDb3JlXG4gICAqIEBkZWZhdWx0IC0gbm90IGluc3RhbGxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZG90bmV0PzogVG9vbFJlcXVpcmVtZW50O1xufVxuXG4vKipcbiAqIFZlcnNpb24gcmVxdWlyZW1lbnQgZm9yIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xSZXF1aXJlbWVudCB7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGF1dG9tYXRpYyBkZXBlbmRlbmN5IGNhY2hpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjYWNoZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVmVyc2lvbiByZXF1aXJlbWVudCBmb3IgUHl0aG9uIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvblRvb2xSZXF1aXJlbWVudCBleHRlbmRzIFRvb2xSZXF1aXJlbWVudCB7XG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZSBmb3IgY2FjaGluZyAoZS5nLiBcInBpcFwiLCBcInBpcGVudlwiLCBcInBvZXRyeVwiKS5cbiAgICogUmVxdWlyZWQgd2hlbiBgY2FjaGVgIGlzIHRydWUuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBWZXJzaW9uIHJlcXVpcmVtZW50IGZvciBKYXZhIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEphdmFUb29sUmVxdWlyZW1lbnQgZXh0ZW5kcyBUb29sUmVxdWlyZW1lbnQge1xuICAvKipcbiAgICogVGhlIEpESyBkaXN0cmlidXRpb24gdG8gdXNlLlxuICAgKiBAZGVmYXVsdCBcImNvcnJldHRvXCJcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlIGZvciBjYWNoaW5nIChlLmcuIFwibWF2ZW5cIiwgXCJncmFkbGVcIiwgXCJzYnRcIikuXG4gICAqIFJlcXVpcmVkIHdoZW4gYGNhY2hlYCBpcyB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU1hbmFnZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGF2YWlsYWJsZSBzY29wZXMgYW5kIGFjY2VzcyB2YWx1ZXMgZm9yIHdvcmtmbG93IHBlcm1pc3Npb25zLiBJZiB5b3VcbiAqIHNwZWNpZnkgdGhlIGFjY2VzcyBmb3IgYW55IG9mIHRoZXNlIHNjb3BlcywgYWxsIHRob3NlIHRoYXQgYXJlIG5vdFxuICogc3BlY2lmaWVkIGFyZSBzZXQgdG8gYEpvYlBlcm1pc3Npb24uTk9ORWAsIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3JcbiAqIHdoZW4gbm9uZSBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3dyaXRpbmctd29ya2Zsb3dzL2Nob29zaW5nLXdoYXQteW91ci13b3JrZmxvdy1kb2VzL2NvbnRyb2xsaW5nLXBlcm1pc3Npb25zLWZvci1naXRodWJfdG9rZW4jZGVmaW5pbmctYWNjZXNzLWZvci10aGUtZ2l0aHViX3Rva2VuLXBlcm1pc3Npb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iUGVybWlzc2lvbnMge1xuICByZWFkb25seSBhY3Rpb25zPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgYXR0ZXN0YXRpb25zPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgY2hlY2tzPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgY29udGVudHM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBkZXBsb3ltZW50cz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGlkVG9rZW4/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBpc3N1ZXM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBtb2RlbHM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBkaXNjdXNzaW9ucz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcGFnZXM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBwdWxsUmVxdWVzdHM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBzZWN1cml0eUV2ZW50cz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHN0YXR1c2VzPzogSm9iUGVybWlzc2lvbjtcbn1cblxuLyoqXG4gKiBUaGUgcGVybWlzc2lvbnMgYXZhaWxhYmxlIHRvIGEgR2l0SHViIEFwcC5cbiAqXG4gKiBUeXBpY2FsbHkgYSB0b2tlbiBmb3IgYSBHaXRIdWIgQXBwIGhhcyBhbGwgdGhlIGF2YWlsYWJsZSBzY29wZXMvcGVybWlzc2lvbnMgYXZhaWxhYmxlIHRvIHRoZSBhcHBcbiAqIGl0c2VsZjsgaG93ZXZlciwgYSBtb3JlIGxpbWl0ZWQgc2V0IG9mIHBlcm1pc3Npb25zIGNhbiBiZSBzcGVjaWZpZWQuIFdoZW4gcGVybWlzc2lvbnMgYXJlIHByb3ZpZGVkLFxuICogKipvbmx5KiogdGhlIHNwZWNpZmllZCBwZXJtaXNzaW9ucyBhcmUgZ3JhbnRlZCB0byB0aGUgdG9rZW4uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9yZXN0L2FwcHMvYXBwcz9hcGlWZXJzaW9uPTIwMjItMTEtMjgjY3JlYXRlLWFuLWluc3RhbGxhdGlvbi1hY2Nlc3MtdG9rZW4tZm9yLWFuLWFwcFxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9jcmVhdGUtZ2l0aHViLWFwcC10b2tlbi9ibG9iL21haW4vYWN0aW9uLnltbCNMMjhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBQZXJtaXNzaW9ucyB7XG4gIHJlYWRvbmx5IGFjdGlvbnM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBhdHRlc3RhdGlvbnM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBhZG1pbmlzdHJhdGlvbj86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGNoZWNrcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGNvZGVzcGFjZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBjb250ZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGRlcGVuZGFib3RTZWNyZXRzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgZGVwbG95bWVudHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBlbWFpbEFkZHJlc3Nlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGVudmlyb25tZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGZvbGxvd2Vycz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGdpdFNzaEtleXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBncGdLZXlzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgaW50ZXJhY3Rpb25MaW1pdHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBpc3N1ZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBtZW1iZXJzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25BZG1pbmlzdHJhdGlvbj86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkFubm91bmNlbWVudEJhbm5lcnM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25Db3BpbG90U2VhdE1hbmFnZW1lbnQ/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25DdXN0b21PcmdSb2xlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkN1c3RvbVByb3BlcnRpZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25DdXN0b21Sb2xlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkV2ZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkhvb2tzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uUGFja2FnZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25QZXJzb25hbEFjY2Vzc1Rva2VuUmVxdWVzdHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25QZXJzb25hbEFjY2Vzc1Rva2Vucz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblBsYW4/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25Qcm9qZWN0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblNlY3JldHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25TZWxmSG9zdGVkUnVubmVycz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ25haXphdGlvblVzZXJCbG9ja2luZz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcGFnZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBwcm9maWxlPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcmVwb3NpdG9yeUN1c3RvbVByb3BlcnRpZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSByZXBvc2l0b3J5SG9va3M/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSByZXBvc2l0b3J5UHJvamVjdHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzZWNyZXRTY2FubmluZ0FsZXJ0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHNlY3JldHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzZWN1cml0eUV2ZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHNpbmdsZUZpbGU/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzdGFycmluZz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHN0YXR1c2VzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgdGVhbURpc2N1c3Npb25zPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eUFsZXJ0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHdvcmtmbG93cz86IEFwcFBlcm1pc3Npb247XG59XG5cbi8qKlxuICogQWNjZXNzIGxldmVsIGZvciB3b3JrZmxvdyBwZXJtaXNzaW9uIHNjb3Blcy5cbiAqL1xuZXhwb3J0IGVudW0gSm9iUGVybWlzc2lvbiB7XG4gIC8qKiBSZWFkLW9ubHkgYWNjZXNzICovXG4gIFJFQUQgPSBcInJlYWRcIixcblxuICAvKiogUmVhZC13cml0ZSBhY2Nlc3MgKi9cbiAgV1JJVEUgPSBcIndyaXRlXCIsXG5cbiAgLyoqIE5vIGFjY2VzcyBhdCBhbGwgKi9cbiAgTk9ORSA9IFwibm9uZVwiLFxufVxuXG4vKipcbiAqIFRoZSBwZXJtaXNzaW9ucyBhdmFpbGFibGUgZm9yIGFuIGFjY2VzcyB0b2tlbiBmb3IgYSBHaXRIdWIgQXBwLlxuICovXG5leHBvcnQgZW51bSBBcHBQZXJtaXNzaW9uIHtcbiAgLyoqIFJlYWQtb25seSBhY2NjZXNzICovXG4gIFJFQUQgPSBcInJlYWRcIixcbiAgLyoqIFJlYWQtd3JpdGUgYWNjZXNzICovXG4gIFdSSVRFID0gXCJ3cml0ZVwiLFxuICAvKipcbiAgICogUmVhZC13cml0ZSBhbmQgYWRtaW4gYWNjZXNzLlxuICAgKlxuICAgKiBOb3QgYWxsIHBlcm1pc3Npb25zIHN1cHBvcnQgYGFkbWluYC5cbiAgICovXG4gIEFETUlOID0gXCJhZG1pblwiLFxufVxuXG4vKipcbiAqIEFuIG91dHB1dCBiaW5kaW5nIGZvciBhIGpvYi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JTdGVwT3V0cHV0IHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgc3RlcCB0aGF0IGV4cG9zZXMgdGhlIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgam9iIG91dHB1dCB0aGF0IGlzIGJlaW5nIGJvdW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFsbCBzdGVwcyBpbiB0aGUgam9iLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYkRlZmF1bHRzIHtcbiAgLyoqIERlZmF1bHQgcnVuIHNldHRpbmdzLiAqL1xuICByZWFkb25seSBydW4/OiBSdW5TZXR0aW5ncztcbn1cblxuLyoqXG4gKiBSdW4gc2V0dGluZ3MgZm9yIGEgam9iLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1blNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFdoaWNoIHNoZWxsIHRvIHVzZSBmb3IgcnVubmluZyB0aGUgc3RlcC5cbiAgICpcbiAgICogQGV4YW1wbGUgXCJiYXNoXCJcbiAgICovXG4gIHJlYWRvbmx5IHNoZWxsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3JraW5nIGRpcmVjdG9yeSB0byB1c2Ugd2hlbiBydW5uaW5nIHRoZSBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGaWVsZHMgdGhhdCBkZXNjcmliZSB0aGUgSG93LCBXaHksIFdoZW4sIGFuZCBXaG8gb2YgYSBTdGVwLlxuICogVGhlc2UgZmllbGRzIGNhbiBoYXZlIG5vbmUgcHJlc2VudCwgYnV0IGNhbiBiZSBwcmVzZW50IG9uIGV2ZXJ5IFN0ZXAsIGFuZCBoYXZlIG5vIGVmZmVjdCBvbiBvbmUgYW5vdGhlci5cbiAqXG4gKiBUaGlzIHN0YW5kcyBpbiBjb250cmFzdCB0byB0aGUgQ29tbWFuZCAobm9uLUNvbmZpZ3VyYXRpb24pIGZpZWxkcywgd2hpY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgYW5kIGRlc2NyaWJlIHRoZSBXaGF0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzdGVwLiBZb3UgY2FuIHVzZSB0aGUgaWQgdG8gcmVmZXJlbmNlIHRoZVxuICAgKiBzdGVwIGluIGNvbnRleHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gdXNlIHRoZSBpZiBjb25kaXRpb25hbCB0byBwcmV2ZW50IGEgam9iIGZyb20gcnVubmluZyB1bmxlc3MgYVxuICAgKiBjb25kaXRpb24gaXMgbWV0LiBZb3UgY2FuIHVzZSBhbnkgc3VwcG9ydGVkIGNvbnRleHQgYW5kIGV4cHJlc3Npb24gdG9cbiAgICogY3JlYXRlIGEgY29uZGl0aW9uYWwuXG4gICAqL1xuICByZWFkb25seSBpZj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBuYW1lIGZvciB5b3VyIHN0ZXAgdG8gZGlzcGxheSBvbiBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXRzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3Igc3RlcHMgdG8gdXNlIGluIHRoZSBydW5uZXIgZW52aXJvbm1lbnQuXG4gICAqIFlvdSBjYW4gYWxzbyBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgZW50aXJlIHdvcmtmbG93IG9yIGEgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgd29ya2luZyBkaXJlY3RvcnkgZm9yIGEgc3RlcC5cbiAgICogT3ZlcnJpZGVzIGEgam9iJ3Mgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgc2hlbGwgc2V0dGluZ3MgaW4gdGhlIHJ1bm5lcidzIG9wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZSBqb2IncyBkZWZhdWx0LlxuICAgKlxuICAgKiBSZWZlciB0byBHaXRIdWIgZG9jdW1lbnRhdGlvbiBmb3IgYWxsb3dlZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy93cml0aW5nLXdvcmtmbG93cy93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2pvYnNqb2JfaWRzdGVwc3NoZWxsXG4gICAqL1xuICByZWFkb25seSBzaGVsbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGlzIGNvbnRhaW5zIHRoZSBmaWVsZHMgdGhhdCBhcmUgY29tbW9uIGFtb25nc3QgYm90aDpcbiAqIC0gSm9iU3RlcCwgd2hpY2ggaXMgYSBzdGVwIHRoYXQgaXMgcGFydCBvZiBhIEpvYiBpbiBHaXRodWIgQWN0aW9ucy4gVGhpcyBpcyBieSBmYXIgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlLlxuICogLSBUaGUgbWV0YWRhdGEgZmlsZSBgYWN0aW9uLnlhbWxgIHRoYXQgaXMgdXNlZCB0byBkZWZpbmUgYW4gQWN0aW9uIHdoZW4geW91IGFyZSBjcmVhdGluZyBvbmUuIEFzIGluLCBpZiB5b3Ugd2VyZSBjcmVhdGluZyBhbiBBY3Rpb24gdG8gYmUgdXNlZCBpbiBhIEpvYlN0ZXAuXG4gKiBUaGVyZSBpcyBzb21lIG92ZXJsYXAgYmV0d2VlbiB0aGUgdHdvLCBhbmQgdGhpcyBjYXB0dXJlcyB0aGF0IG92ZXJsYXAuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2NyZWF0aW5nLWFjdGlvbnMvbWV0YWRhdGEtc3ludGF4LWZvci1naXRodWItYWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXAgZXh0ZW5kcyBTdGVwQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBTZWxlY3RzIGFuIGFjdGlvbiB0byBydW4gYXMgcGFydCBvZiBhIHN0ZXAgaW4geW91ciBqb2IuIEFuIGFjdGlvbiBpcyBhXG4gICAqIHJldXNhYmxlIHVuaXQgb2YgY29kZS4gWW91IGNhbiB1c2UgYW4gYWN0aW9uIGRlZmluZWQgaW4gdGhlIHNhbWVcbiAgICogcmVwb3NpdG9yeSBhcyB0aGUgd29ya2Zsb3csIGEgcHVibGljIHJlcG9zaXRvcnksIG9yIGluIGEgcHVibGlzaGVkIERvY2tlclxuICAgKiBjb250YWluZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSB1c2VzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSdW5zIGNvbW1hbmQtbGluZSBwcm9ncmFtcyB1c2luZyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIHNoZWxsLiBJZiB5b3UgZG9cbiAgICogbm90IHByb3ZpZGUgYSBuYW1lLCB0aGUgc3RlcCBuYW1lIHdpbGwgZGVmYXVsdCB0byB0aGUgdGV4dCBzcGVjaWZpZWQgaW5cbiAgICogdGhlIHJ1biBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiB0aGUgaW5wdXQgcGFyYW1ldGVycyBkZWZpbmVkIGJ5IHRoZSBhY3Rpb24uIEVhY2ggaW5wdXQgcGFyYW1ldGVyXG4gICAqIGlzIGEga2V5L3ZhbHVlIHBhaXIuIElucHV0IHBhcmFtZXRlcnMgYXJlIHNldCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAqIFRoZSB2YXJpYWJsZSBpcyBwcmVmaXhlZCB3aXRoIElOUFVUXyBhbmQgY29udmVydGVkIHRvIHVwcGVyIGNhc2UuXG4gICAqL1xuICByZWFkb25seSB3aXRoPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBUaGVzZSBzZXR0aW5ncyBhcmUgdW5pcXVlIHRvIGEgSm9iU3RlcCBmcm9tIHRoZSBmaWVsZHMgY29udGFpbmVkIHdpdGhpbiB0aGUgbWV0YWRhdGEgYWN0aW9uLnlhbWwgZmlsZSBwcmVzZW50IGluIHdoZW4gY3JlYXRpbmcgYSBuZXcgR2l0SHViIEFjdGlvbi5cbiAqIFRoZXNlIGZpZWxkcyBhcmUgbm90IHByZXNlbnQgaW4gYWN0aW9uLnltbCwgYnV0IGFyZSBpbiBKb2JTdGVwLCB3aGljaCBhcmUgdXNpbmcgd2hlbiBjcmVhdGluZyB3b3JrZmxvd3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iU3RlcENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBTdGVwQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBQcmV2ZW50cyBhIGpvYiBmcm9tIGZhaWxpbmcgd2hlbiBhIHN0ZXAgZmFpbHMuIFNldCB0byB0cnVlIHRvIGFsbG93IGEgam9iXG4gICAqIHRvIHBhc3Mgd2hlbiB0aGlzIHN0ZXAgZmFpbHMuXG4gICAqL1xuICByZWFkb25seSBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWludXRlcyB0byBydW4gdGhlIHN0ZXAgYmVmb3JlIGtpbGxpbmcgdGhlIHByb2Nlc3MuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0TWludXRlcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBKb2JTdGVwcyBydW4gYXMgcGFydCBvZiBhIEdpdEh1YiBXb3JrZmxvdyBKb2IuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3VzaW5nLXdvcmtmbG93cy93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2pvYnNqb2JfaWRzdGVwc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYlN0ZXAgZXh0ZW5kcyBTdGVwLCBKb2JTdGVwQ29uZmlndXJhdGlvbiB7fVxuXG4vKipcbiAqIEEgc3RyYXRlZ3kgY3JlYXRlcyBhIGJ1aWxkIG1hdHJpeCBmb3IgeW91ciBqb2JzLiBZb3UgY2FuIGRlZmluZSBkaWZmZXJlbnRcbiAqIHZhcmlhdGlvbnMgdG8gcnVuIGVhY2ggam9iIGluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYlN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIFlvdSBjYW4gZGVmaW5lIGEgbWF0cml4IG9mIGRpZmZlcmVudCBqb2IgY29uZmlndXJhdGlvbnMuIEEgbWF0cml4IGFsbG93c1xuICAgKiB5b3UgdG8gY3JlYXRlIG11bHRpcGxlIGpvYnMgYnkgcGVyZm9ybWluZyB2YXJpYWJsZSBzdWJzdGl0dXRpb24gaW4gYVxuICAgKiBzaW5nbGUgam9iIGRlZmluaXRpb24uIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBhIG1hdHJpeCB0byBjcmVhdGUgam9ic1xuICAgKiBmb3IgbW9yZSB0aGFuIG9uZSBzdXBwb3J0ZWQgdmVyc2lvbiBvZiBhIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvcGVyYXRpbmdcbiAgICogc3lzdGVtLCBvciB0b29sLiBBIG1hdHJpeCByZXVzZXMgdGhlIGpvYidzIGNvbmZpZ3VyYXRpb24gYW5kIGNyZWF0ZXMgYVxuICAgKiBqb2IgZm9yIGVhY2ggbWF0cml4IHlvdSBjb25maWd1cmUuXG4gICAqXG4gICAqIEEgam9iIG1hdHJpeCBjYW4gZ2VuZXJhdGUgYSBtYXhpbXVtIG9mIDI1NiBqb2JzIHBlciB3b3JrZmxvdyBydW4uIFRoaXNcbiAgICogbGltaXQgYWxzbyBhcHBsaWVzIHRvIHNlbGYtaG9zdGVkIHJ1bm5lcnMuXG4gICAqL1xuICByZWFkb25seSBtYXRyaXg/OiBKb2JNYXRyaXg7XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIEdpdEh1YiBjYW5jZWxzIGFsbCBpbi1wcm9ncmVzcyBqb2JzIGlmIGFueSBtYXRyaXggam9iXG4gICAqIGZhaWxzLiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICByZWFkb25seSBmYWlsRmFzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBqb2JzIHRoYXQgY2FuIHJ1biBzaW11bHRhbmVvdXNseSB3aGVuIHVzaW5nIGFcbiAgICogbWF0cml4IGpvYiBzdHJhdGVneS4gQnkgZGVmYXVsdCwgR2l0SHViIHdpbGwgbWF4aW1pemUgdGhlIG51bWJlciBvZiBqb2JzXG4gICAqIHJ1biBpbiBwYXJhbGxlbCBkZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBydW5uZXJzIG9uIEdpdEh1Yi1ob3N0ZWRcbiAgICogdmlydHVhbCBtYWNoaW5lcy5cbiAgICovXG4gIHJlYWRvbmx5IG1heFBhcmFsbGVsPzogbnVtYmVyO1xufVxuXG50eXBlIEpvYk1hdHJpeFZhbHVlID0gc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcblxuLyoqXG4gKiBBIGpvYiBtYXRyaXguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iTWF0cml4IHtcbiAgLyoqXG4gICAqIEVhY2ggb3B0aW9uIHlvdSBkZWZpbmUgaW4gdGhlIG1hdHJpeCBoYXMgYSBrZXkgYW5kIHZhbHVlLiBUaGUga2V5cyB5b3VcbiAgICogZGVmaW5lIGJlY29tZSBwcm9wZXJ0aWVzIGluIHRoZSBtYXRyaXggY29udGV4dCBhbmQgeW91IGNhbiByZWZlcmVuY2UgdGhlXG4gICAqIHByb3BlcnR5IGluIG90aGVyIGFyZWFzIG9mIHlvdXIgd29ya2Zsb3cgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBkZWZpbmVcbiAgICogdGhlIGtleSBvcyB0aGF0IGNvbnRhaW5zIGFuIGFycmF5IG9mIG9wZXJhdGluZyBzeXN0ZW1zLCB5b3UgY2FuIHVzZSB0aGVcbiAgICogbWF0cml4Lm9zIHByb3BlcnR5IGFzIHRoZSB2YWx1ZSBvZiB0aGUgcnVucy1vbiBrZXl3b3JkIHRvIGNyZWF0ZSBhIGpvYlxuICAgKiBmb3IgZWFjaCBvcGVyYXRpbmcgc3lzdGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgSm9iTWF0cml4VmFsdWVbXT47XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gYWRkIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGEgYnVpbGQgbWF0cml4IGpvYiB0aGF0XG4gICAqIGFscmVhZHkgZXhpc3RzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gdXNlIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBucG1cbiAgICogd2hlbiB0aGUgam9iIHRoYXQgdXNlcyB3aW5kb3dzLWxhdGVzdCBhbmQgdmVyc2lvbiA4IG9mIG5vZGUgcnVucywgeW91IGNhblxuICAgKiB1c2UgaW5jbHVkZSB0byBzcGVjaWZ5IHRoYXQgYWRkaXRpb25hbCBvcHRpb24uXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlPzogQXJyYXk8UmVjb3JkPHN0cmluZywgSm9iTWF0cml4VmFsdWU+PjtcblxuICAvKipcbiAgICogWW91IGNhbiByZW1vdmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBkZWZpbmVkIGluIHRoZSBidWlsZCBtYXRyaXhcbiAgICogdXNpbmcgdGhlIGV4Y2x1ZGUgb3B0aW9uLiBVc2luZyBleGNsdWRlIHJlbW92ZXMgYSBqb2IgZGVmaW5lZCBieSB0aGVcbiAgICogYnVpbGQgbWF0cml4LlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IEFycmF5PFJlY29yZDxzdHJpbmcsIEpvYk1hdHJpeFZhbHVlPj47XG59XG5cbi8qKlxuICogT3B0aW9ucyBwZXJ0YWluaW5nIHRvIGNvbnRhaW5lciBlbnZpcm9ubWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgRG9ja2VyIGltYWdlIHRvIHVzZSBhcyB0aGUgY29udGFpbmVyIHRvIHJ1biB0aGUgYWN0aW9uLiBUaGUgdmFsdWUgY2FuXG4gICAqIGJlIHRoZSBEb2NrZXIgSHViIGltYWdlIG5hbWUgb3IgYSByZWdpc3RyeSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogZiB0aGUgaW1hZ2UncyBjb250YWluZXIgcmVnaXN0cnkgcmVxdWlyZXMgYXV0aGVudGljYXRpb24gdG8gcHVsbCB0aGVcbiAgICogaW1hZ2UsIHlvdSBjYW4gdXNlIGNyZWRlbnRpYWxzIHRvIHNldCBhIG1hcCBvZiB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAgKiBUaGUgY3JlZGVudGlhbHMgYXJlIHRoZSBzYW1lIHZhbHVlcyB0aGF0IHlvdSB3b3VsZCBwcm92aWRlIHRvIHRoZSBkb2NrZXJcbiAgICogbG9naW4gY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxzPzogQ29udGFpbmVyQ3JlZGVudGlhbHM7XG5cbiAgLyoqXG4gICAqIFNldHMgYSBtYXAgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHRoZSBjb250YWluZXIuXG4gICAqL1xuICByZWFkb25seSBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBTZXRzIGFuIGFycmF5IG9mIHBvcnRzIHRvIGV4cG9zZSBvbiB0aGUgY29udGFpbmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydHM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogU2V0cyBhbiBhcnJheSBvZiB2b2x1bWVzIGZvciB0aGUgY29udGFpbmVyIHRvIHVzZS4gWW91IGNhbiB1c2Ugdm9sdW1lcyB0b1xuICAgKiBzaGFyZSBkYXRhIGJldHdlZW4gc2VydmljZXMgb3Igb3RoZXIgc3RlcHMgaW4gYSBqb2IuIFlvdSBjYW4gc3BlY2lmeVxuICAgKiBuYW1lZCBEb2NrZXIgdm9sdW1lcywgYW5vbnltb3VzIERvY2tlciB2b2x1bWVzLCBvciBiaW5kIG1vdW50cyBvbiB0aGVcbiAgICogaG9zdC5cbiAgICpcbiAgICogVG8gc3BlY2lmeSBhIHZvbHVtZSwgeW91IHNwZWNpZnkgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcGF0aDpcbiAgICogYDxzb3VyY2U+OjxkZXN0aW5hdGlvblBhdGg+YC5cbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBEb2NrZXIgY29udGFpbmVyIHJlc291cmNlIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9jb21tYW5kbGluZS9jcmVhdGUvI29wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDcmVkZW50aWFscyB0byB1c2UgdG8gYXV0aGVudGljYXRlIHRvIERvY2tlciByZWdpc3RyaWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckNyZWRlbnRpYWxzIHtcbiAgLyoqIFRoZSB1c2VybmFtZS4gKi9cbiAgcmVhZG9ubHkgdXNlcm5hbWU6IHN0cmluZztcblxuICAvKiogVGhlIHBhc3N3b3JkLiAqL1xuICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzZXQgb2YgYXZhaWxhYmxlIHRyaWdnZXJzIGZvciBHaXRIdWIgV29ya2Zsb3dzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9yZWZlcmVuY2UvZXZlbnRzLXRoYXQtdHJpZ2dlci13b3JrZmxvd3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmlnZ2VycyB7XG4gIC8vI3JlZ2lvbiBTY2hlZHVsZWQgZXZlbnRzXG4gIC8qKlxuICAgKiBZb3UgY2FuIHNjaGVkdWxlIGEgd29ya2Zsb3cgdG8gcnVuIGF0IHNwZWNpZmljIFVUQyB0aW1lcyB1c2luZyBQT1NJWCBjcm9uXG4gICAqIHN5bnRheC4gU2NoZWR1bGVkIHdvcmtmbG93cyBydW4gb24gdGhlIGxhdGVzdCBjb21taXQgb24gdGhlIGRlZmF1bHQgb3JcbiAgICogYmFzZSBicmFuY2guIFRoZSBzaG9ydGVzdCBpbnRlcnZhbCB5b3UgY2FuIHJ1biBzY2hlZHVsZWQgd29ya2Zsb3dzIGlzXG4gICAqIG9uY2UgZXZlcnkgNSBtaW51dGVzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS91dGlsaXRpZXMvY3JvbnRhYi5odG1sI3RhZ18yMF8yNV8wN1xuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU/OiBDcm9uU2NoZWR1bGVPcHRpb25zW107XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBNYW51YWwgZXZlbnRzXG4gIC8qKlxuICAgKiBZb3UgY2FuIGNvbmZpZ3VyZSBjdXN0b20tZGVmaW5lZCBpbnB1dCBwcm9wZXJ0aWVzLCBkZWZhdWx0IGlucHV0IHZhbHVlcyxcbiAgICogYW5kIHJlcXVpcmVkIGlucHV0cyBmb3IgdGhlIGV2ZW50IGRpcmVjdGx5IGluIHlvdXIgd29ya2Zsb3cuIFdoZW4gdGhlXG4gICAqIHdvcmtmbG93IHJ1bnMsIHlvdSBjYW4gYWNjZXNzIHRoZSBpbnB1dCB2YWx1ZXMgaW4gdGhlIGdpdGh1Yi5ldmVudC5pbnB1dHNcbiAgICogY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93RGlzcGF0Y2g/OiBXb3JrZmxvd0Rpc3BhdGNoT3B0aW9ucztcblxuICAvKipcbiAgICogWW91IGNhbiB1c2UgdGhlIEdpdEh1YiBBUEkgdG8gdHJpZ2dlciBhIHdlYmhvb2sgZXZlbnQgY2FsbGVkXG4gICAqIHJlcG9zaXRvcnlfZGlzcGF0Y2ggd2hlbiB5b3Ugd2FudCB0byB0cmlnZ2VyIGEgd29ya2Zsb3cgZm9yIGFjdGl2aXR5IHRoYXRcbiAgICogaGFwcGVucyBvdXRzaWRlIG9mIEdpdEh1Yi5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlEaXNwYXRjaD86IFJlcG9zaXRvcnlEaXNwYXRjaE9wdGlvbnM7XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBXb3JrZmxvdyByZXVzZSBldmVudHNcbiAgLyoqXG4gICAqIENhbiBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHdvcmtmbG93XG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9sZWFybi1naXRodWItYWN0aW9ucy9yZXVzaW5nLXdvcmtmbG93c1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dDYWxsPzogV29ya2Zsb3dDYWxsT3B0aW9ucztcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFdlYmhvb2sgZXZlbnRzXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgYnJhbmNoX3Byb3RlY3Rpb25fcnVsZSBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBicmFuY2hQcm90ZWN0aW9uUnVsZT86IEJyYW5jaFByb3RlY3Rpb25SdWxlT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIGNoZWNrX3J1biBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBjaGVja1J1bj86IENoZWNrUnVuT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIGNoZWNrX3N1aXRlIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrU3VpdGU/OiBDaGVja1N1aXRlT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgc29tZW9uZSBjcmVhdGVzIGEgYnJhbmNoIG9yIHRhZywgd2hpY2hcbiAgICogdHJpZ2dlcnMgdGhlIGNyZWF0ZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZT86IENyZWF0ZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHNvbWVvbmUgZGVsZXRlcyBhIGJyYW5jaCBvciB0YWcsIHdoaWNoXG4gICAqIHRyaWdnZXJzIHRoZSBkZWxldGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBkZWxldGU/OiBEZWxldGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBzb21lb25lIGNyZWF0ZXMgYSBkZXBsb3ltZW50LCB3aGljaCB0cmlnZ2Vyc1xuICAgKiB0aGUgZGVwbG95bWVudCBldmVudC4gRGVwbG95bWVudHMgY3JlYXRlZCB3aXRoIGEgY29tbWl0IFNIQSBtYXkgbm90IGhhdmVcbiAgICogYSBHaXQgcmVmLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudD86IERlcGxveW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBhIHRoaXJkIHBhcnR5IHByb3ZpZGVzIGEgZGVwbG95bWVudCBzdGF0dXMsXG4gICAqIHdoaWNoIHRyaWdnZXJzIHRoZSBkZXBsb3ltZW50X3N0YXR1cyBldmVudC4gRGVwbG95bWVudHMgY3JlYXRlZCB3aXRoIGFcbiAgICogY29tbWl0IFNIQSBtYXkgbm90IGhhdmUgYSBHaXQgcmVmLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudFN0YXR1cz86IERlcGxveW1lbnRTdGF0dXNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgZGlzY3Vzc2lvbiBldmVudCBvY2N1cnMuIE1vcmUgdGhhbiBvbmUgYWN0aXZpdHkgdHlwZSB0cmlnZ2VycyB0aGlzIGV2ZW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2dyYXBocWwvZ3VpZGVzL3VzaW5nLXRoZS1ncmFwaHFsLWFwaS1mb3ItZGlzY3Vzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRpc2N1c3Npb24/OiBEaXNjdXNzaW9uT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIGRpc2N1c3Npb25fY29tbWVudCBldmVudCBvY2N1cnMuIE1vcmUgdGhhbiBvbmUgYWN0aXZpdHkgdHlwZSB0cmlnZ2VycyB0aGlzIGV2ZW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2dyYXBocWwvZ3VpZGVzL3VzaW5nLXRoZS1ncmFwaHFsLWFwaS1mb3ItZGlzY3Vzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRpc2N1c3Npb25Db21tZW50PzogRGlzY3Vzc2lvbkNvbW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB3aGVuIHNvbWVvbmUgZm9ya3MgYSByZXBvc2l0b3J5LCB3aGljaFxuICAgKiB0cmlnZ2VycyB0aGUgZm9yayBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGZvcms/OiBGb3JrT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IHdoZW4gc29tZW9uZSBjcmVhdGVzIG9yIHVwZGF0ZXMgYSBXaWtpIHBhZ2UsIHdoaWNoXG4gICAqIHRyaWdnZXJzIHRoZSBnb2xsdW0gZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBnb2xsdW0/OiBHb2xsdW1PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgaXNzdWVfY29tbWVudCBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBpc3N1ZUNvbW1lbnQ/OiBJc3N1ZUNvbW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgaXNzdWVzIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGlzc3Vlcz86IElzc3Vlc09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBsYWJlbCBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBsYWJlbD86IExhYmVsT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IHdoZW4gYSBwdWxsIHJlcXVlc3QgaXMgYWRkZWQgdG8gYSBtZXJnZSBxdWV1ZSwgd2hpY2hcbiAgICogYWRkcyB0aGUgcHVsbCByZXF1ZXN0IHRvIGEgbWVyZ2UgZ3JvdXAuXG4gICAqXG4gICAqIEBzdGFiaWxpdHkgZXhwZXJpbWVudGFsXG4gICAqL1xuICByZWFkb25seSBtZXJnZUdyb3VwPzogTWVyZ2VHcm91cE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBtaWxlc3RvbmUgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgbWlsZXN0b25lPzogTWlsZXN0b25lT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgc29tZW9uZSBwdXNoZXMgdG8gYSBHaXRIdWIgUGFnZXMtZW5hYmxlZFxuICAgKiBicmFuY2gsIHdoaWNoIHRyaWdnZXJzIHRoZSBwYWdlX2J1aWxkIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcGFnZUJ1aWxkPzogUGFnZUJ1aWxkT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIHByb2plY3QgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdD86IFByb2plY3RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgcHJvamVjdF9jYXJkIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RDYXJkPzogUHJvamVjdENhcmRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgcHJvamVjdF9jb2x1bW4gZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdENvbHVtbj86IFByb2plY3RDb2x1bW5PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBzb21lb25lIG1ha2VzIGEgcHJpdmF0ZSByZXBvc2l0b3J5IHB1YmxpYyxcbiAgICogd2hpY2ggdHJpZ2dlcnMgdGhlIHB1YmxpYyBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpYz86IFB1YmxpY09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBwdWxsX3JlcXVlc3QgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3Q/OiBQdWxsUmVxdWVzdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBwdWxsX3JlcXVlc3RfcmV2aWV3IGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0UmV2aWV3PzogUHVsbFJlcXVlc3RSZXZpZXdPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBhIGNvbW1lbnQgb24gYSBwdWxsIHJlcXVlc3QncyB1bmlmaWVkIGRpZmYgaXNcbiAgICogbW9kaWZpZWQsIHdoaWNoIHRyaWdnZXJzIHRoZSBwdWxsX3JlcXVlc3RfcmV2aWV3X2NvbW1lbnQgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ/OiBQdWxsUmVxdWVzdFJldmlld0NvbW1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IHJ1bnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGJhc2Ugb2YgdGhlIHB1bGwgcmVxdWVzdCwgcmF0aGVyXG4gICAqIHRoYW4gaW4gdGhlIG1lcmdlIGNvbW1pdCBhcyB0aGUgcHVsbF9yZXF1ZXN0IGV2ZW50IGRvZXMuIFRoaXMgcHJldmVudHNcbiAgICogZXhlY3V0aW5nIHVuc2FmZSB3b3JrZmxvdyBjb2RlIGZyb20gdGhlIGhlYWQgb2YgdGhlIHB1bGwgcmVxdWVzdCB0aGF0XG4gICAqIGNvdWxkIGFsdGVyIHlvdXIgcmVwb3NpdG9yeSBvciBzdGVhbCBhbnkgc2VjcmV0cyB5b3UgdXNlIGluIHlvdXIgd29ya2Zsb3cuXG4gICAqIFRoaXMgZXZlbnQgYWxsb3dzIHlvdSB0byBkbyB0aGluZ3MgbGlrZSBjcmVhdGUgd29ya2Zsb3dzIHRoYXQgbGFiZWwgYW5kXG4gICAqIGNvbW1lbnQgb24gcHVsbCByZXF1ZXN0cyBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIGV2ZW50IHBheWxvYWQuXG4gICAqXG4gICAqIFdBUk5JTkc6IFRoZSBgcHVsbF9yZXF1ZXN0X3RhcmdldGAgZXZlbnQgaXMgZ3JhbnRlZCByZWFkL3dyaXRlIHJlcG9zaXRvcnlcbiAgICogdG9rZW4gYW5kIGNhbiBhY2Nlc3Mgc2VjcmV0cywgZXZlbiB3aGVuIGl0IGlzIHRyaWdnZXJlZCBmcm9tIGEgZm9yay5cbiAgICogQWx0aG91Z2ggdGhlIHdvcmtmbG93IHJ1bnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGJhc2Ugb2YgdGhlIHB1bGwgcmVxdWVzdCxcbiAgICogeW91IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB5b3UgZG8gbm90IGNoZWNrIG91dCwgYnVpbGQsIG9yIHJ1biB1bnRydXN0ZWRcbiAgICogY29kZSBmcm9tIHRoZSBwdWxsIHJlcXVlc3Qgd2l0aCB0aGlzIGV2ZW50LiBBZGRpdGlvbmFsbHksIGFueSBjYWNoZXNcbiAgICogc2hhcmUgdGhlIHNhbWUgc2NvcGUgYXMgdGhlIGJhc2UgYnJhbmNoLCBhbmQgdG8gaGVscCBwcmV2ZW50IGNhY2hlXG4gICAqIHBvaXNvbmluZywgeW91IHNob3VsZCBub3Qgc2F2ZSB0aGUgY2FjaGUgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0XG4gICAqIHRoZSBjYWNoZSBjb250ZW50cyB3ZXJlIGFsdGVyZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9zZWN1cml0eWxhYi5naXRodWIuY29tL3Jlc2VhcmNoL2dpdGh1Yi1hY3Rpb25zLXByZXZlbnRpbmctcHduLXJlcXVlc3RzXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdFRhcmdldD86IFB1bGxSZXF1ZXN0VGFyZ2V0T3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IHdoZW4gc29tZW9uZSBwdXNoZXMgdG8gYSByZXBvc2l0b3J5IGJyYW5jaCwgd2hpY2hcbiAgICogdHJpZ2dlcnMgdGhlIHB1c2ggZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBwdXNoPzogUHVzaE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIGEgcGFja2FnZSBpcyBwdWJsaXNoZWQgb3IgdXBkYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdHJ5UGFja2FnZT86IFJlZ2lzdHJ5UGFja2FnZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSByZWxlYXNlIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGVhc2U/OiBSZWxlYXNlT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIHN0YXR1cyBvZiBhIEdpdCBjb21taXQgY2hhbmdlcywgd2hpY2hcbiAgICogdHJpZ2dlcnMgdGhlIHN0YXR1cyBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IFN0YXR1c09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSB3YXRjaCBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSB3YXRjaD86IFdhdGNoT3B0aW9ucztcblxuICAvKipcbiAgICogVGhpcyBldmVudCBvY2N1cnMgd2hlbiBhIHdvcmtmbG93IHJ1biBpcyByZXF1ZXN0ZWQgb3IgY29tcGxldGVkLCBhbmRcbiAgICogYWxsb3dzIHlvdSB0byBleGVjdXRlIGEgd29ya2Zsb3cgYmFzZWQgb24gdGhlIGZpbmlzaGVkIHJlc3VsdCBvZiBhbm90aGVyXG4gICAqIHdvcmtmbG93LiBBIHdvcmtmbG93IHJ1biBpcyB0cmlnZ2VyZWQgcmVnYXJkbGVzcyBvZiB0aGUgcmVzdWx0IG9mIHRoZVxuICAgKiBwcmV2aW91cyB3b3JrZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93UnVuPzogV29ya2Zsb3dSdW5PcHRpb25zO1xuICAvLyNlbmRyZWdpb25cbn1cblxuLyoqXG4gKiBDUk9OIHNjaGVkdWxlIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JvblNjaGVkdWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS91dGlsaXRpZXMvY3JvbnRhYi5odG1sI3RhZ18yMF8yNV8wN1xuICAgKi9cbiAgcmVhZG9ubHkgY3Jvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcG9zaXRvcnkgZGlzcGF0Y2ggb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvc2l0b3J5RGlzcGF0Y2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBCcmFuY2ggUHJvdGVjdGlvbiBSdWxlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmFuY2hQcm90ZWN0aW9uUnVsZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBDaGVjayBydW4gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja1J1bk9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIFwiY3JlYXRlXCIgfCBcInJlcmVxdWVzdGVkXCIgfCBcImNvbXBsZXRlZFwiIHwgXCJyZXF1ZXN0ZWRfYWN0aW9uXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBDaGVjayBzdWl0ZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tTdWl0ZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY29tcGxldGVkXCIgfCBcInJlcXVlc3RlZFwiIHwgXCJyZXJlcXVlc3RlZFwiPjtcbn1cblxuLyoqXG4gKiBEaXNjdXNzaW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNjdXNzaW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgfCBcImNyZWF0ZWRcIlxuICAgIHwgXCJlZGl0ZWRcIlxuICAgIHwgXCJ0cmFuc2ZlcnJlZFwiXG4gICAgfCBcInBpbm5lZFwiXG4gICAgfCBcInVucGlubmVkXCJcbiAgICB8IFwibGFiZWxlZFwiXG4gICAgfCBcInVubGFiZWxlZFwiXG4gICAgfCBcImxvY2tlZFwiXG4gICAgfCBcInVubG9ja2VkXCJcbiAgICB8IFwiY2F0ZWdvcnlfY2hhbmdlZFwiXG4gICAgfCBcImFuc3dlcmVkXCJcbiAgICB8IFwidW5hbnN3ZXJlZFwiXG4gID47XG59XG5cbi8qKlxuICogRGlzY3Vzc2lvbiBjb21tZW50IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNjdXNzaW9uQ29tbWVudE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBJc3N1ZSBjb21tZW50IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc3N1ZUNvbW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcImNyZWF0ZWRcIiB8IFwiZWRpdGVkXCIgfCBcImRlbGV0ZWRcIj47XG59XG5cbi8qKlxuICogSXNzdWVzIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc3N1ZXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcbiAgICB8IFwib3BlbmVkXCJcbiAgICB8IFwiZWRpdGVkXCJcbiAgICB8IFwiZGVsZXRlZFwiXG4gICAgfCBcInRyYW5zZmVycmVkXCJcbiAgICB8IFwicGlubmVkXCJcbiAgICB8IFwidW5waW5uZWRcIlxuICAgIHwgXCJjbG9zZWRcIlxuICAgIHwgXCJyZW9wZW5lZFwiXG4gICAgfCBcImFzc2lnbmVkXCJcbiAgICB8IFwidW5hc3NpZ25lZFwiXG4gICAgfCBcImxhYmVsZWRcIlxuICAgIHwgXCJ1bmxhYmVsZWRcIlxuICAgIHwgXCJsb2NrZWRcIlxuICAgIHwgXCJ1bmxvY2tlZFwiXG4gICAgfCBcIm1pbGVzdG9uZWRcIlxuICAgIHwgXCJkZW1pbGVzdG9uZWRcIlxuICA+O1xufVxuXG4vKipcbiAqIExhYmVsIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWJlbE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBNZXJnZSBncm91cCBvcHRpb25zLlxuICpcbiAqIEBzdGFiaWxpdHkgZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVyZ2VHcm91cE9wdGlvbnMge1xuICAvKipcbiAgICogV2hlbiB1c2luZyB0aGUgbWVyZ2VfZ3JvdXAgZXZlbnRzLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIHdvcmtmbG93XG4gICAqIHRvIHJ1biBvbiBzcGVjaWZpYyBiYXNlIGJyYW5jaGVzLiBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgYnJhbmNoZXMgd2lsbFxuICAgKiB0cmlnZ2VyIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogTWlsZXN0b25lIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaWxlc3RvbmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcbiAgICBcImNyZWF0ZWRcIiB8IFwiY2xvc2VkXCIgfCBcIm9wZW5lZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiXG4gID47XG59XG5cbi8qKlxuICogUHJvamVjdCBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIFwiY3JlYXRlZFwiIHwgXCJ1cGRhdGVkXCIgfCBcImNsb3NlZFwiIHwgXCJyZW9wZW5lZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiXG4gID47XG59XG5cbi8qKlxuICogUHJvamVjdCBjYXJkIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0Q2FyZE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIFwiY3JlYXRlZFwiIHwgXCJtb3ZlZFwiIHwgXCJjb252ZXJ0ZWRcIiB8IFwiZWRpdGVkXCIgfCBcImRlbGV0ZWRcIlxuICA+O1xufVxuXG4vKipcbiAqIFByb2JqZWN0IGNvbHVtbiBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdENvbHVtbk9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJ1cGRhdGVkXCIgfCBcIm1vdmVkXCIgfCBcImRlbGV0ZWRcIj47XG59XG5cbi8qKlxuICogUHVsbCByZXF1ZXN0IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWxsUmVxdWVzdE9wdGlvbnMgZXh0ZW5kcyBQdXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgfCBcImFzc2lnbmVkXCJcbiAgICB8IFwidW5hc3NpZ25lZFwiXG4gICAgfCBcImxhYmVsZWRcIlxuICAgIHwgXCJ1bmxhYmVsZWRcIlxuICAgIHwgXCJvcGVuZWRcIlxuICAgIHwgXCJlZGl0ZWRcIlxuICAgIHwgXCJjbG9zZWRcIlxuICAgIHwgXCJyZW9wZW5lZFwiXG4gICAgfCBcInN5bmNocm9uaXplXCJcbiAgICB8IFwicmVhZHlfZm9yX3Jldmlld1wiXG4gICAgfCBcImxvY2tlZFwiXG4gICAgfCBcInVubG9ja2VkXCJcbiAgICB8IFwicmV2aWV3X3JlcXVlc3RlZFwiXG4gICAgfCBcInJldmlld19yZXF1ZXN0X3JlbW92ZWRcIlxuICA+O1xufVxuXG4vKipcbiAqIFB1bGwgcmVxdWVzdCByZXZpZXcgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1bGxSZXF1ZXN0UmV2aWV3T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJzdWJtaXR0ZWRcIiB8IFwiZWRpdGVkXCIgfCBcImRpc21pc3NlZFwiPjtcbn1cblxuLyoqXG4gKiBQdWxsIHJlcXVlc3QgcmV2aWV3IGNvbW1lbnQgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBQdWxsIHJlcXVlc3QgdGFyZ2V0IG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVsbFJlcXVlc3RUYXJnZXRPcHRpb25zIGV4dGVuZHMgUHVzaE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIHwgXCJhc3NpZ25lZFwiXG4gICAgfCBcInVuYXNzaWduZWRcIlxuICAgIHwgXCJsYWJlbGVkXCJcbiAgICB8IFwidW5sYWJlbGVkXCJcbiAgICB8IFwib3BlbmVkXCJcbiAgICB8IFwiZWRpdGVkXCJcbiAgICB8IFwiY2xvc2VkXCJcbiAgICB8IFwicmVvcGVuZWRcIlxuICAgIHwgXCJzeW5jaHJvbml6ZVwiXG4gICAgfCBcInJlYWR5X2Zvcl9yZXZpZXdcIlxuICAgIHwgXCJsb2NrZWRcIlxuICAgIHwgXCJ1bmxvY2tlZFwiXG4gICAgfCBcInJldmlld19yZXF1ZXN0ZWRcIlxuICAgIHwgXCJyZXZpZXdfcmVxdWVzdF9yZW1vdmVkXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBwdXNoLWxpa2UgZXZlbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1c2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZW4gdXNpbmcgdGhlIHB1c2gsIHB1bGxfcmVxdWVzdCBhbmQgcHVsbF9yZXF1ZXN0X3RhcmdldCBldmVudHMsIHlvdSBjYW4gY29uZmlndXJlIGEgd29ya2Zsb3dcbiAgICogdG8gcnVuIG9uIHNwZWNpZmljIGJyYW5jaGVzIG9yIHRhZ3MuIEZvciBhIHB1bGxfcmVxdWVzdCBldmVudCwgb25seVxuICAgKiBicmFuY2hlcyBhbmQgdGFncyBvbiB0aGUgYmFzZSBhcmUgZXZhbHVhdGVkLiBJZiB5b3UgZGVmaW5lIG9ubHkgdGFncyBvclxuICAgKiBvbmx5IGJyYW5jaGVzLCB0aGUgd29ya2Zsb3cgd29uJ3QgcnVuIGZvciBldmVudHMgYWZmZWN0aW5nIHRoZSB1bmRlZmluZWRcbiAgICogR2l0IHJlZi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2ZpbHRlci1wYXR0ZXJuLWNoZWF0LXNoZWV0XG4gICAqL1xuICByZWFkb25seSBicmFuY2hlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBwdXNoLCBwdWxsX3JlcXVlc3QgYW5kIHB1bGxfcmVxdWVzdF90YXJnZXQgZXZlbnRzLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIHdvcmtmbG93XG4gICAqIHRvIHJ1biBvbiBzcGVjaWZpYyBicmFuY2hlcyBvciB0YWdzLiBGb3IgYSBwdWxsX3JlcXVlc3QgZXZlbnQsIG9ubHlcbiAgICogYnJhbmNoZXMgYW5kIHRhZ3Mgb24gdGhlIGJhc2UgYXJlIGV2YWx1YXRlZC4gSWYgeW91IGRlZmluZSBvbmx5IHRhZ3Mgb3JcbiAgICogb25seSBicmFuY2hlcywgdGhlIHdvcmtmbG93IHdvbid0IHJ1biBmb3IgZXZlbnRzIGFmZmVjdGluZyB0aGUgdW5kZWZpbmVkXG4gICAqIEdpdCByZWYuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9yZWZlcmVuY2Uvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyNmaWx0ZXItcGF0dGVybi1jaGVhdC1zaGVldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBwdXNoLCBwdWxsX3JlcXVlc3QgYW5kIHB1bGxfcmVxdWVzdF90YXJnZXQgZXZlbnRzLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIHdvcmtmbG93XG4gICAqIHRvIHJ1biB3aGVuIGF0IGxlYXN0IG9uZSBmaWxlIGRvZXMgbm90IG1hdGNoIHBhdGhzLWlnbm9yZSBvciBhdCBsZWFzdCBvbmVcbiAgICogbW9kaWZpZWQgZmlsZSBtYXRjaGVzIHRoZSBjb25maWd1cmVkIHBhdGhzLiBQYXRoIGZpbHRlcnMgYXJlIG5vdFxuICAgKiBldmFsdWF0ZWQgZm9yIHB1c2hlcyB0byB0YWdzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMjZmlsdGVyLXBhdHRlcm4tY2hlYXQtc2hlZXRcbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVnaXN0cnkgcGFja2FnZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cnlQYWNrYWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJwdWJsaXNoZWRcIiB8IFwidXBkYXRlZFwiPjtcbn1cblxuLyoqXG4gKiBSZWxlYXNlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgfCBcInB1Ymxpc2hlZFwiXG4gICAgfCBcInVucHVibGlzaGVkXCJcbiAgICB8IFwiY3JlYXRlZFwiXG4gICAgfCBcImVkaXRlZFwiXG4gICAgfCBcImRlbGV0ZWRcIlxuICAgIHwgXCJwcmVyZWxlYXNlZFwiXG4gICAgfCBcInJlbGVhc2VkXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBXYXRjaCBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcInN0YXJ0ZWRcIj47XG59XG5cbi8qKlxuICogV29ya2Zsb3cgcnVuIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1J1bk9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggd29ya2Zsb3cgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYW55IHdvcmtmbG93c1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dzPzogQXJyYXk8c3RyaW5nPjtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcImNvbXBsZXRlZFwiIHwgXCJyZXF1ZXN0ZWRcIj47XG4gIC8qKlxuICAgKiBXaGljaCBicmFuY2hlcyBvciBicmFuY2gtaWdub3JlIHRvIGxpbWl0IHRoZSB0cmlnZ2VyIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBubyBicmFuY2ggbGltaXRzXG4gICAqL1xuICByZWFkb25seSBicmFuY2hlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogVGhlIFdvcmtmbG93IGRpc3BhdGNoIGV2ZW50IG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dEaXNwYXRjaE9wdGlvbnMge1xuICAvKipcbiAgICogSW5wdXRzIGZvciB0aGUgd29ya2Zsb3dfZGlzcGF0Y2ggZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBpbnB1dHM/OiB7IFtuYW1lOiBzdHJpbmddOiBXb3JrZmxvd0Rpc3BhdGNoSW5wdXQgfTtcbn1cblxuLyoqXG4gKiBBbiBpbnB1dCBmb3IgYSB3b3JrZmxvd19kaXNwYXRjaCBldmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd0Rpc3BhdGNoSW5wdXQge1xuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgaW5wdXQuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGlucHV0LlxuICAgKiBAZGVmYXVsdCAtIG5vIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBpbnB1dC5cbiAgICogQGRlZmF1bHQgXCJzdHJpbmdcIlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IFwic3RyaW5nXCIgfCBcImJvb2xlYW5cIiB8IFwiY2hvaWNlXCIgfCBcIm51bWJlclwiIHwgXCJlbnZpcm9ubWVudFwiO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgaW5wdXQgaWYgdHlwZSBpcyAnY2hvaWNlJy5cbiAgICogQGRlZmF1bHQgLSBubyBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIFdvcmtmbG93IENhbGwgZXZlbnQgYWNjZXB0cyBubyBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93Q2FsbE9wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgQ3JlYXRlIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVPcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIERlbGV0ZSBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlT3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSBEZXBsb3ltZW50IGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50T3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSBEZXBsb3ltZW50IHN0YXR1cyBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YXR1c09wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgRm9yayBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ya09wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgR29sbHVtIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb2xsdW1PcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIFBhZ2UgYnVpbGQgZXZlbnQgYWNjZXB0cyBubyBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VCdWlsZE9wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgUHVibGljIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNPcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIFN0YXR1cyBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzT3B0aW9ucyB7fVxuLy8jZW5kcmVnaW9uXG4iXX0=
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVGQUF1Rjs7O0FBb1Z2Rjs7R0FFRztBQUNILElBQVksYUFTWDtBQVRELFdBQVksYUFBYTtJQUN2Qix1QkFBdUI7SUFDdkIsOEJBQWEsQ0FBQTtJQUViLHdCQUF3QjtJQUN4QixnQ0FBZSxDQUFBO0lBRWYsdUJBQXVCO0lBQ3ZCLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBVFcsYUFBYSw2QkFBYixhQUFhLFFBU3hCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGFBV1g7QUFYRCxXQUFZLGFBQWE7SUFDdkIsd0JBQXdCO0lBQ3hCLDhCQUFhLENBQUE7SUFDYix3QkFBd0I7SUFDeEIsZ0NBQWUsQ0FBQTtJQUNmOzs7O09BSUc7SUFDSCxnQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFYVyxhQUFhLDZCQUFiLGFBQWEsUUFXeEI7QUF3aUNELFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnNcblxuaW1wb3J0IHR5cGUgeyBHcm91cFJ1bm5lck9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25Kb2JEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBqb2IgZGlzcGxheWVkIG9uIEdpdEh1Yi5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgYW55IGpvYnMgdGhhdCBtdXN0IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSBiZWZvcmUgdGhpcyBqb2Igd2lsbFxuICAgKiBydW4uIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLiBJZiBhIGpvYiBmYWlscywgYWxsIGpvYnNcbiAgICogdGhhdCBuZWVkIGl0IGFyZSBza2lwcGVkIHVubGVzcyB0aGUgam9icyB1c2UgYSBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAqIHRoYXQgY2F1c2VzIHRoZSBqb2IgdG8gY29udGludWUuXG4gICAqL1xuICByZWFkb25seSBuZWVkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIG1vZGlmeSB0aGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBncmFudGVkIHRvIHRoZSBHSVRIVUJfVE9LRU4sIGFkZGluZ1xuICAgKiBvciByZW1vdmluZyBhY2Nlc3MgYXMgcmVxdWlyZWQsIHNvIHRoYXQgeW91IG9ubHkgYWxsb3cgdGhlIG1pbmltdW0gcmVxdWlyZWRcbiAgICogYWNjZXNzLlxuICAgKlxuICAgKiBVc2UgYHsgY29udGVudHM6IFJFQUQgfWAgaWYgeW91ciBqb2Igb25seSBuZWVkcyB0byBjbG9uZSBjb2RlLlxuICAgKlxuICAgKiBUaGlzIGlzIGludGVudGlvbmFsbHkgYSByZXF1aXJlZCBmaWVsZCBzaW5jZSBpdCBpcyByZXF1aXJlZCBpbiBvcmRlciB0b1xuICAgKiBhbGxvdyB3b3JrZmxvd3MgdG8gcnVuIGluIEdpdEh1YiByZXBvc2l0b3JpZXMgd2l0aCByZXN0cmljdGVkIGRlZmF1bHRcbiAgICogYWNjZXNzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL2F1dGhlbnRpY2F0aW9uLWluLWEtd29ya2Zsb3cjcGVybWlzc2lvbnMtZm9yLXRoZS1naXRodWJfdG9rZW5cbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zOiBKb2JQZXJtaXNzaW9ucztcblxuICAvKipcbiAgICogQ29uY3VycmVuY3kgZW5zdXJlcyB0aGF0IG9ubHkgYSBzaW5nbGUgam9iIG9yIHdvcmtmbG93IHVzaW5nIHRoZSBzYW1lXG4gICAqIGNvbmN1cnJlbmN5IGdyb3VwIHdpbGwgcnVuIGF0IGEgdGltZS4gQSBjb25jdXJyZW5jeSBncm91cCBjYW4gYmUgYW55XG4gICAqIHN0cmluZyBvciBleHByZXNzaW9uLiBUaGUgZXhwcmVzc2lvbiBjYW4gdXNlIGFueSBjb250ZXh0IGV4Y2VwdCBmb3IgdGhlXG4gICAqIHNlY3JldHMgY29udGV4dC5cbiAgICpcbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVuY3k/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgaWYgY29uZGl0aW9uYWwgdG8gcHJldmVudCBhIGpvYiBmcm9tIHJ1bm5pbmcgdW5sZXNzIGFcbiAgICogY29uZGl0aW9uIGlzIG1ldC4gWW91IGNhbiB1c2UgYW55IHN1cHBvcnRlZCBjb250ZXh0IGFuZCBleHByZXNzaW9uIHRvXG4gICAqIGNyZWF0ZSBhIGNvbmRpdGlvbmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgaWY/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RyYXRlZ3kgY3JlYXRlcyBhIGJ1aWxkIG1hdHJpeCBmb3IgeW91ciBqb2JzLiBZb3UgY2FuIGRlZmluZSBkaWZmZXJlbnRcbiAgICogdmFyaWF0aW9ucyB0byBydW4gZWFjaCBqb2IgaW4uXG4gICAqL1xuICByZWFkb25seSBzdHJhdGVneT86IEpvYlN0cmF0ZWd5O1xufVxuXG4vKipcbiAqIEEgR2l0SHViIFdvcmtmbG93IEpvYiBjYWxsaW5nIGEgcmV1c2FibGUgd29ya2Zsb3dcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iQ2FsbGluZ1JldXNhYmxlV29ya2Zsb3cgZXh0ZW5kcyBDb21tb25Kb2JEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBhbmQgdmVyc2lvbiBvZiBhIHJldXNhYmxlIHdvcmtmbG93IGZpbGUgdG8gcnVuIGFzIGEgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGEgam9iIGlzIHVzZWQgdG8gY2FsbCBhIHJldXNhYmxlIHdvcmtmbG93LCB5b3UgY2FuIHVzZSB3aXRoIHRvXG4gICAqIHByb3ZpZGUgYSBtYXAgb2YgaW5wdXRzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgY2FsbGVkIHdvcmtmbG93LlxuICAgKlxuICAgKiBBbGxvd2VkIGV4cHJlc3Npb24gY29udGV4dHM6IGBnaXRodWJgLCBhbmQgYG5lZWRzYC5cbiAgICovXG4gIHJlYWRvbmx5IHdpdGg/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuPjtcblxuICAvKipcbiAgICogV2hlbiBhIGpvYiBpcyB1c2VkIHRvIGNhbGwgYSByZXVzYWJsZSB3b3JrZmxvdywgeW91IGNhbiB1c2Ugc2VjcmV0cyB0b1xuICAgKiBwcm92aWRlIGEgbWFwIG9mIHNlY3JldHMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBjYWxsZWQgd29ya2Zsb3cuXG4gICAqXG4gICAqIFVzZSB0aGUgJ2luaGVyaXQnIGtleXdvcmQgdG8gcGFzcyBhbGwgdGhlIGNhbGxpbmcgd29ya2Zsb3cncyBzZWNyZXRzIHRvIHRoZSBjYWxsZWQgd29ya2Zsb3dcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHM/OiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEEgR2l0SHViIFdvcmtmbG93IGpvYiBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYiBleHRlbmRzIENvbW1vbkpvYkRlZmluaXRpb24ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbWFjaGluZSB0byBydW4gdGhlIGpvYiBvbi4gVGhlIG1hY2hpbmUgY2FuIGJlIGVpdGhlciBhXG4gICAqIEdpdEh1Yi1ob3N0ZWQgcnVubmVyIG9yIGEgc2VsZi1ob3N0ZWQgcnVubmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZSBbXCJ1YnVudHUtbGF0ZXN0XCJdXG4gICAqL1xuICByZWFkb25seSBydW5zT24/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogR2l0aHViIFJ1bm5lciBHcm91cCBzZWxlY3Rpb24gb3B0aW9uc1xuICAgKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIHRhcmdldCBSdW5uZXIgR3JvdXAgYnkgbmFtZSBhbmQvb3IgbGFiZWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBib3RoIGBydW5zT25gIGFuZCBgcnVuc09uR3JvdXBgIGFyZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnNPbkdyb3VwPzogR3JvdXBSdW5uZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBIGpvYiBjb250YWlucyBhIHNlcXVlbmNlIG9mIHRhc2tzIGNhbGxlZCBzdGVwcy4gU3RlcHMgY2FuIHJ1biBjb21tYW5kcyxcbiAgICogcnVuIHNldHVwIHRhc2tzLCBvciBydW4gYW4gYWN0aW9uIGluIHlvdXIgcmVwb3NpdG9yeSwgYSBwdWJsaWMgcmVwb3NpdG9yeSxcbiAgICogb3IgYW4gYWN0aW9uIHB1Ymxpc2hlZCBpbiBhIERvY2tlciByZWdpc3RyeS4gTm90IGFsbCBzdGVwcyBydW4gYWN0aW9ucyxcbiAgICogYnV0IGFsbCBhY3Rpb25zIHJ1biBhcyBhIHN0ZXAuIEVhY2ggc3RlcCBydW5zIGluIGl0cyBvd24gcHJvY2VzcyBpbiB0aGVcbiAgICogcnVubmVyIGVudmlyb25tZW50IGFuZCBoYXMgYWNjZXNzIHRvIHRoZSB3b3Jrc3BhY2UgYW5kIGZpbGVzeXN0ZW0uXG4gICAqIEJlY2F1c2Ugc3RlcHMgcnVuIGluIHRoZWlyIG93biBwcm9jZXNzLCBjaGFuZ2VzIHRvIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiBhcmUgbm90IHByZXNlcnZlZCBiZXR3ZWVuIHN0ZXBzLiBHaXRIdWIgcHJvdmlkZXMgYnVpbHQtaW4gc3RlcHMgdG8gc2V0IHVwXG4gICAqIGFuZCBjb21wbGV0ZSBhIGpvYi5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBzOiBKb2JTdGVwW107XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB0aGF0IHRoZSBqb2IgcmVmZXJlbmNlcy4gQWxsIGVudmlyb25tZW50IHByb3RlY3Rpb24gcnVsZXNcbiAgICogbXVzdCBwYXNzIGJlZm9yZSBhIGpvYiByZWZlcmVuY2luZyB0aGUgZW52aXJvbm1lbnQgaXMgc2VudCB0byBhIHJ1bm5lci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS9lbnZpcm9ubWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogdW5rbm93bjtcblxuICAvKipcbiAgICogQSBtYXAgb2Ygb3V0cHV0cyBmb3IgYSBqb2IuIEpvYiBvdXRwdXRzIGFyZSBhdmFpbGFibGUgdG8gYWxsIGRvd25zdHJlYW1cbiAgICogam9icyB0aGF0IGRlcGVuZCBvbiB0aGlzIGpvYi5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM/OiBSZWNvcmQ8c3RyaW5nLCBKb2JTdGVwT3V0cHV0PjtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYXJlIGF2YWlsYWJsZSB0byBhbGwgc3RlcHMgaW4gdGhlXG4gICAqIGpvYi4gWW91IGNhbiBhbHNvIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBlbnRpcmUgd29ya2Zsb3cgb3IgYW5cbiAgICogaW5kaXZpZHVhbCBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IHdpbGwgYXBwbHkgdG8gYWxsIHN0ZXBzIGluIHRoZSBqb2IuIFlvdVxuICAgKiBjYW4gYWxzbyBzZXQgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGVudGlyZSB3b3JrZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRzPzogSm9iRGVmYXVsdHM7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaW51dGVzIHRvIGxldCBhIGpvYiBydW4gYmVmb3JlIEdpdEh1YlxuICAgKiBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDM2MFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dE1pbnV0ZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFByZXZlbnRzIGEgd29ya2Zsb3cgcnVuIGZyb20gZmFpbGluZyB3aGVuIGEgam9iIGZhaWxzLiBTZXQgdG8gdHJ1ZSB0b1xuICAgKiBhbGxvdyBhIHdvcmtmbG93IHJ1biB0byBwYXNzIHdoZW4gdGhpcyBqb2IgZmFpbHMuXG4gICAqL1xuICByZWFkb25seSBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciB0byBydW4gYW55IHN0ZXBzIGluIGEgam9iIHRoYXQgZG9uJ3QgYWxyZWFkeSBzcGVjaWZ5IGFcbiAgICogY29udGFpbmVyLiBJZiB5b3UgaGF2ZSBzdGVwcyB0aGF0IHVzZSBib3RoIHNjcmlwdCBhbmQgY29udGFpbmVyIGFjdGlvbnMsXG4gICAqIHRoZSBjb250YWluZXIgYWN0aW9ucyB3aWxsIHJ1biBhcyBzaWJsaW5nIGNvbnRhaW5lcnMgb24gdGhlIHNhbWUgbmV0d29ya1xuICAgKiB3aXRoIHRoZSBzYW1lIHZvbHVtZSBtb3VudHMuXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXI/OiBDb250YWluZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGhvc3Qgc2VydmljZSBjb250YWluZXJzIGZvciBhIGpvYiBpbiBhIHdvcmtmbG93LiBTZXJ2aWNlXG4gICAqIGNvbnRhaW5lcnMgYXJlIHVzZWZ1bCBmb3IgY3JlYXRpbmcgZGF0YWJhc2VzIG9yIGNhY2hlIHNlcnZpY2VzIGxpa2UgUmVkaXMuXG4gICAqIFRoZSBydW5uZXIgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgRG9ja2VyIG5ldHdvcmsgYW5kIG1hbmFnZXMgdGhlIGxpZmVcbiAgICogY3ljbGUgb2YgdGhlIHNlcnZpY2UgY29udGFpbmVycy5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VzPzogUmVjb3JkPHN0cmluZywgQ29udGFpbmVyT3B0aW9ucz47XG5cbiAgLyoqXG4gICAqIFRvb2xzIHJlcXVpcmVkIGZvciB0aGlzIGpvYi4gVHJhbnNsYXRlcyBpbnRvIGBhY3Rpb25zL3NldHVwLXh4eGAgc3RlcHMgYXRcbiAgICogdGhlIGJlZ2lubmluZyBvZiB0aGUgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgdG9vbHM/OiBUb29scztcbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgdG9vbHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbHMge1xuICAvKipcbiAgICogU2V0dXAgamF2YS5cbiAgICogQGRlZmF1bHQgLSBub3QgaW5zdGFsbGVkXG4gICAqL1xuICByZWFkb25seSBqYXZhPzogSmF2YVRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgcHl0aG9uLlxuICAgKiBAZGVmYXVsdCAtIG5vdCBpbnN0YWxsZWRcbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbj86IFB5dGhvblRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgZ29sYW5nLlxuICAgKiBAZGVmYXVsdCAtIG5vdCBpbnN0YWxsZWRcbiAgICovXG4gIHJlYWRvbmx5IGdvPzogVG9vbFJlcXVpcmVtZW50O1xuXG4gIC8qKlxuICAgKiBTZXR1cCBub2RlLmpzXG4gICAqIEBkZWZhdWx0IC0gbm90IGluc3RhbGxlZFxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZT86IFRvb2xSZXF1aXJlbWVudDtcblxuICAvKipcbiAgICogU2V0dXAgLk5FVCBDb3JlXG4gICAqIEBkZWZhdWx0IC0gbm90IGluc3RhbGxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZG90bmV0PzogVG9vbFJlcXVpcmVtZW50O1xufVxuXG4vKipcbiAqIFZlcnNpb24gcmVxdWlyZW1lbnQgZm9yIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xSZXF1aXJlbWVudCB7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGF1dG9tYXRpYyBkZXBlbmRlbmN5IGNhY2hpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjYWNoZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVmVyc2lvbiByZXF1aXJlbWVudCBmb3IgUHl0aG9uIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvblRvb2xSZXF1aXJlbWVudCBleHRlbmRzIFRvb2xSZXF1aXJlbWVudCB7XG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZSBmb3IgY2FjaGluZyAoZS5nLiBcInBpcFwiLCBcInBpcGVudlwiLCBcInBvZXRyeVwiKS5cbiAgICogUmVxdWlyZWQgd2hlbiBgY2FjaGVgIGlzIHRydWUuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBWZXJzaW9uIHJlcXVpcmVtZW50IGZvciBKYXZhIHRvb2xzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEphdmFUb29sUmVxdWlyZW1lbnQgZXh0ZW5kcyBUb29sUmVxdWlyZW1lbnQge1xuICAvKipcbiAgICogVGhlIEpESyBkaXN0cmlidXRpb24gdG8gdXNlLlxuICAgKiBAZGVmYXVsdCBcImNvcnJldHRvXCJcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlIGZvciBjYWNoaW5nIChlLmcuIFwibWF2ZW5cIiwgXCJncmFkbGVcIiwgXCJzYnRcIikuXG4gICAqIFJlcXVpcmVkIHdoZW4gYGNhY2hlYCBpcyB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU1hbmFnZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGF2YWlsYWJsZSBzY29wZXMgYW5kIGFjY2VzcyB2YWx1ZXMgZm9yIHdvcmtmbG93IHBlcm1pc3Npb25zLiBJZiB5b3VcbiAqIHNwZWNpZnkgdGhlIGFjY2VzcyBmb3IgYW55IG9mIHRoZXNlIHNjb3BlcywgYWxsIHRob3NlIHRoYXQgYXJlIG5vdFxuICogc3BlY2lmaWVkIGFyZSBzZXQgdG8gYEpvYlBlcm1pc3Npb24uTk9ORWAsIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3JcbiAqIHdoZW4gbm9uZSBpcyBzcGVjaWZpZWQuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3dyaXRpbmctd29ya2Zsb3dzL2Nob29zaW5nLXdoYXQteW91ci13b3JrZmxvdy1kb2VzL2NvbnRyb2xsaW5nLXBlcm1pc3Npb25zLWZvci1naXRodWJfdG9rZW4jZGVmaW5pbmctYWNjZXNzLWZvci10aGUtZ2l0aHViX3Rva2VuLXBlcm1pc3Npb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iUGVybWlzc2lvbnMge1xuICByZWFkb25seSBhY3Rpb25zPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgYXR0ZXN0YXRpb25zPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgY2hlY2tzPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgY29udGVudHM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBkZXBsb3ltZW50cz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGlkVG9rZW4/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBpc3N1ZXM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBtb2RlbHM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBkaXNjdXNzaW9ucz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogSm9iUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcGFnZXM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBwdWxsUmVxdWVzdHM/OiBKb2JQZXJtaXNzaW9uO1xuICByZWFkb25seSBzZWN1cml0eUV2ZW50cz86IEpvYlBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHN0YXR1c2VzPzogSm9iUGVybWlzc2lvbjtcbn1cblxuLyoqXG4gKiBUaGUgcGVybWlzc2lvbnMgYXZhaWxhYmxlIHRvIGEgR2l0SHViIEFwcC5cbiAqXG4gKiBUeXBpY2FsbHkgYSB0b2tlbiBmb3IgYSBHaXRIdWIgQXBwIGhhcyBhbGwgdGhlIGF2YWlsYWJsZSBzY29wZXMvcGVybWlzc2lvbnMgYXZhaWxhYmxlIHRvIHRoZSBhcHBcbiAqIGl0c2VsZjsgaG93ZXZlciwgYSBtb3JlIGxpbWl0ZWQgc2V0IG9mIHBlcm1pc3Npb25zIGNhbiBiZSBzcGVjaWZpZWQuIFdoZW4gcGVybWlzc2lvbnMgYXJlIHByb3ZpZGVkLFxuICogKipvbmx5KiogdGhlIHNwZWNpZmllZCBwZXJtaXNzaW9ucyBhcmUgZ3JhbnRlZCB0byB0aGUgdG9rZW4uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9yZXN0L2FwcHMvYXBwcz9hcGlWZXJzaW9uPTIwMjItMTEtMjgjY3JlYXRlLWFuLWluc3RhbGxhdGlvbi1hY2Nlc3MtdG9rZW4tZm9yLWFuLWFwcFxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9jcmVhdGUtZ2l0aHViLWFwcC10b2tlbi9ibG9iL21haW4vYWN0aW9uLnltbCNMMjhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBQZXJtaXNzaW9ucyB7XG4gIHJlYWRvbmx5IGFjdGlvbnM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBhdHRlc3RhdGlvbnM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBhZG1pbmlzdHJhdGlvbj86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGNoZWNrcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGNvZGVzcGFjZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBjb250ZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGRlcGVuZGFib3RTZWNyZXRzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgZGVwbG95bWVudHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBlbWFpbEFkZHJlc3Nlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGVudmlyb25tZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGZvbGxvd2Vycz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IGdpdFNzaEtleXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBncGdLZXlzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgaW50ZXJhY3Rpb25MaW1pdHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBpc3N1ZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBtZW1iZXJzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25BZG1pbmlzdHJhdGlvbj86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkFubm91bmNlbWVudEJhbm5lcnM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25Db3BpbG90U2VhdE1hbmFnZW1lbnQ/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25DdXN0b21PcmdSb2xlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkN1c3RvbVByb3BlcnRpZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25DdXN0b21Sb2xlcz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkV2ZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkhvb2tzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uUGFja2FnZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25QZXJzb25hbEFjY2Vzc1Rva2VuUmVxdWVzdHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25QZXJzb25hbEFjY2Vzc1Rva2Vucz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblBsYW4/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25Qcm9qZWN0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblNlY3JldHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBvcmdhbml6YXRpb25TZWxmSG9zdGVkUnVubmVycz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IG9yZ25haXphdGlvblVzZXJCbG9ja2luZz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcGFnZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBwcm9maWxlPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgcmVwb3NpdG9yeUN1c3RvbVByb3BlcnRpZXM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSByZXBvc2l0b3J5SG9va3M/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSByZXBvc2l0b3J5UHJvamVjdHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzZWNyZXRTY2FubmluZ0FsZXJ0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHNlY3JldHM/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzZWN1cml0eUV2ZW50cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHNpbmdsZUZpbGU/OiBBcHBQZXJtaXNzaW9uO1xuICByZWFkb25seSBzdGFycmluZz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHN0YXR1c2VzPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgdGVhbURpc2N1c3Npb25zPzogQXBwUGVybWlzc2lvbjtcbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eUFsZXJ0cz86IEFwcFBlcm1pc3Npb247XG4gIHJlYWRvbmx5IHdvcmtmbG93cz86IEFwcFBlcm1pc3Npb247XG59XG5cbi8qKlxuICogQWNjZXNzIGxldmVsIGZvciB3b3JrZmxvdyBwZXJtaXNzaW9uIHNjb3Blcy5cbiAqL1xuZXhwb3J0IGVudW0gSm9iUGVybWlzc2lvbiB7XG4gIC8qKiBSZWFkLW9ubHkgYWNjZXNzICovXG4gIFJFQUQgPSBcInJlYWRcIixcblxuICAvKiogUmVhZC13cml0ZSBhY2Nlc3MgKi9cbiAgV1JJVEUgPSBcIndyaXRlXCIsXG5cbiAgLyoqIE5vIGFjY2VzcyBhdCBhbGwgKi9cbiAgTk9ORSA9IFwibm9uZVwiLFxufVxuXG4vKipcbiAqIFRoZSBwZXJtaXNzaW9ucyBhdmFpbGFibGUgZm9yIGFuIGFjY2VzcyB0b2tlbiBmb3IgYSBHaXRIdWIgQXBwLlxuICovXG5leHBvcnQgZW51bSBBcHBQZXJtaXNzaW9uIHtcbiAgLyoqIFJlYWQtb25seSBhY2NjZXNzICovXG4gIFJFQUQgPSBcInJlYWRcIixcbiAgLyoqIFJlYWQtd3JpdGUgYWNjZXNzICovXG4gIFdSSVRFID0gXCJ3cml0ZVwiLFxuICAvKipcbiAgICogUmVhZC13cml0ZSBhbmQgYWRtaW4gYWNjZXNzLlxuICAgKlxuICAgKiBOb3QgYWxsIHBlcm1pc3Npb25zIHN1cHBvcnQgYGFkbWluYC5cbiAgICovXG4gIEFETUlOID0gXCJhZG1pblwiLFxufVxuXG4vKipcbiAqIEFuIG91dHB1dCBiaW5kaW5nIGZvciBhIGpvYi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JTdGVwT3V0cHV0IHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgc3RlcCB0aGF0IGV4cG9zZXMgdGhlIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgam9iIG91dHB1dCB0aGF0IGlzIGJlaW5nIGJvdW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFsbCBzdGVwcyBpbiB0aGUgam9iLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYkRlZmF1bHRzIHtcbiAgLyoqIERlZmF1bHQgcnVuIHNldHRpbmdzLiAqL1xuICByZWFkb25seSBydW4/OiBSdW5TZXR0aW5ncztcbn1cblxuLyoqXG4gKiBSdW4gc2V0dGluZ3MgZm9yIGEgam9iLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1blNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFdoaWNoIHNoZWxsIHRvIHVzZSBmb3IgcnVubmluZyB0aGUgc3RlcC5cbiAgICpcbiAgICogQGV4YW1wbGUgXCJiYXNoXCJcbiAgICovXG4gIHJlYWRvbmx5IHNoZWxsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3JraW5nIGRpcmVjdG9yeSB0byB1c2Ugd2hlbiBydW5uaW5nIHRoZSBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGaWVsZHMgdGhhdCBkZXNjcmliZSB0aGUgSG93LCBXaHksIFdoZW4sIGFuZCBXaG8gb2YgYSBTdGVwLlxuICogVGhlc2UgZmllbGRzIGNhbiBoYXZlIG5vbmUgcHJlc2VudCwgYnV0IGNhbiBiZSBwcmVzZW50IG9uIGV2ZXJ5IFN0ZXAsIGFuZCBoYXZlIG5vIGVmZmVjdCBvbiBvbmUgYW5vdGhlci5cbiAqXG4gKiBUaGlzIHN0YW5kcyBpbiBjb250cmFzdCB0byB0aGUgQ29tbWFuZCAobm9uLUNvbmZpZ3VyYXRpb24pIGZpZWxkcywgd2hpY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgYW5kIGRlc2NyaWJlIHRoZSBXaGF0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzdGVwLiBZb3UgY2FuIHVzZSB0aGUgaWQgdG8gcmVmZXJlbmNlIHRoZVxuICAgKiBzdGVwIGluIGNvbnRleHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gdXNlIHRoZSBpZiBjb25kaXRpb25hbCB0byBwcmV2ZW50IGEgam9iIGZyb20gcnVubmluZyB1bmxlc3MgYVxuICAgKiBjb25kaXRpb24gaXMgbWV0LiBZb3UgY2FuIHVzZSBhbnkgc3VwcG9ydGVkIGNvbnRleHQgYW5kIGV4cHJlc3Npb24gdG9cbiAgICogY3JlYXRlIGEgY29uZGl0aW9uYWwuXG4gICAqL1xuICByZWFkb25seSBpZj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBuYW1lIGZvciB5b3VyIHN0ZXAgdG8gZGlzcGxheSBvbiBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXRzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3Igc3RlcHMgdG8gdXNlIGluIHRoZSBydW5uZXIgZW52aXJvbm1lbnQuXG4gICAqIFlvdSBjYW4gYWxzbyBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgZW50aXJlIHdvcmtmbG93IG9yIGEgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgd29ya2luZyBkaXJlY3RvcnkgZm9yIGEgc3RlcC5cbiAgICogT3ZlcnJpZGVzIGEgam9iJ3Mgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgc2hlbGwgc2V0dGluZ3MgaW4gdGhlIHJ1bm5lcidzIG9wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZSBqb2IncyBkZWZhdWx0LlxuICAgKlxuICAgKiBSZWZlciB0byBHaXRIdWIgZG9jdW1lbnRhdGlvbiBmb3IgYWxsb3dlZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy93cml0aW5nLXdvcmtmbG93cy93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2pvYnNqb2JfaWRzdGVwc3NoZWxsXG4gICAqL1xuICByZWFkb25seSBzaGVsbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGlzIGNvbnRhaW5zIHRoZSBmaWVsZHMgdGhhdCBhcmUgY29tbW9uIGFtb25nc3QgYm90aDpcbiAqIC0gSm9iU3RlcCwgd2hpY2ggaXMgYSBzdGVwIHRoYXQgaXMgcGFydCBvZiBhIEpvYiBpbiBHaXRodWIgQWN0aW9ucy4gVGhpcyBpcyBieSBmYXIgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlLlxuICogLSBUaGUgbWV0YWRhdGEgZmlsZSBgYWN0aW9uLnlhbWxgIHRoYXQgaXMgdXNlZCB0byBkZWZpbmUgYW4gQWN0aW9uIHdoZW4geW91IGFyZSBjcmVhdGluZyBvbmUuIEFzIGluLCBpZiB5b3Ugd2VyZSBjcmVhdGluZyBhbiBBY3Rpb24gdG8gYmUgdXNlZCBpbiBhIEpvYlN0ZXAuXG4gKiBUaGVyZSBpcyBzb21lIG92ZXJsYXAgYmV0d2VlbiB0aGUgdHdvLCBhbmQgdGhpcyBjYXB0dXJlcyB0aGF0IG92ZXJsYXAuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2NyZWF0aW5nLWFjdGlvbnMvbWV0YWRhdGEtc3ludGF4LWZvci1naXRodWItYWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXAgZXh0ZW5kcyBTdGVwQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBTZWxlY3RzIGFuIGFjdGlvbiB0byBydW4gYXMgcGFydCBvZiBhIHN0ZXAgaW4geW91ciBqb2IuIEFuIGFjdGlvbiBpcyBhXG4gICAqIHJldXNhYmxlIHVuaXQgb2YgY29kZS4gWW91IGNhbiB1c2UgYW4gYWN0aW9uIGRlZmluZWQgaW4gdGhlIHNhbWVcbiAgICogcmVwb3NpdG9yeSBhcyB0aGUgd29ya2Zsb3csIGEgcHVibGljIHJlcG9zaXRvcnksIG9yIGluIGEgcHVibGlzaGVkIERvY2tlclxuICAgKiBjb250YWluZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSB1c2VzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSdW5zIGNvbW1hbmQtbGluZSBwcm9ncmFtcyB1c2luZyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIHNoZWxsLiBJZiB5b3UgZG9cbiAgICogbm90IHByb3ZpZGUgYSBuYW1lLCB0aGUgc3RlcCBuYW1lIHdpbGwgZGVmYXVsdCB0byB0aGUgdGV4dCBzcGVjaWZpZWQgaW5cbiAgICogdGhlIHJ1biBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiB0aGUgaW5wdXQgcGFyYW1ldGVycyBkZWZpbmVkIGJ5IHRoZSBhY3Rpb24uIEVhY2ggaW5wdXQgcGFyYW1ldGVyXG4gICAqIGlzIGEga2V5L3ZhbHVlIHBhaXIuIElucHV0IHBhcmFtZXRlcnMgYXJlIHNldCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAqIFRoZSB2YXJpYWJsZSBpcyBwcmVmaXhlZCB3aXRoIElOUFVUXyBhbmQgY29udmVydGVkIHRvIHVwcGVyIGNhc2UuXG4gICAqL1xuICByZWFkb25seSB3aXRoPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBUaGVzZSBzZXR0aW5ncyBhcmUgdW5pcXVlIHRvIGEgSm9iU3RlcCBmcm9tIHRoZSBmaWVsZHMgY29udGFpbmVkIHdpdGhpbiB0aGUgbWV0YWRhdGEgYWN0aW9uLnlhbWwgZmlsZSBwcmVzZW50IGluIHdoZW4gY3JlYXRpbmcgYSBuZXcgR2l0SHViIEFjdGlvbi5cbiAqIFRoZXNlIGZpZWxkcyBhcmUgbm90IHByZXNlbnQgaW4gYWN0aW9uLnltbCwgYnV0IGFyZSBpbiBKb2JTdGVwLCB3aGljaCBhcmUgdXNpbmcgd2hlbiBjcmVhdGluZyB3b3JrZmxvd3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iU3RlcENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBTdGVwQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBQcmV2ZW50cyBhIGpvYiBmcm9tIGZhaWxpbmcgd2hlbiBhIHN0ZXAgZmFpbHMuIFNldCB0byB0cnVlIHRvIGFsbG93IGEgam9iXG4gICAqIHRvIHBhc3Mgd2hlbiB0aGlzIHN0ZXAgZmFpbHMuXG4gICAqL1xuICByZWFkb25seSBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWludXRlcyB0byBydW4gdGhlIHN0ZXAgYmVmb3JlIGtpbGxpbmcgdGhlIHByb2Nlc3MuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0TWludXRlcz86IG51bWJlcjtcblxuICAvKipcbiAgICogUnVucyBhIHN0ZXAgYXN5bmNocm9ub3VzbHkgc28gdGhlIGpvYiBjb250aW51ZXMgdG8gdGhlIG5leHQgc3RlcCB3aXRob3V0XG4gICAqIHdhaXRpbmcgZm9yIGl0IHRvIGZpbmlzaC4gVXNlIGZvciBsb25nLXJ1bm5pbmcgcHJvY2Vzc2VzLCBzdWNoIGFzXG4gICAqIGRhdGFiYXNlcywgc2VydmVycywgb3IgbW9uaXRvcmluZyB0YXNrcywgdGhhdCBuZWVkIHRvIHJ1biBhbG9uZ3NpZGUgb3RoZXJcbiAgICogc3RlcHMuXG4gICAqXG4gICAqIFN5bmNocm9uaXplIHdpdGggYmFja2dyb3VuZCBzdGVwcyBsYXRlciB1c2luZyBgd2FpdGAgb3IgYHdhaXRBbGxgLCBvclxuICAgKiBzdG9wIHRoZW0gd2l0aCBgY2FuY2VsYC4gR2l2ZSB0aGUgc3RlcCBhbiBgaWRgIHNvIGl0IGNhbiBiZSByZWZlcmVuY2VkLlxuICAgKlxuICAgKiBBIG1heGltdW0gb2YgMTAgYmFja2dyb3VuZCBzdGVwcyBjYW4gcnVuIGNvbmN1cnJlbnRseSBpbiBhIHNpbmdsZSBqb2I7XG4gICAqIGFkZGl0aW9uYWwgYmFja2dyb3VuZCBzdGVwcyBhcmUgcXVldWVkIHVudGlsIGEgc2xvdCBpcyBmcmVlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvd3JpdGluZy13b3JrZmxvd3Mvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyNqb2Jzam9iX2lkc3RlcHNiYWNrZ3JvdW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZ3JvdW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGF1c2VzIHRoZSBqb2IgdW50aWwgb25lIG9yIG1vcmUgYmFja2dyb3VuZCBzdGVwcyBjb21wbGV0ZS4gUHJvdmlkZSB0aGVcbiAgICogYGlkYHMgb2YgdGhlIGJhY2tncm91bmQgc3RlcHMgdG8gd2FpdCBmb3IuXG4gICAqXG4gICAqIFRoaXMgc3RlcCBwZXJmb3JtcyBubyB3b3JrIGl0c2VsZjsgaXQgb25seSBibG9ja3MgdW50aWwgdGhlIHJlZmVyZW5jZWRcbiAgICogYmFja2dyb3VuZCBzdGVwcyBmaW5pc2guIElmIGEgcmVmZXJlbmNlZCBiYWNrZ3JvdW5kIHN0ZXAgZmFpbGVkLCB0aGVcbiAgICogYHdhaXRgIHN0ZXAgZmFpbHMgdG9vLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvd3JpdGluZy13b3JrZmxvd3Mvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyNqb2Jzam9iX2lkc3RlcHN3YWl0XG4gICAqL1xuICByZWFkb25seSB3YWl0Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhdXNlcyB0aGUgam9iIHVudGlsIGFsbCBhY3RpdmUgYmFja2dyb3VuZCBzdGVwcyBjb21wbGV0ZS4gRmFpbHMgaWYgYW55XG4gICAqIG9mIHRoZSBiYWNrZ3JvdW5kIHN0ZXBzIGl0IHdhaXRzIG9uIGZhaWxlZCwgdW5sZXNzIGBjb250aW51ZU9uRXJyb3JgIGlzXG4gICAqIHNldCBvbiB0aGlzIHN0ZXAuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy93cml0aW5nLXdvcmtmbG93cy93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2pvYnNqb2JfaWRzdGVwc3dhaXQtYWxsXG4gICAqL1xuICByZWFkb25seSB3YWl0QWxsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogR3JhY2VmdWxseSB0ZXJtaW5hdGVzIGEgcnVubmluZyBiYWNrZ3JvdW5kIHN0ZXAsIHJlZmVyZW5jZWQgYnkgaXRzIGBpZGAuXG4gICAqIFRoZSBydW5uZXIgc2VuZHMgdGhlIHN0ZXAncyBwcm9jZXNzIGEgdGVybWluYXRpb24gc2lnbmFsIChTSUdURVJNKSBzbyBpdFxuICAgKiBjYW4gY2xlYW4gdXAsIGFuZCBmb3JjaWJseSBzdG9wcyBpdCAoU0lHS0lMTCkgaWYgaXQgZG9lcyBub3QgZXhpdCB3aXRoaW5cbiAgICogYSBzaG9ydCBncmFjZSBwZXJpb2QuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy93cml0aW5nLXdvcmtmbG93cy93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2pvYnNqb2JfaWRzdGVwc2NhbmNlbFxuICAgKi9cbiAgcmVhZG9ubHkgY2FuY2VsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSdW5zIGEgZ3JvdXAgb2Ygc3RlcHMgY29uY3VycmVudGx5LCB0aGVuIHdhaXRzIGZvciBhbGwgb2YgdGhlbSB0byBmaW5pc2hcbiAgICogYmVmb3JlIGNvbnRpbnVpbmcuIFRoaXMgaXMgc2hvcnRoYW5kIGZvciBkZWNsYXJpbmcgZWFjaCBzdGVwIHdpdGhcbiAgICogYGJhY2tncm91bmQ6IHRydWVgIGZvbGxvd2VkIGJ5IGEgYHdhaXRgIHN0ZXAuXG4gICAqXG4gICAqIFVzZSB0aGlzIHdoZW4geW91IGhhdmUgYSBzZWxmLWNvbnRhaW5lZCBncm91cCBvZiBpbmRlcGVuZGVudCBzdGVwcyB0aGF0XG4gICAqIGNhbiBhbGwgcnVuIGF0IHRoZSBzYW1lIHRpbWUgYW5kIGRvbid0IG5lZWQgdG8gYmUgcmVmZXJlbmNlZFxuICAgKiBpbmRpdmlkdWFsbHkuIFVzZSBgYmFja2dyb3VuZGAgaW5zdGVhZCB3aGVuIHlvdSBuZWVkIGZpbmVyIGNvbnRyb2wsIHN1Y2hcbiAgICogYXMgc3RhcnRpbmcgYSBsb25nLXJ1bm5pbmcgcHJvY2VzcyB0aGF0IHN0YXlzIHVwIHdoaWxlIGxhdGVyIHN0ZXBzIHJ1bi5cbiAgICpcbiAgICogRWFjaCBzdGVwIGluIHRoZSBncm91cCBpcyBzdWJqZWN0IHRvIHRoZSBzYW1lIDEwLXN0ZXAgY29uY3VycmVuY3kgbGltaXRcbiAgICogYXMgb3RoZXIgYmFja2dyb3VuZCBzdGVwcy4gQ2Fubm90IGJlIHVzZWQgaW5zaWRlIGEgY29tcG9zaXRlIGFjdGlvbi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3dyaXRpbmctd29ya2Zsb3dzL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMjam9ic2pvYl9pZHN0ZXBzcGFyYWxsZWxcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFsbGVsPzogSm9iU3RlcFtdO1xufVxuXG4vKipcbiAqIEpvYlN0ZXBzIHJ1biBhcyBwYXJ0IG9mIGEgR2l0SHViIFdvcmtmbG93IEpvYi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvdXNpbmctd29ya2Zsb3dzL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMjam9ic2pvYl9pZHN0ZXBzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iU3RlcCBleHRlbmRzIFN0ZXAsIEpvYlN0ZXBDb25maWd1cmF0aW9uIHt9XG5cbi8qKlxuICogQSBzdHJhdGVneSBjcmVhdGVzIGEgYnVpbGQgbWF0cml4IGZvciB5b3VyIGpvYnMuIFlvdSBjYW4gZGVmaW5lIGRpZmZlcmVudFxuICogdmFyaWF0aW9ucyB0byBydW4gZWFjaCBqb2IgaW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iU3RyYXRlZ3kge1xuICAvKipcbiAgICogWW91IGNhbiBkZWZpbmUgYSBtYXRyaXggb2YgZGlmZmVyZW50IGpvYiBjb25maWd1cmF0aW9ucy4gQSBtYXRyaXggYWxsb3dzXG4gICAqIHlvdSB0byBjcmVhdGUgbXVsdGlwbGUgam9icyBieSBwZXJmb3JtaW5nIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiBpbiBhXG4gICAqIHNpbmdsZSBqb2IgZGVmaW5pdGlvbi4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGEgbWF0cml4IHRvIGNyZWF0ZSBqb2JzXG4gICAqIGZvciBtb3JlIHRoYW4gb25lIHN1cHBvcnRlZCB2ZXJzaW9uIG9mIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9wZXJhdGluZ1xuICAgKiBzeXN0ZW0sIG9yIHRvb2wuIEEgbWF0cml4IHJldXNlcyB0aGUgam9iJ3MgY29uZmlndXJhdGlvbiBhbmQgY3JlYXRlcyBhXG4gICAqIGpvYiBmb3IgZWFjaCBtYXRyaXggeW91IGNvbmZpZ3VyZS5cbiAgICpcbiAgICogQSBqb2IgbWF0cml4IGNhbiBnZW5lcmF0ZSBhIG1heGltdW0gb2YgMjU2IGpvYnMgcGVyIHdvcmtmbG93IHJ1bi4gVGhpc1xuICAgKiBsaW1pdCBhbHNvIGFwcGxpZXMgdG8gc2VsZi1ob3N0ZWQgcnVubmVycy5cbiAgICovXG4gIHJlYWRvbmx5IG1hdHJpeD86IEpvYk1hdHJpeDtcblxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gdHJ1ZSwgR2l0SHViIGNhbmNlbHMgYWxsIGluLXByb2dyZXNzIGpvYnMgaWYgYW55IG1hdHJpeCBqb2JcbiAgICogZmFpbHMuIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGZhaWxGYXN0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGpvYnMgdGhhdCBjYW4gcnVuIHNpbXVsdGFuZW91c2x5IHdoZW4gdXNpbmcgYVxuICAgKiBtYXRyaXggam9iIHN0cmF0ZWd5LiBCeSBkZWZhdWx0LCBHaXRIdWIgd2lsbCBtYXhpbWl6ZSB0aGUgbnVtYmVyIG9mIGpvYnNcbiAgICogcnVuIGluIHBhcmFsbGVsIGRlcGVuZGluZyBvbiB0aGUgYXZhaWxhYmxlIHJ1bm5lcnMgb24gR2l0SHViLWhvc3RlZFxuICAgKiB2aXJ0dWFsIG1hY2hpbmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4UGFyYWxsZWw/OiBudW1iZXI7XG59XG5cbnR5cGUgSm9iTWF0cml4VmFsdWUgPSBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuXG4vKipcbiAqIEEgam9iIG1hdHJpeC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JNYXRyaXgge1xuICAvKipcbiAgICogRWFjaCBvcHRpb24geW91IGRlZmluZSBpbiB0aGUgbWF0cml4IGhhcyBhIGtleSBhbmQgdmFsdWUuIFRoZSBrZXlzIHlvdVxuICAgKiBkZWZpbmUgYmVjb21lIHByb3BlcnRpZXMgaW4gdGhlIG1hdHJpeCBjb250ZXh0IGFuZCB5b3UgY2FuIHJlZmVyZW5jZSB0aGVcbiAgICogcHJvcGVydHkgaW4gb3RoZXIgYXJlYXMgb2YgeW91ciB3b3JrZmxvdyBmaWxlLiBGb3IgZXhhbXBsZSwgaWYgeW91IGRlZmluZVxuICAgKiB0aGUga2V5IG9zIHRoYXQgY29udGFpbnMgYW4gYXJyYXkgb2Ygb3BlcmF0aW5nIHN5c3RlbXMsIHlvdSBjYW4gdXNlIHRoZVxuICAgKiBtYXRyaXgub3MgcHJvcGVydHkgYXMgdGhlIHZhbHVlIG9mIHRoZSBydW5zLW9uIGtleXdvcmQgdG8gY3JlYXRlIGEgam9iXG4gICAqIGZvciBlYWNoIG9wZXJhdGluZyBzeXN0ZW0uXG4gICAqL1xuICByZWFkb25seSBkb21haW4/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBKb2JNYXRyaXhWYWx1ZVtdPjtcblxuICAvKipcbiAgICogWW91IGNhbiBhZGQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYSBidWlsZCBtYXRyaXggam9iIHRoYXRcbiAgICogYWxyZWFkeSBleGlzdHMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byB1c2UgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIG5wbVxuICAgKiB3aGVuIHRoZSBqb2IgdGhhdCB1c2VzIHdpbmRvd3MtbGF0ZXN0IGFuZCB2ZXJzaW9uIDggb2Ygbm9kZSBydW5zLCB5b3UgY2FuXG4gICAqIHVzZSBpbmNsdWRlIHRvIHNwZWNpZnkgdGhhdCBhZGRpdGlvbmFsIG9wdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGU/OiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBKb2JNYXRyaXhWYWx1ZT4+O1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHJlbW92ZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGRlZmluZWQgaW4gdGhlIGJ1aWxkIG1hdHJpeFxuICAgKiB1c2luZyB0aGUgZXhjbHVkZSBvcHRpb24uIFVzaW5nIGV4Y2x1ZGUgcmVtb3ZlcyBhIGpvYiBkZWZpbmVkIGJ5IHRoZVxuICAgKiBidWlsZCBtYXRyaXguXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlPzogQXJyYXk8UmVjb3JkPHN0cmluZywgSm9iTWF0cml4VmFsdWU+Pjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHBlcnRhaW5pbmcgdG8gY29udGFpbmVyIGVudmlyb25tZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBEb2NrZXIgaW1hZ2UgdG8gdXNlIGFzIHRoZSBjb250YWluZXIgdG8gcnVuIHRoZSBhY3Rpb24uIFRoZSB2YWx1ZSBjYW5cbiAgICogYmUgdGhlIERvY2tlciBIdWIgaW1hZ2UgbmFtZSBvciBhIHJlZ2lzdHJ5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBpbWFnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBmIHRoZSBpbWFnZSdzIGNvbnRhaW5lciByZWdpc3RyeSByZXF1aXJlcyBhdXRoZW50aWNhdGlvbiB0byBwdWxsIHRoZVxuICAgKiBpbWFnZSwgeW91IGNhbiB1c2UgY3JlZGVudGlhbHMgdG8gc2V0IGEgbWFwIG9mIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQuXG4gICAqIFRoZSBjcmVkZW50aWFscyBhcmUgdGhlIHNhbWUgdmFsdWVzIHRoYXQgeW91IHdvdWxkIHByb3ZpZGUgdG8gdGhlIGRvY2tlclxuICAgKiBsb2dpbiBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbHM/OiBDb250YWluZXJDcmVkZW50aWFscztcblxuICAvKipcbiAgICogU2V0cyBhIG1hcCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlIGNvbnRhaW5lci5cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFNldHMgYW4gYXJyYXkgb2YgcG9ydHMgdG8gZXhwb3NlIG9uIHRoZSBjb250YWluZXIuXG4gICAqL1xuICByZWFkb25seSBwb3J0cz86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBTZXRzIGFuIGFycmF5IG9mIHZvbHVtZXMgZm9yIHRoZSBjb250YWluZXIgdG8gdXNlLiBZb3UgY2FuIHVzZSB2b2x1bWVzIHRvXG4gICAqIHNoYXJlIGRhdGEgYmV0d2VlbiBzZXJ2aWNlcyBvciBvdGhlciBzdGVwcyBpbiBhIGpvYi4gWW91IGNhbiBzcGVjaWZ5XG4gICAqIG5hbWVkIERvY2tlciB2b2x1bWVzLCBhbm9ueW1vdXMgRG9ja2VyIHZvbHVtZXMsIG9yIGJpbmQgbW91bnRzIG9uIHRoZVxuICAgKiBob3N0LlxuICAgKlxuICAgKiBUbyBzcGVjaWZ5IGEgdm9sdW1lLCB5b3Ugc3BlY2lmeSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwYXRoOlxuICAgKiBgPHNvdXJjZT46PGRlc3RpbmF0aW9uUGF0aD5gLlxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIERvY2tlciBjb250YWluZXIgcmVzb3VyY2Ugb3B0aW9ucy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2NvbW1hbmRsaW5lL2NyZWF0ZS8jb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENyZWRlbnRpYWxzIHRvIHVzZSB0byBhdXRoZW50aWNhdGUgdG8gRG9ja2VyIHJlZ2lzdHJpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyQ3JlZGVudGlhbHMge1xuICAvKiogVGhlIHVzZXJuYW1lLiAqL1xuICByZWFkb25seSB1c2VybmFtZTogc3RyaW5nO1xuXG4gIC8qKiBUaGUgcGFzc3dvcmQuICovXG4gIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHNldCBvZiBhdmFpbGFibGUgdHJpZ2dlcnMgZm9yIEdpdEh1YiBXb3JrZmxvd3MuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS9ldmVudHMtdGhhdC10cmlnZ2VyLXdvcmtmbG93c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyaWdnZXJzIHtcbiAgLy8jcmVnaW9uIFNjaGVkdWxlZCBldmVudHNcbiAgLyoqXG4gICAqIFlvdSBjYW4gc2NoZWR1bGUgYSB3b3JrZmxvdyB0byBydW4gYXQgc3BlY2lmaWMgVVRDIHRpbWVzIHVzaW5nIFBPU0lYIGNyb25cbiAgICogc3ludGF4LiBTY2hlZHVsZWQgd29ya2Zsb3dzIHJ1biBvbiB0aGUgbGF0ZXN0IGNvbW1pdCBvbiB0aGUgZGVmYXVsdCBvclxuICAgKiBiYXNlIGJyYW5jaC4gVGhlIHNob3J0ZXN0IGludGVydmFsIHlvdSBjYW4gcnVuIHNjaGVkdWxlZCB3b3JrZmxvd3MgaXNcbiAgICogb25jZSBldmVyeSA1IG1pbnV0ZXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9jcm9udGFiLmh0bWwjdGFnXzIwXzI1XzA3XG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZT86IENyb25TY2hlZHVsZU9wdGlvbnNbXTtcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIE1hbnVhbCBldmVudHNcbiAgLyoqXG4gICAqIFlvdSBjYW4gY29uZmlndXJlIGN1c3RvbS1kZWZpbmVkIGlucHV0IHByb3BlcnRpZXMsIGRlZmF1bHQgaW5wdXQgdmFsdWVzLFxuICAgKiBhbmQgcmVxdWlyZWQgaW5wdXRzIGZvciB0aGUgZXZlbnQgZGlyZWN0bHkgaW4geW91ciB3b3JrZmxvdy4gV2hlbiB0aGVcbiAgICogd29ya2Zsb3cgcnVucywgeW91IGNhbiBhY2Nlc3MgdGhlIGlucHV0IHZhbHVlcyBpbiB0aGUgZ2l0aHViLmV2ZW50LmlucHV0c1xuICAgKiBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dEaXNwYXRjaD86IFdvcmtmbG93RGlzcGF0Y2hPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgR2l0SHViIEFQSSB0byB0cmlnZ2VyIGEgd2ViaG9vayBldmVudCBjYWxsZWRcbiAgICogcmVwb3NpdG9yeV9kaXNwYXRjaCB3aGVuIHlvdSB3YW50IHRvIHRyaWdnZXIgYSB3b3JrZmxvdyBmb3IgYWN0aXZpdHkgdGhhdFxuICAgKiBoYXBwZW5zIG91dHNpZGUgb2YgR2l0SHViLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeURpc3BhdGNoPzogUmVwb3NpdG9yeURpc3BhdGNoT3B0aW9ucztcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFdvcmtmbG93IHJldXNlIGV2ZW50c1xuICAvKipcbiAgICogQ2FuIGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgd29ya2Zsb3dcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2xlYXJuLWdpdGh1Yi1hY3Rpb25zL3JldXNpbmctd29ya2Zsb3dzXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd0NhbGw/OiBXb3JrZmxvd0NhbGxPcHRpb25zO1xuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gV2ViaG9vayBldmVudHNcbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBicmFuY2hfcHJvdGVjdGlvbl9ydWxlIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaFByb3RlY3Rpb25SdWxlPzogQnJhbmNoUHJvdGVjdGlvblJ1bGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgY2hlY2tfcnVuIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrUnVuPzogQ2hlY2tSdW5PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgY2hlY2tfc3VpdGUgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tTdWl0ZT86IENoZWNrU3VpdGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBzb21lb25lIGNyZWF0ZXMgYSBicmFuY2ggb3IgdGFnLCB3aGljaFxuICAgKiB0cmlnZ2VycyB0aGUgY3JlYXRlIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlPzogQ3JlYXRlT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgc29tZW9uZSBkZWxldGVzIGEgYnJhbmNoIG9yIHRhZywgd2hpY2hcbiAgICogdHJpZ2dlcnMgdGhlIGRlbGV0ZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0ZT86IERlbGV0ZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHNvbWVvbmUgY3JlYXRlcyBhIGRlcGxveW1lbnQsIHdoaWNoIHRyaWdnZXJzXG4gICAqIHRoZSBkZXBsb3ltZW50IGV2ZW50LiBEZXBsb3ltZW50cyBjcmVhdGVkIHdpdGggYSBjb21taXQgU0hBIG1heSBub3QgaGF2ZVxuICAgKiBhIEdpdCByZWYuXG4gICAqL1xuICByZWFkb25seSBkZXBsb3ltZW50PzogRGVwbG95bWVudE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIGEgdGhpcmQgcGFydHkgcHJvdmlkZXMgYSBkZXBsb3ltZW50IHN0YXR1cyxcbiAgICogd2hpY2ggdHJpZ2dlcnMgdGhlIGRlcGxveW1lbnRfc3RhdHVzIGV2ZW50LiBEZXBsb3ltZW50cyBjcmVhdGVkIHdpdGggYVxuICAgKiBjb21taXQgU0hBIG1heSBub3QgaGF2ZSBhIEdpdCByZWYuXG4gICAqL1xuICByZWFkb25seSBkZXBsb3ltZW50U3RhdHVzPzogRGVwbG95bWVudFN0YXR1c09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBkaXNjdXNzaW9uIGV2ZW50IG9jY3Vycy4gTW9yZSB0aGFuIG9uZSBhY3Rpdml0eSB0eXBlIHRyaWdnZXJzIHRoaXMgZXZlbnQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vZ3JhcGhxbC9ndWlkZXMvdXNpbmctdGhlLWdyYXBocWwtYXBpLWZvci1kaXNjdXNzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZGlzY3Vzc2lvbj86IERpc2N1c3Npb25PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgZGlzY3Vzc2lvbl9jb21tZW50IGV2ZW50IG9jY3Vycy4gTW9yZSB0aGFuIG9uZSBhY3Rpdml0eSB0eXBlIHRyaWdnZXJzIHRoaXMgZXZlbnQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vZ3JhcGhxbC9ndWlkZXMvdXNpbmctdGhlLWdyYXBocWwtYXBpLWZvci1kaXNjdXNzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZGlzY3Vzc2lvbkNvbW1lbnQ/OiBEaXNjdXNzaW9uQ29tbWVudE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHdoZW4gc29tZW9uZSBmb3JrcyBhIHJlcG9zaXRvcnksIHdoaWNoXG4gICAqIHRyaWdnZXJzIHRoZSBmb3JrIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZm9yaz86IEZvcmtPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgd2hlbiBzb21lb25lIGNyZWF0ZXMgb3IgdXBkYXRlcyBhIFdpa2kgcGFnZSwgd2hpY2hcbiAgICogdHJpZ2dlcnMgdGhlIGdvbGx1bSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGdvbGx1bT86IEdvbGx1bU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBpc3N1ZV9jb21tZW50IGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGlzc3VlQ29tbWVudD86IElzc3VlQ29tbWVudE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBpc3N1ZXMgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNzdWVzPzogSXNzdWVzT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIGxhYmVsIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsPzogTGFiZWxPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgd2hlbiBhIHB1bGwgcmVxdWVzdCBpcyBhZGRlZCB0byBhIG1lcmdlIHF1ZXVlLCB3aGljaFxuICAgKiBhZGRzIHRoZSBwdWxsIHJlcXVlc3QgdG8gYSBtZXJnZSBncm91cC5cbiAgICpcbiAgICogQHN0YWJpbGl0eSBleHBlcmltZW50YWxcbiAgICovXG4gIHJlYWRvbmx5IG1lcmdlR3JvdXA/OiBNZXJnZUdyb3VwT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIG1pbGVzdG9uZSBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBtaWxlc3RvbmU/OiBNaWxlc3RvbmVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSBzb21lb25lIHB1c2hlcyB0byBhIEdpdEh1YiBQYWdlcy1lbmFibGVkXG4gICAqIGJyYW5jaCwgd2hpY2ggdHJpZ2dlcnMgdGhlIHBhZ2VfYnVpbGQgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBwYWdlQnVpbGQ/OiBQYWdlQnVpbGRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgcHJvamVjdCBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0PzogUHJvamVjdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBwcm9qZWN0X2NhcmQgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdENhcmQ/OiBQcm9qZWN0Q2FyZE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHRoZSBwcm9qZWN0X2NvbHVtbiBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0Q29sdW1uPzogUHJvamVjdENvbHVtbk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIHNvbWVvbmUgbWFrZXMgYSBwcml2YXRlIHJlcG9zaXRvcnkgcHVibGljLFxuICAgKiB3aGljaCB0cmlnZ2VycyB0aGUgcHVibGljIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljPzogUHVibGljT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIHB1bGxfcmVxdWVzdCBldmVudCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdD86IFB1bGxSZXF1ZXN0T3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIHB1bGxfcmVxdWVzdF9yZXZpZXcgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RSZXZpZXc/OiBQdWxsUmVxdWVzdFJldmlld09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1bnMgeW91ciB3b3JrZmxvdyBhbnl0aW1lIGEgY29tbWVudCBvbiBhIHB1bGwgcmVxdWVzdCdzIHVuaWZpZWQgZGlmZiBpc1xuICAgKiBtb2RpZmllZCwgd2hpY2ggdHJpZ2dlcnMgdGhlIHB1bGxfcmVxdWVzdF9yZXZpZXdfY29tbWVudCBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudD86IFB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgcnVucyBpbiB0aGUgY29udGV4dCBvZiB0aGUgYmFzZSBvZiB0aGUgcHVsbCByZXF1ZXN0LCByYXRoZXJcbiAgICogdGhhbiBpbiB0aGUgbWVyZ2UgY29tbWl0IGFzIHRoZSBwdWxsX3JlcXVlc3QgZXZlbnQgZG9lcy4gVGhpcyBwcmV2ZW50c1xuICAgKiBleGVjdXRpbmcgdW5zYWZlIHdvcmtmbG93IGNvZGUgZnJvbSB0aGUgaGVhZCBvZiB0aGUgcHVsbCByZXF1ZXN0IHRoYXRcbiAgICogY291bGQgYWx0ZXIgeW91ciByZXBvc2l0b3J5IG9yIHN0ZWFsIGFueSBzZWNyZXRzIHlvdSB1c2UgaW4geW91ciB3b3JrZmxvdy5cbiAgICogVGhpcyBldmVudCBhbGxvd3MgeW91IHRvIGRvIHRoaW5ncyBsaWtlIGNyZWF0ZSB3b3JrZmxvd3MgdGhhdCBsYWJlbCBhbmRcbiAgICogY29tbWVudCBvbiBwdWxsIHJlcXVlc3RzIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgZXZlbnQgcGF5bG9hZC5cbiAgICpcbiAgICogV0FSTklORzogVGhlIGBwdWxsX3JlcXVlc3RfdGFyZ2V0YCBldmVudCBpcyBncmFudGVkIHJlYWQvd3JpdGUgcmVwb3NpdG9yeVxuICAgKiB0b2tlbiBhbmQgY2FuIGFjY2VzcyBzZWNyZXRzLCBldmVuIHdoZW4gaXQgaXMgdHJpZ2dlcmVkIGZyb20gYSBmb3JrLlxuICAgKiBBbHRob3VnaCB0aGUgd29ya2Zsb3cgcnVucyBpbiB0aGUgY29udGV4dCBvZiB0aGUgYmFzZSBvZiB0aGUgcHVsbCByZXF1ZXN0LFxuICAgKiB5b3Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHlvdSBkbyBub3QgY2hlY2sgb3V0LCBidWlsZCwgb3IgcnVuIHVudHJ1c3RlZFxuICAgKiBjb2RlIGZyb20gdGhlIHB1bGwgcmVxdWVzdCB3aXRoIHRoaXMgZXZlbnQuIEFkZGl0aW9uYWxseSwgYW55IGNhY2hlc1xuICAgKiBzaGFyZSB0aGUgc2FtZSBzY29wZSBhcyB0aGUgYmFzZSBicmFuY2gsIGFuZCB0byBoZWxwIHByZXZlbnQgY2FjaGVcbiAgICogcG9pc29uaW5nLCB5b3Ugc2hvdWxkIG5vdCBzYXZlIHRoZSBjYWNoZSBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXRcbiAgICogdGhlIGNhY2hlIGNvbnRlbnRzIHdlcmUgYWx0ZXJlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3NlY3VyaXR5bGFiLmdpdGh1Yi5jb20vcmVzZWFyY2gvZ2l0aHViLWFjdGlvbnMtcHJldmVudGluZy1wd24tcmVxdWVzdHNcbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0VGFyZ2V0PzogUHVsbFJlcXVlc3RUYXJnZXRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgd2hlbiBzb21lb25lIHB1c2hlcyB0byBhIHJlcG9zaXRvcnkgYnJhbmNoLCB3aGljaFxuICAgKiB0cmlnZ2VycyB0aGUgcHVzaCBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHB1c2g/OiBQdXNoT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgYSBwYWNrYWdlIGlzIHB1Ymxpc2hlZCBvciB1cGRhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0cnlQYWNrYWdlPzogUmVnaXN0cnlQYWNrYWdlT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIHJlbGVhc2UgZXZlbnQgb2NjdXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVsZWFzZT86IFJlbGVhc2VPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW5zIHlvdXIgd29ya2Zsb3cgYW55dGltZSB0aGUgc3RhdHVzIG9mIGEgR2l0IGNvbW1pdCBjaGFuZ2VzLCB3aGljaFxuICAgKiB0cmlnZ2VycyB0aGUgc3RhdHVzIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogU3RhdHVzT3B0aW9ucztcblxuICAvKipcbiAgICogUnVucyB5b3VyIHdvcmtmbG93IGFueXRpbWUgdGhlIHdhdGNoIGV2ZW50IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHdhdGNoPzogV2F0Y2hPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IG9jY3VycyB3aGVuIGEgd29ya2Zsb3cgcnVuIGlzIHJlcXVlc3RlZCBvciBjb21wbGV0ZWQsIGFuZFxuICAgKiBhbGxvd3MgeW91IHRvIGV4ZWN1dGUgYSB3b3JrZmxvdyBiYXNlZCBvbiB0aGUgZmluaXNoZWQgcmVzdWx0IG9mIGFub3RoZXJcbiAgICogd29ya2Zsb3cuIEEgd29ya2Zsb3cgcnVuIGlzIHRyaWdnZXJlZCByZWdhcmRsZXNzIG9mIHRoZSByZXN1bHQgb2YgdGhlXG4gICAqIHByZXZpb3VzIHdvcmtmbG93LlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dSdW4/OiBXb3JrZmxvd1J1bk9wdGlvbnM7XG4gIC8vI2VuZHJlZ2lvblxufVxuXG4vKipcbiAqIENST04gc2NoZWR1bGUgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcm9uU2NoZWR1bGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9jcm9udGFiLmh0bWwjdGFnXzIwXzI1XzA3XG4gICAqL1xuICByZWFkb25seSBjcm9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwb3NpdG9yeSBkaXNwYXRjaCBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9zaXRvcnlEaXNwYXRjaE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEJyYW5jaCBQcm90ZWN0aW9uIFJ1bGUgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5jaFByb3RlY3Rpb25SdWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJjcmVhdGVkXCIgfCBcImVkaXRlZFwiIHwgXCJkZWxldGVkXCI+O1xufVxuXG4vKipcbiAqIENoZWNrIHJ1biBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrUnVuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgXCJjcmVhdGVcIiB8IFwicmVyZXF1ZXN0ZWRcIiB8IFwiY29tcGxldGVkXCIgfCBcInJlcXVlc3RlZF9hY3Rpb25cIlxuICA+O1xufVxuXG4vKipcbiAqIENoZWNrIHN1aXRlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja1N1aXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJjb21wbGV0ZWRcIiB8IFwicmVxdWVzdGVkXCIgfCBcInJlcmVxdWVzdGVkXCI+O1xufVxuXG4vKipcbiAqIERpc2N1c3Npb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc2N1c3Npb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcbiAgICB8IFwiY3JlYXRlZFwiXG4gICAgfCBcImVkaXRlZFwiXG4gICAgfCBcInRyYW5zZmVycmVkXCJcbiAgICB8IFwicGlubmVkXCJcbiAgICB8IFwidW5waW5uZWRcIlxuICAgIHwgXCJsYWJlbGVkXCJcbiAgICB8IFwidW5sYWJlbGVkXCJcbiAgICB8IFwibG9ja2VkXCJcbiAgICB8IFwidW5sb2NrZWRcIlxuICAgIHwgXCJjYXRlZ29yeV9jaGFuZ2VkXCJcbiAgICB8IFwiYW5zd2VyZWRcIlxuICAgIHwgXCJ1bmFuc3dlcmVkXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBEaXNjdXNzaW9uIGNvbW1lbnQgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc2N1c3Npb25Db21tZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJjcmVhdGVkXCIgfCBcImVkaXRlZFwiIHwgXCJkZWxldGVkXCI+O1xufVxuXG4vKipcbiAqIElzc3VlIGNvbW1lbnQgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElzc3VlQ29tbWVudE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY3JlYXRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBJc3N1ZXMgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElzc3Vlc09wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIHwgXCJvcGVuZWRcIlxuICAgIHwgXCJlZGl0ZWRcIlxuICAgIHwgXCJkZWxldGVkXCJcbiAgICB8IFwidHJhbnNmZXJyZWRcIlxuICAgIHwgXCJwaW5uZWRcIlxuICAgIHwgXCJ1bnBpbm5lZFwiXG4gICAgfCBcImNsb3NlZFwiXG4gICAgfCBcInJlb3BlbmVkXCJcbiAgICB8IFwiYXNzaWduZWRcIlxuICAgIHwgXCJ1bmFzc2lnbmVkXCJcbiAgICB8IFwibGFiZWxlZFwiXG4gICAgfCBcInVubGFiZWxlZFwiXG4gICAgfCBcImxvY2tlZFwiXG4gICAgfCBcInVubG9ja2VkXCJcbiAgICB8IFwibWlsZXN0b25lZFwiXG4gICAgfCBcImRlbWlsZXN0b25lZFwiXG4gID47XG59XG5cbi8qKlxuICogTGFiZWwgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJjcmVhdGVkXCIgfCBcImVkaXRlZFwiIHwgXCJkZWxldGVkXCI+O1xufVxuXG4vKipcbiAqIE1lcmdlIGdyb3VwIG9wdGlvbnMuXG4gKlxuICogQHN0YWJpbGl0eSBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXJnZUdyb3VwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBtZXJnZV9ncm91cCBldmVudHMsIHlvdSBjYW4gY29uZmlndXJlIGEgd29ya2Zsb3dcbiAgICogdG8gcnVuIG9uIHNwZWNpZmljIGJhc2UgYnJhbmNoZXMuIElmIG5vdCBzcGVjaWZpZWQsIGFsbCBicmFuY2hlcyB3aWxsXG4gICAqIHRyaWdnZXIgdGhlIHdvcmtmbG93LlxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBNaWxlc3RvbmUgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbGVzdG9uZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFxuICAgIFwiY3JlYXRlZFwiIHwgXCJjbG9zZWRcIiB8IFwib3BlbmVkXCIgfCBcImVkaXRlZFwiIHwgXCJkZWxldGVkXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBQcm9qZWN0IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgXCJjcmVhdGVkXCIgfCBcInVwZGF0ZWRcIiB8IFwiY2xvc2VkXCIgfCBcInJlb3BlbmVkXCIgfCBcImVkaXRlZFwiIHwgXCJkZWxldGVkXCJcbiAgPjtcbn1cblxuLyoqXG4gKiBQcm9qZWN0IGNhcmQgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2plY3RDYXJkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgXCJjcmVhdGVkXCIgfCBcIm1vdmVkXCIgfCBcImNvbnZlcnRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGVsZXRlZFwiXG4gID47XG59XG5cbi8qKlxuICogUHJvYmplY3QgY29sdW1uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0Q29sdW1uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJjcmVhdGVkXCIgfCBcInVwZGF0ZWRcIiB8IFwibW92ZWRcIiB8IFwiZGVsZXRlZFwiPjtcbn1cblxuLyoqXG4gKiBQdWxsIHJlcXVlc3Qgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1bGxSZXF1ZXN0T3B0aW9ucyBleHRlbmRzIFB1c2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcbiAgICB8IFwiYXNzaWduZWRcIlxuICAgIHwgXCJ1bmFzc2lnbmVkXCJcbiAgICB8IFwibGFiZWxlZFwiXG4gICAgfCBcInVubGFiZWxlZFwiXG4gICAgfCBcIm9wZW5lZFwiXG4gICAgfCBcImVkaXRlZFwiXG4gICAgfCBcImNsb3NlZFwiXG4gICAgfCBcInJlb3BlbmVkXCJcbiAgICB8IFwic3luY2hyb25pemVcIlxuICAgIHwgXCJyZWFkeV9mb3JfcmV2aWV3XCJcbiAgICB8IFwibG9ja2VkXCJcbiAgICB8IFwidW5sb2NrZWRcIlxuICAgIHwgXCJyZXZpZXdfcmVxdWVzdGVkXCJcbiAgICB8IFwicmV2aWV3X3JlcXVlc3RfcmVtb3ZlZFwiXG4gID47XG59XG5cbi8qKlxuICogUHVsbCByZXF1ZXN0IHJldmlldyBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVsbFJlcXVlc3RSZXZpZXdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcInN1Ym1pdHRlZFwiIHwgXCJlZGl0ZWRcIiB8IFwiZGlzbWlzc2VkXCI+O1xufVxuXG4vKipcbiAqIFB1bGwgcmVxdWVzdCByZXZpZXcgY29tbWVudCBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XCJjcmVhdGVkXCIgfCBcImVkaXRlZFwiIHwgXCJkZWxldGVkXCI+O1xufVxuXG4vKipcbiAqIFB1bGwgcmVxdWVzdCB0YXJnZXQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWxsUmVxdWVzdFRhcmdldE9wdGlvbnMgZXh0ZW5kcyBQdXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCBhY3Rpdml0eSB0eXBlcyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbGwgYWN0aXZpdHkgdHlwZXNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVzPzogQXJyYXk8XG4gICAgfCBcImFzc2lnbmVkXCJcbiAgICB8IFwidW5hc3NpZ25lZFwiXG4gICAgfCBcImxhYmVsZWRcIlxuICAgIHwgXCJ1bmxhYmVsZWRcIlxuICAgIHwgXCJvcGVuZWRcIlxuICAgIHwgXCJlZGl0ZWRcIlxuICAgIHwgXCJjbG9zZWRcIlxuICAgIHwgXCJyZW9wZW5lZFwiXG4gICAgfCBcInN5bmNocm9uaXplXCJcbiAgICB8IFwicmVhZHlfZm9yX3Jldmlld1wiXG4gICAgfCBcImxvY2tlZFwiXG4gICAgfCBcInVubG9ja2VkXCJcbiAgICB8IFwicmV2aWV3X3JlcXVlc3RlZFwiXG4gICAgfCBcInJldmlld19yZXF1ZXN0X3JlbW92ZWRcIlxuICA+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHB1c2gtbGlrZSBldmVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVzaE9wdGlvbnMge1xuICAvKipcbiAgICogV2hlbiB1c2luZyB0aGUgcHVzaCwgcHVsbF9yZXF1ZXN0IGFuZCBwdWxsX3JlcXVlc3RfdGFyZ2V0IGV2ZW50cywgeW91IGNhbiBjb25maWd1cmUgYSB3b3JrZmxvd1xuICAgKiB0byBydW4gb24gc3BlY2lmaWMgYnJhbmNoZXMgb3IgdGFncy4gRm9yIGEgcHVsbF9yZXF1ZXN0IGV2ZW50LCBvbmx5XG4gICAqIGJyYW5jaGVzIGFuZCB0YWdzIG9uIHRoZSBiYXNlIGFyZSBldmFsdWF0ZWQuIElmIHlvdSBkZWZpbmUgb25seSB0YWdzIG9yXG4gICAqIG9ubHkgYnJhbmNoZXMsIHRoZSB3b3JrZmxvdyB3b24ndCBydW4gZm9yIGV2ZW50cyBhZmZlY3RpbmcgdGhlIHVuZGVmaW5lZFxuICAgKiBHaXQgcmVmLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMjZmlsdGVyLXBhdHRlcm4tY2hlYXQtc2hlZXRcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNpbmcgdGhlIHB1c2gsIHB1bGxfcmVxdWVzdCBhbmQgcHVsbF9yZXF1ZXN0X3RhcmdldCBldmVudHMsIHlvdSBjYW4gY29uZmlndXJlIGEgd29ya2Zsb3dcbiAgICogdG8gcnVuIG9uIHNwZWNpZmljIGJyYW5jaGVzIG9yIHRhZ3MuIEZvciBhIHB1bGxfcmVxdWVzdCBldmVudCwgb25seVxuICAgKiBicmFuY2hlcyBhbmQgdGFncyBvbiB0aGUgYmFzZSBhcmUgZXZhbHVhdGVkLiBJZiB5b3UgZGVmaW5lIG9ubHkgdGFncyBvclxuICAgKiBvbmx5IGJyYW5jaGVzLCB0aGUgd29ya2Zsb3cgd29uJ3QgcnVuIGZvciBldmVudHMgYWZmZWN0aW5nIHRoZSB1bmRlZmluZWRcbiAgICogR2l0IHJlZi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3JlZmVyZW5jZS93b3JrZmxvdy1zeW50YXgtZm9yLWdpdGh1Yi1hY3Rpb25zI2ZpbHRlci1wYXR0ZXJuLWNoZWF0LXNoZWV0XG4gICAqL1xuICByZWFkb25seSB0YWdzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNpbmcgdGhlIHB1c2gsIHB1bGxfcmVxdWVzdCBhbmQgcHVsbF9yZXF1ZXN0X3RhcmdldCBldmVudHMsIHlvdSBjYW4gY29uZmlndXJlIGEgd29ya2Zsb3dcbiAgICogdG8gcnVuIHdoZW4gYXQgbGVhc3Qgb25lIGZpbGUgZG9lcyBub3QgbWF0Y2ggcGF0aHMtaWdub3JlIG9yIGF0IGxlYXN0IG9uZVxuICAgKiBtb2RpZmllZCBmaWxlIG1hdGNoZXMgdGhlIGNvbmZpZ3VyZWQgcGF0aHMuIFBhdGggZmlsdGVycyBhcmUgbm90XG4gICAqIGV2YWx1YXRlZCBmb3IgcHVzaGVzIHRvIHRhZ3MuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9yZWZlcmVuY2Uvd29ya2Zsb3ctc3ludGF4LWZvci1naXRodWItYWN0aW9ucyNmaWx0ZXItcGF0dGVybi1jaGVhdC1zaGVldFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZWdpc3RyeSBwYWNrYWdlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyeVBhY2thZ2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcInB1Ymxpc2hlZFwiIHwgXCJ1cGRhdGVkXCI+O1xufVxuXG4vKipcbiAqIFJlbGVhc2Ugb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbGVhc2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoaWNoIGFjdGl2aXR5IHR5cGVzIHRvIHRyaWdnZXIgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIGFsbCBhY3Rpdml0eSB0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBBcnJheTxcbiAgICB8IFwicHVibGlzaGVkXCJcbiAgICB8IFwidW5wdWJsaXNoZWRcIlxuICAgIHwgXCJjcmVhdGVkXCJcbiAgICB8IFwiZWRpdGVkXCJcbiAgICB8IFwiZGVsZXRlZFwiXG4gICAgfCBcInByZXJlbGVhc2VkXCJcbiAgICB8IFwicmVsZWFzZWRcIlxuICA+O1xufVxuXG4vKipcbiAqIFdhdGNoIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXRjaE9wdGlvbnMge1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwic3RhcnRlZFwiPjtcbn1cblxuLyoqXG4gKiBXb3JrZmxvdyBydW4gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93UnVuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGljaCB3b3JrZmxvdyB0byB0cmlnZ2VyIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdHMgLSBhbnkgd29ya2Zsb3dzXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd3M/OiBBcnJheTxzdHJpbmc+O1xuICAvKipcbiAgICogV2hpY2ggYWN0aXZpdHkgdHlwZXMgdG8gdHJpZ2dlciBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRzIC0gYWxsIGFjdGl2aXR5IHR5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IEFycmF5PFwiY29tcGxldGVkXCIgfCBcInJlcXVlc3RlZFwiPjtcbiAgLyoqXG4gICAqIFdoaWNoIGJyYW5jaGVzIG9yIGJyYW5jaC1pZ25vcmUgdG8gbGltaXQgdGhlIHRyaWdnZXIgdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0cyAtIG5vIGJyYW5jaCBsaW1pdHNcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBUaGUgV29ya2Zsb3cgZGlzcGF0Y2ggZXZlbnQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd0Rpc3BhdGNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJbnB1dHMgZm9yIHRoZSB3b3JrZmxvd19kaXNwYXRjaCBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0cz86IHsgW25hbWU6IHN0cmluZ106IFdvcmtmbG93RGlzcGF0Y2hJbnB1dCB9O1xufVxuXG4vKipcbiAqIEFuIGlucHV0IGZvciBhIHdvcmtmbG93X2Rpc3BhdGNoIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93RGlzcGF0Y2hJbnB1dCB7XG4gIC8qKlxuICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBpbnB1dC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGlucHV0IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgaW5wdXQuXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGlucHV0LlxuICAgKiBAZGVmYXVsdCBcInN0cmluZ1wiXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogXCJzdHJpbmdcIiB8IFwiYm9vbGVhblwiIHwgXCJjaG9pY2VcIiB8IFwibnVtYmVyXCIgfCBcImVudmlyb25tZW50XCI7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSBpbnB1dCBpZiB0eXBlIGlzICdjaG9pY2UnLlxuICAgKiBAZGVmYXVsdCAtIG5vIG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgV29ya2Zsb3cgQ2FsbCBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dDYWxsT3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSBDcmVhdGUgZXZlbnQgYWNjZXB0cyBubyBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU9wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgRGVsZXRlIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWxldGVPcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIERlcGxveW1lbnQgZXZlbnQgYWNjZXB0cyBubyBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRPcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIERlcGxveW1lbnQgc3RhdHVzIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50U3RhdHVzT3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSBGb3JrIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JrT3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSBHb2xsdW0gZXZlbnQgYWNjZXB0cyBubyBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdvbGx1bU9wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgUGFnZSBidWlsZCBldmVudCBhY2NlcHRzIG5vIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUJ1aWxkT3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSBQdWJsaWMgZXZlbnQgYWNjZXB0cyBubyBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY09wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgU3RhdHVzIGV2ZW50IGFjY2VwdHMgbm8gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0dXNPcHRpb25zIHt9XG4vLyNlbmRyZWdpb25cbiJdfQ==
|