jsii-release 0.2.1043 → 0.2.1045
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 +11 -2
- package/bin/publib-npm +10 -0
- package/bin/publib-nuget +10 -0
- package/bin/publib-pypi +10 -0
- package/lib/bin/publib-golang.js +2 -2
- package/lib/bin/publib-maven.js +2 -2
- package/package.json +4 -4
- package/package.json.bak +4 -4
package/README.md
CHANGED
|
@@ -50,6 +50,15 @@ You can also execute individual publishers:
|
|
|
50
50
|
* `publib-pypi`
|
|
51
51
|
* `publib-golang`
|
|
52
52
|
|
|
53
|
+
## Dry Run
|
|
54
|
+
|
|
55
|
+
All publishers support a dry run mode via the `PUBLIB_DRYRUN` environment variable.
|
|
56
|
+
Set `PUBLIB_DRYRUN=true` to skip actual publishing across all targets:
|
|
57
|
+
|
|
58
|
+
```shell
|
|
59
|
+
PUBLIB_DRYRUN=true publib
|
|
60
|
+
```
|
|
61
|
+
|
|
53
62
|
## npm
|
|
54
63
|
|
|
55
64
|
Publishes all `*.tgz` files from `DIR` to [npmjs](npmjs.com), [GitHub Packages](https://github.com/features/packages) or [AWS CodeArtifact](https://aws.amazon.com/codeartifact/).
|
|
@@ -116,7 +125,7 @@ The server type is selected using the `MAVEN_SERVER_ID` variable.
|
|
|
116
125
|
| -------------------- | --------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
117
126
|
| (all) | `MAVEN_SERVER_ID` | Yes going forward | Either `ossrh` (default but deprecated), `central-ossrh`, or any other string for a custom Nexus server. |
|
|
118
127
|
| (all) | `MAVEN_USERNAME` and `MAVEN_PASSWORD` | Yes | Username and password for maven repository. For Maven Central, you will need to [Create JIRA account](https://issues.sonatype.org/secure/Signup!default.jspa) and then request a [new project](https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134). Read the [OSSRH guide](https://central.sonatype.org/pages/ossrh-guide.html) for more details. |
|
|
119
|
-
| (all) | `MAVEN_DRYRUN` | No | Set to "true" for a dry run
|
|
128
|
+
| (all) | `MAVEN_DRYRUN` | No | Deprecated. Use `PUBLIB_DRYRUN` instead. Set to "true" for a dry run |
|
|
120
129
|
| (all) | `MAVEN_VERBOSE` | No | Make Maven print debug output if set to `true` |
|
|
121
130
|
| `central-ossrh` | `MAVEN_GPG_PRIVATE_KEY[_FILE]` and `MAVEN_GPG_PRIVATE_KEY_PASSPHRASE` | Yes | GPG private key or file that includes it. This is used to sign your Maven packages. See instructions below |
|
|
122
131
|
| `central-ossrh` | `MAVEN_ENDPOINT` | No | URL of Nexus repository. Defaults to `https://ossrh-staging-api.central.sonatype.com/`. |
|
|
@@ -295,7 +304,7 @@ Repository tags will be in the following format:
|
|
|
295
304
|
| `GIT_USER_EMAIL` | Optional | Email to perform the commit with. Defaults to the git user.email config in the current directory. Fails if it doesn't exist. |
|
|
296
305
|
| `GIT_COMMIT_MESSAGE` | Optional | The commit message. Defaults to 'chore(release): $VERSION'. |
|
|
297
306
|
| `GIT_CLONE_DEPTH` | Optional | The git clone depth. Usually only the latest commit is required. Defaults to 1. |
|
|
298
|
-
| `DRYRUN` | Optional | Set to "true" for a dry run.
|
|
307
|
+
| `DRYRUN` | Optional | Deprecated. Use `PUBLIB_DRYRUN` instead. Set to "true" for a dry run. |
|
|
299
308
|
|
|
300
309
|
## Publish to CodeArtifact for testing
|
|
301
310
|
|
package/bin/publib-npm
CHANGED
|
@@ -83,6 +83,16 @@ fi
|
|
|
83
83
|
|
|
84
84
|
log=$(mktemp -d)/npmlog.txt
|
|
85
85
|
|
|
86
|
+
# Check for dry run
|
|
87
|
+
if [ "${PUBLIB_DRYRUN:-}" = "true" ]; then
|
|
88
|
+
echo "🏜️ Dry run: skipping npm publish"
|
|
89
|
+
for file in ${dir}/**.tgz; do
|
|
90
|
+
echo " (would publish ${file})"
|
|
91
|
+
done
|
|
92
|
+
echo "SUCCESS (dry run)"
|
|
93
|
+
exit 0
|
|
94
|
+
fi
|
|
95
|
+
|
|
86
96
|
for file in ${dir}/**.tgz; do
|
|
87
97
|
npm publish ${tag} ${access} ${file} 2>&1 | tee ${log}
|
|
88
98
|
exit_code="${PIPESTATUS[0]}"
|
package/bin/publib-nuget
CHANGED
|
@@ -78,6 +78,16 @@ fi
|
|
|
78
78
|
|
|
79
79
|
echo "Publishing NuGet packages..."
|
|
80
80
|
|
|
81
|
+
# Check for dry run
|
|
82
|
+
if [ "${PUBLIB_DRYRUN:-}" = "true" ]; then
|
|
83
|
+
echo "🏜️ Dry run: skipping NuGet publish"
|
|
84
|
+
for package_dir in ${packages}; do
|
|
85
|
+
echo " (would publish ${package_dir})"
|
|
86
|
+
done
|
|
87
|
+
echo "✅ All Done! (dry run)"
|
|
88
|
+
exit 0
|
|
89
|
+
fi
|
|
90
|
+
|
|
81
91
|
nuget_source="${NUGET_SERVER:-"https://api.nuget.org/v3/index.json"}"
|
|
82
92
|
nuget_symbol_source="https://nuget.smbsrc.net/"
|
|
83
93
|
|
package/bin/publib-pypi
CHANGED
|
@@ -85,5 +85,15 @@ if [ "$use_trusted_publisher" = "true" ]; then
|
|
|
85
85
|
fi
|
|
86
86
|
fi
|
|
87
87
|
|
|
88
|
+
# Check for dry run
|
|
89
|
+
if [ "${PUBLIB_DRYRUN:-}" = "true" ]; then
|
|
90
|
+
echo "🏜️ Dry run: skipping PyPI upload"
|
|
91
|
+
for file in *.whl; do
|
|
92
|
+
echo " (would upload ${file})"
|
|
93
|
+
done
|
|
94
|
+
echo "SUCCESS (dry run)"
|
|
95
|
+
exit 0
|
|
96
|
+
fi
|
|
97
|
+
|
|
88
98
|
echo "Uploading packages to PyPI"
|
|
89
99
|
python3 -m twine upload $upload_opts *
|
package/lib/bin/publib-golang.js
CHANGED
|
@@ -38,11 +38,11 @@ const go = __importStar(require("../targets/go"));
|
|
|
38
38
|
const releaser = new go.GoReleaser({
|
|
39
39
|
dir: process.argv[2],
|
|
40
40
|
branch: process.env.GIT_BRANCH,
|
|
41
|
-
dryRun: (process.env.DRYRUN ?? 'false').toLowerCase() === 'true',
|
|
41
|
+
dryRun: (process.env.PUBLIB_DRYRUN ?? process.env.DRYRUN ?? 'false').toLowerCase() === 'true',
|
|
42
42
|
email: process.env.GIT_USER_EMAIL,
|
|
43
43
|
username: process.env.GIT_USER_NAME,
|
|
44
44
|
version: process.env.VERSION,
|
|
45
45
|
cloneDepth: process.env.GIT_CLONE_DEPTH ? parseInt(process.env.GIT_CLONE_DEPTH) || 1 : 1,
|
|
46
46
|
});
|
|
47
47
|
releaser.release();
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGliLWdvbGFuZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vcHVibGliLWdvbGFuZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxrREFBb0M7QUFFcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQ2pDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVO0lBQzlCLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU07SUFDN0YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYztJQUNqQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhO0lBQ25DLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU87SUFDNUIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekYsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0ICogYXMgZ28gZnJvbSAnLi4vdGFyZ2V0cy9nbyc7XG5cbmNvbnN0IHJlbGVhc2VyID0gbmV3IGdvLkdvUmVsZWFzZXIoe1xuICBkaXI6IHByb2Nlc3MuYXJndlsyXSxcbiAgYnJhbmNoOiBwcm9jZXNzLmVudi5HSVRfQlJBTkNILFxuICBkcnlSdW46IChwcm9jZXNzLmVudi5QVUJMSUJfRFJZUlVOID8/IHByb2Nlc3MuZW52LkRSWVJVTiA/PyAnZmFsc2UnKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScsXG4gIGVtYWlsOiBwcm9jZXNzLmVudi5HSVRfVVNFUl9FTUFJTCxcbiAgdXNlcm5hbWU6IHByb2Nlc3MuZW52LkdJVF9VU0VSX05BTUUsXG4gIHZlcnNpb246IHByb2Nlc3MuZW52LlZFUlNJT04sXG4gIGNsb25lRGVwdGg6IHByb2Nlc3MuZW52LkdJVF9DTE9ORV9ERVBUSCA/IHBhcnNlSW50KHByb2Nlc3MuZW52LkdJVF9DTE9ORV9ERVBUSCkgfHwgMSA6IDEsXG59KTtcblxucmVsZWFzZXIucmVsZWFzZSgpO1xuIl19
|
package/lib/bin/publib-maven.js
CHANGED
|
@@ -96,7 +96,7 @@ async function main() {
|
|
|
96
96
|
const sharedOptions = {
|
|
97
97
|
username: envVar('MAVEN_USERNAME'),
|
|
98
98
|
password: envVar('MAVEN_PASSWORD'),
|
|
99
|
-
dryRun: process.env.MAVEN_DRYRUN === 'true',
|
|
99
|
+
dryRun: process.env.MAVEN_DRYRUN === 'true' || process.env.PUBLIB_DRYRUN === 'true',
|
|
100
100
|
verbose: process.env.MAVEN_VERBOSE === 'true',
|
|
101
101
|
poms,
|
|
102
102
|
};
|
|
@@ -609,4 +609,4 @@ main().catch(e => {
|
|
|
609
609
|
}
|
|
610
610
|
process.exitCode = 1;
|
|
611
611
|
});
|
|
612
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGliLW1hdmVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9wdWJsaWItbWF2ZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNm5CQSxvQ0FRQztBQXJvQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCwyQkFBb0M7QUFDcEMsMkJBQStFO0FBRS9FLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDO0FBRWpELE1BQU0sMEJBQTBCLEdBQUcsdURBQXVELENBQUM7QUFFM0YsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztJQUV4QyxJQUFBLE9BQUUsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUViLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxTQUFJLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxXQUFXLENBQUMsaURBQWlELE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQUEsU0FBSSxFQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU1QixNQUFNLGFBQWEsR0FBeUI7UUFDMUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsQyxRQUFRLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksS0FBSyxN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RSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBWTtJQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxnQkFBZ0I7QUFDaEIsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSw0RUFBNEU7QUFDNUUscURBQXFEO0FBQ3JELEVBQUU7QUFDRixnR0FBZ0c7QUFFaEcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2YsSUFBSSxDQUFDLFlBQVksa0JBQWEsRUFBRSxDQUFDO1FBQy9CLElBQUEsU0FBSSxFQUFDLHNDQUFzQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO1NBQU0sSUFBSSxDQUFDLFlBQVksV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBQSxTQUFJLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMZWdhY3kgdnMgY29tcGF0aWJpbGl0eSBlbmRwb2ludFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICpcbiAqIFRoaXMgc2NyaXB0IHRhbGtzIGFib3V0IGxlZ2FjeSB2cyBjb21wYXRpYmlsaXR5IGVuZHBvaW50IGEgYnVuY2guXG4gKlxuICogQm90aCBpbXBsZW1lbnQgdGhlIE5leHVzIDIgcHJvdG9jb2wsIGhvd2V2ZXI6XG4gKlxuICogLSBUaGUgXCJsZWdhY3lcIiBlbmRwb2ludCBpcyB0aGUgU29uYXR5cGUgT1NTUkggZW5kcG9pbnQgdGhhdCB3YXMgZGVwcmVjYXRlZCBKdW5lIDIwMjUuXG4gKiAtIFRoZSBcImNvbXBhdGliaWxpdHlcIiBlbmRwb2ludCBpcyBhIE5leHVzIDItY29tcGF0aWJsZSBlbmRwb2ludCBzdG9vZCB1cCBmb3IgdGhlIG5ld1xuICogICBwdWJsaXNoaW5nIHNlcnZpY2UsIENlbnRyYWwgUHVibGlzaGluZy5cbiAqXG4gKiBJdCBzaG91bGQgYmUgdGhlIHNhbWUgcHJvdG9jb2wgYnV0IG9mIGNvdXJzZSB0aGVyZSBhcmUgc3VidGxlIGRpZmZlcmVuY2VzXG4gKiBiZXR3ZWVuIHRoZW0gKGluIGhvdyB0aGV5IHNpZ25hbCBlcnJvciB3aGVuIHlvdSB0cnkgdG8gcmVwdWJsaXNoIGFuIGFscmVhZHlcbiAqIHB1Ymxpc2hlZCB2ZXJzaW9uLCBhbmQgZXZlbiBpbiB0aGUgd2lyZSBwcm90b2NvbCBhY2NlcHRlZCkgc28gd2UgaGF2ZSB0b1xuICogdHJlYXQgdGhlbSBkaWZmZXJlbnRseSBoZXJlLlxuICpcbiAqIFRoZXJlIGlzIGFsc28gYW4gXCJvZmZpY2lhbCBuZXdcIiBwcm90b2NvbCBmb3IgdGhlIG5ldyBwdWJsaXNoaW5nIG1lY2hhbmlzbSxcbiAqIGJ1dCB0aGUgTWF2ZW4gcGx1Z2luIHRoZXkgc3VwcGx5IGZvciB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0LiBJbiB0aGVpciB3b3JkczpcbiAqXG4gKiA+IGl0IGFwcGVhcnMgdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBcInR3byBzdGFnZVwiWzFdIGRlcGxveW1lbnQgcHJvY2Vzcywgd2hpY2ggaXNcbiAqID4gbm90IHlldCBzdXBwb3J0ZWQgYnkgdGhlIG5ldyBwbHVnaW4uIFlvdSBhcmUgdGhlIGZpcnN0IHB1Ymxpc2hlciB0byBoYXZlXG4gKiA+IHJlcXVlc3RlZCB0aGlzLCBzbyB3ZSB3ZXJlIG5vdCBmYW1pbGlhciB3aXRoIHRoaXMgc3BlY2lmaWMgdXNlY2FzZSB3aGVuXG4gKiA+IGJ1aWxkaW5nIHRoZSBuZXcgcGx1Z2luXG4gKiA+IFsxXSA8aHR0cHM6Ly9naXRodWIuY29tL3NvbmF0eXBlL25leHVzLW1hdmVuLXBsdWdpbnMvYmxvYi80M2E5OTQwYjEzNGMzZjg3ZWJlNGRhYTgyNTUyZTg0NGQ5YzU3OGI4L3N0YWdpbmcvbWF2ZW4tcGx1Z2luL1dPUktGTE9XUy5tZCN0d28tc2hvdHM+XG4gKi9cbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgJCwgY2QsIGVjaG8sIGdsb2IsIG9zLCBwYXRoLCBQcm9jZXNzT3V0cHV0LCBxdW90ZSwgdG1wZGlyIH0gZnJvbSAnengnO1xuXG5jb25zdCBMRUdBQ1lfT1NTUkhfU0VSVkVSX0lEID0gJ29zc3JoJztcbmNvbnN0IENPTVBBVF9DRU5UUkFMX1NFUlZFUl9JRCA9ICdjZW50cmFsLW9zc3JoJztcblxuY29uc3QgTkVYVVNfTUFWRU5fU1RBR0lOR19QTFVHSU4gPSAnb3JnLnNvbmF0eXBlLnBsdWdpbnM6bmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW46MS43LjAnO1xuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICBjb25zdCBqYXZhUm9vdCA9IGFyZ3NbMF0gPz8gJ2Rpc3QvamF2YSc7XG5cbiAgY2QoamF2YVJvb3QpO1xuXG4gIGNvbnN0IHBvbXMgPSBhd2FpdCBnbG9iKCcqKi8qLnBvbScpO1xuICBpZiAocG9tcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoYE5vIEpBUlMgdG8gcHVibGlzaDogbm8gLnBvbSBmaWxlcyBmb3VuZCB1bmRlciAke3Byb2Nlc3MuY3dkKCl9YCk7XG4gIH1cblxuICBlY2hvKGBQT01zIGZvdW5kOiAke3BvbXN9YCk7XG5cbiAgY29uc3Qgc2hhcmVkT3B0aW9uczogU2hhcmVkUHVibGlzaE9wdGlvbnMgPSB7XG4gICAgdXNlcm5hbWU6IGVudlZhcignTUFWRU5fVVNFUk5BTUUnKSxcbiAgICBwYXNzd29yZDogZW52VmFyKCdNQVZFTl9QQVNTV09SRCcpLFxuICAgIGRyeVJ1bjogcHJvY2Vzcy5lbnYuTUFWRU5fRFJZUlVOID09PSAndHJ1ZScsXG4gICAgdmVyYm9zZTogcHJvY2Vzcy5lbnYuTUFWRU5fVkVSQk9TRSA9PT0gJ3RydWUnLFxuICAgIHBvbXMsXG4gIH07XG5cbiAgbGV0IG9wdGlvbnM6IE1hdmVuUHVibGlzaE9wdGlvbnM7XG4gIGNvbnN0IHNlcnZlcklkID0gcHJvY2Vzcy5lbnYuTUFWRU5fU0VSVkVSX0lEID8/IExFR0FDWV9PU1NSSF9TRVJWRVJfSUQ7XG5cbiAgc3dpdGNoIChzZXJ2ZXJJZCkge1xuICAgIGNhc2UgTEVHQUNZX09TU1JIX1NFUlZFUl9JRDpcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHR5cGU6ICdsZWdhY3ktb3NzcmgnLFxuICAgICAgICAuLi5zaGFyZWRPcHRpb25zLFxuICAgICAgICBzdGFnaW5nUHJvZmlsZUlkOiBlbnZWYXIoJ01BVkVOX1NUQUdJTkdfUFJPRklMRV9JRCcpLFxuICAgICAgICBlbmRwb2ludDogcHJvY2Vzcy5lbnYuTUFWRU5fRU5EUE9JTlQsXG4gICAgICAgIHByaXZhdGVLZXk6IHBhcnNlUHJpdmF0ZUtleUZyb21FbnYoKSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIENPTVBBVF9DRU5UUkFMX1NFUlZFUl9JRDpcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHR5cGU6ICdjb21wYXQtb3NzcmgnLFxuICAgICAgICAuLi5zaGFyZWRPcHRpb25zLFxuICAgICAgICAvLyBOb3QgcmVxdWlyZWQgYnkgdGhlIG5ldyBlbmRwb2ludDogY2FuIGJlIGFueSB2YWx1ZSAobWF5YmUgbmV2ZXIgd2FzIHJlcXVpcmVkIHRvIGJlZ2luIHdpdGg/KVxuICAgICAgICBzdGFnaW5nUHJvZmlsZUlkOiAncHVibGliJyxcbiAgICAgICAgZW5kcG9pbnQ6IHByb2Nlc3MuZW52Lk1BVkVOX0VORFBPSU5ULFxuICAgICAgICBwcml2YXRlS2V5OiBwYXJzZVByaXZhdGVLZXlGcm9tRW52KCksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFdlIGhhdmVuJ3QgaW1wbGVtZW50ZWQgc2lnbmluZyBmb3IgdGhpcywgc28gZmFpbCBsb3VkbHkgaWYgcGVvcGxlIHRyeSB0byB1c2UgaXQgYW55d2F5XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZIHx8IHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWV9GSUxFKSB7XG4gICAgICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcignTUFWRU5fR1BHX1BSSVZBVEVfS0VZW19GSUxFXSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgT1NTUkggcHVibGlzaGluZycpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiAnY3VzdG9tLW5leHVzJyxcbiAgICAgICAgLi4uc2hhcmVkT3B0aW9ucyxcbiAgICAgICAgc2VydmVySWQsXG4gICAgICAgIHJlcG9zaXRvcnlVcmw6IGVudlZhcignTUFWRU5fUkVQT1NJVE9SWV9VUkwnKSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGF3YWl0IG1hdmVuUHVibGlzaChvcHRpb25zKTtcblxuICBlY2hvKCd+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Jyk7XG4gIGVjaG8oJ+KchSBBbGwgRG9uZSEnKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcml2YXRlS2V5RnJvbUVudigpOiBQcml2YXRlS2V5IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWV9GSUxFKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2ZpbGUnLCBmaWxlTmFtZTogcHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZX0ZJTEUsIHBhc3NQaHJhc2U6IGVudlZhcignTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0UnKSB9O1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVkpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnbWF0ZXJpYWwnLCBrZXlNYXRlcmlhbDogcHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZLCBwYXNzUGhyYXNlOiBlbnZWYXIoJ01BVkVOX0dQR19QUklWQVRFX0tFWV9QQVNTUEhSQVNFJykgfTtcbiAgfVxuICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoJ01BVkVOX0dQR19QUklWQVRFX0tFWVtfRklMRV0gaXMgcmVxdWlyZWQnKTtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAgTW9kZWxpbmcgYWxsIHRoZSBwYXJhbWV0ZXJzIHNvIHRoYXQgd2UgY2FuIHB1bGwgdGhlIGVudmlyb25tZW50IHBhcnNpbmcgZm9yd2FyZFxuLy9cblxuaW50ZXJmYWNlIFNoYXJlZFB1Ymxpc2hPcHRpb25zIHtcbiAgcmVhZG9ubHkgdXNlcm5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGFzc3dvcmQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZHJ5UnVuOiBib29sZWFuO1xuICByZWFkb25seSB2ZXJib3NlOiBib29sZWFuO1xuICByZWFkb25seSBwb21zOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIExlZ2FjeU9zc3JoUHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBTaGFyZWRQdWJsaXNoT3B0aW9ucyB7XG4gIHR5cGU6ICdsZWdhY3ktb3NzcmgnO1xuICByZWFkb25seSBwcml2YXRlS2V5OiBQcml2YXRlS2V5O1xuICByZWFkb25seSBlbmRwb2ludD86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhZ2luZ1Byb2ZpbGVJZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ29tcGF0T3NzcmhQdWJsaXNoT3B0aW9ucyBleHRlbmRzIFNoYXJlZFB1Ymxpc2hPcHRpb25zIHtcbiAgdHlwZTogJ2NvbXBhdC1vc3NyaCc7XG4gIHJlYWRvbmx5IHByaXZhdGVLZXk6IFByaXZhdGVLZXk7XG4gIHJlYWRvbmx5IGVuZHBvaW50Pzogc3RyaW5nO1xuICByZWFkb25seSBzdGFnaW5nUHJvZmlsZUlkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDdXN0b21OZXh1c1B1Ymxpc2hPcHRpb25zIGV4dGVuZHMgU2hhcmVkUHVibGlzaE9wdGlvbnMge1xuICB0eXBlOiAnY3VzdG9tLW5leHVzJztcbiAgcmVhZG9ubHkgcmVwb3NpdG9yeVVybDogc3RyaW5nO1xuICByZWFkb25seSBzZXJ2ZXJJZDogc3RyaW5nO1xufVxuXG50eXBlIFByaXZhdGVLZXkgPVxuICB8IHsgdHlwZTogJ2ZpbGUnOyBmaWxlTmFtZTogc3RyaW5nOyBwYXNzUGhyYXNlOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ21hdGVyaWFsJzsga2V5TWF0ZXJpYWw6IHN0cmluZzsgcGFzc1BocmFzZTogc3RyaW5nIH1cbiAgO1xuXG50eXBlIE1hdmVuUHVibGlzaE9wdGlvbnMgPSBMZWdhY3lPc3NyaFB1Ymxpc2hPcHRpb25zIHwgQ29tcGF0T3NzcmhQdWJsaXNoT3B0aW9uc3wgQ3VzdG9tTmV4dXNQdWJsaXNoT3B0aW9ucztcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAgUHVibGlzaGluZyBmdW5jdGlvbnNcbi8vXG5cbmFzeW5jIGZ1bmN0aW9uIG1hdmVuUHVibGlzaChvcHRpb25zOiBNYXZlblB1Ymxpc2hPcHRpb25zKSB7XG4gIGF3YWl0IHVzaW5nIHdvcmtEaXIgPSBhdXRvQ2xlYW5EaXIoKTtcbiAgY29uc3QgbWF2ZW4gPSBuZXcgTWF2ZW4od29ya0Rpci5kaXIsIG9wdGlvbnMudmVyYm9zZSwgb3B0aW9ucy5kcnlSdW4pO1xuXG4gIGNvbnN0IHggPSBvcHRpb25zLnR5cGU7XG4gIHN3aXRjaCAoeCkge1xuICAgIGNhc2UgJ2xlZ2FjeS1vc3NyaCc6XG4gICAgICBhd2FpdCBkZXBsb3lMZWdhY3lPc3NyaChtYXZlbiwgb3B0aW9ucyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb21wYXQtb3NzcmgnOlxuICAgICAgYXdhaXQgZGVwbG95Q29tcGF0T3NzcmgobWF2ZW4sIG9wdGlvbnMpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY3VzdG9tLW5leHVzJzpcbiAgICAgIGF3YWl0IGRlcGxveUN1c3RvbU5leHVzKG1hdmVuLCBvcHRpb25zKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBhc3NlcnROZXZlcih4KTtcbiAgfVxufVxuXG4vKipcbiAqIERlcGxveSB0byB0aGUgbGVnYWN5IE9TU1JIIE5leHVzIHNlcnZlclxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lMZWdhY3lPc3NyaChtYXZlbjogTWF2ZW4sIG9wdGlvbnM6IExlZ2FjeU9zc3JoUHVibGlzaE9wdGlvbnMpIHtcbiAgZWNobygn8J+TpiBQdWJsaXNoaW5nIHRvIE1hdmVuIENlbnRyYWwnKTtcbiAgY29uc3QgZGVmYXVsdEVuZHBvaW50ID0gJ2h0dHBzOi8vb3NzLnNvbmF0eXBlLm9yZyc7XG5cbiAgY29uc3Qgc3RhZ2VkID0gYXdhaXQgZGVwbG95U3RhZ2VkUmVwb3NpdG9yeShtYXZlbiwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5kcG9pbnQ6IG9wdGlvbnMuZW5kcG9pbnQgPz8gZGVmYXVsdEVuZHBvaW50LFxuICAgIHJlcHVibGlzaFdpbGw0MDA6IGZhbHNlLFxuICB9KTtcblxuICBpZiAoc3RhZ2VkLnR5cGUgIT09ICdzdWNjZXNzJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qXG4gIGNvbnN0IHJlbGVhc2VkID0gYXdhaXQgcmVsZWFzZVJlcG8oe1xuICAgIHNlcnZlclVybDogb3B0aW9ucy5lbmRwb2ludCA/PyBkZWZhdWx0RW5kcG9pbnQsXG4gICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWUsXG4gICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgcmVwb3NpdG9yeUlkOiBzdGFnZWQucmVwb3NpdG9yeUlkLFxuICB9KTtcblxuICBpZiAocmVsZWFzZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgKi9cblxuICAvLyBTZW5kIGEgcmVtb3RlIHJlbGVhc2UgY29tbWFuZCB0byB0aGUgcmVwb3NpdG9yeVxuICBjb25zdCByZWxlYXNlT3V0cHV0ID0gYXdhaXQgbWF2ZW4uZXhlYyhgJHtORVhVU19NQVZFTl9TVEFHSU5HX1BMVUdJTn06cmMtcmVsZWFzZWAsIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBuZXh1c1VybDogb3B0aW9ucy5lbmRwb2ludCA/PyBkZWZhdWx0RW5kcG9pbnQsXG4gICAgICBzZXJ2ZXJJZDogc3RhZ2VkLnNlcnZlcklkLFxuICAgICAgc3RhZ2luZ1JlcG9zaXRvcnlJZDogc3RhZ2VkLnJlcG9zaXRvcnlJZCxcbiAgICB9LFxuICAgIG5vdGhyb3c6IHRydWUsXG4gIH0pO1xuICBpZiAoIXJlbGVhc2VPdXRwdXQpIHtcbiAgICBlY2hvKCfwn4+c77iPIFN0b3BwZWQgaGVyZSBiZWNhdXNlIG9mIGRyeS1ydW4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocmVsZWFzZU91dHB1dC5leGl0Q29kZSAhPT0gMCkge1xuICAgIC8vIElmIHJlbGVhc2UgZmFpbGVkLCBjaGVjayBpZiB0aGlzIHdhcyBjYXVzZWQgYmVjYXVzZSB3ZSBhcmUgdHJ5aW5nIHRvIHB1Ymxpc2hcbiAgICAvLyB0aGUgc2FtZSB2ZXJzaW9uIGFnYWluLCB3aGljaCBpcyBub3QgYW4gZXJyb3IuIFRoZSBtYWdpYyBzdHJpbmcgXCJkb2VzIG5vdFxuICAgIC8vIGFsbG93IHVwZGF0aW5nIGFydGlmYWN0XCIgZm9yIGEgXCIucG9tXCIgZmlsZSBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvXG4gICAgLy8gb3ZlcnJpZGUgYW4gZXhpc3RpbmcgdmVyc2lvbi4gT3RoZXJ3aXNlLCBmYWlsIVxuXG4gICAgY29uc3QgbG9va3NMaWtlRHVwbGljYXRlUHVibGlzaCA9IHJlbGVhc2VPdXRwdXQubGluZXMoKVxuICAgICAgLmZpbHRlcihsID0+IGwuaW5jbHVkZXMoJ2RvZXMgbm90IGFsbG93IHVwZGF0aW5nIGFydGlmYWN0JykpXG4gICAgICAuZmlsdGVyKGwgPT4gbC5pbmNsdWRlcygnLnBvbScpKVxuICAgICAgLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAoIWxvb2tzTGlrZUR1cGxpY2F0ZVB1Ymxpc2gpIHtcbiAgICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcignUmVsZWFzZSBmYWlsZWQnKTtcbiAgICB9XG5cbiAgICBlY2hvKCfimqDvuI8gQXJ0aWZhY3QgYWxyZWFkeSBwdWJsaXNoZWQuIFNraXBwaW5nJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXBsb3kgdG8gdGhlIGNvbXBhdCBPU1NSSCBOZXh1cyBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwbG95Q29tcGF0T3NzcmgobWF2ZW46IE1hdmVuLCBvcHRpb25zOiBDb21wYXRPc3NyaFB1Ymxpc2hPcHRpb25zKSB7XG4gIGVjaG8oJ/Cfk6YgUHVibGlzaGluZyB0byBNYXZlbiBDZW50cmFsIChDb21wYXQgZW5kcG9pbnQpJyk7XG5cbiAgY29uc3QgZGVmYXVsdEVuZHBvaW50ID0gJ2h0dHBzOi8vb3Nzcmgtc3RhZ2luZy1hcGkuY2VudHJhbC5zb25hdHlwZS5jb20vJztcbiAgY29uc3QgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50ID8/IGRlZmF1bHRFbmRwb2ludDtcblxuICBjb25zdCBzdGFnZWQgPSBhd2FpdCBkZXBsb3lTdGFnZWRSZXBvc2l0b3J5KG1hdmVuLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmRwb2ludCxcbiAgICByZXB1Ymxpc2hXaWxsNDAwOiB0cnVlLFxuICB9KTtcblxuICBpZiAoc3RhZ2VkLnR5cGUgIT09ICdzdWNjZXNzJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlbGVhc2VkID0gYXdhaXQgcmVsZWFzZVJlcG8oe1xuICAgIHNlcnZlclVybDogZW5kcG9pbnQsXG4gICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWUsXG4gICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgcmVwb3NpdG9yeUlkOiBzdGFnZWQucmVwb3NpdG9yeUlkLFxuICB9KTtcblxuICBpZiAocmVsZWFzZWQgPT09ICdkdXBsaWNhdGUtdmVyc2lvbicpIHtcbiAgICBlY2hvKCfimqDvuI8gVmVyc2lvbihzKSBhbHJlYWR5IHB1Ymxpc2hlZC4gU2tpcHBpbmcnKTtcbiAgfVxufVxuXG4vKipcbiAqIERlcGxveSB0byBhIGN1c3RvbSBOZXh1cyBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwbG95Q3VzdG9tTmV4dXMobWF2ZW46IE1hdmVuLCBvcHRpb25zOiBDdXN0b21OZXh1c1B1Ymxpc2hPcHRpb25zKSB7XG4gIGVjaG8oYPCfk6YgUHVibGlzaGluZyB0byAke29wdGlvbnMuc2VydmVySWR9YCk7XG4gIGF3YWl0IG1hdmVuLndyaXRlU2V0dGluZ3NGaWxlKG9wdGlvbnMuc2VydmVySWQsIGZhbHNlKTtcblxuICBmb3IgKGNvbnN0IHBvbSBvZiBvcHRpb25zLnBvbXMpIHtcbiAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBtYXZlbi5leGVjKCdkZXBsb3k6ZGVwbG95LWZpbGUnLCB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHVybDogb3B0aW9ucy5yZXBvc2l0b3J5VXJsLFxuICAgICAgICByZXBvc2l0b3J5SWQ6IG9wdGlvbnMuc2VydmVySWQsXG4gICAgICAgIHBvbUZpbGU6IHBvbSxcbiAgICAgICAgLi4uamFyc0Zyb21Qb20ocG9tKSxcbiAgICAgIH0sXG4gICAgICBub3Rocm93OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKGRlcGxveU91dHB1dD8uZXhpdENvZGUgJiYgZGVwbG95T3V0cHV0LmV4aXRDb2RlID4gMCkge1xuICAgICAgaWYgKGRlcGxveU91dHB1dC5zdGRvdXQuaW5jbHVkZXMoJzQwOSBDb25mbGljdCcpKSB7XG4gICAgICAgIGVjaG8oJ+KaoO+4jyBBcnRpZmFjdCBhbHJlYWR5IHB1Ymxpc2hlZC4gU2tpcHBpbmcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcignUmVsZWFzZSBmYWlsZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudHlwZSBEZXBsb3lTdGFnZWRSZXBvUmVzdWx0ID1cbiAgfCB7IHR5cGU6ICdzdWNjZXNzJzsgcmVwb3NpdG9yeUlkOiBzdHJpbmc7IHNlcnZlcklkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ2FscmVhZHktcHVibGlzaGVkJyB9XG4gIHwgeyB0eXBlOiAnZHJ5LXJ1bicgfTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIHN0YWdpbmcgcmVwb3NpdG9yeS4gVGhpcyBpcyB0aGUgc2FtZSBiZXR3ZWVuIHRoZSBsZWdhY3kgYW5kIGNvbXBhdCBlbmRwb2ludHMuXG4gKlxuICogYHJlcHVibGlzaFdpbGw0MDBgOiBpbiB0aGUgY29tcGF0aWJpbGl0eSBlbmRwb2ludCwgc3RhZ2luZyBhIHZlcnNpb24gdGhhdCBoYXMgYWxyZWFkeVxuICogYmVlbiBwdWJsaXNoZWQgd2lsbCBsZWFkIHRvIGEgYDQwMCBCYWQgUmVxdWVzdGAsIHdpdGggbm8gZnVydGhlciBpbmZvLiBXZSBuZWVkZWQgdG8gaGF2ZVxuICogcnVuIHRoZSBNYXZlbiBjb21tYW5kIHdpdGggYC0tZGVidWdgIGxvZ2dpbmcgdG8gc2VlIHRoZSBhY3R1YWwgZXJyb3IgbWVzc2FnZSBpbiB0aGUgb3V0cHV0LlxuICpcbiAqIEluIHRoZSBsZWdhY3kgZW5kcG9pbnQsIHN0YWdpbmcgdGFrZXMgbXVsdGlwbGUgbWludXRlcywgYW5kIE1hdmVuIHdpbGwgcG9sbFxuICogZXZlcnkgM3MgYW5kIHByaW50IHRoZSBvdXRwdXQuIFdlIHRoZXJlZm9yZSBkb24ndCB1c2UgdmVyYm9zZSBtb2RlIHRvIGF2b2lkXG4gKiBzdGRvdXQgc3BhbS4gSW4gdGhlIGxlZ2FjeSBlbmRwb2ludCwgZHVwbGljYXRlIHZlcnNpb24gcHVibGlzaGluZyBnZXRzXG4gKiByZXBvcnRlZCBkdXJpbmcgdGhlICdyZWxlYXNlJyBzdGVwIGFueXdheSwgbm90IGR1cmluZyBzdGFnaW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lTdGFnZWRSZXBvc2l0b3J5KG1hdmVuOiBNYXZlbiwgb3B0aW9uczogT21pdDxMZWdhY3lPc3NyaFB1Ymxpc2hPcHRpb25zIHwgQ29tcGF0T3NzcmhQdWJsaXNoT3B0aW9ucywgJ2VuZHBvaW50Jz4gJiB7IGVuZHBvaW50OiBzdHJpbmc7IHJlcHVibGlzaFdpbGw0MDA6IGJvb2xlYW4gfSk6IFByb21pc2U8RGVwbG95U3RhZ2VkUmVwb1Jlc3VsdD4ge1xuICBjb25zdCBzZXJ2ZXJJZCA9ICdvc3NyaCc7XG5cbiAgYXdhaXQgbWF2ZW4ud3JpdGVTZXR0aW5nc0ZpbGUoc2VydmVySWQsIHRydWUpO1xuXG4gIC8vIEZpcnN0IC0tIHNpZ24gYXJ0aWZhY3RzXG4gIGNvbnN0IHNpZ25lZERpciA9IHBhdGguam9pbihtYXZlbi53b3JrRGlyLCAnc2lnbmVkJyk7XG4gIGF3YWl0IGZzLm1rZGlyKHNpZ25lZERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgYXdhaXQgc2lnbkphcnMobWF2ZW4sIG9wdGlvbnMucG9tcywgc2lnbmVkRGlyLCBzZXJ2ZXJJZCwgb3B0aW9ucy5wcml2YXRlS2V5KTtcblxuICBlY2hvKCd+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Jyk7XG4gIGVjaG8oJyBEZXBsb3lpbmcgYW5kIGNsb3NpbmcgcmVwb3NpdG9yeS4uLicpO1xuICBlY2hvKCd+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Jyk7XG5cbiAgY29uc3QgbmV4dXNNYXZlblN0YWdpbmcgPSAnb3JnLnNvbmF0eXBlLnBsdWdpbnM6bmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW46MS43LjAnO1xuICBjb25zdCBzdGFnZU91dHB1dCA9IGF3YWl0IG1hdmVuLmV4ZWMoYCR7bmV4dXNNYXZlblN0YWdpbmd9OmRlcGxveS1zdGFnZWQtcmVwb3NpdG9yeWAsIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICByZXBvc2l0b3J5RGlyZWN0b3J5OiBzaWduZWREaXIsXG4gICAgICBuZXh1c1VybDogb3B0aW9ucy5lbmRwb2ludCxcbiAgICAgIHNlcnZlcklkLFxuICAgICAgc3RhZ2luZ1Byb2dyZXNzVGltZW91dE1pbnV0ZXM6ICczMCcsXG4gICAgICBzdGFnaW5nUHJvZmlsZUlkOiBvcHRpb25zLnN0YWdpbmdQcm9maWxlSWQsXG4gICAgfSxcbiAgICBub3Rocm93OiB0cnVlLFxuICAgIHZlcmJvc2U6IG9wdGlvbnMucmVwdWJsaXNoV2lsbDQwMCxcbiAgfSk7XG4gIC8vIEZJWE1FOiBOZXcgc3RhZ2luZyBBUEkgdGhyb3dzIGFuIGVycm9yIGhlcmUgb24gZHVwbGljYXRlIHZlcnNpb25zXG4gIGlmIChzdGFnZU91dHB1dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZWNobygn8J+PnO+4jyBTdG9wcGVkIGhlcmUgYmVjYXVzZSBvZiBkcnktcnVuJyk7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2RyeS1ydW4nIH07XG4gIH1cblxuICBpZiAob3B0aW9ucy5yZXB1Ymxpc2hXaWxsNDAwICYmIHN0YWdlT3V0cHV0LnRleHQoKS5tYXRjaCgvQ29tcG9uZW50IHdpdGggcGFja2FnZSB1cmwuKmFscmVhZHkgZXhpc3RzLykpIHtcbiAgICAvLyBXZSd2ZSBzZWVuIHRoaXMgZmFpbCB3aXRoIHRoZSBhYm92ZSBlcnJvciBtZXNzYWdlIG9uIHRoZSBPU1NSSCBjb21wYXRpYmlsaXR5IEFQSSB3aGVuIHRyeWluZyB0byByZXB1Ymxpc2hcbiAgICAvLyBhbiBhbHJlYWR5LXB1Ymxpc2hlZCB2ZXJzaW9uLlxuICAgIC8vXG4gICAgLy8gVGhpcyBpcyBwb3RlbnRpYWxseSBhIHByb2JsZW0gaWYgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGF0IG9uY2UsIGJlY2F1c2Ugbm90aGluZ1xuICAgIC8vIHdpbGwgYmUgcHVibGlzaGVkIGlmIHRoZXJlJ3Mgb25lIHBhY2thZ2UgaW4gdGhlcmUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHB1Ymxpc2hlZCBwcmV2aW91c2x5LiBCdXQgYydlc3QgbGEgdmllLlxuICAgIGVjaG8oJ+KaoO+4jyBWZXJzaW9uKHMpIGFscmVhZHkgcHVibGlzaGVkLiBTa2lwcGluZycpO1xuICAgIHJldHVybiB7IHR5cGU6ICdhbHJlYWR5LXB1Ymxpc2hlZCcgfTtcbiAgfSBlbHNlIGlmIChzdGFnZU91dHB1dC5leGl0Q29kZSAmJiBzdGFnZU91dHB1dC5leGl0Q29kZSA+IDApIHtcbiAgICB0aHJvdyBzdGFnZU91dHB1dDtcbiAgfVxuXG4gIC8vIEdyZXAgdGhlIHJlcG9zaXRvcnkgSUQgb3V0IG9mIHRoZSBwcmludGVkIG91dHB1dFxuICAvLyBbSU5GT10gICogQ2xvc2luZyBzdGFnaW5nIHJlcG9zaXRvcnkgd2l0aCBJRCBcIlhYWFhYWFhYWFhcIi5cbiAgY29uc3QgbSA9IHN0YWdlT3V0cHV0LnN0ZG91dC5tYXRjaCgvQ2xvc2luZyBzdGFnaW5nIHJlcG9zaXRvcnkgd2l0aCBJRCBcIihbXlwiXSspXCIvKTtcbiAgaWYgKCFtKSB7XG4gICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKCdVbmFibGUgdG8gZXh0cmFjdCByZXBvc2l0b3J5IElEIGZyb20gZGVwbG95LXN0YWdlZC1yZXBvc2l0b3J5IG91dHB1dC4gVGhpcyBtZWFucyBpdCBmYWlsZWQgdG8gY2xvc2Ugb3IgdGhlcmUgd2FzIGFuIHVuZXhwZWN0ZWQgcHJvYmxlbS4gQXQgYW55IHJhdGUsIHdlIGNhblxcJ3QgcmVsZWFzZSBpdC4gU29ycnkuJyk7XG4gIH1cbiAgY29uc3QgcmVwb3NpdG9yeUlkID0gbVsxXTtcblxuICByZXR1cm4geyB0eXBlOiAnc3VjY2VzcycsIHJlcG9zaXRvcnlJZCwgc2VydmVySWQgfTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgY3VzdG9tIFwicmVsZWFzZVwiIGNvbW1hbmQgdG8gdGhlIG5ldyBTb25hdHlwZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBlbmRwb2ludFxuICpcbiAqIFdoZW4gdXNpbmcgdGhlIGBuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbmAncyBgcmVsZWFzZWAgb3IgYHJjLXJlbGVhc2VgIGNvbW1hbmRzLCB3ZSBnZXQgdGhlIGZvbGxvd2luZ1xuICogZXJyb3I6XG4gKlxuICogU2VuZGluZzpcbiAqXG4gKiBgYGBcbiAqIDxzdGFnaW5nQWN0aW9uUmVxdWVzdD48ZGF0YT48c3RhZ2VkUmVwb3NpdG9yeUlkcyBjbGFzcz1cImphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN0XCI+PGEgY2xhc3M9XCJzdHJpbmctYXJyYXlcIj48c3RyaW5nPmlvLmdpdGh1Yi5yaXgwcnJyLS02M2VkYmNiZS1mMDU4LTQ0ZWItODVmNC1mZDlkY2UxYWVmNDA8L3N0cmluZz48L2E+PC9zdGFnZWRSZXBvc2l0b3J5SWRzPjxkZXNjcmlwdGlvbj51bmtub3duPC9kZXNjcmlwdGlvbj48YXV0b0Ryb3BBZnRlclJlbGVhc2U+dHJ1ZTwvYXV0b0Ryb3BBZnRlclJlbGVhc2U+PC9kYXRhPjwvc3RhZ2luZ0FjdGlvblJlcXVlc3Q+XG4gKiBgYGBcbiAqXG4gKiBFcnJvcjpcbiAqXG4gKiBgYGBcbiAqIEZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3Q6IEdvdCB1bmV4cGVjdGVkIFhNTCBlbGVtZW50IHdoZW4gcmVhZGluZyBzdGFnZWRSZXBvc2l0b3J5SWRzOiBHb3QgdW5leHBlY3RlZCBlbGVtZW50IFN0YXJ0RWxlbWVudChhLCB7XCJcIjogXCJcIiwgXCJ4bWxcIjogXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIiwgXCJ4bWxuc1wiOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJ9LCBbY2xhc3MgLT4gc3RyaW5nLWFycmF5XSksIGV4cGVjdGVkIG9uZSBvZjogc3RyaW5nXG4gKiBgYGBcbiAqXG4gKiBEb2luZyBhIG1hbnVhbCBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBhYm92ZSByZXF1ZXN0IHN1Y2NlZWRzLCBzbyB3ZSdsbCBqdXN0IHByb2NlZWQgd2l0aCBkb2luZ1xuICogdGhhdC5cbiAqXG4gKiBUaGUgZW5kcG9pbnQgYWxzbyBzdXBwb3J0cyBKU09OLCB3aGljaCB3ZSBwcmVmZXIgb3ZlciBYTUwuXG4gKlxuICogVGhpcyBlbmRwb2ludCB3aWxsIG5ldmVyIHJldHVybiBhbiBlcnJvciwgZXZlbiBpZiB0aGUgcHVibGlzaCBkaWRuJ3QgaGFwcGVuIGJlY2F1c2VcbiAqIG9mIGR1cGxpY2F0ZSB2ZXJzaW9uIHB1Ymxpc2hpbmcgKG5vdCBmb3IgdGhlIGxlZ2FjeSwgbm9yIGZvciB0aGUgY29tcGF0aWJpbGl0eSBlbmRwb2ludCkuXG4gKlxuICogQHNlZSBodHRwczovL2NlbnRyYWwuc29uYXR5cGUub3JnL3B1Ymxpc2gvcHVibGlzaC1wb3J0YWwtb3Nzcmgtc3RhZ2luZy1hcGkvXG4gKiBAc2VlIGh0dHBzOi8vc3VwcG9ydC5zb25hdHlwZS5jb20vaGMvZW4tdXMvYXJ0aWNsZXMvMjEzNDY1NDQ4LUF1dG9tYXRpY2FsbHktZHJvcHBpbmctb2xkLXN0YWdpbmctcmVwb3NpdG9yaWVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlbGVhc2VSZXBvKG9wdGlvbnM6IHsgc2VydmVyVXJsOiBzdHJpbmc7IHVzZXJuYW1lOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmc7IHJlcG9zaXRvcnlJZDogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9KTogUHJvbWlzZTwnb2snIHwgJ2R1cGxpY2F0ZS12ZXJzaW9uJz4ge1xuICBlY2hvKGDwn5qAIFJlbGVhc2luZyByZXBvc2l0b3J5ICR7b3B0aW9ucy5yZXBvc2l0b3J5SWR9IGF0ICR7b3B0aW9ucy5zZXJ2ZXJVcmx9YCk7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoJ3NlcnZpY2UvbG9jYWwvc3RhZ2luZy9idWxrL3Byb21vdGUnLCBvcHRpb25zLnNlcnZlclVybCk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHN0YWdlZFJlcG9zaXRvcnlJZHM6IFtvcHRpb25zLnJlcG9zaXRvcnlJZF0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uID8/ICdEZXBsb3ltZW50JyxcbiAgICAgICAgYXV0b0Ryb3BBZnRlclJlbGVhc2U6IHRydWUsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtidG9hKGAke29wdGlvbnMudXNlcm5hbWV9OiR7b3B0aW9ucy5wYXNzd29yZH1gKX1gLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG5cbiAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IChkdWUgdG8gc29tZSByZXBsaWNhdGlvbiBsYXRlbmN5PykgdGhlIGluaXRpYWwgXCJzdGFnZVwiIHN1Y2NlZWRzLFxuICAvLyBidXQgdGhlIFwicmVsZWFzZVwiIGZhaWxzLCBpZiB3ZSB0cnkgdG8gcHVibGlzaCBhbiBhbHJlYWR5LXB1Ymxpc2hlZCB2ZXJzaW9uIGFnYWluLlxuICAvL1xuICAvLyBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vIGdyZWF0IGVycm9yIGNvZGUgdG8gZGV0ZWN0IHRoaXMgcmlnaHQgbm93LCBidXQgSSd2ZSBvYnNlcnZlZFxuICAvLyB0aGlzIGVycm9yIHdoZW4gaXQgaGFwcGVuZWQuXG4gIC8vIEkgaGF2ZSBhIHN1cHBvcnQgcmVxdWVzdCBvdXQgdG8gU29uYXR5cGUgZm9yIHRoaXMsIHdlJ2xsIHNlZSBpZiB0aGlzIGNoYW5nZXMgb3ZlciB0aW1lLlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgJiYgYm9keSA9PT0gJ0ZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3Q6IHNlcnZpY2UgZXJyb3InKSB7XG4gICAgcmV0dXJuICdkdXBsaWNhdGUtdmVyc2lvbic7XG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9OiAke2JvZHl9YCk7XG4gIH1cblxuICBjb25zb2xlLmxvZyhib2R5KTtcblxuICByZXR1cm4gJ29rJztcbn1cblxuLyoqXG4gKiBTaWduIGFuZCBzdGFnZSBvdXIgYXJ0aWZhY3RzIGludG8gYSBsb2NhbCBkaXJlY3RvcnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2lnbkphcnMobWF2ZW46IE1hdmVuLCBwb21zOiBzdHJpbmdbXSwgdGFyZ2V0RGlyOiBzdHJpbmcsIHNlcnZlcklkOiBzdHJpbmcsIGtleTogUHJpdmF0ZUtleSkge1xuICBhd2FpdCB1c2luZyBncGcgPSBhd2FpdCBpbXBvcnRHcGdLZXkoa2V5KTtcblxuICAvLyBvbiBhIG1hYywgLS1waW5lbnRyeS1tb2RlIHRvIFwibG9vcGJhY2tcIiBhcmUgcmVxdWlyZWQgYW5kIEkgY291bGRuJ3QgZmluZCBhXG4gIC8vIHdheSB0byBkbyBzbyB2aWEgLURncGcuZ3BnQXJndW1lbnRzIG9yIHRoZSBzZXR0aW5ncyBmaWxlLCBzbyBoZXJlIHdlIGFyZS5cbiAgbGV0IGdwZ0JpbiA9ICdncGcnO1xuICBpZiAob3MucGxhdGZvcm0oKSA9PT0gJ2RhcndpbicpIHtcbiAgICBncGdCaW4gPSBwYXRoLmpvaW4obWF2ZW4ud29ya0RpciwgJ3B1YmxpYi1ncGcuc2gnKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZ3BnQmluLCBbXG4gICAgICAnIyEvYmluL2Jhc2gnLFxuICAgICAgJ2V4ZWMgZ3BnIC0tcGluZW50cnktbW9kZSBsb29wYmFjayBcIlxcJEBcIicsXG4gICAgXS5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gICAgYXdhaXQgJGBjaG1vZCAreCAke2dwZ0Jpbn1gO1xuICB9XG5cbiAgZm9yIChjb25zdCBwb20gb2YgcG9tcykge1xuICAgIGF3YWl0IG1hdmVuLmV4ZWMoJ2dwZzpzaWduLWFuZC1kZXBsb3ktZmlsZScsIHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ3VybCc6IGBmaWxlOi8vJHt0YXJnZXREaXJ9YCxcbiAgICAgICAgJ3JlcG9zaXRvcnlJZCc6IHNlcnZlcklkLCAvLyBNb3N0IGxpa2VseSBub3QgbmVjZXNzYXJ5XG4gICAgICAgICdncGcuaG9tZWRpcic6IGdwZy5ob21lLFxuICAgICAgICAnZ3BnLmtleW5hbWUnOiBncGcua2V5SWQsXG4gICAgICAgICdncGcuZXhlY3V0YWJsZSc6IGdwZ0JpbixcbiAgICAgICAgJ3BvbUZpbGUnOiBwb20sXG4gICAgICAgIC4uLmphcnNGcm9tUG9tKHBvbSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQmFzZWQgb24gdGhlIHBhdGggb2YgYSAucG9tIGZpbGUsIHJldHVybiB0aGUgcGF0aHMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgamFyc1xuICovXG5mdW5jdGlvbiBqYXJzRnJvbVBvbShwb206IHN0cmluZykge1xuICByZXR1cm4ge1xuICAgIGZpbGU6IHBvbS5yZXBsYWNlKC9cXC5wb20kLywgJy5qYXInKSxcbiAgICBzb3VyY2VzOiBwb20ucmVwbGFjZSgvXFwucG9tJC8sICctc291cmNlcy5qYXInKSxcbiAgICBqYXZhZG9jOiBwb20ucmVwbGFjZSgvXFwucG9tJC8sICctamF2YWRvYy5qYXInKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBpbXBvcnQgdGhlIEdQRyBrZXkgbWF0ZXJpYWwgaW50byBhIG5ldyBrZXljaGFpbiB0aGVyZVxuICovXG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHcGdLZXkoa2V5OiBQcml2YXRlS2V5KSB7XG4gIC8vIEdudVBHIHdpbGwgb2NjYXNpb25hbGx5IGJhaWwgb3V0IHdpdGggXCJncGc6IDx3aGF0ZXZlcj4gZmFpbGVkOiBJbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2VcIiwgdGhlIGZvbGxvd2luZyBhdHRlbXB0cyB0byBmaXhcbiAgY29uc3QgZ3BnSG9tZSA9IGF1dG9DbGVhbkRpcigpO1xuICB0cnkge1xuICAgIC8vIEluIENJIGVudmlyb25tZW50cyB0aGVyZSB3aWxsIGJlIG5vIHR0eSwgYW5kIHdlIGRvbid0IHdhbnQgdGhpcyB0byBzdG9wIHRoZSBzY3JpcHQuXG4gICAgLy8gVGhlIHZhcmlhYmxlIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggYSBub25zZW5zaWNhbCBzdHJpbmcgKFwibm90IGEgdHR5XCIpIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBtYXR0ZXIuXG4gICAgY29uc3QgdHR5ID0gKGF3YWl0ICQoeyBzdGRpbzogWydpbmhlcml0JywgJ3BpcGUnLCAncGlwZSddLCBub3Rocm93OiB0cnVlIH0pYHR0eWApLnN0ZG91dDtcblxuICAgIGxldCBwcml2YXRlS2V5RmlsZTtcbiAgICBjb25zdCB0eXBlID0ga2V5LnR5cGU7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdmaWxlJzpcbiAgICAgICAgcHJpdmF0ZUtleUZpbGUgPSBrZXkuZmlsZU5hbWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWF0ZXJpYWwnOlxuICAgICAgICBwcml2YXRlS2V5RmlsZSA9IHBhdGguam9pbihncGdIb21lLmRpciwgJ3ByaXZhdGUucGVtJyk7XG4gICAgICAgIGF3YWl0ICRgZWNobyAtZSAke2tleS5rZXlNYXRlcmlhbH0gPiAke3ByaXZhdGVLZXlGaWxlfWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0TmV2ZXIodHlwZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgR05VUEdIT01FOiBncGdIb21lLmRpcixcbiAgICAgIEdQR19UVFk6IHR0eSxcbiAgICB9O1xuXG4gICAgY29uc3QgJCQgPSAkKHsgZW52OiB7IC4uLnByb2Nlc3MuZW52LCAuLi5lbnYgfSB9KTtcblxuICAgIGF3YWl0ICQkYGdwZyAtLWFsbG93LXNlY3JldC1rZXktaW1wb3J0IC0tYmF0Y2ggLS15ZXMgLS1uby10dHkgLS1pbXBvcnQgJHtwcml2YXRlS2V5RmlsZX1gO1xuICAgIGNvbnN0IGdwZ0tleUlkID0gKGF3YWl0ICQkYGdwZyAtLWxpc3Qta2V5cyAtLXdpdGgtY29sb25zIHwgZ3JlcCBwdWIgfCBjdXQgLWQ6IC1mNWApLnN0ZG91dC50cmltKCk7XG5cbiAgICBlY2hvKGBncGdfa2V5X2lkPSR7Z3BnS2V5SWR9YCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAga2V5SWQ6IGdwZ0tleUlkLFxuICAgICAgZW52LFxuICAgICAgaG9tZTogZ3BnSG9tZS5kaXIsXG4gICAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jICgpID0+IGdwZ0hvbWVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSxcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZ3BnSG9tZVtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRocm93IGU7XG4gIH1cbn1cblxuY2xhc3MgTWF2ZW4ge1xuICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzRmlsZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB3b3JrRGlyOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgdmVyYm9zZTogYm9vbGVhbiwgcHVibGljIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0dGluZ3NGaWxlID0gcGF0aC5qb2luKHdvcmtEaXIsICdtdm4tc2V0dGluZ3MueG1sJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc2V0dGluZ3MueG1sIGZpbGUgd2l0aCB0aGUgdXNlcitwYXNzd29yZCBmb3IgbWF2ZW5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB3cml0ZVNldHRpbmdzRmlsZShzZXJ2ZXJJZDogc3RyaW5nLCBzaWduZWRBcnRpZmFjdHM6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuXG4gICAgbGluZXMucHVzaChcbiAgICAgICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiID8+JyxcbiAgICAgICc8c2V0dGluZ3MgeG1sbnM9XCJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9TRVRUSU5HUy8xLjAuMFwiJyxcbiAgICAgICcgICAgICAgIHhtbG5zOnhzaT1cImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlXCInLFxuICAgICAgJyAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPVwiaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvU0VUVElOR1MvMS4wLjAnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2Qvc2V0dGluZ3MtMS4wLjAueHNkXCI+JyxcbiAgICAgICcgIDxzZXJ2ZXJzPicsXG4gICAgICAnICAgIDxzZXJ2ZXI+JyxcbiAgICAgIGAgICAgICA8aWQ+JHtzZXJ2ZXJJZH08L2lkPmAsXG4gICAgICAvLyBNYXZlbiB3aWxsIHJlYWQgdGhlc2UsIHN1cnJvdW5kaW5nIGNvZGUgaGFzIGFscmVhZHkgbWFkZSBzdXJlIHRoZXkgYXJlIHNldFxuICAgICAgJyAgICAgIDx1c2VybmFtZT4ke2Vudi5NQVZFTl9VU0VSTkFNRX08L3VzZXJuYW1lPicsXG4gICAgICAnICAgICAgPHBhc3N3b3JkPiR7ZW52Lk1BVkVOX1BBU1NXT1JEfTwvcGFzc3dvcmQ+JyxcbiAgICAgICcgICAgPC9zZXJ2ZXI+JyxcbiAgICApO1xuXG4gICAgaWYgKHNpZ25lZEFydGlmYWN0cykge1xuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgJyAgICA8c2VydmVyPicsXG4gICAgICAgICcgICAgICA8aWQ+Z3BnLnBhc3NwaHJhc2U8L2lkPicsXG4gICAgICAgIC8vIE1hdmVuIHdpbGwgcmVhZCB0aGVzZSwgc3Vycm91bmRpbmcgY29kZSBoYXMgYWxyZWFkeSBtYWRlIHN1cmUgdGhleSBhcmUgc2V0XG4gICAgICAgICcgICAgICA8cGFzc3BocmFzZT4ke2Vudi5NQVZFTl9HUEdfUFJJVkFURV9LRVlfUEFTU1BIUkFTRX08L3Bhc3NwaHJhc2U+JyxcbiAgICAgICAgJyAgICA8L3NlcnZlcj4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsaW5lcy5wdXNoKFxuICAgICAgJyAgPC9zZXJ2ZXJzPicsXG4gICAgICAnPC9zZXR0aW5ncz4nLFxuICAgICk7XG5cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUodGhpcy5zZXR0aW5nc0ZpbGUsIGxpbmVzLmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBleGVjKG1vam86IHN0cmluZywgb3B0aW9uczogTWF2ZW5FeGVjT3B0aW9ucyk6IFByb21pc2U8UHJvY2Vzc091dHB1dCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICBgLS1zZXR0aW5ncz0ke3RoaXMuc2V0dGluZ3NGaWxlfWAsXG4gICAgICAnLS1iYXRjaC1tb2RlJyxcbiAgICAgIC4uLihvcHRpb25zLnZlcmJvc2UgPz8gdGhpcy52ZXJib3NlID8gWyctWCddIDogW10pLFxuICAgICAgbW9qbyxcbiAgICAgIC4uLk9iamVjdC5lbnRyaWVzKG9wdGlvbnMucHJvcGVydGllcykubWFwKChbaywgdl0pID0+IGAtRCR7a309JHt2fWApLFxuICAgIF07XG5cbiAgICBpZiAodGhpcy5kcnlSdW4pIHtcbiAgICAgIGVjaG8oYFtEUlktUlVOXSBtdm4gJHthcmdzLm1hcChxdW90ZSkuam9pbignICcpfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICBKREtfSkFWQV9PUFRJT05TOiBbXG4gICAgICAgIC8vIElmIHdlIGRvbid0IGFkZCB0aGlzLCB3ZSdsbCBnZXQgYW4gZXJyb3IgbGlrZSB0aGUgZm9sbG93aW5nIGR1cmluZyB0aGUgbmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW46cmMtcmVsZWFzZSBtb2pvLlxuICAgICAgICAvLyBEb24ndCBrbm93IHdoZXJlIHRoaXMgaXMgY29taW5nIGZyb20gYWxsIG9mIGEgc3VkZGVuLlxuICAgICAgICAvL1xuICAgICAgICAvLyBbRVJST1JdIG1lc3NhZ2UgICAgICAgICAgICAgOiBObyBjb252ZXJ0ZXIgYXZhaWxhYmxlXG4gICAgICAgIC8vIFtFUlJPUl0gdHlwZSAgICAgICAgICAgICAgICA6IGphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN0XG4gICAgICAgIC8vIFtFUlJPUl0gY29udmVydGVyICAgICAgICAgICA6IGNvbS50aG91Z2h0d29ya3MueHN0cmVhbS5jb252ZXJ0ZXJzLnJlZmxlY3Rpb24uUmVmbGVjdGlvbkNvbnZlcnRlclxuICAgICAgICAvLyBbRVJST1JdIG1lc3NhZ2VbMV0gICAgICAgICAgOiBVbmFibGUgdG8gbWFrZSBmaWVsZCBwcm90ZWN0ZWQgdHJhbnNpZW50IGludCBqYXZhLnV0aWwuQWJzdHJhY3RMaXN0Lm1vZENvdW50IGFjY2Vzc2libGU6IG1vZHVsZSBqYXZhLmJhc2UgZG9lcyBub3QgXCJvcGVucyBqYXZhLnV0aWxcIiB0byB1bm5hbWVkIG1vZHVsZSBAN2M4ZDUzMTJcbiAgICAgICAgJy0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLnV0aWw9QUxMLVVOTkFNRUQnLFxuICAgICAgICAnLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEubGFuZz1BTEwtVU5OQU1FRCcsXG4gICAgICAgICctLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5sYW5nLmludm9rZT1BTEwtVU5OQU1FRCcsXG4gICAgICBdLmpvaW4oJyAnKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuICQoeyB2ZXJib3NlOiB0cnVlLCBub3Rocm93OiBvcHRpb25zLm5vdGhyb3csIGVudiB9KWBtdm4gJHthcmdzfWA7XG4gIH1cbn1cblxuaW50ZXJmYWNlIE1hdmVuRXhlY09wdGlvbnMge1xuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBub3Rocm93PzogYm9vbGVhbjtcbiAgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBleHBlY3RlZCBlcnJvciB0aGF0IGRvZXNuJ3QgbmVlZCBhIHN0YWNrIHRyYWNlXG4gKi9cbmNsYXNzIFNpbXBsZUVycm9yIGV4dGVuZHMgRXJyb3IgeyB9XG5cbi8qKlxuICogUmVxdWlyZSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICovXG5mdW5jdGlvbiBlbnZWYXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmV0ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIGlmICghcmV0KSB7XG4gICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKGAke25hbWV9IGlzIHJlcXVpcmVkYCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBBIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCBjbGVhbnMgd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZVxuICpcbiAqIFVzZSB3aXRoIGB1c2luZ2AuIENvdWxkIGhhdmUgYmVlbiBhc3luYyBidXQgaXQncyBkZXBlbmRpbmdcbiAqIG9uIGFuIGFscmVhZHktc3luYyBBUEksIHNvIHdoeSBub3Qgc3luYz9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1dG9DbGVhbkRpcigpIHtcbiAgY29uc3QgZGlyID0gdG1wZGlyKCk7XG4gIHJldHVybiB7XG4gICAgZGlyLFxuICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZnMucm0oZGlyLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWU6IG5ldmVyKSB7XG4gIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZTogJyArIHZhbHVlKTtcbn1cblxuLy8gQSAnengnIHByaW1lclxuLy9cbi8vIC0gQnkgZGVmYXVsdDogc3RkZXJyIGlzIHByaW50ZWQgdG8gdGhlIHRlcm1pbmFsIGlmIGl0IGlzIGNhcHR1cmVkLlxuLy8gLSB7IHZlcmJvc2U6IHRydWUgfTogcHJpbnQgdGhlIGNvbW1hbmQsIHN0ZG91dCBhbmQgc3RkZXJyIHRvIHRoZSB0ZXJtaW5hbFxuLy8gLSB7IHF1aWV0OiB0cnVlIH06IHByaW50IG5laXRoZXIgc3Rkb3V0IG5vciBzdGRlcnJcbi8vXG4vLyAudGV4dCgpOiByZXR1cm4gZXZlcnl0aGluZyB0aGF0J3MgY2FwdHVyZWQgKHN0ZGVyciBhbmQgc3Rkb3V0IHRvZ2V0aGVyIGlmIHN0ZGVyciBpcyBjYXB0dXJlZClcblxubWFpbigpLmNhdGNoKGUgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIFByb2Nlc3NPdXRwdXQpIHtcbiAgICBlY2hvKGDinYwgU3VicHJvY2VzcyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtlLmV4aXRDb2RlfWApO1xuICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBTaW1wbGVFcnJvcikge1xuICAgIGVjaG8oJ+KdjCcsIGUubWVzc2FnZSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgfVxuICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbn0pO1xuIl19
|
|
612
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGliLW1hdmVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9wdWJsaWItbWF2ZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNm5CQSxvQ0FRQztBQXJvQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCwyQkFBb0M7QUFDcEMsMkJBQStFO0FBRS9FLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDO0FBRWpELE1BQU0sMEJBQTBCLEdBQUcsdURBQXVELENBQUM7QUFFM0YsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztJQUV4QyxJQUFBLE9BQUUsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUViLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxTQUFJLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxXQUFXLENBQUMsaURBQWlELE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQUEsU0FBSSxFQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU1QixNQUFNLGFBQWEsR0FBeUI7UUFDMUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsQyxRQUFRLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksS0FBSyxN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RSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQVk7SUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsZ0JBQWdCO0FBQ2hCLEVBQUU7QUFDRixxRUFBcUU7QUFDckUsNEVBQTRFO0FBQzVFLHFEQUFxRDtBQUNyRCxFQUFFO0FBQ0YsZ0dBQWdHO0FBRWhHLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNmLElBQUksQ0FBQyxZQUFZLGtCQUFhLEVBQUUsQ0FBQztRQUMvQixJQUFBLFNBQUksRUFBQyxzQ0FBc0MsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztTQUFNLElBQUksQ0FBQyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLElBQUEsU0FBSSxFQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGVnYWN5IHZzIGNvbXBhdGliaWxpdHkgZW5kcG9pbnRcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqXG4gKiBUaGlzIHNjcmlwdCB0YWxrcyBhYm91dCBsZWdhY3kgdnMgY29tcGF0aWJpbGl0eSBlbmRwb2ludCBhIGJ1bmNoLlxuICpcbiAqIEJvdGggaW1wbGVtZW50IHRoZSBOZXh1cyAyIHByb3RvY29sLCBob3dldmVyOlxuICpcbiAqIC0gVGhlIFwibGVnYWN5XCIgZW5kcG9pbnQgaXMgdGhlIFNvbmF0eXBlIE9TU1JIIGVuZHBvaW50IHRoYXQgd2FzIGRlcHJlY2F0ZWQgSnVuZSAyMDI1LlxuICogLSBUaGUgXCJjb21wYXRpYmlsaXR5XCIgZW5kcG9pbnQgaXMgYSBOZXh1cyAyLWNvbXBhdGlibGUgZW5kcG9pbnQgc3Rvb2QgdXAgZm9yIHRoZSBuZXdcbiAqICAgcHVibGlzaGluZyBzZXJ2aWNlLCBDZW50cmFsIFB1Ymxpc2hpbmcuXG4gKlxuICogSXQgc2hvdWxkIGJlIHRoZSBzYW1lIHByb3RvY29sIGJ1dCBvZiBjb3Vyc2UgdGhlcmUgYXJlIHN1YnRsZSBkaWZmZXJlbmNlc1xuICogYmV0d2VlbiB0aGVtIChpbiBob3cgdGhleSBzaWduYWwgZXJyb3Igd2hlbiB5b3UgdHJ5IHRvIHJlcHVibGlzaCBhbiBhbHJlYWR5XG4gKiBwdWJsaXNoZWQgdmVyc2lvbiwgYW5kIGV2ZW4gaW4gdGhlIHdpcmUgcHJvdG9jb2wgYWNjZXB0ZWQpIHNvIHdlIGhhdmUgdG9cbiAqIHRyZWF0IHRoZW0gZGlmZmVyZW50bHkgaGVyZS5cbiAqXG4gKiBUaGVyZSBpcyBhbHNvIGFuIFwib2ZmaWNpYWwgbmV3XCIgcHJvdG9jb2wgZm9yIHRoZSBuZXcgcHVibGlzaGluZyBtZWNoYW5pc20sXG4gKiBidXQgdGhlIE1hdmVuIHBsdWdpbiB0aGV5IHN1cHBseSBmb3IgdGhhdCBkb2Vzbid0IHN1cHBvcnQgdGhhdC4gSW4gdGhlaXIgd29yZHM6XG4gKlxuICogPiBpdCBhcHBlYXJzIHRoYXQgeW91IGFyZSB1c2luZyB0aGUgXCJ0d28gc3RhZ2VcIlsxXSBkZXBsb3ltZW50IHByb2Nlc3MsIHdoaWNoIGlzXG4gKiA+IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IHRoZSBuZXcgcGx1Z2luLiBZb3UgYXJlIHRoZSBmaXJzdCBwdWJsaXNoZXIgdG8gaGF2ZVxuICogPiByZXF1ZXN0ZWQgdGhpcywgc28gd2Ugd2VyZSBub3QgZmFtaWxpYXIgd2l0aCB0aGlzIHNwZWNpZmljIHVzZWNhc2Ugd2hlblxuICogPiBidWlsZGluZyB0aGUgbmV3IHBsdWdpblxuICogPiBbMV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9zb25hdHlwZS9uZXh1cy1tYXZlbi1wbHVnaW5zL2Jsb2IvNDNhOTk0MGIxMzRjM2Y4N2ViZTRkYWE4MjU1MmU4NDRkOWM1NzhiOC9zdGFnaW5nL21hdmVuLXBsdWdpbi9XT1JLRkxPV1MubWQjdHdvLXNob3RzPlxuICovXG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7ICQsIGNkLCBlY2hvLCBnbG9iLCBvcywgcGF0aCwgUHJvY2Vzc091dHB1dCwgcXVvdGUsIHRtcGRpciB9IGZyb20gJ3p4JztcblxuY29uc3QgTEVHQUNZX09TU1JIX1NFUlZFUl9JRCA9ICdvc3NyaCc7XG5jb25zdCBDT01QQVRfQ0VOVFJBTF9TRVJWRVJfSUQgPSAnY2VudHJhbC1vc3NyaCc7XG5cbmNvbnN0IE5FWFVTX01BVkVOX1NUQUdJTkdfUExVR0lOID0gJ29yZy5zb25hdHlwZS5wbHVnaW5zOm5leHVzLXN0YWdpbmctbWF2ZW4tcGx1Z2luOjEuNy4wJztcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgYXJncyA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbiAgY29uc3QgamF2YVJvb3QgPSBhcmdzWzBdID8/ICdkaXN0L2phdmEnO1xuXG4gIGNkKGphdmFSb290KTtcblxuICBjb25zdCBwb21zID0gYXdhaXQgZ2xvYignKiovKi5wb20nKTtcbiAgaWYgKHBvbXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKGBObyBKQVJTIHRvIHB1Ymxpc2g6IG5vIC5wb20gZmlsZXMgZm91bmQgdW5kZXIgJHtwcm9jZXNzLmN3ZCgpfWApO1xuICB9XG5cbiAgZWNobyhgUE9NcyBmb3VuZDogJHtwb21zfWApO1xuXG4gIGNvbnN0IHNoYXJlZE9wdGlvbnM6IFNoYXJlZFB1Ymxpc2hPcHRpb25zID0ge1xuICAgIHVzZXJuYW1lOiBlbnZWYXIoJ01BVkVOX1VTRVJOQU1FJyksXG4gICAgcGFzc3dvcmQ6IGVudlZhcignTUFWRU5fUEFTU1dPUkQnKSxcbiAgICBkcnlSdW46IHByb2Nlc3MuZW52Lk1BVkVOX0RSWVJVTiA9PT0gJ3RydWUnIHx8IHByb2Nlc3MuZW52LlBVQkxJQl9EUllSVU4gPT09ICd0cnVlJyxcbiAgICB2ZXJib3NlOiBwcm9jZXNzLmVudi5NQVZFTl9WRVJCT1NFID09PSAndHJ1ZScsXG4gICAgcG9tcyxcbiAgfTtcblxuICBsZXQgb3B0aW9uczogTWF2ZW5QdWJsaXNoT3B0aW9ucztcbiAgY29uc3Qgc2VydmVySWQgPSBwcm9jZXNzLmVudi5NQVZFTl9TRVJWRVJfSUQgPz8gTEVHQUNZX09TU1JIX1NFUlZFUl9JRDtcblxuICBzd2l0Y2ggKHNlcnZlcklkKSB7XG4gICAgY2FzZSBMRUdBQ1lfT1NTUkhfU0VSVkVSX0lEOlxuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogJ2xlZ2FjeS1vc3NyaCcsXG4gICAgICAgIC4uLnNoYXJlZE9wdGlvbnMsXG4gICAgICAgIHN0YWdpbmdQcm9maWxlSWQ6IGVudlZhcignTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lEJyksXG4gICAgICAgIGVuZHBvaW50OiBwcm9jZXNzLmVudi5NQVZFTl9FTkRQT0lOVCxcbiAgICAgICAgcHJpdmF0ZUtleTogcGFyc2VQcml2YXRlS2V5RnJvbUVudigpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ09NUEFUX0NFTlRSQUxfU0VSVkVSX0lEOlxuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogJ2NvbXBhdC1vc3NyaCcsXG4gICAgICAgIC4uLnNoYXJlZE9wdGlvbnMsXG4gICAgICAgIC8vIE5vdCByZXF1aXJlZCBieSB0aGUgbmV3IGVuZHBvaW50OiBjYW4gYmUgYW55IHZhbHVlIChtYXliZSBuZXZlciB3YXMgcmVxdWlyZWQgdG8gYmVnaW4gd2l0aD8pXG4gICAgICAgIHN0YWdpbmdQcm9maWxlSWQ6ICdwdWJsaWInLFxuICAgICAgICBlbmRwb2ludDogcHJvY2Vzcy5lbnYuTUFWRU5fRU5EUE9JTlQsXG4gICAgICAgIHByaXZhdGVLZXk6IHBhcnNlUHJpdmF0ZUtleUZyb21FbnYoKSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gV2UgaGF2ZW4ndCBpbXBsZW1lbnRlZCBzaWduaW5nIGZvciB0aGlzLCBzbyBmYWlsIGxvdWRseSBpZiBwZW9wbGUgdHJ5IHRvIHVzZSBpdCBhbnl3YXlcbiAgICAgIGlmIChwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVkgfHwgcHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZX0ZJTEUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKCdNQVZFTl9HUEdfUFJJVkFURV9LRVlbX0ZJTEVdIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBPU1NSSCBwdWJsaXNoaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHR5cGU6ICdjdXN0b20tbmV4dXMnLFxuICAgICAgICAuLi5zaGFyZWRPcHRpb25zLFxuICAgICAgICBzZXJ2ZXJJZCxcbiAgICAgICAgcmVwb3NpdG9yeVVybDogZW52VmFyKCdNQVZFTl9SRVBPU0lUT1JZX1VSTCcpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXdhaXQgbWF2ZW5QdWJsaXNoKG9wdGlvbnMpO1xuXG4gIGVjaG8oJ35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4nKTtcbiAgZWNobygn4pyFIEFsbCBEb25lIScpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVByaXZhdGVLZXlGcm9tRW52KCk6IFByaXZhdGVLZXkge1xuICBpZiAocHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZX0ZJTEUpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnZmlsZScsIGZpbGVOYW1lOiBwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVlfRklMRSwgcGFzc1BocmFzZTogZW52VmFyKCdNQVZFTl9HUEdfUFJJVkFURV9LRVlfUEFTU1BIUkFTRScpIH07XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWSkge1xuICAgIHJldHVybiB7IHR5cGU6ICdtYXRlcmlhbCcsIGtleU1hdGVyaWFsOiBwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVksIHBhc3NQaHJhc2U6IGVudlZhcignTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0UnKSB9O1xuICB9XG4gIHRocm93IG5ldyBTaW1wbGVFcnJvcignTUFWRU5fR1BHX1BSSVZBVEVfS0VZW19GSUxFXSBpcyByZXF1aXJlZCcpO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vICBNb2RlbGluZyBhbGwgdGhlIHBhcmFtZXRlcnMgc28gdGhhdCB3ZSBjYW4gcHVsbCB0aGUgZW52aXJvbm1lbnQgcGFyc2luZyBmb3J3YXJkXG4vL1xuXG5pbnRlcmZhY2UgU2hhcmVkUHVibGlzaE9wdGlvbnMge1xuICByZWFkb25seSB1c2VybmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nO1xuICByZWFkb25seSBkcnlSdW46IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZlcmJvc2U6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHBvbXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgTGVnYWN5T3NzcmhQdWJsaXNoT3B0aW9ucyBleHRlbmRzIFNoYXJlZFB1Ymxpc2hPcHRpb25zIHtcbiAgdHlwZTogJ2xlZ2FjeS1vc3NyaCc7XG4gIHJlYWRvbmx5IHByaXZhdGVLZXk6IFByaXZhdGVLZXk7XG4gIHJlYWRvbmx5IGVuZHBvaW50Pzogc3RyaW5nO1xuICByZWFkb25seSBzdGFnaW5nUHJvZmlsZUlkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDb21wYXRPc3NyaFB1Ymxpc2hPcHRpb25zIGV4dGVuZHMgU2hhcmVkUHVibGlzaE9wdGlvbnMge1xuICB0eXBlOiAnY29tcGF0LW9zc3JoJztcbiAgcmVhZG9ubHkgcHJpdmF0ZUtleTogUHJpdmF0ZUtleTtcbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWdpbmdQcm9maWxlSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEN1c3RvbU5leHVzUHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBTaGFyZWRQdWJsaXNoT3B0aW9ucyB7XG4gIHR5cGU6ICdjdXN0b20tbmV4dXMnO1xuICByZWFkb25seSByZXBvc2l0b3J5VXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlcnZlcklkOiBzdHJpbmc7XG59XG5cbnR5cGUgUHJpdmF0ZUtleSA9XG4gIHwgeyB0eXBlOiAnZmlsZSc7IGZpbGVOYW1lOiBzdHJpbmc7IHBhc3NQaHJhc2U6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnbWF0ZXJpYWwnOyBrZXlNYXRlcmlhbDogc3RyaW5nOyBwYXNzUGhyYXNlOiBzdHJpbmcgfVxuICA7XG5cbnR5cGUgTWF2ZW5QdWJsaXNoT3B0aW9ucyA9IExlZ2FjeU9zc3JoUHVibGlzaE9wdGlvbnMgfCBDb21wYXRPc3NyaFB1Ymxpc2hPcHRpb25zfCBDdXN0b21OZXh1c1B1Ymxpc2hPcHRpb25zO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vICBQdWJsaXNoaW5nIGZ1bmN0aW9uc1xuLy9cblxuYXN5bmMgZnVuY3Rpb24gbWF2ZW5QdWJsaXNoKG9wdGlvbnM6IE1hdmVuUHVibGlzaE9wdGlvbnMpIHtcbiAgYXdhaXQgdXNpbmcgd29ya0RpciA9IGF1dG9DbGVhbkRpcigpO1xuICBjb25zdCBtYXZlbiA9IG5ldyBNYXZlbih3b3JrRGlyLmRpciwgb3B0aW9ucy52ZXJib3NlLCBvcHRpb25zLmRyeVJ1bik7XG5cbiAgY29uc3QgeCA9IG9wdGlvbnMudHlwZTtcbiAgc3dpdGNoICh4KSB7XG4gICAgY2FzZSAnbGVnYWN5LW9zc3JoJzpcbiAgICAgIGF3YWl0IGRlcGxveUxlZ2FjeU9zc3JoKG1hdmVuLCBvcHRpb25zKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbXBhdC1vc3NyaCc6XG4gICAgICBhd2FpdCBkZXBsb3lDb21wYXRPc3NyaChtYXZlbiwgb3B0aW9ucyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjdXN0b20tbmV4dXMnOlxuICAgICAgYXdhaXQgZGVwbG95Q3VzdG9tTmV4dXMobWF2ZW4sIG9wdGlvbnMpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGFzc2VydE5ldmVyKHgpO1xuICB9XG59XG5cbi8qKlxuICogRGVwbG95IHRvIHRoZSBsZWdhY3kgT1NTUkggTmV4dXMgc2VydmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveUxlZ2FjeU9zc3JoKG1hdmVuOiBNYXZlbiwgb3B0aW9uczogTGVnYWN5T3NzcmhQdWJsaXNoT3B0aW9ucykge1xuICBlY2hvKCfwn5OmIFB1Ymxpc2hpbmcgdG8gTWF2ZW4gQ2VudHJhbCcpO1xuICBjb25zdCBkZWZhdWx0RW5kcG9pbnQgPSAnaHR0cHM6Ly9vc3Muc29uYXR5cGUub3JnJztcblxuICBjb25zdCBzdGFnZWQgPSBhd2FpdCBkZXBsb3lTdGFnZWRSZXBvc2l0b3J5KG1hdmVuLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmRwb2ludDogb3B0aW9ucy5lbmRwb2ludCA/PyBkZWZhdWx0RW5kcG9pbnQsXG4gICAgcmVwdWJsaXNoV2lsbDQwMDogZmFsc2UsXG4gIH0pO1xuXG4gIGlmIChzdGFnZWQudHlwZSAhPT0gJ3N1Y2Nlc3MnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLypcbiAgY29uc3QgcmVsZWFzZWQgPSBhd2FpdCByZWxlYXNlUmVwbyh7XG4gICAgc2VydmVyVXJsOiBvcHRpb25zLmVuZHBvaW50ID8/IGRlZmF1bHRFbmRwb2ludCxcbiAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZSxcbiAgICBwYXNzd29yZDogb3B0aW9ucy5wYXNzd29yZCxcbiAgICByZXBvc2l0b3J5SWQ6IHN0YWdlZC5yZXBvc2l0b3J5SWQsXG4gIH0pO1xuXG4gIGlmIChyZWxlYXNlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICAqL1xuXG4gIC8vIFNlbmQgYSByZW1vdGUgcmVsZWFzZSBjb21tYW5kIHRvIHRoZSByZXBvc2l0b3J5XG4gIGNvbnN0IHJlbGVhc2VPdXRwdXQgPSBhd2FpdCBtYXZlbi5leGVjKGAke05FWFVTX01BVkVOX1NUQUdJTkdfUExVR0lOfTpyYy1yZWxlYXNlYCwge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIG5leHVzVXJsOiBvcHRpb25zLmVuZHBvaW50ID8/IGRlZmF1bHRFbmRwb2ludCxcbiAgICAgIHNlcnZlcklkOiBzdGFnZWQuc2VydmVySWQsXG4gICAgICBzdGFnaW5nUmVwb3NpdG9yeUlkOiBzdGFnZWQucmVwb3NpdG9yeUlkLFxuICAgIH0sXG4gICAgbm90aHJvdzogdHJ1ZSxcbiAgfSk7XG4gIGlmICghcmVsZWFzZU91dHB1dCkge1xuICAgIGVjaG8oJ/Cfj5zvuI8gU3RvcHBlZCBoZXJlIGJlY2F1c2Ugb2YgZHJ5LXJ1bicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChyZWxlYXNlT3V0cHV0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgLy8gSWYgcmVsZWFzZSBmYWlsZWQsIGNoZWNrIGlmIHRoaXMgd2FzIGNhdXNlZCBiZWNhdXNlIHdlIGFyZSB0cnlpbmcgdG8gcHVibGlzaFxuICAgIC8vIHRoZSBzYW1lIHZlcnNpb24gYWdhaW4sIHdoaWNoIGlzIG5vdCBhbiBlcnJvci4gVGhlIG1hZ2ljIHN0cmluZyBcImRvZXMgbm90XG4gICAgLy8gYWxsb3cgdXBkYXRpbmcgYXJ0aWZhY3RcIiBmb3IgYSBcIi5wb21cIiBmaWxlIGluZGljYXRlcyB0aGF0IHdlIGFyZSB0cnlpbmcgdG9cbiAgICAvLyBvdmVycmlkZSBhbiBleGlzdGluZyB2ZXJzaW9uLiBPdGhlcndpc2UsIGZhaWwhXG5cbiAgICBjb25zdCBsb29rc0xpa2VEdXBsaWNhdGVQdWJsaXNoID0gcmVsZWFzZU91dHB1dC5saW5lcygpXG4gICAgICAuZmlsdGVyKGwgPT4gbC5pbmNsdWRlcygnZG9lcyBub3QgYWxsb3cgdXBkYXRpbmcgYXJ0aWZhY3QnKSlcbiAgICAgIC5maWx0ZXIobCA9PiBsLmluY2x1ZGVzKCcucG9tJykpXG4gICAgICAubGVuZ3RoID4gMDtcblxuICAgIGlmICghbG9va3NMaWtlRHVwbGljYXRlUHVibGlzaCkge1xuICAgICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKCdSZWxlYXNlIGZhaWxlZCcpO1xuICAgIH1cblxuICAgIGVjaG8oJ+KaoO+4jyBBcnRpZmFjdCBhbHJlYWR5IHB1Ymxpc2hlZC4gU2tpcHBpbmcnKTtcbiAgfVxufVxuXG4vKipcbiAqIERlcGxveSB0byB0aGUgY29tcGF0IE9TU1JIIE5leHVzIHNlcnZlclxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lDb21wYXRPc3NyaChtYXZlbjogTWF2ZW4sIG9wdGlvbnM6IENvbXBhdE9zc3JoUHVibGlzaE9wdGlvbnMpIHtcbiAgZWNobygn8J+TpiBQdWJsaXNoaW5nIHRvIE1hdmVuIENlbnRyYWwgKENvbXBhdCBlbmRwb2ludCknKTtcblxuICBjb25zdCBkZWZhdWx0RW5kcG9pbnQgPSAnaHR0cHM6Ly9vc3NyaC1zdGFnaW5nLWFwaS5jZW50cmFsLnNvbmF0eXBlLmNvbS8nO1xuICBjb25zdCBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQgPz8gZGVmYXVsdEVuZHBvaW50O1xuXG4gIGNvbnN0IHN0YWdlZCA9IGF3YWl0IGRlcGxveVN0YWdlZFJlcG9zaXRvcnkobWF2ZW4sIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuZHBvaW50LFxuICAgIHJlcHVibGlzaFdpbGw0MDA6IHRydWUsXG4gIH0pO1xuXG4gIGlmIChzdGFnZWQudHlwZSAhPT0gJ3N1Y2Nlc3MnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVsZWFzZWQgPSBhd2FpdCByZWxlYXNlUmVwbyh7XG4gICAgc2VydmVyVXJsOiBlbmRwb2ludCxcbiAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZSxcbiAgICBwYXNzd29yZDogb3B0aW9ucy5wYXNzd29yZCxcbiAgICByZXBvc2l0b3J5SWQ6IHN0YWdlZC5yZXBvc2l0b3J5SWQsXG4gIH0pO1xuXG4gIGlmIChyZWxlYXNlZCA9PT0gJ2R1cGxpY2F0ZS12ZXJzaW9uJykge1xuICAgIGVjaG8oJ+KaoO+4jyBWZXJzaW9uKHMpIGFscmVhZHkgcHVibGlzaGVkLiBTa2lwcGluZycpO1xuICB9XG59XG5cbi8qKlxuICogRGVwbG95IHRvIGEgY3VzdG9tIE5leHVzIHNlcnZlclxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lDdXN0b21OZXh1cyhtYXZlbjogTWF2ZW4sIG9wdGlvbnM6IEN1c3RvbU5leHVzUHVibGlzaE9wdGlvbnMpIHtcbiAgZWNobyhg8J+TpiBQdWJsaXNoaW5nIHRvICR7b3B0aW9ucy5zZXJ2ZXJJZH1gKTtcbiAgYXdhaXQgbWF2ZW4ud3JpdGVTZXR0aW5nc0ZpbGUob3B0aW9ucy5zZXJ2ZXJJZCwgZmFsc2UpO1xuXG4gIGZvciAoY29uc3QgcG9tIG9mIG9wdGlvbnMucG9tcykge1xuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IG1hdmVuLmV4ZWMoJ2RlcGxveTpkZXBsb3ktZmlsZScsIHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdXJsOiBvcHRpb25zLnJlcG9zaXRvcnlVcmwsXG4gICAgICAgIHJlcG9zaXRvcnlJZDogb3B0aW9ucy5zZXJ2ZXJJZCxcbiAgICAgICAgcG9tRmlsZTogcG9tLFxuICAgICAgICAuLi5qYXJzRnJvbVBvbShwb20pLFxuICAgICAgfSxcbiAgICAgIG5vdGhyb3c6IHRydWUsXG4gICAgfSk7XG5cbiAgICBpZiAoZGVwbG95T3V0cHV0Py5leGl0Q29kZSAmJiBkZXBsb3lPdXRwdXQuZXhpdENvZGUgPiAwKSB7XG4gICAgICBpZiAoZGVwbG95T3V0cHV0LnN0ZG91dC5pbmNsdWRlcygnNDA5IENvbmZsaWN0JykpIHtcbiAgICAgICAgZWNobygn4pqg77iPIEFydGlmYWN0IGFscmVhZHkgcHVibGlzaGVkLiBTa2lwcGluZycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKCdSZWxlYXNlIGZhaWxlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG50eXBlIERlcGxveVN0YWdlZFJlcG9SZXN1bHQgPVxuICB8IHsgdHlwZTogJ3N1Y2Nlc3MnOyByZXBvc2l0b3J5SWQ6IHN0cmluZzsgc2VydmVySWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnYWxyZWFkeS1wdWJsaXNoZWQnIH1cbiAgfCB7IHR5cGU6ICdkcnktcnVuJyB9O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgc3RhZ2luZyByZXBvc2l0b3J5LiBUaGlzIGlzIHRoZSBzYW1lIGJldHdlZW4gdGhlIGxlZ2FjeSBhbmQgY29tcGF0IGVuZHBvaW50cy5cbiAqXG4gKiBgcmVwdWJsaXNoV2lsbDQwMGA6IGluIHRoZSBjb21wYXRpYmlsaXR5IGVuZHBvaW50LCBzdGFnaW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBhbHJlYWR5XG4gKiBiZWVuIHB1Ymxpc2hlZCB3aWxsIGxlYWQgdG8gYSBgNDAwIEJhZCBSZXF1ZXN0YCwgd2l0aCBubyBmdXJ0aGVyIGluZm8uIFdlIG5lZWRlZCB0byBoYXZlXG4gKiBydW4gdGhlIE1hdmVuIGNvbW1hbmQgd2l0aCBgLS1kZWJ1Z2AgbG9nZ2luZyB0byBzZWUgdGhlIGFjdHVhbCBlcnJvciBtZXNzYWdlIGluIHRoZSBvdXRwdXQuXG4gKlxuICogSW4gdGhlIGxlZ2FjeSBlbmRwb2ludCwgc3RhZ2luZyB0YWtlcyBtdWx0aXBsZSBtaW51dGVzLCBhbmQgTWF2ZW4gd2lsbCBwb2xsXG4gKiBldmVyeSAzcyBhbmQgcHJpbnQgdGhlIG91dHB1dC4gV2UgdGhlcmVmb3JlIGRvbid0IHVzZSB2ZXJib3NlIG1vZGUgdG8gYXZvaWRcbiAqIHN0ZG91dCBzcGFtLiBJbiB0aGUgbGVnYWN5IGVuZHBvaW50LCBkdXBsaWNhdGUgdmVyc2lvbiBwdWJsaXNoaW5nIGdldHNcbiAqIHJlcG9ydGVkIGR1cmluZyB0aGUgJ3JlbGVhc2UnIHN0ZXAgYW55d2F5LCBub3QgZHVyaW5nIHN0YWdpbmcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveVN0YWdlZFJlcG9zaXRvcnkobWF2ZW46IE1hdmVuLCBvcHRpb25zOiBPbWl0PExlZ2FjeU9zc3JoUHVibGlzaE9wdGlvbnMgfCBDb21wYXRPc3NyaFB1Ymxpc2hPcHRpb25zLCAnZW5kcG9pbnQnPiAmIHsgZW5kcG9pbnQ6IHN0cmluZzsgcmVwdWJsaXNoV2lsbDQwMDogYm9vbGVhbiB9KTogUHJvbWlzZTxEZXBsb3lTdGFnZWRSZXBvUmVzdWx0PiB7XG4gIGNvbnN0IHNlcnZlcklkID0gJ29zc3JoJztcblxuICBhd2FpdCBtYXZlbi53cml0ZVNldHRpbmdzRmlsZShzZXJ2ZXJJZCwgdHJ1ZSk7XG5cbiAgLy8gRmlyc3QgLS0gc2lnbiBhcnRpZmFjdHNcbiAgY29uc3Qgc2lnbmVkRGlyID0gcGF0aC5qb2luKG1hdmVuLndvcmtEaXIsICdzaWduZWQnKTtcbiAgYXdhaXQgZnMubWtkaXIoc2lnbmVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBhd2FpdCBzaWduSmFycyhtYXZlbiwgb3B0aW9ucy5wb21zLCBzaWduZWREaXIsIHNlcnZlcklkLCBvcHRpb25zLnByaXZhdGVLZXkpO1xuXG4gIGVjaG8oJ35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4nKTtcbiAgZWNobygnIERlcGxveWluZyBhbmQgY2xvc2luZyByZXBvc2l0b3J5Li4uJyk7XG4gIGVjaG8oJ35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4nKTtcblxuICBjb25zdCBuZXh1c01hdmVuU3RhZ2luZyA9ICdvcmcuc29uYXR5cGUucGx1Z2luczpuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbjoxLjcuMCc7XG4gIGNvbnN0IHN0YWdlT3V0cHV0ID0gYXdhaXQgbWF2ZW4uZXhlYyhgJHtuZXh1c01hdmVuU3RhZ2luZ306ZGVwbG95LXN0YWdlZC1yZXBvc2l0b3J5YCwge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHJlcG9zaXRvcnlEaXJlY3Rvcnk6IHNpZ25lZERpcixcbiAgICAgIG5leHVzVXJsOiBvcHRpb25zLmVuZHBvaW50LFxuICAgICAgc2VydmVySWQsXG4gICAgICBzdGFnaW5nUHJvZ3Jlc3NUaW1lb3V0TWludXRlczogJzMwJyxcbiAgICAgIHN0YWdpbmdQcm9maWxlSWQ6IG9wdGlvbnMuc3RhZ2luZ1Byb2ZpbGVJZCxcbiAgICB9LFxuICAgIG5vdGhyb3c6IHRydWUsXG4gICAgdmVyYm9zZTogb3B0aW9ucy5yZXB1Ymxpc2hXaWxsNDAwLFxuICB9KTtcbiAgLy8gRklYTUU6IE5ldyBzdGFnaW5nIEFQSSB0aHJvd3MgYW4gZXJyb3IgaGVyZSBvbiBkdXBsaWNhdGUgdmVyc2lvbnNcbiAgaWYgKHN0YWdlT3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlY2hvKCfwn4+c77iPIFN0b3BwZWQgaGVyZSBiZWNhdXNlIG9mIGRyeS1ydW4nKTtcbiAgICByZXR1cm4geyB0eXBlOiAnZHJ5LXJ1bicgfTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlcHVibGlzaFdpbGw0MDAgJiYgc3RhZ2VPdXRwdXQudGV4dCgpLm1hdGNoKC9Db21wb25lbnQgd2l0aCBwYWNrYWdlIHVybC4qYWxyZWFkeSBleGlzdHMvKSkge1xuICAgIC8vIFdlJ3ZlIHNlZW4gdGhpcyBmYWlsIHdpdGggdGhlIGFib3ZlIGVycm9yIG1lc3NhZ2Ugb24gdGhlIE9TU1JIIGNvbXBhdGliaWxpdHkgQVBJIHdoZW4gdHJ5aW5nIHRvIHJlcHVibGlzaFxuICAgIC8vIGFuIGFscmVhZHktcHVibGlzaGVkIHZlcnNpb24uXG4gICAgLy9cbiAgICAvLyBUaGlzIGlzIHBvdGVudGlhbGx5IGEgcHJvYmxlbSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkgYXQgb25jZSwgYmVjYXVzZSBub3RoaW5nXG4gICAgLy8gd2lsbCBiZSBwdWJsaXNoZWQgaWYgdGhlcmUncyBvbmUgcGFja2FnZSBpbiB0aGVyZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcHVibGlzaGVkIHByZXZpb3VzbHkuIEJ1dCBjJ2VzdCBsYSB2aWUuXG4gICAgZWNobygn4pqg77iPIFZlcnNpb24ocykgYWxyZWFkeSBwdWJsaXNoZWQuIFNraXBwaW5nJyk7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2FscmVhZHktcHVibGlzaGVkJyB9O1xuICB9IGVsc2UgaWYgKHN0YWdlT3V0cHV0LmV4aXRDb2RlICYmIHN0YWdlT3V0cHV0LmV4aXRDb2RlID4gMCkge1xuICAgIHRocm93IHN0YWdlT3V0cHV0O1xuICB9XG5cbiAgLy8gR3JlcCB0aGUgcmVwb3NpdG9yeSBJRCBvdXQgb2YgdGhlIHByaW50ZWQgb3V0cHV0XG4gIC8vIFtJTkZPXSAgKiBDbG9zaW5nIHN0YWdpbmcgcmVwb3NpdG9yeSB3aXRoIElEIFwiWFhYWFhYWFhYWFwiLlxuICBjb25zdCBtID0gc3RhZ2VPdXRwdXQuc3Rkb3V0Lm1hdGNoKC9DbG9zaW5nIHN0YWdpbmcgcmVwb3NpdG9yeSB3aXRoIElEIFwiKFteXCJdKylcIi8pO1xuICBpZiAoIW0pIHtcbiAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoJ1VuYWJsZSB0byBleHRyYWN0IHJlcG9zaXRvcnkgSUQgZnJvbSBkZXBsb3ktc3RhZ2VkLXJlcG9zaXRvcnkgb3V0cHV0LiBUaGlzIG1lYW5zIGl0IGZhaWxlZCB0byBjbG9zZSBvciB0aGVyZSB3YXMgYW4gdW5leHBlY3RlZCBwcm9ibGVtLiBBdCBhbnkgcmF0ZSwgd2UgY2FuXFwndCByZWxlYXNlIGl0LiBTb3JyeS4nKTtcbiAgfVxuICBjb25zdCByZXBvc2l0b3J5SWQgPSBtWzFdO1xuXG4gIHJldHVybiB7IHR5cGU6ICdzdWNjZXNzJywgcmVwb3NpdG9yeUlkLCBzZXJ2ZXJJZCB9O1xufVxuXG4vKipcbiAqIFNlbmQgYSBjdXN0b20gXCJyZWxlYXNlXCIgY29tbWFuZCB0byB0aGUgbmV3IFNvbmF0eXBlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGVuZHBvaW50XG4gKlxuICogV2hlbiB1c2luZyB0aGUgYG5leHVzLXN0YWdpbmctbWF2ZW4tcGx1Z2luYCdzIGByZWxlYXNlYCBvciBgcmMtcmVsZWFzZWAgY29tbWFuZHMsIHdlIGdldCB0aGUgZm9sbG93aW5nXG4gKiBlcnJvcjpcbiAqXG4gKiBTZW5kaW5nOlxuICpcbiAqIGBgYFxuICogPHN0YWdpbmdBY3Rpb25SZXF1ZXN0PjxkYXRhPjxzdGFnZWRSZXBvc2l0b3J5SWRzIGNsYXNzPVwiamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3RcIj48YSBjbGFzcz1cInN0cmluZy1hcnJheVwiPjxzdHJpbmc+aW8uZ2l0aHViLnJpeDBycnItLTYzZWRiY2JlLWYwNTgtNDRlYi04NWY0LWZkOWRjZTFhZWY0MDwvc3RyaW5nPjwvYT48L3N0YWdlZFJlcG9zaXRvcnlJZHM+PGRlc2NyaXB0aW9uPnVua25vd248L2Rlc2NyaXB0aW9uPjxhdXRvRHJvcEFmdGVyUmVsZWFzZT50cnVlPC9hdXRvRHJvcEFmdGVyUmVsZWFzZT48L2RhdGE+PC9zdGFnaW5nQWN0aW9uUmVxdWVzdD5cbiAqIGBgYFxuICpcbiAqIEVycm9yOlxuICpcbiAqIGBgYFxuICogRmFpbGVkIHRvIHByb2Nlc3MgcmVxdWVzdDogR290IHVuZXhwZWN0ZWQgWE1MIGVsZW1lbnQgd2hlbiByZWFkaW5nIHN0YWdlZFJlcG9zaXRvcnlJZHM6IEdvdCB1bmV4cGVjdGVkIGVsZW1lbnQgU3RhcnRFbGVtZW50KGEsIHtcIlwiOiBcIlwiLCBcInhtbFwiOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLCBcInhtbG5zXCI6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIn0sIFtjbGFzcyAtPiBzdHJpbmctYXJyYXldKSwgZXhwZWN0ZWQgb25lIG9mOiBzdHJpbmdcbiAqIGBgYFxuICpcbiAqIERvaW5nIGEgbWFudWFsIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGFib3ZlIHJlcXVlc3Qgc3VjY2VlZHMsIHNvIHdlJ2xsIGp1c3QgcHJvY2VlZCB3aXRoIGRvaW5nXG4gKiB0aGF0LlxuICpcbiAqIFRoZSBlbmRwb2ludCBhbHNvIHN1cHBvcnRzIEpTT04sIHdoaWNoIHdlIHByZWZlciBvdmVyIFhNTC5cbiAqXG4gKiBUaGlzIGVuZHBvaW50IHdpbGwgbmV2ZXIgcmV0dXJuIGFuIGVycm9yLCBldmVuIGlmIHRoZSBwdWJsaXNoIGRpZG4ndCBoYXBwZW4gYmVjYXVzZVxuICogb2YgZHVwbGljYXRlIHZlcnNpb24gcHVibGlzaGluZyAobm90IGZvciB0aGUgbGVnYWN5LCBub3IgZm9yIHRoZSBjb21wYXRpYmlsaXR5IGVuZHBvaW50KS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vY2VudHJhbC5zb25hdHlwZS5vcmcvcHVibGlzaC9wdWJsaXNoLXBvcnRhbC1vc3NyaC1zdGFnaW5nLWFwaS9cbiAqIEBzZWUgaHR0cHM6Ly9zdXBwb3J0LnNvbmF0eXBlLmNvbS9oYy9lbi11cy9hcnRpY2xlcy8yMTM0NjU0NDgtQXV0b21hdGljYWxseS1kcm9wcGluZy1vbGQtc3RhZ2luZy1yZXBvc2l0b3JpZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVsZWFzZVJlcG8ob3B0aW9uczogeyBzZXJ2ZXJVcmw6IHN0cmluZzsgdXNlcm5hbWU6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZzsgcmVwb3NpdG9yeUlkOiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPCdvaycgfCAnZHVwbGljYXRlLXZlcnNpb24nPiB7XG4gIGVjaG8oYPCfmoAgUmVsZWFzaW5nIHJlcG9zaXRvcnkgJHtvcHRpb25zLnJlcG9zaXRvcnlJZH0gYXQgJHtvcHRpb25zLnNlcnZlclVybH1gKTtcbiAgY29uc3QgdXJsID0gbmV3IFVSTCgnc2VydmljZS9sb2NhbC9zdGFnaW5nL2J1bGsvcHJvbW90ZScsIG9wdGlvbnMuc2VydmVyVXJsKTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc3RhZ2VkUmVwb3NpdG9yeUlkczogW29wdGlvbnMucmVwb3NpdG9yeUlkXSxcbiAgICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24gPz8gJ0RlcGxveW1lbnQnLFxuICAgICAgICBhdXRvRHJvcEFmdGVyUmVsZWFzZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2J0b2EoYCR7b3B0aW9ucy51c2VybmFtZX06JHtvcHRpb25zLnBhc3N3b3JkfWApfWAsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgYm9keSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgKGR1ZSB0byBzb21lIHJlcGxpY2F0aW9uIGxhdGVuY3k/KSB0aGUgaW5pdGlhbCBcInN0YWdlXCIgc3VjY2VlZHMsXG4gIC8vIGJ1dCB0aGUgXCJyZWxlYXNlXCIgZmFpbHMsIGlmIHdlIHRyeSB0byBwdWJsaXNoIGFuIGFscmVhZHktcHVibGlzaGVkIHZlcnNpb24gYWdhaW4uXG4gIC8vXG4gIC8vIFVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gZ3JlYXQgZXJyb3IgY29kZSB0byBkZXRlY3QgdGhpcyByaWdodCBub3csIGJ1dCBJJ3ZlIG9ic2VydmVkXG4gIC8vIHRoaXMgZXJyb3Igd2hlbiBpdCBoYXBwZW5lZC5cbiAgLy8gSSBoYXZlIGEgc3VwcG9ydCByZXF1ZXN0IG91dCB0byBTb25hdHlwZSBmb3IgdGhpcywgd2UnbGwgc2VlIGlmIHRoaXMgY2hhbmdlcyBvdmVyIHRpbWUuXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCAmJiBib2R5ID09PSAnRmFpbGVkIHRvIHByb2Nlc3MgcmVxdWVzdDogc2VydmljZSBlcnJvcicpIHtcbiAgICByZXR1cm4gJ2R1cGxpY2F0ZS12ZXJzaW9uJztcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH06ICR7Ym9keX1gKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGJvZHkpO1xuXG4gIHJldHVybiAnb2snO1xufVxuXG4vKipcbiAqIFNpZ24gYW5kIHN0YWdlIG91ciBhcnRpZmFjdHMgaW50byBhIGxvY2FsIGRpcmVjdG9yeVxuICovXG5hc3luYyBmdW5jdGlvbiBzaWduSmFycyhtYXZlbjogTWF2ZW4sIHBvbXM6IHN0cmluZ1tdLCB0YXJnZXREaXI6IHN0cmluZywgc2VydmVySWQ6IHN0cmluZywga2V5OiBQcml2YXRlS2V5KSB7XG4gIGF3YWl0IHVzaW5nIGdwZyA9IGF3YWl0IGltcG9ydEdwZ0tleShrZXkpO1xuXG4gIC8vIG9uIGEgbWFjLCAtLXBpbmVudHJ5LW1vZGUgdG8gXCJsb29wYmFja1wiIGFyZSByZXF1aXJlZCBhbmQgSSBjb3VsZG4ndCBmaW5kIGFcbiAgLy8gd2F5IHRvIGRvIHNvIHZpYSAtRGdwZy5ncGdBcmd1bWVudHMgb3IgdGhlIHNldHRpbmdzIGZpbGUsIHNvIGhlcmUgd2UgYXJlLlxuICBsZXQgZ3BnQmluID0gJ2dwZyc7XG4gIGlmIChvcy5wbGF0Zm9ybSgpID09PSAnZGFyd2luJykge1xuICAgIGdwZ0JpbiA9IHBhdGguam9pbihtYXZlbi53b3JrRGlyLCAncHVibGliLWdwZy5zaCcpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShncGdCaW4sIFtcbiAgICAgICcjIS9iaW4vYmFzaCcsXG4gICAgICAnZXhlYyBncGcgLS1waW5lbnRyeS1tb2RlIGxvb3BiYWNrIFwiXFwkQFwiJyxcbiAgICBdLmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbiAgICBhd2FpdCAkYGNobW9kICt4ICR7Z3BnQmlufWA7XG4gIH1cblxuICBmb3IgKGNvbnN0IHBvbSBvZiBwb21zKSB7XG4gICAgYXdhaXQgbWF2ZW4uZXhlYygnZ3BnOnNpZ24tYW5kLWRlcGxveS1maWxlJywge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAndXJsJzogYGZpbGU6Ly8ke3RhcmdldERpcn1gLFxuICAgICAgICAncmVwb3NpdG9yeUlkJzogc2VydmVySWQsIC8vIE1vc3QgbGlrZWx5IG5vdCBuZWNlc3NhcnlcbiAgICAgICAgJ2dwZy5ob21lZGlyJzogZ3BnLmhvbWUsXG4gICAgICAgICdncGcua2V5bmFtZSc6IGdwZy5rZXlJZCxcbiAgICAgICAgJ2dwZy5leGVjdXRhYmxlJzogZ3BnQmluLFxuICAgICAgICAncG9tRmlsZSc6IHBvbSxcbiAgICAgICAgLi4uamFyc0Zyb21Qb20ocG9tKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBCYXNlZCBvbiB0aGUgcGF0aCBvZiBhIC5wb20gZmlsZSwgcmV0dXJuIHRoZSBwYXRocyBvZiB0aGUgY29ycmVzcG9uZGluZyBqYXJzXG4gKi9cbmZ1bmN0aW9uIGphcnNGcm9tUG9tKHBvbTogc3RyaW5nKSB7XG4gIHJldHVybiB7XG4gICAgZmlsZTogcG9tLnJlcGxhY2UoL1xcLnBvbSQvLCAnLmphcicpLFxuICAgIHNvdXJjZXM6IHBvbS5yZXBsYWNlKC9cXC5wb20kLywgJy1zb3VyY2VzLmphcicpLFxuICAgIGphdmFkb2M6IHBvbS5yZXBsYWNlKC9cXC5wb20kLywgJy1qYXZhZG9jLmphcicpLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGltcG9ydCB0aGUgR1BHIGtleSBtYXRlcmlhbCBpbnRvIGEgbmV3IGtleWNoYWluIHRoZXJlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdwZ0tleShrZXk6IFByaXZhdGVLZXkpIHtcbiAgLy8gR251UEcgd2lsbCBvY2Nhc2lvbmFsbHkgYmFpbCBvdXQgd2l0aCBcImdwZzogPHdoYXRldmVyPiBmYWlsZWQ6IEluYXBwcm9wcmlhdGUgaW9jdGwgZm9yIGRldmljZVwiLCB0aGUgZm9sbG93aW5nIGF0dGVtcHRzIHRvIGZpeFxuICBjb25zdCBncGdIb21lID0gYXV0b0NsZWFuRGlyKCk7XG4gIHRyeSB7XG4gICAgLy8gSW4gQ0kgZW52aXJvbm1lbnRzIHRoZXJlIHdpbGwgYmUgbm8gdHR5LCBhbmQgd2UgZG9uJ3Qgd2FudCB0aGlzIHRvIHN0b3AgdGhlIHNjcmlwdC5cbiAgICAvLyBUaGUgdmFyaWFibGUgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCBhIG5vbnNlbnNpY2FsIHN0cmluZyAoXCJub3QgYSB0dHlcIikgYnV0IHRoYXQgZG9lc24ndCBzZWVtIHRvIG1hdHRlci5cbiAgICBjb25zdCB0dHkgPSAoYXdhaXQgJCh7IHN0ZGlvOiBbJ2luaGVyaXQnLCAncGlwZScsICdwaXBlJ10sIG5vdGhyb3c6IHRydWUgfSlgdHR5YCkuc3Rkb3V0O1xuXG4gICAgbGV0IHByaXZhdGVLZXlGaWxlO1xuICAgIGNvbnN0IHR5cGUgPSBrZXkudHlwZTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICBwcml2YXRlS2V5RmlsZSA9IGtleS5maWxlTmFtZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtYXRlcmlhbCc6XG4gICAgICAgIHByaXZhdGVLZXlGaWxlID0gcGF0aC5qb2luKGdwZ0hvbWUuZGlyLCAncHJpdmF0ZS5wZW0nKTtcbiAgICAgICAgYXdhaXQgJGBlY2hvIC1lICR7a2V5LmtleU1hdGVyaWFsfSA+ICR7cHJpdmF0ZUtleUZpbGV9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnROZXZlcih0eXBlKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICBHTlVQR0hPTUU6IGdwZ0hvbWUuZGlyLFxuICAgICAgR1BHX1RUWTogdHR5LFxuICAgIH07XG5cbiAgICBjb25zdCAkJCA9ICQoeyBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLmVudiB9IH0pO1xuXG4gICAgYXdhaXQgJCRgZ3BnIC0tYWxsb3ctc2VjcmV0LWtleS1pbXBvcnQgLS1iYXRjaCAtLXllcyAtLW5vLXR0eSAtLWltcG9ydCAke3ByaXZhdGVLZXlGaWxlfWA7XG4gICAgY29uc3QgZ3BnS2V5SWQgPSAoYXdhaXQgJCRgZ3BnIC0tbGlzdC1rZXlzIC0td2l0aC1jb2xvbnMgfCBncmVwIHB1YiB8IGN1dCAtZDogLWY1YCkuc3Rkb3V0LnRyaW0oKTtcblxuICAgIGVjaG8oYGdwZ19rZXlfaWQ9JHtncGdLZXlJZH1gKTtcblxuICAgIHJldHVybiB7XG4gICAgICBrZXlJZDogZ3BnS2V5SWQsXG4gICAgICBlbnYsXG4gICAgICBob21lOiBncGdIb21lLmRpcixcbiAgICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4gZ3BnSG9tZVtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpLFxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBncGdIb21lW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG5jbGFzcyBNYXZlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2V0dGluZ3NGaWxlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHdvcmtEaXI6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSB2ZXJib3NlOiBib29sZWFuLCBwdWJsaWMgcmVhZG9ubHkgZHJ5UnVuOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXR0aW5nc0ZpbGUgPSBwYXRoLmpvaW4od29ya0RpciwgJ212bi1zZXR0aW5ncy54bWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzZXR0aW5ncy54bWwgZmlsZSB3aXRoIHRoZSB1c2VyK3Bhc3N3b3JkIGZvciBtYXZlblxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdyaXRlU2V0dGluZ3NGaWxlKHNlcnZlcklkOiBzdHJpbmcsIHNpZ25lZEFydGlmYWN0czogYm9vbGVhbikge1xuICAgIGNvbnN0IGxpbmVzID0gW107XG5cbiAgICBsaW5lcy5wdXNoKFxuICAgICAgJzw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCIgPz4nLFxuICAgICAgJzxzZXR0aW5ncyB4bWxucz1cImh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1NFVFRJTkdTLzEuMC4wXCInLFxuICAgICAgJyAgICAgICAgeG1sbnM6eHNpPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2VcIicsXG4gICAgICAnICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249XCJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9TRVRUSU5HUy8xLjAuMCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9zZXR0aW5ncy0xLjAuMC54c2RcIj4nLFxuICAgICAgJyAgPHNlcnZlcnM+JyxcbiAgICAgICcgICAgPHNlcnZlcj4nLFxuICAgICAgYCAgICAgIDxpZD4ke3NlcnZlcklkfTwvaWQ+YCxcbiAgICAgIC8vIE1hdmVuIHdpbGwgcmVhZCB0aGVzZSwgc3Vycm91bmRpbmcgY29kZSBoYXMgYWxyZWFkeSBtYWRlIHN1cmUgdGhleSBhcmUgc2V0XG4gICAgICAnICAgICAgPHVzZXJuYW1lPiR7ZW52Lk1BVkVOX1VTRVJOQU1FfTwvdXNlcm5hbWU+JyxcbiAgICAgICcgICAgICA8cGFzc3dvcmQ+JHtlbnYuTUFWRU5fUEFTU1dPUkR9PC9wYXNzd29yZD4nLFxuICAgICAgJyAgICA8L3NlcnZlcj4nLFxuICAgICk7XG5cbiAgICBpZiAoc2lnbmVkQXJ0aWZhY3RzKSB7XG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAnICAgIDxzZXJ2ZXI+JyxcbiAgICAgICAgJyAgICAgIDxpZD5ncGcucGFzc3BocmFzZTwvaWQ+JyxcbiAgICAgICAgLy8gTWF2ZW4gd2lsbCByZWFkIHRoZXNlLCBzdXJyb3VuZGluZyBjb2RlIGhhcyBhbHJlYWR5IG1hZGUgc3VyZSB0aGV5IGFyZSBzZXRcbiAgICAgICAgJyAgICAgIDxwYXNzcGhyYXNlPiR7ZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWV9QQVNTUEhSQVNFfTwvcGFzc3BocmFzZT4nLFxuICAgICAgICAnICAgIDwvc2VydmVyPicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxpbmVzLnB1c2goXG4gICAgICAnICA8L3NlcnZlcnM+JyxcbiAgICAgICc8L3NldHRpbmdzPicsXG4gICAgKTtcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLnNldHRpbmdzRmlsZSwgbGluZXMuam9pbignXFxuJyksICd1dGYtOCcpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGV4ZWMobW9qbzogc3RyaW5nLCBvcHRpb25zOiBNYXZlbkV4ZWNPcHRpb25zKTogUHJvbWlzZTxQcm9jZXNzT3V0cHV0IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgIGAtLXNldHRpbmdzPSR7dGhpcy5zZXR0aW5nc0ZpbGV9YCxcbiAgICAgICctLWJhdGNoLW1vZGUnLFxuICAgICAgLi4uKG9wdGlvbnMudmVyYm9zZSA/PyB0aGlzLnZlcmJvc2UgPyBbJy1YJ10gOiBbXSksXG4gICAgICBtb2pvLFxuICAgICAgLi4uT2JqZWN0LmVudHJpZXMob3B0aW9ucy5wcm9wZXJ0aWVzKS5tYXAoKFtrLCB2XSkgPT4gYC1EJHtrfT0ke3Z9YCksXG4gICAgXTtcblxuICAgIGlmICh0aGlzLmRyeVJ1bikge1xuICAgICAgZWNobyhgW0RSWS1SVU5dIG12biAke2FyZ3MubWFwKHF1b3RlKS5qb2luKCcgJyl9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIEpES19KQVZBX09QVElPTlM6IFtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgYWRkIHRoaXMsIHdlJ2xsIGdldCBhbiBlcnJvciBsaWtlIHRoZSBmb2xsb3dpbmcgZHVyaW5nIHRoZSBuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbjpyYy1yZWxlYXNlIG1vam8uXG4gICAgICAgIC8vIERvbid0IGtub3cgd2hlcmUgdGhpcyBpcyBjb21pbmcgZnJvbSBhbGwgb2YgYSBzdWRkZW4uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFtFUlJPUl0gbWVzc2FnZSAgICAgICAgICAgICA6IE5vIGNvbnZlcnRlciBhdmFpbGFibGVcbiAgICAgICAgLy8gW0VSUk9SXSB0eXBlICAgICAgICAgICAgICAgIDogamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3RcbiAgICAgICAgLy8gW0VSUk9SXSBjb252ZXJ0ZXIgICAgICAgICAgIDogY29tLnRob3VnaHR3b3Jrcy54c3RyZWFtLmNvbnZlcnRlcnMucmVmbGVjdGlvbi5SZWZsZWN0aW9uQ29udmVydGVyXG4gICAgICAgIC8vIFtFUlJPUl0gbWVzc2FnZVsxXSAgICAgICAgICA6IFVuYWJsZSB0byBtYWtlIGZpZWxkIHByb3RlY3RlZCB0cmFuc2llbnQgaW50IGphdmEudXRpbC5BYnN0cmFjdExpc3QubW9kQ291bnQgYWNjZXNzaWJsZTogbW9kdWxlIGphdmEuYmFzZSBkb2VzIG5vdCBcIm9wZW5zIGphdmEudXRpbFwiIHRvIHVubmFtZWQgbW9kdWxlIEA3YzhkNTMxMlxuICAgICAgICAnLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEudXRpbD1BTEwtVU5OQU1FRCcsXG4gICAgICAgICctLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5sYW5nPUFMTC1VTk5BTUVEJyxcbiAgICAgICAgJy0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLmxhbmcuaW52b2tlPUFMTC1VTk5BTUVEJyxcbiAgICAgIF0uam9pbignICcpLFxuICAgIH07XG5cbiAgICByZXR1cm4gJCh7IHZlcmJvc2U6IHRydWUsIG5vdGhyb3c6IG9wdGlvbnMubm90aHJvdywgZW52IH0pYG12biAke2FyZ3N9YDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgTWF2ZW5FeGVjT3B0aW9ucyB7XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIG5vdGhyb3c/OiBib29sZWFuO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGV4cGVjdGVkIGVycm9yIHRoYXQgZG9lc24ndCBuZWVkIGEgc3RhY2sgdHJhY2VcbiAqL1xuY2xhc3MgU2ltcGxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7IH1cblxuLyoqXG4gKiBSZXF1aXJlIGFuIGVudmlyb25tZW50IHZhcmlhYmxlXG4gKi9cbmZ1bmN0aW9uIGVudlZhcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXQgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgaWYgKCFyZXQpIHtcbiAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoYCR7bmFtZX0gaXMgcmVxdWlyZWRgKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IGNsZWFucyB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlXG4gKlxuICogVXNlIHdpdGggYHVzaW5nYC4gQ291bGQgaGF2ZSBiZWVuIGFzeW5jIGJ1dCBpdCdzIGRlcGVuZGluZ1xuICogb24gYW4gYWxyZWFkeS1zeW5jIEFQSSwgc28gd2h5IG5vdCBzeW5jP1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXV0b0NsZWFuRGlyKCkge1xuICBjb25zdCBkaXIgPSB0bXBkaXIoKTtcbiAgcmV0dXJuIHtcbiAgICBkaXIsXG4gICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBmcy5ybShkaXIsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZTogbmV2ZXIpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHZhbHVlOiAnICsgdmFsdWUpO1xufVxuXG4vLyBBICd6eCcgcHJpbWVyXG4vL1xuLy8gLSBCeSBkZWZhdWx0OiBzdGRlcnIgaXMgcHJpbnRlZCB0byB0aGUgdGVybWluYWwgaWYgaXQgaXMgY2FwdHVyZWQuXG4vLyAtIHsgdmVyYm9zZTogdHJ1ZSB9OiBwcmludCB0aGUgY29tbWFuZCwgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIHRlcm1pbmFsXG4vLyAtIHsgcXVpZXQ6IHRydWUgfTogcHJpbnQgbmVpdGhlciBzdGRvdXQgbm9yIHN0ZGVyclxuLy9cbi8vIC50ZXh0KCk6IHJldHVybiBldmVyeXRoaW5nIHRoYXQncyBjYXB0dXJlZCAoc3RkZXJyIGFuZCBzdGRvdXQgdG9nZXRoZXIgaWYgc3RkZXJyIGlzIGNhcHR1cmVkKVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gIGlmIChlIGluc3RhbmNlb2YgUHJvY2Vzc091dHB1dCkge1xuICAgIGVjaG8oYOKdjCBTdWJwcm9jZXNzIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAke2UuZXhpdENvZGV9YCk7XG4gIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIFNpbXBsZUVycm9yKSB7XG4gICAgZWNobygn4p2MJywgZS5tZXNzYWdlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICB9XG4gIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xufSk7XG4iXX0=
|
package/package.json
CHANGED
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"organization": true
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@aws-sdk/client-sts": "^3.
|
|
56
|
+
"@aws-sdk/client-sts": "^3.1042.0",
|
|
57
57
|
"@stylistic/eslint-plugin": "^2",
|
|
58
58
|
"@types/glob": "^8.1.0",
|
|
59
59
|
"@types/jest": "^27.5.2",
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
"typescript": "~5.7"
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@aws-sdk/client-codeartifact": "^3.
|
|
79
|
-
"@aws-sdk/credential-providers": "^3.
|
|
78
|
+
"@aws-sdk/client-codeartifact": "^3.1043.0",
|
|
79
|
+
"@aws-sdk/credential-providers": "^3.1043.0",
|
|
80
80
|
"@aws-sdk/types": "^3.973.8",
|
|
81
81
|
"@types/fs-extra": "^8.0.0",
|
|
82
82
|
"fs-extra": "^8.0.0",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"publishConfig": {
|
|
93
93
|
"access": "public"
|
|
94
94
|
},
|
|
95
|
-
"version": "0.2.
|
|
95
|
+
"version": "0.2.1045",
|
|
96
96
|
"jest": {
|
|
97
97
|
"coverageProvider": "v8",
|
|
98
98
|
"testMatch": [
|
package/package.json.bak
CHANGED
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"organization": true
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@aws-sdk/client-sts": "^3.
|
|
56
|
+
"@aws-sdk/client-sts": "^3.1042.0",
|
|
57
57
|
"@stylistic/eslint-plugin": "^2",
|
|
58
58
|
"@types/glob": "^8.1.0",
|
|
59
59
|
"@types/jest": "^27.5.2",
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
"typescript": "~5.7"
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@aws-sdk/client-codeartifact": "^3.
|
|
79
|
-
"@aws-sdk/credential-providers": "^3.
|
|
78
|
+
"@aws-sdk/client-codeartifact": "^3.1043.0",
|
|
79
|
+
"@aws-sdk/credential-providers": "^3.1043.0",
|
|
80
80
|
"@aws-sdk/types": "^3.973.8",
|
|
81
81
|
"@types/fs-extra": "^8.0.0",
|
|
82
82
|
"fs-extra": "^8.0.0",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"publishConfig": {
|
|
93
93
|
"access": "public"
|
|
94
94
|
},
|
|
95
|
-
"version": "0.2.
|
|
95
|
+
"version": "0.2.1045",
|
|
96
96
|
"jest": {
|
|
97
97
|
"coverageProvider": "v8",
|
|
98
98
|
"testMatch": [
|