@fgv/ts-utils 1.9.0 → 1.9.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fgv/ts-utils",
3
- "version": "1.9.0",
3
+ "version": "1.9.2",
4
4
  "description": "Assorted Typescript Utilities",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -51,7 +51,7 @@
51
51
  "jest": "^29.3.1",
52
52
  "jest-extended": "^3.2.1",
53
53
  "jest-matcher-utils": "^29.3.1",
54
- "rimraf": "^3.0.2",
54
+ "rimraf": "^4.1.1",
55
55
  "ts-jest": "^29.0.3",
56
56
  "ts-node": "^10.2.1",
57
57
  "typescript": "^4.4.3"
package/utils.d.ts CHANGED
@@ -8,6 +8,25 @@ import { Result } from './result';
8
8
  * @public
9
9
  */
10
10
  export declare function isKeyOf<T extends object>(key: string | number | symbol, item: T): key is keyof T;
11
+ /**
12
+ * Simple implicit pick function, which picks a set of properties from a supplied
13
+ * object. Ignores picked properties that do not exist regardless of type signature.
14
+ * @param from - The object from which keys are to be picked.
15
+ * @param include - The keys of the properties to be picked from `from`.
16
+ * @returns A new object containing the requested properties from `from`, where present.
17
+ * @public
18
+ */
19
+ export declare function pick<T extends object, K extends keyof T>(from: T, include: K[]): Pick<T, K>;
20
+ /**
21
+ * Simple implicit omit function, which picks all of the properties from a supplied
22
+ * object except those specified for exclusion.
23
+ * @param from - The object from which keys are to be picked.
24
+ * @param exclude - The keys of the properties to be excluded from the returned object.
25
+ * @returns A new object containing all of the properties from `from` that were not
26
+ * explicitly excluded.
27
+ * @public
28
+ */
29
+ export declare function omit<T extends object, K extends keyof T>(from: T, exclude: K[]): Omit<T, K>;
11
30
  /**
12
31
  * Gets the value of a property specified by key from an arbitrary object,
13
32
  * or a default value if the property does not exist.
package/utils.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/utils.js CHANGED
@@ -21,7 +21,7 @@
21
21
  * SOFTWARE.
22
22
  */
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.optionalMapToPossiblyEmptyRecord = exports.optionalMapToRecord = exports.mapToRecord = exports.optionalRecordToPossiblyEmptyMap = exports.optionalRecordToMap = exports.recordToMap = exports.getTypeOfProperty = exports.getValueOfPropertyOrDefault = exports.isKeyOf = void 0;
24
+ exports.optionalMapToPossiblyEmptyRecord = exports.optionalMapToRecord = exports.mapToRecord = exports.optionalRecordToPossiblyEmptyMap = exports.optionalRecordToMap = exports.recordToMap = exports.getTypeOfProperty = exports.getValueOfPropertyOrDefault = exports.omit = exports.pick = exports.isKeyOf = void 0;
25
25
  const result_1 = require("./result");
