@napi-rs/cli 3.9.0 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -4
- package/dist/cli.js +10359 -8729
- package/dist/index.cjs +10381 -8751
- package/dist/index.d.cts +83 -16
- package/dist/index.d.ts +83 -16
- package/dist/index.js +10359 -8729
- package/docs/wasi.md +318 -4
- package/package.json +5 -6
- package/src/api/__tests__/__snapshots__/templates.spec.ts.md +4003 -53
- package/src/api/__tests__/__snapshots__/templates.spec.ts.snap +0 -0
- package/src/api/__tests__/build-regressions.spec.ts +210 -3
- package/src/api/__tests__/build.spec.ts +2333 -3
- package/src/api/__tests__/create-npm-dirs.spec.ts +105 -3
- package/src/api/__tests__/pre-publish.spec.ts +153 -1
- package/src/api/__tests__/templates.spec.ts +1309 -1
- package/src/api/build.ts +756 -30
- package/src/api/create-npm-dirs.ts +23 -10
- package/src/api/new.ts +13 -18
- package/src/api/pre-publish.ts +34 -11
- package/src/api/rename.ts +10 -21
- package/src/api/templates/binding-target.ts +176 -0
- package/src/api/templates/index.ts +1 -0
- package/src/api/templates/js-binding.ts +54 -10
- package/src/api/templates/load-wasi-template.ts +661 -58
- package/src/api/templates/wasi-worker-template.ts +36 -31
- package/src/commands/build.ts +1 -1
- package/src/utils/__tests__/__snapshots__/typegen.spec.ts.md +18 -28
- package/src/utils/__tests__/__snapshots__/typegen.spec.ts.snap +0 -0
- package/src/utils/__tests__/misc.spec.ts +4 -0
- package/src/utils/__tests__/reconciliation.spec.ts +676 -0
- package/src/utils/__tests__/serialize.spec.ts +55 -0
- package/src/utils/__tests__/target.spec.ts +221 -0
- package/src/utils/__tests__/typegen.spec.ts +115 -0
- package/src/utils/config.ts +50 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/misc.ts +351 -79
- package/src/utils/serialize.ts +47 -0
- package/src/utils/target.ts +150 -1
- package/src/utils/typegen.ts +608 -42
package/dist/index.d.ts
CHANGED
|
@@ -304,7 +304,7 @@ interface Target {
|
|
|
304
304
|
* - `sys` = The system name, for example `linux`, `windows`, `darwin`, etc. none is typically used for bare-metal without an OS.
|
|
305
305
|
* - `abi` = The ABI, for example `gnu`, `android`, `eabi`, etc.
|
|
306
306
|
*/
|
|
307
|
-
declare function parseTriple(rawTriple: string): Target;
|
|
307
|
+
export declare function parseTriple(rawTriple: string): Target;
|
|
308
308
|
//#endregion
|
|
309
309
|
//#region src/utils/config.d.ts
|
|
310
310
|
type ValueOfConstArray<T> = T[Exclude<keyof T, keyof Array<any>>];
|
|
@@ -378,6 +378,27 @@ interface UserNapiConfig {
|
|
|
378
378
|
* @default 4000 pages (250 MiB), or 1024 pages (64 MiB) for the deferred workerd loader
|
|
379
379
|
*/
|
|
380
380
|
initialMemory?: number;
|
|
381
|
+
/**
|
|
382
|
+
* Initial linear memory, in 64 KiB pages, for the **threadless**
|
|
383
|
+
* (`wasm32-wasip1`) loaders only: the Node CJS loader, the browser loader
|
|
384
|
+
* and the deferred `./workerd` loader.
|
|
385
|
+
*
|
|
386
|
+
* The threaded loaders allocate one `shared: true` memory that every
|
|
387
|
+
* wasi-threads worker maps, so every worker stack and every thread's
|
|
388
|
+
* allocations come out of it and growing it is a cross-thread event; it is
|
|
389
|
+
* sized for the whole pool up front. The threadless loaders drive a single
|
|
390
|
+
* thread through a plain growable `ArrayBuffer`: they only have to clear
|
|
391
|
+
* the module's own link-time floor (`-zstack-size` plus static data) and
|
|
392
|
+
* grow on demand, which is what lets the same build fit a host with a hard
|
|
393
|
+
* isolate cap such as workerd's 128 MiB.
|
|
394
|
+
*
|
|
395
|
+
* Falls back to `initialMemory` when unset, so existing projects are
|
|
396
|
+
* unaffected.
|
|
397
|
+
*
|
|
398
|
+
* @default `initialMemory` (4000 pages), or 1024 pages for the deferred
|
|
399
|
+
* `./workerd` loader
|
|
400
|
+
*/
|
|
401
|
+
threadlessInitialMemory?: number;
|
|
381
402
|
/**
|
|
382
403
|
* @default 65536 pages (4GiB)
|
|
383
404
|
*/
|
|
@@ -400,6 +421,34 @@ interface UserNapiConfig {
|
|
|
400
421
|
* @default true when every configured target is WASI, false otherwise
|
|
401
422
|
*/
|
|
402
423
|
optionalDependency?: boolean;
|
|
424
|
+
/**
|
|
425
|
+
* Whether the generated WASI loaders bootstrap the `napi-async-runtime`
|
|
426
|
+
* CurrentThread JavaScript hosts.
|
|
427
|
+
*
|
|
428
|
+
* A binding built with the `napi-async-runtime` crate runs the
|
|
429
|
+
* `CurrentThread` flavor on every WebAssembly target (it is the only
|
|
430
|
+
* flavor there). Its futures make no progress until a task host is
|
|
431
|
+
* registered, and its timers never fire until a timer host is, so the
|
|
432
|
+
* loader must install both right after instantiation and unregister them
|
|
433
|
+
* before the environment is destroyed.
|
|
434
|
+
*
|
|
435
|
+
* Enabling this emits that bootstrap in the node, browser and deferred
|
|
436
|
+
* (workerd) loaders, and declares `@napi-rs/async-runtime` in the
|
|
437
|
+
* generated `<packageName>-wasm32-*` packages. The loader delegates the
|
|
438
|
+
* whole host contract — the seven exports, contract version 4, the
|
|
439
|
+
* reservation identity, the liveness probe and the rollback — to that
|
|
440
|
+
* package, so a binding that does not actually expose the contract fails
|
|
441
|
+
* loudly at load with `ERR_NAPI_ASYNC_RUNTIME_BINDING_MISMATCH`.
|
|
442
|
+
*
|
|
443
|
+
* The bootstrap runs after instantiation, so after `#[module_init]`: the
|
|
444
|
+
* host registration functions are exports of the binding itself. Code that
|
|
445
|
+
* runs during module registration must not create timers (`sleep_until`
|
|
446
|
+
* fails loud at creation without a timer host) and cannot expect task
|
|
447
|
+
* progress until the loader has returned.
|
|
448
|
+
*
|
|
449
|
+
* @default false
|
|
450
|
+
*/
|
|
451
|
+
asyncRuntime?: boolean;
|
|
403
452
|
/**
|
|
404
453
|
* Browser wasm binding configuration
|
|
405
454
|
*/
|
|
@@ -482,7 +531,7 @@ type NapiConfig = Required<Pick<UserNapiConfig, 'binaryName' | 'packageName' | '
|
|
|
482
531
|
targets: Target[];
|
|
483
532
|
packageJson: CommonPackageJsonFields;
|
|
484
533
|
};
|
|
485
|
-
declare function readNapiConfig(path: string, configPath?: string): Promise<NapiConfig>;
|
|
534
|
+
export declare function readNapiConfig(path: string, configPath?: string): Promise<NapiConfig>;
|
|
486
535
|
//#endregion
|
|
487
536
|
//#region src/api/build.d.ts
|
|
488
537
|
type OutputKind = 'js' | 'dts' | 'node' | 'exe' | 'wasm';
|
|
@@ -520,7 +569,7 @@ interface WriteJsBindingOptions {
|
|
|
520
569
|
wasiFlavors?: string[];
|
|
521
570
|
}
|
|
522
571
|
/** Write a platform binding loader in the requested module format. */
|
|
523
|
-
declare function writeJsBinding(options: WriteJsBindingOptions): Promise<Output | undefined>;
|
|
572
|
+
export declare function writeJsBinding(options: WriteJsBindingOptions): Promise<Output | undefined>;
|
|
524
573
|
interface GenerateTypeDefOptions {
|
|
525
574
|
typeDefDir: string;
|
|
526
575
|
noDtsHeader?: boolean;
|
|
@@ -531,6 +580,18 @@ interface GenerateTypeDefOptions {
|
|
|
531
580
|
constEnum?: boolean;
|
|
532
581
|
runtimeStringEnum?: boolean;
|
|
533
582
|
cwd: string;
|
|
583
|
+
/**
|
|
584
|
+
* Declare the generated loader's `__napiBindingTarget` export. Set it for
|
|
585
|
+
* builds that emit a loader; a build that emits none declares nothing. The
|
|
586
|
+
* declared union covers every artifact a loader can hand back, not only the
|
|
587
|
+
* targets this package builds — see {@link BINDING_TARGET_TYPE_UNION}.
|
|
588
|
+
*
|
|
589
|
+
* Whether the root loader is written depends on the exports this build
|
|
590
|
+
* produced, which only typegen knows, so a predicate may be passed instead
|
|
591
|
+
* of a flag; it is called with the generated export list. See
|
|
592
|
+
* {@link bindingTargetDeclarationPredicate}.
|
|
593
|
+
*/
|
|
594
|
+
declareBindingTarget?: boolean | ((exports: readonly string[]) => boolean);
|
|
534
595
|
}
|
|
535
596
|
/**
|
|
536
597
|
* Walk the napi-derive intermediate type-def directory, render every entry
|
|
@@ -538,10 +599,16 @@ interface GenerateTypeDefOptions {
|
|
|
538
599
|
* `.d.ts` source plus the list of identifiers to re-export from
|
|
539
600
|
* `index.js`.
|
|
540
601
|
*/
|
|
541
|
-
declare function generateTypeDef(options: GenerateTypeDefOptions): Promise<{
|
|
602
|
+
export declare function generateTypeDef(options: GenerateTypeDefOptions): Promise<{
|
|
542
603
|
exports: string[];
|
|
543
604
|
dts: string;
|
|
544
605
|
dtsWithTypeImports: string;
|
|
606
|
+
/**
|
|
607
|
+
* The `.d.ts` header as rendered, before anything the generated body needs
|
|
608
|
+
* was appended to it. `ensureBindingTargetDeclaration` takes it to tell a
|
|
609
|
+
* declaration the header owns from one this build wrote.
|
|
610
|
+
*/
|
|
611
|
+
header: string;
|
|
545
612
|
}>;
|
|
546
613
|
//#endregion
|
|
547
614
|
//#region src/def/create-npm-dirs.d.ts
|
|
@@ -1031,7 +1098,7 @@ declare class VersionCommand extends BaseVersionCommand {
|
|
|
1031
1098
|
}
|
|
1032
1099
|
//#endregion
|
|
1033
1100
|
//#region src/index.d.ts
|
|
1034
|
-
declare const cli: Cli<import("clipanion").BaseContext>;
|
|
1101
|
+
export declare const cli: Cli<import("clipanion").BaseContext>;
|
|
1035
1102
|
/**
|
|
1036
1103
|
*
|
|
1037
1104
|
* @usage
|
|
@@ -1044,7 +1111,7 @@ declare const cli: Cli<import("clipanion").BaseContext>;
|
|
|
1044
1111
|
* })
|
|
1045
1112
|
* ```
|
|
1046
1113
|
*/
|
|
1047
|
-
declare class NapiCli {
|
|
1114
|
+
export declare class NapiCli {
|
|
1048
1115
|
artifacts: typeof collectArtifacts;
|
|
1049
1116
|
new: typeof newProject;
|
|
1050
1117
|
build: typeof buildProject;
|
|
@@ -1054,14 +1121,14 @@ declare class NapiCli {
|
|
|
1054
1121
|
universalize: typeof universalizeBinaries;
|
|
1055
1122
|
version: typeof version$1;
|
|
1056
1123
|
}
|
|
1057
|
-
declare function createBuildCommand(args: string[]): BuildCommand;
|
|
1058
|
-
declare function createArtifactsCommand(args: string[]): ArtifactsCommand;
|
|
1059
|
-
declare function createCreateNpmDirsCommand(args: string[]): CreateNpmDirsCommand;
|
|
1060
|
-
declare function createPrePublishCommand(args: string[]): PrePublishCommand;
|
|
1061
|
-
declare function createRenameCommand(args: string[]): RenameCommand;
|
|
1062
|
-
declare function createUniversalizeCommand(args: string[]): UniversalizeCommand;
|
|
1063
|
-
declare function createVersionCommand(args: string[]): VersionCommand;
|
|
1064
|
-
declare function createNewCommand(args: string[]): NewCommand;
|
|
1124
|
+
export declare function createBuildCommand(args: string[]): BuildCommand;
|
|
1125
|
+
export declare function createArtifactsCommand(args: string[]): ArtifactsCommand;
|
|
1126
|
+
export declare function createCreateNpmDirsCommand(args: string[]): CreateNpmDirsCommand;
|
|
1127
|
+
export declare function createPrePublishCommand(args: string[]): PrePublishCommand;
|
|
1128
|
+
export declare function createRenameCommand(args: string[]): RenameCommand;
|
|
1129
|
+
export declare function createUniversalizeCommand(args: string[]): UniversalizeCommand;
|
|
1130
|
+
export declare function createVersionCommand(args: string[]): VersionCommand;
|
|
1131
|
+
export declare function createNewCommand(args: string[]): NewCommand;
|
|
1065
1132
|
//#endregion
|
|
1066
|
-
export {
|
|
1067
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsIm5hbWVzIjpbIkJ1aWxkT3B0aW9ucyIsIlJhd0J1aWxkT3B0aW9ucyIsIlJhd05ld09wdGlvbnMiLCJ2ZXJzaW9uIiwidmVyc2lvbiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWYvYXJ0aWZhY3RzLmQudHMiLCIuLi9zcmMvYXBpL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2RlZi9idWlsZC5kLnRzIiwiLi4vc3JjL3V0aWxzL2xvZy5kLnRzIiwiLi4vc3JjL3V0aWxzL3RhcmdldC5kLnRzIiwiLi4vc3JjL3V0aWxzL2NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwaS9idWlsZC5kLnRzIiwiLi4vc3JjL2RlZi9jcmVhdGUtbnBtLWRpcnMuZC50cyIsIi4uL3NyYy9hcGkvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvZGVmL25ldy5kLnRzIiwiLi4vc3JjL2FwaS9uZXcuZC50cyIsIi4uL3NyYy9kZWYvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9hcGkvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9kZWYvcmVuYW1lLmQudHMiLCIuLi9zcmMvYXBpL3JlbmFtZS5kLnRzIiwiLi4vc3JjL2RlZi91bml2ZXJzYWxpemUuZC50cyIsIi4uL3NyYy9hcGkvdW5pdmVyc2FsaXplLmQudHMiLCIuLi9zcmMvZGVmL3ZlcnNpb24uZC50cyIsIi4uL3NyYy9hcGkvdmVyc2lvbi5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvbmV3LmQudHMiLCIuLi9zcmMvY29tbWFuZHMvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9jb21tYW5kcy9yZW5hbWUuZC50cyIsIi4uL3NyYy9jb21tYW5kcy91bml2ZXJzYWxpemUuZC50cyIsIi4uL3NyYy9jb21tYW5kcy92ZXJzaW9uLmQudHMiLCIuLi9zcmMvaW5kZXguZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VBcnRpZmFjdHNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgYnVpbGRPdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBvdXRwdXREaXI6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfTtcbn1cbi8qKlxuICogQ29weSBhcnRpZmFjdHMgZnJvbSBHaXRodWIgQWN0aW9ucyBpbnRvIG5wbSBwYWNrYWdlcyBhbmQgcmVhZHkgdG8gcHVibGlzaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFydGlmYWN0c09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgYWxsIGJ1aWx0IGAubm9kZWAgZmlsZXMgcHV0LCBzYW1lIGFzIGAtLW91dHB1dC1kaXJgIG9mIGJ1aWxkIGNvbW1hbmRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICcuL2FydGlmYWN0cydcbiAgICAgKi9cbiAgICBvdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBidWlsZCBvdXRwdXQgZGlyLCBvbmx5IG5lZWRlZCB3aGVuIHRhcmdldHMgY29udGFpbiBhIFdBU0kgdGFyZ2V0XG4gICAgICovXG4gICAgYnVpbGRPdXRwdXREaXI/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRBcnRpZmFjdHNPcHRpb25zKG9wdGlvbnM6IEFydGlmYWN0c09wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgYnVpbGQgb3V0cHV0IGRpciwgb25seSBuZWVkZWQgd2hlbiB0YXJnZXRzIGNvbnRhaW4gYSBXQVNJIHRhcmdldFxuICAgICAqL1xuICAgIGJ1aWxkT3V0cHV0RGlyPzogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgQXJ0aWZhY3RzT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9hcnRpZmFjdHMuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29sbGVjdEFydGlmYWN0cyh1c2VyT3B0aW9uczogQXJ0aWZhY3RzT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VCdWlsZENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgdGFyZ2V0Pzogc3RyaW5nO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgdGFyZ2V0RGlyPzogc3RyaW5nO1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbiAgICBwbGF0Zm9ybT86IGJvb2xlYW47XG4gICAganNQYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgbm9Kc0JpbmRpbmc/OiBib29sZWFuO1xuICAgIGR0cz86IHN0cmluZztcbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgbm9EdHNIZWFkZXI/OiBib29sZWFuO1xuICAgIGR0c0NhY2hlOiBib29sZWFuO1xuICAgIGZvcm1hdD86ICdlc20nIHwgJ2NvbW1vbmpzJztcbiAgICBlc20/OiBib29sZWFuO1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgYmluPzogc3RyaW5nO1xuICAgIHBhY2thZ2U/OiBzdHJpbmc7XG4gICAgcHJvZmlsZT86IHN0cmluZztcbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICB1c2VOYXBpQ3Jvc3M/OiBib29sZWFuO1xuICAgIHdhdGNoPzogYm9vbGVhbjtcbiAgICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBwYXJzZWQgYnVpbGQgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgdGFyZ2V0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGN3ZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBtYW5pZmVzdFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdGFyZ2V0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG91dHB1dERpcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwbGF0Zm9ybTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAganNQYWNrYWdlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdEVudW06IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHJ1bnRpbWVTdHJpbmdFbnVtOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBqc0JpbmRpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbm9Kc0JpbmRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGR0czogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBkdHNIZWFkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbm9EdHNIZWFkZXI6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGR0c0NhY2hlOiBib29sZWFuO1xuICAgICAgICBmb3JtYXQ6IFwiZXNtXCIgfCBcImNvbW1vbmpzXCIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGVzbTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29tbW9uanM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHN0cmlwOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICByZWxlYXNlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB2ZXJib3NlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBiaW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwcm9maWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNyb3NzQ29tcGlsZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgdXNlQ3Jvc3M6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHVzZU5hcGlDcm9zczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgd2F0Y2g6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGZlYXR1cmVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgYWxsRmVhdHVyZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIG5vRGVmYXVsdEZlYXR1cmVzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIH07XG59XG4vKipcbiAqIEJ1aWxkIHRoZSBOQVBJLVJTIHByb2plY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGZvciB0aGUgdGFyZ2V0IHRyaXBsZSwgYnlwYXNzZWQgdG8gYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0YFxuICAgICAqL1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgQ2FyZ28udG9tbGBcbiAgICAgKi9cbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEaXJlY3RvcnkgZm9yIGFsbCBjcmF0ZSBnZW5lcmF0ZWQgYXJ0aWZhY3RzLCBzZWUgYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0LWRpcmBcbiAgICAgKi9cbiAgICB0YXJnZXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB3aGVyZSBhbGwgdGhlIGJ1aWx0IGZpbGVzIHdvdWxkIGJlIHB1dC4gRGVmYXVsdCB0byB0aGUgY3JhdGUgZm9sZGVyXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFkZCBwbGF0Zm9ybSB0cmlwbGUgdG8gdGhlIGdlbmVyYXRlZCBub2RlanMgYmluZGluZyBmaWxlLCBlZzogYFtuYW1lXS5saW51eC14NjQtZ251Lm5vZGVgXG4gICAgICovXG4gICAgcGxhdGZvcm0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhY2thZ2UgbmFtZSBpbiBnZW5lcmF0ZWQganMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWdcbiAgICAgKi9cbiAgICBqc1BhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgY29uc3QgZW51bSBmb3IgdHlwZXNjcmlwdCBiaW5kaW5nc1xuICAgICAqL1xuICAgIGNvbnN0RW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW1pdCBgI1tuYXBpKHN0cmluZ19lbnVtKV1gIGVudW1zIGFzIHJ1bnRpbWUgZW51bXMgKGBleHBvcnQgZGVjbGFyZSBlbnVtYCkgdW5kZXIgYC0tbm8tY29uc3QtZW51bWAuIERlZmF1bHQ6IHR5cGUtb25seSB1bmlvbi5cbiAgICAgKi9cbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGF0aCBhbmQgZmlsZW5hbWUgb2YgZ2VuZXJhdGVkIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLiBSZWxhdGl2ZSB0byBgLS1vdXRwdXQtZGlyYC5cbiAgICAgKi9cbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLlxuICAgICAqL1xuICAgIG5vSnNCaW5kaW5nPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXRoIGFuZCBmaWxlbmFtZSBvZiBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gUmVsYXRpdmUgdG8gYC0tb3V0cHV0LWRpcmBcbiAgICAgKi9cbiAgICBkdHM/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGZpbGUgaGVhZGVyIGZvciBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gT25seSB3b3JrcyB3aGVuIGB0eXBlZGVmYCBmZWF0dXJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBmaWxlIGhlYWRlciBmb3IgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIE9ubHkgd29ya3Mgd2hlbiBgdHlwZWRlZmAgZmVhdHVyZSBlbmFibGVkLlxuICAgICAqL1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgZHRzIGNhY2hlLCBkZWZhdWx0IHRvIHRydWVcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBkdHNDYWNoZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIG1vZHVsZSBmb3JtYXQgb2YgdGhlIGdlbmVyYXRlZCBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy4gRGVmYXVsdHMgdG8gYGNvbW1vbmpzYC5cbiAgICAgKi9cbiAgICBmb3JtYXQ/OiAnZXNtJyB8ICdjb21tb25qcyc7XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBlc21gLlxuICAgICAqL1xuICAgIGVzbT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBjb21tb25qc2AuXG4gICAgICovXG4gICAgY29tbW9uanM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc3RyaXAgdGhlIGxpYnJhcnkgdG8gYWNoaWV2ZSB0aGUgbWluaW11bSBmaWxlIHNpemVcbiAgICAgKi9cbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgaW4gcmVsZWFzZSBtb2RlXG4gICAgICovXG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVmVyYm9zZWx5IGxvZyBidWlsZCBjb21tYW5kIHRyYWNlXG4gICAgICovXG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgb25seSB0aGUgc3BlY2lmaWVkIGJpbmFyeVxuICAgICAqL1xuICAgIGJpbj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCB0aGUgc3BlY2lmaWVkIGxpYnJhcnkgb3IgdGhlIG9uZSBhdCBjd2RcbiAgICAgKi9cbiAgICBwYWNrYWdlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGFydGlmYWN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZmlsZVxuICAgICAqL1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gY3Jvc3MgY29tcGlsZSBieSByZXBsYWNpbmcgdGhlIGNhcmdvIHN1YmNvbW1hbmQ6IFdpbmRvd3MgTVNWQyB0YXJnZXRzIGZyb20gYSBub24tV2luZG93cyBob3N0IGJ1aWxkIHdpdGggYGNhcmdvLXh3aW5gIChgd2luZG93cy1nbnVgIHRhcmdldHMgYXJlIHJlamVjdGVkLCBgY2FyZ28teHdpbmAgY2Fubm90IGhhbmRsZSB0aGVtKSwgbm9uLVdpbmRvd3MgdGFyZ2V0cyBidWlsZCB3aXRoIGBjYXJnby16aWdidWlsZGAgKHJlcXVpcmVzIGB6aWdgIG9uIFBBVEgpLiBUaGUgc2VsZWN0ZWQgc3ViY29tbWFuZCBpcyBhdXRvLWluc3RhbGxlZCBvbiBmaXJzdCB1c2UuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLXVzZS1jcm9zc2AsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIG5vdCByZWNvbW1lbmRlZCwgcHJlZmVyIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1uYXBpLWNyb3NzYDogYnVpbGQgaW4gYSBEb2NrZXIgb3IgUG9kbWFuIGNvbnRhaW5lciB3aXRoIFtjcm9zc10oaHR0cHM6Ly9naXRodWIuY29tL2Nyb3NzLXJzL2Nyb3NzKSwgd2hpY2ggbXVzdCBiZSBpbnN0YWxsZWQgbWFudWFsbHkgYW5kIG5lZWRzIGEgcnVubmluZyBjb250YWluZXIgZW5naW5lLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1jcm9zcy1jb21waWxlYCwgYC0tdXNlLW5hcGktY3Jvc3NgIG9yIGAtLXdhdGNoYFxuICAgICAqL1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBkb3dubG9hZCBhIHByZWJ1aWx0IGdjYyBjcm9zcyB0b29sY2hhaW4gZnJvbSBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCAoZ2xpYmMgMi4xNykgYW5kIHNldCBsaW5rZXIgYW5kIEMgY29tcGlsZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBMaW51eCBnbGliYyB0YXJnZXRzIG9ubHkgKHg2NCwgYXJtNjQsIGFybXY3LCBwcGM2NGxlLCBzMzkweCkgb24gYSBMaW51eCB4NjQgb3IgYXJtNjQgaG9zdCwgYW55IG90aGVyIHRhcmdldCBvciBob3N0IGVycm9ycy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAgb3IgYC0tdXNlLWNyb3NzYFxuICAgICAqL1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogd2F0Y2ggdGhlIGNyYXRlIGNoYW5nZXMgYW5kIGJ1aWxkIGNvbnRpbnVvdXNseSB3aXRoIGBjYXJnby13YXRjaGAgY3JhdGVzXG4gICAgICovXG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmVzIHRvIGFjdGl2YXRlXG4gICAgICovXG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZSBhbGwgYXZhaWxhYmxlIGZlYXR1cmVzXG4gICAgICovXG4gICAgYWxsRmVhdHVyZXM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBhY3RpdmF0ZSB0aGUgYGRlZmF1bHRgIGZlYXR1cmVcbiAgICAgKi9cbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRCdWlsZE9wdGlvbnMob3B0aW9uczogQnVpbGRPcHRpb25zKToge1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGZvciB0aGUgdGFyZ2V0IHRyaXBsZSwgYnlwYXNzZWQgdG8gYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0YFxuICAgICAqL1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgQ2FyZ28udG9tbGBcbiAgICAgKi9cbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEaXJlY3RvcnkgZm9yIGFsbCBjcmF0ZSBnZW5lcmF0ZWQgYXJ0aWZhY3RzLCBzZWUgYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0LWRpcmBcbiAgICAgKi9cbiAgICB0YXJnZXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB3aGVyZSBhbGwgdGhlIGJ1aWx0IGZpbGVzIHdvdWxkIGJlIHB1dC4gRGVmYXVsdCB0byB0aGUgY3JhdGUgZm9sZGVyXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFkZCBwbGF0Zm9ybSB0cmlwbGUgdG8gdGhlIGdlbmVyYXRlZCBub2RlanMgYmluZGluZyBmaWxlLCBlZzogYFtuYW1lXS5saW51eC14NjQtZ251Lm5vZGVgXG4gICAgICovXG4gICAgcGxhdGZvcm0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhY2thZ2UgbmFtZSBpbiBnZW5lcmF0ZWQganMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWdcbiAgICAgKi9cbiAgICBqc1BhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgY29uc3QgZW51bSBmb3IgdHlwZXNjcmlwdCBiaW5kaW5nc1xuICAgICAqL1xuICAgIGNvbnN0RW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW1pdCBgI1tuYXBpKHN0cmluZ19lbnVtKV1gIGVudW1zIGFzIHJ1bnRpbWUgZW51bXMgKGBleHBvcnQgZGVjbGFyZSBlbnVtYCkgdW5kZXIgYC0tbm8tY29uc3QtZW51bWAuIERlZmF1bHQ6IHR5cGUtb25seSB1bmlvbi5cbiAgICAgKi9cbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGF0aCBhbmQgZmlsZW5hbWUgb2YgZ2VuZXJhdGVkIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLiBSZWxhdGl2ZSB0byBgLS1vdXRwdXQtZGlyYC5cbiAgICAgKi9cbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLlxuICAgICAqL1xuICAgIG5vSnNCaW5kaW5nPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXRoIGFuZCBmaWxlbmFtZSBvZiBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gUmVsYXRpdmUgdG8gYC0tb3V0cHV0LWRpcmBcbiAgICAgKi9cbiAgICBkdHM/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGZpbGUgaGVhZGVyIGZvciBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gT25seSB3b3JrcyB3aGVuIGB0eXBlZGVmYCBmZWF0dXJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBmaWxlIGhlYWRlciBmb3IgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIE9ubHkgd29ya3Mgd2hlbiBgdHlwZWRlZmAgZmVhdHVyZSBlbmFibGVkLlxuICAgICAqL1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICBkdHNDYWNoZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgbW9kdWxlIGZvcm1hdCBvZiB0aGUgZ2VuZXJhdGVkIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLiBEZWZhdWx0cyB0byBgY29tbW9uanNgLlxuICAgICAqL1xuICAgIGZvcm1hdD86IFwiZXNtXCIgfCBcImNvbW1vbmpzXCI7XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBlc21gLlxuICAgICAqL1xuICAgIGVzbT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBjb21tb25qc2AuXG4gICAgICovXG4gICAgY29tbW9uanM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc3RyaXAgdGhlIGxpYnJhcnkgdG8gYWNoaWV2ZSB0aGUgbWluaW11bSBmaWxlIHNpemVcbiAgICAgKi9cbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgaW4gcmVsZWFzZSBtb2RlXG4gICAgICovXG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVmVyYm9zZWx5IGxvZyBidWlsZCBjb21tYW5kIHRyYWNlXG4gICAgICovXG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgb25seSB0aGUgc3BlY2lmaWVkIGJpbmFyeVxuICAgICAqL1xuICAgIGJpbj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCB0aGUgc3BlY2lmaWVkIGxpYnJhcnkgb3IgdGhlIG9uZSBhdCBjd2RcbiAgICAgKi9cbiAgICBwYWNrYWdlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGFydGlmYWN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZmlsZVxuICAgICAqL1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gY3Jvc3MgY29tcGlsZSBieSByZXBsYWNpbmcgdGhlIGNhcmdvIHN1YmNvbW1hbmQ6IFdpbmRvd3MgTVNWQyB0YXJnZXRzIGZyb20gYSBub24tV2luZG93cyBob3N0IGJ1aWxkIHdpdGggYGNhcmdvLXh3aW5gIChgd2luZG93cy1nbnVgIHRhcmdldHMgYXJlIHJlamVjdGVkLCBgY2FyZ28teHdpbmAgY2Fubm90IGhhbmRsZSB0aGVtKSwgbm9uLVdpbmRvd3MgdGFyZ2V0cyBidWlsZCB3aXRoIGBjYXJnby16aWdidWlsZGAgKHJlcXVpcmVzIGB6aWdgIG9uIFBBVEgpLiBUaGUgc2VsZWN0ZWQgc3ViY29tbWFuZCBpcyBhdXRvLWluc3RhbGxlZCBvbiBmaXJzdCB1c2UuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLXVzZS1jcm9zc2AsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIG5vdCByZWNvbW1lbmRlZCwgcHJlZmVyIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1uYXBpLWNyb3NzYDogYnVpbGQgaW4gYSBEb2NrZXIgb3IgUG9kbWFuIGNvbnRhaW5lciB3aXRoIFtjcm9zc10oaHR0cHM6Ly9naXRodWIuY29tL2Nyb3NzLXJzL2Nyb3NzKSwgd2hpY2ggbXVzdCBiZSBpbnN0YWxsZWQgbWFudWFsbHkgYW5kIG5lZWRzIGEgcnVubmluZyBjb250YWluZXIgZW5naW5lLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1jcm9zcy1jb21waWxlYCwgYC0tdXNlLW5hcGktY3Jvc3NgIG9yIGAtLXdhdGNoYFxuICAgICAqL1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBkb3dubG9hZCBhIHByZWJ1aWx0IGdjYyBjcm9zcyB0b29sY2hhaW4gZnJvbSBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCAoZ2xpYmMgMi4xNykgYW5kIHNldCBsaW5rZXIgYW5kIEMgY29tcGlsZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBMaW51eCBnbGliYyB0YXJnZXRzIG9ubHkgKHg2NCwgYXJtNjQsIGFybXY3LCBwcGM2NGxlLCBzMzkweCkgb24gYSBMaW51eCB4NjQgb3IgYXJtNjQgaG9zdCwgYW55IG90aGVyIHRhcmdldCBvciBob3N0IGVycm9ycy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAgb3IgYC0tdXNlLWNyb3NzYFxuICAgICAqL1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogd2F0Y2ggdGhlIGNyYXRlIGNoYW5nZXMgYW5kIGJ1aWxkIGNvbnRpbnVvdXNseSB3aXRoIGBjYXJnby13YXRjaGAgY3JhdGVzXG4gICAgICovXG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmVzIHRvIGFjdGl2YXRlXG4gICAgICovXG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZSBhbGwgYXZhaWxhYmxlIGZlYXR1cmVzXG4gICAgICovXG4gICAgYWxsRmVhdHVyZXM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBhY3RpdmF0ZSB0aGUgYGRlZmF1bHRgIGZlYXR1cmVcbiAgICAgKi9cbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG59O1xuIiwiZGVjbGFyZSBtb2R1bGUgJ29idWcnIHtcbiAgICBpbnRlcmZhY2UgRGVidWdnZXIge1xuICAgICAgICBpbmZvOiB0eXBlb2YgY29uc29sZS5lcnJvcjtcbiAgICAgICAgd2FybjogdHlwZW9mIGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIGVycm9yOiB0eXBlb2YgY29uc29sZS5lcnJvcjtcbiAgICB9XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBkZWJ1Z0ZhY3Rvcnk6IChuYW1lc3BhY2U6IHN0cmluZykgPT4gaW1wb3J0KFwib2J1Z1wiKS5EZWJ1Z2dlcjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGRlYnVnOiBpbXBvcnQoXCJvYnVnXCIpLkRlYnVnZ2VyO1xuIiwiZXhwb3J0IHR5cGUgUGxhdGZvcm0gPSBOb2RlSlMuUGxhdGZvcm0gfCAnd2FzbScgfCAnd2FzaScgfCAnb3Blbmhhcm1vbnknO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVU5JVkVSU0FMX1RBUkdFVFM6IHtcbiAgICByZWFkb25seSAndW5pdmVyc2FsLWFwcGxlLWRhcndpbic6IHJlYWRvbmx5IFtcImFhcmNoNjQtYXBwbGUtZGFyd2luXCIsIFwieDg2XzY0LWFwcGxlLWRhcndpblwiXTtcbn07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBBVkFJTEFCTEVfVEFSR0VUUzogcmVhZG9ubHkgW1wiYWFyY2g2NC1hcHBsZS1kYXJ3aW5cIiwgXCJhYXJjaDY0LWxpbnV4LWFuZHJvaWRcIiwgXCJhYXJjaDY0LXVua25vd24tbGludXgtZ251XCIsIFwiYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2xcIiwgXCJhYXJjaDY0LXVua25vd24tbGludXgtb2hvc1wiLCBcImFhcmNoNjQtcGMtd2luZG93cy1tc3ZjXCIsIFwieDg2XzY0LWFwcGxlLWRhcndpblwiLCBcIng4Nl82NC1wYy13aW5kb3dzLW1zdmNcIiwgXCJ4ODZfNjQtcGMtd2luZG93cy1nbnVcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1nbnVcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1tdXNsXCIsIFwieDg2XzY0LXVua25vd24tbGludXgtb2hvc1wiLCBcIng4Nl82NC11bmtub3duLWZyZWVic2RcIiwgXCJpNjg2LXBjLXdpbmRvd3MtbXN2Y1wiLCBcImFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmXCIsIFwiYXJtdjctdW5rbm93bi1saW51eC1tdXNsZWFiaWhmXCIsIFwiYXJtdjctbGludXgtYW5kcm9pZGVhYmlcIiwgXCJ1bml2ZXJzYWwtYXBwbGUtZGFyd2luXCIsIFwibG9vbmdhcmNoNjQtdW5rbm93bi1saW51eC1nbnVcIiwgXCJyaXNjdjY0Z2MtdW5rbm93bi1saW51eC1nbnVcIiwgXCJwb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LWdudVwiLCBcInMzOTB4LXVua25vd24tbGludXgtZ251XCIsIFwid2FzbTMyLXdhc2lwMVwiLCBcIndhc20zMi13YXNpcDEtdGhyZWFkc1wiXTtcbmV4cG9ydCB0eXBlIFRhcmdldFRyaXBsZSA9ICh0eXBlb2YgQVZBSUxBQkxFX1RBUkdFVFMpW251bWJlcl07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBERUZBVUxUX1RBUkdFVFM6IHJlYWRvbmx5IFtcIng4Nl82NC1hcHBsZS1kYXJ3aW5cIiwgXCJhYXJjaDY0LWFwcGxlLWRhcndpblwiLCBcIng4Nl82NC1wYy13aW5kb3dzLW1zdmNcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1nbnVcIl07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBUQVJHRVRfTElOS0VSOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xudHlwZSBOb2RlSlNBcmNoID0gJ2FybScgfCAnYXJtNjQnIHwgJ2lhMzInIHwgJ2xvb25nNjQnIHwgJ21pcHMnIHwgJ21pcHNlbCcgfCAncHBjJyB8ICdwcGM2NCcgfCAncmlzY3Y2NCcgfCAnczM5MCcgfCAnczM5MHgnIHwgJ3gzMicgfCAneDY0JyB8ICd1bml2ZXJzYWwnIHwgJ3dhc20zMic7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBOb2RlQXJjaFRvQ3B1OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVW5pQXJjaHNCeVBsYXRmb3JtOiBQYXJ0aWFsPFJlY29yZDxQbGF0Zm9ybSwgTm9kZUpTQXJjaFtdPj47XG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldCB7XG4gICAgdHJpcGxlOiBzdHJpbmc7XG4gICAgcGxhdGZvcm1BcmNoQUJJOiBzdHJpbmc7XG4gICAgcGxhdGZvcm06IFBsYXRmb3JtO1xuICAgIGFyY2g6IE5vZGVKU0FyY2g7XG4gICAgYWJpOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IHR5cGUgV2FzaUZsYXZvciA9ICdzaW5nbGUnIHwgJ3RocmVhZHMnO1xuZXhwb3J0IGludGVyZmFjZSBXYXNpVGFyZ2V0IHtcbiAgICBjYW5vbmljYWxUcmlwbGU6IHN0cmluZztcbiAgICBmbGF2b3I6IFdhc2lGbGF2b3I7XG4gICAgcGxhdGZvcm1BcmNoQUJJOiBzdHJpbmc7XG59XG4vKipcbiAqIFJlc29sdmUgaGlzdG9yaWNhbCBXQVNJIHNwZWxsaW5ncyB0byBvbmUgYnVpbGQgdGFyZ2V0IGFuZCBvbmUgYXJ0aWZhY3RcbiAqIGlkZW50aXR5LiBgd2FzbTMyLXdhc2lgIGhpc3RvcmljYWxseSBwcm9kdWNlZCB0aGUgdGhyZWFkZWQgcGFja2FnZSwgc28gaXRcbiAqIG11c3QgbmV2ZXIgYmUgaW5mZXJyZWQgYXMgdGhyZWFkbGVzcyBtZXJlbHkgYmVjYXVzZSBpdHMgbmFtZSBsYWNrcyB0aGVcbiAqIGAtdGhyZWFkc2Agc3VmZml4LlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRXYXNpVGFyZ2V0KHRhcmdldDogc3RyaW5nIHwgUGljazxUYXJnZXQsICd0cmlwbGUnPik6IFdhc2lUYXJnZXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YXNpVGFyZ2V0SGFzVGhyZWFkcyh0YXJnZXQ6IHN0cmluZyB8IFBpY2s8VGFyZ2V0LCAndHJpcGxlJz4pOiBib29sZWFuO1xuLyoqXG4gKiBBIHRyaXBsZSBpcyBhIHNwZWNpZmljIGZvcm1hdCBmb3Igc3BlY2lmeWluZyBhIHRhcmdldCBhcmNoaXRlY3R1cmUuXG4gKiBUcmlwbGVzIG1heSBiZSByZWZlcnJlZCB0byBhcyBhIHRhcmdldCB0cmlwbGUgd2hpY2ggaXMgdGhlIGFyY2hpdGVjdHVyZSBmb3IgdGhlIGFydGlmYWN0IHByb2R1Y2VkLCBhbmQgdGhlIGhvc3QgdHJpcGxlIHdoaWNoIGlzIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCB0aGUgY29tcGlsZXIgaXMgcnVubmluZyBvbi5cbiAqIFRoZSBnZW5lcmFsIGZvcm1hdCBvZiB0aGUgdHJpcGxlIGlzIGA8YXJjaD48c3ViPi08dmVuZG9yPi08c3lzPi08YWJpPmAgd2hlcmU6XG4gKiAgIC0gYGFyY2hgID0gVGhlIGJhc2UgQ1BVIGFyY2hpdGVjdHVyZSwgZm9yIGV4YW1wbGUgYHg4Nl82NGAsIGBpNjg2YCwgYGFybWAsIGB0aHVtYmAsIGBtaXBzYCwgZXRjLlxuICogICAtIGBzdWJgID0gVGhlIENQVSBzdWItYXJjaGl0ZWN0dXJlLCBmb3IgZXhhbXBsZSBgYXJtYCBoYXMgYHY3YCwgYHY3c2AsIGB2NXRlYCwgZXRjLlxuICogICAtIGB2ZW5kb3JgID0gVGhlIHZlbmRvciwgZm9yIGV4YW1wbGUgYHVua25vd25gLCBgYXBwbGVgLCBgcGNgLCBgbnZpZGlhYCwgZXRjLlxuICogICAtIGBzeXNgID0gVGhlIHN5c3RlbSBuYW1lLCBmb3IgZXhhbXBsZSBgbGludXhgLCBgd2luZG93c2AsIGBkYXJ3aW5gLCBldGMuIG5vbmUgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGJhcmUtbWV0YWwgd2l0aG91dCBhbiBPUy5cbiAqICAgLSBgYWJpYCA9IFRoZSBBQkksIGZvciBleGFtcGxlIGBnbnVgLCBgYW5kcm9pZGAsIGBlYWJpYCwgZXRjLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJzZVRyaXBsZShyYXdUcmlwbGU6IHN0cmluZyk6IFRhcmdldDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldFN5c3RlbURlZmF1bHRUYXJnZXQoKTogVGFyZ2V0O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0VGFyZ2V0TGlua2VyKHRhcmdldDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuLyoqXG4gKiBMb2FkZXItZmlsZSBzdWZmaXggZm9yIGEgV0FTSSBmbGF2b3IsIGRlcml2ZWQgZnJvbSBpdHMgYHBsYXRmb3JtQXJjaEFCSWA6XG4gKiB0aGUgbGVnYWN5IHRocmVhZGVkIGZsYXZvciBrZWVwcyB0aGUgaGlzdG9yaWNhbCBgd2FzaWAgc3RlbVxuICogKGA8YmluYXJ5TmFtZT4ud2FzaS5janNgLCBgPGJpbmFyeU5hbWU+Lndhc2ktYnJvd3Nlci5qc2ApLCB3aGlsZSBlYWNoXG4gKiBkaXN0aW5jdGx5IG5hbWVkIG5vbi10aHJlYWRlZCBmbGF2b3IgZGVyaXZlcyBpdHMgb3duXG4gKiAoYDxiaW5hcnlOYW1lPi53YXNpcDEuY2pzYCwgYDxiaW5hcnlOYW1lPi53YXNpcDEtYnJvd3Nlci5qc2AsIC4uLikuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdhc2lMb2FkZXJTdWZmaXgocGxhdGZvcm1BcmNoQUJJOiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0YXJnZXRUb0VudlZhcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IHR5cGUgVGFyZ2V0IH0gZnJvbSAnLi90YXJnZXQuanMnO1xuZXhwb3J0IHR5cGUgVmFsdWVPZkNvbnN0QXJyYXk8VD4gPSBUW0V4Y2x1ZGU8a2V5b2YgVCwga2V5b2YgQXJyYXk8YW55Pj5dO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgU3VwcG9ydGVkUGFja2FnZU1hbmFnZXJzOiByZWFkb25seSBbXCJ5YXJuXCIsIFwicG5wbVwiXTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFN1cHBvcnRlZFRlc3RGcmFtZXdvcmtzOiByZWFkb25seSBbXCJhdmFcIl07XG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRQYWNrYWdlTWFuYWdlciA9IFZhbHVlT2ZDb25zdEFycmF5PHR5cGVvZiBTdXBwb3J0ZWRQYWNrYWdlTWFuYWdlcnM+O1xuZXhwb3J0IHR5cGUgU3VwcG9ydGVkVGVzdEZyYW1ld29yayA9IFZhbHVlT2ZDb25zdEFycmF5PHR5cGVvZiBTdXBwb3J0ZWRUZXN0RnJhbWV3b3Jrcz47XG4vKipcbiAqIFBhY2thZ2UgbWFuYWdlcnMgdGhhdCBtYXkgcHVibGlzaCB0aGUgKipyb290KiogcGFja2FnZSwgZGlzdGluZ3Vpc2hlZCBieVxuICogd2hldGhlciB0aGV5IHJld3JpdGUgdGhlIG1hbmlmZXN0IHdoaWxlIHBhY2tpbmcgaXQuXG4gKlxuICogYHlhcm5gIG1lYW5zIHlhcm4gYmVycnkgKD49IDIpOyBZYXJuIENsYXNzaWMgKDEueCkgcGFja3MgdGhlIHJhdyBtYW5pZmVzdFxuICogbGlrZSBucG0gZG9lcyBhbmQgaXMgc3BlbGxlZCBgeWFybi1jbGFzc2ljYC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgUm9vdFB1Ymxpc2hlcnM6IHJlYWRvbmx5IFtcIm5wbVwiLCBcInBucG1cIiwgXCJ5YXJuXCIsIFwieWFybi1jbGFzc2ljXCJdO1xuZXhwb3J0IHR5cGUgUm9vdFB1Ymxpc2hlciA9IFZhbHVlT2ZDb25zdEFycmF5PHR5cGVvZiBSb290UHVibGlzaGVycz47XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJOYXBpQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBiaW5hcnkgdG8gYmUgZ2VuZXJhdGVkLCBkZWZhdWx0IHRvIGBpbmRleGBcbiAgICAgKi9cbiAgICBiaW5hcnlOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIG5wbSBwYWNrYWdlLCBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHJvb3QgcGFja2FnZS5qc29uIG5hbWVcbiAgICAgKlxuICAgICAqIEFsd2F5cyBnaXZlbiBgQHNjb3BlL3BrZ2AgYW5kIGFyY2ggc3VmZml4IHdpbGwgYmUgYXBwZW5kZWQgbGlrZSBgQHNjb3BlL3BrZy1saW51eC1nbnUteDY0YFxuICAgICAqL1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFsbCB0YXJnZXRzIHRoZSBjcmF0ZSB3aWxsIGJlIGNvbXBpbGVkIGZvclxuICAgICAqL1xuICAgIHRhcmdldHM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbnBtIGNsaWVudCBwcm9qZWN0IHVzZXMuXG4gICAgICovXG4gICAgbnBtQ2xpZW50Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdGhhdCBwdWJsaXNoZXMgdGhlICoqcm9vdCoqIHBhY2thZ2UuXG4gICAgICpcbiAgICAgKiBgbmFwaSBwcmUtcHVibGlzaGAgcHVibGlzaGVzIG9ubHkgdGhlIGdlbmVyYXRlZCBwZXItcGxhdGZvcm0gcGFja2FnZXM7IHRoZVxuICAgICAqIHJvb3QgcGFja2FnZSBpcyBwYWNrZWQgYW5kIHB1Ymxpc2hlZCBieSB0aGUgY2FsbGVyLCBzbyB0aGlzIGNhbm5vdCBiZVxuICAgICAqIGluZmVycmVkIHJlbGlhYmx5LiBwbnBtIGFuZCB5YXJuIGJlcnJ5IHJlcGxhY2UgYGV4cG9ydHNgIHdpdGhcbiAgICAgKiBgcHVibGlzaENvbmZpZy5leHBvcnRzYCB3aGlsZSBwYWNraW5nLCBzbyB1bmRlciB0aG9zZSBwdWJsaXNoZXJzXG4gICAgICogYG5hcGkgcHJlLXB1Ymxpc2hgIHZhbGlkYXRlcyBvbmx5IHRoZSBwdWJsaXNoLWVmZmVjdGl2ZSBleHBvcnQgbWFwIGFuZCB0aGVcbiAgICAgKiBsb2NhbCBgZXhwb3J0c2AgbWF5IHBvaW50IGF0IGRldmVsb3BtZW50LW9ubHkgc291cmNlcy4gbnBtIGFuZCBZYXJuXG4gICAgICogQ2xhc3NpYyBzaGlwIGBleHBvcnRzYCB1bnRvdWNoZWQuXG4gICAgICpcbiAgICAgKiBVbnNldCDigJQgdGhlIGRlZmF1bHQg4oCUIHZhbGlkYXRlcyBib3RoIG1hcHMsIHdoaWNoIGlzIGNvcnJlY3QgZm9yIGV2ZXJ5XG4gICAgICogcHVibGlzaGVyIGJ1dCByZWplY3RzIGRldmVsb3BtZW50LW9ubHkgY29uZGl0aW9ucyBzdWNoIGFzXG4gICAgICogYFwiZGV2XCI6IFwiLi9zcmMvaW5kZXgudHNcImAuXG4gICAgICovXG4gICAgcm9vdFB1Ymxpc2hlcj86IFJvb3RQdWJsaXNoZXI7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBnZW5lcmF0ZSBjb25zdCBlbnVtIGZvciB0eXBlc2NyaXB0IGJpbmRpbmdzXG4gICAgICovXG4gICAgY29uc3RFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbWl0IGAjW25hcGkoc3RyaW5nX2VudW0pXWAgZW51bXMgYXMgcnVudGltZSBlbnVtcyAoYGV4cG9ydCBkZWNsYXJlIGVudW1gKSB1bmRlciBgLS1uby1jb25zdC1lbnVtYC4gRGVmYXVsdDogdHlwZS1vbmx5IHVuaW9uLlxuICAgICAqL1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBkdHMgaGVhZGVyIHByZXBlbmQgdG8gdGhlIGdlbmVyYXRlZCBkdHMgZmlsZVxuICAgICAqL1xuICAgIGR0c0hlYWRlcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBkdHMgaGVhZGVyIGZpbGUgcGF0aCB0byBiZSBwcmVwZW5kZWQgdG8gdGhlIGdlbmVyYXRlZCBkdHMgZmlsZVxuICAgICAqIGlmIGJvdGggZHRzSGVhZGVyIGFuZCBkdHNIZWFkZXJGaWxlIGFyZSBwcm92aWRlZCwgZHRzSGVhZGVyRmlsZSB3aWxsIGJlIHVzZWRcbiAgICAgKi9cbiAgICBkdHNIZWFkZXJGaWxlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIHdhc20gY29tcGlsYXRpb24gb3B0aW9uc1xuICAgICAqL1xuICAgIHdhc20/OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYkFzc2VtYmx5L0phdmFTY3JpcHRfaW50ZXJmYWNlL01lbW9yeVxuICAgICAgICAgKiBAZGVmYXVsdCA0MDAwIHBhZ2VzICgyNTAgTWlCKSwgb3IgMTAyNCBwYWdlcyAoNjQgTWlCKSBmb3IgdGhlIGRlZmVycmVkIHdvcmtlcmQgbG9hZGVyXG4gICAgICAgICAqL1xuICAgICAgICBpbml0aWFsTWVtb3J5PzogbnVtYmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlZmF1bHQgNjU1MzYgcGFnZXMgKDRHaUIpXG4gICAgICAgICAqL1xuICAgICAgICBtYXhpbXVtTWVtb3J5PzogbnVtYmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIGA8cGFja2FnZU5hbWU+LXdhc20zMi13YXNpYCBwYWNrYWdlIGlzIGRlY2xhcmVkIGFzXG4gICAgICAgICAqIGFuIGBvcHRpb25hbERlcGVuZGVuY3lgIG9mIHRoZSByb290IHBhY2thZ2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4gbmF0aXZlIHRhcmdldHMgYXJlIGNvbmZpZ3VyZWQgdGhlIFdBU0kgcGFja2FnZSBpcyBhIGZhbGxiYWNrIGZvclxuICAgICAgICAgKiBob3N0cyB0aGF0IGNhbm5vdCBsb2FkIGEgYC5ub2RlYCBiaW5hcnksIHNvIGRlY2xhcmluZyBpdCB3b3VsZCBtYWtlIGV2ZXJ5XG4gICAgICAgICAqIGNvbnN1bWVyIGRvd25sb2FkIHRoZSBgLndhc21gIGJpbmFyeSB0aGV5IHdpbGwgbmV2ZXIgbG9hZC4gSXQgaXNcbiAgICAgICAgICogdGhlcmVmb3JlIG9taXR0ZWQgYnkgZGVmYXVsdCBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgaW5zdGFsbGVkIG9uIGRlbWFuZCBieVxuICAgICAgICAgKiB0aGUgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogV2hlbiBXQVNJIGlzIHRoZSBvbmx5IGNvbmZpZ3VyZWQgdGFyZ2V0IGl0IGlzIHRoZSBwcmltYXJ5IGFydGlmYWN0IGFuZCBpc1xuICAgICAgICAgKiBkZWNsYXJlZCBieSBkZWZhdWx0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBTZXQgdGhpcyBleHBsaWNpdGx5IHRvIG92ZXJyaWRlIGVpdGhlciBkZWZhdWx0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlIHdoZW4gZXZlcnkgY29uZmlndXJlZCB0YXJnZXQgaXMgV0FTSSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICAgICAqL1xuICAgICAgICBvcHRpb25hbERlcGVuZGVuY3k/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQnJvd3NlciB3YXNtIGJpbmRpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYnJvd3Nlcj86IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0byB1c2UgZnMgbW9kdWxlIGluIGJyb3dzZXJcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZnM/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGluaXRpYWxpemUgd2FzbSBhc3luY2hyb25vdXNseVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBhc3luY0luaXQ/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGluamVjdCBgYnVmZmVyYCB0byBlbW5hcGkgY29udGV4dFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBidWZmZXI/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGVtaXQgY3VzdG9tIGV2ZW50cyBmb3IgZXJyb3JzIGluIHdvcmtlclxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBlcnJvckV2ZW50PzogYm9vbGVhbjtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGJpbmFyeU5hbWUgaW5zdGVhZFxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHBhY2thZ2VOYW1lIGluc3RlYWRcbiAgICAgKi9cbiAgICBwYWNrYWdlPzoge1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHRhcmdldHMgaW5zdGVhZFxuICAgICAqL1xuICAgIHRyaXBsZXM/OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIGVuYWJsZSBkZWZhdWx0IHRhcmdldHNcbiAgICAgICAgICovXG4gICAgICAgIGRlZmF1bHRzOiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQWRkaXRpb25hbCB0YXJnZXRzIHRvIGJlIGNvbXBpbGVkIGZvclxuICAgICAgICAgKi9cbiAgICAgICAgYWRkaXRpb25hbD86IHN0cmluZ1tdO1xuICAgIH07XG59XG5leHBvcnQgaW50ZXJmYWNlIENvbW1vblBhY2thZ2VKc29uRmllbGRzIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGtleXdvcmRzPzogc3RyaW5nW107XG4gICAgYXV0aG9yPzogc3RyaW5nO1xuICAgIGF1dGhvcnM/OiBzdHJpbmdbXTtcbiAgICBsaWNlbnNlPzogc3RyaW5nO1xuICAgIGNwdT86IHN0cmluZ1tdO1xuICAgIG9zPzogc3RyaW5nW107XG4gICAgbGliYz86IHN0cmluZ1tdO1xuICAgIGZpbGVzPzogc3RyaW5nW107XG4gICAgcmVwb3NpdG9yeT86IGFueTtcbiAgICBob21lcGFnZT86IGFueTtcbiAgICBlbmdpbmVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwdWJsaXNoQ29uZmlnPzogYW55O1xuICAgIGJ1Z3M/OiBhbnk7XG4gICAgbmFwaT86IFVzZXJOYXBpQ29uZmlnO1xuICAgIHR5cGU/OiAnbW9kdWxlJyB8ICdjb21tb25qcyc7XG4gICAgc2NyaXB0cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgbWFpbj86IHN0cmluZztcbiAgICBtb2R1bGU/OiBzdHJpbmc7XG4gICAgdHlwZXM/OiBzdHJpbmc7XG4gICAgYnJvd3Nlcj86IHN0cmluZztcbiAgICBleHBvcnRzPzogYW55O1xuICAgIGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgZGV2RGVwZW5kZW5jaWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBvcHRpb25hbERlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgYXZhPzoge1xuICAgICAgICB0aW1lb3V0Pzogc3RyaW5nO1xuICAgIH07XG59XG5leHBvcnQgdHlwZSBOYXBpQ29uZmlnID0gUmVxdWlyZWQ8UGljazxVc2VyTmFwaUNvbmZpZywgJ2JpbmFyeU5hbWUnIHwgJ3BhY2thZ2VOYW1lJyB8ICducG1DbGllbnQnPj4gJiBQaWNrPFVzZXJOYXBpQ29uZmlnLCAnd2FzbScgfCAnZHRzSGVhZGVyJyB8ICdkdHNIZWFkZXJGaWxlJyB8ICdjb25zdEVudW0nIHwgJ3J1bnRpbWVTdHJpbmdFbnVtJyB8ICdyb290UHVibGlzaGVyJz4gJiB7XG4gICAgdGFyZ2V0czogVGFyZ2V0W107XG4gICAgcGFja2FnZUpzb246IENvbW1vblBhY2thZ2VKc29uRmllbGRzO1xufTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlYWROYXBpQ29uZmlnKHBhdGg6IHN0cmluZywgY29uZmlnUGF0aD86IHN0cmluZyk6IFByb21pc2U8TmFwaUNvbmZpZz47XG4iLCJpbXBvcnQgdHlwZSB7IEJ1aWxkT3B0aW9ucyBhcyBSYXdCdWlsZE9wdGlvbnMgfSBmcm9tICcuLi9kZWYvYnVpbGQuanMnO1xuaW1wb3J0IHsgdHlwZSBUYXJnZXQsIHR5cGUgQ2FyZ29Xb3Jrc3BhY2VNZXRhZGF0YSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbnR5cGUgT3V0cHV0S2luZCA9ICdqcycgfCAnZHRzJyB8ICdub2RlJyB8ICdleGUnIHwgJ3dhc20nO1xudHlwZSBPdXRwdXQgPSB7XG4gICAga2luZDogT3V0cHV0S2luZDtcbiAgICBwYXRoOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgQnVpbGRGb3JtYXQgPSAnZXNtJyB8ICdjb21tb25qcyc7XG50eXBlIEJ1aWxkT3B0aW9ucyA9IFJhd0J1aWxkT3B0aW9ucyAmIHtcbiAgICBjYXJnb09wdGlvbnM/OiBzdHJpbmdbXTtcbn07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBXQVNJX0FSVElGQUNUX01FVEFEQVRBX1BSRUZJWCA9IFwiLy8gbmFwaS1ycy1hcnRpZmFjdC1tZXRhZGF0YTpcIjtcbnR5cGUgQ2FyZ29Db25maWdGaW5nZXJwcmludCA9IHJlYWRvbmx5IFtwYXRoOiBzdHJpbmcsIGhhc2g6IHN0cmluZ107XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRDYXJnb0RlcGVuZGVuY3lHcmFwaEZpbmdlcnByaW50KG1ldGFkYXRhOiBDYXJnb1dvcmtzcGFjZU1ldGFkYXRhLCByb290UGFja2FnZUlkOiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRUeXBlRGVmQ2FjaGVGb2xkZXIob3B0aW9uczoge1xuICAgIHRhcmdldERpcjogc3RyaW5nO1xuICAgIGNyYXRlTmFtZTogc3RyaW5nO1xuICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgIHRhcmdldFRyaXBsZTogc3RyaW5nO1xuICAgIHByb2ZpbGU6IHN0cmluZztcbiAgICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgY2FyZ29PcHRpb25zPzogc3RyaW5nW107XG4gICAgcnVzdEZsYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgICBjYXJnb1Byb2ZpbGVFbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICAgIGNhcmdvQ29uZmlnPzogQ2FyZ29Db25maWdGaW5nZXJwcmludFtdO1xuICAgIGNhcmdvRGVwZW5kZW5jeUdyYXBoPzogc3RyaW5nO1xufSk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVdhc2lDb21waWxlckZsYWdzKHdhc2lTZGtQYXRoOiBzdHJpbmcsIHdhc2lUYXJnZXQ6IHN0cmluZywgaGFzVGhyZWFkczogYm9vbGVhbiwgc2hlbGxFc2NhcGVkRmxhZ3M/OiBib29sZWFuKToge1xuICAgIGNvbXBpbGVGbGFnczogc3RyaW5nO1xuICAgIGxpbmtlckZsYWdzOiBzdHJpbmc7XG59O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQXJ0aWZhY3REZXN0aW5hdGlvbk5hbWUoYmluYXJ5TmFtZTogc3RyaW5nLCB0YXJnZXQ6IFRhcmdldCwgc291cmNlTmFtZTogc3RyaW5nLCBwbGF0Zm9ybTogYm9vbGVhbik6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNlbGVjdFdhc2lCcm93c2VyVGFyZ2V0KGJ1aWxkVGFyZ2V0OiBUYXJnZXQsIGNvbmZpZ3VyZWRUYXJnZXRzOiBUYXJnZXRbXSwgZW1pdHRlZFRhcmdldHM6IFRhcmdldFtdKTogVGFyZ2V0O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlV2FzaUJyb3dzZXJFbnRyeShwYWNrYWdlTmFtZTogc3RyaW5nLCBwbGF0Zm9ybUFyY2hBQkk6IHN0cmluZywgaWRlbnRzOiBzdHJpbmdbXSk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVdhc2lEZWZlcnJlZEJpbmRpbmdUeXBlRGVmKGJpbmRpbmdNb2R1bGVTcGVjaWZpZXI6IHN0cmluZywgaGFzVHlwZURlZjogYm9vbGVhbik6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHByZXBhcmVXYXNpQmluZGluZ1R5cGVEZWYoc291cmNlOiBzdHJpbmcsIHNvdXJjZVBhdGg6IHN0cmluZywgZGVzdGluYXRpb25QYXRoOiBzdHJpbmcsIGhhc1RocmVhZHM6IGJvb2xlYW4sIHBhY2thZ2VUeXBlPzogJ21vZHVsZScgfCAnY29tbW9uanMnKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29sbGVjdFN0YWxlV2FzaUJ1aWxkT3V0cHV0TmFtZXMoYmluYXJ5TmFtZTogc3RyaW5nLCBidWlsZFRhcmdldDogVGFyZ2V0LCBjb25maWd1cmVkVGFyZ2V0czogVGFyZ2V0W10pOiBTZXQ8c3RyaW5nPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlbW92ZVdhc21DdXN0b21TZWN0aW9uKGJpbmFyeTogVWludDhBcnJheSwgc2VjdGlvbk5hbWU6IHN0cmluZyk6IFVpbnQ4QXJyYXk7XG50eXBlIEJ1aWxkRm9ybWF0T3B0aW9ucyA9IHtcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgZXNtPzogYm9vbGVhbjtcbiAgICBjb21tb25qcz86IGJvb2xlYW47XG59O1xuLyoqXG4gKiBSZXNvbHZlIHRoZSBleHBsaWNpdCBidWlsZCBmb3JtYXQgYW5kIGl0cyBsZWdhY3kgQ0xJL0FQSSBhbGlhc2VzLlxuICpcbiAqIENvbW1vbkpTIGlzIHRoZSBoaXN0b3JpY2FsIGRlZmF1bHQuIFRoZSBhbGlhc2VzIGFyZSBpbnRlbnRpb25hbGx5IGtlcHRcbiAqIHNlcGFyYXRlIGZyb20gYGZvcm1hdGAgYmVjYXVzZSBgLS1lc21gIGFuZCBgLS1jb21tb25qc2AgYXJlIGJvb2xlYW4gZmxhZ3MsXG4gKiB3aGlsZSBgLS1mb3JtYXRgIHRha2VzIGEgdmFsdWUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlc29sdmVCdWlsZEZvcm1hdChvcHRpb25zOiBCdWlsZEZvcm1hdE9wdGlvbnMpOiBCdWlsZEZvcm1hdDtcbi8qKiBCdWlsZCB0aGUgY29uZmlndXJlZCBOQVBJLVJTIGNyYXRlIGFuZCBnZW5lcmF0ZSBpdHMgb3V0cHV0IGFydGlmYWN0cy4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGJ1aWxkUHJvamVjdChyYXdPcHRpb25zOiBCdWlsZE9wdGlvbnMpOiBQcm9taXNlPHtcbiAgICB0YXNrOiBQcm9taXNlPE91dHB1dFtdPjtcbiAgICBhYm9ydDogKCkgPT4gdm9pZDtcbn0+O1xuLyoqXG4gKiBWYWxpZGF0ZSB0aGUgY29tYmluYXRpb24gb2YgdGhlIGNyb3NzLWNvbXBpbGF0aW9uIHJlbGF0ZWQgZmxhZ3MuXG4gKlxuICogYC0tdXNlLWNyb3NzYCwgYC0tdXNlLW5hcGktY3Jvc3NgIGFuZCBgLS1jcm9zcy1jb21waWxlYCAoYC14YCkgYXJlIHRocmVlXG4gKiBtdXR1YWxseSBleGNsdXNpdmUgY3Jvc3MtY29tcGlsYXRpb24gbWVjaGFuaXNtczsgY29tYmluaW5nIGFueSB0d28gb2YgdGhlbVxuICogbGVhdmVzIGJvdGggYWN0aXZlIGF0IG9uY2UgYW5kIHByb2R1Y2VzIGJyb2tlbiBidWlsZHMsIHNvIGl0IGlzIHJlamVjdGVkXG4gKiB1cGZyb250IGJlZm9yZSBhbnkgc2lkZSBlZmZlY3QgKGxpa2UgYXV0by1pbnN0YWxsaW5nIGNhcmdvIGJpbmFyaWVzIG9yXG4gKiBkb3dubG9hZGluZyB0b29sY2hhaW5zKSBoYXBwZW5zLlxuICpcbiAqIGAtLWNyb3NzLWNvbXBpbGVgIHdpdGggYSBgd2luZG93cy1nbnVgIHRhcmdldCBpcyByZWplY3RlZCBhcyB3ZWxsOiBvbiBhXG4gKiBub24tV2luZG93cyBob3N0IGl0IHJvdXRlcyB0aGUgYnVpbGQgdG8gYGNhcmdvIHh3aW4gYnVpbGRgLCBidXRcbiAqIGBjYXJnby14d2luYCBvbmx5IHNldHMgdXAgTVNWQyB0b29sY2hhaW5zIOKAlCBmb3IgYHdpbmRvd3MtZ251YCB0YXJnZXRzIGl0XG4gKiBzaWxlbnRseSBkb2VzIG5vdGhpbmcgYW5kIHRoZSBidWlsZCBkaWVzIG11Y2ggbGF0ZXIgd2l0aCBhIGNyeXB0aWNcbiAqIGBgZXJyb3I6IGxpbmtlciBgeDg2XzY0LXc2NC1taW5ndzMyLWdjY2Agbm90IGZvdW5kYGAgdGhhdCBuZXZlciBtZW50aW9uc1xuICogYGNhcmdvLXh3aW5gLiBPbmx5IGFuIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHRhcmdldCAoYC0tdGFyZ2V0YCBvclxuICogYENBUkdPX0JVSUxEX1RBUkdFVGApIGlzIGluc3BlY3RlZCwgc28gdGhpcyB2YWxpZGF0aW9uIG5ldmVyIGhhcyB0byBzcGF3blxuICogYHJ1c3RjIC12VmA7IGEgbm9uLVdpbmRvd3MgaG9zdCdzIGRlZmF1bHQgdGFyZ2V0IGNhbiBuZXZlciBiZVxuICogYHdpbmRvd3MtZ251YCBhbnl3YXkuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZhbGlkYXRlQ3Jvc3NDb21waWxlRmxhZ3Mob3B0aW9uczoge1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIHRhcmdldD86IHN0cmluZztcbn0sIGhvc3RQbGF0Zm9ybT86IHN0cmluZyk6IHZvaWQ7XG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgYC0tdXNlLW5hcGktY3Jvc3NgIGNhbiBhY3R1YWxseSBoYW5kbGUgdGhlIHJlcXVlc3RlZCB0YXJnZXRcbiAqIG9uIHRoZSBjdXJyZW50IGhvc3QuIFRoZSBzdXBwb3J0ZWQgdGFyZ2V0IHNldCBpcyByZWFkIGZyb20gdGhlXG4gKiBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCBwYWNrYWdlLCBhbmQgdGhlIHByZS1idWlsdCB0b29sY2hhaW5zIG9ubHkgcnVuXG4gKiBvbiBMaW51eCB4NjQgYW5kIExpbnV4IGFybTY0IGhvc3RzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWxpZGF0ZU5hcGlDcm9zc1N1cHBvcnQodGFyZ2V0VHJpcGxlOiBzdHJpbmcsIGhvc3RQbGF0Zm9ybT86IHN0cmluZywgaG9zdEFyY2g/OiBzdHJpbmcpOiB2b2lkO1xuLyoqXG4gKiBDb21wdXRlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCByb3V0ZSBhIGAtLXVzZS1uYXBpLWNyb3NzYCBidWlsZFxuICogdGhyb3VnaCB0aGUgYEBuYXBpLXJzL2Nyb3NzLXRvb2xjaGFpbmAgdG9vbGNoYWluIGV4dHJhY3RlZCBhdFxuICogYHRvb2xjaGFpblBhdGhgLlxuICpcbiAqIEZvbGxvd3MgdGhlIHNhbWUgcnVsZSBhcyBgQnVpbGRlciNzZXRFbnZJZk5vdEV4aXN0c2A6IGEgdmFyaWFibGUgdGhlIHVzZXJcbiAqIGFscmVhZHkgc2V0IGluIGBlbnZgIHdpbnMgYW5kIGlzIG5vdCByZXR1cm5lZCwgYW5kIGEgcHJlc2VudC1idXQtZW1wdHlcbiAqIHZhcmlhYmxlIGNvdW50cyBhcyB1bnNldCAoZmFsc3kgc2VtYW50aWNzKS4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUgdGhlXG4gKiBjbGFuZy1zcGVjaWZpYyBgVEFSR0VUX0NGTEFHU2AvYFRBUkdFVF9DWFhGTEFHU2AsIHdoaWNoIHByZXBlbmQgdGhlIHN5c3Jvb3RcbiAqIGZsYWdzIHRvIHRoZSB1c2VyJ3MgdmFsdWUsIGFuZCBgUEFUSGAsIHdoaWNoIGFsd2F5cyBnZXRzIHRoZSB0b29sY2hhaW5cbiAqIGBiaW5gIGRpcmVjdG9yeSBwcmVwZW5kZWQuXG4gKlxuICogRXhwb3J0ZWQgZm9yIHRlc3RzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBuYXBpQ3Jvc3NUb29sY2hhaW5FbnZzKHRvb2xjaGFpblBhdGg6IHN0cmluZywgdGFyZ2V0VHJpcGxlOiBzdHJpbmcsIGVudj86IE5vZGVKUy5Qcm9jZXNzRW52KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZlcmlmeVdhc2lSZWFjdG9yKHdhc21QYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZUpzQmluZGluZ09wdGlvbnMge1xuICAgIHBsYXRmb3JtPzogYm9vbGVhbjtcbiAgICBub0pzQmluZGluZz86IGJvb2xlYW47XG4gICAgaWRlbnRzOiBzdHJpbmdbXTtcbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgZm9ybWF0PzogQnVpbGRGb3JtYXQ7XG4gICAgZXNtPzogYm9vbGVhbjtcbiAgICBjb21tb25qcz86IGJvb2xlYW47XG4gICAgYmluYXJ5TmFtZTogc3RyaW5nO1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGBwbGF0Zm9ybUFyY2hBQklgcyBvZiB0aGUgZGVjbGFyZWQgV0FTSSB0YXJnZXRzIGluIGZhbGxiYWNrIHByZWZlcmVuY2VcbiAgICAgKiBvcmRlciAodGhyZWFkZWQgZmlyc3QpLiBEZWZhdWx0cyB0byB0aGUgbGVnYWN5IGBbJ3dhc20zMi13YXNpJ11gIGNoYWluXG4gICAgICogd2hlbiBvbWl0dGVkIG9yIGVtcHR5LiBHZW5lcmF0ZWQgbG9hZGVycyBleHBvc2UgdGhlc2UgZXhhY3QgaWRlbnRpdGllc1xuICAgICAqIHRocm91Z2ggYE5BUElfUlNfV0FTSV9GTEFWT1JgLlxuICAgICAqL1xuICAgIHdhc2lGbGF2b3JzPzogc3RyaW5nW107XG59XG4vKiogV3JpdGUgYSBwbGF0Zm9ybSBiaW5kaW5nIGxvYWRlciBpbiB0aGUgcmVxdWVzdGVkIG1vZHVsZSBmb3JtYXQuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3cml0ZUpzQmluZGluZyhvcHRpb25zOiBXcml0ZUpzQmluZGluZ09wdGlvbnMpOiBQcm9taXNlPE91dHB1dCB8IHVuZGVmaW5lZD47XG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlVHlwZURlZk9wdGlvbnMge1xuICAgIHR5cGVEZWZEaXI6IHN0cmluZztcbiAgICBub0R0c0hlYWRlcj86IGJvb2xlYW47XG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIGR0c0hlYWRlckZpbGU/OiBzdHJpbmc7XG4gICAgY29uZmlnRHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIGNvbmZpZ0R0c0hlYWRlckZpbGU/OiBzdHJpbmc7XG4gICAgY29uc3RFbnVtPzogYm9vbGVhbjtcbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgY3dkOiBzdHJpbmc7XG59XG4vKipcbiAqIFdhbGsgdGhlIG5hcGktZGVyaXZlIGludGVybWVkaWF0ZSB0eXBlLWRlZiBkaXJlY3RvcnksIHJlbmRlciBldmVyeSBlbnRyeVxuICogaW50byBUeXBlU2NyaXB0IHZpYSB7QGxpbmsgcHJvY2Vzc1R5cGVEZWZ9LCBhbmQgcmV0dXJuIHRoZSBjb25jYXRlbmF0ZWRcbiAqIGAuZC50c2Agc291cmNlIHBsdXMgdGhlIGxpc3Qgb2YgaWRlbnRpZmllcnMgdG8gcmUtZXhwb3J0IGZyb21cbiAqIGBpbmRleC5qc2AuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdlbmVyYXRlVHlwZURlZihvcHRpb25zOiBHZW5lcmF0ZVR5cGVEZWZPcHRpb25zKTogUHJvbWlzZTx7XG4gICAgZXhwb3J0czogc3RyaW5nW107XG4gICAgZHRzOiBzdHJpbmc7XG4gICAgZHRzV2l0aFR5cGVJbXBvcnRzOiBzdHJpbmc7XG59PjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjbGlwYW5pb24nO1xuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgQmFzZUNyZWF0ZU5wbURpcnNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICB9O1xufVxuLyoqXG4gKiBDcmVhdGUgbnBtIHBhY2thZ2UgZGlycyBmb3IgZGlmZmVyZW50IHBsYXRmb3Jtc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU5wbURpcnNPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEcnkgcnVuIHdpdGhvdXQgdG91Y2hpbmcgZmlsZSBzeXN0ZW1cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZHJ5UnVuPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdENyZWF0ZU5wbURpcnNPcHRpb25zKG9wdGlvbnM6IENyZWF0ZU5wbURpcnNPcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbn07XG4iLCJpbXBvcnQgeyB0eXBlIENyZWF0ZU5wbURpcnNPcHRpb25zIH0gZnJvbSAnLi4vZGVmL2NyZWF0ZS1ucG0tZGlycy5qcyc7XG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VNZXRhIHtcbiAgICAnZGlzdC10YWdzJzoge1xuICAgICAgICBbaW5kZXg6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlTnBtRGlycyh1c2VyT3B0aW9uczogQ3JlYXRlTnBtRGlyc09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlTmV3Q29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICAkJHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAkJG5hbWU/OiBzdHJpbmc7XG4gICAgbWluTm9kZUFwaVZlcnNpb246IG51bWJlcjtcbiAgICBwYWNrYWdlTWFuYWdlcjogc3RyaW5nO1xuICAgIGxpY2Vuc2U6IHN0cmluZztcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTtcbiAgICBlbmFibGVEZWZhdWx0VGFyZ2V0czogYm9vbGVhbjtcbiAgICBlbmFibGVBbGxUYXJnZXRzOiBib29sZWFuO1xuICAgIGVuYWJsZVR5cGVEZWY6IGJvb2xlYW47XG4gICAgZW5hYmxlR2l0aHViQWN0aW9uczogYm9vbGVhbjtcbiAgICB0ZXN0RnJhbWV3b3JrOiBzdHJpbmc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbWluTm9kZUFwaVZlcnNpb246IG51bWJlcjtcbiAgICAgICAgcGFja2FnZU1hbmFnZXI6IHN0cmluZztcbiAgICAgICAgbGljZW5zZTogc3RyaW5nO1xuICAgICAgICB0YXJnZXRzOiBzdHJpbmdbXTtcbiAgICAgICAgZW5hYmxlRGVmYXVsdFRhcmdldHM6IGJvb2xlYW47XG4gICAgICAgIGVuYWJsZUFsbFRhcmdldHM6IGJvb2xlYW47XG4gICAgICAgIGVuYWJsZVR5cGVEZWY6IGJvb2xlYW47XG4gICAgICAgIGVuYWJsZUdpdGh1YkFjdGlvbnM6IGJvb2xlYW47XG4gICAgICAgIHRlc3RGcmFtZXdvcms6IHN0cmluZztcbiAgICAgICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIH07XG59XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBwcm9qZWN0IHdpdGggcHJlLWNvbmZpZ3VyZWQgYm9pbGVycGxhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXdPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGF0aCB3aGVyZSB0aGUgTkFQSS1SUyBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0LCBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgaWYgbm90IHByb3ZpZGVkXG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSBOb2RlLUFQSSB2ZXJzaW9uIHRvIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDRcbiAgICAgKi9cbiAgICBtaW5Ob2RlQXBpVmVyc2lvbj86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gT25seSBzdXBwb3J0IHlhcm4gNC54IGZvciBub3cuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAneWFybidcbiAgICAgKi9cbiAgICBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBMaWNlbnNlIGZvciBvcGVuLXNvdXJjZWQgcHJvamVjdFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ01JVCdcbiAgICAgKi9cbiAgICBsaWNlbnNlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFsbCB0YXJnZXRzIHRoZSBjcmF0ZSB3aWxsIGJlIGNvbXBpbGVkIGZvci5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFtdXG4gICAgICovXG4gICAgdGFyZ2V0cz86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIGRlZmF1bHQgdGFyZ2V0c1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZURlZmF1bHRUYXJnZXRzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuYWJsZSBhbGwgdGFyZ2V0c1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBlbmFibGVBbGxUYXJnZXRzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuYWJsZSB0aGUgYHR5cGUtZGVmYCBmZWF0dXJlIGZvciB0eXBlc2NyaXB0IGRlZmluaXRpb25zIGF1dG8tZ2VuZXJhdGlvblxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZVR5cGVEZWY/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgcHJlY29uZmlndXJlZCBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZUdpdGh1YkFjdGlvbnM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSBKYXZhU2NyaXB0IHRlc3QgZnJhbWV3b3JrIHRvIHVzZSwgb25seSBzdXBwb3J0IGBhdmFgIGZvciBub3dcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdhdmEnXG4gICAgICovXG4gICAgdGVzdEZyYW1ld29yaz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJ1biB0aGUgY29tbWFuZCBpbiBkcnktcnVuIG1vZGVcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZHJ5UnVuPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdE5ld09wdGlvbnMob3B0aW9uczogTmV3T3B0aW9ucyk6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGF0aCB3aGVyZSB0aGUgTkFQSS1SUyBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0LCBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgaWYgbm90IHByb3ZpZGVkXG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcbiAgICBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyO1xuICAgIHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmc7XG4gICAgbGljZW5zZTogc3RyaW5nO1xuICAgIHRhcmdldHM6IHN0cmluZ1tdO1xuICAgIGVuYWJsZURlZmF1bHRUYXJnZXRzOiBib29sZWFuO1xuICAgIGVuYWJsZUFsbFRhcmdldHM6IGJvb2xlYW47XG4gICAgZW5hYmxlVHlwZURlZjogYm9vbGVhbjtcbiAgICBlbmFibGVHaXRodWJBY3Rpb25zOiBib29sZWFuO1xuICAgIHRlc3RGcmFtZXdvcms6IHN0cmluZztcbiAgICBkcnlSdW46IGJvb2xlYW47XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBOZXdPcHRpb25zIGFzIFJhd05ld09wdGlvbnMgfSBmcm9tICcuLi9kZWYvbmV3LmpzJztcbnR5cGUgTmV3T3B0aW9ucyA9IFJlcXVpcmVkPFJhd05ld09wdGlvbnM+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgR0VORVJBVEVEX1dBU0lfQklORElORzogUmVnRXhwO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXBkYXRlQ2FyZ29Ub21sTm9kZUFwaVZlcnNpb24oZmlsZVBhdGg6IHN0cmluZywgbWluTm9kZUFwaVZlcnNpb246IG51bWJlcik6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBuZXdQcm9qZWN0KHVzZXJPcHRpb25zOiBSYXdOZXdPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCB0eXBlIHsgTmV3T3B0aW9ucyB9O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlUHJlUHVibGlzaENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICB0YWdTdHlsZTogc3RyaW5nO1xuICAgIGdoUmVsZWFzZTogYm9vbGVhbjtcbiAgICBnaFJlbGVhc2VOYW1lPzogc3RyaW5nO1xuICAgIGdoUmVsZWFzZUlkPzogc3RyaW5nO1xuICAgIHNraXBPcHRpb25hbFB1Ymxpc2g6IGJvb2xlYW47XG4gICAgcm9vdFB1Ymxpc2hlcj86ICducG0nIHwgJ3BucG0nIHwgJ3lhcm4nIHwgJ3lhcm4tY2xhc3NpYyc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIHRhZ1N0eWxlOiBzdHJpbmc7XG4gICAgICAgIGdoUmVsZWFzZTogYm9vbGVhbjtcbiAgICAgICAgZ2hSZWxlYXNlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBnaFJlbGVhc2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBza2lwT3B0aW9uYWxQdWJsaXNoOiBib29sZWFuO1xuICAgICAgICByb290UHVibGlzaGVyOiBcInlhcm5cIiB8IFwicG5wbVwiIHwgXCJucG1cIiB8IFwieWFybi1jbGFzc2ljXCIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICB9O1xufVxuLyoqXG4gKiBVcGRhdGUgcGFja2FnZS5qc29uIGFuZCBjb3B5IGFkZG9ucyBpbnRvIHBlciBwbGF0Zm9ybSBwYWNrYWdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZVB1Ymxpc2hPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBnaXQgdGFnIHN0eWxlLCBgbnBtYCBvciBgbGVybmFgXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbGVybmEnXG4gICAgICovXG4gICAgdGFnU3R5bGU/OiAnbnBtJyB8ICdsZXJuYSc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBjcmVhdGUgR2l0SHViIHJlbGVhc2VcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBnaFJlbGVhc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEdpdEh1YiByZWxlYXNlIG5hbWVcbiAgICAgKi9cbiAgICBnaFJlbGVhc2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEV4aXN0aW5nIEdpdEh1YiByZWxlYXNlIGlkXG4gICAgICovXG4gICAgZ2hSZWxlYXNlSWQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBza2lwIG9wdGlvbmFsRGVwZW5kZW5jaWVzIHBhY2thZ2VzIHB1Ymxpc2hcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgc2tpcE9wdGlvbmFsUHVibGlzaD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IHB1Ymxpc2hlcyB0aGUgcm9vdCBwYWNrYWdlLiBwbnBtIGFuZCB5YXJuIGJlcnJ5IHJlcGxhY2UgYGV4cG9ydHNgIHdpdGggYHB1Ymxpc2hDb25maWcuZXhwb3J0c2Agd2hpbGUgcGFja2luZywgc28gZm9yIHRoZW0gdGhlIHJvb3QgcGFja2FnZSB2YWxpZGF0aW9uIHRhcmdldHMgdGhlIHB1Ymxpc2gtZWZmZWN0aXZlIGV4cG9ydCBtYXAuIERlZmF1bHRzIHRvIHRoZSBgbmFwaS5yb290UHVibGlzaGVyYCBjb25maWcgZmllbGQsIGFuZCB2YWxpZGF0ZXMgYm90aCBleHBvcnQgbWFwcyB3aGVuIG5laXRoZXIgaXMgc2V0XG4gICAgICovXG4gICAgcm9vdFB1Ymxpc2hlcj86ICducG0nIHwgJ3BucG0nIHwgJ3lhcm4nIHwgJ3lhcm4tY2xhc3NpYyc7XG4gICAgLyoqXG4gICAgICogRHJ5IHJ1biB3aXRob3V0IHRvdWNoaW5nIGZpbGUgc3lzdGVtXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGRyeVJ1bj86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRQcmVQdWJsaXNoT3B0aW9ucyhvcHRpb25zOiBQcmVQdWJsaXNoT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICB0YWdTdHlsZTogc3RyaW5nO1xuICAgIGdoUmVsZWFzZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBHaXRIdWIgcmVsZWFzZSBuYW1lXG4gICAgICovXG4gICAgZ2hSZWxlYXNlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBFeGlzdGluZyBHaXRIdWIgcmVsZWFzZSBpZFxuICAgICAqL1xuICAgIGdoUmVsZWFzZUlkPzogc3RyaW5nO1xuICAgIHNraXBPcHRpb25hbFB1Ymxpc2g6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IHB1Ymxpc2hlcyB0aGUgcm9vdCBwYWNrYWdlLiBwbnBtIGFuZCB5YXJuIGJlcnJ5IHJlcGxhY2UgYGV4cG9ydHNgIHdpdGggYHB1Ymxpc2hDb25maWcuZXhwb3J0c2Agd2hpbGUgcGFja2luZywgc28gZm9yIHRoZW0gdGhlIHJvb3QgcGFja2FnZSB2YWxpZGF0aW9uIHRhcmdldHMgdGhlIHB1Ymxpc2gtZWZmZWN0aXZlIGV4cG9ydCBtYXAuIERlZmF1bHRzIHRvIHRoZSBgbmFwaS5yb290UHVibGlzaGVyYCBjb25maWcgZmllbGQsIGFuZCB2YWxpZGF0ZXMgYm90aCBleHBvcnQgbWFwcyB3aGVuIG5laXRoZXIgaXMgc2V0XG4gICAgICovXG4gICAgcm9vdFB1Ymxpc2hlcj86IFwibnBtXCIgfCBcInBucG1cIiB8IFwieWFyblwiIHwgXCJ5YXJuLWNsYXNzaWNcIjtcbiAgICBkcnlSdW46IGJvb2xlYW47XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBQcmVQdWJsaXNoT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9wcmUtcHVibGlzaC5qcyc7XG5pbXBvcnQgeyB0eXBlIENvbW1vblBhY2thZ2VKc29uRmllbGRzLCB0eXBlIFJvb3RQdWJsaXNoZXIsIHR5cGUgVGFyZ2V0LCB0eXBlIFVzZXJOYXBpQ29uZmlnIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuLyoqXG4gKiBCdWlsZCB0aGUgcm9vdCBwYWNrYWdlJ3MgYG9wdGlvbmFsRGVwZW5kZW5jaWVzYCBtYXAuXG4gKlxuICogQSBXQVNJIHBhY2thZ2UgaXMgYSBmYWxsYmFjayBmb3IgaG9zdHMgdGhhdCBjYW5ub3QgbG9hZCBhIGAubm9kZWAgYmluYXJ5LCBhbmRcbiAqIHRoZSBnZW5lcmF0ZWQgYmluZGluZyBsb2FkZXIgc2VsZWN0cyBpdCBhdCByZXF1aXJlIHRpbWUgcmF0aGVyIHRoYW4gbnBtXG4gKiBzZWxlY3RpbmcgaXQgYXQgaW5zdGFsbCB0aW1lLiBEZWNsYXJpbmcgaXQgYXMgYW4gYG9wdGlvbmFsRGVwZW5kZW5jeWBcbiAqIGFsb25nc2lkZSB0aGUgbmF0aXZlIHBhY2thZ2VzIGNhbm5vdCBleHByZXNzIFwiaW5zdGFsbCB0aGlzIG9ubHkgd2hlbiBub3RoaW5nXG4gKiBlbHNlIG1hdGNoZWRcIjogbnBtIGV2YWx1YXRlcyBldmVyeSBlbnRyeSBpbmRlcGVuZGVudGx5LCBzbyBldmVyeSBjb25zdW1lclxuICogZG93bmxvYWRzIGEgYC53YXNtYCBiaW5hcnkgdGhleSB3aWxsIG5ldmVyIGxvYWQuXG4gKlxuICogSXQgaXMgdGhlcmVmb3JlIG9ubHkgZGVjbGFyZWQgd2hlbiBXQVNJIGlzIHRoZSBvbmx5IGNvbmZpZ3VyZWQgdGFyZ2V0LCB3aGljaFxuICogbWFrZXMgaXQgdGhlIHByaW1hcnkgYXJ0aWZhY3QgcmF0aGVyIHRoYW4gYSBmYWxsYmFjay5cbiAqIGBuYXBpLndhc20ub3B0aW9uYWxEZXBlbmRlbmN5YCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgaW4gYm90aCBkaXJlY3Rpb25zLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcm9sbGRvd24vcm9sbGRvd24vaXNzdWVzLzEwNTU2XG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlc29sdmVSb290T3B0aW9uYWxEZXBlbmRlbmNpZXMoeyBleGlzdGluZywgbWFuYWdlZFBhY2thZ2VOYW1lcywgcGFja2FnZU5hbWUsIHRhcmdldHMsIHZlcnNpb24sIHdhc20sIH06IHtcbiAgICBleGlzdGluZzogdW5rbm93bjtcbiAgICBtYW5hZ2VkUGFja2FnZU5hbWVzOiBJdGVyYWJsZTxzdHJpbmc+O1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gICAgdGFyZ2V0czogVGFyZ2V0W107XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIHdhc20/OiBVc2VyTmFwaUNvbmZpZ1snd2FzbSddO1xufSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJlUHVibGlzaCh1c2VyT3B0aW9uczogUHJlUHVibGlzaE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuaW50ZXJmYWNlIFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZSB7XG4gICAgZXhwb3J0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcHVibGlzaENvbmZpZ0V4cG9ydHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBnZW5lcmF0ZWRGaWxlczogc3RyaW5nW107XG4gICAgZmlsZXM6IFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZUZpbGVzO1xuICAgIHdhc21Tb3VyY2VQYXRoOiBzdHJpbmc7XG4gICAgbWFya2VyOiBzdHJpbmc7XG4gICAgZm9yd2FyZGluZ01vZHVsZTogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uVXBkYXRlOiB7XG4gICAgICAgIGZpbGVzPzogc3RyaW5nW107XG4gICAgfTtcbn1cbmludGVyZmFjZSBUaHJlYWRsZXNzV2FzaVJvb3RGYWNhZGVGaWxlcyB7XG4gICAgd29ya2VyZEVudHJ5OiBzdHJpbmc7XG4gICAgd29ya2VyZFR5cGVEZWY6IHN0cmluZztcbiAgICB3YXNtRW50cnk6IHN0cmluZztcbiAgICB3YXNtVHlwZURlZjogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcm9vdFB1Ymxpc2hlclJld3JpdGVzUm9vdEV4cG9ydHMocm9vdFB1Ymxpc2hlcjogUm9vdFB1Ymxpc2hlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZXNvbHZlUm9vdFB1Ymxpc2hlcihvcHRpb25WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb25maWdWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUm9vdFB1Ymxpc2hlciB8IHVuZGVmaW5lZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNuaWZmUmV3cml0aW5nUHVibGlzaGVyRnJvbVVzZXJBZ2VudCh1c2VyQWdlbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQpOiAncG5wbScgfCAneWFybicgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByb290UHVibGlzaGVySGludChyb290UHVibGlzaGVyOiBSb290UHVibGlzaGVyIHwgdW5kZWZpbmVkLCB1c2VyQWdlbnQ/OiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb2xsZWN0Um9vdFBhY2thZ2VQYXRoUmVmZXJlbmNlcyhwYWNrYWdlSnNvbjogQ29tbW9uUGFja2FnZUpzb25GaWVsZHMsIHJvb3RQdWJsaXNoZXI/OiBSb290UHVibGlzaGVyKTogc3RyaW5nW107XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJzZU5wbVBhY2tGaWxlcyhvdXRwdXQ6IHN0cmluZyk6IFNldDxzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsaWRhdGVSb290RmFjYWRlUGFja2xpc3Qocm9vdERpcjogc3RyaW5nLCByb290UGFja2FnZUZpbGVzOiBzdHJpbmdbXSwgcm9vdFB1Ymxpc2hlcj86IFJvb3RQdWJsaXNoZXIpOiB2b2lkO1xuaW50ZXJmYWNlIFJvb3RSZWxlYXNlTWF0ZXJpYWxpemF0aW9uUGxhbiB7XG4gICAgcGFja2FnZUpzb246IENvbW1vblBhY2thZ2VKc29uRmllbGRzO1xuICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBub2RlRW5naW5lPzogc3RyaW5nO1xuICAgIGZhY2FkZT86IFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZTtcbiAgICBzdGFsZUdlbmVyYXRlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICByb290UHVibGlzaGVyPzogUm9vdFB1Ymxpc2hlcjtcbn1cbmludGVyZmFjZSBSZWxlYXNlUGFja2FnZU1hdGVyaWFsaXphdGlvblBsYW4ge1xuICAgIHRhcmdldDogVGFyZ2V0O1xuICAgIHBrZ0Rpcjogc3RyaW5nO1xuICAgIHJvb3REaXI6IHN0cmluZztcbiAgICBzdGFnZWRQa2dEaXI/OiBzdHJpbmc7XG4gICAgcGFja2FnZUZpbGVzOiBzdHJpbmdbXTtcbiAgICBkZWNsYXJhdGlvbkRlcGVuZGVuY2llczogc3RyaW5nW107XG4gICAgdXBkYXRlTWFuaWZlc3Q6IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ29tbWl0UHJlUHVibGlzaEZpbGVTeXN0ZW1UcmFuc2FjdGlvbk9wdGlvbnMge1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIHJlbGVhc2VQYWNrYWdlUGxhbnM6IFJlbGVhc2VQYWNrYWdlTWF0ZXJpYWxpemF0aW9uUGxhbltdO1xuICAgIHJvb3REaXI6IHN0cmluZztcbiAgICByb290UmVsZWFzZVBsYW46IFJvb3RSZWxlYXNlTWF0ZXJpYWxpemF0aW9uUGxhbjtcbiAgICBzdGFnZWRSb290TWFuaWZlc3RQYXRoPzogc3RyaW5nO1xuICAgIHN0YWdlZFJvb3REaXI6IHN0cmluZztcbiAgICB0cmFuc2FjdGlvblJvb3Q/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb21taXRQcmVQdWJsaXNoRmlsZVN5c3RlbVRyYW5zYWN0aW9uKHsgcGFja2FnZUpzb25QYXRoLCByZWxlYXNlUGFja2FnZVBsYW5zLCByb290RGlyLCByb290UmVsZWFzZVBsYW4sIHN0YWdlZFJvb3REaXIsIHN0YWdlZFJvb3RNYW5pZmVzdFBhdGgsIHRyYW5zYWN0aW9uUm9vdCwgfTogQ29tbWl0UHJlUHVibGlzaEZpbGVTeXN0ZW1UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlUmVuYW1lQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgICQkbmFtZT86IHN0cmluZztcbiAgICBiaW5hcnlOYW1lPzogc3RyaW5nO1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICAgICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBiaW5hcnlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgICAgICByZXBvc2l0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfTtcbn1cbi8qKlxuICogUmVuYW1lIHRoZSBOQVBJLVJTIHByb2plY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5hbWVPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IG5hbWUgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgYmluYXJ5IG5hbWUgKi5ub2RlIGZpbGVzXG4gICAgICovXG4gICAgYmluYXJ5TmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHBhY2thZ2UgbmFtZSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYENhcmdvLnRvbWxgXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnQ2FyZ28udG9tbCdcbiAgICAgKi9cbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyByZXBvc2l0b3J5IG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRSZW5hbWVPcHRpb25zKG9wdGlvbnM6IFJlbmFtZU9wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBuYW1lIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IGJpbmFyeSBuYW1lICoubm9kZSBmaWxlc1xuICAgICAqL1xuICAgIGJpbmFyeU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBwYWNrYWdlIG5hbWUgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBwYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICBtYW5pZmVzdFBhdGg6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHJlcG9zaXRvcnkgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgZGVzY3JpcHRpb24gb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG4iLCJpbXBvcnQgeyB0eXBlIFJlbmFtZU9wdGlvbnMgfSBmcm9tICcuLi9kZWYvcmVuYW1lLmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlbmFtZVByb2plY3QodXNlck9wdGlvbnM6IFJlbmFtZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlVW5pdmVyc2FsaXplQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgfTtcbn1cbi8qKlxuICogQ29tYmlsZSBidWlsdCBiaW5hcmllcyBpbnRvIG9uZSB1bml2ZXJzYWwgYmluYXJ5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pdmVyc2FsaXplT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHdoZXJlIG5hcGkgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluLCBhbGwgb3RoZXIgcGF0aHMgb3B0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBwcm9jZXNzLmN3ZCgpXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYHBhY2thZ2UuanNvbmBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdwYWNrYWdlLmpzb24nXG4gICAgICovXG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSBhbGwgYnVpbHQgYC5ub2RlYCBmaWxlcyBwdXQsIHNhbWUgYXMgYC0tb3V0cHV0LWRpcmAgb2YgYnVpbGQgY29tbWFuZFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJy4vJ1xuICAgICAqL1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdFVuaXZlcnNhbGl6ZU9wdGlvbnMob3B0aW9uczogVW5pdmVyc2FsaXplT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBvdXRwdXREaXI6IHN0cmluZztcbn07XG4iLCJpbXBvcnQgeyB0eXBlIFVuaXZlcnNhbGl6ZU9wdGlvbnMgfSBmcm9tICcuLi9kZWYvdW5pdmVyc2FsaXplLmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVuaXZlcnNhbGl6ZUJpbmFyaWVzKHVzZXJPcHRpb25zOiBVbml2ZXJzYWxpemVPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiIsImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjbGlwYW5pb24nO1xuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgQmFzZVZlcnNpb25Db21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICB9O1xufVxuLyoqXG4gKiBVcGRhdGUgdmVyc2lvbiBpbiBjcmVhdGVkIG5wbSBwYWNrYWdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25PcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdFZlcnNpb25PcHRpb25zKG9wdGlvbnM6IFZlcnNpb25PcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgVmVyc2lvbk9wdGlvbnMgfSBmcm9tICcuLi9kZWYvdmVyc2lvbi5qcyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2ZXJzaW9uKHVzZXJPcHRpb25zOiBWZXJzaW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBCYXNlQXJ0aWZhY3RzQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9hcnRpZmFjdHMuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgQXJ0aWZhY3RzQ29tbWFuZCBleHRlbmRzIEJhc2VBcnRpZmFjdHNDb21tYW5kIHtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgQmFzZUJ1aWxkQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9idWlsZC5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBCdWlsZENvbW1hbmQgZXh0ZW5kcyBCYXNlQnVpbGRDb21tYW5kIHtcbiAgICBwaXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY2FyZ29PcHRpb25zOiBzdHJpbmdbXTtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlQ3JlYXRlTnBtRGlyc0NvbW1hbmQgfSBmcm9tICcuLi9kZWYvY3JlYXRlLW5wbS1kaXJzLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIENyZWF0ZU5wbURpcnNDb21tYW5kIGV4dGVuZHMgQmFzZUNyZWF0ZU5wbURpcnNDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlTmV3Q29tbWFuZCB9IGZyb20gJy4uL2RlZi9uZXcuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0TmFwaVZlcnNpb25DaG9pY2VzKCk6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IGltcG9ydChcIi4uL3V0aWxzL3ZlcnNpb24uanNcIikuTmFwaVZlcnNpb247XG59W107XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBOZXdDb21tYW5kIGV4dGVuZHMgQmFzZU5ld0NvbW1hbmQge1xuICAgIGludGVyYWN0aXZlOiBib29sZWFuO1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTwwIHwgMT47XG4gICAgcHJpdmF0ZSBmZXRjaE9wdGlvbnM7XG4gICAgcHJpdmF0ZSBmZXRjaE5hbWU7XG4gICAgcHJpdmF0ZSBmZXRjaExpY2Vuc2U7XG4gICAgcHJpdmF0ZSBmZXRjaE5hcGlWZXJzaW9uO1xuICAgIHByaXZhdGUgZmV0Y2hUYXJnZXRzO1xuICAgIHByaXZhdGUgZmV0Y2hUeXBlRGVmO1xuICAgIHByaXZhdGUgZmV0Y2hHaXRodWJBY3Rpb25zO1xufVxuIiwiaW1wb3J0IHsgQmFzZVByZVB1Ymxpc2hDb21tYW5kIH0gZnJvbSAnLi4vZGVmL3ByZS1wdWJsaXNoLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFByZVB1Ymxpc2hDb21tYW5kIGV4dGVuZHMgQmFzZVByZVB1Ymxpc2hDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlUmVuYW1lQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9yZW5hbWUuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgUmVuYW1lQ29tbWFuZCBleHRlbmRzIEJhc2VSZW5hbWVDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlVW5pdmVyc2FsaXplQ29tbWFuZCB9IGZyb20gJy4uL2RlZi91bml2ZXJzYWxpemUuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgVW5pdmVyc2FsaXplQ29tbWFuZCBleHRlbmRzIEJhc2VVbml2ZXJzYWxpemVDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlVmVyc2lvbkNvbW1hbmQgfSBmcm9tICcuLi9kZWYvdmVyc2lvbi5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBWZXJzaW9uQ29tbWFuZCBleHRlbmRzIEJhc2VWZXJzaW9uQ29tbWFuZCB7XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgQ2xpIH0gZnJvbSAnY2xpcGFuaW9uJztcbmltcG9ydCB7IGNvbGxlY3RBcnRpZmFjdHMgfSBmcm9tICcuL2FwaS9hcnRpZmFjdHMuanMnO1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0IH0gZnJvbSAnLi9hcGkvYnVpbGQuanMnO1xuaW1wb3J0IHsgY3JlYXRlTnBtRGlycyB9IGZyb20gJy4vYXBpL2NyZWF0ZS1ucG0tZGlycy5qcyc7XG5pbXBvcnQgeyBuZXdQcm9qZWN0IH0gZnJvbSAnLi9hcGkvbmV3LmpzJztcbmltcG9ydCB7IHByZVB1Ymxpc2ggfSBmcm9tICcuL2FwaS9wcmUtcHVibGlzaC5qcyc7XG5pbXBvcnQgeyByZW5hbWVQcm9qZWN0IH0gZnJvbSAnLi9hcGkvcmVuYW1lLmpzJztcbmltcG9ydCB7IHVuaXZlcnNhbGl6ZUJpbmFyaWVzIH0gZnJvbSAnLi9hcGkvdW5pdmVyc2FsaXplLmpzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL2FwaS92ZXJzaW9uLmpzJztcbmltcG9ydCB7IEFydGlmYWN0c0NvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2FydGlmYWN0cy5qcyc7XG5pbXBvcnQgeyBCdWlsZENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkLmpzJztcbmltcG9ydCB7IENyZWF0ZU5wbURpcnNDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUtbnBtLWRpcnMuanMnO1xuaW1wb3J0IHsgTmV3Q29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvbmV3LmpzJztcbmltcG9ydCB7IFByZVB1Ymxpc2hDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9wcmUtcHVibGlzaC5qcyc7XG5pbXBvcnQgeyBSZW5hbWVDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9yZW5hbWUuanMnO1xuaW1wb3J0IHsgVW5pdmVyc2FsaXplQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvdW5pdmVyc2FsaXplLmpzJztcbmltcG9ydCB7IFZlcnNpb25Db21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9uLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNsaTogQ2xpPGltcG9ydChcImNsaXBhbmlvblwiKS5CYXNlQ29udGV4dD47XG4vKipcbiAqXG4gKiBAdXNhZ2VcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY2xpID0gbmV3IE5hcGlDbGkoKVxuICpcbiAqIGNsaS5idWlsZCh7XG4gKiAgIGN3ZDogJy9wYXRoL3RvL3lvdXIvcHJvamVjdCcsXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIE5hcGlDbGkge1xuICAgIGFydGlmYWN0czogdHlwZW9mIGNvbGxlY3RBcnRpZmFjdHM7XG4gICAgbmV3OiB0eXBlb2YgbmV3UHJvamVjdDtcbiAgICBidWlsZDogdHlwZW9mIGJ1aWxkUHJvamVjdDtcbiAgICBjcmVhdGVOcG1EaXJzOiB0eXBlb2YgY3JlYXRlTnBtRGlycztcbiAgICBwcmVQdWJsaXNoOiB0eXBlb2YgcHJlUHVibGlzaDtcbiAgICByZW5hbWU6IHR5cGVvZiByZW5hbWVQcm9qZWN0O1xuICAgIHVuaXZlcnNhbGl6ZTogdHlwZW9mIHVuaXZlcnNhbGl6ZUJpbmFyaWVzO1xuICAgIHZlcnNpb246IHR5cGVvZiB2ZXJzaW9uO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQnVpbGRDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogQnVpbGRDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQXJ0aWZhY3RzQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IEFydGlmYWN0c0NvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVDcmVhdGVOcG1EaXJzQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IENyZWF0ZU5wbURpcnNDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlUHJlUHVibGlzaENvbW1hbmQoYXJnczogc3RyaW5nW10pOiBQcmVQdWJsaXNoQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVJlbmFtZUNvbW1hbmQoYXJnczogc3RyaW5nW10pOiBSZW5hbWVDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlVW5pdmVyc2FsaXplQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFVuaXZlcnNhbGl6ZUNvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVWZXJzaW9uQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFZlcnNpb25Db21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlTmV3Q29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IE5ld0NvbW1hbmQ7XG5leHBvcnQgeyBwYXJzZVRyaXBsZSB9IGZyb20gJy4vdXRpbHMvdGFyZ2V0LmpzJztcbmV4cG9ydCB7IHR5cGUgR2VuZXJhdGVUeXBlRGVmT3B0aW9ucywgdHlwZSBXcml0ZUpzQmluZGluZ09wdGlvbnMsIHdyaXRlSnNCaW5kaW5nLCBnZW5lcmF0ZVR5cGVEZWYsIH0gZnJvbSAnLi9hcGkvYnVpbGQuanMnO1xuZXhwb3J0IHsgcmVhZE5hcGlDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZy5qcyc7XG4iXSwibWFwcGluZ3MiOiI7OztBQUNBLElBQVcsQ0FBQyx3QkFBd0I7Q0FBQztPQUFXLENBQUMsT0FBTztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtDQUFFO0FBQUM7QUFDL0gsSUFBVyxDQUFDLG9CQUFvQjtDQUFDO09BQVcsQ0FBQztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0NBQUU7QUFBQzs7OztBQ0R4RSxJQUFXLENBQUMsb0JBQW9CO0NBQUM7T0FBVSxDQUFDLGtCQUFrQixPQUFPO0NBQUc7RUFBQztFQUFJO0VBQUk7Q0FBRTtBQUFDOzs7O0FDQXBGLElBQVcsQ0FBQyxvQkFBb0I7Q0FBQztPQUFXLENBQUMsT0FBTztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFB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
|
|
1133
|
+
export type { GenerateTypeDefOptions, WriteJsBindingOptions };
|
|
1134
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsIm5hbWVzIjpbIkJ1aWxkT3B0aW9ucyIsIlJhd0J1aWxkT3B0aW9ucyIsIlJhd05ld09wdGlvbnMiLCJ2ZXJzaW9uIiwidmVyc2lvbiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWYvYXJ0aWZhY3RzLmQudHMiLCIuLi9zcmMvYXBpL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2RlZi9idWlsZC5kLnRzIiwiLi4vc3JjL3V0aWxzL2xvZy5kLnRzIiwiLi4vc3JjL3V0aWxzL3RhcmdldC5kLnRzIiwiLi4vc3JjL3V0aWxzL2NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwaS9idWlsZC5kLnRzIiwiLi4vc3JjL2RlZi9jcmVhdGUtbnBtLWRpcnMuZC50cyIsIi4uL3NyYy9hcGkvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvZGVmL25ldy5kLnRzIiwiLi4vc3JjL2FwaS9uZXcuZC50cyIsIi4uL3NyYy9kZWYvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9hcGkvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9kZWYvcmVuYW1lLmQudHMiLCIuLi9zcmMvYXBpL3JlbmFtZS5kLnRzIiwiLi4vc3JjL2RlZi91bml2ZXJzYWxpemUuZC50cyIsIi4uL3NyYy9hcGkvdW5pdmVyc2FsaXplLmQudHMiLCIuLi9zcmMvZGVmL3ZlcnNpb24uZC50cyIsIi4uL3NyYy9hcGkvdmVyc2lvbi5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2FydGlmYWN0cy5kLnRzIiwiLi4vc3JjL2NvbW1hbmRzL2J1aWxkLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvY3JlYXRlLW5wbS1kaXJzLmQudHMiLCIuLi9zcmMvY29tbWFuZHMvbmV3LmQudHMiLCIuLi9zcmMvY29tbWFuZHMvcHJlLXB1Ymxpc2guZC50cyIsIi4uL3NyYy9jb21tYW5kcy9yZW5hbWUuZC50cyIsIi4uL3NyYy9jb21tYW5kcy91bml2ZXJzYWxpemUuZC50cyIsIi4uL3NyYy9jb21tYW5kcy92ZXJzaW9uLmQudHMiLCIuLi9zcmMvaW5kZXguZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VBcnRpZmFjdHNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgYnVpbGRPdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBvdXRwdXREaXI6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfTtcbn1cbi8qKlxuICogQ29weSBhcnRpZmFjdHMgZnJvbSBHaXRodWIgQWN0aW9ucyBpbnRvIG5wbSBwYWNrYWdlcyBhbmQgcmVhZHkgdG8gcHVibGlzaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFydGlmYWN0c09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB3aGVyZSBuYXBpIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbiwgYWxsIG90aGVyIHBhdGhzIG9wdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBwYWNrYWdlLmpzb25gXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGFja2FnZS5qc29uJ1xuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgYWxsIGJ1aWx0IGAubm9kZWAgZmlsZXMgcHV0LCBzYW1lIGFzIGAtLW91dHB1dC1kaXJgIG9mIGJ1aWxkIGNvbW1hbmRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICcuL2FydGlmYWN0cydcbiAgICAgKi9cbiAgICBvdXRwdXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIHRoZSBidWlsZCBvdXRwdXQgZGlyLCBvbmx5IG5lZWRlZCB3aGVuIHRhcmdldHMgY29udGFpbiBhIFdBU0kgdGFyZ2V0XG4gICAgICovXG4gICAgYnVpbGRPdXRwdXREaXI/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRBcnRpZmFjdHNPcHRpb25zKG9wdGlvbnM6IEFydGlmYWN0c09wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgYnVpbGQgb3V0cHV0IGRpciwgb25seSBuZWVkZWQgd2hlbiB0YXJnZXRzIGNvbnRhaW4gYSBXQVNJIHRhcmdldFxuICAgICAqL1xuICAgIGJ1aWxkT3V0cHV0RGlyPzogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgQXJ0aWZhY3RzT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9hcnRpZmFjdHMuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29sbGVjdEFydGlmYWN0cyh1c2VyT3B0aW9uczogQXJ0aWZhY3RzT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY2xpcGFuaW9uJztcbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIEJhc2VCdWlsZENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgdGFyZ2V0Pzogc3RyaW5nO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgdGFyZ2V0RGlyPzogc3RyaW5nO1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbiAgICBwbGF0Zm9ybT86IGJvb2xlYW47XG4gICAganNQYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICBjb25zdEVudW0/OiBib29sZWFuO1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgbm9Kc0JpbmRpbmc/OiBib29sZWFuO1xuICAgIGR0cz86IHN0cmluZztcbiAgICBkdHNIZWFkZXI/OiBzdHJpbmc7XG4gICAgbm9EdHNIZWFkZXI/OiBib29sZWFuO1xuICAgIGR0c0NhY2hlOiBib29sZWFuO1xuICAgIGZvcm1hdD86ICdlc20nIHwgJ2NvbW1vbmpzJztcbiAgICBlc20/OiBib29sZWFuO1xuICAgIGNvbW1vbmpzPzogYm9vbGVhbjtcbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgYmluPzogc3RyaW5nO1xuICAgIHBhY2thZ2U/OiBzdHJpbmc7XG4gICAgcHJvZmlsZT86IHN0cmluZztcbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICB1c2VOYXBpQ3Jvc3M/OiBib29sZWFuO1xuICAgIHdhdGNoPzogYm9vbGVhbjtcbiAgICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBwYXJzZWQgYnVpbGQgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBnZXRPcHRpb25zKCk6IHtcbiAgICAgICAgdGFyZ2V0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGN3ZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBtYW5pZmVzdFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdGFyZ2V0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG91dHB1dERpcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwbGF0Zm9ybTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAganNQYWNrYWdlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdEVudW06IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHJ1bnRpbWVTdHJpbmdFbnVtOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBqc0JpbmRpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbm9Kc0JpbmRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGR0czogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBkdHNIZWFkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbm9EdHNIZWFkZXI6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGR0c0NhY2hlOiBib29sZWFuO1xuICAgICAgICBmb3JtYXQ6IFwiZXNtXCIgfCBcImNvbW1vbmpzXCIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGVzbTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29tbW9uanM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHN0cmlwOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICByZWxlYXNlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICB2ZXJib3NlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBiaW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcGFja2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwcm9maWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNyb3NzQ29tcGlsZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgdXNlQ3Jvc3M6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIHVzZU5hcGlDcm9zczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgd2F0Y2g6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGZlYXR1cmVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgYWxsRmVhdHVyZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIG5vRGVmYXVsdEZlYXR1cmVzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIH07XG59XG4vKipcbiAqIEJ1aWxkIHRoZSBOQVBJLVJTIHByb2plY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGZvciB0aGUgdGFyZ2V0IHRyaXBsZSwgYnlwYXNzZWQgdG8gYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0YFxuICAgICAqL1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgQ2FyZ28udG9tbGBcbiAgICAgKi9cbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEaXJlY3RvcnkgZm9yIGFsbCBjcmF0ZSBnZW5lcmF0ZWQgYXJ0aWZhY3RzLCBzZWUgYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0LWRpcmBcbiAgICAgKi9cbiAgICB0YXJnZXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB3aGVyZSBhbGwgdGhlIGJ1aWx0IGZpbGVzIHdvdWxkIGJlIHB1dC4gRGVmYXVsdCB0byB0aGUgY3JhdGUgZm9sZGVyXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFkZCBwbGF0Zm9ybSB0cmlwbGUgdG8gdGhlIGdlbmVyYXRlZCBub2RlanMgYmluZGluZyBmaWxlLCBlZzogYFtuYW1lXS5saW51eC14NjQtZ251Lm5vZGVgXG4gICAgICovXG4gICAgcGxhdGZvcm0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhY2thZ2UgbmFtZSBpbiBnZW5lcmF0ZWQganMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWdcbiAgICAgKi9cbiAgICBqc1BhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgY29uc3QgZW51bSBmb3IgdHlwZXNjcmlwdCBiaW5kaW5nc1xuICAgICAqL1xuICAgIGNvbnN0RW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW1pdCBgI1tuYXBpKHN0cmluZ19lbnVtKV1gIGVudW1zIGFzIHJ1bnRpbWUgZW51bXMgKGBleHBvcnQgZGVjbGFyZSBlbnVtYCkgdW5kZXIgYC0tbm8tY29uc3QtZW51bWAuIERlZmF1bHQ6IHR5cGUtb25seSB1bmlvbi5cbiAgICAgKi9cbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGF0aCBhbmQgZmlsZW5hbWUgb2YgZ2VuZXJhdGVkIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLiBSZWxhdGl2ZSB0byBgLS1vdXRwdXQtZGlyYC5cbiAgICAgKi9cbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLlxuICAgICAqL1xuICAgIG5vSnNCaW5kaW5nPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXRoIGFuZCBmaWxlbmFtZSBvZiBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gUmVsYXRpdmUgdG8gYC0tb3V0cHV0LWRpcmBcbiAgICAgKi9cbiAgICBkdHM/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGZpbGUgaGVhZGVyIGZvciBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gT25seSB3b3JrcyB3aGVuIGB0eXBlZGVmYCBmZWF0dXJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBmaWxlIGhlYWRlciBmb3IgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIE9ubHkgd29ya3Mgd2hlbiBgdHlwZWRlZmAgZmVhdHVyZSBlbmFibGVkLlxuICAgICAqL1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgZHRzIGNhY2hlLCBkZWZhdWx0IHRvIHRydWVcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBkdHNDYWNoZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIG1vZHVsZSBmb3JtYXQgb2YgdGhlIGdlbmVyYXRlZCBKUyBiaW5kaW5nIGZpbGUuIE9ubHkgd29ya3Mgd2l0aCBgLS1wbGF0Zm9ybWAgZmxhZy4gRGVmYXVsdHMgdG8gYGNvbW1vbmpzYC5cbiAgICAgKi9cbiAgICBmb3JtYXQ/OiAnZXNtJyB8ICdjb21tb25qcyc7XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBlc21gLlxuICAgICAqL1xuICAgIGVzbT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBjb21tb25qc2AuXG4gICAgICovXG4gICAgY29tbW9uanM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc3RyaXAgdGhlIGxpYnJhcnkgdG8gYWNoaWV2ZSB0aGUgbWluaW11bSBmaWxlIHNpemVcbiAgICAgKi9cbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgaW4gcmVsZWFzZSBtb2RlXG4gICAgICovXG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVmVyYm9zZWx5IGxvZyBidWlsZCBjb21tYW5kIHRyYWNlXG4gICAgICovXG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgb25seSB0aGUgc3BlY2lmaWVkIGJpbmFyeVxuICAgICAqL1xuICAgIGJpbj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCB0aGUgc3BlY2lmaWVkIGxpYnJhcnkgb3IgdGhlIG9uZSBhdCBjd2RcbiAgICAgKi9cbiAgICBwYWNrYWdlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGFydGlmYWN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZmlsZVxuICAgICAqL1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gY3Jvc3MgY29tcGlsZSBieSByZXBsYWNpbmcgdGhlIGNhcmdvIHN1YmNvbW1hbmQ6IFdpbmRvd3MgTVNWQyB0YXJnZXRzIGZyb20gYSBub24tV2luZG93cyBob3N0IGJ1aWxkIHdpdGggYGNhcmdvLXh3aW5gIChgd2luZG93cy1nbnVgIHRhcmdldHMgYXJlIHJlamVjdGVkLCBgY2FyZ28teHdpbmAgY2Fubm90IGhhbmRsZSB0aGVtKSwgbm9uLVdpbmRvd3MgdGFyZ2V0cyBidWlsZCB3aXRoIGBjYXJnby16aWdidWlsZGAgKHJlcXVpcmVzIGB6aWdgIG9uIFBBVEgpLiBUaGUgc2VsZWN0ZWQgc3ViY29tbWFuZCBpcyBhdXRvLWluc3RhbGxlZCBvbiBmaXJzdCB1c2UuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLXVzZS1jcm9zc2AsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIG5vdCByZWNvbW1lbmRlZCwgcHJlZmVyIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1uYXBpLWNyb3NzYDogYnVpbGQgaW4gYSBEb2NrZXIgb3IgUG9kbWFuIGNvbnRhaW5lciB3aXRoIFtjcm9zc10oaHR0cHM6Ly9naXRodWIuY29tL2Nyb3NzLXJzL2Nyb3NzKSwgd2hpY2ggbXVzdCBiZSBpbnN0YWxsZWQgbWFudWFsbHkgYW5kIG5lZWRzIGEgcnVubmluZyBjb250YWluZXIgZW5naW5lLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1jcm9zcy1jb21waWxlYCwgYC0tdXNlLW5hcGktY3Jvc3NgIG9yIGAtLXdhdGNoYFxuICAgICAqL1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBkb3dubG9hZCBhIHByZWJ1aWx0IGdjYyBjcm9zcyB0b29sY2hhaW4gZnJvbSBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCAoZ2xpYmMgMi4xNykgYW5kIHNldCBsaW5rZXIgYW5kIEMgY29tcGlsZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBMaW51eCBnbGliYyB0YXJnZXRzIG9ubHkgKHg2NCwgYXJtNjQsIGFybXY3LCBwcGM2NGxlLCBzMzkweCkgb24gYSBMaW51eCB4NjQgb3IgYXJtNjQgaG9zdCwgYW55IG90aGVyIHRhcmdldCBvciBob3N0IGVycm9ycy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAgb3IgYC0tdXNlLWNyb3NzYFxuICAgICAqL1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogd2F0Y2ggdGhlIGNyYXRlIGNoYW5nZXMgYW5kIGJ1aWxkIGNvbnRpbnVvdXNseSB3aXRoIGBjYXJnby13YXRjaGAgY3JhdGVzXG4gICAgICovXG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmVzIHRvIGFjdGl2YXRlXG4gICAgICovXG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZSBhbGwgYXZhaWxhYmxlIGZlYXR1cmVzXG4gICAgICovXG4gICAgYWxsRmVhdHVyZXM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBhY3RpdmF0ZSB0aGUgYGRlZmF1bHRgIGZlYXR1cmVcbiAgICAgKi9cbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRCdWlsZE9wdGlvbnMob3B0aW9uczogQnVpbGRPcHRpb25zKToge1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGZvciB0aGUgdGFyZ2V0IHRyaXBsZSwgYnlwYXNzZWQgdG8gYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0YFxuICAgICAqL1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgQ2FyZ28udG9tbGBcbiAgICAgKi9cbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqL1xuICAgIHBhY2thZ2VKc29uUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEaXJlY3RvcnkgZm9yIGFsbCBjcmF0ZSBnZW5lcmF0ZWQgYXJ0aWZhY3RzLCBzZWUgYGNhcmdvIGJ1aWxkIC0tdGFyZ2V0LWRpcmBcbiAgICAgKi9cbiAgICB0YXJnZXREaXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB3aGVyZSBhbGwgdGhlIGJ1aWx0IGZpbGVzIHdvdWxkIGJlIHB1dC4gRGVmYXVsdCB0byB0aGUgY3JhdGUgZm9sZGVyXG4gICAgICovXG4gICAgb3V0cHV0RGlyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFkZCBwbGF0Zm9ybSB0cmlwbGUgdG8gdGhlIGdlbmVyYXRlZCBub2RlanMgYmluZGluZyBmaWxlLCBlZzogYFtuYW1lXS5saW51eC14NjQtZ251Lm5vZGVgXG4gICAgICovXG4gICAgcGxhdGZvcm0/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhY2thZ2UgbmFtZSBpbiBnZW5lcmF0ZWQganMgYmluZGluZyBmaWxlLiBPbmx5IHdvcmtzIHdpdGggYC0tcGxhdGZvcm1gIGZsYWdcbiAgICAgKi9cbiAgICBqc1BhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgY29uc3QgZW51bSBmb3IgdHlwZXNjcmlwdCBiaW5kaW5nc1xuICAgICAqL1xuICAgIGNvbnN0RW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW1pdCBgI1tuYXBpKHN0cmluZ19lbnVtKV1gIGVudW1zIGFzIHJ1bnRpbWUgZW51bXMgKGBleHBvcnQgZGVjbGFyZSBlbnVtYCkgdW5kZXIgYC0tbm8tY29uc3QtZW51bWAuIERlZmF1bHQ6IHR5cGUtb25seSB1bmlvbi5cbiAgICAgKi9cbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUGF0aCBhbmQgZmlsZW5hbWUgb2YgZ2VuZXJhdGVkIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLiBSZWxhdGl2ZSB0byBgLS1vdXRwdXQtZGlyYC5cbiAgICAgKi9cbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLlxuICAgICAqL1xuICAgIG5vSnNCaW5kaW5nPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXRoIGFuZCBmaWxlbmFtZSBvZiBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gUmVsYXRpdmUgdG8gYC0tb3V0cHV0LWRpcmBcbiAgICAgKi9cbiAgICBkdHM/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGZpbGUgaGVhZGVyIGZvciBnZW5lcmF0ZWQgdHlwZSBkZWYgZmlsZS4gT25seSB3b3JrcyB3aGVuIGB0eXBlZGVmYCBmZWF0dXJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBmaWxlIGhlYWRlciBmb3IgZ2VuZXJhdGVkIHR5cGUgZGVmIGZpbGUuIE9ubHkgd29ya3Mgd2hlbiBgdHlwZWRlZmAgZmVhdHVyZSBlbmFibGVkLlxuICAgICAqL1xuICAgIG5vRHRzSGVhZGVyPzogYm9vbGVhbjtcbiAgICBkdHNDYWNoZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUaGUgbW9kdWxlIGZvcm1hdCBvZiB0aGUgZ2VuZXJhdGVkIEpTIGJpbmRpbmcgZmlsZS4gT25seSB3b3JrcyB3aXRoIGAtLXBsYXRmb3JtYCBmbGFnLiBEZWZhdWx0cyB0byBgY29tbW9uanNgLlxuICAgICAqL1xuICAgIGZvcm1hdD86IFwiZXNtXCIgfCBcImNvbW1vbmpzXCI7XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBlc21gLlxuICAgICAqL1xuICAgIGVzbT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGAtLWZvcm1hdCBjb21tb25qc2AuXG4gICAgICovXG4gICAgY29tbW9uanM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc3RyaXAgdGhlIGxpYnJhcnkgdG8gYWNoaWV2ZSB0aGUgbWluaW11bSBmaWxlIHNpemVcbiAgICAgKi9cbiAgICBzdHJpcD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgaW4gcmVsZWFzZSBtb2RlXG4gICAgICovXG4gICAgcmVsZWFzZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVmVyYm9zZWx5IGxvZyBidWlsZCBjb21tYW5kIHRyYWNlXG4gICAgICovXG4gICAgdmVyYm9zZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQnVpbGQgb25seSB0aGUgc3BlY2lmaWVkIGJpbmFyeVxuICAgICAqL1xuICAgIGJpbj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBCdWlsZCB0aGUgc3BlY2lmaWVkIGxpYnJhcnkgb3IgdGhlIG9uZSBhdCBjd2RcbiAgICAgKi9cbiAgICBwYWNrYWdlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGFydGlmYWN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZmlsZVxuICAgICAqL1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogW2V4cGVyaW1lbnRhbF0gY3Jvc3MgY29tcGlsZSBieSByZXBsYWNpbmcgdGhlIGNhcmdvIHN1YmNvbW1hbmQ6IFdpbmRvd3MgTVNWQyB0YXJnZXRzIGZyb20gYSBub24tV2luZG93cyBob3N0IGJ1aWxkIHdpdGggYGNhcmdvLXh3aW5gIChgd2luZG93cy1nbnVgIHRhcmdldHMgYXJlIHJlamVjdGVkLCBgY2FyZ28teHdpbmAgY2Fubm90IGhhbmRsZSB0aGVtKSwgbm9uLVdpbmRvd3MgdGFyZ2V0cyBidWlsZCB3aXRoIGBjYXJnby16aWdidWlsZGAgKHJlcXVpcmVzIGB6aWdgIG9uIFBBVEgpLiBUaGUgc2VsZWN0ZWQgc3ViY29tbWFuZCBpcyBhdXRvLWluc3RhbGxlZCBvbiBmaXJzdCB1c2UuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLXVzZS1jcm9zc2AsIGAtLXVzZS1uYXBpLWNyb3NzYCBvciBgLS13YXRjaGBcbiAgICAgKi9cbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFtleHBlcmltZW50YWxdIG5vdCByZWNvbW1lbmRlZCwgcHJlZmVyIGAtLWNyb3NzLWNvbXBpbGVgIG9yIGAtLXVzZS1uYXBpLWNyb3NzYDogYnVpbGQgaW4gYSBEb2NrZXIgb3IgUG9kbWFuIGNvbnRhaW5lciB3aXRoIFtjcm9zc10oaHR0cHM6Ly9naXRodWIuY29tL2Nyb3NzLXJzL2Nyb3NzKSwgd2hpY2ggbXVzdCBiZSBpbnN0YWxsZWQgbWFudWFsbHkgYW5kIG5lZWRzIGEgcnVubmluZyBjb250YWluZXIgZW5naW5lLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1jcm9zcy1jb21waWxlYCwgYC0tdXNlLW5hcGktY3Jvc3NgIG9yIGAtLXdhdGNoYFxuICAgICAqL1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBbZXhwZXJpbWVudGFsXSBkb3dubG9hZCBhIHByZWJ1aWx0IGdjYyBjcm9zcyB0b29sY2hhaW4gZnJvbSBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCAoZ2xpYmMgMi4xNykgYW5kIHNldCBsaW5rZXIgYW5kIEMgY29tcGlsZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBMaW51eCBnbGliYyB0YXJnZXRzIG9ubHkgKHg2NCwgYXJtNjQsIGFybXY3LCBwcGM2NGxlLCBzMzkweCkgb24gYSBMaW51eCB4NjQgb3IgYXJtNjQgaG9zdCwgYW55IG90aGVyIHRhcmdldCBvciBob3N0IGVycm9ycy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tY3Jvc3MtY29tcGlsZWAgb3IgYC0tdXNlLWNyb3NzYFxuICAgICAqL1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogd2F0Y2ggdGhlIGNyYXRlIGNoYW5nZXMgYW5kIGJ1aWxkIGNvbnRpbnVvdXNseSB3aXRoIGBjYXJnby13YXRjaGAgY3JhdGVzXG4gICAgICovXG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmVzIHRvIGFjdGl2YXRlXG4gICAgICovXG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZSBhbGwgYXZhaWxhYmxlIGZlYXR1cmVzXG4gICAgICovXG4gICAgYWxsRmVhdHVyZXM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBhY3RpdmF0ZSB0aGUgYGRlZmF1bHRgIGZlYXR1cmVcbiAgICAgKi9cbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG59O1xuIiwiZGVjbGFyZSBtb2R1bGUgJ29idWcnIHtcbiAgICBpbnRlcmZhY2UgRGVidWdnZXIge1xuICAgICAgICBpbmZvOiB0eXBlb2YgY29uc29sZS5lcnJvcjtcbiAgICAgICAgd2FybjogdHlwZW9mIGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIGVycm9yOiB0eXBlb2YgY29uc29sZS5lcnJvcjtcbiAgICB9XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBkZWJ1Z0ZhY3Rvcnk6IChuYW1lc3BhY2U6IHN0cmluZykgPT4gaW1wb3J0KFwib2J1Z1wiKS5EZWJ1Z2dlcjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGRlYnVnOiBpbXBvcnQoXCJvYnVnXCIpLkRlYnVnZ2VyO1xuIiwiZXhwb3J0IHR5cGUgUGxhdGZvcm0gPSBOb2RlSlMuUGxhdGZvcm0gfCAnd2FzbScgfCAnd2FzaScgfCAnb3Blbmhhcm1vbnknO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVU5JVkVSU0FMX1RBUkdFVFM6IHtcbiAgICByZWFkb25seSAndW5pdmVyc2FsLWFwcGxlLWRhcndpbic6IHJlYWRvbmx5IFtcImFhcmNoNjQtYXBwbGUtZGFyd2luXCIsIFwieDg2XzY0LWFwcGxlLWRhcndpblwiXTtcbn07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBBVkFJTEFCTEVfVEFSR0VUUzogcmVhZG9ubHkgW1wiYWFyY2g2NC1hcHBsZS1kYXJ3aW5cIiwgXCJhYXJjaDY0LWxpbnV4LWFuZHJvaWRcIiwgXCJhYXJjaDY0LXVua25vd24tbGludXgtZ251XCIsIFwiYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2xcIiwgXCJhYXJjaDY0LXVua25vd24tbGludXgtb2hvc1wiLCBcImFhcmNoNjQtcGMtd2luZG93cy1tc3ZjXCIsIFwieDg2XzY0LWFwcGxlLWRhcndpblwiLCBcIng4Nl82NC1wYy13aW5kb3dzLW1zdmNcIiwgXCJ4ODZfNjQtcGMtd2luZG93cy1nbnVcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1nbnVcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1tdXNsXCIsIFwieDg2XzY0LXVua25vd24tbGludXgtb2hvc1wiLCBcIng4Nl82NC11bmtub3duLWZyZWVic2RcIiwgXCJpNjg2LXBjLXdpbmRvd3MtbXN2Y1wiLCBcImFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmXCIsIFwiYXJtdjctdW5rbm93bi1saW51eC1tdXNsZWFiaWhmXCIsIFwiYXJtdjctbGludXgtYW5kcm9pZGVhYmlcIiwgXCJ1bml2ZXJzYWwtYXBwbGUtZGFyd2luXCIsIFwibG9vbmdhcmNoNjQtdW5rbm93bi1saW51eC1nbnVcIiwgXCJyaXNjdjY0Z2MtdW5rbm93bi1saW51eC1nbnVcIiwgXCJwb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LWdudVwiLCBcInMzOTB4LXVua25vd24tbGludXgtZ251XCIsIFwid2FzbTMyLXdhc2lwMVwiLCBcIndhc20zMi13YXNpcDEtdGhyZWFkc1wiXTtcbmV4cG9ydCB0eXBlIFRhcmdldFRyaXBsZSA9ICh0eXBlb2YgQVZBSUxBQkxFX1RBUkdFVFMpW251bWJlcl07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBERUZBVUxUX1RBUkdFVFM6IHJlYWRvbmx5IFtcIng4Nl82NC1hcHBsZS1kYXJ3aW5cIiwgXCJhYXJjaDY0LWFwcGxlLWRhcndpblwiLCBcIng4Nl82NC1wYy13aW5kb3dzLW1zdmNcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1nbnVcIl07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBUQVJHRVRfTElOS0VSOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xudHlwZSBOb2RlSlNBcmNoID0gJ2FybScgfCAnYXJtNjQnIHwgJ2lhMzInIHwgJ2xvb25nNjQnIHwgJ21pcHMnIHwgJ21pcHNlbCcgfCAncHBjJyB8ICdwcGM2NCcgfCAncmlzY3Y2NCcgfCAnczM5MCcgfCAnczM5MHgnIHwgJ3gzMicgfCAneDY0JyB8ICd1bml2ZXJzYWwnIHwgJ3dhc20zMic7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBOb2RlQXJjaFRvQ3B1OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVW5pQXJjaHNCeVBsYXRmb3JtOiBQYXJ0aWFsPFJlY29yZDxQbGF0Zm9ybSwgTm9kZUpTQXJjaFtdPj47XG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldCB7XG4gICAgdHJpcGxlOiBzdHJpbmc7XG4gICAgcGxhdGZvcm1BcmNoQUJJOiBzdHJpbmc7XG4gICAgcGxhdGZvcm06IFBsYXRmb3JtO1xuICAgIGFyY2g6IE5vZGVKU0FyY2g7XG4gICAgYWJpOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IHR5cGUgV2FzaUZsYXZvciA9ICdzaW5nbGUnIHwgJ3RocmVhZHMnO1xuZXhwb3J0IGludGVyZmFjZSBXYXNpVGFyZ2V0IHtcbiAgICBjYW5vbmljYWxUcmlwbGU6IHN0cmluZztcbiAgICBmbGF2b3I6IFdhc2lGbGF2b3I7XG4gICAgcGxhdGZvcm1BcmNoQUJJOiBzdHJpbmc7XG59XG4vKipcbiAqIFJlc29sdmUgaGlzdG9yaWNhbCBXQVNJIHNwZWxsaW5ncyB0byBvbmUgYnVpbGQgdGFyZ2V0IGFuZCBvbmUgYXJ0aWZhY3RcbiAqIGlkZW50aXR5LiBgd2FzbTMyLXdhc2lgIGhpc3RvcmljYWxseSBwcm9kdWNlZCB0aGUgdGhyZWFkZWQgcGFja2FnZSwgc28gaXRcbiAqIG11c3QgbmV2ZXIgYmUgaW5mZXJyZWQgYXMgdGhyZWFkbGVzcyBtZXJlbHkgYmVjYXVzZSBpdHMgbmFtZSBsYWNrcyB0aGVcbiAqIGAtdGhyZWFkc2Agc3VmZml4LlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRXYXNpVGFyZ2V0KHRhcmdldDogc3RyaW5nIHwgUGljazxUYXJnZXQsICd0cmlwbGUnPik6IFdhc2lUYXJnZXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YXNpVGFyZ2V0SGFzVGhyZWFkcyh0YXJnZXQ6IHN0cmluZyB8IFBpY2s8VGFyZ2V0LCAndHJpcGxlJz4pOiBib29sZWFuO1xuLyoqXG4gKiBEZXRlY3QgdGhlIG1ham9yIHZlcnNpb24gb2YgYSB3YXNpLXNkayBpbnN0YWxsYXRpb24uXG4gKlxuICogd2FzaS1saWJjIGRyb3BwZWQgdGhlIHVudXNlZCBgaW50IG9wYCBwYXJhbWV0ZXIgZnJvbVxuICogYF9fd2FzaWxpYmNfZnV0ZXhfd2FpdF9hdG9taWNfd2FpdGAgYW5kIGBfX3dhc2lsaWJjX2Z1dGV4X3dhaXRfbWF5YmVfYnVzeWAsXG4gKiBhbmQgd2FzaS1zZGsgMzQgaXMgdGhlIGZpcnN0IHJlbGVhc2UgdGhhdCBzaGlwcyB0aGUgMy1hcmd1bWVudCBzaWduYXR1cmUuXG4gKiBTdGF0aWMgYXJjaGl2ZXMgY29tcGlsZWQgYWdhaW5zdCB0aGUgdHdvIHNpZ25hdHVyZXMgY2Fubm90IGJlIG1peGVkLCBzbyB0aGVcbiAqIGVtbmFwaSBhcmNoaXZlcyBoYXZlIHRvIGJlIHBpY2tlZCBieSB3YXNpLXNkayB2ZXJzaW9uLCBub3QgYnkgdGFyZ2V0IHRyaXBsZVxuICogYWxvbmUuXG4gKlxuICogYDx3YXNpU2RrUGF0aD4vVkVSU0lPTmAgaXMgdGhlIHByaW1hcnkgc2lnbmFsOiBldmVyeSByZWxlYXNlIHNoaXBzIGl0IGFuZFxuICogaXRzIGZpcnN0IGxpbmUgaXMgdGhlIHZlcnNpb24gKGAyNy4wYCwgYDMzLjArbWAsIGAzNC4wYCwgLi4uKS4gVGhlXG4gKiBgd2FzaS92ZXJzaW9uLmhgIGhlYWRlciBjYXJyeWluZyBgX193YXNpX3Nka19tYWpvcl9fYCBvbmx5IGFwcGVhcnMgZnJvbVxuICogd2FzaS1zZGsgMzAgb253YXJkcywgc28gaXQgc3RheXMgYSBmYWxsYmFjayBmb3IgdHJlZXMgd2l0aG91dCBhIGBWRVJTSU9OYC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCB3aGVuIG5laXRoZXIgc2lnbmFsIGlzIHJlYWRhYmxlIG9yIHBhcnNlYWJsZS4gRGV0ZWN0aW9uIG11c3RcbiAqIG5ldmVyIHRocm93OiBhbiB1bmtub3duIHdhc2ktc2RrIGRlZ3JhZGVzIHRvIHRoZSBsZWdhY3kgYXJjaGl2ZXMgaW5zdGVhZCBvZlxuICogZmFpbGluZyB0aGUgYnVpbGQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdhc2lTZGtNYWpvclZlcnNpb24od2FzaVNka1BhdGg6IHN0cmluZyk6IG51bWJlciB8IG51bGw7XG4vKipcbiAqIFBhdGggdG8gdGhlIHdhc2ktbGliYyB0aGF0IGNhcmdvIGxpbmtzIHdoZW4gbm8gd2FzaS1zZGsgaXMgY29uZmlndXJlZC5cbiAqXG4gKiBXaXRob3V0IGBXQVNJX1NES19QQVRIYCB0aGUgdGFyZ2V0IGxpbmtzIHRocm91Z2ggYHJ1c3QtbGxkYCBhZ2FpbnN0IHRoZVxuICogd2FzaS1saWJjIGJ1bmRsZWQgd2l0aCB0aGUgUnVzdCBzdGFuZGFyZCBsaWJyYXJ5LCBzbyB0aGF0IGNvcHkg4oCUIG5vdCBhXG4gKiB3YXNpLXNkayDigJQgZGVjaWRlcyB0aGUgZnV0ZXggQUJJLlxuICpcbiAqIGBjd2RgIG11c3QgYmUgdGhlIGRpcmVjdG9yeSBDYXJnbyBpcyBzcGF3bmVkIGluLCBiZWNhdXNlIHRoYXQgaXMgd2hhdFxuICogc2VsZWN0cyB0aGUgdG9vbGNoYWluLlxuICpcbiAqIFJldHVybnMgYG51bGxgIHdoZW4gYHJ1c3RjYCBjYW5ub3QgYmUgcXVlcmllZCBvciB0aGUgdGFyZ2V0IGlzIG5vdFxuICogaW5zdGFsbGVkLiBOZXZlciB0aHJvd3M6IGFuIHVuZGV0ZWN0YWJsZSBzeXNyb290IGRlZ3JhZGVzIHRvIHRoZSBsZWdhY3lcbiAqIGFyY2hpdmVzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBydXN0QnVuZGxlZFdhc2lMaWJjKHdhc2lUYXJnZXQ6IHN0cmluZywgY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgbnVsbDtcbi8qKlxuICogV2hldGhlciBhIHdhc2ktbGliYyBhcmNoaXZlIGNhcnJpZXMgdGhlIDMtYXJndW1lbnQgZnV0ZXggQUJJLlxuICpcbiAqIFJldHVybnMgYG51bGxgIHdoZW4gdGhlIGFyY2hpdmUgY2Fubm90IGJlIHJlYWQsIHNvIGNhbGxlcnMgY2FuIHRlbGxcbiAqIFwiZGVmaW5pdGVseSB0aGUgbGVnYWN5IEFCSVwiIGFwYXJ0IGZyb20gXCJjb3VsZCBub3QgdGVsbFwiLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YXNpTGliY0hhc05ld0Z1dGV4QWJpKGxpYmNBcmNoaXZlUGF0aDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gfCBudWxsO1xuLyoqXG4gKiBBIHRyaXBsZSBpcyBhIHNwZWNpZmljIGZvcm1hdCBmb3Igc3BlY2lmeWluZyBhIHRhcmdldCBhcmNoaXRlY3R1cmUuXG4gKiBUcmlwbGVzIG1heSBiZSByZWZlcnJlZCB0byBhcyBhIHRhcmdldCB0cmlwbGUgd2hpY2ggaXMgdGhlIGFyY2hpdGVjdHVyZSBmb3IgdGhlIGFydGlmYWN0IHByb2R1Y2VkLCBhbmQgdGhlIGhvc3QgdHJpcGxlIHdoaWNoIGlzIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCB0aGUgY29tcGlsZXIgaXMgcnVubmluZyBvbi5cbiAqIFRoZSBnZW5lcmFsIGZvcm1hdCBvZiB0aGUgdHJpcGxlIGlzIGA8YXJjaD48c3ViPi08dmVuZG9yPi08c3lzPi08YWJpPmAgd2hlcmU6XG4gKiAgIC0gYGFyY2hgID0gVGhlIGJhc2UgQ1BVIGFyY2hpdGVjdHVyZSwgZm9yIGV4YW1wbGUgYHg4Nl82NGAsIGBpNjg2YCwgYGFybWAsIGB0aHVtYmAsIGBtaXBzYCwgZXRjLlxuICogICAtIGBzdWJgID0gVGhlIENQVSBzdWItYXJjaGl0ZWN0dXJlLCBmb3IgZXhhbXBsZSBgYXJtYCBoYXMgYHY3YCwgYHY3c2AsIGB2NXRlYCwgZXRjLlxuICogICAtIGB2ZW5kb3JgID0gVGhlIHZlbmRvciwgZm9yIGV4YW1wbGUgYHVua25vd25gLCBgYXBwbGVgLCBgcGNgLCBgbnZpZGlhYCwgZXRjLlxuICogICAtIGBzeXNgID0gVGhlIHN5c3RlbSBuYW1lLCBmb3IgZXhhbXBsZSBgbGludXhgLCBgd2luZG93c2AsIGBkYXJ3aW5gLCBldGMuIG5vbmUgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGJhcmUtbWV0YWwgd2l0aG91dCBhbiBPUy5cbiAqICAgLSBgYWJpYCA9IFRoZSBBQkksIGZvciBleGFtcGxlIGBnbnVgLCBgYW5kcm9pZGAsIGBlYWJpYCwgZXRjLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJzZVRyaXBsZShyYXdUcmlwbGU6IHN0cmluZyk6IFRhcmdldDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldFN5c3RlbURlZmF1bHRUYXJnZXQoKTogVGFyZ2V0O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0VGFyZ2V0TGlua2VyKHRhcmdldDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuLyoqXG4gKiBMb2FkZXItZmlsZSBzdWZmaXggZm9yIGEgV0FTSSBmbGF2b3IsIGRlcml2ZWQgZnJvbSBpdHMgYHBsYXRmb3JtQXJjaEFCSWA6XG4gKiB0aGUgbGVnYWN5IHRocmVhZGVkIGZsYXZvciBrZWVwcyB0aGUgaGlzdG9yaWNhbCBgd2FzaWAgc3RlbVxuICogKGA8YmluYXJ5TmFtZT4ud2FzaS5janNgLCBgPGJpbmFyeU5hbWU+Lndhc2ktYnJvd3Nlci5qc2ApLCB3aGlsZSBlYWNoXG4gKiBkaXN0aW5jdGx5IG5hbWVkIG5vbi10aHJlYWRlZCBmbGF2b3IgZGVyaXZlcyBpdHMgb3duXG4gKiAoYDxiaW5hcnlOYW1lPi53YXNpcDEuY2pzYCwgYDxiaW5hcnlOYW1lPi53YXNpcDEtYnJvd3Nlci5qc2AsIC4uLikuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdhc2lMb2FkZXJTdWZmaXgocGxhdGZvcm1BcmNoQUJJOiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0YXJnZXRUb0VudlZhcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IHR5cGUgVGFyZ2V0IH0gZnJvbSAnLi90YXJnZXQuanMnO1xuZXhwb3J0IHR5cGUgVmFsdWVPZkNvbnN0QXJyYXk8VD4gPSBUW0V4Y2x1ZGU8a2V5b2YgVCwga2V5b2YgQXJyYXk8YW55Pj5dO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgU3VwcG9ydGVkUGFja2FnZU1hbmFnZXJzOiByZWFkb25seSBbXCJ5YXJuXCIsIFwicG5wbVwiXTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFN1cHBvcnRlZFRlc3RGcmFtZXdvcmtzOiByZWFkb25seSBbXCJhdmFcIl07XG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRQYWNrYWdlTWFuYWdlciA9IFZhbHVlT2ZDb25zdEFycmF5PHR5cGVvZiBTdXBwb3J0ZWRQYWNrYWdlTWFuYWdlcnM+O1xuZXhwb3J0IHR5cGUgU3VwcG9ydGVkVGVzdEZyYW1ld29yayA9IFZhbHVlT2ZDb25zdEFycmF5PHR5cGVvZiBTdXBwb3J0ZWRUZXN0RnJhbWV3b3Jrcz47XG4vKipcbiAqIFBhY2thZ2UgbWFuYWdlcnMgdGhhdCBtYXkgcHVibGlzaCB0aGUgKipyb290KiogcGFja2FnZSwgZGlzdGluZ3Vpc2hlZCBieVxuICogd2hldGhlciB0aGV5IHJld3JpdGUgdGhlIG1hbmlmZXN0IHdoaWxlIHBhY2tpbmcgaXQuXG4gKlxuICogYHlhcm5gIG1lYW5zIHlhcm4gYmVycnkgKD49IDIpOyBZYXJuIENsYXNzaWMgKDEueCkgcGFja3MgdGhlIHJhdyBtYW5pZmVzdFxuICogbGlrZSBucG0gZG9lcyBhbmQgaXMgc3BlbGxlZCBgeWFybi1jbGFzc2ljYC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgUm9vdFB1Ymxpc2hlcnM6IHJlYWRvbmx5IFtcIm5wbVwiLCBcInBucG1cIiwgXCJ5YXJuXCIsIFwieWFybi1jbGFzc2ljXCJdO1xuZXhwb3J0IHR5cGUgUm9vdFB1Ymxpc2hlciA9IFZhbHVlT2ZDb25zdEFycmF5PHR5cGVvZiBSb290UHVibGlzaGVycz47XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJOYXBpQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBiaW5hcnkgdG8gYmUgZ2VuZXJhdGVkLCBkZWZhdWx0IHRvIGBpbmRleGBcbiAgICAgKi9cbiAgICBiaW5hcnlOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIG5wbSBwYWNrYWdlLCBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHJvb3QgcGFja2FnZS5qc29uIG5hbWVcbiAgICAgKlxuICAgICAqIEFsd2F5cyBnaXZlbiBgQHNjb3BlL3BrZ2AgYW5kIGFyY2ggc3VmZml4IHdpbGwgYmUgYXBwZW5kZWQgbGlrZSBgQHNjb3BlL3BrZy1saW51eC1nbnUteDY0YFxuICAgICAqL1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFsbCB0YXJnZXRzIHRoZSBjcmF0ZSB3aWxsIGJlIGNvbXBpbGVkIGZvclxuICAgICAqL1xuICAgIHRhcmdldHM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbnBtIGNsaWVudCBwcm9qZWN0IHVzZXMuXG4gICAgICovXG4gICAgbnBtQ2xpZW50Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgdGhhdCBwdWJsaXNoZXMgdGhlICoqcm9vdCoqIHBhY2thZ2UuXG4gICAgICpcbiAgICAgKiBgbmFwaSBwcmUtcHVibGlzaGAgcHVibGlzaGVzIG9ubHkgdGhlIGdlbmVyYXRlZCBwZXItcGxhdGZvcm0gcGFja2FnZXM7IHRoZVxuICAgICAqIHJvb3QgcGFja2FnZSBpcyBwYWNrZWQgYW5kIHB1Ymxpc2hlZCBieSB0aGUgY2FsbGVyLCBzbyB0aGlzIGNhbm5vdCBiZVxuICAgICAqIGluZmVycmVkIHJlbGlhYmx5LiBwbnBtIGFuZCB5YXJuIGJlcnJ5IHJlcGxhY2UgYGV4cG9ydHNgIHdpdGhcbiAgICAgKiBgcHVibGlzaENvbmZpZy5leHBvcnRzYCB3aGlsZSBwYWNraW5nLCBzbyB1bmRlciB0aG9zZSBwdWJsaXNoZXJzXG4gICAgICogYG5hcGkgcHJlLXB1Ymxpc2hgIHZhbGlkYXRlcyBvbmx5IHRoZSBwdWJsaXNoLWVmZmVjdGl2ZSBleHBvcnQgbWFwIGFuZCB0aGVcbiAgICAgKiBsb2NhbCBgZXhwb3J0c2AgbWF5IHBvaW50IGF0IGRldmVsb3BtZW50LW9ubHkgc291cmNlcy4gbnBtIGFuZCBZYXJuXG4gICAgICogQ2xhc3NpYyBzaGlwIGBleHBvcnRzYCB1bnRvdWNoZWQuXG4gICAgICpcbiAgICAgKiBVbnNldCDigJQgdGhlIGRlZmF1bHQg4oCUIHZhbGlkYXRlcyBib3RoIG1hcHMsIHdoaWNoIGlzIGNvcnJlY3QgZm9yIGV2ZXJ5XG4gICAgICogcHVibGlzaGVyIGJ1dCByZWplY3RzIGRldmVsb3BtZW50LW9ubHkgY29uZGl0aW9ucyBzdWNoIGFzXG4gICAgICogYFwiZGV2XCI6IFwiLi9zcmMvaW5kZXgudHNcImAuXG4gICAgICovXG4gICAgcm9vdFB1Ymxpc2hlcj86IFJvb3RQdWJsaXNoZXI7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBnZW5lcmF0ZSBjb25zdCBlbnVtIGZvciB0eXBlc2NyaXB0IGJpbmRpbmdzXG4gICAgICovXG4gICAgY29uc3RFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbWl0IGAjW25hcGkoc3RyaW5nX2VudW0pXWAgZW51bXMgYXMgcnVudGltZSBlbnVtcyAoYGV4cG9ydCBkZWNsYXJlIGVudW1gKSB1bmRlciBgLS1uby1jb25zdC1lbnVtYC4gRGVmYXVsdDogdHlwZS1vbmx5IHVuaW9uLlxuICAgICAqL1xuICAgIHJ1bnRpbWVTdHJpbmdFbnVtPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBkdHMgaGVhZGVyIHByZXBlbmQgdG8gdGhlIGdlbmVyYXRlZCBkdHMgZmlsZVxuICAgICAqL1xuICAgIGR0c0hlYWRlcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBkdHMgaGVhZGVyIGZpbGUgcGF0aCB0byBiZSBwcmVwZW5kZWQgdG8gdGhlIGdlbmVyYXRlZCBkdHMgZmlsZVxuICAgICAqIGlmIGJvdGggZHRzSGVhZGVyIGFuZCBkdHNIZWFkZXJGaWxlIGFyZSBwcm92aWRlZCwgZHRzSGVhZGVyRmlsZSB3aWxsIGJlIHVzZWRcbiAgICAgKi9cbiAgICBkdHNIZWFkZXJGaWxlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIHdhc20gY29tcGlsYXRpb24gb3B0aW9uc1xuICAgICAqL1xuICAgIHdhc20/OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYkFzc2VtYmx5L0phdmFTY3JpcHRfaW50ZXJmYWNlL01lbW9yeVxuICAgICAgICAgKiBAZGVmYXVsdCA0MDAwIHBhZ2VzICgyNTAgTWlCKSwgb3IgMTAyNCBwYWdlcyAoNjQgTWlCKSBmb3IgdGhlIGRlZmVycmVkIHdvcmtlcmQgbG9hZGVyXG4gICAgICAgICAqL1xuICAgICAgICBpbml0aWFsTWVtb3J5PzogbnVtYmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5pdGlhbCBsaW5lYXIgbWVtb3J5LCBpbiA2NCBLaUIgcGFnZXMsIGZvciB0aGUgKip0aHJlYWRsZXNzKipcbiAgICAgICAgICogKGB3YXNtMzItd2FzaXAxYCkgbG9hZGVycyBvbmx5OiB0aGUgTm9kZSBDSlMgbG9hZGVyLCB0aGUgYnJvd3NlciBsb2FkZXJcbiAgICAgICAgICogYW5kIHRoZSBkZWZlcnJlZCBgLi93b3JrZXJkYCBsb2FkZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSB0aHJlYWRlZCBsb2FkZXJzIGFsbG9jYXRlIG9uZSBgc2hhcmVkOiB0cnVlYCBtZW1vcnkgdGhhdCBldmVyeVxuICAgICAgICAgKiB3YXNpLXRocmVhZHMgd29ya2VyIG1hcHMsIHNvIGV2ZXJ5IHdvcmtlciBzdGFjayBhbmQgZXZlcnkgdGhyZWFkJ3NcbiAgICAgICAgICogYWxsb2NhdGlvbnMgY29tZSBvdXQgb2YgaXQgYW5kIGdyb3dpbmcgaXQgaXMgYSBjcm9zcy10aHJlYWQgZXZlbnQ7IGl0IGlzXG4gICAgICAgICAqIHNpemVkIGZvciB0aGUgd2hvbGUgcG9vbCB1cCBmcm9udC4gVGhlIHRocmVhZGxlc3MgbG9hZGVycyBkcml2ZSBhIHNpbmdsZVxuICAgICAgICAgKiB0aHJlYWQgdGhyb3VnaCBhIHBsYWluIGdyb3dhYmxlIGBBcnJheUJ1ZmZlcmA6IHRoZXkgb25seSBoYXZlIHRvIGNsZWFyXG4gICAgICAgICAqIHRoZSBtb2R1bGUncyBvd24gbGluay10aW1lIGZsb29yIChgLXpzdGFjay1zaXplYCBwbHVzIHN0YXRpYyBkYXRhKSBhbmRcbiAgICAgICAgICogZ3JvdyBvbiBkZW1hbmQsIHdoaWNoIGlzIHdoYXQgbGV0cyB0aGUgc2FtZSBidWlsZCBmaXQgYSBob3N0IHdpdGggYSBoYXJkXG4gICAgICAgICAqIGlzb2xhdGUgY2FwIHN1Y2ggYXMgd29ya2VyZCdzIDEyOCBNaUIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEZhbGxzIGJhY2sgdG8gYGluaXRpYWxNZW1vcnlgIHdoZW4gdW5zZXQsIHNvIGV4aXN0aW5nIHByb2plY3RzIGFyZVxuICAgICAgICAgKiB1bmFmZmVjdGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVmYXVsdCBgaW5pdGlhbE1lbW9yeWAgKDQwMDAgcGFnZXMpLCBvciAxMDI0IHBhZ2VzIGZvciB0aGUgZGVmZXJyZWRcbiAgICAgICAgICogICBgLi93b3JrZXJkYCBsb2FkZXJcbiAgICAgICAgICovXG4gICAgICAgIHRocmVhZGxlc3NJbml0aWFsTWVtb3J5PzogbnVtYmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlZmF1bHQgNjU1MzYgcGFnZXMgKDRHaUIpXG4gICAgICAgICAqL1xuICAgICAgICBtYXhpbXVtTWVtb3J5PzogbnVtYmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIGA8cGFja2FnZU5hbWU+LXdhc20zMi13YXNpYCBwYWNrYWdlIGlzIGRlY2xhcmVkIGFzXG4gICAgICAgICAqIGFuIGBvcHRpb25hbERlcGVuZGVuY3lgIG9mIHRoZSByb290IHBhY2thZ2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4gbmF0aXZlIHRhcmdldHMgYXJlIGNvbmZpZ3VyZWQgdGhlIFdBU0kgcGFja2FnZSBpcyBhIGZhbGxiYWNrIGZvclxuICAgICAgICAgKiBob3N0cyB0aGF0IGNhbm5vdCBsb2FkIGEgYC5ub2RlYCBiaW5hcnksIHNvIGRlY2xhcmluZyBpdCB3b3VsZCBtYWtlIGV2ZXJ5XG4gICAgICAgICAqIGNvbnN1bWVyIGRvd25sb2FkIHRoZSBgLndhc21gIGJpbmFyeSB0aGV5IHdpbGwgbmV2ZXIgbG9hZC4gSXQgaXNcbiAgICAgICAgICogdGhlcmVmb3JlIG9taXR0ZWQgYnkgZGVmYXVsdCBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgaW5zdGFsbGVkIG9uIGRlbWFuZCBieVxuICAgICAgICAgKiB0aGUgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogV2hlbiBXQVNJIGlzIHRoZSBvbmx5IGNvbmZpZ3VyZWQgdGFyZ2V0IGl0IGlzIHRoZSBwcmltYXJ5IGFydGlmYWN0IGFuZCBpc1xuICAgICAgICAgKiBkZWNsYXJlZCBieSBkZWZhdWx0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBTZXQgdGhpcyBleHBsaWNpdGx5IHRvIG92ZXJyaWRlIGVpdGhlciBkZWZhdWx0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlIHdoZW4gZXZlcnkgY29uZmlndXJlZCB0YXJnZXQgaXMgV0FTSSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICAgICAqL1xuICAgICAgICBvcHRpb25hbERlcGVuZGVuY3k/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIFdBU0kgbG9hZGVycyBib290c3RyYXAgdGhlIGBuYXBpLWFzeW5jLXJ1bnRpbWVgXG4gICAgICAgICAqIEN1cnJlbnRUaHJlYWQgSmF2YVNjcmlwdCBob3N0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQSBiaW5kaW5nIGJ1aWx0IHdpdGggdGhlIGBuYXBpLWFzeW5jLXJ1bnRpbWVgIGNyYXRlIHJ1bnMgdGhlXG4gICAgICAgICAqIGBDdXJyZW50VGhyZWFkYCBmbGF2b3Igb24gZXZlcnkgV2ViQXNzZW1ibHkgdGFyZ2V0IChpdCBpcyB0aGUgb25seVxuICAgICAgICAgKiBmbGF2b3IgdGhlcmUpLiBJdHMgZnV0dXJlcyBtYWtlIG5vIHByb2dyZXNzIHVudGlsIGEgdGFzayBob3N0IGlzXG4gICAgICAgICAqIHJlZ2lzdGVyZWQsIGFuZCBpdHMgdGltZXJzIG5ldmVyIGZpcmUgdW50aWwgYSB0aW1lciBob3N0IGlzLCBzbyB0aGVcbiAgICAgICAgICogbG9hZGVyIG11c3QgaW5zdGFsbCBib3RoIHJpZ2h0IGFmdGVyIGluc3RhbnRpYXRpb24gYW5kIHVucmVnaXN0ZXIgdGhlbVxuICAgICAgICAgKiBiZWZvcmUgdGhlIGVudmlyb25tZW50IGlzIGRlc3Ryb3llZC5cbiAgICAgICAgICpcbiAgICAgICAgICogRW5hYmxpbmcgdGhpcyBlbWl0cyB0aGF0IGJvb3RzdHJhcCBpbiB0aGUgbm9kZSwgYnJvd3NlciBhbmQgZGVmZXJyZWRcbiAgICAgICAgICogKHdvcmtlcmQpIGxvYWRlcnMsIGFuZCBkZWNsYXJlcyBgQG5hcGktcnMvYXN5bmMtcnVudGltZWAgaW4gdGhlXG4gICAgICAgICAqIGdlbmVyYXRlZCBgPHBhY2thZ2VOYW1lPi13YXNtMzItKmAgcGFja2FnZXMuIFRoZSBsb2FkZXIgZGVsZWdhdGVzIHRoZVxuICAgICAgICAgKiB3aG9sZSBob3N0IGNvbnRyYWN0IOKAlCB0aGUgc2V2ZW4gZXhwb3J0cywgY29udHJhY3QgdmVyc2lvbiA0LCB0aGVcbiAgICAgICAgICogcmVzZXJ2YXRpb24gaWRlbnRpdHksIHRoZSBsaXZlbmVzcyBwcm9iZSBhbmQgdGhlIHJvbGxiYWNrIOKAlCB0byB0aGF0XG4gICAgICAgICAqIHBhY2thZ2UsIHNvIGEgYmluZGluZyB0aGF0IGRvZXMgbm90IGFjdHVhbGx5IGV4cG9zZSB0aGUgY29udHJhY3QgZmFpbHNcbiAgICAgICAgICogbG91ZGx5IGF0IGxvYWQgd2l0aCBgRVJSX05BUElfQVNZTkNfUlVOVElNRV9CSU5ESU5HX01JU01BVENIYC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGJvb3RzdHJhcCBydW5zIGFmdGVyIGluc3RhbnRpYXRpb24sIHNvIGFmdGVyIGAjW21vZHVsZV9pbml0XWA6IHRoZVxuICAgICAgICAgKiBob3N0IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgYXJlIGV4cG9ydHMgb2YgdGhlIGJpbmRpbmcgaXRzZWxmLiBDb2RlIHRoYXRcbiAgICAgICAgICogcnVucyBkdXJpbmcgbW9kdWxlIHJlZ2lzdHJhdGlvbiBtdXN0IG5vdCBjcmVhdGUgdGltZXJzIChgc2xlZXBfdW50aWxgXG4gICAgICAgICAqIGZhaWxzIGxvdWQgYXQgY3JlYXRpb24gd2l0aG91dCBhIHRpbWVyIGhvc3QpIGFuZCBjYW5ub3QgZXhwZWN0IHRhc2tcbiAgICAgICAgICogcHJvZ3Jlc3MgdW50aWwgdGhlIGxvYWRlciBoYXMgcmV0dXJuZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICBhc3luY1J1bnRpbWU/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQnJvd3NlciB3YXNtIGJpbmRpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYnJvd3Nlcj86IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hldGhlciB0byB1c2UgZnMgbW9kdWxlIGluIGJyb3dzZXJcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZnM/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGluaXRpYWxpemUgd2FzbSBhc3luY2hyb25vdXNseVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBhc3luY0luaXQ/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGluamVjdCBgYnVmZmVyYCB0byBlbW5hcGkgY29udGV4dFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBidWZmZXI/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGV0aGVyIHRvIGVtaXQgY3VzdG9tIGV2ZW50cyBmb3IgZXJyb3JzIGluIHdvcmtlclxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBlcnJvckV2ZW50PzogYm9vbGVhbjtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGJpbmFyeU5hbWUgaW5zdGVhZFxuICAgICAqL1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHBhY2thZ2VOYW1lIGluc3RlYWRcbiAgICAgKi9cbiAgICBwYWNrYWdlPzoge1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHRhcmdldHMgaW5zdGVhZFxuICAgICAqL1xuICAgIHRyaXBsZXM/OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGV0aGVyIGVuYWJsZSBkZWZhdWx0IHRhcmdldHNcbiAgICAgICAgICovXG4gICAgICAgIGRlZmF1bHRzOiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQWRkaXRpb25hbCB0YXJnZXRzIHRvIGJlIGNvbXBpbGVkIGZvclxuICAgICAgICAgKi9cbiAgICAgICAgYWRkaXRpb25hbD86IHN0cmluZ1tdO1xuICAgIH07XG59XG5leHBvcnQgaW50ZXJmYWNlIENvbW1vblBhY2thZ2VKc29uRmllbGRzIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGtleXdvcmRzPzogc3RyaW5nW107XG4gICAgYXV0aG9yPzogc3RyaW5nO1xuICAgIGF1dGhvcnM/OiBzdHJpbmdbXTtcbiAgICBsaWNlbnNlPzogc3RyaW5nO1xuICAgIGNwdT86IHN0cmluZ1tdO1xuICAgIG9zPzogc3RyaW5nW107XG4gICAgbGliYz86IHN0cmluZ1tdO1xuICAgIGZpbGVzPzogc3RyaW5nW107XG4gICAgcmVwb3NpdG9yeT86IGFueTtcbiAgICBob21lcGFnZT86IGFueTtcbiAgICBlbmdpbmVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwdWJsaXNoQ29uZmlnPzogYW55O1xuICAgIGJ1Z3M/OiBhbnk7XG4gICAgbmFwaT86IFVzZXJOYXBpQ29uZmlnO1xuICAgIHR5cGU/OiAnbW9kdWxlJyB8ICdjb21tb25qcyc7XG4gICAgc2NyaXB0cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgbWFpbj86IHN0cmluZztcbiAgICBtb2R1bGU/OiBzdHJpbmc7XG4gICAgdHlwZXM/OiBzdHJpbmc7XG4gICAgYnJvd3Nlcj86IHN0cmluZztcbiAgICBleHBvcnRzPzogYW55O1xuICAgIGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgZGV2RGVwZW5kZW5jaWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBvcHRpb25hbERlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgYXZhPzoge1xuICAgICAgICB0aW1lb3V0Pzogc3RyaW5nO1xuICAgIH07XG59XG5leHBvcnQgdHlwZSBOYXBpQ29uZmlnID0gUmVxdWlyZWQ8UGljazxVc2VyTmFwaUNvbmZpZywgJ2JpbmFyeU5hbWUnIHwgJ3BhY2thZ2VOYW1lJyB8ICducG1DbGllbnQnPj4gJiBQaWNrPFVzZXJOYXBpQ29uZmlnLCAnd2FzbScgfCAnZHRzSGVhZGVyJyB8ICdkdHNIZWFkZXJGaWxlJyB8ICdjb25zdEVudW0nIHwgJ3J1bnRpbWVTdHJpbmdFbnVtJyB8ICdyb290UHVibGlzaGVyJz4gJiB7XG4gICAgdGFyZ2V0czogVGFyZ2V0W107XG4gICAgcGFja2FnZUpzb246IENvbW1vblBhY2thZ2VKc29uRmllbGRzO1xufTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlYWROYXBpQ29uZmlnKHBhdGg6IHN0cmluZywgY29uZmlnUGF0aD86IHN0cmluZyk6IFByb21pc2U8TmFwaUNvbmZpZz47XG4iLCJpbXBvcnQgdHlwZSB7IEJ1aWxkT3B0aW9ucyBhcyBSYXdCdWlsZE9wdGlvbnMgfSBmcm9tICcuLi9kZWYvYnVpbGQuanMnO1xuaW1wb3J0IHsgdHlwZSBOYXBpQ29uZmlnLCB0eXBlIFRhcmdldCwgdHlwZSBDYXJnb1dvcmtzcGFjZU1ldGFkYXRhIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xudHlwZSBPdXRwdXRLaW5kID0gJ2pzJyB8ICdkdHMnIHwgJ25vZGUnIHwgJ2V4ZScgfCAnd2FzbSc7XG50eXBlIE91dHB1dCA9IHtcbiAgICBraW5kOiBPdXRwdXRLaW5kO1xuICAgIHBhdGg6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBCdWlsZEZvcm1hdCA9ICdlc20nIHwgJ2NvbW1vbmpzJztcbnR5cGUgQnVpbGRPcHRpb25zID0gUmF3QnVpbGRPcHRpb25zICYge1xuICAgIGNhcmdvT3B0aW9ucz86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFdBU0lfQVJUSUZBQ1RfTUVUQURBVEFfUFJFRklYID0gXCIvLyBuYXBpLXJzLWFydGlmYWN0LW1ldGFkYXRhOlwiO1xuZXhwb3J0IGludGVyZmFjZSBBc3luY1J1bnRpbWVIb3N0Q29udHJhY3RJbnB1dCB7XG4gICAgLyoqIFRoZSBhZGRvbidzIGV4cG9ydCBuYW1lcywgYXMgcmVwb3J0ZWQgYnkgdGhlIHR5cGUgZGVmaW5pdGlvbiBwYXNzLiAqL1xuICAgIGlkZW50czogc3RyaW5nW107XG4gICAgLyoqIFdoZXRoZXIgYG5hcGkud2FzbS5hc3luY1J1bnRpbWVgIGlzIG9uLiAqL1xuICAgIGFzeW5jUnVudGltZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGBpZGVudHNgIGlzIHJlYWwgZXhwb3J0IG1ldGFkYXRhLiBgbmFwaS1kZXJpdmVgIHdpdGhvdXQgaXRzXG4gICAgICogYHR5cGUtZGVmYCBmZWF0dXJlIGVtaXRzIG5vIHR5cGUgZGVmaW5pdGlvbnMsIHNvIHRoZSBpZGVudCBsaXN0IGlzIGVtcHR5XG4gICAgICogZm9yIGV2ZXJ5IHN1Y2ggYWRkb24g4oCUIGluY2x1ZGluZyBvbmUgdGhhdCBkb2VzIGV4cG9ydCB0aGUgd2hvbGUgaG9zdFxuICAgICAqIGNvbnRyYWN0LiBBbiBlbXB0eSBsaXN0IGlzIG9ubHkgZXZpZGVuY2Ugd2hlbiB0aGlzIGlzIGB0cnVlYC5cbiAgICAgKi9cbiAgICB0eXBlRGVmQXZhaWxhYmxlOiBib29sZWFuO1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG59XG4vKipcbiAqIENyb3NzLWNoZWNrIGBuYXBpLndhc20uYXN5bmNSdW50aW1lYCBhZ2FpbnN0IHRoZSBhZGRvbidzIGV4cG9ydCBsaXN0LlxuICpcbiAqIFJldHVybnMgdGhlIG1lc3NhZ2UgdG8gdGhyb3cgKGBlcnJvcmApIG9yIHRvIGxvZyAoYHdhcm5pbmdgKSwgaWYgYW55LiBXaXRoXG4gKiBubyB0eXBlLWRlZiBtZXRhZGF0YSB0aGVyZSBpcyBub3RoaW5nIHRvIGNoZWNrIGFnYWluc3QsIHNvIHRoZSBidWlsZCBzYXlzIHNvXG4gKiBhbmQgZGVmZXJzIHRvIHRoZSBsb2FkZXIncyBvd24gcnVudGltZSBkZXRlY3Rpb24uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNoZWNrQXN5bmNSdW50aW1lSG9zdENvbnRyYWN0KHsgaWRlbnRzLCBhc3luY1J1bnRpbWUsIHR5cGVEZWZBdmFpbGFibGUsIHBhY2thZ2VOYW1lLCB9OiBBc3luY1J1bnRpbWVIb3N0Q29udHJhY3RJbnB1dCk6IHtcbiAgICBlcnJvcj86IHN0cmluZztcbiAgICB3YXJuaW5nPzogc3RyaW5nO1xufTtcbnR5cGUgQ2FyZ29Db25maWdGaW5nZXJwcmludCA9IHJlYWRvbmx5IFtwYXRoOiBzdHJpbmcsIGhhc2g6IHN0cmluZ107XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRDYXJnb0RlcGVuZGVuY3lHcmFwaEZpbmdlcnByaW50KG1ldGFkYXRhOiBDYXJnb1dvcmtzcGFjZU1ldGFkYXRhLCByb290UGFja2FnZUlkOiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRUeXBlRGVmQ2FjaGVGb2xkZXIob3B0aW9uczoge1xuICAgIHRhcmdldERpcjogc3RyaW5nO1xuICAgIGNyYXRlTmFtZTogc3RyaW5nO1xuICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgIHRhcmdldFRyaXBsZTogc3RyaW5nO1xuICAgIHByb2ZpbGU6IHN0cmluZztcbiAgICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAgIGFsbEZlYXR1cmVzPzogYm9vbGVhbjtcbiAgICBub0RlZmF1bHRGZWF0dXJlcz86IGJvb2xlYW47XG4gICAgY2FyZ29PcHRpb25zPzogc3RyaW5nW107XG4gICAgcnVzdEZsYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgICBjYXJnb1Byb2ZpbGVFbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICAgIGNhcmdvQ29uZmlnPzogQ2FyZ29Db25maWdGaW5nZXJwcmludFtdO1xuICAgIGNhcmdvRGVwZW5kZW5jeUdyYXBoPzogc3RyaW5nO1xufSk6IHN0cmluZztcbi8qKlxuICogTmFtZSBvZiB0aGUgZW1uYXBpIGFyY2hpdmUgZGlyZWN0b3J5IGJ1aWx0IGFnYWluc3QgdGhlIHdhc2ktc2RrIDM0IEFCSS5cbiAqIE9ubHkgdGhlIHRocmVhZGVkIHRhcmdldCBoYXMgb25lOiB0aGUgc2lnbmF0dXJlIGNoYW5nZSBpdCBjYXJyaWVzIGxpdmVzIGluXG4gKiB0aGUgdGhyZWFkcy1vbmx5IGZ1dGV4IGNvZGUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IEVNTkFQSV9XQVNJX1NES18zNF9MSU5LX0RJUiA9IFwid2FzbTMyLXdhc2lwMS10aHJlYWRzLXdhc2ktc2RrLTM0XCI7XG5leHBvcnQgaW50ZXJmYWNlIEVtbmFwaUxpbmtEaXJTZWxlY3Rpb24ge1xuICAgIC8qKiBEaXJlY3RvcnkgbmFtZSB1bmRlciBgZW1uYXBpL2xpYmAgd2hvc2UgYXJjaGl2ZXMgc2hvdWxkIGJlIGxpbmtlZC4gKi9cbiAgICBsaW5rRGlyTmFtZTogc3RyaW5nO1xuICAgIC8qKiBEZXRlY3RlZCB3YXNpLXNkayBtYWpvciB2ZXJzaW9uLCBgbnVsbGAgd2hlbiBubyB3YXNpLXNkayBpcyBjb25maWd1cmVkLiAqL1xuICAgIHdhc2lTZGtNYWpvcjogbnVtYmVyIHwgbnVsbDtcbiAgICAvKiogYHRydWVgIHdoZW4gdGhlIHRvb2xjaGFpbiBuZWVkcyB0aGUgd2FzaS1zZGsgMzQgYXJjaGl2ZXMuICovXG4gICAgbmVlZHNXYXNpU2RrMzQ6IGJvb2xlYW47XG59XG4vKipcbiAqIFBpY2sgdGhlIGVtbmFwaSBhcmNoaXZlIGRpcmVjdG9yeSBmb3IgYSBXQVNJIGJ1aWxkLlxuICpcbiAqIHdhc2ktbGliYyByZW1vdmVkIHRoZSB1bnVzZWQgYGludCBvcGAgcGFyYW1ldGVyIGZyb21cbiAqIGBfX3dhc2lsaWJjX2Z1dGV4X3dhaXRfYXRvbWljX3dhaXRgIC8gYF9fd2FzaWxpYmNfZnV0ZXhfd2FpdF9tYXliZV9idXN5YCxcbiAqIGFuZCB3YXNpLXNkayAzNCBpcyB0aGUgZmlyc3QgcmVsZWFzZSBzaGlwcGluZyB0aGUgMy1hcmd1bWVudCBzaWduYXR1cmUuXG4gKiBMaW5raW5nIHRoZSBsZWdhY3kgNC1hcmd1bWVudCBhcmNoaXZlcyBhZ2FpbnN0IGEgd2FzaS1zZGsgPj0gMzQgc3lzcm9vdFxuICogbWFrZXMgYHdhc20tbGRgIHJlcG9ydCBgZnVuY3Rpb24gc2lnbmF0dXJlIG1pc21hdGNoYCBhbmQgZW1pdCBhbiBpbnZhbGlkXG4gKiB3YXNtIG1vZHVsZSwgc28gZW1uYXBpIHB1Ymxpc2hlcyBhIHNlY29uZCBhcmNoaXZlIHNldCBmb3IgdGhlIG5ldyBBQkkgYW5kXG4gKiB0aGUgZGlyZWN0b3J5IGhhcyB0byBiZSBjaG9zZW4gYnkgd2FzaS1zZGsgdmVyc2lvbiwgbm90IGJ5IHRhcmdldCB0cmlwbGUuXG4gKlxuICogV2l0aG91dCBgV0FTSV9TREtfUEFUSGAsIGNhcmdvIGxpbmtzIHRocm91Z2ggYHJ1c3QtbGxkYCBhZ2FpbnN0IHRoZVxuICogd2FzaS1saWJjIGJ1bmRsZWQgd2l0aCB0aGUgUnVzdCBzdGFuZGFyZCBsaWJyYXJ5LCBzbyB0aGF0IGFyY2hpdmUgaXNcbiAqIHByb2JlZCBpbnN0ZWFkLiBSdXN0IHBpY2tlZCB1cCB3YXNpLXNkayAzNCBpbiBydXN0LWxhbmcvcnVzdCMxNjE3NzMsIHdoaWNoXG4gKiBsYW5kcyBpbiAxLjEwMCwgYW5kIGEgdG9vbGNoYWluIGNhcnJ5aW5nIGl0IG5lZWRzIHRoZSBuZXcgYXJjaGl2ZXMgZXZlblxuICogdGhvdWdoIG5vIHdhc2ktc2RrIGlzIGNvbmZpZ3VyZWQuXG4gKlxuICogVGhlIGxlZ2FjeSBkaXJlY3Rvcnkgc3RheXMgdGhlIGRlZmF1bHQgd2hlbmV2ZXIgdGhlIEFCSSBjYW5ub3QgYmVcbiAqIGRldGVybWluZWQsIGFuZCBvbGRlciBlbW5hcGkgcmVsZWFzZXMgc2hpcCBpdCBhbG9uZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc2VsZWN0RW1uYXBpTGlua0RpcihlbW5hcGlMaWJEaXI6IHN0cmluZywgd2FzaVRhcmdldDogc3RyaW5nLCBoYXNUaHJlYWRzOiBib29sZWFuLCB3YXNpU2RrUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCB7IGN3ZCwgcnVzdFdhc2lMaWJjLCB9Pzoge1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBydXN0V2FzaUxpYmM/OiBzdHJpbmcgfCBudWxsO1xufSk6IEVtbmFwaUxpbmtEaXJTZWxlY3Rpb247XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVXYXNpQ29tcGlsZXJGbGFncyh3YXNpU2RrUGF0aDogc3RyaW5nLCB3YXNpVGFyZ2V0OiBzdHJpbmcsIGhhc1RocmVhZHM6IGJvb2xlYW4sIHNoZWxsRXNjYXBlZEZsYWdzPzogYm9vbGVhbik6IHtcbiAgICBjb21waWxlRmxhZ3M6IHN0cmluZztcbiAgICBsaW5rZXJGbGFnczogc3RyaW5nO1xufTtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUFydGlmYWN0RGVzdGluYXRpb25OYW1lKGJpbmFyeU5hbWU6IHN0cmluZywgdGFyZ2V0OiBUYXJnZXQsIHNvdXJjZU5hbWU6IHN0cmluZywgcGxhdGZvcm06IGJvb2xlYW4pOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzZWxlY3RXYXNpQnJvd3NlclRhcmdldChidWlsZFRhcmdldDogVGFyZ2V0LCBjb25maWd1cmVkVGFyZ2V0czogVGFyZ2V0W10sIGVtaXR0ZWRUYXJnZXRzOiBUYXJnZXRbXSk6IFRhcmdldDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVdhc2lCcm93c2VyRW50cnkocGFja2FnZU5hbWU6IHN0cmluZywgcGxhdGZvcm1BcmNoQUJJOiBzdHJpbmcsIGlkZW50czogc3RyaW5nW10pOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVXYXNpRGVmZXJyZWRCaW5kaW5nVHlwZURlZihiaW5kaW5nTW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsIGhhc1R5cGVEZWY6IGJvb2xlYW4sIHBsYXRmb3JtQXJjaEFCST86IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRXYXNtTWVtb3J5IHtcbiAgICAvKiogYHVuZGVmaW5lZGAga2VlcHMgZWFjaCB0ZW1wbGF0ZSdzIG93biBkZWZhdWx0ICg0MDAwLCBvciAxMDI0IGZvciBgLi93b3JrZXJkYCkuICovXG4gICAgaW5pdGlhbE1lbW9yeT86IG51bWJlcjtcbiAgICAvKiogYHVuZGVmaW5lZGAga2VlcHMgdGhlIHRlbXBsYXRlIGRlZmF1bHQgKDY1NTM2KS4gKi9cbiAgICBtYXhpbXVtTWVtb3J5PzogbnVtYmVyO1xufVxuLyoqXG4gKiBSZXNvbHZlIHRoZSBgV2ViQXNzZW1ibHkuTWVtb3J5YCBkZXNjcmlwdG9yIHRoZSBnZW5lcmF0ZWQgbG9hZGVycyBlbWJlZCwgZm9yXG4gKiBvbmUgV0FTSSBmbGF2b3IuXG4gKlxuICogVGhlIHRocmVhZGVkIGxvYWRlcnMgc2hhcmUgb25lIGBzaGFyZWQ6IHRydWVgIG1lbW9yeSB3aXRoIGV2ZXJ5IHdhc2ktdGhyZWFkc1xuICogd29ya2VyLCBzbyBpdCBpcyBzaXplZCBmb3IgdGhlIHdob2xlIHBvb2wuIFRoZSB0aHJlYWRsZXNzIGxvYWRlcnMgaGF2ZSBhXG4gKiBzaW5nbGUgdGhyZWFkIGFuZCBhIHBsYWluIGdyb3dhYmxlIGBBcnJheUJ1ZmZlcmAsIHNvIHRoZXkgb25seSBuZWVkIHRvIGNsZWFyXG4gKiB0aGUgbW9kdWxlJ3MgbGluay10aW1lIGZsb29yIChgLXpzdGFjay1zaXplYCBwbHVzIHN0YXRpYyBkYXRhKSBhbmQgZ3JvdyBvblxuICogZGVtYW5kLiBgbmFwaS53YXNtLnRocmVhZGxlc3NJbml0aWFsTWVtb3J5YCBzaXplcyB0aGUgdGhyZWFkbGVzcyBsb2FkZXJzXG4gKiB3aXRob3V0IHNocmlua2luZyB0aGUgdGhyZWFkZWQgb25lOyB1bnNldCwgaXQgZmFsbHMgYmFjayB0b1xuICogYG5hcGkud2FzbS5pbml0aWFsTWVtb3J5YCBhbmQgbm90aGluZyBjaGFuZ2VzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZXNvbHZlV2FzbU1lbW9yeSh3YXNtOiBOYXBpQ29uZmlnWyd3YXNtJ10sIGhhc1RocmVhZHM6IGJvb2xlYW4pOiBSZXNvbHZlZFdhc21NZW1vcnk7XG4vKipcbiAqIFdoZXRoZXIgYSBidWlsZCdzIGRlY2xhcmF0aW9uIGZpbGUgc2hvdWxkIGRlY2xhcmUgYF9fbmFwaUJpbmRpbmdUYXJnZXRgLlxuICpcbiAqIFRoZSBleHBvcnQgZXhpc3RzIG9ubHkgb24gYSBnZW5lcmF0ZWQgbG9hZGVyLCBzbyB0aGUgZGVjbGFyYXRpb24gaGFzIHRvXG4gKiBmb2xsb3cgdGhlIGxvYWRlcnMgYSBidWlsZCBhY3R1YWxseSB3cml0ZXMuIFRoaXMgbWlycm9ycyBib3RoIHdyaXRlcnM6XG4gKlxuICogLSB7QGxpbmsgd3JpdGVKc0JpbmRpbmd9IHdyaXRlcyB0aGUgcm9vdCBsb2FkZXIgZm9yIGAtLXBsYXRmb3JtYCB3aXRob3V0XG4gKiAgIGAtLW5vLWpzLWJpbmRpbmdgIChgcm9vdExvYWRlckNhbmRpZGF0ZWApLCBhbmQgdGhlbiBvbmx5IHdoZW4gdGhlIGJ1aWxkIGhhc1xuICogICBydW50aW1lIGV4cG9ydHMgb3IgYSBXQVNJIGZsYXZvciB0byBmYWxsIGJhY2sgdG8uXG4gKiAtIGBCdWlsZGVyLndyaXRlV2FzaUJpbmRpbmdgIHdyaXRlcyBhIGZsYXZvcidzIGxvYWRlciBzZXQgd2hlbiB0aGF0IGZsYXZvciBpc1xuICogICB0aGUgYnVpbGQgdGFyZ2V0LCBvciB3aGVuIGFuIGVhcmxpZXIgYnVpbGQgb2YgaXQgbGVmdCBtZXRhZGF0YSBvbiBkaXNrXG4gKiAgIChgZW1pdHNXYXNpTG9hZGVyYCkuIEEgbWVyZWx5IGNvbmZpZ3VyZWQgZmxhdm9yIGlzIHNraXBwZWQsIGFuZCBhIGJ1aWxkXG4gKiAgIHRoYXQgc2tpcHMgZXZlcnkgZmxhdm9yIGVtaXRzIG5vIGxvYWRlciB0byBjYXJyeSB0aGUgZXhwb3J0LlxuICpcbiAqIFRoZSBleHBvcnQgbGlzdCBpcyBvbmx5IGtub3duIG9uY2UgdHlwZWdlbiBoYXMgcnVuLCBhbmQgdHlwZWdlbiB3cml0ZXMgdGhlXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGl0c2VsZiwgc28gdGhlIGRlY2lzaW9uIGNvbWVzIGJhY2sgYXMgYSBwcmVkaWNhdGUgb3ZlciB0aGF0XG4gKiBsaXN0IGluc3RlYWQgb2YgYSBmbGFnIHRha2VuIHVwIGZyb250LlxuICpcbiAqIEl0IGdhdGVzIHRoZSAqcmVzZXJ2YXRpb24qIG9mIHRoZSBuYW1lIHRvbyDigJQgYEJ1aWxkZXIuZ2VuZXJhdGVUeXBlRGVmYCBjYWxsc1xuICoge0BsaW5rIGFzc2VydEJpbmRpbmdUYXJnZXRJZGVudEZyZWV9IG9ubHkgd2hlbiB0aGlzIGFuc3dlcnMgYHRydWVgLiBEZWNsYXJpbmdcbiAqIHRoZSBuYW1lIGFuZCBmb3JiaWRkaW5nIGFuIGFkZG9uIGZyb20gZXhwb3J0aW5nIGl0IGFyZSB0aGUgc2FtZSBxdWVzdGlvbiwgYW5kXG4gKiBhIGJ1aWxkIHRoYXQgZW1pdHMgbm8gbG9hZGVyIGFza3MgbmVpdGhlci5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYmluZGluZ1RhcmdldERlY2xhcmF0aW9uUHJlZGljYXRlKGlucHV0OiB7XG4gICAgcm9vdExvYWRlckNhbmRpZGF0ZTogYm9vbGVhbjtcbiAgICBoYXNXYXNpRmFsbGJhY2s6IGJvb2xlYW47XG4gICAgZW1pdHNXYXNpTG9hZGVyOiBib29sZWFuO1xufSk6IChleHBvcnRzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHByZXBhcmVXYXNpQmluZGluZ1R5cGVEZWYoc291cmNlOiBzdHJpbmcsIHNvdXJjZVBhdGg6IHN0cmluZywgZGVzdGluYXRpb25QYXRoOiBzdHJpbmcsIGhhc1RocmVhZHM6IGJvb2xlYW4sIHBhY2thZ2VUeXBlPzogJ21vZHVsZScgfCAnY29tbW9uanMnKTogc3RyaW5nO1xuLyoqXG4gKiBNYWtlIGEgZGVjbGFyYXRpb24gZmlsZSBkZWNsYXJlIHRoZSBgX19uYXBpQmluZGluZ1RhcmdldGAgaXRzIGxvYWRlciBleHBvcnRzLlxuICpcbiAqIGBwbGF0Zm9ybUFyY2hBQklgIG5hbWVzIHRoZSBXQVNJIGZsYXZvciB0aGUgZmlsZSB0eXBlcywgYW5kIHRoZSBkZWNsYXJhdGlvblxuICogaXMgdGhlbiB0aGF0IGZsYXZvcidzIGV4YWN0IGxpdGVyYWw7IHdpdGhvdXQgaXQgdGhlIGZpbGUgaXMgdGhlIHJvb3QgZW50cnknc1xuICogYW5kIGtlZXBzIHRoZSBmdWxsIHVuaW9uLCB3aGljaCBvbmx5IHRoZSByb290IGVudHJ5IGNhbiByZWFjaC5cbiAqXG4gKiBUd28ga2luZHMgb2YgZmlsZSBhcnJpdmUgaGVyZS4gQSBXQVNJIGRlY2xhcmF0aW9uIGRlcml2ZWQgZnJlc2ggZnJvbSB0aGUgcm9vdFxuICogYGluZGV4LmQudHNgIGluaGVyaXRzIHRoYXQgdW5pb24gYW5kIGhhcyB0byBiZSBuYXJyb3dlZC4gQSBkZWNsYXJhdGlvbiBrZXB0XG4gKiBmcm9tIGFuIGVhcmxpZXIgYnVpbGQg4oCUIGEgYnVpbGQgdGhhdCBkb2VzIG5vdCB0YXJnZXQgV0FTSSByZWdlbmVyYXRlcyBldmVyeVxuICogZGVjbGFyZWQgZmxhdm9yJ3MgbG9hZGVyIGZyb20gdGhlIG1ldGFkYXRhIHRoYXQgZmxhdm9yJ3Mgb3duIGJ1aWxkIGxlZnRcbiAqIGJlaGluZCwgYW5kIHJldXNlcyBpdHMgZGVjbGFyYXRpb24gZmlsZSB2ZXJiYXRpbSDigJQgbWF5IHByZWRhdGUgdGhlIGV4cG9ydFxuICogZW50aXJlbHksIG9yIGNhcnJ5IGEgdW5pb24gYW4gZWFybGllciB2ZXJzaW9uIG9mIHRoaXMgYnJhbmNoIHdyb3RlLlxuICpcbiAqIEVpdGhlciBtYXkgYWxzbyBjYXJyeSBhIGRlY2xhcmF0aW9uIG5vYm9keSBoZXJlIHdyb3RlLCBiZWNhdXNlIGEgcHJvamVjdCdzXG4gKiBvd24gYC0tZHRzLWhlYWRlcmAgbWF5IGRlY2xhcmUgdGhlIGV4cG9ydCB0byB3b3JrIGFyb3VuZCBsb2FkZXJzIHRoYXQgcHJlZGF0ZVxuICogaXQuIFNvIG93bmVyc2hpcCwgbm90IG1lcmUgcHJlc2VuY2UsIGRlY2lkZXMgd2hhdCBoYXBwZW5zLlxuICpcbiAqIFRocmVlIGNhc2VzLCBkZWNpZGVkIGluIHRoaXMgb3JkZXI6XG4gKlxuICogLSBUaGUgZGVjbGFyYXRpb24gdGhlIHJlbmRlcmVkIGAuZC50c2AgaGVhZGVyIG93bnMuIGByZW5kZXJlZEhlYWRlcmAgaXMgdGhhdFxuICogICBoZWFkZXIgYXMgdGhpcyBidWlsZCByZW5kZXJlZCBpdDsgaWYgaXQgZGVjbGFyZXMgdGhlIGV4cG9ydCwgdGhlIHByb2plY3Qnc1xuICogICBvd24gZGVjbGFyYXRpb24gd2luczogbm90aGluZyBpcyBhcHBlbmRlZCwgYW5kIGl0IGlzIG5ldmVyIHJld3JpdHRlbi5cbiAqICAgRGVjbGFyaW5nIGl0IGEgc2Vjb25kIHRpbWUgd291bGQgYmUgYSBUUzI0NTEgcmVkZWNsYXJhdGlvbi5cbiAqXG4gKiAgIFRoZSBoZWFkZXIgaXMgbWF0Y2hlZCBieSB0aGUgdGV4dCBvZiBpdHMgZGVjbGFyYXRpb24gYWdhaW5zdCB0aGUgZmlyc3RcbiAqICAgZGVjbGFyYXRpb24gaW4gdGhlIGZpbGUsIG5vdCBieSBhIHByZWZpeCBvZiB0aGUgZmlsZS4gQSBXQVNJIGRlY2xhcmF0aW9uIGlzXG4gKiAgIGRlcml2ZWQgdGhyb3VnaCB7QGxpbmsgcHJlcGFyZVdhc2lCaW5kaW5nVHlwZURlZn0sIHdoaWNoIHJld3JpdGVzIHJlbGF0aXZlXG4gKiAgIGltcG9ydCBzcGVjaWZpZXJzIGFuZCwgZm9yIHRoZSB0aHJlYWRsZXNzIGZsYXZvciwgZHJvcHMgYG5vZGU6c3RyZWFtL3dlYmBcbiAqICAgaW1wb3J0cyDigJQgYSBoZWFkZXIgY2FycnlpbmcgZWl0aGVyIHN0b3BzIGJlaW5nIGEgbGl0ZXJhbCBwcmVmaXggb2YgdGhlIGZpbGVcbiAqICAgZGVyaXZlZCBmcm9tIGl0LCB3aGlsZSB0aGUgZGVjbGFyYXRpb24gc3RhdGVtZW50IGl0c2VsZiBjb21lcyB0aHJvdWdoXG4gKiAgIHVudG91Y2hlZCBhbmQgc3RheXMgdGhlIGZpcnN0IG9uZSwgYmVjYXVzZSB0aG9zZSByZXdyaXRlcyBuZXZlciByZW9yZGVyXG4gKiAgIHN0YXRlbWVudHMuIE9uIHRoZSBwcmVzZXJ2ZWQgcGF0aCB0aGUgaGVhZGVyIGluIGhhbmQgaXMgdGhpcyBidWlsZCdzLCBub3RcbiAqICAgdGhlIG9uZSB0aGUga2VwdCBmaWxlIHdhcyB3cml0dGVuIHdpdGgsIGFuZCBhIGtlcHQgZGVjbGFyYXRpb24gdGhhdCByZWFkc1xuICogICBkaWZmZXJlbnRseSBpcyBjb3JyZWN0bHkgbm90IHRoZSBoZWFkZXIncy5cbiAqIC0gQSBkZWNsYXJhdGlvbiB0aGUgaGVhZGVyIGRvZXMgbm90IG93biwgYWxvbmUgaW4gaXRzIHN0YXRlbWVudCwgd2hvc2UgdHlwZVxuICogICBpcyBidWlsdCBvbmx5IG91dCBvZiB0aGUgbGl0ZXJhbHMgdGhpcyBDTEkgd3JpdGVzXG4gKiAgICh7QGxpbmsgaXNHZW5lcmF0ZWRCaW5kaW5nVGFyZ2V0VHlwZX0pLCBpcyBvbmUgb2Ygb3Vycy4gU3RhbGUg4oCUIGFuIG9sZGVyXG4gKiAgIHVuaW9uLCBvciB0aGUgb3RoZXIgZmxhdm9yJ3MgbGl0ZXJhbCDigJQgaXQgaXMgcmVwbGFjZWQgaW4gcGxhY2UsIGNvbW1lbnRcbiAqICAgYW5kIGFsbCwgc28gYSBmaWxlIGtlcHQgZnJvbSBhbiBlYXJsaWVyIGJ1aWxkIGVuZHMgdXAgc2F5aW5nIHdoYXQgdGhlXG4gKiAgIGxvYWRlciB3cml0dGVuIGJlc2lkZSBpdCBub3cgcmVwb3J0cy5cbiAqIC0gQW55IG90aGVyIGV4cG9ydCBvZiB0aGUgbmFtZSBpcyBzb21lb25lIGVsc2UncyBhbmQgaXMgcHJlc2VydmVkLCB3aXRoXG4gKiAgIG5vdGhpbmcgYXBwZW5kZWQgYmVzaWRlIGl0LiBBIGxvb3NlciBtYXRjaCB3b3VsZCByZXdyaXRlIGEgZGVjbGFyYXRpb24gYVxuICogICBgLS1kdHMtaGVhZGVyYCBjb250cmlidXRlZC4gVGhhdCBjb3ZlcnMgYSBzdGF0ZW1lbnQgZGVjbGFyaW5nIG1vcmUgbmFtZXNcbiAqICAgdGhhbiB0aGlzIG9uZSDigJQgdGhlIGJsb2NrIGEgcmVmcmVzaCByZXBsYWNlcyBzcGFucyB0aGVtIHRvbywgYW5kIHRoaXMgQ0xJXG4gKiAgIHdyaXRlcyB0aGUgZGVjbGFyYXRpb24gYWxvbmUg4oCUIGFuZCBpdCBjb3ZlcnMgZXZlcnkgb3RoZXIgd2F5IGEgaGVhZGVyIGNhblxuICogICBjbGFpbSB0aGUgbmFtZTogYXMgYSBgZnVuY3Rpb25gLCBgY2xhc3NgLCBgZW51bWAgb3IgaW5zdGFudGlhdGVkXG4gKiAgIGBuYW1lc3BhY2VgLCB0aHJvdWdoIGFuIGBleHBvcnQgeyB0YXJnZXQgYXMgX19uYXBpQmluZGluZ1RhcmdldCB9YCBvclxuICogICBgZXhwb3J0ICogYXMgX19uYXBpQmluZGluZ1RhcmdldCBmcm9tICfigKYnYCBjbGF1c2UsIG9yIHRocm91Z2hcbiAqICAgYGV4cG9ydCBpbXBvcnQgX19uYXBpQmluZGluZ1RhcmdldCA9IOKApmAuIE5vbmUgb2YgdGhvc2UgbGVhdmVzIGFcbiAqICAgZGVjbGFyYXRpb24gaGVyZSB0byByZXdyaXRlLCBhbmQgYW4gZXhwb3J0IGFkZGVkIGJlc2lkZSBhbnkgb2YgdGhlbSBpcyBhXG4gKiAgIFR5cGVTY3JpcHQgZXJyb3IgKFRTMjMwMCwgVFMyMzIzLCBUUzI0NDAgb3IgVFMyNTY3IGJ5IGZvcm0pLlxuICpcbiAqICAgQSBoZWFkZXIgdGhhdCBleHBvcnRzIHRoZSBuYW1lIGluIHR5cGUgc3BhY2Ugb25seSDigJQgYSBgdHlwZWAsIGFuXG4gKiAgIGBpbnRlcmZhY2VgLCBhIG5hbWVzcGFjZSB0aGF0IGRlY2xhcmVzIG5vIHZhbHVlIOKAlCBjbGFpbXMgbm90aGluZzogdGhlXG4gKiAgIGRlY2xhcmF0aW9uIG1lcmdlcyB3aXRoIGl0LCBhbmQgd2l0aGhvbGRpbmcgaXQgd291bGQgY29zdCBhIGNvbnN1bWVyIHRoZVxuICogICB2YWx1ZSB0aGUgbG9hZGVyIHJlYWxseSBleHBvcnRzIOKAlCBzZWUge0BsaW5rIHNjYW5FeHBvcnRlZE5hbWV9LlxuICpcbiAqIEEgZGVjbGFyYXRpb24gZmlsZSB0aGF0IGV4cG9ydHMgYnkgYXNzaWdubWVudCAoYGV4cG9ydCA9IGJpbmRpbmdgLCB3aGF0IGFcbiAqIGJ1aWxkIHdpdGhvdXQgYG5hcGktZGVyaXZlYCdzIGB0eXBlLWRlZmAgZmVhdHVyZSBlbWl0cykgY2Fubm90IGNhcnJ5IGEgbmFtZWRcbiAqIGV4cG9ydCBkZWNsYXJhdGlvbiwgc28gaXQgaXMgbGVmdCBhbG9uZTsgaXRzIGV4cG9ydHMgYXJlIHVudHlwZWQgYW55d2F5LlxuICogVGhhdCwgdG9vLCBpcyByZWFkIG9mZiB0aGUgcGFyc2Ug4oCUIGEgYmxvY2sgY29tbWVudCBkb2N1bWVudGluZyB0aGUgQ29tbW9uSlNcbiAqIGZvcm0gaXMgbm90IGFuIGV4cG9ydCBhc3NpZ25tZW50LlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBlbnN1cmVCaW5kaW5nVGFyZ2V0RGVjbGFyYXRpb24odHlwZURlZjogc3RyaW5nLCBwbGF0Zm9ybUFyY2hBQkk/OiBzdHJpbmcsIHJlbmRlcmVkSGVhZGVyPzogc3RyaW5nKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29sbGVjdFN0YWxlV2FzaUJ1aWxkT3V0cHV0TmFtZXMoYmluYXJ5TmFtZTogc3RyaW5nLCBidWlsZFRhcmdldDogVGFyZ2V0LCBjb25maWd1cmVkVGFyZ2V0czogVGFyZ2V0W10pOiBTZXQ8c3RyaW5nPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlbW92ZVdhc21DdXN0b21TZWN0aW9uKGJpbmFyeTogVWludDhBcnJheSwgc2VjdGlvbk5hbWU6IHN0cmluZyk6IFVpbnQ4QXJyYXk7XG50eXBlIEJ1aWxkRm9ybWF0T3B0aW9ucyA9IHtcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgZXNtPzogYm9vbGVhbjtcbiAgICBjb21tb25qcz86IGJvb2xlYW47XG59O1xuLyoqXG4gKiBSZXNvbHZlIHRoZSBleHBsaWNpdCBidWlsZCBmb3JtYXQgYW5kIGl0cyBsZWdhY3kgQ0xJL0FQSSBhbGlhc2VzLlxuICpcbiAqIENvbW1vbkpTIGlzIHRoZSBoaXN0b3JpY2FsIGRlZmF1bHQuIFRoZSBhbGlhc2VzIGFyZSBpbnRlbnRpb25hbGx5IGtlcHRcbiAqIHNlcGFyYXRlIGZyb20gYGZvcm1hdGAgYmVjYXVzZSBgLS1lc21gIGFuZCBgLS1jb21tb25qc2AgYXJlIGJvb2xlYW4gZmxhZ3MsXG4gKiB3aGlsZSBgLS1mb3JtYXRgIHRha2VzIGEgdmFsdWUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlc29sdmVCdWlsZEZvcm1hdChvcHRpb25zOiBCdWlsZEZvcm1hdE9wdGlvbnMpOiBCdWlsZEZvcm1hdDtcbi8qKiBCdWlsZCB0aGUgY29uZmlndXJlZCBOQVBJLVJTIGNyYXRlIGFuZCBnZW5lcmF0ZSBpdHMgb3V0cHV0IGFydGlmYWN0cy4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGJ1aWxkUHJvamVjdChyYXdPcHRpb25zOiBCdWlsZE9wdGlvbnMpOiBQcm9taXNlPHtcbiAgICB0YXNrOiBQcm9taXNlPE91dHB1dFtdPjtcbiAgICBhYm9ydDogKCkgPT4gdm9pZDtcbn0+O1xuLyoqXG4gKiBWYWxpZGF0ZSB0aGUgY29tYmluYXRpb24gb2YgdGhlIGNyb3NzLWNvbXBpbGF0aW9uIHJlbGF0ZWQgZmxhZ3MuXG4gKlxuICogYC0tdXNlLWNyb3NzYCwgYC0tdXNlLW5hcGktY3Jvc3NgIGFuZCBgLS1jcm9zcy1jb21waWxlYCAoYC14YCkgYXJlIHRocmVlXG4gKiBtdXR1YWxseSBleGNsdXNpdmUgY3Jvc3MtY29tcGlsYXRpb24gbWVjaGFuaXNtczsgY29tYmluaW5nIGFueSB0d28gb2YgdGhlbVxuICogbGVhdmVzIGJvdGggYWN0aXZlIGF0IG9uY2UgYW5kIHByb2R1Y2VzIGJyb2tlbiBidWlsZHMsIHNvIGl0IGlzIHJlamVjdGVkXG4gKiB1cGZyb250IGJlZm9yZSBhbnkgc2lkZSBlZmZlY3QgKGxpa2UgYXV0by1pbnN0YWxsaW5nIGNhcmdvIGJpbmFyaWVzIG9yXG4gKiBkb3dubG9hZGluZyB0b29sY2hhaW5zKSBoYXBwZW5zLlxuICpcbiAqIGAtLWNyb3NzLWNvbXBpbGVgIHdpdGggYSBgd2luZG93cy1nbnVgIHRhcmdldCBpcyByZWplY3RlZCBhcyB3ZWxsOiBvbiBhXG4gKiBub24tV2luZG93cyBob3N0IGl0IHJvdXRlcyB0aGUgYnVpbGQgdG8gYGNhcmdvIHh3aW4gYnVpbGRgLCBidXRcbiAqIGBjYXJnby14d2luYCBvbmx5IHNldHMgdXAgTVNWQyB0b29sY2hhaW5zIOKAlCBmb3IgYHdpbmRvd3MtZ251YCB0YXJnZXRzIGl0XG4gKiBzaWxlbnRseSBkb2VzIG5vdGhpbmcgYW5kIHRoZSBidWlsZCBkaWVzIG11Y2ggbGF0ZXIgd2l0aCBhIGNyeXB0aWNcbiAqIGBgZXJyb3I6IGxpbmtlciBgeDg2XzY0LXc2NC1taW5ndzMyLWdjY2Agbm90IGZvdW5kYGAgdGhhdCBuZXZlciBtZW50aW9uc1xuICogYGNhcmdvLXh3aW5gLiBPbmx5IGFuIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHRhcmdldCAoYC0tdGFyZ2V0YCBvclxuICogYENBUkdPX0JVSUxEX1RBUkdFVGApIGlzIGluc3BlY3RlZCwgc28gdGhpcyB2YWxpZGF0aW9uIG5ldmVyIGhhcyB0byBzcGF3blxuICogYHJ1c3RjIC12VmA7IGEgbm9uLVdpbmRvd3MgaG9zdCdzIGRlZmF1bHQgdGFyZ2V0IGNhbiBuZXZlciBiZVxuICogYHdpbmRvd3MtZ251YCBhbnl3YXkuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZhbGlkYXRlQ3Jvc3NDb21waWxlRmxhZ3Mob3B0aW9uczoge1xuICAgIHVzZUNyb3NzPzogYm9vbGVhbjtcbiAgICBjcm9zc0NvbXBpbGU/OiBib29sZWFuO1xuICAgIHVzZU5hcGlDcm9zcz86IGJvb2xlYW47XG4gICAgd2F0Y2g/OiBib29sZWFuO1xuICAgIHRhcmdldD86IHN0cmluZztcbn0sIGhvc3RQbGF0Zm9ybT86IHN0cmluZyk6IHZvaWQ7XG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgYC0tdXNlLW5hcGktY3Jvc3NgIGNhbiBhY3R1YWxseSBoYW5kbGUgdGhlIHJlcXVlc3RlZCB0YXJnZXRcbiAqIG9uIHRoZSBjdXJyZW50IGhvc3QuIFRoZSBzdXBwb3J0ZWQgdGFyZ2V0IHNldCBpcyByZWFkIGZyb20gdGhlXG4gKiBgQG5hcGktcnMvY3Jvc3MtdG9vbGNoYWluYCBwYWNrYWdlLCBhbmQgdGhlIHByZS1idWlsdCB0b29sY2hhaW5zIG9ubHkgcnVuXG4gKiBvbiBMaW51eCB4NjQgYW5kIExpbnV4IGFybTY0IGhvc3RzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWxpZGF0ZU5hcGlDcm9zc1N1cHBvcnQodGFyZ2V0VHJpcGxlOiBzdHJpbmcsIGhvc3RQbGF0Zm9ybT86IHN0cmluZywgaG9zdEFyY2g/OiBzdHJpbmcpOiB2b2lkO1xuLyoqXG4gKiBDb21wdXRlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCByb3V0ZSBhIGAtLXVzZS1uYXBpLWNyb3NzYCBidWlsZFxuICogdGhyb3VnaCB0aGUgYEBuYXBpLXJzL2Nyb3NzLXRvb2xjaGFpbmAgdG9vbGNoYWluIGV4dHJhY3RlZCBhdFxuICogYHRvb2xjaGFpblBhdGhgLlxuICpcbiAqIEZvbGxvd3MgdGhlIHNhbWUgcnVsZSBhcyBgQnVpbGRlciNzZXRFbnZJZk5vdEV4aXN0c2A6IGEgdmFyaWFibGUgdGhlIHVzZXJcbiAqIGFscmVhZHkgc2V0IGluIGBlbnZgIHdpbnMgYW5kIGlzIG5vdCByZXR1cm5lZCwgYW5kIGEgcHJlc2VudC1idXQtZW1wdHlcbiAqIHZhcmlhYmxlIGNvdW50cyBhcyB1bnNldCAoZmFsc3kgc2VtYW50aWNzKS4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUgdGhlXG4gKiBjbGFuZy1zcGVjaWZpYyBgVEFSR0VUX0NGTEFHU2AvYFRBUkdFVF9DWFhGTEFHU2AsIHdoaWNoIHByZXBlbmQgdGhlIHN5c3Jvb3RcbiAqIGZsYWdzIHRvIHRoZSB1c2VyJ3MgdmFsdWUsIGFuZCBgUEFUSGAsIHdoaWNoIGFsd2F5cyBnZXRzIHRoZSB0b29sY2hhaW5cbiAqIGBiaW5gIGRpcmVjdG9yeSBwcmVwZW5kZWQuXG4gKlxuICogRXhwb3J0ZWQgZm9yIHRlc3RzLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBuYXBpQ3Jvc3NUb29sY2hhaW5FbnZzKHRvb2xjaGFpblBhdGg6IHN0cmluZywgdGFyZ2V0VHJpcGxlOiBzdHJpbmcsIGVudj86IE5vZGVKUy5Qcm9jZXNzRW52KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZlcmlmeVdhc2lSZWFjdG9yKHdhc21QYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZUpzQmluZGluZ09wdGlvbnMge1xuICAgIHBsYXRmb3JtPzogYm9vbGVhbjtcbiAgICBub0pzQmluZGluZz86IGJvb2xlYW47XG4gICAgaWRlbnRzOiBzdHJpbmdbXTtcbiAgICBqc0JpbmRpbmc/OiBzdHJpbmc7XG4gICAgZm9ybWF0PzogQnVpbGRGb3JtYXQ7XG4gICAgZXNtPzogYm9vbGVhbjtcbiAgICBjb21tb25qcz86IGJvb2xlYW47XG4gICAgYmluYXJ5TmFtZTogc3RyaW5nO1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGBwbGF0Zm9ybUFyY2hBQklgcyBvZiB0aGUgZGVjbGFyZWQgV0FTSSB0YXJnZXRzIGluIGZhbGxiYWNrIHByZWZlcmVuY2VcbiAgICAgKiBvcmRlciAodGhyZWFkZWQgZmlyc3QpLiBEZWZhdWx0cyB0byB0aGUgbGVnYWN5IGBbJ3dhc20zMi13YXNpJ11gIGNoYWluXG4gICAgICogd2hlbiBvbWl0dGVkIG9yIGVtcHR5LiBHZW5lcmF0ZWQgbG9hZGVycyBleHBvc2UgdGhlc2UgZXhhY3QgaWRlbnRpdGllc1xuICAgICAqIHRocm91Z2ggYE5BUElfUlNfV0FTSV9GTEFWT1JgLlxuICAgICAqL1xuICAgIHdhc2lGbGF2b3JzPzogc3RyaW5nW107XG59XG4vKiogV3JpdGUgYSBwbGF0Zm9ybSBiaW5kaW5nIGxvYWRlciBpbiB0aGUgcmVxdWVzdGVkIG1vZHVsZSBmb3JtYXQuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3cml0ZUpzQmluZGluZyhvcHRpb25zOiBXcml0ZUpzQmluZGluZ09wdGlvbnMpOiBQcm9taXNlPE91dHB1dCB8IHVuZGVmaW5lZD47XG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlVHlwZURlZk9wdGlvbnMge1xuICAgIHR5cGVEZWZEaXI6IHN0cmluZztcbiAgICBub0R0c0hlYWRlcj86IGJvb2xlYW47XG4gICAgZHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIGR0c0hlYWRlckZpbGU/OiBzdHJpbmc7XG4gICAgY29uZmlnRHRzSGVhZGVyPzogc3RyaW5nO1xuICAgIGNvbmZpZ0R0c0hlYWRlckZpbGU/OiBzdHJpbmc7XG4gICAgY29uc3RFbnVtPzogYm9vbGVhbjtcbiAgICBydW50aW1lU3RyaW5nRW51bT86IGJvb2xlYW47XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogRGVjbGFyZSB0aGUgZ2VuZXJhdGVkIGxvYWRlcidzIGBfX25hcGlCaW5kaW5nVGFyZ2V0YCBleHBvcnQuIFNldCBpdCBmb3JcbiAgICAgKiBidWlsZHMgdGhhdCBlbWl0IGEgbG9hZGVyOyBhIGJ1aWxkIHRoYXQgZW1pdHMgbm9uZSBkZWNsYXJlcyBub3RoaW5nLiBUaGVcbiAgICAgKiBkZWNsYXJlZCB1bmlvbiBjb3ZlcnMgZXZlcnkgYXJ0aWZhY3QgYSBsb2FkZXIgY2FuIGhhbmQgYmFjaywgbm90IG9ubHkgdGhlXG4gICAgICogdGFyZ2V0cyB0aGlzIHBhY2thZ2UgYnVpbGRzIOKAlCBzZWUge0BsaW5rIEJJTkRJTkdfVEFSR0VUX1RZUEVfVU5JT059LlxuICAgICAqXG4gICAgICogV2hldGhlciB0aGUgcm9vdCBsb2FkZXIgaXMgd3JpdHRlbiBkZXBlbmRzIG9uIHRoZSBleHBvcnRzIHRoaXMgYnVpbGRcbiAgICAgKiBwcm9kdWNlZCwgd2hpY2ggb25seSB0eXBlZ2VuIGtub3dzLCBzbyBhIHByZWRpY2F0ZSBtYXkgYmUgcGFzc2VkIGluc3RlYWRcbiAgICAgKiBvZiBhIGZsYWc7IGl0IGlzIGNhbGxlZCB3aXRoIHRoZSBnZW5lcmF0ZWQgZXhwb3J0IGxpc3QuIFNlZVxuICAgICAqIHtAbGluayBiaW5kaW5nVGFyZ2V0RGVjbGFyYXRpb25QcmVkaWNhdGV9LlxuICAgICAqL1xuICAgIGRlY2xhcmVCaW5kaW5nVGFyZ2V0PzogYm9vbGVhbiB8ICgoZXhwb3J0czogcmVhZG9ubHkgc3RyaW5nW10pID0+IGJvb2xlYW4pO1xufVxuLyoqXG4gKiBXYWxrIHRoZSBuYXBpLWRlcml2ZSBpbnRlcm1lZGlhdGUgdHlwZS1kZWYgZGlyZWN0b3J5LCByZW5kZXIgZXZlcnkgZW50cnlcbiAqIGludG8gVHlwZVNjcmlwdCB2aWEge0BsaW5rIHByb2Nlc3NUeXBlRGVmfSwgYW5kIHJldHVybiB0aGUgY29uY2F0ZW5hdGVkXG4gKiBgLmQudHNgIHNvdXJjZSBwbHVzIHRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIHRvIHJlLWV4cG9ydCBmcm9tXG4gKiBgaW5kZXguanNgLlxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZW5lcmF0ZVR5cGVEZWYob3B0aW9uczogR2VuZXJhdGVUeXBlRGVmT3B0aW9ucyk6IFByb21pc2U8e1xuICAgIGV4cG9ydHM6IHN0cmluZ1tdO1xuICAgIGR0czogc3RyaW5nO1xuICAgIGR0c1dpdGhUeXBlSW1wb3J0czogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBgLmQudHNgIGhlYWRlciBhcyByZW5kZXJlZCwgYmVmb3JlIGFueXRoaW5nIHRoZSBnZW5lcmF0ZWQgYm9keSBuZWVkc1xuICAgICAqIHdhcyBhcHBlbmRlZCB0byBpdC4gYGVuc3VyZUJpbmRpbmdUYXJnZXREZWNsYXJhdGlvbmAgdGFrZXMgaXQgdG8gdGVsbCBhXG4gICAgICogZGVjbGFyYXRpb24gdGhlIGhlYWRlciBvd25zIGZyb20gb25lIHRoaXMgYnVpbGQgd3JvdGUuXG4gICAgICovXG4gICAgaGVhZGVyOiBzdHJpbmc7XG59PjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjbGlwYW5pb24nO1xuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgQmFzZUNyZWF0ZU5wbURpcnNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICB9O1xufVxuLyoqXG4gKiBDcmVhdGUgbnBtIHBhY2thZ2UgZGlycyBmb3IgZGlmZmVyZW50IHBsYXRmb3Jtc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU5wbURpcnNPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEcnkgcnVuIHdpdGhvdXQgdG91Y2hpbmcgZmlsZSBzeXN0ZW1cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZHJ5UnVuPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdENyZWF0ZU5wbURpcnNPcHRpb25zKG9wdGlvbnM6IENyZWF0ZU5wbURpcnNPcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbn07XG4iLCJpbXBvcnQgeyB0eXBlIENyZWF0ZU5wbURpcnNPcHRpb25zIH0gZnJvbSAnLi4vZGVmL2NyZWF0ZS1ucG0tZGlycy5qcyc7XG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VNZXRhIHtcbiAgICAnZGlzdC10YWdzJzoge1xuICAgICAgICBbaW5kZXg6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlTnBtRGlycyh1c2VyT3B0aW9uczogQ3JlYXRlTnBtRGlyc09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlTmV3Q29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICAkJHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAkJG5hbWU/OiBzdHJpbmc7XG4gICAgbWluTm9kZUFwaVZlcnNpb246IG51bWJlcjtcbiAgICBwYWNrYWdlTWFuYWdlcjogc3RyaW5nO1xuICAgIGxpY2Vuc2U6IHN0cmluZztcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTtcbiAgICBlbmFibGVEZWZhdWx0VGFyZ2V0czogYm9vbGVhbjtcbiAgICBlbmFibGVBbGxUYXJnZXRzOiBib29sZWFuO1xuICAgIGVuYWJsZVR5cGVEZWY6IGJvb2xlYW47XG4gICAgZW5hYmxlR2l0aHViQWN0aW9uczogYm9vbGVhbjtcbiAgICB0ZXN0RnJhbWV3b3JrOiBzdHJpbmc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbWluTm9kZUFwaVZlcnNpb246IG51bWJlcjtcbiAgICAgICAgcGFja2FnZU1hbmFnZXI6IHN0cmluZztcbiAgICAgICAgbGljZW5zZTogc3RyaW5nO1xuICAgICAgICB0YXJnZXRzOiBzdHJpbmdbXTtcbiAgICAgICAgZW5hYmxlRGVmYXVsdFRhcmdldHM6IGJvb2xlYW47XG4gICAgICAgIGVuYWJsZUFsbFRhcmdldHM6IGJvb2xlYW47XG4gICAgICAgIGVuYWJsZVR5cGVEZWY6IGJvb2xlYW47XG4gICAgICAgIGVuYWJsZUdpdGh1YkFjdGlvbnM6IGJvb2xlYW47XG4gICAgICAgIHRlc3RGcmFtZXdvcms6IHN0cmluZztcbiAgICAgICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIH07XG59XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBwcm9qZWN0IHdpdGggcHJlLWNvbmZpZ3VyZWQgYm9pbGVycGxhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXdPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGF0aCB3aGVyZSB0aGUgTkFQSS1SUyBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0LCBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgaWYgbm90IHByb3ZpZGVkXG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSBOb2RlLUFQSSB2ZXJzaW9uIHRvIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDRcbiAgICAgKi9cbiAgICBtaW5Ob2RlQXBpVmVyc2lvbj86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gT25seSBzdXBwb3J0IHlhcm4gNC54IGZvciBub3cuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAneWFybidcbiAgICAgKi9cbiAgICBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBMaWNlbnNlIGZvciBvcGVuLXNvdXJjZWQgcHJvamVjdFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ01JVCdcbiAgICAgKi9cbiAgICBsaWNlbnNlPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEFsbCB0YXJnZXRzIHRoZSBjcmF0ZSB3aWxsIGJlIGNvbXBpbGVkIGZvci5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFtdXG4gICAgICovXG4gICAgdGFyZ2V0cz86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIGRlZmF1bHQgdGFyZ2V0c1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZURlZmF1bHRUYXJnZXRzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuYWJsZSBhbGwgdGFyZ2V0c1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBlbmFibGVBbGxUYXJnZXRzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuYWJsZSB0aGUgYHR5cGUtZGVmYCBmZWF0dXJlIGZvciB0eXBlc2NyaXB0IGRlZmluaXRpb25zIGF1dG8tZ2VuZXJhdGlvblxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZVR5cGVEZWY/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZ2VuZXJhdGUgcHJlY29uZmlndXJlZCBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZUdpdGh1YkFjdGlvbnM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRoZSBKYXZhU2NyaXB0IHRlc3QgZnJhbWV3b3JrIHRvIHVzZSwgb25seSBzdXBwb3J0IGBhdmFgIGZvciBub3dcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdhdmEnXG4gICAgICovXG4gICAgdGVzdEZyYW1ld29yaz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJ1biB0aGUgY29tbWFuZCBpbiBkcnktcnVuIG1vZGVcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZHJ5UnVuPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdE5ld09wdGlvbnMob3B0aW9uczogTmV3T3B0aW9ucyk6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGF0aCB3aGVyZSB0aGUgTkFQSS1SUyBwcm9qZWN0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKi9cbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0LCBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgaWYgbm90IHByb3ZpZGVkXG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcbiAgICBtaW5Ob2RlQXBpVmVyc2lvbjogbnVtYmVyO1xuICAgIHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmc7XG4gICAgbGljZW5zZTogc3RyaW5nO1xuICAgIHRhcmdldHM6IHN0cmluZ1tdO1xuICAgIGVuYWJsZURlZmF1bHRUYXJnZXRzOiBib29sZWFuO1xuICAgIGVuYWJsZUFsbFRhcmdldHM6IGJvb2xlYW47XG4gICAgZW5hYmxlVHlwZURlZjogYm9vbGVhbjtcbiAgICBlbmFibGVHaXRodWJBY3Rpb25zOiBib29sZWFuO1xuICAgIHRlc3RGcmFtZXdvcms6IHN0cmluZztcbiAgICBkcnlSdW46IGJvb2xlYW47XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBOZXdPcHRpb25zIGFzIFJhd05ld09wdGlvbnMgfSBmcm9tICcuLi9kZWYvbmV3LmpzJztcbnR5cGUgTmV3T3B0aW9ucyA9IFJlcXVpcmVkPFJhd05ld09wdGlvbnM+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgR0VORVJBVEVEX1dBU0lfQklORElORzogUmVnRXhwO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXBkYXRlQ2FyZ29Ub21sTm9kZUFwaVZlcnNpb24oZmlsZVBhdGg6IHN0cmluZywgbWluTm9kZUFwaVZlcnNpb246IG51bWJlcik6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBuZXdQcm9qZWN0KHVzZXJPcHRpb25zOiBSYXdOZXdPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCB0eXBlIHsgTmV3T3B0aW9ucyB9O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlUHJlUHVibGlzaENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgc3RhdGljIHVzYWdlOiBpbXBvcnQoXCJjbGlwYW5pb25cIikuVXNhZ2U7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICB0YWdTdHlsZTogc3RyaW5nO1xuICAgIGdoUmVsZWFzZTogYm9vbGVhbjtcbiAgICBnaFJlbGVhc2VOYW1lPzogc3RyaW5nO1xuICAgIGdoUmVsZWFzZUlkPzogc3RyaW5nO1xuICAgIHNraXBPcHRpb25hbFB1Ymxpc2g6IGJvb2xlYW47XG4gICAgcm9vdFB1Ymxpc2hlcj86ICducG0nIHwgJ3BucG0nIHwgJ3lhcm4nIHwgJ3lhcm4tY2xhc3NpYyc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgICAgIHRhZ1N0eWxlOiBzdHJpbmc7XG4gICAgICAgIGdoUmVsZWFzZTogYm9vbGVhbjtcbiAgICAgICAgZ2hSZWxlYXNlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBnaFJlbGVhc2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBza2lwT3B0aW9uYWxQdWJsaXNoOiBib29sZWFuO1xuICAgICAgICByb290UHVibGlzaGVyOiBcInlhcm5cIiB8IFwicG5wbVwiIHwgXCJucG1cIiB8IFwieWFybi1jbGFzc2ljXCIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICB9O1xufVxuLyoqXG4gKiBVcGRhdGUgcGFja2FnZS5qc29uIGFuZCBjb3B5IGFkZG9ucyBpbnRvIHBlciBwbGF0Zm9ybSBwYWNrYWdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZVB1Ymxpc2hPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBnaXQgdGFnIHN0eWxlLCBgbnBtYCBvciBgbGVybmFgXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbGVybmEnXG4gICAgICovXG4gICAgdGFnU3R5bGU/OiAnbnBtJyB8ICdsZXJuYSc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBjcmVhdGUgR2l0SHViIHJlbGVhc2VcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBnaFJlbGVhc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEdpdEh1YiByZWxlYXNlIG5hbWVcbiAgICAgKi9cbiAgICBnaFJlbGVhc2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEV4aXN0aW5nIEdpdEh1YiByZWxlYXNlIGlkXG4gICAgICovXG4gICAgZ2hSZWxlYXNlSWQ/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBza2lwIG9wdGlvbmFsRGVwZW5kZW5jaWVzIHBhY2thZ2VzIHB1Ymxpc2hcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgc2tpcE9wdGlvbmFsUHVibGlzaD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IHB1Ymxpc2hlcyB0aGUgcm9vdCBwYWNrYWdlLiBwbnBtIGFuZCB5YXJuIGJlcnJ5IHJlcGxhY2UgYGV4cG9ydHNgIHdpdGggYHB1Ymxpc2hDb25maWcuZXhwb3J0c2Agd2hpbGUgcGFja2luZywgc28gZm9yIHRoZW0gdGhlIHJvb3QgcGFja2FnZSB2YWxpZGF0aW9uIHRhcmdldHMgdGhlIHB1Ymxpc2gtZWZmZWN0aXZlIGV4cG9ydCBtYXAuIERlZmF1bHRzIHRvIHRoZSBgbmFwaS5yb290UHVibGlzaGVyYCBjb25maWcgZmllbGQsIGFuZCB2YWxpZGF0ZXMgYm90aCBleHBvcnQgbWFwcyB3aGVuIG5laXRoZXIgaXMgc2V0XG4gICAgICovXG4gICAgcm9vdFB1Ymxpc2hlcj86ICducG0nIHwgJ3BucG0nIHwgJ3lhcm4nIHwgJ3lhcm4tY2xhc3NpYyc7XG4gICAgLyoqXG4gICAgICogRHJ5IHJ1biB3aXRob3V0IHRvdWNoaW5nIGZpbGUgc3lzdGVtXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGRyeVJ1bj86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRQcmVQdWJsaXNoT3B0aW9ucyhvcHRpb25zOiBQcmVQdWJsaXNoT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBucG1EaXI6IHN0cmluZztcbiAgICB0YWdTdHlsZTogc3RyaW5nO1xuICAgIGdoUmVsZWFzZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBHaXRIdWIgcmVsZWFzZSBuYW1lXG4gICAgICovXG4gICAgZ2hSZWxlYXNlTmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBFeGlzdGluZyBHaXRIdWIgcmVsZWFzZSBpZFxuICAgICAqL1xuICAgIGdoUmVsZWFzZUlkPzogc3RyaW5nO1xuICAgIHNraXBPcHRpb25hbFB1Ymxpc2g6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IHB1Ymxpc2hlcyB0aGUgcm9vdCBwYWNrYWdlLiBwbnBtIGFuZCB5YXJuIGJlcnJ5IHJlcGxhY2UgYGV4cG9ydHNgIHdpdGggYHB1Ymxpc2hDb25maWcuZXhwb3J0c2Agd2hpbGUgcGFja2luZywgc28gZm9yIHRoZW0gdGhlIHJvb3QgcGFja2FnZSB2YWxpZGF0aW9uIHRhcmdldHMgdGhlIHB1Ymxpc2gtZWZmZWN0aXZlIGV4cG9ydCBtYXAuIERlZmF1bHRzIHRvIHRoZSBgbmFwaS5yb290UHVibGlzaGVyYCBjb25maWcgZmllbGQsIGFuZCB2YWxpZGF0ZXMgYm90aCBleHBvcnQgbWFwcyB3aGVuIG5laXRoZXIgaXMgc2V0XG4gICAgICovXG4gICAgcm9vdFB1Ymxpc2hlcj86IFwibnBtXCIgfCBcInBucG1cIiB8IFwieWFyblwiIHwgXCJ5YXJuLWNsYXNzaWNcIjtcbiAgICBkcnlSdW46IGJvb2xlYW47XG59O1xuIiwiaW1wb3J0IHsgdHlwZSBQcmVQdWJsaXNoT3B0aW9ucyB9IGZyb20gJy4uL2RlZi9wcmUtcHVibGlzaC5qcyc7XG5pbXBvcnQgeyB0eXBlIENvbW1vblBhY2thZ2VKc29uRmllbGRzLCB0eXBlIFJvb3RQdWJsaXNoZXIsIHR5cGUgVGFyZ2V0LCB0eXBlIFVzZXJOYXBpQ29uZmlnIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuLyoqXG4gKiBCdWlsZCB0aGUgcm9vdCBwYWNrYWdlJ3MgYG9wdGlvbmFsRGVwZW5kZW5jaWVzYCBtYXAuXG4gKlxuICogQSBXQVNJIHBhY2thZ2UgaXMgYSBmYWxsYmFjayBmb3IgaG9zdHMgdGhhdCBjYW5ub3QgbG9hZCBhIGAubm9kZWAgYmluYXJ5LCBhbmRcbiAqIHRoZSBnZW5lcmF0ZWQgYmluZGluZyBsb2FkZXIgc2VsZWN0cyBpdCBhdCByZXF1aXJlIHRpbWUgcmF0aGVyIHRoYW4gbnBtXG4gKiBzZWxlY3RpbmcgaXQgYXQgaW5zdGFsbCB0aW1lLiBEZWNsYXJpbmcgaXQgYXMgYW4gYG9wdGlvbmFsRGVwZW5kZW5jeWBcbiAqIGFsb25nc2lkZSB0aGUgbmF0aXZlIHBhY2thZ2VzIGNhbm5vdCBleHByZXNzIFwiaW5zdGFsbCB0aGlzIG9ubHkgd2hlbiBub3RoaW5nXG4gKiBlbHNlIG1hdGNoZWRcIjogbnBtIGV2YWx1YXRlcyBldmVyeSBlbnRyeSBpbmRlcGVuZGVudGx5LCBzbyBldmVyeSBjb25zdW1lclxuICogZG93bmxvYWRzIGEgYC53YXNtYCBiaW5hcnkgdGhleSB3aWxsIG5ldmVyIGxvYWQuXG4gKlxuICogSXQgaXMgdGhlcmVmb3JlIG9ubHkgZGVjbGFyZWQgd2hlbiBXQVNJIGlzIHRoZSBvbmx5IGNvbmZpZ3VyZWQgdGFyZ2V0LCB3aGljaFxuICogbWFrZXMgaXQgdGhlIHByaW1hcnkgYXJ0aWZhY3QgcmF0aGVyIHRoYW4gYSBmYWxsYmFjay5cbiAqIGBuYXBpLndhc20ub3B0aW9uYWxEZXBlbmRlbmN5YCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgaW4gYm90aCBkaXJlY3Rpb25zLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcm9sbGRvd24vcm9sbGRvd24vaXNzdWVzLzEwNTU2XG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlc29sdmVSb290T3B0aW9uYWxEZXBlbmRlbmNpZXMoeyBleGlzdGluZywgbWFuYWdlZFBhY2thZ2VOYW1lcywgcGFja2FnZU5hbWUsIHRhcmdldHMsIHZlcnNpb24sIHdhc20sIH06IHtcbiAgICBleGlzdGluZzogdW5rbm93bjtcbiAgICBtYW5hZ2VkUGFja2FnZU5hbWVzOiBJdGVyYWJsZTxzdHJpbmc+O1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gICAgdGFyZ2V0czogVGFyZ2V0W107XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIHdhc20/OiBVc2VyTmFwaUNvbmZpZ1snd2FzbSddO1xufSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJlUHVibGlzaCh1c2VyT3B0aW9uczogUHJlUHVibGlzaE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuaW50ZXJmYWNlIFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZSB7XG4gICAgZXhwb3J0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcHVibGlzaENvbmZpZ0V4cG9ydHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBnZW5lcmF0ZWRGaWxlczogc3RyaW5nW107XG4gICAgZmlsZXM6IFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZUZpbGVzO1xuICAgIHdhc21Tb3VyY2VQYXRoOiBzdHJpbmc7XG4gICAgbWFya2VyOiBzdHJpbmc7XG4gICAgZm9yd2FyZGluZ01vZHVsZTogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uVXBkYXRlOiB7XG4gICAgICAgIGZpbGVzPzogc3RyaW5nW107XG4gICAgfTtcbn1cbmludGVyZmFjZSBUaHJlYWRsZXNzV2FzaVJvb3RGYWNhZGVGaWxlcyB7XG4gICAgd29ya2VyZEVudHJ5OiBzdHJpbmc7XG4gICAgd29ya2VyZFR5cGVEZWY6IHN0cmluZztcbiAgICB3YXNtRW50cnk6IHN0cmluZztcbiAgICB3YXNtVHlwZURlZjogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcm9vdFB1Ymxpc2hlclJld3JpdGVzUm9vdEV4cG9ydHMocm9vdFB1Ymxpc2hlcjogUm9vdFB1Ymxpc2hlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZXNvbHZlUm9vdFB1Ymxpc2hlcihvcHRpb25WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb25maWdWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUm9vdFB1Ymxpc2hlciB8IHVuZGVmaW5lZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNuaWZmUmV3cml0aW5nUHVibGlzaGVyRnJvbVVzZXJBZ2VudCh1c2VyQWdlbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQpOiAncG5wbScgfCAneWFybicgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByb290UHVibGlzaGVySGludChyb290UHVibGlzaGVyOiBSb290UHVibGlzaGVyIHwgdW5kZWZpbmVkLCB1c2VyQWdlbnQ/OiBzdHJpbmcpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb2xsZWN0Um9vdFBhY2thZ2VQYXRoUmVmZXJlbmNlcyhwYWNrYWdlSnNvbjogQ29tbW9uUGFja2FnZUpzb25GaWVsZHMsIHJvb3RQdWJsaXNoZXI/OiBSb290UHVibGlzaGVyKTogc3RyaW5nW107XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJzZU5wbVBhY2tGaWxlcyhvdXRwdXQ6IHN0cmluZyk6IFNldDxzdHJpbmc+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsaWRhdGVSb290RmFjYWRlUGFja2xpc3Qocm9vdERpcjogc3RyaW5nLCByb290UGFja2FnZUZpbGVzOiBzdHJpbmdbXSwgcm9vdFB1Ymxpc2hlcj86IFJvb3RQdWJsaXNoZXIpOiB2b2lkO1xuaW50ZXJmYWNlIFJvb3RSZWxlYXNlTWF0ZXJpYWxpemF0aW9uUGxhbiB7XG4gICAgcGFja2FnZUpzb246IENvbW1vblBhY2thZ2VKc29uRmllbGRzO1xuICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBub2RlRW5naW5lPzogc3RyaW5nO1xuICAgIGZhY2FkZT86IFRocmVhZGxlc3NXYXNpUm9vdEZhY2FkZTtcbiAgICBzdGFsZUdlbmVyYXRlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICByb290UHVibGlzaGVyPzogUm9vdFB1Ymxpc2hlcjtcbn1cbmludGVyZmFjZSBSZWxlYXNlUGFja2FnZVZhbGlkYXRpb25PcHRpb25zIHtcbiAgICBwa2dEaXI6IHN0cmluZztcbiAgICByb290RGlyOiBzdHJpbmc7XG4gICAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgICBiaW5hcnlOYW1lOiBzdHJpbmc7XG4gICAgdGFyZ2V0OiBUYXJnZXQ7XG4gICAgcmVxdWlyZURpcmVjdEJ1ZmZlckRlcGVuZGVuY3k6IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgUmVsZWFzZVBhY2thZ2VNYXRlcmlhbGl6YXRpb25QbGFuIHtcbiAgICB0YXJnZXQ6IFRhcmdldDtcbiAgICBwa2dEaXI6IHN0cmluZztcbiAgICByb290RGlyOiBzdHJpbmc7XG4gICAgc3RhZ2VkUGtnRGlyPzogc3RyaW5nO1xuICAgIHBhY2thZ2VGaWxlczogc3RyaW5nW107XG4gICAgZGVjbGFyYXRpb25EZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuICAgIHVwZGF0ZU1hbmlmZXN0OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIENvbW1pdFByZVB1Ymxpc2hGaWxlU3lzdGVtVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICByZWxlYXNlUGFja2FnZVBsYW5zOiBSZWxlYXNlUGFja2FnZU1hdGVyaWFsaXphdGlvblBsYW5bXTtcbiAgICByb290RGlyOiBzdHJpbmc7XG4gICAgcm9vdFJlbGVhc2VQbGFuOiBSb290UmVsZWFzZU1hdGVyaWFsaXphdGlvblBsYW47XG4gICAgc3RhZ2VkUm9vdE1hbmlmZXN0UGF0aD86IHN0cmluZztcbiAgICBzdGFnZWRSb290RGlyOiBzdHJpbmc7XG4gICAgdHJhbnNhY3Rpb25Sb290Pzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29tbWl0UHJlUHVibGlzaEZpbGVTeXN0ZW1UcmFuc2FjdGlvbih7IHBhY2thZ2VKc29uUGF0aCwgcmVsZWFzZVBhY2thZ2VQbGFucywgcm9vdERpciwgcm9vdFJlbGVhc2VQbGFuLCBzdGFnZWRSb290RGlyLCBzdGFnZWRSb290TWFuaWZlc3RQYXRoLCB0cmFuc2FjdGlvblJvb3QsIH06IENvbW1pdFByZVB1Ymxpc2hGaWxlU3lzdGVtVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZhbGlkYXRlUmVsZWFzZVBhY2thZ2VDb250ZW50cyh7IHBrZ0Rpciwgcm9vdERpciwgcGFja2FnZU5hbWUsIGJpbmFyeU5hbWUsIHRhcmdldCwgcmVxdWlyZURpcmVjdEJ1ZmZlckRlcGVuZGVuY3ksIH06IFJlbGVhc2VQYWNrYWdlVmFsaWRhdGlvbk9wdGlvbnMpOiBQcm9taXNlPHtcbiAgICBwYWNrYWdlRmlsZXM6IHN0cmluZ1tdO1xuICAgIGRlY2xhcmF0aW9uRGVwZW5kZW5jaWVzOiBzdHJpbmdbXTtcbiAgICB1cGRhdGVNYW5pZmVzdDogYm9vbGVhbjtcbn0+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlUmVuYW1lQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xuICAgICQkbmFtZT86IHN0cmluZztcbiAgICBiaW5hcnlOYW1lPzogc3RyaW5nO1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICAgICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBiaW5hcnlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG1hbmlmZXN0UGF0aDogc3RyaW5nO1xuICAgICAgICByZXBvc2l0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfTtcbn1cbi8qKlxuICogUmVuYW1lIHRoZSBOQVBJLVJTIHByb2plY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5hbWVPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IG5hbWUgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgYmluYXJ5IG5hbWUgKi5ub2RlIGZpbGVzXG4gICAgICovXG4gICAgYmluYXJ5TmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHBhY2thZ2UgbmFtZSBvZiB0aGUgcHJvamVjdFxuICAgICAqL1xuICAgIHBhY2thZ2VOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYENhcmdvLnRvbWxgXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnQ2FyZ28udG9tbCdcbiAgICAgKi9cbiAgICBtYW5pZmVzdFBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyByZXBvc2l0b3J5IG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseURlZmF1bHRSZW5hbWVPcHRpb25zKG9wdGlvbnM6IFJlbmFtZU9wdGlvbnMpOiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBuYW1lIG9mIHRoZSBwcm9qZWN0XG4gICAgICovXG4gICAgbmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IGJpbmFyeSBuYW1lICoubm9kZSBmaWxlc1xuICAgICAqL1xuICAgIGJpbmFyeU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldyBwYWNrYWdlIG5hbWUgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBwYWNrYWdlTmFtZT86IHN0cmluZztcbiAgICBtYW5pZmVzdFBhdGg6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IHJlcG9zaXRvcnkgb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgZGVzY3JpcHRpb24gb2YgdGhlIHByb2plY3RcbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG4iLCJpbXBvcnQgeyB0eXBlIFJlbmFtZU9wdGlvbnMgfSBmcm9tICcuLi9kZWYvcmVuYW1lLmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlbmFtZVByb2plY3QodXNlck9wdGlvbnM6IFJlbmFtZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NsaXBhbmlvbic7XG5leHBvcnQgZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBCYXNlVW5pdmVyc2FsaXplQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHN0YXRpYyBwYXRoczogc3RyaW5nW11bXTtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG91dHB1dERpcjogc3RyaW5nO1xuICAgIGdldE9wdGlvbnMoKToge1xuICAgICAgICBjd2Q6IHN0cmluZztcbiAgICAgICAgY29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICAgICAgb3V0cHV0RGlyOiBzdHJpbmc7XG4gICAgfTtcbn1cbi8qKlxuICogQ29tYmlsZSBidWlsdCBiaW5hcmllcyBpbnRvIG9uZSB1bml2ZXJzYWwgYmluYXJ5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pdmVyc2FsaXplT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHdoZXJlIG5hcGkgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluLCBhbGwgb3RoZXIgcGF0aHMgb3B0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBwYXRoXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBwcm9jZXNzLmN3ZCgpXG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYHBhY2thZ2UuanNvbmBcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdwYWNrYWdlLmpzb24nXG4gICAgICovXG4gICAgcGFja2FnZUpzb25QYXRoPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSBhbGwgYnVpbHQgYC5ub2RlYCBmaWxlcyBwdXQsIHNhbWUgYXMgYC0tb3V0cHV0LWRpcmAgb2YgYnVpbGQgY29tbWFuZFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJy4vJ1xuICAgICAqL1xuICAgIG91dHB1dERpcj86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdFVuaXZlcnNhbGl6ZU9wdGlvbnMob3B0aW9uczogVW5pdmVyc2FsaXplT3B0aW9ucyk6IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGBuYXBpYCBjb25maWcganNvbiBmaWxlXG4gICAgICovXG4gICAgY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwYWNrYWdlSnNvblBhdGg6IHN0cmluZztcbiAgICBvdXRwdXREaXI6IHN0cmluZztcbn07XG4iLCJpbXBvcnQgeyB0eXBlIFVuaXZlcnNhbGl6ZU9wdGlvbnMgfSBmcm9tICcuLi9kZWYvdW5pdmVyc2FsaXplLmpzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVuaXZlcnNhbGl6ZUJpbmFyaWVzKHVzZXJPcHRpb25zOiBVbml2ZXJzYWxpemVPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiIsImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjbGlwYW5pb24nO1xuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgQmFzZVZlcnNpb25Db21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgc3RhdGljIHBhdGhzOiBzdHJpbmdbXVtdO1xuICAgIHN0YXRpYyB1c2FnZTogaW1wb3J0KFwiY2xpcGFuaW9uXCIpLlVzYWdlO1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgcGFja2FnZUpzb25QYXRoOiBzdHJpbmc7XG4gICAgbnBtRGlyOiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9ucygpOiB7XG4gICAgICAgIGN3ZDogc3RyaW5nO1xuICAgICAgICBjb25maWdQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgICAgICBucG1EaXI6IHN0cmluZztcbiAgICB9O1xufVxuLyoqXG4gKiBVcGRhdGUgdmVyc2lvbiBpbiBjcmVhdGVkIG5wbSBwYWNrYWdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25PcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd2hlcmUgbmFwaSBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgaW4sIGFsbCBvdGhlciBwYXRocyBvcHRpb25zIGFyZSByZWxhdGl2ZSB0byB0aGlzIHBhdGhcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHByb2Nlc3MuY3dkKClcbiAgICAgKi9cbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgbmFwaWAgY29uZmlnIGpzb24gZmlsZVxuICAgICAqL1xuICAgIGNvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byBgcGFja2FnZS5qc29uYFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3BhY2thZ2UuanNvbidcbiAgICAgKi9cbiAgICBwYWNrYWdlSnNvblBhdGg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogUGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBucG0gcGFja2FnZXMgcHV0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbnBtJ1xuICAgICAqL1xuICAgIG5wbURpcj86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdFZlcnNpb25PcHRpb25zKG9wdGlvbnM6IFZlcnNpb25PcHRpb25zKToge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFBhdGggdG8gYG5hcGlgIGNvbmZpZyBqc29uIGZpbGVcbiAgICAgKi9cbiAgICBjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nO1xuICAgIG5wbURpcjogc3RyaW5nO1xufTtcbiIsImltcG9ydCB7IHR5cGUgVmVyc2lvbk9wdGlvbnMgfSBmcm9tICcuLi9kZWYvdmVyc2lvbi5qcyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2ZXJzaW9uKHVzZXJPcHRpb25zOiBWZXJzaW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4iLCJpbXBvcnQgeyBCYXNlQXJ0aWZhY3RzQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9hcnRpZmFjdHMuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgQXJ0aWZhY3RzQ29tbWFuZCBleHRlbmRzIEJhc2VBcnRpZmFjdHNDb21tYW5kIHtcbiAgICBzdGF0aWMgdXNhZ2U6IGltcG9ydChcImNsaXBhbmlvblwiKS5Vc2FnZTtcbiAgICBzdGF0aWMgcGF0aHM6IHN0cmluZ1tdW107XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgQmFzZUJ1aWxkQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9idWlsZC5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBCdWlsZENvbW1hbmQgZXh0ZW5kcyBCYXNlQnVpbGRDb21tYW5kIHtcbiAgICBwaXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY2FyZ29PcHRpb25zOiBzdHJpbmdbXTtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlQ3JlYXRlTnBtRGlyc0NvbW1hbmQgfSBmcm9tICcuLi9kZWYvY3JlYXRlLW5wbS1kaXJzLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIENyZWF0ZU5wbURpcnNDb21tYW5kIGV4dGVuZHMgQmFzZUNyZWF0ZU5wbURpcnNDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlTmV3Q29tbWFuZCB9IGZyb20gJy4uL2RlZi9uZXcuanMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2V0TmFwaVZlcnNpb25DaG9pY2VzKCk6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IGltcG9ydChcIi4uL3V0aWxzL3ZlcnNpb24uanNcIikuTmFwaVZlcnNpb247XG59W107XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBOZXdDb21tYW5kIGV4dGVuZHMgQmFzZU5ld0NvbW1hbmQge1xuICAgIGludGVyYWN0aXZlOiBib29sZWFuO1xuICAgIGV4ZWN1dGUoKTogUHJvbWlzZTwwIHwgMT47XG4gICAgcHJpdmF0ZSBmZXRjaE9wdGlvbnM7XG4gICAgcHJpdmF0ZSBmZXRjaE5hbWU7XG4gICAgcHJpdmF0ZSBmZXRjaExpY2Vuc2U7XG4gICAgcHJpdmF0ZSBmZXRjaE5hcGlWZXJzaW9uO1xuICAgIHByaXZhdGUgZmV0Y2hUYXJnZXRzO1xuICAgIHByaXZhdGUgZmV0Y2hUeXBlRGVmO1xuICAgIHByaXZhdGUgZmV0Y2hHaXRodWJBY3Rpb25zO1xufVxuIiwiaW1wb3J0IHsgQmFzZVByZVB1Ymxpc2hDb21tYW5kIH0gZnJvbSAnLi4vZGVmL3ByZS1wdWJsaXNoLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFByZVB1Ymxpc2hDb21tYW5kIGV4dGVuZHMgQmFzZVByZVB1Ymxpc2hDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlUmVuYW1lQ29tbWFuZCB9IGZyb20gJy4uL2RlZi9yZW5hbWUuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgUmVuYW1lQ29tbWFuZCBleHRlbmRzIEJhc2VSZW5hbWVDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlVW5pdmVyc2FsaXplQ29tbWFuZCB9IGZyb20gJy4uL2RlZi91bml2ZXJzYWxpemUuanMnO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgVW5pdmVyc2FsaXplQ29tbWFuZCBleHRlbmRzIEJhc2VVbml2ZXJzYWxpemVDb21tYW5kIHtcbiAgICBleGVjdXRlKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBCYXNlVmVyc2lvbkNvbW1hbmQgfSBmcm9tICcuLi9kZWYvdmVyc2lvbi5qcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBWZXJzaW9uQ29tbWFuZCBleHRlbmRzIEJhc2VWZXJzaW9uQ29tbWFuZCB7XG4gICAgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgQ2xpIH0gZnJvbSAnY2xpcGFuaW9uJztcbmltcG9ydCB7IGNvbGxlY3RBcnRpZmFjdHMgfSBmcm9tICcuL2FwaS9hcnRpZmFjdHMuanMnO1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0IH0gZnJvbSAnLi9hcGkvYnVpbGQuanMnO1xuaW1wb3J0IHsgY3JlYXRlTnBtRGlycyB9IGZyb20gJy4vYXBpL2NyZWF0ZS1ucG0tZGlycy5qcyc7XG5pbXBvcnQgeyBuZXdQcm9qZWN0IH0gZnJvbSAnLi9hcGkvbmV3LmpzJztcbmltcG9ydCB7IHByZVB1Ymxpc2ggfSBmcm9tICcuL2FwaS9wcmUtcHVibGlzaC5qcyc7XG5pbXBvcnQgeyByZW5hbWVQcm9qZWN0IH0gZnJvbSAnLi9hcGkvcmVuYW1lLmpzJztcbmltcG9ydCB7IHVuaXZlcnNhbGl6ZUJpbmFyaWVzIH0gZnJvbSAnLi9hcGkvdW5pdmVyc2FsaXplLmpzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL2FwaS92ZXJzaW9uLmpzJztcbmltcG9ydCB7IEFydGlmYWN0c0NvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2FydGlmYWN0cy5qcyc7XG5pbXBvcnQgeyBCdWlsZENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkLmpzJztcbmltcG9ydCB7IENyZWF0ZU5wbURpcnNDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUtbnBtLWRpcnMuanMnO1xuaW1wb3J0IHsgTmV3Q29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvbmV3LmpzJztcbmltcG9ydCB7IFByZVB1Ymxpc2hDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9wcmUtcHVibGlzaC5qcyc7XG5pbXBvcnQgeyBSZW5hbWVDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9yZW5hbWUuanMnO1xuaW1wb3J0IHsgVW5pdmVyc2FsaXplQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvdW5pdmVyc2FsaXplLmpzJztcbmltcG9ydCB7IFZlcnNpb25Db21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9uLmpzJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNsaTogQ2xpPGltcG9ydChcImNsaXBhbmlvblwiKS5CYXNlQ29udGV4dD47XG4vKipcbiAqXG4gKiBAdXNhZ2VcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY2xpID0gbmV3IE5hcGlDbGkoKVxuICpcbiAqIGNsaS5idWlsZCh7XG4gKiAgIGN3ZDogJy9wYXRoL3RvL3lvdXIvcHJvamVjdCcsXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIE5hcGlDbGkge1xuICAgIGFydGlmYWN0czogdHlwZW9mIGNvbGxlY3RBcnRpZmFjdHM7XG4gICAgbmV3OiB0eXBlb2YgbmV3UHJvamVjdDtcbiAgICBidWlsZDogdHlwZW9mIGJ1aWxkUHJvamVjdDtcbiAgICBjcmVhdGVOcG1EaXJzOiB0eXBlb2YgY3JlYXRlTnBtRGlycztcbiAgICBwcmVQdWJsaXNoOiB0eXBlb2YgcHJlUHVibGlzaDtcbiAgICByZW5hbWU6IHR5cGVvZiByZW5hbWVQcm9qZWN0O1xuICAgIHVuaXZlcnNhbGl6ZTogdHlwZW9mIHVuaXZlcnNhbGl6ZUJpbmFyaWVzO1xuICAgIHZlcnNpb246IHR5cGVvZiB2ZXJzaW9uO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQnVpbGRDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogQnVpbGRDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQXJ0aWZhY3RzQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IEFydGlmYWN0c0NvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVDcmVhdGVOcG1EaXJzQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IENyZWF0ZU5wbURpcnNDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlUHJlUHVibGlzaENvbW1hbmQoYXJnczogc3RyaW5nW10pOiBQcmVQdWJsaXNoQ29tbWFuZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVJlbmFtZUNvbW1hbmQoYXJnczogc3RyaW5nW10pOiBSZW5hbWVDb21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlVW5pdmVyc2FsaXplQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFVuaXZlcnNhbGl6ZUNvbW1hbmQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVWZXJzaW9uQ29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IFZlcnNpb25Db21tYW5kO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlTmV3Q29tbWFuZChhcmdzOiBzdHJpbmdbXSk6IE5ld0NvbW1hbmQ7XG5leHBvcnQgeyBwYXJzZVRyaXBsZSB9IGZyb20gJy4vdXRpbHMvdGFyZ2V0LmpzJztcbmV4cG9ydCB7IHR5cGUgR2VuZXJhdGVUeXBlRGVmT3B0aW9ucywgdHlwZSBXcml0ZUpzQmluZGluZ09wdGlvbnMsIHdyaXRlSnNCaW5kaW5nLCBnZW5lcmF0ZVR5cGVEZWYsIH0gZnJvbSAnLi9hcGkvYnVpbGQuanMnO1xuZXhwb3J0IHsgcmVhZE5hcGlDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZy5qcyc7XG4iXSwibWFwcGluZ3MiOiI7OztBQUNBLElBQVcsQ0FBQyx3QkFBd0I7Q0FBQztPQUFXLENBQUMsT0FBTztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtDQUFFO0FBQUM7QUFDL0gsSUFBVyxDQUFDLG9CQUFvQjtDQUFDO09BQVcsQ0FBQztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0NBQUU7QUFBQzs7OztBQ0R4RSxJQUFXLENBQUMsb0JBQW9CO0NBQUM7T0FBVSxDQUFDLGtCQUFrQixPQUFPO0NBQUc7RUFBQztFQUFJO0VBQUk7Q0FBRTtBQUFDOzs7O0FDQXBGLElBQVcsQ0FBQyxvQkFBb0I7Q0FBQztPQUFXLENBQUMsT0FBTztDQUFHO0VBQUM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7RUFBSTtF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
|