node-backpack 1.0.1 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/lib/api/bundle.d.ts +11 -0
- package/lib/api/bundle.js +3 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -61,13 +61,13 @@ We considered two other alternatives before eventually going down this route:
|
|
|
61
61
|
Aside from a shrinkwrap file, NPM also offers a feature called `bundledDependencies`
|
|
62
62
|
to vendor in your dependencies inside the `node_modules` directory of your package.
|
|
63
63
|
|
|
64
|
-
> See [bundledDependencies](https://docs.npmjs.com/cli/v8/configuring-npm/package-json#
|
|
64
|
+
> See [bundledDependencies](https://docs.npmjs.com/cli/v8/configuring-npm/package-json#bundledependencies)
|
|
65
65
|
|
|
66
66
|
While this approach seems to be supported across all package managers, that won't be
|
|
67
67
|
the case for Yarn 2.x and above, or more concretely,
|
|
68
68
|
for the [Plug'n'Play](https://yarnpkg.com/features/pnp) feature.
|
|
69
69
|
|
|
70
|
-
> See [dont use bundled dependencies](https://yarnpkg.com/
|
|
70
|
+
> See [dont use bundled dependencies](https://yarnpkg.com/migration/guide#dont-use-bundledependencies)
|
|
71
71
|
|
|
72
72
|
### Static Binaries
|
|
73
73
|
|
package/lib/api/bundle.d.ts
CHANGED
|
@@ -84,6 +84,16 @@ export interface BundleProps {
|
|
|
84
84
|
* @default false
|
|
85
85
|
*/
|
|
86
86
|
readonly minifySyntax?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Always keep the original value of the `name` property.
|
|
89
|
+
* Minification renames symbols to reduce code size and bundling sometimes need to rename symbols to avoid collisions.
|
|
90
|
+
* This option allows to preserve the original name values even in minified code.
|
|
91
|
+
*
|
|
92
|
+
* @see https://esbuild.github.io/api/#keep-names
|
|
93
|
+
*
|
|
94
|
+
* @default true
|
|
95
|
+
*/
|
|
96
|
+
readonly keepNames?: boolean;
|
|
87
97
|
/**
|
|
88
98
|
* Write the metafile into this location.
|
|
89
99
|
*
|
|
@@ -160,6 +170,7 @@ export declare class Bundle {
|
|
|
160
170
|
private readonly minifyWhitespace?;
|
|
161
171
|
private readonly minifyIdentifiers?;
|
|
162
172
|
private readonly minifySyntax?;
|
|
173
|
+
private readonly keepNames?;
|
|
163
174
|
private readonly metafile?;
|
|
164
175
|
private _bundle?;
|
|
165
176
|
private _dependencies?;
|
package/lib/api/bundle.js
CHANGED
|
@@ -59,6 +59,7 @@ class Bundle {
|
|
|
59
59
|
this.minifyWhitespace = props.minifyWhitespace;
|
|
60
60
|
this.minifyIdentifiers = props.minifyIdentifiers;
|
|
61
61
|
this.minifySyntax = props.minifySyntax;
|
|
62
|
+
this.keepNames = props.keepNames ?? true;
|
|
62
63
|
this.metafile = props.metafile;
|
|
63
64
|
const entryPoints = props.entryPoints ?? (this.manifest.main ? [this.manifest.main] : []);
|
|
64
65
|
if (entryPoints.length === 0) {
|
|
@@ -250,6 +251,7 @@ class Bundle {
|
|
|
250
251
|
minifyWhitespace: this.minifyWhitespace,
|
|
251
252
|
minifyIdentifiers: this.minifyIdentifiers,
|
|
252
253
|
minifySyntax: this.minifySyntax,
|
|
254
|
+
keepNames: this.keepNames,
|
|
253
255
|
treeShaking: true,
|
|
254
256
|
absWorkingDir: this.packageDir,
|
|
255
257
|
external: [...(this.externals.dependencies ?? []), ...(this.externals.optionalDependencies ?? [])],
|
|
@@ -356,4 +358,4 @@ function longestCommonParent(paths) {
|
|
|
356
358
|
}
|
|
357
359
|
return paths.reduce(_longestCommonParent);
|
|
358
360
|
}
|
|
359
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9idW5kbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGlEQUFtQztBQUNuQyw2Q0FBK0I7QUFDL0IsbURBQStDO0FBQy9DLHFDQUFpQztBQUVqQywyQ0FBOEQ7QUFFOUQsTUFBTSx3QkFBd0IsR0FBRztJQUMvQixZQUFZO0lBQ1osS0FBSztJQUNMLGNBQWM7SUFDZCxLQUFLO0lBQ0wsY0FBYztJQUNkLE1BQU07SUFDTixtQkFBbUI7Q0FDcEIsQ0FBQztBQXFLRjs7R0FFRztBQUNILE1BQWEsTUFBTTtJQXdCakIsWUFBWSxLQUFrQjtRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLElBQUksc0JBQXNCLENBQUM7UUFDbkUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLHdCQUF3QixDQUFDO1FBQ3pFLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENB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QUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3RCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE1BQU07WUFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QjtRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZXNidWlsZCBmcm9tICdlc2J1aWxkJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IEF0dHJpYnV0aW9ucyB9IGZyb20gJy4vX2F0dHJpYnV0aW9ucyc7XG5pbXBvcnQgeyBzaGVsbCB9IGZyb20gJy4vX3NoZWxsJztcbmltcG9ydCB0eXBlIHsgVmlvbGF0aW9uIH0gZnJvbSAnLi92aW9sYXRpb24nO1xuaW1wb3J0IHsgVmlvbGF0aW9uVHlwZSwgVmlvbGF0aW9uc1JlcG9ydCB9IGZyb20gJy4vdmlvbGF0aW9uJztcblxuY29uc3QgREVGQVVMVF9BTExPV0VEX0xJQ0VOU0VTID0gW1xuICAnQXBhY2hlLTIuMCcsXG4gICdNSVQnLFxuICAnQlNELTMtQ2xhdXNlJyxcbiAgJ0lTQycsXG4gICdCU0QtMi1DbGF1c2UnLFxuICAnMEJTRCcsXG4gICdNSVQgT1IgQXBhY2hlLTIuMCcsXG5dO1xuXG4vKipcbiAqIEJ1bmRsaW5nIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlUHJvcHMge1xuXG4gIC8qKlxuICAgKiBEaXJlY3Rvcnkgd2hlcmUgdGhlIHBhY2thZ2UgdG8gYnVuZGxlIGlzIGxvY2F0ZWQgYXQuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlRGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZW50cnktcG9pbnRzIHRvIGJ1bmRsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgJ21haW4nIGZpbGUgYXMgc3BlY2lmaWVkIGluIHBhY2thZ2UuanNvbi5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5UG9pbnRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYXR0cmlidXRpb25zIGZpbGUgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgLyB2YWxpZGF0ZWQuXG4gICAqIFRoaXMgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgcGFja2FnZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdUSElSRF9QQVJUWV9MSUNFTlNFUydcbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0aW9uc0ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIHBhY2thZ2VzIHRoYXQgY2Fubm90IGJlIGJ1bmRsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZXh0ZXJuYWwgcmVmZXJlbmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVybmFscz86IEV4dGVybmFscztcblxuICAvKipcbiAgICogRXh0ZXJuYWwgcmVzb3VyY2VzIHRoYXQgbmVlZCB0byBiZSBlbWJlZGRlZCBpbiB0aGUgYnVuZGxlLlxuICAgKlxuICAgKiBUaGVzZSB3aWxsIGJlIGNvcGllZCBvdmVyIHRvIHRoZSBhcHByb3ByaWF0ZSBwYXRocyBiZWZvcmUgcGFja2FnaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VzPzogeyBbc3JjOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGxpY2Vuc2VzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIGJ1bmRsaW5nLlxuICAgKiBJZiBhbnkgZGVwZW5kZW5jeSBjb250YWlucyBhIGxpY2Vuc2Ugbm90IGluIHRoaXMgbGlzdCwgYnVuZGxpbmcgd2lsbCBmYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbGlzdFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZExpY2Vuc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhY2thZ2VzIG1hdGNoaW5nIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgZXhjbHVkZWQgZnJvbSBhdHRyaWJ1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRvbnRBdHRyaWJ1dGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJhc2ljIHNhbml0eSBjaGVjayB0byBydW4gYWdhaW5zdCB0aGUgY3JlYXRlZCBidW5kbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSB0ZXN0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGEgc291cmNlbWFwIGluIHRoZSBidW5kbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiaW5saW5lXCJcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZW1hcD86ICdsaW5rZWQnIHwgJ2lubGluZScgfCAnZXh0ZXJuYWwnIHwgJ2JvdGgnO1xuXG4gIC8qKlxuICAgKiBNaW5pZmllcyB0aGUgYnVuZGxlZCBjb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaWZ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVtb3ZlcyB3aGl0ZXNwYWNlIGZyb20gdGhlIGNvZGUuXG4gICAqIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gYG1pbmlmeWAgaXMgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG1pbmlmeVdoaXRlc3BhY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZW5hbWVzIGxvY2FsIHZhcmlhYmxlcyB0byBiZSBzaG9ydGVyLlxuICAgKiBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGBtaW5pZnlgIGlzIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBtaW5pZnlJZGVudGlmaWVycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJld3JpdGVzIHN5bnRheCB0byBhIG1vcmUgY29tcGFjdCBmb3JtYXQuXG4gICAqIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gYG1pbmlmeWAgaXMgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG1pbmlmeVN5bnRheD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBtZXRhZmlsZSBpbnRvIHRoaXMgbG9jYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbWV0YWZpbGUgaXMgd3JpdHRlblxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEJ1bmRsZS5wYWNrYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVQYWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHBhY2thZ2UgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZVZhbGlkYXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGZpeCBhbnkgKGZpeGFibGUpIHZpb2xhdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmaXg/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhY2thZ2Ugb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2Uge1xuICAvKipcbiAgICogUGF0aCBvZiB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEZXBlbmRlbmN5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEZXBlbmRlbmN5IHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXh0ZXJuYWwgcGFja2FnZXMgdGhhdCBjYW5ub3QgYmUgYnVuZGxlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbHMge1xuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBwYWNrYWdlcyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIGBkZXBlbmRlbmNpZXNgIHNlY3Rpb25cbiAgICogb2YgdGhlIG1hbmlmZXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgYG9wdGlvbmFsRGVwZW5kZW5jaWVzYCBzZWN0aW9uXG4gICAqIG9mIHRoZSBtYW5pZmVzdC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsRGVwZW5kZW5jaWVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbn1cblxuLyoqXG4gKiBCdW5kbGUgY2xhc3MgdG8gdmFsaWRhdGUgYW5kIHBhY2sgbm9kZWpzIGJ1bmRsZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCdW5kbGUge1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbmlmZXN0OiBhbnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm90aWNlUGF0aDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFja2FnZURpcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJ5UG9pbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGV4dGVybmFsczogRXh0ZXJuYWxzO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlczogeyBbc3JjOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkTGljZW5zZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvbnRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGVzdD86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VtYXA/OiAnbGlua2VkJyB8ICdpbmxpbmUnIHwgJ2V4dGVybmFsJyB8ICdib3RoJztcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pZnk/OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1pbmlmeVdoaXRlc3BhY2U/OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1pbmlmeUlkZW50aWZpZXJzPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pZnlTeW50YXg/OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldGFmaWxlPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2J1bmRsZT86IGVzYnVpbGQuQnVpbGRSZXN1bHQ7XG4gIHByaXZhdGUgX2RlcGVuZGVuY2llcz86IFBhY2thZ2VbXTtcbiAgcHJpdmF0ZSBfZGVwZW5kZW5jaWVzUm9vdD86IHN0cmluZztcblxuICBwcml2YXRlIF9hdHRyaWJ1dGlvbnM/OiBBdHRyaWJ1dGlvbnM7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEJ1bmRsZVByb3BzKSB7XG4gICAgdGhpcy5wYWNrYWdlRGlyID0gcHJvcHMucGFja2FnZURpcjtcbiAgICB0aGlzLm5vdGljZVBhdGggPSBwcm9wcy5hdHRyaWJ1dGlvbnNGaWxlID8/ICdUSElSRF9QQVJUWV9MSUNFTlNFUyc7XG4gICAgdGhpcy5tYW5pZmVzdCA9IGZzLnJlYWRKc29uU3luYyhwYXRoLmpvaW4odGhpcy5wYWNrYWdlRGlyLCAncGFja2FnZS5qc29uJykpO1xuICAgIHRoaXMuZXh0ZXJuYWxzID0gcHJvcHMuZXh0ZXJuYWxzID8/IHt9O1xuICAgIHRoaXMucmVzb3VyY2VzID0gcHJvcHMucmVzb3VyY2VzID8/IHt9O1xuICAgIHRoaXMudGVzdCA9IHByb3BzLnRlc3Q7XG4gICAgdGhpcy5hbGxvd2VkTGljZW5zZXMgPSBwcm9wcy5hbGxvd2VkTGljZW5zZXMgPz8gREVGQVVMVF9BTExPV0VEX0xJQ0VOU0VTO1xuICAgIHRoaXMuZG9udEF0dHJpYnV0ZSA9IHByb3BzLmRvbnRBdHRyaWJ1dGU7XG4gICAgdGhpcy5lbnRyeVBvaW50cyA9IHt9O1xuICAgIHRoaXMuc291cmNlbWFwID0gcHJvcHMuc291cmNlbWFwO1xuICAgIHRoaXMubWluaWZ5ID0gcHJvcHMubWluaWZ5O1xuICAgIHRoaXMubWluaWZ5V2hpdGVzcGFjZSA9IHByb3BzLm1pbmlmeVdoaXRlc3BhY2U7XG4gICAgdGhpcy5taW5pZnlJZGVudGlmaWVycyA9IHByb3BzLm1pbmlmeUlkZW50aWZpZXJzO1xuICAgIHRoaXMubWluaWZ5U3ludGF4ID0gcHJvcHMubWluaWZ5U3ludGF4O1xuICAgIHRoaXMubWV0YWZpbGUgPSBwcm9wcy5tZXRhZmlsZTtcblxuICAgIGNvbnN0IGVudHJ5UG9pbnRzID0gcHJvcHMuZW50cnlQb2ludHMgPz8gKHRoaXMubWFuaWZlc3QubWFpbiA/IFt0aGlzLm1hbmlmZXN0Lm1haW5dIDogW10pO1xuXG4gICAgaWYgKGVudHJ5UG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IGNvbmZpZ3VyZSBhdCBsZWFzdCAxIGVudHJ5cG9pbnQnKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5cG9pbnQgb2YgZW50cnlQb2ludHMpIHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4odGhpcy5wYWNrYWdlRGlyLCBlbnRyeXBvaW50KSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9jYXRlIGVudHJ5cG9pbnQ6ICR7ZW50cnlwb2ludH1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW50cnlQb2ludHNbZW50cnlwb2ludC5yZXBsYWNlKCcuanMnLCAnJyldID0gZW50cnlwb2ludDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGJ1bmRsZSBmb3IgdmlvbGF0aW9ucy5cbiAgICpcbiAgICogSWYgYGZpeGAgaXMgc2V0IHRvIHRydWUsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSByZW1haW5pbmdcbiAgICogdmlvbGF0aW9ucyBhZnRlciB0aGUgZml4ZXMgd2VyZSBhcHBsaWVkLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBuZXZlciB0aHJvd3MuIFRoZSBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGluc3BlY3RpbmcgdGhlXG4gICAqIHJldHVybmVkIHJlcG9ydCBhbmQgYWN0IGFjY29yZGluZ2x5LlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKG9wdGlvbnM6IEJ1bmRsZVZhbGlkYXRlT3B0aW9ucyA9IHt9KTogVmlvbGF0aW9uc1JlcG9ydCB7XG4gICAgY29uc3QgZml4ID0gb3B0aW9ucy5maXggPz8gZmFsc2U7XG5cbiAgICAvLyBmaXJzdCB2YWxpZGF0ZVxuICAgIGNvbnN0IGNpcmN1bGFySW1wb3J0cyA9IHRoaXMudmFsaWRhdGVDaXJjdWxhckltcG9ydHMoKTtcbiAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLnZhbGlkYXRlUmVzb3VyY2VzKCk7XG4gICAgY29uc3QgYXR0cmlidXRpb25zID0gdGhpcy52YWxpZGF0ZUF0dHJpYnV0aW9ucygpO1xuXG4gICAgY29uc3QgcmVwb3J0ID0gbmV3IFZpb2xhdGlvbnNSZXBvcnQoWy4uLmNpcmN1bGFySW1wb3J0cywgLi4ucmVzb3VyY2VzLCAuLi5hdHRyaWJ1dGlvbnNdKTtcblxuICAgIGlmICghZml4KSB7XG4gICAgICByZXR1cm4gcmVwb3J0O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdmlvbGF0aW9uIG9mIHJlcG9ydC52aW9sYXRpb25zKSB7XG4gICAgICBpZiAodmlvbGF0aW9uLmZpeCkge1xuICAgICAgICB2aW9sYXRpb24uZml4KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHRoZSB1biBmaXhhYmxlIHZpb2xhdGlvbnNcbiAgICByZXR1cm4gbmV3IFZpb2xhdGlvbnNSZXBvcnQocmVwb3J0LnZpb2xhdGlvbnMuZmlsdGVyKHYgPT4gIXYuZml4KSk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgdGhlIGJ1bmRsZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IHRvIGEgdGVtcCBkaXJlY3RvcnkuXG4gICAqIFRoaXMgZGlyZWN0b3J5IGlzIHdoYXQgdGhlIHRvb2wgd2lsbCBlbmQgdXAgcGFja2luZy5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgdGVtcCBkaXJlY3RvcnkgbG9jYXRpb24uXG4gICAqL1xuICBwdWJsaWMgd3JpdGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0YXJnZXQgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdidW5kbGUtd3JpdGUtJykpO1xuXG4gICAgLy8gd2UgZGVmaW5pdGVseSBkb24ndCBuZWVkIHRoZXNlIGRpcmVjdG9yaWVzIGluIHRoZSBwYWNrYWdlXG4gICAgLy8gc28gbm8gbmVlZCB0byBjb3B5IHRoZW0gb3Zlci5cbiAgICBjb25zdCBpZ25vcmVEaXJlY3RvcmllcyA9IFsnbm9kZV9tb2R1bGVzJywgJy5naXQnXTtcblxuICAgIC8vIGNvcHkgdGhlIGVudGlyZSBwcm9qZWN0IHNpbmNlIHdlIGFyZSByZXRhaW5pbmcgdGhlIG9yaWdpbmFsIGZpbGVzLlxuICAgIGZzLmNvcHlTeW5jKHRoaXMucGFja2FnZURpciwgdGFyZ2V0LCB7IGZpbHRlcjogbiA9PiAhbi5zcGxpdChwYXRoLnNlcCkuc29tZSgocCA9PiBpZ25vcmVEaXJlY3Rvcmllcy5pbmNsdWRlcyhwKSkpIH0pO1xuXG4gICAgLy8gY2xvbmUgdGhlIG9yaWdpbmFsIG1hbmlmZXN0IHNpbmNlIHdlIGFyZSBnb2luZyB0b1xuICAgIC8vIHRvIG11dGF0ZSBpdC5cbiAgICBjb25zdCBtYW5pZmVzdCA9IHsgLi4udGhpcy5tYW5pZmVzdCB9O1xuXG4gICAgLy8gbWFuaWZlc3QgbXV0YXRpb25zXG4gICAgdGhpcy5yZW1vdmVEZXBlbmRlbmNpZXMobWFuaWZlc3QpO1xuICAgIHRoaXMuYWRkRXh0ZXJuYWxzKG1hbmlmZXN0KTtcblxuICAgIC8vIHdyaXRlIGFydGlmYWN0c1xuICAgIHRoaXMud3JpdGVPdXRwdXRzKHRhcmdldCk7XG4gICAgdGhpcy53cml0ZVJlc291cmNlcyh0YXJnZXQpO1xuICAgIHRoaXMud3JpdGVNYW5pZmVzdCh0YXJnZXQsIG1hbmlmZXN0KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgdGhlIGJ1bmRsZSBhbmQgY3JlYXRlIHRoZSB0YXJiYWxsLlxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGFyYmFsbC5cbiAgICovXG4gIHB1YmxpYyBwYWNrKG9wdGlvbnM6IEJ1bmRsZVBhY2tPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0ID8/IHRoaXMucGFja2FnZURpcjtcblxuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMudmFsaWRhdGUoKTtcbiAgICBpZiAoIXJlcG9ydC5zdWNjZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYWNrIGR1ZSB0byB2YWxpZGF0aW9uIGVycm9ycy5cXG5cXG4ke3JlcG9ydC5zdW1tYXJ5fWApO1xuICAgIH1cblxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhcmdldCBkb2VzbnQgZXhpc3Q6ICR7dGFyZ2V0fWApO1xuICAgIH1cblxuICAgIC8vIHJlc29sdmUgc3ltbGlua3MuXG4gICAgY29uc3QgcmVhbFRhcmdldCA9IGZzLnJlYWxwYXRoU3luYyh0YXJnZXQpO1xuXG4gICAgaWYgKCFmcy5sc3RhdFN5bmMocmVhbFRhcmdldCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYXJnZXQgbXVzdCBiZSBhIGRpcmVjdG9yeTogJHt0YXJnZXR9YCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1dyaXRpbmcgYnVuZGxlJyk7XG4gICAgY29uc3QgYnVuZGxlRGlyID0gdGhpcy53cml0ZSgpO1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy50ZXN0KSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBgJHtwYXRoLmpvaW4oYnVuZGxlRGlyLCB0aGlzLnRlc3QpfWA7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSdW5uaW5nIHNhbml0eSB0ZXN0OiAke2NvbW1hbmR9YCk7XG4gICAgICAgIHNoZWxsKGNvbW1hbmQsIHsgY3dkOiBidW5kbGVEaXIgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNyZWF0ZSB0aGUgdGFyYmFsbFxuICAgICAgY29uc29sZS5sb2coJ1BhY2tpbmcnKTtcbiAgICAgIGNvbnN0IHRhcmJhbGwgPSBzaGVsbCgnbnBtIHBhY2snLCB7IHF1aWV0OiB0cnVlLCBjd2Q6IGJ1bmRsZURpciB9KS50cmltKCk7XG4gICAgICBjb25zdCBkZXN0ID0gcGF0aC5qb2luKHJlYWxUYXJnZXQsIHRhcmJhbGwpO1xuICAgICAgZnMuY29weVN5bmMocGF0aC5qb2luKGJ1bmRsZURpciwgdGFyYmFsbCksIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGZzLnJlbW92ZVN5bmMoYnVuZGxlRGlyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBidW5kbGUoKTogZXNidWlsZC5CdWlsZFJlc3VsdCB7XG4gICAgaWYgKHRoaXMuX2J1bmRsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2J1bmRsZTtcbiAgICB9XG4gICAgdGhpcy5fYnVuZGxlID0gdGhpcy5lc2J1aWxkKCk7XG4gICAgcmV0dXJuIHRoaXMuX2J1bmRsZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlcGVuZGVuY2llcygpOiBQYWNrYWdlW10ge1xuICAgIGlmICh0aGlzLl9kZXBlbmRlbmNpZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZXBlbmRlbmNpZXM7XG4gICAgfVxuICAgIGNvbnN0IGlucHV0cyA9IE9iamVjdC5rZXlzKHRoaXMuYnVuZGxlLm1ldGFmaWxlIS5pbnB1dHMpO1xuICAgIGNvbnN0IHBhY2thZ2VzID0gbmV3IFNldChBcnJheS5mcm9tKGlucHV0cykubWFwKGkgPT4gdGhpcy5jbG9zZXN0UGFja2FnZVBhdGgocGF0aC5qb2luKHRoaXMucGFja2FnZURpciwgaSkpKSk7XG4gICAgdGhpcy5fZGVwZW5kZW5jaWVzID0gQXJyYXkuZnJvbShwYWNrYWdlcykubWFwKHAgPT4gdGhpcy5jcmVhdGVQYWNrYWdlKHApKS5maWx0ZXIoZCA9PiBkLm5hbWUgIT09IHVuZGVmaW5lZCAmJiBkLm5hbWUgIT09IHRoaXMubWFuaWZlc3QubmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuX2RlcGVuZGVuY2llcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlcGVuZGVuY2llc1Jvb3QoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZGVwZW5kZW5jaWVzUm9vdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlcGVuZGVuY2llc1Jvb3Q7XG4gICAgfVxuICAgIGNvbnN0IGxjcCA9IGxvbmdlc3RDb21tb25QYXJlbnQodGhpcy5kZXBlbmRlbmNpZXMubWFwKGQgPT4gZC5wYXRoKSk7XG4gICAgdGhpcy5fZGVwZW5kZW5jaWVzUm9vdCA9IHRoaXMuY2xvc2VzdFBhY2thZ2VQYXRoKGxjcCk7XG4gICAgcmV0dXJuIHRoaXMuX2RlcGVuZGVuY2llc1Jvb3Q7XG4gIH1cblxuICBwcml2YXRlIGdldCBhdHRyaWJ1dGlvbnMoKTogQXR0cmlidXRpb25zIHtcbiAgICBpZiAodGhpcy5fYXR0cmlidXRpb25zID09IG51bGwpIHtcbiAgICAgIHRoaXMuX2F0dHJpYnV0aW9ucyA9IG5ldyBBdHRyaWJ1dGlvbnMoe1xuICAgICAgICBwYWNrYWdlRGlyOiB0aGlzLnBhY2thZ2VEaXIsXG4gICAgICAgIHBhY2thZ2VOYW1lOiB0aGlzLm1hbmlmZXN0Lm5hbWUsXG4gICAgICAgIGZpbGVQYXRoOiB0aGlzLm5vdGljZVBhdGgsXG4gICAgICAgIGRlcGVuZGVuY2llczogdGhpcy5kZXBlbmRlbmNpZXMsXG4gICAgICAgIGRlcGVuZGVuY2llc1Jvb3Q6IHRoaXMuZGVwZW5kZW5jaWVzUm9vdCxcbiAgICAgICAgZXhjbHVkZTogdGhpcy5kb250QXR0cmlidXRlLFxuICAgICAgICBhbGxvd2VkTGljZW5zZXM6IHRoaXMuYWxsb3dlZExpY2Vuc2VzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hdHRyaWJ1dGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGZpbmRFeHRlcm5hbERlcGVuZGVuY3lWZXJzaW9uKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmVyc2lvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIC8vIGV4dGVybmFsIGRlcGVuZGVuY2llcyB3aWxsIG5vdCBleGlzdCBpbiB0aGUgZGVwZW5kZW5jaWVzIGxpc3RcbiAgICAvLyBzaW5jZSBlc2J1aWxkIHNraXBzIG92ZXIgdGhlbS4gYnV0IHRoZXkgd2lsbCBleGlzdCBhcyBhIGRlcGVuZGVuY3kgb2ZcbiAgICAvLyBvbmUgb2YgdGhlbSAob3Igb2YgdXMpXG4gICAgZm9yIChjb25zdCBwa2cgb2YgWy4uLnRoaXMuZGVwZW5kZW5jaWVzLCB0aGlzLmNyZWF0ZVBhY2thZ2UodGhpcy5wYWNrYWdlRGlyKV0pIHtcbiAgICAgIGNvbnN0IG1hbmlmZXN0ID0gZnMucmVhZEpTT05TeW5jKHBhdGguam9pbihwa2cucGF0aCwgJ3BhY2thZ2UuanNvbicpKTtcbiAgICAgIGNvbnN0IHJ1bnRpbWUgPSAobWFuaWZlc3QuZGVwZW5kZW5jaWVzID8/IHt9KVtuYW1lXTtcbiAgICAgIGNvbnN0IG9wdGlvbmFsID0gKG1hbmlmZXN0Lm9wdGlvbmFsRGVwZW5kZW5jaWVzID8/IHt9KVtuYW1lXTtcblxuICAgICAgY29uc3QgcGluID0gKHZlcnNpb246IHN0cmluZykgPT4gKHZlcnNpb24uc3RhcnRzV2l0aCgnXicpIHx8IHZlcnNpb24uc3RhcnRzV2l0aCgnficpKSA/IHZlcnNpb24uc3Vic3RyaW5nKDEpIDogdmVyc2lvbjtcblxuICAgICAgaWYgKHJ1bnRpbWUpIHtcbiAgICAgICAgdmVyc2lvbnMuYWRkKHBpbihydW50aW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWwpIHtcbiAgICAgICAgdmVyc2lvbnMuYWRkKHBpbihvcHRpb25hbCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJzaW9ucy5zaXplID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZXRlY3QgdmVyc2lvbiBmb3IgZXh0ZXJuYWwgZGVwZW5kZW5jeTogJHtuYW1lfWApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9ucy5zaXplID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBsZSB2ZXJzaW9ucyBkZXRlY3RlZCBmb3IgZXh0ZXJuYWwgZGVwZW5kZW5jeTogJHtuYW1lfSAoJHtBcnJheS5mcm9tKHZlcnNpb25zKS5qb2luKCcsJyl9KWApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJzaW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWUhO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZXN0UGFja2FnZVBhdGgoZmRwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHBhdGguam9pbihmZHAsICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICAgIHJldHVybiBmZHA7XG4gICAgfVxuXG4gICAgaWYgKHBhdGguZGlybmFtZShmZHApID09PSBmZHApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgcGFja2FnZSBtYW5pZmVzdCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNsb3Nlc3RQYWNrYWdlUGF0aChwYXRoLmRpcm5hbWUoZmRwKSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBhY2thZ2UocGFja2FnZURpcjogc3RyaW5nKTogUGFja2FnZSB7XG4gICAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKHBhY2thZ2VEaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGZzLnJlYWRKU09OU3luYyhtYW5pZmVzdFBhdGgpO1xuICAgIHJldHVybiB7IHBhdGg6IHBhY2thZ2VEaXIsIG5hbWU6IG1hbmlmZXN0Lm5hbWUsIHZlcnNpb246IG1hbmlmZXN0LnZlcnNpb24gfTtcbiAgfVxuXG4gIHByaXZhdGUgZXNidWlsZCgpOiBlc2J1aWxkLkJ1aWxkUmVzdWx0IHtcbiAgICBjb25zdCBidW5kbGUgPSBlc2J1aWxkLmJ1aWxkU3luYyh7XG4gICAgICBlbnRyeVBvaW50czogdGhpcy5lbnRyeVBvaW50cyxcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIHRhcmdldDogJ25vZGUxOCcsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgc291cmNlbWFwOiB0aGlzLnNvdXJjZW1hcCxcbiAgICAgIG1ldGFmaWxlOiB0cnVlLCAvLyB0aGlzIGlzIGFsd2F5cyByZXF1aXJlZCBmb3Igc29tZSBvZiBvdXIgdmFsaWRhdGlvbiBydWxlc1xuICAgICAgbWluaWZ5OiB0aGlzLm1pbmlmeSxcbiAgICAgIG1pbmlmeVdoaXRlc3BhY2U6IHRoaXMubWluaWZ5V2hpdGVzcGFjZSxcbiAgICAgIG1pbmlmeUlkZW50aWZpZXJzOiB0aGlzLm1pbmlmeUlkZW50aWZpZXJzLFxuICAgICAgbWluaWZ5U3ludGF4OiB0aGlzLm1pbmlmeVN5bnRheCxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGhpcy5wYWNrYWdlRGlyLFxuICAgICAgZXh0ZXJuYWw6IFsuLi4odGhpcy5leHRlcm5hbHMuZGVwZW5kZW5jaWVzID8/IFtdKSwgLi4uKHRoaXMuZXh0ZXJuYWxzLm9wdGlvbmFsRGVwZW5kZW5jaWVzID8/IFtdKV0sXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBvdXRkaXI6IHRoaXMucGFja2FnZURpcixcbiAgICAgIGFsbG93T3ZlcndyaXRlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gV3JpdGUgbWV0YWZpbGUgb25seSB3aGVuIHJlcXVlc3RlZFxuICAgIGlmICh0aGlzLm1ldGFmaWxlKSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMubWV0YWZpbGUsIEpTT04uc3RyaW5naWZ5KGJ1bmRsZS5tZXRhZmlsZSwgbnVsbCwgMikpO1xuICAgIH1cblxuICAgIGlmIChidW5kbGUud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgLy8gZXNidWlsZCB3YXJuaW5ncyBhcmUgdXN1YWxseSBpbXBvcnRhbnQsIGxldHMgdHJ5IHRvIGJlIHN0cmljdCBoZXJlLlxuICAgICAgLy8gdGhlIHdhcm5pbmdzIHRoZW1zZWx2ZXMgYXJlIHByaW50ZWQgb24gc2NyZWVuLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3VuZCAke2J1bmRsZS53YXJuaW5ncy5sZW5ndGh9IGJ1bmRsaW5nIHdhcm5pbmdzIChTZWUgYWJvdmUpYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1bmRsZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDaXJjdWxhckltcG9ydHMoKTogVmlvbGF0aW9uW10ge1xuICAgIGNvbnNvbGUubG9nKCdWYWxpZGF0aW5nIGNpcmN1bGFyIGltcG9ydHMnKTtcbiAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgIGNvbnN0IHBhY2thZ2VzID0gW3RoaXMucGFja2FnZURpciwgLi4udGhpcy5kZXBlbmRlbmNpZXMubWFwKGQgPT4gZC5wYXRoKV07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHdlIGRvbid0IHVzZSB0aGUgcHJvZ3JhbW1hdGljIEFQSSBzaW5jZSBpdCBvbmx5IG9mZmVycyBhbiBhc3luYyBBUEkuXG4gICAgICAvLyBwcmVmZXIgdG8gc3RheSBzeW5jIGZvciBub3cgc2luY2UgaXRzIGVhc2llciB0byBpbnRlZ3JhdGUgd2l0aCBvdGhlciB0b29saW5nLlxuICAgICAgLy8gd2lsbCBvZmZlciBhbiBhc3luYyBBUEkgZnVydGhlciBkb3duIHRoZSByb2FkLlxuICAgICAgY29uc3QgY29tbWFuZCA9IGAke3JlcXVpcmUucmVzb2x2ZSgnbWFkZ2UvYmluL2NsaS5qcycpfSAtLWpzb24gLS13YXJuaW5nIC0tbm8tY29sb3IgLS1uby1zcGlubmVyIC0tY2lyY3VsYXIgLS1leHRlbnNpb25zIGpzICR7cGFja2FnZXMuam9pbignICcpfWA7XG4gICAgICBzaGVsbChjb21tYW5kLCB7IHF1aWV0OiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY29uc3QgaW1wb3J0czogc3RyaW5nW11bXSA9IEpTT04ucGFyc2UoZS5zdGRvdXQudG9TdHJpbmcoKS50cmltKCkpO1xuICAgICAgZm9yIChjb25zdCBpbXAgb2YgaW1wb3J0cykge1xuICAgICAgICB2aW9sYXRpb25zLnB1c2goeyB0eXBlOiBWaW9sYXRpb25UeXBlLkNJUkNVTEFSX0lNUE9SVCwgbWVzc2FnZTogYCR7aW1wLmpvaW4oJyAtPiAnKX1gIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2aW9sYXRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlc291cmNlcygpOiBWaW9sYXRpb25bXSB7XG4gICAgY29uc29sZS5sb2coJ1ZhbGlkYXRpbmcgcmVzb3VyY2VzJyk7XG4gICAgY29uc3QgdmlvbGF0aW9ucyA9IFtdO1xuICAgIGZvciAoY29uc3QgW3NyYywgX10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvdXJjZXMpKSB7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHRoaXMucGFja2FnZURpciwgc3JjKSkpIHtcbiAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBWaW9sYXRpb25UeXBlLk1JU1NJTkdfUkVTT1VSQ0UsXG4gICAgICAgICAgbWVzc2FnZTogYFVuYWJsZSB0byBmaW5kIHJlc291cmNlICgke3NyY30pIHJlbGF0aXZlIHRvIHRoZSBwYWNrYWdlIGRpcmVjdG9yeWAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBdHRyaWJ1dGlvbnMoKTogcmVhZG9ubHkgVmlvbGF0aW9uW10ge1xuICAgIGNvbnNvbGUubG9nKCdWYWxpZGF0aW5nIGF0dHJpYnV0aW9ucycpO1xuICAgIHJldHVybiB0aGlzLmF0dHJpYnV0aW9ucy52YWxpZGF0ZSgpLnZpb2xhdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFkZEV4dGVybmFscyhtYW5pZmVzdDogYW55KSB7XG4gICAgLy8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgcnVudGltZSBkZXBlbmRlbmNpZXNcbiAgICBmb3IgKGNvbnN0IGV4dGVybmFsIG9mIHRoaXMuZXh0ZXJuYWxzLmRlcGVuZGVuY2llcyA/PyBbXSkge1xuICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZmluZEV4dGVybmFsRGVwZW5kZW5jeVZlcnNpb24oZXh0ZXJuYWwpO1xuICAgICAgbWFuaWZlc3QuZGVwZW5kZW5jaWVzID0gbWFuaWZlc3QuZGVwZW5kZW5jaWVzID8/IHt9O1xuICAgICAgbWFuaWZlc3QuZGVwZW5kZW5jaWVzW2V4dGVybmFsXSA9IHZlcnNpb247XG4gICAgfVxuXG4gICAgLy8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgb3B0aW9uYWwgZGVwZW5kZW5jaWVzXG4gICAgZm9yIChjb25zdCBleHRlcm5hbCBvZiB0aGlzLmV4dGVybmFscy5vcHRpb25hbERlcGVuZGVuY2llcyA/PyBbXSkge1xuICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZmluZEV4dGVybmFsRGVwZW5kZW5jeVZlcnNpb24oZXh0ZXJuYWwpO1xuICAgICAgbWFuaWZlc3Qub3B0aW9uYWxEZXBlbmRlbmNpZXMgPSBtYW5pZmVzdC5vcHRpb25hbERlcGVuZGVuY2llcyA/PyB7fTtcbiAgICAgIG1hbmlmZXN0Lm9wdGlvbmFsRGVwZW5kZW5jaWVzW2V4dGVybmFsXSA9IHZlcnNpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEZXBlbmRlbmNpZXMobWFuaWZlc3Q6IGFueSkge1xuICAgIGZvciAoY29uc3QgW2QsIHZdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMubWFuaWZlc3QuZGVwZW5kZW5jaWVzKSkge1xuICAgICAgbWFuaWZlc3QuZGV2RGVwZW5kZW5jaWVzID0gbWFuaWZlc3QuZGV2RGVwZW5kZW5jaWVzID8/IHt9O1xuICAgICAgbWFuaWZlc3QuZGV2RGVwZW5kZW5jaWVzW2RdID0gdjtcbiAgICAgIGRlbGV0ZSBtYW5pZmVzdC5kZXBlbmRlbmNpZXNbZF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZU91dHB1dHMod29ya0Rpcjogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdGhpcy5idW5kbGUub3V0cHV0RmlsZXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IG91dCA9IG91dHB1dC5wYXRoLnJlcGxhY2UodGhpcy5wYWNrYWdlRGlyLCB3b3JrRGlyKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMob3V0LCBvdXRwdXQuY29udGVudHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVSZXNvdXJjZXMod29ya2Rpcjogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBbc3JjLCBkc3RdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb3VyY2VzKSkge1xuICAgICAgY29uc3QgdG8gPSBwYXRoLmpvaW4od29ya2RpciwgZHN0KTtcbiAgICAgIGZzLmNvcHlTeW5jKHBhdGguam9pbih0aGlzLnBhY2thZ2VEaXIsIHNyYyksIHRvLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHdyaXRlTWFuaWZlc3Qod29ya0Rpcjogc3RyaW5nLCBtYW5pZmVzdDogYW55KSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4od29ya0RpciwgJ3BhY2thZ2UuanNvbicpLCBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvbmdlc3RDb21tb25QYXJlbnQocGF0aHM6IHN0cmluZ1tdKSB7XG4gIGZ1bmN0aW9uIF9sb25nZXN0Q29tbW9uUGFyZW50KHAxOiBzdHJpbmcsIHAyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRpcnMxID0gcDEuc3BsaXQocGF0aC5zZXApO1xuICAgIGNvbnN0IGRpcnMyID0gcDIuc3BsaXQocGF0aC5zZXApO1xuICAgIGNvbnN0IHBhcmVudCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oZGlyczEubGVuZ3RoLCBkaXJzMi5sZW5ndGgpOyBpKyspIHtcbiAgICAgIGlmIChkaXJzMVtpXSAhPT0gZGlyczJbaV0pIGJyZWFrO1xuICAgICAgcGFyZW50LnB1c2goZGlyczFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50LmpvaW4ocGF0aC5zZXApO1xuICB9XG5cbiAgcmV0dXJuIHBhdGhzLnJlZHVjZShfbG9uZ2VzdENvbW1vblBhcmVudCk7XG59XG4iXX0=
|
|
361
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9idW5kbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGlEQUFtQztBQUNuQyw2Q0FBK0I7QUFDL0IsbURBQStDO0FBQy9DLHFDQUFpQztBQUVqQywyQ0FBOEQ7QUFFOUQsTUFBTSx3QkFBd0IsR0FBRztJQUMvQixZQUFZO0lBQ1osS0FBSztJQUNMLGNBQWM7SUFDZCxLQUFLO0lBQ0wsY0FBYztJQUNkLE1BQU07SUFDTixtQkFBbUI7Q0FDcEIsQ0FBQztBQWdMRjs7R0FFRztBQUNILE1BQWEsTUFBTTtJQXlCakIsWUFBWSxLQUFrQjtRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLElBQUksc0JBQXNCLENBQUM7UUFDbkUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLHdCQUF3QixDQUFDO1FBQ3pFLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENB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QUVELFNBQVMsbUJBQW1CLENBQUMsS0FBZTtJQUMxQyxTQUFTLG9CQUFvQixDQUFDLEVBQVUsRUFBRSxFQUFVO1FBQ2xELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3RCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE1BQU07WUFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QjtRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZXNidWlsZCBmcm9tICdlc2J1aWxkJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IEF0dHJpYnV0aW9ucyB9IGZyb20gJy4vX2F0dHJpYnV0aW9ucyc7XG5pbXBvcnQgeyBzaGVsbCB9IGZyb20gJy4vX3NoZWxsJztcbmltcG9ydCB0eXBlIHsgVmlvbGF0aW9uIH0gZnJvbSAnLi92aW9sYXRpb24nO1xuaW1wb3J0IHsgVmlvbGF0aW9uVHlwZSwgVmlvbGF0aW9uc1JlcG9ydCB9IGZyb20gJy4vdmlvbGF0aW9uJztcblxuY29uc3QgREVGQVVMVF9BTExPV0VEX0xJQ0VOU0VTID0gW1xuICAnQXBhY2hlLTIuMCcsXG4gICdNSVQnLFxuICAnQlNELTMtQ2xhdXNlJyxcbiAgJ0lTQycsXG4gICdCU0QtMi1DbGF1c2UnLFxuICAnMEJTRCcsXG4gICdNSVQgT1IgQXBhY2hlLTIuMCcsXG5dO1xuXG4vKipcbiAqIEJ1bmRsaW5nIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlUHJvcHMge1xuXG4gIC8qKlxuICAgKiBEaXJlY3Rvcnkgd2hlcmUgdGhlIHBhY2thZ2UgdG8gYnVuZGxlIGlzIGxvY2F0ZWQgYXQuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlRGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZW50cnktcG9pbnRzIHRvIGJ1bmRsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgJ21haW4nIGZpbGUgYXMgc3BlY2lmaWVkIGluIHBhY2thZ2UuanNvbi5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5UG9pbnRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYXR0cmlidXRpb25zIGZpbGUgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgLyB2YWxpZGF0ZWQuXG4gICAqIFRoaXMgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgcGFja2FnZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdUSElSRF9QQVJUWV9MSUNFTlNFUydcbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0aW9uc0ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIHBhY2thZ2VzIHRoYXQgY2Fubm90IGJlIGJ1bmRsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZXh0ZXJuYWwgcmVmZXJlbmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVybmFscz86IEV4dGVybmFscztcblxuICAvKipcbiAgICogRXh0ZXJuYWwgcmVzb3VyY2VzIHRoYXQgbmVlZCB0byBiZSBlbWJlZGRlZCBpbiB0aGUgYnVuZGxlLlxuICAgKlxuICAgKiBUaGVzZSB3aWxsIGJlIGNvcGllZCBvdmVyIHRvIHRoZSBhcHByb3ByaWF0ZSBwYXRocyBiZWZvcmUgcGFja2FnaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VzPzogeyBbc3JjOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGxpY2Vuc2VzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIGJ1bmRsaW5nLlxuICAgKiBJZiBhbnkgZGVwZW5kZW5jeSBjb250YWlucyBhIGxpY2Vuc2Ugbm90IGluIHRoaXMgbGlzdCwgYnVuZGxpbmcgd2lsbCBmYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbGlzdFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZExpY2Vuc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhY2thZ2VzIG1hdGNoaW5nIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgZXhjbHVkZWQgZnJvbSBhdHRyaWJ1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRvbnRBdHRyaWJ1dGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJhc2ljIHNhbml0eSBjaGVjayB0byBydW4gYWdhaW5zdCB0aGUgY3JlYXRlZCBidW5kbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSB0ZXN0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGEgc291cmNlbWFwIGluIHRoZSBidW5kbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiaW5saW5lXCJcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZW1hcD86ICdsaW5rZWQnIHwgJ2lubGluZScgfCAnZXh0ZXJuYWwnIHwgJ2JvdGgnO1xuXG4gIC8qKlxuICAgKiBNaW5pZmllcyB0aGUgYnVuZGxlZCBjb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaWZ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVtb3ZlcyB3aGl0ZXNwYWNlIGZyb20gdGhlIGNvZGUuXG4gICAqIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gYG1pbmlmeWAgaXMgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG1pbmlmeVdoaXRlc3BhY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZW5hbWVzIGxvY2FsIHZhcmlhYmxlcyB0byBiZSBzaG9ydGVyLlxuICAgKiBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGBtaW5pZnlgIGlzIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBtaW5pZnlJZGVudGlmaWVycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJld3JpdGVzIHN5bnRheCB0byBhIG1vcmUgY29tcGFjdCBmb3JtYXQuXG4gICAqIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gYG1pbmlmeWAgaXMgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG1pbmlmeVN5bnRheD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBrZWVwIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgYG5hbWVgIHByb3BlcnR5LlxuICAgKiBNaW5pZmljYXRpb24gcmVuYW1lcyBzeW1ib2xzIHRvIHJlZHVjZSBjb2RlIHNpemUgYW5kIGJ1bmRsaW5nIHNvbWV0aW1lcyBuZWVkIHRvIHJlbmFtZSBzeW1ib2xzIHRvIGF2b2lkIGNvbGxpc2lvbnMuXG4gICAqIFRoaXMgb3B0aW9uIGFsbG93cyB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgbmFtZSB2YWx1ZXMgZXZlbiBpbiBtaW5pZmllZCBjb2RlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZXNidWlsZC5naXRodWIuaW8vYXBpLyNrZWVwLW5hbWVzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGtlZXBOYW1lcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBtZXRhZmlsZSBpbnRvIHRoaXMgbG9jYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbWV0YWZpbGUgaXMgd3JpdHRlblxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEJ1bmRsZS5wYWNrYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVQYWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHBhY2thZ2UgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZVZhbGlkYXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGZpeCBhbnkgKGZpeGFibGUpIHZpb2xhdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmaXg/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhY2thZ2Ugb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2Uge1xuICAvKipcbiAgICogUGF0aCBvZiB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEZXBlbmRlbmN5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEZXBlbmRlbmN5IHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXh0ZXJuYWwgcGFja2FnZXMgdGhhdCBjYW5ub3QgYmUgYnVuZGxlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbHMge1xuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBwYWNrYWdlcyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIGBkZXBlbmRlbmNpZXNgIHNlY3Rpb25cbiAgICogb2YgdGhlIG1hbmlmZXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgYG9wdGlvbmFsRGVwZW5kZW5jaWVzYCBzZWN0aW9uXG4gICAqIG9mIHRoZSBtYW5pZmVzdC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsRGVwZW5kZW5jaWVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbn1cblxuLyoqXG4gKiBCdW5kbGUgY2xhc3MgdG8gdmFsaWRhdGUgYW5kIHBhY2sgbm9kZWpzIGJ1bmRsZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCdW5kbGUge1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbmlmZXN0OiBhbnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm90aWNlUGF0aDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFja2FnZURpcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJ5UG9pbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGV4dGVybmFsczogRXh0ZXJuYWxzO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlczogeyBbc3JjOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkTGljZW5zZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvbnRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGVzdD86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VtYXA/OiAnbGlua2VkJyB8ICdpbmxpbmUnIHwgJ2V4dGVybmFsJyB8ICdib3RoJztcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pZnk/OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1pbmlmeVdoaXRlc3BhY2U/OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1pbmlmeUlkZW50aWZpZXJzPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pZnlTeW50YXg/OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGtlZXBOYW1lcz86IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0YWZpbGU/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfYnVuZGxlPzogZXNidWlsZC5CdWlsZFJlc3VsdDtcbiAgcHJpdmF0ZSBfZGVwZW5kZW5jaWVzPzogUGFja2FnZVtdO1xuICBwcml2YXRlIF9kZXBlbmRlbmNpZXNSb290Pzogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2F0dHJpYnV0aW9ucz86IEF0dHJpYnV0aW9ucztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQnVuZGxlUHJvcHMpIHtcbiAgICB0aGlzLnBhY2thZ2VEaXIgPSBwcm9wcy5wYWNrYWdlRGlyO1xuICAgIHRoaXMubm90aWNlUGF0aCA9IHByb3BzLmF0dHJpYnV0aW9uc0ZpbGUgPz8gJ1RISVJEX1BBUlRZX0xJQ0VOU0VTJztcbiAgICB0aGlzLm1hbmlmZXN0ID0gZnMucmVhZEpzb25TeW5jKHBhdGguam9pbih0aGlzLnBhY2thZ2VEaXIsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgdGhpcy5leHRlcm5hbHMgPSBwcm9wcy5leHRlcm5hbHMgPz8ge307XG4gICAgdGhpcy5yZXNvdXJjZXMgPSBwcm9wcy5yZXNvdXJjZXMgPz8ge307XG4gICAgdGhpcy50ZXN0ID0gcHJvcHMudGVzdDtcbiAgICB0aGlzLmFsbG93ZWRMaWNlbnNlcyA9IHByb3BzLmFsbG93ZWRMaWNlbnNlcyA/PyBERUZBVUxUX0FMTE9XRURfTElDRU5TRVM7XG4gICAgdGhpcy5kb250QXR0cmlidXRlID0gcHJvcHMuZG9udEF0dHJpYnV0ZTtcbiAgICB0aGlzLmVudHJ5UG9pbnRzID0ge307XG4gICAgdGhpcy5zb3VyY2VtYXAgPSBwcm9wcy5zb3VyY2VtYXA7XG4gICAgdGhpcy5taW5pZnkgPSBwcm9wcy5taW5pZnk7XG4gICAgdGhpcy5taW5pZnlXaGl0ZXNwYWNlID0gcHJvcHMubWluaWZ5V2hpdGVzcGFjZTtcbiAgICB0aGlzLm1pbmlmeUlkZW50aWZpZXJzID0gcHJvcHMubWluaWZ5SWRlbnRpZmllcnM7XG4gICAgdGhpcy5taW5pZnlTeW50YXggPSBwcm9wcy5taW5pZnlTeW50YXg7XG4gICAgdGhpcy5rZWVwTmFtZXMgPSBwcm9wcy5rZWVwTmFtZXMgPz8gdHJ1ZTtcbiAgICB0aGlzLm1ldGFmaWxlID0gcHJvcHMubWV0YWZpbGU7XG5cbiAgICBjb25zdCBlbnRyeVBvaW50cyA9IHByb3BzLmVudHJ5UG9pbnRzID8/ICh0aGlzLm1hbmlmZXN0Lm1haW4gPyBbdGhpcy5tYW5pZmVzdC5tYWluXSA6IFtdKTtcblxuICAgIGlmIChlbnRyeVBvaW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBjb25maWd1cmUgYXQgbGVhc3QgMSBlbnRyeXBvaW50Jyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbnRyeXBvaW50IG9mIGVudHJ5UG9pbnRzKSB7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHRoaXMucGFja2FnZURpciwgZW50cnlwb2ludCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvY2F0ZSBlbnRyeXBvaW50OiAke2VudHJ5cG9pbnR9YCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVudHJ5UG9pbnRzW2VudHJ5cG9pbnQucmVwbGFjZSgnLmpzJywgJycpXSA9IGVudHJ5cG9pbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBidW5kbGUgZm9yIHZpb2xhdGlvbnMuXG4gICAqXG4gICAqIElmIGBmaXhgIGlzIHNldCB0byB0cnVlLCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgcmVtYWluaW5nXG4gICAqIHZpb2xhdGlvbnMgYWZ0ZXIgdGhlIGZpeGVzIHdlcmUgYXBwbGllZC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgbmV2ZXIgdGhyb3dzLiBUaGUgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBpbnNwZWN0aW5nIHRoZVxuICAgKiByZXR1cm5lZCByZXBvcnQgYW5kIGFjdCBhY2NvcmRpbmdseS5cbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZShvcHRpb25zOiBCdW5kbGVWYWxpZGF0ZU9wdGlvbnMgPSB7fSk6IFZpb2xhdGlvbnNSZXBvcnQge1xuICAgIGNvbnN0IGZpeCA9IG9wdGlvbnMuZml4ID8/IGZhbHNlO1xuXG4gICAgLy8gZmlyc3QgdmFsaWRhdGVcbiAgICBjb25zdCBjaXJjdWxhckltcG9ydHMgPSB0aGlzLnZhbGlkYXRlQ2lyY3VsYXJJbXBvcnRzKCk7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy52YWxpZGF0ZVJlc291cmNlcygpO1xuICAgIGNvbnN0IGF0dHJpYnV0aW9ucyA9IHRoaXMudmFsaWRhdGVBdHRyaWJ1dGlvbnMoKTtcblxuICAgIGNvbnN0IHJlcG9ydCA9IG5ldyBWaW9sYXRpb25zUmVwb3J0KFsuLi5jaXJjdWxhckltcG9ydHMsIC4uLnJlc291cmNlcywgLi4uYXR0cmlidXRpb25zXSk7XG5cbiAgICBpZiAoIWZpeCkge1xuICAgICAgcmV0dXJuIHJlcG9ydDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHZpb2xhdGlvbiBvZiByZXBvcnQudmlvbGF0aW9ucykge1xuICAgICAgaWYgKHZpb2xhdGlvbi5maXgpIHtcbiAgICAgICAgdmlvbGF0aW9uLmZpeCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybiB0aGUgdW4gZml4YWJsZSB2aW9sYXRpb25zXG4gICAgcmV0dXJuIG5ldyBWaW9sYXRpb25zUmVwb3J0KHJlcG9ydC52aW9sYXRpb25zLmZpbHRlcih2ID0+ICF2LmZpeCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBidW5kbGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdCB0byBhIHRlbXAgZGlyZWN0b3J5LlxuICAgKiBUaGlzIGRpcmVjdG9yeSBpcyB3aGF0IHRoZSB0b29sIHdpbGwgZW5kIHVwIHBhY2tpbmcuXG4gICAqXG4gICAqIFJldHVybnMgdGhlIHRlbXAgZGlyZWN0b3J5IGxvY2F0aW9uLlxuICAgKi9cbiAgcHVibGljIHdyaXRlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnYnVuZGxlLXdyaXRlLScpKTtcblxuICAgIC8vIHdlIGRlZmluaXRlbHkgZG9uJ3QgbmVlZCB0aGVzZSBkaXJlY3RvcmllcyBpbiB0aGUgcGFja2FnZVxuICAgIC8vIHNvIG5vIG5lZWQgdG8gY29weSB0aGVtIG92ZXIuXG4gICAgY29uc3QgaWdub3JlRGlyZWN0b3JpZXMgPSBbJ25vZGVfbW9kdWxlcycsICcuZ2l0J107XG5cbiAgICAvLyBjb3B5IHRoZSBlbnRpcmUgcHJvamVjdCBzaW5jZSB3ZSBhcmUgcmV0YWluaW5nIHRoZSBvcmlnaW5hbCBmaWxlcy5cbiAgICBmcy5jb3B5U3luYyh0aGlzLnBhY2thZ2VEaXIsIHRhcmdldCwgeyBmaWx0ZXI6IG4gPT4gIW4uc3BsaXQocGF0aC5zZXApLnNvbWUoKHAgPT4gaWdub3JlRGlyZWN0b3JpZXMuaW5jbHVkZXMocCkpKSB9KTtcblxuICAgIC8vIGNsb25lIHRoZSBvcmlnaW5hbCBtYW5pZmVzdCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG9cbiAgICAvLyB0byBtdXRhdGUgaXQuXG4gICAgY29uc3QgbWFuaWZlc3QgPSB7IC4uLnRoaXMubWFuaWZlc3QgfTtcblxuICAgIC8vIG1hbmlmZXN0IG11dGF0aW9uc1xuICAgIHRoaXMucmVtb3ZlRGVwZW5kZW5jaWVzKG1hbmlmZXN0KTtcbiAgICB0aGlzLmFkZEV4dGVybmFscyhtYW5pZmVzdCk7XG5cbiAgICAvLyB3cml0ZSBhcnRpZmFjdHNcbiAgICB0aGlzLndyaXRlT3V0cHV0cyh0YXJnZXQpO1xuICAgIHRoaXMud3JpdGVSZXNvdXJjZXModGFyZ2V0KTtcbiAgICB0aGlzLndyaXRlTWFuaWZlc3QodGFyZ2V0LCBtYW5pZmVzdCk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBidW5kbGUgYW5kIGNyZWF0ZSB0aGUgdGFyYmFsbC5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgbG9jYXRpb24gb2YgdGhlIHRhcmJhbGwuXG4gICAqL1xuICBwdWJsaWMgcGFjayhvcHRpb25zOiBCdW5kbGVQYWNrT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCB0YXJnZXQgPSBvcHRpb25zLnRhcmdldCA/PyB0aGlzLnBhY2thZ2VEaXI7XG5cbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKCFyZXBvcnQuc3VjY2Vzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFjayBkdWUgdG8gdmFsaWRhdGlvbiBlcnJvcnMuXFxuXFxuJHtyZXBvcnQuc3VtbWFyeX1gKTtcbiAgICB9XG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYXJnZXQgZG9lc250IGV4aXN0OiAke3RhcmdldH1gKTtcbiAgICB9XG5cbiAgICAvLyByZXNvbHZlIHN5bWxpbmtzLlxuICAgIGNvbnN0IHJlYWxUYXJnZXQgPSBmcy5yZWFscGF0aFN5bmModGFyZ2V0KTtcblxuICAgIGlmICghZnMubHN0YXRTeW5jKHJlYWxUYXJnZXQpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFyZ2V0IG11c3QgYmUgYSBkaXJlY3Rvcnk6ICR7dGFyZ2V0fWApO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdXcml0aW5nIGJ1bmRsZScpO1xuICAgIGNvbnN0IGJ1bmRsZURpciA9IHRoaXMud3JpdGUoKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMudGVzdCkge1xuICAgICAgICBjb25zdCBjb21tYW5kID0gYCR7cGF0aC5qb2luKGJ1bmRsZURpciwgdGhpcy50ZXN0KX1gO1xuICAgICAgICBjb25zb2xlLmxvZyhgUnVubmluZyBzYW5pdHkgdGVzdDogJHtjb21tYW5kfWApO1xuICAgICAgICBzaGVsbChjb21tYW5kLCB7IGN3ZDogYnVuZGxlRGlyIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBjcmVhdGUgdGhlIHRhcmJhbGxcbiAgICAgIGNvbnNvbGUubG9nKCdQYWNraW5nJyk7XG4gICAgICBjb25zdCB0YXJiYWxsID0gc2hlbGwoJ25wbSBwYWNrJywgeyBxdWlldDogdHJ1ZSwgY3dkOiBidW5kbGVEaXIgfSkudHJpbSgpO1xuICAgICAgY29uc3QgZGVzdCA9IHBhdGguam9pbihyZWFsVGFyZ2V0LCB0YXJiYWxsKTtcbiAgICAgIGZzLmNvcHlTeW5jKHBhdGguam9pbihidW5kbGVEaXIsIHRhcmJhbGwpLCBkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybiBkZXN0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKGJ1bmRsZURpcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgYnVuZGxlKCk6IGVzYnVpbGQuQnVpbGRSZXN1bHQge1xuICAgIGlmICh0aGlzLl9idW5kbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9idW5kbGU7XG4gICAgfVxuICAgIHRoaXMuX2J1bmRsZSA9IHRoaXMuZXNidWlsZCgpO1xuICAgIHJldHVybiB0aGlzLl9idW5kbGU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZXBlbmRlbmNpZXMoKTogUGFja2FnZVtdIHtcbiAgICBpZiAodGhpcy5fZGVwZW5kZW5jaWVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVwZW5kZW5jaWVzO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dHMgPSBPYmplY3Qua2V5cyh0aGlzLmJ1bmRsZS5tZXRhZmlsZSEuaW5wdXRzKTtcbiAgICBjb25zdCBwYWNrYWdlcyA9IG5ldyBTZXQoQXJyYXkuZnJvbShpbnB1dHMpLm1hcChpID0+IHRoaXMuY2xvc2VzdFBhY2thZ2VQYXRoKHBhdGguam9pbih0aGlzLnBhY2thZ2VEaXIsIGkpKSkpO1xuICAgIHRoaXMuX2RlcGVuZGVuY2llcyA9IEFycmF5LmZyb20ocGFja2FnZXMpLm1hcChwID0+IHRoaXMuY3JlYXRlUGFja2FnZShwKSkuZmlsdGVyKGQgPT4gZC5uYW1lICE9PSB1bmRlZmluZWQgJiYgZC5uYW1lICE9PSB0aGlzLm1hbmlmZXN0Lm5hbWUpO1xuICAgIHJldHVybiB0aGlzLl9kZXBlbmRlbmNpZXM7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZXBlbmRlbmNpZXNSb290KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2RlcGVuZGVuY2llc1Jvb3QpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZXBlbmRlbmNpZXNSb290O1xuICAgIH1cbiAgICBjb25zdCBsY3AgPSBsb25nZXN0Q29tbW9uUGFyZW50KHRoaXMuZGVwZW5kZW5jaWVzLm1hcChkID0+IGQucGF0aCkpO1xuICAgIHRoaXMuX2RlcGVuZGVuY2llc1Jvb3QgPSB0aGlzLmNsb3Nlc3RQYWNrYWdlUGF0aChsY3ApO1xuICAgIHJldHVybiB0aGlzLl9kZXBlbmRlbmNpZXNSb290O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgYXR0cmlidXRpb25zKCk6IEF0dHJpYnV0aW9ucyB7XG4gICAgaWYgKHRoaXMuX2F0dHJpYnV0aW9ucyA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9hdHRyaWJ1dGlvbnMgPSBuZXcgQXR0cmlidXRpb25zKHtcbiAgICAgICAgcGFja2FnZURpcjogdGhpcy5wYWNrYWdlRGlyLFxuICAgICAgICBwYWNrYWdlTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lLFxuICAgICAgICBmaWxlUGF0aDogdGhpcy5ub3RpY2VQYXRoLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IHRoaXMuZGVwZW5kZW5jaWVzLFxuICAgICAgICBkZXBlbmRlbmNpZXNSb290OiB0aGlzLmRlcGVuZGVuY2llc1Jvb3QsXG4gICAgICAgIGV4Y2x1ZGU6IHRoaXMuZG9udEF0dHJpYnV0ZSxcbiAgICAgICAgYWxsb3dlZExpY2Vuc2VzOiB0aGlzLmFsbG93ZWRMaWNlbnNlcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYXR0cmlidXRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRXh0ZXJuYWxEZXBlbmRlbmN5VmVyc2lvbihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2lsbCBub3QgZXhpc3QgaW4gdGhlIGRlcGVuZGVuY2llcyBsaXN0XG4gICAgLy8gc2luY2UgZXNidWlsZCBza2lwcyBvdmVyIHRoZW0uIGJ1dCB0aGV5IHdpbGwgZXhpc3QgYXMgYSBkZXBlbmRlbmN5IG9mXG4gICAgLy8gb25lIG9mIHRoZW0gKG9yIG9mIHVzKVxuICAgIGZvciAoY29uc3QgcGtnIG9mIFsuLi50aGlzLmRlcGVuZGVuY2llcywgdGhpcy5jcmVhdGVQYWNrYWdlKHRoaXMucGFja2FnZURpcildKSB7XG4gICAgICBjb25zdCBtYW5pZmVzdCA9IGZzLnJlYWRKU09OU3luYyhwYXRoLmpvaW4ocGtnLnBhdGgsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgICBjb25zdCBydW50aW1lID0gKG1hbmlmZXN0LmRlcGVuZGVuY2llcyA/PyB7fSlbbmFtZV07XG4gICAgICBjb25zdCBvcHRpb25hbCA9IChtYW5pZmVzdC5vcHRpb25hbERlcGVuZGVuY2llcyA/PyB7fSlbbmFtZV07XG5cbiAgICAgIGNvbnN0IHBpbiA9ICh2ZXJzaW9uOiBzdHJpbmcpID0+ICh2ZXJzaW9uLnN0YXJ0c1dpdGgoJ14nKSB8fCB2ZXJzaW9uLnN0YXJ0c1dpdGgoJ34nKSkgPyB2ZXJzaW9uLnN1YnN0cmluZygxKSA6IHZlcnNpb247XG5cbiAgICAgIGlmIChydW50aW1lKSB7XG4gICAgICAgIHZlcnNpb25zLmFkZChwaW4ocnVudGltZSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsKSB7XG4gICAgICAgIHZlcnNpb25zLmFkZChwaW4ob3B0aW9uYWwpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0ZWN0IHZlcnNpb24gZm9yIGV4dGVybmFsIGRlcGVuZGVuY3k6ICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbnMuc2l6ZSA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgdmVyc2lvbnMgZGV0ZWN0ZWQgZm9yIGV4dGVybmFsIGRlcGVuZGVuY3k6ICR7bmFtZX0gKCR7QXJyYXkuZnJvbSh2ZXJzaW9ucykuam9pbignLCcpfSlgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyc2lvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlITtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VzdFBhY2thZ2VQYXRoKGZkcDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oZmRwLCAncGFja2FnZS5qc29uJykpKSB7XG4gICAgICByZXR1cm4gZmRwO1xuICAgIH1cblxuICAgIGlmIChwYXRoLmRpcm5hbWUoZmRwKSA9PT0gZmRwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHBhY2thZ2UgbWFuaWZlc3QnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0UGFja2FnZVBhdGgocGF0aC5kaXJuYW1lKGZkcCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQYWNrYWdlKHBhY2thZ2VEaXI6IHN0cmluZyk6IFBhY2thZ2Uge1xuICAgIGNvbnN0IG1hbmlmZXN0UGF0aCA9IHBhdGguam9pbihwYWNrYWdlRGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgY29uc3QgbWFuaWZlc3QgPSBmcy5yZWFkSlNPTlN5bmMobWFuaWZlc3RQYXRoKTtcbiAgICByZXR1cm4geyBwYXRoOiBwYWNrYWdlRGlyLCBuYW1lOiBtYW5pZmVzdC5uYW1lLCB2ZXJzaW9uOiBtYW5pZmVzdC52ZXJzaW9uIH07XG4gIH1cblxuICBwcml2YXRlIGVzYnVpbGQoKTogZXNidWlsZC5CdWlsZFJlc3VsdCB7XG4gICAgY29uc3QgYnVuZGxlID0gZXNidWlsZC5idWlsZFN5bmMoe1xuICAgICAgZW50cnlQb2ludHM6IHRoaXMuZW50cnlQb2ludHMsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICB0YXJnZXQ6ICdub2RlMTgnLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHNvdXJjZW1hcDogdGhpcy5zb3VyY2VtYXAsXG4gICAgICBtZXRhZmlsZTogdHJ1ZSwgLy8gdGhpcyBpcyBhbHdheXMgcmVxdWlyZWQgZm9yIHNvbWUgb2Ygb3VyIHZhbGlkYXRpb24gcnVsZXNcbiAgICAgIG1pbmlmeTogdGhpcy5taW5pZnksXG4gICAgICBtaW5pZnlXaGl0ZXNwYWNlOiB0aGlzLm1pbmlmeVdoaXRlc3BhY2UsXG4gICAgICBtaW5pZnlJZGVudGlmaWVyczogdGhpcy5taW5pZnlJZGVudGlmaWVycyxcbiAgICAgIG1pbmlmeVN5bnRheDogdGhpcy5taW5pZnlTeW50YXgsXG4gICAgICBrZWVwTmFtZXM6IHRoaXMua2VlcE5hbWVzLFxuICAgICAgdHJlZVNoYWtpbmc6IHRydWUsXG4gICAgICBhYnNXb3JraW5nRGlyOiB0aGlzLnBhY2thZ2VEaXIsXG4gICAgICBleHRlcm5hbDogWy4uLih0aGlzLmV4dGVybmFscy5kZXBlbmRlbmNpZXMgPz8gW10pLCAuLi4odGhpcy5leHRlcm5hbHMub3B0aW9uYWxEZXBlbmRlbmNpZXMgPz8gW10pXSxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIG91dGRpcjogdGhpcy5wYWNrYWdlRGlyLFxuICAgICAgYWxsb3dPdmVyd3JpdGU6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBXcml0ZSBtZXRhZmlsZSBvbmx5IHdoZW4gcmVxdWVzdGVkXG4gICAgaWYgKHRoaXMubWV0YWZpbGUpIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5tZXRhZmlsZSwgSlNPTi5zdHJpbmdpZnkoYnVuZGxlLm1ldGFmaWxlLCBudWxsLCAyKSk7XG4gICAgfVxuXG4gICAgaWYgKGJ1bmRsZS53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBlc2J1aWxkIHdhcm5pbmdzIGFyZSB1c3VhbGx5IGltcG9ydGFudCwgbGV0cyB0cnkgdG8gYmUgc3RyaWN0IGhlcmUuXG4gICAgICAvLyB0aGUgd2FybmluZ3MgdGhlbXNlbHZlcyBhcmUgcHJpbnRlZCBvbiBzY3JlZW4uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvdW5kICR7YnVuZGxlLndhcm5pbmdzLmxlbmd0aH0gYnVuZGxpbmcgd2FybmluZ3MgKFNlZSBhYm92ZSlgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVuZGxlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNpcmN1bGFySW1wb3J0cygpOiBWaW9sYXRpb25bXSB7XG4gICAgY29uc29sZS5sb2coJ1ZhbGlkYXRpbmcgY2lyY3VsYXIgaW1wb3J0cycpO1xuICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgY29uc3QgcGFja2FnZXMgPSBbdGhpcy5wYWNrYWdlRGlyLCAuLi50aGlzLmRlcGVuZGVuY2llcy5tYXAoZCA9PiBkLnBhdGgpXTtcbiAgICB0cnkge1xuICAgICAgLy8gd2UgZG9uJ3QgdXNlIHRoZSBwcm9ncmFtbWF0aWMgQVBJIHNpbmNlIGl0IG9ubHkgb2ZmZXJzIGFuIGFzeW5jIEFQSS5cbiAgICAgIC8vIHByZWZlciB0byBzdGF5IHN5bmMgZm9yIG5vdyBzaW5jZSBpdHMgZWFzaWVyIHRvIGludGVncmF0ZSB3aXRoIG90aGVyIHRvb2xpbmcuXG4gICAgICAvLyB3aWxsIG9mZmVyIGFuIGFzeW5jIEFQSSBmdXJ0aGVyIGRvd24gdGhlIHJvYWQuXG4gICAgICBjb25zdCBjb21tYW5kID0gYCR7cmVxdWlyZS5yZXNvbHZlKCdtYWRnZS9iaW4vY2xpLmpzJyl9IC0tanNvbiAtLXdhcm5pbmcgLS1uby1jb2xvciAtLW5vLXNwaW5uZXIgLS1jaXJjdWxhciAtLWV4dGVuc2lvbnMganMgJHtwYWNrYWdlcy5qb2luKCcgJyl9YDtcbiAgICAgIHNoZWxsKGNvbW1hbmQsIHsgcXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXVtdID0gSlNPTi5wYXJzZShlLnN0ZG91dC50b1N0cmluZygpLnRyaW0oKSk7XG4gICAgICBmb3IgKGNvbnN0IGltcCBvZiBpbXBvcnRzKSB7XG4gICAgICAgIHZpb2xhdGlvbnMucHVzaCh7IHR5cGU6IFZpb2xhdGlvblR5cGUuQ0lSQ1VMQVJfSU1QT1JULCBtZXNzYWdlOiBgJHtpbXAuam9pbignIC0+ICcpfWAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUmVzb3VyY2VzKCk6IFZpb2xhdGlvbltdIHtcbiAgICBjb25zb2xlLmxvZygnVmFsaWRhdGluZyByZXNvdXJjZXMnKTtcbiAgICBjb25zdCB2aW9sYXRpb25zID0gW107XG4gICAgZm9yIChjb25zdCBbc3JjLCBfXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnJlc291cmNlcykpIHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4odGhpcy5wYWNrYWdlRGlyLCBzcmMpKSkge1xuICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFZpb2xhdGlvblR5cGUuTUlTU0lOR19SRVNPVVJDRSxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5hYmxlIHRvIGZpbmQgcmVzb3VyY2UgKCR7c3JjfSkgcmVsYXRpdmUgdG8gdGhlIHBhY2thZ2UgZGlyZWN0b3J5YCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aW9sYXRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUF0dHJpYnV0aW9ucygpOiByZWFkb25seSBWaW9sYXRpb25bXSB7XG4gICAgY29uc29sZS5sb2coJ1ZhbGlkYXRpbmcgYXR0cmlidXRpb25zJyk7XG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRpb25zLnZhbGlkYXRlKCkudmlvbGF0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYWRkRXh0ZXJuYWxzKG1hbmlmZXN0OiBhbnkpIHtcbiAgICAvLyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBydW50aW1lIGRlcGVuZGVuY2llc1xuICAgIGZvciAoY29uc3QgZXh0ZXJuYWwgb2YgdGhpcy5leHRlcm5hbHMuZGVwZW5kZW5jaWVzID8/IFtdKSB7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5maW5kRXh0ZXJuYWxEZXBlbmRlbmN5VmVyc2lvbihleHRlcm5hbCk7XG4gICAgICBtYW5pZmVzdC5kZXBlbmRlbmNpZXMgPSBtYW5pZmVzdC5kZXBlbmRlbmNpZXMgPz8ge307XG4gICAgICBtYW5pZmVzdC5kZXBlbmRlbmNpZXNbZXh0ZXJuYWxdID0gdmVyc2lvbjtcbiAgICB9XG5cbiAgICAvLyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBvcHRpb25hbCBkZXBlbmRlbmNpZXNcbiAgICBmb3IgKGNvbnN0IGV4dGVybmFsIG9mIHRoaXMuZXh0ZXJuYWxzLm9wdGlvbmFsRGVwZW5kZW5jaWVzID8/IFtdKSB7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5maW5kRXh0ZXJuYWxEZXBlbmRlbmN5VmVyc2lvbihleHRlcm5hbCk7XG4gICAgICBtYW5pZmVzdC5vcHRpb25hbERlcGVuZGVuY2llcyA9IG1hbmlmZXN0Lm9wdGlvbmFsRGVwZW5kZW5jaWVzID8/IHt9O1xuICAgICAgbWFuaWZlc3Qub3B0aW9uYWxEZXBlbmRlbmNpZXNbZXh0ZXJuYWxdID0gdmVyc2lvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZURlcGVuZGVuY2llcyhtYW5pZmVzdDogYW55KSB7XG4gICAgZm9yIChjb25zdCBbZCwgdl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5tYW5pZmVzdC5kZXBlbmRlbmNpZXMpKSB7XG4gICAgICBtYW5pZmVzdC5kZXZEZXBlbmRlbmNpZXMgPSBtYW5pZmVzdC5kZXZEZXBlbmRlbmNpZXMgPz8ge307XG4gICAgICBtYW5pZmVzdC5kZXZEZXBlbmRlbmNpZXNbZF0gPSB2O1xuICAgICAgZGVsZXRlIG1hbmlmZXN0LmRlcGVuZGVuY2llc1tkXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHdyaXRlT3V0cHV0cyh3b3JrRGlyOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiB0aGlzLmJ1bmRsZS5vdXRwdXRGaWxlcyA/PyBbXSkge1xuICAgICAgY29uc3Qgb3V0ID0gb3V0cHV0LnBhdGgucmVwbGFjZSh0aGlzLnBhY2thZ2VEaXIsIHdvcmtEaXIpO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhvdXQsIG91dHB1dC5jb250ZW50cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZVJlc291cmNlcyh3b3JrZGlyOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IFtzcmMsIGRzdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvdXJjZXMpKSB7XG4gICAgICBjb25zdCB0byA9IHBhdGguam9pbih3b3JrZGlyLCBkc3QpO1xuICAgICAgZnMuY29weVN5bmMocGF0aC5qb2luKHRoaXMucGFja2FnZURpciwgc3JjKSwgdG8sIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVNYW5pZmVzdCh3b3JrRGlyOiBzdHJpbmcsIG1hbmlmZXN0OiBhbnkpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbih3b3JrRGlyLCAncGFja2FnZS5qc29uJyksIEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0LCBudWxsLCAyKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9uZ2VzdENvbW1vblBhcmVudChwYXRoczogc3RyaW5nW10pIHtcbiAgZnVuY3Rpb24gX2xvbmdlc3RDb21tb25QYXJlbnQocDE6IHN0cmluZywgcDI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGlyczEgPSBwMS5zcGxpdChwYXRoLnNlcCk7XG4gICAgY29uc3QgZGlyczIgPSBwMi5zcGxpdChwYXRoLnNlcCk7XG4gICAgY29uc3QgcGFyZW50ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihkaXJzMS5sZW5ndGgsIGRpcnMyLmxlbmd0aCk7IGkrKykge1xuICAgICAgaWYgKGRpcnMxW2ldICE9PSBkaXJzMltpXSkgYnJlYWs7XG4gICAgICBwYXJlbnQucHVzaChkaXJzMVtpXSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnQuam9pbihwYXRoLnNlcCk7XG4gIH1cblxuICByZXR1cm4gcGF0aHMucmVkdWNlKF9sb25nZXN0Q29tbW9uUGFyZW50KTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"typescript": "^4.9.5"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"esbuild": "^0.25.
|
|
61
|
+
"esbuild": "^0.25.8",
|
|
62
62
|
"fs-extra": "^10.1.0",
|
|
63
63
|
"license-checker": "^25.0.1",
|
|
64
64
|
"madge": "^5.0.2",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"publishConfig": {
|
|
71
71
|
"access": "public"
|
|
72
72
|
},
|
|
73
|
-
"version": "1.
|
|
73
|
+
"version": "1.1.1",
|
|
74
74
|
"jest": {
|
|
75
75
|
"coverageProvider": "v8",
|
|
76
76
|
"testMatch": [
|