26
26
  /**
27
27
  * Helper type-guard function to report whether a specified key is present in
@@ -36,6 +36,41 @@ function isKeyOf(key, item) {
36
36
  return item.hasOwnProperty(key);
37
37
  }
38
38
  exports.isKeyOf = isKeyOf;
39
+ /**
40
+ * Simple implicit pick function, which picks a set of properties from a supplied
41
+ * object. Ignores picked properties that do not exist regardless of type signature.
42
+ * @param from - The object from which keys are to be picked.
43
+ * @param include - The keys of the properties to be picked from `from`.
44
+ * @returns A new object containing the requested properties from `from`, where present.
45
+ * @public
46
+ */
47
+ function pick(from, include) {
48
+ const rtrn = {};
49
+ for (const key of include) {
50
+ if (key in from) {
51
+ rtrn[key] = from[key];
52
+ }
53
+ }
54
+ return rtrn;
55
+ }
56
+ exports.pick = pick;
57
+ /**
58
+ * Simple implicit omit function, which picks all of the properties from a supplied
59
+ * object except those specified for exclusion.
60
+ * @param from - The object from which keys are to be picked.
61
+ * @param exclude - The keys of the properties to be excluded from the returned object.
62
+ * @returns A new object containing all of the properties from `from` that were not
63
+ * explicitly excluded.
64
+ * @public
65
+ */
66
+ function omit(from, exclude) {
67
+ const rtrn = {};
68
+ for (const entry of Object.entries(from).filter((e) => !exclude.includes(e[0]))) {
69
+ rtrn[entry[0]] = entry[1];
70
+ }
71
+ return rtrn;
72
+ }
73
+ exports.omit = omit;
39
74
  /**
40
75
  * Gets the value of a property specified by key from an arbitrary object,
41
76
  * or a default value if the property does not exist.
@@ -162,4 +197,4 @@ function optionalMapToPossiblyEmptyRecord(src, factory) {
162
197
  return (src === undefined) ? (0, result_1.succeed)({}) : mapToRecord(src, factory);
163
198
  }
164
199
  exports.optionalMapToPossiblyEmptyRecord = optionalMapToPossiblyEmptyRecord;
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgscUNBQWlEO0FBRWpEOzs7Ozs7O0dBT0c7QUFDSCx3REFBd0Q7QUFDeEQsU0FBZ0IsT0FBTyxDQUFtQixHQUF5QixFQUFFLElBQU87SUFDeEUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFGRCwwQkFFQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQiwyQkFBMkIsQ0FDdkMsR0FBeUIsRUFDekIsSUFBTyxFQUNQLFlBQXNCO0lBRXRCLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7QUFDekQsQ0FBQztBQU5ELGtFQU1DO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLGlCQUFpQixDQUM3QixHQUF5QixFQUN6QixJQUFPO0lBQ1AsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzdELENBQUM7QUFKRCw4Q0FJQztBQVFEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixXQUFXLENBQXFDLEdBQW1CLEVBQUUsT0FBc0M7SUFDdkgsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM5QixLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUNuQixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDeEIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDeEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2xDO2lCQUNJO2dCQUNELE9BQU8sSUFBQSxhQUFJLEVBQUMsR0FBRyxHQUFHLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDaEQ7U0FDSjtLQUNKO0lBQ0QsT0FBTyxJQUFBLGdCQUFPLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQWRELGtDQWNDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLG1CQUFtQixDQUFxQyxHQUE2QixFQUFFLE9BQXNDO0lBQ3pJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsZ0JBQU8sRUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBRkQsa0RBRUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsZ0NBQWdDLENBQXFDLEdBQTZCLEVBQUUsT0FBc0M7SUFDdEosT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQSxnQkFBTyxFQUFDLElBQUksR0FBRyxFQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RixDQUFDO0FBRkQsNEVBRUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsV0FBVyxDQUFxQyxHQUFnQixFQUFFLE9BQXNDO0lBQ3BILE1BQU0sTUFBTSxHQUFtQixFQUFvQixDQUFDO0lBQ3BELEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ25CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUN0QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNyQztpQkFDSTtnQkFDRCxPQUFPLElBQUEsYUFBSSxFQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ25EO1NBQ0o7S0FDSjtJQUNELE9BQU8sSUFBQSxnQkFBTyxFQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFkRCxrQ0FjQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBcUMsR0FBMEIsRUFBRSxPQUFzQztJQUN0SSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGdCQUFPLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUZELGtEQUVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGdDQUFnQyxDQUFxQyxHQUEwQixFQUFFLE9BQXNDO0lBQ25KLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsZ0JBQU8sRUFBQyxFQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0YsQ0FBQztBQUZELDRFQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDIwIEVyaWsgRm9ydHVuZVxyXG4gKlxyXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XHJcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcclxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xyXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXHJcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xyXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4gKlxyXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcclxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICpcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxyXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcclxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXHJcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcclxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcclxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcclxuICogU09GVFdBUkUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUmVzdWx0LCBmYWlsLCBzdWNjZWVkIH0gZnJvbSAnLi9yZXN1bHQnO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciB0eXBlLWd1YXJkIGZ1bmN0aW9uIHRvIHJlcG9ydCB3aGV0aGVyIGEgc3BlY2lmaWVkIGtleSBpcyBwcmVzZW50IGluXHJcbiAqIGEgc3VwcGxpZWQgb2JqZWN0LlxyXG4gKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBpdGVtIC0gVGhlIG9iamVjdCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEByZXR1cm5zIFJldHVybnMgYHRydWVgIGlmIHRoZSBrZXkgaXMgcHJlc2VudCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0tleU9mPFQgZXh0ZW5kcyBvYmplY3Q+KGtleTogc3RyaW5nfG51bWJlcnxzeW1ib2wsIGl0ZW06IFQpOiBrZXkgaXMga2V5b2YgVCB7XHJcbiAgICByZXR1cm4gaXRlbS5oYXNPd25Qcm9wZXJ0eShrZXkpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkga2V5IGZyb20gYW4gYXJiaXRyYXJ5IG9iamVjdCxcclxuICogb3IgYSBkZWZhdWx0IHZhbHVlIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdC5cclxuICogQHBhcmFtIGtleSAtIFRoZSBrZXkgc3BlY2lmeWluZyB0aGUgcHJvcGVydHkgdG8gYmUgcmV0cmlldmVkLlxyXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBvYmplY3QgZnJvbSB3aGljaCB0aGUgcHJvcGVydHkgaXMgdG8gYmUgcmV0cmlldmVkLlxyXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gQW4gb3B0aW9uYWwgZGVmYXVsdCB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgcHJvcGVydHlcclxuICogaXMgbm90IHByZXNlbnQgKGRlZmF1bHQgYHVuZGVmaW5lZGApLlxyXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eSwgb3IgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlXHJcbiAqIHJlcXVlc3RlZCBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdC5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlT2ZQcm9wZXJ0eU9yRGVmYXVsdDxUIGV4dGVuZHMgb2JqZWN0PihcclxuICAgIGtleTogc3RyaW5nfG51bWJlcnxzeW1ib2wsXHJcbiAgICBpdGVtOiBULFxyXG4gICAgZGVmYXVsdFZhbHVlPzogdW5rbm93blxyXG4pOiB1bmtub3duIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBpc0tleU9mKGtleSwgaXRlbSkgPyBpdGVtW2tleV0gOiBkZWZhdWx0VmFsdWU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSB0eXBlIG9mIGEgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IGtleSBmcm9tIGFuIGFyYml0cmFyeSBvYmplY3QuXHJcbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHNwZWNpZnlpbmcgdGhlIHByb3BlcnR5IHRvIGJlIHRlc3RlZC5cclxuICogQHBhcmFtIGl0ZW0gLSBUaGUgb2JqZWN0IGZyb20gd2hpY2ggdGhlIHByb3BlcnR5IGlzIHRvIGJlIHRlc3RlZC5cclxuICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eSwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlXHJcbiAqIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBSZXR1cm5zIGAndW5kZWZpbmVkJ2AgKGEgc3RyaW5nKSBpZiB0aGUgcHJvcGVydHkgZXhpc3RzIGJ1dCBoYXMgdGhlIHZhbHVlXHJcbiAqIHVuZGVmaW5lZCBidXQgYHVuZGVmaW5lZGAgKHRoZSBsaXRlcmFsKSBpZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlT2ZQcm9wZXJ0eTxUIGV4dGVuZHMgb2JqZWN0PihcclxuICAgIGtleTogc3RyaW5nfG51bWJlcnxzeW1ib2wsXHJcbiAgICBpdGVtOiBUKTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdiaWdpbnQnIHwgJ2Jvb2xlYW4nIHwgJ3N5bWJvbCcgfCAndW5kZWZpbmVkJyB8ICd1bmRlZmluZWQnIHwgJ29iamVjdCcgfCAnZnVuY3Rpb24nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBpc0tleU9mKGtleSwgaXRlbSkgPyB0eXBlb2YgaXRlbVtrZXldIDogdW5kZWZpbmVkO1xyXG59XHJcblxyXG4vKipcclxuICogVHlwZSBmb3IgZmFjdG9yeSBtZXRob2RzIHdoaWNoIGNvbnZlcnQgYSBrZXktdmFsdWUgcGFpciB0byBhIG5ldyB1bmlxdWUgdmFsdWUuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbnR5cGUgS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAoa2V5OiBUSywgdGhpbmc6IFRTKSA9PiBSZXN1bHQ8VEQ+O1xyXG5cclxuLyoqXHJcbiAqIEFwcGxpZXMgYSBmYWN0b3J5IG1ldGhvZCB0byBjb252ZXJ0IGEgYFJlY29yZDxUSywgVFM+YCBpbnRvIGEgYE1hcDxUSywgVEQ+YC5cclxuICogQHBhcmFtIHNyYyAtIFRoZSBgUmVjb3JkYCB0byBiZSBjb252ZXJ0ZWQuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBtYXAgb24gc3VjY2Vzcywgb3Ige0BsaW5rIEZhaWx1cmV9IHdpdGggYVxyXG4gKiBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlY29yZFRvTWFwPFRTLCBURCwgVEsgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KHNyYzogUmVjb3JkPFRLLCBUUz4sIGZhY3Rvcnk6IEtleWVkVGhpbmdGYWN0b3J5PFRTLCBURCwgVEs+KTogUmVzdWx0PE1hcDxUSywgVEQ+PiB7XHJcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPFRLLCBURD4oKTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHNyYykge1xyXG4gICAgICAgIGlmIChzcmNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZXN1bHQgPSBmYWN0b3J5KGtleSwgc3JjW2tleV0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbVJlc3VsdC5pc1N1Y2Nlc3MoKSkge1xyXG4gICAgICAgICAgICAgICAgbWFwLnNldChrZXksIGl0ZW1SZXN1bHQudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7a2V5fTogJHtpdGVtUmVzdWx0Lm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VjY2VlZChtYXApO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYW4gb3B0aW9uYWwgYFJlY29yZDxUSywgVFM+YCBpbnRvIGEgYE1hcDxUSywgVEQ+YCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBzcmMgLSBUaGUgYFJlY29yZGAgdG8gYmUgY29udmVydGVkLCBvciB1bmRlZmluZWQuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBtYXAgaWYgY29udmVyc2lvbiBzdWNjZWVkcywgb3Ige0BsaW5rIFN1Y2Nlc3N9IHdpdGggYHVuZGVmaW5lZGBcclxuICogaWYgYHNyY2AgaXMgYHVuZGVmaW5lZGAuIFJldHVybnMge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsUmVjb3JkVG9NYXA8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oc3JjOiBSZWNvcmQ8VEssIFRTPnx1bmRlZmluZWQsIGZhY3Rvcnk6IEtleWVkVGhpbmdGYWN0b3J5PFRTLCBURCwgVEs+KTogUmVzdWx0PE1hcDxUSywgVEQ+fHVuZGVmaW5lZD4ge1xyXG4gICAgcmV0dXJuIChzcmMgPT09IHVuZGVmaW5lZCkgPyBzdWNjZWVkKHVuZGVmaW5lZCkgOiByZWNvcmRUb01hcChzcmMsIGZhY3RvcnkpO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYW4gb3B0aW9uYWwgYFJlY29yZDxUSywgVFM+YCBpbnRvIGEgYE1hcDxUSywgVEQ+YFxyXG4gKiBAcGFyYW0gc3JjIC0gVGhlIGBSZWNvcmRgIHRvIGJlIGNvbnZlcnRlZCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBtYXAgKGVtcHR5IGlmIGBzcmNgIGlzIGB1bmRlZmluZWRgKSBpZiBjb252ZXJzaW9uIHN1Y2NlZWRzLlxyXG4gKiBSZXR1cm5zIHtAbGluayBGYWlsdXJlfSB3aXRoIGEgbWVzc2FnZSBpZiBhbiBlcnJvciBvY2N1cnMuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbFJlY29yZFRvUG9zc2libHlFbXB0eU1hcDxUUywgVEQsIFRLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihzcmM6IFJlY29yZDxUSywgVFM+fHVuZGVmaW5lZCwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8TWFwPFRLLCBURD4+IHtcclxuICAgIHJldHVybiAoc3JjID09PSB1bmRlZmluZWQpID8gc3VjY2VlZChuZXcgTWFwPFRLLCBURD4oKSkgOiByZWNvcmRUb01hcChzcmMsIGZhY3RvcnkpO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYSBgTWFwPFRLLCBUUz5gIGludG8gYSBgUmVjb3JkPFRLLCBURD5gLlxyXG4gKiBAcGFyYW0gc3JjIC0gVGhlIGBNYXBgIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBgUmVjb3JkPFRLLCBURD5gIGlmIGNvbnZlcnNpb24gc3VjY2VlZHMsIG9yXHJcbiAqIHtAbGluayBGYWlsdXJlfSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9SZWNvcmQ8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oc3JjOiBNYXA8VEssIFRTPiwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8UmVjb3JkPFRLLCBURD4+IHtcclxuICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPFRLLCBURD4gPSB7fSBhcyBSZWNvcmQ8VEssIFREPjtcclxuICAgIGZvciAoY29uc3Qga3ZwIG9mIHNyYykge1xyXG4gICAgICAgIGlmIChrdnBbMV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtUmVzdWx0ID0gZmFjdG9yeShrdnBbMF0sIGt2cFsxXSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtUmVzdWx0LmlzU3VjY2VzcygpKSB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRba3ZwWzBdXSA9IGl0ZW1SZXN1bHQudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChgJHtrdnBbMF19OiAke2l0ZW1SZXN1bHQubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzdWNjZWVkKHJlY29yZCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBcHBsaWVzIGEgZmFjdG9yeSBtZXRob2QgdG8gY29udmVydCBhbiBvcHRpb25hbCBgTWFwPHN0cmluZywgVFM+YCBpbnRvIGEgYFJlY29yZDxzdHJpbmcsIFREPmAgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBzcmMgLSBUaGUgYE1hcGAgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyByZWNvcmQgaWYgY29udmVyc2lvbiBzdWNjZWVkcywgb3Ige0BsaW5rIFN1Y2Nlc3N9IHdpdGggYHVuZGVmaW5lZGAgaWZcclxuICogYHNyY2AgaXMgYHVuZGVmaW5lZGAuIFJldHVybnMge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsTWFwVG9SZWNvcmQ8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oc3JjOiBNYXA8VEssIFRTPnx1bmRlZmluZWQsIGZhY3Rvcnk6IEtleWVkVGhpbmdGYWN0b3J5PFRTLCBURCwgVEs+KTogUmVzdWx0PFJlY29yZDxUSywgVEQ+fHVuZGVmaW5lZD4ge1xyXG4gICAgcmV0dXJuIChzcmMgPT09IHVuZGVmaW5lZCkgPyBzdWNjZWVkKHVuZGVmaW5lZCkgOiBtYXBUb1JlY29yZChzcmMsIGZhY3RvcnkpO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYW4gb3B0aW9uYWwgYE1hcDxzdHJpbmcsIFRTPmAgaW50byBhIGBSZWNvcmQ8c3RyaW5nLCBURD5gXHJcbiAqIEBwYXJhbSBzcmMgLSBUaGUgYE1hcGAgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyByZWNvcmQgKGVtcHR5IGlmIGBzcmNgIGlzIGB1bmRlZmluZWRgKSBpZiBjb252ZXJzaW9uIHN1Y2NlZWRzLlxyXG4gKiBSZXR1cm5zIHtAbGluayBGYWlsdXJlfSB3aXRoIGEgbWVzc2FnZSBpZiBhbiBlcnJvciBvY2N1cnMuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbE1hcFRvUG9zc2libHlFbXB0eVJlY29yZDxUUywgVEQsIFRLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihzcmM6IE1hcDxUSywgVFM+fHVuZGVmaW5lZCwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8UmVjb3JkPFRLLCBURD4+IHtcclxuICAgIHJldHVybiAoc3JjID09PSB1bmRlZmluZWQpID8gc3VjY2VlZCh7fSBhcyBSZWNvcmQ8VEssIFREPikgOiBtYXBUb1JlY29yZChzcmMsIGZhY3RvcnkpO1xyXG59XHJcbiJdfQ==
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgscUNBQWlEO0FBRWpEOzs7Ozs7O0dBT0c7QUFDSCx3REFBd0Q7QUFDeEQsU0FBZ0IsT0FBTyxDQUFtQixHQUF5QixFQUFFLElBQU87SUFDeEUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFGRCwwQkFFQztBQUdEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixJQUFJLENBQXNDLElBQU8sRUFBRSxPQUFZO0lBQzNFLE1BQU0sSUFBSSxHQUF3QixFQUFFLENBQUM7SUFDckMsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7UUFDdkIsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjtLQUNKO0lBQ0QsT0FBTyxJQUFrQixDQUFDO0FBQzlCLENBQUM7QUFSRCxvQkFRQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsSUFBSSxDQUFzQyxJQUFPLEVBQUUsT0FBWTtJQUMzRSxNQUFNLElBQUksR0FBd0IsRUFBRSxDQUFDO0lBQ3JDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFpQixDQUFDLENBQUMsRUFBRTtRQUM3RixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBZ0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RDtJQUVELE9BQU8sSUFBa0IsQ0FBQztBQUM5QixDQUFDO0FBUEQs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LElBQUEsZ0JBQU8sRUFBQyxNQUFNLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBZEQsa0NBY0M7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQXFDLEdBQTBCLEVBQUUsT0FBc0M7SUFDdEksT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQSxnQkFBTyxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hGLENBQUM7QUFGRCxrREFFQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixnQ0FBZ0MsQ0FBcUMsR0FBMEIsRUFBRSxPQUFzQztJQUNuSixPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGdCQUFPLEVBQUMsRUFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNGLENBQUM7QUFGRCw0RUFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAyMCBFcmlrIEZvcnR1bmVcclxuICpcclxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxyXG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXHJcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcclxuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxyXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcclxuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcclxuICpcclxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXHJcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXHJcbiAqXHJcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcclxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXHJcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxyXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXHJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXHJcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXHJcbiAqIFNPRlRXQVJFLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFJlc3VsdCwgZmFpbCwgc3VjY2VlZCB9IGZyb20gJy4vcmVzdWx0JztcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgdHlwZS1ndWFyZCBmdW5jdGlvbiB0byByZXBvcnQgd2hldGhlciBhIHNwZWNpZmllZCBrZXkgaXMgcHJlc2VudCBpblxyXG4gKiBhIHN1cHBsaWVkIG9iamVjdC5cclxuICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBvYmplY3QgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcmV0dXJucyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUga2V5IGlzIHByZXNlbnQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xyXG5leHBvcnQgZnVuY3Rpb24gaXNLZXlPZjxUIGV4dGVuZHMgb2JqZWN0PihrZXk6IHN0cmluZ3xudW1iZXJ8c3ltYm9sLCBpdGVtOiBUKToga2V5IGlzIGtleW9mIFQge1xyXG4gICAgcmV0dXJuIGl0ZW0uaGFzT3duUHJvcGVydHkoa2V5KTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBTaW1wbGUgaW1wbGljaXQgcGljayBmdW5jdGlvbiwgd2hpY2ggcGlja3MgYSBzZXQgb2YgcHJvcGVydGllcyBmcm9tIGEgc3VwcGxpZWRcclxuICogb2JqZWN0LiAgSWdub3JlcyBwaWNrZWQgcHJvcGVydGllcyB0aGF0IGRvIG5vdCBleGlzdCByZWdhcmRsZXNzIG9mIHR5cGUgc2lnbmF0dXJlLlxyXG4gKiBAcGFyYW0gZnJvbSAtIFRoZSBvYmplY3QgZnJvbSB3aGljaCBrZXlzIGFyZSB0byBiZSBwaWNrZWQuXHJcbiAqIEBwYXJhbSBpbmNsdWRlIC0gVGhlIGtleXMgb2YgdGhlIHByb3BlcnRpZXMgdG8gYmUgcGlja2VkIGZyb20gYGZyb21gLlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIHByb3BlcnRpZXMgZnJvbSBgZnJvbWAsIHdoZXJlIHByZXNlbnQuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwaWNrPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihmcm9tOiBULCBpbmNsdWRlOiBLW10pOiBQaWNrPFQsIEs+IHtcclxuICAgIGNvbnN0IHJ0cm46IFBhcnRpYWw8UGljazxULCBLPj4gPSB7fTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIGluY2x1ZGUpIHtcclxuICAgICAgICBpZiAoa2V5IGluIGZyb20pIHtcclxuICAgICAgICAgICAgcnRybltrZXldID0gZnJvbVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBydHJuIGFzIFBpY2s8VCwgSz47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTaW1wbGUgaW1wbGljaXQgb21pdCBmdW5jdGlvbiwgd2hpY2ggcGlja3MgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIGZyb20gYSBzdXBwbGllZFxyXG4gKiBvYmplY3QgZXhjZXB0IHRob3NlIHNwZWNpZmllZCBmb3IgZXhjbHVzaW9uLlxyXG4gKiBAcGFyYW0gZnJvbSAtIFRoZSBvYmplY3QgZnJvbSB3aGljaCBrZXlzIGFyZSB0byBiZSBwaWNrZWQuXHJcbiAqIEBwYXJhbSBleGNsdWRlIC0gVGhlIGtleXMgb2YgdGhlIHByb3BlcnRpZXMgdG8gYmUgZXhjbHVkZWQgZnJvbSB0aGUgcmV0dXJuZWQgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgY29udGFpbmluZyBhbGwgb2YgdGhlIHByb3BlcnRpZXMgZnJvbSBgZnJvbWAgdGhhdCB3ZXJlIG5vdFxyXG4gKiBleHBsaWNpdGx5IGV4Y2x1ZGVkLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gb21pdDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oZnJvbTogVCwgZXhjbHVkZTogS1tdKTogT21pdDxULCBLPiB7XHJcbiAgICBjb25zdCBydHJuOiBQYXJ0aWFsPE9taXQ8VCwgSz4+ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIE9iamVjdC5lbnRyaWVzKGZyb20pLmZpbHRlcigoZSkgPT4gIWV4Y2x1ZGUuaW5jbHVkZXMoZVswXSBhcyBrZXlvZiBUIGFzIEspKSkge1xyXG4gICAgICAgIHJ0cm5bZW50cnlbMF0gYXMgdW5rbm93biBhcyBrZXlvZiBPbWl0PFQsIEs+XSA9IGVudHJ5WzFdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBydHJuIGFzIE9taXQ8VCwgSz47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IHNwZWNpZmllZCBieSBrZXkgZnJvbSBhbiBhcmJpdHJhcnkgb2JqZWN0LFxyXG4gKiBvciBhIGRlZmF1bHQgdmFsdWUgaWYgdGhlIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0LlxyXG4gKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBzcGVjaWZ5aW5nIHRoZSBwcm9wZXJ0eSB0byBiZSByZXRyaWV2ZWQuXHJcbiAqIEBwYXJhbSBpdGVtIC0gVGhlIG9iamVjdCBmcm9tIHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyB0byBiZSByZXRyaWV2ZWQuXHJcbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBBbiBvcHRpb25hbCBkZWZhdWx0IHZhbHVlIHRvIGJlIHJldHVybmVkIGlmIHRoZSBwcm9wZXJ0eVxyXG4gKiBpcyBub3QgcHJlc2VudCAoZGVmYXVsdCBgdW5kZWZpbmVkYCkuXHJcbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgcmVxdWVzdGVkIHByb3BlcnR5LCBvciB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGVcclxuICogcmVxdWVzdGVkIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0LlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWVPZlByb3BlcnR5T3JEZWZhdWx0PFQgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAga2V5OiBzdHJpbmd8bnVtYmVyfHN5bWJvbCxcclxuICAgIGl0ZW06IFQsXHJcbiAgICBkZWZhdWx0VmFsdWU/OiB1bmtub3duXHJcbik6IHVua25vd24gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGlzS2V5T2Yoa2V5LCBpdGVtKSA/IGl0ZW1ba2V5XSA6IGRlZmF1bHRWYWx1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIHR5cGUgb2YgYSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkga2V5IGZyb20gYW4gYXJiaXRyYXJ5IG9iamVjdC5cclxuICogQHBhcmFtIGtleSAtIFRoZSBrZXkgc3BlY2lmeWluZyB0aGUgcHJvcGVydHkgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBvYmplY3QgZnJvbSB3aGljaCB0aGUgcHJvcGVydHkgaXMgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgcmVxdWVzdGVkIHByb3BlcnR5LCBvciBgdW5kZWZpbmVkYCBpZiB0aGVcclxuICogcHJvcGVydHkgZG9lcyBub3QgZXhpc3QuXHJcbiAqIEBleGFtcGxlXHJcbiAqIFJldHVybnMgYCd1bmRlZmluZWQnYCAoYSBzdHJpbmcpIGlmIHRoZSBwcm9wZXJ0eSBleGlzdHMgYnV0IGhhcyB0aGUgdmFsdWVcclxuICogdW5kZWZpbmVkIGJ1dCBgdW5kZWZpbmVkYCAodGhlIGxpdGVyYWwpIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdC5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPZlByb3BlcnR5PFQgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAga2V5OiBzdHJpbmd8bnVtYmVyfHN5bWJvbCxcclxuICAgIGl0ZW06IFQpOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2JpZ2ludCcgfCAnYm9vbGVhbicgfCAnc3ltYm9sJyB8ICd1bmRlZmluZWQnIHwgJ3VuZGVmaW5lZCcgfCAnb2JqZWN0JyB8ICdmdW5jdGlvbicgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGlzS2V5T2Yoa2V5LCBpdGVtKSA/IHR5cGVvZiBpdGVtW2tleV0gOiB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUeXBlIGZvciBmYWN0b3J5IG1ldGhvZHMgd2hpY2ggY29udmVydCBhIGtleS12YWx1ZSBwYWlyIHRvIGEgbmV3IHVuaXF1ZSB2YWx1ZS5cclxuICogQHB1YmxpY1xyXG4gKi9cclxudHlwZSBLZXllZFRoaW5nRmFjdG9yeTxUUywgVEQsIFRLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IChrZXk6IFRLLCB0aGluZzogVFMpID0+IFJlc3VsdDxURD47XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYSBgUmVjb3JkPFRLLCBUUz5gIGludG8gYSBgTWFwPFRLLCBURD5gLlxyXG4gKiBAcGFyYW0gc3JjIC0gVGhlIGBSZWNvcmRgIHRvIGJlIGNvbnZlcnRlZC5cclxuICogQHBhcmFtIGZhY3RvcnkgLSBUaGUgZmFjdG9yeSBtZXRob2QgdXNlZCB0byBjb252ZXJ0IGVsZW1lbnRzLlxyXG4gKiBAcmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCB0aGUgcmVzdWx0aW5nIG1hcCBvbiBzdWNjZXNzLCBvciB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhXHJcbiAqIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkVG9NYXA8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oc3JjOiBSZWNvcmQ8VEssIFRTPiwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8TWFwPFRLLCBURD4+IHtcclxuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8VEssIFREPigpO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gc3JjKSB7XHJcbiAgICAgICAgaWYgKHNyY1trZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbVJlc3VsdCA9IGZhY3Rvcnkoa2V5LCBzcmNba2V5XSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtUmVzdWx0LmlzU3VjY2VzcygpKSB7XHJcbiAgICAgICAgICAgICAgICBtYXAuc2V0KGtleSwgaXRlbVJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChgJHtrZXl9OiAke2l0ZW1SZXN1bHQubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzdWNjZWVkKG1hcCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBcHBsaWVzIGEgZmFjdG9yeSBtZXRob2QgdG8gY29udmVydCBhbiBvcHRpb25hbCBgUmVjb3JkPFRLLCBUUz5gIGludG8gYSBgTWFwPFRLLCBURD5gLCBvciBgdW5kZWZpbmVkYC5cclxuICogQHBhcmFtIHNyYyAtIFRoZSBgUmVjb3JkYCB0byBiZSBjb252ZXJ0ZWQsIG9yIHVuZGVmaW5lZC5cclxuICogQHBhcmFtIGZhY3RvcnkgLSBUaGUgZmFjdG9yeSBtZXRob2QgdXNlZCB0byBjb252ZXJ0IGVsZW1lbnRzLlxyXG4gKiBAcmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCB0aGUgcmVzdWx0aW5nIG1hcCBpZiBjb252ZXJzaW9uIHN1Y2NlZWRzLCBvciB7QGxpbmsgU3VjY2Vzc30gd2l0aCBgdW5kZWZpbmVkYFxyXG4gKiBpZiBgc3JjYCBpcyBgdW5kZWZpbmVkYC4gUmV0dXJucyB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gb3B0aW9uYWxSZWNvcmRUb01hcDxUUywgVEQsIFRLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihzcmM6IFJlY29yZDxUSywgVFM+fHVuZGVmaW5lZCwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8TWFwPFRLLCBURD58dW5kZWZpbmVkPiB7XHJcbiAgICByZXR1cm4gKHNyYyA9PT0gdW5kZWZpbmVkKSA/IHN1Y2NlZWQodW5kZWZpbmVkKSA6IHJlY29yZFRvTWFwKHNyYywgZmFjdG9yeSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBcHBsaWVzIGEgZmFjdG9yeSBtZXRob2QgdG8gY29udmVydCBhbiBvcHRpb25hbCBgUmVjb3JkPFRLLCBUUz5gIGludG8gYSBgTWFwPFRLLCBURD5gXHJcbiAqIEBwYXJhbSBzcmMgLSBUaGUgYFJlY29yZGAgdG8gYmUgY29udmVydGVkLCBvciBgdW5kZWZpbmVkYC5cclxuICogQHBhcmFtIGZhY3RvcnkgLSBUaGUgZmFjdG9yeSBtZXRob2QgdXNlZCB0byBjb252ZXJ0IGVsZW1lbnRzLlxyXG4gKiBAcmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCB0aGUgcmVzdWx0aW5nIG1hcCAoZW1wdHkgaWYgYHNyY2AgaXMgYHVuZGVmaW5lZGApIGlmIGNvbnZlcnNpb24gc3VjY2VlZHMuXHJcbiAqIFJldHVybnMge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsUmVjb3JkVG9Qb3NzaWJseUVtcHR5TWFwPFRTLCBURCwgVEsgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KHNyYzogUmVjb3JkPFRLLCBUUz58dW5kZWZpbmVkLCBmYWN0b3J5OiBLZXllZFRoaW5nRmFjdG9yeTxUUywgVEQsIFRLPik6IFJlc3VsdDxNYXA8VEssIFREPj4ge1xyXG4gICAgcmV0dXJuIChzcmMgPT09IHVuZGVmaW5lZCkgPyBzdWNjZWVkKG5ldyBNYXA8VEssIFREPigpKSA6IHJlY29yZFRvTWFwKHNyYywgZmFjdG9yeSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBcHBsaWVzIGEgZmFjdG9yeSBtZXRob2QgdG8gY29udmVydCBhIGBNYXA8VEssIFRTPmAgaW50byBhIGBSZWNvcmQ8VEssIFREPmAuXHJcbiAqIEBwYXJhbSBzcmMgLSBUaGUgYE1hcGAgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZC5cclxuICogQHBhcmFtIGZhY3RvcnkgLSBUaGUgZmFjdG9yeSBtZXRob2QgdXNlZCB0byBjb252ZXJ0IGVsZW1lbnRzLlxyXG4gKiBAcmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCB0aGUgcmVzdWx0aW5nIGBSZWNvcmQ8VEssIFREPmAgaWYgY29udmVyc2lvbiBzdWNjZWVkcywgb3JcclxuICoge0BsaW5rIEZhaWx1cmV9IHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpZiBhbiBlcnJvciBvY2N1cnMuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1JlY29yZDxUUywgVEQsIFRLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihzcmM6IE1hcDxUSywgVFM+LCBmYWN0b3J5OiBLZXllZFRoaW5nRmFjdG9yeTxUUywgVEQsIFRLPik6IFJlc3VsdDxSZWNvcmQ8VEssIFREPj4ge1xyXG4gICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8VEssIFREPiA9IHt9IGFzIFJlY29yZDxUSywgVEQ+O1xyXG4gICAgZm9yIChjb25zdCBrdnAgb2Ygc3JjKSB7XHJcbiAgICAgICAgaWYgKGt2cFsxXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZXN1bHQgPSBmYWN0b3J5KGt2cFswXSwga3ZwWzFdKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1SZXN1bHQuaXNTdWNjZXNzKCkpIHtcclxuICAgICAgICAgICAgICAgIHJlY29yZFtrdnBbMF1dID0gaXRlbVJlc3VsdC52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKGAke2t2cFswXX06ICR7aXRlbVJlc3VsdC5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1Y2NlZWQocmVjb3JkKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFwcGxpZXMgYSBmYWN0b3J5IG1ldGhvZCB0byBjb252ZXJ0IGFuIG9wdGlvbmFsIGBNYXA8c3RyaW5nLCBUUz5gIGludG8gYSBgUmVjb3JkPHN0cmluZywgVEQ+YCBvciBgdW5kZWZpbmVkYC5cclxuICogQHBhcmFtIHNyYyAtIFRoZSBgTWFwYCBvYmplY3QgdG8gYmUgY29udmVydGVkLCBvciBgdW5kZWZpbmVkYC5cclxuICogQHBhcmFtIGZhY3RvcnkgLSBUaGUgZmFjdG9yeSBtZXRob2QgdXNlZCB0byBjb252ZXJ0IGVsZW1lbnRzLlxyXG4gKiBAcmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCB0aGUgcmVzdWx0aW5nIHJlY29yZCBpZiBjb252ZXJzaW9uIHN1Y2NlZWRzLCBvciB7QGxpbmsgU3VjY2Vzc30gd2l0aCBgdW5kZWZpbmVkYCBpZlxyXG4gKiBgc3JjYCBpcyBgdW5kZWZpbmVkYC4gUmV0dXJucyB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gb3B0aW9uYWxNYXBUb1JlY29yZDxUUywgVEQsIFRLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihzcmM6IE1hcDxUSywgVFM+fHVuZGVmaW5lZCwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8UmVjb3JkPFRLLCBURD58dW5kZWZpbmVkPiB7XHJcbiAgICByZXR1cm4gKHNyYyA9PT0gdW5kZWZpbmVkKSA/IHN1Y2NlZWQodW5kZWZpbmVkKSA6IG1hcFRvUmVjb3JkKHNyYywgZmFjdG9yeSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBcHBsaWVzIGEgZmFjdG9yeSBtZXRob2QgdG8gY29udmVydCBhbiBvcHRpb25hbCBgTWFwPHN0cmluZywgVFM+YCBpbnRvIGEgYFJlY29yZDxzdHJpbmcsIFREPmBcclxuICogQHBhcmFtIHNyYyAtIFRoZSBgTWFwYCBvYmplY3QgdG8gYmUgY29udmVydGVkLCBvciBgdW5kZWZpbmVkYC5cclxuICogQHBhcmFtIGZhY3RvcnkgLSBUaGUgZmFjdG9yeSBtZXRob2QgdXNlZCB0byBjb252ZXJ0IGVsZW1lbnRzLlxyXG4gKiBAcmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCB0aGUgcmVzdWx0aW5nIHJlY29yZCAoZW1wdHkgaWYgYHNyY2AgaXMgYHVuZGVmaW5lZGApIGlmIGNvbnZlcnNpb24gc3VjY2VlZHMuXHJcbiAqIFJldHVybnMge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsTWFwVG9Qb3NzaWJseUVtcHR5UmVjb3JkPFRTLCBURCwgVEsgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KHNyYzogTWFwPFRLLCBUUz58dW5kZWZpbmVkLCBmYWN0b3J5OiBLZXllZFRoaW5nRmFjdG9yeTxUUywgVEQsIFRLPik6IFJlc3VsdDxSZWNvcmQ8VEssIFREPj4ge1xyXG4gICAgcmV0dXJuIChzcmMgPT09IHVuZGVmaW5lZCkgPyBzdWNjZWVkKHt9IGFzIFJlY29yZDxUSywgVEQ+KSA6IG1hcFRvUmVjb3JkKHNyYywgZmFjdG9yeSk7XHJcbn1cclxuIl19
@@ -101,7 +101,7 @@ class GenericValidator {
101
101
  if (typeof constraintResult === 'boolean') {
102
102
  return constraintResult
103
103
  ? true
104
- : (0, result_1.fail)(`Value ${JSON.stringify(from)} does not meet constraint.`);
104
+ : (0, result_1.fail)(`Invalid value "${JSON.stringify(from)}": does not meet constraint.`);
105
105
  }
106
106
  return constraintResult;
107
107
  }
@@ -135,4 +135,4 @@ class GenericValidator {
135
135
  }
136
136
  }
137
137
  exports.GenericValidator = GenericValidator;
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpY1ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL2dlbmVyaWNWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBR0gscUNBQTREO0FBQzVELHNDQUEyRDtBQXNCM0Q7OztHQUdHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFlekI7Ozs7T0FJRztJQUNILFlBQW1CLE1BQXlEOztRQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDckQ7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFBLE1BQU0sQ0FBQyxPQUFPLG1DQUFJLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksd0JBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsSUFBYSxFQUFFLE9BQVk7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksT0FBTyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzdCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLGdCQUFPLEVBQUMsSUFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsYUFBSSxFQUFJLGVBQWUsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0JBQWdCLENBQUMsSUFBYSxFQUFFLE9BQVk7UUFDL0MsT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQSxnQkFBTyxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBYSxFQUFFLE9BQVk7UUFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRO1FBQ1gsT0FBTyxJQUFJLGdCQUFnQixDQUFDO1lBQ3hCLFNBQVMsRUFBRSxDQUFDLElBQWEsRUFBRSxPQUFZLEVBQUUsRUFBRTtnQkFDdkMsT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7dUJBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDO1lBQ0QsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtTQUMvQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjLENBQUMsVUFBeUIsRUFBRSxLQUF1QjtRQUNwRSxLQUFLLEdBQUcsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDdEMsT0FBTyxJQUFJLGdCQUFnQixDQUFDO1lBQ3hCLFNBQVMsRUFBRSxDQUFDLElBQWEsRUFBRSxPQUFZLEVBQXdCLEVBQUU7Z0JBQzdELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsSUFBUyxDQUFDLENBQUM7b0JBQy9DLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7d0JBQ3ZDLE9BQU8sZ0JBQWdCOzRCQUNuQixDQUFDLENBQUMsSUFBSTs0QkFDTixDQUFDLENBQUMsSUFBQSxhQUFJLEVBQUMsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO3FCQUN6RTtvQkFDRCxPQUFPLGdCQUFnQixDQUFDO2lCQUMzQjtnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNqQixDQUFDO1lBQ0QsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7U0FDbkMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFtQixLQUFRO1FBQ3ZDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLElBQUksQ0FBQyxLQUFLLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQztTQUNyRjtRQUVELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBa0I7WUFDekMsU0FBUyxFQUFFLENBQUMsSUFBYSxFQUFFLE9BQVksRUFBRSxFQUFFO2dCQUN2QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQW1DLENBQUM7WUFDM0YsQ0FBQztZQUNELE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRTtTQUNwQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxRQUFRLENBQUMsZUFBb0I7UUFDbkMsT0FBTyxlQUFlLGFBQWYsZUFBZSxjQUFmLGVBQWUsR0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztJQUMzRCxDQUFDO0NBQ0o7QUFoSUQsNENBZ0lDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMSBFcmlrIEZvcnR1bmVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IENvbnN0cmFpbnQsIFZhbGlkYXRvciwgVmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gJy4vdmFsaWRhdG9yJztcbmltcG9ydCB7IENvbnN0cmFpbnRUcmFpdCwgVmFsaWRhdG9yVHJhaXRzIH0gZnJvbSAnLi90cmFpdHMnO1xuaW1wb3J0IHsgRmFpbHVyZSwgUmVzdWx0LCBmYWlsLCBzdWNjZWVkIH0gZnJvbSAnLi4vcmVzdWx0JztcblxuaW1wb3J0IHsgQnJhbmQgfSBmcm9tICcuLi9icmFuZCc7XG5cbi8qKlxuICogVHlwZSBmb3IgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uLCB3aGljaCB2YWxpZGF0ZXMgdGhhdCBhIHN1cHBsaWVkIGB1bmtub3duYFxuICogdmFsdWUgaXMgYSB2YWxpZCB2YWx1ZSBvZiB0eXBlIGA8VD5gLCBwb3NzaWJseSBhcyBpbmZsdWVuY2VkIGJ5XG4gKiBhbiBvcHRpb25hbGx5LXN1cHBsaWVkIHZhbGlkYXRpb24gY29udGV4dCBvZiB0eXBlIGA8VEM+YC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdG9yRnVuYzxULCBUQz4gPSAoZnJvbTogdW5rbm93biwgY29udGV4dD86IFRDKSA9PiBib29sZWFuIHwgRmFpbHVyZTxUPjtcblxuLyoqXG4gKiBPcHRpb25zIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHtAbGluayBWYWxpZGF0aW9uLkJhc2UuR2VuZXJpY1ZhbGlkYXRvciB8IEdlbmVyaWNWYWxpZGF0b3J9LlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyaWNWYWxpZGF0b3JDb25zdHJ1Y3RvclBhcmFtczxULCBUQz4ge1xuICAgIG9wdGlvbnM/OiBWYWxpZGF0b3JPcHRpb25zPFRDPixcbiAgICB0cmFpdHM/OiBQYXJ0aWFsPFZhbGlkYXRvclRyYWl0cz4sXG4gICAgdmFsaWRhdG9yPzogVmFsaWRhdG9yRnVuYzxULCBUQz5cbn1cblxuLyoqXG4gKiBHZW5lcmljIGJhc2UgaW1wbGVtZW50YXRpb24gZm9yIGFuIGluLXBsYWNlIHtAbGluayBWYWxpZGF0aW9uLlZhbGlkYXRvciB8IFZhbGlkYXRvcn0uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljVmFsaWRhdG9yPFQsIFRDID0gdW5kZWZpbmVkPiBpbXBsZW1lbnRzIFZhbGlkYXRvcjxULCBUQz4ge1xuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBWYWxpZGF0aW9uLlZhbGlkYXRvci50cmFpdHN9XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHRyYWl0czogVmFsaWRhdG9yVHJhaXRzO1xuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF92YWxpZGF0b3I6IFZhbGlkYXRvckZ1bmM8VCwgVEM+O1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfb3B0aW9uczogVmFsaWRhdG9yT3B0aW9uczxUQz47XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAbGluayBWYWxpZGF0aW9uLkJhc2UuR2VuZXJpY1ZhbGlkYXRvciB8IEdlbmVyaWNWYWxpZGF0b3I8VD59LlxuICAgICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFZhbGlkYXRpb24uQmFzZS5HZW5lcmljVmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXMgfCBjb25zdHJ1Y3RvciBwYXJhbXN9XG4gICAgICogdXNlZCB0byBjb25maWd1cmUgdmFsaWRhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQYXJ0aWFsPEdlbmVyaWNWYWxpZGF0b3JDb25zdHJ1Y3RvclBhcmFtczxULCBUQz4+KSB7XG4gICAgICAgIGlmICghcGFyYW1zLnZhbGlkYXRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2YWxpZGF0b3IgZnVuY3Rpb24gc3VwcGxpZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWxpZGF0b3IgPSBwYXJhbXMudmFsaWRhdG9yO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gcGFyYW1zLm9wdGlvbnMgPz8ge307XG4gICAgICAgIHRoaXMudHJhaXRzID0gbmV3IFZhbGlkYXRvclRyYWl0cyhwYXJhbXMudHJhaXRzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgVmFsaWRhdGlvbi5WYWxpZGF0b3IuaXNPcHRpb25hbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzT3B0aW9uYWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWl0cy5pc09wdGlvbmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBWYWxpZGF0aW9uLlZhbGlkYXRvci5icmFuZH1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGJyYW5kKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWl0cy5icmFuZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgVmFsaWRhdGlvbi5WYWxpZGF0b3IudmFsaWRhdGV9XG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlKGZyb206IHVua25vd24sIGNvbnRleHQ/OiBUQyk6IFJlc3VsdDxUPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3ZhbGlkYXRvcihmcm9tLCB0aGlzLl9jb250ZXh0KGNvbnRleHQpKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHN1Y2NlZWQoZnJvbSBhcyBUKSA6IGZhaWw8VD4oJ0ludmFsaWQgdmFsdWUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBWYWxpZGF0aW9uLlZhbGlkYXRvci52YWxpZGF0ZU9wdGlvbmFsfVxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZU9wdGlvbmFsKGZyb206IHVua25vd24sIGNvbnRleHQ/OiBUQyk6IFJlc3VsdDxUIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiAoZnJvbSA9PT0gdW5kZWZpbmVkKSA/IHN1Y2NlZWQodW5kZWZpbmVkKSA6IHRoaXMudmFsaWRhdGUoZnJvbSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIFZhbGlkYXRpb24uVmFsaWRhdG9yLmd1YXJkfVxuICAgICAqL1xuICAgIHB1YmxpYyBndWFyZChmcm9tOiB1bmtub3duLCBjb250ZXh0PzogVEMpOiBmcm9tIGlzIFQge1xuICAgICAgICByZXR1cm4gKHRoaXMuX3ZhbGlkYXRvcihmcm9tLCB0aGlzLl9jb250ZXh0KGNvbnRleHQpKSA9PT0gdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIFZhbGlkYXRpb24uVmFsaWRhdG9yLm9wdGlvbmFsfVxuICAgICAqL1xuICAgIHB1YmxpYyBvcHRpb25hbCgpOiBWYWxpZGF0b3I8VCB8IHVuZGVmaW5lZCwgVEM+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBHZW5lcmljVmFsaWRhdG9yKHtcbiAgICAgICAgICAgIHZhbGlkYXRvcjogKGZyb206IHVua25vd24sIGNvbnRleHQ/OiBUQykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoZnJvbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLl92YWxpZGF0b3IoZnJvbSwgdGhpcy5fY29udGV4dChjb250ZXh0KSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJhaXRzOiB7IGlzT3B0aW9uYWw6IHRydWUgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIFZhbGlkYXRpb24uVmFsaWRhdG9yLndpdGhDb25zdHJhaW50fVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29uc3RyYWludChjb25zdHJhaW50OiBDb25zdHJhaW50PFQ+LCB0cmFpdD86IENvbnN0cmFpbnRUcmFpdCk6IFZhbGlkYXRvcjxULCBUQz4ge1xuICAgICAgICB0cmFpdCA9IHRyYWl0ID8/IHsgdHlwZTogJ2Z1bmN0aW9uJyB9O1xuICAgICAgICByZXR1cm4gbmV3IEdlbmVyaWNWYWxpZGF0b3Ioe1xuICAgICAgICAgICAgdmFsaWRhdG9yOiAoZnJvbTogdW5rbm93biwgY29udGV4dD86IFRDKTogYm9vbGVhbiB8IEZhaWx1cmU8VD4gPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0b3IoZnJvbSwgdGhpcy5fY29udGV4dChjb250ZXh0KSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uc3RyYWludFJlc3VsdCA9IGNvbnN0cmFpbnQoZnJvbSBhcyBUKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zdHJhaW50UmVzdWx0ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50UmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWlsKGBWYWx1ZSAke0pTT04uc3RyaW5naWZ5KGZyb20pfSBkb2VzIG5vdCBtZWV0IGNvbnN0cmFpbnQuYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnRSZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cmFpdHM6IHsgY29uc3RyYWludHM6IFt0cmFpdF0gfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIFZhbGlkYXRpb24uVmFsaWRhdG9yLmJyYW5kfVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQnJhbmQ8QiBleHRlbmRzIHN0cmluZz4oYnJhbmQ6IEIpOiBWYWxpZGF0b3I8QnJhbmQ8VCwgQj4sIFRDPiB7XG4gICAgICAgIGlmICh0aGlzLmJyYW5kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXBsYWNlIGV4aXN0aW5nIGJyYW5kIFwiJHt0aGlzLmJyYW5kfVwiIHdpdGggXCIke2JyYW5kfVwiLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBHZW5lcmljVmFsaWRhdG9yPEJyYW5kPFQsIEI+LCBUQz4oe1xuICAgICAgICAgICAgdmFsaWRhdG9yOiAoZnJvbTogdW5rbm93biwgY29udGV4dD86IFRDKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvcihmcm9tLCB0aGlzLl9jb250ZXh0KGNvbnRleHQpKSBhcyBib29sZWFuIHwgRmFpbHVyZTxCcmFuZDxULCBCPj47XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJhaXRzOiB7IGJyYW5kIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBkZWZhdWx0IG9yIGV4cGxpY2l0IGNvbnRleHQuXG4gICAgICogQHBhcmFtIGV4cGxpY2l0Q29udGV4dCAtIE9wdGlvbmFsIGV4cGxpY2l0IGNvbnRleHQuXG4gICAgICogQHJldHVybnMgVGhlIGFwcHJvcHJpYXRlIGNvbnRleHQgdG8gdXNlLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfY29udGV4dChleHBsaWNpdENvbnRleHQ/OiBUQyk6IFRDIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGV4cGxpY2l0Q29udGV4dCA/PyB0aGlzLl9vcHRpb25zLmRlZmF1bHRDb250ZXh0O1xuICAgIH1cbn1cbiJdfQ==
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpY1ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL2dlbmVyaWNWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBR0gscUNBQTREO0FBQzVELHNDQUEyRDtBQXNCM0Q7OztHQUdHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFlekI7Ozs7T0FJRztJQUNILFlBQW1CLE1BQXlEOztRQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDckQ7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFBLE1BQU0sQ0FBQyxPQUFPLG1DQUFJLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksd0JBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsSUFBYSxFQUFFLE9BQVk7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksT0FBTyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzdCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLGdCQUFPLEVBQUMsSUFB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QUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO0lBQzNELENBQUM7Q0FDSjtBQWhJRCw0Q0FnSUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIxIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQ29uc3RyYWludCwgVmFsaWRhdG9yLCBWYWxpZGF0b3JPcHRpb25zIH0gZnJvbSAnLi92YWxpZGF0b3InO1xuaW1wb3J0IHsgQ29uc3RyYWludFRyYWl0LCBWYWxpZGF0b3JUcmFpdHMgfSBmcm9tICcuL3RyYWl0cyc7XG5pbXBvcnQgeyBGYWlsdXJlLCBSZXN1bHQsIGZhaWwsIHN1Y2NlZWQgfSBmcm9tICcuLi9yZXN1bHQnO1xuXG5pbXBvcnQgeyBCcmFuZCB9IGZyb20gJy4uL2JyYW5kJztcblxuLyoqXG4gKiBUeXBlIGZvciBhIHZhbGlkYXRpb24gZnVuY3Rpb24sIHdoaWNoIHZhbGlkYXRlcyB0aGF0IGEgc3VwcGxpZWQgYHVua25vd25gXG4gKiB2YWx1ZSBpcyBhIHZhbGlkIHZhbHVlIG9mIHR5cGUgYDxUPmAsIHBvc3NpYmx5IGFzIGluZmx1ZW5jZWQgYnlcbiAqIGFuIG9wdGlvbmFsbHktc3VwcGxpZWQgdmFsaWRhdGlvbiBjb250ZXh0IG9mIHR5cGUgYDxUQz5gLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBWYWxpZGF0b3JGdW5jPFQsIFRDPiA9IChmcm9tOiB1bmtub3duLCBjb250ZXh0PzogVEMpID0+IGJvb2xlYW4gfCBGYWlsdXJlPFQ+O1xuXG4vKipcbiAqIE9wdGlvbnMgdXNlZCB0byBpbml0aWFsaXplIGEge0BsaW5rIFZhbGlkYXRpb24uQmFzZS5HZW5lcmljVmFsaWRhdG9yIHwgR2VuZXJpY1ZhbGlkYXRvcn0uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY1ZhbGlkYXRvckNvbnN0cnVjdG9yUGFyYW1zPFQsIFRDPiB7XG4gICAgb3B0aW9ucz86IFZhbGlkYXRvck9wdGlvbnM8VEM+LFxuICAgIHRyYWl0cz86IFBhcnRpYWw8VmFsaWRhdG9yVHJhaXRzPixcbiAgICB2YWxpZGF0b3I/OiBWYWxpZGF0b3JGdW5jPFQsIFRDPlxufVxuXG4vKipcbiAqIEdlbmVyaWMgYmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgYW4gaW4tcGxhY2Uge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yIHwgVmFsaWRhdG9yfS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNWYWxpZGF0b3I8VCwgVEMgPSB1bmRlZmluZWQ+IGltcGxlbWVudHMgVmFsaWRhdG9yPFQsIFRDPiB7XG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIFZhbGlkYXRpb24uVmFsaWRhdG9yLnRyYWl0c31cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgdHJhaXRzOiBWYWxpZGF0b3JUcmFpdHM7XG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3ZhbGlkYXRvcjogVmFsaWRhdG9yRnVuYzxULCBUQz47XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9vcHRpb25zOiBWYWxpZGF0b3JPcHRpb25zPFRDPjtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcge0BsaW5rIFZhbGlkYXRpb24uQmFzZS5HZW5lcmljVmFsaWRhdG9yIHwgR2VuZXJpY1ZhbGlkYXRvcjxUPn0uXG4gICAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVmFsaWRhdGlvbi5CYXNlLkdlbmVyaWNWYWxpZGF0b3JDb25zdHJ1Y3RvclBhcmFtcyB8IGNvbnN0cnVjdG9yIHBhcmFtc31cbiAgICAgKiB1c2VkIHRvIGNvbmZpZ3VyZSB2YWxpZGF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBhcnRpYWw8R2VuZXJpY1ZhbGlkYXRvckNvbnN0cnVjdG9yUGFyYW1zPFQsIFRDPj4pIHtcbiAgICAgICAgaWYgKCFwYXJhbXMudmFsaWRhdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbGlkYXRvciBmdW5jdGlvbiBzdXBwbGllZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvciA9IHBhcmFtcy52YWxpZGF0b3I7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBwYXJhbXMub3B0aW9ucyA/PyB7fTtcbiAgICAgICAgdGhpcy50cmFpdHMgPSBuZXcgVmFsaWRhdG9yVHJhaXRzKHBhcmFtcy50cmFpdHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBWYWxpZGF0aW9uLlZhbGlkYXRvci5pc09wdGlvbmFsfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNPcHRpb25hbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhaXRzLmlzT3B0aW9uYWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIFZhbGlkYXRpb24uVmFsaWRhdG9yLmJyYW5kfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYnJhbmQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhaXRzLmJyYW5kO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBWYWxpZGF0aW9uLlZhbGlkYXRvci52YWxpZGF0ZX1cbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGUoZnJvbTogdW5rbm93biwgY29udGV4dD86IFRDKTogUmVzdWx0PFQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fdmFsaWRhdG9yKGZyb20sIHRoaXMuX2NvbnRleHQoY29udGV4dCkpO1xuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8gc3VjY2VlZChmcm9tIGFzIFQpIDogZmFpbDxUPignSW52YWxpZCB2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIFZhbGlkYXRpb24uVmFsaWRhdG9yLnZhbGlkYXRlT3B0aW9uYWx9XG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlT3B0aW9uYWwoZnJvbTogdW5rbm93biwgY29udGV4dD86IFRDKTogUmVzdWx0PFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIChmcm9tID09PSB1bmRlZmluZWQpID8gc3VjY2VlZCh1bmRlZmluZWQpIDogdGhpcy52YWxpZGF0ZShmcm9tLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgVmFsaWRhdGlvbi5WYWxpZGF0b3IuZ3VhcmR9XG4gICAgICovXG4gICAgcHVibGljIGd1YXJkKGZyb206IHVua25vd24sIGNvbnRleHQ/OiBUQyk6IGZyb20gaXMgVCB7XG4gICAgICAgIHJldHVybiAodGhpcy5fdmFsaWRhdG9yKGZyb20sIHRoaXMuX2NvbnRleHQoY29udGV4dCkpID09PSB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgVmFsaWRhdGlvbi5WYWxpZGF0b3Iub3B0aW9uYWx9XG4gICAgICovXG4gICAgcHVibGljIG9wdGlvbmFsKCk6IFZhbGlkYXRvcjxUIHwgdW5kZWZpbmVkLCBUQz4ge1xuICAgICAgICByZXR1cm4gbmV3IEdlbmVyaWNWYWxpZGF0b3Ioe1xuICAgICAgICAgICAgdmFsaWRhdG9yOiAoZnJvbTogdW5rbm93biwgY29udGV4dD86IFRDKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChmcm9tID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuX3ZhbGlkYXRvcihmcm9tLCB0aGlzLl9jb250ZXh0KGNvbnRleHQpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cmFpdHM6IHsgaXNPcHRpb25hbDogdHJ1ZSB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgVmFsaWRhdGlvbi5WYWxpZGF0b3Iud2l0aENvbnN0cmFpbnR9XG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb25zdHJhaW50KGNvbnN0cmFpbnQ6IENvbnN0cmFpbnQ8VD4sIHRyYWl0PzogQ29uc3RyYWludFRyYWl0KTogVmFsaWRhdG9yPFQsIFRDPiB7XG4gICAgICAgIHRyYWl0ID0gdHJhaXQgPz8geyB0eXBlOiAnZnVuY3Rpb24nIH07XG4gICAgICAgIHJldHVybiBuZXcgR2VuZXJpY1ZhbGlkYXRvcih7XG4gICAgICAgICAgICB2YWxpZGF0b3I6IChmcm9tOiB1bmtub3duLCBjb250ZXh0PzogVEMpOiBib29sZWFuIHwgRmFpbHVyZTxUPiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRvcihmcm9tLCB0aGlzLl9jb250ZXh0KGNvbnRleHQpKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25zdHJhaW50UmVzdWx0ID0gY29uc3RyYWludChmcm9tIGFzIFQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnN0cmFpbnRSZXN1bHQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnRSZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZhaWwoYEludmFsaWQgdmFsdWUgXCIke0pTT04uc3RyaW5naWZ5KGZyb20pfVwiOiAgZG9lcyBub3QgbWVldCBjb25zdHJhaW50LmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50UmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJhaXRzOiB7IGNvbnN0cmFpbnRzOiBbdHJhaXRdIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBWYWxpZGF0aW9uLlZhbGlkYXRvci5icmFuZH1cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEJyYW5kPEIgZXh0ZW5kcyBzdHJpbmc+KGJyYW5kOiBCKTogVmFsaWRhdG9yPEJyYW5kPFQsIEI+LCBUQz4ge1xuICAgICAgICBpZiAodGhpcy5icmFuZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVwbGFjZSBleGlzdGluZyBicmFuZCBcIiR7dGhpcy5icmFuZH1cIiB3aXRoIFwiJHticmFuZH1cIi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgR2VuZXJpY1ZhbGlkYXRvcjxCcmFuZDxULCBCPiwgVEM+KHtcbiAgICAgICAgICAgIHZhbGlkYXRvcjogKGZyb206IHVua25vd24sIGNvbnRleHQ/OiBUQykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3IoZnJvbSwgdGhpcy5fY29udGV4dChjb250ZXh0KSkgYXMgYm9vbGVhbiB8IEZhaWx1cmU8QnJhbmQ8VCwgQj4+O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRyYWl0czogeyBicmFuZCB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgZGVmYXVsdCBvciBleHBsaWNpdCBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBleHBsaWNpdENvbnRleHQgLSBPcHRpb25hbCBleHBsaWNpdCBjb250ZXh0LlxuICAgICAqIEByZXR1cm5zIFRoZSBhcHByb3ByaWF0ZSBjb250ZXh0IHRvIHVzZS5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2NvbnRleHQoZXhwbGljaXRDb250ZXh0PzogVEMpOiBUQyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBleHBsaWNpdENvbnRleHQgPz8gdGhpcy5fb3B0aW9ucy5kZWZhdWx0Q29udGV4dDtcbiAgICB9XG59XG4iXX0=
@@ -42,6 +42,18 @@ export declare function object<T, TC = unknown>(fields: FieldValidators<T, TC>,
42
42
  * @public
43
43
  */
