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

@spikedpunch/forge

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@spikedpunch/forge - npm Package Compare versions

Comparing version 0.1.2 to 0.1.3

22

.rush/temp/package-deps_build.json
{
"files": {
"forge/CHANGELOG.json": "a3f431eb61ffe4f33b257ba3b347715df64d2dd7",
"forge/CHANGELOG.md": "e145cc5f8eaec9cfefcd66d54f5ad95142dd21a7",
"forge/README.md": "ea0e99b513513f0e4ecb9b6d6a9b27048a7b7b11",
"forge/CHANGELOG.json": "2bd74751da41c7928c4ceb9f2ed4d5382750bdf2",
"forge/CHANGELOG.md": "6787803187bd3a88cb47c3be8ff313625f93df2f",
"forge/README.md": "693e999b669ba4102ea1564d8cd9c146fecf2711",
"forge/dist/bin/forge.d.ts": "b7988016daa5bf0b3d4fcdccaba52780a9983d9d",

@@ -19,3 +19,3 @@ "forge/dist/bin/forge.js": "4f3efe5cf01c9f418c0c10a6feb2877570102df7",

"forge/dist/core/ForgeOptions.d.ts": "59d821ee5ef87b5a65db5e6a7f98e6ea6ccc654a",
"forge/dist/core/ForgeOptions.js": "d07e1cddfdf6480d90ae76307077773560b5a788",
"forge/dist/core/ForgeOptions.js": "227eb082c13c09228e603707050e1180e17a637d",
"forge/dist/core/ForgeTransform.d.ts": "d350120c5e4a7270445f384ba625f2a240e92ec3",

@@ -28,3 +28,3 @@ "forge/dist/core/ForgeTransform.js": "e48e6fb0785e18b9275fe840be0fec22e8a9d9f5",

"forge/dist/core/PipelineNode.d.ts": "8c179d73f2562692d50eb0bc1db9bd9d35406c4f",
"forge/dist/core/PipelineNode.js": "326eb44a090dfec0871589429c030b2a56e2d0c7",
"forge/dist/core/PipelineNode.js": "e11d67336e4f362c1ba823355e190b151f7ac996",
"forge/dist/core/Search.d.ts": "8e1145b402a69b8f3baf84a4c4182d4d25dbd0b3",

@@ -37,11 +37,11 @@ "forge/dist/core/Search.js": "d87b606c5f0ac95053ed4ea4bfb9c1e578a0577d",

"forge/dist/index.d.ts": "c63ac6c4fe7aeabfbf7f35b77e89ec1b93975685",
"forge/dist/index.js": "e6978d228112f5442fc63c53e4818777f7b5287d",
"forge/dist/index.js": "e65a96b1001d207bf6a0b9341639470fce7c1415",
"forge/dist/plugins/ForgeBuffer.d.ts": "c9baa7b11a43f957df26d573cb3bc50b0ff3293b",
"forge/dist/plugins/ForgeBuffer.js": "428fc43799cb1a524a3325242d5f4f0a4b1d5cd8",
"forge/dist/plugins/ForgeFn.d.ts": "05d80c2c0893800d0518c06b61e2eb7a751e68c1",
"forge/dist/plugins/ForgeFn.js": "daf805bb66d2800ce3ca7bf4a409ee48e2584f38",
"forge/dist/plugins/ForgeFn.js": "b3ea417c4308b666efca260608afac37e6aa5bbd",
"forge/dist/plugins/ForgeGlobalPlugins.d.ts": "013c5f72b8010cede49c098b32f00d3984a98a29",
"forge/dist/plugins/ForgeGlobalPlugins.js": "6470e98208660030ae651d0f478adbe35aa4214c",
"forge/dist/plugins/ForgeHttpPlugin.d.ts": "ad1c1b3be0a089c99d06f7986208d5a09fbcd4ec",
"forge/dist/plugins/ForgeHttpPlugin.js": "f9a9c8384d66c3a4079f8742c738badca9ae446a",
"forge/dist/plugins/ForgeHttpPlugin.js": "3181d8538f7e8d24fd486403b75a49ea4a4164cd",
"forge/dist/plugins/ForgeStream.d.ts": "51dad9306e5fde23d196191bf7ccba4daed778e5",

@@ -83,3 +83,3 @@ "forge/dist/plugins/ForgeStream.js": "6ae326c8c590fa21a5f3692771b1ef103257bfd0",

"forge/package-lock.json": "8ec9219e061694cfa4532db47e16dc14f755a7fd",
"forge/package.json": "700f14bdd04281934ab0daf05cabd9c3a29d37f6",
"forge/package.json": "a1f046259ae8cae8e82b5af73e544d32603b1183",
"forge/src/bin/forge.ts": "c3c918162e06c1f7956c1dd122f7f6e9105681d5",

@@ -91,3 +91,3 @@ "forge/src/core/BuildRecord.ts": "2a396e06dfa6f6563da41d1bc1e9f035bf696b7b",

"forge/src/core/ForgeBuilder.ts": "0e95827c21920c9fbd98136d53002d8d2e66a649",
"forge/src/core/ForgeOptions.ts": "ffbfef02dfa1fc7151962fa4a24924843aea2b85",
"forge/src/core/ForgeOptions.ts": "518620b219190695f47c8bb64aa29c53b71aaeb4",
"forge/src/core/ForgeTransform.ts": "ff59a71e0e8a6484526f234bfbb5b9fda4ab368a",

@@ -104,3 +104,3 @@ "forge/src/core/NamedPlugin.ts": "dc521c44d2bf5ed5438ad758787e8c162ac8dabc",

"forge/src/plugins/ForgeGlobalPlugins.ts": "7c12d997ac9e3a8874b6bebd17a8472cb1a336c5",
"forge/src/plugins/ForgeHttpPlugin.ts": "6e3688f489a8d656ba01f6215c49888e102b9bb5",
"forge/src/plugins/ForgeHttpPlugin.ts": "314b1bd252fd11bc8d8114a377ea5937a47bd222",
"forge/src/plugins/ForgeStream.ts": "5c48ee6fd10fd1e55a21cde7c86ebea8afc2c713",

@@ -107,0 +107,0 @@ "forge/src/plugins/IEnvoy.ts": "6cf1c1f3f54184e72211bb11a0c53fe80bc63d41",

@@ -459,2 +459,2 @@ "use strict";

// }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9yZ2VPcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvRm9yZ2VPcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QixxREFBOEU7QUFDOUUsNENBQXdEO0FBQ3hELDBDQUFxRDtBQUNyRCxxREFBbUQ7QUFDbkQsK0NBQTJDO0FBQzNDLGlDQUE4QztBQUM5QyxtREFBOEQ7QUFDOUQsdURBQW1EO0FBQ25ELHNFQUE2RDtBQWdDN0QsTUFBYSxZQUFZO0lBSXRCLFlBQVksTUFBTSxHQUFHLElBQUksc0JBQWEsRUFBRSxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQzFELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pCLENBQUM7Q0FDSDtBQVJELG9DQVFDO0FBRUQ7OzswRUFHMEU7QUFDMUUsTUFBYSxXQUFXO0lBTXJCO1FBQ0csSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGlDQUFlLEVBQUUsQ0FBQTtRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksaUNBQWdCLEVBQUUsQ0FBQTtRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksS0FBSyxFQUFlLENBQUE7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBVyxFQUFFLE9BQXFCO1FBQ3RELE9BQU8sTUFBTSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzFDLENBQUM7Q0FDSDtBQWhCRCxrQ0FnQkM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBFQW9DMEU7QUFDbkUsS0FBSyxV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QUFDdEUsd0tBQXdLO0FBQ3hLLGFBQWE7QUFFYiw0Q0FBNEM7QUFDNUMsdURBQXVEO0FBQ3ZELDhDQUE4QztBQUM5Qyx5Q0FBeUM7QUFDekMsa0RBQWtEO0FBQ2xELGdCQUFnQjtBQUNoQixvQkFBb0I7QUFDcEIsZ0tBQWdLO0FBQ2hLLGFBQWE7QUFDYixVQUFVO0FBRVYseUJBQXlCO0FBRXpCLHVDQUF1QztBQUN2QyxPQUFPO0FBRVAsa0NBQWtDO0FBQ2xDLGtDQUFrQztBQUNsQywwQ0FBMEM7QUFDMUMsVUFBVTtBQUNWLDhDQUE4QztBQUM5QywyQ0FBMkM7QUFDM0MsY0FBYztBQUNkLG1KQUFtSjtBQUNuSixPQUFPO0FBRVAsb0JBQW9CO0FBQ3BCLElBQUk7QUFFSiw2RUFBNkU7QUFDN0UseURBQXlEO0FBQ3pELE1BQU07QUFDTixnREFBZ0Q7QUFDaEQsb0NBQW9DO0FBQ3BDLDZFQUE2RTtBQUM3RSwwRUFBMEU7QUFDMUUsNENBQTRDO0FBRTVDLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckIsT0FBTztBQUVQLHFHQUFxRztBQUNyRyx5REFBeUQ7QUFDekQsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmltcG9ydCB7IElQbHVnaW4gfSBmcm9tICcuLi9wbHVnaW5zL0lQbHVnaW4nXG5pbXBvcnQgeyBGb3JnZVBpcGVsaW5lLCBJRm9yZ2VQaXBlbGluZSwgSUZvcmdlU2NyaXB0IH0gZnJvbSAnLi9Gb3JnZVRyYW5zZm9ybSdcbmltcG9ydCB7IENvbnNvbGVMb2dnZXIsIElMb2dnZXIgfSBmcm9tICcuLi91dGlscy9Mb2dnZXInXG5pbXBvcnQgeyBpc0RlZmluZWQsIHNhZmVseVJ1biB9IGZyb20gJy4uL3V0aWxzL1V0aWxzJ1xuaW1wb3J0IHsgRW1wdHlGb3JnZVNjcmlwdCB9IGZyb20gJy4vRm9yZ2VUcmFuc2Zvcm0nXG5pbXBvcnQgeyBOYW1lZFBsdWdpbiB9IGZyb20gJy4vTmFtZWRQbHVnaW4nXG5pbXBvcnQgeyBJU3RlcCwgU3RlcCwgU3RlcEluZm8gfSBmcm9tICcuL1N0ZXAnXG5pbXBvcnQgeyBDb25maWdCdWlsZGVyLCBHZW5lcmljT2JqZWN0IH0gZnJvbSAnLi9Db25maWdCdWlsZGVyJ1xuaW1wb3J0IHsgRmlsZVNlYXJjaFNjb3BlIH0gZnJvbSAnLi9GaWxlU2VhcmNoU2NvcGUnXG5pbXBvcnQgeyBHbG9iYWxQbHVnaW5zIH0gZnJvbSAnLi4vcGx1Z2lucy9Gb3JnZUdsb2JhbFBsdWdpbnMnXG5cbmV4cG9ydCB0eXBlIEJ1aWx0Q29uZmlnID0ge1xuICAgW2tleTogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCB0eXBlIFN0ZXBCdWlsZFBhcmFtcyA9IHtcbiAgIGNvbmZpZzogQnVpbHRDb25maWdcbn1cblxuZXhwb3J0IHR5cGUgQnVpbGRTdGVwRm4gPSAocGFyYW1zOiBTdGVwQnVpbGRQYXJhbXMpID0+IFByb21pc2U8U3RlcEluZm8+XG5cbnR5cGUgUmVzb2x2ZUVudHJ5ID0gc3RyaW5nIHwgc3RyaW5nW11cblxudHlwZSBQbHVnaW5FbnRyeSA9IHtcbiAgIG5hbWU6IHN0cmluZ1xuICAgcGx1Z2luOiBJUGx1Z2luXG59XG5cbnR5cGUgU2NyaXB0RW50cnkgPSBzdHJpbmcgfCBJRm9yZ2VTY3JpcHRcblxudHlwZSBTdGVwRW50cnkgPSBTdGVwSW5mbyB8IEJ1aWxkU3RlcEZuXG5cbnR5cGUgUGlwZWxpbmVFbnRyeSA9IHtcbiAgIHBsdWdpbnM6IFBsdWdpbkVudHJ5IHwgUGx1Z2luRW50cnlbXVxuICAgcmVzb2x2ZTogUmVzb2x2ZUVudHJ5XG4gICBzY3JpcHQ6IFNjcmlwdEVudHJ5XG4gICBzdGVwczogU3RlcEVudHJ5W11cbn1cblxuZXhwb3J0IHR5cGUgUmVzb2x2ZVBhdGhzRm4gPSAoKSA9PiBQcm9taXNlPHN0cmluZ1tdPlxuXG5leHBvcnQgY2xhc3MgRm9yZ2VPcHRpb25zIHtcbiAgIGN3ZD86IHN0cmluZ1xuICAgbG9nZ2VyPzogSUxvZ2dlclxuXG4gICBjb25zdHJ1Y3Rvcihsb2dnZXIgPSBuZXcgQ29uc29sZUxvZ2dlcigpLCBjd2QgPSBwcm9jZXNzLmN3ZCgpKSB7XG4gICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlclxuICAgICAgdGhpcy5jd2QgPSBjd2RcbiAgIH1cbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcbiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNlcmllcyBvZiBwaXBlbGluZXMgdG9cbiAqIGJlIHJ1biBieSB0aGUgRm9yZ0J1aWxkZXIuXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGNsYXNzIEZvcmdlQ29uZmlnIHtcbiAgIHJlc29sdmU6IEZpbGVTZWFyY2hTY29wZVxuICAgc2NyaXB0OiBJRm9yZ2VTY3JpcHRcbiAgIHBsdWdpbnM6IEFycmF5PE5hbWVkUGx1Z2luPlxuICAgcGlwZWxpbmVzOiBBcnJheTxJRm9yZ2VQaXBlbGluZT5cblxuICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLnJlc29sdmUgPSBuZXcgRmlsZVNlYXJjaFNjb3BlKClcbiAgICAgIHRoaXMuc2NyaXB0ID0gbmV3IEVtcHR5Rm9yZ2VTY3JpcHQoKVxuICAgICAgdGhpcy5wbHVnaW5zID0gbmV3IEFycmF5PE5hbWVkUGx1Z2luPigpXG4gICAgICB0aGlzLnBpcGVsaW5lcyA9IG5ldyBBcnJheTxJRm9yZ2VQaXBlbGluZT4oKVxuICAgfVxuXG4gICBzdGF0aWMgYXN5bmMgbm9ybWFsaXplKGNvbmZpZzogYW55LCBvcHRpb25zOiBGb3JnZU9wdGlvbnMpOiBQcm9taXNlPEZvcmdlQ29uZmlnPiB7XG4gICAgICByZXR1cm4gYXdhaXQgbm9ybWFsaXplKGNvbmZpZywgb3B0aW9ucylcbiAgIH1cbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3JtYWxpemUgdGhlIHNldCBvZiBvcHRpb25zXG4gKiBwcm92aWRlZCBieSB0aGUgZGV2ZWxvcGVyLlxuICogXG4gKiBFeGFtcGxlIGZvcm1hdDpcbiAqICAgIHtcbiAqICAgICAgIHBsdWdpbnM6IFtcbiAqICAgICAgICAgIHsgbmFtZTogJ3N3aWcnLCBuZXcgU3dpZ1BsdWdpbigpIH0sXG4gKiAgICAgICAgICB7IG5hbWU6ICd4bWwnLCBuZXcgWG1sUGx1Z2luKCkgfVxuICogICAgICAgXSxcbiAqICAgICAgIHBpcGVsaW5lczoge1xuICogICAgICAgICAgc29tZW5hbWU6IHtcbiAqICAgICAgICAgICAgIHN0ZXBzOiBbXG4gKiAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICBhbGlhczogJ3htbCcsXG4gKiAgICAgICAgICAgICAgICAgICBwbHVnaW46ICd4bWwnLFxuICogICAgICAgICAgICAgICAgICAgc291cmNlOiAnaHR0cHM6Ly9zb21lLXVybC9maWxlLnhtbCdcbiAqICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICBhbGlhczogJ3NjcmlwdCcsXG4gKiAgICAgICAgICAgICAgICAgICBwbHVnaW46ICdzY3JpcHQnLFxuICogICAgICAgICAgICAgICAgICAgdXNlOiAneG1sJyxcbiAqICAgICAgICAgICAgICAgICAgIHNjcmlwdDogJ3NvbWUvcmVsYXRpdmUvcGF0aC5qcycsXG4gKiAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgYWxpYXM6ICd3cml0ZScsXG4gKiAgICAgICAgICAgICAgICAgICBwbHVnaW46ICdzd2lnJyxcbiAqICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiAncmVsYXRpdmUvcGF0aC90by9maWxlLnRlbXBsYXRlJ1xuICogICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgXVxuICogICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgfVxuICogXG4gKiBcbiAqIEBwYXJhbSBjb25maWcgVGhlIGV4dGVybmFsIGNvbmZpZyBvYmplY3QuXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICAgbm9ybWFsaXplKGNvbmZpZzogYW55LCBvcHRpb25zOiBGb3JnZU9wdGlvbnMpOiBQcm9taXNlPEZvcmdlQ29uZmlnPiB7XG4gICBsZXQgZm9yZ2VDb25maWcgPSBuZXcgRm9yZ2VDb25maWcoKVxuXG4gICBpZiAoY29uZmlnID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3JnZUNvbmZpZ1xuICAgfVxuXG4gICBsZXQgZXJyb3IgPSAobXNnOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoYENvbmZpZyBQYXJzZXI6ICR7bXNnfWApXG4gICB9XG5cbiAgIGlmICghaXNEZWZpbmVkKG9wdGlvbnMuY3dkKSkge1xuICAgICAgb3B0aW9ucy5jd2QgPSBwcm9jZXNzLmN3ZCgpXG4gICB9XG5cbiAgIC8vLS0gU2FuaXRpemVcbiAgIGlmIChjb25maWcucGx1Z2lucykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5wbHVnaW5zKSkge1xuICAgICAgICAgdGhyb3cgZXJyb3IoJ3BsdWdpbnMgZXhpc3RzLCBidXQgaXMgbm90IGFuIEFycmF5JylcbiAgICAgIH1cbiAgIH1cblxuICAgaWYgKGNvbmZpZy5waXBlbGluZXMpIHtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLnBpcGVsaW5lcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgIHRocm93IGVycm9yKCdwaXBlbGluZXMgZXhpc3RzLCBidXQgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgICAgfVxuICAgfVxuXG4gICBpZihjb25maWcuc3RlcHMgJiYgY29uZmlnLnBpcGVsaW5lcyA9PSBudWxsKSB7XG4gICAgICBjb25maWcucGlwZWxpbmVzID0ge1xuICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgc3RlcHM6IGNvbmZpZy5zdGVwc1xuICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkZWxldGUgY29uZmlnLnN0ZXBzXG4gICB9XG5cbiAgIC8vLS0gTm9ybWFsaXplXG4gICBsZXQgZ2xvYmFsU2VhcmNoU2NvcGUgPSBhd2FpdCBpbXBvcnRSZXNvbHZlKGNvbmZpZy5yZXNvbHZlLCBvcHRpb25zKVxuICAgZm9yZ2VDb25maWcucmVzb2x2ZSA9IGdsb2JhbFNlYXJjaFNjb3BlXG4gICBmb3JnZUNvbmZpZy5yZXNvbHZlLmFkZChvcHRpb25zLmN3ZClcblxuICAgZm9yZ2VDb25maWcuc2NyaXB0ID0gYXdhaXQgaW1wb3J0U2NyaXB0KGNvbmZpZy5zY3JpcHQsIGdsb2JhbFNlYXJjaFNjb3BlKVxuXG4gICBsZXQgY29uZmlnQnVpbGRlciA9IG5ldyBDb25maWdCdWlsZGVyKClcbiAgIGxldCBnbG9iYWxDb25maWcgPSBhd2FpdCBzYWZlbHlSdW48R2VuZXJpY09iamVjdD4oZm9yZ2VDb25maWcuc2NyaXB0LmluaXQsIGNvbmZpZ0J1aWxkZXIpXG4gICBnbG9iYWxDb25maWcgPSBnbG9iYWxDb25maWcgfHwge31cblxuICAgbGV0IGdsb2JhbFBsdWdpbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBJUGx1Z2luPigpXG5cbiAgIC8vIEFkZCB0aGUgRm9yZ2UgSW50ZXJuYWwgUGx1Z2luc1xuICAgR2xvYmFsUGx1Z2lucy5wbHVnaW5zLmZvckVhY2gocGwgPT4gZ2xvYmFsUGx1Z2luTWFwLnNldChwbC5uYW1lLCBwbC5wbHVnaW4pKVxuXG4gICBmb3JnZUNvbmZpZy5wbHVnaW5zID0gYXdhaXQgaW1wb3J0UGx1Z2lucyhjb25maWcucGx1Z2lucywgZ2xvYmFsQ29uZmlnKVxuXG4gICBmb3JnZUNvbmZpZy5wbHVnaW5zLmZvckVhY2gocGwgPT4gZ2xvYmFsUGx1Z2luTWFwLnNldChwbC5uYW1lLCBwbC5wbHVnaW4pKVxuXG4gICBmb3IgKGxldCBuYW1lIG9mIE9iamVjdC5rZXlzKGNvbmZpZy5waXBlbGluZXMpKSB7XG4gICAgICBsZXQgdHJhbnNmb3JtOiBGb3JnZVBpcGVsaW5lIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIHRyYW5zZm9ybSA9IGF3YWl0IGltcG9ydFBpcGVsaW5lKFxuICAgICAgICAgbmFtZSxcbiAgICAgICAgIGNvbmZpZy5waXBlbGluZXNbbmFtZV0sXG4gICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgICBnbG9iYWxTZWFyY2hTY29wZSxcbiAgICAgICAgIGdsb2JhbFBsdWdpbk1hcCxcbiAgICAgICAgIG9wdGlvbnNcbiAgICAgIClcblxuICAgICAgZm9yZ2VDb25maWcucGlwZWxpbmVzLnB1c2godHJhbnNmb3JtKVxuICAgfVxuXG4gICByZXR1cm4gZm9yZ2VDb25maWdcbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcbiAqIEltcG9ydHMgYSBub24tc2FuaXRpemVkIHBpcGVsaW5lIGZyb20gY29uZmlnXG4gKiBcbiAqIEV4YW1wbGUgZm9ybWF0OlxuICogICAge1xuICogICAgICAgcmVzb2x2ZTogJycsXG4gKiAgICAgICBzY3JpcHQ6ICdwYXRoL3JvLnNjcmlwdC5qcycsXG4gKiAgICAgICBwbHVnaW5zOiBbXG4gKiAgICAgICAgICB7IG5hbWU6ICdwbHVnaW4tbmFtZScsIHBsdWdpbjogSVBsdWdpbiB9XG4gKiAgICAgICBdLFxuICogICAgICAgc3RlcHM6IFtcbiAqICAgICAgICAgIHtcbiAqICAgICAgICAgICAgIGFsaWFzOiAneG1sJyxcbiAqICAgICAgICAgICAgIHBsdWdpbjogJ3htbCcsXG4gKiAgICAgICAgICAgICBzb3VyY2U6ICdodHRwczovL3NvbWUtdXJsL2ZpbGUueG1sJ1xuICogICAgICAgICAgfSxcbiAqICAgICAgICAgIHtcbiAqICAgICAgICAgICAgIGFsaWFzOiAnc2NyaXB0JyxcbiAqICAgICAgICAgICAgIHBsdWdpbjogJ3NjcmlwdCcsXG4gKiAgICAgICAgICAgICB1c2U6ICd4bWwnLFxuICogICAgICAgICAgICAgc2NyaXB0OiAnc29tZS9yZWxhdGl2ZS9wYXRoLmpzJyxcbiAqICAgICAgICAgIH0sXG4gKiAgICAgICAgICB7XG4gKiAgICAgICAgICAgICBhbGlhczogJ3dyaXRlJyxcbiAqICAgICAgICAgICAgIHBsdWdpbjogJ3N3aWcnLFxuICogICAgICAgICAgICAgdGVtcGxhdGU6ICdyZWxhdGl2ZS9wYXRoL3RvL2ZpbGUudGVtcGxhdGUnXG4gKiAgICAgICAgICB9XG4gKiAgICAgICBdXG4gKiAgICB9XG4gKiBcbiAqICAgIHNjcmlwdCB7IHN0cmluZyB8IG9iamVjdCB9OiBzdHJpbmcgfCBJRm9yZ2VTY3JpcHRcbiAqIFxuICogQHBhcmFtIHRyYW5zZm9ybSBUaGUgdHJhbnNmb3JtIHRvIG5vcm1hbGl6ZVxuICogQHBhcmFtIGdsb2JhbFBsdWdpbk1hcCBNYXAgb2YgcGx1Z2lucyBkZWZpbmVkIGF0IHRoZSBnbG9iYWwgbGV2ZWxcbiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQaXBlbGluZShcbiAgIG5hbWU6IHN0cmluZyxcbiAgIHRyYW5zZm9ybTogUGlwZWxpbmVFbnRyeSxcbiAgIGdsb2JhbENvbmZpZzogR2VuZXJpY09iamVjdCxcbiAgIGdsb2JhbFNlYXJjaFNjb3BlOiBGaWxlU2VhcmNoU2NvcGUsXG4gICBnbG9iYWxQbHVnaW5NYXA6IE1hcDxzdHJpbmcsIElQbHVnaW4+LFxuICAgb3B0aW9uczogRm9yZ2VPcHRpb25zXG4pOiBQcm9taXNlPEZvcmdlUGlwZWxpbmU+IHtcbiAgIHRyeSB7XG4gICAgICBsZXQgc2VhcmNoU2NvcGUgPSBhd2FpdCBpbXBvcnRSZXNvbHZlKHRyYW5zZm9ybS5yZXNvbHZlLCBvcHRpb25zKVxuICAgICAgc2VhcmNoU2NvcGUubWVyZ2UoZ2xvYmFsU2VhcmNoU2NvcGUpXG5cbiAgICAgIGxldCBzY3JpcHQgPSBhd2FpdCBpbXBvcnRTY3JpcHQodHJhbnNmb3JtLnNjcmlwdCwgc2VhcmNoU2NvcGUpXG5cbiAgICAgIGxldCBidWlsZENvbmZpZyA9IG5ldyBDb25maWdCdWlsZGVyKClcbiAgICAgIGxldCB0cmFuc2Zvcm1Db25maWcgPSBhd2FpdCBzYWZlbHlSdW48R2VuZXJpY09iamVjdD4oc2NyaXB0LmluaXQsIHsgYnVpbGRDb25maWcgfSlcbiAgICAgIHRyYW5zZm9ybUNvbmZpZyA9IHRyYW5zZm9ybUNvbmZpZyB8fCB7fVxuXG4gICAgICAvLyBQYXNzIGFueSBtaXNzaW5nIGNvbmZpZyBwYXJhbXRlcnMgZnJvbSB0aGUgZ2xvYmFsIGNvbmZpZyB0byB0aGVcbiAgICAgIC8vIHRyYW5zZm9ybSBjb25maWdcbiAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhnbG9iYWxDb25maWcpKSB7XG4gICAgICAgICBpZiAodHJhbnNmb3JtQ29uZmlnW2tleV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgdHJhbnNmb3JtQ29uZmlnW2tleV0gPSB2YWx1ZVxuICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgcGx1Z2lucyA9IGF3YWl0IGltcG9ydFBsdWdpbnModHJhbnNmb3JtLnBsdWdpbnMsIGdsb2JhbENvbmZpZywgdHJhbnNmb3JtQ29uZmlnKVxuXG4gICAgICAvLyBDcmVhdGUgYSBwbHVnaW4gbWFwIG9mIGdsb2JhbCBhbmQgbG9jYWwgcGx1Z2luc1xuICAgICAgbGV0IHBsdWdpbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBJUGx1Z2luPigpXG5cbiAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBnbG9iYWxQbHVnaW5NYXApIHtcbiAgICAgICAgIHBsdWdpbk1hcC5zZXQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGxvY2FsIHBsdWdpbnMgYWZ0ZXIgdG8gXCJvdmVycmlkZVwiIGdsb2JhbCBwbHVnaW5zXG4gICAgICBmb3IgKGxldCBuYW1lZCBvZiBwbHVnaW5zKSB7XG4gICAgICAgICBwbHVnaW5NYXAuc2V0KG5hbWVkLm5hbWUsIG5hbWVkLnBsdWdpbilcbiAgICAgIH1cblxuICAgICAgcGx1Z2lucyA9IG5ldyBBcnJheTxOYW1lZFBsdWdpbj4oKVxuICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIHBsdWdpbk1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgIHBsdWdpbnMucHVzaChuZXcgTmFtZWRQbHVnaW4oa2V5LCB2YWx1ZSkpXG4gICAgICB9XG5cbiAgICAgIGxldCBzdGVwcyA9IGF3YWl0IGltcG9ydFBpcGVsaW5lU3RlcHMobmFtZSwgdHJhbnNmb3JtLnN0ZXBzLCB0cmFuc2Zvcm1Db25maWcsIHBsdWdpbk1hcClcblxuICAgICAgcmV0dXJuIG5ldyBGb3JnZVBpcGVsaW5lKG5hbWUsIHBsdWdpbnMsIHNjcmlwdCwgc3RlcHMsIHNlYXJjaFNjb3BlKVxuICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgIH1cbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcbiAqIE5vcm1hbGl6ZXNhbmQgaW1wb3J0cyB0aGUgcGx1Z2luIHNlY3Rpb24gb2YgYSB0cmFuc2Zvcm1cbiAqIFxuICogQHBhcmFtIHRyYW5zZm9ybU5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHRyYW5zZm9ybVxuICogQHBhcmFtIHBsdWdpbnMgeyBBcnJheSB8IG9iamVjdCB9IFRoZSBwbHVnaW5zIGNvbmZpZ3VyYXRpb25cbiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQbHVnaW5zKFxuICAgcGx1Z2luczogUGx1Z2luRW50cnkgfCBQbHVnaW5FbnRyeVtdLFxuICAgZ2xvYmFsQ29uZmlnOiBHZW5lcmljT2JqZWN0LFxuICAgbG9jYWxDb25maWc6IEdlbmVyaWNPYmplY3QgPSB7fVxuKTogUHJvbWlzZTxBcnJheTxOYW1lZFBsdWdpbj4+IHtcbiAgIGxldCByZXN1bHRzID0gbmV3IEFycmF5PE5hbWVkUGx1Z2luPigpXG5cbiAgIGlmICghaXNEZWZpbmVkKHBsdWdpbnMpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1xuICAgfVxuXG4gICBsZXQgaW1wb3J0UGx1Z2lucyA9IGFzeW5jIChlbnRyeTogUGx1Z2luRW50cnkpOiBQcm9taXNlPE5hbWVkUGx1Z2luW10+ID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICBsZXQgeyBuYW1lLCBwbHVnaW4gfSA9IGVudHJ5XG5cbiAgICAgICAgIGlmICghaXNEZWZpbmVkKG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiBuYW1lIGlzIG1pc3NpbmcuIEVuc3VyZSBhbGwgcGx1Z2lucyBoYXZlIGEgJ25hbWUnIGRlZmluZWRgKVxuICAgICAgICAgfVxuXG4gICAgICAgICBpZiAoIWlzRGVmaW5lZChwbHVnaW4pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgUGx1Z2luIGVudHJ5IGlzIG1pc3NpbmcgdGhlIG9oIHNvIHZlcnkgaW1wb3J0YW50ICdwbHVnaW4nIHByb3BlcnR5LiBFbnN1cmUgYWxsIHBsdWdpbnMgaGF2ZSB0aGVpciAncGx1Z2luJyBmaWVsZCBwb3B1bGF0ZWQuYClcbiAgICAgICAgIH1cblxuICAgICAgICAgcmV0dXJuIFtuZXcgTmFtZWRQbHVnaW4obmFtZSwgcGx1Z2luKV1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICBsZXQgY2FzdEVudHJ5ID0gZW50cnkgYXMgKGdsb2JhbDogR2VuZXJpY09iamVjdCwgbG9jYWw6IEdlbmVyaWNPYmplY3QpID0+IFByb21pc2U8TmFtZWRQbHVnaW4gfCBOYW1lZFBsdWdpbltdPlxuICAgICAgICAgbGV0IGVudHJpZXMgPSBhd2FpdCBjYXN0RW50cnkoZ2xvYmFsQ29uZmlnLCBsb2NhbENvbmZpZylcblxuICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGVudHJpZXMpKSB7XG4gICAgICAgICAgICBlbnRyaWVzID0gW2VudHJpZXNdXG4gICAgICAgICB9XG5cbiAgICAgICAgIHJldHVybiBlbnRyaWVzLm1hcChpdCA9PiBuZXcgTmFtZWRQbHVnaW4oaXQubmFtZSwgaXQucGx1Z2luKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuY291dG5lcmVkIGEgcGx1Z2luIGVudHJ5IHRoYXQgaXMgbm90IGluIHRoZSBleHBlY3RlZCBmb3JtYXQuIFBsdWdpbiBlbnRyaWVzIGFyZSBlaXRoZXIgZnVuY3Rpb25zIG9yIG9iamVjdHMuYClcbiAgICAgIH1cbiAgIH1cblxuICAgaWYgKEFycmF5LmlzQXJyYXkocGx1Z2lucykpIHtcbiAgICAgIHBsdWdpbnMgPSBwbHVnaW5zIGFzIEFycmF5PFBsdWdpbkVudHJ5PlxuXG4gICAgICBmb3IgKGxldCBlbnRyeSBvZiBwbHVnaW5zKSB7XG4gICAgICAgICByZXN1bHRzLnB1c2goLi4uKGF3YWl0IGltcG9ydFBsdWdpbnMoZW50cnkpKSlcbiAgICAgIH1cbiAgIH0gZWxzZSBpZiAodHlwZW9mIHBsdWdpbnMgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRzLnB1c2goLi4uKGF3YWl0IGltcG9ydFBsdWdpbnMocGx1Z2lucykpKVxuICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZm9ybWF0IGVuY291bnRlcmVkIHdoZW4gaW1wb3J0aW5nIHBsdWdpbnMuIEVuc3VyZSBlYWNoIHBsdWdpbiBlbnRyeSBoYXMgYSAnbmFtZScgYW5kICdwbHVnaW4nIGZpZWxkLmApXG4gICB9XG5cbiAgIHJldHVybiByZXN1bHRzXG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXG4gKiBJbXBvcnRzIHRoZSBUcmFuc2Zvcm0gU2NyaXB0LiBXaWxsIHJlYWQgaXQgaW4gZnJvbSBkaXNrIGlmIHByb3ZpZGVkIGFzIGEgcGF0aCwgb3RoZXJ3aXNlLFxuICogaXQgd2lsbCByZWFkIGl0IGluIGZyb20gbWVtb3J5LlxuICogXG4gKiBAcGFyYW0gc2NyaXB0IHtzdHJpbmcgfCBvYmplY3R9IFRoZSBzY3JpcHQgdG8gaW1wb3J0XG4gKiBAcGFyYW0gY29udGV4dCBUaGUgRm9yZ2VPcHRpb25zQ29udGV4dFxuICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNjcmlwdChzY3JpcHQ6IHN0cmluZyB8IElGb3JnZVNjcmlwdCwgc2NvcGU6IEZpbGVTZWFyY2hTY29wZSk6IFByb21pc2U8SUZvcmdlU2NyaXB0PiB7XG4gICBpZiAodHlwZW9mIHNjcmlwdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUoc2NyaXB0KSkge1xuICAgICAgICAgcmV0dXJuIGF3YWl0IGltcG9ydChzY3JpcHQpXG4gICAgICB9XG5cbiAgICAgIGxldCBmb3VuZCA9IGF3YWl0IHNjb3BlLmZpbmQoc2NyaXB0KVxuXG4gICAgICBpZiAoZm91bmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBzY3JpcHQgJHtzY3JpcHR9LiBFbnN1cmUgdGhlIGNvcnJlY3QgcmVzb2x2ZXMgZXhpc3Qgb3IgdGhhdCB0aGUgc2NyaXB0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIHRoZSBkZXNpcmVkIGxvY2F0aW9uLmApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBpbXBvcnQoZm91bmQpXG4gICB9IGVsc2UgaWYgKHR5cGVvZiBzY3JpcHQgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gc2NyaXB0IGFzIElGb3JnZVNjcmlwdFxuICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRW1wdHlGb3JnZVNjcmlwdCgpXG4gICB9XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXG4gKiBJbXBvcnRzIHRoZSBQaXBlbGluZSBTdGVwc1xuXG4gKiBAcGFyYW0gdHJhbnNmb3JtTmFtZSBUUmFuc2Zvcm0gbmFtZVxuICogQHBhcmFtIHN0ZXBzIExpc3Qgb2YgcGxhaW4gb2JqZWN0IFN0ZXBzXG4gKiBAcGFyYW0gdHJhbnNmb3JtQ29uZmlnIFRoZSB0cmFuc2Zvcm0gY29uZmlnIHRoYXQgd2FzIGdlbmVyYXRlZCBieSBcbiAqICAgIHJ1bm5pbmcgdGhlIGluaXQoKSB0cmFuc2Zvcm0gc2NyaXB0XG4gKiBAcGFyYW0gcGx1Z2luTWFwIE1hcCBvZiBwbHVnaW5zIGJ5IG5hbWUgKGdsb2JhbCArIGxvY2FsKVxuICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBpcGVsaW5lU3RlcHModHJhbnNmb3JtTmFtZTogc3RyaW5nLCBzdGVwczogU3RlcEVudHJ5W10sIHRyYW5zZm9ybUNvbmZpZzogR2VuZXJpY09iamVjdCwgcGx1Z2luTWFwOiBNYXA8c3RyaW5nLCBJUGx1Z2luPik6IFByb21pc2U8SVN0ZXBbXT4ge1xuICAgbGV0IHJlc3VsdHMgPSBuZXcgQXJyYXk8SVN0ZXA+KClcblxuICAgZm9yIChsZXQgc3RlcCBvZiBzdGVwcykge1xuICAgICAgbGV0IGltcG9ydGVkU3RlcDogU3RlcEluZm8gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuICAgICAgaWYgKHR5cGVvZiBzdGVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICBpbXBvcnRlZFN0ZXAgPSBhd2FpdCBzYWZlbHlSdW48U3RlcEluZm8+KHN0ZXAsIHsgY29uZmlnOiB0cmFuc2Zvcm1Db25maWcgfSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0ZXAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICBpbXBvcnRlZFN0ZXAgPSBzdGVwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIFRyYW5zZm9ybSBzdGVwIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QuIEVuY291dG5lcmVkIGEgJHt0eXBlb2Ygc3RlcH0gaW5zdGVhZCBpbiB0cmFuc2Zvcm0gJHt0cmFuc2Zvcm1OYW1lfWApXG4gICAgICB9XG5cbiAgICAgIGlmIChpbXBvcnRlZFN0ZXAgPT0gbnVsbCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gaW1wb3J0IGEgc3RlcCBpbiB0aGUgdHJhbnNmb3JtICR7dHJhbnNmb3JtTmFtZX1gKVxuICAgICAgfVxuXG4gICAgICBTdGVwLnZhbGlkYXRlKGltcG9ydGVkU3RlcClcblxuICAgICAgbGV0IHBsdWdpbiA9IHBsdWdpbk1hcC5nZXQoaW1wb3J0ZWRTdGVwLnBsdWdpbilcblxuICAgICAgaWYgKHBsdWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHBsdWdpbiAke2ltcG9ydGVkU3RlcC5wbHVnaW59IGluIFN0ZXAgJHtpbXBvcnRlZFN0ZXAuYWxpYXN9YClcbiAgICAgIH1cblxuICAgICAgcmVzdWx0cy5wdXNoKG5ldyBTdGVwKGltcG9ydGVkU3RlcCwgcGx1Z2luLCBpbXBvcnRlZFN0ZXAudXNlIHx8IG5ldyBBcnJheTxTdHJpbmc+KCkpKVxuICAgfVxuXG4gICByZXR1cm4gcmVzdWx0c1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXNvbHZlKFxuICAgcmVzb2x2ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBSZXNvbHZlUGF0aHNGbiB8IHVuZGVmaW5lZCxcbiAgIG9wdGlvbnM6IEZvcmdlT3B0aW9ucyk6IFByb21pc2U8RmlsZVNlYXJjaFNjb3BlPiB7XG4gICBsZXQgcmVzb2x2ZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpXG5cbiAgIGlmIChyZXNvbHZlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgRmlsZVNlYXJjaFNjb3BlKHJlc29sdmVzKVxuICAgfVxuXG4gICBsZXQgYWJzb2x1dGUgPSAocDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBwYXRoLmlzQWJzb2x1dGUocCkgPyBwIDogcGF0aC5qb2luKG9wdGlvbnMuY3dkLCBwKVxuICAgfVxuXG4gICBpZiAodHlwZW9mIHJlc29sdmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXNvbHZlcyA9IFsoYWJzb2x1dGUocmVzb2x2ZSkpXVxuICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzb2x2ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsZXQgcGF0aHMgPSBhd2FpdCByZXNvbHZlKClcbiAgICAgIGZvciBhd2FpdCAobGV0IHAgb2YgcGF0aHMpIHtcbiAgICAgICAgIHJlc29sdmVzLnB1c2goYWJzb2x1dGUocCkpXG4gICAgICB9XG4gICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzb2x2ZSkpIHtcbiAgICAgIHJlc29sdmVzID0gcmVzb2x2ZS5tYXAocCA9PiBhYnNvbHV0ZShwKSlcbiAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHJlc29sdmUgZm9ybWF0IGVuY291bnRlcmVkLiAncmVzb2x2ZScgbXVzdCBiZSBhIHN0cmluZywgc3RyaW5nW10sIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm1ucyBhIHN0cmluZ1tdYClcbiAgIH1cblxuICAgcmV0dXJuIG5ldyBGaWxlU2VhcmNoU2NvcGUocmVzb2x2ZXMpXG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXG4gKiBJbXBvcnRzIHRoZSBpbXBvcnRzIHNlY3Rpb24gb2YgYSBUcmFuc2Zvcm1cbiAqXG4gKiBAcGFyYW0gdHJhbnNmb3JtTmFtZSBUaGUgbmFtZSBvZiB0aGUgaW1wb3J0aW5nIHRyYW5zZm9ybVxuICogQHBhcmFtIGltcG9ydHMgVGhlIGltcG9ydHMgb2JqZWN0XG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLy8gZnVuY3Rpb24gaW1wb3J0VHJhbnNmb3JtSW1wb3J0cyh0cmFuc2Zvcm1OYW1lOiBzdHJpbmcsIGltcG9ydHM6IGFueSwgZ2xvYmFsUGx1Z2luTWFwOiBNYXA8c3RyaW5nLCBJUGx1Z2luPik6IEFycmF5PElJbXBvcnRQYXJhbXM+IHtcbi8vICAgIGxldCByZXN1bHRzID0gbmV3IEFycmF5PElJbXBvcnRQYXJhbXM+KClcblxuLy8gICAgLypcbi8vICAgICAgIFJlcXVpcmVkIHBhcmFtZXRlcnM6XG4vLyAgICAgICAgICAtIGFsaWFzIHtzdHJpbmd9IFRoZSBhbGlhcyBvZiB0aGlzIGltcG9ydCBwYXJhbWV0ZXJzXG4vLyAgICAgICAgICAtIHBsdWdpbiB7c3RyaW5nIHwgSVBsdWdpbn06IFRoZSBwbHVnaW4gdXNlZCBmb3IgaW1wb3J0aW5nIFxuLy8gICAgKi9cbi8vICAgIGxldCBpbXBvcnRFbnRyeSA9IGltID0+IHtcbi8vICAgICAgIGxldCByZXN1bHQgPSB7Li4uaW19XG5cbi8vICAgICAgIGlmKCFpc0RlZmluZWQoaW0uYWxpYXMpKSB7XG4vLyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vICdhbGlhcycgZGVmaW5lZCBmb3IgaW1wb3J0IGluIHRyYW5zZm9ybSAke3RyYW5zZm9ybU5hbWV9YClcbi8vICAgICAgIH1cblxuLy8gICAgICAgaWYoIWlzRGVmaW5lZChpbS5wbHVnaW4pKSB7XG4vLyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vICdwbHVnaW4nIGRlZmluZWQgZm9yIGltcG9ydCBpbiB0cmFuc2Zvcm0gJHt0cmFuc2Zvcm1OYW1lfWApXG4vLyAgICAgICB9XG5cbi8vICAgICAgIGlmKHR5cGVvZiBpbS5wbHVnaW4gPT09ICdzdHJpbmcnKSB7XG4vLyAgICAgICAgICAvLyBMb29rdXAgdGhlIHJlZmVyZW5jZWQgcGx1Z2luXG4vLyAgICAgICAgICBsZXQgZm91bmQgPSBnbG9iYWxQbHVnaW5NYXAuZ2V0KGltLnBsdWdpbilcblxuLy8gICAgICAgICAgaWYoIWlzRGVmaW5lZChmb3VuZCkpIHtcbi8vICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgJ3BsdWdpbicgJHtpbS5wbHVnaW59IHJlZmVyZW5jZWQgaW4gdGhlIGltcG9ydCBzZWN0aW9uIGluIHRyYW5zZm9ybSAke3RyYW5zZm9ybU5hbWV9YClcbi8vICAgICAgICAgIH1cblxuLy8gICAgICAgICAgcmVzdWx0LnBsdWdpbiA9IGZvdW5kXG4vLyAgICAgICB9IGVsc2UgaWYgKGlzUGx1Z2luKGltLnBsdWdpbikpIHtcbi8vICAgICAgICAgIHJlc3VsdC5wbHVnaW4gPSBpbS5wbHVnaW5cbi8vICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGZvcm1hdCBmb3IgdGhlICdwbHVnaW4nIHJlZmVyZW5jZWQgaW4gdGhlIGltcG9ydCBpbiB0cmFuc2Zvcm0gJHt0cmFuc2Zvcm1OYW1lfWApXG4vLyAgICAgICB9XG5cbi8vICAgICAgIHJldHVybiByZXN1bHQgYXMgSUltcG9ydFBhcmFtc1xuLy8gICAgfVxuXG4vLyAgICBpZihpc0RlZmluZWQoaW1wb3J0cykpIHtcbi8vICAgICAgIGlmKEFycmF5LmlzQXJyYXkoaW1wb3J0cykpIHtcbi8vICAgICAgICAgIHJlc3VsdHMgPSBpbXBvcnRzLm1hcChpdCA9PiBpbXBvcnRFbnRyeShpdCkpXG4vLyAgICAgICB9IGVsc2UgaWYodHlwZW9mIGltcG9ydHMgPT09ICdvYmplY3QnKSB7XG4vLyAgICAgICAgICByZXN1bHRzLnB1c2goaW1wb3J0RW50cnkoaW1wb3J0cykpXG4vLyAgICAgICB9IGVsc2Uge1xuLy8gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBmb3JtYXQgZW5jb3VudGVyZWQgd2hlbiBpbXBvcnRpbmcgdGhlIGltcG9ydHMgc2VjdGlvbiBmb3IgdHJhbnNmb3JtICR7bmFtZX1gKVxuLy8gICAgICAgfVxuLy8gICAgfVxuXG4vLyAgICByZXR1cm4gcmVzdWx0c1xuLy8gfVxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcbiAqIEltcG9ydHMgdGhlIGV4cG9ydCBwb3J0aW9uIG9mIGEgdHJhbnNmb3JtXG4gKlxuICogQHBhcmFtIHRyYW5zZm9ybU5hbWUgVGhlIHRyYW5zZm9ybSBuYW1lXG4gKiBAcGFyYW0gZXhwb3J0cyBMaXN0IG9mIGV4cG9ydCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gZ2xvYmFsUGx1Z2luTWFwIEdsb2JhbCBtYXAgb2YgYWxpYXMtdG8tcGx1Z2luIGVudHJpZXNcbiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vLyBmdW5jdGlvbiBpbXBvcnRUcmFuc2Zvcm1FeHBvcnRzKFxuLy8gICAgdHJhbnNmb3JtTmFtZTogc3RyaW5nLFxuLy8gICAgZXhwb3J0czogYW55LFxuLy8gICAgZ2xvYmFsUGx1Z2luTWFwOiBNYXA8c3RyaW5nLCBJUGx1Z2luPik6IEFycmF5PElFeHBvcnRQYXJhbXM+IHtcblxuLy8gICAgbGV0IHJlc3VsdHMgPSBuZXcgQXJyYXk8SUV4cG9ydFBhcmFtcz4oKVxuXG4vLyAgICBpZighaXNEZWZpbmVkKGV4cG9ydHMpKSB7XG4vLyAgICAgICByZXR1cm4gbmV3IEFycmF5PElFeHBvcnRQYXJhbXM+KCkgICBcbi8vICAgIH1cblxuLy8gICAgLypcbi8vICAgICAgIFJlcXVpcmVkIHBhcmFtZXRlcnM6XG4vLyAgICAgICAgICAtIGFsaWFzIHtzdHJpbmd9IFRoZSBhbGlhcyBvZiB0aGlzIGV4cG9yIHBhcmFtZXRlcnNcbi8vICAgICAgICAgIC0gcGx1Z2luIHtzdHJpbmcgfCBJUGx1Z2lufTogVGhlIHBsdWdpbiB1c2VkIGZvciBleHBvcnRpbmdcblxuLy8gICAgICAgT3B0aW9uYWw6XG4vLyAgICAgICAgICAtIHVzZSB7c3RyaW5nIHwgQXJyYXk8YXRyaW5nPn06IFJlZmVyZW5jZXMgdG8gdGhlIGltcG9ydGVkIEVudm95IGFsaWFzZXNcbi8vICAgICovXG4vLyAgICBsZXQgaW1wb3J0RW50cnkgPSBleCA9PiB7XG4vLyAgICAgICBsZXQgcmVzdWx0ID0geyAuLi5leCB9XG5cbi8vICAgICAgIGlmKCFpc0RlZmluZWQoZXguYWxpYXMpKSB7XG4vLyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vICdhbGlhcycgZGVmaW5lZCBmb3IgdGhlIGV4cG9ydCBpbiB0cmFuc2Zvcm0gJHt0cmFuc2Zvcm1OYW1lfWApXG4vLyAgICAgICB9XG5cbi8vICAgICAgIGlmKCFpc0RlZmluZWQoZXgucGx1Z2luKSkge1xuLy8gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyAncGx1Z2luJyBkZWZpbmVkIGZvciB0aGUgZXhwb3J0IGluIHRyYW5zZm9ybSAke3RyYW5zZm9ybU5hbWV9YClcbi8vICAgICAgIH1cblxuLy8gICAgICAgaWYodHlwZW9mIGV4LnBsdWdpbiA9PT0gJ3N0cmluZycpIHtcbi8vICAgICAgICAgIC8vIExvb2t1cCB0aGUgcmVmZXJlbmNlZCBwbHVnaW5cbi8vICAgICAgICAgIGxldCBmb3VuZCA9IGdsb2JhbFBsdWdpbk1hcC5nZXQoZXgucGx1Z2luKVxuXG4vLyAgICAgICAgICBpZighaXNEZWZpbmVkKGZvdW5kKSkge1xuLy8gICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCAncGx1Z2luJyAke2V4LnBsdWdpbn0gcmVmZXJlbmNlZCBpbiB0aGUgZXhwb3J0IHNlY3Rpb24gaW4gdHJhbnNmb3JtICR7dHJhbnNmb3JtTmFtZX1gKVxuLy8gICAgICAgICAgfVxuXG4vLyAgICAgICAgICByZXN1bHQucGx1Z2luID0gZm91bmRcbi8vICAgICAgIH0gZWxzZSBpZiAoaXNQbHVnaW4oZXgucGx1Z2luKSkge1xuLy8gICAgICAgICAgcmVzdWx0LnBsdWdpbiA9IGV4LnBsdWdpblxuLy8gICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZm9ybWF0IGZvciB0aGUgJ3BsdWdpbicgcmVmZXJlbmNlZCBpbiB0aGUgaW1wb3J0IGluIHRyYW5zZm9ybSAke3RyYW5zZm9ybU5hbWV9YClcbi8vICAgICAgIH1cblxuLy8gICAgICAgbGV0IHVzZSA9IG5ldyBBcnJheTx7IGFsaWFzOiBzdHJpbmcsIGVudm95OiBJRW52b3kgfT4oKVxuXG4vLyAgICAgICBpZihleC51c2UpIHtcbi8vICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGV4LnVzZSkgJiYgdHlwZW9mIGV4LnVzZSAhPT0gJ3N0cmluZycpIHtcbi8vICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgJ3VzZScgb3B0aW9uIHR5cGUgcmVmZXJlbmNlZCBpbiB0aGUgZXhwb3J0IHNlY3Rpb24gb2YgdHJhbnNmb3JtICR7dHJhbnNmb3JtTmFtZX0uIEl0IG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gQXJyYXk8c3RyaW5nPi5gKVxuLy8gICAgICAgICAgfVxuXG4vLyAgICAgICAgICBpZih0eXBlb2YgZXgudXNlID09PSAnc3RyaW5nJykge1xuLy8gICAgICAgICAgICAgdXNlLnB1c2goeyBhbGlhczogZXgudXNlLCBlbnZveTogbnVsbCB9KVxuLy8gICAgICAgICAgfSBlbHNlIGlmKEFycmF5LmlzQXJyYXkoZXgudXNlKSkge1xuLy8gICAgICAgICAgICAgZm9yKGxldCBhbGlhcyBvZiBleC51c2UpIHtcbi8vICAgICAgICAgICAgICAgIHVzZS5wdXNoKHsgYWxpYXMsIGVudm95OiBudWxsIH0pXG4vLyAgICAgICAgICAgICB9XG4vLyAgICAgICAgICB9IGVsc2Uge1xuLy8gICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZvcm1hdCBlbmNvdW50ZXJlZCBmb3IgdGhlIGV4cG9ydCAndXNlJyBvcHRpb24gaW4gdHJhbnNmb3JtICR7dHJhbnNmb3JtTmFtZX0uIEl0IG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gQXJyYXk8c3RyaW5nPi5gKVxuLy8gICAgICAgICAgfVxuLy8gICAgICAgfVxuXG4vLyAgICAgICByZXN1bHQudXNlID0gdXNlXG5cbi8vICAgICAgIHJldHVybiByZXN1bHQgYXMgSUV4cG9ydFBhcmFtc1xuLy8gICAgfVxuXG4vLyAgICBpZihBcnJheS5pc0FycmF5KGV4cG9ydHMpKSB7XG4vLyAgICAgICBmb3IobGV0IGV4cCBvZiBleHBvcnRzKSB7XG4vLyAgICAgICAgICByZXN1bHRzLnB1c2goaW1wb3J0RW50cnkoZXhwKSlcbi8vICAgICAgIH1cbi8vICAgIH0gZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbi8vICAgICAgIHJlc3VsdHMucHVzaChpbXBvcnRFbnRyeShleHBvcnRzKSlcbi8vICAgIH0gZWxzZSB7XG4vLyAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZm9ybWF0IGZvciB0aGUgZXhwb3J0cyB2YWx1ZSBpbiB0cmFuc2Zvcm0gJHt0cmFuc2Zvcm1OYW1lfS4gSXQgbmVlZHMgdG86IG5vdCBleGlzdCwgYmUgYW4gb2JqZWN0IG9yIGFuIEFycmF5YClcbi8vICAgIH1cblxuLy8gICAgcmV0dXJuIHJlc3VsdHNcbi8vIH1cblxuLy8gLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcbi8vICAqIFNlYXJjaGVzIGZvciBhIHBsdWdpbiBmcm9tIHRoZSBzY29wZSBvZiBhIFRyYW5zZm9ybVxuLy8gICogXG4vLyAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRvIGZpbmRcbi8vICAqIEBwYXJhbSB0cmFuc2Zvcm0gVGhlIHRyYW5zZm9ybVxuLy8gICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8vIGZ1bmN0aW9uIGZpbmRQbHVnaW4obmFtZTogc3RyaW5nLCB0cmFuc2Zvcm06IEZvcmdlVHJhbnNmb3JtKTogSVBsdWdpbiB7XG4vLyAgICBsZXQgZm91bmQgPSB0cmFuc2Zvcm0uZmluZFBsdWdpbihuYW1lKVxuXG4vLyAgICBpZihmb3VuZCkge1xuLy8gICAgICAgcmV0dXJuIGZvdW5kXG4vLyAgICB9XG5cbi8vICAgIGxldCBnbG9iYWxGb3VuZCA9IHRoaXMucGx1Z2lucy5maW5kKHBsdWdpbiA9PiBwbHVnaW4ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpXG4vLyAgICByZXR1cm4gZ2xvYmFsRm91bmQgPyBnbG9iYWxGb3VuZC5wbHVnaW4gOiB1bmRlZmluZWRcbi8vIH1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9yZ2VPcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvRm9yZ2VPcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QixxREFBOEU7QUFDOUUsNENBQXdEO0FBQ3hELDBDQUFxRDtBQUNyRCxxREFBbUQ7QUFDbkQsK0NBQTJDO0FBQzNDLGlDQUE4QztBQUM5QyxtREFBOEQ7QUFDOUQsdURBQW1EO0FBQ25ELHNFQUE2RDtBQWdDN0QsTUFBYSxZQUFZO0lBSXRCLFlBQVksTUFBTSxHQUFHLElBQUksc0JBQWEsRUFBRSxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQzFELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pCLENBQUM7Q0FDSDtBQVJELG9DQVFDO0FBRUQ7OzswRUFHMEU7QUFDMUUsTUFBYSxXQUFXO0lBTXJCO1FBQ0csSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGlDQUFlLEVBQUUsQ0FBQTtRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksaUNBQWdCLEVBQUUsQ0FBQTtRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksS0FBSyxFQUFlLENBQUE7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBVyxFQUFFLE9BQXFCO1FBQ3RELE9BQU8sTUFBTSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzFDLENBQUM7Q0FDSDtBQWhCRCxrQ0FnQkM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBFQW9DMEU7QUFDbkUsS0FBSyxV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QUFDdEUsd0tBQXdLO0FBQ3hLLGFBQWE7QUFFYiw0Q0FBNEM7QUFDNUMsdURBQXVEO0FBQ3ZELDhDQUE4QztBQUM5Qyx5Q0FBeUM7QUFDekMsa0RBQWtEO0FBQ2xELGdCQUFnQjtBQUNoQixvQkFBb0I7QUFDcEIsZ0tBQWdLO0FBQ2hLLGFBQWE7QUFDYixVQUFVO0FBRVYseUJBQXlCO0FBRXpCLHVDQUF1QztBQUN2QyxPQUFPO0FBRVAsa0NBQWtDO0FBQ2xDLGtDQUFrQztBQUNsQywwQ0FBMEM7QUFDMUMsVUFBVTtBQUNWLDhDQUE4QztBQUM5QywyQ0FBMkM7QUFDM0MsY0FBYztBQUNkLG1KQUFtSjtBQUNuSixPQUFPO0FBRVAsb0JBQW9CO0FBQ3BCLElBQUk7QUFFSiw2RUFBNkU7QUFDN0UseURBQXlEO0FBQ3pELE1BQU07QUFDTixnREFBZ0Q7QUFDaEQsb0NBQW9DO0FBQ3BDLDZFQUE2RTtBQUM3RSwwRUFBMEU7QUFDMUUsNENBQTRDO0FBRTVDLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckIsT0FBTztBQUVQLHFHQUFxRztBQUNyRyx5REFBeUQ7QUFDekQsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmltcG9ydCB7IElQbHVnaW4gfSBmcm9tICcuLi9wbHVnaW5zL0lQbHVnaW4nXG5pbXBvcnQgeyBGb3JnZVBpcGVsaW5lLCBJRm9yZ2VQaXBlbGluZSwgSUZvcmdlU2NyaXB0IH0gZnJvbSAnLi9Gb3JnZVRyYW5zZm9ybSdcbmltcG9ydCB7IENvbnNvbGVMb2dnZXIsIElMb2dnZXIgfSBmcm9tICcuLi91dGlscy9Mb2dnZXInXG5pbXBvcnQgeyBpc0RlZmluZWQsIHNhZmVseVJ1biB9IGZyb20gJy4uL3V0aWxzL1V0aWxzJ1xuaW1wb3J0IHsgRW1wdHlGb3JnZVNjcmlwdCB9IGZyb20gJy4vRm9yZ2VUcmFuc2Zvcm0nXG5pbXBvcnQgeyBOYW1lZFBsdWdpbiB9IGZyb20gJy4vTmFtZWRQbHVnaW4nXG5pbXBvcnQgeyBJU3RlcCwgU3RlcCwgU3RlcEluZm8gfSBmcm9tICcuL1N0ZXAnXG5pbXBvcnQgeyBDb25maWdCdWlsZGVyLCBHZW5lcmljT2JqZWN0IH0gZnJvbSAnLi9Db25maWdCdWlsZGVyJ1xuaW1wb3J0IHsgRmlsZVNlYXJjaFNjb3BlIH0gZnJvbSAnLi9GaWxlU2VhcmNoU2NvcGUnXG5pbXBvcnQgeyBHbG9iYWxQbHVnaW5zIH0gZnJvbSAnLi4vcGx1Z2lucy9Gb3JnZUdsb2JhbFBsdWdpbnMnXG5cbmV4cG9ydCB0eXBlIEJ1aWx0Q29uZmlnID0ge1xuICAgW2tleTogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCB0eXBlIFN0ZXBCdWlsZFBhcmFtcyA9IHtcbiAgIGNvbmZpZzogQnVpbHRDb25maWdcbn1cblxuZXhwb3J0IHR5cGUgQnVpbGRTdGVwRm4gPSAocGFyYW1zOiBTdGVwQnVpbGRQYXJhbXMpID0+IFByb21pc2U8U3RlcEluZm8+XG5cbnR5cGUgUmVzb2x2ZUVudHJ5ID0gc3RyaW5nIHwgc3RyaW5nW11cblxudHlwZSBQbHVnaW5FbnRyeSA9IHtcbiAgIG5hbWU6IHN0cmluZ1xuICAgcGx1Z2luOiBJUGx1Z2luXG59XG5cbnR5cGUgU2NyaXB0RW50cnkgPSBzdHJpbmcgfCBJRm9yZ2VTY3JpcHRcblxudHlwZSBTdGVwRW50cnkgPSBTdGVwSW5mbyB8IEJ1aWxkU3RlcEZuXG5cbnR5cGUgUGlwZWxpbmVFbnRyeSA9IHtcbiAgIHBsdWdpbnM6IFBsdWdpbkVudHJ5IHwgUGx1Z2luRW50cnlbXVxuICAgcmVzb2x2ZTogUmVzb2x2ZUVudHJ5XG4gICBzY3JpcHQ6IFNjcmlwdEVudHJ5XG4gICBzdGVwczogU3RlcEVudHJ5W11cbn1cblxuZXhwb3J0IHR5cGUgUmVzb2x2ZVBhdGhzRm4gPSAoKSA9PiBQcm9taXNlPHN0cmluZ1tdPlxuXG5leHBvcnQgY2xhc3MgRm9yZ2VPcHRpb25zIHtcbiAgIGN3ZD86IHN0cmluZ1xuICAgbG9nZ2VyPzogSUxvZ2dlclxuXG4gICBjb25zdHJ1Y3Rvcihsb2dnZXIgPSBuZXcgQ29uc29sZUxvZ2dlcigpLCBjd2QgPSBwcm9jZXNzLmN3ZCgpKSB7XG4gICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlclxuICAgICAgdGhpcy5jd2QgPSBjd2RcbiAgIH1cbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcbiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNlcmllcyBvZiBwaXBlbGluZXMgdG9cbiAqIGJlIHJ1biBieSB0aGUgRm9yZ0J1aWxkZXIuXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGNsYXNzIEZvcmdlQ29uZmlnIHtcbiAgIHJlc29sdmU6IEZpbGVTZWFyY2hTY29wZVxuICAgc2NyaXB0OiBJRm9yZ2VTY3JpcHRcbiAgIHBsdWdpbnM6IEFycmF5PE5hbWVkUGx1Z2luPlxuICAgcGlwZWxpbmVzOiBBcnJheTxJRm9yZ2VQaXBlbGluZT5cblxuICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLnJlc29sdmUgPSBuZXcgRmlsZVNlYXJjaFNjb3BlKClcbiAgICAgIHRoaXMuc2NyaXB0ID0gbmV3IEVtcHR5Rm9yZ2VTY3JpcHQoKVxuICAgICAgdGhpcy5wbHVnaW5zID0gbmV3IEFycmF5PE5hbWVkUGx1Z2luPigpXG4gICAgICB0aGlzLnBpcGVsaW5lcyA9IG5ldyBBcnJheTxJRm9yZ2VQaXBlbGluZT4oKVxuICAgfVxuXG4gICBzdGF0aWMgYXN5bmMgbm9ybWFsaXplKGNvbmZpZzogYW55LCBvcHRpb25zOiBGb3JnZU9wdGlvbnMpOiBQcm9taXNlPEZvcmdlQ29uZmlnPiB7XG4gICAgICByZXR1cm4gYXdhaXQgbm9ybWFsaXplKGNvbmZpZywgb3B0aW9ucylcbiAgIH1cbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3JtYWxpemUgdGhlIHNldCBvZiBvcHRpb25zXG4gKiBwcm92aWRlZCBieSB0aGUgZGV2ZWxvcGVyLlxuICogXG4gKiBFeGFtcGxlIGZvcm1hdDpcbiAqICAgIHtcbiAqICAgICAgIHBsdWdpbnM6IFtcbiAqICAgICAgICAgIHsgbmFtZTogJ3N3aWcnLCBuZXcgU3dpZ1BsdWdpbigpIH0sXG4gKiAgICAgICAgICB7IG5hbWU6ICd4bWwnLCBuZXcgWG1sUGx1Z2luKCkgfVxuICogICAgICAgXSxcbiAqICAgICAgIHBpcGVsaW5lczoge1xuICogICAgICAgICAgc29tZW5hbWU6IHtcbiAqICAgICAgICAgICAgIHN0ZXBzOiBbXG4gKiAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICBhbGlhczogJ3htbCcsXG4gKiAgICAgICAgICAgICAgICAgICBwbHVnaW46ICd4bWwnLFxuICogICAgICAgICAgICAgICAgICAgc291cmNlOiAnaHR0cHM6Ly9zb21lLXVybC9maWxlLnhtbCdcbiAqICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICBhbGlhczogJ3NjcmlwdCcsXG4gKiAgICAgICAgICAgICAgICAgICBwbHVnaW46ICdzY3JpcHQnLFxuICogICAgICAgICAgICAgICAgICAgdXNlOiAneG1sJyxcbiAqICAgICAgICAgICAgICAgICAgIHNjcmlwdDogJ3NvbWUvcmVsYXRpdmUvcGF0aC5qcycsXG4gKiAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgYWxpYXM6ICd3cml0ZScsXG4gKiAgICAgICAgICAgICAgICAgICBwbHVnaW46ICdzd2lnJyxcbiAqICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiAncmVsYXRpdmUvcGF0aC90by9maWxlLnRlbXBsYXRlJ1xuICogICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgXVxuICogICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgfVxuICogXG4gKiBcbiAqIEBwYXJhbSBjb25maWcgVGhlIGV4dGVybmFsIGNvbmZpZyBvYmplY3QuXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5vcm1hbGl6ZShjb25maWc6IGFueSwgb3B0aW9uczogRm9yZ2VPcHRpb25zKTogUHJvbWlzZTxGb3JnZUNvbmZpZz4ge1xuICAgbGV0IGZvcmdlQ29uZmlnID0gbmV3IEZvcmdlQ29uZmlnKClcblxuICAgaWYgKGNvbmZpZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yZ2VDb25maWdcbiAgIH1cblxuICAgbGV0IGVycm9yID0gKG1zZzogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKGBDb25maWcgUGFyc2VyOiAke21zZ31gKVxuICAgfVxuXG4gICBpZiAoIWlzRGVmaW5lZChvcHRpb25zLmN3ZCkpIHtcbiAgICAgIG9wdGlvbnMuY3dkID0gcHJvY2Vzcy5jd2QoKVxuICAgfVxuXG4gICAvLy0tIFNhbml0aXplXG4gICBpZiAoY29uZmlnLnBsdWdpbnMpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcucGx1Z2lucykpIHtcbiAgICAgICAgIHRocm93IGVycm9yKCdwbHVnaW5zIGV4aXN0cywgYnV0IGlzIG5vdCBhbiBBcnJheScpXG4gICAgICB9XG4gICB9XG5cbiAgIGlmIChjb25maWcucGlwZWxpbmVzKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZy5waXBlbGluZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICB0aHJvdyBlcnJvcigncGlwZWxpbmVzIGV4aXN0cywgYnV0IG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICAgIH1cbiAgIH1cblxuICAgaWYoY29uZmlnLnN0ZXBzICYmIGNvbmZpZy5waXBlbGluZXMgPT0gbnVsbCkge1xuICAgICAgY29uZmlnLnBpcGVsaW5lcyA9IHtcbiAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHN0ZXBzOiBjb25maWcuc3RlcHNcbiAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGNvbmZpZy5zdGVwc1xuICAgfVxuXG4gICAvLy0tIE5vcm1hbGl6ZVxuICAgbGV0IGdsb2JhbFNlYXJjaFNjb3BlID0gYXdhaXQgaW1wb3J0UmVzb2x2ZShjb25maWcucmVzb2x2ZSwgb3B0aW9ucylcbiAgIGZvcmdlQ29uZmlnLnJlc29sdmUgPSBnbG9iYWxTZWFyY2hTY29wZVxuICAgZm9yZ2VDb25maWcucmVzb2x2ZS5hZGQob3B0aW9ucy5jd2QpXG5cbiAgIGZvcmdlQ29uZmlnLnNjcmlwdCA9IGF3YWl0IGltcG9ydFNjcmlwdChjb25maWcuc2NyaXB0LCBnbG9iYWxTZWFyY2hTY29wZSlcblxuICAgbGV0IGNvbmZpZ0J1aWxkZXIgPSBuZXcgQ29uZmlnQnVpbGRlcigpXG4gICBsZXQgZ2xvYmFsQ29uZmlnID0gYXdhaXQgc2FmZWx5UnVuPEdlbmVyaWNPYmplY3Q+KGZvcmdlQ29uZmlnLnNjcmlwdC5pbml0LCBjb25maWdCdWlsZGVyKVxuICAgZ2xvYmFsQ29uZmlnID0gZ2xvYmFsQ29uZmlnIHx8IHt9XG5cbiAgIGxldCBnbG9iYWxQbHVnaW5NYXAgPSBuZXcgTWFwPHN0cmluZywgSVBsdWdpbj4oKVxuXG4gICAvLyBBZGQgdGhlIEZvcmdlIEludGVybmFsIFBsdWdpbnNcbiAgIEdsb2JhbFBsdWdpbnMucGx1Z2lucy5mb3JFYWNoKHBsID0+IGdsb2JhbFBsdWdpbk1hcC5zZXQocGwubmFtZSwgcGwucGx1Z2luKSlcblxuICAgZm9yZ2VDb25maWcucGx1Z2lucyA9IGF3YWl0IGltcG9ydFBsdWdpbnMoY29uZmlnLnBsdWdpbnMsIGdsb2JhbENvbmZpZylcblxuICAgZm9yZ2VDb25maWcucGx1Z2lucy5mb3JFYWNoKHBsID0+IGdsb2JhbFBsdWdpbk1hcC5zZXQocGwubmFtZSwgcGwucGx1Z2luKSlcblxuICAgZm9yIChsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyhjb25maWcucGlwZWxpbmVzKSkge1xuICAgICAgbGV0IHRyYW5zZm9ybTogRm9yZ2VQaXBlbGluZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG4gICAgICB0cmFuc2Zvcm0gPSBhd2FpdCBpbXBvcnRQaXBlbGluZShcbiAgICAgICAgIG5hbWUsXG4gICAgICAgICBjb25maWcucGlwZWxpbmVzW25hbWVdLFxuICAgICAgICAgZ2xvYmFsQ29uZmlnLFxuICAgICAgICAgZ2xvYmFsU2VhcmNoU2NvcGUsXG4gICAgICAgICBnbG9iYWxQbHVnaW5NYXAsXG4gICAgICAgICBvcHRpb25zXG4gICAgICApXG5cbiAgICAgIGZvcmdlQ29uZmlnLnBpcGVsaW5lcy5wdXNoKHRyYW5zZm9ybSlcbiAgIH1cblxuICAgcmV0dXJuIGZvcmdlQ29uZmlnXG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXG4gKiBJbXBvcnRzIGEgbm9uLXNhbml0aXplZCBwaXBlbGluZSBmcm9tIGNvbmZpZ1xuICogXG4gKiBFeGFtcGxlIGZvcm1hdDpcbiAqICAgIHtcbiAqICAgICAgIHJlc29sdmU6ICcnLFxuICogICAgICAgc2NyaXB0OiAncGF0aC9yby5zY3JpcHQuanMnLFxuICogICAgICAgcGx1Z2luczogW1xuICogICAgICAgICAgeyBuYW1lOiAncGx1Z2luLW5hbWUnLCBwbHVnaW46IElQbHVnaW4gfVxuICogICAgICAgXSxcbiAqICAgICAgIHN0ZXBzOiBbXG4gKiAgICAgICAgICB7XG4gKiAgICAgICAgICAgICBhbGlhczogJ3htbCcsXG4gKiAgICAgICAgICAgICBwbHVnaW46ICd4bWwnLFxuICogICAgICAgICAgICAgc291cmNlOiAnaHR0cHM6Ly9zb21lLXVybC9maWxlLnhtbCdcbiAqICAgICAgICAgIH0sXG4gKiAgICAgICAgICB7XG4gKiAgICAgICAgICAgICBhbGlhczogJ3NjcmlwdCcsXG4gKiAgICAgICAgICAgICBwbHVnaW46ICdzY3JpcHQnLFxuICogICAgICAgICAgICAgdXNlOiAneG1sJyxcbiAqICAgICAgICAgICAgIHNjcmlwdDogJ3NvbWUvcmVsYXRpdmUvcGF0aC5qcycsXG4gKiAgICAgICAgICB9LFxuICogICAgICAgICAge1xuICogICAgICAgICAgICAgYWxpYXM6ICd3cml0ZScsXG4gKiAgICAgICAgICAgICBwbHVnaW46ICdzd2lnJyxcbiAqICAgICAgICAgICAgIHRlbXBsYXRlOiAncmVsYXRpdmUvcGF0aC90by9maWxlLnRlbXBsYXRlJ1xuICogICAgICAgICAgfVxuICogICAgICAgXVxuICogICAgfVxuICogXG4gKiAgICBzY3JpcHQgeyBzdHJpbmcgfCBvYmplY3QgfTogc3RyaW5nIHwgSUZvcmdlU2NyaXB0XG4gKiBcbiAqIEBwYXJhbSB0cmFuc2Zvcm0gVGhlIHRyYW5zZm9ybSB0byBub3JtYWxpemVcbiAqIEBwYXJhbSBnbG9iYWxQbHVnaW5NYXAgTWFwIG9mIHBsdWdpbnMgZGVmaW5lZCBhdCB0aGUgZ2xvYmFsIGxldmVsXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UGlwZWxpbmUoXG4gICBuYW1lOiBzdHJpbmcsXG4gICB0cmFuc2Zvcm06IFBpcGVsaW5lRW50cnksXG4gICBnbG9iYWxDb25maWc6IEdlbmVyaWNPYmplY3QsXG4gICBnbG9iYWxTZWFyY2hTY29wZTogRmlsZVNlYXJjaFNjb3BlLFxuICAgZ2xvYmFsUGx1Z2luTWFwOiBNYXA8c3RyaW5nLCBJUGx1Z2luPixcbiAgIG9wdGlvbnM6IEZvcmdlT3B0aW9uc1xuKTogUHJvbWlzZTxGb3JnZVBpcGVsaW5lPiB7XG4gICB0cnkge1xuICAgICAgbGV0IHNlYXJjaFNjb3BlID0gYXdhaXQgaW1wb3J0UmVzb2x2ZSh0cmFuc2Zvcm0ucmVzb2x2ZSwgb3B0aW9ucylcbiAgICAgIHNlYXJjaFNjb3BlLm1lcmdlKGdsb2JhbFNlYXJjaFNjb3BlKVxuXG4gICAgICBsZXQgc2NyaXB0ID0gYXdhaXQgaW1wb3J0U2NyaXB0KHRyYW5zZm9ybS5zY3JpcHQsIHNlYXJjaFNjb3BlKVxuXG4gICAgICBsZXQgYnVpbGRDb25maWcgPSBuZXcgQ29uZmlnQnVpbGRlcigpXG4gICAgICBsZXQgdHJhbnNmb3JtQ29uZmlnID0gYXdhaXQgc2FmZWx5UnVuPEdlbmVyaWNPYmplY3Q+KHNjcmlwdC5pbml0LCB7IGJ1aWxkQ29uZmlnIH0pXG4gICAgICB0cmFuc2Zvcm1Db25maWcgPSB0cmFuc2Zvcm1Db25maWcgfHwge31cblxuICAgICAgLy8gUGFzcyBhbnkgbWlzc2luZyBjb25maWcgcGFyYW10ZXJzIGZyb20gdGhlIGdsb2JhbCBjb25maWcgdG8gdGhlXG4gICAgICAvLyB0cmFuc2Zvcm0gY29uZmlnXG4gICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZ2xvYmFsQ29uZmlnKSkge1xuICAgICAgICAgaWYgKHRyYW5zZm9ybUNvbmZpZ1trZXldID09IG51bGwpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybUNvbmZpZ1trZXldID0gdmFsdWVcbiAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHBsdWdpbnMgPSBhd2FpdCBpbXBvcnRQbHVnaW5zKHRyYW5zZm9ybS5wbHVnaW5zLCBnbG9iYWxDb25maWcsIHRyYW5zZm9ybUNvbmZpZylcblxuICAgICAgLy8gQ3JlYXRlIGEgcGx1Z2luIG1hcCBvZiBnbG9iYWwgYW5kIGxvY2FsIHBsdWdpbnNcbiAgICAgIGxldCBwbHVnaW5NYXAgPSBuZXcgTWFwPHN0cmluZywgSVBsdWdpbj4oKVxuXG4gICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgZ2xvYmFsUGx1Z2luTWFwKSB7XG4gICAgICAgICBwbHVnaW5NYXAuc2V0KGtleSwgdmFsdWUpXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBsb2NhbCBwbHVnaW5zIGFmdGVyIHRvIFwib3ZlcnJpZGVcIiBnbG9iYWwgcGx1Z2luc1xuICAgICAgZm9yIChsZXQgbmFtZWQgb2YgcGx1Z2lucykge1xuICAgICAgICAgcGx1Z2luTWFwLnNldChuYW1lZC5uYW1lLCBuYW1lZC5wbHVnaW4pXG4gICAgICB9XG5cbiAgICAgIHBsdWdpbnMgPSBuZXcgQXJyYXk8TmFtZWRQbHVnaW4+KClcbiAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBwbHVnaW5NYXAuZW50cmllcygpKSB7XG4gICAgICAgICBwbHVnaW5zLnB1c2gobmV3IE5hbWVkUGx1Z2luKGtleSwgdmFsdWUpKVxuICAgICAgfVxuXG4gICAgICBsZXQgc3RlcHMgPSBhd2FpdCBpbXBvcnRQaXBlbGluZVN0ZXBzKG5hbWUsIHRyYW5zZm9ybS5zdGVwcywgdHJhbnNmb3JtQ29uZmlnLCBwbHVnaW5NYXApXG5cbiAgICAgIHJldHVybiBuZXcgRm9yZ2VQaXBlbGluZShuYW1lLCBwbHVnaW5zLCBzY3JpcHQsIHN0ZXBzLCBzZWFyY2hTY29wZSlcbiAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgZXJyXG4gICB9XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXG4gKiBOb3JtYWxpemVzYW5kIGltcG9ydHMgdGhlIHBsdWdpbiBzZWN0aW9uIG9mIGEgdHJhbnNmb3JtXG4gKiBcbiAqIEBwYXJhbSB0cmFuc2Zvcm1OYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSB0cmFuc2Zvcm1cbiAqIEBwYXJhbSBwbHVnaW5zIHsgQXJyYXkgfCBvYmplY3QgfSBUaGUgcGx1Z2lucyBjb25maWd1cmF0aW9uXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UGx1Z2lucyhcbiAgIHBsdWdpbnM6IFBsdWdpbkVudHJ5IHwgUGx1Z2luRW50cnlbXSxcbiAgIGdsb2JhbENvbmZpZzogR2VuZXJpY09iamVjdCxcbiAgIGxvY2FsQ29uZmlnOiBHZW5lcmljT2JqZWN0ID0ge31cbik6IFByb21pc2U8QXJyYXk8TmFtZWRQbHVnaW4+PiB7XG4gICBsZXQgcmVzdWx0cyA9IG5ldyBBcnJheTxOYW1lZFBsdWdpbj4oKVxuXG4gICBpZiAoIWlzRGVmaW5lZChwbHVnaW5zKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgIH1cblxuICAgbGV0IGltcG9ydFBsdWdpbnMgPSBhc3luYyAoZW50cnk6IFBsdWdpbkVudHJ5KTogUHJvbWlzZTxOYW1lZFBsdWdpbltdPiA9PiB7XG4gICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgbGV0IHsgbmFtZSwgcGx1Z2luIH0gPSBlbnRyeVxuXG4gICAgICAgICBpZiAoIWlzRGVmaW5lZChuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gbmFtZSBpcyBtaXNzaW5nLiBFbnN1cmUgYWxsIHBsdWdpbnMgaGF2ZSBhICduYW1lJyBkZWZpbmVkYClcbiAgICAgICAgIH1cblxuICAgICAgICAgaWYgKCFpc0RlZmluZWQocGx1Z2luKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIFBsdWdpbiBlbnRyeSBpcyBtaXNzaW5nIHRoZSBvaCBzbyB2ZXJ5IGltcG9ydGFudCAncGx1Z2luJyBwcm9wZXJ0eS4gRW5zdXJlIGFsbCBwbHVnaW5zIGhhdmUgdGhlaXIgJ3BsdWdpbicgZmllbGQgcG9wdWxhdGVkLmApXG4gICAgICAgICB9XG5cbiAgICAgICAgIHJldHVybiBbbmV3IE5hbWVkUGx1Z2luKG5hbWUsIHBsdWdpbildXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgbGV0IGNhc3RFbnRyeSA9IGVudHJ5IGFzIChnbG9iYWw6IEdlbmVyaWNPYmplY3QsIGxvY2FsOiBHZW5lcmljT2JqZWN0KSA9PiBQcm9taXNlPE5hbWVkUGx1Z2luIHwgTmFtZWRQbHVnaW5bXT5cbiAgICAgICAgIGxldCBlbnRyaWVzID0gYXdhaXQgY2FzdEVudHJ5KGdsb2JhbENvbmZpZywgbG9jYWxDb25maWcpXG5cbiAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICAgICAgZW50cmllcyA9IFtlbnRyaWVzXVxuICAgICAgICAgfVxuXG4gICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoaXQgPT4gbmV3IE5hbWVkUGx1Z2luKGl0Lm5hbWUsIGl0LnBsdWdpbikpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmNvdXRuZXJlZCBhIHBsdWdpbiBlbnRyeSB0aGF0IGlzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0LiBQbHVnaW4gZW50cmllcyBhcmUgZWl0aGVyIGZ1bmN0aW9ucyBvciBvYmplY3RzLmApXG4gICAgICB9XG4gICB9XG5cbiAgIGlmIChBcnJheS5pc0FycmF5KHBsdWdpbnMpKSB7XG4gICAgICBwbHVnaW5zID0gcGx1Z2lucyBhcyBBcnJheTxQbHVnaW5FbnRyeT5cblxuICAgICAgZm9yIChsZXQgZW50cnkgb2YgcGx1Z2lucykge1xuICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLihhd2FpdCBpbXBvcnRQbHVnaW5zKGVudHJ5KSkpXG4gICAgICB9XG4gICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW5zID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0cy5wdXNoKC4uLihhd2FpdCBpbXBvcnRQbHVnaW5zKHBsdWdpbnMpKSlcbiAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGZvcm1hdCBlbmNvdW50ZXJlZCB3aGVuIGltcG9ydGluZyBwbHVnaW5zLiBFbnN1cmUgZWFjaCBwbHVnaW4gZW50cnkgaGFzIGEgJ25hbWUnIGFuZCAncGx1Z2luJyBmaWVsZC5gKVxuICAgfVxuXG4gICByZXR1cm4gcmVzdWx0c1xufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxuICogSW1wb3J0cyB0aGUgVHJhbnNmb3JtIFNjcmlwdC4gV2lsbCByZWFkIGl0IGluIGZyb20gZGlzayBpZiBwcm92aWRlZCBhcyBhIHBhdGgsIG90aGVyd2lzZSxcbiAqIGl0IHdpbGwgcmVhZCBpdCBpbiBmcm9tIG1lbW9yeS5cbiAqIFxuICogQHBhcmFtIHNjcmlwdCB7c3RyaW5nIHwgb2JqZWN0fSBUaGUgc2NyaXB0IHRvIGltcG9ydFxuICogQHBhcmFtIGNvbnRleHQgVGhlIEZvcmdlT3B0aW9uc0NvbnRleHRcbiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTY3JpcHQoc2NyaXB0OiBzdHJpbmcgfCBJRm9yZ2VTY3JpcHQsIHNjb3BlOiBGaWxlU2VhcmNoU2NvcGUpOiBQcm9taXNlPElGb3JnZVNjcmlwdD4ge1xuICAgaWYgKHR5cGVvZiBzY3JpcHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAocGF0aC5pc0Fic29sdXRlKHNjcmlwdCkpIHtcbiAgICAgICAgIHJldHVybiBhd2FpdCBpbXBvcnQoc2NyaXB0KVxuICAgICAgfVxuXG4gICAgICBsZXQgZm91bmQgPSBhd2FpdCBzY29wZS5maW5kKHNjcmlwdClcblxuICAgICAgaWYgKGZvdW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgc2NyaXB0ICR7c2NyaXB0fS4gRW5zdXJlIHRoZSBjb3JyZWN0IHJlc29sdmVzIGV4aXN0IG9yIHRoYXQgdGhlIHNjcmlwdCBpcyBiZWluZyBjYWxsZWQgZnJvbSB0aGUgZGVzaXJlZCBsb2NhdGlvbi5gKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgaW1wb3J0KGZvdW5kKVxuICAgfSBlbHNlIGlmICh0eXBlb2Ygc2NyaXB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHNjcmlwdCBhcyBJRm9yZ2VTY3JpcHRcbiAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IEVtcHR5Rm9yZ2VTY3JpcHQoKVxuICAgfVxufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxuICogSW1wb3J0cyB0aGUgUGlwZWxpbmUgU3RlcHNcblxuICogQHBhcmFtIHRyYW5zZm9ybU5hbWUgVFJhbnNmb3JtIG5hbWVcbiAqIEBwYXJhbSBzdGVwcyBMaXN0IG9mIHBsYWluIG9iamVjdCBTdGVwc1xuICogQHBhcmFtIHRyYW5zZm9ybUNvbmZpZyBUaGUgdHJhbnNmb3JtIGNvbmZpZyB0aGF0IHdhcyBnZW5lcmF0ZWQgYnkgXG4gKiAgICBydW5uaW5nIHRoZSBpbml0KCkgdHJhbnNmb3JtIHNjcmlwdFxuICogQHBhcmFtIHBsdWdpbk1hcCBNYXAgb2YgcGx1Z2lucyBieSBuYW1lIChnbG9iYWwgKyBsb2NhbClcbiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQaXBlbGluZVN0ZXBzKHRyYW5zZm9ybU5hbWU6IHN0cmluZywgc3RlcHM6IFN0ZXBFbnRyeVtdLCB0cmFuc2Zvcm1Db25maWc6IEdlbmVyaWNPYmplY3QsIHBsdWdpbk1hcDogTWFwPHN0cmluZywgSVBsdWdpbj4pOiBQcm9taXNlPElTdGVwW10+IHtcbiAgIGxldCByZXN1bHRzID0gbmV3IEFycmF5PElTdGVwPigpXG5cbiAgIGZvciAobGV0IHN0ZXAgb2Ygc3RlcHMpIHtcbiAgICAgIGxldCBpbXBvcnRlZFN0ZXA6IFN0ZXBJbmZvIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIGlmICh0eXBlb2Ygc3RlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgaW1wb3J0ZWRTdGVwID0gYXdhaXQgc2FmZWx5UnVuPFN0ZXBJbmZvPihzdGVwLCB7IGNvbmZpZzogdHJhbnNmb3JtQ29uZmlnIH0pXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGVwID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgaW1wb3J0ZWRTdGVwID0gc3RlcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQSBUcmFuc2Zvcm0gc3RlcCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LiBFbmNvdXRuZXJlZCBhICR7dHlwZW9mIHN0ZXB9IGluc3RlYWQgaW4gdHJhbnNmb3JtICR7dHJhbnNmb3JtTmFtZX1gKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0ZWRTdGVwID09IG51bGwpIHtcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGltcG9ydCBhIHN0ZXAgaW4gdGhlIHRyYW5zZm9ybSAke3RyYW5zZm9ybU5hbWV9YClcbiAgICAgIH1cblxuICAgICAgU3RlcC52YWxpZGF0ZShpbXBvcnRlZFN0ZXApXG5cbiAgICAgIGxldCBwbHVnaW4gPSBwbHVnaW5NYXAuZ2V0KGltcG9ydGVkU3RlcC5wbHVnaW4pXG5cbiAgICAgIGlmIChwbHVnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBwbHVnaW4gJHtpbXBvcnRlZFN0ZXAucGx1Z2lufSBpbiBTdGVwICR7aW1wb3J0ZWRTdGVwLmFsaWFzfWApXG4gICAgICB9XG5cbiAgICAgIHJlc3VsdHMucHVzaChuZXcgU3RlcChpbXBvcnRlZFN0ZXAsIHBsdWdpbiwgaW1wb3J0ZWRTdGVwLnVzZSB8fCBuZXcgQXJyYXk8U3RyaW5nPigpKSlcbiAgIH1cblxuICAgcmV0dXJuIHJlc3VsdHNcbn1cblxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzb2x2ZShcbiAgIHJlc29sdmU6IHN0cmluZyB8IHN0cmluZ1tdIHwgUmVzb2x2ZVBhdGhzRm4gfCB1bmRlZmluZWQsXG4gICBvcHRpb25zOiBGb3JnZU9wdGlvbnMpOiBQcm9taXNlPEZpbGVTZWFyY2hTY29wZT4ge1xuICAgbGV0IHJlc29sdmVzID0gbmV3IEFycmF5PHN0cmluZz4oKVxuXG4gICBpZiAocmVzb2x2ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IEZpbGVTZWFyY2hTY29wZShyZXNvbHZlcylcbiAgIH1cblxuICAgbGV0IGFic29sdXRlID0gKHA6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gcGF0aC5pc0Fic29sdXRlKHApID8gcCA6IHBhdGguam9pbihvcHRpb25zLmN3ZCwgcClcbiAgIH1cblxuICAgaWYgKHR5cGVvZiByZXNvbHZlID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzb2x2ZXMgPSBbKGFic29sdXRlKHJlc29sdmUpKV1cbiAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc29sdmUgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHBhdGhzID0gYXdhaXQgcmVzb2x2ZSgpXG4gICAgICBmb3IgYXdhaXQgKGxldCBwIG9mIHBhdGhzKSB7XG4gICAgICAgICByZXNvbHZlcy5wdXNoKGFic29sdXRlKHApKVxuICAgICAgfVxuICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc29sdmUpKSB7XG4gICAgICByZXNvbHZlcyA9IHJlc29sdmUubWFwKHAgPT4gYWJzb2x1dGUocCkpXG4gICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCByZXNvbHZlIGZvcm1hdCBlbmNvdW50ZXJlZC4gJ3Jlc29sdmUnIG11c3QgYmUgYSBzdHJpbmcsIHN0cmluZ1tdLCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJtbnMgYSBzdHJpbmdbXWApXG4gICB9XG5cbiAgIHJldHVybiBuZXcgRmlsZVNlYXJjaFNjb3BlKHJlc29sdmVzKVxufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxuICogSW1wb3J0cyB0aGUgaW1wb3J0cyBzZWN0aW9uIG9mIGEgVHJhbnNmb3JtXG4gKlxuICogQHBhcmFtIHRyYW5zZm9ybU5hbWUgVGhlIG5hbWUgb2YgdGhlIGltcG9ydGluZyB0cmFuc2Zvcm1cbiAqIEBwYXJhbSBpbXBvcnRzIFRoZSBpbXBvcnRzIG9iamVjdFxuICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8vIGZ1bmN0aW9uIGltcG9ydFRyYW5zZm9ybUltcG9ydHModHJhbnNmb3JtTmFtZTogc3RyaW5nLCBpbXBvcnRzOiBhbnksIGdsb2JhbFBsdWdpbk1hcDogTWFwPHN0cmluZywgSVBsdWdpbj4pOiBBcnJheTxJSW1wb3J0UGFyYW1zPiB7XG4vLyAgICBsZXQgcmVzdWx0cyA9IG5ldyBBcnJheTxJSW1wb3J0UGFyYW1zPigpXG5cbi8vICAgIC8qXG4vLyAgICAgICBSZXF1aXJlZCBwYXJhbWV0ZXJzOlxuLy8gICAgICAgICAgLSBhbGlhcyB7c3RyaW5nfSBUaGUgYWxpYXMgb2YgdGhpcyBpbXBvcnQgcGFyYW1ldGVyc1xuLy8gICAgICAgICAgLSBwbHVnaW4ge3N0cmluZyB8IElQbHVnaW59OiBUaGUgcGx1Z2luIHVzZWQgZm9yIGltcG9ydGluZyBcbi8vICAgICovXG4vLyAgICBsZXQgaW1wb3J0RW50cnkgPSBpbSA9PiB7XG4vLyAgICAgICBsZXQgcmVzdWx0ID0gey4uLmltfVxuXG4vLyAgICAgICBpZighaXNEZWZpbmVkKGltLmFsaWFzKSkge1xuLy8gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyAnYWxpYXMnIGRlZmluZWQgZm9yIGltcG9ydCBpbiB0cmFuc2Zvcm0gJHt0cmFuc2Zvcm1OYW1lfWApXG4vLyAgICAgICB9XG5cbi8vICAgICAgIGlmKCFpc0RlZmluZWQoaW0ucGx1Z2luKSkge1xuLy8gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyAncGx1Z2luJyBkZWZpbmVkIGZvciBpbXBvcnQgaW4gdHJhbnNmb3JtICR7dHJhbnNmb3JtTmFtZX1gKVxuLy8gICAgICAgfVxuXG4vLyAgICAgICBpZih0eXBlb2YgaW0ucGx1Z2luID09PSAnc3RyaW5nJykge1xuLy8gICAgICAgICAgLy8gTG9va3VwIHRoZSByZWZlcmVuY2VkIHBsdWdpblxuLy8gICAgICAgICAgbGV0IGZvdW5kID0gZ2xvYmFsUGx1Z2luTWFwLmdldChpbS5wbHVnaW4pXG5cbi8vICAgICAgICAgIGlmKCFpc0RlZmluZWQoZm91bmQpKSB7XG4vLyAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kICdwbHVnaW4nICR7aW0ucGx1Z2lufSByZWZlcmVuY2VkIGluIHRoZSBpbXBvcnQgc2VjdGlvbiBpbiB0cmFuc2Zvcm0gJHt0cmFuc2Zvcm1OYW1lfWApXG4vLyAgICAgICAgICB9XG5cbi8vICAgICAgICAgIHJlc3VsdC5wbHVnaW4gPSBmb3VuZFxuLy8gICAgICAgfSBlbHNlIGlmIChpc1BsdWdpbihpbS5wbHVnaW4pKSB7XG4vLyAgICAgICAgICByZXN1bHQucGx1Z2luID0gaW0ucGx1Z2luXG4vLyAgICAgICB9IGVsc2Uge1xuLy8gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBmb3JtYXQgZm9yIHRoZSAncGx1Z2luJyByZWZlcmVuY2VkIGluIHRoZSBpbXBvcnQgaW4gdHJhbnNmb3JtICR7dHJhbnNmb3JtTmFtZX1gKVxuLy8gICAgICAgfVxuXG4vLyAgICAgICByZXR1cm4gcmVzdWx0IGFzIElJbXBvcnRQYXJhbXNcbi8vICAgIH1cblxuLy8gICAgaWYoaXNEZWZpbmVkKGltcG9ydHMpKSB7XG4vLyAgICAgICBpZihBcnJheS5pc0FycmF5KGltcG9ydHMpKSB7XG4vLyAgICAgICAgICByZXN1bHRzID0gaW1wb3J0cy5tYXAoaXQgPT4gaW1wb3J0RW50cnkoaXQpKVxuLy8gICAgICAgfSBlbHNlIGlmKHR5cGVvZiBpbXBvcnRzID09PSAnb2JqZWN0Jykge1xuLy8gICAgICAgICAgcmVzdWx0cy5wdXNoKGltcG9ydEVudHJ5KGltcG9ydHMpKVxuLy8gICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZm9ybWF0IGVuY291bnRlcmVkIHdoZW4gaW1wb3J0aW5nIHRoZSBpbXBvcnRzIHNlY3Rpb24gZm9yIHRyYW5zZm9ybSAke25hbWV9YClcbi8vICAgICAgIH1cbi8vICAgIH1cblxuLy8gICAgcmV0dXJuIHJlc3VsdHNcbi8vIH1cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXG4gKiBJbXBvcnRzIHRoZSBleHBvcnQgcG9ydGlvbiBvZiBhIHRyYW5zZm9ybVxuICpcbiAqIEBwYXJhbSB0cmFuc2Zvcm1OYW1lIFRoZSB0cmFuc2Zvcm0gbmFtZVxuICogQHBhcmFtIGV4cG9ydHMgTGlzdCBvZiBleHBvcnQgcGFyYW1ldGVyc1xuICogQHBhcmFtIGdsb2JhbFBsdWdpbk1hcCBHbG9iYWwgbWFwIG9mIGFsaWFzLXRvLXBsdWdpbiBlbnRyaWVzXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLy8gZnVuY3Rpb24gaW1wb3J0VHJhbnNmb3JtRXhwb3J0cyhcbi8vICAgIHRyYW5zZm9ybU5hbWU6IHN0cmluZyxcbi8vICAgIGV4cG9ydHM6IGFueSxcbi8vICAgIGdsb2JhbFBsdWdpbk1hcDogTWFwPHN0cmluZywgSVBsdWdpbj4pOiBBcnJheTxJRXhwb3J0UGFyYW1zPiB7XG5cbi8vICAgIGxldCByZXN1bHRzID0gbmV3IEFycmF5PElFeHBvcnRQYXJhbXM+KClcblxuLy8gICAgaWYoIWlzRGVmaW5lZChleHBvcnRzKSkge1xuLy8gICAgICAgcmV0dXJuIG5ldyBBcnJheTxJRXhwb3J0UGFyYW1zPigpICAgXG4vLyAgICB9XG5cbi8vICAgIC8qXG4vLyAgICAgICBSZXF1aXJlZCBwYXJhbWV0ZXJzOlxuLy8gICAgICAgICAgLSBhbGlhcyB7c3RyaW5nfSBUaGUgYWxpYXMgb2YgdGhpcyBleHBvciBwYXJhbWV0ZXJzXG4vLyAgICAgICAgICAtIHBsdWdpbiB7c3RyaW5nIHwgSVBsdWdpbn06IFRoZSBwbHVnaW4gdXNlZCBmb3IgZXhwb3J0aW5nXG5cbi8vICAgICAgIE9wdGlvbmFsOlxuLy8gICAgICAgICAgLSB1c2Uge3N0cmluZyB8IEFycmF5PGF0cmluZz59OiBSZWZlcmVuY2VzIHRvIHRoZSBpbXBvcnRlZCBFbnZveSBhbGlhc2VzXG4vLyAgICAqL1xuLy8gICAgbGV0IGltcG9ydEVudHJ5ID0gZXggPT4ge1xuLy8gICAgICAgbGV0IHJlc3VsdCA9IHsgLi4uZXggfVxuXG4vLyAgICAgICBpZighaXNEZWZpbmVkKGV4LmFsaWFzKSkge1xuLy8gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyAnYWxpYXMnIGRlZmluZWQgZm9yIHRoZSBleHBvcnQgaW4gdHJhbnNmb3JtICR7dHJhbnNmb3JtTmFtZX1gKVxuLy8gICAgICAgfVxuXG4vLyAgICAgICBpZighaXNEZWZpbmVkKGV4LnBsdWdpbikpIHtcbi8vICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gJ3BsdWdpbicgZGVmaW5lZCBmb3IgdGhlIGV4cG9ydCBpbiB0cmFuc2Zvcm0gJHt0cmFuc2Zvcm1OYW1lfWApXG4vLyAgICAgICB9XG5cbi8vICAgICAgIGlmKHR5cGVvZiBleC5wbHVnaW4gPT09ICdzdHJpbmcnKSB7XG4vLyAgICAgICAgICAvLyBMb29rdXAgdGhlIHJlZmVyZW5jZWQgcGx1Z2luXG4vLyAgICAgICAgICBsZXQgZm91bmQgPSBnbG9iYWxQbHVnaW5NYXAuZ2V0KGV4LnBsdWdpbilcblxuLy8gICAgICAgICAgaWYoIWlzRGVmaW5lZChmb3VuZCkpIHtcbi8vICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgJ3BsdWdpbicgJHtleC5wbHVnaW59IHJlZmVyZW5jZWQgaW4gdGhlIGV4cG9ydCBzZWN0aW9uIGluIHRyYW5zZm9ybSAke3RyYW5zZm9ybU5hbWV9YClcbi8vICAgICAgICAgIH1cblxuLy8gICAgICAgICAgcmVzdWx0LnBsdWdpbiA9IGZvdW5kXG4vLyAgICAgICB9IGVsc2UgaWYgKGlzUGx1Z2luKGV4LnBsdWdpbikpIHtcbi8vICAgICAgICAgIHJlc3VsdC5wbHVnaW4gPSBleC5wbHVnaW5cbi8vICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGZvcm1hdCBmb3IgdGhlICdwbHVnaW4nIHJlZmVyZW5jZWQgaW4gdGhlIGltcG9ydCBpbiB0cmFuc2Zvcm0gJHt0cmFuc2Zvcm1OYW1lfWApXG4vLyAgICAgICB9XG5cbi8vICAgICAgIGxldCB1c2UgPSBuZXcgQXJyYXk8eyBhbGlhczogc3RyaW5nLCBlbnZveTogSUVudm95IH0+KClcblxuLy8gICAgICAgaWYoZXgudXNlKSB7XG4vLyAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShleC51c2UpICYmIHR5cGVvZiBleC51c2UgIT09ICdzdHJpbmcnKSB7XG4vLyAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkICd1c2UnIG9wdGlvbiB0eXBlIHJlZmVyZW5jZWQgaW4gdGhlIGV4cG9ydCBzZWN0aW9uIG9mIHRyYW5zZm9ybSAke3RyYW5zZm9ybU5hbWV9LiBJdCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIEFycmF5PHN0cmluZz4uYClcbi8vICAgICAgICAgIH1cblxuLy8gICAgICAgICAgaWYodHlwZW9mIGV4LnVzZSA9PT0gJ3N0cmluZycpIHtcbi8vICAgICAgICAgICAgIHVzZS5wdXNoKHsgYWxpYXM6IGV4LnVzZSwgZW52b3k6IG51bGwgfSlcbi8vICAgICAgICAgIH0gZWxzZSBpZihBcnJheS5pc0FycmF5KGV4LnVzZSkpIHtcbi8vICAgICAgICAgICAgIGZvcihsZXQgYWxpYXMgb2YgZXgudXNlKSB7XG4vLyAgICAgICAgICAgICAgICB1c2UucHVzaCh7IGFsaWFzLCBlbnZveTogbnVsbCB9KVxuLy8gICAgICAgICAgICAgfVxuLy8gICAgICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmb3JtYXQgZW5jb3VudGVyZWQgZm9yIHRoZSBleHBvcnQgJ3VzZScgb3B0aW9uIGluIHRyYW5zZm9ybSAke3RyYW5zZm9ybU5hbWV9LiBJdCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIEFycmF5PHN0cmluZz4uYClcbi8vICAgICAgICAgIH1cbi8vICAgICAgIH1cblxuLy8gICAgICAgcmVzdWx0LnVzZSA9IHVzZVxuXG4vLyAgICAgICByZXR1cm4gcmVzdWx0IGFzIElFeHBvcnRQYXJhbXNcbi8vICAgIH1cblxuLy8gICAgaWYoQXJyYXkuaXNBcnJheShleHBvcnRzKSkge1xuLy8gICAgICAgZm9yKGxldCBleHAgb2YgZXhwb3J0cykge1xuLy8gICAgICAgICAgcmVzdWx0cy5wdXNoKGltcG9ydEVudHJ5KGV4cCkpXG4vLyAgICAgICB9XG4vLyAgICB9IGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4vLyAgICAgICByZXN1bHRzLnB1c2goaW1wb3J0RW50cnkoZXhwb3J0cykpXG4vLyAgICB9IGVsc2Uge1xuLy8gICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGZvcm1hdCBmb3IgdGhlIGV4cG9ydHMgdmFsdWUgaW4gdHJhbnNmb3JtICR7dHJhbnNmb3JtTmFtZX0uIEl0IG5lZWRzIHRvOiBub3QgZXhpc3QsIGJlIGFuIG9iamVjdCBvciBhbiBBcnJheWApXG4vLyAgICB9XG5cbi8vICAgIHJldHVybiByZXN1bHRzXG4vLyB9XG5cbi8vIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXG4vLyAgKiBTZWFyY2hlcyBmb3IgYSBwbHVnaW4gZnJvbSB0aGUgc2NvcGUgb2YgYSBUcmFuc2Zvcm1cbi8vICAqIFxuLy8gICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB0byBmaW5kXG4vLyAgKiBAcGFyYW0gdHJhbnNmb3JtIFRoZSB0cmFuc2Zvcm1cbi8vICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vLyBmdW5jdGlvbiBmaW5kUGx1Z2luKG5hbWU6IHN0cmluZywgdHJhbnNmb3JtOiBGb3JnZVRyYW5zZm9ybSk6IElQbHVnaW4ge1xuLy8gICAgbGV0IGZvdW5kID0gdHJhbnNmb3JtLmZpbmRQbHVnaW4obmFtZSlcblxuLy8gICAgaWYoZm91bmQpIHtcbi8vICAgICAgIHJldHVybiBmb3VuZFxuLy8gICAgfVxuXG4vLyAgICBsZXQgZ2xvYmFsRm91bmQgPSB0aGlzLnBsdWdpbnMuZmluZChwbHVnaW4gPT4gcGx1Z2luLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKVxuLy8gICAgcmV0dXJuIGdsb2JhbEZvdW5kID8gZ2xvYmFsRm91bmQucGx1Z2luIDogdW5kZWZpbmVkXG4vLyB9XG4iXX0=

@@ -18,3 +18,2 @@ "use strict";

let req = httpProtocol.request(this.requestOptions, async (res) => {
console.log(res);
let chunks = new Array();

@@ -206,2 +205,2 @@ let length = 0;

ForgeHttpPlugin.type = 'forge-internal-rest-plugin';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9yZ2VIdHRwUGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbnMvRm9yZ2VIdHRwUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUF5QjtBQUN6QixxREFBZ0Y7QUFJaEYsNkJBQTRCO0FBQzVCLCtCQUE4QjtBQUc5QixNQUFNLGNBQWUsU0FBUSwwQkFBUTtJQUdsQyxZQUFZLGNBQThCLEVBQUUsYUFBOEI7UUFDdkUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxLQUFLO1FBQ0YsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQzNHLElBQUksWUFBWSxHQUFHLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBRXRELElBQUk7WUFDRCxJQUFJLEdBQUcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUVoQixJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBTyxDQUFBO2dCQUM3QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUE7Z0JBQ2QsSUFBSSxPQUFPLEdBQWdDLFNBQVMsQ0FBQTtnQkFDcEQsSUFBSSxPQUFPLEdBQXVCLFNBQVMsQ0FBQTtnQkFFM0MsSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO29CQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUss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LENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQWtCLEVBQUUsSUFBVztRQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUMzRSxDQUFDOztBQXpKSiwwQ0EwSkM7QUF6SmtCLG9CQUFJLEdBQVcsNEJBQTRCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnXG5pbXBvcnQgeyBSZWFkYWJsZSwgUmVhZGFibGVPcHRpb25zLCBUcmFuc2Zvcm0sIFdyaXRhYmxlIH0gZnJvbSBcInJlYWRhYmxlLXN0cmVhbVwiXG5pbXBvcnQgeyBJQnVpbGRTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0J1aWxkU3RhdGVcIlxuaW1wb3J0IHsgSVN0ZXAgfSBmcm9tIFwiLi4vY29yZS9TdGVwXCJcbmltcG9ydCB7IElQbHVnaW4gfSBmcm9tIFwiLi9JUGx1Z2luXCJcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSBcImh0dHBcIlxuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSBcImh0dHBzXCJcbmltcG9ydCB7IFJlcXVlc3RPcHRpb25zIH0gZnJvbSBcImh0dHBzXCJcblxuY2xhc3MgSHR0cFJlYWRTdHJlYW0gZXh0ZW5kcyBSZWFkYWJsZSB7XG4gICByZWFkb25seSByZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnNcblxuICAgY29uc3RydWN0b3IocmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLCBzdHJlYW1PcHRpb25zOiBSZWFkYWJsZU9wdGlvbnMpIHtcbiAgICAgIHN1cGVyKHN0cmVhbU9wdGlvbnMpXG4gICAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnNcbiAgIH1cblxuICAgX3JlYWQoKTogdm9pZCB7XG4gICAgICBsZXQgcHJvdG9jb2wgPSB0aGlzLnJlcXVlc3RPcHRpb25zLnByb3RvY29sID09IG51bGwgPyAnaHR0cHM6JyA6IHRoaXMucmVxdWVzdE9wdGlvbnMucHJvdG9jb2wudG9Mb3dlckNhc2UoKVxuICAgICAgbGV0IGh0dHBQcm90b2NvbCA9IHByb3RvY29sID09PSAnaHR0cDonID8gaHR0cCA6IGh0dHBzXG5cbiAgICAgIHRyeSB7XG4gICAgICAgICBsZXQgcmVxID0gaHR0cFByb3RvY29sLnJlcXVlc3QodGhpcy5yZXF1ZXN0T3B0aW9ucywgYXN5bmMgKHJlcykgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKVxuXG4gICAgICAgICAgICBsZXQgY2h1bmtzID0gbmV3IEFycmF5PGFueT4oKVxuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IDBcbiAgICAgICAgICAgIGxldCByZXN1bHRzOiBzdHJpbmcgfCBCdWZmZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGxldCByYXdCb2R5OiBCdWZmZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuICAgICAgICAgICAgZm9yIGF3YWl0IChsZXQgY2h1bmsgb2YgcmVzKSB7XG4gICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICAgICAgICAgICAgIGxlbmd0aCArPSBCdWZmZXIuYnl0ZUxlbmd0aChjaHVuaylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjaHVua3NbMF0pKSB7XG4gICAgICAgICAgICAgICByYXdCb2R5ID0gQnVmZmVyLmNvbmNhdChjaHVua3MsIGxlbmd0aClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICByYXdCb2R5ID0gQnVmZmVyLmZyb20oY2h1bmtzLmpvaW4oJycpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY29udGVudFR5cGUgPSByZXMuaGVhZGVyc1snY29udGVudC10eXBlJ10gfHwgJydcblxuICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID49IDApIHtcbiAgICAgICAgICAgICAgIHJlc3VsdHMgPSBKU09OLnBhcnNlKHJhd0JvZHkudG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICByZXN1bHRzID0gcmF3Qm9keVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnB1c2gocmVzdWx0cylcbiAgICAgICAgICAgIHRoaXMucHVzaChudWxsKVxuICAgICAgICAgfSlcblxuICAgICAgICAgcmVxLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgIHRoaXMuZGVzdHJveShlcnIpXG4gICAgICB9XG4gICB9XG59XG5cbi8vIGNsYXNzIEh0dHBXcml0ZVN0cmVhbSBleHRlbmRzIFRyYW5zZm9ybSB7XG4vLyAgICByZWFkb25seSByZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnNcblxuLy8gICAgY29uc3RydWN0b3IocmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLCBzdHJlYW1PcHRpb25zOiBUcmFuc2Zvcm1PcHRpb25zKSB7XG4vLyAgICAgICBzdXBlcihzdHJlYW1PcHRpb25zKVxuLy8gICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zXG4vLyAgICB9XG5cbi8vICAgIF90cmFuc2Zvcm0oY2h1bms6IGFueSwgZW5jb2Rpbmc6IHN0cmluZywgY2I6IChlcnJvcj86IEVycm9yIHwgdW5kZWZpbmVkLCBkYXRhPzogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICBcbi8vICAgIH1cbi8vIH1cblxuZXhwb3J0IGNsYXNzIEZvcmdlSHR0cFBsdWdpbiBpbXBsZW1lbnRzIElQbHVnaW4ge1xuICAgc3RhdGljIHJlYWRvbmx5IHR5cGU6IHN0cmluZyA9ICdmb3JnZS1pbnRlcm5hbC1yZXN0LXBsdWdpbidcbiAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZyA9IEZvcmdlSHR0cFBsdWdpbi50eXBlXG5cblxuICAgLypcbiAgICAgICAgICAgcHJvdG9jb2w/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICBob3N0Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgaG9zdG5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICBmYW1pbHk/OiBudW1iZXI7XG4gICAgICAgICAgIHBvcnQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICBkZWZhdWx0UG9ydD86IG51bWJlciB8IHN0cmluZztcbiAgICAgICAgICAgbG9jYWxBZGRyZXNzPzogc3RyaW5nO1xuICAgICAgICAgICBzb2NrZXRQYXRoPzogc3RyaW5nO1xuICAgICAgICAgICBtZXRob2Q/OiBzdHJpbmc7XG4gICAgICAgICAgIHBhdGg/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICBoZWFkZXJzPzogT3V0Z29pbmdIdHRwSGVhZGVycztcbiAgICAgICAgICAgYXV0aD86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgIGFnZW50PzogQWdlbnQgfCBib29sZWFuO1xuICAgICAgICAgICBfZGVmYXVsdEFnZW50PzogQWdlbnQ7XG4gICAgICAgICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgICAgICAgIHNldEhvc3Q/OiBib29sZWFuO1xuICAgKi9cblxuICAgLypcbiAgICAgIGFsaWFzOiAnLi4nLFxuICAgICAgcGx1Z2luOiAnOnJlc3QnLFxuICAgICAgdmVyYjogJ2dldCcgLy8gcG9zdCwgcHV0LCBkZWxldGUsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAuLi5cbiAgICAgIH0sXG4gICAgICAvLyBJZiBzZXQsIHB1dHMgdGhlIHN0cmVhbSBpbiBPYmplY3QgTW9kZVxuICAgICAgb2JqZWN0TW9kZTogdHJ1ZXxmYWxzZSAgLy8gZGVmYXVsdCB0cnVlXG4gICAgICAvLyBUaGVzZSBvcHRpb25zIG92ZXJyaWRlIGFueSBwcmV2aW91c2x5IHNldCBvcHRpb25zXG4gICAgICBvcHRpb25zOiAvLyBSZXF1ZXN0T3B0aW9ucyxcbiAgICAgIHN0cmVhbU9wdGlvbnM6IHt9ICAgIC8vIFJlYWRhYmxlT3B0aW9uc1xuICAgKi9cblxuICAgLyoqXG4gICAgKiBcbiAgICAqIFxuICAgICogXG4gICAgKiBcbiAgICAqIEBwYXJhbSBzdGF0ZSBcbiAgICAqIEBwYXJhbSBzdGVwIFxuICAgICogQHJldHVybnMgXG4gICAgKi9cbiAgIGFzeW5jIHJlYWQoc3RhdGU6IElCdWlsZFN0YXRlLCBzdGVwOiBJU3RlcCk6IFByb21pc2U8UmVhZGFibGU+IHtcbiAgICAgIGxldCB7IGluZm8gfSA9IHN0ZXBcbiAgICAgIGxldCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7fVxuICAgICAgbGV0IHN0cmVhbU9wdGlvbnM6IFJlYWRhYmxlT3B0aW9ucyA9IHt9XG5cbiAgICAgIC8qXG4gICAgICAgICB4Zm9ybS5vcHRpb25zKGluZm8sIHtcbiAgICAgICAgICAgIHVybDoge1xuICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICBleGlzdHM6ICh1cmwpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBuZXcgVVJMKGluZm8udXJsKVxuICAgICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMucHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLmhvc3QgPSB1cmwuaG9zdFxuICAgICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMucGF0aCA9IHVybC5wYXRobmFtZVxuICAgICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMucG9ydCA9ICh1cmwucG9ydCA9PT0gJycgfHwgdXJsLnBvcnQgPT0gbnVsbCkgPyAoXG4gICAgICAgICAgICAgICAgICAgICB1cmwucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODBcbiAgICAgICAgICAgICAgICAgICkgOiB1cmwucG9ydFxuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcmI6IHtcbiAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgb3B0aW9uczogWydHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVMRVRFJ10sXG4gICAgICAgICAgICAgICBleGlzdHM6IHZlcmIgPT4gcmVxdWVzdE9wdGlvbnMubWV0aG9kID0gaW5mby52ZXJiXG4gICAgICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiByZXF1ZXN0T3B0aW9ucy5tZXRob2QgPSAnR0VUJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgZXhpc3RzOiBoZWFkZXJzID0+IHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSBpbmZvLmhlYWRlcnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgIGV4aXN0czogb3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgIC4uLnJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgLi4uaW5mby5vcHRpb25zXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb2JqZWN0TW9kZToge1xuICAgICAgICAgICAgICAgdHlwZTogWydzdHJpbmcnLCAnYm9vbGVhbiddLFxuICAgICAgICAgICAgICAgZXhpc3RzOiAob2JqZWN0TW9kZSwgeyBzd2l0Y2ggfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgc3dpdGNoLnR5cGUob2JqZWN0TW9kZSlcbiAgICAgICAgICAgICAgICAgICAgIC5jYXNlKCdzdHJpbmcnLCAoKSA9PiBzdHJlYW1PcHRpb25zLm9iamVjdE1vZGUgPSBpbmZvLm9iamVjdE1vZGUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKVxuICAgICAgICAgICAgICAgICAgICAgLmNhc2UoJ2Jvb2xlYW4nLCAoKSA9PiBzdHJlYW1PcHRpb25zLm9iamVjdE1vZGUgPSBpbmZvLm9iamVjdE1vZGUpXG4gICAgICAgICAgICAgICAgICAgICAuZGVmYXVsdCgoKSA9PiB0aHJvdyBuZXcgRXJyb3IoKSlcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgIH0pXG5cbiAgICAgICovXG5cbiAgICAgIGlmIChpbmZvLnVybCAhPSBudWxsKSB7XG4gICAgICAgICBsZXQgdXJsID0gbmV3IFVSTChpbmZvLnVybClcbiAgICAgICAgIHJlcXVlc3RPcHRpb25zLnByb3RvY29sID0gdXJsLnByb3RvY29sXG4gICAgICAgICByZXF1ZXN0T3B0aW9ucy5ob3N0ID0gdXJsLmhvc3RcbiAgICAgICAgIHJlcXVlc3RPcHRpb25zLnBhdGggPSB1cmwucGF0aG5hbWVcbiAgICAgICAgIHJlcXVlc3RPcHRpb25zLnBvcnQgPSAodXJsLnBvcnQgPT09ICcnIHx8IHVybC5wb3J0ID09IG51bGwpID8gKFxuICAgICAgICAgICAgdXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwXG4gICAgICAgICApIDogdXJsLnBvcnRcbiAgICAgIH1cblxuICAgICAgaWYgKGluZm8udmVyYiAhPSBudWxsKSB7XG4gICAgICAgICByZXF1ZXN0T3B0aW9ucy5tZXRob2QgPSBpbmZvLnZlcmJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICByZXF1ZXN0T3B0aW9ucy5tZXRob2QgPSAnR0VUJ1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5mby5oZWFkZXJzICE9IG51bGwpIHtcbiAgICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSBpbmZvLmhlYWRlcnNcbiAgICAgIH1cblxuICAgICAgaWYgKGluZm8ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLnJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgLi4uaW5mby5vcHRpb25zXG4gICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKGluZm8ub2JqZWN0TW9kZSAhPSBudWxsKSB7XG4gICAgICAgICBpZih0eXBlb2YgaW5mby5vYmplY3RNb2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc3RyZWFtT3B0aW9ucy5vYmplY3RNb2RlID0gaW5mby5vYmplY3RNb2RlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xuICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiBpbmZvLm9iamVjdE1vZGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgc3RyZWFtT3B0aW9ucy5vYmplY3RNb2RlID0gaW5mby5vYmplY3RNb2RlXG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnb2JqZWN0TW9kZScgaXMgZXhwZWN0ZWQgdG8gYmUgYSBzdHJpbmcgb3IgYSBib29sZWFuLiBSZWNlaXZlZCAke3R5cGVvZiBpbmZvLm9iamVjdE1vZGV9IGluc3RlYWQuYClcbiAgICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICBzdHJlYW1PcHRpb25zLm9iamVjdE1vZGUgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmKGluZm8uc3RyZWFtT3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICBzdHJlYW1PcHRpb25zID0ge1xuICAgICAgICAgICAgLi4uc3RyZWFtT3B0aW9ucyxcbiAgICAgICAgICAgIC4uLmluZm8uc3RyZWFtT3B0aW9uc1xuICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEh0dHBSZWFkU3RyZWFtKHJlcXVlc3RPcHRpb25zLCBzdHJlYW1PcHRpb25zKVxuICAgfVxuXG4gICBhc3luYyB3cml0ZShzdGF0ZTogSUJ1aWxkU3RhdGUsIHN0ZXA6IElTdGVwKTogUHJvbWlzZTxXcml0YWJsZT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBFbnZveSBpcyBzdXBwb3J0ZWQgZm9yIHRoZSAke0ZvcmdlSHR0cFBsdWdpbi50eXBlfWApXG4gICB9XG5cbiAgIGFzeW5jIHRyYW5zZm9ybShzdGF0ZTogSUJ1aWxkU3RhdGUsIHN0ZXA6IElTdGVwKTogUHJvbWlzZTxUcmFuc2Zvcm0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gRW52b3kgaXMgc3VwcG9ydGVkIGZvciB0aGUgJHtGb3JnZUh0dHBQbHVnaW4udHlwZX1gKVxuICAgfVxufSJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9yZ2VIdHRwUGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbnMvRm9yZ2VIdHRwUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUF5QjtBQUN6QixxREFBZ0Y7QUFJaEYsNkJBQTRCO0FBQzVCLCtCQUE4QjtBQUc5QixNQUFNLGNBQWUsU0FBUSwwQkFBUTtJQUdsQyxZQUFZLGNBQThCLEVBQUUsYUFBOEI7UUFDdkUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxLQUFLO1FBQ0YsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQzNHLElBQUksWUFBWSxHQUFHLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBRXRELElBQUk7WUFDRCxJQUFJLEdBQUcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUMvRCxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBTyxDQUFBO2dCQUM3QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUE7Z0JBQ2QsSUFBSSxPQUFPLEdBQWdDLFNBQVMsQ0FBQTtnQkFDcEQsSUFBSSxPQUFPLEdBQXVCLFNBQVMsQ0FBQTtnQkFFM0MsSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO29CQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNsQixNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUs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SUFBVztRQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUMzRSxDQUFDOztBQXpKSiwwQ0EwSkM7QUF6SmtCLG9CQUFJLEdBQVcsNEJBQTRCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnXG5pbXBvcnQgeyBSZWFkYWJsZSwgUmVhZGFibGVPcHRpb25zLCBUcmFuc2Zvcm0sIFdyaXRhYmxlIH0gZnJvbSBcInJlYWRhYmxlLXN0cmVhbVwiXG5pbXBvcnQgeyBJQnVpbGRTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0J1aWxkU3RhdGVcIlxuaW1wb3J0IHsgSVN0ZXAgfSBmcm9tIFwiLi4vY29yZS9TdGVwXCJcbmltcG9ydCB7IElQbHVnaW4gfSBmcm9tIFwiLi9JUGx1Z2luXCJcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSBcImh0dHBcIlxuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSBcImh0dHBzXCJcbmltcG9ydCB7IFJlcXVlc3RPcHRpb25zIH0gZnJvbSBcImh0dHBzXCJcblxuY2xhc3MgSHR0cFJlYWRTdHJlYW0gZXh0ZW5kcyBSZWFkYWJsZSB7XG4gICByZWFkb25seSByZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnNcblxuICAgY29uc3RydWN0b3IocmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLCBzdHJlYW1PcHRpb25zOiBSZWFkYWJsZU9wdGlvbnMpIHtcbiAgICAgIHN1cGVyKHN0cmVhbU9wdGlvbnMpXG4gICAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnNcbiAgIH1cblxuICAgX3JlYWQoKTogdm9pZCB7XG4gICAgICBsZXQgcHJvdG9jb2wgPSB0aGlzLnJlcXVlc3RPcHRpb25zLnByb3RvY29sID09IG51bGwgPyAnaHR0cHM6JyA6IHRoaXMucmVxdWVzdE9wdGlvbnMucHJvdG9jb2wudG9Mb3dlckNhc2UoKVxuICAgICAgbGV0IGh0dHBQcm90b2NvbCA9IHByb3RvY29sID09PSAnaHR0cDonID8gaHR0cCA6IGh0dHBzXG5cbiAgICAgIHRyeSB7XG4gICAgICAgICBsZXQgcmVxID0gaHR0cFByb3RvY29sLnJlcXVlc3QodGhpcy5yZXF1ZXN0T3B0aW9ucywgYXN5bmMgKHJlcykgPT4ge1xuICAgICAgICAgICAgbGV0IGNodW5rcyA9IG5ldyBBcnJheTxhbnk+KClcbiAgICAgICAgICAgIGxldCBsZW5ndGggPSAwXG4gICAgICAgICAgICBsZXQgcmVzdWx0czogc3RyaW5nIHwgQnVmZmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBsZXQgcmF3Qm9keTogQnVmZmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgICAgICAgIGZvciBhd2FpdCAobGV0IGNodW5rIG9mIHJlcykge1xuICAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgICAgICAgICAgICBsZW5ndGggKz0gQnVmZmVyLmJ5dGVMZW5ndGgoY2h1bmspXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmtzWzBdKSkge1xuICAgICAgICAgICAgICAgcmF3Qm9keSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzLCBsZW5ndGgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgcmF3Qm9keSA9IEJ1ZmZlci5mcm9tKGNodW5rcy5qb2luKCcnKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIHx8ICcnXG5cbiAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+PSAwKSB7XG4gICAgICAgICAgICAgICByZXN1bHRzID0gSlNPTi5wYXJzZShyYXdCb2R5LnRvU3RyaW5nKCd1dGY4JykpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJhd0JvZHlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wdXNoKHJlc3VsdHMpXG4gICAgICAgICAgICB0aGlzLnB1c2gobnVsbClcbiAgICAgICAgIH0pXG5cbiAgICAgICAgIHJlcS5lbmQoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICB0aGlzLmRlc3Ryb3koZXJyKVxuICAgICAgfVxuICAgfVxufVxuXG4vLyBjbGFzcyBIdHRwV3JpdGVTdHJlYW0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuLy8gICAgcmVhZG9ubHkgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zXG5cbi8vICAgIGNvbnN0cnVjdG9yKHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucywgc3RyZWFtT3B0aW9uczogVHJhbnNmb3JtT3B0aW9ucykge1xuLy8gICAgICAgc3VwZXIoc3RyZWFtT3B0aW9ucylcbi8vICAgICAgIHRoaXMucmVxdWVzdE9wdGlvbnMgPSByZXF1ZXN0T3B0aW9uc1xuLy8gICAgfVxuXG4vLyAgICBfdHJhbnNmb3JtKGNodW5rOiBhbnksIGVuY29kaW5nOiBzdHJpbmcsIGNiOiAoZXJyb3I/OiBFcnJvciB8IHVuZGVmaW5lZCwgZGF0YT86IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgXG4vLyAgICB9XG4vLyB9XG5cbmV4cG9ydCBjbGFzcyBGb3JnZUh0dHBQbHVnaW4gaW1wbGVtZW50cyBJUGx1Z2luIHtcbiAgIHN0YXRpYyByZWFkb25seSB0eXBlOiBzdHJpbmcgPSAnZm9yZ2UtaW50ZXJuYWwtcmVzdC1wbHVnaW4nXG4gICByZWFkb25seSBuYW1lOiBzdHJpbmcgPSBGb3JnZUh0dHBQbHVnaW4udHlwZVxuXG5cbiAgIC8qXG4gICAgICAgICAgIHByb3RvY29sPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgaG9zdD86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgIGhvc3RuYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgZmFtaWx5PzogbnVtYmVyO1xuICAgICAgICAgICBwb3J0PzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgZGVmYXVsdFBvcnQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgICAgICAgIGxvY2FsQWRkcmVzcz86IHN0cmluZztcbiAgICAgICAgICAgc29ja2V0UGF0aD86IHN0cmluZztcbiAgICAgICAgICAgbWV0aG9kPzogc3RyaW5nO1xuICAgICAgICAgICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgaGVhZGVycz86IE91dGdvaW5nSHR0cEhlYWRlcnM7XG4gICAgICAgICAgIGF1dGg/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICBhZ2VudD86IEFnZW50IHwgYm9vbGVhbjtcbiAgICAgICAgICAgX2RlZmF1bHRBZ2VudD86IEFnZW50O1xuICAgICAgICAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgICAgICAgICBzZXRIb3N0PzogYm9vbGVhbjtcbiAgICovXG5cbiAgIC8qXG4gICAgICBhbGlhczogJy4uJyxcbiAgICAgIHBsdWdpbjogJzpyZXN0JyxcbiAgICAgIHZlcmI6ICdnZXQnIC8vIHBvc3QsIHB1dCwgZGVsZXRlLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAgLi4uXG4gICAgICB9LFxuICAgICAgLy8gSWYgc2V0LCBwdXRzIHRoZSBzdHJlYW0gaW4gT2JqZWN0IE1vZGVcbiAgICAgIG9iamVjdE1vZGU6IHRydWV8ZmFsc2UgIC8vIGRlZmF1bHQgdHJ1ZVxuICAgICAgLy8gVGhlc2Ugb3B0aW9ucyBvdmVycmlkZSBhbnkgcHJldmlvdXNseSBzZXQgb3B0aW9uc1xuICAgICAgb3B0aW9uczogLy8gUmVxdWVzdE9wdGlvbnMsXG4gICAgICBzdHJlYW1PcHRpb25zOiB7fSAgICAvLyBSZWFkYWJsZU9wdGlvbnNcbiAgICovXG5cbiAgIC8qKlxuICAgICogXG4gICAgKiBcbiAgICAqIFxuICAgICogXG4gICAgKiBAcGFyYW0gc3RhdGUgXG4gICAgKiBAcGFyYW0gc3RlcCBcbiAgICAqIEByZXR1cm5zIFxuICAgICovXG4gICBhc3luYyByZWFkKHN0YXRlOiBJQnVpbGRTdGF0ZSwgc3RlcDogSVN0ZXApOiBQcm9taXNlPFJlYWRhYmxlPiB7XG4gICAgICBsZXQgeyBpbmZvIH0gPSBzdGVwXG4gICAgICBsZXQgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0ge31cbiAgICAgIGxldCBzdHJlYW1PcHRpb25zOiBSZWFkYWJsZU9wdGlvbnMgPSB7fVxuXG4gICAgICAvKlxuICAgICAgICAgeGZvcm0ub3B0aW9ucyhpbmZvLCB7XG4gICAgICAgICAgICB1cmw6IHtcbiAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgZXhpc3RzOiAodXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgdXJsID0gbmV3IFVSTChpbmZvLnVybClcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLnByb3RvY29sID0gdXJsLnByb3RvY29sXG4gICAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9ucy5ob3N0ID0gdXJsLmhvc3RcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLnBhdGggPSB1cmwucGF0aG5hbWVcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLnBvcnQgPSAodXJsLnBvcnQgPT09ICcnIHx8IHVybC5wb3J0ID09IG51bGwpID8gKFxuICAgICAgICAgICAgICAgICAgICAgdXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwXG4gICAgICAgICAgICAgICAgICApIDogdXJsLnBvcnRcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiB7XG4gICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgIG9wdGlvbnM6IFsnR0VUJywgJ1BPU1QnLCAnUFVUJywgJ0RFTEVURSddLFxuICAgICAgICAgICAgICAgZXhpc3RzOiB2ZXJiID0+IHJlcXVlc3RPcHRpb25zLm1ldGhvZCA9IGluZm8udmVyYlxuICAgICAgICAgICAgICAgZGVmYXVsdDogKCkgPT4gcmVxdWVzdE9wdGlvbnMubWV0aG9kID0gJ0dFVCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgIGV4aXN0czogaGVhZGVycyA9PiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gaW5mby5oZWFkZXJzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICBleGlzdHM6IG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgIC4uLmluZm8ub3B0aW9uc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9iamVjdE1vZGU6IHtcbiAgICAgICAgICAgICAgIHR5cGU6IFsnc3RyaW5nJywgJ2Jvb2xlYW4nXSxcbiAgICAgICAgICAgICAgIGV4aXN0czogKG9iamVjdE1vZGUsIHsgc3dpdGNoIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHN3aXRjaC50eXBlKG9iamVjdE1vZGUpXG4gICAgICAgICAgICAgICAgICAgICAuY2FzZSgnc3RyaW5nJywgKCkgPT4gc3RyZWFtT3B0aW9ucy5vYmplY3RNb2RlID0gaW5mby5vYmplY3RNb2RlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJylcbiAgICAgICAgICAgICAgICAgICAgIC5jYXNlKCdib29sZWFuJywgKCkgPT4gc3RyZWFtT3B0aW9ucy5vYmplY3RNb2RlID0gaW5mby5vYmplY3RNb2RlKVxuICAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQoKCkgPT4gdGhyb3cgbmV3IEVycm9yKCkpXG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICB9KVxuXG4gICAgICAqL1xuXG4gICAgICBpZiAoaW5mby51cmwgIT0gbnVsbCkge1xuICAgICAgICAgbGV0IHVybCA9IG5ldyBVUkwoaW5mby51cmwpXG4gICAgICAgICByZXF1ZXN0T3B0aW9ucy5wcm90b2NvbCA9IHVybC5wcm90b2NvbFxuICAgICAgICAgcmVxdWVzdE9wdGlvbnMuaG9zdCA9IHVybC5ob3N0XG4gICAgICAgICByZXF1ZXN0T3B0aW9ucy5wYXRoID0gdXJsLnBhdGhuYW1lXG4gICAgICAgICByZXF1ZXN0T3B0aW9ucy5wb3J0ID0gKHVybC5wb3J0ID09PSAnJyB8fCB1cmwucG9ydCA9PSBudWxsKSA/IChcbiAgICAgICAgICAgIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MFxuICAgICAgICAgKSA6IHVybC5wb3J0XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmZvLnZlcmIgIT0gbnVsbCkge1xuICAgICAgICAgcmVxdWVzdE9wdGlvbnMubWV0aG9kID0gaW5mby52ZXJiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgcmVxdWVzdE9wdGlvbnMubWV0aG9kID0gJ0dFVCdcbiAgICAgIH1cblxuICAgICAgaWYgKGluZm8uaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gaW5mby5oZWFkZXJzXG4gICAgICB9XG5cbiAgICAgIGlmIChpbmZvLm9wdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5yZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIC4uLmluZm8ub3B0aW9uc1xuICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihpbmZvLm9iamVjdE1vZGUgIT0gbnVsbCkge1xuICAgICAgICAgaWYodHlwZW9mIGluZm8ub2JqZWN0TW9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHN0cmVhbU9wdGlvbnMub2JqZWN0TW9kZSA9IGluZm8ub2JqZWN0TW9kZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcbiAgICAgICAgIH0gZWxzZSBpZih0eXBlb2YgaW5mby5vYmplY3RNb2RlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHN0cmVhbU9wdGlvbnMub2JqZWN0TW9kZSA9IGluZm8ub2JqZWN0TW9kZVxuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJ29iamVjdE1vZGUnIGlzIGV4cGVjdGVkIHRvIGJlIGEgc3RyaW5nIG9yIGEgYm9vbGVhbi4gUmVjZWl2ZWQgJHt0eXBlb2YgaW5mby5vYmplY3RNb2RlfSBpbnN0ZWFkLmApXG4gICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgc3RyZWFtT3B0aW9ucy5vYmplY3RNb2RlID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZihpbmZvLnN0cmVhbU9wdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgc3RyZWFtT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLnN0cmVhbU9wdGlvbnMsXG4gICAgICAgICAgICAuLi5pbmZvLnN0cmVhbU9wdGlvbnNcbiAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBIdHRwUmVhZFN0cmVhbShyZXF1ZXN0T3B0aW9ucywgc3RyZWFtT3B0aW9ucylcbiAgIH1cblxuICAgYXN5bmMgd3JpdGUoc3RhdGU6IElCdWlsZFN0YXRlLCBzdGVwOiBJU3RlcCk6IFByb21pc2U8V3JpdGFibGU+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gRW52b3kgaXMgc3VwcG9ydGVkIGZvciB0aGUgJHtGb3JnZUh0dHBQbHVnaW4udHlwZX1gKVxuICAgfVxuXG4gICBhc3luYyB0cmFuc2Zvcm0oc3RhdGU6IElCdWlsZFN0YXRlLCBzdGVwOiBJU3RlcCk6IFByb21pc2U8VHJhbnNmb3JtPiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEVudm95IGlzIHN1cHBvcnRlZCBmb3IgdGhlICR7Rm9yZ2VIdHRwUGx1Z2luLnR5cGV9YClcbiAgIH1cbn0iXX0=
{
"name": "@spikedpunch/forge",
"version": "0.1.2",
"version": "0.1.3",
"description": "Quickly and easily setup a series of streams to move and transform data",

@@ -9,2 +9,6 @@ "main": "dist/index.js",

},
"repository": {
"type": "git",
"url": "https://github.com/SpikedPunchVictim/forge"
},
"scripts": {

@@ -11,0 +15,0 @@ "build": "rimraf ./dist && tsc",

@@ -18,10 +18,10 @@ # forge

{
alias: 'read',
plugin: ':http',
alias: 'brewery', // An arbitrary name for this step
plugin: ':http', // The plugin to use. Forge has built in plugins like :http
url: 'https://api.openbrewerydb.org/breweries'
},
{
alias: 'console',
use: 'read',
plugin: ':fn',
alias: 'console', // This step's name
use: 'brewery', // Read the data from the 'brewery' stream
plugin: ':fn', // Custom plugin to define your stream inline
fn: async (chunk) => { console.log(JSON.stringify(chunk)) }

@@ -37,9 +37,16 @@ }

module.exports = {
resolve: [ // A list of relative paths used to resolve file paths
resolve: [ // Reference file paths in your config? This property helps resolve those paths
'relative/path/to/files'
],
init: async (configAssist) => {
init: async (configAssist) => {
// Perform some initialization before running
// And collect your environment variables/secrets/etc to use later
// Return an config object that can be used to create Plugins or configure Steps
},
plugins: [
// Plugins extend forge's functionality.
// They may write to S3, GMail, etc.
// forge comes with a set of builtin plugins,
// denoted with a ':' as the first letter of
// the plugin name.
{ name: 'json', plugin: new JsonPlugin() },

@@ -57,9 +64,8 @@ async (config) => {

pipelines: {
// Unique pipeline name
xform: {
xform: { // The property name becomes the pipeline name
resolve: [
// These are used to resolve paths only in this pipeline
// These are used to resolve paths only in this pipeline
],
steps: [
//...
// The pipeline's steps
]

@@ -72,2 +78,4 @@ }

The Pipelines can become as complex as you need them, with ReadStreams writing to multiple WriteStreams, and throw in some TransformStreams, and you can send your data anywhere and define the steps quickly. `forge` will build a Stream pipeline that will manage backpressure and error handling.
## Properties

@@ -74,0 +82,0 @@

@@ -24,4 +24,2 @@ import { URL } from 'url'

let req = httpProtocol.request(this.requestOptions, async (res) => {
console.log(res)
let chunks = new Array<any>()

@@ -28,0 +26,0 @@ let length = 0

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc