@fgv/ts-utils 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/brand.d.ts +1 -1
- package/brand.d.ts.map +1 -1
- package/converter.d.ts +4 -4
- package/converter.d.ts.map +1 -1
- package/converters.d.ts +62 -4
- package/converters.d.ts.map +1 -1
- package/converters.js +64 -2
- package/csvHelpers.js +3 -6
- package/formatter.d.ts +4 -4
- package/formatter.d.ts.map +1 -1
- package/logger.d.ts +1 -1
- package/logger.d.ts.map +1 -1
- package/normalize.d.ts +2 -2
- package/normalize.d.ts.map +1 -1
- package/package.json +11 -10
- package/result.d.ts +17 -17
- package/result.d.ts.map +1 -1
- package/result.js +7 -7
- package/utils.d.ts +1 -1
- package/utils.d.ts.map +1 -1
- package/validation/boolean.d.ts +1 -1
- package/validation/boolean.d.ts.map +1 -1
- package/validation/genericValidator.d.ts +1 -1
- package/validation/genericValidator.d.ts.map +1 -1
- package/validation/number.d.ts +1 -1
- package/validation/number.d.ts.map +1 -1
- package/validation/object.d.ts +1 -1
- package/validation/object.d.ts.map +1 -1
- package/validation/string.d.ts +1 -1
- package/validation/string.d.ts.map +1 -1
- package/validation/traits.d.ts +1 -1
- package/validation/traits.d.ts.map +1 -1
- package/validation/validator.d.ts +1 -1
- package/validation/validator.d.ts.map +1 -1
- package/validation/validatorBase.d.ts +1 -1
- package/validation/validatorBase.d.ts.map +1 -1
package/formatter.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Result } from './result';
|
|
|
3
3
|
* Destination format for some formatted string.
|
|
4
4
|
* @beta
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
6
|
+
export type FormatTargets = 'text' | 'markdown' | 'embed';
|
|
7
7
|
/**
|
|
8
8
|
* Interface for an object that can be formatted.
|
|
9
9
|
* @beta
|
|
@@ -40,19 +40,19 @@ export declare class FormattableBase {
|
|
|
40
40
|
* item and returns {@link Result | Result<string>}.
|
|
41
41
|
* @beta
|
|
42
42
|
*/
|
|
43
|
-
export
|
|
43
|
+
export type Formatter<T> = (format: string, item: T) => Result<string>;
|
|
44
44
|
/**
|
|
45
45
|
* A collection of {@link Formatter | formatters} indexed by target name, to enable
|
|
46
46
|
* different format methods per output target.
|
|
47
47
|
* @beta
|
|
48
48
|
*/
|
|
49
|
-
export
|
|
49
|
+
export type FormattersByExtendedTarget<TFT extends FormatTargets, T> = Record<TFT, Formatter<T>>;
|
|
50
50
|
/**
|
|
51
51
|
* A collection of {@link Formatter | formatters} indexed by the {@link FormatTargets | default supported
|
|
52
52
|
* target formats}.
|
|
53
53
|
* @beta
|
|
54
54
|
*/
|
|
55
|
-
export
|
|
55
|
+
export type FormattersByTarget<T> = FormattersByExtendedTarget<FormatTargets, T>;
|
|
56
56
|
/**
|
|
57
57
|
* Formats a list of items using the supplied template and formatter, one result
|
|
58
58
|
* per output line.
|
package/formatter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,MAAM,EAAsC,MAAM,UAAU,CAAC;AAKtE;;;GAGG;AACH,
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,MAAM,EAAsC,MAAM,UAAU,CAAC;AAKtE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAC,UAAU,GAAC,OAAO,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,qBAAa,eAAe;IACxB;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAC,SAAS,GAAG,IAAI;IAO/F;;OAEG;IACI,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;CAGlD;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,CAAC,GAAG,SAAS,aAAa,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACjG;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,0BAA0B,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAEjF;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAOrG"}
|
package/logger.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Failure, Success } from './result';
|
|
2
|
-
export
|
|
2
|
+
export type LogLevel = 'detail' | 'info' | 'warning' | 'error' | 'silent';
|
|
3
3
|
export interface Logger {
|
|
4
4
|
log(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
5
5
|
detail(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
package/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AAE3D,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AAE3D,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAC,MAAM,GAAC,SAAS,GAAC,OAAO,GAAC,QAAQ,CAAC;AAElE,MAAM,WAAW,MAAM;IACnB,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CAAC;IAC/E,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CAAC;IAC7E,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CAAC;IAC7E,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACrE;AAED,8BAAsB,UAAU;IACrB,QAAQ,EAAE,QAAQ,CAAU;gBAEhB,QAAQ,CAAC,EAAE,QAAQ;IAI/B,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC;IAO9E,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC;IAO5E,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC;IAO5E,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IASvE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IASjE,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC;IAQlF,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM;IAQtE,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC;IAInE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC;CAC3E;AAED,qBAAa,cAAe,SAAQ,UAAU;IAC1C,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,CAAM;IACnC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;gBAEd,QAAQ,CAAC,EAAE,QAAQ;IAItC,IAAW,QAAQ,IAAI,MAAM,EAAE,CAA2B;IAC1D,IAAW,MAAM,IAAI,MAAM,EAAE,CAAyB;IAE/C,KAAK,IAAI,IAAI;IAKpB,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC;IAK/D,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC;CAIrE;AAED,qBAAa,UAAW,SAAQ,UAAU;IACtC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC;CAIlE"}
|
package/normalize.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from './result';
|
|
2
|
-
export
|
|
3
|
-
export
|
|
2
|
+
export type Entry<T> = [string | number | symbol, T];
|
|
3
|
+
export type ResultEntry<T> = [string | number | symbol, Result<T>];
|
|
4
4
|
/**
|
|
5
5
|
* Normalizes an arbitrary JSON object
|
|
6
6
|
* @public
|
package/normalize.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,MAAM,EAA6B,MAAM,UAAU,CAAC;AAE7D,
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,MAAM,EAA6B,MAAM,UAAU,CAAC;AAE7D,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;AACrD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnE;;;GAGG;AACH,qBAAa,UAAU;IACnB;;;;;OAKG;IACI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IA+BvC;;;;;;;OAOG;IACH,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM;IAexD;;;;;;;OAOG;IACH,SAAS,CAAC,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE;IAQjF,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAI7D;;;;;OAKG;IACH,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;CAyBrD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fgv/ts-utils",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "Assorted Typescript Utilities",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -31,12 +31,13 @@
|
|
|
31
31
|
},
|
|
32
32
|
"homepage": "https://github.com/DidjaRedo/ts-utils#readme",
|
|
33
33
|
"devDependencies": {
|
|
34
|
+
"@jest/expect-utils": "^29.3.1",
|
|
34
35
|
"@microsoft/api-documenter": "^7.16.0",
|
|
35
36
|
"@microsoft/api-extractor": "^7.19.5",
|
|
36
|
-
"@types/jest": "^
|
|
37
|
-
"@types/luxon": "^
|
|
37
|
+
"@types/jest": "^29.2.4",
|
|
38
|
+
"@types/luxon": "^3.1.0",
|
|
38
39
|
"@types/mustache": "^4.1.2",
|
|
39
|
-
"@types/node": "^
|
|
40
|
+
"@types/node": "^18.11.12",
|
|
40
41
|
"@typescript-eslint/eslint-plugin": "^5.15.0",
|
|
41
42
|
"@typescript-eslint/parser": "^5.15.0",
|
|
42
43
|
"eslint": "^8.11.0",
|
|
@@ -44,17 +45,17 @@
|
|
|
44
45
|
"eslint-plugin-import": "^2.24.2",
|
|
45
46
|
"eslint-plugin-node": "^11.1.0",
|
|
46
47
|
"eslint-plugin-promise": "^6.0.0",
|
|
47
|
-
"jest": "^
|
|
48
|
-
"jest-extended": "^2.0
|
|
49
|
-
"jest-matcher-utils": "^
|
|
48
|
+
"jest": "^29.3.1",
|
|
49
|
+
"jest-extended": "^3.2.0",
|
|
50
|
+
"jest-matcher-utils": "^29.3.1",
|
|
50
51
|
"rimraf": "^3.0.2",
|
|
51
|
-
"ts-jest": "^
|
|
52
|
+
"ts-jest": "^29.0.3",
|
|
52
53
|
"ts-node": "^10.2.1",
|
|
53
54
|
"typescript": "^4.4.3"
|
|
54
55
|
},
|
|
55
56
|
"dependencies": {
|
|
56
|
-
"csv-parse": "^
|
|
57
|
-
"luxon": "^
|
|
57
|
+
"csv-parse": "^5.3.3",
|
|
58
|
+
"luxon": "^3.1.1",
|
|
58
59
|
"mustache": "^4.0.1"
|
|
59
60
|
}
|
|
60
61
|
}
|
package/result.d.ts
CHANGED
|
@@ -2,27 +2,27 @@
|
|
|
2
2
|
* Represents the {@link IResult | result} of some operation or sequence of operations.
|
|
3
3
|
* @remarks
|
|
4
4
|
* {@link Success | Success<T>} and {@link Failure | Failure<T>} share the common
|
|
5
|
-
* contract {@link IResult}, enabling
|
|
5
|
+
* contract {@link IResult}, enabling commingled discriminated usage.
|
|
6
6
|
* @public
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
8
|
+
export type Result<T> = Success<T> | Failure<T>;
|
|
9
9
|
/**
|
|
10
10
|
* Continuation callback to be called in the event that an
|
|
11
11
|
* {@link Result} is successful.
|
|
12
12
|
* @public
|
|
13
13
|
*/
|
|
14
|
-
export
|
|
14
|
+
export type SuccessContinuation<T, TN> = (value: T) => Result<TN>;
|
|
15
15
|
/**
|
|
16
16
|
* Continuation callback to be called in the event that an
|
|
17
17
|
* {@link Result} fails.
|
|
18
18
|
* @public
|
|
19
19
|
*/
|
|
20
|
-
export
|
|
20
|
+
export type FailureContinuation<T> = (message: string) => Result<T>;
|
|
21
21
|
/**
|
|
22
22
|
* Type inference to determine the result type of an {@link Result}.
|
|
23
23
|
* @beta
|
|
24
24
|
*/
|
|
25
|
-
export
|
|
25
|
+
export type ResultValueType<T> = T extends Result<infer TV> ? TV : never;
|
|
26
26
|
/**
|
|
27
27
|
* Simple logger interface used by {@link IResult.getValueOrThrow}.
|
|
28
28
|
* @public
|
|
@@ -37,7 +37,7 @@ export interface IResultLogger {
|
|
|
37
37
|
/**
|
|
38
38
|
* Represents the result of some operation of sequence of operations.
|
|
39
39
|
* @remarks
|
|
40
|
-
* This common contract enables
|
|
40
|
+
* This common contract enables commingled discriminated usage of {@link Success | Success<T>}
|
|
41
41
|
* and {@link Failure | Failure<T>}.
|
|
42
42
|
* @public
|
|
43
43
|
*/
|
|
@@ -116,7 +116,7 @@ export interface IResult<T> {
|
|
|
116
116
|
* @param successDetail - An optional detail to be added if this result was successful.
|
|
117
117
|
* @returns A new {@link DetailedResult | DetailedResult<T, TD>} with either
|
|
118
118
|
* the success result or the error message from this {@link IResult} and the
|
|
119
|
-
*
|
|
119
|
+
* appropriate added detail.
|
|
120
120
|
*/
|
|
121
121
|
withDetail<TD>(detail: TD, successDetail?: TD): DetailedResult<T, TD>;
|
|
122
122
|
}
|
|
@@ -257,7 +257,7 @@ export declare function fail<T>(message: string): Failure<T>;
|
|
|
257
257
|
* success results to chain through intermediate result types.
|
|
258
258
|
* @public
|
|
259
259
|
*/
|
|
260
|
-
export
|
|
260
|
+
export type DetailedSuccessContinuation<T, TD, TN> = (value: T, detail?: TD) => DetailedResult<TN, TD>;
|
|
261
261
|
/**
|
|
262
262
|
* Callback to be called when a {@link DetailedResult} encounters a failure.
|
|
263
263
|
* @remarks
|
|
@@ -265,7 +265,7 @@ export declare type DetailedSuccessContinuation<T, TD, TN> = (value: T, detail?:
|
|
|
265
265
|
* or it can change or embellish the error message, but it cannot change the success return type.
|
|
266
266
|
* @public
|
|
267
267
|
*/
|
|
268
|
-
export
|
|
268
|
+
export type DetailedFailureContinuation<T, TD> = (message: string, detail: TD) => DetailedResult<T, TD>;
|
|
269
269
|
/**
|
|
270
270
|
* A {@link DetailedSuccess} extends {@link Success} to report optional success details in
|
|
271
271
|
* addition to the error message.
|
|
@@ -370,12 +370,12 @@ export declare class DetailedFailure<T, TD> extends Failure<T> {
|
|
|
370
370
|
* Type inference to determine the result type `T` of a {@link DetailedResult | DetailedResult<T, TD>}.
|
|
371
371
|
* @beta
|
|
372
372
|
*/
|
|
373
|
-
export
|
|
373
|
+
export type DetailedResult<T, TD> = DetailedSuccess<T, TD> | DetailedFailure<T, TD>;
|
|
374
374
|
/**
|
|
375
375
|
* Type inference to determine the detail type `TD` of a {@link DetailedResult | DetailedResult<T, TD>}.
|
|
376
376
|
* @beta
|
|
377
377
|
*/
|
|
378
|
-
export
|
|
378
|
+
export type ResultDetailType<T> = T extends DetailedResult<unknown, infer TD> ? TD : never;
|
|
379
379
|
/**
|
|
380
380
|
* Returns {@link DetailedSuccess | DetailedSuccess<T, TD>} with a supplied value and optional
|
|
381
381
|
* detail.
|
|
@@ -418,7 +418,7 @@ export declare function propagateWithDetail<T, TD>(result: Result<T>, detail: TD
|
|
|
418
418
|
*/
|
|
419
419
|
export declare function captureResult<T>(func: () => T): Result<T>;
|
|
420
420
|
/**
|
|
421
|
-
* Aggregates
|
|
421
|
+
* Aggregates successful result values from a collection of {@link Result | Result<T>}.
|
|
422
422
|
* @param results - The collection of {@link Result | Result<T>} to be mapped.
|
|
423
423
|
* @returns If all {@link Result | results} are successful, returns {@link Success} with an
|
|
424
424
|
* array containing all returned values. If any {@link Result | results} failed, returns
|
|
@@ -427,14 +427,14 @@ export declare function captureResult<T>(func: () => T): Result<T>;
|
|
|
427
427
|
*/
|
|
428
428
|
export declare function mapResults<T>(results: Iterable<Result<T>>): Result<T[]>;
|
|
429
429
|
/**
|
|
430
|
-
* Aggregates
|
|
430
|
+
* Aggregates successful results from a collection of {@link DetailedResult | DetailedResult<T, TD>},
|
|
431
431
|
* optionally ignoring certain error details.
|
|
432
432
|
* @param results - The collection of {@link DetailedResult | DetailedResult<T, TD>} to be mapped.
|
|
433
433
|
* @param ignore - An array of error detail values (of type `<TD>`) that should be ignored.
|
|
434
434
|
* @returns {@link Success} with an array containing all successful results if all results either
|
|
435
|
-
*
|
|
435
|
+
* succeeded or returned error details listed in `ignore`. If any results failed with details
|
|
436
436
|
* that cannot be ignored, returns {@link Failure} with an concatenated summary of all non-ignorable
|
|
437
|
-
* error
|
|
437
|
+
* error messages.
|
|
438
438
|
* @public
|
|
439
439
|
*/
|
|
440
440
|
export declare function mapDetailedResults<T, TD>(results: Iterable<DetailedResult<T, TD>>, ignore: TD[]): Result<T[]>;
|
|
@@ -450,7 +450,7 @@ export declare function mapDetailedResults<T, TD>(results: Iterable<DetailedResu
|
|
|
450
450
|
export declare function mapSuccess<T>(results: Iterable<Result<T>>): Result<T[]>;
|
|
451
451
|
/**
|
|
452
452
|
* Aggregates error messages from a collection of {@link Result | Result<T>}.
|
|
453
|
-
* @param results - An
|
|
453
|
+
* @param results - An iterable collection of {@link Result | Result<T>} for which
|
|
454
454
|
* error messages are aggregated.
|
|
455
455
|
* @returns An array of strings consisting of all error messages returned by
|
|
456
456
|
* {@link Result | results} in the source collection. Ignores {@link Success}
|
|
@@ -471,7 +471,7 @@ export declare function allSucceed<T>(results: Iterable<Result<unknown>>, succes
|
|
|
471
471
|
* String-keyed record of initialization functions to be passed to {@link populateObject}.
|
|
472
472
|
* @public
|
|
473
473
|
*/
|
|
474
|
-
export
|
|
474
|
+
export type FieldInitializers<T> = {
|
|
475
475
|
[key in keyof T]: (state: Partial<T>) => Result<T[key]>;
|
|
476
476
|
};
|
|
477
477
|
/**
|
package/result.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAuBA;;;;;;GAMG;AACH,
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAuBA;;;;;;GAMG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAChD;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;AAClE;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;AACpE;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AAEzE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,SAAS,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhC;;;OAGG;IACH,SAAS,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhC;;;;;;;OAOG;IACH,eAAe,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;IAE3C;;;;;;;OAOG;IACH,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAC,SAAS,CAAC;IAEzC;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAE1D;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAEjD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzD;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;CACzE;AAED;;;;GAIG;AACH,qBAAa,OAAO,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IACzC;;OAEG;IACH,SAAgB,OAAO,QAAQ;IAC/B;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAI;IAE3B;;;OAGG;gBACS,KAAK,EAAE,CAAC;IAIpB;;OAEG;IACH,IAAW,KAAK,IAAI,CAAC,CAEpB;IAED;;OAEG;IACI,SAAS,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAItC;;OAEG;IACI,SAAS,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAItC;;OAEG;IACI,eAAe,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,CAAC;IAIlD;;OAEG;IACI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAC,SAAS;IAI/C;;OAEG;IACI,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;IAIhE;;OAEG;IACI,SAAS,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAItD;;OAEG;IACI,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC;IAIhE;;OAEG;IACI,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC;CAG/E;AAED;;;GAGG;AACH,qBAAa,OAAO,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IACzC;;OAEG;IACH,SAAgB,OAAO,SAAS;IAEhC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC;;;OAGG;gBACS,OAAO,EAAE,MAAM;IAI3B;;OAEG;IACH,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED;;OAEG;IACI,SAAS,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAItC;;OAEG;IACI,SAAS,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAItC;;OAEG;IACI,eAAe,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,KAAK;IAOrD;;OAEG;IACI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAC,SAAS;IAI/C;;OAEG;IACI,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;IAI/D;;OAEG;IACI,SAAS,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAIvD;;OAEG;IACI,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC;IAI/D;;OAEG;IACI,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC;IAI7E;;;;;OAKG;IACI,QAAQ,IAAI,MAAM;CAG5B;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAEnD;AAED;;;;;;GAMG;AACH,MAAM,MAAM,2BAA2B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAEvG;;;;;;GAMG;AACH,MAAM,MAAM,2BAA2B,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAExG;;;;GAIG;AACH,qBAAa,eAAe,CAAC,CAAC,EAAE,EAAE,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAClD;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;IAEvB;;;;;;OAMG;gBACgB,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE;IAKxC;;;OAGG;IACH,IAAW,MAAM,IAAI,EAAE,GAAC,SAAS,CAEhC;IAED;;;;;;;OAOG;IACI,SAAS,IAAI,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC;IAIlD;;;;;;;OAOG;IACI,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,2BAA2B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC;IAIxF;;;;;;;OAOG;IACI,SAAS,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC;CAGnF;AAED;;;;GAIG;AACH,qBAAa,eAAe,CAAC,CAAC,EAAE,EAAE,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAClD;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;IAEtB;;;;;OAKG;gBACgB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAK9C;;OAEG;IACH,IAAW,MAAM,IAAI,EAAE,CAEtB;IAED;;;;;;;OAOG;IACI,SAAS,IAAI,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC;IAIlD;;;;;;;;;OASG;IACI,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,2BAA2B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC;IAIzF;;;;;OAKG;IACI,SAAS,CAAC,EAAE,EAAE,2BAA2B,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC;CAGlF;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,EAAE,IAAI,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,GAAC,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAElF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AAE3F;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,CAEtF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,CAEzF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAInH;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAOzD;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAiBvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAiB7G;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAiBvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAQrE;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAgB5F;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;KAAI,GAAG,IAAI,MAAM,CAAC,GAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAAE,CAAC;AAEjG;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAiCpG"}
|
package/result.js
CHANGED
|
@@ -375,7 +375,7 @@ function captureResult(func) {
|
|
|
375
375
|
}
|
|
376
376
|
exports.captureResult = captureResult;
|
|
377
377
|
/**
|
|
378
|
-
* Aggregates
|
|
378
|
+
* Aggregates successful result values from a collection of {@link Result | Result<T>}.
|
|
379
379
|
* @param results - The collection of {@link Result | Result<T>} to be mapped.
|
|
380
380
|
* @returns If all {@link Result | results} are successful, returns {@link Success} with an
|
|
381
381
|
* array containing all returned values. If any {@link Result | results} failed, returns
|
|
@@ -400,14 +400,14 @@ function mapResults(results) {
|
|
|
400
400
|
}
|
|
401
401
|
exports.mapResults = mapResults;
|
|
402
402
|
/**
|
|
403
|
-
* Aggregates
|
|
403
|
+
* Aggregates successful results from a collection of {@link DetailedResult | DetailedResult<T, TD>},
|
|
404
404
|
* optionally ignoring certain error details.
|
|
405
405
|
* @param results - The collection of {@link DetailedResult | DetailedResult<T, TD>} to be mapped.
|
|
406
406
|
* @param ignore - An array of error detail values (of type `<TD>`) that should be ignored.
|
|
407
407
|
* @returns {@link Success} with an array containing all successful results if all results either
|
|
408
|
-
*
|
|
408
|
+
* succeeded or returned error details listed in `ignore`. If any results failed with details
|
|
409
409
|
* that cannot be ignored, returns {@link Failure} with an concatenated summary of all non-ignorable
|
|
410
|
-
* error
|
|
410
|
+
* error messages.
|
|
411
411
|
* @public
|
|
412
412
|
*/
|
|
413
413
|
function mapDetailedResults(results, ignore) {
|
|
@@ -455,7 +455,7 @@ function mapSuccess(results) {
|
|
|
455
455
|
exports.mapSuccess = mapSuccess;
|
|
456
456
|
/**
|
|
457
457
|
* Aggregates error messages from a collection of {@link Result | Result<T>}.
|
|
458
|
-
* @param results - An
|
|
458
|
+
* @param results - An iterable collection of {@link Result | Result<T>} for which
|
|
459
459
|
* error messages are aggregated.
|
|
460
460
|
* @returns An array of strings consisting of all error messages returned by
|
|
461
461
|
* {@link Result | results} in the source collection. Ignores {@link Success}
|
|
@@ -527,7 +527,7 @@ function populateObject(initializers, order) {
|
|
|
527
527
|
}
|
|
528
528
|
}
|
|
529
529
|
else {
|
|
530
|
-
errors.push(`populateObject: Key ${key} is present but has no initializer`);
|
|
530
|
+
errors.push(`populateObject: Key ${String(key)} is present but has no initializer`);
|
|
531
531
|
}
|
|
532
532
|
}
|
|
533
533
|
if (errors.length > 0) {
|
|
@@ -536,4 +536,4 @@ function populateObject(initializers, order) {
|
|
|
536
536
|
return succeed(state);
|
|
537
537
|
}
|
|
538
538
|
exports.populateObject = populateObject;
|
|
539
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHOzs7QUF3SUg7Ozs7R0FJRztBQUNILE1BQWEsT0FBTztJQVVoQjs7O09BR0c7SUFDSCxZQUFZLEtBQVE7UUFicEI7O1dBRUc7UUFDYSxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBVzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNaLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxPQUF1QjtRQUMxQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCLENBQUMsSUFBUTs7UUFDN0IsT0FBTyxNQUFBLElBQUksQ0FBQyxNQUFNLG1DQUFJLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUssRUFBOEI7UUFDL0MsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxDQUF5QjtRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBSyxPQUFXO1FBQ3BDLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBSyxNQUFVLEVBQUUsYUFBa0I7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Z2h0IChjKSAyMDIwIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qKlxuICogUmVwcmVzZW50cyB0aGUge0BsaW5rIElSZXN1bHQgfCByZXN1bHR9IG9mIHNvbWUgb3BlcmF0aW9uIG9yIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMuXG4gKiBAcmVtYXJrc1xuICoge0BsaW5rIFN1Y2Nlc3MgfCBTdWNjZXNzPFQ+fSBhbmQge0BsaW5rIEZhaWx1cmUgfCBGYWlsdXJlPFQ+fSBzaGFyZSB0aGUgY29tbW9uXG4gKiBjb250cmFjdCB7QGxpbmsgSVJlc3VsdH0sIGVuYWJsaW5nIGNvbWluZ2xlZCBkaXNjcmltaW5hdGVkIHVzYWdlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VD4gPSBTdWNjZXNzPFQ+IHwgRmFpbHVyZTxUPjtcbi8qKlxuICogQ29udGludWF0aW9uIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBpbiB0aGUgZXZlbnQgdGhhdCBhblxuICoge0BsaW5rIFJlc3VsdH0gaXMgc3VjY2Vzc2Z1bC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgU3VjY2Vzc0NvbnRpbnVhdGlvbjxULCBUTj4gPSAodmFsdWU6IFQpID0+IFJlc3VsdDxUTj47XG4vKipcbiAqIENvbnRpbnVhdGlvbiBjYWxsYmFjayB0byBiZSBjYWxsZWQgaW4gdGhlIGV2ZW50IHRoYXQgYW5cbiAqIHtAbGluayBSZXN1bHR9IGZhaWxzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBGYWlsdXJlQ29udGludWF0aW9uPFQ+ID0gKG1lc3NhZ2U6IHN0cmluZykgPT4gUmVzdWx0PFQ+O1xuLyoqXG4gKiBUeXBlIGluZmVyZW5jZSB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlIG9mIGFuIHtAbGluayBSZXN1bHR9LlxuICogQGJldGFcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0VmFsdWVUeXBlPFQ+ID0gVCBleHRlbmRzIFJlc3VsdDxpbmZlciBUVj4gPyBUViA6IG5ldmVyO1xuXG4vKipcbiAqIFNpbXBsZSBsb2dnZXIgaW50ZXJmYWNlIHVzZWQgYnkge0BsaW5rIElSZXN1bHQuZ2V0VmFsdWVPclRocm93fS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVzdWx0TG9nZ2VyIHtcbiAgICAvKipcbiAgICAgKiBMb2cgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBlcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBzb21lIG9wZXJhdGlvbiBvZiBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLlxuICogQHJlbWFya3NcbiAqIFRoaXMgY29tbW9uIGNvbnRyYWN0IGVuYWJsZXMgY29taW5nbGVkIGRpc2NyaW1pbmF0ZWQgdXNhZ2Ugb2Yge0BsaW5rIFN1Y2Nlc3MgfCBTdWNjZXNzPFQ+fVxuICogYW5kIHtAbGluayBGYWlsdXJlIHwgRmFpbHVyZTxUPn0uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJlc3VsdDxUPiB7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC5cbiAgICAgKi9cbiAgICByZWFkb25seSBzdWNjZXNzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuICBGdW5jdGlvbnNcbiAgICAgKiBhcyBhIHR5cGUgZ3VhcmQgZm9yIHtAbGluayBTdWNjZXNzIHwgU3VjY2VzczxUPn0uXG4gICAgICovXG4gICAgaXNTdWNjZXNzKCk6IHRoaXMgaXMgU3VjY2VzczxUPjtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIGZhaWxlZC4gIEZ1bmN0aW9uc1xuICAgICAqIGFzIGEgdHlwZSBndWFyZCBmb3Ige0BsaW5rIEZhaWx1cmUgfCBGYWlsdXJlPFQ+fS5cbiAgICAgKi9cbiAgICBpc0ZhaWx1cmUoKTogdGhpcyBpcyBGYWlsdXJlPFQ+O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgc3VjY2Vzc2Z1bCB7QGxpbmsgSVJlc3VsdCB8IHJlc3VsdH0sXG4gICAgICogb3IgdGhyb3dzIHRoZSBlcnJvciBtZXNzYWdlIGlmIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBmYWlsZWQuXG4gICAgICogQHBhcmFtIGxvZ2dlciAtIEFuIG9wdGlvbmFsIHtAbGluayBJUmVzdWx0TG9nZ2VyIHwgbG9nZ2VyfSB0byB3aGljaCB0aGVcbiAgICAgKiBlcnJvciB3aWxsIGFsc28gYmUgcmVwb3J0ZWQuXG4gICAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSwgaWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC5cbiAgICAgKiBAdGhyb3dzIFRoZSBlcnJvciBtZXNzYWdlIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLlxuICAgICAqL1xuICAgIGdldFZhbHVlT3JUaHJvdyhsb2dnZXI/OiBJUmVzdWx0TG9nZ2VyKTogVDtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIHN1Y2Nlc3NmdWwge0BsaW5rIElSZXN1bHQgfCByZXN1bHR9LFxuICAgICAqIG9yIGEgZGVmYXVsdCB2YWx1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gZmFpbGVkLlxuICAgICAqIEBwYXJhbSBkZmx0IC0gVGhlIHZhbHVlIHRvIGJlIHJldHVybmVkIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkIChkZWZhdWx0IGlzXG4gICAgICogYHVuZGVmaW5lZGApLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUsIGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuICBSZXR1cm5zXG4gICAgICogdGhlIHN1cHBsaWVkIGRlZmF1bHQgdmFsdWUgb3IgYHVuZGVmaW5lZGAgaWYgbm8gZGVmYXVsdCBpcyBzdXBwbGllZC5cbiAgICAgKi9cbiAgICBnZXRWYWx1ZU9yRGVmYXVsdChkZmx0PzogVCk6IFR8dW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgYSBzdXBwbGllZCB7QGxpbmsgU3VjY2Vzc0NvbnRpbnVhdGlvbiB8IHN1Y2Nlc3MgY29udGludWF0aW9ufSBpZlxuICAgICAqIHRoZSBvcGVyYXRpb24gd2FzIGEgc3VjY2Vzcy5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSB7QGxpbmsgU3VjY2Vzc0NvbnRpbnVhdGlvbiB8IHN1Y2Nlc3MgY29udGludWF0aW9ufSBtaWdodCByZXR1cm4gYVxuICAgICAqIGRpZmZlcmVudCByZXN1bHQgdHlwZSB0aGFuIHtAbGluayBJUmVzdWx0fSBvbiB3aGljaCBpdCBpcyBpbnZva2VkLiBUaGlzXG4gICAgICogZW5hYmxlcyBjaGFpbmluZyBvZiBvcGVyYXRpb25zIHdpdGggaGV0ZXJvZ2Vub3VzIHJldHVybiB0eXBlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYiAtIFRoZSB7QGxpbmsgU3VjY2Vzc0NvbnRpbnVhdGlvbiB8IHN1Y2Nlc3MgY29udGludWF0aW9ufSB0b1xuICAgICAqIGJlIGNhbGxlZCBpbiB0aGUgZXZlbnQgb2Ygc3VjY2Vzcy5cbiAgICAgKiBAcmV0dXJucyBJZiB0aGlzIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgcmV0dXJucyB0aGUgdmFsdWUgcmV0dXJuZWRcbiAgICAgKiBieSB0aGUge0BsaW5rIFN1Y2Nlc3NDb250aW51YXRpb24gfCBzdWNjZXNzIGNvbnRpbnVhdGlvbn0uICBJZiB0aGlzIHJlc3VsdFxuICAgICAqIGZhaWxlZCwgcHJvcGFnYXRlcyB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoaXMgZmFpbHVyZS5cbiAgICAgKi9cbiAgICBvblN1Y2Nlc3M8VE4+KGNiOiBTdWNjZXNzQ29udGludWF0aW9uPFQsIFROPik6IFJlc3VsdDxUTj47XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyBhIHN1cHBsaWVkIHtAbGluayBGYWlsdXJlQ29udGludWF0aW9uIHwgZmFpbGVkIGNvbnRpbnVhdGlvbn0gaWZcbiAgICAgKiB0aGUgb3BlcmF0aW9uIGZhaWxlZC5cbiAgICAgKiBAcGFyYW0gY2IgLSBUaGUge0BsaW5rIEZhaWx1cmVDb250aW51YXRpb24gfCBmYWlsdXJlIGNvbnRpbnVhdGlvbn0gdG9cbiAgICAgKiBiZSBjYWxsZWQgaW4gdGhlIGV2ZW50IG9mIGZhaWx1cmUuXG4gICAgICogQHJldHVybnMgSWYgdGhpcyBvcGVyYXRpb24gZmFpbGVkLCByZXR1cm5zIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGVcbiAgICAgKiB7QGxpbmsgRmFpbHVyZUNvbnRpbnVhdGlvbiB8IGZhaWx1cmUgY29udGludWF0aW9ufS4gIElmIHRoaXMgcmVzdWx0XG4gICAgICogd2FzIHN1Y2Nlc3NmdWwsIHByb3BhZ2F0ZXMgdGhlIHJlc3VsdCB2YWx1ZSBmcm9tIHRoZSBzdWNjZXNzZnVsIGV2ZW50LlxuICAgICAqL1xuICAgIG9uRmFpbHVyZShjYjogRmFpbHVyZUNvbnRpbnVhdGlvbjxUPik6IFJlc3VsdDxUPjtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEge0BsaW5rIElSZXN1bHQgfCBJUmVzdWx0PFQ+fSB0byBhIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0sXG4gICAgICogYWRkaW5nIGEgc3VwcGxpZWQgZGV0YWlsIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLlxuICAgICAqIEBwYXJhbSBkZXRhaWwgLSBUaGUgZGV0YWlsIHRvIGJlIGFkZGVkIGlmIHRoaXMgb3BlcmF0aW9uIGZhaWxlZC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59IHdpdGggZWl0aGVyXG4gICAgICogdGhlIHN1Y2Nlc3MgcmVzdWx0IG9yIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gdGhpcyB7QGxpbmsgSVJlc3VsdH0sIHdpdGhcbiAgICAgKiB0aGUgc3VwcGxpZWQgZGV0YWlsIChpZiB0aGlzIGV2ZW50IGZhaWxlZCkgb3IgZGV0YWlsIGB1bmRlZmluZWRgIChpZlxuICAgICAqIHRoaXMgcmVzdWx0IHN1Y2NlZWRlZCkuXG4gICAgICovXG4gICAgd2l0aEZhaWx1cmVEZXRhaWw8VEQ+KGRldGFpbDogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD47XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIHtAbGluayBJUmVzdWx0IHwgSVJlc3VsdDxUPn0gdG8gYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59LFxuICAgICAqIGFkZGluZyBzdXBwbGllZCBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSBkZXRhaWwgLSBUaGUgZGVmYXVsdCBkZXRhaWwgdG8gYmUgYWRkZWQgdG8gdGhlIG5ldyB7QGxpbmsgRGV0YWlsZWRSZXN1bHR9LlxuICAgICAqIEBwYXJhbSBzdWNjZXNzRGV0YWlsIC0gQW4gb3B0aW9uYWwgZGV0YWlsIHRvIGJlIGFkZGVkIGlmIHRoaXMgcmVzdWx0IHdhcyBzdWNjZXNzZnVsLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0gd2l0aCBlaXRoZXJcbiAgICAgKiB0aGUgc3VjY2VzcyByZXN1bHQgb3IgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSB0aGlzIHtAbGluayBJUmVzdWx0fSBhbmQgdGhlXG4gICAgICogYXBwb3ByaWF0ZSBhZGRlZCBkZXRhaWwuXG4gICAgICovXG4gICAgd2l0aERldGFpbDxURD4oZGV0YWlsOiBURCwgc3VjY2Vzc0RldGFpbD86IFREKTogRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+O1xufVxuXG4vKipcbiAqIFJlcG9ydHMgYSBzdWNjZXNzZnVsIHtAbGluayBJUmVzdWx0IHwgcmVzdWx0fSBmcm9tIHNvbWUgb3BlcmF0aW9uIGFuZCB0aGVcbiAqIGNvcnJlc3BvbmRpbmcgdmFsdWUuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWNjZXNzPFQ+IGltcGxlbWVudHMgSVJlc3VsdDxUPiB7XG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuc3VjY2Vzc31cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VjY2VzcyA9IHRydWU7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdmFsdWU6IFQ7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSByZXN1bHQgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5pc1N1Y2Nlc3N9XG4gICAgICovXG4gICAgcHVibGljIGlzU3VjY2VzcygpOiB0aGlzIGlzIFN1Y2Nlc3M8VD4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5pc0ZhaWx1cmV9XG4gICAgICovXG4gICAgcHVibGljIGlzRmFpbHVyZSgpOiB0aGlzIGlzIEZhaWx1cmU8VD4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuZ2V0VmFsdWVPclRocm93fVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWYWx1ZU9yVGhyb3coX2xvZ2dlcj86IElSZXN1bHRMb2dnZXIpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmdldFZhbHVlT3JEZWZhdWx0fVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWYWx1ZU9yRGVmYXVsdChkZmx0PzogVCk6IFR8dW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlID8/IGRmbHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQub25TdWNjZXNzfVxuICAgICAqL1xuICAgIHB1YmxpYyBvblN1Y2Nlc3M8VE4+KGNiOiBTdWNjZXNzQ29udGludWF0aW9uPFQsIFROPik6IFJlc3VsdDxUTj4ge1xuICAgICAgICByZXR1cm4gY2IodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQub25GYWlsdXJlfVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZhaWx1cmUoXzogRmFpbHVyZUNvbnRpbnVhdGlvbjxUPik6IFJlc3VsdDxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LndpdGhGYWlsdXJlRGV0YWlsfVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmFpbHVyZURldGFpbDxURD4oX2RldGFpbDogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gc3VjY2VlZFdpdGhEZXRhaWwodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQud2l0aERldGFpbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERldGFpbDxURD4oZGV0YWlsOiBURCwgc3VjY2Vzc0RldGFpbD86IFREKTogRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+IHtcbiAgICAgICAgcmV0dXJuIHN1Y2NlZWRXaXRoRGV0YWlsKHRoaXMudmFsdWUsIHN1Y2Nlc3NEZXRhaWwgPz8gZGV0YWlsKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyBhIGZhaWxlZCB7QGxpbmsgSVJlc3VsdCB8IHJlc3VsdH0gZnJvbSBzb21lIG9wZXJhdGlvbiwgd2l0aCBhbiBlcnJvciBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgRmFpbHVyZTxUPiBpbXBsZW1lbnRzIElSZXN1bHQ8VD4ge1xuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LnN1Y2Nlc3N9XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2U6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSB7QGxpbmsgRmFpbHVyZX0gd2l0aCB0aGUgc3VwcGxpZWQgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2UgdG8gYmUgcmVwb3J0ZWQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGVycm9yIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXJyb3IuXG4gICAgICovXG4gICAgcHVibGljIGdldCBtZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmlzU3VjY2Vzc31cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTdWNjZXNzKCk6IHRoaXMgaXMgU3VjY2VzczxUPiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5pc0ZhaWx1cmV9XG4gICAgICovXG4gICAgcHVibGljIGlzRmFpbHVyZSgpOiB0aGlzIGlzIEZhaWx1cmU8VD4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5nZXRWYWx1ZU9yVGhyb3d9XG4gICAgICovXG4gICAgcHVibGljIGdldFZhbHVlT3JUaHJvdyhsb2dnZXI/OiBJUmVzdWx0TG9nZ2VyKTogbmV2ZXIge1xuICAgICAgICBpZiAobG9nZ2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcih0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5fbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuZ2V0VmFsdWVPckRlZmF1bHR9XG4gICAgICovXG4gICAgcHVibGljIGdldFZhbHVlT3JEZWZhdWx0KGRmbHQ/OiBUKTogVHx1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gZGZsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5vblN1Y2Nlc3N9XG4gICAgICovXG4gICAgcHVibGljIG9uU3VjY2VzczxUTj4oXzogU3VjY2Vzc0NvbnRpbnVhdGlvbjxULCBUTj4pOiBSZXN1bHQ8VE4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKHRoaXMubWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQub25GYWlsdXJlfVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZhaWx1cmUoY2I6IEZhaWx1cmVDb250aW51YXRpb248VD4pOiBSZXN1bHQ8VD4ge1xuICAgICAgICByZXR1cm4gY2IodGhpcy5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC53aXRoRmFpbHVyZURldGFpbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZhaWx1cmVEZXRhaWw8VEQ+KGRldGFpbDogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gZmFpbFdpdGhEZXRhaWwodGhpcy5tZXNzYWdlLCBkZXRhaWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LndpdGhEZXRhaWx9XG4gICAgICovXG4gICAgcHVibGljIHdpdGhEZXRhaWw8VEQ+KGRldGFpbDogVEQsIF9zdWNjZXNzRGV0YWlsPzogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gZmFpbFdpdGhEZXRhaWwodGhpcy5tZXNzYWdlLCBkZXRhaWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhICdmcmllbmRseScgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHtAbGluayBGYWlsdXJlfSB2YWx1ZSBpcyB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfVxufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIFN1Y2Nlc3MgfCBTdWNjZXNzPFQ+fSB3aXRoIHRoZSBzdXBwbGllZCByZXN1bHQgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3VjY2Vzc2Z1bCByZXN1bHQgdmFsdWUgdG8gYmUgcmV0dXJuZWRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Y2NlZWQ8VD4odmFsdWU6IFQpOiBTdWNjZXNzPFQ+IHtcbiAgICByZXR1cm4gbmV3IFN1Y2Nlc3M8VD4odmFsdWUpO1xufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIEZhaWx1cmUgfCBGYWlsdXJlPFQ+fSB3aXRoIHRoZSBzdXBwbGllZCBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIG1lc3NhZ2UgLSBFcnJvciBtZXNzYWdlIHRvIGJlIHJldHVybmVkLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmFpbDxUPihtZXNzYWdlOiBzdHJpbmcpOiBGYWlsdXJlPFQ+IHtcbiAgICByZXR1cm4gbmV3IEZhaWx1cmU8VD4obWVzc2FnZSk7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHR9IGVuY291bnRlcnMgc3VjY2Vzcy5cbiAqIEByZW1hcmtzXG4gKiBBIHN1Y2Nlc3MgY2FsbGJhY2sgY2FuIHJldHVybiBhIGRpZmZlcmVudCByZXN1bHQgdHlwZSB0aGFuIGl0IHJlY2VpdmVzLCBhbGxvd2luZ1xuICogc3VjY2VzcyByZXN1bHRzIHRvIGNoYWluIHRocm91Z2ggaW50ZXJtZWRpYXRlIHJlc3VsdCB0eXBlcy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGV0YWlsZWRTdWNjZXNzQ29udGludWF0aW9uPFQsIFRELCBUTj4gPSAodmFsdWU6IFQsIGRldGFpbD86IFREKSA9PiBEZXRhaWxlZFJlc3VsdDxUTiwgVEQ+O1xuXG4vKipcbiAqIENhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIGEge0BsaW5rIERldGFpbGVkUmVzdWx0fSBlbmNvdW50ZXJzIGEgZmFpbHVyZS5cbiAqIEByZW1hcmtzXG4gKiBBIGZhaWx1cmUgY2FsbGJhY2sgY2FuIGNoYW5nZSB7QGxpbmsgRmFpbHVyZX0gdG8ge0BsaW5rIFN1Y2Nlc3N9IChlLmcuIGJ5IHJldHVybmluZyBhIGRlZmF1bHQgdmFsdWUpXG4gKiBvciBpdCBjYW4gY2hhbmdlIG9yIGVtYmVsbGlzaCB0aGUgZXJyb3IgbWVzc2FnZSwgYnV0IGl0IGNhbm5vdCBjaGFuZ2UgdGhlIHN1Y2Nlc3MgcmV0dXJuIHR5cGUuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIERldGFpbGVkRmFpbHVyZUNvbnRpbnVhdGlvbjxULCBURD4gPSAobWVzc2FnZTogc3RyaW5nLCBkZXRhaWw6IFREKSA9PiBEZXRhaWxlZFJlc3VsdDxULCBURD47XG5cbi8qKlxuICogQSB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzfSBleHRlbmRzIHtAbGluayBTdWNjZXNzfSB0byByZXBvcnQgb3B0aW9uYWwgc3VjY2VzcyBkZXRhaWxzIGluXG4gKiBhZGRpdGlvbiB0byB0aGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIERldGFpbGVkU3VjY2VzczxULCBURD4gZXh0ZW5kcyBTdWNjZXNzPFQ+IHtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2RldGFpbD86IFREO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzIHwgRGV0YWlsZWRTdWNjZXNzPFQsIFREPn0gd2l0aCB0aGUgc3VwcGxpZWRcbiAgICAgKiB2YWx1ZSBhbmQgZGV0YWlsLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0gZGV0YWlsIC0gQW4gb3B0aW9uYWwgc3VjY2Vzc2Z1bCBkZXRhaWwgdG8gYmUgcmV0dXJuZWQuICBJZiBvbWl0dGVkLCBkZXRhaWxcbiAgICAgKiB3aWxsIGJlIGB1bmRlZmluZWRgLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogVCwgZGV0YWlsPzogVEQpIHtcbiAgICAgICAgc3VwZXIodmFsdWUpO1xuICAgICAgICB0aGlzLl9kZXRhaWwgPSBkZXRhaWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHN1Y2Nlc3MgZGV0YWlsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3N9LCBvciBgdW5kZWZpbmVkYCBpZlxuICAgICAqIG5vIGRldGFpbCB3YXMgc3VwcGxpZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBkZXRhaWwoKTogVER8dW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldGFpbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBvcnRzIHRoYXQgdGhpcyB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzfSBpcyBhIHN1Y2Nlc3MuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBBbHdheXMgdHJ1ZSBmb3Ige0BsaW5rIERldGFpbGVkU3VjY2Vzc30gYnV0IGNhbiBiZSB1c2VkIGFzIHR5cGUgZ3VhcmRcbiAgICAgKiB0byBkaXNjcmltaW5hdGUge0BsaW5rIERldGFpbGVkU3VjY2Vzc30gZnJvbSB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlfSBpblxuICAgICAqIGEge0BsaW5rIERldGFpbGVkUmVzdWx0fS5cbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWBcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTdWNjZXNzKCk6IHRoaXMgaXMgRGV0YWlsZWRTdWNjZXNzPFQsIFREPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIHN1cHBsaWVkIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb24gfCBzdWNjZXNzIGNhbGxiYWNrfSBhbmQgcHJvcGFnYXRlc1xuICAgICAqIGl0cyByZXR1cm5lZCB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxUTiwgVEQ+fS5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSBzdWNjZXNzIGNhbGxiYWNrIG11dGF0ZXMgdGhlIHJldHVybiB0eXBlIGZyb20gYDxUPmAgdG8gYDxUTj5gLlxuICAgICAqIEBwYXJhbSBjYiAtIFRoZSB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzQ29udGludWF0aW9uIHwgc3VjY2VzcyBjYWxsYmFja30gdG8gYmUgaW52b2tlZC5cbiAgICAgKiBAcmV0dXJucyBUaGUge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fSByZXR1cm5lZCBieSB0aGUgc3VjY2VzcyBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdWNjZXNzPFROPihjYjogRGV0YWlsZWRTdWNjZXNzQ29udGludWF0aW9uPFQsIFRELCBUTj4pOiBEZXRhaWxlZFJlc3VsdDxUTiwgVEQ+IHtcbiAgICAgICAgcmV0dXJuIGNiKHRoaXMudmFsdWUsIHRoaXMuX2RldGFpbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvcGFnYXRlcyB0aGlzIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3N9LlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRmFpbHVyZSBkb2VzIG5vdCBtdXRhdGUgcmV0dXJuIHR5cGUgc28gd2UgY2FuIHJldHVybiB0aGlzIGV2ZW50IGRpcmVjdGx5LlxuICAgICAqIEBwYXJhbSBfY2IgLSB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlQ29udGludWF0aW9uIHwgRmFpbHVyZSBjYWxsYmFja30gdG8gYmUgY2FsbGVkXG4gICAgICogb24gYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHR9IGluIGNhc2Ugb2YgZmFpbHVyZSAoaWdub3JlZCkuXG4gICAgICogQHJldHVybnMgYHRoaXNgXG4gICAgICovXG4gICAgcHVibGljIG9uRmFpbHVyZShfY2I6IERldGFpbGVkRmFpbHVyZUNvbnRpbnVhdGlvbjxULCBURD4pOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbi8qKlxuICogQSB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlfSBleHRlbmRzIHtAbGluayBGYWlsdXJlfSB0byByZXBvcnQgb3B0aW9uYWwgZmFpbHVyZSBkZXRhaWxzIGluXG4gKiBhZGRpdGlvbiB0byB0aGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIERldGFpbGVkRmFpbHVyZTxULCBURD4gZXh0ZW5kcyBGYWlsdXJlPFQ+IHtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2RldGFpbDogVEQ7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAbGluayBEZXRhaWxlZEZhaWx1cmUgfCBEZXRhaWxlZEZhaWx1cmU8VCwgVEQ+fSB3aXRoIHRoZSBzdXBwbGllZFxuICAgICAqIG1lc3NhZ2UgYW5kIGRldGFpbC5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGJlIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSBkZXRhaWwgLSBUaGUgZXJyb3IgZGV0YWlsIHRvIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIGRldGFpbDogVEQpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuX2RldGFpbCA9IGRldGFpbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXJyb3IgZGV0YWlsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHtAbGluayBEZXRhaWxlZEZhaWx1cmV9LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGV0YWlsKCk6IFREIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldGFpbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBvcnRzIHRoYXQgdGhpcyB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlfSBpcyBhIGZhaWx1cmUuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBBbHdheXMgdHJ1ZSBmb3Ige0BsaW5rIERldGFpbGVkRmFpbHVyZX0gYnV0IGNhbiBiZSB1c2VkIGFzIHR5cGUgZ3VhcmRcbiAgICAgKiB0byBkaXNjcmltaW5hdGUge0BsaW5rIERldGFpbGVkU3VjY2Vzc30gZnJvbSB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlfSBpblxuICAgICAqIGEge0BsaW5rIERldGFpbGVkUmVzdWx0fS5cbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWBcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNGYWlsdXJlKCk6IHRoaXMgaXMgRGV0YWlsZWRGYWlsdXJlPFQsIFREPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3BhZ2F0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIGRldGFpbCBmcm9tIHRoaXMgcmVzdWx0LlxuICAgICAqIEByZW1hcmtzXG4gICAgICogTXV0YXRlcyB0aGUgc3VjY2VzcyB0eXBlIGFzIHRoZSBzdWNjZXNzIGNhbGxiYWNrIHdvdWxkIGhhdmUsIGJ1dCBkb2VzIG5vdFxuICAgICAqIGNhbGwgdGhlIHN1Y2Nlc3MgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIF9jYiAtIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb24gfCBTdWNjZXNzIGNhbGxiYWNrfSB0byBiZSBjYWxsZWRcbiAgICAgKiBvbiBhIHtAbGluayBEZXRhaWxlZFJlc3VsdH0gaW4gY2FzZSBvZiBzdWNjZXNzIChpZ25vcmVkKS5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlIHwgRGV0YWlsZWRGYWlsdXJlPFROLCBURD59IHdoaWNoIGNvbnRhaW5zXG4gICAgICogdGhlIGVycm9yIG1lc3NhZ2UgYW5kIGRldGFpbCBmcm9tIHRoaXMgb25lLlxuICAgICAqL1xuICAgIHB1YmxpYyBvblN1Y2Nlc3M8VE4+KF9jYjogRGV0YWlsZWRTdWNjZXNzQ29udGludWF0aW9uPFQsIFRELCBUTj4pOiBEZXRhaWxlZFJlc3VsdDxUTiwgVEQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWxlZEZhaWx1cmU8VE4sIFREPih0aGlzLm1lc3NhZ2UsIHRoaXMuX2RldGFpbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgc3VwcGxpZWQge0BsaW5rIERldGFpbGVkRmFpbHVyZUNvbnRpbnVhdGlvbiB8IGZhaWx1cmUgY2FsbGJhY2t9IGFuZCBwcm9wYWdhdGVzXG4gICAgICogaXRzIHJldHVybmVkIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0uXG4gICAgICogQHBhcmFtIGNiIC0gVGhlIHtAbGluayBEZXRhaWxlZEZhaWx1cmVDb250aW51YXRpb24gfCBmYWlsdXJlIGNhbGxiYWNrfSB0byBiZSBpbnZva2VkLlxuICAgICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59IHJldHVybmVkIGJ5IHRoZSBmYWlsdXJlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZhaWx1cmUoY2I6IERldGFpbGVkRmFpbHVyZUNvbnRpbnVhdGlvbjxULCBURD4pOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gY2IodGhpcy5tZXNzYWdlLCB0aGlzLl9kZXRhaWwpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUeXBlIGluZmVyZW5jZSB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlIGBUYCBvZiBhIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0uXG4gKiBAYmV0YVxuICovXG5leHBvcnQgdHlwZSBEZXRhaWxlZFJlc3VsdDxULCBURD4gPSBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+fERldGFpbGVkRmFpbHVyZTxULCBURD47XG5cbi8qKlxuICogVHlwZSBpbmZlcmVuY2UgdG8gZGV0ZXJtaW5lIHRoZSBkZXRhaWwgdHlwZSBgVERgIG9mIGEge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fS5cbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3VsdERldGFpbFR5cGU8VD4gPSBUIGV4dGVuZHMgRGV0YWlsZWRSZXN1bHQ8dW5rbm93biwgaW5mZXIgVEQ+ID8gVEQgOiBuZXZlcjtcblxuLyoqXG4gKiBSZXR1cm5zIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3MgfCBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+fSB3aXRoIGEgc3VwcGxpZWQgdmFsdWUgYW5kIG9wdGlvbmFsXG4gKiBkZXRhaWwuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdHlwZSBgPFQ+YCB0byBiZSByZXR1cm5lZC5cbiAqIEBwYXJhbSBkZXRhaWwgLSBBbiBvcHRpb25hbCBkZXRhaWwgb2YgdHlwZSBgPFREPmAgdG8gYmUgcmV0dXJuZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3MgfCBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+fSB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZVxuICogYW5kIGRldGFpbCwgaWYgc3VwcGxpZWQuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWNjZWVkV2l0aERldGFpbDxULCBURD4odmFsdWU6IFQsIGRldGFpbD86IFREKTogRGV0YWlsZWRTdWNjZXNzPFQsIFREPiB7XG4gICAgcmV0dXJuIG5ldyBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+KHZhbHVlLCBkZXRhaWwpO1xufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIERldGFpbGVkRmFpbHVyZSB8IERldGFpbGVkRmFpbHVyZTxULCBURD59IHdpdGggYSBzdXBwbGllZCBlcnJvciBtZXNzYWdlIGFuZCBkZXRhaWwuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIGJlIHJldHVybmVkLlxuICogQHBhcmFtIGRldGFpbCAtIFRoZSBldmVudCBkZXRhaWwgdG8gYmUgcmV0dXJuZWQuXG4gKiBAcmV0dXJucyBBbiB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlIHwgRGV0YWlsZWRGYWlsdXJlPFQsIFREPn0gd2l0aCB0aGUgc3VwcGxpZWQgZXJyb3JcbiAqIG1lc3NhZ2UgYW5kIGRldGFpbC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhaWxXaXRoRGV0YWlsPFQsIFREPihtZXNzYWdlOiBzdHJpbmcsIGRldGFpbDogVEQpOiBEZXRhaWxlZEZhaWx1cmU8VCwgVEQ+IHtcbiAgICByZXR1cm4gbmV3IERldGFpbGVkRmFpbHVyZTxULCBURD4obWVzc2FnZSwgZGV0YWlsKTtcbn1cblxuLyoqXG4gKiBQcm9wYWdhdGVzIGEge0BsaW5rIFN1Y2Nlc3N9IG9yIHtAbGluayBGYWlsdXJlfSB7QGxpbmsgUmVzdWx0fSwgYWRkaW5nIHN1cHBsaWVkXG4gKiBldmVudCBkZXRhaWxzIGFzIGFwcHJvcHJpYXRlLlxuICogQHBhcmFtIHJlc3VsdCAtIFRoZSB7QGxpbmsgUmVzdWx0fSB0byBiZSBwcm9wYWdhdGVkLlxuICogQHBhcmFtIGRldGFpbCAtIFRoZSBldmVudCBkZXRhaWwgKHR5cGUgYDxURD5gKSB0byBiZSBhZGRlZCB0byB0aGUge0BsaW5rIFJlc3VsdCB8IHJlc3VsdH0uXG4gKiBAcGFyYW0gc3VjY2Vzc0RldGFpbCAtIEFuIG9wdGlvbmFsIGRpc3RpbmN0IGV2ZW50IGRldGFpbCB0byBiZSBhZGRlZCB0byB7QGxpbmsgU3VjY2Vzc30gcmVzdWx0cy4gIElmIGBzdWNjZXNzRGV0YWlsYFxuICogaXMgb21pdHRlZCBvciBgdW5kZWZpbmVkYCwgdGhlbiBgZGV0YWlsYCB3aWxsIGJlIGFwcGxpZWQgdG8ge0BsaW5rIFN1Y2Nlc3N9IHJlc3VsdHMuXG4gKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59IHdpdGggdGhlIHN1Y2Nlc3MgdmFsdWUgb3IgZXJyb3JcbiAqIG1lc3NhZ2UgZnJvbSB0aGUgb3JpZ2luYWwgYHJlc3VsdGAgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBkZXRhaWwgYWRkZWQuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wYWdhdGVXaXRoRGV0YWlsPFQsIFREPihyZXN1bHQ6IFJlc3VsdDxUPiwgZGV0YWlsOiBURCwgc3VjY2Vzc0RldGFpbD86IFREKTogRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+IHtcbiAgICByZXR1cm4gcmVzdWx0LmlzU3VjY2VzcygpXG4gICAgICAgID8gc3VjY2VlZFdpdGhEZXRhaWwocmVzdWx0LnZhbHVlLCBzdWNjZXNzRGV0YWlsID8/IGRldGFpbClcbiAgICAgICAgOiBmYWlsV2l0aERldGFpbChyZXN1bHQubWVzc2FnZSwgZGV0YWlsKTtcbn1cblxuLyoqXG4gKiBXcmFwcyBhIGZ1bmN0aW9uIHdoaWNoIG1pZ2h0IHRocm93IHRvIGNvbnZlcnQgZXhjZXB0aW9uIHJlc3VsdHNcbiAqIHRvIHtAbGluayBGYWlsdXJlfS5cbiAqIEBwYXJhbSBmdW5jIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGNhcHR1cmVkLlxuICogQHJldHVybnMgUmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCBhIHZhbHVlIG9mIHR5cGUgYDxUPmAgb25cbiAqIHN1Y2Nlc3MgLCBvciB7QGxpbmsgRmFpbHVyZX0gd2l0aCB0aGUgdGhyb3duIGVycm9yIG1lc3NhZ2UgaWZcbiAqIGBmdW5jYCB0aHJvd3MgYW4gYEVycm9yYC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVSZXN1bHQ8VD4oZnVuYzogKCkgPT4gVCk6IFJlc3VsdDxUPiB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHN1Y2NlZWQoZnVuYygpKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gZmFpbCgoZXJyIGFzIEVycm9yKS5tZXNzYWdlKTtcbiAgICB9XG59XG5cbi8qKlxuICogQWdncmVnYXRlcyBzdWNlc3NmdWwgcmVzdWx0IHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgUmVzdWx0IHwgUmVzdWx0PFQ+fS5cbiAqIEBwYXJhbSByZXN1bHRzIC0gVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUPn0gdG8gYmUgbWFwcGVkLlxuICogQHJldHVybnMgIElmIGFsbCB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gYXJlIHN1Y2Nlc3NmdWwsIHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggYW5cbiAqIGFycmF5IGNvbnRhaW5pbmcgYWxsIHJldHVybmVkIHZhbHVlcy4gIElmIGFueSB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gZmFpbGVkLCByZXR1cm5zXG4gKiB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhIGNvbmNhdGVuYXRlZCBzdW1tYXJ5IG9mIGFsbCBlcnJvciBtZXNzYWdlcy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFJlc3VsdHM8VD4ocmVzdWx0czogSXRlcmFibGU8UmVzdWx0PFQ+Pik6IFJlc3VsdDxUW10+IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZWxlbWVudHM6IFRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhaWwoZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2NlZWQoZWxlbWVudHMpO1xufVxuXG4vKipcbiAqIEFnZ3JlZ2F0ZXMgc3VjZXNzZnVsIHJlc3VsdHMgZnJvbSBhIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fSxcbiAqIG9wdGlvbmFsbHkgaWdub3JpbmcgY2VydGFpbiBlcnJvciBkZXRhaWxzLlxuICogQHBhcmFtIHJlc3VsdHMgLSBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59IHRvIGJlIG1hcHBlZC5cbiAqIEBwYXJhbSBpZ25vcmUgLSBBbiBhcnJheSBvZiBlcnJvciBkZXRhaWwgdmFsdWVzIChvZiB0eXBlIGA8VEQ+YCkgdGhhdCBzaG91bGQgYmUgaWdub3JlZC5cbiAqIEByZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHN1Y2Nlc3NmdWwgcmVzdWx0cyBpZiBhbGwgcmVzdWx0cyBlaXRoZXJcbiAqIHN1Y2VlZGVkIG9yIHJldHVybmVkIGVycm9yIGRldGFpbHMgbGlzdGVkIGluIGBpZ25vcmVgLiAgSWYgYW55IHJlc3VsdHMgZmFpbGVkIHdpdGggZGV0YWlsc1xuICogdGhhdCBjYW5ub3QgYmUgaWdub3JlZCwgcmV0dXJucyB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhbiBjb25jYXRlbmF0ZWQgc3VtbWFyeSBvZiBhbGwgbm9uLWlnbm9yYWJsZVxuICogZXJyb3IgbWVzYXNnZXMuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBEZXRhaWxlZFJlc3VsdHM8VCwgVEQ+KHJlc3VsdHM6IEl0ZXJhYmxlPERldGFpbGVkUmVzdWx0PFQsIFREPj4sIGlnbm9yZTogVERbXSk6IFJlc3VsdDxUW10+IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZWxlbWVudHM6IFRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlnbm9yZS5pbmNsdWRlcyhyZXN1bHQuZGV0YWlsKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZWVkKGVsZW1lbnRzKTtcbn1cblxuLyoqXG4gKiBBZ2dyZWdhdGVzIHN1Y2Nlc3NmdWwgcmVzdWx0cyBmcm9tIGEgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59LlxuICogQHBhcmFtIHJlc3VsdHMgLSBBbiBgSXRlcmFibGVgIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59IGZyb20gd2hpY2ggc3VjY2Vzc1xuICogcmVzdWx0cyBhcmUgdG8gYmUgYWdncmVnYXRlZC5cbiAqIEByZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIGFuIGFycmF5IG9mIGA8VD5gIGlmIGFueSByZXN1bHRzIHdlcmUgc3VjY2Vzc2Z1bC4gSWZcbiAqIGFsbCB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gZmFpbGVkLCByZXR1cm5zIHtAbGluayBGYWlsdXJlfSB3aXRoIGEgY29uY2F0ZW5hdGVkXG4gKiBzdW1tYXJ5IG9mIGFsbCBlcnJvciBtZXNzYWdlcy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFN1Y2Nlc3M8VD4ocmVzdWx0czogSXRlcmFibGU8UmVzdWx0PFQ+Pik6IFJlc3VsdDxUW10+IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZWxlbWVudHM6IFRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgJiYgKGVycm9ycy5sZW5ndGggPiAwKSkge1xuICAgICAgICByZXR1cm4gZmFpbChlcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VlZChlbGVtZW50cyk7XG59XG5cbi8qKlxuICogQWdncmVnYXRlcyBlcnJvciBtZXNzYWdlcyBmcm9tIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgUmVzdWx0IHwgUmVzdWx0PFQ+fS5cbiAqIEBwYXJhbSByZXN1bHRzIC0gQW4gaW50ZXJhYmxlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUPn0gZm9yIHdoaWNoXG4gKiBlcnJvciBtZXNzYWdlcyBhcmUgYWdncmVnYXRlZC5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MgY29uc2lzdGluZyBvZiBhbGwgZXJyb3IgbWVzc2FnZXMgcmV0dXJuZWQgYnlcbiAqIHtAbGluayBSZXN1bHQgfCByZXN1bHRzfSBpbiB0aGUgc291cmNlIGNvbGxlY3Rpb24uIElnbm9yZXMge0BsaW5rIFN1Y2Nlc3N9XG4gKiByZXN1bHRzIGFuZCByZXR1cm5zIGFuIGVtcHR5IGFycmF5IGlmIHRoZXJlIHdlcmUgbm8gZXJyb3JzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwRmFpbHVyZXM8VD4ocmVzdWx0czogSXRlcmFibGU8UmVzdWx0PFQ+Pik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGFuIGl0ZXJhYmxlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUPn0gd2VyZSBhbGwgc3VjY2Vzc2Z1bC5cbiAqIEBwYXJhbSByZXN1bHRzIC0gVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUPn0gdG8gYmUgdGVzdGVkLlxuICogQHJldHVybnMgUmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCBgdHJ1ZWAgaWYgYWxsIHtAbGluayBSZXN1bHQgfCByZXN1bHRzfSBhcmUgc3VjY2Vzc2Z1bC5cbiAqIElmIGFueSBhcmUgdW5zdWNjZXNzZnVsLCByZXR1cm5zIHtAbGluayBGYWlsdXJlfSB3aXRoIGEgY29uY2F0ZW5hdGVkIHN1bW1hcnkgdGhlIGVycm9yXG4gKiBtZXNzYWdlcyBmcm9tIGFsbCBmYWlsZWQgZWxlbWVudHMuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxTdWNjZWVkPFQ+KHJlc3VsdHM6IEl0ZXJhYmxlPFJlc3VsdDx1bmtub3duPj4sIHN1Y2Nlc3NWYWx1ZTogVCk6IFJlc3VsdDxUPiB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2VcbiAgICBpZiAocmVzdWx0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaXNGYWlsdXJlKCkpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhaWwoZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2NlZWQoc3VjY2Vzc1ZhbHVlKTtcbn1cblxuLyoqXG4gKiBTdHJpbmcta2V5ZWQgcmVjb3JkIG9mIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyB0byBiZSBwYXNzZWQgdG8ge0BsaW5rIHBvcHVsYXRlT2JqZWN0fS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRmllbGRJbml0aWFsaXplcnM8VD4gPSB7IFsga2V5IGluIGtleW9mIFQgXTogKHN0YXRlOiBQYXJ0aWFsPFQ+KSA9PiBSZXN1bHQ8VFtrZXldPiB9O1xuXG4vKipcbiAqIFBvcHVsYXRlcyBhbiBhbiBvYmplY3QgYmFzZWQgb24gYSBwcm90b3R5cGUgZnVsbCBvZiBmaWVsZCBpbml0aWFsaXplcnMgdGhhdCByZXR1cm4ge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUW2tleV0+fS5cbiAqIFJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHBvcHVsYXRlZCBvYmplY3QgaWYgYWxsIGluaXRpYWxpemVycyBzdWNjZWVkLCBvciB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhXG4gKiBjb25jYXRlbmF0ZWQgbGlzdCBvZiBhbGwgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gaW5pdGlhbGl6ZXJzIC0gQW4gb2JqZWN0IHdpdGggdGhlIHNoYXBlIG9mIHRoZSB0YXJnZXQgYnV0IHdpdGggaW5pdGlhbGl6ZXIgZnVuY3Rpb25zIGZvclxuICogZWFjaCBwcm9wZXJ0eS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvcHVsYXRlT2JqZWN0PFQ+KGluaXRpYWxpemVyczogRmllbGRJbml0aWFsaXplcnM8VD4sIG9yZGVyPzogKGtleW9mIFQpW10pOiBSZXN1bHQ8VD4ge1xuICAgIGNvbnN0IHN0YXRlID0ge30gYXMgeyBba2V5IGluIGtleW9mIFRdOiBUW2tleV0gfTtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qga2V5czogKGtleW9mIFQpW10gPSBBcnJheS5mcm9tKG9yZGVyID8/IFtdKTtcbiAgICBjb25zdCBmb3VuZEtleXMgPSBuZXcgU2V0PGtleW9mIFQ+KG9yZGVyKTtcblxuICAgIC8vIHN0YXJ0IHdpdGggdGhlIHN1cHBsaWVkIG9yZGVyIHRoZW4gYXBwZW5kIGFueXRoaW5nIGVsc2Ugd2UgZmluZFxuICAgIGZvciAoY29uc3Qga2V5IGluIGluaXRpYWxpemVycykge1xuICAgICAgICBpZiAoIWZvdW5kS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICBmb3VuZEtleXMuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGlmIChpbml0aWFsaXplcnNba2V5XSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdGlhbGl6ZXJzW2tleV0oc3RhdGUpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MoKSkge1xuICAgICAgICAgICAgICAgIHN0YXRlW2tleV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChgcG9wdWxhdGVPYmplY3Q6IEtleSAke2tleX0gaXMgcHJlc2VudCBidXQgaGFzIG5vIGluaXRpYWxpemVyYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhaWwoZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2NlZWQoc3RhdGUgYXMgVCk7XG59XG4iXX0=
|
|
539
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHOzs7QUF3SUg7Ozs7R0FJRztBQUNILE1BQWEsT0FBTztJQVVoQjs7O09BR0c7SUFDSCxZQUFZLEtBQVE7UUFicEI7O1dBRUc7UUFDYSxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBVzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNaLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxPQUF1QjtRQUMxQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCLENBQUMsSUFBUTs7UUFDN0IsT0FBTyxNQUFBLElBQUksQ0FBQyxNQUFNLG1DQUFJLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUssRUFBOEI7UUFDL0MsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxDQUF5QjtRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBSyxPQUFXO1FBQ3BDLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBSyxNQUFVLEVBQUUsYUFBa0I7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WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIwIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qKlxuICogUmVwcmVzZW50cyB0aGUge0BsaW5rIElSZXN1bHQgfCByZXN1bHR9IG9mIHNvbWUgb3BlcmF0aW9uIG9yIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMuXG4gKiBAcmVtYXJrc1xuICoge0BsaW5rIFN1Y2Nlc3MgfCBTdWNjZXNzPFQ+fSBhbmQge0BsaW5rIEZhaWx1cmUgfCBGYWlsdXJlPFQ+fSBzaGFyZSB0aGUgY29tbW9uXG4gKiBjb250cmFjdCB7QGxpbmsgSVJlc3VsdH0sIGVuYWJsaW5nIGNvbW1pbmdsZWQgZGlzY3JpbWluYXRlZCB1c2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0PFQ+ID0gU3VjY2VzczxUPiB8IEZhaWx1cmU8VD47XG4vKipcbiAqIENvbnRpbnVhdGlvbiBjYWxsYmFjayB0byBiZSBjYWxsZWQgaW4gdGhlIGV2ZW50IHRoYXQgYW5cbiAqIHtAbGluayBSZXN1bHR9IGlzIHN1Y2Nlc3NmdWwuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFN1Y2Nlc3NDb250aW51YXRpb248VCwgVE4+ID0gKHZhbHVlOiBUKSA9PiBSZXN1bHQ8VE4+O1xuLyoqXG4gKiBDb250aW51YXRpb24gY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGluIHRoZSBldmVudCB0aGF0IGFuXG4gKiB7QGxpbmsgUmVzdWx0fSBmYWlscy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRmFpbHVyZUNvbnRpbnVhdGlvbjxUPiA9IChtZXNzYWdlOiBzdHJpbmcpID0+IFJlc3VsdDxUPjtcbi8qKlxuICogVHlwZSBpbmZlcmVuY2UgdG8gZGV0ZXJtaW5lIHRoZSByZXN1bHQgdHlwZSBvZiBhbiB7QGxpbmsgUmVzdWx0fS5cbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3VsdFZhbHVlVHlwZTxUPiA9IFQgZXh0ZW5kcyBSZXN1bHQ8aW5mZXIgVFY+ID8gVFYgOiBuZXZlcjtcblxuLyoqXG4gKiBTaW1wbGUgbG9nZ2VyIGludGVyZmFjZSB1c2VkIGJ5IHtAbGluayBJUmVzdWx0LmdldFZhbHVlT3JUaHJvd30uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJlc3VsdExvZ2dlciB7XG4gICAgLyoqXG4gICAgICogTG9nIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSByZXN1bHQgb2Ygc29tZSBvcGVyYXRpb24gb2Ygc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucy5cbiAqIEByZW1hcmtzXG4gKiBUaGlzIGNvbW1vbiBjb250cmFjdCBlbmFibGVzIGNvbW1pbmdsZWQgZGlzY3JpbWluYXRlZCB1c2FnZSBvZiB7QGxpbmsgU3VjY2VzcyB8IFN1Y2Nlc3M8VD59XG4gKiBhbmQge0BsaW5rIEZhaWx1cmUgfCBGYWlsdXJlPFQ+fS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVzdWx0PFQ+IHtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHN1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4gIEZ1bmN0aW9uc1xuICAgICAqIGFzIGEgdHlwZSBndWFyZCBmb3Ige0BsaW5rIFN1Y2Nlc3MgfCBTdWNjZXNzPFQ+fS5cbiAgICAgKi9cbiAgICBpc1N1Y2Nlc3MoKTogdGhpcyBpcyBTdWNjZXNzPFQ+O1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gZmFpbGVkLiAgRnVuY3Rpb25zXG4gICAgICogYXMgYSB0eXBlIGd1YXJkIGZvciB7QGxpbmsgRmFpbHVyZSB8IEZhaWx1cmU8VD59LlxuICAgICAqL1xuICAgIGlzRmFpbHVyZSgpOiB0aGlzIGlzIEZhaWx1cmU8VD47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBzdWNjZXNzZnVsIHtAbGluayBJUmVzdWx0IHwgcmVzdWx0fSxcbiAgICAgKiBvciB0aHJvd3MgdGhlIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uIGZhaWxlZC5cbiAgICAgKiBAcGFyYW0gbG9nZ2VyIC0gQW4gb3B0aW9uYWwge0BsaW5rIElSZXN1bHRMb2dnZXIgfCBsb2dnZXJ9IHRvIHdoaWNoIHRoZVxuICAgICAqIGVycm9yIHdpbGwgYWxzbyBiZSByZXBvcnRlZC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlLCBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLlxuICAgICAqIEB0aHJvd3MgVGhlIGVycm9yIG1lc3NhZ2UgaWYgdGhlIG9wZXJhdGlvbiBmYWlsZWQuXG4gICAgICovXG4gICAgZ2V0VmFsdWVPclRocm93KGxvZ2dlcj86IElSZXN1bHRMb2dnZXIpOiBUO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgc3VjY2Vzc2Z1bCB7QGxpbmsgSVJlc3VsdCB8IHJlc3VsdH0sXG4gICAgICogb3IgYSBkZWZhdWx0IHZhbHVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBmYWlsZWQuXG4gICAgICogQHBhcmFtIGRmbHQgLSBUaGUgdmFsdWUgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIG9wZXJhdGlvbiBmYWlsZWQgKGRlZmF1bHQgaXNcbiAgICAgKiBgdW5kZWZpbmVkYCkuXG4gICAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSwgaWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4gIFJldHVybnNcbiAgICAgKiB0aGUgc3VwcGxpZWQgZGVmYXVsdCB2YWx1ZSBvciBgdW5kZWZpbmVkYCBpZiBubyBkZWZhdWx0IGlzIHN1cHBsaWVkLlxuICAgICAqL1xuICAgIGdldFZhbHVlT3JEZWZhdWx0KGRmbHQ/OiBUKTogVHx1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyBhIHN1cHBsaWVkIHtAbGluayBTdWNjZXNzQ29udGludWF0aW9uIHwgc3VjY2VzcyBjb250aW51YXRpb259IGlmXG4gICAgICogdGhlIG9wZXJhdGlvbiB3YXMgYSBzdWNjZXNzLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIHtAbGluayBTdWNjZXNzQ29udGludWF0aW9uIHwgc3VjY2VzcyBjb250aW51YXRpb259IG1pZ2h0IHJldHVybiBhXG4gICAgICogZGlmZmVyZW50IHJlc3VsdCB0eXBlIHRoYW4ge0BsaW5rIElSZXN1bHR9IG9uIHdoaWNoIGl0IGlzIGludm9rZWQuIFRoaXNcbiAgICAgKiBlbmFibGVzIGNoYWluaW5nIG9mIG9wZXJhdGlvbnMgd2l0aCBoZXRlcm9nZW5vdXMgcmV0dXJuIHR5cGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNiIC0gVGhlIHtAbGluayBTdWNjZXNzQ29udGludWF0aW9uIHwgc3VjY2VzcyBjb250aW51YXRpb259IHRvXG4gICAgICogYmUgY2FsbGVkIGluIHRoZSBldmVudCBvZiBzdWNjZXNzLlxuICAgICAqIEByZXR1cm5zIElmIHRoaXMgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLCByZXR1cm5zIHRoZSB2YWx1ZSByZXR1cm5lZFxuICAgICAqIGJ5IHRoZSB7QGxpbmsgU3VjY2Vzc0NvbnRpbnVhdGlvbiB8IHN1Y2Nlc3MgY29udGludWF0aW9ufS4gIElmIHRoaXMgcmVzdWx0XG4gICAgICogZmFpbGVkLCBwcm9wYWdhdGVzIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gdGhpcyBmYWlsdXJlLlxuICAgICAqL1xuICAgIG9uU3VjY2VzczxUTj4oY2I6IFN1Y2Nlc3NDb250aW51YXRpb248VCwgVE4+KTogUmVzdWx0PFROPjtcblxuICAgIC8qKlxuICAgICAqIENhbGxzIGEgc3VwcGxpZWQge0BsaW5rIEZhaWx1cmVDb250aW51YXRpb24gfCBmYWlsZWQgY29udGludWF0aW9ufSBpZlxuICAgICAqIHRoZSBvcGVyYXRpb24gZmFpbGVkLlxuICAgICAqIEBwYXJhbSBjYiAtIFRoZSB7QGxpbmsgRmFpbHVyZUNvbnRpbnVhdGlvbiB8IGZhaWx1cmUgY29udGludWF0aW9ufSB0b1xuICAgICAqIGJlIGNhbGxlZCBpbiB0aGUgZXZlbnQgb2YgZmFpbHVyZS5cbiAgICAgKiBAcmV0dXJucyBJZiB0aGlzIG9wZXJhdGlvbiBmYWlsZWQsIHJldHVybnMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZVxuICAgICAqIHtAbGluayBGYWlsdXJlQ29udGludWF0aW9uIHwgZmFpbHVyZSBjb250aW51YXRpb259LiAgSWYgdGhpcyByZXN1bHRcbiAgICAgKiB3YXMgc3VjY2Vzc2Z1bCwgcHJvcGFnYXRlcyB0aGUgcmVzdWx0IHZhbHVlIGZyb20gdGhlIHN1Y2Nlc3NmdWwgZXZlbnQuXG4gICAgICovXG4gICAgb25GYWlsdXJlKGNiOiBGYWlsdXJlQ29udGludWF0aW9uPFQ+KTogUmVzdWx0PFQ+O1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSB7QGxpbmsgSVJlc3VsdCB8IElSZXN1bHQ8VD59IHRvIGEge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fSxcbiAgICAgKiBhZGRpbmcgYSBzdXBwbGllZCBkZXRhaWwgaWYgdGhlIG9wZXJhdGlvbiBmYWlsZWQuXG4gICAgICogQHBhcmFtIGRldGFpbCAtIFRoZSBkZXRhaWwgdG8gYmUgYWRkZWQgaWYgdGhpcyBvcGVyYXRpb24gZmFpbGVkLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0gd2l0aCBlaXRoZXJcbiAgICAgKiB0aGUgc3VjY2VzcyByZXN1bHQgb3IgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSB0aGlzIHtAbGluayBJUmVzdWx0fSwgd2l0aFxuICAgICAqIHRoZSBzdXBwbGllZCBkZXRhaWwgKGlmIHRoaXMgZXZlbnQgZmFpbGVkKSBvciBkZXRhaWwgYHVuZGVmaW5lZGAgKGlmXG4gICAgICogdGhpcyByZXN1bHQgc3VjY2VlZGVkKS5cbiAgICAgKi9cbiAgICB3aXRoRmFpbHVyZURldGFpbDxURD4oZGV0YWlsOiBURCk6IERldGFpbGVkUmVzdWx0PFQsIFREPjtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEge0BsaW5rIElSZXN1bHQgfCBJUmVzdWx0PFQ+fSB0byBhIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0sXG4gICAgICogYWRkaW5nIHN1cHBsaWVkIGRldGFpbHMuXG4gICAgICogQHBhcmFtIGRldGFpbCAtIFRoZSBkZWZhdWx0IGRldGFpbCB0byBiZSBhZGRlZCB0byB0aGUgbmV3IHtAbGluayBEZXRhaWxlZFJlc3VsdH0uXG4gICAgICogQHBhcmFtIHN1Y2Nlc3NEZXRhaWwgLSBBbiBvcHRpb25hbCBkZXRhaWwgdG8gYmUgYWRkZWQgaWYgdGhpcyByZXN1bHQgd2FzIHN1Y2Nlc3NmdWwuXG4gICAgICogQHJldHVybnMgQSBuZXcge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fSB3aXRoIGVpdGhlclxuICAgICAqIHRoZSBzdWNjZXNzIHJlc3VsdCBvciB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoaXMge0BsaW5rIElSZXN1bHR9IGFuZCB0aGVcbiAgICAgKiBhcHByb3ByaWF0ZSBhZGRlZCBkZXRhaWwuXG4gICAgICovXG4gICAgd2l0aERldGFpbDxURD4oZGV0YWlsOiBURCwgc3VjY2Vzc0RldGFpbD86IFREKTogRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+O1xufVxuXG4vKipcbiAqIFJlcG9ydHMgYSBzdWNjZXNzZnVsIHtAbGluayBJUmVzdWx0IHwgcmVzdWx0fSBmcm9tIHNvbWUgb3BlcmF0aW9uIGFuZCB0aGVcbiAqIGNvcnJlc3BvbmRpbmcgdmFsdWUuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWNjZXNzPFQ+IGltcGxlbWVudHMgSVJlc3VsdDxUPiB7XG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuc3VjY2Vzc31cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VjY2VzcyA9IHRydWU7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdmFsdWU6IFQ7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSByZXN1bHQgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5pc1N1Y2Nlc3N9XG4gICAgICovXG4gICAgcHVibGljIGlzU3VjY2VzcygpOiB0aGlzIGlzIFN1Y2Nlc3M8VD4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5pc0ZhaWx1cmV9XG4gICAgICovXG4gICAgcHVibGljIGlzRmFpbHVyZSgpOiB0aGlzIGlzIEZhaWx1cmU8VD4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuZ2V0VmFsdWVPclRocm93fVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWYWx1ZU9yVGhyb3coX2xvZ2dlcj86IElSZXN1bHRMb2dnZXIpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmdldFZhbHVlT3JEZWZhdWx0fVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWYWx1ZU9yRGVmYXVsdChkZmx0PzogVCk6IFR8dW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlID8/IGRmbHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQub25TdWNjZXNzfVxuICAgICAqL1xuICAgIHB1YmxpYyBvblN1Y2Nlc3M8VE4+KGNiOiBTdWNjZXNzQ29udGludWF0aW9uPFQsIFROPik6IFJlc3VsdDxUTj4ge1xuICAgICAgICByZXR1cm4gY2IodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQub25GYWlsdXJlfVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZhaWx1cmUoXzogRmFpbHVyZUNvbnRpbnVhdGlvbjxUPik6IFJlc3VsdDxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LndpdGhGYWlsdXJlRGV0YWlsfVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmFpbHVyZURldGFpbDxURD4oX2RldGFpbDogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gc3VjY2VlZFdpdGhEZXRhaWwodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQud2l0aERldGFpbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERldGFpbDxURD4oZGV0YWlsOiBURCwgc3VjY2Vzc0RldGFpbD86IFREKTogRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+IHtcbiAgICAgICAgcmV0dXJuIHN1Y2NlZWRXaXRoRGV0YWlsKHRoaXMudmFsdWUsIHN1Y2Nlc3NEZXRhaWwgPz8gZGV0YWlsKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyBhIGZhaWxlZCB7QGxpbmsgSVJlc3VsdCB8IHJlc3VsdH0gZnJvbSBzb21lIG9wZXJhdGlvbiwgd2l0aCBhbiBlcnJvciBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgRmFpbHVyZTxUPiBpbXBsZW1lbnRzIElSZXN1bHQ8VD4ge1xuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LnN1Y2Nlc3N9XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2U6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSB7QGxpbmsgRmFpbHVyZX0gd2l0aCB0aGUgc3VwcGxpZWQgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2UgdG8gYmUgcmVwb3J0ZWQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGVycm9yIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXJyb3IuXG4gICAgICovXG4gICAgcHVibGljIGdldCBtZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmlzU3VjY2Vzc31cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTdWNjZXNzKCk6IHRoaXMgaXMgU3VjY2VzczxUPiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5pc0ZhaWx1cmV9XG4gICAgICovXG4gICAgcHVibGljIGlzRmFpbHVyZSgpOiB0aGlzIGlzIEZhaWx1cmU8VD4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5nZXRWYWx1ZU9yVGhyb3d9XG4gICAgICovXG4gICAgcHVibGljIGdldFZhbHVlT3JUaHJvdyhsb2dnZXI/OiBJUmVzdWx0TG9nZ2VyKTogbmV2ZXIge1xuICAgICAgICBpZiAobG9nZ2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcih0aGlzLl9tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5fbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuZ2V0VmFsdWVPckRlZmF1bHR9XG4gICAgICovXG4gICAgcHVibGljIGdldFZhbHVlT3JEZWZhdWx0KGRmbHQ/OiBUKTogVHx1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gZGZsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5vblN1Y2Nlc3N9XG4gICAgICovXG4gICAgcHVibGljIG9uU3VjY2VzczxUTj4oXzogU3VjY2Vzc0NvbnRpbnVhdGlvbjxULCBUTj4pOiBSZXN1bHQ8VE4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKHRoaXMubWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQub25GYWlsdXJlfVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZhaWx1cmUoY2I6IEZhaWx1cmVDb250aW51YXRpb248VD4pOiBSZXN1bHQ8VD4ge1xuICAgICAgICByZXR1cm4gY2IodGhpcy5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC53aXRoRmFpbHVyZURldGFpbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZhaWx1cmVEZXRhaWw8VEQ+KGRldGFpbDogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gZmFpbFdpdGhEZXRhaWwodGhpcy5tZXNzYWdlLCBkZXRhaWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LndpdGhEZXRhaWx9XG4gICAgICovXG4gICAgcHVibGljIHdpdGhEZXRhaWw8VEQ+KGRldGFpbDogVEQsIF9zdWNjZXNzRGV0YWlsPzogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gZmFpbFdpdGhEZXRhaWwodGhpcy5tZXNzYWdlLCBkZXRhaWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhICdmcmllbmRseScgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHtAbGluayBGYWlsdXJlfSB2YWx1ZSBpcyB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfVxufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIFN1Y2Nlc3MgfCBTdWNjZXNzPFQ+fSB3aXRoIHRoZSBzdXBwbGllZCByZXN1bHQgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3VjY2Vzc2Z1bCByZXN1bHQgdmFsdWUgdG8gYmUgcmV0dXJuZWRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Y2NlZWQ8VD4odmFsdWU6IFQpOiBTdWNjZXNzPFQ+IHtcbiAgICByZXR1cm4gbmV3IFN1Y2Nlc3M8VD4odmFsdWUpO1xufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIEZhaWx1cmUgfCBGYWlsdXJlPFQ+fSB3aXRoIHRoZSBzdXBwbGllZCBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIG1lc3NhZ2UgLSBFcnJvciBtZXNzYWdlIHRvIGJlIHJldHVybmVkLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmFpbDxUPihtZXNzYWdlOiBzdHJpbmcpOiBGYWlsdXJlPFQ+IHtcbiAgICByZXR1cm4gbmV3IEZhaWx1cmU8VD4obWVzc2FnZSk7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHR9IGVuY291bnRlcnMgc3VjY2Vzcy5cbiAqIEByZW1hcmtzXG4gKiBBIHN1Y2Nlc3MgY2FsbGJhY2sgY2FuIHJldHVybiBhIGRpZmZlcmVudCByZXN1bHQgdHlwZSB0aGFuIGl0IHJlY2VpdmVzLCBhbGxvd2luZ1xuICogc3VjY2VzcyByZXN1bHRzIHRvIGNoYWluIHRocm91Z2ggaW50ZXJtZWRpYXRlIHJlc3VsdCB0eXBlcy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGV0YWlsZWRTdWNjZXNzQ29udGludWF0aW9uPFQsIFRELCBUTj4gPSAodmFsdWU6IFQsIGRldGFpbD86IFREKSA9PiBEZXRhaWxlZFJlc3VsdDxUTiwgVEQ+O1xuXG4vKipcbiAqIENhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIGEge0BsaW5rIERldGFpbGVkUmVzdWx0fSBlbmNvdW50ZXJzIGEgZmFpbHVyZS5cbiAqIEByZW1hcmtzXG4gKiBBIGZhaWx1cmUgY2FsbGJhY2sgY2FuIGNoYW5nZSB7QGxpbmsgRmFpbHVyZX0gdG8ge0BsaW5rIFN1Y2Nlc3N9IChlLmcuIGJ5IHJldHVybmluZyBhIGRlZmF1bHQgdmFsdWUpXG4gKiBvciBpdCBjYW4gY2hhbmdlIG9yIGVtYmVsbGlzaCB0aGUgZXJyb3IgbWVzc2FnZSwgYnV0IGl0IGNhbm5vdCBjaGFuZ2UgdGhlIHN1Y2Nlc3MgcmV0dXJuIHR5cGUuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIERldGFpbGVkRmFpbHVyZUNvbnRpbnVhdGlvbjxULCBURD4gPSAobWVzc2FnZTogc3RyaW5nLCBkZXRhaWw6IFREKSA9PiBEZXRhaWxlZFJlc3VsdDxULCBURD47XG5cbi8qKlxuICogQSB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzfSBleHRlbmRzIHtAbGluayBTdWNjZXNzfSB0byByZXBvcnQgb3B0aW9uYWwgc3VjY2VzcyBkZXRhaWxzIGluXG4gKiBhZGRpdGlvbiB0byB0aGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIERldGFpbGVkU3VjY2VzczxULCBURD4gZXh0ZW5kcyBTdWNjZXNzPFQ+IHtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2RldGFpbD86IFREO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzIHwgRGV0YWlsZWRTdWNjZXNzPFQsIFREPn0gd2l0aCB0aGUgc3VwcGxpZWRcbiAgICAgKiB2YWx1ZSBhbmQgZGV0YWlsLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0gZGV0YWlsIC0gQW4gb3B0aW9uYWwgc3VjY2Vzc2Z1bCBkZXRhaWwgdG8gYmUgcmV0dXJuZWQuICBJZiBvbWl0dGVkLCBkZXRhaWxcbiAgICAgKiB3aWxsIGJlIGB1bmRlZmluZWRgLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogVCwgZGV0YWlsPzogVEQpIHtcbiAgICAgICAgc3VwZXIodmFsdWUpO1xuICAgICAgICB0aGlzLl9kZXRhaWwgPSBkZXRhaWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHN1Y2Nlc3MgZGV0YWlsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3N9LCBvciBgdW5kZWZpbmVkYCBpZlxuICAgICAqIG5vIGRldGFpbCB3YXMgc3VwcGxpZWQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBkZXRhaWwoKTogVER8dW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldGFpbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBvcnRzIHRoYXQgdGhpcyB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzfSBpcyBhIHN1Y2Nlc3MuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBBbHdheXMgdHJ1ZSBmb3Ige0BsaW5rIERldGFpbGVkU3VjY2Vzc30gYnV0IGNhbiBiZSB1c2VkIGFzIHR5cGUgZ3VhcmRcbiAgICAgKiB0byBkaXNjcmltaW5hdGUge0BsaW5rIERldGFpbGVkU3VjY2Vzc30gZnJvbSB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlfSBpblxuICAgICAqIGEge0BsaW5rIERldGFpbGVkUmVzdWx0fS5cbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWBcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTdWNjZXNzKCk6IHRoaXMgaXMgRGV0YWlsZWRTdWNjZXNzPFQsIFREPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIHN1cHBsaWVkIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb24gfCBzdWNjZXNzIGNhbGxiYWNrfSBhbmQgcHJvcGFnYXRlc1xuICAgICAqIGl0cyByZXR1cm5lZCB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxUTiwgVEQ+fS5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSBzdWNjZXNzIGNhbGxiYWNrIG11dGF0ZXMgdGhlIHJldHVybiB0eXBlIGZyb20gYDxUPmAgdG8gYDxUTj5gLlxuICAgICAqIEBwYXJhbSBjYiAtIFRoZSB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzQ29udGludWF0aW9uIHwgc3VjY2VzcyBjYWxsYmFja30gdG8gYmUgaW52b2tlZC5cbiAgICAgKiBAcmV0dXJucyBUaGUge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fSByZXR1cm5lZCBieSB0aGUgc3VjY2VzcyBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdWNjZXNzPFROPihjYjogRGV0YWlsZWRTdWNjZXNzQ29udGludWF0aW9uPFQsIFRELCBUTj4pOiBEZXRhaWxlZFJlc3VsdDxUTiwgVEQ+IHtcbiAgICAgICAgcmV0dXJuIGNiKHRoaXMudmFsdWUsIHRoaXMuX2RldGFpbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvcGFnYXRlcyB0aGlzIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3N9LlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRmFpbHVyZSBkb2VzIG5vdCBtdXRhdGUgcmV0dXJuIHR5cGUgc28gd2UgY2FuIHJldHVybiB0aGlzIGV2ZW50IGRpcmVjdGx5LlxuICAgICAqIEBwYXJhbSBfY2IgLSB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlQ29udGludWF0aW9uIHwgRmFpbHVyZSBjYWxsYmFja30gdG8gYmUgY2FsbGVkXG4gICAgICogb24gYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHR9IGluIGNhc2Ugb2YgZmFpbHVyZSAoaWdub3JlZCkuXG4gICAgICogQHJldHVybnMgYHRoaXNgXG4gICAgICovXG4gICAgcHVibGljIG9uRmFpbHVyZShfY2I6IERldGFpbGVkRmFpbHVyZUNvbnRpbnVhdGlvbjxULCBURD4pOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbi8qKlxuICogQSB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlfSBleHRlbmRzIHtAbGluayBGYWlsdXJlfSB0byByZXBvcnQgb3B0aW9uYWwgZmFpbHVyZSBkZXRhaWxzIGluXG4gKiBhZGRpdGlvbiB0byB0aGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIERldGFpbGVkRmFpbHVyZTxULCBURD4gZXh0ZW5kcyBGYWlsdXJlPFQ+IHtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2RldGFpbDogVEQ7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAbGluayBEZXRhaWxlZEZhaWx1cmUgfCBEZXRhaWxlZEZhaWx1cmU8VCwgVEQ+fSB3aXRoIHRoZSBzdXBwbGllZFxuICAgICAqIG1lc3NhZ2UgYW5kIGRldGFpbC5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGJlIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSBkZXRhaWwgLSBUaGUgZXJyb3IgZGV0YWlsIHRvIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIGRldGFpbDogVEQpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuX2RldGFpbCA9IGRldGFpbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXJyb3IgZGV0YWlsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHtAbGluayBEZXRhaWxlZEZhaWx1cmV9LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGV0YWlsKCk6IFREIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldGFpbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBvcnRzIHRoYXQgdGhpcyB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlfSBpcyBhIGZhaWx1cmUuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBBbHdheXMgdHJ1ZSBmb3Ige0BsaW5rIERldGFpbGVkRmFpbHVyZX0gYnV0IGNhbiBiZSB1c2VkIGFzIHR5cGUgZ3VhcmRcbiAgICAgKiB0byBkaXNjcmltaW5hdGUge0BsaW5rIERldGFpbGVkU3VjY2Vzc30gZnJvbSB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlfSBpblxuICAgICAqIGEge0BsaW5rIERldGFpbGVkUmVzdWx0fS5cbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWBcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNGYWlsdXJlKCk6IHRoaXMgaXMgRGV0YWlsZWRGYWlsdXJlPFQsIFREPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3BhZ2F0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIGRldGFpbCBmcm9tIHRoaXMgcmVzdWx0LlxuICAgICAqIEByZW1hcmtzXG4gICAgICogTXV0YXRlcyB0aGUgc3VjY2VzcyB0eXBlIGFzIHRoZSBzdWNjZXNzIGNhbGxiYWNrIHdvdWxkIGhhdmUsIGJ1dCBkb2VzIG5vdFxuICAgICAqIGNhbGwgdGhlIHN1Y2Nlc3MgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIF9jYiAtIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb24gfCBTdWNjZXNzIGNhbGxiYWNrfSB0byBiZSBjYWxsZWRcbiAgICAgKiBvbiBhIHtAbGluayBEZXRhaWxlZFJlc3VsdH0gaW4gY2FzZSBvZiBzdWNjZXNzIChpZ25vcmVkKS5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlIHwgRGV0YWlsZWRGYWlsdXJlPFROLCBURD59IHdoaWNoIGNvbnRhaW5zXG4gICAgICogdGhlIGVycm9yIG1lc3NhZ2UgYW5kIGRldGFpbCBmcm9tIHRoaXMgb25lLlxuICAgICAqL1xuICAgIHB1YmxpYyBvblN1Y2Nlc3M8VE4+KF9jYjogRGV0YWlsZWRTdWNjZXNzQ29udGludWF0aW9uPFQsIFRELCBUTj4pOiBEZXRhaWxlZFJlc3VsdDxUTiwgVEQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWxlZEZhaWx1cmU8VE4sIFREPih0aGlzLm1lc3NhZ2UsIHRoaXMuX2RldGFpbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgc3VwcGxpZWQge0BsaW5rIERldGFpbGVkRmFpbHVyZUNvbnRpbnVhdGlvbiB8IGZhaWx1cmUgY2FsbGJhY2t9IGFuZCBwcm9wYWdhdGVzXG4gICAgICogaXRzIHJldHVybmVkIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0uXG4gICAgICogQHBhcmFtIGNiIC0gVGhlIHtAbGluayBEZXRhaWxlZEZhaWx1cmVDb250aW51YXRpb24gfCBmYWlsdXJlIGNhbGxiYWNrfSB0byBiZSBpbnZva2VkLlxuICAgICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59IHJldHVybmVkIGJ5IHRoZSBmYWlsdXJlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZhaWx1cmUoY2I6IERldGFpbGVkRmFpbHVyZUNvbnRpbnVhdGlvbjxULCBURD4pOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gY2IodGhpcy5tZXNzYWdlLCB0aGlzLl9kZXRhaWwpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUeXBlIGluZmVyZW5jZSB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlIGBUYCBvZiBhIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0uXG4gKiBAYmV0YVxuICovXG5leHBvcnQgdHlwZSBEZXRhaWxlZFJlc3VsdDxULCBURD4gPSBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+fERldGFpbGVkRmFpbHVyZTxULCBURD47XG5cbi8qKlxuICogVHlwZSBpbmZlcmVuY2UgdG8gZGV0ZXJtaW5lIHRoZSBkZXRhaWwgdHlwZSBgVERgIG9mIGEge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fS5cbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3VsdERldGFpbFR5cGU8VD4gPSBUIGV4dGVuZHMgRGV0YWlsZWRSZXN1bHQ8dW5rbm93biwgaW5mZXIgVEQ+ID8gVEQgOiBuZXZlcjtcblxuLyoqXG4gKiBSZXR1cm5zIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3MgfCBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+fSB3aXRoIGEgc3VwcGxpZWQgdmFsdWUgYW5kIG9wdGlvbmFsXG4gKiBkZXRhaWwuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdHlwZSBgPFQ+YCB0byBiZSByZXR1cm5lZC5cbiAqIEBwYXJhbSBkZXRhaWwgLSBBbiBvcHRpb25hbCBkZXRhaWwgb2YgdHlwZSBgPFREPmAgdG8gYmUgcmV0dXJuZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3MgfCBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+fSB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZVxuICogYW5kIGRldGFpbCwgaWYgc3VwcGxpZWQuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWNjZWVkV2l0aERldGFpbDxULCBURD4odmFsdWU6IFQsIGRldGFpbD86IFREKTogRGV0YWlsZWRTdWNjZXNzPFQsIFREPiB7XG4gICAgcmV0dXJuIG5ldyBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+KHZhbHVlLCBkZXRhaWwpO1xufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIERldGFpbGVkRmFpbHVyZSB8IERldGFpbGVkRmFpbHVyZTxULCBURD59IHdpdGggYSBzdXBwbGllZCBlcnJvciBtZXNzYWdlIGFuZCBkZXRhaWwuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIGJlIHJldHVybmVkLlxuICogQHBhcmFtIGRldGFpbCAtIFRoZSBldmVudCBkZXRhaWwgdG8gYmUgcmV0dXJuZWQuXG4gKiBAcmV0dXJucyBBbiB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlIHwgRGV0YWlsZWRGYWlsdXJlPFQsIFREPn0gd2l0aCB0aGUgc3VwcGxpZWQgZXJyb3JcbiAqIG1lc3NhZ2UgYW5kIGRldGFpbC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhaWxXaXRoRGV0YWlsPFQsIFREPihtZXNzYWdlOiBzdHJpbmcsIGRldGFpbDogVEQpOiBEZXRhaWxlZEZhaWx1cmU8VCwgVEQ+IHtcbiAgICByZXR1cm4gbmV3IERldGFpbGVkRmFpbHVyZTxULCBURD4obWVzc2FnZSwgZGV0YWlsKTtcbn1cblxuLyoqXG4gKiBQcm9wYWdhdGVzIGEge0BsaW5rIFN1Y2Nlc3N9IG9yIHtAbGluayBGYWlsdXJlfSB7QGxpbmsgUmVzdWx0fSwgYWRkaW5nIHN1cHBsaWVkXG4gKiBldmVudCBkZXRhaWxzIGFzIGFwcHJvcHJpYXRlLlxuICogQHBhcmFtIHJlc3VsdCAtIFRoZSB7QGxpbmsgUmVzdWx0fSB0byBiZSBwcm9wYWdhdGVkLlxuICogQHBhcmFtIGRldGFpbCAtIFRoZSBldmVudCBkZXRhaWwgKHR5cGUgYDxURD5gKSB0byBiZSBhZGRlZCB0byB0aGUge0BsaW5rIFJlc3VsdCB8IHJlc3VsdH0uXG4gKiBAcGFyYW0gc3VjY2Vzc0RldGFpbCAtIEFuIG9wdGlvbmFsIGRpc3RpbmN0IGV2ZW50IGRldGFpbCB0byBiZSBhZGRlZCB0byB7QGxpbmsgU3VjY2Vzc30gcmVzdWx0cy4gIElmIGBzdWNjZXNzRGV0YWlsYFxuICogaXMgb21pdHRlZCBvciBgdW5kZWZpbmVkYCwgdGhlbiBgZGV0YWlsYCB3aWxsIGJlIGFwcGxpZWQgdG8ge0BsaW5rIFN1Y2Nlc3N9IHJlc3VsdHMuXG4gKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59IHdpdGggdGhlIHN1Y2Nlc3MgdmFsdWUgb3IgZXJyb3JcbiAqIG1lc3NhZ2UgZnJvbSB0aGUgb3JpZ2luYWwgYHJlc3VsdGAgYnV0IHdpdGggdGhlIHNwZWNpZmllZCBkZXRhaWwgYWRkZWQuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wYWdhdGVXaXRoRGV0YWlsPFQsIFREPihyZXN1bHQ6IFJlc3VsdDxUPiwgZGV0YWlsOiBURCwgc3VjY2Vzc0RldGFpbD86IFREKTogRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+IHtcbiAgICByZXR1cm4gcmVzdWx0LmlzU3VjY2VzcygpXG4gICAgICAgID8gc3VjY2VlZFdpdGhEZXRhaWwocmVzdWx0LnZhbHVlLCBzdWNjZXNzRGV0YWlsID8/IGRldGFpbClcbiAgICAgICAgOiBmYWlsV2l0aERldGFpbChyZXN1bHQubWVzc2FnZSwgZGV0YWlsKTtcbn1cblxuLyoqXG4gKiBXcmFwcyBhIGZ1bmN0aW9uIHdoaWNoIG1pZ2h0IHRocm93IHRvIGNvbnZlcnQgZXhjZXB0aW9uIHJlc3VsdHNcbiAqIHRvIHtAbGluayBGYWlsdXJlfS5cbiAqIEBwYXJhbSBmdW5jIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGNhcHR1cmVkLlxuICogQHJldHVybnMgUmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCBhIHZhbHVlIG9mIHR5cGUgYDxUPmAgb25cbiAqIHN1Y2Nlc3MgLCBvciB7QGxpbmsgRmFpbHVyZX0gd2l0aCB0aGUgdGhyb3duIGVycm9yIG1lc3NhZ2UgaWZcbiAqIGBmdW5jYCB0aHJvd3MgYW4gYEVycm9yYC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVSZXN1bHQ8VD4oZnVuYzogKCkgPT4gVCk6IFJlc3VsdDxUPiB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHN1Y2NlZWQoZnVuYygpKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gZmFpbCgoZXJyIGFzIEVycm9yKS5tZXNzYWdlKTtcbiAgICB9XG59XG5cbi8qKlxuICogQWdncmVnYXRlcyBzdWNjZXNzZnVsIHJlc3VsdCB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUPn0uXG4gKiBAcGFyYW0gcmVzdWx0cyAtIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59IHRvIGJlIG1hcHBlZC5cbiAqIEByZXR1cm5zICBJZiBhbGwge0BsaW5rIFJlc3VsdCB8IHJlc3VsdHN9IGFyZSBzdWNjZXNzZnVsLCByZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIGFuXG4gKiBhcnJheSBjb250YWluaW5nIGFsbCByZXR1cm5lZCB2YWx1ZXMuICBJZiBhbnkge0BsaW5rIFJlc3VsdCB8IHJlc3VsdHN9IGZhaWxlZCwgcmV0dXJuc1xuICoge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBjb25jYXRlbmF0ZWQgc3VtbWFyeSBvZiBhbGwgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBSZXN1bHRzPFQ+KHJlc3VsdHM6IEl0ZXJhYmxlPFJlc3VsdDxUPj4pOiBSZXN1bHQ8VFtdPiB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGVsZW1lbnRzOiBUW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MoKSkge1xuICAgICAgICAgICAgZWxlbWVudHMucHVzaChyZXN1bHQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZWVkKGVsZW1lbnRzKTtcbn1cblxuLyoqXG4gKiBBZ2dyZWdhdGVzIHN1Y2Nlc3NmdWwgcmVzdWx0cyBmcm9tIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59LFxuICogb3B0aW9uYWxseSBpZ25vcmluZyBjZXJ0YWluIGVycm9yIGRldGFpbHMuXG4gKiBAcGFyYW0gcmVzdWx0cyAtIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0gdG8gYmUgbWFwcGVkLlxuICogQHBhcmFtIGlnbm9yZSAtIEFuIGFycmF5IG9mIGVycm9yIGRldGFpbCB2YWx1ZXMgKG9mIHR5cGUgYDxURD5gKSB0aGF0IHNob3VsZCBiZSBpZ25vcmVkLlxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggYW4gYXJyYXkgY29udGFpbmluZyBhbGwgc3VjY2Vzc2Z1bCByZXN1bHRzIGlmIGFsbCByZXN1bHRzIGVpdGhlclxuICogc3VjY2VlZGVkIG9yIHJldHVybmVkIGVycm9yIGRldGFpbHMgbGlzdGVkIGluIGBpZ25vcmVgLiAgSWYgYW55IHJlc3VsdHMgZmFpbGVkIHdpdGggZGV0YWlsc1xuICogdGhhdCBjYW5ub3QgYmUgaWdub3JlZCwgcmV0dXJucyB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhbiBjb25jYXRlbmF0ZWQgc3VtbWFyeSBvZiBhbGwgbm9uLWlnbm9yYWJsZVxuICogZXJyb3IgbWVzc2FnZXMuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBEZXRhaWxlZFJlc3VsdHM8VCwgVEQ+KHJlc3VsdHM6IEl0ZXJhYmxlPERldGFpbGVkUmVzdWx0PFQsIFREPj4sIGlnbm9yZTogVERbXSk6IFJlc3VsdDxUW10+IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZWxlbWVudHM6IFRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlnbm9yZS5pbmNsdWRlcyhyZXN1bHQuZGV0YWlsKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZWVkKGVsZW1lbnRzKTtcbn1cblxuLyoqXG4gKiBBZ2dyZWdhdGVzIHN1Y2Nlc3NmdWwgcmVzdWx0cyBmcm9tIGEgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59LlxuICogQHBhcmFtIHJlc3VsdHMgLSBBbiBgSXRlcmFibGVgIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59IGZyb20gd2hpY2ggc3VjY2Vzc1xuICogcmVzdWx0cyBhcmUgdG8gYmUgYWdncmVnYXRlZC5cbiAqIEByZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIGFuIGFycmF5IG9mIGA8VD5gIGlmIGFueSByZXN1bHRzIHdlcmUgc3VjY2Vzc2Z1bC4gSWZcbiAqIGFsbCB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gZmFpbGVkLCByZXR1cm5zIHtAbGluayBGYWlsdXJlfSB3aXRoIGEgY29uY2F0ZW5hdGVkXG4gKiBzdW1tYXJ5IG9mIGFsbCBlcnJvciBtZXNzYWdlcy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFN1Y2Nlc3M8VD4ocmVzdWx0czogSXRlcmFibGU8UmVzdWx0PFQ+Pik6IFJlc3VsdDxUW10+IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZWxlbWVudHM6IFRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgJiYgKGVycm9ycy5sZW5ndGggPiAwKSkge1xuICAgICAgICByZXR1cm4gZmFpbChlcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VlZChlbGVtZW50cyk7XG59XG5cbi8qKlxuICogQWdncmVnYXRlcyBlcnJvciBtZXNzYWdlcyBmcm9tIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgUmVzdWx0IHwgUmVzdWx0PFQ+fS5cbiAqIEBwYXJhbSByZXN1bHRzIC0gQW4gaXRlcmFibGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgUmVzdWx0IHwgUmVzdWx0PFQ+fSBmb3Igd2hpY2hcbiAqIGVycm9yIG1lc3NhZ2VzIGFyZSBhZ2dyZWdhdGVkLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncyBjb25zaXN0aW5nIG9mIGFsbCBlcnJvciBtZXNzYWdlcyByZXR1cm5lZCBieVxuICoge0BsaW5rIFJlc3VsdCB8IHJlc3VsdHN9IGluIHRoZSBzb3VyY2UgY29sbGVjdGlvbi4gSWdub3JlcyB7QGxpbmsgU3VjY2Vzc31cbiAqIHJlc3VsdHMgYW5kIHJldHVybnMgYW4gZW1wdHkgYXJyYXkgaWYgdGhlcmUgd2VyZSBubyBlcnJvcnMuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBGYWlsdXJlczxUPihyZXN1bHRzOiBJdGVyYWJsZTxSZXN1bHQ8VD4+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHQuaXNGYWlsdXJlKCkpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYW4gaXRlcmFibGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgUmVzdWx0IHwgUmVzdWx0PFQ+fSB3ZXJlIGFsbCBzdWNjZXNzZnVsLlxuICogQHBhcmFtIHJlc3VsdHMgLSBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgUmVzdWx0IHwgUmVzdWx0PFQ+fSB0byBiZSB0ZXN0ZWQuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIGB0cnVlYCBpZiBhbGwge0BsaW5rIFJlc3VsdCB8IHJlc3VsdHN9IGFyZSBzdWNjZXNzZnVsLlxuICogSWYgYW55IGFyZSB1bnN1Y2Nlc3NmdWwsIHJldHVybnMge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBjb25jYXRlbmF0ZWQgc3VtbWFyeSB0aGUgZXJyb3JcbiAqIG1lc3NhZ2VzIGZyb20gYWxsIGZhaWxlZCBlbGVtZW50cy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbFN1Y2NlZWQ8VD4ocmVzdWx0czogSXRlcmFibGU8UmVzdWx0PHVua25vd24+Piwgc3VjY2Vzc1ZhbHVlOiBUKTogUmVzdWx0PFQ+IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgIGlmIChyZXN1bHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0ZhaWx1cmUoKSkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gZmFpbChlcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VlZChzdWNjZXNzVmFsdWUpO1xufVxuXG4vKipcbiAqIFN0cmluZy1rZXllZCByZWNvcmQgb2YgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIHRvIGJlIHBhc3NlZCB0byB7QGxpbmsgcG9wdWxhdGVPYmplY3R9LlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBGaWVsZEluaXRpYWxpemVyczxUPiA9IHsgWyBrZXkgaW4ga2V5b2YgVCBdOiAoc3RhdGU6IFBhcnRpYWw8VD4pID0+IFJlc3VsdDxUW2tleV0+IH07XG5cbi8qKlxuICogUG9wdWxhdGVzIGFuIGFuIG9iamVjdCBiYXNlZCBvbiBhIHByb3RvdHlwZSBmdWxsIG9mIGZpZWxkIGluaXRpYWxpemVycyB0aGF0IHJldHVybiB7QGxpbmsgUmVzdWx0IHwgUmVzdWx0PFRba2V5XT59LlxuICogUmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCB0aGUgcG9wdWxhdGVkIG9iamVjdCBpZiBhbGwgaW5pdGlhbGl6ZXJzIHN1Y2NlZWQsIG9yIHtAbGluayBGYWlsdXJlfSB3aXRoIGFcbiAqIGNvbmNhdGVuYXRlZCBsaXN0IG9mIGFsbCBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSBpbml0aWFsaXplcnMgLSBBbiBvYmplY3Qgd2l0aCB0aGUgc2hhcGUgb2YgdGhlIHRhcmdldCBidXQgd2l0aCBpbml0aWFsaXplciBmdW5jdGlvbnMgZm9yXG4gKiBlYWNoIHByb3BlcnR5LlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVPYmplY3Q8VD4oaW5pdGlhbGl6ZXJzOiBGaWVsZEluaXRpYWxpemVyczxUPiwgb3JkZXI/OiAoa2V5b2YgVClbXSk6IFJlc3VsdDxUPiB7XG4gICAgY29uc3Qgc3RhdGUgPSB7fSBhcyB7IFtrZXkgaW4ga2V5b2YgVF06IFRba2V5XSB9O1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBrZXlzOiAoa2V5b2YgVClbXSA9IEFycmF5LmZyb20ob3JkZXIgPz8gW10pO1xuICAgIGNvbnN0IGZvdW5kS2V5cyA9IG5ldyBTZXQ8a2V5b2YgVD4ob3JkZXIpO1xuXG4gICAgLy8gc3RhcnQgd2l0aCB0aGUgc3VwcGxpZWQgb3JkZXIgdGhlbiBhcHBlbmQgYW55dGhpbmcgZWxzZSB3ZSBmaW5kXG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5pdGlhbGl6ZXJzKSB7XG4gICAgICAgIGlmICghZm91bmRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGZvdW5kS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGluaXRpYWxpemVyc1trZXldKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0aWFsaXplcnNba2V5XShzdGF0ZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVba2V5XSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKGBwb3B1bGF0ZU9iamVjdDogS2V5ICR7U3RyaW5nKGtleSl9IGlzIHByZXNlbnQgYnV0IGhhcyBubyBpbml0aWFsaXplcmApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZWVkKHN0YXRlIGFzIFQpO1xufVxuIl19
|
package/utils.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export declare function getTypeOfProperty<T extends object>(key: string | number
|
|
|
34
34
|
* Type for factory methods which convert a key-value pair to a new unique value.
|
|
35
35
|
* @public
|
|
36
36
|
*/
|
|
37
|
-
|
|
37
|
+
type KeyedThingFactory<TS, TD, TK extends string = string> = (key: TK, thing: TS) => Result<TD>;
|
|
38
38
|
/**
|
|
39
39
|
* Applies a factory method to convert a `Record<TK, TS>` into a `Map<TK, TD>`.
|
|
40
40
|
* @param src - The `Record` to be converted.
|
package/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,MAAM,EAAiB,MAAM,UAAU,CAAC;AAEjD;;;;;;;GAOG;AAEH,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,GAAC,MAAM,GAAC,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAE5F;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,MAAM,EACxD,GAAG,EAAE,MAAM,GAAC,MAAM,GAAC,MAAM,EACzB,IAAI,EAAE,CAAC,EACP,YAAY,CAAC,EAAE,OAAO,GACvB,OAAO,GAAG,SAAS,CAErB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAC9C,GAAG,EAAE,MAAM,GAAC,MAAM,GAAC,MAAM,EACzB,IAAI,EAAE,CAAC,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAElI;AAED;;;GAGG;AACH,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/validation/boolean.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { GenericValidator, GenericValidatorConstructorParams } from './genericVa
|
|
|
4
4
|
* Parameters used to construct a {@link Validation.Classes.BooleanValidator | BooleanValidator}.
|
|
5
5
|
* @public
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
7
|
+
export type BooleanValidatorConstructorParams<TC = unknown> = GenericValidatorConstructorParams<boolean, TC>;
|
|
8
8
|
/**
|
|
9
9
|
* An in-place {@link Validation.Validator | Validator} for `boolean` values.
|
|
10
10
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/validation/boolean.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,OAAO,EAAQ,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AAEzF;;;GAGG;AACH,
|
|
1
|
+
{"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/validation/boolean.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,OAAO,EAAQ,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AAEzF;;;GAGG;AACH,MAAM,MAAM,iCAAiC,CAAC,EAAE,GAAG,OAAO,IAAI,iCAAiC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAE7G;;;GAGG;AACH,qBAAa,gBAAgB,CAAC,EAAE,GAAG,OAAO,CAAE,SAAQ,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;IAC7E;;;;OAIG;gBACgB,MAAM,CAAC,EAAE,iCAAiC,CAAC,EAAE,CAAC;IASjE;;;;;OAKG;WACW,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAM3E"}
|
|
@@ -8,7 +8,7 @@ import { Brand } from '../brand';
|
|
|
8
8
|
* an optionally-supplied validation context of type `<TC>`.
|
|
9
9
|
* @public
|
|
10
10
|
*/
|
|
11
|
-
export
|
|
11
|
+
export type ValidatorFunc<T, TC> = (from: unknown, context?: TC) => boolean | Failure<T>;
|
|
12
12
|
/**
|
|
13
13
|
* Options used to initialize a {@link Validation.Base.GenericValidator | GenericValidator}.
|
|
14
14
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genericValidator.d.ts","sourceRoot":"","sources":["../../src/validation/genericValidator.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAiB,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC;;;;;GAKG;AACH,
|
|
1
|
+
{"version":3,"file":"genericValidator.d.ts","sourceRoot":"","sources":["../../src/validation/genericValidator.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAiB,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,iCAAiC,CAAC,CAAC,EAAE,EAAE;IACpD,OAAO,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;CACnC;AAED;;;GAGG;AACH,qBAAa,gBAAgB,CAAC,CAAC,EAAE,EAAE,GAAG,SAAS,CAAE,YAAW,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;IACxE;;OAEG;IACH,SAAgB,MAAM,EAAE,eAAe,CAAC;IAExC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAElD;;;;OAIG;gBACgB,MAAM,EAAE,OAAO,CAAC,iCAAiC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAS5E;;OAEG;IACH,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED;;OAEG;IACH,IAAW,KAAK,IAAI,MAAM,GAAG,SAAS,CAErC;IAED;;OAEG;IACI,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IAQvD;;OAEG;IACI,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAI3E;;OAEG;IACI,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC;IAIpD;;OAEG;IACI,QAAQ,IAAI,SAAS,CAAC,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC;IAU/C;;OAEG;IACI,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;IAmB3F;;OAEG;IACI,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAaxE;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,SAAS;CAG3D"}
|