Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More β†’
Socket
Sign inDemoInstall
Socket

ts-essentials

Package Overview
Dependencies
Maintainers
1
Versions
60
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ts-essentials - npm Package Compare versions

Comparing version 7.0.3 to 8.0.0

19

CHANGELOG.md
# ts-essentials
## 8.0.0
### Major Changes
- 239e7e3: Use `typescript@^4.0.0`
### Minor Changes
- ab6f68e: Add `StrictExtract` to check the original structure of type and extract it correctly
- 239e7e3: Add `MergeN`: you can pass tuple of size N and it will recursively apply `Merge`
### Patch Changes
- b39ce66: Improve readme description about what's this project is all about
- 239e7e3: Add `DeepReadonly` support for `unknown` type
- 35e73b6: `IsTuple` now works with any tuple length
- 239e7e3: Update readme description of `Opaque`
## 7.0.3
### Patch Changes
- f917f9b: Refactor Opaque, now `__TYPE__` is not accessible at all

3

dist/functions.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.noop = exports.assert = exports.UnreachableCaseError = void 0;
class UnreachableCaseError extends Error {

@@ -17,2 +18,2 @@ constructor(value) {

exports.noop = noop;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2Z1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE1BQWEsb0JBQXFCLFNBQVEsS0FBSztJQUM3QyxZQUFZLEtBQVk7UUFDdEIsS0FBSyxDQUFDLHFCQUFxQixLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQUpELG9EQUlDO0FBRUQsU0FBZ0IsTUFBTSxDQUFDLFNBQWMsRUFBRSxNQUFjLDZCQUE2QjtJQUNoRixJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLENBQUMsQ0FBQztLQUM1QztBQUNILENBQUM7QUFKRCx3QkFJQztBQUVELFNBQWdCLElBQUksQ0FBQyxHQUFHLEtBQWdCLElBQVMsQ0FBQztBQUFsRCxvQkFBa0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVW5yZWFjaGFibGVDYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBuZXZlcikge1xuICAgIHN1cGVyKGBVbnJlYWNoYWJsZSBjYXNlOiAke3ZhbHVlfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uOiBhbnksIG1zZzogc3RyaW5nID0gXCJubyBhZGRpdGlvbmFsIGluZm8gcHJvdmlkZWRcIik6IGFzc2VydHMgY29uZGl0aW9uIHtcbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBc3NlcnRpb24gRXJyb3I6IFwiICsgbXNnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCguLi5fYXJnczogdW5rbm93bltdKTogdm9pZCB7fVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2Z1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFhLG9CQUFxQixTQUFRLEtBQUs7SUFDN0MsWUFBWSxLQUFZO1FBQ3RCLEtBQUssQ0FBQyxxQkFBcUIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0NBQ0Y7QUFKRCxvREFJQztBQUVELFNBQWdCLE1BQU0sQ0FBQyxTQUFjLEVBQUUsTUFBYyw2QkFBNkI7SUFDaEYsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDNUM7QUFDSCxDQUFDO0FBSkQsd0JBSUM7QUFFRCxTQUFnQixJQUFJLENBQUMsR0FBRyxLQUFnQixJQUFTLENBQUM7QUFBbEQsb0JBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFVucmVhY2hhYmxlQ2FzZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih2YWx1ZTogbmV2ZXIpIHtcbiAgICBzdXBlcihgVW5yZWFjaGFibGUgY2FzZTogJHt2YWx1ZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbjogYW55LCBtc2c6IHN0cmluZyA9IFwibm8gYWRkaXRpb25hbCBpbmZvIHByb3ZpZGVkXCIpOiBhc3NlcnRzIGNvbmRpdGlvbiB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQXNzZXJ0aW9uIEVycm9yOiBcIiArIG1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoLi4uX2FyZ3M6IHVua25vd25bXSk6IHZvaWQge31cbiJdfQ==
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./functions"));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxpQ0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZnVuY3Rpb25zXCI7XG4iXX0=
__exportStar(require("./types"), exports);
__exportStar(require("./functions"), exports);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMENBQXdCO0FBQ3hCLDhDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mdW5jdGlvbnNcIjtcbiJdfQ==
/** Essentials */
export declare type Primitive = string | number | boolean | bigint | symbol | undefined | null;
export declare type Builtin = Primitive | Function | Date | Error | RegExp;
export declare type IsTuple<T> = T extends [infer A]
? T
: T extends [infer A, infer B]
? T
: T extends [infer A, infer B, infer C]
? T
: T extends [infer A, infer B, infer C, infer D]
? T
: T extends [infer A, infer B, infer C, infer D, infer E]
? T
: never;
export declare type IsTuple<T> = T extends any[] ? (any[] extends T ? never : T) : never;
export declare type AnyArray<T = any> = Array<T> | ReadonlyArray<T>;

@@ -174,2 +164,4 @@ /**

}
: unknown extends T
? unknown
: Readonly<T>;

@@ -206,2 +198,4 @@ /** Make readonly object writable */

export declare type StrictOmit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
/** Similar to the builtin Extract, but checks the filter strictly */
export declare type StrictExtract<T, U extends Partial<T>> = Extract<T, U>;
/** Omit all properties of given type in object type */

@@ -315,2 +309,7 @@ export declare type OmitProperties<T, P> = Pick<

export declare type Merge<M, N> = Omit<M, keyof N> & N;
declare type _MergeN<T extends readonly any[], Result> = T extends readonly [infer Head, ...(infer Tail)]
? _MergeN<Tail, Merge<Result, Head>>
: Result;
/** Merge N types, properties types from the latter override the ones defined on the former type */
export declare type MergeN<T extends readonly any[]> = _MergeN<T, {}>;
/** Mark some properties as required, leaving others unchanged */

@@ -317,0 +316,0 @@ export declare type MarkRequired<T, RK extends keyof T> = Exclude<T, RK> & Required<Pick<T, RK>>;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBFc3NlbnRpYWxzICovXG5leHBvcnQgdHlwZSBQcmltaXRpdmUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgYmlnaW50IHwgc3ltYm9sIHwgdW5kZWZpbmVkIHwgbnVsbDtcbmV4cG9ydCB0eXBlIEJ1aWx0aW4gPSBQcmltaXRpdmUgfCBGdW5jdGlvbiB8IERhdGUgfCBFcnJvciB8IFJlZ0V4cDtcbmV4cG9ydCB0eXBlIElzVHVwbGU8VD4gPSBUIGV4dGVuZHMgW2luZmVyIEFdXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBbaW5mZXIgQSwgaW5mZXIgQl1cbiAgPyBUXG4gIDogVCBleHRlbmRzIFtpbmZlciBBLCBpbmZlciBCLCBpbmZlciBDXVxuICA/IFRcbiAgOiBUIGV4dGVuZHMgW2luZmVyIEEsIGluZmVyIEIsIGluZmVyIEMsIGluZmVyIERdXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBbaW5mZXIgQSwgaW5mZXIgQiwgaW5mZXIgQywgaW5mZXIgRCwgaW5mZXIgRV1cbiAgPyBUXG4gIDogbmV2ZXI7XG5leHBvcnQgdHlwZSBBbnlBcnJheTxUID0gYW55PiA9IEFycmF5PFQ+IHwgUmVhZG9ubHlBcnJheTxUPjtcblxuLyoqXG4gKiBMaWtlIFJlY29yZCwgYnV0IGNhbiBiZSB1c2VkIHdpdGggb25seSBvbmUgYXJndW1lbnQuXG4gKiBVc2VmdWwsIGlmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBvZiB0aGUga2V5cyBvZiBhIGZpbml0ZSB0eXBlIGFyZSB1c2VkLlxuICovXG5leHBvcnQgdHlwZSBEaWN0aW9uYXJ5PFQsIEsgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgPSBzdHJpbmc+ID0geyBba2V5IGluIEtdOiBUIH07XG4vKiogR2l2ZW4gRGljdGlvbmFyeTxUPiByZXR1cm5zIFQgKi9cbmV4cG9ydCB0eXBlIERpY3Rpb25hcnlWYWx1ZXM8VD4gPSBUIGV4dGVuZHMgRGljdGlvbmFyeTxpbmZlciBVPiA/IFUgOiBuZXZlcjtcbi8qKlxuICogTGlrZSBEaWN0aW9uYXJ5LCBidXQ6XG4gKiAgLSBlbnN1cmVzIHR5cGUgc2FmZXR5IG9mIGluZGV4IGFjY2Vzc1xuICogIC0gZG9lcyBub3QgZW5mb3JjZSBrZXkgZXhoYXVzdGl2ZW5lc3NcbiAqL1xuZXhwb3J0IHR5cGUgU2FmZURpY3Rpb25hcnk8VCwgSyBleHRlbmRzIHN0cmluZyB8IG51bWJlciA9IHN0cmluZz4gPSB7IFtrZXkgaW4gS10/OiBUIH07XG5cbi8qKiBMaWtlIFBhcnRpYWwgYnV0IHJlY3Vyc2l2ZSAqL1xuZXhwb3J0IHR5cGUgRGVlcFBhcnRpYWw8VD4gPSBUIGV4dGVuZHMgQnVpbHRpblxuICA/IFRcbiAgOiBUIGV4dGVuZHMgTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gTWFwPERlZXBQYXJ0aWFsPEs+LCBEZWVwUGFydGlhbDxWPj5cbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBSZWFkb25seU1hcDxEZWVwUGFydGlhbDxLPiwgRGVlcFBhcnRpYWw8Vj4+XG4gIDogVCBleHRlbmRzIFdlYWtNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBXZWFrTWFwPERlZXBQYXJ0aWFsPEs+LCBEZWVwUGFydGlhbDxWPj5cbiAgOiBUIGV4dGVuZHMgU2V0PGluZmVyIFU+XG4gID8gU2V0PERlZXBQYXJ0aWFsPFU+PlxuICA6IFQgZXh0ZW5kcyBSZWFkb25seVNldDxpbmZlciBVPlxuICA/IFJlYWRvbmx5U2V0PERlZXBQYXJ0aWFsPFU+PlxuICA6IFQgZXh0ZW5kcyBXZWFrU2V0PGluZmVyIFU+XG4gID8gV2Vha1NldDxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT5cbiAgPyBUIGV4dGVuZHMgSXNUdXBsZTxUPlxuICAgID8geyBbSyBpbiBrZXlvZiBUXT86IERlZXBQYXJ0aWFsPFRbS10+IH1cbiAgICA6IEFycmF5PERlZXBQYXJ0aWFsPFU+PlxuICA6IFQgZXh0ZW5kcyBQcm9taXNlPGluZmVyIFU+XG4gID8gUHJvbWlzZTxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMge31cbiAgPyB7IFtLIGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtLXT4gfVxuICA6IFBhcnRpYWw8VD47XG5cbi8qKiBSZWN1cnNpdmUgbnVsbGFibGUgKi9cbmV4cG9ydCB0eXBlIERlZXBOdWxsYWJsZTxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluXG4gID8gVCB8IG51bGxcbiAgOiBUIGV4dGVuZHMgTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gTWFwPERlZXBOdWxsYWJsZTxLPiwgRGVlcE51bGxhYmxlPFY+PlxuICA6IFQgZXh0ZW5kcyBXZWFrTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gV2Vha01hcDxEZWVwTnVsbGFibGU8Sz4sIERlZXBOdWxsYWJsZTxWPj5cbiAgOiBUIGV4dGVuZHMgU2V0PGluZmVyIFU+XG4gID8gU2V0PERlZXBOdWxsYWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMgV2Vha1NldDxpbmZlciBVPlxuICA/IFdlYWtTZXQ8RGVlcE51bGxhYmxlPFU+PlxuICA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPlxuICA/IFQgZXh0ZW5kcyBJc1R1cGxlPFQ+XG4gICAgPyB7IFtLIGluIGtleW9mIFRdOiBEZWVwTnVsbGFibGU8VFtLXT4gfCBudWxsIH1cbiAgICA6IEFycmF5PERlZXBOdWxsYWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBVPlxuICA/IFByb21pc2U8RGVlcE51bGxhYmxlPFU+PlxuICA6IFQgZXh0ZW5kcyB7fVxuICA/IHsgW0sgaW4ga2V5b2YgVF06IERlZXBOdWxsYWJsZTxUW0tdPiB9XG4gIDogVCB8IG51bGw7XG5cbi8qKiBSZWN1cnNpdmUgdW5kZWZpbmFibGUgKi9cbmV4cG9ydCB0eXBlIERlZXBVbmRlZmluYWJsZTxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluXG4gID8gVCB8IHVuZGVmaW5lZFxuICA6IFQgZXh0ZW5kcyBNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBNYXA8RGVlcFVuZGVmaW5hYmxlPEs+LCBEZWVwVW5kZWZpbmFibGU8Vj4+XG4gIDogVCBleHRlbmRzIFdlYWtNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBXZWFrTWFwPERlZXBVbmRlZmluYWJsZTxLPiwgRGVlcFVuZGVmaW5hYmxlPFY+PlxuICA6IFQgZXh0ZW5kcyBTZXQ8aW5mZXIgVT5cbiAgPyBTZXQ8RGVlcFVuZGVmaW5hYmxlPFU+PlxuICA6IFQgZXh0ZW5kcyBXZWFrU2V0PGluZmVyIFU+XG4gID8gV2Vha1NldDxEZWVwVW5kZWZpbmFibGU8VT4+XG4gIDogVCBleHRlbmRzIEFycmF5PGluZmVyIFU+XG4gID8gVCBleHRlbmRzIElzVHVwbGU8VD5cbiAgICA/IHsgW0sgaW4ga2V5b2YgVF06IERlZXBVbmRlZmluYWJsZTxUW0tdPiB8IHVuZGVmaW5lZCB9XG4gICAgOiBBcnJheTxEZWVwVW5kZWZpbmFibGU8VT4+XG4gIDogVCBleHRlbmRzIFByb21pc2U8aW5mZXIgVT5cbiAgPyBQcm9taXNlPERlZXBVbmRlZmluYWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMge31cbiAgPyB7IFtLIGluIGtleW9mIFRdOiBEZWVwVW5kZWZpbmFibGU8VFtLXT4gfVxuICA6IFQgfCB1bmRlZmluZWQ7XG5cbi8qKiBMaWtlIE5vbk51bGxhYmxlIGJ1dCByZWN1cnNpdmUgKi9cbmV4cG9ydCB0eXBlIERlZXBOb25OdWxsYWJsZTxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluXG4gID8gTm9uTnVsbGFibGU8VD5cbiAgOiBUIGV4dGVuZHMgTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gTWFwPERlZXBOb25OdWxsYWJsZTxLPiwgRGVlcE5vbk51bGxhYmxlPFY+PlxuICA6IFQgZXh0ZW5kcyBSZWFkb25seU1hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IFJlYWRvbmx5TWFwPERlZXBOb25OdWxsYWJsZTxLPiwgRGVlcE5vbk51bGxhYmxlPFY+PlxuICA6IFQgZXh0ZW5kcyBXZWFrTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gV2Vha01hcDxEZWVwTm9uTnVsbGFibGU8Sz4sIERlZXBOb25OdWxsYWJsZTxWPj5cbiAgOiBUIGV4dGVuZHMgU2V0PGluZmVyIFU+XG4gID8gU2V0PERlZXBOb25OdWxsYWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlTZXQ8aW5mZXIgVT5cbiAgPyBSZWFkb25seVNldDxEZWVwTm9uTnVsbGFibGU8VT4+XG4gIDogVCBleHRlbmRzIFdlYWtTZXQ8aW5mZXIgVT5cbiAgPyBXZWFrU2V0PERlZXBOb25OdWxsYWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBVPlxuICA/IFByb21pc2U8RGVlcE5vbk51bGxhYmxlPFU+PlxuICA6IFQgZXh0ZW5kcyB7fVxuICA/IHsgW0sgaW4ga2V5b2YgVF06IERlZXBOb25OdWxsYWJsZTxUW0tdPiB9XG4gIDogTm9uTnVsbGFibGU8VD47XG5cbi8qKiBMaWtlIFJlcXVpcmVkIGJ1dCByZWN1cnNpdmUgKi9cbmV4cG9ydCB0eXBlIERlZXBSZXF1aXJlZDxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluXG4gID8gTm9uTnVsbGFibGU8VD5cbiAgOiBUIGV4dGVuZHMgTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gTWFwPERlZXBSZXF1aXJlZDxLPiwgRGVlcFJlcXVpcmVkPFY+PlxuICA6IFQgZXh0ZW5kcyBSZWFkb25seU1hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IFJlYWRvbmx5TWFwPERlZXBSZXF1aXJlZDxLPiwgRGVlcFJlcXVpcmVkPFY+PlxuICA6IFQgZXh0ZW5kcyBXZWFrTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gV2Vha01hcDxEZWVwUmVxdWlyZWQ8Sz4sIERlZXBSZXF1aXJlZDxWPj5cbiAgOiBUIGV4dGVuZHMgU2V0PGluZmVyIFU+XG4gID8gU2V0PERlZXBSZXF1aXJlZDxVPj5cbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlTZXQ8aW5mZXIgVT5cbiAgPyBSZWFkb25seVNldDxEZWVwUmVxdWlyZWQ8VT4+XG4gIDogVCBleHRlbmRzIFdlYWtTZXQ8aW5mZXIgVT5cbiAgPyBXZWFrU2V0PERlZXBSZXF1aXJlZDxVPj5cbiAgOiBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBVPlxuICA/IFByb21pc2U8RGVlcFJlcXVpcmVkPFU+PlxuICA6IFQgZXh0ZW5kcyB7fVxuICA/IHsgW0sgaW4ga2V5b2YgVF0tPzogRGVlcFJlcXVpcmVkPFRbS10+IH1cbiAgOiBOb25OdWxsYWJsZTxUPjtcblxuLyoqIExpa2UgUmVhZG9ubHkgYnV0IHJlY3Vyc2l2ZSAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlYWRvbmx5PFQ+ID0gVCBleHRlbmRzIEJ1aWx0aW5cbiAgPyBUXG4gIDogVCBleHRlbmRzIE1hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IFJlYWRvbmx5TWFwPERlZXBSZWFkb25seTxLPiwgRGVlcFJlYWRvbmx5PFY+PlxuICA6IFQgZXh0ZW5kcyBSZWFkb25seU1hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IFJlYWRvbmx5TWFwPERlZXBSZWFkb25seTxLPiwgRGVlcFJlYWRvbmx5PFY+PlxuICA6IFQgZXh0ZW5kcyBXZWFrTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gV2Vha01hcDxEZWVwUmVhZG9ubHk8Sz4sIERlZXBSZWFkb25seTxWPj5cbiAgOiBUIGV4dGVuZHMgU2V0PGluZmVyIFU+XG4gID8gUmVhZG9ubHlTZXQ8RGVlcFJlYWRvbmx5PFU+PlxuICA6IFQgZXh0ZW5kcyBSZWFkb25seVNldDxpbmZlciBVPlxuICA/IFJlYWRvbmx5U2V0PERlZXBSZWFkb25seTxVPj5cbiAgOiBUIGV4dGVuZHMgV2Vha1NldDxpbmZlciBVPlxuICA/IFdlYWtTZXQ8RGVlcFJlYWRvbmx5PFU+PlxuICA6IFQgZXh0ZW5kcyBQcm9taXNlPGluZmVyIFU+XG4gID8gUHJvbWlzZTxEZWVwUmVhZG9ubHk8VT4+XG4gIDogVCBleHRlbmRzIHt9XG4gID8geyByZWFkb25seSBbSyBpbiBrZXlvZiBUXTogRGVlcFJlYWRvbmx5PFRbS10+IH1cbiAgOiBSZWFkb25seTxUPjtcblxuLyoqIE1ha2UgcmVhZG9ubHkgb2JqZWN0IHdyaXRhYmxlICovXG5leHBvcnQgdHlwZSBXcml0YWJsZTxUPiA9IHsgLXJlYWRvbmx5IFtQIGluIGtleW9mIFRdOiBUW1BdIH07XG5cbi8qKiBMaWtlIFdyaXRhYmxlIGJ1dCByZWN1cnNpdmUgKi9cbmV4cG9ydCB0eXBlIERlZXBXcml0YWJsZTxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBNYXA8RGVlcFdyaXRhYmxlPEs+LCBEZWVwV3JpdGFibGU8Vj4+XG4gIDogVCBleHRlbmRzIFJlYWRvbmx5TWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gTWFwPERlZXBXcml0YWJsZTxLPiwgRGVlcFdyaXRhYmxlPFY+PlxuICA6IFQgZXh0ZW5kcyBXZWFrTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gV2Vha01hcDxEZWVwV3JpdGFibGU8Sz4sIERlZXBXcml0YWJsZTxWPj5cbiAgOiBUIGV4dGVuZHMgU2V0PGluZmVyIFU+XG4gID8gU2V0PERlZXBXcml0YWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlTZXQ8aW5mZXIgVT5cbiAgPyBTZXQ8RGVlcFdyaXRhYmxlPFU+PlxuICA6IFQgZXh0ZW5kcyBXZWFrU2V0PGluZmVyIFU+XG4gID8gV2Vha1NldDxEZWVwV3JpdGFibGU8VT4+XG4gIDogVCBleHRlbmRzIFByb21pc2U8aW5mZXIgVT5cbiAgPyBQcm9taXNlPERlZXBXcml0YWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMge31cbiAgPyB7IC1yZWFkb25seSBbSyBpbiBrZXlvZiBUXTogRGVlcFdyaXRhYmxlPFRbS10+IH1cbiAgOiBUO1xuXG4vKiogQ29tYmluYXRpb24gb2YgRGVlcFBhcnRpYWwgYW5kIERlZXBXcml0YWJsZSAqL1xuZXhwb3J0IHR5cGUgQnVpbGRhYmxlPFQ+ID0gRGVlcFBhcnRpYWw8RGVlcFdyaXRhYmxlPFQ+PjtcblxuLyoqIFNpbWlsYXIgdG8gdGhlIGJ1aWx0aW4gT21pdCwgYnV0IGNoZWNrcyB0aGUgZmlsdGVyIHN0cmljdGx5LiAqL1xuZXhwb3J0IHR5cGUgU3RyaWN0T21pdDxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBQaWNrPFQsIEV4Y2x1ZGU8a2V5b2YgVCwgSz4+O1xuXG4vKiogT21pdCBhbGwgcHJvcGVydGllcyBvZiBnaXZlbiB0eXBlIGluIG9iamVjdCB0eXBlICovXG5leHBvcnQgdHlwZSBPbWl0UHJvcGVydGllczxULCBQPiA9IFBpY2s8VCwgeyBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIFAgPyBuZXZlciA6IEsgfVtrZXlvZiBUXT47XG5cbi8qKiBQaWNrIGFsbCBwcm9wZXJ0aWVzIG9mIGdpdmVuIHR5cGUgaW4gb2JqZWN0IHR5cGUgKi9cbmV4cG9ydCB0eXBlIFBpY2tQcm9wZXJ0aWVzPFQsIFA+ID0gUGljazxULCB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgUCA/IEsgOiBuZXZlciB9W2tleW9mIFRdPjtcblxuLyoqIEdldHMga2V5cyBvZiBhbiBvYmplY3Qgd2hpY2ggYXJlIG9wdGlvbmFsICovXG5leHBvcnQgdHlwZSBPcHRpb25hbEtleXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdLT86IHVuZGVmaW5lZCBleHRlbmRzIHsgW0syIGluIGtleW9mIFRdOiBLMiB9W0tdID8gSyA6IG5ldmVyO1xufVtrZXlvZiBUXTtcblxuLyoqIEdldHMga2V5cyBvZiBhbiBvYmplY3Qgd2hpY2ggYXJlIHJlcXVpcmVkICovXG5leHBvcnQgdHlwZSBSZXF1aXJlZEtleXM8VD4gPSBFeGNsdWRlPGtleW9mIFQsIE9wdGlvbmFsS2V5czxUPj47XG5cbi8qKiBHZXRzIGtleXMgb2YgcHJvcGVydGllcyBvZiBnaXZlbiB0eXBlIGluIG9iamVjdCB0eXBlICovXG5leHBvcnQgdHlwZSBQaWNrS2V5czxULCBQPiA9IEV4Y2x1ZGU8a2V5b2YgUGlja1Byb3BlcnRpZXM8VCwgUD4sIHVuZGVmaW5lZD47XG5cbi8qKiBSZWN1cnNpdmVseSBvbWl0IGRlZXAgcHJvcGVydGllcyAqL1xuLy8gZXhwbGljaXRseSBtZW50aW9uaW5nIG9wdGlvbmFsIHByb3BlcnRpZXMsIHRvIHdvcmsgYXJvdW5kIFRTIG1ha2luZyB0aGVtIHJlcXVpcmVkXG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2tyemthY3pvci90cy1lc3NlbnRpYWxzL2lzc3Vlcy8xMThcbmV4cG9ydCB0eXBlIERlZXBPbWl0PFQgZXh0ZW5kcyBEZWVwT21pdE1vZGlmeTxGaWx0ZXI+LCBGaWx0ZXI+ID0gVCBleHRlbmRzIEJ1aWx0aW5cbiAgPyBUXG4gIDogVCBleHRlbmRzIE1hcDxpbmZlciBLZXlUeXBlLCBpbmZlciBWYWx1ZVR5cGU+XG4gID8gVmFsdWVUeXBlIGV4dGVuZHMgRGVlcE9taXRNb2RpZnk8RmlsdGVyPlxuICAgID8gTWFwPEtleVR5cGUsIERlZXBPbWl0PFZhbHVlVHlwZSwgRmlsdGVyPj5cbiAgICA6IFRcbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlNYXA8aW5mZXIgS2V5VHlwZSwgaW5mZXIgVmFsdWVUeXBlPlxuICA/IFZhbHVlVHlwZSBleHRlbmRzIERlZXBPbWl0TW9kaWZ5PEZpbHRlcj5cbiAgICA/IFJlYWRvbmx5TWFwPEtleVR5cGUsIERlZXBPbWl0PFZhbHVlVHlwZSwgRmlsdGVyPj5cbiAgICA6IFRcbiAgOiBUIGV4dGVuZHMgV2Vha01hcDxpbmZlciBLZXlUeXBlLCBpbmZlciBWYWx1ZVR5cGU+XG4gID8gVmFsdWVUeXBlIGV4dGVuZHMgRGVlcE9taXRNb2RpZnk8RmlsdGVyPlxuICAgID8gV2Vha01hcDxLZXlUeXBlLCBEZWVwT21pdDxWYWx1ZVR5cGUsIEZpbHRlcj4+XG4gICAgOiBUXG4gIDogVCBleHRlbmRzIFNldDxpbmZlciBJdGVtVHlwZT5cbiAgPyBJdGVtVHlwZSBleHRlbmRzIERlZXBPbWl0TW9kaWZ5PEZpbHRlcj5cbiAgICA/IFNldDxEZWVwT21pdDxJdGVtVHlwZSwgRmlsdGVyPj5cbiAgICA6IFRcbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlTZXQ8aW5mZXIgSXRlbVR5cGU+XG4gID8gSXRlbVR5cGUgZXh0ZW5kcyBEZWVwT21pdE1vZGlmeTxGaWx0ZXI+XG4gICAgPyBSZWFkb25seVNldDxEZWVwT21pdDxJdGVtVHlwZSwgRmlsdGVyPj5cbiAgICA6IFRcbiAgOiBUIGV4dGVuZHMgV2Vha1NldDxpbmZlciBJdGVtVHlwZT5cbiAgPyBJdGVtVHlwZSBleHRlbmRzIERlZXBPbWl0TW9kaWZ5PEZpbHRlcj5cbiAgICA/IFdlYWtTZXQ8RGVlcE9taXQ8SXRlbVR5cGUsIEZpbHRlcj4+XG4gICAgOiBUXG4gIDogVCBleHRlbmRzIEFycmF5PGluZmVyIEl0ZW1UeXBlPlxuICA/IEl0ZW1UeXBlIGV4dGVuZHMgRGVlcE9taXRNb2RpZnk8RmlsdGVyPlxuICAgID8gQXJyYXk8RGVlcE9taXQ8SXRlbVR5cGUsIEZpbHRlcj4+XG4gICAgOiBUXG4gIDogVCBleHRlbmRzIFByb21pc2U8aW5mZXIgSXRlbVR5cGU+XG4gID8gSXRlbVR5cGUgZXh0ZW5kcyBEZWVwT21pdE1vZGlmeTxGaWx0ZXI+XG4gICAgPyBQcm9taXNlPERlZXBPbWl0PEl0ZW1UeXBlLCBGaWx0ZXI+PlxuICAgIDogVFxuICA6IHsgW0sgaW4gRXhjbHVkZTxPcHRpb25hbEtleXM8VD4sIGtleW9mIEZpbHRlcj5dKz86IFRbS10gfSAmXG4gICAgICBPbWl0UHJvcGVydGllczxcbiAgICAgICAge1xuICAgICAgICAgIFtLIGluIEV4dHJhY3Q8T3B0aW9uYWxLZXlzPFQ+LCBrZXlvZiBGaWx0ZXI+XSs/OiBGaWx0ZXJbS10gZXh0ZW5kcyB0cnVlXG4gICAgICAgICAgICA/IG5ldmVyXG4gICAgICAgICAgICA6IFRbS10gZXh0ZW5kcyBEZWVwT21pdE1vZGlmeTxGaWx0ZXJbS10+XG4gICAgICAgICAgICA/IERlZXBPbWl0PFRbS10sIEZpbHRlcltLXT5cbiAgICAgICAgICAgIDogVFtLXTtcbiAgICAgICAgfSxcbiAgICAgICAgbmV2ZXJcbiAgICAgID4gJlxuICAgICAgeyBbSyBpbiBFeGNsdWRlPFJlcXVpcmVkS2V5czxUPiwga2V5b2YgRmlsdGVyPl06IFRbS10gfSAmXG4gICAgICBPbWl0UHJvcGVydGllczxcbiAgICAgICAge1xuICAgICAgICAgIFtLIGluIEV4dHJhY3Q8UmVxdWlyZWRLZXlzPFQ+LCBrZXlvZiBGaWx0ZXI+XTogRmlsdGVyW0tdIGV4dGVuZHMgdHJ1ZVxuICAgICAgICAgICAgPyBuZXZlclxuICAgICAgICAgICAgOiBUW0tdIGV4dGVuZHMgRGVlcE9taXRNb2RpZnk8RmlsdGVyW0tdPlxuICAgICAgICAgICAgPyBEZWVwT21pdDxUW0tdLCBGaWx0ZXJbS10+XG4gICAgICAgICAgICA6IFRbS107XG4gICAgICAgIH0sXG4gICAgICAgIG5ldmVyXG4gICAgICA+O1xudHlwZSBEZWVwT21pdE1vZGlmeTxUPiA9XG4gIHwge1xuICAgICAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBuZXZlciA/IGFueSA6IFRbS10gZXh0ZW5kcyBvYmplY3QgPyBEZWVwT21pdE1vZGlmeTxUW0tdPiA6IG5ldmVyO1xuICAgIH1cbiAgfCBBcnJheTxEZWVwT21pdE1vZGlmeTxUPj5cbiAgfCBQcm9taXNlPERlZXBPbWl0TW9kaWZ5PFQ+PlxuICB8IFNldDxEZWVwT21pdE1vZGlmeTxUPj5cbiAgfCBSZWFkb25seVNldDxEZWVwT21pdE1vZGlmeTxUPj5cbiAgfCBXZWFrU2V0PERlZXBPbWl0TW9kaWZ5PFQ+PlxuICB8IE1hcDxhbnksIERlZXBPbWl0TW9kaWZ5PFQ+PlxuICB8IFdlYWtNYXA8YW55LCBEZWVwT21pdE1vZGlmeTxUPj47XG5cbi8qKiBSZW1vdmUga2V5cyB3aXRoIGBuZXZlcmAgdmFsdWUgZnJvbSBvYmplY3QgdHlwZSAqL1xuZXhwb3J0IHR5cGUgTm9uTmV2ZXI8VCBleHRlbmRzIHt9PiA9IFBpY2s8VCwgeyBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIG5ldmVyID8gbmV2ZXIgOiBLIH1ba2V5b2YgVF0+O1xuXG5leHBvcnQgdHlwZSBOb25FbXB0eU9iamVjdDxUIGV4dGVuZHMge30+ID0ga2V5b2YgVCBleHRlbmRzIG5ldmVyID8gbmV2ZXIgOiBUO1xuXG4vKiogTWVyZ2UgMiB0eXBlcywgcHJvcGVydGllcyB0eXBlcyBmcm9tIHRoZSBsYXR0ZXIgb3ZlcnJpZGUgdGhlIG9uZXMgZGVmaW5lZCBvbiB0aGUgZm9ybWVyIHR5cGUgKi9cbmV4cG9ydCB0eXBlIE1lcmdlPE0sIE4+ID0gT21pdDxNLCBrZXlvZiBOPiAmIE47XG5cbi8qKiBNYXJrIHNvbWUgcHJvcGVydGllcyBhcyByZXF1aXJlZCwgbGVhdmluZyBvdGhlcnMgdW5jaGFuZ2VkICovXG5leHBvcnQgdHlwZSBNYXJrUmVxdWlyZWQ8VCwgUksgZXh0ZW5kcyBrZXlvZiBUPiA9IEV4Y2x1ZGU8VCwgUks+ICYgUmVxdWlyZWQ8UGljazxULCBSSz4+O1xuXG4vKiogTWFyayBzb21lIHByb3BlcnRpZXMgYXMgb3B0aW9uYWwsIGxlYXZpbmcgb3RoZXJzIHVuY2hhbmdlZCAqL1xuZXhwb3J0IHR5cGUgTWFya09wdGlvbmFsPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IE9taXQ8VCwgSz4gJiBQYXJ0aWFsPFBpY2s8VCwgSz4+O1xuXG4vKiogQ29udmVydCB1bmlvbiB0eXBlIHRvIGludGVyc2VjdGlvbiAjZGFya21hZ2ljICovXG5leHBvcnQgdHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFU+ID0gKFUgZXh0ZW5kcyBhbnkgPyAoazogVSkgPT4gdm9pZCA6IG5ldmVyKSBleHRlbmRzIChrOiBpbmZlciBJKSA9PiB2b2lkID8gSSA6IG5ldmVyO1xuXG50eXBlIFN0cmluZ0xpdGVyYWw8VD4gPSBUIGV4dGVuZHMgc3RyaW5nID8gKHN0cmluZyBleHRlbmRzIFQgPyBuZXZlciA6IFQpIDogbmV2ZXI7XG5cbmRlY2xhcmUgY29uc3QgX19PUEFRVUVfVFlQRV9fOiB1bmlxdWUgc3ltYm9sO1xuXG4vKiogRWFzaWx5IGNyZWF0ZSBvcGFxdWUgdHlwZXMgaWUuIHR5cGVzIHRoYXQgYXJlIHN1YnNldCBvZiB0aGVpciBvcmlnaW5hbCB0eXBlcyAoZXg6IHBvc2l0aXZlIG51bWJlcnMsIHVwcGVyY2FzZWQgc3RyaW5nKSAqL1xuZXhwb3J0IHR5cGUgT3BhcXVlPFR5cGUsIFRva2VuIGV4dGVuZHMgc3RyaW5nPiA9IFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbDxUb2tlbj5cbiAgPyBUeXBlICYgeyByZWFkb25seSBbX19PUEFRVUVfVFlQRV9fXTogVG9rZW4gfVxuICA6IG5ldmVyO1xuXG4vKiogRWFzaWx5IGV4dHJhY3QgdGhlIHR5cGUgb2YgYSBnaXZlbiBvYmplY3QncyB2YWx1ZXMgKi9cbmV4cG9ydCB0eXBlIFZhbHVlT2Y8VD4gPSBUW2tleW9mIFRdO1xuXG4vKiogRWFzaWx5IGV4dHJhY3QgdGhlIHR5cGUgb2YgYSBnaXZlbiBhcnJheSdzIGVsZW1lbnRzICovXG5leHBvcnQgdHlwZSBFbGVtZW50T2Y8VCBleHRlbmRzIHJlYWRvbmx5IGFueVtdPiA9IFQgZXh0ZW5kcyByZWFkb25seSAoaW5mZXIgRVQpW10gPyBFVCA6IG5ldmVyO1xuXG4vKiogVHlwZSBjb25zdHJhaW50IGZvciB0dXBsZSBpbmZlcmVuY2UgKi9cbmV4cG9ydCB0eXBlIFR1cGxlPFQgPSBhbnk+ID0gW1RdIHwgVFtdO1xuXG4vKiogVXNlZnVsIGFzIGEgcmV0dXJuIHR5cGUgaW4gaW50ZXJmYWNlcyBvciBhYnN0cmFjdCBjbGFzc2VzIHdpdGggbWlzc2luZyBpbXBsZW1lbnRhdGlvbiAqL1xuZXhwb3J0IHR5cGUgQXN5bmNPclN5bmM8VD4gPSBQcm9taXNlTGlrZTxUPiB8IFQ7XG5cbmV4cG9ydCB0eXBlIEF3YWl0ZWQ8VD4gPSBUIGV4dGVuZHMgUHJvbWlzZUxpa2U8aW5mZXIgUFQ+ID8gUFQgOiBuZXZlcjtcbmV4cG9ydCB0eXBlIEFzeW5jT3JTeW5jVHlwZTxUPiA9IFQgZXh0ZW5kcyBBc3luY09yU3luYzxpbmZlciBQVD4gPyBQVCA6IG5ldmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ld2FibGU8VD4ge1xuICBuZXcgKC4uLmFyZ3M6IGFueVtdKTogVDtcbn1cblxuLy8gQSBoZWxwZXIgZm9yIGBSZWFkb25seUtleXNgICYgYFdyaXRhYmxlS2V5c2Bcbi8vIFRoaXMgcG90ZW50aWFsbHkgYWJ1c2VzIGNvbXBpbGVyIHNvbWUgaW5jb25zaXN0ZW5jaWVzIGluIGNoZWNraW5nIHR5cGUgZXF1YWxpdHkgZm9yIGdlbmVyaWNzLFxuLy8gYmVjYXVzZSBub3JtYWxseSBgcmVhZG9ubHlgIGRvZXNuJ3QgYWZmZWN0IHdoZXRoZXIgdHlwZXMgYXJlIGFzc2lnbmFibGUuXG4vLyBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MjQ3MzEwOC8xODE1MjA5IHdpdGggY29tbWVudHNcbnR5cGUgSXNFcXVhbENvbnNpZGVyaW5nV3JpdGFiaWxpdHk8WCwgWT4gPSAoPFQ+KCkgPT4gVCBleHRlbmRzIFggPyAxIDogMikgZXh0ZW5kcyA8VD4oKSA9PiBUIGV4dGVuZHMgWSA/IDEgOiAyXG4gID8gdHJ1ZVxuICA6IGZhbHNlO1xuXG4vLyBUaGlzIGFsc28gcHJvYmFibHkgdXNlcyBzb21lIGluY29uc2lzdGVuY2llcyAtLSBldmVuIHRob3VnaCBpdCBfc2hvdWxkXyBiZSB0aGUgc2FtZSB0byBqdXN0IHVzZVxuLy8gYFQsIFdyaXRhYmxlPFQ+YCBmb3IgZ2VuZXJpYyBhcmd1bWVudHMsIGl0IHN0b3BzIHdvcmtpbmcgdGhlbiwgYWx3YXlzIGV2YWx1YXRpbmcgdG8gYGZhbHNlYC5cbi8vIFN3YXBwaW5nIGBXcml0YWJsZWAgdG8gYFJlYWRhYmxlYCBhbHdheXMgcmV0dXJucyBmYWxzZSB0b28sIGluc3RlYWQgb2YgeWllbGRpbmcgb3Bwb3NpdGUgcmVzdWx0cy5cbnR5cGUgSXNGdWxseVdyaXRhYmxlPFQgZXh0ZW5kcyBvYmplY3Q+ID0gSXNFcXVhbENvbnNpZGVyaW5nV3JpdGFiaWxpdHk8XG4gIHsgW1EgaW4ga2V5b2YgVF06IFRbUV0gfSxcbiAgV3JpdGFibGU8eyBbUSBpbiBrZXlvZiBUXTogVFtRXSB9PlxuPjtcblxuLyoqIEdldHMga2V5cyBvZiBhbiBvYmplY3Qgd2hpY2ggYXJlIHJlYWRvbmx5ICovXG5leHBvcnQgdHlwZSBSZWFkb25seUtleXM8VCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtQIGluIGtleW9mIFRdLT86IElzRnVsbHlXcml0YWJsZTxQaWNrPFQsIFA+PiBleHRlbmRzIHRydWUgPyBuZXZlciA6IFA7XG59W2tleW9mIFRdO1xuXG4vKiogR2V0cyBrZXlzIG9mIGFuIG9iamVjdCB3aGljaCBhcmUgd3JpdGFibGUgKi9cbmV4cG9ydCB0eXBlIFdyaXRhYmxlS2V5czxUIGV4dGVuZHMge30+ID0ge1xuICBbUCBpbiBrZXlvZiBUXS0/OiBJc0Z1bGx5V3JpdGFibGU8UGljazxULCBQPj4gZXh0ZW5kcyB0cnVlID8gUCA6IG5ldmVyO1xufVtrZXlvZiBUXTtcblxuLyoqIE1hcmsgc29tZSBwcm9wZXJ0aWVzIHdoaWNoIG9ubHkgdGhlIGZvcm1lciBpbmNsdWRpbmcgYXMgb3B0aW9uYWwgYW5kIHNldCB0aGUgdmFsdWUgdG8gbmV2ZXIgKi9cbnR5cGUgV2l0aG91dDxULCBVPiA9IHsgW1AgaW4gRXhjbHVkZTxrZXlvZiBULCBrZXlvZiBVPl0/OiBuZXZlciB9O1xuXG4vKiogZ2V0IHRoZSBYT1IgdHlwZSB3aGljaCBjb3VsZCBtYWtlIDIgdHlwZXMgZXhjbHVkZSBlYWNoIG90aGVyICovXG5leHBvcnQgdHlwZSBYT1I8VCwgVT4gPSBUIHwgVSBleHRlbmRzIG9iamVjdCA/IChXaXRob3V0PFQsIFU+ICYgVSkgfCAoV2l0aG91dDxVLCBUPiAmIFQpIDogVCB8IFU7XG5cbi8qKiBGdW5jdGlvbmFsIHByb2dyYW1taW5nIGVzc2VudGlhbHMgKi9cbmV4cG9ydCB0eXBlIEhlYWQ8VCBleHRlbmRzIEFueUFycmF5PiA9IFRbXCJsZW5ndGhcIl0gZXh0ZW5kcyAwID8gbmV2ZXIgOiBUWzBdO1xuZXhwb3J0IHR5cGUgVGFpbDxUIGV4dGVuZHMgQW55QXJyYXk+ID0gVFtcImxlbmd0aFwiXSBleHRlbmRzIDBcbiAgPyBuZXZlclxuICA6ICgoLi4udDogVCkgPT4gdm9pZCkgZXh0ZW5kcyAoZmlyc3Q6IGFueSwgLi4ucmVzdDogaW5mZXIgUmVzdCkgPT4gdm9pZFxuICA/IFJlc3RcbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgRXhhY3Q8VCwgU0hBUEU+ID0gVCBleHRlbmRzIFNIQVBFID8gKEV4Y2x1ZGU8a2V5b2YgVCwga2V5b2YgU0hBUEU+IGV4dGVuZHMgbmV2ZXIgPyBUIDogbmV2ZXIpIDogbmV2ZXI7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBFc3NlbnRpYWxzICovXG5leHBvcnQgdHlwZSBQcmltaXRpdmUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgYmlnaW50IHwgc3ltYm9sIHwgdW5kZWZpbmVkIHwgbnVsbDtcbmV4cG9ydCB0eXBlIEJ1aWx0aW4gPSBQcmltaXRpdmUgfCBGdW5jdGlvbiB8IERhdGUgfCBFcnJvciB8IFJlZ0V4cDtcbmV4cG9ydCB0eXBlIElzVHVwbGU8VD4gPSBUIGV4dGVuZHMgYW55W10gPyAoYW55W10gZXh0ZW5kcyBUID8gbmV2ZXIgOiBUKSA6IG5ldmVyO1xuZXhwb3J0IHR5cGUgQW55QXJyYXk8VCA9IGFueT4gPSBBcnJheTxUPiB8IFJlYWRvbmx5QXJyYXk8VD47XG5cbi8qKlxuICogTGlrZSBSZWNvcmQsIGJ1dCBjYW4gYmUgdXNlZCB3aXRoIG9ubHkgb25lIGFyZ3VtZW50LlxuICogVXNlZnVsLCBpZiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBhbGwgb2YgdGhlIGtleXMgb2YgYSBmaW5pdGUgdHlwZSBhcmUgdXNlZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGljdGlvbmFyeTxULCBLIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID0gc3RyaW5nPiA9IHsgW2tleSBpbiBLXTogVCB9O1xuLyoqIEdpdmVuIERpY3Rpb25hcnk8VD4gcmV0dXJucyBUICovXG5leHBvcnQgdHlwZSBEaWN0aW9uYXJ5VmFsdWVzPFQ+ID0gVCBleHRlbmRzIERpY3Rpb25hcnk8aW5mZXIgVT4gPyBVIDogbmV2ZXI7XG4vKipcbiAqIExpa2UgRGljdGlvbmFyeSwgYnV0OlxuICogIC0gZW5zdXJlcyB0eXBlIHNhZmV0eSBvZiBpbmRleCBhY2Nlc3NcbiAqICAtIGRvZXMgbm90IGVuZm9yY2Uga2V5IGV4aGF1c3RpdmVuZXNzXG4gKi9cbmV4cG9ydCB0eXBlIFNhZmVEaWN0aW9uYXJ5PFQsIEsgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgPSBzdHJpbmc+ID0geyBba2V5IGluIEtdPzogVCB9O1xuXG4vKiogTGlrZSBQYXJ0aWFsIGJ1dCByZWN1cnNpdmUgKi9cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIEJ1aWx0aW5cbiAgPyBUXG4gIDogVCBleHRlbmRzIE1hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IE1hcDxEZWVwUGFydGlhbDxLPiwgRGVlcFBhcnRpYWw8Vj4+XG4gIDogVCBleHRlbmRzIFJlYWRvbmx5TWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gUmVhZG9ubHlNYXA8RGVlcFBhcnRpYWw8Sz4sIERlZXBQYXJ0aWFsPFY+PlxuICA6IFQgZXh0ZW5kcyBXZWFrTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gV2Vha01hcDxEZWVwUGFydGlhbDxLPiwgRGVlcFBhcnRpYWw8Vj4+XG4gIDogVCBleHRlbmRzIFNldDxpbmZlciBVPlxuICA/IFNldDxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlTZXQ8aW5mZXIgVT5cbiAgPyBSZWFkb25seVNldDxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgV2Vha1NldDxpbmZlciBVPlxuICA/IFdlYWtTZXQ8RGVlcFBhcnRpYWw8VT4+XG4gIDogVCBleHRlbmRzIEFycmF5PGluZmVyIFU+XG4gID8gVCBleHRlbmRzIElzVHVwbGU8VD5cbiAgICA/IHsgW0sgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW0tdPiB9XG4gICAgOiBBcnJheTxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBVPlxuICA/IFByb21pc2U8RGVlcFBhcnRpYWw8VT4+XG4gIDogVCBleHRlbmRzIHt9XG4gID8geyBbSyBpbiBrZXlvZiBUXT86IERlZXBQYXJ0aWFsPFRbS10+IH1cbiAgOiBQYXJ0aWFsPFQ+O1xuXG4vKiogUmVjdXJzaXZlIG51bGxhYmxlICovXG5leHBvcnQgdHlwZSBEZWVwTnVsbGFibGU8VD4gPSBUIGV4dGVuZHMgQnVpbHRpblxuICA/IFQgfCBudWxsXG4gIDogVCBleHRlbmRzIE1hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IE1hcDxEZWVwTnVsbGFibGU8Sz4sIERlZXBOdWxsYWJsZTxWPj5cbiAgOiBUIGV4dGVuZHMgV2Vha01hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IFdlYWtNYXA8RGVlcE51bGxhYmxlPEs+LCBEZWVwTnVsbGFibGU8Vj4+XG4gIDogVCBleHRlbmRzIFNldDxpbmZlciBVPlxuICA/IFNldDxEZWVwTnVsbGFibGU8VT4+XG4gIDogVCBleHRlbmRzIFdlYWtTZXQ8aW5mZXIgVT5cbiAgPyBXZWFrU2V0PERlZXBOdWxsYWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT5cbiAgPyBUIGV4dGVuZHMgSXNUdXBsZTxUPlxuICAgID8geyBbSyBpbiBrZXlvZiBUXTogRGVlcE51bGxhYmxlPFRbS10+IHwgbnVsbCB9XG4gICAgOiBBcnJheTxEZWVwTnVsbGFibGU8VT4+XG4gIDogVCBleHRlbmRzIFByb21pc2U8aW5mZXIgVT5cbiAgPyBQcm9taXNlPERlZXBOdWxsYWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMge31cbiAgPyB7IFtLIGluIGtleW9mIFRdOiBEZWVwTnVsbGFibGU8VFtLXT4gfVxuICA6IFQgfCBudWxsO1xuXG4vKiogUmVjdXJzaXZlIHVuZGVmaW5hYmxlICovXG5leHBvcnQgdHlwZSBEZWVwVW5kZWZpbmFibGU8VD4gPSBUIGV4dGVuZHMgQnVpbHRpblxuICA/IFQgfCB1bmRlZmluZWRcbiAgOiBUIGV4dGVuZHMgTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gTWFwPERlZXBVbmRlZmluYWJsZTxLPiwgRGVlcFVuZGVmaW5hYmxlPFY+PlxuICA6IFQgZXh0ZW5kcyBXZWFrTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gV2Vha01hcDxEZWVwVW5kZWZpbmFibGU8Sz4sIERlZXBVbmRlZmluYWJsZTxWPj5cbiAgOiBUIGV4dGVuZHMgU2V0PGluZmVyIFU+XG4gID8gU2V0PERlZXBVbmRlZmluYWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMgV2Vha1NldDxpbmZlciBVPlxuICA/IFdlYWtTZXQ8RGVlcFVuZGVmaW5hYmxlPFU+PlxuICA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPlxuICA/IFQgZXh0ZW5kcyBJc1R1cGxlPFQ+XG4gICAgPyB7IFtLIGluIGtleW9mIFRdOiBEZWVwVW5kZWZpbmFibGU8VFtLXT4gfCB1bmRlZmluZWQgfVxuICAgIDogQXJyYXk8RGVlcFVuZGVmaW5hYmxlPFU+PlxuICA6IFQgZXh0ZW5kcyBQcm9taXNlPGluZmVyIFU+XG4gID8gUHJvbWlzZTxEZWVwVW5kZWZpbmFibGU8VT4+XG4gIDogVCBleHRlbmRzIHt9XG4gID8geyBbSyBpbiBrZXlvZiBUXTogRGVlcFVuZGVmaW5hYmxlPFRbS10+IH1cbiAgOiBUIHwgdW5kZWZpbmVkO1xuXG4vKiogTGlrZSBOb25OdWxsYWJsZSBidXQgcmVjdXJzaXZlICovXG5leHBvcnQgdHlwZSBEZWVwTm9uTnVsbGFibGU8VD4gPSBUIGV4dGVuZHMgQnVpbHRpblxuICA/IE5vbk51bGxhYmxlPFQ+XG4gIDogVCBleHRlbmRzIE1hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IE1hcDxEZWVwTm9uTnVsbGFibGU8Sz4sIERlZXBOb25OdWxsYWJsZTxWPj5cbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBSZWFkb25seU1hcDxEZWVwTm9uTnVsbGFibGU8Sz4sIERlZXBOb25OdWxsYWJsZTxWPj5cbiAgOiBUIGV4dGVuZHMgV2Vha01hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IFdlYWtNYXA8RGVlcE5vbk51bGxhYmxlPEs+LCBEZWVwTm9uTnVsbGFibGU8Vj4+XG4gIDogVCBleHRlbmRzIFNldDxpbmZlciBVPlxuICA/IFNldDxEZWVwTm9uTnVsbGFibGU8VT4+XG4gIDogVCBleHRlbmRzIFJlYWRvbmx5U2V0PGluZmVyIFU+XG4gID8gUmVhZG9ubHlTZXQ8RGVlcE5vbk51bGxhYmxlPFU+PlxuICA6IFQgZXh0ZW5kcyBXZWFrU2V0PGluZmVyIFU+XG4gID8gV2Vha1NldDxEZWVwTm9uTnVsbGFibGU8VT4+XG4gIDogVCBleHRlbmRzIFByb21pc2U8aW5mZXIgVT5cbiAgPyBQcm9taXNlPERlZXBOb25OdWxsYWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMge31cbiAgPyB7IFtLIGluIGtleW9mIFRdOiBEZWVwTm9uTnVsbGFibGU8VFtLXT4gfVxuICA6IE5vbk51bGxhYmxlPFQ+O1xuXG4vKiogTGlrZSBSZXF1aXJlZCBidXQgcmVjdXJzaXZlICovXG5leHBvcnQgdHlwZSBEZWVwUmVxdWlyZWQ8VD4gPSBUIGV4dGVuZHMgQnVpbHRpblxuICA/IE5vbk51bGxhYmxlPFQ+XG4gIDogVCBleHRlbmRzIE1hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IE1hcDxEZWVwUmVxdWlyZWQ8Sz4sIERlZXBSZXF1aXJlZDxWPj5cbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBSZWFkb25seU1hcDxEZWVwUmVxdWlyZWQ8Sz4sIERlZXBSZXF1aXJlZDxWPj5cbiAgOiBUIGV4dGVuZHMgV2Vha01hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IFdlYWtNYXA8RGVlcFJlcXVpcmVkPEs+LCBEZWVwUmVxdWlyZWQ8Vj4+XG4gIDogVCBleHRlbmRzIFNldDxpbmZlciBVPlxuICA/IFNldDxEZWVwUmVxdWlyZWQ8VT4+XG4gIDogVCBleHRlbmRzIFJlYWRvbmx5U2V0PGluZmVyIFU+XG4gID8gUmVhZG9ubHlTZXQ8RGVlcFJlcXVpcmVkPFU+PlxuICA6IFQgZXh0ZW5kcyBXZWFrU2V0PGluZmVyIFU+XG4gID8gV2Vha1NldDxEZWVwUmVxdWlyZWQ8VT4+XG4gIDogVCBleHRlbmRzIFByb21pc2U8aW5mZXIgVT5cbiAgPyBQcm9taXNlPERlZXBSZXF1aXJlZDxVPj5cbiAgOiBUIGV4dGVuZHMge31cbiAgPyB7IFtLIGluIGtleW9mIFRdLT86IERlZXBSZXF1aXJlZDxUW0tdPiB9XG4gIDogTm9uTnVsbGFibGU8VD47XG5cbi8qKiBMaWtlIFJlYWRvbmx5IGJ1dCByZWN1cnNpdmUgKi9cbmV4cG9ydCB0eXBlIERlZXBSZWFkb25seTxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBSZWFkb25seU1hcDxEZWVwUmVhZG9ubHk8Sz4sIERlZXBSZWFkb25seTxWPj5cbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBSZWFkb25seU1hcDxEZWVwUmVhZG9ubHk8Sz4sIERlZXBSZWFkb25seTxWPj5cbiAgOiBUIGV4dGVuZHMgV2Vha01hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IFdlYWtNYXA8RGVlcFJlYWRvbmx5PEs+LCBEZWVwUmVhZG9ubHk8Vj4+XG4gIDogVCBleHRlbmRzIFNldDxpbmZlciBVPlxuICA/IFJlYWRvbmx5U2V0PERlZXBSZWFkb25seTxVPj5cbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlTZXQ8aW5mZXIgVT5cbiAgPyBSZWFkb25seVNldDxEZWVwUmVhZG9ubHk8VT4+XG4gIDogVCBleHRlbmRzIFdlYWtTZXQ8aW5mZXIgVT5cbiAgPyBXZWFrU2V0PERlZXBSZWFkb25seTxVPj5cbiAgOiBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBVPlxuICA/IFByb21pc2U8RGVlcFJlYWRvbmx5PFU+PlxuICA6IFQgZXh0ZW5kcyB7fVxuICA/IHsgcmVhZG9ubHkgW0sgaW4ga2V5b2YgVF06IERlZXBSZWFkb25seTxUW0tdPiB9XG4gIDogdW5rbm93biBleHRlbmRzIFRcbiAgPyB1bmtub3duXG4gIDogUmVhZG9ubHk8VD47XG5cbi8qKiBNYWtlIHJlYWRvbmx5IG9iamVjdCB3cml0YWJsZSAqL1xuZXhwb3J0IHR5cGUgV3JpdGFibGU8VD4gPSB7IC1yZWFkb25seSBbUCBpbiBrZXlvZiBUXTogVFtQXSB9O1xuXG4vKiogTGlrZSBXcml0YWJsZSBidXQgcmVjdXJzaXZlICovXG5leHBvcnQgdHlwZSBEZWVwV3JpdGFibGU8VD4gPSBUIGV4dGVuZHMgQnVpbHRpblxuICA/IFRcbiAgOiBUIGV4dGVuZHMgTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gTWFwPERlZXBXcml0YWJsZTxLPiwgRGVlcFdyaXRhYmxlPFY+PlxuICA6IFQgZXh0ZW5kcyBSZWFkb25seU1hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IE1hcDxEZWVwV3JpdGFibGU8Sz4sIERlZXBXcml0YWJsZTxWPj5cbiAgOiBUIGV4dGVuZHMgV2Vha01hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IFdlYWtNYXA8RGVlcFdyaXRhYmxlPEs+LCBEZWVwV3JpdGFibGU8Vj4+XG4gIDogVCBleHRlbmRzIFNldDxpbmZlciBVPlxuICA/IFNldDxEZWVwV3JpdGFibGU8VT4+XG4gIDogVCBleHRlbmRzIFJlYWRvbmx5U2V0PGluZmVyIFU+XG4gID8gU2V0PERlZXBXcml0YWJsZTxVPj5cbiAgOiBUIGV4dGVuZHMgV2Vha1NldDxpbmZlciBVPlxuICA/IFdlYWtTZXQ8RGVlcFdyaXRhYmxlPFU+PlxuICA6IFQgZXh0ZW5kcyBQcm9taXNlPGluZmVyIFU+XG4gID8gUHJvbWlzZTxEZWVwV3JpdGFibGU8VT4+XG4gIDogVCBleHRlbmRzIHt9XG4gID8geyAtcmVhZG9ubHkgW0sgaW4ga2V5b2YgVF06IERlZXBXcml0YWJsZTxUW0tdPiB9XG4gIDogVDtcblxuLyoqIENvbWJpbmF0aW9uIG9mIERlZXBQYXJ0aWFsIGFuZCBEZWVwV3JpdGFibGUgKi9cbmV4cG9ydCB0eXBlIEJ1aWxkYWJsZTxUPiA9IERlZXBQYXJ0aWFsPERlZXBXcml0YWJsZTxUPj47XG5cbi8qKiBTaW1pbGFyIHRvIHRoZSBidWlsdGluIE9taXQsIGJ1dCBjaGVja3MgdGhlIGZpbHRlciBzdHJpY3RseS4gKi9cbmV4cG9ydCB0eXBlIFN0cmljdE9taXQ8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gUGljazxULCBFeGNsdWRlPGtleW9mIFQsIEs+PjtcblxuLyoqIFNpbWlsYXIgdG8gdGhlIGJ1aWx0aW4gRXh0cmFjdCwgYnV0IGNoZWNrcyB0aGUgZmlsdGVyIHN0cmljdGx5ICovXG5leHBvcnQgdHlwZSBTdHJpY3RFeHRyYWN0PFQsIFUgZXh0ZW5kcyBQYXJ0aWFsPFQ+PiA9IEV4dHJhY3Q8VCwgVT47XG5cbi8qKiBPbWl0IGFsbCBwcm9wZXJ0aWVzIG9mIGdpdmVuIHR5cGUgaW4gb2JqZWN0IHR5cGUgKi9cbmV4cG9ydCB0eXBlIE9taXRQcm9wZXJ0aWVzPFQsIFA+ID0gUGljazxULCB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgUCA/IG5ldmVyIDogSyB9W2tleW9mIFRdPjtcblxuLyoqIFBpY2sgYWxsIHByb3BlcnRpZXMgb2YgZ2l2ZW4gdHlwZSBpbiBvYmplY3QgdHlwZSAqL1xuZXhwb3J0IHR5cGUgUGlja1Byb3BlcnRpZXM8VCwgUD4gPSBQaWNrPFQsIHsgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBQID8gSyA6IG5ldmVyIH1ba2V5b2YgVF0+O1xuXG4vKiogR2V0cyBrZXlzIG9mIGFuIG9iamVjdCB3aGljaCBhcmUgb3B0aW9uYWwgKi9cbmV4cG9ydCB0eXBlIE9wdGlvbmFsS2V5czxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzogdW5kZWZpbmVkIGV4dGVuZHMgeyBbSzIgaW4ga2V5b2YgVF06IEsyIH1bS10gPyBLIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuXG4vKiogR2V0cyBrZXlzIG9mIGFuIG9iamVjdCB3aGljaCBhcmUgcmVxdWlyZWQgKi9cbmV4cG9ydCB0eXBlIFJlcXVpcmVkS2V5czxUPiA9IEV4Y2x1ZGU8a2V5b2YgVCwgT3B0aW9uYWxLZXlzPFQ+PjtcblxuLyoqIEdldHMga2V5cyBvZiBwcm9wZXJ0aWVzIG9mIGdpdmVuIHR5cGUgaW4gb2JqZWN0IHR5cGUgKi9cbmV4cG9ydCB0eXBlIFBpY2tLZXlzPFQsIFA+ID0gRXhjbHVkZTxrZXlvZiBQaWNrUHJvcGVydGllczxULCBQPiwgdW5kZWZpbmVkPjtcblxuLyoqIFJlY3Vyc2l2ZWx5IG9taXQgZGVlcCBwcm9wZXJ0aWVzICovXG4vLyBleHBsaWNpdGx5IG1lbnRpb25pbmcgb3B0aW9uYWwgcHJvcGVydGllcywgdG8gd29yayBhcm91bmQgVFMgbWFraW5nIHRoZW0gcmVxdWlyZWRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20va3J6a2Fjem9yL3RzLWVzc2VudGlhbHMvaXNzdWVzLzExOFxuZXhwb3J0IHR5cGUgRGVlcE9taXQ8VCBleHRlbmRzIERlZXBPbWl0TW9kaWZ5PEZpbHRlcj4sIEZpbHRlcj4gPSBUIGV4dGVuZHMgQnVpbHRpblxuICA/IFRcbiAgOiBUIGV4dGVuZHMgTWFwPGluZmVyIEtleVR5cGUsIGluZmVyIFZhbHVlVHlwZT5cbiAgPyBWYWx1ZVR5cGUgZXh0ZW5kcyBEZWVwT21pdE1vZGlmeTxGaWx0ZXI+XG4gICAgPyBNYXA8S2V5VHlwZSwgRGVlcE9taXQ8VmFsdWVUeXBlLCBGaWx0ZXI+PlxuICAgIDogVFxuICA6IFQgZXh0ZW5kcyBSZWFkb25seU1hcDxpbmZlciBLZXlUeXBlLCBpbmZlciBWYWx1ZVR5cGU+XG4gID8gVmFsdWVUeXBlIGV4dGVuZHMgRGVlcE9taXRNb2RpZnk8RmlsdGVyPlxuICAgID8gUmVhZG9ubHlNYXA8S2V5VHlwZSwgRGVlcE9taXQ8VmFsdWVUeXBlLCBGaWx0ZXI+PlxuICAgIDogVFxuICA6IFQgZXh0ZW5kcyBXZWFrTWFwPGluZmVyIEtleVR5cGUsIGluZmVyIFZhbHVlVHlwZT5cbiAgPyBWYWx1ZVR5cGUgZXh0ZW5kcyBEZWVwT21pdE1vZGlmeTxGaWx0ZXI+XG4gICAgPyBXZWFrTWFwPEtleVR5cGUsIERlZXBPbWl0PFZhbHVlVHlwZSwgRmlsdGVyPj5cbiAgICA6IFRcbiAgOiBUIGV4dGVuZHMgU2V0PGluZmVyIEl0ZW1UeXBlPlxuICA/IEl0ZW1UeXBlIGV4dGVuZHMgRGVlcE9taXRNb2RpZnk8RmlsdGVyPlxuICAgID8gU2V0PERlZXBPbWl0PEl0ZW1UeXBlLCBGaWx0ZXI+PlxuICAgIDogVFxuICA6IFQgZXh0ZW5kcyBSZWFkb25seVNldDxpbmZlciBJdGVtVHlwZT5cbiAgPyBJdGVtVHlwZSBleHRlbmRzIERlZXBPbWl0TW9kaWZ5PEZpbHRlcj5cbiAgICA/IFJlYWRvbmx5U2V0PERlZXBPbWl0PEl0ZW1UeXBlLCBGaWx0ZXI+PlxuICAgIDogVFxuICA6IFQgZXh0ZW5kcyBXZWFrU2V0PGluZmVyIEl0ZW1UeXBlPlxuICA/IEl0ZW1UeXBlIGV4dGVuZHMgRGVlcE9taXRNb2RpZnk8RmlsdGVyPlxuICAgID8gV2Vha1NldDxEZWVwT21pdDxJdGVtVHlwZSwgRmlsdGVyPj5cbiAgICA6IFRcbiAgOiBUIGV4dGVuZHMgQXJyYXk8aW5mZXIgSXRlbVR5cGU+XG4gID8gSXRlbVR5cGUgZXh0ZW5kcyBEZWVwT21pdE1vZGlmeTxGaWx0ZXI+XG4gICAgPyBBcnJheTxEZWVwT21pdDxJdGVtVHlwZSwgRmlsdGVyPj5cbiAgICA6IFRcbiAgOiBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBJdGVtVHlwZT5cbiAgPyBJdGVtVHlwZSBleHRlbmRzIERlZXBPbWl0TW9kaWZ5PEZpbHRlcj5cbiAgICA/IFByb21pc2U8RGVlcE9taXQ8SXRlbVR5cGUsIEZpbHRlcj4+XG4gICAgOiBUXG4gIDogeyBbSyBpbiBFeGNsdWRlPE9wdGlvbmFsS2V5czxUPiwga2V5b2YgRmlsdGVyPl0rPzogVFtLXSB9ICZcbiAgICAgIE9taXRQcm9wZXJ0aWVzPFxuICAgICAgICB7XG4gICAgICAgICAgW0sgaW4gRXh0cmFjdDxPcHRpb25hbEtleXM8VD4sIGtleW9mIEZpbHRlcj5dKz86IEZpbHRlcltLXSBleHRlbmRzIHRydWVcbiAgICAgICAgICAgID8gbmV2ZXJcbiAgICAgICAgICAgIDogVFtLXSBleHRlbmRzIERlZXBPbWl0TW9kaWZ5PEZpbHRlcltLXT5cbiAgICAgICAgICAgID8gRGVlcE9taXQ8VFtLXSwgRmlsdGVyW0tdPlxuICAgICAgICAgICAgOiBUW0tdO1xuICAgICAgICB9LFxuICAgICAgICBuZXZlclxuICAgICAgPiAmXG4gICAgICB7IFtLIGluIEV4Y2x1ZGU8UmVxdWlyZWRLZXlzPFQ+LCBrZXlvZiBGaWx0ZXI+XTogVFtLXSB9ICZcbiAgICAgIE9taXRQcm9wZXJ0aWVzPFxuICAgICAgICB7XG4gICAgICAgICAgW0sgaW4gRXh0cmFjdDxSZXF1aXJlZEtleXM8VD4sIGtleW9mIEZpbHRlcj5dOiBGaWx0ZXJbS10gZXh0ZW5kcyB0cnVlXG4gICAgICAgICAgICA/IG5ldmVyXG4gICAgICAgICAgICA6IFRbS10gZXh0ZW5kcyBEZWVwT21pdE1vZGlmeTxGaWx0ZXJbS10+XG4gICAgICAgICAgICA/IERlZXBPbWl0PFRbS10sIEZpbHRlcltLXT5cbiAgICAgICAgICAgIDogVFtLXTtcbiAgICAgICAgfSxcbiAgICAgICAgbmV2ZXJcbiAgICAgID47XG50eXBlIERlZXBPbWl0TW9kaWZ5PFQ+ID1cbiAgfCB7XG4gICAgICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIG5ldmVyID8gYW55IDogVFtLXSBleHRlbmRzIG9iamVjdCA/IERlZXBPbWl0TW9kaWZ5PFRbS10+IDogbmV2ZXI7XG4gICAgfVxuICB8IEFycmF5PERlZXBPbWl0TW9kaWZ5PFQ+PlxuICB8IFByb21pc2U8RGVlcE9taXRNb2RpZnk8VD4+XG4gIHwgU2V0PERlZXBPbWl0TW9kaWZ5PFQ+PlxuICB8IFJlYWRvbmx5U2V0PERlZXBPbWl0TW9kaWZ5PFQ+PlxuICB8IFdlYWtTZXQ8RGVlcE9taXRNb2RpZnk8VD4+XG4gIHwgTWFwPGFueSwgRGVlcE9taXRNb2RpZnk8VD4+XG4gIHwgV2Vha01hcDxhbnksIERlZXBPbWl0TW9kaWZ5PFQ+PjtcblxuLyoqIFJlbW92ZSBrZXlzIHdpdGggYG5ldmVyYCB2YWx1ZSBmcm9tIG9iamVjdCB0eXBlICovXG5leHBvcnQgdHlwZSBOb25OZXZlcjxUIGV4dGVuZHMge30+ID0gUGljazxULCB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IEsgfVtrZXlvZiBUXT47XG5cbmV4cG9ydCB0eXBlIE5vbkVtcHR5T2JqZWN0PFQgZXh0ZW5kcyB7fT4gPSBrZXlvZiBUIGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IFQ7XG5cbi8qKiBNZXJnZSAyIHR5cGVzLCBwcm9wZXJ0aWVzIHR5cGVzIGZyb20gdGhlIGxhdHRlciBvdmVycmlkZSB0aGUgb25lcyBkZWZpbmVkIG9uIHRoZSBmb3JtZXIgdHlwZSAqL1xuZXhwb3J0IHR5cGUgTWVyZ2U8TSwgTj4gPSBPbWl0PE0sIGtleW9mIE4+ICYgTjtcblxudHlwZSBfTWVyZ2VOPFQgZXh0ZW5kcyByZWFkb25seSBhbnlbXSwgUmVzdWx0PiA9IFQgZXh0ZW5kcyByZWFkb25seSBbaW5mZXIgSGVhZCwgLi4uKGluZmVyIFRhaWwpXVxuICA/IF9NZXJnZU48VGFpbCwgTWVyZ2U8UmVzdWx0LCBIZWFkPj5cbiAgOiBSZXN1bHQ7XG5cbi8qKiBNZXJnZSBOIHR5cGVzLCBwcm9wZXJ0aWVzIHR5cGVzIGZyb20gdGhlIGxhdHRlciBvdmVycmlkZSB0aGUgb25lcyBkZWZpbmVkIG9uIHRoZSBmb3JtZXIgdHlwZSAqL1xuZXhwb3J0IHR5cGUgTWVyZ2VOPFQgZXh0ZW5kcyByZWFkb25seSBhbnlbXT4gPSBfTWVyZ2VOPFQsIHt9PjtcblxuLyoqIE1hcmsgc29tZSBwcm9wZXJ0aWVzIGFzIHJlcXVpcmVkLCBsZWF2aW5nIG90aGVycyB1bmNoYW5nZWQgKi9cbmV4cG9ydCB0eXBlIE1hcmtSZXF1aXJlZDxULCBSSyBleHRlbmRzIGtleW9mIFQ+ID0gRXhjbHVkZTxULCBSSz4gJiBSZXF1aXJlZDxQaWNrPFQsIFJLPj47XG5cbi8qKiBNYXJrIHNvbWUgcHJvcGVydGllcyBhcyBvcHRpb25hbCwgbGVhdmluZyBvdGhlcnMgdW5jaGFuZ2VkICovXG5leHBvcnQgdHlwZSBNYXJrT3B0aW9uYWw8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gT21pdDxULCBLPiAmIFBhcnRpYWw8UGljazxULCBLPj47XG5cbi8qKiBDb252ZXJ0IHVuaW9uIHR5cGUgdG8gaW50ZXJzZWN0aW9uICNkYXJrbWFnaWMgKi9cbmV4cG9ydCB0eXBlIFVuaW9uVG9JbnRlcnNlY3Rpb248VT4gPSAoVSBleHRlbmRzIGFueSA/IChrOiBVKSA9PiB2b2lkIDogbmV2ZXIpIGV4dGVuZHMgKGs6IGluZmVyIEkpID0+IHZvaWQgPyBJIDogbmV2ZXI7XG5cbnR5cGUgU3RyaW5nTGl0ZXJhbDxUPiA9IFQgZXh0ZW5kcyBzdHJpbmcgPyAoc3RyaW5nIGV4dGVuZHMgVCA/IG5ldmVyIDogVCkgOiBuZXZlcjtcblxuZGVjbGFyZSBjb25zdCBfX09QQVFVRV9UWVBFX186IHVuaXF1ZSBzeW1ib2w7XG5cbi8qKiBFYXNpbHkgY3JlYXRlIG9wYXF1ZSB0eXBlcyBpZS4gdHlwZXMgdGhhdCBhcmUgc3Vic2V0IG9mIHRoZWlyIG9yaWdpbmFsIHR5cGVzIChleDogcG9zaXRpdmUgbnVtYmVycywgdXBwZXJjYXNlZCBzdHJpbmcpICovXG5leHBvcnQgdHlwZSBPcGFxdWU8VHlwZSwgVG9rZW4gZXh0ZW5kcyBzdHJpbmc+ID0gVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsPFRva2VuPlxuICA/IFR5cGUgJiB7IHJlYWRvbmx5IFtfX09QQVFVRV9UWVBFX19dOiBUb2tlbiB9XG4gIDogbmV2ZXI7XG5cbi8qKiBFYXNpbHkgZXh0cmFjdCB0aGUgdHlwZSBvZiBhIGdpdmVuIG9iamVjdCdzIHZhbHVlcyAqL1xuZXhwb3J0IHR5cGUgVmFsdWVPZjxUPiA9IFRba2V5b2YgVF07XG5cbi8qKiBFYXNpbHkgZXh0cmFjdCB0aGUgdHlwZSBvZiBhIGdpdmVuIGFycmF5J3MgZWxlbWVudHMgKi9cbmV4cG9ydCB0eXBlIEVsZW1lbnRPZjxUIGV4dGVuZHMgcmVhZG9ubHkgYW55W10+ID0gVCBleHRlbmRzIHJlYWRvbmx5IChpbmZlciBFVClbXSA/IEVUIDogbmV2ZXI7XG5cbi8qKiBUeXBlIGNvbnN0cmFpbnQgZm9yIHR1cGxlIGluZmVyZW5jZSAqL1xuZXhwb3J0IHR5cGUgVHVwbGU8VCA9IGFueT4gPSBbVF0gfCBUW107XG5cbi8qKiBVc2VmdWwgYXMgYSByZXR1cm4gdHlwZSBpbiBpbnRlcmZhY2VzIG9yIGFic3RyYWN0IGNsYXNzZXMgd2l0aCBtaXNzaW5nIGltcGxlbWVudGF0aW9uICovXG5leHBvcnQgdHlwZSBBc3luY09yU3luYzxUPiA9IFByb21pc2VMaWtlPFQ+IHwgVDtcblxuZXhwb3J0IHR5cGUgQXdhaXRlZDxUPiA9IFQgZXh0ZW5kcyBQcm9taXNlTGlrZTxpbmZlciBQVD4gPyBQVCA6IG5ldmVyO1xuZXhwb3J0IHR5cGUgQXN5bmNPclN5bmNUeXBlPFQ+ID0gVCBleHRlbmRzIEFzeW5jT3JTeW5jPGluZmVyIFBUPiA/IFBUIDogbmV2ZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV3YWJsZTxUPiB7XG4gIG5ldyAoLi4uYXJnczogYW55W10pOiBUO1xufVxuXG4vLyBBIGhlbHBlciBmb3IgYFJlYWRvbmx5S2V5c2AgJiBgV3JpdGFibGVLZXlzYFxuLy8gVGhpcyBwb3RlbnRpYWxseSBhYnVzZXMgY29tcGlsZXIgc29tZSBpbmNvbnNpc3RlbmNpZXMgaW4gY2hlY2tpbmcgdHlwZSBlcXVhbGl0eSBmb3IgZ2VuZXJpY3MsXG4vLyBiZWNhdXNlIG5vcm1hbGx5IGByZWFkb25seWAgZG9lc24ndCBhZmZlY3Qgd2hldGhlciB0eXBlcyBhcmUgYXNzaWduYWJsZS5cbi8vIEBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUyNDczMTA4LzE4MTUyMDkgd2l0aCBjb21tZW50c1xudHlwZSBJc0VxdWFsQ29uc2lkZXJpbmdXcml0YWJpbGl0eTxYLCBZPiA9ICg8VD4oKSA9PiBUIGV4dGVuZHMgWCA/IDEgOiAyKSBleHRlbmRzIDxUPigpID0+IFQgZXh0ZW5kcyBZID8gMSA6IDJcbiAgPyB0cnVlXG4gIDogZmFsc2U7XG5cbi8vIFRoaXMgYWxzbyBwcm9iYWJseSB1c2VzIHNvbWUgaW5jb25zaXN0ZW5jaWVzIC0tIGV2ZW4gdGhvdWdoIGl0IF9zaG91bGRfIGJlIHRoZSBzYW1lIHRvIGp1c3QgdXNlXG4vLyBgVCwgV3JpdGFibGU8VD5gIGZvciBnZW5lcmljIGFyZ3VtZW50cywgaXQgc3RvcHMgd29ya2luZyB0aGVuLCBhbHdheXMgZXZhbHVhdGluZyB0byBgZmFsc2VgLlxuLy8gU3dhcHBpbmcgYFdyaXRhYmxlYCB0byBgUmVhZGFibGVgIGFsd2F5cyByZXR1cm5zIGZhbHNlIHRvbywgaW5zdGVhZCBvZiB5aWVsZGluZyBvcHBvc2l0ZSByZXN1bHRzLlxudHlwZSBJc0Z1bGx5V3JpdGFibGU8VCBleHRlbmRzIG9iamVjdD4gPSBJc0VxdWFsQ29uc2lkZXJpbmdXcml0YWJpbGl0eTxcbiAgeyBbUSBpbiBrZXlvZiBUXTogVFtRXSB9LFxuICBXcml0YWJsZTx7IFtRIGluIGtleW9mIFRdOiBUW1FdIH0+XG4+O1xuXG4vKiogR2V0cyBrZXlzIG9mIGFuIG9iamVjdCB3aGljaCBhcmUgcmVhZG9ubHkgKi9cbmV4cG9ydCB0eXBlIFJlYWRvbmx5S2V5czxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW1AgaW4ga2V5b2YgVF0tPzogSXNGdWxseVdyaXRhYmxlPFBpY2s8VCwgUD4+IGV4dGVuZHMgdHJ1ZSA/IG5ldmVyIDogUDtcbn1ba2V5b2YgVF07XG5cbi8qKiBHZXRzIGtleXMgb2YgYW4gb2JqZWN0IHdoaWNoIGFyZSB3cml0YWJsZSAqL1xuZXhwb3J0IHR5cGUgV3JpdGFibGVLZXlzPFQgZXh0ZW5kcyB7fT4gPSB7XG4gIFtQIGluIGtleW9mIFRdLT86IElzRnVsbHlXcml0YWJsZTxQaWNrPFQsIFA+PiBleHRlbmRzIHRydWUgPyBQIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuXG4vKiogTWFyayBzb21lIHByb3BlcnRpZXMgd2hpY2ggb25seSB0aGUgZm9ybWVyIGluY2x1ZGluZyBhcyBvcHRpb25hbCBhbmQgc2V0IHRoZSB2YWx1ZSB0byBuZXZlciAqL1xudHlwZSBXaXRob3V0PFQsIFU+ID0geyBbUCBpbiBFeGNsdWRlPGtleW9mIFQsIGtleW9mIFU+XT86IG5ldmVyIH07XG5cbi8qKiBnZXQgdGhlIFhPUiB0eXBlIHdoaWNoIGNvdWxkIG1ha2UgMiB0eXBlcyBleGNsdWRlIGVhY2ggb3RoZXIgKi9cbmV4cG9ydCB0eXBlIFhPUjxULCBVPiA9IFQgfCBVIGV4dGVuZHMgb2JqZWN0ID8gKFdpdGhvdXQ8VCwgVT4gJiBVKSB8IChXaXRob3V0PFUsIFQ+ICYgVCkgOiBUIHwgVTtcblxuLyoqIEZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgZXNzZW50aWFscyAqL1xuZXhwb3J0IHR5cGUgSGVhZDxUIGV4dGVuZHMgQW55QXJyYXk+ID0gVFtcImxlbmd0aFwiXSBleHRlbmRzIDAgPyBuZXZlciA6IFRbMF07XG5leHBvcnQgdHlwZSBUYWlsPFQgZXh0ZW5kcyBBbnlBcnJheT4gPSBUW1wibGVuZ3RoXCJdIGV4dGVuZHMgMFxuICA/IG5ldmVyXG4gIDogKCguLi50OiBUKSA9PiB2b2lkKSBleHRlbmRzIChmaXJzdDogYW55LCAuLi5yZXN0OiBpbmZlciBSZXN0KSA9PiB2b2lkXG4gID8gUmVzdFxuICA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBFeGFjdDxULCBTSEFQRT4gPSBUIGV4dGVuZHMgU0hBUEUgPyAoRXhjbHVkZTxrZXlvZiBULCBrZXlvZiBTSEFQRT4gZXh0ZW5kcyBuZXZlciA/IFQgOiBuZXZlcikgOiBuZXZlcjtcbiJdfQ==

@@ -14,3 +14,3 @@ {

],
"version": "7.0.3",
"version": "8.0.0",
"main": "dist/index.js",

@@ -34,3 +34,3 @@ "types": "dist/index.d.ts",

"peerDependencies": {
"typescript": ">=3.7.0"
"typescript": ">=4.0.0"
},

@@ -44,4 +44,4 @@ "devDependencies": {

"rimraf": "^3.0.2",
"typescript": "^3.7.2"
"typescript": "^4.0.0"
}
}

@@ -9,3 +9,3 @@ <p align="center">

<a href="/package.json"><img alt="Software License" src="https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square"></a>
<img src="https://img.shields.io/badge/all_contributors-29-orange.svg?style=flat-square" alt="All Contributors">
<img src="https://img.shields.io/badge/all_contributors-31-orange.svg?style=flat-square" alt="All Contributors">
<a href="https://codechecks.io"><img src="https://raw.githubusercontent.com/codechecks/docs/master/images/badges/badge-default.svg?sanitize=true" alt="codechecks.io"></a>

@@ -21,7 +21,12 @@ </p>

πŸ‘‰ We require `typescript>=3.7`. If you're looking for support for older TS versions use `ts-essentials@3` (for 3.6>=)
or `ts-essentials@2` instead. If you use any [functions](https://github.com/krzkaczor/ts-essentials/blob/master/lib/functions.ts) you should add `ts-essentials` to your `dependencies` (`npm install --save ts-essentials`) to avoid runtime errors in production.
πŸ‘‰ We require `typescript>=4.0`. If you're looking for support for older TS versions, please have a look at the
[TypeScript dependency table](https://github.com/krzkaczor/ts-essentials/tree/master#TypeScript-dependency-table)
If you use any [functions](https://github.com/krzkaczor/ts-essentials/blob/master/lib/functions.ts) you should add
`ts-essentials` to your `dependencies` (`npm install --save ts-essentials`) to avoid runtime errors in production.
## What's inside?
`ts-essentials` is a set of high-quality, useful TypeScript types that make writing type-safe code easier.
- [Install](#Install)

@@ -43,2 +48,4 @@ - [What's inside?](#Whats-inside)

- [Comparison between `Omit` and `StrictOmit`](#Comparison-between-Omit-and-StrictOmit)
- [StrictExtract](#StrictExtract)
- [Comparison between `Extract` and `StrictExtract`](#Comparison-between-Extract-and-StrictExtract)
- [DeepOmit](#DeepOmit)

@@ -49,2 +56,3 @@ - [OmitProperties](#OmitProperties)

- [Merge](#Merge)
- [MergeN](#MergeN)
- [MarkRequired](#MarkRequired)

@@ -72,2 +80,3 @@ - [MarkOptional](#MarkOptional)

- Tail
- [TypeScript dependency table](#TypeScript-dependency-table)
- [Contributors](#Contributors)

@@ -333,2 +342,52 @@

### StrictExtract
Usage is similar to the builtin version, but checks the filter type more strictly.
```typescript
interface Dog {
type: "dog";
woof(): void;
}
interface Cat {
type: "cat";
meow(): void;
}
interface Mouse {
type: "mouse";
squeak(): void;
}
type Animal = Dog | Cat | Mouse;
type DogAnimal = StrictExtract<Animal, { type: "dog" }>;
// Result:
// Dog
// if you want to Extract multiple properties just use union type:
type HouseAnimal = StrictExtract<Animal, { type: "dog" | "cat" }>;
// Result:
// Cat | Dog
```
#### Comparison between `Extract` and `StrictExtract`
Following the code above, we can compare the behavior of `Extract` and `StrictExtract`.
```typescript
type HouseAnimalWithStrictExtract = StrictExtract<Animal, { type: "dog" | "cat" | "horse" }>;
// Result: error
// Type '"dog" | "cat" | "horse"' is not assignable to type '"mouse" | undefined'
// Type '"dog"' is not assignable to type '"mouse" | undefined'.
type HouseAnimalWithExtract = Extract<Animal, { type: "dog" | "cat" | "horse" }>;
// Result: no error
```
### DeepOmit

@@ -479,2 +538,25 @@

### MergeN
_keywords: override_
```typescript
type Tuple = [
{
a: number;
b: string;
},
{
b: number;
},
];
const xyz: MergeN<Tuple> = { a: 4, b: 2 };
// Result:
// {
// a: number,
// b: number,
// }
```
### MarkRequired

@@ -635,3 +717,3 @@

}
return (n as any) as PositiveNumber; // this ugly cast is required but only when "producing" opaque types
return n as PositiveNumber; // you can cast it directly without unknown and any
}

@@ -644,3 +726,3 @@

}
return (n as any) as NegativeNumber; // this ugly cast is required but only when "producing" opaque types
return n as NegativeNumber; // you can cast it directly without unknown and any
}

@@ -831,2 +913,12 @@

## TypeScript dependency table
| `ts-essentials` | `typescript` / type of dependency |
| --------------- | --------------------------------- |
| `^8.0.0` | `^4.0.0` / peer |
| `^5.0.0` | `^3.7.0` / peer |
| `^3.0.1` | `^3.5.0` / peer |
| `^1.0.1` | `^3.2.2` / dev |
| `^1.0.0` | `^3.0.3` / dev |
## Contributors

@@ -877,3 +969,5 @@

<tr>
<td align="center"><a href="https://github.com/Beraliv"><img src="https://avatars.githubusercontent.com/u/2991847?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alex Berezin</b></sub></a><br /><a href="https://github.com/krzkaczor/ts-essentials/commits?author=Beraliv" title="Code">πŸ’»</a></td>
<td align="center"><a href="https://github.com/Beraliv"><img src="https://avatars.githubusercontent.com/u/2991847?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alex Berezin</b></sub></a><br /><a href="https://github.com/krzkaczor/ts-essentials/commits?author=Beraliv" title="Code">πŸ’»</a> <a href="https://github.com/krzkaczor/ts-essentials/commits?author=Beraliv" title="Documentation">πŸ“–</a></td>
<td align="center"><a href="https://github.com/vitonsky"><img src="https://avatars.githubusercontent.com/u/86191922?v=4?s=100" width="100px;" alt=""/><br /><sub><b>vitonsky</b></sub></a><br /><a href="https://github.com/krzkaczor/ts-essentials/commits?author=vitonsky" title="Documentation">πŸ“–</a></td>
<td align="center"><a href="https://github.com/itayronen"><img src="https://avatars.githubusercontent.com/u/21139000?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Itay Ronen</b></sub></a><br /><a href="https://github.com/krzkaczor/ts-essentials/commits?author=itayronen" title="Code">πŸ’»</a></td>
</tr>

@@ -880,0 +974,0 @@ </table>

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚑️ by Socket Inc