cdktn 0.23.2 → 0.23.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +34 -34
- package/README.md +1 -1
- package/lib/annotations.js +1 -1
- package/lib/app.js +1 -1
- package/lib/aspect.js +1 -1
- package/lib/backends/azurerm-backend.js +2 -2
- package/lib/backends/cloud-backend.js +4 -4
- package/lib/backends/consul-backend.js +2 -2
- package/lib/backends/cos-backend.js +2 -2
- package/lib/backends/gcs-backend.js +2 -2
- package/lib/backends/http-backend.js +2 -2
- package/lib/backends/local-backend.js +2 -2
- package/lib/backends/oss-backend.js +2 -2
- package/lib/backends/pg-backend.js +2 -2
- package/lib/backends/remote-backend.js +4 -4
- package/lib/backends/s3-backend.js +2 -2
- package/lib/backends/swift-backend.js +2 -2
- package/lib/complex-computed-list.js +25 -25
- package/lib/errors.d.ts +1 -2
- package/lib/errors.js +11 -8
- package/lib/functions/terraform-functions.generated.js +1 -1
- package/lib/importable-resource.js +1 -1
- package/lib/manifest.js +4 -5
- package/lib/resource.js +1 -1
- package/lib/synthesize/synthesizer.js +4 -5
- package/lib/terraform-asset.js +1 -1
- package/lib/terraform-backend.js +1 -1
- package/lib/terraform-count.js +1 -1
- package/lib/terraform-data-resource.js +1 -1
- package/lib/terraform-data-source.js +1 -1
- package/lib/terraform-dynamic-block.js +2 -2
- package/lib/terraform-dynamic-expression.js +2 -2
- package/lib/terraform-element.js +1 -1
- package/lib/terraform-functions.js +1 -1
- package/lib/terraform-hcl-module.js +1 -1
- package/lib/terraform-iterator.js +5 -5
- package/lib/terraform-local.js +1 -1
- package/lib/terraform-module.js +1 -1
- package/lib/terraform-operators.js +1 -1
- package/lib/terraform-output.js +1 -1
- package/lib/terraform-provider.js +1 -1
- package/lib/terraform-provisioner.js +1 -1
- package/lib/terraform-remote-state.js +1 -1
- package/lib/terraform-resource-targets.js +1 -1
- package/lib/terraform-resource.js +1 -1
- package/lib/terraform-stack.js +1 -1
- package/lib/terraform-variable.js +2 -2
- package/lib/testing/index.js +7 -8
- package/lib/testing/matchers.js +1 -1
- package/lib/tokens/lazy.js +4 -4
- package/lib/tokens/private/intrinsic.d.ts +0 -5
- package/lib/tokens/private/intrinsic.js +2 -9
- package/lib/tokens/private/stack-trace.d.ts +6 -0
- package/lib/tokens/private/stack-trace.js +14 -1
- package/lib/tokens/resolvable.js +4 -4
- package/lib/tokens/string-fragments.js +1 -1
- package/lib/tokens/token.js +2 -2
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/upgrade-id-aspect.js +1 -1
- package/node_modules/{call-bind-apply-helpers → safe-stable-stringify}/LICENSE +2 -2
- package/node_modules/safe-stable-stringify/esm/package.json +4 -0
- package/node_modules/safe-stable-stringify/esm/wrapper.d.ts +4 -0
- package/node_modules/safe-stable-stringify/esm/wrapper.js +6 -0
- package/node_modules/safe-stable-stringify/index.d.ts +22 -0
- package/node_modules/safe-stable-stringify/index.js +625 -0
- package/node_modules/safe-stable-stringify/package.json +65 -0
- package/node_modules/safe-stable-stringify/readme.md +179 -0
- package/package.json +5 -6
- package/node_modules/call-bind/.eslintignore +0 -1
- package/node_modules/call-bind/.eslintrc +0 -16
- package/node_modules/call-bind/.github/FUNDING.yml +0 -12
- package/node_modules/call-bind/.nycrc +0 -9
- package/node_modules/call-bind/CHANGELOG.md +0 -106
- package/node_modules/call-bind/LICENSE +0 -21
- package/node_modules/call-bind/README.md +0 -64
- package/node_modules/call-bind/callBound.js +0 -15
- package/node_modules/call-bind/index.js +0 -24
- package/node_modules/call-bind/package.json +0 -93
- package/node_modules/call-bind/test/callBound.js +0 -54
- package/node_modules/call-bind/test/index.js +0 -74
- package/node_modules/call-bind-apply-helpers/.eslintrc +0 -17
- package/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +0 -12
- package/node_modules/call-bind-apply-helpers/.nycrc +0 -9
- package/node_modules/call-bind-apply-helpers/CHANGELOG.md +0 -30
- package/node_modules/call-bind-apply-helpers/README.md +0 -62
- package/node_modules/call-bind-apply-helpers/actualApply.d.ts +0 -1
- package/node_modules/call-bind-apply-helpers/actualApply.js +0 -10
- package/node_modules/call-bind-apply-helpers/applyBind.d.ts +0 -19
- package/node_modules/call-bind-apply-helpers/applyBind.js +0 -10
- package/node_modules/call-bind-apply-helpers/functionApply.d.ts +0 -1
- package/node_modules/call-bind-apply-helpers/functionApply.js +0 -4
- package/node_modules/call-bind-apply-helpers/functionCall.d.ts +0 -1
- package/node_modules/call-bind-apply-helpers/functionCall.js +0 -4
- package/node_modules/call-bind-apply-helpers/index.d.ts +0 -64
- package/node_modules/call-bind-apply-helpers/index.js +0 -15
- package/node_modules/call-bind-apply-helpers/package.json +0 -85
- package/node_modules/call-bind-apply-helpers/reflectApply.d.ts +0 -3
- package/node_modules/call-bind-apply-helpers/reflectApply.js +0 -4
- package/node_modules/call-bind-apply-helpers/test/index.js +0 -63
- package/node_modules/call-bind-apply-helpers/tsconfig.json +0 -9
- package/node_modules/call-bound/.eslintrc +0 -13
- package/node_modules/call-bound/.github/FUNDING.yml +0 -12
- package/node_modules/call-bound/.nycrc +0 -9
- package/node_modules/call-bound/CHANGELOG.md +0 -42
- package/node_modules/call-bound/LICENSE +0 -21
- package/node_modules/call-bound/README.md +0 -53
- package/node_modules/call-bound/index.d.ts +0 -94
- package/node_modules/call-bound/index.js +0 -19
- package/node_modules/call-bound/package.json +0 -99
- package/node_modules/call-bound/test/index.js +0 -61
- package/node_modules/call-bound/tsconfig.json +0 -10
- package/node_modules/define-data-property/.eslintrc +0 -24
- package/node_modules/define-data-property/.github/FUNDING.yml +0 -12
- package/node_modules/define-data-property/.nycrc +0 -13
- package/node_modules/define-data-property/CHANGELOG.md +0 -70
- package/node_modules/define-data-property/LICENSE +0 -21
- package/node_modules/define-data-property/README.md +0 -67
- package/node_modules/define-data-property/index.d.ts +0 -12
- package/node_modules/define-data-property/index.js +0 -56
- package/node_modules/define-data-property/package.json +0 -106
- package/node_modules/define-data-property/test/index.js +0 -392
- package/node_modules/define-data-property/tsconfig.json +0 -59
- package/node_modules/dunder-proto/.eslintrc +0 -5
- package/node_modules/dunder-proto/.github/FUNDING.yml +0 -12
- package/node_modules/dunder-proto/.nycrc +0 -13
- package/node_modules/dunder-proto/CHANGELOG.md +0 -24
- package/node_modules/dunder-proto/LICENSE +0 -21
- package/node_modules/dunder-proto/README.md +0 -54
- package/node_modules/dunder-proto/get.d.ts +0 -5
- package/node_modules/dunder-proto/get.js +0 -30
- package/node_modules/dunder-proto/package.json +0 -76
- package/node_modules/dunder-proto/set.d.ts +0 -5
- package/node_modules/dunder-proto/set.js +0 -35
- package/node_modules/dunder-proto/test/get.js +0 -34
- package/node_modules/dunder-proto/test/index.js +0 -4
- package/node_modules/dunder-proto/test/set.js +0 -50
- package/node_modules/dunder-proto/tsconfig.json +0 -9
- package/node_modules/es-define-property/.eslintrc +0 -13
- package/node_modules/es-define-property/.github/FUNDING.yml +0 -12
- package/node_modules/es-define-property/.nycrc +0 -9
- package/node_modules/es-define-property/CHANGELOG.md +0 -29
- package/node_modules/es-define-property/LICENSE +0 -21
- package/node_modules/es-define-property/README.md +0 -49
- package/node_modules/es-define-property/index.d.ts +0 -3
- package/node_modules/es-define-property/index.js +0 -14
- package/node_modules/es-define-property/package.json +0 -81
- package/node_modules/es-define-property/test/index.js +0 -56
- package/node_modules/es-define-property/tsconfig.json +0 -10
- package/node_modules/es-errors/.eslintrc +0 -5
- package/node_modules/es-errors/.github/FUNDING.yml +0 -12
- package/node_modules/es-errors/CHANGELOG.md +0 -40
- package/node_modules/es-errors/LICENSE +0 -21
- package/node_modules/es-errors/README.md +0 -55
- package/node_modules/es-errors/eval.d.ts +0 -3
- package/node_modules/es-errors/eval.js +0 -4
- package/node_modules/es-errors/index.d.ts +0 -3
- package/node_modules/es-errors/index.js +0 -4
- package/node_modules/es-errors/package.json +0 -80
- package/node_modules/es-errors/range.d.ts +0 -3
- package/node_modules/es-errors/range.js +0 -4
- package/node_modules/es-errors/ref.d.ts +0 -3
- package/node_modules/es-errors/ref.js +0 -4
- package/node_modules/es-errors/syntax.d.ts +0 -3
- package/node_modules/es-errors/syntax.js +0 -4
- package/node_modules/es-errors/test/index.js +0 -19
- package/node_modules/es-errors/tsconfig.json +0 -49
- package/node_modules/es-errors/type.d.ts +0 -3
- package/node_modules/es-errors/type.js +0 -4
- package/node_modules/es-errors/uri.d.ts +0 -3
- package/node_modules/es-errors/uri.js +0 -4
- package/node_modules/es-object-atoms/.eslintrc +0 -16
- package/node_modules/es-object-atoms/.github/FUNDING.yml +0 -12
- package/node_modules/es-object-atoms/CHANGELOG.md +0 -37
- package/node_modules/es-object-atoms/LICENSE +0 -21
- package/node_modules/es-object-atoms/README.md +0 -63
- package/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +0 -3
- package/node_modules/es-object-atoms/RequireObjectCoercible.js +0 -11
- package/node_modules/es-object-atoms/ToObject.d.ts +0 -7
- package/node_modules/es-object-atoms/ToObject.js +0 -10
- package/node_modules/es-object-atoms/index.d.ts +0 -3
- package/node_modules/es-object-atoms/index.js +0 -4
- package/node_modules/es-object-atoms/isObject.d.ts +0 -3
- package/node_modules/es-object-atoms/isObject.js +0 -6
- package/node_modules/es-object-atoms/package.json +0 -80
- package/node_modules/es-object-atoms/test/index.js +0 -38
- package/node_modules/es-object-atoms/tsconfig.json +0 -6
- package/node_modules/function-bind/.eslintrc +0 -21
- package/node_modules/function-bind/.github/FUNDING.yml +0 -12
- package/node_modules/function-bind/.github/SECURITY.md +0 -3
- package/node_modules/function-bind/.nycrc +0 -13
- package/node_modules/function-bind/CHANGELOG.md +0 -136
- package/node_modules/function-bind/LICENSE +0 -20
- package/node_modules/function-bind/README.md +0 -46
- package/node_modules/function-bind/implementation.js +0 -84
- package/node_modules/function-bind/index.js +0 -5
- package/node_modules/function-bind/package.json +0 -87
- package/node_modules/function-bind/test/.eslintrc +0 -9
- package/node_modules/function-bind/test/index.js +0 -252
- package/node_modules/get-intrinsic/.eslintrc +0 -42
- package/node_modules/get-intrinsic/.github/FUNDING.yml +0 -12
- package/node_modules/get-intrinsic/.nycrc +0 -9
- package/node_modules/get-intrinsic/CHANGELOG.md +0 -186
- package/node_modules/get-intrinsic/LICENSE +0 -21
- package/node_modules/get-intrinsic/README.md +0 -71
- package/node_modules/get-intrinsic/index.js +0 -378
- package/node_modules/get-intrinsic/package.json +0 -97
- package/node_modules/get-intrinsic/test/GetIntrinsic.js +0 -274
- package/node_modules/get-proto/.eslintrc +0 -10
- package/node_modules/get-proto/.github/FUNDING.yml +0 -12
- package/node_modules/get-proto/.nycrc +0 -9
- package/node_modules/get-proto/CHANGELOG.md +0 -21
- package/node_modules/get-proto/LICENSE +0 -21
- package/node_modules/get-proto/Object.getPrototypeOf.d.ts +0 -5
- package/node_modules/get-proto/Object.getPrototypeOf.js +0 -6
- package/node_modules/get-proto/README.md +0 -50
- package/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +0 -3
- package/node_modules/get-proto/Reflect.getPrototypeOf.js +0 -4
- package/node_modules/get-proto/index.d.ts +0 -5
- package/node_modules/get-proto/index.js +0 -27
- package/node_modules/get-proto/package.json +0 -81
- package/node_modules/get-proto/test/index.js +0 -68
- package/node_modules/get-proto/tsconfig.json +0 -9
- package/node_modules/gopd/.eslintrc +0 -16
- package/node_modules/gopd/.github/FUNDING.yml +0 -12
- package/node_modules/gopd/CHANGELOG.md +0 -45
- package/node_modules/gopd/LICENSE +0 -21
- package/node_modules/gopd/README.md +0 -40
- package/node_modules/gopd/gOPD.d.ts +0 -1
- package/node_modules/gopd/gOPD.js +0 -4
- package/node_modules/gopd/index.d.ts +0 -5
- package/node_modules/gopd/index.js +0 -15
- package/node_modules/gopd/package.json +0 -77
- package/node_modules/gopd/test/index.js +0 -36
- package/node_modules/gopd/tsconfig.json +0 -9
- package/node_modules/has-property-descriptors/.eslintrc +0 -13
- package/node_modules/has-property-descriptors/.github/FUNDING.yml +0 -12
- package/node_modules/has-property-descriptors/.nycrc +0 -9
- package/node_modules/has-property-descriptors/CHANGELOG.md +0 -35
- package/node_modules/has-property-descriptors/LICENSE +0 -21
- package/node_modules/has-property-descriptors/README.md +0 -43
- package/node_modules/has-property-descriptors/index.js +0 -22
- package/node_modules/has-property-descriptors/package.json +0 -77
- package/node_modules/has-property-descriptors/test/index.js +0 -57
- package/node_modules/has-symbols/.eslintrc +0 -11
- package/node_modules/has-symbols/.github/FUNDING.yml +0 -12
- package/node_modules/has-symbols/.nycrc +0 -9
- package/node_modules/has-symbols/CHANGELOG.md +0 -91
- package/node_modules/has-symbols/LICENSE +0 -21
- package/node_modules/has-symbols/README.md +0 -46
- package/node_modules/has-symbols/index.d.ts +0 -3
- package/node_modules/has-symbols/index.js +0 -14
- package/node_modules/has-symbols/package.json +0 -111
- package/node_modules/has-symbols/shams.d.ts +0 -3
- package/node_modules/has-symbols/shams.js +0 -45
- package/node_modules/has-symbols/test/index.js +0 -22
- package/node_modules/has-symbols/test/shams/core-js.js +0 -29
- package/node_modules/has-symbols/test/shams/get-own-property-symbols.js +0 -29
- package/node_modules/has-symbols/test/tests.js +0 -58
- package/node_modules/has-symbols/tsconfig.json +0 -10
- package/node_modules/hasown/.eslintrc +0 -5
- package/node_modules/hasown/.github/FUNDING.yml +0 -12
- package/node_modules/hasown/.nycrc +0 -13
- package/node_modules/hasown/CHANGELOG.md +0 -40
- package/node_modules/hasown/LICENSE +0 -21
- package/node_modules/hasown/README.md +0 -40
- package/node_modules/hasown/index.d.ts +0 -3
- package/node_modules/hasown/index.js +0 -8
- package/node_modules/hasown/package.json +0 -92
- package/node_modules/hasown/tsconfig.json +0 -6
- package/node_modules/isarray/LICENSE +0 -21
- package/node_modules/isarray/README.md +0 -38
- package/node_modules/isarray/index.js +0 -5
- package/node_modules/isarray/package.json +0 -48
- package/node_modules/json-stable-stringify/.eslintrc +0 -31
- package/node_modules/json-stable-stringify/.github/FUNDING.yml +0 -12
- package/node_modules/json-stable-stringify/CHANGELOG.md +0 -160
- package/node_modules/json-stable-stringify/LICENSE +0 -21
- package/node_modules/json-stable-stringify/README.md +0 -157
- package/node_modules/json-stable-stringify/example/key_cmp.js +0 -9
- package/node_modules/json-stable-stringify/example/nested.js +0 -7
- package/node_modules/json-stable-stringify/example/str.js +0 -7
- package/node_modules/json-stable-stringify/example/value_cmp.js +0 -12
- package/node_modules/json-stable-stringify/index.d.ts +0 -25
- package/node_modules/json-stable-stringify/index.js +0 -124
- package/node_modules/json-stable-stringify/package.json +0 -88
- package/node_modules/json-stable-stringify/test/cmp.js +0 -33
- package/node_modules/json-stable-stringify/test/nested.js +0 -48
- package/node_modules/json-stable-stringify/test/replacer.js +0 -81
- package/node_modules/json-stable-stringify/test/space.js +0 -127
- package/node_modules/json-stable-stringify/test/str.js +0 -46
- package/node_modules/json-stable-stringify/test/to-json.js +0 -22
- package/node_modules/json-stable-stringify/tsconfig.json +0 -10
- package/node_modules/jsonify/.eslintrc +0 -21
- package/node_modules/jsonify/.github/FUNDING.yml +0 -12
- package/node_modules/jsonify/CHANGELOG.md +0 -48
- package/node_modules/jsonify/README.md +0 -66
- package/node_modules/jsonify/index.js +0 -4
- package/node_modules/jsonify/lib/parse.js +0 -261
- package/node_modules/jsonify/lib/stringify.js +0 -151
- package/node_modules/jsonify/package.json +0 -62
- package/node_modules/jsonify/test/parse.js +0 -20
- package/node_modules/jsonify/test/stringify.js +0 -18
- package/node_modules/math-intrinsics/.eslintrc +0 -16
- package/node_modules/math-intrinsics/.github/FUNDING.yml +0 -12
- package/node_modules/math-intrinsics/CHANGELOG.md +0 -24
- package/node_modules/math-intrinsics/LICENSE +0 -21
- package/node_modules/math-intrinsics/README.md +0 -50
- package/node_modules/math-intrinsics/abs.d.ts +0 -1
- package/node_modules/math-intrinsics/abs.js +0 -4
- package/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +0 -3
- package/node_modules/math-intrinsics/constants/maxArrayLength.js +0 -4
- package/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +0 -3
- package/node_modules/math-intrinsics/constants/maxSafeInteger.js +0 -5
- package/node_modules/math-intrinsics/constants/maxValue.d.ts +0 -3
- package/node_modules/math-intrinsics/constants/maxValue.js +0 -5
- package/node_modules/math-intrinsics/floor.d.ts +0 -1
- package/node_modules/math-intrinsics/floor.js +0 -4
- package/node_modules/math-intrinsics/isFinite.d.ts +0 -3
- package/node_modules/math-intrinsics/isFinite.js +0 -12
- package/node_modules/math-intrinsics/isInteger.d.ts +0 -3
- package/node_modules/math-intrinsics/isInteger.js +0 -16
- package/node_modules/math-intrinsics/isNaN.d.ts +0 -1
- package/node_modules/math-intrinsics/isNaN.js +0 -6
- package/node_modules/math-intrinsics/isNegativeZero.d.ts +0 -3
- package/node_modules/math-intrinsics/isNegativeZero.js +0 -6
- package/node_modules/math-intrinsics/max.d.ts +0 -1
- package/node_modules/math-intrinsics/max.js +0 -4
- package/node_modules/math-intrinsics/min.d.ts +0 -1
- package/node_modules/math-intrinsics/min.js +0 -4
- package/node_modules/math-intrinsics/mod.d.ts +0 -3
- package/node_modules/math-intrinsics/mod.js +0 -9
- package/node_modules/math-intrinsics/package.json +0 -86
- package/node_modules/math-intrinsics/pow.d.ts +0 -1
- package/node_modules/math-intrinsics/pow.js +0 -4
- package/node_modules/math-intrinsics/round.d.ts +0 -1
- package/node_modules/math-intrinsics/round.js +0 -4
- package/node_modules/math-intrinsics/sign.d.ts +0 -3
- package/node_modules/math-intrinsics/sign.js +0 -11
- package/node_modules/math-intrinsics/test/index.js +0 -192
- package/node_modules/math-intrinsics/tsconfig.json +0 -3
- package/node_modules/object-keys/.editorconfig +0 -13
- package/node_modules/object-keys/.eslintrc +0 -17
- package/node_modules/object-keys/.travis.yml +0 -277
- package/node_modules/object-keys/CHANGELOG.md +0 -232
- package/node_modules/object-keys/LICENSE +0 -21
- package/node_modules/object-keys/README.md +0 -76
- package/node_modules/object-keys/implementation.js +0 -122
- package/node_modules/object-keys/index.js +0 -32
- package/node_modules/object-keys/isArguments.js +0 -17
- package/node_modules/object-keys/package.json +0 -88
- package/node_modules/object-keys/test/index.js +0 -5
- package/node_modules/set-function-length/.eslintrc +0 -27
- package/node_modules/set-function-length/.github/FUNDING.yml +0 -12
- package/node_modules/set-function-length/.nycrc +0 -13
- package/node_modules/set-function-length/CHANGELOG.md +0 -70
- package/node_modules/set-function-length/LICENSE +0 -21
- package/node_modules/set-function-length/README.md +0 -56
- package/node_modules/set-function-length/env.d.ts +0 -9
- package/node_modules/set-function-length/env.js +0 -25
- package/node_modules/set-function-length/index.d.ts +0 -7
- package/node_modules/set-function-length/index.js +0 -42
- package/node_modules/set-function-length/package.json +0 -102
- package/node_modules/set-function-length/tsconfig.json +0 -9
package/lib/errors.d.ts
CHANGED
|
@@ -61,8 +61,7 @@ export declare const cannotConcatenateStringsInTokenizedMap: (tokenizedMap: any)
|
|
|
61
61
|
export declare const doesNotImplementDependableTrait: (instance: IDependable) => Error;
|
|
62
62
|
export declare const canOnlyEncodePositiveIntegers: () => Error;
|
|
63
63
|
export declare const indexTooLargeToEncode: (index: number) => Error;
|
|
64
|
-
export declare const argToIntrinsicMustBePlainValue: (value: any, creationStack: string[]) => Error;
|
|
65
|
-
export declare const intrinsicNewError: (message: string, createdAt: string) => Error;
|
|
64
|
+
export declare const argToIntrinsicMustBePlainValue: (value: any, creationStack: string[] | undefined) => Error;
|
|
66
65
|
export declare const unableToResolveCircularReference: (pathName: string) => Error;
|
|
67
66
|
export declare const cannotResolveFunction: (pathName: string, obj: any) => Error;
|
|
68
67
|
export declare const encodedListTokenInScalarStringContext: () => Error;
|
package/lib/errors.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* SPDX-License-Identifier: MPL-2.0
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
8
|
-
exports.terraformModuleHasChildren = exports.assetCanNotCreateZipArchive = exports.IdIncludesUnresolvedTokens = exports.unrecognizedTokenKey = exports.unknownNumberTokenFound = exports.mapKeyMustResolveToString = exports.constructsCannotBeResolved = exports.encodedMapTokenInScalarNumberContext = exports.encodedMapTokenInScalarStringContext = exports.encodedListTokenInScalarStringContext = exports.cannotResolveFunction =
|
|
7
|
+
exports.unableToResolveCircularReference = exports.argToIntrinsicMustBePlainValue = exports.indexTooLargeToEncode = exports.canOnlyEncodePositiveIntegers = exports.doesNotImplementDependableTrait = exports.cannotConcatenateStringsInTokenizedMap = exports.mapValueAddedToReferenceList = exports.numberValueAddedToReferenceList = exports.cannotConcatenateStringsInTokenizedStringArray = exports.stringValueAddedToReferenceList = exports.cannotCalcIdForEmptySetOfComponents = exports.functionArgumentValidationFailure = exports.functionReceivedWrongNumberOfArgs = exports.listElementIsOfWrongType = exports.valueIsInvalidNumberOrToken = exports.valueIsInvalidStringOrToken = exports.encounteredAnnotationWithLevelError = exports.valueContainsUnescapedQuotes = exports.cloudBackendWorkspaceIsNotDefinedByName = exports.constructDependencyBelowV10 = exports.sourceOrTargetNotAnObject = exports.targetNotResolvableWithOverrides = exports.invalidStack = exports.expectNotGloballyAccessible = exports.jestNotInstantiated = exports.matchersFoundErrorsInStack = exports.matchersPathIsNotDirectory = exports.stackValidationFailure = exports.stackHasCircularDependency = exports.noStackForConstruct = exports.stackIdContainsWhitespace = exports.stackContainsDisallowedChar = exports.resourceGivenTwoMoveOperationsByTarget = exports.resourceGivenTwoMoveOperationsById = exports.resourceGivenTwoMoveOperationsByTargetAndId = exports.movedToResourceOfDifferentType = exports.moveTargetNotSet = exports.moveTargetAlreadySet = exports.modulesWithSameAlias = exports.iteratorOnResourceWithoutForEach = exports.iteratorOnResourceWithCount = exports.unresolvedTokenInConstructId = exports.dynamicBlockNotSupported = exports.assetTypeNotImplemented = exports.assetExpectsDirectory = exports.assetOutOfScopeOfCDKTFJson = exports.providerVersionMismatch = exports.appValidationFailure = exports.constructsOutsideOfStacks = exports.noAppFound = void 0;
|
|
8
|
+
exports.terraformModuleHasChildren = exports.assetCanNotCreateZipArchive = exports.IdIncludesUnresolvedTokens = exports.unrecognizedTokenKey = exports.unknownNumberTokenFound = exports.mapKeyMustResolveToString = exports.constructsCannotBeResolved = exports.encodedMapTokenInScalarNumberContext = exports.encodedMapTokenInScalarStringContext = exports.encodedListTokenInScalarStringContext = exports.cannotResolveFunction = void 0;
|
|
9
9
|
const noAppFound = (constructPath) => new Error(`No app could be identified for the construct at path '${constructPath}' (likely a TerraformStack).
|
|
10
10
|
The scope of CDKTN's TerraformStack class is a single App instance created by 'const app = new App()'. The App is your project's root, holding project configuration and validations.
|
|
11
11
|
Learn more about the App: https://cdktn.io/docs/concepts/cdktn-architecture#app-class
|
|
@@ -211,7 +211,7 @@ Type of target: ${targetType}
|
|
|
211
211
|
exports.sourceOrTargetNotAnObject = sourceOrTargetNotAnObject;
|
|
212
212
|
const constructDependencyBelowV10 = () => new Error(`Version mismatch! CDKTN version 0.6 requires your constructs version to be v10 or above.
|
|
213
213
|
|
|
214
|
-
Update your constructs dependency: https://
|
|
214
|
+
Update your constructs dependency: https://cdktn.io/docs/release/upgrade-guide-v0-6
|
|
215
215
|
`);
|
|
216
216
|
exports.constructDependencyBelowV10 = constructDependencyBelowV10;
|
|
217
217
|
const cloudBackendWorkspaceIsNotDefinedByName = () => new Error(`The Cloud backend only supports cross-stack references if the workspace is defined by name (not by tags).
|
|
@@ -300,10 +300,13 @@ const indexTooLargeToEncode = (index) => new Error(`Received an index too large
|
|
|
300
300
|
|
|
301
301
|
If you reach the maximum number of allowed Tokens (a limitation imposed by the way we encode Tokens and separate them from real numeric values) you can work around this issue by dividing a single application into multiple applications.`);
|
|
302
302
|
exports.indexTooLargeToEncode = indexTooLargeToEncode;
|
|
303
|
-
const argToIntrinsicMustBePlainValue = (value, creationStack) =>
|
|
303
|
+
const argToIntrinsicMustBePlainValue = (value, creationStack) => {
|
|
304
|
+
const createdAt = creationStack?.length
|
|
305
|
+
? ` created at:\n${creationStack.join("\n")}`
|
|
306
|
+
: "";
|
|
307
|
+
return new Error(`You can only use a plain value (not a function) while creating an Intrinsic token. We received the value '${value}'${createdAt}. If you want to use a function, please use the Lazy class. For example: Lazy.anyValue({ produce: () => "Hello World" }).`);
|
|
308
|
+
};
|
|
304
309
|
exports.argToIntrinsicMustBePlainValue = argToIntrinsicMustBePlainValue;
|
|
305
|
-
const intrinsicNewError = (message, createdAt) => new Error(`${message}\nToken created:\n at ${createdAt}\nError thrown:`);
|
|
306
|
-
exports.intrinsicNewError = intrinsicNewError;
|
|
307
310
|
const unableToResolveCircularReference = (pathName) => new Error(`Unable to resolve object tree with circular reference at '${pathName}'.
|
|
308
311
|
|
|
309
312
|
The depth of your object tree is over 200, indicating you probably have a cyclical reference. Inspect the construct creating this cyclic reference (most likely in '${pathName}') and ensure it does not infinitely nest constructs.`);
|
|
@@ -366,7 +369,7 @@ exports.IdIncludesUnresolvedTokens = IdIncludesUnresolvedTokens;
|
|
|
366
369
|
const assetCanNotCreateZipArchive = (src, dest, error) => new Error(`A TerraformAsset trying to zip archive '${src}' into ${dest} failed: ${error}`);
|
|
367
370
|
exports.assetCanNotCreateZipArchive = assetCanNotCreateZipArchive;
|
|
368
371
|
const terraformModuleHasChildren = (pathName) => {
|
|
369
|
-
return new Error(`Trying to add children to a TerraformModule at '${pathName}'. TerraformModules cannot have children, if you want to group resources or constructs in general together please use the Constructs class instead. See https://
|
|
372
|
+
return new Error(`Trying to add children to a TerraformModule at '${pathName}'. TerraformModules cannot have children, if you want to group resources or constructs in general together please use the Constructs class instead. See https://cdktn.io/docs/concepts/constructs for more details.`);
|
|
370
373
|
};
|
|
371
374
|
exports.terraformModuleHasChildren = terraformModuleHasChildren;
|
|
372
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7O0FBS0ksTUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFxQixFQUFFLEVBQUUsQ0FDbEQsSUFBSSxLQUFLLENBQ1AseURBQXlELGFBQWE7OztLQUdyRSxDQUNGLENBQUM7QUFOUyxRQUFBLFVBQVUsY0FNbkI7QUFFRyxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUU7SUFDM0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxPQUFPLElBQUksS0FBSyxDQUNkLG1HQUFtRyxVQUFVO0NBQ2hILENBQ0UsQ0FBQztBQUNKLENBQUMsQ0FBQztBQU5XLFFBQUEseUJBQXlCLDZCQU1wQztBQUVLLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FDeEQsSUFBSSxLQUFLLENBQ1AsNkRBQTZELFNBQVM7OztLQUdyRSxDQUNGLENBQUM7QUFOUyxRQUFBLG9CQUFvQix3QkFNN0I7QUFFRyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsRUFBRSxDQUMxQyxJQUFJLEtBQUssQ0FDUDs7S0FFQyxDQUNGLENBQUM7QUFMUyxRQUFBLHVCQUF1QiwyQkFLaEM7QUFFRyxNQUFNLDBCQUEwQixHQUFHLENBQUMsRUFBVSxFQUFFLFVBQWtCLEVBQUUsRUFBRSxDQUMzRSxJQUFJLEtBQUssQ0FDUCxrQkFBa0IsRUFBRSxzQ0FBc0MsVUFBVSwrRUFBK0UsT0FBTyxDQUFDLEdBQUcsRUFBRTs7Ozs7O0NBTW5LLENBQ0UsQ0FBQztBQVRTLFFBQUEsMEJBQTBCLDhCQVNuQztBQUVHLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxFQUFVLEVBQUUs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QUUsQ0FBQyxDQUFDO0FBRDlELFFBQUEsb0JBQW9CLHdCQUMwQztBQUVwRSxNQUFNLDBCQUEwQixHQUFHLENBQUMsZ0JBQXdCLEVBQUUsRUFBRSxDQUNyRSxJQUFJLEtBQUssQ0FDUCw0RkFBNEYsZ0JBQWdCLG9PQUFvTyxDQUNqVixDQUFDO0FBSFMsUUFBQSwwQkFBMEIsOEJBR25DO0FBRUcsTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxHQUFXLEVBQ1gsSUFBWSxFQUNaLEtBQVksRUFDWixFQUFFLENBQ0YsSUFBSSxLQUFLLENBQ1AsMkNBQTJDLEdBQUcsVUFBVSxJQUFJLFlBQVksS0FBSyxFQUFFLENBQ2hGLENBQUM7QUFQUyxRQUFBLDJCQUEyQiwrQkFPcEM7QUFFRyxNQUFNLDBCQUEwQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO0lBQzdELE9BQU8sSUFBSSxLQUFLLENBQ2QsbURBQW1ELFFBQVEscU1BQXFNLENBQ2pRLENBQUM7QUFDSixDQUFDLENBQUM7QUFKVyxRQUFBLDBCQUEwQiw4QkFJckMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IElEZXBlbmRhYmxlIH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcIi4vdGVycmFmb3JtLXN0YWNrXCI7XG5cbmV4cG9ydCBjb25zdCBub0FwcEZvdW5kID0gKGNvbnN0cnVjdFBhdGg6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBObyBhcHAgY291bGQgYmUgaWRlbnRpZmllZCBmb3IgdGhlIGNvbnN0cnVjdCBhdCBwYXRoICcke2NvbnN0cnVjdFBhdGh9JyAobGlrZWx5IGEgVGVycmFmb3JtU3RhY2spLlxuVGhlIHNjb3BlIG9mIENES1ROJ3MgVGVycmFmb3JtU3RhY2sgY2xhc3MgaXMgYSBzaW5nbGUgQXBwIGluc3RhbmNlIGNyZWF0ZWQgYnkgJ2NvbnN0IGFwcCA9IG5ldyBBcHAoKScuIFRoZSBBcHAgaXMgeW91ciBwcm9qZWN0J3Mgcm9vdCwgaG9sZGluZyBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gYW5kIHZhbGlkYXRpb25zLlxuTGVhcm4gbW9yZSBhYm91dCB0aGUgQXBwOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvY2RrdG4tYXJjaGl0ZWN0dXJlI2FwcC1jbGFzc1xuICAgIGAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RzT3V0c2lkZU9mU3RhY2tzID0gKHBhdGhzOiBzdHJpbmdbXSkgPT4ge1xuICBjb25zdCBidWxsZXRMaXN0ID0gcGF0aHMubWFwKChwKSA9PiBgICAtICR7cH1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gbmV3IEVycm9yKFxuICAgIGBGb3VuZCBjb25zdHJ1Y3RzIG91dHNpZGUgb2YgYSBUZXJyYWZvcm1TdGFjayAoZGlkIHlvdSBwYXNzIHNjb3BlPWFwcCBpbnN0ZWFkIG9mIHNjb3BlPXN0YWNrPyk6XFxuJHtidWxsZXRMaXN0fVxuYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhcHBWYWxpZGF0aW9uRmFpbHVyZSA9IChlcnJvckxpc3Q6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBBcHAtbGV2ZWwgdmFsaWRhdGlvbiBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGVycm9yczpcXG4gICR7ZXJyb3JMaXN0fVxuVmFsaWRhdGlvbnMgYWxsb3cgZm9yIGR5bmFtaWMgdmVyaWZpY2F0aW9uIG9mIHlvdXIgcHJvamVjdC5cblRvIHNraXAgdmFsaWRhdGlvbnMsIGFkZCAnc2tpcFZhbGlkYXRpb246IHRydWUnIHRvIHlvdXIgQXBwIGNvbmZpZy5cbiAgICBgLFxuICApO1xuXG5leHBvcnQgY29uc3QgcHJvdmlkZXJWZXJzaW9uTWlzbWF0Y2ggPSAoKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFZlcnNpb24gbWlzbWF0Y2ggZGV0ZWN0ZWQ6IFlvdXIgcHJvdmlkZXIgYmluZGluZ3MgYXJlIGJ1aWx0IGZvciBhbiBvbGRlciB2ZXJzaW9uIG9mIENES1RuLlxuVXBncmFkZSB5b3VyIHByZS1idWlsdCBwcm92aWRlciBvciByZS1ydW4gY2RrdG4gZ2V0IHdpdGggYSBtb3JlIHJlY2VudCB2ZXJzaW9uICg+PSAwLjEwKSBvZiB0aGUgY2RrdG4tY2xpLlxuICAgIGAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBhc3NldE91dE9mU2NvcGVPZkNES1RGSnNvbiA9IChpZDogc3RyaW5nLCBjb25maWdQYXRoOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgVGVycmFmb3JtQXNzZXQgJHtpZH0gd2FzIGNyZWF0ZWQgd2l0aCBhIHJlbGF0aXZlIHBhdGggJyR7Y29uZmlnUGF0aH0nLCBidXQgd2UgY2Fubm90IGZpbmQgdGhlIGNka3RmLmpzb24gd2l0aGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAnJHtwcm9jZXNzLmN3ZCgpfSdcblxuVGhlIGNka3RmLmpzb24gZmlsZSBpcyBuZWVkZWQgdG8gZXN0YWJsaXNoIHRoZSBiYXNlIGZvciB0aGUgcmVsYXRpdmUgcGF0aCAodGhlICcuJyBpbiAnLi9mb28vYmFyJykuXG5cblBsYWNlIGEgY2RrdGYuanNvbiBhdCB0aGUgcm9vdCBvZiB5b3VyIHByb2plY3QuIExlYXJuIG1vcmU6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jcmVhdGUtYW5kLWRlcGxveS9jb25maWd1cmF0aW9uLWZpbGVcbkxlYXJuIG1vcmUgYWJvdXQgVGVycmFmb3JtQXNzZXQ6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9hc3NldHNcbmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBhc3NldEV4cGVjdHNEaXJlY3RvcnkgPSAoaWQ6IHN0cmluZywgY29uZmlnUGF0aDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFRlcnJhZm9ybUFzc2V0ICR7aWR9IGV4cGVjdHMgcGF0aCB0byBwb2ludCB0byBhIGRpcmVjdG9yeS4gSW5zdGVhZCwgdGhpcyBmaWxlIHdhcyBwYXNzZWQ6ICcke2NvbmZpZ1BhdGh9Jy4gUGxlYXNlIGNvcnJlY3QgdGhlIHBhdGggdG8gcG9pbnQgdG8gYSBkaXJlY3RvcnkuXG5MZWFybiBtb3JlIGFib3V0IFRlcnJhZm9ybUFzc2V0OiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvYXNzZXRzXG4gICAgYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGFzc2V0VHlwZU5vdEltcGxlbWVudGVkID0gKCkgPT5cbiAgbmV3IEVycm9yKGBBc3NldCB0eXBlIGlzIG5vdCBpbXBsZW1lbnRlZC5cblBvc3NpYmxlIEFzc2V0IHR5cGVzIGluY2x1ZGU6IEZJTEUsIERJUkVDVE9SWSwgYW5kIEFSQ0hJVkUuXG5UYWtlIG9uZSBvZiB0aGVzZSB2YWx1ZXMgZnJvbSB0aGUgQXNzZXRUeXBlIEVudW0uXG5MZWFybiBtb3JlIGFib3V0IFRlcnJhZm9ybUFzc2V0OiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvYXNzZXRzXG4gIGApO1xuXG5leHBvcnQgY29uc3QgZHluYW1pY0Jsb2NrTm90U3VwcG9ydGVkID0gKF9mb3JlYWNoRXhwcmVzc2lvbjogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFdlIGRvIG5vdCBzdXBwb3J0IGRpcmVjdGx5IHJlc29sdmluZyBhIFRlcnJhZm9ybUR5bmFtaWNCbG9jay4gRHluYW1pYyBibG9ja3MgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIGJsb2NrIGF0dHJpYnV0ZXMgb2YgcmVzb3VyY2VzLCBkYXRhIHNvdXJjZXMsIGFuZCBwcm92aWRlcnMuXG5cbllvdSBjYW4gY3JlYXRlIGEgVGVycmFmb3JtRHluYW1pY0Jsb2NrIGJ5IGNhbGxpbmcgJy5keW5hbWljJyBvbiBhIFRlcnJhZm9ybUl0ZXJhdG9yIGluc3RhbmNlLlxuXG5UaGUgZm9sbG93aW5nIGV4cHJlc3Npb24gd2FzIHVzZWQgZm9yIHRoZSBkeW5hbWljIGJsb2NrOiAuZHluYW1pYyh7XG4gICR7X2ZvcmVhY2hFeHByZXNzaW9ufVxufSlcbmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCB1bnJlc29sdmVkVG9rZW5JbkNvbnN0cnVjdElkID0gKGlkOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgWW91IGNhbm5vdCB1c2UgYSB0b2tlbiAoZS5nLiwgYSByZWZlcmVuY2UgdG8gYW4gYXR0cmlidXRlKSBhcyB0aGUgaWQgb2YgYSBjb25zdHJ1Y3QuIElkcyBvZiBjb25zdHJ1Y3RzIG11c3QgYmUga25vd24gYXQgc3ludGhlc2lzIHRpbWUsIGFuZCB0b2tlbiB2YWx1ZXMgYXJlIG9ubHkga25vd24gd2hlbiBUZXJyYWZvcm0gcnVucy4gUGxlYXNlIHVzZSBhIGNvbmNyZXRlIHZhbHVlIGZvciB5b3VyIGNvbnN0cnVjdHMgSUQgaW5zdGVhZC5cbllvdSBwYXNzZWQgdGhlIGZvbGxvd2luZyBpZDogXCIke2lkfVwiXG5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgaXRlcmF0b3JPblJlc291cmNlV2l0aENvdW50ID0gKCkgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBZb3UgY2Fubm90IGNyZWF0ZSBhbiBpdGVyYXRvciBmcm9tIGEgcmVzb3VyY2Ugd2l0aCBhIGNvdW50IGFyZ3VtZW50LlxuSW5zdGVhZCwgcmV1c2UgdGhpcyByZXNvdXJjZSdzIFRlcnJhZm9ybUNvdW50IGluc3RhbmNlIGluIHRoZSByZXNvdXJjZSB5b3Ugd2FudCB0byB1c2UgYXMgYW4gaXRlcmF0b3IuXG5cbklmIHlvdSB3YW50IHRvIHVzZSBhbiBpdGVyYXRvciB0byBwb3B1bGF0ZSBhIGxpc3QgYXR0cmlidXRlLCByZXBsYWNlIHRoZSBjb3VudCBvbiB0aGUgcmVzb3VyY2Ugd2l0aCBhbiBpdGVyYXRvciBwYXNzZWQgaW50byB0aGUgZm9yRWFjaCBhcmd1bWVudC5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgaXRlcmF0b3JPblJlc291cmNlV2l0aG91dEZvckVhY2ggPSAoKSA9PlxuICBuZXcgRXJyb3IoYENhbm5vdCBjcmVhdGUgYW4gaXRlcmF0b3IgZnJvbSBhIHJlc291cmNlIHdpdGhvdXQgYSBmb3JFYWNoIGFyZ3VtZW50LiBJZiB5b3Ugd2FudCB0byBjcmVhdGUgbW9yZSBpbnN0YW5jZXMgb2YgdGhpcyByZXNvdXJjZSwgcGFzcyBhbiBpdGVyYXRvciB0byB0aGUgZm9yRWFjaCBhcmd1bWVudCBvZiB0aGUgcmVzb3VyY2UgZmlyc3QuXG4gIGApO1xuXG5leHBvcnQgY29uc3QgbW9kdWxlc1dpdGhTYW1lQWxpYXMgPSAoYWxpYXM6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBNdWx0aXBsZSBwcm92aWRlcnMgaGF2ZSB0aGUgc2FtZSBhbGlhczogXCIke2FsaWFzfVwiXG5FYWNoIHByb3ZpZGVyIG11c3QgaGF2ZSBhIHVuaXF1ZSBhbGlhcyB3aGVuIHBhc3NpbmcgbXVsdGlwbGUgcHJvdmlkZXJzIG9mIHRoZSBzYW1lIHR5cGUgdG8gbW9kdWxlcy5cbiAgYCk7XG5cbmV4cG9ydCBjb25zdCBtb3ZlVGFyZ2V0QWxyZWFkeVNldCA9IChcbiAgdGFyZ2V0OiBzdHJpbmcsXG4gIGZyaWVuZGx5VW5pcXVlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbikgPT5cbiAgbmV3IEVycm9yKGBUYXJnZXQgXCIke3RhcmdldH1cIiBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgZm9yIHRoZSBjb25zdHJ1Y3QgJHtmcmllbmRseVVuaXF1ZUlkfS5cblRhcmdldCBtdXN0IGJlIGEgc3RyaW5nIHRoYXQgaXMgdW5pcXVlIGFjcm9zcyBhbGwgcmVzb3VyY2VzIGluIHRoZSBzYW1lIHN0YWNrLmApO1xuXG5leHBvcnQgY29uc3QgbW92ZVRhcmdldE5vdFNldCA9ICh0YXJnZXQ6IHN0cmluZywgZW50cmllczogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYFRhcmdldCBcIiR7dGFyZ2V0fVwiIGhhcyBub3QgYmVlbiBzZXQuXG5Zb3UgdHJpZWQgdG8gbW92ZSBhIHJlc291cmNlIHdpdGhvdXQgYSB0YXJnZXQuXG5DYWxsIC5hZGRNb3ZlVGFyZ2V0KFwiJHt0YXJnZXR9XCIpIG9uIHRoZSBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgeW91IHdhbnQgdG8gbW92ZSB0aGlzIHJlc291cmNlIHRvLlxuXG5BbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0YXJnZXRzIChpbiBjYXNlIHlvdSBoYWQgYSB0eXBvKTpcbiR7ZW50cmllc31cbmApO1xuXG5leHBvcnQgY29uc3QgbW92ZWRUb1Jlc291cmNlT2ZEaWZmZXJlbnRUeXBlID0gKFxuICBtb3ZlVGFyZ2V0OiBzdHJpbmcsXG4gIG9yaWdpbmFsUmVzb3VyY2VUeXBlOiBzdHJpbmcsXG4gIGRlc3RpbmF0aW9uUmVzb3VyY2VUeXBlOiBzdHJpbmcsXG4pID0+XG4gIG5ldyBFcnJvcihgV2UgZG8gbm90IHN1cHBvcnQgbW92aW5nIHJlc291cmNlcyB0byBhIGRpZmZlcmVudCB0eXBlLlxuXG5UaGUgZGVzdGluYXRpb24gXCIke21vdmVUYXJnZXR9XCIncyByZXNvdXJjZSB0eXBlICR7ZGVzdGluYXRpb25SZXNvdXJjZVR5cGV9IGRpZmZlcnMgZnJvbSB0aGUgb3JpZ2luYWwgcmVzb3VyY2UgdHlwZSAoJHtvcmlnaW5hbFJlc291cmNlVHlwZX0pIHlvdSBhcmUgdHJ5aW5nIHRvIG1vdmUuXG5cbklmIHRoaXMgd2FzIGludGVudGlvbmFsLCB0cnkgaW1wb3J0aW5nIHRoZSBleGlzdGluZyByZXNvdXJjZSBpbnRvIHlvdXIgdGFyZ2V0IGluc3RlYWQuIExlYXJuIG1vcmU6XG5odHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvcmVzb3VyY2VzI2ltcG9ydGluZy1yZXNvdXJjZXNcblxuTm90ZSB0aGF0IHlvdSBtdXN0IG1hbnVhbGx5IHJlbW92ZSB0aGUgb3JpZ2luYWwgcmVzb3VyY2UgZnJvbSB5b3VyIHN0YXRlIGZpbGUgYWZ0ZXIgaW1wb3J0aW5nIGl0LiBVc2UgdGhlIFwidGVycmFmb3JtIHN0YXRlIHJtXCIgY29tbWFuZCBpbiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBvZiB0aGUgc3RhY2sgeW91IGRlZmluZWQgdGhpcyByZXNvdXJjZSBpbi4gTGVhcm4gbW9yZTpcbmh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2NsaS9jb21tYW5kcy9zdGF0ZS9ybVxuYCk7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZUdpdmVuVHdvTW92ZU9wZXJhdGlvbnNCeVRhcmdldEFuZElkID0gKFxuICBpZDogc3RyaW5nLFxuICBleGlzdGluZ1RhcmdldDogc3RyaW5nLFxuICBuZXdNb3ZlOiB7IHRvOiBzdHJpbmc7IGZyb206IHN0cmluZyB9LFxuKSA9PlxuICBuZXcgRXJyb3IoYFxuVGhlIHJlc291cmNlICR7aWR9IGhhcyBiZWVuIGdpdmVuIHR3byBkaWZmZXJlbnQgbW92ZSBvcGVyYXRpb25zLlxuXG5Nb3ZlIHRhcmdldDogXCIke2V4aXN0aW5nVGFyZ2V0fVwiXG5Nb3ZlIGJ5IGlkOiB7XG4gIGZyb206ICR7bmV3TW92ZS5mcm9tfVxuICB0bzogJHtuZXdNb3ZlLnRvfVxufVxuXG5Pbmx5IG9uZSBtb3ZlIG9wZXJhdGlvbiBjYW4gb2NjdXIgcGVyIHBsYW4vYXBwbHkuIFJlbW92ZSBvbmUgb2YgdGhlIG9wZXJhdGlvbnMuXG5cbkxlYXJuIG1vcmUgYWJvdXQgbW92aW5nIHJlc291cmNlczogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2V4YW1wbGVzLWFuZC1ndWlkZXMvcmVmYWN0b3JpbmcjOn46dGV4dD1Nb3ZpbmclMjAlMjYlMjBSZW5hbWluZyUyMFJlc291cmNlcyUyMFdpdGhpbiUyMGElMjBTdGFja1xuYCk7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZUdpdmVuVHdvTW92ZU9wZXJhdGlvbnNCeUlkID0gKFxuICBpZDogc3RyaW5nLFxuICBleGlzdGluZ01vdmU6IHsgdG86IHN0cmluZzsgZnJvbTogc3RyaW5nIH0sXG4gIG5ld01vdmU6IHsgdG86IHN0cmluZzsgZnJvbTogc3RyaW5nIH0sXG4pID0+XG4gIG5ldyBFcnJvcihgXG5UaGUgcmVzb3VyY2UgJHtpZH0gaGFzIGJlZW4gZ2l2ZW4gdHdvIGRpZmZlcmVudCBtb3ZlIG9wZXJhdGlvbnMuXG5cbntcbiAgZnJvbTogJHtleGlzdGluZ01vdmUuZnJvbX1cbiAgdG86ICR7ZXhpc3RpbmdNb3ZlLnRvfVxufVxue1xuICBmcm9tOiAke25ld01vdmUuZnJvbX1cbiAgdG86ICR7bmV3TW92ZS50b30gKFJlc291cmNlIGNhbGxpbmcgdGhlIG1vdmUgdG8gb3BlcmF0aW9uKVxufVxuXG5Pbmx5IG9uZSBtb3ZlIG9wZXJhdGlvbiBjYW4gb2NjdXIgcGVyIHBsYW4vYXBwbHkuIFJlbW92ZSBvbmUgb2YgdGhlIG9wZXJhdGlvbnMuXG5cbkxlYXJuIG1vcmUgYWJvdXQgbW92aW5nIHJlc291cmNlczogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2V4YW1wbGVzLWFuZC1ndWlkZXMvcmVmYWN0b3JpbmcjOn46dGV4dD1Nb3ZpbmclMjAlMjYlMjBSZW5hbWluZyUyMFJlc291cmNlcyUyMFdpdGhpbiUyMGElMjBTdGFja1xuYCk7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZUdpdmVuVHdvTW92ZU9wZXJhdGlvbnNCeVRhcmdldCA9IChcbiAgcmVzb3VyY2VJZDogc3RyaW5nLFxuICBleGlzdGluZ01vdmVUYXJnZXQ6IHN0cmluZyxcbiAgbmV3TW92ZVRhcmdldDogc3RyaW5nLFxuKSA9PlxuICBuZXcgRXJyb3IoYFRoZSByZXNvdXJjZSAke3Jlc291cmNlSWR9IGhhcyBiZWVuIGdpdmVuIHR3byBkaWZmZXJlbnQgbW92ZVRhcmdldHM6IFwiJHtuZXdNb3ZlVGFyZ2V0fVwiIGFuZCBcIiR7ZXhpc3RpbmdNb3ZlVGFyZ2V0fVwiXG5cbkEgcmVzb3VyY2UgY2FuIG9ubHkgYmUgbW92ZWQgb25jZSBwZXIgcGxhbi9hcHBseS5cblxuTGVhcm4gbW9yZSBhYm91dCBtb3ZpbmcgcmVzb3VyY2VzOiBodHRwczovL2Nka3RuLmlvL2RvY3MvZXhhbXBsZXMtYW5kLWd1aWRlcy9yZWZhY3RvcmluZyM6fjp0ZXh0PU1vdmluZyUyMCUyNiUyMFJlbmFtaW5nJTIwUmVzb3VyY2VzJTIwV2l0aGluJTIwYSUyMFN0YWNrXG5gKTtcblxuZXhwb3J0IGNvbnN0IHN0YWNrQ29udGFpbnNEaXNhbGxvd2VkQ2hhciA9IChcbiAgc3RhY2tJZDogc3RyaW5nLFxuICBpbnZhbGlkQ2hhcjogc3RyaW5nLFxuKSA9PlxuICBuZXcgRXJyb3IoYENhbm5vdCBjcmVhdGUgVGVycmFmb3JtIHN0YWNrIHdpdGggaWQgXCIke3N0YWNrSWR9XCIuIEl0IGNvbnRhaW5zIGFuIGludmFsaWQgZ2xvYiBjaGFyYWN0ZXI6IFwiJHtpbnZhbGlkQ2hhcn1cIi5cblxuR2xvYiBjaGFyYWN0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHN0YWNrIG5hbWVzIGJlY2F1c2Ugd2UgdXNlIHRoZW0gdG8gZGVwbG95IGFuZCBkZXN0cm95IG11bHRpcGxlIHN0YWNrcy4gRm9yIGV4YW1wbGUsICdjZGt0biBkZXBsb3kgXFxgKi1wcm9kdWN0aW9uXFxgJyBkZXBsb3lzIGFsbCBzdGFja3Mgd2l0aCBuYW1lcyB0aGF0IGVuZCBpbiAnLXByb2R1Y3Rpb24nLlxuYCk7XG5cbmV4cG9ydCBjb25zdCBzdGFja0lkQ29udGFpbnNXaGl0ZXNwYWNlID0gKHN0YWNrSWQ6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBDYW5ub3QgY3JlYXRlIFRlcnJhZm9ybVN0YWNrIHdpdGggaWQgXCIke3N0YWNrSWR9XCIuIEl0IGNvbnRhaW5zIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG5cblBsZWFzZSByZW1vdmUgYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiB5b3VyIFRlcnJhZm9ybVN0YWNrIGlkLCBsaWtlIHNvOiBcIiR7c3RhY2tJZC5yZXBsYWNlKFxuICAgIC9cXHMvZyxcbiAgICBcIlwiLFxuICApfVwiXG5gKTtcblxuZXhwb3J0IGNvbnN0IG5vU3RhY2tGb3JDb25zdHJ1Y3QgPSAoY29uc3RydWN0UGF0aDogc3RyaW5nLCBoaW50OiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgTm8gc3RhY2sgY291bGQgYmUgaWRlbnRpZmllZCBmb3IgdGhlIGNvbnN0cnVjdCBhdCBwYXRoICcke2NvbnN0cnVjdFBhdGh9JyR7aGludH1cblxuWW91IGNhbiBvbmx5IHVzZSBjb25zdHJ1Y3RzIGFzIHBhcnQgb2YgYSBUZXJyYWZvcm1TdGFjay5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCBDb25zdHJ1Y3RzIHZzLiBUZXJyYWZvcm1TdGFja3MsIHJlZmVyIHRvOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvY29uc3RydWN0cyM6fjp0ZXh0PUNvbnN0cnVjdHMlMjB2cy4lMjBTdGFja3NcbmApO1xuXG5leHBvcnQgY29uc3Qgc3RhY2tIYXNDaXJjdWxhckRlcGVuZGVuY3kgPSAoXG4gIHRoaXNTdGFjazogVGVycmFmb3JtU3RhY2ssXG4gIGRlcGVuZGVuY3k6IFRlcnJhZm9ybVN0YWNrLFxuKSA9PlxuICBuZXcgRXJyb3IoYENhbm5vdCBhZGQgZGVwZW5kZW5jeSAke2RlcGVuZGVuY3l9IHRvICR7dGhpc1N0YWNrfSwgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG5cblRlcnJhZm9ybVN0YWNrICR7ZGVwZW5kZW5jeX0gaXMgYWxyZWFkeSBkZXBlbmRlbnQgb24gJHt0aGlzU3RhY2t9IGRpcmVjdGx5LCBvciBkZXBlbmRlbnQgb24gYSBUZXJyYWZvcm1TdGFjayB3aXRoaW4gJHt0aGlzU3RhY2t9LlxuXG5UbyBsZWFybiBtb3JlIGFib3V0IGNpcmN1bGFyIGRlcGVuZGVuY3kgcmVmZXJlbmNlcywgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9zdGFja3MjOn46dGV4dD1Dcm9zcyUyRFN0YWNrJTIwUmVmZXJlbmNlc1xuYCk7XG5cbmV4cG9ydCBjb25zdCBzdGFja1ZhbGlkYXRpb25GYWlsdXJlID0gKGVycm9yTGlzdDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYFZhbGlkYXRpb24gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBlcnJvcnM6XFxuICAke2Vycm9yTGlzdH1cblxuSWYgeW91IHdpc2ggdG8gaWdub3JlIHRoZXNlIHZhbGlkYXRpb25zLCBwYXNzICdza2lwVmFsaWRhdGlvbjogdHJ1ZScgdG8geW91ciBBcHAgY29uZmlndXJhdGlvbi5cbmApO1xuXG5leHBvcnQgY29uc3QgbWF0Y2hlcnNQYXRoSXNOb3REaXJlY3RvcnkgPSAoZnVuY3Rpb25OYW1lOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgUGF0aCBpcyBub3QgYSBkaXJlY3RvcnkuXG5cbkVuc3VyZSB5b3UgYXJlIHBhc3NpbmcgdGhlIHJlc3VsdCBvZiBUZXN0aW5nLmZ1bGxTeW50aCgnc3RhY2sgaW5zdGFuY2UnKSB0byAnJHtmdW5jdGlvbk5hbWV9Jywgbm90IFRlc3Rpbmcuc3ludGgoJ3N0YWNrIGluc3RhbmNlJykuXG5cblRlc3RpbmcuZnVsbFN5bnRoIHJldHVybnMgYSBmaWxlIHBhdGggdG8gYSB0ZW1wb3JhcnkgdGVzdGluZyBlbnZpcm9ubWVudC4gVGVzdGluZy5zeW50aCByZXR1cm5zIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHlvdXIgc3RhY2suXG5cblRvIGxlYXJuIG1vcmUgYWJvdXQgdGVzdGluZyBpbiBDREtUTiwgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy90ZXN0L3VuaXQtdGVzdHNgKTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoZXJzRm91bmRFcnJvcnNJblN0YWNrID0gKFxuICBlcnJvckNvdW50OiBhbnksXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuICBkaWFnbm9zdGljczogc3RyaW5nLFxuKSA9PlxuICBuZXcgRXJyb3IoYEZvdW5kICR7ZXJyb3JDb3VudH0gRXJyb3JzIGluIHN0YWNrICR7c3RhY2tOYW1lfTogJHtkaWFnbm9zdGljc31cblxuVGhlc2UgZXJyb3JzIGFyZSBub3QgdGVzdCBmYWlsdXJlcywgYnV0IGlzc3VlcyB3aXRoIHRoZSB1bmRlcmx5aW5nIFRlcnJhZm9ybVN0YWNrIGJlaW5nIHRlc3RlZC4gRml4IHRoZSBhYm92ZSBpc3N1ZXMgYmVmb3JlIHJ1bm5pbmcgeW91ciB0ZXN0cyBhZ2Fpbi5cbmApO1xuXG5leHBvcnQgY29uc3QgamVzdE5vdEluc3RhbnRpYXRlZCA9ICgpID0+XG4gIG5ldyBFcnJvcihgSmVzdCB3YXMgbm90IHByb3Blcmx5IGluc3RhbnRpYXRlZC5cblxuRW5zdXJlIHlvdSBoYXZlIGEgJ3NldHVwLmpzJyBmaWxlIGluIHlvdXIgcHJvamVjdCdzIGRpcmVjdG9yeSB0aGF0IGNhbGxzICdjZGt0bi5UZXN0aW5nLnNldHVwSmVzdCgpJy5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCBzZXR0aW5nIHVwIHRlc3RpbmcsIHJlZmVyIHRvOiBodHRwczovL2Nka3RuLmlvL2RvY3MvdGVzdC91bml0LXRlc3RzIzp+OnRleHQ9QWRkJTIwVGVzdGluZyUyMHRvJTIwWW91ciUyMEFwcGxpY2F0aW9uXG5gKTtcblxuZXhwb3J0IGNvbnN0IGV4cGVjdE5vdEdsb2JhbGx5QWNjZXNzaWJsZSA9ICgpID0+XG4gIG5ldyBFcnJvcihgVGhlIGV4cGVjdCBmdW5jdGlvbiBpcyBub3QgZ2xvYmFsbHkgYWNjZXNzaWJsZS5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCBzZXR0aW5nIHVwIHRlc3RpbmcsIHJlZmVyIHRvOiBodHRwczovL2Nka3RuLmlvL2RvY3MvdGVzdC91bml0LXRlc3RzIzp+OnRleHQ9QWRkJTIwVGVzdGluZyUyMHRvJTIwWW91ciUyMEFwcGxpY2F0aW9uXG5gKTtcblxuZXhwb3J0IGNvbnN0IGludmFsaWRTdGFjayA9IChmdW5jdGlvbk5hbWU6IHN0cmluZywgc3RhY2tDb250ZW50OiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgSW52YWxpZCBKU09OIHN0cmluZyBwYXNzZWQ6ICR7c3RhY2tDb250ZW50fVxuXG5cbkVuc3VyZSB5b3UgYXJlIHBhc3NpbmcgdGhlIHJlc3VsdCBvZiBUZXN0aW5nLnN5bnRoKCdzdGFjayBpbnN0YW5jZScpIHRvICcke2Z1bmN0aW9uTmFtZX0nLCBub3QgVGVzdGluZy5mdWxsU3ludGgoJ3N0YWNrIGluc3RhbmNlJykuXG5cblxuVGVzdGluZy5zeW50aCByZXR1cm5zIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHlvdXIgc3RhY2suIENES1ROIGNhbiB1c2UgYXNzZXJ0aW9ucyB3aXRoIHRoaXMgSlNPTiB0byBjaGVjayB0aGUgY29tcG9zaXRpb24gb2YgeW91ciBzdGFja3MsIGxpa2Ugc286IFwiVGVzdGluZy50b0hhdmVSZXNvdXJjZShUZXN0aW5nLnN5bnRoKCdUZXJyYWZvcm1TdGFjayBpbnN0YW5jZScpLCBTM0J1Y2tldClcIlxuXG5UZXN0aW5nLmZ1bGxTeW50aCByZXR1cm5zIGEgZmlsZSBwYXRoIHRvIGEgdGVtcG9yYXJ5IHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cblRvIGxlYXJuIG1vcmUgYWJvdXQgdGVzdGluZyBpbiBDREtUTiwgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy90ZXN0L3VuaXQtdGVzdHNcbmApO1xuXG5leHBvcnQgY29uc3QgdGFyZ2V0Tm90UmVzb2x2YWJsZVdpdGhPdmVycmlkZXMgPSAodGFyZ2V0OiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVGFyZ2V0ICgke3RhcmdldH0pIGNhbm5vdCBiZSBhIHJlc29sdmFibGUgdG9rZW4gaWYgeW91IHNwZWNpZmllZCBvdmVycmlkZXMuIFJlcGxhY2UgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB5b3UgYXJlIG92ZXJyaWRpbmcgd2l0aCBhIHN0YXRpYyB2YWx1ZS5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCBUb2tlbnMsIHJlZmVyIHRvOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvdG9rZW5zXG5gKTtcblxuZXhwb3J0IGNvbnN0IHNvdXJjZU9yVGFyZ2V0Tm90QW5PYmplY3QgPSAoXG4gIHNvdXJjZTogc3RyaW5nLFxuICBzb3VyY2VUeXBlOiBzdHJpbmcsXG4gIHRhcmdldDogc3RyaW5nLFxuICB0YXJnZXRUeXBlOiBzdHJpbmcsXG4pID0+XG4gIG5ldyBFcnJvcihgQW4gaXNzdWUgb2NjdXJyZWQgZHVyaW5nIHRoZSBzeW50aGVzaXphdGlvbiBvZiB5b3VyIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uLlxuXG5Cb3RoIHRoZSBzb3VyY2UgZWxlbWVudCAoJHtzb3VyY2V9KSBhbmQgaXRzIGNvbnRhaW5pbmcgdGFyZ2V0IGVsZW1lbnQgKCR7dGFyZ2V0fSkgbXVzdCBiZSBvYmplY3RzLlxuXG5UeXBlIG9mIHNvdXJjZTogJHtzb3VyY2VUeXBlfVxuVHlwZSBvZiB0YXJnZXQ6ICR7dGFyZ2V0VHlwZX1cbmApO1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0RGVwZW5kZW5jeUJlbG93VjEwID0gKCkgPT5cbiAgbmV3IEVycm9yKGBWZXJzaW9uIG1pc21hdGNoISBDREtUTiB2ZXJzaW9uIDAuNiByZXF1aXJlcyB5b3VyIGNvbnN0cnVjdHMgdmVyc2lvbiB0byBiZSB2MTAgb3IgYWJvdmUuXG5cblVwZGF0ZSB5b3VyIGNvbnN0cnVjdHMgZGVwZW5kZW5jeTogaHR0cHM6Ly9jZGsudGYvdXBncmFkZS1jb25zdHJ1Y3RzLXYxMFxuYCk7XG5cbmV4cG9ydCBjb25zdCBjbG91ZEJhY2tlbmRXb3Jrc3BhY2VJc05vdERlZmluZWRCeU5hbWUgPSAoKSA9PlxuICBuZXcgRXJyb3IoYFRoZSBDbG91ZCBiYWNrZW5kIG9ubHkgc3VwcG9ydHMgY3Jvc3Mtc3RhY2sgcmVmZXJlbmNlcyBpZiB0aGUgd29ya3NwYWNlIGlzIGRlZmluZWQgYnkgbmFtZSAobm90IGJ5IHRhZ3MpLlxuXG5UbyB1c2UgY3Jvc3Mtc3RhY2sgcmVmZXJlbmNlcywgcmVwbGFjZSBhbGwgbWVudGlvbnMgb2YgJ1RhZ2dlZENsb3VkV29ya3NwYWNlcycgd2l0aCAnTmFtZWRDbG91ZFdvcmtzcGFjZScsIGxpa2Ugc286XG5cbm5ldyBDbG91ZEJhY2tlbmQoc3RhY2ssIHtcbiAgLi4uXG4gIHdvcmtzcGFjZXM6IG5ldyBOYW1lZENsb3VkV29ya3NwYWNlKFwibXktYXBwXCIpLFxufSk7XG5cblRvIGxlYXJuIG1vcmUgYWJvdXQgUmVtb3RlIEJhY2tlbmRzLCByZWZlciB0bzogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL3JlbW90ZS1iYWNrZW5kc1xuYCk7XG5cbmV4cG9ydCBjb25zdCB2YWx1ZUNvbnRhaW5zVW5lc2NhcGVkUXVvdGVzID0gKHZhbHVlOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgWW91ciB2YWx1ZSwgJyR7dmFsdWV9JywgaGFzIHVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGluIGl0LCBzbyBpdCBjYW5ub3QgYmUgdXNlZCBhcyBhIHZhbHVlLlxuXG5UbyBzYWZlbHkgdXNlIHRoZSB2YWx1ZSwgdXNlIEZuLnJhd1N0cmluZyBvbiB5b3VyIHN0cmluZywgbGlrZSBzbzpcblxuRm4ucmF3U3RyaW5nKCcke3ZhbHVlfScpXG5cbkRvaW5nIHRoaXMgZW5zdXJlcyBDREtUTiBhbmQgVGVycmFmb3JtIGludGVycHJldCB5b3VyIHZhbHVlcyBjb3JyZWN0bHkuXG5cblRvIGxlYXJuIG1vcmUgYWJvdXQgYnVpbHQgaW4gVGVycmFmb3JtIGZ1bmN0aW9ucyB3aXRoaW4gQ0RLVE4sIHJlZmVyIHRvOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvZnVuY3Rpb25zXG5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgZW5jb3VudGVyZWRBbm5vdGF0aW9uV2l0aExldmVsRXJyb3IgPSAoZXJyb3JzOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgRW5jb3VudGVyZWQgQW5ub3RhdGlvbnMgd2l0aCBsZXZlbCBcIkVSUk9SXCI6XFxuJHtlcnJvcnN9XG5cbkVpdGhlciBmaXggdGhlIGlzc3VlcyBhYm92ZSwgb3Igc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDREtURl9DT05USU5VRV9TWU5USF9PTl9FUlJPUl9BTk5PVEFUSU9OUyB0byBpZ25vcmUgdGhlc2UgYW5ub3RhdGlvbnMuXG5gKTtcblxuZXhwb3J0IGNvbnN0IHZhbHVlSXNJbnZhbGlkU3RyaW5nT3JUb2tlbiA9ICh2YWx1ZTogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYCcke3ZhbHVlfScgaXMgbm90IGEgdmFsaWQgc3RyaW5nIG5vciBhIHRva2VuLiBUaGlzIGZ1bmN0aW9uIG9ubHkgYWNjZXB0cyBzdHJpbmdzIG9yIHRva2VucyByZXNvbHZpbmcgdG8gc3RyaW5ncy4gUGxlYXNlIGNoYW5nZSB5b3VyIGNvZGUgYWNjb3JkaW5nbHkuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IHZhbHVlSXNJbnZhbGlkTnVtYmVyT3JUb2tlbiA9ICh2YWx1ZTogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYCR7dmFsdWV9IGlzIG5vdCBhIHZhbGlkIG51bWJlciBub3IgYSB0b2tlbi4gVGhpcyBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgbnVtYmVycyBvciB0b2tlbnMgcmVzb2x2aW5nIHRvIG51bWJlcnMuIFBsZWFzZSBjaGFuZ2UgeW91ciBjb2RlIGFjY29yZGluZ2x5LmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBsaXN0RWxlbWVudElzT2ZXcm9uZ1R5cGUgPSAoXG4gIHZhbHVlOiBhbnlbXSxcbiAgcG9zaXRpb246IG51bWJlcixcbiAgZXJyb3I6IHVua25vd24sXG4pID0+XG4gIG5ldyBFcnJvcihcbiAgICBgRWxlbWVudCBpbiBsaXN0ICR7dmFsdWV9IGF0IHBvc2l0aW9uICR7cG9zaXRpb259IGlzIG5vdCB0aGUgcmlnaHQgdHlwZTogJHtlcnJvcn0uXG4gICAgUGxlYXNlIGVuc3VyZSBhbGwgZWxlbWVudHMgaW4gdGhlIGxpc3QgYXJlIHRoZSBjb3JyZWN0IHR5cGUgZm9yIHRoaXMgZnVuY3Rpb24uYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uUmVjZWl2ZWRXcm9uZ051bWJlck9mQXJncyA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBhcmdWYWxpZGF0b3JzTGVuZ3RoOiBudW1iZXIsXG4gIGFyZ3NMZW5ndGg6IG51bWJlcixcbikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBGdW5jdGlvbiAke25hbWV9IHRha2VzICR7YXJnVmFsaWRhdG9yc0xlbmd0aH0gYXJndW1lbnRzLCBidXQgJHthcmdzTGVuZ3RofSB3ZXJlIHByb3ZpZGVkLiBQbGVhc2UgYWRkIHRoZSBtaXNzaW5nIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24uYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uQXJndW1lbnRWYWxpZGF0aW9uRmFpbHVyZSA9IChcbiAgYXJnTnVtYmVyOiBudW1iZXIsXG4gIG5hbWU6IHN0cmluZyxcbiAgZXJyb3I6IHVua25vd24sXG4pID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQXJndW1lbnQgJHthcmdOdW1iZXJ9IG9mICR7bmFtZX0gZmFpbGVkIHRoZSB2YWxpZGF0aW9uOiAke2Vycm9yfS4gUGxlYXNlIGNoYW5nZSB5b3VyIGNvZGUgdG8gcGFzcyBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIGFyZ3VtZW50LmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBjYW5ub3RDYWxjSWRGb3JFbXB0eVNldE9mQ29tcG9uZW50cyA9ICgpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgVW5hYmxlIHRvIGNhbGN1bGF0ZSBhIHVuaXF1ZSBpZCBmb3IgYW4gZW1wdHkgc2V0IG9mIGNvbXBvbmVudHMuXG5cbiAgICBUaGlzIGhhcHBlbnMgd2hlbiB5b3UgYXR0ZW1wdCB0byBjcmVhdGUgYSB1bmlxdWUgaWQsIGJ1dCBkbyBub3QgcGFzcyBpbiBhbnkgY29uc3RydWN0IG5vZGUgaWRzLiBUaGlzIG1lYW5zIHlvdXIgY29uc3RydWN0IGxpa2VseSBoYXMgbm8gcGFyZW50LCB3aGljaCBpcyBub3QgYWxsb3dlZC5cblxuICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91ciBjb25zdHJ1Y3QgaGFzIGEgcGFyZW50LiBGb3IgZXhhbXBsZTogJ25ldyBBcHAodGhpcyknIG9yICduZXcgVGVycmFmb3JtU3RhY2sodGhpcywgJ3N0YWNrJyknLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdWYWx1ZUFkZGVkVG9SZWZlcmVuY2VMaXN0ID0gKGxpc3RUb2tlbjogc3RyaW5nW10pID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQ2Fubm90IGFkZCBlbGVtZW50cyB0byBsaXN0IHRva2VuLCBnb3Q6ICR7bGlzdFRva2VufS5cblxuICAgIFdlIGV4cGVjdCB0aGUgZWxlbWVudHMgb2YgYSB0b2tlbml6ZWQgc3RyaW5nIGFycmF5IHRvIGJlIGEgc2luZ2xlIHRva2VuIHN0cmluZy4gRm9yIGV4YW1wbGUsIFtcIiZ7VGZUb2tlbltUb2tlbi4xXX1cIl0uXG5cbiAgICBPbmUgZWxlbWVudCBpbiB5b3VyIGFycmF5IGNvbnNpc3RzIG9mIG1vcmUgdGhhbiBhIHNpbmdsZSB2YWx1ZS4gVG8gYWRkIHZhbHVlcyB0byBhIHRva2VuaXplZCBsaXN0LCB1c2UgVGVycmFmb3JtIGZ1bmN0aW9ucyBpbnN0ZWFkLiBGb3IgZXhhbXBsZTogJ0ZuLmNvbmNhdChbeW91clJlZmVyZW5jZWRMaXN0LCBbXCJteVwiLCBcIm5ld1wiLCBcIml0ZW1zXCJdXSknLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBjYW5ub3RDb25jYXRlbmF0ZVN0cmluZ3NJblRva2VuaXplZFN0cmluZ0FycmF5ID0gKFxuICBsaXN0VG9rZW46IHN0cmluZyxcbikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBDYW5ub3QgY29uY2F0ZW5hdGUgc3RyaW5ncyBpbiBhIHRva2VuaXplZCBzdHJpbmcgYXJyYXksIGdvdDogJHtsaXN0VG9rZW59LlxuXG4gICAgV2UgZXhwZWN0IHRoZSBlbGVtZW50cyBvZiBhIHRva2VuaXplZCBzdHJpbmcgYXJyYXkgdG8gYmUgYSBzaW5nbGUgdG9rZW4gc3RyaW5nLiBGb3IgZXhhbXBsZSwgW1wiJntUZlRva2VuW1Rva2VuLjFdfVwiXS4gT25lIGVsZW1lbnQgaW4geW91ciBhcnJheSBjb25zaXN0cyBvZiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIHNpbmdsZSB0b2tlbi5cblxuICAgIFlvdSBhcmUgbGlrZWx5IG11dGF0aW5nIHRoZSB2YWx1ZSBpbnNpZGUgeW91ciBhcnJheSwgd2hpY2ggQ0RLVE4gY2Fubm90IHJlc29sdmUgaW50byB0aGUgYXBwcm9wcmlhdGUgcnVudGltZSB2YWx1ZS5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgbnVtYmVyVmFsdWVBZGRlZFRvUmVmZXJlbmNlTGlzdCA9IChsaXN0VG9rZW46IG51bWJlcltdKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYENhbm5vdCBhZGQgZWxlbWVudHMgdG8gbGlzdCB0b2tlbiwgZ290OiAke2xpc3RUb2tlbn0uXG5cbiAgICBXZSB1c2UgdG9rZW5zIHRvIHJlcHJlc2VudCBydW50aW1lIHZhbHVlcyAoZS5nLiwgcmVmZXJlbmNlcyB0byBhdHRyaWJ1dGVzIG9mIHJlc291cmNlIG9yIGRhdGEgc291cmNlcykuIExpc3QgdG9rZW5zIGRvbid0IGNvbnRhaW4gdGhlIGFjdHVhbCB2YWx1ZXMgYmVjYXVzZSB0aG9zZSBhcmUgb25seSBhdmFpbGFibGUgYXQgYXBwbHkgdGltZSwgd2hlcmVhcyB0b2tlbnMgYXJlIHByZXNlbnQgZHVyaW5nIGNvbXBpbGUgdGltZS5cblxuICAgIElmIHlvdSB3YW50IHRvIGFkZCBhIHZhbHVlIHRvIGEgdG9rZW5pemVkIGxpc3QsIHVzZSBhIFRlcnJhZm9ybSBmdW5jdGlvbiBpbnN0ZWFkLiBGb3IgZXhhbXBsZTogRm4uY29uY2F0KFt5b3VyUmVmZXJlbmNlZExpc3QsIFs0MiwgNDMsIDQ0XV0pLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBtYXBWYWx1ZUFkZGVkVG9SZWZlcmVuY2VMaXN0ID0gKG1hcFRva2VuOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQ2Fubm90IGFkZCBlbGVtZW50cyB0byBtYXAgdG9rZW4sIGdvdDogJHttYXBUb2tlbn0uIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgbWVyZ2UgbXVsdGlwbGUgbWFwcywgb3IgaWYgeW91IGFkZCBhIG5ldyBrZXkgdmFsdWUgcGFpciB0byB0aGUgbWFwIHRva2VuLlxuXG4gICAgV2UgdXNlIHRva2VucyB0byByZXByZXNlbnQgcnVudGltZSB2YWx1ZXMgKGUuZy4sIHJlZmVyZW5jZXMgdG8gYXR0cmlidXRlcyBvZiByZXNvdXJjZSBvciBkYXRhIHNvdXJjZXMpLiBMaXN0IHRva2VucyBkb24ndCBjb250YWluIHRoZSBhY3R1YWwgdmFsdWVzIGJlY2F1c2UgdGhvc2UgYXJlIG9ubHkgYXZhaWxhYmxlIGF0IGFwcGx5IHRpbWUsIHdoZXJlYXMgdG9rZW5zIGFyZSBwcmVzZW50IGR1cmluZyBjb21waWxlIHRpbWUuXG5cbiAgICBJbnN0ZWFkIG9mIGFkZGluZyB0aGUgdmFsdWUgdG8gdGhlIHRva2VuaXplZCBtYXAsIHVzZSBhIFRlcnJhZm9ybSBmdW5jdGlvbi4gRm9yIGV4YW1wbGU6IEZuLm1lcmdlKFt5b3VyUmVmZXJlbmNlZE1hcCwgeyB5b3VyOiAndmFsdWUnIH1dKS4gVGhpcyBjcmVhdGVzIGEgbmV3IG1hcCBUb2tlbiBmb3IgYSB2YWx1ZSwgd2hpY2ggY291bGQgZ2V0IHJlbmRlcmVkIGFzOlxuICAgIG1lcmdlKG15X3Jlc291cmNlLnJlc291cmNlX25hbWUub25lX3NwZWNpZmljX21hcF9hdHRyaWJ1dGUsIHsgeW91cjogJyB2YWx1ZScgfSlgLFxuICApO1xuXG5leHBvcnQgY29uc3QgY2Fubm90Q29uY2F0ZW5hdGVTdHJpbmdzSW5Ub2tlbml6ZWRNYXAgPSAodG9rZW5pemVkTWFwOiBhbnkpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQ2Fubm90IGNvbmNhdGVuYXRlIHN0cmluZ3MgaW4gYSB0b2tlbml6ZWQgbWFwLCBnb3Q6ICR7dG9rZW5pemVkTWFwfS5cblxuICAgIFdlIGV4cGVjdCB0aGUgZWxlbWVudHMgb2YgYSB0b2tlbml6ZWQgc3RyaW5nIGFycmF5IHRvIGJlIGEgc2luZ2xlIHRva2VuIHN0cmluZy4gRm9yIGV4YW1wbGUsIFtcIiZ7VGZUb2tlbltUb2tlbi4xXX1cIl0uIEEga2V5IGluIHlvdXIgbWFwIGNvbnNpc3RzIG9mIG1vcmUgdGhhbiBhIHN0cmluZyB0b2tlbiAoZS5nLiwgdGhlIFRva2VuIGFuZCBhIHN0YXRpYyBzdHJpbmcgb3IgbXVsdGlwbGUgVG9rZW5zKS5cblxuICAgIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgbXV0YXRlIHRoZSBrZXkgb2YgdGhlIG1hcC4gRG8gbm90IG11dGF0ZSB0b2tlbml6ZWQgTWFwcywgYmVjYXVzZSBpdCBtYWtlcyBpdCBpbXBvc3NpYmxlIGZvciBDREtUTiB0byB0cmFuc2xhdGUgdGhlbS5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgZG9lc05vdEltcGxlbWVudERlcGVuZGFibGVUcmFpdCA9IChpbnN0YW5jZTogSURlcGVuZGFibGUpID0+XG4gIG5ldyBFcnJvcihgJHtpbnN0YW5jZX0gZG9lcyBub3QgaW1wbGVtZW50IERlcGVuZGFibGVUcmFpdGApO1xuXG5leHBvcnQgY29uc3QgY2FuT25seUVuY29kZVBvc2l0aXZlSW50ZWdlcnMgPSAoKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYENhbiBvbmx5IGVuY29kZSBwb3NpdGl2ZSBpbnRlZ2VycyBpbnRvIFRva2Vucy4gVGhpcyBpcyBhIGJ1ZyBpbiBDREtUTiwgcGxlYXNlIGZpbGUgYSBidWcgcmVwb3J0LmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBpbmRleFRvb0xhcmdlVG9FbmNvZGUgPSAoaW5kZXg6IG51bWJlcikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBSZWNlaXZlZCBhbiBpbmRleCB0b28gbGFyZ2UgdG8gZW5jb2RlIGludG8gYSBUb2tlbiA6JHtpbmRleH0uXG5cbiAgICBUaGlzIGhhcHBlbnMgaWYgeW91IGhhdmUgdG9vIG1hbnkgVG9rZW5zIGluIGEgc2luZ2xlIENES1ROIGFwcGxpY2F0aW9uLiBUaGlzIGNhbiBhbHNvIG9jY3VyIGlmIHlvdSBhcmUgYWNjaWRlbnRhbGx5IGNyZWF0aW5nIG51bWVyaWMgdG9rZW5zIGluIGFuIGluZmluaXRlIGxvb3AuIEZvciBleGFtcGxlLCBjYWxsaW5nICdUb2tlbi5hc051bWJlcigpJyB0b28gbWFueSB0aW1lcy5cblxuICAgIElmIHlvdSByZWFjaCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCBUb2tlbnMgKGEgbGltaXRhdGlvbiBpbXBvc2VkIGJ5IHRoZSB3YXkgd2UgZW5jb2RlIFRva2VucyBhbmQgc2VwYXJhdGUgdGhlbSBmcm9tIHJlYWwgbnVtZXJpYyB2YWx1ZXMpIHlvdSBjYW4gd29yayBhcm91bmQgdGhpcyBpc3N1ZSBieSBkaXZpZGluZyBhIHNpbmdsZSBhcHBsaWNhdGlvbiBpbnRvIG11bHRpcGxlIGFwcGxpY2F0aW9ucy5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgYXJnVG9JbnRyaW5zaWNNdXN0QmVQbGFpblZhbHVlID0gKFxuICB2YWx1ZTogYW55LFxuICBjcmVhdGlvblN0YWNrOiBzdHJpbmdbXSxcbikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBZb3UgY2FuIG9ubHkgdXNlIGEgcGxhaW4gdmFsdWUgKG5vdCBhIGZ1bmN0aW9uKSB3aGlsZSBjcmVhdGluZyBhbiBJbnRyaW5zaWMgdG9rZW4uIFdlIHJlY2VpdmVkIHRoZSB2YWx1ZSAnJHt2YWx1ZX0nIGNyZWF0ZWQgYXQ6XFxuJHtjcmVhdGlvblN0YWNrLmpvaW4oXG4gICAgICBcIlxcblwiLFxuICAgICl9LiBJZiB5b3Ugd2FudCB0byB1c2UgYSBmdW5jdGlvbiwgcGxlYXNlIHVzZSB0aGUgTGF6eSBjbGFzcy4gRm9yIGV4YW1wbGU6ICBMYXp5LmFueVZhbHVlKHsgcHJvZHVjZTogKCkgPT4gXCJIZWxsbyBXb3JsZFwiIH0pLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBpbnRyaW5zaWNOZXdFcnJvciA9IChtZXNzYWdlOiBzdHJpbmcsIGNyZWF0ZWRBdDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYCR7bWVzc2FnZX1cXG5Ub2tlbiBjcmVhdGVkOlxcbiAgICBhdCAke2NyZWF0ZWRBdH1cXG5FcnJvciB0aHJvd246YCk7XG5cbmV4cG9ydCBjb25zdCB1bmFibGVUb1Jlc29sdmVDaXJjdWxhclJlZmVyZW5jZSA9IChwYXRoTmFtZTogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYFVuYWJsZSB0byByZXNvbHZlIG9iamVjdCB0cmVlIHdpdGggY2lyY3VsYXIgcmVmZXJlbmNlIGF0ICcke3BhdGhOYW1lfScuXG5cblRoZSBkZXB0aCBvZiB5b3VyIG9iamVjdCB0cmVlIGlzIG92ZXIgMjAwLCBpbmRpY2F0aW5nIHlvdSBwcm9iYWJseSBoYXZlIGEgY3ljbGljYWwgcmVmZXJlbmNlLiBJbnNwZWN0IHRoZSBjb25zdHJ1Y3QgY3JlYXRpbmcgdGhpcyBjeWNsaWMgcmVmZXJlbmNlIChtb3N0IGxpa2VseSBpbiAnJHtwYXRoTmFtZX0nKSBhbmQgZW5zdXJlIGl0IGRvZXMgbm90IGluZmluaXRlbHkgbmVzdCBjb25zdHJ1Y3RzLmApO1xuXG5leHBvcnQgY29uc3QgY2Fubm90UmVzb2x2ZUZ1bmN0aW9uID0gKHBhdGhOYW1lOiBzdHJpbmcsIG9iajogYW55KSA9PlxuICBuZXcgRXJyb3IoYFRyeWluZyB0byByZXNvbHZlIGEgbm9uLWRhdGEgb2JqZWN0IChlLmcuLCBhIGZ1bmN0aW9uKSBhdCAnJHtwYXRoTmFtZX0nOiAke29ian0uIE9ubHkgdG9rZW5zIGFyZSBzdXBwb3J0ZWQgZm9yIGxhenkgZXZhbHVhdGlvbi5cblxuSWYgeW91IHdhbnQgdG8gdXNlIGEgbGF6aWx5IGNvbXB1dGVkIHZhbHVlLCB1c2UgdGhlIExhenkgY2xhc3MuIEZvciBleGFtcGxlOiAgTGF6eS5zdHJpbmdWYWx1ZSh7IHByb2R1Y2U6ICgpID0+IFwiSGVsbG8gV29ybGRcIiB9KWApO1xuXG5jb25zdCBMSVNUX0VSUk9SX0VYUExBTkFUSU9OID0gYEluIENES1ROLCB3ZSByZXByZXNlbnQgbGlzdHMsIHdpdGggdmFsdWVzIHVua25vd24gdW50aWwgYWZ0ZXIgcnVudGltZSwgYXMgYXJyYXlzIHdpdGggYSBzaW5nbGUgZWxlbWVudOKAlCBhIHN0cmluZyB0b2tlbiAoW1wiVG9rZW4uMVwiXSkuXG5cblxuV2UgZG8gdGhpcyBiZWNhdXNlIENES1ROIGRvZXMgbm90IGtub3cgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhdCBjb21waWxlIHRpbWUsIG1lYW5pbmcgQ0RLVE4gaGFzIHlldCB0byBpbnZva2UgVGVycmFmb3JtIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGNsb3VkIHByb3ZpZGVyLiBDREtUTiBsYXRlciBpbnZva2VzIFRlcnJhZm9ybSBvbiB0aGUgc3ludGhlc2l6ZWQgc3RhdGljIEpTT04gZmlsZS5cblxuQmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBsZW5ndGggb2YgdGhlIGxpc3QsIHdlIGNhbiBub3QgZGlmZmVyZW50aWF0ZSBpZiB0aGUgbGlzdCB3YXMgYWNjZXNzZWQgYXQgdGhlIGZpcnN0IG9yIGxhc3QgaW5kZXgsIG9yIGFzIHBhcnQgb2YgYSBsb29wLiBUbyBhdm9pZCB0aGlzIGFtYmlndWl0eTpcblxuLSBJZiB5b3Ugd2FudCB0byBhY2Nlc3MgYSBzaW5ndWxhciBpdGVtLCB1c2UgJ0ZuLmVsZW1lbnQobGlzdCwgMCknLiBEbyBub3QgdXNlICdsaXN0WzBdJy5cbi0gSWYgeW91IHdhbnQgdG8gbG9vcCBvdmVyIHRoZSBsaXN0IHVzZSAnVGVycmFmb3JtSXRlcmF0b3IuZnJvbUxpc3QobGlzdCknLiBEbyBub3QgdXNlIGEgJ2Zvcicgb3IgJ2ZvckVhY2gnIGxvb3AuXG5cbkxlYXJuIG1vcmUgYWJvdXQgdG9rZW5zOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvdG9rZW5zXG5MZWFybiBtb3JlIGFib3V0IGl0ZXJhdG9yczogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL2l0ZXJhdG9yc2A7XG5cbmNvbnN0IE1BUF9FUlJPUl9FWFBMQU5BVElPTiA9IGBcbkluIENES1ROLCB3ZSByZXByZXNlbnQgbWFwcywgd2l0aCB2YWx1ZXMgdW5rbm93biB1bnRpbCBhZnRlciBydW50aW1lLCBhcyBvYmplY3RzIHdpdGggYSBzaW5nbGUga2V5LXZhbHVlIHBhaXIgd2hlcmUgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIHRva2VuLiBGb3IgZXhhbXBsZTogJ3sgXCIme1RmVG9rZW5bVG9rZW4uMV19XCI6IFwiU3RyaW5nIE1hcCBUb2tlbiBWYWx1ZVwiIH0nLlxuXG5XZSBkbyB0aGlzIGJlY2F1c2UgQ0RLVE4gZG9lcyBub3Qga25vdyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGF0IGNvbXBpbGUgdGltZSwgbWVhbmluZyBDREtUTiBoYXMgeWV0IHRvIGludm9rZSBUZXJyYWZvcm0gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgY2xvdWQgcHJvdmlkZXIuIENES1ROIGxhdGVyIGludm9rZXMgVGVycmFmb3JtIG9uIHRoZSBzeW50aGVzaXplZCBzdGF0aWMgSlNPTiBmaWxlLlxuXG5CZWNhdXNlIHdlIGRvbid0IGtub3cgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAsIHdlIGNhbiBub3QgZGlmZmVyZW50aWF0ZSBpZiB0aGUgbWFwIHdhcyBhY2Nlc3NlZCwgb3IgdXNlZCBhcyBwYXJ0IG9mIGEgbG9vcC4gVG8gYXZvaWQgdGhpcyBhbWJpZ3VpdHk6XG5cbi0gVG8gYWNjZXNzIGEgc2luZ3VsYXIgaXRlbSB1c2UgJ0ZuLmxvb2t1cChtYXAsIGtleSknLiBEbyBub3QgdXNlICdtYXBba2V5XScuXG4tIElmIHlvdSB3YW50IHRvIGxvb3Agb3ZlciB0aGUgbWFwIHVzZSAnVGVycmFmb3JtSXRlcmF0b3IuZnJvbU1hcChtYXApJy4gRG8gbm90IHVzZSBhICdmb3InIGxvb3Agb3IgaXRlcmF0ZSBvdmVyICdPYmplY3QuZW50cmllcyhtYXApJyB3aXRoICdmb3JFYWNoJy5cblxuTGVhcm4gbW9yZSBhYm91dCB0b2tlbnM6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy90b2tlbnNcbkxlYXJuIG1vcmUgYWJvdXQgaXRlcmF0b3JzOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvaXRlcmF0b3JzYDtcblxuZXhwb3J0IGNvbnN0IGVuY29kZWRMaXN0VG9rZW5JblNjYWxhclN0cmluZ0NvbnRleHQgPSAoKSA9PlxuICBuZXcgRXJyb3IoYEZvdW5kIGFuIGVuY29kZWQgbGlzdCB0b2tlbiBzdHJpbmcgaW4gYSBzY2FsYXIgc3RyaW5nIGNvbnRleHQuXG4ke0xJU1RfRVJST1JfRVhQTEFOQVRJT059YCk7XG5cbmV4cG9ydCBjb25zdCBlbmNvZGVkTWFwVG9rZW5JblNjYWxhclN0cmluZ0NvbnRleHQgPSAoKSA9PlxuICBuZXcgRXJyb3IoYEZvdW5kIGFuIGVuY29kZWQgbWFwIHRva2VuIGluIGEgc2NhbGFyIHN0cmluZyBjb250ZXh0LlxuJHtNQVBfRVJST1JfRVhQTEFOQVRJT059YCk7XG5cbmV4cG9ydCBjb25zdCBlbmNvZGVkTWFwVG9rZW5JblNjYWxhck51bWJlckNvbnRleHQgPSAoKSA9PlxuICBuZXcgRXJyb3IoYEZvdW5kIGFuIGVuY29kZWQgbWFwIHRva2VuIGluIGEgc2NhbGFyIG51bWJlciBjb250ZXh0LlxuJHtNQVBfRVJST1JfRVhQTEFOQVRJT059YCk7XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RzQ2Fubm90QmVSZXNvbHZlZCA9IChwYXRoTmFtZTogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYFRyeWluZyB0byAncmVzb2x2ZSgpJyBhIENvbnN0cnVjdCBhdCAnJHtwYXRoTmFtZX0nLlxuXG5UaGlzIG9mdGVuIG1lYW5zIGFuIHVuaW50ZW5kZWQgY3ljbGljIGRlcGVuZGVuY3kgaW4geW91ciBjb25zdHJ1Y3QgdHJlZSwgbGVhZGluZyB0byB0aGUgcmVzb2x1dGlvbiBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wIHRoYXQgZmFpbHMuXG5UaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHNjb3BlIHBhc3NlZCBpbnRvIHRoaXMgY29uc3RydWN0IGlzIGFsc28gcGFydCBvZiBpdHMgc3VidHJlZS5cblxuVG8gcmVzb2x2ZSB0aGlzIGlzc3VlLCByZWZhY3RvciB5b3VyIGNvZGUgdG8gYXZvaWQgdGhpcyBjeWNsaWMgZGVwZW5kZW5jeSBieSBjaGFuZ2luZyB0aGUgc2NvcGUgb2YgdGhpcyBjb25zdHJ1Y3QuYCk7XG5cbmV4cG9ydCBjb25zdCBtYXBLZXlNdXN0UmVzb2x2ZVRvU3RyaW5nID0gKFxuICBwYXRoTmFtZTogc3RyaW5nLFxuICBrZXk6IHN0cmluZyxcbiAgcmVzb2x2ZWRLZXk6IGFueSxcbikgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBBdCBcIiR7cGF0aE5hbWV9XCIgYSBtYXAgdXNlcyB0aGUga2V5IFwiJHtrZXl9XCIsIG1lYW5pbmcgdGhhdCBrZXkgbXVzdCByZXNvbHZlIHRvIGEgc3RyaW5nLiBIb3dldmVyLCBpdCByZXNvbHZlcyB0byBhICR7dHlwZW9mIHJlc29sdmVkS2V5fSB3aXRoIHRoZSB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgcmVzb2x2ZWRLZXksXG4gICAgKX0uIFRvIGZpeCB0aGlzLCBjaGFuZ2UgdGhlIFRva2VuIHRvIHJlc29sdmUgdG8gYSBzdHJpbmcuYCxcbiAgKTtcblxuY29uc3QgdW5rbm93blRva2VuRXhwbGFuYXRpb24gPSBgVGhpcyBtZWFucyB5b3UgYXJlIHRyeWluZyB0byBhY2Nlc3MgYSBUb2tlbiB2YWx1ZSB0aGF0IGRvZXMgbm90IGV4aXN0LiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgVG9rZW4gaXMgZnJvbSBhbm90aGVyIENESyAoaS5lLiwgQVdTIENESywgQ0RLOHMsIGV0Yy4pIGFuZCBpcyB1bmtub3duIHRvIHRoaXMgQ0RLVE4gQXBwbGljYXRpb24uIFlvdSBlaXRoZXIgbmVlZCB0byBtYWtlIHRoZSBvdGhlciBDREsgcmVzb2x2ZSB0aGlzIFRva2VuIGJlZm9yZSBDREtUTiB0cmllcyB0byByZXNvbHZlIGl0LCBvciB3b3JrIGFyb3VuZCB1c2luZyB0aGlzIFRva2VuIGF0IGFsbC5cblxuSWYgdGhpcyBlcnJvciBvY2N1cnMgd2l0aG91dCBhbm90aGVyIENESyAob3IgYSB2YWx1ZSBsb29raW5nIGxpa2UgYSBUb2tlbikgaW52b2x2ZWQsIHBsZWFzZSBmaWxlIGEgYnVnLmA7XG5cbmV4cG9ydCBjb25zdCB1bmtub3duTnVtYmVyVG9rZW5Gb3VuZCA9ICgpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgRW5jb2RlZCByZXByZXNlbnRhdGlvbiBvZiB1bmtub3duIG51bWJlciBUb2tlbiBmb3VuZC4gJHt1bmtub3duVG9rZW5FeHBsYW5hdGlvbn1gLFxuICApO1xuXG5leHBvcnQgY29uc3QgdW5yZWNvZ25pemVkVG9rZW5LZXkgPSAoa2V5OiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIFRva2VuIEtleSAnJHtrZXl9Jy4gJHt1bmtub3duVG9rZW5FeHBsYW5hdGlvbn1gKTtcblxuZXhwb3J0IGNvbnN0IElkSW5jbHVkZXNVbnJlc29sdmVkVG9rZW5zID0gKHVucmVzb2x2ZWRUb2tlbnM6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBUaGlzIGNvbnN0cnVjdCAob3IgaXRzIHBhcmVudCBjb25zdHJ1Y3QpIGlzIGNvbmZpZ3VyZWQgd2l0aCBhbiBJRCB0aGF0IGNvbnRhaW5zIGEgVG9rZW46ICR7dW5yZXNvbHZlZFRva2Vuc30uIFRoaXMgaXMgbm90IGFsbG93ZWQgYmVjYXVzZSBJRHMgbXVzdCBiZSBrbm93biBzdGF0aWNhbGx5IGR1cmluZyBzeW50aGVzaXMuIFRva2VuIHZhbHVlcyBhcmUgb25seSBrbm93biBkdXJpbmcgdGhlIGFwcGx5IHN0YWdlLCB0aGVyZWZvcmUgdGhleSBjYW5ub3QgYmUgdXNlZCBpbiBJRHMuIFBsZWFzZSB1c2UgYSBjb25jcmV0ZSB2YWx1ZSBmb3IgeW91ciBjb25zdHJ1Y3RzIElEIGluc3RlYWQuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGFzc2V0Q2FuTm90Q3JlYXRlWmlwQXJjaGl2ZSA9IChcbiAgc3JjOiBzdHJpbmcsXG4gIGRlc3Q6IHN0cmluZyxcbiAgZXJyb3I6IEVycm9yLFxuKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYEEgVGVycmFmb3JtQXNzZXQgdHJ5aW5nIHRvIHppcCBhcmNoaXZlICcke3NyY30nIGludG8gJHtkZXN0fSBmYWlsZWQ6ICR7ZXJyb3J9YCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IHRlcnJhZm9ybU1vZHVsZUhhc0NoaWxkcmVuID0gKHBhdGhOYW1lOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICBgVHJ5aW5nIHRvIGFkZCBjaGlsZHJlbiB0byBhIFRlcnJhZm9ybU1vZHVsZSBhdCAnJHtwYXRoTmFtZX0nLiBUZXJyYWZvcm1Nb2R1bGVzIGNhbm5vdCBoYXZlIGNoaWxkcmVuLCBpZiB5b3Ugd2FudCB0byBncm91cCByZXNvdXJjZXMgb3IgY29uc3RydWN0cyBpbiBnZW5lcmFsIHRvZ2V0aGVyIHBsZWFzZSB1c2UgdGhlIENvbnN0cnVjdHMgY2xhc3MgaW5zdGVhZC4gU2VlIGh0dHBzOi8vY2RrLnRmL2NvbnN0cnVjdHMgZm9yIG1vcmUgZGV0YWlscy5gLFxuICApO1xufTtcbiJdfQ==
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7O0FBS0ksTUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFxQixFQUFFLEVBQUUsQ0FDbEQsSUFBSSxLQUFLLENBQ1AseURBQXlELGFBQWE7OztLQUdyRSxDQUNGLENBQUM7QUFOUyxRQUFBLFVBQVUsY0FNbkI7QUFFRyxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUU7SUFDM0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxPQUFPLElBQUksS0FBSyxDQUNkLG1HQUFtRyxVQUFVO0NBQ2hILENBQ0UsQ0FBQztBQUNKLENBQUMsQ0FBQztBQU5XLFFBQUEseUJBQXlCLDZCQU1wQztBQUVLLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FDeEQsSUFBSSxLQUFLLENBQ1AsNkRBQTZELFNBQVM7OztLQUdyRSxDQUNGLENBQUM7QUFOUyxRQUFBLG9CQUFvQix3QkFNN0I7QUFFRyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsRUFBRSxDQUMxQyxJQUFJLEtBQUssQ0FDUDs7S0FFQyxDQUNGLENBQUM7QUFMUyxRQUFBLHVCQUF1QiwyQkFLaEM7QUFFRyxNQUFNLDBCQUEwQixHQUFHLENBQUMsRUFBVSxFQUFFLFVBQWtCLEVBQUUsRUFBRSxDQUMzRSxJQUFJLEtBQUssQ0FDUCxrQkFBa0IsRUFBRSxzQ0FBc0MsVUFBVSwrRUFBK0UsT0FBTyxDQUFDLEdBQUcsRUFBRTs7Ozs7O0NBTW5LLENBQ0UsQ0FBQztBQVRTLFFBQUEsMEJBQTBCLDhCQVNuQztBQUVHLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxFQUFVLEVBQUUs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b0Isd0JBQzBDO0FBRXBFLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxnQkFBd0IsRUFBRSxFQUFFLENBQ3JFLElBQUksS0FBSyxDQUNQLDRGQUE0RixnQkFBZ0Isb09BQW9PLENBQ2pWLENBQUM7QUFIUyxRQUFBLDBCQUEwQiw4QkFHbkM7QUFFRyxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLEdBQVcsRUFDWCxJQUFZLEVBQ1osS0FBWSxFQUNaLEVBQUUsQ0FDRixJQUFJLEtBQUssQ0FDUCwyQ0FBMkMsR0FBRyxVQUFVLElBQUksWUFBWSxLQUFLLEVBQUUsQ0FDaEYsQ0FBQztBQVBTLFFBQUEsMkJBQTJCLCtCQU9wQztBQUVHLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDN0QsT0FBTyxJQUFJLEtBQUssQ0FDZCxtREFBbUQsUUFBUSxxTkFBcU4sQ0FDalIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUpXLFFBQUEsMEJBQTBCLDhCQUlyQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0IHsgSURlcGVuZGFibGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiLi90ZXJyYWZvcm0tc3RhY2tcIjtcblxuZXhwb3J0IGNvbnN0IG5vQXBwRm91bmQgPSAoY29uc3RydWN0UGF0aDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYE5vIGFwcCBjb3VsZCBiZSBpZGVudGlmaWVkIGZvciB0aGUgY29uc3RydWN0IGF0IHBhdGggJyR7Y29uc3RydWN0UGF0aH0nIChsaWtlbHkgYSBUZXJyYWZvcm1TdGFjaykuXG5UaGUgc2NvcGUgb2YgQ0RLVE4ncyBUZXJyYWZvcm1TdGFjayBjbGFzcyBpcyBhIHNpbmdsZSBBcHAgaW5zdGFuY2UgY3JlYXRlZCBieSAnY29uc3QgYXBwID0gbmV3IEFwcCgpJy4gVGhlIEFwcCBpcyB5b3VyIHByb2plY3QncyByb290LCBob2xkaW5nIHByb2plY3QgY29uZmlndXJhdGlvbiBhbmQgdmFsaWRhdGlvbnMuXG5MZWFybiBtb3JlIGFib3V0IHRoZSBBcHA6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9jZGt0bi1hcmNoaXRlY3R1cmUjYXBwLWNsYXNzXG4gICAgYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdHNPdXRzaWRlT2ZTdGFja3MgPSAocGF0aHM6IHN0cmluZ1tdKSA9PiB7XG4gIGNvbnN0IGJ1bGxldExpc3QgPSBwYXRocy5tYXAoKHApID0+IGAgIC0gJHtwfWApLmpvaW4oXCJcXG5cIik7XG4gIHJldHVybiBuZXcgRXJyb3IoXG4gICAgYEZvdW5kIGNvbnN0cnVjdHMgb3V0c2lkZSBvZiBhIFRlcnJhZm9ybVN0YWNrIChkaWQgeW91IHBhc3Mgc2NvcGU9YXBwIGluc3RlYWQgb2Ygc2NvcGU9c3RhY2s/KTpcXG4ke2J1bGxldExpc3R9XG5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcFZhbGlkYXRpb25GYWlsdXJlID0gKGVycm9yTGlzdDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYEFwcC1sZXZlbCB2YWxpZGF0aW9uIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxcbiAgJHtlcnJvckxpc3R9XG5WYWxpZGF0aW9ucyBhbGxvdyBmb3IgZHluYW1pYyB2ZXJpZmljYXRpb24gb2YgeW91ciBwcm9qZWN0LlxuVG8gc2tpcCB2YWxpZGF0aW9ucywgYWRkICdza2lwVmFsaWRhdGlvbjogdHJ1ZScgdG8geW91ciBBcHAgY29uZmlnLlxuICAgIGAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlclZlcnNpb25NaXNtYXRjaCA9ICgpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgVmVyc2lvbiBtaXNtYXRjaCBkZXRlY3RlZDogWW91ciBwcm92aWRlciBiaW5kaW5ncyBhcmUgYnVpbHQgZm9yIGFuIG9sZGVyIHZlcnNpb24gb2YgQ0RLVG4uXG5VcGdyYWRlIHlvdXIgcHJlLWJ1aWx0IHByb3ZpZGVyIG9yIHJlLXJ1biBjZGt0biBnZXQgd2l0aCBhIG1vcmUgcmVjZW50IHZlcnNpb24gKD49IDAuMTApIG9mIHRoZSBjZGt0bi1jbGkuXG4gICAgYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGFzc2V0T3V0T2ZTY29wZU9mQ0RLVEZKc29uID0gKGlkOiBzdHJpbmcsIGNvbmZpZ1BhdGg6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBUZXJyYWZvcm1Bc3NldCAke2lkfSB3YXMgY3JlYXRlZCB3aXRoIGEgcmVsYXRpdmUgcGF0aCAnJHtjb25maWdQYXRofScsIGJ1dCB3ZSBjYW5ub3QgZmluZCB0aGUgY2RrdGYuanNvbiB3aXRoaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ICcke3Byb2Nlc3MuY3dkKCl9J1xuXG5UaGUgY2RrdGYuanNvbiBmaWxlIGlzIG5lZWRlZCB0byBlc3RhYmxpc2ggdGhlIGJhc2UgZm9yIHRoZSByZWxhdGl2ZSBwYXRoICh0aGUgJy4nIGluICcuL2Zvby9iYXInKS5cblxuUGxhY2UgYSBjZGt0Zi5qc29uIGF0IHRoZSByb290IG9mIHlvdXIgcHJvamVjdC4gTGVhcm4gbW9yZTogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NyZWF0ZS1hbmQtZGVwbG95L2NvbmZpZ3VyYXRpb24tZmlsZVxuTGVhcm4gbW9yZSBhYm91dCBUZXJyYWZvcm1Bc3NldDogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL2Fzc2V0c1xuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGFzc2V0RXhwZWN0c0RpcmVjdG9yeSA9IChpZDogc3RyaW5nLCBjb25maWdQYXRoOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgVGVycmFmb3JtQXNzZXQgJHtpZH0gZXhwZWN0cyBwYXRoIHRvIHBvaW50IHRvIGEgZGlyZWN0b3J5LiBJbnN0ZWFkLCB0aGlzIGZpbGUgd2FzIHBhc3NlZDogJyR7Y29uZmlnUGF0aH0nLiBQbGVhc2UgY29ycmVjdCB0aGUgcGF0aCB0byBwb2ludCB0byBhIGRpcmVjdG9yeS5cbkxlYXJuIG1vcmUgYWJvdXQgVGVycmFmb3JtQXNzZXQ6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9hc3NldHNcbiAgICBgLFxuICApO1xuXG5leHBvcnQgY29uc3QgYXNzZXRUeXBlTm90SW1wbGVtZW50ZWQgPSAoKSA9PlxuICBuZXcgRXJyb3IoYEFzc2V0IHR5cGUgaXMgbm90IGltcGxlbWVudGVkLlxuUG9zc2libGUgQXNzZXQgdHlwZXMgaW5jbHVkZTogRklMRSwgRElSRUNUT1JZLCBhbmQgQVJDSElWRS5cblRha2Ugb25lIG9mIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBBc3NldFR5cGUgRW51bS5cbkxlYXJuIG1vcmUgYWJvdXQgVGVycmFmb3JtQXNzZXQ6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9hc3NldHNcbiAgYCk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbWljQmxvY2tOb3RTdXBwb3J0ZWQgPSAoX2ZvcmVhY2hFeHByZXNzaW9uOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgV2UgZG8gbm90IHN1cHBvcnQgZGlyZWN0bHkgcmVzb2x2aW5nIGEgVGVycmFmb3JtRHluYW1pY0Jsb2NrLiBEeW5hbWljIGJsb2NrcyBhcmUgb25seSBzdXBwb3J0ZWQgb24gYmxvY2sgYXR0cmlidXRlcyBvZiByZXNvdXJjZXMsIGRhdGEgc291cmNlcywgYW5kIHByb3ZpZGVycy5cblxuWW91IGNhbiBjcmVhdGUgYSBUZXJyYWZvcm1EeW5hbWljQmxvY2sgYnkgY2FsbGluZyAnLmR5bmFtaWMnIG9uIGEgVGVycmFmb3JtSXRlcmF0b3IgaW5zdGFuY2UuXG5cblRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbiB3YXMgdXNlZCBmb3IgdGhlIGR5bmFtaWMgYmxvY2s6IC5keW5hbWljKHtcbiAgJHtfZm9yZWFjaEV4cHJlc3Npb259XG59KVxuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IHVucmVzb2x2ZWRUb2tlbkluQ29uc3RydWN0SWQgPSAoaWQ6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBZb3UgY2Fubm90IHVzZSBhIHRva2VuIChlLmcuLCBhIHJlZmVyZW5jZSB0byBhbiBhdHRyaWJ1dGUpIGFzIHRoZSBpZCBvZiBhIGNvbnN0cnVjdC4gSWRzIG9mIGNvbnN0cnVjdHMgbXVzdCBiZSBrbm93biBhdCBzeW50aGVzaXMgdGltZSwgYW5kIHRva2VuIHZhbHVlcyBhcmUgb25seSBrbm93biB3aGVuIFRlcnJhZm9ybSBydW5zLiBQbGVhc2UgdXNlIGEgY29uY3JldGUgdmFsdWUgZm9yIHlvdXIgY29uc3RydWN0cyBJRCBpbnN0ZWFkLlxuWW91IHBhc3NlZCB0aGUgZm9sbG93aW5nIGlkOiBcIiR7aWR9XCJcbmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBpdGVyYXRvck9uUmVzb3VyY2VXaXRoQ291bnQgPSAoKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFlvdSBjYW5ub3QgY3JlYXRlIGFuIGl0ZXJhdG9yIGZyb20gYSByZXNvdXJjZSB3aXRoIGEgY291bnQgYXJndW1lbnQuXG5JbnN0ZWFkLCByZXVzZSB0aGlzIHJlc291cmNlJ3MgVGVycmFmb3JtQ291bnQgaW5zdGFuY2UgaW4gdGhlIHJlc291cmNlIHlvdSB3YW50IHRvIHVzZSBhcyBhbiBpdGVyYXRvci5cblxuSWYgeW91IHdhbnQgdG8gdXNlIGFuIGl0ZXJhdG9yIHRvIHBvcHVsYXRlIGEgbGlzdCBhdHRyaWJ1dGUsIHJlcGxhY2UgdGhlIGNvdW50IG9uIHRoZSByZXNvdXJjZSB3aXRoIGFuIGl0ZXJhdG9yIHBhc3NlZCBpbnRvIHRoZSBmb3JFYWNoIGFyZ3VtZW50LmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBpdGVyYXRvck9uUmVzb3VyY2VXaXRob3V0Rm9yRWFjaCA9ICgpID0+XG4gIG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBhbiBpdGVyYXRvciBmcm9tIGEgcmVzb3VyY2Ugd2l0aG91dCBhIGZvckVhY2ggYXJndW1lbnQuIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBtb3JlIGluc3RhbmNlcyBvZiB0aGlzIHJlc291cmNlLCBwYXNzIGFuIGl0ZXJhdG9yIHRvIHRoZSBmb3JFYWNoIGFyZ3VtZW50IG9mIHRoZSByZXNvdXJjZSBmaXJzdC5cbiAgYCk7XG5cbmV4cG9ydCBjb25zdCBtb2R1bGVzV2l0aFNhbWVBbGlhcyA9IChhbGlhczogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYE11bHRpcGxlIHByb3ZpZGVycyBoYXZlIHRoZSBzYW1lIGFsaWFzOiBcIiR7YWxpYXN9XCJcbkVhY2ggcHJvdmlkZXIgbXVzdCBoYXZlIGEgdW5pcXVlIGFsaWFzIHdoZW4gcGFzc2luZyBtdWx0aXBsZSBwcm92aWRlcnMgb2YgdGhlIHNhbWUgdHlwZSB0byBtb2R1bGVzLlxuICBgKTtcblxuZXhwb3J0IGNvbnN0IG1vdmVUYXJnZXRBbHJlYWR5U2V0ID0gKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgZnJpZW5kbHlVbmlxdWVJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKSA9PlxuICBuZXcgRXJyb3IoYFRhcmdldCBcIiR7dGFyZ2V0fVwiIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBmb3IgdGhlIGNvbnN0cnVjdCAke2ZyaWVuZGx5VW5pcXVlSWR9LlxuVGFyZ2V0IG11c3QgYmUgYSBzdHJpbmcgdGhhdCBpcyB1bmlxdWUgYWNyb3NzIGFsbCByZXNvdXJjZXMgaW4gdGhlIHNhbWUgc3RhY2suYCk7XG5cbmV4cG9ydCBjb25zdCBtb3ZlVGFyZ2V0Tm90U2V0ID0gKHRhcmdldDogc3RyaW5nLCBlbnRyaWVzOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVGFyZ2V0IFwiJHt0YXJnZXR9XCIgaGFzIG5vdCBiZWVuIHNldC5cbllvdSB0cmllZCB0byBtb3ZlIGEgcmVzb3VyY2Ugd2l0aG91dCBhIHRhcmdldC5cbkNhbGwgLmFkZE1vdmVUYXJnZXQoXCIke3RhcmdldH1cIikgb24gdGhlIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSB5b3Ugd2FudCB0byBtb3ZlIHRoaXMgcmVzb3VyY2UgdG8uXG5cbkFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRhcmdldHMgKGluIGNhc2UgeW91IGhhZCBhIHR5cG8pOlxuJHtlbnRyaWVzfVxuYCk7XG5cbmV4cG9ydCBjb25zdCBtb3ZlZFRvUmVzb3VyY2VPZkRpZmZlcmVudFR5cGUgPSAoXG4gIG1vdmVUYXJnZXQ6IHN0cmluZyxcbiAgb3JpZ2luYWxSZXNvdXJjZVR5cGU6IHN0cmluZyxcbiAgZGVzdGluYXRpb25SZXNvdXJjZVR5cGU6IHN0cmluZyxcbikgPT5cbiAgbmV3IEVycm9yKGBXZSBkbyBub3Qgc3VwcG9ydCBtb3ZpbmcgcmVzb3VyY2VzIHRvIGEgZGlmZmVyZW50IHR5cGUuXG5cblRoZSBkZXN0aW5hdGlvbiBcIiR7bW92ZVRhcmdldH1cIidzIHJlc291cmNlIHR5cGUgJHtkZXN0aW5hdGlvblJlc291cmNlVHlwZX0gZGlmZmVycyBmcm9tIHRoZSBvcmlnaW5hbCByZXNvdXJjZSB0eXBlICgke29yaWdpbmFsUmVzb3VyY2VUeXBlfSkgeW91IGFyZSB0cnlpbmcgdG8gbW92ZS5cblxuSWYgdGhpcyB3YXMgaW50ZW50aW9uYWwsIHRyeSBpbXBvcnRpbmcgdGhlIGV4aXN0aW5nIHJlc291cmNlIGludG8geW91ciB0YXJnZXQgaW5zdGVhZC4gTGVhcm4gbW9yZTpcbmh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9yZXNvdXJjZXMjaW1wb3J0aW5nLXJlc291cmNlc1xuXG5Ob3RlIHRoYXQgeW91IG11c3QgbWFudWFsbHkgcmVtb3ZlIHRoZSBvcmlnaW5hbCByZXNvdXJjZSBmcm9tIHlvdXIgc3RhdGUgZmlsZSBhZnRlciBpbXBvcnRpbmcgaXQuIFVzZSB0aGUgXCJ0ZXJyYWZvcm0gc3RhdGUgcm1cIiBjb21tYW5kIGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5IG9mIHRoZSBzdGFjayB5b3UgZGVmaW5lZCB0aGlzIHJlc291cmNlIGluLiBMZWFybiBtb3JlOlxuaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vY2xpL2NvbW1hbmRzL3N0YXRlL3JtXG5gKTtcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlR2l2ZW5Ud29Nb3ZlT3BlcmF0aW9uc0J5VGFyZ2V0QW5kSWQgPSAoXG4gIGlkOiBzdHJpbmcsXG4gIGV4aXN0aW5nVGFyZ2V0OiBzdHJpbmcsXG4gIG5ld01vdmU6IHsgdG86IHN0cmluZzsgZnJvbTogc3RyaW5nIH0sXG4pID0+XG4gIG5ldyBFcnJvcihgXG5UaGUgcmVzb3VyY2UgJHtpZH0gaGFzIGJlZW4gZ2l2ZW4gdHdvIGRpZmZlcmVudCBtb3ZlIG9wZXJhdGlvbnMuXG5cbk1vdmUgdGFyZ2V0OiBcIiR7ZXhpc3RpbmdUYXJnZXR9XCJcbk1vdmUgYnkgaWQ6IHtcbiAgZnJvbTogJHtuZXdNb3ZlLmZyb219XG4gIHRvOiAke25ld01vdmUudG99XG59XG5cbk9ubHkgb25lIG1vdmUgb3BlcmF0aW9uIGNhbiBvY2N1ciBwZXIgcGxhbi9hcHBseS4gUmVtb3ZlIG9uZSBvZiB0aGUgb3BlcmF0aW9ucy5cblxuTGVhcm4gbW9yZSBhYm91dCBtb3ZpbmcgcmVzb3VyY2VzOiBodHRwczovL2Nka3RuLmlvL2RvY3MvZXhhbXBsZXMtYW5kLWd1aWRlcy9yZWZhY3RvcmluZyM6fjp0ZXh0PU1vdmluZyUyMCUyNiUyMFJlbmFtaW5nJTIwUmVzb3VyY2VzJTIwV2l0aGluJTIwYSUyMFN0YWNrXG5gKTtcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlR2l2ZW5Ud29Nb3ZlT3BlcmF0aW9uc0J5SWQgPSAoXG4gIGlkOiBzdHJpbmcsXG4gIGV4aXN0aW5nTW92ZTogeyB0bzogc3RyaW5nOyBmcm9tOiBzdHJpbmcgfSxcbiAgbmV3TW92ZTogeyB0bzogc3RyaW5nOyBmcm9tOiBzdHJpbmcgfSxcbikgPT5cbiAgbmV3IEVycm9yKGBcblRoZSByZXNvdXJjZSAke2lkfSBoYXMgYmVlbiBnaXZlbiB0d28gZGlmZmVyZW50IG1vdmUgb3BlcmF0aW9ucy5cblxue1xuICBmcm9tOiAke2V4aXN0aW5nTW92ZS5mcm9tfVxuICB0bzogJHtleGlzdGluZ01vdmUudG99XG59XG57XG4gIGZyb206ICR7bmV3TW92ZS5mcm9tfVxuICB0bzogJHtuZXdNb3ZlLnRvfSAoUmVzb3VyY2UgY2FsbGluZyB0aGUgbW92ZSB0byBvcGVyYXRpb24pXG59XG5cbk9ubHkgb25lIG1vdmUgb3BlcmF0aW9uIGNhbiBvY2N1ciBwZXIgcGxhbi9hcHBseS4gUmVtb3ZlIG9uZSBvZiB0aGUgb3BlcmF0aW9ucy5cblxuTGVhcm4gbW9yZSBhYm91dCBtb3ZpbmcgcmVzb3VyY2VzOiBodHRwczovL2Nka3RuLmlvL2RvY3MvZXhhbXBsZXMtYW5kLWd1aWRlcy9yZWZhY3RvcmluZyM6fjp0ZXh0PU1vdmluZyUyMCUyNiUyMFJlbmFtaW5nJTIwUmVzb3VyY2VzJTIwV2l0aGluJTIwYSUyMFN0YWNrXG5gKTtcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlR2l2ZW5Ud29Nb3ZlT3BlcmF0aW9uc0J5VGFyZ2V0ID0gKFxuICByZXNvdXJjZUlkOiBzdHJpbmcsXG4gIGV4aXN0aW5nTW92ZVRhcmdldDogc3RyaW5nLFxuICBuZXdNb3ZlVGFyZ2V0OiBzdHJpbmcsXG4pID0+XG4gIG5ldyBFcnJvcihgVGhlIHJlc291cmNlICR7cmVzb3VyY2VJZH0gaGFzIGJlZW4gZ2l2ZW4gdHdvIGRpZmZlcmVudCBtb3ZlVGFyZ2V0czogXCIke25ld01vdmVUYXJnZXR9XCIgYW5kIFwiJHtleGlzdGluZ01vdmVUYXJnZXR9XCJcblxuQSByZXNvdXJjZSBjYW4gb25seSBiZSBtb3ZlZCBvbmNlIHBlciBwbGFuL2FwcGx5LlxuXG5MZWFybiBtb3JlIGFib3V0IG1vdmluZyByZXNvdXJjZXM6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9leGFtcGxlcy1hbmQtZ3VpZGVzL3JlZmFjdG9yaW5nIzp+OnRleHQ9TW92aW5nJTIwJTI2JTIwUmVuYW1pbmclMjBSZXNvdXJjZXMlMjBXaXRoaW4lMjBhJTIwU3RhY2tcbmApO1xuXG5leHBvcnQgY29uc3Qgc3RhY2tDb250YWluc0Rpc2FsbG93ZWRDaGFyID0gKFxuICBzdGFja0lkOiBzdHJpbmcsXG4gIGludmFsaWRDaGFyOiBzdHJpbmcsXG4pID0+XG4gIG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBUZXJyYWZvcm0gc3RhY2sgd2l0aCBpZCBcIiR7c3RhY2tJZH1cIi4gSXQgY29udGFpbnMgYW4gaW52YWxpZCBnbG9iIGNoYXJhY3RlcjogXCIke2ludmFsaWRDaGFyfVwiLlxuXG5HbG9iIGNoYXJhY3RlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gc3RhY2sgbmFtZXMgYmVjYXVzZSB3ZSB1c2UgdGhlbSB0byBkZXBsb3kgYW5kIGRlc3Ryb3kgbXVsdGlwbGUgc3RhY2tzLiBGb3IgZXhhbXBsZSwgJ2Nka3RuIGRlcGxveSBcXGAqLXByb2R1Y3Rpb25cXGAnIGRlcGxveXMgYWxsIHN0YWNrcyB3aXRoIG5hbWVzIHRoYXQgZW5kIGluICctcHJvZHVjdGlvbicuXG5gKTtcblxuZXhwb3J0IGNvbnN0IHN0YWNrSWRDb250YWluc1doaXRlc3BhY2UgPSAoc3RhY2tJZDogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYENhbm5vdCBjcmVhdGUgVGVycmFmb3JtU3RhY2sgd2l0aCBpZCBcIiR7c3RhY2tJZH1cIi4gSXQgY29udGFpbnMgYSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci5cblxuUGxlYXNlIHJlbW92ZSBhbnkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHlvdXIgVGVycmFmb3JtU3RhY2sgaWQsIGxpa2Ugc286IFwiJHtzdGFja0lkLnJlcGxhY2UoXG4gICAgL1xccy9nLFxuICAgIFwiXCIsXG4gICl9XCJcbmApO1xuXG5leHBvcnQgY29uc3Qgbm9TdGFja0ZvckNvbnN0cnVjdCA9IChjb25zdHJ1Y3RQYXRoOiBzdHJpbmcsIGhpbnQ6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBObyBzdGFjayBjb3VsZCBiZSBpZGVudGlmaWVkIGZvciB0aGUgY29uc3RydWN0IGF0IHBhdGggJyR7Y29uc3RydWN0UGF0aH0nJHtoaW50fVxuXG5Zb3UgY2FuIG9ubHkgdXNlIGNvbnN0cnVjdHMgYXMgcGFydCBvZiBhIFRlcnJhZm9ybVN0YWNrLlxuXG5UbyBsZWFybiBtb3JlIGFib3V0IENvbnN0cnVjdHMgdnMuIFRlcnJhZm9ybVN0YWNrcywgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9jb25zdHJ1Y3RzIzp+OnRleHQ9Q29uc3RydWN0cyUyMHZzLiUyMFN0YWNrc1xuYCk7XG5cbmV4cG9ydCBjb25zdCBzdGFja0hhc0NpcmN1bGFyRGVwZW5kZW5jeSA9IChcbiAgdGhpc1N0YWNrOiBUZXJyYWZvcm1TdGFjayxcbiAgZGVwZW5kZW5jeTogVGVycmFmb3JtU3RhY2ssXG4pID0+XG4gIG5ldyBFcnJvcihgQ2Fubm90IGFkZCBkZXBlbmRlbmN5ICR7ZGVwZW5kZW5jeX0gdG8gJHt0aGlzU3RhY2t9LCBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS5cblxuVGVycmFmb3JtU3RhY2sgJHtkZXBlbmRlbmN5fSBpcyBhbHJlYWR5IGRlcGVuZGVudCBvbiAke3RoaXNTdGFja30gZGlyZWN0bHksIG9yIGRlcGVuZGVudCBvbiBhIFRlcnJhZm9ybVN0YWNrIHdpdGhpbiAke3RoaXNTdGFja30uXG5cblRvIGxlYXJuIG1vcmUgYWJvdXQgY2lyY3VsYXIgZGVwZW5kZW5jeSByZWZlcmVuY2VzLCByZWZlciB0bzogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL3N0YWNrcyM6fjp0ZXh0PUNyb3NzJTJEU3RhY2slMjBSZWZlcmVuY2VzXG5gKTtcblxuZXhwb3J0IGNvbnN0IHN0YWNrVmFsaWRhdGlvbkZhaWx1cmUgPSAoZXJyb3JMaXN0OiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVmFsaWRhdGlvbiBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGVycm9yczpcXG4gICR7ZXJyb3JMaXN0fVxuXG5JZiB5b3Ugd2lzaCB0byBpZ25vcmUgdGhlc2UgdmFsaWRhdGlvbnMsIHBhc3MgJ3NraXBWYWxpZGF0aW9uOiB0cnVlJyB0byB5b3VyIEFwcCBjb25maWd1cmF0aW9uLlxuYCk7XG5cbmV4cG9ydCBjb25zdCBtYXRjaGVyc1BhdGhJc05vdERpcmVjdG9yeSA9IChmdW5jdGlvbk5hbWU6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBQYXRoIGlzIG5vdCBhIGRpcmVjdG9yeS5cblxuRW5zdXJlIHlvdSBhcmUgcGFzc2luZyB0aGUgcmVzdWx0IG9mIFRlc3RpbmcuZnVsbFN5bnRoKCdzdGFjayBpbnN0YW5jZScpIHRvICcke2Z1bmN0aW9uTmFtZX0nLCBub3QgVGVzdGluZy5zeW50aCgnc3RhY2sgaW5zdGFuY2UnKS5cblxuVGVzdGluZy5mdWxsU3ludGggcmV0dXJucyBhIGZpbGUgcGF0aCB0byBhIHRlbXBvcmFyeSB0ZXN0aW5nIGVudmlyb25tZW50LiBUZXN0aW5nLnN5bnRoIHJldHVybnMgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgeW91ciBzdGFjay5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCB0ZXN0aW5nIGluIENES1ROLCByZWZlciB0bzogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL3Rlc3QvdW5pdC10ZXN0c2ApO1xuXG5leHBvcnQgY29uc3QgbWF0Y2hlcnNGb3VuZEVycm9yc0luU3RhY2sgPSAoXG4gIGVycm9yQ291bnQ6IGFueSxcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gIGRpYWdub3N0aWNzOiBzdHJpbmcsXG4pID0+XG4gIG5ldyBFcnJvcihgRm91bmQgJHtlcnJvckNvdW50fSBFcnJvcnMgaW4gc3RhY2sgJHtzdGFja05hbWV9OiAke2RpYWdub3N0aWNzfVxuXG5UaGVzZSBlcnJvcnMgYXJlIG5vdCB0ZXN0IGZhaWx1cmVzLCBidXQgaXNzdWVzIHdpdGggdGhlIHVuZGVybHlpbmcgVGVycmFmb3JtU3RhY2sgYmVpbmcgdGVzdGVkLiBGaXggdGhlIGFib3ZlIGlzc3VlcyBiZWZvcmUgcnVubmluZyB5b3VyIHRlc3RzIGFnYWluLlxuYCk7XG5cbmV4cG9ydCBjb25zdCBqZXN0Tm90SW5zdGFudGlhdGVkID0gKCkgPT5cbiAgbmV3IEVycm9yKGBKZXN0IHdhcyBub3QgcHJvcGVybHkgaW5zdGFudGlhdGVkLlxuXG5FbnN1cmUgeW91IGhhdmUgYSAnc2V0dXAuanMnIGZpbGUgaW4geW91ciBwcm9qZWN0J3MgZGlyZWN0b3J5IHRoYXQgY2FsbHMgJ2Nka3RuLlRlc3Rpbmcuc2V0dXBKZXN0KCknLlxuXG5UbyBsZWFybiBtb3JlIGFib3V0IHNldHRpbmcgdXAgdGVzdGluZywgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy90ZXN0L3VuaXQtdGVzdHMjOn46dGV4dD1BZGQlMjBUZXN0aW5nJTIwdG8lMjBZb3VyJTIwQXBwbGljYXRpb25cbmApO1xuXG5leHBvcnQgY29uc3QgZXhwZWN0Tm90R2xvYmFsbHlBY2Nlc3NpYmxlID0gKCkgPT5cbiAgbmV3IEVycm9yKGBUaGUgZXhwZWN0IGZ1bmN0aW9uIGlzIG5vdCBnbG9iYWxseSBhY2Nlc3NpYmxlLlxuXG5UbyBsZWFybiBtb3JlIGFib3V0IHNldHRpbmcgdXAgdGVzdGluZywgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy90ZXN0L3VuaXQtdGVzdHMjOn46dGV4dD1BZGQlMjBUZXN0aW5nJTIwdG8lMjBZb3VyJTIwQXBwbGljYXRpb25cbmApO1xuXG5leHBvcnQgY29uc3QgaW52YWxpZFN0YWNrID0gKGZ1bmN0aW9uTmFtZTogc3RyaW5nLCBzdGFja0NvbnRlbnQ6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04gc3RyaW5nIHBhc3NlZDogJHtzdGFja0NvbnRlbnR9XG5cblxuRW5zdXJlIHlvdSBhcmUgcGFzc2luZyB0aGUgcmVzdWx0IG9mIFRlc3Rpbmcuc3ludGgoJ3N0YWNrIGluc3RhbmNlJykgdG8gJyR7ZnVuY3Rpb25OYW1lfScsIG5vdCBUZXN0aW5nLmZ1bGxTeW50aCgnc3RhY2sgaW5zdGFuY2UnKS5cblxuXG5UZXN0aW5nLnN5bnRoIHJldHVybnMgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgeW91ciBzdGFjay4gQ0RLVE4gY2FuIHVzZSBhc3NlcnRpb25zIHdpdGggdGhpcyBKU09OIHRvIGNoZWNrIHRoZSBjb21wb3NpdGlvbiBvZiB5b3VyIHN0YWNrcywgbGlrZSBzbzogXCJUZXN0aW5nLnRvSGF2ZVJlc291cmNlKFRlc3Rpbmcuc3ludGgoJ1RlcnJhZm9ybVN0YWNrIGluc3RhbmNlJyksIFMzQnVja2V0KVwiXG5cblRlc3RpbmcuZnVsbFN5bnRoIHJldHVybnMgYSBmaWxlIHBhdGggdG8gYSB0ZW1wb3JhcnkgdGVzdGluZyBlbnZpcm9ubWVudC5cblxuVG8gbGVhcm4gbW9yZSBhYm91dCB0ZXN0aW5nIGluIENES1ROLCByZWZlciB0bzogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL3Rlc3QvdW5pdC10ZXN0c1xuYCk7XG5cbmV4cG9ydCBjb25zdCB0YXJnZXROb3RSZXNvbHZhYmxlV2l0aE92ZXJyaWRlcyA9ICh0YXJnZXQ6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBUYXJnZXQgKCR7dGFyZ2V0fSkgY2Fubm90IGJlIGEgcmVzb2x2YWJsZSB0b2tlbiBpZiB5b3Ugc3BlY2lmaWVkIG92ZXJyaWRlcy4gUmVwbGFjZSB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHlvdSBhcmUgb3ZlcnJpZGluZyB3aXRoIGEgc3RhdGljIHZhbHVlLlxuXG5UbyBsZWFybiBtb3JlIGFib3V0IFRva2VucywgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy90b2tlbnNcbmApO1xuXG5leHBvcnQgY29uc3Qgc291cmNlT3JUYXJnZXROb3RBbk9iamVjdCA9IChcbiAgc291cmNlOiBzdHJpbmcsXG4gIHNvdXJjZVR5cGU6IHN0cmluZyxcbiAgdGFyZ2V0OiBzdHJpbmcsXG4gIHRhcmdldFR5cGU6IHN0cmluZyxcbikgPT5cbiAgbmV3IEVycm9yKGBBbiBpc3N1ZSBvY2N1cnJlZCBkdXJpbmcgdGhlIHN5bnRoZXNpemF0aW9uIG9mIHlvdXIgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24uXG5cbkJvdGggdGhlIHNvdXJjZSBlbGVtZW50ICgke3NvdXJjZX0pIGFuZCBpdHMgY29udGFpbmluZyB0YXJnZXQgZWxlbWVudCAoJHt0YXJnZXR9KSBtdXN0IGJlIG9iamVjdHMuXG5cblR5cGUgb2Ygc291cmNlOiAke3NvdXJjZVR5cGV9XG5UeXBlIG9mIHRhcmdldDogJHt0YXJnZXRUeXBlfVxuYCk7XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3REZXBlbmRlbmN5QmVsb3dWMTAgPSAoKSA9PlxuICBuZXcgRXJyb3IoYFZlcnNpb24gbWlzbWF0Y2ghIENES1ROIHZlcnNpb24gMC42IHJlcXVpcmVzIHlvdXIgY29uc3RydWN0cyB2ZXJzaW9uIHRvIGJlIHYxMCBvciBhYm92ZS5cblxuVXBkYXRlIHlvdXIgY29uc3RydWN0cyBkZXBlbmRlbmN5OiBodHRwczovL2Nka3RuLmlvL2RvY3MvcmVsZWFzZS91cGdyYWRlLWd1aWRlLXYwLTZcbmApO1xuXG5leHBvcnQgY29uc3QgY2xvdWRCYWNrZW5kV29ya3NwYWNlSXNOb3REZWZpbmVkQnlOYW1lID0gKCkgPT5cbiAgbmV3IEVycm9yKGBUaGUgQ2xvdWQgYmFja2VuZCBvbmx5IHN1cHBvcnRzIGNyb3NzLXN0YWNrIHJlZmVyZW5jZXMgaWYgdGhlIHdvcmtzcGFjZSBpcyBkZWZpbmVkIGJ5IG5hbWUgKG5vdCBieSB0YWdzKS5cblxuVG8gdXNlIGNyb3NzLXN0YWNrIHJlZmVyZW5jZXMsIHJlcGxhY2UgYWxsIG1lbnRpb25zIG9mICdUYWdnZWRDbG91ZFdvcmtzcGFjZXMnIHdpdGggJ05hbWVkQ2xvdWRXb3Jrc3BhY2UnLCBsaWtlIHNvOlxuXG5uZXcgQ2xvdWRCYWNrZW5kKHN0YWNrLCB7XG4gIC4uLlxuICB3b3Jrc3BhY2VzOiBuZXcgTmFtZWRDbG91ZFdvcmtzcGFjZShcIm15LWFwcFwiKSxcbn0pO1xuXG5UbyBsZWFybiBtb3JlIGFib3V0IFJlbW90ZSBCYWNrZW5kcywgcmVmZXIgdG86IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9yZW1vdGUtYmFja2VuZHNcbmApO1xuXG5leHBvcnQgY29uc3QgdmFsdWVDb250YWluc1VuZXNjYXBlZFF1b3RlcyA9ICh2YWx1ZTogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFlvdXIgdmFsdWUsICcke3ZhbHVlfScsIGhhcyB1bmVzY2FwZWQgZG91YmxlIHF1b3RlcyBpbiBpdCwgc28gaXQgY2Fubm90IGJlIHVzZWQgYXMgYSB2YWx1ZS5cblxuVG8gc2FmZWx5IHVzZSB0aGUgdmFsdWUsIHVzZSBGbi5yYXdTdHJpbmcgb24geW91ciBzdHJpbmcsIGxpa2Ugc286XG5cbkZuLnJhd1N0cmluZygnJHt2YWx1ZX0nKVxuXG5Eb2luZyB0aGlzIGVuc3VyZXMgQ0RLVE4gYW5kIFRlcnJhZm9ybSBpbnRlcnByZXQgeW91ciB2YWx1ZXMgY29ycmVjdGx5LlxuXG5UbyBsZWFybiBtb3JlIGFib3V0IGJ1aWx0IGluIFRlcnJhZm9ybSBmdW5jdGlvbnMgd2l0aGluIENES1ROLCByZWZlciB0bzogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL2Z1bmN0aW9uc1xuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGVuY291bnRlcmVkQW5ub3RhdGlvbldpdGhMZXZlbEVycm9yID0gKGVycm9yczogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoYEVuY291bnRlcmVkIEFubm90YXRpb25zIHdpdGggbGV2ZWwgXCJFUlJPUlwiOlxcbiR7ZXJyb3JzfVxuXG5FaXRoZXIgZml4IHRoZSBpc3N1ZXMgYWJvdmUsIG9yIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQ0RLVEZfQ09OVElOVUVfU1lOVEhfT05fRVJST1JfQU5OT1RBVElPTlMgdG8gaWdub3JlIHRoZXNlIGFubm90YXRpb25zLlxuYCk7XG5cbmV4cG9ydCBjb25zdCB2YWx1ZUlzSW52YWxpZFN0cmluZ09yVG9rZW4gPSAodmFsdWU6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGAnJHt2YWx1ZX0nIGlzIG5vdCBhIHZhbGlkIHN0cmluZyBub3IgYSB0b2tlbi4gVGhpcyBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgc3RyaW5ncyBvciB0b2tlbnMgcmVzb2x2aW5nIHRvIHN0cmluZ3MuIFBsZWFzZSBjaGFuZ2UgeW91ciBjb2RlIGFjY29yZGluZ2x5LmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCB2YWx1ZUlzSW52YWxpZE51bWJlck9yVG9rZW4gPSAodmFsdWU6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKFxuICAgIGAke3ZhbHVlfSBpcyBub3QgYSB2YWxpZCBudW1iZXIgbm9yIGEgdG9rZW4uIFRoaXMgZnVuY3Rpb24gb25seSBhY2NlcHRzIG51bWJlcnMgb3IgdG9rZW5zIHJlc29sdmluZyB0byBudW1iZXJzLiBQbGVhc2UgY2hhbmdlIHlvdXIgY29kZSBhY2NvcmRpbmdseS5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgbGlzdEVsZW1lbnRJc09mV3JvbmdUeXBlID0gKFxuICB2YWx1ZTogYW55W10sXG4gIHBvc2l0aW9uOiBudW1iZXIsXG4gIGVycm9yOiB1bmtub3duLFxuKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYEVsZW1lbnQgaW4gbGlzdCAke3ZhbHVlfSBhdCBwb3NpdGlvbiAke3Bvc2l0aW9ufSBpcyBub3QgdGhlIHJpZ2h0IHR5cGU6ICR7ZXJyb3J9LlxuICAgIFBsZWFzZSBlbnN1cmUgYWxsIGVsZW1lbnRzIGluIHRoZSBsaXN0IGFyZSB0aGUgY29ycmVjdCB0eXBlIGZvciB0aGlzIGZ1bmN0aW9uLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBmdW5jdGlvblJlY2VpdmVkV3JvbmdOdW1iZXJPZkFyZ3MgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgYXJnVmFsaWRhdG9yc0xlbmd0aDogbnVtYmVyLFxuICBhcmdzTGVuZ3RoOiBudW1iZXIsXG4pID0+XG4gIG5ldyBFcnJvcihcbiAgICBgRnVuY3Rpb24gJHtuYW1lfSB0YWtlcyAke2FyZ1ZhbGlkYXRvcnNMZW5ndGh9IGFyZ3VtZW50cywgYnV0ICR7YXJnc0xlbmd0aH0gd2VyZSBwcm92aWRlZC4gUGxlYXNlIGFkZCB0aGUgbWlzc2luZyBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uLmAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCBmdW5jdGlvbkFyZ3VtZW50VmFsaWRhdGlvbkZhaWx1cmUgPSAoXG4gIGFyZ051bWJlcjogbnVtYmVyLFxuICBuYW1lOiBzdHJpbmcsXG4gIGVycm9yOiB1bmtub3duLFxuKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYEFyZ3VtZW50ICR7YXJnTnVtYmVyfSBvZiAke25hbWV9IGZhaWxlZCB0aGUgdmFsaWRhdGlvbjogJHtlcnJvcn0uIFBsZWFzZSBjaGFuZ2UgeW91ciBjb2RlIHRvIHBhc3MgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBhcmd1bWVudC5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgY2Fubm90Q2FsY0lkRm9yRW1wdHlTZXRPZkNvbXBvbmVudHMgPSAoKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFVuYWJsZSB0byBjYWxjdWxhdGUgYSB1bmlxdWUgaWQgZm9yIGFuIGVtcHR5IHNldCBvZiBjb21wb25lbnRzLlxuXG4gICAgVGhpcyBoYXBwZW5zIHdoZW4geW91IGF0dGVtcHQgdG8gY3JlYXRlIGEgdW5pcXVlIGlkLCBidXQgZG8gbm90IHBhc3MgaW4gYW55IGNvbnN0cnVjdCBub2RlIGlkcy4gVGhpcyBtZWFucyB5b3VyIGNvbnN0cnVjdCBsaWtlbHkgaGFzIG5vIHBhcmVudCwgd2hpY2ggaXMgbm90IGFsbG93ZWQuXG5cbiAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdXIgY29uc3RydWN0IGhhcyBhIHBhcmVudC4gRm9yIGV4YW1wbGU6ICduZXcgQXBwKHRoaXMpJyBvciAnbmV3IFRlcnJhZm9ybVN0YWNrKHRoaXMsICdzdGFjaycpJy5gLFxuICApO1xuXG5leHBvcnQgY29uc3Qgc3RyaW5nVmFsdWVBZGRlZFRvUmVmZXJlbmNlTGlzdCA9IChsaXN0VG9rZW46IHN0cmluZ1tdKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYENhbm5vdCBhZGQgZWxlbWVudHMgdG8gbGlzdCB0b2tlbiwgZ290OiAke2xpc3RUb2tlbn0uXG5cbiAgICBXZSBleHBlY3QgdGhlIGVsZW1lbnRzIG9mIGEgdG9rZW5pemVkIHN0cmluZyBhcnJheSB0byBiZSBhIHNpbmdsZSB0b2tlbiBzdHJpbmcuIEZvciBleGFtcGxlLCBbXCIme1RmVG9rZW5bVG9rZW4uMV19XCJdLlxuXG4gICAgT25lIGVsZW1lbnQgaW4geW91ciBhcnJheSBjb25zaXN0cyBvZiBtb3JlIHRoYW4gYSBzaW5nbGUgdmFsdWUuIFRvIGFkZCB2YWx1ZXMgdG8gYSB0b2tlbml6ZWQgbGlzdCwgdXNlIFRlcnJhZm9ybSBmdW5jdGlvbnMgaW5zdGVhZC4gRm9yIGV4YW1wbGU6ICdGbi5jb25jYXQoW3lvdXJSZWZlcmVuY2VkTGlzdCwgW1wibXlcIiwgXCJuZXdcIiwgXCJpdGVtc1wiXV0pJy5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgY2Fubm90Q29uY2F0ZW5hdGVTdHJpbmdzSW5Ub2tlbml6ZWRTdHJpbmdBcnJheSA9IChcbiAgbGlzdFRva2VuOiBzdHJpbmcsXG4pID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQ2Fubm90IGNvbmNhdGVuYXRlIHN0cmluZ3MgaW4gYSB0b2tlbml6ZWQgc3RyaW5nIGFycmF5LCBnb3Q6ICR7bGlzdFRva2VufS5cblxuICAgIFdlIGV4cGVjdCB0aGUgZWxlbWVudHMgb2YgYSB0b2tlbml6ZWQgc3RyaW5nIGFycmF5IHRvIGJlIGEgc2luZ2xlIHRva2VuIHN0cmluZy4gRm9yIGV4YW1wbGUsIFtcIiZ7VGZUb2tlbltUb2tlbi4xXX1cIl0uIE9uZSBlbGVtZW50IGluIHlvdXIgYXJyYXkgY29uc2lzdHMgb2Ygc29tZXRoaW5nIG90aGVyIHRoYW4gYSBzaW5nbGUgdG9rZW4uXG5cbiAgICBZb3UgYXJlIGxpa2VseSBtdXRhdGluZyB0aGUgdmFsdWUgaW5zaWRlIHlvdXIgYXJyYXksIHdoaWNoIENES1ROIGNhbm5vdCByZXNvbHZlIGludG8gdGhlIGFwcHJvcHJpYXRlIHJ1bnRpbWUgdmFsdWUuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IG51bWJlclZhbHVlQWRkZWRUb1JlZmVyZW5jZUxpc3QgPSAobGlzdFRva2VuOiBudW1iZXJbXSkgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBDYW5ub3QgYWRkIGVsZW1lbnRzIHRvIGxpc3QgdG9rZW4sIGdvdDogJHtsaXN0VG9rZW59LlxuXG4gICAgV2UgdXNlIHRva2VucyB0byByZXByZXNlbnQgcnVudGltZSB2YWx1ZXMgKGUuZy4sIHJlZmVyZW5jZXMgdG8gYXR0cmlidXRlcyBvZiByZXNvdXJjZSBvciBkYXRhIHNvdXJjZXMpLiBMaXN0IHRva2VucyBkb24ndCBjb250YWluIHRoZSBhY3R1YWwgdmFsdWVzIGJlY2F1c2UgdGhvc2UgYXJlIG9ubHkgYXZhaWxhYmxlIGF0IGFwcGx5IHRpbWUsIHdoZXJlYXMgdG9rZW5zIGFyZSBwcmVzZW50IGR1cmluZyBjb21waWxlIHRpbWUuXG5cbiAgICBJZiB5b3Ugd2FudCB0byBhZGQgYSB2YWx1ZSB0byBhIHRva2VuaXplZCBsaXN0LCB1c2UgYSBUZXJyYWZvcm0gZnVuY3Rpb24gaW5zdGVhZC4gRm9yIGV4YW1wbGU6IEZuLmNvbmNhdChbeW91clJlZmVyZW5jZWRMaXN0LCBbNDIsIDQzLCA0NF1dKS5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgbWFwVmFsdWVBZGRlZFRvUmVmZXJlbmNlTGlzdCA9IChtYXBUb2tlbjogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYENhbm5vdCBhZGQgZWxlbWVudHMgdG8gbWFwIHRva2VuLCBnb3Q6ICR7bWFwVG9rZW59LiBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IG1lcmdlIG11bHRpcGxlIG1hcHMsIG9yIGlmIHlvdSBhZGQgYSBuZXcga2V5IHZhbHVlIHBhaXIgdG8gdGhlIG1hcCB0b2tlbi5cblxuICAgIFdlIHVzZSB0b2tlbnMgdG8gcmVwcmVzZW50IHJ1bnRpbWUgdmFsdWVzIChlLmcuLCByZWZlcmVuY2VzIHRvIGF0dHJpYnV0ZXMgb2YgcmVzb3VyY2Ugb3IgZGF0YSBzb3VyY2VzKS4gTGlzdCB0b2tlbnMgZG9uJ3QgY29udGFpbiB0aGUgYWN0dWFsIHZhbHVlcyBiZWNhdXNlIHRob3NlIGFyZSBvbmx5IGF2YWlsYWJsZSBhdCBhcHBseSB0aW1lLCB3aGVyZWFzIHRva2VucyBhcmUgcHJlc2VudCBkdXJpbmcgY29tcGlsZSB0aW1lLlxuXG4gICAgSW5zdGVhZCBvZiBhZGRpbmcgdGhlIHZhbHVlIHRvIHRoZSB0b2tlbml6ZWQgbWFwLCB1c2UgYSBUZXJyYWZvcm0gZnVuY3Rpb24uIEZvciBleGFtcGxlOiBGbi5tZXJnZShbeW91clJlZmVyZW5jZWRNYXAsIHsgeW91cjogJ3ZhbHVlJyB9XSkuIFRoaXMgY3JlYXRlcyBhIG5ldyBtYXAgVG9rZW4gZm9yIGEgdmFsdWUsIHdoaWNoIGNvdWxkIGdldCByZW5kZXJlZCBhczpcbiAgICBtZXJnZShteV9yZXNvdXJjZS5yZXNvdXJjZV9uYW1lLm9uZV9zcGVjaWZpY19tYXBfYXR0cmlidXRlLCB7IHlvdXI6ICcgdmFsdWUnIH0pYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGNhbm5vdENvbmNhdGVuYXRlU3RyaW5nc0luVG9rZW5pemVkTWFwID0gKHRva2VuaXplZE1hcDogYW55KSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYENhbm5vdCBjb25jYXRlbmF0ZSBzdHJpbmdzIGluIGEgdG9rZW5pemVkIG1hcCwgZ290OiAke3Rva2VuaXplZE1hcH0uXG5cbiAgICBXZSBleHBlY3QgdGhlIGVsZW1lbnRzIG9mIGEgdG9rZW5pemVkIHN0cmluZyBhcnJheSB0byBiZSBhIHNpbmdsZSB0b2tlbiBzdHJpbmcuIEZvciBleGFtcGxlLCBbXCIme1RmVG9rZW5bVG9rZW4uMV19XCJdLiBBIGtleSBpbiB5b3VyIG1hcCBjb25zaXN0cyBvZiBtb3JlIHRoYW4gYSBzdHJpbmcgdG9rZW4gKGUuZy4sIHRoZSBUb2tlbiBhbmQgYSBzdGF0aWMgc3RyaW5nIG9yIG11bHRpcGxlIFRva2VucykuXG5cbiAgICBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IG11dGF0ZSB0aGUga2V5IG9mIHRoZSBtYXAuIERvIG5vdCBtdXRhdGUgdG9rZW5pemVkIE1hcHMsIGJlY2F1c2UgaXQgbWFrZXMgaXQgaW1wb3NzaWJsZSBmb3IgQ0RLVE4gdG8gdHJhbnNsYXRlIHRoZW0uYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGRvZXNOb3RJbXBsZW1lbnREZXBlbmRhYmxlVHJhaXQgPSAoaW5zdGFuY2U6IElEZXBlbmRhYmxlKSA9PlxuICBuZXcgRXJyb3IoYCR7aW5zdGFuY2V9IGRvZXMgbm90IGltcGxlbWVudCBEZXBlbmRhYmxlVHJhaXRgKTtcblxuZXhwb3J0IGNvbnN0IGNhbk9ubHlFbmNvZGVQb3NpdGl2ZUludGVnZXJzID0gKCkgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBDYW4gb25seSBlbmNvZGUgcG9zaXRpdmUgaW50ZWdlcnMgaW50byBUb2tlbnMuIFRoaXMgaXMgYSBidWcgaW4gQ0RLVE4sIHBsZWFzZSBmaWxlIGEgYnVnIHJlcG9ydC5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgaW5kZXhUb29MYXJnZVRvRW5jb2RlID0gKGluZGV4OiBudW1iZXIpID0+XG4gIG5ldyBFcnJvcihcbiAgICBgUmVjZWl2ZWQgYW4gaW5kZXggdG9vIGxhcmdlIHRvIGVuY29kZSBpbnRvIGEgVG9rZW4gOiR7aW5kZXh9LlxuXG4gICAgVGhpcyBoYXBwZW5zIGlmIHlvdSBoYXZlIHRvbyBtYW55IFRva2VucyBpbiBhIHNpbmdsZSBDREtUTiBhcHBsaWNhdGlvbi4gVGhpcyBjYW4gYWxzbyBvY2N1ciBpZiB5b3UgYXJlIGFjY2lkZW50YWxseSBjcmVhdGluZyBudW1lcmljIHRva2VucyBpbiBhbiBpbmZpbml0ZSBsb29wLiBGb3IgZXhhbXBsZSwgY2FsbGluZyAnVG9rZW4uYXNOdW1iZXIoKScgdG9vIG1hbnkgdGltZXMuXG5cbiAgICBJZiB5b3UgcmVhY2ggdGhlIG1heGltdW0gbnVtYmVyIG9mIGFsbG93ZWQgVG9rZW5zIChhIGxpbWl0YXRpb24gaW1wb3NlZCBieSB0aGUgd2F5IHdlIGVuY29kZSBUb2tlbnMgYW5kIHNlcGFyYXRlIHRoZW0gZnJvbSByZWFsIG51bWVyaWMgdmFsdWVzKSB5b3UgY2FuIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUgYnkgZGl2aWRpbmcgYSBzaW5nbGUgYXBwbGljYXRpb24gaW50byBtdWx0aXBsZSBhcHBsaWNhdGlvbnMuYCxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGFyZ1RvSW50cmluc2ljTXVzdEJlUGxhaW5WYWx1ZSA9IChcbiAgdmFsdWU6IGFueSxcbiAgY3JlYXRpb25TdGFjazogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4pID0+IHtcbiAgY29uc3QgY3JlYXRlZEF0ID0gY3JlYXRpb25TdGFjaz8ubGVuZ3RoXG4gICAgPyBgIGNyZWF0ZWQgYXQ6XFxuJHtjcmVhdGlvblN0YWNrLmpvaW4oXCJcXG5cIil9YFxuICAgIDogXCJcIjtcbiAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICBgWW91IGNhbiBvbmx5IHVzZSBhIHBsYWluIHZhbHVlIChub3QgYSBmdW5jdGlvbikgd2hpbGUgY3JlYXRpbmcgYW4gSW50cmluc2ljIHRva2VuLiBXZSByZWNlaXZlZCB0aGUgdmFsdWUgJyR7dmFsdWV9JyR7Y3JlYXRlZEF0fS4gSWYgeW91IHdhbnQgdG8gdXNlIGEgZnVuY3Rpb24sIHBsZWFzZSB1c2UgdGhlIExhenkgY2xhc3MuIEZvciBleGFtcGxlOiAgTGF6eS5hbnlWYWx1ZSh7IHByb2R1Y2U6ICgpID0+IFwiSGVsbG8gV29ybGRcIiB9KS5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVuYWJsZVRvUmVzb2x2ZUNpcmN1bGFyUmVmZXJlbmNlID0gKHBhdGhOYW1lOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVW5hYmxlIHRvIHJlc29sdmUgb2JqZWN0IHRyZWUgd2l0aCBjaXJjdWxhciByZWZlcmVuY2UgYXQgJyR7cGF0aE5hbWV9Jy5cblxuVGhlIGRlcHRoIG9mIHlvdXIgb2JqZWN0IHRyZWUgaXMgb3ZlciAyMDAsIGluZGljYXRpbmcgeW91IHByb2JhYmx5IGhhdmUgYSBjeWNsaWNhbCByZWZlcmVuY2UuIEluc3BlY3QgdGhlIGNvbnN0cnVjdCBjcmVhdGluZyB0aGlzIGN5Y2xpYyByZWZlcmVuY2UgKG1vc3QgbGlrZWx5IGluICcke3BhdGhOYW1lfScpIGFuZCBlbnN1cmUgaXQgZG9lcyBub3QgaW5maW5pdGVseSBuZXN0IGNvbnN0cnVjdHMuYCk7XG5cbmV4cG9ydCBjb25zdCBjYW5ub3RSZXNvbHZlRnVuY3Rpb24gPSAocGF0aE5hbWU6IHN0cmluZywgb2JqOiBhbnkpID0+XG4gIG5ldyBFcnJvcihgVHJ5aW5nIHRvIHJlc29sdmUgYSBub24tZGF0YSBvYmplY3QgKGUuZy4sIGEgZnVuY3Rpb24pIGF0ICcke3BhdGhOYW1lfSc6ICR7b2JqfS4gT25seSB0b2tlbnMgYXJlIHN1cHBvcnRlZCBmb3IgbGF6eSBldmFsdWF0aW9uLlxuXG5JZiB5b3Ugd2FudCB0byB1c2UgYSBsYXppbHkgY29tcHV0ZWQgdmFsdWUsIHVzZSB0aGUgTGF6eSBjbGFzcy4gRm9yIGV4YW1wbGU6ICBMYXp5LnN0cmluZ1ZhbHVlKHsgcHJvZHVjZTogKCkgPT4gXCJIZWxsbyBXb3JsZFwiIH0pYCk7XG5cbmNvbnN0IExJU1RfRVJST1JfRVhQTEFOQVRJT04gPSBgSW4gQ0RLVE4sIHdlIHJlcHJlc2VudCBsaXN0cywgd2l0aCB2YWx1ZXMgdW5rbm93biB1bnRpbCBhZnRlciBydW50aW1lLCBhcyBhcnJheXMgd2l0aCBhIHNpbmdsZSBlbGVtZW504oCUIGEgc3RyaW5nIHRva2VuIChbXCJUb2tlbi4xXCJdKS5cblxuXG5XZSBkbyB0aGlzIGJlY2F1c2UgQ0RLVE4gZG9lcyBub3Qga25vdyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGF0IGNvbXBpbGUgdGltZSwgbWVhbmluZyBDREtUTiBoYXMgeWV0IHRvIGludm9rZSBUZXJyYWZvcm0gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgY2xvdWQgcHJvdmlkZXIuIENES1ROIGxhdGVyIGludm9rZXMgVGVycmFmb3JtIG9uIHRoZSBzeW50aGVzaXplZCBzdGF0aWMgSlNPTiBmaWxlLlxuXG5CZWNhdXNlIHdlIGRvbid0IGtub3cgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCwgd2UgY2FuIG5vdCBkaWZmZXJlbnRpYXRlIGlmIHRoZSBsaXN0IHdhcyBhY2Nlc3NlZCBhdCB0aGUgZmlyc3Qgb3IgbGFzdCBpbmRleCwgb3IgYXMgcGFydCBvZiBhIGxvb3AuIFRvIGF2b2lkIHRoaXMgYW1iaWd1aXR5OlxuXG4tIElmIHlvdSB3YW50IHRvIGFjY2VzcyBhIHNpbmd1bGFyIGl0ZW0sIHVzZSAnRm4uZWxlbWVudChsaXN0LCAwKScuIERvIG5vdCB1c2UgJ2xpc3RbMF0nLlxuLSBJZiB5b3Ugd2FudCB0byBsb29wIG92ZXIgdGhlIGxpc3QgdXNlICdUZXJyYWZvcm1JdGVyYXRvci5mcm9tTGlzdChsaXN0KScuIERvIG5vdCB1c2UgYSAnZm9yJyBvciAnZm9yRWFjaCcgbG9vcC5cblxuTGVhcm4gbW9yZSBhYm91dCB0b2tlbnM6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy90b2tlbnNcbkxlYXJuIG1vcmUgYWJvdXQgaXRlcmF0b3JzOiBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvaXRlcmF0b3JzYDtcblxuY29uc3QgTUFQX0VSUk9SX0VYUExBTkFUSU9OID0gYFxuSW4gQ0RLVE4sIHdlIHJlcHJlc2VudCBtYXBzLCB3aXRoIHZhbHVlcyB1bmtub3duIHVudGlsIGFmdGVyIHJ1bnRpbWUsIGFzIG9iamVjdHMgd2l0aCBhIHNpbmdsZSBrZXktdmFsdWUgcGFpciB3aGVyZSB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgdG9rZW4uIEZvciBleGFtcGxlOiAneyBcIiZ7VGZUb2tlbltUb2tlbi4xXX1cIjogXCJTdHJpbmcgTWFwIFRva2VuIFZhbHVlXCIgfScuXG5cbldlIGRvIHRoaXMgYmVjYXVzZSBDREtUTiBkb2VzIG5vdCBrbm93IHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXQgY29tcGlsZSB0aW1lLCBtZWFuaW5nIENES1ROIGhhcyB5ZXQgdG8gaW52b2tlIFRlcnJhZm9ybSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBjbG91ZCBwcm92aWRlci4gQ0RLVE4gbGF0ZXIgaW52b2tlcyBUZXJyYWZvcm0gb24gdGhlIHN5bnRoZXNpemVkIHN0YXRpYyBKU09OIGZpbGUuXG5cbkJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB0aGUgY29udGVudHMgb2YgdGhlIG1hcCwgd2UgY2FuIG5vdCBkaWZmZXJlbnRpYXRlIGlmIHRoZSBtYXAgd2FzIGFjY2Vzc2VkLCBvciB1c2VkIGFzIHBhcnQgb2YgYSBsb29wLiBUbyBhdm9pZCB0aGlzIGFtYmlndWl0eTpcblxuLSBUbyBhY2Nlc3MgYSBzaW5ndWxhciBpdGVtIHVzZSAnRm4ubG9va3VwKG1hcCwga2V5KScuIERvIG5vdCB1c2UgJ21hcFtrZXldJy5cbi0gSWYgeW91IHdhbnQgdG8gbG9vcCBvdmVyIHRoZSBtYXAgdXNlICdUZXJyYWZvcm1JdGVyYXRvci5mcm9tTWFwKG1hcCknLiBEbyBub3QgdXNlIGEgJ2ZvcicgbG9vcCBvciBpdGVyYXRlIG92ZXIgJ09iamVjdC5lbnRyaWVzKG1hcCknIHdpdGggJ2ZvckVhY2gnLlxuXG5MZWFybiBtb3JlIGFib3V0IHRva2VuczogaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL3Rva2Vuc1xuTGVhcm4gbW9yZSBhYm91dCBpdGVyYXRvcnM6IGh0dHBzOi8vY2RrdG4uaW8vZG9jcy9jb25jZXB0cy9pdGVyYXRvcnNgO1xuXG5leHBvcnQgY29uc3QgZW5jb2RlZExpc3RUb2tlbkluU2NhbGFyU3RyaW5nQ29udGV4dCA9ICgpID0+XG4gIG5ldyBFcnJvcihgRm91bmQgYW4gZW5jb2RlZCBsaXN0IHRva2VuIHN0cmluZyBpbiBhIHNjYWxhciBzdHJpbmcgY29udGV4dC5cbiR7TElTVF9FUlJPUl9FWFBMQU5BVElPTn1gKTtcblxuZXhwb3J0IGNvbnN0IGVuY29kZWRNYXBUb2tlbkluU2NhbGFyU3RyaW5nQ29udGV4dCA9ICgpID0+XG4gIG5ldyBFcnJvcihgRm91bmQgYW4gZW5jb2RlZCBtYXAgdG9rZW4gaW4gYSBzY2FsYXIgc3RyaW5nIGNvbnRleHQuXG4ke01BUF9FUlJPUl9FWFBMQU5BVElPTn1gKTtcblxuZXhwb3J0IGNvbnN0IGVuY29kZWRNYXBUb2tlbkluU2NhbGFyTnVtYmVyQ29udGV4dCA9ICgpID0+XG4gIG5ldyBFcnJvcihgRm91bmQgYW4gZW5jb2RlZCBtYXAgdG9rZW4gaW4gYSBzY2FsYXIgbnVtYmVyIGNvbnRleHQuXG4ke01BUF9FUlJPUl9FWFBMQU5BVElPTn1gKTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdHNDYW5ub3RCZVJlc29sdmVkID0gKHBhdGhOYW1lOiBzdHJpbmcpID0+XG4gIG5ldyBFcnJvcihgVHJ5aW5nIHRvICdyZXNvbHZlKCknIGEgQ29uc3RydWN0IGF0ICcke3BhdGhOYW1lfScuXG5cblRoaXMgb2Z0ZW4gbWVhbnMgYW4gdW5pbnRlbmRlZCBjeWNsaWMgZGVwZW5kZW5jeSBpbiB5b3VyIGNvbnN0cnVjdCB0cmVlLCBsZWFkaW5nIHRvIHRoZSByZXNvbHV0aW9uIHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3AgdGhhdCBmYWlscy5cblRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgc2NvcGUgcGFzc2VkIGludG8gdGhpcyBjb25zdHJ1Y3QgaXMgYWxzbyBwYXJ0IG9mIGl0cyBzdWJ0cmVlLlxuXG5UbyByZXNvbHZlIHRoaXMgaXNzdWUsIHJlZmFjdG9yIHlvdXIgY29kZSB0byBhdm9pZCB0aGlzIGN5Y2xpYyBkZXBlbmRlbmN5IGJ5IGNoYW5naW5nIHRoZSBzY29wZSBvZiB0aGlzIGNvbnN0cnVjdC5gKTtcblxuZXhwb3J0IGNvbnN0IG1hcEtleU11c3RSZXNvbHZlVG9TdHJpbmcgPSAoXG4gIHBhdGhOYW1lOiBzdHJpbmcsXG4gIGtleTogc3RyaW5nLFxuICByZXNvbHZlZEtleTogYW55LFxuKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYEF0IFwiJHtwYXRoTmFtZX1cIiBhIG1hcCB1c2VzIHRoZSBrZXkgXCIke2tleX1cIiwgbWVhbmluZyB0aGF0IGtleSBtdXN0IHJlc29sdmUgdG8gYSBzdHJpbmcuIEhvd2V2ZXIsIGl0IHJlc29sdmVzIHRvIGEgJHt0eXBlb2YgcmVzb2x2ZWRLZXl9IHdpdGggdGhlIHZhbHVlICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICByZXNvbHZlZEtleSxcbiAgICApfS4gVG8gZml4IHRoaXMsIGNoYW5nZSB0aGUgVG9rZW4gdG8gcmVzb2x2ZSB0byBhIHN0cmluZy5gLFxuICApO1xuXG5jb25zdCB1bmtub3duVG9rZW5FeHBsYW5hdGlvbiA9IGBUaGlzIG1lYW5zIHlvdSBhcmUgdHJ5aW5nIHRvIGFjY2VzcyBhIFRva2VuIHZhbHVlIHRoYXQgZG9lcyBub3QgZXhpc3QuIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBUb2tlbiBpcyBmcm9tIGFub3RoZXIgQ0RLIChpLmUuLCBBV1MgQ0RLLCBDREs4cywgZXRjLikgYW5kIGlzIHVua25vd24gdG8gdGhpcyBDREtUTiBBcHBsaWNhdGlvbi4gWW91IGVpdGhlciBuZWVkIHRvIG1ha2UgdGhlIG90aGVyIENESyByZXNvbHZlIHRoaXMgVG9rZW4gYmVmb3JlIENES1ROIHRyaWVzIHRvIHJlc29sdmUgaXQsIG9yIHdvcmsgYXJvdW5kIHVzaW5nIHRoaXMgVG9rZW4gYXQgYWxsLlxuXG5JZiB0aGlzIGVycm9yIG9jY3VycyB3aXRob3V0IGFub3RoZXIgQ0RLIChvciBhIHZhbHVlIGxvb2tpbmcgbGlrZSBhIFRva2VuKSBpbnZvbHZlZCwgcGxlYXNlIGZpbGUgYSBidWcuYDtcblxuZXhwb3J0IGNvbnN0IHVua25vd25OdW1iZXJUb2tlbkZvdW5kID0gKCkgPT5cbiAgbmV3IEVycm9yKFxuICAgIGBFbmNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIHVua25vd24gbnVtYmVyIFRva2VuIGZvdW5kLiAke3Vua25vd25Ub2tlbkV4cGxhbmF0aW9ufWAsXG4gICk7XG5cbmV4cG9ydCBjb25zdCB1bnJlY29nbml6ZWRUb2tlbktleSA9IChrZXk6IHN0cmluZykgPT5cbiAgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgVG9rZW4gS2V5ICcke2tleX0nLiAke3Vua25vd25Ub2tlbkV4cGxhbmF0aW9ufWApO1xuXG5leHBvcnQgY29uc3QgSWRJbmNsdWRlc1VucmVzb2x2ZWRUb2tlbnMgPSAodW5yZXNvbHZlZFRva2Vuczogc3RyaW5nKSA9PlxuICBuZXcgRXJyb3IoXG4gICAgYFRoaXMgY29uc3RydWN0IChvciBpdHMgcGFyZW50IGNvbnN0cnVjdCkgaXMgY29uZmlndXJlZCB3aXRoIGFuIElEIHRoYXQgY29udGFpbnMgYSBUb2tlbjogJHt1bnJlc29sdmVkVG9rZW5zfS4gVGhpcyBpcyBub3QgYWxsb3dlZCBiZWNhdXNlIElEcyBtdXN0IGJlIGtub3duIHN0YXRpY2FsbHkgZHVyaW5nIHN5bnRoZXNpcy4gVG9rZW4gdmFsdWVzIGFyZSBvbmx5IGtub3duIGR1cmluZyB0aGUgYXBwbHkgc3RhZ2UsIHRoZXJlZm9yZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGluIElEcy4gUGxlYXNlIHVzZSBhIGNvbmNyZXRlIHZhbHVlIGZvciB5b3VyIGNvbnN0cnVjdHMgSUQgaW5zdGVhZC5gLFxuICApO1xuXG5leHBvcnQgY29uc3QgYXNzZXRDYW5Ob3RDcmVhdGVaaXBBcmNoaXZlID0gKFxuICBzcmM6IHN0cmluZyxcbiAgZGVzdDogc3RyaW5nLFxuICBlcnJvcjogRXJyb3IsXG4pID0+XG4gIG5ldyBFcnJvcihcbiAgICBgQSBUZXJyYWZvcm1Bc3NldCB0cnlpbmcgdG8gemlwIGFyY2hpdmUgJyR7c3JjfScgaW50byAke2Rlc3R9IGZhaWxlZDogJHtlcnJvcn1gLFxuICApO1xuXG5leHBvcnQgY29uc3QgdGVycmFmb3JtTW9kdWxlSGFzQ2hpbGRyZW4gPSAocGF0aE5hbWU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gbmV3IEVycm9yKFxuICAgIGBUcnlpbmcgdG8gYWRkIGNoaWxkcmVuIHRvIGEgVGVycmFmb3JtTW9kdWxlIGF0ICcke3BhdGhOYW1lfScuIFRlcnJhZm9ybU1vZHVsZXMgY2Fubm90IGhhdmUgY2hpbGRyZW4sIGlmIHlvdSB3YW50IHRvIGdyb3VwIHJlc291cmNlcyBvciBjb25zdHJ1Y3RzIGluIGdlbmVyYWwgdG9nZXRoZXIgcGxlYXNlIHVzZSB0aGUgQ29uc3RydWN0cyBjbGFzcyBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL2NvbnN0cnVjdHMgZm9yIG1vcmUgZGV0YWlscy5gLFxuICApO1xufTtcbiJdfQ==
|
|
@@ -883,5 +883,5 @@ class FnGenerated {
|
|
|
883
883
|
}
|
|
884
884
|
exports.FnGenerated = FnGenerated;
|
|
885
885
|
_a = JSII_RTTI_SYMBOL_1;
|
|
886
|
-
FnGenerated[_a] = { fqn: "cdktn.FnGenerated", version: "0.23.
|
|
886
|
+
FnGenerated[_a] = { fqn: "cdktn.FnGenerated", version: "0.23.3" };
|
|
887
887
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWZ1bmN0aW9ucy5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3Rpb25zL3RlcnJhZm9ybS1mdW5jdGlvbnMuZ2VuZXJhdGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQzs7O0dBR0c7QUFDSCx1Q0FhbUI7QUFDbkIsK0NBQStDO0FBQy9DLE1BQWEsV0FBVztJQUN0Qjs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxzQkFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVc7UUFDeEIsT0FBTyxJQUFBLG1CQUFTLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVc7UUFDeEIsT0FBTyxJQUFBLG1CQUFTLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQVc7UUFDM0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQVk7UUFDMUIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxVQUFVLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBVyxFQUFFLElBQWM7UUFDeEMsT0FBTyxJQUFBLGtCQUFRLEVBQ2IsSUFBQSwyQkFBaUIsRUFBQyxRQUFRLEVBQUUsQ0FBQyxxQkFBVyxFQUFFLElBQUEsa0JBQVEsRUFBQyxzQkFBWSxDQUFDLENBQUMsQ0FBQyxDQUNoRSxHQUFHLEVBQ0gsSUFBSSxDQUNMLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQWU7UUFDeEIsT0FBTyxJQUFBLG1CQUFTLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxrQkFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQVc7UUFDckIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxNQUFNLEVBQUUsQ0FBQyxzQkFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQVc7UUFDdEIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxPQUFPLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFXLEVBQUUsSUFBWTtRQUN4QyxPQUFPLElBQUEsZ0JBQU0sRUFDWCxJQUFBLDJCQUFpQixFQUFDLFdBQVcsRUFBRSxDQUFDLElBQUEsZ0JBQU0sRUFBQyxrQkFBUSxDQUFDLEVBQUUsc0JBQVksQ0FBQyxDQUFDLENBQzlELElBQUksRUFDSixJQUFJLENBQ0wsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQWMsRUFBRSxPQUFlO1FBQzdDLE9BQU8sSUFBQSxrQkFBUSxFQUNiLElBQUEsMkJBQWlCLEVBQUMsVUFBVSxFQUFFLENBQUMscUJBQVcsRUFBRSxzQkFBWSxDQUFDLENBQUMsQ0FDeEQsTUFBTSxFQUNOLE9BQU8sQ0FDUixDQUNGLENBQUM7SUFDSixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFjO1FBQy9CLE9BQU8sSUFBQSxrQkFBUSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsYUFBYSxFQUFFLENBQUMscUJBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQWMsRUFBRSxPQUFlLEVBQUUsTUFBYztRQUMvRCxPQUFPLElBQUEsa0JBQVEsRUFDYixJQUFBLDJCQUFpQixFQUFDLFlBQVksRUFBRTtZQUM5QixxQkFBVztZQUNYLHNCQUFZO1lBQ1osc0JBQVk7U0FDYixDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FDNUIsQ0FBQztJQUNKLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFjLEVBQUUsT0FBaUI7UUFDbEQsT0FBTyxJQUFBLGdCQUFNLEVBQ1gsSUFBQSwyQkFBaUIsRUFBQyxhQUFhLEVBQUUsQ0FBQyxxQkFBVyxFQUFFLElBQUEsa0JBQVEsRUFBQyxzQkFBWSxDQUFDLENBQUMsQ0FBQyxDQUNyRSxNQUFNLEVBQ04sT0FBTyxDQUNSLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQVc7UUFDekIsT0FBTyxJQUFBLGVBQUssRUFBQyxJQUFBLDJCQUFpQixFQUFDLFVBQVUsRUFBRSxDQUFDLElBQUEsa0JBQVEsRUFBQyxrQkFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBVztRQUM3QixPQUFPLElBQUEsZUFBSyxFQUFDLElBQUEsMkJBQWlCLEVBQUMsY0FBYyxFQUFFLENBQUMsSUFBQSxrQkFBUSxFQUFDLGtCQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFjO1FBQzNCLE9BQU8sSUFBQSxnQkFBTSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsU0FBUyxFQUFFLENBQUMsSUFBQSxnQkFBTSxFQUFDLGtCQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFXO1FBQ3ZCLE9BQU8sSUFBQSxlQUFLLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxRQUFRLEVBQUUsQ0FBQyxJQUFBLGtCQUFRLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFTLEVBQUUsS0FBVTtRQUNuQyxPQUFPLElBQUEsZUFBSyxFQUNWLElBQUEsMkJBQWlCLEVBQUMsVUFBVSxFQUFFLENBQUMsa0JBQVEsRUFBRSxrQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQ2pFLENBQUM7SUFDSixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFXO1FBQzFCLE9BQU8sSUFBQSxlQUFLLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxXQUFXLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQVc7UUFDekIsT0FBTyxJQUFBLGdCQUFNLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxVQUFVLEVBQUUsQ0FBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFTLEVBQUUsS0FBYTtRQUNyQyxPQUFPLElBQUEsZUFBSyxFQUNWLElBQUEsMkJBQWlCLEVBQUMsU0FBUyxFQUFFLENBQUMsa0JBQVEsRUFBRSxzQkFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQ3BFLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBVyxFQUFFLE1BQWM7UUFDekMsT0FBTyxJQUFBLG1CQUFTLEVBQ2QsSUFBQSwyQkFBaUIsRUFBQyxVQUFVLEVBQUUsQ0FBQyxxQkFBVyxFQUFFLHFCQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FDdkUsQ0FBQztJQUNKLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQVk7UUFDdEIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxNQUFNLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQVk7UUFDNUIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBWTtRQUNsQyxPQUFPLElBQUEsa0JBQVEsRUFBQyxJQUFBLDJCQUFpQixFQUFDLGtCQUFrQixFQUFFLENBQUMscUJBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQVk7UUFDbEMsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxrQkFBa0IsRUFBRSxDQUFDLHFCQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUM1QixPQUFPLElBQUEsbUJBQVMsRUFBQyxJQUFBLDJCQUFpQixFQUFDLFlBQVksRUFBRSxDQUFDLHFCQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBWTtRQUN6QixPQUFPLElBQUEsa0JBQVEsRUFBQyxJQUFBLDJCQUFpQixFQUFDLFNBQVMsRUFBRSxDQUFDLHFCQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVksRUFBRSxPQUFlO1FBQzFDLE9BQU8sSUFBQSxnQkFBTSxFQUNYLElBQUEsMkJBQWlCLEVBQUMsU0FBUyxFQUFFLENBQUMscUJBQVcsRUFBRSxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQ3hFLENBQUM7SUFDSixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLE9BQU8sSUFBQSxrQkFBUSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsVUFBVSxFQUFFLENBQUMscUJBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFZO1FBQzVCLE9BQU8sSUFBQSxrQkFBUSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsWUFBWSxFQUFFLENBQUMscUJBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFZO1FBQzVCLE9BQU8sSUFBQSxrQkFBUSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsWUFBWSxFQUFFLENBQUMscUJBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFTO1FBQ3RCLE9BQU8sSUFBQSxlQUFLLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxrQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQVc7UUFDdEIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxPQUFPLEVBQUUsQ0FBQyxzQkFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFjLEVBQUUsSUFBVztRQUN2QyxPQUFPLElBQUEsZUFBSyxFQUNWLElBQUEsMkJBQWlCLEVBQUMsUUFBUSxFQUFFLENBQUMscUJBQVcsRUFBRSxJQUFBLGtCQUFRLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDNUQsTUFBTSxFQUNOLElBQUksQ0FDTCxDQUNGLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDNUMsT0FBTyxJQUFBLGtCQUFRLEVBQ2IsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxxQkFBVyxFQUFFLHFCQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFjLEVBQUUsSUFBVztRQUMzQyxPQUFPLElBQUEsZUFBSyxFQUNWLElBQUEsMkJBQWlCLEVBQUMsWUFBWSxFQUFFLENBQUMscUJBQVcsRUFBRSxJQUFBLGtCQUFRLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDaEUsTUFBTSxFQUNOLElBQUksQ0FDTCxDQUNGLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBYyxFQUFFLEdBQVc7UUFDdkMsT0FBTyxJQUFBLGtCQUFRLEVBQ2IsSUFBQSwyQkFBaUIsRUFBQyxRQUFRLEVBQUUsQ0FBQyxzQkFBWSxFQUFFLHFCQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFTLEVBQUUsS0FBVTtRQUNoQyxPQUFPLElBQUEsZUFBSyxFQUFDLElBQUEsMkJBQWlCLEVBQUMsT0FBTyxFQUFFLENBQUMsa0JBQVEsRUFBRSxrQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQWlCLEVBQUUsS0FBaUI7UUFDL0MsT0FBTyxJQUFBLGtCQUFRLEVBQ2IsSUFBQSwyQkFBaUIsRUFBQyxNQUFNLEVBQUUsQ0FBQyxxQkFBVyxFQUFFLElBQUEsa0JBQVEsRUFBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNsRSxTQUFTLEVBQ1QsS0FBSyxDQUNOLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQVc7UUFDM0IsT0FBTyxJQUFBLGVBQUssRUFBQyxJQUFBLDJCQUFpQixFQUFDLFlBQVksRUFBRSxDQUFDLHFCQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBUTtRQUN4QixPQUFPLElBQUEsa0JBQVEsRUFBQyxJQUFBLDJCQUFpQixFQUFDLFlBQVksRUFBRSxDQUFDLGtCQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBYTtRQUN2QixPQUFPLElBQUEsZUFBSyxFQUFDLElBQUEsMkJBQWlCLEVBQUMsTUFBTSxFQUFFLENBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFVO1FBQ3hCLE9BQU8sSUFBQSxrQkFBUSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsUUFBUSxFQUFFLENBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBVyxFQUFFLElBQVk7UUFDbEMsT0FBTyxJQUFBLGtCQUFRLEVBQ2IsSUFBQSwyQkFBaUIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxzQkFBWSxFQUFFLHNCQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FDbEUsQ0FBQztJQUNKLENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQWEsRUFBRSxHQUFXLEVBQUUsWUFBbUI7UUFDNUQsT0FBTyxJQUFBLGVBQUssRUFDVixJQUFBLDJCQUFpQixFQUFDLFFBQVEsRUFBRSxDQUFDLGtCQUFRLEVBQUUscUJBQVcsRUFBRSxJQUFBLGtCQUFRLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDdEUsUUFBUSxFQUNSLEdBQUcsRUFDSCxZQUFZLENBQ2IsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBVztRQUN0QixPQUFPLElBQUEsa0JBQVEsRUFBQyxJQUFBLDJCQUFpQixFQUFDLE9BQU8sRUFBRSxDQUFDLHFCQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFhLEVBQUUsSUFBVyxFQUFFLFNBQWdCO1FBQzNELE9BQU8sSUFBQSxnQkFBTSxFQUNYLElBQUEsMkJBQWlCLEVBQUMsV0FBVyxFQUFFO1lBQzdCLElBQUEsZ0JBQU0sRUFBQyxrQkFBUSxDQUFDO1lBQ2hCLElBQUEsZ0JBQU0sRUFBQyxrQkFBUSxDQUFDO1lBQ2hCLElBQUEsZ0JBQU0sRUFBQyxrQkFBUSxDQUFDO1NBQ2pCLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBaUI7UUFDMUIsT0FBTyxJQUFBLGtCQUFRLEVBQ2IsSUFBQSwyQkFBaUIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxJQUFBLGtCQUFRLEVBQUMsc0JBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FDNUQsQ0FBQztJQUNKLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQVc7UUFDdEIsT0FBTyxJQUFBLGVBQUssRUFBQyxJQUFBLDJCQUFpQixFQUFDLE9BQU8sRUFBRSxDQUFDLElBQUEsa0JBQVEsRUFBQyxrQkFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBaUI7UUFDMUIsT0FBTyxJQUFBLGtCQUFRLEVBQ2IsSUFBQSwyQkFBaUIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxJQUFBLGtCQUFRLEVBQUMsc0JBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FDNUQsQ0FBQztJQUNKLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQVU7UUFDNUIsT0FBTyxJQUFBLGVBQUssRUFBQyxJQUFBLDJCQUFpQixFQUFDLGNBQWMsRUFBRSxDQUFDLGtCQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBUztRQUNsQixPQUFPLElBQUEsZUFBSyxFQUFDLElBQUEsMkJBQWlCLEVBQUMsS0FBSyxFQUFFLENBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBVyxFQUFFLElBQVk7UUFDdkMsT0FBTyxJQUFBLGVBQUssRUFDVixJQUFBLDJCQUFpQixFQUFDLFVBQVUsRUFBRSxDQUFDLGtCQUFRLEVBQUUsc0JBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUN0RSxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUM1QixPQUFPLElBQUEsa0JBQVEsRUFBQyxJQUFBLDJCQUFpQixFQUFDLFlBQVksRUFBRSxDQUFDLHFCQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUNEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGFBQWE7UUFDbEIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUNuQyxPQUFPLElBQUEsa0JBQVEsRUFDYixJQUFBLDJCQUFpQixFQUFDLEtBQUssRUFBRSxDQUFDLHNCQUFZLEVBQUUsc0JBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQWdCO1FBQzVCLE9BQU8sSUFBQSxnQkFBTSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsT0FBTyxFQUFFLENBQUMsSUFBQSxrQkFBUSxFQUFDLHNCQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBZSxFQUFFLEdBQVc7UUFDdkMsT0FBTyxJQUFBLGVBQUssRUFDVixJQUFBLDJCQUFpQixFQUFDLE9BQU8sRUFBRSxDQUFDLHFCQUFXLEVBQUUscUJBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUNyRSxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQWUsRUFBRSxHQUFXO1FBQzFDLE9BQU8sSUFBQSxnQkFBTSxFQUNYLElBQUEsMkJBQWlCLEVBQUMsVUFBVSxFQUFFLENBQUMscUJBQVcsRUFBRSxxQkFBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQ3hFLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsT0FBZTtRQUN6RCxPQUFPLElBQUEsa0JBQVEsRUFDYixJQUFBLDJCQUFpQixFQUFDLFNBQVMsRUFBRSxDQUFDLHFCQUFXLEVBQUUscUJBQVcsRUFBRSxxQkFBVyxDQUFDLENBQUMsQ0FDbkUsR0FBRyxFQUNILE1BQU0sRUFDTixPQUFPLENBQ1IsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBUztRQUN0QixPQUFPLElBQUEsZUFBSyxFQUFDLElBQUEsMkJBQWlCLEVBQUMsU0FBUyxFQUFFLENBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBa0IsRUFBRSxVQUFrQjtRQUN0RCxPQUFPLElBQUEsa0JBQVEsRUFDYixJQUFBLDJCQUFpQixFQUFDLFlBQVksRUFBRSxDQUFDLHFCQUFXLEVBQUUscUJBQVcsQ0FBQyxDQUFDLENBQ3pELFVBQVUsRUFDVixVQUFVLENBQ1gsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN6QixPQUFPLElBQUEsZUFBSyxFQUFDLElBQUEsMkJBQWlCLEVBQUMsV0FBVyxFQUFFLENBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBZ0IsRUFBRSxVQUFtQjtRQUMxRCxPQUFPLElBQUEsZ0JBQU0sRUFDWCxJQUFBLDJCQUFpQixFQUFDLGlCQUFpQixFQUFFO1lBQ25DLElBQUEsZ0JBQU0sRUFBQyxrQkFBUSxDQUFDO1lBQ2hCLElBQUEsa0JBQVEsRUFBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxDQUFDO1NBQzNCLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQzFCLENBQUM7SUFDSixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFXO1FBQzNCLE9BQU8sSUFBQSxlQUFLLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxJQUFBLGtCQUFRLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFRLEVBQUUsQ0FBUTtRQUNuQyxPQUFPLElBQUEsZ0JBQU0sRUFDWCxJQUFBLDJCQUFpQixFQUFDLGFBQWEsRUFBRSxDQUFDLElBQUEsZ0JBQU0sRUFBQyxrQkFBUSxDQUFDLEVBQUUsSUFBQSxnQkFBTSxFQUFDLGtCQUFRLENBQUMsQ0FBQyxDQUFDLENBQ3BFLENBQUMsRUFDRCxDQUFDLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQWdCLEVBQUUsVUFBbUI7UUFDbkQsT0FBTyxJQUFBLGdCQUFNLEVBQ1gsSUFBQSwyQkFBaUIsRUFBQyxVQUFVLEVBQUU7WUFDNUIsSUFBQSxnQkFBTSxFQUFDLGtCQUFRLENBQUM7WUFDaEIsSUFBQSxrQkFBUSxFQUFDLElBQUEsZ0JBQU0sRUFBQyxrQkFBUSxDQUFDLENBQUM7U0FDM0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQVc7UUFDckIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxNQUFNLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQVc7UUFDdkIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxRQUFRLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQVc7UUFDdkIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxRQUFRLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQVc7UUFDdkIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxRQUFRLEVBQUUsQ0FBQyxzQkFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBUyxFQUFFLFdBQW1CLEVBQUUsU0FBaUI7UUFDNUQsT0FBTyxJQUFBLGVBQUssRUFDVixJQUFBLDJCQUFpQixFQUFDLE9BQU8sRUFBRSxDQUFDLGtCQUFRLEVBQUUsc0JBQVksRUFBRSxzQkFBWSxDQUFDLENBQUMsQ0FDaEUsSUFBSSxFQUNKLFdBQVcsRUFDWCxTQUFTLENBQ1YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBYztRQUN4QixPQUFPLElBQUEsZ0JBQU0sRUFBQyxJQUFBLDJCQUFpQixFQUFDLE1BQU0sRUFBRSxDQUFDLElBQUEsZ0JBQU0sRUFBQyxrQkFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQWlCLEVBQUUsR0FBVztRQUN6QyxPQUFPLElBQUEsZ0JBQU0sRUFDWCxJQUFBLDJCQUFpQixFQUFDLE9BQU8sRUFBRSxDQUFDLHFCQUFXLEVBQUUscUJBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQVcsRUFBRSxNQUFjO1FBQzNDLE9BQU8sSUFBQSxtQkFBUyxFQUNkLElBQUEsMkJBQWlCLEVBQUMsWUFBWSxFQUFFLENBQUMscUJBQVcsRUFBRSxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQ3pFLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBVyxFQUFFLE1BQWM7UUFDNUMsT0FBTyxJQUFBLG1CQUFTLEVBQ2QsSUFBQSwyQkFBaUIsRUFBQyxhQUFhLEVBQUUsQ0FBQyxxQkFBVyxFQUFFLHFCQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQVc7UUFDdkIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxRQUFRLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBRSxNQUFjO1FBQ3ZELE9BQU8sSUFBQSxrQkFBUSxFQUNiLElBQUEsMkJBQWlCLEVBQUMsUUFBUSxFQUFFLENBQUMscUJBQVcsRUFBRSxzQkFBWSxFQUFFLHNCQUFZLENBQUMsQ0FBQyxDQUNwRSxHQUFHLEVBQ0gsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUNGLENBQUM7SUFDSixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFTO1FBQ2xCLE9BQU8sSUFBQSxlQUFLLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxrQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFZLEVBQUUsSUFBUztRQUN6QyxPQUFPLElBQUEsZUFBSyxFQUNWLElBQUEsMkJBQWlCLEVBQUMsY0FBYyxFQUFFLENBQUMscUJBQVcsRUFBRSxrQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ3ZFLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsUUFBZ0I7UUFDdEQsT0FBTyxJQUFBLGtCQUFRLEVBQ2IsSUFBQSwyQkFBaUIsRUFBQyxrQkFBa0IsRUFBRSxDQUFDLHFCQUFXLEVBQUUscUJBQVcsQ0FBQyxDQUFDLENBQy9ELE1BQU0sRUFDTixRQUFRLENBQ1QsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBVyxFQUFFLFFBQWdCO1FBQ25ELE9BQU8sSUFBQSxrQkFBUSxFQUNiLElBQUEsMkJBQWlCLEVBQUMsa0JBQWtCLEVBQUUsQ0FBQyxxQkFBVyxFQUFFLHFCQUFXLENBQUMsQ0FBQyxDQUMvRCxHQUFHLEVBQ0gsUUFBUSxDQUNULENBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFpQixFQUFFLFFBQWdCO1FBQ2hELE9BQU8sSUFBQSxrQkFBUSxFQUNiLElBQUEsMkJBQWlCLEVBQUMsU0FBUyxFQUFFLENBQUMscUJBQVcsRUFBRSxxQkFBVyxDQUFDLENBQUMsQ0FDdEQsU0FBUyxFQUNULFFBQVEsQ0FDVCxDQUNGLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBbUIsRUFBRSxXQUFtQjtRQUNyRCxPQUFPLElBQUEsa0JBQVEsRUFDYixJQUFBLDJCQUFpQixFQUFDLFNBQVMsRUFBRSxDQUFDLHFCQUFXLEVBQUUscUJBQVcsQ0FBQyxDQUFDLENBQ3RELFdBQVcsRUFDWCxXQUFXLENBQ1osQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFNBQVM7UUFDZCxPQUFPLElBQUEsa0JBQVEsRUFBQyxJQUFBLDJCQUFpQixFQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBVztRQUN0QixPQUFPLElBQUEsa0JBQVEsRUFBQyxJQUFBLDJCQUFpQixFQUFDLE9BQU8sRUFBRSxDQUFDLHFCQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBTTtRQUNsQixPQUFPLElBQUEsbUJBQVMsRUFBQyxJQUFBLDJCQUFpQixFQUFDLFFBQVEsRUFBRSxDQUFDLGtCQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBTTtRQUNsQixPQUFPLElBQUEsZ0JBQU0sRUFBQyxJQUFBLDJCQUFpQixFQUFDLFFBQVEsRUFBRSxDQUFDLGtCQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBTTtRQUNqQixPQUFPLElBQUEsZUFBSyxFQUFDLElBQUEsMkJBQWlCLEVBQUMsT0FBTyxFQUFFLENBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFNO1FBQ3BCLE9BQU8sSUFBQSxrQkFBUSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsVUFBVSxFQUFFLENBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFNO1FBQ2pCLE9BQU8sSUFBQSxnQkFBTSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsT0FBTyxFQUFFLENBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFNO1FBQ3BCLE9BQU8sSUFBQSxrQkFBUSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsVUFBVSxFQUFFLENBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFXO1FBQzFCLE9BQU8sSUFBQSxlQUFLLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxXQUFXLEVBQUUsQ0FBQyxrQkFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFXLEVBQUUsTUFBYztRQUNyQyxPQUFPLElBQUEsa0JBQVEsRUFDYixJQUFBLDJCQUFpQixFQUFDLE1BQU0sRUFBRSxDQUFDLHFCQUFXLEVBQUUscUJBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQVcsRUFBRSxNQUFjO1FBQzNDLE9BQU8sSUFBQSxrQkFBUSxFQUNiLElBQUEsMkJBQWlCLEVBQUMsWUFBWSxFQUFFLENBQUMscUJBQVcsRUFBRSxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQ3pFLENBQUM7SUFDSixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFXO1FBQzFCLE9BQU8sSUFBQSxrQkFBUSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsV0FBVyxFQUFFLENBQUMscUJBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBVyxFQUFFLE1BQWM7UUFDM0MsT0FBTyxJQUFBLGtCQUFRLEVBQ2IsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxxQkFBVyxFQUFFLHFCQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQWtCO1FBQzNCLE9BQU8sSUFBQSxlQUFLLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxJQUFBLGtCQUFRLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQVc7UUFDdEIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxPQUFPLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQVc7UUFDMUIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxXQUFXLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFJO1FBQ1QsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFpQixFQUFFLElBQVk7UUFDM0MsT0FBTyxJQUFBLGtCQUFRLEVBQ2IsSUFBQSwyQkFBaUIsRUFBQyxRQUFRLEVBQUUsQ0FBQyxxQkFBVyxFQUFFLHFCQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQVk7UUFDeEIsT0FBTyxJQUFBLGVBQUssRUFBQyxJQUFBLDJCQUFpQixFQUFDLFFBQVEsRUFBRSxDQUFDLGtCQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBVztRQUMzQixPQUFPLElBQUEsZUFBSyxFQUFDLElBQUEsMkJBQWlCLEVBQUMsWUFBWSxFQUFFLENBQUMscUJBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFVO1FBQzFCLE9BQU8sSUFBQSxrQkFBUSxFQUFDLElBQUEsMkJBQWlCLEVBQUMsWUFBWSxFQUFFLENBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBYyxFQUFFLE1BQVc7UUFDdkMsT0FBTyxJQUFBLGVBQUssRUFDVixJQUFBLDJCQUFpQixFQUFDLFFBQVEsRUFBRSxDQUFDLElBQUEsZ0JBQU0sRUFBQyxrQkFBUSxDQUFDLEVBQUUsa0JBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUN4RSxDQUFDO0lBQ0osQ0FBQzs7QUFqL0JILGtDQWsvQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuLypcbiAqIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgdG9vbHMvZ2VuZXJhdGUtZnVuY3Rpb24tYmluZGluZ3MuXG4gKiBUbyB1cGRhdGUgdGhpcyBmaWxlIGV4ZWN1dGUgJ3lhcm4gcnVuIGdlbmVyYXRlLWZ1bmN0aW9uLWJpbmRpbmdzJyBpbiB0aGUgcm9vdCBvZiB0aGUgcmVwb3NpdG9yeVxuICovXG5pbXBvcnQge1xuICBhbnlWYWx1ZSxcbiAgYXNBbnksXG4gIGFzQm9vbGVhbixcbiAgYXNMaXN0LFxuICBhc051bWJlcixcbiAgYXNTdHJpbmcsXG4gIGxpc3RPZixcbiAgbWFwVmFsdWUsXG4gIG51bWVyaWNWYWx1ZSxcbiAgc3RyaW5nVmFsdWUsXG4gIHRlcnJhZm9ybUZ1bmN0aW9uLFxuICB2YXJpYWRpYyxcbn0gZnJvbSBcIi4vaGVscGVyc1wiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBGbkdlbmVyYXRlZCB7XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2FicyBhYnN9IHJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBnaXZlbiBudW1iZXIuIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgbnVtYmVyIGlzIHplcm8gb3IgcG9zaXRpdmUgdGhlbiBpdCBpcyByZXR1cm5lZCBhcy1pcywgYnV0IGlmIGl0IGlzIG5lZ2F0aXZlIHRoZW4gaXQgaXMgbXVsdGlwbGllZCBieSAtMSB0byBtYWtlIGl0IHBvc2l0aXZlIGJlZm9yZSByZXR1cm5pbmcgaXQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAgICovXG4gIHN0YXRpYyBhYnMobnVtOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIodGVycmFmb3JtRnVuY3Rpb24oXCJhYnNcIiwgW251bWVyaWNWYWx1ZV0pKG51bSkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Fic3BhdGggYWJzcGF0aH0gdGFrZXMgYSBzdHJpbmcgY29udGFpbmluZyBhIGZpbGVzeXN0ZW0gcGF0aCBhbmQgY29udmVydHMgaXQgdG8gYW4gYWJzb2x1dGUgcGF0aC4gVGhhdCBpcywgaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlLCBpdCB3aWxsIGJlIGpvaW5lZCB3aXRoIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGFic3BhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYWJzcGF0aFwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYWxsdHJ1ZSBhbGx0cnVlfSByZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgaW4gYSBnaXZlbiBjb2xsZWN0aW9uIGFyZSBgdHJ1ZWAgb3IgYFwidHJ1ZVwiYC4gSXQgYWxzbyByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY29sbGVjdGlvbiBpcyBlbXB0eS5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgYWxsdHJ1ZShsaXN0OiBhbnlbXSkge1xuICAgIHJldHVybiBhc0Jvb2xlYW4odGVycmFmb3JtRnVuY3Rpb24oXCJhbGx0cnVlXCIsIFtsaXN0T2YoYW55VmFsdWUpXSkobGlzdCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2FueXRydWUgYW55dHJ1ZX0gcmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgaW4gYSBnaXZlbiBjb2xsZWN0aW9uIGlzIGB0cnVlYCBvciBgXCJ0cnVlXCJgLiBJdCBhbHNvIHJldHVybnMgYGZhbHNlYCBpZiB0aGUgY29sbGVjdGlvbiBpcyBlbXB0eS5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgYW55dHJ1ZShsaXN0OiBhbnlbXSkge1xuICAgIHJldHVybiBhc0Jvb2xlYW4odGVycmFmb3JtRnVuY3Rpb24oXCJhbnl0cnVlXCIsIFtsaXN0T2YoYW55VmFsdWUpXSkobGlzdCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2U2NGRlY29kZSBiYXNlNjRkZWNvZGV9IHRha2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBCYXNlNjQgY2hhcmFjdGVyIHNlcXVlbmNlIGFuZCByZXR1cm5zIHRoZSBvcmlnaW5hbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBiYXNlNjRkZWNvZGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlNjRkZWNvZGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYmFzZTY0ZW5jb2RlIGJhc2U2NGVuY29kZX0gYXBwbGllcyBCYXNlNjQgZW5jb2RpbmcgdG8gYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBiYXNlNjRlbmNvZGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlNjRlbmNvZGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYmFzZTY0Z3ppcCBiYXNlNjRnemlwfSBjb21wcmVzc2VzIGEgc3RyaW5nIHdpdGggZ3ppcCBhbmQgdGhlbiBlbmNvZGVzIHRoZSByZXN1bHQgaW4gQmFzZTY0IGVuY29kaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0Z3ppcChzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImJhc2U2NGd6aXBcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYmFzZTY0c2hhMjU2IGJhc2U2NHNoYTI1Nn0gY29tcHV0ZXMgdGhlIFNIQTI1NiBoYXNoIG9mIGEgZ2l2ZW4gc3RyaW5nIGFuZCBlbmNvZGVzIGl0IHdpdGggQmFzZTY0LiBUaGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIGBiYXNlNjRlbmNvZGUoc2hhMjU2KFwidGVzdFwiKSlgIHNpbmNlIGBzaGEyNTYoKWAgcmV0dXJucyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGJhc2U2NHNoYTI1NihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImJhc2U2NHNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9iYXNlNjRzaGE1MTIgYmFzZTY0c2hhNTEyfSBjb21wdXRlcyB0aGUgU0hBNTEyIGhhc2ggb2YgYSBnaXZlbiBzdHJpbmcgYW5kIGVuY29kZXMgaXQgd2l0aCBCYXNlNjQuIFRoaXMgaXMgbm90IGVxdWl2YWxlbnQgdG8gYGJhc2U2NGVuY29kZShzaGE1MTIoXCJ0ZXN0XCIpKWAgc2luY2UgYHNoYTUxMigpYCByZXR1cm5zIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0c2hhNTEyKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmFzZTY0c2hhNTEyXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2VuYW1lIGJhc2VuYW1lfSB0YWtlcyBhIHN0cmluZyBjb250YWluaW5nIGEgZmlsZXN5c3RlbSBwYXRoIGFuZCByZW1vdmVzIGFsbCBleGNlcHQgdGhlIGxhc3QgcG9ydGlvbiBmcm9tIGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGJhc2VuYW1lKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImJhc2VuYW1lXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYmNyeXB0IGJjcnlwdH0gY29tcHV0ZXMgYSBoYXNoIG9mIHRoZSBnaXZlbiBzdHJpbmcgdXNpbmcgdGhlIEJsb3dmaXNoIGNpcGhlciwgcmV0dXJuaW5nIGEgc3RyaW5nIGluIFt0aGUgX01vZHVsYXIgQ3J5cHQgRm9ybWF0X10oaHR0cHM6Ly9wYXNzbGliLnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9tb2R1bGFyX2NyeXB0X2Zvcm1hdC5odG1sKSB1c3VhbGx5IGV4cGVjdGVkIGluIHRoZSBzaGFkb3cgcGFzc3dvcmQgZmlsZSBvbiBtYW55IFVuaXggc3lzdGVtcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGNvc3RcbiAgICovXG4gIHN0YXRpYyBfYmNyeXB0KHN0cjogc3RyaW5nLCBjb3N0OiBudW1iZXJbXSkge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmNyeXB0XCIsIFtzdHJpbmdWYWx1ZSwgdmFyaWFkaWMobnVtZXJpY1ZhbHVlKV0pKFxuICAgICAgICBzdHIsXG4gICAgICAgIGNvc3QsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2FuIGNhbn0gZXZhbHVhdGVzIHRoZSBnaXZlbiBleHByZXNzaW9uIGFuZCByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGV4cHJlc3Npb24gcHJvZHVjZWQgYSByZXN1bHQgd2l0aG91dCBhbnkgZXJyb3JzLlxuICAgKiBAcGFyYW0ge2FueX0gZXhwcmVzc2lvblxuICAgKi9cbiAgc3RhdGljIGNhbihleHByZXNzaW9uOiBhbnkpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2FuXCIsIFthbnlWYWx1ZV0pKGV4cHJlc3Npb24pKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jZWlsIGNlaWx9IHJldHVybnMgdGhlIGNsb3Nlc3Qgd2hvbGUgbnVtYmVyIHRoYXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZSwgd2hpY2ggbWF5IGJlIGEgZnJhY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAgICovXG4gIHN0YXRpYyBjZWlsKG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2VpbFwiLCBbbnVtZXJpY1ZhbHVlXSkobnVtKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2hvbXAgY2hvbXB9IHJlbW92ZXMgbmV3bGluZSBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2YgYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBjaG9tcChzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImNob21wXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NodW5rbGlzdCBjaHVua2xpc3R9IHNwbGl0cyBhIHNpbmdsZSBsaXN0IGludG8gZml4ZWQtc2l6ZSBjaHVua3MsIHJldHVybmluZyBhIGxpc3Qgb2YgbGlzdHMuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gbGlzdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxuICAgKi9cbiAgc3RhdGljIGNodW5rbGlzdChsaXN0OiBhbnlbXSwgc2l6ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTGlzdChcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2h1bmtsaXN0XCIsIFtsaXN0T2YoYW55VmFsdWUpLCBudW1lcmljVmFsdWVdKShcbiAgICAgICAgbGlzdCxcbiAgICAgICAgc2l6ZSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaWRyaG9zdCBjaWRyaG9zdH0gY2FsY3VsYXRlcyBhIGZ1bGwgaG9zdCBJUCBhZGRyZXNzIGZvciBhIGdpdmVuIGhvc3QgbnVtYmVyIHdpdGhpbiBhIGdpdmVuIElQIG5ldHdvcmsgYWRkcmVzcyBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhvc3RudW1cbiAgICovXG4gIHN0YXRpYyBjaWRyaG9zdChwcmVmaXg6IHN0cmluZywgaG9zdG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJjaWRyaG9zdFwiLCBbc3RyaW5nVmFsdWUsIG51bWVyaWNWYWx1ZV0pKFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGhvc3RudW0sXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2lkcm5ldG1hc2sgY2lkcm5ldG1hc2t9IGNvbnZlcnRzIGFuIElQdjQgYWRkcmVzcyBwcmVmaXggZ2l2ZW4gaW4gQ0lEUiBub3RhdGlvbiBpbnRvIGEgc3VibmV0IG1hc2sgYWRkcmVzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKi9cbiAgc3RhdGljIGNpZHJuZXRtYXNrKHByZWZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2lkcm5ldG1hc2tcIiwgW3N0cmluZ1ZhbHVlXSkocHJlZml4KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2lkcnN1Ym5ldCBjaWRyc3VibmV0fSBjYWxjdWxhdGVzIGEgc3VibmV0IGFkZHJlc3Mgd2l0aGluIGdpdmVuIElQIG5ldHdvcmsgYWRkcmVzcyBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ld2JpdHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ldG51bVxuICAgKi9cbiAgc3RhdGljIGNpZHJzdWJuZXQocHJlZml4OiBzdHJpbmcsIG5ld2JpdHM6IG51bWJlciwgbmV0bnVtOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImNpZHJzdWJuZXRcIiwgW1xuICAgICAgICBzdHJpbmdWYWx1ZSxcbiAgICAgICAgbnVtZXJpY1ZhbHVlLFxuICAgICAgICBudW1lcmljVmFsdWUsXG4gICAgICBdKShwcmVmaXgsIG5ld2JpdHMsIG5ldG51bSksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaWRyc3VibmV0cyBjaWRyc3VibmV0c30gY2FsY3VsYXRlcyBhIHNlcXVlbmNlIG9mIGNvbnNlY3V0aXZlIElQIGFkZHJlc3MgcmFuZ2VzIHdpdGhpbiBhIHBhcnRpY3VsYXIgQ0lEUiBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBuZXdiaXRzXG4gICAqL1xuICBzdGF0aWMgY2lkcnN1Ym5ldHMocHJlZml4OiBzdHJpbmcsIG5ld2JpdHM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTGlzdChcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2lkcnN1Ym5ldHNcIiwgW3N0cmluZ1ZhbHVlLCB2YXJpYWRpYyhudW1lcmljVmFsdWUpXSkoXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgbmV3Yml0cyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jb2FsZXNjZSBjb2FsZXNjZX0gdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IHZhbHNcbiAgICovXG4gIHN0YXRpYyBjb2FsZXNjZSh2YWxzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImNvYWxlc2NlXCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKSh2YWxzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY29hbGVzY2VsaXN0IGNvYWxlc2NlbGlzdH0gdGFrZXMgYW55IG51bWJlciBvZiBsaXN0IGFyZ3VtZW50cyBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgZW1wdHkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gdmFsc1xuICAgKi9cbiAgc3RhdGljIGNvYWxlc2NlbGlzdCh2YWxzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImNvYWxlc2NlbGlzdFwiLCBbdmFyaWFkaWMoYW55VmFsdWUpXSkodmFscykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvbXBhY3QgY29tcGFjdH0gdGFrZXMgYSBsaXN0IG9mIHN0cmluZ3MgYW5kIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIGFueSBlbXB0eSBzdHJpbmcgZWxlbWVudHMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgY29tcGFjdChsaXN0OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJjb21wYWN0XCIsIFtsaXN0T2YoYW55VmFsdWUpXSkobGlzdCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvbmNhdCBjb25jYXR9IHRha2VzIHR3byBvciBtb3JlIGxpc3RzIGFuZCBjb21iaW5lcyB0aGVtIGludG8gYSBzaW5nbGUgbGlzdC5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBzZXFzXG4gICAqL1xuICBzdGF0aWMgY29uY2F0KHNlcXM6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwiY29uY2F0XCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShzZXFzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY29udGFpbnMgY29udGFpbnN9IGRldGVybWluZXMgd2hldGhlciBhIGdpdmVuIGxpc3Qgb3Igc2V0IGNvbnRhaW5zIGEgZ2l2ZW4gc2luZ2xlIHZhbHVlIGFzIG9uZSBvZiBpdHMgZWxlbWVudHMuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIGNvbnRhaW5zKGxpc3Q6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY29udGFpbnNcIiwgW2FueVZhbHVlLCBhbnlWYWx1ZV0pKGxpc3QsIHZhbHVlKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NzdmRlY29kZSBjc3ZkZWNvZGV9IGRlY29kZXMgYSBzdHJpbmcgY29udGFpbmluZyBDU1YtZm9ybWF0dGVkIGRhdGEgYW5kIHByb2R1Y2VzIGEgbGlzdCBvZiBtYXBzIHJlcHJlc2VudGluZyB0aGF0IGRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBjc3ZkZWNvZGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJjc3ZkZWNvZGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZGlybmFtZSBkaXJuYW1lfSB0YWtlcyBhIHN0cmluZyBjb250YWluaW5nIGEgZmlsZXN5c3RlbSBwYXRoIGFuZCByZW1vdmVzIHRoZSBsYXN0IHBvcnRpb24gZnJvbSBpdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBkaXJuYW1lKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImRpcm5hbWVcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Rpc3RpbmN0IGRpc3RpbmN0fSB0YWtlcyBhIGxpc3QgYW5kIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIGFueSBkdXBsaWNhdGUgZWxlbWVudHMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgZGlzdGluY3QobGlzdDogYW55W10pIHtcbiAgICByZXR1cm4gYXNMaXN0KHRlcnJhZm9ybUZ1bmN0aW9uKFwiZGlzdGluY3RcIiwgW2xpc3RPZihhbnlWYWx1ZSldKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZWxlbWVudCBlbGVtZW50fSByZXRyaWV2ZXMgYSBzaW5nbGUgZWxlbWVudCBmcm9tIGEgbGlzdC5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gICAqL1xuICBzdGF0aWMgZWxlbWVudChsaXN0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImVsZW1lbnRcIiwgW2FueVZhbHVlLCBudW1lcmljVmFsdWVdKShsaXN0LCBpbmRleCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9lbmRzd2l0aCBlbmRzd2l0aH0gdGFrZXMgdHdvIHZhbHVlczogYSBzdHJpbmcgdG8gY2hlY2sgYW5kIGEgc3VmZml4IHN0cmluZy4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlyc3Qgc3RyaW5nIGVuZHMgd2l0aCB0aGF0IGV4YWN0IHN1ZmZpeC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VmZml4XG4gICAqL1xuICBzdGF0aWMgZW5kc3dpdGgoc3RyOiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzQm9vbGVhbihcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiZW5kc3dpdGhcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHN0ciwgc3VmZml4KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2ZpbGUgZmlsZX0gcmVhZHMgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhbmQgcmV0dXJucyB0aGVtIGFzIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGUocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZWJhc2U2NCBmaWxlYmFzZTY0fSByZWFkcyB0aGUgY29udGVudHMgb2YgYSBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoIGFuZCByZXR1cm5zIHRoZW0gYXMgYSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZWJhc2U2NChwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlYmFzZTY0XCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlYmFzZTY0c2hhMjU2IGZpbGViYXNlNjRzaGEyNTZ9IGlzIGEgdmFyaWFudCBvZiBgYmFzZTY0c2hhMjU2YCB0aGF0IGhhc2hlcyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZWJhc2U2NHNoYTI1NihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlYmFzZTY0c2hhMjU2XCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlYmFzZTY0c2hhNTEyIGZpbGViYXNlNjRzaGE1MTJ9IGlzIGEgdmFyaWFudCBvZiBgYmFzZTY0c2hhNTEyYCB0aGF0IGhhc2hlcyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZWJhc2U2NHNoYTUxMihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlYmFzZTY0c2hhNTEyXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlZXhpc3RzIGZpbGVleGlzdHN9IGRldGVybWluZXMgd2hldGhlciBhIGZpbGUgZXhpc3RzIGF0IGEgZ2l2ZW4gcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBmaWxlZXhpc3RzKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc0Jvb2xlYW4odGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlZXhpc3RzXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlbWQ1IGZpbGVtZDV9IGlzIGEgdmFyaWFudCBvZiBgbWQ1YCB0aGF0IGhhc2hlcyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZW1kNShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlbWQ1XCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlc2V0IGZpbGVzZXR9IGVudW1lcmF0ZXMgYSBzZXQgb2YgcmVndWxhciBmaWxlIG5hbWVzIGdpdmVuIGEgcGF0aCBhbmQgcGF0dGVybi4gVGhlIHBhdGggaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGZyb20gdGhlIHJlc3VsdGluZyBzZXQgb2YgZmlsZSBuYW1lcyBhbmQgYW55IHJlc3VsdCBzdGlsbCBjb250YWluaW5nIHBhdGggc2VwYXJhdG9ycyBhbHdheXMgcmV0dXJucyBmb3J3YXJkIHNsYXNoIChgL2ApIGFzIHRoZSBwYXRoIHNlcGFyYXRvciBmb3IgY3Jvc3Mtc3lzdGVtIGNvbXBhdGliaWxpdHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG4gICAqL1xuICBzdGF0aWMgZmlsZXNldChwYXRoOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImZpbGVzZXRcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHBhdGgsIHBhdHRlcm4pLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZXNoYTEgZmlsZXNoYTF9IGlzIGEgdmFyaWFudCBvZiBgc2hhMWAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGVzaGExKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImZpbGVzaGExXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlc2hhMjU2IGZpbGVzaGEyNTZ9IGlzIGEgdmFyaWFudCBvZiBgc2hhMjU2YCB0aGF0IGhhc2hlcyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZXNoYTI1NihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlc2hhMjU2XCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlc2hhNTEyIGZpbGVzaGE1MTJ9IGlzIGEgdmFyaWFudCBvZiBgc2hhNTEyYCB0aGF0IGhhc2hlcyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZXNoYTUxMihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlc2hhNTEyXCIsIFtzdHJpbmdWYWx1ZV0pKHBhdGgpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mbGF0dGVuIGZsYXR0ZW59IHRha2VzIGEgbGlzdCBhbmQgcmVwbGFjZXMgYW55IGVsZW1lbnRzIHRoYXQgYXJlIGxpc3RzIHdpdGggYSBmbGF0dGVuZWQgc2VxdWVuY2Ugb2YgdGhlIGxpc3QgY29udGVudHMuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgZmxhdHRlbihsaXN0OiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJmbGF0dGVuXCIsIFthbnlWYWx1ZV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mbG9vciBmbG9vcn0gcmV0dXJucyB0aGUgY2xvc2VzdCB3aG9sZSBudW1iZXIgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHZhbHVlLCB3aGljaCBtYXkgYmUgYSBmcmFjdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICAgKi9cbiAgc3RhdGljIGZsb29yKG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmxvb3JcIiwgW251bWVyaWNWYWx1ZV0pKG51bSkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mb3JtYXQgZm9ybWF0fSBmdW5jdGlvbiBwcm9kdWNlcyBhIHN0cmluZyBieSBmb3JtYXR0aW5nIGEgbnVtYmVyIG9mIG90aGVyIHZhbHVlcyBhY2NvcmRpbmcgdG8gYSBzcGVjaWZpY2F0aW9uIHN0cmluZy4gSXQgaXMgc2ltaWxhciB0byB0aGUgYHByaW50ZmAgZnVuY3Rpb24gaW4gQywgYW5kIG90aGVyIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHByb2dyYW1taW5nIGxhbmd1YWdlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGFyZ3NcbiAgICovXG4gIHN0YXRpYyBmb3JtYXQoZm9ybWF0OiBzdHJpbmcsIGFyZ3M6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzQW55KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJmb3JtYXRcIiwgW3N0cmluZ1ZhbHVlLCB2YXJpYWRpYyhhbnlWYWx1ZSldKShcbiAgICAgICAgZm9ybWF0LFxuICAgICAgICBhcmdzLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Zvcm1hdGRhdGUgZm9ybWF0ZGF0ZX0gY29udmVydHMgYSB0aW1lc3RhbXAgaW50byBhIGRpZmZlcmVudCB0aW1lIGZvcm1hdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGltZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdGRhdGUoZm9ybWF0OiBzdHJpbmcsIHRpbWU6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiZm9ybWF0ZGF0ZVwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoZm9ybWF0LCB0aW1lKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Zvcm1hdGxpc3QgZm9ybWF0bGlzdH0gcHJvZHVjZXMgYSBsaXN0IG9mIHN0cmluZ3MgYnkgZm9ybWF0dGluZyBhIG51bWJlciBvZiBvdGhlciB2YWx1ZXMgYWNjb3JkaW5nIHRvIGEgc3BlY2lmaWNhdGlvbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcmdzXG4gICAqL1xuICBzdGF0aWMgZm9ybWF0bGlzdChmb3JtYXQ6IHN0cmluZywgYXJnczogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImZvcm1hdGxpc3RcIiwgW3N0cmluZ1ZhbHVlLCB2YXJpYWRpYyhhbnlWYWx1ZSldKShcbiAgICAgICAgZm9ybWF0LFxuICAgICAgICBhcmdzLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2luZGVudCBpbmRlbnR9IGFkZHMgYSBnaXZlbiBudW1iZXIgb2Ygc3BhY2VzIHRvIHRoZSBiZWdpbm5pbmdzIG9mIGFsbCBidXQgdGhlIGZpcnN0IGxpbmUgaW4gYSBnaXZlbiBtdWx0aS1saW5lIHN0cmluZy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHNwYWNlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgaW5kZW50KHNwYWNlczogbnVtYmVyLCBzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiaW5kZW50XCIsIFtudW1lcmljVmFsdWUsIHN0cmluZ1ZhbHVlXSkoc3BhY2VzLCBzdHIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvaW5kZXggaW5kZXh9IGZpbmRzIHRoZSBlbGVtZW50IGluZGV4IGZvciBhIGdpdmVuIHZhbHVlIGluIGEgbGlzdC5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBzdGF0aWMgaW5kZXgobGlzdDogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwiaW5kZXhcIiwgW2FueVZhbHVlLCBhbnlWYWx1ZV0pKGxpc3QsIHZhbHVlKSk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2pvaW4gam9pbn0gcHJvZHVjZXMgYSBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyB0b2dldGhlciBhbGwgZWxlbWVudHMgb2YgYSBnaXZlbiBsaXN0IG9mIHN0cmluZ3Mgd2l0aCB0aGUgZ2l2ZW4gZGVsaW1pdGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59IGxpc3RzXG4gICAqL1xuICBzdGF0aWMgX2pvaW4oc2VwYXJhdG9yOiBzdHJpbmcsIGxpc3RzOiBzdHJpbmdbXVtdKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJqb2luXCIsIFtzdHJpbmdWYWx1ZSwgdmFyaWFkaWMobGlzdE9mKGFueVZhbHVlKSldKShcbiAgICAgICAgc2VwYXJhdG9yLFxuICAgICAgICBsaXN0cyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9qc29uZGVjb2RlIGpzb25kZWNvZGV9IGludGVycHJldHMgYSBnaXZlbiBzdHJpbmcgYXMgSlNPTiwgcmV0dXJuaW5nIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlc3VsdCBvZiBkZWNvZGluZyB0aGF0IHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGpzb25kZWNvZGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJqc29uZGVjb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2pzb25lbmNvZGUganNvbmVuY29kZX0gZW5jb2RlcyBhIGdpdmVuIHZhbHVlIHRvIGEgc3RyaW5nIHVzaW5nIEpTT04gc3ludGF4LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsXG4gICAqL1xuICBzdGF0aWMganNvbmVuY29kZSh2YWw6IGFueSkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImpzb25lbmNvZGVcIiwgW2FueVZhbHVlXSkodmFsKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMva2V5cyBrZXlzfSB0YWtlcyBhIG1hcCBhbmQgcmV0dXJucyBhIGxpc3QgY29udGFpbmluZyB0aGUga2V5cyBmcm9tIHRoYXQgbWFwLlxuICAgKiBAcGFyYW0ge2FueX0gaW5wdXRNYXBcbiAgICovXG4gIHN0YXRpYyBrZXlzKGlucHV0TWFwOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJrZXlzXCIsIFthbnlWYWx1ZV0pKGlucHV0TWFwKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbGVuZ3RoIGxlbmd0aH0gZGV0ZXJtaW5lcyB0aGUgbGVuZ3RoIG9mIGEgZ2l2ZW4gbGlzdCwgbWFwLCBvciBzdHJpbmcuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIGxlbmd0aE9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIodGVycmFmb3JtRnVuY3Rpb24oXCJsZW5ndGhcIiwgW2FueVZhbHVlXSkodmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9sb2cgbG9nfSByZXR1cm5zIHRoZSBsb2dhcml0aG0gb2YgYSBnaXZlbiBudW1iZXIgaW4gYSBnaXZlbiBiYXNlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBiYXNlXG4gICAqL1xuICBzdGF0aWMgbG9nKG51bTogbnVtYmVyLCBiYXNlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImxvZ1wiLCBbbnVtZXJpY1ZhbHVlLCBudW1lcmljVmFsdWVdKShudW0sIGJhc2UpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2xvb2t1cCBsb29rdXB9IHJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgZWxlbWVudCBmcm9tIGEgbWFwLCBnaXZlbiBpdHMga2V5LiBJZiB0aGUgZ2l2ZW4ga2V5IGRvZXMgbm90IGV4aXN0LCB0aGUgZ2l2ZW4gZGVmYXVsdCB2YWx1ZSBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuICAgKiBAcGFyYW0ge2FueX0gaW5wdXRNYXBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGRlZmF1bHRWYWx1ZVxuICAgKi9cbiAgc3RhdGljIF9sb29rdXAoaW5wdXRNYXA6IGFueSwga2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImxvb2t1cFwiLCBbYW55VmFsdWUsIHN0cmluZ1ZhbHVlLCB2YXJpYWRpYyhhbnlWYWx1ZSldKShcbiAgICAgICAgaW5wdXRNYXAsXG4gICAgICAgIGtleSxcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2xvd2VyIGxvd2VyfSBjb252ZXJ0cyBhbGwgY2FzZWQgbGV0dGVycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHRvIGxvd2VyY2FzZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGxvd2VyKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwibG93ZXJcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWF0Y2hrZXlzIG1hdGNoa2V5c30gY29uc3RydWN0cyBhIG5ldyBsaXN0IGJ5IHRha2luZyBhIHN1YnNldCBvZiBlbGVtZW50cyBmcm9tIG9uZSBsaXN0IHdob3NlIGluZGV4ZXMgbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXhlcyBvZiB2YWx1ZXMgaW4gYW5vdGhlciBsaXN0LlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IHZhbHVlc1xuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGtleXNcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBzZWFyY2hzZXRcbiAgICovXG4gIHN0YXRpYyBtYXRjaGtleXModmFsdWVzOiBhbnlbXSwga2V5czogYW55W10sIHNlYXJjaHNldDogYW55W10pIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtYXRjaGtleXNcIiwgW1xuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgXSkodmFsdWVzLCBrZXlzLCBzZWFyY2hzZXQpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWF4IG1heH0gdGFrZXMgb25lIG9yIG1vcmUgbnVtYmVycyBhbmQgcmV0dXJucyB0aGUgZ3JlYXRlc3QgbnVtYmVyIGZyb20gdGhlIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBudW1iZXJzXG4gICAqL1xuICBzdGF0aWMgbWF4KG51bWJlcnM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtYXhcIiwgW3ZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShudW1iZXJzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL21kNSBtZDV9IGNvbXB1dGVzIHRoZSBNRDUgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIG1kNShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcIm1kNVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9tZXJnZSBtZXJnZX0gdGFrZXMgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBtYXBzIG9yIG9iamVjdHMsIGFuZCByZXR1cm5zIGEgc2luZ2xlIG1hcCBvciBvYmplY3QgdGhhdCBjb250YWlucyBhIG1lcmdlZCBzZXQgb2YgZWxlbWVudHMgZnJvbSBhbGwgYXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IG1hcHNcbiAgICovXG4gIHN0YXRpYyBtZXJnZShtYXBzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcIm1lcmdlXCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShtYXBzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWluIG1pbn0gdGFrZXMgb25lIG9yIG1vcmUgbnVtYmVycyBhbmQgcmV0dXJucyB0aGUgc21hbGxlc3QgbnVtYmVyIGZyb20gdGhlIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBudW1iZXJzXG4gICAqL1xuICBzdGF0aWMgbWluKG51bWJlcnM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtaW5cIiwgW3ZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShudW1iZXJzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL25vbnNlbnNpdGl2ZSBub25zZW5zaXRpdmV9IHRha2VzIGEgc2Vuc2l0aXZlIHZhbHVlIGFuZCByZXR1cm5zIGEgY29weSBvZiB0aGF0IHZhbHVlIHdpdGggdGhlIHNlbnNpdGl2ZSBtYXJraW5nIHJlbW92ZWQsIHRoZXJlYnkgZXhwb3NpbmcgdGhlIHNlbnNpdGl2ZSB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBzdGF0aWMgbm9uc2Vuc2l0aXZlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJub25zZW5zaXRpdmVcIiwgW2FueVZhbHVlXSkodmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9vbmUgb25lfSB0YWtlcyBhIGxpc3QsIHNldCwgb3IgdHVwbGUgdmFsdWUgd2l0aCBlaXRoZXIgemVybyBvciBvbmUgZWxlbWVudHMuIElmIHRoZSBjb2xsZWN0aW9uIGlzIGVtcHR5LCBgb25lYCByZXR1cm5zIGBudWxsYC4gT3RoZXJ3aXNlLCBgb25lYCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50LiBJZiB0aGVyZSBhcmUgdHdvIG9yIG1vcmUgZWxlbWVudHMgdGhlbiBgb25lYCB3aWxsIHJldHVybiBhbiBlcnJvci5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICovXG4gIHN0YXRpYyBvbmUobGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwib25lXCIsIFthbnlWYWx1ZV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9wYXJzZWludCBwYXJzZWludH0gcGFyc2VzIHRoZSBnaXZlbiBzdHJpbmcgYXMgYSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIGluIHRoZSBzcGVjaWZpZWQgYmFzZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG51bWJlci4gVGhlIGJhc2UgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDYyIGluY2x1c2l2ZS5cbiAgICogQHBhcmFtIHthbnl9IG51bWJlclxuICAgKiBAcGFyYW0ge251bWJlcn0gYmFzZVxuICAgKi9cbiAgc3RhdGljIHBhcnNlaW50KG51bWJlcjogYW55LCBiYXNlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInBhcnNlaW50XCIsIFthbnlWYWx1ZSwgbnVtZXJpY1ZhbHVlXSkobnVtYmVyLCBiYXNlKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BhdGhleHBhbmQgcGF0aGV4cGFuZH0gdGFrZXMgYSBmaWxlc3lzdGVtIHBhdGggdGhhdCBtaWdodCBiZWdpbiB3aXRoIGEgYH5gIHNlZ21lbnQsIGFuZCBpZiBzbyBpdCByZXBsYWNlcyB0aGF0IHNlZ21lbnQgd2l0aCB0aGUgY3VycmVudCB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBwYXRoZXhwYW5kKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInBhdGhleHBhbmRcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BsYW50aW1lc3RhbXAgcGxhbnRpbWVzdGFtcH0gcmV0dXJucyBhIFVUQyB0aW1lc3RhbXAgc3RyaW5nIGluIFtSRkMgMzMzOV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkpIGZvcm1hdCwgZml4ZWQgdG8gYSBjb25zdGFudCB0aW1lIHJlcHJlc2VudGluZyB0aGUgdGltZSBvZiB0aGUgcGxhbi5cbiAgICovXG4gIHN0YXRpYyBwbGFudGltZXN0YW1wKCkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInBsYW50aW1lc3RhbXBcIiwgW10pKCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BvdyBwb3d9IGNhbGN1bGF0ZXMgYW4gZXhwb25lbnQsIGJ5IHJhaXNpbmcgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwb3dlciBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3dlclxuICAgKi9cbiAgc3RhdGljIHBvdyhudW06IG51bWJlciwgcG93ZXI6IG51bWJlcikge1xuICAgIHJldHVybiBhc051bWJlcihcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwicG93XCIsIFtudW1lcmljVmFsdWUsIG51bWVyaWNWYWx1ZV0pKG51bSwgcG93ZXIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JhbmdlIHJhbmdlfSBnZW5lcmF0ZXMgYSBsaXN0IG9mIG51bWJlcnMgdXNpbmcgYSBzdGFydCB2YWx1ZSwgYSBsaW1pdCB2YWx1ZSwgYW5kIGEgc3RlcCB2YWx1ZS5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXNcbiAgICovXG4gIHN0YXRpYyBfcmFuZ2UocGFyYW1zOiBudW1iZXJbXSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJyYW5nZVwiLCBbdmFyaWFkaWMobnVtZXJpY1ZhbHVlKV0pKHBhcmFtcykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JlZ2V4IHJlZ2V4fSBhcHBsaWVzIGEgW3JlZ3VsYXIgZXhwcmVzc2lvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVndWxhcl9leHByZXNzaW9uKSB0byBhIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5ncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHJlZ2V4KHBhdHRlcm46IHN0cmluZywgc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInJlZ2V4XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShwYXR0ZXJuLCBzdHIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcmVnZXhhbGwgcmVnZXhhbGx9IGFwcGxpZXMgYSBbcmVndWxhciBleHByZXNzaW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZWd1bGFyX2V4cHJlc3Npb24pIHRvIGEgc3RyaW5nIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgbWF0Y2hlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHJlZ2V4YWxsKHBhdHRlcm46IHN0cmluZywgc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJyZWdleGFsbFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkocGF0dGVybiwgc3RyKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JlcGxhY2UgcmVwbGFjZX0gc2VhcmNoZXMgYSBnaXZlbiBzdHJpbmcgZm9yIGFub3RoZXIgZ2l2ZW4gc3Vic3RyaW5nLCBhbmQgcmVwbGFjZXMgZWFjaCBvY2N1cnJlbmNlIHdpdGggYSBnaXZlbiByZXBsYWNlbWVudCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZVxuICAgKi9cbiAgc3RhdGljIHJlcGxhY2Uoc3RyOiBzdHJpbmcsIHN1YnN0cjogc3RyaW5nLCByZXBsYWNlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInJlcGxhY2VcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShcbiAgICAgICAgc3RyLFxuICAgICAgICBzdWJzdHIsXG4gICAgICAgIHJlcGxhY2UsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcmV2ZXJzZSByZXZlcnNlfSB0YWtlcyBhIHNlcXVlbmNlIGFuZCBwcm9kdWNlcyBhIG5ldyBzZXF1ZW5jZSBvZiB0aGUgc2FtZSBsZW5ndGggd2l0aCBhbGwgb2YgdGhlIHNhbWUgZWxlbWVudHMgYXMgdGhlIGdpdmVuIHNlcXVlbmNlIGJ1dCBpbiByZXZlcnNlIG9yZGVyLlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKi9cbiAgc3RhdGljIHJldmVyc2UobGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwicmV2ZXJzZVwiLCBbYW55VmFsdWVdKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcnNhZGVjcnlwdCByc2FkZWNyeXB0fSBkZWNyeXB0cyBhbiBSU0EtZW5jcnlwdGVkIGNpcGhlcnRleHQsIHJldHVybmluZyB0aGUgY29ycmVzcG9uZGluZyBjbGVhcnRleHQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaXBoZXJ0ZXh0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcml2YXRla2V5XG4gICAqL1xuICBzdGF0aWMgcnNhZGVjcnlwdChjaXBoZXJ0ZXh0OiBzdHJpbmcsIHByaXZhdGVrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwicnNhZGVjcnlwdFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIGNpcGhlcnRleHQsXG4gICAgICAgIHByaXZhdGVrZXksXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2Vuc2l0aXZlIHNlbnNpdGl2ZX0gdGFrZXMgYW55IHZhbHVlIGFuZCByZXR1cm5zIGEgY29weSBvZiBpdCBtYXJrZWQgc28gdGhhdCBUZXJyYWZvcm0gd2lsbCB0cmVhdCBpdCBhcyBzZW5zaXRpdmUsIHdpdGggdGhlIHNhbWUgbWVhbmluZyBhbmQgYmVoYXZpb3IgYXMgZm9yIFtzZW5zaXRpdmUgaW5wdXQgdmFyaWFibGVzXSgvdGVycmFmb3JtL2xhbmd1YWdlL3ZhbHVlcy92YXJpYWJsZXMjc3VwcHJlc3NpbmctdmFsdWVzLWluLWNsaS1vdXRwdXQpLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyBzZW5zaXRpdmUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInNlbnNpdGl2ZVwiLCBbYW55VmFsdWVdKSh2YWx1ZSkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zZXRpbnRlcnNlY3Rpb24gc2V0aW50ZXJzZWN0aW9ufSBmdW5jdGlvbiB0YWtlcyBtdWx0aXBsZSBzZXRzIGFuZCBwcm9kdWNlcyBhIHNpbmdsZSBzZXQgY29udGFpbmluZyBvbmx5IHRoZSBlbGVtZW50cyB0aGF0IGFsbCBvZiB0aGUgZ2l2ZW4gc2V0cyBoYXZlIGluIGNvbW1vbi4gSW4gb3RoZXIgd29yZHMsIGl0IGNvbXB1dGVzIHRoZSBbaW50ZXJzZWN0aW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JbnRlcnNlY3Rpb25fXFwoc2V0X3RoZW9yeVxcKSkgb2YgdGhlIHNldHMuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gZmlyc3Rfc2V0XG4gICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8YW55Pj59IG90aGVyX3NldHNcbiAgICovXG4gIHN0YXRpYyBzZXRpbnRlcnNlY3Rpb24oZmlyc3Rfc2V0OiBhbnlbXSwgb3RoZXJfc2V0czogYW55W11bXSkge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNldGludGVyc2VjdGlvblwiLCBbXG4gICAgICAgIGxpc3RPZihhbnlWYWx1ZSksXG4gICAgICAgIHZhcmlhZGljKGxpc3RPZihhbnlWYWx1ZSkpLFxuICAgICAgXSkoZmlyc3Rfc2V0LCBvdGhlcl9zZXRzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zZXRwcm9kdWN0IHNldHByb2R1Y3R9IGZ1bmN0aW9uIGZpbmRzIGFsbCBvZiB0aGUgcG9zc2libGUgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIGZyb20gYWxsIG9mIHRoZSBnaXZlbiBzZXRzIGJ5IGNvbXB1dGluZyB0aGUgW0NhcnRlc2lhbiBwcm9kdWN0XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYXJ0ZXNpYW5fcHJvZHVjdCkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gc2V0c1xuICAgKi9cbiAgc3RhdGljIHNldHByb2R1Y3Qoc2V0czogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJzZXRwcm9kdWN0XCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShzZXRzKSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NldHN1YnRyYWN0IHNldHN1YnRyYWN0fSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IHNldCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBmaXJzdCBzZXQgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHNlY29uZCBzZXQuIEluIG90aGVyIHdvcmRzLCBpdCBjb21wdXRlcyB0aGUgW3JlbGF0aXZlIGNvbXBsZW1lbnRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbXBsZW1lbnRfXFwoc2V0X3RoZW9yeVxcKSNSZWxhdGl2ZV9jb21wbGVtZW50KSBvZiB0aGUgc2Vjb25kIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBhXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYlxuICAgKi9cbiAgc3RhdGljIHNldHN1YnRyYWN0KGE6IGFueVtdLCBiOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNldHN1YnRyYWN0XCIsIFtsaXN0T2YoYW55VmFsdWUpLCBsaXN0T2YoYW55VmFsdWUpXSkoXG4gICAgICAgIGEsXG4gICAgICAgIGIsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NldHVuaW9uIHNldHVuaW9ufSBmdW5jdGlvbiB0YWtlcyBtdWx0aXBsZSBzZXRzIGFuZCBwcm9kdWNlcyBhIHNpbmdsZSBzZXQgY29udGFpbmluZyB0aGUgZWxlbWVudHMgZnJvbSBhbGwgb2YgdGhlIGdpdmVuIHNldHMuIEluIG90aGVyIHdvcmRzLCBpdCBjb21wdXRlcyB0aGUgW3VuaW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vbmlvbl9cXChzZXRfdGhlb3J5XFwpKSBvZiB0aGUgc2V0cy5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBmaXJzdF9zZXRcbiAgICogQHBhcmFtIHtBcnJheTxBcnJheTxhbnk+Pn0gb3RoZXJfc2V0c1xuICAgKi9cbiAgc3RhdGljIHNldHVuaW9uKGZpcnN0X3NldDogYW55W10sIG90aGVyX3NldHM6IGFueVtdW10pIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzZXR1bmlvblwiLCBbXG4gICAgICAgIGxpc3RPZihhbnlWYWx1ZSksXG4gICAgICAgIHZhcmlhZGljKGxpc3RPZihhbnlWYWx1ZSkpLFxuICAgICAgXSkoZmlyc3Rfc2V0LCBvdGhlcl9zZXRzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NoYTEgc2hhMX0gY29tcHV0ZXMgdGhlIFNIQTEgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNoYTEoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzaGExXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NoYTI1NiBzaGEyNTZ9IGNvbXB1dGVzIHRoZSBTSEEyNTYgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNoYTI1NihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zaGE1MTIgc2hhNTEyfSBjb21wdXRlcyB0aGUgU0hBNTEyIGhhc2ggb2YgYSBnaXZlbiBzdHJpbmcgYW5kIGVuY29kZXMgaXQgd2l0aCBoZXhhZGVjaW1hbCBkaWdpdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBzaGE1MTIoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzaGE1MTJcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2lnbnVtIHNpZ251bX0gZGV0ZXJtaW5lcyB0aGUgc2lnbiBvZiBhIG51bWJlciwgcmV0dXJuaW5nIGEgbnVtYmVyIGJldHdlZW4gLTEgYW5kIDEgdG8gcmVwcmVzZW50IHRoZSBzaWduLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqL1xuICBzdGF0aWMgc2lnbnVtKG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwic2lnbnVtXCIsIFtudW1lcmljVmFsdWVdKShudW0pKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zbGljZSBzbGljZX0gZXh0cmFjdHMgc29tZSBjb25zZWN1dGl2ZSBlbGVtZW50cyBmcm9tIHdpdGhpbiBhIGxpc3QuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydF9pbmRleFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kX2luZGV4XG4gICAqL1xuICBzdGF0aWMgc2xpY2UobGlzdDogYW55LCBzdGFydF9pbmRleDogbnVtYmVyLCBlbmRfaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwic2xpY2VcIiwgW2FueVZhbHVlLCBudW1lcmljVmFsdWUsIG51bWVyaWNWYWx1ZV0pKFxuICAgICAgICBsaXN0LFxuICAgICAgICBzdGFydF9pbmRleCxcbiAgICAgICAgZW5kX2luZGV4LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NvcnQgc29ydH0gdGFrZXMgYSBsaXN0IG9mIHN0cmluZ3MgYW5kIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIHRob3NlIHN0cmluZ3Mgc29ydGVkIGxleGljb2dyYXBoaWNhbGx5LlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGxpc3RcbiAgICovXG4gIHN0YXRpYyBzb3J0KGxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIGFzTGlzdCh0ZXJyYWZvcm1GdW5jdGlvbihcInNvcnRcIiwgW2xpc3RPZihhbnlWYWx1ZSldKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3BsaXQgc3BsaXR9IHByb2R1Y2VzIGEgbGlzdCBieSBkaXZpZGluZyBhIGdpdmVuIHN0cmluZyBhdCBhbGwgb2NjdXJyZW5jZXMgb2YgYSBnaXZlbiBzZXBhcmF0b3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXBhcmF0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNwbGl0KHNlcGFyYXRvcjogc3RyaW5nLCBzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNwbGl0XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzZXBhcmF0b3IsIHN0ciksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdGFydHN3aXRoIHN0YXJ0c3dpdGh9IHRha2VzIHR3byB2YWx1ZXM6IGEgc3RyaW5nIHRvIGNoZWNrIGFuZCBhIHByZWZpeCBzdHJpbmcuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmluZyBiZWdpbnMgd2l0aCB0aGF0IGV4YWN0IHByZWZpeC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqL1xuICBzdGF0aWMgc3RhcnRzd2l0aChzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzdGFydHN3aXRoXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHByZWZpeCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdHJjb250YWlucyBzdHJjb250YWluc30gdGFrZXMgdHdvIHZhbHVlczogYSBzdHJpbmcgdG8gY2hlY2sgYW5kIGFuIGV4cGVjdGVkIHN1YnN0cmluZy4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGhhcyB0aGUgc3Vic3RyaW5nIGNvbnRhaW5lZCB3aXRoaW4gaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnN0clxuICAgKi9cbiAgc3RhdGljIHN0cmNvbnRhaW5zKHN0cjogc3RyaW5nLCBzdWJzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc0Jvb2xlYW4oXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInN0cmNvbnRhaW5zXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHN1YnN0ciksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdHJyZXYgc3RycmV2fSByZXZlcnNlcyB0aGUgY2hhcmFjdGVycyBpbiBhIHN0cmluZy4gTm90ZSB0aGF0IHRoZSBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIF9Vbmljb2RlIGNoYXJhY3RlcnNfIChpbiB0ZWNobmljYWwgdGVybXMsIFVuaWNvZGUgW2dyYXBoZW1lIGNsdXN0ZXIgYm91bmRhcmllc10oaHR0cHM6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyMjkvI0dyYXBoZW1lX0NsdXN0ZXJfQm91bmRhcmllcykgYXJlIHJlc3BlY3RlZCkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBzdHJyZXYoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzdHJyZXZcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3Vic3RyIHN1YnN0cn0gZXh0cmFjdHMgYSBzdWJzdHJpbmcgZnJvbSBhIGdpdmVuIHN0cmluZyBieSBvZmZzZXQgYW5kIChtYXhpbXVtKSBsZW5ndGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gICAqL1xuICBzdGF0aWMgc3Vic3RyKHN0cjogc3RyaW5nLCBvZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInN1YnN0clwiLCBbc3RyaW5nVmFsdWUsIG51bWVyaWNWYWx1ZSwgbnVtZXJpY1ZhbHVlXSkoXG4gICAgICAgIHN0cixcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBsZW5ndGgsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3VtIHN1bX0gdGFrZXMgYSBsaXN0IG9yIHNldCBvZiBudW1iZXJzIGFuZCByZXR1cm5zIHRoZSBzdW0gb2YgdGhvc2UgbnVtYmVycy5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICovXG4gIHN0YXRpYyBzdW0obGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwic3VtXCIsIFthbnlWYWx1ZV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90ZW1wbGF0ZWZpbGUgdGVtcGxhdGVmaWxlfSByZWFkcyB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhbmQgcmVuZGVycyBpdHMgY29udGVudCBhcyBhIHRlbXBsYXRlIHVzaW5nIGEgc3VwcGxpZWQgc2V0IG9mIHRlbXBsYXRlIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICogQHBhcmFtIHthbnl9IHZhcnNcbiAgICovXG4gIHN0YXRpYyB0ZW1wbGF0ZWZpbGUocGF0aDogc3RyaW5nLCB2YXJzOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRlbXBsYXRlZmlsZVwiLCBbc3RyaW5nVmFsdWUsIGFueVZhbHVlXSkocGF0aCwgdmFycyksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90ZXh0ZGVjb2RlYmFzZTY0IHRleHRkZWNvZGViYXNlNjR9IGZ1bmN0aW9uIGRlY29kZXMgYSBzdHJpbmcgdGhhdCB3YXMgcHJldmlvdXNseSBCYXNlNjQtZW5jb2RlZCwgYW5kIHRoZW4gaW50ZXJwcmV0cyB0aGUgcmVzdWx0IGFzIGNoYXJhY3RlcnMgaW4gYSBzcGVjaWZpZWQgY2hhcmFjdGVyIGVuY29kaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICAgKi9cbiAgc3RhdGljIHRleHRkZWNvZGViYXNlNjQoc291cmNlOiBzdHJpbmcsIGVuY29kaW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRleHRkZWNvZGViYXNlNjRcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGVuY29kaW5nLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RleHRlbmNvZGViYXNlNjQgdGV4dGVuY29kZWJhc2U2NH0gZW5jb2RlcyB0aGUgdW5pY29kZSBjaGFyYWN0ZXJzIGluIGEgZ2l2ZW4gc3RyaW5nIHVzaW5nIGEgc3BlY2lmaWVkIGNoYXJhY3RlciBlbmNvZGluZywgcmV0dXJuaW5nIHRoZSByZXN1bHQgYmFzZTY0IGVuY29kZWQgYmVjYXVzZSBUZXJyYWZvcm0gbGFuZ3VhZ2Ugc3RyaW5ncyBhcmUgYWx3YXlzIHNlcXVlbmNlcyBvZiB1bmljb2RlIGNoYXJhY3RlcnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gICAqL1xuICBzdGF0aWMgdGV4dGVuY29kZWJhc2U2NChzdHI6IHN0cmluZywgZW5jb2Rpbmc6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidGV4dGVuY29kZWJhc2U2NFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIHN0cixcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdGltZWFkZCB0aW1lYWRkfSBhZGRzIGEgZHVyYXRpb24gdG8gYSB0aW1lc3RhbXAsIHJldHVybmluZyBhIG5ldyB0aW1lc3RhbXAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lc3RhbXBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGR1cmF0aW9uXG4gICAqL1xuICBzdGF0aWMgdGltZWFkZCh0aW1lc3RhbXA6IHN0cmluZywgZHVyYXRpb246IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidGltZWFkZFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdGltZWNtcCB0aW1lY21wfSBjb21wYXJlcyB0d28gdGltZXN0YW1wcyBhbmQgcmV0dXJucyBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIG9yZGVyaW5nIG9mIHRoZSBpbnN0YW50cyB0aG9zZSB0aW1lc3RhbXBzIHJlcHJlc2VudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWVzdGFtcF9hXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lc3RhbXBfYlxuICAgKi9cbiAgc3RhdGljIHRpbWVjbXAodGltZXN0YW1wX2E6IHN0cmluZywgdGltZXN0YW1wX2I6IHN0cmluZykge1xuICAgIHJldHVybiBhc051bWJlcihcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidGltZWNtcFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIHRpbWVzdGFtcF9hLFxuICAgICAgICB0aW1lc3RhbXBfYixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90aW1lc3RhbXAgdGltZXN0YW1wfSByZXR1cm5zIGEgVVRDIHRpbWVzdGFtcCBzdHJpbmcgaW4gW1JGQyAzMzM5XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSkgZm9ybWF0LlxuICAgKi9cbiAgc3RhdGljIHRpbWVzdGFtcCgpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ0aW1lc3RhbXBcIiwgW10pKCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RpdGxlIHRpdGxlfSBjb252ZXJ0cyB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHVwcGVyY2FzZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHRpdGxlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwidGl0bGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9ib29sIHRvYm9vbH0gY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgYm9vbGVhbiB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b2Jvb2wodjogYW55KSB7XG4gICAgcmV0dXJuIGFzQm9vbGVhbih0ZXJyYWZvcm1GdW5jdGlvbihcInRvYm9vbFwiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9saXN0IHRvbGlzdH0gY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgbGlzdCB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b2xpc3QodjogYW55KSB7XG4gICAgcmV0dXJuIGFzTGlzdCh0ZXJyYWZvcm1GdW5jdGlvbihcInRvbGlzdFwiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9tYXAgdG9tYXB9IGNvbnZlcnRzIGl0cyBhcmd1bWVudCB0byBhIG1hcCB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b21hcCh2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJ0b21hcFwiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9udW1iZXIgdG9udW1iZXJ9IGNvbnZlcnRzIGl0cyBhcmd1bWVudCB0byBhIG51bWJlciB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b251bWJlcih2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIodGVycmFmb3JtRnVuY3Rpb24oXCJ0b251bWJlclwiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9zZXQgdG9zZXR9IGNvbnZlcnRzIGl0cyBhcmd1bWVudCB0byBhIHNldCB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b3NldCh2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNMaXN0KHRlcnJhZm9ybUZ1bmN0aW9uKFwidG9zZXRcIiwgW2FueVZhbHVlXSkodikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3Rvc3RyaW5nIHRvc3RyaW5nfSBjb252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBzdHJpbmcgdmFsdWUuXG4gICAqIEBwYXJhbSB7YW55fSB2XG4gICAqL1xuICBzdGF0aWMgdG9zdHJpbmcodjogYW55KSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwidG9zdHJpbmdcIiwgW2FueVZhbHVlXSkodikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyYW5zcG9zZSB0cmFuc3Bvc2V9IHRha2VzIGEgbWFwIG9mIGxpc3RzIG9mIHN0cmluZ3MgYW5kIHN3YXBzIHRoZSBrZXlzIGFuZCB2YWx1ZXMgdG8gcHJvZHVjZSBhIG5ldyBtYXAgb2YgbGlzdHMgb2Ygc3RyaW5ncy5cbiAgICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBBcnJheTxzdHJpbmc+Pn0gdmFsdWVzXG4gICAqL1xuICBzdGF0aWMgdHJhbnNwb3NlKHZhbHVlczogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwidHJhbnNwb3NlXCIsIFttYXBWYWx1ZV0pKHZhbHVlcykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyaW0gdHJpbX0gcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHNldCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGdpdmVuIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3V0c2V0XG4gICAqL1xuICBzdGF0aWMgdHJpbShzdHI6IHN0cmluZywgY3V0c2V0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRyaW1cIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHN0ciwgY3V0c2V0KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyaW1wcmVmaXggdHJpbXByZWZpeH0gcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHByZWZpeCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLiBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIHByZWZpeCwgdGhlIHN0cmluZyBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKi9cbiAgc3RhdGljIHRyaW1wcmVmaXgoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0cmltcHJlZml4XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHByZWZpeCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90cmltc3BhY2UgdHJpbXNwYWNlfSByZW1vdmVzIGFueSBzcGFjZSBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGdpdmVuIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHRyaW1zcGFjZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInRyaW1zcGFjZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90cmltc3VmZml4IHRyaW1zdWZmaXh9IHJlbW92ZXMgdGhlIHNwZWNpZmllZCBzdWZmaXggZnJvbSB0aGUgZW5kIG9mIHRoZSBnaXZlbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1ZmZpeFxuICAgKi9cbiAgc3RhdGljIHRyaW1zdWZmaXgoc3RyOiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0cmltc3VmZml4XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHN1ZmZpeCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90cnkgdHJ5fSBldmFsdWF0ZXMgYWxsIG9mIGl0cyBhcmd1bWVudCBleHByZXNzaW9ucyBpbiB0dXJuIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGZpcnN0IG9uZSB0aGF0IGRvZXMgbm90IHByb2R1Y2UgYW55IGVycm9ycy5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBleHByZXNzaW9uc1xuICAgKi9cbiAgc3RhdGljIHRyeShleHByZXNzaW9uczogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJ0cnlcIiwgW3ZhcmlhZGljKGFueVZhbHVlKV0pKGV4cHJlc3Npb25zKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdXBwZXIgdXBwZXJ9IGNvbnZlcnRzIGFsbCBjYXNlZCBsZXR0ZXJzIGluIHRoZSBnaXZlbiBzdHJpbmcgdG8gdXBwZXJjYXNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgdXBwZXIoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ1cHBlclwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy91cmxlbmNvZGUgdXJsZW5jb2RlfSBhcHBsaWVzIFVSTCBlbmNvZGluZyB0byBhIGdpdmVuIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHVybGVuY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInVybGVuY29kZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy91dWlkIHV1aWR9IGdlbmVyYXRlcyBhIHVuaXF1ZSBpZGVudGlmaWVyIHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyB1dWlkKCkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInV1aWRcIiwgW10pKCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3V1aWR2NSB1dWlkdjV9IGdlbmVyYXRlcyBhIF9uYW1lLWJhc2VkXyBVVUlELCBhcyBkZXNjcmliZWQgaW4gW1JGQyA0MTIyIHNlY3Rpb24gNC4zXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMyksIGFsc28ga25vd24gYXMgYSBcInZlcnNpb24gNVwiIFVVSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIHN0YXRpYyB1dWlkdjUobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidXVpZHY1XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShuYW1lc3BhY2UsIG5hbWUpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdmFsdWVzIHZhbHVlc30gdGFrZXMgYSBtYXAgYW5kIHJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhhdCBtYXAuXG4gICAqIEBwYXJhbSB7YW55fSBtYXBwaW5nXG4gICAqL1xuICBzdGF0aWMgdmFsdWVzKG1hcHBpbmc6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInZhbHVlc1wiLCBbYW55VmFsdWVdKShtYXBwaW5nKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMveWFtbGRlY29kZSB5YW1sZGVjb2RlfSBwYXJzZXMgYSBzdHJpbmcgYXMgYSBzdWJzZXQgb2YgWUFNTCwgYW5kIHByb2R1Y2VzIGEgcmVwcmVzZW50YXRpb24gb2YgaXRzIHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjXG4gICAqL1xuICBzdGF0aWMgeWFtbGRlY29kZShzcmM6IHN0cmluZykge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInlhbWxkZWNvZGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3JjKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMveWFtbGVuY29kZSB5YW1sZW5jb2RlfSBlbmNvZGVzIGEgZ2l2ZW4gdmFsdWUgdG8gYSBzdHJpbmcgdXNpbmcgW1lBTUwgMS4yXShodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCkgYmxvY2sgc3ludGF4LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyB5YW1sZW5jb2RlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ5YW1sZW5jb2RlXCIsIFthbnlWYWx1ZV0pKHZhbHVlKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvemlwbWFwIHppcG1hcH0gY29uc3RydWN0cyBhIG1hcCBmcm9tIGEgbGlzdCBvZiBrZXlzIGFuZCBhIGNvcnJlc3BvbmRpbmcgbGlzdCBvZiB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0ga2V5c1xuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVzXG4gICAqL1xuICBzdGF0aWMgemlwbWFwKGtleXM6IHN0cmluZ1tdLCB2YWx1ZXM6IGFueSkge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiemlwbWFwXCIsIFtsaXN0T2YoYW55VmFsdWUpLCBhbnlWYWx1ZV0pKGtleXMsIHZhbHVlcyksXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -60,5 +60,5 @@ class ImportableResource extends terraform_element_1.TerraformElement {
|
|
|
60
60
|
}
|
|
61
61
|
exports.ImportableResource = ImportableResource;
|
|
62
62
|
_a = JSII_RTTI_SYMBOL_1;
|
|
63
|
-
ImportableResource[_a] = { fqn: "cdktn.ImportableResource", version: "0.23.
|
|
63
|
+
ImportableResource[_a] = { fqn: "cdktn.ImportableResource", version: "0.23.3" };
|
|
64
64
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0YWJsZS1yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbXBvcnRhYmxlLXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBTUEsMkRBQXVEO0FBRXZELHlGQUFvRjtBQVFwRjs7R0FFRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsb0NBQWdCO0lBQ3RELFlBQ0UsS0FBZ0IsRUFDaEIsSUFBWSxFQUNLLE1BQXlCO1FBRTFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRmhDLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBRzFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUNyQixJQUFJLHFEQUF3QixDQUMxQixPQUFPLEVBQ1AsOEZBQThGLENBQy9GLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxjQUFjO1FBQ25CLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2hHLE9BQU87WUFDTCxNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsRUFBRSxFQUFFO3dCQUNGLEtBQUssRUFBRSx1QkFBdUI7d0JBQzlCLElBQUksRUFBRSxRQUFRO3dCQUNkLGdCQUFnQixFQUFFLFdBQVc7cUJBQzlCO29CQUNELEVBQUUsRUFBRTt3QkFDRixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO3dCQUMzQixJQUFJLEVBQUUsUUFBUTt3QkFDZCxnQkFBZ0IsRUFBRSxRQUFRO3FCQUMzQjtvQkFDRCxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO3dCQUM1QixDQUFDLENBQUM7NEJBQ0UsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUc7NEJBQy9CLElBQUksRUFBRSxRQUFROzRCQUNkLGdCQUFnQixFQUFFLFdBQVc7eUJBQzlCO3dCQUNILENBQUMsQ0FBQyxTQUFTO2lCQUNkO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLFdBQVc7UUFDaEIsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDaEcsT0FBTztZQUNMLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxFQUFFLEVBQUUsdUJBQXVCO29CQUMzQixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO29CQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDdEU7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU87WUFDTCw4QkFBOEIsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUN4RCxDQUFDO0lBQ0osQ0FBQzs7QUEzREgsZ0RBNERDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVGVycmFmb3JtRWxlbWVudCB9IGZyb20gXCIuL3RlcnJhZm9ybS1lbGVtZW50XCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Qcm92aWRlciB9IGZyb20gXCIuL3RlcnJhZm9ybS1wcm92aWRlclwiO1xuaW1wb3J0IHsgVmFsaWRhdGVUZXJyYWZvcm1WZXJzaW9uIH0gZnJvbSBcIi4vdmFsaWRhdGlvbnMvdmFsaWRhdGUtdGVycmFmb3JtLXZlcnNpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBJSW1wb3J0YWJsZUNvbmZpZyB7XG4gIHRlcnJhZm9ybVJlc291cmNlVHlwZTogc3RyaW5nO1xuICBpbXBvcnRJZDogc3RyaW5nO1xuICBwcm92aWRlcj86IFRlcnJhZm9ybVByb3ZpZGVyO1xufVxuXG4vKipcbiAqIENsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGFuIGltcG9ydGFibGUgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbXBvcnRhYmxlUmVzb3VyY2UgZXh0ZW5kcyBUZXJyYWZvcm1FbGVtZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IElJbXBvcnRhYmxlQ29uZmlnLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgbmFtZSwgY29uZmlnLnRlcnJhZm9ybVJlc291cmNlVHlwZSk7XG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oXG4gICAgICBuZXcgVmFsaWRhdGVUZXJyYWZvcm1WZXJzaW9uKFxuICAgICAgICBcIj49MS41XCIsXG4gICAgICAgIGBJbXBvcnQgYmxvY2tzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgVGVycmFmb3JtID49MS41LiBQbGVhc2UgdXBncmFkZSB5b3VyIFRlcnJhZm9ybSB2ZXJzaW9uLmAsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdG9IY2xUZXJyYWZvcm0oKTogYW55IHtcbiAgICBjb25zdCBleHBlY3RlZFJlc291cmNlQWRkcmVzcyA9IGAke3RoaXMuY29uZmlnLnRlcnJhZm9ybVJlc291cmNlVHlwZX0uJHt0aGlzLmZyaWVuZGx5VW5pcXVlSWR9YDtcbiAgICByZXR1cm4ge1xuICAgICAgaW1wb3J0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0bzoge1xuICAgICAgICAgICAgdmFsdWU6IGV4cGVjdGVkUmVzb3VyY2VBZGRyZXNzLFxuICAgICAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwicmVmZXJlbmNlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZmlnLmltcG9ydElkLFxuICAgICAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm92aWRlcjogdGhpcy5jb25maWcucHJvdmlkZXJcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmZpZy5wcm92aWRlci5mcW4sXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyB0b1RlcnJhZm9ybSgpOiBhbnkge1xuICAgIGNvbnN0IGV4cGVjdGVkUmVzb3VyY2VBZGRyZXNzID0gYCR7dGhpcy5jb25maWcudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH1gO1xuICAgIHJldHVybiB7XG4gICAgICBpbXBvcnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRvOiBleHBlY3RlZFJlc291cmNlQWRkcmVzcyxcbiAgICAgICAgICBpZDogdGhpcy5jb25maWcuaW1wb3J0SWQsXG4gICAgICAgICAgcHJvdmlkZXI6IHRoaXMuY29uZmlnLnByb3ZpZGVyID8gdGhpcy5jb25maWcucHJvdmlkZXIuZnFuIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHRvTWV0YWRhdGEoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgaW1wb3J0c0dlbmVyYXRpbmdDb25maWd1cmF0aW9uOiBbdGhpcy5mcmllbmRseVVuaXF1ZUlkXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
package/lib/manifest.js
CHANGED
|
@@ -7,8 +7,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
7
7
|
// SPDX-License-Identifier: MPL-2.0
|
|
8
8
|
const path = require("path");
|
|
9
9
|
const fs = require("fs");
|
|
10
|
-
|
|
11
|
-
const stringify = require("json-stable-stringify");
|
|
10
|
+
const safe_stable_stringify_1 = require("safe-stable-stringify");
|
|
12
11
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
13
12
|
class Manifest {
|
|
14
13
|
constructor(version, outdir, hclOutput) {
|
|
@@ -46,13 +45,13 @@ class Manifest {
|
|
|
46
45
|
};
|
|
47
46
|
}
|
|
48
47
|
writeToFile() {
|
|
49
|
-
fs.writeFileSync(path.join(this.outdir, Manifest.fileName),
|
|
48
|
+
fs.writeFileSync(path.join(this.outdir, Manifest.fileName), (0, safe_stable_stringify_1.default)(this.buildManifest(), null, 2));
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
51
|
exports.Manifest = Manifest;
|
|
53
52
|
_a = JSII_RTTI_SYMBOL_1;
|
|
54
|
-
Manifest[_a] = { fqn: "cdktn.Manifest", version: "0.23.
|
|
53
|
+
Manifest[_a] = { fqn: "cdktn.Manifest", version: "0.23.3" };
|
|
55
54
|
Manifest.fileName = "manifest.json";
|
|
56
55
|
Manifest.stacksFolder = "stacks";
|
|
57
56
|
Manifest.stackMetadataPath = "metadata.json";
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWFuaWZlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFHekIsaUVBQThDO0FBd0I5QywrQ0FBK0M7QUFDL0MsTUFBYSxRQUFRO0lBUW5CLFlBQ2tCLE9BQWUsRUFDZixNQUFjLEVBQ2QsU0FBa0I7UUFGbEIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUFTO1FBTnBCLFdBQU0sR0FBaUQsRUFBRSxDQUFDO1FBUXhFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDNUQsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFxQjtRQUNuQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBa0I7WUFDOUIsSUFBSTtZQUNKLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUN4QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzRCxvQkFBb0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUM3QixRQUFRLENBQUMsWUFBWSxFQUNyQixJQUFJLENBQUMsRUFBRSxFQUNQLElBQUksQ0FBQyxhQUFhLENBQ25CO1lBQ0QsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FDMUIsUUFBUSxDQUFDLFlBQVksRUFDckIsSUFBSSxDQUFDLEVBQUUsRUFDUCxRQUFRLENBQUMsaUJBQWlCLENBQzNCO1lBQ0QsV0FBVyxFQUFFLEVBQUUsRUFBRSwrQ0FBK0M7WUFDaEUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUMvRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFN0IsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVNLGFBQWE7UUFDbEIsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFTSxXQUFXO1FBQ2hCLEVBQUUsQ0FBQyxhQUFhLENBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFDekMsSUFBQSwrQkFBUyxFQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFXLENBQ25ELENBQUM7SUFDSixDQUFDOztBQTdESCw0QkE4REM7OztBQTdEd0IsaUJBQVEsR0FBRyxlQUFlLEFBQWxCLENBQW1CO0FBQzNCLHFCQUFZLEdBQUcsUUFBUSxBQUFYLENBQVk7QUFDeEIsMEJBQWlCLEdBQUcsZUFBZSxBQUFsQixDQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcIi4vdGVycmFmb3JtLXN0YWNrXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uTWV0YWRhdGFFbnRyeVR5cGUgfSBmcm9tIFwiLi9hbm5vdGF0aW9uc1wiO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tIFwic2FmZS1zdGFibGUtc3RyaW5naWZ5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tBbm5vdGF0aW9uIHtcbiAgcmVhZG9ubHkgY29uc3RydWN0UGF0aDogc3RyaW5nO1xuICByZWFkb25seSBsZXZlbDogQW5ub3RhdGlvbk1ldGFkYXRhRW50cnlUeXBlO1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWNrdHJhY2U/OiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tNYW5pZmVzdCB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29uc3RydWN0UGF0aDogc3RyaW5nO1xuICByZWFkb25seSBzeW50aGVzaXplZFN0YWNrUGF0aDogc3RyaW5nO1xuICAvLyBPbmx5IHZhbGlkIGZvciBIQ0wgc3ludGhlc2lzLCBmb3IgSlNPTiB0aGUgbWV0YWRhdGEgaXMgd2l0aGluIHRoZSBzeW50aGVzaXplZCBvdXRwdXRcbiAgcmVhZG9ubHkgc3RhY2tNZXRhZGF0YVBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nO1xuICByZWFkb25seSBhbm5vdGF0aW9uczogU3RhY2tBbm5vdGF0aW9uW107XG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1hbmlmZXN0IHtcbiAgcmVhZG9ubHkgc3RhY2tzOiBSZWNvcmQ8U3RhY2tNYW5pZmVzdFtcIm5hbWVcIl0sIFN0YWNrTWFuaWZlc3Q+O1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgTWFuaWZlc3QgaW1wbGVtZW50cyBJTWFuaWZlc3Qge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGZpbGVOYW1lID0gXCJtYW5pZmVzdC5qc29uXCI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgc3RhY2tzRm9sZGVyID0gXCJzdGFja3NcIjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBzdGFja01ldGFkYXRhUGF0aCA9IFwibWV0YWRhdGEuanNvblwiO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGFja3M6IFJlY29yZDxTdGFja01hbmlmZXN0W1wibmFtZVwiXSwgU3RhY2tNYW5pZmVzdD4gPSB7fTtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrRmlsZU5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBvdXRkaXI6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGNsT3V0cHV0OiBib29sZWFuLFxuICApIHtcbiAgICBjb25zdCBzdGFja3NQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0ZGlyLCBNYW5pZmVzdC5zdGFja3NGb2xkZXIpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhzdGFja3NQYXRoKSkgZnMubWtkaXJTeW5jKHN0YWNrc1BhdGgpO1xuXG4gICAgdGhpcy5zdGFja0ZpbGVOYW1lID0gaGNsT3V0cHV0ID8gXCJjZGsudGZcIiA6IFwiY2RrLnRmLmpzb25cIjtcbiAgfVxuXG4gIHB1YmxpYyBmb3JTdGFjayhzdGFjazogVGVycmFmb3JtU3RhY2spOiBTdGFja01hbmlmZXN0IHtcbiAgICBjb25zdCBub2RlID0gc3RhY2subm9kZTtcbiAgICBjb25zdCBuYW1lID0gbm9kZS5pZDtcblxuICAgIGlmICh0aGlzLnN0YWNrc1tuYW1lXSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhY2tzW25hbWVdO1xuICAgIH1cblxuICAgIGNvbnN0IG1hbmlmZXN0OiBTdGFja01hbmlmZXN0ID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGNvbnN0cnVjdFBhdGg6IG5vZGUucGF0aCxcbiAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHBhdGguam9pbihNYW5pZmVzdC5zdGFja3NGb2xkZXIsIG5vZGUuaWQpLFxuICAgICAgc3ludGhlc2l6ZWRTdGFja1BhdGg6IHBhdGguam9pbihcbiAgICAgICAgTWFuaWZlc3Quc3RhY2tzRm9sZGVyLFxuICAgICAgICBub2RlLmlkLFxuICAgICAgICB0aGlzLnN0YWNrRmlsZU5hbWUsXG4gICAgICApLFxuICAgICAgc3RhY2tNZXRhZGF0YVBhdGg6IHBhdGguam9pbihcbiAgICAgICAgTWFuaWZlc3Quc3RhY2tzRm9sZGVyLFxuICAgICAgICBub2RlLmlkLFxuICAgICAgICBNYW5pZmVzdC5zdGFja01ldGFkYXRhUGF0aCxcbiAgICAgICksXG4gICAgICBhbm5vdGF0aW9uczogW10sIC8vIHdpbGwgYmUgcmVwbGFjZWQgbGF0ZXIgd2hlbiBwcm9jZXNzZWQgaW4gQXBwXG4gICAgICBkZXBlbmRlbmNpZXM6IHN0YWNrLmRlcGVuZGVuY2llcy5tYXAoKGl0ZW0pID0+IGl0ZW0ubm9kZS5wYXRoKSxcbiAgICB9O1xuICAgIHRoaXMuc3RhY2tzW25hbWVdID0gbWFuaWZlc3Q7XG5cbiAgICByZXR1cm4gbWFuaWZlc3Q7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRNYW5pZmVzdCgpOiBJTWFuaWZlc3Qge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICBzdGFja3M6IHRoaXMuc3RhY2tzLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgd3JpdGVUb0ZpbGUoKSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbih0aGlzLm91dGRpciwgTWFuaWZlc3QuZmlsZU5hbWUpLFxuICAgICAgc3RyaW5naWZ5KHRoaXMuYnVpbGRNYW5pZmVzdCgpLCBudWxsLCAyKSBhcyBzdHJpbmcsXG4gICAgKTtcbiAgfVxufVxuIl19
|
package/lib/resource.js
CHANGED
|
@@ -19,5 +19,5 @@ class Resource extends constructs_1.Construct {
|
|
|
19
19
|
}
|
|
20
20
|
exports.Resource = Resource;
|
|
21
21
|
_a = JSII_RTTI_SYMBOL_1;
|
|
22
|
-
Resource[_a] = { fqn: "cdktn.Resource", version: "0.23.
|
|
22
|
+
Resource[_a] = { fqn: "cdktn.Resource", version: "0.23.3" };
|
|
23
23
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDJDQUFtRDtBQUNuRCx1REFBbUQ7QUFhbkQ7OztHQUdHO0FBQ0gsTUFBc0IsUUFBUyxTQUFRLHNCQUFTO0lBRzlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxnQ0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDOztBQU5ILDRCQU9DIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1TdGFjayB9IGZyb20gXCIuL3RlcnJhZm9ybS1zdGFja1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSZXNvdXJjZSBleHRlbmRzIElDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIHN0YWNrIGluIHdoaWNoIHRoaXMgcmVzb3VyY2UgaXMgZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBUZXJyYWZvcm1TdGFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVzb3VyY2VDb25zdHJ1Y3RvciB7XG4gIG5ldyAoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJUmVzb3VyY2U7XG59XG5cbi8qKlxuICogQSBjb25zdHJ1Y3Qgd2hpY2ggcmVwcmVzZW50cyBhIHJlc291cmNlLlxuICogQGRlcHJlY2F0ZWQgLSBQbGVhc2UgdXNlIENvbnN0cnVjdCBmcm9tIHRoZSBjb25zdHJ1Y3RzIHBhY2thZ2UgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlc291cmNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVJlc291cmNlIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrOiBUZXJyYWZvcm1TdGFjaztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnN0YWNrID0gVGVycmFmb3JtU3RhY2sub2YodGhpcyk7XG4gIH1cbn1cbiJdfQ==
|