44
44
  export declare function arrayOf<T, TC>(validateElement: Validator<T, TC>, params?: Omit<ArrayValidatorConstructorParams<T, TC>, 'validateElement'>): ArrayValidator<T, TC>;
45
+ /**
46
+ * Helper function to create a {@link Validation.Validator} which validates an enumerated
47
+ * value in place.
48
+ * @public
49
+ */
50
+ export declare function enumeratedValue<T extends string>(values: T[]): Validator<T, T[]>;
51
+ /**
52
+ * Helper function to create a {@link Validation.Validator} which validates a literal value.
53
+ * @param value - the literal value to be validated
54
+ * @public
55
+ */
56
+ export declare function literal<T extends string | number | boolean | symbol | null | undefined>(value: T): Validator<T>;
45
57
  /**
46
58
  * Helper function to create a {@link Validation.Classes.TypeGuardValidator | TypeGuardValidator} which
47
59
  * validates a value or object in place.
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/validation/validators.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,cAAc,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,mCAAmC,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,MAAM,kCAAwB,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,MAAM,kCAAwB,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,OAAO,2BAAyB,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,EAClC,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,EAC9B,MAAM,CAAC,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,GACjE,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,CAExB;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,EACzB,eAAe,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EACjC,MAAM,CAAC,EAAE,IAAI,CAAC,+BAA+B,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,iBAAiB,CAAC,GACzE,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAEvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,EAAE,EACrB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,oBAAoB,CAAC,CAAC,EAAE,EAAE,CAAC,EAClC,MAAM,CAAC,EAAE,IAAI,CAAC,mCAAmC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,GACnF,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,CAE3B"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/validation/validators.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,cAAc,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,mCAAmC,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,MAAM,kCAAwB,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,MAAM,kCAAwB,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,OAAO,2BAAyB,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,EAClC,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,EAC9B,MAAM,CAAC,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,GACjE,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,CAExB;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,EACzB,eAAe,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EACjC,MAAM,CAAC,EAAE,IAAI,CAAC,+BAA+B,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,iBAAiB,CAAC,GACzE,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAEvB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAWhF;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAM/G;AAED;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,EAAE,EACrB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,oBAAoB,CAAC,CAAC,EAAE,EAAE,CAAC,EAClC,MAAM,CAAC,EAAE,IAAI,CAAC,mCAAmC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,GACnF,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,CAE3B"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- * Copyright (c) 2021 Erik Fortune
3
+ * Copyright (c) 2023 Erik Fortune
4
4
  *
5
5
  * Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  * of this software and associated documentation files (the "Software"), to deal
@@ -21,11 +21,13 @@
21
21
  * SOFTWARE.
22
22
  */
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.isA = exports.arrayOf = exports.object = exports.boolean = exports.number = exports.string = void 0;
24
+ exports.isA = exports.literal = exports.enumeratedValue = exports.arrayOf = exports.object = exports.boolean = exports.number = exports.string = void 0;
25
25
  const array_1 = require("./array");
