obsidian-dev-utils 80.1.0 → 81.0.0
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/CHANGELOG.md +11 -0
- package/dist/dev/main.js +30208 -0
- package/dist/dev/manifest.json +9 -0
- package/dist/lib/cjs/async-events.cjs +9 -1
- package/dist/lib/cjs/async-events.d.cts +8 -0
- package/dist/lib/cjs/async.cjs +89 -34
- package/dist/lib/cjs/async.d.cts +67 -15
- package/dist/lib/cjs/debug.cjs +26 -9
- package/dist/lib/cjs/debug.d.cts +23 -5
- package/dist/lib/cjs/error.cjs +4 -5
- package/dist/lib/cjs/error.d.cts +19 -4
- package/dist/lib/cjs/html-element.cjs +1 -1
- package/dist/lib/cjs/html-element.d.cts +2 -0
- package/dist/lib/cjs/library.cjs +2 -2
- package/dist/lib/cjs/object-utils.cjs +233 -128
- package/dist/lib/cjs/object-utils.d.cts +19 -4
- package/dist/lib/cjs/obsidian/async-with-notice.cjs +9 -6
- package/dist/lib/cjs/obsidian/async-with-notice.d.cts +9 -0
- package/dist/lib/cjs/obsidian/attachment-path.cjs +45 -13
- package/dist/lib/cjs/obsidian/attachment-path.d.cts +38 -8
- package/dist/lib/cjs/obsidian/backlink.cjs +6 -6
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +53 -16
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +81 -9
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +25 -5
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +35 -1
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +33 -19
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +43 -17
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +33 -19
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +43 -17
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +17 -9
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +48 -8
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +24 -8
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +25 -4
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +144 -65
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +3 -0
- package/dist/lib/cjs/obsidian/dataview-link.cjs +7 -2
- package/dist/lib/cjs/obsidian/dataview-link.d.cts +20 -5
- package/dist/lib/cjs/obsidian/dataview.cjs +27 -10
- package/dist/lib/cjs/obsidian/dataview.d.cts +19 -4
- package/dist/lib/cjs/obsidian/file-change.cjs +103 -27
- package/dist/lib/cjs/obsidian/file-change.d.cts +50 -13
- package/dist/lib/cjs/obsidian/file-manager.cjs +61 -32
- package/dist/lib/cjs/obsidian/file-manager.d.cts +63 -13
- package/dist/lib/cjs/obsidian/file-system.cjs +122 -23
- package/dist/lib/cjs/obsidian/file-system.d.cts +168 -39
- package/dist/lib/cjs/obsidian/frontmatter.cjs +7 -2
- package/dist/lib/cjs/obsidian/link.cjs +266 -122
- package/dist/lib/cjs/obsidian/link.d.cts +84 -20
- package/dist/lib/cjs/obsidian/logger.cjs +48 -22
- package/dist/lib/cjs/obsidian/logger.d.cts +26 -5
- package/dist/lib/cjs/obsidian/loop.cjs +14 -4
- package/dist/lib/cjs/obsidian/loop.d.cts +5 -0
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +155 -107
- package/dist/lib/cjs/obsidian/markdown.cjs +40 -11
- package/dist/lib/cjs/obsidian/markdown.d.cts +76 -16
- package/dist/lib/cjs/obsidian/metadata-cache.cjs +28 -14
- package/dist/lib/cjs/obsidian/metadata-cache.d.cts +76 -16
- package/dist/lib/cjs/obsidian/path-settings.cjs +5 -2
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +5 -1
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +4 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +15 -7
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +39 -8
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +3 -2
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +4 -4
- package/dist/lib/cjs/obsidian/queue.cjs +9 -7
- package/dist/lib/cjs/obsidian/resource-url.cjs +7 -2
- package/dist/lib/cjs/obsidian/resource-url.d.cts +19 -4
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +4 -2
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.d.cts +6 -2
- package/dist/lib/cjs/obsidian/vault-delete.cjs +19 -15
- package/dist/lib/cjs/obsidian/vault-delete.d.cts +11 -6
- package/dist/lib/cjs/obsidian/vault.cjs +116 -59
- package/dist/lib/cjs/obsidian/vault.d.cts +178 -41
- package/dist/lib/cjs/path.cjs +12 -5
- package/dist/lib/cjs/path.d.cts +15 -3
- package/dist/lib/cjs/reg-exp.cjs +101 -78
- package/dist/lib/cjs/script-utils/build.cjs +9 -5
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +34 -14
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +20 -5
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +23 -5
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +11 -4
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +6 -2
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +31 -12
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +19 -4
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +7 -7
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +12 -3
- package/dist/lib/cjs/script-utils/cli-utils.cjs +6 -2
- package/dist/lib/cjs/script-utils/exec.cjs +47 -12
- package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -3
- package/dist/lib/cjs/script-utils/json.cjs +9 -5
- package/dist/lib/cjs/script-utils/json.d.cts +38 -8
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +8 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +27 -7
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +7 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +8 -3
- package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -3
- package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +3 -3
- package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +72 -30
- package/dist/lib/cjs/script-utils/npm-publish.cjs +2 -2
- package/dist/lib/cjs/script-utils/npm.cjs +18 -9
- package/dist/lib/cjs/script-utils/root.cjs +20 -5
- package/dist/lib/cjs/script-utils/root.d.cts +45 -9
- package/dist/lib/cjs/script-utils/validate-declarations.cjs +4 -3
- package/dist/lib/cjs/script-utils/version.cjs +36 -19
- package/dist/lib/cjs/strict-proxy.cjs +10 -1
- package/dist/lib/cjs/string.cjs +63 -22
- package/dist/lib/cjs/string.d.cts +188 -40
- package/dist/lib/esm/async-events.d.mts +8 -0
- package/dist/lib/esm/async-events.mjs +9 -1
- package/dist/lib/esm/async.d.mts +67 -15
- package/dist/lib/esm/async.mjs +89 -34
- package/dist/lib/esm/debug.d.mts +23 -5
- package/dist/lib/esm/debug.mjs +26 -9
- package/dist/lib/esm/error.d.mts +19 -4
- package/dist/lib/esm/error.mjs +4 -5
- package/dist/lib/esm/html-element.d.mts +2 -0
- package/dist/lib/esm/html-element.mjs +1 -1
- package/dist/lib/esm/library.mjs +2 -2
- package/dist/lib/esm/object-utils.d.mts +19 -4
- package/dist/lib/esm/object-utils.mjs +233 -128
- package/dist/lib/esm/obsidian/async-with-notice.d.mts +9 -0
- package/dist/lib/esm/obsidian/async-with-notice.mjs +9 -6
- package/dist/lib/esm/obsidian/attachment-path.d.mts +38 -8
- package/dist/lib/esm/obsidian/attachment-path.mjs +45 -13
- package/dist/lib/esm/obsidian/backlink.mjs +6 -6
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +81 -9
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +53 -16
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +35 -1
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +25 -5
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.d.mts +43 -17
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +33 -19
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.d.mts +43 -17
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +33 -19
- package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +48 -8
- package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +17 -9
- package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +25 -4
- package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +24 -8
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +3 -0
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +145 -69
- package/dist/lib/esm/obsidian/dataview-link.d.mts +20 -5
- package/dist/lib/esm/obsidian/dataview-link.mjs +7 -2
- package/dist/lib/esm/obsidian/dataview.d.mts +19 -4
- package/dist/lib/esm/obsidian/dataview.mjs +27 -10
- package/dist/lib/esm/obsidian/file-change.d.mts +50 -13
- package/dist/lib/esm/obsidian/file-change.mjs +104 -27
- package/dist/lib/esm/obsidian/file-manager.d.mts +63 -13
- package/dist/lib/esm/obsidian/file-manager.mjs +65 -33
- package/dist/lib/esm/obsidian/file-system.d.mts +168 -39
- package/dist/lib/esm/obsidian/file-system.mjs +122 -23
- package/dist/lib/esm/obsidian/frontmatter.mjs +7 -2
- package/dist/lib/esm/obsidian/link.d.mts +84 -20
- package/dist/lib/esm/obsidian/link.mjs +266 -122
- package/dist/lib/esm/obsidian/logger.d.mts +26 -5
- package/dist/lib/esm/obsidian/logger.mjs +48 -22
- package/dist/lib/esm/obsidian/loop.d.mts +5 -0
- package/dist/lib/esm/obsidian/loop.mjs +14 -4
- package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +155 -107
- package/dist/lib/esm/obsidian/markdown.d.mts +76 -16
- package/dist/lib/esm/obsidian/markdown.mjs +40 -11
- package/dist/lib/esm/obsidian/metadata-cache.d.mts +76 -16
- package/dist/lib/esm/obsidian/metadata-cache.mjs +28 -14
- package/dist/lib/esm/obsidian/path-settings.mjs +5 -2
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +4 -0
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +5 -1
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +39 -8
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +15 -7
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +4 -4
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +5 -7
- package/dist/lib/esm/obsidian/queue.mjs +9 -7
- package/dist/lib/esm/obsidian/resource-url.d.mts +19 -4
- package/dist/lib/esm/obsidian/resource-url.mjs +7 -2
- package/dist/lib/esm/obsidian/status-bar-item-registrar.d.mts +6 -2
- package/dist/lib/esm/obsidian/status-bar-item-registrar.mjs +4 -2
- package/dist/lib/esm/obsidian/vault-delete.d.mts +11 -6
- package/dist/lib/esm/obsidian/vault-delete.mjs +19 -15
- package/dist/lib/esm/obsidian/vault.d.mts +178 -41
- package/dist/lib/esm/obsidian/vault.mjs +116 -59
- package/dist/lib/esm/path.d.mts +15 -3
- package/dist/lib/esm/path.mjs +12 -5
- package/dist/lib/esm/reg-exp.mjs +101 -78
- package/dist/lib/esm/script-utils/build.mjs +9 -5
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +34 -14
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +23 -5
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +20 -5
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +11 -4
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +6 -2
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +19 -4
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +31 -12
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +7 -7
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +12 -3
- package/dist/lib/esm/script-utils/cli-utils.mjs +6 -2
- package/dist/lib/esm/script-utils/exec.mjs +47 -12
- package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -3
- package/dist/lib/esm/script-utils/json.d.mts +38 -8
- package/dist/lib/esm/script-utils/json.mjs +9 -5
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +8 -3
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +27 -7
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +7 -3
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +8 -3
- package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -3
- package/dist/lib/esm/script-utils/linters/markdownlint.mjs +3 -3
- package/dist/lib/esm/script-utils/linters/over-exposure.mjs +72 -30
- package/dist/lib/esm/script-utils/npm-publish.mjs +2 -2
- package/dist/lib/esm/script-utils/npm.mjs +18 -9
- package/dist/lib/esm/script-utils/root.d.mts +45 -9
- package/dist/lib/esm/script-utils/root.mjs +20 -5
- package/dist/lib/esm/script-utils/validate-declarations.mjs +4 -3
- package/dist/lib/esm/script-utils/version.mjs +36 -19
- package/dist/lib/esm/strict-proxy.mjs +10 -1
- package/dist/lib/esm/string.d.mts +188 -40
- package/dist/lib/esm/string.mjs +63 -22
- package/dist/styles.css +5 -1
- package/package.json +9 -9
|
@@ -159,7 +159,11 @@ function argvQuote(arg) {
|
|
|
159
159
|
}
|
|
160
160
|
const CMD_META_RE = /[()%!^"<>&|]/g;
|
|
161
161
|
function cmdEscapeCommandLine(commandLine) {
|
|
162
|
-
return replaceAll(
|
|
162
|
+
return replaceAll({
|
|
163
|
+
replacer: "^$&",
|
|
164
|
+
searchValue: CMD_META_RE,
|
|
165
|
+
str: commandLine
|
|
166
|
+
});
|
|
163
167
|
}
|
|
164
168
|
async function wrapCliTask(taskFn) {
|
|
165
169
|
enableLibraryDebuggers();
|
|
@@ -180,4 +184,4 @@ export {
|
|
|
180
184
|
toCommandLine,
|
|
181
185
|
wrapCliTask
|
|
182
186
|
};
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9jbGktdXRpbHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdGFzayByZXN1bHRzLCBpbmNsdWRpbmdcbiAqIHN1Y2Nlc3MsIGV4aXQgY29kZXMsIGFuZCBjaGFpbmluZyBtdWx0aXBsZSB0YXNrcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnLi4vdHlwZS50cyc7XG5cbmltcG9ydCB7IGVuYWJsZUxpYnJhcnlEZWJ1Z2dlcnMgfSBmcm9tICcuLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnLi4vZXJyb3IudHMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuLi9zdHJpbmcudHMnO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIGEgdGFzay4gSW5jbHVkZXMgbWV0aG9kcyBmb3IgaGFuZGxpbmcgc3VjY2VzcyxcbiAqIGV4aXQgY29kZXMsIGFuZCBjaGFpbmluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENsaVRhc2tSZXN1bHQge1xuICAvKipcbiAgICogQ2hhaW5zIG11bHRpcGxlIHRhc2tzIHRvZ2V0aGVyLCBleGVjdXRpbmcgdGhlbSBzZXF1ZW50aWFsbHkgdW50aWwgb25lIGZhaWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdGFza3MgLSBBbiBhcnJheSBvZiB0YXNrIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBgdm9pZGAuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZmlyc3QgZmFpbGVkIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBhIHN1Y2Nlc3MgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBjaGFpbih0YXNrczogKCgpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48Q2xpVGFza1Jlc3VsdD4+KVtdKTogUHJvbWlzZTxDbGlUYXNrUmVzdWx0PiB7XG4gICAgZm9yIChjb25zdCB0YXNrIG9mIHRhc2tzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cmFwUmVzdWx0KHRhc2spO1xuICAgICAgaWYgKCFyZXN1bHQuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQ2xpVGFza1Jlc3VsdC5TdWNjZXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSB0aGF0IGRvZXMgbm90IGV4aXQgdGhlIHByb2Nlc3MuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIENsaVRhc2tSZXN1bHR9IHRoYXQgZG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgRG9Ob3RFeGl0KCk6IENsaVRhc2tSZXN1bHQge1xuICAgIHJldHVybiBuZXcgRG9Ob3RFeGl0VGFza1Jlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZmFpbHVyZSByZXN1bHQgb2YgYSBDTEkgdGFzay5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGZhaWx1cmUgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBGYWlsdXJlKCk6IENsaVRhc2tSZXN1bHQge1xuICAgIHJldHVybiB0aGlzLlN1Y2Nlc3MoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gYmFzZWQgb24gYW4gZXhpdCBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gZXhpdENvZGUgLSBUaGUgZXhpdCBjb2RlIHRvIHJlcHJlc2VudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gcmVwcmVzZW50aW5nIHRoZSBleGl0IGNvZGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIEZyb21FeGl0Q29kZShleGl0Q29kZTogbnVtYmVyKTogQ2xpVGFza1Jlc3VsdCB7XG4gICAgcmV0dXJuIG5ldyBFeGl0Q29kZVRhc2tSZXN1bHQoZXhpdENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbGlUYXNrUmVzdWx0IHJlcHJlc2VudGluZyBhIHN1Y2Nlc3NmdWwgdGFzayByZXN1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBpc1N1Y2Nlc3MgLSBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB0YXNrIHdhcyBzdWNjZXNzZnVsLiBEZWZhdWx0IGlzIGB0cnVlYC5cbiAgICogQHJldHVybnMgQSBDbGlUYXNrUmVzdWx0IG9iamVjdCByZXByZXNlbnRpbmcgYSBzdWNjZXNzZnVsIHRhc2sgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBTdWNjZXNzKGlzU3VjY2VzcyA9IHRydWUpOiBDbGlUYXNrUmVzdWx0IHtcbiAgICByZXR1cm4gbmV3IFN1Y2Nlc3NUYXNrUmVzdWx0KGlzU3VjY2Vzcyk7XG4gIH1cblxuICAvKipcbiAgICogRXhpdHMgdGhlIHByb2Nlc3MgYmFzZWQgb24gdGhlIHRhc2sgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGV4aXQoKTogdm9pZDtcblxuICAvKipcbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSB0YXNrIHdhcyBub3Qgc3VjY2Vzc2Z1bC5cbiAgICovXG4gIHB1YmxpYyB0aHJvd09uRmFpbHVyZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGFzayBmYWlsZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdGFzayB3YXMgc3VjY2Vzc2Z1bC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0YXNrIHdhcyBzdWNjZXNzZnVsLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHRhc2sgcmVzdWx0IHRoYXQgZG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAqL1xuY2xhc3MgRG9Ob3RFeGl0VGFza1Jlc3VsdCBleHRlbmRzIENsaVRhc2tSZXN1bHQge1xuICAvKipcbiAgICogRG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBleGl0KCk6IHZvaWQge1xuICAgIG5vb3AoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHRhc2sgcmVzdWx0IGJhc2VkIG9uIGFuIGV4aXQgY29kZS5cbiAqL1xuY2xhc3MgRXhpdENvZGVUYXNrUmVzdWx0IGV4dGVuZHMgQ2xpVGFza1Jlc3VsdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXIpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4aXRzIHRoZSBwcm9jZXNzIHdpdGggdGhlIHNwZWNpZmllZCBleGl0IGNvZGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZXhpdCgpOiB2b2lkIHtcbiAgICBwcm9jZXNzLmV4aXQodGhpcy5leGl0Q29kZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaXNTdWNjZXNzZnVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4aXRDb2RlID09PSAwO1xuICB9XG59XG5cbi8qKlxuICogQSB0YXNrIHJlc3VsdCBiYXNlZCBvbiBzdWNjZXNzIG9yIGZhaWx1cmUuXG4gKi9cbmNsYXNzIFN1Y2Nlc3NUYXNrUmVzdWx0IGV4dGVuZHMgQ2xpVGFza1Jlc3VsdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9pc1N1Y2Nlc3NmdWw6IGJvb2xlYW4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4aXRzIHRoZSBwcm9jZXNzIGJhc2VkIG9uIHRoZSBzdWNjZXNzIG9mIHRoZSB0YXNrLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGV4aXQoKTogdm9pZCB7XG4gICAgcHJvY2Vzcy5leGl0KHRoaXMuX2lzU3VjY2Vzc2Z1bCA/IDAgOiAxKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VjY2Vzc2Z1bDtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBjb21tYW5kLWxpbmUgc3RyaW5nXG4gKiB1c2luZyB0aGUgYENvbW1hbmRMaW5lVG9Bcmd2V2AgY29udmVudGlvbiAodGhlIHN0YW5kYXJkIHVzZWQgYnkgdGhlXG4gKiBNaWNyb3NvZnQgQyBydW50aW1lIGFuZCBtb3N0IFdpbmRvd3MgcHJvZ3JhbXMpLlxuICpcbiAqIEltcGxlbWVudHMgdGhlIEFyZ3ZRdW90ZSBhbGdvcml0aG0gZnJvbVxuICoge0BsaW5rIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9hcmNoaXZlL2Jsb2dzL3R3aXN0eWxpdHRsZXBhc3NhZ2VzYWxsYWxpa2UvZXZlcnlvbmUtcXVvdGVzLWNvbW1hbmQtbGluZS1hcmd1bWVudHMtdGhlLXdyb25nLXdheSB8IEV2ZXJ5b25lIHF1b3RlcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRoZSB3cm9uZyB3YXl9OlxuICogYmFja3NsYXNoZXMgYmVmb3JlIHF1b3RlcyBhbmQgYXQgdGhlIGVuZCBvZiBhIHF1b3RlZCBhcmd1bWVudCBhcmUgZG91YmxlZC5cbiAqXG4gKiBUaGlzIHByb2R1Y2VzIGEgc2hlbGwtYWdub3N0aWMgY29tbWFuZCBsaW5lLiBDYWxsZXJzIHRoYXQgcm91dGUgdGhyb3VnaFxuICogYSBzcGVjaWZpYyBzaGVsbCAoY21kLmV4ZSwgUG93ZXJTaGVsbCwgc2gpIG11c3QgYXBwbHkgc2hlbGwtc3BlY2lmaWNcbiAqIGVzY2FwaW5nIG9uIHRvcCBcdTIwMTQgc2VlIHtAbGluayBjbWRFc2NhcGVDb21tYW5kTGluZX0uXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJyYXkgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb21tYW5kLWxpbmUgaW52b2NhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29tbWFuZExpbmUoYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYXJncy5tYXAoKGFyZykgPT4gYXJndlF1b3RlKGFyZykpLmpvaW4oJyAnKTtcbn1cblxuLyoqXG4gKiBRdW90ZXMgYSBzaW5nbGUgYXJndW1lbnQgc28gdGhhdCBgQ29tbWFuZExpbmVUb0FyZ3ZXYCB3aWxsIGRlY29kZSBpdFxuICogdW5jaGFuZ2VkLiBJbXBsZW1lbnRzIHRoZSBBcmd2UXVvdGUgYWxnb3JpdGhtIGZyb21cbiAqIHtAbGluayBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vYXJjaGl2ZS9ibG9ncy90d2lzdHlsaXR0bGVwYXNzYWdlc2FsbGFsaWtlL2V2ZXJ5b25lLXF1b3Rlcy1jb21tYW5kLWxpbmUtYXJndW1lbnRzLXRoZS13cm9uZy13YXkgfCBFdmVyeW9uZSBxdW90ZXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0aGUgd3Jvbmcgd2F5fS5cbiAqXG4gKiBAcGFyYW0gYXJnIC0gVGhlIHJhdyBhcmd1bWVudCBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgcXVvdGVkIGFyZ3VtZW50IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYXJndlF1b3RlKGFyZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGFyZy5sZW5ndGggPiAwICYmICEvW1xcc1xcdFxcblxcdlwiXS8udGVzdChhcmcpKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfVxuXG4gIGNvbnN0IEJBQ0tTTEFTSF9FU0NBUEVfRkFDVE9SID0gMjtcbiAgbGV0IHJlc3VsdCA9ICdcIic7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG51bUJhY2tzbGFzaGVzID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZy5sZW5ndGggJiYgYXJnW2ldID09PSAnXFxcXCcpIHtcbiAgICAgIGkrKztcbiAgICAgIG51bUJhY2tzbGFzaGVzKys7XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IGFyZy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCArPSAnXFxcXCcucmVwZWF0KG51bUJhY2tzbGFzaGVzICogQkFDS1NMQVNIX0VTQ0FQRV9GQUNUT1IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgY2ggPSBhcmcuY2hhckF0KGkpO1xuICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgcmVzdWx0ICs9IGAkeydcXFxcJy5yZXBlYXQobnVtQmFja3NsYXNoZXMgKiBCQUNLU0xBU0hfRVNDQVBFX0ZBQ1RPUiArIDEpfVwiYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ICs9ICdcXFxcJy5yZXBlYXQobnVtQmFja3NsYXNoZXMpICsgY2g7XG4gICAgfVxuICB9XG5cbiAgcmVzdWx0ICs9ICdcIic7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogTWF0Y2hlcyBgY21kLmV4ZWAgbWV0YWNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGBeYC1lc2NhcGVkLlxuICovXG5jb25zdCBDTURfTUVUQV9SRSA9IC9bKCklIV5cIjw+JnxdL2c7XG5cbi8qKlxuICogRXNjYXBlcyBgY21kLmV4ZWAgbWV0YWNoYXJhY3RlcnMgd2l0aCBgXmAgc28gdGhhdCBgY21kLmV4ZWAgcGFzc2VzIHRoZW1cbiAqIHRocm91Z2ggbGl0ZXJhbGx5LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBjbWQuZXhlYCdzIGBcImAgaGFuZGxpbmdcbiAqIGRpZmZlcnMgZnJvbSBgQ29tbWFuZExpbmVUb0FyZ3ZXYCBhbmQgY2Fubm90IGJlIHJlbGllZCB1cG9uLlxuICpcbiAqIEFwcGx5IHRoaXMgdG8gYSBjb21tYW5kIGxpbmUgc3RyaW5nIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB2aWEgYGNtZC5leGVgXG4gKiAoZS5nLiwgYHNwYXduKGNtZCwgW10sIHsgc2hlbGw6IHRydWUgfSlgIG9uIFdpbmRvd3MpLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kTGluZSAtIFRoZSBhbHJlYWR5LXF1b3RlZCBjb21tYW5kIGxpbmUgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB3aXRoIGFsbCBjbWQgbWV0YWNoYXJhY3RlcnMgYF5gLWVzY2FwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbWRFc2NhcGVDb21tYW5kTGluZShjb21tYW5kTGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoY29tbWFuZExpbmUsIENNRF9NRVRBX1JFLCAnXiQmJyk7XG59XG5cbi8qKlxuICogV3JhcHMgYSBDTEkgdGFzayBmdW5jdGlvbiB0byBlbnN1cmUgaXQgcnVucyBzYWZlbHkgYW5kIGhhbmRsZXMgaXRzIHtAbGluayBDbGlUYXNrUmVzdWx0fS5cbiAqXG4gKiBAcGFyYW0gdGFza0ZuIC0gVGhlIHRhc2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSwgd2hpY2ggbWF5IHJldHVybiBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBgdm9pZGAuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRhc2sgaXMgY29tcGxldGVkIGFuZCBleGl0cyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzdGF0dXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cmFwQ2xpVGFzayh0YXNrRm46ICgpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48Q2xpVGFza1Jlc3VsdD4+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGVuYWJsZUxpYnJhcnlEZWJ1Z2dlcnMoKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcFJlc3VsdCh0YXNrRm4pO1xuICByZXN1bHQuZXhpdCgpO1xufVxuXG4vKipcbiAqIFNhZmVseSBleGVjdXRlcyBhIHRhc2sgZnVuY3Rpb24gYW5kIHJldHVybnMgYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0uIElmIHRoZSB0YXNrIGZ1bmN0aW9uIHRocm93cyBhbiBlcnJvcixcbiAqIEFuIGVycm9yIGlzIGNhdWdodCwgYW5kIGEgZmFpbHVyZSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHRhc2tGbiAtIFRoZSB0YXNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gcmVwcmVzZW50aW5nIHRoZSBvdXRjb21lIG9mIHRoZSB0YXNrLlxuICovXG5hc3luYyBmdW5jdGlvbiB3cmFwUmVzdWx0KHRhc2tGbjogKCkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxDbGlUYXNrUmVzdWx0Pj4pOiBQcm9taXNlPENsaVRhc2tSZXN1bHQ+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHRhc2tGbigpKSBhcyBDbGlUYXNrUmVzdWx0IHwgdW5kZWZpbmVkID8/IENsaVRhc2tSZXN1bHQuU3VjY2VzcygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IobmV3IEVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGFzayBleGVjdXRpb24nLCB7IGNhdXNlOiBlcnJvciB9KSk7XG4gICAgcmV0dXJuIENsaVRhc2tSZXN1bHQuRmFpbHVyZSgpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLE9BQU8sYUFBYTtBQUlwQixTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLGtCQUFrQjtBQUMzQixTQUFTLFlBQVk7QUFDckIsU0FBUyxrQkFBa0I7QUFNcEIsTUFBZSxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPbEMsYUFBb0IsTUFBTSxPQUFpRjtBQUN6RyxlQUFXLFFBQVEsT0FBTztBQUN4QixZQUFNLFNBQVMsTUFBTSxXQUFXLElBQUk7QUFDcEMsVUFBSSxDQUFDLE9BQU8sYUFBYSxHQUFHO0FBQzFCLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUVBLFdBQU8sY0FBYyxRQUFRO0FBQUEsRUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLFlBQTJCO0FBQ3ZDLFdBQU8sSUFBSSxvQkFBb0I7QUFBQSxFQUNqQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE9BQWMsVUFBeUI7QUFDckMsV0FBTyxLQUFLLFFBQVEsS0FBSztBQUFBLEVBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxPQUFjLGFBQWEsVUFBaUM7QUFDMUQsV0FBTyxJQUFJLG1CQUFtQixRQUFRO0FBQUEsRUFDeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE9BQWMsUUFBUSxZQUFZLE1BQXFCO0FBQ3JELFdBQU8sSUFBSSxrQkFBa0IsU0FBUztBQUFBLEVBQ3hDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVTyxpQkFB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
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9jbGktdXRpbHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdGFzayByZXN1bHRzLCBpbmNsdWRpbmdcbiAqIHN1Y2Nlc3MsIGV4aXQgY29kZXMsIGFuZCBjaGFpbmluZyBtdWx0aXBsZSB0YXNrcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnLi4vdHlwZS50cyc7XG5cbmltcG9ydCB7IGVuYWJsZUxpYnJhcnlEZWJ1Z2dlcnMgfSBmcm9tICcuLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnLi4vZXJyb3IudHMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuLi9zdHJpbmcudHMnO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIGEgdGFzay4gSW5jbHVkZXMgbWV0aG9kcyBmb3IgaGFuZGxpbmcgc3VjY2VzcyxcbiAqIGV4aXQgY29kZXMsIGFuZCBjaGFpbmluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENsaVRhc2tSZXN1bHQge1xuICAvKipcbiAgICogQ2hhaW5zIG11bHRpcGxlIHRhc2tzIHRvZ2V0aGVyLCBleGVjdXRpbmcgdGhlbSBzZXF1ZW50aWFsbHkgdW50aWwgb25lIGZhaWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdGFza3MgLSBBbiBhcnJheSBvZiB0YXNrIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBgdm9pZGAuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZmlyc3QgZmFpbGVkIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBhIHN1Y2Nlc3MgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBjaGFpbih0YXNrczogKCgpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48Q2xpVGFza1Jlc3VsdD4+KVtdKTogUHJvbWlzZTxDbGlUYXNrUmVzdWx0PiB7XG4gICAgZm9yIChjb25zdCB0YXNrIG9mIHRhc2tzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cmFwUmVzdWx0KHRhc2spO1xuICAgICAgaWYgKCFyZXN1bHQuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQ2xpVGFza1Jlc3VsdC5TdWNjZXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSB0aGF0IGRvZXMgbm90IGV4aXQgdGhlIHByb2Nlc3MuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIENsaVRhc2tSZXN1bHR9IHRoYXQgZG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgRG9Ob3RFeGl0KCk6IENsaVRhc2tSZXN1bHQge1xuICAgIHJldHVybiBuZXcgRG9Ob3RFeGl0VGFza1Jlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZmFpbHVyZSByZXN1bHQgb2YgYSBDTEkgdGFzay5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGZhaWx1cmUgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBGYWlsdXJlKCk6IENsaVRhc2tSZXN1bHQge1xuICAgIHJldHVybiB0aGlzLlN1Y2Nlc3MoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gYmFzZWQgb24gYW4gZXhpdCBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gZXhpdENvZGUgLSBUaGUgZXhpdCBjb2RlIHRvIHJlcHJlc2VudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gcmVwcmVzZW50aW5nIHRoZSBleGl0IGNvZGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIEZyb21FeGl0Q29kZShleGl0Q29kZTogbnVtYmVyKTogQ2xpVGFza1Jlc3VsdCB7XG4gICAgcmV0dXJuIG5ldyBFeGl0Q29kZVRhc2tSZXN1bHQoZXhpdENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbGlUYXNrUmVzdWx0IHJlcHJlc2VudGluZyBhIHN1Y2Nlc3NmdWwgdGFzayByZXN1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBpc1N1Y2Nlc3MgLSBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB0YXNrIHdhcyBzdWNjZXNzZnVsLiBEZWZhdWx0IGlzIGB0cnVlYC5cbiAgICogQHJldHVybnMgQSBDbGlUYXNrUmVzdWx0IG9iamVjdCByZXByZXNlbnRpbmcgYSBzdWNjZXNzZnVsIHRhc2sgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBTdWNjZXNzKGlzU3VjY2VzcyA9IHRydWUpOiBDbGlUYXNrUmVzdWx0IHtcbiAgICByZXR1cm4gbmV3IFN1Y2Nlc3NUYXNrUmVzdWx0KGlzU3VjY2Vzcyk7XG4gIH1cblxuICAvKipcbiAgICogRXhpdHMgdGhlIHByb2Nlc3MgYmFzZWQgb24gdGhlIHRhc2sgcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGV4aXQoKTogdm9pZDtcblxuICAvKipcbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSB0YXNrIHdhcyBub3Qgc3VjY2Vzc2Z1bC5cbiAgICovXG4gIHB1YmxpYyB0aHJvd09uRmFpbHVyZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGFzayBmYWlsZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdGFzayB3YXMgc3VjY2Vzc2Z1bC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0YXNrIHdhcyBzdWNjZXNzZnVsLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHRhc2sgcmVzdWx0IHRoYXQgZG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAqL1xuY2xhc3MgRG9Ob3RFeGl0VGFza1Jlc3VsdCBleHRlbmRzIENsaVRhc2tSZXN1bHQge1xuICAvKipcbiAgICogRG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBleGl0KCk6IHZvaWQge1xuICAgIG5vb3AoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHRhc2sgcmVzdWx0IGJhc2VkIG9uIGFuIGV4aXQgY29kZS5cbiAqL1xuY2xhc3MgRXhpdENvZGVUYXNrUmVzdWx0IGV4dGVuZHMgQ2xpVGFza1Jlc3VsdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXIpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4aXRzIHRoZSBwcm9jZXNzIHdpdGggdGhlIHNwZWNpZmllZCBleGl0IGNvZGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZXhpdCgpOiB2b2lkIHtcbiAgICBwcm9jZXNzLmV4aXQodGhpcy5leGl0Q29kZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaXNTdWNjZXNzZnVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4aXRDb2RlID09PSAwO1xuICB9XG59XG5cbi8qKlxuICogQSB0YXNrIHJlc3VsdCBiYXNlZCBvbiBzdWNjZXNzIG9yIGZhaWx1cmUuXG4gKi9cbmNsYXNzIFN1Y2Nlc3NUYXNrUmVzdWx0IGV4dGVuZHMgQ2xpVGFza1Jlc3VsdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9pc1N1Y2Nlc3NmdWw6IGJvb2xlYW4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4aXRzIHRoZSBwcm9jZXNzIGJhc2VkIG9uIHRoZSBzdWNjZXNzIG9mIHRoZSB0YXNrLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGV4aXQoKTogdm9pZCB7XG4gICAgcHJvY2Vzcy5leGl0KHRoaXMuX2lzU3VjY2Vzc2Z1bCA/IDAgOiAxKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VjY2Vzc2Z1bDtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBjb21tYW5kLWxpbmUgc3RyaW5nXG4gKiB1c2luZyB0aGUgYENvbW1hbmRMaW5lVG9Bcmd2V2AgY29udmVudGlvbiAodGhlIHN0YW5kYXJkIHVzZWQgYnkgdGhlXG4gKiBNaWNyb3NvZnQgQyBydW50aW1lIGFuZCBtb3N0IFdpbmRvd3MgcHJvZ3JhbXMpLlxuICpcbiAqIEltcGxlbWVudHMgdGhlIEFyZ3ZRdW90ZSBhbGdvcml0aG0gZnJvbVxuICoge0BsaW5rIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9hcmNoaXZlL2Jsb2dzL3R3aXN0eWxpdHRsZXBhc3NhZ2VzYWxsYWxpa2UvZXZlcnlvbmUtcXVvdGVzLWNvbW1hbmQtbGluZS1hcmd1bWVudHMtdGhlLXdyb25nLXdheSB8IEV2ZXJ5b25lIHF1b3RlcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRoZSB3cm9uZyB3YXl9OlxuICogYmFja3NsYXNoZXMgYmVmb3JlIHF1b3RlcyBhbmQgYXQgdGhlIGVuZCBvZiBhIHF1b3RlZCBhcmd1bWVudCBhcmUgZG91YmxlZC5cbiAqXG4gKiBUaGlzIHByb2R1Y2VzIGEgc2hlbGwtYWdub3N0aWMgY29tbWFuZCBsaW5lLiBDYWxsZXJzIHRoYXQgcm91dGUgdGhyb3VnaFxuICogYSBzcGVjaWZpYyBzaGVsbCAoY21kLmV4ZSwgUG93ZXJTaGVsbCwgc2gpIG11c3QgYXBwbHkgc2hlbGwtc3BlY2lmaWNcbiAqIGVzY2FwaW5nIG9uIHRvcCBcdTIwMTQgc2VlIHtAbGluayBjbWRFc2NhcGVDb21tYW5kTGluZX0uXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJyYXkgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb21tYW5kLWxpbmUgaW52b2NhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29tbWFuZExpbmUoYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYXJncy5tYXAoKGFyZykgPT4gYXJndlF1b3RlKGFyZykpLmpvaW4oJyAnKTtcbn1cblxuLyoqXG4gKiBRdW90ZXMgYSBzaW5nbGUgYXJndW1lbnQgc28gdGhhdCBgQ29tbWFuZExpbmVUb0FyZ3ZXYCB3aWxsIGRlY29kZSBpdFxuICogdW5jaGFuZ2VkLiBJbXBsZW1lbnRzIHRoZSBBcmd2UXVvdGUgYWxnb3JpdGhtIGZyb21cbiAqIHtAbGluayBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vYXJjaGl2ZS9ibG9ncy90d2lzdHlsaXR0bGVwYXNzYWdlc2FsbGFsaWtlL2V2ZXJ5b25lLXF1b3Rlcy1jb21tYW5kLWxpbmUtYXJndW1lbnRzLXRoZS13cm9uZy13YXkgfCBFdmVyeW9uZSBxdW90ZXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0aGUgd3Jvbmcgd2F5fS5cbiAqXG4gKiBAcGFyYW0gYXJnIC0gVGhlIHJhdyBhcmd1bWVudCBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgcXVvdGVkIGFyZ3VtZW50IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYXJndlF1b3RlKGFyZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGFyZy5sZW5ndGggPiAwICYmICEvW1xcc1xcdFxcblxcdlwiXS8udGVzdChhcmcpKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfVxuXG4gIGNvbnN0IEJBQ0tTTEFTSF9FU0NBUEVfRkFDVE9SID0gMjtcbiAgbGV0IHJlc3VsdCA9ICdcIic7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG51bUJhY2tzbGFzaGVzID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZy5sZW5ndGggJiYgYXJnW2ldID09PSAnXFxcXCcpIHtcbiAgICAgIGkrKztcbiAgICAgIG51bUJhY2tzbGFzaGVzKys7XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IGFyZy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCArPSAnXFxcXCcucmVwZWF0KG51bUJhY2tzbGFzaGVzICogQkFDS1NMQVNIX0VTQ0FQRV9GQUNUT1IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgY2ggPSBhcmcuY2hhckF0KGkpO1xuICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgcmVzdWx0ICs9IGAkeydcXFxcJy5yZXBlYXQobnVtQmFja3NsYXNoZXMgKiBCQUNLU0xBU0hfRVNDQVBFX0ZBQ1RPUiArIDEpfVwiYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ICs9ICdcXFxcJy5yZXBlYXQobnVtQmFja3NsYXNoZXMpICsgY2g7XG4gICAgfVxuICB9XG5cbiAgcmVzdWx0ICs9ICdcIic7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogTWF0Y2hlcyBgY21kLmV4ZWAgbWV0YWNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGBeYC1lc2NhcGVkLlxuICovXG5jb25zdCBDTURfTUVUQV9SRSA9IC9bKCklIV5cIjw+JnxdL2c7XG5cbi8qKlxuICogRXNjYXBlcyBgY21kLmV4ZWAgbWV0YWNoYXJhY3RlcnMgd2l0aCBgXmAgc28gdGhhdCBgY21kLmV4ZWAgcGFzc2VzIHRoZW1cbiAqIHRocm91Z2ggbGl0ZXJhbGx5LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBjbWQuZXhlYCdzIGBcImAgaGFuZGxpbmdcbiAqIGRpZmZlcnMgZnJvbSBgQ29tbWFuZExpbmVUb0FyZ3ZXYCBhbmQgY2Fubm90IGJlIHJlbGllZCB1cG9uLlxuICpcbiAqIEFwcGx5IHRoaXMgdG8gYSBjb21tYW5kIGxpbmUgc3RyaW5nIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB2aWEgYGNtZC5leGVgXG4gKiAoZS5nLiwgYHNwYXduKGNtZCwgW10sIHsgc2hlbGw6IHRydWUgfSlgIG9uIFdpbmRvd3MpLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kTGluZSAtIFRoZSBhbHJlYWR5LXF1b3RlZCBjb21tYW5kIGxpbmUgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB3aXRoIGFsbCBjbWQgbWV0YWNoYXJhY3RlcnMgYF5gLWVzY2FwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbWRFc2NhcGVDb21tYW5kTGluZShjb21tYW5kTGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgIHJlcGxhY2VyOiAnXiQmJyxcbiAgICBzZWFyY2hWYWx1ZTogQ01EX01FVEFfUkUsXG4gICAgc3RyOiBjb21tYW5kTGluZVxuICB9KTtcbn1cblxuLyoqXG4gKiBXcmFwcyBhIENMSSB0YXNrIGZ1bmN0aW9uIHRvIGVuc3VyZSBpdCBydW5zIHNhZmVseSBhbmQgaGFuZGxlcyBpdHMge0BsaW5rIENsaVRhc2tSZXN1bHR9LlxuICpcbiAqIEBwYXJhbSB0YXNrRm4gLSBUaGUgdGFzayBmdW5jdGlvbiB0byBleGVjdXRlLCB3aGljaCBtYXkgcmV0dXJuIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IG9yIGB2b2lkYC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGFzayBpcyBjb21wbGV0ZWQgYW5kIGV4aXRzIHdpdGggdGhlIGFwcHJvcHJpYXRlIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyYXBDbGlUYXNrKHRhc2tGbjogKCkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxDbGlUYXNrUmVzdWx0Pj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgZW5hYmxlTGlicmFyeURlYnVnZ2VycygpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cmFwUmVzdWx0KHRhc2tGbik7XG4gIHJlc3VsdC5leGl0KCk7XG59XG5cbi8qKlxuICogU2FmZWx5IGV4ZWN1dGVzIGEgdGFzayBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIHtAbGluayBDbGlUYXNrUmVzdWx0fS4gSWYgdGhlIHRhc2sgZnVuY3Rpb24gdGhyb3dzIGFuIGVycm9yLFxuICogQW4gZXJyb3IgaXMgY2F1Z2h0LCBhbmQgYSBmYWlsdXJlIHtAbGluayBDbGlUYXNrUmVzdWx0fSBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gdGFza0ZuIC0gVGhlIHRhc2sgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSByZXByZXNlbnRpbmcgdGhlIG91dGNvbWUgb2YgdGhlIHRhc2suXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdyYXBSZXN1bHQodGFza0ZuOiAoKSA9PiBQcm9taXNhYmxlPE1heWJlUmV0dXJuPENsaVRhc2tSZXN1bHQ+Pik6IFByb21pc2U8Q2xpVGFza1Jlc3VsdD4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgdGFza0ZuKCkpIGFzIENsaVRhc2tSZXN1bHQgfCB1bmRlZmluZWQgPz8gQ2xpVGFza1Jlc3VsdC5TdWNjZXNzKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJpbnRFcnJvcihuZXcgRXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0YXNrIGV4ZWN1dGlvbicsIHsgY2F1c2U6IGVycm9yIH0pKTtcbiAgICByZXR1cm4gQ2xpVGFza1Jlc3VsdC5GYWlsdXJlKCk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU0EsT0FBTyxhQUFhO0FBSXBCLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsWUFBWTtBQUNyQixTQUFTLGtCQUFrQjtBQU1wQixNQUFlLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9sQyxhQUFvQixNQUFNLE9BQWlGO0FBQ3pHLGVBQVcsUUFBUSxPQUFPO0FBQ3hCLFlBQU0sU0FBUyxNQUFNLFdBQVcsSUFBSTtBQUNwQyxVQUFJLENBQUMsT0FBTyxhQUFhLEdBQUc7QUFDMUIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsV0FBTyxjQUFjLFFBQVE7QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE9BQWMsWUFBMkI7QUFDdkMsV0FBTyxJQUFJLG9CQUFvQjtBQUFBLEVBQ2pDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxVQUF5QjtBQUNyQyxXQUFPLEtBQUssUUFBUSxLQUFLO0FBQUEsRUFDM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE9BQWMsYUFBYSxVQUFpQztBQUMxRCxXQUFPLElBQUksbUJBQW1CLFFBQVE7QUFBQSxFQUN4QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsT0FBYyxRQUFRLFlBQVksTUFBcUI7QUFDckQsV0FBTyxJQUFJLGtC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
|
|
@@ -24,6 +24,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
24
24
|
import { spawn } from "node:child_process";
|
|
25
25
|
import process from "node:process";
|
|
26
26
|
import { getLibDebugger } from "../debug.mjs";
|
|
27
|
+
import { normalizeOptionalProperties } from "../object-utils.mjs";
|
|
27
28
|
import { trimEnd } from "../string.mjs";
|
|
28
29
|
import { assertNonNullable } from "../type-guards.mjs";
|
|
29
30
|
import {
|
|
@@ -46,7 +47,11 @@ function exec(command, options = {}) {
|
|
|
46
47
|
)
|
|
47
48
|
);
|
|
48
49
|
}
|
|
49
|
-
return execString(
|
|
50
|
+
return execString({
|
|
51
|
+
command: commandLine,
|
|
52
|
+
options,
|
|
53
|
+
rawArgs: args
|
|
54
|
+
});
|
|
50
55
|
}
|
|
51
56
|
const maxCommandLength = getMaxCommandLength();
|
|
52
57
|
if (command.length > maxCommandLength) {
|
|
@@ -56,9 +61,17 @@ function exec(command, options = {}) {
|
|
|
56
61
|
)
|
|
57
62
|
);
|
|
58
63
|
}
|
|
59
|
-
return execString(
|
|
64
|
+
return execString({
|
|
65
|
+
command,
|
|
66
|
+
options
|
|
67
|
+
});
|
|
60
68
|
}
|
|
61
|
-
function execString(
|
|
69
|
+
function execString(params) {
|
|
70
|
+
const {
|
|
71
|
+
command,
|
|
72
|
+
options = {},
|
|
73
|
+
rawArgs
|
|
74
|
+
} = params;
|
|
62
75
|
const {
|
|
63
76
|
cwd = process.cwd(),
|
|
64
77
|
isQuiet: quiet = false,
|
|
@@ -68,7 +81,11 @@ function execString(command, options = {}, rawArgs) {
|
|
|
68
81
|
} = options;
|
|
69
82
|
return new Promise((resolve, reject) => {
|
|
70
83
|
getLibDebugger("Exec")(`Executing command: ${command}`);
|
|
71
|
-
const child = spawnViaShell(
|
|
84
|
+
const child = spawnViaShell(normalizeOptionalProperties({
|
|
85
|
+
command,
|
|
86
|
+
cwd,
|
|
87
|
+
rawArgs
|
|
88
|
+
}));
|
|
72
89
|
let stdout = "";
|
|
73
90
|
let stderr = "";
|
|
74
91
|
child.stdin.write(stdin);
|
|
@@ -80,7 +97,10 @@ function execString(command, options = {}, rawArgs) {
|
|
|
80
97
|
stdout += data.toString("utf-8");
|
|
81
98
|
});
|
|
82
99
|
child.stdout.on("end", () => {
|
|
83
|
-
stdout = trimEnd(
|
|
100
|
+
stdout = trimEnd({
|
|
101
|
+
str: stdout,
|
|
102
|
+
suffix: "\n"
|
|
103
|
+
});
|
|
84
104
|
});
|
|
85
105
|
child.stderr.on("data", (data) => {
|
|
86
106
|
if (!quiet) {
|
|
@@ -89,7 +109,10 @@ function execString(command, options = {}, rawArgs) {
|
|
|
89
109
|
stderr += data.toString("utf-8");
|
|
90
110
|
});
|
|
91
111
|
child.stderr.on("end", () => {
|
|
92
|
-
stderr = trimEnd(
|
|
112
|
+
stderr = trimEnd({
|
|
113
|
+
str: stderr,
|
|
114
|
+
suffix: "\n"
|
|
115
|
+
});
|
|
93
116
|
});
|
|
94
117
|
child.on("close", (exitCode, exitSignal) => {
|
|
95
118
|
if (exitCode !== 0 && !ignoreExitCode) {
|
|
@@ -130,11 +153,15 @@ const CHILD_ENV = {
|
|
|
130
153
|
DEBUG_COLORS: "1",
|
|
131
154
|
...process.env
|
|
132
155
|
};
|
|
133
|
-
async function executeBatches(
|
|
156
|
+
async function executeBatches(params) {
|
|
157
|
+
const { baseCommand, batches, options } = params;
|
|
134
158
|
const results = [];
|
|
135
159
|
for (const batch of batches) {
|
|
136
160
|
const batchCommand = `${baseCommand} ${batch.join(" ")}`;
|
|
137
|
-
const result = await execString(
|
|
161
|
+
const result = await execString({
|
|
162
|
+
command: batchCommand,
|
|
163
|
+
options
|
|
164
|
+
});
|
|
138
165
|
if (typeof result === "string") {
|
|
139
166
|
results.push(result);
|
|
140
167
|
}
|
|
@@ -164,7 +191,10 @@ function handleBatchedCommand(parts, options) {
|
|
|
164
191
|
const maxCommandLength = getMaxCommandLength();
|
|
165
192
|
const fullCommand = `${baseCommand} ${execArg.batchedArgs.join(" ")}`;
|
|
166
193
|
if (fullCommand.length <= maxCommandLength) {
|
|
167
|
-
return execString(
|
|
194
|
+
return execString({
|
|
195
|
+
command: fullCommand,
|
|
196
|
+
options
|
|
197
|
+
});
|
|
168
198
|
}
|
|
169
199
|
const batches = [];
|
|
170
200
|
let currentBatch = [];
|
|
@@ -187,12 +217,17 @@ function handleBatchedCommand(parts, options) {
|
|
|
187
217
|
if (currentBatch.length > 0) {
|
|
188
218
|
batches.push(currentBatch);
|
|
189
219
|
}
|
|
190
|
-
return executeBatches(
|
|
220
|
+
return executeBatches({
|
|
221
|
+
baseCommand,
|
|
222
|
+
batches,
|
|
223
|
+
options
|
|
224
|
+
});
|
|
191
225
|
}
|
|
192
226
|
function isExecArg(part) {
|
|
193
227
|
return typeof part === "object" && "batchedArgs" in part;
|
|
194
228
|
}
|
|
195
|
-
function spawnViaShell(
|
|
229
|
+
function spawnViaShell(params) {
|
|
230
|
+
const { command, cwd, rawArgs } = params;
|
|
196
231
|
if (process.platform === "win32" && command.includes("\n")) {
|
|
197
232
|
if (!rawArgs) {
|
|
198
233
|
throw new Error("Commands containing newlines cannot be executed through cmd.exe on Windows. Pass an argument array instead of a string.");
|
|
@@ -216,4 +251,4 @@ function spawnViaShell(command, cwd, rawArgs) {
|
|
|
216
251
|
export {
|
|
217
252
|
exec
|
|
218
253
|
};
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9leGVjLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZyBjb21tYW5kcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgdHJpbUVuZCB9IGZyb20gJy4uL3N0cmluZy50cyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7XG4gIGNtZEVzY2FwZUNvbW1hbmRMaW5lLFxuICB0b0NvbW1hbmRMaW5lXG59IGZyb20gJy4vY2xpLXV0aWxzLnRzJztcblxuLyoqXG4gKiBBIGNvbW1hbmQgcGFydDogZWl0aGVyIGEgcGxhaW4gc3RyaW5nIG9yIGFuIHtAbGluayBFeGVjQXJnfSB3aXRoIGJhdGNoZWQgYXJndW1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBDb21tYW5kUGFydCA9IEV4ZWNBcmcgfCBzdHJpbmc7XG5cbi8qKlxuICogQSBjb21tYW5kIGFyZ3VtZW50IHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGFyZ3MgdG8gYmUgYmF0Y2hlZC5cbiAqIElmIHRoZSBleHBhbmRlZCBjb21tYW5kIGV4Y2VlZHMgdGhlIHBsYXRmb3JtJ3MgbWF4IGNvbW1hbmQgbGVuZ3RoLFxuICogdGhlIGJhdGNoZWQgYXJncyBhcmUgc3BsaXQgaW50byBzZXF1ZW50aWFsIGV4ZWN1dGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY0FyZyB7XG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHRvIGJhdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgYmF0Y2hlZEFyZ3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBleGVjfSB0aGF0IHJldHVybiBkZXRhaWxlZCByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNEZXRhaWxlZE9wdGlvbnMgZXh0ZW5kcyBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIGB0cnVlYCB0byByZWNlaXZlIGRldGFpbGVkIHJlc3VsdHMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlsczogdHJ1ZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBleGVjdXRpbmcgYSBjb21tYW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY3VycmVudCB3b3JraW5nIGZvbGRlciBmb3IgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHN1cHByZXNzZXMgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzUXVpZXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRocm93cyBhbiBlcnJvciBpZiB0aGUgY29tbWFuZCBmYWlscy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZhaWxJZkNhbGxlZEZyb21PdXRzaWRlUm9vdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaWdub3JlcyB0aGUgZXhpdCBjb2RlIG9mIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSWdub3JlRXhpdENvZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgZmFsc2VgLCBvbmx5IHJldHVybnMgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVEZXRhaWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gaW5wdXQgdG8gYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RkaW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSByZXN1bHQgb2Yge0BsaW5rIGV4ZWN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNSZXN1bHQge1xuICAvKipcbiAgICogQW4gZXhpdCBjb2RlIG9mIHRoZSBjb21tYW5kLiBBIHZhbHVlIG9mIGBudWxsYCBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2VzcyBkaWQgbm90IGV4aXQgbm9ybWFsbHkuXG4gICAqL1xuICByZWFkb25seSBleGl0Q29kZTogbnVsbCB8IG51bWJlcjtcblxuICAvKipcbiAgICogQSBzaWduYWwgdGhhdCBjYXVzZWQgdGhlIHByb2Nlc3MgdG8gYmUgdGVybWluYXRlZC4gQSB2YWx1ZSBvZiBgbnVsbGAgaW5kaWNhdGVzIHRoYXQgbm8gc2lnbmFsIHdhcyByZWNlaXZlZC5cbiAgICovXG4gIHJlYWRvbmx5IGV4aXRTaWduYWw6IE5vZGVKUy5TaWduYWxzIHwgbnVsbDtcblxuICAvKipcbiAgICogQSBzdGFuZGFyZCBlcnJvciBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZGVycjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHN0YW5kYXJkIG91dHB1dCBmcm9tIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc3Rkb3V0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGV4ZWN9IHRoYXQgcmV0dXJuIG9ubHkgc3Rkb3V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNTaW1wbGVPcHRpb25zIGV4dGVuZHMgRXhlY09wdGlvbnMge1xuICAvKipcbiAgICogTXVzdCBiZSBgZmFsc2VgIG9yIG9taXR0ZWQgdG8gcmVjZWl2ZSBvbmx5IHN0ZG91dC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVEZXRhaWxzPzogZmFsc2U7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWMoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9ucz86IEV4ZWNTaW1wbGVPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+O1xuLyoqXG4gKiBFeGVjdXRlcyBhIGNvbW1hbmQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBleGVjdXRlLiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBleGVjdXRpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggRXhlY1Jlc3VsdCBvYmplY3QuXG4gKiAgICAgICAgICBUaGUgRXhlY1Jlc3VsdCBvYmplY3QgY29udGFpbnMgdGhlIGV4aXQgY29kZSwgZXhpdCBzaWduYWwsIHN0ZGVyciwgYW5kIHN0ZG91dC5cbiAqIEB0aHJvd3MgSWYgdGhlIGNvbW1hbmQgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSBhbmQgaWdub3JlRXhpdENvZGUgaXMgYGZhbHNlYC5cbiAqICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4aXQgY29kZSBhbmQgc3RkZXJyLlxuICogICAgICAgICBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBleGVjdXRpb24gYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGB0cnVlYCxcbiAqICAgICAgICAgdGhlIGVycm9yIGlzIHJlc29sdmVkIHdpdGggdGhlIHN0ZG91dCBhbmQgc3RkZXJyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zOiBFeGVjRGV0YWlsZWRPcHRpb25zKTogUHJvbWlzZTxFeGVjUmVzdWx0Pjtcbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgb3IgYW4gRXhlY1Jlc3VsdCBvYmplY3QuXG4gKiAgICAgICAgICBUaGUgRXhlY1Jlc3VsdCBvYmplY3QgY29udGFpbnMgdGhlIGV4aXQgY29kZSwgZXhpdCBzaWduYWwsIHN0ZGVyciwgYW5kIHN0ZG91dC5cbiAqIEB0aHJvd3MgSWYgdGhlIGNvbW1hbmQgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSBhbmQgaWdub3JlRXhpdENvZGUgaXMgYGZhbHNlYC5cbiAqICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4aXQgY29kZSBhbmQgc3RkZXJyLlxuICogICAgICAgICBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBleGVjdXRpb24gYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGB0cnVlYCxcbiAqICAgICAgICAgdGhlIGVycm9yIGlzIHJlc29sdmVkIHdpdGggdGhlIHN0ZG91dCBhbmQgc3RkZXJyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zOiBFeGVjT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNvbW1hbmQpKSB7XG4gICAgY29uc3QgYmF0Y2hSZXN1bHQgPSBoYW5kbGVCYXRjaGVkQ29tbWFuZChjb21tYW5kLCBvcHRpb25zKTtcbiAgICBpZiAoYmF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBiYXRjaFJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgYXJncyA9IGNvbW1hbmQuZmlsdGVyKChwYXJ0KTogcGFydCBpcyBzdHJpbmcgPT4gdHlwZW9mIHBhcnQgPT09ICdzdHJpbmcnKTtcbiAgICBjb25zdCBjb21tYW5kTGluZSA9IHRvQ29tbWFuZExpbmUoYXJncyk7XG5cbiAgICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4Q29tbWFuZExlbmd0aCgpO1xuICAgIGlmIChjb21tYW5kTGluZS5sZW5ndGggPiBtYXhDb21tYW5kTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tbWFuZCBsaW5lIGlzIHRvbyBsb25nICgke1N0cmluZyhjb21tYW5kTGluZS5sZW5ndGgpfSBjaGFycywgbWF4ICR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSBvbiAke3Byb2Nlc3MucGxhdGZvcm19KS4gQ29uc2lkZXIgc3BsaXR0aW5nIGludG8gc21hbGxlciBiYXRjaGVzIG9yIHVzZSBFeGVjQXJnLmBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhlY1N0cmluZyhjb21tYW5kTGluZSwgb3B0aW9ucywgYXJncyk7XG4gIH1cblxuICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4Q29tbWFuZExlbmd0aCgpO1xuICBpZiAoY29tbWFuZC5sZW5ndGggPiBtYXhDb21tYW5kTGVuZ3RoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgbmV3IEVycm9yKFxuICAgICAgICBgQ29tbWFuZCBsaW5lIGlzIHRvbyBsb25nICgke1N0cmluZyhjb21tYW5kLmxlbmd0aCl9IGNoYXJzLCBtYXggJHtTdHJpbmcobWF4Q29tbWFuZExlbmd0aCl9IG9uICR7cHJvY2Vzcy5wbGF0Zm9ybX0pLiBDb25zaWRlciBzcGxpdHRpbmcgaW50byBzbWFsbGVyIGJhdGNoZXMgb3IgdXNlIEV4ZWNBcmcuYFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXhlY1N0cmluZyhjb21tYW5kLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIHNpbmdsZSBzdHJpbmcgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHN0cmluZy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGV4ZWMgb3B0aW9ucy5cbiAqIEBwYXJhbSByYXdBcmdzIC0gVGhlIG9yaWdpbmFsIGFyZ3VtZW50IGFycmF5IChpZiBhdmFpbGFibGUpLCB1c2VkIGJ5IHRoZSBQb3dlclNoZWxsXG4gKiAgIGZhbGxiYWNrIHBhdGggdG8gcXVvdGUgYXJndW1lbnRzIHdpdGggUG93ZXJTaGVsbC1uYXRpdmUgc2luZ2xlIHF1b3Rlcy5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gZXhlY1N0cmluZyhjb21tYW5kOiBzdHJpbmcsIG9wdGlvbnM6IEV4ZWNPcHRpb25zID0ge30sIHJhd0FyZ3M/OiBzdHJpbmdbXSk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgY3dkID0gcHJvY2Vzcy5jd2QoKSxcbiAgICBpc1F1aWV0OiBxdWlldCA9IGZhbHNlLFxuICAgIHNob3VsZElnbm9yZUV4aXRDb2RlOiBpZ25vcmVFeGl0Q29kZSA9IGZhbHNlLFxuICAgIHNob3VsZEluY2x1ZGVEZXRhaWxzID0gZmFsc2UsXG4gICAgc3RkaW4gPSAnJ1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGdldExpYkRlYnVnZ2VyKCdFeGVjJykoYEV4ZWN1dGluZyBjb21tYW5kOiAke2NvbW1hbmR9YCk7XG5cbiAgICBjb25zdCBjaGlsZCA9IHNwYXduVmlhU2hlbGwoY29tbWFuZCwgY3dkLCByYXdBcmdzKTtcblxuICAgIGxldCBzdGRvdXQgPSAnJztcbiAgICBsZXQgc3RkZXJyID0gJyc7XG5cbiAgICBjaGlsZC5zdGRpbi53cml0ZShzdGRpbik7XG4gICAgY2hpbGQuc3RkaW4uZW5kKCk7XG5cbiAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGRhdGEpO1xuICAgICAgfVxuICAgICAgc3Rkb3V0ICs9IGRhdGEudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRvdXQub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHN0ZG91dCA9IHRyaW1FbmQoc3Rkb3V0LCAnXFxuJyk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGRhdGEpO1xuICAgICAgfVxuICAgICAgc3RkZXJyICs9IGRhdGEudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHN0ZGVyciA9IHRyaW1FbmQoc3RkZXJyLCAnXFxuJyk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbignY2xvc2UnLCAoZXhpdENvZGUsIGV4aXRTaWduYWwpID0+IHtcbiAgICAgIGlmIChleGl0Q29kZSAhPT0gMCAmJiAhaWdub3JlRXhpdENvZGUpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtleGl0Q29kZSA/IFN0cmluZyhleGl0Q29kZSkgOiAnKG51bGwpJ31cXG4ke3N0ZGVycn1gKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzaG91bGRJbmNsdWRlRGV0YWlscykge1xuICAgICAgICByZXNvbHZlKHN0ZG91dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBleGl0Q29kZSxcbiAgICAgICAgZXhpdFNpZ25hbCxcbiAgICAgICAgc3RkZXJyLFxuICAgICAgICBzdGRvdXRcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgaWYgKCFpZ25vcmVFeGl0Q29kZSkge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNob3VsZEluY2x1ZGVEZXRhaWxzKSB7XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgZXhpdENvZGU6IG51bGwsXG4gICAgICAgIGV4aXRTaWduYWw6IG51bGwsXG4gICAgICAgIHN0ZGVycixcbiAgICAgICAgc3Rkb3V0XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcGFzc2VkIHRvIGNoaWxkIHByb2Nlc3Nlcy5cbiAqL1xuY29uc3QgQ0hJTERfRU5WID0ge1xuICBERUJVR19DT0xPUlM6ICcxJyxcbiAgLi4ucHJvY2Vzcy5lbnZcbn07XG5cbi8qKlxuICogRXhlY3V0ZXMgYmF0Y2hlZCBjb21tYW5kcyBzZXF1ZW50aWFsbHkgYW5kIGNvbmNhdGVuYXRlcyBzdGRvdXQuXG4gKlxuICogQHBhcmFtIGJhc2VDb21tYW5kIC0gVGhlIGJhc2UgY29tbWFuZCB3aXRob3V0IGJhdGNoZWQgYXJncy5cbiAqIEBwYXJhbSBiYXRjaGVzIC0gVGhlIGJhdGNoZXMgb2YgYXJncy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGV4ZWMgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNvbmNhdGVuYXRlZCByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVCYXRjaGVzKGJhc2VDb21tYW5kOiBzdHJpbmcsIGJhdGNoZXM6IHN0cmluZ1tdW10sIG9wdGlvbnM6IEV4ZWNPcHRpb25zKTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB7XG4gIGNvbnN0IHJlc3VsdHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBiYXRjaCBvZiBiYXRjaGVzKSB7XG4gICAgY29uc3QgYmF0Y2hDb21tYW5kID0gYCR7YmFzZUNvbW1hbmR9ICR7YmF0Y2guam9pbignICcpfWA7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY1N0cmluZyhiYXRjaENvbW1hbmQsIG9wdGlvbnMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2hvdWxkSW5jbHVkZURldGFpbHMpIHtcbiAgICByZXR1cm4geyBleGl0Q29kZTogMCwgZXhpdFNpZ25hbDogbnVsbCwgc3RkZXJyOiAnJywgc3Rkb3V0OiByZXN1bHRzLmpvaW4oJ1xcbicpIH07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cy5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBtYXggY29tbWFuZCBsaW5lIGxlbmd0aC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbWF4IGNvbW1hbmQgbGVuZ3RoIGluIGNoYXJhY3RlcnMuXG4gKi9cbmZ1bmN0aW9uIGdldE1heENvbW1hbmRMZW5ndGgoKTogbnVtYmVyIHtcbiAgY29uc3QgV0lORE9XU19NQVhfQ09NTUFORF9MRU5HVEggPSA4MTkxO1xuICBjb25zdCBVTklYX01BWF9DT01NQU5EX0xFTkdUSCA9IDEzMTA3MjtcbiAgcmV0dXJuIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBXSU5ET1dTX01BWF9DT01NQU5EX0xFTkdUSCA6IFVOSVhfTUFYX0NPTU1BTkRfTEVOR1RIO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYSBjb21tYW5kIGFycmF5IHRoYXQgbWF5IGNvbnRhaW4gYW4ge0BsaW5rIEV4ZWNBcmd9LlxuICogUmV0dXJucyBhIFByb21pc2UgaWYgYmF0Y2hpbmcgaXMgbmVlZGVkLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgY29tbWFuZFxuICogaGFzIG5vIEV4ZWNBcmcgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuXG4gKlxuICogQHBhcmFtIHBhcnRzIC0gVGhlIGNvbW1hbmQgcGFydHMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBleGVjIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgaWYgYmF0Y2hpbmcgaXMgaGFuZGxlZCwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUJhdGNoZWRDb21tYW5kKHBhcnRzOiBDb21tYW5kUGFydFtdLCBvcHRpb25zOiBFeGVjT3B0aW9ucyk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4gfCB1bmRlZmluZWQge1xuICBjb25zdCBleGVjQXJncyA9IHBhcnRzLmZpbHRlcihpc0V4ZWNBcmcpO1xuICBpZiAoZXhlY0FyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoZXhlY0FyZ3MubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ09ubHkgb25lIEV4ZWNBcmcgd2l0aCBiYXRjaGVkQXJncyBpcyBhbGxvd2VkIHBlciBjb21tYW5kJykpO1xuICB9XG5cbiAgY29uc3QgZXhlY0FyZyA9IGV4ZWNBcmdzWzBdO1xuICBhc3NlcnROb25OdWxsYWJsZShleGVjQXJnKTtcbiAgY29uc3Qgc3RhdGljUGFydHMgPSBwYXJ0cy5maWx0ZXIoKHBhcnQpOiBwYXJ0IGlzIHN0cmluZyA9PiB0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpO1xuICBjb25zdCBiYXNlQ29tbWFuZCA9IHRvQ29tbWFuZExpbmUoc3RhdGljUGFydHMpO1xuICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4Q29tbWFuZExlbmd0aCgpO1xuXG4gIC8vIFRyeSBleHBhbmRpbmcgYWxsIGFyZ3MgaW5saW5lXG4gIGNvbnN0IGZ1bGxDb21tYW5kID0gYCR7YmFzZUNvbW1hbmR9ICR7ZXhlY0FyZy5iYXRjaGVkQXJncy5qb2luKCcgJyl9YDtcbiAgaWYgKGZ1bGxDb21tYW5kLmxlbmd0aCA8PSBtYXhDb21tYW5kTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGV4ZWNTdHJpbmcoZnVsbENvbW1hbmQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gU3BsaXQgaW50byBiYXRjaGVzXG4gIGNvbnN0IGJhdGNoZXM6IHN0cmluZ1tdW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRCYXRjaDogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGFyZyBvZiBleGVjQXJnLmJhdGNoZWRBcmdzKSB7XG4gICAgY29uc3QgdGVudGF0aXZlID0gYCR7YmFzZUNvbW1hbmR9ICR7Wy4uLmN1cnJlbnRCYXRjaCwgYXJnXS5qb2luKCcgJyl9YDtcbiAgICBpZiAodGVudGF0aXZlLmxlbmd0aCA+IG1heENvbW1hbmRMZW5ndGgpIHtcbiAgICAgIGlmIChjdXJyZW50QmF0Y2gubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHNwbGl0IGNvbW1hbmQgaW50byBiYXRjaGVzOiBhIHNpbmdsZSBhcmd1bWVudCAoJHtTdHJpbmcoYXJnLmxlbmd0aCl9IGNoYXJzKSBwbHVzIHRoZSBiYXNlIGNvbW1hbmQgKCR7U3RyaW5nKGJhc2VDb21tYW5kLmxlbmd0aCl9IGNoYXJzKSBleGNlZWRzIHRoZSBtYXggY29tbWFuZCBsZW5ndGggKCR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSkuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJhdGNoZXMucHVzaChjdXJyZW50QmF0Y2gpO1xuICAgICAgY3VycmVudEJhdGNoID0gW2FyZ107XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRCYXRjaC5wdXNoKGFyZyk7XG4gICAgfVxuICB9XG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbHdheXMgdHJ1ZSBhZnRlciB0aGUgbG9vcDsgYmF0Y2hlZEFyZ3MgaXMgbm9uLWVtcHR5IGF0IHRoaXMgcG9pbnQuICovXG4gIGlmIChjdXJyZW50QmF0Y2gubGVuZ3RoID4gMCkge1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgYmF0Y2hlcy5wdXNoKGN1cnJlbnRCYXRjaCk7XG4gIH1cblxuICByZXR1cm4gZXhlY3V0ZUJhdGNoZXMoYmFzZUNvbW1hbmQsIGJhdGNoZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGNvbW1hbmQgcGFydCBpcyBhbiB7QGxpbmsgRXhlY0FyZ30uXG4gKlxuICogQHBhcmFtIHBhcnQgLSBUaGUgY29tbWFuZCBwYXJ0IHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFydCBpcyBhbiBFeGVjQXJnLlxuICovXG5mdW5jdGlvbiBpc0V4ZWNBcmcocGFydDogQ29tbWFuZFBhcnQpOiBwYXJ0IGlzIEV4ZWNBcmcge1xuICByZXR1cm4gdHlwZW9mIHBhcnQgPT09ICdvYmplY3QnICYmICdiYXRjaGVkQXJncycgaW4gcGFydDtcbn1cblxuLyoqXG4gKiBTcGF3bnMgYSBjaGlsZCBwcm9jZXNzIHZpYSB0aGUgYXBwcm9wcmlhdGUgc2hlbGwuXG4gKlxuICogT24gV2luZG93cywgaWYgdGhlIGNvbW1hbmQgY29udGFpbnMgbmV3bGluZXMgKHdoaWNoIGBjbWQuZXhlYCBjYW5ub3QgaGFuZGxlKVxuICogYW5kIHRoZSByYXcgYXJncyBhcnJheSBpcyBhdmFpbGFibGUsIHNwYXducyB0aGUgcHJvY2VzcyBkaXJlY3RseSB3aXRob3V0XG4gKiBhbnkgc2hlbGwgXHUyMDE0IHBhc3NpbmcgYXJncyB2aWEgYENyZWF0ZVByb2Nlc3NgLCB3aGljaCBhdm9pZHMgYWxsIHF1b3RpbmcgaXNzdWVzLlxuICpcbiAqIE9uIFdpbmRvd3MgKGNtZC5leGUgcGF0aCksIGFwcGxpZXMgYF5gLWVzY2FwaW5nIGZvciBjbWQgbWV0YWNoYXJhY3RlcnMuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCBzdHJpbmcgdG8gZXhlY3V0ZS5cbiAqIEBwYXJhbSBjd2QgLSBUaGUgd29ya2luZyBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gcmF3QXJncyAtIFRoZSBvcmlnaW5hbCBhcmd1bWVudCBhcnJheSAoaWYgYXZhaWxhYmxlKS5cbiAqIEByZXR1cm5zIFRoZSBzcGF3bmVkIGNoaWxkIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIHNwYXduVmlhU2hlbGwoY29tbWFuZDogc3RyaW5nLCBjd2Q6IHN0cmluZywgcmF3QXJncz86IHN0cmluZ1tdKTogQ2hpbGRQcm9jZXNzV2l0aG91dE51bGxTdHJlYW1zIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgJiYgY29tbWFuZC5pbmNsdWRlcygnXFxuJykpIHtcbiAgICBpZiAoIXJhd0FyZ3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29tbWFuZHMgY29udGFpbmluZyBuZXdsaW5lcyBjYW5ub3QgYmUgZXhlY3V0ZWQgdGhyb3VnaCBjbWQuZXhlIG9uIFdpbmRvd3MuIFBhc3MgYW4gYXJndW1lbnQgYXJyYXkgaW5zdGVhZCBvZiBhIHN0cmluZy4nKTtcbiAgICB9XG4gICAgY29uc3QgW3Byb2dyYW0sIC4uLmFyZ3NdID0gcmF3QXJncztcbiAgICBhc3NlcnROb25OdWxsYWJsZShwcm9ncmFtLCAnQ29tbWFuZCBhcnJheSBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgIHJldHVybiBzcGF3bihwcm9ncmFtLCBhcmdzLCB7XG4gICAgICBjd2QsXG4gICAgICBlbnY6IENISUxEX0VOVixcbiAgICAgIHN0ZGlvOiAncGlwZSdcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHNoZWxsQ29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBjbWRFc2NhcGVDb21tYW5kTGluZShjb21tYW5kKSA6IGNvbW1hbmQ7XG4gIHJldHVybiBzcGF3bihzaGVsbENvbW1hbmQsIFtdLCB7XG4gICAgY3dkLFxuICAgIGVudjogQ0hJTERfRU5WLFxuICAgIHNoZWxsOiB0cnVlLFxuICAgIHN0ZGlvOiAncGlw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
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9leGVjLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZyBjb21tYW5kcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IHRyaW1FbmQgfSBmcm9tICcuLi9zdHJpbmcudHMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICcuLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQge1xuICBjbWRFc2NhcGVDb21tYW5kTGluZSxcbiAgdG9Db21tYW5kTGluZVxufSBmcm9tICcuL2NsaS11dGlscy50cyc7XG5cbi8qKlxuICogQSBjb21tYW5kIHBhcnQ6IGVpdGhlciBhIHBsYWluIHN0cmluZyBvciBhbiB7QGxpbmsgRXhlY0FyZ30gd2l0aCBiYXRjaGVkIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbWFuZFBhcnQgPSBFeGVjQXJnIHwgc3RyaW5nO1xuXG4vKipcbiAqIEEgY29tbWFuZCBhcmd1bWVudCB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBhcmdzIHRvIGJlIGJhdGNoZWQuXG4gKiBJZiB0aGUgZXhwYW5kZWQgY29tbWFuZCBleGNlZWRzIHRoZSBwbGF0Zm9ybSdzIG1heCBjb21tYW5kIGxlbmd0aCxcbiAqIHRoZSBiYXRjaGVkIGFyZ3MgYXJlIHNwbGl0IGludG8gc2VxdWVudGlhbCBleGVjdXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNBcmcge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBiYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGJhdGNoZWRBcmdzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZXhlY30gdGhhdCByZXR1cm4gZGV0YWlsZWQgcmVzdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjRGV0YWlsZWRPcHRpb25zIGV4dGVuZHMgRXhlY09wdGlvbnMge1xuICAvKipcbiAgICogTXVzdCBiZSBgdHJ1ZWAgdG8gcmVjZWl2ZSBkZXRhaWxlZCByZXN1bHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZURldGFpbHM6IHRydWU7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgZXhlY3V0aW5nIGEgY29tbWFuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgZm9yIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBzdXBwcmVzc2VzIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBpc1F1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNvbW1hbmQgZmFpbHMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGYWlsSWZDYWxsZWRGcm9tT3V0c2lkZVJvb3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGlnbm9yZXMgdGhlIGV4aXQgY29kZSBvZiB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZElnbm9yZUV4aXRDb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYGZhbHNlYCwgb25seSByZXR1cm5zIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlscz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFuIGlucHV0IHRvIGJlIHBhc3NlZCB0byB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZGluPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVzdWx0IG9mIHtAbGluayBleGVjfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjUmVzdWx0IHtcbiAgLyoqXG4gICAqIEFuIGV4aXQgY29kZSBvZiB0aGUgY29tbWFuZC4gQSB2YWx1ZSBvZiBgbnVsbGAgaW5kaWNhdGVzIHRoYXQgdGhlIHByb2Nlc3MgZGlkIG5vdCBleGl0IG5vcm1hbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpdENvZGU6IG51bGwgfCBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgc2lnbmFsIHRoYXQgY2F1c2VkIHRoZSBwcm9jZXNzIHRvIGJlIHRlcm1pbmF0ZWQuIEEgdmFsdWUgb2YgYG51bGxgIGluZGljYXRlcyB0aGF0IG5vIHNpZ25hbCB3YXMgcmVjZWl2ZWQuXG4gICAqL1xuICByZWFkb25seSBleGl0U2lnbmFsOiBOb2RlSlMuU2lnbmFscyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBzdGRlcnI6IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdGFuZGFyZCBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZG91dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBleGVjfSB0aGF0IHJldHVybiBvbmx5IHN0ZG91dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjU2ltcGxlT3B0aW9ucyBleHRlbmRzIEV4ZWNPcHRpb25zIHtcbiAgLyoqXG4gICAqIE11c3QgYmUgYGZhbHNlYCBvciBvbWl0dGVkIHRvIHJlY2VpdmUgb25seSBzdGRvdXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlscz86IGZhbHNlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleGVjU3RyaW5nfS5cbiAqL1xuaW50ZXJmYWNlIEV4ZWNTdHJpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlYyBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9ucz86IEV4ZWNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYXJndW1lbnQgYXJyYXkgKGlmIGF2YWlsYWJsZSksIHVzZWQgYnkgdGhlIFBvd2VyU2hlbGxcbiAgICogZmFsbGJhY2sgcGF0aCB0byBxdW90ZSBhcmd1bWVudHMgd2l0aCBQb3dlclNoZWxsLW5hdGl2ZSBzaW5nbGUgcXVvdGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3QXJncz86IHN0cmluZ1tdO1xufVxuLyoqXG4gKiBFeGVjdXRlcyBhIGNvbW1hbmQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBleGVjdXRlLiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBleGVjdXRpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZC5cbiAqIEB0aHJvd3MgSWYgdGhlIGNvbW1hbmQgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSBhbmQgaWdub3JlRXhpdENvZGUgaXMgYGZhbHNlYC5cbiAqICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4aXQgY29kZSBhbmQgc3RkZXJyLlxuICogICAgICAgICBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBleGVjdXRpb24gYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGB0cnVlYCxcbiAqICAgICAgICAgdGhlIGVycm9yIGlzIHJlc29sdmVkIHdpdGggdGhlIHN0ZG91dCBhbmQgc3RkZXJyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlYyhjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zPzogRXhlY1NpbXBsZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBFeGVjUmVzdWx0IG9iamVjdC5cbiAqICAgICAgICAgIFRoZSBFeGVjUmVzdWx0IG9iamVjdCBjb250YWlucyB0aGUgZXhpdCBjb2RlLCBleGl0IHNpZ25hbCwgc3RkZXJyLCBhbmQgc3Rkb3V0LlxuICogQHRocm93cyBJZiB0aGUgY29tbWFuZCBmYWlscyB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgZmFsc2VgLlxuICogICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyB0aGUgZXhpdCBjb2RlIGFuZCBzdGRlcnIuXG4gKiAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBhbmQgaWdub3JlRXhpdENvZGUgaXMgYHRydWVgLFxuICogICAgICAgICB0aGUgZXJyb3IgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNvbW1hbmQ6IENvbW1hbmRQYXJ0W10gfCBzdHJpbmcsIG9wdGlvbnM6IEV4ZWNEZXRhaWxlZE9wdGlvbnMpOiBQcm9taXNlPEV4ZWNSZXN1bHQ+O1xuLyoqXG4gKiBFeGVjdXRlcyBhIGNvbW1hbmQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBleGVjdXRlLiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBleGVjdXRpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZCBvciBhbiBFeGVjUmVzdWx0IG9iamVjdC5cbiAqICAgICAgICAgIFRoZSBFeGVjUmVzdWx0IG9iamVjdCBjb250YWlucyB0aGUgZXhpdCBjb2RlLCBleGl0IHNpZ25hbCwgc3RkZXJyLCBhbmQgc3Rkb3V0LlxuICogQHRocm93cyBJZiB0aGUgY29tbWFuZCBmYWlscyB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgZmFsc2VgLlxuICogICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyB0aGUgZXhpdCBjb2RlIGFuZCBzdGRlcnIuXG4gKiAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBhbmQgaWdub3JlRXhpdENvZGUgaXMgYHRydWVgLFxuICogICAgICAgICB0aGUgZXJyb3IgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNvbW1hbmQ6IENvbW1hbmRQYXJ0W10gfCBzdHJpbmcsIG9wdGlvbnM6IEV4ZWNPcHRpb25zID0ge30pOiBQcm9taXNlPEV4ZWNSZXN1bHQgfCBzdHJpbmc+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY29tbWFuZCkpIHtcbiAgICBjb25zdCBiYXRjaFJlc3VsdCA9IGhhbmRsZUJhdGNoZWRDb21tYW5kKGNvbW1hbmQsIG9wdGlvbnMpO1xuICAgIGlmIChiYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIGJhdGNoUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBhcmdzID0gY29tbWFuZC5maWx0ZXIoKHBhcnQpOiBwYXJ0IGlzIHN0cmluZyA9PiB0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpO1xuICAgIGNvbnN0IGNvbW1hbmRMaW5lID0gdG9Db21tYW5kTGluZShhcmdzKTtcblxuICAgIGNvbnN0IG1heENvbW1hbmRMZW5ndGggPSBnZXRNYXhDb21tYW5kTGVuZ3RoKCk7XG4gICAgaWYgKGNvbW1hbmRMaW5lLmxlbmd0aCA+IG1heENvbW1hbmRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBDb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgKCR7U3RyaW5nKGNvbW1hbmRMaW5lLmxlbmd0aCl9IGNoYXJzLCBtYXggJHtTdHJpbmcobWF4Q29tbWFuZExlbmd0aCl9IG9uICR7cHJvY2Vzcy5wbGF0Zm9ybX0pLiBDb25zaWRlciBzcGxpdHRpbmcgaW50byBzbWFsbGVyIGJhdGNoZXMgb3IgdXNlIEV4ZWNBcmcuYFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBleGVjU3RyaW5nKHtcbiAgICAgIGNvbW1hbmQ6IGNvbW1hbmRMaW5lLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJhd0FyZ3M6IGFyZ3NcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG1heENvbW1hbmRMZW5ndGggPSBnZXRNYXhDb21tYW5kTGVuZ3RoKCk7XG4gIGlmIChjb21tYW5kLmxlbmd0aCA+IG1heENvbW1hbmRMZW5ndGgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICBuZXcgRXJyb3IoXG4gICAgICAgIGBDb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgKCR7U3RyaW5nKGNvbW1hbmQubGVuZ3RoKX0gY2hhcnMsIG1heCAke1N0cmluZyhtYXhDb21tYW5kTGVuZ3RoKX0gb24gJHtwcm9jZXNzLnBsYXRmb3JtfSkuIENvbnNpZGVyIHNwbGl0dGluZyBpbnRvIHNtYWxsZXIgYmF0Y2hlcyBvciB1c2UgRXhlY0FyZy5gXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBleGVjU3RyaW5nKHtcbiAgICBjb21tYW5kLFxuICAgIG9wdGlvbnNcbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBzaW5nbGUgc3RyaW5nIGNvbW1hbmQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBleGVjU3RyaW5nKHBhcmFtczogRXhlY1N0cmluZ1BhcmFtcyk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgY29tbWFuZCxcbiAgICBvcHRpb25zID0ge30sXG4gICAgcmF3QXJnc1xuICB9ID0gcGFyYW1zO1xuICBjb25zdCB7XG4gICAgY3dkID0gcHJvY2Vzcy5jd2QoKSxcbiAgICBpc1F1aWV0OiBxdWlldCA9IGZhbHNlLFxuICAgIHNob3VsZElnbm9yZUV4aXRDb2RlOiBpZ25vcmVFeGl0Q29kZSA9IGZhbHNlLFxuICAgIHNob3VsZEluY2x1ZGVEZXRhaWxzID0gZmFsc2UsXG4gICAgc3RkaW4gPSAnJ1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGdldExpYkRlYnVnZ2VyKCdFeGVjJykoYEV4ZWN1dGluZyBjb21tYW5kOiAke2NvbW1hbmR9YCk7XG5cbiAgICBjb25zdCBjaGlsZCA9IHNwYXduVmlhU2hlbGwobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFNwYXduVmlhU2hlbGxQYXJhbXM+KHtcbiAgICAgIGNvbW1hbmQsXG4gICAgICBjd2QsXG4gICAgICByYXdBcmdzXG4gICAgfSkpO1xuXG4gICAgbGV0IHN0ZG91dCA9ICcnO1xuICAgIGxldCBzdGRlcnIgPSAnJztcblxuICAgIGNoaWxkLnN0ZGluLndyaXRlKHN0ZGluKTtcbiAgICBjaGlsZC5zdGRpbi5lbmQoKTtcblxuICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGlmICghcXVpZXQpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoZGF0YSk7XG4gICAgICB9XG4gICAgICBzdGRvdXQgKz0gZGF0YS50b1N0cmluZygndXRmLTgnKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLnN0ZG91dC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgc3Rkb3V0ID0gdHJpbUVuZCh7XG4gICAgICAgIHN0cjogc3Rkb3V0LFxuICAgICAgICBzdWZmaXg6ICdcXG4nXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGlmICghcXVpZXQpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoZGF0YSk7XG4gICAgICB9XG4gICAgICBzdGRlcnIgKz0gZGF0YS50b1N0cmluZygndXRmLTgnKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLnN0ZGVyci5vbignZW5kJywgKCkgPT4ge1xuICAgICAgc3RkZXJyID0gdHJpbUVuZCh7XG4gICAgICAgIHN0cjogc3RkZXJyLFxuICAgICAgICBzdWZmaXg6ICdcXG4nXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKCdjbG9zZScsIChleGl0Q29kZSwgZXhpdFNpZ25hbCkgPT4ge1xuICAgICAgaWYgKGV4aXRDb2RlICE9PSAwICYmICFpZ25vcmVFeGl0Q29kZSkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb21tYW5kIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAke2V4aXRDb2RlID8gU3RyaW5nKGV4aXRDb2RlKSA6ICcobnVsbCknfVxcbiR7c3RkZXJyfWApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNob3VsZEluY2x1ZGVEZXRhaWxzKSB7XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGV4aXRDb2RlLFxuICAgICAgICBleGl0U2lnbmFsLFxuICAgICAgICBzdGRlcnIsXG4gICAgICAgIHN0ZG91dFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoIWlnbm9yZUV4aXRDb2RlKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghc2hvdWxkSW5jbHVkZURldGFpbHMpIHtcbiAgICAgICAgcmVzb2x2ZShzdGRvdXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoe1xuICAgICAgICBleGl0Q29kZTogbnVsbCxcbiAgICAgICAgZXhpdFNpZ25hbDogbnVsbCxcbiAgICAgICAgc3RkZXJyLFxuICAgICAgICBzdGRvdXRcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IGVudmlyb25tZW50IHZhcmlhYmxlcyBwYXNzZWQgdG8gY2hpbGQgcHJvY2Vzc2VzLlxuICovXG5jb25zdCBDSElMRF9FTlYgPSB7XG4gIERFQlVHX0NPTE9SUzogJzEnLFxuICAuLi5wcm9jZXNzLmVudlxufTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZXhlY3V0ZUJhdGNoZXN9LlxuICovXG5pbnRlcmZhY2UgRXhlY3V0ZUJhdGNoZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGJhc2UgY29tbWFuZCB3aXRob3V0IGJhdGNoZWQgYXJncy5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VDb21tYW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXRjaGVzIG9mIGFyZ3MuXG4gICAqL1xuICByZWFkb25seSBiYXRjaGVzOiBzdHJpbmdbXVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlYyBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uczogRXhlY09wdGlvbnM7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNwYXduVmlhU2hlbGx9LlxuICovXG5pbnRlcmZhY2UgU3Bhd25WaWFTaGVsbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCBzdHJpbmcgdG8gZXhlY3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBhcmd1bWVudCBhcnJheSAoaWYgYXZhaWxhYmxlKS5cbiAgICovXG4gIHJlYWRvbmx5IHJhd0FyZ3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBiYXRjaGVkIGNvbW1hbmRzIHNlcXVlbnRpYWxseSBhbmQgY29uY2F0ZW5hdGVzIHN0ZG91dC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBiYXRjaGVkIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNvbmNhdGVuYXRlZCByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVCYXRjaGVzKHBhcmFtczogRXhlY3V0ZUJhdGNoZXNQYXJhbXMpOiBQcm9taXNlPEV4ZWNSZXN1bHQgfCBzdHJpbmc+IHtcbiAgY29uc3QgeyBiYXNlQ29tbWFuZCwgYmF0Y2hlcywgb3B0aW9ucyB9ID0gcGFyYW1zO1xuICBjb25zdCByZXN1bHRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYmF0Y2ggb2YgYmF0Y2hlcykge1xuICAgIGNvbnN0IGJhdGNoQ29tbWFuZCA9IGAke2Jhc2VDb21tYW5kfSAke2JhdGNoLmpvaW4oJyAnKX1gO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNTdHJpbmcoe1xuICAgICAgY29tbWFuZDogYmF0Y2hDb21tYW5kLFxuICAgICAgb3B0aW9uc1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2hvdWxkSW5jbHVkZURldGFpbHMpIHtcbiAgICByZXR1cm4geyBleGl0Q29kZTogMCwgZXhpdFNpZ25hbDogbnVsbCwgc3RkZXJyOiAnJywgc3Rkb3V0OiByZXN1bHRzLmpvaW4oJ1xcbicpIH07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cy5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBtYXggY29tbWFuZCBsaW5lIGxlbmd0aC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbWF4IGNvbW1hbmQgbGVuZ3RoIGluIGNoYXJhY3RlcnMuXG4gKi9cbmZ1bmN0aW9uIGdldE1heENvbW1hbmRMZW5ndGgoKTogbnVtYmVyIHtcbiAgY29uc3QgV0lORE9XU19NQVhfQ09NTUFORF9MRU5HVEggPSA4MTkxO1xuICBjb25zdCBVTklYX01BWF9DT01NQU5EX0xFTkdUSCA9IDEzMTA3MjtcbiAgcmV0dXJuIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBXSU5ET1dTX01BWF9DT01NQU5EX0xFTkdUSCA6IFVOSVhfTUFYX0NPTU1BTkRfTEVOR1RIO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYSBjb21tYW5kIGFycmF5IHRoYXQgbWF5IGNvbnRhaW4gYW4ge0BsaW5rIEV4ZWNBcmd9LlxuICogUmV0dXJucyBhIFByb21pc2UgaWYgYmF0Y2hpbmcgaXMgbmVlZGVkLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgY29tbWFuZFxuICogaGFzIG5vIEV4ZWNBcmcgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuXG4gKlxuICogQHBhcmFtIHBhcnRzIC0gVGhlIGNvbW1hbmQgcGFydHMuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBleGVjIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgaWYgYmF0Y2hpbmcgaXMgaGFuZGxlZCwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUJhdGNoZWRDb21tYW5kKHBhcnRzOiBDb21tYW5kUGFydFtdLCBvcHRpb25zOiBFeGVjT3B0aW9ucyk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4gfCB1bmRlZmluZWQge1xuICBjb25zdCBleGVjQXJncyA9IHBhcnRzLmZpbHRlcihpc0V4ZWNBcmcpO1xuICBpZiAoZXhlY0FyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoZXhlY0FyZ3MubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ09ubHkgb25lIEV4ZWNBcmcgd2l0aCBiYXRjaGVkQXJncyBpcyBhbGxvd2VkIHBlciBjb21tYW5kJykpO1xuICB9XG5cbiAgY29uc3QgZXhlY0FyZyA9IGV4ZWNBcmdzWzBdO1xuICBhc3NlcnROb25OdWxsYWJsZShleGVjQXJnKTtcbiAgY29uc3Qgc3RhdGljUGFydHMgPSBwYXJ0cy5maWx0ZXIoKHBhcnQpOiBwYXJ0IGlzIHN0cmluZyA9PiB0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpO1xuICBjb25zdCBiYXNlQ29tbWFuZCA9IHRvQ29tbWFuZExpbmUoc3RhdGljUGFydHMpO1xuICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4Q29tbWFuZExlbmd0aCgpO1xuXG4gIC8vIFRyeSBleHBhbmRpbmcgYWxsIGFyZ3MgaW5saW5lXG4gIGNvbnN0IGZ1bGxDb21tYW5kID0gYCR7YmFzZUNvbW1hbmR9ICR7ZXhlY0FyZy5iYXRjaGVkQXJncy5qb2luKCcgJyl9YDtcbiAgaWYgKGZ1bGxDb21tYW5kLmxlbmd0aCA8PSBtYXhDb21tYW5kTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGV4ZWNTdHJpbmcoe1xuICAgICAgY29tbWFuZDogZnVsbENvbW1hbmQsXG4gICAgICBvcHRpb25zXG4gICAgfSk7XG4gIH1cblxuICAvLyBTcGxpdCBpbnRvIGJhdGNoZXNcbiAgY29uc3QgYmF0Y2hlczogc3RyaW5nW11bXSA9IFtdO1xuICBsZXQgY3VycmVudEJhdGNoOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYXJnIG9mIGV4ZWNBcmcuYmF0Y2hlZEFyZ3MpIHtcbiAgICBjb25zdCB0ZW50YXRpdmUgPSBgJHtiYXNlQ29tbWFuZH0gJHtbLi4uY3VycmVudEJhdGNoLCBhcmddLmpvaW4oJyAnKX1gO1xuICAgIGlmICh0ZW50YXRpdmUubGVuZ3RoID4gbWF4Q29tbWFuZExlbmd0aCkge1xuICAgICAgaWYgKGN1cnJlbnRCYXRjaC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3Qgc3BsaXQgY29tbWFuZCBpbnRvIGJhdGNoZXM6IGEgc2luZ2xlIGFyZ3VtZW50ICgke1N0cmluZyhhcmcubGVuZ3RoKX0gY2hhcnMpIHBsdXMgdGhlIGJhc2UgY29tbWFuZCAoJHtTdHJpbmcoYmFzZUNvbW1hbmQubGVuZ3RoKX0gY2hhcnMpIGV4Y2VlZHMgdGhlIG1heCBjb21tYW5kIGxlbmd0aCAoJHtTdHJpbmcobWF4Q29tbWFuZExlbmd0aCl9KS5gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYmF0Y2hlcy5wdXNoKGN1cnJlbnRCYXRjaCk7XG4gICAgICBjdXJyZW50QmF0Y2ggPSBbYXJnXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudEJhdGNoLnB1c2goYXJnKTtcbiAgICB9XG4gIH1cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEFsd2F5cyB0cnVlIGFmdGVyIHRoZSBsb29wOyBiYXRjaGVkQXJncyBpcyBub24tZW1wdHkgYXQgdGhpcyBwb2ludC4gKi9cbiAgaWYgKGN1cnJlbnRCYXRjaC5sZW5ndGggPiAwKSB7XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICBiYXRjaGVzLnB1c2goY3VycmVudEJhdGNoKTtcbiAgfVxuXG4gIHJldHVybiBleGVjdXRlQmF0Y2hlcyh7XG4gICAgYmFzZUNvbW1hbmQsXG4gICAgYmF0Y2hlcyxcbiAgICBvcHRpb25zXG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGNvbW1hbmQgcGFydCBpcyBhbiB7QGxpbmsgRXhlY0FyZ30uXG4gKlxuICogQHBhcmFtIHBhcnQgLSBUaGUgY29tbWFuZCBwYXJ0IHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFydCBpcyBhbiBFeGVjQXJnLlxuICovXG5mdW5jdGlvbiBpc0V4ZWNBcmcocGFydDogQ29tbWFuZFBhcnQpOiBwYXJ0IGlzIEV4ZWNBcmcge1xuICByZXR1cm4gdHlwZW9mIHBhcnQgPT09ICdvYmplY3QnICYmICdiYXRjaGVkQXJncycgaW4gcGFydDtcbn1cblxuLyoqXG4gKiBTcGF3bnMgYSBjaGlsZCBwcm9jZXNzIHZpYSB0aGUgYXBwcm9wcmlhdGUgc2hlbGwuXG4gKlxuICogT24gV2luZG93cywgaWYgdGhlIGNvbW1hbmQgY29udGFpbnMgbmV3bGluZXMgKHdoaWNoIGBjbWQuZXhlYCBjYW5ub3QgaGFuZGxlKVxuICogYW5kIHRoZSByYXcgYXJncyBhcnJheSBpcyBhdmFpbGFibGUsIHNwYXducyB0aGUgcHJvY2VzcyBkaXJlY3RseSB3aXRob3V0XG4gKiBhbnkgc2hlbGwgXHUyMDE0IHBhc3NpbmcgYXJncyB2aWEgYENyZWF0ZVByb2Nlc3NgLCB3aGljaCBhdm9pZHMgYWxsIHF1b3RpbmcgaXNzdWVzLlxuICpcbiAqIE9uIFdpbmRvd3MgKGNtZC5leGUgcGF0aCksIGFwcGxpZXMgYF5gLWVzY2FwaW5nIGZvciBjbWQgbWV0YWNoYXJhY3RlcnMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBzcGF3bmluZyB0aGUgY2hpbGQgcHJvY2Vzcy5cbiAqIEByZXR1cm5zIFRoZSBzcGF3bmVkIGNoaWxkIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIHNwYXduVmlhU2hlbGwocGFyYW1zOiBTcGF3blZpYVNoZWxsUGFyYW1zKTogQ2hpbGRQcm9jZXNzV2l0aG91dE51bGxTdHJlYW1zIHtcbiAgY29uc3QgeyBjb21tYW5kLCBjd2QsIHJhd0FyZ3MgfSA9IHBhcmFtcztcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgJiYgY29tbWFuZC5pbmNsdWRlcygnXFxuJykpIHtcbiAgICBpZiAoIXJhd0FyZ3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29tbWFuZHMgY29udGFpbmluZyBuZXdsaW5lcyBjYW5ub3QgYmUgZXhlY3V0ZWQgdGhyb3VnaCBjbWQuZXhlIG9uIFdpbmRvd3MuIFBhc3MgYW4gYXJndW1lbnQgYXJyYXkgaW5zdGVhZCBvZiBhIHN0cmluZy4nKTtcbiAgICB9XG4gICAgY29uc3QgW3Byb2dyYW0sIC4uLmFyZ3NdID0gcmF3QXJncztcbiAgICBhc3NlcnROb25OdWxsYWJsZShwcm9ncmFtLCAnQ29tbWFuZCBhcnJheSBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgIHJldHVybiBzcGF3bihwcm9ncmFtLCBhcmdzLCB7XG4gICAgICBjd2QsXG4gICAgICBlbnY6IENISUxEX0VOVixcbiAgICAgIHN0ZGlvOiAncGlwZSdcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHNoZWxsQ29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBjbWRFc2NhcGVDb21tYW5kTGluZShjb21tYW5kKSA6IGNvbW1hbmQ7XG4gIHJldHVybiBzcGF3bihzaGVsbENvbW1hbmQsIFtdLCB7XG4gICAgY3dkLFxuICAgIGVudjogQ0hJTERfRU5WLFxuICAgIHNoZWxsOiB0cnVlLFxuICAgIHN0ZGlvOiAncGlwZSdcbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLFNBQVMsYUFBYTtBQUN0QixPQUFPLGFBQWE7QUFFcEIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyxlQUFlO0FBQ3hCLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBNEpBLFNBQVMsS0FBSyxTQUFpQyxVQUF1QixDQUFDLEdBQWlDO0FBQzdHLE1BQUksTUFBTSxRQUFRLE9BQU8sR0FBRztBQUMxQixVQUFNLGNBQWMscUJBQXFCLFNBQVMsT0FBTztBQUN6RCxRQUFJLGFBQWE7QUFDZixhQUFPO0FBQUEsSUFDVDtBQUNBLFVBQU0sT0FBTyxRQUFRLE9BQU8sQ0FBQyxTQUF5QixPQUFPLFNBQVMsUUFBUTtBQUM5RSxVQUFNLGNBQWMsY0FBYyxJQUFJO0FBRXRDLFVBQU1BLG9CQUFtQixvQkFBb0I7QUFDN0MsUUFBSSxZQUFZLFNBQVNBLG1CQUFrQjtBQUN6QyxhQUFPLFFBQVE7QUFBQSxRQUNiLElBQUk7QUFBQSxVQUNGLDZCQUE2QixPQUFPLFlBQVksTUFBTSxDQUFDLGVBQWUsT0FBT0EsaUJBQWdCLENBQUMsT0FBTyxRQUFRLFFBQVE7QUFBQSxRQUN2SDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsV0FB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QUFNLGNBQWMsR0FBRyxXQUFXLElBQUksUUFBUSxZQUFZLEtBQUssR0FBRyxDQUFDO0FBQ25FLE1BQUksWUFBWSxVQUFVLGtCQUFrQjtBQUMxQyxXQUFPLFdBQVc7QUFBQSxNQUNoQixTQUFTO0FBQUEsTUFDVDtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFHQSxRQUFNLFVBQXNCLENBQUM7QUFDN0IsTUFBSSxlQUF5QixDQUFDO0FBRTlCLGFBQVcsT0FBTyxRQUFRLGFBQWE7QUFDckMsVUFBTSxZQUFZLEdBQUcsV0FBVyxJQUFJLENBQUMsR0FBRyxjQUFjLEdBQUcsRUFBRSxLQUFLLEdBQUcsQ0FBQztBQUNwRSxRQUFJLFVBQVUsU0FBUyxrQkFBa0I7QUFDdkMsVUFBSSxhQUFhLFdBQVcsR0FBRztBQUM3QixlQUFPLFFBQVE7QUFBQSxVQUNiLElBQUk7QUFBQSxZQUNGLHlEQUF5RCxPQUFPLElBQUksTUFBTSxDQUFDLGtDQUFrQyxPQUFPLFlBQVksTUFBTSxDQUFDLDJDQUEyQyxPQUFPLGdCQUFnQixDQUFDO0FBQUEsVUFDNU07QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLGNBQVEsS0FBSyxZQUFZO0FBQ3pCLHFCQUFlLENBQUMsR0FBRztBQUFBLElBQ3JCLE9BQU87QUFDTCxtQkFBYSxLQUFLLEdBQUc7QUFBQSxJQUN2QjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLGFBQWEsU0FBUyxHQUFHO0FBRTNCLFlBQVEsS0FBSyxZQUFZO0FBQUEsRUFDM0I7QUFFQSxTQUFPLGVBQWU7QUFBQSxJQUNwQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFRQSxTQUFTLFVBQVUsTUFBb0M7QUFDckQsU0FBTyxPQUFPLFNBQVMsWUFBWSxpQkFBaUI7QUFDdEQ7QUFjQSxTQUFTLGNBQWMsUUFBNkQ7QUFDbEYsUUFBTSxFQUFFLFNBQVMsS0FBSyxRQUFRLElBQUk7QUFDbEMsTUFBSSxRQUFRLGFBQWEsV0FBVyxRQUFRLFNBQVMsSUFBSSxHQUFHO0FBQzFELFFBQUksQ0FBQyxTQUFTO0FBQ1osWUFBTSxJQUFJLE1BQU0seUhBQXlIO0FBQUEsSUFDM0k7QUFDQSxVQUFNLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSTtBQUMzQixzQkFBa0IsU0FBUyxpQ0FBaUM7QUFDNUQsV0FBTyxNQUFNLFNBQVMsTUFBTTtBQUFBLE1BQzFCO0FBQUEsTUFDQSxLQUFLO0FBQUEsTUFDTCxPQUFPO0FBQUEsSUFDVCxDQUFDO0FBQUEsRUFDSDtBQUVBLFFBQU0sZUFBZSxRQUFRLGFBQWEsVUFBVSxxQkFBcUIsT0FBTyxJQUFJO0FBQ3BGLFNBQU8sTUFBTSxjQUFjLENBQUMsR0FBRztBQUFBLElBQzdCO0FBQUEsSUFDQSxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsRUFDVCxDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbIm1heENvbW1hbmRMZW5ndGgiXQp9Cg==
|
|
@@ -37,11 +37,11 @@ async function format(options) {
|
|
|
37
37
|
const { paths, rewrite = true } = options ?? {};
|
|
38
38
|
const rootFolder = getRootFolder();
|
|
39
39
|
assertNonNullable(rootFolder, "Root folder not found");
|
|
40
|
-
let dprintJsonPath = resolvePathFromRootSafe(ObsidianDevUtilsRepoPaths.DprintJson);
|
|
40
|
+
let dprintJsonPath = resolvePathFromRootSafe({ path: ObsidianDevUtilsRepoPaths.DprintJson });
|
|
41
41
|
if (!existsSync(dprintJsonPath)) {
|
|
42
42
|
const packageFolder = getRootFolder(getFolderName(import.meta.url));
|
|
43
43
|
assertNonNullable(packageFolder, "Could not find package folder.");
|
|
44
|
-
dprintJsonPath = resolvePathFromRootSafe(join(ObsidianDevUtilsRepoPaths.DistTemplates, ObsidianDevUtilsRepoPaths.DprintJson)
|
|
44
|
+
dprintJsonPath = resolvePathFromRootSafe({ cwd: packageFolder, path: join(ObsidianDevUtilsRepoPaths.DistTemplates, ObsidianDevUtilsRepoPaths.DprintJson) });
|
|
45
45
|
}
|
|
46
46
|
if (!existsSync(dprintJsonPath)) {
|
|
47
47
|
throw new Error("dprint.json not found");
|
|
@@ -53,4 +53,4 @@ async function format(options) {
|
|
|
53
53
|
export {
|
|
54
54
|
format
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9mb3JtYXR0ZXJzL2RwcmludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEZvcm1hdCB0aGUgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQge1xuICBnZXRGb2xkZXJOYW1lLFxuICBqb2luXG59IGZyb20gJy4uLy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIGZvcm1hdH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGZvcm1hdC4gSWYgb21pdHRlZCwgZm9ybWF0cyB0aGUgZW50aXJlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJld3JpdGUgdGhlIHNvdXJjZSBjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmV3cml0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgRm9ybWF0T3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNvdXJjZSBjb2RlIGhhcyBiZWVuIGZvcm1hdHRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZvcm1hdChvcHRpb25zPzogRm9ybWF0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHBhdGhzLCByZXdyaXRlID0gdHJ1ZSB9ID0gb3B0aW9ucyA/
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9mb3JtYXR0ZXJzL2RwcmludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEZvcm1hdCB0aGUgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQge1xuICBnZXRGb2xkZXJOYW1lLFxuICBqb2luXG59IGZyb20gJy4uLy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIGZvcm1hdH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGZvcm1hdC4gSWYgb21pdHRlZCwgZm9ybWF0cyB0aGUgZW50aXJlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJld3JpdGUgdGhlIHNvdXJjZSBjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmV3cml0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgRm9ybWF0T3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNvdXJjZSBjb2RlIGhhcyBiZWVuIGZvcm1hdHRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZvcm1hdChvcHRpb25zPzogRm9ybWF0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHBhdGhzLCByZXdyaXRlID0gdHJ1ZSB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgY29uc3Qgcm9vdEZvbGRlciA9IGdldFJvb3RGb2xkZXIoKTtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUocm9vdEZvbGRlciwgJ1Jvb3QgZm9sZGVyIG5vdCBmb3VuZCcpO1xuICBsZXQgZHByaW50SnNvblBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRHByaW50SnNvbiB9KTtcbiAgaWYgKCFleGlzdHNTeW5jKGRwcmludEpzb25QYXRoKSkge1xuICAgIGNvbnN0IHBhY2thZ2VGb2xkZXIgPSBnZXRSb290Rm9sZGVyKGdldEZvbGRlck5hbWUoaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUocGFja2FnZUZvbGRlciwgJ0NvdWxkIG5vdCBmaW5kIHBhY2thZ2UgZm9sZGVyLicpO1xuICAgIGRwcmludEpzb25QYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBjd2Q6IHBhY2thZ2VGb2xkZXIsIHBhdGg6IGpvaW4oT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0VGVtcGxhdGVzLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRwcmludEpzb24pIH0pO1xuICB9XG5cbiAgaWYgKCFleGlzdHNTeW5jKGRwcmludEpzb25QYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZHByaW50Lmpzb24gbm90IGZvdW5kJyk7XG4gIH1cblxuICBjb25zdCBjb21tYW5kID0gcmV3cml0ZSA/ICdmbXQnIDogJ2NoZWNrJztcbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBwYXRocy1wcm92aWRlZCBicmFuY2ggaXMgb25seSBleGVyY2lzZWQgYnkgY29uc3VtZXIgcHJvamVjdHMgcGFzc2luZyBmaWxlIGxpc3RzLiAqL1xuICBjb25zdCB0YXJnZXRzID0gcGF0aHM/Lmxlbmd0aCA/IHBhdGhzIDogWycqKi8qJ107XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ25weCcsICdkcHJpbnQnLCBjb21tYW5kLCAnLS1jb25maWcnLCBkcHJpbnRKc29uUGF0aCwgeyBiYXRjaGVkQXJnczogdGFyZ2V0cyB9XSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLFNBQVMsa0JBQWtCO0FBRTNCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxpQ0FBaUM7QUFDMUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBdUJQLGVBQXNCLE9BQU8sU0FBd0M7QUFDbkUsUUFBTSxFQUFFLE9BQU8sVUFBVSxLQUFLLElBQUksV0FBVyxDQUFDO0FBQzlDLFFBQU0sYUFBYSxjQUFjO0FBQ2pDLG9CQUFrQixZQUFZLHVCQUF1QjtBQUNyRCxNQUFJLGlCQUFpQix3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixXQUFXLENBQUM7QUFDM0YsTUFBSSxDQUFDLFdBQVcsY0FBYyxHQUFHO0FBQy9CLFVBQU0sZ0JBQWdCLGNBQWMsY0FBYyxZQUFZLEdBQUcsQ0FBQztBQUNsRSxzQkFBa0IsZUFBZSxnQ0FBZ0M7QUFDakUscUJBQWlCLHdCQUF3QixFQUFFLEtBQUssZUFBZSxNQUFNLEtBQUssMEJBQTBCLGVBQWUsMEJBQTBCLFVBQVUsRUFBRSxDQUFDO0FBQUEsRUFDNUo7QUFFQSxNQUFJLENBQUMsV0FBVyxjQUFjLEdBQUc7QUFDL0IsVUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsRUFDekM7QUFFQSxRQUFNLFVBQVUsVUFBVSxRQUFRO0FBRWxDLFFBQU0sVUFBVSxPQUFPLFNBQVMsUUFBUSxDQUFDLE1BQU07QUFFL0MsUUFBTSxhQUFhLENBQUMsT0FBTyxVQUFVLFNBQVMsWUFBWSxnQkFBZ0IsRUFBRSxhQUFhLFFBQVEsQ0FBQyxDQUFDO0FBQ3JHOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -14,29 +14,59 @@ export interface EditJsonOptions {
|
|
|
14
14
|
*/
|
|
15
15
|
readonly shouldSkipIfMissing?: boolean;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Parameters for {@link editJson}.
|
|
19
|
+
*
|
|
20
|
+
* @typeParam T - The type of the data to be edited.
|
|
21
|
+
*/
|
|
22
|
+
export interface EditJsonParams<T> extends EditJsonOptions {
|
|
23
|
+
/**
|
|
24
|
+
* The function to edit the parsed JSON data.
|
|
25
|
+
*
|
|
26
|
+
* @param data - The parsed JSON data to edit.
|
|
27
|
+
*/
|
|
28
|
+
editFn(this: void, data: T): Promisable<void>;
|
|
29
|
+
/**
|
|
30
|
+
* The path to the JSON file.
|
|
31
|
+
*/
|
|
32
|
+
readonly path: string;
|
|
33
|
+
}
|
|
17
34
|
/**
|
|
18
35
|
* Options for {@link editJsonSync}.
|
|
19
36
|
*/
|
|
20
37
|
export type EditJsonSyncOptions = EditJsonOptions;
|
|
38
|
+
/**
|
|
39
|
+
* Parameters for {@link editJsonSync}.
|
|
40
|
+
*
|
|
41
|
+
* @typeParam T - The type of the data to be edited.
|
|
42
|
+
*/
|
|
43
|
+
export interface EditJsonSyncParams<T> extends EditJsonSyncOptions {
|
|
44
|
+
/**
|
|
45
|
+
* The function to edit the parsed JSON data.
|
|
46
|
+
*
|
|
47
|
+
* @param data - The parsed JSON data to edit.
|
|
48
|
+
*/
|
|
49
|
+
editFn(this: void, data: T): void;
|
|
50
|
+
/**
|
|
51
|
+
* The path to the JSON file.
|
|
52
|
+
*/
|
|
53
|
+
readonly path: string;
|
|
54
|
+
}
|
|
21
55
|
/**
|
|
22
56
|
* Reads, edits, and writes back a JSON file using a provided edit function.
|
|
23
57
|
*
|
|
24
58
|
* @typeParam T - The type of the data to be edited.
|
|
25
|
-
* @param
|
|
26
|
-
* @param editFn - The function to edit the parsed JSON data.
|
|
27
|
-
* @param options - Additional options for editing.
|
|
59
|
+
* @param params - The parameters for the function.
|
|
28
60
|
* @returns A {@link Promise} that resolves when the file has been edited and written.
|
|
29
61
|
*/
|
|
30
|
-
export declare function editJson<T>(
|
|
62
|
+
export declare function editJson<T>(params: EditJsonParams<T>): Promise<void>;
|
|
31
63
|
/**
|
|
32
64
|
* Reads, edits, and writes back a JSON file using a provided edit function.
|
|
33
65
|
*
|
|
34
66
|
* @typeParam T - The type of the data to be edited.
|
|
35
|
-
* @param
|
|
36
|
-
* @param editFn - The function to edit the parsed JSON data.
|
|
37
|
-
* @param options - Additional options for editing.
|
|
67
|
+
* @param params - The parameters for the function.
|
|
38
68
|
*/
|
|
39
|
-
export declare function editJsonSync<T>(
|
|
69
|
+
export declare function editJsonSync<T>(params: EditJsonSyncParams<T>): void;
|
|
40
70
|
/**
|
|
41
71
|
* Reads a JSON file and parses its contents into a JavaScript object of type `T`.
|
|
42
72
|
*
|
|
@@ -31,10 +31,12 @@ import {
|
|
|
31
31
|
writeFile
|
|
32
32
|
} from "node:fs/promises";
|
|
33
33
|
import { toJson } from "../object-utils.mjs";
|
|
34
|
-
async function editJson(
|
|
34
|
+
async function editJson(params) {
|
|
35
35
|
const {
|
|
36
|
+
editFn,
|
|
37
|
+
path,
|
|
36
38
|
shouldSkipIfMissing
|
|
37
|
-
} =
|
|
39
|
+
} = params;
|
|
38
40
|
if (shouldSkipIfMissing && !existsSync(path)) {
|
|
39
41
|
return;
|
|
40
42
|
}
|
|
@@ -42,10 +44,12 @@ async function editJson(path, editFn, options = {}) {
|
|
|
42
44
|
await editFn(data);
|
|
43
45
|
await writeJson(path, data);
|
|
44
46
|
}
|
|
45
|
-
function editJsonSync(
|
|
47
|
+
function editJsonSync(params) {
|
|
46
48
|
const {
|
|
49
|
+
editFn,
|
|
50
|
+
path,
|
|
47
51
|
shouldSkipIfMissing
|
|
48
|
-
} =
|
|
52
|
+
} = params;
|
|
49
53
|
if (shouldSkipIfMissing && !existsSync(path)) {
|
|
50
54
|
return;
|
|
51
55
|
}
|
|
@@ -75,4 +79,4 @@ export {
|
|
|
75
79
|
writeJson,
|
|
76
80
|
writeJsonSync
|
|
77
81
|
};
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9qc29uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIEpTT04uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgcmVhZEZpbGUsXG4gIHdyaXRlRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuaW1wb3J0IHsgdG9Kc29uIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZWRpdEpzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRKc29uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHNraXBzIGVkaXRpbmcgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwSWZNaXNzaW5nPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZWRpdEpzb259LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBkYXRhIHRvIGJlIGVkaXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0SnNvblBhcmFtczxUPiBleHRlbmRzIEVkaXRKc29uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZWRpdCB0aGUgcGFyc2VkIEpTT04gZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgcGFyc2VkIEpTT04gZGF0YSB0byBlZGl0LlxuICAgKi9cbiAgZWRpdEZuKHRoaXM6IHZvaWQsIGRhdGE6IFQpOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgSlNPTiBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBlZGl0SnNvblN5bmN9LlxuICovXG5leHBvcnQgdHlwZSBFZGl0SnNvblN5bmNPcHRpb25zID0gRWRpdEpzb25PcHRpb25zO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBlZGl0SnNvblN5bmN9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBkYXRhIHRvIGJlIGVkaXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0SnNvblN5bmNQYXJhbXM8VD4gZXh0ZW5kcyBFZGl0SnNvblN5bmNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBlZGl0IHRoZSBwYXJzZWQgSlNPTiBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBwYXJzZWQgSlNPTiBkYXRhIHRvIGVkaXQuXG4gICAqL1xuICBlZGl0Rm4odGhpczogdm9pZCwgZGF0YTogVCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVhZHMsIGVkaXRzLCBhbmQgd3JpdGVzIGJhY2sgYSBKU09OIGZpbGUgdXNpbmcgYSBwcm92aWRlZCBlZGl0IGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBkYXRhIHRvIGJlIGVkaXRlZC5cbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIGVkaXRlZCBhbmQgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRKc29uPFQ+KHBhcmFtczogRWRpdEpzb25QYXJhbXM8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGVkaXRGbixcbiAgICBwYXRoLFxuICAgIHNob3VsZFNraXBJZk1pc3NpbmdcbiAgfSA9IHBhcmFtcztcbiAgaWYgKHNob3VsZFNraXBJZk1pc3NpbmcgJiYgIWV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRKc29uPFQ+KHBhdGgpO1xuICBhd2FpdCBlZGl0Rm4oZGF0YSk7XG4gIGF3YWl0IHdyaXRlSnNvbihwYXRoLCBkYXRhKTtcbn1cblxuLyoqXG4gKiBSZWFkcywgZWRpdHMsIGFuZCB3cml0ZXMgYmFjayBhIEpTT04gZmlsZSB1c2luZyBhIHByb3ZpZGVkIGVkaXQgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRhdGEgdG8gYmUgZWRpdGVkLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlZGl0SnNvblN5bmM8VD4ocGFyYW1zOiBFZGl0SnNvblN5bmNQYXJhbXM8VD4pOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGVkaXRGbixcbiAgICBwYXRoLFxuICAgIHNob3VsZFNraXBJZk1pc3NpbmdcbiAgfSA9IHBhcmFtcztcbiAgaWYgKHNob3VsZFNraXBJZk1pc3NpbmcgJiYgIWV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZGF0YSA9IHJlYWRKc29uU3luYzxUPihwYXRoKTtcbiAgZWRpdEZuKGRhdGEpO1xuICB3cml0ZUpzb25TeW5jKHBhdGgsIGRhdGEpO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgSlNPTiBmaWxlIGFuZCBwYXJzZXMgaXRzIGNvbnRlbnRzIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdCBvZiB0eXBlIGBUYC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSB0byB3aGljaCB0aGUgSlNPTiBjb250ZW50IHdpbGwgYmUgcGFyc2VkLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgSlNPTiBmaWxlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBwYXJzZWQgSlNPTiBvYmplY3Qgb2YgdHlwZSBgVGAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkSnNvbjxUPihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUocGF0aCwgJ3V0Zi04JykpIGFzIFQ7XG59XG5cbi8qKlxuICogUmVhZHMgYSBKU09OIGZpbGUgYW5kIHBhcnNlcyBpdHMgY29udGVudHMgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0IG9mIHR5cGUgYFRgLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIHRvIHdoaWNoIHRoZSBKU09OIGNvbnRlbnQgd2lsbCBiZSBwYXJzZWQuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIEpTT04gb2JqZWN0IG9mIHR5cGUgYFRgLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgZHVtbXkgcGFyYW1ldGVyIHRvIGdldCB0eXBlIGluZmVyZW5jZS5cbmV4cG9ydCBmdW5jdGlvbiByZWFkSnNvblN5bmM8VD4ocGF0aDogc3RyaW5nKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwYXRoLCAndXRmLTgnKSkgYXMgVDtcbn1cblxuLyoqXG4gKiBXcml0ZXMgYSBKYXZhU2NyaXB0IG9iamVjdCB0byBhIEpTT04gZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUuXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIHdyaXRlIHRvIHRoZSBKU09OIGZpbGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlSnNvbihwYXRoOiBzdHJpbmcsIGRhdGE6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgd3JpdGVGaWxlKHBhdGgsIGAke3RvSnNvbihkYXRhKX1cXG5gKTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgYSBKYXZhU2NyaXB0IG9iamVjdCB0byBhIEpTT04gZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUuXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIHdyaXRlIHRvIHRoZSBKU09OIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUpzb25TeW5jKHBhdGg6IHN0cmluZywgZGF0YTogdW5rbm93bik6IHZvaWQge1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIGAke3RvSnNvbihkYXRhKX1cXG5gKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLGNBQWM7QUE4RHZCLGVBQXNCLFNBQVksUUFBMEM7QUFDMUUsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLE1BQUksdUJBQXVCLENBQUMsV0FBVyxJQUFJLEdBQUc7QUFDNUM7QUFBQSxFQUNGO0FBQ0EsUUFBTSxPQUFPLE1BQU0sU0FBWSxJQUFJO0FBQ25DLFFBQU0sT0FBTyxJQUFJO0FBQ2pCLFFBQU0sVUFBVSxNQUFNLElBQUk7QUFDNUI7QUFRTyxTQUFTLGFBQWdCLFFBQXFDO0FBQ25FLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixNQUFJLHVCQUF1QixDQUFDLFdBQVcsSUFBSSxHQUFHO0FBQzVDO0FBQUEsRUFDRjtBQUNBLFFBQU0sT0FBTyxhQUFnQixJQUFJO0FBQ2pDLFNBQU8sSUFBSTtBQUNYLGdCQUFjLE1BQU0sSUFBSTtBQUMxQjtBQVNBLGVBQXNCLFNBQVksTUFBMEI7QUFDMUQsU0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLE1BQU0sT0FBTyxDQUFDO0FBQ2pEO0FBVU8sU0FBUyxhQUFnQixNQUFpQjtBQUMvQyxTQUFPLEtBQUssTUFBTSxhQUFhLE1BQU0sT0FBTyxDQUFDO0FBQy9DO0FBU0EsZUFBc0IsVUFBVSxNQUFjLE1BQThCO0FBQzFFLFFBQU0sVUFBVSxNQUFNLEdBQUcsT0FBTyxJQUFJLENBQUM7QUFBQSxDQUFJO0FBQzNDO0FBUU8sU0FBUyxjQUFjLE1BQWMsTUFBcUI7QUFDL0QsZ0JBQWMsTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDO0FBQUEsQ0FBSTtBQUN6QzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -39,7 +39,11 @@ const noUnusedParamsMembers = {
|
|
|
39
39
|
if (info.binding.type === "pattern") {
|
|
40
40
|
collectPatternMembers(info.binding.pattern, usage);
|
|
41
41
|
} else {
|
|
42
|
-
collectReferenceMembers(
|
|
42
|
+
collectReferenceMembers({
|
|
43
|
+
paramName: info.binding.name,
|
|
44
|
+
scope: context.sourceCode.getScope(node),
|
|
45
|
+
usage
|
|
46
|
+
});
|
|
43
47
|
}
|
|
44
48
|
}
|
|
45
49
|
},
|
|
@@ -134,7 +138,8 @@ function collectPatternMembers(pattern, usage) {
|
|
|
134
138
|
}
|
|
135
139
|
}
|
|
136
140
|
}
|
|
137
|
-
function collectReferenceMembers(
|
|
141
|
+
function collectReferenceMembers(params) {
|
|
142
|
+
const { paramName, scope, usage } = params;
|
|
138
143
|
const variable = ensureNonNullable(scope.set.get(paramName));
|
|
139
144
|
for (const reference of variable.references) {
|
|
140
145
|
classifyReference(reference.identifier, usage);
|
|
@@ -203,4 +208,4 @@ export {
|
|
|
203
208
|
MESSAGE_ID,
|
|
204
209
|
noUnusedParamsMembers
|
|
205
210
|
};
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzXG4gKlxuICogRmxhZ3MgbWVtYmVycyBvZiBhIGAqUGFyYW1zYCAvIGAqT3B0aW9uc2AgcGFyYW1ldGVyLWJhZyBpbnRlcmZhY2UgdGhhdCBhcmVcbiAqIG5ldmVyIGFjY2Vzc2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24vbWV0aG9kL2NvbnN0cnVjdG9yIHRoYXQgcmVjZWl2ZXMgdGhlXG4gKiBpbnRlcmZhY2UgYXMgYSBwYXJhbWV0ZXIuXG4gKlxuICogRGV0ZWN0aW9uIGlzIHBlci1mdW5jdGlvbiwgdXNpbmcgc2NvcGUgYW5hbHlzaXMgdG8gZmluZCB0aGUgcmVhbCByZWZlcmVuY2VzXG4gKiB0byB0aGUgcGFyYW1ldGVyIChub3QgdW5yZWxhdGVkIHNhbWUtbmFtZWQgaWRlbnRpZmllcnMpLiBBIG1lbWJlciBjb3VudHMgYXNcbiAqIHVzZWQgd2hlbiBpdCBpcyByZWZlcmVuY2VkIGJ5IG5hbWUgXHUyMDE0IGBwYXJhbXMubWVtYmVyYCwgYHBhcmFtc1snbWVtYmVyJ11gLCBvclxuICogYGNvbnN0IHsgbWVtYmVyIH0gPSBwYXJhbXNgIChwbHVzIGEgZGVzdHJ1Y3R1cmVkIHNpZ25hdHVyZVxuICogYGZuKHsgbWVtYmVyIH06IEZvb1BhcmFtcylgKS5cbiAqXG4gKiBDcnVjaWFsbHksIGlmIHRoZSBvYmplY3QgZXZlciBFU0NBUEVTIHdob2xlIFx1MjAxNCBzcHJlYWQgKGB7IC4uLnBhcmFtcyB9YCksIHJlc3RcbiAqIChgY29uc3QgeyAuLi5yZXN0IH0gPSBwYXJhbXNgKSwgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IChgZihwYXJhbXMpYCksIHJldHVybmVkLFxuICogb3Igc3RvcmVkIChgdGhpcy5wYXJhbXMgPSBwYXJhbXNgKSBcdTIwMTQgZXZlcnkgbWVtYmVyIGlzIHRyZWF0ZWQgYXMgdXNlZCBhbmRcbiAqIG5vdGhpbmcgaXMgcmVwb3J0ZWQgZm9yIHRoYXQgaW50ZXJmYWNlLiBTdWNoIGFuIGVzY2FwZSBlaXRoZXIgcmVhZHMgZXZlcnlcbiAqIG1lbWJlciAoc3ByZWFkL3Jlc3QpIG9yIGhhbmRzIHRoZSBvYmplY3QgdG8gY29kZSB0aGlzIHJ1bGUgY2Fubm90IHNlZSwgc29cbiAqIG1lbWJlciBkZWFkbmVzcyBjYW5ub3QgYmUgZGVjaWRlZCBsb2NhbGx5LlxuICpcbiAqIEEgbWVtYmVyIGlzIHRoZXJlZm9yZSBmbGFnZ2VkIG9ubHkgd2hlbiBpdCBpcyBuZXZlciByZWZlcmVuY2VkIGJ5IG5hbWUgQU5EXG4gKiB0aGUgb2JqZWN0IG5ldmVyIGVzY2FwZXMgXHUyMDE0IGkuZS4gdGhlIFwiYSBgcGFyYW1zLnhgIHVzYWdlIHdhcyBkZWxldGVkIGJ1dCBgeGBcbiAqIHdhcyBsZWZ0IG9uIHRoZSBpbnRlcmZhY2VcIiBjYXNlLiBBIG1lbWJlciB0aGF0IGlzIGFjdHVhbGx5IHN0aWxsIG5lZWRlZCAocmVhZFxuICogdmlhIGFuIGVzY2FwZSkgaXMgbmV2ZXIgd3JvbmdseSBmbGFnZ2VkOyBhIG1lbWJlciB0aGF0IGlzIGVzY2FwZWQgYnV0IGRlYWRcbiAqIGRvd25zdHJlYW0gaXMgYSB0b2xlcmF0ZWQgZmFsc2UgbmVnYXRpdmUgKGl0cyBkZWFkbmVzcyBpcyBub3QgbG9jYWwpLlxuICpcbiAqIE9ubHkgaW50ZXJmYWNlcyBkZWNsYXJlZCBpbiB0aGUgc2FtZSBmaWxlIGFyZSBjaGVja2VkOyBhbiBpbXBvcnRlZCBwYXJhbWV0ZXJcbiAqIHR5cGUgaXMgc2tpcHBlZC4gT25seSBpZGVudGlmaWVyLW5hbWVkIG1lbWJlcnMgYXJlIHRyYWNrZWQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBSdWxlLFxuICBTY29wZVxufSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcblxuY29uc3QgUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4gPSAvKD86UGFyYW1zfE9wdGlvbnMpJC87XG5cbi8qKiBNZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSBgKlBhcmFtc2AvYCpPcHRpb25zYCBpbnRlcmZhY2UgbWVtYmVyIGlzIG5ldmVyIGFjY2Vzc2VkIGJ5IHRoZSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGl0LiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAndW51c2VkUGFyYW1zTWVtYmVyJztcblxuaW50ZXJmYWNlIElkZW50aWZpZXJCaW5kaW5nIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAnaWRlbnRpZmllcic7XG59XG5cbmludGVyZmFjZSBJbnRlcmZhY2VVc2FnZSB7XG4gIHJlYWRvbmx5IHVzZWQ6IFNldDxzdHJpbmc+O1xuICB1c2VzQWxsOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTWF5YmVUeXBlZE5vZGUge1xuICB0eXBlPzogdW5rbm93bjtcbn1cblxudHlwZSBQYXJhbUJpbmRpbmcgPSBJZGVudGlmaWVyQmluZGluZyB8IFBhdHRlcm5CaW5kaW5nO1xuXG5pbnRlcmZhY2UgUGFyYW1JbmZvIHtcbiAgcmVhZG9ubHkgYmluZGluZzogUGFyYW1CaW5kaW5nO1xuICByZWFkb25seSB0eXBlTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGF0dGVybkJpbmRpbmcge1xuICBwYXR0ZXJuOiBSdWxlLk5vZGU7XG4gIHR5cGU6ICdwYXR0ZXJuJztcbn1cblxuZXhwb3J0IGNvbnN0IG5vVW51c2VkUGFyYW1zTWVtYmVyczogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGludGVyZmFjZUtleU5vZGVzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFJ1bGUuTm9kZT4+KCk7XG4gICAgY29uc3QgdXNhZ2VCeUludGVyZmFjZSA9IG5ldyBNYXA8c3RyaW5nLCBJbnRlcmZhY2VVc2FnZT4oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnOmZ1bmN0aW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiByZWNvcmQobm9kZSlbJ3BhcmFtcyddIGFzIFJ1bGUuTm9kZVtdKSB7XG4gICAgICAgICAgY29uc3QgaW5mbyA9IGdldFBhcmFtSW5mbyhwYXJhbSk7XG4gICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB1c2FnZSA9IGdldE9yQ3JlYXRlVXNhZ2UoaW5mby50eXBlTmFtZSk7XG4gICAgICAgICAgaWYgKGluZm8uYmluZGluZy50eXBlID09PSAncGF0dGVybicpIHtcbiAgICAgICAgICAgIGNvbGxlY3RQYXR0ZXJuTWVtYmVycyhpbmZvLmJpbmRpbmcucGF0dGVybiwgdXNhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlTWVtYmVycyhjb250ZXh0LnNvdXJjZUNvZGUuZ2V0U2NvcGUobm9kZSksIGluZm8uYmluZGluZy5uYW1lLCB1c2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ1Byb2dyYW06ZXhpdCcoKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgW3R5cGVOYW1lLCBrZXlOb2Rlc10gb2YgaW50ZXJmYWNlS2V5Tm9kZXMpIHtcbiAgICAgICAgICBjb25zdCB1c2FnZSA9IHVzYWdlQnlJbnRlcmZhY2UuZ2V0KHR5cGVOYW1lKTtcbiAgICAgICAgICBpZiAoIXVzYWdlIHx8IHVzYWdlLnVzZXNBbGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoY29uc3QgW21lbWJlck5hbWUsIGtleU5vZGVdIG9mIGtleU5vZGVzKSB7XG4gICAgICAgICAgICBpZiAoIXVzYWdlLnVzZWQuaGFzKG1lbWJlck5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lOiB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgICAgIG1lbWJlcjogbWVtYmVyTmFtZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgICAgICAgIG5vZGU6IGtleU5vZGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgVFNJbnRlcmZhY2VEZWNsYXJhdGlvbihub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGdldEludGVyZmFjZU5hbWUobm9kZSk7XG4gICAgICAgIGlmICghUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4udGVzdChuYW1lKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbnRlcmZhY2VLZXlOb2Rlcy5zZXQobmFtZSwgZ2V0SW50ZXJmYWNlTWVtYmVycyhub2RlKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldE9yQ3JlYXRlVXNhZ2UodHlwZU5hbWU6IHN0cmluZyk6IEludGVyZmFjZVVzYWdlIHtcbiAgICAgIGxldCB1c2FnZSA9IHVzYWdlQnlJbnRlcmZhY2UuZ2V0KHR5cGVOYW1lKTtcbiAgICAgIGlmICghdXNhZ2UpIHtcbiAgICAgICAgdXNhZ2UgPSB7IHVzZWQ6IG5ldyBTZXQ8c3RyaW5nPigpLCB1c2VzQWxsOiBmYWxzZSB9O1xuICAgICAgICB1c2FnZUJ5SW50ZXJmYWNlLnNldCh0eXBlTmFtZSwgdXNhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVzYWdlO1xuICAgIH1cbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRmxhZyBgKlBhcmFtc2AvYCpPcHRpb25zYCBpbnRlcmZhY2UgbWVtYmVycyBuZXZlciBhY2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyB0aGVtJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ01lbWJlciBcInt7IG1lbWJlciB9fVwiIG9mIFwie3sgaW50ZXJmYWNlTmFtZSB9fVwiIGlzIG5ldmVyIGFjY2Vzc2VkIGJ5IHRoZSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGl0LiBSZW1vdmUgaXQgKHRoZSBjb21waWxlciB3aWxsIGNhdGNoIGl0IGlmIGl0IGlzIHN0aWxsIG5lZWRlZCBlbHNld2hlcmUpLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZTogb2JqZWN0LCB1c2FnZTogSW50ZXJmYWNlVXNhZ2UpOiB2b2lkIHtcbiAgY29uc3QgcGFyZW50ID0gcmVjb3JkKHJlZmVyZW5jZSlbJ3BhcmVudCddIGFzIFJ1bGUuTm9kZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgcmVjb3JkKHBhcmVudClbJ29iamVjdCddID09PSByZWZlcmVuY2UpIHtcbiAgICBjb2xsZWN0TWVtYmVyQWNjZXNzKHBhcmVudCwgdXNhZ2UpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcicgJiYgcmVjb3JkKHBhcmVudClbJ2luaXQnXSA9PT0gcmVmZXJlbmNlICYmIChyZWNvcmQocGFyZW50KVsnaWQnXSBhcyBSdWxlLk5vZGUpLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJykge1xuICAgIGNvbGxlY3RQYXR0ZXJuTWVtYmVycyhyZWNvcmQocGFyZW50KVsnaWQnXSBhcyBSdWxlLk5vZGUsIHVzYWdlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgb2JqZWN0IGVzY2FwZXMgd2hvbGUgKHBhc3NlZCBhcyBhbiBhcmd1bWVudCwgcmV0dXJuZWQsIHN0b3JlZCwgc3ByZWFkLCAuLi4pOiBldmVyeSBtZW1iZXIgbWF5IGJlIHJlYWQgZWxzZXdoZXJlLlxuICB1c2FnZS51c2VzQWxsID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdE1lbWJlckFjY2Vzcyhub2RlOiBSdWxlLk5vZGUsIHVzYWdlOiBJbnRlcmZhY2VVc2FnZSk6IHZvaWQge1xuICBjb25zdCBjb21wdXRlZCA9IHJlY29yZChub2RlKVsnY29tcHV0ZWQnXSA9PT0gdHJ1ZTtcbiAgY29uc3QgcHJvcGVydHkgPSByZWNvcmQobm9kZSlbJ3Byb3BlcnR5J10gYXMgUnVsZS5Ob2RlO1xuICBpZiAocHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgaWYgKCFjb21wdXRlZCkge1xuICAgICAgdXNhZ2UudXNlZC5hZGQocmVjb3JkKHByb3BlcnR5KVsnbmFtZSddIGFzIHN0cmluZyk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eS50eXBlID09PSAnTGl0ZXJhbCcpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJlY29yZChwcm9wZXJ0eSlbJ3ZhbHVlJ107XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHVzYWdlLnVzZWQuYWRkKHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdFBhdHRlcm5NZW1iZXJzKHBhdHRlcm46IFJ1bGUuTm9kZSwgdXNhZ2U6IEludGVyZmFjZVVzYWdlKTogdm9pZCB7XG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcmVjb3JkKHBhdHRlcm4pWydwcm9wZXJ0aWVzJ10gYXMgUnVsZS5Ob2RlW10pIHtcbiAgICBpZiAocHJvcGVydHkudHlwZSAhPT0gJ1Byb3BlcnR5Jykge1xuICAgICAgLy8gYGNvbnN0IHsgLi4ucmVzdCB9ID0gcGFyYW1zYCByZWFkcyBldmVyeSByZW1haW5pbmcgbWVtYmVyLlxuICAgICAgdXNhZ2UudXNlc0FsbCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlY29yZChwcm9wZXJ0eSlbJ2NvbXB1dGVkJ10gPT09IHRydWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSByZWNvcmQocHJvcGVydHkpWydrZXknXSBhcyBSdWxlLk5vZGU7XG4gICAgaWYgKGtleS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIHVzYWdlLnVzZWQuYWRkKHJlY29yZChrZXkpWyduYW1lJ10gYXMgc3RyaW5nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdFJlZmVyZW5jZU1lbWJlcnMoc2NvcGU6IFNjb3BlLlNjb3BlLCBwYXJhbU5hbWU6IHN0cmluZywgdXNhZ2U6IEludGVyZmFjZVVzYWdlKTogdm9pZCB7XG4gIGNvbnN0IHZhcmlhYmxlID0gZW5zdXJlTm9uTnVsbGFibGUoc2NvcGUuc2V0LmdldChwYXJhbU5hbWUpKTtcbiAgZm9yIChjb25zdCByZWZlcmVuY2Ugb2YgdmFyaWFibGUucmVmZXJlbmNlcykge1xuICAgIGNsYXNzaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZS5pZGVudGlmaWVyLCB1c2FnZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SW50ZXJmYWNlTWVtYmVycyhub2RlOiBSdWxlLk5vZGUpOiBNYXA8c3RyaW5nLCBSdWxlLk5vZGU+IHtcbiAgY29uc3QgbWVtYmVycyA9IG5ldyBNYXA8c3RyaW5nLCBSdWxlLk5vZGU+KCk7XG4gIGNvbnN0IGludGVyZmFjZUJvZHkgPSByZWNvcmQobm9kZSlbJ2JvZHknXSBhcyBSdWxlLk5vZGU7XG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHJlY29yZChpbnRlcmZhY2VCb2R5KVsnYm9keSddIGFzIFJ1bGUuTm9kZVtdKSB7XG4gICAgaWYgKG5vZGVUeXBlKHNpZ25hdHVyZSkgIT09ICdUU1Byb3BlcnR5U2lnbmF0dXJlJyAmJiBub2RlVHlwZShzaWduYXR1cmUpICE9PSAnVFNNZXRob2RTaWduYXR1cmUnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlY29yZChzaWduYXR1cmUpWydjb21wdXRlZCddID09PSB0cnVlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gcmVjb3JkKHNpZ25hdHVyZSlbJ2tleSddIGFzIFJ1bGUuTm9kZTtcbiAgICBpZiAoa2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgbWVtYmVycy5zZXQocmVjb3JkKGtleSlbJ25hbWUnXSBhcyBzdHJpbmcsIGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtZW1iZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRJbnRlcmZhY2VOYW1lKG5vZGU6IFJ1bGUuTm9kZSk6IHN0cmluZyB7XG4gIGNvbnN0IGlkID0gcmVjb3JkKG5vZGUpWydpZCddIGFzIFJ1bGUuTm9kZTtcbiAgcmV0dXJuIHJlY29yZChpZClbJ25hbWUnXSBhcyBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtSW5mbyhwYXJhbTogUnVsZS5Ob2RlKTogUGFyYW1JbmZvIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYWN0dWFsUGFyYW0gPSBub2RlVHlwZShwYXJhbSkgPT09ICdUU1BhcmFtZXRlclByb3BlcnR5JyA/IHJlY29yZChwYXJhbSlbJ3BhcmFtZXRlciddIGFzIFJ1bGUuTm9kZSA6IHBhcmFtO1xuXG4gIGNvbnN0IHR5cGVOYW1lID0gZ2V0VHlwZVJlZmVyZW5jZU5hbWUoYWN0dWFsUGFyYW0pO1xuICBpZiAoIXR5cGVOYW1lIHx8ICFQQVJBTVNfT1BUSU9OU19TVUZGSVhfUEFUVEVSTi50ZXN0KHR5cGVOYW1lKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoYWN0dWFsUGFyYW0udHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgcmV0dXJuIHsgYmluZGluZzogeyBuYW1lOiByZWNvcmQoYWN0dWFsUGFyYW0pWyduYW1lJ10gYXMgc3RyaW5nLCB0eXBlOiAnaWRlbnRpZmllcicgfSwgdHlwZU5hbWUgfTtcbiAgfVxuXG4gIGlmIChhY3R1YWxQYXJhbS50eXBlID09PSAnT2JqZWN0UGF0dGVybicpIHtcbiAgICByZXR1cm4geyBiaW5kaW5nOiB7IHBhdHRlcm46IGFjdHVhbFBhcmFtLCB0eXBlOiAncGF0dGVybicgfSwgdHlwZU5hbWUgfTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFR5cGVSZWZlcmVuY2VOYW1lKHBhcmFtOiBSdWxlLk5vZGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBhbm5vdGF0aW9uID0gcmVjb3JkKHBhcmFtKVsndHlwZUFubm90YXRpb24nXTtcbiAgaWYgKCFpc05vZGUoYW5ub3RhdGlvbikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdHlwZU5vZGUgPSByZWNvcmQoYW5ub3RhdGlvbilbJ3R5cGVBbm5vdGF0aW9uJ10gYXMgUnVsZS5Ob2RlO1xuICBpZiAobm9kZVR5cGUodHlwZU5vZGUpICE9PSAnVFNUeXBlUmVmZXJlbmNlJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0eXBlTmFtZSA9IHJlY29yZCh0eXBlTm9kZSlbJ3R5cGVOYW1lJ10gYXMgUnVsZS5Ob2RlO1xuICBpZiAodHlwZU5hbWUudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcmVjb3JkKHR5cGVOYW1lKVsnbmFtZSddIGFzIHN0cmluZztcbn1cblxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUnVsZS5Ob2RlIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mICh2YWx1ZSBhcyBNYXliZVR5cGVkTm9kZSkudHlwZSA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIG5vZGVUeXBlKG5vZGU6IFJ1bGUuTm9kZSk6IHN0cmluZyB7XG4gIHJldHVybiByZWNvcmQobm9kZSlbJ3R5cGUnXSBhcyBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHJlY29yZChub2RlOiBvYmplY3QpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiBub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQ0EsU0FBUyx5QkFBeUI7QUFFbEMsTUFBTSxnQ0FBZ0M7QUFHL0IsTUFBTSxhQUFhO0FBNEJuQixNQUFNLHdCQUF5QztBQUFBLEVBQ3BELE9BQU8sU0FBUztBQUNkLFVBQU0sb0JBQW9CLG9CQUFJLElBQW9DO0FBQ2xFLFVBQU0sbUJBQW1CLG9CQUFJLElBQTRCO0FBRXpELFdBQU87QUFBQSxNQUNMLFlBQVksTUFBdUI7QUFDakMsbUJBQVcsU0FBUyxPQUFPLElBQUksRUFBRSxRQUFRLEdBQWtCO0FBQ3pELGdCQUFNLE9BQU8sYUFBYSxLQUFLO0FBQy9CLGNBQUksQ0FBQyxNQUFNO0FBQ1Q7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sUUFBUSxpQkFBaUIsS0FBSyxRQUFRO0FBQzVDLGNBQUksS0FBSyxRQUFRLFNBQVMsV0FBVztBQUNuQyxrQ0FBc0IsS0FBSyxRQUFRLFNBQVMsS0FBSztBQUFBLFVBQ25ELE9BQU87QUFDTCxvQ0FBd0IsUUFBUSxXQUFXLFNBQVMsSUFBSSxHQUFHLEtBQUssUUFBUSxNQUFNLEtBQUs7QUFBQSxVQUNyRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsTUFDQSxpQkFBdUI7QUFDckIsbUJBQVcsQ0FBQyxVQUFVLFFBQVEs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
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzXG4gKlxuICogRmxhZ3MgbWVtYmVycyBvZiBhIGAqUGFyYW1zYCAvIGAqT3B0aW9uc2AgcGFyYW1ldGVyLWJhZyBpbnRlcmZhY2UgdGhhdCBhcmVcbiAqIG5ldmVyIGFjY2Vzc2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24vbWV0aG9kL2NvbnN0cnVjdG9yIHRoYXQgcmVjZWl2ZXMgdGhlXG4gKiBpbnRlcmZhY2UgYXMgYSBwYXJhbWV0ZXIuXG4gKlxuICogRGV0ZWN0aW9uIGlzIHBlci1mdW5jdGlvbiwgdXNpbmcgc2NvcGUgYW5hbHlzaXMgdG8gZmluZCB0aGUgcmVhbCByZWZlcmVuY2VzXG4gKiB0byB0aGUgcGFyYW1ldGVyIChub3QgdW5yZWxhdGVkIHNhbWUtbmFtZWQgaWRlbnRpZmllcnMpLiBBIG1lbWJlciBjb3VudHMgYXNcbiAqIHVzZWQgd2hlbiBpdCBpcyByZWZlcmVuY2VkIGJ5IG5hbWUgXHUyMDE0IGBwYXJhbXMubWVtYmVyYCwgYHBhcmFtc1snbWVtYmVyJ11gLCBvclxuICogYGNvbnN0IHsgbWVtYmVyIH0gPSBwYXJhbXNgIChwbHVzIGEgZGVzdHJ1Y3R1cmVkIHNpZ25hdHVyZVxuICogYGZuKHsgbWVtYmVyIH06IEZvb1BhcmFtcylgKS5cbiAqXG4gKiBDcnVjaWFsbHksIGlmIHRoZSBvYmplY3QgZXZlciBFU0NBUEVTIHdob2xlIFx1MjAxNCBzcHJlYWQgKGB7IC4uLnBhcmFtcyB9YCksIHJlc3RcbiAqIChgY29uc3QgeyAuLi5yZXN0IH0gPSBwYXJhbXNgKSwgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IChgZihwYXJhbXMpYCksIHJldHVybmVkLFxuICogb3Igc3RvcmVkIChgdGhpcy5wYXJhbXMgPSBwYXJhbXNgKSBcdTIwMTQgZXZlcnkgbWVtYmVyIGlzIHRyZWF0ZWQgYXMgdXNlZCBhbmRcbiAqIG5vdGhpbmcgaXMgcmVwb3J0ZWQgZm9yIHRoYXQgaW50ZXJmYWNlLiBTdWNoIGFuIGVzY2FwZSBlaXRoZXIgcmVhZHMgZXZlcnlcbiAqIG1lbWJlciAoc3ByZWFkL3Jlc3QpIG9yIGhhbmRzIHRoZSBvYmplY3QgdG8gY29kZSB0aGlzIHJ1bGUgY2Fubm90IHNlZSwgc29cbiAqIG1lbWJlciBkZWFkbmVzcyBjYW5ub3QgYmUgZGVjaWRlZCBsb2NhbGx5LlxuICpcbiAqIEEgbWVtYmVyIGlzIHRoZXJlZm9yZSBmbGFnZ2VkIG9ubHkgd2hlbiBpdCBpcyBuZXZlciByZWZlcmVuY2VkIGJ5IG5hbWUgQU5EXG4gKiB0aGUgb2JqZWN0IG5ldmVyIGVzY2FwZXMgXHUyMDE0IGkuZS4gdGhlIFwiYSBgcGFyYW1zLnhgIHVzYWdlIHdhcyBkZWxldGVkIGJ1dCBgeGBcbiAqIHdhcyBsZWZ0IG9uIHRoZSBpbnRlcmZhY2VcIiBjYXNlLiBBIG1lbWJlciB0aGF0IGlzIGFjdHVhbGx5IHN0aWxsIG5lZWRlZCAocmVhZFxuICogdmlhIGFuIGVzY2FwZSkgaXMgbmV2ZXIgd3JvbmdseSBmbGFnZ2VkOyBhIG1lbWJlciB0aGF0IGlzIGVzY2FwZWQgYnV0IGRlYWRcbiAqIGRvd25zdHJlYW0gaXMgYSB0b2xlcmF0ZWQgZmFsc2UgbmVnYXRpdmUgKGl0cyBkZWFkbmVzcyBpcyBub3QgbG9jYWwpLlxuICpcbiAqIE9ubHkgaW50ZXJmYWNlcyBkZWNsYXJlZCBpbiB0aGUgc2FtZSBmaWxlIGFyZSBjaGVja2VkOyBhbiBpbXBvcnRlZCBwYXJhbWV0ZXJcbiAqIHR5cGUgaXMgc2tpcHBlZC4gT25seSBpZGVudGlmaWVyLW5hbWVkIG1lbWJlcnMgYXJlIHRyYWNrZWQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBSdWxlLFxuICBTY29wZVxufSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcblxuY29uc3QgUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4gPSAvKD86UGFyYW1zfE9wdGlvbnMpJC87XG5cbi8qKiBNZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSBgKlBhcmFtc2AvYCpPcHRpb25zYCBpbnRlcmZhY2UgbWVtYmVyIGlzIG5ldmVyIGFjY2Vzc2VkIGJ5IHRoZSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGl0LiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAndW51c2VkUGFyYW1zTWVtYmVyJztcblxuaW50ZXJmYWNlIElkZW50aWZpZXJCaW5kaW5nIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAnaWRlbnRpZmllcic7XG59XG5cbmludGVyZmFjZSBJbnRlcmZhY2VVc2FnZSB7XG4gIHJlYWRvbmx5IHVzZWQ6IFNldDxzdHJpbmc+O1xuICB1c2VzQWxsOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTWF5YmVUeXBlZE5vZGUge1xuICB0eXBlPzogdW5rbm93bjtcbn1cblxudHlwZSBQYXJhbUJpbmRpbmcgPSBJZGVudGlmaWVyQmluZGluZyB8IFBhdHRlcm5CaW5kaW5nO1xuXG5pbnRlcmZhY2UgUGFyYW1JbmZvIHtcbiAgcmVhZG9ubHkgYmluZGluZzogUGFyYW1CaW5kaW5nO1xuICByZWFkb25seSB0eXBlTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGF0dGVybkJpbmRpbmcge1xuICBwYXR0ZXJuOiBSdWxlLk5vZGU7XG4gIHR5cGU6ICdwYXR0ZXJuJztcbn1cblxuZXhwb3J0IGNvbnN0IG5vVW51c2VkUGFyYW1zTWVtYmVyczogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGludGVyZmFjZUtleU5vZGVzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFJ1bGUuTm9kZT4+KCk7XG4gICAgY29uc3QgdXNhZ2VCeUludGVyZmFjZSA9IG5ldyBNYXA8c3RyaW5nLCBJbnRlcmZhY2VVc2FnZT4oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnOmZ1bmN0aW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiByZWNvcmQobm9kZSlbJ3BhcmFtcyddIGFzIFJ1bGUuTm9kZVtdKSB7XG4gICAgICAgICAgY29uc3QgaW5mbyA9IGdldFBhcmFtSW5mbyhwYXJhbSk7XG4gICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB1c2FnZSA9IGdldE9yQ3JlYXRlVXNhZ2UoaW5mby50eXBlTmFtZSk7XG4gICAgICAgICAgaWYgKGluZm8uYmluZGluZy50eXBlID09PSAncGF0dGVybicpIHtcbiAgICAgICAgICAgIGNvbGxlY3RQYXR0ZXJuTWVtYmVycyhpbmZvLmJpbmRpbmcucGF0dGVybiwgdXNhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlTWVtYmVycyh7XG4gICAgICAgICAgICAgIHBhcmFtTmFtZTogaW5mby5iaW5kaW5nLm5hbWUsXG4gICAgICAgICAgICAgIHNjb3BlOiBjb250ZXh0LnNvdXJjZUNvZGUuZ2V0U2NvcGUobm9kZSksXG4gICAgICAgICAgICAgIHVzYWdlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnUHJvZ3JhbTpleGl0JygpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBbdHlwZU5hbWUsIGtleU5vZGVzXSBvZiBpbnRlcmZhY2VLZXlOb2Rlcykge1xuICAgICAgICAgIGNvbnN0IHVzYWdlID0gdXNhZ2VCeUludGVyZmFjZS5nZXQodHlwZU5hbWUpO1xuICAgICAgICAgIGlmICghdXNhZ2UgfHwgdXNhZ2UudXNlc0FsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBbbWVtYmVyTmFtZSwga2V5Tm9kZV0gb2Yga2V5Tm9kZXMpIHtcbiAgICAgICAgICAgIGlmICghdXNhZ2UudXNlZC5oYXMobWVtYmVyTmFtZSkpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWU6IHR5cGVOYW1lLFxuICAgICAgICAgICAgICAgICAgbWVtYmVyOiBtZW1iZXJOYW1lXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSUQsXG4gICAgICAgICAgICAgICAgbm9kZToga2V5Tm9kZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBUU0ludGVyZmFjZURlY2xhcmF0aW9uKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuYW1lID0gZ2V0SW50ZXJmYWNlTmFtZShub2RlKTtcbiAgICAgICAgaWYgKCFQQVJBTVNfT1BUSU9OU19TVUZGSVhfUEFUVEVSTi50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGludGVyZmFjZUtleU5vZGVzLnNldChuYW1lLCBnZXRJbnRlcmZhY2VNZW1iZXJzKG5vZGUpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0T3JDcmVhdGVVc2FnZSh0eXBlTmFtZTogc3RyaW5nKTogSW50ZXJmYWNlVXNhZ2Uge1xuICAgICAgbGV0IHVzYWdlID0gdXNhZ2VCeUludGVyZmFjZS5nZXQodHlwZU5hbWUpO1xuICAgICAgaWYgKCF1c2FnZSkge1xuICAgICAgICB1c2FnZSA9IHsgdXNlZDogbmV3IFNldDxzdHJpbmc+KCksIHVzZXNBbGw6IGZhbHNlIH07XG4gICAgICAgIHVzYWdlQnlJbnRlcmZhY2Uuc2V0KHR5cGVOYW1lLCB1c2FnZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXNhZ2U7XG4gICAgfVxuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdGbGFnIGAqUGFyYW1zYC9gKk9wdGlvbnNgIGludGVyZmFjZSBtZW1iZXJzIG5ldmVyIGFjY2Vzc2VkIGJ5IHRoZSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIHRoZW0nXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnTWVtYmVyIFwie3sgbWVtYmVyIH19XCIgb2YgXCJ7eyBpbnRlcmZhY2VOYW1lIH19XCIgaXMgbmV2ZXIgYWNjZXNzZWQgYnkgdGhlIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgaXQuIFJlbW92ZSBpdCAodGhlIGNvbXBpbGVyIHdpbGwgY2F0Y2ggaXQgaWYgaXQgaXMgc3RpbGwgbmVlZGVkIGVsc2V3aGVyZSkuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbidcbiAgfVxufTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29sbGVjdFJlZmVyZW5jZU1lbWJlcnN9LlxuICovXG5pbnRlcmZhY2UgQ29sbGVjdFJlZmVyZW5jZU1lbWJlcnNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciB3aG9zZSByZWZlcmVuY2VzIGFyZSBpbnNwZWN0ZWQuXG4gICAqL1xuICByZWFkb25seSBwYXJhbU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNjb3BlIGluIHdoaWNoIHRoZSBwYXJhbWV0ZXIgaXMgYm91bmQuXG4gICAqL1xuICByZWFkb25seSBzY29wZTogU2NvcGUuU2NvcGU7XG5cbiAgLyoqXG4gICAqIFRoZSB1c2FnZSBhY2N1bXVsYXRvciB0byByZWNvcmQgYWNjZXNzZWQgbWVtYmVycyBpbnRvLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNhZ2U6IEludGVyZmFjZVVzYWdlO1xufVxuXG5mdW5jdGlvbiBjbGFzc2lmeVJlZmVyZW5jZShyZWZlcmVuY2U6IG9iamVjdCwgdXNhZ2U6IEludGVyZmFjZVVzYWdlKTogdm9pZCB7XG4gIGNvbnN0IHBhcmVudCA9IHJlY29yZChyZWZlcmVuY2UpWydwYXJlbnQnXSBhcyBSdWxlLk5vZGU7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmIHJlY29yZChwYXJlbnQpWydvYmplY3QnXSA9PT0gcmVmZXJlbmNlKSB7XG4gICAgY29sbGVjdE1lbWJlckFjY2VzcyhwYXJlbnQsIHVzYWdlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGFyZW50LnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0b3InICYmIHJlY29yZChwYXJlbnQpWydpbml0J10gPT09IHJlZmVyZW5jZSAmJiAocmVjb3JkKHBhcmVudClbJ2lkJ10gYXMgUnVsZS5Ob2RlKS50eXBlID09PSAnT2JqZWN0UGF0dGVybicpIHtcbiAgICBjb2xsZWN0UGF0dGVybk1lbWJlcnMocmVjb3JkKHBhcmVudClbJ2lkJ10gYXMgUnVsZS5Ob2RlLCB1c2FnZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVGhlIG9iamVjdCBlc2NhcGVzIHdob2xlIChwYXNzZWQgYXMgYW4gYXJndW1lbnQsIHJldHVybmVkLCBzdG9yZWQsIHNwcmVhZCwgLi4uKTogZXZlcnkgbWVtYmVyIG1heSBiZSByZWFkIGVsc2V3aGVyZS5cbiAgdXNhZ2UudXNlc0FsbCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RNZW1iZXJBY2Nlc3Mobm9kZTogUnVsZS5Ob2RlLCB1c2FnZTogSW50ZXJmYWNlVXNhZ2UpOiB2b2lkIHtcbiAgY29uc3QgY29tcHV0ZWQgPSByZWNvcmQobm9kZSlbJ2NvbXB1dGVkJ10gPT09IHRydWU7XG4gIGNvbnN0IHByb3BlcnR5ID0gcmVjb3JkKG5vZGUpWydwcm9wZXJ0eSddIGFzIFJ1bGUuTm9kZTtcbiAgaWYgKHByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgIGlmICghY29tcHV0ZWQpIHtcbiAgICAgIHVzYWdlLnVzZWQuYWRkKHJlY29yZChwcm9wZXJ0eSlbJ25hbWUnXSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydHkudHlwZSA9PT0gJ0xpdGVyYWwnKSB7XG4gICAgY29uc3QgdmFsdWUgPSByZWNvcmQocHJvcGVydHkpWyd2YWx1ZSddO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB1c2FnZS51c2VkLmFkZCh2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RQYXR0ZXJuTWVtYmVycyhwYXR0ZXJuOiBSdWxlLk5vZGUsIHVzYWdlOiBJbnRlcmZhY2VVc2FnZSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHJlY29yZChwYXR0ZXJuKVsncHJvcGVydGllcyddIGFzIFJ1bGUuTm9kZVtdKSB7XG4gICAgaWYgKHByb3BlcnR5LnR5cGUgIT09ICdQcm9wZXJ0eScpIHtcbiAgICAgIC8vIGBjb25zdCB7IC4uLnJlc3QgfSA9IHBhcmFtc2AgcmVhZHMgZXZlcnkgcmVtYWluaW5nIG1lbWJlci5cbiAgICAgIHVzYWdlLnVzZXNBbGwgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZWNvcmQocHJvcGVydHkpWydjb21wdXRlZCddID09PSB0cnVlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gcmVjb3JkKHByb3BlcnR5KVsna2V5J10gYXMgUnVsZS5Ob2RlO1xuICAgIGlmIChrZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICB1c2FnZS51c2VkLmFkZChyZWNvcmQoa2V5KVsnbmFtZSddIGFzIHN0cmluZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RSZWZlcmVuY2VNZW1iZXJzKHBhcmFtczogQ29sbGVjdFJlZmVyZW5jZU1lbWJlcnNQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBwYXJhbU5hbWUsIHNjb3BlLCB1c2FnZSB9ID0gcGFyYW1zO1xuICBjb25zdCB2YXJpYWJsZSA9IGVuc3VyZU5vbk51bGxhYmxlKHNjb3BlLnNldC5nZXQocGFyYW1OYW1lKSk7XG4gIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHZhcmlhYmxlLnJlZmVyZW5jZXMpIHtcbiAgICBjbGFzc2lmeVJlZmVyZW5jZShyZWZlcmVuY2UuaWRlbnRpZmllciwgdXNhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEludGVyZmFjZU1lbWJlcnMobm9kZTogUnVsZS5Ob2RlKTogTWFwPHN0cmluZywgUnVsZS5Ob2RlPiB7XG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWFwPHN0cmluZywgUnVsZS5Ob2RlPigpO1xuICBjb25zdCBpbnRlcmZhY2VCb2R5ID0gcmVjb3JkKG5vZGUpWydib2R5J10gYXMgUnVsZS5Ob2RlO1xuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiByZWNvcmQoaW50ZXJmYWNlQm9keSlbJ2JvZHknXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgIGlmIChub2RlVHlwZShzaWduYXR1cmUpICE9PSAnVFNQcm9wZXJ0eVNpZ25hdHVyZScgJiYgbm9kZVR5cGUoc2lnbmF0dXJlKSAhPT0gJ1RTTWV0aG9kU2lnbmF0dXJlJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZWNvcmQoc2lnbmF0dXJlKVsnY29tcHV0ZWQnXSA9PT0gdHJ1ZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHJlY29yZChzaWduYXR1cmUpWydrZXknXSBhcyBSdWxlLk5vZGU7XG4gICAgaWYgKGtleS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIG1lbWJlcnMuc2V0KHJlY29yZChrZXkpWyduYW1lJ10gYXMgc3RyaW5nLCBrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVtYmVycztcbn1cblxuZnVuY3Rpb24gZ2V0SW50ZXJmYWNlTmFtZShub2RlOiBSdWxlLk5vZGUpOiBzdHJpbmcge1xuICBjb25zdCBpZCA9IHJlY29yZChub2RlKVsnaWQnXSBhcyBSdWxlLk5vZGU7XG4gIHJldHVybiByZWNvcmQoaWQpWyduYW1lJ10gYXMgc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbUluZm8ocGFyYW06IFJ1bGUuTm9kZSk6IFBhcmFtSW5mbyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGFjdHVhbFBhcmFtID0gbm9kZVR5cGUocGFyYW0pID09PSAnVFNQYXJhbWV0ZXJQcm9wZXJ0eScgPyByZWNvcmQocGFyYW0pWydwYXJhbWV0ZXInXSBhcyBSdWxlLk5vZGUgOiBwYXJhbTtcblxuICBjb25zdCB0eXBlTmFtZSA9IGdldFR5cGVSZWZlcmVuY2VOYW1lKGFjdHVhbFBhcmFtKTtcbiAgaWYgKCF0eXBlTmFtZSB8fCAhUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4udGVzdCh0eXBlTmFtZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGFjdHVhbFBhcmFtLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiB7IGJpbmRpbmc6IHsgbmFtZTogcmVjb3JkKGFjdHVhbFBhcmFtKVsnbmFtZSddIGFzIHN0cmluZywgdHlwZTogJ2lkZW50aWZpZXInIH0sIHR5cGVOYW1lIH07XG4gIH1cblxuICBpZiAoYWN0dWFsUGFyYW0udHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nKSB7XG4gICAgcmV0dXJuIHsgYmluZGluZzogeyBwYXR0ZXJuOiBhY3R1YWxQYXJhbSwgdHlwZTogJ3BhdHRlcm4nIH0sIHR5cGVOYW1lIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRUeXBlUmVmZXJlbmNlTmFtZShwYXJhbTogUnVsZS5Ob2RlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW5ub3RhdGlvbiA9IHJlY29yZChwYXJhbSlbJ3R5cGVBbm5vdGF0aW9uJ107XG4gIGlmICghaXNOb2RlKGFubm90YXRpb24pKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHR5cGVOb2RlID0gcmVjb3JkKGFubm90YXRpb24pWyd0eXBlQW5ub3RhdGlvbiddIGFzIFJ1bGUuTm9kZTtcbiAgaWYgKG5vZGVUeXBlKHR5cGVOb2RlKSAhPT0gJ1RTVHlwZVJlZmVyZW5jZScpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdHlwZU5hbWUgPSByZWNvcmQodHlwZU5vZGUpWyd0eXBlTmFtZSddIGFzIFJ1bGUuTm9kZTtcbiAgaWYgKHR5cGVOYW1lLnR5cGUgIT09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHJlY29yZCh0eXBlTmFtZSlbJ25hbWUnXSBhcyBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJ1bGUuTm9kZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiAodmFsdWUgYXMgTWF5YmVUeXBlZE5vZGUpLnR5cGUgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBub2RlVHlwZShub2RlOiBSdWxlLk5vZGUpOiBzdHJpbmcge1xuICByZXR1cm4gcmVjb3JkKG5vZGUpWyd0eXBlJ10gYXMgc3RyaW5nO1xufVxuXG5mdW5jdGlvbiByZWNvcmQobm9kZTogb2JqZWN0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gbm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FB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
|