26
+ const result_1 = require("../result");
26
27
  const object_1 = require("./object");
27
28
  const typeGuard_1 = require("./typeGuard");
28
29
  const boolean_1 = require("./boolean");
30
+ const genericValidator_1 = require("./genericValidator");
29
31
  const number_1 = require("./number");
30
32
  const string_1 = require("./string");
31
33
  /**
@@ -70,6 +72,37 @@ function arrayOf(validateElement, params) {
70
72
  return new array_1.ArrayValidator({ validateElement, ...(params !== null && params !== void 0 ? params : {}) });
71
73
  }
72
74
  exports.arrayOf = arrayOf;
75
+ /**
76
+ * Helper function to create a {@link Validation.Validator} which validates an enumerated
77
+ * value in place.
78
+ * @public
79
+ */
80
+ function enumeratedValue(values) {
81
+ return new genericValidator_1.GenericValidator({
82
+ validator: (from, context) => {
83
+ if (typeof from === 'string') {
84
+ const v = context !== null && context !== void 0 ? context : values;
85
+ const index = v.indexOf(from);
86
+ return index >= 0 ? true : (0, result_1.fail)(`Invalid enumerated value "${from}" - expected: (${v.join(', ')})`);
87
+ }
88
+ return (0, result_1.fail)(`Not a string: "${JSON.stringify(from, undefined, 2)}`);
89
+ },
90
+ });
91
+ }
92
+ exports.enumeratedValue = enumeratedValue;
93
+ /**
94
+ * Helper function to create a {@link Validation.Validator} which validates a literal value.
95
+ * @param value - the literal value to be validated
96
+ * @public
97
+ */
98
+ function literal(value) {
99
+ return new genericValidator_1.GenericValidator({
100
+ validator: (from) => {
101
+ return from === value ? true : (0, result_1.fail)(`Expected literal ${String(value)}, found "${JSON.stringify(from, undefined, 2)}`);
102
+ },
103
+ });
104
+ }
105
+ exports.literal = literal;
73
106
  /**
74
107
  * Helper function to create a {@link Validation.Classes.TypeGuardValidator | TypeGuardValidator} which
75
108
  * validates a value or object in place.
@@ -83,4 +116,4 @@ function isA(description, guard, params) {
83
116
  return new typeGuard_1.TypeGuardValidator({ description, guard, ...(params !== null && params !== void 0 ? params : {}) });
84
117
  }
85
118
  exports.isA = isA;
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgsbUNBQTBFO0FBQzFFLHFDQUE4RjtBQUM5RiwyQ0FBc0Y7QUFFdEYsdUNBQTZDO0FBQzdDLHFDQUEyQztBQUMzQyxxQ0FBMkM7QUFJM0M7OztHQUdHO0FBQ1UsUUFBQSxNQUFNLEdBQUcsSUFBSSx3QkFBZSxFQUFFLENBQUM7QUFFNUM7OztHQUdHO0FBQ1UsUUFBQSxNQUFNLEdBQUcsSUFBSSx3QkFBZSxFQUFFLENBQUM7QUFFNUM7OztHQUdHO0FBQ1UsUUFBQSxPQUFPLEdBQUcsSUFBSSwwQkFBZ0IsRUFBRSxDQUFDO0FBRTlDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixNQUFNLENBQ2xCLE1BQThCLEVBQzlCLE1BQWdFO0lBRWhFLE9BQU8sSUFBSSx3QkFBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUxELHdCQUtDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLE9BQU8sQ0FDbkIsZUFBaUMsRUFDakMsTUFBd0U7SUFFeEUsT0FBTyxJQUFJLHNCQUFjLENBQUMsRUFBRSxlQUFlLEVBQUUsR0FBRyxDQUFDLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBTEQsMEJBS0M7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLEdBQUcsQ0FDZixXQUFtQixFQUNuQixLQUFrQyxFQUNsQyxNQUFrRjtJQUVsRixPQUFPLElBQUksOEJBQWtCLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQU5ELGtCQU1DIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMSBFcmlrIEZvcnR1bmVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IEFycmF5VmFsaWRhdG9yLCBBcnJheVZhbGlkYXRvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9hcnJheSc7XG5pbXBvcnQgeyBGaWVsZFZhbGlkYXRvcnMsIE9iamVjdFZhbGlkYXRvciwgT2JqZWN0VmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL29iamVjdCc7XG5pbXBvcnQgeyBUeXBlR3VhcmRWYWxpZGF0b3IsIFR5cGVHdWFyZFZhbGlkYXRvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi90eXBlR3VhcmQnO1xuXG5pbXBvcnQgeyBCb29sZWFuVmFsaWRhdG9yIH0gZnJvbSAnLi9ib29sZWFuJztcbmltcG9ydCB7IE51bWJlclZhbGlkYXRvciB9IGZyb20gJy4vbnVtYmVyJztcbmltcG9ydCB7IFN0cmluZ1ZhbGlkYXRvciB9IGZyb20gJy4vc3RyaW5nJztcbmltcG9ydCB7IFR5cGVHdWFyZFdpdGhDb250ZXh0IH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3InO1xuXG4vKipcbiAqIEEge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5TdHJpbmdWYWxpZGF0b3IgfCBTdHJpbmdWYWxpZGF0b3J9IHdoaWNoIHZhbGlkYXRlcyBhIHN0cmluZyBpbiBwbGFjZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZyA9IG5ldyBTdHJpbmdWYWxpZGF0b3IoKTtcblxuLyoqXG4gKiBBIHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuTnVtYmVyVmFsaWRhdG9yIHwgTnVtYmVyVmFsaWRhdG9yfSB3aGljaCB2YWxpZGF0ZXMgYSBudW1iZXIgaW4gcGxhY2UuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBudW1iZXIgPSBuZXcgTnVtYmVyVmFsaWRhdG9yKCk7XG5cbi8qKlxuICogQSB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLkJvb2xlYW5WYWxpZGF0b3IgfCBCb29sZWFuVmFsaWRhdG9yfSB3aGljaCB2YWxpZGF0ZXMgYSBib29sZWFuIGluIHBsYWNlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYm9vbGVhbiA9IG5ldyBCb29sZWFuVmFsaWRhdG9yKCk7XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuT2JqZWN0VmFsaWRhdG9yIHwgT2JqZWN0VmFsaWRhdG9yfSB3aGljaCB2YWxpZGF0ZXNcbiAqIGFuIG9iamVjdCBpbiBwbGFjZS5cbiAqIEBwYXJhbSBmaWVsZHMgLSBBIHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuRmllbGRWYWxpZGF0b3JzIHwgZmllbGQgdmFsaWRhdG9yIGRlZmluaXRpb259XG4gKiBkZXNjcmliaW5nIHRoZSB2YWxpZGF0aW9ucyB0byBiZSBhcHBsaWVkLlxuICogQHBhcmFtIHBhcmFtcyAtIE9wdGlvbmFsIHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuT2JqZWN0VmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXMgfCBwYXJhbWV0ZXJzfVxuICogdG8gcmVmaW5lIHRoZSBiZWhhdmlvciBvZiB0aGUgcmVzdWx0aW5nIHtAbGluayBWYWxpZGF0aW9uLlZhbGlkYXRvciB8IHZhbGlkYXRvcn0uXG4gKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgVmFsaWRhdGlvbi5WYWxpZGF0b3IgfCBWYWxpZGF0b3J9IHdoaWNoIHZhbGlkYXRlcyB0aGUgZGVzaXJlZFxuICogb2JqZWN0IGluIHBsYWNlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0PFQsIFRDID0gdW5rbm93bj4oXG4gICAgZmllbGRzOiBGaWVsZFZhbGlkYXRvcnM8VCwgVEM+LFxuICAgIHBhcmFtcz86IE9taXQ8T2JqZWN0VmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXM8VCwgVEM+LCAnZmllbGRzJz4sXG4pOiBPYmplY3RWYWxpZGF0b3I8VCwgVEM+IHtcbiAgICByZXR1cm4gbmV3IE9iamVjdFZhbGlkYXRvcih7IGZpZWxkcywgLi4uKHBhcmFtcyA/PyB7fSkgfSk7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuQXJyYXlWYWxpZGF0b3IgfCBBcnJheVZhbGlkYXRvcn0gd2hpY2hcbiAqIHZhbGlkYXRlcyBhbiBhcnJheSBpbiBwbGFjZS5cbiAqIEBwYXJhbSB2YWxpZGF0ZUVsZW1lbnQgLSBBIHtAbGluayBWYWxpZGF0aW9uLlZhbGlkYXRvciB8IHZhbGlkYXRvcn0gd2hpY2ggdmFsaWRhdGVzIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuQXJyYXlWYWxpZGF0b3IgfCBBcnJheVZhbGlkYXRvciB9IHdoaWNoIHZhbGlkYXRlcyB0aGUgZGVzaXJlZFxuICogYXJyYXkgaW4gcGxhY2UuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheU9mPFQsIFRDPihcbiAgICB2YWxpZGF0ZUVsZW1lbnQ6IFZhbGlkYXRvcjxULCBUQz4sXG4gICAgcGFyYW1zPzogT21pdDxBcnJheVZhbGlkYXRvckNvbnN0cnVjdG9yUGFyYW1zPFQsIFRDPiwgJ3ZhbGlkYXRlRWxlbWVudCc+XG4pOiBBcnJheVZhbGlkYXRvcjxULCBUQz4ge1xuICAgIHJldHVybiBuZXcgQXJyYXlWYWxpZGF0b3IoeyB2YWxpZGF0ZUVsZW1lbnQsIC4uLihwYXJhbXMgPz8ge30pIH0pO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLlR5cGVHdWFyZFZhbGlkYXRvciB8IFR5cGVHdWFyZFZhbGlkYXRvcn0gd2hpY2hcbiAqIHZhbGlkYXRlcyBhIHZhbHVlIG9yIG9iamVjdCBpbiBwbGFjZS5cbiAqIEBwYXJhbSBkZXNjcmlwdGlvbiAtIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRoaW5nIHRvIGJlIHZhbGlkYXRlZCBmb3IgdXNlIGluIGVycm9yIG1lc3NhZ2VzXG4gKiBAcGFyYW0gZ3VhcmQgLSBhIHtAbGluayBWYWxpZGF0aW9uLlR5cGVHdWFyZFdpdGhDb250ZXh0fSB3aGljaCBwZXJmb3JtcyB0aGUgdmFsaWRhdGlvbi5cbiAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuVHlwZUd1YXJkVmFsaWRhdG9yIHwgVHlwZUd1YXJkVmFsaWRhdG9yIH0gd2hpY2ggdmFsaWRhdGVzXG4gKiB0aGUgdmFsdWVzIHVzaW5nIHRoZSBzdXBwbGllZCB0eXBlIGd1YXJkLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBPFQsIFRDPihcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIGd1YXJkOiBUeXBlR3VhcmRXaXRoQ29udGV4dDxULCBUQz4sXG4gICAgcGFyYW1zPzogT21pdDxUeXBlR3VhcmRWYWxpZGF0b3JDb25zdHJ1Y3RvclBhcmFtczxULCBUQz4sICdkZXNjcmlwdGlvbicgfCAnZ3VhcmQnPlxuKTogVHlwZUd1YXJkVmFsaWRhdG9yPFQsIFRDPiB7XG4gICAgcmV0dXJuIG5ldyBUeXBlR3VhcmRWYWxpZGF0b3IoeyBkZXNjcmlwdGlvbiwgZ3VhcmQsIC4uLihwYXJhbXMgPz8ge30pIH0pO1xufVxuIl19
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgsbUNBQTBFO0FBQzFFLHNDQUEwQztBQUMxQyxxQ0FBOEY7QUFDOUYsMkNBQXNGO0FBRXRGLHVDQUE2QztBQUM3Qyx5REFBc0Q7QUFDdEQscUNBQTJDO0FBQzNDLHFDQUEyQztBQUkzQzs7O0dBR0c7QUFDVSxRQUFBLE1BQU0sR0FBRyxJQUFJLHdCQUFlLEVBQUUsQ0FBQztBQUU1Qzs7O0dBR0c7QUFDVSxRQUFBLE1BQU0sR0FBRyxJQUFJLHdCQUFlLEVBQUUsQ0FBQztBQUU1Qzs7O0dBR0c7QUFDVSxRQUFBLE9BQU8sR0FBRyxJQUFJLDBCQUFnQixFQUFFLENBQUM7QUFFOUM7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLE1BQU0sQ0FDbEIsTUFBOEIsRUFDOUIsTUFBZ0U7SUFFaEUsT0FBTyxJQUFJLHdCQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBTEQsd0JBS0M7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsT0FBTyxDQUNuQixlQUFpQyxFQUNqQyxNQUF3RTtJQUV4RSxPQUFPLElBQUksc0JBQWMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxHQUFHLENBQUMsTUFBTSxhQUFOLE1BQU0sY0FBTixNQUFNLEdBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFMRCwwQkFLQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixlQUFlLENBQW1CLE1BQVc7SUFDekQsT0FBTyxJQUFJLG1DQUFnQixDQUFDO1FBQ3hCLFNBQVMsRUFBRSxDQUFDLElBQWEsRUFBRSxPQUFhLEVBQXdCLEVBQUU7WUFDOUQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQzFCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLE1BQU0sQ0FBQztnQkFDNUIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFTLENBQUMsQ0FBQztnQkFDbkMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUEsYUFBSSxFQUFDLDZCQUE2QixJQUFJLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN4RztZQUNELE9BQU8sSUFBQSxhQUFJLEVBQUMsa0JBQWtCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQztLQUNKLENBQUMsQ0FBQztBQUNQLENBQUM7QUFYRCwwQ0FXQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixPQUFPLENBQWtFLEtBQVE7SUFDN0YsT0FBTyxJQUFJLG1DQUFnQixDQUFDO1FBQ3hCLFNBQVMsRUFBRSxDQUFDLElBQWEsRUFBd0IsRUFBRTtZQUMvQyxPQUFPLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBQSxhQUFJLEVBQUMsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNILENBQUM7S0FDSixDQUFDLENBQUM7QUFDUCxDQUFDO0FBTkQsMEJBTUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLEdBQUcsQ0FDZixXQUFtQixFQUNuQixLQUFrQyxFQUNsQyxNQUFrRjtJQUVsRixPQUFPLElBQUksOEJBQWtCLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQU5ELGtCQU1DIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMyBFcmlrIEZvcnR1bmVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IEFycmF5VmFsaWRhdG9yLCBBcnJheVZhbGlkYXRvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9hcnJheSc7XG5pbXBvcnQgeyBGYWlsdXJlLCBmYWlsIH0gZnJvbSAnLi4vcmVzdWx0JztcbmltcG9ydCB7IEZpZWxkVmFsaWRhdG9ycywgT2JqZWN0VmFsaWRhdG9yLCBPYmplY3RWYWxpZGF0b3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCB7IFR5cGVHdWFyZFZhbGlkYXRvciwgVHlwZUd1YXJkVmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3R5cGVHdWFyZCc7XG5cbmltcG9ydCB7IEJvb2xlYW5WYWxpZGF0b3IgfSBmcm9tICcuL2Jvb2xlYW4nO1xuaW1wb3J0IHsgR2VuZXJpY1ZhbGlkYXRvciB9IGZyb20gJy4vZ2VuZXJpY1ZhbGlkYXRvcic7XG5pbXBvcnQgeyBOdW1iZXJWYWxpZGF0b3IgfSBmcm9tICcuL251bWJlcic7XG5pbXBvcnQgeyBTdHJpbmdWYWxpZGF0b3IgfSBmcm9tICcuL3N0cmluZyc7XG5pbXBvcnQgeyBUeXBlR3VhcmRXaXRoQ29udGV4dCB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdG9yJztcblxuLyoqXG4gKiBBIHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuU3RyaW5nVmFsaWRhdG9yIHwgU3RyaW5nVmFsaWRhdG9yfSB3aGljaCB2YWxpZGF0ZXMgYSBzdHJpbmcgaW4gcGxhY2UuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzdHJpbmcgPSBuZXcgU3RyaW5nVmFsaWRhdG9yKCk7XG5cbi8qKlxuICogQSB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLk51bWJlclZhbGlkYXRvciB8IE51bWJlclZhbGlkYXRvcn0gd2hpY2ggdmFsaWRhdGVzIGEgbnVtYmVyIGluIHBsYWNlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbnVtYmVyID0gbmV3IE51bWJlclZhbGlkYXRvcigpO1xuXG4vKipcbiAqIEEge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5Cb29sZWFuVmFsaWRhdG9yIHwgQm9vbGVhblZhbGlkYXRvcn0gd2hpY2ggdmFsaWRhdGVzIGEgYm9vbGVhbiBpbiBwbGFjZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGJvb2xlYW4gPSBuZXcgQm9vbGVhblZhbGlkYXRvcigpO1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLk9iamVjdFZhbGlkYXRvciB8IE9iamVjdFZhbGlkYXRvcn0gd2hpY2ggdmFsaWRhdGVzXG4gKiBhbiBvYmplY3QgaW4gcGxhY2UuXG4gKiBAcGFyYW0gZmllbGRzIC0gQSB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLkZpZWxkVmFsaWRhdG9ycyB8IGZpZWxkIHZhbGlkYXRvciBkZWZpbml0aW9ufVxuICogZGVzY3JpYmluZyB0aGUgdmFsaWRhdGlvbnMgdG8gYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBwYXJhbXMgLSBPcHRpb25hbCB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLk9iamVjdFZhbGlkYXRvckNvbnN0cnVjdG9yUGFyYW1zIHwgcGFyYW1ldGVyc31cbiAqIHRvIHJlZmluZSB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlc3VsdGluZyB7QGxpbmsgVmFsaWRhdGlvbi5WYWxpZGF0b3IgfCB2YWxpZGF0b3J9LlxuICogQHJldHVybnMgQSBuZXcge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yIHwgVmFsaWRhdG9yfSB3aGljaCB2YWxpZGF0ZXMgdGhlIGRlc2lyZWRcbiAqIG9iamVjdCBpbiBwbGFjZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdDxULCBUQyA9IHVua25vd24+KFxuICAgIGZpZWxkczogRmllbGRWYWxpZGF0b3JzPFQsIFRDPixcbiAgICBwYXJhbXM/OiBPbWl0PE9iamVjdFZhbGlkYXRvckNvbnN0cnVjdG9yUGFyYW1zPFQsIFRDPiwgJ2ZpZWxkcyc+LFxuKTogT2JqZWN0VmFsaWRhdG9yPFQsIFRDPiB7XG4gICAgcmV0dXJuIG5ldyBPYmplY3RWYWxpZGF0b3IoeyBmaWVsZHMsIC4uLihwYXJhbXMgPz8ge30pIH0pO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLkFycmF5VmFsaWRhdG9yIHwgQXJyYXlWYWxpZGF0b3J9IHdoaWNoXG4gKiB2YWxpZGF0ZXMgYW4gYXJyYXkgaW4gcGxhY2UuXG4gKiBAcGFyYW0gdmFsaWRhdGVFbGVtZW50IC0gQSB7QGxpbmsgVmFsaWRhdGlvbi5WYWxpZGF0b3IgfCB2YWxpZGF0b3J9IHdoaWNoIHZhbGlkYXRlcyBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLkFycmF5VmFsaWRhdG9yIHwgQXJyYXlWYWxpZGF0b3IgfSB3aGljaCB2YWxpZGF0ZXMgdGhlIGRlc2lyZWRcbiAqIGFycmF5IGluIHBsYWNlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlPZjxULCBUQz4oXG4gICAgdmFsaWRhdGVFbGVtZW50OiBWYWxpZGF0b3I8VCwgVEM+LFxuICAgIHBhcmFtcz86IE9taXQ8QXJyYXlWYWxpZGF0b3JDb25zdHJ1Y3RvclBhcmFtczxULCBUQz4sICd2YWxpZGF0ZUVsZW1lbnQnPlxuKTogQXJyYXlWYWxpZGF0b3I8VCwgVEM+IHtcbiAgICByZXR1cm4gbmV3IEFycmF5VmFsaWRhdG9yKHsgdmFsaWRhdGVFbGVtZW50LCAuLi4ocGFyYW1zID8/IHt9KSB9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yfSB3aGljaCB2YWxpZGF0ZXMgYW4gZW51bWVyYXRlZFxuICogdmFsdWUgaW4gcGxhY2UuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnVtZXJhdGVkVmFsdWU8VCBleHRlbmRzIHN0cmluZz4odmFsdWVzOiBUW10pOiBWYWxpZGF0b3I8VCwgVFtdPiB7XG4gICAgcmV0dXJuIG5ldyBHZW5lcmljVmFsaWRhdG9yKHtcbiAgICAgICAgdmFsaWRhdG9yOiAoZnJvbTogdW5rbm93biwgY29udGV4dD86IFRbXSk6IGJvb2xlYW4gfCBGYWlsdXJlPFQ+ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnJvbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2ID0gY29udGV4dCA/PyB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB2LmluZGV4T2YoZnJvbSBhcyBUKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPj0gMCA/IHRydWUgOiBmYWlsKGBJbnZhbGlkIGVudW1lcmF0ZWQgdmFsdWUgXCIke2Zyb219XCIgIC0gZXhwZWN0ZWQ6ICgke3Yuam9pbignLCAnKX0pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFpbChgTm90IGEgc3RyaW5nOiBcIiR7SlNPTi5zdHJpbmdpZnkoZnJvbSwgdW5kZWZpbmVkLCAyKX1gKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yfSB3aGljaCB2YWxpZGF0ZXMgYSBsaXRlcmFsIHZhbHVlLlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIGxpdGVyYWwgdmFsdWUgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXRlcmFsPFQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3ltYm9sIHwgbnVsbCB8IHVuZGVmaW5lZD4odmFsdWU6IFQpOiBWYWxpZGF0b3I8VD4ge1xuICAgIHJldHVybiBuZXcgR2VuZXJpY1ZhbGlkYXRvcih7XG4gICAgICAgIHZhbGlkYXRvcjogKGZyb206IHVua25vd24pOiBib29sZWFuIHwgRmFpbHVyZTxUPiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbSA9PT0gdmFsdWUgPyB0cnVlIDogZmFpbChgRXhwZWN0ZWQgbGl0ZXJhbCAke1N0cmluZyh2YWx1ZSl9LCBmb3VuZCBcIiR7SlNPTi5zdHJpbmdpZnkoZnJvbSwgdW5kZWZpbmVkLCAyKX1gKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5UeXBlR3VhcmRWYWxpZGF0b3IgfCBUeXBlR3VhcmRWYWxpZGF0b3J9IHdoaWNoXG4gKiB2YWxpZGF0ZXMgYSB2YWx1ZSBvciBvYmplY3QgaW4gcGxhY2UuXG4gKiBAcGFyYW0gZGVzY3JpcHRpb24gLSBhIGRlc2NyaXB0aW9uIG9mIHRoZSB0aGluZyB0byBiZSB2YWxpZGF0ZWQgZm9yIHVzZSBpbiBlcnJvciBtZXNzYWdlc1xuICogQHBhcmFtIGd1YXJkIC0gYSB7QGxpbmsgVmFsaWRhdGlvbi5UeXBlR3VhcmRXaXRoQ29udGV4dH0gd2hpY2ggcGVyZm9ybXMgdGhlIHZhbGlkYXRpb24uXG4gKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLlR5cGVHdWFyZFZhbGlkYXRvciB8IFR5cGVHdWFyZFZhbGlkYXRvciB9IHdoaWNoIHZhbGlkYXRlc1xuICogdGhlIHZhbHVlcyB1c2luZyB0aGUgc3VwcGxpZWQgdHlwZSBndWFyZC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQTxULCBUQz4oXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICBndWFyZDogVHlwZUd1YXJkV2l0aENvbnRleHQ8VCwgVEM+LFxuICAgIHBhcmFtcz86IE9taXQ8VHlwZUd1YXJkVmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXM8VCwgVEM+LCAnZGVzY3JpcHRpb24nIHwgJ2d1YXJkJz5cbik6IFR5cGVHdWFyZFZhbGlkYXRvcjxULCBUQz4ge1xuICAgIHJldHVybiBuZXcgVHlwZUd1YXJkVmFsaWRhdG9yKHsgZGVzY3JpcHRpb24sIGd1YXJkLCAuLi4ocGFyYW1zID8/IHt9KSB9KTtcbn1cbiJdfQ==